keri 0.0.0-dev.0ddd65e → 0.0.0-dev.1dab5a8

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 (234) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/dist/cesr/__main__.d.ts +9 -0
  4. package/dist/cesr/__main__.js +10 -0
  5. package/dist/cesr/__main__.js.map +1 -0
  6. package/dist/cesr/array-utils.d.ts +3 -0
  7. package/dist/cesr/array-utils.js +29 -0
  8. package/dist/cesr/array-utils.js.map +1 -0
  9. package/dist/cesr/attachments-reader.d.ts +10 -0
  10. package/dist/cesr/attachments-reader.js +281 -0
  11. package/dist/cesr/attachments-reader.js.map +1 -0
  12. package/dist/cesr/attachments.d.ts +66 -0
  13. package/dist/cesr/attachments.js +108 -0
  14. package/dist/cesr/attachments.js.map +1 -0
  15. package/dist/cesr/codes.d.ts +1208 -0
  16. package/dist/cesr/codes.js +309 -0
  17. package/dist/cesr/codes.js.map +1 -0
  18. package/dist/cesr/counter.d.ts +114 -0
  19. package/dist/cesr/counter.js +78 -0
  20. package/dist/cesr/counter.js.map +1 -0
  21. package/dist/cesr/frame.d.ts +31 -0
  22. package/dist/cesr/frame.js +99 -0
  23. package/dist/cesr/frame.js.map +1 -0
  24. package/dist/cesr/genus.d.ts +18 -0
  25. package/dist/cesr/genus.js +57 -0
  26. package/dist/cesr/genus.js.map +1 -0
  27. package/dist/cesr/groups/generic-map.d.ts +11 -0
  28. package/dist/cesr/groups/generic-map.js +51 -0
  29. package/dist/cesr/groups/generic-map.js.map +1 -0
  30. package/dist/cesr/indexer.d.ts +68 -0
  31. package/dist/cesr/indexer.js +171 -0
  32. package/dist/cesr/indexer.js.map +1 -0
  33. package/dist/cesr/matter.d.ts +160 -0
  34. package/dist/cesr/matter.js +301 -0
  35. package/dist/cesr/matter.js.map +1 -0
  36. package/dist/cesr/message.d.ts +17 -0
  37. package/dist/cesr/message.js +81 -0
  38. package/dist/cesr/message.js.map +1 -0
  39. package/dist/cesr/parse.d.ts +37 -0
  40. package/dist/cesr/parse.js +138 -0
  41. package/dist/cesr/parse.js.map +1 -0
  42. package/dist/cesr/shifting.d.ts +7 -0
  43. package/dist/cesr/shifting.js +10 -0
  44. package/dist/cesr/shifting.js.map +1 -0
  45. package/dist/cesr/version-string.d.ts +35 -0
  46. package/dist/cesr/version-string.js +146 -0
  47. package/dist/cesr/version-string.js.map +1 -0
  48. package/dist/cli/cli.d.ts +5 -0
  49. package/dist/cli/cli.js +73 -0
  50. package/dist/cli/cli.js.map +1 -0
  51. package/dist/cli/input.d.ts +1 -0
  52. package/dist/cli/input.js +22 -0
  53. package/dist/cli/input.js.map +1 -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 +97 -0
  57. package/dist/controller/controller.js +601 -0
  58. package/dist/controller/controller.js.map +1 -0
  59. package/dist/controller/encrypt.d.ts +45 -0
  60. package/dist/controller/encrypt.js +120 -0
  61. package/dist/controller/encrypt.js.map +1 -0
  62. package/dist/core/credential-event.d.ts +54 -0
  63. package/dist/core/credential-event.js +28 -0
  64. package/dist/core/credential-event.js.map +1 -0
  65. package/dist/core/credential.d.ts +79 -0
  66. package/dist/core/credential.js +25 -0
  67. package/dist/core/credential.js.map +1 -0
  68. package/dist/core/digest.d.ts +1 -0
  69. package/dist/core/digest.js +7 -0
  70. package/dist/core/digest.js.map +1 -0
  71. package/dist/core/endpoint-discovery.d.ts +20 -0
  72. package/dist/core/endpoint-discovery.js +60 -0
  73. package/dist/core/endpoint-discovery.js.map +1 -0
  74. package/dist/core/events.d.ts +12 -0
  75. package/dist/core/events.js +25 -0
  76. package/dist/core/events.js.map +1 -0
  77. package/dist/core/kawa.d.ts +17 -0
  78. package/dist/core/kawa.js +48 -0
  79. package/dist/core/kawa.js.map +1 -0
  80. package/dist/core/key-event-log.d.ts +19 -0
  81. package/dist/core/key-event-log.js +155 -0
  82. package/dist/core/key-event-log.js.map +1 -0
  83. package/dist/core/key-event.d.ts +94 -0
  84. package/dist/core/key-event.js +88 -0
  85. package/dist/core/key-event.js.map +1 -0
  86. package/dist/core/keys.d.ts +10 -0
  87. package/dist/core/keys.js +17 -0
  88. package/dist/core/keys.js.map +1 -0
  89. package/dist/core/mailbox-client.d.ts +23 -0
  90. package/dist/core/mailbox-client.js +75 -0
  91. package/dist/core/mailbox-client.js.map +1 -0
  92. package/dist/core/main.d.ts +53 -0
  93. package/dist/core/main.js +45 -0
  94. package/dist/core/main.js.map +1 -0
  95. package/dist/core/receipt-event.d.ts +15 -0
  96. package/dist/core/receipt-event.js +13 -0
  97. package/dist/core/receipt-event.js.map +1 -0
  98. package/dist/core/registry-event.d.ts +26 -0
  99. package/dist/core/registry-event.js +18 -0
  100. package/dist/core/registry-event.js.map +1 -0
  101. package/dist/core/routed-event.d.ts +67 -0
  102. package/dist/core/routed-event.js +53 -0
  103. package/dist/core/routed-event.js.map +1 -0
  104. package/dist/core/said.d.ts +4 -0
  105. package/dist/core/said.js +29 -0
  106. package/dist/core/said.js.map +1 -0
  107. package/dist/core/sign.d.ts +5 -0
  108. package/dist/core/sign.js +10 -0
  109. package/dist/core/sign.js.map +1 -0
  110. package/dist/core/threshold.d.ts +6 -0
  111. package/dist/core/threshold.js +58 -0
  112. package/dist/core/threshold.js.map +1 -0
  113. package/dist/core/verify.d.ts +23 -0
  114. package/dist/core/verify.js +62 -0
  115. package/dist/core/verify.js.map +1 -0
  116. package/dist/core/witness-client.d.ts +8 -0
  117. package/dist/core/witness-client.js +39 -0
  118. package/dist/core/witness-client.js.map +1 -0
  119. package/dist/encoding/base64.d.ts +4 -0
  120. package/dist/encoding/base64.js +82 -0
  121. package/dist/encoding/base64.js.map +1 -0
  122. package/dist/encoding/main.d.ts +2 -0
  123. package/dist/encoding/main.js +3 -0
  124. package/dist/encoding/main.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/logging/main.d.ts +15 -0
  129. package/dist/logging/main.js +25 -0
  130. package/dist/logging/main.js.map +1 -0
  131. package/dist/mailbox/mailbox-router.d.ts +6 -0
  132. package/dist/mailbox/mailbox-router.js +88 -0
  133. package/dist/mailbox/mailbox-router.js.map +1 -0
  134. package/dist/mailbox/mailbox.d.ts +27 -0
  135. package/dist/mailbox/mailbox.js +101 -0
  136. package/dist/mailbox/mailbox.js.map +1 -0
  137. package/dist/mailbox/main.d.ts +3 -0
  138. package/dist/mailbox/main.js +3 -0
  139. package/dist/mailbox/main.js.map +1 -0
  140. package/dist/main.d.ts +3 -2
  141. package/dist/main.js +3 -2
  142. package/dist/main.js.map +1 -0
  143. package/dist/nodejs-utils/main.d.ts +2 -0
  144. package/dist/nodejs-utils/main.js +2 -0
  145. package/dist/nodejs-utils/main.js.map +1 -0
  146. package/dist/nodejs-utils/serve.d.ts +6 -0
  147. package/dist/nodejs-utils/serve.js +68 -0
  148. package/dist/nodejs-utils/serve.js.map +1 -0
  149. package/dist/storage/credential-storage.d.ts +8 -0
  150. package/dist/storage/credential-storage.js +2 -0
  151. package/dist/storage/credential-storage.js.map +1 -0
  152. package/dist/storage/key-event-storage.d.ts +10 -0
  153. package/dist/storage/key-event-storage.js +2 -0
  154. package/dist/storage/key-event-storage.js.map +1 -0
  155. package/dist/storage/mailbox-server-storage.d.ts +9 -0
  156. package/dist/storage/mailbox-server-storage.js +2 -0
  157. package/dist/storage/mailbox-server-storage.js.map +1 -0
  158. package/dist/storage/mailbox-storage.d.ts +4 -0
  159. package/dist/storage/mailbox-storage.js +2 -0
  160. package/dist/storage/mailbox-storage.js.map +1 -0
  161. package/dist/storage/main.d.ts +5 -0
  162. package/dist/storage/main.js +2 -0
  163. package/dist/storage/main.js.map +1 -0
  164. package/dist/storage/private-key-storage.d.ts +5 -0
  165. package/dist/storage/private-key-storage.js +2 -0
  166. package/dist/storage/private-key-storage.js.map +1 -0
  167. package/dist/storage/sqlite/node-sqlite.d.ts +12 -0
  168. package/dist/storage/sqlite/node-sqlite.js +25 -0
  169. package/dist/storage/sqlite/node-sqlite.js.map +1 -0
  170. package/dist/storage/sqlite/schema.d.ts +2 -0
  171. package/dist/storage/sqlite/schema.js +67 -0
  172. package/dist/storage/sqlite/schema.js.map +1 -0
  173. package/dist/storage/sqlite/sqlite-database.d.ts +13 -0
  174. package/dist/storage/sqlite/sqlite-database.js +2 -0
  175. package/dist/storage/sqlite/sqlite-database.js.map +1 -0
  176. package/dist/storage/sqlite/storage-sqlite.d.ts +32 -0
  177. package/dist/storage/sqlite/storage-sqlite.js +237 -0
  178. package/dist/storage/sqlite/storage-sqlite.js.map +1 -0
  179. package/dist/witness/main.d.ts +3 -0
  180. package/dist/witness/main.js +3 -0
  181. package/dist/witness/main.js.map +1 -0
  182. package/dist/witness/witness-router.d.ts +6 -0
  183. package/dist/witness/witness-router.js +120 -0
  184. package/dist/witness/witness-router.js.map +1 -0
  185. package/dist/witness/witness.d.ts +26 -0
  186. package/dist/witness/witness.js +156 -0
  187. package/dist/witness/witness.js.map +1 -0
  188. package/package.json +84 -26
  189. package/dist/cli/main.js +0 -72
  190. package/dist/data-type.d.ts +0 -9
  191. package/dist/data-type.js +0 -1
  192. package/dist/db/event-store.d.ts +0 -20
  193. package/dist/db/event-store.js +0 -1
  194. package/dist/db/sqlite-db.d.ts +0 -13
  195. package/dist/db/sqlite-db.js +0 -123
  196. package/dist/events/common.d.ts +0 -6
  197. package/dist/events/common.js +0 -1
  198. package/dist/events/incept.d.ts +0 -26
  199. package/dist/events/incept.js +0 -28
  200. package/dist/events/interact.d.ts +0 -17
  201. package/dist/events/interact.js +0 -21
  202. package/dist/events/main.d.ts +0 -4
  203. package/dist/events/main.js +0 -4
  204. package/dist/events/reply.d.ts +0 -15
  205. package/dist/events/reply.js +0 -20
  206. package/dist/keri/habitat.d.ts +0 -20
  207. package/dist/keri/habitat.js +0 -130
  208. package/dist/keri/keri.d.ts +0 -26
  209. package/dist/keri/keri.js +0 -43
  210. package/dist/keystore/encrypt.d.ts +0 -2
  211. package/dist/keystore/encrypt.js +0 -38
  212. package/dist/keystore/keystore-fs.d.ts +0 -13
  213. package/dist/keystore/keystore-fs.js +0 -50
  214. package/dist/keystore/keystore-web.d.ts +0 -12
  215. package/dist/keystore/keystore-web.js +0 -48
  216. package/dist/keystore/keystore.d.ts +0 -15
  217. package/dist/keystore/keystore.js +0 -1
  218. package/dist/main-common.d.ts +0 -9
  219. package/dist/main-common.js +0 -8
  220. package/dist/main-web.d.ts +0 -2
  221. package/dist/main-web.js +0 -2
  222. package/dist/parser/base64.d.ts +0 -6
  223. package/dist/parser/base64.js +0 -74
  224. package/dist/parser/buffered-reader.d.ts +0 -5
  225. package/dist/parser/buffered-reader.js +0 -47
  226. package/dist/parser/cesr-encoding.d.ts +0 -34
  227. package/dist/parser/cesr-encoding.js +0 -158
  228. package/dist/parser/codes.d.ts +0 -143
  229. package/dist/parser/codes.js +0 -266
  230. package/dist/parser/parser.d.ts +0 -16
  231. package/dist/parser/parser.js +0 -161
  232. package/dist/parser/version.d.ts +0 -11
  233. package/dist/parser/version.js +0 -56
  234. /package/dist/cli/{main.d.ts → node-cli.d.ts} +0 -0
@@ -0,0 +1,18 @@
1
+ import { Message } from "#keri/cesr";
2
+ import { DUMMY_VERSION, encodeEvent, randomNonce } from "./events.js";
3
+ export function incept(args) {
4
+ const body = encodeEvent({
5
+ v: DUMMY_VERSION,
6
+ t: "vcp",
7
+ d: "",
8
+ i: "",
9
+ ii: args.ii,
10
+ s: "0",
11
+ c: ["NB"],
12
+ bt: "0",
13
+ b: [],
14
+ n: args.n ?? randomNonce(),
15
+ }, { labels: ["d", "i"], legacy: true });
16
+ return new Message(body);
17
+ }
18
+ //# sourceMappingURL=registry-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-event.js","sourceRoot":"","sources":["../../src/core/registry-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA8BtE,MAAM,UAAU,MAAM,CAAC,IAA6B;IAClD,MAAM,IAAI,GAAG,WAAW,CACtB;QACE,CAAC,EAAE,aAAa;QAChB,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,EAAE;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,CAAC,IAAI,CAAC;QACT,EAAE,EAAE,GAAG;QACP,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,WAAW,EAAE;KAC3B,EACD,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CACrC,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { Message } from "#keri/cesr";
2
+ export interface QueryEventInit {
3
+ dt?: Date;
4
+ r?: string;
5
+ rr?: string;
6
+ q: Record<string, unknown>;
7
+ }
8
+ export type QueryEventBody = {
9
+ v: string;
10
+ t: "qry";
11
+ d: string;
12
+ dt: string;
13
+ r: string;
14
+ rr: string;
15
+ q: Record<string, unknown>;
16
+ };
17
+ export interface ReplyEventInit {
18
+ dt?: string;
19
+ r: string;
20
+ a: Record<string, unknown>;
21
+ }
22
+ export type ReplyEventBody = {
23
+ v: string;
24
+ t: "rpy";
25
+ d: string;
26
+ dt: string;
27
+ r: string;
28
+ a: Record<string, unknown>;
29
+ };
30
+ export type RoutedEventBody = {
31
+ v: string;
32
+ t: string;
33
+ d: string;
34
+ r: string;
35
+ [key: string]: unknown;
36
+ };
37
+ export type RoutedEvent = Message<RoutedEventBody>;
38
+ export declare function query(args: QueryEventInit): Message<QueryEventBody>;
39
+ export declare function reply(args: ReplyEventInit): Message<ReplyEventBody>;
40
+ export interface ExchangeEventInit {
41
+ sender: string;
42
+ recipient?: string;
43
+ p?: string;
44
+ timestamp?: string;
45
+ route: string;
46
+ query?: Record<string, unknown>;
47
+ anchor?: Record<string, unknown>;
48
+ embeds?: Record<string, Message>;
49
+ }
50
+ export interface ExchangeEmbedding {
51
+ d: string;
52
+ [key: string]: string | Record<string, unknown>;
53
+ }
54
+ export interface ExchangeEventBody extends Record<string, unknown> {
55
+ v: string;
56
+ t: "exn";
57
+ d: string;
58
+ i: string;
59
+ rp: string;
60
+ p: string;
61
+ dt: string;
62
+ r: string;
63
+ q: Record<string, unknown>;
64
+ a: Record<string, unknown>;
65
+ e: Record<string, string | Record<string, unknown>>;
66
+ }
67
+ export declare function exchange(args: ExchangeEventInit): Message<ExchangeEventBody>;
@@ -0,0 +1,53 @@
1
+ import { Attachments, Message } from "#keri/cesr";
2
+ import { DUMMY_VERSION, encodeEvent, formatDate } from "./events.js";
3
+ import { saidify } from "./said.js";
4
+ export function query(args) {
5
+ const body = encodeEvent({
6
+ v: DUMMY_VERSION,
7
+ t: "qry",
8
+ d: "",
9
+ dt: formatDate(args.dt ?? new Date()),
10
+ r: args.r ?? "",
11
+ rr: args.rr ?? "",
12
+ q: args.q,
13
+ });
14
+ return new Message(body);
15
+ }
16
+ export function reply(args) {
17
+ const body = encodeEvent({
18
+ v: DUMMY_VERSION,
19
+ t: "rpy",
20
+ d: "",
21
+ dt: args.dt ?? formatDate(new Date()),
22
+ r: args.r,
23
+ a: args.a,
24
+ });
25
+ return new Message(body);
26
+ }
27
+ export function exchange(args) {
28
+ const embeds = { d: "" };
29
+ const attachments = new Attachments();
30
+ for (const [key, message] of Object.entries(args.embeds ?? {})) {
31
+ embeds[key] = message.body;
32
+ attachments.PathedMaterialCouples.push({
33
+ path: `-${["e", key].join("-")}`,
34
+ attachments: message.attachments,
35
+ grouped: true,
36
+ });
37
+ }
38
+ const body = encodeEvent({
39
+ v: DUMMY_VERSION,
40
+ t: "exn",
41
+ d: "",
42
+ i: args.sender,
43
+ rp: args.recipient ?? "",
44
+ p: args.p ?? "",
45
+ dt: args.timestamp ?? formatDate(new Date()),
46
+ r: args.route,
47
+ q: args.query ?? {},
48
+ a: args.anchor ?? {},
49
+ e: args.embeds ? saidify(embeds, ["d"]) : {},
50
+ });
51
+ return new Message(body, attachments);
52
+ }
53
+ //# sourceMappingURL=routed-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routed-event.js","sourceRoot":"","sources":["../../src/core/routed-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4CpC,MAAM,UAAU,KAAK,CAAC,IAAoB;IACxC,MAAM,IAAI,GAAG,WAAW,CAAiB;QACvC,CAAC,EAAE,aAAa;QAChB,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,EAAE;QACL,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;QACrC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;QACf,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;QACjB,CAAC,EAAE,IAAI,CAAC,CAAC;KACV,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,IAAoB;IACxC,MAAM,IAAI,GAAG,WAAW,CAAiB;QACvC,CAAC,EAAE,aAAa;QAChB,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,EAAE;QACL,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QACrC,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,CAAC,EAAE,IAAI,CAAC,CAAC;KACV,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAgCD,MAAM,UAAU,QAAQ,CAAC,IAAuB;IAC9C,MAAM,MAAM,GAAsB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QAC3B,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC;YACrC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAoB;QAC1C,CAAC,EAAE,aAAa;QAChB,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,IAAI,CAAC,MAAM;QACd,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;QACxB,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;QACf,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5C,CAAC,EAAE,IAAI,CAAC,KAAK;QACb,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACnB,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACpB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;KAC7C,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface SaidArgs {
2
+ labels?: string[];
3
+ }
4
+ export declare function saidify<T extends Record<string, unknown>>(event: T, labels?: string[]): T;
@@ -0,0 +1,29 @@
1
+ import { blake3 } from "@noble/hashes/blake3.js";
2
+ import { encodeText, Matter } from "#keri/cesr";
3
+ function calculateSaid(event) {
4
+ const digest = encodeText(new Matter({
5
+ code: Matter.Code.Blake3_256,
6
+ raw: blake3
7
+ .create({ dkLen: 32 })
8
+ .update(new TextEncoder().encode(JSON.stringify(event)))
9
+ .digest(),
10
+ }));
11
+ return digest;
12
+ }
13
+ export function saidify(event, labels) {
14
+ if (!labels?.length) {
15
+ return event;
16
+ }
17
+ const digest = calculateSaid(event);
18
+ const result = {};
19
+ for (const [key, value] of Object.entries(event)) {
20
+ if (labels.includes(key)) {
21
+ result[key] = digest;
22
+ }
23
+ else {
24
+ result[key] = value;
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ //# sourceMappingURL=said.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"said.js","sourceRoot":"","sources":["../../src/core/said.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhD,SAAS,aAAa,CAAC,KAA8B;IACnD,MAAM,MAAM,GAAG,UAAU,CACvB,IAAI,MAAM,CAAC;QACT,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;QAC5B,GAAG,EAAE,MAAM;aACR,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;aACrB,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;aACvD,MAAM,EAAE;KACZ,CAAC,CACH,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD,MAAM,UAAU,OAAO,CAAoC,KAAQ,EAAE,MAAiB;IACpF,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface SignOptions {
2
+ key: Uint8Array;
3
+ index?: number;
4
+ }
5
+ export declare function sign(payload: Uint8Array, options: SignOptions): string;
@@ -0,0 +1,10 @@
1
+ import { ed25519 } from "@noble/curves/ed25519.js";
2
+ import { encodeText, Indexer, Matter } from "#keri/cesr";
3
+ export function sign(payload, options) {
4
+ const signature = ed25519.sign(payload, options.key);
5
+ if (options.index !== undefined && options.index !== null) {
6
+ return encodeText(Indexer.crypto.ed25519_sig(signature, options.index));
7
+ }
8
+ return encodeText(Matter.crypto.ed25519_sig(signature));
9
+ }
10
+ //# sourceMappingURL=sign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/core/sign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOzD,MAAM,UAAU,IAAI,CAAC,OAAmB,EAAE,OAAoB;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAErD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type Threshold = string | string[];
2
+ export interface WeightedThreshold {
3
+ weights: number[];
4
+ required: number;
5
+ }
6
+ export declare function parseThreshold(threshold: Threshold, numKeys: number): WeightedThreshold;
@@ -0,0 +1,58 @@
1
+ function greatestCommonDivisor(a, b) {
2
+ let x = Math.abs(a);
3
+ let y = Math.abs(b);
4
+ while (y !== 0) {
5
+ const remainder = x % y;
6
+ x = y;
7
+ y = remainder;
8
+ }
9
+ return x;
10
+ }
11
+ function findLeastCommonDenominator(denominators) {
12
+ if (denominators.length === 0) {
13
+ throw new Error("At least one denominator is required");
14
+ }
15
+ return denominators.reduce((lcm, value) => {
16
+ if (!Number.isInteger(value) || value <= 0) {
17
+ throw new Error(`Invalid denominator: ${value}`);
18
+ }
19
+ return (lcm * value) / greatestCommonDivisor(lcm, value);
20
+ }, 1);
21
+ }
22
+ function parsePositiveInteger(value, errorMessage) {
23
+ if (!/^\d+$/.test(value)) {
24
+ throw new Error(errorMessage);
25
+ }
26
+ const parsed = Number.parseInt(value, 10);
27
+ if (parsed <= 0) {
28
+ throw new Error(errorMessage);
29
+ }
30
+ return parsed;
31
+ }
32
+ function parseFraction(fraction) {
33
+ const parts = fraction.split("/", 2);
34
+ if (parts.length !== 2) {
35
+ throw new Error(`Invalid threshold: ${fraction}`);
36
+ }
37
+ const numerator = parsePositiveInteger(parts[0], `Invalid threshold: ${fraction}`);
38
+ const denominator = parsePositiveInteger(parts[1], `Invalid threshold: ${fraction}`);
39
+ return [numerator, denominator];
40
+ }
41
+ export function parseThreshold(threshold, numKeys) {
42
+ if (typeof threshold === "string") {
43
+ const required = parsePositiveInteger(threshold, `Invalid threshold: ${threshold}`);
44
+ if (required > numKeys) {
45
+ throw new Error(`Invalid threshold: ${threshold} exceeds number of parties: ${numKeys}`);
46
+ }
47
+ return {
48
+ required,
49
+ weights: Array.from({ length: numKeys }, () => 1),
50
+ };
51
+ }
52
+ const values = threshold.map((t) => parseFraction(t));
53
+ const denominators = values.map(([, denom]) => denom);
54
+ const required = findLeastCommonDenominator(denominators);
55
+ const weights = values.map(([num, denom]) => (num * required) / denom);
56
+ return { weights, required };
57
+ }
58
+ //# sourceMappingURL=threshold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threshold.js","sourceRoot":"","sources":["../../src/core/threshold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Matter } from "#keri/cesr";
2
+ import { type Threshold } from "./threshold.ts";
3
+ export interface VerifyOptions {
4
+ threshold: Threshold;
5
+ keys: string[];
6
+ sigs: string[];
7
+ }
8
+ export type VerifyResult = {
9
+ ok: true;
10
+ error?: null;
11
+ } | {
12
+ ok: false;
13
+ error: string;
14
+ };
15
+ export declare function verifySignature(payload: Uint8Array, key: Matter, sig: Uint8Array): boolean;
16
+ export declare function verifyThreshold(payload: Uint8Array, options: VerifyOptions): VerifyResult;
17
+ export declare function verifyThresholdOrThrow(payload: Uint8Array, options: VerifyOptions): void;
18
+ /**
19
+ * Validates that every signature present is cryptographically valid for its key,
20
+ * but does NOT check that the threshold is met.
21
+ */
22
+ export declare function verifySignatures(payload: Uint8Array, options: VerifyOptions): VerifyResult;
23
+ export declare function verifySignaturesOrThrow(payload: Uint8Array, options: VerifyOptions): void;
@@ -0,0 +1,62 @@
1
+ import { ed25519 } from "@noble/curves/ed25519.js";
2
+ import { Indexer, Matter } from "#keri/cesr";
3
+ import { parseThreshold } from "./threshold.js";
4
+ export function verifySignature(payload, key, sig) {
5
+ switch (key.code) {
6
+ case Matter.Code.Ed25519:
7
+ case Matter.Code.Ed25519N:
8
+ return ed25519.verify(sig, payload, key.raw);
9
+ default:
10
+ throw new Error(`Unsupported key code: ${key.code}`);
11
+ }
12
+ }
13
+ export function verifyThreshold(payload, options) {
14
+ const keys = options.keys.map((key) => Matter.parse(key));
15
+ const sigs = options.sigs.map((sig) => Indexer.parse(sig));
16
+ const threshold = parseThreshold(options.threshold, options.keys.length);
17
+ let sum = 0;
18
+ for (let idx = 0; idx < keys.length; idx++) {
19
+ const sig = sigs.find((s) => s.index === idx);
20
+ if (!sig) {
21
+ continue;
22
+ }
23
+ if (!verifySignature(payload, keys[idx], sig.raw)) {
24
+ return { ok: false, error: `Invalid signature for key at index ${idx}` };
25
+ }
26
+ sum += threshold.weights[idx];
27
+ }
28
+ if (sum < threshold.required) {
29
+ return { ok: false, error: `Threshold not met: ${sum} weight provided, but ${threshold.required} required` };
30
+ }
31
+ return { ok: true };
32
+ }
33
+ export function verifyThresholdOrThrow(payload, options) {
34
+ const result = verifyThreshold(payload, options);
35
+ if (!result.ok) {
36
+ throw new Error(result.error);
37
+ }
38
+ }
39
+ /**
40
+ * Validates that every signature present is cryptographically valid for its key,
41
+ * but does NOT check that the threshold is met.
42
+ */
43
+ export function verifySignatures(payload, options) {
44
+ const keys = options.keys.map((key) => Matter.parse(key));
45
+ const sigs = options.sigs.map((sig) => Indexer.parse(sig));
46
+ for (let idx = 0; idx < keys.length; idx++) {
47
+ const sig = sigs.find((s) => s.index === idx);
48
+ if (!sig)
49
+ continue;
50
+ if (!verifySignature(payload, keys[idx], sig.raw)) {
51
+ return { ok: false, error: `Invalid signature for key at index ${idx}` };
52
+ }
53
+ }
54
+ return { ok: true };
55
+ }
56
+ export function verifySignaturesOrThrow(payload, options) {
57
+ const result = verifySignatures(payload, options);
58
+ if (!result.ok) {
59
+ throw new Error(result.error);
60
+ }
61
+ }
62
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/core/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type Message } from "#keri/cesr";
2
+ import type { KeyEventBody } from "./key-event.ts";
3
+ import type { ReceiptEvent } from "./receipt-event.ts";
4
+ export declare class WitnessClient {
5
+ #private;
6
+ constructor(url: string, fetch?: typeof globalThis.fetch);
7
+ receipt(event: Message<KeyEventBody>): Promise<ReceiptEvent>;
8
+ }
@@ -0,0 +1,39 @@
1
+ import { encodeText, Matter, parse } from "#keri/cesr";
2
+ import { verifySignature } from "./verify.js";
3
+ export class WitnessClient {
4
+ #url;
5
+ #fetch;
6
+ constructor(url, fetch) {
7
+ this.#url = url;
8
+ this.#fetch = fetch ?? globalThis.fetch;
9
+ }
10
+ async receipt(event) {
11
+ const url = new URL("/receipts", this.#url);
12
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
13
+ throw new Error(`Invalid protocol: ${url}`);
14
+ }
15
+ const fetchResponse = await this.#fetch(url, {
16
+ method: "POST",
17
+ body: JSON.stringify(event.body),
18
+ headers: {
19
+ "Content-Type": "application/cesr+json",
20
+ "CESR-ATTACHMENT": encodeText(event.attachments.frames()),
21
+ },
22
+ });
23
+ if (!fetchResponse.ok || !fetchResponse.body) {
24
+ throw new Error(`Failed to submit event to witness: ${fetchResponse.status} ${fetchResponse.statusText}`);
25
+ }
26
+ for await (const incoming of parse(fetchResponse.body)) {
27
+ if (incoming.body.t === "rct" && incoming.body.d === event.body.d) {
28
+ for (const couple of incoming.attachments.NonTransReceiptCouples) {
29
+ if (!verifySignature(event.raw, Matter.parse(couple.prefix), Matter.parse(couple.sig).raw)) {
30
+ throw new Error(`Invalid witness signature from ${couple.prefix}`);
31
+ }
32
+ }
33
+ return incoming;
34
+ }
35
+ }
36
+ throw new Error(`No receipt returned from ${this.#url}`);
37
+ }
38
+ }
39
+ //# sourceMappingURL=witness-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness-client.js","sourceRoot":"","sources":["../../src/core/witness-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAgB,KAAK,EAAE,MAAM,YAAY,CAAC;AAGrE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,OAAO,aAAa;IACxB,IAAI,CAAS;IACb,MAAM,CAA0B;IAEhC,YAAY,GAAW,EAAE,KAA+B;QACtD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA4B;QACxC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,OAAO,EAAE;gBACP,cAAc,EAAE,uBAAuB;gBACvC,iBAAiB,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;aAC1D;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,sCAAsC,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5G,CAAC;QAED,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAClE,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;oBACjE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC3F,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACrE,CAAC;gBACH,CAAC;gBAED,OAAO,QAAwB,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export declare function decodeBase64Int(str: string): number;
2
+ export declare function encodeBase64Int(value: number, length?: number): string;
3
+ export declare function encodeBase64Url(uint8: Uint8Array): string;
4
+ export declare function decodeBase64Url(input: string): Uint8Array;
@@ -0,0 +1,82 @@
1
+ const B64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split("");
2
+ function getBase64Index(char) {
3
+ if (char === "=") {
4
+ return 0;
5
+ }
6
+ const code = B64_ALPHABET.indexOf(char);
7
+ if (code === -1) {
8
+ throw new Error(`Invalid base64 character '${char}'`);
9
+ }
10
+ return code;
11
+ }
12
+ export function decodeBase64Int(str) {
13
+ let result = 0;
14
+ for (let i = str.length - 1; i >= 0; i--) {
15
+ const character = str.charAt(i);
16
+ const index = getBase64Index(character);
17
+ const factor = 64 ** (str.length - i - 1);
18
+ result += factor * index;
19
+ }
20
+ return result;
21
+ }
22
+ export function encodeBase64Int(value, length) {
23
+ if (length !== undefined && value >= 64 ** length) {
24
+ throw new Error(`value ${value} too big for base64 length ${length}`);
25
+ }
26
+ let remainder = value;
27
+ let result = "";
28
+ while (remainder !== 0) {
29
+ result = B64_ALPHABET[remainder % 64] + result;
30
+ remainder = Math.floor(remainder / 64);
31
+ }
32
+ return result.padStart(length ?? 1, "A");
33
+ }
34
+ export function encodeBase64Url(uint8) {
35
+ // CREDIT: https://github.com/denoland/std/blob/main/encoding/base64.ts
36
+ // CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
37
+ let result = "";
38
+ let i;
39
+ const l = uint8.length;
40
+ for (i = 2; i < l; i += 3) {
41
+ result += B64_ALPHABET[uint8[i - 2] >> 2];
42
+ result += B64_ALPHABET[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)];
43
+ result += B64_ALPHABET[((uint8[i - 1] & 0x0f) << 2) | (uint8[i] >> 6)];
44
+ result += B64_ALPHABET[uint8[i] & 0x3f];
45
+ }
46
+ if (i === l + 1) {
47
+ // 1 octet yet to write
48
+ result += B64_ALPHABET[uint8[i - 2] >> 2];
49
+ result += B64_ALPHABET[(uint8[i - 2] & 0x03) << 4];
50
+ }
51
+ if (i === l) {
52
+ // 2 octets yet to write
53
+ result += B64_ALPHABET[uint8[i - 2] >> 2];
54
+ result += B64_ALPHABET[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)];
55
+ result += B64_ALPHABET[(uint8[i - 1] & 0x0f) << 2];
56
+ }
57
+ return result;
58
+ }
59
+ export function decodeBase64Url(input) {
60
+ if (typeof input !== "string") {
61
+ throw new Error(`input must be a string`);
62
+ }
63
+ if (input.length === 0) {
64
+ return new Uint8Array(0);
65
+ }
66
+ const remainder = input.length % 4;
67
+ const padSize = remainder > 0 ? 4 - remainder : remainder;
68
+ const str = input.padEnd(padSize + input.length, "=");
69
+ const result = new Uint8Array(3 * (str.length / 4));
70
+ for (let i = 0, j = 0; i < str.length; i += 4, j += 3) {
71
+ const sixtet0 = getBase64Index(str.charAt(i)) << 18;
72
+ const sixtet1 = getBase64Index(str.charAt(i + 1)) << 12;
73
+ const sixtet2 = getBase64Index(str.charAt(i + 2)) << 6;
74
+ const sixtet3 = getBase64Index(str.charAt(i + 3));
75
+ const chunk = sixtet0 | sixtet1 | sixtet2 | sixtet3;
76
+ result[j] = chunk >> 16;
77
+ result[j + 1] = (chunk >> 8) & 0xff;
78
+ result[j + 2] = chunk & 0xff;
79
+ }
80
+ return result.slice(0, result.length - padSize);
81
+ }
82
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/encoding/base64.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { decodeBase64Int, decodeBase64Url, encodeBase64Int, encodeBase64Url } from "./base64.ts";
2
+ export { decodeUtf8, encodeUtf8 } from "./utf8.ts";
@@ -0,0 +1,3 @@
1
+ export { decodeBase64Int, decodeBase64Url, encodeBase64Int, encodeBase64Url } from "./base64.js";
2
+ export { decodeUtf8, encodeUtf8 } from "./utf8.js";
3
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/encoding/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function encodeUtf8(text: string): Uint8Array;
2
+ export declare function decodeUtf8(bytes: Uint8Array): string;
@@ -0,0 +1,9 @@
1
+ export function encodeUtf8(text) {
2
+ const encoder = new TextEncoder();
3
+ return encoder.encode(text);
4
+ }
5
+ export function decodeUtf8(bytes) {
6
+ const decoder = new TextDecoder();
7
+ return decoder.decode(bytes);
8
+ }
9
+ //# sourceMappingURL=utf8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utf8.js","sourceRoot":"","sources":["../../src/encoding/utf8.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface Logger {
2
+ error(msg: string, meta?: object): void;
3
+ warn(msg: string, meta?: object): void;
4
+ info(msg: string, meta?: object): void;
5
+ debug(msg: string, meta?: object): void;
6
+ }
7
+ export declare class KeriLogger implements Logger {
8
+ #private;
9
+ constructor(logger?: Logger, context?: object);
10
+ error(msg: string, meta?: object): void;
11
+ warn(msg: string, meta?: object): void;
12
+ info(msg: string, meta?: object): void;
13
+ debug(msg: string, meta?: object): void;
14
+ extend(context: object): KeriLogger;
15
+ }
@@ -0,0 +1,25 @@
1
+ const noop = { error() { }, warn() { }, info() { }, debug() { } };
2
+ export class KeriLogger {
3
+ #logger;
4
+ #context;
5
+ constructor(logger, context = {}) {
6
+ this.#logger = logger ?? noop;
7
+ this.#context = context;
8
+ }
9
+ error(msg, meta) {
10
+ this.#logger.error(msg, { ...this.#context, ...meta });
11
+ }
12
+ warn(msg, meta) {
13
+ this.#logger.warn(msg, { ...this.#context, ...meta });
14
+ }
15
+ info(msg, meta) {
16
+ this.#logger.info(msg, { ...this.#context, ...meta });
17
+ }
18
+ debug(msg, meta) {
19
+ this.#logger.debug(msg, { ...this.#context, ...meta });
20
+ }
21
+ extend(context) {
22
+ return new KeriLogger(this.#logger, { ...this.#context, ...context });
23
+ }
24
+ }
25
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/logging/main.ts"],"names":[],"mappings":"AAOA,MAAM,IAAI,GAAW,EAAE,KAAK,KAAI,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,KAAK,KAAI,CAAC,EAAE,CAAC;AAEtE,MAAM,OAAO,UAAU;IACZ,OAAO,CAAS;IAChB,QAAQ,CAAS;IAE1B,YAAY,MAAe,EAAE,UAAkB,EAAE;QAC/C,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,IAAa;QAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,IAAa;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,IAAa;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,IAAa;QAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { type Logger } from "#keri/logging";
2
+ import type { Mailbox } from "./mailbox.ts";
3
+ export interface RouterOptions {
4
+ logger?: Logger;
5
+ }
6
+ export declare function createRouter(mailbox: Mailbox, options?: RouterOptions): (request: Request) => Promise<Response>;