@channel.io/app-sdk-server 0.2.0 → 0.3.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 (55) hide show
  1. package/dist/__tests__/native-client.test.d.ts +2 -0
  2. package/dist/__tests__/native-client.test.d.ts.map +1 -0
  3. package/dist/__tests__/native-client.test.js +256 -0
  4. package/dist/__tests__/native-client.test.js.map +1 -0
  5. package/dist/__tests__/proxy-api.test.d.ts +2 -0
  6. package/dist/__tests__/proxy-api.test.d.ts.map +1 -0
  7. package/dist/__tests__/proxy-api.test.js +273 -0
  8. package/dist/__tests__/proxy-api.test.js.map +1 -0
  9. package/dist/__tests__/signature.test.d.ts +2 -0
  10. package/dist/__tests__/signature.test.d.ts.map +1 -0
  11. package/dist/__tests__/signature.test.js +172 -0
  12. package/dist/__tests__/signature.test.js.map +1 -0
  13. package/dist/__tests__/token-manager.test.d.ts +2 -0
  14. package/dist/__tests__/token-manager.test.d.ts.map +1 -0
  15. package/dist/__tests__/token-manager.test.js +624 -0
  16. package/dist/__tests__/token-manager.test.js.map +1 -0
  17. package/dist/decorators/extension-names.d.ts +1 -1
  18. package/dist/decorators/extension-names.d.ts.map +1 -1
  19. package/dist/decorators/extension-names.js +1 -0
  20. package/dist/decorators/extension-names.js.map +1 -1
  21. package/dist/guards/signature.middleware.d.ts +25 -16
  22. package/dist/guards/signature.middleware.d.ts.map +1 -1
  23. package/dist/guards/signature.middleware.js +35 -19
  24. package/dist/guards/signature.middleware.js.map +1 -1
  25. package/dist/native/client.d.ts +55 -1
  26. package/dist/native/client.d.ts.map +1 -1
  27. package/dist/native/client.js +89 -0
  28. package/dist/native/client.js.map +1 -1
  29. package/dist/native/index.d.ts +2 -0
  30. package/dist/native/index.d.ts.map +1 -1
  31. package/dist/native/index.js +2 -0
  32. package/dist/native/index.js.map +1 -1
  33. package/dist/native/proxy-api.d.ts +110 -0
  34. package/dist/native/proxy-api.d.ts.map +1 -0
  35. package/dist/native/proxy-api.js +159 -0
  36. package/dist/native/proxy-api.js.map +1 -0
  37. package/dist/native/proxy-api.types.d.ts +232 -0
  38. package/dist/native/proxy-api.types.d.ts.map +1 -0
  39. package/dist/native/proxy-api.types.js +10 -0
  40. package/dist/native/proxy-api.types.js.map +1 -0
  41. package/dist/native/types.d.ts +108 -0
  42. package/dist/native/types.d.ts.map +1 -1
  43. package/dist/nestjs/channel-app.service.d.ts +21 -2
  44. package/dist/nestjs/channel-app.service.d.ts.map +1 -1
  45. package/dist/nestjs/channel-app.service.js +73 -36
  46. package/dist/nestjs/channel-app.service.js.map +1 -1
  47. package/dist/nestjs/channel-app.service.test.d.ts +2 -0
  48. package/dist/nestjs/channel-app.service.test.d.ts.map +1 -0
  49. package/dist/nestjs/channel-app.service.test.js +240 -0
  50. package/dist/nestjs/channel-app.service.test.js.map +1 -0
  51. package/dist/token/manager.d.ts +33 -1
  52. package/dist/token/manager.d.ts.map +1 -1
  53. package/dist/token/manager.js +75 -13
  54. package/dist/token/manager.js.map +1 -1
  55. package/package.json +2 -2
@@ -0,0 +1,172 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { createHmac } from "crypto";
3
+ import { UnauthorizedException } from "@nestjs/common";
4
+ import { verifySignature, SignatureGuard, SIGNATURE_HEADER } from "../guards/signature.guard.js";
5
+ /**
6
+ * Helper: compute HMAC-SHA256 signature the same way ch-app-store does.
7
+ * signingKey is hex-encoded, body is raw bytes, result is base64.
8
+ */
9
+ function computeSignature(signingKey, body) {
10
+ const keyBuffer = Buffer.from(signingKey, "hex");
11
+ return createHmac("sha256", keyBuffer).update(body).digest("base64");
12
+ }
13
+ /** 64-char hex signing key for tests */
14
+ const VALID_HEX_KEY = "ab".repeat(32);
15
+ describe("verifySignature", () => {
16
+ it("should return true for a valid signature over raw body", () => {
17
+ const body = Buffer.from('{"method":"hello","params":{"name":"world"}}');
18
+ const sig = computeSignature(VALID_HEX_KEY, body);
19
+ expect(verifySignature(sig, VALID_HEX_KEY, body)).toBe(true);
20
+ });
21
+ it("should return false when body bytes differ (re-serialized JSON)", () => {
22
+ // ch-app-store signs the raw bytes with specific whitespace
23
+ const rawWithSpaces = Buffer.from('{ "method" : "hello" , "params" : { "name" : "world" } }');
24
+ const sig = computeSignature(VALID_HEX_KEY, rawWithSpaces);
25
+ const parsed = JSON.parse(rawWithSpaces.toString());
26
+ const reserialized = Buffer.from(JSON.stringify(parsed));
27
+ // The re-serialized body loses whitespace → signature mismatch
28
+ expect(verifySignature(sig, VALID_HEX_KEY, reserialized)).toBe(false);
29
+ // But raw body works
30
+ expect(verifySignature(sig, VALID_HEX_KEY, rawWithSpaces)).toBe(true);
31
+ });
32
+ it("should return false for an invalid signature", () => {
33
+ const body = Buffer.from('{"key":"value"}');
34
+ expect(verifySignature("invalid-signature", VALID_HEX_KEY, body)).toBe(false);
35
+ });
36
+ it("should return false for wrong signing key", () => {
37
+ const body = Buffer.from('{"key":"value"}');
38
+ const sig = computeSignature(VALID_HEX_KEY, body);
39
+ const wrongKey = "cd".repeat(32);
40
+ expect(verifySignature(sig, wrongKey, body)).toBe(false);
41
+ });
42
+ it("should return false for empty signature", () => {
43
+ const body = Buffer.from("{}");
44
+ expect(verifySignature("", VALID_HEX_KEY, body)).toBe(false);
45
+ });
46
+ it("should return false for malformed signing key", () => {
47
+ const body = Buffer.from("{}");
48
+ // "zz" is not valid hex, Buffer.from will produce empty/garbage
49
+ expect(verifySignature("anysig", "not-hex!", body)).toBe(false);
50
+ });
51
+ });
52
+ describe("SignatureGuard", () => {
53
+ let guard;
54
+ let options;
55
+ function createMockExecutionContext(overrides) {
56
+ const request = {
57
+ headers: overrides.headers ?? {},
58
+ rawBody: overrides.rawBody,
59
+ };
60
+ return {
61
+ switchToHttp: () => ({
62
+ getRequest: () => request,
63
+ getResponse: () => ({}),
64
+ getNext: () => vi.fn(),
65
+ }),
66
+ getClass: vi.fn(),
67
+ getHandler: vi.fn(),
68
+ getArgs: vi.fn(),
69
+ getArgByIndex: vi.fn(),
70
+ switchToRpc: vi.fn(),
71
+ switchToWs: vi.fn(),
72
+ getType: vi.fn(),
73
+ };
74
+ }
75
+ beforeEach(() => {
76
+ options = {
77
+ appId: "test-app",
78
+ appSecret: VALID_HEX_KEY,
79
+ };
80
+ // Construct guard with injected options
81
+ guard = new SignatureGuard(options);
82
+ });
83
+ it("should pass when signature is valid", () => {
84
+ const body = Buffer.from('{"method":"test","params":{}}');
85
+ const sig = computeSignature(VALID_HEX_KEY, body);
86
+ const ctx = createMockExecutionContext({
87
+ headers: { [SIGNATURE_HEADER]: sig },
88
+ rawBody: body,
89
+ });
90
+ expect(guard.canActivate(ctx)).toBe(true);
91
+ });
92
+ it("should throw when X-Signature header is missing", () => {
93
+ const ctx = createMockExecutionContext({
94
+ headers: {},
95
+ rawBody: Buffer.from("{}"),
96
+ });
97
+ expect(() => guard.canActivate(ctx)).toThrow(UnauthorizedException);
98
+ });
99
+ it("should throw when rawBody is not available", () => {
100
+ const ctx = createMockExecutionContext({
101
+ headers: { [SIGNATURE_HEADER]: "some-sig" },
102
+ rawBody: undefined,
103
+ });
104
+ expect(() => guard.canActivate(ctx)).toThrow("raw body not available");
105
+ });
106
+ it("should throw when signature is invalid", () => {
107
+ const body = Buffer.from('{"method":"test"}');
108
+ const ctx = createMockExecutionContext({
109
+ headers: { [SIGNATURE_HEADER]: "wrong-signature" },
110
+ rawBody: body,
111
+ });
112
+ expect(() => guard.canActivate(ctx)).toThrow("Invalid signature");
113
+ });
114
+ it("should skip verification when skipSignatureVerification is true", () => {
115
+ options.skipSignatureVerification = true;
116
+ guard = new SignatureGuard(options);
117
+ const ctx = createMockExecutionContext({
118
+ headers: {}, // no signature header
119
+ rawBody: undefined,
120
+ });
121
+ expect(guard.canActivate(ctx)).toBe(true);
122
+ });
123
+ it("should use signingKey over appSecret when both are provided", () => {
124
+ const dedicatedKey = "cd".repeat(32);
125
+ options.signingKey = dedicatedKey;
126
+ guard = new SignatureGuard(options);
127
+ const body = Buffer.from('{"data":"test"}');
128
+ const sig = computeSignature(dedicatedKey, body);
129
+ const ctx = createMockExecutionContext({
130
+ headers: { [SIGNATURE_HEADER]: sig },
131
+ rawBody: body,
132
+ });
133
+ expect(guard.canActivate(ctx)).toBe(true);
134
+ // Signature computed with appSecret should NOT pass
135
+ const wrongSig = computeSignature(VALID_HEX_KEY, body);
136
+ const ctx2 = createMockExecutionContext({
137
+ headers: { [SIGNATURE_HEADER]: wrongSig },
138
+ rawBody: body,
139
+ });
140
+ expect(() => guard.canActivate(ctx2)).toThrow("Invalid signature");
141
+ });
142
+ it("should throw when no signing key is configured", () => {
143
+ const noKeyOptions = {
144
+ appId: "test-app",
145
+ appSecret: undefined,
146
+ };
147
+ guard = new SignatureGuard(noKeyOptions);
148
+ const ctx = createMockExecutionContext({
149
+ headers: { [SIGNATURE_HEADER]: "some-sig" },
150
+ rawBody: Buffer.from("{}"),
151
+ });
152
+ expect(() => guard.canActivate(ctx)).toThrow("not configured");
153
+ });
154
+ it("should verify using raw body bytes, not re-serialized JSON", () => {
155
+ // This is the core bug scenario: ch-app-store sends JSON with specific formatting
156
+ // If SDK re-serializes with JSON.stringify, the signature won't match
157
+ const rawJson = '{ "method" : "test" , "params" : {} }';
158
+ const rawBody = Buffer.from(rawJson);
159
+ const sig = computeSignature(VALID_HEX_KEY, rawBody);
160
+ // Guard uses rawBody directly → should pass
161
+ const ctx = createMockExecutionContext({
162
+ headers: { [SIGNATURE_HEADER]: sig },
163
+ rawBody: rawBody,
164
+ });
165
+ expect(guard.canActivate(ctx)).toBe(true);
166
+ // If we were to use JSON.stringify(JSON.parse(rawJson)), it would fail
167
+ const reserialized = Buffer.from(JSON.stringify(JSON.parse(rawJson)));
168
+ expect(reserialized.toString()).not.toBe(rawJson); // confirm they differ
169
+ expect(verifySignature(sig, VALID_HEX_KEY, reserialized)).toBe(false);
170
+ });
171
+ });
172
+ //# sourceMappingURL=signature.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.test.js","sourceRoot":"","sources":["../../src/__tests__/signature.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=token-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/token-manager.test.ts"],"names":[],"mappings":""}