cojson 0.0.24 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/account.d.ts +4 -4
- package/dist/account.js +7 -7
- package/dist/account.js.map +1 -1
- package/dist/coValue.d.ts +2 -2
- package/dist/coValue.js +23 -23
- package/dist/coValue.js.map +1 -1
- package/dist/{team.d.ts → group.d.ts} +7 -7
- package/dist/{team.js → group.js} +24 -24
- package/dist/group.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +3 -3
- package/dist/node.js +32 -32
- package/dist/node.js.map +1 -1
- package/dist/permissions.d.ts +3 -3
- package/dist/permissions.js +13 -13
- package/dist/permissions.js.map +1 -1
- package/dist/testUtils.d.ts +8 -8
- package/dist/testUtils.js +19 -19
- package/dist/testUtils.js.map +1 -1
- package/package.json +2 -2
- package/src/account.test.ts +7 -7
- package/src/account.ts +8 -8
- package/src/coValue.test.ts +5 -5
- package/src/coValue.ts +24 -24
- package/src/{team.ts → group.ts} +31 -31
- package/src/index.ts +4 -4
- package/src/node.ts +38 -38
- package/src/permissions.test.ts +303 -303
- package/src/permissions.ts +16 -16
- package/src/sync.test.ts +74 -74
- package/src/testUtils.ts +19 -19
- package/dist/team.js.map +0 -1
package/dist/node.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { agentSecretFromSecretSeed, createdNowUnique, getAgentID, getAgentSealerID, getAgentSealerSecret, newRandomAgentSecret, newRandomKeySecret, seal, } from "./crypto.js";
|
|
2
2
|
import { CoValue, newRandomSessionID } from "./coValue.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Group, expectGroupContent, secretSeedFromInviteSecret, } from "./group.js";
|
|
4
4
|
import { SyncManager } from "./sync.js";
|
|
5
5
|
import { isAgentID } from "./ids.js";
|
|
6
6
|
import { Account, accountHeaderForInitialAgentSecret, ControlledAccount, AnonymousControlledAccount, } from "./account.js";
|
|
@@ -65,20 +65,20 @@ export class LocalNode {
|
|
|
65
65
|
}
|
|
66
66
|
return (await this.loadCoValue(profileID)).getCurrentContent();
|
|
67
67
|
}
|
|
68
|
-
async acceptInvite(
|
|
69
|
-
const
|
|
70
|
-
if (
|
|
71
|
-
return this.acceptInvite(
|
|
68
|
+
async acceptInvite(groupOrOwnedValueID, inviteSecret) {
|
|
69
|
+
const groupOrOwnedValue = await this.load(groupOrOwnedValueID);
|
|
70
|
+
if (groupOrOwnedValue.coValue.header.ruleset.type === "ownedByGroup") {
|
|
71
|
+
return this.acceptInvite(groupOrOwnedValue.coValue.header.ruleset.group, inviteSecret);
|
|
72
72
|
}
|
|
73
|
-
else if (
|
|
74
|
-
throw new Error("Can only accept invites to
|
|
73
|
+
else if (groupOrOwnedValue.coValue.header.ruleset.type !== "group") {
|
|
74
|
+
throw new Error("Can only accept invites to groups");
|
|
75
75
|
}
|
|
76
|
-
const
|
|
76
|
+
const group = new Group(expectGroupContent(groupOrOwnedValue), this);
|
|
77
77
|
const inviteAgentSecret = agentSecretFromSecretSeed(secretSeedFromInviteSecret(inviteSecret));
|
|
78
78
|
const inviteAgentID = getAgentID(inviteAgentSecret);
|
|
79
79
|
const invitationRole = await new Promise((resolve, reject) => {
|
|
80
|
-
|
|
81
|
-
const role =
|
|
80
|
+
group.groupMap.subscribe((groupMap) => {
|
|
81
|
+
const role = groupMap.get(inviteAgentID);
|
|
82
82
|
if (role) {
|
|
83
83
|
resolve(role);
|
|
84
84
|
}
|
|
@@ -88,22 +88,22 @@ export class LocalNode {
|
|
|
88
88
|
if (!invitationRole) {
|
|
89
89
|
throw new Error("No invitation found");
|
|
90
90
|
}
|
|
91
|
-
const existingRole =
|
|
91
|
+
const existingRole = group.groupMap.get(this.account.id);
|
|
92
92
|
if (existingRole === "admin" ||
|
|
93
93
|
(existingRole === "writer" && invitationRole === "reader")) {
|
|
94
94
|
console.debug("Not accepting invite that would downgrade role");
|
|
95
95
|
return;
|
|
96
96
|
}
|
|
97
|
-
const
|
|
98
|
-
|
|
97
|
+
const groupAsInvite = group.testWithDifferentAccount(new AnonymousControlledAccount(inviteAgentSecret), newRandomSessionID(inviteAgentID));
|
|
98
|
+
groupAsInvite.addMember(this.account.id, invitationRole === "adminInvite"
|
|
99
99
|
? "admin"
|
|
100
100
|
: invitationRole === "writerInvite"
|
|
101
101
|
? "writer"
|
|
102
102
|
: "reader");
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
for (const
|
|
106
|
-
|
|
103
|
+
group.groupMap.coValue._sessions = groupAsInvite.groupMap.coValue.sessions;
|
|
104
|
+
group.groupMap.coValue._cachedContent = undefined;
|
|
105
|
+
for (const groupListener of group.groupMap.coValue.listeners) {
|
|
106
|
+
groupListener(group.groupMap.coValue.getCurrentContent());
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
expectCoValueLoaded(id, expectation) {
|
|
@@ -118,7 +118,7 @@ export class LocalNode {
|
|
|
118
118
|
}
|
|
119
119
|
expectProfileLoaded(id, expectation) {
|
|
120
120
|
const account = this.expectCoValueLoaded(id, expectation);
|
|
121
|
-
const profileID =
|
|
121
|
+
const profileID = expectGroupContent(account.getCurrentContent()).get("profile");
|
|
122
122
|
if (!profileID) {
|
|
123
123
|
throw new Error(`${expectation ? expectation + ": " : ""}Account ${id} has no profile`);
|
|
124
124
|
}
|
|
@@ -126,8 +126,8 @@ export class LocalNode {
|
|
|
126
126
|
}
|
|
127
127
|
createAccount(name, agentSecret = newRandomAgentSecret()) {
|
|
128
128
|
const account = this.createCoValue(accountHeaderForInitialAgentSecret(agentSecret)).testWithDifferentAccount(new AnonymousControlledAccount(agentSecret), newRandomSessionID(getAgentID(agentSecret)));
|
|
129
|
-
const
|
|
130
|
-
|
|
129
|
+
const accountAsGroup = new Group(expectGroupContent(account.getCurrentContent()), account.node);
|
|
130
|
+
accountAsGroup.groupMap.edit((editable) => {
|
|
131
131
|
editable.set(getAgentID(agentSecret), "admin", "trusting");
|
|
132
132
|
const readKey = newRandomKeySecret();
|
|
133
133
|
editable.set(`${readKey.id}_for_${getAgentID(agentSecret)}`, seal(readKey.secret, getAgentSealerSecret(agentSecret), getAgentSealerID(getAgentID(agentSecret)), {
|
|
@@ -137,17 +137,17 @@ export class LocalNode {
|
|
|
137
137
|
editable.set("readKey", readKey.id, "trusting");
|
|
138
138
|
});
|
|
139
139
|
const controlledAccount = new ControlledAccount(agentSecret, account.getCurrentContent(), account.node);
|
|
140
|
-
const profile =
|
|
140
|
+
const profile = accountAsGroup.createMap({
|
|
141
141
|
type: "profile",
|
|
142
142
|
});
|
|
143
143
|
profile.edit((editable) => {
|
|
144
144
|
editable.set("name", name, "trusting");
|
|
145
145
|
});
|
|
146
|
-
|
|
146
|
+
accountAsGroup.groupMap.edit((editable) => {
|
|
147
147
|
editable.set("profile", profile.id, "trusting");
|
|
148
148
|
});
|
|
149
149
|
const accountOnThisNode = this.expectCoValueLoaded(account.id);
|
|
150
|
-
accountOnThisNode._sessions = { ...
|
|
150
|
+
accountOnThisNode._sessions = { ...accountAsGroup.groupMap.coValue.sessions };
|
|
151
151
|
accountOnThisNode._cachedContent = undefined;
|
|
152
152
|
return controlledAccount;
|
|
153
153
|
}
|
|
@@ -157,7 +157,7 @@ export class LocalNode {
|
|
|
157
157
|
}
|
|
158
158
|
const coValue = this.expectCoValueLoaded(id, expectation);
|
|
159
159
|
if (coValue.header.type !== "comap" ||
|
|
160
|
-
coValue.header.ruleset.type !== "
|
|
160
|
+
coValue.header.ruleset.type !== "group" ||
|
|
161
161
|
!coValue.header.meta ||
|
|
162
162
|
!("type" in coValue.header.meta) ||
|
|
163
163
|
coValue.header.meta.type !== "account") {
|
|
@@ -165,24 +165,24 @@ export class LocalNode {
|
|
|
165
165
|
}
|
|
166
166
|
return new Account(coValue.getCurrentContent(), this).getCurrentAgentID();
|
|
167
167
|
}
|
|
168
|
-
|
|
169
|
-
const
|
|
168
|
+
createGroup() {
|
|
169
|
+
const groupCoValue = this.createCoValue({
|
|
170
170
|
type: "comap",
|
|
171
|
-
ruleset: { type: "
|
|
171
|
+
ruleset: { type: "group", initialAdmin: this.account.id },
|
|
172
172
|
meta: null,
|
|
173
173
|
...createdNowUnique(),
|
|
174
174
|
});
|
|
175
|
-
let
|
|
176
|
-
|
|
175
|
+
let groupContent = expectGroupContent(groupCoValue.getCurrentContent());
|
|
176
|
+
groupContent = groupContent.edit((editable) => {
|
|
177
177
|
editable.set(this.account.id, "admin", "trusting");
|
|
178
178
|
const readKey = newRandomKeySecret();
|
|
179
179
|
editable.set(`${readKey.id}_for_${this.account.id}`, seal(readKey.secret, this.account.currentSealerSecret(), this.account.currentSealerID(), {
|
|
180
|
-
in:
|
|
181
|
-
tx:
|
|
180
|
+
in: groupCoValue.id,
|
|
181
|
+
tx: groupCoValue.nextTransactionID(),
|
|
182
182
|
}), "trusting");
|
|
183
183
|
editable.set("readKey", readKey.id, "trusting");
|
|
184
184
|
});
|
|
185
|
-
return new
|
|
185
|
+
return new Group(groupContent, this);
|
|
186
186
|
}
|
|
187
187
|
testWithDifferentAccount(account, ownSessionID) {
|
|
188
188
|
const newNode = new LocalNode(account, ownSessionID);
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,yBAAyB,EACzB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,IAAI,GACP,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAiB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAEH,
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/dist/permissions.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ import { CoValue, Transaction } from "./coValue.js";
|
|
|
3
3
|
import { RawCoID, TransactionID } from "./ids.js";
|
|
4
4
|
import { AccountIDOrAgentID } from "./account.js";
|
|
5
5
|
export type PermissionsDef = {
|
|
6
|
-
type: "
|
|
6
|
+
type: "group";
|
|
7
7
|
initialAdmin: AccountIDOrAgentID;
|
|
8
8
|
} | {
|
|
9
|
-
type: "
|
|
10
|
-
|
|
9
|
+
type: "ownedByGroup";
|
|
10
|
+
group: RawCoID;
|
|
11
11
|
} | {
|
|
12
12
|
type: "unsafeAllowAll";
|
|
13
13
|
};
|
package/dist/permissions.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { accountOrAgentIDfromSessionID, } from "./coValue.js";
|
|
2
2
|
export function determineValidTransactions(coValue) {
|
|
3
|
-
if (coValue.header.ruleset.type === "
|
|
3
|
+
if (coValue.header.ruleset.type === "group") {
|
|
4
4
|
const allTrustingTransactionsSorted = Object.entries(coValue.sessions).flatMap(([sessionID, sessionLog]) => {
|
|
5
5
|
return sessionLog.transactions
|
|
6
6
|
.map((tx, txIndex) => ({ sessionID, txIndex, tx }))
|
|
@@ -9,7 +9,7 @@ export function determineValidTransactions(coValue) {
|
|
|
9
9
|
return true;
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
12
|
-
console.warn("Unexpected private transaction in
|
|
12
|
+
console.warn("Unexpected private transaction in Group");
|
|
13
13
|
return false;
|
|
14
14
|
}
|
|
15
15
|
});
|
|
@@ -19,7 +19,7 @@ export function determineValidTransactions(coValue) {
|
|
|
19
19
|
});
|
|
20
20
|
const initialAdmin = coValue.header.ruleset.initialAdmin;
|
|
21
21
|
if (!initialAdmin) {
|
|
22
|
-
throw new Error("
|
|
22
|
+
throw new Error("Group must have initialAdmin");
|
|
23
23
|
}
|
|
24
24
|
const memberState = {};
|
|
25
25
|
const validTransactions = [];
|
|
@@ -28,11 +28,11 @@ export function determineValidTransactions(coValue) {
|
|
|
28
28
|
const transactor = accountOrAgentIDfromSessionID(sessionID);
|
|
29
29
|
const change = tx.changes[0];
|
|
30
30
|
if (tx.changes.length !== 1) {
|
|
31
|
-
console.warn("
|
|
31
|
+
console.warn("Group transaction must have exactly one change");
|
|
32
32
|
continue;
|
|
33
33
|
}
|
|
34
34
|
if (change.op !== "set") {
|
|
35
|
-
console.warn("
|
|
35
|
+
console.warn("Group transaction must set a role or readKey");
|
|
36
36
|
continue;
|
|
37
37
|
}
|
|
38
38
|
if (change.key === "readKey") {
|
|
@@ -73,7 +73,7 @@ export function determineValidTransactions(coValue) {
|
|
|
73
73
|
change.value !== "adminInvite" &&
|
|
74
74
|
change.value !== "writerInvite" &&
|
|
75
75
|
change.value !== "readerInvite") {
|
|
76
|
-
console.warn("
|
|
76
|
+
console.warn("Group transaction must set a valid role");
|
|
77
77
|
continue;
|
|
78
78
|
}
|
|
79
79
|
const isFirstSelfAppointment = !memberState[transactor] &&
|
|
@@ -109,7 +109,7 @@ export function determineValidTransactions(coValue) {
|
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
else {
|
|
112
|
-
console.warn("
|
|
112
|
+
console.warn("Group transaction must be made by current admin or invite");
|
|
113
113
|
continue;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -119,18 +119,18 @@ export function determineValidTransactions(coValue) {
|
|
|
119
119
|
}
|
|
120
120
|
return validTransactions;
|
|
121
121
|
}
|
|
122
|
-
else if (coValue.header.ruleset.type === "
|
|
123
|
-
const
|
|
124
|
-
.expectCoValueLoaded(coValue.header.ruleset.
|
|
122
|
+
else if (coValue.header.ruleset.type === "ownedByGroup") {
|
|
123
|
+
const groupContent = coValue.node
|
|
124
|
+
.expectCoValueLoaded(coValue.header.ruleset.group, "Determining valid transaction in owned object but its group wasn't loaded")
|
|
125
125
|
.getCurrentContent();
|
|
126
|
-
if (
|
|
127
|
-
throw new Error("
|
|
126
|
+
if (groupContent.type !== "comap") {
|
|
127
|
+
throw new Error("Group must be a map");
|
|
128
128
|
}
|
|
129
129
|
return Object.entries(coValue.sessions).flatMap(([sessionID, sessionLog]) => {
|
|
130
130
|
const transactor = accountOrAgentIDfromSessionID(sessionID);
|
|
131
131
|
return sessionLog.transactions
|
|
132
132
|
.filter((tx) => {
|
|
133
|
-
const transactorRoleAtTxTime =
|
|
133
|
+
const transactorRoleAtTxTime = groupContent.getAtTime(transactor, tx.madeAt);
|
|
134
134
|
return (transactorRoleAtTxTime === "admin" ||
|
|
135
135
|
transactorRoleAtTxTime === "writer");
|
|
136
136
|
})
|
package/dist/permissions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAMA,OAAO,EAIH,6BAA6B,GAChC,MAAM,cAAc,CAAC;AAqBtB,MAAM,UAAU,0BAA0B,CACtC,OAAgB;IAEhB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"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"}
|
package/dist/testUtils.d.ts
CHANGED
|
@@ -2,26 +2,26 @@ import { LocalNode } from "./node.js";
|
|
|
2
2
|
import { AnonymousControlledAccount } from "./account.js";
|
|
3
3
|
import { SessionID } from "./ids.js";
|
|
4
4
|
export declare function randomAnonymousAccountAndSessionID(): [AnonymousControlledAccount, SessionID];
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function newGroup(): {
|
|
6
6
|
node: LocalNode;
|
|
7
|
-
|
|
7
|
+
group: import("./coValue.js").CoValue;
|
|
8
8
|
admin: AnonymousControlledAccount;
|
|
9
9
|
};
|
|
10
|
-
export declare function
|
|
11
|
-
|
|
10
|
+
export declare function groupWithTwoAdmins(): {
|
|
11
|
+
group: import("./coValue.js").CoValue;
|
|
12
12
|
admin: AnonymousControlledAccount;
|
|
13
13
|
otherAdmin: import("./account.js").ControlledAccount;
|
|
14
14
|
node: LocalNode;
|
|
15
15
|
};
|
|
16
|
-
export declare function
|
|
16
|
+
export declare function newGroupHighLevel(): {
|
|
17
17
|
admin: AnonymousControlledAccount;
|
|
18
18
|
node: LocalNode;
|
|
19
|
-
|
|
19
|
+
group: import("./group.js").Group;
|
|
20
20
|
};
|
|
21
|
-
export declare function
|
|
21
|
+
export declare function groupWithTwoAdminsHighLevel(): {
|
|
22
22
|
admin: AnonymousControlledAccount;
|
|
23
23
|
node: LocalNode;
|
|
24
|
-
|
|
24
|
+
group: import("./group.js").Group;
|
|
25
25
|
otherAdmin: import("./account.js").ControlledAccount;
|
|
26
26
|
};
|
|
27
27
|
export declare function shouldNotResolve<T>(promise: Promise<T>, ops: {
|
package/dist/testUtils.js
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
1
|
import { createdNowUnique, getAgentID, newRandomAgentSecret } from "./crypto.js";
|
|
2
2
|
import { newRandomSessionID } from "./coValue.js";
|
|
3
3
|
import { LocalNode } from "./node.js";
|
|
4
|
-
import {
|
|
4
|
+
import { expectGroupContent } from "./group.js";
|
|
5
5
|
import { AnonymousControlledAccount } from "./account.js";
|
|
6
6
|
export function randomAnonymousAccountAndSessionID() {
|
|
7
7
|
const agentSecret = newRandomAgentSecret();
|
|
8
8
|
const sessionID = newRandomSessionID(getAgentID(agentSecret));
|
|
9
9
|
return [new AnonymousControlledAccount(agentSecret), sessionID];
|
|
10
10
|
}
|
|
11
|
-
export function
|
|
11
|
+
export function newGroup() {
|
|
12
12
|
const [admin, sessionID] = randomAnonymousAccountAndSessionID();
|
|
13
13
|
const node = new LocalNode(admin, sessionID);
|
|
14
|
-
const
|
|
14
|
+
const group = node.createCoValue({
|
|
15
15
|
type: "comap",
|
|
16
|
-
ruleset: { type: "
|
|
16
|
+
ruleset: { type: "group", initialAdmin: admin.id },
|
|
17
17
|
meta: null,
|
|
18
18
|
...createdNowUnique(),
|
|
19
19
|
});
|
|
20
|
-
const
|
|
21
|
-
|
|
20
|
+
const groupContent = expectGroupContent(group.getCurrentContent());
|
|
21
|
+
groupContent.edit((editable) => {
|
|
22
22
|
editable.set(admin.id, "admin", "trusting");
|
|
23
23
|
expect(editable.get(admin.id)).toEqual("admin");
|
|
24
24
|
});
|
|
25
|
-
return { node,
|
|
25
|
+
return { node, group, admin };
|
|
26
26
|
}
|
|
27
|
-
export function
|
|
28
|
-
const {
|
|
27
|
+
export function groupWithTwoAdmins() {
|
|
28
|
+
const { group, admin, node } = newGroup();
|
|
29
29
|
const otherAdmin = node.createAccount("otherAdmin");
|
|
30
|
-
let content =
|
|
30
|
+
let content = expectGroupContent(group.getCurrentContent());
|
|
31
31
|
content.edit((editable) => {
|
|
32
32
|
editable.set(otherAdmin.id, "admin", "trusting");
|
|
33
33
|
expect(editable.get(otherAdmin.id)).toEqual("admin");
|
|
34
34
|
});
|
|
35
|
-
content =
|
|
35
|
+
content = expectGroupContent(group.getCurrentContent());
|
|
36
36
|
if (content.type !== "comap") {
|
|
37
37
|
throw new Error("Expected map");
|
|
38
38
|
}
|
|
39
39
|
expect(content.get(otherAdmin.id)).toEqual("admin");
|
|
40
|
-
return {
|
|
40
|
+
return { group, admin, otherAdmin, node };
|
|
41
41
|
}
|
|
42
|
-
export function
|
|
42
|
+
export function newGroupHighLevel() {
|
|
43
43
|
const [admin, sessionID] = randomAnonymousAccountAndSessionID();
|
|
44
44
|
const node = new LocalNode(admin, sessionID);
|
|
45
|
-
const
|
|
46
|
-
return { admin, node,
|
|
45
|
+
const group = node.createGroup();
|
|
46
|
+
return { admin, node, group };
|
|
47
47
|
}
|
|
48
|
-
export function
|
|
49
|
-
const { admin, node,
|
|
48
|
+
export function groupWithTwoAdminsHighLevel() {
|
|
49
|
+
const { admin, node, group } = newGroupHighLevel();
|
|
50
50
|
const otherAdmin = node.createAccount("otherAdmin");
|
|
51
|
-
|
|
52
|
-
return { admin, node,
|
|
51
|
+
group.addMember(otherAdmin.id, "admin");
|
|
52
|
+
return { admin, node, group, otherAdmin };
|
|
53
53
|
}
|
|
54
54
|
export function shouldNotResolve(promise, ops) {
|
|
55
55
|
return new Promise((resolve, reject) => {
|
package/dist/testUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,gBAAgB,EAAE,UAAU,EAAE,oBAAoB,EAAG,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"license": "MIT",
|
|
8
|
-
"version": "0.0
|
|
8
|
+
"version": "0.1.0",
|
|
9
9
|
"devDependencies": {
|
|
10
10
|
"@types/jest": "^29.5.3",
|
|
11
11
|
"@typescript-eslint/eslint-plugin": "^6.2.1",
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"/dist/"
|
|
53
53
|
]
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "10b372da6e1f944750a360bc28c9bbbf04d65e06"
|
|
56
56
|
}
|
package/src/account.test.ts
CHANGED
|
@@ -19,14 +19,14 @@ test("Can create a node while creating a new account with profile", async () =>
|
|
|
19
19
|
);
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
test("A node with an account can create
|
|
22
|
+
test("A node with an account can create groups and and objects within them", async () => {
|
|
23
23
|
const { node, accountID } =
|
|
24
24
|
LocalNode.withNewlyCreatedAccount("Hermes Puggington");
|
|
25
25
|
|
|
26
|
-
const
|
|
27
|
-
expect(
|
|
26
|
+
const group = await node.createGroup();
|
|
27
|
+
expect(group).not.toBeNull();
|
|
28
28
|
|
|
29
|
-
let map =
|
|
29
|
+
let map = group.createMap();
|
|
30
30
|
map = map.edit((edit) => {
|
|
31
31
|
edit.set("foo", "bar", "private");
|
|
32
32
|
expect(edit.get("foo")).toEqual("bar");
|
|
@@ -41,10 +41,10 @@ test("Can create account with one node, and then load it on another", async () =
|
|
|
41
41
|
const { node, accountID, accountSecret } =
|
|
42
42
|
LocalNode.withNewlyCreatedAccount("Hermes Puggington");
|
|
43
43
|
|
|
44
|
-
const
|
|
45
|
-
expect(
|
|
44
|
+
const group = await node.createGroup();
|
|
45
|
+
expect(group).not.toBeNull();
|
|
46
46
|
|
|
47
|
-
let map =
|
|
47
|
+
let map = group.createMap();
|
|
48
48
|
map = map.edit((edit) => {
|
|
49
49
|
edit.set("foo", "bar", "private");
|
|
50
50
|
expect(edit.get("foo")).toEqual("bar");
|
package/src/account.ts
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./crypto.js";
|
|
15
15
|
import { AgentID } from "./ids.js";
|
|
16
16
|
import { CoMap, LocalNode } from "./index.js";
|
|
17
|
-
import {
|
|
17
|
+
import { Group, GroupContent } from "./group.js";
|
|
18
18
|
|
|
19
19
|
export function accountHeaderForInitialAgentSecret(
|
|
20
20
|
agentSecret: AgentSecret
|
|
@@ -22,7 +22,7 @@ export function accountHeaderForInitialAgentSecret(
|
|
|
22
22
|
const agent = getAgentID(agentSecret);
|
|
23
23
|
return {
|
|
24
24
|
type: "comap",
|
|
25
|
-
ruleset: { type: "
|
|
25
|
+
ruleset: { type: "group", initialAdmin: agent },
|
|
26
26
|
meta: {
|
|
27
27
|
type: "account",
|
|
28
28
|
},
|
|
@@ -31,13 +31,13 @@ export function accountHeaderForInitialAgentSecret(
|
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export class Account extends
|
|
34
|
+
export class Account extends Group {
|
|
35
35
|
get id(): AccountID {
|
|
36
|
-
return this.
|
|
36
|
+
return this.groupMap.id as AccountID;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
getCurrentAgentID(): AgentID {
|
|
40
|
-
const agents = this.
|
|
40
|
+
const agents = this.groupMap
|
|
41
41
|
.keys()
|
|
42
42
|
.filter((k): k is AgentID => k.startsWith("sealer_"));
|
|
43
43
|
|
|
@@ -70,10 +70,10 @@ export class ControlledAccount
|
|
|
70
70
|
|
|
71
71
|
constructor(
|
|
72
72
|
agentSecret: AgentSecret,
|
|
73
|
-
|
|
73
|
+
groupMap: CoMap<AccountContent, AccountMeta>,
|
|
74
74
|
node: LocalNode
|
|
75
75
|
) {
|
|
76
|
-
super(
|
|
76
|
+
super(groupMap, node);
|
|
77
77
|
|
|
78
78
|
this.agentSecret = agentSecret;
|
|
79
79
|
}
|
|
@@ -133,7 +133,7 @@ export class AnonymousControlledAccount
|
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
export type AccountContent =
|
|
136
|
+
export type AccountContent = GroupContent & { profile: CoID<Profile> };
|
|
137
137
|
export type AccountMeta = { type: "account" };
|
|
138
138
|
export type AccountID = CoID<CoMap<AccountContent, AccountMeta>>;
|
|
139
139
|
|
package/src/coValue.test.ts
CHANGED
|
@@ -125,17 +125,17 @@ test("transactions with correctly signed, but wrong hash are rejected", () => {
|
|
|
125
125
|
).toBe(false);
|
|
126
126
|
});
|
|
127
127
|
|
|
128
|
-
test("New transactions in a
|
|
128
|
+
test("New transactions in a group correctly update owned values, including subscriptions", async () => {
|
|
129
129
|
const [account, sessionID] = randomAnonymousAccountAndSessionID();
|
|
130
130
|
const node = new LocalNode(account, sessionID);
|
|
131
131
|
|
|
132
|
-
const
|
|
132
|
+
const group = node.createGroup();
|
|
133
133
|
|
|
134
134
|
const timeBeforeEdit = Date.now();
|
|
135
135
|
|
|
136
136
|
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
137
137
|
|
|
138
|
-
let map =
|
|
138
|
+
let map = group.createMap();
|
|
139
139
|
|
|
140
140
|
let mapAfterEdit = map.edit((map) => {
|
|
141
141
|
map.set("hello", "world");
|
|
@@ -159,7 +159,7 @@ test("New transactions in a team correctly update owned values, including subscr
|
|
|
159
159
|
]
|
|
160
160
|
} satisfies Transaction;
|
|
161
161
|
|
|
162
|
-
const { expectedNewHash } =
|
|
162
|
+
const { expectedNewHash } = group.groupMap.coValue.expectedNewHashAfter(sessionID, [
|
|
163
163
|
resignationThatWeJustLearnedAbout,
|
|
164
164
|
]);
|
|
165
165
|
|
|
@@ -170,7 +170,7 @@ test("New transactions in a team correctly update owned values, including subscr
|
|
|
170
170
|
|
|
171
171
|
expect(map.coValue.getValidSortedTransactions().length).toBe(1);
|
|
172
172
|
|
|
173
|
-
const manuallyAdddedTxSuccess =
|
|
173
|
+
const manuallyAdddedTxSuccess = group.groupMap.coValue.tryAddTransactions(node.ownSessionID, [resignationThatWeJustLearnedAbout], expectedNewHash, signature);
|
|
174
174
|
|
|
175
175
|
expect(manuallyAdddedTxSuccess).toBe(true);
|
|
176
176
|
|