cojson 0.10.0 → 0.10.1
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 -10
- package/CHANGELOG.md +7 -0
- package/dist/CoValuesStore.js.map +1 -0
- package/dist/PeerKnownStates.js.map +1 -0
- package/dist/PeerState.js.map +1 -0
- package/dist/PriorityBasedMessageQueue.js.map +1 -0
- package/dist/SyncStateManager.js.map +1 -0
- package/dist/base64url.js.map +1 -0
- package/dist/base64url.test.js.map +1 -0
- package/dist/coValue.js.map +1 -0
- package/dist/coValueCore.js.map +1 -0
- package/dist/coValueState.js.map +1 -0
- package/dist/coValues/account.js.map +1 -0
- package/dist/coValues/coList.js.map +1 -0
- package/dist/coValues/coMap.js.map +1 -0
- package/dist/coValues/coPlainText.js.map +1 -0
- package/dist/coValues/coStream.js.map +1 -0
- package/dist/coValues/group.js.map +1 -0
- package/dist/coreToCoValue.js.map +1 -0
- package/dist/crypto/PureJSCrypto.js.map +1 -0
- package/dist/crypto/WasmCrypto.js.map +1 -0
- package/dist/crypto/crypto.js.map +1 -0
- package/dist/exports.js.map +1 -0
- package/dist/ids.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/jsonStringify.js.map +1 -0
- package/dist/{native/jsonValue.js.map → jsonValue.js.map} +1 -1
- package/dist/localNode.js.map +1 -0
- package/dist/logger.js.map +1 -0
- package/dist/media.js.map +1 -0
- package/dist/permissions.js.map +1 -0
- package/dist/priority.js.map +1 -0
- package/dist/storage/FileSystem.js.map +1 -0
- package/dist/storage/chunksAndKnownStates.js.map +1 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/streamUtils.js.map +1 -0
- package/dist/sync.js.map +1 -0
- package/dist/typeUtils/accountOrAgentIDfromSessionID.js.map +1 -0
- package/dist/typeUtils/expectGroup.js.map +1 -0
- package/dist/typeUtils/isAccountID.js.map +1 -0
- package/dist/typeUtils/isCoValue.js.map +1 -0
- package/package.json +19 -21
- package/src/exports.ts +1 -0
- package/src/index.ts +1 -0
- package/tsconfig.json +3 -1
- package/dist/native/CoValuesStore.js.map +0 -1
- package/dist/native/PeerKnownStates.js.map +0 -1
- package/dist/native/PeerState.js.map +0 -1
- package/dist/native/PriorityBasedMessageQueue.js.map +0 -1
- package/dist/native/SyncStateManager.js.map +0 -1
- package/dist/native/base64url.js.map +0 -1
- package/dist/native/base64url.test.js.map +0 -1
- package/dist/native/coValue.js.map +0 -1
- package/dist/native/coValueCore.js.map +0 -1
- package/dist/native/coValueState.js.map +0 -1
- package/dist/native/coValues/account.js.map +0 -1
- package/dist/native/coValues/coList.js.map +0 -1
- package/dist/native/coValues/coMap.js.map +0 -1
- package/dist/native/coValues/coPlainText.js.map +0 -1
- package/dist/native/coValues/coStream.js.map +0 -1
- package/dist/native/coValues/group.js.map +0 -1
- package/dist/native/coreToCoValue.js.map +0 -1
- package/dist/native/crypto/PureJSCrypto.js.map +0 -1
- package/dist/native/crypto/WasmCrypto.js.map +0 -1
- package/dist/native/crypto/crypto.js.map +0 -1
- package/dist/native/crypto/export.js +0 -3
- package/dist/native/crypto/export.js.map +0 -1
- package/dist/native/exports.js.map +0 -1
- package/dist/native/ids.js.map +0 -1
- package/dist/native/index.native.js +0 -3
- package/dist/native/index.native.js.map +0 -1
- package/dist/native/jsonStringify.js.map +0 -1
- package/dist/native/localNode.js.map +0 -1
- package/dist/native/logger.js.map +0 -1
- package/dist/native/media.js.map +0 -1
- package/dist/native/permissions.js.map +0 -1
- package/dist/native/priority.js.map +0 -1
- package/dist/native/storage/FileSystem.js.map +0 -1
- package/dist/native/storage/chunksAndKnownStates.js.map +0 -1
- package/dist/native/storage/index.js.map +0 -1
- package/dist/native/streamUtils.js.map +0 -1
- package/dist/native/sync.js.map +0 -1
- package/dist/native/typeUtils/accountOrAgentIDfromSessionID.js.map +0 -1
- package/dist/native/typeUtils/expectGroup.js.map +0 -1
- package/dist/native/typeUtils/isAccountID.js.map +0 -1
- package/dist/native/typeUtils/isCoValue.js.map +0 -1
- package/dist/web/CoValuesStore.js +0 -31
- package/dist/web/CoValuesStore.js.map +0 -1
- package/dist/web/PeerKnownStates.js +0 -68
- package/dist/web/PeerKnownStates.js.map +0 -1
- package/dist/web/PeerState.js +0 -103
- package/dist/web/PeerState.js.map +0 -1
- package/dist/web/PriorityBasedMessageQueue.js +0 -98
- package/dist/web/PriorityBasedMessageQueue.js.map +0 -1
- package/dist/web/SyncStateManager.js +0 -94
- package/dist/web/SyncStateManager.js.map +0 -1
- package/dist/web/base64url.js +0 -53
- package/dist/web/base64url.js.map +0 -1
- package/dist/web/base64url.test.js +0 -25
- package/dist/web/base64url.test.js.map +0 -1
- package/dist/web/coValue.js +0 -52
- package/dist/web/coValue.js.map +0 -1
- package/dist/web/coValueCore.js +0 -597
- package/dist/web/coValueCore.js.map +0 -1
- package/dist/web/coValueState.js +0 -267
- package/dist/web/coValueState.js.map +0 -1
- package/dist/web/coValues/account.js +0 -100
- package/dist/web/coValues/account.js.map +0 -1
- package/dist/web/coValues/coList.js +0 -381
- package/dist/web/coValues/coList.js.map +0 -1
- package/dist/web/coValues/coMap.js +0 -273
- package/dist/web/coValues/coMap.js.map +0 -1
- package/dist/web/coValues/coPlainText.js +0 -86
- package/dist/web/coValues/coPlainText.js.map +0 -1
- package/dist/web/coValues/coStream.js +0 -224
- package/dist/web/coValues/coStream.js.map +0 -1
- package/dist/web/coValues/group.js +0 -522
- package/dist/web/coValues/group.js.map +0 -1
- package/dist/web/coreToCoValue.js +0 -46
- package/dist/web/coreToCoValue.js.map +0 -1
- package/dist/web/crypto/PureJSCrypto.js +0 -94
- package/dist/web/crypto/PureJSCrypto.js.map +0 -1
- package/dist/web/crypto/WasmCrypto.js +0 -115
- package/dist/web/crypto/WasmCrypto.js.map +0 -1
- package/dist/web/crypto/crypto.js +0 -152
- package/dist/web/crypto/crypto.js.map +0 -1
- package/dist/web/crypto/export.js +0 -3
- package/dist/web/crypto/export.js.map +0 -1
- package/dist/web/exports.js +0 -48
- package/dist/web/exports.js.map +0 -1
- package/dist/web/ids.js +0 -50
- package/dist/web/ids.js.map +0 -1
- package/dist/web/index.web.js +0 -3
- package/dist/web/index.web.js.map +0 -1
- package/dist/web/jsonStringify.js +0 -57
- package/dist/web/jsonStringify.js.map +0 -1
- package/dist/web/jsonValue.js +0 -2
- package/dist/web/jsonValue.js.map +0 -1
- package/dist/web/localNode.js +0 -412
- package/dist/web/localNode.js.map +0 -1
- package/dist/web/logger.js +0 -58
- package/dist/web/logger.js.map +0 -1
- package/dist/web/media.js +0 -2
- package/dist/web/media.js.map +0 -1
- package/dist/web/permissions.js +0 -341
- package/dist/web/permissions.js.map +0 -1
- package/dist/web/priority.js +0 -31
- package/dist/web/priority.js.map +0 -1
- package/dist/web/storage/FileSystem.js +0 -48
- package/dist/web/storage/FileSystem.js.map +0 -1
- package/dist/web/storage/chunksAndKnownStates.js +0 -98
- package/dist/web/storage/chunksAndKnownStates.js.map +0 -1
- package/dist/web/storage/index.js +0 -336
- package/dist/web/storage/index.js.map +0 -1
- package/dist/web/streamUtils.js +0 -41
- package/dist/web/streamUtils.js.map +0 -1
- package/dist/web/sync.js +0 -555
- package/dist/web/sync.js.map +0 -1
- package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js +0 -5
- package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js.map +0 -1
- package/dist/web/typeUtils/expectGroup.js +0 -13
- package/dist/web/typeUtils/expectGroup.js.map +0 -1
- package/dist/web/typeUtils/isAccountID.js +0 -4
- package/dist/web/typeUtils/isAccountID.js.map +0 -1
- package/dist/web/typeUtils/isCoValue.js +0 -11
- package/dist/web/typeUtils/isCoValue.js.map +0 -1
- package/src/crypto/export.ts +0 -2
- package/src/index.native.ts +0 -2
- package/src/index.web.ts +0 -2
- package/tsconfig.native.json +0 -10
- package/tsconfig.web.json +0 -5
- /package/dist/{native/CoValuesStore.js → CoValuesStore.js} +0 -0
- /package/dist/{native/PeerKnownStates.js → PeerKnownStates.js} +0 -0
- /package/dist/{native/PeerState.js → PeerState.js} +0 -0
- /package/dist/{native/PriorityBasedMessageQueue.js → PriorityBasedMessageQueue.js} +0 -0
- /package/dist/{native/SyncStateManager.js → SyncStateManager.js} +0 -0
- /package/dist/{native/base64url.js → base64url.js} +0 -0
- /package/dist/{native/base64url.test.js → base64url.test.js} +0 -0
- /package/dist/{native/coValue.js → coValue.js} +0 -0
- /package/dist/{native/coValueCore.js → coValueCore.js} +0 -0
- /package/dist/{native/coValueState.js → coValueState.js} +0 -0
- /package/dist/{native/coValues → coValues}/account.js +0 -0
- /package/dist/{native/coValues → coValues}/coList.js +0 -0
- /package/dist/{native/coValues → coValues}/coMap.js +0 -0
- /package/dist/{native/coValues → coValues}/coPlainText.js +0 -0
- /package/dist/{native/coValues → coValues}/coStream.js +0 -0
- /package/dist/{native/coValues → coValues}/group.js +0 -0
- /package/dist/{native/coreToCoValue.js → coreToCoValue.js} +0 -0
- /package/dist/{native/crypto → crypto}/PureJSCrypto.js +0 -0
- /package/dist/{native/crypto → crypto}/WasmCrypto.js +0 -0
- /package/dist/{native/crypto → crypto}/crypto.js +0 -0
- /package/dist/{native/exports.js → exports.js} +0 -0
- /package/dist/{native/ids.js → ids.js} +0 -0
- /package/dist/{native/jsonStringify.js → jsonStringify.js} +0 -0
- /package/dist/{native/jsonValue.js → jsonValue.js} +0 -0
- /package/dist/{native/localNode.js → localNode.js} +0 -0
- /package/dist/{native/logger.js → logger.js} +0 -0
- /package/dist/{native/media.js → media.js} +0 -0
- /package/dist/{native/permissions.js → permissions.js} +0 -0
- /package/dist/{native/priority.js → priority.js} +0 -0
- /package/dist/{native/storage → storage}/FileSystem.js +0 -0
- /package/dist/{native/storage → storage}/chunksAndKnownStates.js +0 -0
- /package/dist/{native/storage → storage}/index.js +0 -0
- /package/dist/{native/streamUtils.js → streamUtils.js} +0 -0
- /package/dist/{native/sync.js → sync.js} +0 -0
- /package/dist/{native/typeUtils → typeUtils}/accountOrAgentIDfromSessionID.js +0 -0
- /package/dist/{native/typeUtils → typeUtils}/expectGroup.js +0 -0
- /package/dist/{native/typeUtils → typeUtils}/isAccountID.js +0 -0
- /package/dist/{native/typeUtils → typeUtils}/isCoValue.js +0 -0
package/dist/web/permissions.js
DELETED
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
import { RawAccount } from "./coValues/account.js";
|
|
2
|
-
import { EVERYONE, isInheritableRole, } from "./coValues/group.js";
|
|
3
|
-
import { getParentGroupId, } from "./ids.js";
|
|
4
|
-
import { parseJSON } from "./jsonStringify.js";
|
|
5
|
-
import { logger } from "./logger.js";
|
|
6
|
-
import { accountOrAgentIDfromSessionID } from "./typeUtils/accountOrAgentIDfromSessionID.js";
|
|
7
|
-
import { expectGroup } from "./typeUtils/expectGroup.js";
|
|
8
|
-
let logPermissionErrors = true;
|
|
9
|
-
export function disablePermissionErrors() {
|
|
10
|
-
logPermissionErrors = false;
|
|
11
|
-
}
|
|
12
|
-
function logPermissionError(message, attributes) {
|
|
13
|
-
if (logPermissionErrors === false) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
logger.warn("Permission error: " + message, attributes);
|
|
17
|
-
}
|
|
18
|
-
export function determineValidTransactions(coValue) {
|
|
19
|
-
if (coValue.header.ruleset.type === "group") {
|
|
20
|
-
const initialAdmin = coValue.header.ruleset.initialAdmin;
|
|
21
|
-
if (!initialAdmin) {
|
|
22
|
-
throw new Error("Group must have initialAdmin");
|
|
23
|
-
}
|
|
24
|
-
return determineValidTransactionsForGroup(coValue, initialAdmin)
|
|
25
|
-
.validTransactions;
|
|
26
|
-
}
|
|
27
|
-
else if (coValue.header.ruleset.type === "ownedByGroup") {
|
|
28
|
-
const groupContent = expectGroup(coValue.node
|
|
29
|
-
.expectCoValueLoaded(coValue.header.ruleset.group, "Determining valid transaction in owned object but its group wasn't loaded")
|
|
30
|
-
.getCurrentContent());
|
|
31
|
-
if (groupContent.type !== "comap") {
|
|
32
|
-
throw new Error("Group must be a map");
|
|
33
|
-
}
|
|
34
|
-
const validTransactions = [];
|
|
35
|
-
for (const [sessionID, sessionLog] of coValue.sessionLogs.entries()) {
|
|
36
|
-
const transactor = accountOrAgentIDfromSessionID(sessionID);
|
|
37
|
-
sessionLog.transactions.forEach((tx, txIndex) => {
|
|
38
|
-
const groupAtTime = groupContent.atTime(tx.madeAt);
|
|
39
|
-
const effectiveTransactor = agentInAccountOrMemberInGroup(transactor, groupAtTime);
|
|
40
|
-
if (!effectiveTransactor) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const transactorRoleAtTxTime = groupAtTime.roleOfInternal(effectiveTransactor)?.role ||
|
|
44
|
-
groupAtTime.roleOfInternal(EVERYONE)?.role;
|
|
45
|
-
if (transactorRoleAtTxTime !== "admin" &&
|
|
46
|
-
transactorRoleAtTxTime !== "writer" &&
|
|
47
|
-
transactorRoleAtTxTime !== "writeOnly") {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
return validTransactions;
|
|
54
|
-
}
|
|
55
|
-
else if (coValue.header.ruleset.type === "unsafeAllowAll") {
|
|
56
|
-
const validTransactions = [];
|
|
57
|
-
for (const [sessionID, sessionLog] of coValue.sessionLogs.entries()) {
|
|
58
|
-
sessionLog.transactions.forEach((tx, txIndex) => {
|
|
59
|
-
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
return validTransactions;
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
throw new Error("Unknown ruleset type " +
|
|
66
|
-
coValue.header.ruleset.type);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
function isHigherRole(a, b) {
|
|
70
|
-
if (a === undefined)
|
|
71
|
-
return false;
|
|
72
|
-
if (b === undefined)
|
|
73
|
-
return true;
|
|
74
|
-
if (b === "admin")
|
|
75
|
-
return false;
|
|
76
|
-
if (a === "admin")
|
|
77
|
-
return true;
|
|
78
|
-
return a === "writer" && b === "reader";
|
|
79
|
-
}
|
|
80
|
-
function resolveMemberStateFromParentReference(coValue, memberState, parentReference, roleMapping, extendChain) {
|
|
81
|
-
const parentGroup = coValue.node.expectCoValueLoaded(getParentGroupId(parentReference), "Expected parent group to be loaded");
|
|
82
|
-
if (parentGroup.header.ruleset.type !== "group") {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
// Skip circular references
|
|
86
|
-
if (extendChain.has(parentGroup.id)) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const initialAdmin = parentGroup.header.ruleset.initialAdmin;
|
|
90
|
-
if (!initialAdmin) {
|
|
91
|
-
throw new Error("Group must have initialAdmin");
|
|
92
|
-
}
|
|
93
|
-
extendChain.add(parentGroup.id);
|
|
94
|
-
const { memberState: parentGroupMemberState } = determineValidTransactionsForGroup(parentGroup, initialAdmin, extendChain);
|
|
95
|
-
for (const agent of Object.keys(parentGroupMemberState)) {
|
|
96
|
-
const parentRole = parentGroupMemberState[agent];
|
|
97
|
-
const currentRole = memberState[agent];
|
|
98
|
-
if (isInheritableRole(parentRole)) {
|
|
99
|
-
if (roleMapping !== "extend" && isHigherRole(roleMapping, currentRole)) {
|
|
100
|
-
memberState[agent] = roleMapping;
|
|
101
|
-
}
|
|
102
|
-
else if (isHigherRole(parentRole, currentRole)) {
|
|
103
|
-
memberState[agent] = parentRole;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
function determineValidTransactionsForGroup(coValue, initialAdmin, extendChain) {
|
|
109
|
-
const allTransactionsSorted = [];
|
|
110
|
-
for (const [sessionID, sessionLog] of coValue.sessionLogs.entries()) {
|
|
111
|
-
sessionLog.transactions.forEach((tx, txIndex) => {
|
|
112
|
-
allTransactionsSorted.push({ sessionID, txIndex, tx });
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
allTransactionsSorted.sort((a, b) => {
|
|
116
|
-
return a.tx.madeAt - b.tx.madeAt;
|
|
117
|
-
});
|
|
118
|
-
const memberState = {};
|
|
119
|
-
const validTransactions = [];
|
|
120
|
-
const keyRevelations = new Set();
|
|
121
|
-
const writeKeys = new Set();
|
|
122
|
-
for (const { sessionID, txIndex, tx } of allTransactionsSorted) {
|
|
123
|
-
const transactor = accountOrAgentIDfromSessionID(sessionID);
|
|
124
|
-
if (tx.privacy === "private") {
|
|
125
|
-
if (memberState[transactor] === "admin") {
|
|
126
|
-
validTransactions.push({
|
|
127
|
-
txID: { sessionID, txIndex },
|
|
128
|
-
tx,
|
|
129
|
-
});
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
logPermissionError("Only admins can make private transactions in groups");
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
let changes;
|
|
138
|
-
try {
|
|
139
|
-
changes = parseJSON(tx.changes);
|
|
140
|
-
}
|
|
141
|
-
catch (e) {
|
|
142
|
-
logPermissionError("Invalid JSON in transaction", {
|
|
143
|
-
id: coValue.id,
|
|
144
|
-
tx,
|
|
145
|
-
});
|
|
146
|
-
continue;
|
|
147
|
-
}
|
|
148
|
-
const change = changes[0];
|
|
149
|
-
if (changes.length !== 1) {
|
|
150
|
-
logPermissionError("Group transaction must have exactly one change");
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
if (change.op !== "set") {
|
|
154
|
-
logPermissionError("Group transaction must set a role or readKey");
|
|
155
|
-
continue;
|
|
156
|
-
}
|
|
157
|
-
if (change.key === "readKey") {
|
|
158
|
-
if (memberState[transactor] !== "admin") {
|
|
159
|
-
logPermissionError("Only admins can set readKeys");
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
else if (change.key === "profile") {
|
|
166
|
-
if (memberState[transactor] !== "admin") {
|
|
167
|
-
logPermissionError("Only admins can set profile");
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
|
-
else if (isKeyForKeyField(change.key) ||
|
|
174
|
-
isKeyForAccountField(change.key)) {
|
|
175
|
-
if (memberState[transactor] !== "admin" &&
|
|
176
|
-
memberState[transactor] !== "adminInvite" &&
|
|
177
|
-
memberState[transactor] !== "writerInvite" &&
|
|
178
|
-
memberState[transactor] !== "readerInvite" &&
|
|
179
|
-
memberState[transactor] !== "writeOnlyInvite") {
|
|
180
|
-
logPermissionError("Only admins can reveal keys");
|
|
181
|
-
continue;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* We don't want to give the ability to invite members to override
|
|
185
|
-
* key revelations, otherwise they could hide a key revelation to any user
|
|
186
|
-
* blocking them from accessing the group.
|
|
187
|
-
*/
|
|
188
|
-
if (keyRevelations.has(change.key) &&
|
|
189
|
-
memberState[transactor] !== "admin") {
|
|
190
|
-
logPermissionError("Key revelation already exists and can't be overridden by invite");
|
|
191
|
-
continue;
|
|
192
|
-
}
|
|
193
|
-
keyRevelations.add(change.key);
|
|
194
|
-
// TODO: check validity of agents who the key is revealed to?
|
|
195
|
-
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
else if (isParentExtension(change.key)) {
|
|
199
|
-
if (memberState[transactor] !== "admin") {
|
|
200
|
-
logPermissionError("Only admins can set parent extensions");
|
|
201
|
-
continue;
|
|
202
|
-
}
|
|
203
|
-
extendChain = extendChain ?? new Set([]);
|
|
204
|
-
resolveMemberStateFromParentReference(coValue, memberState, change.key, change.value, extendChain);
|
|
205
|
-
// Circular reference detected, drop all the transactions involved
|
|
206
|
-
if (extendChain.has(coValue.id)) {
|
|
207
|
-
logPermissionError("Circular extend detected, dropping the transaction");
|
|
208
|
-
continue;
|
|
209
|
-
}
|
|
210
|
-
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
else if (isChildExtension(change.key)) {
|
|
214
|
-
if (memberState[transactor] !== "admin" &&
|
|
215
|
-
memberState[transactor] !== "writer" &&
|
|
216
|
-
memberState[transactor] !== "reader" &&
|
|
217
|
-
memberState[transactor] !== "writeOnly") {
|
|
218
|
-
logPermissionError("Only admins, writers, readers and writeOnly can set child extensions");
|
|
219
|
-
continue;
|
|
220
|
-
}
|
|
221
|
-
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
else if (isWriteKeyForMember(change.key)) {
|
|
225
|
-
if (memberState[transactor] !== "admin" &&
|
|
226
|
-
memberState[transactor] !== "writeOnlyInvite") {
|
|
227
|
-
logPermissionError("Only admins can set writeKeys");
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* writeOnlyInvite need to be able to set writeKeys because every new writeOnly
|
|
232
|
-
* member comes with their own write key.
|
|
233
|
-
*
|
|
234
|
-
* We don't want to give the ability to invite members to override
|
|
235
|
-
* write keys, otherwise they could hide a write key to other writeOnly users
|
|
236
|
-
* blocking them from accessing the group.ß
|
|
237
|
-
*/
|
|
238
|
-
if (writeKeys.has(change.key) && memberState[transactor] !== "admin") {
|
|
239
|
-
logPermissionError("Write key already exists and can't be overridden by invite");
|
|
240
|
-
continue;
|
|
241
|
-
}
|
|
242
|
-
writeKeys.add(change.key);
|
|
243
|
-
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
244
|
-
continue;
|
|
245
|
-
}
|
|
246
|
-
const affectedMember = change.key;
|
|
247
|
-
const assignedRole = change.value;
|
|
248
|
-
if (change.value !== "admin" &&
|
|
249
|
-
change.value !== "writer" &&
|
|
250
|
-
change.value !== "reader" &&
|
|
251
|
-
change.value !== "writeOnly" &&
|
|
252
|
-
change.value !== "revoked" &&
|
|
253
|
-
change.value !== "adminInvite" &&
|
|
254
|
-
change.value !== "writerInvite" &&
|
|
255
|
-
change.value !== "readerInvite" &&
|
|
256
|
-
change.value !== "writeOnlyInvite") {
|
|
257
|
-
logPermissionError("Group transaction must set a valid role");
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
|
-
if (affectedMember === EVERYONE &&
|
|
261
|
-
!(change.value === "reader" ||
|
|
262
|
-
change.value === "writer" ||
|
|
263
|
-
change.value === "revoked")) {
|
|
264
|
-
logPermissionError("Everyone can only be set to reader, writer or revoked");
|
|
265
|
-
continue;
|
|
266
|
-
}
|
|
267
|
-
const isFirstSelfAppointment = !memberState[transactor] &&
|
|
268
|
-
transactor === initialAdmin &&
|
|
269
|
-
change.op === "set" &&
|
|
270
|
-
change.key === transactor &&
|
|
271
|
-
change.value === "admin";
|
|
272
|
-
if (!isFirstSelfAppointment) {
|
|
273
|
-
if (memberState[transactor] === "admin") {
|
|
274
|
-
if (memberState[affectedMember] === "admin" &&
|
|
275
|
-
affectedMember !== transactor &&
|
|
276
|
-
assignedRole !== "admin") {
|
|
277
|
-
logPermissionError("Admins can only demote themselves.");
|
|
278
|
-
continue;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
else if (memberState[transactor] === "adminInvite") {
|
|
282
|
-
if (change.value !== "admin") {
|
|
283
|
-
logPermissionError("AdminInvites can only create admins.");
|
|
284
|
-
continue;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
else if (memberState[transactor] === "writerInvite") {
|
|
288
|
-
if (change.value !== "writer") {
|
|
289
|
-
logPermissionError("WriterInvites can only create writers.");
|
|
290
|
-
continue;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
else if (memberState[transactor] === "readerInvite") {
|
|
294
|
-
if (change.value !== "reader") {
|
|
295
|
-
logPermissionError("ReaderInvites can only create reader.");
|
|
296
|
-
continue;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
else if (memberState[transactor] === "writeOnlyInvite") {
|
|
300
|
-
if (change.value !== "writeOnly") {
|
|
301
|
-
logPermissionError("WriteOnlyInvites can only create writeOnly.");
|
|
302
|
-
continue;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
logPermissionError("Group transaction must be made by current admin or invite");
|
|
307
|
-
continue;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
memberState[affectedMember] = change.value;
|
|
311
|
-
validTransactions.push({ txID: { sessionID, txIndex }, tx });
|
|
312
|
-
}
|
|
313
|
-
return { validTransactions, memberState };
|
|
314
|
-
}
|
|
315
|
-
function agentInAccountOrMemberInGroup(transactor, groupAtTime) {
|
|
316
|
-
if (transactor === groupAtTime.id && groupAtTime instanceof RawAccount) {
|
|
317
|
-
return groupAtTime.currentAgentID().match((agentID) => agentID, (e) => {
|
|
318
|
-
logger.error("Error while determining current agent ID in valid transactions", e);
|
|
319
|
-
return undefined;
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
return transactor;
|
|
323
|
-
}
|
|
324
|
-
export function isWriteKeyForMember(co) {
|
|
325
|
-
return co.startsWith("writeKeyFor_");
|
|
326
|
-
}
|
|
327
|
-
export function isKeyForKeyField(co) {
|
|
328
|
-
return co.startsWith("key_") && co.includes("_for_key");
|
|
329
|
-
}
|
|
330
|
-
export function isKeyForAccountField(co) {
|
|
331
|
-
return ((co.startsWith("key_") &&
|
|
332
|
-
(co.includes("_for_sealer") || co.includes("_for_co"))) ||
|
|
333
|
-
co.includes("_for_everyone"));
|
|
334
|
-
}
|
|
335
|
-
function isParentExtension(key) {
|
|
336
|
-
return key.startsWith("parent_");
|
|
337
|
-
}
|
|
338
|
-
function isChildExtension(key) {
|
|
339
|
-
return key.startsWith("child_");
|
|
340
|
-
}
|
|
341
|
-
//# sourceMappingURL=permissions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/permissions.ts"],"names":[],"mappings":"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"}
|
package/dist/web/priority.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
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
|
package/dist/web/priority.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"priority.js","sourceRoot":"","sources":["../../src/priority.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACE,CAAC;AAIX,MAAM,UAAU,qBAAqB,CACnC,MAA2C;IAE3C,IAAI,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3C,OAAO,iBAAiB,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACpC,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjE,OAAO,iBAAiB,CAAC,GAAG,CAAC;IAC/B,CAAC;IAED,OAAO,iBAAiB,CAAC,MAAM,CAAC;AAClC,CAAC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
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
|
-
const filename = `L${level}-${(blockNumber + "").padStart(3, "0")}-${hash.digest().replace("hash_", "").slice(0, 15)}-H${headerBytes.length}.jsonl`;
|
|
37
|
-
await fs.closeAndRename(file, filename);
|
|
38
|
-
return filename;
|
|
39
|
-
}
|
|
40
|
-
export async function writeToWal(handle, fs, id, chunk) {
|
|
41
|
-
const walEntry = {
|
|
42
|
-
id,
|
|
43
|
-
...chunk,
|
|
44
|
-
};
|
|
45
|
-
const bytes = textEncoder.encode(JSON.stringify(walEntry) + "\n");
|
|
46
|
-
return fs.append(handle, bytes);
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=FileSystem.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileSystem.js","sourceRoot":"","sources":["../../../src/storage/FileSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,98 +0,0 @@
|
|
|
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] = newContentEntry;
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
newContentEntry.newTransactions.push(...actuallyNewTransactions);
|
|
32
|
-
newContentEntry.lastSignature = entry.lastSignature;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return newContentPieces;
|
|
37
|
-
}
|
|
38
|
-
export function chunkToKnownState(id, chunk) {
|
|
39
|
-
const ourKnown = {
|
|
40
|
-
id,
|
|
41
|
-
header: !!chunk.header,
|
|
42
|
-
sessions: {},
|
|
43
|
-
};
|
|
44
|
-
for (const [sessionID, sessionEntries] of Object.entries(chunk.sessionEntries)) {
|
|
45
|
-
for (const entry of sessionEntries) {
|
|
46
|
-
ourKnown.sessions[sessionID] =
|
|
47
|
-
entry.after + entry.transactions.length;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return ourKnown;
|
|
51
|
-
}
|
|
52
|
-
export function mergeChunks(chunkA, chunkB) {
|
|
53
|
-
const header = chunkA.header || chunkB.header;
|
|
54
|
-
const newSessions = { ...chunkA.sessionEntries };
|
|
55
|
-
for (const sessionID in chunkB.sessionEntries) {
|
|
56
|
-
// figure out if we can merge the chunks
|
|
57
|
-
const sessionEntriesA = chunkA.sessionEntries[sessionID];
|
|
58
|
-
const sessionEntriesB = chunkB.sessionEntries[sessionID];
|
|
59
|
-
if (!sessionEntriesA) {
|
|
60
|
-
newSessions[sessionID] = sessionEntriesB;
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
const lastEntryOfA = sessionEntriesA[sessionEntriesA.length - 1];
|
|
64
|
-
const firstEntryOfB = sessionEntriesB[0];
|
|
65
|
-
if (lastEntryOfA.after + lastEntryOfA.transactions.length ===
|
|
66
|
-
firstEntryOfB.after) {
|
|
67
|
-
const newEntries = [];
|
|
68
|
-
let bytesSinceLastSignature = 0;
|
|
69
|
-
for (const entry of sessionEntriesA.concat(sessionEntriesB)) {
|
|
70
|
-
const entryByteLength = entry.transactions.reduce((sum, tx) => sum +
|
|
71
|
-
(tx.privacy === "private"
|
|
72
|
-
? tx.encryptedChanges.length
|
|
73
|
-
: tx.changes.length), 0);
|
|
74
|
-
if (newEntries.length === 0 ||
|
|
75
|
-
bytesSinceLastSignature + entryByteLength > MAX_RECOMMENDED_TX_SIZE) {
|
|
76
|
-
newEntries.push({
|
|
77
|
-
after: entry.after,
|
|
78
|
-
lastSignature: entry.lastSignature,
|
|
79
|
-
transactions: entry.transactions,
|
|
80
|
-
});
|
|
81
|
-
bytesSinceLastSignature = 0;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
const lastNewEntry = newEntries[newEntries.length - 1];
|
|
85
|
-
lastNewEntry.transactions.push(...entry.transactions);
|
|
86
|
-
lastNewEntry.lastSignature = entry.lastSignature;
|
|
87
|
-
bytesSinceLastSignature += entry.transactions.length;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
newSessions[sessionID] = newEntries;
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
return "nonContigous";
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return { header, sessionEntries: newSessions };
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=chunksAndKnownStates.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunksAndKnownStates.js","sourceRoot":"","sources":["../../../src/storage/chunksAndKnownStates.ts"],"names":[],"mappings":"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"}
|