@venizia/ardor-admin 0.1.4-3 → 0.1.4-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 +1 -1
- package/dist/common/types.d.ts +3 -4
- package/dist/common/types.d.ts.map +1 -1
- package/dist/components/application.d.ts.map +1 -1
- package/dist/components/application.js +14 -8
- package/dist/components/application.js.map +1 -1
- package/dist/features/feature.d.ts +21 -19
- package/dist/features/feature.d.ts.map +1 -1
- package/dist/features/feature.js +37 -35
- package/dist/features/feature.js.map +1 -1
- package/dist/features/index.d.ts +1 -1
- package/dist/features/index.d.ts.map +1 -1
- package/dist/features/index.js +3 -3
- package/dist/features/index.js.map +1 -1
- package/dist/features/messages.d.ts +3 -3
- package/dist/hooks/use-features.d.ts +2 -2
- package/dist/hooks/use-features.d.ts.map +1 -1
- package/dist/hooks/use-features.js +2 -2
- package/dist/hooks/use-features.js.map +1 -1
- package/dist/hooks/use-request-header-locale.d.ts +4 -2
- package/dist/hooks/use-request-header-locale.d.ts.map +1 -1
- package/dist/hooks/use-request-header-locale.js +4 -4
- package/dist/hooks/use-request-header-locale.js.map +1 -1
- package/dist/providers/auth.d.ts +75 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +161 -23
- package/dist/providers/auth.js.map +1 -1
- package/dist/providers/i18n.d.ts +24 -4
- package/dist/providers/i18n.d.ts.map +1 -1
- package/dist/providers/i18n.js +31 -12
- package/dist/providers/i18n.js.map +1 -1
- package/dist/providers/rest-data.d.ts +32 -1
- package/dist/providers/rest-data.d.ts.map +1 -1
- package/dist/providers/rest-data.js +74 -114
- package/dist/providers/rest-data.js.map +1 -1
- package/package.json +18 -12
package/dist/providers/auth.js
CHANGED
|
@@ -11,9 +11,15 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
13
|
var DefaultAuthProvider_1;
|
|
14
|
-
import { inject } from '@venizia/ignis-inversion';
|
|
14
|
+
import { getError, inject } from '@venizia/ignis-inversion';
|
|
15
15
|
import { removeDoubleSlashes } from 'ra-core';
|
|
16
16
|
import { BaseProvider, CoreBindings, RequestMethods, } from '@venizia/ardor-kernel';
|
|
17
|
+
/**
|
|
18
|
+
* The options hold data (`paths`); behaviour is in the protected hooks, each taking one `opts`
|
|
19
|
+
* object: `buildSignInBody`, `resolveUsername`, `beforeSaveSession`, `saveSession` and
|
|
20
|
+
* `readSignInSession` around `login`, and the page paths (`signInPath`, `afterLoginPath`,
|
|
21
|
+
* `loginPagePath`, `unauthorizedPagePath`).
|
|
22
|
+
*/
|
|
17
23
|
let DefaultAuthProvider = DefaultAuthProvider_1 = class DefaultAuthProvider extends BaseProvider {
|
|
18
24
|
constructor(restDataProvider, authProviderOptions, authService, permissionProvider) {
|
|
19
25
|
super({ scope: DefaultAuthProvider_1.name });
|
|
@@ -22,26 +28,153 @@ let DefaultAuthProvider = DefaultAuthProvider_1 = class DefaultAuthProvider exte
|
|
|
22
28
|
this.authService = authService;
|
|
23
29
|
this.permissionProvider = permissionProvider;
|
|
24
30
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
// --- Paths -----------------------------------------------------------------------------------
|
|
32
|
+
/** Where `login` posts: `paths.signIn`, else the IGNIS auth controller's route. */
|
|
33
|
+
get signInPath() {
|
|
34
|
+
return this.authProviderOptions.paths?.signIn ?? '/auth/sign-in';
|
|
35
|
+
}
|
|
36
|
+
/** Where the admin goes once `login` resolves: `paths.afterLogin`, else `/`. */
|
|
37
|
+
get afterLoginPath() {
|
|
38
|
+
return this.authProviderOptions.paths?.afterLogin ?? '/';
|
|
39
|
+
}
|
|
40
|
+
/** The route of the login page, which `checkAuth` and a `401` redirect to. */
|
|
41
|
+
get loginPagePath() {
|
|
42
|
+
return '/login';
|
|
43
|
+
}
|
|
44
|
+
/** The route a `403` redirects to; the application mounts it. */
|
|
45
|
+
get unauthorizedPagePath() {
|
|
46
|
+
return '/unauthorized';
|
|
47
|
+
}
|
|
48
|
+
// --- Sign-in hooks ---------------------------------------------------------------------------
|
|
49
|
+
/**
|
|
50
|
+
* The body of the sign-in request: the IGNIS sign-in body, made from `params.username` and
|
|
51
|
+
* `params.password`. Override it when the API wants another shape; `opts.params` as it is posts
|
|
52
|
+
* the login form unchanged.
|
|
53
|
+
*/
|
|
54
|
+
buildSignInBody(opts) {
|
|
55
|
+
return {
|
|
56
|
+
identifier: { scheme: 'username', value: opts.params?.username },
|
|
57
|
+
credential: { scheme: 'basic', value: opts.params?.password },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* What a sign-in response carries. IGNIS's auth controller returns whatever the application's
|
|
62
|
+
* `signIn` returns, so two shapes are read: `{ userId, roles?, token: { value, type } }` (the
|
|
63
|
+
* recommended one), and `{ token: '<jwt>' }`, a Bearer token whose user id is a claim of the token
|
|
64
|
+
* itself (`userId`, else `sub`). Roles come from the response, else from the token's `roles`
|
|
65
|
+
* claim. A response with no token or no user id throws: storing `undefined` would pass `login`
|
|
66
|
+
* and fail every check after it.
|
|
67
|
+
*/
|
|
68
|
+
readSignInSession(opts) {
|
|
69
|
+
const { userId, token, roles } = (opts.data ?? {});
|
|
70
|
+
const record = typeof token === 'string'
|
|
71
|
+
? { value: token, type: 'Bearer' }
|
|
72
|
+
: token;
|
|
73
|
+
if (typeof record?.value !== 'string' || record.value.length === 0) {
|
|
74
|
+
throw getError({
|
|
75
|
+
message: '[login] The sign-in response carries no token | Expect { userId, token: { value, type } } or { token: <jwt> }',
|
|
42
76
|
});
|
|
77
|
+
}
|
|
78
|
+
const claims = this.decodeJwtClaims({ jwt: record.value });
|
|
79
|
+
const isUserId = (value) => {
|
|
80
|
+
return typeof value === 'number' || (typeof value === 'string' && value.length > 0);
|
|
81
|
+
};
|
|
82
|
+
const resolvedUserId = [userId, claims?.userId, claims?.sub].find(isUserId);
|
|
83
|
+
if (resolvedUserId === undefined) {
|
|
84
|
+
throw getError({
|
|
85
|
+
message: '[login] The sign-in response carries no user id | Send userId next to the token, or put a userId or sub claim in the JWT',
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
userId: resolvedUserId,
|
|
90
|
+
token: {
|
|
91
|
+
value: record.value,
|
|
92
|
+
type: typeof record.type === 'string' ? record.type : 'Bearer',
|
|
93
|
+
},
|
|
94
|
+
roles: this.readRoleNames({ roles: roles ?? claims?.roles }),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/** The claims of a JWT, or `undefined` for a token that is not one. The signature is not checked. */
|
|
98
|
+
decodeJwtClaims(opts) {
|
|
99
|
+
const segment = opts.jwt.split('.')[1];
|
|
100
|
+
if (!segment) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const bytes = Uint8Array.from(atob(segment.replace(/-/g, '+').replace(/_/g, '/')), (char) => char.charCodeAt(0));
|
|
105
|
+
const claims = JSON.parse(new TextDecoder().decode(bytes));
|
|
106
|
+
return typeof claims === 'object' && claims !== null
|
|
107
|
+
? claims
|
|
108
|
+
: undefined;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The role names of a list: a string is a name, and an object is named by its `identifier`, else
|
|
116
|
+
* its `name` (IGNIS's role model has an `identifier`). An entry that is neither is skipped.
|
|
117
|
+
*/
|
|
118
|
+
readRoleNames(opts) {
|
|
119
|
+
if (!Array.isArray(opts.roles)) {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
const names = [];
|
|
123
|
+
for (const role of opts.roles) {
|
|
124
|
+
const named = typeof role === 'object' && role !== null ? role : {};
|
|
125
|
+
const name = typeof role === 'string'
|
|
126
|
+
? role
|
|
127
|
+
: [named.identifier, named.name].find((v) => typeof v === 'string');
|
|
128
|
+
if (typeof name === 'string' && name.length > 0) {
|
|
129
|
+
names.push(name);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return names;
|
|
133
|
+
}
|
|
134
|
+
/** The username `login` remembers with the identity. Default: `params.username`. */
|
|
135
|
+
resolveUsername(opts) {
|
|
136
|
+
return opts.params?.username ?? '';
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Runs once the sign-in response is read and before the session is saved. A throw or a rejection
|
|
140
|
+
* rejects `login` and nothing is saved: the place to refuse a user, or to hand the token to
|
|
141
|
+
* another service.
|
|
142
|
+
*/
|
|
143
|
+
beforeSaveSession(_opts) {
|
|
144
|
+
return Promise.resolve();
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Saves the session where `checkAuth`, `getIdentity` and `getRoles` read it. A provider that
|
|
148
|
+
* keeps the session elsewhere overrides this to do nothing; `login` still resolves.
|
|
149
|
+
*/
|
|
150
|
+
saveSession(opts) {
|
|
151
|
+
const { session, username } = opts;
|
|
152
|
+
this.authService.saveAuth({
|
|
153
|
+
token: session.token,
|
|
154
|
+
userId: session.userId,
|
|
155
|
+
roles: session.roles,
|
|
156
|
+
username,
|
|
43
157
|
});
|
|
44
158
|
}
|
|
159
|
+
// --- react-admin's auth provider -------------------------------------------------------------
|
|
160
|
+
/**
|
|
161
|
+
* Typed `Promise<unknown>`, as it was before it became async: a subclass that overrides `login`
|
|
162
|
+
* with that signature keeps compiling.
|
|
163
|
+
*/
|
|
164
|
+
async login(params) {
|
|
165
|
+
const rs = await this.restDataProvider.send({
|
|
166
|
+
resource: this.signInPath,
|
|
167
|
+
params: { method: RequestMethods.POST, body: this.buildSignInBody({ params }) },
|
|
168
|
+
});
|
|
169
|
+
const session = this.readSignInSession({ data: rs.data });
|
|
170
|
+
// Before anything is saved, so a throw here leaves no session behind.
|
|
171
|
+
await this.beforeSaveSession({ session, params });
|
|
172
|
+
this.saveSession({ session, username: this.resolveUsername({ params }) });
|
|
173
|
+
return {
|
|
174
|
+
...rs,
|
|
175
|
+
redirectTo: removeDoubleSlashes(`/${this.afterLoginPath}`),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
45
178
|
logout(_params) {
|
|
46
179
|
return new Promise((resolve) => {
|
|
47
180
|
this.authService.cleanUp();
|
|
@@ -51,7 +184,7 @@ let DefaultAuthProvider = DefaultAuthProvider_1 = class DefaultAuthProvider exte
|
|
|
51
184
|
async checkAuth(_params) {
|
|
52
185
|
const token = this.authService.getAuth();
|
|
53
186
|
if (!token?.value) {
|
|
54
|
-
return Promise.reject({ redirectTo:
|
|
187
|
+
return Promise.reject({ redirectTo: this.loginPagePath });
|
|
55
188
|
}
|
|
56
189
|
if (!this.authProviderOptions.paths?.checkAuth) {
|
|
57
190
|
return Promise.resolve();
|
|
@@ -61,7 +194,7 @@ let DefaultAuthProvider = DefaultAuthProvider_1 = class DefaultAuthProvider exte
|
|
|
61
194
|
params: { method: RequestMethods.GET },
|
|
62
195
|
});
|
|
63
196
|
if (!rs?.data) {
|
|
64
|
-
return Promise.reject({ redirectTo:
|
|
197
|
+
return Promise.reject({ redirectTo: this.loginPagePath });
|
|
65
198
|
}
|
|
66
199
|
return Promise.resolve();
|
|
67
200
|
}
|
|
@@ -70,11 +203,11 @@ let DefaultAuthProvider = DefaultAuthProvider_1 = class DefaultAuthProvider exte
|
|
|
70
203
|
const status = params?.status ?? params?.statusCode;
|
|
71
204
|
if (status === 401) {
|
|
72
205
|
this.authService.cleanUp();
|
|
73
|
-
return Promise.reject({ redirectTo:
|
|
206
|
+
return Promise.reject({ redirectTo: this.loginPagePath });
|
|
74
207
|
}
|
|
75
208
|
if (status === 403) {
|
|
76
209
|
return Promise.reject({
|
|
77
|
-
redirectTo:
|
|
210
|
+
redirectTo: this.unauthorizedPagePath,
|
|
78
211
|
logoutUser: false,
|
|
79
212
|
});
|
|
80
213
|
}
|
|
@@ -93,8 +226,13 @@ let DefaultAuthProvider = DefaultAuthProvider_1 = class DefaultAuthProvider exte
|
|
|
93
226
|
getRoles(_params) {
|
|
94
227
|
return Promise.resolve(this.authService.getRoles());
|
|
95
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* Refreshes the session through the network service's `refresh`, the one place a refresh is made:
|
|
231
|
+
* `true` when it was refreshed, `false` when the service has no refresh to make. The `401`
|
|
232
|
+
* recovery calls the same method, so one burst of 401s and this call share one refresh.
|
|
233
|
+
*/
|
|
96
234
|
refreshToken() {
|
|
97
|
-
return
|
|
235
|
+
return this.restDataProvider.getNetworkService().refresh();
|
|
98
236
|
}
|
|
99
237
|
value(container) {
|
|
100
238
|
// A subclass with its own constructor rarely forwards the optional 4th argument to `super`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/providers/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAkB,MAAM,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/providers/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/i18n.d.ts
CHANGED
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
import { type Container } from '@venizia/ignis-inversion';
|
|
2
|
-
import { type I18nProvider } from 'ra-core';
|
|
2
|
+
import { type I18nProvider, type TranslationMessages } from 'ra-core';
|
|
3
3
|
import { BaseProvider } from '@venizia/ardor-kernel';
|
|
4
4
|
import { type II18nProviderOptions } from '../common/index.js';
|
|
5
|
-
import { type
|
|
5
|
+
import { type TFeature } from '../features/feature.js';
|
|
6
|
+
/**
|
|
7
|
+
* The options hold data (`i18nSources`, `languages`); the hooks are `resolveInitialLocale` and
|
|
8
|
+
* `composeMessages`, each taking one `opts` object.
|
|
9
|
+
*/
|
|
6
10
|
export declare class DefaultI18nProvider extends BaseProvider<I18nProvider> {
|
|
7
11
|
protected i18nProviderOptions: II18nProviderOptions;
|
|
8
|
-
protected features: Array<
|
|
9
|
-
constructor(i18nProviderOptions: II18nProviderOptions, features?: Array<
|
|
12
|
+
protected features: Array<TFeature>;
|
|
13
|
+
constructor(i18nProviderOptions: II18nProviderOptions, features?: Array<TFeature>);
|
|
14
|
+
/**
|
|
15
|
+
* The locale the admin starts in: the browser's language when it is one of `locales`, else `en`.
|
|
16
|
+
* Read when the provider is built, not when the module is imported, and not at all outside a
|
|
17
|
+
* browser.
|
|
18
|
+
*/
|
|
19
|
+
protected resolveInitialLocale(opts: {
|
|
20
|
+
locales: Array<string>;
|
|
21
|
+
}): string;
|
|
22
|
+
/**
|
|
23
|
+
* The messages of a locale: the features' messages first, the application's own source over them
|
|
24
|
+
* (the application may relabel a feature), English for a locale the application has no source for.
|
|
25
|
+
*/
|
|
26
|
+
protected composeMessages(opts: {
|
|
27
|
+
locale: string;
|
|
28
|
+
messages: object;
|
|
29
|
+
}): TranslationMessages;
|
|
10
30
|
value(_container: Container): I18nProvider;
|
|
11
31
|
}
|
|
12
32
|
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/providers/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/providers/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAgB,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,YAAY,CAAC,YAAY,CAAC;IAG/D,SAAS,CAAC,mBAAmB,EAAE,oBAAoB;IAEnD,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;gBAFzB,mBAAmB,EAAE,oBAAoB,EAEzC,QAAQ,GAAE,KAAK,CAAC,QAAQ,CAAM;IAK1C;;;;OAIG;IACH,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;KAAE,GAAG,MAAM;IAOxE;;;OAGG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,mBAAmB;IAMjF,KAAK,CAAC,UAAU,EAAE,SAAS,GAAG,YAAY;CAmCpD"}
|
package/dist/providers/i18n.js
CHANGED
|
@@ -17,33 +17,52 @@ import polyglotI18nProvider from 'ra-i18n-polyglot';
|
|
|
17
17
|
import { BaseProvider, CoreBindings } from '@venizia/ardor-kernel';
|
|
18
18
|
import { englishMessages } from '../common/locales/index.js';
|
|
19
19
|
import { FeatureMessages } from '../features/messages.js';
|
|
20
|
-
|
|
20
|
+
/**
|
|
21
|
+
* The options hold data (`i18nSources`, `languages`); the hooks are `resolveInitialLocale` and
|
|
22
|
+
* `composeMessages`, each taking one `opts` object.
|
|
23
|
+
*/
|
|
21
24
|
let DefaultI18nProvider = DefaultI18nProvider_1 = class DefaultI18nProvider extends BaseProvider {
|
|
22
25
|
constructor(i18nProviderOptions, features = []) {
|
|
23
26
|
super({ scope: DefaultI18nProvider_1.name });
|
|
24
27
|
this.i18nProviderOptions = i18nProviderOptions;
|
|
25
28
|
this.features = features;
|
|
26
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* The locale the admin starts in: the browser's language when it is one of `locales`, else `en`.
|
|
32
|
+
* Read when the provider is built, not when the module is imported, and not at all outside a
|
|
33
|
+
* browser.
|
|
34
|
+
*/
|
|
35
|
+
resolveInitialLocale(opts) {
|
|
36
|
+
const browserLanguage = typeof navigator === 'undefined' ? undefined : navigator.language;
|
|
37
|
+
const [language] = (browserLanguage?.length ? browserLanguage : 'en-US').split('-');
|
|
38
|
+
return opts.locales.includes(language) ? language : 'en';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The messages of a locale: the features' messages first, the application's own source over them
|
|
42
|
+
* (the application may relabel a feature), English for a locale the application has no source for.
|
|
43
|
+
*/
|
|
44
|
+
composeMessages(opts) {
|
|
45
|
+
const { i18nSources = { en: englishMessages } } = this.i18nProviderOptions;
|
|
46
|
+
return merge({}, opts.messages, i18nSources?.[opts.locale] ?? englishMessages);
|
|
47
|
+
}
|
|
27
48
|
value(_container) {
|
|
28
|
-
const {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
// relabel a feature.
|
|
49
|
+
const { languages = [{ locale: 'en', name: 'English' }] } = this.i18nProviderOptions;
|
|
50
|
+
const initialLocale = this.resolveInitialLocale({
|
|
51
|
+
locales: languages.map(({ locale }) => locale),
|
|
52
|
+
});
|
|
33
53
|
const featureMessages = new FeatureMessages({ features: this.features });
|
|
34
|
-
const compose = (opts) => {
|
|
35
|
-
return merge({}, opts.messages, i18nSources?.[opts.locale] ?? englishMessages);
|
|
36
|
-
};
|
|
37
54
|
// ra-i18n-polyglot reads the initial locale synchronously, once, while it is built: that read
|
|
38
55
|
// takes what is there now, and ArdorApplication loads the rest through changeLocale() before
|
|
39
56
|
// react-admin renders. Every later read may wait for a lazy bundle.
|
|
40
57
|
let isBuilding = true;
|
|
41
58
|
const i18nProvider = polyglotI18nProvider((locale) => {
|
|
42
59
|
if (isBuilding || !featureMessages.isPending({ locale })) {
|
|
43
|
-
return
|
|
60
|
+
return this.composeMessages({ locale, messages: featureMessages.readNow({ locale }) });
|
|
44
61
|
}
|
|
45
|
-
return featureMessages
|
|
46
|
-
|
|
62
|
+
return featureMessages
|
|
63
|
+
.read({ locale })
|
|
64
|
+
.then((messages) => this.composeMessages({ locale, messages }));
|
|
65
|
+
}, initialLocale, languages, {
|
|
47
66
|
allowMissing: true,
|
|
48
67
|
onMissingKey: (key, _options, _locale) => key,
|
|
49
68
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/providers/i18n.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAkB,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,MAAM,iBAAiB,CAAC;AAEpC,OAAO,oBAAoB,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/providers/i18n.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,36 @@ import { type IDataProvider } from '../common/index.js';
|
|
|
5
5
|
export declare class DefaultRestDataProvider<TResource extends string = string> extends BaseProvider<IDataProvider<TResource>> {
|
|
6
6
|
protected restDataProviderOptions: IRestDataProviderOptions;
|
|
7
7
|
protected applicationInfo: IApplicationInfo;
|
|
8
|
-
|
|
8
|
+
private cachedNetworkService?;
|
|
9
9
|
constructor(restDataProviderOptions: IRestDataProviderOptions, applicationInfo: IApplicationInfo);
|
|
10
|
+
/**
|
|
11
|
+
* Builds the network service this provider sends through. Override it to return a subclass of
|
|
12
|
+
* `DefaultNetworkRequestService` that overrides its hooks (`refreshToken`, `resolveAuthToken`, ...).
|
|
13
|
+
* Called once, on first use, so a subclass's own fields are set by then.
|
|
14
|
+
*/
|
|
15
|
+
protected createNetworkService(): DefaultNetworkRequestService;
|
|
16
|
+
protected get networkService(): DefaultNetworkRequestService;
|
|
10
17
|
getNetworkService(): DefaultNetworkRequestService;
|
|
18
|
+
/**
|
|
19
|
+
* The ids a bulk write touched, read from the affected rows the server answers (not the ids asked
|
|
20
|
+
* for). A body that is not a row array leaves `data` out.
|
|
21
|
+
*/
|
|
22
|
+
protected toAffectedIds(opts: {
|
|
23
|
+
rows: unknown;
|
|
24
|
+
}): Array<Identifier> | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* The filter, query and list extras a list request sends, from react-admin's list params:
|
|
27
|
+
* pagination into `limit`/`skip`/`offset`, sort into `order`, `noLimit` lifting both, the
|
|
28
|
+
* remaining params into the filter, `filter.params` and `meta` into the query, and `meta.extra`
|
|
29
|
+
* into the list extras (sent in a header). Shared by `getList` and `getManyReference`.
|
|
30
|
+
*/
|
|
31
|
+
protected buildListFilter(opts: {
|
|
32
|
+
params: GetListParams & ICustomParams;
|
|
33
|
+
}): {
|
|
34
|
+
filter: Record<string, AnyType>;
|
|
35
|
+
queryKey: Record<string, AnyType>;
|
|
36
|
+
extra: Record<string, AnyType> | undefined;
|
|
37
|
+
};
|
|
11
38
|
/** `HttpDataSource` settings that send what this provider sends, channel and tracing id included. */
|
|
12
39
|
getDataSourceAuth(): import("@venizia/ardor-kernel").IDataSourceAuth;
|
|
13
40
|
getListHelper<RecordType extends RaRecord = AnyType>(opts: {
|
|
@@ -78,6 +105,10 @@ export declare class DefaultRestDataProvider<TResource extends string = string>
|
|
|
78
105
|
resource: TResource;
|
|
79
106
|
params: ISendParams;
|
|
80
107
|
}): Promise<ISendResponse<ReturnType>>;
|
|
108
|
+
/**
|
|
109
|
+
* react-admin's data provider contract takes positional arguments, `(resource, params)`: the one
|
|
110
|
+
* place this class does not take an `opts` object. Each method hands them to the `opts` method.
|
|
111
|
+
*/
|
|
81
112
|
value(_container: Container): IDataProvider<TResource>;
|
|
82
113
|
}
|
|
83
114
|
//# sourceMappingURL=rest-data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest-data.d.ts","sourceRoot":"","sources":["../../src/providers/rest-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,0BAA0B,CAAC;AAE5E,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,KAAK,OAAO,EACZ,YAAY,EAEZ,4BAA4B,EAC5B,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,wBAAwB,
|
|
1
|
+
{"version":3,"file":"rest-data.d.ts","sourceRoot":"","sources":["../../src/providers/rest-data.ts"],"names":[],"mappings":"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"}
|