@tinybirdco/sdk 0.0.36 → 0.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +50 -1
  2. package/dist/api/api.d.ts +66 -1
  3. package/dist/api/api.d.ts.map +1 -1
  4. package/dist/api/api.js +114 -0
  5. package/dist/api/api.js.map +1 -1
  6. package/dist/api/api.test.js +192 -0
  7. package/dist/api/api.test.js.map +1 -1
  8. package/dist/api/tokens.d.ts +79 -0
  9. package/dist/api/tokens.d.ts.map +1 -0
  10. package/dist/api/tokens.js +80 -0
  11. package/dist/api/tokens.js.map +1 -0
  12. package/dist/api/tokens.test.d.ts +2 -0
  13. package/dist/api/tokens.test.d.ts.map +1 -0
  14. package/dist/api/tokens.test.js +209 -0
  15. package/dist/api/tokens.test.js.map +1 -0
  16. package/dist/cli/commands/init.d.ts +2 -0
  17. package/dist/cli/commands/init.d.ts.map +1 -1
  18. package/dist/cli/commands/init.js +2 -3
  19. package/dist/cli/commands/init.js.map +1 -1
  20. package/dist/client/base.d.ts +29 -1
  21. package/dist/client/base.d.ts.map +1 -1
  22. package/dist/client/base.js +44 -0
  23. package/dist/client/base.js.map +1 -1
  24. package/dist/client/base.test.js +25 -0
  25. package/dist/client/base.test.js.map +1 -1
  26. package/dist/client/tokens.d.ts +42 -0
  27. package/dist/client/tokens.d.ts.map +1 -0
  28. package/dist/client/tokens.js +67 -0
  29. package/dist/client/tokens.js.map +1 -0
  30. package/dist/client/tokens.test.d.ts +2 -0
  31. package/dist/client/tokens.test.d.ts.map +1 -0
  32. package/dist/client/tokens.test.js +79 -0
  33. package/dist/client/tokens.test.js.map +1 -0
  34. package/dist/client/types.d.ts +49 -0
  35. package/dist/client/types.d.ts.map +1 -1
  36. package/dist/index.d.ts +4 -2
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +2 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/schema/project.d.ts +40 -12
  41. package/dist/schema/project.d.ts.map +1 -1
  42. package/dist/schema/project.js +67 -13
  43. package/dist/schema/project.js.map +1 -1
  44. package/dist/schema/project.test.js +63 -10
  45. package/dist/schema/project.test.js.map +1 -1
  46. package/package.json +1 -1
  47. package/src/api/api.test.ts +265 -0
  48. package/src/api/api.ts +196 -0
  49. package/src/api/tokens.test.ts +253 -0
  50. package/src/api/tokens.ts +169 -0
  51. package/src/cli/commands/init.ts +5 -3
  52. package/src/client/base.test.ts +32 -0
  53. package/src/client/base.ts +60 -0
  54. package/src/client/tokens.test.ts +103 -0
  55. package/src/client/tokens.ts +69 -0
  56. package/src/client/types.ts +54 -0
  57. package/src/index.ts +20 -0
  58. package/src/schema/project.test.ts +75 -10
  59. package/src/schema/project.ts +134 -27
@@ -61,9 +61,16 @@ export function isProjectDefinition(value) {
61
61
  /**
62
62
  * Build a typed Tinybird client from datasources and pipes
63
63
  *
64
- * This is an internal helper that builds query/ingest methods.
64
+ * This is an internal helper that builds pipe query and datasource ingest methods.
65
65
  */
66
66
  function buildProjectClient(datasources, pipes, options) {
67
+ const RESERVED_CLIENT_NAMES = new Set([
68
+ "ingest",
69
+ "tokens",
70
+ "datasources",
71
+ "sql",
72
+ "client",
73
+ ]);
67
74
  // Lazy client initialization
68
75
  let _client = null;
69
76
  const getClient = async () => {
@@ -83,28 +90,44 @@ function buildProjectClient(datasources, pipes, options) {
83
90
  }
84
91
  return _client;
85
92
  };
86
- // Build query methods for pipes
87
- const queryMethods = {};
93
+ // Build pipe accessors with query methods
94
+ const pipeAccessors = {};
88
95
  for (const [name, pipe] of Object.entries(pipes)) {
96
+ if (name in datasources) {
97
+ throw new Error(`Name conflict in createTinybirdClient(): "${name}" is defined as both datasource and pipe. ` +
98
+ `Rename one of them to expose both as top-level client properties.`);
99
+ }
100
+ if (RESERVED_CLIENT_NAMES.has(name)) {
101
+ throw new Error(`Name conflict in createTinybirdClient(): "${name}" is reserved by the client API. ` +
102
+ `Rename this pipe to expose it as a top-level client property.`);
103
+ }
89
104
  const endpointConfig = getEndpointConfig(pipe);
90
105
  if (!endpointConfig) {
91
106
  // Non-endpoint pipes get a stub that throws a clear error
92
- queryMethods[name] = async () => {
93
- throw new Error(`Pipe "${name}" is not exposed as an endpoint. ` +
94
- `Set "endpoint: true" in the pipe definition to enable querying.`);
107
+ pipeAccessors[name] = {
108
+ query: async () => {
109
+ throw new Error(`Pipe "${name}" is not exposed as an endpoint. ` +
110
+ `Set "endpoint: true" in the pipe definition to enable querying.`);
111
+ },
95
112
  };
96
113
  continue;
97
114
  }
98
115
  // Use the Tinybird pipe name (snake_case)
99
116
  const tinybirdName = pipe._name;
100
- queryMethods[name] = async (params) => {
101
- const client = await getClient();
102
- return client.query(tinybirdName, (params ?? {}));
117
+ pipeAccessors[name] = {
118
+ query: async (params) => {
119
+ const client = await getClient();
120
+ return client.query(tinybirdName, (params ?? {}));
121
+ },
103
122
  };
104
123
  }
105
124
  // Build ingest methods for datasources
106
125
  const ingestMethods = {};
107
126
  for (const [name, datasource] of Object.entries(datasources)) {
127
+ if (RESERVED_CLIENT_NAMES.has(name)) {
128
+ throw new Error(`Name conflict in createTinybirdClient(): "${name}" is reserved by the client API. ` +
129
+ `Rename this datasource to expose it as a top-level client property.`);
130
+ }
108
131
  // Use the Tinybird datasource name (snake_case)
109
132
  const tinybirdName = datasource._name;
110
133
  // Single event ingest
@@ -118,10 +141,40 @@ function buildProjectClient(datasources, pipes, options) {
118
141
  await client.ingestBatch(tinybirdName, events);
119
142
  };
120
143
  }
144
+ // Build datasource accessors for top-level access
145
+ const datasourceAccessors = {};
146
+ for (const [name, datasource] of Object.entries(datasources)) {
147
+ const tinybirdName = datasource._name;
148
+ datasourceAccessors[name] = {
149
+ append: async (options) => {
150
+ const client = await getClient();
151
+ return client.datasources.append(tinybirdName, options);
152
+ },
153
+ };
154
+ }
121
155
  // Create the typed client object
122
156
  return {
123
- query: queryMethods,
157
+ ...datasourceAccessors,
158
+ ...pipeAccessors,
124
159
  ingest: ingestMethods,
160
+ sql: async (sql, options = {}) => {
161
+ const client = await getClient();
162
+ return client.sql(sql, options);
163
+ },
164
+ get tokens() {
165
+ // Synchronous access - will throw if not initialized
166
+ if (!_client) {
167
+ throw new Error("Client not initialized. Call a query or ingest method first, or access client asynchronously.");
168
+ }
169
+ return _client.tokens;
170
+ },
171
+ get datasources() {
172
+ // Synchronous access - will throw if not initialized
173
+ if (!_client) {
174
+ throw new Error("Client not initialized. Call a query or ingest method first, or access client asynchronously.");
175
+ }
176
+ return _client.datasources;
177
+ },
125
178
  get client() {
126
179
  // Synchronous client access - will throw if not initialized
127
180
  if (!_client) {
@@ -134,12 +187,13 @@ function buildProjectClient(datasources, pipes, options) {
134
187
  /**
135
188
  * Create a typed Tinybird client
136
189
  *
137
- * Creates a client with typed query and ingest methods based on the provided
190
+ * Creates a client with typed pipe query and datasource ingest methods based on
191
+ * the provided
138
192
  * datasources and pipes. This is the recommended way to create a Tinybird client
139
193
  * when using the SDK's auto-generated client file.
140
194
  *
141
195
  * @param config - Client configuration with datasources and pipes
142
- * @returns A typed client with query and ingest methods
196
+ * @returns A typed client with pipe query and datasource ingest methods
143
197
  *
144
198
  * @example
145
199
  * ```ts
@@ -153,7 +207,7 @@ function buildProjectClient(datasources, pipes, options) {
153
207
  * });
154
208
  *
155
209
  * // Query a pipe (fully typed)
156
- * const result = await tinybird.query.topPages({
210
+ * const result = await tinybird.topPages.query({
157
211
  * start_date: new Date('2024-01-01'),
158
212
  * end_date: new Date('2024-01-31'),
159
213
  * });
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/schema/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/schema/project.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,7 @@ describe("Project Schema", () => {
49
49
  expect(project.datasources.events).toBe(events);
50
50
  expect(project.pipes.topEvents).toBe(topEvents);
51
51
  });
52
- it("creates tinybird client with query and ingest methods", () => {
52
+ it("creates tinybird client with pipe accessors and ingest methods", () => {
53
53
  const events = defineDatasource("events", {
54
54
  schema: { id: t.string() },
55
55
  });
@@ -62,11 +62,37 @@ describe("Project Schema", () => {
62
62
  datasources: { events },
63
63
  pipes: { topEvents },
64
64
  });
65
- expect(project.tinybird.query).toBeDefined();
66
65
  expect(project.tinybird.ingest).toBeDefined();
67
- expect(typeof project.tinybird.query.topEvents).toBe("function");
66
+ expect(typeof project.tinybird.topEvents.query).toBe("function");
68
67
  expect(typeof project.tinybird.ingest.events).toBe("function");
69
68
  expect(typeof project.tinybird.ingest.eventsBatch).toBe("function");
69
+ expect(project.tinybird.query).toBeUndefined();
70
+ expect(project.tinybird.pipes).toBeUndefined();
71
+ });
72
+ it("creates datasource accessors with append method", () => {
73
+ const events = defineDatasource("events", {
74
+ schema: { timestamp: t.dateTime() },
75
+ });
76
+ const project = defineProject({
77
+ datasources: { events },
78
+ });
79
+ expect(project.tinybird.events).toBeDefined();
80
+ expect(typeof project.tinybird.events.append).toBe("function");
81
+ });
82
+ it("creates multiple datasource accessors", () => {
83
+ const events = defineDatasource("events", {
84
+ schema: { timestamp: t.dateTime() },
85
+ });
86
+ const pageViews = defineDatasource("page_views", {
87
+ schema: { pathname: t.string() },
88
+ });
89
+ const project = defineProject({
90
+ datasources: { events, pageViews },
91
+ });
92
+ expect(project.tinybird.events).toBeDefined();
93
+ expect(project.tinybird.pageViews).toBeDefined();
94
+ expect(typeof project.tinybird.events.append).toBe("function");
95
+ expect(typeof project.tinybird.pageViews.append).toBe("function");
70
96
  });
71
97
  it("throws error when accessing client before initialization", () => {
72
98
  const project = defineProject({});
@@ -82,7 +108,7 @@ describe("Project Schema", () => {
82
108
  pipes: { internalPipe },
83
109
  });
84
110
  // Cast to any since the type system expects params but stub throws regardless
85
- const queryFn = project.tinybird.query.internalPipe;
111
+ const queryFn = project.tinybird.internalPipe.query;
86
112
  await expect(queryFn()).rejects.toThrow('Pipe "internalPipe" is not exposed as an endpoint');
87
113
  });
88
114
  });
@@ -184,7 +210,7 @@ describe("Project Schema", () => {
184
210
  afterEach(() => {
185
211
  process.env.NODE_ENV = originalNodeEnv;
186
212
  });
187
- it("creates a client with query and ingest methods", () => {
213
+ it("creates a client with pipe accessors and ingest methods", () => {
188
214
  const events = defineDatasource("events", {
189
215
  schema: { id: t.string() },
190
216
  });
@@ -197,11 +223,41 @@ describe("Project Schema", () => {
197
223
  datasources: { events },
198
224
  pipes: { topEvents },
199
225
  });
200
- expect(client.query).toBeDefined();
201
226
  expect(client.ingest).toBeDefined();
202
- expect(typeof client.query.topEvents).toBe("function");
227
+ expect(client.sql).toBeDefined();
228
+ expect(typeof client.topEvents.query).toBe("function");
203
229
  expect(typeof client.ingest.events).toBe("function");
204
230
  expect(typeof client.ingest.eventsBatch).toBe("function");
231
+ expect(typeof client.sql).toBe("function");
232
+ expect(client.query).toBeUndefined();
233
+ expect(client.pipes).toBeUndefined();
234
+ });
235
+ it("creates datasource accessors with append method", () => {
236
+ const events = defineDatasource("events", {
237
+ schema: { id: t.string() },
238
+ });
239
+ const client = createTinybirdClient({
240
+ datasources: { events },
241
+ pipes: {},
242
+ });
243
+ expect(client.events).toBeDefined();
244
+ expect(typeof client.events.append).toBe("function");
245
+ });
246
+ it("creates multiple datasource accessors", () => {
247
+ const events = defineDatasource("events", {
248
+ schema: { id: t.string() },
249
+ });
250
+ const pageViews = defineDatasource("page_views", {
251
+ schema: { pathname: t.string() },
252
+ });
253
+ const client = createTinybirdClient({
254
+ datasources: { events, pageViews },
255
+ pipes: {},
256
+ });
257
+ expect(client.events).toBeDefined();
258
+ expect(client.pageViews).toBeDefined();
259
+ expect(typeof client.events.append).toBe("function");
260
+ expect(typeof client.pageViews.append).toBe("function");
205
261
  });
206
262
  it("accepts devMode option", () => {
207
263
  const events = defineDatasource("events", {
@@ -213,14 +269,12 @@ describe("Project Schema", () => {
213
269
  pipes: {},
214
270
  devMode: true,
215
271
  });
216
- expect(clientWithDevMode.query).toBeDefined();
217
272
  expect(clientWithDevMode.ingest).toBeDefined();
218
273
  const clientWithoutDevMode = createTinybirdClient({
219
274
  datasources: { events },
220
275
  pipes: {},
221
276
  devMode: false,
222
277
  });
223
- expect(clientWithoutDevMode.query).toBeDefined();
224
278
  expect(clientWithoutDevMode.ingest).toBeDefined();
225
279
  });
226
280
  it("accepts all configuration options", () => {
@@ -236,7 +290,6 @@ describe("Project Schema", () => {
236
290
  configDir: "/custom/config/dir",
237
291
  devMode: true,
238
292
  });
239
- expect(client.query).toBeDefined();
240
293
  expect(client.ingest).toBeDefined();
241
294
  });
242
295
  it("throws error when accessing underlying client before initialization", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"project.test.js","sourceRoot":"","sources":["../../src/schema/project.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.test.js","sourceRoot":"","sources":["../../src/schema/project.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.36",
3
+ "version": "0.0.38",
4
4
  "description": "TypeScript SDK for Tinybird Forward - define datasources and pipes as TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -215,6 +215,49 @@ describe("TinybirdApi", () => {
215
215
  expect(rawSql).toBe("SELECT 1 AS value");
216
216
  });
217
217
 
218
+ it("creates tokens via tinybirdApi.createToken", async () => {
219
+ let expirationTime: string | null = null;
220
+ let fromParam: string | null = null;
221
+ let contentType: string | null = null;
222
+ let parsedBody: Record<string, unknown> | null = null;
223
+
224
+ server.use(
225
+ http.post(`${BASE_URL}/v0/tokens/`, async ({ request }) => {
226
+ const url = new URL(request.url);
227
+ expirationTime = url.searchParams.get("expiration_time");
228
+ fromParam = url.searchParams.get("from");
229
+ contentType = request.headers.get("content-type");
230
+ parsedBody = (await request.json()) as Record<string, unknown>;
231
+
232
+ return HttpResponse.json({
233
+ token: "eyJ.test",
234
+ });
235
+ })
236
+ );
237
+
238
+ const api = createTinybirdApi({
239
+ baseUrl: BASE_URL,
240
+ token: "p.default-token",
241
+ });
242
+
243
+ const result = await api.createToken(
244
+ {
245
+ name: "user_token",
246
+ scopes: [{ type: "PIPES:READ", resource: "pipe_a" }],
247
+ },
248
+ { expirationTime: 1700000000 }
249
+ );
250
+
251
+ expect(result).toEqual({ token: "eyJ.test" });
252
+ expect(expirationTime).toBe("1700000000");
253
+ expect(fromParam).toBe(TINYBIRD_FROM_PARAM);
254
+ expect(contentType).toBe("application/json");
255
+ expect(parsedBody).toEqual({
256
+ name: "user_token",
257
+ scopes: [{ type: "PIPES:READ", resource: "pipe_a" }],
258
+ });
259
+ });
260
+
218
261
  it("returns zero counts for empty ingest batches", async () => {
219
262
  const api = createTinybirdApi({
220
263
  baseUrl: BASE_URL,
@@ -292,4 +335,226 @@ describe("TinybirdApi", () => {
292
335
  },
293
336
  });
294
337
  });
338
+
339
+ describe("appendDatasource", () => {
340
+ it("appends data from URL", async () => {
341
+ let datasourceName: string | null = null;
342
+ let modeParam: string | null = null;
343
+ let formatParam: string | null = null;
344
+ let contentType: string | null = null;
345
+ let requestBody: string | null = null;
346
+
347
+ server.use(
348
+ http.post(`${BASE_URL}/v0/datasources`, async ({ request }) => {
349
+ const url = new URL(request.url);
350
+ datasourceName = url.searchParams.get("name");
351
+ modeParam = url.searchParams.get("mode");
352
+ formatParam = url.searchParams.get("format");
353
+ contentType = request.headers.get("content-type");
354
+ requestBody = await request.text();
355
+
356
+ return HttpResponse.json({
357
+ successful_rows: 100,
358
+ quarantined_rows: 0,
359
+ import_id: "import_123",
360
+ });
361
+ })
362
+ );
363
+
364
+ const api = createTinybirdApi({
365
+ baseUrl: BASE_URL,
366
+ token: "p.default-token",
367
+ });
368
+
369
+ const result = await api.appendDatasource("events", {
370
+ url: "https://example.com/data.csv",
371
+ });
372
+
373
+ expect(result).toEqual({
374
+ successful_rows: 100,
375
+ quarantined_rows: 0,
376
+ import_id: "import_123",
377
+ });
378
+ expect(datasourceName).toBe("events");
379
+ expect(modeParam).toBe("append");
380
+ expect(formatParam).toBe("csv");
381
+ expect(contentType).toBe("application/x-www-form-urlencoded");
382
+ expect(requestBody).toBe("url=https%3A%2F%2Fexample.com%2Fdata.csv");
383
+ });
384
+
385
+ it("detects ndjson format from URL extension", async () => {
386
+ let formatParam: string | null = null;
387
+
388
+ server.use(
389
+ http.post(`${BASE_URL}/v0/datasources`, async ({ request }) => {
390
+ const url = new URL(request.url);
391
+ formatParam = url.searchParams.get("format");
392
+ return HttpResponse.json({ successful_rows: 1, quarantined_rows: 0 });
393
+ })
394
+ );
395
+
396
+ const api = createTinybirdApi({
397
+ baseUrl: BASE_URL,
398
+ token: "p.default-token",
399
+ });
400
+
401
+ await api.appendDatasource("events", {
402
+ url: "https://example.com/data.ndjson",
403
+ });
404
+
405
+ expect(formatParam).toBe("ndjson");
406
+ });
407
+
408
+ it("detects jsonl as ndjson format", async () => {
409
+ let formatParam: string | null = null;
410
+
411
+ server.use(
412
+ http.post(`${BASE_URL}/v0/datasources`, async ({ request }) => {
413
+ const url = new URL(request.url);
414
+ formatParam = url.searchParams.get("format");
415
+ return HttpResponse.json({ successful_rows: 1, quarantined_rows: 0 });
416
+ })
417
+ );
418
+
419
+ const api = createTinybirdApi({
420
+ baseUrl: BASE_URL,
421
+ token: "p.default-token",
422
+ });
423
+
424
+ await api.appendDatasource("events", {
425
+ url: "https://example.com/data.jsonl",
426
+ });
427
+
428
+ expect(formatParam).toBe("ndjson");
429
+ });
430
+
431
+ it("detects parquet format from URL extension", async () => {
432
+ let formatParam: string | null = null;
433
+
434
+ server.use(
435
+ http.post(`${BASE_URL}/v0/datasources`, async ({ request }) => {
436
+ const url = new URL(request.url);
437
+ formatParam = url.searchParams.get("format");
438
+ return HttpResponse.json({ successful_rows: 1, quarantined_rows: 0 });
439
+ })
440
+ );
441
+
442
+ const api = createTinybirdApi({
443
+ baseUrl: BASE_URL,
444
+ token: "p.default-token",
445
+ });
446
+
447
+ await api.appendDatasource("events", {
448
+ url: "https://example.com/data.parquet",
449
+ });
450
+
451
+ expect(formatParam).toBe("parquet");
452
+ });
453
+
454
+ it("strips query string when detecting format", async () => {
455
+ let formatParam: string | null = null;
456
+
457
+ server.use(
458
+ http.post(`${BASE_URL}/v0/datasources`, async ({ request }) => {
459
+ const url = new URL(request.url);
460
+ formatParam = url.searchParams.get("format");
461
+ return HttpResponse.json({ successful_rows: 1, quarantined_rows: 0 });
462
+ })
463
+ );
464
+
465
+ const api = createTinybirdApi({
466
+ baseUrl: BASE_URL,
467
+ token: "p.default-token",
468
+ });
469
+
470
+ await api.appendDatasource("events", {
471
+ url: "https://example.com/data.csv?token=abc",
472
+ });
473
+
474
+ expect(formatParam).toBe("csv");
475
+ });
476
+
477
+ it("includes CSV dialect options", async () => {
478
+ let delimiterParam: string | null = null;
479
+ let newLineParam: string | null = null;
480
+ let escapeCharParam: string | null = null;
481
+
482
+ server.use(
483
+ http.post(`${BASE_URL}/v0/datasources`, async ({ request }) => {
484
+ const url = new URL(request.url);
485
+ delimiterParam = url.searchParams.get("dialect_delimiter");
486
+ newLineParam = url.searchParams.get("dialect_new_line");
487
+ escapeCharParam = url.searchParams.get("dialect_escapechar");
488
+ return HttpResponse.json({ successful_rows: 1, quarantined_rows: 0 });
489
+ })
490
+ );
491
+
492
+ const api = createTinybirdApi({
493
+ baseUrl: BASE_URL,
494
+ token: "p.default-token",
495
+ });
496
+
497
+ await api.appendDatasource("events", {
498
+ url: "https://example.com/data.csv",
499
+ csvDialect: {
500
+ delimiter: ";",
501
+ newLine: "\r\n",
502
+ escapeChar: "\\",
503
+ },
504
+ });
505
+
506
+ expect(delimiterParam).toBe(";");
507
+ expect(newLineParam).toBe("\r\n");
508
+ expect(escapeCharParam).toBe("\\");
509
+ });
510
+
511
+ it("throws error when neither url nor file is provided", async () => {
512
+ const api = createTinybirdApi({
513
+ baseUrl: BASE_URL,
514
+ token: "p.default-token",
515
+ });
516
+
517
+ await expect(api.appendDatasource("events", {})).rejects.toThrow(
518
+ "Either 'url' or 'file' must be provided in options"
519
+ );
520
+ });
521
+
522
+ it("throws error when both url and file are provided", async () => {
523
+ const api = createTinybirdApi({
524
+ baseUrl: BASE_URL,
525
+ token: "p.default-token",
526
+ });
527
+
528
+ await expect(
529
+ api.appendDatasource("events", {
530
+ url: "https://example.com/data.csv",
531
+ file: "./data.csv",
532
+ })
533
+ ).rejects.toThrow("Only one of 'url' or 'file' can be provided, not both");
534
+ });
535
+
536
+ it("allows per-request token override", async () => {
537
+ let authorizationHeader: string | null = null;
538
+
539
+ server.use(
540
+ http.post(`${BASE_URL}/v0/datasources`, async ({ request }) => {
541
+ authorizationHeader = request.headers.get("Authorization");
542
+ return HttpResponse.json({ successful_rows: 1, quarantined_rows: 0 });
543
+ })
544
+ );
545
+
546
+ const api = createTinybirdApi({
547
+ baseUrl: BASE_URL,
548
+ token: "p.default-token",
549
+ });
550
+
551
+ await api.appendDatasource(
552
+ "events",
553
+ { url: "https://example.com/data.csv" },
554
+ { token: "p.override-token" }
555
+ );
556
+
557
+ expect(authorizationHeader).toBe("Bearer p.override-token");
558
+ });
559
+ });
295
560
  });