cojson 0.7.0-alpha.7 → 0.7.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.
Files changed (113) hide show
  1. package/.eslintrc.cjs +3 -2
  2. package/.prettierrc.js +9 -0
  3. package/.turbo/turbo-build.log +3 -30
  4. package/.turbo/turbo-lint.log +4 -0
  5. package/.turbo/turbo-test.log +1106 -0
  6. package/CHANGELOG.md +98 -0
  7. package/README.md +3 -1
  8. package/dist/base64url.test.js +25 -0
  9. package/dist/base64url.test.js.map +1 -0
  10. package/dist/coValueCore.js +60 -37
  11. package/dist/coValueCore.js.map +1 -1
  12. package/dist/coValues/account.js +16 -15
  13. package/dist/coValues/account.js.map +1 -1
  14. package/dist/coValues/coList.js +1 -1
  15. package/dist/coValues/coList.js.map +1 -1
  16. package/dist/coValues/coMap.js +17 -8
  17. package/dist/coValues/coMap.js.map +1 -1
  18. package/dist/coValues/group.js +13 -14
  19. package/dist/coValues/group.js.map +1 -1
  20. package/dist/coreToCoValue.js.map +1 -1
  21. package/dist/crypto/PureJSCrypto.js +89 -0
  22. package/dist/crypto/PureJSCrypto.js.map +1 -0
  23. package/dist/crypto/WasmCrypto.js +127 -0
  24. package/dist/crypto/WasmCrypto.js.map +1 -0
  25. package/dist/crypto/crypto.js +151 -0
  26. package/dist/crypto/crypto.js.map +1 -0
  27. package/dist/ids.js +4 -2
  28. package/dist/ids.js.map +1 -1
  29. package/dist/index.js +6 -8
  30. package/dist/index.js.map +1 -1
  31. package/dist/jsonStringify.js.map +1 -1
  32. package/dist/localNode.js +41 -38
  33. package/dist/localNode.js.map +1 -1
  34. package/dist/permissions.js +6 -6
  35. package/dist/permissions.js.map +1 -1
  36. package/dist/storage/FileSystem.js +61 -0
  37. package/dist/storage/FileSystem.js.map +1 -0
  38. package/dist/storage/chunksAndKnownStates.js +97 -0
  39. package/dist/storage/chunksAndKnownStates.js.map +1 -0
  40. package/dist/storage/index.js +265 -0
  41. package/dist/storage/index.js.map +1 -0
  42. package/dist/sync.js +29 -25
  43. package/dist/sync.js.map +1 -1
  44. package/dist/tests/account.test.js +58 -0
  45. package/dist/tests/account.test.js.map +1 -0
  46. package/dist/tests/coList.test.js +76 -0
  47. package/dist/tests/coList.test.js.map +1 -0
  48. package/dist/tests/coMap.test.js +136 -0
  49. package/dist/tests/coMap.test.js.map +1 -0
  50. package/dist/tests/coStream.test.js +172 -0
  51. package/dist/tests/coStream.test.js.map +1 -0
  52. package/dist/tests/coValueCore.test.js +114 -0
  53. package/dist/tests/coValueCore.test.js.map +1 -0
  54. package/dist/tests/crypto.test.js +118 -0
  55. package/dist/tests/crypto.test.js.map +1 -0
  56. package/dist/tests/cryptoImpl.test.js +113 -0
  57. package/dist/tests/cryptoImpl.test.js.map +1 -0
  58. package/dist/tests/group.test.js +34 -0
  59. package/dist/tests/group.test.js.map +1 -0
  60. package/dist/tests/permissions.test.js +1060 -0
  61. package/dist/tests/permissions.test.js.map +1 -0
  62. package/dist/tests/sync.test.js +816 -0
  63. package/dist/tests/sync.test.js.map +1 -0
  64. package/dist/tests/testUtils.js +12 -11
  65. package/dist/tests/testUtils.js.map +1 -1
  66. package/dist/typeUtils/accountOrAgentIDfromSessionID.js.map +1 -1
  67. package/dist/typeUtils/isAccountID.js.map +1 -1
  68. package/dist/typeUtils/isCoValue.js.map +1 -1
  69. package/package.json +14 -27
  70. package/src/base64url.test.ts +6 -5
  71. package/src/coValue.ts +1 -1
  72. package/src/coValueCore.ts +179 -126
  73. package/src/coValues/account.ts +30 -32
  74. package/src/coValues/coList.ts +11 -11
  75. package/src/coValues/coMap.ts +27 -17
  76. package/src/coValues/coStream.ts +17 -17
  77. package/src/coValues/group.ts +93 -109
  78. package/src/coreToCoValue.ts +5 -2
  79. package/src/crypto/PureJSCrypto.ts +200 -0
  80. package/src/crypto/WasmCrypto.ts +259 -0
  81. package/src/crypto/crypto.ts +336 -0
  82. package/src/ids.ts +8 -7
  83. package/src/index.ts +24 -24
  84. package/src/jsonStringify.ts +6 -4
  85. package/src/jsonValue.ts +2 -2
  86. package/src/localNode.ts +103 -109
  87. package/src/media.ts +3 -3
  88. package/src/permissions.ts +19 -21
  89. package/src/storage/FileSystem.ts +152 -0
  90. package/src/storage/chunksAndKnownStates.ts +139 -0
  91. package/src/storage/index.ts +479 -0
  92. package/src/streamUtils.ts +12 -12
  93. package/src/sync.ts +79 -63
  94. package/src/tests/account.test.ts +15 -15
  95. package/src/tests/coList.test.ts +94 -0
  96. package/src/tests/coMap.test.ts +162 -0
  97. package/src/tests/coStream.test.ts +246 -0
  98. package/src/tests/coValueCore.test.ts +36 -37
  99. package/src/tests/crypto.test.ts +66 -72
  100. package/src/tests/cryptoImpl.test.ts +183 -0
  101. package/src/tests/group.test.ts +16 -17
  102. package/src/tests/permissions.test.ts +269 -283
  103. package/src/tests/sync.test.ts +122 -123
  104. package/src/tests/testUtils.ts +24 -21
  105. package/src/typeUtils/accountOrAgentIDfromSessionID.ts +1 -2
  106. package/src/typeUtils/expectGroup.ts +1 -1
  107. package/src/typeUtils/isAccountID.ts +0 -1
  108. package/src/typeUtils/isCoValue.ts +1 -2
  109. package/tsconfig.json +0 -1
  110. package/dist/crypto.js +0 -254
  111. package/dist/crypto.js.map +0 -1
  112. package/src/crypto.ts +0 -484
  113. package/src/tests/coValue.test.ts +0 -497
package/dist/crypto.js DELETED
@@ -1,254 +0,0 @@
1
- import { initBundledOnce, Ed25519SigningKey, Ed25519VerifyingKey, X25519StaticSecret, Memory, Ed25519Signature, X25519PublicKey, } from "@hazae41/berith";
2
- import { xsalsa20_poly1305, xsalsa20 } from "@noble/ciphers/salsa";
3
- import { base58 } from "@scure/base";
4
- import { randomBytes } from "@noble/ciphers/webcrypto/utils";
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
- throw new Error("cojson WASM dependencies not yet loaded; Make sure to import `cojsonReady` from `cojson` and await it before using any cojson functionality:\n\n" +
11
- 'import { cojsonReady } from "cojson";\n' +
12
- "await cojsonReady;\n\n");
13
- };
14
- let blake3HashOnceWithContext;
15
- let blake3incrementalUpdateSLOW_WITH_DEVTOOLS;
16
- let blake3digestForState;
17
- export const cryptoReady = Promise.all([
18
- new Promise((resolve) => {
19
- createBLAKE3()
20
- .then((bl3) => {
21
- blake3Instance = bl3;
22
- blake3HashOnce = (data) => {
23
- return bl3.init().update(data).digest("binary");
24
- };
25
- blake3HashOnceWithContext = (data, { context }) => {
26
- return bl3
27
- .init()
28
- .update(context)
29
- .update(data)
30
- .digest("binary");
31
- };
32
- blake3incrementalUpdateSLOW_WITH_DEVTOOLS = (state, data) => {
33
- bl3.load(state).update(data);
34
- return bl3.save();
35
- };
36
- blake3digestForState = (state) => {
37
- return bl3.load(state).digest("binary");
38
- };
39
- resolve();
40
- })
41
- .catch((e) => console.error("Failed to load cryptography dependencies", e));
42
- }),
43
- initBundledOnce(),
44
- ]);
45
- const textEncoder = new TextEncoder();
46
- const textDecoder = new TextDecoder();
47
- export function newRandomSigner() {
48
- return `signerSecret_z${base58.encode(new Ed25519SigningKey().to_bytes().copyAndDispose())}`;
49
- }
50
- export function signerSecretToBytes(secret) {
51
- return base58.decode(secret.substring("signerSecret_z".length));
52
- }
53
- export function signerSecretFromBytes(bytes) {
54
- return `signerSecret_z${base58.encode(bytes)}`;
55
- }
56
- export function getSignerID(secret) {
57
- return `signer_z${base58.encode(Ed25519SigningKey.from_bytes(new Memory(base58.decode(secret.substring("signerSecret_z".length))))
58
- .public()
59
- .to_bytes()
60
- .copyAndDispose())}`;
61
- }
62
- export function sign(secret, message) {
63
- const signature = Ed25519SigningKey.from_bytes(new Memory(base58.decode(secret.substring("signerSecret_z".length))))
64
- .sign(new Memory(textEncoder.encode(stableStringify(message))))
65
- .to_bytes()
66
- .copyAndDispose();
67
- return `signature_z${base58.encode(signature)}`;
68
- }
69
- export function verify(signature, message, id) {
70
- return new Ed25519VerifyingKey(new Memory(base58.decode(id.substring("signer_z".length)))).verify(new Memory(textEncoder.encode(stableStringify(message))), new Ed25519Signature(new Memory(base58.decode(signature.substring("signature_z".length)))));
71
- }
72
- export function newRandomSealer() {
73
- return `sealerSecret_z${base58.encode(new X25519StaticSecret().to_bytes().copyAndDispose())}`;
74
- }
75
- export function sealerSecretToBytes(secret) {
76
- return base58.decode(secret.substring("sealerSecret_z".length));
77
- }
78
- export function sealerSecretFromBytes(bytes) {
79
- return `sealerSecret_z${base58.encode(bytes)}`;
80
- }
81
- export function getSealerID(secret) {
82
- return `sealer_z${base58.encode(X25519StaticSecret.from_bytes(new Memory(base58.decode(secret.substring("sealerSecret_z".length))))
83
- .to_public()
84
- .to_bytes()
85
- .copyAndDispose())}`;
86
- }
87
- export function newRandomAgentSecret() {
88
- return `${newRandomSealer()}/${newRandomSigner()}`;
89
- }
90
- export function agentSecretToBytes(secret) {
91
- const [sealerSecret, signerSecret] = secret.split("/");
92
- return new Uint8Array([
93
- ...sealerSecretToBytes(sealerSecret),
94
- ...signerSecretToBytes(signerSecret),
95
- ]);
96
- }
97
- export function agentSecretFromBytes(bytes) {
98
- const sealerSecret = sealerSecretFromBytes(bytes.slice(0, 32));
99
- const signerSecret = signerSecretFromBytes(bytes.slice(32));
100
- return `${sealerSecret}/${signerSecret}`;
101
- }
102
- export function getAgentID(secret) {
103
- const [sealerSecret, signerSecret] = secret.split("/");
104
- return `${getSealerID(sealerSecret)}/${getSignerID(signerSecret)}`;
105
- }
106
- export function getAgentSignerID(agentId) {
107
- return agentId.split("/")[1];
108
- }
109
- export function getAgentSignerSecret(agentSecret) {
110
- return agentSecret.split("/")[1];
111
- }
112
- export function getAgentSealerID(agentId) {
113
- return agentId.split("/")[0];
114
- }
115
- export function getAgentSealerSecret(agentSecret) {
116
- return agentSecret.split("/")[0];
117
- }
118
- export function seal({ message, from, to, nOnceMaterial, }) {
119
- const nOnce = blake3HashOnce(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
120
- const sealerPub = base58.decode(to.substring("sealer_z".length));
121
- const senderPriv = base58.decode(from.substring("sealerSecret_z".length));
122
- const plaintext = textEncoder.encode(stableStringify(message));
123
- const sharedSecret = X25519StaticSecret.from_bytes(new Memory(senderPriv))
124
- .diffie_hellman(X25519PublicKey.from_bytes(new Memory(sealerPub)))
125
- .to_bytes()
126
- .copyAndDispose();
127
- const sealedBytes = xsalsa20_poly1305(sharedSecret, nOnce).encrypt(plaintext);
128
- return `sealed_U${bytesToBase64url(sealedBytes)}`;
129
- }
130
- export function unseal(sealed, sealer, from, nOnceMaterial) {
131
- const nOnce = blake3HashOnce(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
132
- const sealerPriv = base58.decode(sealer.substring("sealerSecret_z".length));
133
- const senderPub = base58.decode(from.substring("sealer_z".length));
134
- const sealedBytes = base64URLtoBytes(sealed.substring("sealed_U".length));
135
- const sharedSecret = X25519StaticSecret.from_bytes(new Memory(sealerPriv))
136
- .diffie_hellman(X25519PublicKey.from_bytes(new Memory(senderPub)))
137
- .to_bytes()
138
- .copyAndDispose();
139
- const plaintext = xsalsa20_poly1305(sharedSecret, nOnce).decrypt(sealedBytes);
140
- try {
141
- return JSON.parse(textDecoder.decode(plaintext));
142
- }
143
- catch (e) {
144
- console.error("Failed to decrypt/parse sealed message", e);
145
- return undefined;
146
- }
147
- }
148
- export function secureHash(value) {
149
- return `hash_z${base58.encode(blake3HashOnce(textEncoder.encode(stableStringify(value))))}`;
150
- }
151
- export class StreamingHash {
152
- constructor(fromClone) {
153
- this.state = fromClone || blake3Instance.init().save();
154
- }
155
- update(value) {
156
- const encoded = textEncoder.encode(stableStringify(value));
157
- // const before = performance.now();
158
- this.state = blake3incrementalUpdateSLOW_WITH_DEVTOOLS(this.state, encoded);
159
- // const after = performance.now();
160
- // console.log(`Hashing throughput in MB/s`, 1000 * (encoded.length / (after - before)) / (1024 * 1024));
161
- }
162
- digest() {
163
- const hash = blake3digestForState(this.state);
164
- return `hash_z${base58.encode(hash)}`;
165
- }
166
- clone() {
167
- return new StreamingHash(new Uint8Array(this.state));
168
- }
169
- }
170
- export const shortHashLength = 19;
171
- export function shortHash(value) {
172
- return `shortHash_z${base58.encode(blake3HashOnce(textEncoder.encode(stableStringify(value))).slice(0, shortHashLength))}`;
173
- }
174
- export function newRandomKeySecret() {
175
- return {
176
- secret: `keySecret_z${base58.encode(randomBytes(32))}`,
177
- id: `key_z${base58.encode(randomBytes(12))}`,
178
- };
179
- }
180
- function encrypt(value, keySecret, nOnceMaterial) {
181
- const keySecretBytes = base58.decode(keySecret.substring("keySecret_z".length));
182
- const nOnce = blake3HashOnce(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
183
- const plaintext = textEncoder.encode(stableStringify(value));
184
- const ciphertext = xsalsa20(keySecretBytes, nOnce, plaintext);
185
- return `encrypted_U${bytesToBase64url(ciphertext)}`;
186
- }
187
- export function encryptForTransaction(value, keySecret, nOnceMaterial) {
188
- return encrypt(value, keySecret, nOnceMaterial);
189
- }
190
- export function encryptKeySecret(keys) {
191
- const nOnceMaterial = {
192
- encryptedID: keys.toEncrypt.id,
193
- encryptingID: keys.encrypting.id,
194
- };
195
- return {
196
- encryptedID: keys.toEncrypt.id,
197
- encryptingID: keys.encrypting.id,
198
- encrypted: encrypt(keys.toEncrypt.secret, keys.encrypting.secret, nOnceMaterial),
199
- };
200
- }
201
- function decryptRaw(encrypted, keySecret, nOnceMaterial) {
202
- const keySecretBytes = base58.decode(keySecret.substring("keySecret_z".length));
203
- const nOnce = blake3HashOnce(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
204
- const ciphertext = base64URLtoBytes(encrypted.substring("encrypted_U".length));
205
- const plaintext = xsalsa20(keySecretBytes, nOnce, ciphertext);
206
- return textDecoder.decode(plaintext);
207
- }
208
- function decrypt(encrypted, keySecret, nOnceMaterial) {
209
- try {
210
- return parseJSON(decryptRaw(encrypted, keySecret, nOnceMaterial));
211
- }
212
- catch (e) {
213
- console.error("Decryption error", e);
214
- return undefined;
215
- }
216
- }
217
- export function decryptRawForTransaction(encrypted, keySecret, nOnceMaterial) {
218
- return decryptRaw(encrypted, keySecret, nOnceMaterial);
219
- }
220
- export function decryptForTransaction(encrypted, keySecret, nOnceMaterial) {
221
- return decrypt(encrypted, keySecret, nOnceMaterial);
222
- }
223
- export function decryptKeySecret(encryptedInfo, sealingSecret) {
224
- const nOnceMaterial = {
225
- encryptedID: encryptedInfo.encryptedID,
226
- encryptingID: encryptedInfo.encryptingID,
227
- };
228
- return decrypt(encryptedInfo.encrypted, sealingSecret, nOnceMaterial);
229
- }
230
- export function uniquenessForHeader() {
231
- return `z${base58.encode(randomBytes(12))}`;
232
- }
233
- export function createdNowUnique() {
234
- const createdAt = new Date().toISOString();
235
- return {
236
- createdAt,
237
- uniqueness: uniquenessForHeader(),
238
- };
239
- }
240
- export const secretSeedLength = 32;
241
- export function newRandomSecretSeed() {
242
- return randomBytes(secretSeedLength);
243
- }
244
- export function agentSecretFromSecretSeed(secretSeed) {
245
- if (secretSeed.length !== secretSeedLength) {
246
- throw new Error(`Secret seed needs to be ${secretSeedLength} bytes long`);
247
- }
248
- return `sealerSecret_z${base58.encode(blake3HashOnceWithContext(secretSeed, {
249
- context: textEncoder.encode("seal"),
250
- }))}/signerSecret_z${base58.encode(blake3HashOnceWithContext(secretSeed, {
251
- context: textEncoder.encode("sign"),
252
- }))}`;
253
- }
254
- //# sourceMappingURL=crypto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}