@tinybirdco/sdk 0.0.21 → 0.0.22
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/client/base.d.ts +36 -5
- package/dist/client/base.d.ts.map +1 -1
- package/dist/client/base.js +64 -18
- package/dist/client/base.js.map +1 -1
- package/dist/client/base.test.d.ts +2 -0
- package/dist/client/base.test.d.ts.map +1 -0
- package/dist/client/base.test.js +104 -0
- package/dist/client/base.test.js.map +1 -0
- package/dist/client/types.d.ts +16 -0
- package/dist/client/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client/base.test.ts +129 -0
- package/src/client/base.ts +68 -18
- package/src/client/types.ts +17 -0
- package/src/index.ts +1 -0
package/dist/client/base.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tinybird client for querying pipes and ingesting events
|
|
3
3
|
*/
|
|
4
|
-
import type { ClientConfig, QueryResult, IngestResult, QueryOptions, IngestOptions } from "./types.js";
|
|
4
|
+
import type { ClientConfig, ClientContext, QueryResult, IngestResult, QueryOptions, IngestOptions } from "./types.js";
|
|
5
5
|
/**
|
|
6
6
|
* Tinybird API client
|
|
7
7
|
*
|
|
@@ -33,17 +33,26 @@ import type { ClientConfig, QueryResult, IngestResult, QueryOptions, IngestOptio
|
|
|
33
33
|
export declare class TinybirdClient {
|
|
34
34
|
private readonly config;
|
|
35
35
|
private readonly apisByToken;
|
|
36
|
-
private
|
|
37
|
-
private
|
|
36
|
+
private contextPromise;
|
|
37
|
+
private resolvedContext;
|
|
38
38
|
constructor(config: ClientConfig);
|
|
39
39
|
/**
|
|
40
40
|
* Get the effective token, resolving branch token in dev mode if needed
|
|
41
41
|
*/
|
|
42
42
|
private getToken;
|
|
43
43
|
/**
|
|
44
|
-
* Resolve the branch token in dev mode
|
|
44
|
+
* Resolve the client context, including branch token resolution in dev mode
|
|
45
|
+
* This is the single source of truth for all context data
|
|
45
46
|
*/
|
|
46
|
-
private
|
|
47
|
+
private resolveContext;
|
|
48
|
+
/**
|
|
49
|
+
* Build the client context from resolved token info
|
|
50
|
+
*/
|
|
51
|
+
private buildContext;
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the branch context in dev mode
|
|
54
|
+
*/
|
|
55
|
+
private resolveBranchContext;
|
|
47
56
|
/**
|
|
48
57
|
* Query a pipe endpoint
|
|
49
58
|
*
|
|
@@ -79,6 +88,28 @@ export declare class TinybirdClient {
|
|
|
79
88
|
* @returns Query result
|
|
80
89
|
*/
|
|
81
90
|
sql<T = unknown>(sql: string, options?: QueryOptions): Promise<QueryResult<T>>;
|
|
91
|
+
/**
|
|
92
|
+
* Get the current client context
|
|
93
|
+
*
|
|
94
|
+
* Returns information about the resolved configuration including the token being used,
|
|
95
|
+
* API URL, dev mode status, and branch information.
|
|
96
|
+
*
|
|
97
|
+
* @returns Client context with resolved configuration
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const client = createClient({
|
|
102
|
+
* baseUrl: 'https://api.tinybird.co',
|
|
103
|
+
* token: process.env.TINYBIRD_TOKEN,
|
|
104
|
+
* devMode: true,
|
|
105
|
+
* });
|
|
106
|
+
*
|
|
107
|
+
* const context = await client.getContext();
|
|
108
|
+
* console.log(context.branchName); // 'feature_my_branch'
|
|
109
|
+
* console.log(context.isBranchToken); // true
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
getContext(): Promise<ClientContext>;
|
|
82
113
|
private getApi;
|
|
83
114
|
private rethrowApiError;
|
|
84
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AAapB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AAapB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,eAAe,CAA8B;gBAEzC,MAAM,EAAE,YAAY;IAgBhC;;OAEG;YACW,QAAQ;IAKtB;;;OAGG;YACW,cAAc;IAwB5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;YACW,oBAAoB;IAsClC;;;;;;;OAOG;IACG,KAAK,CAAC,CAAC,GAAG,OAAO,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAU1B;;;;;;;OAOG;IACG,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,CAAC,EACR,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC;IAIxB;;;;;;;OAOG;IACG,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjD,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,CAAC,EAAE,EACX,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC;IAUxB;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAU1B;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAI1C,OAAO,CAAC,MAAM;IAiBd,OAAO,CAAC,eAAe;CAWxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAEjE"}
|
package/dist/client/base.js
CHANGED
|
@@ -34,8 +34,8 @@ import { TinybirdApi, TinybirdApiError } from "../api/api.js";
|
|
|
34
34
|
export class TinybirdClient {
|
|
35
35
|
config;
|
|
36
36
|
apisByToken = new Map();
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
contextPromise = null;
|
|
38
|
+
resolvedContext = null;
|
|
39
39
|
constructor(config) {
|
|
40
40
|
// Validate required config
|
|
41
41
|
if (!config.baseUrl) {
|
|
@@ -54,27 +54,49 @@ export class TinybirdClient {
|
|
|
54
54
|
* Get the effective token, resolving branch token in dev mode if needed
|
|
55
55
|
*/
|
|
56
56
|
async getToken() {
|
|
57
|
+
const context = await this.resolveContext();
|
|
58
|
+
return context.token;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolve the client context, including branch token resolution in dev mode
|
|
62
|
+
* This is the single source of truth for all context data
|
|
63
|
+
*/
|
|
64
|
+
async resolveContext() {
|
|
57
65
|
// If already resolved, return it
|
|
58
|
-
if (this.
|
|
59
|
-
return this.
|
|
66
|
+
if (this.resolvedContext) {
|
|
67
|
+
return this.resolvedContext;
|
|
60
68
|
}
|
|
61
69
|
// If not in dev mode, use the configured token
|
|
62
70
|
if (!this.config.devMode) {
|
|
63
|
-
this.
|
|
64
|
-
|
|
71
|
+
this.resolvedContext = this.buildContext({
|
|
72
|
+
token: this.config.token,
|
|
73
|
+
isBranchToken: false,
|
|
74
|
+
});
|
|
75
|
+
return this.resolvedContext;
|
|
65
76
|
}
|
|
66
77
|
// In dev mode, lazily resolve the branch token
|
|
67
|
-
if (!this.
|
|
68
|
-
this.
|
|
78
|
+
if (!this.contextPromise) {
|
|
79
|
+
this.contextPromise = this.resolveBranchContext();
|
|
69
80
|
}
|
|
70
|
-
|
|
71
|
-
this.
|
|
72
|
-
|
|
81
|
+
this.resolvedContext = await this.contextPromise;
|
|
82
|
+
return this.resolvedContext;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Build the client context from resolved token info
|
|
86
|
+
*/
|
|
87
|
+
buildContext(tokenInfo) {
|
|
88
|
+
return {
|
|
89
|
+
token: tokenInfo.token,
|
|
90
|
+
baseUrl: this.config.baseUrl,
|
|
91
|
+
devMode: this.config.devMode ?? false,
|
|
92
|
+
isBranchToken: tokenInfo.isBranchToken,
|
|
93
|
+
branchName: tokenInfo.branchName ?? null,
|
|
94
|
+
};
|
|
73
95
|
}
|
|
74
96
|
/**
|
|
75
|
-
* Resolve the branch
|
|
97
|
+
* Resolve the branch context in dev mode
|
|
76
98
|
*/
|
|
77
|
-
async
|
|
99
|
+
async resolveBranchContext() {
|
|
78
100
|
try {
|
|
79
101
|
// Dynamic import to avoid circular dependencies and to keep CLI code
|
|
80
102
|
// out of the client bundle when not using dev mode
|
|
@@ -83,24 +105,24 @@ export class TinybirdClient {
|
|
|
83
105
|
const config = loadConfig();
|
|
84
106
|
// If on main branch, use the workspace token
|
|
85
107
|
if (config.isMainBranch || !config.tinybirdBranch) {
|
|
86
|
-
return { token: this.config.token, isBranchToken: false };
|
|
108
|
+
return this.buildContext({ token: this.config.token, isBranchToken: false });
|
|
87
109
|
}
|
|
88
110
|
const branchName = config.tinybirdBranch;
|
|
89
111
|
// Get or create branch (always fetch fresh to avoid stale cache issues)
|
|
90
112
|
const branch = await getOrCreateBranch({ baseUrl: this.config.baseUrl, token: this.config.token }, branchName);
|
|
91
113
|
if (!branch.token) {
|
|
92
114
|
// Fall back to workspace token if no branch token
|
|
93
|
-
return { token: this.config.token, isBranchToken: false };
|
|
115
|
+
return this.buildContext({ token: this.config.token, isBranchToken: false });
|
|
94
116
|
}
|
|
95
|
-
return {
|
|
117
|
+
return this.buildContext({
|
|
96
118
|
token: branch.token,
|
|
97
119
|
isBranchToken: true,
|
|
98
120
|
branchName,
|
|
99
|
-
};
|
|
121
|
+
});
|
|
100
122
|
}
|
|
101
123
|
catch {
|
|
102
124
|
// If anything fails, fall back to the workspace token
|
|
103
|
-
return { token: this.config.token, isBranchToken: false };
|
|
125
|
+
return this.buildContext({ token: this.config.token, isBranchToken: false });
|
|
104
126
|
}
|
|
105
127
|
}
|
|
106
128
|
/**
|
|
@@ -164,6 +186,30 @@ export class TinybirdClient {
|
|
|
164
186
|
this.rethrowApiError(error);
|
|
165
187
|
}
|
|
166
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* Get the current client context
|
|
191
|
+
*
|
|
192
|
+
* Returns information about the resolved configuration including the token being used,
|
|
193
|
+
* API URL, dev mode status, and branch information.
|
|
194
|
+
*
|
|
195
|
+
* @returns Client context with resolved configuration
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```ts
|
|
199
|
+
* const client = createClient({
|
|
200
|
+
* baseUrl: 'https://api.tinybird.co',
|
|
201
|
+
* token: process.env.TINYBIRD_TOKEN,
|
|
202
|
+
* devMode: true,
|
|
203
|
+
* });
|
|
204
|
+
*
|
|
205
|
+
* const context = await client.getContext();
|
|
206
|
+
* console.log(context.branchName); // 'feature_my_branch'
|
|
207
|
+
* console.log(context.isBranchToken); // true
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
async getContext() {
|
|
211
|
+
return this.resolveContext();
|
|
212
|
+
}
|
|
167
213
|
getApi(token) {
|
|
168
214
|
const existing = this.apisByToken.get(token);
|
|
169
215
|
if (existing) {
|
package/dist/client/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.test.d.ts","sourceRoot":"","sources":["../../src/client/base.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { TinybirdClient, createClient } from "./base.js";
|
|
3
|
+
describe("TinybirdClient", () => {
|
|
4
|
+
describe("constructor", () => {
|
|
5
|
+
it("throws error when baseUrl is missing", () => {
|
|
6
|
+
expect(() => new TinybirdClient({ baseUrl: "", token: "test-token" })).toThrow("baseUrl is required");
|
|
7
|
+
});
|
|
8
|
+
it("throws error when token is missing", () => {
|
|
9
|
+
expect(() => new TinybirdClient({ baseUrl: "https://api.tinybird.co", token: "" })).toThrow("token is required");
|
|
10
|
+
});
|
|
11
|
+
it("creates client with valid config", () => {
|
|
12
|
+
const client = new TinybirdClient({
|
|
13
|
+
baseUrl: "https://api.tinybird.co",
|
|
14
|
+
token: "test-token",
|
|
15
|
+
});
|
|
16
|
+
expect(client).toBeInstanceOf(TinybirdClient);
|
|
17
|
+
});
|
|
18
|
+
it("normalizes baseUrl by removing trailing slash", async () => {
|
|
19
|
+
const client = new TinybirdClient({
|
|
20
|
+
baseUrl: "https://api.tinybird.co/",
|
|
21
|
+
token: "test-token",
|
|
22
|
+
});
|
|
23
|
+
const context = await client.getContext();
|
|
24
|
+
expect(context.baseUrl).toBe("https://api.tinybird.co");
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe("getContext", () => {
|
|
28
|
+
it("returns correct context in non-devMode", async () => {
|
|
29
|
+
const client = new TinybirdClient({
|
|
30
|
+
baseUrl: "https://api.tinybird.co",
|
|
31
|
+
token: "test-token",
|
|
32
|
+
});
|
|
33
|
+
const context = await client.getContext();
|
|
34
|
+
expect(context).toEqual({
|
|
35
|
+
token: "test-token",
|
|
36
|
+
baseUrl: "https://api.tinybird.co",
|
|
37
|
+
devMode: false,
|
|
38
|
+
isBranchToken: false,
|
|
39
|
+
branchName: null,
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
it("returns devMode: false when devMode is not set", async () => {
|
|
43
|
+
const client = new TinybirdClient({
|
|
44
|
+
baseUrl: "https://api.tinybird.co",
|
|
45
|
+
token: "test-token",
|
|
46
|
+
});
|
|
47
|
+
const context = await client.getContext();
|
|
48
|
+
expect(context.devMode).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
it("returns isBranchToken: false when not in devMode", async () => {
|
|
51
|
+
const client = new TinybirdClient({
|
|
52
|
+
baseUrl: "https://api.tinybird.co",
|
|
53
|
+
token: "test-token",
|
|
54
|
+
});
|
|
55
|
+
const context = await client.getContext();
|
|
56
|
+
expect(context.isBranchToken).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it("returns branchName: null when not in devMode", async () => {
|
|
59
|
+
const client = new TinybirdClient({
|
|
60
|
+
baseUrl: "https://api.tinybird.co",
|
|
61
|
+
token: "test-token",
|
|
62
|
+
});
|
|
63
|
+
const context = await client.getContext();
|
|
64
|
+
expect(context.branchName).toBeNull();
|
|
65
|
+
});
|
|
66
|
+
it("caches the resolved context", async () => {
|
|
67
|
+
const client = new TinybirdClient({
|
|
68
|
+
baseUrl: "https://api.tinybird.co",
|
|
69
|
+
token: "test-token",
|
|
70
|
+
});
|
|
71
|
+
const context1 = await client.getContext();
|
|
72
|
+
const context2 = await client.getContext();
|
|
73
|
+
expect(context1).toBe(context2);
|
|
74
|
+
});
|
|
75
|
+
it("works with different baseUrl regions", async () => {
|
|
76
|
+
const client = new TinybirdClient({
|
|
77
|
+
baseUrl: "https://api.us-east.tinybird.co",
|
|
78
|
+
token: "us-token",
|
|
79
|
+
});
|
|
80
|
+
const context = await client.getContext();
|
|
81
|
+
expect(context.baseUrl).toBe("https://api.us-east.tinybird.co");
|
|
82
|
+
expect(context.token).toBe("us-token");
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe("createClient", () => {
|
|
86
|
+
it("creates a TinybirdClient instance", () => {
|
|
87
|
+
const client = createClient({
|
|
88
|
+
baseUrl: "https://api.tinybird.co",
|
|
89
|
+
token: "test-token",
|
|
90
|
+
});
|
|
91
|
+
expect(client).toBeInstanceOf(TinybirdClient);
|
|
92
|
+
});
|
|
93
|
+
it("passes config to the client correctly", async () => {
|
|
94
|
+
const client = createClient({
|
|
95
|
+
baseUrl: "https://api.tinybird.co",
|
|
96
|
+
token: "my-token",
|
|
97
|
+
});
|
|
98
|
+
const context = await client.getContext();
|
|
99
|
+
expect(context.token).toBe("my-token");
|
|
100
|
+
expect(context.baseUrl).toBe("https://api.tinybird.co");
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=base.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.test.js","sourceRoot":"","sources":["../../src/client/base.test.ts"],"names":[],"mappings":"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"}
|
package/dist/client/types.d.ts
CHANGED
|
@@ -119,6 +119,22 @@ export interface IngestOptions {
|
|
|
119
119
|
/** Wait for the ingestion to complete before returning */
|
|
120
120
|
wait?: boolean;
|
|
121
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Client context information
|
|
124
|
+
* Contains the resolved configuration and state of the client
|
|
125
|
+
*/
|
|
126
|
+
export interface ClientContext {
|
|
127
|
+
/** The resolved token being used for requests (workspace or branch token) */
|
|
128
|
+
token: string;
|
|
129
|
+
/** Tinybird API base URL */
|
|
130
|
+
baseUrl: string;
|
|
131
|
+
/** Whether dev mode is enabled */
|
|
132
|
+
devMode: boolean;
|
|
133
|
+
/** Whether the resolved token is a branch token (vs workspace token) */
|
|
134
|
+
isBranchToken: boolean;
|
|
135
|
+
/** The branch name if using a branch token */
|
|
136
|
+
branchName: string | null;
|
|
137
|
+
}
|
|
122
138
|
/**
|
|
123
139
|
* Base interface for typed pipe endpoints
|
|
124
140
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -74,7 +74,7 @@ export type { ProjectDefinition, ProjectConfig, ProjectClient, TinybirdClientCon
|
|
|
74
74
|
export type { Infer, InferRow, InferParams, InferOutput, InferOutputRow, InferEvent, PartialRow, InferSchema, InferTinybirdTypes, InferMaterializedTarget, InferMaterializedTargetRow, IsMaterializedPipe, } from "./infer/index.js";
|
|
75
75
|
export { TinybirdClient, createClient } from "./client/base.js";
|
|
76
76
|
export { TinybirdError } from "./client/types.js";
|
|
77
|
-
export type { ClientConfig, QueryResult, IngestResult, QueryOptions, IngestOptions, ColumnMeta, QueryStatistics, TinybirdErrorResponse, TypedPipeEndpoint, TypedDatasourceIngest, } from "./client/types.js";
|
|
77
|
+
export type { ClientConfig, ClientContext, QueryResult, IngestResult, QueryOptions, IngestOptions, ColumnMeta, QueryStatistics, TinybirdErrorResponse, TypedPipeEndpoint, TypedDatasourceIngest, } from "./client/types.js";
|
|
78
78
|
export { TinybirdApi, TinybirdApiError, createTinybirdApi, createTinybirdApiWrapper, } from "./api/api.js";
|
|
79
79
|
export type { TinybirdApiConfig, TinybirdApiQueryOptions, TinybirdApiIngestOptions, TinybirdApiRequestInit, } from "./api/api.js";
|
|
80
80
|
export { isPreviewEnvironment, getPreviewBranchName, resolveToken, clearTokenCache, } from "./client/preview.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5F,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,GACnC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5I,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACvI,YAAY,EACV,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,IAAI,EACJ,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,OAAO,EACP,GAAG,GACJ,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,eAAe,EACf,UAAU,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACzJ,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,SAAS,GACV,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,KAAK,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,yCAAyC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAQtC,OAAO,EACL,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,4CAA4C;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAMvC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,kDAAkD;AAClD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAY5F,uCAAuC;AACvC,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAa5I,uCAAuC;AACvC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AASvI,kCAAkC;AAClC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAOnE,iCAAiC;AACjC,OAAO,EACL,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,IAAI,EACJ,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,OAAO,EACP,GAAG,GACJ,MAAM,kBAAkB,CAAC;AAqB1B,oCAAoC;AACpC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AA8BzJ,mCAAmC;AACnC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,yCAAyC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAQtC,OAAO,EACL,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,4CAA4C;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAMvC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,kDAAkD;AAClD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAY5F,uCAAuC;AACvC,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAa5I,uCAAuC;AACvC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AASvI,kCAAkC;AAClC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAOnE,iCAAiC;AACjC,OAAO,EACL,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,IAAI,EACJ,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,OAAO,EACP,GAAG,GACJ,MAAM,kBAAkB,CAAC;AAqB1B,oCAAoC;AACpC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AA8BzJ,mCAAmC;AACnC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAelD,gDAAgD;AAChD,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAQtB,gDAAgD;AAChD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,oDAAoD;AACpD,OAAO,EACL,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { TinybirdClient, createClient } from "./base.js";
|
|
3
|
+
|
|
4
|
+
describe("TinybirdClient", () => {
|
|
5
|
+
describe("constructor", () => {
|
|
6
|
+
it("throws error when baseUrl is missing", () => {
|
|
7
|
+
expect(() => new TinybirdClient({ baseUrl: "", token: "test-token" })).toThrow(
|
|
8
|
+
"baseUrl is required"
|
|
9
|
+
);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it("throws error when token is missing", () => {
|
|
13
|
+
expect(
|
|
14
|
+
() => new TinybirdClient({ baseUrl: "https://api.tinybird.co", token: "" })
|
|
15
|
+
).toThrow("token is required");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("creates client with valid config", () => {
|
|
19
|
+
const client = new TinybirdClient({
|
|
20
|
+
baseUrl: "https://api.tinybird.co",
|
|
21
|
+
token: "test-token",
|
|
22
|
+
});
|
|
23
|
+
expect(client).toBeInstanceOf(TinybirdClient);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("normalizes baseUrl by removing trailing slash", async () => {
|
|
27
|
+
const client = new TinybirdClient({
|
|
28
|
+
baseUrl: "https://api.tinybird.co/",
|
|
29
|
+
token: "test-token",
|
|
30
|
+
});
|
|
31
|
+
const context = await client.getContext();
|
|
32
|
+
expect(context.baseUrl).toBe("https://api.tinybird.co");
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe("getContext", () => {
|
|
37
|
+
it("returns correct context in non-devMode", async () => {
|
|
38
|
+
const client = new TinybirdClient({
|
|
39
|
+
baseUrl: "https://api.tinybird.co",
|
|
40
|
+
token: "test-token",
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const context = await client.getContext();
|
|
44
|
+
|
|
45
|
+
expect(context).toEqual({
|
|
46
|
+
token: "test-token",
|
|
47
|
+
baseUrl: "https://api.tinybird.co",
|
|
48
|
+
devMode: false,
|
|
49
|
+
isBranchToken: false,
|
|
50
|
+
branchName: null,
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("returns devMode: false when devMode is not set", async () => {
|
|
55
|
+
const client = new TinybirdClient({
|
|
56
|
+
baseUrl: "https://api.tinybird.co",
|
|
57
|
+
token: "test-token",
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
const context = await client.getContext();
|
|
61
|
+
expect(context.devMode).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("returns isBranchToken: false when not in devMode", async () => {
|
|
65
|
+
const client = new TinybirdClient({
|
|
66
|
+
baseUrl: "https://api.tinybird.co",
|
|
67
|
+
token: "test-token",
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const context = await client.getContext();
|
|
71
|
+
expect(context.isBranchToken).toBe(false);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("returns branchName: null when not in devMode", async () => {
|
|
75
|
+
const client = new TinybirdClient({
|
|
76
|
+
baseUrl: "https://api.tinybird.co",
|
|
77
|
+
token: "test-token",
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const context = await client.getContext();
|
|
81
|
+
expect(context.branchName).toBeNull();
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("caches the resolved context", async () => {
|
|
85
|
+
const client = new TinybirdClient({
|
|
86
|
+
baseUrl: "https://api.tinybird.co",
|
|
87
|
+
token: "test-token",
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
const context1 = await client.getContext();
|
|
91
|
+
const context2 = await client.getContext();
|
|
92
|
+
|
|
93
|
+
expect(context1).toBe(context2);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("works with different baseUrl regions", async () => {
|
|
97
|
+
const client = new TinybirdClient({
|
|
98
|
+
baseUrl: "https://api.us-east.tinybird.co",
|
|
99
|
+
token: "us-token",
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const context = await client.getContext();
|
|
103
|
+
expect(context.baseUrl).toBe("https://api.us-east.tinybird.co");
|
|
104
|
+
expect(context.token).toBe("us-token");
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
describe("createClient", () => {
|
|
109
|
+
it("creates a TinybirdClient instance", () => {
|
|
110
|
+
const client = createClient({
|
|
111
|
+
baseUrl: "https://api.tinybird.co",
|
|
112
|
+
token: "test-token",
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
expect(client).toBeInstanceOf(TinybirdClient);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("passes config to the client correctly", async () => {
|
|
119
|
+
const client = createClient({
|
|
120
|
+
baseUrl: "https://api.tinybird.co",
|
|
121
|
+
token: "my-token",
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
const context = await client.getContext();
|
|
125
|
+
expect(context.token).toBe("my-token");
|
|
126
|
+
expect(context.baseUrl).toBe("https://api.tinybird.co");
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
package/src/client/base.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import type {
|
|
6
6
|
ClientConfig,
|
|
7
|
+
ClientContext,
|
|
7
8
|
QueryResult,
|
|
8
9
|
IngestResult,
|
|
9
10
|
QueryOptions,
|
|
@@ -52,8 +53,8 @@ interface ResolvedTokenInfo {
|
|
|
52
53
|
export class TinybirdClient {
|
|
53
54
|
private readonly config: ClientConfig;
|
|
54
55
|
private readonly apisByToken = new Map<string, TinybirdApi>();
|
|
55
|
-
private
|
|
56
|
-
private
|
|
56
|
+
private contextPromise: Promise<ClientContext> | null = null;
|
|
57
|
+
private resolvedContext: ClientContext | null = null;
|
|
57
58
|
|
|
58
59
|
constructor(config: ClientConfig) {
|
|
59
60
|
// Validate required config
|
|
@@ -75,31 +76,55 @@ export class TinybirdClient {
|
|
|
75
76
|
* Get the effective token, resolving branch token in dev mode if needed
|
|
76
77
|
*/
|
|
77
78
|
private async getToken(): Promise<string> {
|
|
79
|
+
const context = await this.resolveContext();
|
|
80
|
+
return context.token;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Resolve the client context, including branch token resolution in dev mode
|
|
85
|
+
* This is the single source of truth for all context data
|
|
86
|
+
*/
|
|
87
|
+
private async resolveContext(): Promise<ClientContext> {
|
|
78
88
|
// If already resolved, return it
|
|
79
|
-
if (this.
|
|
80
|
-
return this.
|
|
89
|
+
if (this.resolvedContext) {
|
|
90
|
+
return this.resolvedContext;
|
|
81
91
|
}
|
|
82
92
|
|
|
83
93
|
// If not in dev mode, use the configured token
|
|
84
94
|
if (!this.config.devMode) {
|
|
85
|
-
this.
|
|
86
|
-
|
|
95
|
+
this.resolvedContext = this.buildContext({
|
|
96
|
+
token: this.config.token,
|
|
97
|
+
isBranchToken: false,
|
|
98
|
+
});
|
|
99
|
+
return this.resolvedContext;
|
|
87
100
|
}
|
|
88
101
|
|
|
89
102
|
// In dev mode, lazily resolve the branch token
|
|
90
|
-
if (!this.
|
|
91
|
-
this.
|
|
103
|
+
if (!this.contextPromise) {
|
|
104
|
+
this.contextPromise = this.resolveBranchContext();
|
|
92
105
|
}
|
|
93
106
|
|
|
94
|
-
|
|
95
|
-
this.
|
|
96
|
-
|
|
107
|
+
this.resolvedContext = await this.contextPromise;
|
|
108
|
+
return this.resolvedContext;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Build the client context from resolved token info
|
|
113
|
+
*/
|
|
114
|
+
private buildContext(tokenInfo: ResolvedTokenInfo): ClientContext {
|
|
115
|
+
return {
|
|
116
|
+
token: tokenInfo.token,
|
|
117
|
+
baseUrl: this.config.baseUrl,
|
|
118
|
+
devMode: this.config.devMode ?? false,
|
|
119
|
+
isBranchToken: tokenInfo.isBranchToken,
|
|
120
|
+
branchName: tokenInfo.branchName ?? null,
|
|
121
|
+
};
|
|
97
122
|
}
|
|
98
123
|
|
|
99
124
|
/**
|
|
100
|
-
* Resolve the branch
|
|
125
|
+
* Resolve the branch context in dev mode
|
|
101
126
|
*/
|
|
102
|
-
private async
|
|
127
|
+
private async resolveBranchContext(): Promise<ClientContext> {
|
|
103
128
|
try {
|
|
104
129
|
// Dynamic import to avoid circular dependencies and to keep CLI code
|
|
105
130
|
// out of the client bundle when not using dev mode
|
|
@@ -110,7 +135,7 @@ export class TinybirdClient {
|
|
|
110
135
|
|
|
111
136
|
// If on main branch, use the workspace token
|
|
112
137
|
if (config.isMainBranch || !config.tinybirdBranch) {
|
|
113
|
-
return { token: this.config.token, isBranchToken: false };
|
|
138
|
+
return this.buildContext({ token: this.config.token, isBranchToken: false });
|
|
114
139
|
}
|
|
115
140
|
|
|
116
141
|
const branchName = config.tinybirdBranch;
|
|
@@ -123,17 +148,17 @@ export class TinybirdClient {
|
|
|
123
148
|
|
|
124
149
|
if (!branch.token) {
|
|
125
150
|
// Fall back to workspace token if no branch token
|
|
126
|
-
return { token: this.config.token, isBranchToken: false };
|
|
151
|
+
return this.buildContext({ token: this.config.token, isBranchToken: false });
|
|
127
152
|
}
|
|
128
153
|
|
|
129
|
-
return {
|
|
154
|
+
return this.buildContext({
|
|
130
155
|
token: branch.token,
|
|
131
156
|
isBranchToken: true,
|
|
132
157
|
branchName,
|
|
133
|
-
};
|
|
158
|
+
});
|
|
134
159
|
} catch {
|
|
135
160
|
// If anything fails, fall back to the workspace token
|
|
136
|
-
return { token: this.config.token, isBranchToken: false };
|
|
161
|
+
return this.buildContext({ token: this.config.token, isBranchToken: false });
|
|
137
162
|
}
|
|
138
163
|
}
|
|
139
164
|
|
|
@@ -217,6 +242,31 @@ export class TinybirdClient {
|
|
|
217
242
|
}
|
|
218
243
|
}
|
|
219
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Get the current client context
|
|
247
|
+
*
|
|
248
|
+
* Returns information about the resolved configuration including the token being used,
|
|
249
|
+
* API URL, dev mode status, and branch information.
|
|
250
|
+
*
|
|
251
|
+
* @returns Client context with resolved configuration
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* ```ts
|
|
255
|
+
* const client = createClient({
|
|
256
|
+
* baseUrl: 'https://api.tinybird.co',
|
|
257
|
+
* token: process.env.TINYBIRD_TOKEN,
|
|
258
|
+
* devMode: true,
|
|
259
|
+
* });
|
|
260
|
+
*
|
|
261
|
+
* const context = await client.getContext();
|
|
262
|
+
* console.log(context.branchName); // 'feature_my_branch'
|
|
263
|
+
* console.log(context.isBranchToken); // true
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
async getContext(): Promise<ClientContext> {
|
|
267
|
+
return this.resolveContext();
|
|
268
|
+
}
|
|
269
|
+
|
|
220
270
|
private getApi(token: string): TinybirdApi {
|
|
221
271
|
const existing = this.apisByToken.get(token);
|
|
222
272
|
if (existing) {
|
package/src/client/types.ts
CHANGED
|
@@ -147,6 +147,23 @@ export interface IngestOptions {
|
|
|
147
147
|
wait?: boolean;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
+
/**
|
|
151
|
+
* Client context information
|
|
152
|
+
* Contains the resolved configuration and state of the client
|
|
153
|
+
*/
|
|
154
|
+
export interface ClientContext {
|
|
155
|
+
/** The resolved token being used for requests (workspace or branch token) */
|
|
156
|
+
token: string;
|
|
157
|
+
/** Tinybird API base URL */
|
|
158
|
+
baseUrl: string;
|
|
159
|
+
/** Whether dev mode is enabled */
|
|
160
|
+
devMode: boolean;
|
|
161
|
+
/** Whether the resolved token is a branch token (vs workspace token) */
|
|
162
|
+
isBranchToken: boolean;
|
|
163
|
+
/** The branch name if using a branch token */
|
|
164
|
+
branchName: string | null;
|
|
165
|
+
}
|
|
166
|
+
|
|
150
167
|
/**
|
|
151
168
|
* Base interface for typed pipe endpoints
|
|
152
169
|
*/
|
package/src/index.ts
CHANGED