@auxilium/datalynk-client 0.4.8 → 0.5.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.
package/dist/api.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import { BehaviorSubject } from 'rxjs';
2
2
  import { Auth } from './auth';
3
+ import { Files } from './files';
3
4
  import { Slice, SliceMeta } from './slice';
4
5
  import { Socket } from './socket';
6
+ import { Superuser } from './superuser';
5
7
 
6
8
  /**
7
9
  * Function definition for API callbacks
@@ -53,8 +55,12 @@ export declare class Api {
53
55
  private pending;
54
56
  /** Authentication helpers */
55
57
  readonly auth: Auth;
58
+ /** File helpers */
59
+ readonly files: Files;
56
60
  /** Socket object */
57
61
  readonly socket: Socket;
62
+ /** Superuser helpers */
63
+ readonly superuser: Superuser;
58
64
  /** API endpoint */
59
65
  readonly url: string;
60
66
  /** API Session token */
@@ -81,7 +87,7 @@ export declare class Api {
81
87
  * @param {number} slice ID of the slice to use
82
88
  * @returns {Slice<T extends SliceMeta>} Slice object to create query
83
89
  */
84
- slice<T extends SliceMeta>(slice: number): Slice<T>;
90
+ slice<T extends SliceMeta>(slice: number | string): Slice<T>;
85
91
  /**
86
92
  * Send a request and automatically log the output
87
93
  * @param {object | string} data request
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAuB,MAAM,MAAM,CAAC;AAC3D,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,SAAS,CAAC;AACzC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,iDAAiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,0BAA0B;AAC1B,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,qBAAa,GAAG;aA2B0B,OAAO,EAAE,UAAU;IA1B5D,8BAA8B;IAC9B,OAAO,CAAC,MAAM,CAAwD;IACtE,gCAAgC;IAChC,OAAO,CAAC,aAAa,CAAkB;IACvC,6CAA6C;IAC7C,OAAO,CAAC,eAAe,CAAoB;IAC3C,uBAAuB;IACvB,OAAO,CAAC,OAAO,CAA8B;IAE7C,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,OAAkB;IAC/B,oBAAoB;IACpB,QAAQ,CAAC,MAAM,EAAG,MAAM,CAAC;IACzB,mBAAmB;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,wBAAwB;IACxB,MAAM,iCAA4C;IAClD,IAAI,KAAK,IACQ,MAAM,GAAG,IAAI,CADgB;IAC9C,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAA8B;IAE5D;;;;OAIG;gBACS,GAAG,EAAE,MAAM,EAAkB,OAAO,GAAE,UAAe;IAyBjE,OAAO,CAAC,QAAQ;IAqBhB,OAAO,CAAC,MAAM,CAAC,eAAe;IAsB9B;;;;;OAKG;IACI,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC;IAmC/E;;;;OAIG;IACI,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,MAAM;IAI/C;;;;;OAKG;IACI,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC;CAU5E"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAuB,MAAM,MAAM,CAAC;AAC3D,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,SAAS,CAAC;AACzC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAEtC;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,iDAAiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,0BAA0B;AAC1B,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,qBAAa,GAAG;aA+B0B,OAAO,EAAE,UAAU;IA9B5D,8BAA8B;IAC9B,OAAO,CAAC,MAAM,CAAwD;IACtE,gCAAgC;IAChC,OAAO,CAAC,aAAa,CAAkB;IACvC,6CAA6C;IAC7C,OAAO,CAAC,eAAe,CAAoB;IAC3C,uBAAuB;IACvB,OAAO,CAAC,OAAO,CAA8B;IAE7C,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,OAAkB;IAC/B,mBAAmB;IACnB,QAAQ,CAAC,KAAK,QAAmB;IACjC,oBAAoB;IACpB,QAAQ,CAAC,MAAM,EAAG,MAAM,CAAC;IACzB,wBAAwB;IACxB,QAAQ,CAAC,SAAS,YAAuB;IACzC,mBAAmB;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,wBAAwB;IACxB,MAAM,iCAA4C;IAClD,IAAI,KAAK,IACQ,MAAM,GAAG,IAAI,CADgB;IAC9C,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAA8B;IAE5D;;;;OAIG;gBACS,GAAG,EAAE,MAAM,EAAkB,OAAO,GAAE,UAAe;IAyBjE,OAAO,CAAC,QAAQ;IAqBhB,OAAO,CAAC,MAAM,CAAC,eAAe;IAsB9B;;;;;OAKG;IACI,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC;IAmC/E;;;;OAIG;IACI,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIxD;;;;;OAKG;IACI,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC;CAU5E"}
package/dist/auth.d.ts CHANGED
@@ -22,11 +22,6 @@ export type User = {
22
22
  */
23
23
  export declare class Auth {
24
24
  private readonly api;
25
- /**
26
- * Check whether user has a token
27
- * @return {boolean}
28
- */
29
- get isAuthenticated(): boolean;
30
25
  user$: BehaviorSubject<User | null>;
31
26
  get user(): User | null;
32
27
  set user(user: User | null);
@@ -45,12 +40,30 @@ export declare class Auth {
45
40
  */
46
41
  handleLogin(spoke: string, options?: LoginPromptOptions): Promise<void>;
47
42
  /**
48
- * Create Login UI
49
- * @param {string} spoke Desired spoke
50
- * @param {LoginPromptOptions} options Aesthetic options
51
- * @return {Promise<void>} Login complete
43
+ * Check whether user has a token
44
+ * @return {boolean} True if session token authenticated
52
45
  */
53
- loginPrompt(spoke: string, options?: LoginPromptOptions): Promise<void>;
46
+ isAuthenticated(): boolean;
47
+ /**
48
+ * Check if the current user is a guest
49
+ * @return {boolean} True if guest
50
+ */
51
+ isGuest(): boolean;
52
+ /**
53
+ * Check if user is a system administrator
54
+ * @return {Promise<boolean>} True if system administrator
55
+ */
56
+ isSysAdmin(): Promise<boolean>;
57
+ /**
58
+ * Check if user is a table administrator
59
+ * @return {Promise<boolean>} True if table administrator
60
+ */
61
+ isTableAdmin(): Promise<boolean>;
62
+ /**
63
+ * Check if user is a user administrator
64
+ * @return {Promise<boolean>} True if user administrator
65
+ */
66
+ isUserAdmin(): Promise<boolean>;
54
67
  /**
55
68
  * Perform login and save the session token
56
69
  * @param {string} login Login username or email
@@ -60,6 +73,18 @@ export declare class Auth {
60
73
  * @returns {Promise<any>} Session information returned from login request
61
74
  */
62
75
  login(spoke: string, login: string, password: string, twoFactor?: string): Promise<any>;
76
+ /**
77
+ * Login as guest user
78
+ * @return {Promise<any>}
79
+ */
80
+ loginGuest(): Promise<any>;
81
+ /**
82
+ * Create Login UI
83
+ * @param {string} spoke Desired spoke
84
+ * @param {LoginPromptOptions} options Aesthetic options
85
+ * @return {Promise<void>} Login complete
86
+ */
87
+ loginPrompt(spoke: string, options?: LoginPromptOptions): Promise<void>;
63
88
  /**
64
89
  * Logout current user
65
90
  * @return {Promise<{closed: string, new: string}>}
@@ -68,5 +93,20 @@ export declare class Auth {
68
93
  closed: string;
69
94
  new: string;
70
95
  }>;
96
+ /**
97
+ * Reset user account password
98
+ * @param {string} login User login
99
+ * @param {string} newPassword New password
100
+ * @param {string} code Reset code sent with `resetRequest`
101
+ * @return {Promise<any>} New session
102
+ */
103
+ reset(login: string, newPassword: string, code?: string): Promise<any>;
104
+ /**
105
+ * Request reset code for user
106
+ * @param {string} login User to reset
107
+ * @param {"email" | "sms" | "voice"} mode Method of sending reset code
108
+ * @return {Promise<any>} Unknown
109
+ */
110
+ resetRequest(login: string, mode: 'email' | 'sms' | 'voice'): Promise<any>;
71
111
  }
72
112
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,MAAM,CAAC;AACrC,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAc,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE/D,WAAW;AACX,MAAM,MAAM,IAAI,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACd,CAAA;AAED;;GAEG;AACH,qBAAa,IAAI;IAYJ,OAAO,CAAC,QAAQ,CAAC,GAAG;IAVhC;;;OAGG;IACH,IAAI,eAAe,YAA0B;IAE7C,KAAK,+BAA0C;IAC/C,IAAI,IAAI,IACO,IAAI,GAAG,IAAI,CADkB;IAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAA4B;gBAEzB,GAAG,EAAE,GAAG;IAErC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAW/B;;;;;;OAMG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7E;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBvF;;;OAGG;IACH,MAAM;gBAC6B,MAAM;aAAO,MAAM;;CAMtD"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,MAAM,CAAC;AACrC,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAc,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE/D,WAAW;AACX,MAAM,MAAM,IAAI,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACd,CAAA;AAED;;GAEG;AACH,qBAAa,IAAI;IAMJ,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJhC,KAAK,+BAA0C;IAC/C,IAAI,IAAI,IACO,IAAI,GAAG,IAAI,CADkB;IAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAA4B;gBAEzB,GAAG,EAAE,GAAG;IAErC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAW/B;;;;;;OAMG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7E;;;OAGG;IACH,eAAe;IAEf;;;OAGG;IACH,OAAO;IAEP;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAOpC;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAOtC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAOrC;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBvF;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAS1B;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE;;;OAGG;IACH,MAAM;gBAC6B,MAAM;aAAO,MAAM;;IAOtD;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAWvD;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO;CAI3D"}
@@ -0,0 +1,50 @@
1
+ import { Api } from './api';
2
+
3
+ export interface UploadedFile {
4
+ id: number;
5
+ name: string;
6
+ size: number;
7
+ extension: string;
8
+ mime: string;
9
+ url?: string;
10
+ }
11
+ /**
12
+ * Handle uploading & fetching files from Datalynk
13
+ */
14
+ export declare class Files {
15
+ private readonly api;
16
+ readonly url: string;
17
+ constructor(api: Api);
18
+ /**
19
+ * Associate an existing file with an existing row
20
+ * @param {number | number[]} fileIds Existing files to associate
21
+ * @param {number} slice Target slice
22
+ * @param {number} rowId Target slice record
23
+ * @param {string} field Record filed file should be added to
24
+ * @param {true} chain Submit request automatically if falsy, returns as a chained command otherwise
25
+ * @return {any} Unknown
26
+ */
27
+ associate(fileIds: number | number[], slice: number, rowId: number, field: string, chain: true): {
28
+ [key: string]: any;
29
+ };
30
+ associate(fileIds: number | number[], slice: number, rowId: number, field: string): Promise<any>;
31
+ /**
32
+ * Get an authenticated URL to fetch files from
33
+ * @param {number} id File ID
34
+ * @param {boolean} ignoreToken Ignore authentication
35
+ * @return {string} URL file can be viewed at
36
+ */
37
+ get(id: number, ignoreToken?: boolean): string;
38
+ /**
39
+ * Upload file(s) to the API & optionally associate them with a row
40
+ * @param {FileList | File | File[]} files Files to be uploaded
41
+ * @param {{slice: number, row: any, field: string, pk?: string}} associate Row to associate with
42
+ */
43
+ upload(files: FileList | File | File[], associate?: {
44
+ slice: number;
45
+ row: number | any;
46
+ field: string;
47
+ pk?: string;
48
+ }): Promise<UploadedFile[]>;
49
+ }
50
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,KAAK;IAGL,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,QAAQ,CAAC,GAAG,EAAG,MAAM,CAAA;gBAEQ,GAAG,EAAE,GAAG;IAIrC;;;;;;;;OAQG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;IACrH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAOhG;;;;;OAKG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM;IAI9C;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,SAAS,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAyB5I"}
package/dist/index.cjs CHANGED
@@ -1427,13 +1427,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1427
1427
  __publicField(this, "user$", new BehaviorSubject(null));
1428
1428
  this.api = api;
1429
1429
  }
1430
- /**
1431
- * Check whether user has a token
1432
- * @return {boolean}
1433
- */
1434
- get isAuthenticated() {
1435
- return !!this.user;
1436
- }
1437
1430
  get user() {
1438
1431
  return this.user$.getValue();
1439
1432
  }
@@ -1466,19 +1459,51 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1466
1459
  if (urlToken) {
1467
1460
  this.api.token = urlToken;
1468
1461
  location.href = location.href.replace(/datalynkToken.*?(&|$)/gm, "");
1469
- } else if (!this.api.token) {
1462
+ } else if (this.api.token) {
1463
+ await this.current().catch(() => {
1464
+ this.api.token = null;
1465
+ location.reload();
1466
+ });
1467
+ } else {
1470
1468
  await this.loginPrompt(spoke, options);
1471
1469
  location.reload();
1472
1470
  }
1473
1471
  }
1474
1472
  /**
1475
- * Create Login UI
1476
- * @param {string} spoke Desired spoke
1477
- * @param {LoginPromptOptions} options Aesthetic options
1478
- * @return {Promise<void>} Login complete
1473
+ * Check whether user has a token
1474
+ * @return {boolean} True if session token authenticated
1479
1475
  */
1480
- loginPrompt(spoke, options) {
1481
- return new LoginPrompt(this.api, spoke, options).wait;
1476
+ isAuthenticated() {
1477
+ return !!this.user && !this.user.guest;
1478
+ }
1479
+ /**
1480
+ * Check if the current user is a guest
1481
+ * @return {boolean} True if guest
1482
+ */
1483
+ isGuest() {
1484
+ var _a;
1485
+ return !!((_a = this.user) == null ? void 0 : _a.guest);
1486
+ }
1487
+ /**
1488
+ * Check if user is a system administrator
1489
+ * @return {Promise<boolean>} True if system administrator
1490
+ */
1491
+ async isSysAdmin() {
1492
+ return !!(await this.api.slice("sysadmin").select().where("auth_ref", "==", "$viewer").exec().keys()).length;
1493
+ }
1494
+ /**
1495
+ * Check if user is a table administrator
1496
+ * @return {Promise<boolean>} True if table administrator
1497
+ */
1498
+ async isTableAdmin() {
1499
+ return !!(await this.api.slice("tableadmins").select().where("auth_ref", "==", "$viewer").exec().keys()).length;
1500
+ }
1501
+ /**
1502
+ * Check if user is a user administrator
1503
+ * @return {Promise<boolean>} True if user administrator
1504
+ */
1505
+ async isUserAdmin() {
1506
+ return !!(await this.api.slice("useradmins").select().where("auth_ref", "==", "$viewer").exec().keys()).length;
1482
1507
  }
1483
1508
  /**
1484
1509
  * Perform login and save the session token
@@ -1500,11 +1525,32 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1500
1525
  }))
1501
1526
  }).then(async (resp) => {
1502
1527
  const data = await resp.json().catch(() => ({}));
1503
- if (!resp.ok) throw Dt(resp.status, data.error);
1528
+ if (!resp.ok || data["error"]) throw Object.assign(Dt(resp.status, data.error) || {}, data);
1504
1529
  this.api.token = data["token"];
1505
1530
  return data;
1506
1531
  });
1507
1532
  }
1533
+ /**
1534
+ * Login as guest user
1535
+ * @return {Promise<any>}
1536
+ */
1537
+ loginGuest() {
1538
+ return fetch(`${this.api.url}guest`).then(async (resp) => {
1539
+ const data = await resp.json().catch(() => ({}));
1540
+ if (!resp.ok || data["error"]) throw Object.assign(Dt(resp.status, data.error) || {}, data);
1541
+ this.api.token = data["token"];
1542
+ return data;
1543
+ });
1544
+ }
1545
+ /**
1546
+ * Create Login UI
1547
+ * @param {string} spoke Desired spoke
1548
+ * @param {LoginPromptOptions} options Aesthetic options
1549
+ * @return {Promise<void>} Login complete
1550
+ */
1551
+ loginPrompt(spoke, options) {
1552
+ return new LoginPrompt(this.api, spoke, options).wait;
1553
+ }
1508
1554
  /**
1509
1555
  * Logout current user
1510
1556
  * @return {Promise<{closed: string, new: string}>}
@@ -1515,6 +1561,84 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1515
1561
  return resp;
1516
1562
  });
1517
1563
  }
1564
+ /**
1565
+ * Reset user account password
1566
+ * @param {string} login User login
1567
+ * @param {string} newPassword New password
1568
+ * @param {string} code Reset code sent with `resetRequest`
1569
+ * @return {Promise<any>} New session
1570
+ */
1571
+ reset(login, newPassword, code) {
1572
+ return this.api.request({ "$/auth/mobile/rescue": {
1573
+ user: login,
1574
+ password: newPassword,
1575
+ pin: code
1576
+ } }).then((resp) => {
1577
+ if (resp.token) this.api.token = resp.token;
1578
+ return resp;
1579
+ });
1580
+ }
1581
+ /**
1582
+ * Request reset code for user
1583
+ * @param {string} login User to reset
1584
+ * @param {"email" | "sms" | "voice"} mode Method of sending reset code
1585
+ * @return {Promise<any>} Unknown
1586
+ */
1587
+ resetRequest(login, mode) {
1588
+ if (mode == "email") return this.api.request({ "$/auth/rescue_email": { user: { $or: { login, email: login } } } });
1589
+ return this.api.request({ "$/auth/mobile/generate": { user: login, method: mode } });
1590
+ }
1591
+ }
1592
+ class Files {
1593
+ constructor(api) {
1594
+ __publicField(this, "url");
1595
+ this.api = api;
1596
+ this.url = `${this.api.url}file`;
1597
+ }
1598
+ associate(fileIds, slice, rowId, field, chain) {
1599
+ const req = { [`${chain ? "!" : "$"}/tools/file/update`]: { row: rowId, field, slice, ids: fileIds } };
1600
+ if (!chain) return this.api.request(req);
1601
+ return req;
1602
+ }
1603
+ /**
1604
+ * Get an authenticated URL to fetch files from
1605
+ * @param {number} id File ID
1606
+ * @param {boolean} ignoreToken Ignore authentication
1607
+ * @return {string} URL file can be viewed at
1608
+ */
1609
+ get(id, ignoreToken) {
1610
+ return `${this.url}?id=${id}${ignoreToken ? "" : `&token=${this.api.token}`}`;
1611
+ }
1612
+ /**
1613
+ * Upload file(s) to the API & optionally associate them with a row
1614
+ * @param {FileList | File | File[]} files Files to be uploaded
1615
+ * @param {{slice: number, row: any, field: string, pk?: string}} associate Row to associate with
1616
+ */
1617
+ upload(files, associate) {
1618
+ let f = [];
1619
+ if (files instanceof FileList) f = Array.from(files);
1620
+ else f = Array.isArray(files) ? files : [files];
1621
+ return Promise.all(f.map((file) => {
1622
+ const data = new FormData();
1623
+ data.append("", file, file.name);
1624
+ return fetch(this.url, {
1625
+ method: "POST",
1626
+ headers: rt({ "Authorization": this.api.token ? `Bearer ${this.api.token}` : "" }),
1627
+ body: data
1628
+ }).then(async (resp) => {
1629
+ const data2 = await resp.json().catch(() => ({}));
1630
+ if (!resp.ok || data2["error"]) throw Object.assign(Dt(resp.status, data2.error) || {}, data2);
1631
+ return resp;
1632
+ });
1633
+ })).then(async (files2) => {
1634
+ if (associate) {
1635
+ let id = typeof associate.row == "number" ? associate.row : associate.row[associate.pk || "id"];
1636
+ if (!id) id = await this.api.slice(associate.slice).insert(associate.row).exec().key();
1637
+ await this.associate(files2.map((f2) => f2.id), associate == null ? void 0 : associate.slice, associate == null ? void 0 : associate.row, associate == null ? void 0 : associate.field);
1638
+ }
1639
+ return files2;
1640
+ });
1641
+ }
1518
1642
  }
1519
1643
  const Serializer = {
1520
1644
  /**
@@ -2007,6 +2131,34 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
2007
2131
  };
2008
2132
  }
2009
2133
  }
2134
+ class Superuser {
2135
+ constructor(api) {
2136
+ this.api = api;
2137
+ }
2138
+ /**
2139
+ * Switch to another user by ID
2140
+ * @param {number} userId User ID
2141
+ * @return {Promise<any>} New session
2142
+ */
2143
+ assume(userId) {
2144
+ return this.api.request({ "$/report/users/become": { id: userId } }).then((resp) => {
2145
+ if (resp.token) this.api.token = resp.token;
2146
+ return resp;
2147
+ });
2148
+ }
2149
+ /**
2150
+ * Turn on the superuser flag, required to make any of the requests in the module
2151
+ * @param {string} username Superuser account
2152
+ * @param {string} password Superuser password
2153
+ * @return {Promise<any>} Unknown
2154
+ */
2155
+ on(username, password) {
2156
+ return this.api.request({ "$/superuser/validate": {
2157
+ name: username,
2158
+ password
2159
+ } });
2160
+ }
2161
+ }
2010
2162
  class Api {
2011
2163
  /**
2012
2164
  * Object to handle communications between the app and Datalynk
@@ -2025,8 +2177,12 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
2025
2177
  // Cache for ongoing requests
2026
2178
  /** Authentication helpers */
2027
2179
  __publicField(this, "auth", new Auth(this));
2180
+ /** File helpers */
2181
+ __publicField(this, "files", new Files(this));
2028
2182
  /** Socket object */
2029
2183
  __publicField(this, "socket");
2184
+ /** Superuser helpers */
2185
+ __publicField(this, "superuser", new Superuser(this));
2030
2186
  /** API endpoint */
2031
2187
  __publicField(this, "url");
2032
2188
  // API URL endpoint for requests
@@ -2154,10 +2310,12 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
2154
2310
  }
2155
2311
  exports2.Api = Api;
2156
2312
  exports2.Auth = Auth;
2313
+ exports2.Files = Files;
2157
2314
  exports2.LoginPrompt = LoginPrompt;
2158
2315
  exports2.Serializer = Serializer;
2159
2316
  exports2.Slice = Slice;
2160
2317
  exports2.SlicePromise = SlicePromise;
2161
2318
  exports2.Socket = Socket;
2319
+ exports2.Superuser = Superuser;
2162
2320
  Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
2163
2321
  });
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  export * from './api';
2
2
  export * from './auth';
3
+ export * from './files';
3
4
  export * from './login-prompt';
4
5
  export * from './serializer';
5
6
  export * from './slice';
6
7
  export * from './socket';
8
+ export * from './superuser';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
package/dist/index.mjs CHANGED
@@ -1423,13 +1423,6 @@ class Auth {
1423
1423
  __publicField(this, "user$", new BehaviorSubject(null));
1424
1424
  this.api = api;
1425
1425
  }
1426
- /**
1427
- * Check whether user has a token
1428
- * @return {boolean}
1429
- */
1430
- get isAuthenticated() {
1431
- return !!this.user;
1432
- }
1433
1426
  get user() {
1434
1427
  return this.user$.getValue();
1435
1428
  }
@@ -1462,19 +1455,51 @@ class Auth {
1462
1455
  if (urlToken) {
1463
1456
  this.api.token = urlToken;
1464
1457
  location.href = location.href.replace(/datalynkToken.*?(&|$)/gm, "");
1465
- } else if (!this.api.token) {
1458
+ } else if (this.api.token) {
1459
+ await this.current().catch(() => {
1460
+ this.api.token = null;
1461
+ location.reload();
1462
+ });
1463
+ } else {
1466
1464
  await this.loginPrompt(spoke, options);
1467
1465
  location.reload();
1468
1466
  }
1469
1467
  }
1470
1468
  /**
1471
- * Create Login UI
1472
- * @param {string} spoke Desired spoke
1473
- * @param {LoginPromptOptions} options Aesthetic options
1474
- * @return {Promise<void>} Login complete
1469
+ * Check whether user has a token
1470
+ * @return {boolean} True if session token authenticated
1475
1471
  */
1476
- loginPrompt(spoke, options) {
1477
- return new LoginPrompt(this.api, spoke, options).wait;
1472
+ isAuthenticated() {
1473
+ return !!this.user && !this.user.guest;
1474
+ }
1475
+ /**
1476
+ * Check if the current user is a guest
1477
+ * @return {boolean} True if guest
1478
+ */
1479
+ isGuest() {
1480
+ var _a;
1481
+ return !!((_a = this.user) == null ? void 0 : _a.guest);
1482
+ }
1483
+ /**
1484
+ * Check if user is a system administrator
1485
+ * @return {Promise<boolean>} True if system administrator
1486
+ */
1487
+ async isSysAdmin() {
1488
+ return !!(await this.api.slice("sysadmin").select().where("auth_ref", "==", "$viewer").exec().keys()).length;
1489
+ }
1490
+ /**
1491
+ * Check if user is a table administrator
1492
+ * @return {Promise<boolean>} True if table administrator
1493
+ */
1494
+ async isTableAdmin() {
1495
+ return !!(await this.api.slice("tableadmins").select().where("auth_ref", "==", "$viewer").exec().keys()).length;
1496
+ }
1497
+ /**
1498
+ * Check if user is a user administrator
1499
+ * @return {Promise<boolean>} True if user administrator
1500
+ */
1501
+ async isUserAdmin() {
1502
+ return !!(await this.api.slice("useradmins").select().where("auth_ref", "==", "$viewer").exec().keys()).length;
1478
1503
  }
1479
1504
  /**
1480
1505
  * Perform login and save the session token
@@ -1496,11 +1521,32 @@ class Auth {
1496
1521
  }))
1497
1522
  }).then(async (resp) => {
1498
1523
  const data = await resp.json().catch(() => ({}));
1499
- if (!resp.ok) throw Dt(resp.status, data.error);
1524
+ if (!resp.ok || data["error"]) throw Object.assign(Dt(resp.status, data.error) || {}, data);
1500
1525
  this.api.token = data["token"];
1501
1526
  return data;
1502
1527
  });
1503
1528
  }
1529
+ /**
1530
+ * Login as guest user
1531
+ * @return {Promise<any>}
1532
+ */
1533
+ loginGuest() {
1534
+ return fetch(`${this.api.url}guest`).then(async (resp) => {
1535
+ const data = await resp.json().catch(() => ({}));
1536
+ if (!resp.ok || data["error"]) throw Object.assign(Dt(resp.status, data.error) || {}, data);
1537
+ this.api.token = data["token"];
1538
+ return data;
1539
+ });
1540
+ }
1541
+ /**
1542
+ * Create Login UI
1543
+ * @param {string} spoke Desired spoke
1544
+ * @param {LoginPromptOptions} options Aesthetic options
1545
+ * @return {Promise<void>} Login complete
1546
+ */
1547
+ loginPrompt(spoke, options) {
1548
+ return new LoginPrompt(this.api, spoke, options).wait;
1549
+ }
1504
1550
  /**
1505
1551
  * Logout current user
1506
1552
  * @return {Promise<{closed: string, new: string}>}
@@ -1511,6 +1557,84 @@ class Auth {
1511
1557
  return resp;
1512
1558
  });
1513
1559
  }
1560
+ /**
1561
+ * Reset user account password
1562
+ * @param {string} login User login
1563
+ * @param {string} newPassword New password
1564
+ * @param {string} code Reset code sent with `resetRequest`
1565
+ * @return {Promise<any>} New session
1566
+ */
1567
+ reset(login, newPassword, code) {
1568
+ return this.api.request({ "$/auth/mobile/rescue": {
1569
+ user: login,
1570
+ password: newPassword,
1571
+ pin: code
1572
+ } }).then((resp) => {
1573
+ if (resp.token) this.api.token = resp.token;
1574
+ return resp;
1575
+ });
1576
+ }
1577
+ /**
1578
+ * Request reset code for user
1579
+ * @param {string} login User to reset
1580
+ * @param {"email" | "sms" | "voice"} mode Method of sending reset code
1581
+ * @return {Promise<any>} Unknown
1582
+ */
1583
+ resetRequest(login, mode) {
1584
+ if (mode == "email") return this.api.request({ "$/auth/rescue_email": { user: { $or: { login, email: login } } } });
1585
+ return this.api.request({ "$/auth/mobile/generate": { user: login, method: mode } });
1586
+ }
1587
+ }
1588
+ class Files {
1589
+ constructor(api) {
1590
+ __publicField(this, "url");
1591
+ this.api = api;
1592
+ this.url = `${this.api.url}file`;
1593
+ }
1594
+ associate(fileIds, slice, rowId, field, chain) {
1595
+ const req = { [`${chain ? "!" : "$"}/tools/file/update`]: { row: rowId, field, slice, ids: fileIds } };
1596
+ if (!chain) return this.api.request(req);
1597
+ return req;
1598
+ }
1599
+ /**
1600
+ * Get an authenticated URL to fetch files from
1601
+ * @param {number} id File ID
1602
+ * @param {boolean} ignoreToken Ignore authentication
1603
+ * @return {string} URL file can be viewed at
1604
+ */
1605
+ get(id, ignoreToken) {
1606
+ return `${this.url}?id=${id}${ignoreToken ? "" : `&token=${this.api.token}`}`;
1607
+ }
1608
+ /**
1609
+ * Upload file(s) to the API & optionally associate them with a row
1610
+ * @param {FileList | File | File[]} files Files to be uploaded
1611
+ * @param {{slice: number, row: any, field: string, pk?: string}} associate Row to associate with
1612
+ */
1613
+ upload(files, associate) {
1614
+ let f = [];
1615
+ if (files instanceof FileList) f = Array.from(files);
1616
+ else f = Array.isArray(files) ? files : [files];
1617
+ return Promise.all(f.map((file) => {
1618
+ const data = new FormData();
1619
+ data.append("", file, file.name);
1620
+ return fetch(this.url, {
1621
+ method: "POST",
1622
+ headers: rt({ "Authorization": this.api.token ? `Bearer ${this.api.token}` : "" }),
1623
+ body: data
1624
+ }).then(async (resp) => {
1625
+ const data2 = await resp.json().catch(() => ({}));
1626
+ if (!resp.ok || data2["error"]) throw Object.assign(Dt(resp.status, data2.error) || {}, data2);
1627
+ return resp;
1628
+ });
1629
+ })).then(async (files2) => {
1630
+ if (associate) {
1631
+ let id = typeof associate.row == "number" ? associate.row : associate.row[associate.pk || "id"];
1632
+ if (!id) id = await this.api.slice(associate.slice).insert(associate.row).exec().key();
1633
+ await this.associate(files2.map((f2) => f2.id), associate == null ? void 0 : associate.slice, associate == null ? void 0 : associate.row, associate == null ? void 0 : associate.field);
1634
+ }
1635
+ return files2;
1636
+ });
1637
+ }
1514
1638
  }
1515
1639
  const Serializer = {
1516
1640
  /**
@@ -2003,6 +2127,34 @@ class Socket {
2003
2127
  };
2004
2128
  }
2005
2129
  }
2130
+ class Superuser {
2131
+ constructor(api) {
2132
+ this.api = api;
2133
+ }
2134
+ /**
2135
+ * Switch to another user by ID
2136
+ * @param {number} userId User ID
2137
+ * @return {Promise<any>} New session
2138
+ */
2139
+ assume(userId) {
2140
+ return this.api.request({ "$/report/users/become": { id: userId } }).then((resp) => {
2141
+ if (resp.token) this.api.token = resp.token;
2142
+ return resp;
2143
+ });
2144
+ }
2145
+ /**
2146
+ * Turn on the superuser flag, required to make any of the requests in the module
2147
+ * @param {string} username Superuser account
2148
+ * @param {string} password Superuser password
2149
+ * @return {Promise<any>} Unknown
2150
+ */
2151
+ on(username, password) {
2152
+ return this.api.request({ "$/superuser/validate": {
2153
+ name: username,
2154
+ password
2155
+ } });
2156
+ }
2157
+ }
2006
2158
  class Api {
2007
2159
  /**
2008
2160
  * Object to handle communications between the app and Datalynk
@@ -2021,8 +2173,12 @@ class Api {
2021
2173
  // Cache for ongoing requests
2022
2174
  /** Authentication helpers */
2023
2175
  __publicField(this, "auth", new Auth(this));
2176
+ /** File helpers */
2177
+ __publicField(this, "files", new Files(this));
2024
2178
  /** Socket object */
2025
2179
  __publicField(this, "socket");
2180
+ /** Superuser helpers */
2181
+ __publicField(this, "superuser", new Superuser(this));
2026
2182
  /** API endpoint */
2027
2183
  __publicField(this, "url");
2028
2184
  // API URL endpoint for requests
@@ -2151,9 +2307,11 @@ class Api {
2151
2307
  export {
2152
2308
  Api,
2153
2309
  Auth,
2310
+ Files,
2154
2311
  LoginPrompt,
2155
2312
  Serializer,
2156
2313
  Slice,
2157
2314
  SlicePromise,
2158
- Socket
2315
+ Socket,
2316
+ Superuser
2159
2317
  };
package/dist/slice.d.ts CHANGED
@@ -96,7 +96,7 @@ export declare class Slice<T extends SliceMeta> {
96
96
  * @param {number} slice Slice ID to interact with
97
97
  * @param {Api} api Api to send the requests through
98
98
  */
99
- constructor(slice: number, api: Api);
99
+ constructor(slice: number | string, api: Api);
100
100
  /**
101
101
  * Whitelist and alias fields. Alias for the fields functions
102
102
  * @param {object} aliasKeyVals List of properties to whitelist and what to rename them to
@@ -1 +1 @@
1
- {"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../src/slice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,MAAM,CAAC;AACrC,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAmB,WAAW,EAAC,MAAM,UAAU,CAAC;AAEvD,MAAM,WAAW,SAAS;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,SAAS;aAOhB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;aAAkB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAL/F;;;;OAIG;gBACyB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAkB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAE/F;;OAEG;IACH,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;IAKxB;;OAEG;IACG,MAAM;IAKZ;;OAEG;IACG,OAAO;IAKb;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK/B;;OAEG;IACG,OAAO;IAKb;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IAIvB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAK1B;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAItC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;CAIpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,SAAS;IACjD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,SAAS;IAqBzB,OAAO,CAAC,KAAK;IAAU,OAAO,CAAC,GAAG;IApB9C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAoD;IACpE,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,OAAO,CAAW;IAE1B,4DAA4D;IAC5D,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAEjC,yCAAyC;IACzC,OAAO,CAAC,MAAM,CAAgC;IAC9C,wBAAwB;IACxB,OAAO,KAAK,KAAK,GAA0C;IAC3D,0CAA0C;IAC1C,OAAO,KAAK,KAAK,QAAyC;IAE1D;;;;OAIG;gBACiB,KAAK,EAAE,MAAM,EAAU,GAAG,EAAE,GAAG;IAEnD;;;OAGG;IACH,KAAK,CAAC,YAAY,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IAIjE;;OAEG;IACH,KAAK;IAKL;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IASxC;;;OAGG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IAKlC;;;OAGG;IACH,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC;IAKvB;;;OAGG;IACH,MAAM,CAAC,YAAY,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IAKlE;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM;IAMxE;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IAQ/B;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM;IAIjB;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,KAAK,CAAC,CAAC,CAAC;IAMhD;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IASxC;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAO;IAoBd;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;IAQpB;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;CAgC5D"}
1
+ {"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../src/slice.ts"],"names":[],"mappings":"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"}
package/dist/socket.d.ts CHANGED
@@ -51,6 +51,6 @@ export declare class Socket {
51
51
  * @param {SocketListener<SocketEventSlice>} callback Function to run on changes
52
52
  * @return {Unsubscribe} Run returned function to unsubscribe callback
53
53
  */
54
- sliceEvents(slice: number | number[], callback: SocketListener<SocketEventSlice>): Unsubscribe;
54
+ sliceEvents(slice: number | number[] | string | string[], callback: SocketListener<SocketEventSlice>): Unsubscribe;
55
55
  }
56
56
  //# sourceMappingURL=socket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,CAAA;CACP,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC;AACrE,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,qBAAa,MAAM;IAON,OAAO,CAAC,QAAQ,CAAC,GAAG;aAAuB,OAAO,EAAE,aAAa;IAN7E,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAa;IAE3B,IAAI,IAAI,YAA0C;gBAErB,GAAG,EAAE,GAAG,EAAkB,OAAO,GAAE,aAAkB;IAUlF;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW;IAK5C;;OAEG;IACH,KAAK;IAKL;;;OAGG;IACH,OAAO,CAAC,OAAO,SAAQ;IA8BvB;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,GAAG;IAIjB;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,WAAW;CAe9F"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,CAAA;CACP,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC;AACrE,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,qBAAa,MAAM;IAON,OAAO,CAAC,QAAQ,CAAC,GAAG;aAAuB,OAAO,EAAE,aAAa;IAN7E,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAa;IAE3B,IAAI,IAAI,YAA0C;gBAErB,GAAG,EAAE,GAAG,EAAkB,OAAO,GAAE,aAAkB;IAUlF;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW;IAK5C;;OAEG;IACH,KAAK;IAKL;;;OAGG;IACH,OAAO,CAAC,OAAO,SAAQ;IA8BvB;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,GAAG;IAIjB;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,WAAW;CAelH"}
@@ -0,0 +1,23 @@
1
+ import { Api } from './api';
2
+
3
+ /**
4
+ * Superuser helpers
5
+ */
6
+ export declare class Superuser {
7
+ private readonly api;
8
+ constructor(api: Api);
9
+ /**
10
+ * Switch to another user by ID
11
+ * @param {number} userId User ID
12
+ * @return {Promise<any>} New session
13
+ */
14
+ assume(userId: number): Promise<any>;
15
+ /**
16
+ * Turn on the superuser flag, required to make any of the requests in the module
17
+ * @param {string} username Superuser account
18
+ * @param {string} password Superuser password
19
+ * @return {Promise<any>} Unknown
20
+ */
21
+ on(username: string, password: string): Promise<any>;
22
+ }
23
+ //# sourceMappingURL=superuser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superuser.d.ts","sourceRoot":"","sources":["../src/superuser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,qBAAa,SAAS;IAET,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,GAAG;IAErC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM;IAOrB;;;;;OAKG;IACH,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAMrC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@auxilium/datalynk-client",
3
3
  "description": "Datalynk client library",
4
4
  "repository": "https://gitlab.auxiliumgroup.com/ztimson/datalynk-client",
5
- "version": "0.4.8",
5
+ "version": "0.5.1",
6
6
  "author": "Zak Timson",
7
7
  "private": false,
8
8
  "main": "./dist/index.cjs",