@ztimson/momentum 0.50.5 → 0.50.7
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/auth.d.ts +32 -5
- package/dist/auth.d.ts.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/index.cjs +51 -20
- package/dist/index.mjs +51 -20
- package/package.json +2 -2
package/dist/auth.d.ts
CHANGED
|
@@ -1,13 +1,41 @@
|
|
|
1
1
|
import { Api } from './api';
|
|
2
2
|
import { PathEvent, PathEventEmitter } from '@ztimson/utils';
|
|
3
|
+
import { Meta } from './core';
|
|
3
4
|
import { User } from './users';
|
|
4
5
|
export type AuthOptions = {
|
|
5
6
|
/** Path to login page */
|
|
6
7
|
loginUrl?: string;
|
|
7
8
|
};
|
|
9
|
+
export type UserToken = Meta & {
|
|
10
|
+
name: string;
|
|
11
|
+
owner: string;
|
|
12
|
+
token: string;
|
|
13
|
+
expire: null | Date;
|
|
14
|
+
};
|
|
15
|
+
export declare class Token extends PathEventEmitter {
|
|
16
|
+
private api;
|
|
17
|
+
constructor(api: Api);
|
|
18
|
+
all(username: string): Promise<UserToken[]>;
|
|
19
|
+
create(token: {
|
|
20
|
+
name: string;
|
|
21
|
+
owner: string;
|
|
22
|
+
expire: null | Date;
|
|
23
|
+
}): Promise<UserToken>;
|
|
24
|
+
delete(id: string): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare class Totp {
|
|
27
|
+
private api;
|
|
28
|
+
constructor(api: Api);
|
|
29
|
+
disable(username: string): import('@ztimson/utils').PromiseProgress<void>;
|
|
30
|
+
enable: (username: string) => import('@ztimson/utils').PromiseProgress<void>;
|
|
31
|
+
reset(username: string): import('@ztimson/utils').PromiseProgress<void>;
|
|
32
|
+
setup(username: string, method?: string, totp?: string): import('@ztimson/utils').PromiseProgress<void>;
|
|
33
|
+
}
|
|
8
34
|
export declare class Auth extends PathEventEmitter {
|
|
9
35
|
private readonly opts;
|
|
10
36
|
private readonly api;
|
|
37
|
+
token: Token;
|
|
38
|
+
totp: Totp;
|
|
11
39
|
private _permissions;
|
|
12
40
|
get permissions(): string[];
|
|
13
41
|
set permissions(perms: string[]);
|
|
@@ -21,7 +49,10 @@ export declare class Auth extends PathEventEmitter {
|
|
|
21
49
|
hasFatal: (...events: (string | PathEvent)[]) => void;
|
|
22
50
|
hasAllFatal: (...events: (string | PathEvent)[]) => void;
|
|
23
51
|
knownHost(host?: string): Promise<void>;
|
|
24
|
-
login(username: string, password: string,
|
|
52
|
+
login(username: string, password: string, opts?: {
|
|
53
|
+
totp?: string;
|
|
54
|
+
expire?: number | Date | null;
|
|
55
|
+
}): Promise<User | null>;
|
|
25
56
|
loginRedirect(host?: string): Promise<string>;
|
|
26
57
|
logout(): void;
|
|
27
58
|
register(u: Partial<User> & {
|
|
@@ -36,9 +67,5 @@ export declare class Auth extends PathEventEmitter {
|
|
|
36
67
|
permissions: string[];
|
|
37
68
|
} | null>;
|
|
38
69
|
updatePassword(username: string, password: string, oldPassword?: string): Promise<void>;
|
|
39
|
-
disableTotp(username: string): import('@ztimson/utils').PromiseProgress<void>;
|
|
40
|
-
enableTotp: (username: string) => import('@ztimson/utils').PromiseProgress<void>;
|
|
41
|
-
resetTotp(username: string): import('@ztimson/utils').PromiseProgress<void>;
|
|
42
|
-
setupTotp(username: string, method?: string, totp?: string): import('@ztimson/utils').PromiseProgress<void>;
|
|
43
70
|
}
|
|
44
71
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAiB,SAAS,EAAE,gBAAgB,EAAM,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAElC,MAAM,MAAM,WAAW,GAAG;IACzB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,CAAA;AAED,qBAAa,IAAK,SAAQ,gBAAgB;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,gBAAgB,EAAM,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnF,qBAAa,MAAO,SAAQ,gBAAgB;IAqC/B,OAAO,CAAC,GAAG;IAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAnCvD,IAAI,MAAM,YAAyD;IAEnE,OAAO,CAAC,cAAc,CAAS;IAC/B,IAAI,aAAa,IACkB,OAAO,CADS;IACnD,OAAO,KAAK,aAAa,QAGxB;IAED,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,IAAI,QAAQ,IAAI,QAAQ,CAWvB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGvD;IAED,OAAO,CAAC,IAAI,CAAC,CAAU;IACvB,IAAI,GAAG,IAAI,OAAO,CAIjB;gBAEmB,GAAG,EAAE,GAAG,EAAmB,QAAQ,EAAE,QAAQ;IAK3D,MAAM,CAAC,MAAM,UAAQ,EAAE,SAAS,UAAO;IAiF7C,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,gBAAgB,EAAM,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnF,qBAAa,MAAO,SAAQ,gBAAgB;IAqC/B,OAAO,CAAC,GAAG;IAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAnCvD,IAAI,MAAM,YAAyD;IAEnE,OAAO,CAAC,cAAc,CAAS;IAC/B,IAAI,aAAa,IACkB,OAAO,CADS;IACnD,OAAO,KAAK,aAAa,QAGxB;IAED,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,IAAI,QAAQ,IAAI,QAAQ,CAWvB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGvD;IAED,OAAO,CAAC,IAAI,CAAC,CAAU;IACvB,IAAI,GAAG,IAAI,OAAO,CAIjB;gBAEmB,GAAG,EAAE,GAAG,EAAmB,QAAQ,EAAE,QAAQ;IAK3D,MAAM,CAAC,MAAM,UAAQ,EAAE,SAAS,UAAO;IAiF7C,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK;IAoIhC,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAa7C,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CAO3C"}
|
package/dist/index.cjs
CHANGED
|
@@ -1128,10 +1128,51 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1128
1128
|
});
|
|
1129
1129
|
}
|
|
1130
1130
|
}
|
|
1131
|
+
class Token extends PathEventEmitter {
|
|
1132
|
+
constructor(api) {
|
|
1133
|
+
super();
|
|
1134
|
+
this.api = api;
|
|
1135
|
+
}
|
|
1136
|
+
all(username) {
|
|
1137
|
+
return this.api.request({ url: "/" + PES`api/auth/tokens/${username}` }).then((resp) => {
|
|
1138
|
+
this.emit(PES`token/${username}:r`, resp);
|
|
1139
|
+
return resp;
|
|
1140
|
+
});
|
|
1141
|
+
}
|
|
1142
|
+
create(token) {
|
|
1143
|
+
return this.api.request({ url: "/" + PES`api/auth/tokens/${token.owner}`, body: token }).then((resp) => {
|
|
1144
|
+
this.emit(PES`token/${token.owner}:c`, token);
|
|
1145
|
+
return resp;
|
|
1146
|
+
});
|
|
1147
|
+
}
|
|
1148
|
+
delete(id) {
|
|
1149
|
+
return this.api.request({ url: "/" + PES`api/auth/tokens/${id}`, method: "DELETE" }).then(() => this.emit(PES`token/${id}:d`, id));
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
class Totp {
|
|
1153
|
+
constructor(api) {
|
|
1154
|
+
__publicField(this, "enable", this.reset);
|
|
1155
|
+
this.api = api;
|
|
1156
|
+
}
|
|
1157
|
+
disable(username) {
|
|
1158
|
+
return this.api.request({ url: "/" + PES`api/auth/totp/${username}`, method: "DELETE" });
|
|
1159
|
+
}
|
|
1160
|
+
reset(username) {
|
|
1161
|
+
return this.api.request({ url: "/" + PES`api/auth/totp/${username}`, method: "POST" });
|
|
1162
|
+
}
|
|
1163
|
+
setup(username, method = "app", totp) {
|
|
1164
|
+
return this.api.request({ url: "/" + PES`api/auth/totp/${username}`, body: clean({
|
|
1165
|
+
method,
|
|
1166
|
+
totp
|
|
1167
|
+
}) });
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1131
1170
|
class Auth extends PathEventEmitter {
|
|
1132
1171
|
constructor(api, opts = {}) {
|
|
1133
1172
|
super();
|
|
1134
1173
|
__publicField(this, "api");
|
|
1174
|
+
__publicField(this, "token");
|
|
1175
|
+
__publicField(this, "totp");
|
|
1135
1176
|
__publicField(this, "_permissions", []);
|
|
1136
1177
|
__publicField(this, "_user");
|
|
1137
1178
|
// Permission helpers
|
|
@@ -1140,9 +1181,11 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1140
1181
|
__publicField(this, "hasAll", (...events) => PathEvent.hasAll(this.permissions, ...events));
|
|
1141
1182
|
__publicField(this, "hasFatal", (...events) => PathEvent.hasFatal(this.permissions, ...events));
|
|
1142
1183
|
__publicField(this, "hasAllFatal", (...events) => PathEvent.hasAllFatal(this.permissions, ...events));
|
|
1143
|
-
__publicField(this, "enableTotp", this.resetTotp);
|
|
1144
1184
|
this.opts = opts;
|
|
1145
1185
|
this.api = typeof api == "string" ? new Api(api) : api;
|
|
1186
|
+
this.token = new Token(this.api);
|
|
1187
|
+
this.totp = new Totp(this.api);
|
|
1188
|
+
this.relayEvents(this.token);
|
|
1146
1189
|
this.opts = {
|
|
1147
1190
|
loginUrl: this.api.url + "/ui/#/login",
|
|
1148
1191
|
...this.opts
|
|
@@ -1185,17 +1228,17 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1185
1228
|
if (host.startsWith("/")) return Promise.resolve();
|
|
1186
1229
|
return this.api.request({ url: `/api/auth/known-host?host=${encodeURI(new URL(host).origin)}` });
|
|
1187
1230
|
}
|
|
1188
|
-
login(username, password,
|
|
1231
|
+
login(username, password, opts) {
|
|
1189
1232
|
if (!username || !password) throw new Error("Cannot login, missing username or password");
|
|
1190
1233
|
return this.api.request({
|
|
1191
1234
|
url: "/api/auth/login",
|
|
1192
1235
|
headers: { Authorization: void 0 },
|
|
1193
1236
|
method: "POST",
|
|
1194
|
-
body: {
|
|
1237
|
+
body: clean({
|
|
1195
1238
|
username: username.trim(),
|
|
1196
1239
|
password: password.trim(),
|
|
1197
|
-
|
|
1198
|
-
}
|
|
1240
|
+
...opts
|
|
1241
|
+
}, true)
|
|
1199
1242
|
}).then(async (resp) => {
|
|
1200
1243
|
this.api.token = (resp == null ? void 0 : resp.token) || null;
|
|
1201
1244
|
const user = await this.once("auth/user");
|
|
@@ -1271,19 +1314,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1271
1314
|
if (resp == null ? void 0 : resp.token) this.api.token = resp.token;
|
|
1272
1315
|
});
|
|
1273
1316
|
}
|
|
1274
|
-
// TOTP ============================================================================================================
|
|
1275
|
-
disableTotp(username) {
|
|
1276
|
-
return this.api.request({ url: `/api/auth/totp/${username}`, method: "DELETE" });
|
|
1277
|
-
}
|
|
1278
|
-
resetTotp(username) {
|
|
1279
|
-
return this.api.request({ url: `/api/auth/totp/${username}`, method: "POST" });
|
|
1280
|
-
}
|
|
1281
|
-
setupTotp(username, method = "app", totp) {
|
|
1282
|
-
return this.api.request({ url: `/api/auth/totp/${username}`, body: clean({
|
|
1283
|
-
method,
|
|
1284
|
-
totp
|
|
1285
|
-
}) });
|
|
1286
|
-
}
|
|
1287
1317
|
}
|
|
1288
1318
|
class Client extends PathEventEmitter {
|
|
1289
1319
|
constructor(api, settings) {
|
|
@@ -1376,7 +1406,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1376
1406
|
if (settings["theme"]) {
|
|
1377
1407
|
document.body.style.setProperty("--theme-backdrop", (_c = settings["theme"]) == null ? void 0 : _c.background);
|
|
1378
1408
|
document.body.style.setProperty("--theme-primary", (_d = settings["theme"]) == null ? void 0 : _d.primary);
|
|
1379
|
-
document.body.style.setProperty("--theme-accent", (_e = settings["theme"]) == null ? void 0 : _e.
|
|
1409
|
+
document.body.style.setProperty("--theme-accent", (_e = settings["theme"]) == null ? void 0 : _e.accent);
|
|
1380
1410
|
document.body.style.setProperty("--theme-contrast", blackOrWhite((_f = settings["theme"]) == null ? void 0 : _f.background));
|
|
1381
1411
|
}
|
|
1382
1412
|
if (settings["pwa"]) {
|
|
@@ -1395,7 +1425,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1395
1425
|
const url = this.settings.api.url;
|
|
1396
1426
|
const settings = this.settings.cache;
|
|
1397
1427
|
const android = (platform || this.platform) == "android";
|
|
1398
|
-
console.log("prompt");
|
|
1399
1428
|
let style = document.querySelector("style.momentum-pwa");
|
|
1400
1429
|
if (!style) {
|
|
1401
1430
|
style = document.createElement("style");
|
|
@@ -2261,6 +2290,8 @@ ${log}`;
|
|
|
2261
2290
|
exports2.Socket = Socket;
|
|
2262
2291
|
exports2.Static = Static;
|
|
2263
2292
|
exports2.Storage = Storage$1;
|
|
2293
|
+
exports2.Token = Token;
|
|
2294
|
+
exports2.Totp = Totp;
|
|
2264
2295
|
exports2.Users = Users;
|
|
2265
2296
|
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
|
|
2266
2297
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -1124,10 +1124,51 @@ class Analytics extends PathEventEmitter {
|
|
|
1124
1124
|
});
|
|
1125
1125
|
}
|
|
1126
1126
|
}
|
|
1127
|
+
class Token extends PathEventEmitter {
|
|
1128
|
+
constructor(api) {
|
|
1129
|
+
super();
|
|
1130
|
+
this.api = api;
|
|
1131
|
+
}
|
|
1132
|
+
all(username) {
|
|
1133
|
+
return this.api.request({ url: "/" + PES`api/auth/tokens/${username}` }).then((resp) => {
|
|
1134
|
+
this.emit(PES`token/${username}:r`, resp);
|
|
1135
|
+
return resp;
|
|
1136
|
+
});
|
|
1137
|
+
}
|
|
1138
|
+
create(token) {
|
|
1139
|
+
return this.api.request({ url: "/" + PES`api/auth/tokens/${token.owner}`, body: token }).then((resp) => {
|
|
1140
|
+
this.emit(PES`token/${token.owner}:c`, token);
|
|
1141
|
+
return resp;
|
|
1142
|
+
});
|
|
1143
|
+
}
|
|
1144
|
+
delete(id) {
|
|
1145
|
+
return this.api.request({ url: "/" + PES`api/auth/tokens/${id}`, method: "DELETE" }).then(() => this.emit(PES`token/${id}:d`, id));
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
class Totp {
|
|
1149
|
+
constructor(api) {
|
|
1150
|
+
__publicField(this, "enable", this.reset);
|
|
1151
|
+
this.api = api;
|
|
1152
|
+
}
|
|
1153
|
+
disable(username) {
|
|
1154
|
+
return this.api.request({ url: "/" + PES`api/auth/totp/${username}`, method: "DELETE" });
|
|
1155
|
+
}
|
|
1156
|
+
reset(username) {
|
|
1157
|
+
return this.api.request({ url: "/" + PES`api/auth/totp/${username}`, method: "POST" });
|
|
1158
|
+
}
|
|
1159
|
+
setup(username, method = "app", totp) {
|
|
1160
|
+
return this.api.request({ url: "/" + PES`api/auth/totp/${username}`, body: clean({
|
|
1161
|
+
method,
|
|
1162
|
+
totp
|
|
1163
|
+
}) });
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1127
1166
|
class Auth extends PathEventEmitter {
|
|
1128
1167
|
constructor(api, opts = {}) {
|
|
1129
1168
|
super();
|
|
1130
1169
|
__publicField(this, "api");
|
|
1170
|
+
__publicField(this, "token");
|
|
1171
|
+
__publicField(this, "totp");
|
|
1131
1172
|
__publicField(this, "_permissions", []);
|
|
1132
1173
|
__publicField(this, "_user");
|
|
1133
1174
|
// Permission helpers
|
|
@@ -1136,9 +1177,11 @@ class Auth extends PathEventEmitter {
|
|
|
1136
1177
|
__publicField(this, "hasAll", (...events) => PathEvent.hasAll(this.permissions, ...events));
|
|
1137
1178
|
__publicField(this, "hasFatal", (...events) => PathEvent.hasFatal(this.permissions, ...events));
|
|
1138
1179
|
__publicField(this, "hasAllFatal", (...events) => PathEvent.hasAllFatal(this.permissions, ...events));
|
|
1139
|
-
__publicField(this, "enableTotp", this.resetTotp);
|
|
1140
1180
|
this.opts = opts;
|
|
1141
1181
|
this.api = typeof api == "string" ? new Api(api) : api;
|
|
1182
|
+
this.token = new Token(this.api);
|
|
1183
|
+
this.totp = new Totp(this.api);
|
|
1184
|
+
this.relayEvents(this.token);
|
|
1142
1185
|
this.opts = {
|
|
1143
1186
|
loginUrl: this.api.url + "/ui/#/login",
|
|
1144
1187
|
...this.opts
|
|
@@ -1181,17 +1224,17 @@ class Auth extends PathEventEmitter {
|
|
|
1181
1224
|
if (host.startsWith("/")) return Promise.resolve();
|
|
1182
1225
|
return this.api.request({ url: `/api/auth/known-host?host=${encodeURI(new URL(host).origin)}` });
|
|
1183
1226
|
}
|
|
1184
|
-
login(username, password,
|
|
1227
|
+
login(username, password, opts) {
|
|
1185
1228
|
if (!username || !password) throw new Error("Cannot login, missing username or password");
|
|
1186
1229
|
return this.api.request({
|
|
1187
1230
|
url: "/api/auth/login",
|
|
1188
1231
|
headers: { Authorization: void 0 },
|
|
1189
1232
|
method: "POST",
|
|
1190
|
-
body: {
|
|
1233
|
+
body: clean({
|
|
1191
1234
|
username: username.trim(),
|
|
1192
1235
|
password: password.trim(),
|
|
1193
|
-
|
|
1194
|
-
}
|
|
1236
|
+
...opts
|
|
1237
|
+
}, true)
|
|
1195
1238
|
}).then(async (resp) => {
|
|
1196
1239
|
this.api.token = (resp == null ? void 0 : resp.token) || null;
|
|
1197
1240
|
const user = await this.once("auth/user");
|
|
@@ -1267,19 +1310,6 @@ class Auth extends PathEventEmitter {
|
|
|
1267
1310
|
if (resp == null ? void 0 : resp.token) this.api.token = resp.token;
|
|
1268
1311
|
});
|
|
1269
1312
|
}
|
|
1270
|
-
// TOTP ============================================================================================================
|
|
1271
|
-
disableTotp(username) {
|
|
1272
|
-
return this.api.request({ url: `/api/auth/totp/${username}`, method: "DELETE" });
|
|
1273
|
-
}
|
|
1274
|
-
resetTotp(username) {
|
|
1275
|
-
return this.api.request({ url: `/api/auth/totp/${username}`, method: "POST" });
|
|
1276
|
-
}
|
|
1277
|
-
setupTotp(username, method = "app", totp) {
|
|
1278
|
-
return this.api.request({ url: `/api/auth/totp/${username}`, body: clean({
|
|
1279
|
-
method,
|
|
1280
|
-
totp
|
|
1281
|
-
}) });
|
|
1282
|
-
}
|
|
1283
1313
|
}
|
|
1284
1314
|
class Client extends PathEventEmitter {
|
|
1285
1315
|
constructor(api, settings) {
|
|
@@ -1372,7 +1402,7 @@ class Client extends PathEventEmitter {
|
|
|
1372
1402
|
if (settings["theme"]) {
|
|
1373
1403
|
document.body.style.setProperty("--theme-backdrop", (_c = settings["theme"]) == null ? void 0 : _c.background);
|
|
1374
1404
|
document.body.style.setProperty("--theme-primary", (_d = settings["theme"]) == null ? void 0 : _d.primary);
|
|
1375
|
-
document.body.style.setProperty("--theme-accent", (_e = settings["theme"]) == null ? void 0 : _e.
|
|
1405
|
+
document.body.style.setProperty("--theme-accent", (_e = settings["theme"]) == null ? void 0 : _e.accent);
|
|
1376
1406
|
document.body.style.setProperty("--theme-contrast", blackOrWhite((_f = settings["theme"]) == null ? void 0 : _f.background));
|
|
1377
1407
|
}
|
|
1378
1408
|
if (settings["pwa"]) {
|
|
@@ -1391,7 +1421,6 @@ class Client extends PathEventEmitter {
|
|
|
1391
1421
|
const url = this.settings.api.url;
|
|
1392
1422
|
const settings = this.settings.cache;
|
|
1393
1423
|
const android = (platform || this.platform) == "android";
|
|
1394
|
-
console.log("prompt");
|
|
1395
1424
|
let style = document.querySelector("style.momentum-pwa");
|
|
1396
1425
|
if (!style) {
|
|
1397
1426
|
style = document.createElement("style");
|
|
@@ -2258,5 +2287,7 @@ export {
|
|
|
2258
2287
|
Socket,
|
|
2259
2288
|
Static,
|
|
2260
2289
|
Storage$1 as Storage,
|
|
2290
|
+
Token,
|
|
2291
|
+
Totp,
|
|
2261
2292
|
Users
|
|
2262
2293
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ztimson/momentum",
|
|
3
|
-
"version": "0.50.
|
|
3
|
+
"version": "0.50.7",
|
|
4
4
|
"description": "Client library for momentum",
|
|
5
5
|
"keywords": ["Momentum"],
|
|
6
6
|
"author": "Zak Timson <zaktimson@gmail.com>",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"postbuild": "node -e \"const fs=require('fs');fs.cpSync('dist/index.mjs','../server/public/momentum.mjs');fs.cpSync('dist/index.cjs','../server/public/momentum.js')\""
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@ztimson/utils": "0.23.
|
|
27
|
+
"@ztimson/utils": "0.23.8",
|
|
28
28
|
"var-persist": "^1.0.1"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|