serverless-plugin-datadog 5.10.0 → 5.12.0

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 (50) hide show
  1. package/README.md +2 -1
  2. package/dist/package.json +1 -1
  3. package/dist/src/env.d.ts +1 -0
  4. package/dist/src/env.d.ts.map +1 -1
  5. package/dist/src/env.js +1 -0
  6. package/dist/src/env.js.map +1 -1
  7. package/dist/src/index.js +2 -2
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/layer.d.ts.map +1 -1
  10. package/dist/src/layer.js +1 -0
  11. package/dist/src/layer.js.map +1 -1
  12. package/dist/src/layers-gov.json +22 -20
  13. package/dist/src/layers.json +271 -240
  14. package/package.json +1 -1
  15. package/dist/src/git-metadata/interfaces.d.ts +0 -10
  16. package/dist/src/git-metadata/interfaces.d.ts.map +0 -1
  17. package/dist/src/git-metadata/interfaces.js +0 -43
  18. package/dist/src/git-metadata/interfaces.js.map +0 -1
  19. package/dist/src/helpers/apikey.d.ts +0 -13
  20. package/dist/src/helpers/apikey.d.ts.map +0 -1
  21. package/dist/src/helpers/apikey.js +0 -74
  22. package/dist/src/helpers/apikey.js.map +0 -1
  23. package/dist/src/helpers/errors.d.ts +0 -3
  24. package/dist/src/helpers/errors.d.ts.map +0 -1
  25. package/dist/src/helpers/errors.js +0 -7
  26. package/dist/src/helpers/errors.js.map +0 -1
  27. package/dist/src/helpers/interfaces.d.ts +0 -20
  28. package/dist/src/helpers/interfaces.d.ts.map +0 -1
  29. package/dist/src/helpers/interfaces.js +0 -3
  30. package/dist/src/helpers/interfaces.js.map +0 -1
  31. package/dist/src/helpers/retry.d.ts +0 -3
  32. package/dist/src/helpers/retry.d.ts.map +0 -1
  33. package/dist/src/helpers/retry.js +0 -39
  34. package/dist/src/helpers/retry.js.map +0 -1
  35. package/dist/src/helpers/tags.d.ts +0 -29
  36. package/dist/src/helpers/tags.d.ts.map +0 -1
  37. package/dist/src/helpers/tags.js +0 -50
  38. package/dist/src/helpers/tags.js.map +0 -1
  39. package/dist/src/helpers/upload.d.ts +0 -45
  40. package/dist/src/helpers/upload.d.ts.map +0 -1
  41. package/dist/src/helpers/upload.js +0 -70
  42. package/dist/src/helpers/upload.js.map +0 -1
  43. package/dist/src/helpers/utils.d.ts +0 -31
  44. package/dist/src/helpers/utils.d.ts.map +0 -1
  45. package/dist/src/helpers/utils.js +0 -115
  46. package/dist/src/helpers/utils.js.map +0 -1
  47. package/dist/src/source-code-integration.d.ts +0 -15
  48. package/dist/src/source-code-integration.d.ts.map +0 -1
  49. package/dist/src/source-code-integration.js +0 -76
  50. package/dist/src/source-code-integration.js.map +0 -1
@@ -1,115 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.removeEmptyValues = exports.buildPath = exports.getApiHostForSite = exports.getProxyAgent = exports.getRequestBuilder = exports.getProxyUrl = exports.getConfig = exports.pick = void 0;
16
- const axios_1 = __importDefault(require("axios"));
17
- const fs_1 = __importDefault(require("fs"));
18
- const proxy_agent_1 = __importDefault(require("proxy-agent"));
19
- const util_1 = require("util");
20
- const pick = (base, keys) => {
21
- const definedKeys = keys.filter((key) => !!base[key]);
22
- const pickedObject = {};
23
- for (const key of definedKeys) {
24
- pickedObject[key] = base[key];
25
- }
26
- return pickedObject;
27
- };
28
- exports.pick = pick;
29
- const getConfig = (configPath) => __awaiter(void 0, void 0, void 0, function* () {
30
- const configFile = yield (0, util_1.promisify)(fs_1.default.readFile)(configPath, "utf-8");
31
- return JSON.parse(configFile);
32
- });
33
- exports.getConfig = getConfig;
34
- const getProxyUrl = (options) => {
35
- if (!options) {
36
- return "";
37
- }
38
- const { auth, host, port, protocol } = options;
39
- if (!host || !port) {
40
- return "";
41
- }
42
- const authFragment = auth ? `${auth.username}:${auth.password}@` : "";
43
- return `${protocol}://${authFragment}${host}:${port}`;
44
- };
45
- exports.getProxyUrl = getProxyUrl;
46
- const getRequestBuilder = (options) => {
47
- const { apiKey, appKey, baseUrl, overrideUrl, proxyOpts } = options;
48
- const overrideArgs = (args) => {
49
- const newArguments = Object.assign(Object.assign({}, args), { headers: Object.assign(Object.assign({ "DD-API-KEY": apiKey }, (appKey ? { "DD-APPLICATION-KEY": appKey } : {})), args.headers) });
50
- if (overrideUrl !== undefined) {
51
- newArguments.url = overrideUrl;
52
- }
53
- const proxyAgent = (0, exports.getProxyAgent)(proxyOpts);
54
- if (proxyAgent) {
55
- newArguments.httpAgent = proxyAgent;
56
- newArguments.httpsAgent = proxyAgent;
57
- }
58
- if (options.headers !== undefined) {
59
- options.headers.forEach((value, key) => {
60
- newArguments.headers[key] = value;
61
- });
62
- }
63
- return newArguments;
64
- };
65
- const baseConfiguration = {
66
- baseURL: baseUrl,
67
- // Disabling proxy in Axios config as it's not working properly
68
- // the passed httpAgent/httpsAgent are handling the proxy instead.
69
- proxy: false,
70
- };
71
- return (args) => axios_1.default.create(baseConfiguration)(overrideArgs(args));
72
- };
73
- exports.getRequestBuilder = getRequestBuilder;
74
- const getProxyAgent = (proxyOpts) => {
75
- const proxyUrlFromConfiguration = (0, exports.getProxyUrl)(proxyOpts);
76
- return new proxy_agent_1.default(proxyUrlFromConfiguration);
77
- };
78
- exports.getProxyAgent = getProxyAgent;
79
- const getApiHostForSite = (site) => {
80
- switch (site) {
81
- case "datad0g.com":
82
- return `app.${site}`;
83
- case "datadoghq.com":
84
- case "datadoghq.eu":
85
- default:
86
- return `api.${site}`;
87
- }
88
- };
89
- exports.getApiHostForSite = getApiHostForSite;
90
- // The buildPath function is used to concatenate several paths. The goal is to have a function working for both unix
91
- // paths and URL whereas standard path.join does not work with both.
92
- const buildPath = (...args) => args
93
- .map((part, i) => {
94
- if (i === 0) {
95
- // For the first part, drop all / at the end of the path
96
- return part.trim().replace(/[\/]*$/g, "");
97
- }
98
- else {
99
- // For the following parts, remove all / at the beginning and at the end
100
- return part.trim().replace(/(^[\/]*|[\/]*$)/g, "");
101
- }
102
- })
103
- // Filter out emtpy parts
104
- .filter((x) => x.length)
105
- // Join all these parts with /
106
- .join("/");
107
- exports.buildPath = buildPath;
108
- const removeEmptyValues = (tags) => Object.keys(tags).reduce((filteredTags, tag) => {
109
- if (!tags[tag]) {
110
- return filteredTags;
111
- }
112
- return Object.assign(Object.assign({}, filteredTags), { [tag]: tags[tag] });
113
- }, {});
114
- exports.removeEmptyValues = removeEmptyValues;
115
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/helpers/utils.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { SimpleGit } from "simple-git";
2
- export declare class SourceCodeIntegration {
3
- repositoryURL?: string;
4
- private apiKey;
5
- private datadogSite;
6
- private simpleGit;
7
- constructor(apiKey: string, datadogSite: string, simpleGit: SimpleGit, repositoryURL?: string);
8
- uploadGitMetadata(): Promise<{
9
- hash: string;
10
- remote: string;
11
- }>;
12
- private getRequestBuilder;
13
- private uploadRepository;
14
- }
15
- //# sourceMappingURL=source-code-integration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"source-code-integration.d.ts","sourceRoot":"","sources":["../../src/source-code-integration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAUvC,qBAAa,qBAAqB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAY;gBAEjB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM;IAOhF,iBAAiB;;;;IAiC9B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,gBAAgB;CASzB"}
@@ -1,76 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.SourceCodeIntegration = void 0;
13
- const package_json_1 = require("../package.json");
14
- const git_1 = require("./git");
15
- const apikey_1 = require("./helpers/apikey");
16
- const errors_1 = require("./helpers/errors");
17
- const upload_1 = require("./helpers/upload");
18
- const utils_1 = require("./helpers/utils");
19
- class SourceCodeIntegration {
20
- constructor(apiKey, datadogSite, simpleGit, repositoryURL) {
21
- this.apiKey = apiKey;
22
- this.datadogSite = datadogSite;
23
- this.simpleGit = simpleGit;
24
- this.repositoryURL = repositoryURL;
25
- }
26
- uploadGitMetadata() {
27
- return __awaiter(this, void 0, void 0, function* () {
28
- const apiKeyValidator = (0, apikey_1.newApiKeyValidator)({
29
- apiKey: this.apiKey,
30
- datadogSite: this.datadogSite,
31
- });
32
- const payload = yield (0, git_1.getCommitInfo)(this.simpleGit, this.repositoryURL);
33
- if (payload === undefined) {
34
- throw Error("Couldn't get git commit information.");
35
- }
36
- try {
37
- const requestBuilder = this.getRequestBuilder();
38
- const status = yield this.uploadRepository(requestBuilder)(payload, {
39
- apiKeyValidator,
40
- onError: (e) => {
41
- throw e;
42
- },
43
- onRetry: (_) => { },
44
- onUpload: () => {
45
- return;
46
- },
47
- retries: 5,
48
- });
49
- if (status !== upload_1.UploadStatus.Success) {
50
- throw new Error("Error uploading commit information.");
51
- }
52
- return { hash: payload.hash, remote: payload.remote };
53
- }
54
- catch (error) {
55
- throw error;
56
- }
57
- });
58
- }
59
- getRequestBuilder() {
60
- if (!this.apiKey) {
61
- throw new errors_1.InvalidConfigurationError("Missing DATADOG_API_KEY in your environment.");
62
- }
63
- return (0, utils_1.getRequestBuilder)({
64
- apiKey: this.apiKey,
65
- baseUrl: "https://sourcemap-intake." + this.datadogSite,
66
- });
67
- }
68
- uploadRepository(requestBuilder) {
69
- return (commitInfo, opts) => __awaiter(this, void 0, void 0, function* () {
70
- const payload = commitInfo.asMultipartPayload(`serverless-plugin-datadog-${package_json_1.version}`);
71
- return (0, upload_1.upload)(requestBuilder)(payload, opts);
72
- });
73
- }
74
- }
75
- exports.SourceCodeIntegration = SourceCodeIntegration;
76
- //# sourceMappingURL=source-code-integration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"source-code-integration.js","sourceRoot":"","sources":["../../src/source-code-integration.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,kDAA0C;AAC1C,+BAAsC;AAEtC,6CAAsD;AACtD,6CAA6D;AAE7D,6CAAuE;AACvE,2CAAoD;AAEpD,MAAa,qBAAqB;IAMhC,YAAY,MAAc,EAAE,WAAmB,EAAE,SAAoB,EAAE,aAAsB;QAC3F,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAEY,iBAAiB;;YAC5B,MAAM,eAAe,GAAG,IAAA,2BAAkB,EAAC;gBACzC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAa,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,MAAM,KAAK,CAAC,sCAAsC,CAAC,CAAC;aACrD;YACD,IAAI;gBACF,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;oBAClE,eAAe;oBACf,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;wBACpB,MAAM,CAAC,CAAC;oBACV,CAAC;oBACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,GAAE,CAAC;oBAClB,QAAQ,EAAE,GAAG,EAAE;wBACb,OAAO;oBACT,CAAC;oBACD,OAAO,EAAE,CAAC;iBACX,CAAC,CAAC;gBAEH,IAAI,MAAM,KAAK,qBAAY,CAAC,OAAO,EAAE;oBACnC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;iBACxD;gBAED,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;aACvD;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,KAAK,CAAC;aACb;QACH,CAAC;KAAA;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,kCAAyB,CAAC,8CAA8C,CAAC,CAAC;SACrF;QAED,OAAO,IAAA,yBAAiB,EAAC;YACvB,MAAM,EAAE,IAAI,CAAC,MAAO;YACpB,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAAC,WAAW;SACxD,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CACtB,cAA8B;QAE9B,OAAO,CAAO,UAAsB,EAAE,IAAmB,EAAE,EAAE;YAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,6BAA6B,sBAAO,EAAE,CAAC,CAAC;YAEtF,OAAO,IAAA,eAAM,EAAC,cAAc,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAA,CAAC;IACJ,CAAC;CACF;AAlED,sDAkEC"}