keri 0.0.0-dev.bf75350 → 0.0.0-dev.deec53e

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 (197) hide show
  1. package/README.md +1 -1
  2. package/dist/cesr/__main__.d.ts +10 -0
  3. package/dist/cesr/__main__.js +11 -0
  4. package/dist/cesr/__main__.js.map +1 -0
  5. package/dist/cesr/array-utils.d.ts +3 -0
  6. package/dist/cesr/array-utils.js +29 -0
  7. package/dist/cesr/array-utils.js.map +1 -0
  8. package/dist/cesr/attachments-reader.d.ts +10 -0
  9. package/dist/cesr/attachments-reader.js +273 -0
  10. package/dist/cesr/attachments-reader.js.map +1 -0
  11. package/dist/cesr/attachments.d.ts +68 -0
  12. package/dist/cesr/attachments.js +116 -0
  13. package/dist/cesr/attachments.js.map +1 -0
  14. package/dist/cesr/codec.d.ts +26 -0
  15. package/dist/cesr/codec.js +26 -0
  16. package/dist/cesr/codec.js.map +1 -0
  17. package/dist/cesr/codes.d.ts +1208 -0
  18. package/dist/cesr/codes.js +309 -0
  19. package/dist/cesr/codes.js.map +1 -0
  20. package/dist/cesr/counter.d.ts +117 -0
  21. package/dist/cesr/counter.js +93 -0
  22. package/dist/cesr/counter.js.map +1 -0
  23. package/dist/cesr/frame.d.ts +36 -0
  24. package/dist/cesr/frame.js +97 -0
  25. package/dist/cesr/frame.js.map +1 -0
  26. package/dist/cesr/genus.d.ts +21 -0
  27. package/dist/cesr/genus.js +66 -0
  28. package/dist/cesr/genus.js.map +1 -0
  29. package/dist/cesr/groups/generic-map.d.ts +11 -0
  30. package/dist/cesr/groups/generic-map.js +59 -0
  31. package/dist/cesr/groups/generic-map.js.map +1 -0
  32. package/dist/cesr/indexer.d.ts +70 -0
  33. package/dist/cesr/indexer.js +177 -0
  34. package/dist/cesr/indexer.js.map +1 -0
  35. package/dist/cesr/matter.d.ts +163 -0
  36. package/dist/cesr/matter.js +311 -0
  37. package/dist/cesr/matter.js.map +1 -0
  38. package/dist/cesr/message.d.ts +17 -0
  39. package/dist/cesr/message.js +81 -0
  40. package/dist/cesr/message.js.map +1 -0
  41. package/dist/cesr/parse.d.ts +37 -0
  42. package/dist/cesr/parse.js +137 -0
  43. package/dist/cesr/parse.js.map +1 -0
  44. package/dist/cesr/shifting.d.ts +7 -0
  45. package/dist/cesr/shifting.js +10 -0
  46. package/dist/cesr/shifting.js.map +1 -0
  47. package/dist/cesr/version-string.d.ts +35 -0
  48. package/dist/cesr/version-string.js +147 -0
  49. package/dist/cesr/version-string.js.map +1 -0
  50. package/dist/cli/cli.d.ts +5 -0
  51. package/dist/cli/cli.js +73 -0
  52. package/dist/cli/cli.js.map +1 -0
  53. package/dist/cli/input.d.ts +1 -0
  54. package/dist/cli/input.js +22 -0
  55. package/dist/cli/input.js.map +1 -0
  56. package/dist/cli/node-cli.d.ts +2 -0
  57. package/dist/cli/node-cli.js +19 -0
  58. package/dist/cli/node-cli.js.map +1 -0
  59. package/dist/controller/controller.d.ts +101 -0
  60. package/dist/controller/controller.js +549 -0
  61. package/dist/controller/controller.js.map +1 -0
  62. package/dist/controller/encrypt.d.ts +45 -0
  63. package/dist/controller/encrypt.js +120 -0
  64. package/dist/controller/encrypt.js.map +1 -0
  65. package/dist/core/credential-event.d.ts +54 -0
  66. package/dist/core/credential-event.js +28 -0
  67. package/dist/core/credential-event.js.map +1 -0
  68. package/dist/core/credential.d.ts +79 -0
  69. package/dist/core/credential.js +25 -0
  70. package/dist/core/credential.js.map +1 -0
  71. package/dist/core/digest.d.ts +1 -0
  72. package/dist/core/digest.js +7 -0
  73. package/dist/core/digest.js.map +1 -0
  74. package/dist/core/endpoint-discovery.d.ts +20 -0
  75. package/dist/core/endpoint-discovery.js +60 -0
  76. package/dist/core/endpoint-discovery.js.map +1 -0
  77. package/dist/core/events.d.ts +12 -0
  78. package/dist/core/events.js +25 -0
  79. package/dist/core/events.js.map +1 -0
  80. package/dist/core/kawa.d.ts +17 -0
  81. package/dist/core/kawa.js +48 -0
  82. package/dist/core/kawa.js.map +1 -0
  83. package/dist/core/key-event-log.d.ts +19 -0
  84. package/dist/core/key-event-log.js +155 -0
  85. package/dist/core/key-event-log.js.map +1 -0
  86. package/dist/core/key-event.d.ts +94 -0
  87. package/dist/core/key-event.js +88 -0
  88. package/dist/core/key-event.js.map +1 -0
  89. package/dist/core/keys.d.ts +10 -0
  90. package/dist/core/keys.js +17 -0
  91. package/dist/core/keys.js.map +1 -0
  92. package/dist/core/mailbox-client.d.ts +23 -0
  93. package/dist/core/mailbox-client.js +59 -0
  94. package/dist/core/mailbox-client.js.map +1 -0
  95. package/dist/core/main.d.ts +51 -0
  96. package/dist/core/main.js +43 -0
  97. package/dist/core/main.js.map +1 -0
  98. package/dist/core/receipt-event.d.ts +15 -0
  99. package/dist/core/receipt-event.js +13 -0
  100. package/dist/core/receipt-event.js.map +1 -0
  101. package/dist/core/registry-event.d.ts +26 -0
  102. package/dist/core/registry-event.js +18 -0
  103. package/dist/core/registry-event.js.map +1 -0
  104. package/dist/core/routed-event.d.ts +67 -0
  105. package/dist/core/routed-event.js +53 -0
  106. package/dist/core/routed-event.js.map +1 -0
  107. package/dist/core/said.d.ts +4 -0
  108. package/dist/core/said.js +26 -0
  109. package/dist/core/said.js.map +1 -0
  110. package/dist/core/sign.d.ts +5 -0
  111. package/dist/core/sign.js +10 -0
  112. package/dist/core/sign.js.map +1 -0
  113. package/dist/core/threshold.d.ts +6 -0
  114. package/dist/core/threshold.js +58 -0
  115. package/dist/core/threshold.js.map +1 -0
  116. package/dist/core/verify.d.ts +23 -0
  117. package/dist/core/verify.js +62 -0
  118. package/dist/core/verify.js.map +1 -0
  119. package/dist/core/witness-client.d.ts +8 -0
  120. package/dist/core/witness-client.js +39 -0
  121. package/dist/core/witness-client.js.map +1 -0
  122. package/dist/encoding/base64.d.ts +4 -0
  123. package/dist/encoding/base64.js +82 -0
  124. package/dist/encoding/base64.js.map +1 -0
  125. package/dist/encoding/utf8.d.ts +2 -0
  126. package/dist/encoding/utf8.js +9 -0
  127. package/dist/encoding/utf8.js.map +1 -0
  128. package/dist/main.d.ts +3 -6
  129. package/dist/main.js +3 -6
  130. package/dist/main.js.map +1 -1
  131. package/dist/nodejs-utils/serve.d.ts +5 -0
  132. package/dist/nodejs-utils/serve.js +77 -0
  133. package/dist/nodejs-utils/serve.js.map +1 -0
  134. package/dist/storage/credential-storage.d.ts +8 -0
  135. package/dist/storage/credential-storage.js +2 -0
  136. package/dist/storage/credential-storage.js.map +1 -0
  137. package/dist/storage/key-event-storage.d.ts +10 -0
  138. package/dist/storage/key-event-storage.js +2 -0
  139. package/dist/storage/key-event-storage.js.map +1 -0
  140. package/dist/storage/mailbox-storage.d.ts +4 -0
  141. package/dist/storage/mailbox-storage.js +2 -0
  142. package/dist/storage/mailbox-storage.js.map +1 -0
  143. package/dist/storage/private-key-storage.d.ts +5 -0
  144. package/dist/storage/private-key-storage.js +2 -0
  145. package/dist/storage/private-key-storage.js.map +1 -0
  146. package/dist/storage/sqlite/node-sqlite.d.ts +12 -0
  147. package/dist/storage/sqlite/node-sqlite.js +25 -0
  148. package/dist/storage/sqlite/node-sqlite.js.map +1 -0
  149. package/dist/storage/sqlite/schema.d.ts +2 -0
  150. package/dist/storage/sqlite/schema.js +55 -0
  151. package/dist/storage/sqlite/schema.js.map +1 -0
  152. package/dist/storage/sqlite/sqlite-database.d.ts +13 -0
  153. package/dist/storage/sqlite/sqlite-database.js +2 -0
  154. package/dist/storage/sqlite/sqlite-database.js.map +1 -0
  155. package/dist/storage/sqlite/storage-sqlite.d.ts +29 -0
  156. package/dist/storage/sqlite/storage-sqlite.js +214 -0
  157. package/dist/storage/sqlite/storage-sqlite.js.map +1 -0
  158. package/dist/witness/main.d.ts +2 -0
  159. package/dist/witness/main.js +3 -0
  160. package/dist/witness/main.js.map +1 -0
  161. package/dist/witness/witness-router.d.ts +2 -0
  162. package/dist/witness/witness-router.js +103 -0
  163. package/dist/witness/witness-router.js.map +1 -0
  164. package/dist/witness/witness.d.ts +24 -0
  165. package/dist/witness/witness.js +139 -0
  166. package/dist/witness/witness.js.map +1 -0
  167. package/package.json +36 -23
  168. package/dist/cli/main.d.ts +0 -2
  169. package/dist/cli/main.js +0 -177
  170. package/dist/cli/main.js.map +0 -1
  171. package/dist/client.d.ts +0 -21
  172. package/dist/client.js +0 -72
  173. package/dist/client.js.map +0 -1
  174. package/dist/controller.d.ts +0 -65
  175. package/dist/controller.js +0 -475
  176. package/dist/controller.js.map +0 -1
  177. package/dist/data-type.d.ts +0 -9
  178. package/dist/data-type.js +0 -2
  179. package/dist/data-type.js.map +0 -1
  180. package/dist/db/storage-sqlite.d.ts +0 -12
  181. package/dist/db/storage-sqlite.js +0 -57
  182. package/dist/db/storage-sqlite.js.map +0 -1
  183. package/dist/db/storage.d.ts +0 -18
  184. package/dist/db/storage.js +0 -37
  185. package/dist/db/storage.js.map +0 -1
  186. package/dist/events/event-store.d.ts +0 -133
  187. package/dist/events/event-store.js +0 -215
  188. package/dist/events/event-store.js.map +0 -1
  189. package/dist/events/events.d.ts +0 -251
  190. package/dist/events/events.js +0 -184
  191. package/dist/events/events.js.map +0 -1
  192. package/dist/keystore/encrypt.d.ts +0 -10
  193. package/dist/keystore/encrypt.js +0 -39
  194. package/dist/keystore/encrypt.js.map +0 -1
  195. package/dist/keystore/keystore.d.ts +0 -29
  196. package/dist/keystore/keystore.js +0 -72
  197. package/dist/keystore/keystore.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/nodejs-utils/serve.ts"],"names":[],"mappings":"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"}
@@ -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,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 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,12 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ import type { Database, Params, Row } from "./sqlite-database.ts";
3
+ /**
4
+ * Adapter that wraps the built-in `node:sqlite` `DatabaseSync` class so it satisfies the `Database` interface.
5
+ */
6
+ export declare class NodeSqliteDatabase implements Database {
7
+ #private;
8
+ constructor(db: DatabaseSync);
9
+ execute(sql: string, params?: Params): void;
10
+ queryOne(sql: string, params?: Params): Row | undefined;
11
+ iterate(sql: string, params?: Params): Iterable<Row>;
12
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Adapter that wraps the built-in `node:sqlite` `DatabaseSync` class so it satisfies the `Database` interface.
3
+ */
4
+ export class NodeSqliteDatabase {
5
+ #db;
6
+ constructor(db) {
7
+ this.#db = db;
8
+ }
9
+ execute(sql, params) {
10
+ if (params !== undefined) {
11
+ this.#db.prepare(sql).run(params);
12
+ }
13
+ else {
14
+ this.#db.exec(sql);
15
+ }
16
+ }
17
+ queryOne(sql, params) {
18
+ const result = this.#db.prepare(sql).get(params ?? {});
19
+ return result;
20
+ }
21
+ iterate(sql, params) {
22
+ return this.#db.prepare(sql).iterate(params ?? {});
23
+ }
24
+ }
25
+ //# sourceMappingURL=node-sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-sqlite.js","sourceRoot":"","sources":["../../../src/storage/sqlite/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,2 @@
1
+ import type { Database } from "./sqlite-database.ts";
2
+ export declare function migrate(db: Database): void;
@@ -0,0 +1,55 @@
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
+ ];
34
+ export function migrate(db) {
35
+ db.execute(`CREATE TABLE IF NOT EXISTS schema_version (version INTEGER NOT NULL)`);
36
+ db.execute(`INSERT INTO schema_version (version) SELECT 0 WHERE NOT EXISTS (SELECT 1 FROM schema_version)`);
37
+ const row = Array.from(db.iterate("SELECT version FROM schema_version"))[0];
38
+ let current = typeof row?.version === "number" ? row.version : 0;
39
+ for (let i = current; i < migrations.length; i++) {
40
+ db.execute("BEGIN");
41
+ try {
42
+ for (const statement of migrations[i]) {
43
+ db.execute(statement);
44
+ }
45
+ db.execute(`UPDATE schema_version SET version = ${i + 1}`);
46
+ db.execute("COMMIT");
47
+ }
48
+ catch (err) {
49
+ db.execute("ROLLBACK");
50
+ throw err;
51
+ }
52
+ current = i + 1;
53
+ }
54
+ }
55
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/storage/sqlite/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;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,13 @@
1
+ export type SQLValue = string | number | null | Uint8Array;
2
+ export type Params = Record<string, SQLValue>;
3
+ export type Row = Record<string, SQLValue>;
4
+ export interface Database {
5
+ /**
6
+ * Execute a statement that produces no rows (DDL, DML, transaction control).
7
+ */
8
+ execute(sql: string, params?: Params): void;
9
+ /**
10
+ * Iterate over matching rows one at a time without loading all into memory.
11
+ */
12
+ iterate(sql: string, params?: Params): Iterable<Row>;
13
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sqlite-database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-database.js","sourceRoot":"","sources":["../../../src/storage/sqlite/sqlite-database.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import type { Database } from "./sqlite-database.ts";
2
+ export { NodeSqliteDatabase } from "./node-sqlite.ts";
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 {
10
+ #private;
11
+ constructor(db: Database);
12
+ saveKey(publicKey: string, digest: string, encryptedPrivKey: string): void;
13
+ getEncryptedPrivateKey(publicKey: string): string;
14
+ getPublicKeyByDigest(digest: string): string;
15
+ saveMessage(message: Message): void;
16
+ getReplies(filter?: {
17
+ route?: string;
18
+ eid?: string;
19
+ cid?: string;
20
+ }): Generator<Message<ReplyEventBody>>;
21
+ getKeyEvents(prefix: string): Generator<KeyEvent>;
22
+ getCredentialEvents(id: string): Generator<Message<IssueEvent | RevokeEvent>>;
23
+ getRegistry(id: string): Message<RegistryInceptEventBody> | null;
24
+ getRegistriesByOwner(owner: string): Generator<Message<RegistryInceptEventBody>>;
25
+ getCredential(id: string): CredentialBody | null;
26
+ getCredentialsByRegistry(registryId: string): CredentialBody[];
27
+ getMailboxOffset(prefix: string, topic: string): number;
28
+ saveMailboxOffset(prefix: string, topic: string, offset: number): void;
29
+ }
@@ -0,0 +1,214 @@
1
+ import { migrate } from "./schema.js";
2
+ export { NodeSqliteDatabase } from "./node-sqlite.js";
3
+ import { Attachments, Message, } from "../../core/main.js";
4
+ function parseRow(result) {
5
+ if (!("event_json" in result) || typeof result.event_json !== "string") {
6
+ throw new Error("Row does not contain event_json");
7
+ }
8
+ if (!("attachments" in result) || typeof result.attachments !== "string") {
9
+ throw new Error("Row does not contain attachments");
10
+ }
11
+ const body = JSON.parse(result.event_json);
12
+ const atc = Attachments.parse(new TextEncoder().encode(result.attachments)) ?? new Attachments();
13
+ return new Message(body, atc);
14
+ }
15
+ function prepareRow(message) {
16
+ if (message.version.protocol === "ACDC") {
17
+ const body = message.body;
18
+ return {
19
+ event_id: body.d,
20
+ protocol: message.version.protocol,
21
+ type: "credential",
22
+ sn: null,
23
+ event_json: JSON.stringify(body),
24
+ attachments: message.attachments.text(),
25
+ };
26
+ }
27
+ switch (message.body.t) {
28
+ case "icp":
29
+ case "rot":
30
+ case "ixn": {
31
+ const body = message.body;
32
+ return {
33
+ event_id: body.d,
34
+ protocol: message.version.protocol,
35
+ type: body.t,
36
+ sn: parseInt(body.s, 16),
37
+ event_json: JSON.stringify(body),
38
+ attachments: message.attachments.text(),
39
+ };
40
+ }
41
+ case "vcp": {
42
+ const body = message.body;
43
+ return {
44
+ event_id: body.d,
45
+ protocol: message.version.protocol,
46
+ type: body.t,
47
+ sn: null,
48
+ event_json: JSON.stringify(body),
49
+ attachments: message.attachments.text(),
50
+ };
51
+ }
52
+ case "iss":
53
+ case "rev": {
54
+ const body = message.body;
55
+ return {
56
+ event_id: body.d,
57
+ protocol: message.version.protocol,
58
+ type: body.t,
59
+ sn: null,
60
+ event_json: JSON.stringify(body),
61
+ attachments: message.attachments.text(),
62
+ };
63
+ }
64
+ default: {
65
+ const body = message.body;
66
+ return {
67
+ event_id: typeof body.d === "string" ? body.d : null,
68
+ protocol: message.version.protocol,
69
+ type: typeof body.t === "string" ? body.t : null,
70
+ sn: null,
71
+ event_json: JSON.stringify(body),
72
+ attachments: message.attachments.text(),
73
+ };
74
+ }
75
+ }
76
+ }
77
+ export class SqliteControllerStorage {
78
+ #db;
79
+ constructor(db) {
80
+ migrate(db);
81
+ this.#db = db;
82
+ }
83
+ #queryOne(sql, params) {
84
+ const result = Array.from(this.#db.iterate(sql, params))[0];
85
+ return result ? result : undefined;
86
+ }
87
+ saveKey(publicKey, digest, encryptedPrivKey) {
88
+ const statement = [
89
+ "INSERT INTO key_info(public_key, public_key_digest, encrypted_private_key)",
90
+ "VALUES ($public_key, $digest, $encrypted_private_key)",
91
+ "ON CONFLICT (public_key) DO NOTHING",
92
+ ].join("\n");
93
+ this.#db.execute(statement, {
94
+ public_key: publicKey,
95
+ digest,
96
+ encrypted_private_key: encryptedPrivKey,
97
+ });
98
+ }
99
+ getEncryptedPrivateKey(publicKey) {
100
+ const statement = ["SELECT encrypted_private_key FROM key_info", "WHERE public_key = $public_key", "LIMIT 1"].join("\n");
101
+ const result = this.#queryOne(statement, { public_key: publicKey });
102
+ if (!result || typeof result.encrypted_private_key !== "string") {
103
+ throw new Error(`Key not found for public key: ${publicKey}`);
104
+ }
105
+ return result.encrypted_private_key;
106
+ }
107
+ getPublicKeyByDigest(digest) {
108
+ const statement = ["SELECT public_key FROM key_info", "WHERE public_key_digest = $digest", "LIMIT 1"].join("\n");
109
+ const result = this.#queryOne(statement, { digest });
110
+ if (!result || typeof result.public_key !== "string") {
111
+ throw new Error(`Key not found for digest: ${digest}`);
112
+ }
113
+ return result.public_key;
114
+ }
115
+ saveMessage(message) {
116
+ // TODO: Should we use a flag to indicate "upsert" or "insert" ?
117
+ const statement = [
118
+ "INSERT INTO event(event_id, protocol, type, sn, event_json, attachments)",
119
+ "VALUES ($event_id, $protocol, $type, $sn, $event_json, $attachments)",
120
+ "ON CONFLICT(event_id) DO UPDATE SET attachments = excluded.attachments",
121
+ ].join("\n");
122
+ this.#db.execute(statement, prepareRow(message));
123
+ }
124
+ *getReplies(filter = {}) {
125
+ const conditions = ["type = 'rpy'"];
126
+ const params = {};
127
+ if (filter.eid !== undefined) {
128
+ conditions.push("json_extract(event_json, '$.a.eid') = $eid");
129
+ params.eid = filter.eid;
130
+ }
131
+ if (filter.route !== undefined) {
132
+ conditions.push("json_extract(event_json, '$.r') = $route");
133
+ params.route = filter.route;
134
+ }
135
+ if (filter.cid !== undefined) {
136
+ conditions.push("json_extract(event_json, '$.a.cid') = $cid");
137
+ params.cid = filter.cid;
138
+ }
139
+ const statement = [
140
+ "SELECT event_json, attachments FROM event",
141
+ `WHERE ${conditions.join(" AND ")}`,
142
+ "ORDER BY sn ASC",
143
+ ].join("\n");
144
+ for (const result of this.#db.iterate(statement, params)) {
145
+ yield parseRow(result);
146
+ }
147
+ }
148
+ *getKeyEvents(prefix) {
149
+ const statement = [
150
+ "SELECT event_json, attachments",
151
+ "FROM event",
152
+ "WHERE json_extract(event_json, '$.i') = $prefix",
153
+ "AND type in ('icp', 'rot', 'ixn')",
154
+ "ORDER BY sn ASC",
155
+ ].join("\n");
156
+ for (const result of this.#db.iterate(statement, { prefix })) {
157
+ yield parseRow(result);
158
+ }
159
+ }
160
+ *getCredentialEvents(id) {
161
+ const statement = [
162
+ "SELECT event_json, attachments",
163
+ "FROM event",
164
+ "WHERE type IN ('iss', 'rev') AND json_extract(event_json, '$.i') = $id",
165
+ "ORDER BY rowid ASC",
166
+ ].join("\n");
167
+ for (const row of this.#db.iterate(statement, { id })) {
168
+ yield parseRow(row);
169
+ }
170
+ }
171
+ getRegistry(id) {
172
+ const statement = [
173
+ "SELECT event_json, attachments",
174
+ "FROM event",
175
+ "WHERE type = 'vcp' AND json_extract(event_json, '$.i') = $id",
176
+ "LIMIT 1",
177
+ ].join("\n");
178
+ const result = this.#queryOne(statement, { id });
179
+ return result ? parseRow(result) : null;
180
+ }
181
+ *getRegistriesByOwner(owner) {
182
+ const statement = [
183
+ "SELECT event_json, attachments",
184
+ "FROM event",
185
+ "WHERE type = 'vcp' AND json_extract(event_json, '$.ii') = $owner",
186
+ "ORDER BY rowid ASC",
187
+ ].join("\n");
188
+ for (const row of this.#db.iterate(statement, { owner })) {
189
+ yield parseRow(row);
190
+ }
191
+ }
192
+ getCredential(id) {
193
+ const statement = ["SELECT event_json, attachments", "FROM event", "WHERE event_id = $id", "LIMIT 1"].join("\n");
194
+ const result = this.#queryOne(statement, { id });
195
+ return result ? parseRow(result).body : null;
196
+ }
197
+ getCredentialsByRegistry(registryId) {
198
+ const statement = [
199
+ "SELECT event_json, attachments",
200
+ "FROM event",
201
+ "WHERE json_extract(event_json, '$.ri') = $registry_id",
202
+ ].join("\n");
203
+ return Array.from(this.#db.iterate(statement, { registry_id: registryId })).map((row) => parseRow(row).body);
204
+ }
205
+ getMailboxOffset(prefix, topic) {
206
+ const result = this.#queryOne("SELECT offset FROM mailbox_cursor WHERE prefix = $prefix AND topic = $topic LIMIT 1", { prefix, topic });
207
+ return typeof result?.offset === "number" ? result.offset : 0;
208
+ }
209
+ saveMailboxOffset(prefix, topic, offset) {
210
+ this.#db.execute("INSERT INTO mailbox_cursor(prefix, topic, offset) VALUES ($prefix, $topic, $offset) " +
211
+ "ON CONFLICT(prefix, topic) DO UPDATE SET offset = $offset", { prefix, topic, offset });
212
+ }
213
+ }
214
+ //# sourceMappingURL=storage-sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-sqlite.js","sourceRoot":"","sources":["../../../src/storage/sqlite/storage-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAItD,OAAO,EACL,WAAW,EAKX,OAAO,GAIR,MAAM,oBAAoB,CAAC;AAM5B,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,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACvB,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,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;aACxC,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,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;aACxC,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,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;aACxC,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,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;aACxC,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,OAAO,uBAAuB;IAClC,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,mCAAmC;YACnC,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;CACF"}
@@ -0,0 +1,2 @@
1
+ export { Witness, WitnessError, type WitnessEvent, type WitnessOptions } from "./witness.ts";
2
+ export { createRouter } 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":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAA0C,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type Witness } from "./witness.ts";
2
+ export declare function createRouter(witness: Witness): (request: Request) => Promise<Response>;
@@ -0,0 +1,103 @@
1
+ import { Attachments, parse } from "../cesr/__main__.js";
2
+ import { WitnessError } from "./witness.js";
3
+ function createResponse(events) {
4
+ const body = events
5
+ .flatMap(({ message, timestamp }) => {
6
+ const atc = new Attachments({
7
+ ControllerIdxSigs: message.attachments.ControllerIdxSigs,
8
+ WitnessIdxSigs: message.attachments.WitnessIdxSigs,
9
+ NonTransReceiptCouples: message.attachments.NonTransReceiptCouples,
10
+ FirstSeenReplayCouples: [{ fnu: String(message.body.s ?? "0"), dt: timestamp }],
11
+ });
12
+ return [new TextDecoder().decode(message.raw), atc.text()];
13
+ })
14
+ .join("");
15
+ return new Response(body, {
16
+ status: 200,
17
+ headers: { "Content-Type": "application/json+cesr" },
18
+ });
19
+ }
20
+ export function createRouter(witness) {
21
+ async function handleReceiptRequest(request) {
22
+ const atc = request.headers.get("CESR-ATTACHMENT");
23
+ if (!atc) {
24
+ return Response.json({ error: "Bad Request" }, { status: 400 });
25
+ }
26
+ const bodyText = await request.text();
27
+ const receipts = [];
28
+ for await (const witnessEvent of parse(bodyText + atc)) {
29
+ try {
30
+ const receipt = witness.receipt(witnessEvent);
31
+ receipts.push({ message: receipt, timestamp: new Date() });
32
+ }
33
+ catch (err) {
34
+ if (err instanceof WitnessError) {
35
+ return Response.json({ error: "Bad Request" }, { status: 400 });
36
+ }
37
+ throw err;
38
+ }
39
+ }
40
+ return createResponse(receipts);
41
+ }
42
+ async function handleOobiRequest(request) {
43
+ const url = new URL(request.url);
44
+ const aid = url.pathname.split("/")[2];
45
+ let response;
46
+ if (aid === undefined || aid === witness.aid) {
47
+ response = createResponse(witness.events);
48
+ }
49
+ else {
50
+ const events = Array.from(witness.getKeyEvents(aid)).map((event) => ({
51
+ message: event,
52
+ timestamp: event.attachments.FirstSeenReplayCouples[0]?.dt ?? new Date(0),
53
+ }));
54
+ response = events.length === 0 ? new Response("Not Found", { status: 404 }) : createResponse(events);
55
+ }
56
+ response.headers.set("Keri-Aid", witness.aid);
57
+ return response;
58
+ }
59
+ async function handleMessageRequest(request) {
60
+ const atc = request.headers.get("CESR-ATTACHMENT");
61
+ if (!atc) {
62
+ return Response.json({ error: "Bad Request" }, { status: 400 });
63
+ }
64
+ const bodyText = await request.text();
65
+ for await (const event of parse(bodyText + atc)) {
66
+ witness.handleMessage(event);
67
+ }
68
+ return new Response(null, { status: 200 });
69
+ }
70
+ return async function handler(request) {
71
+ const { method } = request;
72
+ const pathname = new URL(request.url).pathname;
73
+ if (pathname === "/") {
74
+ switch (method) {
75
+ case "GET":
76
+ return Response.json({ status: "OK" });
77
+ case "POST": {
78
+ return handleMessageRequest(request);
79
+ }
80
+ default:
81
+ return new Response("Method Not Allowed", { status: 405 });
82
+ }
83
+ }
84
+ if (pathname.startsWith("/oobi")) {
85
+ switch (method) {
86
+ case "GET":
87
+ return handleOobiRequest(request);
88
+ default:
89
+ return new Response("Method Not Allowed", { status: 405 });
90
+ }
91
+ }
92
+ if (pathname === "/receipts") {
93
+ switch (method) {
94
+ case "POST":
95
+ return handleReceiptRequest(request);
96
+ default:
97
+ return new Response("Method Not Allowed", { status: 405 });
98
+ }
99
+ }
100
+ return new Response("Not Found", { status: 404 });
101
+ };
102
+ }
103
+ //# sourceMappingURL=witness-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness-router.js","sourceRoot":"","sources":["../../src/witness/witness-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAgB,YAAY,EAAqB,MAAM,cAAc,CAAC;AAE7E,SAAS,cAAc,CAAC,MAA+B;IACrD,MAAM,IAAI,GAAG,MAAM;SAChB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC;YAC1B,iBAAiB,EAAE,OAAO,CAAC,WAAW,CAAC,iBAAiB;YACxD,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,cAAc;YAClD,sBAAsB,EAAE,OAAO,CAAC,WAAW,CAAC,sBAAsB;YAClE,sBAAsB,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAE,OAAO,CAAC,IAAqB,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;SAClG,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,uBAAuB,EAAE;KACrD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,KAAK,UAAU,oBAAoB,CAAC,OAAgB;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAmB,EAAE,CAAC;QAEpC,IAAI,KAAK,EAAE,MAAM,YAAY,IAAI,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAwB,CAAC,CAAC;gBAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;oBAChC,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClE,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,UAAU,iBAAiB,CAAC,OAAgB;QAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,QAAkB,CAAC;QACvB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;YAC7C,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACnE,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;aAC1E,CAAC,CAAC,CAAC;YACJ,QAAQ,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvG,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,UAAU,oBAAoB,CAAC,OAAgB;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,KAAK,UAAU,OAAO,CAAC,OAAgB;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QAE/C,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACrB,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,KAAK;oBACR,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzC,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;gBACD;oBACE,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,KAAK;oBACR,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACpC;oBACE,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7B,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,MAAM;oBACT,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACvC;oBACE,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { Message } from "../cesr/__main__.ts";
2
+ import { type KeyEvent, type KeyEventBody, KeyEventLog, type ReceiptEventBody } from "../core/main.ts";
3
+ import type { KeyEventStorage } from "../storage/key-event-storage.ts";
4
+ export interface WitnessOptions {
5
+ privateKey?: Uint8Array;
6
+ url?: string;
7
+ storage: KeyEventStorage;
8
+ }
9
+ export interface WitnessEvent {
10
+ readonly message: Message;
11
+ readonly timestamp: Date;
12
+ }
13
+ export declare class WitnessError extends Error {
14
+ }
15
+ export declare class Witness {
16
+ #private;
17
+ readonly events: readonly WitnessEvent[];
18
+ get aid(): string;
19
+ static createKEL(privateKey: Uint8Array): KeyEventLog;
20
+ constructor(options: WitnessOptions);
21
+ receipt(message: Message<KeyEventBody>): Message<ReceiptEventBody>;
22
+ handleMessage(message: Message): void;
23
+ getKeyEvents(aid: string): Generator<KeyEvent>;
24
+ }