@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.
- package/dist/__tests__/native-client.test.d.ts +2 -0
- package/dist/__tests__/native-client.test.d.ts.map +1 -0
- package/dist/__tests__/native-client.test.js +256 -0
- package/dist/__tests__/native-client.test.js.map +1 -0
- package/dist/__tests__/proxy-api.test.d.ts +2 -0
- package/dist/__tests__/proxy-api.test.d.ts.map +1 -0
- package/dist/__tests__/proxy-api.test.js +273 -0
- package/dist/__tests__/proxy-api.test.js.map +1 -0
- package/dist/__tests__/signature.test.d.ts +2 -0
- package/dist/__tests__/signature.test.d.ts.map +1 -0
- package/dist/__tests__/signature.test.js +172 -0
- package/dist/__tests__/signature.test.js.map +1 -0
- package/dist/__tests__/token-manager.test.d.ts +2 -0
- package/dist/__tests__/token-manager.test.d.ts.map +1 -0
- package/dist/__tests__/token-manager.test.js +624 -0
- package/dist/__tests__/token-manager.test.js.map +1 -0
- package/dist/decorators/extension-names.d.ts +1 -1
- package/dist/decorators/extension-names.d.ts.map +1 -1
- package/dist/decorators/extension-names.js +1 -0
- package/dist/decorators/extension-names.js.map +1 -1
- package/dist/guards/signature.middleware.d.ts +25 -16
- package/dist/guards/signature.middleware.d.ts.map +1 -1
- package/dist/guards/signature.middleware.js +35 -19
- package/dist/guards/signature.middleware.js.map +1 -1
- package/dist/native/client.d.ts +55 -1
- package/dist/native/client.d.ts.map +1 -1
- package/dist/native/client.js +89 -0
- package/dist/native/client.js.map +1 -1
- package/dist/native/index.d.ts +2 -0
- package/dist/native/index.d.ts.map +1 -1
- package/dist/native/index.js +2 -0
- package/dist/native/index.js.map +1 -1
- package/dist/native/proxy-api.d.ts +110 -0
- package/dist/native/proxy-api.d.ts.map +1 -0
- package/dist/native/proxy-api.js +159 -0
- package/dist/native/proxy-api.js.map +1 -0
- package/dist/native/proxy-api.types.d.ts +232 -0
- package/dist/native/proxy-api.types.d.ts.map +1 -0
- package/dist/native/proxy-api.types.js +10 -0
- package/dist/native/proxy-api.types.js.map +1 -0
- package/dist/native/types.d.ts +108 -0
- package/dist/native/types.d.ts.map +1 -1
- package/dist/nestjs/channel-app.service.d.ts +21 -2
- package/dist/nestjs/channel-app.service.d.ts.map +1 -1
- package/dist/nestjs/channel-app.service.js +73 -36
- package/dist/nestjs/channel-app.service.js.map +1 -1
- package/dist/nestjs/channel-app.service.test.d.ts +2 -0
- package/dist/nestjs/channel-app.service.test.d.ts.map +1 -0
- package/dist/nestjs/channel-app.service.test.js +240 -0
- package/dist/nestjs/channel-app.service.test.js.map +1 -0
- package/dist/token/manager.d.ts +33 -1
- package/dist/token/manager.d.ts.map +1 -1
- package/dist/token/manager.js +75 -13
- package/dist/token/manager.js.map +1 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"token-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/token-manager.test.ts"],"names":[],"mappings":""}
|