keri 0.0.7 → 0.0.8-dev.1468d4d

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 (110) hide show
  1. package/README.md +1 -8
  2. package/dist/controller/controller.d.ts +109 -0
  3. package/dist/controller/controller.js +542 -0
  4. package/dist/controller/controller.js.map +1 -0
  5. package/dist/controller/encrypt.d.ts +45 -0
  6. package/dist/controller/encrypt.js +120 -0
  7. package/dist/controller/encrypt.js.map +1 -0
  8. package/dist/core/credential-event.d.ts +58 -0
  9. package/dist/core/credential-event.js +28 -0
  10. package/dist/core/credential-event.js.map +1 -0
  11. package/dist/core/credential.d.ts +79 -0
  12. package/dist/core/credential.js +25 -0
  13. package/dist/core/credential.js.map +1 -0
  14. package/dist/core/digest.d.ts +1 -0
  15. package/dist/core/digest.js +7 -0
  16. package/dist/core/digest.js.map +1 -0
  17. package/dist/core/endpoint-discovery.d.ts +20 -0
  18. package/dist/core/endpoint-discovery.js +60 -0
  19. package/dist/core/endpoint-discovery.js.map +1 -0
  20. package/dist/core/events.d.ts +12 -0
  21. package/dist/core/events.js +25 -0
  22. package/dist/core/events.js.map +1 -0
  23. package/dist/core/kawa.d.ts +17 -0
  24. package/dist/core/kawa.js +79 -0
  25. package/dist/core/kawa.js.map +1 -0
  26. package/dist/core/key-event-log.d.ts +13 -0
  27. package/dist/core/key-event-log.js +154 -0
  28. package/dist/core/key-event-log.js.map +1 -0
  29. package/dist/core/key-event.d.ts +96 -0
  30. package/dist/core/key-event.js +89 -0
  31. package/dist/core/key-event.js.map +1 -0
  32. package/dist/core/keys.d.ts +9 -0
  33. package/dist/core/keys.js +17 -0
  34. package/dist/core/keys.js.map +1 -0
  35. package/dist/core/mailbox-client.d.ts +17 -0
  36. package/dist/core/mailbox-client.js +57 -0
  37. package/dist/core/mailbox-client.js.map +1 -0
  38. package/dist/core/main.d.ts +47 -0
  39. package/dist/core/main.js +44 -0
  40. package/dist/core/main.js.map +1 -0
  41. package/dist/core/receipt-event.d.ts +15 -0
  42. package/dist/core/receipt-event.js +13 -0
  43. package/dist/core/receipt-event.js.map +1 -0
  44. package/dist/core/registry-event.d.ts +28 -0
  45. package/dist/core/registry-event.js +18 -0
  46. package/dist/core/registry-event.js.map +1 -0
  47. package/dist/core/routed-event.d.ts +73 -0
  48. package/dist/core/routed-event.js +53 -0
  49. package/dist/core/routed-event.js.map +1 -0
  50. package/dist/core/said.d.ts +4 -0
  51. package/dist/core/said.js +26 -0
  52. package/dist/core/said.js.map +1 -0
  53. package/dist/core/sign.d.ts +5 -0
  54. package/dist/core/sign.js +10 -0
  55. package/dist/core/sign.js.map +1 -0
  56. package/dist/core/threshold.d.ts +6 -0
  57. package/dist/core/threshold.js +58 -0
  58. package/dist/core/threshold.js.map +1 -0
  59. package/dist/core/verify.d.ts +14 -0
  60. package/dist/core/verify.js +43 -0
  61. package/dist/core/verify.js.map +1 -0
  62. package/dist/main.d.ts +2 -7
  63. package/dist/main.js +2 -7
  64. package/dist/main.js.map +1 -1
  65. package/dist/storage/sqlite/node-sqlite.d.ts +12 -0
  66. package/dist/storage/sqlite/node-sqlite.js +25 -0
  67. package/dist/storage/sqlite/node-sqlite.js.map +1 -0
  68. package/dist/storage/sqlite/schema.d.ts +2 -0
  69. package/dist/storage/sqlite/schema.js +49 -0
  70. package/dist/storage/sqlite/schema.js.map +1 -0
  71. package/dist/storage/sqlite/sqlite-database.d.ts +13 -0
  72. package/dist/storage/sqlite/sqlite-database.js +2 -0
  73. package/dist/storage/sqlite/sqlite-database.js.map +1 -0
  74. package/dist/storage/sqlite/storage-sqlite.d.ts +26 -0
  75. package/dist/storage/sqlite/storage-sqlite.js +213 -0
  76. package/dist/storage/sqlite/storage-sqlite.js.map +1 -0
  77. package/package.json +26 -11
  78. package/dist/cli/main.d.ts +0 -2
  79. package/dist/cli/main.js +0 -175
  80. package/dist/cli/main.js.map +0 -1
  81. package/dist/client.d.ts +0 -21
  82. package/dist/client.js +0 -88
  83. package/dist/client.js.map +0 -1
  84. package/dist/controller.d.ts +0 -63
  85. package/dist/controller.js +0 -392
  86. package/dist/controller.js.map +0 -1
  87. package/dist/db/storage-sqlite.d.ts +0 -12
  88. package/dist/db/storage-sqlite.js +0 -53
  89. package/dist/db/storage-sqlite.js.map +0 -1
  90. package/dist/db/storage.d.ts +0 -18
  91. package/dist/db/storage.js +0 -29
  92. package/dist/db/storage.js.map +0 -1
  93. package/dist/events/event-store.d.ts +0 -126
  94. package/dist/events/event-store.js +0 -242
  95. package/dist/events/event-store.js.map +0 -1
  96. package/dist/events/events.d.ts +0 -248
  97. package/dist/events/events.js +0 -184
  98. package/dist/events/events.js.map +0 -1
  99. package/dist/keystore/encrypt.d.ts +0 -10
  100. package/dist/keystore/encrypt.js +0 -39
  101. package/dist/keystore/encrypt.js.map +0 -1
  102. package/dist/keystore/key-manager.d.ts +0 -27
  103. package/dist/keystore/key-manager.js +0 -91
  104. package/dist/keystore/key-manager.js.map +0 -1
  105. package/dist/serializer.d.ts +0 -10
  106. package/dist/serializer.js +0 -83
  107. package/dist/serializer.js.map +0 -1
  108. package/dist/witness.d.ts +0 -17
  109. package/dist/witness.js +0 -99
  110. package/dist/witness.js.map +0 -1
@@ -1,10 +0,0 @@
1
- export interface Encrypter {
2
- encrypt(data: Uint8Array): Promise<Uint8Array>;
3
- decrypt(data: Uint8Array): Promise<Uint8Array>;
4
- }
5
- export declare class PassphraseEncrypter implements Encrypter {
6
- #private;
7
- constructor(passphrase: string);
8
- encrypt(data: Uint8Array): Promise<Uint8Array<ArrayBuffer>>;
9
- decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;
10
- }
@@ -1,39 +0,0 @@
1
- async function deriveKey(passphrase, salt) {
2
- const encoder = new TextEncoder();
3
- const encryptionKey = await crypto.subtle.importKey("raw", encoder.encode(passphrase), "PBKDF2", false, [
4
- "deriveBits",
5
- "deriveKey",
6
- ]);
7
- const key = await crypto.subtle.deriveKey({
8
- name: "PBKDF2",
9
- salt,
10
- iterations: 100000,
11
- hash: "SHA-256",
12
- }, encryptionKey, { name: "AES-GCM", length: 256 }, true, ["encrypt", "decrypt"]);
13
- return key;
14
- }
15
- export class PassphraseEncrypter {
16
- #passphrase;
17
- constructor(passphrase) {
18
- this.#passphrase = passphrase;
19
- }
20
- async encrypt(data) {
21
- const salt = crypto.getRandomValues(new Uint8Array(16));
22
- const iv = crypto.getRandomValues(new Uint8Array(16));
23
- const key = await deriveKey(this.#passphrase, salt);
24
- const encrypted = await crypto.subtle.encrypt({ name: "AES-GCM", iv }, key, data);
25
- const result = new Uint8Array(salt.byteLength + iv.byteLength + encrypted.byteLength);
26
- result.set(salt, 0);
27
- result.set(iv, salt.byteLength);
28
- result.set(new Uint8Array(encrypted), salt.byteLength + iv.byteLength);
29
- return result;
30
- }
31
- async decrypt(ciphertext) {
32
- const salt = ciphertext.slice(0, 16);
33
- const key = await deriveKey(this.#passphrase, salt);
34
- const iv = ciphertext.slice(16, 32);
35
- const encrypted = ciphertext.slice(32);
36
- return new Uint8Array(await crypto.subtle.decrypt({ name: "AES-GCM", iv }, key, encrypted));
37
- }
38
- }
39
- //# sourceMappingURL=encrypt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../src/keystore/encrypt.ts"],"names":[],"mappings":"AAKA,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,IAAgB;IAC3D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;QACtG,YAAY;QACZ,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC;QACE,IAAI,EAAE,QAAQ;QACd,IAAI;QACJ,UAAU,EAAE,MAAM;QAClB,IAAI,EAAE,SAAS;KAChB,EACD,aAAa,EACb,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAChC,IAAI,EACJ,CAAC,SAAS,EAAE,SAAS,CAAC,CACvB,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,mBAAmB;IAC9B,WAAW,CAAS;IAEpB,YAAY,UAAkB;QAC5B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAgB;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAElF,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACtF,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;QAEvE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAsB;QAClC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEvC,OAAO,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9F,CAAC;CACF"}
@@ -1,27 +0,0 @@
1
- import type { Encrypter } from "./encrypt.ts";
2
- import { type KeyValueStorage } from "../events/event-store.ts";
3
- export interface Key {
4
- /**
5
- * The public key of the tranferable key.
6
- */
7
- current: string;
8
- /**
9
- * Digest of the next public key of the key pair.
10
- */
11
- next: string;
12
- }
13
- export interface KeyManagerOptions {
14
- encrypter: Encrypter;
15
- storage: KeyValueStorage;
16
- }
17
- export declare class KeyManager {
18
- storage: KeyValueStorage;
19
- encrypter: Encrypter;
20
- constructor(options: KeyManagerOptions);
21
- private load;
22
- import(key0: Uint8Array, key1: Uint8Array): Promise<Key>;
23
- incept(): Promise<Key>;
24
- rotate(publicKey: string): Promise<Key>;
25
- sign(publicKey: string, message: Uint8Array, index?: number): Promise<string>;
26
- }
27
- export declare function verify(publicKey: string, message: Uint8Array, signature: string): boolean;
@@ -1,91 +0,0 @@
1
- import { ed25519 } from "@noble/curves/ed25519.js";
2
- import { blake3 } from "@noble/hashes/blake3.js";
3
- import { cesr, decodeBase64Url, encodeBase64Url, encodeIndexer, encodeMatter, IndexCode, MatterCode, } from "cesr/__unstable__";
4
- function createDigest(key) {
5
- const encoded = encodeMatter({
6
- code: MatterCode.Ed25519,
7
- raw: ed25519.getPublicKey(key),
8
- });
9
- const next = encodeMatter({
10
- code: MatterCode.Blake3_256,
11
- raw: blake3.create({ dkLen: 32 }).update(new TextEncoder().encode(encoded)).digest(),
12
- });
13
- return next;
14
- }
15
- export class KeyManager {
16
- storage;
17
- encrypter;
18
- constructor(options) {
19
- this.encrypter = options.encrypter;
20
- this.storage = options.storage;
21
- }
22
- async load(publicKey) {
23
- const value = await this.storage.get(`keys.${publicKey}`);
24
- if (!value) {
25
- throw new Error(`Key ${publicKey} not found`);
26
- }
27
- const [key0, key1] = value.split("\n");
28
- return [await this.encrypter.decrypt(decodeBase64Url(key0)), await this.encrypter.decrypt(decodeBase64Url(key1))];
29
- }
30
- async import(key0, key1) {
31
- const current = encodeMatter({
32
- code: MatterCode.Ed25519,
33
- raw: ed25519.getPublicKey(key0),
34
- });
35
- const next = createDigest(key1);
36
- await this.storage.set(`keys.${current}`, [
37
- encodeBase64Url(await this.encrypter.encrypt(key0)),
38
- encodeBase64Url(await this.encrypter.encrypt(key1)),
39
- "\n",
40
- ].join("\n"));
41
- return { current, next };
42
- }
43
- async incept() {
44
- const key0 = ed25519.utils.randomSecretKey();
45
- const key1 = ed25519.utils.randomSecretKey();
46
- return await this.import(key0, key1);
47
- }
48
- async rotate(publicKey) {
49
- const [, key0] = await this.load(publicKey);
50
- const key1 = ed25519.utils.randomSecretKey();
51
- const current = encodeMatter({
52
- code: MatterCode.Ed25519,
53
- raw: ed25519.getPublicKey(key0),
54
- });
55
- const next = createDigest(key1);
56
- await this.import(key0, key1);
57
- return { current, next };
58
- }
59
- async sign(publicKey, message, index) {
60
- const [key] = await this.load(publicKey);
61
- const signature = ed25519.sign(message, key);
62
- if (index !== undefined) {
63
- return encodeIndexer({
64
- code: IndexCode.Ed25519_Sig,
65
- raw: signature,
66
- index,
67
- });
68
- }
69
- return encodeMatter({
70
- code: MatterCode.Ed25519_Sig,
71
- raw: signature,
72
- });
73
- }
74
- }
75
- export function verify(publicKey, message, signature) {
76
- const key = cesr.decodeMatter(publicKey);
77
- const sig = cesr.decodeMatter(signature);
78
- switch (key.code) {
79
- case MatterCode.Ed25519:
80
- case MatterCode.Ed25519N:
81
- switch (sig.code) {
82
- case MatterCode.Ed25519_Sig:
83
- return ed25519.verify(sig.raw, message, key.raw);
84
- default:
85
- throw new Error(`Unsupported signature code: ${sig.code}`);
86
- }
87
- default:
88
- throw new Error(`Unsupported key code: ${key.code}`);
89
- }
90
- }
91
- //# sourceMappingURL=key-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"key-manager.js","sourceRoot":"","sources":["../../src/keystore/key-manager.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { type KeyEventReceipt, type KeyEventSeal } from "./events/event-store.ts";
2
- export declare function encodeHexNumber(num: string): string;
3
- export declare function serializeSignatures(sigs: string[], seal?: KeyEventSeal): string;
4
- export declare function serializeWitnessSignatures(receipts: KeyEventReceipt[], backers: string[]): string;
5
- export declare function serializeReceipts(receipts: KeyEventReceipt[]): string;
6
- export declare function serializePathedGroup(path: string[], attachments: string[]): string;
7
- export declare function serializeAttachments(attachments: string[]): string;
8
- export declare function serializeEventSeal(seal: KeyEventSeal): string;
9
- export declare function serializeDigestSeal(seal: KeyEventSeal): string;
10
- export declare function getIndexedCode(code: string): string;
@@ -1,83 +0,0 @@
1
- import { cesr, CountCode_10, encodeAttachmentsV1, encodeBase64Int, encodeCounter, encodeString, IndexCode, MatterCode, } from "cesr/__unstable__";
2
- export function encodeHexNumber(num) {
3
- return `${MatterCode.Salt_128}${encodeBase64Int(parseInt(num, 16), 22)}`;
4
- }
5
- export function serializeSignatures(sigs, seal) {
6
- const result = [];
7
- if (sigs && sigs.length > 0) {
8
- if (seal && seal.i && seal.s && seal.d) {
9
- result.push(encodeCounter({
10
- code: CountCode_10.TransIdxSigGroups,
11
- count: 1,
12
- }));
13
- result.push(seal.i);
14
- result.push(encodeHexNumber(seal.s));
15
- result.push(seal.d);
16
- }
17
- result.push(encodeCounter({ code: CountCode_10.ControllerIdxSigs, count: sigs.length }));
18
- result.push(...sigs);
19
- }
20
- return result.join("");
21
- }
22
- export function serializeWitnessSignatures(receipts, backers) {
23
- const result = [];
24
- if (receipts.length > 0) {
25
- result.push(encodeCounter({ code: CountCode_10.WitnessIdxSigs, count: receipts.length }));
26
- for (const sig of receipts) {
27
- const signature = cesr.decodeMatter(sig.signature);
28
- const index = backers.indexOf(sig.backer);
29
- if (index === -1) {
30
- throw new Error(`Unknown backer ${sig.backer}`);
31
- }
32
- result.push(cesr.encodeIndexer({
33
- code: getIndexedCode(signature.code),
34
- raw: signature.raw,
35
- index: index,
36
- }));
37
- }
38
- }
39
- return result.join("");
40
- }
41
- export function serializeReceipts(receipts) {
42
- const result = [];
43
- if (receipts.length > 0) {
44
- result.push(encodeCounter({ code: CountCode_10.NonTransReceiptCouples, count: receipts.length }));
45
- result.push(...receipts.map((receipt) => receipt.backer + receipt.signature));
46
- }
47
- return result.join("");
48
- }
49
- export function serializePathedGroup(path, attachments) {
50
- const result = [];
51
- result.push(encodeString(`-${path.join("-")}`));
52
- result.push(...attachments);
53
- return (encodeCounter({
54
- code: CountCode_10.PathedMaterialCouples,
55
- count: result.join("").length / 4,
56
- }) + result.join(""));
57
- }
58
- export function serializeAttachments(attachments) {
59
- const result = attachments.join("");
60
- return `${encodeAttachmentsV1(result.length / 4)}${result}`;
61
- }
62
- export function serializeEventSeal(seal) {
63
- return [
64
- encodeCounter({ code: CountCode_10.SealSourceTriples, count: 1 }),
65
- seal.i,
66
- encodeHexNumber(seal.s),
67
- seal.d,
68
- ].join("");
69
- }
70
- export function serializeDigestSeal(seal) {
71
- return [encodeCounter({ code: CountCode_10.SealSourceCouples, count: 1 }), encodeHexNumber(seal.s), seal.d].join("");
72
- }
73
- export function getIndexedCode(code) {
74
- switch (code) {
75
- case MatterCode.Ed25519_Sig:
76
- return IndexCode.Ed25519_Sig;
77
- case MatterCode.Ed448_Sig:
78
- return IndexCode.Ed448_Sig;
79
- default:
80
- throw new Error(`Unsupported indexed signature type: ${code}`);
81
- }
82
- }
83
- //# sourceMappingURL=serializer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"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"}
package/dist/witness.d.ts DELETED
@@ -1,17 +0,0 @@
1
- export interface OobiArgs {
2
- aid?: string;
3
- role?: string;
4
- }
5
- export interface WitnessOptions {
6
- seed?: Uint8Array;
7
- }
8
- export declare class Witness {
9
- #private;
10
- constructor(options?: WitnessOptions);
11
- /**
12
- * Handle incoming HTTP requests
13
- *
14
- * @param request The incoming HTTP request
15
- */
16
- fetch(request: Request): Promise<Response>;
17
- }
package/dist/witness.js DELETED
@@ -1,99 +0,0 @@
1
- import { ed25519 } from "@noble/curves/ed25519.js";
2
- import { cesr, CountCode_10, encodeCounter, IndexCode, MatterCode } from "cesr/__unstable__";
3
- import { keri } from "./events/events.js";
4
- import { encodeHexNumber, serializeAttachments, serializeReceipts, serializeSignatures } from "./serializer.js";
5
- export class Witness {
6
- #privateKey;
7
- #publicKey;
8
- #icp;
9
- #signature;
10
- constructor(options = {}) {
11
- this.#privateKey = ed25519.utils.randomSecretKey(options.seed);
12
- this.#publicKey = cesr.encodeMatter({ code: MatterCode.Ed25519N, raw: ed25519.getPublicKey(this.#privateKey) });
13
- this.#icp = keri.incept({
14
- k: [this.#publicKey],
15
- kt: "1",
16
- });
17
- this.#signature = cesr.encodeIndexer({
18
- code: IndexCode.Ed25519_Sig,
19
- raw: ed25519.sign(new TextEncoder().encode(JSON.stringify(this.#icp)), this.#privateKey),
20
- index: 0,
21
- });
22
- }
23
- #createResponse(message) {
24
- const body = [
25
- JSON.stringify(message.event),
26
- serializeAttachments([
27
- serializeSignatures(message.signatures),
28
- serializeReceipts(message.receipts),
29
- encodeCounter({
30
- code: CountCode_10.FirstSeenReplayCouples,
31
- count: 1,
32
- }),
33
- encodeHexNumber(message.event.s ?? "0"),
34
- cesr.encodeDate(message.timestamp),
35
- ]),
36
- ].join("");
37
- return new Response(body, {
38
- status: 200,
39
- headers: { "Content-Type": "application/json+cesr" },
40
- });
41
- }
42
- async #oobi(request) {
43
- if (request.method.toUpperCase() !== "GET") {
44
- return new Response("Method Not Allowed", { status: 405 });
45
- }
46
- const match = request.url.match(/\/oobi\/?([A-Za-z0-9_-])?$/);
47
- if (!match) {
48
- return new Response("Not Found", { status: 404 });
49
- }
50
- const response = this.#createResponse({
51
- event: this.#icp,
52
- signatures: [this.#signature],
53
- receipts: [],
54
- timestamp: new Date(),
55
- });
56
- response.headers.set("Keri-Aid", this.#icp.i);
57
- return response;
58
- }
59
- #sign(event) {
60
- const raw = new TextEncoder().encode(JSON.stringify(event));
61
- const sign = ed25519.sign(raw, this.#privateKey);
62
- return cesr.encodeMatter({ code: MatterCode.Ed25519_Sig, raw: sign });
63
- }
64
- async #receipt(request) {
65
- const event = (await request.json());
66
- if (typeof event.i !== "string" || typeof event.d !== "string" || typeof event.s !== "string") {
67
- return new Response("Bad Request", { status: 400 });
68
- }
69
- return this.#createResponse({
70
- event: keri.receipt({ d: event.d, i: event.i, s: event.s }),
71
- signatures: [],
72
- receipts: [{ backer: this.#icp.i, signature: this.#sign(event) }],
73
- timestamp: new Date(),
74
- });
75
- }
76
- /**
77
- * Handle incoming HTTP requests
78
- *
79
- * @param request The incoming HTTP request
80
- */
81
- async fetch(request) {
82
- try {
83
- const url = new URL(request.url);
84
- if (url.pathname.startsWith("/oobi")) {
85
- return await this.#oobi(request);
86
- }
87
- if (url.pathname === "/receipts" && request.method.toUpperCase() === "POST") {
88
- return await this.#receipt(request);
89
- }
90
- return new Response("Not Found", { status: 404 });
91
- }
92
- catch (err) {
93
- // eslint-disable-next-line no-console
94
- console.error("Error handling request:", err);
95
- return new Response("Internal Server Error", { status: 500 });
96
- }
97
- }
98
- }
99
- //# sourceMappingURL=witness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"witness.js","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"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"}