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
|
@@ -1,522 +0,0 @@
|
|
|
1
|
-
import { base58 } from "@scure/base";
|
|
2
|
-
import { getChildGroupId, getParentGroupId, isAgentID, isChildGroupReference, isParentGroupReference, } from "../ids.js";
|
|
3
|
-
import { logger } from "../logger.js";
|
|
4
|
-
import { expectGroup } from "../typeUtils/expectGroup.js";
|
|
5
|
-
import { RawCoMap } from "./coMap.js";
|
|
6
|
-
export const EVERYONE = "everyone";
|
|
7
|
-
/** A `Group` is a scope for permissions of its members (`"reader" | "writer" | "admin"`), applying to objects owned by that group.
|
|
8
|
-
*
|
|
9
|
-
* A `Group` object exposes methods for permission management and allows you to create new CoValues owned by that group.
|
|
10
|
-
*
|
|
11
|
-
* (Internally, a `Group` is also just a `CoMap`, mapping member accounts to roles and containing some
|
|
12
|
-
* state management for making cryptographic keys available to current members)
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* You typically get a group from a CoValue that you already have loaded:
|
|
16
|
-
*
|
|
17
|
-
* ```typescript
|
|
18
|
-
* const group = coMap.group;
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* Or, you can create a new group with a `LocalNode`:
|
|
23
|
-
*
|
|
24
|
-
* ```typescript
|
|
25
|
-
* const localNode.createGroup();
|
|
26
|
-
* ```
|
|
27
|
-
* */
|
|
28
|
-
export class RawGroup extends RawCoMap {
|
|
29
|
-
/**
|
|
30
|
-
* Returns the current role of a given account.
|
|
31
|
-
*
|
|
32
|
-
* @category 1. Role reading
|
|
33
|
-
*/
|
|
34
|
-
roleOf(accountID) {
|
|
35
|
-
return this.roleOfInternal(accountID)?.role;
|
|
36
|
-
}
|
|
37
|
-
/** @internal */
|
|
38
|
-
roleOfInternal(accountID) {
|
|
39
|
-
const roleHere = this.get(accountID);
|
|
40
|
-
if (roleHere === "revoked") {
|
|
41
|
-
return undefined;
|
|
42
|
-
}
|
|
43
|
-
let roleInfo = roleHere && { role: roleHere, via: undefined };
|
|
44
|
-
const parentGroups = this.getParentGroups(this.atTimeFilter);
|
|
45
|
-
for (const { group, role } of parentGroups) {
|
|
46
|
-
const parentRole = group.roleOfInternal(accountID)?.role;
|
|
47
|
-
if (!isInheritableRole(parentRole)) {
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
const roleToInherit = role !== "extend" ? role : parentRole;
|
|
51
|
-
if (isMorePermissiveAndShouldInherit(roleToInherit, roleInfo?.role)) {
|
|
52
|
-
roleInfo = { role: roleToInherit, via: group.id };
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return roleInfo;
|
|
56
|
-
}
|
|
57
|
-
getParentGroups(atTime) {
|
|
58
|
-
const groups = [];
|
|
59
|
-
for (const key of this.keys()) {
|
|
60
|
-
if (isParentGroupReference(key)) {
|
|
61
|
-
const parent = this.core.node.expectCoValueLoaded(getParentGroupId(key), "Expected parent group to be loaded");
|
|
62
|
-
const group = expectGroup(parent.getCurrentContent());
|
|
63
|
-
const role = this.get(key);
|
|
64
|
-
if (atTime) {
|
|
65
|
-
groups.push({ group: group.atTime(atTime), role });
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
groups.push({ group, role });
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return groups;
|
|
73
|
-
}
|
|
74
|
-
loadAllChildGroups() {
|
|
75
|
-
const requests = [];
|
|
76
|
-
const store = this.core.node.coValuesStore;
|
|
77
|
-
const peers = this.core.node.syncManager.getServerAndStoragePeers();
|
|
78
|
-
for (const key of this.keys()) {
|
|
79
|
-
if (!isChildGroupReference(key)) {
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
const id = getChildGroupId(key);
|
|
83
|
-
const child = store.get(id);
|
|
84
|
-
if (child.state.type === "unknown" ||
|
|
85
|
-
child.state.type === "unavailable") {
|
|
86
|
-
child.loadFromPeers(peers).catch(() => {
|
|
87
|
-
logger.error(`Failed to load child group ${id}`);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
requests.push(child.getCoValue().then((coValue) => {
|
|
91
|
-
if (coValue === "unavailable") {
|
|
92
|
-
throw new Error(`Child group ${child.id} is unavailable`);
|
|
93
|
-
}
|
|
94
|
-
// Recursively load child groups
|
|
95
|
-
return expectGroup(coValue.getCurrentContent()).loadAllChildGroups();
|
|
96
|
-
}));
|
|
97
|
-
}
|
|
98
|
-
return Promise.all(requests);
|
|
99
|
-
}
|
|
100
|
-
getChildGroups() {
|
|
101
|
-
const groups = [];
|
|
102
|
-
for (const key of this.keys()) {
|
|
103
|
-
if (isChildGroupReference(key)) {
|
|
104
|
-
const child = this.core.node.expectCoValueLoaded(getChildGroupId(key), "Expected child group to be loaded");
|
|
105
|
-
groups.push(expectGroup(child.getCurrentContent()));
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return groups;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Returns the role of the current account in the group.
|
|
112
|
-
*
|
|
113
|
-
* @category 1. Role reading
|
|
114
|
-
*/
|
|
115
|
-
myRole() {
|
|
116
|
-
return this.roleOfInternal(this.core.node.account.id)?.role;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Directly grants a new member a role in the group. The current account must be an
|
|
120
|
-
* admin to be able to do so. Throws otherwise.
|
|
121
|
-
*
|
|
122
|
-
* @category 2. Role changing
|
|
123
|
-
*/
|
|
124
|
-
addMember(account, role) {
|
|
125
|
-
this.addMemberInternal(account, role);
|
|
126
|
-
}
|
|
127
|
-
/** @internal */
|
|
128
|
-
addMemberInternal(account, role) {
|
|
129
|
-
if (account === EVERYONE) {
|
|
130
|
-
if (!(role === "reader" || role === "writer")) {
|
|
131
|
-
throw new Error("Can't make everyone something other than reader or writer");
|
|
132
|
-
}
|
|
133
|
-
const currentReadKey = this.core.getCurrentReadKey();
|
|
134
|
-
if (!currentReadKey.secret) {
|
|
135
|
-
throw new Error("Can't add member without read key secret");
|
|
136
|
-
}
|
|
137
|
-
this.set(account, role, "trusting");
|
|
138
|
-
if (this.get(account) !== role) {
|
|
139
|
-
throw new Error("Failed to set role");
|
|
140
|
-
}
|
|
141
|
-
this.set(`${currentReadKey.id}_for_${EVERYONE}`, currentReadKey.secret, "trusting");
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
const memberKey = typeof account === "string" ? account : account.id;
|
|
145
|
-
const agent = typeof account === "string"
|
|
146
|
-
? account
|
|
147
|
-
: account.currentAgentID()._unsafeUnwrap({ withStackTrace: true });
|
|
148
|
-
/**
|
|
149
|
-
* WriteOnly members can only see their own changes.
|
|
150
|
-
*
|
|
151
|
-
* We don't want to reveal the readKey to them so we create a new one specifically for them and also reveal it to everyone else with a reader or higher-capability role (but crucially not to other writer-only members)
|
|
152
|
-
* to everyone else.
|
|
153
|
-
*
|
|
154
|
-
* To never reveal the readKey to writeOnly members we also create a dedicated writeKey for the
|
|
155
|
-
* invite.
|
|
156
|
-
*/
|
|
157
|
-
if (role === "writeOnly" || role === "writeOnlyInvite") {
|
|
158
|
-
const writeKeyForNewMember = this.core.crypto.newRandomKeySecret();
|
|
159
|
-
this.set(memberKey, role, "trusting");
|
|
160
|
-
this.set(`writeKeyFor_${memberKey}`, writeKeyForNewMember.id, "trusting");
|
|
161
|
-
this.storeKeyRevelationForMember(memberKey, agent, writeKeyForNewMember.id, writeKeyForNewMember.secret);
|
|
162
|
-
for (const otherMemberKey of this.getMemberKeys()) {
|
|
163
|
-
const memberRole = this.get(otherMemberKey);
|
|
164
|
-
if (memberRole === "reader" ||
|
|
165
|
-
memberRole === "writer" ||
|
|
166
|
-
memberRole === "admin" ||
|
|
167
|
-
memberRole === "readerInvite" ||
|
|
168
|
-
memberRole === "writerInvite" ||
|
|
169
|
-
memberRole === "adminInvite") {
|
|
170
|
-
const otherMemberAgent = this.core.node
|
|
171
|
-
.resolveAccountAgent(otherMemberKey, "Expected member agent to be loaded")
|
|
172
|
-
._unsafeUnwrap({ withStackTrace: true });
|
|
173
|
-
this.storeKeyRevelationForMember(otherMemberKey, otherMemberAgent, writeKeyForNewMember.id, writeKeyForNewMember.secret);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
const currentReadKey = this.core.getCurrentReadKey();
|
|
179
|
-
if (!currentReadKey.secret) {
|
|
180
|
-
throw new Error("Can't add member without read key secret");
|
|
181
|
-
}
|
|
182
|
-
this.set(memberKey, role, "trusting");
|
|
183
|
-
if (this.get(memberKey) !== role) {
|
|
184
|
-
throw new Error("Failed to set role");
|
|
185
|
-
}
|
|
186
|
-
this.storeKeyRevelationForMember(memberKey, agent, currentReadKey.id, currentReadKey.secret);
|
|
187
|
-
for (const keyID of this.getWriteOnlyKeys()) {
|
|
188
|
-
const secret = this.core.getReadKey(keyID);
|
|
189
|
-
if (!secret) {
|
|
190
|
-
logger.error("Can't find key " + keyID);
|
|
191
|
-
continue;
|
|
192
|
-
}
|
|
193
|
-
this.storeKeyRevelationForMember(memberKey, agent, keyID, secret);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
storeKeyRevelationForMember(memberKey, agent, keyID, secret) {
|
|
198
|
-
this.set(`${keyID}_for_${memberKey}`, this.core.crypto.seal({
|
|
199
|
-
message: secret,
|
|
200
|
-
from: this.core.node.account.currentSealerSecret(),
|
|
201
|
-
to: this.core.crypto.getAgentSealerID(agent),
|
|
202
|
-
nOnceMaterial: {
|
|
203
|
-
in: this.id,
|
|
204
|
-
tx: this.core.nextTransactionID(),
|
|
205
|
-
},
|
|
206
|
-
}), "trusting");
|
|
207
|
-
}
|
|
208
|
-
getWriteOnlyKeys() {
|
|
209
|
-
const keys = [];
|
|
210
|
-
for (const key of this.keys()) {
|
|
211
|
-
if (key.startsWith("writeKeyFor_")) {
|
|
212
|
-
keys.push(this.get(key));
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
return keys;
|
|
216
|
-
}
|
|
217
|
-
getCurrentReadKeyId() {
|
|
218
|
-
if (this.myRole() === "writeOnly") {
|
|
219
|
-
const accountId = this.core.node.account.id;
|
|
220
|
-
return this.get(`writeKeyFor_${accountId}`);
|
|
221
|
-
}
|
|
222
|
-
return this.get("readKey");
|
|
223
|
-
}
|
|
224
|
-
getMemberKeys() {
|
|
225
|
-
return this.keys().filter((key) => {
|
|
226
|
-
return key.startsWith("co_") || isAgentID(key);
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
/** @internal */
|
|
230
|
-
rotateReadKey(removedMemberKey) {
|
|
231
|
-
const memberKeys = this.getMemberKeys().filter((key) => key !== removedMemberKey);
|
|
232
|
-
const currentlyPermittedReaders = memberKeys.filter((key) => {
|
|
233
|
-
const role = this.get(key);
|
|
234
|
-
return (role === "admin" ||
|
|
235
|
-
role === "writer" ||
|
|
236
|
-
role === "reader" ||
|
|
237
|
-
role === "adminInvite" ||
|
|
238
|
-
role === "writerInvite" ||
|
|
239
|
-
role === "readerInvite");
|
|
240
|
-
});
|
|
241
|
-
const writeOnlyMembers = memberKeys.filter((key) => {
|
|
242
|
-
const role = this.get(key);
|
|
243
|
-
return role === "writeOnly" || role === "writeOnlyInvite";
|
|
244
|
-
});
|
|
245
|
-
// Get these early, so we fail fast if they are unavailable
|
|
246
|
-
const parentGroups = this.getParentGroups();
|
|
247
|
-
const childGroups = this.getChildGroups();
|
|
248
|
-
const maybeCurrentReadKey = this.core.getCurrentReadKey();
|
|
249
|
-
if (!maybeCurrentReadKey.secret) {
|
|
250
|
-
throw new Error("Can't rotate read key secret we don't have access to");
|
|
251
|
-
}
|
|
252
|
-
const currentReadKey = {
|
|
253
|
-
id: maybeCurrentReadKey.id,
|
|
254
|
-
secret: maybeCurrentReadKey.secret,
|
|
255
|
-
};
|
|
256
|
-
const newReadKey = this.core.crypto.newRandomKeySecret();
|
|
257
|
-
for (const readerID of currentlyPermittedReaders) {
|
|
258
|
-
const agent = this.core.node
|
|
259
|
-
.resolveAccountAgent(readerID, "Expected to know currently permitted reader")
|
|
260
|
-
._unsafeUnwrap({ withStackTrace: true });
|
|
261
|
-
this.storeKeyRevelationForMember(readerID, agent, newReadKey.id, newReadKey.secret);
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* If there are some writeOnly members we need to rotate their keys
|
|
265
|
-
* and reveal them to the other non-writeOnly members
|
|
266
|
-
*/
|
|
267
|
-
for (const writeOnlyMemberID of writeOnlyMembers) {
|
|
268
|
-
const agent = this.core.node
|
|
269
|
-
.resolveAccountAgent(writeOnlyMemberID, "Expected to know writeOnly member")
|
|
270
|
-
._unsafeUnwrap({ withStackTrace: true });
|
|
271
|
-
const writeOnlyKey = this.core.crypto.newRandomKeySecret();
|
|
272
|
-
this.storeKeyRevelationForMember(writeOnlyMemberID, agent, writeOnlyKey.id, writeOnlyKey.secret);
|
|
273
|
-
this.set(`writeKeyFor_${writeOnlyMemberID}`, writeOnlyKey.id, "trusting");
|
|
274
|
-
for (const readerID of currentlyPermittedReaders) {
|
|
275
|
-
const agent = this.core.node
|
|
276
|
-
.resolveAccountAgent(readerID, "Expected to know currently permitted reader")
|
|
277
|
-
._unsafeUnwrap({ withStackTrace: true });
|
|
278
|
-
this.storeKeyRevelationForMember(readerID, agent, writeOnlyKey.id, writeOnlyKey.secret);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
this.set(`${currentReadKey.id}_for_${newReadKey.id}`, this.core.crypto.encryptKeySecret({
|
|
282
|
-
encrypting: newReadKey,
|
|
283
|
-
toEncrypt: currentReadKey,
|
|
284
|
-
}).encrypted, "trusting");
|
|
285
|
-
this.set("readKey", newReadKey.id, "trusting");
|
|
286
|
-
/**
|
|
287
|
-
* The new read key needs to be revealed to the parent groups
|
|
288
|
-
*
|
|
289
|
-
* This way the members from the parent groups can still have access to this group
|
|
290
|
-
*/
|
|
291
|
-
for (const { group: parent } of parentGroups) {
|
|
292
|
-
const { id: parentReadKeyID, secret: parentReadKeySecret } = parent.core.getCurrentReadKey();
|
|
293
|
-
if (!parentReadKeySecret) {
|
|
294
|
-
throw new Error("Can't reveal new child key to parent where we don't have access to the parent read key");
|
|
295
|
-
}
|
|
296
|
-
this.set(`${newReadKey.id}_for_${parentReadKeyID}`, this.core.crypto.encryptKeySecret({
|
|
297
|
-
encrypting: {
|
|
298
|
-
id: parentReadKeyID,
|
|
299
|
-
secret: parentReadKeySecret,
|
|
300
|
-
},
|
|
301
|
-
toEncrypt: newReadKey,
|
|
302
|
-
}).encrypted, "trusting");
|
|
303
|
-
}
|
|
304
|
-
for (const child of childGroups) {
|
|
305
|
-
// Since child references are mantained only for the key rotation,
|
|
306
|
-
// circular references are skipped here because it's more performant
|
|
307
|
-
// than always checking for circular references in childs inside the permission checks
|
|
308
|
-
if (child.isSelfExtension(this)) {
|
|
309
|
-
continue;
|
|
310
|
-
}
|
|
311
|
-
child.rotateReadKey(removedMemberKey);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
/** Detect circular references in group inheritance */
|
|
315
|
-
isSelfExtension(parent) {
|
|
316
|
-
if (parent.id === this.id) {
|
|
317
|
-
return true;
|
|
318
|
-
}
|
|
319
|
-
const childGroups = this.getChildGroups();
|
|
320
|
-
for (const child of childGroups) {
|
|
321
|
-
if (child.isSelfExtension(parent)) {
|
|
322
|
-
return true;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
return false;
|
|
326
|
-
}
|
|
327
|
-
extend(parent, role = "inherit") {
|
|
328
|
-
if (this.isSelfExtension(parent)) {
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
if (this.myRole() !== "admin") {
|
|
332
|
-
throw new Error("To extend a group, the current account must be an admin in the child group");
|
|
333
|
-
}
|
|
334
|
-
if (parent.myRole() !== "admin" &&
|
|
335
|
-
parent.myRole() !== "writer" &&
|
|
336
|
-
parent.myRole() !== "reader" &&
|
|
337
|
-
parent.myRole() !== "writeOnly") {
|
|
338
|
-
throw new Error("To extend a group, the current account must be a member of the parent group");
|
|
339
|
-
}
|
|
340
|
-
const value = role === "inherit" ? "extend" : role;
|
|
341
|
-
this.set(`parent_${parent.id}`, value, "trusting");
|
|
342
|
-
parent.set(`child_${this.id}`, "extend", "trusting");
|
|
343
|
-
const { id: parentReadKeyID, secret: parentReadKeySecret } = parent.core.getCurrentReadKey();
|
|
344
|
-
if (!parentReadKeySecret) {
|
|
345
|
-
throw new Error("Can't extend group without parent read key secret");
|
|
346
|
-
}
|
|
347
|
-
const { id: childReadKeyID, secret: childReadKeySecret } = this.core.getCurrentReadKey();
|
|
348
|
-
if (!childReadKeySecret) {
|
|
349
|
-
throw new Error("Can't extend group without child read key secret");
|
|
350
|
-
}
|
|
351
|
-
this.set(`${childReadKeyID}_for_${parentReadKeyID}`, this.core.crypto.encryptKeySecret({
|
|
352
|
-
encrypting: {
|
|
353
|
-
id: parentReadKeyID,
|
|
354
|
-
secret: parentReadKeySecret,
|
|
355
|
-
},
|
|
356
|
-
toEncrypt: {
|
|
357
|
-
id: childReadKeyID,
|
|
358
|
-
secret: childReadKeySecret,
|
|
359
|
-
},
|
|
360
|
-
}).encrypted, "trusting");
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Strips the specified member of all roles (preventing future writes in
|
|
364
|
-
* the group and owned values) and rotates the read encryption key for that group
|
|
365
|
-
* (preventing reads of new content in the group and owned values)
|
|
366
|
-
*
|
|
367
|
-
* @category 2. Role changing
|
|
368
|
-
*/
|
|
369
|
-
async removeMember(account) {
|
|
370
|
-
// Ensure all child groups are loaded before removing a member
|
|
371
|
-
await this.loadAllChildGroups();
|
|
372
|
-
this.removeMemberInternal(account);
|
|
373
|
-
}
|
|
374
|
-
/** @internal */
|
|
375
|
-
removeMemberInternal(account) {
|
|
376
|
-
const memberKey = typeof account === "string" ? account : account.id;
|
|
377
|
-
this.rotateReadKey(memberKey);
|
|
378
|
-
this.set(memberKey, "revoked", "trusting");
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Creates an invite for new members to indirectly join the group,
|
|
382
|
-
* allowing them to grant themselves the specified role with the InviteSecret
|
|
383
|
-
* (a string starting with "inviteSecret_") - use `LocalNode.acceptInvite()` for this purpose.
|
|
384
|
-
*
|
|
385
|
-
* @category 2. Role changing
|
|
386
|
-
*/
|
|
387
|
-
createInvite(role) {
|
|
388
|
-
const secretSeed = this.core.crypto.newRandomSecretSeed();
|
|
389
|
-
const inviteSecret = this.core.crypto.agentSecretFromSecretSeed(secretSeed);
|
|
390
|
-
const inviteID = this.core.crypto.getAgentID(inviteSecret);
|
|
391
|
-
this.addMemberInternal(inviteID, `${role}Invite`);
|
|
392
|
-
return inviteSecretFromSecretSeed(secretSeed);
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* Creates a new `CoMap` within this group, with the specified specialized
|
|
396
|
-
* `CoMap` type `M` and optional static metadata.
|
|
397
|
-
*
|
|
398
|
-
* @category 3. Value creation
|
|
399
|
-
*/
|
|
400
|
-
createMap(init, meta, initPrivacy = "private", uniqueness = this.core.crypto.createdNowUnique()) {
|
|
401
|
-
const map = this.core.node
|
|
402
|
-
.createCoValue({
|
|
403
|
-
type: "comap",
|
|
404
|
-
ruleset: {
|
|
405
|
-
type: "ownedByGroup",
|
|
406
|
-
group: this.id,
|
|
407
|
-
},
|
|
408
|
-
meta: meta || null,
|
|
409
|
-
...uniqueness,
|
|
410
|
-
})
|
|
411
|
-
.getCurrentContent();
|
|
412
|
-
if (init) {
|
|
413
|
-
map.assign(init, initPrivacy);
|
|
414
|
-
}
|
|
415
|
-
return map;
|
|
416
|
-
}
|
|
417
|
-
/**
|
|
418
|
-
* Creates a new `CoList` within this group, with the specified specialized
|
|
419
|
-
* `CoList` type `L` and optional static metadata.
|
|
420
|
-
*
|
|
421
|
-
* @category 3. Value creation
|
|
422
|
-
*/
|
|
423
|
-
createList(init, meta, initPrivacy = "private", uniqueness = this.core.crypto.createdNowUnique()) {
|
|
424
|
-
const list = this.core.node
|
|
425
|
-
.createCoValue({
|
|
426
|
-
type: "colist",
|
|
427
|
-
ruleset: {
|
|
428
|
-
type: "ownedByGroup",
|
|
429
|
-
group: this.id,
|
|
430
|
-
},
|
|
431
|
-
meta: meta || null,
|
|
432
|
-
...uniqueness,
|
|
433
|
-
})
|
|
434
|
-
.getCurrentContent();
|
|
435
|
-
if (init?.length) {
|
|
436
|
-
list.appendItems(init, undefined, initPrivacy);
|
|
437
|
-
}
|
|
438
|
-
return list;
|
|
439
|
-
}
|
|
440
|
-
/**
|
|
441
|
-
* Creates a new `CoPlainText` within this group, with the specified specialized
|
|
442
|
-
* `CoPlainText` type `T` and optional static metadata.
|
|
443
|
-
*
|
|
444
|
-
* @category 3. Value creation
|
|
445
|
-
*/
|
|
446
|
-
createPlainText(init, meta, initPrivacy = "private") {
|
|
447
|
-
const text = this.core.node
|
|
448
|
-
.createCoValue({
|
|
449
|
-
type: "coplaintext",
|
|
450
|
-
ruleset: {
|
|
451
|
-
type: "ownedByGroup",
|
|
452
|
-
group: this.id,
|
|
453
|
-
},
|
|
454
|
-
meta: meta || null,
|
|
455
|
-
...this.core.crypto.createdNowUnique(),
|
|
456
|
-
})
|
|
457
|
-
.getCurrentContent();
|
|
458
|
-
if (init) {
|
|
459
|
-
text.insertAfter(0, init, initPrivacy);
|
|
460
|
-
}
|
|
461
|
-
return text;
|
|
462
|
-
}
|
|
463
|
-
/** @category 3. Value creation */
|
|
464
|
-
createStream(meta, uniqueness = this.core.crypto.createdNowUnique()) {
|
|
465
|
-
return this.core.node
|
|
466
|
-
.createCoValue({
|
|
467
|
-
type: "costream",
|
|
468
|
-
ruleset: {
|
|
469
|
-
type: "ownedByGroup",
|
|
470
|
-
group: this.id,
|
|
471
|
-
},
|
|
472
|
-
meta: meta || null,
|
|
473
|
-
...uniqueness,
|
|
474
|
-
})
|
|
475
|
-
.getCurrentContent();
|
|
476
|
-
}
|
|
477
|
-
/** @category 3. Value creation */
|
|
478
|
-
createBinaryStream(meta = { type: "binary" }, uniqueness = this.core.crypto.createdNowUnique()) {
|
|
479
|
-
return this.core.node
|
|
480
|
-
.createCoValue({
|
|
481
|
-
type: "costream",
|
|
482
|
-
ruleset: {
|
|
483
|
-
type: "ownedByGroup",
|
|
484
|
-
group: this.id,
|
|
485
|
-
},
|
|
486
|
-
meta: meta,
|
|
487
|
-
...uniqueness,
|
|
488
|
-
})
|
|
489
|
-
.getCurrentContent();
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
export function isInheritableRole(roleInParent) {
|
|
493
|
-
return (roleInParent === "admin" ||
|
|
494
|
-
roleInParent === "writer" ||
|
|
495
|
-
roleInParent === "reader");
|
|
496
|
-
}
|
|
497
|
-
function isMorePermissiveAndShouldInherit(roleInParent, roleInChild) {
|
|
498
|
-
if (roleInParent === "admin") {
|
|
499
|
-
return !roleInChild || roleInChild !== "admin";
|
|
500
|
-
}
|
|
501
|
-
if (roleInParent === "writer") {
|
|
502
|
-
return (!roleInChild || roleInChild === "reader" || roleInChild === "writeOnly");
|
|
503
|
-
}
|
|
504
|
-
if (roleInParent === "reader") {
|
|
505
|
-
return !roleInChild;
|
|
506
|
-
}
|
|
507
|
-
// writeOnly can't be inherited
|
|
508
|
-
if (roleInParent === "writeOnly") {
|
|
509
|
-
return false;
|
|
510
|
-
}
|
|
511
|
-
return false;
|
|
512
|
-
}
|
|
513
|
-
function inviteSecretFromSecretSeed(secretSeed) {
|
|
514
|
-
return `inviteSecret_z${base58.encode(secretSeed)}`;
|
|
515
|
-
}
|
|
516
|
-
export function secretSeedFromInviteSecret(inviteSecret) {
|
|
517
|
-
if (!inviteSecret.startsWith("inviteSecret_z")) {
|
|
518
|
-
throw new Error("Invalid invite secret");
|
|
519
|
-
}
|
|
520
|
-
return base58.decode(inviteSecret.slice("inviteSecret_z".length));
|
|
521
|
-
}
|
|
522
|
-
//# sourceMappingURL=group.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"group.js","sourceRoot":"","sources":["../../../src/coValues/group.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { RawUnknownCoValue } from "./coValue.js";
|
|
2
|
-
import { RawAccount, RawControlledAccount } from "./coValues/account.js";
|
|
3
|
-
import { RawCoList } from "./coValues/coList.js";
|
|
4
|
-
import { RawCoMap } from "./coValues/coMap.js";
|
|
5
|
-
import { RawCoPlainText } from "./coValues/coPlainText.js";
|
|
6
|
-
import { RawBinaryCoStream, RawCoStream } from "./coValues/coStream.js";
|
|
7
|
-
import { RawGroup } from "./coValues/group.js";
|
|
8
|
-
export function coreToCoValue(core, options) {
|
|
9
|
-
if (core.header.type === "comap") {
|
|
10
|
-
if (core.header.ruleset.type === "group") {
|
|
11
|
-
if (core.header.meta?.type === "account" &&
|
|
12
|
-
!options?.ignorePrivateTransactions) {
|
|
13
|
-
if (core.id === core.node.account.id) {
|
|
14
|
-
return new RawControlledAccount(core, core.node.account.agentSecret);
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
return new RawAccount(core);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
return new RawGroup(core, options);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
return new RawCoMap(core);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
else if (core.header.type === "coplaintext") {
|
|
29
|
-
return new RawCoPlainText(core);
|
|
30
|
-
}
|
|
31
|
-
else if (core.header.type === "colist") {
|
|
32
|
-
return new RawCoList(core);
|
|
33
|
-
}
|
|
34
|
-
else if (core.header.type === "costream") {
|
|
35
|
-
if (core.header.meta && core.header.meta.type === "binary") {
|
|
36
|
-
return new RawBinaryCoStream(core);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
return new RawCoStream(core);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
return new RawUnknownCoValue(core);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=coreToCoValue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coreToCoValue.js","sourceRoot":"","sources":["../../src/coreToCoValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,UAAU,aAAa,CAC3B,IAAiB,EACjB,OAA6C;IAE7C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzC,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS;gBACpC,CAAC,OAAO,EAAE,yBAAyB,EACnC,CAAC;gBACD,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;oBACrC,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACvE,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC9C,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3D,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
|