@datadog/datadog-ci-plugin-lambda 3.21.0 → 3.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/cli.d.ts +1 -0
  2. package/dist/cli.js +7 -0
  3. package/dist/cli.js.map +1 -0
  4. package/dist/commands/flare.d.ts +82 -0
  5. package/dist/commands/flare.js +636 -0
  6. package/dist/commands/flare.js.map +1 -0
  7. package/dist/commands/instrument.d.ts +10 -0
  8. package/dist/commands/instrument.js +405 -0
  9. package/dist/commands/instrument.js.map +1 -0
  10. package/dist/commands/uninstrument.d.ts +8 -0
  11. package/dist/commands/uninstrument.js +264 -0
  12. package/dist/commands/uninstrument.js.map +1 -0
  13. package/dist/constants.d.ts +87 -0
  14. package/dist/constants.js +159 -0
  15. package/dist/constants.js.map +1 -0
  16. package/dist/functions/commons.d.ts +131 -0
  17. package/dist/functions/commons.js +473 -0
  18. package/dist/functions/commons.js.map +1 -0
  19. package/dist/functions/instrument.d.ts +7 -0
  20. package/dist/functions/instrument.js +271 -0
  21. package/dist/functions/instrument.js.map +1 -0
  22. package/dist/functions/uninstrument.d.ts +7 -0
  23. package/dist/functions/uninstrument.js +156 -0
  24. package/dist/functions/uninstrument.js.map +1 -0
  25. package/dist/functions/versionChecker.d.ts +3 -0
  26. package/dist/functions/versionChecker.js +38 -0
  27. package/dist/functions/versionChecker.js.map +1 -0
  28. package/dist/interfaces.d.ts +91 -0
  29. package/dist/interfaces.js +3 -0
  30. package/dist/interfaces.js.map +1 -0
  31. package/dist/loggroup.d.ts +17 -0
  32. package/dist/loggroup.js +140 -0
  33. package/dist/loggroup.js.map +1 -0
  34. package/dist/prompt.d.ts +12 -0
  35. package/dist/prompt.js +265 -0
  36. package/dist/prompt.js.map +1 -0
  37. package/dist/renderers/__mocks__/instrument-uninstrument-renderer.d.ts +2 -0
  38. package/dist/renderers/__mocks__/instrument-uninstrument-renderer.js +11 -0
  39. package/dist/renderers/__mocks__/instrument-uninstrument-renderer.js.map +1 -0
  40. package/dist/renderers/common-renderer.d.ts +16 -0
  41. package/dist/renderers/common-renderer.js +23 -0
  42. package/dist/renderers/common-renderer.js.map +1 -0
  43. package/dist/renderers/instrument-uninstrument-renderer.d.ts +397 -0
  44. package/dist/renderers/instrument-uninstrument-renderer.js +506 -0
  45. package/dist/renderers/instrument-uninstrument-renderer.js.map +1 -0
  46. package/dist/tags.d.ts +8 -0
  47. package/dist/tags.js +74 -0
  48. package/dist/tags.js.map +1 -0
  49. package/package.json +9 -3
@@ -0,0 +1,131 @@
1
+ import { Writable } from 'stream';
2
+ import { CloudWatchLogsClient } from '@aws-sdk/client-cloudwatch-logs';
3
+ import { LambdaClient, FunctionConfiguration as LFunctionConfiguration, UpdateFunctionConfigurationCommandInput, Runtime } from '@aws-sdk/client-lambda';
4
+ import { FromIniInit } from '@aws-sdk/credential-provider-ini';
5
+ import { AwsCredentialIdentity } from '@aws-sdk/types';
6
+ import { LayerKey } from '../constants';
7
+ import { FunctionConfiguration, InstrumentationSettings, InstrumentedConfigurationGroup } from '../interfaces';
8
+ /**
9
+ * Returns an array of merged layer ARNs if given a Full Layer ARN,
10
+ * if not, it justs returns the layer ARNs provided.
11
+ *
12
+ * @param fullLayerARN a complete layer ARN.
13
+ * @param partialLayerARN a partial layer ARN.
14
+ * @param layerARNs an array of layer ARNs.
15
+ * @returns an array of layer ARNs.
16
+ */
17
+ export declare const addLayerArn: (fullLayerArn: string | undefined, previousLayerName: string, layerARNs: string[]) => string[];
18
+ /**
19
+ * Returns a coerced boolean given string booleans or booleans in
20
+ * an spread array. Every other value will be ignored.
21
+ *
22
+ * @param fallback default value if none of the provided `values` comply.
23
+ * @param values an spread array of string booleans or booleans.
24
+ * @returns a coerced boolean.
25
+ */
26
+ export declare const coerceBoolean: (fallback: boolean, ...values: any[]) => boolean;
27
+ /**
28
+ * Returns an array of functions grouped by its region, it
29
+ * throws an error if there are functions without a region.
30
+ *
31
+ * @param functions an array of strings comprised by
32
+ * Functions ARNs, Partial ARNs, or Function Names.
33
+ * @param defaultRegion a fallback region
34
+ * @returns an array of functions grouped by region
35
+ */
36
+ export declare const collectFunctionsByRegion: (functions: string[], defaultRegion: string | undefined) => {
37
+ [key: string]: string[];
38
+ };
39
+ /**
40
+ * Given a layer runtime, return its latest version.
41
+ *
42
+ * @param runtime the runtime of the layer.
43
+ * @param region the region where the layer is stored.
44
+ * @returns the latest version of the layer to find.
45
+ */
46
+ export declare const findLatestLayerVersion: (layer: LayerKey, region: string) => Promise<number>;
47
+ export declare const getAWSFileCredentialsParams: (profile: string) => FromIniInit;
48
+ /**
49
+ * Returns the loaded AWS Credentials from the given profile.
50
+ *
51
+ * Note: the AWS SDK loads credentials automatically in
52
+ * node environments.
53
+ *
54
+ * @param {string} profile the AWS Credentials profile
55
+ * @returns {AwsCredentialIdentity} credentials object.
56
+ */
57
+ export declare const getAWSProfileCredentials: (profile: string) => Promise<AwsCredentialIdentity | undefined>;
58
+ export declare const getAWSCredentials: () => Promise<AwsCredentialIdentity | undefined>;
59
+ export declare const isMissingAnyDatadogApiKeyEnvVar: () => boolean;
60
+ export declare const isMissingDatadogEnvVars: () => boolean;
61
+ export declare const getAllLambdaFunctionConfigs: (lambdaClient: LambdaClient) => Promise<LFunctionConfiguration[]>;
62
+ export declare const checkRuntimeTypesAreUniform: (configList: FunctionConfiguration[]) => boolean;
63
+ /**
64
+ * Given a Lambda instance and a regular expression,
65
+ * returns all the Function Configurations that match.
66
+ *
67
+ * @param lambda an instance of Lambda from aws-sdk.
68
+ * @param pattern a regular expression
69
+ * @returns an array of Lambda FunctionConfiguration's that match the pattern above.
70
+ */
71
+ export declare const getLambdaFunctionConfigsFromRegex: (lambdaClient: LambdaClient, pattern: string) => Promise<LFunctionConfiguration[]>;
72
+ /**
73
+ * Given a Lambda instance and an array of Lambda names,
74
+ * return all the Lambda Function Configurations.
75
+ *
76
+ * @param lambda an instance of Lambda from aws-sdk.
77
+ * @param functionARNs an array of strings comprised by
78
+ * Functions ARNs, Partial ARNs, or Function Names.
79
+ * @returns an array of Lambda FunctionConfiguration's.
80
+ */
81
+ export declare const getLambdaFunctionConfigs: (lambdaClient: LambdaClient, functionARNs: string[]) => Promise<LFunctionConfiguration[]>;
82
+ /**
83
+ * Returns the correct ARN of a **Specific Runtime Layer** given its configuration, region,
84
+ * and settings (optional).
85
+ *
86
+ * @param config a Lambda FunctionConfiguration.
87
+ * @param layer a Lambda layer.
88
+ * @param region a region where the layer is hosted.
89
+ * @param settings instrumentation settings, mainly used to change the AWS account that contains the Layer.
90
+ * @returns the ARN of a **Specific Runtime Layer** with the correct region, account, architecture, and name.
91
+ */
92
+ export declare const getLayerArn: (config: LFunctionConfiguration, layer: LayerKey, region: string, settings?: InstrumentationSettings) => string;
93
+ export declare const getLayerNameWithVersion: (layerArn: string) => string | undefined;
94
+ export declare const getLayers: (config: LFunctionConfiguration) => string[];
95
+ /**
96
+ * Call the aws-sdk Lambda api to get a Function given
97
+ * an ARN and then return its Configuration.
98
+ *
99
+ * @param lambdaClient an instance of LambdaClient.
100
+ * @param functionARN a string, can be Function ARN, Partial ARN, or a Function Name.
101
+ * @returns the Lambda FunctionConfiguration of the given ARN.
102
+ */
103
+ export declare const getLambdaFunctionConfig: (lambdaClient: LambdaClient, functionARN: string) => Promise<LFunctionConfiguration>;
104
+ /**
105
+ * Given a Function ARN, return its region by splitting the string,
106
+ * can return undefined if it doesn't exist.
107
+ *
108
+ * @param functionARN a string, can be Function ARN, Partial ARN, or a Function Name.
109
+ * @returns the region of an ARN.
110
+ */
111
+ export declare const getRegion: (functionARN: string) => string | undefined;
112
+ /**
113
+ * Returns whether the runtime given is supported by the Datadog CI Lambda.
114
+ *
115
+ * @param runtime a string representing a Lambda FunctionConfiguration Runtime.
116
+ * @returns if a runtime is supported.
117
+ */
118
+ export declare const isSupportedRuntime: (runtime?: string) => runtime is Runtime;
119
+ export declare const isLayerRuntime: (runtime: string) => runtime is "dotnet6" | "dotnet8" | "java11" | "java17" | "java21" | "java8.al2" | "nodejs16.x" | "nodejs18.x" | "nodejs20.x" | "nodejs22.x" | "python3.10" | "python3.11" | "python3.12" | "python3.13" | "python3.8" | "python3.9" | "ruby3.2" | "ruby3.3" | "extension";
120
+ export declare const sentenceMatchesRegEx: (sentence: string, regex: RegExp) => RegExpMatchArray | null;
121
+ export declare const updateLambdaFunctionConfig: (lambdaClient: LambdaClient, cloudWatchLogsClient: CloudWatchLogsClient, config: FunctionConfiguration) => Promise<void>;
122
+ export declare const updateFunctionConfiguration: (client: LambdaClient, input: UpdateFunctionConfigurationCommandInput) => Promise<void>;
123
+ export declare const handleLambdaFunctionUpdates: (configGroups: InstrumentedConfigurationGroup[], stdout: Writable) => Promise<void>;
124
+ export declare const willUpdateFunctionConfigs: (configs: FunctionConfiguration[]) => boolean;
125
+ /**
126
+ * Masks environment variables in a Lambda function configuration.
127
+ * Makes a copy as to not modify the config in place.
128
+ * @param config
129
+ * @returns masked config
130
+ */
131
+ export declare const maskConfig: (config: any) => any;
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.maskConfig = exports.willUpdateFunctionConfigs = exports.handleLambdaFunctionUpdates = exports.updateFunctionConfiguration = exports.updateLambdaFunctionConfig = exports.sentenceMatchesRegEx = exports.isLayerRuntime = exports.isSupportedRuntime = exports.getRegion = exports.getLambdaFunctionConfig = exports.getLayers = exports.getLayerNameWithVersion = exports.getLayerArn = exports.getLambdaFunctionConfigs = exports.getLambdaFunctionConfigsFromRegex = exports.checkRuntimeTypesAreUniform = exports.getAllLambdaFunctionConfigs = exports.isMissingDatadogEnvVars = exports.isMissingAnyDatadogApiKeyEnvVar = exports.getAWSCredentials = exports.getAWSProfileCredentials = exports.getAWSFileCredentialsParams = exports.findLatestLayerVersion = exports.collectFunctionsByRegion = exports.coerceBoolean = exports.addLayerArn = void 0;
39
+ const client_lambda_1 = require("@aws-sdk/client-lambda");
40
+ const credential_providers_1 = require("@aws-sdk/credential-providers");
41
+ const constants_1 = require("@datadog/datadog-ci-base/constants");
42
+ const helpersRenderer = __importStar(require("@datadog/datadog-ci-base/helpers/renderer"));
43
+ const utils_1 = require("@datadog/datadog-ci-base/helpers/utils");
44
+ const validation_1 = require("@datadog/datadog-ci-base/helpers/validation");
45
+ const property_provider_1 = require("@smithy/property-provider");
46
+ const inquirer_1 = __importDefault(require("inquirer"));
47
+ const constants_2 = require("../constants");
48
+ const loggroup_1 = require("../loggroup");
49
+ const prompt_1 = require("../prompt");
50
+ const instrumentRenderer = __importStar(require("../renderers/instrument-uninstrument-renderer"));
51
+ const tags_1 = require("../tags");
52
+ /**
53
+ * Returns an array of merged layer ARNs if given a Full Layer ARN,
54
+ * if not, it justs returns the layer ARNs provided.
55
+ *
56
+ * @param fullLayerARN a complete layer ARN.
57
+ * @param partialLayerARN a partial layer ARN.
58
+ * @param layerARNs an array of layer ARNs.
59
+ * @returns an array of layer ARNs.
60
+ */
61
+ const addLayerArn = (fullLayerArn, previousLayerName, layerARNs) => {
62
+ if (fullLayerArn) {
63
+ if (!layerARNs.includes(fullLayerArn)) {
64
+ // Remove any other versions of the layer
65
+ layerARNs = [...layerARNs.filter((layer) => !layer.includes(previousLayerName)), fullLayerArn];
66
+ }
67
+ }
68
+ return layerARNs;
69
+ };
70
+ exports.addLayerArn = addLayerArn;
71
+ /**
72
+ * Returns a coerced boolean given string booleans or booleans in
73
+ * an spread array. Every other value will be ignored.
74
+ *
75
+ * @param fallback default value if none of the provided `values` comply.
76
+ * @param values an spread array of string booleans or booleans.
77
+ * @returns a coerced boolean.
78
+ */
79
+ const coerceBoolean = (fallback, ...values) => {
80
+ for (const value of values) {
81
+ switch (typeof value) {
82
+ case 'boolean':
83
+ return value;
84
+ case 'string':
85
+ if (value.toString().toLowerCase() === 'true') {
86
+ return true;
87
+ }
88
+ else if (value.toString().toLowerCase() === 'false') {
89
+ return false;
90
+ }
91
+ break;
92
+ default:
93
+ continue;
94
+ }
95
+ }
96
+ return fallback;
97
+ };
98
+ exports.coerceBoolean = coerceBoolean;
99
+ /**
100
+ * Returns an array of functions grouped by its region, it
101
+ * throws an error if there are functions without a region.
102
+ *
103
+ * @param functions an array of strings comprised by
104
+ * Functions ARNs, Partial ARNs, or Function Names.
105
+ * @param defaultRegion a fallback region
106
+ * @returns an array of functions grouped by region
107
+ */
108
+ const collectFunctionsByRegion = (functions, defaultRegion) => {
109
+ var _a;
110
+ const groups = {};
111
+ const regionless = [];
112
+ for (const func of functions) {
113
+ const region = (_a = (0, exports.getRegion)(func)) !== null && _a !== void 0 ? _a : defaultRegion;
114
+ if (region === undefined) {
115
+ regionless.push(func);
116
+ continue;
117
+ }
118
+ if (groups[region] === undefined) {
119
+ groups[region] = [];
120
+ }
121
+ const group = groups[region];
122
+ group.push(func);
123
+ }
124
+ if (regionless.length > 0) {
125
+ throw Error(`No default region specified for ${JSON.stringify(regionless)}. Use -r, --region, or use a full functionARN\n`);
126
+ }
127
+ return groups;
128
+ };
129
+ exports.collectFunctionsByRegion = collectFunctionsByRegion;
130
+ /**
131
+ * Given a layer runtime, return its latest version.
132
+ *
133
+ * @param runtime the runtime of the layer.
134
+ * @param region the region where the layer is stored.
135
+ * @returns the latest version of the layer to find.
136
+ */
137
+ const findLatestLayerVersion = (layer, region) => __awaiter(void 0, void 0, void 0, function* () {
138
+ let latestVersion = 0;
139
+ let searchStep = latestVersion > 0 ? 1 : 100;
140
+ let layerVersion = latestVersion + searchStep;
141
+ const account = region.startsWith('us-gov') ? constants_2.GOVCLOUD_LAYER_AWS_ACCOUNT : constants_2.DEFAULT_LAYER_AWS_ACCOUNT;
142
+ const layerName = constants_2.LAYER_LOOKUP[layer];
143
+ let foundLatestVersion = false;
144
+ const lambdaClient = new client_lambda_1.LambdaClient({ region, retryStrategy: constants_2.EXPONENTIAL_BACKOFF_RETRY_STRATEGY });
145
+ while (!foundLatestVersion) {
146
+ try {
147
+ // Search next version
148
+ const command = new client_lambda_1.GetLayerVersionCommand({
149
+ LayerName: `arn:aws:lambda:${region}:${account}:layer:${layerName}`,
150
+ VersionNumber: layerVersion,
151
+ });
152
+ yield lambdaClient.send(command);
153
+ latestVersion = layerVersion;
154
+ // Increase layer version
155
+ layerVersion += searchStep;
156
+ }
157
+ catch (_a) {
158
+ // Search step is too big, reset target to previous version
159
+ // with a smaller search step
160
+ if (searchStep > 1) {
161
+ layerVersion -= searchStep;
162
+ searchStep /= 10;
163
+ layerVersion += searchStep;
164
+ }
165
+ else {
166
+ // Search step is 1, current version was not found.
167
+ // It is likely that the last checked is the latest.
168
+ // Check the next version to be certain, since
169
+ // current version could've been deleted by accident.
170
+ try {
171
+ layerVersion += searchStep;
172
+ const command = new client_lambda_1.GetLayerVersionCommand({
173
+ LayerName: `arn:aws:lambda:${region}:${account}:layer:${layerName}`,
174
+ VersionNumber: layerVersion,
175
+ });
176
+ yield lambdaClient.send(command);
177
+ latestVersion = layerVersion;
178
+ // Continue the search if the next version does exist (unlikely event)
179
+ layerVersion += searchStep;
180
+ }
181
+ catch (_b) {
182
+ // The next version doesn't exist either, so the previous version is indeed the latest
183
+ foundLatestVersion = true;
184
+ }
185
+ }
186
+ }
187
+ }
188
+ return latestVersion;
189
+ });
190
+ exports.findLatestLayerVersion = findLatestLayerVersion;
191
+ const getAWSFileCredentialsParams = (profile) => {
192
+ const init = { profile };
193
+ if (process.env[constants_2.AWS_SHARED_CREDENTIALS_FILE_ENV_VAR] !== undefined) {
194
+ init.filepath = process.env[constants_2.AWS_SHARED_CREDENTIALS_FILE_ENV_VAR];
195
+ }
196
+ // If provided profile is enforced by MFA and a session
197
+ // token is not set we must request for the MFA token.
198
+ init.mfaCodeProvider = (mfaSerial) => __awaiter(void 0, void 0, void 0, function* () {
199
+ const answer = yield inquirer_1.default.prompt((0, prompt_1.awsProfileQuestion)(mfaSerial));
200
+ return answer.AWS_MFA;
201
+ });
202
+ return init;
203
+ };
204
+ exports.getAWSFileCredentialsParams = getAWSFileCredentialsParams;
205
+ /**
206
+ * Returns the loaded AWS Credentials from the given profile.
207
+ *
208
+ * Note: the AWS SDK loads credentials automatically in
209
+ * node environments.
210
+ *
211
+ * @param {string} profile the AWS Credentials profile
212
+ * @returns {AwsCredentialIdentity} credentials object.
213
+ */
214
+ const getAWSProfileCredentials = (profile) => __awaiter(void 0, void 0, void 0, function* () {
215
+ const init = (0, exports.getAWSFileCredentialsParams)(profile);
216
+ try {
217
+ const credentialsProvider = (0, credential_providers_1.fromIni)(init);
218
+ const credentials = yield credentialsProvider();
219
+ return credentials;
220
+ }
221
+ catch (err) {
222
+ if (err instanceof Error) {
223
+ throw Error(`Couldn't set AWS profile credentials. ${err.message}`);
224
+ }
225
+ }
226
+ });
227
+ exports.getAWSProfileCredentials = getAWSProfileCredentials;
228
+ const getAWSCredentials = () => __awaiter(void 0, void 0, void 0, function* () {
229
+ const provider = (0, credential_providers_1.fromNodeProviderChain)();
230
+ try {
231
+ const credentials = yield provider();
232
+ return credentials;
233
+ }
234
+ catch (err) {
235
+ if (err instanceof Error) {
236
+ if (err.name === property_provider_1.CredentialsProviderError.name) {
237
+ return undefined;
238
+ }
239
+ throw Error(`Couldn't fetch AWS credentials. ${err.message}`);
240
+ }
241
+ }
242
+ });
243
+ exports.getAWSCredentials = getAWSCredentials;
244
+ const isMissingAnyDatadogApiKeyEnvVar = () => !(process.env[constants_1.CI_API_KEY_ENV_VAR] ||
245
+ process.env[constants_1.API_KEY_ENV_VAR] ||
246
+ process.env[constants_2.CI_KMS_API_KEY_ENV_VAR] ||
247
+ process.env[constants_2.CI_API_KEY_SECRET_ARN_ENV_VAR]);
248
+ exports.isMissingAnyDatadogApiKeyEnvVar = isMissingAnyDatadogApiKeyEnvVar;
249
+ const isMissingDatadogEnvVars = () => !(0, validation_1.isValidDatadogSite)(process.env[constants_1.CI_SITE_ENV_VAR]) || (0, exports.isMissingAnyDatadogApiKeyEnvVar)();
250
+ exports.isMissingDatadogEnvVars = isMissingDatadogEnvVars;
251
+ const getAllLambdaFunctionConfigs = (lambdaClient) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports.getLambdaFunctionConfigsFromRegex)(lambdaClient, '.'); });
252
+ exports.getAllLambdaFunctionConfigs = getAllLambdaFunctionConfigs;
253
+ // Returns false if not all runtimes are of the same RuntimeType across multiple functions
254
+ const checkRuntimeTypesAreUniform = (configList) => configList
255
+ .map((item) => item.lambdaConfig.Runtime)
256
+ .every((runtime) => constants_2.RUNTIME_LOOKUP[runtime] === constants_2.RUNTIME_LOOKUP[configList[0].lambdaConfig.Runtime]);
257
+ exports.checkRuntimeTypesAreUniform = checkRuntimeTypesAreUniform;
258
+ /**
259
+ * Given a Lambda instance and a regular expression,
260
+ * returns all the Function Configurations that match.
261
+ *
262
+ * @param lambda an instance of Lambda from aws-sdk.
263
+ * @param pattern a regular expression
264
+ * @returns an array of Lambda FunctionConfiguration's that match the pattern above.
265
+ */
266
+ const getLambdaFunctionConfigsFromRegex = (lambdaClient, pattern) => __awaiter(void 0, void 0, void 0, function* () {
267
+ var _c;
268
+ const regEx = new RegExp(pattern);
269
+ const matchedFunctions = [];
270
+ let response;
271
+ let nextMarker;
272
+ while (true) {
273
+ const command = new client_lambda_1.ListFunctionsCommand({ Marker: nextMarker });
274
+ response = yield lambdaClient.send(command);
275
+ (_c = response.Functions) === null || _c === void 0 ? void 0 : _c.map((fn) => { var _a; return ((_a = fn.FunctionName) === null || _a === void 0 ? void 0 : _a.match(regEx)) && matchedFunctions.push(fn); });
276
+ nextMarker = response.NextMarker;
277
+ if (!nextMarker) {
278
+ break;
279
+ }
280
+ }
281
+ return matchedFunctions;
282
+ });
283
+ exports.getLambdaFunctionConfigsFromRegex = getLambdaFunctionConfigsFromRegex;
284
+ /**
285
+ * Given a Lambda instance and an array of Lambda names,
286
+ * return all the Lambda Function Configurations.
287
+ *
288
+ * @param lambda an instance of Lambda from aws-sdk.
289
+ * @param functionARNs an array of strings comprised by
290
+ * Functions ARNs, Partial ARNs, or Function Names.
291
+ * @returns an array of Lambda FunctionConfiguration's.
292
+ */
293
+ const getLambdaFunctionConfigs = (lambdaClient, functionARNs) => {
294
+ const promises = functionARNs.map((fn) => (0, exports.getLambdaFunctionConfig)(lambdaClient, fn));
295
+ return Promise.all(promises);
296
+ };
297
+ exports.getLambdaFunctionConfigs = getLambdaFunctionConfigs;
298
+ /**
299
+ * Returns the correct ARN of a **Specific Runtime Layer** given its configuration, region,
300
+ * and settings (optional).
301
+ *
302
+ * @param config a Lambda FunctionConfiguration.
303
+ * @param layer a Lambda layer.
304
+ * @param region a region where the layer is hosted.
305
+ * @param settings instrumentation settings, mainly used to change the AWS account that contains the Layer.
306
+ * @returns the ARN of a **Specific Runtime Layer** with the correct region, account, architecture, and name.
307
+ */
308
+ const getLayerArn = (config, layer, region, settings) => {
309
+ var _a, _b;
310
+ let layerName = constants_2.LAYER_LOOKUP[layer];
311
+ if (constants_2.ARM_LAYERS.includes(layer) && ((_a = config.Architectures) === null || _a === void 0 ? void 0 : _a.includes(constants_2.ARM64_ARCHITECTURE))) {
312
+ layerName += constants_2.ARM_LAYER_SUFFIX;
313
+ }
314
+ if (settings === null || settings === void 0 ? void 0 : settings.lambdaFips) {
315
+ layerName += '-FIPS';
316
+ }
317
+ const account = (_b = settings === null || settings === void 0 ? void 0 : settings.layerAWSAccount) !== null && _b !== void 0 ? _b : constants_2.DEFAULT_LAYER_AWS_ACCOUNT;
318
+ const isGovCloud = region.startsWith('us-gov');
319
+ if (isGovCloud) {
320
+ return `arn:aws-us-gov:lambda:${region}:${constants_2.GOVCLOUD_LAYER_AWS_ACCOUNT}:layer:${layerName}`;
321
+ }
322
+ return `arn:aws:lambda:${region}:${account}:layer:${layerName}`;
323
+ };
324
+ exports.getLayerArn = getLayerArn;
325
+ const getLayerNameWithVersion = (layerArn) => {
326
+ const [, , , , , , name, version] = layerArn.split(':');
327
+ return name && version ? `${name}:${version}` : undefined;
328
+ };
329
+ exports.getLayerNameWithVersion = getLayerNameWithVersion;
330
+ const getLayers = (config) => { var _a; return ((_a = config.Layers) !== null && _a !== void 0 ? _a : []).map((layer) => layer.Arn); };
331
+ exports.getLayers = getLayers;
332
+ /**
333
+ * Call the aws-sdk Lambda api to get a Function given
334
+ * an ARN and then return its Configuration.
335
+ *
336
+ * @param lambdaClient an instance of LambdaClient.
337
+ * @param functionARN a string, can be Function ARN, Partial ARN, or a Function Name.
338
+ * @returns the Lambda FunctionConfiguration of the given ARN.
339
+ */
340
+ const getLambdaFunctionConfig = (lambdaClient, functionARN) => __awaiter(void 0, void 0, void 0, function* () {
341
+ const params = {
342
+ FunctionName: functionARN,
343
+ };
344
+ const command = new client_lambda_1.GetFunctionCommand(params);
345
+ const response = yield lambdaClient.send(command);
346
+ // AWS typescript API is slightly mistyped, adds undefineds where
347
+ // there shouldn't be.
348
+ const config = response.Configuration;
349
+ return config;
350
+ });
351
+ exports.getLambdaFunctionConfig = getLambdaFunctionConfig;
352
+ /**
353
+ * Given a Function ARN, return its region by splitting the string,
354
+ * can return undefined if it doesn't exist.
355
+ *
356
+ * @param functionARN a string, can be Function ARN, Partial ARN, or a Function Name.
357
+ * @returns the region of an ARN.
358
+ */
359
+ const getRegion = (functionARN) => {
360
+ const [, , , region] = functionARN.split(':');
361
+ return region === undefined || region === '*' ? undefined : region;
362
+ };
363
+ exports.getRegion = getRegion;
364
+ /**
365
+ * Returns whether the runtime given is supported by the Datadog CI Lambda.
366
+ *
367
+ * @param runtime a string representing a Lambda FunctionConfiguration Runtime.
368
+ * @returns if a runtime is supported.
369
+ */
370
+ const isSupportedRuntime = (runtime) => runtime !== undefined && constants_2.RUNTIME_LOOKUP[runtime] !== undefined;
371
+ exports.isSupportedRuntime = isSupportedRuntime;
372
+ const isLayerRuntime = (runtime) => constants_2.LAYER_LOOKUP[runtime] !== undefined;
373
+ exports.isLayerRuntime = isLayerRuntime;
374
+ const sentenceMatchesRegEx = (sentence, regex) => sentence.match(regex);
375
+ exports.sentenceMatchesRegEx = sentenceMatchesRegEx;
376
+ const updateLambdaFunctionConfig = (lambdaClient, cloudWatchLogsClient, config) => __awaiter(void 0, void 0, void 0, function* () {
377
+ if (config.updateFunctionConfigurationCommandInput !== undefined) {
378
+ yield (0, exports.updateFunctionConfiguration)(lambdaClient, config.updateFunctionConfigurationCommandInput);
379
+ }
380
+ if (config.logGroupConfiguration !== undefined) {
381
+ yield (0, loggroup_1.applyLogGroupConfig)(cloudWatchLogsClient, config.logGroupConfiguration);
382
+ }
383
+ if (config.tagConfiguration !== undefined) {
384
+ yield (0, tags_1.applyTagConfig)(lambdaClient, config.tagConfiguration);
385
+ }
386
+ });
387
+ exports.updateLambdaFunctionConfig = updateLambdaFunctionConfig;
388
+ const updateFunctionConfiguration = (client, input) => __awaiter(void 0, void 0, void 0, function* () {
389
+ const command = new client_lambda_1.UpdateFunctionConfigurationCommand(input);
390
+ yield client.send(command);
391
+ });
392
+ exports.updateFunctionConfiguration = updateFunctionConfiguration;
393
+ const handleLambdaFunctionUpdates = (configGroups, stdout) => __awaiter(void 0, void 0, void 0, function* () {
394
+ let totalFunctions = 0;
395
+ let totalFailedUpdates = 0;
396
+ for (const group of configGroups) {
397
+ const spinner = instrumentRenderer.updatingFunctionsConfigFromRegionSpinner(group.region, group.configs.length);
398
+ spinner.start();
399
+ const failedUpdates = [];
400
+ for (const config of group.configs) {
401
+ totalFunctions += 1;
402
+ try {
403
+ yield (0, exports.updateLambdaFunctionConfig)(group.lambdaClient, group.cloudWatchLogsClient, config);
404
+ }
405
+ catch (err) {
406
+ failedUpdates.push({ functionARN: config.functionARN, error: err });
407
+ totalFailedUpdates += 1;
408
+ }
409
+ }
410
+ if (failedUpdates.length === group.configs.length) {
411
+ spinner.fail(instrumentRenderer.renderFailedUpdatingEveryLambdaFunctionFromRegion(group.region));
412
+ }
413
+ else if (failedUpdates.length > 0) {
414
+ spinner.warn(instrumentRenderer.renderUpdatedLambdaFunctionsFromRegion(group.region, group.configs.length - failedUpdates.length));
415
+ }
416
+ for (const failedUpdate of failedUpdates) {
417
+ stdout.write(instrumentRenderer.renderFailedUpdatingLambdaFunction(failedUpdate.functionARN, failedUpdate.error));
418
+ }
419
+ if (failedUpdates.length === 0) {
420
+ spinner.succeed(instrumentRenderer.renderUpdatedLambdaFunctionsFromRegion(group.region, group.configs.length));
421
+ }
422
+ }
423
+ if (totalFunctions === totalFailedUpdates) {
424
+ stdout.write(instrumentRenderer.renderFail(instrumentRenderer.renderFailedUpdatingEveryLambdaFunction()));
425
+ throw Error();
426
+ }
427
+ if (totalFailedUpdates > 0) {
428
+ stdout.write(helpersRenderer.renderSoftWarning(instrumentRenderer.renderUpdatedLambdaFunctions(totalFunctions - totalFailedUpdates)));
429
+ }
430
+ if (!totalFailedUpdates) {
431
+ stdout.write(instrumentRenderer.renderSuccess(instrumentRenderer.renderUpdatedLambdaFunctions(totalFunctions)));
432
+ }
433
+ });
434
+ exports.handleLambdaFunctionUpdates = handleLambdaFunctionUpdates;
435
+ const willUpdateFunctionConfigs = (configs) => {
436
+ var _a, _b, _c;
437
+ let willUpdate = false;
438
+ for (const config of configs) {
439
+ if (config.updateFunctionConfigurationCommandInput !== undefined ||
440
+ ((_a = config.logGroupConfiguration) === null || _a === void 0 ? void 0 : _a.createLogGroupCommandInput) !== undefined ||
441
+ ((_b = config.logGroupConfiguration) === null || _b === void 0 ? void 0 : _b.deleteSubscriptionFilterCommandInput) !== undefined ||
442
+ ((_c = config.logGroupConfiguration) === null || _c === void 0 ? void 0 : _c.putSubscriptionFilterCommandInput) !== undefined ||
443
+ (config === null || config === void 0 ? void 0 : config.tagConfiguration) !== undefined) {
444
+ willUpdate = true;
445
+ break;
446
+ }
447
+ }
448
+ return willUpdate;
449
+ };
450
+ exports.willUpdateFunctionConfigs = willUpdateFunctionConfigs;
451
+ /**
452
+ * Masks environment variables in a Lambda function configuration.
453
+ * Makes a copy as to not modify the config in place.
454
+ * @param config
455
+ * @returns masked config
456
+ */
457
+ const maskConfig = (config) => {
458
+ var _a;
459
+ // We stringify and parse again to make a deep copy
460
+ const configCopy = JSON.parse(JSON.stringify(config));
461
+ const vars = (_a = configCopy.Environment) === null || _a === void 0 ? void 0 : _a.Variables;
462
+ if (!vars) {
463
+ return configCopy;
464
+ }
465
+ for (const key in vars) {
466
+ if (!constants_2.SKIP_MASKING_LAMBDA_ENV_VARS.has(key)) {
467
+ vars[key] = (0, utils_1.maskString)(vars[key]);
468
+ }
469
+ }
470
+ return configCopy;
471
+ };
472
+ exports.maskConfig = maskConfig;
473
+ //# sourceMappingURL=commons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons.js","sourceRoot":"","sources":["../../src/functions/commons.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { CloudWatchLogsClient } from '@aws-sdk/client-cloudwatch-logs';
2
+ import { LambdaClient, FunctionConfiguration as LFunctionConfiguration, Runtime, UpdateFunctionConfigurationCommandInput } from '@aws-sdk/client-lambda';
3
+ import { FunctionConfiguration, InstrumentationSettings } from '../interfaces';
4
+ export declare const getInstrumentedFunctionConfigs: (lambdaClient: LambdaClient, cloudWatchLogsClient: CloudWatchLogsClient, region: string, functionARNs: string[], settings: InstrumentationSettings) => Promise<FunctionConfiguration[]>;
5
+ export declare const getInstrumentedFunctionConfig: (lambdaClient: LambdaClient, cloudWatchLogsClient: CloudWatchLogsClient, config: LFunctionConfiguration, region: string, settings: InstrumentationSettings) => Promise<FunctionConfiguration>;
6
+ export declare const getInstrumentedFunctionConfigsFromRegEx: (lambdaClient: LambdaClient, cloudWatchLogsClient: CloudWatchLogsClient, region: string, pattern: string, settings: InstrumentationSettings) => Promise<FunctionConfiguration[]>;
7
+ export declare const calculateUpdateRequest: (config: LFunctionConfiguration, settings: InstrumentationSettings, region: string, runtime: Runtime) => Promise<UpdateFunctionConfigurationCommandInput | undefined>;