keri 0.0.0-dev.0ddd65e → 0.0.0-dev.1238b11
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/__main__.d.ts +9 -0
- package/dist/cesr/__main__.js +10 -0
- package/dist/cesr/__main__.js.map +1 -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/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.js +19 -0
- package/dist/cli/node-cli.js.map +1 -0
- package/dist/controller/controller.d.ts +95 -0
- package/dist/controller/controller.js +549 -0
- package/dist/controller/controller.js.map +1 -0
- package/dist/controller/encrypt.d.ts +45 -0
- package/dist/controller/encrypt.js +120 -0
- package/dist/controller/encrypt.js.map +1 -0
- package/dist/core/credential-event.d.ts +54 -0
- package/dist/core/credential-event.js +28 -0
- package/dist/core/credential-event.js.map +1 -0
- package/dist/core/credential.d.ts +79 -0
- package/dist/core/credential.js +25 -0
- package/dist/core/credential.js.map +1 -0
- package/dist/core/digest.d.ts +1 -0
- package/dist/core/digest.js +7 -0
- package/dist/core/digest.js.map +1 -0
- package/dist/core/endpoint-discovery.d.ts +20 -0
- package/dist/core/endpoint-discovery.js +60 -0
- package/dist/core/endpoint-discovery.js.map +1 -0
- package/dist/core/events.d.ts +12 -0
- package/dist/core/events.js +25 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/kawa.d.ts +17 -0
- package/dist/core/kawa.js +48 -0
- package/dist/core/kawa.js.map +1 -0
- package/dist/core/key-event-log.d.ts +19 -0
- package/dist/core/key-event-log.js +155 -0
- package/dist/core/key-event-log.js.map +1 -0
- package/dist/core/key-event.d.ts +94 -0
- package/dist/core/key-event.js +88 -0
- package/dist/core/key-event.js.map +1 -0
- package/dist/core/keys.d.ts +10 -0
- package/dist/core/keys.js +17 -0
- package/dist/core/keys.js.map +1 -0
- package/dist/core/mailbox-client.d.ts +23 -0
- package/dist/core/mailbox-client.js +59 -0
- package/dist/core/mailbox-client.js.map +1 -0
- package/dist/core/main.d.ts +53 -0
- package/dist/core/main.js +45 -0
- package/dist/core/main.js.map +1 -0
- package/dist/core/receipt-event.d.ts +15 -0
- package/dist/core/receipt-event.js +13 -0
- package/dist/core/receipt-event.js.map +1 -0
- package/dist/core/registry-event.d.ts +26 -0
- package/dist/core/registry-event.js +18 -0
- package/dist/core/registry-event.js.map +1 -0
- package/dist/core/routed-event.d.ts +67 -0
- package/dist/core/routed-event.js +53 -0
- package/dist/core/routed-event.js.map +1 -0
- package/dist/core/said.d.ts +4 -0
- package/dist/core/said.js +29 -0
- package/dist/core/said.js.map +1 -0
- package/dist/core/sign.d.ts +5 -0
- package/dist/core/sign.js +10 -0
- package/dist/core/sign.js.map +1 -0
- package/dist/core/threshold.d.ts +6 -0
- package/dist/core/threshold.js +58 -0
- package/dist/core/threshold.js.map +1 -0
- package/dist/core/verify.d.ts +23 -0
- package/dist/core/verify.js +62 -0
- package/dist/core/verify.js.map +1 -0
- 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/main.d.ts +2 -2
- package/dist/main.js +3 -2
- package/dist/main.js.map +1 -0
- package/dist/nodejs-utils/serve.d.ts +5 -0
- package/dist/nodejs-utils/serve.js +77 -0
- package/dist/nodejs-utils/serve.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-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 +4 -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/storage/sqlite/node-sqlite.d.ts +12 -0
- package/dist/storage/sqlite/node-sqlite.js +25 -0
- package/dist/storage/sqlite/node-sqlite.js.map +1 -0
- package/dist/storage/sqlite/schema.d.ts +2 -0
- package/dist/storage/sqlite/schema.js +55 -0
- package/dist/storage/sqlite/schema.js.map +1 -0
- package/dist/storage/sqlite/sqlite-database.d.ts +13 -0
- package/dist/storage/sqlite/sqlite-database.js +2 -0
- package/dist/storage/sqlite/sqlite-database.js.map +1 -0
- package/dist/storage/sqlite/storage-sqlite.d.ts +29 -0
- package/dist/storage/sqlite/storage-sqlite.js +215 -0
- package/dist/storage/sqlite/storage-sqlite.js.map +1 -0
- package/dist/witness/main.d.ts +2 -0
- package/dist/witness/main.js +3 -0
- package/dist/witness/main.js.map +1 -0
- package/dist/witness/witness-router.d.ts +2 -0
- package/dist/witness/witness-router.js +103 -0
- package/dist/witness/witness-router.js.map +1 -0
- package/dist/witness/witness.d.ts +24 -0
- package/dist/witness/witness.js +139 -0
- package/dist/witness/witness.js.map +1 -0
- package/package.json +76 -26
- package/dist/cli/main.js +0 -72
- package/dist/data-type.d.ts +0 -9
- package/dist/data-type.js +0 -1
- package/dist/db/event-store.d.ts +0 -20
- package/dist/db/event-store.js +0 -1
- package/dist/db/sqlite-db.d.ts +0 -13
- package/dist/db/sqlite-db.js +0 -123
- package/dist/events/common.d.ts +0 -6
- package/dist/events/common.js +0 -1
- package/dist/events/incept.d.ts +0 -26
- package/dist/events/incept.js +0 -28
- package/dist/events/interact.d.ts +0 -17
- package/dist/events/interact.js +0 -21
- package/dist/events/main.d.ts +0 -4
- package/dist/events/main.js +0 -4
- package/dist/events/reply.d.ts +0 -15
- package/dist/events/reply.js +0 -20
- package/dist/keri/habitat.d.ts +0 -20
- package/dist/keri/habitat.js +0 -130
- package/dist/keri/keri.d.ts +0 -26
- package/dist/keri/keri.js +0 -43
- package/dist/keystore/encrypt.d.ts +0 -2
- package/dist/keystore/encrypt.js +0 -38
- package/dist/keystore/keystore-fs.d.ts +0 -13
- package/dist/keystore/keystore-fs.js +0 -50
- package/dist/keystore/keystore-web.d.ts +0 -12
- package/dist/keystore/keystore-web.js +0 -48
- package/dist/keystore/keystore.d.ts +0 -15
- package/dist/keystore/keystore.js +0 -1
- package/dist/main-common.d.ts +0 -9
- package/dist/main-common.js +0 -8
- package/dist/main-web.d.ts +0 -2
- package/dist/main-web.js +0 -2
- package/dist/parser/base64.d.ts +0 -6
- package/dist/parser/base64.js +0 -74
- package/dist/parser/buffered-reader.d.ts +0 -5
- package/dist/parser/buffered-reader.js +0 -47
- package/dist/parser/cesr-encoding.d.ts +0 -34
- package/dist/parser/cesr-encoding.js +0 -158
- package/dist/parser/codes.d.ts +0 -143
- package/dist/parser/codes.js +0 -266
- package/dist/parser/parser.d.ts +0 -16
- package/dist/parser/parser.js +0 -161
- package/dist/parser/version.d.ts +0 -11
- package/dist/parser/version.js +0 -56
- /package/dist/cli/{main.d.ts → node-cli.d.ts} +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { ed25519 } from "@noble/curves/ed25519.js";
|
|
2
|
+
import { Attachments, encodeText, Indexer, Matter, Message } from "#keri/cesr";
|
|
3
|
+
import { KeyEventLog, keri } from "#keri/core";
|
|
4
|
+
export class WitnessError extends Error {
|
|
5
|
+
}
|
|
6
|
+
export class Witness {
|
|
7
|
+
events;
|
|
8
|
+
#storage;
|
|
9
|
+
#privateKey;
|
|
10
|
+
#kel;
|
|
11
|
+
get aid() {
|
|
12
|
+
return this.#kel.state.identifier;
|
|
13
|
+
}
|
|
14
|
+
static createKEL(privateKey) {
|
|
15
|
+
const publicKey = encodeText(new Matter({ code: Matter.Code.Ed25519N, raw: ed25519.getPublicKey(privateKey) }));
|
|
16
|
+
const icp = keri.incept({
|
|
17
|
+
signingKeys: [publicKey],
|
|
18
|
+
nextKeys: [],
|
|
19
|
+
});
|
|
20
|
+
icp.attachments = {
|
|
21
|
+
ControllerIdxSigs: [encodeText(Indexer.crypto.ed25519_sig(ed25519.sign(icp.raw, privateKey), 0))],
|
|
22
|
+
};
|
|
23
|
+
return KeyEventLog.from([icp]);
|
|
24
|
+
}
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this.#storage = options.storage;
|
|
27
|
+
this.#privateKey = options.privateKey ?? ed25519.utils.randomSecretKey();
|
|
28
|
+
this.#kel = Witness.createKEL(this.#privateKey);
|
|
29
|
+
const events = [{ message: this.#kel.events[0], timestamp: new Date() }];
|
|
30
|
+
if (options.url) {
|
|
31
|
+
const url = new URL(options.url);
|
|
32
|
+
const scheme = url.protocol.replace(":", "");
|
|
33
|
+
const location = keri.reply({
|
|
34
|
+
r: "/loc/scheme",
|
|
35
|
+
a: {
|
|
36
|
+
eid: this.aid,
|
|
37
|
+
scheme: scheme,
|
|
38
|
+
url: options.url,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
const endrole = keri.reply({
|
|
42
|
+
r: "/end/role/add",
|
|
43
|
+
a: {
|
|
44
|
+
cid: this.aid,
|
|
45
|
+
role: "controller",
|
|
46
|
+
eid: this.aid,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
location.attachments = {
|
|
50
|
+
NonTransReceiptCouples: [{ prefix: this.#kel.state.identifier, sig: this.#sign(location) }],
|
|
51
|
+
};
|
|
52
|
+
endrole.attachments = {
|
|
53
|
+
NonTransReceiptCouples: [{ prefix: this.#kel.state.identifier, sig: this.#sign(endrole) }],
|
|
54
|
+
};
|
|
55
|
+
events.push({ message: location, timestamp: new Date() });
|
|
56
|
+
events.push({ message: endrole, timestamp: new Date() });
|
|
57
|
+
}
|
|
58
|
+
this.events = events;
|
|
59
|
+
}
|
|
60
|
+
receipt(message) {
|
|
61
|
+
const body = message.body;
|
|
62
|
+
if (typeof body.i !== "string" || typeof body.d !== "string" || typeof body.s !== "string") {
|
|
63
|
+
throw new WitnessError("Missing required fields i, d, s");
|
|
64
|
+
}
|
|
65
|
+
if (message.attachments.ControllerIdxSigs.length === 0) {
|
|
66
|
+
throw new WitnessError("Missing controller signatures");
|
|
67
|
+
}
|
|
68
|
+
let kel = KeyEventLog.from(this.#storage.getKeyEvents(body.i));
|
|
69
|
+
try {
|
|
70
|
+
kel = kel.append(message, { allowPartiallyWitnessed: true });
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (error instanceof Error) {
|
|
74
|
+
throw new WitnessError(`Failed to append message to KEL: ${error.message}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const sig = this.#sign(message);
|
|
78
|
+
const witnessIndex = kel.state.backers.indexOf(this.aid);
|
|
79
|
+
const receipt = keri.receipt({ d: message.body.d, i: message.body.i, s: message.body.s });
|
|
80
|
+
receipt.attachments = {
|
|
81
|
+
NonTransReceiptCouples: [{ prefix: this.#kel.state.identifier, sig }],
|
|
82
|
+
};
|
|
83
|
+
const WitnessIdxSigs = witnessIndex >= 0 ? [encodeText(Indexer.convert(Matter.parse(sig), witnessIndex))] : [];
|
|
84
|
+
const storedMessage = new Message(message.body, {
|
|
85
|
+
ControllerIdxSigs: message.attachments.ControllerIdxSigs,
|
|
86
|
+
WitnessIdxSigs,
|
|
87
|
+
FirstSeenReplayCouples: [{ fnu: body.s, dt: new Date() }],
|
|
88
|
+
});
|
|
89
|
+
this.#storage.saveMessage(storedMessage);
|
|
90
|
+
return receipt;
|
|
91
|
+
}
|
|
92
|
+
handleMessage(message) {
|
|
93
|
+
const body = message.body;
|
|
94
|
+
if (body.t !== "rct") {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (typeof body.i !== "string" || typeof body.d !== "string") {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const kel = KeyEventLog.from(this.#storage.getKeyEvents(body.i), {
|
|
101
|
+
// TODO: This should only be for the event that is this receit
|
|
102
|
+
allowPartiallyWitnessed: true,
|
|
103
|
+
});
|
|
104
|
+
if (!kel.state.backers.includes(this.aid)) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const storedEvent = kel.events.find((event) => event.body.d === body.d);
|
|
108
|
+
if (!storedEvent) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const existingWigsByIndex = new Map();
|
|
112
|
+
for (const sig of storedEvent.attachments.WitnessIdxSigs) {
|
|
113
|
+
const indexer = Indexer.parse(sig);
|
|
114
|
+
existingWigsByIndex.set(indexer.index, sig);
|
|
115
|
+
}
|
|
116
|
+
for (const couple of message.attachments.NonTransReceiptCouples) {
|
|
117
|
+
const witnessIndex = kel.state.backers.indexOf(couple.prefix);
|
|
118
|
+
if (witnessIndex === -1) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const wigSig = encodeText(Indexer.convert(Matter.parse(couple.sig), witnessIndex));
|
|
122
|
+
existingWigsByIndex.set(witnessIndex, wigSig);
|
|
123
|
+
}
|
|
124
|
+
const mergedAttachments = new Attachments({
|
|
125
|
+
ControllerIdxSigs: storedEvent.attachments.ControllerIdxSigs,
|
|
126
|
+
WitnessIdxSigs: Array.from(existingWigsByIndex.values()),
|
|
127
|
+
FirstSeenReplayCouples: storedEvent.attachments.FirstSeenReplayCouples,
|
|
128
|
+
});
|
|
129
|
+
this.#storage.saveMessage(new Message(storedEvent.body, mergedAttachments));
|
|
130
|
+
}
|
|
131
|
+
*getKeyEvents(aid) {
|
|
132
|
+
yield* this.#storage.getKeyEvents(aid);
|
|
133
|
+
}
|
|
134
|
+
#sign(message) {
|
|
135
|
+
const rawSignature = ed25519.sign(message.raw, this.#privateKey);
|
|
136
|
+
return encodeText(new Matter({ code: Matter.Code.Ed25519_Sig, raw: rawSignature }));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=witness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"witness.js","sourceRoot":"","sources":["../../src/witness/witness.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,45 +1,95 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "keri",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.1238b11",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+https://github.com/lenkan/keri-js.git"
|
|
7
|
+
},
|
|
4
8
|
"scripts": {
|
|
5
|
-
"lint": "eslint && prettier --check . && tsc --noEmit",
|
|
6
|
-
"lint:fix": "eslint --fix && prettier --write .",
|
|
7
9
|
"build": "tsc -p tsconfig.build.json",
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
11
|
+
"test": "node --test --conditions source --no-warnings 'src/**/*.test.ts'",
|
|
12
|
+
"test:interop": "node --test --conditions source --test-concurrency=1 --no-warnings 'test_interop/test_*.ts'",
|
|
13
|
+
"test:vector": "node --test --conditions source --no-warnings 'test_vectors/**/*.test.ts'",
|
|
14
|
+
"lint": "biome check .",
|
|
15
|
+
"lint:fix": "biome check --write .",
|
|
16
|
+
"check": "tsc --noEmit",
|
|
17
|
+
"clean": "node scripts/clean.ts",
|
|
18
|
+
"format": "biome format --write .",
|
|
19
|
+
"docs:build": "typedoc",
|
|
20
|
+
"docs:serve": "concurrently \"serve docs\" \"typedoc --watch --preserveWatchOutput\""
|
|
10
21
|
},
|
|
11
|
-
"
|
|
12
|
-
"keri":
|
|
22
|
+
"imports": {
|
|
23
|
+
"#keri": {
|
|
24
|
+
"source": "./src/main.ts",
|
|
25
|
+
"default": "./dist/main.js"
|
|
26
|
+
},
|
|
27
|
+
"#keri/encoding": {
|
|
28
|
+
"source": "./src/encoding/main.ts",
|
|
29
|
+
"default": "./dist/encoding/main.js"
|
|
30
|
+
},
|
|
31
|
+
"#keri/cesr": {
|
|
32
|
+
"source": "./src/cesr/__main__.ts",
|
|
33
|
+
"default": "./dist/cesr/__main__.js"
|
|
34
|
+
},
|
|
35
|
+
"#keri/core": {
|
|
36
|
+
"source": "./src/core/main.ts",
|
|
37
|
+
"default": "./dist/core/main.js"
|
|
38
|
+
},
|
|
39
|
+
"#keri/storage": {
|
|
40
|
+
"source": "./src/storage/main.ts",
|
|
41
|
+
"default": "./dist/storage/main.js"
|
|
42
|
+
},
|
|
43
|
+
"#keri/storage/sqlite": {
|
|
44
|
+
"source": "./src/storage/sqlite/storage-sqlite.ts",
|
|
45
|
+
"default": "./dist/storage/sqlite/storage-sqlite.js"
|
|
46
|
+
},
|
|
47
|
+
"#keri/witness": {
|
|
48
|
+
"source": "./src/witness/main.ts",
|
|
49
|
+
"default": "./dist/witness/main.js"
|
|
50
|
+
},
|
|
51
|
+
"#keri/nodejs-utils": {
|
|
52
|
+
"source": "./src/nodejs-utils/serve.ts",
|
|
53
|
+
"default": "./dist/nodejs-utils/serve.js"
|
|
54
|
+
}
|
|
13
55
|
},
|
|
14
56
|
"exports": {
|
|
15
57
|
".": "./dist/main.js",
|
|
16
|
-
"./
|
|
58
|
+
"./sqlite-storage": "./dist/storage/sqlite/storage-sqlite.js",
|
|
59
|
+
"./witness": "./dist/witness/main.js",
|
|
60
|
+
"./nodejs-utils": "./dist/nodejs-utils/serve.js"
|
|
17
61
|
},
|
|
18
62
|
"files": [
|
|
19
63
|
"dist"
|
|
20
64
|
],
|
|
21
65
|
"type": "module",
|
|
22
|
-
"author": "",
|
|
23
|
-
"license": "
|
|
24
|
-
"description": "",
|
|
66
|
+
"author": "Daniel Lenksjö",
|
|
67
|
+
"license": "Apache-2.0",
|
|
68
|
+
"description": "KERI for JavaScript",
|
|
69
|
+
"devEngines": {
|
|
70
|
+
"runtime": {
|
|
71
|
+
"name": "node",
|
|
72
|
+
"version": ">=24",
|
|
73
|
+
"onFail": "warn"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
25
76
|
"engines": {
|
|
26
77
|
"node": ">=22"
|
|
27
78
|
},
|
|
28
|
-
"devDependencies": {
|
|
29
|
-
"@eslint/js": "^9.17.0",
|
|
30
|
-
"@types/node": "^22.9.1",
|
|
31
|
-
"commander": "^12.1.0",
|
|
32
|
-
"eslint": "^9.17.0",
|
|
33
|
-
"eslint-config-prettier": "^9.1.0",
|
|
34
|
-
"globals": "^15.12.0",
|
|
35
|
-
"prettier": "^3.3.3",
|
|
36
|
-
"typescript": "^5.7.3",
|
|
37
|
-
"typescript-eslint": "^8.19.0"
|
|
38
|
-
},
|
|
39
79
|
"dependencies": {
|
|
40
|
-
"@noble/curves": "^
|
|
41
|
-
"@noble/ed25519": "^
|
|
42
|
-
"@noble/hashes": "^
|
|
43
|
-
"@noble/secp256k1": "^
|
|
80
|
+
"@noble/curves": "^2.0.0",
|
|
81
|
+
"@noble/ed25519": "^3.0.0",
|
|
82
|
+
"@noble/hashes": "^2.0.0",
|
|
83
|
+
"@noble/secp256k1": "^3.0.0"
|
|
84
|
+
},
|
|
85
|
+
"devDependencies": {
|
|
86
|
+
"@biomejs/biome": "^2.4.9",
|
|
87
|
+
"@types/debug": "^4.1.13",
|
|
88
|
+
"@types/node": "^22.15.30",
|
|
89
|
+
"concurrently": "^9.2.1",
|
|
90
|
+
"debug": "^4.4.3",
|
|
91
|
+
"serve": "^14.2.5",
|
|
92
|
+
"typedoc": "^0.28.14",
|
|
93
|
+
"typescript": "^6.0.2"
|
|
44
94
|
}
|
|
45
95
|
}
|
package/dist/cli/main.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { program } from "commander";
|
|
3
|
-
import { parse } from "../parser/parser.js";
|
|
4
|
-
import { FileSystemKeyStore } from "../keystore/keystore-fs.js";
|
|
5
|
-
import { SqliteEventStore } from "../db/sqlite-db.js";
|
|
6
|
-
import { Habitat } from "../keri/habitat.js";
|
|
7
|
-
const db = new SqliteEventStore({ filename: ".keri/db.sqlite" });
|
|
8
|
-
db.init();
|
|
9
|
-
program.command("parse").action(async () => {
|
|
10
|
-
const stream = process.stdin;
|
|
11
|
-
for await (const event of parse(ReadableStream.from(stream))) {
|
|
12
|
-
console.log(event);
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
program
|
|
16
|
-
.command("keygen")
|
|
17
|
-
.requiredOption("--passcode <passcode>")
|
|
18
|
-
.action(async ({ passcode }) => {
|
|
19
|
-
const keystore = new FileSystemKeyStore({ dir: ".keri/keys", passphrase: passcode });
|
|
20
|
-
await keystore.incept();
|
|
21
|
-
});
|
|
22
|
-
program.command("resolve <oobi>").action(async (oobi) => {
|
|
23
|
-
const response = await fetch(oobi);
|
|
24
|
-
if (!response.ok) {
|
|
25
|
-
throw new Error(`Failed to fetch oobi: ${response.status} ${response.statusText}`);
|
|
26
|
-
}
|
|
27
|
-
if (!response.body) {
|
|
28
|
-
throw new Error(`No body in response`);
|
|
29
|
-
}
|
|
30
|
-
for await (const event of parse(response.body)) {
|
|
31
|
-
db.saveEvent(event.payload);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
program
|
|
35
|
-
.command("incept")
|
|
36
|
-
.requiredOption("--passcode <passcode>")
|
|
37
|
-
.option("--wit <wit>")
|
|
38
|
-
.action(async ({ passcode, wit }) => {
|
|
39
|
-
if (typeof passcode !== "string") {
|
|
40
|
-
throw new Error(`Invalid passcode`);
|
|
41
|
-
}
|
|
42
|
-
const keystore = new FileSystemKeyStore({ dir: ".keri/keys", passphrase: passcode });
|
|
43
|
-
const hab = new Habitat({ db, keystore });
|
|
44
|
-
const wits = [];
|
|
45
|
-
if (typeof wit === "string") {
|
|
46
|
-
wits.push(wit);
|
|
47
|
-
}
|
|
48
|
-
const result = await hab.create({ wits });
|
|
49
|
-
console.dir(result);
|
|
50
|
-
});
|
|
51
|
-
program
|
|
52
|
-
.command("interact")
|
|
53
|
-
.requiredOption("--passcode <passcode>")
|
|
54
|
-
.requiredOption("--aid <aid>")
|
|
55
|
-
.action(async ({ passcode, aid }) => {
|
|
56
|
-
if (typeof passcode !== "string") {
|
|
57
|
-
throw new Error(`Invalid passcode`);
|
|
58
|
-
}
|
|
59
|
-
if (typeof aid !== "string") {
|
|
60
|
-
throw new Error(`Invalid aid`);
|
|
61
|
-
}
|
|
62
|
-
const keystore = new FileSystemKeyStore({ dir: ".keri/keys", passphrase: passcode });
|
|
63
|
-
const hab = new Habitat({ db, keystore });
|
|
64
|
-
const payload = await hab.interact(aid);
|
|
65
|
-
console.dir(payload);
|
|
66
|
-
});
|
|
67
|
-
program.command("export").action(async () => {
|
|
68
|
-
for (const event of await db.list()) {
|
|
69
|
-
console.log(event);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
program.parse(process.argv);
|
package/dist/data-type.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export type DataValue = string | number | boolean | DataObject | DataArray;
|
|
2
|
-
export type DataArray = DataValue[];
|
|
3
|
-
/**
|
|
4
|
-
* Defines a data object that can be serialized to JSON.
|
|
5
|
-
* E.g. key events and acdc objects
|
|
6
|
-
*/
|
|
7
|
-
export interface DataObject {
|
|
8
|
-
[x: string]: DataValue;
|
|
9
|
-
}
|
package/dist/data-type.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/db/event-store.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { KeyEvent } from "../events/main.ts";
|
|
2
|
-
export interface KeyEventMessage<T extends KeyEvent = KeyEvent> {
|
|
3
|
-
event: T;
|
|
4
|
-
attachments: KeyEventAttachment[];
|
|
5
|
-
}
|
|
6
|
-
export interface ListArgs {
|
|
7
|
-
i?: string;
|
|
8
|
-
d?: string;
|
|
9
|
-
t?: string;
|
|
10
|
-
r?: string;
|
|
11
|
-
}
|
|
12
|
-
export interface KeyEventAttachment {
|
|
13
|
-
code: string;
|
|
14
|
-
value: string;
|
|
15
|
-
}
|
|
16
|
-
export interface EventStore {
|
|
17
|
-
list(args?: ListArgs): Promise<KeyEventMessage[]>;
|
|
18
|
-
saveEvent(event: KeyEvent): Promise<void>;
|
|
19
|
-
saveAttachment(eventId: string, attachment: KeyEventAttachment): Promise<void>;
|
|
20
|
-
}
|
package/dist/db/event-store.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/db/sqlite-db.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { KeyEvent } from "../events/main.ts";
|
|
2
|
-
import type { EventStore, KeyEventAttachment, KeyEventMessage, ListArgs } from "./event-store.ts";
|
|
3
|
-
export interface SqliteEventStoreOptions {
|
|
4
|
-
filename?: string;
|
|
5
|
-
}
|
|
6
|
-
export declare class SqliteEventStore implements EventStore {
|
|
7
|
-
#private;
|
|
8
|
-
constructor(options?: SqliteEventStoreOptions);
|
|
9
|
-
init(): void;
|
|
10
|
-
saveEvent(event: KeyEvent): Promise<void>;
|
|
11
|
-
saveAttachment(id: string, attachment: KeyEventAttachment): Promise<void>;
|
|
12
|
-
list(args?: ListArgs): Promise<KeyEventMessage[]>;
|
|
13
|
-
}
|
package/dist/db/sqlite-db.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _SqliteEventStore_db;
|
|
13
|
-
import { DatabaseSync } from "node:sqlite";
|
|
14
|
-
import { existsSync, mkdirSync } from "node:fs";
|
|
15
|
-
import { dirname } from "node:path";
|
|
16
|
-
function parseRow(row) {
|
|
17
|
-
if (!row || typeof row !== "object") {
|
|
18
|
-
throw new Error(`Row not found`);
|
|
19
|
-
}
|
|
20
|
-
const data = "event_data" in row && row["event_data"];
|
|
21
|
-
if (!data || typeof data !== "string") {
|
|
22
|
-
throw new Error(`Unexpected row format`);
|
|
23
|
-
}
|
|
24
|
-
if ("attachments" in row && typeof row["attachments"] !== "string") {
|
|
25
|
-
throw new Error(`Unexpected row format`);
|
|
26
|
-
}
|
|
27
|
-
const attachments = JSON.parse(row["attachments"] || "[]");
|
|
28
|
-
if (!Array.isArray(attachments)) {
|
|
29
|
-
throw new Error(`Unexpected row format`);
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
32
|
-
event: JSON.parse(data),
|
|
33
|
-
attachments: attachments.filter((att) => att.code && att.value),
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
function ensureDirSync(filename) {
|
|
37
|
-
const dir = dirname(filename);
|
|
38
|
-
if (!existsSync(dir)) {
|
|
39
|
-
mkdirSync(dir);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export class SqliteEventStore {
|
|
43
|
-
constructor(options = {}) {
|
|
44
|
-
_SqliteEventStore_db.set(this, void 0);
|
|
45
|
-
if (options.filename) {
|
|
46
|
-
ensureDirSync(options.filename);
|
|
47
|
-
}
|
|
48
|
-
__classPrivateFieldSet(this, _SqliteEventStore_db, new DatabaseSync(options.filename ?? ":memory:"), "f");
|
|
49
|
-
}
|
|
50
|
-
init() {
|
|
51
|
-
__classPrivateFieldGet(this, _SqliteEventStore_db, "f").exec(`
|
|
52
|
-
CREATE TABLE IF NOT EXISTS events (
|
|
53
|
-
event_id TEXT PRIMARY KEY,
|
|
54
|
-
event_data JSON NOT NULL
|
|
55
|
-
);
|
|
56
|
-
`);
|
|
57
|
-
__classPrivateFieldGet(this, _SqliteEventStore_db, "f").exec(`
|
|
58
|
-
CREATE TABLE IF NOT EXISTS attachments (
|
|
59
|
-
event_id TEXT NOT NULL,
|
|
60
|
-
attachment_code TEXT NOT NULL,
|
|
61
|
-
attachment_value TEXT NOT NULL,
|
|
62
|
-
FOREIGN KEY(event_id) REFERENCES events(event_id)
|
|
63
|
-
PRIMARY KEY(event_id, attachment_code, attachment_value)
|
|
64
|
-
);
|
|
65
|
-
`);
|
|
66
|
-
}
|
|
67
|
-
async saveEvent(event) {
|
|
68
|
-
const sql = `
|
|
69
|
-
INSERT INTO events (event_id, event_data)
|
|
70
|
-
VALUES ($id, $data) ON CONFLICT(event_id) DO NOTHING;
|
|
71
|
-
`;
|
|
72
|
-
__classPrivateFieldGet(this, _SqliteEventStore_db, "f").prepare(sql).run({
|
|
73
|
-
id: event.d,
|
|
74
|
-
data: JSON.stringify(event),
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
async saveAttachment(id, attachment) {
|
|
78
|
-
const sql = `
|
|
79
|
-
INSERT INTO attachments (event_id, attachment_code, attachment_value)
|
|
80
|
-
VALUES ($id, $group, $data)
|
|
81
|
-
ON CONFLICT(event_id, attachment_code, attachment_value) DO NOTHING;
|
|
82
|
-
`;
|
|
83
|
-
__classPrivateFieldGet(this, _SqliteEventStore_db, "f").prepare(sql).run({
|
|
84
|
-
id: id,
|
|
85
|
-
group: attachment.code,
|
|
86
|
-
data: attachment.value,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
async list(args = {}) {
|
|
90
|
-
const filter = [];
|
|
91
|
-
const params = {};
|
|
92
|
-
if (args.i) {
|
|
93
|
-
filter.push("json_extract(event_data, '$.i') = $i");
|
|
94
|
-
params["i"] = args.i;
|
|
95
|
-
}
|
|
96
|
-
if (args.d) {
|
|
97
|
-
filter.push("json_extract(event_data, '$.d') = $d");
|
|
98
|
-
params["d"] = args.d;
|
|
99
|
-
}
|
|
100
|
-
if (args.t) {
|
|
101
|
-
filter.push("json_extract(event_data, '$.t') = $t");
|
|
102
|
-
params["t"] = args.t;
|
|
103
|
-
}
|
|
104
|
-
if (args.r) {
|
|
105
|
-
filter.push("json_extract(event_data, '$.r') = $r");
|
|
106
|
-
params["r"] = args.r;
|
|
107
|
-
}
|
|
108
|
-
const sql = `
|
|
109
|
-
SELECT
|
|
110
|
-
event_data,
|
|
111
|
-
json_group_array(json_object('code', attachment_code, 'value', attachment_value)) as attachments
|
|
112
|
-
FROM
|
|
113
|
-
events
|
|
114
|
-
LEFT JOIN attachments ON events.event_id = attachments.event_id
|
|
115
|
-
${filter.length ? "WHERE " + filter.join(" AND ") : ""}
|
|
116
|
-
GROUP BY events.event_id
|
|
117
|
-
ORDER BY json_extract(event_data, '$.sn') DESC;
|
|
118
|
-
`;
|
|
119
|
-
const rows = __classPrivateFieldGet(this, _SqliteEventStore_db, "f").prepare(sql).all(params);
|
|
120
|
-
return rows.map(parseRow);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
_SqliteEventStore_db = new WeakMap();
|
package/dist/events/common.d.ts
DELETED
package/dist/events/common.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/events/incept.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { DataArray } from "../data-type.ts";
|
|
2
|
-
import type { Threshold } from "./common.ts";
|
|
3
|
-
export interface InceptArgs {
|
|
4
|
-
k: string[];
|
|
5
|
-
kt: Threshold;
|
|
6
|
-
n: string[];
|
|
7
|
-
nt: Threshold;
|
|
8
|
-
b?: string[];
|
|
9
|
-
bt?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface InceptEvent {
|
|
12
|
-
v: string;
|
|
13
|
-
t: "icp";
|
|
14
|
-
d: string;
|
|
15
|
-
i: string;
|
|
16
|
-
s: string;
|
|
17
|
-
kt: Threshold;
|
|
18
|
-
k: string[];
|
|
19
|
-
nt: Threshold;
|
|
20
|
-
n: string[];
|
|
21
|
-
bt: string;
|
|
22
|
-
b: string[];
|
|
23
|
-
c: string[];
|
|
24
|
-
a: DataArray;
|
|
25
|
-
}
|
|
26
|
-
export declare function incept(data: InceptArgs): InceptEvent;
|
package/dist/events/incept.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { blake3 } from "@noble/hashes/blake3";
|
|
2
|
-
import cesr from "../parser/cesr-encoding.js";
|
|
3
|
-
import { MatterCode } from "../parser/codes.js";
|
|
4
|
-
import { versify } from "../parser/version.js";
|
|
5
|
-
export function incept(data) {
|
|
6
|
-
const event = versify({
|
|
7
|
-
t: "icp",
|
|
8
|
-
d: "#".repeat(44),
|
|
9
|
-
i: "#".repeat(44),
|
|
10
|
-
s: "0",
|
|
11
|
-
kt: data.kt,
|
|
12
|
-
k: data.k,
|
|
13
|
-
nt: data.nt,
|
|
14
|
-
n: data.n,
|
|
15
|
-
bt: data.bt ?? "0",
|
|
16
|
-
b: data.b ?? [],
|
|
17
|
-
c: [],
|
|
18
|
-
a: [],
|
|
19
|
-
});
|
|
20
|
-
const encoder = new TextEncoder();
|
|
21
|
-
const digest = cesr.encode(MatterCode.Blake3_256, blake3
|
|
22
|
-
.create({ dkLen: 32 })
|
|
23
|
-
.update(encoder.encode(JSON.stringify(event)))
|
|
24
|
-
.digest());
|
|
25
|
-
event["d"] = digest;
|
|
26
|
-
event["i"] = digest;
|
|
27
|
-
return event;
|
|
28
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { DataArray } from "../data-type.ts";
|
|
2
|
-
export interface InteractArgs {
|
|
3
|
-
i: string;
|
|
4
|
-
s: string;
|
|
5
|
-
p: string;
|
|
6
|
-
a: DataArray;
|
|
7
|
-
}
|
|
8
|
-
export interface InteractEvent {
|
|
9
|
-
v: string;
|
|
10
|
-
t: "ixn";
|
|
11
|
-
d: string;
|
|
12
|
-
i: string;
|
|
13
|
-
s: string;
|
|
14
|
-
p: string;
|
|
15
|
-
a: DataArray;
|
|
16
|
-
}
|
|
17
|
-
export declare function interact(data: InteractArgs): InteractEvent;
|
package/dist/events/interact.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { blake3 } from "@noble/hashes/blake3";
|
|
2
|
-
import cesr from "../parser/cesr-encoding.js";
|
|
3
|
-
import { MatterCode } from "../parser/codes.js";
|
|
4
|
-
import { versify } from "../parser/version.js";
|
|
5
|
-
export function interact(data) {
|
|
6
|
-
const event = versify({
|
|
7
|
-
t: "ixn",
|
|
8
|
-
d: "#".repeat(44),
|
|
9
|
-
i: data.i,
|
|
10
|
-
s: data.s,
|
|
11
|
-
p: data.p,
|
|
12
|
-
a: data.a,
|
|
13
|
-
});
|
|
14
|
-
const encoder = new TextEncoder();
|
|
15
|
-
const digest = cesr.encode(MatterCode.Blake3_256, blake3
|
|
16
|
-
.create({ dkLen: 32 })
|
|
17
|
-
.update(encoder.encode(JSON.stringify(event)))
|
|
18
|
-
.digest());
|
|
19
|
-
event["d"] = digest;
|
|
20
|
-
return Object.freeze(event);
|
|
21
|
-
}
|
package/dist/events/main.d.ts
DELETED
package/dist/events/main.js
DELETED
package/dist/events/reply.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { DataObject } from "../data-type.ts";
|
|
2
|
-
export interface ReplyArgs {
|
|
3
|
-
dt?: string;
|
|
4
|
-
r: string;
|
|
5
|
-
a: DataObject;
|
|
6
|
-
}
|
|
7
|
-
export interface ReplyEvent {
|
|
8
|
-
v: string;
|
|
9
|
-
t: "rpy";
|
|
10
|
-
d: string;
|
|
11
|
-
dt: string;
|
|
12
|
-
r: string;
|
|
13
|
-
a: DataObject;
|
|
14
|
-
}
|
|
15
|
-
export declare function reply(data: ReplyArgs): ReplyEvent;
|