run402-mcp 4.0.2 → 4.1.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 (53) hide show
  1. package/README.md +23 -3
  2. package/dist/index.js +15 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/tools/deploy-rehearse.d.ts +20 -0
  5. package/dist/tools/deploy-rehearse.d.ts.map +1 -0
  6. package/dist/tools/deploy-rehearse.js +36 -0
  7. package/dist/tools/deploy-rehearse.js.map +1 -0
  8. package/dist/tools/deploy-verify-edge.d.ts +24 -0
  9. package/dist/tools/deploy-verify-edge.d.ts.map +1 -0
  10. package/dist/tools/deploy-verify-edge.js +120 -0
  11. package/dist/tools/deploy-verify-edge.js.map +1 -0
  12. package/dist/tools/project-branches.d.ts +50 -0
  13. package/dist/tools/project-branches.d.ts.map +1 -0
  14. package/dist/tools/project-branches.js +84 -0
  15. package/dist/tools/project-branches.js.map +1 -0
  16. package/dist/tools/project-snapshots.d.ts +56 -0
  17. package/dist/tools/project-snapshots.d.ts.map +1 -0
  18. package/dist/tools/project-snapshots.js +100 -0
  19. package/dist/tools/project-snapshots.js.map +1 -0
  20. package/package.json +1 -1
  21. package/sdk/README.md +48 -4
  22. package/sdk/dist/credentials.d.ts +1 -1
  23. package/sdk/dist/credentials.d.ts.map +1 -1
  24. package/sdk/dist/index.d.ts +8 -0
  25. package/sdk/dist/index.d.ts.map +1 -1
  26. package/sdk/dist/index.js +8 -0
  27. package/sdk/dist/index.js.map +1 -1
  28. package/sdk/dist/namespaces/branches.d.ts +11 -0
  29. package/sdk/dist/namespaces/branches.d.ts.map +1 -0
  30. package/sdk/dist/namespaces/branches.js +92 -0
  31. package/sdk/dist/namespaces/branches.js.map +1 -0
  32. package/sdk/dist/namespaces/branches.types.d.ts +48 -0
  33. package/sdk/dist/namespaces/branches.types.d.ts.map +1 -0
  34. package/sdk/dist/namespaces/branches.types.js +2 -0
  35. package/sdk/dist/namespaces/branches.types.js.map +1 -0
  36. package/sdk/dist/namespaces/deploy.d.ts +16 -1
  37. package/sdk/dist/namespaces/deploy.d.ts.map +1 -1
  38. package/sdk/dist/namespaces/deploy.js +85 -0
  39. package/sdk/dist/namespaces/deploy.js.map +1 -1
  40. package/sdk/dist/namespaces/deploy.types.d.ts +151 -0
  41. package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
  42. package/sdk/dist/namespaces/snapshots.d.ts +13 -0
  43. package/sdk/dist/namespaces/snapshots.d.ts.map +1 -0
  44. package/sdk/dist/namespaces/snapshots.js +115 -0
  45. package/sdk/dist/namespaces/snapshots.js.map +1 -0
  46. package/sdk/dist/namespaces/snapshots.types.d.ts +79 -0
  47. package/sdk/dist/namespaces/snapshots.types.d.ts.map +1 -0
  48. package/sdk/dist/namespaces/snapshots.types.js +2 -0
  49. package/sdk/dist/namespaces/snapshots.types.js.map +1 -0
  50. package/sdk/dist/scoped.d.ts +34 -1
  51. package/sdk/dist/scoped.d.ts.map +1 -1
  52. package/sdk/dist/scoped.js +61 -0
  53. package/sdk/dist/scoped.js.map +1 -1
@@ -0,0 +1,92 @@
1
+ import { LocalError } from "../errors.js";
2
+ export class Branches {
3
+ client;
4
+ constructor(client) {
5
+ this.client = client;
6
+ }
7
+ async create(projectId, opts = {}) {
8
+ assertProjectId(projectId, "creating project branch");
9
+ const body = {};
10
+ if (opts.fromSnapshotId !== undefined)
11
+ body.from_snapshot_id = opts.fromSnapshotId;
12
+ if (opts.name !== undefined)
13
+ body.name = opts.name;
14
+ if (opts.emailMode !== undefined)
15
+ body.email_mode = opts.emailMode;
16
+ if (opts.enableCron !== undefined)
17
+ body.enable_cron = opts.enableCron;
18
+ if (opts.ttlDays !== undefined)
19
+ body.ttl_days = opts.ttlDays;
20
+ const result = await this.client.request(branchCollectionPath(projectId), {
21
+ method: "POST",
22
+ body,
23
+ authMeta: {
24
+ method: "branches.create",
25
+ capability: "project.branches.manage",
26
+ target: { project_id: projectId },
27
+ },
28
+ context: "creating project branch",
29
+ });
30
+ if (this.client.credentials.saveProject) {
31
+ await this.client.credentials.saveProject(result.branch_project_id, {
32
+ anon_key: result.anon_key,
33
+ service_key: result.service_key,
34
+ ...(result.branch_url ? { site_url: result.branch_url } : {}),
35
+ });
36
+ }
37
+ return result;
38
+ }
39
+ async list(projectId) {
40
+ assertProjectId(projectId, "listing project branches");
41
+ return this.client.request(branchCollectionPath(projectId), {
42
+ authMeta: {
43
+ method: "branches.list",
44
+ capability: "project.branches.manage",
45
+ target: { project_id: projectId },
46
+ },
47
+ context: "listing project branches",
48
+ });
49
+ }
50
+ async renew(projectId, branchProjectId, opts = {}) {
51
+ assertProjectId(projectId, "renewing project branch");
52
+ assertProjectId(branchProjectId, "renewing project branch");
53
+ const body = {};
54
+ if (opts.ttlDays !== undefined)
55
+ body.ttl_days = opts.ttlDays;
56
+ return this.client.request(`${branchPath(projectId, branchProjectId)}/renew`, {
57
+ method: "POST",
58
+ body,
59
+ authMeta: {
60
+ method: "branches.renew",
61
+ capability: "project.branches.manage",
62
+ target: { project_id: projectId },
63
+ },
64
+ context: "renewing project branch",
65
+ });
66
+ }
67
+ async delete(projectId, branchProjectId) {
68
+ assertProjectId(projectId, "deleting project branch");
69
+ assertProjectId(branchProjectId, "deleting project branch");
70
+ await this.client.request(branchPath(projectId, branchProjectId), {
71
+ method: "DELETE",
72
+ authMeta: {
73
+ method: "branches.delete",
74
+ capability: "project.branches.manage",
75
+ target: { project_id: projectId },
76
+ },
77
+ context: "deleting project branch",
78
+ });
79
+ }
80
+ }
81
+ function branchCollectionPath(projectId) {
82
+ return `/projects/v1/${encodeURIComponent(projectId)}/branches`;
83
+ }
84
+ function branchPath(projectId, branchProjectId) {
85
+ return `${branchCollectionPath(projectId)}/${encodeURIComponent(branchProjectId)}`;
86
+ }
87
+ function assertProjectId(value, context) {
88
+ if (!value || typeof value !== "string") {
89
+ throw new LocalError("branches helper requires a projectId", context);
90
+ }
91
+ }
92
+ //# sourceMappingURL=branches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branches.js","sourceRoot":"","sources":["../../src/namespaces/branches.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ export type ProjectBranchEmailMode = "sandbox" | "off";
2
+ export interface ProjectBranchNextAction {
3
+ type: string;
4
+ command?: string;
5
+ message: string;
6
+ [key: string]: unknown;
7
+ }
8
+ export interface ProjectBranchDto {
9
+ branch_project_id: string;
10
+ parent_project_id: string;
11
+ name: string;
12
+ branch_url: string | null;
13
+ subdomain: string | null;
14
+ status: "active" | (string & {});
15
+ email_mode: ProjectBranchEmailMode | (string & {});
16
+ enable_cron: boolean;
17
+ data_from: {
18
+ snapshot_id: string | null;
19
+ captured_at: string | null;
20
+ };
21
+ release: {
22
+ parent_release_id: string | null;
23
+ branch_release_id: string | null;
24
+ };
25
+ expires_at: string;
26
+ created_at: string;
27
+ next_actions: ProjectBranchNextAction[];
28
+ }
29
+ export interface ProjectBranchCreateOptions {
30
+ fromSnapshotId?: string;
31
+ name?: string;
32
+ emailMode?: ProjectBranchEmailMode;
33
+ enableCron?: boolean;
34
+ ttlDays?: number;
35
+ }
36
+ export interface ProjectBranchCreateResult extends ProjectBranchDto {
37
+ operation_id: string;
38
+ materialization_id: string;
39
+ anon_key: string;
40
+ service_key: string;
41
+ }
42
+ export interface ProjectBranchesListResult {
43
+ branches: ProjectBranchDto[];
44
+ }
45
+ export interface ProjectBranchRenewOptions {
46
+ ttlDays?: number;
47
+ }
48
+ //# sourceMappingURL=branches.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branches.types.d.ts","sourceRoot":"","sources":["../../src/namespaces/branches.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,KAAK,CAAC;AAEvD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACjC,UAAU,EAAE,sBAAsB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACnD,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE;QACT,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,OAAO,EAAE;QACP,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,uBAAuB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=branches.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branches.types.js","sourceRoot":"","sources":["../../src/namespaces/branches.types.ts"],"names":[],"mappings":""}
@@ -19,7 +19,7 @@
19
19
  * behavior; this file is the implementation.
20
20
  */
21
21
  import type { Client } from "../kernel.js";
22
- import type { ApplyOptions, ActiveReleaseInventory, DeployEvent, DeployEventsResponse, DeployListOptions, DeployListResponse, DeployOperation, DeployResult, DeployResolveOptions, DeployResolveResponse, OperationSnapshot, PlanResponse, PromoteOptions, PromoteResult, ReleaseDiffOptions, ReleaseInventory, ReleaseInventoryByIdOptions, ReleaseInventoryOptions, ReleaseSpec, ReleaseToReleaseDiff, StartOptions } from "./deploy.types.js";
22
+ import type { ApplyOptions, ActiveReleaseInventory, DeployEvent, DeployEventsResponse, DeployListOptions, DeployListResponse, DeployOperation, DeployResult, DeployResolveOptions, DeployResolveResponse, EdgeCoherenceReport, EdgeCoherenceWaitOptions, EdgeCoherenceWaitResult, OperationSnapshot, PlanResponse, PromoteOptions, PromoteResult, ReleaseDiffOptions, ReleaseInventory, ReleaseInventoryByIdOptions, ReleaseInventoryOptions, ReleaseSpec, ReleaseToReleaseDiff, RehearsePlanOptions, RehearsePlanResult, StartOptions } from "./deploy.types.js";
23
23
  export declare class Deploy {
24
24
  private readonly client;
25
25
  constructor(client: Client);
@@ -77,6 +77,7 @@ export declare class Deploy {
77
77
  planFingerprint?: string;
78
78
  };
79
79
  }): Promise<DeployResult>;
80
+ rehearse(planId: string, opts?: RehearsePlanOptions): Promise<RehearsePlanResult>;
80
81
  /**
81
82
  * Resume an operation in `schema_settling` or `activation_pending`. The
82
83
  * gateway re-runs only the failed phase forward — never replays SQL.
@@ -148,6 +149,20 @@ export declare class Deploy {
148
149
  events(operationId: string, opts: {
149
150
  project: string;
150
151
  }): Promise<DeployEventsResponse>;
152
+ /**
153
+ * Probe whether the gateway and edge pointers agree on the active release
154
+ * for an operation. The endpoint requires `apikey` auth, so `project` is
155
+ * required. Use `waitEdgeCoherent` when you want bounded polling.
156
+ */
157
+ edgeCoherence(operationId: string, opts: {
158
+ project: string;
159
+ }): Promise<EdgeCoherenceReport>;
160
+ /**
161
+ * Poll `edgeCoherence` until the report is coherent or the timeout elapses.
162
+ * Returns the last report either way so automation can explain stale paths
163
+ * without issuing a second request.
164
+ */
165
+ waitEdgeCoherent(operationId: string, opts: EdgeCoherenceWaitOptions): Promise<EdgeCoherenceWaitResult>;
151
166
  /**
152
167
  * Fetch a release inventory by id. The endpoint requires `apikey` auth, so
153
168
  * pass the owning project id. `siteLimit` controls how many site paths the
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/namespaces/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/namespaces/deploy.ts"],"names":[],"mappings":"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"}
@@ -174,6 +174,38 @@ export class Deploy {
174
174
  const commit = requireCloudCommitResponse(await commitInternal(this.client, planId, opts.idempotencyKey, opts.project, opts.requiredPlan), "committing deploy");
175
175
  return await pollUntilReady(this.client, commit, {}, [], emit, opts.project);
176
176
  }
177
+ async rehearse(planId, opts = {}) {
178
+ if (!planId || typeof planId !== "string") {
179
+ throw new Run402DeployError(`Invalid plan id: "${String(planId)}"`, {
180
+ code: "BAD_REQUEST",
181
+ phase: "rehearsal",
182
+ retryable: false,
183
+ context: "rehearsing deploy plan",
184
+ });
185
+ }
186
+ const body = {};
187
+ if (opts.teardown !== undefined)
188
+ body.teardown = opts.teardown;
189
+ try {
190
+ return await this.client.request(`/apply/v1/plans/${encodeURIComponent(planId)}/rehearse`, {
191
+ method: "POST",
192
+ body,
193
+ ...(opts.project
194
+ ? {
195
+ authMeta: {
196
+ method: "deploy.rehearse",
197
+ capability: "project.deploy",
198
+ target: { project_id: opts.project },
199
+ },
200
+ }
201
+ : {}),
202
+ context: "rehearsing deploy plan",
203
+ });
204
+ }
205
+ catch (err) {
206
+ throw translateDeployError(err, "rehearsal", planId, null);
207
+ }
208
+ }
177
209
  /**
178
210
  * Resume an operation in `schema_settling` or `activation_pending`. The
179
211
  * gateway re-runs only the failed phase forward — never replays SQL.
@@ -344,6 +376,57 @@ export class Deploy {
344
376
  throw translateDeployError(err, "events", null, operationId);
345
377
  }
346
378
  }
379
+ /**
380
+ * Probe whether the gateway and edge pointers agree on the active release
381
+ * for an operation. The endpoint requires `apikey` auth, so `project` is
382
+ * required. Use `waitEdgeCoherent` when you want bounded polling.
383
+ */
384
+ async edgeCoherence(operationId, opts) {
385
+ if (!operationId || !operationId.startsWith("op_")) {
386
+ throw new Run402DeployError(`Invalid operation id: "${operationId}"`, {
387
+ code: "OPERATION_NOT_FOUND",
388
+ retryable: false,
389
+ context: "verifying deploy edge coherence",
390
+ });
391
+ }
392
+ if (!opts?.project) {
393
+ throw new LocalError("apply.edgeCoherence requires a project id ({ project: 'prj_...' })", "verifying deploy edge coherence");
394
+ }
395
+ const headers = await apikeyHeaders(this.client, opts.project);
396
+ try {
397
+ return await this.client.request(`/apply/v1/operations/${encodeURIComponent(operationId)}/edge-coherence`, { headers, context: "verifying deploy edge coherence" });
398
+ }
399
+ catch (err) {
400
+ throw translateDeployError(err, "edge-coherence", null, operationId);
401
+ }
402
+ }
403
+ /**
404
+ * Poll `edgeCoherence` until the report is coherent or the timeout elapses.
405
+ * Returns the last report either way so automation can explain stale paths
406
+ * without issuing a second request.
407
+ */
408
+ async waitEdgeCoherent(operationId, opts) {
409
+ const timeoutMs = normalizePositiveSafeIntegerQueryOption(opts?.timeoutMs ?? 60_000, "apply.waitEdgeCoherent timeoutMs", "waiting for deploy edge coherence") ?? 60_000;
410
+ const intervalMs = normalizePositiveSafeIntegerQueryOption(opts?.intervalMs ?? 1_000, "apply.waitEdgeCoherent intervalMs", "waiting for deploy edge coherence") ?? 1_000;
411
+ if (!opts?.project) {
412
+ throw new LocalError("apply.waitEdgeCoherent requires a project id ({ project: 'prj_...' })", "waiting for deploy edge coherence");
413
+ }
414
+ const start = Date.now();
415
+ let attempts = 0;
416
+ while (true) {
417
+ attempts += 1;
418
+ const report = await this.edgeCoherence(operationId, { project: opts.project });
419
+ const elapsedMs = Date.now() - start;
420
+ opts.onPoll?.({ attempts, elapsedMs, report });
421
+ if (report.coherent) {
422
+ return { coherent: true, attempts, elapsedMs, report };
423
+ }
424
+ if (elapsedMs >= timeoutMs) {
425
+ return { coherent: false, attempts, elapsedMs, report };
426
+ }
427
+ await sleep(Math.min(intervalMs, Math.max(timeoutMs - elapsedMs, 0)));
428
+ }
429
+ }
347
430
  /**
348
431
  * Fetch a release inventory by id. The endpoint requires `apikey` auth, so
349
432
  * pass the owning project id. `siteLimit` controls how many site paths the
@@ -1613,6 +1696,7 @@ async function pollUntilReady(client, commit, diff, warnings, emit, projectId, s
1613
1696
  diff,
1614
1697
  warnings,
1615
1698
  ...(commit.subdomain_bindings ? { subdomain_bindings: commit.subdomain_bindings } : {}),
1699
+ ...(commit.edge ? { edge: commit.edge } : {}),
1616
1700
  };
1617
1701
  }
1618
1702
  const opHeaders = projectId ? await apikeyHeaders(client, projectId) : {};
@@ -1712,6 +1796,7 @@ async function pollSnapshotUntilReady(client, initial, diff, warnings, emit, pro
1712
1796
  diff,
1713
1797
  warnings,
1714
1798
  ...(snapshot.subdomain_bindings ? { subdomain_bindings: snapshot.subdomain_bindings } : {}),
1799
+ ...(snapshot.edge ? { edge: snapshot.edge } : {}),
1715
1800
  };
1716
1801
  }
1717
1802
  if (TERMINAL_STATUSES.includes(snapshot.status)) {