@auxilium/datalynk-client 1.3.3 → 1.3.5
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/README.md +106 -49
- package/dist/api.d.ts +17 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/index.cjs +3990 -0
- package/dist/index.mjs +127 -17
- package/dist/pwa.d.ts +1 -0
- package/dist/pwa.d.ts.map +1 -1
- package/dist/service.worker.d.mts +2 -0
- package/dist/service.worker.d.mts.map +1 -0
- package/dist/slice.d.ts +1 -0
- package/dist/slice.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/index.js +0 -3876
- package/dist/service.worker.d.ts +0 -3
- package/dist/service.worker.d.ts.map +0 -1
- package/dist/service.worker.js +0 -26
- package/dist/service.worker.mjs +0 -25
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Datalynk Client Library
|
|
2
2
|
|
|
3
|
-
[](https://gitlab.auxiliumgroup.com/
|
|
3
|
+
[](https://gitlab.auxiliumgroup.com/auxilium/datalynk/datalynk-client/-/commits/master)
|
|
4
|
+
[](https://gitlab.auxiliumgroup.com/auxilium/datalynk/datalynk-client/-/releases)
|
|
4
5
|
|
|
5
6
|
---
|
|
6
7
|
|
|
@@ -8,18 +9,22 @@ Datalynk client library to integrate JavaScript clients with the Datalynk API.
|
|
|
8
9
|
|
|
9
10
|
## Table of Contents
|
|
10
11
|
- [Datalynk Client Library](#datalynk-client-library)
|
|
11
|
-
- [Table of Contents](#
|
|
12
|
+
- [Table of Contents](#table-of-contents)
|
|
12
13
|
- [Quick Start](#quick-start)
|
|
13
|
-
- [Documentation](
|
|
14
|
-
|
|
14
|
+
- [API Documentation](https://datalynk-client.scarborough.auxilium.world)
|
|
15
|
+
- [Cheatsheet](#cheatsheet)
|
|
15
16
|
- [Integration](#integration)
|
|
16
|
-
- [Angular](#
|
|
17
|
-
- [Node / Vue](#
|
|
18
|
-
- [
|
|
17
|
+
- [Angular](#angular)
|
|
18
|
+
- [Node / Vue](#node--vue)
|
|
19
|
+
- [Vanilla JS](#vanilla-js)
|
|
19
20
|
- [Build Models](#build-models)
|
|
21
|
+
- [Api Requests](#api-requests)
|
|
20
22
|
- [Authentication](#authentication)
|
|
21
|
-
- [
|
|
23
|
+
- [Offline / PWA](#)
|
|
24
|
+
- [Slice Engine](#slices)
|
|
22
25
|
- [Sockets](#sockets)
|
|
26
|
+
- [Uploads](#uploads)
|
|
27
|
+
- [WebRTC](#webrtc)
|
|
23
28
|
|
|
24
29
|
## Quick Start
|
|
25
30
|
1. Install the client library
|
|
@@ -44,9 +49,9 @@ const api = new API('https://spoke.auxiliumgroup.com');
|
|
|
44
49
|
const resp = await api.request({'$/auth/current':{}});
|
|
45
50
|
```
|
|
46
51
|
|
|
47
|
-
## Documentation
|
|
52
|
+
## [API Documentation](https://datalynk-client.scarborough.auxilium.world)
|
|
48
53
|
|
|
49
|
-
|
|
54
|
+
## Cheatsheet
|
|
50
55
|
|
|
51
56
|
<details>
|
|
52
57
|
<summary>
|
|
@@ -110,7 +115,7 @@ api.auth.handleLogin('spoke', {/* login UI options */});
|
|
|
110
115
|
export const contacts = api.slice<Contact>(Slices.Contact);
|
|
111
116
|
```
|
|
112
117
|
|
|
113
|
-
####
|
|
118
|
+
#### Vanilla JS
|
|
114
119
|
|
|
115
120
|
**File:** `/index.html`
|
|
116
121
|
|
|
@@ -127,7 +132,6 @@ export const contacts = api.slice<Contact>(Slices.Contact);
|
|
|
127
132
|
// Create store to cache slice data
|
|
128
133
|
var contacts = api.slice(12345);
|
|
129
134
|
</script>
|
|
130
|
-
|
|
131
135
|
```
|
|
132
136
|
|
|
133
137
|
</details>
|
|
@@ -164,49 +168,90 @@ const contacts: Contact[] = await api.slice<Contact>(Slices.Contact)
|
|
|
164
168
|
|
|
165
169
|
<details>
|
|
166
170
|
<summary>
|
|
167
|
-
<h3 id="
|
|
171
|
+
<h3 id="api-requests" style="display: inline">Api Requests</h3>
|
|
168
172
|
</summary>
|
|
169
173
|
|
|
170
|
-
####
|
|
174
|
+
#### Api Request
|
|
171
175
|
|
|
172
|
-
|
|
176
|
+
Raw requests can be made using request
|
|
173
177
|
|
|
174
178
|
```js
|
|
175
|
-
const
|
|
176
|
-
|
|
179
|
+
const response = await api.request({...});
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
#### Chain Map
|
|
183
|
+
|
|
184
|
+
Multiple results can be returned together as dictionary
|
|
185
|
+
|
|
186
|
+
```js
|
|
187
|
+
const {user, report} = await api.chainMap({
|
|
188
|
+
user: {'$/auth/current': {}},
|
|
189
|
+
report: api.slice(52131).select().rows()
|
|
190
|
+
});
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
#### Chain Requests
|
|
194
|
+
|
|
195
|
+
Multiple requests can be chained together to run them in order. The last request's response will be returned
|
|
196
|
+
|
|
197
|
+
```js
|
|
198
|
+
const report = await api.chain({'$/auth/current': {}}, api.slice(12345).select().rows());
|
|
177
199
|
```
|
|
200
|
+
</details>
|
|
178
201
|
|
|
179
|
-
|
|
202
|
+
<details>
|
|
203
|
+
<summary>
|
|
204
|
+
<h3 id="authentication" style="display: inline">Authentication</h3>
|
|
205
|
+
</summary>
|
|
180
206
|
|
|
181
|
-
|
|
207
|
+
#### Default Flow
|
|
208
|
+
|
|
209
|
+
99% of the time you will want to let the library handle the login flow:
|
|
182
210
|
|
|
183
211
|
1. It will check the URL for a token param: `?datalynkToken=...`
|
|
184
212
|
2. It will check the localStorage for a saved token
|
|
185
213
|
3. It will prompt the user to login via UI
|
|
186
|
-
4.
|
|
214
|
+
4. Lastly it will, reload page if the token changed
|
|
187
215
|
|
|
188
216
|
```js
|
|
189
|
-
await api.auth.handleLogin('spoke', {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
217
|
+
await api.auth.handleLogin('spoke', {/* Login UI Options */});
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
#### Fetch User
|
|
221
|
+
|
|
222
|
+
```js
|
|
223
|
+
api.auth.user
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
#### Guest Login
|
|
227
|
+
|
|
228
|
+
Login as the guest account:
|
|
229
|
+
|
|
230
|
+
```js
|
|
231
|
+
const guest = await api.auth.loginGuest();
|
|
232
|
+
console.log(api.auth.isGuest()) // True
|
|
195
233
|
```
|
|
196
234
|
|
|
197
235
|
#### Login UI
|
|
198
236
|
|
|
199
|
-
|
|
237
|
+
Prompt the user to login with the login page, defaults come from the clients [theme.json](https://sintmaarten.auxiliumgroup.com/static/js/auxilium/dijits/templates/login/sandbox/theme.json) file:
|
|
200
238
|
|
|
201
239
|
```js
|
|
202
|
-
const prompt = api.auth.loginPrompt('spoke',
|
|
240
|
+
const prompt = api.auth.loginPrompt('spoke', {
|
|
241
|
+
// Overrides theme.json
|
|
242
|
+
title: "Title of App",
|
|
243
|
+
logoPosition: "aboveTitle",
|
|
244
|
+
subtitle: "Subtitle of App",
|
|
245
|
+
});
|
|
203
246
|
await prompt.wait; // Wait for the user to login/close the prompt
|
|
204
247
|
prompt.close(); // Close prompt manually
|
|
205
248
|
```
|
|
206
249
|
|
|
207
|
-
|
|
250
|
+
[Full list of options](https://datalynk-client.scarborough.auxilium.world/types/login-prompt.LoginPromptOptions.html)
|
|
208
251
|
|
|
209
|
-
|
|
252
|
+
#### Manual Login
|
|
253
|
+
|
|
254
|
+
Login programmatically:
|
|
210
255
|
|
|
211
256
|
```js
|
|
212
257
|
const user = await api.auth.login('spoke', 'username', 'password', '2faCode');
|
|
@@ -216,24 +261,35 @@ const user = await api.auth.login('spoke', 'username', 'password', '2faCode');
|
|
|
216
261
|
|
|
217
262
|
<details>
|
|
218
263
|
<summary>
|
|
219
|
-
<h3 id="
|
|
264
|
+
<h3 id="pwa" style="display: inline">Offline / PWA</h3>
|
|
220
265
|
</summary>
|
|
221
266
|
|
|
222
|
-
|
|
267
|
+
Webpages can be made availible offline using Progressive Web Apps + Service Workers.
|
|
223
268
|
|
|
224
|
-
|
|
225
|
-
const report = await api.chain({'$/auth/current': {}}, api.slice(12345).select().rows());
|
|
226
|
-
```
|
|
269
|
+
You must fetch user information from `api.auth.user` & use the slice engine to fetch data `api.slice(...)`; custom `api.requests({...})` calls wont work.
|
|
227
270
|
|
|
228
|
-
|
|
271
|
+
#### Setup
|
|
229
272
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
273
|
+
1. Upload the [service worker](https://datalynk-client.scarborough.auxilium.world/dist/service.worker.mjs) `dist/service.worker.mjs` to the *root* directory of the server
|
|
274
|
+
|
|
275
|
+
2. Configure the API:
|
|
276
|
+
```ts
|
|
277
|
+
const api = new Api(`https://${spoke}.auxiliumgroup.com`, {
|
|
278
|
+
name: "Workplace Occupational Health & Safety Inspection", // REQUIRED: App name
|
|
279
|
+
offline: [51306, 51531, 51563], // REQUIRED: Specify slices that must be stored offline
|
|
280
|
+
manifest: { scope: 'https://lynk-forms.scarborough.auxilium.world/OshawaCL/ohsinspection.html' }, // Any manifest overrides suck as PWA "scope"
|
|
281
|
+
pwaSettings: { // PWA install prompt settings
|
|
282
|
+
timeout: 45, // seconds before prompt shows (default: 30)
|
|
283
|
+
dismissExpiry: 3, // days before prompt shows again (0 = every refresh, default: 7)
|
|
284
|
+
loginLink: true // Show install link in login screen
|
|
285
|
+
},
|
|
286
|
+
serviceWorker: 'https://.../service.worker.mjs', // Override service worker URL, must be on same domain (Step 1)
|
|
287
|
+
socket: true // Make sure sockets are enabled
|
|
234
288
|
});
|
|
235
|
-
```
|
|
236
289
|
|
|
290
|
+
// Manually trigger prompt
|
|
291
|
+
api.pwa.prompt();
|
|
292
|
+
```
|
|
237
293
|
</details>
|
|
238
294
|
|
|
239
295
|
<details>
|
|
@@ -241,7 +297,7 @@ const {user, report} = await api.chainMap({
|
|
|
241
297
|
<h3 id="slices" style="display: inline">Slice Engine</h3>
|
|
242
298
|
</summary>
|
|
243
299
|
|
|
244
|
-
This library comes with LINQ style query language to help make interacting with
|
|
300
|
+
This library comes with LINQ style query language to help make interacting with slices easier by providing types & intellisense.
|
|
245
301
|
|
|
246
302
|
#### Select
|
|
247
303
|
|
|
@@ -331,14 +387,12 @@ await api.slice(12345)
|
|
|
331
387
|
<h3 id="sockets" style="display: inline">Sockets</h3>
|
|
332
388
|
</summary>
|
|
333
389
|
|
|
334
|
-
|
|
335
|
-
#### Options
|
|
336
|
-
|
|
337
|
-
The socket can have it's endpoint override or be turned off by setting it to false:
|
|
390
|
+
Sockets (enabled by default) can be turned off or configured to point to a custom URL
|
|
338
391
|
```ts
|
|
339
392
|
const api = new Api('https://spoke.auxiliumgroup.com', {
|
|
340
|
-
socket:
|
|
341
|
-
// socket:
|
|
393
|
+
socket: true, // Enable - Use default URL
|
|
394
|
+
// socket: false, // Disable
|
|
395
|
+
// socket: 'http://localhost:3000', // Enable - Custom socket server URL
|
|
342
396
|
});
|
|
343
397
|
```
|
|
344
398
|
|
|
@@ -378,11 +432,14 @@ api.socket.addListener(callbackFn(event)); // listen to all socket events
|
|
|
378
432
|
<h3 id="uploads" style="display: inline">Uploads</h3>
|
|
379
433
|
</summary>
|
|
380
434
|
|
|
381
|
-
|
|
435
|
+
#### Fetch File
|
|
436
|
+
|
|
382
437
|
```js
|
|
383
438
|
const url = api.files.get(12345);
|
|
384
439
|
```
|
|
385
440
|
|
|
441
|
+
#### Upload File
|
|
442
|
+
|
|
386
443
|
Uploading files to datalynk is done by first uploading the file as form-data & then creating a reference to the upload ID in a slice.
|
|
387
444
|
|
|
388
445
|
```js
|
package/dist/api.d.ts
CHANGED
|
@@ -35,6 +35,8 @@ export type ApiOptions = {
|
|
|
35
35
|
name?: string;
|
|
36
36
|
/** List of slices to use offline */
|
|
37
37
|
offline?: number[];
|
|
38
|
+
/** Display an offline banner */
|
|
39
|
+
offlineBanner?: boolean | 'top' | 'bottom';
|
|
38
40
|
/** Website hostname */
|
|
39
41
|
origin?: string;
|
|
40
42
|
/** Save session token to localStorage to persist logins */
|
|
@@ -97,6 +99,8 @@ export declare class Api {
|
|
|
97
99
|
private bundle;
|
|
98
100
|
/** Bundle lifecycle tracking */
|
|
99
101
|
private bundleOngoing;
|
|
102
|
+
/** Track online state */
|
|
103
|
+
private heartbeat;
|
|
100
104
|
/** LocalStorage key for persisting logins */
|
|
101
105
|
private localStorageKey;
|
|
102
106
|
/** Pending requests cache */
|
|
@@ -126,10 +130,17 @@ export declare class Api {
|
|
|
126
130
|
url: string;
|
|
127
131
|
/** Client library version */
|
|
128
132
|
version: string;
|
|
129
|
-
/** Get session info from JWT payload */
|
|
130
|
-
get jwtPayload(): JwtPayload | null;
|
|
131
133
|
/** Is token expired */
|
|
132
134
|
get expired(): boolean;
|
|
135
|
+
/** Get session info from JWT payload */
|
|
136
|
+
get jwtPayload(): JwtPayload | null;
|
|
137
|
+
private onlineOverride;
|
|
138
|
+
private _online;
|
|
139
|
+
/** Check if we are connected */
|
|
140
|
+
get online(): boolean | null;
|
|
141
|
+
get offline(): boolean;
|
|
142
|
+
/** Override connection status */
|
|
143
|
+
set online(value: boolean | null);
|
|
133
144
|
/** Logged in spoke */
|
|
134
145
|
get spoke(): string;
|
|
135
146
|
/** API Session token */
|
|
@@ -149,6 +160,10 @@ export declare class Api {
|
|
|
149
160
|
*/
|
|
150
161
|
constructor(origin: string, options?: ApiOptions);
|
|
151
162
|
private _request;
|
|
163
|
+
private checkConnection;
|
|
164
|
+
private offlineBanner;
|
|
165
|
+
private startHeartbeat;
|
|
166
|
+
private stopHeartbeat;
|
|
152
167
|
/**
|
|
153
168
|
* Get list of slices
|
|
154
169
|
* @return {Promise<number[]>}
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoD,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAC,eAAe,EAAuB,MAAM,MAAM,CAAC;AAC3D,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,SAAS,CAAC;AACvC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAEhC,MAAM,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACZ,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,6BAA6B;IAC7B,MAAM,CAAC,EAAE;QACR,6BAA6B;QAC7B,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;QACrB,oDAAoD;QACpD,GAAG,EAAE,MAAM,CAAC;QACZ,2BAA2B;QAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,2BAA2B;QAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAA;IACD,mCAAmC;IACnC,WAAW,CAAC,EAAE;QACb,sFAAsF;QACtF,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iHAAiH;QACjH,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,8DAA8D;QAC9D,SAAS,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACF,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,8BAA8B;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,yBAAyB;AACzB,MAAM,WAAW,QAAQ;IACxB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,OAAO,EAAE,GAAG,CAAC;IACb,kCAAkC;IAClC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,kBAAkB;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,qBAAa,GAAG;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|