cojson 0.1.11 → 0.2.0
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/dist/base64url.js +15 -2
- package/dist/base64url.js.map +1 -1
- package/dist/coValue.d.ts +1 -1
- package/dist/coValueCore.d.ts +9 -3
- package/dist/coValueCore.js +100 -7
- package/dist/coValueCore.js.map +1 -1
- package/dist/coValues/coList.js +2 -1
- package/dist/coValues/coList.js.map +1 -1
- package/dist/coValues/coMap.d.ts +7 -12
- package/dist/coValues/coMap.js +2 -1
- package/dist/coValues/coMap.js.map +1 -1
- package/dist/coValues/coStream.d.ts +11 -2
- package/dist/coValues/coStream.js +59 -15
- package/dist/coValues/coStream.js.map +1 -1
- package/dist/crypto.d.ts +11 -3
- package/dist/crypto.js +51 -16
- package/dist/crypto.js.map +1 -1
- package/dist/group.d.ts +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/jsonStringify.d.ts +6 -0
- package/dist/jsonStringify.js +57 -0
- package/dist/jsonStringify.js.map +1 -0
- package/dist/jsonValue.d.ts +1 -1
- package/dist/media.d.ts +8 -0
- package/dist/media.js +2 -0
- package/dist/media.js.map +1 -0
- package/dist/node.js +1 -1
- package/dist/permissions.js +4 -2
- package/dist/permissions.js.map +1 -1
- package/dist/sync.js +8 -2
- package/dist/sync.js.map +1 -1
- package/package.json +3 -4
- package/src/account.test.ts +5 -0
- package/src/base64url.ts +16 -6
- package/src/coValue.test.ts +28 -0
- package/src/coValue.ts +1 -1
- package/src/coValueCore.test.ts +16 -10
- package/src/coValueCore.ts +148 -9
- package/src/coValues/coList.ts +2 -1
- package/src/coValues/coMap.ts +11 -12
- package/src/coValues/coStream.ts +83 -21
- package/src/crypto.test.ts +5 -0
- package/src/crypto.ts +68 -19
- package/src/group.test.ts +5 -1
- package/src/group.ts +1 -1
- package/src/index.ts +7 -1
- package/src/jsonStringify.ts +66 -0
- package/src/jsonValue.ts +1 -1
- package/src/media.ts +9 -0
- package/src/node.ts +1 -1
- package/src/permissions.test.ts +5 -1
- package/src/permissions.ts +5 -2
- package/src/sync.test.ts +22 -24
- package/src/sync.ts +16 -2
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { accountOrAgentIDfromSessionID } from "../coValueCore.js";
|
|
1
2
|
import { base64URLtoBytes, bytesToBase64url } from "../base64url.js";
|
|
3
|
+
import { isAccountID } from "../account.js";
|
|
4
|
+
import { parseJSON } from "../jsonStringify.js";
|
|
2
5
|
export class CoStream {
|
|
3
6
|
constructor(core) {
|
|
4
7
|
this.type = "costream";
|
|
@@ -16,15 +19,15 @@ export class CoStream {
|
|
|
16
19
|
/** @internal */
|
|
17
20
|
fillFromCoValue() {
|
|
18
21
|
this.items = {};
|
|
19
|
-
for (const { txID, changes, } of this.core.getValidSortedTransactions()) {
|
|
20
|
-
for (const changeUntyped of changes) {
|
|
22
|
+
for (const { txID, madeAt, changes, } of this.core.getValidSortedTransactions()) {
|
|
23
|
+
for (const changeUntyped of parseJSON(changes)) {
|
|
21
24
|
const change = changeUntyped;
|
|
22
25
|
let entries = this.items[txID.sessionID];
|
|
23
26
|
if (!entries) {
|
|
24
27
|
entries = [];
|
|
25
28
|
this.items[txID.sessionID] = entries;
|
|
26
29
|
}
|
|
27
|
-
entries.push(change);
|
|
30
|
+
entries.push({ item: change, madeAt });
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
33
|
}
|
|
@@ -35,10 +38,45 @@ export class CoStream {
|
|
|
35
38
|
else if (Object.keys(this.items).length !== 1) {
|
|
36
39
|
throw new Error("CoStream.getSingleStream() can only be called when there is exactly one stream");
|
|
37
40
|
}
|
|
38
|
-
return Object.values(this.items)[0];
|
|
41
|
+
return Object.values(this.items)[0]?.map(item => item.item);
|
|
42
|
+
}
|
|
43
|
+
getLastItemsPerAccount() {
|
|
44
|
+
const result = {};
|
|
45
|
+
for (const [sessionID, items] of Object.entries(this.items)) {
|
|
46
|
+
const account = accountOrAgentIDfromSessionID(sessionID);
|
|
47
|
+
if (!isAccountID(account))
|
|
48
|
+
continue;
|
|
49
|
+
if (items.length > 0) {
|
|
50
|
+
const lastItemOfSession = items[items.length - 1];
|
|
51
|
+
if (!result[account] || lastItemOfSession.madeAt > result[account].madeAt) {
|
|
52
|
+
result[account] = lastItemOfSession;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return Object.fromEntries(Object.entries(result).map(([account, item]) => [account, item?.item]));
|
|
57
|
+
}
|
|
58
|
+
getLastItemFrom(account) {
|
|
59
|
+
let lastItem;
|
|
60
|
+
for (const [sessionID, items] of Object.entries(this.items)) {
|
|
61
|
+
if (sessionID.startsWith(account)) {
|
|
62
|
+
if (items.length > 0) {
|
|
63
|
+
const lastItemOfSession = items[items.length - 1];
|
|
64
|
+
if (!lastItem || lastItemOfSession.madeAt > lastItem.madeAt) {
|
|
65
|
+
lastItem = lastItemOfSession;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return lastItem?.item;
|
|
71
|
+
}
|
|
72
|
+
getLastItemFromMe() {
|
|
73
|
+
const myAccountID = this.core.node.account.id;
|
|
74
|
+
if (!isAccountID(myAccountID))
|
|
75
|
+
return undefined;
|
|
76
|
+
return this.getLastItemFrom(myAccountID);
|
|
39
77
|
}
|
|
40
78
|
toJSON() {
|
|
41
|
-
return this.items;
|
|
79
|
+
return Object.fromEntries(Object.entries(this.items).map(([sessionID, items]) => [sessionID, items.map(item => item.item)]));
|
|
42
80
|
}
|
|
43
81
|
subscribe(listener) {
|
|
44
82
|
return this.core.subscribe((content) => {
|
|
@@ -51,8 +89,10 @@ export class CoStream {
|
|
|
51
89
|
return new CoStream(this.core);
|
|
52
90
|
}
|
|
53
91
|
}
|
|
92
|
+
const binary_U_prefixLength = 8; // "binary_U".length;
|
|
54
93
|
export class BinaryCoStream extends CoStream {
|
|
55
94
|
getBinaryChunks() {
|
|
95
|
+
const before = performance.now();
|
|
56
96
|
const items = this.getSingleStream();
|
|
57
97
|
if (!items)
|
|
58
98
|
return;
|
|
@@ -62,28 +102,29 @@ export class BinaryCoStream extends CoStream {
|
|
|
62
102
|
return;
|
|
63
103
|
}
|
|
64
104
|
const chunks = [];
|
|
105
|
+
let finished = false;
|
|
106
|
+
let totalLength = 0;
|
|
65
107
|
for (const item of items.slice(1)) {
|
|
66
108
|
if (item.type === "end") {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
fileName: start.fileName,
|
|
70
|
-
totalSizeBytes: start.totalSizeBytes,
|
|
71
|
-
chunks,
|
|
72
|
-
finished: true,
|
|
73
|
-
};
|
|
109
|
+
finished = true;
|
|
110
|
+
break;
|
|
74
111
|
}
|
|
75
112
|
if (item.type !== "chunk") {
|
|
76
113
|
console.error("Invalid binary stream chunk", item);
|
|
77
114
|
return undefined;
|
|
78
115
|
}
|
|
79
|
-
|
|
116
|
+
const chunk = base64URLtoBytes(item.chunk.slice(binary_U_prefixLength));
|
|
117
|
+
totalLength += chunk.length;
|
|
118
|
+
chunks.push(chunk);
|
|
80
119
|
}
|
|
120
|
+
const after = performance.now();
|
|
121
|
+
console.log("getBinaryChunks bandwidth in MB/s", (1000 * totalLength) / (after - before) / (1024 * 1024));
|
|
81
122
|
return {
|
|
82
123
|
mimeType: start.mimeType,
|
|
83
124
|
fileName: start.fileName,
|
|
84
125
|
totalSizeBytes: start.totalSizeBytes,
|
|
85
126
|
chunks,
|
|
86
|
-
finished
|
|
127
|
+
finished,
|
|
87
128
|
};
|
|
88
129
|
}
|
|
89
130
|
edit(changer) {
|
|
@@ -118,10 +159,13 @@ export class WriteableBinaryCoStream extends BinaryCoStream {
|
|
|
118
159
|
}, privacy);
|
|
119
160
|
}
|
|
120
161
|
pushBinaryStreamChunk(chunk, privacy = "private") {
|
|
162
|
+
const before = performance.now();
|
|
121
163
|
this.push({
|
|
122
164
|
type: "chunk",
|
|
123
|
-
chunk: `
|
|
165
|
+
chunk: `binary_U${bytesToBase64url(chunk)}`,
|
|
124
166
|
}, privacy);
|
|
167
|
+
const after = performance.now();
|
|
168
|
+
console.log("pushBinaryStreamChunk bandwidth in MB/s", (1000 * chunk.length) / (after - before) / (1024 * 1024));
|
|
125
169
|
}
|
|
126
170
|
endBinaryStream(privacy = "private") {
|
|
127
171
|
this.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coStream.js","sourceRoot":"","sources":["../../src/coValues/coStream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"coStream.js","sourceRoot":"","sources":["../../src/coValues/coStream.ts"],"names":[],"mappings":"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"}
|
package/dist/crypto.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { JsonValue } from "./jsonValue.js";
|
|
2
|
-
import { blake3 } from "@noble/hashes/blake3";
|
|
3
2
|
import { AgentID, RawCoID, TransactionID } from "./ids.js";
|
|
3
|
+
import { Stringified } from "./jsonStringify.js";
|
|
4
|
+
export declare const cryptoReady: Promise<void>;
|
|
4
5
|
export type SignerSecret = `signerSecret_z${string}`;
|
|
5
6
|
export type SignerID = `signer_z${string}`;
|
|
6
7
|
export type Signature = `signature_z${string}`;
|
|
@@ -39,8 +40,8 @@ export declare function unseal<T extends JsonValue>(sealed: Sealed<T>, sealer: S
|
|
|
39
40
|
export type Hash = `hash_z${string}`;
|
|
40
41
|
export declare function secureHash(value: JsonValue): Hash;
|
|
41
42
|
export declare class StreamingHash {
|
|
42
|
-
state:
|
|
43
|
-
constructor(fromClone?:
|
|
43
|
+
state: Uint8Array;
|
|
44
|
+
constructor(fromClone?: Uint8Array);
|
|
44
45
|
update(value: JsonValue): void;
|
|
45
46
|
digest(): Hash;
|
|
46
47
|
clone(): StreamingHash;
|
|
@@ -82,6 +83,13 @@ export declare function encryptKeySecret(keys: {
|
|
|
82
83
|
encryptingID: KeyID;
|
|
83
84
|
}>;
|
|
84
85
|
};
|
|
86
|
+
export declare function decryptRawForTransaction<T extends JsonValue>(encrypted: Encrypted<T, {
|
|
87
|
+
in: RawCoID;
|
|
88
|
+
tx: TransactionID;
|
|
89
|
+
}>, keySecret: KeySecret, nOnceMaterial: {
|
|
90
|
+
in: RawCoID;
|
|
91
|
+
tx: TransactionID;
|
|
92
|
+
}): Stringified<T> | undefined;
|
|
85
93
|
export declare function decryptForTransaction<T extends JsonValue>(encrypted: Encrypted<T, {
|
|
86
94
|
in: RawCoID;
|
|
87
95
|
tx: TransactionID;
|
package/dist/crypto.js
CHANGED
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
import { ed25519, x25519 } from "@noble/curves/ed25519";
|
|
2
2
|
import { xsalsa20_poly1305, xsalsa20 } from "@noble/ciphers/salsa";
|
|
3
3
|
import { base58 } from "@scure/base";
|
|
4
|
-
import stableStringify from "fast-json-stable-stringify";
|
|
5
|
-
import { blake3 } from "@noble/hashes/blake3";
|
|
6
4
|
import { randomBytes } from "@noble/ciphers/webcrypto/utils";
|
|
7
5
|
import { base64URLtoBytes, bytesToBase64url } from "./base64url.js";
|
|
6
|
+
import { createBLAKE3 } from 'hash-wasm';
|
|
7
|
+
import { parseJSON, stableStringify } from "./jsonStringify.js";
|
|
8
|
+
let blake3Instance;
|
|
9
|
+
let blake3HashOnce;
|
|
10
|
+
let blake3HashOnceWithContext;
|
|
11
|
+
let blake3incrementalUpdateSLOW_WITH_DEVTOOLS;
|
|
12
|
+
let blake3digestForState;
|
|
13
|
+
export const cryptoReady = new Promise((resolve) => {
|
|
14
|
+
createBLAKE3().then(bl3 => {
|
|
15
|
+
blake3Instance = bl3;
|
|
16
|
+
blake3HashOnce = (data) => {
|
|
17
|
+
return bl3.init().update(data).digest('binary');
|
|
18
|
+
};
|
|
19
|
+
blake3HashOnceWithContext = (data, { context }) => {
|
|
20
|
+
return bl3.init().update(context).update(data).digest('binary');
|
|
21
|
+
};
|
|
22
|
+
blake3incrementalUpdateSLOW_WITH_DEVTOOLS = (state, data) => {
|
|
23
|
+
bl3.load(state).update(data);
|
|
24
|
+
return bl3.save();
|
|
25
|
+
};
|
|
26
|
+
blake3digestForState = (state) => {
|
|
27
|
+
return bl3.load(state).digest('binary');
|
|
28
|
+
};
|
|
29
|
+
resolve();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
8
32
|
const textEncoder = new TextEncoder();
|
|
9
33
|
const textDecoder = new TextDecoder();
|
|
10
34
|
export function newRandomSigner() {
|
|
@@ -70,7 +94,7 @@ export function getAgentSealerSecret(agentSecret) {
|
|
|
70
94
|
return agentSecret.split("/")[0];
|
|
71
95
|
}
|
|
72
96
|
export function seal(message, from, to, nOnceMaterial) {
|
|
73
|
-
const nOnce =
|
|
97
|
+
const nOnce = blake3HashOnce(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
|
|
74
98
|
const sealerPub = base58.decode(to.substring("sealer_z".length));
|
|
75
99
|
const senderPriv = base58.decode(from.substring("sealerSecret_z".length));
|
|
76
100
|
const plaintext = textEncoder.encode(stableStringify(message));
|
|
@@ -79,7 +103,7 @@ export function seal(message, from, to, nOnceMaterial) {
|
|
|
79
103
|
return `sealed_U${bytesToBase64url(sealedBytes)}`;
|
|
80
104
|
}
|
|
81
105
|
export function unseal(sealed, sealer, from, nOnceMaterial) {
|
|
82
|
-
const nOnce =
|
|
106
|
+
const nOnce = blake3HashOnce(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
|
|
83
107
|
const sealerPriv = base58.decode(sealer.substring("sealerSecret_z".length));
|
|
84
108
|
const senderPub = base58.decode(from.substring("sealer_z".length));
|
|
85
109
|
const sealedBytes = base64URLtoBytes(sealed.substring("sealed_U".length));
|
|
@@ -94,26 +118,30 @@ export function unseal(sealed, sealer, from, nOnceMaterial) {
|
|
|
94
118
|
}
|
|
95
119
|
}
|
|
96
120
|
export function secureHash(value) {
|
|
97
|
-
return `hash_z${base58.encode(
|
|
121
|
+
return `hash_z${base58.encode(blake3HashOnce(textEncoder.encode(stableStringify(value))))}`;
|
|
98
122
|
}
|
|
99
123
|
export class StreamingHash {
|
|
100
124
|
constructor(fromClone) {
|
|
101
|
-
this.state = fromClone ||
|
|
125
|
+
this.state = fromClone || blake3Instance.init().save();
|
|
102
126
|
}
|
|
103
127
|
update(value) {
|
|
104
|
-
|
|
128
|
+
const encoded = textEncoder.encode(stableStringify(value));
|
|
129
|
+
// const before = performance.now();
|
|
130
|
+
this.state = blake3incrementalUpdateSLOW_WITH_DEVTOOLS(this.state, encoded);
|
|
131
|
+
// const after = performance.now();
|
|
132
|
+
// console.log(`Hashing throughput in MB/s`, 1000 * (encoded.length / (after - before)) / (1024 * 1024));
|
|
105
133
|
}
|
|
106
134
|
digest() {
|
|
107
|
-
const hash = this.state
|
|
135
|
+
const hash = blake3digestForState(this.state);
|
|
108
136
|
return `hash_z${base58.encode(hash)}`;
|
|
109
137
|
}
|
|
110
138
|
clone() {
|
|
111
|
-
return new StreamingHash(this.state
|
|
139
|
+
return new StreamingHash(new Uint8Array(this.state));
|
|
112
140
|
}
|
|
113
141
|
}
|
|
114
142
|
export const shortHashLength = 19;
|
|
115
143
|
export function shortHash(value) {
|
|
116
|
-
return `shortHash_z${base58.encode(
|
|
144
|
+
return `shortHash_z${base58.encode(blake3HashOnce(textEncoder.encode(stableStringify(value))).slice(0, shortHashLength))}`;
|
|
117
145
|
}
|
|
118
146
|
export function newRandomKeySecret() {
|
|
119
147
|
return {
|
|
@@ -123,7 +151,7 @@ export function newRandomKeySecret() {
|
|
|
123
151
|
}
|
|
124
152
|
function encrypt(value, keySecret, nOnceMaterial) {
|
|
125
153
|
const keySecretBytes = base58.decode(keySecret.substring("keySecret_z".length));
|
|
126
|
-
const nOnce =
|
|
154
|
+
const nOnce = blake3HashOnce(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
|
|
127
155
|
const plaintext = textEncoder.encode(stableStringify(value));
|
|
128
156
|
const ciphertext = xsalsa20(keySecretBytes, nOnce, plaintext);
|
|
129
157
|
return `encrypted_U${bytesToBase64url(ciphertext)}`;
|
|
@@ -142,18 +170,25 @@ export function encryptKeySecret(keys) {
|
|
|
142
170
|
encrypted: encrypt(keys.toEncrypt.secret, keys.encrypting.secret, nOnceMaterial),
|
|
143
171
|
};
|
|
144
172
|
}
|
|
145
|
-
function
|
|
173
|
+
function decryptRaw(encrypted, keySecret, nOnceMaterial) {
|
|
146
174
|
const keySecretBytes = base58.decode(keySecret.substring("keySecret_z".length));
|
|
147
|
-
const nOnce =
|
|
175
|
+
const nOnce = blake3HashOnce(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
|
|
148
176
|
const ciphertext = base64URLtoBytes(encrypted.substring("encrypted_U".length));
|
|
149
177
|
const plaintext = xsalsa20(keySecretBytes, nOnce, ciphertext);
|
|
178
|
+
return textDecoder.decode(plaintext);
|
|
179
|
+
}
|
|
180
|
+
function decrypt(encrypted, keySecret, nOnceMaterial) {
|
|
150
181
|
try {
|
|
151
|
-
return
|
|
182
|
+
return parseJSON(decryptRaw(encrypted, keySecret, nOnceMaterial));
|
|
152
183
|
}
|
|
153
184
|
catch (e) {
|
|
185
|
+
console.error("Decryption error", e);
|
|
154
186
|
return undefined;
|
|
155
187
|
}
|
|
156
188
|
}
|
|
189
|
+
export function decryptRawForTransaction(encrypted, keySecret, nOnceMaterial) {
|
|
190
|
+
return decryptRaw(encrypted, keySecret, nOnceMaterial);
|
|
191
|
+
}
|
|
157
192
|
export function decryptForTransaction(encrypted, keySecret, nOnceMaterial) {
|
|
158
193
|
return decrypt(encrypted, keySecret, nOnceMaterial);
|
|
159
194
|
}
|
|
@@ -182,9 +217,9 @@ export function agentSecretFromSecretSeed(secretSeed) {
|
|
|
182
217
|
if (secretSeed.length !== secretSeedLength) {
|
|
183
218
|
throw new Error(`Secret seed needs to be ${secretSeedLength} bytes long`);
|
|
184
219
|
}
|
|
185
|
-
return `sealerSecret_z${base58.encode(
|
|
220
|
+
return `sealerSecret_z${base58.encode(blake3HashOnceWithContext(secretSeed, {
|
|
186
221
|
context: textEncoder.encode("seal"),
|
|
187
|
-
}))}/signerSecret_z${base58.encode(
|
|
222
|
+
}))}/signerSecret_z${base58.encode(blake3HashOnceWithContext(secretSeed, {
|
|
188
223
|
context: textEncoder.encode("sign"),
|
|
189
224
|
}))}`;
|
|
190
225
|
}
|
package/dist/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/group.d.ts
CHANGED
|
@@ -72,7 +72,7 @@ export declare class Group {
|
|
|
72
72
|
/** Creates a new `CoMap` within this group, with the specified specialized
|
|
73
73
|
* `CoMap` type `M` and optional static metadata. */
|
|
74
74
|
createMap<M extends CoMap<{
|
|
75
|
-
[key: string]: JsonValue;
|
|
75
|
+
[key: string]: JsonValue | undefined;
|
|
76
76
|
}, JsonObject | null>>(meta?: M["meta"]): M;
|
|
77
77
|
/** Creates a new `CoList` within this group, with the specified specialized
|
|
78
78
|
* `CoList` type `L` and optional static metadata. */
|
package/dist/index.d.ts
CHANGED
|
@@ -4,12 +4,13 @@ import type { CoValue, ReadableCoValue } from "./coValue.js";
|
|
|
4
4
|
import { CoMap, WriteableCoMap } from "./coValues/coMap.js";
|
|
5
5
|
import { CoList, WriteableCoList } from "./coValues/coList.js";
|
|
6
6
|
import { CoStream, WriteableCoStream, BinaryCoStream, WriteableBinaryCoStream } from "./coValues/coStream.js";
|
|
7
|
-
import { agentSecretFromBytes, agentSecretToBytes, getAgentID, newRandomAgentSecret, newRandomSecretSeed, agentSecretFromSecretSeed } from "./crypto.js";
|
|
7
|
+
import { agentSecretFromBytes, agentSecretToBytes, getAgentID, newRandomAgentSecret, newRandomSecretSeed, agentSecretFromSecretSeed, cryptoReady } from "./crypto.js";
|
|
8
8
|
import { connectedPeers } from "./streamUtils.js";
|
|
9
9
|
import { AnonymousControlledAccount, ControlledAccount } from "./account.js";
|
|
10
10
|
import { rawCoIDtoBytes, rawCoIDfromBytes } from "./ids.js";
|
|
11
11
|
import { Group, expectGroupContent } from "./group.js";
|
|
12
12
|
import { base64URLtoBytes, bytesToBase64url } from "./base64url.js";
|
|
13
|
+
import { parseJSON } from "./jsonStringify.js";
|
|
13
14
|
import type { SessionID, AgentID } from "./ids.js";
|
|
14
15
|
import type { CoID, CoValueImpl } from "./coValue.js";
|
|
15
16
|
import type { BinaryChunkInfo, BinaryCoStreamMeta } from "./coValues/coStream.js";
|
|
@@ -18,6 +19,7 @@ import type { SyncMessage, Peer } from "./sync.js";
|
|
|
18
19
|
import type { AgentSecret } from "./crypto.js";
|
|
19
20
|
import type { AccountID, Profile } from "./account.js";
|
|
20
21
|
import type { InviteSecret } from "./group.js";
|
|
22
|
+
import type * as Media from "./media.js";
|
|
21
23
|
type Value = JsonValue | CoValueImpl;
|
|
22
24
|
/** @hidden */
|
|
23
25
|
export declare const cojsonInternals: {
|
|
@@ -36,9 +38,10 @@ export declare const cojsonInternals: {
|
|
|
36
38
|
expectGroupContent: typeof expectGroupContent;
|
|
37
39
|
base64URLtoBytes: typeof base64URLtoBytes;
|
|
38
40
|
bytesToBase64url: typeof bytesToBase64url;
|
|
41
|
+
parseJSON: typeof parseJSON;
|
|
39
42
|
};
|
|
40
|
-
export { LocalNode, Group, CoMap, WriteableCoMap, CoList, WriteableCoList, CoStream, WriteableCoStream, BinaryCoStream, WriteableBinaryCoStream, CoValueCore, AnonymousControlledAccount, ControlledAccount, };
|
|
41
|
-
export type { Value, JsonValue, CoValue, ReadableCoValue, CoValueImpl, CoID, AccountID, Profile, SessionID, Peer, BinaryChunkInfo, BinaryCoStreamMeta, AgentID, AgentSecret, InviteSecret, SyncMessage, };
|
|
43
|
+
export { LocalNode, Group, CoMap, WriteableCoMap, CoList, WriteableCoList, CoStream, WriteableCoStream, BinaryCoStream, WriteableBinaryCoStream, CoValueCore, AnonymousControlledAccount, ControlledAccount, cryptoReady as cojsonReady, };
|
|
44
|
+
export type { Value, JsonValue, CoValue, ReadableCoValue, CoValueImpl, CoID, AccountID, Profile, SessionID, Peer, BinaryChunkInfo, BinaryCoStreamMeta, AgentID, AgentSecret, InviteSecret, SyncMessage, Media };
|
|
42
45
|
export declare namespace CojsonInternalTypes {
|
|
43
46
|
type CoValueKnownState = import("./sync.js").CoValueKnownState;
|
|
44
47
|
type DoneMessage = import("./sync.js").DoneMessage;
|
package/dist/index.js
CHANGED
|
@@ -3,12 +3,13 @@ import { LocalNode } from "./node.js";
|
|
|
3
3
|
import { CoMap, WriteableCoMap } from "./coValues/coMap.js";
|
|
4
4
|
import { CoList, WriteableCoList } from "./coValues/coList.js";
|
|
5
5
|
import { CoStream, WriteableCoStream, BinaryCoStream, WriteableBinaryCoStream, } from "./coValues/coStream.js";
|
|
6
|
-
import { agentSecretFromBytes, agentSecretToBytes, getAgentID, newRandomAgentSecret, newRandomSecretSeed, agentSecretFromSecretSeed, secretSeedLength, shortHashLength, } from "./crypto.js";
|
|
6
|
+
import { agentSecretFromBytes, agentSecretToBytes, getAgentID, newRandomAgentSecret, newRandomSecretSeed, agentSecretFromSecretSeed, secretSeedLength, shortHashLength, cryptoReady } from "./crypto.js";
|
|
7
7
|
import { connectedPeers } from "./streamUtils.js";
|
|
8
8
|
import { AnonymousControlledAccount, ControlledAccount } from "./account.js";
|
|
9
9
|
import { rawCoIDtoBytes, rawCoIDfromBytes } from "./ids.js";
|
|
10
10
|
import { Group, expectGroupContent } from "./group.js";
|
|
11
11
|
import { base64URLtoBytes, bytesToBase64url } from "./base64url.js";
|
|
12
|
+
import { parseJSON } from "./jsonStringify.js";
|
|
12
13
|
/** @hidden */
|
|
13
14
|
export const cojsonInternals = {
|
|
14
15
|
agentSecretFromBytes,
|
|
@@ -25,7 +26,8 @@ export const cojsonInternals = {
|
|
|
25
26
|
shortHashLength,
|
|
26
27
|
expectGroupContent,
|
|
27
28
|
base64URLtoBytes,
|
|
28
|
-
bytesToBase64url
|
|
29
|
+
bytesToBase64url,
|
|
30
|
+
parseJSON
|
|
29
31
|
};
|
|
30
|
-
export { LocalNode, Group, CoMap, WriteableCoMap, CoList, WriteableCoList, CoStream, WriteableCoStream, BinaryCoStream, WriteableBinaryCoStream, CoValueCore, AnonymousControlledAccount, ControlledAccount, };
|
|
32
|
+
export { LocalNode, Group, CoMap, WriteableCoMap, CoList, WriteableCoList, CoStream, WriteableCoStream, BinaryCoStream, WriteableBinaryCoStream, CoValueCore, AnonymousControlledAccount, ControlledAccount, cryptoReady as cojsonReady, };
|
|
31
33
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACH,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,uBAAuB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACH,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,uBAAuB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAc/C,cAAc;AACd,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;IAClB,oBAAoB;IACpB,cAAc;IACd,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,mBAAmB;IACnB,yBAAyB;IACzB,gBAAgB;IAChB,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;IAChB,SAAS;CACZ,CAAC;AAEF,OAAO,EACH,SAAS,EACT,KAAK,EACL,KAAK,EACL,cAAc,EACd,MAAM,EACN,eAAe,EACf,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,iBAAiB,EACjB,WAAW,IAAI,WAAW,GAC7B,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// adapted from fast-json-stable-stringify (https://github.com/epoberezkin/fast-json-stable-stringify)
|
|
2
|
+
export function stableStringify(data) {
|
|
3
|
+
const cycles = false;
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
+
const seen = [];
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
let node = data;
|
|
8
|
+
if (node && node.toJSON && typeof node.toJSON === "function") {
|
|
9
|
+
node = node.toJSON();
|
|
10
|
+
}
|
|
11
|
+
if (node === undefined)
|
|
12
|
+
return;
|
|
13
|
+
if (typeof node == "number")
|
|
14
|
+
return (isFinite(node) ? "" + node : "null");
|
|
15
|
+
if (typeof node !== "object") {
|
|
16
|
+
if (typeof node === "string" &&
|
|
17
|
+
(node.startsWith("encrypted_U") || node.startsWith("binary_U"))) {
|
|
18
|
+
return `"${node}"`;
|
|
19
|
+
}
|
|
20
|
+
return JSON.stringify(node);
|
|
21
|
+
}
|
|
22
|
+
let i, out;
|
|
23
|
+
if (Array.isArray(node)) {
|
|
24
|
+
out = "[";
|
|
25
|
+
for (i = 0; i < node.length; i++) {
|
|
26
|
+
if (i)
|
|
27
|
+
out += ",";
|
|
28
|
+
out += stableStringify(node[i]) || "null";
|
|
29
|
+
}
|
|
30
|
+
return (out + "]");
|
|
31
|
+
}
|
|
32
|
+
if (node === null)
|
|
33
|
+
return "null";
|
|
34
|
+
if (seen.indexOf(node) !== -1) {
|
|
35
|
+
if (cycles)
|
|
36
|
+
return JSON.stringify("__cycle__");
|
|
37
|
+
throw new TypeError("Converting circular structure to JSON");
|
|
38
|
+
}
|
|
39
|
+
const seenIndex = seen.push(node) - 1;
|
|
40
|
+
const keys = Object.keys(node).sort();
|
|
41
|
+
out = "";
|
|
42
|
+
for (i = 0; i < keys.length; i++) {
|
|
43
|
+
const key = keys[i];
|
|
44
|
+
const value = stableStringify(node[key]);
|
|
45
|
+
if (!value)
|
|
46
|
+
continue;
|
|
47
|
+
if (out)
|
|
48
|
+
out += ",";
|
|
49
|
+
out += JSON.stringify(key) + ":" + value;
|
|
50
|
+
}
|
|
51
|
+
seen.splice(seenIndex, 1);
|
|
52
|
+
return ("{" + out + "}");
|
|
53
|
+
}
|
|
54
|
+
export function parseJSON(json) {
|
|
55
|
+
return JSON.parse(json);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=jsonStringify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonStringify.js","sourceRoot":"","sources":["../src/jsonStringify.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAMtG,MAAM,UAAU,eAAe,CAAI,IAAmB;IAClD,MAAM,MAAM,GAAG,KAAK,CAAC;IAErB,8DAA8D;IAC9D,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,8DAA8D;IAC9D,IAAI,IAAI,GAAG,IAAW,CAAC;IAEvB,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;QAC1D,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;KACxB;IAED,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO;IAC/B,IAAI,OAAO,IAAI,IAAI,QAAQ;QACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAmB,CAAC;IACnE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,IACI,OAAO,IAAI,KAAK,QAAQ;YACxB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EACjE;YACE,OAAO,IAAI,IAAI,GAAqB,CAAC;SACxC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAmB,CAAC;KACjD;IAED,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,GAAG,GAAG,GAAG,CAAC;QACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,CAAC;gBAAE,GAAG,IAAI,GAAG,CAAC;YAClB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;SAC7C;QACD,OAAO,CAAC,GAAG,GAAG,GAAG,CAAmB,CAAC;KACxC;IAED,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,MAAwB,CAAC;IAEnD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;QAC3B,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAmB,CAAC;QACjE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;KAChE;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,GAAG,GAAG,EAAE,CAAC;IACT,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,GAAG;YAAE,GAAG,IAAI,GAAG,CAAC;QACpB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;KAC5C;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAmB,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,IAAoB;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
package/dist/jsonValue.d.ts
CHANGED
package/dist/media.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CoMap } from './coValues/coMap.js';
|
|
2
|
+
import { CoID } from './coValue.js';
|
|
3
|
+
import { BinaryCoStream } from './coValues/coStream.js';
|
|
4
|
+
export type ImageDefinition = CoMap<{
|
|
5
|
+
originalSize: [number, number];
|
|
6
|
+
placeholderDataURL?: string;
|
|
7
|
+
[res: `${number}x${number}`]: CoID<BinaryCoStream>;
|
|
8
|
+
}>;
|
package/dist/media.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":""}
|
package/dist/node.js
CHANGED
|
@@ -106,7 +106,7 @@ export class LocalNode {
|
|
|
106
106
|
resolve(role);
|
|
107
107
|
}
|
|
108
108
|
});
|
|
109
|
-
setTimeout(() => reject(new Error("Couldn't find invite before timeout")),
|
|
109
|
+
setTimeout(() => reject(new Error("Couldn't find invite before timeout")), 2000);
|
|
110
110
|
});
|
|
111
111
|
if (!inviteRole) {
|
|
112
112
|
throw new Error("No invite found");
|
package/dist/permissions.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { accountOrAgentIDfromSessionID, } from "./coValueCore.js";
|
|
2
|
+
import { parseJSON } from "./jsonStringify.js";
|
|
2
3
|
export function determineValidTransactions(coValue) {
|
|
3
4
|
if (coValue.header.ruleset.type === "group") {
|
|
4
5
|
const allTrustingTransactionsSorted = Object.entries(coValue.sessions).flatMap(([sessionID, sessionLog]) => {
|
|
@@ -26,8 +27,9 @@ export function determineValidTransactions(coValue) {
|
|
|
26
27
|
for (const { sessionID, txIndex, tx, } of allTrustingTransactionsSorted) {
|
|
27
28
|
// console.log("before", { memberState, validTransactions });
|
|
28
29
|
const transactor = accountOrAgentIDfromSessionID(sessionID);
|
|
29
|
-
const
|
|
30
|
-
|
|
30
|
+
const changes = parseJSON(tx.changes);
|
|
31
|
+
const change = changes[0];
|
|
32
|
+
if (changes.length !== 1) {
|
|
31
33
|
console.warn("Group transaction must have exactly one change");
|
|
32
34
|
continue;
|
|
33
35
|
}
|
package/dist/permissions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAMA,OAAO,EAIH,6BAA6B,GAChC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"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"}
|