@querypanel/node-sdk 1.0.21 → 1.0.24

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/package.json CHANGED
@@ -1,10 +1,30 @@
1
1
  {
2
2
  "name": "@querypanel/node-sdk",
3
- "version": "1.0.21",
3
+ "version": "1.0.24",
4
4
  "type": "module",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
7
7
  "types": "dist/esm/index.d.ts",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/querypanel/node-sdk.git"
11
+ },
12
+ "author": "QueryPanel",
13
+ "license": "MIT",
14
+ "homepage": "https://querypanel.io",
15
+ "bugs": {
16
+ "url": "https://github.com/querypanel/node-sdk/issues"
17
+ },
18
+ "keywords": [
19
+ "querypanel",
20
+ "sdk",
21
+ "node",
22
+ "javascript",
23
+ "typescript",
24
+ "text-to-dashboard",
25
+ "natural-language-to-sql",
26
+ "text-to-sql"
27
+ ],
8
28
  "exports": {
9
29
  ".": {
10
30
  "types": "./dist/esm/index.d.ts",
@@ -1,5 +0,0 @@
1
- declare global {
2
- var fetch: typeof globalThis.fetch;
3
- }
4
- export {};
5
- //# sourceMappingURL=ingest.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ingest.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/ingest.test.ts"],"names":[],"mappings":"AAKA,OAAO,CAAC,MAAM,CAAC;IAEX,IAAI,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACtC"}
@@ -1,95 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const index_js_1 = require("../index.js");
5
- const noop = () => { };
6
- class StubConnector {
7
- constructor(introspection) {
8
- this.introspection = introspection;
9
- this.connect = vitest_1.vi.fn(async () => { });
10
- this.close = vitest_1.vi.fn(async () => { });
11
- this.executeQuery = vitest_1.vi.fn(async () => []);
12
- this.introspect = vitest_1.vi.fn(async (_options) => this.introspection);
13
- }
14
- }
15
- (0, vitest_1.describe)('Ingestion API', () => {
16
- const originalFetch = globalThis.fetch;
17
- const fakeResponse = {
18
- ok: true,
19
- status: 200,
20
- text: async () => JSON.stringify({ message: 'ok', ingestedTables: 1 }),
21
- };
22
- let fetchMock;
23
- (0, vitest_1.beforeEach)(() => {
24
- fetchMock = vitest_1.vi.fn().mockResolvedValue(fakeResponse);
25
- globalThis.fetch = fetchMock;
26
- });
27
- (0, vitest_1.afterEach)(() => {
28
- fetchMock.mockReset();
29
- if (originalFetch) {
30
- globalThis.fetch = originalFetch;
31
- }
32
- else {
33
- delete globalThis.fetch;
34
- }
35
- });
36
- (0, vitest_1.it)('posts schema introspection payloads with merged metadata', async () => {
37
- const sdk = new index_js_1.QueryPanelSdkAPI('https://example.com', 'token');
38
- const introspection = {
39
- db: { kind: 'clickhouse', name: 'analytics' },
40
- tables: [],
41
- introspectedAt: new Date().toISOString(),
42
- metadata: { existing: true },
43
- };
44
- const response = await sdk.ingestSchema(introspection, {
45
- tenantId: 'tenant-1',
46
- metadata: { triggeredBy: 'test' },
47
- });
48
- (0, vitest_1.expect)(response).toMatchObject({ message: 'ok', ingestedTables: 1 });
49
- (0, vitest_1.expect)(fetchMock).toHaveBeenCalledTimes(1);
50
- const [url, init] = fetchMock.mock.calls[0];
51
- (0, vitest_1.expect)(url).toBe('https://example.com/ingest/schema');
52
- (0, vitest_1.expect)(init.method).toBe('POST');
53
- (0, vitest_1.expect)(init.headers).toMatchObject({
54
- Authorization: 'Bearer token',
55
- 'Content-Type': 'application/json',
56
- });
57
- const body = JSON.parse(init.body);
58
- (0, vitest_1.expect)(body.metadata).toEqual({ existing: true, triggeredBy: 'test' });
59
- });
60
- (0, vitest_1.it)('introspects via connector and closes connections by default', async () => {
61
- const sdk = new index_js_1.QueryPanelSdkAPI('https://example.com', 'token');
62
- const introspection = {
63
- db: { kind: 'clickhouse', name: 'analytics' },
64
- tables: [],
65
- introspectedAt: new Date().toISOString(),
66
- };
67
- const connector = new StubConnector(introspection);
68
- const response = await sdk.introspectAndIngest(connector, {
69
- tenantId: 'tenant-1',
70
- metadata: { flow: 'batch' },
71
- tables: ['events'],
72
- });
73
- (0, vitest_1.expect)(response.message).toBe('ok');
74
- (0, vitest_1.expect)(connector.connect).toHaveBeenCalledTimes(1);
75
- (0, vitest_1.expect)(connector.introspect).toHaveBeenCalledWith({ tables: ['events'] });
76
- (0, vitest_1.expect)(connector.close).toHaveBeenCalledTimes(1);
77
- const [, init] = fetchMock.mock.calls[0];
78
- const body = JSON.parse(init.body);
79
- (0, vitest_1.expect)(body.metadata).toEqual({ flow: 'batch' });
80
- });
81
- (0, vitest_1.it)('respects keepConnectionOpen option', async () => {
82
- const sdk = new index_js_1.QueryPanelSdkAPI('https://example.com', 'token');
83
- const connector = new StubConnector({
84
- db: { kind: 'clickhouse', name: 'analytics' },
85
- tables: [],
86
- introspectedAt: new Date().toISOString(),
87
- });
88
- await sdk.introspectAndIngest(connector, {
89
- tenantId: 'tenant-1',
90
- keepConnectionOpen: true,
91
- });
92
- (0, vitest_1.expect)(connector.close).not.toHaveBeenCalled();
93
- });
94
- });
95
- //# sourceMappingURL=ingest.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ingest.test.js","sourceRoot":"","sources":["../../../src/__tests__/ingest.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=clickhouse.introspect.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clickhouse.introspect.test.d.ts","sourceRoot":"","sources":["../../../../src/connectors/__tests__/clickhouse.introspect.test.ts"],"names":[],"mappings":""}
@@ -1,119 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const clickhouse_js_1 = require("../clickhouse.js");
5
- class StubResultSet {
6
- constructor(payload) {
7
- this.payload = payload;
8
- }
9
- async json() {
10
- return this.payload;
11
- }
12
- }
13
- class StubClickHouseClient {
14
- constructor(responses) {
15
- this.queries = [];
16
- this.responses = responses;
17
- }
18
- async query(params) {
19
- this.queries.push({ query: params.query, params: params.query_params });
20
- const responseKey = params.query.includes('system.tables') ? 'tables' : 'columns';
21
- const payload = this.responses.get(responseKey);
22
- if (!payload) {
23
- throw new Error(`No stub response registered for ${responseKey}`);
24
- }
25
- return new StubResultSet(payload);
26
- }
27
- async ping() {
28
- return { success: true };
29
- }
30
- async close() { }
31
- }
32
- (0, vitest_1.describe)('ClickHouseConnector', () => {
33
- (0, vitest_1.it)('introspects tables with large column counts', async () => {
34
- const tableRows = [
35
- {
36
- name: 'events',
37
- engine: 'MergeTree',
38
- comment: 'User event stream',
39
- total_rows: '424242',
40
- total_bytes: '1024',
41
- is_view: 0,
42
- primary_key: 'tuple(event_id, occurred_at)',
43
- sorting_key: 'tuple(occurred_at)',
44
- },
45
- ];
46
- const columnRows = Array.from({ length: 120 }, (_, index) => ({
47
- table: 'events',
48
- name: `column_${index}`,
49
- type: index % 2 === 0 ? 'Nullable(String)' : 'UInt32',
50
- position: index + 1,
51
- default_kind: index % 10 === 0 ? 'DEFAULT' : null,
52
- default_expression: index % 10 === 0 ? `'value_${index}'` : null,
53
- comment: index % 15 === 0 ? `Column ${index}` : null,
54
- codec_expression: index % 20 === 0 ? 'ZSTD(3)' : null,
55
- ttl_expression: null,
56
- is_in_primary_key: index === 0 ? 1 : 0,
57
- data_compressed_bytes: '128',
58
- data_uncompressed_bytes: '256',
59
- }));
60
- const responses = new Map([
61
- ['tables', tableRows],
62
- ['columns', columnRows],
63
- ]);
64
- const stubClient = new StubClickHouseClient(responses);
65
- const connector = new clickhouse_js_1.ClickHouseConnector({
66
- database: 'analytics',
67
- }, { client: stubClient });
68
- const introspection = await connector.introspect();
69
- (0, vitest_1.expect)(introspection.db).toEqual({ kind: 'clickhouse', name: 'analytics' });
70
- (0, vitest_1.expect)(introspection.tables).toHaveLength(1);
71
- const [table] = introspection.tables;
72
- (0, vitest_1.expect)(table.name).toBe('events');
73
- (0, vitest_1.expect)(table.columns).toHaveLength(120);
74
- (0, vitest_1.expect)(table.columns[0]).toMatchObject({
75
- name: 'column_0',
76
- nullable: true,
77
- type: 'String',
78
- rawType: 'Nullable(String)',
79
- defaultKind: 'DEFAULT',
80
- defaultExpression: `'value_0'`,
81
- statistics: { compressedBytes: 128, uncompressedBytes: 256 },
82
- });
83
- (0, vitest_1.expect)(table.columns.at(-1)).toMatchObject({
84
- nullable: false,
85
- type: 'UInt32',
86
- });
87
- (0, vitest_1.expect)(table.statistics).toEqual({ totalRows: 424242, totalBytes: 1024 });
88
- (0, vitest_1.expect)(table.indexes).toEqual([
89
- {
90
- name: 'primary_key',
91
- columns: ['event_id', 'occurred_at'],
92
- unique: true,
93
- type: 'PRIMARY KEY',
94
- definition: 'tuple(event_id, occurred_at)',
95
- },
96
- ]);
97
- (0, vitest_1.expect)(table.constraints[0]).toMatchObject({
98
- type: 'PRIMARY KEY',
99
- columns: ['event_id', 'occurred_at'],
100
- });
101
- (0, vitest_1.expect)(new Date(introspection.introspectedAt).toISOString()).toBe(introspection.introspectedAt);
102
- (0, vitest_1.expect)(stubClient.queries).toHaveLength(2);
103
- (0, vitest_1.expect)(stubClient.queries[0].params).toEqual({ db: 'analytics' });
104
- });
105
- (0, vitest_1.it)('applies table filters when provided', async () => {
106
- const responses = new Map([
107
- ['tables', [{ name: 'events', engine: 'MergeTree', is_view: 0 }]],
108
- ['columns', [{ table: 'events', name: 'column_1', type: 'UInt64', position: 1 }]],
109
- ]);
110
- const stubClient = new StubClickHouseClient(responses);
111
- const connector = new clickhouse_js_1.ClickHouseConnector({ database: 'analytics' }, { client: stubClient });
112
- await connector.introspect({ tables: ['analytics.events', 'events'] });
113
- (0, vitest_1.expect)(stubClient.queries).toHaveLength(2);
114
- for (const query of stubClient.queries) {
115
- (0, vitest_1.expect)(query.params).toEqual({ db: 'analytics', tables: ['events'] });
116
- }
117
- });
118
- });
119
- //# sourceMappingURL=clickhouse.introspect.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clickhouse.introspect.test.js","sourceRoot":"","sources":["../../../../src/connectors/__tests__/clickhouse.introspect.test.ts"],"names":[],"mappings":"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"}