@auxilium/datalynk-client 1.1.9 → 1.2.0
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 +3 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +194 -22
- package/dist/index.mjs +194 -22
- package/dist/pwa.d.ts +14 -0
- package/dist/pwa.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/api.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Database } from '@ztimson/utils';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
3
|
import { Auth } from './auth';
|
|
4
|
+
import { PWA } from './pwa';
|
|
4
5
|
import { Files } from './files';
|
|
5
6
|
import { Meta } from './meta';
|
|
6
7
|
import { Pdf } from './pdf';
|
|
@@ -98,6 +99,8 @@ export declare class Api {
|
|
|
98
99
|
readonly files: Files;
|
|
99
100
|
/** PDF */
|
|
100
101
|
readonly pdf: Pdf;
|
|
102
|
+
/** PWA setup & prompt */
|
|
103
|
+
readonly pwa: PWA;
|
|
101
104
|
/** Socket */
|
|
102
105
|
readonly socket: Socket;
|
|
103
106
|
/** Superuser */
|
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,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;CACD,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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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -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,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,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,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1166,20 +1166,20 @@ var Subscription = function() {
|
|
|
1166
1166
|
}
|
|
1167
1167
|
}
|
|
1168
1168
|
};
|
|
1169
|
-
Subscription2.prototype._hasParent = function(
|
|
1169
|
+
Subscription2.prototype._hasParent = function(parent2) {
|
|
1170
1170
|
var _parentage = this._parentage;
|
|
1171
|
-
return _parentage ===
|
|
1171
|
+
return _parentage === parent2 || Array.isArray(_parentage) && _parentage.includes(parent2);
|
|
1172
1172
|
};
|
|
1173
|
-
Subscription2.prototype._addParent = function(
|
|
1173
|
+
Subscription2.prototype._addParent = function(parent2) {
|
|
1174
1174
|
var _parentage = this._parentage;
|
|
1175
|
-
this._parentage = Array.isArray(_parentage) ? (_parentage.push(
|
|
1175
|
+
this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent2), _parentage) : _parentage ? [_parentage, parent2] : parent2;
|
|
1176
1176
|
};
|
|
1177
|
-
Subscription2.prototype._removeParent = function(
|
|
1177
|
+
Subscription2.prototype._removeParent = function(parent2) {
|
|
1178
1178
|
var _parentage = this._parentage;
|
|
1179
|
-
if (_parentage ===
|
|
1179
|
+
if (_parentage === parent2) {
|
|
1180
1180
|
this._parentage = null;
|
|
1181
1181
|
} else if (Array.isArray(_parentage)) {
|
|
1182
|
-
arrRemove(_parentage,
|
|
1182
|
+
arrRemove(_parentage, parent2);
|
|
1183
1183
|
}
|
|
1184
1184
|
};
|
|
1185
1185
|
Subscription2.prototype.remove = function(teardown) {
|
|
@@ -2321,6 +2321,183 @@ class Auth {
|
|
|
2321
2321
|
return this.api.request({ "$/auth/mobile/generate": { user: login, method: mode } });
|
|
2322
2322
|
}
|
|
2323
2323
|
}
|
|
2324
|
+
class PWA {
|
|
2325
|
+
constructor(api) {
|
|
2326
|
+
this.api = api;
|
|
2327
|
+
}
|
|
2328
|
+
get iframe() {
|
|
2329
|
+
return (parent == null ? void 0 : parent.location) != location;
|
|
2330
|
+
}
|
|
2331
|
+
get mobile() {
|
|
2332
|
+
return ["android", "ios"].includes(this.platform);
|
|
2333
|
+
}
|
|
2334
|
+
get platform() {
|
|
2335
|
+
const userAgent = navigator.userAgent || navigator.vendor;
|
|
2336
|
+
if (/windows/i.test(userAgent)) return "windows";
|
|
2337
|
+
else if (/android/i.test(userAgent)) return "android";
|
|
2338
|
+
else if (/iPad|iPhone|iPod/.test(userAgent)) return "ios";
|
|
2339
|
+
else if (/macintosh|mac os x/i.test(userAgent)) return "mac";
|
|
2340
|
+
else if (/linux/i.test(userAgent)) return "linux";
|
|
2341
|
+
else return "unknown";
|
|
2342
|
+
}
|
|
2343
|
+
get pwa() {
|
|
2344
|
+
return matchMedia("(display-mode: standalone)").matches || (navigator == null ? void 0 : navigator.standalone) || document.referrer.includes("android-app://");
|
|
2345
|
+
}
|
|
2346
|
+
/** Setup the PWA */
|
|
2347
|
+
async setup(manifest = {}) {
|
|
2348
|
+
const meta = (key, name, value) => {
|
|
2349
|
+
const exists = document.querySelector(`meta[${key}="${name}"]`);
|
|
2350
|
+
if (value === void 0 || exists) return exists;
|
|
2351
|
+
const meta2 = document.createElement("meta");
|
|
2352
|
+
meta2.setAttribute(key, name);
|
|
2353
|
+
meta2.content = value;
|
|
2354
|
+
document.head.append(meta2);
|
|
2355
|
+
};
|
|
2356
|
+
meta("name", "mobile-web-app-capable", "yes");
|
|
2357
|
+
meta("name", "apple-mobile-web-app-status-bar-style", "default");
|
|
2358
|
+
meta("name", "apple-mobile-web-app-title", this.api.options.name);
|
|
2359
|
+
meta("name", "apple-touch-icon", `https://datalynk-client.scarborough.auxilium.world/logo.png`);
|
|
2360
|
+
meta("name", "apple-touch-startup-image", `https://datalynk-client.scarborough.auxilium.world/logo.png`);
|
|
2361
|
+
if (!document.querySelector('link[rel="manifest"]')) {
|
|
2362
|
+
const link = document.createElement("link");
|
|
2363
|
+
link.setAttribute("rel", "manifest");
|
|
2364
|
+
link.setAttribute("href", `${this.api.url}/manifest?json=${encodeURI(JSON.stringify({
|
|
2365
|
+
name: this.api.options.name,
|
|
2366
|
+
short_name: this.api.options.name,
|
|
2367
|
+
start_url: location.origin + location.pathname,
|
|
2368
|
+
...this.api.options.manifest,
|
|
2369
|
+
...manifest
|
|
2370
|
+
}))}`);
|
|
2371
|
+
document.head.append(link);
|
|
2372
|
+
}
|
|
2373
|
+
if (!this.iframe && !this.pwa && this.platform != "mac") setTimeout(() => {
|
|
2374
|
+
const dismissed = !!localStorage.getItem(`${this.api.options.name}:pwa`);
|
|
2375
|
+
if (!dismissed) this.prompt();
|
|
2376
|
+
}, 6e4);
|
|
2377
|
+
}
|
|
2378
|
+
/** Prompt user to install the app */
|
|
2379
|
+
async prompt(platform) {
|
|
2380
|
+
if (document.querySelector(".pwa-prompt")) return;
|
|
2381
|
+
this.api.url;
|
|
2382
|
+
const android = (platform || this.platform) == "android";
|
|
2383
|
+
let style = document.querySelector("style.pwa");
|
|
2384
|
+
if (!style) {
|
|
2385
|
+
style = document.createElement("style");
|
|
2386
|
+
style.innerHTML = `
|
|
2387
|
+
.pwa-prompt-backdrop {
|
|
2388
|
+
position: fixed;
|
|
2389
|
+
display: relative;
|
|
2390
|
+
left: 0;
|
|
2391
|
+
top: 0;
|
|
2392
|
+
right: 0;
|
|
2393
|
+
bottom: 0;
|
|
2394
|
+
background: rgba(0,0,0,.5);
|
|
2395
|
+
z-index: 9999;
|
|
2396
|
+
animation: fadeIn 0.5s ease-in-out forwards;
|
|
2397
|
+
opacity: 0;
|
|
2398
|
+
}
|
|
2399
|
+
.pwa-prompt-backdrop.exit {
|
|
2400
|
+
animation: fadeOut 0.5s ease-in-out forwards !important;
|
|
2401
|
+
}
|
|
2402
|
+
.pwa-prompt {
|
|
2403
|
+
position: fixed;
|
|
2404
|
+
background: #fff;
|
|
2405
|
+
color: black;
|
|
2406
|
+
bottom: 0;
|
|
2407
|
+
left: 50%;
|
|
2408
|
+
width: min(100vw, 450px);
|
|
2409
|
+
transform: translate(-50%, 0);
|
|
2410
|
+
animation: slideUp 0.5s ease-in-out forwards;
|
|
2411
|
+
}
|
|
2412
|
+
.pwa-prompt.exit {
|
|
2413
|
+
animation: slideDown 0.5s ease-in-out forwards !important;
|
|
2414
|
+
}
|
|
2415
|
+
.pwa-prompt img {
|
|
2416
|
+
width: 18px;
|
|
2417
|
+
height: 18px;
|
|
2418
|
+
}
|
|
2419
|
+
.pwa-prompt h1 {
|
|
2420
|
+
font-size: 1.25rem;
|
|
2421
|
+
font-weight: bold;
|
|
2422
|
+
}
|
|
2423
|
+
.pwa-prompt-close {
|
|
2424
|
+
position: absolute;
|
|
2425
|
+
right: 5px;
|
|
2426
|
+
top: 10px;
|
|
2427
|
+
background: transparent;
|
|
2428
|
+
border: none;
|
|
2429
|
+
cursor: pointer;
|
|
2430
|
+
}
|
|
2431
|
+
|
|
2432
|
+
@keyframes fadeIn {
|
|
2433
|
+
from { opacity: 0; }
|
|
2434
|
+
to { opacity: 1; }
|
|
2435
|
+
}
|
|
2436
|
+
@keyframes fadeOut {
|
|
2437
|
+
from { opacity: 1; }
|
|
2438
|
+
to { opacity: 0; }
|
|
2439
|
+
}
|
|
2440
|
+
|
|
2441
|
+
@keyframes slideUp {
|
|
2442
|
+
from { transform: translate(-50%, 100%); }
|
|
2443
|
+
to { transform: translate(-50%, 0); }
|
|
2444
|
+
}
|
|
2445
|
+
@keyframes slideDown {
|
|
2446
|
+
from { transform: translate(-50%, 0); }
|
|
2447
|
+
to { transform: translate(-50%, 100%); }
|
|
2448
|
+
}
|
|
2449
|
+
`;
|
|
2450
|
+
document.head.append(style);
|
|
2451
|
+
}
|
|
2452
|
+
const backdrop = document.createElement("div");
|
|
2453
|
+
backdrop.classList.add("pwa-prompt-backdrop");
|
|
2454
|
+
const prompt = document.createElement("div");
|
|
2455
|
+
prompt.classList.add("pwa-prompt");
|
|
2456
|
+
prompt.innerHTML = `
|
|
2457
|
+
<div style="display: flex; padding: 1rem; align-items: center">
|
|
2458
|
+
<img src="https://datalynk-client.scarborough.auxilium.world/logo.png" alt="Logo" style="height: 40px; width: auto; margin-right: .5rem;" />
|
|
2459
|
+
<h1 style="margin: 0">Install ${this.api.options.name}</h1>
|
|
2460
|
+
</div>
|
|
2461
|
+
<div style="display: flex; flex-direction: column; align-items: center">
|
|
2462
|
+
<div style="border-top: 2px solid #00000020; border-bottom: 2px solid #00000020; padding: 0 1rem">
|
|
2463
|
+
<p style="margin-top: 1rem; text-align: center">This website can be installed as an App! Add it to your home screen for quick access & fullscreen use.</p>
|
|
2464
|
+
</div>
|
|
2465
|
+
<table style="margin: 1.5rem 0">
|
|
2466
|
+
<tr>
|
|
2467
|
+
<td style="width: 50px; text-align: center">
|
|
2468
|
+
${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(1.5)"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z"/></svg>' : '<svg viewBox="0 0 566 670" xmlns="http://www.w3.org/2000/svg" fill="#0B76FC" height="40px"><path d="M255 12c4-4 10-8 16-8s12 3 16 8l94 89c3 4 6 7 8 12 2 6 0 14-5 19-7 8-20 9-28 2l-7-7-57-60 2 54v276c0 12-10 22-22 22-12 1-24-10-23-22V110l1-43-60 65c-5 5-13 8-21 6a19 19 0 0 1-16-17c-1-7 2-13 7-18l95-91z" /><path d="M43 207c16-17 40-23 63-23h83v46h-79c-12 0-25 3-33 13-8 9-10 21-10 33v260c0 13 0 27 6 38 5 12 18 18 30 19l14 1h302c14 0 28 0 40-8 11-7 16-21 16-34V276c0-11-2-24-9-33-8-10-22-13-34-13h-78v-46h75c13 0 25 1 37 4 16 4 31 13 41 27 11 17 14 37 14 57v280c0 20-3 41-15 58a71 71 0 0 1-45 27c-11 2-23 3-34 3H109c-19-1-40-4-56-15-14-9-23-23-27-38-4-12-5-25-5-38V270c1-22 6-47 22-63z" /></svg>'}
|
|
2469
|
+
</td>
|
|
2470
|
+
<td>
|
|
2471
|
+
<p style="margin: 1rem 0">1) ${android ? "Open the dropdown menu" : 'Press the "Share" button'}</p>
|
|
2472
|
+
</td>
|
|
2473
|
+
</tr>
|
|
2474
|
+
<tr>
|
|
2475
|
+
<td style="width: 50px; text-align: center">
|
|
2476
|
+
${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(-1.5, 1.5)"><path d="M280-40q-33 0-56.5-23.5T200-120v-720q0-33 23.5-56.5T280-920h280v80H280v40h280v80H280v480h400v-80h80v200q0 33-23.5 56.5T680-40H280Zm0-120v40h400v-40H280Zm440-240L520-600l56-56 104 104v-288h80v288l104-104 56 56-200 200ZM280-800v-40 40Zm0 640v40-40Z"/></svg>' : '<svg viewBox="0 0 578 584" xmlns="http://www.w3.org/2000/svg" fill="black" height="34px"><path d="M101 35l19-1h333c12 0 23 0 35 3 17 3 34 12 44 27 13 16 16 38 16 58v329c0 19 0 39-8 57a65 65 0 0 1-37 37c-18 7-38 7-57 7H130c-21 1-44 0-63-10-14-7-25-20-30-34-6-15-8-30-8-45V121c1-21 5-44 19-61 13-16 33-23 53-25m7 46c-10 1-19 6-24 14-7 8-9 20-9 31v334c0 12 2 25 10 34 9 10 23 12 35 12h336c14 1 30-3 38-15 6-9 8-20 8-31V125c0-12-2-24-10-33-9-9-22-12-35-12H121l-13 1z" /><path d="M271 161c9-11 31-10 38 4 3 5 3 11 3 17v87h88c7 0 16 1 21 7 6 6 7 14 6 22a21 21 0 0 1-10 14c-5 4-11 5-17 5h-88v82c0 7-1 15-6 20-10 10-29 10-37-2-3-6-4-13-4-19v-81h-87c-8-1-17-3-23-9-5-6-6-15-4-22a21 21 0 0 1 11-14c6-3 13-3 19-3h84v-88c0-7 1-14 6-20z" /></svg>'}
|
|
2477
|
+
</td>
|
|
2478
|
+
<td>
|
|
2479
|
+
<p style="margin: 1rem 0">2) Press "Add to Home Screen"</p>
|
|
2480
|
+
</td>
|
|
2481
|
+
</tr>
|
|
2482
|
+
</table>
|
|
2483
|
+
</div>`;
|
|
2484
|
+
const close = document.createElement("button");
|
|
2485
|
+
close.classList.add("pwa-prompt-close");
|
|
2486
|
+
close.innerText = "x";
|
|
2487
|
+
close.onclick = () => {
|
|
2488
|
+
prompt.classList.add("exit");
|
|
2489
|
+
backdrop.classList.add("exit");
|
|
2490
|
+
localStorage.setItem(`${this.api.options.name}:pwa`, "dismissed");
|
|
2491
|
+
setTimeout(() => {
|
|
2492
|
+
prompt.remove();
|
|
2493
|
+
backdrop.remove();
|
|
2494
|
+
}, 500);
|
|
2495
|
+
};
|
|
2496
|
+
prompt.append(close);
|
|
2497
|
+
backdrop.append(prompt);
|
|
2498
|
+
document.body.append(backdrop);
|
|
2499
|
+
}
|
|
2500
|
+
}
|
|
2324
2501
|
class Files {
|
|
2325
2502
|
constructor(api) {
|
|
2326
2503
|
this.api = api;
|
|
@@ -3245,7 +3422,7 @@ class Superuser {
|
|
|
3245
3422
|
} });
|
|
3246
3423
|
}
|
|
3247
3424
|
}
|
|
3248
|
-
const version = "1.
|
|
3425
|
+
const version = "1.2.0";
|
|
3249
3426
|
class WebRtc {
|
|
3250
3427
|
constructor(api) {
|
|
3251
3428
|
__publicField(this, "ice");
|
|
@@ -3394,6 +3571,8 @@ const _Api = class _Api {
|
|
|
3394
3571
|
__publicField(this, "files");
|
|
3395
3572
|
/** PDF */
|
|
3396
3573
|
__publicField(this, "pdf");
|
|
3574
|
+
/** PWA setup & prompt */
|
|
3575
|
+
__publicField(this, "pwa");
|
|
3397
3576
|
/** Socket */
|
|
3398
3577
|
__publicField(this, "socket");
|
|
3399
3578
|
/** Superuser */
|
|
@@ -3422,12 +3601,13 @@ const _Api = class _Api {
|
|
|
3422
3601
|
origin: typeof location !== "undefined" ? location.host : "Unknown",
|
|
3423
3602
|
saveSession: true,
|
|
3424
3603
|
serviceWorker: "/service.worker.mjs",
|
|
3604
|
+
...options,
|
|
3425
3605
|
webrtc: {
|
|
3426
3606
|
url: "scarborough.auxilium.world:3478",
|
|
3427
3607
|
username: "auxilium-webrtc",
|
|
3428
|
-
password: "UU3qkD95Tg54eF"
|
|
3429
|
-
|
|
3430
|
-
|
|
3608
|
+
password: "UU3qkD95Tg54eF",
|
|
3609
|
+
...options.webrtc || {}
|
|
3610
|
+
}
|
|
3431
3611
|
};
|
|
3432
3612
|
if (this.options.saveSession) {
|
|
3433
3613
|
if (localStorage == void 0) return;
|
|
@@ -3441,9 +3621,11 @@ const _Api = class _Api {
|
|
|
3441
3621
|
this.auth = new Auth(this);
|
|
3442
3622
|
this.files = new Files(this);
|
|
3443
3623
|
this.pdf = new Pdf(this);
|
|
3624
|
+
this.pwa = new PWA(this);
|
|
3444
3625
|
this.superuser = new Superuser(this);
|
|
3445
3626
|
this.webrtc = new WebRtc(this);
|
|
3446
3627
|
if ((_a = this.options.offline) == null ? void 0 : _a.length) {
|
|
3628
|
+
this.pwa.setup();
|
|
3447
3629
|
if (typeof indexedDB == "undefined") throw new Error("Cannot enable offline support, indexedDB is not available in this environment");
|
|
3448
3630
|
this.database = new Database("datalynk", this.options.offline);
|
|
3449
3631
|
(_b = this.options.offline) == null ? void 0 : _b.forEach((id) => this.slice(id));
|
|
@@ -3451,17 +3633,6 @@ const _Api = class _Api {
|
|
|
3451
3633
|
navigator.serviceWorker.getRegistration(this.options.serviceWorker).then((reg) => reg ?? navigator.serviceWorker.register(this.options.serviceWorker, { scope: "/", type: "module" }));
|
|
3452
3634
|
}
|
|
3453
3635
|
}
|
|
3454
|
-
if (!document.querySelector('link[rel="manifest"]')) {
|
|
3455
|
-
const link = document.createElement("link");
|
|
3456
|
-
link.setAttribute("rel", "manifest");
|
|
3457
|
-
link.setAttribute("href", `${this.url}/manifest?json=${encodeURI(JSON.stringify({
|
|
3458
|
-
name: this.options.name,
|
|
3459
|
-
short_name: this.options.name,
|
|
3460
|
-
start_url: location.origin + location.pathname,
|
|
3461
|
-
...this.options.manifest
|
|
3462
|
-
}))}`);
|
|
3463
|
-
document.head.append(link);
|
|
3464
|
-
}
|
|
3465
3636
|
}
|
|
3466
3637
|
/** Get session info from JWT payload */
|
|
3467
3638
|
get jwtPayload() {
|
|
@@ -3666,6 +3837,7 @@ exports.ApiCall = ApiCall;
|
|
|
3666
3837
|
exports.Auth = Auth;
|
|
3667
3838
|
exports.Files = Files;
|
|
3668
3839
|
exports.LoginPrompt = LoginPrompt;
|
|
3840
|
+
exports.PWA = PWA;
|
|
3669
3841
|
exports.Pdf = Pdf;
|
|
3670
3842
|
exports.Serializer = Serializer;
|
|
3671
3843
|
exports.Slice = Slice;
|
package/dist/index.mjs
CHANGED
|
@@ -1164,20 +1164,20 @@ var Subscription = function() {
|
|
|
1164
1164
|
}
|
|
1165
1165
|
}
|
|
1166
1166
|
};
|
|
1167
|
-
Subscription2.prototype._hasParent = function(
|
|
1167
|
+
Subscription2.prototype._hasParent = function(parent2) {
|
|
1168
1168
|
var _parentage = this._parentage;
|
|
1169
|
-
return _parentage ===
|
|
1169
|
+
return _parentage === parent2 || Array.isArray(_parentage) && _parentage.includes(parent2);
|
|
1170
1170
|
};
|
|
1171
|
-
Subscription2.prototype._addParent = function(
|
|
1171
|
+
Subscription2.prototype._addParent = function(parent2) {
|
|
1172
1172
|
var _parentage = this._parentage;
|
|
1173
|
-
this._parentage = Array.isArray(_parentage) ? (_parentage.push(
|
|
1173
|
+
this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent2), _parentage) : _parentage ? [_parentage, parent2] : parent2;
|
|
1174
1174
|
};
|
|
1175
|
-
Subscription2.prototype._removeParent = function(
|
|
1175
|
+
Subscription2.prototype._removeParent = function(parent2) {
|
|
1176
1176
|
var _parentage = this._parentage;
|
|
1177
|
-
if (_parentage ===
|
|
1177
|
+
if (_parentage === parent2) {
|
|
1178
1178
|
this._parentage = null;
|
|
1179
1179
|
} else if (Array.isArray(_parentage)) {
|
|
1180
|
-
arrRemove(_parentage,
|
|
1180
|
+
arrRemove(_parentage, parent2);
|
|
1181
1181
|
}
|
|
1182
1182
|
};
|
|
1183
1183
|
Subscription2.prototype.remove = function(teardown) {
|
|
@@ -2319,6 +2319,183 @@ class Auth {
|
|
|
2319
2319
|
return this.api.request({ "$/auth/mobile/generate": { user: login, method: mode } });
|
|
2320
2320
|
}
|
|
2321
2321
|
}
|
|
2322
|
+
class PWA {
|
|
2323
|
+
constructor(api) {
|
|
2324
|
+
this.api = api;
|
|
2325
|
+
}
|
|
2326
|
+
get iframe() {
|
|
2327
|
+
return (parent == null ? void 0 : parent.location) != location;
|
|
2328
|
+
}
|
|
2329
|
+
get mobile() {
|
|
2330
|
+
return ["android", "ios"].includes(this.platform);
|
|
2331
|
+
}
|
|
2332
|
+
get platform() {
|
|
2333
|
+
const userAgent = navigator.userAgent || navigator.vendor;
|
|
2334
|
+
if (/windows/i.test(userAgent)) return "windows";
|
|
2335
|
+
else if (/android/i.test(userAgent)) return "android";
|
|
2336
|
+
else if (/iPad|iPhone|iPod/.test(userAgent)) return "ios";
|
|
2337
|
+
else if (/macintosh|mac os x/i.test(userAgent)) return "mac";
|
|
2338
|
+
else if (/linux/i.test(userAgent)) return "linux";
|
|
2339
|
+
else return "unknown";
|
|
2340
|
+
}
|
|
2341
|
+
get pwa() {
|
|
2342
|
+
return matchMedia("(display-mode: standalone)").matches || (navigator == null ? void 0 : navigator.standalone) || document.referrer.includes("android-app://");
|
|
2343
|
+
}
|
|
2344
|
+
/** Setup the PWA */
|
|
2345
|
+
async setup(manifest = {}) {
|
|
2346
|
+
const meta = (key, name, value) => {
|
|
2347
|
+
const exists = document.querySelector(`meta[${key}="${name}"]`);
|
|
2348
|
+
if (value === void 0 || exists) return exists;
|
|
2349
|
+
const meta2 = document.createElement("meta");
|
|
2350
|
+
meta2.setAttribute(key, name);
|
|
2351
|
+
meta2.content = value;
|
|
2352
|
+
document.head.append(meta2);
|
|
2353
|
+
};
|
|
2354
|
+
meta("name", "mobile-web-app-capable", "yes");
|
|
2355
|
+
meta("name", "apple-mobile-web-app-status-bar-style", "default");
|
|
2356
|
+
meta("name", "apple-mobile-web-app-title", this.api.options.name);
|
|
2357
|
+
meta("name", "apple-touch-icon", `https://datalynk-client.scarborough.auxilium.world/logo.png`);
|
|
2358
|
+
meta("name", "apple-touch-startup-image", `https://datalynk-client.scarborough.auxilium.world/logo.png`);
|
|
2359
|
+
if (!document.querySelector('link[rel="manifest"]')) {
|
|
2360
|
+
const link = document.createElement("link");
|
|
2361
|
+
link.setAttribute("rel", "manifest");
|
|
2362
|
+
link.setAttribute("href", `${this.api.url}/manifest?json=${encodeURI(JSON.stringify({
|
|
2363
|
+
name: this.api.options.name,
|
|
2364
|
+
short_name: this.api.options.name,
|
|
2365
|
+
start_url: location.origin + location.pathname,
|
|
2366
|
+
...this.api.options.manifest,
|
|
2367
|
+
...manifest
|
|
2368
|
+
}))}`);
|
|
2369
|
+
document.head.append(link);
|
|
2370
|
+
}
|
|
2371
|
+
if (!this.iframe && !this.pwa && this.platform != "mac") setTimeout(() => {
|
|
2372
|
+
const dismissed = !!localStorage.getItem(`${this.api.options.name}:pwa`);
|
|
2373
|
+
if (!dismissed) this.prompt();
|
|
2374
|
+
}, 6e4);
|
|
2375
|
+
}
|
|
2376
|
+
/** Prompt user to install the app */
|
|
2377
|
+
async prompt(platform) {
|
|
2378
|
+
if (document.querySelector(".pwa-prompt")) return;
|
|
2379
|
+
this.api.url;
|
|
2380
|
+
const android = (platform || this.platform) == "android";
|
|
2381
|
+
let style = document.querySelector("style.pwa");
|
|
2382
|
+
if (!style) {
|
|
2383
|
+
style = document.createElement("style");
|
|
2384
|
+
style.innerHTML = `
|
|
2385
|
+
.pwa-prompt-backdrop {
|
|
2386
|
+
position: fixed;
|
|
2387
|
+
display: relative;
|
|
2388
|
+
left: 0;
|
|
2389
|
+
top: 0;
|
|
2390
|
+
right: 0;
|
|
2391
|
+
bottom: 0;
|
|
2392
|
+
background: rgba(0,0,0,.5);
|
|
2393
|
+
z-index: 9999;
|
|
2394
|
+
animation: fadeIn 0.5s ease-in-out forwards;
|
|
2395
|
+
opacity: 0;
|
|
2396
|
+
}
|
|
2397
|
+
.pwa-prompt-backdrop.exit {
|
|
2398
|
+
animation: fadeOut 0.5s ease-in-out forwards !important;
|
|
2399
|
+
}
|
|
2400
|
+
.pwa-prompt {
|
|
2401
|
+
position: fixed;
|
|
2402
|
+
background: #fff;
|
|
2403
|
+
color: black;
|
|
2404
|
+
bottom: 0;
|
|
2405
|
+
left: 50%;
|
|
2406
|
+
width: min(100vw, 450px);
|
|
2407
|
+
transform: translate(-50%, 0);
|
|
2408
|
+
animation: slideUp 0.5s ease-in-out forwards;
|
|
2409
|
+
}
|
|
2410
|
+
.pwa-prompt.exit {
|
|
2411
|
+
animation: slideDown 0.5s ease-in-out forwards !important;
|
|
2412
|
+
}
|
|
2413
|
+
.pwa-prompt img {
|
|
2414
|
+
width: 18px;
|
|
2415
|
+
height: 18px;
|
|
2416
|
+
}
|
|
2417
|
+
.pwa-prompt h1 {
|
|
2418
|
+
font-size: 1.25rem;
|
|
2419
|
+
font-weight: bold;
|
|
2420
|
+
}
|
|
2421
|
+
.pwa-prompt-close {
|
|
2422
|
+
position: absolute;
|
|
2423
|
+
right: 5px;
|
|
2424
|
+
top: 10px;
|
|
2425
|
+
background: transparent;
|
|
2426
|
+
border: none;
|
|
2427
|
+
cursor: pointer;
|
|
2428
|
+
}
|
|
2429
|
+
|
|
2430
|
+
@keyframes fadeIn {
|
|
2431
|
+
from { opacity: 0; }
|
|
2432
|
+
to { opacity: 1; }
|
|
2433
|
+
}
|
|
2434
|
+
@keyframes fadeOut {
|
|
2435
|
+
from { opacity: 1; }
|
|
2436
|
+
to { opacity: 0; }
|
|
2437
|
+
}
|
|
2438
|
+
|
|
2439
|
+
@keyframes slideUp {
|
|
2440
|
+
from { transform: translate(-50%, 100%); }
|
|
2441
|
+
to { transform: translate(-50%, 0); }
|
|
2442
|
+
}
|
|
2443
|
+
@keyframes slideDown {
|
|
2444
|
+
from { transform: translate(-50%, 0); }
|
|
2445
|
+
to { transform: translate(-50%, 100%); }
|
|
2446
|
+
}
|
|
2447
|
+
`;
|
|
2448
|
+
document.head.append(style);
|
|
2449
|
+
}
|
|
2450
|
+
const backdrop = document.createElement("div");
|
|
2451
|
+
backdrop.classList.add("pwa-prompt-backdrop");
|
|
2452
|
+
const prompt = document.createElement("div");
|
|
2453
|
+
prompt.classList.add("pwa-prompt");
|
|
2454
|
+
prompt.innerHTML = `
|
|
2455
|
+
<div style="display: flex; padding: 1rem; align-items: center">
|
|
2456
|
+
<img src="https://datalynk-client.scarborough.auxilium.world/logo.png" alt="Logo" style="height: 40px; width: auto; margin-right: .5rem;" />
|
|
2457
|
+
<h1 style="margin: 0">Install ${this.api.options.name}</h1>
|
|
2458
|
+
</div>
|
|
2459
|
+
<div style="display: flex; flex-direction: column; align-items: center">
|
|
2460
|
+
<div style="border-top: 2px solid #00000020; border-bottom: 2px solid #00000020; padding: 0 1rem">
|
|
2461
|
+
<p style="margin-top: 1rem; text-align: center">This website can be installed as an App! Add it to your home screen for quick access & fullscreen use.</p>
|
|
2462
|
+
</div>
|
|
2463
|
+
<table style="margin: 1.5rem 0">
|
|
2464
|
+
<tr>
|
|
2465
|
+
<td style="width: 50px; text-align: center">
|
|
2466
|
+
${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(1.5)"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z"/></svg>' : '<svg viewBox="0 0 566 670" xmlns="http://www.w3.org/2000/svg" fill="#0B76FC" height="40px"><path d="M255 12c4-4 10-8 16-8s12 3 16 8l94 89c3 4 6 7 8 12 2 6 0 14-5 19-7 8-20 9-28 2l-7-7-57-60 2 54v276c0 12-10 22-22 22-12 1-24-10-23-22V110l1-43-60 65c-5 5-13 8-21 6a19 19 0 0 1-16-17c-1-7 2-13 7-18l95-91z" /><path d="M43 207c16-17 40-23 63-23h83v46h-79c-12 0-25 3-33 13-8 9-10 21-10 33v260c0 13 0 27 6 38 5 12 18 18 30 19l14 1h302c14 0 28 0 40-8 11-7 16-21 16-34V276c0-11-2-24-9-33-8-10-22-13-34-13h-78v-46h75c13 0 25 1 37 4 16 4 31 13 41 27 11 17 14 37 14 57v280c0 20-3 41-15 58a71 71 0 0 1-45 27c-11 2-23 3-34 3H109c-19-1-40-4-56-15-14-9-23-23-27-38-4-12-5-25-5-38V270c1-22 6-47 22-63z" /></svg>'}
|
|
2467
|
+
</td>
|
|
2468
|
+
<td>
|
|
2469
|
+
<p style="margin: 1rem 0">1) ${android ? "Open the dropdown menu" : 'Press the "Share" button'}</p>
|
|
2470
|
+
</td>
|
|
2471
|
+
</tr>
|
|
2472
|
+
<tr>
|
|
2473
|
+
<td style="width: 50px; text-align: center">
|
|
2474
|
+
${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(-1.5, 1.5)"><path d="M280-40q-33 0-56.5-23.5T200-120v-720q0-33 23.5-56.5T280-920h280v80H280v40h280v80H280v480h400v-80h80v200q0 33-23.5 56.5T680-40H280Zm0-120v40h400v-40H280Zm440-240L520-600l56-56 104 104v-288h80v288l104-104 56 56-200 200ZM280-800v-40 40Zm0 640v40-40Z"/></svg>' : '<svg viewBox="0 0 578 584" xmlns="http://www.w3.org/2000/svg" fill="black" height="34px"><path d="M101 35l19-1h333c12 0 23 0 35 3 17 3 34 12 44 27 13 16 16 38 16 58v329c0 19 0 39-8 57a65 65 0 0 1-37 37c-18 7-38 7-57 7H130c-21 1-44 0-63-10-14-7-25-20-30-34-6-15-8-30-8-45V121c1-21 5-44 19-61 13-16 33-23 53-25m7 46c-10 1-19 6-24 14-7 8-9 20-9 31v334c0 12 2 25 10 34 9 10 23 12 35 12h336c14 1 30-3 38-15 6-9 8-20 8-31V125c0-12-2-24-10-33-9-9-22-12-35-12H121l-13 1z" /><path d="M271 161c9-11 31-10 38 4 3 5 3 11 3 17v87h88c7 0 16 1 21 7 6 6 7 14 6 22a21 21 0 0 1-10 14c-5 4-11 5-17 5h-88v82c0 7-1 15-6 20-10 10-29 10-37-2-3-6-4-13-4-19v-81h-87c-8-1-17-3-23-9-5-6-6-15-4-22a21 21 0 0 1 11-14c6-3 13-3 19-3h84v-88c0-7 1-14 6-20z" /></svg>'}
|
|
2475
|
+
</td>
|
|
2476
|
+
<td>
|
|
2477
|
+
<p style="margin: 1rem 0">2) Press "Add to Home Screen"</p>
|
|
2478
|
+
</td>
|
|
2479
|
+
</tr>
|
|
2480
|
+
</table>
|
|
2481
|
+
</div>`;
|
|
2482
|
+
const close = document.createElement("button");
|
|
2483
|
+
close.classList.add("pwa-prompt-close");
|
|
2484
|
+
close.innerText = "x";
|
|
2485
|
+
close.onclick = () => {
|
|
2486
|
+
prompt.classList.add("exit");
|
|
2487
|
+
backdrop.classList.add("exit");
|
|
2488
|
+
localStorage.setItem(`${this.api.options.name}:pwa`, "dismissed");
|
|
2489
|
+
setTimeout(() => {
|
|
2490
|
+
prompt.remove();
|
|
2491
|
+
backdrop.remove();
|
|
2492
|
+
}, 500);
|
|
2493
|
+
};
|
|
2494
|
+
prompt.append(close);
|
|
2495
|
+
backdrop.append(prompt);
|
|
2496
|
+
document.body.append(backdrop);
|
|
2497
|
+
}
|
|
2498
|
+
}
|
|
2322
2499
|
class Files {
|
|
2323
2500
|
constructor(api) {
|
|
2324
2501
|
this.api = api;
|
|
@@ -3243,7 +3420,7 @@ class Superuser {
|
|
|
3243
3420
|
} });
|
|
3244
3421
|
}
|
|
3245
3422
|
}
|
|
3246
|
-
const version = "1.
|
|
3423
|
+
const version = "1.2.0";
|
|
3247
3424
|
class WebRtc {
|
|
3248
3425
|
constructor(api) {
|
|
3249
3426
|
__publicField(this, "ice");
|
|
@@ -3392,6 +3569,8 @@ const _Api = class _Api {
|
|
|
3392
3569
|
__publicField(this, "files");
|
|
3393
3570
|
/** PDF */
|
|
3394
3571
|
__publicField(this, "pdf");
|
|
3572
|
+
/** PWA setup & prompt */
|
|
3573
|
+
__publicField(this, "pwa");
|
|
3395
3574
|
/** Socket */
|
|
3396
3575
|
__publicField(this, "socket");
|
|
3397
3576
|
/** Superuser */
|
|
@@ -3420,12 +3599,13 @@ const _Api = class _Api {
|
|
|
3420
3599
|
origin: typeof location !== "undefined" ? location.host : "Unknown",
|
|
3421
3600
|
saveSession: true,
|
|
3422
3601
|
serviceWorker: "/service.worker.mjs",
|
|
3602
|
+
...options,
|
|
3423
3603
|
webrtc: {
|
|
3424
3604
|
url: "scarborough.auxilium.world:3478",
|
|
3425
3605
|
username: "auxilium-webrtc",
|
|
3426
|
-
password: "UU3qkD95Tg54eF"
|
|
3427
|
-
|
|
3428
|
-
|
|
3606
|
+
password: "UU3qkD95Tg54eF",
|
|
3607
|
+
...options.webrtc || {}
|
|
3608
|
+
}
|
|
3429
3609
|
};
|
|
3430
3610
|
if (this.options.saveSession) {
|
|
3431
3611
|
if (localStorage == void 0) return;
|
|
@@ -3439,9 +3619,11 @@ const _Api = class _Api {
|
|
|
3439
3619
|
this.auth = new Auth(this);
|
|
3440
3620
|
this.files = new Files(this);
|
|
3441
3621
|
this.pdf = new Pdf(this);
|
|
3622
|
+
this.pwa = new PWA(this);
|
|
3442
3623
|
this.superuser = new Superuser(this);
|
|
3443
3624
|
this.webrtc = new WebRtc(this);
|
|
3444
3625
|
if ((_a = this.options.offline) == null ? void 0 : _a.length) {
|
|
3626
|
+
this.pwa.setup();
|
|
3445
3627
|
if (typeof indexedDB == "undefined") throw new Error("Cannot enable offline support, indexedDB is not available in this environment");
|
|
3446
3628
|
this.database = new Database("datalynk", this.options.offline);
|
|
3447
3629
|
(_b = this.options.offline) == null ? void 0 : _b.forEach((id) => this.slice(id));
|
|
@@ -3449,17 +3631,6 @@ const _Api = class _Api {
|
|
|
3449
3631
|
navigator.serviceWorker.getRegistration(this.options.serviceWorker).then((reg) => reg ?? navigator.serviceWorker.register(this.options.serviceWorker, { scope: "/", type: "module" }));
|
|
3450
3632
|
}
|
|
3451
3633
|
}
|
|
3452
|
-
if (!document.querySelector('link[rel="manifest"]')) {
|
|
3453
|
-
const link = document.createElement("link");
|
|
3454
|
-
link.setAttribute("rel", "manifest");
|
|
3455
|
-
link.setAttribute("href", `${this.url}/manifest?json=${encodeURI(JSON.stringify({
|
|
3456
|
-
name: this.options.name,
|
|
3457
|
-
short_name: this.options.name,
|
|
3458
|
-
start_url: location.origin + location.pathname,
|
|
3459
|
-
...this.options.manifest
|
|
3460
|
-
}))}`);
|
|
3461
|
-
document.head.append(link);
|
|
3462
|
-
}
|
|
3463
3634
|
}
|
|
3464
3635
|
/** Get session info from JWT payload */
|
|
3465
3636
|
get jwtPayload() {
|
|
@@ -3665,6 +3836,7 @@ export {
|
|
|
3665
3836
|
Auth,
|
|
3666
3837
|
Files,
|
|
3667
3838
|
LoginPrompt,
|
|
3839
|
+
PWA,
|
|
3668
3840
|
Pdf,
|
|
3669
3841
|
Serializer,
|
|
3670
3842
|
Slice,
|
package/dist/pwa.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Api } from './api';
|
|
2
|
+
export declare class PWA {
|
|
3
|
+
private readonly api;
|
|
4
|
+
get iframe(): boolean;
|
|
5
|
+
get mobile(): boolean;
|
|
6
|
+
get platform(): 'android' | 'ios' | 'mac' | 'windows' | 'linux' | 'unknown';
|
|
7
|
+
get pwa(): boolean;
|
|
8
|
+
constructor(api: Api);
|
|
9
|
+
/** Setup the PWA */
|
|
10
|
+
setup(manifest?: any): Promise<void>;
|
|
11
|
+
/** Prompt user to install the app */
|
|
12
|
+
prompt(platform?: 'android' | 'ios'): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=pwa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pwa.d.ts","sourceRoot":"","sources":["../src/pwa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,qBAAa,GAAG;IAoBH,OAAO,CAAC,QAAQ,CAAC,GAAG;IAlBhC,IAAI,MAAM,IAAI,OAAO,CAAyC;IAE9D,IAAI,MAAM,IAAI,OAAO,CAAuD;IAE5E,IAAI,QAAQ,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAQ1E;IAED,IAAI,GAAG,IAAI,OAAO,CAEjB;gBAE4B,GAAG,EAAE,GAAG;IAErC,oBAAoB;IACd,KAAK,CAAC,QAAQ,GAAE,GAAQ;IAsC9B,qCAAqC;IAC/B,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK;CAiIzC"}
|
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/auxilium/datalynk/datalynk-client",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.2.0",
|
|
6
6
|
"author": "Zak Timson <zaktimson@gmail.com>",
|
|
7
7
|
"private": false,
|
|
8
8
|
"main": "./dist/index.cjs",
|