@venizia/ardor-kernel 0.4.0 → 0.4.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/README.md +2 -2
- package/dist/base/applications/abstract.d.ts +11 -14
- package/dist/base/applications/abstract.d.ts.map +1 -1
- package/dist/base/applications/abstract.js +20 -17
- package/dist/base/applications/abstract.js.map +1 -1
- package/dist/base/services/auth.d.ts +11 -3
- package/dist/base/services/auth.d.ts.map +1 -1
- package/dist/base/services/auth.js +48 -18
- package/dist/base/services/auth.js.map +1 -1
- package/dist/base/services/network-request.d.ts +25 -93
- package/dist/base/services/network-request.d.ts.map +1 -1
- package/dist/base/services/network-request.js +68 -308
- package/dist/base/services/network-request.js.map +1 -1
- package/dist/common/constants.d.ts +1 -4
- package/dist/common/constants.d.ts.map +1 -1
- package/dist/common/constants.js +1 -4
- package/dist/common/constants.js.map +1 -1
- package/dist/common/keys.d.ts +3 -0
- package/dist/common/keys.d.ts.map +1 -1
- package/dist/common/keys.js +3 -0
- package/dist/common/keys.js.map +1 -1
- package/dist/common/types.d.ts +43 -25
- package/dist/common/types.d.ts.map +1 -1
- package/dist/helpers/auth-token-store.d.ts +14 -0
- package/dist/helpers/auth-token-store.d.ts.map +1 -0
- package/dist/helpers/auth-token-store.js +34 -0
- package/dist/helpers/auth-token-store.js.map +1 -0
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/index.js +1 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/logger.d.ts +12 -12
- package/dist/helpers/logger.d.ts.map +1 -1
- package/dist/helpers/logger.js +0 -4
- package/dist/helpers/logger.js.map +1 -1
- package/dist/helpers/networks/auth-recovery.d.ts +27 -0
- package/dist/helpers/networks/auth-recovery.d.ts.map +1 -0
- package/dist/helpers/networks/auth-recovery.js +45 -0
- package/dist/helpers/networks/auth-recovery.js.map +1 -0
- package/dist/helpers/networks/index.d.ts +3 -3
- package/dist/helpers/networks/index.d.ts.map +1 -1
- package/dist/helpers/networks/index.js +3 -3
- package/dist/helpers/networks/index.js.map +1 -1
- package/dist/helpers/networks/request-body-encoder.d.ts +17 -0
- package/dist/helpers/networks/request-body-encoder.d.ts.map +1 -0
- package/dist/helpers/networks/request-body-encoder.js +72 -0
- package/dist/helpers/networks/request-body-encoder.js.map +1 -0
- package/dist/helpers/networks/response-reader.d.ts +39 -0
- package/dist/helpers/networks/response-reader.d.ts.map +1 -0
- package/dist/helpers/networks/response-reader.js +149 -0
- package/dist/helpers/networks/response-reader.js.map +1 -0
- package/dist/utilities/index.d.ts +0 -2
- package/dist/utilities/index.d.ts.map +1 -1
- package/dist/utilities/index.js +0 -2
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/runtime-config.d.ts +3 -4
- package/dist/utilities/runtime-config.d.ts.map +1 -1
- package/dist/utilities/runtime-config.js +3 -4
- package/dist/utilities/runtime-config.js.map +1 -1
- package/package.json +16 -33
- package/dist/helpers/networks/base-request.d.ts +0 -36
- package/dist/helpers/networks/base-request.d.ts.map +0 -1
- package/dist/helpers/networks/base-request.js +0 -64
- package/dist/helpers/networks/base-request.js.map +0 -1
- package/dist/helpers/networks/common/index.d.ts +0 -2
- package/dist/helpers/networks/common/index.d.ts.map +0 -1
- package/dist/helpers/networks/common/index.js +0 -2
- package/dist/helpers/networks/common/index.js.map +0 -1
- package/dist/helpers/networks/common/types.d.ts +0 -4
- package/dist/helpers/networks/common/types.d.ts.map +0 -1
- package/dist/helpers/networks/common/types.js +0 -2
- package/dist/helpers/networks/common/types.js.map +0 -1
- package/dist/helpers/networks/fetchers/abstract.d.ts +0 -40
- package/dist/helpers/networks/fetchers/abstract.d.ts.map +0 -1
- package/dist/helpers/networks/fetchers/abstract.js +0 -35
- package/dist/helpers/networks/fetchers/abstract.js.map +0 -1
- package/dist/helpers/networks/fetchers/index.d.ts +0 -3
- package/dist/helpers/networks/fetchers/index.d.ts.map +0 -1
- package/dist/helpers/networks/fetchers/index.js +0 -3
- package/dist/helpers/networks/fetchers/index.js.map +0 -1
- package/dist/helpers/networks/fetchers/node-fetch.d.ts +0 -14
- package/dist/helpers/networks/fetchers/node-fetch.d.ts.map +0 -1
- package/dist/helpers/networks/fetchers/node-fetch.js +0 -43
- package/dist/helpers/networks/fetchers/node-fetch.js.map +0 -1
- package/dist/helpers/socket-io-client.d.ts +0 -40
- package/dist/helpers/socket-io-client.d.ts.map +0 -1
- package/dist/helpers/socket-io-client.js +0 -107
- package/dist/helpers/socket-io-client.js.map +0 -1
- package/dist/utilities/parse.d.ts +0 -47
- package/dist/utilities/parse.d.ts.map +0 -1
- package/dist/utilities/parse.js +0 -110
- package/dist/utilities/parse.js.map +0 -1
- package/dist/utilities/url.d.ts +0 -8
- package/dist/utilities/url.d.ts.map +0 -1
- package/dist/utilities/url.js +0 -21
- package/dist/utilities/url.js.map +0 -1
package/README.md
CHANGED
|
@@ -20,9 +20,9 @@ which re-exports this package.
|
|
|
20
20
|
| Decorators | `api()` - logs and rethrows a failing API method |
|
|
21
21
|
| Bindings | `CoreBindings`, `LocalStorageKeys` |
|
|
22
22
|
| Constants | `RequestMethods`, `RequestTypes`, `RequestBodyTypes`, `RequestCountData`, `HeaderConstants`, `Environments`, `App` |
|
|
23
|
-
| Network | `
|
|
23
|
+
| Network | `NetworkHeaders`, `RequestBodyEncoder`, `ResponseReader`, `AuthRecovery`, `AuthTokenStore` (the fetch transport is IGNIS's `NodeFetchNetworkRequest`) |
|
|
24
24
|
| Helpers | `Logger`, `BaseHelper`, `SocketIOClientHelper` |
|
|
25
|
-
| Utilities | `isDefined`, `isString`, `isNumber`, `isObject`, `isBrowser`, `isValidDate`, `isEditableTarget`, `
|
|
25
|
+
| Utilities | `isDefined`, `isString`, `isNumber`, `isObject`, `isBrowser`, `isValidDate`, `isEditableTarget`, `toDataUrl` |
|
|
26
26
|
| Types | `IdType`, `AnyType`, `AnyObject`, `ValueOrPromise`, `ValueOf`, `TConstValue`, `TPaths`, `TFullPaths`, `ISendParams`, `IRestDataProviderOptions`, `IApplicationInfo`, ... |
|
|
27
27
|
|
|
28
28
|
## License
|
|
@@ -21,12 +21,13 @@ export declare abstract class AbstractArdorApplication extends Container impleme
|
|
|
21
21
|
abstract getAppInfo(): ValueOrPromise<IApplicationInfo>;
|
|
22
22
|
/** What `start()` resolved from `artifacts()`; unset when `preConfigure()` runs without it. */
|
|
23
23
|
private resolvedIndexes;
|
|
24
|
+
/** Stays synchronous unless `getAppInfo()` returns a promise: a subclass may still return either. */
|
|
24
25
|
preConfigure(): ValueOrPromise<void>;
|
|
26
|
+
private bindInfoAndArtifacts;
|
|
25
27
|
/**
|
|
26
|
-
* Binds every stereotyped class under
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* otherwise. One data provider then serves react-admin, the auth provider and every hook.
|
|
28
|
+
* Binds every stereotyped class under its key and scope, then each `@provide` method under its
|
|
29
|
+
* own key, as IGNIS's `bindProvidedKeys` does: a lazy provider, SINGLETON unless `scope` says
|
|
30
|
+
* otherwise.
|
|
30
31
|
*/
|
|
31
32
|
registerArtifacts(): void;
|
|
32
33
|
/** Classes bound under literal keys before `bindContext()` runs. */
|
|
@@ -39,19 +40,15 @@ export declare abstract class AbstractArdorApplication extends Container impleme
|
|
|
39
40
|
/** The feature packages this application mounts, bound under `CoreBindings.FEATURES`. */
|
|
40
41
|
features(): Array<IFeatureBase>;
|
|
41
42
|
/**
|
|
42
|
-
* `artifacts()` with each group
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* inlined by a bundler plugin and is left alone, like a plain index.
|
|
43
|
+
* `artifacts()` with each group without `content` replaced by the index its `resolve()` returns.
|
|
44
|
+
* Resolving imports the modules, which decorates their classes: it must finish before
|
|
45
|
+
* `registerArtifacts()` reads the discovery list.
|
|
46
46
|
*/
|
|
47
47
|
private resolveArtifactIndexes;
|
|
48
48
|
/**
|
|
49
|
-
* Every class
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* An IGNIS artifact group (`isArtifactGroup`) is not an index: its kind fields are getters that
|
|
53
|
-
* throw when read. Only the `content` a bundler plugin inlined is a flat index, so that is what
|
|
54
|
-
* gets checked; a group without content is resolved by IGNIS and has nothing to check here.
|
|
49
|
+
* Every class a flat index lists must be discovered, or its binding is silently never made. An
|
|
50
|
+
* artifact group (`isArtifactGroup`) is not an index - its kind fields throw when read - so only
|
|
51
|
+
* its inlined `content` is checked.
|
|
55
52
|
*/
|
|
56
53
|
private assertIndexed;
|
|
57
54
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract.d.ts","sourceRoot":"","sources":["../../../src/base/applications/abstract.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,OAAO,EAEZ,SAAS,EAET,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAYlB,kGAAkG;AAClG,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,OAAO,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,kEAAkE;IAClE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,8BAAsB,wBAAyB,SAAQ,SAAU,YAAW,iBAAiB;IAC3F,QAAQ,CAAC,WAAW,IAAI,cAAc,CAAC,IAAI,CAAC;IAC5C,QAAQ,CAAC,UAAU,IAAI,cAAc,CAAC,gBAAgB,CAAC;IAEvD,+FAA+F;IAC/F,OAAO,CAAC,eAAe,CAAoC;IAE3D,YAAY,IAAI,cAAc,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"abstract.d.ts","sourceRoot":"","sources":["../../../src/base/applications/abstract.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,OAAO,EAEZ,SAAS,EAET,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAYlB,kGAAkG;AAClG,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,OAAO,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,kEAAkE;IAClE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,8BAAsB,wBAAyB,SAAQ,SAAU,YAAW,iBAAiB;IAC3F,QAAQ,CAAC,WAAW,IAAI,cAAc,CAAC,IAAI,CAAC;IAC5C,QAAQ,CAAC,UAAU,IAAI,cAAc,CAAC,gBAAgB,CAAC;IAEvD,+FAA+F;IAC/F,OAAO,CAAC,eAAe,CAAoC;IAE3D,qGAAqG;IACrG,YAAY,IAAI,cAAc,CAAC,IAAI,CAAC;IAYpC,OAAO,CAAC,oBAAoB;IAe5B;;;;OAIG;IACH,iBAAiB,IAAI,IAAI;IA4CzB,oEAAoE;IACpE,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAI9C;;;OAGG;IACH,SAAS,IAAI,KAAK,CAAC,cAAc,CAAC;IAIlC,yFAAyF;IACzF,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC;IAI/B;;;;OAIG;YACW,sBAAsB;IA8BpC;;;;OAIG;IACH,OAAO,CAAC,aAAa;IA8BrB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAyBxB,aAAa,IAAI,cAAc,CAAC,IAAI,CAAC;IAErC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC;IASvE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC;IAS1E,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC;IAS1E,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC;IASzE,sFAAsF;IACtF,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;IAS7D,KAAK;IAMX,oGAAoG;IACpG,OAAO,CAAC,gBAAgB;CA0BzB;AAED,8BAAsB,oBAAqB,SAAQ,wBAAwB;CAAG"}
|
|
@@ -16,9 +16,17 @@ const ArtifactIndexKinds = [
|
|
|
16
16
|
* SINGLETON (IGNIS's server uses transient): a hook resolves on every render.
|
|
17
17
|
*/
|
|
18
18
|
export class AbstractArdorApplication extends Container {
|
|
19
|
+
/** Stays synchronous unless `getAppInfo()` returns a promise: a subclass may still return either. */
|
|
19
20
|
preConfigure() {
|
|
20
21
|
this.bind({ key: CoreBindings.APPLICATION_INSTANCE }).toValue(this);
|
|
21
|
-
|
|
22
|
+
const info = this.getAppInfo();
|
|
23
|
+
if (info instanceof Promise) {
|
|
24
|
+
return info.then((resolved) => this.bindInfoAndArtifacts({ info: resolved }));
|
|
25
|
+
}
|
|
26
|
+
return this.bindInfoAndArtifacts({ info });
|
|
27
|
+
}
|
|
28
|
+
bindInfoAndArtifacts(opts) {
|
|
29
|
+
this.bind({ key: CoreBindings.APPLICATION_INFO }).toValue(opts.info);
|
|
22
30
|
// Least explicit first, so the most explicit wins: stereotype, features, bindingList(), bindContext().
|
|
23
31
|
this.registerArtifacts();
|
|
24
32
|
this.registerFeatures({ features: this.features() });
|
|
@@ -29,10 +37,9 @@ export class AbstractArdorApplication extends Container {
|
|
|
29
37
|
return this.bindContext();
|
|
30
38
|
}
|
|
31
39
|
/**
|
|
32
|
-
* Binds every stereotyped class under
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* otherwise. One data provider then serves react-admin, the auth provider and every hook.
|
|
40
|
+
* Binds every stereotyped class under its key and scope, then each `@provide` method under its
|
|
41
|
+
* own key, as IGNIS's `bindProvidedKeys` does: a lazy provider, SINGLETON unless `scope` says
|
|
42
|
+
* otherwise.
|
|
36
43
|
*/
|
|
37
44
|
registerArtifacts() {
|
|
38
45
|
const registry = MetadataRegistry.getInstance();
|
|
@@ -45,7 +52,7 @@ export class AbstractArdorApplication extends Container {
|
|
|
45
52
|
// first. Checked here, never at decoration, so a hot reload that re-decorates a class is no error.
|
|
46
53
|
ArtifactBindingKeys.assertNoDerivedCollision({
|
|
47
54
|
caller: 'registerArtifacts',
|
|
48
|
-
entries: targets.flatMap(target => {
|
|
55
|
+
entries: targets.flatMap((target) => {
|
|
49
56
|
const metadata = registry.getArtifactMetadata({ target });
|
|
50
57
|
if (!metadata) {
|
|
51
58
|
return [];
|
|
@@ -64,7 +71,7 @@ export class AbstractArdorApplication extends Container {
|
|
|
64
71
|
.setScope(registry.getArtifactMetadata({ target })?.scope ?? BindingScopes.SINGLETON);
|
|
65
72
|
for (const entry of registry.getProvideMetadata({ target })) {
|
|
66
73
|
this.bind({ key: entry.key })
|
|
67
|
-
.toProvider(container => {
|
|
74
|
+
.toProvider((container) => {
|
|
68
75
|
const instance = container.get({ key });
|
|
69
76
|
return instance[entry.methodName]();
|
|
70
77
|
})
|
|
@@ -88,10 +95,9 @@ export class AbstractArdorApplication extends Container {
|
|
|
88
95
|
return [];
|
|
89
96
|
}
|
|
90
97
|
/**
|
|
91
|
-
* `artifacts()` with each group
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* inlined by a bundler plugin and is left alone, like a plain index.
|
|
98
|
+
* `artifacts()` with each group without `content` replaced by the index its `resolve()` returns.
|
|
99
|
+
* Resolving imports the modules, which decorates their classes: it must finish before
|
|
100
|
+
* `registerArtifacts()` reads the discovery list.
|
|
95
101
|
*/
|
|
96
102
|
async resolveArtifactIndexes() {
|
|
97
103
|
const resolved = [];
|
|
@@ -113,12 +119,9 @@ export class AbstractArdorApplication extends Container {
|
|
|
113
119
|
return resolved;
|
|
114
120
|
}
|
|
115
121
|
/**
|
|
116
|
-
* Every class
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* An IGNIS artifact group (`isArtifactGroup`) is not an index: its kind fields are getters that
|
|
120
|
-
* throw when read. Only the `content` a bundler plugin inlined is a flat index, so that is what
|
|
121
|
-
* gets checked; a group without content is resolved by IGNIS and has nothing to check here.
|
|
122
|
+
* Every class a flat index lists must be discovered, or its binding is silently never made. An
|
|
123
|
+
* artifact group (`isArtifactGroup`) is not an index - its kind fields throw when read - so only
|
|
124
|
+
* its inlined `content` is checked.
|
|
122
125
|
*/
|
|
123
126
|
assertIndexed(opts) {
|
|
124
127
|
const { indexes, discovered } = opts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../../src/base/applications/abstract.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,aAAa,EACb,SAAS,EACT,QAAQ,GAGT,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,YAAY,GAMb,MAAM,UAAU,CAAC;AAElB,oFAAoF;AACpF,MAAM,kBAAkB,GAAG;IACzB,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,cAAc;IACd,UAAU;IACV,aAAa;CACyC,CAAC;AAWzD;;;;GAIG;AACH,MAAM,OAAgB,wBAAyB,SAAQ,SAAS;IAO9D,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../../src/base/applications/abstract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import { type IdType } from '../../common/index.js';
|
|
1
|
+
import { type AnyType, type IAuthTokenRecord, type IdType } from '../../common/index.js';
|
|
2
2
|
import { BaseService } from './base.js';
|
|
3
3
|
export declare class DefaultAuthService extends BaseService {
|
|
4
4
|
constructor();
|
|
5
|
-
|
|
5
|
+
/** What is stored under the key, or `null` when nothing is, also outside a browser. */
|
|
6
|
+
private readStored;
|
|
7
|
+
/**
|
|
8
|
+
* The stored value parsed, or `undefined` when nothing usable is stored. Only the error NAME is
|
|
9
|
+
* logged: the message of a JSON parse error quotes the text it could not parse, which can be a token.
|
|
10
|
+
*/
|
|
11
|
+
private parseStored;
|
|
12
|
+
getUser(): AnyType;
|
|
6
13
|
getRoles(): Set<string>;
|
|
7
|
-
|
|
14
|
+
/** The stored token, `null` for every visitor who has not signed in. */
|
|
15
|
+
getAuth(): IAuthTokenRecord | null;
|
|
8
16
|
saveAuth(opts: {
|
|
9
17
|
userId: number | string;
|
|
10
18
|
username?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/base/services/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/base/services/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,MAAM,EAAoB,MAAM,UAAU,CAAC;AAE9F,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,qBAAa,kBAAmB,SAAQ,WAAW;;IAKjD,uFAAuF;IACvF,OAAO,CAAC,UAAU;IAIlB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAmBnB,OAAO,IAAI,OAAO;IAUlB,QAAQ;IAUR,wEAAwE;IACxE,OAAO,IAAI,gBAAgB,GAAG,IAAI;IAIlC,QAAQ,CAAC,IAAI,EAAE;QACb,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;QAExB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAEvC;;;WAGG;QACH,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;KAC/B;IAoBD,OAAO;CAgBR"}
|
|
@@ -1,43 +1,73 @@
|
|
|
1
|
+
import { getError } from '@venizia/ignis-inversion';
|
|
1
2
|
import { LocalStorageKeys } from '../../common/index.js';
|
|
3
|
+
import { AuthTokenStore } from '../../helpers/index.js';
|
|
2
4
|
import { BaseService } from './base.js';
|
|
3
5
|
export class DefaultAuthService extends BaseService {
|
|
4
6
|
constructor() {
|
|
5
7
|
super({ scope: DefaultAuthService.name });
|
|
6
8
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return
|
|
10
|
-
}
|
|
11
|
-
getRoles() {
|
|
12
|
-
const stored = localStorage.getItem(LocalStorageKeys.KEY_AUTH_PERMISSION);
|
|
13
|
-
const roles = JSON.parse(stored?.length ? stored : '[]');
|
|
14
|
-
return new Set(roles);
|
|
9
|
+
/** What is stored under the key, or `null` when nothing is, also outside a browser. */
|
|
10
|
+
readStored(opts) {
|
|
11
|
+
return typeof localStorage === 'undefined' ? null : localStorage.getItem(opts.key);
|
|
15
12
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
/**
|
|
14
|
+
* The stored value parsed, or `undefined` when nothing usable is stored. Only the error NAME is
|
|
15
|
+
* logged: the message of a JSON parse error quotes the text it could not parse, which can be a token.
|
|
16
|
+
*/
|
|
17
|
+
parseStored(opts) {
|
|
18
|
+
const stored = this.readStored({ key: opts.key });
|
|
19
|
+
if (!stored?.length) {
|
|
20
|
+
return undefined;
|
|
21
21
|
}
|
|
22
22
|
try {
|
|
23
23
|
return JSON.parse(stored);
|
|
24
24
|
}
|
|
25
25
|
catch (error) {
|
|
26
|
-
this.logger.
|
|
27
|
-
return
|
|
26
|
+
this.logger.warn('[%s] %s is not valid JSON, read as empty | error: %s', opts.method, opts.key, error instanceof Error ? error.name : typeof error);
|
|
27
|
+
return undefined;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
getUser() {
|
|
31
|
+
const identity = this.parseStored({
|
|
32
|
+
key: LocalStorageKeys.KEY_AUTH_IDENTITY,
|
|
33
|
+
method: 'getUser',
|
|
34
|
+
});
|
|
35
|
+
const isRecord = typeof identity === 'object' && identity !== null && !Array.isArray(identity);
|
|
36
|
+
return isRecord ? identity : {};
|
|
37
|
+
}
|
|
38
|
+
getRoles() {
|
|
39
|
+
const stored = this.parseStored({
|
|
40
|
+
key: LocalStorageKeys.KEY_AUTH_PERMISSION,
|
|
41
|
+
method: 'getRoles',
|
|
42
|
+
});
|
|
43
|
+
const roles = Array.isArray(stored) ? stored.filter((role) => typeof role === 'string') : [];
|
|
44
|
+
return new Set(roles);
|
|
45
|
+
}
|
|
46
|
+
/** The stored token, `null` for every visitor who has not signed in. */
|
|
47
|
+
getAuth() {
|
|
48
|
+
return AuthTokenStore.read() ?? null;
|
|
49
|
+
}
|
|
30
50
|
saveAuth(opts) {
|
|
51
|
+
// Not a silent skip: a sign-in that is not kept would look like it worked.
|
|
52
|
+
if (typeof localStorage === 'undefined') {
|
|
53
|
+
throw getError({
|
|
54
|
+
message: '[saveAuth] localStorage is not available',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
31
57
|
const { token, userId, username = '', provider = '', referenceId = '', roles } = opts;
|
|
32
|
-
|
|
58
|
+
AuthTokenStore.write({ token, provider });
|
|
33
59
|
localStorage.setItem(LocalStorageKeys.KEY_AUTH_IDENTITY, JSON.stringify({ userId, username, referenceId, provider }));
|
|
34
60
|
if (roles) {
|
|
35
61
|
localStorage.setItem(LocalStorageKeys.KEY_AUTH_PERMISSION, JSON.stringify(roles));
|
|
36
62
|
}
|
|
37
63
|
}
|
|
38
64
|
cleanUp() {
|
|
39
|
-
|
|
40
|
-
|
|
65
|
+
if (typeof localStorage === 'undefined') {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
Object.keys(localStorage).forEach((key) => {
|
|
69
|
+
if (!key.startsWith(LocalStorageKeys.PREFIX_AUTH) &&
|
|
70
|
+
!key.startsWith(LocalStorageKeys.PREFIX_OAUTH2)) {
|
|
41
71
|
return;
|
|
42
72
|
}
|
|
43
73
|
localStorage.removeItem(key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/base/services/auth.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/base/services/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { NodeFetchNetworkRequest } from '@venizia/ignis-helpers/core';
|
|
2
|
+
import { type IApplicationInfo, type IAuthTokenRecord, type IAuthRecoveryOptions, type IDataSourceAuth, type IGetRequestPropsParams, type IGetRequestPropsResult, type INetworkResponse, type INoAuthOptions, RequestCountData, type TConstValue, type TNoAuthPathRegex, type TRequestMethod, type TRequestType } from '../../common/index.js';
|
|
3
|
+
import { type IEncodedBody, ResponseReader } from '../../helpers/index.js';
|
|
3
4
|
import { BaseService } from './base.js';
|
|
4
|
-
export interface IAuthTokenRecord {
|
|
5
|
-
type?: string;
|
|
6
|
-
value: string;
|
|
7
|
-
provider?: string;
|
|
8
|
-
}
|
|
9
|
-
/** What an `HttpDataSource` hook reads from the request it is asked about. */
|
|
10
|
-
export interface IDataSourceRequestContext {
|
|
11
|
-
paths: Array<string>;
|
|
12
|
-
}
|
|
13
5
|
/**
|
|
14
|
-
* The
|
|
15
|
-
*
|
|
16
|
-
* paths, and one shared refresh per 401 burst. The hooks run on every send, the retry included.
|
|
17
|
-
*/
|
|
18
|
-
export interface IDataSourceAuth {
|
|
19
|
-
authTokenResolver: (context: IDataSourceRequestContext) => IAuthTokenRecord | undefined;
|
|
20
|
-
headersResolver: (context: IDataSourceRequestContext) => Record<string, string>;
|
|
21
|
-
onUnauthorized: (context: IDataSourceRequestContext) => Promise<boolean>;
|
|
22
|
-
errorRootKey: string;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* The options hold data: the base URL, headers, the no-auth lists and the refresh path. Behaviour
|
|
26
|
-
* is in the protected hooks, each taking one `opts` object - `resolveAuthToken`, `isNoAuthPath`,
|
|
27
|
-
* `refreshToken`, `onAuthFailure` and `buildRequestTracingId` - which a subclass overrides, and
|
|
28
|
-
* `DefaultRestDataProvider.createNetworkService` returns.
|
|
6
|
+
* The options hold data (the base URL, headers, the no-auth lists, the refresh path); behaviour is
|
|
7
|
+
* in the protected hooks, each taking one `opts` object, which a subclass overrides.
|
|
29
8
|
*/
|
|
30
9
|
export declare class DefaultNetworkRequestService extends BaseService {
|
|
31
10
|
protected noAuthPaths?: string[];
|
|
@@ -34,7 +13,7 @@ export declare class DefaultNetworkRequestService extends BaseService {
|
|
|
34
13
|
protected networkRequest: NodeFetchNetworkRequest;
|
|
35
14
|
protected baseUrl: string;
|
|
36
15
|
protected authRecovery?: IAuthRecoveryOptions;
|
|
37
|
-
private
|
|
16
|
+
private readonly recovery;
|
|
38
17
|
constructor(opts: INoAuthOptions & {
|
|
39
18
|
name: string;
|
|
40
19
|
baseUrl?: string;
|
|
@@ -42,9 +21,8 @@ export declare class DefaultNetworkRequestService extends BaseService {
|
|
|
42
21
|
authRecovery?: IAuthRecoveryOptions;
|
|
43
22
|
});
|
|
44
23
|
/**
|
|
45
|
-
*
|
|
46
|
-
* and what to hand an `HttpDataSource` as its `authTokenResolver
|
|
47
|
-
* same token.
|
|
24
|
+
* The stored token (`AuthTokenStore.read`), `undefined` outside a browser. The default of
|
|
25
|
+
* `resolveAuthToken`, and what to hand an `HttpDataSource` as its `authTokenResolver`.
|
|
48
26
|
*/
|
|
49
27
|
static readAuthTokenFromStorage(): IAuthTokenRecord | undefined;
|
|
50
28
|
/**
|
|
@@ -62,10 +40,8 @@ export declare class DefaultNetworkRequestService extends BaseService {
|
|
|
62
40
|
paths?: string[];
|
|
63
41
|
}): boolean;
|
|
64
42
|
/**
|
|
65
|
-
* Refreshes the session after a 401.
|
|
66
|
-
*
|
|
67
|
-
* when the refresh failed, and `onAuthFailure` runs. A request to `authRecovery.refreshTokenPath`
|
|
68
|
-
* never gets here.
|
|
43
|
+
* Refreshes the session after a 401. `true`: refreshed, the request is retried; `false`: this
|
|
44
|
+
* service has no refresh (the default); a throw: the refresh failed and `onAuthFailure` runs.
|
|
69
45
|
*/
|
|
70
46
|
protected refreshToken(): Promise<boolean>;
|
|
71
47
|
/** Runs once when `refreshToken` threw. The place to send the user back to sign-in. */
|
|
@@ -79,19 +55,14 @@ export declare class DefaultNetworkRequestService extends BaseService {
|
|
|
79
55
|
input?: TNoAuthPathRegex;
|
|
80
56
|
}): RegExp[];
|
|
81
57
|
/**
|
|
82
|
-
* Refreshes the session, once for every 401 in flight on either transport
|
|
83
|
-
* `refreshToken`
|
|
84
|
-
* calls, so a refresh is made in one place.
|
|
58
|
+
* Refreshes the session, once for every 401 in flight on either transport (see `AuthRecovery`).
|
|
59
|
+
* Also what `DefaultAuthProvider.refreshToken` calls, so a refresh is made in one place.
|
|
85
60
|
*/
|
|
86
61
|
refresh(): Promise<boolean>;
|
|
87
|
-
private canRecover;
|
|
88
62
|
/**
|
|
89
|
-
* Spread into an `HttpDataSource`'s settings
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* data provider. Any other 401 joins this service's `refresh`: one `refreshToken` call for every
|
|
93
|
-
* 401 in flight on either transport, `onAuthFailure` on a failed one, and no retry when the
|
|
94
|
-
* service has no refresh. The refresh is shared, so one call's abort never cancels it.
|
|
63
|
+
* Spread into an `HttpDataSource`'s settings, so its requests carry the session headers and the
|
|
64
|
+
* timezone as read at send time (and the channel and tracing id, given the data provider's
|
|
65
|
+
* options), and a 401 joins this service's shared `refresh`. A no-auth path gets no token.
|
|
95
66
|
*/
|
|
96
67
|
getDataSourceAuth(opts?: Pick<IGetRequestPropsParams, 'restDataProviderOptions' | 'applicationInfo'>): IDataSourceAuth;
|
|
97
68
|
getRequestAuthorizationHeader(): {
|
|
@@ -107,69 +78,30 @@ export declare class DefaultNetworkRequestService extends BaseService {
|
|
|
107
78
|
}): void;
|
|
108
79
|
/** The timezone, then whatever `setHeaders` holds now. Both transports send these. */
|
|
109
80
|
protected getSessionHeaders(): Record<string, string>;
|
|
110
|
-
/** The request channel
|
|
81
|
+
/** The request channel (`RequestChannel.WEB` unless configured) and a fresh tracing id. */
|
|
111
82
|
protected getTracingHeaders(opts: Pick<IGetRequestPropsParams, 'restDataProviderOptions' | 'applicationInfo'>): Record<string, string>;
|
|
112
83
|
getRequestHeader(opts: {
|
|
113
84
|
resource: string;
|
|
114
85
|
}): Record<string, string>;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
key: string;
|
|
121
|
-
value: unknown;
|
|
122
|
-
bodyType: string;
|
|
123
|
-
}): string;
|
|
124
|
-
/** Skips only `undefined` and `null`: `0`, `false` and `''` are values the caller meant to send. */
|
|
125
|
-
protected appendFormDataValue(opts: {
|
|
126
|
-
formData: FormData;
|
|
127
|
-
key: string;
|
|
128
|
-
value: unknown;
|
|
129
|
-
}): void;
|
|
130
|
-
/** The file name a `Content-Disposition` header names, `filename*` before `filename`. */
|
|
131
|
-
protected parseFilenameFromContentDisposition(opts: {
|
|
132
|
-
header: string;
|
|
133
|
-
}): string | undefined;
|
|
86
|
+
/** The body as it is sent and the content type to send it under. Override to encode another way. */
|
|
87
|
+
protected encodeBody(opts: {
|
|
88
|
+
bodyType?: string;
|
|
89
|
+
body: unknown;
|
|
90
|
+
}): IEncodedBody;
|
|
134
91
|
getRequestProps(params: IGetRequestPropsParams): IGetRequestPropsResult;
|
|
135
|
-
/**
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* A failed response as an `ApplicationError`, mapped like IGNIS `HttpDataSource`: the HTTP status,
|
|
139
|
-
* the server's code and args, its `extra` with the `requestId` added, and `details.cause`.
|
|
140
|
-
* `message` is the server's text, not a log line, because react-admin shows it to the user.
|
|
141
|
-
*/
|
|
142
|
-
private toResponseError;
|
|
143
|
-
convertResponse<TData = AnyType>(opts: {
|
|
144
|
-
response: {
|
|
145
|
-
data: TData | {
|
|
146
|
-
data: TData;
|
|
147
|
-
count?: number;
|
|
148
|
-
};
|
|
149
|
-
headers: Record<string, AnyType>;
|
|
150
|
-
};
|
|
151
|
-
type: string;
|
|
152
|
-
requestCountData?: TConstValue<typeof RequestCountData>;
|
|
153
|
-
}): {
|
|
92
|
+
/** Reads a response by the request type. See `ResponseReader.convert`. */
|
|
93
|
+
convertResponse<TData = unknown>(opts: Parameters<typeof ResponseReader.convert<TData>>[0]): {
|
|
154
94
|
data: TData;
|
|
155
95
|
count?: number;
|
|
156
96
|
total?: number;
|
|
157
97
|
};
|
|
158
|
-
|
|
159
|
-
doRequest<ReturnType = AnyType>(opts: IGetRequestPropsResult & {
|
|
98
|
+
doRequest<TResult = unknown>(opts: IGetRequestPropsResult & {
|
|
160
99
|
baseUrl?: string;
|
|
161
100
|
query?: any;
|
|
162
101
|
type: TRequestType;
|
|
163
102
|
method: TRequestMethod;
|
|
164
103
|
paths: string[];
|
|
165
104
|
requestCountData?: TConstValue<typeof RequestCountData>;
|
|
166
|
-
}): Promise<
|
|
167
|
-
data: ReturnType;
|
|
168
|
-
count?: number;
|
|
169
|
-
total?: number;
|
|
170
|
-
filename?: string;
|
|
171
|
-
contentDisposition?: string;
|
|
172
|
-
extra?: Record<string, unknown>;
|
|
173
|
-
}>;
|
|
105
|
+
}): Promise<INetworkResponse<TResult>>;
|
|
174
106
|
}
|
|
175
107
|
//# sourceMappingURL=network-request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-request.d.ts","sourceRoot":"","sources":["../../../src/base/services/network-request.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"network-request.d.ts","sourceRoot":"","sources":["../../../src/base/services/network-request.ts"],"names":[],"mappings":"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"}
|