@tinybirdco/sdk 0.0.9 → 0.0.11
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 +35 -0
- package/dist/generator/datasource.d.ts.map +1 -1
- package/dist/generator/datasource.js +28 -0
- package/dist/generator/datasource.js.map +1 -1
- package/dist/generator/datasource.test.js +65 -0
- package/dist/generator/datasource.test.js.map +1 -1
- package/dist/generator/pipe.d.ts.map +1 -1
- package/dist/generator/pipe.js +24 -2
- package/dist/generator/pipe.js.map +1 -1
- package/dist/generator/pipe.test.js +83 -0
- package/dist/generator/pipe.test.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/schema/datasource.d.ts +18 -3
- package/dist/schema/datasource.d.ts.map +1 -1
- package/dist/schema/datasource.js.map +1 -1
- package/dist/schema/pipe.d.ts +17 -2
- package/dist/schema/pipe.d.ts.map +1 -1
- package/dist/schema/pipe.js.map +1 -1
- package/dist/schema/token.d.ts +49 -0
- package/dist/schema/token.d.ts.map +1 -0
- package/dist/schema/token.js +47 -0
- package/dist/schema/token.js.map +1 -0
- package/dist/schema/token.test.d.ts +2 -0
- package/dist/schema/token.test.d.ts.map +1 -0
- package/dist/schema/token.test.js +50 -0
- package/dist/schema/token.test.js.map +1 -0
- package/package.json +1 -1
- package/src/generator/datasource.test.ts +77 -0
- package/src/generator/datasource.ts +33 -1
- package/src/generator/pipe.test.ts +95 -0
- package/src/generator/pipe.ts +28 -2
- package/src/index.ts +12 -0
- package/src/schema/datasource.ts +20 -3
- package/src/schema/pipe.ts +19 -2
- package/src/schema/token.test.ts +60 -0
- package/src/schema/token.ts +75 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../src/schema/datasource.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../src/schema/datasource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,iEAAiE;AACjE,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAsG3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,OAAmC;IAEnC,sCAAsC;IACtC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,qGAAqG,CACvI,CAAC;IACJ,CAAC;IAED,OAAO;QACL,CAAC,gBAAgB,CAAC,EAAE,IAAI;QACxB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,gBAAgB,IAAI,KAAK;QACxB,KAAiC,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAC9D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAA2C;IACvE,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,OAAO,MAA0B,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA2C;IAC3E,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAe;IAEf,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAsB,CAAC;AAClD,CAAC;AAOD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,MAAM,CACpB,IAAO,EACP,OAA2C;IAE3C,OAAO;QACL,IAAI;QACJ,GAAG,OAAO;KACX,CAAC;AACJ,CAAC"}
|
package/dist/schema/pipe.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import type { AnyTypeValidator } from "./types.js";
|
|
6
6
|
import type { AnyParamValidator } from "./params.js";
|
|
7
7
|
import type { DatasourceDefinition, SchemaDefinition, ColumnDefinition } from "./datasource.js";
|
|
8
|
+
import type { TokenDefinition, PipeTokenScope } from "./token.js";
|
|
8
9
|
/** Symbol for brand typing pipes - use Symbol.for() for global registry */
|
|
9
10
|
export declare const PIPE_BRAND: unique symbol;
|
|
10
11
|
/** Symbol for brand typing nodes - use Symbol.for() for global registry */
|
|
@@ -115,12 +116,26 @@ export interface CopyConfig<TDatasource extends DatasourceDefinition<SchemaDefin
|
|
|
115
116
|
copy_schedule?: string;
|
|
116
117
|
}
|
|
117
118
|
/**
|
|
118
|
-
*
|
|
119
|
+
* Inline token configuration for pipe access
|
|
119
120
|
*/
|
|
120
|
-
export interface
|
|
121
|
+
export interface InlinePipeTokenConfig {
|
|
121
122
|
/** Token name */
|
|
122
123
|
name: string;
|
|
123
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Token reference with pipe-specific scope
|
|
127
|
+
*/
|
|
128
|
+
export interface PipeTokenReference {
|
|
129
|
+
/** The token definition */
|
|
130
|
+
token: TokenDefinition;
|
|
131
|
+
/** Scope for this pipe (READ only) */
|
|
132
|
+
scope: PipeTokenScope;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Token configuration for pipe access.
|
|
136
|
+
* Can be either an inline definition or a reference to a defined token.
|
|
137
|
+
*/
|
|
138
|
+
export type PipeTokenConfig = InlinePipeTokenConfig | PipeTokenReference;
|
|
124
139
|
/**
|
|
125
140
|
* Options for defining a pipe (reusable SQL logic, no endpoint)
|
|
126
141
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../src/schema/pipe.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../src/schema/pipe.ts"],"names":[],"mappings":"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"}
|
package/dist/schema/pipe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../src/schema/pipe.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../src/schema/pipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token definition for Tinybird
|
|
3
|
+
* Define reusable static tokens as TypeScript with full type safety
|
|
4
|
+
*/
|
|
5
|
+
declare const TOKEN_BRAND: unique symbol;
|
|
6
|
+
/**
|
|
7
|
+
* Token scope for datasources
|
|
8
|
+
*/
|
|
9
|
+
export type DatasourceTokenScope = "READ" | "APPEND";
|
|
10
|
+
/**
|
|
11
|
+
* Token scope for pipes (READ only)
|
|
12
|
+
*/
|
|
13
|
+
export type PipeTokenScope = "READ";
|
|
14
|
+
/**
|
|
15
|
+
* A token definition
|
|
16
|
+
*/
|
|
17
|
+
export interface TokenDefinition {
|
|
18
|
+
readonly [TOKEN_BRAND]: true;
|
|
19
|
+
/** Token name */
|
|
20
|
+
readonly _name: string;
|
|
21
|
+
/** Type marker for inference */
|
|
22
|
+
readonly _type: "token";
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Define a static token
|
|
26
|
+
*
|
|
27
|
+
* @param name - The token name (must be valid identifier)
|
|
28
|
+
* @returns A token definition that can be referenced in datasources and pipes
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import { defineToken } from '@tinybirdco/sdk';
|
|
33
|
+
*
|
|
34
|
+
* export const appToken = defineToken('app_read');
|
|
35
|
+
*
|
|
36
|
+
* // Use in datasource
|
|
37
|
+
* const events = defineDatasource('events', {
|
|
38
|
+
* schema: { id: t.string() },
|
|
39
|
+
* tokens: [{ token: appToken, scope: 'READ' }],
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function defineToken(name: string): TokenDefinition;
|
|
44
|
+
/**
|
|
45
|
+
* Check if a value is a token definition
|
|
46
|
+
*/
|
|
47
|
+
export declare function isTokenDefinition(value: unknown): value is TokenDefinition;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/schema/token.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,QAAA,MAAM,WAAW,eAA+B,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;IAC7B,iBAAiB;IACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAazD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAO1E"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token definition for Tinybird
|
|
3
|
+
* Define reusable static tokens as TypeScript with full type safety
|
|
4
|
+
*/
|
|
5
|
+
// Symbol for brand typing - use Symbol.for() for global registry
|
|
6
|
+
// This ensures the same symbol is used across module instances
|
|
7
|
+
const TOKEN_BRAND = Symbol.for("tinybird.token");
|
|
8
|
+
/**
|
|
9
|
+
* Define a static token
|
|
10
|
+
*
|
|
11
|
+
* @param name - The token name (must be valid identifier)
|
|
12
|
+
* @returns A token definition that can be referenced in datasources and pipes
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { defineToken } from '@tinybirdco/sdk';
|
|
17
|
+
*
|
|
18
|
+
* export const appToken = defineToken('app_read');
|
|
19
|
+
*
|
|
20
|
+
* // Use in datasource
|
|
21
|
+
* const events = defineDatasource('events', {
|
|
22
|
+
* schema: { id: t.string() },
|
|
23
|
+
* tokens: [{ token: appToken, scope: 'READ' }],
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function defineToken(name) {
|
|
28
|
+
// Validate name is a valid identifier
|
|
29
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
|
|
30
|
+
throw new Error(`Invalid token name: "${name}". Must start with a letter or underscore and contain only alphanumeric characters and underscores.`);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
[TOKEN_BRAND]: true,
|
|
34
|
+
_name: name,
|
|
35
|
+
_type: "token",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check if a value is a token definition
|
|
40
|
+
*/
|
|
41
|
+
export function isTokenDefinition(value) {
|
|
42
|
+
return (typeof value === "object" &&
|
|
43
|
+
value !== null &&
|
|
44
|
+
TOKEN_BRAND in value &&
|
|
45
|
+
value[TOKEN_BRAND] === true);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/schema/token.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,+DAA+D;AAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAuBjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,sCAAsC;IACtC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,wBAAwB,IAAI,qGAAqG,CAClI,CAAC;IACJ,CAAC;IAED,OAAO;QACL,CAAC,WAAW,CAAC,EAAE,IAAI;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,OAAO;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,WAAW,IAAI,KAAK;QACnB,KAAiC,CAAC,WAAW,CAAC,KAAK,IAAI,CACzD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.test.d.ts","sourceRoot":"","sources":["../../src/schema/token.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { defineToken, isTokenDefinition } from "./token.js";
|
|
3
|
+
describe("Token Schema", () => {
|
|
4
|
+
describe("defineToken", () => {
|
|
5
|
+
it("creates a token with a valid name", () => {
|
|
6
|
+
const token = defineToken("app_read");
|
|
7
|
+
expect(token._name).toBe("app_read");
|
|
8
|
+
expect(token._type).toBe("token");
|
|
9
|
+
});
|
|
10
|
+
it("allows underscores in token names", () => {
|
|
11
|
+
const token = defineToken("my_app_token");
|
|
12
|
+
expect(token._name).toBe("my_app_token");
|
|
13
|
+
});
|
|
14
|
+
it("allows leading underscore in token names", () => {
|
|
15
|
+
const token = defineToken("_private_token");
|
|
16
|
+
expect(token._name).toBe("_private_token");
|
|
17
|
+
});
|
|
18
|
+
it("allows alphanumeric characters in token names", () => {
|
|
19
|
+
const token = defineToken("token_v2");
|
|
20
|
+
expect(token._name).toBe("token_v2");
|
|
21
|
+
});
|
|
22
|
+
it("throws error for invalid token name starting with number", () => {
|
|
23
|
+
expect(() => defineToken("123token")).toThrow("Invalid token name");
|
|
24
|
+
});
|
|
25
|
+
it("throws error for invalid token name with hyphens", () => {
|
|
26
|
+
expect(() => defineToken("my-token")).toThrow("Invalid token name");
|
|
27
|
+
});
|
|
28
|
+
it("throws error for empty token name", () => {
|
|
29
|
+
expect(() => defineToken("")).toThrow("Invalid token name");
|
|
30
|
+
});
|
|
31
|
+
it("throws error for token name with spaces", () => {
|
|
32
|
+
expect(() => defineToken("my token")).toThrow("Invalid token name");
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe("isTokenDefinition", () => {
|
|
36
|
+
it("returns true for valid token", () => {
|
|
37
|
+
const token = defineToken("app_read");
|
|
38
|
+
expect(isTokenDefinition(token)).toBe(true);
|
|
39
|
+
});
|
|
40
|
+
it("returns false for non-token objects", () => {
|
|
41
|
+
expect(isTokenDefinition({})).toBe(false);
|
|
42
|
+
expect(isTokenDefinition(null)).toBe(false);
|
|
43
|
+
expect(isTokenDefinition(undefined)).toBe(false);
|
|
44
|
+
expect(isTokenDefinition("string")).toBe(false);
|
|
45
|
+
expect(isTokenDefinition(123)).toBe(false);
|
|
46
|
+
expect(isTokenDefinition({ _name: "test" })).toBe(false);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=token.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.test.js","sourceRoot":"","sources":["../../src/schema/token.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,6 +2,7 @@ import { describe, it, expect } from 'vitest';
|
|
|
2
2
|
import { generateDatasource, generateAllDatasources } from './datasource.js';
|
|
3
3
|
import { defineDatasource } from '../schema/datasource.js';
|
|
4
4
|
import { createKafkaConnection } from '../schema/connection.js';
|
|
5
|
+
import { defineToken } from '../schema/token.js';
|
|
5
6
|
import { t } from '../schema/types.js';
|
|
6
7
|
import { engine } from '../schema/engines.js';
|
|
7
8
|
|
|
@@ -415,4 +416,80 @@ describe('Datasource Generator', () => {
|
|
|
415
416
|
expect(result.content).toContain('KAFKA_AUTO_OFFSET_RESET earliest');
|
|
416
417
|
});
|
|
417
418
|
});
|
|
419
|
+
|
|
420
|
+
describe('Token generation', () => {
|
|
421
|
+
it('generates TOKEN lines with inline config', () => {
|
|
422
|
+
const ds = defineDatasource('test_ds', {
|
|
423
|
+
schema: { id: t.string() },
|
|
424
|
+
tokens: [{ name: 'app_read', permissions: ['READ'] }],
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
const result = generateDatasource(ds);
|
|
428
|
+
expect(result.content).toContain('TOKEN app_read READ');
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
it('generates TOKEN lines with multiple permissions', () => {
|
|
432
|
+
const ds = defineDatasource('test_ds', {
|
|
433
|
+
schema: { id: t.string() },
|
|
434
|
+
tokens: [{ name: 'app_token', permissions: ['READ', 'APPEND'] }],
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
const result = generateDatasource(ds);
|
|
438
|
+
expect(result.content).toContain('TOKEN app_token READ');
|
|
439
|
+
expect(result.content).toContain('TOKEN app_token APPEND');
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
it('generates TOKEN lines with token reference', () => {
|
|
443
|
+
const appToken = defineToken('my_token');
|
|
444
|
+
const ds = defineDatasource('test_ds', {
|
|
445
|
+
schema: { id: t.string() },
|
|
446
|
+
tokens: [{ token: appToken, scope: 'READ' }],
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
const result = generateDatasource(ds);
|
|
450
|
+
expect(result.content).toContain('TOKEN my_token READ');
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
it('generates TOKEN lines with token reference and APPEND scope', () => {
|
|
454
|
+
const appendToken = defineToken('append_token');
|
|
455
|
+
const ds = defineDatasource('test_ds', {
|
|
456
|
+
schema: { id: t.string() },
|
|
457
|
+
tokens: [{ token: appendToken, scope: 'APPEND' }],
|
|
458
|
+
});
|
|
459
|
+
|
|
460
|
+
const result = generateDatasource(ds);
|
|
461
|
+
expect(result.content).toContain('TOKEN append_token APPEND');
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
it('generates multiple TOKEN lines for multiple tokens', () => {
|
|
465
|
+
const readToken = defineToken('read_token');
|
|
466
|
+
const appendToken = defineToken('append_token');
|
|
467
|
+
const ds = defineDatasource('test_ds', {
|
|
468
|
+
schema: { id: t.string() },
|
|
469
|
+
tokens: [
|
|
470
|
+
{ token: readToken, scope: 'READ' },
|
|
471
|
+
{ token: appendToken, scope: 'APPEND' },
|
|
472
|
+
],
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
const result = generateDatasource(ds);
|
|
476
|
+
expect(result.content).toContain('TOKEN read_token READ');
|
|
477
|
+
expect(result.content).toContain('TOKEN append_token APPEND');
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
it('generates mixed inline and reference tokens', () => {
|
|
481
|
+
const refToken = defineToken('ref_token');
|
|
482
|
+
const ds = defineDatasource('test_ds', {
|
|
483
|
+
schema: { id: t.string() },
|
|
484
|
+
tokens: [
|
|
485
|
+
{ name: 'inline_token', permissions: ['READ'] },
|
|
486
|
+
{ token: refToken, scope: 'APPEND' },
|
|
487
|
+
],
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
const result = generateDatasource(ds);
|
|
491
|
+
expect(result.content).toContain('TOKEN inline_token READ');
|
|
492
|
+
expect(result.content).toContain('TOKEN ref_token APPEND');
|
|
493
|
+
});
|
|
494
|
+
});
|
|
418
495
|
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Converts DatasourceDefinition to native .datasource file format
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { DatasourceDefinition, SchemaDefinition, ColumnDefinition, KafkaConfig } from "../schema/datasource.js";
|
|
6
|
+
import type { DatasourceDefinition, SchemaDefinition, ColumnDefinition, KafkaConfig, TokenConfig } from "../schema/datasource.js";
|
|
7
7
|
import type { AnyTypeValidator, TypeModifiers } from "../schema/types.js";
|
|
8
8
|
import { getColumnType, getColumnJsonPath } from "../schema/datasource.js";
|
|
9
9
|
import { getEngineClause, type EngineConfig } from "../schema/engines.js";
|
|
@@ -180,6 +180,31 @@ function generateForwardQuery(forwardQuery?: string): string | null {
|
|
|
180
180
|
return ["FORWARD_QUERY >", ...lines.map((line) => ` ${line}`)].join("\n");
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
+
/**
|
|
184
|
+
* Generate TOKEN lines for a datasource
|
|
185
|
+
*/
|
|
186
|
+
function generateTokens(tokens?: readonly TokenConfig[]): string[] {
|
|
187
|
+
if (!tokens || tokens.length === 0) {
|
|
188
|
+
return [];
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const lines: string[] = [];
|
|
192
|
+
|
|
193
|
+
for (const token of tokens) {
|
|
194
|
+
if ("token" in token) {
|
|
195
|
+
// TokenReference - single scope
|
|
196
|
+
lines.push(`TOKEN ${token.token._name} ${token.scope}`);
|
|
197
|
+
} else {
|
|
198
|
+
// Inline config - multiple permissions
|
|
199
|
+
for (const permission of token.permissions) {
|
|
200
|
+
lines.push(`TOKEN ${token.name} ${permission}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return lines;
|
|
206
|
+
}
|
|
207
|
+
|
|
183
208
|
/**
|
|
184
209
|
* Generate a .datasource file content from a DatasourceDefinition
|
|
185
210
|
*
|
|
@@ -248,6 +273,13 @@ export function generateDatasource(
|
|
|
248
273
|
parts.push(forwardQuery);
|
|
249
274
|
}
|
|
250
275
|
|
|
276
|
+
// Add tokens if present
|
|
277
|
+
const tokenLines = generateTokens(datasource.options.tokens);
|
|
278
|
+
if (tokenLines.length > 0) {
|
|
279
|
+
parts.push("");
|
|
280
|
+
parts.push(tokenLines.join("\n"));
|
|
281
|
+
}
|
|
282
|
+
|
|
251
283
|
return {
|
|
252
284
|
name: datasource._name,
|
|
253
285
|
content: parts.join("\n"),
|
|
@@ -2,6 +2,7 @@ import { describe, it, expect } from 'vitest';
|
|
|
2
2
|
import { generatePipe, generateAllPipes } from './pipe.js';
|
|
3
3
|
import { definePipe, defineMaterializedView, node } from '../schema/pipe.js';
|
|
4
4
|
import { defineDatasource } from '../schema/datasource.js';
|
|
5
|
+
import { defineToken } from '../schema/token.js';
|
|
5
6
|
import { t } from '../schema/types.js';
|
|
6
7
|
import { p } from '../schema/params.js';
|
|
7
8
|
import { engine } from '../schema/engines.js';
|
|
@@ -130,6 +131,38 @@ describe('Pipe Generator', () => {
|
|
|
130
131
|
const result = generatePipe(pipe);
|
|
131
132
|
expect(result.content).not.toContain('%');
|
|
132
133
|
});
|
|
134
|
+
|
|
135
|
+
it('adds % for SQL with Jinja block syntax {%...%}', () => {
|
|
136
|
+
const pipe = definePipe('test_pipe', {
|
|
137
|
+
nodes: [
|
|
138
|
+
node({
|
|
139
|
+
name: 'endpoint',
|
|
140
|
+
sql: `SELECT * FROM table {% if defined(filter) %} WHERE id = {{Int32(filter)}} {% end %}`,
|
|
141
|
+
}),
|
|
142
|
+
],
|
|
143
|
+
output: simpleOutput,
|
|
144
|
+
endpoint: true,
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
const result = generatePipe(pipe);
|
|
148
|
+
expect(result.content).toContain('SQL >\n %\n SELECT');
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it('adds % for SQL with only Jinja block syntax (no {{...}})', () => {
|
|
152
|
+
const pipe = definePipe('test_pipe', {
|
|
153
|
+
nodes: [
|
|
154
|
+
node({
|
|
155
|
+
name: 'endpoint',
|
|
156
|
+
sql: `SELECT * FROM table {% if true %} LIMIT 10 {% end %}`,
|
|
157
|
+
}),
|
|
158
|
+
],
|
|
159
|
+
output: simpleOutput,
|
|
160
|
+
endpoint: true,
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
const result = generatePipe(pipe);
|
|
164
|
+
expect(result.content).toContain(' %\n');
|
|
165
|
+
});
|
|
133
166
|
});
|
|
134
167
|
|
|
135
168
|
describe('Multiple nodes', () => {
|
|
@@ -438,4 +471,66 @@ GROUP BY day, country
|
|
|
438
471
|
expect(result.content).toContain('DATASOURCE sales_by_hour');
|
|
439
472
|
});
|
|
440
473
|
});
|
|
474
|
+
|
|
475
|
+
describe('Token generation', () => {
|
|
476
|
+
it('generates TOKEN lines with inline config', () => {
|
|
477
|
+
const pipe = definePipe('test_pipe', {
|
|
478
|
+
nodes: [node({ name: 'endpoint', sql: 'SELECT 1' })],
|
|
479
|
+
output: simpleOutput,
|
|
480
|
+
endpoint: true,
|
|
481
|
+
tokens: [{ name: 'app_read' }],
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
const result = generatePipe(pipe);
|
|
485
|
+
expect(result.content).toContain('TOKEN app_read READ');
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
it('generates TOKEN lines with token reference', () => {
|
|
489
|
+
const appToken = defineToken('my_token');
|
|
490
|
+
const pipe = definePipe('test_pipe', {
|
|
491
|
+
nodes: [node({ name: 'endpoint', sql: 'SELECT 1' })],
|
|
492
|
+
output: simpleOutput,
|
|
493
|
+
endpoint: true,
|
|
494
|
+
tokens: [{ token: appToken, scope: 'READ' }],
|
|
495
|
+
});
|
|
496
|
+
|
|
497
|
+
const result = generatePipe(pipe);
|
|
498
|
+
expect(result.content).toContain('TOKEN my_token READ');
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
it('generates multiple TOKEN lines for multiple tokens', () => {
|
|
502
|
+
const token1 = defineToken('token_one');
|
|
503
|
+
const token2 = defineToken('token_two');
|
|
504
|
+
const pipe = definePipe('test_pipe', {
|
|
505
|
+
nodes: [node({ name: 'endpoint', sql: 'SELECT 1' })],
|
|
506
|
+
output: simpleOutput,
|
|
507
|
+
endpoint: true,
|
|
508
|
+
tokens: [
|
|
509
|
+
{ token: token1, scope: 'READ' },
|
|
510
|
+
{ token: token2, scope: 'READ' },
|
|
511
|
+
],
|
|
512
|
+
});
|
|
513
|
+
|
|
514
|
+
const result = generatePipe(pipe);
|
|
515
|
+
expect(result.content).toContain('TOKEN token_one READ');
|
|
516
|
+
expect(result.content).toContain('TOKEN token_two READ');
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
it('generates mixed inline and reference tokens', () => {
|
|
520
|
+
const refToken = defineToken('ref_token');
|
|
521
|
+
const pipe = definePipe('test_pipe', {
|
|
522
|
+
nodes: [node({ name: 'endpoint', sql: 'SELECT 1' })],
|
|
523
|
+
output: simpleOutput,
|
|
524
|
+
endpoint: true,
|
|
525
|
+
tokens: [
|
|
526
|
+
{ name: 'inline_token' },
|
|
527
|
+
{ token: refToken, scope: 'READ' },
|
|
528
|
+
],
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
const result = generatePipe(pipe);
|
|
532
|
+
expect(result.content).toContain('TOKEN inline_token READ');
|
|
533
|
+
expect(result.content).toContain('TOKEN ref_token READ');
|
|
534
|
+
});
|
|
535
|
+
});
|
|
441
536
|
});
|
package/src/generator/pipe.ts
CHANGED
|
@@ -9,6 +9,7 @@ import type {
|
|
|
9
9
|
EndpointConfig,
|
|
10
10
|
MaterializedConfig,
|
|
11
11
|
CopyConfig,
|
|
12
|
+
PipeTokenConfig,
|
|
12
13
|
} from "../schema/pipe.js";
|
|
13
14
|
import { getEndpointConfig, getMaterializedConfig, getCopyConfig } from "../schema/pipe.js";
|
|
14
15
|
|
|
@@ -23,10 +24,10 @@ export interface GeneratedPipe {
|
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
/**
|
|
26
|
-
* Check if SQL contains template
|
|
27
|
+
* Check if SQL contains Jinja template syntax like {{...}} or {%...%}
|
|
27
28
|
*/
|
|
28
29
|
function hasDynamicParameters(sql: string): boolean {
|
|
29
|
-
return /\{\{[^}]+\}\}/.test(sql);
|
|
30
|
+
return /\{\{[^}]+\}\}/.test(sql) || /\{%[^%]+%\}/.test(sql);
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
/**
|
|
@@ -113,6 +114,24 @@ function generateCopy(config: CopyConfig): string {
|
|
|
113
114
|
return parts.join("\n");
|
|
114
115
|
}
|
|
115
116
|
|
|
117
|
+
/**
|
|
118
|
+
* Generate TOKEN lines for a pipe
|
|
119
|
+
*/
|
|
120
|
+
function generateTokens(tokens?: readonly PipeTokenConfig[]): string[] {
|
|
121
|
+
if (!tokens || tokens.length === 0) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return tokens.map((token) => {
|
|
126
|
+
if ("token" in token) {
|
|
127
|
+
// TokenReference
|
|
128
|
+
return `TOKEN ${token.token._name} ${token.scope}`;
|
|
129
|
+
}
|
|
130
|
+
// Inline config - pipes default to READ
|
|
131
|
+
return `TOKEN ${token.name} READ`;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
116
135
|
/**
|
|
117
136
|
* Generate a .pipe file content from a PipeDefinition
|
|
118
137
|
*
|
|
@@ -201,6 +220,13 @@ export function generatePipe(pipe: PipeDefinition): GeneratedPipe {
|
|
|
201
220
|
parts.push(generateCopy(copyConfig));
|
|
202
221
|
}
|
|
203
222
|
|
|
223
|
+
// Add tokens if present
|
|
224
|
+
const tokenLines = generateTokens(pipe.options.tokens);
|
|
225
|
+
if (tokenLines.length > 0) {
|
|
226
|
+
parts.push("");
|
|
227
|
+
parts.push(tokenLines.join("\n"));
|
|
228
|
+
}
|
|
229
|
+
|
|
204
230
|
return {
|
|
205
231
|
name: pipe._name,
|
|
206
232
|
content: parts.join("\n"),
|
package/src/index.ts
CHANGED
|
@@ -105,6 +105,8 @@ export type {
|
|
|
105
105
|
SchemaDefinition,
|
|
106
106
|
ColumnDefinition,
|
|
107
107
|
TokenConfig,
|
|
108
|
+
InlineTokenConfig,
|
|
109
|
+
DatasourceTokenReference,
|
|
108
110
|
ExtractSchema,
|
|
109
111
|
KafkaConfig,
|
|
110
112
|
} from "./schema/datasource.js";
|
|
@@ -119,6 +121,14 @@ export type {
|
|
|
119
121
|
KafkaSaslMechanism,
|
|
120
122
|
} from "./schema/connection.js";
|
|
121
123
|
|
|
124
|
+
// ============ Token ============
|
|
125
|
+
export { defineToken, isTokenDefinition } from "./schema/token.js";
|
|
126
|
+
export type {
|
|
127
|
+
TokenDefinition,
|
|
128
|
+
DatasourceTokenScope,
|
|
129
|
+
PipeTokenScope,
|
|
130
|
+
} from "./schema/token.js";
|
|
131
|
+
|
|
122
132
|
// ============ Pipe ============
|
|
123
133
|
export {
|
|
124
134
|
definePipe,
|
|
@@ -151,6 +161,8 @@ export type {
|
|
|
151
161
|
MaterializedConfig,
|
|
152
162
|
MaterializedViewOptions,
|
|
153
163
|
PipeTokenConfig,
|
|
164
|
+
InlinePipeTokenConfig,
|
|
165
|
+
PipeTokenReference,
|
|
154
166
|
ExtractParams,
|
|
155
167
|
ExtractOutput,
|
|
156
168
|
} from "./schema/pipe.js";
|