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);
}