@authup/client-web-kit 1.0.0-beta.21 → 1.0.0-beta.22
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/components/client/AClient.d.ts +1 -1
- package/dist/components/client/AClientForm.d.ts +2 -2
- package/dist/components/client-scope/AClientScope.d.ts +1 -1
- package/dist/components/client-scope/AClientScopeAssignment.d.ts +1 -1
- package/dist/components/identity-provider/AIdentityProvider.d.ts +1 -1
- package/dist/components/identity-provider/AIdentityProviderForm.d.ts.map +1 -1
- package/dist/components/identity-provider/AIdentityProviderLdapForm.d.ts +1 -1
- package/dist/components/identity-provider/AIdentityProviderOAuth2Form.d.ts +1 -1
- package/dist/components/identity-provider/AIdentityProviderPicker.vue.d.ts +56 -0
- package/dist/components/identity-provider/AIdentityProviderPicker.vue.d.ts.map +1 -0
- package/dist/components/identity-provider-role/AIdentityProviderRoleAssignment.d.ts +1 -1
- package/dist/components/permission/APermission.d.ts +1 -1
- package/dist/components/permission/APermissionForm.d.ts +1 -1
- package/dist/components/realm/ARealm.d.ts +1 -1
- package/dist/components/realm/ARealmForm.d.ts +1 -1
- package/dist/components/robot/ARobot.d.ts +1 -1
- package/dist/components/robot/ARobotForm.d.ts +2 -2
- package/dist/components/robot-permission/ARobotPermissionAssignment.d.ts +1 -1
- package/dist/components/robot-role/ARobotRoleAssignment.d.ts +1 -1
- package/dist/components/role/ARole.d.ts +1 -1
- package/dist/components/role/ARoleForm.d.ts +1 -1
- package/dist/components/role-permission/ARolePermissionAssignment.d.ts +1 -1
- package/dist/components/scope/AScope.d.ts +1 -1
- package/dist/components/scope/AScopeForm.d.ts +1 -1
- package/dist/components/user/AUser.d.ts +1 -1
- package/dist/components/user/AUserForm.d.ts +1 -1
- package/dist/components/user-permission/AUserPermissionAssignment.d.ts +1 -1
- package/dist/components/user-role/AUserRoleAssignment.d.ts +1 -1
- package/dist/core/http-client/install.d.ts.map +1 -1
- package/dist/core/list/module.d.ts.map +1 -1
- package/dist/core/store/create.d.ts +14 -13
- package/dist/core/store/create.d.ts.map +1 -1
- package/dist/core/store/dispatcher/constants.d.ts +15 -0
- package/dist/core/store/dispatcher/constants.d.ts.map +1 -0
- package/dist/core/store/dispatcher/index.d.ts +5 -0
- package/dist/core/store/dispatcher/index.d.ts.map +1 -0
- package/dist/core/store/dispatcher/module.d.ts +3 -0
- package/dist/core/store/dispatcher/module.d.ts.map +1 -0
- package/dist/core/store/dispatcher/singleton.d.ts +5 -0
- package/dist/core/store/dispatcher/singleton.d.ts.map +1 -0
- package/dist/core/store/dispatcher/types.d.ts +23 -0
- package/dist/core/store/dispatcher/types.d.ts.map +1 -0
- package/dist/core/store/index.d.ts +1 -0
- package/dist/core/store/index.d.ts.map +1 -1
- package/dist/core/store/install.d.ts.map +1 -1
- package/dist/core/store/singleton.d.ts +0 -1
- package/dist/core/store/singleton.d.ts.map +1 -1
- package/dist/core/store/types.d.ts +2 -4
- package/dist/core/store/types.d.ts.map +1 -1
- package/dist/index.cjs +385 -209
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +15 -0
- package/dist/index.mjs +383 -210
- package/dist/index.mjs.map +1 -1
- package/package.json +21 -19
- package/dist/components/identity-provider/AIdentityProviderPicker.d.ts +0 -18
- package/dist/components/identity-provider/AIdentityProviderPicker.d.ts.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -94,6 +94,91 @@ class PolicyEngine extends kit.PolicyEngine {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
/*
|
|
98
|
+
* Copyright (c) 2024.
|
|
99
|
+
* Author Peter Placzek (tada5hi)
|
|
100
|
+
* For the full copyright and license information,
|
|
101
|
+
* view the LICENSE file that was distributed with this source code.
|
|
102
|
+
*/ var StoreDispatcherEventName = /*#__PURE__*/ function(StoreDispatcherEventName) {
|
|
103
|
+
StoreDispatcherEventName["LOGGING_IN"] = "loggingIn";
|
|
104
|
+
StoreDispatcherEventName["LOGGED_IN"] = "loggedIn";
|
|
105
|
+
StoreDispatcherEventName["LOGGING_OUT"] = "loggingOut";
|
|
106
|
+
StoreDispatcherEventName["LOGGED_OUT"] = "loggedOut";
|
|
107
|
+
StoreDispatcherEventName["RESOLVING"] = "resolving";
|
|
108
|
+
StoreDispatcherEventName["RESOLVED"] = "resolved";
|
|
109
|
+
StoreDispatcherEventName["ACCESS_TOKEN_UPDATED"] = "accessTokenUpdated";
|
|
110
|
+
StoreDispatcherEventName["ACCESS_TOKEN_EXPIRE_DATE_UPDATED"] = "accessTokenExpireDateUpdated";
|
|
111
|
+
StoreDispatcherEventName["REFRESH_TOKEN_UPDATED"] = "refreshTokenUpdated";
|
|
112
|
+
StoreDispatcherEventName["USER_UPDATED"] = "userUpdated";
|
|
113
|
+
StoreDispatcherEventName["REALM_UPDATED"] = "realmUpdated";
|
|
114
|
+
StoreDispatcherEventName["REALM_MANAGEMENT_UPDATED"] = "realmManagementUpdated";
|
|
115
|
+
return StoreDispatcherEventName;
|
|
116
|
+
}({});
|
|
117
|
+
|
|
118
|
+
// src/event-emitter.ts
|
|
119
|
+
var EventEmitter = class {
|
|
120
|
+
on(type, handler) {
|
|
121
|
+
if (!this.all.has(type)) {
|
|
122
|
+
this.all.set(type, []);
|
|
123
|
+
}
|
|
124
|
+
const handlers = this.all.get(type);
|
|
125
|
+
handlers.push(handler);
|
|
126
|
+
return ()=>handlers.splice(handlers.indexOf(handler) >>> 0, 1);
|
|
127
|
+
}
|
|
128
|
+
off(type, handler) {
|
|
129
|
+
if (!type) {
|
|
130
|
+
return this.all.clear();
|
|
131
|
+
}
|
|
132
|
+
const handlers = this.all.get(type);
|
|
133
|
+
if (handlers) {
|
|
134
|
+
if (handler) {
|
|
135
|
+
handlers.splice(handlers.indexOf(handler) >>> 0, 1);
|
|
136
|
+
} else {
|
|
137
|
+
this.all.delete(type);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Invoke all handlers for the given type.
|
|
143
|
+
* If present, `'*'` handlers are invoked after type-matched handlers.
|
|
144
|
+
*
|
|
145
|
+
* Note: Manually firing `'*'` handlers is not supported.
|
|
146
|
+
*
|
|
147
|
+
* @param type The event type to invoke
|
|
148
|
+
* @param payload Any value to each handler
|
|
149
|
+
*/ emit(type, ...payload) {
|
|
150
|
+
let handlers = this.all.get(type);
|
|
151
|
+
handlers?.slice().map((handler)=>{
|
|
152
|
+
handler(...payload);
|
|
153
|
+
});
|
|
154
|
+
handlers = this.all.get("*");
|
|
155
|
+
if (handlers) {
|
|
156
|
+
handlers.slice().map((handler)=>{
|
|
157
|
+
handler(type, payload);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
constructor(all){
|
|
162
|
+
this.all = all || /* @__PURE__ */ new Map();
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
function createStoreDispatcher() {
|
|
167
|
+
return new EventEmitter();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const sym$1 = Symbol.for('AuthupStoreEventBus');
|
|
171
|
+
function injectStoreDispatcher(app) {
|
|
172
|
+
const instance = inject$1(sym$1, app);
|
|
173
|
+
if (!instance) {
|
|
174
|
+
throw new Error('The store dispatcher has not been injected in the app context.');
|
|
175
|
+
}
|
|
176
|
+
return instance;
|
|
177
|
+
}
|
|
178
|
+
function provideStoreDispatcher(eventBus, app) {
|
|
179
|
+
provide(sym$1, eventBus, app);
|
|
180
|
+
}
|
|
181
|
+
|
|
97
182
|
function createPromiseShareWrapperFn(fn) {
|
|
98
183
|
let promise;
|
|
99
184
|
return (...args)=>{
|
|
@@ -111,41 +196,45 @@ function createPromiseShareWrapperFn(fn) {
|
|
|
111
196
|
return promise;
|
|
112
197
|
};
|
|
113
198
|
}
|
|
114
|
-
function createStore(context
|
|
199
|
+
function createStore(context) {
|
|
115
200
|
const client = new coreHttpKit.Client({
|
|
116
201
|
baseURL: context.baseURL
|
|
117
202
|
});
|
|
118
|
-
const
|
|
119
|
-
const
|
|
120
|
-
|
|
203
|
+
const cookiesRead = vue.ref(false);
|
|
204
|
+
const setCookiesRead = (value)=>{
|
|
205
|
+
cookiesRead.value = value;
|
|
121
206
|
};
|
|
122
207
|
// --------------------------------------------------------------------
|
|
123
|
-
const accessToken = vue.ref(
|
|
208
|
+
const accessToken = vue.ref(null);
|
|
124
209
|
const setAccessToken = (input)=>{
|
|
125
210
|
accessToken.value = input;
|
|
211
|
+
context.dispatcher.emit(StoreDispatcherEventName.ACCESS_TOKEN_UPDATED, input);
|
|
126
212
|
};
|
|
127
213
|
// --------------------------------------------------------------------
|
|
128
|
-
const accessTokenExpireDate = vue.ref(
|
|
214
|
+
const accessTokenExpireDate = vue.ref(null);
|
|
129
215
|
const setAccessTokenExpireDate = (input)=>{
|
|
130
216
|
if (typeof input === 'number' || typeof input === 'string') {
|
|
131
217
|
accessTokenExpireDate.value = new Date(input); // verify microseconds or seconds
|
|
132
|
-
|
|
218
|
+
} else {
|
|
219
|
+
accessTokenExpireDate.value = input;
|
|
133
220
|
}
|
|
134
|
-
accessTokenExpireDate.value
|
|
221
|
+
context.dispatcher.emit(StoreDispatcherEventName.ACCESS_TOKEN_EXPIRE_DATE_UPDATED, accessTokenExpireDate.value);
|
|
135
222
|
};
|
|
136
223
|
// --------------------------------------------------------------------
|
|
137
|
-
const refreshToken = vue.ref(
|
|
224
|
+
const refreshToken = vue.ref(null);
|
|
138
225
|
const setRefreshToken = (input)=>{
|
|
139
226
|
refreshToken.value = input;
|
|
227
|
+
context.dispatcher.emit(StoreDispatcherEventName.REFRESH_TOKEN_UPDATED, input);
|
|
140
228
|
};
|
|
141
229
|
// --------------------------------------------------------------------
|
|
142
|
-
const user = vue.ref(
|
|
143
|
-
const userId = vue.computed(()=>user.value ? user.value.id :
|
|
144
|
-
const setUser = (
|
|
145
|
-
user.value =
|
|
230
|
+
const user = vue.ref(null);
|
|
231
|
+
const userId = vue.computed(()=>user.value ? user.value.id : null);
|
|
232
|
+
const setUser = (input)=>{
|
|
233
|
+
user.value = input;
|
|
234
|
+
context.dispatcher.emit(StoreDispatcherEventName.USER_UPDATED, input);
|
|
146
235
|
};
|
|
147
236
|
// --------------------------------------------------------------------
|
|
148
|
-
const realm = vue.ref(
|
|
237
|
+
const realm = vue.ref(null);
|
|
149
238
|
const realmId = vue.computed(()=>realm.value ? realm.value.id : undefined);
|
|
150
239
|
const realmName = vue.computed(()=>realm.value ? realm.value.name : undefined);
|
|
151
240
|
const realmIsRoot = vue.computed(()=>{
|
|
@@ -154,14 +243,16 @@ function createStore(context = {}) {
|
|
|
154
243
|
}
|
|
155
244
|
return false;
|
|
156
245
|
});
|
|
157
|
-
const setRealm = (
|
|
158
|
-
realm.value =
|
|
246
|
+
const setRealm = (input)=>{
|
|
247
|
+
realm.value = input;
|
|
248
|
+
context.dispatcher.emit(StoreDispatcherEventName.REALM_UPDATED, input);
|
|
159
249
|
};
|
|
160
|
-
const realmManagement = vue.ref(
|
|
250
|
+
const realmManagement = vue.ref(null);
|
|
161
251
|
const realmManagementId = vue.computed(()=>realmManagement.value ? realmManagement.value.id : realmId.value);
|
|
162
252
|
const realmManagementName = vue.computed(()=>realmManagement.value ? realmManagement.value.name : realmName.value);
|
|
163
|
-
const setRealmManagement = (
|
|
164
|
-
realmManagement.value =
|
|
253
|
+
const setRealmManagement = (input)=>{
|
|
254
|
+
realmManagement.value = input;
|
|
255
|
+
context.dispatcher.emit(StoreDispatcherEventName.REALM_MANAGEMENT_UPDATED, input);
|
|
165
256
|
};
|
|
166
257
|
// --------------------------------------------------------------------
|
|
167
258
|
const permissionRepository = new kit.PermissionMemoryProvider();
|
|
@@ -214,11 +305,15 @@ function createStore(context = {}) {
|
|
|
214
305
|
});
|
|
215
306
|
};
|
|
216
307
|
// --------------------------------------------------------------------
|
|
217
|
-
const
|
|
308
|
+
const applyTokenGrantResponse = (response)=>{
|
|
218
309
|
const expireDate = new Date(Date.now() + response.expires_in * 1000);
|
|
219
310
|
setAccessTokenExpireDate(expireDate);
|
|
220
311
|
setAccessToken(response.access_token);
|
|
221
|
-
|
|
312
|
+
if (response.refresh_token) {
|
|
313
|
+
setRefreshToken(response.refresh_token);
|
|
314
|
+
} else {
|
|
315
|
+
setRefreshToken(null);
|
|
316
|
+
}
|
|
222
317
|
};
|
|
223
318
|
// --------------------------------------------------------------------
|
|
224
319
|
const refreshSession = createPromiseShareWrapperFn(async ()=>{
|
|
@@ -227,8 +322,8 @@ function createStore(context = {}) {
|
|
|
227
322
|
}
|
|
228
323
|
return client.token.createWithRefreshToken({
|
|
229
324
|
refresh_token: refreshToken.value
|
|
230
|
-
}).then((r)=>
|
|
231
|
-
|
|
325
|
+
}).then((r)=>applyTokenGrantResponse(r)).catch((e)=>{
|
|
326
|
+
reset();
|
|
232
327
|
return Promise.reject(e);
|
|
233
328
|
}).finally(()=>{
|
|
234
329
|
tokenResolved.value = false;
|
|
@@ -237,6 +332,7 @@ function createStore(context = {}) {
|
|
|
237
332
|
});
|
|
238
333
|
// --------------------------------------------------------------------
|
|
239
334
|
const resolveInternal = async ()=>{
|
|
335
|
+
context.dispatcher.emit(StoreDispatcherEventName.RESOLVING);
|
|
240
336
|
try {
|
|
241
337
|
if (!accessToken.value && refreshToken.value) {
|
|
242
338
|
await refreshSession();
|
|
@@ -254,45 +350,72 @@ function createStore(context = {}) {
|
|
|
254
350
|
}
|
|
255
351
|
throw e;
|
|
256
352
|
}
|
|
353
|
+
context.dispatcher.emit(StoreDispatcherEventName.RESOLVED);
|
|
257
354
|
return Promise.resolve();
|
|
258
355
|
};
|
|
259
356
|
const resolve = createPromiseShareWrapperFn(resolveInternal);
|
|
260
357
|
const loggedIn = vue.computed(()=>!!accessToken.value);
|
|
261
358
|
const login = async (ctx)=>{
|
|
359
|
+
context.dispatcher.emit(StoreDispatcherEventName.LOGGING_IN);
|
|
360
|
+
const response = await client.token.createWithPasswordGrant({
|
|
361
|
+
username: ctx.name,
|
|
362
|
+
password: ctx.password,
|
|
363
|
+
...realmId.value ? {
|
|
364
|
+
realm_id: ctx.realmId
|
|
365
|
+
} : {}
|
|
366
|
+
});
|
|
367
|
+
applyTokenGrantResponse(response);
|
|
262
368
|
try {
|
|
263
|
-
const response = await client.token.createWithPasswordGrant({
|
|
264
|
-
username: ctx.name,
|
|
265
|
-
password: ctx.password,
|
|
266
|
-
...realmId.value ? {
|
|
267
|
-
realm_id: ctx.realmId
|
|
268
|
-
} : {}
|
|
269
|
-
});
|
|
270
|
-
handleTokenGrantResponse(response);
|
|
271
369
|
await resolve();
|
|
272
370
|
} catch (e) {
|
|
273
|
-
logout();
|
|
371
|
+
await logout();
|
|
274
372
|
throw e;
|
|
275
373
|
}
|
|
374
|
+
context.dispatcher.emit(StoreDispatcherEventName.LOGGED_IN);
|
|
276
375
|
};
|
|
277
|
-
const
|
|
278
|
-
setAccessToken(
|
|
279
|
-
setAccessTokenExpireDate(
|
|
280
|
-
setRefreshToken(
|
|
281
|
-
setUser(
|
|
282
|
-
setRealm(
|
|
283
|
-
setRealmManagement(
|
|
376
|
+
const reset = ()=>{
|
|
377
|
+
setAccessToken(null);
|
|
378
|
+
setAccessTokenExpireDate(null);
|
|
379
|
+
setRefreshToken(null);
|
|
380
|
+
setUser(null);
|
|
381
|
+
setRealm(null);
|
|
382
|
+
setRealmManagement(null);
|
|
383
|
+
permissionRepository.setMany([]);
|
|
284
384
|
tokenResolved.value = false;
|
|
285
385
|
userResolved.value = false;
|
|
286
386
|
};
|
|
387
|
+
const logout = async ()=>{
|
|
388
|
+
context.dispatcher.emit(StoreDispatcherEventName.LOGGING_OUT);
|
|
389
|
+
try {
|
|
390
|
+
if (accessToken.value) {
|
|
391
|
+
await client.token.revoke({
|
|
392
|
+
token: accessToken.value
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
} catch (e) {
|
|
396
|
+
// ...
|
|
397
|
+
}
|
|
398
|
+
try {
|
|
399
|
+
if (refreshToken.value) {
|
|
400
|
+
await client.token.revoke({
|
|
401
|
+
token: refreshToken.value
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
} catch (e) {
|
|
405
|
+
// ...
|
|
406
|
+
}
|
|
407
|
+
reset();
|
|
408
|
+
context.dispatcher.emit(StoreDispatcherEventName.LOGGED_OUT);
|
|
409
|
+
};
|
|
287
410
|
return {
|
|
288
|
-
|
|
289
|
-
|
|
411
|
+
cookiesRead,
|
|
412
|
+
setCookiesRead,
|
|
290
413
|
permissionChecker,
|
|
291
414
|
login,
|
|
292
415
|
logout,
|
|
293
416
|
loggedIn,
|
|
294
417
|
resolve,
|
|
295
|
-
|
|
418
|
+
applyTokenGrantResponse,
|
|
296
419
|
accessToken,
|
|
297
420
|
setAccessToken,
|
|
298
421
|
accessTokenExpireDate,
|
|
@@ -379,7 +502,7 @@ function shouldUpdate(dependencies, newCookies, oldCookies) {
|
|
|
379
502
|
return false;
|
|
380
503
|
}
|
|
381
504
|
|
|
382
|
-
const
|
|
505
|
+
const sym = Symbol.for('AuthupStore');
|
|
383
506
|
function useStore(pinia, app) {
|
|
384
507
|
const instance = injectStoreFactory(app);
|
|
385
508
|
if (!instance) {
|
|
@@ -388,25 +511,28 @@ function useStore(pinia, app) {
|
|
|
388
511
|
return instance(pinia);
|
|
389
512
|
}
|
|
390
513
|
function injectStoreFactory(app) {
|
|
391
|
-
const instance = inject$1(
|
|
514
|
+
const instance = inject$1(sym, app);
|
|
392
515
|
if (!instance) {
|
|
393
516
|
throw new Error('The store factory has not been injected in the app context.');
|
|
394
517
|
}
|
|
395
518
|
return instance;
|
|
396
519
|
}
|
|
397
520
|
function hasStoreFactory(app) {
|
|
398
|
-
return !!inject$1(
|
|
521
|
+
return !!inject$1(sym, app);
|
|
399
522
|
}
|
|
400
523
|
function provideStoreFactory(store, app) {
|
|
401
|
-
provide(
|
|
524
|
+
provide(sym, store, app);
|
|
402
525
|
}
|
|
403
526
|
|
|
404
527
|
function installStore(app, options = {}) {
|
|
405
528
|
if (hasStoreFactory(app)) {
|
|
406
529
|
return;
|
|
407
530
|
}
|
|
531
|
+
const storeDispatcher = createStoreDispatcher();
|
|
532
|
+
provideStoreDispatcher(storeDispatcher, app);
|
|
408
533
|
const storeFactory = pinia.defineStore(STORE_ID, ()=>createStore({
|
|
409
|
-
baseURL: options.baseURL
|
|
534
|
+
baseURL: options.baseURL,
|
|
535
|
+
dispatcher: storeDispatcher
|
|
410
536
|
}));
|
|
411
537
|
const store = storeFactory(options.pinia);
|
|
412
538
|
let cookieGet;
|
|
@@ -434,11 +560,11 @@ function installStore(app, options = {}) {
|
|
|
434
560
|
const cookies = useCookies();
|
|
435
561
|
cookieUnset = cookies.remove;
|
|
436
562
|
}
|
|
437
|
-
const
|
|
438
|
-
if (store.
|
|
563
|
+
const readCookies = ()=>{
|
|
564
|
+
if (store.cookiesRead) {
|
|
439
565
|
return;
|
|
440
566
|
}
|
|
441
|
-
store.
|
|
567
|
+
store.setCookiesRead(true);
|
|
442
568
|
const keys = Object.values(coreHttpKit.CookieName);
|
|
443
569
|
let value;
|
|
444
570
|
for(let i = 0; i < keys.length; i++){
|
|
@@ -480,51 +606,60 @@ function installStore(app, options = {}) {
|
|
|
480
606
|
}
|
|
481
607
|
}
|
|
482
608
|
};
|
|
483
|
-
|
|
484
|
-
if (
|
|
485
|
-
return;
|
|
609
|
+
const maxAgeFn = ()=>{
|
|
610
|
+
if (!store.accessTokenExpireDate) {
|
|
611
|
+
return undefined;
|
|
486
612
|
}
|
|
487
|
-
|
|
488
|
-
|
|
613
|
+
return Math.floor(Math.max(1000, new Date(`${store.accessTokenExpireDate}`).getTime() - Date.now()) / 1000);
|
|
614
|
+
};
|
|
615
|
+
storeDispatcher.on(StoreDispatcherEventName.ACCESS_TOKEN_EXPIRE_DATE_UPDATED, (input)=>{
|
|
616
|
+
if (input) {
|
|
617
|
+
cookieSet(coreHttpKit.CookieName.ACCESS_TOKEN_EXPIRE_DATE, input, {
|
|
618
|
+
maxAge: maxAgeFn()
|
|
619
|
+
});
|
|
620
|
+
} else {
|
|
489
621
|
cookieUnset(coreHttpKit.CookieName.ACCESS_TOKEN_EXPIRE_DATE, {});
|
|
490
|
-
cookieUnset(coreHttpKit.CookieName.REFRESH_TOKEN, {});
|
|
491
|
-
cookieUnset(coreHttpKit.CookieName.USER, {});
|
|
492
|
-
cookieUnset(coreHttpKit.CookieName.REALM, {});
|
|
493
|
-
cookieUnset(coreHttpKit.CookieName.REALM_MANAGEMENT, {});
|
|
494
622
|
}
|
|
495
623
|
});
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
}
|
|
501
|
-
let maxAge;
|
|
502
|
-
if (state.accessTokenExpireDate) {
|
|
503
|
-
maxAge = Math.floor(Math.max(1000, new Date(`${state.accessTokenExpireDate}`).getTime() - Date.now()) / 1000);
|
|
504
|
-
}
|
|
505
|
-
if (state.accessToken) {
|
|
506
|
-
cookieSet(coreHttpKit.CookieName.ACCESS_TOKEN, state.accessToken, {
|
|
507
|
-
maxAge
|
|
508
|
-
});
|
|
509
|
-
}
|
|
510
|
-
if (state.accessTokenExpireDate) {
|
|
511
|
-
cookieSet(coreHttpKit.CookieName.ACCESS_TOKEN_EXPIRE_DATE, state.accessTokenExpireDate, {
|
|
624
|
+
storeDispatcher.on(StoreDispatcherEventName.ACCESS_TOKEN_UPDATED, (input)=>{
|
|
625
|
+
if (input) {
|
|
626
|
+
const maxAge = maxAgeFn();
|
|
627
|
+
cookieSet(coreHttpKit.CookieName.ACCESS_TOKEN, input, {
|
|
512
628
|
maxAge
|
|
513
629
|
});
|
|
630
|
+
} else {
|
|
631
|
+
cookieUnset(coreHttpKit.CookieName.ACCESS_TOKEN, {});
|
|
514
632
|
}
|
|
515
|
-
|
|
516
|
-
|
|
633
|
+
});
|
|
634
|
+
storeDispatcher.on(StoreDispatcherEventName.REFRESH_TOKEN_UPDATED, (input)=>{
|
|
635
|
+
if (input) {
|
|
636
|
+
cookieSet(coreHttpKit.CookieName.REFRESH_TOKEN, input, {});
|
|
637
|
+
} else {
|
|
638
|
+
cookieUnset(coreHttpKit.CookieName.REFRESH_TOKEN, {});
|
|
517
639
|
}
|
|
518
|
-
|
|
519
|
-
|
|
640
|
+
});
|
|
641
|
+
storeDispatcher.on(StoreDispatcherEventName.USER_UPDATED, (input)=>{
|
|
642
|
+
if (input) {
|
|
643
|
+
cookieSet(coreHttpKit.CookieName.USER, input, {});
|
|
644
|
+
} else {
|
|
645
|
+
cookieUnset(coreHttpKit.CookieName.USER, {});
|
|
520
646
|
}
|
|
521
|
-
|
|
522
|
-
|
|
647
|
+
});
|
|
648
|
+
storeDispatcher.on(StoreDispatcherEventName.REALM_UPDATED, (input)=>{
|
|
649
|
+
if (input) {
|
|
650
|
+
cookieSet(coreHttpKit.CookieName.REALM, input, {});
|
|
651
|
+
} else {
|
|
652
|
+
cookieUnset(coreHttpKit.CookieName.REALM, {});
|
|
523
653
|
}
|
|
524
|
-
|
|
525
|
-
|
|
654
|
+
});
|
|
655
|
+
storeDispatcher.on(StoreDispatcherEventName.REALM_MANAGEMENT_UPDATED, (input)=>{
|
|
656
|
+
if (input) {
|
|
657
|
+
cookieSet(coreHttpKit.CookieName.REALM_MANAGEMENT, input, {});
|
|
658
|
+
} else {
|
|
659
|
+
cookieUnset(coreHttpKit.CookieName.REALM_MANAGEMENT, {});
|
|
526
660
|
}
|
|
527
661
|
});
|
|
662
|
+
readCookies();
|
|
528
663
|
provideStoreFactory(storeFactory, app);
|
|
529
664
|
}
|
|
530
665
|
|
|
@@ -562,30 +697,36 @@ function installHTTPClient(app, options = {}) {
|
|
|
562
697
|
});
|
|
563
698
|
},
|
|
564
699
|
tokenCreated: (response)=>{
|
|
565
|
-
store.
|
|
700
|
+
store.applyTokenGrantResponse(response);
|
|
566
701
|
},
|
|
567
702
|
tokenFailed: ()=>{
|
|
568
|
-
store.logout();
|
|
703
|
+
Promise.resolve().then(()=>store.logout());
|
|
569
704
|
},
|
|
570
705
|
timer: !options.isServer
|
|
571
706
|
});
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
if (
|
|
707
|
+
const storeDispatcher = injectStoreDispatcher(app);
|
|
708
|
+
const handleAccessTokenEvent = ()=>{
|
|
709
|
+
if (store.accessToken) {
|
|
575
710
|
client.setAuthorizationHeader({
|
|
576
711
|
type: 'Bearer',
|
|
577
|
-
token:
|
|
712
|
+
token: store.accessToken
|
|
578
713
|
});
|
|
579
714
|
tokenHook.mount();
|
|
580
715
|
} else {
|
|
581
716
|
client.unsetAuthorizationHeader();
|
|
582
717
|
tokenHook.unmount();
|
|
583
718
|
}
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
719
|
+
};
|
|
720
|
+
const handleAccessTokenExpireDateEvent = ()=>{
|
|
721
|
+
if (store.accessTokenExpireDate) {
|
|
722
|
+
const expiresIn = Math.floor((store.accessTokenExpireDate.getTime() - Date.now()) / 1000);
|
|
723
|
+
tokenHook.setTimer(expiresIn, ()=>refreshToken.value || undefined);
|
|
587
724
|
}
|
|
588
|
-
}
|
|
725
|
+
};
|
|
726
|
+
storeDispatcher.on(StoreDispatcherEventName.ACCESS_TOKEN_UPDATED, ()=>handleAccessTokenEvent());
|
|
727
|
+
storeDispatcher.on(StoreDispatcherEventName.ACCESS_TOKEN_EXPIRE_DATE_UPDATED, ()=>handleAccessTokenExpireDateEvent());
|
|
728
|
+
handleAccessTokenEvent();
|
|
729
|
+
handleAccessTokenExpireDateEvent();
|
|
589
730
|
provideHTTPClient(client, app);
|
|
590
731
|
}
|
|
591
732
|
|
|
@@ -1040,7 +1181,7 @@ function createList(context) {
|
|
|
1040
1181
|
}
|
|
1041
1182
|
}
|
|
1042
1183
|
const handleCreated = buildListCreatedHandler(data, (cbEntity)=>{
|
|
1043
|
-
total.value
|
|
1184
|
+
total.value++;
|
|
1044
1185
|
if (context.onCreated) {
|
|
1045
1186
|
context.onCreated(cbEntity, meta.value);
|
|
1046
1187
|
}
|
|
@@ -1073,7 +1214,7 @@ function createList(context) {
|
|
|
1073
1214
|
noMore: renderOptions.noMore,
|
|
1074
1215
|
body: renderOptions.body,
|
|
1075
1216
|
loading: renderOptions.loading,
|
|
1076
|
-
total,
|
|
1217
|
+
total: total.value,
|
|
1077
1218
|
load,
|
|
1078
1219
|
busy: busy.value,
|
|
1079
1220
|
data: data.value,
|
|
@@ -1082,16 +1223,19 @@ function createList(context) {
|
|
|
1082
1223
|
if (context.setup.emit) {
|
|
1083
1224
|
context.setup.emit('created', value);
|
|
1084
1225
|
}
|
|
1226
|
+
handleCreated(value);
|
|
1085
1227
|
},
|
|
1086
1228
|
onDeleted: (value)=>{
|
|
1087
1229
|
if (context.setup.emit) {
|
|
1088
1230
|
context.setup.emit('deleted', value);
|
|
1089
1231
|
}
|
|
1232
|
+
handleDeleted(value);
|
|
1090
1233
|
},
|
|
1091
1234
|
onUpdated: (value)=>{
|
|
1092
1235
|
if (context.setup.emit) {
|
|
1093
1236
|
context.setup.emit('updated', value);
|
|
1094
1237
|
}
|
|
1238
|
+
handleUpdated(value);
|
|
1095
1239
|
},
|
|
1096
1240
|
slotItems: context.setup.slots || {}
|
|
1097
1241
|
});
|
|
@@ -4071,7 +4215,11 @@ const AIdentityProviderPreset = vue.defineComponent({
|
|
|
4071
4215
|
}
|
|
4072
4216
|
});
|
|
4073
4217
|
|
|
4074
|
-
|
|
4218
|
+
var _sfc_main = vue.defineComponent({
|
|
4219
|
+
components: {
|
|
4220
|
+
AIdentityProviderPreset,
|
|
4221
|
+
AIdentityProviderProtocol
|
|
4222
|
+
},
|
|
4075
4223
|
props: {
|
|
4076
4224
|
protocol: {
|
|
4077
4225
|
type: String
|
|
@@ -4084,113 +4232,139 @@ const AIdentityProviderPicker = vue.defineComponent({
|
|
|
4084
4232
|
'pick'
|
|
4085
4233
|
],
|
|
4086
4234
|
setup (props, setup) {
|
|
4087
|
-
const protocols =
|
|
4088
|
-
const presets =
|
|
4089
|
-
|
|
4090
|
-
|
|
4091
|
-
id
|
|
4092
|
-
});
|
|
4093
|
-
return id;
|
|
4094
|
-
});
|
|
4095
|
-
Object.values(coreKit.IdentityProviderPreset).map((id)=>{
|
|
4096
|
-
presets.push({
|
|
4097
|
-
id
|
|
4098
|
-
});
|
|
4099
|
-
return id;
|
|
4100
|
-
});
|
|
4101
|
-
const pick = (ctx)=>{
|
|
4102
|
-
setup.emit('pick', ctx);
|
|
4235
|
+
const protocols = Object.values(coreKit.IdentityProviderProtocol);
|
|
4236
|
+
const presets = Object.values(coreKit.IdentityProviderPreset);
|
|
4237
|
+
const pickProtocol = (protocol)=>{
|
|
4238
|
+
setup.emit('pick', 'protocol', protocol);
|
|
4103
4239
|
};
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
|
|
4112
|
-
item: {
|
|
4113
|
-
class: [
|
|
4114
|
-
'me-1 list-item'
|
|
4115
|
-
],
|
|
4116
|
-
icon: false,
|
|
4117
|
-
content: (item)=>vue.h(AIdentityProviderProtocol, {
|
|
4118
|
-
id: item.id
|
|
4119
|
-
}, {
|
|
4120
|
-
default: (element)=>[
|
|
4121
|
-
vue.h('i', {
|
|
4122
|
-
class: [
|
|
4123
|
-
element.icon,
|
|
4124
|
-
'pe-1'
|
|
4125
|
-
]
|
|
4126
|
-
}),
|
|
4127
|
-
element.name,
|
|
4128
|
-
vue.h('button', {
|
|
4129
|
-
class: 'btn btn-xs btn-dark ms-1',
|
|
4130
|
-
onClick ($event) {
|
|
4131
|
-
$event.preventDefault();
|
|
4132
|
-
pick({
|
|
4133
|
-
protocol: item.id
|
|
4134
|
-
});
|
|
4135
|
-
}
|
|
4136
|
-
}, [
|
|
4137
|
-
vue.h('i', {
|
|
4138
|
-
class: 'fa fa-plus'
|
|
4139
|
-
})
|
|
4140
|
-
])
|
|
4141
|
-
]
|
|
4142
|
-
})
|
|
4143
|
-
}
|
|
4144
|
-
}
|
|
4145
|
-
});
|
|
4146
|
-
const protocolNodeConfigurationNode = listControls.buildList({
|
|
4147
|
-
data: presets,
|
|
4148
|
-
header: {
|
|
4149
|
-
content: vue.h('h6', 'Presets')
|
|
4150
|
-
},
|
|
4151
|
-
body: {
|
|
4152
|
-
class: 'd-flex flex-row',
|
|
4153
|
-
item: {
|
|
4154
|
-
class: 'me-1 list-item',
|
|
4155
|
-
icon: false,
|
|
4156
|
-
content: (preset)=>vue.h(AIdentityProviderPreset, {
|
|
4157
|
-
id: preset.id
|
|
4158
|
-
}, {
|
|
4159
|
-
default: (item)=>vue.h('div', [
|
|
4160
|
-
vue.h('i', {
|
|
4161
|
-
class: [
|
|
4162
|
-
item.icon,
|
|
4163
|
-
'pe-1'
|
|
4164
|
-
]
|
|
4165
|
-
}),
|
|
4166
|
-
item.name,
|
|
4167
|
-
vue.h('button', {
|
|
4168
|
-
class: 'btn btn-xs btn-dark ms-1',
|
|
4169
|
-
onClick ($event) {
|
|
4170
|
-
$event.preventDefault();
|
|
4171
|
-
pick({
|
|
4172
|
-
preset: preset.id,
|
|
4173
|
-
protocol: coreKit.getIdentityProviderProtocolForPreset(preset.id)
|
|
4174
|
-
});
|
|
4175
|
-
}
|
|
4176
|
-
}, [
|
|
4177
|
-
vue.h('i', {
|
|
4178
|
-
class: 'fa fa-plus'
|
|
4179
|
-
})
|
|
4180
|
-
])
|
|
4181
|
-
])
|
|
4182
|
-
})
|
|
4183
|
-
}
|
|
4184
|
-
}
|
|
4185
|
-
});
|
|
4186
|
-
return [
|
|
4187
|
-
protocolNode,
|
|
4188
|
-
protocolNodeConfigurationNode
|
|
4189
|
-
];
|
|
4240
|
+
const pickPreset = (preset)=>{
|
|
4241
|
+
setup.emit('pick', 'preset', preset);
|
|
4242
|
+
};
|
|
4243
|
+
return {
|
|
4244
|
+
protocols,
|
|
4245
|
+
presets,
|
|
4246
|
+
pickProtocol,
|
|
4247
|
+
pickPreset
|
|
4190
4248
|
};
|
|
4191
4249
|
}
|
|
4192
4250
|
});
|
|
4193
4251
|
|
|
4252
|
+
var _export_sfc = (sfc, props) => {
|
|
4253
|
+
const target = sfc.__vccOpts || sfc;
|
|
4254
|
+
for (const [key, val] of props) {
|
|
4255
|
+
target[key] = val;
|
|
4256
|
+
}
|
|
4257
|
+
return target;
|
|
4258
|
+
};
|
|
4259
|
+
|
|
4260
|
+
const _hoisted_1 = {
|
|
4261
|
+
class: "d-flex flex-column gap-2"
|
|
4262
|
+
};
|
|
4263
|
+
const _hoisted_2 = {
|
|
4264
|
+
class: "d-flex flex-row gap-2 flex-wrap"
|
|
4265
|
+
};
|
|
4266
|
+
const _hoisted_3 = [
|
|
4267
|
+
"onClick"
|
|
4268
|
+
];
|
|
4269
|
+
const _hoisted_4 = {
|
|
4270
|
+
class: "d-flex flex-row gap-2 flex-wrap"
|
|
4271
|
+
};
|
|
4272
|
+
const _hoisted_5 = [
|
|
4273
|
+
"onClick"
|
|
4274
|
+
];
|
|
4275
|
+
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
4276
|
+
const _component_AIdentityProviderProtocol = vue.resolveComponent("AIdentityProviderProtocol");
|
|
4277
|
+
const _component_AIdentityProviderPreset = vue.resolveComponent("AIdentityProviderPreset");
|
|
4278
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
4279
|
+
vue.createElementVNode("div", null, [
|
|
4280
|
+
_cache[0] || (_cache[0] = vue.createElementVNode("h6", null, "Protocols", -1)),
|
|
4281
|
+
vue.createElementVNode("div", _hoisted_2, [
|
|
4282
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.protocols, (item, key)=>{
|
|
4283
|
+
return vue.openBlock(), vue.createBlock(_component_AIdentityProviderProtocol, {
|
|
4284
|
+
key,
|
|
4285
|
+
id: item
|
|
4286
|
+
}, {
|
|
4287
|
+
default: vue.withCtx((props)=>[
|
|
4288
|
+
vue.createElementVNode("div", {
|
|
4289
|
+
class: vue.normalizeClass([
|
|
4290
|
+
{
|
|
4291
|
+
"active": item === _ctx.protocol && !_ctx.preset
|
|
4292
|
+
},
|
|
4293
|
+
"d-flex flex-column gap-1 text-center identity-provider-picker-item"
|
|
4294
|
+
]),
|
|
4295
|
+
onClick: vue.withModifiers(($event)=>_ctx.pickProtocol(item), [
|
|
4296
|
+
"prevent"
|
|
4297
|
+
])
|
|
4298
|
+
}, [
|
|
4299
|
+
vue.createElementVNode("div", null, [
|
|
4300
|
+
vue.createElementVNode("i", {
|
|
4301
|
+
class: vue.normalizeClass([
|
|
4302
|
+
"fa-2x",
|
|
4303
|
+
props.icon
|
|
4304
|
+
])
|
|
4305
|
+
}, null, 2)
|
|
4306
|
+
]),
|
|
4307
|
+
vue.createElementVNode("div", null, vue.toDisplayString(props.name), 1)
|
|
4308
|
+
], 10, _hoisted_3)
|
|
4309
|
+
]),
|
|
4310
|
+
_: 2
|
|
4311
|
+
}, 1032, [
|
|
4312
|
+
"id"
|
|
4313
|
+
]);
|
|
4314
|
+
}), 128))
|
|
4315
|
+
])
|
|
4316
|
+
]),
|
|
4317
|
+
vue.createElementVNode("div", null, [
|
|
4318
|
+
_cache[1] || (_cache[1] = vue.createElementVNode("h6", null, "Presets", -1)),
|
|
4319
|
+
vue.createElementVNode("div", _hoisted_4, [
|
|
4320
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.presets, (item, key)=>{
|
|
4321
|
+
return vue.openBlock(), vue.createBlock(_component_AIdentityProviderPreset, {
|
|
4322
|
+
key,
|
|
4323
|
+
id: item
|
|
4324
|
+
}, {
|
|
4325
|
+
default: vue.withCtx((props)=>[
|
|
4326
|
+
vue.createElementVNode("div", {
|
|
4327
|
+
class: vue.normalizeClass([
|
|
4328
|
+
{
|
|
4329
|
+
"active": item === _ctx.preset
|
|
4330
|
+
},
|
|
4331
|
+
"d-flex flex-column gap-1 text-center identity-provider-picker-item"
|
|
4332
|
+
]),
|
|
4333
|
+
onClick: vue.withModifiers(($event)=>_ctx.pickPreset(item), [
|
|
4334
|
+
"prevent"
|
|
4335
|
+
])
|
|
4336
|
+
}, [
|
|
4337
|
+
vue.createElementVNode("div", null, [
|
|
4338
|
+
vue.createElementVNode("i", {
|
|
4339
|
+
class: vue.normalizeClass([
|
|
4340
|
+
"fa-2x",
|
|
4341
|
+
props.icon
|
|
4342
|
+
])
|
|
4343
|
+
}, null, 2)
|
|
4344
|
+
]),
|
|
4345
|
+
vue.createElementVNode("div", null, vue.toDisplayString(props.name), 1)
|
|
4346
|
+
], 10, _hoisted_5)
|
|
4347
|
+
]),
|
|
4348
|
+
_: 2
|
|
4349
|
+
}, 1032, [
|
|
4350
|
+
"id"
|
|
4351
|
+
]);
|
|
4352
|
+
}), 128))
|
|
4353
|
+
])
|
|
4354
|
+
])
|
|
4355
|
+
]);
|
|
4356
|
+
}
|
|
4357
|
+
var AIdentityProviderPicker = /* @__PURE__ */ _export_sfc(_sfc_main, [
|
|
4358
|
+
[
|
|
4359
|
+
"render",
|
|
4360
|
+
_sfc_render
|
|
4361
|
+
],
|
|
4362
|
+
[
|
|
4363
|
+
"__scopeId",
|
|
4364
|
+
"data-v-0df1e731"
|
|
4365
|
+
]
|
|
4366
|
+
]);
|
|
4367
|
+
|
|
4194
4368
|
const AIdentityProviderOAuth2ClientFields = vue.defineComponent({
|
|
4195
4369
|
props: {
|
|
4196
4370
|
entity: {
|
|
@@ -4728,17 +4902,16 @@ const AIdentityProviderForm = vue.defineComponent({
|
|
|
4728
4902
|
set();
|
|
4729
4903
|
onChange(updatedAt, ()=>set());
|
|
4730
4904
|
const renderPicker = ()=>vue.h(AIdentityProviderPicker, {
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
|
|
4734
|
-
|
|
4735
|
-
|
|
4736
|
-
|
|
4737
|
-
|
|
4738
|
-
preset.value = value.preset;
|
|
4739
|
-
} else {
|
|
4740
|
-
preset.value = null;
|
|
4905
|
+
protocol: protocol.value,
|
|
4906
|
+
preset: preset.value,
|
|
4907
|
+
onPick (type, value) {
|
|
4908
|
+
if (type === 'preset') {
|
|
4909
|
+
preset.value = value;
|
|
4910
|
+
protocol.value = `${coreKit.getIdentityProviderProtocolForPreset(value)}`;
|
|
4911
|
+
return;
|
|
4741
4912
|
}
|
|
4913
|
+
protocol.value = value;
|
|
4914
|
+
preset.value = null;
|
|
4742
4915
|
}
|
|
4743
4916
|
});
|
|
4744
4917
|
const render = (node)=>{
|
|
@@ -7182,7 +7355,7 @@ exports.HTTPClientSymbol = HTTPClientSymbol;
|
|
|
7182
7355
|
exports.LanguageSwitcherDropdown = LanguageSwitcherDropdown;
|
|
7183
7356
|
exports.STORE_ID = STORE_ID;
|
|
7184
7357
|
exports.SocketClientSymbol = SocketClientSymbol;
|
|
7185
|
-
exports.
|
|
7358
|
+
exports.StoreDispatcherEventName = StoreDispatcherEventName;
|
|
7186
7359
|
exports.TranslatorTranslationClientKey = TranslatorTranslationClientKey;
|
|
7187
7360
|
exports.TranslatorTranslationDefaultKey = TranslatorTranslationDefaultKey;
|
|
7188
7361
|
exports.TranslatorTranslationGroup = TranslatorTranslationGroup;
|
|
@@ -7199,6 +7372,7 @@ exports.createFormSubmitTranslations = createFormSubmitTranslations;
|
|
|
7199
7372
|
exports.createList = createList;
|
|
7200
7373
|
exports.createPermissionCheckerReactiveFn = createPermissionCheckerReactiveFn;
|
|
7201
7374
|
exports.createStore = createStore;
|
|
7375
|
+
exports.createStoreDispatcher = createStoreDispatcher;
|
|
7202
7376
|
exports.default = index;
|
|
7203
7377
|
exports.defineEntityManagerEvents = defineEntityManagerEvents;
|
|
7204
7378
|
exports.defineEntityManagerProps = defineEntityManagerProps;
|
|
@@ -7214,6 +7388,7 @@ exports.initFormAttributesFromSource = initFormAttributesFromSource;
|
|
|
7214
7388
|
exports.inject = inject$1;
|
|
7215
7389
|
exports.injectHTTPClient = injectHTTPClient;
|
|
7216
7390
|
exports.injectSocketManager = injectSocketManager;
|
|
7391
|
+
exports.injectStoreDispatcher = injectStoreDispatcher;
|
|
7217
7392
|
exports.injectStoreFactory = injectStoreFactory;
|
|
7218
7393
|
exports.injectTranslatorLocale = injectTranslatorLocale;
|
|
7219
7394
|
exports.install = install;
|
|
@@ -7229,6 +7404,7 @@ exports.onChange = onChange;
|
|
|
7229
7404
|
exports.provide = provide;
|
|
7230
7405
|
exports.provideHTTPClient = provideHTTPClient;
|
|
7231
7406
|
exports.provideSocketManager = provideSocketManager;
|
|
7407
|
+
exports.provideStoreDispatcher = provideStoreDispatcher;
|
|
7232
7408
|
exports.provideStoreFactory = provideStoreFactory;
|
|
7233
7409
|
exports.renderEntityAssignAction = renderEntityAssignAction;
|
|
7234
7410
|
exports.storeToRefs = storeToRefs;
|