cojson 0.0.11 → 0.0.13
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/README.md +2 -2
- package/dist/account.d.ts +57 -0
- package/dist/account.js +76 -0
- package/dist/account.js.map +1 -0
- package/dist/account.test.d.ts +1 -0
- package/dist/account.test.js +40 -0
- package/dist/account.test.js.map +1 -0
- package/dist/coValue.d.ts +17 -36
- package/dist/coValue.js +53 -117
- package/dist/coValue.js.map +1 -1
- package/dist/coValue.test.js +16 -16
- package/dist/coValue.test.js.map +1 -1
- package/dist/contentType.d.ts +9 -9
- package/dist/contentType.js.map +1 -1
- package/dist/contentType.test.js +13 -17
- package/dist/contentType.test.js.map +1 -1
- package/dist/contentTypes/coList.d.ts +3 -3
- package/dist/contentTypes/coList.js.map +1 -1
- package/dist/contentTypes/coMap.d.ts +31 -21
- package/dist/contentTypes/coMap.js +28 -0
- package/dist/contentTypes/coMap.js.map +1 -1
- package/dist/contentTypes/coStream.d.ts +3 -3
- package/dist/contentTypes/coStream.js.map +1 -1
- package/dist/contentTypes/static.d.ts +4 -4
- package/dist/contentTypes/static.js.map +1 -1
- package/dist/crypto.d.ts +45 -39
- package/dist/crypto.js +68 -49
- package/dist/crypto.js.map +1 -1
- package/dist/crypto.test.js +45 -49
- package/dist/crypto.test.js.map +1 -1
- package/dist/ids.d.ts +5 -3
- package/dist/ids.js +3 -1
- package/dist/ids.js.map +1 -1
- package/dist/index.d.ts +12 -14
- package/dist/index.js +6 -8
- package/dist/index.js.map +1 -1
- package/dist/jsonValue.d.ts +2 -2
- package/dist/node.d.ts +25 -15
- package/dist/node.js +88 -33
- package/dist/node.js.map +1 -1
- package/dist/permissions.d.ts +27 -33
- package/dist/permissions.js +55 -47
- package/dist/permissions.js.map +1 -1
- package/dist/permissions.test.js +231 -314
- package/dist/permissions.test.js.map +1 -1
- package/dist/sync.d.ts +27 -30
- package/dist/sync.js +68 -64
- package/dist/sync.js.map +1 -1
- package/dist/sync.test.js +181 -305
- package/dist/sync.test.js.map +1 -1
- package/dist/testUtils.d.ts +37 -0
- package/dist/testUtils.js +157 -0
- package/dist/testUtils.js.map +1 -0
- package/package.json +1 -1
- package/src/account.test.ts +67 -0
- package/src/account.ts +152 -0
- package/src/coValue.test.ts +17 -31
- package/src/coValue.ts +98 -185
- package/src/contentType.test.ts +18 -45
- package/src/contentType.ts +15 -13
- package/src/contentTypes/coList.ts +4 -4
- package/src/contentTypes/coMap.ts +55 -29
- package/src/contentTypes/coStream.ts +4 -4
- package/src/contentTypes/static.ts +5 -5
- package/src/crypto.test.ts +53 -59
- package/src/crypto.ts +123 -95
- package/src/ids.ts +9 -3
- package/src/index.ts +14 -25
- package/src/jsonValue.ts +2 -2
- package/src/node.ts +189 -61
- package/src/permissions.test.ts +370 -404
- package/src/permissions.ts +126 -109
- package/src/sync.test.ts +262 -440
- package/src/sync.ts +96 -101
- package/src/testUtils.ts +229 -0
package/dist/crypto.js
CHANGED
|
@@ -6,64 +6,83 @@ import { blake3 } from "@noble/hashes/blake3";
|
|
|
6
6
|
import { randomBytes } from "@noble/ciphers/webcrypto/utils";
|
|
7
7
|
const textEncoder = new TextEncoder();
|
|
8
8
|
const textDecoder = new TextDecoder();
|
|
9
|
-
export function
|
|
10
|
-
return `
|
|
9
|
+
export function newRandomSigner() {
|
|
10
|
+
return `signerSecret_z${base58.encode(ed25519.utils.randomPrivateKey())}`;
|
|
11
11
|
}
|
|
12
|
-
export function
|
|
13
|
-
return base58.decode(secret.substring("
|
|
12
|
+
export function signerSecretToBytes(secret) {
|
|
13
|
+
return base58.decode(secret.substring("signerSecret_z".length));
|
|
14
14
|
}
|
|
15
|
-
export function
|
|
16
|
-
return `
|
|
15
|
+
export function signerSecretFromBytes(bytes) {
|
|
16
|
+
return `signerSecret_z${base58.encode(bytes)}`;
|
|
17
17
|
}
|
|
18
|
-
export function
|
|
19
|
-
return `
|
|
18
|
+
export function getSignerID(secret) {
|
|
19
|
+
return `signer_z${base58.encode(ed25519.getPublicKey(base58.decode(secret.substring("signerSecret_z".length))))}`;
|
|
20
20
|
}
|
|
21
21
|
export function sign(secret, message) {
|
|
22
|
-
const signature = ed25519.sign(textEncoder.encode(stableStringify(message)), base58.decode(secret.substring("
|
|
22
|
+
const signature = ed25519.sign(textEncoder.encode(stableStringify(message)), base58.decode(secret.substring("signerSecret_z".length)));
|
|
23
23
|
return `signature_z${base58.encode(signature)}`;
|
|
24
24
|
}
|
|
25
25
|
export function verify(signature, message, id) {
|
|
26
|
-
return ed25519.verify(base58.decode(signature.substring("signature_z".length)), textEncoder.encode(stableStringify(message)), base58.decode(id.substring("
|
|
26
|
+
return ed25519.verify(base58.decode(signature.substring("signature_z".length)), textEncoder.encode(stableStringify(message)), base58.decode(id.substring("signer_z".length)));
|
|
27
27
|
}
|
|
28
|
-
export function
|
|
29
|
-
return `
|
|
28
|
+
export function newRandomSealer() {
|
|
29
|
+
return `sealerSecret_z${base58.encode(x25519.utils.randomPrivateKey())}`;
|
|
30
30
|
}
|
|
31
|
-
export function
|
|
32
|
-
return base58.decode(secret.substring("
|
|
31
|
+
export function sealerSecretToBytes(secret) {
|
|
32
|
+
return base58.decode(secret.substring("sealerSecret_z".length));
|
|
33
33
|
}
|
|
34
|
-
export function
|
|
35
|
-
return `
|
|
34
|
+
export function sealerSecretFromBytes(bytes) {
|
|
35
|
+
return `sealerSecret_z${base58.encode(bytes)}`;
|
|
36
36
|
}
|
|
37
|
-
export function
|
|
38
|
-
return `
|
|
37
|
+
export function getSealerID(secret) {
|
|
38
|
+
return `sealer_z${base58.encode(x25519.getPublicKey(base58.decode(secret.substring("sealerSecret_z".length))))}`;
|
|
39
|
+
}
|
|
40
|
+
export function newRandomAgentSecret() {
|
|
41
|
+
return `${newRandomSealer()}/${newRandomSigner()}`;
|
|
42
|
+
}
|
|
43
|
+
export function agentSecretToBytes(secret) {
|
|
44
|
+
const [sealerSecret, signerSecret] = secret.split("/");
|
|
45
|
+
return new Uint8Array([
|
|
46
|
+
...sealerSecretToBytes(sealerSecret),
|
|
47
|
+
...signerSecretToBytes(signerSecret),
|
|
48
|
+
]);
|
|
49
|
+
}
|
|
50
|
+
export function agentSecretFromBytes(bytes) {
|
|
51
|
+
const sealerSecret = sealerSecretFromBytes(bytes.slice(0, 32));
|
|
52
|
+
const signerSecret = signerSecretFromBytes(bytes.slice(32));
|
|
53
|
+
return `${sealerSecret}/${signerSecret}`;
|
|
54
|
+
}
|
|
55
|
+
export function getAgentID(secret) {
|
|
56
|
+
const [sealerSecret, signerSecret] = secret.split("/");
|
|
57
|
+
return `${getSealerID(sealerSecret)}/${getSignerID(signerSecret)}`;
|
|
58
|
+
}
|
|
59
|
+
export function getAgentSignerID(agentId) {
|
|
60
|
+
return agentId.split("/")[1];
|
|
61
|
+
}
|
|
62
|
+
export function getAgentSignerSecret(agentSecret) {
|
|
63
|
+
return agentSecret.split("/")[1];
|
|
64
|
+
}
|
|
65
|
+
export function getAgentSealerID(agentId) {
|
|
66
|
+
return agentId.split("/")[0];
|
|
67
|
+
}
|
|
68
|
+
export function getAgentSealerSecret(agentSecret) {
|
|
69
|
+
return agentSecret.split("/")[0];
|
|
39
70
|
}
|
|
40
71
|
export function seal(message, from, to, nOnceMaterial) {
|
|
41
72
|
const nOnce = blake3(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
return base58.decode(recipient.substring("recipient_z".length));
|
|
45
|
-
});
|
|
46
|
-
const senderPriv = base58.decode(from.substring("recipientSecret_z".length));
|
|
73
|
+
const sealerPub = base58.decode(to.substring("sealer_z".length));
|
|
74
|
+
const senderPriv = base58.decode(from.substring("sealerSecret_z".length));
|
|
47
75
|
const plaintext = textEncoder.encode(stableStringify(message));
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const sharedSecret = x25519.getSharedSecret(senderPriv, recipientPubs[i]);
|
|
52
|
-
const sealedBytes = xsalsa20_poly1305(sharedSecret, nOnce).encrypt(plaintext);
|
|
53
|
-
sealedSet[recipient] = `sealed_U${base64url.encode(sealedBytes)}`;
|
|
54
|
-
}
|
|
55
|
-
return sealedSet;
|
|
76
|
+
const sharedSecret = x25519.getSharedSecret(senderPriv, sealerPub);
|
|
77
|
+
const sealedBytes = xsalsa20_poly1305(sharedSecret, nOnce).encrypt(plaintext);
|
|
78
|
+
return `sealed_U${base64url.encode(sealedBytes)}`;
|
|
56
79
|
}
|
|
57
|
-
export function
|
|
80
|
+
export function unseal(sealed, sealer, from, nOnceMaterial) {
|
|
58
81
|
const nOnce = blake3(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
|
|
59
|
-
const
|
|
60
|
-
const senderPub = base58.decode(from.substring("
|
|
61
|
-
const sealed = sealedSet[getRecipientID(recipient)];
|
|
62
|
-
if (!sealed) {
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
82
|
+
const sealerPriv = base58.decode(sealer.substring("sealerSecret_z".length));
|
|
83
|
+
const senderPub = base58.decode(from.substring("sealer_z".length));
|
|
65
84
|
const sealedBytes = base64url.decode(sealed.substring("sealed_U".length));
|
|
66
|
-
const sharedSecret = x25519.getSharedSecret(
|
|
85
|
+
const sharedSecret = x25519.getSharedSecret(sealerPriv, senderPub);
|
|
67
86
|
const plaintext = xsalsa20_poly1305(sharedSecret, nOnce).decrypt(sealedBytes);
|
|
68
87
|
try {
|
|
69
88
|
return JSON.parse(textDecoder.decode(plaintext));
|
|
@@ -110,15 +129,15 @@ function encrypt(value, keySecret, nOnceMaterial) {
|
|
|
110
129
|
export function encryptForTransaction(value, keySecret, nOnceMaterial) {
|
|
111
130
|
return encrypt(value, keySecret, nOnceMaterial);
|
|
112
131
|
}
|
|
113
|
-
export function
|
|
132
|
+
export function encryptKeySecret(keys) {
|
|
114
133
|
const nOnceMaterial = {
|
|
115
|
-
|
|
116
|
-
|
|
134
|
+
encryptedID: keys.toEncrypt.id,
|
|
135
|
+
encryptingID: keys.encrypting.id,
|
|
117
136
|
};
|
|
118
137
|
return {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
encrypted: encrypt(keys.
|
|
138
|
+
encryptedID: keys.toEncrypt.id,
|
|
139
|
+
encryptingID: keys.encrypting.id,
|
|
140
|
+
encrypted: encrypt(keys.toEncrypt.secret, keys.encrypting.secret, nOnceMaterial),
|
|
122
141
|
};
|
|
123
142
|
}
|
|
124
143
|
function decrypt(encrypted, keySecret, nOnceMaterial) {
|
|
@@ -136,12 +155,12 @@ function decrypt(encrypted, keySecret, nOnceMaterial) {
|
|
|
136
155
|
export function decryptForTransaction(encrypted, keySecret, nOnceMaterial) {
|
|
137
156
|
return decrypt(encrypted, keySecret, nOnceMaterial);
|
|
138
157
|
}
|
|
139
|
-
export function
|
|
158
|
+
export function decryptKeySecret(encryptedInfo, sealingSecret) {
|
|
140
159
|
const nOnceMaterial = {
|
|
141
|
-
|
|
142
|
-
|
|
160
|
+
encryptedID: encryptedInfo.encryptedID,
|
|
161
|
+
encryptingID: encryptedInfo.encryptingID,
|
|
143
162
|
};
|
|
144
|
-
return decrypt(
|
|
163
|
+
return decrypt(encryptedInfo.encrypted, sealingSecret, nOnceMaterial);
|
|
145
164
|
}
|
|
146
165
|
export function uniquenessForHeader() {
|
|
147
166
|
return `z${base58.encode(randomBytes(12))}`;
|
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,SAAS,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;
|
|
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,SAAS,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAa7D,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,MAAM,UAAU,eAAe;IAC3B,OAAO,iBAAiB,MAAM,CAAC,MAAM,CACjC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CACnC,EAAE,CAAC;AACR,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAiB;IACnD,OAAO,iBAAiB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC5C,OAAO,WAAW,MAAM,CAAC,MAAM,CAC3B,OAAO,CAAC,YAAY,CAChB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAC3D,CACJ,EAAE,CAAC;AACR,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,MAAoB,EAAE,OAAkB;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC1B,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAC3D,CAAC;IACF,OAAO,cAAc,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,MAAM,CAClB,SAAoB,EACpB,OAAkB,EAClB,EAAY;IAEZ,OAAO,OAAO,CAAC,MAAM,CACjB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EACxD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAC5C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CACjD,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe;IAC3B,OAAO,iBAAiB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAiB;IACnD,OAAO,iBAAiB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC5C,OAAO,WAAW,MAAM,CAAC,MAAM,CAC3B,MAAM,CAAC,YAAY,CACf,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAC3D,CACJ,EAAE,CAAC;AACR,CAAC;AAED,MAAM,UAAU,oBAAoB;IAChC,OAAO,GAAG,eAAe,EAAE,IAAI,eAAe,EAAE,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IAClD,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvD,OAAO,IAAI,UAAU,CAAC;QAClB,GAAG,mBAAmB,CAAC,YAA4B,CAAC;QACpD,GAAG,mBAAmB,CAAC,YAA4B,CAAC;KACvD,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAiB;IAClD,MAAM,YAAY,GAAG,qBAAqB,CACtC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CACrB,CAAC;IACF,MAAM,YAAY,GAAG,qBAAqB,CACtC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAClB,CAAC;IACF,OAAO,GAAG,YAAY,IAAI,YAAY,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC1C,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvD,OAAO,GAAG,WAAW,CACjB,YAA4B,CAC/B,IAAI,WAAW,CAAC,YAA4B,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC7C,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAa,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAwB;IACzD,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAiB,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC7C,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAa,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAwB;IACzD,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAiB,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,IAAI,CAChB,OAAU,EACV,IAAkB,EAClB,EAAY,EACZ,aAAiD;IAEjD,MAAM,KAAK,GAAG,MAAM,CAChB,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CACrD,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEf,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC5B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAC1C,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/D,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CACvC,UAAU,EACV,SAAS,CACZ,CAAC;IAEF,MAAM,WAAW,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,OAAO,CAC9D,SAAS,CACZ,CAAC;IAEF,OAAO,WAAW,SAAS,CAAC,MAAM,CAC9B,WAAW,CACd,EAAe,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,MAAM,CAClB,MAAiB,EACjB,MAAoB,EACpB,IAAc,EACd,aAAiD;IAEjD,MAAM,KAAK,GAAG,MAAM,CAChB,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CACrD,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEf,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC5B,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAC5C,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1E,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAEnE,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,OAAO,CAC5D,WAAW,CACd,CAAC;IAEF,IAAI;QACA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;KACpD;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAID,MAAM,UAAU,UAAU,CAAC,KAAgB;IACvC,OAAO,SAAS,MAAM,CAAC,MAAM,CACzB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CACrD,EAAE,CAAC;AACR,CAAC;AAED,MAAM,OAAO,aAAa;IAGtB,YAAY,SAA4C;QACpD,IAAI,CAAC,KAAK,GAAG,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,KAAgB;QACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,MAAM;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,SAAS,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK;QACD,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;CACJ;AAID,MAAM,UAAU,SAAS,CAAC,KAAgB;IACtC,OAAO,cAAc,MAAM,CAAC,MAAM,CAC9B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAClE,EAAE,CAAC;AACR,CAAC;AAUD,MAAM,UAAU,kBAAkB;IAC9B,OAAO;QACH,MAAM,EAAE,cAAc,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE;QACtD,EAAE,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE;KAC/C,CAAC;AACN,CAAC;AAED,SAAS,OAAO,CACZ,KAAQ,EACR,SAAoB,EACpB,aAAgB;IAEhB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAChC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAC5C,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAChB,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CACrD,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEf,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9D,OAAO,cAAc,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAqB,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACjC,KAAQ,EACR,SAAoB,EACpB,aAAiD;IAEjD,OAAO,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAGhC;IAKG,MAAM,aAAa,GAAG;QAClB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;QAC9B,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;KACnC,CAAC;IAEF,OAAO;QACH,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;QAC9B,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;QAChC,SAAS,EAAE,OAAO,CACd,IAAI,CAAC,SAAS,CAAC,MAAM,EACrB,IAAI,CAAC,UAAU,CAAC,MAAM,EACtB,aAAa,CAChB;KACJ,CAAC;AACN,CAAC;AAED,SAAS,OAAO,CACZ,SAA0B,EAC1B,SAAoB,EACpB,aAAgB;IAEhB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAChC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAC5C,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAChB,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CACrD,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEf,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAC/B,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAC5C,CAAC;IACF,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAE9D,IAAI;QACA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;KACpD;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CACjC,SAA2D,EAC3D,SAAoB,EACpB,aAAiD;IAEjD,OAAO,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,aAIC,EACD,aAAwB;IAExB,MAAM,aAAa,GAAG;QAClB,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,YAAY,EAAE,aAAa,CAAC,YAAY;KAC3C,CAAC;IAEF,OAAO,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC5B,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAkB,CAAC;IAC7D,OAAO;QACH,SAAS;QACT,UAAU,EAAE,mBAAmB,EAAE;KACpC,CAAA;AACL,CAAC"}
|
package/dist/crypto.test.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getSealerID, getSignerID, secureHash, newRandomSealer, newRandomSigner, seal, sign, unseal, verify, shortHash, newRandomKeySecret, encryptForTransaction, decryptForTransaction, encryptKeySecret, decryptKeySecret, } from './crypto.js';
|
|
2
2
|
import { base58, base64url } from "@scure/base";
|
|
3
3
|
import { x25519 } from "@noble/curves/ed25519";
|
|
4
4
|
import { xsalsa20_poly1305 } from "@noble/ciphers/salsa";
|
|
@@ -6,40 +6,36 @@ import { blake3 } from "@noble/hashes/blake3";
|
|
|
6
6
|
import stableStringify from "fast-json-stable-stringify";
|
|
7
7
|
test("Signatures round-trip and use stable stringify", () => {
|
|
8
8
|
const data = { b: "world", a: "hello" };
|
|
9
|
-
const
|
|
10
|
-
const signature = sign(
|
|
9
|
+
const signer = newRandomSigner();
|
|
10
|
+
const signature = sign(signer, data);
|
|
11
11
|
expect(signature).toMatch(/^signature_z/);
|
|
12
|
-
expect(verify(signature, { a: "hello", b: "world" },
|
|
12
|
+
expect(verify(signature, { a: "hello", b: "world" }, getSignerID(signer))).toBe(true);
|
|
13
13
|
});
|
|
14
14
|
test("Invalid signatures don't verify", () => {
|
|
15
15
|
const data = { b: "world", a: "hello" };
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const wrongSignature = sign(
|
|
19
|
-
expect(verify(wrongSignature, data,
|
|
16
|
+
const signer = newRandomSigner();
|
|
17
|
+
const signer2 = newRandomSigner();
|
|
18
|
+
const wrongSignature = sign(signer2, data);
|
|
19
|
+
expect(verify(wrongSignature, data, getSignerID(signer))).toBe(false);
|
|
20
20
|
});
|
|
21
|
-
test("
|
|
21
|
+
test("encrypting round-trips, but invalid receiver can't unseal", () => {
|
|
22
22
|
const data = { b: "world", a: "hello" };
|
|
23
|
-
const sender =
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const recipient3 = newRandomRecipient();
|
|
23
|
+
const sender = newRandomSealer();
|
|
24
|
+
const sealer = newRandomSealer();
|
|
25
|
+
const wrongSealer = newRandomSealer();
|
|
27
26
|
const nOnceMaterial = {
|
|
28
27
|
in: "co_zTEST",
|
|
29
|
-
tx: { sessionID: "
|
|
28
|
+
tx: { sessionID: "co_zTEST_session_zTEST", txIndex: 0 },
|
|
30
29
|
};
|
|
31
|
-
const sealed = seal(data, sender,
|
|
32
|
-
expect(sealed
|
|
33
|
-
expect(sealed
|
|
34
|
-
|
|
35
|
-
expect(openAs(sealed, recipient2, getRecipientID(sender), nOnceMaterial)).toEqual(data);
|
|
36
|
-
expect(openAs(sealed, recipient3, getRecipientID(sender), nOnceMaterial)).toBeUndefined();
|
|
37
|
-
// trying with wrong recipient secret, by hand
|
|
30
|
+
const sealed = seal(data, sender, getSealerID(sealer), nOnceMaterial);
|
|
31
|
+
expect(unseal(sealed, sealer, getSealerID(sender), nOnceMaterial)).toEqual(data);
|
|
32
|
+
expect(() => unseal(sealed, wrongSealer, getSealerID(sender), nOnceMaterial)).toThrow(/Wrong tag/);
|
|
33
|
+
// trying with wrong sealer secret, by hand
|
|
38
34
|
const nOnce = blake3(new TextEncoder().encode(stableStringify(nOnceMaterial))).slice(0, 24);
|
|
39
|
-
const
|
|
40
|
-
const senderPub = base58.decode(
|
|
41
|
-
const sealedBytes = base64url.decode(sealed
|
|
42
|
-
const sharedSecret = x25519.getSharedSecret(
|
|
35
|
+
const sealer3priv = base58.decode(wrongSealer.substring("sealerSecret_z".length));
|
|
36
|
+
const senderPub = base58.decode(getSealerID(sender).substring("sealer_z".length));
|
|
37
|
+
const sealedBytes = base64url.decode(sealed.substring("sealed_U".length));
|
|
38
|
+
const sharedSecret = x25519.getSharedSecret(sealer3priv, senderPub);
|
|
43
39
|
expect(() => {
|
|
44
40
|
const _ = xsalsa20_poly1305(sharedSecret, nOnce).decrypt(sealedBytes);
|
|
45
41
|
}).toThrow("Wrong tag");
|
|
@@ -52,19 +48,19 @@ test("Encryption for transactions round-trips", () => {
|
|
|
52
48
|
const { secret } = newRandomKeySecret();
|
|
53
49
|
const encrypted1 = encryptForTransaction({ a: "hello" }, secret, {
|
|
54
50
|
in: "co_zTEST",
|
|
55
|
-
tx: { sessionID: "
|
|
51
|
+
tx: { sessionID: "co_zTEST_session_zTEST", txIndex: 0 },
|
|
56
52
|
});
|
|
57
53
|
const encrypted2 = encryptForTransaction({ b: "world" }, secret, {
|
|
58
54
|
in: "co_zTEST",
|
|
59
|
-
tx: { sessionID: "
|
|
55
|
+
tx: { sessionID: "co_zTEST_session_zTEST", txIndex: 1 },
|
|
60
56
|
});
|
|
61
57
|
const decrypted1 = decryptForTransaction(encrypted1, secret, {
|
|
62
58
|
in: "co_zTEST",
|
|
63
|
-
tx: { sessionID: "
|
|
59
|
+
tx: { sessionID: "co_zTEST_session_zTEST", txIndex: 0 },
|
|
64
60
|
});
|
|
65
61
|
const decrypted2 = decryptForTransaction(encrypted2, secret, {
|
|
66
62
|
in: "co_zTEST",
|
|
67
|
-
tx: { sessionID: "
|
|
63
|
+
tx: { sessionID: "co_zTEST_session_zTEST", txIndex: 1 },
|
|
68
64
|
});
|
|
69
65
|
expect([decrypted1, decrypted2]).toEqual([{ a: "hello" }, { b: "world" }]);
|
|
70
66
|
});
|
|
@@ -73,43 +69,43 @@ test("Encryption for transactions doesn't decrypt with a wrong key", () => {
|
|
|
73
69
|
const { secret: secret2 } = newRandomKeySecret();
|
|
74
70
|
const encrypted1 = encryptForTransaction({ a: "hello" }, secret, {
|
|
75
71
|
in: "co_zTEST",
|
|
76
|
-
tx: { sessionID: "
|
|
72
|
+
tx: { sessionID: "co_zTEST_session_zTEST", txIndex: 0 },
|
|
77
73
|
});
|
|
78
74
|
const encrypted2 = encryptForTransaction({ b: "world" }, secret, {
|
|
79
75
|
in: "co_zTEST",
|
|
80
|
-
tx: { sessionID: "
|
|
76
|
+
tx: { sessionID: "co_zTEST_session_zTEST", txIndex: 1 },
|
|
81
77
|
});
|
|
82
78
|
const decrypted1 = decryptForTransaction(encrypted1, secret2, {
|
|
83
79
|
in: "co_zTEST",
|
|
84
|
-
tx: { sessionID: "
|
|
80
|
+
tx: { sessionID: "co_zTEST_session_zTEST", txIndex: 0 },
|
|
85
81
|
});
|
|
86
82
|
const decrypted2 = decryptForTransaction(encrypted2, secret2, {
|
|
87
83
|
in: "co_zTEST",
|
|
88
|
-
tx: { sessionID: "
|
|
84
|
+
tx: { sessionID: "co_zTEST_session_zTEST", txIndex: 1 },
|
|
89
85
|
});
|
|
90
86
|
expect([decrypted1, decrypted2]).toEqual([undefined, undefined]);
|
|
91
87
|
});
|
|
92
88
|
test("Encryption of keySecrets round-trips", () => {
|
|
93
|
-
const
|
|
94
|
-
const
|
|
89
|
+
const toEncrypt = newRandomKeySecret();
|
|
90
|
+
const encrypting = newRandomKeySecret();
|
|
95
91
|
const keys = {
|
|
96
|
-
|
|
97
|
-
|
|
92
|
+
toEncrypt,
|
|
93
|
+
encrypting,
|
|
98
94
|
};
|
|
99
|
-
const
|
|
100
|
-
const
|
|
101
|
-
expect(
|
|
95
|
+
const encrypted = encryptKeySecret(keys);
|
|
96
|
+
const decrypted = decryptKeySecret(encrypted, encrypting.secret);
|
|
97
|
+
expect(decrypted).toEqual(toEncrypt.secret);
|
|
102
98
|
});
|
|
103
|
-
test("Encryption of keySecrets doesn't
|
|
104
|
-
const
|
|
105
|
-
const
|
|
106
|
-
const
|
|
99
|
+
test("Encryption of keySecrets doesn't decrypt with a wrong key", () => {
|
|
100
|
+
const toEncrypt = newRandomKeySecret();
|
|
101
|
+
const encrypting = newRandomKeySecret();
|
|
102
|
+
const encryptingWrong = newRandomKeySecret();
|
|
107
103
|
const keys = {
|
|
108
|
-
|
|
109
|
-
|
|
104
|
+
toEncrypt,
|
|
105
|
+
encrypting,
|
|
110
106
|
};
|
|
111
|
-
const
|
|
112
|
-
const
|
|
113
|
-
expect(
|
|
107
|
+
const encrypted = encryptKeySecret(keys);
|
|
108
|
+
const decrypted = decryptKeySecret(encrypted, encryptingWrong.secret);
|
|
109
|
+
expect(decrypted).toBeUndefined();
|
|
114
110
|
});
|
|
115
111
|
//# sourceMappingURL=crypto.test.js.map
|
package/dist/crypto.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.test.js","sourceRoot":"","sources":["../src/crypto.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,
|
|
1
|
+
{"version":3,"file":"crypto.test.js","sourceRoot":"","sources":["../src/crypto.test.ts"],"names":[],"mappings":"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"}
|
package/dist/ids.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { AccountIDOrAgentID } from './account.js';
|
|
2
|
+
export type RawCoID = `co_z${string}`;
|
|
2
3
|
export type TransactionID = {
|
|
3
4
|
sessionID: SessionID;
|
|
4
5
|
txIndex: number;
|
|
5
6
|
};
|
|
6
|
-
export type AgentID = `
|
|
7
|
-
export
|
|
7
|
+
export type AgentID = `sealer_z${string}/signer_z${string}`;
|
|
8
|
+
export declare function isAgentID(id: string): id is AgentID;
|
|
9
|
+
export type SessionID = `${AccountIDOrAgentID}_session_z${string}`;
|
package/dist/ids.js
CHANGED
package/dist/ids.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,SAAS,CAAC,EAAU;IAChC,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACzF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import { CoValue,
|
|
2
|
-
import { LocalNode } from
|
|
3
|
-
import { CoMap } from
|
|
4
|
-
import
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
7
|
-
import type { JsonValue } from
|
|
8
|
-
import type { SyncMessage } from
|
|
1
|
+
import { CoValue, newRandomSessionID } from "./coValue.js";
|
|
2
|
+
import { LocalNode } from "./node.js";
|
|
3
|
+
import { CoMap } from "./contentTypes/coMap.js";
|
|
4
|
+
import { agentSecretFromBytes, agentSecretToBytes } from "./crypto.js";
|
|
5
|
+
import type { SessionID } from "./ids.js";
|
|
6
|
+
import type { CoID, ContentType } from "./contentType.js";
|
|
7
|
+
import type { JsonValue } from "./jsonValue.js";
|
|
8
|
+
import type { SyncMessage } from "./sync.js";
|
|
9
|
+
import type { AgentSecret } from "./crypto.js";
|
|
9
10
|
type Value = JsonValue | ContentType;
|
|
10
11
|
declare const internals: {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
getAgent: typeof getAgent;
|
|
14
|
-
getAgentID: typeof getAgentID;
|
|
15
|
-
newRandomAgentCredential: typeof newRandomAgentCredential;
|
|
12
|
+
agentSecretFromBytes: typeof agentSecretFromBytes;
|
|
13
|
+
agentSecretToBytes: typeof agentSecretToBytes;
|
|
16
14
|
newRandomSessionID: typeof newRandomSessionID;
|
|
17
15
|
};
|
|
18
16
|
export { LocalNode, CoValue, CoMap, internals };
|
|
19
|
-
export type { Value, JsonValue, ContentType,
|
|
17
|
+
export type { Value, JsonValue, ContentType, CoID, AgentSecret, SessionID, SyncMessage, };
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { CoValue,
|
|
2
|
-
import { LocalNode } from
|
|
3
|
-
import { CoMap } from
|
|
1
|
+
import { CoValue, newRandomSessionID } from "./coValue.js";
|
|
2
|
+
import { LocalNode } from "./node.js";
|
|
3
|
+
import { CoMap } from "./contentTypes/coMap.js";
|
|
4
|
+
import { agentSecretFromBytes, agentSecretToBytes } from "./crypto.js";
|
|
4
5
|
const internals = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
getAgent,
|
|
8
|
-
getAgentID,
|
|
9
|
-
newRandomAgentCredential,
|
|
6
|
+
agentSecretFromBytes,
|
|
7
|
+
agentSecretToBytes,
|
|
10
8
|
newRandomSessionID,
|
|
11
9
|
};
|
|
12
10
|
export { LocalNode, CoValue, CoMap, internals };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAUvE,MAAM,SAAS,GAAG;IACd,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;CACrB,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/jsonValue.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CoID, ContentType } from './contentType.js';
|
|
2
2
|
export type JsonAtom = string | number | boolean | null;
|
|
3
|
-
export type JsonValue = JsonAtom | JsonArray | JsonObject |
|
|
3
|
+
export type JsonValue = JsonAtom | JsonArray | JsonObject | CoID<ContentType>;
|
|
4
4
|
export type JsonArray = JsonValue[];
|
|
5
5
|
export type JsonObject = {
|
|
6
6
|
[key: string]: JsonValue;
|
package/dist/node.d.ts
CHANGED
|
@@ -1,25 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { AgentSecret } from "./crypto.js";
|
|
2
|
+
import { CoValue, CoValueHeader } from "./coValue.js";
|
|
3
|
+
import { Team } from "./permissions.js";
|
|
4
|
+
import { Peer, SyncManager } from "./sync.js";
|
|
5
|
+
import { AgentID, RawCoID, SessionID } from "./ids.js";
|
|
6
|
+
import { CoID, ContentType } from "./contentType.js";
|
|
7
|
+
import { AccountIDOrAgentID, GeneralizedControlledAccount, ControlledAccount, AccountID, Profile } from "./account.js";
|
|
6
8
|
export declare class LocalNode {
|
|
7
9
|
coValues: {
|
|
8
|
-
[key:
|
|
10
|
+
[key: RawCoID]: CoValueState;
|
|
9
11
|
};
|
|
10
|
-
|
|
11
|
-
agentID: AgentID;
|
|
12
|
+
account: GeneralizedControlledAccount;
|
|
12
13
|
ownSessionID: SessionID;
|
|
13
14
|
sync: SyncManager;
|
|
14
|
-
constructor(
|
|
15
|
+
constructor(account: GeneralizedControlledAccount, ownSessionID: SessionID);
|
|
16
|
+
static withNewlyCreatedAccount(name: string): {
|
|
17
|
+
node: LocalNode;
|
|
18
|
+
accountID: AccountID;
|
|
19
|
+
accountSecret: AgentSecret;
|
|
20
|
+
sessionID: SessionID;
|
|
21
|
+
};
|
|
22
|
+
static withLoadedAccount(accountID: AccountID, accountSecret: AgentSecret, sessionID: SessionID, peersToLoadFrom: Peer[]): Promise<LocalNode>;
|
|
15
23
|
createCoValue(header: CoValueHeader): CoValue;
|
|
16
|
-
loadCoValue(id:
|
|
17
|
-
load<T extends ContentType>(id:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
loadCoValue(id: RawCoID): Promise<CoValue>;
|
|
25
|
+
load<T extends ContentType>(id: CoID<T>): Promise<T>;
|
|
26
|
+
loadProfile(id: AccountID): Promise<Profile>;
|
|
27
|
+
expectCoValueLoaded(id: RawCoID, expectation?: string): CoValue;
|
|
28
|
+
expectProfileLoaded(id: AccountID, expectation?: string): Profile;
|
|
29
|
+
createAccount(name: string): ControlledAccount;
|
|
30
|
+
resolveAccountAgent(id: AccountIDOrAgentID, expectation?: string): AgentID;
|
|
21
31
|
createTeam(): Team;
|
|
22
|
-
|
|
32
|
+
testWithDifferentAccount(account: GeneralizedControlledAccount, ownSessionID: SessionID): LocalNode;
|
|
23
33
|
}
|
|
24
34
|
type CoValueState = {
|
|
25
35
|
state: "loading";
|