keri 0.0.0-dev.5e5dc7c → 0.0.0-dev.7443496

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 (185) hide show
  1. package/README.md +3 -0
  2. package/dist/cesr/array-utils.d.ts +3 -0
  3. package/dist/cesr/array-utils.js +29 -0
  4. package/dist/cesr/array-utils.js.map +1 -0
  5. package/dist/cesr/attachments-reader.d.ts +10 -0
  6. package/dist/cesr/attachments-reader.js +281 -0
  7. package/dist/cesr/attachments-reader.js.map +1 -0
  8. package/dist/cesr/attachments.d.ts +66 -0
  9. package/dist/cesr/attachments.js +108 -0
  10. package/dist/cesr/attachments.js.map +1 -0
  11. package/dist/cesr/codes.d.ts +1208 -0
  12. package/dist/cesr/codes.js +309 -0
  13. package/dist/cesr/codes.js.map +1 -0
  14. package/dist/cesr/counter.d.ts +114 -0
  15. package/dist/cesr/counter.js +78 -0
  16. package/dist/cesr/counter.js.map +1 -0
  17. package/dist/cesr/frame.d.ts +31 -0
  18. package/dist/cesr/frame.js +99 -0
  19. package/dist/cesr/frame.js.map +1 -0
  20. package/dist/cesr/genus.d.ts +18 -0
  21. package/dist/cesr/genus.js +57 -0
  22. package/dist/cesr/genus.js.map +1 -0
  23. package/dist/cesr/groups/generic-map.d.ts +11 -0
  24. package/dist/cesr/groups/generic-map.js +51 -0
  25. package/dist/cesr/groups/generic-map.js.map +1 -0
  26. package/dist/cesr/indexer.d.ts +68 -0
  27. package/dist/cesr/indexer.js +171 -0
  28. package/dist/cesr/indexer.js.map +1 -0
  29. package/dist/cesr/main.d.ts +9 -0
  30. package/dist/cesr/main.js +10 -0
  31. package/dist/cesr/main.js.map +1 -0
  32. package/dist/cesr/matter.d.ts +160 -0
  33. package/dist/cesr/matter.js +301 -0
  34. package/dist/cesr/matter.js.map +1 -0
  35. package/dist/cesr/message.d.ts +17 -0
  36. package/dist/cesr/message.js +81 -0
  37. package/dist/cesr/message.js.map +1 -0
  38. package/dist/cesr/parse.d.ts +37 -0
  39. package/dist/cesr/parse.js +138 -0
  40. package/dist/cesr/parse.js.map +1 -0
  41. package/dist/cesr/shifting.d.ts +7 -0
  42. package/dist/cesr/shifting.js +10 -0
  43. package/dist/cesr/shifting.js.map +1 -0
  44. package/dist/cesr/version-string.d.ts +35 -0
  45. package/dist/cesr/version-string.js +146 -0
  46. package/dist/cesr/version-string.js.map +1 -0
  47. package/dist/cli/cli.d.ts +5 -0
  48. package/dist/cli/cli.js +73 -0
  49. package/dist/cli/cli.js.map +1 -0
  50. package/dist/cli/input.d.ts +1 -0
  51. package/dist/cli/input.js +22 -0
  52. package/dist/cli/input.js.map +1 -0
  53. package/dist/cli/node-cli.d.ts +2 -0
  54. package/dist/cli/node-cli.js +19 -0
  55. package/dist/cli/node-cli.js.map +1 -0
  56. package/dist/controller/controller.d.ts +17 -29
  57. package/dist/controller/controller.js +64 -8
  58. package/dist/controller/controller.js.map +1 -1
  59. package/dist/controller/main.d.ts +1 -0
  60. package/dist/controller/main.js +2 -0
  61. package/dist/controller/main.js.map +1 -0
  62. package/dist/core/credential-event.d.ts +5 -9
  63. package/dist/core/credential-event.js +1 -1
  64. package/dist/core/credential-event.js.map +1 -1
  65. package/dist/core/credential.d.ts +1 -1
  66. package/dist/core/credential.js +1 -1
  67. package/dist/core/credential.js.map +1 -1
  68. package/dist/core/digest.js +3 -3
  69. package/dist/core/digest.js.map +1 -1
  70. package/dist/core/endpoint-discovery.d.ts +4 -4
  71. package/dist/core/endpoint-discovery.js.map +1 -1
  72. package/dist/core/events.js +2 -2
  73. package/dist/core/events.js.map +1 -1
  74. package/dist/core/kawa.d.ts +2 -2
  75. package/dist/core/kawa.js +7 -37
  76. package/dist/core/kawa.js.map +1 -1
  77. package/dist/core/key-event-log.d.ts +12 -6
  78. package/dist/core/key-event-log.js +13 -11
  79. package/dist/core/key-event-log.js.map +1 -1
  80. package/dist/core/key-event.d.ts +7 -9
  81. package/dist/core/key-event.js +1 -1
  82. package/dist/core/key-event.js.map +1 -1
  83. package/dist/core/keys.d.ts +2 -1
  84. package/dist/core/keys.js +10 -10
  85. package/dist/core/keys.js.map +1 -1
  86. package/dist/core/mailbox-client.d.ts +7 -1
  87. package/dist/core/mailbox-client.js +37 -19
  88. package/dist/core/mailbox-client.js.map +1 -1
  89. package/dist/core/main.d.ts +17 -10
  90. package/dist/core/main.js +5 -3
  91. package/dist/core/main.js.map +1 -1
  92. package/dist/core/receipt-event.d.ts +2 -2
  93. package/dist/core/receipt-event.js +1 -1
  94. package/dist/core/receipt-event.js.map +1 -1
  95. package/dist/core/registry-event.d.ts +3 -5
  96. package/dist/core/registry-event.js +1 -1
  97. package/dist/core/registry-event.js.map +1 -1
  98. package/dist/core/routed-event.d.ts +7 -13
  99. package/dist/core/routed-event.js +1 -1
  100. package/dist/core/routed-event.js.map +1 -1
  101. package/dist/core/said.js +9 -6
  102. package/dist/core/said.js.map +1 -1
  103. package/dist/core/sign.js +3 -3
  104. package/dist/core/sign.js.map +1 -1
  105. package/dist/core/verify.d.ts +11 -2
  106. package/dist/core/verify.js +30 -11
  107. package/dist/core/verify.js.map +1 -1
  108. package/dist/core/witness-client.d.ts +8 -0
  109. package/dist/core/witness-client.js +39 -0
  110. package/dist/core/witness-client.js.map +1 -0
  111. package/dist/encoding/base64.d.ts +4 -0
  112. package/dist/encoding/base64.js +82 -0
  113. package/dist/encoding/base64.js.map +1 -0
  114. package/dist/encoding/main.d.ts +2 -0
  115. package/dist/encoding/main.js +3 -0
  116. package/dist/encoding/main.js.map +1 -0
  117. package/dist/encoding/utf8.d.ts +2 -0
  118. package/dist/encoding/utf8.js +9 -0
  119. package/dist/encoding/utf8.js.map +1 -0
  120. package/dist/logging/main.d.ts +15 -0
  121. package/dist/logging/main.js +25 -0
  122. package/dist/logging/main.js.map +1 -0
  123. package/dist/mailbox/mailbox-router.d.ts +6 -0
  124. package/dist/mailbox/mailbox-router.js +88 -0
  125. package/dist/mailbox/mailbox-router.js.map +1 -0
  126. package/dist/mailbox/mailbox.d.ts +27 -0
  127. package/dist/mailbox/mailbox.js +101 -0
  128. package/dist/mailbox/mailbox.js.map +1 -0
  129. package/dist/mailbox/main.d.ts +3 -0
  130. package/dist/mailbox/main.js +3 -0
  131. package/dist/mailbox/main.js.map +1 -0
  132. package/dist/main.d.ts +2 -1
  133. package/dist/main.js +1 -1
  134. package/dist/main.js.map +1 -1
  135. package/dist/nodejs-utils/main.d.ts +2 -0
  136. package/dist/nodejs-utils/main.js +2 -0
  137. package/dist/nodejs-utils/main.js.map +1 -0
  138. package/dist/nodejs-utils/serve.d.ts +6 -0
  139. package/dist/nodejs-utils/serve.js +68 -0
  140. package/dist/nodejs-utils/serve.js.map +1 -0
  141. package/dist/{storage/sqlite/storage-sqlite.d.ts → sqlite-storage/main.d.ts} +9 -7
  142. package/dist/{storage/sqlite/storage-sqlite.js → sqlite-storage/main.js} +33 -9
  143. package/dist/sqlite-storage/main.js.map +1 -0
  144. package/dist/sqlite-storage/node-sqlite.js.map +1 -0
  145. package/dist/sqlite-storage/schema.js +67 -0
  146. package/dist/sqlite-storage/schema.js.map +1 -0
  147. package/dist/sqlite-storage/sqlite-database.js.map +1 -0
  148. package/dist/storage/credential-storage.d.ts +8 -0
  149. package/dist/storage/credential-storage.js +2 -0
  150. package/dist/storage/credential-storage.js.map +1 -0
  151. package/dist/storage/key-event-storage.d.ts +10 -0
  152. package/dist/storage/key-event-storage.js +2 -0
  153. package/dist/storage/key-event-storage.js.map +1 -0
  154. package/dist/storage/mailbox-server-storage.d.ts +9 -0
  155. package/dist/storage/mailbox-server-storage.js +2 -0
  156. package/dist/storage/mailbox-server-storage.js.map +1 -0
  157. package/dist/storage/mailbox-storage.d.ts +4 -0
  158. package/dist/storage/mailbox-storage.js +2 -0
  159. package/dist/storage/mailbox-storage.js.map +1 -0
  160. package/dist/storage/main.d.ts +5 -0
  161. package/dist/storage/main.js +2 -0
  162. package/dist/storage/main.js.map +1 -0
  163. package/dist/storage/private-key-storage.d.ts +5 -0
  164. package/dist/storage/private-key-storage.js +2 -0
  165. package/dist/storage/private-key-storage.js.map +1 -0
  166. package/dist/witness/main.d.ts +3 -0
  167. package/dist/witness/main.js +3 -0
  168. package/dist/witness/main.js.map +1 -0
  169. package/dist/witness/witness-router.d.ts +6 -0
  170. package/dist/witness/witness-router.js +120 -0
  171. package/dist/witness/witness-router.js.map +1 -0
  172. package/dist/witness/witness.d.ts +26 -0
  173. package/dist/witness/witness.js +156 -0
  174. package/dist/witness/witness.js.map +1 -0
  175. package/package.json +28 -24
  176. package/dist/storage/sqlite/node-sqlite.js.map +0 -1
  177. package/dist/storage/sqlite/schema.js +0 -49
  178. package/dist/storage/sqlite/schema.js.map +0 -1
  179. package/dist/storage/sqlite/sqlite-database.js.map +0 -1
  180. package/dist/storage/sqlite/storage-sqlite.js.map +0 -1
  181. /package/dist/{storage/sqlite → sqlite-storage}/node-sqlite.d.ts +0 -0
  182. /package/dist/{storage/sqlite → sqlite-storage}/node-sqlite.js +0 -0
  183. /package/dist/{storage/sqlite → sqlite-storage}/schema.d.ts +0 -0
  184. /package/dist/{storage/sqlite → sqlite-storage}/sqlite-database.d.ts +0 -0
  185. /package/dist/{storage/sqlite → sqlite-storage}/sqlite-database.js +0 -0
package/dist/main.js CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./controller/controller.js";
1
+ export * from "./controller/main.js";
2
2
  export * from "./core/main.js";
3
3
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type { Logger } from "../logging/main.ts";
2
+ export { createListener, type ListenerOptions } from "./serve.ts";
@@ -0,0 +1,2 @@
1
+ export { createListener } from "./serve.js";
2
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/nodejs-utils/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAwB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { RequestListener } from "node:http";
2
+ import { type Logger } from "../logging/main.ts";
3
+ export interface ListenerOptions {
4
+ logger?: Logger;
5
+ }
6
+ export declare function createListener(handler: (request: Request) => Promise<Response>, options?: ListenerOptions): RequestListener;
@@ -0,0 +1,68 @@
1
+ import { Readable } from "node:stream";
2
+ import { KeriLogger } from "../logging/main.js";
3
+ function toWebRequest(req) {
4
+ const host = req.headers.host ?? "0.0.0.0";
5
+ const protocol = req.headers["x-forwarded-proto"] ?? "http";
6
+ const url = new URL(req.url ?? "/", `${protocol}://${host}`);
7
+ const headers = new Headers();
8
+ for (const [key, headerValue] of Object.entries(req.headers)) {
9
+ if (headerValue !== undefined) {
10
+ if (Array.isArray(headerValue)) {
11
+ for (const value of headerValue) {
12
+ headers.append(key, value);
13
+ }
14
+ }
15
+ else {
16
+ headers.set(key, headerValue);
17
+ }
18
+ }
19
+ }
20
+ let body = null;
21
+ if (!["GET", "HEAD"].includes(req.method ?? "")) {
22
+ body = Readable.toWeb(req);
23
+ }
24
+ return new Request(url, {
25
+ method: req.method,
26
+ headers,
27
+ body,
28
+ duplex: "half",
29
+ // Cast required because DOM types omit `duplex`, but Node.js undici fetch requires it when body is a stream
30
+ });
31
+ }
32
+ export function createListener(handler, options = {}) {
33
+ const log = new KeriLogger(options.logger);
34
+ return async (req, res) => {
35
+ const start = Date.now();
36
+ const method = req.method ?? "GET";
37
+ const url = req.url ?? "/";
38
+ res.on("finish", () => {
39
+ const durationMs = Date.now() - start;
40
+ log.info(`${method} ${url} ${res.statusCode} ${durationMs}ms`, {
41
+ method,
42
+ url,
43
+ status: res.statusCode,
44
+ durationMs,
45
+ });
46
+ });
47
+ try {
48
+ const response = await handler(toWebRequest(req));
49
+ res.writeHead(response.status, Object.fromEntries(response.headers.entries()));
50
+ if (response.body) {
51
+ const reader = response.body.getReader();
52
+ while (true) {
53
+ const { done, value } = await reader.read();
54
+ if (done)
55
+ break;
56
+ res.write(value);
57
+ }
58
+ }
59
+ res.end();
60
+ }
61
+ catch (err) {
62
+ log.error("handler threw", { method, url, error: err instanceof Error ? err.message : String(err) });
63
+ res.statusCode = 500;
64
+ res.end("Internal Server Error");
65
+ }
66
+ };
67
+ }
68
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/nodejs-utils/serve.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,28 @@
1
1
  import type { Database } from "./sqlite-database.ts";
2
2
  export { NodeSqliteDatabase } from "./node-sqlite.ts";
3
3
  export type { Database, Params, Row, SQLValue } from "./sqlite-database.ts";
4
- import type { ControllerStorage } from "../../controller/controller.ts";
5
- import { type CredentialBody, type IssueEvent, type KeyEvent, Message, type RegistryInceptEvent, type ReplyEvent, type RevokeEvent } from "../../core/main.ts";
6
- export declare class SqliteControllerStorage implements ControllerStorage {
4
+ import { type CredentialBody, type IssueEvent, type KeyEvent, Message, type RegistryInceptEventBody, type ReplyEventBody, type RevokeEvent } from "../core/main.ts";
5
+ import type { CredentialStorage, KeyEventStorage, MailboxEntry, MailboxServerStorage, MailboxStorage, PrivateKeyStorage } from "../storage/main.ts";
6
+ export declare class SqliteControllerStorage implements KeyEventStorage, PrivateKeyStorage, CredentialStorage, MailboxStorage, MailboxServerStorage {
7
7
  #private;
8
8
  constructor(db: Database);
9
9
  saveKey(publicKey: string, digest: string, encryptedPrivKey: string): void;
10
- getKey(publicKey: string): string;
10
+ getEncryptedPrivateKey(publicKey: string): string;
11
11
  getPublicKeyByDigest(digest: string): string;
12
12
  saveMessage(message: Message): void;
13
13
  getReplies(filter?: {
14
14
  route?: string;
15
15
  eid?: string;
16
16
  cid?: string;
17
- }): Generator<Message<ReplyEvent>>;
17
+ }): Generator<Message<ReplyEventBody>>;
18
18
  getKeyEvents(prefix: string): Generator<KeyEvent>;
19
19
  getCredentialEvents(id: string): Generator<Message<IssueEvent | RevokeEvent>>;
20
- getRegistry(id: string): Message<RegistryInceptEvent> | null;
21
- getRegistriesByOwner(owner: string): Generator<Message<RegistryInceptEvent>>;
20
+ getRegistry(id: string): Message<RegistryInceptEventBody> | null;
21
+ getRegistriesByOwner(owner: string): Generator<Message<RegistryInceptEventBody>>;
22
22
  getCredential(id: string): CredentialBody | null;
23
23
  getCredentialsByRegistry(registryId: string): CredentialBody[];
24
24
  getMailboxOffset(prefix: string, topic: string): number;
25
25
  saveMailboxOffset(prefix: string, topic: string, offset: number): void;
26
+ saveMailboxEntry(pre: string, topic: string, message: Message): void;
27
+ getMailboxEntries(pre: string, topic: string, offset: number): Generator<MailboxEntry>;
26
28
  }
@@ -1,6 +1,7 @@
1
1
  import { migrate } from "./schema.js";
2
2
  export { NodeSqliteDatabase } from "./node-sqlite.js";
3
- import { Attachments, Message, } from "../../core/main.js";
3
+ import { encodeText } from "../cesr/main.js";
4
+ import { Attachments, Message, } from "../core/main.js";
4
5
  function parseRow(result) {
5
6
  if (!("event_json" in result) || typeof result.event_json !== "string") {
6
7
  throw new Error("Row does not contain event_json");
@@ -21,7 +22,7 @@ function prepareRow(message) {
21
22
  type: "credential",
22
23
  sn: null,
23
24
  event_json: JSON.stringify(body),
24
- attachments: message.attachments.text(),
25
+ attachments: encodeText(message.attachments.frames()),
25
26
  };
26
27
  }
27
28
  switch (message.body.t) {
@@ -35,7 +36,7 @@ function prepareRow(message) {
35
36
  type: body.t,
36
37
  sn: parseInt(body.s, 16),
37
38
  event_json: JSON.stringify(body),
38
- attachments: message.attachments.text(),
39
+ attachments: encodeText(message.attachments.frames()),
39
40
  };
40
41
  }
41
42
  case "vcp": {
@@ -46,7 +47,7 @@ function prepareRow(message) {
46
47
  type: body.t,
47
48
  sn: null,
48
49
  event_json: JSON.stringify(body),
49
- attachments: message.attachments.text(),
50
+ attachments: encodeText(message.attachments.frames()),
50
51
  };
51
52
  }
52
53
  case "iss":
@@ -58,7 +59,7 @@ function prepareRow(message) {
58
59
  type: body.t,
59
60
  sn: null,
60
61
  event_json: JSON.stringify(body),
61
- attachments: message.attachments.text(),
62
+ attachments: encodeText(message.attachments.frames()),
62
63
  };
63
64
  }
64
65
  default: {
@@ -69,7 +70,7 @@ function prepareRow(message) {
69
70
  type: typeof body.t === "string" ? body.t : null,
70
71
  sn: null,
71
72
  event_json: JSON.stringify(body),
72
- attachments: message.attachments.text(),
73
+ attachments: encodeText(message.attachments.frames()),
73
74
  };
74
75
  }
75
76
  }
@@ -96,7 +97,7 @@ export class SqliteControllerStorage {
96
97
  encrypted_private_key: encryptedPrivKey,
97
98
  });
98
99
  }
99
- getKey(publicKey) {
100
+ getEncryptedPrivateKey(publicKey) {
100
101
  const statement = ["SELECT encrypted_private_key FROM key_info", "WHERE public_key = $public_key", "LIMIT 1"].join("\n");
101
102
  const result = this.#queryOne(statement, { public_key: publicKey });
102
103
  if (!result || typeof result.encrypted_private_key !== "string") {
@@ -113,10 +114,11 @@ export class SqliteControllerStorage {
113
114
  return result.public_key;
114
115
  }
115
116
  saveMessage(message) {
117
+ // TODO: Should we use a flag to indicate "upsert" or "insert" ?
116
118
  const statement = [
117
119
  "INSERT INTO event(event_id, protocol, type, sn, event_json, attachments)",
118
120
  "VALUES ($event_id, $protocol, $type, $sn, $event_json, $attachments)",
119
- "ON CONFLICT(event_id) DO NOTHING",
121
+ "ON CONFLICT(event_id) DO UPDATE SET attachments = excluded.attachments",
120
122
  ].join("\n");
121
123
  this.#db.execute(statement, prepareRow(message));
122
124
  }
@@ -209,5 +211,27 @@ export class SqliteControllerStorage {
209
211
  this.#db.execute("INSERT INTO mailbox_cursor(prefix, topic, offset) VALUES ($prefix, $topic, $offset) " +
210
212
  "ON CONFLICT(prefix, topic) DO UPDATE SET offset = $offset", { prefix, topic, offset });
211
213
  }
214
+ saveMailboxEntry(pre, topic, message) {
215
+ this.#db.execute("INSERT INTO mailbox_entry(pre, topic, event_json, attachments) VALUES ($pre, $topic, $event_json, $attachments)", {
216
+ pre,
217
+ topic,
218
+ event_json: JSON.stringify(message.body),
219
+ attachments: encodeText(message.attachments.frames()),
220
+ });
221
+ }
222
+ *getMailboxEntries(pre, topic, offset) {
223
+ const statement = [
224
+ "SELECT id, event_json, attachments FROM mailbox_entry",
225
+ "WHERE pre = $pre AND topic = $topic AND id > $offset",
226
+ "ORDER BY id ASC",
227
+ ].join("\n");
228
+ for (const row of this.#db.iterate(statement, { pre, topic, offset })) {
229
+ const id = row.id;
230
+ if (typeof id !== "number") {
231
+ throw new Error("mailbox_entry.id missing or not a number");
232
+ }
233
+ yield { id, message: parseRow(row) };
234
+ }
235
+ }
212
236
  }
213
- //# sourceMappingURL=storage-sqlite.js.map
237
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/sqlite-storage/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-sqlite.js","sourceRoot":"","sources":["../../src/sqlite-storage/node-sqlite.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B,GAAG,CAAe;IAElB,YAAY,EAAgB;QAC1B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,MAAe;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,MAAe;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO,MAAyB,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,MAAe;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAkB,CAAC;IACtE,CAAC;CACF"}
@@ -0,0 +1,67 @@
1
+ const migrations = [
2
+ // Migration 1: initial schema
3
+ [
4
+ [
5
+ "CREATE TABLE IF NOT EXISTS event (",
6
+ " event_id TEXT PRIMARY KEY,",
7
+ " protocol TEXT NOT NULL,",
8
+ " type TEXT NOT NULL,",
9
+ " sn INTEGER,",
10
+ " event_json JSON NOT NULL,",
11
+ " attachments TEXT",
12
+ ")",
13
+ ].join("\n"),
14
+ [
15
+ "CREATE TABLE IF NOT EXISTS key_info (",
16
+ " public_key TEXT PRIMARY KEY,",
17
+ " public_key_digest TEXT NOT NULL,",
18
+ " encrypted_private_key TEXT NOT NULL",
19
+ ")",
20
+ ].join("\n"),
21
+ ],
22
+ // Migration 2: mailbox cursor
23
+ [
24
+ [
25
+ "CREATE TABLE IF NOT EXISTS mailbox_cursor (",
26
+ " prefix TEXT NOT NULL,",
27
+ " topic TEXT NOT NULL,",
28
+ " offset INTEGER NOT NULL DEFAULT 0,",
29
+ " PRIMARY KEY (prefix, topic)",
30
+ ")",
31
+ ].join("\n"),
32
+ ],
33
+ // Migration 3: mailbox entry (server-side message store)
34
+ [
35
+ [
36
+ "CREATE TABLE IF NOT EXISTS mailbox_entry (",
37
+ " id INTEGER PRIMARY KEY AUTOINCREMENT,",
38
+ " pre TEXT NOT NULL,",
39
+ " topic TEXT NOT NULL,",
40
+ " event_json JSON NOT NULL,",
41
+ " attachments TEXT",
42
+ ")",
43
+ ].join("\n"),
44
+ ],
45
+ ];
46
+ export function migrate(db) {
47
+ db.execute(`CREATE TABLE IF NOT EXISTS schema_version (version INTEGER NOT NULL)`);
48
+ db.execute(`INSERT INTO schema_version (version) SELECT 0 WHERE NOT EXISTS (SELECT 1 FROM schema_version)`);
49
+ const row = Array.from(db.iterate("SELECT version FROM schema_version"))[0];
50
+ let current = typeof row?.version === "number" ? row.version : 0;
51
+ for (let i = current; i < migrations.length; i++) {
52
+ db.execute("BEGIN");
53
+ try {
54
+ for (const statement of migrations[i]) {
55
+ db.execute(statement);
56
+ }
57
+ db.execute(`UPDATE schema_version SET version = ${i + 1}`);
58
+ db.execute("COMMIT");
59
+ }
60
+ catch (err) {
61
+ db.execute("ROLLBACK");
62
+ throw err;
63
+ }
64
+ current = i + 1;
65
+ }
66
+ }
67
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/sqlite-storage/schema.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAe;IAC7B,8BAA8B;IAC9B;QACE;YACE,oCAAoC;YACpC,iCAAiC;YACjC,8BAA8B;YAC9B,8BAA8B;YAC9B,wBAAwB;YACxB,8BAA8B;YAC9B,oBAAoB;YACpB,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ;YACE,uCAAuC;YACvC,2CAA2C;YAC3C,wCAAwC;YACxC,uCAAuC;YACvC,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC;KACb;IACD,8BAA8B;IAC9B;QACE;YACE,6CAA6C;YAC7C,yBAAyB;YACzB,yBAAyB;YACzB,sCAAsC;YACtC,+BAA+B;YAC/B,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC;KACb;IACD,yDAAyD;IACzD;QACE;YACE,4CAA4C;YAC5C,kDAAkD;YAClD,8BAA8B;YAC9B,8BAA8B;YAC9B,8BAA8B;YAC9B,oBAAoB;YACpB,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC;KACb;CACF,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,EAAY;IAClC,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAC,CAAC;IACnF,EAAE,CAAC,OAAO,CAAC,+FAA+F,CAAC,CAAC;IAE5G,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,OAAO,GAAG,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;YACD,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3D,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACvB,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-database.js","sourceRoot":"","sources":["../../src/sqlite-storage/sqlite-database.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { CredentialBody, IssueEvent, Message, RegistryInceptEventBody, RevokeEvent } from "../core/main.ts";
2
+ export interface CredentialStorage {
3
+ getCredentialEvents(id: string): Generator<Message<IssueEvent | RevokeEvent>>;
4
+ getRegistry(id: string): Message<RegistryInceptEventBody> | null;
5
+ getRegistriesByOwner(owner: string): Generator<Message<RegistryInceptEventBody>>;
6
+ getCredential(id: string): CredentialBody | null;
7
+ getCredentialsByRegistry(registryId: string): CredentialBody[];
8
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=credential-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-storage.js","sourceRoot":"","sources":["../../src/storage/credential-storage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { KeyEvent, Message, ReplyEventBody } from "../core/main.ts";
2
+ export interface KeyEventStorage {
3
+ saveMessage(message: Message): void;
4
+ getKeyEvents(prefix: string): Generator<KeyEvent>;
5
+ getReplies(filter?: {
6
+ route?: string;
7
+ eid?: string;
8
+ cid?: string;
9
+ }): Generator<Message<ReplyEventBody>>;
10
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=key-event-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-event-storage.js","sourceRoot":"","sources":["../../src/storage/key-event-storage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { Message } from "../cesr/main.ts";
2
+ export interface MailboxEntry {
3
+ id: number;
4
+ message: Message;
5
+ }
6
+ export interface MailboxServerStorage {
7
+ saveMailboxEntry(pre: string, topic: string, message: Message): void;
8
+ getMailboxEntries(pre: string, topic: string, offset: number): Generator<MailboxEntry>;
9
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mailbox-server-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox-server-storage.js","sourceRoot":"","sources":["../../src/storage/mailbox-server-storage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export interface MailboxStorage {
2
+ getMailboxOffset(prefix: string, topic: string): number;
3
+ saveMailboxOffset(prefix: string, topic: string, offset: number): void;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mailbox-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox-storage.js","sourceRoot":"","sources":["../../src/storage/mailbox-storage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export type { CredentialStorage } from "./credential-storage.ts";
2
+ export type { KeyEventStorage } from "./key-event-storage.ts";
3
+ export type { MailboxEntry, MailboxServerStorage } from "./mailbox-server-storage.ts";
4
+ export type { MailboxStorage } from "./mailbox-storage.ts";
5
+ export type { PrivateKeyStorage } from "./private-key-storage.ts";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/storage/main.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export interface PrivateKeyStorage {
2
+ saveKey(publicKey: string, digest: string, encryptedPrivKey: string): void;
3
+ getEncryptedPrivateKey(publicKey: string): string;
4
+ getPublicKeyByDigest(digest: string): string;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=private-key-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-key-storage.js","sourceRoot":"","sources":["../../src/storage/private-key-storage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export type { Logger } from "../logging/main.ts";
2
+ export { Witness, WitnessError, type WitnessEvent, type WitnessOptions } from "./witness.ts";
3
+ export { createRouter, type RouterOptions } from "./witness-router.ts";
@@ -0,0 +1,3 @@
1
+ export { Witness, WitnessError } from "./witness.js";
2
+ export { createRouter } from "./witness-router.js";
3
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/witness/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,YAAY,EAA0C,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type Logger } from "../logging/main.ts";
2
+ import { type Witness } from "./witness.ts";
3
+ export interface RouterOptions {
4
+ logger?: Logger;
5
+ }
6
+ export declare function createRouter(witness: Witness, options?: RouterOptions): (request: Request) => Promise<Response>;
@@ -0,0 +1,120 @@
1
+ import { Attachments, encodeText, parse } from "../cesr/main.js";
2
+ import { KeriLogger } from "../logging/main.js";
3
+ import { WitnessError } from "./witness.js";
4
+ function createResponse(events) {
5
+ const body = events
6
+ .flatMap(({ message, timestamp }) => {
7
+ const atc = new Attachments({
8
+ ControllerIdxSigs: message.attachments.ControllerIdxSigs,
9
+ WitnessIdxSigs: message.attachments.WitnessIdxSigs,
10
+ NonTransReceiptCouples: message.attachments.NonTransReceiptCouples,
11
+ FirstSeenReplayCouples: [{ fnu: String(message.body.s ?? "0"), dt: timestamp }],
12
+ });
13
+ return [new TextDecoder().decode(message.raw), encodeText(atc.frames())];
14
+ })
15
+ .join("");
16
+ return new Response(body, {
17
+ status: 200,
18
+ headers: { "Content-Type": "application/json+cesr" },
19
+ });
20
+ }
21
+ export function createRouter(witness, options = {}) {
22
+ const log = new KeriLogger(options.logger);
23
+ async function handleReceiptRequest(request) {
24
+ const atc = request.headers.get("CESR-ATTACHMENT");
25
+ if (!atc) {
26
+ log.warn("rejecting POST /receipts: missing CESR-ATTACHMENT");
27
+ return Response.json({ error: "Bad Request" }, { status: 400 });
28
+ }
29
+ const bodyText = await request.text();
30
+ const receipts = [];
31
+ for await (const witnessEvent of parse(bodyText + atc)) {
32
+ try {
33
+ const receipt = witness.receipt(witnessEvent);
34
+ receipts.push({ message: receipt, timestamp: new Date() });
35
+ }
36
+ catch (err) {
37
+ if (err instanceof WitnessError) {
38
+ log.warn("rejecting POST /receipts", { error: err.message });
39
+ return Response.json({ error: "Bad Request" }, { status: 400 });
40
+ }
41
+ throw err;
42
+ }
43
+ }
44
+ log.debug("POST /receipts: issued receipts", { count: receipts.length });
45
+ return createResponse(receipts);
46
+ }
47
+ async function handleOobiRequest(request) {
48
+ const url = new URL(request.url);
49
+ const aid = url.pathname.split("/")[2];
50
+ let response;
51
+ if (aid === undefined || aid === witness.aid) {
52
+ log.debug("GET /oobi: serving self", { count: witness.events.length });
53
+ response = createResponse(witness.events);
54
+ }
55
+ else {
56
+ const events = Array.from(witness.getKeyEvents(aid)).map((event) => ({
57
+ message: event,
58
+ timestamp: event.attachments.FirstSeenReplayCouples[0]?.dt ?? new Date(0),
59
+ }));
60
+ if (events.length === 0) {
61
+ log.debug("GET /oobi: not found", { aid });
62
+ response = new Response("Not Found", { status: 404 });
63
+ }
64
+ else {
65
+ log.debug("GET /oobi: serving events", { aid, count: events.length });
66
+ response = createResponse(events);
67
+ }
68
+ }
69
+ response.headers.set("Keri-Aid", witness.aid);
70
+ return response;
71
+ }
72
+ async function handleMessageRequest(request) {
73
+ const atc = request.headers.get("CESR-ATTACHMENT");
74
+ if (!atc) {
75
+ log.warn("rejecting POST /: missing CESR-ATTACHMENT");
76
+ return Response.json({ error: "Bad Request" }, { status: 400 });
77
+ }
78
+ const bodyText = await request.text();
79
+ let count = 0;
80
+ for await (const event of parse(bodyText + atc)) {
81
+ witness.handleMessage(event);
82
+ count++;
83
+ }
84
+ log.debug("POST /: handled messages", { count });
85
+ return new Response(null, { status: 200 });
86
+ }
87
+ return async function handler(request) {
88
+ const { method } = request;
89
+ const pathname = new URL(request.url).pathname;
90
+ if (pathname === "/") {
91
+ switch (method) {
92
+ case "GET":
93
+ return Response.json({ status: "OK" });
94
+ case "POST": {
95
+ return handleMessageRequest(request);
96
+ }
97
+ default:
98
+ return new Response("Method Not Allowed", { status: 405 });
99
+ }
100
+ }
101
+ if (pathname.startsWith("/oobi")) {
102
+ switch (method) {
103
+ case "GET":
104
+ return handleOobiRequest(request);
105
+ default:
106
+ return new Response("Method Not Allowed", { status: 405 });
107
+ }
108
+ }
109
+ if (pathname === "/receipts") {
110
+ switch (method) {
111
+ case "POST":
112
+ return handleReceiptRequest(request);
113
+ default:
114
+ return new Response("Method Not Allowed", { status: 405 });
115
+ }
116
+ }
117
+ return new Response("Not Found", { status: 404 });
118
+ };
119
+ }
120
+ //# sourceMappingURL=witness-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness-router.js","sourceRoot":"","sources":["../../src/witness/witness-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Message } from "../cesr/main.ts";
2
+ import { type KeyEvent, type KeyEventBody, KeyEventLog, type ReceiptEventBody } from "../core/main.ts";
3
+ import { type Logger } from "../logging/main.ts";
4
+ import type { KeyEventStorage } from "../storage/main.ts";
5
+ export interface WitnessOptions {
6
+ privateKey?: Uint8Array;
7
+ url?: string;
8
+ storage: KeyEventStorage;
9
+ logger?: Logger;
10
+ }
11
+ export interface WitnessEvent {
12
+ readonly message: Message;
13
+ readonly timestamp: Date;
14
+ }
15
+ export declare class WitnessError extends Error {
16
+ }
17
+ export declare class Witness {
18
+ #private;
19
+ readonly events: readonly WitnessEvent[];
20
+ get aid(): string;
21
+ static createKEL(privateKey: Uint8Array): KeyEventLog;
22
+ constructor(options: WitnessOptions);
23
+ receipt(message: Message<KeyEventBody>): Message<ReceiptEventBody>;
24
+ handleMessage(message: Message): void;
25
+ getKeyEvents(aid: string): Generator<KeyEvent>;
26
+ }