| 29 | import { getAWS, execute } from '../aws/SDK2'; |
| 30 | |
| 31 | class AWS2LambdaPlugin implements SwPlugin { |
| 32 | readonly module = 'aws-sdk'; |
| 33 | readonly versions = '2.*'; |
| 34 | |
| 35 | install(installer: PluginInstaller): void { |
| 36 | const AWS = getAWS(installer); |
| 37 | const _Lambda = AWS.Lambda; |
| 38 | |
| 39 | function Lambda(this: any) { |
| 40 | const lambda = _Lambda.apply(this, arguments); |
| 41 | const _invoke = lambda.invoke; |
| 42 | |
| 43 | lambda.invoke = function (params: any, callback: any) { |
| 44 | if (params.InvocationType === 'DryRun') return _invoke.call(this, params, callback); |
| 45 | |
| 46 | let funcName = params.FunctionName; |
| 47 | const li = funcName.lastIndexOf(':'); |
| 48 | let name; |
| 49 | |
| 50 | if (li === -1) name = funcName; |
| 51 | else { |
| 52 | // my-function:v1 |
| 53 | if (funcName.indexOf(':') === -1) name = funcName.slice(li); |
| 54 | else name = funcName.slice(li + 1); // 123456789012:function:my-function, arn:aws:lambda:us-west-2:123456789012:function:my-function |
| 55 | } |
| 56 | |
| 57 | const span = ContextManager.current.newExitSpan( |
| 58 | `AWS/Lambda/invoke/${name || ''}`, |
| 59 | Component.AWSLAMBDA_FUNCTION, |
| 60 | Component.HTTP, |
| 61 | ); |
| 62 | |
| 63 | span.component = Component.AWSLAMBDA_FUNCTION; |
| 64 | span.layer = SpanLayer.HTTP; |
| 65 | |
| 66 | if (li !== -1) span.tag(Tag.arn(funcName)); |
| 67 | |
| 68 | if (config.awsLambdaChain) { |
| 69 | let payload = params.Payload; |
| 70 | |
| 71 | if (payload instanceof Buffer) payload = payload.toString(); |
| 72 | |
| 73 | if (typeof payload === 'string') { |
| 74 | const traceid = JSON.stringify(`${span.inject().value}/${hostname()}`); |
| 75 | const keyTrace = JSON.stringify(KeyTrace); |
| 76 | const keyParams = JSON.stringify(KeyParams); |
| 77 | |
| 78 | if (payload.match(/^\s*{\s*}\s*$/)) payload = `{${keyTrace}:${traceid}}`; |
| 79 | else if (payload.match(/^\s*{/)) |
| 80 | payload = `{${keyTrace}:${traceid},${payload.slice(payload.indexOf('{') + 1)}`; |
| 81 | else payload = `{${keyTrace}:${traceid},${keyParams}:${payload}}`; |
| 82 | |
| 83 | params = Object.assign({}, params, { Payload: payload }); |
| 84 | } |
| 85 | } |
| 86 | |
| 87 | return execute(span, this, _invoke, params, callback); |
| 88 | }; |
nothing calls this directly
no outgoing calls
no test coverage detected