@nymphjs/tilmeld 1.0.0-beta.9 → 1.0.0-beta.91

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 (78) hide show
  1. package/CHANGELOG.md +414 -0
  2. package/README.md +15 -2
  3. package/dist/AbleObject.d.ts +15 -0
  4. package/dist/AbleObject.js +18 -6
  5. package/dist/AbleObject.js.map +1 -1
  6. package/dist/Group.d.ts +181 -15
  7. package/dist/Group.js +551 -192
  8. package/dist/Group.js.map +1 -1
  9. package/dist/Group.test.js +83 -13
  10. package/dist/Group.test.js.map +1 -1
  11. package/dist/Tilmeld.d.ts +241 -12
  12. package/dist/Tilmeld.js +636 -254
  13. package/dist/Tilmeld.js.map +1 -1
  14. package/dist/Tilmeld.types.d.ts +2 -2
  15. package/dist/Tilmeld.types.js +1 -2
  16. package/dist/User.d.ts +395 -22
  17. package/dist/User.js +1316 -365
  18. package/dist/User.js.map +1 -1
  19. package/dist/User.test.js +132 -13
  20. package/dist/User.test.js.map +1 -1
  21. package/dist/conf/d.d.ts +287 -7
  22. package/dist/conf/d.js +1 -2
  23. package/dist/conf/defaults.d.ts +1 -1
  24. package/dist/conf/defaults.js +188 -141
  25. package/dist/conf/defaults.js.map +1 -1
  26. package/dist/conf/index.d.ts +2 -2
  27. package/dist/conf/index.js +2 -8
  28. package/dist/conf/index.js.map +1 -1
  29. package/dist/enforceTilmeld.d.ts +3 -0
  30. package/dist/enforceTilmeld.js +18 -0
  31. package/dist/enforceTilmeld.js.map +1 -0
  32. package/dist/errors/AccessControlError.d.ts +2 -1
  33. package/dist/errors/AccessControlError.js +3 -6
  34. package/dist/errors/AccessControlError.js.map +1 -1
  35. package/dist/errors/BadDataError.d.ts +2 -1
  36. package/dist/errors/BadDataError.js +3 -6
  37. package/dist/errors/BadDataError.js.map +1 -1
  38. package/dist/errors/BadEmailError.d.ts +2 -1
  39. package/dist/errors/BadEmailError.js +3 -6
  40. package/dist/errors/BadEmailError.js.map +1 -1
  41. package/dist/errors/BadUsernameError.d.ts +2 -1
  42. package/dist/errors/BadUsernameError.js +3 -6
  43. package/dist/errors/BadUsernameError.js.map +1 -1
  44. package/dist/errors/CouldNotChangeDefaultPrimaryGroupError.js +1 -5
  45. package/dist/errors/CouldNotChangeDefaultPrimaryGroupError.js.map +1 -1
  46. package/dist/errors/EmailChangeRateLimitExceededError.js +1 -5
  47. package/dist/errors/EmailChangeRateLimitExceededError.js.map +1 -1
  48. package/dist/errors/index.d.ts +6 -6
  49. package/dist/errors/index.js +6 -22
  50. package/dist/errors/index.js.map +1 -1
  51. package/dist/index.d.ts +11 -10
  52. package/dist/index.js +16 -35
  53. package/dist/index.js.map +1 -1
  54. package/dist/tilmeldJoiProps.js +13 -18
  55. package/dist/tilmeldJoiProps.js.map +1 -1
  56. package/jest.config.js +11 -2
  57. package/package.json +34 -31
  58. package/src/AbleObject.ts +2 -2
  59. package/src/Group.test.ts +104 -6
  60. package/src/Group.ts +661 -226
  61. package/src/Tilmeld.ts +420 -254
  62. package/src/Tilmeld.types.ts +2 -2
  63. package/src/User.test.ts +163 -6
  64. package/src/User.ts +1557 -454
  65. package/src/conf/d.ts +63 -17
  66. package/src/conf/defaults.ts +162 -109
  67. package/src/conf/index.ts +2 -2
  68. package/src/enforceTilmeld.ts +20 -0
  69. package/src/errors/AccessControlError.ts +4 -2
  70. package/src/errors/BadDataError.ts +4 -2
  71. package/src/errors/BadEmailError.ts +4 -2
  72. package/src/errors/BadUsernameError.ts +4 -2
  73. package/src/errors/index.ts +6 -6
  74. package/src/index.ts +12 -10
  75. package/src/tilmeldJoiProps.ts +11 -11
  76. package/src/type/locutus.d.ts +3 -0
  77. package/tsconfig.json +5 -3
  78. package/typedoc.json +4 -0
package/dist/Group.d.ts CHANGED
@@ -1,25 +1,111 @@
1
- import { EntityData, EntityJson, EntityPatch, Options, Selector, SerializedEntityData } from '@nymphjs/nymph';
2
- import type Tilmeld from './Tilmeld';
3
- import AbleObject from './AbleObject';
4
- import User, { UserData } from './User';
1
+ import type { Nymph, EntityData, EntityJson, EntityPatch, Options, Selector, SerializedEntityData } from '@nymphjs/nymph';
2
+ import AbleObject from './AbleObject.js';
3
+ import UserClass from './User.js';
4
+ import type { UserData } from './User.js';
5
+ export type GroupEventType = 'checkGroupname' | 'beforeSave' | 'afterSave' | 'beforeDelete' | 'afterDelete';
6
+ /**
7
+ * This is run when the user has entered an otherwise valid groupname into the
8
+ * signup form. It should return a result, which when false will stop the
9
+ * process and return the included message, disallowing the groupname.
10
+ */
11
+ export type TilmeldCheckGroupnameCallback = (group: Group & GroupData, data: {
12
+ groupname: string;
13
+ }) => Promise<{
14
+ result: boolean;
15
+ message?: string;
16
+ }>;
17
+ /**
18
+ * This is run just before the group is saved, so all checks have passed.
19
+ *
20
+ * The transaction is available in `group.$nymph`.
21
+ */
22
+ export type TilmeldBeforeGroupSaveCallback = (group: Group & GroupData) => Promise<void>;
23
+ /**
24
+ * This is run before the transaction is committed, and you can perform
25
+ * additional functions on the transaction, which is available in
26
+ * `group.$nymph`.
27
+ */
28
+ export type TilmeldAfterGroupSaveCallback = (group: Group & GroupData) => Promise<void>;
29
+ /**
30
+ * The transaction is available in `group.$nymph`.
31
+ */
32
+ export type TilmeldBeforeGroupDeleteCallback = (group: Group & GroupData) => Promise<void>;
33
+ /**
34
+ * This is run before the transaction is committed, and you can perform
35
+ * additional functions on the transaction, which is available in
36
+ * `group.$nymph`.
37
+ */
38
+ export type TilmeldAfterGroupDeleteCallback = (group: Group & GroupData) => Promise<void>;
5
39
  export type GroupData = {
40
+ /**
41
+ * The abilities granted to the group.
42
+ */
6
43
  abilities?: string[];
44
+ /**
45
+ * The group's groupname.
46
+ */
7
47
  groupname?: string;
48
+ /**
49
+ * The group's name.
50
+ */
8
51
  name?: string;
52
+ /**
53
+ * The group's email address.
54
+ */
9
55
  email?: string;
56
+ /**
57
+ * The group's avatar URL. (Use getAvatar() to support Gravatar.)
58
+ */
10
59
  avatar?: string;
60
+ /**
61
+ * The group's telephone number.
62
+ */
11
63
  phone?: string;
64
+ /**
65
+ * The group's parent.
66
+ */
12
67
  parent?: Group & GroupData;
13
- user?: (User & UserData) | null;
68
+ /**
69
+ * If generatePrimary is on, this will be the user who generated this group.
70
+ */
71
+ user?: (UserClass & UserData) | null;
72
+ /**
73
+ * Whether the group can be used.
74
+ */
14
75
  enabled?: boolean;
76
+ /**
77
+ * Whether this group is the default primary group for new users.
78
+ */
15
79
  defaultPrimary?: boolean;
80
+ /**
81
+ * Whether this group is a default secondary group for new users.
82
+ */
16
83
  defaultSecondary?: boolean;
84
+ /**
85
+ * Whether this group is a default secondary group for unverified users.
86
+ */
17
87
  unverifiedSecondary?: boolean;
18
88
  };
89
+ /**
90
+ * A user group data model.
91
+ *
92
+ * Written by Hunter Perrin for SciActive.
93
+ *
94
+ * @author Hunter Perrin <hperrin@gmail.com>
95
+ * @copyright SciActive Inc
96
+ * @see http://nymph.io/
97
+ */
19
98
  export default class Group extends AbleObject<GroupData> {
20
- static tilmeld: Tilmeld;
99
+ /**
100
+ * The instance of Tilmeld to use for queries.
101
+ */
21
102
  static ETYPE: string;
22
103
  static class: string;
104
+ private static checkGroupnameCallbacks;
105
+ private static beforeSaveCallbacks;
106
+ private static afterSaveCallbacks;
107
+ private static beforeDeleteCallbacks;
108
+ private static afterDeleteCallbacks;
23
109
  private static DEFAULT_PRIVATE_DATA;
24
110
  private static DEFAULT_ALLOWLIST_DATA;
25
111
  protected $tags: never[];
@@ -29,29 +115,105 @@ export default class Group extends AbleObject<GroupData> {
29
115
  static searchRestrictedData: string[];
30
116
  protected $allowlistData?: string[] | undefined;
31
117
  protected $allowlistTags?: string[];
118
+ /**
119
+ * This should only be used by the backend.
120
+ */
32
121
  private $skipAcWhenSaving;
33
- static factory(guid?: string): Promise<Group & GroupData>;
122
+ /**
123
+ * This should only be used by the backend.
124
+ */
125
+ private $skipAcWhenDeleting;
126
+ /**
127
+ * Used to save the current groupname for domain admin permissions.
128
+ */
129
+ $originalGroupname?: string;
34
130
  static factoryGroupname(groupname?: string): Promise<Group & GroupData>;
35
- static factorySync(guid?: string): Group & GroupData;
36
- constructor(guid?: string);
131
+ /**
132
+ * Get all the groups that can be assigned as primary groups.
133
+ *
134
+ * @param options The options for an optional search query.
135
+ * @param selectors The selectors for an optional search query.
136
+ * @returns An array of the assignable primary groups.
137
+ */
37
138
  static getPrimaryGroups(options?: Options, selectors?: Selector[]): Promise<(Group & GroupData)[]>;
139
+ /**
140
+ * Get all the groups that can be assigned as secondary groups.
141
+ *
142
+ * @param options The options for an optional search query.
143
+ * @param selectors The selectors for an optional search query.
144
+ * @returns An array of the assignable secondary groups.
145
+ */
38
146
  static getSecondaryGroups(options?: Options, selectors?: Selector[]): Promise<(Group & GroupData)[]>;
39
147
  private static getAssignableGroups;
148
+ constructor();
149
+ $setNymph(nymph: Nymph): void;
150
+ $getUniques(): Promise<string[]>;
40
151
  $getAvatar(): string;
41
152
  $jsonAcceptData(input: EntityJson, allowConflict?: boolean): void;
42
153
  $jsonAcceptPatch(patch: EntityPatch, allowConflict?: boolean): void;
43
- $putData(data: EntityData, sdata?: SerializedEntityData): void;
44
- $updateDataProtection(givenUser?: User & UserData): void;
45
- $isDescendant(givenGroup: (Group & GroupData) | string): boolean;
154
+ private $checkIncomingAbilities;
155
+ $putData(data: EntityData, sdata?: SerializedEntityData, source?: 'server'): void;
156
+ /**
157
+ * Update the data protection arrays for a user.
158
+ *
159
+ * @param givenUser User to update protection for. If undefined, will use the currently logged in user.
160
+ */
161
+ $updateDataProtection(givenUser?: UserClass & UserData): void;
162
+ /**
163
+ * Check whether the group is a descendant of a group.
164
+ *
165
+ * @param group The group, or the group's GUID.
166
+ * @returns True or false.
167
+ */
168
+ $isDescendant(givenGroup: (Group & GroupData) | string): Promise<boolean>;
169
+ /**
170
+ * Gets an array of the group's child groups.
171
+ *
172
+ * @returns An array of groups.
173
+ */
46
174
  $getChildren(): Promise<(Group & GroupData)[]>;
175
+ /**
176
+ * Gets an array of the group's descendant groups.
177
+ *
178
+ * @param andSelf Include this group in the returned array.
179
+ * @returns An array of groups.
180
+ */
47
181
  $getDescendants(andSelf?: boolean): Promise<(Group & GroupData)[]>;
48
- $getDescendantsSync(andSelf?: boolean): (Group & GroupData)[];
49
- $getLevel(): number;
50
- $getUsers(descendants?: boolean, limit?: number, offset?: number): Promise<(User & UserData)[]>;
182
+ /**
183
+ * Get the number of parents the group has.
184
+ *
185
+ * If the group is a top level group, this will return 0. If it is a child of
186
+ * a top level group, this will return 1. If it is a grandchild of a top level
187
+ * group, this will return 2, and so on.
188
+ *
189
+ * Levels will max out at 1024 to avoid recursive loops.
190
+ *
191
+ * @returns The level of the group.
192
+ */
193
+ $getLevel(): Promise<number>;
194
+ /**
195
+ * Gets an array of users in the group.
196
+ *
197
+ * @param descendants Include users in all descendant groups too.
198
+ * @param limit The limit for the query.
199
+ * @param offset The offset for the query.
200
+ * @returns An array of users.
201
+ */
202
+ $getUsers(descendants?: boolean, limit?: number, offset?: number): Promise<(UserClass & UserData)[]>;
203
+ /**
204
+ * Check that a groupname is valid.
205
+ *
206
+ * @returns An object with a boolean 'result' entry and a 'message' entry.
207
+ */
51
208
  $checkGroupname(): Promise<{
52
209
  result: boolean;
53
210
  message: string;
54
211
  }>;
212
+ /**
213
+ * Check that an email is unique.
214
+ *
215
+ * @returns An object with a boolean 'result' entry and a 'message' entry.
216
+ */
55
217
  $checkEmail(): Promise<{
56
218
  result: boolean;
57
219
  message: string;
@@ -60,4 +222,8 @@ export default class Group extends AbleObject<GroupData> {
60
222
  $saveSkipAC(): Promise<boolean>;
61
223
  $tilmeldSaveSkipAC(): boolean;
62
224
  $delete(): Promise<boolean>;
225
+ $deleteSkipAC(): Promise<boolean>;
226
+ $tilmeldDeleteSkipAC(): boolean;
227
+ static on<T extends GroupEventType>(event: T, callback: T extends 'checkGroupname' ? TilmeldCheckGroupnameCallback : T extends 'beforeSave' ? TilmeldBeforeGroupSaveCallback : T extends 'afterSave' ? TilmeldAfterGroupSaveCallback : T extends 'beforeDelete' ? TilmeldBeforeGroupDeleteCallback : T extends 'afterDelete' ? TilmeldAfterGroupDeleteCallback : never): () => boolean;
228
+ static off<T extends GroupEventType>(event: T, callback: T extends 'checkGroupname' ? TilmeldCheckGroupnameCallback : T extends 'beforeSave' ? TilmeldBeforeGroupSaveCallback : T extends 'afterSave' ? TilmeldAfterGroupSaveCallback : T extends 'beforeDelete' ? TilmeldBeforeGroupDeleteCallback : T extends 'afterDelete' ? TilmeldAfterGroupDeleteCallback : never): boolean;
63
229
  }