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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +3 -0
  2. package/dist/cesr/array-utils.d.ts +3 -0
  3. package/dist/cesr/array-utils.js +29 -0
  4. package/dist/cesr/array-utils.js.map +1 -0
  5. package/dist/cesr/attachments-reader.d.ts +10 -0
  6. package/dist/cesr/attachments-reader.js +281 -0
  7. package/dist/cesr/attachments-reader.js.map +1 -0
  8. package/dist/cesr/attachments.d.ts +66 -0
  9. package/dist/cesr/attachments.js +108 -0
  10. package/dist/cesr/attachments.js.map +1 -0
  11. package/dist/cesr/codes.d.ts +1208 -0
  12. package/dist/cesr/codes.js +309 -0
  13. package/dist/cesr/codes.js.map +1 -0
  14. package/dist/cesr/counter.d.ts +114 -0
  15. package/dist/cesr/counter.js +78 -0
  16. package/dist/cesr/counter.js.map +1 -0
  17. package/dist/cesr/frame.d.ts +31 -0
  18. package/dist/cesr/frame.js +99 -0
  19. package/dist/cesr/frame.js.map +1 -0
  20. package/dist/cesr/genus.d.ts +18 -0
  21. package/dist/cesr/genus.js +57 -0
  22. package/dist/cesr/genus.js.map +1 -0
  23. package/dist/cesr/groups/generic-map.d.ts +11 -0
  24. package/dist/cesr/groups/generic-map.js +51 -0
  25. package/dist/cesr/groups/generic-map.js.map +1 -0
  26. package/dist/cesr/indexer.d.ts +68 -0
  27. package/dist/cesr/indexer.js +171 -0
  28. package/dist/cesr/indexer.js.map +1 -0
  29. package/dist/cesr/main.d.ts +9 -0
  30. package/dist/cesr/main.js +10 -0
  31. package/dist/cesr/main.js.map +1 -0
  32. package/dist/cesr/matter.d.ts +160 -0
  33. package/dist/cesr/matter.js +301 -0
  34. package/dist/cesr/matter.js.map +1 -0
  35. package/dist/cesr/message.d.ts +17 -0
  36. package/dist/cesr/message.js +81 -0
  37. package/dist/cesr/message.js.map +1 -0
  38. package/dist/cesr/parse.d.ts +37 -0
  39. package/dist/cesr/parse.js +138 -0
  40. package/dist/cesr/parse.js.map +1 -0
  41. package/dist/cesr/shifting.d.ts +7 -0
  42. package/dist/cesr/shifting.js +10 -0
  43. package/dist/cesr/shifting.js.map +1 -0
  44. package/dist/cesr/version-string.d.ts +35 -0
  45. package/dist/cesr/version-string.js +146 -0
  46. package/dist/cesr/version-string.js.map +1 -0
  47. package/dist/cli/cli.d.ts +5 -0
  48. package/dist/cli/cli.js +73 -0
  49. package/dist/cli/cli.js.map +1 -0
  50. package/dist/cli/input.d.ts +1 -0
  51. package/dist/cli/input.js +22 -0
  52. package/dist/cli/input.js.map +1 -0
  53. package/dist/cli/node-cli.d.ts +2 -0
  54. package/dist/cli/node-cli.js +19 -0
  55. package/dist/cli/node-cli.js.map +1 -0
  56. package/dist/controller/controller.d.ts +17 -29
  57. package/dist/controller/controller.js +64 -8
  58. package/dist/controller/controller.js.map +1 -1
  59. package/dist/controller/main.d.ts +1 -0
  60. package/dist/controller/main.js +2 -0
  61. package/dist/controller/main.js.map +1 -0
  62. package/dist/core/credential-event.d.ts +5 -9
  63. package/dist/core/credential-event.js +1 -1
  64. package/dist/core/credential-event.js.map +1 -1
  65. package/dist/core/credential.d.ts +1 -1
  66. package/dist/core/credential.js +1 -1
  67. package/dist/core/credential.js.map +1 -1
  68. package/dist/core/digest.js +3 -3
  69. package/dist/core/digest.js.map +1 -1
  70. package/dist/core/endpoint-discovery.d.ts +4 -4
  71. package/dist/core/endpoint-discovery.js.map +1 -1
  72. package/dist/core/events.js +2 -2
  73. package/dist/core/events.js.map +1 -1
  74. package/dist/core/kawa.d.ts +2 -2
  75. package/dist/core/kawa.js +7 -37
  76. package/dist/core/kawa.js.map +1 -1
  77. package/dist/core/key-event-log.d.ts +12 -6
  78. package/dist/core/key-event-log.js +13 -11
  79. package/dist/core/key-event-log.js.map +1 -1
  80. package/dist/core/key-event.d.ts +7 -9
  81. package/dist/core/key-event.js +1 -1
  82. package/dist/core/key-event.js.map +1 -1
  83. package/dist/core/keys.d.ts +2 -1
  84. package/dist/core/keys.js +10 -10
  85. package/dist/core/keys.js.map +1 -1
  86. package/dist/core/mailbox-client.d.ts +7 -1
  87. package/dist/core/mailbox-client.js +37 -19
  88. package/dist/core/mailbox-client.js.map +1 -1
  89. package/dist/core/main.d.ts +17 -10
  90. package/dist/core/main.js +5 -3
  91. package/dist/core/main.js.map +1 -1
  92. package/dist/core/receipt-event.d.ts +2 -2
  93. package/dist/core/receipt-event.js +1 -1
  94. package/dist/core/receipt-event.js.map +1 -1
  95. package/dist/core/registry-event.d.ts +3 -5
  96. package/dist/core/registry-event.js +1 -1
  97. package/dist/core/registry-event.js.map +1 -1
  98. package/dist/core/routed-event.d.ts +7 -13
  99. package/dist/core/routed-event.js +1 -1
  100. package/dist/core/routed-event.js.map +1 -1
  101. package/dist/core/said.js +9 -6
  102. package/dist/core/said.js.map +1 -1
  103. package/dist/core/sign.js +3 -3
  104. package/dist/core/sign.js.map +1 -1
  105. package/dist/core/verify.d.ts +11 -2
  106. package/dist/core/verify.js +30 -11
  107. package/dist/core/verify.js.map +1 -1
  108. package/dist/core/witness-client.d.ts +8 -0
  109. package/dist/core/witness-client.js +39 -0
  110. package/dist/core/witness-client.js.map +1 -0
  111. package/dist/encoding/base64.d.ts +4 -0
  112. package/dist/encoding/base64.js +82 -0
  113. package/dist/encoding/base64.js.map +1 -0
  114. package/dist/encoding/main.d.ts +2 -0
  115. package/dist/encoding/main.js +3 -0
  116. package/dist/encoding/main.js.map +1 -0
  117. package/dist/encoding/utf8.d.ts +2 -0
  118. package/dist/encoding/utf8.js +9 -0
  119. package/dist/encoding/utf8.js.map +1 -0
  120. package/dist/logging/main.d.ts +15 -0
  121. package/dist/logging/main.js +25 -0
  122. package/dist/logging/main.js.map +1 -0
  123. package/dist/mailbox/mailbox-router.d.ts +6 -0
  124. package/dist/mailbox/mailbox-router.js +88 -0
  125. package/dist/mailbox/mailbox-router.js.map +1 -0
  126. package/dist/mailbox/mailbox.d.ts +27 -0
  127. package/dist/mailbox/mailbox.js +101 -0
  128. package/dist/mailbox/mailbox.js.map +1 -0
  129. package/dist/mailbox/main.d.ts +3 -0
  130. package/dist/mailbox/main.js +3 -0
  131. package/dist/mailbox/main.js.map +1 -0
  132. package/dist/main.d.ts +2 -1
  133. package/dist/main.js +1 -1
  134. package/dist/main.js.map +1 -1
  135. package/dist/nodejs-utils/main.d.ts +2 -0
  136. package/dist/nodejs-utils/main.js +2 -0
  137. package/dist/nodejs-utils/main.js.map +1 -0
  138. package/dist/nodejs-utils/serve.d.ts +6 -0
  139. package/dist/nodejs-utils/serve.js +68 -0
  140. package/dist/nodejs-utils/serve.js.map +1 -0
  141. package/dist/{storage/sqlite/storage-sqlite.d.ts → sqlite-storage/main.d.ts} +9 -7
  142. package/dist/{storage/sqlite/storage-sqlite.js → sqlite-storage/main.js} +33 -9
  143. package/dist/sqlite-storage/main.js.map +1 -0
  144. package/dist/sqlite-storage/node-sqlite.js.map +1 -0
  145. package/dist/sqlite-storage/schema.js +67 -0
  146. package/dist/sqlite-storage/schema.js.map +1 -0
  147. package/dist/sqlite-storage/sqlite-database.js.map +1 -0
  148. package/dist/storage/credential-storage.d.ts +8 -0
  149. package/dist/storage/credential-storage.js +2 -0
  150. package/dist/storage/credential-storage.js.map +1 -0
  151. package/dist/storage/key-event-storage.d.ts +10 -0
  152. package/dist/storage/key-event-storage.js +2 -0
  153. package/dist/storage/key-event-storage.js.map +1 -0
  154. package/dist/storage/mailbox-server-storage.d.ts +9 -0
  155. package/dist/storage/mailbox-server-storage.js +2 -0
  156. package/dist/storage/mailbox-server-storage.js.map +1 -0
  157. package/dist/storage/mailbox-storage.d.ts +4 -0
  158. package/dist/storage/mailbox-storage.js +2 -0
  159. package/dist/storage/mailbox-storage.js.map +1 -0
  160. package/dist/storage/main.d.ts +5 -0
  161. package/dist/storage/main.js +2 -0
  162. package/dist/storage/main.js.map +1 -0
  163. package/dist/storage/private-key-storage.d.ts +5 -0
  164. package/dist/storage/private-key-storage.js +2 -0
  165. package/dist/storage/private-key-storage.js.map +1 -0
  166. package/dist/witness/main.d.ts +3 -0
  167. package/dist/witness/main.js +3 -0
  168. package/dist/witness/main.js.map +1 -0
  169. package/dist/witness/witness-router.d.ts +6 -0
  170. package/dist/witness/witness-router.js +120 -0
  171. package/dist/witness/witness-router.js.map +1 -0
  172. package/dist/witness/witness.d.ts +26 -0
  173. package/dist/witness/witness.js +156 -0
  174. package/dist/witness/witness.js.map +1 -0
  175. package/package.json +28 -24
  176. package/dist/storage/sqlite/node-sqlite.js.map +0 -1
  177. package/dist/storage/sqlite/schema.js +0 -49
  178. package/dist/storage/sqlite/schema.js.map +0 -1
  179. package/dist/storage/sqlite/sqlite-database.js.map +0 -1
  180. package/dist/storage/sqlite/storage-sqlite.js.map +0 -1
  181. /package/dist/{storage/sqlite → sqlite-storage}/node-sqlite.d.ts +0 -0
  182. /package/dist/{storage/sqlite → sqlite-storage}/node-sqlite.js +0 -0
  183. /package/dist/{storage/sqlite → sqlite-storage}/schema.d.ts +0 -0
  184. /package/dist/{storage/sqlite → sqlite-storage}/sqlite-database.d.ts +0 -0
  185. /package/dist/{storage/sqlite → sqlite-storage}/sqlite-database.js +0 -0
@@ -0,0 +1,138 @@
1
+ import { encodeUtf8 } from "../encoding/main.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 { resolveQuadletCount } from "./frame.js";
7
+ import { Genus } from "./genus.js";
8
+ import { Message } from "./message.js";
9
+ /**
10
+ * Parses CESR messages from an incoming stream of bytes.
11
+ *
12
+ * @example
13
+ *
14
+ * ```ts
15
+ * import { parse } from "cesr";
16
+ *
17
+ * const url = "https://example.com/oobi/EAQABAA..."; // URL returning a CESR stream
18
+ * const response = await fetch(url);
19
+ *
20
+ * if (response.body) {
21
+ * for await (const message of parse(response.body)) {
22
+ * console.log(message);
23
+ * }
24
+ * }
25
+ * ```
26
+ *
27
+ * @param input
28
+ * Input to the parser. Can be an Uint8Array, string or stream.
29
+ *
30
+ * Strings are treated as UTF-8 encoded data.
31
+ *
32
+ * @param options
33
+ * Parser options
34
+ *
35
+ * @returns An async iterable of {@link Message} objects
36
+ */
37
+ export async function* parse(input, options) {
38
+ let message = null;
39
+ let attachments = null;
40
+ let buffer = new Uint8Array(0);
41
+ // The version of the spec to use for group parsing
42
+ let genus = new Genus({
43
+ protocol: "AAA",
44
+ major: options?.version ?? 1,
45
+ minor: 0,
46
+ });
47
+ for await (const chunk of resolveInput(input)) {
48
+ buffer = concat(buffer, chunk);
49
+ while (buffer.length > 0) {
50
+ if (buffer.length < 4) {
51
+ break;
52
+ }
53
+ const start = String.fromCharCode(buffer[0]);
54
+ const next = String.fromCharCode(buffer[1]);
55
+ if (start === "{") {
56
+ if (message) {
57
+ yield new Message(message.body, attachments ?? undefined);
58
+ message = null;
59
+ attachments = null;
60
+ }
61
+ message = Message.parse(buffer);
62
+ if (!message) {
63
+ break;
64
+ }
65
+ if (message.version.legacy === false) {
66
+ // Update version for group parsing if the JSON body
67
+ // is encoded using the new Version String format
68
+ genus = new Genus({
69
+ protocol: genus.protocol,
70
+ major: 2,
71
+ minor: 0,
72
+ });
73
+ }
74
+ buffer = buffer.slice(message.raw.length);
75
+ }
76
+ else if (start === "-" && next === "_") {
77
+ genus = Genus.parse(buffer);
78
+ buffer = buffer.slice(resolveQuadletCount(genus) * 4);
79
+ }
80
+ else if (start === "-") {
81
+ if (!Counter.peek(buffer).frame) {
82
+ break;
83
+ }
84
+ const counter = Counter.parse(buffer);
85
+ if ((genus.major === 1 && counter.code === CountCode_10.AttachmentGroup) ||
86
+ (genus.major === 2 && counter.code === CountCode_20.AttachmentGroup)) {
87
+ if (buffer.length < counter.code.length + counter.count * 4) {
88
+ // Not enough data to read the whole attachment group
89
+ break;
90
+ }
91
+ const reader = new AttachmentsReader(buffer, { version: genus.major });
92
+ attachments = reader.readAttachments();
93
+ if (!attachments) {
94
+ break;
95
+ }
96
+ buffer = buffer.slice(reader.bytesRead);
97
+ }
98
+ else {
99
+ const reader = new AttachmentsReader(buffer, { version: genus.major });
100
+ attachments = reader.readAttachments();
101
+ if (!attachments) {
102
+ break;
103
+ }
104
+ buffer = buffer.slice(reader.bytesRead);
105
+ }
106
+ }
107
+ else {
108
+ throw new Error(`Unexpected start byte: ${start}`);
109
+ }
110
+ }
111
+ }
112
+ if (message) {
113
+ yield new Message(message.body, attachments ?? undefined);
114
+ }
115
+ if (buffer.length > 0) {
116
+ throw new Error("Unexpected end of stream");
117
+ }
118
+ }
119
+ function resolveInput(input) {
120
+ if (typeof input === "string") {
121
+ return new ReadableStream({
122
+ start(controller) {
123
+ controller.enqueue(encodeUtf8(input));
124
+ controller.close();
125
+ },
126
+ });
127
+ }
128
+ if (input instanceof Uint8Array) {
129
+ return new ReadableStream({
130
+ start(controller) {
131
+ controller.enqueue(input);
132
+ controller.close();
133
+ },
134
+ });
135
+ }
136
+ return input;
137
+ }
138
+ //# 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,146 @@
1
+ import { decodeBase64Int, decodeUtf8, encodeBase64Int } from "../encoding/main.js";
2
+ const REGEX_VERSION_STRING_PROTOCOL = /^[A-Z]{4}$/;
3
+ const REGEX_VERSION_JSON = /^\{"v":"(.*?)".*$/;
4
+ const Kind = {
5
+ JSON: "JSON",
6
+ CBOR: "CBOR",
7
+ MSGPACK: "MGPK",
8
+ CESR: "CESR",
9
+ };
10
+ const KIND_VALUES = new Set(Object.values(Kind));
11
+ function encodeHexInt(value, length) {
12
+ if (value >= 16 ** length) {
13
+ throw new Error(`Value exceeds maximum for hex encoding. Expected value < ${16 ** length} for length ${length}, got ${value}`);
14
+ }
15
+ return value.toString(16).padStart(length, "0");
16
+ }
17
+ export class VersionString {
18
+ protocol;
19
+ major;
20
+ minor;
21
+ kind;
22
+ legacy;
23
+ size;
24
+ constructor(init) {
25
+ if (!REGEX_VERSION_STRING_PROTOCOL.test(init.protocol)) {
26
+ throw new Error(`Protocol must be 4 uppercase characters. Expected format: /^[A-Z]{4}$/, got "${init.protocol}"`);
27
+ }
28
+ const kind = init.kind ?? "JSON";
29
+ if (!KIND_VALUES.has(kind)) {
30
+ throw new Error(`Encoding kind must be one of ${Array.from(KIND_VALUES).join(", ")}, got "${kind}"`);
31
+ }
32
+ // TODO: Remove when other kinds are supported
33
+ if (kind !== "JSON") {
34
+ throw new Error(`Unsupported encoding kind "${kind}", only JSON format is supported for now`);
35
+ }
36
+ if (init.size !== undefined && init.size < 0) {
37
+ throw new Error(`Size must be non-negative. Expected size >= 0, got ${init.size}`);
38
+ }
39
+ this.protocol = init.protocol;
40
+ this.major = init.major ?? 1;
41
+ this.minor = init.minor ?? 0;
42
+ this.kind = kind;
43
+ this.legacy = init.legacy ?? true;
44
+ this.size = init.size ?? 0;
45
+ }
46
+ get text() {
47
+ return VersionString.encode(this);
48
+ }
49
+ /**
50
+ * Extrats and parses the version string from a message payload
51
+ * @param input
52
+ */
53
+ static extract(input) {
54
+ if (typeof input !== "string") {
55
+ input = decodeUtf8(input.slice(0, 24));
56
+ }
57
+ const match = input.match(REGEX_VERSION_JSON);
58
+ if (!match) {
59
+ const preview = typeof input === "string" ? input.slice(0, 50) : String(input).slice(0, 50);
60
+ throw new Error(`Unable to extract "v" field. Expected JSON object with "v" property at start (format: {"v":"..."}), got "${preview}${input.length > 50 ? "..." : ""}"`);
61
+ }
62
+ return VersionString.parse(match[1]);
63
+ }
64
+ /**
65
+ * Parses a version string into a {@link VersionString} object
66
+ *
67
+ * @param input The version string
68
+ * @returns The parsed {@link VersionString} object
69
+ */
70
+ static parse(input) {
71
+ if (input.endsWith(".") && input.length === 16) {
72
+ const protocol = input.slice(0, 4);
73
+ const major = decodeBase64Int(input.slice(4, 5));
74
+ const minor = decodeBase64Int(input.slice(5, 7));
75
+ const kind = input.slice(7, 11);
76
+ const size = decodeBase64Int(input.slice(12, 15));
77
+ return new VersionString({
78
+ protocol,
79
+ major,
80
+ minor,
81
+ legacy: false,
82
+ kind,
83
+ size,
84
+ });
85
+ }
86
+ if (input.endsWith("_") && input.length === 17) {
87
+ const protocol = input.slice(0, 4);
88
+ const major = parseInt(input.slice(4, 5), 16);
89
+ const minor = parseInt(input.slice(5, 6), 16);
90
+ const format = input.slice(6, 10);
91
+ const size = parseInt(input.slice(10, 16), 16);
92
+ return new VersionString({
93
+ protocol,
94
+ major,
95
+ minor,
96
+ kind: format,
97
+ size,
98
+ legacy: true,
99
+ });
100
+ }
101
+ throw new Error(`Invalid version string format. Expected 17-char legacy format (ending with "_") or 16-char modern format (ending with "."), got "${input}"`);
102
+ }
103
+ static encode(init) {
104
+ const protocol = init.protocol;
105
+ const major = init.major ?? 1;
106
+ const minor = init.minor ?? 0;
107
+ const format = init.kind ?? "JSON";
108
+ if (init.legacy) {
109
+ const version = `${encodeHexInt(major, 1)}${encodeHexInt(minor, 1)}`;
110
+ const size = encodeHexInt(init.size ?? 0, 6);
111
+ return `${protocol}${version}${format}${size}_`;
112
+ }
113
+ const version = `${encodeBase64Int(major, 1)}${encodeBase64Int(minor, 2)}`;
114
+ const size = encodeBase64Int(init.size ?? 0, 4);
115
+ return `${protocol}${version}${format}${size}.`;
116
+ }
117
+ static KERI_LEGACY = new VersionString({
118
+ protocol: "KERI",
119
+ major: 1,
120
+ minor: 0,
121
+ kind: "JSON",
122
+ legacy: true,
123
+ }).text;
124
+ static KERI = new VersionString({
125
+ protocol: "KERI",
126
+ major: 2,
127
+ minor: 0,
128
+ kind: "JSON",
129
+ legacy: false,
130
+ }).text;
131
+ static ACDC_LEGACY = new VersionString({
132
+ protocol: "ACDC",
133
+ major: 1,
134
+ minor: 0,
135
+ kind: "JSON",
136
+ legacy: true,
137
+ }).text;
138
+ static ACDC = new VersionString({
139
+ protocol: "ACDC",
140
+ major: 1,
141
+ minor: 0,
142
+ kind: "JSON",
143
+ legacy: false,
144
+ }).text;
145
+ }
146
+ //# 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 { encodeText, 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(encodeText),
63
+ }, { depth: 100, colors: true });
64
+ }
65
+ else {
66
+ console.log(JSON.stringify({
67
+ payload: message.body,
68
+ attachments: message.attachments.frames().map(encodeText),
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"}
@@ -1,24 +1,10 @@
1
- import { type CredentialBody, type Endpoint, type InceptEvent, type InteractEvent, type IssueEvent, type KeyEvent, KeyEventLog, type KeyState, Message, type RegistryInceptEvent, type ReplyEvent, type RevokeEvent, type RotateEvent } from "../core/main.ts";
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 Logger } from "../logging/main.ts";
3
+ import type { CredentialStorage, KeyEventStorage, MailboxStorage, PrivateKeyStorage } from "../storage/main.ts";
2
4
  import { type Encrypter } from "./encrypt.ts";
3
- export interface ControllerStorage {
4
- saveMessage(message: Message): void;
5
- saveKey(publicKey: string, digest: string, encryptedPrivKey: string): void;
6
- getKey(publicKey: string): string;
7
- getPublicKeyByDigest(digest: string): string;
8
- getReplies(filter?: {
9
- route?: string;
10
- eid?: string;
11
- cid?: string;
12
- }): Generator<Message<ReplyEvent>>;
13
- getKeyEvents(prefix: string): Generator<KeyEvent>;
14
- getCredentialEvents(id: string): Generator<Message<IssueEvent | RevokeEvent>>;
15
- getRegistry(id: string): Message<RegistryInceptEvent> | null;
16
- getRegistriesByOwner(owner: string): Generator<Message<RegistryInceptEvent>>;
17
- getCredential(id: string): CredentialBody | null;
18
- getCredentialsByRegistry(registryId: string): CredentialBody[];
19
- getMailboxOffset(prefix: string, topic: string): number;
20
- saveMailboxOffset(prefix: string, topic: string, offset: number): void;
21
- }
5
+ export type { CredentialStorage, KeyEventStorage, MailboxStorage, PrivateKeyStorage } from "../storage/main.ts";
6
+ export type { Encrypter } from "./encrypt.ts";
7
+ export type ControllerStorage = KeyEventStorage & PrivateKeyStorage & CredentialStorage & MailboxStorage;
22
8
  export interface ForwardArgs {
23
9
  sender: string;
24
10
  recipient: string;
@@ -30,29 +16,31 @@ export interface ControllerDeps {
30
16
  storage: ControllerStorage;
31
17
  encrypter?: Encrypter;
32
18
  passphrase?: string;
19
+ fetch?: typeof globalThis.fetch;
20
+ logger?: Logger;
33
21
  }
34
22
  export interface ReplyArgs {
35
23
  id: string;
36
24
  route: string;
37
25
  record: Record<string, unknown>;
38
26
  }
39
- export interface InceptArgs {
27
+ export interface ControllerInceptArgs {
40
28
  wits?: string[];
41
29
  toad?: number;
42
30
  }
43
31
  export interface InceptResult {
44
32
  id: string;
45
- event: InceptEvent;
33
+ event: InceptEventBody;
46
34
  }
47
35
  export interface AnchorResult {
48
36
  id: string;
49
- event: InteractEvent;
37
+ event: InteractEventBody;
50
38
  }
51
39
  export interface RotateResult {
52
40
  id: string;
53
- event: RotateEvent;
41
+ event: RotateEventBody;
54
42
  }
55
- export interface RotateArgs {
43
+ export interface ControllerRotateArgs {
56
44
  data?: Record<string, unknown>;
57
45
  }
58
46
  export interface AnchorArgs {
@@ -82,18 +70,18 @@ export declare class Controller {
82
70
  loadEventLog(id: string): Promise<KeyEventLog>;
83
71
  resolveEndpoint(aid: string, role?: string): Endpoint;
84
72
  sign(raw: Uint8Array, keys: string[]): Promise<string[]>;
85
- incept(args?: InceptArgs): Promise<InceptResult>;
73
+ incept(args?: ControllerInceptArgs): Promise<InceptResult>;
86
74
  processMessage(message: Message): Promise<void>;
87
75
  commit(log: KeyEventLog, event: KeyEvent): Promise<void>;
88
76
  anchor(id: string, anchor: AnchorArgs): Promise<AnchorResult>;
89
- rotate(id: string, args: RotateArgs): Promise<RotateResult>;
77
+ rotate(id: string, args: ControllerRotateArgs): Promise<RotateResult>;
90
78
  /**
91
79
  * Creates and stores a signed reply message and submits to all witnesses.
92
80
  */
93
81
  reply(args: ReplyArgs): Promise<void>;
94
82
  forward(args: ForwardArgs): Promise<void>;
95
- createRegistry(owner: string): Promise<RegistryInceptEvent>;
96
- listRegistries(owner: string): Promise<RegistryInceptEvent[]>;
83
+ createRegistry(owner: string): Promise<RegistryInceptEventBody>;
84
+ listRegistries(owner: string): Promise<RegistryInceptEventBody[]>;
97
85
  createCredential(args: CreateCredentialArgs): Promise<CredentialBody>;
98
86
  getCredential(id: string): Promise<CredentialBody | null>;
99
87
  listCredentials(registryId: string): Promise<CredentialBody[]>;