@channel.io/app-sdk-server 0.31.0 → 0.32.0

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 (77) hide show
  1. package/dist/decorators/extension.decorator.d.ts +6 -0
  2. package/dist/decorators/extension.decorator.d.ts.map +1 -1
  3. package/dist/decorators/extension.decorator.js +14 -0
  4. package/dist/decorators/extension.decorator.js.map +1 -1
  5. package/dist/decorators/index.d.ts +1 -1
  6. package/dist/decorators/index.d.ts.map +1 -1
  7. package/dist/decorators/index.js +1 -1
  8. package/dist/decorators/index.js.map +1 -1
  9. package/dist/native/client.d.ts +7 -22
  10. package/dist/native/client.d.ts.map +1 -1
  11. package/dist/native/client.js +13 -31
  12. package/dist/native/client.js.map +1 -1
  13. package/dist/native/proxy-api.d.ts +3 -15
  14. package/dist/native/proxy-api.d.ts.map +1 -1
  15. package/dist/native/proxy-api.js +2 -20
  16. package/dist/native/proxy-api.js.map +1 -1
  17. package/dist/native/proxy-api.types.d.ts +1 -1
  18. package/dist/native/proxy-api.types.d.ts.map +1 -1
  19. package/dist/native/types.d.ts +6 -0
  20. package/dist/native/types.d.ts.map +1 -1
  21. package/package.json +4 -4
  22. package/dist/__tests__/datasource-runners.test.d.ts +0 -2
  23. package/dist/__tests__/datasource-runners.test.d.ts.map +0 -1
  24. package/dist/__tests__/datasource-runners.test.js +0 -354
  25. package/dist/__tests__/datasource-runners.test.js.map +0 -1
  26. package/dist/__tests__/datasource.test.d.ts +0 -2
  27. package/dist/__tests__/datasource.test.d.ts.map +0 -1
  28. package/dist/__tests__/datasource.test.js +0 -374
  29. package/dist/__tests__/datasource.test.js.map +0 -1
  30. package/dist/__tests__/decorators.test.d.ts +0 -2
  31. package/dist/__tests__/decorators.test.d.ts.map +0 -1
  32. package/dist/__tests__/decorators.test.js +0 -441
  33. package/dist/__tests__/decorators.test.js.map +0 -1
  34. package/dist/__tests__/extension-result-normalizer.test.d.ts +0 -2
  35. package/dist/__tests__/extension-result-normalizer.test.d.ts.map +0 -1
  36. package/dist/__tests__/extension-result-normalizer.test.js +0 -184
  37. package/dist/__tests__/extension-result-normalizer.test.js.map +0 -1
  38. package/dist/__tests__/function-input-validator.test.d.ts +0 -2
  39. package/dist/__tests__/function-input-validator.test.d.ts.map +0 -1
  40. package/dist/__tests__/function-input-validator.test.js +0 -56
  41. package/dist/__tests__/function-input-validator.test.js.map +0 -1
  42. package/dist/__tests__/native-client.test.d.ts +0 -2
  43. package/dist/__tests__/native-client.test.d.ts.map +0 -1
  44. package/dist/__tests__/native-client.test.js +0 -504
  45. package/dist/__tests__/native-client.test.js.map +0 -1
  46. package/dist/__tests__/proxy-api.test.d.ts +0 -2
  47. package/dist/__tests__/proxy-api.test.d.ts.map +0 -1
  48. package/dist/__tests__/proxy-api.test.js +0 -310
  49. package/dist/__tests__/proxy-api.test.js.map +0 -1
  50. package/dist/__tests__/sanitize-for-logging.test.d.ts +0 -2
  51. package/dist/__tests__/sanitize-for-logging.test.d.ts.map +0 -1
  52. package/dist/__tests__/sanitize-for-logging.test.js +0 -97
  53. package/dist/__tests__/sanitize-for-logging.test.js.map +0 -1
  54. package/dist/__tests__/signature.test.d.ts +0 -2
  55. package/dist/__tests__/signature.test.d.ts.map +0 -1
  56. package/dist/__tests__/signature.test.js +0 -172
  57. package/dist/__tests__/signature.test.js.map +0 -1
  58. package/dist/__tests__/testing-utils.test.d.ts +0 -2
  59. package/dist/__tests__/testing-utils.test.d.ts.map +0 -1
  60. package/dist/__tests__/testing-utils.test.js +0 -244
  61. package/dist/__tests__/testing-utils.test.js.map +0 -1
  62. package/dist/__tests__/token-manager.test.d.ts +0 -2
  63. package/dist/__tests__/token-manager.test.d.ts.map +0 -1
  64. package/dist/__tests__/token-manager.test.js +0 -528
  65. package/dist/__tests__/token-manager.test.js.map +0 -1
  66. package/dist/discovery/extension-discovery.service.test.d.ts +0 -2
  67. package/dist/discovery/extension-discovery.service.test.d.ts.map +0 -1
  68. package/dist/discovery/extension-discovery.service.test.js +0 -116
  69. package/dist/discovery/extension-discovery.service.test.js.map +0 -1
  70. package/dist/nestjs/channel-app.controller.test.d.ts +0 -2
  71. package/dist/nestjs/channel-app.controller.test.d.ts.map +0 -1
  72. package/dist/nestjs/channel-app.controller.test.js +0 -37
  73. package/dist/nestjs/channel-app.controller.test.js.map +0 -1
  74. package/dist/nestjs/channel-app.service.test.d.ts +0 -2
  75. package/dist/nestjs/channel-app.service.test.d.ts.map +0 -1
  76. package/dist/nestjs/channel-app.service.test.js +0 -583
  77. package/dist/nestjs/channel-app.service.test.js.map +0 -1
@@ -1,374 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { createHmac } from "node:crypto";
3
- import * as grpc from "@grpc/grpc-js";
4
- import * as arrow from "apache-arrow";
5
- import { createExecuteQueryContext, createBigQueryQueryHandler, createDataSourceGrpcServer, createPostgresQueryHandler, createRoutedExecuteQueryHandler, createRowQueryHandler, dataSourceSignaturePayload, DataSourceErrorCode, DataSourceServiceDefinition, encodeRowsToArrowIPC, serializeExecuteQueryRequestForSignature, } from "../datasource/index.js";
6
- describe("datasource query handlers", () => {
7
- it("encodes DECIMAL, NUMERIC, HUGEINT, and INT256 columns as Arrow decimal types", () => {
8
- const table = arrow.tableFromIPC(encodeRowsToArrowIPC([
9
- { name: "amount", type: "DECIMAL(20,6)" },
10
- { name: "wide_amount", databaseType: "NUMERIC(40,6)" },
11
- { name: "sum_amount", type: "HUGEINT" },
12
- { name: "big_counter", type: "INT256" },
13
- ], [
14
- {
15
- amount: "123.456789",
16
- wide_amount: "1234567890123456789012345678901234.123456",
17
- sum_amount: "170141183460469231731687303715884105727",
18
- big_counter: "12345678901234567890123456789012345678901234567890",
19
- },
20
- ]));
21
- const [amount, wideAmount, sumAmount, bigCounter] = table.schema.fields.map((field) => field.type);
22
- expect(amount.precision).toBe(20);
23
- expect(amount.scale).toBe(6);
24
- expect(amount.bitWidth).toBe(128);
25
- expect(wideAmount.precision).toBe(40);
26
- expect(wideAmount.scale).toBe(6);
27
- expect(wideAmount.bitWidth).toBe(256);
28
- expect(sumAmount.precision).toBe(39);
29
- expect(sumAmount.scale).toBe(0);
30
- expect(sumAmount.bitWidth).toBe(256);
31
- expect(bigCounter.precision).toBe(76);
32
- expect(bigCounter.scale).toBe(0);
33
- expect(bigCounter.bitWidth).toBe(256);
34
- expect(table.getChild("amount")?.get(0)?.valueOf(6)).toBe(123.456789);
35
- });
36
- it("streams rows as Arrow chunks and a result chunk", async () => {
37
- const chunks = [];
38
- const handler = createRowQueryHandler([{ name: "order_id", type: "STRING" }], async () => [
39
- { order_id: "o-1" },
40
- ]);
41
- await handler({ session: { channelId: "channel-1" }, sourceId: "bigquery", query: "select 1" }, {
42
- send: (chunk) => chunks.push(chunk),
43
- });
44
- expect(chunks).toHaveLength(3);
45
- expect(chunks[0]).toMatchObject({ arrow: { dataHeader: expect.any(Uint8Array) } });
46
- expect(chunks[1]).toMatchObject({
47
- arrow: { dataHeader: expect.any(Uint8Array), dataBody: expect.any(Uint8Array) },
48
- });
49
- expect(chunks[2]).toMatchObject({ result: { rowCount: 1 } });
50
- });
51
- it("streams async iterable rows in batches", async () => {
52
- const chunks = [];
53
- const handler = createRowQueryHandler([{ name: "order_id", type: "STRING" }], async function* () {
54
- yield { order_id: "o-1" };
55
- yield { order_id: "o-2" };
56
- }, { batchSize: 1 });
57
- await handler({ session: { channelId: "channel-1" }, sourceId: "bigquery", query: "select 1" }, {
58
- send: (chunk) => chunks.push(chunk),
59
- });
60
- expect(chunks).toHaveLength(4);
61
- expect(chunks[3]).toMatchObject({ result: { rowCount: 2 } });
62
- });
63
- it("supports pg-like clients", async () => {
64
- const chunks = [];
65
- const handler = createPostgresQueryHandler({
66
- query: async () => ({ rows: [{ id: 1 }] }),
67
- }, [{ name: "id", type: "INT64" }]);
68
- await handler({ session: { channelId: "channel-1" }, sourceId: "postgresql", query: "select 1" }, {
69
- send: (chunk) => chunks.push(chunk),
70
- });
71
- expect(chunks[chunks.length - 1]).toMatchObject({ result: { rowCount: 1 } });
72
- });
73
- it("supports bigquery-like clients", async () => {
74
- const chunks = [];
75
- const handler = createBigQueryQueryHandler({
76
- query: async () => [[{ id: "o-1" }]],
77
- }, [{ name: "id", type: "STRING" }]);
78
- await handler({ session: { channelId: "channel-1" }, sourceId: "bigquery", query: "select 1" }, {
79
- send: (chunk) => chunks.push(chunk),
80
- });
81
- expect(chunks[chunks.length - 1]).toMatchObject({ result: { rowCount: 1 } });
82
- });
83
- it("prefers BigQuery query streams when available", async () => {
84
- const chunks = [];
85
- const handler = createBigQueryQueryHandler({
86
- query: async () => {
87
- throw new Error("query should not be used when createQueryStream exists");
88
- },
89
- async *createQueryStream() {
90
- yield { id: "o-1" };
91
- },
92
- }, [{ name: "id", type: "STRING" }]);
93
- await handler({ session: { channelId: "channel-1" }, sourceId: "bigquery", query: "select 1" }, {
94
- send: (chunk) => chunks.push(chunk),
95
- });
96
- expect(chunks[chunks.length - 1]).toMatchObject({ result: { rowCount: 1 } });
97
- });
98
- it("serves ExecuteQuery over grpc", async () => {
99
- const server = createDataSourceGrpcServer({
100
- executeQuery: createRowQueryHandler([{ name: "id", type: "STRING" }], () => [
101
- { id: "o-1" },
102
- ]),
103
- }, { allowedSources: ["bigquery"] });
104
- const address = await bind(server);
105
- const client = createClient(address);
106
- try {
107
- const chunks = await collectExecuteQuery(client, {
108
- session: { channelId: "channel-1" },
109
- sourceId: "bigquery",
110
- query: "select 1",
111
- });
112
- expect(chunks).toHaveLength(3);
113
- expect(chunks[0]?.arrow?.dataHeader?.byteLength).toBeGreaterThan(0);
114
- expect(chunks[1]?.arrow?.dataBody?.byteLength).toBeGreaterThan(0);
115
- expect(chunks[2]).toMatchObject({ result: { rowCount: 1 } });
116
- }
117
- finally {
118
- client.close();
119
- await forceShutdown(server);
120
- }
121
- });
122
- it("passes grpc metadata to ExecuteQuery handlers", async () => {
123
- const server = createDataSourceGrpcServer({
124
- executeQuery: (_request, sink, context) => {
125
- sink.send({
126
- result: {
127
- rowCount: context?.route === "cafe24" ? 1 : 0,
128
- },
129
- });
130
- },
131
- });
132
- const address = await bind(server);
133
- const client = createClient(address);
134
- const metadata = new grpc.Metadata();
135
- metadata.set("x-datasource-route", "cafe24");
136
- try {
137
- const chunks = await collectExecuteQuery(client, {
138
- session: { channelId: "channel-1" },
139
- sourceId: "bigquery",
140
- query: "select 1",
141
- }, metadata);
142
- expect(chunks[0]).toMatchObject({ result: { rowCount: 1 } });
143
- }
144
- finally {
145
- client.close();
146
- await forceShutdown(server);
147
- }
148
- });
149
- it("validates datasource HMAC signature with signing key", async () => {
150
- const signingKey = Buffer.from("datasource-signing-key").toString("hex");
151
- const accessToken = signedJWT("auth-secret", {
152
- identity: "app-cafe24",
153
- scope: ["app-cafe24", "channel-channel-1", "manager-manager-1"],
154
- });
155
- const request = {
156
- session: { channelId: "channel-1" },
157
- sourceId: "bigquery",
158
- query: "select 1",
159
- };
160
- const metadata = new grpc.Metadata();
161
- metadata.set("x-access-token", accessToken);
162
- metadata.set("x-signature", signDatasourceRequest(signingKey, request, accessToken));
163
- const server = createDataSourceGrpcServer({
164
- executeQuery: (_request, sink, context) => {
165
- sink.send({
166
- result: {
167
- rowCount: context?.accessTokenIdentity?.appId === "cafe24" &&
168
- context.accessTokenIdentity.channelId === "channel-1" &&
169
- context.accessTokenIdentity.managerId === "manager-1"
170
- ? 1
171
- : 0,
172
- },
173
- });
174
- },
175
- }, { signingKey });
176
- const address = await bind(server);
177
- const client = createClient(address);
178
- try {
179
- const chunks = await collectExecuteQuery(client, request, metadata);
180
- expect(chunks[0]).toMatchObject({ result: { rowCount: 1 } });
181
- }
182
- finally {
183
- client.close();
184
- await forceShutdown(server);
185
- }
186
- });
187
- it("rejects invalid datasource HMAC signature", async () => {
188
- const signingKey = Buffer.from("datasource-signing-key").toString("hex");
189
- const accessToken = signedJWT("auth-secret", {
190
- identity: "app-cafe24",
191
- scope: ["app-cafe24", "channel-channel-1", "manager-manager-1"],
192
- });
193
- const request = {
194
- session: { channelId: "channel-1" },
195
- sourceId: "bigquery",
196
- query: "select 1",
197
- };
198
- const metadata = new grpc.Metadata();
199
- metadata.set("x-access-token", accessToken);
200
- metadata.set("x-signature", signDatasourceRequest(signingKey, request, `${accessToken}-bad`));
201
- const server = createDataSourceGrpcServer({
202
- executeQuery: () => {
203
- throw new Error("handler must not be called");
204
- },
205
- }, { signingKey });
206
- const address = await bind(server);
207
- const client = createClient(address);
208
- try {
209
- const result = await collectExecuteQueryFailure(client, request, metadata);
210
- expect(result.error.code).toBe(grpc.status.UNAUTHENTICATED);
211
- expect(result.chunks[0]).toMatchObject({
212
- error: { code: DataSourceErrorCode.Unauthenticated },
213
- });
214
- }
215
- finally {
216
- client.close();
217
- await forceShutdown(server);
218
- }
219
- });
220
- it("resolves datasource HMAC signing key from access token identity", async () => {
221
- const signingKey = Buffer.from("datasource-signing-key").toString("hex");
222
- const accessToken = signedJWT("auth-secret", {
223
- identity: "app-cafe24",
224
- scope: ["app-cafe24", "channel-channel-1", "manager-manager-1"],
225
- });
226
- const request = {
227
- session: { channelId: "channel-1" },
228
- sourceId: "bigquery",
229
- query: "select 1",
230
- };
231
- const metadata = new grpc.Metadata();
232
- metadata.set("x-access-token", accessToken);
233
- metadata.set("x-signature", signDatasourceRequest(signingKey, request, accessToken));
234
- const server = createDataSourceGrpcServer({
235
- executeQuery: (_request, sink, context) => {
236
- sink.send({
237
- result: { rowCount: context?.accessTokenIdentity?.appId === "cafe24" ? 1 : 0 },
238
- });
239
- },
240
- }, {
241
- signingKeyResolver: (identity) => {
242
- expect(identity.appId).toBe("cafe24");
243
- return signingKey;
244
- },
245
- });
246
- const address = await bind(server);
247
- const client = createClient(address);
248
- try {
249
- const chunks = await collectExecuteQuery(client, request, metadata);
250
- expect(chunks[0]).toMatchObject({ result: { rowCount: 1 } });
251
- }
252
- finally {
253
- client.close();
254
- await forceShutdown(server);
255
- }
256
- });
257
- it("resolves datasource app identity from grpc metadata", () => {
258
- const metadata = new grpc.Metadata();
259
- metadata.set("x-channel-app-id", "app-fallback-id");
260
- const idOnlyContext = createExecuteQueryContext(metadata);
261
- expect(idOnlyContext.appIdentity).toMatchObject({
262
- appId: "app-fallback-id",
263
- appSlugOrId: "app-fallback-id",
264
- });
265
- expect(idOnlyContext.getMetadataText("X-CHANNEL-APP-ID")).toBe("app-fallback-id");
266
- metadata.set("x-app-slug", "cafe24");
267
- const slugContext = createExecuteQueryContext(metadata);
268
- expect(slugContext.appIdentity).toMatchObject({
269
- appSlug: "cafe24",
270
- appId: "app-fallback-id",
271
- appSlugOrId: "cafe24",
272
- });
273
- });
274
- it("resolves datasource route from grpc metadata", () => {
275
- const metadata = new grpc.Metadata();
276
- metadata.set("X-DATASOURCE-ROUTE", " cafe24 ");
277
- const context = createExecuteQueryContext(metadata);
278
- expect(context.route).toBe("cafe24");
279
- expect(context.getMetadataText("x-datasource-route")).toBe(" cafe24 ");
280
- });
281
- it("routes ExecuteQuery handlers by datasource route", async () => {
282
- const chunks = [];
283
- const handler = createRoutedExecuteQueryHandler({
284
- cafe24: async (_request, sink) => {
285
- sink.send({ result: { rowCount: 1 } });
286
- },
287
- shopify: async (_request, sink) => {
288
- sink.send({ result: { rowCount: 2 } });
289
- },
290
- });
291
- await handler({ session: { channelId: "channel-1" }, sourceId: "bigquery", query: "select 1" }, { send: (chunk) => chunks.push(chunk) }, { ...createExecuteQueryContext(new grpc.Metadata()), route: "shopify" });
292
- expect(chunks[0]).toMatchObject({ result: { rowCount: 2 } });
293
- });
294
- it("returns terminal error chunks and grpc status", async () => {
295
- const server = createDataSourceGrpcServer({
296
- executeQuery: createRowQueryHandler([{ name: "id", type: "STRING" }], () => [
297
- { id: "o-1" },
298
- ]),
299
- }, { allowedSources: ["bigquery"] });
300
- const address = await bind(server);
301
- const client = createClient(address);
302
- try {
303
- const result = await collectExecuteQueryFailure(client, {
304
- session: { channelId: "channel-1" },
305
- sourceId: "postgresql",
306
- query: "select 1",
307
- });
308
- expect(result.chunks[0]).toMatchObject({
309
- error: { code: DataSourceErrorCode.SourceNotFound },
310
- });
311
- expect(result.error.code).toBe(grpc.status.NOT_FOUND);
312
- }
313
- finally {
314
- client.close();
315
- await forceShutdown(server);
316
- }
317
- });
318
- it("exports datasource error codes", () => {
319
- expect(DataSourceErrorCode.SourceNotFound).toBe(4);
320
- });
321
- });
322
- function bind(server) {
323
- return new Promise((resolve, reject) => {
324
- server.bindAsync("127.0.0.1:0", grpc.ServerCredentials.createInsecure(), (error, port) => {
325
- if (error) {
326
- reject(error);
327
- return;
328
- }
329
- resolve(`127.0.0.1:${port}`);
330
- });
331
- });
332
- }
333
- function createClient(address) {
334
- const Client = grpc.makeGenericClientConstructor(DataSourceServiceDefinition, "DataSourceService");
335
- return new Client(address, grpc.credentials.createInsecure());
336
- }
337
- function collectExecuteQuery(client, request, metadata) {
338
- return new Promise((resolve, reject) => {
339
- const chunks = [];
340
- const stream = metadata ? client.ExecuteQuery(request, metadata) : client.ExecuteQuery(request);
341
- stream.on("data", (chunk) => chunks.push(chunk));
342
- stream.on("error", reject);
343
- stream.on("end", () => resolve(chunks));
344
- });
345
- }
346
- function collectExecuteQueryFailure(client, request, metadata) {
347
- return new Promise((resolve, reject) => {
348
- const chunks = [];
349
- const stream = metadata ? client.ExecuteQuery(request, metadata) : client.ExecuteQuery(request);
350
- stream.on("data", (chunk) => chunks.push(chunk));
351
- stream.on("error", (error) => resolve({ chunks, error }));
352
- stream.on("end", () => reject(new Error("expected ExecuteQuery to fail")));
353
- });
354
- }
355
- function forceShutdown(server) {
356
- server.forceShutdown();
357
- return Promise.resolve();
358
- }
359
- function signedJWT(secret, payload) {
360
- const header = Buffer.from(JSON.stringify({ alg: "HS256", typ: "JWT" })).toString("base64url");
361
- const body = Buffer.from(JSON.stringify(payload)).toString("base64url");
362
- const signature = createHmac("sha256", secret)
363
- .update(`${header}.${body}`)
364
- .digest()
365
- .toString("base64url");
366
- return `${header}.${body}.${signature}`;
367
- }
368
- function signDatasourceRequest(signingKey, request, accessToken) {
369
- return createHmac("sha256", Buffer.from(signingKey, "hex"))
370
- .update(dataSourceSignaturePayload(serializeExecuteQueryRequestForSignature(request), accessToken))
371
- .digest()
372
- .toString("base64");
373
- }
374
- //# sourceMappingURL=datasource.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"datasource.test.js","sourceRoot":"","sources":["../../src/__tests__/datasource.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import "reflect-metadata";
2
- //# sourceMappingURL=decorators.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decorators.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/decorators.test.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC"}