@channel.io/app-sdk-server 0.31.1 → 0.33.1

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 (80) 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/dist/utils/sanitize-for-logging.d.ts.map +1 -1
  22. package/dist/utils/sanitize-for-logging.js +13 -8
  23. package/dist/utils/sanitize-for-logging.js.map +1 -1
  24. package/package.json +5 -5
  25. package/dist/__tests__/datasource-runners.test.d.ts +0 -2
  26. package/dist/__tests__/datasource-runners.test.d.ts.map +0 -1
  27. package/dist/__tests__/datasource-runners.test.js +0 -354
  28. package/dist/__tests__/datasource-runners.test.js.map +0 -1
  29. package/dist/__tests__/datasource.test.d.ts +0 -2
  30. package/dist/__tests__/datasource.test.d.ts.map +0 -1
  31. package/dist/__tests__/datasource.test.js +0 -374
  32. package/dist/__tests__/datasource.test.js.map +0 -1
  33. package/dist/__tests__/decorators.test.d.ts +0 -2
  34. package/dist/__tests__/decorators.test.d.ts.map +0 -1
  35. package/dist/__tests__/decorators.test.js +0 -441
  36. package/dist/__tests__/decorators.test.js.map +0 -1
  37. package/dist/__tests__/extension-result-normalizer.test.d.ts +0 -2
  38. package/dist/__tests__/extension-result-normalizer.test.d.ts.map +0 -1
  39. package/dist/__tests__/extension-result-normalizer.test.js +0 -184
  40. package/dist/__tests__/extension-result-normalizer.test.js.map +0 -1
  41. package/dist/__tests__/function-input-validator.test.d.ts +0 -2
  42. package/dist/__tests__/function-input-validator.test.d.ts.map +0 -1
  43. package/dist/__tests__/function-input-validator.test.js +0 -56
  44. package/dist/__tests__/function-input-validator.test.js.map +0 -1
  45. package/dist/__tests__/native-client.test.d.ts +0 -2
  46. package/dist/__tests__/native-client.test.d.ts.map +0 -1
  47. package/dist/__tests__/native-client.test.js +0 -504
  48. package/dist/__tests__/native-client.test.js.map +0 -1
  49. package/dist/__tests__/proxy-api.test.d.ts +0 -2
  50. package/dist/__tests__/proxy-api.test.d.ts.map +0 -1
  51. package/dist/__tests__/proxy-api.test.js +0 -310
  52. package/dist/__tests__/proxy-api.test.js.map +0 -1
  53. package/dist/__tests__/sanitize-for-logging.test.d.ts +0 -2
  54. package/dist/__tests__/sanitize-for-logging.test.d.ts.map +0 -1
  55. package/dist/__tests__/sanitize-for-logging.test.js +0 -97
  56. package/dist/__tests__/sanitize-for-logging.test.js.map +0 -1
  57. package/dist/__tests__/signature.test.d.ts +0 -2
  58. package/dist/__tests__/signature.test.d.ts.map +0 -1
  59. package/dist/__tests__/signature.test.js +0 -172
  60. package/dist/__tests__/signature.test.js.map +0 -1
  61. package/dist/__tests__/testing-utils.test.d.ts +0 -2
  62. package/dist/__tests__/testing-utils.test.d.ts.map +0 -1
  63. package/dist/__tests__/testing-utils.test.js +0 -244
  64. package/dist/__tests__/testing-utils.test.js.map +0 -1
  65. package/dist/__tests__/token-manager.test.d.ts +0 -2
  66. package/dist/__tests__/token-manager.test.d.ts.map +0 -1
  67. package/dist/__tests__/token-manager.test.js +0 -528
  68. package/dist/__tests__/token-manager.test.js.map +0 -1
  69. package/dist/discovery/extension-discovery.service.test.d.ts +0 -2
  70. package/dist/discovery/extension-discovery.service.test.d.ts.map +0 -1
  71. package/dist/discovery/extension-discovery.service.test.js +0 -116
  72. package/dist/discovery/extension-discovery.service.test.js.map +0 -1
  73. package/dist/nestjs/channel-app.controller.test.d.ts +0 -2
  74. package/dist/nestjs/channel-app.controller.test.d.ts.map +0 -1
  75. package/dist/nestjs/channel-app.controller.test.js +0 -37
  76. package/dist/nestjs/channel-app.controller.test.js.map +0 -1
  77. package/dist/nestjs/channel-app.service.test.d.ts +0 -2
  78. package/dist/nestjs/channel-app.service.test.d.ts.map +0 -1
  79. package/dist/nestjs/channel-app.service.test.js +0 -583
  80. package/dist/nestjs/channel-app.service.test.js.map +0 -1
@@ -1,56 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { z } from "zod";
3
- import { parseFunctionInputParams } from "../utils/function-input-validator.js";
4
- describe("parseFunctionInputParams", () => {
5
- it("parses valid function input", () => {
6
- const schema = z.object({ quantity: z.number() });
7
- expect(parseFunctionInputParams("extension.cafe.addCartItem", schema, { quantity: 1 })).toEqual({
8
- quantity: 1,
9
- });
10
- });
11
- it("converts Zod input errors to ValidationError", () => {
12
- const schema = z.object({ quantity: z.number() });
13
- expect(() => parseFunctionInputParams("extension.cafe.addCartItem", schema, { quantity: "1" })).toThrowError(expect.objectContaining({
14
- name: "ValidationError",
15
- message: "Invalid input for function extension.cafe.addCartItem",
16
- code: "VALIDATION_ERROR",
17
- details: expect.arrayContaining([
18
- expect.objectContaining({ path: ["quantity"], code: "invalid_type" }),
19
- ]),
20
- }));
21
- });
22
- it("converts Zod errors created by another module instance", () => {
23
- const crossModuleError = Object.assign(new Error("Invalid input"), {
24
- name: "ZodError",
25
- issues: [{ code: "invalid_type", path: ["quantity"] }],
26
- });
27
- const schema = {
28
- parse: () => {
29
- throw crossModuleError;
30
- },
31
- };
32
- expect(() => parseFunctionInputParams("extension.cafe.addCartItem", schema, {})).toThrowError(expect.objectContaining({
33
- name: "ValidationError",
34
- code: "VALIDATION_ERROR",
35
- details: crossModuleError.issues,
36
- }));
37
- });
38
- it("keeps messaging input key normalization", () => {
39
- const schema = z.object({ userId: z.string() });
40
- expect(parseFunctionInputParams("extension.messaging.send", schema, { user_id: "user-1" })).toEqual({ userId: "user-1" });
41
- });
42
- it("does not convert non-Zod errors", () => {
43
- const inputError = new Error("preprocess failed");
44
- const schema = z.preprocess(() => {
45
- throw inputError;
46
- }, z.string());
47
- expect(() => parseFunctionInputParams("extension.example.run", schema, "value")).toThrow(inputError);
48
- });
49
- });
50
- it("returns the Issue invalidInput contract without copying submitted values", () => {
51
- expect(() => parseFunctionInputParams("extension.issue.core.getIssues", z.object({ issueIds: z.array(z.string()) }), { issueIds: "private-token" })).toThrowError(expect.objectContaining({
52
- type: "invalidInput",
53
- data: { type: "invalidInput", message: "Invalid Issue Extension input" },
54
- }));
55
- });
56
- //# sourceMappingURL=function-input-validator.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"function-input-validator.test.js","sourceRoot":"","sources":["../../src/__tests__/function-input-validator.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=native-client.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"native-client.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/native-client.test.ts"],"names":[],"mappings":""}
@@ -1,504 +0,0 @@
1
- import { describe, it, expect, expectTypeOf, vi, beforeEach, afterEach } from "vitest";
2
- import { NativeFunctionClient, NativeFunctionError } from "../native/client.js";
3
- /**
4
- * Helper to create a mock fetch Response
5
- */
6
- function mockFetchResponse(body, status = 200) {
7
- return {
8
- ok: status >= 200 && status < 300,
9
- status,
10
- statusText: status === 200 ? "OK" : "Error",
11
- json: () => Promise.resolve(body),
12
- text: () => Promise.resolve(JSON.stringify(body)),
13
- };
14
- }
15
- function parseFetchBody(mockFetch, callIndex = 0) {
16
- const call = mockFetch.mock.calls[callIndex];
17
- return JSON.parse(call[1].body);
18
- }
19
- function getFetchUrl(mockFetch, callIndex = 0) {
20
- const call = mockFetch.mock.calls[callIndex];
21
- return call[0];
22
- }
23
- function getFetchInit(mockFetch, callIndex = 0) {
24
- const call = mockFetch.mock.calls[callIndex];
25
- return call[1];
26
- }
27
- function createDebugClient() {
28
- return new NativeFunctionClient({
29
- appStoreUrl: "https://test-app-store.example.com",
30
- debug: true,
31
- });
32
- }
33
- describe("NativeFunctionClient", () => {
34
- const APP_ID = "test-app-id";
35
- const APP_SECRET = "test-app-secret";
36
- let client;
37
- let mockFetch;
38
- beforeEach(() => {
39
- client = new NativeFunctionClient({
40
- appStoreUrl: "https://test-app-store.example.com",
41
- });
42
- mockFetch = vi.fn();
43
- globalThis.fetch = mockFetch;
44
- });
45
- afterEach(() => {
46
- vi.restoreAllMocks();
47
- });
48
- // ============================================
49
- // Auth Functions
50
- // ============================================
51
- describe("issueToken", () => {
52
- it("uses the AppStore API host by default", async () => {
53
- const defaultClient = new NativeFunctionClient();
54
- mockFetch.mockResolvedValueOnce(mockFetchResponse({
55
- result: {
56
- accessToken: "access-123",
57
- refreshToken: "refresh-456",
58
- expiresIn: 3600,
59
- },
60
- }));
61
- await defaultClient.issueToken(APP_SECRET);
62
- expect(getFetchUrl(mockFetch)).toBe("https://app-store-api.channel.io/general/v1/native/functions");
63
- });
64
- it("should call issueToken with secret only (app-scoped)", async () => {
65
- const tokenResult = {
66
- accessToken: "access-123",
67
- refreshToken: "refresh-456",
68
- expiresIn: 3600,
69
- };
70
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: tokenResult }));
71
- const result = await client.issueToken(APP_SECRET);
72
- expect(mockFetch).toHaveBeenCalledOnce();
73
- const url = getFetchUrl(mockFetch);
74
- expect(url).toBe("https://test-app-store.example.com/general/v1/native/functions");
75
- const init = getFetchInit(mockFetch);
76
- expect(init.method).toBe("PUT");
77
- const body = parseFetchBody(mockFetch);
78
- expect(body.method).toBe("issueToken");
79
- expect(body.params["secret"]).toBe(APP_SECRET);
80
- expect(body.params["channelId"]).toBeUndefined();
81
- expect(result).toEqual(tokenResult);
82
- });
83
- it("should call issueToken with channelId (channel-scoped)", async () => {
84
- const tokenResult = {
85
- accessToken: "access-789",
86
- refreshToken: "refresh-012",
87
- expiresIn: 3600,
88
- };
89
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: tokenResult }));
90
- const result = await client.issueToken(APP_SECRET, { channelId: "ch-123" });
91
- const body = parseFetchBody(mockFetch);
92
- expect(body.params["channelId"]).toBe("ch-123");
93
- expect(result).toEqual(tokenResult);
94
- });
95
- });
96
- describe("refreshToken", () => {
97
- it("should call refreshToken with the refresh token", async () => {
98
- const tokenResult = {
99
- accessToken: "new-access",
100
- refreshToken: "new-refresh",
101
- expiresIn: 3600,
102
- };
103
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: tokenResult }));
104
- const result = await client.refreshToken("old-refresh-token");
105
- const body = parseFetchBody(mockFetch);
106
- expect(body.method).toBe("refreshToken");
107
- expect(body.params["refreshToken"]).toBe("old-refresh-token");
108
- expect(result).toEqual(tokenResult);
109
- });
110
- });
111
- // ============================================
112
- // Extension Functions
113
- // ============================================
114
- describe("registerExtension", () => {
115
- it("should call registerExtension with appId, extensionName, and systemVersion", async () => {
116
- const registerResult = {
117
- success: true,
118
- extensions: [{ name: "calendar", systemVersion: "v1" }],
119
- };
120
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: registerResult }));
121
- const result = await client.registerExtension(APP_ID, "calendar", "v1", "test-token");
122
- const body = parseFetchBody(mockFetch);
123
- expect(body.method).toBe("registerExtension");
124
- expect(body.params).toEqual({
125
- appId: APP_ID,
126
- systemVersion: "v1",
127
- extensionName: "calendar",
128
- });
129
- expect(result).toEqual(registerResult);
130
- });
131
- it("should return validation errors when registration fails", async () => {
132
- const failResult = {
133
- success: false,
134
- errorMessage: "Invalid extension",
135
- validationErrors: ["Extension name is not allowed"],
136
- };
137
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: failResult }));
138
- const result = await client.registerExtension(APP_ID, "invalid", "v1", "test-token");
139
- expect(result.success).toBe(false);
140
- expect(result.errorMessage).toBe("Invalid extension");
141
- expect(result.validationErrors).toContain("Extension name is not allowed");
142
- });
143
- });
144
- describe("unregisterExtension", () => {
145
- it("should call unregisterExtension with appId, extensionName, and systemVersion", async () => {
146
- const unregisterResult = { success: true };
147
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: unregisterResult }));
148
- const result = await client.unregisterExtension(APP_ID, "calendar", "v1", "test-token");
149
- const body = parseFetchBody(mockFetch);
150
- expect(body.method).toBe("unregisterExtension");
151
- expect(body.params).toEqual({
152
- appId: APP_ID,
153
- systemVersion: "v1",
154
- extensionName: "calendar",
155
- });
156
- expect(result).toEqual(unregisterResult);
157
- });
158
- it("should return error when unregistration fails", async () => {
159
- const failResult = {
160
- success: false,
161
- errorMessage: "Extension not found",
162
- };
163
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: failResult }));
164
- const result = await client.unregisterExtension(APP_ID, "nonexistent", "v1", "test-token");
165
- expect(result.success).toBe(false);
166
- expect(result.errorMessage).toBe("Extension not found");
167
- });
168
- });
169
- // ============================================
170
- // ALF Task Functions
171
- // ============================================
172
- describe("getAlfTaskVersions", () => {
173
- it("should call getAlfTaskVersions with appId and token", async () => {
174
- const versionsResult = {
175
- success: true,
176
- tasks: [
177
- { id: "task-1", name: "Auto-categorize", version: "v1.0.0" },
178
- { id: "task-2", name: "Auto-reply", version: "v2.1.0" },
179
- ],
180
- };
181
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: versionsResult }));
182
- const result = await client.getAlfTaskVersions(APP_ID, "test-token");
183
- const body = parseFetchBody(mockFetch);
184
- expect(body.method).toBe("getAlfTaskVersions");
185
- expect(body.params).toEqual({ appId: APP_ID });
186
- const init = getFetchInit(mockFetch);
187
- expect(init.headers["x-access-token"]).toBe("test-token");
188
- expect(result).toEqual(versionsResult);
189
- expect(result.tasks).toHaveLength(2);
190
- expect(result.tasks[0]?.name).toBe("Auto-categorize");
191
- });
192
- it("should return empty tasks on error", async () => {
193
- const failResult = {
194
- success: false,
195
- errorMessage: "App not found",
196
- tasks: [],
197
- };
198
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: failResult }));
199
- const result = await client.getAlfTaskVersions(APP_ID, "test-token");
200
- expect(result.success).toBe(false);
201
- expect(result.tasks).toEqual([]);
202
- });
203
- });
204
- // ============================================
205
- // App Notebook Functions
206
- // ============================================
207
- describe("getAppNotebookVersions", () => {
208
- it("should call getAppNotebookVersions with appId and token", async () => {
209
- const versionsResult = {
210
- success: true,
211
- notebooks: [
212
- {
213
- notebookKey: "sales",
214
- version: 3,
215
- latestRevisionId: "rev-1",
216
- updatedAt: "2026-07-13T00:00:00Z",
217
- },
218
- ],
219
- };
220
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: versionsResult }));
221
- const result = await client.getAppNotebookVersions(APP_ID, "test-token");
222
- const body = parseFetchBody(mockFetch);
223
- expect(body.method).toBe("getAppNotebookVersions");
224
- expect(body.params).toEqual({ appId: APP_ID });
225
- const init = getFetchInit(mockFetch);
226
- expect(init.headers["x-access-token"]).toBe("test-token");
227
- expect(result).toEqual(versionsResult);
228
- expect(result.notebooks[0]?.notebookKey).toBe("sales");
229
- });
230
- });
231
- describe("prepareAppMediaUpload", () => {
232
- it("should prepare a public Media upload with a channel-scoped token", async () => {
233
- const uploadTarget = {
234
- uploadUrl: "https://media.example.com/v1/app-store/media/file",
235
- uploadMethod: "POST",
236
- headers: { Accept: "application/json" },
237
- bodyType: "multipart",
238
- fileField: "file",
239
- fileName: "guide.pdf",
240
- formFields: { managerId: "manager-1" },
241
- };
242
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: uploadTarget }));
243
- const result = await client.prepareAppMediaUpload({
244
- managerId: "manager-1",
245
- fileName: "guide.pdf",
246
- contentType: "application/pdf",
247
- size: 1024,
248
- }, "channel-token");
249
- expect(parseFetchBody(mockFetch)).toEqual({
250
- method: "prepareAppMediaUpload",
251
- params: {
252
- managerId: "manager-1",
253
- fileName: "guide.pdf",
254
- contentType: "application/pdf",
255
- size: 1024,
256
- },
257
- });
258
- const init = getFetchInit(mockFetch);
259
- expect(init.headers["x-access-token"]).toBe("channel-token");
260
- expect(result).toEqual(uploadTarget);
261
- expectTypeOf(result.formFields).toEqualTypeOf();
262
- });
263
- });
264
- // ============================================
265
- // AppDataTable Functions
266
- // ============================================
267
- describe("AppDataTable functions", () => {
268
- it("should call createAppDataTable with an app-scoped token", async () => {
269
- const expected = { requestId: "req-1" };
270
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: expected }));
271
- const result = await client.createAppDataTable({
272
- appId: APP_ID,
273
- tableName: "orders",
274
- columns: [{ key: "id", name: "ID", type: "OPERATOR_TYPE_STRING" }],
275
- primaryKeyColumns: ["id"],
276
- }, "app-token");
277
- const body = parseFetchBody(mockFetch);
278
- expect(body.method).toBe("createAppDataTable");
279
- expect(body.params).toEqual({
280
- appId: APP_ID,
281
- tableName: "orders",
282
- columns: [{ key: "id", name: "ID", type: "OPERATOR_TYPE_STRING" }],
283
- primaryKeyColumns: ["id"],
284
- });
285
- const init = getFetchInit(mockFetch);
286
- expect(init.headers["x-access-token"]).toBe("app-token");
287
- expect(result).toEqual(expected);
288
- });
289
- it("should call upsertAppDataTableRows with an app-scoped token", async () => {
290
- const expected = {
291
- requestId: "req-2",
292
- acceptedRowCount: 1,
293
- };
294
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: expected }));
295
- const result = await client.upsertAppDataTableRows({
296
- channelId: "ch-1",
297
- appId: APP_ID,
298
- tableName: "orders",
299
- rows: [{ id: "order-1", channelId: "ch-1" }],
300
- }, "app-token");
301
- const body = parseFetchBody(mockFetch);
302
- expect(body.method).toBe("upsertAppDataTableRows");
303
- expect(body.params).toEqual({
304
- channelId: "ch-1",
305
- appId: APP_ID,
306
- tableName: "orders",
307
- rows: [{ id: "order-1", channelId: "ch-1" }],
308
- });
309
- const init = getFetchInit(mockFetch);
310
- expect(init.headers["x-access-token"]).toBe("app-token");
311
- expect(result).toEqual(expected);
312
- });
313
- });
314
- describe("OAuth manager target functions", () => {
315
- it("should discover active OAuth manager targets with an app token", async () => {
316
- const expected = {
317
- targets: [{ channelId: "channel-1", managerId: "manager-1" }],
318
- nextCursor: "cursor-2",
319
- };
320
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: expected }));
321
- const result = await client.listActiveOAuthManagerTargets({ limit: 500, cursor: "cursor-1" }, "app-token");
322
- const body = parseFetchBody(mockFetch);
323
- expect(body).toEqual({
324
- method: "listActiveOAuthManagerTargets",
325
- params: { limit: 500, cursor: "cursor-1" },
326
- });
327
- const init = getFetchInit(mockFetch);
328
- expect(init.headers["x-access-token"]).toBe("app-token");
329
- expect(result).toEqual(expected);
330
- });
331
- });
332
- // ============================================
333
- // Typed Native Function Calls
334
- // ============================================
335
- describe("typed native function calls", () => {
336
- it("should type and call findOrCreateContactAndUser with token", async () => {
337
- const expected = {
338
- contact: { id: "contact-1" },
339
- user: { id: "user-1" },
340
- };
341
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: expected }));
342
- const result = await client.callNativeFunctionWithToken("findOrCreateContactAndUser", {
343
- channelId: "ch-1",
344
- mediumType: "app",
345
- mediumId: "app-1",
346
- address: "customer-1",
347
- defaultMediumLanguage: "ko",
348
- }, "test-token");
349
- expectTypeOf(result.user.id).toEqualTypeOf();
350
- const body = parseFetchBody(mockFetch);
351
- expect(body.method).toBe("findOrCreateContactAndUser");
352
- expect(body.params).toEqual({
353
- channelId: "ch-1",
354
- mediumType: "app",
355
- mediumId: "app-1",
356
- address: "customer-1",
357
- defaultMediumLanguage: "ko",
358
- });
359
- const init = getFetchInit(mockFetch);
360
- expect(init.headers["x-access-token"]).toBe("test-token");
361
- expect(result).toEqual(expected);
362
- });
363
- it("should type and call writeUserChatMessage with message options", async () => {
364
- const expected = { message: { id: "message-1" } };
365
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: expected }));
366
- const result = await client.callNativeFunctionWithToken("writeUserChatMessage", {
367
- channelId: "ch-1",
368
- userChatId: "user-chat-1",
369
- dto: {
370
- plainText: "hello",
371
- botName: "Bot",
372
- options: ["MESSAGE_OPTION_PRIVATE", "MESSAGE_OPTION_DO_NOT_UPDATE_DESK"],
373
- },
374
- }, "test-token");
375
- expectTypeOf(result.message.id).toEqualTypeOf();
376
- const body = parseFetchBody(mockFetch);
377
- expect(body.method).toBe("writeUserChatMessage");
378
- expect(body.params["dto"]).toEqual({
379
- plainText: "hello",
380
- botName: "Bot",
381
- options: ["MESSAGE_OPTION_PRIVATE", "MESSAGE_OPTION_DO_NOT_UPDATE_DESK"],
382
- });
383
- expect(result).toEqual(expected);
384
- });
385
- it("should call the Manager private-note method with its one-purpose credential", async () => {
386
- const expected = { message: { id: "message-private-1" } };
387
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: expected }));
388
- const result = await client.writeUserChatPrivateNoteWithManagerCredential({
389
- channelId: "ch-1",
390
- userChatId: "user-chat-1",
391
- requestId: "request-1",
392
- lifecycleRevision: 7,
393
- dto: {
394
- plainText: "private note",
395
- customPayload: { source: "synthetic-slack-reply" },
396
- },
397
- }, "manager-private-note-credential");
398
- const body = parseFetchBody(mockFetch);
399
- expect(body).toEqual({
400
- method: "writeUserChatPrivateNoteWithManagerCredential",
401
- params: {
402
- channelId: "ch-1",
403
- userChatId: "user-chat-1",
404
- requestId: "request-1",
405
- lifecycleRevision: 7,
406
- dto: {
407
- plainText: "private note",
408
- customPayload: { source: "synthetic-slack-reply" },
409
- },
410
- },
411
- });
412
- const init = getFetchInit(mockFetch);
413
- expect(init.headers["x-access-token"]).toBe("manager-private-note-credential");
414
- expect(result).toEqual(expected);
415
- });
416
- it("should forward an abort signal to authenticated native reads", async () => {
417
- const controller = new AbortController();
418
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: { userChat: { id: "user-chat-1", channelId: "ch-1" } } }));
419
- await client.callNativeFunctionWithToken("getUserChat", { channelId: "ch-1", userChatId: "user-chat-1" }, "test-token", { signal: controller.signal });
420
- expect(getFetchInit(mockFetch).signal).toBe(controller.signal);
421
- });
422
- it("should not debug-log Manager private-note request or response content", async () => {
423
- const debugClient = createDebugClient();
424
- const debugSpy = vi.spyOn(console, "debug").mockImplementation(() => undefined);
425
- mockFetch.mockResolvedValueOnce(mockFetchResponse({
426
- result: { message: { id: "message-private-1", plainText: "core-private-response" } },
427
- }));
428
- await debugClient.writeUserChatPrivateNoteWithManagerCredential({
429
- channelId: "ch-1",
430
- userChatId: "user-chat-1",
431
- requestId: "request-1",
432
- lifecycleRevision: 7,
433
- dto: { plainText: "slack-private-request" },
434
- }, "manager-private-note-credential");
435
- const debugOutput = JSON.stringify(debugSpy.mock.calls);
436
- expect(debugOutput).not.toContain("slack-private-request");
437
- expect(debugOutput).not.toContain("core-private-response");
438
- });
439
- });
440
- // ============================================
441
- // Error Handling
442
- // ============================================
443
- describe("error handling", () => {
444
- it("should throw NativeFunctionError on HTTP error", async () => {
445
- mockFetch.mockResolvedValue(mockFetchResponse({ error: "not found" }, 404));
446
- await expect(client.issueToken(APP_SECRET)).rejects.toThrow(NativeFunctionError);
447
- });
448
- it("should throw NativeFunctionError on API error response", async () => {
449
- mockFetch.mockResolvedValue(mockFetchResponse({
450
- error: { code: 400, message: "Invalid params" },
451
- }));
452
- await expect(client.getAlfTaskVersions(APP_ID, "test-token")).rejects.toThrow("Invalid params");
453
- });
454
- });
455
- describe("debug logging", () => {
456
- it("should encode app IDs used in URL paths", async () => {
457
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: { ok: true } }));
458
- await client.callAppFunction("app/with special?characters", "syncContacts", {}, {}, "rbac-access-token");
459
- expect(getFetchUrl(mockFetch)).toBe("https://test-app-store.example.com/general/v1/apps/app%2Fwith%20special%3Fcharacters/functions");
460
- });
461
- it("should redact secrets and token values in debug logs", async () => {
462
- const debugClient = createDebugClient();
463
- const debugSpy = vi.spyOn(console, "debug").mockImplementation(() => { });
464
- const tokenResult = {
465
- accessToken: "access-123",
466
- refreshToken: "refresh-456",
467
- expiresIn: 3600,
468
- };
469
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: tokenResult }));
470
- await debugClient.issueToken(APP_SECRET);
471
- expect(debugSpy).toHaveBeenNthCalledWith(1, "[NativeFunctionClient] Calling native function: issueToken", { secret: "[REDACTED]" });
472
- expect(debugSpy).toHaveBeenNthCalledWith(2, "[NativeFunctionClient] issueToken response", {
473
- accessToken: "[REDACTED]",
474
- refreshToken: "[REDACTED]",
475
- expiresIn: 3600,
476
- });
477
- });
478
- it("should redact nested app function credentials in debug logs", async () => {
479
- const debugClient = createDebugClient();
480
- const debugSpy = vi.spyOn(console, "debug").mockImplementation(() => { });
481
- mockFetch.mockResolvedValueOnce(mockFetchResponse({ result: { ok: true } }));
482
- await debugClient.callAppFunction(APP_ID, "syncContacts", { contactId: "contact-1" }, {
483
- channelId: "ch-1",
484
- authToken: "auth-token-123",
485
- apiCredentials: {
486
- accessKey: "access-key",
487
- secretKey: "secret-key",
488
- },
489
- }, "rbac-access-token");
490
- expect(debugSpy).toHaveBeenNthCalledWith(1, `[NativeFunctionClient] Calling app function: ${APP_ID}/syncContacts`, {
491
- params: { contactId: "contact-1" },
492
- context: {
493
- channelId: "ch-1",
494
- authToken: "[REDACTED]",
495
- apiCredentials: "[REDACTED]",
496
- },
497
- });
498
- expect(debugSpy).toHaveBeenNthCalledWith(2, "[NativeFunctionClient] syncContacts response", {
499
- ok: true,
500
- });
501
- });
502
- });
503
- });
504
- //# sourceMappingURL=native-client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"native-client.test.js","sourceRoot":"","sources":["../../src/__tests__/native-client.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=proxy-api.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy-api.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/proxy-api.test.ts"],"names":[],"mappings":""}