@channel.io/app-sdk-server 0.13.1 → 0.15.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 (54) hide show
  1. package/dist/__tests__/datasource-runners.test.d.ts +2 -0
  2. package/dist/__tests__/datasource-runners.test.d.ts.map +1 -0
  3. package/dist/__tests__/datasource-runners.test.js +244 -0
  4. package/dist/__tests__/datasource-runners.test.js.map +1 -0
  5. package/dist/__tests__/datasource.test.d.ts +2 -0
  6. package/dist/__tests__/datasource.test.d.ts.map +1 -0
  7. package/dist/__tests__/datasource.test.js +152 -0
  8. package/dist/__tests__/datasource.test.js.map +1 -0
  9. package/dist/__tests__/testing-utils.test.js +1 -1
  10. package/dist/__tests__/testing-utils.test.js.map +1 -1
  11. package/dist/datasource/arrow.d.ts +27 -0
  12. package/dist/datasource/arrow.d.ts.map +1 -0
  13. package/dist/datasource/arrow.js +261 -0
  14. package/dist/datasource/arrow.js.map +1 -0
  15. package/dist/datasource/bigquery.d.ts +97 -0
  16. package/dist/datasource/bigquery.d.ts.map +1 -0
  17. package/dist/datasource/bigquery.js +297 -0
  18. package/dist/datasource/bigquery.js.map +1 -0
  19. package/dist/datasource/grpc.d.ts +28 -0
  20. package/dist/datasource/grpc.d.ts.map +1 -0
  21. package/dist/datasource/grpc.js +292 -0
  22. package/dist/datasource/grpc.js.map +1 -0
  23. package/dist/datasource/index.d.ts +8 -0
  24. package/dist/datasource/index.d.ts.map +1 -0
  25. package/dist/datasource/index.js +8 -0
  26. package/dist/datasource/index.js.map +1 -0
  27. package/dist/datasource/policy.d.ts +16 -0
  28. package/dist/datasource/policy.d.ts.map +1 -0
  29. package/dist/datasource/policy.js +112 -0
  30. package/dist/datasource/policy.js.map +1 -0
  31. package/dist/datasource/postgres.d.ts +32 -0
  32. package/dist/datasource/postgres.d.ts.map +1 -0
  33. package/dist/datasource/postgres.js +234 -0
  34. package/dist/datasource/postgres.js.map +1 -0
  35. package/dist/datasource/query-handlers.d.ts +32 -0
  36. package/dist/datasource/query-handlers.d.ts.map +1 -0
  37. package/dist/datasource/query-handlers.js +58 -0
  38. package/dist/datasource/query-handlers.js.map +1 -0
  39. package/dist/datasource/types.d.ts +134 -0
  40. package/dist/datasource/types.d.ts.map +1 -0
  41. package/dist/datasource/types.js +34 -0
  42. package/dist/datasource/types.js.map +1 -0
  43. package/dist/decorators/extension-names.d.ts +1 -1
  44. package/dist/decorators/extension-names.d.ts.map +1 -1
  45. package/dist/decorators/extension-names.js +1 -0
  46. package/dist/decorators/extension-names.js.map +1 -1
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +2 -0
  50. package/dist/index.js.map +1 -1
  51. package/dist/nestjs/channel-app.controller.d.ts +2 -2
  52. package/dist/nestjs/channel-app.controller.d.ts.map +1 -1
  53. package/dist/nestjs/channel-app.controller.js.map +1 -1
  54. package/package.json +30 -4
@@ -0,0 +1,234 @@
1
+ import { writeRowsAsArrowIpcBatch } from "./arrow.js";
2
+ import { DataSourceByteLimitTracker, queryWithRowLimit, validateReadOnlyQuery } from "./policy.js";
3
+ import { DataSourceErrorCode, DataSourceExecutionError, } from "./types.js";
4
+ const defaultBatchSize = 1024;
5
+ export function createPostgresDataSourceExecutor(config) {
6
+ return new PostgresDataSourceExecutor(config);
7
+ }
8
+ export class PostgresDataSourceExecutor {
9
+ sources = new Map();
10
+ ownedPools = new Map();
11
+ constructor(config) {
12
+ if (config.sources.length === 0) {
13
+ throw new Error("at least one PostgreSQL datasource source is required");
14
+ }
15
+ for (const source of config.sources) {
16
+ const normalized = normalizeSource(source, config.defaultBatchSize);
17
+ if (this.sources.has(normalized.sourceId)) {
18
+ throw new Error(`duplicate datasource source_id: ${normalized.sourceId}`);
19
+ }
20
+ this.sources.set(normalized.sourceId, normalized);
21
+ }
22
+ }
23
+ async executeQuery(request, sink) {
24
+ const req = normalizeRequest(request);
25
+ const source = this.sources.get(req.sourceId);
26
+ if (!source) {
27
+ throw new DataSourceExecutionError({
28
+ code: DataSourceErrorCode.SourceNotFound,
29
+ message: `unknown datasource source_id: ${req.sourceId}`,
30
+ });
31
+ }
32
+ validateReadOnlyQuery(req.query, [], source.tables ?? []);
33
+ const pool = await this.poolForSource(source);
34
+ const client = await pool.connect();
35
+ let queryStream;
36
+ let committed = false;
37
+ try {
38
+ await promiseQuery(client, "BEGIN READ ONLY");
39
+ if ((req.timeoutMs ?? 0) > 0) {
40
+ await promiseQuery(client, `SET LOCAL statement_timeout = ${Math.trunc(req.timeoutMs ?? 0)}`);
41
+ }
42
+ const QueryStream = await loadQueryStream();
43
+ queryStream = new QueryStream(queryWithRowLimit(req.query, req.rowLimit), [], {
44
+ batchSize: source.batchSize,
45
+ highWaterMark: source.batchSize,
46
+ rowMode: "array",
47
+ });
48
+ const stream = client.query(queryStream);
49
+ const startedAt = Date.now();
50
+ const byteLimit = new DataSourceByteLimitTracker(req.byteLimit);
51
+ const batch = [];
52
+ let rowCount = 0;
53
+ let schemaSent = false;
54
+ for await (const row of stream) {
55
+ batch.push(row);
56
+ rowCount++;
57
+ if (batch.length >= source.batchSize) {
58
+ schemaSent = flushBatch(sink, queryStream, batch, schemaSent, byteLimit);
59
+ batch.length = 0;
60
+ }
61
+ }
62
+ if (batch.length > 0) {
63
+ schemaSent = flushBatch(sink, queryStream, batch, schemaSent, byteLimit);
64
+ }
65
+ if (!schemaSent) {
66
+ const fields = fieldsFromQueryStream(queryStream);
67
+ if (fields.length > 0) {
68
+ writeRowsAsArrowIpcBatch(sink, fields, [], {
69
+ sendSchema: true,
70
+ byteLimit,
71
+ });
72
+ }
73
+ }
74
+ await promiseQuery(client, "COMMIT");
75
+ committed = true;
76
+ sink.send({
77
+ result: { rowCount, limitExceeded: false, executionMs: Date.now() - startedAt },
78
+ });
79
+ }
80
+ catch (error) {
81
+ queryStream?.destroy?.(error);
82
+ if (!committed) {
83
+ await rollback(client);
84
+ }
85
+ throw toPostgresDataSourceError(error);
86
+ }
87
+ finally {
88
+ client.release();
89
+ }
90
+ }
91
+ async close() {
92
+ const pools = [...this.ownedPools.values()];
93
+ this.ownedPools.clear();
94
+ for (const pool of pools) {
95
+ await pool.end?.();
96
+ }
97
+ }
98
+ async poolForSource(source) {
99
+ if (source.pool) {
100
+ return source.pool;
101
+ }
102
+ const existing = this.ownedPools.get(source.sourceId);
103
+ if (existing) {
104
+ return existing;
105
+ }
106
+ const connectionString = source.connectionString ??
107
+ (source.connectionStringEnv ? process.env[source.connectionStringEnv] : undefined);
108
+ if (!connectionString?.trim()) {
109
+ throw new DataSourceExecutionError({
110
+ code: DataSourceErrorCode.Unavailable,
111
+ message: `PostgreSQL connection string is required for source_id ${source.sourceId}`,
112
+ });
113
+ }
114
+ const pg = await loadPg();
115
+ const pool = new pg.Pool({ connectionString });
116
+ this.ownedPools.set(source.sourceId, pool);
117
+ return pool;
118
+ }
119
+ }
120
+ function flushBatch(sink, queryStream, rows, schemaAlreadySent, byteLimit) {
121
+ const fields = fieldsFromQueryStream(queryStream);
122
+ if (fields.length === 0) {
123
+ throw new Error("PostgreSQL query fields are missing");
124
+ }
125
+ const result = writeRowsAsArrowIpcBatch(sink, fields, rows, {
126
+ sendSchema: !schemaAlreadySent,
127
+ byteLimit,
128
+ });
129
+ return schemaAlreadySent || result.schemaSent;
130
+ }
131
+ function normalizeSource(source, defaultBatchSize) {
132
+ const sourceId = source.sourceId.trim();
133
+ if (!sourceId) {
134
+ throw new Error("source_id is required");
135
+ }
136
+ return {
137
+ ...source,
138
+ sourceId,
139
+ batchSize: positiveInt(source.batchSize ?? defaultBatchSize, defaultBatchSize),
140
+ };
141
+ }
142
+ function positiveInt(value, fallback = defaultBatchSize) {
143
+ if (value === undefined || value <= 0) {
144
+ return fallback > 0 ? fallback : defaultBatchSize;
145
+ }
146
+ return Math.trunc(value);
147
+ }
148
+ function normalizeRequest(request) {
149
+ return {
150
+ sourceId: request.sourceId?.trim() ?? "",
151
+ query: request.query?.trim() ?? "",
152
+ rowLimit: request.rowLimit,
153
+ byteLimit: request.byteLimit,
154
+ timeoutMs: request.timeoutMs,
155
+ };
156
+ }
157
+ function fieldsFromQueryStream(queryStream) {
158
+ const fields = queryStream._result?.fields ?? [];
159
+ return fields.map((field) => ({
160
+ name: field.name,
161
+ dataTypeID: field.dataTypeID,
162
+ nullable: true,
163
+ }));
164
+ }
165
+ async function promiseQuery(client, query) {
166
+ await client.query(query);
167
+ }
168
+ async function rollback(client) {
169
+ try {
170
+ await promiseQuery(client, "ROLLBACK");
171
+ }
172
+ catch {
173
+ // Preserve the original query failure.
174
+ }
175
+ }
176
+ function toPostgresDataSourceError(error) {
177
+ if (error instanceof DataSourceExecutionError) {
178
+ return error;
179
+ }
180
+ if (error instanceof Error) {
181
+ const upstream = {
182
+ engine: "postgresql",
183
+ message: error.message,
184
+ };
185
+ const code = errorCode(error);
186
+ if (code) {
187
+ upstream.code = code;
188
+ }
189
+ return new DataSourceExecutionError({
190
+ code: DataSourceErrorCode.ExternalError,
191
+ message: "PostgreSQL datasource query failed",
192
+ upstream,
193
+ cause: error,
194
+ });
195
+ }
196
+ return error;
197
+ }
198
+ function errorCode(error) {
199
+ const code = error.code;
200
+ return typeof code === "string" ? code : undefined;
201
+ }
202
+ async function loadPg() {
203
+ try {
204
+ return (await importOptionalModule("pg"));
205
+ }
206
+ catch (error) {
207
+ throw new DataSourceExecutionError({
208
+ code: DataSourceErrorCode.Unavailable,
209
+ message: `pg is required for PostgreSQL datasource execution: ${errorMessage(error)}`,
210
+ cause: error,
211
+ });
212
+ }
213
+ }
214
+ async function loadQueryStream() {
215
+ try {
216
+ const mod = (await importOptionalModule("pg-query-stream"));
217
+ return mod.default;
218
+ }
219
+ catch (error) {
220
+ throw new DataSourceExecutionError({
221
+ code: DataSourceErrorCode.Unavailable,
222
+ message: `pg-query-stream is required for PostgreSQL datasource streaming: ${errorMessage(error)}`,
223
+ cause: error,
224
+ });
225
+ }
226
+ }
227
+ async function importOptionalModule(specifier) {
228
+ const mod = await import(specifier);
229
+ return mod;
230
+ }
231
+ function errorMessage(error) {
232
+ return error instanceof Error ? error.message : String(error);
233
+ }
234
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/datasource/postgres.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type ArrowColumn, type ArrowRow } from "./arrow.js";
2
+ import type { ExecuteQueryHandler } from "./types.js";
3
+ export interface RowQueryHandlerOptions {
4
+ batchSize?: number;
5
+ }
6
+ export type RowSource = Iterable<ArrowRow> | AsyncIterable<ArrowRow>;
7
+ export type RowReader = (query: string, request: Parameters<ExecuteQueryHandler>[0]) => RowSource | Promise<RowSource>;
8
+ export declare function createRowQueryHandler(columns: ArrowColumn[], reader: RowReader, options?: RowQueryHandlerOptions): ExecuteQueryHandler;
9
+ export interface PostgresLikeClient {
10
+ query(query: string): Promise<{
11
+ rows: ArrowRow[];
12
+ }> | {
13
+ rows: ArrowRow[];
14
+ };
15
+ }
16
+ export declare function createPostgresQueryHandler(client: PostgresLikeClient, columns: ArrowColumn[], options?: RowQueryHandlerOptions): ExecuteQueryHandler;
17
+ export interface BigQueryLikeClient {
18
+ query(query: string | {
19
+ query: string;
20
+ [key: string]: unknown;
21
+ }): Promise<[ArrowRow[], unknown?] | ArrowRow[]>;
22
+ createQueryStream?: (query: string | {
23
+ query: string;
24
+ [key: string]: unknown;
25
+ }) => RowSource;
26
+ }
27
+ export interface BigQueryQueryHandlerOptions extends RowQueryHandlerOptions {
28
+ queryOptions?: Record<string, unknown>;
29
+ preferQueryStream?: boolean;
30
+ }
31
+ export declare function createBigQueryQueryHandler(client: BigQueryLikeClient, columns: ArrowColumn[], options?: BigQueryQueryHandlerOptions): ExecuteQueryHandler;
32
+ //# sourceMappingURL=query-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-handlers.d.ts","sourceRoot":"","sources":["../../src/datasource/query-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,KACxC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAEpC,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,sBAA2B,GACnC,mBAAmB,CAqBrB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC,GAAG;QAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;CAC5E;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,mBAAmB,CASrB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CACH,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GACxD,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;IAChD,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,KAAK,SAAS,CAAC;CAC9F;AAED,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,GAAE,2BAAgC,GACxC,mBAAmB,CAmBrB"}
@@ -0,0 +1,58 @@
1
+ import { arrowRowsChunk, resultChunk } from "./arrow.js";
2
+ export function createRowQueryHandler(columns, reader, options = {}) {
3
+ const batchSize = options.batchSize && options.batchSize > 0 ? options.batchSize : 1024;
4
+ return async (request, sink) => {
5
+ const startedAt = Date.now();
6
+ const rows = toAsyncRows(await reader(request.query ?? "", request));
7
+ let rowCount = 0;
8
+ let batch = [];
9
+ for await (const row of rows) {
10
+ rowCount += 1;
11
+ batch.push(row);
12
+ if (batch.length >= batchSize) {
13
+ sink.send(arrowRowsChunk(columns, batch));
14
+ batch = [];
15
+ }
16
+ }
17
+ if (batch.length > 0) {
18
+ sink.send(arrowRowsChunk(columns, batch));
19
+ }
20
+ sink.send(resultChunk(rowCount, false, Date.now() - startedAt));
21
+ };
22
+ }
23
+ export function createPostgresQueryHandler(client, columns, options) {
24
+ return createRowQueryHandler(columns, async (query) => {
25
+ const result = await client.query(query);
26
+ return result.rows;
27
+ }, options);
28
+ }
29
+ export function createBigQueryQueryHandler(client, columns, options = {}) {
30
+ return createRowQueryHandler(columns, async (query) => {
31
+ const request = options.queryOptions && Object.keys(options.queryOptions).length > 0
32
+ ? { ...options.queryOptions, query }
33
+ : query;
34
+ if (options.preferQueryStream !== false && client.createQueryStream) {
35
+ return client.createQueryStream(request);
36
+ }
37
+ const result = await client.query(request);
38
+ if (Array.isArray(result[0])) {
39
+ return result[0];
40
+ }
41
+ return result;
42
+ }, options);
43
+ }
44
+ async function* toAsyncRows(source) {
45
+ if (isAsyncIterable(source)) {
46
+ for await (const row of source) {
47
+ yield row;
48
+ }
49
+ return;
50
+ }
51
+ for (const row of source) {
52
+ yield row;
53
+ }
54
+ }
55
+ function isAsyncIterable(source) {
56
+ return Symbol.asyncIterator in source;
57
+ }
58
+ //# sourceMappingURL=query-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-handlers.js","sourceRoot":"","sources":["../../src/datasource/query-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ export declare const DataSourceErrorCode: {
2
+ readonly Unspecified: 0;
3
+ readonly Unavailable: 1;
4
+ readonly Unauthenticated: 2;
5
+ readonly PermissionDenied: 3;
6
+ readonly SourceNotFound: 4;
7
+ readonly QueryInvalid: 5;
8
+ readonly QueryFailed: 6;
9
+ readonly LimitExceeded: 7;
10
+ readonly Timeout: 8;
11
+ readonly UpstreamAuthFailed: 9;
12
+ readonly Internal: 10;
13
+ readonly TableNotFound: 11;
14
+ readonly ColumnNotFound: 12;
15
+ readonly Cancelled: 13;
16
+ readonly ResourceExhausted: 14;
17
+ readonly InvalidArgument: 15;
18
+ readonly ExternalError: 16;
19
+ };
20
+ export type DataSourceErrorCode = (typeof DataSourceErrorCode)[keyof typeof DataSourceErrorCode];
21
+ export interface SessionContext {
22
+ account?: string;
23
+ channelId?: string;
24
+ kernelToken?: string;
25
+ teamMemberId?: string;
26
+ datasourceToken?: string;
27
+ }
28
+ export interface ListTablesRequest {
29
+ session?: SessionContext;
30
+ sourceId?: string;
31
+ tableNameFilterPattern?: string;
32
+ }
33
+ export interface Table {
34
+ name?: string;
35
+ description?: string;
36
+ estimatedRowCount?: number;
37
+ updatedAt?: number;
38
+ tableType?: number;
39
+ }
40
+ export interface ListTablesResponse {
41
+ tables?: Table[];
42
+ }
43
+ export interface DescribeTableRequest {
44
+ session?: SessionContext;
45
+ sourceId?: string;
46
+ table?: string;
47
+ }
48
+ export interface Column {
49
+ name?: string;
50
+ type?: string;
51
+ nullable?: boolean;
52
+ description?: string;
53
+ partitionKey?: boolean;
54
+ precision?: number;
55
+ scale?: number;
56
+ }
57
+ export interface TableDefinition {
58
+ table?: Table;
59
+ columns?: Column[];
60
+ primaryKey?: string[];
61
+ }
62
+ export interface SearchTablesRequest {
63
+ session?: SessionContext;
64
+ sourceId?: string;
65
+ queries?: string[];
66
+ limit?: number;
67
+ }
68
+ export interface SearchTablesResponse {
69
+ tables?: Table[];
70
+ }
71
+ export interface ExecuteQueryRequest {
72
+ session?: SessionContext;
73
+ sourceId?: string;
74
+ query?: string;
75
+ rowLimit?: number;
76
+ byteLimit?: number;
77
+ timeoutMs?: number;
78
+ }
79
+ export interface ArrowIpcMessage {
80
+ dataHeader?: Uint8Array;
81
+ dataBody?: Uint8Array;
82
+ }
83
+ export interface QueryResult {
84
+ rowCount?: number;
85
+ limitExceeded?: boolean;
86
+ executionMs?: number;
87
+ }
88
+ export interface UpstreamError {
89
+ engine?: string;
90
+ code?: string;
91
+ message?: string;
92
+ }
93
+ export interface DataSourceError {
94
+ code?: DataSourceErrorCode;
95
+ message?: string;
96
+ retryable?: boolean;
97
+ upstream?: UpstreamError;
98
+ }
99
+ export interface DataSourceExecutionErrorOptions {
100
+ code: DataSourceErrorCode;
101
+ message: string;
102
+ retryable?: boolean;
103
+ upstream?: UpstreamError;
104
+ cause?: unknown;
105
+ }
106
+ export declare class DataSourceExecutionError extends Error {
107
+ readonly code: DataSourceErrorCode;
108
+ readonly retryable: boolean;
109
+ readonly upstream?: UpstreamError;
110
+ constructor(options: DataSourceExecutionErrorOptions);
111
+ }
112
+ export interface QueryChunk {
113
+ arrow?: ArrowIpcMessage;
114
+ result?: QueryResult;
115
+ error?: DataSourceError;
116
+ }
117
+ export interface QueryChunkSink {
118
+ send(chunk: QueryChunk): void;
119
+ }
120
+ export type ExecuteQueryHandler = (request: ExecuteQueryRequest, sink: QueryChunkSink) => void | Promise<void>;
121
+ export interface DataSourceQueryExecutor {
122
+ executeQuery(request: ExecuteQueryRequest, sink: QueryChunkSink): Promise<void>;
123
+ close?(): Promise<void>;
124
+ }
125
+ export interface DataSourceServiceHandlers {
126
+ listTables?: (request: ListTablesRequest) => ListTablesResponse | Promise<ListTablesResponse>;
127
+ describeTable?: (request: DescribeTableRequest) => TableDefinition | Promise<TableDefinition>;
128
+ searchTables?: (request: SearchTablesRequest) => SearchTablesResponse | Promise<SearchTablesResponse>;
129
+ executeQuery: ExecuteQueryHandler;
130
+ }
131
+ export interface DataSourceGrpcOptions {
132
+ allowedSources?: string[];
133
+ }
134
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/datasource/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export const DataSourceErrorCode = {
2
+ Unspecified: 0,
3
+ Unavailable: 1,
4
+ Unauthenticated: 2,
5
+ PermissionDenied: 3,
6
+ SourceNotFound: 4,
7
+ QueryInvalid: 5,
8
+ QueryFailed: 6,
9
+ LimitExceeded: 7,
10
+ Timeout: 8,
11
+ UpstreamAuthFailed: 9,
12
+ Internal: 10,
13
+ TableNotFound: 11,
14
+ ColumnNotFound: 12,
15
+ Cancelled: 13,
16
+ ResourceExhausted: 14,
17
+ InvalidArgument: 15,
18
+ ExternalError: 16,
19
+ };
20
+ export class DataSourceExecutionError extends Error {
21
+ code;
22
+ retryable;
23
+ upstream;
24
+ constructor(options) {
25
+ super(options.message, { cause: options.cause });
26
+ this.name = "DataSourceExecutionError";
27
+ this.code = options.code;
28
+ this.retryable = options.retryable ?? false;
29
+ if (options.upstream !== undefined) {
30
+ this.upstream = options.upstream;
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/datasource/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;IACd,eAAe,EAAE,CAAC;IAClB,gBAAgB,EAAE,CAAC;IACnB,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC;IACV,kBAAkB,EAAE,CAAC;IACrB,QAAQ,EAAE,EAAE;IACZ,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;IAClB,SAAS,EAAE,EAAE;IACb,iBAAiB,EAAE,EAAE;IACrB,eAAe,EAAE,EAAE;IACnB,aAAa,EAAE,EAAE;CACT,CAAC;AAwGX,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,IAAI,CAAsB;IAC1B,SAAS,CAAU;IACnB,QAAQ,CAAiB;IAElC,YAAY,OAAwC;QAClD,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAC5C,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACnC,CAAC;IACH,CAAC;CACF"}
@@ -1,3 +1,3 @@
1
- export declare const SDK_EXTENSION_NAMES: readonly ["oauth", "apikey", "config", "calendar", "messaging", "messenger", "command", "widget", "customtab", "hook", "polling", "store", "commerce", "order", "wms", "alfTask"];
1
+ export declare const SDK_EXTENSION_NAMES: readonly ["oauth", "apikey", "config", "calendar", "messaging", "messenger", "command", "widget", "customtab", "hook", "polling", "store", "datasource", "commerce", "order", "wms", "alfTask"];
2
2
  export type SdkExtensionName = (typeof SDK_EXTENSION_NAMES)[number];
3
3
  //# sourceMappingURL=extension-names.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension-names.d.ts","sourceRoot":"","sources":["../../src/decorators/extension-names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,mLAiBtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"extension-names.d.ts","sourceRoot":"","sources":["../../src/decorators/extension-names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,iMAkBtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -11,6 +11,7 @@ export const SDK_EXTENSION_NAMES = [
11
11
  "hook",
12
12
  "polling",
13
13
  "store",
14
+ "datasource",
14
15
  "commerce",
15
16
  "order",
16
17
  "wms",
@@ -1 +1 @@
1
- {"version":3,"file":"extension-names.js","sourceRoot":"","sources":["../../src/decorators/extension-names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,WAAW;IACX,WAAW;IACX,SAAS;IACT,QAAQ;IACR,WAAW;IACX,MAAM;IACN,SAAS;IACT,OAAO;IACP,UAAU;IACV,OAAO;IACP,KAAK;IACL,SAAS;CACD,CAAC"}
1
+ {"version":3,"file":"extension-names.js","sourceRoot":"","sources":["../../src/decorators/extension-names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,WAAW;IACX,WAAW;IACX,SAAS;IACT,QAAQ;IACR,WAAW;IACX,MAAM;IACN,SAAS;IACT,OAAO;IACP,YAAY;IACZ,UAAU;IACV,OAAO;IACP,KAAK;IACL,SAAS;CACD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from "./token/index.js";
6
6
  export * from "./appstore/index.js";
7
7
  export * from "./guards/index.js";
8
8
  export * from "./native/index.js";
9
+ export * from "./datasource/index.js";
9
10
  export * from "./simple/index.js";
10
11
  export * from "./testing/index.js";
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAC;AAGzC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAC;AAGzC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -14,6 +14,8 @@ export * from "./appstore/index.js";
14
14
  export * from "./guards/index.js";
15
15
  // Export native function client
16
16
  export * from "./native/index.js";
17
+ // Export datasource gRPC helpers
18
+ export * from "./datasource/index.js";
17
19
  // Export simple MCP-like API
18
20
  export * from "./simple/index.js";
19
21
  // Export testing utilities
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,cAAc,0BAA0B,CAAC;AAEzC,mCAAmC;AACnC,cAAc,mBAAmB,CAAC;AAElC,oBAAoB;AACpB,cAAc,uBAAuB,CAAC;AAEtC,2BAA2B;AAC3B,cAAc,sBAAsB,CAAC;AAErC,oCAAoC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,mCAAmC;AACnC,cAAc,qBAAqB,CAAC;AAEpC,+BAA+B;AAC/B,cAAc,mBAAmB,CAAC;AAElC,gCAAgC;AAChC,cAAc,mBAAmB,CAAC;AAElC,6BAA6B;AAC7B,cAAc,mBAAmB,CAAC;AAElC,2BAA2B;AAC3B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,cAAc,0BAA0B,CAAC;AAEzC,mCAAmC;AACnC,cAAc,mBAAmB,CAAC;AAElC,oBAAoB;AACpB,cAAc,uBAAuB,CAAC;AAEtC,2BAA2B;AAC3B,cAAc,sBAAsB,CAAC;AAErC,oCAAoC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,mCAAmC;AACnC,cAAc,qBAAqB,CAAC;AAEpC,+BAA+B;AAC/B,cAAc,mBAAmB,CAAC;AAElC,gCAAgC;AAChC,cAAc,mBAAmB,CAAC;AAElC,iCAAiC;AACjC,cAAc,uBAAuB,CAAC;AAEtC,6BAA6B;AAC7B,cAAc,mBAAmB,CAAC;AAElC,2BAA2B;AAC3B,cAAc,oBAAoB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type FunctionCallRequest } from "@channel.io/app-sdk-core";
1
+ import { type FunctionCallRequest, type FunctionCallResponse } from "@channel.io/app-sdk-core";
2
2
  import { ChannelAppService } from "./channel-app.service.js";
3
3
  export declare class ChannelAppController {
4
4
  private readonly channelAppService;
@@ -8,7 +8,7 @@ export declare class ChannelAppController {
8
8
  * Versioned endpoint: PUT /functions/:version
9
9
  * ch-app-store calls this endpoint with systemVersion (e.g., /functions/v1)
10
10
  */
11
- handleVersionedFunctions(version: string, body: FunctionCallRequest): Promise<import("@channel.io/app-sdk-core").FunctionCallResponse<unknown>>;
11
+ handleVersionedFunctions(version: string, body: FunctionCallRequest): Promise<FunctionCallResponse>;
12
12
  /**
13
13
  * Common request handler
14
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"channel-app.controller.d.ts","sourceRoot":"","sources":["../../src/nestjs/channel-app.controller.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,qBACa,oBAAoB;IAGnB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAF9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;gBAEnC,iBAAiB,EAAE,iBAAiB;IAEjE;;;OAGG;IAEG,wBAAwB,CACV,OAAO,EAAE,MAAM,EACzB,IAAI,EAAE,mBAAmB;IAKnC;;OAEG;YACW,aAAa;CAqC5B"}
1
+ {"version":3,"file":"channel-app.controller.d.ts","sourceRoot":"","sources":["../../src/nestjs/channel-app.controller.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAG1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,qBACa,oBAAoB;IAGnB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAF9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;gBAEnC,iBAAiB,EAAE,iBAAiB;IAEjE;;;OAGG;IAEG,wBAAwB,CACV,OAAO,EAAE,MAAM,EACzB,IAAI,EAAE,mBAAmB,GAChC,OAAO,CAAC,oBAAoB,CAAC;IAIhC;;OAEG;YACW,aAAa;CAwC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"channel-app.controller.js","sourceRoot":"","sources":["../../src/nestjs/channel-app.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAEL,qBAAqB,EACrB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGtD,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAGF;IAFZ,MAAM,GAAG,IAAI,MAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IAEhE,YAA6B,iBAAoC;QAApC,sBAAiB,GAAjB,iBAAiB,CAAmB;IAAG,CAAC;IAErE;;;OAGG;IAEG,AAAN,KAAK,CAAC,wBAAwB,CACV,OAAe,EACzB,IAAyB;QAEjC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,IAAyB,EAAE,OAAgB;QACrE,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;YAEzE,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;gBAC3C,MAAM,IAAI,aAAa,CACrB;oBACE,KAAK,EAAE,oBAAoB;oBAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,EACD,UAAU,CAAC,SAAS,CACrB,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACrC,MAAM,IAAI,aAAa,CACrB;oBACE,KAAK,EAAE,kBAAkB;oBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,EACD,UAAU,CAAC,WAAW,CACvB,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,MAAM,IAAI,aAAa,CACrB;gBACE,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,EACD,UAAU,CAAC,qBAAqB,CACjC,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AA/CO;IADL,GAAG,CAAC,UAAU,CAAC;IAEb,WAAA,KAAK,CAAC,SAAS,CAAC,CAAA;IAChB,WAAA,IAAI,EAAE,CAAA;;;;oEAGR;AAfU,oBAAoB;IADhC,UAAU,CAAC,WAAW,CAAC;qCAI0B,iBAAiB;GAHtD,oBAAoB,CAyDhC"}
1
+ {"version":3,"file":"channel-app.controller.js","sourceRoot":"","sources":["../../src/nestjs/channel-app.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAGL,qBAAqB,EACrB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGtD,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAGF;IAFZ,MAAM,GAAG,IAAI,MAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IAEhE,YAA6B,iBAAoC;QAApC,sBAAiB,GAAjB,iBAAiB,CAAmB;IAAG,CAAC;IAErE;;;OAGG;IAEG,AAAN,KAAK,CAAC,wBAAwB,CACV,OAAe,EACzB,IAAyB;QAEjC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,IAAyB,EACzB,OAAgB;QAEhB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;YAEzE,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;gBAC3C,MAAM,IAAI,aAAa,CACrB;oBACE,KAAK,EAAE,oBAAoB;oBAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,EACD,UAAU,CAAC,SAAS,CACrB,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACrC,MAAM,IAAI,aAAa,CACrB;oBACE,KAAK,EAAE,kBAAkB;oBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,EACD,UAAU,CAAC,WAAW,CACvB,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,MAAM,IAAI,aAAa,CACrB;gBACE,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,EACD,UAAU,CAAC,qBAAqB,CACjC,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AAlDO;IADL,GAAG,CAAC,UAAU,CAAC;IAEb,WAAA,KAAK,CAAC,SAAS,CAAC,CAAA;IAChB,WAAA,IAAI,EAAE,CAAA;;;;oEAGR;AAfU,oBAAoB;IADhC,UAAU,CAAC,WAAW,CAAC;qCAI0B,iBAAiB;GAHtD,oBAAoB,CA4DhC"}