function setApiGatewayData()

in lib/lambda.js [120:221]


function setApiGatewayData(agent, trans, event, context, faasId, isColdStart) {
  const requestContext = event.requestContext;

  let name;
  let pseudoReq;
  if (requestContext.http) {
    // 2.0
    if (agent._conf.usePathAsTransactionName) {
      name = `${requestContext.http.method} ${requestContext.http.path}`;
    } else {
      // Get a routeKeyPath from the routeKey:
      //    GET /some/path  ->  /some/path
      //    ANY /some/path  ->  /some/path
      //    $default        ->  /$default
      let routeKeyPath = requestContext.routeKey;
      const spaceIdx = routeKeyPath.indexOf(' ');
      if (spaceIdx === -1) {
        routeKeyPath = '/' + routeKeyPath;
      } else {
        routeKeyPath = routeKeyPath.slice(spaceIdx + 1);
      }
      name = `${requestContext.http.method} /${requestContext.stage}${routeKeyPath}`;
    }
    pseudoReq = {
      httpVersion: requestContext.http.protocol
        ? requestContext.http.protocol.split('/')[1] // 'HTTP/1.1' -> '1.1'
        : undefined,
      method: requestContext.http.method,
      url:
        event.rawPath +
        (event.rawQueryString ? '?' + event.rawQueryString : ''),
      headers: event.normedHeaders || {},
      socket: { remoteAddress: requestContext.http.sourceIp },
      body: event.body,
    };
  } else {
    // payload version format 1.0
    if (agent._conf.usePathAsTransactionName) {
      name = `${requestContext.httpMethod} ${requestContext.path}`;
    } else {
      name = `${requestContext.httpMethod} /${requestContext.stage}${requestContext.resourcePath}`;
    }
    pseudoReq = {
      httpVersion: requestContext.protocol
        ? requestContext.protocol.split('/')[1] // 'HTTP/1.1' -> '1.1'
        : undefined,
      method: requestContext.httpMethod,
      url:
        requestContext.path +
        (event.queryStringParameters
          ? '?' + querystring.encode(event.queryStringParameters)
          : ''),
      headers: event.normedHeaders || {},
      socket: {
        remoteAddress:
          requestContext.identity && requestContext.identity.sourceIp,
      },
      // Limitation: Note that `getContextFromRequest` does *not* use this body,
      // because API Gateway payload format 1.0 does not include the
      // Content-Length header from the original request.
      body: event.body,
    };
  }
  trans.type = 'request';
  trans.setDefaultName(name);
  trans.req = pseudoReq; // Used by parsers.getContextFromRequest() for adding context to transaction and errors.

  trans.setFaas(
    getFaasData(context, faasId, isColdStart, 'http', requestContext.requestId),
  );

  const serviceContext = {
    origin: {
      name: requestContext.domainName,
      id: requestContext.apiId,
      version: event.version || '1.0',
    },
  };
  trans.setServiceContext(serviceContext);

  const originSvcName =
    // `<url-id>.lambda-url.<region>.on.aws` indicates this is a Lambda URL.
    requestContext.domainName &&
    requestContext.domainPrefix &&
    requestContext.domainName.startsWith(
      requestContext.domainPrefix + '.lambda-url.',
    )
      ? 'lambda url'
      : 'api gateway';
  const cloudContext = {
    origin: {
      provider: 'aws',
      service: {
        name: originSvcName,
      },
      account: {
        id: requestContext.accountId,
      },
    },
  };
  trans.setCloudContext(cloudContext);
}