cojson 0.7.35 → 0.8.3
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 +2 -7
- package/.turbo/turbo-lint.log +4 -0
- package/CHANGELOG.md +13 -0
- package/dist/{PeerState.js → native/PeerState.js} +13 -5
- package/dist/native/PeerState.js.map +1 -0
- package/dist/native/PriorityBasedMessageQueue.js.map +1 -0
- package/dist/native/base64url.js.map +1 -0
- package/dist/native/base64url.test.js.map +1 -0
- package/dist/native/coValue.js.map +1 -0
- package/dist/{coValueCore.js → native/coValueCore.js} +0 -6
- package/dist/native/coValueCore.js.map +1 -0
- package/dist/{coValues → native/coValues}/account.js +2 -3
- package/dist/native/coValues/account.js.map +1 -0
- package/dist/native/coValues/coList.js.map +1 -0
- package/dist/native/coValues/coMap.js.map +1 -0
- package/dist/native/coValues/coStream.js.map +1 -0
- package/dist/{coValues → native/coValues}/group.js +8 -8
- package/dist/native/coValues/group.js.map +1 -0
- package/dist/native/coreToCoValue.js.map +1 -0
- package/dist/{crypto → native/crypto}/PureJSCrypto.js +4 -0
- package/dist/native/crypto/PureJSCrypto.js.map +1 -0
- package/dist/{crypto → native/crypto}/crypto.js +4 -1
- package/dist/native/crypto/crypto.js.map +1 -0
- package/dist/native/ids.js.map +1 -0
- package/dist/{index.js → native/index.native.js} +4 -6
- package/dist/native/index.native.js.map +1 -0
- package/dist/native/jsonStringify.js.map +1 -0
- package/dist/{jsonValue.js.map → native/jsonValue.js.map} +1 -1
- package/dist/{localNode.js → native/localNode.js} +44 -38
- package/dist/native/localNode.js.map +1 -0
- package/dist/native/media.js.map +1 -0
- package/dist/native/permissions.js.map +1 -0
- package/dist/native/priority.js.map +1 -0
- package/dist/native/storage/FileSystem.js.map +1 -0
- package/dist/{storage → native/storage}/chunksAndKnownStates.js +1 -1
- package/dist/native/storage/chunksAndKnownStates.js.map +1 -0
- package/dist/native/storage/index.js.map +1 -0
- package/dist/native/streamUtils.js.map +1 -0
- package/dist/native/sync.js.map +1 -0
- package/dist/native/typeUtils/accountOrAgentIDfromSessionID.js.map +1 -0
- package/dist/native/typeUtils/expectGroup.js.map +1 -0
- package/dist/native/typeUtils/isAccountID.js.map +1 -0
- package/dist/native/typeUtils/isCoValue.js.map +1 -0
- package/dist/web/PeerState.js +66 -0
- package/dist/web/PeerState.js.map +1 -0
- package/dist/web/PriorityBasedMessageQueue.js +51 -0
- package/dist/web/PriorityBasedMessageQueue.js.map +1 -0
- package/dist/web/base64url.js +59 -0
- package/dist/web/base64url.js.map +1 -0
- package/dist/web/base64url.test.js +25 -0
- package/dist/web/base64url.test.js.map +1 -0
- package/dist/web/coValue.js +19 -0
- package/dist/web/coValue.js.map +1 -0
- package/dist/web/coValueCore.js +693 -0
- package/dist/web/coValueCore.js.map +1 -0
- package/dist/web/coValues/account.js +96 -0
- package/dist/web/coValues/account.js.map +1 -0
- package/dist/web/coValues/coList.js +393 -0
- package/dist/web/coValues/coList.js.map +1 -0
- package/dist/web/coValues/coMap.js +197 -0
- package/dist/web/coValues/coMap.js.map +1 -0
- package/dist/web/coValues/coStream.js +220 -0
- package/dist/web/coValues/coStream.js.map +1 -0
- package/dist/web/coValues/group.js +250 -0
- package/dist/web/coValues/group.js.map +1 -0
- package/dist/web/coreToCoValue.js +42 -0
- package/dist/web/coreToCoValue.js.map +1 -0
- package/dist/web/crypto/PureJSCrypto.js +93 -0
- package/dist/web/crypto/PureJSCrypto.js.map +1 -0
- package/dist/{crypto → web/crypto}/WasmCrypto.js +3 -0
- package/dist/web/crypto/WasmCrypto.js.map +1 -0
- package/dist/web/crypto/crypto.js +154 -0
- package/dist/web/crypto/crypto.js.map +1 -0
- package/dist/web/ids.js +17 -0
- package/dist/web/ids.js.map +1 -0
- package/dist/web/index.web.js +40 -0
- package/dist/web/index.web.js.map +1 -0
- package/dist/web/jsonStringify.js +57 -0
- package/dist/web/jsonStringify.js.map +1 -0
- package/dist/web/jsonValue.js +2 -0
- package/dist/web/jsonValue.js.map +1 -0
- package/dist/web/localNode.js +442 -0
- package/dist/web/localNode.js.map +1 -0
- package/dist/web/media.js +2 -0
- package/dist/web/media.js.map +1 -0
- package/dist/web/permissions.js +206 -0
- package/dist/web/permissions.js.map +1 -0
- package/dist/web/priority.js +31 -0
- package/dist/web/priority.js.map +1 -0
- package/dist/web/storage/FileSystem.js +58 -0
- package/dist/web/storage/FileSystem.js.map +1 -0
- package/dist/web/storage/chunksAndKnownStates.js +100 -0
- package/dist/web/storage/chunksAndKnownStates.js.map +1 -0
- package/dist/web/storage/index.js +348 -0
- package/dist/web/storage/index.js.map +1 -0
- package/dist/web/streamUtils.js +41 -0
- package/dist/web/streamUtils.js.map +1 -0
- package/dist/web/sync.js +504 -0
- package/dist/web/sync.js.map +1 -0
- package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js +5 -0
- package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js.map +1 -0
- package/dist/web/typeUtils/expectGroup.js +13 -0
- package/dist/web/typeUtils/expectGroup.js.map +1 -0
- package/dist/web/typeUtils/isAccountID.js +4 -0
- package/dist/web/typeUtils/isAccountID.js.map +1 -0
- package/dist/web/typeUtils/isCoValue.js +11 -0
- package/dist/web/typeUtils/isCoValue.js.map +1 -0
- package/package.json +25 -8
- package/src/PeerState.ts +18 -7
- package/src/coValue.ts +1 -1
- package/src/coValueCore.ts +9 -14
- package/src/coValues/account.ts +12 -7
- package/src/coValues/coList.ts +4 -4
- package/src/coValues/coMap.ts +3 -3
- package/src/coValues/coStream.ts +8 -8
- package/src/coValues/group.ts +15 -11
- package/src/crypto/PureJSCrypto.ts +5 -0
- package/src/crypto/WasmCrypto.ts +4 -0
- package/src/crypto/crypto.ts +11 -1
- package/src/ids.ts +2 -2
- package/src/{index.ts → index.native.ts} +7 -8
- package/src/index.web.ts +152 -0
- package/src/localNode.ts +75 -67
- package/src/permissions.ts +5 -5
- package/src/storage/chunksAndKnownStates.ts +1 -1
- package/src/storage/index.ts +1 -1
- package/src/tests/account.test.ts +1 -2
- package/src/tests/coList.test.ts +1 -1
- package/src/tests/coMap.test.ts +1 -1
- package/src/tests/coStream.test.ts +2 -1
- package/src/tests/cryptoImpl.test.ts +24 -2
- package/src/tests/group.test.ts +6 -8
- package/src/tests/permissions.test.ts +90 -43
- package/src/tests/priority.test.ts +44 -15
- package/src/tests/sync.test.ts +8 -8
- package/src/tests/testUtils.ts +1 -2
- package/src/typeUtils/accountOrAgentIDfromSessionID.ts +3 -3
- package/src/typeUtils/isAccountID.ts +2 -2
- package/tsconfig.json +5 -4
- package/tsconfig.native.json +12 -0
- package/tsconfig.web.json +11 -0
- package/dist/PeerState.js.map +0 -1
- package/dist/PriorityBasedMessageQueue.js.map +0 -1
- package/dist/base64url.js.map +0 -1
- package/dist/base64url.test.js.map +0 -1
- package/dist/coValue.js.map +0 -1
- package/dist/coValueCore.js.map +0 -1
- package/dist/coValues/account.js.map +0 -1
- package/dist/coValues/coList.js.map +0 -1
- package/dist/coValues/coMap.js.map +0 -1
- package/dist/coValues/coStream.js.map +0 -1
- package/dist/coValues/group.js.map +0 -1
- package/dist/coreToCoValue.js.map +0 -1
- package/dist/crypto/PureJSCrypto.js.map +0 -1
- package/dist/crypto/WasmCrypto.js.map +0 -1
- package/dist/crypto/crypto.js.map +0 -1
- package/dist/ids.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jsonStringify.js.map +0 -1
- package/dist/localNode.js.map +0 -1
- package/dist/media.js.map +0 -1
- package/dist/permissions.js.map +0 -1
- package/dist/priority.js.map +0 -1
- package/dist/storage/FileSystem.js.map +0 -1
- package/dist/storage/chunksAndKnownStates.js.map +0 -1
- package/dist/storage/index.js.map +0 -1
- package/dist/streamUtils.js.map +0 -1
- package/dist/sync.js.map +0 -1
- package/dist/tests/PeerState.test.js +0 -80
- package/dist/tests/PeerState.test.js.map +0 -1
- package/dist/tests/PriorityBasedMessageQueue.test.js +0 -97
- package/dist/tests/PriorityBasedMessageQueue.test.js.map +0 -1
- package/dist/tests/account.test.js +0 -59
- package/dist/tests/account.test.js.map +0 -1
- package/dist/tests/coList.test.js +0 -76
- package/dist/tests/coList.test.js.map +0 -1
- package/dist/tests/coMap.test.js +0 -136
- package/dist/tests/coMap.test.js.map +0 -1
- package/dist/tests/coStream.test.js +0 -205
- package/dist/tests/coStream.test.js.map +0 -1
- package/dist/tests/coValueCore.test.js +0 -124
- package/dist/tests/coValueCore.test.js.map +0 -1
- package/dist/tests/crypto.test.js +0 -118
- package/dist/tests/crypto.test.js.map +0 -1
- package/dist/tests/cryptoImpl.test.js +0 -113
- package/dist/tests/cryptoImpl.test.js.map +0 -1
- package/dist/tests/group.test.js +0 -34
- package/dist/tests/group.test.js.map +0 -1
- package/dist/tests/permissions.test.js +0 -1060
- package/dist/tests/permissions.test.js.map +0 -1
- package/dist/tests/priority.test.js +0 -61
- package/dist/tests/priority.test.js.map +0 -1
- package/dist/tests/sync.test.js +0 -1187
- package/dist/tests/sync.test.js.map +0 -1
- package/dist/tests/testUtils.js +0 -60
- package/dist/tests/testUtils.js.map +0 -1
- package/dist/typeUtils/accountOrAgentIDfromSessionID.js.map +0 -1
- package/dist/typeUtils/expectGroup.js.map +0 -1
- package/dist/typeUtils/isAccountID.js.map +0 -1
- package/dist/typeUtils/isCoValue.js.map +0 -1
- /package/dist/{PriorityBasedMessageQueue.js → native/PriorityBasedMessageQueue.js} +0 -0
- /package/dist/{base64url.js → native/base64url.js} +0 -0
- /package/dist/{base64url.test.js → native/base64url.test.js} +0 -0
- /package/dist/{coValue.js → native/coValue.js} +0 -0
- /package/dist/{coValues → native/coValues}/coList.js +0 -0
- /package/dist/{coValues → native/coValues}/coMap.js +0 -0
- /package/dist/{coValues → native/coValues}/coStream.js +0 -0
- /package/dist/{coreToCoValue.js → native/coreToCoValue.js} +0 -0
- /package/dist/{ids.js → native/ids.js} +0 -0
- /package/dist/{jsonStringify.js → native/jsonStringify.js} +0 -0
- /package/dist/{jsonValue.js → native/jsonValue.js} +0 -0
- /package/dist/{media.js → native/media.js} +0 -0
- /package/dist/{permissions.js → native/permissions.js} +0 -0
- /package/dist/{priority.js → native/priority.js} +0 -0
- /package/dist/{storage → native/storage}/FileSystem.js +0 -0
- /package/dist/{storage → native/storage}/index.js +0 -0
- /package/dist/{streamUtils.js → native/streamUtils.js} +0 -0
- /package/dist/{sync.js → native/sync.js} +0 -0
- /package/dist/{typeUtils → native/typeUtils}/accountOrAgentIDfromSessionID.js +0 -0
- /package/dist/{typeUtils → native/typeUtils}/expectGroup.js +0 -0
- /package/dist/{typeUtils → native/typeUtils}/isAccountID.js +0 -0
- /package/dist/{typeUtils → native/typeUtils}/isCoValue.js +0 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { accountOrAgentIDfromSessionID } from "./typeUtils/accountOrAgentIDfromSessionID.js";
|
|
2
|
+
import { RawAccount } from "./coValues/account.js";
|
|
3
|
+
import { parseJSON } from "./jsonStringify.js";
|
|
4
|
+
import { EVERYONE } from "./coValues/group.js";
|
|
5
|
+
import { expectGroup } from "./typeUtils/expectGroup.js";
|
|
6
|
+
export function determineValidTransactions(coValue) {
|
|
7
|
+
if (coValue.header.ruleset.type === "group") {
|
|
8
|
+
const allTransactionsSorted = [
|
|
9
|
+
...coValue.sessionLogs.entries(),
|
|
10
|
+
].flatMap(([sessionID, sessionLog]) => {
|
|
11
|
+
return sessionLog.transactions.map((tx, txIndex) => ({
|
|
12
|
+
sessionID,
|
|
13
|
+
txIndex,
|
|
14
|
+
tx,
|
|
15
|
+
}));
|
|
16
|
+
});
|
|
17
|
+
allTransactionsSorted.sort((a, b) => {
|
|
18
|
+
return a.tx.madeAt - b.tx.madeAt;
|
|
19
|
+
});
|
|
20
|
+
const initialAdmin = coValue.header.ruleset.initialAdmin;
|
|
21
|
+
if (!initialAdmin) {
|
|
22
|
+
throw new Error("Group must have initialAdmin");
|
|
23
|
+
}
|
|
24
|
+
const memberState = {};
|
|
25
|
+
const validTransactions = [];
|
|
26
|
+
for (const { sessionID, txIndex, tx } of allTransactionsSorted) {
|
|
27
|
+
// console.log("before", { memberState, validTransactions });
|
|
28
|
+
const transactor = accountOrAgentIDfromSessionID(sessionID);
|
|
29
|
+
if (tx.privacy === "private") {
|
|
30
|
+
if (memberState[transactor] === "admin") {
|
|
31
|
+
validTransactions.push({
|
|
32
|
+
txID: { sessionID, txIndex },
|
|
33
|
+
tx,
|
|
34
|
+
});
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.warn("Only admins can make private transactions in groups");
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
let changes;
|
|
43
|
+
try {
|
|
44
|
+
changes = parseJSON(tx.changes);
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
console.warn(coValue.id, "Invalid JSON in transaction", e, tx, JSON.stringify(tx.changes, (k, v) => k === "changes" || k === "encryptedChanges"
|
|
48
|
+
? v.slice(0, 20) + "..."
|
|
49
|
+
: v));
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const change = changes[0];
|
|
53
|
+
if (changes.length !== 1) {
|
|
54
|
+
console.warn("Group transaction must have exactly one change");
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (change.op !== "set") {
|
|
58
|
+
console.warn("Group transaction must set a role or readKey");
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (change.key === "readKey") {
|
|
62
|
+
if (memberState[transactor] !== "admin") {
|
|
63
|
+
console.warn("Only admins can set readKeys");
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
else if (change.key === "profile") {
|
|
70
|
+
if (memberState[transactor] !== "admin") {
|
|
71
|
+
console.warn("Only admins can set profile");
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
else if (isKeyForKeyField(change.key) ||
|
|
78
|
+
isKeyForAccountField(change.key)) {
|
|
79
|
+
if (memberState[transactor] !== "admin" &&
|
|
80
|
+
memberState[transactor] !== "adminInvite" &&
|
|
81
|
+
memberState[transactor] !== "writerInvite" &&
|
|
82
|
+
memberState[transactor] !== "readerInvite") {
|
|
83
|
+
console.warn("Only admins can reveal keys");
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
// TODO: check validity of agents who the key is revealed to?
|
|
87
|
+
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const affectedMember = change.key;
|
|
91
|
+
const assignedRole = change.value;
|
|
92
|
+
if (change.value !== "admin" &&
|
|
93
|
+
change.value !== "writer" &&
|
|
94
|
+
change.value !== "reader" &&
|
|
95
|
+
change.value !== "revoked" &&
|
|
96
|
+
change.value !== "adminInvite" &&
|
|
97
|
+
change.value !== "writerInvite" &&
|
|
98
|
+
change.value !== "readerInvite") {
|
|
99
|
+
console.warn("Group transaction must set a valid role");
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (affectedMember === EVERYONE &&
|
|
103
|
+
!(change.value === "reader" ||
|
|
104
|
+
change.value === "writer" ||
|
|
105
|
+
change.value === "revoked")) {
|
|
106
|
+
console.warn("Everyone can only be set to reader, writer or revoked");
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const isFirstSelfAppointment = !memberState[transactor] &&
|
|
110
|
+
transactor === initialAdmin &&
|
|
111
|
+
change.op === "set" &&
|
|
112
|
+
change.key === transactor &&
|
|
113
|
+
change.value === "admin";
|
|
114
|
+
if (!isFirstSelfAppointment) {
|
|
115
|
+
if (memberState[transactor] === "admin") {
|
|
116
|
+
if (memberState[affectedMember] === "admin" &&
|
|
117
|
+
affectedMember !== transactor &&
|
|
118
|
+
assignedRole !== "admin") {
|
|
119
|
+
console.warn("Admins can only demote themselves.");
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (memberState[transactor] === "adminInvite") {
|
|
124
|
+
if (change.value !== "admin") {
|
|
125
|
+
console.warn("AdminInvites can only create admins.");
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else if (memberState[transactor] === "writerInvite") {
|
|
130
|
+
if (change.value !== "writer") {
|
|
131
|
+
console.warn("WriterInvites can only create writers.");
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else if (memberState[transactor] === "readerInvite") {
|
|
136
|
+
if (change.value !== "reader") {
|
|
137
|
+
console.warn("ReaderInvites can only create reader.");
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
console.warn("Group transaction must be made by current admin or invite");
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
memberState[affectedMember] = change.value;
|
|
147
|
+
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
148
|
+
// console.log("after", { memberState, validTransactions });
|
|
149
|
+
}
|
|
150
|
+
return validTransactions;
|
|
151
|
+
}
|
|
152
|
+
else if (coValue.header.ruleset.type === "ownedByGroup") {
|
|
153
|
+
const groupContent = expectGroup(coValue.node
|
|
154
|
+
.expectCoValueLoaded(coValue.header.ruleset.group, "Determining valid transaction in owned object but its group wasn't loaded")
|
|
155
|
+
.getCurrentContent());
|
|
156
|
+
if (groupContent.type !== "comap") {
|
|
157
|
+
throw new Error("Group must be a map");
|
|
158
|
+
}
|
|
159
|
+
return [...coValue.sessionLogs.entries()].flatMap(([sessionID, sessionLog]) => {
|
|
160
|
+
const transactor = accountOrAgentIDfromSessionID(sessionID);
|
|
161
|
+
return sessionLog.transactions
|
|
162
|
+
.filter((tx) => {
|
|
163
|
+
const groupAtTime = groupContent.atTime(tx.madeAt);
|
|
164
|
+
const effectiveTransactor = transactor === groupContent.id &&
|
|
165
|
+
groupAtTime instanceof RawAccount
|
|
166
|
+
? groupAtTime.currentAgentID().match((agentID) => agentID, (e) => {
|
|
167
|
+
console.error("Error while determining current agent ID in valid transactions", e);
|
|
168
|
+
return undefined;
|
|
169
|
+
})
|
|
170
|
+
: transactor;
|
|
171
|
+
if (!effectiveTransactor) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
const transactorRoleAtTxTime = groupAtTime.get(effectiveTransactor) ||
|
|
175
|
+
groupAtTime.get(EVERYONE);
|
|
176
|
+
return (transactorRoleAtTxTime === "admin" ||
|
|
177
|
+
transactorRoleAtTxTime === "writer");
|
|
178
|
+
})
|
|
179
|
+
.map((tx, txIndex) => ({
|
|
180
|
+
txID: { sessionID: sessionID, txIndex },
|
|
181
|
+
tx,
|
|
182
|
+
}));
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
else if (coValue.header.ruleset.type === "unsafeAllowAll") {
|
|
186
|
+
return [...coValue.sessionLogs.entries()].flatMap(([sessionID, sessionLog]) => {
|
|
187
|
+
return sessionLog.transactions.map((tx, txIndex) => ({
|
|
188
|
+
txID: { sessionID: sessionID, txIndex },
|
|
189
|
+
tx,
|
|
190
|
+
}));
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
throw new Error("Unknown ruleset type " +
|
|
195
|
+
coValue.header.ruleset.type);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
export function isKeyForKeyField(co) {
|
|
199
|
+
return co.startsWith("key_") && co.includes("_for_key");
|
|
200
|
+
}
|
|
201
|
+
export function isKeyForAccountField(co) {
|
|
202
|
+
return ((co.startsWith("key_") &&
|
|
203
|
+
(co.includes("_for_sealer") || co.includes("_for_co"))) ||
|
|
204
|
+
co.includes("_for_everyone"));
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The priority of a `CoValue` determines how much priority is given
|
|
3
|
+
* to its content messages.
|
|
4
|
+
*
|
|
5
|
+
* The priority value is handled as weight in the weighed round robin algorithm
|
|
6
|
+
* used to determine the order in which messages are sent.
|
|
7
|
+
*
|
|
8
|
+
* Follows the HTTP urgency range and order:
|
|
9
|
+
* - https://www.rfc-editor.org/rfc/rfc9218.html#name-urgency
|
|
10
|
+
*/
|
|
11
|
+
export const CO_VALUE_PRIORITY = {
|
|
12
|
+
HIGH: 0,
|
|
13
|
+
MEDIUM: 3,
|
|
14
|
+
LOW: 6,
|
|
15
|
+
};
|
|
16
|
+
export function getPriorityFromHeader(header) {
|
|
17
|
+
if (typeof header === "boolean" || !header) {
|
|
18
|
+
return CO_VALUE_PRIORITY.MEDIUM;
|
|
19
|
+
}
|
|
20
|
+
if (header.meta?.type === "account") {
|
|
21
|
+
return CO_VALUE_PRIORITY.HIGH;
|
|
22
|
+
}
|
|
23
|
+
if (header.ruleset.type === "group") {
|
|
24
|
+
return CO_VALUE_PRIORITY.HIGH;
|
|
25
|
+
}
|
|
26
|
+
if (header.type === "costream" && header.meta?.type === "binary") {
|
|
27
|
+
return CO_VALUE_PRIORITY.LOW;
|
|
28
|
+
}
|
|
29
|
+
return CO_VALUE_PRIORITY.MEDIUM;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=priority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority.js","sourceRoot":"","sources":["../../src/priority.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACA,CAAC;AAIX,MAAM,UAAU,qBAAqB,CAAC,MAA2C;IAC7E,IAAI,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,iBAAiB,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAClC,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAClC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/D,OAAO,iBAAiB,CAAC,GAAG,CAAC;IACjC,CAAC;IAED,OAAO,iBAAiB,CAAC,MAAM,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { StreamingHash } from "../crypto/crypto.js";
|
|
2
|
+
export const textEncoder = new TextEncoder();
|
|
3
|
+
export const textDecoder = new TextDecoder();
|
|
4
|
+
export async function readChunk(handle, header, fs) {
|
|
5
|
+
const chunkBytes = await fs.read(handle, header.start, header.length);
|
|
6
|
+
const chunk = JSON.parse(textDecoder.decode(chunkBytes));
|
|
7
|
+
return chunk;
|
|
8
|
+
}
|
|
9
|
+
export async function readHeader(filename, handle, size, fs) {
|
|
10
|
+
const headerLength = Number(filename.match(/-H(\d+)\.jsonl$/)[1]);
|
|
11
|
+
const headerBytes = await fs.read(handle, size - headerLength, headerLength);
|
|
12
|
+
const header = JSON.parse(textDecoder.decode(headerBytes));
|
|
13
|
+
return header;
|
|
14
|
+
}
|
|
15
|
+
export async function writeBlock(chunks, level, blockNumber, fs) {
|
|
16
|
+
if (chunks.size === 0) {
|
|
17
|
+
throw new Error("No chunks to write");
|
|
18
|
+
}
|
|
19
|
+
const blockHeader = [];
|
|
20
|
+
let offset = 0;
|
|
21
|
+
const file = await fs.createFile("wipBlock" + Math.random().toString(36).substring(7) + ".tmp.jsonl");
|
|
22
|
+
const hash = new StreamingHash(fs.crypto);
|
|
23
|
+
const chunksSortedById = Array.from(chunks).sort(([id1], [id2]) => id1.localeCompare(id2));
|
|
24
|
+
for (const [id, chunk] of chunksSortedById) {
|
|
25
|
+
const encodedBytes = hash.update(chunk);
|
|
26
|
+
const encodedBytesWithNewline = new Uint8Array(encodedBytes.length + 1);
|
|
27
|
+
encodedBytesWithNewline.set(encodedBytes);
|
|
28
|
+
encodedBytesWithNewline[encodedBytes.length] = 10;
|
|
29
|
+
await fs.append(file, encodedBytesWithNewline);
|
|
30
|
+
const length = encodedBytesWithNewline.length;
|
|
31
|
+
blockHeader.push({ id, start: offset, length });
|
|
32
|
+
offset += length;
|
|
33
|
+
}
|
|
34
|
+
const headerBytes = textEncoder.encode(JSON.stringify(blockHeader));
|
|
35
|
+
await fs.append(file, headerBytes);
|
|
36
|
+
// console.log(
|
|
37
|
+
// "full file",
|
|
38
|
+
// yield* $(
|
|
39
|
+
// fs.read(file as unknown as RH, 0, offset + headerBytes.length),
|
|
40
|
+
// ),
|
|
41
|
+
// );
|
|
42
|
+
const filename = `L${level}-${(blockNumber + "").padStart(3, "0")}-${hash.digest().replace("hash_", "").slice(0, 15)}-H${headerBytes.length}.jsonl`;
|
|
43
|
+
// console.log("renaming to" + filename);
|
|
44
|
+
await fs.closeAndRename(file, filename);
|
|
45
|
+
return filename;
|
|
46
|
+
// console.log("Wrote block", filename, blockHeader);
|
|
47
|
+
// console.log("IDs in block", blockHeader.map(e => e.id));
|
|
48
|
+
}
|
|
49
|
+
export async function writeToWal(handle, fs, id, chunk) {
|
|
50
|
+
const walEntry = {
|
|
51
|
+
id,
|
|
52
|
+
...chunk,
|
|
53
|
+
};
|
|
54
|
+
const bytes = textEncoder.encode(JSON.stringify(walEntry) + "\n");
|
|
55
|
+
console.log("writing to WAL", handle, id, bytes.length);
|
|
56
|
+
return fs.append(handle, bytes);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=FileSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSystem.js","sourceRoot":"","sources":["../../../src/storage/FileSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { MAX_RECOMMENDED_TX_SIZE } from "../coValueCore.js";
|
|
2
|
+
import { getPriorityFromHeader } from "../priority.js";
|
|
3
|
+
export function contentSinceChunk(id, chunk, known) {
|
|
4
|
+
const newContentPieces = [];
|
|
5
|
+
newContentPieces.push({
|
|
6
|
+
id: id,
|
|
7
|
+
action: "content",
|
|
8
|
+
header: known?.header ? undefined : chunk.header,
|
|
9
|
+
new: {},
|
|
10
|
+
priority: getPriorityFromHeader(chunk.header),
|
|
11
|
+
});
|
|
12
|
+
for (const [sessionID, sessionsEntry] of Object.entries(chunk.sessionEntries)) {
|
|
13
|
+
for (const entry of sessionsEntry) {
|
|
14
|
+
const knownStart = known?.sessions[sessionID] || 0;
|
|
15
|
+
if (entry.after + entry.transactions.length <= knownStart) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const actuallyNewTransactions = entry.transactions.slice(Math.max(0, knownStart - entry.after));
|
|
19
|
+
const newAfter = entry.after +
|
|
20
|
+
(actuallyNewTransactions.length - entry.transactions.length);
|
|
21
|
+
let newContentEntry = newContentPieces[0]?.new[sessionID];
|
|
22
|
+
if (!newContentEntry) {
|
|
23
|
+
newContentEntry = {
|
|
24
|
+
after: newAfter,
|
|
25
|
+
lastSignature: entry.lastSignature,
|
|
26
|
+
newTransactions: actuallyNewTransactions,
|
|
27
|
+
};
|
|
28
|
+
newContentPieces[0].new[sessionID] =
|
|
29
|
+
newContentEntry;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
newContentEntry.newTransactions.push(...actuallyNewTransactions);
|
|
33
|
+
newContentEntry.lastSignature = entry.lastSignature;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return newContentPieces;
|
|
38
|
+
}
|
|
39
|
+
export function chunkToKnownState(id, chunk) {
|
|
40
|
+
const ourKnown = {
|
|
41
|
+
id,
|
|
42
|
+
header: !!chunk.header,
|
|
43
|
+
sessions: {},
|
|
44
|
+
};
|
|
45
|
+
for (const [sessionID, sessionEntries] of Object.entries(chunk.sessionEntries)) {
|
|
46
|
+
for (const entry of sessionEntries) {
|
|
47
|
+
ourKnown.sessions[sessionID] =
|
|
48
|
+
entry.after + entry.transactions.length;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return ourKnown;
|
|
52
|
+
}
|
|
53
|
+
export function mergeChunks(chunkA, chunkB) {
|
|
54
|
+
const header = chunkA.header || chunkB.header;
|
|
55
|
+
const newSessions = { ...chunkA.sessionEntries };
|
|
56
|
+
for (const sessionID in chunkB.sessionEntries) {
|
|
57
|
+
// figure out if we can merge the chunks
|
|
58
|
+
const sessionEntriesA = chunkA.sessionEntries[sessionID];
|
|
59
|
+
const sessionEntriesB = chunkB.sessionEntries[sessionID];
|
|
60
|
+
if (!sessionEntriesA) {
|
|
61
|
+
newSessions[sessionID] = sessionEntriesB;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const lastEntryOfA = sessionEntriesA[sessionEntriesA.length - 1];
|
|
65
|
+
const firstEntryOfB = sessionEntriesB[0];
|
|
66
|
+
if (lastEntryOfA.after + lastEntryOfA.transactions.length ===
|
|
67
|
+
firstEntryOfB.after) {
|
|
68
|
+
const newEntries = [];
|
|
69
|
+
let bytesSinceLastSignature = 0;
|
|
70
|
+
for (const entry of sessionEntriesA.concat(sessionEntriesB)) {
|
|
71
|
+
const entryByteLength = entry.transactions.reduce((sum, tx) => sum +
|
|
72
|
+
(tx.privacy === "private"
|
|
73
|
+
? tx.encryptedChanges.length
|
|
74
|
+
: tx.changes.length), 0);
|
|
75
|
+
if (newEntries.length === 0 ||
|
|
76
|
+
bytesSinceLastSignature + entryByteLength >
|
|
77
|
+
MAX_RECOMMENDED_TX_SIZE) {
|
|
78
|
+
newEntries.push({
|
|
79
|
+
after: entry.after,
|
|
80
|
+
lastSignature: entry.lastSignature,
|
|
81
|
+
transactions: entry.transactions,
|
|
82
|
+
});
|
|
83
|
+
bytesSinceLastSignature = 0;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const lastNewEntry = newEntries[newEntries.length - 1];
|
|
87
|
+
lastNewEntry.transactions.push(...entry.transactions);
|
|
88
|
+
lastNewEntry.lastSignature = entry.lastSignature;
|
|
89
|
+
bytesSinceLastSignature += entry.transactions.length;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
newSessions[sessionID] = newEntries;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
return "nonContigous";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return { header, sessionEntries: newSessions };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=chunksAndKnownStates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunksAndKnownStates.js","sourceRoot":"","sources":["../../../src/storage/chunksAndKnownStates.ts"],"names":[],"mappings":"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"}
|