@tinybirdco/sdk 0.0.52 → 0.0.53

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,6 +1,6 @@
1
1
  /**
2
2
  * Deploy resources to Tinybird main workspace
3
- * Uses the /v1/deploy endpoint to create a deployment, then sets it live
3
+ * Uses the /v1/deploy endpoint with auto-promotion enabled
4
4
  */
5
5
  import type { GeneratedResources } from "../generator/index.js";
6
6
  import type { BuildConfig, BuildApiResult } from "./build.js";
@@ -23,12 +23,6 @@ export interface Deployment {
23
23
  updated_at?: string;
24
24
  feedback?: DeploymentFeedback[];
25
25
  }
26
- /**
27
- * Response from /v1/deployments list endpoint
28
- */
29
- export interface DeploymentsListResponse {
30
- deployments: Deployment[];
31
- }
32
26
  /**
33
27
  * Response from /v1/deploy endpoint
34
28
  */
@@ -41,6 +35,13 @@ export interface DeployResponse {
41
35
  error: string;
42
36
  }>;
43
37
  }
38
+ /**
39
+ * Response from /v1/deployments/{id} endpoint
40
+ */
41
+ export interface DeploymentStatusResponse {
42
+ result: string;
43
+ deployment: Deployment;
44
+ }
44
45
  /**
45
46
  * Detailed deployment information with resource changes
46
47
  */
@@ -69,20 +70,11 @@ export interface DeploymentDetails extends Deployment {
69
70
  error: string;
70
71
  }>;
71
72
  }
72
- /**
73
- * Response from /v1/deployments/{id} endpoint
74
- */
75
- export interface DeploymentStatusResponse {
76
- result: string;
77
- deployment: Deployment;
78
- }
79
73
  /**
80
74
  * Deploy generated resources to Tinybird main workspace
81
75
  *
82
76
  * Uses the /v1/deploy endpoint which accepts all resources in a single
83
- * multipart form request. After creating the deployment, this function:
84
- * 1. Polls until the deployment is ready (status === 'data_ready')
85
- * 2. Sets the deployment as live via /v1/deployments/{id}/set-live
77
+ * multipart form request.
86
78
  *
87
79
  * @param config - Build configuration with API URL and token
88
80
  * @param resources - Generated resources to deploy
@@ -150,6 +142,7 @@ export declare function deployToMain(config: BuildConfig, resources: GeneratedRe
150
142
  pollIntervalMs?: number;
151
143
  maxPollAttempts?: number;
152
144
  check?: boolean;
145
+ autoPromote?: boolean;
153
146
  allowDestructiveOperations?: boolean;
154
147
  callbacks?: DeployCallbacks;
155
148
  }): Promise<BuildApiResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/api/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/api/deploy.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Deploy resources to Tinybird main workspace
3
- * Uses the /v1/deploy endpoint to create a deployment, then sets it live
3
+ * Uses the /v1/deploy endpoint with auto-promotion enabled
4
4
  */
5
5
  import { tinybirdFetch } from "./fetcher.js";
6
6
  const FORWARD_CLASSIC_GUIDANCE = "Use the Tinybird Classic CLI (`tb`) from a Tinybird Classic workspace for this operation.";
7
7
  export async function deployToMain(config, resources, options) {
8
8
  const debug = options?.debug ?? !!process.env.TINYBIRD_DEBUG;
9
9
  const pollIntervalMs = options?.pollIntervalMs ?? 1000;
10
- const maxPollAttempts = options?.maxPollAttempts ?? 120; // 2 minutes max
10
+ const maxPollAttempts = options?.maxPollAttempts ?? 120;
11
11
  const baseUrl = config.baseUrl.replace(/\/$/, "");
12
12
  const formData = new FormData();
13
13
  // Add datasources
@@ -30,42 +30,17 @@ export async function deployToMain(config, resources, options) {
30
30
  }
31
31
  formData.append(fieldName, new Blob([pipe.content], { type: "text/plain" }), fileName);
32
32
  }
33
- // Step 0: Clean up any stale non-live deployments that might block the new deployment
34
- try {
35
- const deploymentsUrl = `${baseUrl}/v1/deployments`;
36
- const deploymentsResponse = await tinybirdFetch(deploymentsUrl, {
37
- headers: {
38
- Authorization: `Bearer ${config.token}`,
39
- },
40
- });
41
- if (deploymentsResponse.ok) {
42
- const deploymentsBody = (await deploymentsResponse.json());
43
- const staleDeployments = deploymentsBody.deployments.filter((d) => !d.live && d.status !== "live");
44
- for (const stale of staleDeployments) {
45
- if (debug) {
46
- console.log(`[debug] Cleaning up stale deployment: ${stale.id} (status: ${stale.status})`);
47
- }
48
- await tinybirdFetch(`${baseUrl}/v1/deployments/${stale.id}`, {
49
- method: "DELETE",
50
- headers: {
51
- Authorization: `Bearer ${config.token}`,
52
- },
53
- });
54
- }
55
- }
56
- }
57
- catch (e) {
58
- // Ignore errors during cleanup - we'll try to deploy anyway
59
- if (debug) {
60
- console.log(`[debug] Failed to clean up stale deployments: ${e}`);
61
- }
62
- }
63
- // Step 1: Create deployment via /v1/deploy
33
+ // Create deployment via /v1/deploy.
34
+ // `auto_promote=true` makes the API promote the deployment automatically.
64
35
  const deployUrlBase = `${baseUrl}/v1/deploy`;
65
36
  const urlParams = new URLSearchParams();
66
37
  if (options?.check) {
67
38
  urlParams.set("check", "true");
68
39
  }
40
+ const autoPromote = options?.autoPromote ?? !options?.check;
41
+ if (autoPromote) {
42
+ urlParams.set("auto_promote", "true");
43
+ }
69
44
  if (options?.allowDestructiveOperations) {
70
45
  urlParams.set("allow_destructive_operations", "true");
71
46
  }
@@ -214,15 +189,17 @@ export async function deployToMain(config, resources, options) {
214
189
  },
215
190
  });
216
191
  }
217
- // Step 2: Poll until deployment is ready
218
- let deployment = body.deployment;
219
- let attempts = 0;
192
+ let deployment = deploymentDetails;
193
+ let statusAttempts = 0;
220
194
  options?.callbacks?.onWaitingForReady?.();
221
- while (deployment.status !== "data_ready" && attempts < maxPollAttempts) {
195
+ while (deployment.status !== "data_ready" &&
196
+ deployment.status !== "failed" &&
197
+ deployment.status !== "error" &&
198
+ statusAttempts < maxPollAttempts) {
222
199
  await sleep(pollIntervalMs);
223
- attempts++;
200
+ statusAttempts++;
224
201
  if (debug) {
225
- console.log(`[debug] Polling deployment status (attempt ${attempts})...`);
202
+ console.log(`[debug] Polling deployment status (attempt ${statusAttempts})...`);
226
203
  }
227
204
  const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
228
205
  const statusResponse = await tinybirdFetch(statusUrl, {
@@ -243,61 +220,79 @@ export async function deployToMain(config, resources, options) {
243
220
  }
244
221
  const statusBody = (await statusResponse.json());
245
222
  deployment = statusBody.deployment;
246
- if (debug) {
247
- console.log(`[debug] Deployment status: ${deployment.status}`);
248
- }
249
- // Check for failed status
250
- if (deployment.status === "failed" || deployment.status === "error") {
251
- return {
252
- success: false,
253
- result: "failed",
254
- error: `Deployment failed with status: ${deployment.status}`,
255
- datasourceCount: resources.datasources.length,
256
- pipeCount: resources.pipes.length,
257
- connectionCount: resources.connections?.length ?? 0,
258
- buildId: deploymentId,
259
- };
260
- }
261
223
  }
262
- if (deployment.status !== "data_ready") {
224
+ if (deployment.status === "failed" || deployment.status === "error") {
263
225
  return {
264
226
  success: false,
265
227
  result: "failed",
266
- error: `Deployment timed out after ${maxPollAttempts} attempts. Last status: ${deployment.status}`,
228
+ error: `Deployment failed with status: ${deployment.status}`,
267
229
  datasourceCount: resources.datasources.length,
268
230
  pipeCount: resources.pipes.length,
269
231
  connectionCount: resources.connections?.length ?? 0,
270
232
  buildId: deploymentId,
271
233
  };
272
234
  }
273
- options?.callbacks?.onDeploymentReady?.();
274
- // Step 3: Set the deployment as live
275
- const setLiveUrl = `${baseUrl}/v1/deployments/${deploymentId}/set-live`;
276
- if (debug) {
277
- console.log(`[debug] POST ${setLiveUrl}`);
278
- }
279
- const setLiveResponse = await tinybirdFetch(setLiveUrl, {
280
- method: "POST",
281
- headers: {
282
- Authorization: `Bearer ${config.token}`,
283
- },
284
- });
285
- if (!setLiveResponse.ok) {
286
- const setLiveBody = await setLiveResponse.text();
235
+ if (deployment.status !== "data_ready") {
287
236
  return {
288
237
  success: false,
289
238
  result: "failed",
290
- error: `Failed to set deployment as live: ${setLiveResponse.status} ${setLiveResponse.statusText}\n${setLiveBody}`,
239
+ error: `Deployment timed out after ${maxPollAttempts} attempts. Last status: ${deployment.status}`,
291
240
  datasourceCount: resources.datasources.length,
292
241
  pipeCount: resources.pipes.length,
293
242
  connectionCount: resources.connections?.length ?? 0,
294
243
  buildId: deploymentId,
295
244
  };
296
245
  }
246
+ options?.callbacks?.onDeploymentReady?.();
247
+ if (autoPromote && !deployment.live) {
248
+ let promotionAttempts = 0;
249
+ options?.callbacks?.onWaitingForPromote?.();
250
+ while (!deployment.live && promotionAttempts < maxPollAttempts) {
251
+ await sleep(pollIntervalMs);
252
+ promotionAttempts++;
253
+ if (debug) {
254
+ console.log(`[debug] Polling auto-promote status (attempt ${promotionAttempts})...`);
255
+ }
256
+ const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
257
+ const statusResponse = await tinybirdFetch(statusUrl, {
258
+ headers: {
259
+ Authorization: `Bearer ${config.token}`,
260
+ },
261
+ });
262
+ if (!statusResponse.ok) {
263
+ return {
264
+ success: false,
265
+ result: "failed",
266
+ error: `Failed to check deployment status: ${statusResponse.status} ${statusResponse.statusText}`,
267
+ datasourceCount: resources.datasources.length,
268
+ pipeCount: resources.pipes.length,
269
+ connectionCount: resources.connections?.length ?? 0,
270
+ buildId: deploymentId,
271
+ };
272
+ }
273
+ const statusBody = (await statusResponse.json());
274
+ deployment = statusBody.deployment;
275
+ }
276
+ if (!deployment.live) {
277
+ return {
278
+ success: false,
279
+ result: "failed",
280
+ error: `Deployment reached data_ready but auto-promote did not complete after ${maxPollAttempts} attempts`,
281
+ datasourceCount: resources.datasources.length,
282
+ pipeCount: resources.pipes.length,
283
+ connectionCount: resources.connections?.length ?? 0,
284
+ buildId: deploymentId,
285
+ };
286
+ }
287
+ options?.callbacks?.onDeploymentPromoted?.();
288
+ }
297
289
  if (debug) {
298
- console.log(`[debug] Deployment ${deploymentId} is now live`);
290
+ const stateLabel = deployment.live ? "live" : "ready";
291
+ console.log(`[debug] Deployment ${deploymentId} is now ${stateLabel}`);
292
+ }
293
+ if (deployment.live) {
294
+ options?.callbacks?.onDeploymentLive?.(deploymentId);
299
295
  }
300
- options?.callbacks?.onDeploymentLive?.(deploymentId);
301
296
  return {
302
297
  success: true,
303
298
  result: "success",
@@ -317,9 +312,6 @@ export async function deployToMain(config, resources, options) {
317
312
  },
318
313
  };
319
314
  }
320
- /**
321
- * Helper function to sleep for a given number of milliseconds
322
- */
323
315
  function sleep(ms) {
324
316
  return new Promise((resolve) => setTimeout(resolve, ms));
325
317
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/api/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/api/deploy.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,10 @@
1
- import { describe, it, expect, beforeAll, beforeEach, afterEach, afterAll } from "vitest";
1
+ import { describe, it, expect, beforeAll, afterEach, afterAll, vi } from "vitest";
2
2
  import { setupServer } from "msw/node";
3
3
  import { http, HttpResponse } from "msw";
4
4
  import { deployToMain } from "./deploy.js";
5
- import { BASE_URL, createDeploySuccessResponse, createDeploymentStatusResponse, createSetLiveSuccessResponse, createBuildFailureResponse, createBuildMultipleErrorsResponse, createDeploymentsListResponse, } from "../test/handlers.js";
5
+ import { BASE_URL, createDeploySuccessResponse, createBuildFailureResponse, createBuildMultipleErrorsResponse, } from "../test/handlers.js";
6
6
  const server = setupServer();
7
7
  beforeAll(() => server.listen({ onUnhandledRequest: "error" }));
8
- beforeEach(() => {
9
- // Set up default handler for deployments list (used by stale deployment cleanup)
10
- server.use(http.get(`${BASE_URL}/v1/deployments`, () => {
11
- return HttpResponse.json(createDeploymentsListResponse());
12
- }));
13
- });
14
8
  afterEach(() => server.resetHandlers());
15
9
  afterAll(() => server.close());
16
10
  describe("Deploy API", () => {
@@ -19,53 +13,44 @@ describe("Deploy API", () => {
19
13
  token: "p.test-token",
20
14
  };
21
15
  const resources = {
22
- datasources: [
23
- { name: "events", content: "SCHEMA > timestamp DateTime" },
24
- ],
25
- pipes: [
26
- { name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" },
27
- ],
16
+ datasources: [{ name: "events", content: "SCHEMA > timestamp DateTime" }],
17
+ pipes: [{ name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" }],
28
18
  connections: [],
29
19
  };
30
- // Helper to set up successful deploy flow
31
- function setupSuccessfulDeployFlow(deploymentId = "deploy-abc") {
20
+ function setupAutoPromoteSuccessFlow(deploymentId = "deploy-abc") {
32
21
  server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
33
22
  return HttpResponse.json(createDeploySuccessResponse({ deploymentId, status: "pending" }));
34
23
  }), http.get(`${BASE_URL}/v1/deployments/${deploymentId}`, () => {
35
- return HttpResponse.json(createDeploymentStatusResponse({ deploymentId, status: "data_ready" }));
36
- }), http.post(`${BASE_URL}/v1/deployments/${deploymentId}/set-live`, () => {
37
- return HttpResponse.json(createSetLiveSuccessResponse());
24
+ return HttpResponse.json({
25
+ result: "success",
26
+ deployment: {
27
+ id: deploymentId,
28
+ status: "data_ready",
29
+ live: true,
30
+ },
31
+ });
38
32
  }));
39
33
  }
40
34
  describe("deployToMain", () => {
41
- it("successfully deploys resources with full flow", async () => {
42
- setupSuccessfulDeployFlow("deploy-abc");
43
- const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
35
+ it("successfully deploys resources with auto-promote flow", async () => {
36
+ setupAutoPromoteSuccessFlow("deploy-abc");
37
+ const onDeploymentLive = vi.fn();
38
+ const result = await deployToMain(config, resources, {
39
+ pollIntervalMs: 1,
40
+ callbacks: { onDeploymentLive },
41
+ });
44
42
  expect(result.success).toBe(true);
45
43
  expect(result.result).toBe("success");
46
44
  expect(result.buildId).toBe("deploy-abc");
47
45
  expect(result.datasourceCount).toBe(1);
48
46
  expect(result.pipeCount).toBe(1);
49
- });
50
- it("polls until deployment is ready", async () => {
51
- let pollCount = 0;
52
- server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
53
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-poll", status: "pending" }));
54
- }), http.get(`${BASE_URL}/v1/deployments/deploy-poll`, () => {
55
- pollCount++;
56
- // Return pending for first 2 polls, then data_ready
57
- const status = pollCount < 3 ? "pending" : "data_ready";
58
- return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-poll", status }));
59
- }), http.post(`${BASE_URL}/v1/deployments/deploy-poll/set-live`, () => {
60
- return HttpResponse.json(createSetLiveSuccessResponse());
61
- }));
62
- const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
63
- expect(result.success).toBe(true);
64
- expect(pollCount).toBe(3);
47
+ expect(onDeploymentLive).toHaveBeenCalledWith("deploy-abc");
65
48
  });
66
49
  it("handles deploy failure with single error", async () => {
67
50
  server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
68
- return HttpResponse.json(createBuildFailureResponse("Permission denied"), { status: 200 });
51
+ return HttpResponse.json(createBuildFailureResponse("Permission denied"), {
52
+ status: 200,
53
+ });
69
54
  }));
70
55
  const result = await deployToMain(config, resources);
71
56
  expect(result.success).toBe(false);
@@ -101,33 +86,33 @@ describe("Deploy API", () => {
101
86
  }));
102
87
  await expect(deployToMain(config, resources)).rejects.toThrow("Failed to parse response");
103
88
  });
104
- it("uses /v1/deploy endpoint (not /v1/build)", async () => {
89
+ it("uses /v1/deploy endpoint and sends auto_promote by default", async () => {
105
90
  let capturedUrl = null;
106
91
  server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
107
92
  capturedUrl = request.url;
108
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-url-test" }));
93
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-url-test", status: "pending" }));
109
94
  }), http.get(`${BASE_URL}/v1/deployments/deploy-url-test`, () => {
110
- return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-url-test", status: "data_ready" }));
111
- }), http.post(`${BASE_URL}/v1/deployments/deploy-url-test/set-live`, () => {
112
- return HttpResponse.json(createSetLiveSuccessResponse());
95
+ return HttpResponse.json({
96
+ result: "success",
97
+ deployment: { id: "deploy-url-test", status: "data_ready", live: true },
98
+ });
113
99
  }));
114
100
  await deployToMain(config, resources, { pollIntervalMs: 1 });
115
101
  const parsed = new URL(capturedUrl ?? "");
116
102
  expect(parsed.pathname).toBe("/v1/deploy");
117
103
  expect(parsed.searchParams.get("from")).toBe("ts-sdk");
104
+ expect(parsed.searchParams.get("auto_promote")).toBe("true");
118
105
  });
119
106
  it("passes allow_destructive_operations when explicitly enabled", async () => {
120
107
  let capturedUrl = null;
121
108
  server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
122
109
  capturedUrl = request.url;
123
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-destructive" }));
110
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-destructive", status: "pending" }));
124
111
  }), http.get(`${BASE_URL}/v1/deployments/deploy-destructive`, () => {
125
- return HttpResponse.json(createDeploymentStatusResponse({
126
- deploymentId: "deploy-destructive",
127
- status: "data_ready",
128
- }));
129
- }), http.post(`${BASE_URL}/v1/deployments/deploy-destructive/set-live`, () => {
130
- return HttpResponse.json(createSetLiveSuccessResponse());
112
+ return HttpResponse.json({
113
+ result: "success",
114
+ deployment: { id: "deploy-destructive", status: "data_ready", live: true },
115
+ });
131
116
  }));
132
117
  await deployToMain(config, resources, {
133
118
  pollIntervalMs: 1,
@@ -135,6 +120,19 @@ describe("Deploy API", () => {
135
120
  });
136
121
  const parsed = new URL(capturedUrl ?? "");
137
122
  expect(parsed.searchParams.get("allow_destructive_operations")).toBe("true");
123
+ expect(parsed.searchParams.get("auto_promote")).toBe("true");
124
+ });
125
+ it("does not send auto_promote in check mode", async () => {
126
+ let capturedUrl = null;
127
+ server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
128
+ capturedUrl = request.url;
129
+ return HttpResponse.json({ result: "success" });
130
+ }));
131
+ const result = await deployToMain(config, resources, { check: true });
132
+ expect(result.success).toBe(true);
133
+ const parsed = new URL(capturedUrl ?? "");
134
+ expect(parsed.searchParams.get("check")).toBe("true");
135
+ expect(parsed.searchParams.get("auto_promote")).toBeNull();
138
136
  });
139
137
  it("adds actionable guidance to Forward/Classic workspace errors", async () => {
140
138
  server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
@@ -148,55 +146,22 @@ describe("Deploy API", () => {
148
146
  expect(result.error).toContain("Tinybird Forward workspace");
149
147
  expect(result.error).toContain("Use the Tinybird Classic CLI (`tb`) from a Tinybird Classic workspace for this operation.");
150
148
  });
151
- it("handles failed deployment status", async () => {
152
- server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
153
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-fail", status: "pending" }));
154
- }), http.get(`${BASE_URL}/v1/deployments/deploy-fail`, () => {
155
- return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-fail", status: "failed" }));
156
- }));
157
- const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
158
- expect(result.success).toBe(false);
159
- expect(result.error).toContain("Deployment failed with status: failed");
160
- });
161
- it("handles set-live failure", async () => {
162
- server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
163
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-setlive-fail" }));
164
- }), http.get(`${BASE_URL}/v1/deployments/deploy-setlive-fail`, () => {
165
- return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-setlive-fail", status: "data_ready" }));
166
- }), http.post(`${BASE_URL}/v1/deployments/deploy-setlive-fail/set-live`, () => {
167
- return HttpResponse.json({ error: "Set live failed" }, { status: 500 });
168
- }));
169
- const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
170
- expect(result.success).toBe(false);
171
- expect(result.error).toContain("Failed to set deployment as live");
172
- });
173
149
  it("normalizes baseUrl with trailing slash", async () => {
174
150
  let capturedUrl = null;
175
151
  server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
176
152
  capturedUrl = request.url;
177
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-slash" }));
153
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-slash", status: "pending" }));
178
154
  }), http.get(`${BASE_URL}/v1/deployments/deploy-slash`, () => {
179
- return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-slash", status: "data_ready" }));
180
- }), http.post(`${BASE_URL}/v1/deployments/deploy-slash/set-live`, () => {
181
- return HttpResponse.json(createSetLiveSuccessResponse());
155
+ return HttpResponse.json({
156
+ result: "success",
157
+ deployment: { id: "deploy-slash", status: "data_ready", live: true },
158
+ });
182
159
  }));
183
160
  await deployToMain({ ...config, baseUrl: `${BASE_URL}/` }, resources, { pollIntervalMs: 1 });
184
161
  const parsed = new URL(capturedUrl ?? "");
185
162
  expect(parsed.pathname).toBe("/v1/deploy");
186
163
  expect(parsed.searchParams.get("from")).toBe("ts-sdk");
187
- });
188
- it("times out when deployment never becomes ready", async () => {
189
- server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
190
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-timeout", status: "pending" }));
191
- }), http.get(`${BASE_URL}/v1/deployments/deploy-timeout`, () => {
192
- return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-timeout", status: "pending" }));
193
- }));
194
- const result = await deployToMain(config, resources, {
195
- pollIntervalMs: 1,
196
- maxPollAttempts: 3,
197
- });
198
- expect(result.success).toBe(false);
199
- expect(result.error).toContain("Deployment timed out");
164
+ expect(parsed.searchParams.get("auto_promote")).toBe("true");
200
165
  });
201
166
  });
202
167
  });
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../src/api/deploy.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../src/api/deploy.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinybirdco/sdk",
3
- "version": "0.0.52",
3
+ "version": "0.0.53",
4
4
  "description": "TypeScript SDK for Tinybird Forward - define datasources and pipes as TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, beforeAll, beforeEach, afterEach, afterAll } from "vitest";
1
+ import { describe, it, expect, beforeAll, afterEach, afterAll, vi } from "vitest";
2
2
  import { setupServer } from "msw/node";
3
3
  import { http, HttpResponse } from "msw";
4
4
  import { deployToMain } from "./deploy.js";
@@ -6,25 +6,14 @@ import type { BuildConfig } from "./build.js";
6
6
  import {
7
7
  BASE_URL,
8
8
  createDeploySuccessResponse,
9
- createDeploymentStatusResponse,
10
- createSetLiveSuccessResponse,
11
9
  createBuildFailureResponse,
12
10
  createBuildMultipleErrorsResponse,
13
- createDeploymentsListResponse,
14
11
  } from "../test/handlers.js";
15
12
  import type { GeneratedResources } from "../generator/index.js";
16
13
 
17
14
  const server = setupServer();
18
15
 
19
16
  beforeAll(() => server.listen({ onUnhandledRequest: "error" }));
20
- beforeEach(() => {
21
- // Set up default handler for deployments list (used by stale deployment cleanup)
22
- server.use(
23
- http.get(`${BASE_URL}/v1/deployments`, () => {
24
- return HttpResponse.json(createDeploymentsListResponse());
25
- })
26
- );
27
- });
28
17
  afterEach(() => server.resetHandlers());
29
18
  afterAll(() => server.close());
30
19
 
@@ -35,17 +24,12 @@ describe("Deploy API", () => {
35
24
  };
36
25
 
37
26
  const resources: GeneratedResources = {
38
- datasources: [
39
- { name: "events", content: "SCHEMA > timestamp DateTime" },
40
- ],
41
- pipes: [
42
- { name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" },
43
- ],
27
+ datasources: [{ name: "events", content: "SCHEMA > timestamp DateTime" }],
28
+ pipes: [{ name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" }],
44
29
  connections: [],
45
30
  };
46
31
 
47
- // Helper to set up successful deploy flow
48
- function setupSuccessfulDeployFlow(deploymentId = "deploy-abc") {
32
+ function setupAutoPromoteSuccessFlow(deploymentId = "deploy-abc") {
49
33
  server.use(
50
34
  http.post(`${BASE_URL}/v1/deploy`, () => {
51
35
  return HttpResponse.json(
@@ -53,64 +37,42 @@ describe("Deploy API", () => {
53
37
  );
54
38
  }),
55
39
  http.get(`${BASE_URL}/v1/deployments/${deploymentId}`, () => {
56
- return HttpResponse.json(
57
- createDeploymentStatusResponse({ deploymentId, status: "data_ready" })
58
- );
59
- }),
60
- http.post(`${BASE_URL}/v1/deployments/${deploymentId}/set-live`, () => {
61
- return HttpResponse.json(createSetLiveSuccessResponse());
40
+ return HttpResponse.json({
41
+ result: "success",
42
+ deployment: {
43
+ id: deploymentId,
44
+ status: "data_ready",
45
+ live: true,
46
+ },
47
+ });
62
48
  })
63
49
  );
64
50
  }
65
51
 
66
52
  describe("deployToMain", () => {
67
- it("successfully deploys resources with full flow", async () => {
68
- setupSuccessfulDeployFlow("deploy-abc");
53
+ it("successfully deploys resources with auto-promote flow", async () => {
54
+ setupAutoPromoteSuccessFlow("deploy-abc");
69
55
 
70
- const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
56
+ const onDeploymentLive = vi.fn();
57
+ const result = await deployToMain(config, resources, {
58
+ pollIntervalMs: 1,
59
+ callbacks: { onDeploymentLive },
60
+ });
71
61
 
72
62
  expect(result.success).toBe(true);
73
63
  expect(result.result).toBe("success");
74
64
  expect(result.buildId).toBe("deploy-abc");
75
65
  expect(result.datasourceCount).toBe(1);
76
66
  expect(result.pipeCount).toBe(1);
77
- });
78
-
79
- it("polls until deployment is ready", async () => {
80
- let pollCount = 0;
81
-
82
- server.use(
83
- http.post(`${BASE_URL}/v1/deploy`, () => {
84
- return HttpResponse.json(
85
- createDeploySuccessResponse({ deploymentId: "deploy-poll", status: "pending" })
86
- );
87
- }),
88
- http.get(`${BASE_URL}/v1/deployments/deploy-poll`, () => {
89
- pollCount++;
90
- // Return pending for first 2 polls, then data_ready
91
- const status = pollCount < 3 ? "pending" : "data_ready";
92
- return HttpResponse.json(
93
- createDeploymentStatusResponse({ deploymentId: "deploy-poll", status })
94
- );
95
- }),
96
- http.post(`${BASE_URL}/v1/deployments/deploy-poll/set-live`, () => {
97
- return HttpResponse.json(createSetLiveSuccessResponse());
98
- })
99
- );
100
-
101
- const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
102
-
103
- expect(result.success).toBe(true);
104
- expect(pollCount).toBe(3);
67
+ expect(onDeploymentLive).toHaveBeenCalledWith("deploy-abc");
105
68
  });
106
69
 
107
70
  it("handles deploy failure with single error", async () => {
108
71
  server.use(
109
72
  http.post(`${BASE_URL}/v1/deploy`, () => {
110
- return HttpResponse.json(
111
- createBuildFailureResponse("Permission denied"),
112
- { status: 200 }
113
- );
73
+ return HttpResponse.json(createBuildFailureResponse("Permission denied"), {
74
+ status: 200,
75
+ });
114
76
  })
115
77
  );
116
78
 
@@ -144,10 +106,7 @@ describe("Deploy API", () => {
144
106
  it("handles HTTP error responses", async () => {
145
107
  server.use(
146
108
  http.post(`${BASE_URL}/v1/deploy`, () => {
147
- return HttpResponse.json(
148
- { result: "failed", error: "Forbidden" },
149
- { status: 403 }
150
- );
109
+ return HttpResponse.json({ result: "failed", error: "Forbidden" }, { status: 403 });
151
110
  })
152
111
  );
153
112
 
@@ -167,28 +126,24 @@ describe("Deploy API", () => {
167
126
  })
168
127
  );
169
128
 
170
- await expect(deployToMain(config, resources)).rejects.toThrow(
171
- "Failed to parse response"
172
- );
129
+ await expect(deployToMain(config, resources)).rejects.toThrow("Failed to parse response");
173
130
  });
174
131
 
175
- it("uses /v1/deploy endpoint (not /v1/build)", async () => {
132
+ it("uses /v1/deploy endpoint and sends auto_promote by default", async () => {
176
133
  let capturedUrl: string | null = null;
177
134
 
178
135
  server.use(
179
136
  http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
180
137
  capturedUrl = request.url;
181
138
  return HttpResponse.json(
182
- createDeploySuccessResponse({ deploymentId: "deploy-url-test" })
139
+ createDeploySuccessResponse({ deploymentId: "deploy-url-test", status: "pending" })
183
140
  );
184
141
  }),
185
142
  http.get(`${BASE_URL}/v1/deployments/deploy-url-test`, () => {
186
- return HttpResponse.json(
187
- createDeploymentStatusResponse({ deploymentId: "deploy-url-test", status: "data_ready" })
188
- );
189
- }),
190
- http.post(`${BASE_URL}/v1/deployments/deploy-url-test/set-live`, () => {
191
- return HttpResponse.json(createSetLiveSuccessResponse());
143
+ return HttpResponse.json({
144
+ result: "success",
145
+ deployment: { id: "deploy-url-test", status: "data_ready", live: true },
146
+ });
192
147
  })
193
148
  );
194
149
 
@@ -197,6 +152,7 @@ describe("Deploy API", () => {
197
152
  const parsed = new URL(capturedUrl ?? "");
198
153
  expect(parsed.pathname).toBe("/v1/deploy");
199
154
  expect(parsed.searchParams.get("from")).toBe("ts-sdk");
155
+ expect(parsed.searchParams.get("auto_promote")).toBe("true");
200
156
  });
201
157
 
202
158
  it("passes allow_destructive_operations when explicitly enabled", async () => {
@@ -206,19 +162,14 @@ describe("Deploy API", () => {
206
162
  http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
207
163
  capturedUrl = request.url;
208
164
  return HttpResponse.json(
209
- createDeploySuccessResponse({ deploymentId: "deploy-destructive" })
165
+ createDeploySuccessResponse({ deploymentId: "deploy-destructive", status: "pending" })
210
166
  );
211
167
  }),
212
168
  http.get(`${BASE_URL}/v1/deployments/deploy-destructive`, () => {
213
- return HttpResponse.json(
214
- createDeploymentStatusResponse({
215
- deploymentId: "deploy-destructive",
216
- status: "data_ready",
217
- })
218
- );
219
- }),
220
- http.post(`${BASE_URL}/v1/deployments/deploy-destructive/set-live`, () => {
221
- return HttpResponse.json(createSetLiveSuccessResponse());
169
+ return HttpResponse.json({
170
+ result: "success",
171
+ deployment: { id: "deploy-destructive", status: "data_ready", live: true },
172
+ });
222
173
  })
223
174
  );
224
175
 
@@ -229,6 +180,25 @@ describe("Deploy API", () => {
229
180
 
230
181
  const parsed = new URL(capturedUrl ?? "");
231
182
  expect(parsed.searchParams.get("allow_destructive_operations")).toBe("true");
183
+ expect(parsed.searchParams.get("auto_promote")).toBe("true");
184
+ });
185
+
186
+ it("does not send auto_promote in check mode", async () => {
187
+ let capturedUrl: string | null = null;
188
+
189
+ server.use(
190
+ http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
191
+ capturedUrl = request.url;
192
+ return HttpResponse.json({ result: "success" });
193
+ })
194
+ );
195
+
196
+ const result = await deployToMain(config, resources, { check: true });
197
+
198
+ expect(result.success).toBe(true);
199
+ const parsed = new URL(capturedUrl ?? "");
200
+ expect(parsed.searchParams.get("check")).toBe("true");
201
+ expect(parsed.searchParams.get("auto_promote")).toBeNull();
232
202
  });
233
203
 
234
204
  it("adds actionable guidance to Forward/Classic workspace errors", async () => {
@@ -254,49 +224,6 @@ describe("Deploy API", () => {
254
224
  );
255
225
  });
256
226
 
257
- it("handles failed deployment status", async () => {
258
- server.use(
259
- http.post(`${BASE_URL}/v1/deploy`, () => {
260
- return HttpResponse.json(
261
- createDeploySuccessResponse({ deploymentId: "deploy-fail", status: "pending" })
262
- );
263
- }),
264
- http.get(`${BASE_URL}/v1/deployments/deploy-fail`, () => {
265
- return HttpResponse.json(
266
- createDeploymentStatusResponse({ deploymentId: "deploy-fail", status: "failed" })
267
- );
268
- })
269
- );
270
-
271
- const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
272
-
273
- expect(result.success).toBe(false);
274
- expect(result.error).toContain("Deployment failed with status: failed");
275
- });
276
-
277
- it("handles set-live failure", async () => {
278
- server.use(
279
- http.post(`${BASE_URL}/v1/deploy`, () => {
280
- return HttpResponse.json(
281
- createDeploySuccessResponse({ deploymentId: "deploy-setlive-fail" })
282
- );
283
- }),
284
- http.get(`${BASE_URL}/v1/deployments/deploy-setlive-fail`, () => {
285
- return HttpResponse.json(
286
- createDeploymentStatusResponse({ deploymentId: "deploy-setlive-fail", status: "data_ready" })
287
- );
288
- }),
289
- http.post(`${BASE_URL}/v1/deployments/deploy-setlive-fail/set-live`, () => {
290
- return HttpResponse.json({ error: "Set live failed" }, { status: 500 });
291
- })
292
- );
293
-
294
- const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
295
-
296
- expect(result.success).toBe(false);
297
- expect(result.error).toContain("Failed to set deployment as live");
298
- });
299
-
300
227
  it("normalizes baseUrl with trailing slash", async () => {
301
228
  let capturedUrl: string | null = null;
302
229
 
@@ -304,16 +231,14 @@ describe("Deploy API", () => {
304
231
  http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
305
232
  capturedUrl = request.url;
306
233
  return HttpResponse.json(
307
- createDeploySuccessResponse({ deploymentId: "deploy-slash" })
234
+ createDeploySuccessResponse({ deploymentId: "deploy-slash", status: "pending" })
308
235
  );
309
236
  }),
310
237
  http.get(`${BASE_URL}/v1/deployments/deploy-slash`, () => {
311
- return HttpResponse.json(
312
- createDeploymentStatusResponse({ deploymentId: "deploy-slash", status: "data_ready" })
313
- );
314
- }),
315
- http.post(`${BASE_URL}/v1/deployments/deploy-slash/set-live`, () => {
316
- return HttpResponse.json(createSetLiveSuccessResponse());
238
+ return HttpResponse.json({
239
+ result: "success",
240
+ deployment: { id: "deploy-slash", status: "data_ready", live: true },
241
+ });
317
242
  })
318
243
  );
319
244
 
@@ -326,29 +251,7 @@ describe("Deploy API", () => {
326
251
  const parsed = new URL(capturedUrl ?? "");
327
252
  expect(parsed.pathname).toBe("/v1/deploy");
328
253
  expect(parsed.searchParams.get("from")).toBe("ts-sdk");
329
- });
330
-
331
- it("times out when deployment never becomes ready", async () => {
332
- server.use(
333
- http.post(`${BASE_URL}/v1/deploy`, () => {
334
- return HttpResponse.json(
335
- createDeploySuccessResponse({ deploymentId: "deploy-timeout", status: "pending" })
336
- );
337
- }),
338
- http.get(`${BASE_URL}/v1/deployments/deploy-timeout`, () => {
339
- return HttpResponse.json(
340
- createDeploymentStatusResponse({ deploymentId: "deploy-timeout", status: "pending" })
341
- );
342
- })
343
- );
344
-
345
- const result = await deployToMain(config, resources, {
346
- pollIntervalMs: 1,
347
- maxPollAttempts: 3,
348
- });
349
-
350
- expect(result.success).toBe(false);
351
- expect(result.error).toContain("Deployment timed out");
254
+ expect(parsed.searchParams.get("auto_promote")).toBe("true");
352
255
  });
353
256
  });
354
257
  });
package/src/api/deploy.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Deploy resources to Tinybird main workspace
3
- * Uses the /v1/deploy endpoint to create a deployment, then sets it live
3
+ * Uses the /v1/deploy endpoint with auto-promotion enabled
4
4
  */
5
5
 
6
6
  import type { GeneratedResources } from "../generator/index.js";
@@ -31,13 +31,6 @@ export interface Deployment {
31
31
  feedback?: DeploymentFeedback[];
32
32
  }
33
33
 
34
- /**
35
- * Response from /v1/deployments list endpoint
36
- */
37
- export interface DeploymentsListResponse {
38
- deployments: Deployment[];
39
- }
40
-
41
34
  /**
42
35
  * Response from /v1/deploy endpoint
43
36
  */
@@ -48,6 +41,14 @@ export interface DeployResponse {
48
41
  errors?: Array<{ filename?: string; error: string }>;
49
42
  }
50
43
 
44
+ /**
45
+ * Response from /v1/deployments/{id} endpoint
46
+ */
47
+ export interface DeploymentStatusResponse {
48
+ result: string;
49
+ deployment: Deployment;
50
+ }
51
+
51
52
  /**
52
53
  * Detailed deployment information with resource changes
53
54
  */
@@ -74,21 +75,11 @@ export interface DeploymentDetails extends Deployment {
74
75
  errors?: Array<{ filename?: string; error: string }>;
75
76
  }
76
77
 
77
- /**
78
- * Response from /v1/deployments/{id} endpoint
79
- */
80
- export interface DeploymentStatusResponse {
81
- result: string;
82
- deployment: Deployment;
83
- }
84
-
85
78
  /**
86
79
  * Deploy generated resources to Tinybird main workspace
87
80
  *
88
81
  * Uses the /v1/deploy endpoint which accepts all resources in a single
89
- * multipart form request. After creating the deployment, this function:
90
- * 1. Polls until the deployment is ready (status === 'data_ready')
91
- * 2. Sets the deployment as live via /v1/deployments/{id}/set-live
82
+ * multipart form request.
92
83
  *
93
84
  * @param config - Build configuration with API URL and token
94
85
  * @param resources - Generated resources to deploy
@@ -161,13 +152,14 @@ export async function deployToMain(
161
152
  pollIntervalMs?: number;
162
153
  maxPollAttempts?: number;
163
154
  check?: boolean;
155
+ autoPromote?: boolean;
164
156
  allowDestructiveOperations?: boolean;
165
157
  callbacks?: DeployCallbacks;
166
158
  }
167
159
  ): Promise<BuildApiResult> {
168
160
  const debug = options?.debug ?? !!process.env.TINYBIRD_DEBUG;
169
161
  const pollIntervalMs = options?.pollIntervalMs ?? 1000;
170
- const maxPollAttempts = options?.maxPollAttempts ?? 120; // 2 minutes max
162
+ const maxPollAttempts = options?.maxPollAttempts ?? 120;
171
163
  const baseUrl = config.baseUrl.replace(/\/$/, "");
172
164
 
173
165
  const formData = new FormData();
@@ -202,46 +194,17 @@ export async function deployToMain(
202
194
  );
203
195
  }
204
196
 
205
- // Step 0: Clean up any stale non-live deployments that might block the new deployment
206
- try {
207
- const deploymentsUrl = `${baseUrl}/v1/deployments`;
208
- const deploymentsResponse = await tinybirdFetch(deploymentsUrl, {
209
- headers: {
210
- Authorization: `Bearer ${config.token}`,
211
- },
212
- });
213
-
214
- if (deploymentsResponse.ok) {
215
- const deploymentsBody = (await deploymentsResponse.json()) as DeploymentsListResponse;
216
- const staleDeployments = deploymentsBody.deployments.filter(
217
- (d) => !d.live && d.status !== "live"
218
- );
219
-
220
- for (const stale of staleDeployments) {
221
- if (debug) {
222
- console.log(`[debug] Cleaning up stale deployment: ${stale.id} (status: ${stale.status})`);
223
- }
224
- await tinybirdFetch(`${baseUrl}/v1/deployments/${stale.id}`, {
225
- method: "DELETE",
226
- headers: {
227
- Authorization: `Bearer ${config.token}`,
228
- },
229
- });
230
- }
231
- }
232
- } catch (e) {
233
- // Ignore errors during cleanup - we'll try to deploy anyway
234
- if (debug) {
235
- console.log(`[debug] Failed to clean up stale deployments: ${e}`);
236
- }
237
- }
238
-
239
- // Step 1: Create deployment via /v1/deploy
197
+ // Create deployment via /v1/deploy.
198
+ // `auto_promote=true` makes the API promote the deployment automatically.
240
199
  const deployUrlBase = `${baseUrl}/v1/deploy`;
241
200
  const urlParams = new URLSearchParams();
242
201
  if (options?.check) {
243
202
  urlParams.set("check", "true");
244
203
  }
204
+ const autoPromote = options?.autoPromote ?? !options?.check;
205
+ if (autoPromote) {
206
+ urlParams.set("auto_promote", "true");
207
+ }
245
208
  if (options?.allowDestructiveOperations) {
246
209
  urlParams.set("allow_destructive_operations", "true");
247
210
  }
@@ -408,18 +371,22 @@ export async function deployToMain(
408
371
  });
409
372
  }
410
373
 
411
- // Step 2: Poll until deployment is ready
412
- let deployment = body.deployment;
413
- let attempts = 0;
374
+ let deployment = deploymentDetails;
375
+ let statusAttempts = 0;
414
376
 
415
377
  options?.callbacks?.onWaitingForReady?.();
416
378
 
417
- while (deployment.status !== "data_ready" && attempts < maxPollAttempts) {
379
+ while (
380
+ deployment.status !== "data_ready" &&
381
+ deployment.status !== "failed" &&
382
+ deployment.status !== "error" &&
383
+ statusAttempts < maxPollAttempts
384
+ ) {
418
385
  await sleep(pollIntervalMs);
419
- attempts++;
386
+ statusAttempts++;
420
387
 
421
388
  if (debug) {
422
- console.log(`[debug] Polling deployment status (attempt ${attempts})...`);
389
+ console.log(`[debug] Polling deployment status (attempt ${statusAttempts})...`);
423
390
  }
424
391
 
425
392
  const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
@@ -443,30 +410,13 @@ export async function deployToMain(
443
410
 
444
411
  const statusBody = (await statusResponse.json()) as DeploymentStatusResponse;
445
412
  deployment = statusBody.deployment;
446
-
447
- if (debug) {
448
- console.log(`[debug] Deployment status: ${deployment.status}`);
449
- }
450
-
451
- // Check for failed status
452
- if (deployment.status === "failed" || deployment.status === "error") {
453
- return {
454
- success: false,
455
- result: "failed",
456
- error: `Deployment failed with status: ${deployment.status}`,
457
- datasourceCount: resources.datasources.length,
458
- pipeCount: resources.pipes.length,
459
- connectionCount: resources.connections?.length ?? 0,
460
- buildId: deploymentId,
461
- };
462
- }
463
413
  }
464
414
 
465
- if (deployment.status !== "data_ready") {
415
+ if (deployment.status === "failed" || deployment.status === "error") {
466
416
  return {
467
417
  success: false,
468
418
  result: "failed",
469
- error: `Deployment timed out after ${maxPollAttempts} attempts. Last status: ${deployment.status}`,
419
+ error: `Deployment failed with status: ${deployment.status}`,
470
420
  datasourceCount: resources.datasources.length,
471
421
  pipeCount: resources.pipes.length,
472
422
  connectionCount: resources.connections?.length ?? 0,
@@ -474,28 +424,11 @@ export async function deployToMain(
474
424
  };
475
425
  }
476
426
 
477
- options?.callbacks?.onDeploymentReady?.();
478
-
479
- // Step 3: Set the deployment as live
480
- const setLiveUrl = `${baseUrl}/v1/deployments/${deploymentId}/set-live`;
481
-
482
- if (debug) {
483
- console.log(`[debug] POST ${setLiveUrl}`);
484
- }
485
-
486
- const setLiveResponse = await tinybirdFetch(setLiveUrl, {
487
- method: "POST",
488
- headers: {
489
- Authorization: `Bearer ${config.token}`,
490
- },
491
- });
492
-
493
- if (!setLiveResponse.ok) {
494
- const setLiveBody = await setLiveResponse.text();
427
+ if (deployment.status !== "data_ready") {
495
428
  return {
496
429
  success: false,
497
430
  result: "failed",
498
- error: `Failed to set deployment as live: ${setLiveResponse.status} ${setLiveResponse.statusText}\n${setLiveBody}`,
431
+ error: `Deployment timed out after ${maxPollAttempts} attempts. Last status: ${deployment.status}`,
499
432
  datasourceCount: resources.datasources.length,
500
433
  pipeCount: resources.pipes.length,
501
434
  connectionCount: resources.connections?.length ?? 0,
@@ -503,11 +436,66 @@ export async function deployToMain(
503
436
  };
504
437
  }
505
438
 
439
+ options?.callbacks?.onDeploymentReady?.();
440
+
441
+ if (autoPromote && !deployment.live) {
442
+ let promotionAttempts = 0;
443
+ options?.callbacks?.onWaitingForPromote?.();
444
+
445
+ while (!deployment.live && promotionAttempts < maxPollAttempts) {
446
+ await sleep(pollIntervalMs);
447
+ promotionAttempts++;
448
+
449
+ if (debug) {
450
+ console.log(`[debug] Polling auto-promote status (attempt ${promotionAttempts})...`);
451
+ }
452
+
453
+ const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
454
+ const statusResponse = await tinybirdFetch(statusUrl, {
455
+ headers: {
456
+ Authorization: `Bearer ${config.token}`,
457
+ },
458
+ });
459
+
460
+ if (!statusResponse.ok) {
461
+ return {
462
+ success: false,
463
+ result: "failed",
464
+ error: `Failed to check deployment status: ${statusResponse.status} ${statusResponse.statusText}`,
465
+ datasourceCount: resources.datasources.length,
466
+ pipeCount: resources.pipes.length,
467
+ connectionCount: resources.connections?.length ?? 0,
468
+ buildId: deploymentId,
469
+ };
470
+ }
471
+
472
+ const statusBody = (await statusResponse.json()) as DeploymentStatusResponse;
473
+ deployment = statusBody.deployment;
474
+ }
475
+
476
+ if (!deployment.live) {
477
+ return {
478
+ success: false,
479
+ result: "failed",
480
+ error: `Deployment reached data_ready but auto-promote did not complete after ${maxPollAttempts} attempts`,
481
+ datasourceCount: resources.datasources.length,
482
+ pipeCount: resources.pipes.length,
483
+ connectionCount: resources.connections?.length ?? 0,
484
+ buildId: deploymentId,
485
+ };
486
+ }
487
+
488
+ options?.callbacks?.onDeploymentPromoted?.();
489
+ }
490
+
506
491
  if (debug) {
507
- console.log(`[debug] Deployment ${deploymentId} is now live`);
492
+ const stateLabel = deployment.live ? "live" : "ready";
493
+ console.log(`[debug] Deployment ${deploymentId} is now ${stateLabel}`);
508
494
  }
509
495
 
510
- options?.callbacks?.onDeploymentLive?.(deploymentId);
496
+ if (deployment.live) {
497
+ options?.callbacks?.onDeploymentLive?.(deploymentId);
498
+ }
511
499
 
512
500
  return {
513
501
  success: true,
@@ -529,9 +517,6 @@ export async function deployToMain(
529
517
  };
530
518
  }
531
519
 
532
- /**
533
- * Helper function to sleep for a given number of milliseconds
534
- */
535
520
  function sleep(ms: number): Promise<void> {
536
521
  return new Promise((resolve) => setTimeout(resolve, ms));
537
522
  }