@hs-x/cli 0.2.6 → 0.3.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.
- package/LICENSE +202 -0
- package/README.md +25 -8
- package/dist/audit-interactive.d.ts +29 -0
- package/dist/audit-interactive.d.ts.map +1 -0
- package/dist/audit-interactive.js +156 -0
- package/dist/audit-interactive.js.map +1 -0
- package/dist/bin/hs-x.js.map +1 -1
- package/dist/checkpoint-interactive.d.ts +24 -0
- package/dist/checkpoint-interactive.d.ts.map +1 -0
- package/dist/checkpoint-interactive.js +65 -0
- package/dist/checkpoint-interactive.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +266 -39
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/kit.d.ts +1 -1
- package/dist/cli/kit.d.ts.map +1 -1
- package/dist/cli/kit.js +19 -3
- package/dist/cli/kit.js.map +1 -1
- package/dist/cloudflare-auth.d.ts +8 -0
- package/dist/cloudflare-auth.d.ts.map +1 -1
- package/dist/cloudflare-auth.js +12 -2
- package/dist/cloudflare-auth.js.map +1 -1
- package/dist/cloudflare-oauth-store.d.ts +9 -1
- package/dist/cloudflare-oauth-store.d.ts.map +1 -1
- package/dist/cloudflare-oauth-store.js +23 -4
- package/dist/cloudflare-oauth-store.js.map +1 -1
- package/dist/cloudflare-oauth.d.ts +1 -0
- package/dist/cloudflare-oauth.d.ts.map +1 -1
- package/dist/cloudflare-oauth.js +6 -2
- package/dist/cloudflare-oauth.js.map +1 -1
- package/dist/cloudflare-worker-versions.d.ts +184 -0
- package/dist/cloudflare-worker-versions.d.ts.map +1 -0
- package/dist/cloudflare-worker-versions.js +360 -0
- package/dist/cloudflare-worker-versions.js.map +1 -0
- package/dist/commands/account.d.ts +28 -13
- package/dist/commands/account.d.ts.map +1 -1
- package/dist/commands/account.js +219 -69
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/api.d.ts +1 -1
- package/dist/commands/api.d.ts.map +1 -1
- package/dist/commands/api.js +6 -10
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +13 -7
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +239 -125
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/control-plane-read.d.ts +72 -11
- package/dist/commands/control-plane-read.d.ts.map +1 -1
- package/dist/commands/control-plane-read.js +1035 -58
- package/dist/commands/control-plane-read.js.map +1 -1
- package/dist/commands/deploy-promote.d.ts +25 -3
- package/dist/commands/deploy-promote.d.ts.map +1 -1
- package/dist/commands/deploy-promote.js +314 -38
- package/dist/commands/deploy-promote.js.map +1 -1
- package/dist/commands/deploy.d.ts +67 -4
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +1333 -255
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +5 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +502 -107
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts +15 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +131 -20
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/flags.d.ts +108 -6
- package/dist/commands/flags.d.ts.map +1 -1
- package/dist/commands/flags.js +996 -75
- package/dist/commands/flags.js.map +1 -1
- package/dist/commands/help-command.d.ts +14 -0
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +144 -44
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/history.js +14 -10
- package/dist/commands/history.js.map +1 -1
- package/dist/commands/init.d.ts +4 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +69 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/link.d.ts +2 -3
- package/dist/commands/link.d.ts.map +1 -1
- package/dist/commands/link.js +201 -101
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/login.d.ts +2 -2
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +22 -5
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/migrate.d.ts +23 -3
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +500 -73
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/rollback.d.ts +42 -2
- package/dist/commands/rollback.d.ts.map +1 -1
- package/dist/commands/rollback.js +422 -58
- package/dist/commands/rollback.js.map +1 -1
- package/dist/commands/secrets.d.ts +76 -3
- package/dist/commands/secrets.d.ts.map +1 -1
- package/dist/commands/secrets.js +328 -41
- package/dist/commands/secrets.js.map +1 -1
- package/dist/commands/status.d.ts +13 -2
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +154 -17
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/unlink.d.ts +2 -2
- package/dist/commands/unlink.d.ts.map +1 -1
- package/dist/commands/unlink.js +2 -2
- package/dist/commands/unlink.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +4 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.d.ts +12 -3
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +70 -8
- package/dist/commands/validate.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/control-plane-fetch.d.ts.map +1 -1
- package/dist/control-plane-fetch.js +5 -4
- package/dist/control-plane-fetch.js.map +1 -1
- package/dist/deploy-revision-capture.d.ts +48 -0
- package/dist/deploy-revision-capture.d.ts.map +1 -0
- package/dist/deploy-revision-capture.js +125 -0
- package/dist/deploy-revision-capture.js.map +1 -0
- package/dist/dev/compat-shim.d.ts.map +1 -1
- package/dist/dev/compat-shim.js +10 -35
- package/dist/dev/compat-shim.js.map +1 -1
- package/dist/dev/event-bus.d.ts +5 -2
- package/dist/dev/event-bus.d.ts.map +1 -1
- package/dist/dev/event-bus.js +4 -1
- package/dist/dev/event-bus.js.map +1 -1
- package/dist/dev/hubspot-logs-poller.d.ts +35 -0
- package/dist/dev/hubspot-logs-poller.d.ts.map +1 -0
- package/dist/dev/hubspot-logs-poller.js +94 -0
- package/dist/dev/hubspot-logs-poller.js.map +1 -0
- package/dist/dev/invoke.d.ts +9 -1
- package/dist/dev/invoke.d.ts.map +1 -1
- package/dist/dev/invoke.js +69 -20
- package/dist/dev/invoke.js.map +1 -1
- package/dist/dev/keyboard.d.ts +31 -0
- package/dist/dev/keyboard.d.ts.map +1 -0
- package/dist/dev/keyboard.js +143 -0
- package/dist/dev/keyboard.js.map +1 -0
- package/dist/dev/log-server.d.ts +7 -0
- package/dist/dev/log-server.d.ts.map +1 -1
- package/dist/dev/log-server.js +68 -31
- package/dist/dev/log-server.js.map +1 -1
- package/dist/dev/migrated-card.d.ts +17 -0
- package/dist/dev/migrated-card.d.ts.map +1 -0
- package/dist/dev/migrated-card.js +114 -0
- package/dist/dev/migrated-card.js.map +1 -0
- package/dist/dev/stream-filter.d.ts +40 -0
- package/dist/dev/stream-filter.d.ts.map +1 -0
- package/dist/dev/stream-filter.js +93 -0
- package/dist/dev/stream-filter.js.map +1 -0
- package/dist/dev/stream-renderer.d.ts +34 -0
- package/dist/dev/stream-renderer.d.ts.map +1 -1
- package/dist/dev/stream-renderer.js +222 -8
- package/dist/dev/stream-renderer.js.map +1 -1
- package/dist/errors-registry.d.ts.map +1 -1
- package/dist/errors-registry.js +280 -36
- package/dist/errors-registry.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +8 -0
- package/dist/help.js.map +1 -1
- package/dist/hubspot-app-logs.d.ts +76 -0
- package/dist/hubspot-app-logs.d.ts.map +1 -0
- package/dist/hubspot-app-logs.js +323 -0
- package/dist/hubspot-app-logs.js.map +1 -0
- package/dist/hubspot-auth.d.ts +8 -2
- package/dist/hubspot-auth.d.ts.map +1 -1
- package/dist/hubspot-auth.js +36 -12
- package/dist/hubspot-auth.js.map +1 -1
- package/dist/hubspot-developer-client.js +119 -11
- package/dist/hubspot-developer-client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init/templates.d.ts +10 -0
- package/dist/init/templates.d.ts.map +1 -1
- package/dist/init/templates.js +157 -14
- package/dist/init/templates.js.map +1 -1
- package/dist/link-migration-journal.d.ts +131 -0
- package/dist/link-migration-journal.d.ts.map +1 -0
- package/dist/link-migration-journal.js +395 -0
- package/dist/link-migration-journal.js.map +1 -0
- package/dist/link-preflight.d.ts +78 -0
- package/dist/link-preflight.d.ts.map +1 -0
- package/dist/link-preflight.js +231 -0
- package/dist/link-preflight.js.map +1 -0
- package/dist/local-project-picker.d.ts +34 -0
- package/dist/local-project-picker.d.ts.map +1 -0
- package/dist/local-project-picker.js +121 -0
- package/dist/local-project-picker.js.map +1 -0
- package/dist/logs-interactive.d.ts +37 -0
- package/dist/logs-interactive.d.ts.map +1 -0
- package/dist/logs-interactive.js +110 -0
- package/dist/logs-interactive.js.map +1 -0
- package/dist/output-context.d.ts +13 -0
- package/dist/output-context.d.ts.map +1 -0
- package/dist/output-context.js +46 -0
- package/dist/output-context.js.map +1 -0
- package/dist/project-context.d.ts +55 -0
- package/dist/project-context.d.ts.map +1 -0
- package/dist/project-context.js +115 -0
- package/dist/project-context.js.map +1 -0
- package/dist/project-picker.d.ts +65 -0
- package/dist/project-picker.d.ts.map +1 -0
- package/dist/project-picker.js +227 -0
- package/dist/project-picker.js.map +1 -0
- package/dist/prompt.d.ts +8 -0
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +81 -13
- package/dist/prompt.js.map +1 -1
- package/dist/reporter/human.d.ts +10 -2
- package/dist/reporter/human.d.ts.map +1 -1
- package/dist/reporter/human.js +82 -14
- package/dist/reporter/human.js.map +1 -1
- package/dist/reporter/index.d.ts.map +1 -1
- package/dist/reporter/index.js +7 -5
- package/dist/reporter/index.js.map +1 -1
- package/dist/reporter/json.d.ts +2 -1
- package/dist/reporter/json.d.ts.map +1 -1
- package/dist/reporter/json.js +10 -7
- package/dist/reporter/json.js.map +1 -1
- package/dist/reporter/style.d.ts +19 -0
- package/dist/reporter/style.d.ts.map +1 -1
- package/dist/reporter/style.js +126 -6
- package/dist/reporter/style.js.map +1 -1
- package/dist/reporter/types.d.ts +34 -4
- package/dist/reporter/types.d.ts.map +1 -1
- package/dist/reporter/types.js.map +1 -1
- package/dist/rollback-traffic.d.ts +85 -0
- package/dist/rollback-traffic.d.ts.map +1 -0
- package/dist/rollback-traffic.js +204 -0
- package/dist/rollback-traffic.js.map +1 -0
- package/dist/services/account-store.d.ts +3 -1
- package/dist/services/account-store.d.ts.map +1 -1
- package/dist/services/account-store.js +2 -1
- package/dist/services/account-store.js.map +1 -1
- package/dist/services/app-paths.d.ts.map +1 -1
- package/dist/services/app-paths.js +3 -1
- package/dist/services/app-paths.js.map +1 -1
- package/dist/services/cloudflare-auth.d.ts +1 -1
- package/dist/services/cloudflare-auth.d.ts.map +1 -1
- package/dist/services/cloudflare-auth.js +2 -2
- package/dist/services/cloudflare-auth.js.map +1 -1
- package/dist/services/cloudflare-kv.d.ts.map +1 -1
- package/dist/services/cloudflare-kv.js.map +1 -1
- package/dist/services/command-history.d.ts.map +1 -1
- package/dist/services/command-history.js.map +1 -1
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/config.js +1 -1
- package/dist/services/config.js.map +1 -1
- package/dist/services/control-plane.d.ts.map +1 -1
- package/dist/services/control-plane.js +3 -3
- package/dist/services/control-plane.js.map +1 -1
- package/dist/services/env-loader.d.ts.map +1 -1
- package/dist/services/env-loader.js +1 -3
- package/dist/services/env-loader.js.map +1 -1
- package/dist/services/http.d.ts.map +1 -1
- package/dist/services/http.js.map +1 -1
- package/dist/services/hubspot-dev-client.d.ts.map +1 -1
- package/dist/services/hubspot-dev-client.js +30 -0
- package/dist/services/hubspot-dev-client.js.map +1 -1
- package/dist/services/live.d.ts +2 -2
- package/dist/services/live.d.ts.map +1 -1
- package/dist/services/live.js +1 -1
- package/dist/services/live.js.map +1 -1
- package/dist/services/machine-id.d.ts.map +1 -1
- package/dist/services/machine-id.js.map +1 -1
- package/dist/services/reporter.d.ts +8 -5
- package/dist/services/reporter.d.ts.map +1 -1
- package/dist/services/reporter.js +6 -4
- package/dist/services/reporter.js.map +1 -1
- package/dist/services/tenant-state.d.ts.map +1 -1
- package/dist/services/tenant-state.js.map +1 -1
- package/dist/state-store.d.ts +4 -0
- package/dist/state-store.d.ts.map +1 -1
- package/dist/state-store.js +15 -0
- package/dist/state-store.js.map +1 -1
- package/dist/status-drilldown.d.ts +24 -0
- package/dist/status-drilldown.d.ts.map +1 -0
- package/dist/status-drilldown.js +50 -0
- package/dist/status-drilldown.js.map +1 -0
- package/dist/tenant-state.d.ts.map +1 -1
- package/dist/tenant-state.js +3 -2
- package/dist/tenant-state.js.map +1 -1
- package/dist/token-key-custody.d.ts +91 -0
- package/dist/token-key-custody.d.ts.map +1 -0
- package/dist/token-key-custody.js +375 -0
- package/dist/token-key-custody.js.map +1 -0
- package/package.json +13 -14
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare Worker Versions/Deployments adapter (ADR-021).
|
|
3
|
+
*
|
|
4
|
+
* Rollback = point traffic at a retained Worker version via Cloudflare's
|
|
5
|
+
* native Versions/Deployments API. This module is the single place HS-X
|
|
6
|
+
* talks to that API surface: deploy capture (R03) records version ids from
|
|
7
|
+
* it, and rollback (R04) creates 100% deployments through it.
|
|
8
|
+
*
|
|
9
|
+
* API references (shapes confirmed 2026-07-14):
|
|
10
|
+
* - Versions: https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/versions/
|
|
11
|
+
* - List: GET /accounts/{account_id}/workers/scripts/{script_name}/versions
|
|
12
|
+
* response `result.items` (latest first; `?deployable=true` filter, `page`/`per_page`)
|
|
13
|
+
* https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/versions/methods/list/
|
|
14
|
+
* - Get: GET .../versions/{version_id} (full metadata + annotations + resources)
|
|
15
|
+
* - Deployments: https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/deployments/
|
|
16
|
+
* - List: GET .../deployments — response `result.deployments`, first entry is the
|
|
17
|
+
* ACTIVE deployment
|
|
18
|
+
* https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/deployments/methods/list/
|
|
19
|
+
* - Create: POST .../deployments (optional `?force=true`) with body
|
|
20
|
+
* `{ strategy: "percentage", versions: [{ percentage, version_id }], annotations? }`
|
|
21
|
+
* - Get: GET .../deployments/{deployment_id}
|
|
22
|
+
* - Concepts: https://developers.cloudflare.com/workers/configuration/versions-and-deployments/
|
|
23
|
+
*
|
|
24
|
+
* The only caller-settable deployment annotation is `workers/message` (max 1000
|
|
25
|
+
* bytes); `workers/triggered_by` is read-only (Cloudflare rejects it, HTTP 400
|
|
26
|
+
* code 10210). So the idempotency tag AND the trigger context both ride in
|
|
27
|
+
* `workers/message` — `[hsx-op:<operationId>] [<triggeredBy>] <message>`.
|
|
28
|
+
* `reconcileDeployment` recovers a previously-applied deployment by that tag
|
|
29
|
+
* after an ambiguous (timeout/5xx) create response.
|
|
30
|
+
*
|
|
31
|
+
* The adapter takes account id + script name verbatim and never invents
|
|
32
|
+
* names or ids: every version/deployment id it returns came from Cloudflare.
|
|
33
|
+
*/
|
|
34
|
+
export class CloudflareWorkerVersionsError extends Error {
|
|
35
|
+
detail;
|
|
36
|
+
status;
|
|
37
|
+
constructor(message, detail, status) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.detail = detail;
|
|
40
|
+
this.status = status;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** 401/403 (or Cloudflare "Authentication error" code 10000) from the API. */
|
|
44
|
+
export class CloudflareWorkerAuthFailedError extends CloudflareWorkerVersionsError {
|
|
45
|
+
code = 'HSX_E_CLOUDFLARE_AUTH_FAILED';
|
|
46
|
+
constructor(detail, status) {
|
|
47
|
+
super('Cloudflare rejected the API credential for the Worker Versions API.', detail, status);
|
|
48
|
+
this.name = 'CloudflareWorkerAuthFailedError';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** The Worker script does not exist on this account. */
|
|
52
|
+
export class CloudflareScriptNotFoundError extends CloudflareWorkerVersionsError {
|
|
53
|
+
code = 'HSX_E_CLOUDFLARE_SCRIPT_NOT_FOUND';
|
|
54
|
+
scriptName;
|
|
55
|
+
constructor(scriptName, detail, status) {
|
|
56
|
+
super(`Cloudflare Worker script "${scriptName}" was not found.`, detail, status);
|
|
57
|
+
this.name = 'CloudflareScriptNotFoundError';
|
|
58
|
+
this.scriptName = scriptName;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** The target version id does not exist (or is not deployable) for this script. */
|
|
62
|
+
export class CloudflareVersionNotFoundError extends CloudflareWorkerVersionsError {
|
|
63
|
+
code = 'HSX_E_CLOUDFLARE_VERSION_NOT_FOUND';
|
|
64
|
+
versionId;
|
|
65
|
+
constructor(versionId, detail, status) {
|
|
66
|
+
super(`Cloudflare Worker version "${versionId}" was not found or is not deployable.`, detail, status);
|
|
67
|
+
this.name = 'CloudflareVersionNotFoundError';
|
|
68
|
+
this.versionId = versionId;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A deployment create got an ambiguous response (network failure, timeout, or
|
|
73
|
+
* 5xx AFTER the POST was sent): Cloudflare may or may not have applied it.
|
|
74
|
+
* Callers must NOT blindly retry a raw POST — call `reconcileDeployment`
|
|
75
|
+
* (or `createDeployment` again, which reconciles first) with the same
|
|
76
|
+
* `operationId` to discover whether the deployment took effect.
|
|
77
|
+
*/
|
|
78
|
+
export class CloudflareDeploymentAmbiguousError extends CloudflareWorkerVersionsError {
|
|
79
|
+
code = 'HSX_E_CLOUDFLARE_DEPLOYMENT_AMBIGUOUS';
|
|
80
|
+
operationId;
|
|
81
|
+
versionId;
|
|
82
|
+
constructor(input) {
|
|
83
|
+
super('Cloudflare returned an ambiguous response while creating a Worker deployment; it may or may not have been applied. Reconcile with the same operation id before retrying.', input.detail, input.status);
|
|
84
|
+
this.name = 'CloudflareDeploymentAmbiguousError';
|
|
85
|
+
this.operationId = input.operationId;
|
|
86
|
+
this.versionId = input.versionId;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Any other API failure (unexpected 4xx, malformed body, transport error on reads). */
|
|
90
|
+
export class CloudflareVersionsApiError extends CloudflareWorkerVersionsError {
|
|
91
|
+
code = 'HSX_E_CLOUDFLARE_VERSIONS_API';
|
|
92
|
+
constructor(detail, status) {
|
|
93
|
+
super('Cloudflare Worker Versions API request failed.', detail, status);
|
|
94
|
+
this.name = 'CloudflareVersionsApiError';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
// Idempotency tag helpers
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
const OPERATION_ID_PATTERN = /^[A-Za-z0-9._-]{1,64}$/;
|
|
101
|
+
const OPERATION_TAG_PATTERN = /\[hsx-op:([A-Za-z0-9._-]{1,64})\]/;
|
|
102
|
+
/** `workers/message` is truncated by Cloudflare at 1000 bytes; stay under it. */
|
|
103
|
+
const MAX_MESSAGE_BYTES = 1000;
|
|
104
|
+
export function formatOperationTag(operationId) {
|
|
105
|
+
if (!OPERATION_ID_PATTERN.test(operationId)) {
|
|
106
|
+
throw new Error(`operationId must match ${String(OPERATION_ID_PATTERN)} (got ${JSON.stringify(operationId)})`);
|
|
107
|
+
}
|
|
108
|
+
return `[hsx-op:${operationId}]`;
|
|
109
|
+
}
|
|
110
|
+
export function parseOperationTag(message) {
|
|
111
|
+
if (!message)
|
|
112
|
+
return undefined;
|
|
113
|
+
const match = OPERATION_TAG_PATTERN.exec(message);
|
|
114
|
+
return match?.[1];
|
|
115
|
+
}
|
|
116
|
+
function buildDeploymentMessage(operationId, message, triggeredBy) {
|
|
117
|
+
const tag = formatOperationTag(operationId);
|
|
118
|
+
// Cloudflare rejects a caller-set `workers/triggered_by` annotation (HTTP 400
|
|
119
|
+
// code 10210 — it is read-only, set by Cloudflare), so carry the trigger
|
|
120
|
+
// context inside `workers/message` instead. The tag stays at the very front:
|
|
121
|
+
// reconcile keys on it, so it must never be truncated.
|
|
122
|
+
const prefix = triggeredBy ? `${tag} [${triggeredBy}]` : tag;
|
|
123
|
+
if (!message)
|
|
124
|
+
return prefix;
|
|
125
|
+
const full = `${prefix} ${message}`;
|
|
126
|
+
if (Buffer.byteLength(full, 'utf8') <= MAX_MESSAGE_BYTES)
|
|
127
|
+
return full;
|
|
128
|
+
let trimmed = message;
|
|
129
|
+
while (trimmed.length > 0 &&
|
|
130
|
+
Buffer.byteLength(`${prefix} ${trimmed}`, 'utf8') > MAX_MESSAGE_BYTES) {
|
|
131
|
+
trimmed = trimmed.slice(0, -1);
|
|
132
|
+
}
|
|
133
|
+
return trimmed.length > 0 ? `${prefix} ${trimmed}` : prefix;
|
|
134
|
+
}
|
|
135
|
+
/** Cloudflare "workers.api.error.script_not_found". */
|
|
136
|
+
const CF_CODE_SCRIPT_NOT_FOUND = 10007;
|
|
137
|
+
/** Cloudflare "Authentication error". */
|
|
138
|
+
const CF_CODE_AUTH_ERROR = 10000;
|
|
139
|
+
export function createWorkerVersionsClient(input) {
|
|
140
|
+
const fetchImpl = input.fetchImpl ?? fetch;
|
|
141
|
+
const baseUrl = input.baseUrl ?? 'https://api.cloudflare.com';
|
|
142
|
+
const scriptRoot = `/client/v4/accounts/${encodeURIComponent(input.accountId)}/workers/scripts/${encodeURIComponent(input.scriptName)}`;
|
|
143
|
+
/**
|
|
144
|
+
* Execute a request and parse the standard Cloudflare envelope. Transport
|
|
145
|
+
* failures (fetch throw / timeout) are NOT caught here — create-deployment
|
|
146
|
+
* needs to classify them as ambiguous, reads classify them as API errors.
|
|
147
|
+
*/
|
|
148
|
+
const request = async (path, init = {}) => {
|
|
149
|
+
const response = await fetchImpl(new URL(path, baseUrl), {
|
|
150
|
+
...init,
|
|
151
|
+
headers: {
|
|
152
|
+
authorization: `Bearer ${input.apiToken}`,
|
|
153
|
+
accept: 'application/json',
|
|
154
|
+
...(init.body ? { 'content-type': 'application/json' } : {}),
|
|
155
|
+
...(init.headers ?? {}),
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
const rawText = await response.text().catch(() => '');
|
|
159
|
+
let body = {};
|
|
160
|
+
try {
|
|
161
|
+
body = rawText ? JSON.parse(rawText) : {};
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
body = {};
|
|
165
|
+
}
|
|
166
|
+
return { status: response.status, body, rawText };
|
|
167
|
+
};
|
|
168
|
+
const errorDetail = (response, fallback) => {
|
|
169
|
+
const messages = (response.body.errors ?? [])
|
|
170
|
+
.map((error) => (error.message ? `${error.code ?? ''} ${error.message}`.trim() : undefined))
|
|
171
|
+
.filter((message) => Boolean(message));
|
|
172
|
+
if (messages.length > 0)
|
|
173
|
+
return `HTTP ${response.status}: ${messages.join('; ')}`;
|
|
174
|
+
if (response.rawText)
|
|
175
|
+
return `HTTP ${response.status}: ${response.rawText.slice(0, 300)}`;
|
|
176
|
+
return `HTTP ${response.status}: ${fallback}`;
|
|
177
|
+
};
|
|
178
|
+
const isAuthFailure = (response) => response.status === 401 ||
|
|
179
|
+
response.status === 403 ||
|
|
180
|
+
(response.body.errors ?? []).some((error) => error.code === CF_CODE_AUTH_ERROR);
|
|
181
|
+
const isScriptNotFound = (response) => (response.body.errors ?? []).some((error) => error.code === CF_CODE_SCRIPT_NOT_FOUND ||
|
|
182
|
+
/script.*not.?found|workers\.api\.error\.script_not_found/i.test(error.message ?? ''));
|
|
183
|
+
const succeeded = (response) => response.status >= 200 && response.status < 300 && response.body.success !== false;
|
|
184
|
+
/** Shared classification for read paths (list/get). */
|
|
185
|
+
const throwReadError = (response, context) => {
|
|
186
|
+
if (isAuthFailure(response)) {
|
|
187
|
+
throw new CloudflareWorkerAuthFailedError(errorDetail(response, 'authentication failed'), response.status);
|
|
188
|
+
}
|
|
189
|
+
if (isScriptNotFound(response)) {
|
|
190
|
+
throw new CloudflareScriptNotFoundError(input.scriptName, errorDetail(response, 'script not found'), response.status);
|
|
191
|
+
}
|
|
192
|
+
if (context.versionId && response.status === 404) {
|
|
193
|
+
throw new CloudflareVersionNotFoundError(context.versionId, errorDetail(response, 'version not found'), response.status);
|
|
194
|
+
}
|
|
195
|
+
throw new CloudflareVersionsApiError(errorDetail(response, 'request failed'), response.status);
|
|
196
|
+
};
|
|
197
|
+
const asRecord = (value) => typeof value === 'object' && value !== null ? value : {};
|
|
198
|
+
const asString = (value) => typeof value === 'string' ? value : undefined;
|
|
199
|
+
const asAnnotations = (value) => {
|
|
200
|
+
const record = asRecord(value);
|
|
201
|
+
const entries = Object.entries(record).filter((entry) => typeof entry[1] === 'string');
|
|
202
|
+
return entries.length > 0 ? Object.fromEntries(entries) : undefined;
|
|
203
|
+
};
|
|
204
|
+
const normalizeVersion = (raw) => {
|
|
205
|
+
const record = asRecord(raw);
|
|
206
|
+
const metadata = asRecord(record.metadata);
|
|
207
|
+
const annotations = asAnnotations(record.annotations);
|
|
208
|
+
const id = asString(record.id);
|
|
209
|
+
if (!id) {
|
|
210
|
+
throw new CloudflareVersionsApiError('Cloudflare returned a version without an id.');
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
id,
|
|
214
|
+
...(typeof record.number === 'number' ? { number: record.number } : {}),
|
|
215
|
+
...(asString(metadata.created_on) ? { createdOn: asString(metadata.created_on) } : {}),
|
|
216
|
+
...(asString(metadata.source) ? { source: asString(metadata.source) } : {}),
|
|
217
|
+
...(asString(metadata.author_email) ? { authorEmail: asString(metadata.author_email) } : {}),
|
|
218
|
+
...(annotations?.['workers/message'] ? { message: annotations['workers/message'] } : {}),
|
|
219
|
+
...(annotations?.['workers/tag'] ? { tag: annotations['workers/tag'] } : {}),
|
|
220
|
+
...(annotations ? { annotations } : {}),
|
|
221
|
+
...('resources' in record ? { resources: record.resources } : {}),
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
const normalizeDeployment = (raw) => {
|
|
225
|
+
const record = asRecord(raw);
|
|
226
|
+
const id = asString(record.id);
|
|
227
|
+
if (!id) {
|
|
228
|
+
throw new CloudflareVersionsApiError('Cloudflare returned a deployment without an id.');
|
|
229
|
+
}
|
|
230
|
+
const annotations = asAnnotations(record.annotations);
|
|
231
|
+
const versions = Array.isArray(record.versions)
|
|
232
|
+
? record.versions.flatMap((entry) => {
|
|
233
|
+
const version = asRecord(entry);
|
|
234
|
+
const versionId = asString(version.version_id);
|
|
235
|
+
return versionId ? [{ versionId, percentage: Number(version.percentage ?? 0) }] : [];
|
|
236
|
+
})
|
|
237
|
+
: [];
|
|
238
|
+
const operationId = parseOperationTag(annotations?.['workers/message']);
|
|
239
|
+
return {
|
|
240
|
+
id,
|
|
241
|
+
strategy: asString(record.strategy) ?? 'percentage',
|
|
242
|
+
versions,
|
|
243
|
+
...(asString(record.created_on) ? { createdOn: asString(record.created_on) } : {}),
|
|
244
|
+
...(asString(record.source) ? { source: asString(record.source) } : {}),
|
|
245
|
+
...(asString(record.author_email) ? { authorEmail: asString(record.author_email) } : {}),
|
|
246
|
+
...(annotations ? { annotations } : {}),
|
|
247
|
+
...(operationId ? { operationId } : {}),
|
|
248
|
+
};
|
|
249
|
+
};
|
|
250
|
+
const listDeployments = async () => {
|
|
251
|
+
const response = await request(`${scriptRoot}/deployments`);
|
|
252
|
+
if (!succeeded(response))
|
|
253
|
+
throwReadError(response, {});
|
|
254
|
+
const result = asRecord(response.body.result);
|
|
255
|
+
const deployments = Array.isArray(result.deployments) ? result.deployments : [];
|
|
256
|
+
return deployments.map(normalizeDeployment);
|
|
257
|
+
};
|
|
258
|
+
const reconcileDeployment = async (operationId) => {
|
|
259
|
+
const tag = formatOperationTag(operationId);
|
|
260
|
+
const deployments = await listDeployments();
|
|
261
|
+
return deployments.find((deployment) => (deployment.annotations?.['workers/message'] ?? '').includes(tag));
|
|
262
|
+
};
|
|
263
|
+
return {
|
|
264
|
+
async listVersions(options) {
|
|
265
|
+
const url = new URL(`${scriptRoot}/versions`, baseUrl);
|
|
266
|
+
if (options?.deployable !== undefined) {
|
|
267
|
+
url.searchParams.set('deployable', String(options.deployable));
|
|
268
|
+
}
|
|
269
|
+
if (options?.page !== undefined)
|
|
270
|
+
url.searchParams.set('page', String(options.page));
|
|
271
|
+
if (options?.perPage !== undefined)
|
|
272
|
+
url.searchParams.set('per_page', String(options.perPage));
|
|
273
|
+
const response = await request(`${url.pathname}${url.search}`);
|
|
274
|
+
if (!succeeded(response))
|
|
275
|
+
throwReadError(response, {});
|
|
276
|
+
const result = asRecord(response.body.result);
|
|
277
|
+
const items = Array.isArray(result.items) ? result.items : [];
|
|
278
|
+
return items.map(normalizeVersion);
|
|
279
|
+
},
|
|
280
|
+
async getVersion(versionId) {
|
|
281
|
+
const response = await request(`${scriptRoot}/versions/${encodeURIComponent(versionId)}`);
|
|
282
|
+
if (!succeeded(response))
|
|
283
|
+
throwReadError(response, { versionId });
|
|
284
|
+
return normalizeVersion(response.body.result);
|
|
285
|
+
},
|
|
286
|
+
async createDeployment(deploymentInput) {
|
|
287
|
+
const { versionId, operationId } = deploymentInput;
|
|
288
|
+
const message = buildDeploymentMessage(operationId, deploymentInput.message, deploymentInput.triggeredBy);
|
|
289
|
+
// Reconcile-before-create: if a prior attempt with this operationId
|
|
290
|
+
// already applied (e.g. we got an ambiguous 500/timeout and the caller
|
|
291
|
+
// retried), return that deployment instead of double-applying.
|
|
292
|
+
const existing = await reconcileDeployment(operationId);
|
|
293
|
+
if (existing)
|
|
294
|
+
return { deployment: existing, alreadyApplied: true };
|
|
295
|
+
const path = `${scriptRoot}/deployments${deploymentInput.force ? '?force=true' : ''}`;
|
|
296
|
+
let response;
|
|
297
|
+
try {
|
|
298
|
+
response = await request(path, {
|
|
299
|
+
method: 'POST',
|
|
300
|
+
body: JSON.stringify({
|
|
301
|
+
strategy: 'percentage',
|
|
302
|
+
versions: [{ percentage: 100, version_id: versionId }],
|
|
303
|
+
annotations: {
|
|
304
|
+
'workers/message': message,
|
|
305
|
+
},
|
|
306
|
+
}),
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
// Transport failure AFTER the POST left the process: Cloudflare may
|
|
311
|
+
// have applied it. Distinguishable so R04 reconciles, never blind-retries.
|
|
312
|
+
throw new CloudflareDeploymentAmbiguousError({
|
|
313
|
+
operationId,
|
|
314
|
+
versionId,
|
|
315
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
if (succeeded(response)) {
|
|
319
|
+
return { deployment: normalizeDeployment(response.body.result), alreadyApplied: false };
|
|
320
|
+
}
|
|
321
|
+
if (response.status >= 500) {
|
|
322
|
+
// 5xx after a POST is ambiguous: the deployment may have been applied
|
|
323
|
+
// before the error was produced.
|
|
324
|
+
throw new CloudflareDeploymentAmbiguousError({
|
|
325
|
+
operationId,
|
|
326
|
+
versionId,
|
|
327
|
+
detail: errorDetail(response, 'deployment create returned a server error'),
|
|
328
|
+
status: response.status,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
if (isAuthFailure(response)) {
|
|
332
|
+
throw new CloudflareWorkerAuthFailedError(errorDetail(response, 'authentication failed'), response.status);
|
|
333
|
+
}
|
|
334
|
+
if (isScriptNotFound(response)) {
|
|
335
|
+
throw new CloudflareScriptNotFoundError(input.scriptName, errorDetail(response, 'script not found'), response.status);
|
|
336
|
+
}
|
|
337
|
+
// Definitive 4xx: a missing/incompatible target version is the expected
|
|
338
|
+
// failure ("could not find version" / "not deployable").
|
|
339
|
+
if ((response.body.errors ?? []).some((error) => /version.*(not.?found|does not exist|not deployable)|could not find version/i.test(error.message ?? ''))) {
|
|
340
|
+
throw new CloudflareVersionNotFoundError(versionId, errorDetail(response, 'target version not found'), response.status);
|
|
341
|
+
}
|
|
342
|
+
throw new CloudflareVersionsApiError(errorDetail(response, 'deployment create failed'), response.status);
|
|
343
|
+
},
|
|
344
|
+
async getDeployment(deploymentId) {
|
|
345
|
+
const response = await request(`${scriptRoot}/deployments/${encodeURIComponent(deploymentId)}`);
|
|
346
|
+
if (!succeeded(response))
|
|
347
|
+
throwReadError(response, {});
|
|
348
|
+
return normalizeDeployment(response.body.result);
|
|
349
|
+
},
|
|
350
|
+
listDeployments,
|
|
351
|
+
async getActiveDeployment() {
|
|
352
|
+
// Cloudflare lists deployments with the active deployment first:
|
|
353
|
+
// https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/deployments/methods/list/
|
|
354
|
+
const deployments = await listDeployments();
|
|
355
|
+
return deployments[0];
|
|
356
|
+
},
|
|
357
|
+
reconcileDeployment,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=cloudflare-worker-versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-worker-versions.js","sourceRoot":"","sources":["../src/cloudflare-worker-versions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import * as Command from '@effect/cli/Command';
|
|
2
|
+
import { Effect } from 'effect';
|
|
3
|
+
import { Option } from 'effect';
|
|
4
|
+
import { loadStore } from '../account-store.js';
|
|
2
5
|
import { type CliError } from '../cli-error.js';
|
|
6
|
+
import { type ConfirmOptions, type SelectOptions } from '../prompt.js';
|
|
3
7
|
import { AccountStore } from '../services/account-store.js';
|
|
4
8
|
import { Cwd } from '../services/cwd.js';
|
|
5
|
-
import {
|
|
9
|
+
import { Reporter } from '../services/reporter.js';
|
|
10
|
+
export interface AccountRemovalPromptDeps {
|
|
11
|
+
readonly isInteractive: () => boolean;
|
|
12
|
+
readonly select: <T extends string>(opts: SelectOptions<T>) => Promise<T | undefined>;
|
|
13
|
+
readonly confirm: (opts: ConfirmOptions) => Promise<boolean | undefined>;
|
|
14
|
+
}
|
|
15
|
+
export declare function accountRemovalPreview(store: Awaited<ReturnType<typeof loadStore>>, target: string): string;
|
|
16
|
+
export declare function removeAccountBody(commandName: string, target: Option.Option<string>, json: boolean, yes: boolean, prompts?: AccountRemovalPromptDeps): Effect.Effect<void, CliError, AccountStore | Reporter>;
|
|
6
17
|
declare const whoamiCmd: Command.Command<"whoami", AccountStore, CliError, {
|
|
7
18
|
readonly json: boolean;
|
|
8
19
|
}>;
|
|
9
|
-
export declare const accountCmd: Command.Command<"account",
|
|
20
|
+
export declare const accountCmd: Command.Command<"account", Cwd | AccountStore, CliError, {
|
|
10
21
|
readonly subcommand: Option.Option<{
|
|
11
22
|
readonly cwd: Option.Option<string>;
|
|
12
23
|
readonly json: boolean;
|
|
@@ -16,40 +27,44 @@ export declare const accountCmd: Command.Command<"account", AccountStore | Cwd,
|
|
|
16
27
|
} | {
|
|
17
28
|
readonly json: boolean;
|
|
18
29
|
} | {
|
|
19
|
-
readonly 'account-id': string
|
|
30
|
+
readonly 'account-id': Option.Option<string>;
|
|
20
31
|
readonly json: boolean;
|
|
21
32
|
} | {
|
|
22
|
-
readonly 'account-id': string
|
|
33
|
+
readonly 'account-id': Option.Option<string>;
|
|
23
34
|
readonly json: boolean;
|
|
24
35
|
} | {
|
|
25
|
-
readonly 'account-id': string
|
|
36
|
+
readonly 'account-id': Option.Option<string>;
|
|
26
37
|
readonly json: boolean;
|
|
38
|
+
readonly yes: boolean;
|
|
27
39
|
} | {
|
|
28
|
-
readonly 'account-id': string
|
|
40
|
+
readonly 'account-id': Option.Option<string>;
|
|
29
41
|
readonly json: boolean;
|
|
42
|
+
readonly yes: boolean;
|
|
30
43
|
}>;
|
|
31
44
|
}>;
|
|
32
|
-
export declare const accountsCmd: Command.Command<"accounts",
|
|
45
|
+
export declare const accountsCmd: Command.Command<"accounts", Cwd | AccountStore, CliError, {
|
|
33
46
|
readonly subcommand: Option.Option<{
|
|
34
|
-
readonly cwd: Option.Option<string>;
|
|
35
47
|
readonly json: boolean;
|
|
36
48
|
} | {
|
|
37
|
-
readonly
|
|
49
|
+
readonly 'account-id': Option.Option<string>;
|
|
38
50
|
readonly json: boolean;
|
|
39
51
|
} | {
|
|
52
|
+
readonly 'account-id': Option.Option<string>;
|
|
40
53
|
readonly json: boolean;
|
|
41
54
|
} | {
|
|
42
|
-
readonly
|
|
55
|
+
readonly cwd: Option.Option<string>;
|
|
43
56
|
readonly json: boolean;
|
|
44
57
|
} | {
|
|
45
|
-
readonly
|
|
58
|
+
readonly cwd: Option.Option<string>;
|
|
46
59
|
readonly json: boolean;
|
|
47
60
|
} | {
|
|
48
|
-
readonly 'account-id': string
|
|
61
|
+
readonly 'account-id': Option.Option<string>;
|
|
49
62
|
readonly json: boolean;
|
|
63
|
+
readonly yes: boolean;
|
|
50
64
|
} | {
|
|
51
|
-
readonly 'account-id': string
|
|
65
|
+
readonly 'account-id': Option.Option<string>;
|
|
52
66
|
readonly json: boolean;
|
|
67
|
+
readonly yes: boolean;
|
|
53
68
|
}>;
|
|
54
69
|
}>;
|
|
55
70
|
export { whoamiCmd };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAoB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,KAAK,QAAQ,EAAY,MAAM,iBAAiB,CAAC;AAI1D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,aAAa,EAInB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AA2WnD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACtF,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;CAC1E;AAqBD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,EAC5C,MAAM,EAAE,MAAM,GACb,MAAM,CAoBR;AAwBD,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAC7B,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,wBAAoD,GAC5D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAAC,CAgHxD;AAyBD,QAAA,MAAM,SAAS;;EAEd,CAAC;AA+DF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;EAUtB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;EAUvB,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|