keri 0.0.0-dev.8b7f24e → 0.0.0-dev.98c7a4f
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.
- package/LICENSE +201 -0
- package/README.md +3 -0
- package/dist/cesr/array-utils.d.ts +3 -0
- package/dist/cesr/array-utils.js +29 -0
- package/dist/cesr/array-utils.js.map +1 -0
- package/dist/cesr/attachments-reader.d.ts +10 -0
- package/dist/cesr/attachments-reader.js +281 -0
- package/dist/cesr/attachments-reader.js.map +1 -0
- package/dist/cesr/attachments.d.ts +66 -0
- package/dist/cesr/attachments.js +108 -0
- package/dist/cesr/attachments.js.map +1 -0
- package/dist/cesr/codes.d.ts +1208 -0
- package/dist/cesr/codes.js +309 -0
- package/dist/cesr/codes.js.map +1 -0
- package/dist/cesr/counter.d.ts +114 -0
- package/dist/cesr/counter.js +78 -0
- package/dist/cesr/counter.js.map +1 -0
- package/dist/cesr/frame.d.ts +31 -0
- package/dist/cesr/frame.js +99 -0
- package/dist/cesr/frame.js.map +1 -0
- package/dist/cesr/genus.d.ts +18 -0
- package/dist/cesr/genus.js +57 -0
- package/dist/cesr/genus.js.map +1 -0
- package/dist/cesr/groups/generic-map.d.ts +11 -0
- package/dist/cesr/groups/generic-map.js +51 -0
- package/dist/cesr/groups/generic-map.js.map +1 -0
- package/dist/cesr/indexer.d.ts +68 -0
- package/dist/cesr/indexer.js +171 -0
- package/dist/cesr/indexer.js.map +1 -0
- package/dist/cesr/main.d.ts +9 -0
- package/dist/cesr/main.js +10 -0
- package/dist/cesr/main.js.map +1 -0
- package/dist/cesr/matter.d.ts +160 -0
- package/dist/cesr/matter.js +301 -0
- package/dist/cesr/matter.js.map +1 -0
- package/dist/cesr/message.d.ts +17 -0
- package/dist/cesr/message.js +81 -0
- package/dist/cesr/message.js.map +1 -0
- package/dist/cesr/parse.d.ts +37 -0
- package/dist/cesr/parse.js +138 -0
- package/dist/cesr/parse.js.map +1 -0
- package/dist/cesr/shifting.d.ts +7 -0
- package/dist/cesr/shifting.js +10 -0
- package/dist/cesr/shifting.js.map +1 -0
- package/dist/cesr/version-string.d.ts +35 -0
- package/dist/cesr/version-string.js +146 -0
- package/dist/cesr/version-string.js.map +1 -0
- package/dist/cli/cli.d.ts +5 -0
- package/dist/cli/cli.js +73 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/input.d.ts +1 -0
- package/dist/cli/input.js +22 -0
- package/dist/cli/input.js.map +1 -0
- package/dist/cli/node-cli.d.ts +2 -0
- package/dist/cli/node-cli.js +19 -0
- package/dist/cli/node-cli.js.map +1 -0
- package/dist/controller/controller.d.ts +17 -29
- package/dist/controller/controller.js +65 -9
- package/dist/controller/controller.js.map +1 -1
- package/dist/controller/main.d.ts +1 -0
- package/dist/controller/main.js +2 -0
- package/dist/controller/main.js.map +1 -0
- package/dist/core/credential-event.d.ts +5 -9
- package/dist/core/credential-event.js +1 -1
- package/dist/core/credential-event.js.map +1 -1
- package/dist/core/credential.d.ts +1 -1
- package/dist/core/credential.js +2 -2
- package/dist/core/credential.js.map +1 -1
- package/dist/core/digest.js +3 -3
- package/dist/core/digest.js.map +1 -1
- package/dist/core/endpoint-discovery.d.ts +4 -4
- package/dist/core/endpoint-discovery.js.map +1 -1
- package/dist/core/events.js +2 -2
- package/dist/core/events.js.map +1 -1
- package/dist/core/kawa.d.ts +2 -2
- package/dist/core/kawa.js +7 -38
- package/dist/core/kawa.js.map +1 -1
- package/dist/core/key-event-log.d.ts +12 -6
- package/dist/core/key-event-log.js +13 -12
- package/dist/core/key-event-log.js.map +1 -1
- package/dist/core/key-event.d.ts +8 -10
- package/dist/core/key-event.js +1 -2
- package/dist/core/key-event.js.map +1 -1
- package/dist/core/keys.d.ts +2 -1
- package/dist/core/keys.js +10 -10
- package/dist/core/keys.js.map +1 -1
- package/dist/core/mailbox-client.d.ts +7 -1
- package/dist/core/mailbox-client.js +37 -19
- package/dist/core/mailbox-client.js.map +1 -1
- package/dist/core/main.d.ts +27 -21
- package/dist/core/main.js +14 -13
- package/dist/core/main.js.map +1 -1
- package/dist/core/receipt-event.d.ts +2 -2
- package/dist/core/receipt-event.js +1 -1
- package/dist/core/receipt-event.js.map +1 -1
- package/dist/core/registry-event.d.ts +3 -5
- package/dist/core/registry-event.js +1 -1
- package/dist/core/registry-event.js.map +1 -1
- package/dist/core/routed-event.d.ts +7 -13
- package/dist/core/routed-event.js +2 -2
- package/dist/core/routed-event.js.map +1 -1
- package/dist/core/said.js +9 -6
- package/dist/core/said.js.map +1 -1
- package/dist/core/sign.js +3 -3
- package/dist/core/sign.js.map +1 -1
- package/dist/core/verify.d.ts +11 -2
- package/dist/core/verify.js +30 -11
- package/dist/core/verify.js.map +1 -1
- package/dist/core/witness-client.d.ts +8 -0
- package/dist/core/witness-client.js +39 -0
- package/dist/core/witness-client.js.map +1 -0
- package/dist/encoding/base64.d.ts +4 -0
- package/dist/encoding/base64.js +82 -0
- package/dist/encoding/base64.js.map +1 -0
- package/dist/encoding/main.d.ts +2 -0
- package/dist/encoding/main.js +3 -0
- package/dist/encoding/main.js.map +1 -0
- package/dist/encoding/utf8.d.ts +2 -0
- package/dist/encoding/utf8.js +9 -0
- package/dist/encoding/utf8.js.map +1 -0
- package/dist/logging/main.d.ts +15 -0
- package/dist/logging/main.js +25 -0
- package/dist/logging/main.js.map +1 -0
- package/dist/mailbox/mailbox-router.d.ts +6 -0
- package/dist/mailbox/mailbox-router.js +88 -0
- package/dist/mailbox/mailbox-router.js.map +1 -0
- package/dist/mailbox/mailbox.d.ts +27 -0
- package/dist/mailbox/mailbox.js +101 -0
- package/dist/mailbox/mailbox.js.map +1 -0
- package/dist/mailbox/main.d.ts +3 -0
- package/dist/mailbox/main.js +3 -0
- package/dist/mailbox/main.js.map +1 -0
- package/dist/main.d.ts +2 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/nodejs-utils/main.d.ts +2 -0
- package/dist/nodejs-utils/main.js +2 -0
- package/dist/nodejs-utils/main.js.map +1 -0
- package/dist/nodejs-utils/serve.d.ts +6 -0
- package/dist/nodejs-utils/serve.js +68 -0
- package/dist/nodejs-utils/serve.js.map +1 -0
- package/dist/{storage/sqlite/storage-sqlite.d.ts → sqlite-storage/main.d.ts} +10 -8
- package/dist/{storage/sqlite/storage-sqlite.js → sqlite-storage/main.js} +34 -10
- package/dist/sqlite-storage/main.js.map +1 -0
- package/dist/sqlite-storage/node-sqlite.js.map +1 -0
- package/dist/sqlite-storage/schema.js +67 -0
- package/dist/sqlite-storage/schema.js.map +1 -0
- package/dist/sqlite-storage/sqlite-database.js.map +1 -0
- package/dist/storage/credential-storage.d.ts +8 -0
- package/dist/storage/credential-storage.js +2 -0
- package/dist/storage/credential-storage.js.map +1 -0
- package/dist/storage/key-event-storage.d.ts +10 -0
- package/dist/storage/key-event-storage.js +2 -0
- package/dist/storage/key-event-storage.js.map +1 -0
- package/dist/storage/mailbox-server-storage.d.ts +9 -0
- package/dist/storage/mailbox-server-storage.js +2 -0
- package/dist/storage/mailbox-server-storage.js.map +1 -0
- package/dist/storage/mailbox-storage.d.ts +4 -0
- package/dist/storage/mailbox-storage.js +2 -0
- package/dist/storage/mailbox-storage.js.map +1 -0
- package/dist/storage/main.d.ts +5 -0
- package/dist/storage/main.js +2 -0
- package/dist/storage/main.js.map +1 -0
- package/dist/storage/private-key-storage.d.ts +5 -0
- package/dist/storage/private-key-storage.js +2 -0
- package/dist/storage/private-key-storage.js.map +1 -0
- package/dist/witness/main.d.ts +3 -0
- package/dist/witness/main.js +3 -0
- package/dist/witness/main.js.map +1 -0
- package/dist/witness/witness-router.d.ts +6 -0
- package/dist/witness/witness-router.js +120 -0
- package/dist/witness/witness-router.js.map +1 -0
- package/dist/witness/witness.d.ts +26 -0
- package/dist/witness/witness.js +156 -0
- package/dist/witness/witness.js.map +1 -0
- package/package.json +24 -20
- package/dist/storage/sqlite/node-sqlite.js.map +0 -1
- package/dist/storage/sqlite/schema.js +0 -49
- package/dist/storage/sqlite/schema.js.map +0 -1
- package/dist/storage/sqlite/sqlite-database.js.map +0 -1
- package/dist/storage/sqlite/storage-sqlite.js.map +0 -1
- /package/dist/{storage/sqlite → sqlite-storage}/node-sqlite.d.ts +0 -0
- /package/dist/{storage/sqlite → sqlite-storage}/node-sqlite.js +0 -0
- /package/dist/{storage/sqlite → sqlite-storage}/schema.d.ts +0 -0
- /package/dist/{storage/sqlite → sqlite-storage}/sqlite-database.d.ts +0 -0
- /package/dist/{storage/sqlite → sqlite-storage}/sqlite-database.js +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Message } from "cesr";
|
|
1
|
+
import { Message } from "../cesr/main.ts";
|
|
2
2
|
export interface QueryEventInit {
|
|
3
3
|
dt?: Date;
|
|
4
4
|
r?: string;
|
|
5
5
|
rr?: string;
|
|
6
6
|
q: Record<string, unknown>;
|
|
7
7
|
}
|
|
8
|
-
export type
|
|
8
|
+
export type QueryEventBody = {
|
|
9
9
|
v: string;
|
|
10
10
|
t: "qry";
|
|
11
11
|
d: string;
|
|
@@ -19,7 +19,7 @@ export interface ReplyEventInit {
|
|
|
19
19
|
r: string;
|
|
20
20
|
a: Record<string, unknown>;
|
|
21
21
|
}
|
|
22
|
-
export type
|
|
22
|
+
export type ReplyEventBody = {
|
|
23
23
|
v: string;
|
|
24
24
|
t: "rpy";
|
|
25
25
|
d: string;
|
|
@@ -35,12 +35,8 @@ export type RoutedEventBody = {
|
|
|
35
35
|
[key: string]: unknown;
|
|
36
36
|
};
|
|
37
37
|
export type RoutedEvent = Message<RoutedEventBody>;
|
|
38
|
-
export declare function query(args: QueryEventInit): Message<
|
|
39
|
-
|
|
40
|
-
}>;
|
|
41
|
-
export declare function reply(args: ReplyEventInit): Message<ReplyEvent & {
|
|
42
|
-
v: string;
|
|
43
|
-
}>;
|
|
38
|
+
export declare function query(args: QueryEventInit): Message<QueryEventBody>;
|
|
39
|
+
export declare function reply(args: ReplyEventInit): Message<ReplyEventBody>;
|
|
44
40
|
export interface ExchangeEventInit {
|
|
45
41
|
sender: string;
|
|
46
42
|
recipient?: string;
|
|
@@ -55,7 +51,7 @@ export interface ExchangeEmbedding {
|
|
|
55
51
|
d: string;
|
|
56
52
|
[key: string]: string | Record<string, unknown>;
|
|
57
53
|
}
|
|
58
|
-
export interface
|
|
54
|
+
export interface ExchangeEventBody extends Record<string, unknown> {
|
|
59
55
|
v: string;
|
|
60
56
|
t: "exn";
|
|
61
57
|
d: string;
|
|
@@ -68,6 +64,4 @@ export interface ExchangeEvent extends Record<string, unknown> {
|
|
|
68
64
|
a: Record<string, unknown>;
|
|
69
65
|
e: Record<string, string | Record<string, unknown>>;
|
|
70
66
|
}
|
|
71
|
-
export declare function exchange(args: ExchangeEventInit): Message<
|
|
72
|
-
v: string;
|
|
73
|
-
}>;
|
|
67
|
+
export declare function exchange(args: ExchangeEventInit): Message<ExchangeEventBody>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Attachments, Message } from "cesr";
|
|
1
|
+
import { Attachments, Message } from "../cesr/main.js";
|
|
2
2
|
import { DUMMY_VERSION, encodeEvent, formatDate } from "./events.js";
|
|
3
3
|
import { saidify } from "./said.js";
|
|
4
4
|
export function query(args) {
|
|
@@ -30,7 +30,7 @@ export function exchange(args) {
|
|
|
30
30
|
for (const [key, message] of Object.entries(args.embeds ?? {})) {
|
|
31
31
|
embeds[key] = message.body;
|
|
32
32
|
attachments.PathedMaterialCouples.push({
|
|
33
|
-
path:
|
|
33
|
+
path: `-${["e", key].join("-")}`,
|
|
34
34
|
attachments: message.attachments,
|
|
35
35
|
grouped: true,
|
|
36
36
|
});
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"routed-event.js","sourceRoot":"","sources":["../../src/core/routed-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACvD,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"}
|
package/dist/core/said.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { blake3 } from "@noble/hashes/blake3.js";
|
|
2
|
-
import {
|
|
2
|
+
import { encodeText, Matter } from "../cesr/main.js";
|
|
3
3
|
function calculateSaid(event) {
|
|
4
|
-
const digest =
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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;
|
|
9
12
|
}
|
|
10
13
|
export function saidify(event, labels) {
|
|
11
14
|
if (!labels?.length) {
|
package/dist/core/said.js.map
CHANGED
|
@@ -1 +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,
|
|
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,iBAAiB,CAAC;AAErD,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"}
|
package/dist/core/sign.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ed25519 } from "@noble/curves/ed25519.js";
|
|
2
|
-
import {
|
|
2
|
+
import { encodeText, Indexer, Matter } from "../cesr/main.js";
|
|
3
3
|
export function sign(payload, options) {
|
|
4
4
|
const signature = ed25519.sign(payload, options.key);
|
|
5
5
|
if (options.index !== undefined && options.index !== null) {
|
|
6
|
-
return Indexer.crypto.ed25519_sig(signature, options.index)
|
|
6
|
+
return encodeText(Indexer.crypto.ed25519_sig(signature, options.index));
|
|
7
7
|
}
|
|
8
|
-
return
|
|
8
|
+
return encodeText(Matter.crypto.ed25519_sig(signature));
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=sign.js.map
|
package/dist/core/sign.js.map
CHANGED
|
@@ -1 +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,
|
|
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,iBAAiB,CAAC;AAO9D,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"}
|
package/dist/core/verify.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Matter } from "../cesr/main.ts";
|
|
1
2
|
import { type Threshold } from "./threshold.ts";
|
|
2
3
|
export interface VerifyOptions {
|
|
3
4
|
threshold: Threshold;
|
|
@@ -6,9 +7,17 @@ export interface VerifyOptions {
|
|
|
6
7
|
}
|
|
7
8
|
export type VerifyResult = {
|
|
8
9
|
ok: true;
|
|
10
|
+
error?: null;
|
|
9
11
|
} | {
|
|
10
12
|
ok: false;
|
|
11
13
|
error: string;
|
|
12
14
|
};
|
|
13
|
-
export declare function
|
|
14
|
-
export declare function
|
|
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;
|
package/dist/core/verify.js
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import { ed25519 } from "@noble/curves/ed25519.js";
|
|
2
|
-
import { Indexer, Matter } from "cesr";
|
|
2
|
+
import { Indexer, Matter } from "../cesr/main.js";
|
|
3
3
|
import { parseThreshold } from "./threshold.js";
|
|
4
|
-
function verifySignature(payload, key, sig) {
|
|
4
|
+
export function verifySignature(payload, key, sig) {
|
|
5
5
|
switch (key.code) {
|
|
6
6
|
case Matter.Code.Ed25519:
|
|
7
7
|
case Matter.Code.Ed25519N:
|
|
8
|
-
|
|
9
|
-
// We can check the code of the signature,
|
|
10
|
-
// but it does not really matter since it will be verified correctly regardless.
|
|
11
|
-
// Anyway, revisit later
|
|
12
|
-
return ed25519.verify(sig.raw, payload, key.raw);
|
|
8
|
+
return ed25519.verify(sig, payload, key.raw);
|
|
13
9
|
default:
|
|
14
10
|
throw new Error(`Unsupported key code: ${key.code}`);
|
|
15
11
|
}
|
|
16
12
|
}
|
|
17
|
-
export function
|
|
13
|
+
export function verifyThreshold(payload, options) {
|
|
18
14
|
const keys = options.keys.map((key) => Matter.parse(key));
|
|
19
15
|
const sigs = options.sigs.map((sig) => Indexer.parse(sig));
|
|
20
16
|
const threshold = parseThreshold(options.threshold, options.keys.length);
|
|
@@ -24,7 +20,7 @@ export function verify(payload, options) {
|
|
|
24
20
|
if (!sig) {
|
|
25
21
|
continue;
|
|
26
22
|
}
|
|
27
|
-
if (!verifySignature(payload, keys[idx], sig)) {
|
|
23
|
+
if (!verifySignature(payload, keys[idx], sig.raw)) {
|
|
28
24
|
return { ok: false, error: `Invalid signature for key at index ${idx}` };
|
|
29
25
|
}
|
|
30
26
|
sum += threshold.weights[idx];
|
|
@@ -34,8 +30,31 @@ export function verify(payload, options) {
|
|
|
34
30
|
}
|
|
35
31
|
return { ok: true };
|
|
36
32
|
}
|
|
37
|
-
export function
|
|
38
|
-
const result =
|
|
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);
|
|
39
58
|
if (!result.ok) {
|
|
40
59
|
throw new Error(result.error);
|
|
41
60
|
}
|
package/dist/core/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/core/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/core/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AAkBhE,MAAM,UAAU,eAAe,CAAC,OAAmB,EAAE,GAAW,EAAE,GAAe;IAC/E,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ;YACvB,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAmB,EAAE,OAAsB;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEzE,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,GAAG,EAAE,EAAE,CAAC;QAC3E,CAAC;QAED,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,GAAG,yBAAyB,SAAS,CAAC,QAAQ,WAAW,EAAE,CAAC;IAC/G,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAmB,EAAE,OAAsB;IAChF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAmB,EAAE,OAAsB;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3D,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,GAAG,EAAE,EAAE,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAmB,EAAE,OAAsB;IACjF,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Message } from "../cesr/main.ts";
|
|
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 "../cesr/main.js";
|
|
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,iBAAiB,CAAC;AAG1E,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 @@
|
|
|
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 @@
|
|
|
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 "../logging/main.ts";
|
|
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>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Attachments, encodeText, parse } from "../cesr/main.js";
|
|
2
|
+
import { KeriLogger } from "../logging/main.js";
|
|
3
|
+
const RETRY_MS = 5000;
|
|
4
|
+
function createOobiResponse(events) {
|
|
5
|
+
const body = events
|
|
6
|
+
.flatMap(({ message }) => {
|
|
7
|
+
const atc = new Attachments({
|
|
8
|
+
ControllerIdxSigs: message.attachments.ControllerIdxSigs,
|
|
9
|
+
NonTransReceiptCouples: message.attachments.NonTransReceiptCouples,
|
|
10
|
+
});
|
|
11
|
+
return [new TextDecoder().decode(message.raw), encodeText(atc.frames())];
|
|
12
|
+
})
|
|
13
|
+
.join("");
|
|
14
|
+
return new Response(body, {
|
|
15
|
+
status: 200,
|
|
16
|
+
headers: { "Content-Type": "application/json+cesr" },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function encodeReply(reply) {
|
|
20
|
+
const atc = new Attachments({
|
|
21
|
+
ControllerIdxSigs: reply.message.attachments.ControllerIdxSigs,
|
|
22
|
+
WitnessIdxSigs: reply.message.attachments.WitnessIdxSigs,
|
|
23
|
+
NonTransReceiptCouples: reply.message.attachments.NonTransReceiptCouples,
|
|
24
|
+
TransIdxSigGroups: reply.message.attachments.TransIdxSigGroups,
|
|
25
|
+
PathedMaterialCouples: reply.message.attachments.PathedMaterialCouples,
|
|
26
|
+
});
|
|
27
|
+
const cesr = new TextDecoder().decode(reply.message.raw) + encodeText(atc.frames());
|
|
28
|
+
return `id: ${reply.id}\nevent: ${reply.topic}\nretry: ${RETRY_MS}\ndata: ${cesr}\n\n`;
|
|
29
|
+
}
|
|
30
|
+
function createResponse(replies) {
|
|
31
|
+
if (replies.length === 0) {
|
|
32
|
+
return new Response(null, { status: 204 });
|
|
33
|
+
}
|
|
34
|
+
const body = replies.map(encodeReply).join("");
|
|
35
|
+
return new Response(body, {
|
|
36
|
+
status: 200,
|
|
37
|
+
headers: { "Content-Type": "text/event-stream" },
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export function createRouter(mailbox, options = {}) {
|
|
41
|
+
const log = new KeriLogger(options.logger);
|
|
42
|
+
async function handleMessageRequest(request) {
|
|
43
|
+
const atc = request.headers.get("CESR-ATTACHMENT");
|
|
44
|
+
if (!atc) {
|
|
45
|
+
log.warn("rejecting POST /: missing CESR-ATTACHMENT");
|
|
46
|
+
return Response.json({ error: "Bad Request" }, { status: 400 });
|
|
47
|
+
}
|
|
48
|
+
const bodyText = await request.text();
|
|
49
|
+
const replies = [];
|
|
50
|
+
let count = 0;
|
|
51
|
+
for await (const event of parse(bodyText + atc)) {
|
|
52
|
+
count++;
|
|
53
|
+
for await (const reply of mailbox.handleMessage(event)) {
|
|
54
|
+
replies.push(reply);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
log.debug("POST /: handled messages", { count, replies: replies.length });
|
|
58
|
+
return createResponse(replies);
|
|
59
|
+
}
|
|
60
|
+
return async function handler(request) {
|
|
61
|
+
const { method } = request;
|
|
62
|
+
const pathname = new URL(request.url).pathname;
|
|
63
|
+
if (pathname === "/") {
|
|
64
|
+
switch (method) {
|
|
65
|
+
case "GET":
|
|
66
|
+
return Response.json({ status: "OK" });
|
|
67
|
+
case "POST":
|
|
68
|
+
return handleMessageRequest(request);
|
|
69
|
+
default:
|
|
70
|
+
return new Response("Method Not Allowed", { status: 405 });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (pathname.startsWith("/oobi")) {
|
|
74
|
+
switch (method) {
|
|
75
|
+
case "GET": {
|
|
76
|
+
log.debug("GET /oobi: serving self", { count: mailbox.events.length });
|
|
77
|
+
const response = createOobiResponse(mailbox.events);
|
|
78
|
+
response.headers.set("Keri-Aid", mailbox.aid);
|
|
79
|
+
return response;
|
|
80
|
+
}
|
|
81
|
+
default:
|
|
82
|
+
return new Response("Method Not Allowed", { status: 405 });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return new Response("Not Found", { status: 404 });
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=mailbox-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mailbox-router.js","sourceRoot":"","sources":["../../src/mailbox/mailbox-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Message } from "../cesr/main.ts";
|
|
2
|
+
import { KeyEventLog } from "../core/main.ts";
|
|
3
|
+
import { type Logger } from "../logging/main.ts";
|
|
4
|
+
import type { MailboxServerStorage } from "../storage/main.ts";
|
|
5
|
+
export interface MailboxOptions {
|
|
6
|
+
storage: MailboxServerStorage;
|
|
7
|
+
privateKey?: Uint8Array;
|
|
8
|
+
url?: string;
|
|
9
|
+
logger?: Logger;
|
|
10
|
+
}
|
|
11
|
+
export interface MailboxEvent {
|
|
12
|
+
readonly message: Message;
|
|
13
|
+
readonly timestamp: Date;
|
|
14
|
+
}
|
|
15
|
+
export interface MailboxReply {
|
|
16
|
+
readonly id: number;
|
|
17
|
+
readonly topic: string;
|
|
18
|
+
readonly message: Message;
|
|
19
|
+
}
|
|
20
|
+
export declare class Mailbox {
|
|
21
|
+
#private;
|
|
22
|
+
readonly events: readonly MailboxEvent[];
|
|
23
|
+
static createKEL(privateKey: Uint8Array): KeyEventLog;
|
|
24
|
+
get aid(): string;
|
|
25
|
+
constructor(options: MailboxOptions);
|
|
26
|
+
handleMessage(message: Message): AsyncGenerator<MailboxReply>;
|
|
27
|
+
}
|