@nymphjs/tilmeld-client 1.0.0-beta.11 → 1.0.0-beta.111

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.
@@ -1,6 +1,6 @@
1
1
  import { Nymph, Entity } from '@nymphjs/client';
2
- import type Group from './Group';
3
- import type { AdminGroupData, CurrentGroupData } from './Group';
2
+ import type Group from './Group.js';
3
+ import type { AdminGroupData, CurrentGroupData } from './Group.js';
4
4
  export type EventType = 'register' | 'login' | 'logout';
5
5
  export type RegisterCallback = (user: User & CurrentUserData) => void;
6
6
  export type LoginCallback = (user: User & CurrentUserData) => void;
@@ -16,34 +16,116 @@ export type ClientConfig = {
16
16
  unverifiedAccess: boolean;
17
17
  };
18
18
  export type UserData = {
19
+ /**
20
+ * The user's username.
21
+ */
19
22
  username?: string;
23
+ /**
24
+ * The user's first name.
25
+ */
20
26
  nameFirst?: string;
27
+ /**
28
+ * The user's middle name.
29
+ */
21
30
  nameMiddle?: string;
31
+ /**
32
+ * The user's last name.
33
+ */
22
34
  nameLast?: string;
35
+ /**
36
+ * The user's full name.
37
+ */
23
38
  name?: string;
39
+ /**
40
+ * The user's avatar URL. (Use $getAvatar() to support Gravatar.)
41
+ */
24
42
  avatar?: string;
43
+ /**
44
+ * Whether the user can log in.
45
+ */
25
46
  enabled?: boolean;
26
47
  };
27
48
  export type CurrentUserData = UserData & {
49
+ /**
50
+ * The abilities granted to the user.
51
+ */
28
52
  abilities?: string[];
53
+ /**
54
+ * The user's email address.
55
+ */
29
56
  email?: string;
57
+ /**
58
+ * The user's telephone number.
59
+ */
30
60
  phone?: string;
61
+ /**
62
+ * The user's primary group.
63
+ */
31
64
  group?: Group & CurrentGroupData;
65
+ /**
66
+ * The user's secondary groups.
67
+ */
32
68
  groups?: (Group & CurrentGroupData)[];
69
+ /**
70
+ * Whether the user should inherit the abilities of his groups.
71
+ */
33
72
  inheritAbilities?: boolean;
73
+ /**
74
+ * If the user has changed their email address, this is the new one, awaiting
75
+ * verification.
76
+ */
77
+ newEmailAddress?: string;
34
78
  };
35
79
  export type AdminUserData = CurrentUserData & {
80
+ /**
81
+ * The user's primary group.
82
+ */
36
83
  group?: Group & AdminGroupData;
84
+ /**
85
+ * The user's secondary groups.
86
+ */
37
87
  groups?: (Group & AdminGroupData)[];
88
+ /**
89
+ * A verification secret.
90
+ */
38
91
  secret?: string;
92
+ /**
93
+ * The timestamp of when the email address was last changed.
94
+ */
39
95
  emailChangeDate?: number;
96
+ /**
97
+ * An email change proceed secret.
98
+ */
40
99
  newEmailSecret?: string;
100
+ /**
101
+ * The new email address.
102
+ */
41
103
  newEmailAddress?: string;
104
+ /**
105
+ * An email change cancellation secret.
106
+ */
42
107
  cancelEmailSecret?: string;
108
+ /**
109
+ * The old email address.
110
+ */
43
111
  cancelEmailAddress?: string;
112
+ /**
113
+ * A recovery secret.
114
+ */
44
115
  recoverSecret?: string;
116
+ /**
117
+ * The timestamp of when the recovery secret was issued.
118
+ */
45
119
  recoverSecretDate?: number;
120
+ /**
121
+ * Used by admins to change a user's password. Not saved to the database.
122
+ */
46
123
  passwordTemp?: string;
124
+ /**
125
+ * If set, this timestamp is the cutoff point for JWT issue dates. Any token
126
+ * issued before this date will not authenticate the user.
127
+ */
128
+ revokeTokenDate?: number;
47
129
  };
48
130
  type InstanceStore = {
49
131
  registerCallbacks: RegisterCallback[];
@@ -52,15 +134,20 @@ type InstanceStore = {
52
134
  clientConfig?: ClientConfig;
53
135
  clientConfigPromise?: Promise<ClientConfig>;
54
136
  removeNymphResponseListener?: () => void;
137
+ currentToken?: string;
55
138
  };
56
139
  export default class User extends Entity<UserData> {
57
140
  protected static stores: WeakMap<Nymph, InstanceStore>;
58
141
  static class: string;
59
142
  static init(nymph: Nymph): void;
60
- constructor(guid?: string);
61
- static factory(guid?: string): Promise<User & UserData>;
62
143
  static factoryUsername(username?: string): Promise<User & UserData>;
63
- static factorySync(guid?: string): User & UserData;
144
+ static getDomainUsers(domain: string, options?: {
145
+ limit?: number;
146
+ offset?: number;
147
+ sort?: string;
148
+ reverse?: boolean;
149
+ }): Promise<(User & UserData)[]>;
150
+ constructor();
64
151
  $checkUsername(): Promise<{
65
152
  result: boolean;
66
153
  message: string;
@@ -84,6 +171,14 @@ export default class User extends Entity<UserData> {
84
171
  loggedin: boolean;
85
172
  message: string;
86
173
  }>;
174
+ $switchUser(data?: {
175
+ additionalData?: {
176
+ [k: string]: any;
177
+ };
178
+ }): Promise<{
179
+ result: boolean;
180
+ message: string;
181
+ }>;
87
182
  $logout(): Promise<{
88
183
  result: boolean;
89
184
  message: string;
@@ -92,6 +187,34 @@ export default class User extends Entity<UserData> {
92
187
  $changePassword(data: {
93
188
  newPassword: string;
94
189
  currentPassword: string;
190
+ revokeCurrentTokens?: boolean;
191
+ }): Promise<{
192
+ result: boolean;
193
+ message: string;
194
+ }>;
195
+ $revokeCurrentTokens(data: {
196
+ password: string;
197
+ }): Promise<{
198
+ result: boolean;
199
+ message: string;
200
+ }>;
201
+ $hasTOTPSecret(): Promise<boolean>;
202
+ $getNewTOTPSecret(): Promise<{
203
+ uri: string;
204
+ qrcode: string;
205
+ secret: string;
206
+ }>;
207
+ $saveTOTPSecret(data: {
208
+ password: string;
209
+ secret: string;
210
+ code: string;
211
+ }): Promise<{
212
+ result: boolean;
213
+ message: string;
214
+ }>;
215
+ $removeTOTPSecret(data?: {
216
+ password: string;
217
+ code: string;
95
218
  }): Promise<{
96
219
  result: boolean;
97
220
  message: string;
@@ -101,12 +224,14 @@ export default class User extends Entity<UserData> {
101
224
  static loginUser(data: {
102
225
  username: string;
103
226
  password: string;
227
+ code?: string;
104
228
  additionalData?: {
105
229
  [k: string]: any;
106
230
  };
107
231
  }): Promise<{
108
232
  result: boolean;
109
233
  message: string;
234
+ needTOTP?: true;
110
235
  user?: User & CurrentUserData;
111
236
  }>;
112
237
  static sendRecovery(data: {
@@ -1,8 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const client_1 = require("@nymphjs/client");
4
- let currentToken = null;
5
- class User extends client_1.Entity {
1
+ import { Entity } from '@nymphjs/client';
2
+ export default class User extends Entity {
3
+ static stores = new WeakMap();
4
+ // The name of the server class
5
+ static class = 'User';
6
6
  static init(nymph) {
7
7
  let store = {
8
8
  registerCallbacks: [],
@@ -22,18 +22,6 @@ class User extends client_1.Entity {
22
22
  store.removeNymphResponseListener = nymph.on('response', (response) => this.handleToken(response));
23
23
  this.handleToken();
24
24
  }
25
- constructor(guid) {
26
- super(guid);
27
- if (guid == null) {
28
- this.$data.enabled = true;
29
- this.$data.abilities = [];
30
- this.$data.groups = [];
31
- this.$data.inheritAbilities = true;
32
- }
33
- }
34
- static async factory(guid) {
35
- return (await super.factory(guid));
36
- }
37
25
  static async factoryUsername(username) {
38
26
  const entity = new this();
39
27
  if (username != null) {
@@ -49,8 +37,15 @@ class User extends client_1.Entity {
49
37
  }
50
38
  return entity;
51
39
  }
52
- static factorySync(guid) {
53
- return super.factorySync(guid);
40
+ static async getDomainUsers(domain, options) {
41
+ return await this.serverCallStatic('getDomainUsers', [domain, options]);
42
+ }
43
+ constructor() {
44
+ super();
45
+ this.$data.enabled = true;
46
+ this.$data.abilities = [];
47
+ this.$data.groups = [];
48
+ this.$data.inheritAbilities = true;
54
49
  }
55
50
  async $checkUsername() {
56
51
  return await this.$serverCall('$checkUsername', [], true);
@@ -83,6 +78,20 @@ class User extends client_1.Entity {
83
78
  }
84
79
  return response;
85
80
  }
81
+ async $switchUser(data) {
82
+ const store = User.stores.get(this.$nymph);
83
+ if (store == null) {
84
+ throw new Error('This user class was never initialized with an instance of Nymph');
85
+ }
86
+ const response = await this.$serverCall('$switchUser', [data]);
87
+ if (response.result) {
88
+ this.constructor.handleToken();
89
+ for (let i = 0; i < store.loginCallbacks.length; i++) {
90
+ store.loginCallbacks[i] && store.loginCallbacks[i](this);
91
+ }
92
+ }
93
+ return response;
94
+ }
86
95
  async $logout() {
87
96
  const store = User.stores.get(this.$nymph);
88
97
  if (store == null) {
@@ -103,6 +112,23 @@ class User extends client_1.Entity {
103
112
  async $changePassword(data) {
104
113
  return await this.$serverCall('$changePassword', [data]);
105
114
  }
115
+ async $revokeCurrentTokens(data) {
116
+ return await this.$serverCall('$revokeCurrentTokens', [data]);
117
+ }
118
+ async $hasTOTPSecret() {
119
+ return await this.$serverCall('$hasTOTPSecret', [], true);
120
+ }
121
+ async $getNewTOTPSecret() {
122
+ return await this.$serverCall('$getNewTOTPSecret', [], true);
123
+ }
124
+ async $saveTOTPSecret(data) {
125
+ return await this.$serverCall('$saveTOTPSecret', [data]);
126
+ }
127
+ async $removeTOTPSecret(data) {
128
+ return await this.$serverCall('$removeTOTPSecret', [
129
+ ...(data ? [data] : []),
130
+ ]);
131
+ }
106
132
  static async current(returnObjectIfNotExist) {
107
133
  const currentUser = await this.serverCallStatic('current', [false]);
108
134
  if (currentUser == null) {
@@ -148,40 +174,58 @@ class User extends client_1.Entity {
148
174
  return await store.clientConfigPromise;
149
175
  }
150
176
  static handleToken(response) {
177
+ const store = User.stores.get(this.nymph);
178
+ if (store == null) {
179
+ throw new Error('This user class was never initialized with an instance of Nymph');
180
+ }
151
181
  let token = null;
182
+ let switchToken = null;
183
+ let hasNoCookie = typeof document === 'undefined' || typeof document.cookie === 'undefined';
152
184
  const authCookiePattern = /(?:(?:^|.*;\s*)TILMELDAUTH\s*=\s*([^;]*).*$)|^.*$/;
185
+ const switchCookiePattern = /(?:(?:^|.*;\s*)TILMELDSWITCH\s*=\s*([^;]*).*$)|^.*$/;
153
186
  if (response && response.headers.has('X-TILMELDAUTH')) {
154
187
  token = response.headers.get('X-TILMELDAUTH');
188
+ switchToken = response.headers.get('X-TILMELDSWITCH');
155
189
  }
156
190
  else if (typeof document !== 'undefined' &&
157
191
  document.cookie.match(authCookiePattern)) {
158
192
  token = document.cookie.replace(authCookiePattern, '$1');
193
+ switchToken = document.cookie.replace(switchCookiePattern, '$1');
159
194
  }
160
195
  else {
161
196
  return;
162
197
  }
163
- if (currentToken !== token) {
198
+ if (store.currentToken != token) {
164
199
  if (token == null || token === '') {
165
- if (currentToken != null) {
166
- this.nymph.setXsrfToken(null);
200
+ if (store.currentToken != null) {
201
+ delete this.nymph.headers['X-Xsrf-Token'];
202
+ delete this.nymph.headers['X-TILMELDAUTH'];
203
+ delete this.nymph.headers['X-TILMELDSWITCH'];
167
204
  if (this.nymph.pubsub) {
168
- this.nymph.pubsub.setToken(null);
205
+ this.nymph.pubsub.authenticate(null);
169
206
  }
170
- currentToken = null;
207
+ delete store.currentToken;
171
208
  }
172
209
  }
173
210
  else {
174
211
  const base64Url = token.split('.')[1];
175
212
  const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
176
213
  const json = typeof atob === 'undefined'
177
- ? Buffer.from(base64, 'base64').toString('binary')
178
- : atob(base64);
214
+ ? Buffer.from(base64, 'base64').toString('binary') // node
215
+ : atob(base64); // browser
179
216
  const jwt = JSON.parse(json);
180
- this.nymph.setXsrfToken(jwt.xsrfToken);
217
+ this.nymph.headers['X-Xsrf-Token'] = jwt.xsrfToken;
218
+ if (hasNoCookie) {
219
+ this.nymph.headers['X-TILMELDAUTH'] = token;
220
+ delete this.nymph.headers['X-TILMELDSWITCH'];
221
+ if (switchToken != null) {
222
+ this.nymph.headers['X-TILMELDSWITCH'] = switchToken;
223
+ }
224
+ }
181
225
  if (this.nymph.pubsub) {
182
- this.nymph.pubsub.setToken(token);
226
+ this.nymph.pubsub.authenticate(token, switchToken);
183
227
  }
184
- currentToken = token;
228
+ store.currentToken = token;
185
229
  }
186
230
  }
187
231
  }
@@ -194,6 +238,7 @@ class User extends client_1.Entity {
194
238
  if (!(prop in store)) {
195
239
  throw new Error('Invalid event type.');
196
240
  }
241
+ // @ts-ignore: The callback should always be the right type here.
197
242
  store[prop].push(callback);
198
243
  return () => this.off(event, callback);
199
244
  }
@@ -206,14 +251,13 @@ class User extends client_1.Entity {
206
251
  if (!(prop in store)) {
207
252
  return false;
208
253
  }
254
+ // @ts-ignore: The callback should always be the right type here.
209
255
  const i = store[prop].indexOf(callback);
210
256
  if (i > -1) {
257
+ // @ts-ignore: The callback should always be the right type here.
211
258
  store[prop].splice(i, 1);
212
259
  }
213
260
  return true;
214
261
  }
215
262
  }
216
- exports.default = User;
217
- User.stores = new WeakMap();
218
- User.class = 'User';
219
263
  //# sourceMappingURL=User.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"User.js","sourceRoot":"","sources":["../src/User.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type UserClass from './User.js';
2
+ import type { ClientConfig, CurrentUserData } from './User.js';
3
+ export type RegistrationDetails = {
4
+ /**
5
+ * New user's username.
6
+ */
7
+ username: string;
8
+ /**
9
+ * New user's password.
10
+ */
11
+ password: string;
12
+ /**
13
+ * Repeat the password.
14
+ */
15
+ password2: string;
16
+ /**
17
+ * Whether the username passed verification.
18
+ */
19
+ usernameVerified: boolean;
20
+ /**
21
+ * The new user's email address.
22
+ */
23
+ email?: string;
24
+ /**
25
+ * The new user's given name.
26
+ */
27
+ nameFirst?: string;
28
+ /**
29
+ * The new user's surname.
30
+ */
31
+ nameLast?: string;
32
+ /**
33
+ * The new user's phone number.
34
+ */
35
+ phone?: string;
36
+ /**
37
+ * Additional data to be included in the request.
38
+ */
39
+ additionalData?: {
40
+ [k: string]: any;
41
+ };
42
+ };
43
+ export declare class NeedTOTPError extends Error {
44
+ }
45
+ export declare function login(User: typeof UserClass, username: string, password: string, code?: string, additionalData?: {
46
+ [k: string]: any;
47
+ }): Promise<{
48
+ message: string;
49
+ user?: UserClass & CurrentUserData;
50
+ }>;
51
+ export declare function register(User: typeof UserClass, userDetails: RegistrationDetails, clientConfig?: ClientConfig): Promise<{
52
+ loggedin: boolean;
53
+ message: string;
54
+ user?: UserClass & CurrentUserData;
55
+ }>;
56
+ export declare function checkUsername(User: typeof UserClass, username: string, clientConfig?: ClientConfig): Promise<{
57
+ message: string;
58
+ }>;
@@ -1,7 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkUsername = exports.register = exports.login = void 0;
4
- async function login(User, username, password, additionalData) {
1
+ export class NeedTOTPError extends Error {
2
+ }
3
+ export async function login(User, username, password, code, additionalData) {
5
4
  if (username === '') {
6
5
  throw new Error('You need to enter a username.');
7
6
  }
@@ -9,22 +8,28 @@ async function login(User, username, password, additionalData) {
9
8
  throw new Error('You need to enter a password');
10
9
  }
11
10
  try {
12
- const { result, ...response } = await User.loginUser({
11
+ const { result, needTOTP, ...response } = await User.loginUser({
13
12
  username,
14
13
  password,
14
+ code,
15
15
  ...(additionalData ? { additionalData } : {}),
16
16
  });
17
17
  if (!result) {
18
+ if (needTOTP) {
19
+ throw new NeedTOTPError(response.message);
20
+ }
18
21
  throw new Error(response.message);
19
22
  }
20
23
  return response;
21
24
  }
22
25
  catch (e) {
26
+ if (e instanceof NeedTOTPError) {
27
+ throw e;
28
+ }
23
29
  throw new Error(e?.message ?? 'An error occurred.');
24
30
  }
25
31
  }
26
- exports.login = login;
27
- async function register(User, userDetails, clientConfig) {
32
+ export async function register(User, userDetails, clientConfig) {
28
33
  if (userDetails.username === '') {
29
34
  throw new Error('You need to enter a username.');
30
35
  }
@@ -37,20 +42,23 @@ async function register(User, userDetails, clientConfig) {
37
42
  if (userDetails.password === '') {
38
43
  throw new Error('You need to enter a password');
39
44
  }
45
+ // Create a new user.
40
46
  let user = User.factorySync();
41
47
  user.username = userDetails.username;
42
48
  const config = clientConfig || (await User.getClientConfig());
43
- if (config.emailUsernames) {
44
- user.email = userDetails.username;
45
- }
46
- else if (config.regFields.indexOf('email') !== -1) {
47
- user.email = userDetails.email;
49
+ if (config.regFields.includes('email')) {
50
+ if (config.emailUsernames) {
51
+ user.email = userDetails.username;
52
+ }
53
+ else {
54
+ user.email = userDetails.email;
55
+ }
48
56
  }
49
- if (config.regFields.indexOf('name') !== -1) {
57
+ if (config.regFields.includes('name')) {
50
58
  user.nameFirst = userDetails.nameFirst;
51
59
  user.nameLast = userDetails.nameLast;
52
60
  }
53
- if (config.regFields.indexOf('phone') !== -1) {
61
+ if (config.regFields.includes('phone')) {
54
62
  user.phone = userDetails.phone;
55
63
  }
56
64
  try {
@@ -69,8 +77,7 @@ async function register(User, userDetails, clientConfig) {
69
77
  throw new Error(e?.message ?? 'An error occurred.');
70
78
  }
71
79
  }
72
- exports.register = register;
73
- async function checkUsername(User, username, clientConfig) {
80
+ export async function checkUsername(User, username, clientConfig) {
74
81
  let user = User.factorySync();
75
82
  user.username = username;
76
83
  const config = clientConfig || (await User.getClientConfig());
@@ -88,5 +95,4 @@ async function checkUsername(User, username, clientConfig) {
88
95
  throw new Error(e?.message ?? 'An error occurred.');
89
96
  }
90
97
  }
91
- exports.checkUsername = checkUsername;
92
98
  //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from './Group.js';
2
+ import Group from './Group.js';
3
+ export { Group };
4
+ export * from './helpers.js';
5
+ export * from './Tilmeld.types.js';
6
+ export * from './User.js';
7
+ import User from './User.js';
8
+ export { User };
package/dist/index.js CHANGED
@@ -1,2 +1,9 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nymphjs/client")):"function"==typeof define&&define.amd?define(["@nymphjs/client"],t):"object"==typeof exports?exports["@nymphjs/tilmeld-client"]=t(require("@nymphjs/client")):e["@nymphjs/tilmeld-client"]=t(e["@nymphjs/client"])}(this,(e=>(()=>{"use strict";var t={848:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const s=r(778);class n extends s.Entity{constructor(e){super(e),null==e&&(this.$data.enabled=!0,this.$data.abilities=[])}static async factory(e){return await super.factory(e)}static factorySync(e){return super.factorySync(e)}async $checkGroupname(){return await this.$serverCall("$checkGroupname",[],!0)}async $checkEmail(){return await this.$serverCall("$checkEmail",[],!0)}async $getAvatar(){return await this.$serverCall("$getAvatar",[],!0)}async $getChildren(){return await this.$serverCall("$getChildren",[],!0)}async $getDescendants(e=!1){return await this.$serverCall("$getDescendants",[e],!0)}async $getLevel(){return await this.$serverCall("$getLevel",[],!0)}async $isDescendant(e){return await this.$serverCall("$isDescendant",[e],!0)}static async getPrimaryGroups(e,t){return await this.serverCallStatic("getPrimaryGroups",[{options:e,class:this.class},t])}static async getSecondaryGroups(e,t){return await this.serverCallStatic("getSecondaryGroups",[{options:e,class:this.class},t])}}t.default=n,n.class="Group"},178:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const s=r(778);let n=null;class a extends s.Entity{static init(e){let t={registerCallbacks:[],loginCallbacks:[],logoutCallbacks:[]};if(a.stores.has(e)){const r=a.stores.get(e);r&&(t=r)}a.stores.set(e,t),t.removeNymphResponseListener&&t.removeNymphResponseListener(),t.removeNymphResponseListener=e.on("response",(e=>this.handleToken(e))),this.handleToken()}constructor(e){super(e),null==e&&(this.$data.enabled=!0,this.$data.abilities=[],this.$data.groups=[],this.$data.inheritAbilities=!0)}static async factory(e){return await super.factory(e)}static async factoryUsername(e){const t=new this;if(null!=e){const t=await this.nymph.getEntity({class:this},{type:"&",ilike:["username",e.replace(/([\\%_])/g,(e=>`\\${e}`))]});if(null!=t)return t}return t}static factorySync(e){return super.factorySync(e)}async $checkUsername(){return await this.$serverCall("$checkUsername",[],!0)}async $checkEmail(){return await this.$serverCall("$checkEmail",[],!0)}async $checkPhone(){return await this.$serverCall("$checkPhone",[],!0)}async $getAvatar(){return await this.$serverCall("$getAvatar",[],!0)}async $register(e){const t=a.stores.get(this.$nymph);if(null==t)throw new Error("This user class was never initialized with an instance of Nymph");const r=await this.$serverCall("$register",[e]);if(r.result)for(let e=0;e<t.registerCallbacks.length;e++)t.registerCallbacks[e]&&t.registerCallbacks[e](this);if(r.loggedin){this.constructor.handleToken();for(let e=0;e<t.loginCallbacks.length;e++)t.loginCallbacks[e]&&t.loginCallbacks[e](this)}return r}async $logout(){const e=a.stores.get(this.$nymph);if(null==e)throw new Error("This user class was never initialized with an instance of Nymph");const t=await this.$serverCall("$logout",[]);if(t.result){this.constructor.handleToken();for(let t=0;t<e.logoutCallbacks.length;t++)e.logoutCallbacks[t]&&e.logoutCallbacks[t](this)}return t}async $gatekeeper(e){return await this.$serverCall("$gatekeeper",[e],!0)}async $changePassword(e){return await this.$serverCall("$changePassword",[e])}static async current(e){const t=await this.serverCallStatic("current",[!1]);return null==t?e?this.factorySync():null:t}static async loginUser(e){const t=a.stores.get(this.nymph);if(null==t)throw new Error("This user class was never initialized with an instance of Nymph");const r=await this.serverCallStatic("loginUser",[e]);if(r.result){this.handleToken();for(let e=0;e<t.loginCallbacks.length;e++)t.loginCallbacks[e]&&t.loginCallbacks[e](r.user)}return r}static async sendRecovery(e){return await this.serverCallStatic("sendRecovery",[e])}static async recover(e){return await this.serverCallStatic("recover",[e])}static async getClientConfig(){const e=a.stores.get(this.nymph);if(null==e)throw new Error("This user class was never initialized with an instance of Nymph");return e.clientConfig?e.clientConfig:(e.clientConfigPromise||(e.clientConfigPromise=this.serverCallStatic("getClientConfig",[]).then((t=>(e.clientConfig=t,e.clientConfigPromise=void 0,t)))),await e.clientConfigPromise)}static handleToken(e){let t=null;const r=/(?:(?:^|.*;\s*)TILMELDAUTH\s*=\s*([^;]*).*$)|^.*$/;if(e&&e.headers.has("X-TILMELDAUTH"))t=e.headers.get("X-TILMELDAUTH");else{if("undefined"==typeof document||!document.cookie.match(r))return;t=document.cookie.replace(r,"$1")}if(n!==t)if(null==t||""===t)null!=n&&(this.nymph.setXsrfToken(null),this.nymph.pubsub&&this.nymph.pubsub.setToken(null),n=null);else{const e=t.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),r="undefined"==typeof atob?Buffer.from(e,"base64").toString("binary"):atob(e),s=JSON.parse(r);this.nymph.setXsrfToken(s.xsrfToken),this.nymph.pubsub&&this.nymph.pubsub.setToken(t),n=t}}static on(e,t){const r=a.stores.get(this.nymph);if(null==r)throw new Error("This user class was never initialized with an instance of Nymph");const s=e+"Callbacks";if(!(s in r))throw new Error("Invalid event type.");return r[s].push(t),()=>this.off(e,t)}static off(e,t){const r=a.stores.get(this.nymph);if(null==r)throw new Error("This user class was never initialized with an instance of Nymph");const s=e+"Callbacks";if(!(s in r))return!1;const n=r[s].indexOf(t);return n>-1&&r[s].splice(n,1),!0}}t.default=a,a.stores=new WeakMap,a.class="User"},13:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.checkUsername=t.register=t.login=void 0,t.login=async function(e,t,r,s){if(""===t)throw new Error("You need to enter a username.");if(""===r)throw new Error("You need to enter a password");try{const{result:n,...a}=await e.loginUser({username:t,password:r,...s?{additionalData:s}:{}});if(!n)throw new Error(a.message);return a}catch(e){throw new Error(e?.message??"An error occurred.")}},t.register=async function(e,t,r){if(""===t.username)throw new Error("You need to enter a username.");if(!t.usernameVerified)throw new Error("The username you entered is not valid.");if(t.password!==t.password2)throw new Error("Your passwords do not match.");if(""===t.password)throw new Error("You need to enter a password");let s=e.factorySync();s.username=t.username;const n=r||await e.getClientConfig();n.emailUsernames?s.email=t.username:-1!==n.regFields.indexOf("email")&&(s.email=t.email),-1!==n.regFields.indexOf("name")&&(s.nameFirst=t.nameFirst,s.nameLast=t.nameLast),-1!==n.regFields.indexOf("phone")&&(s.phone=t.phone);try{const{result:e,...r}=await s.$register({password:t.password,...t.additionalData?{additionalData:t.additionalData}:{}});if(!e)throw new Error(r.message);return{...r,user:s}}catch(e){throw new Error(e?.message??"An error occurred.")}},t.checkUsername=async function(e,t,r){let s=e.factorySync();s.username=t,(r||await e.getClientConfig()).emailUsernames&&(s.email=t);try{const{result:e,...t}=await s.$checkUsername();if(!e)throw new Error(t.message);return t}catch(e){throw new Error(e?.message??"An error occurred.")}}},568:function(e,t,r){var s=this&&this.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,n)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||s(t,e,r)},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.User=t.Group=void 0,n(r(848),t);const i=a(r(848));t.Group=i.default,n(r(13),t),n(r(178),t);const o=a(r(178));t.User=o.default},778:t=>{t.exports=e}},r={};return function e(s){var n=r[s];if(void 0!==n)return n.exports;var a=r[s]={exports:{}};return t[s].call(a.exports,a,a.exports,e),a.exports}(568)})()));
1
+ export * from './Group.js';
2
+ import Group from './Group.js';
3
+ export { Group };
4
+ export * from './helpers.js';
5
+ export * from './Tilmeld.types.js';
6
+ export * from './User.js';
7
+ import User from './User.js';
8
+ export { User };
2
9
  //# sourceMappingURL=index.js.map