@tinybirdco/sdk 0.0.4 → 0.0.7
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/README.md +52 -13
- package/dist/api/branches.d.ts.map +1 -1
- package/dist/api/branches.js +6 -5
- package/dist/api/branches.js.map +1 -1
- package/dist/api/branches.test.js +32 -6
- package/dist/api/branches.test.js.map +1 -1
- package/dist/api/build.d.ts.map +1 -1
- package/dist/api/build.js +2 -1
- package/dist/api/build.js.map +1 -1
- package/dist/api/deploy.d.ts +42 -3
- package/dist/api/deploy.d.ts.map +1 -1
- package/dist/api/deploy.js +162 -19
- package/dist/api/deploy.js.map +1 -1
- package/dist/api/deploy.test.js +83 -31
- package/dist/api/deploy.test.js.map +1 -1
- package/dist/api/fetcher.d.ts +6 -0
- package/dist/api/fetcher.d.ts.map +1 -0
- package/dist/api/fetcher.js +13 -0
- package/dist/api/fetcher.js.map +1 -0
- package/dist/api/local.d.ts.map +1 -1
- package/dist/api/local.js +5 -4
- package/dist/api/local.js.map +1 -1
- package/dist/api/local.test.js.map +1 -1
- package/dist/api/resources.d.ts +178 -0
- package/dist/api/resources.d.ts.map +1 -0
- package/dist/api/resources.js +245 -0
- package/dist/api/resources.js.map +1 -0
- package/dist/api/resources.test.d.ts +2 -0
- package/dist/api/resources.test.d.ts.map +1 -0
- package/dist/api/resources.test.js +255 -0
- package/dist/api/resources.test.js.map +1 -0
- package/dist/api/workspaces.d.ts.map +1 -1
- package/dist/api/workspaces.js +2 -1
- package/dist/api/workspaces.js.map +1 -1
- package/dist/api/workspaces.test.js +9 -1
- package/dist/api/workspaces.test.js.map +1 -1
- package/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +2 -1
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/commands/build.d.ts +3 -4
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +23 -25
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts +41 -0
- package/dist/cli/commands/deploy.d.ts.map +1 -0
- package/dist/cli/commands/deploy.js +92 -0
- package/dist/cli/commands/deploy.js.map +1 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +7 -3
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/init.d.ts +38 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +434 -23
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/init.test.js +190 -30
- package/dist/cli/commands/init.test.js.map +1 -1
- package/dist/cli/index.js +80 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/package-manager.d.ts +8 -0
- package/dist/cli/utils/package-manager.d.ts.map +1 -0
- package/dist/cli/utils/package-manager.js +45 -0
- package/dist/cli/utils/package-manager.js.map +1 -0
- package/dist/cli/utils/package-manager.test.d.ts +2 -0
- package/dist/cli/utils/package-manager.test.d.ts.map +1 -0
- package/dist/cli/utils/package-manager.test.js +85 -0
- package/dist/cli/utils/package-manager.test.js.map +1 -0
- package/dist/client/base.d.ts.map +1 -1
- package/dist/client/base.js +2 -1
- package/dist/client/base.js.map +1 -1
- package/dist/codegen/index.d.ts +39 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +300 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/index.test.d.ts +2 -0
- package/dist/codegen/index.test.d.ts.map +1 -0
- package/dist/codegen/index.test.js +310 -0
- package/dist/codegen/index.test.js.map +1 -0
- package/dist/codegen/type-mapper.d.ts +20 -0
- package/dist/codegen/type-mapper.d.ts.map +1 -0
- package/dist/codegen/type-mapper.js +238 -0
- package/dist/codegen/type-mapper.js.map +1 -0
- package/dist/codegen/type-mapper.test.d.ts +2 -0
- package/dist/codegen/type-mapper.test.d.ts.map +1 -0
- package/dist/codegen/type-mapper.test.js +167 -0
- package/dist/codegen/type-mapper.test.js.map +1 -0
- package/dist/codegen/utils.d.ts +46 -0
- package/dist/codegen/utils.d.ts.map +1 -0
- package/dist/codegen/utils.js +141 -0
- package/dist/codegen/utils.js.map +1 -0
- package/dist/codegen/utils.test.d.ts +2 -0
- package/dist/codegen/utils.test.d.ts.map +1 -0
- package/dist/codegen/utils.test.js +178 -0
- package/dist/codegen/utils.test.js.map +1 -0
- package/dist/generator/index.d.ts +3 -0
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +17 -1
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/index.test.js +104 -1
- package/dist/generator/index.test.js.map +1 -1
- package/dist/generator/loader.d.ts +15 -0
- package/dist/generator/loader.d.ts.map +1 -1
- package/dist/generator/loader.js +24 -0
- package/dist/generator/loader.js.map +1 -1
- package/dist/schema/connection.d.ts.map +1 -1
- package/dist/schema/connection.js +3 -2
- package/dist/schema/connection.js.map +1 -1
- package/dist/schema/datasource.d.ts.map +1 -1
- package/dist/schema/datasource.js +3 -2
- package/dist/schema/datasource.js.map +1 -1
- package/dist/schema/params.d.ts.map +1 -1
- package/dist/schema/params.js +3 -2
- package/dist/schema/params.js.map +1 -1
- package/dist/schema/pipe.d.ts +2 -2
- package/dist/schema/pipe.d.ts.map +1 -1
- package/dist/schema/pipe.js +4 -4
- package/dist/schema/pipe.js.map +1 -1
- package/dist/schema/project.d.ts.map +1 -1
- package/dist/schema/project.js +3 -2
- package/dist/schema/project.js.map +1 -1
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +3 -2
- package/dist/schema/types.js.map +1 -1
- package/dist/test/handlers.d.ts +49 -0
- package/dist/test/handlers.d.ts.map +1 -1
- package/dist/test/handlers.js +45 -0
- package/dist/test/handlers.js.map +1 -1
- package/package.json +4 -2
- package/src/api/branches.test.ts +65 -57
- package/src/api/branches.ts +7 -5
- package/src/api/build.ts +2 -1
- package/src/api/deploy.test.ts +141 -36
- package/src/api/deploy.ts +231 -23
- package/src/api/fetcher.ts +17 -0
- package/src/api/local.test.ts +43 -31
- package/src/api/local.ts +5 -4
- package/src/api/resources.test.ts +332 -0
- package/src/api/resources.ts +555 -0
- package/src/api/workspaces.test.ts +15 -9
- package/src/api/workspaces.ts +3 -1
- package/src/cli/auth.ts +2 -1
- package/src/cli/commands/build.ts +29 -33
- package/src/cli/commands/deploy.ts +131 -0
- package/src/cli/commands/dev.ts +10 -3
- package/src/cli/commands/init.test.ts +239 -30
- package/src/cli/commands/init.ts +548 -26
- package/src/cli/index.ts +117 -20
- package/src/cli/utils/package-manager.test.ts +118 -0
- package/src/cli/utils/package-manager.ts +44 -0
- package/src/client/base.ts +3 -2
- package/src/codegen/index.test.ts +367 -0
- package/src/codegen/index.ts +379 -0
- package/src/codegen/type-mapper.test.ts +224 -0
- package/src/codegen/type-mapper.ts +265 -0
- package/src/codegen/utils.test.ts +221 -0
- package/src/codegen/utils.ts +174 -0
- package/src/generator/index.test.ts +121 -1
- package/src/generator/index.ts +19 -1
- package/src/generator/loader.ts +43 -0
- package/src/schema/connection.ts +3 -2
- package/src/schema/datasource.ts +3 -2
- package/src/schema/params.ts +3 -2
- package/src/schema/pipe.ts +4 -4
- package/src/schema/project.ts +3 -2
- package/src/schema/types.ts +3 -2
- package/src/test/handlers.ts +58 -0
package/dist/schema/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
|
package/dist/test/handlers.d.ts
CHANGED
|
@@ -51,6 +51,55 @@ export declare function createBuildMultipleErrorsResponse(errors: Array<{
|
|
|
51
51
|
export declare function createNoChangesResponse(): {
|
|
52
52
|
result: string;
|
|
53
53
|
};
|
|
54
|
+
/**
|
|
55
|
+
* Create deploy success response (for /v1/deploy endpoint)
|
|
56
|
+
* This returns a deployment object, not a build object
|
|
57
|
+
*/
|
|
58
|
+
export declare function createDeploySuccessResponse(options?: {
|
|
59
|
+
deploymentId?: string;
|
|
60
|
+
status?: string;
|
|
61
|
+
}): {
|
|
62
|
+
result: string;
|
|
63
|
+
deployment: {
|
|
64
|
+
id: string;
|
|
65
|
+
status: string;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Create deployment status response (for /v1/deployments/:id endpoint)
|
|
70
|
+
*/
|
|
71
|
+
export declare function createDeploymentStatusResponse(options?: {
|
|
72
|
+
deploymentId?: string;
|
|
73
|
+
status?: string;
|
|
74
|
+
}): {
|
|
75
|
+
result: string;
|
|
76
|
+
deployment: {
|
|
77
|
+
id: string;
|
|
78
|
+
status: string;
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Create set-live success response (for /v1/deployments/:id/set-live endpoint)
|
|
83
|
+
*/
|
|
84
|
+
export declare function createSetLiveSuccessResponse(): {
|
|
85
|
+
result: string;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Create deployments list response (for /v1/deployments endpoint)
|
|
89
|
+
*/
|
|
90
|
+
export declare function createDeploymentsListResponse(options?: {
|
|
91
|
+
deployments?: Array<{
|
|
92
|
+
id: string;
|
|
93
|
+
status: string;
|
|
94
|
+
live: boolean;
|
|
95
|
+
}>;
|
|
96
|
+
}): {
|
|
97
|
+
deployments: {
|
|
98
|
+
id: string;
|
|
99
|
+
status: string;
|
|
100
|
+
live: boolean;
|
|
101
|
+
}[];
|
|
102
|
+
};
|
|
54
103
|
/**
|
|
55
104
|
* Default handlers for build and deploy endpoints
|
|
56
105
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/test/handlers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,QAAQ,4BAA4B,CAAC;AAElD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;;;;;;;;;;;EAaA;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM;;;EAKvD;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;;;mBAAxB,MAAM;eAAS,MAAM;;EAMjD;AAED;;GAEG;AACH,wBAAgB,uBAAuB;;EAItC;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/test/handlers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,QAAQ,4BAA4B,CAAC;AAElD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;;;;;;;;;;;EAaA;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM;;;EAKvD;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;;;mBAAxB,MAAM;eAAS,MAAM;;EAMjD;AAED;;GAEG;AACH,wBAAgB,uBAAuB;;EAItC;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;;;;;EAQA;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,CAAC,EAAE;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;;;;;EAQA;AAED;;GAEG;AACH,wBAAgB,4BAA4B;;EAI3C;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,CAAC,EAAE;IACtD,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpE;;YAD2B,MAAM;gBAAU,MAAM;cAAQ,OAAO;;EAKhE;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,6BAepB,CAAC"}
|
package/dist/test/handlers.js
CHANGED
|
@@ -46,6 +46,47 @@ export function createNoChangesResponse() {
|
|
|
46
46
|
result: "no_changes",
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Create deploy success response (for /v1/deploy endpoint)
|
|
51
|
+
* This returns a deployment object, not a build object
|
|
52
|
+
*/
|
|
53
|
+
export function createDeploySuccessResponse(options) {
|
|
54
|
+
return {
|
|
55
|
+
result: "success",
|
|
56
|
+
deployment: {
|
|
57
|
+
id: options?.deploymentId ?? "deploy-123",
|
|
58
|
+
status: options?.status ?? "pending",
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Create deployment status response (for /v1/deployments/:id endpoint)
|
|
64
|
+
*/
|
|
65
|
+
export function createDeploymentStatusResponse(options) {
|
|
66
|
+
return {
|
|
67
|
+
result: "success",
|
|
68
|
+
deployment: {
|
|
69
|
+
id: options?.deploymentId ?? "deploy-123",
|
|
70
|
+
status: options?.status ?? "data_ready",
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create set-live success response (for /v1/deployments/:id/set-live endpoint)
|
|
76
|
+
*/
|
|
77
|
+
export function createSetLiveSuccessResponse() {
|
|
78
|
+
return {
|
|
79
|
+
result: "success",
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create deployments list response (for /v1/deployments endpoint)
|
|
84
|
+
*/
|
|
85
|
+
export function createDeploymentsListResponse(options) {
|
|
86
|
+
return {
|
|
87
|
+
deployments: options?.deployments ?? [],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
49
90
|
/**
|
|
50
91
|
* Default handlers for build and deploy endpoints
|
|
51
92
|
*/
|
|
@@ -58,5 +99,9 @@ export const handlers = [
|
|
|
58
99
|
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
59
100
|
return HttpResponse.json(createBuildSuccessResponse());
|
|
60
101
|
}),
|
|
102
|
+
// Deployments list endpoint - empty list by default (no stale deployments)
|
|
103
|
+
http.get(`${BASE_URL}/v1/deployments`, () => {
|
|
104
|
+
return HttpResponse.json(createDeploymentsListResponse());
|
|
105
|
+
}),
|
|
61
106
|
];
|
|
62
107
|
//# sourceMappingURL=handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/test/handlers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AAEzC,MAAM,CAAC,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAQ1C;IACC,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE;YACL,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW;YACnC,kBAAkB,EAAE,OAAO,EAAE,YAAY,IAAI,EAAE;YAC/C,cAAc,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE;YACvC,kBAAkB,EAAE,OAAO,EAAE,YAAY,IAAI,EAAE;YAC/C,wBAAwB,EAAE,OAAO,EAAE,kBAAkB,IAAI,EAAE;YAC3D,oBAAoB,EAAE,OAAO,EAAE,cAAc,IAAI,EAAE;YACnD,wBAAwB,EAAE,OAAO,EAAE,kBAAkB,IAAI,EAAE;SAC5D;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAC/C,MAAmD;IAEnD,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,MAAM,EAAE,YAAY;KACrB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,sCAAsC;IACtC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,WAAW,EAAE,GAAG,EAAE;QACrC,OAAO,YAAY,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,uCAAuC;IACvC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,YAAY,EAAE,GAAG,EAAE;QACtC,OAAO,YAAY,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;CACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/test/handlers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AAEzC,MAAM,CAAC,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAQ1C;IACC,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE;YACL,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW;YACnC,kBAAkB,EAAE,OAAO,EAAE,YAAY,IAAI,EAAE;YAC/C,cAAc,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE;YACvC,kBAAkB,EAAE,OAAO,EAAE,YAAY,IAAI,EAAE;YAC/C,wBAAwB,EAAE,OAAO,EAAE,kBAAkB,IAAI,EAAE;YAC3D,oBAAoB,EAAE,OAAO,EAAE,cAAc,IAAI,EAAE;YACnD,wBAAwB,EAAE,OAAO,EAAE,kBAAkB,IAAI,EAAE;SAC5D;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAC/C,MAAmD;IAEnD,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,MAAM,EAAE,YAAY;KACrB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAG3C;IACC,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE;YACV,EAAE,EAAE,OAAO,EAAE,YAAY,IAAI,YAAY;YACzC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,SAAS;SACrC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAG9C;IACC,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE;YACV,EAAE,EAAE,OAAO,EAAE,YAAY,IAAI,YAAY;YACzC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,YAAY;SACxC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,MAAM,EAAE,SAAS;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAE7C;IACC,OAAO;QACL,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,sCAAsC;IACtC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,WAAW,EAAE,GAAG,EAAE;QACrC,OAAO,YAAY,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,uCAAuC;IACvC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,YAAY,EAAE,GAAG,EAAE;QACtC,OAAO,YAAY,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,2EAA2E;IAC3E,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,iBAAiB,EAAE,GAAG,EAAE;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC;CACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tinybirdco/sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "TypeScript SDK for Tinybird Forward - define datasources and pipes as TypeScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -31,10 +31,12 @@
|
|
|
31
31
|
"author": "Tinybird",
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"dependencies": {
|
|
34
|
+
"@clack/prompts": "^1.0.0",
|
|
34
35
|
"chokidar": "^4.0.0",
|
|
35
36
|
"commander": "^12.0.0",
|
|
36
37
|
"dotenv": "^16.0.0",
|
|
37
|
-
"esbuild": "^0.24.0"
|
|
38
|
+
"esbuild": "^0.24.0",
|
|
39
|
+
"picocolors": "^1.1.1"
|
|
38
40
|
},
|
|
39
41
|
"devDependencies": {
|
|
40
42
|
"@types/node": "^20.0.0",
|
package/src/api/branches.test.ts
CHANGED
|
@@ -14,6 +14,12 @@ import {
|
|
|
14
14
|
const mockFetch = vi.fn();
|
|
15
15
|
global.fetch = mockFetch;
|
|
16
16
|
|
|
17
|
+
function expectFromParam(url: string) {
|
|
18
|
+
const parsed = new URL(url);
|
|
19
|
+
expect(parsed.searchParams.get("from")).toBe("ts-sdk");
|
|
20
|
+
return parsed;
|
|
21
|
+
}
|
|
22
|
+
|
|
17
23
|
describe("Branch API client", () => {
|
|
18
24
|
const config: BranchApiConfig = {
|
|
19
25
|
baseUrl: "https://api.tinybird.co",
|
|
@@ -62,36 +68,37 @@ describe("Branch API client", () => {
|
|
|
62
68
|
const result = await createBranch(config, "my-feature");
|
|
63
69
|
|
|
64
70
|
expect(mockFetch).toHaveBeenCalledTimes(3);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
71
|
+
const [createUrl, createInit] = mockFetch.mock.calls[0];
|
|
72
|
+
const createParsed = expectFromParam(createUrl);
|
|
73
|
+
expect(createParsed.pathname).toBe("/v1/environments");
|
|
74
|
+
expect(createParsed.searchParams.get("name")).toBe("my-feature");
|
|
75
|
+
expect(createInit).toEqual({
|
|
76
|
+
method: "POST",
|
|
77
|
+
headers: {
|
|
78
|
+
Authorization: "Bearer p.test-token",
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const [jobUrl, jobInit] = mockFetch.mock.calls[1];
|
|
83
|
+
const jobParsed = expectFromParam(jobUrl);
|
|
84
|
+
expect(jobParsed.pathname).toBe("/v0/jobs/job-123");
|
|
85
|
+
expect(jobInit).toEqual({
|
|
86
|
+
method: "GET",
|
|
87
|
+
headers: {
|
|
88
|
+
Authorization: "Bearer p.test-token",
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
const [branchUrl, branchInit] = mockFetch.mock.calls[2];
|
|
93
|
+
const branchParsed = expectFromParam(branchUrl);
|
|
94
|
+
expect(branchParsed.pathname).toBe("/v0/environments/my-feature");
|
|
95
|
+
expect(branchParsed.searchParams.get("with_token")).toBe("true");
|
|
96
|
+
expect(branchInit).toEqual({
|
|
97
|
+
method: "GET",
|
|
98
|
+
headers: {
|
|
99
|
+
Authorization: "Bearer p.test-token",
|
|
100
|
+
},
|
|
101
|
+
});
|
|
95
102
|
expect(result).toEqual(mockBranch);
|
|
96
103
|
});
|
|
97
104
|
|
|
@@ -196,15 +203,15 @@ describe("Branch API client", () => {
|
|
|
196
203
|
|
|
197
204
|
const result = await listBranches(config);
|
|
198
205
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
);
|
|
206
|
+
const [url, init] = mockFetch.mock.calls[0];
|
|
207
|
+
const parsed = expectFromParam(url);
|
|
208
|
+
expect(parsed.pathname).toBe("/v1/environments");
|
|
209
|
+
expect(init).toEqual({
|
|
210
|
+
method: "GET",
|
|
211
|
+
headers: {
|
|
212
|
+
Authorization: "Bearer p.test-token",
|
|
213
|
+
},
|
|
214
|
+
});
|
|
208
215
|
expect(result).toEqual(mockBranches);
|
|
209
216
|
});
|
|
210
217
|
|
|
@@ -235,15 +242,16 @@ describe("Branch API client", () => {
|
|
|
235
242
|
|
|
236
243
|
const result = await getBranch(config, "my-feature");
|
|
237
244
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
245
|
+
const [url, init] = mockFetch.mock.calls[0];
|
|
246
|
+
const parsed = expectFromParam(url);
|
|
247
|
+
expect(parsed.pathname).toBe("/v0/environments/my-feature");
|
|
248
|
+
expect(parsed.searchParams.get("with_token")).toBe("true");
|
|
249
|
+
expect(init).toEqual({
|
|
250
|
+
method: "GET",
|
|
251
|
+
headers: {
|
|
252
|
+
Authorization: "Bearer p.test-token",
|
|
253
|
+
},
|
|
254
|
+
});
|
|
247
255
|
expect(result).toEqual(mockBranch);
|
|
248
256
|
});
|
|
249
257
|
|
|
@@ -269,15 +277,15 @@ describe("Branch API client", () => {
|
|
|
269
277
|
|
|
270
278
|
await deleteBranch(config, "my-feature");
|
|
271
279
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
}
|
|
280
|
-
);
|
|
280
|
+
const [url, init] = mockFetch.mock.calls[0];
|
|
281
|
+
const parsed = expectFromParam(url);
|
|
282
|
+
expect(parsed.pathname).toBe("/v1/environments/my-feature");
|
|
283
|
+
expect(init).toEqual({
|
|
284
|
+
method: "DELETE",
|
|
285
|
+
headers: {
|
|
286
|
+
Authorization: "Bearer p.test-token",
|
|
287
|
+
},
|
|
288
|
+
});
|
|
281
289
|
});
|
|
282
290
|
});
|
|
283
291
|
|
package/src/api/branches.ts
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* Uses the /v1/environments endpoints (Forward API)
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { tinybirdFetch } from "./fetcher.js";
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
9
|
* Branch information from Tinybird API
|
|
8
10
|
*/
|
|
@@ -90,7 +92,7 @@ async function pollJob(
|
|
|
90
92
|
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
91
93
|
const url = new URL(`/v0/jobs/${jobId}`, config.baseUrl);
|
|
92
94
|
|
|
93
|
-
const response = await
|
|
95
|
+
const response = await tinybirdFetch(url.toString(), {
|
|
94
96
|
method: "GET",
|
|
95
97
|
headers: {
|
|
96
98
|
Authorization: `Bearer ${config.token}`,
|
|
@@ -148,7 +150,7 @@ export async function createBranch(
|
|
|
148
150
|
const url = new URL("/v1/environments", config.baseUrl);
|
|
149
151
|
url.searchParams.set("name", name);
|
|
150
152
|
|
|
151
|
-
const response = await
|
|
153
|
+
const response = await tinybirdFetch(url.toString(), {
|
|
152
154
|
method: "POST",
|
|
153
155
|
headers: {
|
|
154
156
|
Authorization: `Bearer ${config.token}`,
|
|
@@ -205,7 +207,7 @@ export async function listBranches(
|
|
|
205
207
|
): Promise<TinybirdBranch[]> {
|
|
206
208
|
const url = new URL("/v1/environments", config.baseUrl);
|
|
207
209
|
|
|
208
|
-
const response = await
|
|
210
|
+
const response = await tinybirdFetch(url.toString(), {
|
|
209
211
|
method: "GET",
|
|
210
212
|
headers: {
|
|
211
213
|
Authorization: `Bearer ${config.token}`,
|
|
@@ -240,7 +242,7 @@ export async function getBranch(
|
|
|
240
242
|
const url = new URL(`/v0/environments/${encodeURIComponent(name)}`, config.baseUrl);
|
|
241
243
|
url.searchParams.set("with_token", "true");
|
|
242
244
|
|
|
243
|
-
const response = await
|
|
245
|
+
const response = await tinybirdFetch(url.toString(), {
|
|
244
246
|
method: "GET",
|
|
245
247
|
headers: {
|
|
246
248
|
Authorization: `Bearer ${config.token}`,
|
|
@@ -273,7 +275,7 @@ export async function deleteBranch(
|
|
|
273
275
|
): Promise<void> {
|
|
274
276
|
const url = new URL(`/v1/environments/${encodeURIComponent(name)}`, config.baseUrl);
|
|
275
277
|
|
|
276
|
-
const response = await
|
|
278
|
+
const response = await tinybirdFetch(url.toString(), {
|
|
277
279
|
method: "DELETE",
|
|
278
280
|
headers: {
|
|
279
281
|
Authorization: `Bearer ${config.token}`,
|
package/src/api/build.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { GeneratedResources } from "../generator/index.js";
|
|
7
|
+
import { tinybirdFetch } from "./fetcher.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Configuration for building/deploying to Tinybird
|
|
@@ -190,7 +191,7 @@ export async function buildToTinybird(
|
|
|
190
191
|
console.log(`[debug] POST ${url}`);
|
|
191
192
|
}
|
|
192
193
|
|
|
193
|
-
const response = await
|
|
194
|
+
const response = await tinybirdFetch(url, {
|
|
194
195
|
method: "POST",
|
|
195
196
|
headers: {
|
|
196
197
|
Authorization: `Bearer ${config.token}`,
|
package/src/api/deploy.test.ts
CHANGED
|
@@ -1,20 +1,30 @@
|
|
|
1
|
-
import { describe, it, expect, beforeAll, afterEach, afterAll } from "vitest";
|
|
1
|
+
import { describe, it, expect, beforeAll, beforeEach, afterEach, afterAll } from "vitest";
|
|
2
2
|
import { setupServer } from "msw/node";
|
|
3
3
|
import { http, HttpResponse } from "msw";
|
|
4
4
|
import { deployToMain } from "./deploy.js";
|
|
5
5
|
import type { BuildConfig } from "./build.js";
|
|
6
6
|
import {
|
|
7
7
|
BASE_URL,
|
|
8
|
-
|
|
8
|
+
createDeploySuccessResponse,
|
|
9
|
+
createDeploymentStatusResponse,
|
|
10
|
+
createSetLiveSuccessResponse,
|
|
9
11
|
createBuildFailureResponse,
|
|
10
12
|
createBuildMultipleErrorsResponse,
|
|
11
|
-
|
|
13
|
+
createDeploymentsListResponse,
|
|
12
14
|
} from "../test/handlers.js";
|
|
13
15
|
import type { GeneratedResources } from "../generator/index.js";
|
|
14
16
|
|
|
15
17
|
const server = setupServer();
|
|
16
18
|
|
|
17
19
|
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
|
+
});
|
|
18
28
|
afterEach(() => server.resetHandlers());
|
|
19
29
|
afterAll(() => server.close());
|
|
20
30
|
|
|
@@ -34,42 +44,64 @@ describe("Deploy API", () => {
|
|
|
34
44
|
connections: [],
|
|
35
45
|
};
|
|
36
46
|
|
|
47
|
+
// Helper to set up successful deploy flow
|
|
48
|
+
function setupSuccessfulDeployFlow(deploymentId = "deploy-abc") {
|
|
49
|
+
server.use(
|
|
50
|
+
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
51
|
+
return HttpResponse.json(
|
|
52
|
+
createDeploySuccessResponse({ deploymentId, status: "pending" })
|
|
53
|
+
);
|
|
54
|
+
}),
|
|
55
|
+
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());
|
|
62
|
+
})
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
37
66
|
describe("deployToMain", () => {
|
|
38
|
-
it("successfully deploys resources", async () => {
|
|
39
|
-
|
|
40
|
-
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
41
|
-
return HttpResponse.json(
|
|
42
|
-
createBuildSuccessResponse({
|
|
43
|
-
buildId: "deploy-abc",
|
|
44
|
-
newPipes: ["top_events"],
|
|
45
|
-
newDatasources: ["events"],
|
|
46
|
-
})
|
|
47
|
-
);
|
|
48
|
-
})
|
|
49
|
-
);
|
|
67
|
+
it("successfully deploys resources with full flow", async () => {
|
|
68
|
+
setupSuccessfulDeployFlow("deploy-abc");
|
|
50
69
|
|
|
51
|
-
const result = await deployToMain(config, resources);
|
|
70
|
+
const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
52
71
|
|
|
53
72
|
expect(result.success).toBe(true);
|
|
54
73
|
expect(result.result).toBe("success");
|
|
55
74
|
expect(result.buildId).toBe("deploy-abc");
|
|
56
75
|
expect(result.datasourceCount).toBe(1);
|
|
57
76
|
expect(result.pipeCount).toBe(1);
|
|
58
|
-
expect(result.pipes?.created).toEqual(["top_events"]);
|
|
59
|
-
expect(result.datasources?.created).toEqual(["events"]);
|
|
60
77
|
});
|
|
61
78
|
|
|
62
|
-
it("
|
|
79
|
+
it("polls until deployment is ready", async () => {
|
|
80
|
+
let pollCount = 0;
|
|
81
|
+
|
|
63
82
|
server.use(
|
|
64
83
|
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
65
|
-
return HttpResponse.json(
|
|
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());
|
|
66
98
|
})
|
|
67
99
|
);
|
|
68
100
|
|
|
69
|
-
const result = await deployToMain(config, resources);
|
|
101
|
+
const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
70
102
|
|
|
71
103
|
expect(result.success).toBe(true);
|
|
72
|
-
expect(
|
|
104
|
+
expect(pollCount).toBe(3);
|
|
73
105
|
});
|
|
74
106
|
|
|
75
107
|
it("handles deploy failure with single error", async () => {
|
|
@@ -146,31 +178,68 @@ describe("Deploy API", () => {
|
|
|
146
178
|
server.use(
|
|
147
179
|
http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
148
180
|
capturedUrl = request.url;
|
|
149
|
-
return HttpResponse.json(
|
|
181
|
+
return HttpResponse.json(
|
|
182
|
+
createDeploySuccessResponse({ deploymentId: "deploy-url-test" })
|
|
183
|
+
);
|
|
184
|
+
}),
|
|
185
|
+
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());
|
|
150
192
|
})
|
|
151
193
|
);
|
|
152
194
|
|
|
153
|
-
await deployToMain(config, resources);
|
|
195
|
+
await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
154
196
|
|
|
155
|
-
|
|
197
|
+
const parsed = new URL(capturedUrl ?? "");
|
|
198
|
+
expect(parsed.pathname).toBe("/v1/deploy");
|
|
199
|
+
expect(parsed.searchParams.get("from")).toBe("ts-sdk");
|
|
156
200
|
});
|
|
157
201
|
|
|
158
|
-
it("
|
|
202
|
+
it("handles failed deployment status", async () => {
|
|
159
203
|
server.use(
|
|
160
204
|
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
161
205
|
return HttpResponse.json(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
206
|
+
createDeploySuccessResponse({ deploymentId: "deploy-fail", status: "pending" })
|
|
207
|
+
);
|
|
208
|
+
}),
|
|
209
|
+
http.get(`${BASE_URL}/v1/deployments/deploy-fail`, () => {
|
|
210
|
+
return HttpResponse.json(
|
|
211
|
+
createDeploymentStatusResponse({ deploymentId: "deploy-fail", status: "failed" })
|
|
166
212
|
);
|
|
167
213
|
})
|
|
168
214
|
);
|
|
169
215
|
|
|
170
|
-
const result = await deployToMain(config, resources);
|
|
216
|
+
const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
171
217
|
|
|
172
|
-
expect(result.
|
|
173
|
-
expect(result.
|
|
218
|
+
expect(result.success).toBe(false);
|
|
219
|
+
expect(result.error).toContain("Deployment failed with status: failed");
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it("handles set-live failure", async () => {
|
|
223
|
+
server.use(
|
|
224
|
+
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
225
|
+
return HttpResponse.json(
|
|
226
|
+
createDeploySuccessResponse({ deploymentId: "deploy-setlive-fail" })
|
|
227
|
+
);
|
|
228
|
+
}),
|
|
229
|
+
http.get(`${BASE_URL}/v1/deployments/deploy-setlive-fail`, () => {
|
|
230
|
+
return HttpResponse.json(
|
|
231
|
+
createDeploymentStatusResponse({ deploymentId: "deploy-setlive-fail", status: "data_ready" })
|
|
232
|
+
);
|
|
233
|
+
}),
|
|
234
|
+
http.post(`${BASE_URL}/v1/deployments/deploy-setlive-fail/set-live`, () => {
|
|
235
|
+
return HttpResponse.json({ error: "Set live failed" }, { status: 500 });
|
|
236
|
+
})
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
240
|
+
|
|
241
|
+
expect(result.success).toBe(false);
|
|
242
|
+
expect(result.error).toContain("Failed to set deployment as live");
|
|
174
243
|
});
|
|
175
244
|
|
|
176
245
|
it("normalizes baseUrl with trailing slash", async () => {
|
|
@@ -179,16 +248,52 @@ describe("Deploy API", () => {
|
|
|
179
248
|
server.use(
|
|
180
249
|
http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
181
250
|
capturedUrl = request.url;
|
|
182
|
-
return HttpResponse.json(
|
|
251
|
+
return HttpResponse.json(
|
|
252
|
+
createDeploySuccessResponse({ deploymentId: "deploy-slash" })
|
|
253
|
+
);
|
|
254
|
+
}),
|
|
255
|
+
http.get(`${BASE_URL}/v1/deployments/deploy-slash`, () => {
|
|
256
|
+
return HttpResponse.json(
|
|
257
|
+
createDeploymentStatusResponse({ deploymentId: "deploy-slash", status: "data_ready" })
|
|
258
|
+
);
|
|
259
|
+
}),
|
|
260
|
+
http.post(`${BASE_URL}/v1/deployments/deploy-slash/set-live`, () => {
|
|
261
|
+
return HttpResponse.json(createSetLiveSuccessResponse());
|
|
183
262
|
})
|
|
184
263
|
);
|
|
185
264
|
|
|
186
265
|
await deployToMain(
|
|
187
266
|
{ ...config, baseUrl: `${BASE_URL}/` },
|
|
188
|
-
resources
|
|
267
|
+
resources,
|
|
268
|
+
{ pollIntervalMs: 1 }
|
|
189
269
|
);
|
|
190
270
|
|
|
191
|
-
|
|
271
|
+
const parsed = new URL(capturedUrl ?? "");
|
|
272
|
+
expect(parsed.pathname).toBe("/v1/deploy");
|
|
273
|
+
expect(parsed.searchParams.get("from")).toBe("ts-sdk");
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
it("times out when deployment never becomes ready", async () => {
|
|
277
|
+
server.use(
|
|
278
|
+
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
279
|
+
return HttpResponse.json(
|
|
280
|
+
createDeploySuccessResponse({ deploymentId: "deploy-timeout", status: "pending" })
|
|
281
|
+
);
|
|
282
|
+
}),
|
|
283
|
+
http.get(`${BASE_URL}/v1/deployments/deploy-timeout`, () => {
|
|
284
|
+
return HttpResponse.json(
|
|
285
|
+
createDeploymentStatusResponse({ deploymentId: "deploy-timeout", status: "pending" })
|
|
286
|
+
);
|
|
287
|
+
})
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
const result = await deployToMain(config, resources, {
|
|
291
|
+
pollIntervalMs: 1,
|
|
292
|
+
maxPollAttempts: 3,
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
expect(result.success).toBe(false);
|
|
296
|
+
expect(result.error).toContain("Deployment timed out");
|
|
192
297
|
});
|
|
193
298
|
});
|
|
194
299
|
});
|