@dev-crew-berlin/enter-js-utils 0.40.2 → 0.40.4

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,7 +1,8 @@
1
1
  import { APIResult } from '../lib';
2
+ import { AccessToken } from '../models/access-token';
2
3
  import { paths } from '../generated/api-schema';
3
4
  export interface APICredentials {
4
- accessToken: string;
5
+ accessToken: AccessToken;
5
6
  url: string;
6
7
  }
7
8
  declare type HTTPMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
@@ -26,12 +27,19 @@ export default class APIBase {
26
27
  onLogout: (reason?: string) => void;
27
28
  });
28
29
  private static fetchResult;
30
+ static fetchAccessToken(args: {
31
+ url: string;
32
+ user: string;
33
+ password: string;
34
+ deviceName: string;
35
+ }): Promise<APIResult<AccessToken>>;
29
36
  private fetchFromEnter;
30
37
  protected get<Path extends keyof paths>(endpoint: Path): Promise<APIResult<ResponseType<Path, 'get'>>>;
31
38
  protected post<Path extends keyof paths>(endpoint: Path, data: RequestBody<Path, 'post'>): Promise<APIResult<ResponseType<Path, 'post'>>>;
32
39
  protected put<Path extends keyof paths>(endpoint: Path, data: RequestBody<Path, 'put'>): Promise<APIResult<ResponseType<Path, 'put'>>>;
33
40
  protected patch<Path extends keyof paths>(endpoint: Path, data: RequestBody<Path, 'patch'>): Promise<APIResult<ResponseType<Path, 'patch'>>>;
34
41
  protected delete<Path extends keyof paths>(endpoint: Path): Promise<APIResult<ResponseType<Path, 'delete'>>>;
42
+ refreshToken(): Promise<APIResult<AccessToken>>;
35
43
  logout(): Promise<void>;
36
44
  }
37
45
  export {};
@@ -13,10 +13,52 @@ export default class APIBase {
13
13
  return failure(e);
14
14
  }
15
15
  }
16
+ static async fetchAccessToken(args) {
17
+ const body = {
18
+ username: args.user,
19
+ password: args.password,
20
+ scope: '',
21
+ client_id: args.deviceName
22
+ };
23
+ const res = await APIBase.fetchResult(`${args.url}/authenticate`, {
24
+ method: 'POST',
25
+ headers: {
26
+ 'Content-Type': 'application/x-www-form-urlencoded'
27
+ },
28
+ body: new URLSearchParams(body)
29
+ });
30
+ if (!res.success) {
31
+ return failure([{
32
+ type: 'network-error',
33
+ message: res.error.message,
34
+ endpoint: 'authenticate'
35
+ }]);
36
+ }
37
+ if (res.data.status >= 300) {
38
+ try {
39
+ const error = await res.data.json();
40
+ return failure([{
41
+ type: 'http-error',
42
+ statusCode: res.data.status,
43
+ message: error.error,
44
+ endpoint: 'authenticate'
45
+ }]);
46
+ } catch (e) {
47
+ return failure([{
48
+ type: 'http-error',
49
+ statusCode: res.data.status,
50
+ message: 'Could not authenticate',
51
+ endpoint: 'authenticate'
52
+ }]);
53
+ }
54
+ }
55
+ const payload = await res.data.json();
56
+ return success(payload);
57
+ }
16
58
  async fetchFromEnter(endpoint, method, data) {
17
59
  const body = data !== null ? JSON.stringify(data) : null;
18
60
  const headers = {
19
- Authorization: `bearer ${this.credentials.accessToken}`,
61
+ Authorization: `bearer ${this.credentials.accessToken.access_token}`,
20
62
  'Content-Type': 'application/json'
21
63
  };
22
64
  const res = await APIBase.fetchResult(`${this.credentials.url}${endpoint}`, {
@@ -89,8 +131,17 @@ export default class APIBase {
89
131
  if (!rawResponse.success) return rawResponse;
90
132
  return success(rawResponse.data);
91
133
  }
134
+ async refreshToken() {
135
+ return this.post('/authenticate/refresh', null);
136
+ }
92
137
  async logout() {
93
138
  this.isLoggedIn = false;
94
139
  this.onLogout();
140
+ try {
141
+ // delete token at api backend so it becomes invalid
142
+ await this.fetchFromEnter('/authenticate', 'delete', undefined);
143
+ } catch (e) {
144
+ console.warn('error deleting the token in the backend, so it is still valid', e);
145
+ }
95
146
  }
96
147
  }
@@ -7,6 +7,12 @@ export declare type paths = {
7
7
  /** healthcheck to see if api server is running */
8
8
  get: operations["healthcheck_health_get"];
9
9
  };
10
+ "/authenticate": {
11
+ post: operations["login_authenticate_post"];
12
+ };
13
+ "/authenticate/refresh": {
14
+ post: operations["refresh_token_authenticate_refresh_post"];
15
+ };
10
16
  "/instances/{instance_name}/checkin_counts": {
11
17
  get: operations["checkin_counts_instances__instance_name__checkin_counts_get"];
12
18
  };
@@ -228,6 +234,39 @@ export declare type components = {
228
234
  /** Value */
229
235
  value?: string;
230
236
  };
237
+ /** AuthResponse */
238
+ AuthResponse: {
239
+ /**
240
+ * Token Type
241
+ * @enum {string}
242
+ */
243
+ token_type: "bearer";
244
+ /** Access Token */
245
+ access_token: string;
246
+ /**
247
+ * Expires
248
+ * Format: date-time
249
+ */
250
+ expires: string;
251
+ };
252
+ /** Body_login_authenticate_post */
253
+ Body_login_authenticate_post: {
254
+ /** Grant Type */
255
+ grant_type?: string;
256
+ /** Username */
257
+ username: string;
258
+ /** Password */
259
+ password: string;
260
+ /**
261
+ * Scope
262
+ * @default
263
+ */
264
+ scope: string;
265
+ /** Client Id */
266
+ client_id?: string;
267
+ /** Client Secret */
268
+ client_secret?: string;
269
+ };
231
270
  /** CheckboxField */
232
271
  CheckboxField: {
233
272
  /**
@@ -599,34 +638,8 @@ export declare type components = {
599
638
  /** Max */
600
639
  max?: number;
601
640
  };
602
- /**
603
- * EmailUnsubscribedEvent
604
- * @description Attendee unsubscribed from email list.
605
- *
606
- * This will add the email_address to a blacklist for all mailings from the domain
607
- * associated to the instance.
608
- */
609
- EmailUnsubscribedEvent: {
610
- /**
611
- * Id
612
- * Format: uuid
613
- */
614
- id?: string;
615
- /**
616
- * Event
617
- * @default email-unsubscribed
618
- * @enum {string}
619
- */
620
- event: "email-unsubscribed";
621
- /** Instancename */
622
- instanceName: string;
623
- /** Emailaddress */
624
- emailAddress: string;
625
- /** Signature */
626
- signature: string;
627
- };
628
641
  /** EventList */
629
- EventList: (components["schemas"]["AttendeeCreatedEvent"] | components["schemas"]["AttendeeUpdatedEvent"] | components["schemas"]["AttendeeRespondedEvent"] | components["schemas"]["EmailUnsubscribedEvent"] | components["schemas"]["AttendeeDeletedEvent"] | components["schemas"]["CheckinCreatedEvent"] | components["schemas"]["CheckinDeletedEvent"] | components["schemas"]["PaymentPaidEvent"])[];
642
+ EventList: (components["schemas"]["AttendeeCreatedEvent"] | components["schemas"]["AttendeeUpdatedEvent"] | components["schemas"]["AttendeeRespondedEvent"] | components["schemas"]["AttendeeDeletedEvent"] | components["schemas"]["CheckinCreatedEvent"] | components["schemas"]["CheckinDeletedEvent"] | components["schemas"]["PaymentPaidEvent"])[];
630
643
  /** FieldGroup */
631
644
  FieldGroup: {
632
645
  /** Questions */
@@ -1024,7 +1037,7 @@ export declare type components = {
1024
1037
  };
1025
1038
  /** Permissions */
1026
1039
  permissions: {
1027
- [key: string]: ("attendees:read" | "attendees:create" | "attendees:write" | "attendees:write:bulk" | "attendees:import" | "attendees:export" | "attendees:delete:soft" | "attendees:delete:final" | "emails:send" | "emails:send:bulk" | "email-config:write" | "pdfs:write" | "pdfs:export" | "payment:write" | "checkins:write" | "changes:write" | "files:write" | "fields:write" | "fields:read" | "templates:write" | "register-flow:write" | "export-scripts:write" | "registration-code:write" | "settings:read" | "settings:write" | "stats:read" | "stats:write" | "backup:write" | "variables:read" | "variables:write" | "webhooks:read" | "webhooks:write")[];
1040
+ [key: string]: ("attendees" | "add" | "email" | "invites" | "generate" | "edit" | "filter" | "export" | "export-pdf" | "delete" | "delete-final" | "payment" | "checkin" | "api" | "changes" | "private" | "files" | "import" | "bulk" | "email-bulk" | "questions" | "pages" | "templates" | "emails" | "pdfs" | "regflow" | "reg-scripts" | "export-custom" | "regdata" | "setup" | "read-stats" | "write-stats" | "backup" | "read-variables" | "write-variables" | "webhooks")[];
1028
1041
  };
1029
1042
  };
1030
1043
  /** RadioButtonField */
@@ -1270,8 +1283,8 @@ export declare type components = {
1270
1283
  /** Rootpath */
1271
1284
  rootPath: string;
1272
1285
  };
1273
- /** UserPreferencesUpdate */
1274
- UserPreferencesUpdate: {
1286
+ /** UserUpdate */
1287
+ UserUpdate: {
1275
1288
  /** Userdata */
1276
1289
  userdata: {
1277
1290
  [key: string]: unknown;
@@ -1335,6 +1348,37 @@ export declare type operations = {
1335
1348
  };
1336
1349
  };
1337
1350
  };
1351
+ login_authenticate_post: {
1352
+ responses: {
1353
+ /** Successful Response */
1354
+ 200: {
1355
+ content: {
1356
+ "application/json": components["schemas"]["AuthResponse"];
1357
+ };
1358
+ };
1359
+ /** Validation Error */
1360
+ 422: {
1361
+ content: {
1362
+ "application/json": components["schemas"]["HTTPValidationError"];
1363
+ };
1364
+ };
1365
+ };
1366
+ requestBody: {
1367
+ content: {
1368
+ "application/x-www-form-urlencoded": components["schemas"]["Body_login_authenticate_post"];
1369
+ };
1370
+ };
1371
+ };
1372
+ refresh_token_authenticate_refresh_post: {
1373
+ responses: {
1374
+ /** Successful Response */
1375
+ 200: {
1376
+ content: {
1377
+ "application/json": components["schemas"]["AuthResponse"];
1378
+ };
1379
+ };
1380
+ };
1381
+ };
1338
1382
  checkin_counts_instances__instance_name__checkin_counts_get: {
1339
1383
  parameters: {
1340
1384
  path: {
@@ -1432,7 +1476,7 @@ export declare type operations = {
1432
1476
  };
1433
1477
  requestBody: {
1434
1478
  content: {
1435
- "application/json": components["schemas"]["UserPreferencesUpdate"];
1479
+ "application/json": components["schemas"]["UserUpdate"];
1436
1480
  };
1437
1481
  };
1438
1482
  };
@@ -0,0 +1,2 @@
1
+ import { components } from '../generated/api-schema';
2
+ export declare type AccessToken = components['schemas']['AuthResponse'];
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- export declare type FieldValue = string | number | string[] | null;
1
+ export declare type FieldValue = string | number | string[] | boolean | null;
@@ -1,3 +1,4 @@
1
+ export type { AccessToken } from './access-token';
1
2
  export { Attendee } from './attendee';
2
3
  export type { AttendeeJSON } from './attendee';
3
4
  export type { CheckinCounts } from './checkin-counts';
@@ -1,2 +1,2 @@
1
1
  import { components } from '../generated/api-schema';
2
- export declare type Permission = components['schemas']['PublicUser']['permissions'][string][number];
2
+ export declare type Permission = components['schemas']['PublicUser']['permissions'][string];
@@ -6,7 +6,7 @@ export const AddGuestIcon = ({
6
6
  return /*#__PURE__*/React.createElement("svg", {
7
7
  xmlns: "http://www.w3.org/2000/svg",
8
8
  width: "100%",
9
- height: "auto",
9
+ height: "100%",
10
10
  viewBox: "0 0 16.571 13.68"
11
11
  }, /*#__PURE__*/React.createElement("path", {
12
12
  fill: color,
@@ -7,7 +7,7 @@ export const CaretIcon = ({
7
7
  return /*#__PURE__*/React.createElement("svg", {
8
8
  xmlns: "http://www.w3.org/2000/svg",
9
9
  width: "100%",
10
- height: "auto",
10
+ height: "100%",
11
11
  viewBox: "0 0 16 16",
12
12
  transform: `rotate(${rotateDeg})`,
13
13
  fill: color
@@ -6,7 +6,7 @@ export const FilterIcon = ({
6
6
  return /*#__PURE__*/React.createElement("svg", {
7
7
  xmlns: "http://www.w3.org/2000/svg",
8
8
  width: "100%",
9
- height: "auto",
9
+ height: "100%",
10
10
  viewBox: "0 0 10.252 11.956"
11
11
  }, /*#__PURE__*/React.createElement("path", {
12
12
  fill: color,
@@ -6,7 +6,7 @@ export const SearchIcon = ({
6
6
  return /*#__PURE__*/React.createElement("svg", {
7
7
  xmlns: "http://www.w3.org/2000/svg",
8
8
  width: "100%",
9
- height: "auto",
9
+ height: "100%",
10
10
  viewBox: "0 0 18.9 19.688"
11
11
  }, /*#__PURE__*/React.createElement("path", {
12
12
  fill: color,
@@ -6,7 +6,7 @@ export const SettingsIcon = ({
6
6
  return /*#__PURE__*/React.createElement("svg", {
7
7
  xmlns: "http://www.w3.org/2000/svg",
8
8
  width: "100%",
9
- height: "auto",
9
+ height: "100%",
10
10
  viewBox: "0 0 19 20"
11
11
  }, /*#__PURE__*/React.createElement("path", {
12
12
  fill: color,
@@ -8,7 +8,7 @@ export const SortListIcon = ({
8
8
  xmlns: "http://www.w3.org/2000/svg",
9
9
  viewBox: "0 0 436 420",
10
10
  width: "100%",
11
- height: "auto",
11
+ height: "100%",
12
12
  transform: `scale(1,${ascending ? 1 : -1})`,
13
13
  fill: color
14
14
  }, /*#__PURE__*/React.createElement("path", {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dev-crew-berlin/enter-js-utils",
3
- "version": "0.40.2",
3
+ "version": "0.40.4",
4
4
  "description": "utils such as vaildation and other helpers to work with data from the enter app",
5
5
  "files": [
6
6
  "dist",