keri 0.0.0-dev.a3c1af3 → 0.0.0-dev.e85e1d1

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 (140) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/dist/cesr/__main__.d.ts +10 -0
  4. package/dist/cesr/__main__.js +11 -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 +273 -0
  11. package/dist/cesr/attachments-reader.js.map +1 -0
  12. package/dist/cesr/attachments.d.ts +68 -0
  13. package/dist/cesr/attachments.js +116 -0
  14. package/dist/cesr/attachments.js.map +1 -0
  15. package/dist/cesr/codec.d.ts +26 -0
  16. package/dist/cesr/codec.js +26 -0
  17. package/dist/cesr/codec.js.map +1 -0
  18. package/dist/cesr/codes.d.ts +1208 -0
  19. package/dist/cesr/codes.js +309 -0
  20. package/dist/cesr/codes.js.map +1 -0
  21. package/dist/cesr/counter.d.ts +117 -0
  22. package/dist/cesr/counter.js +93 -0
  23. package/dist/cesr/counter.js.map +1 -0
  24. package/dist/cesr/frame.d.ts +36 -0
  25. package/dist/cesr/frame.js +97 -0
  26. package/dist/cesr/frame.js.map +1 -0
  27. package/dist/cesr/genus.d.ts +21 -0
  28. package/dist/cesr/genus.js +66 -0
  29. package/dist/cesr/genus.js.map +1 -0
  30. package/dist/cesr/groups/generic-map.d.ts +11 -0
  31. package/dist/cesr/groups/generic-map.js +59 -0
  32. package/dist/cesr/groups/generic-map.js.map +1 -0
  33. package/dist/cesr/indexer.d.ts +70 -0
  34. package/dist/cesr/indexer.js +177 -0
  35. package/dist/cesr/indexer.js.map +1 -0
  36. package/dist/cesr/matter.d.ts +163 -0
  37. package/dist/cesr/matter.js +311 -0
  38. package/dist/cesr/matter.js.map +1 -0
  39. package/dist/cesr/message.d.ts +17 -0
  40. package/dist/cesr/message.js +81 -0
  41. package/dist/cesr/message.js.map +1 -0
  42. package/dist/cesr/parse.d.ts +37 -0
  43. package/dist/cesr/parse.js +137 -0
  44. package/dist/cesr/parse.js.map +1 -0
  45. package/dist/cesr/shifting.d.ts +7 -0
  46. package/dist/cesr/shifting.js +10 -0
  47. package/dist/cesr/shifting.js.map +1 -0
  48. package/dist/cesr/version-string.d.ts +35 -0
  49. package/dist/cesr/version-string.js +147 -0
  50. package/dist/cesr/version-string.js.map +1 -0
  51. package/dist/cli/cli.d.ts +5 -0
  52. package/dist/cli/cli.js +73 -0
  53. package/dist/cli/cli.js.map +1 -0
  54. package/dist/cli/input.d.ts +1 -0
  55. package/dist/cli/input.js +22 -0
  56. package/dist/cli/input.js.map +1 -0
  57. package/dist/cli/node-cli.d.ts +2 -0
  58. package/dist/cli/node-cli.js +19 -0
  59. package/dist/cli/node-cli.js.map +1 -0
  60. package/dist/controller/controller.d.ts +6 -4
  61. package/dist/controller/controller.js +8 -4
  62. package/dist/controller/controller.js.map +1 -1
  63. package/dist/core/credential-event.d.ts +1 -1
  64. package/dist/core/credential-event.js +1 -1
  65. package/dist/core/credential-event.js.map +1 -1
  66. package/dist/core/credential.d.ts +1 -1
  67. package/dist/core/credential.js +1 -1
  68. package/dist/core/credential.js.map +1 -1
  69. package/dist/core/digest.js +1 -1
  70. package/dist/core/digest.js.map +1 -1
  71. package/dist/core/endpoint-discovery.d.ts +1 -1
  72. package/dist/core/events.js +1 -1
  73. package/dist/core/events.js.map +1 -1
  74. package/dist/core/kawa.d.ts +2 -2
  75. package/dist/core/kawa.js +39 -30
  76. package/dist/core/kawa.js.map +1 -1
  77. package/dist/core/key-event-log.d.ts +1 -1
  78. package/dist/core/key-event-log.js +1 -1
  79. package/dist/core/key-event-log.js.map +1 -1
  80. package/dist/core/key-event.d.ts +1 -1
  81. package/dist/core/key-event.js +1 -1
  82. package/dist/core/key-event.js.map +1 -1
  83. package/dist/core/keys.js +1 -1
  84. package/dist/core/keys.js.map +1 -1
  85. package/dist/core/mailbox-client.d.ts +7 -1
  86. package/dist/core/mailbox-client.js +4 -2
  87. package/dist/core/mailbox-client.js.map +1 -1
  88. package/dist/core/main.d.ts +13 -8
  89. package/dist/core/main.js +1 -1
  90. package/dist/core/main.js.map +1 -1
  91. package/dist/core/receipt-event.d.ts +1 -1
  92. package/dist/core/receipt-event.js +1 -1
  93. package/dist/core/receipt-event.js.map +1 -1
  94. package/dist/core/registry-event.d.ts +1 -1
  95. package/dist/core/registry-event.js +1 -1
  96. package/dist/core/registry-event.js.map +1 -1
  97. package/dist/core/routed-event.d.ts +1 -1
  98. package/dist/core/routed-event.js +1 -1
  99. package/dist/core/routed-event.js.map +1 -1
  100. package/dist/core/said.js +1 -1
  101. package/dist/core/said.js.map +1 -1
  102. package/dist/core/sign.js +1 -1
  103. package/dist/core/sign.js.map +1 -1
  104. package/dist/core/verify.d.ts +1 -0
  105. package/dist/core/verify.js +1 -1
  106. package/dist/core/verify.js.map +1 -1
  107. package/dist/encoding/base64.d.ts +4 -0
  108. package/dist/encoding/base64.js +82 -0
  109. package/dist/encoding/base64.js.map +1 -0
  110. package/dist/encoding/utf8.d.ts +2 -0
  111. package/dist/encoding/utf8.js +9 -0
  112. package/dist/encoding/utf8.js.map +1 -0
  113. package/dist/main.d.ts +1 -0
  114. package/dist/main.js +1 -0
  115. package/dist/main.js.map +1 -1
  116. package/dist/witness/app.d.ts +9 -0
  117. package/dist/witness/app.js +91 -0
  118. package/dist/witness/app.js.map +1 -0
  119. package/dist/witness/env.d.ts +1 -0
  120. package/dist/witness/env.js +8 -0
  121. package/dist/witness/env.js.map +1 -0
  122. package/dist/witness/event-storage.d.ts +8 -0
  123. package/dist/witness/event-storage.js +2 -0
  124. package/dist/witness/event-storage.js.map +1 -0
  125. package/dist/witness/local.d.ts +1 -0
  126. package/dist/witness/local.js +48 -0
  127. package/dist/witness/local.js.map +1 -0
  128. package/dist/witness/main.d.ts +6 -0
  129. package/dist/witness/main.js +4 -0
  130. package/dist/witness/main.js.map +1 -0
  131. package/dist/witness/parser.d.ts +3 -0
  132. package/dist/witness/parser.js +7 -0
  133. package/dist/witness/parser.js.map +1 -0
  134. package/dist/witness/seed.d.ts +1 -0
  135. package/dist/witness/seed.js +5 -0
  136. package/dist/witness/seed.js.map +1 -0
  137. package/dist/witness/witness.d.ts +16 -0
  138. package/dist/witness/witness.js +59 -0
  139. package/dist/witness/witness.js.map +1 -0
  140. package/package.json +24 -16
@@ -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"}
@@ -1,5 +1,6 @@
1
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";
2
2
  import { type Encrypter } from "./encrypt.ts";
3
+ export type { Encrypter } from "./encrypt.ts";
3
4
  export interface ControllerStorage {
4
5
  saveMessage(message: Message): void;
5
6
  saveKey(publicKey: string, digest: string, encryptedPrivKey: string): void;
@@ -30,13 +31,14 @@ export interface ControllerDeps {
30
31
  storage: ControllerStorage;
31
32
  encrypter?: Encrypter;
32
33
  passphrase?: string;
34
+ fetch?: typeof globalThis.fetch;
33
35
  }
34
36
  export interface ReplyArgs {
35
37
  id: string;
36
38
  route: string;
37
39
  record: Record<string, unknown>;
38
40
  }
39
- export interface InceptArgs {
41
+ export interface ControllerInceptArgs {
40
42
  wits?: string[];
41
43
  toad?: number;
42
44
  }
@@ -52,7 +54,7 @@ export interface RotateResult {
52
54
  id: string;
53
55
  event: RotateEvent;
54
56
  }
55
- export interface RotateArgs {
57
+ export interface ControllerRotateArgs {
56
58
  data?: Record<string, unknown>;
57
59
  }
58
60
  export interface AnchorArgs {
@@ -82,11 +84,11 @@ export declare class Controller {
82
84
  loadEventLog(id: string): Promise<KeyEventLog>;
83
85
  resolveEndpoint(aid: string, role?: string): Endpoint;
84
86
  sign(raw: Uint8Array, keys: string[]): Promise<string[]>;
85
- incept(args?: InceptArgs): Promise<InceptResult>;
87
+ incept(args?: ControllerInceptArgs): Promise<InceptResult>;
86
88
  processMessage(message: Message): Promise<void>;
87
89
  commit(log: KeyEventLog, event: KeyEvent): Promise<void>;
88
90
  anchor(id: string, anchor: AnchorArgs): Promise<AnchorResult>;
89
- rotate(id: string, args: RotateArgs): Promise<RotateResult>;
91
+ rotate(id: string, args: ControllerRotateArgs): Promise<RotateResult>;
90
92
  /**
91
93
  * Creates and stores a signed reply message and submits to all witnesses.
92
94
  */
@@ -1,13 +1,15 @@
1
- import { cesr, Matter, parse } from "cesr";
2
- import { decodeBase64Url, encodeBase64Url } from "cesr/__unstable__";
1
+ import { cesr, Matter, parse } from "../cesr/__main__.js";
3
2
  import { Attachments, KeyEventLog, keri, MailboxClient, Message, resolveEndRole, resolveLocation, sign, submitToWitnesses, } from "../core/main.js";
3
+ import { decodeBase64Url, encodeBase64Url } from "../encoding/base64.js";
4
4
  import { PassphraseEncrypter } from "./encrypt.js";
5
5
  export class Controller {
6
6
  #storage;
7
7
  #encrypter;
8
+ #fetch;
8
9
  constructor(deps) {
9
10
  this.#storage = deps.storage;
10
11
  this.#encrypter = deps.encrypter ?? new PassphraseEncrypter(deps.passphrase ?? "default-passphrase");
12
+ this.#fetch = deps.fetch ?? globalThis.fetch;
11
13
  }
12
14
  async generateKey() {
13
15
  const key = keri.utils.generateKeyPair();
@@ -25,7 +27,7 @@ export class Controller {
25
27
  return sign(raw, { key: privateKey });
26
28
  }
27
29
  async introduce(oobi) {
28
- const response = await fetch(oobi);
30
+ const response = await this.#fetch(oobi);
29
31
  if (!response.ok) {
30
32
  throw new Error(`Failed to fetch oobi: ${response.status} ${response.statusText}`);
31
33
  }
@@ -137,7 +139,7 @@ export class Controller {
137
139
  const sigs = await this.sign(event.raw, signingKeys);
138
140
  event.attachments.ControllerIdxSigs.push(...sigs);
139
141
  const endpoints = await Promise.all(backers.map((wit) => this.resolveEndpoint(wit)));
140
- const wigs = await submitToWitnesses(event, endpoints);
142
+ const wigs = await submitToWitnesses(event, endpoints, this.#fetch);
141
143
  event.attachments.WitnessIdxSigs.push(...wigs);
142
144
  await this.processMessage(event);
143
145
  }
@@ -199,6 +201,7 @@ export class Controller {
199
201
  const client = new MailboxClient({
200
202
  id: endpoint.aid,
201
203
  url: endpoint.url,
204
+ fetch: this.#fetch,
202
205
  });
203
206
  const log = await this.loadEventLog(args.sender);
204
207
  const state = log.state;
@@ -259,6 +262,7 @@ export class Controller {
259
262
  const client = new MailboxClient({
260
263
  id: wit,
261
264
  url: endpoint.url,
265
+ fetch: this.#fetch,
262
266
  });
263
267
  await client.sendMessage(vcp);
264
268
  }