jazz-tools 0.14.24 → 0.14.26

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.
@@ -29,7 +29,18 @@ export declare class Group extends CoValueBase implements CoValue {
29
29
  myRole(): Role | undefined;
30
30
  addMember(member: Everyone, role: "writer" | "reader" | "writeOnly"): void;
31
31
  addMember(member: Account, role: AccountRole): void;
32
+ /** @category Identity & Permissions
33
+ * Gives members of a parent group membership in this group.
34
+ * @param member The group that will gain access to this group.
35
+ * @param role The role all members of the parent group should have in this group.
36
+ */
37
+ addMember(member: Group, role?: "reader" | "writer" | "admin" | "inherit"): void;
32
38
  removeMember(member: Everyone | Account): Promise<void>;
39
+ /** @category Identity & Permissions
40
+ * Revokes membership from members a parent group.
41
+ * @param member The group that will lose access to this group.
42
+ */
43
+ removeMember(member: Group): Promise<void>;
33
44
  get members(): Array<{
34
45
  id: string;
35
46
  role: AccountRole;
@@ -46,7 +57,20 @@ export declare class Group extends CoValueBase implements CoValue {
46
57
  */
47
58
  makePublic(role?: "reader" | "writer"): this;
48
59
  getParentGroups(): Array<Group>;
60
+ /** @category Identity & Permissions
61
+ * Gives members of a parent group membership in this group.
62
+ * @deprecated Use `addMember` instead.
63
+ * @param parent The group that will gain access to this group.
64
+ * @param roleMapping The role all members of the parent group should have in this group.
65
+ * @returns This group.
66
+ */
49
67
  extend(parent: Group, roleMapping?: "reader" | "writer" | "admin" | "inherit"): this;
68
+ /** @category Identity & Permissions
69
+ * Revokes membership from members a parent group.
70
+ * @deprecated Use `removeMember` instead.
71
+ * @param parent The group that will lose access to this group.
72
+ * @returns This group.
73
+ */
50
74
  revokeExtend(parent: Group): Promise<this>;
51
75
  /** @category Subscription & Loading */
52
76
  static load<G extends Group, const R extends RefsToResolve<G>>(this: CoValueClass<G>, id: ID<G>, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../src/coValues/group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../src/coValues/group.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -34,7 +34,7 @@ import {
34
34
  subscribeToCoValue,
35
35
  zodReExport_exports,
36
36
  zodSchemaToCoSchema
37
- } from "./chunk-LCH2NPSZ.js";
37
+ } from "./chunk-G3QC4FAY.js";
38
38
 
39
39
  // src/auth/DemoAuth.ts
40
40
  var DemoAuth = class {
package/dist/testing.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  createAnonymousJazzContext,
7
7
  createJazzContext,
8
8
  randomSessionProvider
9
- } from "./chunk-LCH2NPSZ.js";
9
+ } from "./chunk-G3QC4FAY.js";
10
10
 
11
11
  // src/testing.ts
12
12
  import { LocalNode } from "cojson";
package/package.json CHANGED
@@ -17,12 +17,12 @@
17
17
  },
18
18
  "type": "module",
19
19
  "license": "MIT",
20
- "version": "0.14.24",
20
+ "version": "0.14.26",
21
21
  "dependencies": {
22
22
  "@scure/bip39": "^1.3.0",
23
23
  "fast-myers-diff": "^3.2.0",
24
24
  "zod": "3.25.28",
25
- "cojson": "0.14.24"
25
+ "cojson": "0.14.26"
26
26
  },
27
27
  "devDependencies": {
28
28
  "tsup": "8.3.5",
@@ -7,12 +7,10 @@ import type {
7
7
  Role,
8
8
  } from "cojson";
9
9
  import type {
10
- AnyAccountSchema,
11
10
  CoMap,
12
11
  CoValue,
13
12
  CoValueClass,
14
13
  ID,
15
- InstanceOfSchema,
16
14
  RefEncoded,
17
15
  RefsToResolve,
18
16
  RefsToResolveStrict,
@@ -30,7 +28,6 @@ import {
30
28
  RegisteredSchemas,
31
29
  accessChildById,
32
30
  activeAccountContext,
33
- anySchemaToCoSchema,
34
31
  ensureCoValueLoaded,
35
32
  isControlledAccount,
36
33
  loadCoValueWithoutMe,
@@ -147,12 +144,42 @@ export class Group extends CoValueBase implements CoValue {
147
144
 
148
145
  addMember(member: Everyone, role: "writer" | "reader" | "writeOnly"): void;
149
146
  addMember(member: Account, role: AccountRole): void;
150
- addMember(member: Everyone | Account, role: AccountRole) {
151
- this._raw.addMember(member === "everyone" ? member : member._raw, role);
147
+ /** @category Identity & Permissions
148
+ * Gives members of a parent group membership in this group.
149
+ * @param member The group that will gain access to this group.
150
+ * @param role The role all members of the parent group should have in this group.
151
+ */
152
+ addMember(
153
+ member: Group,
154
+ role?: "reader" | "writer" | "admin" | "inherit",
155
+ ): void;
156
+ addMember(
157
+ member: Group | Everyone | Account,
158
+ role?: AccountRole | "inherit",
159
+ ) {
160
+ if (member !== "everyone" && member._type === "Group") {
161
+ if (role === "writeOnly")
162
+ throw new Error("Cannot add group as member with write-only role");
163
+ this._raw.extend(member._raw, role);
164
+ } else if (role !== undefined && role !== "inherit") {
165
+ this._raw.addMember(member === "everyone" ? member : member._raw, role);
166
+ }
152
167
  }
153
168
 
154
- removeMember(member: Everyone | Account) {
155
- return this._raw.removeMember(member === "everyone" ? member : member._raw);
169
+ removeMember(member: Everyone | Account): Promise<void>;
170
+ /** @category Identity & Permissions
171
+ * Revokes membership from members a parent group.
172
+ * @param member The group that will lose access to this group.
173
+ */
174
+ removeMember(member: Group): Promise<void>;
175
+ removeMember(member: Group | Everyone | Account) {
176
+ if (member !== "everyone" && member._type === "Group") {
177
+ return this._raw.revokeExtend(member._raw);
178
+ } else {
179
+ return this._raw.removeMember(
180
+ member === "everyone" ? member : member._raw,
181
+ );
182
+ }
156
183
  }
157
184
 
158
185
  get members(): Array<{
@@ -231,6 +258,13 @@ export class Group extends CoValueBase implements CoValue {
231
258
  return this._raw.getParentGroups().map((group) => Group.fromRaw(group));
232
259
  }
233
260
 
261
+ /** @category Identity & Permissions
262
+ * Gives members of a parent group membership in this group.
263
+ * @deprecated Use `addMember` instead.
264
+ * @param parent The group that will gain access to this group.
265
+ * @param roleMapping The role all members of the parent group should have in this group.
266
+ * @returns This group.
267
+ */
234
268
  extend(
235
269
  parent: Group,
236
270
  roleMapping?: "reader" | "writer" | "admin" | "inherit",
@@ -239,6 +273,12 @@ export class Group extends CoValueBase implements CoValue {
239
273
  return this;
240
274
  }
241
275
 
276
+ /** @category Identity & Permissions
277
+ * Revokes membership from members a parent group.
278
+ * @deprecated Use `removeMember` instead.
279
+ * @param parent The group that will lose access to this group.
280
+ * @returns This group.
281
+ */
242
282
  async revokeExtend(parent: Group) {
243
283
  await this._raw.revokeExtend(parent._raw);
244
284
  return this;
@@ -1,13 +1,6 @@
1
1
  import { WasmCrypto } from "cojson/crypto/WasmCrypto";
2
- import {
3
- assert,
4
- beforeEach,
5
- describe,
6
- expect,
7
- expectTypeOf,
8
- test,
9
- } from "vitest";
10
- import { Account, CoMap, Group, Profile, coField, z } from "../exports.js";
2
+ import { assert, beforeEach, describe, expect, test } from "vitest";
3
+ import { CoMap, Group, z } from "../exports.js";
11
4
  import { Loaded, Ref, co, zodSchemaToCoSchema } from "../internal.js";
12
5
  import { createJazzTestAccount, setupJazzTestSync } from "../testing.js";
13
6
  import { setupTwoNodes, waitFor } from "./utils.js";
@@ -112,7 +105,7 @@ describe("Group inheritance", () => {
112
105
  const parentGroup = Group.create({ owner: me });
113
106
  const group = Group.create({ owner: me });
114
107
 
115
- group.extend(parentGroup);
108
+ group.addMember(parentGroup);
116
109
 
117
110
  const reader = await co.account().createAs(me, {
118
111
  creationProps: { name: "Reader" },
@@ -147,8 +140,8 @@ describe("Group inheritance", () => {
147
140
  const parentGroup = Group.create({ owner: me });
148
141
  const group = Group.create({ owner: me });
149
142
 
150
- group.extend(parentGroup);
151
- parentGroup.extend(grandParentGroup);
143
+ group.addMember(parentGroup);
144
+ parentGroup.addMember(grandParentGroup);
152
145
 
153
146
  const reader = await co.account().createAs(me, {
154
147
  creationProps: { name: "Reader" },
@@ -188,8 +181,8 @@ describe("Group inheritance", () => {
188
181
  const parentGroup = Group.create({ owner: me });
189
182
  const childGroup = Group.create({ owner: me });
190
183
 
191
- childGroup.extend(parentGroup);
192
- parentGroup.extend(grandParentGroup);
184
+ childGroup.addMember(parentGroup);
185
+ parentGroup.addMember(grandParentGroup);
193
186
 
194
187
  const parentGroups = childGroup.getParentGroups();
195
188
 
@@ -269,6 +262,10 @@ describe("Group inheritance", () => {
269
262
 
270
263
  // @ts-expect-error - Even though readerInvite is a valid role for an account, we don't allow it to not create confusion when using the intellisense
271
264
  group.addMember(account, "readerInvite");
265
+ // @ts-expect-error - Only groups can have an `inherit` role, not accounts
266
+ group.addMember(account, "inherit");
267
+ // @ts-expect-error - Only groups can be added without a role, not accounts
268
+ group.addMember(account, undefined);
272
269
 
273
270
  expect(group.members).not.toContainEqual(
274
271
  expect.objectContaining({
@@ -279,6 +276,45 @@ describe("Group inheritance", () => {
279
276
 
280
277
  expect(group.getRoleOf(account.id)).toBe("readerInvite");
281
278
  });
279
+
280
+ test("adding a group member as writeOnly should fail", async () => {
281
+ const account = await createJazzTestAccount({});
282
+ await account.waitForAllCoValuesSync();
283
+
284
+ const parentGroup = Group.create();
285
+ const group = Group.create();
286
+ expect(() => {
287
+ // @ts-expect-error
288
+ group.addMember(parentGroup, "writeOnly");
289
+ }).toThrow();
290
+ });
291
+
292
+ test("Removing member group", async () => {
293
+ const alice = await createJazzTestAccount({});
294
+ await alice.waitForAllCoValuesSync();
295
+ const bob = await createJazzTestAccount({});
296
+ await bob.waitForAllCoValuesSync();
297
+
298
+ const parentGroup = Group.create();
299
+ // `parentGroup` has `alice` as a writer
300
+ parentGroup.addMember(alice, "writer");
301
+ expect(parentGroup.getRoleOf(alice.id)).toBe("writer");
302
+
303
+ const group = Group.create();
304
+ // `group` has `bob` as a reader
305
+ group.addMember(bob, "reader");
306
+ expect(group.getRoleOf(bob.id)).toBe("reader");
307
+
308
+ group.addMember(parentGroup);
309
+ // `group` has `parentGroup`'s members (in this case, `alice` as a writer)
310
+ expect(group.getRoleOf(bob.id)).toBe("reader");
311
+ expect(group.getRoleOf(alice.id)).toBe("writer");
312
+
313
+ // `group` no longer has `parentGroup`'s members
314
+ await group.removeMember(parentGroup);
315
+ expect(group.getRoleOf(bob.id)).toBe("reader");
316
+ expect(group.getRoleOf(alice.id)).toBe(undefined);
317
+ });
282
318
  });
283
319
 
284
320
  describe("Group.getRoleOf", () => {
@@ -557,7 +593,7 @@ describe("Group.members", () => {
557
593
  await bob.waitForAllCoValuesSync();
558
594
 
559
595
  parentGroup.addMember(bob, "writer");
560
- childGroup.extend(parentGroup, "reader");
596
+ childGroup.addMember(parentGroup, "reader");
561
597
 
562
598
  expect(childGroup.getRoleOf(bob.id)).toBe("reader");
563
599
 
@@ -41,15 +41,15 @@ async function setup() {
41
41
 
42
42
  const publicGroup = Group.create(admin1);
43
43
  publicGroup.addMember("everyone", "reader");
44
- publicGroup.extend(adminsGroup);
44
+ publicGroup.addMember(adminsGroup);
45
45
 
46
46
  // Everyone can write to requests, but only admins can read
47
47
  const requestsGroup = Group.create(admin1);
48
48
  requestsGroup.addMember("everyone", "writeOnly");
49
- requestsGroup.extend(adminsGroup);
49
+ requestsGroup.addMember(adminsGroup);
50
50
 
51
51
  const organizationGroup = Group.create(admin1);
52
- organizationGroup.extend(adminsGroup);
52
+ organizationGroup.addMember(adminsGroup);
53
53
 
54
54
  const organization = Organization.create(
55
55
  {
@@ -95,7 +95,7 @@ async function sendRequestToJoin(organizationId: string, account: Account) {
95
95
  }
96
96
 
97
97
  const group = Group.create(account);
98
- group.extend(organization.adminsGroup);
98
+ group.addMember(organization.adminsGroup);
99
99
 
100
100
  const request = RequestToJoin.create(
101
101
  {