cojson 0.9.23 → 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.
Files changed (216) hide show
  1. package/.turbo/turbo-build.log +2 -10
  2. package/CHANGELOG.md +20 -0
  3. package/dist/CoValuesStore.js.map +1 -0
  4. package/dist/PeerKnownStates.js.map +1 -0
  5. package/dist/PeerState.js.map +1 -0
  6. package/dist/PriorityBasedMessageQueue.js.map +1 -0
  7. package/dist/SyncStateManager.js.map +1 -0
  8. package/dist/base64url.js.map +1 -0
  9. package/dist/base64url.test.js.map +1 -0
  10. package/dist/coValue.js.map +1 -0
  11. package/dist/coValueCore.js.map +1 -0
  12. package/dist/{native/coValueState.js → coValueState.js} +6 -4
  13. package/dist/coValueState.js.map +1 -0
  14. package/dist/coValues/account.js.map +1 -0
  15. package/dist/coValues/coList.js.map +1 -0
  16. package/dist/coValues/coMap.js.map +1 -0
  17. package/dist/coValues/coPlainText.js.map +1 -0
  18. package/dist/coValues/coStream.js.map +1 -0
  19. package/dist/{web/coValues → coValues}/group.js +22 -19
  20. package/dist/coValues/group.js.map +1 -0
  21. package/dist/coreToCoValue.js.map +1 -0
  22. package/dist/crypto/PureJSCrypto.js.map +1 -0
  23. package/dist/{native/crypto → crypto}/WasmCrypto.js +1 -16
  24. package/dist/crypto/WasmCrypto.js.map +1 -0
  25. package/dist/crypto/crypto.js.map +1 -0
  26. package/dist/{native/exports.js → exports.js} +2 -0
  27. package/dist/exports.js.map +1 -0
  28. package/dist/ids.js.map +1 -0
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/jsonStringify.js.map +1 -0
  32. package/dist/{native/jsonValue.js.map → jsonValue.js.map} +1 -1
  33. package/dist/localNode.js.map +1 -0
  34. package/dist/logger.js.map +1 -0
  35. package/dist/media.js.map +1 -0
  36. package/dist/{native/permissions.js → permissions.js} +10 -5
  37. package/dist/permissions.js.map +1 -0
  38. package/dist/priority.js.map +1 -0
  39. package/dist/storage/FileSystem.js.map +1 -0
  40. package/dist/storage/chunksAndKnownStates.js.map +1 -0
  41. package/dist/storage/index.js.map +1 -0
  42. package/dist/streamUtils.js.map +1 -0
  43. package/dist/sync.js.map +1 -0
  44. package/dist/typeUtils/accountOrAgentIDfromSessionID.js.map +1 -0
  45. package/dist/typeUtils/expectGroup.js.map +1 -0
  46. package/dist/typeUtils/isAccountID.js.map +1 -0
  47. package/dist/typeUtils/isCoValue.js.map +1 -0
  48. package/package.json +21 -24
  49. package/src/coValueState.ts +6 -4
  50. package/src/coValues/group.ts +38 -27
  51. package/src/crypto/WasmCrypto.ts +3 -17
  52. package/src/exports.ts +3 -0
  53. package/src/index.ts +1 -0
  54. package/src/permissions.ts +15 -3
  55. package/src/tests/coValueState.test.ts +44 -22
  56. package/src/tests/group.test.ts +230 -27
  57. package/tsconfig.json +3 -1
  58. package/dist/native/CoValuesStore.js.map +0 -1
  59. package/dist/native/PeerKnownStates.js.map +0 -1
  60. package/dist/native/PeerState.js.map +0 -1
  61. package/dist/native/PriorityBasedMessageQueue.js.map +0 -1
  62. package/dist/native/SyncStateManager.js.map +0 -1
  63. package/dist/native/base64url.js.map +0 -1
  64. package/dist/native/base64url.test.js.map +0 -1
  65. package/dist/native/coValue.js.map +0 -1
  66. package/dist/native/coValueCore.js.map +0 -1
  67. package/dist/native/coValueState.js.map +0 -1
  68. package/dist/native/coValues/account.js.map +0 -1
  69. package/dist/native/coValues/coList.js.map +0 -1
  70. package/dist/native/coValues/coMap.js.map +0 -1
  71. package/dist/native/coValues/coPlainText.js.map +0 -1
  72. package/dist/native/coValues/coStream.js.map +0 -1
  73. package/dist/native/coValues/group.js +0 -519
  74. package/dist/native/coValues/group.js.map +0 -1
  75. package/dist/native/coreToCoValue.js.map +0 -1
  76. package/dist/native/crypto/PureJSCrypto.js.map +0 -1
  77. package/dist/native/crypto/WasmCrypto.js.map +0 -1
  78. package/dist/native/crypto/crypto.js.map +0 -1
  79. package/dist/native/crypto/export.js +0 -3
  80. package/dist/native/crypto/export.js.map +0 -1
  81. package/dist/native/exports.js.map +0 -1
  82. package/dist/native/ids.js.map +0 -1
  83. package/dist/native/index.native.js +0 -3
  84. package/dist/native/index.native.js.map +0 -1
  85. package/dist/native/jsonStringify.js.map +0 -1
  86. package/dist/native/localNode.js.map +0 -1
  87. package/dist/native/logger.js.map +0 -1
  88. package/dist/native/media.js.map +0 -1
  89. package/dist/native/permissions.js.map +0 -1
  90. package/dist/native/priority.js.map +0 -1
  91. package/dist/native/storage/FileSystem.js.map +0 -1
  92. package/dist/native/storage/chunksAndKnownStates.js.map +0 -1
  93. package/dist/native/storage/index.js.map +0 -1
  94. package/dist/native/streamUtils.js.map +0 -1
  95. package/dist/native/sync.js.map +0 -1
  96. package/dist/native/typeUtils/accountOrAgentIDfromSessionID.js.map +0 -1
  97. package/dist/native/typeUtils/expectGroup.js.map +0 -1
  98. package/dist/native/typeUtils/isAccountID.js.map +0 -1
  99. package/dist/native/typeUtils/isCoValue.js.map +0 -1
  100. package/dist/web/CoValuesStore.js +0 -31
  101. package/dist/web/CoValuesStore.js.map +0 -1
  102. package/dist/web/PeerKnownStates.js +0 -68
  103. package/dist/web/PeerKnownStates.js.map +0 -1
  104. package/dist/web/PeerState.js +0 -103
  105. package/dist/web/PeerState.js.map +0 -1
  106. package/dist/web/PriorityBasedMessageQueue.js +0 -98
  107. package/dist/web/PriorityBasedMessageQueue.js.map +0 -1
  108. package/dist/web/SyncStateManager.js +0 -94
  109. package/dist/web/SyncStateManager.js.map +0 -1
  110. package/dist/web/base64url.js +0 -53
  111. package/dist/web/base64url.js.map +0 -1
  112. package/dist/web/base64url.test.js +0 -25
  113. package/dist/web/base64url.test.js.map +0 -1
  114. package/dist/web/coValue.js +0 -52
  115. package/dist/web/coValue.js.map +0 -1
  116. package/dist/web/coValueCore.js +0 -597
  117. package/dist/web/coValueCore.js.map +0 -1
  118. package/dist/web/coValueState.js +0 -265
  119. package/dist/web/coValueState.js.map +0 -1
  120. package/dist/web/coValues/account.js +0 -100
  121. package/dist/web/coValues/account.js.map +0 -1
  122. package/dist/web/coValues/coList.js +0 -381
  123. package/dist/web/coValues/coList.js.map +0 -1
  124. package/dist/web/coValues/coMap.js +0 -273
  125. package/dist/web/coValues/coMap.js.map +0 -1
  126. package/dist/web/coValues/coPlainText.js +0 -86
  127. package/dist/web/coValues/coPlainText.js.map +0 -1
  128. package/dist/web/coValues/coStream.js +0 -224
  129. package/dist/web/coValues/coStream.js.map +0 -1
  130. package/dist/web/coValues/group.js.map +0 -1
  131. package/dist/web/coreToCoValue.js +0 -46
  132. package/dist/web/coreToCoValue.js.map +0 -1
  133. package/dist/web/crypto/PureJSCrypto.js +0 -94
  134. package/dist/web/crypto/PureJSCrypto.js.map +0 -1
  135. package/dist/web/crypto/WasmCrypto.js +0 -130
  136. package/dist/web/crypto/WasmCrypto.js.map +0 -1
  137. package/dist/web/crypto/crypto.js +0 -152
  138. package/dist/web/crypto/crypto.js.map +0 -1
  139. package/dist/web/crypto/export.js +0 -3
  140. package/dist/web/crypto/export.js.map +0 -1
  141. package/dist/web/exports.js +0 -46
  142. package/dist/web/exports.js.map +0 -1
  143. package/dist/web/ids.js +0 -50
  144. package/dist/web/ids.js.map +0 -1
  145. package/dist/web/index.web.js +0 -3
  146. package/dist/web/index.web.js.map +0 -1
  147. package/dist/web/jsonStringify.js +0 -57
  148. package/dist/web/jsonStringify.js.map +0 -1
  149. package/dist/web/jsonValue.js +0 -2
  150. package/dist/web/jsonValue.js.map +0 -1
  151. package/dist/web/localNode.js +0 -412
  152. package/dist/web/localNode.js.map +0 -1
  153. package/dist/web/logger.js +0 -58
  154. package/dist/web/logger.js.map +0 -1
  155. package/dist/web/media.js +0 -2
  156. package/dist/web/media.js.map +0 -1
  157. package/dist/web/permissions.js +0 -336
  158. package/dist/web/permissions.js.map +0 -1
  159. package/dist/web/priority.js +0 -31
  160. package/dist/web/priority.js.map +0 -1
  161. package/dist/web/storage/FileSystem.js +0 -48
  162. package/dist/web/storage/FileSystem.js.map +0 -1
  163. package/dist/web/storage/chunksAndKnownStates.js +0 -98
  164. package/dist/web/storage/chunksAndKnownStates.js.map +0 -1
  165. package/dist/web/storage/index.js +0 -336
  166. package/dist/web/storage/index.js.map +0 -1
  167. package/dist/web/streamUtils.js +0 -41
  168. package/dist/web/streamUtils.js.map +0 -1
  169. package/dist/web/sync.js +0 -555
  170. package/dist/web/sync.js.map +0 -1
  171. package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js +0 -5
  172. package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js.map +0 -1
  173. package/dist/web/typeUtils/expectGroup.js +0 -13
  174. package/dist/web/typeUtils/expectGroup.js.map +0 -1
  175. package/dist/web/typeUtils/isAccountID.js +0 -4
  176. package/dist/web/typeUtils/isAccountID.js.map +0 -1
  177. package/dist/web/typeUtils/isCoValue.js +0 -11
  178. package/dist/web/typeUtils/isCoValue.js.map +0 -1
  179. package/src/crypto/export.ts +0 -2
  180. package/src/index.native.ts +0 -2
  181. package/src/index.web.ts +0 -2
  182. package/tsconfig.native.json +0 -10
  183. package/tsconfig.web.json +0 -5
  184. /package/dist/{native/CoValuesStore.js → CoValuesStore.js} +0 -0
  185. /package/dist/{native/PeerKnownStates.js → PeerKnownStates.js} +0 -0
  186. /package/dist/{native/PeerState.js → PeerState.js} +0 -0
  187. /package/dist/{native/PriorityBasedMessageQueue.js → PriorityBasedMessageQueue.js} +0 -0
  188. /package/dist/{native/SyncStateManager.js → SyncStateManager.js} +0 -0
  189. /package/dist/{native/base64url.js → base64url.js} +0 -0
  190. /package/dist/{native/base64url.test.js → base64url.test.js} +0 -0
  191. /package/dist/{native/coValue.js → coValue.js} +0 -0
  192. /package/dist/{native/coValueCore.js → coValueCore.js} +0 -0
  193. /package/dist/{native/coValues → coValues}/account.js +0 -0
  194. /package/dist/{native/coValues → coValues}/coList.js +0 -0
  195. /package/dist/{native/coValues → coValues}/coMap.js +0 -0
  196. /package/dist/{native/coValues → coValues}/coPlainText.js +0 -0
  197. /package/dist/{native/coValues → coValues}/coStream.js +0 -0
  198. /package/dist/{native/coreToCoValue.js → coreToCoValue.js} +0 -0
  199. /package/dist/{native/crypto → crypto}/PureJSCrypto.js +0 -0
  200. /package/dist/{native/crypto → crypto}/crypto.js +0 -0
  201. /package/dist/{native/ids.js → ids.js} +0 -0
  202. /package/dist/{native/jsonStringify.js → jsonStringify.js} +0 -0
  203. /package/dist/{native/jsonValue.js → jsonValue.js} +0 -0
  204. /package/dist/{native/localNode.js → localNode.js} +0 -0
  205. /package/dist/{native/logger.js → logger.js} +0 -0
  206. /package/dist/{native/media.js → media.js} +0 -0
  207. /package/dist/{native/priority.js → priority.js} +0 -0
  208. /package/dist/{native/storage → storage}/FileSystem.js +0 -0
  209. /package/dist/{native/storage → storage}/chunksAndKnownStates.js +0 -0
  210. /package/dist/{native/storage → storage}/index.js +0 -0
  211. /package/dist/{native/streamUtils.js → streamUtils.js} +0 -0
  212. /package/dist/{native/sync.js → sync.js} +0 -0
  213. /package/dist/{native/typeUtils → typeUtils}/accountOrAgentIDfromSessionID.js +0 -0
  214. /package/dist/{native/typeUtils → typeUtils}/expectGroup.js +0 -0
  215. /package/dist/{native/typeUtils → typeUtils}/isAccountID.js +0 -0
  216. /package/dist/{native/typeUtils → typeUtils}/isCoValue.js +0 -0
@@ -1,265 +0,0 @@
1
- import { logger } from "./logger.js";
2
- export const CO_VALUE_LOADING_MAX_RETRIES = 5;
3
- export const CO_VALUE_LOADING_TIMEOUT = 30000;
4
- export class CoValueUnknownState {
5
- constructor() {
6
- this.type = "unknown";
7
- }
8
- }
9
- export class CoValueLoadingState {
10
- constructor(peersIds) {
11
- this.type = "loading";
12
- this.peers = new Map();
13
- this.peers = new Map();
14
- for (const peerId of peersIds) {
15
- this.peers.set(peerId, createResolvablePromise());
16
- }
17
- const { resolve, promise } = createResolvablePromise();
18
- this.result = promise;
19
- this.resolveResult = resolve;
20
- }
21
- markAsUnavailable(peerId) {
22
- const entry = this.peers.get(peerId);
23
- if (entry) {
24
- entry.resolve();
25
- }
26
- this.peers.delete(peerId);
27
- // If none of the peers have the coValue, we resolve to unavailable
28
- if (this.peers.size === 0) {
29
- this.resolve("unavailable");
30
- }
31
- }
32
- resolve(value) {
33
- this.resolveResult(value);
34
- for (const entry of this.peers.values()) {
35
- entry.resolve();
36
- }
37
- this.peers.clear();
38
- }
39
- // Wait for a specific peer to have a known state
40
- waitForPeer(peerId) {
41
- const entry = this.peers.get(peerId);
42
- if (!entry) {
43
- return Promise.resolve();
44
- }
45
- return entry.promise;
46
- }
47
- }
48
- export class CoValueAvailableState {
49
- constructor(coValue) {
50
- this.coValue = coValue;
51
- this.type = "available";
52
- }
53
- }
54
- export class CoValueUnavailableState {
55
- constructor() {
56
- this.type = "unavailable";
57
- }
58
- }
59
- export class CoValueState {
60
- constructor(id, state) {
61
- this.id = id;
62
- this.state = state;
63
- }
64
- static Unknown(id) {
65
- return new CoValueState(id, new CoValueUnknownState());
66
- }
67
- static Loading(id, peersIds) {
68
- return new CoValueState(id, new CoValueLoadingState(peersIds));
69
- }
70
- static Available(coValue) {
71
- return new CoValueState(coValue.id, new CoValueAvailableState(coValue));
72
- }
73
- static Unavailable(id) {
74
- return new CoValueState(id, new CoValueUnavailableState());
75
- }
76
- async getCoValue() {
77
- if (this.state.type === "available") {
78
- return this.state.coValue;
79
- }
80
- if (this.state.type === "unavailable") {
81
- return "unavailable";
82
- }
83
- // If we don't have a resolved state we return a new promise
84
- // that will be resolved when the state will move to available or unavailable
85
- if (!this.promise) {
86
- const { promise, resolve } = createResolvablePromise();
87
- this.promise = promise;
88
- this.resolve = resolve;
89
- }
90
- return this.promise;
91
- }
92
- moveToState(value) {
93
- this.state = value;
94
- if (!this.resolve) {
95
- return;
96
- }
97
- // If the state is available we resolve the promise
98
- // and clear it to handle the possible transition from unavailable to available
99
- if (value.type === "available") {
100
- this.resolve(value.coValue);
101
- this.clearPromise();
102
- }
103
- else if (value.type === "unavailable") {
104
- this.resolve("unavailable");
105
- this.clearPromise();
106
- }
107
- }
108
- clearPromise() {
109
- this.promise = undefined;
110
- this.resolve = undefined;
111
- }
112
- async loadFromPeers(peers) {
113
- const state = this.state;
114
- if (state.type !== "unknown" && state.type !== "unavailable") {
115
- return;
116
- }
117
- if (peers.length === 0) {
118
- return;
119
- }
120
- const doLoad = async (peersToLoadFrom) => {
121
- const peersWithoutErrors = getPeersWithoutErrors(peersToLoadFrom, this.id);
122
- // If we are in the loading state we move to a new loading state
123
- // to reset all the loading promises
124
- if (this.state.type === "loading" || this.state.type === "unknown") {
125
- this.moveToState(new CoValueLoadingState(peersWithoutErrors.map((p) => p.id)));
126
- }
127
- // Assign the current state to a variable to not depend on the state changes
128
- // that may happen while we wait for loadCoValueFromPeers to complete
129
- const currentState = this.state;
130
- // If we entered successfully the loading state, we load the coValue from the peers
131
- //
132
- // We may not enter the loading state if the coValue has become available in between
133
- // of the retries
134
- if (currentState.type === "loading") {
135
- await loadCoValueFromPeers(this, peersWithoutErrors);
136
- const result = await currentState.result;
137
- return result !== "unavailable";
138
- }
139
- return currentState.type === "available";
140
- };
141
- await doLoad(peers);
142
- // Retry loading from peers that have the retry flag enabled
143
- const peersWithRetry = peers.filter((p) => p.shouldRetryUnavailableCoValues());
144
- if (peersWithRetry.length > 0) {
145
- // We want to exit early if the coValue becomes available in between the retries
146
- await Promise.race([
147
- this.getCoValue(),
148
- runWithRetry(() => doLoad(peersWithRetry), CO_VALUE_LOADING_MAX_RETRIES),
149
- ]);
150
- }
151
- // If after the retries the coValue is still loading, we consider the load failed
152
- if (this.state.type === "loading") {
153
- this.moveToState(new CoValueUnavailableState());
154
- }
155
- }
156
- dispatch(action) {
157
- const currentState = this.state;
158
- switch (action.type) {
159
- case "available":
160
- if (currentState.type === "loading") {
161
- currentState.resolve(action.coValue);
162
- }
163
- // It should be always possible to move to the available state
164
- this.moveToState(new CoValueAvailableState(action.coValue));
165
- break;
166
- case "not-found-in-peer":
167
- if (currentState.type === "loading") {
168
- currentState.markAsUnavailable(action.peerId);
169
- }
170
- break;
171
- }
172
- }
173
- }
174
- async function loadCoValueFromPeers(coValueEntry, peers) {
175
- for (const peer of peers) {
176
- if (peer.closed) {
177
- continue;
178
- }
179
- if (coValueEntry.state.type === "available") {
180
- /**
181
- * We don't need to wait for the message to be delivered here.
182
- *
183
- * This way when the coValue becomes available because it's cached we don't wait for the server
184
- * peer to consume the messages queue before moving forward.
185
- */
186
- peer
187
- .pushOutgoingMessage({
188
- action: "load",
189
- ...coValueEntry.state.coValue.knownState(),
190
- })
191
- .catch((err) => {
192
- logger.warn(`Failed to push load message to peer ${peer.id}`, err);
193
- });
194
- }
195
- else {
196
- /**
197
- * We only wait for the load state to be resolved.
198
- */
199
- peer
200
- .pushOutgoingMessage({
201
- action: "load",
202
- id: coValueEntry.id,
203
- header: false,
204
- sessions: {},
205
- })
206
- .catch((err) => {
207
- logger.warn(`Failed to push load message to peer ${peer.id}`, err);
208
- });
209
- }
210
- if (coValueEntry.state.type === "loading") {
211
- const timeout = setTimeout(() => {
212
- if (coValueEntry.state.type === "loading") {
213
- logger.warn("Failed to load coValue from peer", {
214
- peerId: peer.id,
215
- peerRole: peer.role,
216
- });
217
- coValueEntry.dispatch({
218
- type: "not-found-in-peer",
219
- peerId: peer.id,
220
- });
221
- }
222
- }, CO_VALUE_LOADING_TIMEOUT);
223
- await coValueEntry.state.waitForPeer(peer.id);
224
- clearTimeout(timeout);
225
- }
226
- }
227
- }
228
- async function runWithRetry(fn, maxRetries) {
229
- let retries = 1;
230
- while (retries < maxRetries) {
231
- /**
232
- * With maxRetries of 5 we should wait:
233
- * 300ms
234
- * 900ms
235
- * 2700ms
236
- * 8100ms
237
- */
238
- await sleep(3 ** retries * 100);
239
- const result = await fn();
240
- if (result === true) {
241
- return;
242
- }
243
- retries++;
244
- }
245
- }
246
- function createResolvablePromise() {
247
- let resolve;
248
- const promise = new Promise((res) => {
249
- resolve = res;
250
- });
251
- return { promise, resolve };
252
- }
253
- function sleep(ms) {
254
- return new Promise((resolve) => setTimeout(resolve, ms));
255
- }
256
- function getPeersWithoutErrors(peers, coValueId) {
257
- return peers.filter((p) => {
258
- if (p.erroredCoValues.has(coValueId)) {
259
- logger.warn(`Skipping load on errored coValue ${coValueId} from peer ${p.id}`);
260
- return false;
261
- }
262
- return true;
263
- });
264
- }
265
- //# sourceMappingURL=coValueState.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coValueState.js","sourceRoot":"","sources":["../../src/coValueState.ts"],"names":[],"mappings":"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"}
@@ -1,100 +0,0 @@
1
- import { ok } from "neverthrow";
2
- import { logger } from "../logger.js";
3
- import { RawCoMap } from "./coMap.js";
4
- import { RawGroup } from "./group.js";
5
- export function accountHeaderForInitialAgentSecret(agentSecret, crypto) {
6
- const agent = crypto.getAgentID(agentSecret);
7
- return {
8
- type: "comap",
9
- ruleset: { type: "group", initialAdmin: agent },
10
- meta: {
11
- type: "account",
12
- },
13
- createdAt: null,
14
- uniqueness: null,
15
- };
16
- }
17
- export class RawAccount extends RawGroup {
18
- currentAgentID() {
19
- if (this._cachedCurrentAgentID) {
20
- return ok(this._cachedCurrentAgentID);
21
- }
22
- const agents = this.keys()
23
- .filter((k) => k.startsWith("sealer_"))
24
- .sort((a, b) => (this.lastEditAt(a)?.at.getTime() || 0) -
25
- (this.lastEditAt(b)?.at.getTime() || 0));
26
- if (agents.length !== 1) {
27
- logger.warn("Account has " + agents.length + " agents", { id: this.id });
28
- }
29
- this._cachedCurrentAgentID = agents[0];
30
- return ok(agents[0]);
31
- }
32
- createInvite(_) {
33
- throw new Error("Cannot create invite from an account");
34
- }
35
- }
36
- /** @hidden */
37
- export class RawControlledAccount extends RawAccount {
38
- constructor(core, agentSecret) {
39
- super(core);
40
- this.agentSecret = agentSecret;
41
- this.crypto = core.node.crypto;
42
- }
43
- /**
44
- * Creates a new group (with the current account as the group's first admin).
45
- * @category 1. High-level
46
- */
47
- createGroup(uniqueness = this.core.crypto.createdNowUnique()) {
48
- return this.core.node.createGroup(uniqueness);
49
- }
50
- async acceptInvite(groupOrOwnedValueID, inviteSecret) {
51
- return this.core.node.acceptInvite(groupOrOwnedValueID, inviteSecret);
52
- }
53
- currentAgentID() {
54
- if (this._cachedCurrentAgentID) {
55
- return ok(this._cachedCurrentAgentID);
56
- }
57
- const agentID = this.crypto.getAgentID(this.agentSecret);
58
- this._cachedCurrentAgentID = agentID;
59
- return ok(agentID);
60
- }
61
- currentSignerID() {
62
- return this.currentAgentID().map((id) => this.crypto.getAgentSignerID(id));
63
- }
64
- currentSignerSecret() {
65
- return this.crypto.getAgentSignerSecret(this.agentSecret);
66
- }
67
- currentSealerID() {
68
- return this.currentAgentID().map((id) => this.crypto.getAgentSealerID(id));
69
- }
70
- currentSealerSecret() {
71
- return this.crypto.getAgentSealerSecret(this.agentSecret);
72
- }
73
- }
74
- export class ControlledAgent {
75
- constructor(agentSecret, crypto) {
76
- this.agentSecret = agentSecret;
77
- this.crypto = crypto;
78
- }
79
- get id() {
80
- return this.crypto.getAgentID(this.agentSecret);
81
- }
82
- currentAgentID() {
83
- return ok(this.crypto.getAgentID(this.agentSecret));
84
- }
85
- currentSignerID() {
86
- return this.currentAgentID().map((id) => this.crypto.getAgentSignerID(id));
87
- }
88
- currentSignerSecret() {
89
- return this.crypto.getAgentSignerSecret(this.agentSecret);
90
- }
91
- currentSealerID() {
92
- return this.currentAgentID().map((id) => this.crypto.getAgentSealerID(id));
93
- }
94
- currentSealerSecret() {
95
- return this.crypto.getAgentSealerSecret(this.agentSecret);
96
- }
97
- }
98
- export class RawProfile extends RawCoMap {
99
- }
100
- //# sourceMappingURL=account.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/coValues/account.ts"],"names":[],"mappings":"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"}