keri 0.0.0-dev.9090ca4 → 0.0.0-dev.973a137

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 (151) hide show
  1. package/dist/cesr/attachments-reader.js +41 -33
  2. package/dist/cesr/attachments-reader.js.map +1 -1
  3. package/dist/cesr/attachments.d.ts +1 -3
  4. package/dist/cesr/attachments.js +3 -11
  5. package/dist/cesr/attachments.js.map +1 -1
  6. package/dist/cesr/counter.d.ts +2 -5
  7. package/dist/cesr/counter.js +8 -23
  8. package/dist/cesr/counter.js.map +1 -1
  9. package/dist/cesr/frame.d.ts +8 -13
  10. package/dist/cesr/frame.js +4 -2
  11. package/dist/cesr/frame.js.map +1 -1
  12. package/dist/cesr/genus.d.ts +0 -3
  13. package/dist/cesr/genus.js +2 -11
  14. package/dist/cesr/genus.js.map +1 -1
  15. package/dist/cesr/groups/generic-map.d.ts +2 -2
  16. package/dist/cesr/groups/generic-map.js +4 -12
  17. package/dist/cesr/groups/generic-map.js.map +1 -1
  18. package/dist/cesr/indexer.d.ts +3 -5
  19. package/dist/cesr/indexer.js +2 -8
  20. package/dist/cesr/indexer.js.map +1 -1
  21. package/dist/cesr/{__main__.d.ts → main.d.ts} +1 -2
  22. package/dist/cesr/{__main__.js → main.js} +2 -3
  23. package/dist/cesr/main.js.map +1 -0
  24. package/dist/cesr/matter.d.ts +2 -5
  25. package/dist/cesr/matter.js +3 -13
  26. package/dist/cesr/matter.js.map +1 -1
  27. package/dist/cesr/message.js +1 -1
  28. package/dist/cesr/parse.js +8 -7
  29. package/dist/cesr/parse.js.map +1 -1
  30. package/dist/cesr/version-string.js +1 -2
  31. package/dist/cesr/version-string.js.map +1 -1
  32. package/dist/cli/cli.js +3 -3
  33. package/dist/cli/cli.js.map +1 -1
  34. package/dist/controller/controller.d.ts +28 -9
  35. package/dist/controller/controller.js +113 -22
  36. package/dist/controller/controller.js.map +1 -1
  37. package/dist/controller/main.d.ts +1 -0
  38. package/dist/controller/main.js +2 -0
  39. package/dist/controller/main.js.map +1 -0
  40. package/dist/core/credential-event.d.ts +1 -1
  41. package/dist/core/credential-event.js +1 -1
  42. package/dist/core/credential-event.js.map +1 -1
  43. package/dist/core/credential.d.ts +1 -1
  44. package/dist/core/credential.js +1 -1
  45. package/dist/core/credential.js.map +1 -1
  46. package/dist/core/digest.js +3 -3
  47. package/dist/core/digest.js.map +1 -1
  48. package/dist/core/endpoint-discovery.d.ts +1 -1
  49. package/dist/core/events.js +2 -2
  50. package/dist/core/events.js.map +1 -1
  51. package/dist/core/kawa.d.ts +1 -1
  52. package/dist/core/kawa.js +2 -2
  53. package/dist/core/kawa.js.map +1 -1
  54. package/dist/core/key-event-log.d.ts +39 -1
  55. package/dist/core/key-event-log.js +143 -10
  56. package/dist/core/key-event-log.js.map +1 -1
  57. package/dist/core/key-event.d.ts +16 -1
  58. package/dist/core/key-event.js +66 -1
  59. package/dist/core/key-event.js.map +1 -1
  60. package/dist/core/keys.js +7 -7
  61. package/dist/core/keys.js.map +1 -1
  62. package/dist/core/mailbox-client.d.ts +1 -1
  63. package/dist/core/mailbox-client.js +34 -18
  64. package/dist/core/mailbox-client.js.map +1 -1
  65. package/dist/core/main.d.ts +9 -4
  66. package/dist/core/main.js +8 -3
  67. package/dist/core/main.js.map +1 -1
  68. package/dist/core/receipt-event.d.ts +1 -1
  69. package/dist/core/receipt-event.js +1 -1
  70. package/dist/core/receipt-event.js.map +1 -1
  71. package/dist/core/registry-event.d.ts +1 -1
  72. package/dist/core/registry-event.js +1 -1
  73. package/dist/core/registry-event.js.map +1 -1
  74. package/dist/core/routed-event.d.ts +1 -1
  75. package/dist/core/routed-event.js +1 -1
  76. package/dist/core/routed-event.js.map +1 -1
  77. package/dist/core/said.js +9 -6
  78. package/dist/core/said.js.map +1 -1
  79. package/dist/core/sign.js +3 -3
  80. package/dist/core/sign.js.map +1 -1
  81. package/dist/core/verify.d.ts +1 -1
  82. package/dist/core/verify.js +1 -1
  83. package/dist/core/verify.js.map +1 -1
  84. package/dist/core/witness-client.d.ts +1 -1
  85. package/dist/core/witness-client.js +2 -2
  86. package/dist/core/witness-client.js.map +1 -1
  87. package/dist/encoding/main.d.ts +2 -0
  88. package/dist/encoding/main.js +3 -0
  89. package/dist/encoding/main.js.map +1 -0
  90. package/dist/logging/main.d.ts +15 -0
  91. package/dist/logging/main.js +25 -0
  92. package/dist/logging/main.js.map +1 -0
  93. package/dist/mailbox/mailbox-router.d.ts +6 -0
  94. package/dist/mailbox/mailbox-router.js +88 -0
  95. package/dist/mailbox/mailbox-router.js.map +1 -0
  96. package/dist/mailbox/mailbox.d.ts +27 -0
  97. package/dist/mailbox/mailbox.js +101 -0
  98. package/dist/mailbox/mailbox.js.map +1 -0
  99. package/dist/mailbox/main.d.ts +3 -0
  100. package/dist/mailbox/main.js +3 -0
  101. package/dist/mailbox/main.js.map +1 -0
  102. package/dist/main.d.ts +2 -2
  103. package/dist/main.js +1 -2
  104. package/dist/main.js.map +1 -1
  105. package/dist/nodejs-utils/main.d.ts +2 -0
  106. package/dist/nodejs-utils/main.js +2 -0
  107. package/dist/nodejs-utils/main.js.map +1 -0
  108. package/dist/nodejs-utils/serve.d.ts +4 -3
  109. package/dist/nodejs-utils/serve.js +29 -38
  110. package/dist/nodejs-utils/serve.js.map +1 -1
  111. package/dist/{storage/sqlite/storage-sqlite.d.ts → sqlite-storage/main.d.ts} +5 -6
  112. package/dist/{storage/sqlite/storage-sqlite.js → sqlite-storage/main.js} +34 -9
  113. package/dist/sqlite-storage/main.js.map +1 -0
  114. package/dist/sqlite-storage/node-sqlite.js.map +1 -0
  115. package/dist/{storage/sqlite → sqlite-storage}/schema.js +12 -0
  116. package/dist/sqlite-storage/schema.js.map +1 -0
  117. package/dist/sqlite-storage/sqlite-database.js.map +1 -0
  118. package/dist/storage/mailbox-server-storage.d.ts +9 -0
  119. package/dist/storage/mailbox-server-storage.js +2 -0
  120. package/dist/storage/mailbox-server-storage.js.map +1 -0
  121. package/dist/storage/main.d.ts +5 -0
  122. package/dist/storage/main.js +2 -0
  123. package/dist/storage/main.js.map +1 -0
  124. package/dist/witness/main.d.ts +2 -1
  125. package/dist/witness/main.js.map +1 -1
  126. package/dist/witness/witness-router.d.ts +5 -1
  127. package/dist/witness/witness-router.js +25 -9
  128. package/dist/witness/witness-router.js.map +1 -1
  129. package/dist/witness/witness.d.ts +4 -2
  130. package/dist/witness/witness.js +32 -7
  131. package/dist/witness/witness.js.map +1 -1
  132. package/package.json +5 -5
  133. package/dist/cesr/__main__.js.map +0 -1
  134. package/dist/cesr/codec.d.ts +0 -26
  135. package/dist/cesr/codec.js +0 -26
  136. package/dist/cesr/codec.js.map +0 -1
  137. package/dist/storage/sqlite/node-sqlite.js.map +0 -1
  138. package/dist/storage/sqlite/schema.js.map +0 -1
  139. package/dist/storage/sqlite/sqlite-database.js.map +0 -1
  140. package/dist/storage/sqlite/storage-sqlite.js.map +0 -1
  141. package/dist/witness/parser.d.ts +0 -3
  142. package/dist/witness/parser.js +0 -7
  143. package/dist/witness/parser.js.map +0 -1
  144. package/dist/witness/seed.d.ts +0 -1
  145. package/dist/witness/seed.js +0 -5
  146. package/dist/witness/seed.js.map +0 -1
  147. /package/dist/{storage/sqlite → sqlite-storage}/node-sqlite.d.ts +0 -0
  148. /package/dist/{storage/sqlite → sqlite-storage}/node-sqlite.js +0 -0
  149. /package/dist/{storage/sqlite → sqlite-storage}/schema.d.ts +0 -0
  150. /package/dist/{storage/sqlite → sqlite-storage}/sqlite-database.d.ts +0 -0
  151. /package/dist/{storage/sqlite → sqlite-storage}/sqlite-database.js +0 -0
@@ -1,6 +1,9 @@
1
1
  import { Readable } from "node:stream";
2
- import { format } from "node:util";
3
- function toWebRequest(req, url) {
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}`);
4
7
  const headers = new Headers();
5
8
  for (const [key, headerValue] of Object.entries(req.headers)) {
6
9
  if (headerValue !== undefined) {
@@ -18,57 +21,45 @@ function toWebRequest(req, url) {
18
21
  if (!["GET", "HEAD"].includes(req.method ?? "")) {
19
22
  body = Readable.toWeb(req);
20
23
  }
21
- const request = new Request(url, {
24
+ return new Request(url, {
22
25
  method: req.method,
23
- headers: headers,
26
+ headers,
24
27
  body,
25
28
  duplex: "half",
26
29
  // Cast required because DOM types omit `duplex`, but Node.js undici fetch requires it when body is a stream
27
30
  });
28
- return request;
29
31
  }
30
- async function handleRequest(req, res, handler) {
31
- const host = req.headers.host ?? "0.0.0.0";
32
- const protocol = req.headers["x-forwarded-proto"] ?? "http";
33
- const url = new URL(req.url ?? "/", `${protocol}://${host}`);
34
- const request = toWebRequest(req, url);
35
- const response = await handler(request);
36
- res.writeHead(response.status, Object.fromEntries(response.headers.entries()));
37
- const reader = response.body?.getReader();
38
- if (reader) {
39
- while (true) {
40
- const { done, value } = await reader.read();
41
- if (done)
42
- break;
43
- res.write(value);
44
- }
45
- }
46
- res.end();
47
- }
48
- export function createListener(handler, logger) {
32
+ export function createListener(handler, options = {}) {
33
+ const log = new KeriLogger(options.logger);
49
34
  return async (req, res) => {
50
35
  const start = Date.now();
51
- const url = req.url ?? "/";
52
36
  const method = req.method ?? "GET";
53
- logger?.(`${method} ${url}`);
37
+ const url = req.url ?? "/";
54
38
  res.on("finish", () => {
55
- const ms = Date.now() - start;
56
- logger?.(`${method} ${url} - ${res.statusCode} - ${ms}ms`, {
57
- request: {
58
- url,
59
- method,
60
- headers: req.headers,
61
- },
62
- response: {
63
- status: res.statusCode,
64
- },
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,
65
45
  });
66
46
  });
67
47
  try {
68
- await handleRequest(req, res, handler);
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();
69
60
  }
70
61
  catch (err) {
71
- logger?.(`Error handling request\n${format(err)}\n`);
62
+ log.error("handler threw", { method, url, error: err instanceof Error ? err.message : String(err) });
72
63
  res.statusCode = 500;
73
64
  res.end("Internal Server Error");
74
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/nodejs-utils/serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/nodejs-utils/serve.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,9 @@
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 CredentialBody, type IssueEvent, type KeyEvent, Message, type RegistryInceptEventBody, type ReplyEventBody, type RevokeEvent } from "../../core/main.ts";
5
- import type { CredentialStorage } from "../credential-storage.ts";
6
- import type { KeyEventStorage } from "../key-event-storage.ts";
7
- import type { MailboxStorage } from "../mailbox-storage.ts";
8
- import type { PrivateKeyStorage } from "../private-key-storage.ts";
9
- export declare class SqliteControllerStorage implements KeyEventStorage, PrivateKeyStorage, CredentialStorage, MailboxStorage {
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 {
10
7
  #private;
11
8
  constructor(db: Database);
12
9
  saveKey(publicKey: string, digest: string, encryptedPrivKey: string): void;
@@ -26,4 +23,6 @@ export declare class SqliteControllerStorage implements KeyEventStorage, Private
26
23
  getCredentialsByRegistry(registryId: string): CredentialBody[];
27
24
  getMailboxOffset(prefix: string, topic: string): number;
28
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>;
29
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,13 +22,15 @@ 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) {
28
29
  case "icp":
29
30
  case "rot":
30
- case "ixn": {
31
+ case "ixn":
32
+ case "dip":
33
+ case "drt": {
31
34
  const body = message.body;
32
35
  return {
33
36
  event_id: body.d,
@@ -35,7 +38,7 @@ function prepareRow(message) {
35
38
  type: body.t,
36
39
  sn: parseInt(body.s, 16),
37
40
  event_json: JSON.stringify(body),
38
- attachments: message.attachments.text(),
41
+ attachments: encodeText(message.attachments.frames()),
39
42
  };
40
43
  }
41
44
  case "vcp": {
@@ -46,7 +49,7 @@ function prepareRow(message) {
46
49
  type: body.t,
47
50
  sn: null,
48
51
  event_json: JSON.stringify(body),
49
- attachments: message.attachments.text(),
52
+ attachments: encodeText(message.attachments.frames()),
50
53
  };
51
54
  }
52
55
  case "iss":
@@ -58,7 +61,7 @@ function prepareRow(message) {
58
61
  type: body.t,
59
62
  sn: null,
60
63
  event_json: JSON.stringify(body),
61
- attachments: message.attachments.text(),
64
+ attachments: encodeText(message.attachments.frames()),
62
65
  };
63
66
  }
64
67
  default: {
@@ -69,7 +72,7 @@ function prepareRow(message) {
69
72
  type: typeof body.t === "string" ? body.t : null,
70
73
  sn: null,
71
74
  event_json: JSON.stringify(body),
72
- attachments: message.attachments.text(),
75
+ attachments: encodeText(message.attachments.frames()),
73
76
  };
74
77
  }
75
78
  }
@@ -150,7 +153,7 @@ export class SqliteControllerStorage {
150
153
  "SELECT event_json, attachments",
151
154
  "FROM event",
152
155
  "WHERE json_extract(event_json, '$.i') = $prefix",
153
- "AND type in ('icp', 'rot', 'ixn')",
156
+ "AND type in ('icp', 'rot', 'ixn', 'dip', 'drt')",
154
157
  "ORDER BY sn ASC",
155
158
  ].join("\n");
156
159
  for (const result of this.#db.iterate(statement, { prefix })) {
@@ -210,5 +213,27 @@ export class SqliteControllerStorage {
210
213
  this.#db.execute("INSERT INTO mailbox_cursor(prefix, topic, offset) VALUES ($prefix, $topic, $offset) " +
211
214
  "ON CONFLICT(prefix, topic) DO UPDATE SET offset = $offset", { prefix, topic, offset });
212
215
  }
216
+ saveMailboxEntry(pre, topic, message) {
217
+ this.#db.execute("INSERT INTO mailbox_entry(pre, topic, event_json, attachments) VALUES ($pre, $topic, $event_json, $attachments)", {
218
+ pre,
219
+ topic,
220
+ event_json: JSON.stringify(message.body),
221
+ attachments: encodeText(message.attachments.frames()),
222
+ });
223
+ }
224
+ *getMailboxEntries(pre, topic, offset) {
225
+ const statement = [
226
+ "SELECT id, event_json, attachments FROM mailbox_entry",
227
+ "WHERE pre = $pre AND topic = $topic AND id > $offset",
228
+ "ORDER BY id ASC",
229
+ ].join("\n");
230
+ for (const row of this.#db.iterate(statement, { pre, topic, offset })) {
231
+ const id = row.id;
232
+ if (typeof id !== "number") {
233
+ throw new Error("mailbox_entry.id missing or not a number");
234
+ }
235
+ yield { id, message: parseRow(row) };
236
+ }
237
+ }
213
238
  }
214
- //# sourceMappingURL=storage-sqlite.js.map
239
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/sqlite-storage/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAoB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EACL,WAAW,EAKX,OAAO,GAIR,MAAM,iBAAiB,CAAC;AAUzB,SAAS,QAAQ,CAAwB,MAAW;IAClD,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IAEjG,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC;AAYD,SAAS,UAAU,CAAwB,OAAmB;IAC5D,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAiC,CAAC;QACvD,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,CAAC;YAChB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;YAClC,IAAI,EAAE,YAAY;YAClB,EAAE,EAAE,IAAI;YACR,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAChC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;SACtD,CAAC;IACJ,CAAC;IAED,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACvB,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAA+B,CAAC;YACrD,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAChB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBAClC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACZ,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBACxB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;aACtD,CAAC;QACJ,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAA0C,CAAC;YAChE,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAChB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBAClC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACZ,EAAE,EAAE,IAAI;gBACR,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;aACtD,CAAC;QACJ,CAAC;QACD,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAA2C,CAAC;YACjE,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAChB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBAClC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACZ,EAAE,EAAE,IAAI;gBACR,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;aACtD,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,GAAG,OAAO,CAAC,IAA8B,CAAC;YACpD,OAAO;gBACL,QAAQ,EAAE,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;gBACpD,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBAClC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;gBAChD,EAAE,EAAE,IAAI;gBACR,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;aACtD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,OAAO,uBAAuB;IAGlC,GAAG,CAAW;IAEd,YAAY,EAAY;QACtB,OAAO,CAAC,EAAE,CAAC,CAAC;QACZ,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,MAAe;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC,CAAC,CAAE,MAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,SAAiB,EAAE,MAAc,EAAE,gBAAwB;QACjE,MAAM,SAAS,GAAG;YAChB,4EAA4E;YAC5E,uDAAuD;YACvD,qCAAqC;SACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B,UAAU,EAAE,SAAS;YACrB,MAAM;YACN,qBAAqB,EAAE,gBAAgB;SACxC,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB,CAAC,SAAiB;QACtC,MAAM,SAAS,GAAG,CAAC,4CAA4C,EAAE,gCAAgC,EAAE,SAAS,CAAC,CAAC,IAAI,CAChH,IAAI,CACL,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,MAAM,CAAC,qBAAqB,CAAC;IACtC,CAAC;IAED,oBAAoB,CAAC,MAAc;QACjC,MAAM,SAAS,GAAG,CAAC,iCAAiC,EAAE,mCAAmC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,MAAM,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,OAAgB;QAC1B,gEAAgE;QAChE,MAAM,SAAS,GAAG;YAChB,0EAA0E;YAC1E,sEAAsE;YACtE,wEAAwE;SACzE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,CAAC,UAAU,CAAC,SAAyD,EAAE;QACrE,MAAM,UAAU,GAAa,CAAC,cAAc,CAAC,CAAC;QAC9C,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAC9D,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAC1B,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC9B,CAAC;QAED,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAC9D,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAC1B,CAAC;QAED,MAAM,SAAS,GAAG;YAChB,2CAA2C;YAC3C,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACnC,iBAAiB;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;YACzD,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,CAAC,YAAY,CAAC,MAAc;QAC1B,MAAM,SAAS,GAAG;YAChB,gCAAgC;YAChC,YAAY;YACZ,iDAAiD;YACjD,iDAAiD;YACjD,iBAAiB;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAC7D,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,CAAC,mBAAmB,CAAC,EAAU;QAC7B,MAAM,SAAS,GAAG;YAChB,gCAAgC;YAChC,YAAY;YACZ,wEAAwE;YACxE,oBAAoB;SACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACtD,MAAM,QAAQ,CAA2B,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,MAAM,SAAS,GAAG;YAChB,gCAAgC;YAChC,YAAY;YACZ,8DAA8D;YAC9D,SAAS;SACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAED,CAAC,oBAAoB,CAAC,KAAa;QACjC,MAAM,SAAS,GAAG;YAChB,gCAAgC;YAChC,YAAY;YACZ,kEAAkE;YAClE,oBAAoB;SACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACzD,MAAM,QAAQ,CAA0B,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,MAAM,SAAS,GAAG,CAAC,gCAAgC,EAAE,YAAY,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,CAAC,CAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAuB,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,CAAC;IAED,wBAAwB,CAAC,UAAkB;QACzC,MAAM,SAAS,GAAG;YAChB,gCAAgC;YAChC,YAAY;YACZ,uDAAuD;SACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAC7E,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAsB,CAC9C,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,MAAc,EAAE,KAAa;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAC3B,qFAAqF,EACrF,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;QACF,OAAO,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,iBAAiB,CAAC,MAAc,EAAE,KAAa,EAAE,MAAc;QAC7D,IAAI,CAAC,GAAG,CAAC,OAAO,CACd,sFAAsF;YACpF,2DAA2D,EAC7D,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAC1B,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,GAAW,EAAE,KAAa,EAAE,OAAgB;QAC3D,IAAI,CAAC,GAAG,CAAC,OAAO,CACd,iHAAiH,EACjH;YACE,GAAG;YACH,KAAK;YACL,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YACxC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;SACtD,CACF,CAAC;IACJ,CAAC;IAED,CAAC,iBAAiB,CAAC,GAAW,EAAE,KAAa,EAAE,MAAc;QAC3D,MAAM,SAAS,GAAG;YAChB,uDAAuD;YACvD,sDAAsD;YACtD,iBAAiB;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACtE,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;CACF"}
@@ -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"}
@@ -30,6 +30,18 @@ const migrations = [
30
30
  ")",
31
31
  ].join("\n"),
32
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
+ ],
33
45
  ];
34
46
  export function migrate(db) {
35
47
  db.execute(`CREATE TABLE IF NOT EXISTS schema_version (version INTEGER NOT NULL)`);
@@ -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,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,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":""}
@@ -1,2 +1,3 @@
1
+ export type { Logger } from "../logging/main.ts";
1
2
  export { Witness, WitnessError, type WitnessEvent, type WitnessOptions } from "./witness.ts";
2
- export { createRouter } from "./witness-router.ts";
3
+ export { createRouter, type RouterOptions } from "./witness-router.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/witness/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAA0C,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
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"}
@@ -1,2 +1,6 @@
1
+ import { type Logger } from "../logging/main.ts";
1
2
  import { type Witness } from "./witness.ts";
2
- export declare function createRouter(witness: Witness): (request: Request) => Promise<Response>;
3
+ export interface RouterOptions {
4
+ logger?: Logger;
5
+ }
6
+ export declare function createRouter(witness: Witness, options?: RouterOptions): (request: Request) => Promise<Response>;
@@ -1,5 +1,5 @@
1
- import { Attachments } from "../cesr/__main__.js";
2
- import { parseKeyEvents } from "./parser.js";
1
+ import { Attachments, encodeText, parse } from "../cesr/main.js";
2
+ import { KeriLogger } from "../logging/main.js";
3
3
  import { WitnessError } from "./witness.js";
4
4
  function createResponse(events) {
5
5
  const body = events
@@ -10,7 +10,7 @@ function createResponse(events) {
10
10
  NonTransReceiptCouples: message.attachments.NonTransReceiptCouples,
11
11
  FirstSeenReplayCouples: [{ fnu: String(message.body.s ?? "0"), dt: timestamp }],
12
12
  });
13
- return [new TextDecoder().decode(message.raw), atc.text()];
13
+ return [new TextDecoder().decode(message.raw), encodeText(atc.frames())];
14
14
  })
15
15
  .join("");
16
16
  return new Response(body, {
@@ -18,26 +18,30 @@ function createResponse(events) {
18
18
  headers: { "Content-Type": "application/json+cesr" },
19
19
  });
20
20
  }
21
- export function createRouter(witness) {
21
+ export function createRouter(witness, options = {}) {
22
+ const log = new KeriLogger(options.logger);
22
23
  async function handleReceiptRequest(request) {
23
24
  const atc = request.headers.get("CESR-ATTACHMENT");
24
25
  if (!atc) {
26
+ log.warn("rejecting POST /receipts: missing CESR-ATTACHMENT");
25
27
  return Response.json({ error: "Bad Request" }, { status: 400 });
26
28
  }
27
29
  const bodyText = await request.text();
28
30
  const receipts = [];
29
- for await (const witnessEvent of parseKeyEvents(bodyText + atc)) {
31
+ for await (const witnessEvent of parse(bodyText + atc)) {
30
32
  try {
31
- const receipt = witness.receipt(witnessEvent.message);
33
+ const receipt = witness.receipt(witnessEvent);
32
34
  receipts.push({ message: receipt, timestamp: new Date() });
33
35
  }
34
36
  catch (err) {
35
37
  if (err instanceof WitnessError) {
38
+ log.warn("rejecting POST /receipts", { error: err.message });
36
39
  return Response.json({ error: "Bad Request" }, { status: 400 });
37
40
  }
38
41
  throw err;
39
42
  }
40
43
  }
44
+ log.debug("POST /receipts: issued receipts", { count: receipts.length });
41
45
  return createResponse(receipts);
42
46
  }
43
47
  async function handleOobiRequest(request) {
@@ -45,6 +49,7 @@ export function createRouter(witness) {
45
49
  const aid = url.pathname.split("/")[2];
46
50
  let response;
47
51
  if (aid === undefined || aid === witness.aid) {
52
+ log.debug("GET /oobi: serving self", { count: witness.events.length });
48
53
  response = createResponse(witness.events);
49
54
  }
50
55
  else {
@@ -52,7 +57,14 @@ export function createRouter(witness) {
52
57
  message: event,
53
58
  timestamp: event.attachments.FirstSeenReplayCouples[0]?.dt ?? new Date(0),
54
59
  }));
55
- response = events.length === 0 ? new Response("Not Found", { status: 404 }) : createResponse(events);
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
+ }
56
68
  }
57
69
  response.headers.set("Keri-Aid", witness.aid);
58
70
  return response;
@@ -60,12 +72,16 @@ export function createRouter(witness) {
60
72
  async function handleMessageRequest(request) {
61
73
  const atc = request.headers.get("CESR-ATTACHMENT");
62
74
  if (!atc) {
75
+ log.warn("rejecting POST /: missing CESR-ATTACHMENT");
63
76
  return Response.json({ error: "Bad Request" }, { status: 400 });
64
77
  }
65
78
  const bodyText = await request.text();
66
- for await (const event of parseKeyEvents(bodyText + atc)) {
67
- witness.handleMessage(event.message);
79
+ let count = 0;
80
+ for await (const event of parse(bodyText + atc)) {
81
+ witness.handleMessage(event);
82
+ count++;
68
83
  }
84
+ log.debug("POST /: handled messages", { count });
69
85
  return new Response(null, { status: 200 });
70
86
  }
71
87
  return async function handler(request) {
@@ -1 +1 @@
1
- {"version":3,"file":"witness-router.js","sourceRoot":"","sources":["../../src/witness/witness-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"witness-router.js","sourceRoot":"","sources":["../../src/witness/witness-router.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
- import { Message } from "../cesr/__main__.ts";
1
+ import { Message } from "../cesr/main.ts";
2
2
  import { type KeyEvent, type KeyEventBody, KeyEventLog, type ReceiptEventBody } from "../core/main.ts";
3
- import type { KeyEventStorage } from "../storage/key-event-storage.ts";
3
+ import { type Logger } from "../logging/main.ts";
4
+ import type { KeyEventStorage } from "../storage/main.ts";
4
5
  export interface WitnessOptions {
5
6
  privateKey?: Uint8Array;
6
7
  url?: string;
7
8
  storage: KeyEventStorage;
9
+ logger?: Logger;
8
10
  }
9
11
  export interface WitnessEvent {
10
12
  readonly message: Message;
@@ -1,6 +1,7 @@
1
1
  import { ed25519 } from "@noble/curves/ed25519.js";
2
- import { Attachments, Indexer, Matter, Message } from "../cesr/__main__.js";
2
+ import { Attachments, encodeText, Indexer, Matter, Message } from "../cesr/main.js";
3
3
  import { KeyEventLog, keri } from "../core/main.js";
4
+ import { KeriLogger } from "../logging/main.js";
4
5
  export class WitnessError extends Error {
5
6
  }
6
7
  export class Witness {
@@ -8,17 +9,18 @@ export class Witness {
8
9
  #storage;
9
10
  #privateKey;
10
11
  #kel;
12
+ #log;
11
13
  get aid() {
12
14
  return this.#kel.state.identifier;
13
15
  }
14
16
  static createKEL(privateKey) {
15
- const publicKey = new Matter({ code: Matter.Code.Ed25519N, raw: ed25519.getPublicKey(privateKey) }).text();
17
+ const publicKey = encodeText(new Matter({ code: Matter.Code.Ed25519N, raw: ed25519.getPublicKey(privateKey) }));
16
18
  const icp = keri.incept({
17
19
  signingKeys: [publicKey],
18
20
  nextKeys: [],
19
21
  });
20
22
  icp.attachments = {
21
- ControllerIdxSigs: [Indexer.crypto.ed25519_sig(ed25519.sign(icp.raw, privateKey), 0).text()],
23
+ ControllerIdxSigs: [encodeText(Indexer.crypto.ed25519_sig(ed25519.sign(icp.raw, privateKey), 0))],
22
24
  };
23
25
  return KeyEventLog.from([icp]);
24
26
  }
@@ -26,6 +28,7 @@ export class Witness {
26
28
  this.#storage = options.storage;
27
29
  this.#privateKey = options.privateKey ?? ed25519.utils.randomSecretKey();
28
30
  this.#kel = Witness.createKEL(this.#privateKey);
31
+ this.#log = new KeriLogger(options.logger);
29
32
  const events = [{ message: this.#kel.events[0], timestamp: new Date() }];
30
33
  if (options.url) {
31
34
  const url = new URL(options.url);
@@ -60,9 +63,11 @@ export class Witness {
60
63
  receipt(message) {
61
64
  const body = message.body;
62
65
  if (typeof body.i !== "string" || typeof body.d !== "string" || typeof body.s !== "string") {
66
+ this.#log.warn("rejecting receipt: missing required fields i/d/s");
63
67
  throw new WitnessError("Missing required fields i, d, s");
64
68
  }
65
69
  if (message.attachments.ControllerIdxSigs.length === 0) {
70
+ this.#log.warn("rejecting receipt: no controller signatures", { aid: body.i, s: body.s, d: body.d });
66
71
  throw new WitnessError("Missing controller signatures");
67
72
  }
68
73
  let kel = KeyEventLog.from(this.#storage.getKeyEvents(body.i));
@@ -71,16 +76,27 @@ export class Witness {
71
76
  }
72
77
  catch (error) {
73
78
  if (error instanceof Error) {
79
+ this.#log.warn("rejecting receipt: KEL append failed", {
80
+ aid: body.i,
81
+ s: body.s,
82
+ d: body.d,
83
+ error: error.message,
84
+ });
74
85
  throw new WitnessError(`Failed to append message to KEL: ${error.message}`);
75
86
  }
76
87
  }
77
- const sig = this.#sign(message);
78
88
  const witnessIndex = kel.state.backers.indexOf(this.aid);
89
+ if (witnessIndex < 0) {
90
+ this.#log.warn("rejecting receipt: not a backer for this AID", { aid: body.i, s: body.s, d: body.d });
91
+ throw new WitnessError("Witness is not a backer for this AID");
92
+ }
93
+ this.#log.debug("issuing receipt", { aid: body.i, s: body.s, d: body.d });
94
+ const sig = this.#sign(message);
79
95
  const receipt = keri.receipt({ d: message.body.d, i: message.body.i, s: message.body.s });
80
96
  receipt.attachments = {
81
97
  NonTransReceiptCouples: [{ prefix: this.#kel.state.identifier, sig }],
82
98
  };
83
- const WitnessIdxSigs = witnessIndex >= 0 ? [Indexer.convert(Matter.parse(sig), witnessIndex).text()] : [];
99
+ const WitnessIdxSigs = [encodeText(Indexer.convert(Matter.parse(sig), witnessIndex))];
84
100
  const storedMessage = new Message(message.body, {
85
101
  ControllerIdxSigs: message.attachments.ControllerIdxSigs,
86
102
  WitnessIdxSigs,
@@ -92,20 +108,28 @@ export class Witness {
92
108
  handleMessage(message) {
93
109
  const body = message.body;
94
110
  if (body.t !== "rct") {
111
+ this.#log.debug("ignoring message: only rct handled", { t: body.t });
95
112
  return;
96
113
  }
97
114
  if (typeof body.i !== "string" || typeof body.d !== "string") {
115
+ this.#log.warn("ignoring receipt: missing i/d");
98
116
  return;
99
117
  }
100
118
  const kel = KeyEventLog.from(this.#storage.getKeyEvents(body.i), {
101
119
  // TODO: This should only be for the event that is this receit
102
120
  allowPartiallyWitnessed: true,
103
121
  });
122
+ if (kel.events.length === 0) {
123
+ this.#log.debug("ignoring receipt: no events stored for aid", { aid: body.i, d: body.d });
124
+ return;
125
+ }
104
126
  if (!kel.state.backers.includes(this.aid)) {
127
+ this.#log.debug("ignoring receipt: not a backer", { aid: body.i, d: body.d });
105
128
  return;
106
129
  }
107
130
  const storedEvent = kel.events.find((event) => event.body.d === body.d);
108
131
  if (!storedEvent) {
132
+ this.#log.debug("ignoring receipt: no matching stored event", { aid: body.i, d: body.d });
109
133
  return;
110
134
  }
111
135
  const existingWigsByIndex = new Map();
@@ -118,7 +142,7 @@ export class Witness {
118
142
  if (witnessIndex === -1) {
119
143
  continue;
120
144
  }
121
- const wigSig = Indexer.convert(Matter.parse(couple.sig), witnessIndex).text();
145
+ const wigSig = encodeText(Indexer.convert(Matter.parse(couple.sig), witnessIndex));
122
146
  existingWigsByIndex.set(witnessIndex, wigSig);
123
147
  }
124
148
  const mergedAttachments = new Attachments({
@@ -126,6 +150,7 @@ export class Witness {
126
150
  WitnessIdxSigs: Array.from(existingWigsByIndex.values()),
127
151
  FirstSeenReplayCouples: storedEvent.attachments.FirstSeenReplayCouples,
128
152
  });
153
+ this.#log.debug("merged witness sigs", { aid: body.i, d: body.d, count: existingWigsByIndex.size });
129
154
  this.#storage.saveMessage(new Message(storedEvent.body, mergedAttachments));
130
155
  }
131
156
  *getKeyEvents(aid) {
@@ -133,7 +158,7 @@ export class Witness {
133
158
  }
134
159
  #sign(message) {
135
160
  const rawSignature = ed25519.sign(message.raw, this.#privateKey);
136
- return new Matter({ code: Matter.Code.Ed25519_Sig, raw: rawSignature }).text();
161
+ return encodeText(new Matter({ code: Matter.Code.Ed25519_Sig, raw: rawSignature }));
137
162
  }
138
163
  }
139
164
  //# sourceMappingURL=witness.js.map