@datadog/datadog-ci-plugin-synthetics 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.
- package/dist/api.d.ts +52 -0
- package/dist/api.js +333 -0
- package/dist/api.js.map +1 -0
- package/dist/batch.d.ts +9 -0
- package/dist/batch.js +325 -0
- package/dist/batch.js.map +1 -0
- package/dist/build-and-test.d.ts +25 -0
- package/dist/build-and-test.js +196 -0
- package/dist/build-and-test.js.map +1 -0
- package/dist/commands/deploy-tests.d.ts +19 -0
- package/dist/commands/deploy-tests.js +125 -0
- package/dist/commands/deploy-tests.js.map +1 -0
- package/dist/commands/import-tests.d.ts +19 -0
- package/dist/commands/import-tests.js +118 -0
- package/dist/commands/import-tests.js.map +1 -0
- package/dist/commands/run-tests.d.ts +19 -0
- package/dist/commands/run-tests.js +308 -0
- package/dist/commands/run-tests.js.map +1 -0
- package/dist/commands/upload-application.d.ts +18 -0
- package/dist/commands/upload-application.js +138 -0
- package/dist/commands/upload-application.js.map +1 -0
- package/dist/deploy-tests-lib.d.ts +2 -0
- package/dist/deploy-tests-lib.js +96 -0
- package/dist/deploy-tests-lib.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -0
- package/dist/import-tests-lib.d.ts +2 -0
- package/dist/import-tests-lib.js +71 -0
- package/dist/import-tests-lib.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +739 -0
- package/dist/interfaces.js +27 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/local-test-definition.d.ts +2 -0
- package/dist/local-test-definition.js +16 -0
- package/dist/local-test-definition.js.map +1 -0
- package/dist/mobile.d.ts +28 -0
- package/dist/mobile.js +275 -0
- package/dist/mobile.js.map +1 -0
- package/dist/multilocator.d.ts +2 -0
- package/dist/multilocator.js +88 -0
- package/dist/multilocator.js.map +1 -0
- package/dist/reporters/constants.d.ts +6 -0
- package/dist/reporters/constants.js +14 -0
- package/dist/reporters/constants.js.map +1 -0
- package/dist/reporters/default.d.ts +31 -0
- package/dist/reporters/default.js +416 -0
- package/dist/reporters/default.js.map +1 -0
- package/dist/reporters/junit.d.ts +100 -0
- package/dist/reporters/junit.js +425 -0
- package/dist/reporters/junit.js.map +1 -0
- package/dist/reporters/mobile/app-upload.d.ts +15 -0
- package/dist/reporters/mobile/app-upload.js +54 -0
- package/dist/reporters/mobile/app-upload.js.map +1 -0
- package/dist/run-tests-lib.d.ts +21 -0
- package/dist/run-tests-lib.js +247 -0
- package/dist/run-tests-lib.js.map +1 -0
- package/dist/test.d.ts +30 -0
- package/dist/test.js +204 -0
- package/dist/test.js.map +1 -0
- package/dist/tunnel/crypto.d.ts +6 -0
- package/dist/tunnel/crypto.js +48 -0
- package/dist/tunnel/crypto.js.map +1 -0
- package/dist/tunnel/index.d.ts +1 -0
- package/dist/tunnel/index.js +6 -0
- package/dist/tunnel/index.js.map +1 -0
- package/dist/tunnel/tunnel.d.ts +49 -0
- package/dist/tunnel/tunnel.js +329 -0
- package/dist/tunnel/tunnel.js.map +1 -0
- package/dist/tunnel/websocket.d.ts +39 -0
- package/dist/tunnel/websocket.js +154 -0
- package/dist/tunnel/websocket.js.map +1 -0
- package/dist/utils/internal.d.ts +56 -0
- package/dist/utils/internal.js +313 -0
- package/dist/utils/internal.js.map +1 -0
- package/dist/utils/public.d.ts +76 -0
- package/dist/utils/public.js +509 -0
- package/dist/utils/public.js.map +1 -0
- package/package.json +9 -3
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { AxiosError, AxiosPromise, AxiosRequestConfig } from 'axios';
|
|
3
|
+
import { APIConfiguration, APIHelperConfig, Batch, LocalTestDefinition, MobileAppUploadResult, MobileApplicationNewVersionParams, MobileApplicationUploadPart, MobileApplicationUploadPartResponse, MultipartPresignedUrlsResponse, Payload, PollResult, ServerTest, SyntheticsOrgSettings, TestSearchResult, ServerTrigger } from './interfaces';
|
|
4
|
+
interface BackendError {
|
|
5
|
+
errors: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class EndpointError extends Error {
|
|
8
|
+
message: string;
|
|
9
|
+
status: number;
|
|
10
|
+
constructor(message: string, status: number);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Extracts the public IDs from an error message like `Cannot write tests or results (test ids: ['aaa-aaa-aaa', 'bbb-bbb-bbb'])`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const extractUnauthorizedTestPublicIds: (requestError: AxiosError<BackendError>) => Set<string> | undefined;
|
|
16
|
+
export declare const formatBackendErrors: (requestError: AxiosError<BackendError>, scopeName?: string) => string;
|
|
17
|
+
export declare const completeMultipartMobileApplicationUpload: (request: (args: AxiosRequestConfig) => AxiosPromise<{
|
|
18
|
+
job_id: string;
|
|
19
|
+
}>) => (applicationId: string, uploadId: string, key: string, uploadPartResponses: MobileApplicationUploadPartResponse[], newVersionParams?: MobileApplicationNewVersionParams) => Promise<string>;
|
|
20
|
+
export declare const pollMobileApplicationUploadResponse: (request: (args: AxiosRequestConfig) => AxiosPromise<MobileAppUploadResult>) => (jobId: string) => Promise<MobileAppUploadResult>;
|
|
21
|
+
export type RetryPolicy = {
|
|
22
|
+
retryOn404?: boolean | undefined;
|
|
23
|
+
retryOn429?: boolean | undefined;
|
|
24
|
+
};
|
|
25
|
+
export declare const determineRetryDelay: (retries: number, error: Error, retryPolicy?: RetryPolicy) => number | undefined;
|
|
26
|
+
export declare const getErrorHttpStatus: (error: Error) => number | undefined;
|
|
27
|
+
export declare const isForbiddenError: (error: Error) => boolean;
|
|
28
|
+
export declare const isNotFoundError: (error: Error) => boolean;
|
|
29
|
+
export declare const isTooManyRequestsError: (error: Error) => boolean;
|
|
30
|
+
export declare const isNodeError: (error: unknown) => error is NodeJS.ErrnoException;
|
|
31
|
+
export declare const is5xxError: (error: Error) => boolean;
|
|
32
|
+
export declare const apiConstructor: (configuration: APIConfiguration) => {
|
|
33
|
+
getBatch: (batchId: string) => Promise<Batch>;
|
|
34
|
+
getMobileApplicationPresignedURLs: (applicationId: string, appSize: number, parts: MobileApplicationUploadPart[]) => Promise<MultipartPresignedUrlsResponse>;
|
|
35
|
+
getTest: (testId: string, testType?: string) => Promise<ServerTest>;
|
|
36
|
+
getTestVersion: (testId: string, version: number) => Promise<void>;
|
|
37
|
+
getLocalTestDefinition: (testId: string, testType?: string) => Promise<LocalTestDefinition>;
|
|
38
|
+
editTest: (testId: string, data: ServerTest) => Promise<void>;
|
|
39
|
+
getSyntheticsOrgSettings: () => Promise<SyntheticsOrgSettings>;
|
|
40
|
+
getTunnelPresignedURL: (testIds: string[]) => Promise<{
|
|
41
|
+
url: string;
|
|
42
|
+
}>;
|
|
43
|
+
pollResults: (resultIds: string[]) => Promise<PollResult[]>;
|
|
44
|
+
searchTests: (query: string) => Promise<TestSearchResult>;
|
|
45
|
+
triggerTests: (data: Payload) => Promise<ServerTrigger>;
|
|
46
|
+
uploadMobileApplicationPart: (parts: MobileApplicationUploadPart[], multipartPresignedUrlsParams: MultipartPresignedUrlsResponse['multipart_presigned_urls_params']) => Promise<MobileApplicationUploadPartResponse[]>;
|
|
47
|
+
completeMultipartMobileApplicationUpload: (applicationId: string, uploadId: string, key: string, uploadPartResponses: MobileApplicationUploadPartResponse[], newVersionParams?: MobileApplicationNewVersionParams) => Promise<string>;
|
|
48
|
+
pollMobileApplicationUploadResponse: (jobId: string) => Promise<MobileAppUploadResult>;
|
|
49
|
+
};
|
|
50
|
+
export type APIHelper = ReturnType<typeof apiConstructor>;
|
|
51
|
+
export declare const getApiHelper: (config: APIHelperConfig) => APIHelper;
|
|
52
|
+
export {};
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
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.getApiHelper = exports.apiConstructor = exports.is5xxError = exports.isNodeError = exports.isTooManyRequestsError = exports.isNotFoundError = exports.isForbiddenError = exports.getErrorHttpStatus = exports.determineRetryDelay = exports.pollMobileApplicationUploadResponse = exports.completeMultipartMobileApplicationUpload = exports.formatBackendErrors = exports.extractUnauthorizedTestPublicIds = exports.EndpointError = void 0;
|
|
13
|
+
const querystring_1 = require("querystring");
|
|
14
|
+
const utils_1 = require("@datadog/datadog-ci-base/helpers/utils");
|
|
15
|
+
const axios_1 = require("axios");
|
|
16
|
+
const errors_1 = require("./errors");
|
|
17
|
+
const test_1 = require("./test");
|
|
18
|
+
const public_1 = require("./utils/public");
|
|
19
|
+
const MAX_RETRIES = 3;
|
|
20
|
+
const DELAY_BETWEEN_RETRIES = 500; // In ms
|
|
21
|
+
const LARGE_DELAY_BETWEEN_RETRIES = 1000; // In ms
|
|
22
|
+
// TODO SYNTH-13709: Use the `Retry-After` header.
|
|
23
|
+
const DELAY_BETWEEN_429_RETRIES = 5000; // In ms
|
|
24
|
+
class EndpointError extends Error {
|
|
25
|
+
constructor(message, status) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.message = message;
|
|
28
|
+
this.status = status;
|
|
29
|
+
Object.setPrototypeOf(this, EndpointError.prototype);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.EndpointError = EndpointError;
|
|
33
|
+
const LOWER_UNAMBIGUOUS_CHARS = 'abcdefghijkmnpqrstuvwxyz23456789';
|
|
34
|
+
const PUBLIC_ID_REGEX = `[${LOWER_UNAMBIGUOUS_CHARS}]{3}-[${LOWER_UNAMBIGUOUS_CHARS}]{3}-[${LOWER_UNAMBIGUOUS_CHARS}]{3}`;
|
|
35
|
+
/**
|
|
36
|
+
* Extracts the public IDs from an error message like `Cannot write tests or results (test ids: ['aaa-aaa-aaa', 'bbb-bbb-bbb'])`.
|
|
37
|
+
*/
|
|
38
|
+
const extractUnauthorizedTestPublicIds = (requestError) => {
|
|
39
|
+
var _a, _b, _c;
|
|
40
|
+
const unauthorizedMessage = (_c = (_b = (_a = requestError.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.errors) === null || _c === void 0 ? void 0 : _c.find((error) => error.includes('Cannot write tests or results (test ids:'));
|
|
41
|
+
if (!unauthorizedMessage) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const matchResult = unauthorizedMessage.match(new RegExp(PUBLIC_ID_REGEX, 'g'));
|
|
45
|
+
if (!matchResult) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
return new Set(matchResult);
|
|
49
|
+
};
|
|
50
|
+
exports.extractUnauthorizedTestPublicIds = extractUnauthorizedTestPublicIds;
|
|
51
|
+
const formatBackendErrors = (requestError, scopeName) => {
|
|
52
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
53
|
+
if ((_b = (_a = requestError.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.errors) {
|
|
54
|
+
const serverHead = `query on ${(_c = requestError.config) === null || _c === void 0 ? void 0 : _c.baseURL}${(_d = requestError.config) === null || _d === void 0 ? void 0 : _d.url} returned:`;
|
|
55
|
+
const errors = requestError.response.data.errors;
|
|
56
|
+
const reportMessage = [];
|
|
57
|
+
if (errors.length > 1) {
|
|
58
|
+
reportMessage.push(serverHead);
|
|
59
|
+
reportMessage.push(...errors.map((message) => ` - ${message}`));
|
|
60
|
+
}
|
|
61
|
+
else if (errors.length) {
|
|
62
|
+
reportMessage.push(`${serverHead} "${errors[0]}"`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
reportMessage.push(`error querying ${(_e = requestError.config) === null || _e === void 0 ? void 0 : _e.baseURL}${(_f = requestError.config) === null || _f === void 0 ? void 0 : _f.url}`);
|
|
66
|
+
}
|
|
67
|
+
if (requestError.response.status === 403 && scopeName) {
|
|
68
|
+
reportMessage.push(`Is the App key granted the ${scopeName} scope?`);
|
|
69
|
+
}
|
|
70
|
+
return reportMessage.join('\n');
|
|
71
|
+
}
|
|
72
|
+
return `could not query ${(_g = requestError.config) === null || _g === void 0 ? void 0 : _g.baseURL}${(_h = requestError.config) === null || _h === void 0 ? void 0 : _h.url}\n${requestError.message}`;
|
|
73
|
+
};
|
|
74
|
+
exports.formatBackendErrors = formatBackendErrors;
|
|
75
|
+
const triggerTests = (request) => (data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
76
|
+
const resp = yield retryRequest({
|
|
77
|
+
data,
|
|
78
|
+
headers: { 'X-Trigger-App': public_1.ciTriggerApp },
|
|
79
|
+
method: 'POST',
|
|
80
|
+
url: '/synthetics/tests/trigger/ci',
|
|
81
|
+
}, request, { retryOn429: true });
|
|
82
|
+
return resp.data;
|
|
83
|
+
});
|
|
84
|
+
const getTest = (request) => (testId, testType) => __awaiter(void 0, void 0, void 0, function* () {
|
|
85
|
+
const resp = yield retryRequest({
|
|
86
|
+
url: !!testType ? `/synthetics/tests/${testType}/${testId}` : `/synthetics/tests/${testId}`,
|
|
87
|
+
}, request, { retryOn429: true });
|
|
88
|
+
return resp.data;
|
|
89
|
+
});
|
|
90
|
+
const getTestVersion = (request) => (testId, version) => __awaiter(void 0, void 0, void 0, function* () {
|
|
91
|
+
yield retryRequest({
|
|
92
|
+
url: `/synthetics/tests/${testId}/version_history/${version}?only_check_existence=true`,
|
|
93
|
+
}, request, { retryOn429: true });
|
|
94
|
+
});
|
|
95
|
+
const getLocalTestDefinition = (request) => (testId, testType) => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
+
const resp = yield retryRequest({
|
|
97
|
+
params: {
|
|
98
|
+
format: 'ltd',
|
|
99
|
+
},
|
|
100
|
+
url: !!testType ? `/synthetics/tests/${testType}/${testId}` : `/synthetics/tests/${testId}`,
|
|
101
|
+
}, request, { retryOn429: true });
|
|
102
|
+
return resp.data;
|
|
103
|
+
});
|
|
104
|
+
const editTest = (request) => (testId, data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
105
|
+
yield retryRequest({
|
|
106
|
+
data,
|
|
107
|
+
method: 'PUT',
|
|
108
|
+
url: `/synthetics/tests/${testId}`,
|
|
109
|
+
}, request, { retryOn429: true });
|
|
110
|
+
});
|
|
111
|
+
const searchTests = (request) => (query) => __awaiter(void 0, void 0, void 0, function* () {
|
|
112
|
+
const resp = yield retryRequest({
|
|
113
|
+
params: {
|
|
114
|
+
// Search for one more test than limit to detect if too many tests are returned
|
|
115
|
+
count: test_1.MAX_TESTS_TO_TRIGGER + 1,
|
|
116
|
+
text: query,
|
|
117
|
+
},
|
|
118
|
+
url: '/synthetics/tests/search',
|
|
119
|
+
}, request);
|
|
120
|
+
return resp.data;
|
|
121
|
+
});
|
|
122
|
+
const getSyntheticsOrgSettings = (request) => () => __awaiter(void 0, void 0, void 0, function* () {
|
|
123
|
+
const resp = yield retryRequest({
|
|
124
|
+
url: '/synthetics/settings',
|
|
125
|
+
}, request);
|
|
126
|
+
return resp.data;
|
|
127
|
+
});
|
|
128
|
+
const getBatch = (request) => (batchId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
129
|
+
const resp = yield retryRequest({ url: `/synthetics/ci/batch/${batchId}` }, request, {
|
|
130
|
+
retryOn404: true,
|
|
131
|
+
retryOn429: true,
|
|
132
|
+
});
|
|
133
|
+
const serverBatch = resp.data.data;
|
|
134
|
+
return {
|
|
135
|
+
results: serverBatch.results.filter((r) => r.status !== 'skipped' || r.selective_rerun),
|
|
136
|
+
status: serverBatch.status,
|
|
137
|
+
};
|
|
138
|
+
});
|
|
139
|
+
const pollResults = (request) => (resultIds) => __awaiter(void 0, void 0, void 0, function* () {
|
|
140
|
+
var _a;
|
|
141
|
+
const resp = yield retryRequest({
|
|
142
|
+
params: {
|
|
143
|
+
result_ids: JSON.stringify(resultIds),
|
|
144
|
+
},
|
|
145
|
+
url: '/synthetics/tests/poll_results',
|
|
146
|
+
}, request, { retryOn404: true, retryOn429: true });
|
|
147
|
+
const includedTestsByID = new Map();
|
|
148
|
+
(_a = resp.data.included) === null || _a === void 0 ? void 0 : _a.forEach((r) => {
|
|
149
|
+
if (r.type === 'test') {
|
|
150
|
+
const test = Object.assign({ id: r.id }, r.attributes);
|
|
151
|
+
includedTestsByID.set(r.id, test);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
const rawPollResults = resp.data.data;
|
|
155
|
+
const parsedPollResults = [];
|
|
156
|
+
for (const r of rawPollResults) {
|
|
157
|
+
const test = includedTestsByID.get(r.relationships.test.data.id);
|
|
158
|
+
if (!test) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const pollResult = Object.assign(Object.assign({}, r.attributes), { test: parseIncludedTest(test), resultID: r.id });
|
|
162
|
+
parsedPollResults.push(pollResult);
|
|
163
|
+
}
|
|
164
|
+
return parsedPollResults;
|
|
165
|
+
});
|
|
166
|
+
const parseIncludedTest = (test) => {
|
|
167
|
+
var _a;
|
|
168
|
+
return {
|
|
169
|
+
public_id: test.id,
|
|
170
|
+
type: test.type,
|
|
171
|
+
subtype: test.subtype,
|
|
172
|
+
config: Object.assign(Object.assign({}, test.config), { request: Object.assign(Object.assign({}, test.config.request), { dnsServer: (_a = test.config.request) === null || _a === void 0 ? void 0 : _a.dns_server }) }),
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
const getTunnelPresignedURL = (request) => (testIds) => __awaiter(void 0, void 0, void 0, function* () {
|
|
176
|
+
const resp = yield retryRequest({
|
|
177
|
+
params: {
|
|
178
|
+
test_id: testIds,
|
|
179
|
+
},
|
|
180
|
+
paramsSerializer: (params) => (0, querystring_1.stringify)(params),
|
|
181
|
+
url: '/synthetics/ci/tunnel',
|
|
182
|
+
}, request);
|
|
183
|
+
return resp.data;
|
|
184
|
+
});
|
|
185
|
+
const getMobileApplicationPresignedURLs = (request) => (applicationId, appSize, parts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
186
|
+
const partForRequest = (part) => ({
|
|
187
|
+
md5: part.md5,
|
|
188
|
+
partNumber: part.partNumber,
|
|
189
|
+
});
|
|
190
|
+
const resp = yield retryRequest({
|
|
191
|
+
data: {
|
|
192
|
+
appSize,
|
|
193
|
+
parts: parts.map(partForRequest),
|
|
194
|
+
},
|
|
195
|
+
method: 'POST',
|
|
196
|
+
url: `/synthetics/mobile/applications/${applicationId}/multipart-presigned-urls`,
|
|
197
|
+
}, request);
|
|
198
|
+
return resp.data;
|
|
199
|
+
});
|
|
200
|
+
const uploadMobileApplicationPart = (request) => (parts, multipartPresignedUrlsParams) => __awaiter(void 0, void 0, void 0, function* () {
|
|
201
|
+
const promises = Object.entries(multipartPresignedUrlsParams.urls).map(([partNumber, presignedUrl]) => __awaiter(void 0, void 0, void 0, function* () {
|
|
202
|
+
const resp = yield retryRequest({
|
|
203
|
+
data: parts[Number(partNumber) - 1].blob,
|
|
204
|
+
headers: {
|
|
205
|
+
'Content-MD5': parts[Number(partNumber) - 1].md5,
|
|
206
|
+
// Presigned URL *requires* unset content-type since it's used for signature
|
|
207
|
+
// We can clear axios default by setting to null
|
|
208
|
+
// https://github.com/axios/axios/pull/1845
|
|
209
|
+
// eslint-disable-next-line no-null/no-null
|
|
210
|
+
'Content-Type': null,
|
|
211
|
+
},
|
|
212
|
+
maxBodyLength: Infinity,
|
|
213
|
+
maxContentLength: Infinity,
|
|
214
|
+
method: 'PUT',
|
|
215
|
+
url: presignedUrl,
|
|
216
|
+
}, request);
|
|
217
|
+
// Azure part-upload does not return ETag headers, so our backend ignores it for Azure
|
|
218
|
+
const quotedEtag = isAzureUrl(presignedUrl) ? '' : resp.headers.etag;
|
|
219
|
+
return {
|
|
220
|
+
ETag: quotedEtag.replace(/"/g, ''),
|
|
221
|
+
PartNumber: Number(partNumber),
|
|
222
|
+
};
|
|
223
|
+
}));
|
|
224
|
+
return Promise.all(promises);
|
|
225
|
+
});
|
|
226
|
+
const completeMultipartMobileApplicationUpload = (request) => (applicationId, uploadId, key, uploadPartResponses, newVersionParams) => __awaiter(void 0, void 0, void 0, function* () {
|
|
227
|
+
const resp = yield retryRequest({
|
|
228
|
+
data: {
|
|
229
|
+
key,
|
|
230
|
+
newVersionParams,
|
|
231
|
+
parts: uploadPartResponses,
|
|
232
|
+
uploadId,
|
|
233
|
+
validateMode: newVersionParams ? 'validate-and-persist' : 'validate-only',
|
|
234
|
+
},
|
|
235
|
+
method: 'POST',
|
|
236
|
+
url: `/synthetics/mobile/applications/${applicationId}/multipart-upload-complete`,
|
|
237
|
+
}, request);
|
|
238
|
+
return resp.data.job_id;
|
|
239
|
+
});
|
|
240
|
+
exports.completeMultipartMobileApplicationUpload = completeMultipartMobileApplicationUpload;
|
|
241
|
+
const pollMobileApplicationUploadResponse = (request) => (jobId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
242
|
+
const response = yield retryRequest({
|
|
243
|
+
method: 'GET',
|
|
244
|
+
url: `/synthetics/mobile/applications/validation-job-status/${jobId}`,
|
|
245
|
+
}, request);
|
|
246
|
+
return response.data;
|
|
247
|
+
});
|
|
248
|
+
exports.pollMobileApplicationUploadResponse = pollMobileApplicationUploadResponse;
|
|
249
|
+
const retryWithJitter = (delay = DELAY_BETWEEN_429_RETRIES) => delay + Math.floor(Math.random() * delay);
|
|
250
|
+
const determineRetryDelay = (retries, error, retryPolicy = { retryOn404: false, retryOn429: false }) => {
|
|
251
|
+
// Always retry on Node.js errors
|
|
252
|
+
if (retries < MAX_RETRIES && (0, exports.isNodeError)(error)) {
|
|
253
|
+
return LARGE_DELAY_BETWEEN_RETRIES;
|
|
254
|
+
}
|
|
255
|
+
// Always retry on 5xx
|
|
256
|
+
if (retries < MAX_RETRIES && (0, exports.is5xxError)(error)) {
|
|
257
|
+
return DELAY_BETWEEN_RETRIES;
|
|
258
|
+
}
|
|
259
|
+
// Retry on 404
|
|
260
|
+
if (retryPolicy.retryOn404 && retries < MAX_RETRIES && (0, exports.isNotFoundError)(error)) {
|
|
261
|
+
return DELAY_BETWEEN_RETRIES;
|
|
262
|
+
}
|
|
263
|
+
// Retry on 429
|
|
264
|
+
if (retryPolicy.retryOn429 && retries < MAX_RETRIES && (0, exports.isTooManyRequestsError)(error)) {
|
|
265
|
+
return retryWithJitter(DELAY_BETWEEN_429_RETRIES);
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
exports.determineRetryDelay = determineRetryDelay;
|
|
269
|
+
const isEndpointError = (error) => error instanceof EndpointError;
|
|
270
|
+
const getErrorHttpStatus = (error) => { var _a; return isEndpointError(error) ? error.status : (0, axios_1.isAxiosError)(error) ? (_a = error.response) === null || _a === void 0 ? void 0 : _a.status : undefined; };
|
|
271
|
+
exports.getErrorHttpStatus = getErrorHttpStatus;
|
|
272
|
+
const isForbiddenError = (error) => (0, exports.getErrorHttpStatus)(error) === 403;
|
|
273
|
+
exports.isForbiddenError = isForbiddenError;
|
|
274
|
+
const isNotFoundError = (error) => (0, exports.getErrorHttpStatus)(error) === 404;
|
|
275
|
+
exports.isNotFoundError = isNotFoundError;
|
|
276
|
+
const isTooManyRequestsError = (error) => (0, exports.getErrorHttpStatus)(error) === 429;
|
|
277
|
+
exports.isTooManyRequestsError = isTooManyRequestsError;
|
|
278
|
+
const isNodeError = (error) => !!error && 'code' in error;
|
|
279
|
+
exports.isNodeError = isNodeError;
|
|
280
|
+
const is5xxError = (error) => {
|
|
281
|
+
const statusCode = (0, exports.getErrorHttpStatus)(error);
|
|
282
|
+
return statusCode && statusCode >= 500 && statusCode <= 599 ? true : false;
|
|
283
|
+
};
|
|
284
|
+
exports.is5xxError = is5xxError;
|
|
285
|
+
const retryRequest = (args, request, statusCodesToRetryOn) => (0, public_1.retry)(() => request(args), (retries, e) => (0, exports.determineRetryDelay)(retries, e, statusCodesToRetryOn));
|
|
286
|
+
const apiConstructor = (configuration) => {
|
|
287
|
+
const { baseV1Url, baseV2Url, baseIntakeUrl, baseUnstableUrl, apiKey, appKey, proxyOpts } = configuration;
|
|
288
|
+
const baseOptions = { apiKey, appKey, proxyOpts };
|
|
289
|
+
const requestV1 = (0, utils_1.getRequestBuilder)(Object.assign(Object.assign({}, baseOptions), { baseUrl: baseV1Url }));
|
|
290
|
+
const requestV2 = (0, utils_1.getRequestBuilder)(Object.assign(Object.assign({}, baseOptions), { baseUrl: baseV2Url }));
|
|
291
|
+
const requestUnstable = (0, utils_1.getRequestBuilder)(Object.assign(Object.assign({}, baseOptions), { baseUrl: baseUnstableUrl }));
|
|
292
|
+
const requestIntake = (0, utils_1.getRequestBuilder)(Object.assign(Object.assign({}, baseOptions), { baseUrl: baseIntakeUrl }));
|
|
293
|
+
return {
|
|
294
|
+
getBatch: getBatch(requestV1),
|
|
295
|
+
getMobileApplicationPresignedURLs: getMobileApplicationPresignedURLs(requestUnstable),
|
|
296
|
+
getTest: getTest(requestV1),
|
|
297
|
+
getTestVersion: getTestVersion(requestV2),
|
|
298
|
+
getLocalTestDefinition: getLocalTestDefinition(requestV1),
|
|
299
|
+
editTest: editTest(requestV1),
|
|
300
|
+
getSyntheticsOrgSettings: getSyntheticsOrgSettings(requestV1),
|
|
301
|
+
getTunnelPresignedURL: getTunnelPresignedURL(requestIntake),
|
|
302
|
+
pollResults: pollResults(requestV2),
|
|
303
|
+
searchTests: searchTests(requestV1),
|
|
304
|
+
triggerTests: triggerTests(requestIntake),
|
|
305
|
+
uploadMobileApplicationPart: uploadMobileApplicationPart(requestV1),
|
|
306
|
+
completeMultipartMobileApplicationUpload: (0, exports.completeMultipartMobileApplicationUpload)(requestUnstable),
|
|
307
|
+
pollMobileApplicationUploadResponse: (0, exports.pollMobileApplicationUploadResponse)(requestUnstable),
|
|
308
|
+
};
|
|
309
|
+
};
|
|
310
|
+
exports.apiConstructor = apiConstructor;
|
|
311
|
+
const getApiHelper = (config) => {
|
|
312
|
+
if (!config.appKey) {
|
|
313
|
+
throw new errors_1.CriticalError('MISSING_APP_KEY', 'App key is required');
|
|
314
|
+
}
|
|
315
|
+
if (!config.apiKey) {
|
|
316
|
+
throw new errors_1.CriticalError('MISSING_API_KEY', 'API key is required');
|
|
317
|
+
}
|
|
318
|
+
return (0, exports.apiConstructor)({
|
|
319
|
+
apiKey: config.apiKey,
|
|
320
|
+
appKey: config.appKey,
|
|
321
|
+
baseIntakeUrl: (0, public_1.getDatadogHost)({ useIntake: true, apiVersion: 'v1', config }),
|
|
322
|
+
baseUnstableUrl: (0, public_1.getDatadogHost)({ useIntake: false, apiVersion: 'unstable', config }),
|
|
323
|
+
baseV1Url: (0, public_1.getDatadogHost)({ useIntake: false, apiVersion: 'v1', config }),
|
|
324
|
+
baseV2Url: (0, public_1.getDatadogHost)({ useIntake: false, apiVersion: 'v2', config }),
|
|
325
|
+
proxyOpts: config.proxy,
|
|
326
|
+
});
|
|
327
|
+
};
|
|
328
|
+
exports.getApiHelper = getApiHelper;
|
|
329
|
+
const isAzureUrl = (presignedUrl) => {
|
|
330
|
+
// https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url?tabs=microsoft-entra-id#request
|
|
331
|
+
return presignedUrl.includes('.blob.core.windows.net');
|
|
332
|
+
};
|
|
333
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/batch.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Metadata } from '@datadog/datadog-ci-base/helpers/interfaces';
|
|
2
|
+
import { APIHelper } from './api';
|
|
3
|
+
import { Batch, MainReporter, Result, ResultDisplayInfo, ResultInBatch, Test, TestPayload, TriggerInfo } from './interfaces';
|
|
4
|
+
import { Tunnel } from './tunnel';
|
|
5
|
+
export declare const DEFAULT_BATCH_TIMEOUT: number;
|
|
6
|
+
export declare const runTests: (api: APIHelper, testsToTrigger: TestPayload[], reporter: MainReporter, metadata?: Metadata, failOnMissingTests?: boolean, selectiveRerun?: boolean, batchTimeout?: number) => Promise<TriggerInfo>;
|
|
7
|
+
export declare const waitForResults: (api: APIHelper, trigger: TriggerInfo, tests: Test[], options: ResultDisplayInfo['options'], reporter: MainReporter, tunnel?: Tunnel) => Promise<Result[]>;
|
|
8
|
+
export declare const getResultsToReport: (shouldContinuePolling: boolean, batch: Batch, newlyReceivedResults: ResultInBatch[], emittedResultIds: Set<string>, oldIncompleteResultIds: Set<string>, incompleteResultIds: Set<string>, reporter: MainReporter) => ResultInBatch[];
|
|
9
|
+
export declare const reportReceivedResults: (batch: Batch, emittedResultIds: Set<string>, reporter: MainReporter) => ResultInBatch[];
|