cojson 0.0.10 → 0.0.12

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.
Files changed (75) hide show
  1. package/README.md +2 -2
  2. package/dist/account.d.ts +57 -0
  3. package/dist/account.js +76 -0
  4. package/dist/account.js.map +1 -0
  5. package/dist/account.test.d.ts +1 -0
  6. package/dist/account.test.js +40 -0
  7. package/dist/account.test.js.map +1 -0
  8. package/dist/coValue.d.ts +16 -35
  9. package/dist/coValue.js +49 -112
  10. package/dist/coValue.js.map +1 -1
  11. package/dist/coValue.test.js +16 -16
  12. package/dist/coValue.test.js.map +1 -1
  13. package/dist/contentType.d.ts +9 -9
  14. package/dist/contentType.js.map +1 -1
  15. package/dist/contentType.test.js +13 -17
  16. package/dist/contentType.test.js.map +1 -1
  17. package/dist/contentTypes/coList.d.ts +3 -3
  18. package/dist/contentTypes/coList.js.map +1 -1
  19. package/dist/contentTypes/coMap.d.ts +31 -21
  20. package/dist/contentTypes/coMap.js +28 -0
  21. package/dist/contentTypes/coMap.js.map +1 -1
  22. package/dist/contentTypes/coStream.d.ts +3 -3
  23. package/dist/contentTypes/coStream.js.map +1 -1
  24. package/dist/contentTypes/static.d.ts +4 -4
  25. package/dist/contentTypes/static.js.map +1 -1
  26. package/dist/crypto.d.ts +45 -39
  27. package/dist/crypto.js +68 -49
  28. package/dist/crypto.js.map +1 -1
  29. package/dist/crypto.test.js +45 -49
  30. package/dist/crypto.test.js.map +1 -1
  31. package/dist/ids.d.ts +5 -3
  32. package/dist/ids.js +3 -1
  33. package/dist/ids.js.map +1 -1
  34. package/dist/index.d.ts +12 -14
  35. package/dist/index.js +6 -8
  36. package/dist/index.js.map +1 -1
  37. package/dist/jsonValue.d.ts +2 -2
  38. package/dist/node.d.ts +25 -15
  39. package/dist/node.js +88 -33
  40. package/dist/node.js.map +1 -1
  41. package/dist/permissions.d.ts +27 -33
  42. package/dist/permissions.js +55 -47
  43. package/dist/permissions.js.map +1 -1
  44. package/dist/permissions.test.js +231 -314
  45. package/dist/permissions.test.js.map +1 -1
  46. package/dist/sync.d.ts +26 -28
  47. package/dist/sync.js +81 -67
  48. package/dist/sync.js.map +1 -1
  49. package/dist/sync.test.js +194 -293
  50. package/dist/sync.test.js.map +1 -1
  51. package/dist/testUtils.d.ts +37 -0
  52. package/dist/testUtils.js +157 -0
  53. package/dist/testUtils.js.map +1 -0
  54. package/package.json +1 -1
  55. package/src/account.test.ts +67 -0
  56. package/src/account.ts +152 -0
  57. package/src/coValue.test.ts +17 -31
  58. package/src/coValue.ts +93 -179
  59. package/src/contentType.test.ts +18 -45
  60. package/src/contentType.ts +15 -13
  61. package/src/contentTypes/coList.ts +4 -4
  62. package/src/contentTypes/coMap.ts +55 -29
  63. package/src/contentTypes/coStream.ts +4 -4
  64. package/src/contentTypes/static.ts +5 -5
  65. package/src/crypto.test.ts +53 -59
  66. package/src/crypto.ts +123 -95
  67. package/src/ids.ts +9 -3
  68. package/src/index.ts +14 -25
  69. package/src/jsonValue.ts +2 -2
  70. package/src/node.ts +189 -61
  71. package/src/permissions.test.ts +370 -404
  72. package/src/permissions.ts +126 -109
  73. package/src/sync.test.ts +284 -426
  74. package/src/sync.ts +115 -105
  75. package/src/testUtils.ts +229 -0
package/dist/node.js CHANGED
@@ -1,22 +1,41 @@
1
- import { createdNowUnique, newRandomKeySecret, seal } from './crypto.js';
2
- import { CoValue, getAgent, getAgentID, getAgentCoValueHeader, newRandomAgentCredential, } from './coValue.js';
3
- import { Team, expectTeamContent } from './permissions.js';
4
- import { SyncManager } from './sync.js';
1
+ import { createdNowUnique, getAgentID, getAgentSealerID, getAgentSealerSecret, newRandomAgentSecret, newRandomKeySecret, seal, } from "./crypto.js";
2
+ import { CoValue, newRandomSessionID } from "./coValue.js";
3
+ import { Team, expectTeamContent } from "./permissions.js";
4
+ import { SyncManager } from "./sync.js";
5
+ import { isAgentID } from "./ids.js";
6
+ import { Account, accountHeaderForInitialAgentSecret, ControlledAccount, AnonymousControlledAccount, } from "./account.js";
5
7
  export class LocalNode {
6
- constructor(agentCredential, ownSessionID) {
8
+ constructor(account, ownSessionID) {
7
9
  this.coValues = {};
8
10
  this.sync = new SyncManager(this);
9
- this.agentCredential = agentCredential;
10
- const agent = getAgent(agentCredential);
11
- const agentID = getAgentID(agent);
12
- this.agentID = agentID;
11
+ this.account = account;
13
12
  this.ownSessionID = ownSessionID;
14
- const agentCoValue = new CoValue(getAgentCoValueHeader(agent), this);
15
- this.coValues[agentCoValue.id] = {
16
- state: "loaded",
17
- coValue: agentCoValue,
13
+ }
14
+ static withNewlyCreatedAccount(name) {
15
+ const throwawayAgent = newRandomAgentSecret();
16
+ const setupNode = new LocalNode(new AnonymousControlledAccount(throwawayAgent), newRandomSessionID(getAgentID(throwawayAgent)));
17
+ const account = setupNode.createAccount(name);
18
+ const nodeWithAccount = account.node.testWithDifferentAccount(account, newRandomSessionID(account.id));
19
+ return {
20
+ node: nodeWithAccount,
21
+ accountID: account.id,
22
+ accountSecret: account.agentSecret,
23
+ sessionID: nodeWithAccount.ownSessionID,
18
24
  };
19
25
  }
26
+ static async withLoadedAccount(accountID, accountSecret, sessionID, peersToLoadFrom) {
27
+ const loadingNode = new LocalNode(new AnonymousControlledAccount(accountSecret), newRandomSessionID(accountID));
28
+ const accountPromise = loadingNode.load(accountID);
29
+ for (const peer of peersToLoadFrom) {
30
+ loadingNode.sync.addPeer(peer);
31
+ }
32
+ const account = await accountPromise;
33
+ // since this is all synchronous, we can just swap out nodes for the SyncManager
34
+ const node = loadingNode.testWithDifferentAccount(new ControlledAccount(accountSecret, account, loadingNode), sessionID);
35
+ node.sync = loadingNode.sync;
36
+ node.sync.local = node;
37
+ return node;
38
+ }
20
39
  createCoValue(header) {
21
40
  const coValue = new CoValue(header, this);
22
41
  this.coValues[coValue.id] = { state: "loaded", coValue: coValue };
@@ -38,6 +57,14 @@ export class LocalNode {
38
57
  async load(id) {
39
58
  return (await this.loadCoValue(id)).getCurrentContent();
40
59
  }
60
+ async loadProfile(id) {
61
+ const account = await this.load(id);
62
+ const profileID = account.get("profile");
63
+ if (!profileID) {
64
+ throw new Error(`Account ${id} has no profile`);
65
+ }
66
+ return (await this.loadCoValue(profileID)).getCurrentContent();
67
+ }
41
68
  expectCoValueLoaded(id, expectation) {
42
69
  const entry = this.coValues[id];
43
70
  if (!entry) {
@@ -48,44 +75,72 @@ export class LocalNode {
48
75
  }
49
76
  return entry.coValue;
50
77
  }
51
- createAgent(publicNickname) {
52
- const agentCredential = newRandomAgentCredential(publicNickname);
53
- this.createCoValue(getAgentCoValueHeader(getAgent(agentCredential)));
54
- return agentCredential;
78
+ expectProfileLoaded(id, expectation) {
79
+ const account = this.expectCoValueLoaded(id, expectation);
80
+ const profileID = expectTeamContent(account.getCurrentContent()).get("profile");
81
+ if (!profileID) {
82
+ throw new Error(`${expectation ? expectation + ": " : ""}Account ${id} has no profile`);
83
+ }
84
+ return this.expectCoValueLoaded(profileID, expectation).getCurrentContent();
55
85
  }
56
- expectAgentLoaded(id, expectation) {
86
+ createAccount(name) {
87
+ const agentSecret = newRandomAgentSecret();
88
+ const account = this.createCoValue(accountHeaderForInitialAgentSecret(agentSecret)).testWithDifferentAccount(new AnonymousControlledAccount(agentSecret), newRandomSessionID(getAgentID(agentSecret)));
89
+ const accountAsTeam = new Team(expectTeamContent(account.getCurrentContent()), account.node);
90
+ accountAsTeam.teamMap.edit((editable) => {
91
+ editable.set(getAgentID(agentSecret), "admin", "trusting");
92
+ const readKey = newRandomKeySecret();
93
+ editable.set(`${readKey.id}_for_${getAgentID(agentSecret)}`, seal(readKey.secret, getAgentSealerSecret(agentSecret), getAgentSealerID(getAgentID(agentSecret)), {
94
+ in: account.id,
95
+ tx: account.nextTransactionID(),
96
+ }), "trusting");
97
+ editable.set("readKey", readKey.id, "trusting");
98
+ });
99
+ const controlledAccount = new ControlledAccount(agentSecret, account.getCurrentContent(), account.node);
100
+ const profile = accountAsTeam.createMap({ type: "profile" });
101
+ profile.edit((editable) => {
102
+ editable.set("name", name, "trusting");
103
+ });
104
+ accountAsTeam.teamMap.edit((editable) => {
105
+ editable.set("profile", profile.id, "trusting");
106
+ });
107
+ return controlledAccount;
108
+ }
109
+ resolveAccountAgent(id, expectation) {
110
+ if (isAgentID(id)) {
111
+ return id;
112
+ }
57
113
  const coValue = this.expectCoValueLoaded(id, expectation);
58
- if (coValue.header.type !== "comap" || coValue.header.ruleset.type !== "agent") {
59
- throw new Error(`${expectation ? expectation + ": " : ""}CoValue ${id} is not an agent`);
114
+ if (coValue.header.type !== "comap" ||
115
+ coValue.header.ruleset.type !== "team" ||
116
+ !coValue.header.meta ||
117
+ !("type" in coValue.header.meta) ||
118
+ coValue.header.meta.type !== "account") {
119
+ throw new Error(`${expectation ? expectation + ": " : ""}CoValue ${id} is not an account`);
60
120
  }
61
- return {
62
- recipientID: coValue.header.ruleset.initialRecipientID,
63
- signatoryID: coValue.header.ruleset.initialSignatoryID,
64
- publicNickname: coValue.header.publicNickname?.replace("agent-", ""),
65
- };
121
+ return new Account(coValue.getCurrentContent(), this).getCurrentAgentID();
66
122
  }
67
123
  createTeam() {
68
124
  const teamCoValue = this.createCoValue({
69
125
  type: "comap",
70
- ruleset: { type: "team", initialAdmin: this.agentID },
126
+ ruleset: { type: "team", initialAdmin: this.account.id },
71
127
  meta: null,
72
128
  ...createdNowUnique(),
73
- publicNickname: "team",
74
129
  });
75
130
  let teamContent = expectTeamContent(teamCoValue.getCurrentContent());
76
131
  teamContent = teamContent.edit((editable) => {
77
- editable.set(this.agentID, "admin", "trusting");
132
+ editable.set(this.account.id, "admin", "trusting");
78
133
  const readKey = newRandomKeySecret();
79
- const revelation = seal(readKey.secret, this.agentCredential.recipientSecret, new Set([getAgent(this.agentCredential).recipientID]), {
134
+ editable.set(`${readKey.id}_for_${this.account.id}`, seal(readKey.secret, this.account.currentSealerSecret(), this.account.currentSealerID(), {
80
135
  in: teamCoValue.id,
81
136
  tx: teamCoValue.nextTransactionID(),
82
- });
83
- editable.set("readKey", { keyID: readKey.id, revelation }, "trusting");
137
+ }), "trusting");
138
+ editable.set("readKey", readKey.id, "trusting");
84
139
  });
85
140
  return new Team(teamContent, this);
86
141
  }
87
- testWithDifferentCredentials(agentCredential, ownSessionID) {
88
- const newNode = new LocalNode(agentCredential, ownSessionID);
142
+ testWithDifferentAccount(account, ownSessionID) {
143
+ const newNode = new LocalNode(account, ownSessionID);
89
144
  newNode.coValues = Object.fromEntries(Object.entries(this.coValues)
90
145
  .map(([id, entry]) => {
91
146
  if (entry.state === "loading") {
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,17 @@
1
- import { ContentType } from './contentType.js';
2
- import { CoMap } from './contentTypes/coMap.js';
3
- import { JsonValue } from './jsonValue.js';
4
- import { Encrypted, KeyID, KeySecret, RecipientID, SealedSet, SignatoryID } from './crypto.js';
5
- import { AgentCredential, CoValue, Transaction } from './coValue.js';
1
+ import { CoID, ContentType } from "./contentType.js";
2
+ import { CoMap } from "./contentTypes/coMap.js";
3
+ import { JsonObject, JsonValue } from "./jsonValue.js";
4
+ import { Encrypted, KeyID, KeySecret, Sealed } from "./crypto.js";
5
+ import { CoValue, Transaction } from "./coValue.js";
6
6
  import { LocalNode } from "./node.js";
7
- import { AgentID, RawCoValueID, SessionID, TransactionID } from './ids.js';
7
+ import { RawCoID, SessionID, TransactionID } from "./ids.js";
8
+ import { AccountIDOrAgentID, GeneralizedControlledAccount, Profile } from "./account.js";
8
9
  export type PermissionsDef = {
9
10
  type: "team";
10
- initialAdmin: AgentID;
11
- parentTeams?: RawCoValueID[];
11
+ initialAdmin: AccountIDOrAgentID;
12
12
  } | {
13
13
  type: "ownedByTeam";
14
- team: RawCoValueID;
15
- } | {
16
- type: "agent";
17
- initialSignatoryID: SignatoryID;
18
- initialRecipientID: RecipientID;
14
+ team: RawCoID;
19
15
  } | {
20
16
  type: "unsafeAllowAll";
21
17
  };
@@ -25,30 +21,28 @@ export declare function determineValidTransactions(coValue: CoValue): {
25
21
  tx: Transaction;
26
22
  }[];
27
23
  export type TeamContent = {
28
- [key: AgentID]: Role;
29
- } & {
30
- readKey: {
31
- keyID: KeyID;
32
- revelation: SealedSet<KeySecret>;
33
- previousKeys?: {
34
- [key: KeyID]: Encrypted<KeySecret, {
35
- sealed: KeyID;
36
- sealing: KeyID;
37
- }>;
38
- };
39
- };
24
+ profile: CoID<Profile> | null;
25
+ [key: AccountIDOrAgentID]: Role;
26
+ readKey: KeyID;
27
+ [revelationFor: `${KeyID}_for_${AccountIDOrAgentID}`]: Sealed<KeySecret>;
28
+ [oldKeyForNewKey: `${KeyID}_for_${KeyID}`]: Encrypted<KeySecret, {
29
+ encryptedID: KeyID;
30
+ encryptingID: KeyID;
31
+ }>;
40
32
  };
41
- export declare function expectTeamContent(content: ContentType): CoMap<TeamContent, {}>;
33
+ export declare function expectTeamContent(content: ContentType): CoMap<TeamContent, JsonObject | null>;
42
34
  export declare class Team {
43
- teamMap: CoMap<TeamContent, {}>;
35
+ teamMap: CoMap<TeamContent, JsonObject | null>;
44
36
  node: LocalNode;
45
- constructor(teamMap: CoMap<TeamContent, {}>, node: LocalNode);
46
- get id(): RawCoValueID;
47
- addMember(agentID: AgentID, role: Role): void;
37
+ constructor(teamMap: CoMap<TeamContent, JsonObject | null>, node: LocalNode);
38
+ get id(): CoID<CoMap<TeamContent, JsonObject | null>>;
39
+ addMember(accountID: AccountIDOrAgentID, role: Role): void;
48
40
  rotateReadKey(): void;
49
- removeMember(agentID: AgentID): void;
41
+ removeMember(accountID: AccountIDOrAgentID): void;
50
42
  createMap<M extends {
51
43
  [key: string]: JsonValue;
52
- }, Meta extends JsonValue>(meta?: M): CoMap<M, Meta>;
53
- testWithDifferentCredentials(credential: AgentCredential, sessionId: SessionID): Team;
44
+ }, Meta extends JsonObject | null>(meta?: Meta): CoMap<M, Meta>;
45
+ testWithDifferentAccount(account: GeneralizedControlledAccount, sessionId: SessionID): Team;
54
46
  }
47
+ export declare function isKeyForKeyField(field: string): field is `${KeyID}_for_${KeyID}`;
48
+ export declare function isKeyForAccountField(field: string): field is `${KeyID}_for_${AccountIDOrAgentID}`;
@@ -1,5 +1,6 @@
1
- import { createdNowUnique, newRandomKeySecret, seal, sealKeySecret, } from './crypto.js';
2
- import { agentIDfromSessionID, } from './coValue.js';
1
+ import { createdNowUnique, newRandomKeySecret, seal, encryptKeySecret, getAgentSealerID, } from "./crypto.js";
2
+ import { accountOrAgentIDfromSessionID, } from "./coValue.js";
3
+ import { isAgentID } from "./ids.js";
3
4
  export function determineValidTransactions(coValue) {
4
5
  if (coValue.header.ruleset.type === "team") {
5
6
  const allTrustingTransactionsSorted = Object.entries(coValue.sessions).flatMap(([sessionID, sessionLog]) => {
@@ -26,7 +27,7 @@ export function determineValidTransactions(coValue) {
26
27
  const validTransactions = [];
27
28
  for (const { sessionID, txIndex, tx, } of allTrustingTransactionsSorted) {
28
29
  // console.log("before", { memberState, validTransactions });
29
- const transactor = agentIDfromSessionID(sessionID);
30
+ const transactor = accountOrAgentIDfromSessionID(sessionID);
30
31
  const change = tx.changes[0];
31
32
  if (tx.changes.length !== 1) {
32
33
  console.warn("Team transaction must have exactly one change");
@@ -41,6 +42,22 @@ export function determineValidTransactions(coValue) {
41
42
  console.warn("Only admins can set readKeys");
42
43
  continue;
43
44
  }
45
+ validTransactions.push({ txID: { sessionID, txIndex }, tx });
46
+ continue;
47
+ }
48
+ else if (change.key === 'profile') {
49
+ if (memberState[transactor] !== "admin") {
50
+ console.warn("Only admins can set profile");
51
+ continue;
52
+ }
53
+ validTransactions.push({ txID: { sessionID, txIndex }, tx });
54
+ continue;
55
+ }
56
+ else if (isKeyForKeyField(change.key) || isKeyForAccountField(change.key)) {
57
+ if (memberState[transactor] !== "admin") {
58
+ console.warn("Only admins can reveal keys");
59
+ continue;
60
+ }
44
61
  // TODO: check validity of agents who the key is revealed to?
45
62
  validTransactions.push({ txID: { sessionID, txIndex }, tx });
46
63
  continue;
@@ -78,12 +95,14 @@ export function determineValidTransactions(coValue) {
78
95
  return validTransactions;
79
96
  }
80
97
  else if (coValue.header.ruleset.type === "ownedByTeam") {
81
- const teamContent = coValue.node.expectCoValueLoaded(coValue.header.ruleset.team, "Determining valid transaction in owned object but its team wasn't loaded").getCurrentContent();
98
+ const teamContent = coValue.node
99
+ .expectCoValueLoaded(coValue.header.ruleset.team, "Determining valid transaction in owned object but its team wasn't loaded")
100
+ .getCurrentContent();
82
101
  if (teamContent.type !== "comap") {
83
102
  throw new Error("Team must be a map");
84
103
  }
85
104
  return Object.entries(coValue.sessions).flatMap(([sessionID, sessionLog]) => {
86
- const transactor = agentIDfromSessionID(sessionID);
105
+ const transactor = accountOrAgentIDfromSessionID(sessionID);
87
106
  return sessionLog.transactions
88
107
  .filter((tx) => {
89
108
  const transactorRoleAtTxTime = teamContent.getAtTime(transactor, tx.madeAt);
@@ -104,10 +123,6 @@ export function determineValidTransactions(coValue) {
104
123
  }));
105
124
  });
106
125
  }
107
- else if (coValue.header.ruleset.type === "agent") {
108
- // TODO
109
- return [];
110
- }
111
126
  else {
112
127
  throw new Error("Unknown ruleset type " + coValue.header.ruleset.type);
113
128
  }
@@ -126,30 +141,26 @@ export class Team {
126
141
  get id() {
127
142
  return this.teamMap.id;
128
143
  }
129
- addMember(agentID, role) {
144
+ addMember(accountID, role) {
130
145
  this.teamMap = this.teamMap.edit((map) => {
131
- const agent = this.node.expectAgentLoaded(agentID, "Expected to know agent to add them to team");
132
- if (!agent) {
133
- throw new Error("Unknown agent " + agentID);
134
- }
135
- map.set(agentID, role, "trusting");
136
- if (map.get(agentID) !== role) {
137
- throw new Error("Failed to set role");
138
- }
139
146
  const currentReadKey = this.teamMap.coValue.getCurrentReadKey();
140
147
  if (!currentReadKey.secret) {
141
148
  throw new Error("Can't add member without read key secret");
142
149
  }
143
- const revelation = seal(currentReadKey.secret, this.teamMap.coValue.node.agentCredential.recipientSecret, new Set([agent.recipientID]), {
150
+ const agent = this.node.resolveAccountAgent(accountID, "Expected to know agent to add them to team");
151
+ map.set(accountID, role, "trusting");
152
+ if (map.get(accountID) !== role) {
153
+ throw new Error("Failed to set role");
154
+ }
155
+ map.set(`${currentReadKey.id}_for_${accountID}`, seal(currentReadKey.secret, this.teamMap.coValue.node.account.currentSealerSecret(), getAgentSealerID(agent), {
144
156
  in: this.teamMap.coValue.id,
145
157
  tx: this.teamMap.coValue.nextTransactionID(),
146
- });
147
- map.set("readKey", { keyID: currentReadKey.id, revelation }, "trusting");
158
+ }), "trusting");
148
159
  });
149
160
  }
150
161
  rotateReadKey() {
151
162
  const currentlyPermittedReaders = this.teamMap.keys().filter((key) => {
152
- if (key.startsWith("co_agent")) {
163
+ if (key.startsWith("co_") || isAgentID(key)) {
153
164
  const role = this.teamMap.get(key);
154
165
  return (role === "admin" || role === "writer" || role === "reader");
155
166
  }
@@ -166,32 +177,24 @@ export class Team {
166
177
  secret: maybeCurrentReadKey.secret,
167
178
  };
168
179
  const newReadKey = newRandomKeySecret();
169
- const newReadKeyRevelation = seal(newReadKey.secret, this.teamMap.coValue.node.agentCredential.recipientSecret, new Set(currentlyPermittedReaders.map((reader) => {
170
- const readerAgent = this.node.expectAgentLoaded(reader, "Expected to know currently permitted reader");
171
- if (!readerAgent) {
172
- throw new Error("Unknown agent " + reader);
173
- }
174
- return readerAgent.recipientID;
175
- })), {
176
- in: this.teamMap.coValue.id,
177
- tx: this.teamMap.coValue.nextTransactionID(),
178
- });
179
180
  this.teamMap = this.teamMap.edit((map) => {
180
- map.set("readKey", {
181
- keyID: newReadKey.id,
182
- revelation: newReadKeyRevelation,
183
- previousKeys: {
184
- [currentReadKey.id]: sealKeySecret({
185
- sealing: newReadKey,
186
- toSeal: currentReadKey,
187
- }).encrypted,
188
- },
189
- }, "trusting");
181
+ for (const readerID of currentlyPermittedReaders) {
182
+ const reader = this.node.resolveAccountAgent(readerID, "Expected to know currently permitted reader");
183
+ map.set(`${newReadKey.id}_for_${readerID}`, seal(newReadKey.secret, this.teamMap.coValue.node.account.currentSealerSecret(), getAgentSealerID(reader), {
184
+ in: this.teamMap.coValue.id,
185
+ tx: this.teamMap.coValue.nextTransactionID(),
186
+ }), "trusting");
187
+ }
188
+ map.set(`${currentReadKey.id}_for_${newReadKey.id}`, encryptKeySecret({
189
+ encrypting: newReadKey,
190
+ toEncrypt: currentReadKey,
191
+ }).encrypted, "trusting");
192
+ map.set("readKey", newReadKey.id, "trusting");
190
193
  });
191
194
  }
192
- removeMember(agentID) {
195
+ removeMember(accountID) {
193
196
  this.teamMap = this.teamMap.edit((map) => {
194
- map.set(agentID, "revoked", "trusting");
197
+ map.set(accountID, "revoked", "trusting");
195
198
  });
196
199
  this.rotateReadKey();
197
200
  }
@@ -205,14 +208,19 @@ export class Team {
205
208
  },
206
209
  meta: meta || null,
207
210
  ...createdNowUnique(),
208
- publicNickname: "map",
209
211
  })
210
212
  .getCurrentContent();
211
213
  }
212
- testWithDifferentCredentials(credential, sessionId) {
214
+ testWithDifferentAccount(account, sessionId) {
213
215
  return new Team(expectTeamContent(this.teamMap.coValue
214
- .testWithDifferentCredentials(credential, sessionId)
216
+ .testWithDifferentAccount(account, sessionId)
215
217
  .getCurrentContent()), this.node);
216
218
  }
217
219
  }
220
+ export function isKeyForKeyField(field) {
221
+ return field.startsWith("key_") && field.includes("_for_key");
222
+ }
223
+ export function isKeyForAccountField(field) {
224
+ return field.startsWith("key_") && (field.includes("_for_sealer") || field.includes("_for_co"));
225
+ }
218
226
  //# sourceMappingURL=permissions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAGA,OAAO,EAOH,gBAAgB,EAChB,kBAAkB,EAClB,IAAI,EACJ,aAAa,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAKH,oBAAoB,GACvB,MAAM,cAAc,CAAC;AAgBtB,MAAM,UAAU,0BAA0B,CACtC,OAAgB;IAEhB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QACxC,MAAM,6BAA6B,GAAG,MAAM,CAAC,OAAO,CAChD,OAAO,CAAC,QAAQ,CACnB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE;YAClC,OAAO,UAAU,CAAC,YAAY;iBACzB,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;iBAClD,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;gBACf,IAAI,EAAE,CAAC,OAAO,KAAK,UAAU,EAAE;oBAC3B,OAAO,IAAI,CAAC;iBACf;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;oBACvD,OAAO,KAAK,CAAC;iBAChB;YACL,CAAC,CAIF,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;QAEzD,IAAI,CAAC,YAAY,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAClD;QAED,MAAM,WAAW,GAA+B,EAAE,CAAC;QAEnD,MAAM,iBAAiB,GACnB,EAAE,CAAC;QAEP,KAAK,MAAM,EACP,SAAS,EACT,OAAO,EACP,EAAE,GACL,IAAI,6BAA6B,EAAE;YAChC,6DAA6D;YAC7D,MAAM,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAEnD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAEa,CAAC;YACzC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;gBAC9D,SAAS;aACZ;YAED,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE;gBACxB,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAC5D,SAAS;aACZ;YAED,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE;gBAC1B,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,OAAO,EAAE;oBACrC,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;oBAC7C,SAAS;iBACZ;gBAED,6DAA6D;gBAE7D,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7D,SAAS;aACZ;YAED,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC;YAClC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;YAElC,IACI,MAAM,CAAC,KAAK,KAAK,OAAO;gBACxB,MAAM,CAAC,KAAK,KAAK,QAAQ;gBACzB,MAAM,CAAC,KAAK,KAAK,QAAQ;gBACzB,MAAM,CAAC,KAAK,KAAK,SAAS,EAC5B;gBACE,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBACvD,SAAS;aACZ;YAED,MAAM,sBAAsB,GACxB,CAAC,WAAW,CAAC,UAAU,CAAC;gBACxB,UAAU,KAAK,YAAY;gBAC3B,MAAM,CAAC,EAAE,KAAK,QAAQ;gBACtB,MAAM,CAAC,GAAG,KAAK,UAAU;gBACzB,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC;YAE7B,IAAI,CAAC,sBAAsB,EAAE;gBACzB,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,OAAO,EAAE;oBACrC,OAAO,CAAC,IAAI,CACR,gDAAgD,CACnD,CAAC;oBACF,SAAS;iBACZ;gBAED,IACI,WAAW,CAAC,cAAc,CAAC,KAAK,OAAO;oBACvC,cAAc,KAAK,UAAU;oBAC7B,YAAY,KAAK,OAAO,EAC1B;oBACE,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;oBACnD,SAAS;iBACZ;aACJ;YAED,WAAW,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3C,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAE7D,4DAA4D;SAC/D;QAED,OAAO,iBAAiB,CAAC;KAC5B;SAAM,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE;QACtD,MAAM,WAAW,GACb,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAC5B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAC3B,0EAA0E,CAC7E,CAAC,iBAAiB,EAAE,CAAC;QAE1B,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACzC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAC3C,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE;YACxB,MAAM,UAAU,GAAG,oBAAoB,CAAC,SAAsB,CAAC,CAAC;YAChE,OAAO,UAAU,CAAC,YAAY;iBACzB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;gBACX,MAAM,sBAAsB,GAAG,WAAW,CAAC,SAAS,CAChD,UAAU,EACV,EAAE,CAAC,MAAM,CACZ,CAAC;gBAEF,OAAO,CACH,sBAAsB,KAAK,OAAO;oBAClC,sBAAsB,KAAK,QAAQ,CACtC,CAAC;YACN,CAAC,CAAC;iBACD,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;gBACnB,IAAI,EAAE,EAAE,SAAS,EAAE,SAAsB,EAAE,OAAO,EAAE;gBACpD,EAAE;aACL,CAAC,CAAC,CAAC;QACZ,CAAC,CACJ,CAAC;KACL;SAAM,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,gBAAgB,EAAE;QACzD,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAC3C,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE;YACxB,OAAO,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,EAAE,EAAE,SAAS,EAAE,SAAsB,EAAE,OAAO,EAAE;gBACpD,EAAE;aACL,CAAC,CAAC,CAAC;QACR,CAAC,CACJ,CAAC;KACL;SAAM,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;QAChD,OAAO;QACP,OAAO,EAAE,CAAC;KACb;SAAM;QACH,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAI,OAAO,CAAC,MAAM,CAAC,OAAe,CAAC,IAAI,CAAC,CAAC;KACnF;AACL,CAAC;AAeD,MAAM,UAAU,iBAAiB,CAAC,OAAoB;IAClD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;KACnC;IAED,OAAO,OAAiC,CAAC;AAC7C,CAAC;AAED,MAAM,OAAO,IAAI;IAIb,YAAY,OAA+B,EAAE,IAAe;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,EAAE;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,OAAgB,EAAE,IAAU;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,4CAA4C,CAAC,CAAC;YAEjG,IAAI,CAAC,KAAK,EAAE;gBACR,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAC;aAC/C;YAED,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;gBAC3B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACzC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAEhE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;aAC/D;YAED,MAAM,UAAU,GAAG,IAAI,CACnB,cAAc,CAAC,MAAM,EACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EACzD,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAC5B;gBACI,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC3B,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE;aAC/C,CACJ,CAAC;YAEF,GAAG,CAAC,GAAG,CACH,SAAS,EACT,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,UAAU,EAAE,EACxC,UAAU,CACb,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,aAAa;QACT,MAAM,yBAAyB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACjE,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,OAAO,CACH,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,CAC7D,CAAC;aACL;iBAAM;gBACH,OAAO,KAAK,CAAC;aAChB;QACL,CAAC,CAAc,CAAC;QAEhB,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAErE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SAC3E;QAED,MAAM,cAAc,GAAG;YACnB,EAAE,EAAE,mBAAmB,CAAC,EAAE;YAC1B,MAAM,EAAE,mBAAmB,CAAC,MAAM;SACrC,CAAC;QAEF,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;QAExC,MAAM,oBAAoB,GAAG,IAAI,CAC7B,UAAU,CAAC,MAAM,EACjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EACzD,IAAI,GAAG,CACH,yBAAyB,CAAC,GAAG,CACzB,CAAC,MAAM,EAAE,EAAE;YACP,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,6CAA6C,CAAC,CAAC;YACvG,IAAI,CAAC,WAAW,EAAE;gBACd,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC;aAC9C;YACD,OAAO,WAAW,CAAC,WAAW,CAAA;QAClC,CAAC,CACJ,CACJ,EACD;YACI,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE;SAC/C,CACJ,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACrC,GAAG,CAAC,GAAG,CACH,SAAS,EACT;gBACI,KAAK,EAAE,UAAU,CAAC,EAAE;gBACpB,UAAU,EAAE,oBAAoB;gBAChC,YAAY,EAAE;oBACV,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC;wBAC/B,OAAO,EAAE,UAAU;wBACnB,MAAM,EAAE,cAAc;qBACzB,CAAC,CAAC,SAAS;iBACf;aACJ,EACD,UAAU,CACb,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,YAAY,CAAC,OAAgB;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACrC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,SAAS,CACL,IAAQ;QAER,OAAO,IAAI,CAAC,IAAI;aACX,aAAa,CAAC;YACX,IAAI,EAAE,OAAO;YACb,OAAO,EAAE;gBACL,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;aACxB;YACD,IAAI,EAAE,IAAI,IAAI,IAAI;YAClB,GAAG,gBAAgB,EAAE;YACrB,cAAc,EAAE,KAAK;SACxB,CAAC;aACD,iBAAiB,EAAoB,CAAC;IAC/C,CAAC;IAED,4BAA4B,CACxB,UAA2B,EAC3B,SAAoB;QAEpB,OAAO,IAAI,IAAI,CACX,iBAAiB,CACb,IAAI,CAAC,OAAO,CAAC,OAAO;aACf,4BAA4B,CAAC,UAAU,EAAE,SAAS,CAAC;aACnD,iBAAiB,EAAE,CAC3B,EACD,IAAI,CAAC,IAAI,CACZ,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"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"}