cojson 0.19.5 → 0.19.6
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +7 -0
- package/dist/crypto/PureJSCrypto.d.ts +6 -3
- package/dist/crypto/PureJSCrypto.d.ts.map +1 -1
- package/dist/crypto/PureJSCrypto.js +6 -3
- package/dist/crypto/PureJSCrypto.js.map +1 -1
- package/dist/tests/account.test.js +21 -39
- package/dist/tests/account.test.js.map +1 -1
- package/package.json +3 -3
- package/src/crypto/PureJSCrypto.ts +12 -4
- package/src/tests/account.test.ts +24 -43
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { blake3 } from "@noble/hashes/blake3";
|
|
2
1
|
import { PrivateTransaction, Transaction, TrustingTransaction } from "../coValueCore/verifiedState.js";
|
|
3
2
|
import { RawCoID, SessionID, TransactionID } from "../ids.js";
|
|
4
3
|
import { Stringified } from "../jsonStringify.js";
|
|
5
4
|
import { JsonObject, JsonValue } from "../jsonValue.js";
|
|
6
5
|
import { CryptoProvider, Encrypted, KeyID, KeySecret, Sealed, SealerID, SealerSecret, SessionLogImpl, Signature, SignerID, SignerSecret } from "./crypto.js";
|
|
7
6
|
import { ControlledAccountOrAgent } from "../coValues/account.js";
|
|
8
|
-
type Blake3State =
|
|
7
|
+
export type Blake3State = {
|
|
8
|
+
update: (buf: Uint8Array) => Blake3State;
|
|
9
|
+
digest: () => Uint8Array;
|
|
10
|
+
clone: () => Blake3State;
|
|
11
|
+
};
|
|
9
12
|
/**
|
|
10
13
|
* Pure JavaScript implementation of the CryptoProvider interface using noble-curves and noble-ciphers libraries.
|
|
11
14
|
* This provides a fallback implementation that doesn't require WebAssembly, offering:
|
|
@@ -16,6 +19,7 @@ type Blake3State = ReturnType<typeof blake3.create>;
|
|
|
16
19
|
*/
|
|
17
20
|
export declare class PureJSCrypto extends CryptoProvider<Blake3State> {
|
|
18
21
|
static create(): Promise<PureJSCrypto>;
|
|
22
|
+
createStreamingHash(): Blake3State;
|
|
19
23
|
blake3HashOnce(data: Uint8Array): Uint8Array;
|
|
20
24
|
blake3HashOnceWithContext(data: Uint8Array, { context }: {
|
|
21
25
|
context: Uint8Array;
|
|
@@ -70,5 +74,4 @@ export declare class PureJSSessionLog implements SessionLogImpl {
|
|
|
70
74
|
decryptNextTransactionMetaJson(txIndex: number, keySecret: KeySecret): string | undefined;
|
|
71
75
|
free(): void;
|
|
72
76
|
}
|
|
73
|
-
export {};
|
|
74
77
|
//# sourceMappingURL=PureJSCrypto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PureJSCrypto.d.ts","sourceRoot":"","sources":["../../src/crypto/PureJSCrypto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PureJSCrypto.d.ts","sourceRoot":"","sources":["../../src/crypto/PureJSCrypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,11 +30,14 @@ export class PureJSCrypto extends CryptoProvider {
|
|
|
30
30
|
static async create() {
|
|
31
31
|
return new PureJSCrypto();
|
|
32
32
|
}
|
|
33
|
+
createStreamingHash() {
|
|
34
|
+
return blake3.create({});
|
|
35
|
+
}
|
|
33
36
|
blake3HashOnce(data) {
|
|
34
37
|
return blake3(data);
|
|
35
38
|
}
|
|
36
39
|
blake3HashOnceWithContext(data, { context }) {
|
|
37
|
-
return
|
|
40
|
+
return this.createStreamingHash().update(context).update(data).digest();
|
|
38
41
|
}
|
|
39
42
|
generateNonce(input) {
|
|
40
43
|
return this.blake3HashOnce(input).slice(0, 24);
|
|
@@ -106,7 +109,7 @@ export class PureJSSessionLog {
|
|
|
106
109
|
this.signerID = signerID;
|
|
107
110
|
this.crypto = crypto;
|
|
108
111
|
this.transactions = [];
|
|
109
|
-
this.streamingHash =
|
|
112
|
+
this.streamingHash = crypto.createStreamingHash();
|
|
110
113
|
}
|
|
111
114
|
clone() {
|
|
112
115
|
const newLog = new PureJSSessionLog(this.coID, this.sessionID, this.signerID, this.crypto);
|
|
@@ -130,7 +133,7 @@ export class PureJSSessionLog {
|
|
|
130
133
|
const newHashEncoded = `hash_z${base58.encode(newHash)}`;
|
|
131
134
|
if (!this.crypto.verify(newSignature, newHashEncoded, this.signerID)) {
|
|
132
135
|
// Rebuild the streaming hash to the original state
|
|
133
|
-
this.streamingHash =
|
|
136
|
+
this.streamingHash = this.crypto.createStreamingHash();
|
|
134
137
|
for (const tx of this.transactions) {
|
|
135
138
|
this.streamingHash.update(textEncoder.encode(tx));
|
|
136
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PureJSCrypto.js","sourceRoot":"","sources":["../../src/crypto/PureJSCrypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOrE,OAAO,EAAe,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,cAAc,EAWd,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"PureJSCrypto.js","sourceRoot":"","sources":["../../src/crypto/PureJSCrypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { expect, test } from "vitest";
|
|
1
|
+
import { beforeEach, expect, test } from "vitest";
|
|
2
2
|
import { expectAccount } from "../coValues/account.js";
|
|
3
3
|
import { WasmCrypto } from "../crypto/WasmCrypto.js";
|
|
4
4
|
import { LocalNode } from "../localNode.js";
|
|
5
5
|
import { connectedPeers } from "../streamUtils.js";
|
|
6
6
|
import { createAsyncStorage } from "./testStorage.js";
|
|
7
|
+
import { setupTestAccount, setupTestNode } from "./testUtils.js";
|
|
7
8
|
const Crypto = await WasmCrypto.create();
|
|
9
|
+
beforeEach(async () => {
|
|
10
|
+
await setupTestNode({ isSyncServer: true });
|
|
11
|
+
});
|
|
8
12
|
test("Can create a node while creating a new account with profile", async () => {
|
|
9
13
|
const { node, accountID, accountSecret, sessionID } = await LocalNode.withNewlyCreatedAccount({
|
|
10
14
|
creationProps: { name: "Hermes Puggington" },
|
|
@@ -56,53 +60,31 @@ test("Can create account with one node, and then load it on another", async () =
|
|
|
56
60
|
expect(map2.get("foo")).toEqual("bar");
|
|
57
61
|
});
|
|
58
62
|
test("Should migrate the root from private to trusting", async () => {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
crypto: Crypto,
|
|
62
|
-
});
|
|
63
|
-
const group = await node.createGroup();
|
|
63
|
+
const session1 = await setupTestAccount({ connected: true });
|
|
64
|
+
const group = session1.node.createGroup();
|
|
64
65
|
expect(group).not.toBeNull();
|
|
65
66
|
const map = group.createMap();
|
|
66
67
|
map.set("foo", "bar", "private");
|
|
67
68
|
expect(map.get("foo")).toEqual("bar");
|
|
68
|
-
const
|
|
69
|
-
peer1role: "server",
|
|
70
|
-
peer2role: "client",
|
|
71
|
-
});
|
|
72
|
-
const account = await node.load(accountID);
|
|
69
|
+
const account = await session1.node.load(session1.accountID);
|
|
73
70
|
if (account === "unavailable")
|
|
74
71
|
throw new Error("Account unavailable");
|
|
75
72
|
account.set("root", map.id, "private");
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
crypto: Crypto,
|
|
83
|
-
});
|
|
84
|
-
const account2 = await node2.load(accountID);
|
|
85
|
-
if (account2 === "unavailable")
|
|
73
|
+
// Waiting to ensure that the migration is always applied on a different timestamp
|
|
74
|
+
// to make the test more stable
|
|
75
|
+
await new Promise((resolve) => setTimeout(resolve, 4));
|
|
76
|
+
const session2 = await session1.spawnNewSession();
|
|
77
|
+
const accountInNewSession = await session2.node.load(session1.accountID);
|
|
78
|
+
if (accountInNewSession === "unavailable")
|
|
86
79
|
throw new Error("Account unavailable");
|
|
87
|
-
expect(
|
|
88
|
-
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
});
|
|
93
|
-
node.syncManager.addPeer(peers2[1]);
|
|
94
|
-
const node3 = await LocalNode.withLoadedAccount({
|
|
95
|
-
accountID,
|
|
96
|
-
accountSecret,
|
|
97
|
-
sessionID: Crypto.newRandomSessionID(accountID),
|
|
98
|
-
peers: [peers2[0]],
|
|
99
|
-
crypto: Crypto,
|
|
100
|
-
});
|
|
101
|
-
const account3 = await node3.load(accountID);
|
|
102
|
-
if (account3 === "unavailable")
|
|
80
|
+
expect(accountInNewSession.getRaw("root")?.trusting).toEqual(true);
|
|
81
|
+
await accountInNewSession.core.waitForSync();
|
|
82
|
+
const session3 = await session2.spawnNewSession();
|
|
83
|
+
const accountInNewSession2 = await session3.node.load(session1.accountID);
|
|
84
|
+
if (accountInNewSession2 === "unavailable")
|
|
103
85
|
throw new Error("Account unavailable");
|
|
104
|
-
expect(
|
|
105
|
-
expect(
|
|
86
|
+
expect(accountInNewSession2.getRaw("root")?.trusting).toEqual(true);
|
|
87
|
+
expect(accountInNewSession2.ops).toEqual(accountInNewSession.ops); // No new transactions were made
|
|
106
88
|
});
|
|
107
89
|
test("myRole returns 'admin' for the current account", async () => {
|
|
108
90
|
const { node, accountID } = await LocalNode.withNewlyCreatedAccount({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.test.js","sourceRoot":"","sources":["../../src/tests/account.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"account.test.js","sourceRoot":"","sources":["../../src/tests/account.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"type": "module",
|
|
35
35
|
"license": "MIT",
|
|
36
|
-
"version": "0.19.
|
|
36
|
+
"version": "0.19.6",
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@opentelemetry/sdk-metrics": "^2.0.0",
|
|
39
39
|
"libsql": "^0.5.13",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"@opentelemetry/api": "^1.9.0",
|
|
47
47
|
"@scure/base": "1.2.1",
|
|
48
48
|
"unicode-segmenter": "^0.12.0",
|
|
49
|
-
"cojson-core-wasm": "0.19.
|
|
50
|
-
"cojson-core-napi": "0.19.
|
|
49
|
+
"cojson-core-wasm": "0.19.6",
|
|
50
|
+
"cojson-core-napi": "0.19.6"
|
|
51
51
|
},
|
|
52
52
|
"gitHead": "33c27053293b4801b968c61d5c4c989f93a67d13",
|
|
53
53
|
"scripts": {
|
|
@@ -29,7 +29,11 @@ import {
|
|
|
29
29
|
} from "./crypto.js";
|
|
30
30
|
import { ControlledAccountOrAgent } from "../coValues/account.js";
|
|
31
31
|
|
|
32
|
-
type Blake3State =
|
|
32
|
+
export type Blake3State = {
|
|
33
|
+
update: (buf: Uint8Array) => Blake3State;
|
|
34
|
+
digest: () => Uint8Array;
|
|
35
|
+
clone: () => Blake3State;
|
|
36
|
+
};
|
|
33
37
|
|
|
34
38
|
const x25519SharedSecretCache = new Map<string, Uint8Array>();
|
|
35
39
|
|
|
@@ -67,6 +71,10 @@ export class PureJSCrypto extends CryptoProvider<Blake3State> {
|
|
|
67
71
|
return new PureJSCrypto();
|
|
68
72
|
}
|
|
69
73
|
|
|
74
|
+
createStreamingHash(): Blake3State {
|
|
75
|
+
return blake3.create({});
|
|
76
|
+
}
|
|
77
|
+
|
|
70
78
|
blake3HashOnce(data: Uint8Array) {
|
|
71
79
|
return blake3(data);
|
|
72
80
|
}
|
|
@@ -75,7 +83,7 @@ export class PureJSCrypto extends CryptoProvider<Blake3State> {
|
|
|
75
83
|
data: Uint8Array,
|
|
76
84
|
{ context }: { context: Uint8Array },
|
|
77
85
|
) {
|
|
78
|
-
return
|
|
86
|
+
return this.createStreamingHash().update(context).update(data).digest();
|
|
79
87
|
}
|
|
80
88
|
|
|
81
89
|
generateNonce(input: Uint8Array): Uint8Array {
|
|
@@ -224,7 +232,7 @@ export class PureJSSessionLog implements SessionLogImpl {
|
|
|
224
232
|
private readonly signerID: SignerID | undefined,
|
|
225
233
|
private readonly crypto: PureJSCrypto,
|
|
226
234
|
) {
|
|
227
|
-
this.streamingHash =
|
|
235
|
+
this.streamingHash = crypto.createStreamingHash();
|
|
228
236
|
}
|
|
229
237
|
|
|
230
238
|
clone(): SessionLogImpl {
|
|
@@ -271,7 +279,7 @@ export class PureJSSessionLog implements SessionLogImpl {
|
|
|
271
279
|
|
|
272
280
|
if (!this.crypto.verify(newSignature, newHashEncoded, this.signerID)) {
|
|
273
281
|
// Rebuild the streaming hash to the original state
|
|
274
|
-
this.streamingHash =
|
|
282
|
+
this.streamingHash = this.crypto.createStreamingHash();
|
|
275
283
|
for (const tx of this.transactions) {
|
|
276
284
|
this.streamingHash.update(textEncoder.encode(tx));
|
|
277
285
|
}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { expect, test } from "vitest";
|
|
1
|
+
import { beforeEach, expect, test } from "vitest";
|
|
2
2
|
import { expectAccount } from "../coValues/account.js";
|
|
3
3
|
import { WasmCrypto } from "../crypto/WasmCrypto.js";
|
|
4
4
|
import { LocalNode } from "../localNode.js";
|
|
5
5
|
import { connectedPeers } from "../streamUtils.js";
|
|
6
6
|
import { createAsyncStorage } from "./testStorage.js";
|
|
7
|
+
import { setupTestAccount, setupTestNode } from "./testUtils.js";
|
|
7
8
|
|
|
8
9
|
const Crypto = await WasmCrypto.create();
|
|
9
10
|
|
|
11
|
+
beforeEach(async () => {
|
|
12
|
+
await setupTestNode({ isSyncServer: true });
|
|
13
|
+
});
|
|
14
|
+
|
|
10
15
|
test("Can create a node while creating a new account with profile", async () => {
|
|
11
16
|
const { node, accountID, accountSecret, sessionID } =
|
|
12
17
|
await LocalNode.withNewlyCreatedAccount({
|
|
@@ -75,66 +80,42 @@ test("Can create account with one node, and then load it on another", async () =
|
|
|
75
80
|
});
|
|
76
81
|
|
|
77
82
|
test("Should migrate the root from private to trusting", async () => {
|
|
78
|
-
const {
|
|
79
|
-
await LocalNode.withNewlyCreatedAccount({
|
|
80
|
-
creationProps: { name: "Hermes Puggington" },
|
|
81
|
-
crypto: Crypto,
|
|
82
|
-
});
|
|
83
|
+
const session1 = await setupTestAccount({ connected: true });
|
|
83
84
|
|
|
84
|
-
const group =
|
|
85
|
+
const group = session1.node.createGroup();
|
|
85
86
|
expect(group).not.toBeNull();
|
|
86
87
|
|
|
87
88
|
const map = group.createMap();
|
|
88
89
|
map.set("foo", "bar", "private");
|
|
89
90
|
expect(map.get("foo")).toEqual("bar");
|
|
90
91
|
|
|
91
|
-
const
|
|
92
|
-
peer1role: "server",
|
|
93
|
-
peer2role: "client",
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
const account = await node.load(accountID);
|
|
92
|
+
const account = await session1.node.load(session1.accountID);
|
|
97
93
|
if (account === "unavailable") throw new Error("Account unavailable");
|
|
98
94
|
|
|
99
95
|
account.set("root", map.id, "private");
|
|
100
96
|
|
|
101
|
-
|
|
97
|
+
// Waiting to ensure that the migration is always applied on a different timestamp
|
|
98
|
+
// to make the test more stable
|
|
99
|
+
await new Promise((resolve) => setTimeout(resolve, 4));
|
|
102
100
|
|
|
103
|
-
const
|
|
104
|
-
accountID,
|
|
105
|
-
accountSecret,
|
|
106
|
-
sessionID: Crypto.newRandomSessionID(accountID),
|
|
107
|
-
peers: [peers1[0]],
|
|
108
|
-
crypto: Crypto,
|
|
109
|
-
});
|
|
101
|
+
const session2 = await session1.spawnNewSession();
|
|
110
102
|
|
|
111
|
-
const
|
|
112
|
-
if (
|
|
103
|
+
const accountInNewSession = await session2.node.load(session1.accountID);
|
|
104
|
+
if (accountInNewSession === "unavailable")
|
|
105
|
+
throw new Error("Account unavailable");
|
|
113
106
|
|
|
114
|
-
expect(
|
|
115
|
-
|
|
116
|
-
node2.gracefulShutdown(); // Stop getting updates from node1
|
|
117
|
-
|
|
118
|
-
const peers2 = connectedPeers("node2", "node3", {
|
|
119
|
-
peer1role: "server",
|
|
120
|
-
peer2role: "client",
|
|
121
|
-
});
|
|
107
|
+
expect(accountInNewSession.getRaw("root")?.trusting).toEqual(true);
|
|
122
108
|
|
|
123
|
-
|
|
109
|
+
await accountInNewSession.core.waitForSync();
|
|
124
110
|
|
|
125
|
-
const
|
|
126
|
-
accountID,
|
|
127
|
-
accountSecret,
|
|
128
|
-
sessionID: Crypto.newRandomSessionID(accountID),
|
|
129
|
-
peers: [peers2[0]],
|
|
130
|
-
crypto: Crypto,
|
|
131
|
-
});
|
|
111
|
+
const session3 = await session2.spawnNewSession();
|
|
132
112
|
|
|
133
|
-
const
|
|
134
|
-
if (
|
|
113
|
+
const accountInNewSession2 = await session3.node.load(session1.accountID);
|
|
114
|
+
if (accountInNewSession2 === "unavailable")
|
|
115
|
+
throw new Error("Account unavailable");
|
|
135
116
|
|
|
136
|
-
expect(
|
|
137
|
-
expect(
|
|
117
|
+
expect(accountInNewSession2.getRaw("root")?.trusting).toEqual(true);
|
|
118
|
+
expect(accountInNewSession2.ops).toEqual(accountInNewSession.ops); // No new transactions were made
|
|
138
119
|
});
|
|
139
120
|
|
|
140
121
|
test("myRole returns 'admin' for the current account", async () => {
|