@querypanel/node-sdk 1.0.26 → 1.0.28

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 (144) hide show
  1. package/dist/index.cjs +2498 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +388 -0
  4. package/dist/index.d.ts +388 -0
  5. package/dist/index.js +2468 -0
  6. package/dist/index.js.map +1 -0
  7. package/package.json +1 -1
  8. package/dist/cjs/__tests__/ingest.test.d.ts +0 -5
  9. package/dist/cjs/__tests__/ingest.test.d.ts.map +0 -1
  10. package/dist/cjs/__tests__/ingest.test.js +0 -95
  11. package/dist/cjs/__tests__/ingest.test.js.map +0 -1
  12. package/dist/cjs/adapters/clickhouse.d.ts +0 -48
  13. package/dist/cjs/adapters/clickhouse.d.ts.map +0 -1
  14. package/dist/cjs/adapters/clickhouse.js +0 -284
  15. package/dist/cjs/adapters/clickhouse.js.map +0 -1
  16. package/dist/cjs/adapters/introspection.spec.d.ts +0 -2
  17. package/dist/cjs/adapters/introspection.spec.d.ts.map +0 -1
  18. package/dist/cjs/adapters/introspection.spec.js +0 -192
  19. package/dist/cjs/adapters/introspection.spec.js.map +0 -1
  20. package/dist/cjs/adapters/postgres.d.ts +0 -46
  21. package/dist/cjs/adapters/postgres.d.ts.map +0 -1
  22. package/dist/cjs/adapters/postgres.js +0 -457
  23. package/dist/cjs/adapters/postgres.js.map +0 -1
  24. package/dist/cjs/adapters/postgres.spec.d.ts +0 -2
  25. package/dist/cjs/adapters/postgres.spec.d.ts.map +0 -1
  26. package/dist/cjs/adapters/postgres.spec.js +0 -37
  27. package/dist/cjs/adapters/postgres.spec.js.map +0 -1
  28. package/dist/cjs/adapters/types.d.ts +0 -38
  29. package/dist/cjs/adapters/types.d.ts.map +0 -1
  30. package/dist/cjs/adapters/types.js +0 -3
  31. package/dist/cjs/adapters/types.js.map +0 -1
  32. package/dist/cjs/anonymize.spec.d.ts +0 -2
  33. package/dist/cjs/anonymize.spec.d.ts.map +0 -1
  34. package/dist/cjs/anonymize.spec.js +0 -78
  35. package/dist/cjs/anonymize.spec.js.map +0 -1
  36. package/dist/cjs/clickhouseClient.spec.d.ts +0 -2
  37. package/dist/cjs/clickhouseClient.spec.d.ts.map +0 -1
  38. package/dist/cjs/clickhouseClient.spec.js +0 -286
  39. package/dist/cjs/clickhouseClient.spec.js.map +0 -1
  40. package/dist/cjs/connectors/__tests__/clickhouse.introspect.test.d.ts +0 -2
  41. package/dist/cjs/connectors/__tests__/clickhouse.introspect.test.d.ts.map +0 -1
  42. package/dist/cjs/connectors/__tests__/clickhouse.introspect.test.js +0 -119
  43. package/dist/cjs/connectors/__tests__/clickhouse.introspect.test.js.map +0 -1
  44. package/dist/cjs/connectors/base.d.ts +0 -13
  45. package/dist/cjs/connectors/base.d.ts.map +0 -1
  46. package/dist/cjs/connectors/base.js +0 -3
  47. package/dist/cjs/connectors/base.js.map +0 -1
  48. package/dist/cjs/connectors/clickhouse.d.ts +0 -53
  49. package/dist/cjs/connectors/clickhouse.d.ts.map +0 -1
  50. package/dist/cjs/connectors/clickhouse.js +0 -270
  51. package/dist/cjs/connectors/clickhouse.js.map +0 -1
  52. package/dist/cjs/index.d.ts +0 -490
  53. package/dist/cjs/index.d.ts.map +0 -1
  54. package/dist/cjs/index.js +0 -843
  55. package/dist/cjs/index.js.map +0 -1
  56. package/dist/cjs/index.test.d.ts +0 -2
  57. package/dist/cjs/index.test.d.ts.map +0 -1
  58. package/dist/cjs/index.test.js +0 -185
  59. package/dist/cjs/index.test.js.map +0 -1
  60. package/dist/cjs/introspectV3.d.ts +0 -45
  61. package/dist/cjs/introspectV3.d.ts.map +0 -1
  62. package/dist/cjs/introspectV3.js +0 -99
  63. package/dist/cjs/introspectV3.js.map +0 -1
  64. package/dist/cjs/multidb.spec.d.ts +0 -2
  65. package/dist/cjs/multidb.spec.d.ts.map +0 -1
  66. package/dist/cjs/multidb.spec.js +0 -76
  67. package/dist/cjs/multidb.spec.js.map +0 -1
  68. package/dist/cjs/package.json +0 -1
  69. package/dist/cjs/schema/types.d.ts +0 -73
  70. package/dist/cjs/schema/types.d.ts.map +0 -1
  71. package/dist/cjs/schema/types.js +0 -3
  72. package/dist/cjs/schema/types.js.map +0 -1
  73. package/dist/cjs/tenant-isolation.spec.d.ts +0 -2
  74. package/dist/cjs/tenant-isolation.spec.d.ts.map +0 -1
  75. package/dist/cjs/tenant-isolation.spec.js +0 -420
  76. package/dist/cjs/tenant-isolation.spec.js.map +0 -1
  77. package/dist/cjs/utils/clickhouse.d.ts +0 -9
  78. package/dist/cjs/utils/clickhouse.d.ts.map +0 -1
  79. package/dist/cjs/utils/clickhouse.js +0 -99
  80. package/dist/cjs/utils/clickhouse.js.map +0 -1
  81. package/dist/esm/adapters/clickhouse.d.ts +0 -48
  82. package/dist/esm/adapters/clickhouse.d.ts.map +0 -1
  83. package/dist/esm/adapters/clickhouse.js +0 -280
  84. package/dist/esm/adapters/clickhouse.js.map +0 -1
  85. package/dist/esm/adapters/introspection.spec.d.ts +0 -2
  86. package/dist/esm/adapters/introspection.spec.d.ts.map +0 -1
  87. package/dist/esm/adapters/introspection.spec.js +0 -190
  88. package/dist/esm/adapters/introspection.spec.js.map +0 -1
  89. package/dist/esm/adapters/postgres.d.ts +0 -46
  90. package/dist/esm/adapters/postgres.d.ts.map +0 -1
  91. package/dist/esm/adapters/postgres.js +0 -453
  92. package/dist/esm/adapters/postgres.js.map +0 -1
  93. package/dist/esm/adapters/postgres.spec.d.ts +0 -2
  94. package/dist/esm/adapters/postgres.spec.d.ts.map +0 -1
  95. package/dist/esm/adapters/postgres.spec.js +0 -35
  96. package/dist/esm/adapters/postgres.spec.js.map +0 -1
  97. package/dist/esm/adapters/types.d.ts +0 -38
  98. package/dist/esm/adapters/types.d.ts.map +0 -1
  99. package/dist/esm/adapters/types.js +0 -2
  100. package/dist/esm/adapters/types.js.map +0 -1
  101. package/dist/esm/anonymize.spec.d.ts +0 -2
  102. package/dist/esm/anonymize.spec.d.ts.map +0 -1
  103. package/dist/esm/anonymize.spec.js +0 -76
  104. package/dist/esm/anonymize.spec.js.map +0 -1
  105. package/dist/esm/clickhouseClient.spec.d.ts +0 -2
  106. package/dist/esm/clickhouseClient.spec.d.ts.map +0 -1
  107. package/dist/esm/clickhouseClient.spec.js +0 -281
  108. package/dist/esm/clickhouseClient.spec.js.map +0 -1
  109. package/dist/esm/connectors/base.d.ts +0 -14
  110. package/dist/esm/connectors/base.d.ts.map +0 -1
  111. package/dist/esm/connectors/base.js +0 -2
  112. package/dist/esm/connectors/base.js.map +0 -1
  113. package/dist/esm/connectors/clickhouse.d.ts +0 -35
  114. package/dist/esm/connectors/clickhouse.d.ts.map +0 -1
  115. package/dist/esm/connectors/clickhouse.js +0 -281
  116. package/dist/esm/connectors/clickhouse.js.map +0 -1
  117. package/dist/esm/index.d.ts +0 -490
  118. package/dist/esm/index.d.ts.map +0 -1
  119. package/dist/esm/index.js +0 -838
  120. package/dist/esm/index.js.map +0 -1
  121. package/dist/esm/index.test.d.ts +0 -2
  122. package/dist/esm/index.test.d.ts.map +0 -1
  123. package/dist/esm/index.test.js +0 -183
  124. package/dist/esm/index.test.js.map +0 -1
  125. package/dist/esm/introspectV3.d.ts +0 -45
  126. package/dist/esm/introspectV3.d.ts.map +0 -1
  127. package/dist/esm/introspectV3.js +0 -96
  128. package/dist/esm/introspectV3.js.map +0 -1
  129. package/dist/esm/multidb.spec.d.ts +0 -2
  130. package/dist/esm/multidb.spec.d.ts.map +0 -1
  131. package/dist/esm/multidb.spec.js +0 -74
  132. package/dist/esm/multidb.spec.js.map +0 -1
  133. package/dist/esm/schema/types.d.ts +0 -73
  134. package/dist/esm/schema/types.d.ts.map +0 -1
  135. package/dist/esm/schema/types.js +0 -2
  136. package/dist/esm/schema/types.js.map +0 -1
  137. package/dist/esm/tenant-isolation.spec.d.ts +0 -2
  138. package/dist/esm/tenant-isolation.spec.d.ts.map +0 -1
  139. package/dist/esm/tenant-isolation.spec.js +0 -418
  140. package/dist/esm/tenant-isolation.spec.js.map +0 -1
  141. package/dist/esm/utils/clickhouse.d.ts +0 -9
  142. package/dist/esm/utils/clickhouse.d.ts.map +0 -1
  143. package/dist/esm/utils/clickhouse.js +0 -92
  144. package/dist/esm/utils/clickhouse.js.map +0 -1
@@ -1,420 +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
- (0, vitest_1.describe)("Tenant Isolation", () => {
6
- let sdk;
7
- const mockBaseUrl = "https://api.test.com";
8
- const mockToken = "test-token";
9
- (0, vitest_1.beforeEach)(() => {
10
- sdk = new index_js_1.QueryPanelSdkAPI(mockBaseUrl, mockToken);
11
- });
12
- (0, vitest_1.describe)("ClickHouse - ensureTenantIsolation", () => {
13
- (0, vitest_1.it)("should add WHERE clause with tenant filter when missing", () => {
14
- const metadata = {
15
- name: "analytics",
16
- dialect: "clickhouse",
17
- tenantFieldName: "customer_id",
18
- tenantFieldType: "String",
19
- enforceTenantIsolation: true,
20
- };
21
- const sql = "SELECT * FROM transactions ORDER BY created_at DESC";
22
- const params = {};
23
- const tenantId = "customer-123";
24
- // Access private method for testing
25
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
26
- (0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:String}");
27
- (0, vitest_1.expect)(result).toContain("ORDER BY created_at DESC");
28
- (0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
29
- });
30
- (0, vitest_1.it)("should add AND condition when WHERE clause exists", () => {
31
- const metadata = {
32
- name: "analytics",
33
- dialect: "clickhouse",
34
- tenantFieldName: "customer_id",
35
- tenantFieldType: "String",
36
- enforceTenantIsolation: true,
37
- };
38
- const sql = "SELECT * FROM transactions WHERE status = 'active' ORDER BY date";
39
- const params = {};
40
- const tenantId = "customer-123";
41
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
42
- (0, vitest_1.expect)(result).toContain("customer_id = {customer_id:String}");
43
- (0, vitest_1.expect)(result).toContain("AND");
44
- (0, vitest_1.expect)(result).toContain("status = 'active'");
45
- (0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
46
- });
47
- (0, vitest_1.it)("should insert before GROUP BY when no WHERE clause", () => {
48
- const metadata = {
49
- name: "analytics",
50
- dialect: "clickhouse",
51
- tenantFieldName: "customer_id",
52
- tenantFieldType: "UUID",
53
- enforceTenantIsolation: true,
54
- };
55
- const sql = "SELECT product_id, COUNT(*) FROM orders GROUP BY product_id";
56
- const params = {};
57
- const tenantId = "customer-123";
58
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
59
- (0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:UUID}");
60
- (0, vitest_1.expect)(result).toMatch(/WHERE customer_id.*GROUP BY product_id/);
61
- (0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
62
- });
63
- (0, vitest_1.it)("should insert before LIMIT when no WHERE clause", () => {
64
- const metadata = {
65
- name: "analytics",
66
- dialect: "clickhouse",
67
- tenantFieldName: "tenant_id",
68
- tenantFieldType: "Int64",
69
- enforceTenantIsolation: true,
70
- };
71
- const sql = "SELECT * FROM events LIMIT 100";
72
- const params = {};
73
- const tenantId = "customer-123";
74
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
75
- (0, vitest_1.expect)(result).toContain("WHERE tenant_id = {tenant_id:Int64}");
76
- (0, vitest_1.expect)(result).toMatch(/WHERE tenant_id.*LIMIT 100/);
77
- (0, vitest_1.expect)(params).toHaveProperty("tenant_id", "customer-123");
78
- });
79
- (0, vitest_1.it)("should not modify SQL if tenant field already present", () => {
80
- const metadata = {
81
- name: "analytics",
82
- dialect: "clickhouse",
83
- tenantFieldName: "customer_id",
84
- tenantFieldType: "String",
85
- enforceTenantIsolation: true,
86
- };
87
- const sql = "SELECT * FROM transactions WHERE customer_id = {customer_id:String} AND status = 'active'";
88
- const params = {};
89
- const tenantId = "customer-123";
90
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
91
- // Should not modify SQL since tenant field is already present
92
- (0, vitest_1.expect)(result).toBe(sql);
93
- (0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
94
- });
95
- (0, vitest_1.it)("should recognize {tenant_field} syntax without type", () => {
96
- const metadata = {
97
- name: "analytics",
98
- dialect: "clickhouse",
99
- tenantFieldName: "customer_id",
100
- tenantFieldType: "String",
101
- enforceTenantIsolation: true,
102
- };
103
- const sql = "SELECT * FROM transactions WHERE customer_id = {customer_id}";
104
- const params = {};
105
- const tenantId = "customer-123";
106
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
107
- // Should not modify SQL since tenant field is already present (without type)
108
- (0, vitest_1.expect)(result).toBe(sql);
109
- (0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
110
- });
111
- (0, vitest_1.it)("should handle when API uses different placeholder name than field name", () => {
112
- const metadata = {
113
- name: "analytics",
114
- dialect: "clickhouse",
115
- tenantFieldName: "customer_id",
116
- tenantFieldType: "Int32",
117
- enforceTenantIsolation: true,
118
- };
119
- // API returns SQL with placeholder named "tenantId" but field is "customer_id"
120
- const sql = "SELECT state FROM fraud_transaction WHERE customer_id = {tenantId:Int32} LIMIT 100";
121
- const params = { tenantId: 3 }; // API provided this
122
- const tenantId = "123"; // Actual tenant ID from SDK
123
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
124
- // Should not modify SQL since customer_id field is already filtered
125
- (0, vitest_1.expect)(result).toBe(sql);
126
- // Should set the placeholder param to the correct tenant ID
127
- (0, vitest_1.expect)(params).toHaveProperty("tenantId", "123");
128
- });
129
- (0, vitest_1.it)("should handle various placeholder names (userId, orgId, etc)", () => {
130
- const testCases = [
131
- {
132
- placeholder: "userId",
133
- sql: "SELECT * FROM data WHERE customer_id = {userId:String}",
134
- },
135
- {
136
- placeholder: "orgId",
137
- sql: "SELECT * FROM data WHERE customer_id = {orgId:String}",
138
- },
139
- {
140
- placeholder: "accountId",
141
- sql: "SELECT * FROM data WHERE customer_id = {accountId:String}",
142
- },
143
- {
144
- placeholder: "tenant",
145
- sql: "SELECT * FROM data WHERE customer_id = {tenant:String}",
146
- },
147
- ];
148
- testCases.forEach(({ placeholder, sql }) => {
149
- const metadata = {
150
- name: "analytics",
151
- dialect: "clickhouse",
152
- tenantFieldName: "customer_id",
153
- tenantFieldType: "String",
154
- enforceTenantIsolation: true,
155
- };
156
- const params = {};
157
- const tenantId = "tenant-123";
158
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
159
- // Should not modify SQL
160
- (0, vitest_1.expect)(result).toBe(sql);
161
- // Should set the correct placeholder param
162
- (0, vitest_1.expect)(params).toHaveProperty(placeholder, "tenant-123");
163
- });
164
- });
165
- (0, vitest_1.it)("should handle different field types", () => {
166
- const testCases = [
167
- { type: "String", expected: "{org_id:String}" },
168
- { type: "UUID", expected: "{org_id:UUID}" },
169
- { type: "Int64", expected: "{org_id:Int64}" },
170
- { type: "UInt64", expected: "{org_id:UInt64}" },
171
- ];
172
- testCases.forEach(({ type, expected }) => {
173
- const metadata = {
174
- name: "analytics",
175
- dialect: "clickhouse",
176
- tenantFieldName: "org_id",
177
- tenantFieldType: type,
178
- enforceTenantIsolation: true,
179
- };
180
- const sql = "SELECT * FROM data";
181
- const params = {};
182
- const tenantId = "org-123";
183
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
184
- (0, vitest_1.expect)(result).toContain(`org_id = ${expected}`);
185
- });
186
- });
187
- (0, vitest_1.it)("should default to String type when not specified", () => {
188
- const metadata = {
189
- name: "analytics",
190
- dialect: "clickhouse",
191
- tenantFieldName: "customer_id",
192
- // tenantFieldType not specified
193
- enforceTenantIsolation: true,
194
- };
195
- const sql = "SELECT * FROM transactions";
196
- const params = {};
197
- const tenantId = "customer-123";
198
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
199
- (0, vitest_1.expect)(result).toContain("{customer_id:String}"); // Default to String
200
- });
201
- });
202
- (0, vitest_1.describe)("Postgres - ensureTenantIsolation", () => {
203
- (0, vitest_1.it)("should add WHERE clause for Postgres", () => {
204
- const metadata = {
205
- name: "users",
206
- dialect: "postgres",
207
- tenantFieldName: "tenant_id",
208
- enforceTenantIsolation: true,
209
- };
210
- const sql = "SELECT * FROM users ORDER BY created_at DESC";
211
- const params = {};
212
- const tenantId = "tenant-123";
213
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
214
- (0, vitest_1.expect)(result).toContain("WHERE tenant_id = 'tenant-123'");
215
- (0, vitest_1.expect)(params).toHaveProperty("tenant_id", "tenant-123");
216
- });
217
- (0, vitest_1.it)("should not modify if tenant field already in SQL", () => {
218
- const metadata = {
219
- name: "users",
220
- dialect: "postgres",
221
- tenantFieldName: "tenant_id",
222
- enforceTenantIsolation: true,
223
- };
224
- const sql = "SELECT * FROM users WHERE tenant_id = $1 AND active = true";
225
- const params = { tenant_id: "tenant-123" };
226
- const tenantId = "tenant-123";
227
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
228
- // Should not modify since tenant_id is in SQL
229
- (0, vitest_1.expect)(result).toBe(sql);
230
- });
231
- });
232
- (0, vitest_1.describe)("Enforcement Control", () => {
233
- (0, vitest_1.it)("should not modify SQL when enforceTenantIsolation is false", () => {
234
- const metadata = {
235
- name: "public_data",
236
- dialect: "clickhouse",
237
- tenantFieldName: "customer_id",
238
- tenantFieldType: "String",
239
- enforceTenantIsolation: false, // Disabled
240
- };
241
- const sql = "SELECT * FROM public_transactions";
242
- const params = {};
243
- const tenantId = "customer-123";
244
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
245
- // SQL should not be modified
246
- (0, vitest_1.expect)(result).toBe(sql);
247
- });
248
- (0, vitest_1.it)("should not modify SQL when tenantFieldName is not set", () => {
249
- const metadata = {
250
- name: "analytics",
251
- dialect: "clickhouse",
252
- // No tenantFieldName
253
- enforceTenantIsolation: true,
254
- };
255
- const sql = "SELECT * FROM transactions";
256
- const params = {};
257
- const tenantId = "customer-123";
258
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
259
- // SQL should not be modified
260
- (0, vitest_1.expect)(result).toBe(sql);
261
- });
262
- (0, vitest_1.it)("should still add param when enforcement is disabled but field is set", () => {
263
- const metadata = {
264
- name: "analytics",
265
- dialect: "clickhouse",
266
- tenantFieldName: "customer_id",
267
- tenantFieldType: "String",
268
- enforceTenantIsolation: false,
269
- };
270
- const sql = "SELECT * FROM transactions";
271
- const params = {};
272
- const tenantId = "customer-123";
273
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
274
- // SQL not modified, but param should be added
275
- (0, vitest_1.expect)(result).toBe(sql);
276
- // Note: params won't be added because enforcement is disabled
277
- // The ensureTenantIsolation returns early
278
- });
279
- });
280
- (0, vitest_1.describe)("Edge Cases", () => {
281
- (0, vitest_1.it)("should replace null tenant parameter value with actual tenantId", () => {
282
- const metadata = {
283
- name: "analytics",
284
- dialect: "clickhouse",
285
- tenantFieldName: "customer_id",
286
- tenantFieldType: "Int64",
287
- enforceTenantIsolation: true,
288
- };
289
- const sql = "SELECT COUNT(*) FROM transactions WHERE customer_id = {customer_id:Int64} AND state = {failed_state:String}";
290
- const params = {
291
- customer_id: null, // API returned null value
292
- failed_state: "DECLINE",
293
- };
294
- const tenantId = "123";
295
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
296
- // SQL should not be modified since customer_id is already in the query
297
- (0, vitest_1.expect)(result).toBe(sql);
298
- // But the null value should be replaced with actual tenantId
299
- (0, vitest_1.expect)(params).toHaveProperty("customer_id", "123");
300
- (0, vitest_1.expect)(params).toHaveProperty("failed_state", "DECLINE");
301
- });
302
- (0, vitest_1.it)("should handle SQL with semicolon at end", () => {
303
- const metadata = {
304
- name: "analytics",
305
- dialect: "clickhouse",
306
- tenantFieldName: "customer_id",
307
- tenantFieldType: "String",
308
- enforceTenantIsolation: true,
309
- };
310
- const sql = "SELECT * FROM transactions;";
311
- const params = {};
312
- const tenantId = "customer-123";
313
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
314
- (0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:String}");
315
- (0, vitest_1.expect)(result).toMatch(/WHERE.*customer_id.*;$/);
316
- });
317
- (0, vitest_1.it)("should handle multi-line SQL", () => {
318
- const metadata = {
319
- name: "analytics",
320
- dialect: "clickhouse",
321
- tenantFieldName: "customer_id",
322
- tenantFieldType: "String",
323
- enforceTenantIsolation: true,
324
- };
325
- const sql = `
326
- SELECT
327
- product_id,
328
- COUNT(*) as count
329
- FROM orders
330
- GROUP BY product_id
331
- ORDER BY count DESC
332
- `;
333
- const params = {};
334
- const tenantId = "customer-123";
335
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
336
- (0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:String}");
337
- (0, vitest_1.expect)(result).toMatch(/WHERE.*GROUP BY/s);
338
- });
339
- (0, vitest_1.it)("should be case-insensitive for SQL keywords", () => {
340
- const metadata = {
341
- name: "analytics",
342
- dialect: "clickhouse",
343
- tenantFieldName: "customer_id",
344
- tenantFieldType: "String",
345
- enforceTenantIsolation: true,
346
- };
347
- const sql = "select * from transactions order by date";
348
- const params = {};
349
- const tenantId = "customer-123";
350
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
351
- (0, vitest_1.expect)(result).toContain("customer_id = {customer_id:String}");
352
- });
353
- (0, vitest_1.it)("should handle HAVING clause", () => {
354
- const metadata = {
355
- name: "analytics",
356
- dialect: "clickhouse",
357
- tenantFieldName: "customer_id",
358
- tenantFieldType: "String",
359
- enforceTenantIsolation: true,
360
- };
361
- const sql = "SELECT product_id, COUNT(*) as cnt FROM orders GROUP BY product_id HAVING cnt > 10";
362
- const params = {};
363
- const tenantId = "customer-123";
364
- const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
365
- (0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:String}");
366
- (0, vitest_1.expect)(result).toMatch(/WHERE.*GROUP BY/);
367
- });
368
- });
369
- (0, vitest_1.describe)("attachClickhouse configuration", () => {
370
- (0, vitest_1.it)("should default enforceTenantIsolation to true when tenantFieldName is set", () => {
371
- const mockFn = async () => ({});
372
- sdk.attachClickhouse("test", mockFn, {
373
- tenantFieldName: "customer_id",
374
- tenantFieldType: "String",
375
- // enforceTenantIsolation not specified
376
- });
377
- const metadata = sdk.databaseMetadata.get("test");
378
- (0, vitest_1.expect)(metadata.enforceTenantIsolation).toBe(true);
379
- });
380
- (0, vitest_1.it)("should respect explicit enforceTenantIsolation value", () => {
381
- const mockFn = async () => ({});
382
- sdk.attachClickhouse("test", mockFn, {
383
- tenantFieldName: "customer_id",
384
- tenantFieldType: "String",
385
- enforceTenantIsolation: false,
386
- });
387
- const metadata = sdk.databaseMetadata.get("test");
388
- (0, vitest_1.expect)(metadata.enforceTenantIsolation).toBe(false);
389
- });
390
- (0, vitest_1.it)("should default tenantFieldType to String", () => {
391
- const mockFn = async () => ({});
392
- sdk.attachClickhouse("test", mockFn, {
393
- tenantFieldName: "customer_id",
394
- // tenantFieldType not specified
395
- });
396
- const metadata = sdk.databaseMetadata.get("test");
397
- (0, vitest_1.expect)(metadata.tenantFieldType).toBe("String");
398
- });
399
- });
400
- (0, vitest_1.describe)("attachPostgres configuration", () => {
401
- (0, vitest_1.it)("should default enforceTenantIsolation to true when tenantFieldName is set", () => {
402
- const mockFn = async () => ({ rows: [], fields: [] });
403
- sdk.attachPostgres("test", mockFn, {
404
- tenantFieldName: "tenant_id",
405
- // enforceTenantIsolation not specified
406
- });
407
- const metadata = sdk.databaseMetadata.get("test");
408
- (0, vitest_1.expect)(metadata.enforceTenantIsolation).toBe(true);
409
- });
410
- (0, vitest_1.it)("should not set tenantFieldType for Postgres", () => {
411
- const mockFn = async () => ({ rows: [], fields: [] });
412
- sdk.attachPostgres("test", mockFn, {
413
- tenantFieldName: "tenant_id",
414
- });
415
- const metadata = sdk.databaseMetadata.get("test");
416
- (0, vitest_1.expect)(metadata.tenantFieldType).toBeUndefined();
417
- });
418
- });
419
- });
420
- //# sourceMappingURL=tenant-isolation.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tenant-isolation.spec.js","sourceRoot":"","sources":["../../src/tenant-isolation.spec.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export declare function isNullableType(type: string): boolean;
2
- export declare function unwrapTypeModifiers(type: string): string;
3
- export declare function extractPrecisionScale(type: string): {
4
- precision?: number;
5
- scale?: number;
6
- };
7
- export declare function extractFixedStringLength(type: string): number | undefined;
8
- export declare function parseKeyExpression(expression?: string | null): string[];
9
- //# sourceMappingURL=clickhouse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../../src/utils/clickhouse.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYxD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAWA;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOzE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAiCvE"}
@@ -1,99 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isNullableType = isNullableType;
4
- exports.unwrapTypeModifiers = unwrapTypeModifiers;
5
- exports.extractPrecisionScale = extractPrecisionScale;
6
- exports.extractFixedStringLength = extractFixedStringLength;
7
- exports.parseKeyExpression = parseKeyExpression;
8
- const WRAPPER_REGEX = /^(Nullable|LowCardinality|SimpleAggregateFunction)\((.+)\)$/i;
9
- function isNullableType(type) {
10
- return /Nullable\s*\(/i.test(type);
11
- }
12
- function unwrapTypeModifiers(type) {
13
- let current = type.trim();
14
- let match = WRAPPER_REGEX.exec(current);
15
- while (match) {
16
- const inner = match[2];
17
- if (!inner) {
18
- break;
19
- }
20
- current = inner.trim();
21
- match = WRAPPER_REGEX.exec(current);
22
- }
23
- return current;
24
- }
25
- function extractPrecisionScale(type) {
26
- const unwrapped = unwrapTypeModifiers(type);
27
- const decimalMatch = unwrapped.match(/Decimal(?:\d+)?\((\d+)\s*,\s*(\d+)\)/i);
28
- if (!decimalMatch)
29
- return {};
30
- const precision = decimalMatch[1];
31
- const scale = decimalMatch[2];
32
- if (!precision || !scale)
33
- return {};
34
- return {
35
- precision: Number.parseInt(precision, 10),
36
- scale: Number.parseInt(scale, 10),
37
- };
38
- }
39
- function extractFixedStringLength(type) {
40
- const unwrapped = unwrapTypeModifiers(type);
41
- const match = unwrapped.match(/^(?:FixedString|StringFixed)\((\d+)\)$/i);
42
- if (!match)
43
- return undefined;
44
- const length = match[1];
45
- if (!length)
46
- return undefined;
47
- return Number.parseInt(length, 10);
48
- }
49
- function parseKeyExpression(expression) {
50
- if (!expression)
51
- return [];
52
- let value = expression.trim();
53
- if (!value)
54
- return [];
55
- if (/^tuple\s*\(/i.test(value) && value.endsWith(")")) {
56
- value = value.replace(/^tuple\s*\(/i, "").replace(/\)$/, "");
57
- }
58
- const columns = [];
59
- let depth = 0;
60
- let token = "";
61
- for (const ch of value) {
62
- if (ch === "(") {
63
- depth += 1;
64
- token += ch;
65
- continue;
66
- }
67
- if (ch === ")") {
68
- depth = Math.max(0, depth - 1);
69
- token += ch;
70
- continue;
71
- }
72
- if (ch === "," && depth === 0) {
73
- const col = token.trim();
74
- if (col)
75
- columns.push(stripWrapper(col));
76
- token = "";
77
- continue;
78
- }
79
- token += ch;
80
- }
81
- const last = token.trim();
82
- if (last)
83
- columns.push(stripWrapper(last));
84
- return columns.filter(Boolean);
85
- }
86
- function stripWrapper(value) {
87
- const noQuotes = stripQuotes(value);
88
- const withoutTicks = noQuotes.replace(/`/g, "").trim();
89
- const parts = withoutTicks.split(".");
90
- return parts[parts.length - 1]?.trim() ?? "";
91
- }
92
- function stripQuotes(value) {
93
- if ((value.startsWith('"') && value.endsWith('"')) ||
94
- (value.startsWith("'") && value.endsWith("'"))) {
95
- return value.slice(1, -1);
96
- }
97
- return value;
98
- }
99
- //# sourceMappingURL=clickhouse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../../src/utils/clickhouse.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import type { ClickHouseSettings, QueryParams, Row } from "@clickhouse/client";
2
- import type { IntrospectOptions, SchemaIntrospection } from "../schema/types.js";
3
- import type { DatabaseAdapter, DatabaseExecutionResult } from "./types.js";
4
- export interface ClickHouseAdapterOptions {
5
- /** Optional logical database name used in introspection metadata. */
6
- database?: string;
7
- /** Override the default response format used for query execution. */
8
- defaultFormat?: QueryParams["format"];
9
- /**
10
- * Optional database kind label. Defaults to "clickhouse" but allows
11
- * sub-classing/custom branding if needed.
12
- */
13
- kind?: SchemaIntrospection["db"]["kind"];
14
- /**
15
- * Optional allow-list of table names.
16
- * When specified, introspection and queries are restricted to these tables only.
17
- * ClickHouse tables are not schema-qualified, so just provide table names.
18
- */
19
- allowedTables?: string[];
20
- }
21
- export type ClickHouseQueryResult = {
22
- json: () => Promise<unknown>;
23
- };
24
- export type ClickHouseClientFn = (params: QueryParams & {
25
- query_params?: Record<string, unknown>;
26
- clickhouse_settings?: ClickHouseSettings;
27
- }) => Promise<ClickHouseQueryResult | Array<Record<string, unknown>> | Row[]>;
28
- export declare class ClickHouseAdapter implements DatabaseAdapter {
29
- private readonly clientFn;
30
- private readonly databaseName;
31
- private readonly defaultFormat;
32
- private readonly kind;
33
- private readonly allowedTables?;
34
- constructor(clientFn: ClickHouseClientFn, options?: ClickHouseAdapterOptions);
35
- execute(sql: string, params?: Record<string, string | number | boolean | string[] | number[]>): Promise<DatabaseExecutionResult>;
36
- validate(sql: string, params?: Record<string, string | number | boolean | string[] | number[]>): Promise<void>;
37
- getDialect(): "clickhouse";
38
- introspect(options?: IntrospectOptions): Promise<SchemaIntrospection>;
39
- /**
40
- * Validate that the SQL query only references allowed tables.
41
- * This is a basic validation that extracts table-like patterns from the query.
42
- */
43
- private validateQueryTables;
44
- close(): Promise<void>;
45
- private query;
46
- private extractRows;
47
- }
48
- //# sourceMappingURL=clickhouse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../../src/adapters/clickhouse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,KAAK,EAEV,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,WAAW,wBAAwB;IACvC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,aAAa,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC;;;OAGG;IACH,IAAI,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,MAAM,qBAAqB,GAAG;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,WAAW,GAAG;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;CAC1C,KACE,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AA6B7E,qBAAa,iBAAkB,YAAW,eAAe;IAOrD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoC;IACzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAW;gBAGvB,QAAQ,EAAE,kBAAkB,EAC7C,OAAO,GAAE,wBAA6B;IAWlC,OAAO,CACX,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GACvE,OAAO,CAAC,uBAAuB,CAAC;IAkB7B,QAAQ,CACZ,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GACvE,OAAO,CAAC,IAAI,CAAC;IAWhB,UAAU,IACD,YAAY;IAGf,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2G3E;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA0BrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,KAAK;YAyBL,WAAW;CAiB1B"}