@dereekb/dbx-core 9.14.2 → 9.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export * from './uid.hook';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9hdXRoL2hvb2svaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3VpZC5ob29rJztcbiJdfQ==
@@ -0,0 +1,55 @@
1
+ import { DbxAuthService } from '../../../auth/service/auth.service';
2
+ import { map, first, switchMap, firstValueFrom, of } from 'rxjs';
3
+ export const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE = '0';
4
+ export const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY = 'uid';
5
+ /**
6
+ * This hook asserts the user is allowed to view a route with a user identifier as a parameter.
7
+ *
8
+ * If not, or
9
+ */
10
+ export function redirectForUserIdentifierParamHook(input) {
11
+ const { uidParam = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, defaultParamValue = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, transitionService, canViewUser } = input;
12
+ const criteria = typeof input.criteria === 'string' ? { entering: input.criteria } : input.criteria;
13
+ // https://ui-router.github.io/ng2/docs/latest/modules/transition.html#hookresult
14
+ const assertAllowedUid = (transition) => {
15
+ const $state = transition.router.stateService;
16
+ const injector = transition.injector();
17
+ const authService = injector.get(DbxAuthService);
18
+ const params = transition.params();
19
+ const transitionTargetUid = params[uidParam];
20
+ return firstValueFrom(authService.userIdentifier$.pipe(first(), switchMap((currentUserId) => {
21
+ let result = of(true);
22
+ let redirectToUid;
23
+ if (!transitionTargetUid || transitionTargetUid === DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE) {
24
+ // If uid isn't set, default to the current user.
25
+ redirectToUid = of(currentUserId);
26
+ }
27
+ else if (currentUserId !== transitionTargetUid) {
28
+ redirectToUid = canViewUser(transitionTargetUid, authService, injector).pipe(map((x) => {
29
+ if (typeof x === 'boolean') {
30
+ return x ? transitionTargetUid : currentUserId;
31
+ }
32
+ else {
33
+ return x;
34
+ }
35
+ }));
36
+ }
37
+ if (redirectToUid != null) {
38
+ result = redirectToUid.pipe(first(), map((targetUid) => {
39
+ if (targetUid !== transitionTargetUid) {
40
+ const target = transition.targetState();
41
+ const state = target.state();
42
+ return $state.target(state, { ...params, uid: targetUid }, { location: true });
43
+ }
44
+ else {
45
+ return true;
46
+ }
47
+ }));
48
+ }
49
+ return result;
50
+ })));
51
+ };
52
+ // Register the "requires auth" hook with the TransitionsService
53
+ transitionService.onBefore(criteria, assertAllowedUid, { priority: 100 });
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlkLmhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9hdXRoL2hvb2svdWlkLmhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxjQUFjLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JGLE1BQU0sQ0FBQyxNQUFNLGdEQUFnRCxHQUFHLEdBQUcsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSw4Q0FBOEMsR0FBRyxLQUFLLENBQUM7QUEwQnBFOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0NBQWtDLENBQUMsS0FBOEM7SUFDL0YsTUFBTSxFQUFFLFFBQVEsR0FBRyw4Q0FBOEMsRUFBRSxpQkFBaUIsR0FBRyxnREFBZ0QsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbEwsTUFBTSxRQUFRLEdBQXNCLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUV2SCxpRkFBaUY7SUFDakYsTUFBTSxnQkFBZ0IsR0FBcUIsQ0FBQyxVQUFzQixFQUFjLEVBQUU7UUFDaEYsTUFBTSxNQUFNLEdBQWlCLFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQzVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFdBQVcsR0FBbUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFbkMsTUFBTSxtQkFBbUIsR0FBa0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVELE9BQU8sY0FBYyxDQUNuQixXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDOUIsS0FBSyxFQUFFLEVBQ1AsU0FBUyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxNQUFNLEdBQTJCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU5QyxJQUFJLGFBQTJELENBQUM7WUFFaEUsSUFBSSxDQUFDLG1CQUFtQixJQUFJLG1CQUFtQixLQUFLLGdEQUFnRCxFQUFFO2dCQUNwRyxpREFBaUQ7Z0JBQ2pELGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkM7aUJBQU0sSUFBSSxhQUFhLEtBQUssbUJBQW1CLEVBQUU7Z0JBQ2hELGFBQWEsR0FBRyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDMUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1IsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTLEVBQUU7d0JBQzFCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO3FCQUNoRDt5QkFBTTt3QkFDTCxPQUFPLENBQUMsQ0FBQztxQkFDVjtnQkFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO2FBQ0g7WUFFRCxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7Z0JBQ3pCLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUN6QixLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDaEIsSUFBSSxTQUFTLEtBQUssbUJBQW1CLEVBQUU7d0JBQ3JDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUM3QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7cUJBQ2hGO3lCQUFNO3dCQUNMLE9BQU8sSUFBSSxDQUFDO3FCQUNiO2dCQUNILENBQUMsQ0FBQyxDQUNILENBQUM7YUFDSDtZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQ1ksQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRixnRUFBZ0U7SUFDaEUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoVXNlcklkZW50aWZpZXIgfSBmcm9tICcuLi8uLi8uLi9hdXRoL2F1dGgudXNlcic7XG5pbXBvcnQgeyBEYnhBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2F1dGgvc2VydmljZS9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNpdGlvblNlcnZpY2UsIFRyYW5zaXRpb25Ib29rRm4sIFRyYW5zaXRpb24sIEhvb2tSZXN1bHQsIFN0YXRlU2VydmljZSwgSG9va01hdGNoQ3JpdGVyaWEgfSBmcm9tICdAdWlyb3V0ZXIvY29yZSc7XG5pbXBvcnQgeyBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgbWFwLCBmaXJzdCwgZmlsdGVyLCBzd2l0Y2hNYXAsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVESVJFQ1RfRk9SX1VTRVJfSURFTlRJRklFUl9QQVJBTV9WQUxVRSA9ICcwJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFRElSRUNUX0ZPUl9VU0VSX0lERU5USUZJRVJfUEFSQU1fS0VZID0gJ3VpZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3RGb3JVc2VySWRlbnRpZmllclBhcmFtSG9va0lucHV0IHtcbiAgLyoqXG4gICAqIFJvdXRlIHBhcmFtZXRlciB0byB1c2UuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIFwidWlkXCJcbiAgICovXG4gIHJlYWRvbmx5IHVpZFBhcmFtPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcGFyYW0gdmFsdWUgdG8gY2hlY2sgYWdhaW5zdC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gMC5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRQYXJhbVZhbHVlPzogc3RyaW5nO1xuICAvKipcbiAgICogQ3JpdGVyaWEgb3Igcm91dGUgdG8gd2F0Y2ggYW5kIGludGVyY2VwdC5cbiAgICovXG4gIHJlYWRvbmx5IGNyaXRlcmlhOiBIb29rTWF0Y2hDcml0ZXJpYSB8IHN0cmluZztcbiAgcmVhZG9ubHkgdHJhbnNpdGlvblNlcnZpY2U6IFRyYW5zaXRpb25TZXJ2aWNlO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgdXNlciBjYW4gdmlldyB0aGUgdGFyZ2V0IHVzZXIuXG4gICAqL1xuICByZWFkb25seSBjYW5WaWV3VXNlcjogKHRhcmdldFVpZDogQXV0aFVzZXJJZGVudGlmaWVyLCBhdXRoU2VydmljZTogRGJ4QXV0aFNlcnZpY2UsIGluamVjdG9yOiBJbmplY3RvcikgPT4gT2JzZXJ2YWJsZTxib29sZWFuIHwgQXV0aFVzZXJJZGVudGlmaWVyPjtcbn1cblxuLyoqXG4gKiBUaGlzIGhvb2sgYXNzZXJ0cyB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHZpZXcgYSByb3V0ZSB3aXRoIGEgdXNlciBpZGVudGlmaWVyIGFzIGEgcGFyYW1ldGVyLlxuICpcbiAqIElmIG5vdCwgb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZGlyZWN0Rm9yVXNlcklkZW50aWZpZXJQYXJhbUhvb2soaW5wdXQ6IFJlZGlyZWN0Rm9yVXNlcklkZW50aWZpZXJQYXJhbUhvb2tJbnB1dCk6IHZvaWQge1xuICBjb25zdCB7IHVpZFBhcmFtID0gREVGQVVMVF9SRURJUkVDVF9GT1JfVVNFUl9JREVOVElGSUVSX1BBUkFNX0tFWSwgZGVmYXVsdFBhcmFtVmFsdWUgPSBERUZBVUxUX1JFRElSRUNUX0ZPUl9VU0VSX0lERU5USUZJRVJfUEFSQU1fVkFMVUUsIHRyYW5zaXRpb25TZXJ2aWNlLCBjYW5WaWV3VXNlciB9ID0gaW5wdXQ7XG4gIGNvbnN0IGNyaXRlcmlhOiBIb29rTWF0Y2hDcml0ZXJpYSA9IHR5cGVvZiBpbnB1dC5jcml0ZXJpYSA9PT0gJ3N0cmluZycgPyB7IGVudGVyaW5nOiBpbnB1dC5jcml0ZXJpYSB9IDogaW5wdXQuY3JpdGVyaWE7XG5cbiAgLy8gaHR0cHM6Ly91aS1yb3V0ZXIuZ2l0aHViLmlvL25nMi9kb2NzL2xhdGVzdC9tb2R1bGVzL3RyYW5zaXRpb24uaHRtbCNob29rcmVzdWx0XG4gIGNvbnN0IGFzc2VydEFsbG93ZWRVaWQ6IFRyYW5zaXRpb25Ib29rRm4gPSAodHJhbnNpdGlvbjogVHJhbnNpdGlvbik6IEhvb2tSZXN1bHQgPT4ge1xuICAgIGNvbnN0ICRzdGF0ZTogU3RhdGVTZXJ2aWNlID0gdHJhbnNpdGlvbi5yb3V0ZXIuc3RhdGVTZXJ2aWNlO1xuICAgIGNvbnN0IGluamVjdG9yID0gdHJhbnNpdGlvbi5pbmplY3RvcigpO1xuICAgIGNvbnN0IGF1dGhTZXJ2aWNlOiBEYnhBdXRoU2VydmljZSA9IGluamVjdG9yLmdldChEYnhBdXRoU2VydmljZSk7XG4gICAgY29uc3QgcGFyYW1zID0gdHJhbnNpdGlvbi5wYXJhbXMoKTtcblxuICAgIGNvbnN0IHRyYW5zaXRpb25UYXJnZXRVaWQ6IE1heWJlPHN0cmluZz4gPSBwYXJhbXNbdWlkUGFyYW1dO1xuXG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKFxuICAgICAgYXV0aFNlcnZpY2UudXNlcklkZW50aWZpZXIkLnBpcGUoXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIHN3aXRjaE1hcCgoY3VycmVudFVzZXJJZCkgPT4ge1xuICAgICAgICAgIGxldCByZXN1bHQ6IE9ic2VydmFibGU8SG9va1Jlc3VsdD4gPSBvZih0cnVlKTtcblxuICAgICAgICAgIGxldCByZWRpcmVjdFRvVWlkOiBNYXliZTxPYnNlcnZhYmxlPE1heWJlPEF1dGhVc2VySWRlbnRpZmllcj4+PjtcblxuICAgICAgICAgIGlmICghdHJhbnNpdGlvblRhcmdldFVpZCB8fCB0cmFuc2l0aW9uVGFyZ2V0VWlkID09PSBERUZBVUxUX1JFRElSRUNUX0ZPUl9VU0VSX0lERU5USUZJRVJfUEFSQU1fVkFMVUUpIHtcbiAgICAgICAgICAgIC8vIElmIHVpZCBpc24ndCBzZXQsIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgdXNlci5cbiAgICAgICAgICAgIHJlZGlyZWN0VG9VaWQgPSBvZihjdXJyZW50VXNlcklkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRVc2VySWQgIT09IHRyYW5zaXRpb25UYXJnZXRVaWQpIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VG9VaWQgPSBjYW5WaWV3VXNlcih0cmFuc2l0aW9uVGFyZ2V0VWlkLCBhdXRoU2VydmljZSwgaW5qZWN0b3IpLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geCA/IHRyYW5zaXRpb25UYXJnZXRVaWQgOiBjdXJyZW50VXNlcklkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWRpcmVjdFRvVWlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlZGlyZWN0VG9VaWQucGlwZShcbiAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgbWFwKCh0YXJnZXRVaWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VWlkICE9PSB0cmFuc2l0aW9uVGFyZ2V0VWlkKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0cmFuc2l0aW9uLnRhcmdldFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRhcmdldC5zdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICRzdGF0ZS50YXJnZXQoc3RhdGUsIHsgLi4ucGFyYW1zLCB1aWQ6IHRhcmdldFVpZCB9LCB7IGxvY2F0aW9uOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKSBhcyBIb29rUmVzdWx0O1xuICB9O1xuXG4gIC8vIFJlZ2lzdGVyIHRoZSBcInJlcXVpcmVzIGF1dGhcIiBob29rIHdpdGggdGhlIFRyYW5zaXRpb25zU2VydmljZVxuICB0cmFuc2l0aW9uU2VydmljZS5vbkJlZm9yZShjcml0ZXJpYSwgYXNzZXJ0QWxsb3dlZFVpZCwgeyBwcmlvcml0eTogMTAwIH0pO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './hook';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9hdXRoL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ob29rJztcbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  export * from './anchor';
2
+ export * from './auth';
2
3
  export * from './router';
3
4
  export * from './segue';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYW5jaG9yJztcbmV4cG9ydCAqIGZyb20gJy4vcm91dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc2VndWUnO1xuIl19
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYW5jaG9yJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aCc7XG5leHBvcnQgKiBmcm9tICcuL3JvdXRlcic7XG5leHBvcnQgKiBmcm9tICcuL3NlZ3VlJztcbiJdfQ==
@@ -2219,6 +2219,59 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
2219
2219
  type: Input
2220
2220
  }] } });
2221
2221
 
2222
+ const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE = '0';
2223
+ const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY = 'uid';
2224
+ /**
2225
+ * This hook asserts the user is allowed to view a route with a user identifier as a parameter.
2226
+ *
2227
+ * If not, or
2228
+ */
2229
+ function redirectForUserIdentifierParamHook(input) {
2230
+ const { uidParam = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, defaultParamValue = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, transitionService, canViewUser } = input;
2231
+ const criteria = typeof input.criteria === 'string' ? { entering: input.criteria } : input.criteria;
2232
+ // https://ui-router.github.io/ng2/docs/latest/modules/transition.html#hookresult
2233
+ const assertAllowedUid = (transition) => {
2234
+ const $state = transition.router.stateService;
2235
+ const injector = transition.injector();
2236
+ const authService = injector.get(DbxAuthService);
2237
+ const params = transition.params();
2238
+ const transitionTargetUid = params[uidParam];
2239
+ return firstValueFrom(authService.userIdentifier$.pipe(first(), switchMap((currentUserId) => {
2240
+ let result = of(true);
2241
+ let redirectToUid;
2242
+ if (!transitionTargetUid || transitionTargetUid === DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE) {
2243
+ // If uid isn't set, default to the current user.
2244
+ redirectToUid = of(currentUserId);
2245
+ }
2246
+ else if (currentUserId !== transitionTargetUid) {
2247
+ redirectToUid = canViewUser(transitionTargetUid, authService, injector).pipe(map((x) => {
2248
+ if (typeof x === 'boolean') {
2249
+ return x ? transitionTargetUid : currentUserId;
2250
+ }
2251
+ else {
2252
+ return x;
2253
+ }
2254
+ }));
2255
+ }
2256
+ if (redirectToUid != null) {
2257
+ result = redirectToUid.pipe(first(), map((targetUid) => {
2258
+ if (targetUid !== transitionTargetUid) {
2259
+ const target = transition.targetState();
2260
+ const state = target.state();
2261
+ return $state.target(state, Object.assign(Object.assign({}, params), { uid: targetUid }), { location: true });
2262
+ }
2263
+ else {
2264
+ return true;
2265
+ }
2266
+ }));
2267
+ }
2268
+ return result;
2269
+ })));
2270
+ };
2271
+ // Register the "requires auth" hook with the TransitionsService
2272
+ transitionService.onBefore(criteria, assertAllowedUid, { priority: 100 });
2273
+ }
2274
+
2222
2275
  var DbxRouterTransitionEventType;
2223
2276
  (function (DbxRouterTransitionEventType) {
2224
2277
  /**
@@ -4708,5 +4761,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
4708
4761
  * Generated bundle index. Do not edit.
4709
4762
  */
4710
4763
 
4711
- export { APP_ACTION_DISABLED_DIRECTIVE_KEY, APP_ACTION_ENFORCE_MODIFIED_DIRECTIVE_KEY, AbstractActionFilterSourceDirective, AbstractDbxActionValueOnTriggerDirective, AbstractDbxAnchorDirective, AbstractDbxButtonDirective, AbstractDbxFilterMapInstanceDirective, AbstractDbxInjectionDirective, AbstractFilterSourceConnectorDirective, AbstractFilterSourceDirective, AbstractForwardDbxInjectionContextDirective, AbstractIfDirective, AbstractLockSetSubscriptionDirective, AbstractSubscriptionDirective, AbstractTransitionDirective, AbstractTransitionWatcherDirective, ActionContextStore, ActionContextStoreSource, ActionContextStoreSourceMap, AnchorType, DBX_APP_APP_CONTEXT_STATE, DBX_APP_AUTH_ROUTER_EFFECTS_TOKEN, DBX_AUTH_APP_CONTEXT_STATE, DBX_INIT_APP_CONTEXT_STATE, DBX_INJECTION_COMPONENT_DATA, DBX_KNOWN_APP_CONTEXT_STATES, DBX_ONBOARDING_APP_CONTEXT_STATE, DBX_PUBLIC_APP_CONTEXT_STATE, DEFAULT_ACTION_DISABLED_KEY, DEFAULT_ACTION_MAP_WORKING_DISABLED_KEY, DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN, DEFAULT_STORAGE_OBJECT_TOKEN, DateDistancePipe, DateFormatDistancePipe, DateFromToTimePipe, DbxActionAutoModifyDirective, DbxActionAutoTriggerDirective, DbxActionButtonDirective, DbxActionButtonTriggerDirective, DbxActionContextBaseSource, DbxActionContextLoggerDirective, DbxActionContextMachine, DbxActionContextMapDirective, DbxActionContextMapDirectiveSourceInstance, DbxActionContextStoreSourceInstance, DbxActionDirective, DbxActionDisabledDirective, DbxActionEnforceModifiedDirective, DbxActionFromMapDirective, DbxActionHandlerDirective, DbxActionHasSuccessDirective, DbxActionIsWorkingDirective, DbxActionMapSourceDirective, DbxActionMapWorkingDisableDirective, DbxActionSourceDirective, DbxActionState, DbxActionSuccessHandlerDirective, DbxActionValueDirective, DbxActionValueOnTriggerInstance, DbxActionValueTriggerDirective, DbxActionWorkInstanceDelegate, DbxAnchor, DbxAngularRouterService, DbxAppAuthRouterEffects, DbxAppAuthRouterModule, DbxAppAuthRouterService, DbxAppAuthRouterStateModule, DbxAppAuthRoutes, DbxAppAuthStateModule, DbxAppAuthStateService, DbxAppContextService, DbxAppContextStateDirective, DbxAppContextStateModule, DbxAuthHasAnyRoleDirective, DbxAuthHasRolesDirective, DbxAuthNotAnyRolesDirective, DbxAuthService, DbxButton, DbxButtonDirective, DbxButtonSegueDirective, DbxCoreActionModule, DbxCoreAngularRouterSegueModule, DbxCoreAuthModule, DbxCoreButtonModule, DbxCoreFilterModule, DbxCoreUIRouterSegueModule, DbxDatePipeModule, DbxFilterMapDirective, DbxFilterMapSourceConnectorDirective, DbxFilterMapSourceDirective, DbxFilterSourceConnectorDirective, DbxFilterSourceDirective, DbxInjectionComponent, DbxInjectionComponentModule, DbxInjectionContext, DbxInjectionContextDirective, DbxInjectionInstance, DbxLoadingButtonDirective, DbxMiscPipeModule, DbxPipesModule, DbxRouteParamDefaultRedirectInstance, DbxRouteParamReaderInstance, DbxRouterService, DbxRouterTransitionEventType, DbxRouterTransitionService, DbxStorageModule, DbxUIRouterService, FullLocalStorageObject, InstantStorageAccessor, LimitedStorageAccessor, LockSetComponentStore, MemoryStorageObject, MinutesStringPipe, NO_AUTH_USER_IDENTIFIER, PrettyJsonPipe, SecondaryActionContextStoreSource, SimpleStorageAccessor, SimpleStorageAccessorFactory, StorageAccessor, StringStorageAccessor, StringifySimpleStorageAccessorConverter, TimeDistanceCountdownPipe, TimeDistancePipe, ToJsDatePipe, ToMinutesPipe, WrapperSimpleStorageAccessorDelegate, actionContextHasNoErrorAndIsModifiedAndCanTrigger, actionContextIsModifiedAndCanTrigger, actionContextStoreSourceInstanceFactory, actionContextStoreSourcePipe, anchorTypeForAnchor, asSegueRef, asSegueRefString, authRolesSetContainsAllRolesFrom, authRolesSetContainsAnyRoleFrom, authRolesSetContainsNoRolesFrom, authUserIdentifier, canReadyValue, canTriggerAction, canTriggerActionState, checkNgContentWrapperHasContent, dbxActionValueStreamDirective, defaultStorageObjectFactory, enableHasAuthRoleHook, enableHasAuthStateHook, enableIsLoggedInHook, expandClickableAnchorLinkTree, expandClickableAnchorLinkTreeNode, expandClickableAnchorLinkTrees, filterTransitionEvent, filterTransitionSuccess, flattenExpandedClickableAnchorLinkTree, flattenExpandedClickableAnchorLinkTreeToLinks, index as fromDbxAppAuth, index$2 as fromDbxAppContext, goWithRouter, isActionContextDisabled, isActionContextEnabled, isDisabledActionContextState, isIdleActionState, isLatestSuccessfulRoute, isSegueRef, isWorkingActionState, loadingStateForActionContextState, loadingStateTypeForActionContextState, loadingStateTypeForActionState, loggedInObsFromIsLoggedIn, loggedOutObsFromIsLoggedIn, makeAuthTransitionHook, makeDbxActionContextSourceReference, mapRefStringObsToSegueRefObs, mergeDbxInjectionComponentConfigs, index$1 as onDbxAppAuth, index$3 as onDbxAppContext, pipeActionStore, provideActionStoreSource, provideDbxAnchor, provideDbxButton, provideDbxInjectionContext, provideFilterSource, provideFilterSourceConnector, provideSecondaryActionStoreSource, redirectBasedOnAuthUserState, refStringToSegueRef, safeDetectChanges, safeMarkForCheck, safeUseCdRef, successTransition, tapDetectChanges, tapSafeMarkForCheck, useActionStore };
4764
+ export { APP_ACTION_DISABLED_DIRECTIVE_KEY, APP_ACTION_ENFORCE_MODIFIED_DIRECTIVE_KEY, AbstractActionFilterSourceDirective, AbstractDbxActionValueOnTriggerDirective, AbstractDbxAnchorDirective, AbstractDbxButtonDirective, AbstractDbxFilterMapInstanceDirective, AbstractDbxInjectionDirective, AbstractFilterSourceConnectorDirective, AbstractFilterSourceDirective, AbstractForwardDbxInjectionContextDirective, AbstractIfDirective, AbstractLockSetSubscriptionDirective, AbstractSubscriptionDirective, AbstractTransitionDirective, AbstractTransitionWatcherDirective, ActionContextStore, ActionContextStoreSource, ActionContextStoreSourceMap, AnchorType, DBX_APP_APP_CONTEXT_STATE, DBX_APP_AUTH_ROUTER_EFFECTS_TOKEN, DBX_AUTH_APP_CONTEXT_STATE, DBX_INIT_APP_CONTEXT_STATE, DBX_INJECTION_COMPONENT_DATA, DBX_KNOWN_APP_CONTEXT_STATES, DBX_ONBOARDING_APP_CONTEXT_STATE, DBX_PUBLIC_APP_CONTEXT_STATE, DEFAULT_ACTION_DISABLED_KEY, DEFAULT_ACTION_MAP_WORKING_DISABLED_KEY, DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN, DEFAULT_STORAGE_OBJECT_TOKEN, DateDistancePipe, DateFormatDistancePipe, DateFromToTimePipe, DbxActionAutoModifyDirective, DbxActionAutoTriggerDirective, DbxActionButtonDirective, DbxActionButtonTriggerDirective, DbxActionContextBaseSource, DbxActionContextLoggerDirective, DbxActionContextMachine, DbxActionContextMapDirective, DbxActionContextMapDirectiveSourceInstance, DbxActionContextStoreSourceInstance, DbxActionDirective, DbxActionDisabledDirective, DbxActionEnforceModifiedDirective, DbxActionFromMapDirective, DbxActionHandlerDirective, DbxActionHasSuccessDirective, DbxActionIsWorkingDirective, DbxActionMapSourceDirective, DbxActionMapWorkingDisableDirective, DbxActionSourceDirective, DbxActionState, DbxActionSuccessHandlerDirective, DbxActionValueDirective, DbxActionValueOnTriggerInstance, DbxActionValueTriggerDirective, DbxActionWorkInstanceDelegate, DbxAnchor, DbxAngularRouterService, DbxAppAuthRouterEffects, DbxAppAuthRouterModule, DbxAppAuthRouterService, DbxAppAuthRouterStateModule, DbxAppAuthRoutes, DbxAppAuthStateModule, DbxAppAuthStateService, DbxAppContextService, DbxAppContextStateDirective, DbxAppContextStateModule, DbxAuthHasAnyRoleDirective, DbxAuthHasRolesDirective, DbxAuthNotAnyRolesDirective, DbxAuthService, DbxButton, DbxButtonDirective, DbxButtonSegueDirective, DbxCoreActionModule, DbxCoreAngularRouterSegueModule, DbxCoreAuthModule, DbxCoreButtonModule, DbxCoreFilterModule, DbxCoreUIRouterSegueModule, DbxDatePipeModule, DbxFilterMapDirective, DbxFilterMapSourceConnectorDirective, DbxFilterMapSourceDirective, DbxFilterSourceConnectorDirective, DbxFilterSourceDirective, DbxInjectionComponent, DbxInjectionComponentModule, DbxInjectionContext, DbxInjectionContextDirective, DbxInjectionInstance, DbxLoadingButtonDirective, DbxMiscPipeModule, DbxPipesModule, DbxRouteParamDefaultRedirectInstance, DbxRouteParamReaderInstance, DbxRouterService, DbxRouterTransitionEventType, DbxRouterTransitionService, DbxStorageModule, DbxUIRouterService, FullLocalStorageObject, InstantStorageAccessor, LimitedStorageAccessor, LockSetComponentStore, MemoryStorageObject, MinutesStringPipe, NO_AUTH_USER_IDENTIFIER, PrettyJsonPipe, SecondaryActionContextStoreSource, SimpleStorageAccessor, SimpleStorageAccessorFactory, StorageAccessor, StringStorageAccessor, StringifySimpleStorageAccessorConverter, TimeDistanceCountdownPipe, TimeDistancePipe, ToJsDatePipe, ToMinutesPipe, WrapperSimpleStorageAccessorDelegate, actionContextHasNoErrorAndIsModifiedAndCanTrigger, actionContextIsModifiedAndCanTrigger, actionContextStoreSourceInstanceFactory, actionContextStoreSourcePipe, anchorTypeForAnchor, asSegueRef, asSegueRefString, authRolesSetContainsAllRolesFrom, authRolesSetContainsAnyRoleFrom, authRolesSetContainsNoRolesFrom, authUserIdentifier, canReadyValue, canTriggerAction, canTriggerActionState, checkNgContentWrapperHasContent, dbxActionValueStreamDirective, defaultStorageObjectFactory, enableHasAuthRoleHook, enableHasAuthStateHook, enableIsLoggedInHook, expandClickableAnchorLinkTree, expandClickableAnchorLinkTreeNode, expandClickableAnchorLinkTrees, filterTransitionEvent, filterTransitionSuccess, flattenExpandedClickableAnchorLinkTree, flattenExpandedClickableAnchorLinkTreeToLinks, index as fromDbxAppAuth, index$2 as fromDbxAppContext, goWithRouter, isActionContextDisabled, isActionContextEnabled, isDisabledActionContextState, isIdleActionState, isLatestSuccessfulRoute, isSegueRef, isWorkingActionState, loadingStateForActionContextState, loadingStateTypeForActionContextState, loadingStateTypeForActionState, loggedInObsFromIsLoggedIn, loggedOutObsFromIsLoggedIn, makeAuthTransitionHook, makeDbxActionContextSourceReference, mapRefStringObsToSegueRefObs, mergeDbxInjectionComponentConfigs, index$1 as onDbxAppAuth, index$3 as onDbxAppContext, pipeActionStore, provideActionStoreSource, provideDbxAnchor, provideDbxButton, provideDbxInjectionContext, provideFilterSource, provideFilterSourceConnector, provideSecondaryActionStoreSource, redirectBasedOnAuthUserState, redirectForUserIdentifierParamHook, refStringToSegueRef, safeDetectChanges, safeMarkForCheck, safeUseCdRef, successTransition, tapDetectChanges, tapSafeMarkForCheck, useActionStore };
4712
4765
  //# sourceMappingURL=dereekb-dbx-core.mjs.map