checkly 8.9.0 → 8.10.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.
@@ -1,5 +1,61 @@
1
+ import { isAxiosError } from 'axios';
2
+ import { Readable } from 'node:stream';
1
3
  import { compressJSONPayload } from './util.js';
2
- import { ConflictError, ForbiddenError, NotFoundError } from './errors.js';
4
+ import { ConflictError, ForbiddenError, handleErrorResponse, NotFoundError, RequestTimeoutError } from './errors.js';
5
+ export class ProjectDeployFailedError extends Error {
6
+ constructor(message, options) {
7
+ super(message, options);
8
+ this.name = 'ProjectDeployFailedError';
9
+ }
10
+ }
11
+ /** The deployment was cancelled before it finished (e.g. superseded by a newer deploy). */
12
+ export class ProjectDeployCancelledError extends Error {
13
+ constructor(message, options) {
14
+ super(message, options);
15
+ this.name = 'ProjectDeployCancelledError';
16
+ }
17
+ }
18
+ /** Internal: the SSE stream ended before a terminal event (eligible for reconnect). */
19
+ class DeploymentStreamInterruptedError extends Error {
20
+ constructor() {
21
+ super('The deployment event stream ended before completion.');
22
+ this.name = 'DeploymentStreamInterruptedError';
23
+ }
24
+ }
25
+ function streamToString(stream) {
26
+ return new Promise((resolve, reject) => {
27
+ const chunks = [];
28
+ stream.on('data', chunk => chunks.push(Buffer.from(chunk)));
29
+ stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
30
+ stream.on('error', reject);
31
+ });
32
+ }
33
+ /** Parse one SSE frame ("event: x\ndata: {...}"), assuming LF line endings.
34
+ * Returns null for keep-alive comments or frames without parseable JSON data. */
35
+ function parseSseFrame(raw) {
36
+ let event = 'message';
37
+ const dataLines = [];
38
+ for (const line of raw.split('\n')) {
39
+ if (line.startsWith(':')) {
40
+ continue; // keep-alive comment
41
+ }
42
+ if (line.startsWith('event:')) {
43
+ event = line.slice('event:'.length).trim();
44
+ }
45
+ else if (line.startsWith('data:')) {
46
+ dataLines.push(line.slice('data:'.length).trim());
47
+ }
48
+ }
49
+ if (dataLines.length === 0) {
50
+ return null;
51
+ }
52
+ try {
53
+ return { event, data: JSON.parse(dataLines.join('\n')) };
54
+ }
55
+ catch {
56
+ return null;
57
+ }
58
+ }
3
59
  export class ProjectNotFoundError extends Error {
4
60
  logicalId;
5
61
  constructor(logicalId, options) {
@@ -34,6 +90,10 @@ export class InvalidImportPlanStateError extends Error {
34
90
  this.name = 'InvalidImportPlanStateError';
35
91
  }
36
92
  }
93
+ // How long deploy() will keep waiting-and-retrying behind an in-progress
94
+ // deployment before giving up and surfacing the 409. Generous, since a large
95
+ // predecessor deploy can legitimately run for many minutes.
96
+ const DEPLOY_CONFLICT_WAIT_DEADLINE_MS = 30 * 60_000;
37
97
  class Projects {
38
98
  api;
39
99
  constructor(api) {
@@ -88,8 +148,207 @@ class Projects {
88
148
  throw err;
89
149
  }
90
150
  }
91
- deploy(resources, { dryRun = false, scheduleOnDeploy = true } = {}) {
92
- return this.api.post(`/next-v2/projects/deploy?dryRun=${dryRun}&scheduleOnDeploy=${scheduleOnDeploy}`, resources, { transformRequest: compressJSONPayload });
151
+ /**
152
+ * Deploy a project. The deployment runs asynchronously on the backend: this
153
+ * submits it, then follows its progress stream to completion, so large projects
154
+ * are no longer bound by the API gateway request timeout. A dry run returns the
155
+ * preview diff synchronously without starting a deployment.
156
+ *
157
+ * @throws {ProjectDeployFailedError} If the deployment finishes unsuccessfully.
158
+ */
159
+ async deploy(resources, { dryRun = false, scheduleOnDeploy = true, cancelInProgress = false, onProgress, onStatus } = {}) {
160
+ const logicalId = resources.project.logicalId;
161
+ // On a 409 the project already has a deployment in progress. By default we
162
+ // wait for it to finish then retry; with cancelInProgress we cancel it first.
163
+ // resolveInProgressDeployment only returns once the predecessor has reached a
164
+ // final state, so we re-POST the (potentially large) payload exactly once per
165
+ // predecessor — never while it is still running. Bound by an overall deadline
166
+ // so a stuck predecessor can't make us wait forever.
167
+ const deadlineAt = Date.now() + DEPLOY_CONFLICT_WAIT_DEADLINE_MS;
168
+ for (;;) {
169
+ try {
170
+ return await this.submitDeployment(resources, { dryRun, scheduleOnDeploy, onProgress });
171
+ }
172
+ catch (err) {
173
+ if (dryRun
174
+ || !(err instanceof ConflictError)
175
+ || typeof err.data.deploymentId !== 'string'
176
+ || Date.now() >= deadlineAt) {
177
+ throw err;
178
+ }
179
+ await this.resolveInProgressDeployment(logicalId, err.data.deploymentId, {
180
+ cancel: cancelInProgress,
181
+ onStatus,
182
+ deadlineAt,
183
+ });
184
+ // loop → re-POST, now that the predecessor has reached a final state
185
+ }
186
+ }
187
+ }
188
+ async submitDeployment(resources, { dryRun, scheduleOnDeploy, onProgress }) {
189
+ const { data } = await this.api.post(`/v1/projects/deploy?dryRun=${dryRun}&scheduleOnDeploy=${scheduleOnDeploy}`, resources, { transformRequest: compressJSONPayload });
190
+ // A dry run responds synchronously with the preview diff.
191
+ if (dryRun) {
192
+ return { data: data };
193
+ }
194
+ // A real deploy responds with a deployment to follow to completion.
195
+ const deployment = data;
196
+ const completed = await this.streamDeploymentEvents(resources.project.logicalId, deployment.id, { onProgress });
197
+ if (completed.status === 'CANCELLED') {
198
+ throw new ProjectDeployCancelledError('A newer deployment may have cancelled yours. Try deploying again if you still need to apply your changes.');
199
+ }
200
+ if (completed.status !== 'SUCCEEDED' || completed.result === null) {
201
+ throw new ProjectDeployFailedError(completed.error?.message ?? 'The deployment did not complete successfully.');
202
+ }
203
+ return { data: completed.result };
204
+ }
205
+ /**
206
+ * Resolve a collision with an in-progress deployment so the caller can retry:
207
+ * optionally cancel it, then wait until it reaches a final state (or is gone)
208
+ * before returning — so the caller re-POSTs only when the slot is actually
209
+ * free, never re-uploading the payload while the predecessor is still running.
210
+ * Returns early if the overall `deadlineAt` passes (the caller then re-POSTs
211
+ * once and surfaces the conflict).
212
+ */
213
+ async resolveInProgressDeployment(logicalId, deploymentId, { cancel, onStatus, deadlineAt }) {
214
+ if (cancel) {
215
+ onStatus?.('Cancelling an in-progress deployment...');
216
+ try {
217
+ await this.cancelDeployment(logicalId, deploymentId);
218
+ }
219
+ catch (err) {
220
+ // Already gone → nothing to cancel; proceed to retry.
221
+ if (!(err instanceof NotFoundError)) {
222
+ throw err;
223
+ }
224
+ return;
225
+ }
226
+ }
227
+ else {
228
+ onStatus?.('Waiting for an in-progress deployment to finish...');
229
+ }
230
+ // Poll the completion endpoint until the predecessor is final. Pacing comes
231
+ // from the server-side long-poll (~maxWaitSeconds per call), so this is not a
232
+ // busy loop; the deadline bounds the total wait.
233
+ for (;;) {
234
+ try {
235
+ await this.awaitDeploymentCompletion(logicalId, deploymentId);
236
+ return; // reached a final state → slot free
237
+ }
238
+ catch (err) {
239
+ if (err instanceof NotFoundError) {
240
+ return; // gone → slot free
241
+ }
242
+ // 408 = still running after the long-poll window. Keep waiting unless the
243
+ // overall deadline has passed, in which case return and let the caller
244
+ // re-POST once and surface the conflict.
245
+ if (err instanceof RequestTimeoutError) {
246
+ if (Date.now() >= deadlineAt) {
247
+ return;
248
+ }
249
+ continue;
250
+ }
251
+ throw err;
252
+ }
253
+ }
254
+ }
255
+ getDeployment(logicalId, deploymentId) {
256
+ return this.api.get(`/v1/projects/${encodeURIComponent(logicalId)}/deployments/${encodeURIComponent(deploymentId)}`);
257
+ }
258
+ /** Request cancellation of an in-flight deployment (idempotent on the server). */
259
+ cancelDeployment(logicalId, deploymentId) {
260
+ return this.api.post(`/v1/projects/${encodeURIComponent(logicalId)}/deployments/${encodeURIComponent(deploymentId)}/cancel`);
261
+ }
262
+ /**
263
+ * Long-poll the completion endpoint once: the server blocks up to
264
+ * `maxWaitSeconds` and returns the deployment when it reaches a final state, or
265
+ * 408 (`RequestTimeoutError`) if it is still running when that window elapses.
266
+ * The retry cadence lives in the caller, not here.
267
+ */
268
+ async awaitDeploymentCompletion(logicalId, deploymentId, { maxWaitSeconds = 30 } = {}) {
269
+ const { data } = await this.api.get(`/v1/projects/${encodeURIComponent(logicalId)}/deployments/${encodeURIComponent(deploymentId)}/completion`, { params: { maxWaitSeconds } });
270
+ return data;
271
+ }
272
+ /**
273
+ * Follow a deployment to completion over its Server-Sent Events stream,
274
+ * invoking `onProgress` as progress frames arrive and resolving with the final
275
+ * deployment on the terminal `complete` frame. If the stream drops before a
276
+ * terminal frame (a transient network blip), it reconnects up to `maxReconnects`
277
+ * times — the server is stateless and re-reads current state, so resuming needs
278
+ * no cursor.
279
+ */
280
+ async streamDeploymentEvents(logicalId, deploymentId, { onProgress, maxReconnects = 5 } = {}) {
281
+ let reconnects = 0;
282
+ for (;;) {
283
+ try {
284
+ return await this.consumeEventStream(logicalId, deploymentId, onProgress);
285
+ }
286
+ catch (err) {
287
+ if (err instanceof DeploymentStreamInterruptedError && reconnects < maxReconnects) {
288
+ reconnects += 1;
289
+ continue;
290
+ }
291
+ throw err;
292
+ }
293
+ }
294
+ }
295
+ async openEventStream(logicalId, deploymentId) {
296
+ try {
297
+ const { data } = await this.api.get(`/v1/projects/${encodeURIComponent(logicalId)}/deployments/${encodeURIComponent(deploymentId)}/events`, { responseType: 'stream', headers: { Accept: 'text/event-stream' } });
298
+ return data;
299
+ }
300
+ catch (err) {
301
+ // On an HTTP error the body arrives as an unparsed stream (responseType
302
+ // 'stream'), so the response interceptor couldn't classify it. Buffer it and
303
+ // re-run the classifier to surface the typed error (NotFoundError, etc.).
304
+ if (isAxiosError(err) && err.response && err.response.data instanceof Readable) {
305
+ err.response.data = await streamToString(err.response.data);
306
+ handleErrorResponse(err);
307
+ }
308
+ throw err;
309
+ }
310
+ }
311
+ async consumeEventStream(logicalId, deploymentId, onProgress) {
312
+ const stream = await this.openEventStream(logicalId, deploymentId);
313
+ return new Promise((resolve, reject) => {
314
+ let buffer = '';
315
+ let settled = false;
316
+ const settle = (action) => {
317
+ if (settled) {
318
+ return;
319
+ }
320
+ settled = true;
321
+ stream.destroy();
322
+ action();
323
+ };
324
+ stream.on('data', (chunk) => {
325
+ buffer += chunk.toString('utf8');
326
+ let boundary = buffer.indexOf('\n\n');
327
+ while (boundary !== -1) {
328
+ const frame = parseSseFrame(buffer.slice(0, boundary));
329
+ buffer = buffer.slice(boundary + 2);
330
+ if (frame?.event === 'progress') {
331
+ if (onProgress !== undefined && typeof frame.data?.progress === 'number') {
332
+ onProgress(frame.data.progress);
333
+ }
334
+ }
335
+ else if (frame?.event === 'complete') {
336
+ settle(() => resolve(frame.data));
337
+ }
338
+ else if (frame?.event === 'error') {
339
+ const message = typeof frame.data?.message === 'string'
340
+ ? frame.data.message
341
+ : 'The deployment event stream reported an error.';
342
+ settle(() => reject(new ProjectDeployFailedError(message)));
343
+ }
344
+ boundary = buffer.indexOf('\n\n');
345
+ }
346
+ });
347
+ // Both a clean EOF before a terminal frame and a socket error (the common
348
+ // mid-deploy drop, e.g. ECONNRESET) are interruptions eligible for reconnect.
349
+ stream.on('end', () => settle(() => reject(new DeploymentStreamInterruptedError())));
350
+ stream.on('error', () => settle(() => reject(new DeploymentStreamInterruptedError())));
351
+ });
93
352
  }
94
353
  /**
95
354
  * @throws {ProjectNotFoundError} If the project does not exist.
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/rest/projects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/rest/projects.ts"],"names":[],"mappings":"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"}