keri 0.0.0-dev.bf75350 → 0.0.0-dev.e00c3c1

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 (200) 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 +87 -0
  82. package/dist/core/kawa.js.map +1 -0
  83. package/dist/core/key-event-log.d.ts +13 -0
  84. package/dist/core/key-event-log.js +153 -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 +9 -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 +15 -0
  117. package/dist/core/verify.js +43 -0
  118. package/dist/core/verify.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/utf8.d.ts +2 -0
  123. package/dist/encoding/utf8.js +9 -0
  124. package/dist/encoding/utf8.js.map +1 -0
  125. package/dist/main.d.ts +3 -6
  126. package/dist/main.js +3 -6
  127. package/dist/main.js.map +1 -1
  128. package/dist/nodejs-utils/serve.d.ts +5 -0
  129. package/dist/nodejs-utils/serve.js +77 -0
  130. package/dist/nodejs-utils/serve.js.map +1 -0
  131. package/dist/storage/credential-storage.d.ts +8 -0
  132. package/dist/storage/credential-storage.js +2 -0
  133. package/dist/storage/credential-storage.js.map +1 -0
  134. package/dist/storage/key-event-storage.d.ts +10 -0
  135. package/dist/storage/key-event-storage.js +2 -0
  136. package/dist/storage/key-event-storage.js.map +1 -0
  137. package/dist/storage/mailbox-storage.d.ts +4 -0
  138. package/dist/storage/mailbox-storage.js +2 -0
  139. package/dist/storage/mailbox-storage.js.map +1 -0
  140. package/dist/storage/private-key-storage.d.ts +5 -0
  141. package/dist/storage/private-key-storage.js +2 -0
  142. package/dist/storage/private-key-storage.js.map +1 -0
  143. package/dist/storage/sqlite/node-sqlite.d.ts +12 -0
  144. package/dist/storage/sqlite/node-sqlite.js +25 -0
  145. package/dist/storage/sqlite/node-sqlite.js.map +1 -0
  146. package/dist/storage/sqlite/schema.d.ts +2 -0
  147. package/dist/storage/sqlite/schema.js +55 -0
  148. package/dist/storage/sqlite/schema.js.map +1 -0
  149. package/dist/storage/sqlite/sqlite-database.d.ts +13 -0
  150. package/dist/storage/sqlite/sqlite-database.js +2 -0
  151. package/dist/storage/sqlite/sqlite-database.js.map +1 -0
  152. package/dist/storage/sqlite/storage-sqlite.d.ts +29 -0
  153. package/dist/storage/sqlite/storage-sqlite.js +213 -0
  154. package/dist/storage/sqlite/storage-sqlite.js.map +1 -0
  155. package/dist/witness/main.d.ts +2 -0
  156. package/dist/witness/main.js +3 -0
  157. package/dist/witness/main.js.map +1 -0
  158. package/dist/witness/parser.d.ts +3 -0
  159. package/dist/witness/parser.js +7 -0
  160. package/dist/witness/parser.js.map +1 -0
  161. package/dist/witness/seed.d.ts +1 -0
  162. package/dist/witness/seed.js +5 -0
  163. package/dist/witness/seed.js.map +1 -0
  164. package/dist/witness/witness-router.d.ts +2 -0
  165. package/dist/witness/witness-router.js +90 -0
  166. package/dist/witness/witness-router.js.map +1 -0
  167. package/dist/witness/witness.d.ts +23 -0
  168. package/dist/witness/witness.js +92 -0
  169. package/dist/witness/witness.js.map +1 -0
  170. package/package.json +36 -23
  171. package/dist/cli/main.d.ts +0 -2
  172. package/dist/cli/main.js +0 -177
  173. package/dist/cli/main.js.map +0 -1
  174. package/dist/client.d.ts +0 -21
  175. package/dist/client.js +0 -72
  176. package/dist/client.js.map +0 -1
  177. package/dist/controller.d.ts +0 -65
  178. package/dist/controller.js +0 -475
  179. package/dist/controller.js.map +0 -1
  180. package/dist/data-type.d.ts +0 -9
  181. package/dist/data-type.js +0 -2
  182. package/dist/data-type.js.map +0 -1
  183. package/dist/db/storage-sqlite.d.ts +0 -12
  184. package/dist/db/storage-sqlite.js +0 -57
  185. package/dist/db/storage-sqlite.js.map +0 -1
  186. package/dist/db/storage.d.ts +0 -18
  187. package/dist/db/storage.js +0 -37
  188. package/dist/db/storage.js.map +0 -1
  189. package/dist/events/event-store.d.ts +0 -133
  190. package/dist/events/event-store.js +0 -215
  191. package/dist/events/event-store.js.map +0 -1
  192. package/dist/events/events.d.ts +0 -251
  193. package/dist/events/events.js +0 -184
  194. package/dist/events/events.js.map +0 -1
  195. package/dist/keystore/encrypt.d.ts +0 -10
  196. package/dist/keystore/encrypt.js +0 -39
  197. package/dist/keystore/encrypt.js.map +0 -1
  198. package/dist/keystore/keystore.d.ts +0 -29
  199. package/dist/keystore/keystore.js +0 -72
  200. package/dist/keystore/keystore.js.map +0 -1
@@ -0,0 +1,137 @@
1
+ import { encodeUtf8 } from "../encoding/utf8.js";
2
+ import { concat } from "./array-utils.js";
3
+ import { AttachmentsReader } from "./attachments-reader.js";
4
+ import { CountCode_10, CountCode_20 } from "./codes.js";
5
+ import { Counter } from "./counter.js";
6
+ import { Genus } from "./genus.js";
7
+ import { Message } from "./message.js";
8
+ /**
9
+ * Parses CESR messages from an incoming stream of bytes.
10
+ *
11
+ * @example
12
+ *
13
+ * ```ts
14
+ * import { parse } from "cesr";
15
+ *
16
+ * const url = "https://example.com/oobi/EAQABAA..."; // URL returning a CESR stream
17
+ * const response = await fetch(url);
18
+ *
19
+ * if (response.body) {
20
+ * for await (const message of parse(response.body)) {
21
+ * console.log(message);
22
+ * }
23
+ * }
24
+ * ```
25
+ *
26
+ * @param input
27
+ * Input to the parser. Can be an Uint8Array, string or stream.
28
+ *
29
+ * Strings are treated as UTF-8 encoded data.
30
+ *
31
+ * @param options
32
+ * Parser options
33
+ *
34
+ * @returns An async iterable of {@link Message} objects
35
+ */
36
+ export async function* parse(input, options) {
37
+ let message = null;
38
+ let attachments = null;
39
+ let buffer = new Uint8Array(0);
40
+ // The version of the spec to use for group parsing
41
+ let genus = new Genus({
42
+ protocol: "AAA",
43
+ major: options?.version ?? 1,
44
+ minor: 0,
45
+ });
46
+ for await (const chunk of resolveInput(input)) {
47
+ buffer = concat(buffer, chunk);
48
+ while (buffer.length > 0) {
49
+ if (buffer.length < 4) {
50
+ break;
51
+ }
52
+ const start = String.fromCharCode(buffer[0]);
53
+ const next = String.fromCharCode(buffer[1]);
54
+ if (start === "{") {
55
+ if (message) {
56
+ yield new Message(message.body, attachments ?? undefined);
57
+ message = null;
58
+ attachments = null;
59
+ }
60
+ message = Message.parse(buffer);
61
+ if (!message) {
62
+ break;
63
+ }
64
+ if (message.version.legacy === false) {
65
+ // Update version for group parsing if the JSON body
66
+ // is encoded using the new Version String format
67
+ genus = new Genus({
68
+ protocol: genus.protocol,
69
+ major: 2,
70
+ minor: 0,
71
+ });
72
+ }
73
+ buffer = buffer.slice(message.raw.length);
74
+ }
75
+ else if (start === "-" && next === "_") {
76
+ genus = Genus.parse(buffer);
77
+ buffer = buffer.slice(genus.quadlets * 4);
78
+ }
79
+ else if (start === "-") {
80
+ const counter = Counter.peek(buffer);
81
+ if (!counter.frame) {
82
+ break;
83
+ }
84
+ if ((genus.major === 1 && counter.frame.code === CountCode_10.AttachmentGroup) ||
85
+ (genus.major === 2 && counter.frame.code === CountCode_20.AttachmentGroup)) {
86
+ if (buffer.length < counter.n + counter.frame.count * 4) {
87
+ // Not enough data to read the whole attachment group
88
+ break;
89
+ }
90
+ const reader = new AttachmentsReader(buffer, { version: genus.major });
91
+ attachments = reader.readAttachments();
92
+ if (!attachments) {
93
+ break;
94
+ }
95
+ buffer = buffer.slice(reader.bytesRead);
96
+ }
97
+ else {
98
+ const reader = new AttachmentsReader(buffer, { version: genus.major });
99
+ attachments = reader.readAttachments();
100
+ if (!attachments) {
101
+ break;
102
+ }
103
+ buffer = buffer.slice(reader.bytesRead);
104
+ }
105
+ }
106
+ else {
107
+ throw new Error(`Unexpected start byte: ${start}`);
108
+ }
109
+ }
110
+ }
111
+ if (message) {
112
+ yield new Message(message.body, attachments ?? undefined);
113
+ }
114
+ if (buffer.length > 0) {
115
+ throw new Error("Unexpected end of stream");
116
+ }
117
+ }
118
+ function resolveInput(input) {
119
+ if (typeof input === "string") {
120
+ return new ReadableStream({
121
+ start(controller) {
122
+ controller.enqueue(encodeUtf8(input));
123
+ controller.close();
124
+ },
125
+ });
126
+ }
127
+ if (input instanceof Uint8Array) {
128
+ return new ReadableStream({
129
+ start(controller) {
130
+ controller.enqueue(input);
131
+ controller.close();
132
+ },
133
+ });
134
+ }
135
+ return input;
136
+ }
137
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/cesr/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Shifts a number left
3
+ *
4
+ * @param num Number to shift left
5
+ * @param bits How many bits to shift
6
+ */
7
+ export declare function lshift(num: number, bits: number): number;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Shifts a number left
3
+ *
4
+ * @param num Number to shift left
5
+ * @param bits How many bits to shift
6
+ */
7
+ export function lshift(num, bits) {
8
+ return num * 2 ** bits;
9
+ }
10
+ //# sourceMappingURL=shifting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shifting.js","sourceRoot":"","sources":["../../src/cesr/shifting.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,IAAY;IAC9C,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC;AACzB,CAAC"}
@@ -0,0 +1,35 @@
1
+ export interface VersionStringInit {
2
+ protocol: string;
3
+ major?: number;
4
+ minor?: number;
5
+ kind?: string;
6
+ legacy?: boolean;
7
+ size?: number;
8
+ }
9
+ export declare class VersionString {
10
+ readonly protocol: string;
11
+ readonly major: number;
12
+ readonly minor: number;
13
+ readonly kind: string;
14
+ readonly legacy: boolean;
15
+ readonly size: number;
16
+ constructor(init: VersionStringInit);
17
+ get text(): string;
18
+ /**
19
+ * Extrats and parses the version string from a message payload
20
+ * @param input
21
+ */
22
+ static extract(input: Uint8Array | string): VersionString;
23
+ /**
24
+ * Parses a version string into a {@link VersionString} object
25
+ *
26
+ * @param input The version string
27
+ * @returns The parsed {@link VersionString} object
28
+ */
29
+ static parse(input: string): VersionString;
30
+ static encode(init: VersionStringInit): string;
31
+ static readonly KERI_LEGACY: string;
32
+ static readonly KERI: string;
33
+ static readonly ACDC_LEGACY: string;
34
+ static readonly ACDC: string;
35
+ }
@@ -0,0 +1,147 @@
1
+ import { decodeBase64Int, encodeBase64Int } from "../encoding/base64.js";
2
+ import { decodeUtf8 } from "../encoding/utf8.js";
3
+ const REGEX_VERSION_STRING_PROTOCOL = /^[A-Z]{4}$/;
4
+ const REGEX_VERSION_JSON = /^\{"v":"(.*?)".*$/;
5
+ const Kind = {
6
+ JSON: "JSON",
7
+ CBOR: "CBOR",
8
+ MSGPACK: "MGPK",
9
+ CESR: "CESR",
10
+ };
11
+ const KIND_VALUES = new Set(Object.values(Kind));
12
+ function encodeHexInt(value, length) {
13
+ if (value >= 16 ** length) {
14
+ throw new Error(`Value exceeds maximum for hex encoding. Expected value < ${16 ** length} for length ${length}, got ${value}`);
15
+ }
16
+ return value.toString(16).padStart(length, "0");
17
+ }
18
+ export class VersionString {
19
+ protocol;
20
+ major;
21
+ minor;
22
+ kind;
23
+ legacy;
24
+ size;
25
+ constructor(init) {
26
+ if (!REGEX_VERSION_STRING_PROTOCOL.test(init.protocol)) {
27
+ throw new Error(`Protocol must be 4 uppercase characters. Expected format: /^[A-Z]{4}$/, got "${init.protocol}"`);
28
+ }
29
+ const kind = init.kind ?? "JSON";
30
+ if (!KIND_VALUES.has(kind)) {
31
+ throw new Error(`Encoding kind must be one of ${Array.from(KIND_VALUES).join(", ")}, got "${kind}"`);
32
+ }
33
+ // TODO: Remove when other kinds are supported
34
+ if (kind !== "JSON") {
35
+ throw new Error(`Unsupported encoding kind "${kind}", only JSON format is supported for now`);
36
+ }
37
+ if (init.size !== undefined && init.size < 0) {
38
+ throw new Error(`Size must be non-negative. Expected size >= 0, got ${init.size}`);
39
+ }
40
+ this.protocol = init.protocol;
41
+ this.major = init.major ?? 1;
42
+ this.minor = init.minor ?? 0;
43
+ this.kind = kind;
44
+ this.legacy = init.legacy ?? true;
45
+ this.size = init.size ?? 0;
46
+ }
47
+ get text() {
48
+ return VersionString.encode(this);
49
+ }
50
+ /**
51
+ * Extrats and parses the version string from a message payload
52
+ * @param input
53
+ */
54
+ static extract(input) {
55
+ if (typeof input !== "string") {
56
+ input = decodeUtf8(input.slice(0, 24));
57
+ }
58
+ const match = input.match(REGEX_VERSION_JSON);
59
+ if (!match) {
60
+ const preview = typeof input === "string" ? input.slice(0, 50) : String(input).slice(0, 50);
61
+ throw new Error(`Unable to extract "v" field. Expected JSON object with "v" property at start (format: {"v":"..."}), got "${preview}${input.length > 50 ? "..." : ""}"`);
62
+ }
63
+ return VersionString.parse(match[1]);
64
+ }
65
+ /**
66
+ * Parses a version string into a {@link VersionString} object
67
+ *
68
+ * @param input The version string
69
+ * @returns The parsed {@link VersionString} object
70
+ */
71
+ static parse(input) {
72
+ if (input.endsWith(".") && input.length === 16) {
73
+ const protocol = input.slice(0, 4);
74
+ const major = decodeBase64Int(input.slice(4, 5));
75
+ const minor = decodeBase64Int(input.slice(5, 7));
76
+ const kind = input.slice(7, 11);
77
+ const size = decodeBase64Int(input.slice(12, 15));
78
+ return new VersionString({
79
+ protocol,
80
+ major,
81
+ minor,
82
+ legacy: false,
83
+ kind,
84
+ size,
85
+ });
86
+ }
87
+ if (input.endsWith("_") && input.length === 17) {
88
+ const protocol = input.slice(0, 4);
89
+ const major = parseInt(input.slice(4, 5), 16);
90
+ const minor = parseInt(input.slice(5, 6), 16);
91
+ const format = input.slice(6, 10);
92
+ const size = parseInt(input.slice(10, 16), 16);
93
+ return new VersionString({
94
+ protocol,
95
+ major,
96
+ minor,
97
+ kind: format,
98
+ size,
99
+ legacy: true,
100
+ });
101
+ }
102
+ throw new Error(`Invalid version string format. Expected 17-char legacy format (ending with "_") or 16-char modern format (ending with "."), got "${input}"`);
103
+ }
104
+ static encode(init) {
105
+ const protocol = init.protocol;
106
+ const major = init.major ?? 1;
107
+ const minor = init.minor ?? 0;
108
+ const format = init.kind ?? "JSON";
109
+ if (init.legacy) {
110
+ const version = `${encodeHexInt(major, 1)}${encodeHexInt(minor, 1)}`;
111
+ const size = encodeHexInt(init.size ?? 0, 6);
112
+ return `${protocol}${version}${format}${size}_`;
113
+ }
114
+ const version = `${encodeBase64Int(major, 1)}${encodeBase64Int(minor, 2)}`;
115
+ const size = encodeBase64Int(init.size ?? 0, 4);
116
+ return `${protocol}${version}${format}${size}.`;
117
+ }
118
+ static KERI_LEGACY = new VersionString({
119
+ protocol: "KERI",
120
+ major: 1,
121
+ minor: 0,
122
+ kind: "JSON",
123
+ legacy: true,
124
+ }).text;
125
+ static KERI = new VersionString({
126
+ protocol: "KERI",
127
+ major: 2,
128
+ minor: 0,
129
+ kind: "JSON",
130
+ legacy: false,
131
+ }).text;
132
+ static ACDC_LEGACY = new VersionString({
133
+ protocol: "ACDC",
134
+ major: 1,
135
+ minor: 0,
136
+ kind: "JSON",
137
+ legacy: true,
138
+ }).text;
139
+ static ACDC = new VersionString({
140
+ protocol: "ACDC",
141
+ major: 1,
142
+ minor: 0,
143
+ kind: "JSON",
144
+ legacy: false,
145
+ }).text;
146
+ }
147
+ //# sourceMappingURL=version-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-string.js","sourceRoot":"","sources":["../../src/cesr/version-string.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface CommandLineInterface {
2
+ args: string[];
3
+ read(input: string): AsyncIterableIterator<Uint8Array>;
4
+ }
5
+ export declare function execute(cli: CommandLineInterface): Promise<void>;
@@ -0,0 +1,73 @@
1
+ /** biome-ignore-all lint/suspicious/noConsole: CLI */
2
+ import { parse } from "../cesr/__main__.js";
3
+ function parseArgs(inputArgs, opts) {
4
+ const helpText = [
5
+ `Usage: cesr [options] <input>`,
6
+ "",
7
+ "Parses an input CESR stream.",
8
+ "",
9
+ "Arguments:",
10
+ " <input> The input file to parse. Use '-' for stdin. Can also be a URL.",
11
+ "",
12
+ "Options:",
13
+ ...Object.entries(opts).map(([key, value]) => {
14
+ return ` ${key} ${value.description}`;
15
+ }),
16
+ ].join("\n");
17
+ const args = [];
18
+ const options = {};
19
+ inputArgs.forEach((arg) => {
20
+ if (!arg.startsWith("--")) {
21
+ args.push(arg);
22
+ return;
23
+ }
24
+ if (arg.includes("=")) {
25
+ const [key, value] = arg.split("=");
26
+ options[key] = value;
27
+ return;
28
+ }
29
+ options[arg] = true;
30
+ });
31
+ return {
32
+ _: args,
33
+ options,
34
+ helpText,
35
+ };
36
+ }
37
+ function formatError(message, help) {
38
+ return `Error: ${message}\n\n${help}`;
39
+ }
40
+ export async function execute(cli) {
41
+ const app = parseArgs(cli.args, {
42
+ "--help": {
43
+ description: "Show help",
44
+ },
45
+ "--pretty": {
46
+ description: "Pretty print the output",
47
+ },
48
+ });
49
+ const input = app.options["--input"] || app._[0];
50
+ if (app.options["--help"]) {
51
+ console.log(app.helpText);
52
+ return;
53
+ }
54
+ if (typeof input !== "string" || input.length === 0) {
55
+ throw new Error(formatError("No input file specified.", app.helpText));
56
+ }
57
+ const stream = cli.read(input);
58
+ for await (const message of parse(stream)) {
59
+ if (app.options["--pretty"]) {
60
+ console.dir({
61
+ payload: message.body,
62
+ attachments: message.attachments.frames().map((frame) => frame.text()),
63
+ }, { depth: 100, colors: true });
64
+ }
65
+ else {
66
+ console.log(JSON.stringify({
67
+ payload: message.body,
68
+ attachments: message.attachments.frames().map((frame) => frame.text()),
69
+ }));
70
+ }
71
+ }
72
+ }
73
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function resolveInputStream(input: string): AsyncIterableIterator<Uint8Array>;
@@ -0,0 +1,22 @@
1
+ import { createReadStream } from "node:fs";
2
+ export async function* resolveInputStream(input) {
3
+ if (input === "-") {
4
+ yield* process.stdin;
5
+ return;
6
+ }
7
+ if (input.startsWith("http") || input.startsWith("https")) {
8
+ const response = await fetch(input);
9
+ if (response.body) {
10
+ for await (const chunk of response.body) {
11
+ yield chunk;
12
+ }
13
+ }
14
+ return;
15
+ }
16
+ const stream = createReadStream(input);
17
+ for await (const chunk of stream) {
18
+ yield chunk;
19
+ }
20
+ stream.close();
21
+ }
22
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/cli/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,kBAAkB,CAAC,KAAa;IACrD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import process from "node:process";
3
+ import { execute } from "./cli.js";
4
+ import { resolveInputStream } from "./input.js";
5
+ try {
6
+ await execute({
7
+ args: process.argv.slice(2),
8
+ read: resolveInputStream,
9
+ });
10
+ }
11
+ catch (error) {
12
+ if (error instanceof Error) {
13
+ process.stderr.write("Error: ");
14
+ process.stderr.write(error.message);
15
+ process.stderr.write("\n");
16
+ }
17
+ process.exit(1);
18
+ }
19
+ //# sourceMappingURL=node-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-cli.js","sourceRoot":"","sources":["../../src/cli/node-cli.ts"],"names":[],"mappings":";AACA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,IAAI,CAAC;IACH,MAAM,OAAO,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3B,IAAI,EAAE,kBAAkB;KACzB,CAAC,CAAC;AACL,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { type CredentialBody, type Endpoint, type InceptEventBody, type InteractEventBody, type KeyEvent, KeyEventLog, type KeyState, Message, type RegistryInceptEventBody, type RotateEventBody } from "../core/main.ts";
2
+ import type { CredentialStorage } from "../storage/credential-storage.ts";
3
+ import type { KeyEventStorage } from "../storage/key-event-storage.ts";
4
+ import type { MailboxStorage } from "../storage/mailbox-storage.ts";
5
+ import type { PrivateKeyStorage } from "../storage/private-key-storage.ts";
6
+ import { type Encrypter } from "./encrypt.ts";
7
+ export type { CredentialStorage } from "../storage/credential-storage.ts";
8
+ export type { KeyEventStorage } from "../storage/key-event-storage.ts";
9
+ export type { MailboxStorage } from "../storage/mailbox-storage.ts";
10
+ export type { PrivateKeyStorage } from "../storage/private-key-storage.ts";
11
+ export type { Encrypter } from "./encrypt.ts";
12
+ export type ControllerStorage = KeyEventStorage & PrivateKeyStorage & CredentialStorage & MailboxStorage;
13
+ export interface ForwardArgs {
14
+ sender: string;
15
+ recipient: string;
16
+ topic: string;
17
+ message: Message;
18
+ timestamp?: string;
19
+ }
20
+ export interface ControllerDeps {
21
+ storage: ControllerStorage;
22
+ encrypter?: Encrypter;
23
+ passphrase?: string;
24
+ fetch?: typeof globalThis.fetch;
25
+ }
26
+ export interface ReplyArgs {
27
+ id: string;
28
+ route: string;
29
+ record: Record<string, unknown>;
30
+ }
31
+ export interface ControllerInceptArgs {
32
+ wits?: string[];
33
+ toad?: number;
34
+ }
35
+ export interface InceptResult {
36
+ id: string;
37
+ event: InceptEventBody;
38
+ }
39
+ export interface AnchorResult {
40
+ id: string;
41
+ event: InteractEventBody;
42
+ }
43
+ export interface RotateResult {
44
+ id: string;
45
+ event: RotateEventBody;
46
+ }
47
+ export interface ControllerRotateArgs {
48
+ data?: Record<string, unknown>;
49
+ }
50
+ export interface AnchorArgs {
51
+ data?: Record<string, unknown>;
52
+ }
53
+ export interface CreateCredentialArgs {
54
+ registryId: string;
55
+ schemaId: string;
56
+ holder: string;
57
+ salt?: string;
58
+ timestamp?: Date;
59
+ data?: Record<string, unknown>;
60
+ rules?: Record<string, unknown>;
61
+ edges?: Record<string, unknown>;
62
+ }
63
+ export interface IpexGrantArgs {
64
+ credential: CredentialBody;
65
+ recipient?: string;
66
+ timestamp?: string;
67
+ }
68
+ export declare class Controller {
69
+ #private;
70
+ constructor(deps: ControllerDeps);
71
+ private generateKey;
72
+ private signWithKey;
73
+ introduce(oobi: string): Promise<KeyState>;
74
+ loadEventLog(id: string): Promise<KeyEventLog>;
75
+ resolveEndpoint(aid: string, role?: string): Endpoint;
76
+ sign(raw: Uint8Array, keys: string[]): Promise<string[]>;
77
+ incept(args?: ControllerInceptArgs): Promise<InceptResult>;
78
+ processMessage(message: Message): Promise<void>;
79
+ commit(log: KeyEventLog, event: KeyEvent): Promise<void>;
80
+ anchor(id: string, anchor: AnchorArgs): Promise<AnchorResult>;
81
+ rotate(id: string, args: ControllerRotateArgs): Promise<RotateResult>;
82
+ /**
83
+ * Creates and stores a signed reply message and submits to all witnesses.
84
+ */
85
+ reply(args: ReplyArgs): Promise<void>;
86
+ forward(args: ForwardArgs): Promise<void>;
87
+ createRegistry(owner: string): Promise<RegistryInceptEventBody>;
88
+ listRegistries(owner: string): Promise<RegistryInceptEventBody[]>;
89
+ createCredential(args: CreateCredentialArgs): Promise<CredentialBody>;
90
+ getCredential(id: string): Promise<CredentialBody | null>;
91
+ listCredentials(registryId: string): Promise<CredentialBody[]>;
92
+ issueCredential(credential: CredentialBody): Promise<void>;
93
+ private getIssueEvent;
94
+ private getAnchorFromSeal;
95
+ private buildCredentialMessage;
96
+ sendCredentialArtifacts(credential: CredentialBody, recipient: string): Promise<void>;
97
+ grant(args: IpexGrantArgs): Promise<void>;
98
+ query(id: string, topic: string): Promise<Message[]>;
99
+ receiveGrants(holderId: string): Promise<CredentialBody[]>;
100
+ export(id: string): Promise<Message[]>;
101
+ }