@peerbit/server 7.0.1 → 8.0.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 (49) hide show
  1. package/dist/src/cli.d.ts.map +1 -1
  2. package/dist/src/cli.js +87 -7
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/client.d.ts +2 -0
  5. package/dist/src/client.d.ts.map +1 -1
  6. package/dist/src/client.js +83 -6
  7. package/dist/src/client.js.map +1 -1
  8. package/dist/src/remotes.d.ts +2 -0
  9. package/dist/src/remotes.d.ts.map +1 -1
  10. package/dist/src/remotes.js +8 -1
  11. package/dist/src/remotes.js.map +1 -1
  12. package/dist/src/routes.d.ts +1 -0
  13. package/dist/src/routes.d.ts.map +1 -1
  14. package/dist/src/routes.js +1 -0
  15. package/dist/src/routes.js.map +1 -1
  16. package/dist/src/server.d.ts +8 -0
  17. package/dist/src/server.d.ts.map +1 -1
  18. package/dist/src/server.js +83 -20
  19. package/dist/src/server.js.map +1 -1
  20. package/dist/src/signed-request.d.ts +77 -3
  21. package/dist/src/signed-request.d.ts.map +1 -1
  22. package/dist/src/signed-request.js +420 -39
  23. package/dist/src/signed-request.js.map +1 -1
  24. package/dist/src/trust.d.ts.map +1 -1
  25. package/dist/src/trust.js +1 -0
  26. package/dist/src/trust.js.map +1 -1
  27. package/dist/test/api.spec.js +359 -3
  28. package/dist/test/api.spec.js.map +1 -1
  29. package/dist/test/cli.spec.js +90 -1
  30. package/dist/test/cli.spec.js.map +1 -1
  31. package/dist/test/remotes.spec.js +65 -1
  32. package/dist/test/remotes.spec.js.map +1 -1
  33. package/dist/test/signed-request.spec.js +204 -23
  34. package/dist/test/signed-request.spec.js.map +1 -1
  35. package/dist/test/trust.spec.d.ts +2 -0
  36. package/dist/test/trust.spec.d.ts.map +1 -0
  37. package/dist/test/trust.spec.js +29 -0
  38. package/dist/test/trust.spec.js.map +1 -0
  39. package/dist/tsconfig.tsbuildinfo +1 -1
  40. package/dist/ui/assets/{index-CjZwCewh.js → index-DS8hXn9k.js} +6 -6
  41. package/dist/ui/index.html +1 -1
  42. package/package.json +6 -6
  43. package/src/cli.ts +102 -8
  44. package/src/client.ts +98 -10
  45. package/src/remotes.ts +12 -1
  46. package/src/routes.ts +1 -0
  47. package/src/server.ts +123 -21
  48. package/src/signed-request.ts +564 -50
  49. package/src/trust.ts +1 -0
@@ -1,54 +1,435 @@
1
1
  import { BinaryWriter, deserialize, serialize } from "@dao-xyz/borsh";
2
- import { SignatureWithKey, fromBase64, toBase64, verify, } from "@peerbit/crypto";
3
- const SIGNATURE_KEY = "X-Peerbit-Signature";
4
- const SIGNATURE_TIME_KEY = "X-Peerbit-Signature-Time";
5
- export const signRequest = async (headers, method, path, data, keypair) => {
6
- const sigTimestamp = Math.round(new Date().getTime() / 1000).toString();
7
- const write = new BinaryWriter();
8
- if (!method) {
9
- throw new Error("Expecting method");
10
- }
11
- if (!path) {
12
- throw new Error("Expecting path");
13
- }
14
- write.string(method.toLowerCase() + path.toLowerCase() + sigTimestamp + (data || ""));
15
- const signature = await keypair.sign(write.finalize());
16
- headers[SIGNATURE_TIME_KEY] = sigTimestamp;
2
+ import { SignatureWithKey, fromBase64, randomBytes, sha256Sync, toBase64, verify, } from "@peerbit/crypto";
3
+ export const SIGNED_REQUEST_VERSION = "2";
4
+ export const SIGNATURE_KEY = "X-Peerbit-Signature";
5
+ export const SIGNATURE_VERSION_KEY = "X-Peerbit-Signature-Version";
6
+ export const SIGNATURE_TIME_KEY = "X-Peerbit-Signature-Time";
7
+ export const SIGNATURE_NONCE_KEY = "X-Peerbit-Signature-Nonce";
8
+ export const SIGNATURE_SERVER_KEY = "X-Peerbit-Signature-Server";
9
+ export const SIGNATURE_BOOT_KEY = "X-Peerbit-Signature-Boot";
10
+ export const SIGNED_CONTENT_LENGTH_KEY = "X-Peerbit-Content-Length";
11
+ export const SIGNED_CONTENT_SHA256_KEY = "X-Peerbit-Content-SHA256";
12
+ const REQUEST_DOMAIN = "peerbit/server/http-request/v2";
13
+ const DESCRIPTOR_DOMAIN = "peerbit/server/http-auth-descriptor/v2";
14
+ const DECIMAL_PATTERN = /^(0|[1-9][0-9]{0,15})$/;
15
+ const BASE64_32_PATTERN = /^[A-Za-z0-9+/]{43}=$/;
16
+ const METHOD_PATTERN = /^[A-Z]+$/;
17
+ const encoder = new TextEncoder();
18
+ const decoder = new TextDecoder("utf-8", { fatal: true });
19
+ const DEFAULT_MAX_PAST_AGE_SECONDS = 5 * 60;
20
+ const DEFAULT_MAX_FUTURE_SKEW_SECONDS = 60;
21
+ export const DEFAULT_MAX_SIGNED_BODY_BYTES = 64 * 1024 * 1024;
22
+ const DEFAULT_MAX_REPLAY_ENTRIES = 10_000;
23
+ export class SignedRequestError extends Error {
24
+ }
25
+ export class ReplayRequestError extends SignedRequestError {
26
+ }
27
+ export class ReplayCapacityError extends SignedRequestError {
28
+ }
29
+ export class RequestBodyTooLargeError extends SignedRequestError {
30
+ }
31
+ const frame = (domain, fields) => {
32
+ const writer = new BinaryWriter();
33
+ writer.string(domain);
34
+ for (const value of fields) {
35
+ writer.string(value);
36
+ }
37
+ return writer.finalize();
38
+ };
39
+ const requestFrame = (properties) => frame(REQUEST_DOMAIN, [
40
+ SIGNED_REQUEST_VERSION,
41
+ properties.serverPeerId,
42
+ properties.bootId,
43
+ properties.timestamp,
44
+ properties.nonce,
45
+ properties.method,
46
+ properties.target,
47
+ properties.bodyLength,
48
+ properties.bodyHash,
49
+ ]);
50
+ const descriptorFrame = (descriptor) => frame(DESCRIPTOR_DOMAIN, [
51
+ descriptor.version,
52
+ descriptor.serverPeerId,
53
+ descriptor.bootId,
54
+ descriptor.serverTime,
55
+ ]);
56
+ const bodyBytes = (data) => {
57
+ if (data == null)
58
+ return new Uint8Array();
59
+ return typeof data === "string" ? encoder.encode(data) : data;
60
+ };
61
+ const parseCanonicalUnsigned = (value, name, maximum) => {
62
+ if (!DECIMAL_PATTERN.test(value)) {
63
+ throw new SignedRequestError(`Invalid ${name}`);
64
+ }
65
+ const parsed = BigInt(value);
66
+ if (maximum != null && parsed > maximum) {
67
+ throw new SignedRequestError(`Invalid ${name}`);
68
+ }
69
+ return parsed;
70
+ };
71
+ const decodeCanonical32 = (value, name) => {
72
+ if (!BASE64_32_PATTERN.test(value)) {
73
+ throw new SignedRequestError(`Invalid ${name}`);
74
+ }
75
+ const bytes = fromBase64(value);
76
+ if (bytes.length !== 32 || toBase64(bytes) !== value) {
77
+ throw new SignedRequestError(`Invalid ${name}`);
78
+ }
79
+ return bytes;
80
+ };
81
+ const readHeader = (headers, name, maxLength) => {
82
+ const matches = Object.entries(headers).filter(([key]) => key.toLowerCase() === name.toLowerCase());
83
+ if (matches.length !== 1 || typeof matches[0][1] !== "string") {
84
+ throw new SignedRequestError(`Missing or duplicate ${name} header`);
85
+ }
86
+ const value = matches[0][1];
87
+ if (value.length === 0 || value.length > maxLength || value.includes(",")) {
88
+ throw new SignedRequestError(`Invalid ${name} header`);
89
+ }
90
+ return value;
91
+ };
92
+ const validateMethodAndTarget = (method, target) => {
93
+ if (!METHOD_PATTERN.test(method)) {
94
+ throw new SignedRequestError("Invalid request method");
95
+ }
96
+ if (!target.startsWith("/") || target.includes("#") || target.length > 8192) {
97
+ throw new SignedRequestError("Invalid request target");
98
+ }
99
+ };
100
+ const equalBytes = (left, right) => {
101
+ if (left.length !== right.length)
102
+ return false;
103
+ let difference = 0;
104
+ for (let index = 0; index < left.length; index++) {
105
+ difference |= left[index] ^ right[index];
106
+ }
107
+ return difference === 0;
108
+ };
109
+ export const createAuthDescriptor = async (identity, audience, nowMs = Date.now()) => {
110
+ decodeCanonical32(audience.bootId, "boot ID");
111
+ if (!audience.serverPeerId || audience.serverPeerId.length > 256) {
112
+ throw new SignedRequestError("Invalid server peer ID");
113
+ }
114
+ const unsigned = {
115
+ version: SIGNED_REQUEST_VERSION,
116
+ serverPeerId: audience.serverPeerId,
117
+ bootId: audience.bootId,
118
+ serverTime: Math.floor(nowMs / 1000).toString(),
119
+ };
120
+ const signature = await identity.sign(descriptorFrame(unsigned));
121
+ return { ...unsigned, signature: toBase64(serialize(signature)) };
122
+ };
123
+ export const verifyAuthDescriptor = async (value, expectedServerPeerId, options) => {
124
+ if (!value || typeof value !== "object") {
125
+ throw new SignedRequestError("Invalid authentication descriptor");
126
+ }
127
+ const input = value;
128
+ if (input.version !== SIGNED_REQUEST_VERSION ||
129
+ typeof input.serverPeerId !== "string" ||
130
+ typeof input.bootId !== "string" ||
131
+ typeof input.serverTime !== "string" ||
132
+ typeof input.signature !== "string") {
133
+ throw new SignedRequestError("Invalid authentication descriptor");
134
+ }
135
+ if (input.serverPeerId !== expectedServerPeerId ||
136
+ input.serverPeerId.length > 256) {
137
+ throw new SignedRequestError("Server peer ID does not match the pinned ID");
138
+ }
139
+ decodeCanonical32(input.bootId, "boot ID");
140
+ const serverTime = parseCanonicalUnsigned(input.serverTime, "server time");
141
+ const nowMs = options?.nowMs ?? Date.now();
142
+ const maxPastAgeSeconds = options?.maxPastAgeSeconds ?? DEFAULT_MAX_PAST_AGE_SECONDS;
143
+ const maxFutureSkewSeconds = options?.maxFutureSkewSeconds ?? DEFAULT_MAX_FUTURE_SKEW_SECONDS;
144
+ if (!Number.isFinite(nowMs) ||
145
+ nowMs < 0 ||
146
+ nowMs > Number.MAX_SAFE_INTEGER ||
147
+ !Number.isSafeInteger(maxPastAgeSeconds) ||
148
+ maxPastAgeSeconds < 0 ||
149
+ !Number.isSafeInteger(maxFutureSkewSeconds) ||
150
+ maxFutureSkewSeconds < 0) {
151
+ throw new SignedRequestError("Invalid descriptor freshness policy");
152
+ }
153
+ const now = BigInt(Math.floor(nowMs / 1000));
154
+ if (serverTime < now - BigInt(maxPastAgeSeconds) ||
155
+ serverTime > now + BigInt(maxFutureSkewSeconds)) {
156
+ throw new SignedRequestError("Authentication descriptor timestamp is outside the window");
157
+ }
158
+ if (input.signature.length > 2048 || input.signature.includes(",")) {
159
+ throw new SignedRequestError("Invalid descriptor signature");
160
+ }
161
+ let signature;
162
+ try {
163
+ const bytes = fromBase64(input.signature);
164
+ if (toBase64(bytes) !== input.signature) {
165
+ throw new Error("Non-canonical base64");
166
+ }
167
+ signature = deserialize(bytes, SignatureWithKey);
168
+ if (!equalBytes(serialize(signature), bytes)) {
169
+ throw new Error("Non-canonical signature encoding");
170
+ }
171
+ }
172
+ catch {
173
+ throw new SignedRequestError("Invalid descriptor signature");
174
+ }
175
+ if (signature.publicKey.toPeerId().toString() !== input.serverPeerId) {
176
+ throw new SignedRequestError("Descriptor signer does not match server peer ID");
177
+ }
178
+ const descriptor = input;
179
+ if (!(await verify(signature, descriptorFrame(descriptor)))) {
180
+ throw new SignedRequestError("Invalid descriptor signature");
181
+ }
182
+ return descriptor;
183
+ };
184
+ export const signRequest = async (headers, method, target, data, keypair, audience, options) => {
185
+ validateMethodAndTarget(method, target);
186
+ if (!audience.serverPeerId || audience.serverPeerId.length > 256) {
187
+ throw new SignedRequestError("Invalid server peer ID");
188
+ }
189
+ decodeCanonical32(audience.bootId, "boot ID");
190
+ const bytes = bodyBytes(data);
191
+ const timestamp = Math.floor((options?.nowMs ?? Date.now()) / 1000).toString();
192
+ const nonceBytes = options?.nonce ?? randomBytes(32);
193
+ if (nonceBytes.length !== 32) {
194
+ throw new SignedRequestError("Nonce must contain 32 bytes");
195
+ }
196
+ const nonce = toBase64(nonceBytes);
197
+ const length = bytes.length.toString();
198
+ const hash = toBase64(sha256Sync(bytes));
199
+ const signable = requestFrame({
200
+ ...audience,
201
+ timestamp,
202
+ nonce,
203
+ method,
204
+ target,
205
+ bodyLength: length,
206
+ bodyHash: hash,
207
+ });
208
+ const signature = await keypair.sign(signable);
209
+ headers[SIGNATURE_VERSION_KEY] = SIGNED_REQUEST_VERSION;
210
+ headers[SIGNATURE_TIME_KEY] = timestamp;
211
+ headers[SIGNATURE_NONCE_KEY] = nonce;
212
+ headers[SIGNATURE_SERVER_KEY] = audience.serverPeerId;
213
+ headers[SIGNATURE_BOOT_KEY] = audience.bootId;
214
+ headers[SIGNED_CONTENT_LENGTH_KEY] = length;
215
+ headers[SIGNED_CONTENT_SHA256_KEY] = hash;
17
216
  headers[SIGNATURE_KEY] = toBase64(serialize(signature));
18
217
  };
19
- export const getBody = (req) => {
218
+ export class RequestAuthenticator {
219
+ options;
220
+ maxBodyBytes;
221
+ maxPastAgeSeconds;
222
+ maxFutureSkewSeconds;
223
+ maxReplayEntries;
224
+ wallClockMs;
225
+ monotonicClockMs;
226
+ replays = new Map();
227
+ lastWallSeconds;
228
+ constructor(options) {
229
+ this.options = options;
230
+ this.maxPastAgeSeconds = BigInt(options.maxPastAgeSeconds ?? DEFAULT_MAX_PAST_AGE_SECONDS);
231
+ this.maxFutureSkewSeconds = BigInt(options.maxFutureSkewSeconds ?? DEFAULT_MAX_FUTURE_SKEW_SECONDS);
232
+ this.maxBodyBytes = options.maxBodyBytes ?? DEFAULT_MAX_SIGNED_BODY_BYTES;
233
+ this.maxReplayEntries =
234
+ options.maxReplayEntries ?? DEFAULT_MAX_REPLAY_ENTRIES;
235
+ this.wallClockMs = options.wallClockMs ?? Date.now;
236
+ this.monotonicClockMs =
237
+ options.monotonicClockMs ?? (() => performance.now());
238
+ if (this.maxPastAgeSeconds < 0n ||
239
+ this.maxFutureSkewSeconds < 0n ||
240
+ !Number.isSafeInteger(this.maxBodyBytes) ||
241
+ this.maxBodyBytes < 0 ||
242
+ !Number.isSafeInteger(this.maxReplayEntries) ||
243
+ this.maxReplayEntries < 1) {
244
+ throw new SignedRequestError("Invalid signed-request policy");
245
+ }
246
+ decodeCanonical32(options.bootId, "boot ID");
247
+ }
248
+ effectiveWallSeconds() {
249
+ const current = BigInt(Math.floor(this.wallClockMs() / 1000));
250
+ if (this.lastWallSeconds == null || current > this.lastWallSeconds) {
251
+ this.lastWallSeconds = current;
252
+ }
253
+ return this.lastWallSeconds;
254
+ }
255
+ precheckReplay(publicKey, nonce, wallNow) {
256
+ const monotonicNow = this.monotonicClockMs();
257
+ const key = `${publicKey.hashcode()}\0${nonce}`;
258
+ const expired = (entry) => monotonicNow >= entry.monotonicUntil && wallNow > entry.wallUntil;
259
+ const existing = this.replays.get(key);
260
+ if (existing != null && !expired(existing)) {
261
+ throw new ReplayRequestError("Request has already been used");
262
+ }
263
+ if (this.replays.size < this.maxReplayEntries || existing != null)
264
+ return;
265
+ for (const entry of this.replays.values()) {
266
+ if (expired(entry))
267
+ return;
268
+ }
269
+ throw new ReplayCapacityError("Replay protection is at capacity");
270
+ }
271
+ consumeReplay(publicKey, nonce, timestamp, wallNow) {
272
+ const now = this.monotonicClockMs();
273
+ const key = `${publicKey.hashcode()}\0${nonce}`;
274
+ const existing = this.replays.get(key);
275
+ const expired = (entry) => now >= entry.monotonicUntil && wallNow > entry.wallUntil;
276
+ if (existing != null && !expired(existing)) {
277
+ throw new ReplayRequestError("Request has already been used");
278
+ }
279
+ if (existing != null)
280
+ this.replays.delete(key);
281
+ if (this.replays.size >= this.maxReplayEntries) {
282
+ for (const [candidate, entry] of this.replays) {
283
+ if (expired(entry))
284
+ this.replays.delete(candidate);
285
+ }
286
+ }
287
+ if (this.replays.size >= this.maxReplayEntries) {
288
+ throw new ReplayCapacityError("Replay protection is at capacity");
289
+ }
290
+ const retentionSeconds = Number(this.maxPastAgeSeconds + this.maxFutureSkewSeconds) + 1;
291
+ this.replays.set(key, {
292
+ monotonicUntil: now + retentionSeconds * 1000,
293
+ wallUntil: timestamp + this.maxPastAgeSeconds,
294
+ });
295
+ }
296
+ /**
297
+ * Atomically consume a verified nonce immediately before dispatch. Call this
298
+ * only after the exact request body has passed verifyRequestBody().
299
+ */
300
+ consume(verified) {
301
+ const now = this.effectiveWallSeconds();
302
+ if (verified.timestamp < now - this.maxPastAgeSeconds ||
303
+ verified.timestamp > now + this.maxFutureSkewSeconds) {
304
+ throw new SignedRequestError("Request timestamp is outside the window");
305
+ }
306
+ if (!this.options.isTrusted(verified.publicKey)) {
307
+ throw new SignedRequestError("Request signer is not trusted");
308
+ }
309
+ this.consumeReplay(verified.publicKey, verified.nonce, verified.timestamp, now);
310
+ }
311
+ async verify(headers, method, target) {
312
+ validateMethodAndTarget(method, target);
313
+ const version = readHeader(headers, SIGNATURE_VERSION_KEY, 8);
314
+ if (version !== SIGNED_REQUEST_VERSION) {
315
+ throw new SignedRequestError("Unsupported signed-request version");
316
+ }
317
+ const timestampValue = readHeader(headers, SIGNATURE_TIME_KEY, 16);
318
+ const timestamp = parseCanonicalUnsigned(timestampValue, "timestamp");
319
+ const now = this.effectiveWallSeconds();
320
+ if (timestamp < now - this.maxPastAgeSeconds ||
321
+ timestamp > now + this.maxFutureSkewSeconds) {
322
+ throw new SignedRequestError("Request timestamp is outside the window");
323
+ }
324
+ const nonce = readHeader(headers, SIGNATURE_NONCE_KEY, 44);
325
+ decodeCanonical32(nonce, "nonce");
326
+ const serverPeerId = readHeader(headers, SIGNATURE_SERVER_KEY, 256);
327
+ const bootId = readHeader(headers, SIGNATURE_BOOT_KEY, 44);
328
+ if (serverPeerId !== this.options.serverPeerId ||
329
+ bootId !== this.options.bootId) {
330
+ throw new SignedRequestError("Request audience does not match this server");
331
+ }
332
+ decodeCanonical32(bootId, "boot ID");
333
+ const bodyLengthValue = readHeader(headers, SIGNED_CONTENT_LENGTH_KEY, 16);
334
+ const bodyLengthBig = parseCanonicalUnsigned(bodyLengthValue, "body length", BigInt(this.maxBodyBytes));
335
+ const bodyLength = Number(bodyLengthBig);
336
+ const bodyHashValue = readHeader(headers, SIGNED_CONTENT_SHA256_KEY, 44);
337
+ const bodyHash = decodeCanonical32(bodyHashValue, "body hash");
338
+ const signatureValue = readHeader(headers, SIGNATURE_KEY, 2048);
339
+ let signature;
340
+ try {
341
+ const signatureBytes = fromBase64(signatureValue);
342
+ if (toBase64(signatureBytes) !== signatureValue) {
343
+ throw new Error("Non-canonical base64");
344
+ }
345
+ signature = deserialize(signatureBytes, SignatureWithKey);
346
+ if (!equalBytes(serialize(signature), signatureBytes)) {
347
+ throw new Error("Non-canonical signature encoding");
348
+ }
349
+ }
350
+ catch {
351
+ throw new SignedRequestError("Invalid request signature encoding");
352
+ }
353
+ if (!this.options.isTrusted(signature.publicKey)) {
354
+ throw new SignedRequestError("Request signer is not trusted");
355
+ }
356
+ const signable = requestFrame({
357
+ serverPeerId,
358
+ bootId,
359
+ timestamp: timestampValue,
360
+ nonce,
361
+ method,
362
+ target,
363
+ bodyLength: bodyLengthValue,
364
+ bodyHash: bodyHashValue,
365
+ });
366
+ if (!(await verify(signature, signable))) {
367
+ throw new SignedRequestError("Invalid request signature");
368
+ }
369
+ // Reject already-committed replays and a full cache before reading a
370
+ // potentially large body. This check is deliberately non-mutating; consume()
371
+ // remains the authoritative atomic check-and-insert after body verification.
372
+ this.precheckReplay(signature.publicKey, nonce, this.effectiveWallSeconds());
373
+ return {
374
+ publicKey: signature.publicKey,
375
+ bodyLength,
376
+ bodyHash,
377
+ nonce,
378
+ timestamp,
379
+ };
380
+ }
381
+ }
382
+ export const getBody = (req, maxBytes = DEFAULT_MAX_SIGNED_BODY_BYTES) => {
20
383
  return new Promise((resolve, reject) => {
21
- let body = "";
22
- req.on("data", (d) => {
23
- body += d;
384
+ const chunks = [];
385
+ let length = 0;
386
+ let settled = false;
387
+ const fail = (error) => {
388
+ if (settled)
389
+ return;
390
+ settled = true;
391
+ chunks.length = 0;
392
+ reject(error);
393
+ };
394
+ req.on("data", (chunk) => {
395
+ if (settled)
396
+ return;
397
+ const bytes = typeof chunk === "string"
398
+ ? encoder.encode(chunk)
399
+ : new Uint8Array(chunk);
400
+ length += bytes.length;
401
+ if (length > maxBytes) {
402
+ fail(new RequestBodyTooLargeError("Request body is too large"));
403
+ return;
404
+ }
405
+ chunks.push(bytes);
24
406
  });
25
407
  req.on("end", () => {
408
+ if (settled)
409
+ return;
410
+ settled = true;
411
+ const body = new Uint8Array(length);
412
+ let offset = 0;
413
+ for (const chunk of chunks) {
414
+ body.set(chunk, offset);
415
+ offset += chunk.length;
416
+ }
26
417
  resolve(body);
27
418
  });
28
- req.on("error", (e) => reject(e));
419
+ req.on("aborted", () => fail(new SignedRequestError("Request was aborted")));
420
+ req.on("error", fail);
29
421
  });
30
422
  };
31
- export const verifyRequest = async (headers, method, path, body = "") => {
32
- const timestamp = headers[SIGNATURE_TIME_KEY] || headers[SIGNATURE_TIME_KEY.toLowerCase()];
33
- if (typeof timestamp !== "string") {
34
- throw new Error("Unexpected timestamp type: " + typeof timestamp);
35
- }
36
- const write = new BinaryWriter();
37
- if (!method) {
38
- throw new Error("Expecting method");
39
- }
40
- if (!path) {
41
- throw new Error("Expecting path");
423
+ export const verifyRequestBody = (verified, body) => {
424
+ if (body.length !== verified.bodyLength ||
425
+ !equalBytes(sha256Sync(body), verified.bodyHash)) {
426
+ throw new SignedRequestError("Request body does not match its signature");
42
427
  }
43
- write.string(method.toLowerCase() + path.toLowerCase() + timestamp + body);
44
- const signature = headers[SIGNATURE_KEY] || headers[SIGNATURE_KEY.toLowerCase()];
45
- if (typeof signature !== "string") {
46
- throw new Error("Unexpected signature type: " + typeof signature);
428
+ try {
429
+ return decoder.decode(body);
47
430
  }
48
- const signatureWithKey = deserialize(fromBase64(signature), SignatureWithKey);
49
- if (await verify(signatureWithKey, write.finalize())) {
50
- return signatureWithKey.publicKey;
431
+ catch {
432
+ throw new SignedRequestError("Request body is not valid UTF-8");
51
433
  }
52
- throw new Error("Invalid signature");
53
434
  };
54
435
  //# sourceMappingURL=signed-request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signed-request.js","sourceRoot":"","sources":["../../src/signed-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signed-request.js","sourceRoot":"","sources":["../../src/signed-request.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../src/trust.ts"],"names":[],"mappings":"AAEA,qBAAa,KAAK;IAEL,QAAQ,CAAC,IAAI,EAAE,MAAM;IADjC,OAAO,EAAE,MAAM,EAAE,CAAC;gBACG,IAAI,EAAE,MAAM;IAUjC,IAAI;IAIJ,SAAS,CAAC,QAAQ,EAAE,MAAM;IAI1B,GAAG,CAAC,GAAG,EAAE,MAAM;IAQf,MAAM,CAAC,QAAQ,EAAE,MAAM;CAQvB"}
1
+ {"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../src/trust.ts"],"names":[],"mappings":"AAEA,qBAAa,KAAK;IAEL,QAAQ,CAAC,IAAI,EAAE,MAAM;IADjC,OAAO,EAAE,MAAM,EAAE,CAAC;gBACG,IAAI,EAAE,MAAM;IAUjC,IAAI;IAIJ,SAAS,CAAC,QAAQ,EAAE,MAAM;IAI1B,GAAG,CAAC,GAAG,EAAE,MAAM;IAQf,MAAM,CAAC,QAAQ,EAAE,MAAM;CASvB"}
package/dist/src/trust.js CHANGED
@@ -28,6 +28,7 @@ export class Trust {
28
28
  const existing = this.trusted.findIndex((x) => x === hashcode);
29
29
  if (existing >= 0) {
30
30
  this.trusted.splice(existing, 1);
31
+ this.save();
31
32
  return true;
32
33
  }
33
34
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/trust.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,OAAO,KAAK;IAEI;IADrB,OAAO,CAAW;IAClB,YAAqB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QAChC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC3B,CAAC;QACf,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACnB,CAAC;IACF,CAAC;IAED,IAAI;QACH,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,GAAW;QACd,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,MAAM,CAAC,QAAgB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC/D,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/trust.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,OAAO,KAAK;IAEI;IADrB,OAAO,CAAW;IAClB,YAAqB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QAChC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC3B,CAAC;QACf,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACnB,CAAC;IACF,CAAC;IAED,IAAI;QACH,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,GAAW;QACd,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,MAAM,CAAC,QAAgB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC/D,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}