@tinybirdco/sdk 0.0.3 → 0.0.4

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/dist/cli/index.js CHANGED
@@ -115,13 +115,25 @@ function createCli() {
115
115
  .description("Build and push resources to Tinybird")
116
116
  .option("--dry-run", "Generate without pushing to API")
117
117
  .option("--debug", "Show debug output including API requests/responses")
118
+ .option("--local", "Use local Tinybird container")
119
+ .option("--branch", "Use Tinybird cloud with branches")
118
120
  .action(async (options) => {
119
121
  if (options.debug) {
120
122
  process.env.TINYBIRD_DEBUG = "1";
121
123
  }
122
- console.log(`[${formatTime()}] Building...\n`);
124
+ // Determine devMode override
125
+ let devModeOverride;
126
+ if (options.local) {
127
+ devModeOverride = "local";
128
+ }
129
+ else if (options.branch) {
130
+ devModeOverride = "branch";
131
+ }
132
+ const modeLabel = devModeOverride === "local" ? " (local)" : "";
133
+ console.log(`[${formatTime()}] Building${modeLabel}...\n`);
123
134
  const result = await runBuild({
124
135
  dryRun: options.dryRun,
136
+ devModeOverride,
125
137
  });
126
138
  if (!result.success) {
127
139
  console.error(`Error: ${result.error}`);
@@ -161,11 +173,22 @@ function createCli() {
161
173
  program
162
174
  .command("dev")
163
175
  .description("Watch for changes and sync with Tinybird")
164
- .action(async () => {
176
+ .option("--local", "Use local Tinybird container")
177
+ .option("--branch", "Use Tinybird cloud with branches")
178
+ .action(async (options) => {
179
+ // Determine devMode override
180
+ let devModeOverride;
181
+ if (options.local) {
182
+ devModeOverride = "local";
183
+ }
184
+ else if (options.branch) {
185
+ devModeOverride = "branch";
186
+ }
165
187
  console.log(`tinybird dev v${VERSION}`);
166
188
  console.log("Loading config from tinybird.json...\n");
167
189
  try {
168
190
  const controller = await runDev({
191
+ devModeOverride,
169
192
  onLoginComplete: (info) => {
170
193
  console.log("\nAuthentication successful!");
171
194
  if (info.workspaceName) {
@@ -177,7 +200,20 @@ function createCli() {
177
200
  console.log("");
178
201
  },
179
202
  onBranchReady: (info) => {
180
- if (info.isMainBranch) {
203
+ if (info.isLocal) {
204
+ // Local mode
205
+ const workspaceName = info.localWorkspace?.name ?? "unknown";
206
+ if (info.wasCreated) {
207
+ console.log(`Using local Tinybird container`);
208
+ console.log(`Creating local workspace '${workspaceName}'...`);
209
+ console.log("Workspace created.\n");
210
+ }
211
+ else {
212
+ console.log(`Using local Tinybird container`);
213
+ console.log(`Using existing local workspace '${workspaceName}'\n`);
214
+ }
215
+ }
216
+ else if (info.isMainBranch) {
181
217
  console.log("On main branch - deploying to workspace\n");
182
218
  }
183
219
  else if (info.gitBranch) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.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.3",
3
+ "version": "0.0.4",
4
4
  "description": "TypeScript SDK for Tinybird Forward - define datasources and pipes as TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -0,0 +1,250 @@
1
+ import { describe, it, expect, beforeAll, afterEach, afterAll } from "vitest";
2
+ import { setupServer } from "msw/node";
3
+ import { http, HttpResponse } from "msw";
4
+ import {
5
+ getLocalTokens,
6
+ listLocalWorkspaces,
7
+ createLocalWorkspace,
8
+ getOrCreateLocalWorkspace,
9
+ isLocalRunning,
10
+ getLocalWorkspaceName,
11
+ LocalNotRunningError,
12
+ LocalApiError,
13
+ } from "./local.js";
14
+ import { LOCAL_BASE_URL } from "../cli/config.js";
15
+
16
+ const server = setupServer();
17
+
18
+ beforeAll(() => server.listen({ onUnhandledRequest: "error" }));
19
+ afterEach(() => server.resetHandlers());
20
+ afterAll(() => server.close());
21
+
22
+ describe("Local API", () => {
23
+ describe("isLocalRunning", () => {
24
+ it("returns true when local container is running", async () => {
25
+ server.use(
26
+ http.get(`${LOCAL_BASE_URL}/tokens`, () => {
27
+ return HttpResponse.json({
28
+ user_token: "user-token",
29
+ admin_token: "admin-token",
30
+ workspace_admin_token: "workspace-token",
31
+ });
32
+ })
33
+ );
34
+
35
+ const result = await isLocalRunning();
36
+ expect(result).toBe(true);
37
+ });
38
+
39
+ it("returns false when local container is not running", async () => {
40
+ server.use(
41
+ http.get(`${LOCAL_BASE_URL}/tokens`, () => {
42
+ return HttpResponse.error();
43
+ })
44
+ );
45
+
46
+ const result = await isLocalRunning();
47
+ expect(result).toBe(false);
48
+ });
49
+ });
50
+
51
+ describe("getLocalTokens", () => {
52
+ it("returns tokens from local container", async () => {
53
+ server.use(
54
+ http.get(`${LOCAL_BASE_URL}/tokens`, () => {
55
+ return HttpResponse.json({
56
+ user_token: "user-token-123",
57
+ admin_token: "admin-token-456",
58
+ workspace_admin_token: "workspace-token-789",
59
+ });
60
+ })
61
+ );
62
+
63
+ const tokens = await getLocalTokens();
64
+
65
+ expect(tokens.user_token).toBe("user-token-123");
66
+ expect(tokens.admin_token).toBe("admin-token-456");
67
+ expect(tokens.workspace_admin_token).toBe("workspace-token-789");
68
+ });
69
+
70
+ it("throws LocalNotRunningError when container is not running", async () => {
71
+ server.use(
72
+ http.get(`${LOCAL_BASE_URL}/tokens`, () => {
73
+ return HttpResponse.error();
74
+ })
75
+ );
76
+
77
+ await expect(getLocalTokens()).rejects.toThrow(LocalNotRunningError);
78
+ });
79
+
80
+ it("throws LocalApiError when response is invalid", async () => {
81
+ server.use(
82
+ http.get(`${LOCAL_BASE_URL}/tokens`, () => {
83
+ return HttpResponse.json({
84
+ // Missing required fields
85
+ user_token: "user-token",
86
+ });
87
+ })
88
+ );
89
+
90
+ await expect(getLocalTokens()).rejects.toThrow(LocalApiError);
91
+ });
92
+ });
93
+
94
+ describe("listLocalWorkspaces", () => {
95
+ it("returns list of workspaces", async () => {
96
+ server.use(
97
+ http.get(`${LOCAL_BASE_URL}/v1/user/workspaces`, () => {
98
+ return HttpResponse.json({
99
+ organization_id: "org-123",
100
+ workspaces: [
101
+ { id: "ws-1", name: "Workspace1", token: "token-1" },
102
+ { id: "ws-2", name: "Workspace2", token: "token-2" },
103
+ ],
104
+ });
105
+ })
106
+ );
107
+
108
+ const result = await listLocalWorkspaces("admin-token");
109
+
110
+ expect(result.organizationId).toBe("org-123");
111
+ expect(result.workspaces).toHaveLength(2);
112
+ expect(result.workspaces[0]).toEqual({
113
+ id: "ws-1",
114
+ name: "Workspace1",
115
+ token: "token-1",
116
+ });
117
+ });
118
+
119
+ it("throws LocalApiError on failure", async () => {
120
+ server.use(
121
+ http.get(`${LOCAL_BASE_URL}/v1/user/workspaces`, () => {
122
+ return new HttpResponse("Not found", { status: 404 });
123
+ })
124
+ );
125
+
126
+ await expect(listLocalWorkspaces("admin-token")).rejects.toThrow(LocalApiError);
127
+ });
128
+ });
129
+
130
+ describe("createLocalWorkspace", () => {
131
+ it("creates a new workspace", async () => {
132
+ server.use(
133
+ http.post(`${LOCAL_BASE_URL}/v1/workspaces`, async ({ request }) => {
134
+ const formData = await request.text();
135
+ const params = new URLSearchParams(formData);
136
+ return HttpResponse.json({
137
+ id: "new-ws-id",
138
+ name: params.get("name"),
139
+ token: "new-ws-token",
140
+ });
141
+ })
142
+ );
143
+
144
+ const result = await createLocalWorkspace("user-token", "TestWorkspace");
145
+
146
+ expect(result.id).toBe("new-ws-id");
147
+ expect(result.name).toBe("TestWorkspace");
148
+ expect(result.token).toBe("new-ws-token");
149
+ });
150
+
151
+ it("throws LocalApiError on failure", async () => {
152
+ server.use(
153
+ http.post(`${LOCAL_BASE_URL}/v1/workspaces`, () => {
154
+ return new HttpResponse("Server error", { status: 500 });
155
+ })
156
+ );
157
+
158
+ await expect(createLocalWorkspace("user-token", "TestWorkspace")).rejects.toThrow(
159
+ LocalApiError
160
+ );
161
+ });
162
+ });
163
+
164
+ describe("getOrCreateLocalWorkspace", () => {
165
+ const tokens = {
166
+ user_token: "user-token",
167
+ admin_token: "admin-token",
168
+ workspace_admin_token: "default-token",
169
+ };
170
+
171
+ it("returns existing workspace if found", async () => {
172
+ server.use(
173
+ http.get(`${LOCAL_BASE_URL}/v1/user/workspaces`, () => {
174
+ return HttpResponse.json({
175
+ organization_id: "org-123",
176
+ workspaces: [
177
+ { id: "existing-ws", name: "MyWorkspace", token: "existing-token" },
178
+ ],
179
+ });
180
+ })
181
+ );
182
+
183
+ const result = await getOrCreateLocalWorkspace(tokens, "MyWorkspace");
184
+
185
+ expect(result.wasCreated).toBe(false);
186
+ expect(result.workspace.name).toBe("MyWorkspace");
187
+ expect(result.workspace.token).toBe("existing-token");
188
+ });
189
+
190
+ it("creates new workspace if not found", async () => {
191
+ let createCalled = false;
192
+
193
+ server.use(
194
+ http.get(`${LOCAL_BASE_URL}/v1/user/workspaces`, () => {
195
+ // Return different response based on whether create was called
196
+ if (createCalled) {
197
+ return HttpResponse.json({
198
+ organization_id: "org-123",
199
+ workspaces: [
200
+ { id: "new-ws", name: "NewWorkspace", token: "new-token" },
201
+ ],
202
+ });
203
+ }
204
+ return HttpResponse.json({
205
+ organization_id: "org-123",
206
+ workspaces: [], // Empty initially
207
+ });
208
+ }),
209
+ http.post(`${LOCAL_BASE_URL}/v1/workspaces`, () => {
210
+ createCalled = true;
211
+ return HttpResponse.json({
212
+ id: "new-ws",
213
+ name: "NewWorkspace",
214
+ token: "new-token",
215
+ });
216
+ })
217
+ );
218
+
219
+ const result = await getOrCreateLocalWorkspace(tokens, "NewWorkspace");
220
+
221
+ expect(result.wasCreated).toBe(true);
222
+ expect(result.workspace.name).toBe("NewWorkspace");
223
+ expect(result.workspace.token).toBe("new-token");
224
+ });
225
+ });
226
+
227
+ describe("getLocalWorkspaceName", () => {
228
+ it("uses branch name when available", () => {
229
+ const name = getLocalWorkspaceName("feature_branch", "/some/path");
230
+ expect(name).toBe("feature_branch");
231
+ });
232
+
233
+ it("uses hash-based name when no branch", () => {
234
+ const name = getLocalWorkspaceName(null, "/some/path");
235
+ expect(name).toMatch(/^Build_[a-f0-9]{16}$/);
236
+ });
237
+
238
+ it("generates consistent hash for same path", () => {
239
+ const name1 = getLocalWorkspaceName(null, "/same/path");
240
+ const name2 = getLocalWorkspaceName(null, "/same/path");
241
+ expect(name1).toBe(name2);
242
+ });
243
+
244
+ it("generates different hash for different paths", () => {
245
+ const name1 = getLocalWorkspaceName(null, "/path/one");
246
+ const name2 = getLocalWorkspaceName(null, "/path/two");
247
+ expect(name1).not.toBe(name2);
248
+ });
249
+ });
250
+ });
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Local Tinybird container API client
3
+ * For use with tinybird-local Docker image
4
+ */
5
+
6
+ import * as crypto from "crypto";
7
+ import { LOCAL_BASE_URL } from "../cli/config.js";
8
+
9
+ /**
10
+ * Tokens returned by the local /tokens endpoint
11
+ */
12
+ export interface LocalTokens {
13
+ /** User token for user-level operations */
14
+ user_token: string;
15
+ /** Admin token for admin operations like listing workspaces */
16
+ admin_token: string;
17
+ /** Default workspace admin token */
18
+ workspace_admin_token: string;
19
+ }
20
+
21
+ /**
22
+ * Workspace info from local Tinybird
23
+ */
24
+ export interface LocalWorkspace {
25
+ /** Workspace ID */
26
+ id: string;
27
+ /** Workspace name */
28
+ name: string;
29
+ /** Workspace token */
30
+ token: string;
31
+ }
32
+
33
+ /**
34
+ * Response from /v1/user/workspaces endpoint
35
+ */
36
+ interface UserWorkspacesResponse {
37
+ organization_id?: string;
38
+ workspaces: Array<{
39
+ id: string;
40
+ name: string;
41
+ token: string;
42
+ }>;
43
+ }
44
+
45
+ /**
46
+ * Error thrown when local container is not running
47
+ */
48
+ export class LocalNotRunningError extends Error {
49
+ constructor() {
50
+ super(
51
+ `Tinybird local is not running. Start it with:\n` +
52
+ `docker run -d -p 7181:7181 --name tinybird-local tinybirdco/tinybird-local:latest`
53
+ );
54
+ this.name = "LocalNotRunningError";
55
+ }
56
+ }
57
+
58
+ /**
59
+ * Error thrown by local API operations
60
+ */
61
+ export class LocalApiError extends Error {
62
+ constructor(
63
+ message: string,
64
+ public readonly status?: number,
65
+ public readonly body?: unknown
66
+ ) {
67
+ super(message);
68
+ this.name = "LocalApiError";
69
+ }
70
+ }
71
+
72
+ /**
73
+ * Check if local Tinybird container is running
74
+ *
75
+ * @returns true if container is running and healthy
76
+ */
77
+ export async function isLocalRunning(): Promise<boolean> {
78
+ try {
79
+ const response = await fetch(`${LOCAL_BASE_URL}/tokens`, {
80
+ method: "GET",
81
+ signal: AbortSignal.timeout(5000),
82
+ });
83
+ return response.ok;
84
+ } catch {
85
+ return false;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Get tokens from local Tinybird container
91
+ *
92
+ * @returns Local tokens
93
+ * @throws LocalNotRunningError if container is not running
94
+ */
95
+ export async function getLocalTokens(): Promise<LocalTokens> {
96
+ try {
97
+ const response = await fetch(`${LOCAL_BASE_URL}/tokens`, {
98
+ method: "GET",
99
+ signal: AbortSignal.timeout(5000),
100
+ });
101
+
102
+ if (!response.ok) {
103
+ throw new LocalApiError(
104
+ `Failed to get local tokens: ${response.status} ${response.statusText}`,
105
+ response.status
106
+ );
107
+ }
108
+
109
+ const tokens = (await response.json()) as LocalTokens;
110
+
111
+ // Validate response structure
112
+ if (!tokens.user_token || !tokens.admin_token || !tokens.workspace_admin_token) {
113
+ throw new LocalApiError(
114
+ "Invalid tokens response from local Tinybird - missing required fields"
115
+ );
116
+ }
117
+
118
+ return tokens;
119
+ } catch (error) {
120
+ if (error instanceof LocalApiError) {
121
+ throw error;
122
+ }
123
+ // Connection error - container not running
124
+ throw new LocalNotRunningError();
125
+ }
126
+ }
127
+
128
+ /**
129
+ * List workspaces in local Tinybird
130
+ *
131
+ * @param adminToken - Admin token from getLocalTokens()
132
+ * @returns List of workspaces with their info
133
+ */
134
+ export async function listLocalWorkspaces(
135
+ adminToken: string
136
+ ): Promise<{ workspaces: LocalWorkspace[]; organizationId?: string }> {
137
+ const url = `${LOCAL_BASE_URL}/v1/user/workspaces?with_organization=true&token=${adminToken}`;
138
+
139
+ const response = await fetch(url, {
140
+ method: "GET",
141
+ });
142
+
143
+ if (!response.ok) {
144
+ const body = await response.text();
145
+ throw new LocalApiError(
146
+ `Failed to list local workspaces: ${response.status} ${response.statusText}`,
147
+ response.status,
148
+ body
149
+ );
150
+ }
151
+
152
+ const data = (await response.json()) as UserWorkspacesResponse;
153
+
154
+ return {
155
+ workspaces: data.workspaces.map((ws) => ({
156
+ id: ws.id,
157
+ name: ws.name,
158
+ token: ws.token,
159
+ })),
160
+ organizationId: data.organization_id,
161
+ };
162
+ }
163
+
164
+ /**
165
+ * Create a workspace in local Tinybird
166
+ *
167
+ * @param userToken - User token from getLocalTokens()
168
+ * @param workspaceName - Name for the new workspace
169
+ * @param organizationId - Organization ID to assign workspace to
170
+ * @returns Created workspace info
171
+ */
172
+ export async function createLocalWorkspace(
173
+ userToken: string,
174
+ workspaceName: string,
175
+ organizationId?: string
176
+ ): Promise<LocalWorkspace> {
177
+ const url = `${LOCAL_BASE_URL}/v1/workspaces`;
178
+
179
+ const formData = new URLSearchParams();
180
+ formData.append("name", workspaceName);
181
+ if (organizationId) {
182
+ formData.append("assign_to_organization_id", organizationId);
183
+ }
184
+
185
+ const response = await fetch(url, {
186
+ method: "POST",
187
+ headers: {
188
+ Authorization: `Bearer ${userToken}`,
189
+ "Content-Type": "application/x-www-form-urlencoded",
190
+ },
191
+ body: formData.toString(),
192
+ });
193
+
194
+ if (!response.ok) {
195
+ const responseBody = await response.text();
196
+ throw new LocalApiError(
197
+ `Failed to create local workspace: ${response.status} ${response.statusText}`,
198
+ response.status,
199
+ responseBody
200
+ );
201
+ }
202
+
203
+ const data = (await response.json()) as { id: string; name: string; token: string };
204
+
205
+ return {
206
+ id: data.id,
207
+ name: data.name,
208
+ token: data.token,
209
+ };
210
+ }
211
+
212
+ /**
213
+ * Get or create a workspace in local Tinybird
214
+ *
215
+ * @param tokens - Tokens from getLocalTokens()
216
+ * @param workspaceName - Name of the workspace to get or create
217
+ * @returns Workspace info and whether it was newly created
218
+ */
219
+ export async function getOrCreateLocalWorkspace(
220
+ tokens: LocalTokens,
221
+ workspaceName: string
222
+ ): Promise<{ workspace: LocalWorkspace; wasCreated: boolean }> {
223
+ // List existing workspaces
224
+ const { workspaces, organizationId } = await listLocalWorkspaces(tokens.admin_token);
225
+
226
+ // Check if workspace already exists
227
+ const existing = workspaces.find((ws) => ws.name === workspaceName);
228
+ if (existing) {
229
+ return { workspace: existing, wasCreated: false };
230
+ }
231
+
232
+ // Create new workspace
233
+ await createLocalWorkspace(
234
+ tokens.user_token,
235
+ workspaceName,
236
+ organizationId
237
+ );
238
+
239
+ // Fetch the workspace again to get the token (create response may not include it)
240
+ const { workspaces: updatedWorkspaces } = await listLocalWorkspaces(tokens.admin_token);
241
+ const newWorkspace = updatedWorkspaces.find((ws) => ws.name === workspaceName);
242
+
243
+ if (!newWorkspace) {
244
+ throw new LocalApiError(
245
+ `Created workspace '${workspaceName}' but could not find it in workspace list`
246
+ );
247
+ }
248
+
249
+ return { workspace: newWorkspace, wasCreated: true };
250
+ }
251
+
252
+ /**
253
+ * Get workspace name for local mode based on git branch or path
254
+ *
255
+ * @param tinybirdBranch - Sanitized git branch name (or null if not in git)
256
+ * @param cwd - Current working directory (used for hash if no branch)
257
+ * @returns Workspace name to use
258
+ */
259
+ export function getLocalWorkspaceName(
260
+ tinybirdBranch: string | null,
261
+ cwd: string
262
+ ): string {
263
+ if (tinybirdBranch) {
264
+ return tinybirdBranch;
265
+ }
266
+
267
+ // No branch detected - use hash of path like Python implementation
268
+ const hash = crypto.createHash("sha256").update(cwd).digest("hex");
269
+ return `Build_${hash.substring(0, 16)}`;
270
+ }