@skylabs-digital/react-identity-access 2.12.0 → 2.14.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,56 @@
1
+ import { ReactNode } from 'react';
2
+ import { RoutingConfig, ZoneRoots, ZonePresets, ZonePresetConfig, AccessDeniedReason, ReturnToStorage } from '../types/zoneRouting';
3
+
4
+ /**
5
+ * Context value provided by RoutingProvider
6
+ */
7
+ export interface RoutingContextValue {
8
+ zoneRoots: Required<ZoneRoots>;
9
+ presets: ZonePresets;
10
+ loadingFallback: ReactNode;
11
+ accessDeniedFallback: ReactNode;
12
+ onAccessDenied?: (reason: AccessDeniedReason) => void;
13
+ returnToParam: string;
14
+ returnToStorage: ReturnToStorage;
15
+ }
16
+ export interface RoutingProviderProps {
17
+ config?: RoutingConfig;
18
+ children: ReactNode;
19
+ }
20
+ /**
21
+ * RoutingProvider - Global configuration for zone-based routing
22
+ *
23
+ * Provides default redirect paths, presets, and fallbacks that ZoneRoute
24
+ * components will use. Can be customized per-application.
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * <RoutingProvider config={{
29
+ * zoneRoots: {
30
+ * tenantGuest: '/auth/login',
31
+ * tenantUser: '/app/dashboard',
32
+ * tenantAdmin: '/admin',
33
+ * },
34
+ * loadingFallback: <Spinner />,
35
+ * onAccessDenied: (reason) => console.log('Access denied:', reason),
36
+ * }}>
37
+ * <App />
38
+ * </RoutingProvider>
39
+ * ```
40
+ */
41
+ export declare function RoutingProvider({ config, children }: RoutingProviderProps): import("react/jsx-runtime").JSX.Element;
42
+ /**
43
+ * Hook to access routing configuration
44
+ * @throws Error if used outside RoutingProvider
45
+ */
46
+ export declare function useRouting(): RoutingContextValue;
47
+ /**
48
+ * Optional hook that returns RoutingContext if available, defaults otherwise.
49
+ * Useful for ZoneRoute which should work with or without RoutingProvider.
50
+ */
51
+ export declare function useRoutingOptional(): RoutingContextValue;
52
+ /**
53
+ * Get a specific preset configuration
54
+ */
55
+ export declare function useZonePreset(presetName: keyof ZonePresets | string): ZonePresetConfig | undefined;
56
+ //# sourceMappingURL=RoutingProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutingProvider.d.ts","sourceRoot":"","sources":["../../src/providers/RoutingProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,SAAS,EAAW,MAAM,OAAO,CAAC;AACtE,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,eAAe,EAAE,SAAS,CAAC;IAC3B,oBAAoB,EAAE,SAAS,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;CAClC;AAID,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAAE,MAAW,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAyB9E;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,mBAAmB,CAMhD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAiBxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,WAAW,GAAG,MAAM,GACrC,gBAAgB,GAAG,SAAS,CAG9B"}
@@ -0,0 +1,122 @@
1
+ import { ReactNode } from 'react';
2
+ import { UserType } from './api';
3
+
4
+ /**
5
+ * Access mode for zone requirements
6
+ * - 'required': Must match condition (redirect if not)
7
+ * - 'forbidden': Must NOT match condition (redirect if matches)
8
+ * - 'optional': Can be either (no redirect)
9
+ */
10
+ export type AccessMode = 'required' | 'forbidden' | 'optional';
11
+ /**
12
+ * Reason types for access denial
13
+ */
14
+ export type AccessDeniedType = 'no_tenant' | 'has_tenant' | 'not_authenticated' | 'already_authenticated' | 'wrong_user_type' | 'missing_permissions';
15
+ /**
16
+ * Detailed reason object passed to callbacks when access is denied
17
+ */
18
+ export interface AccessDeniedReason {
19
+ type: AccessDeniedType;
20
+ required?: {
21
+ tenant?: AccessMode;
22
+ auth?: AccessMode;
23
+ userType?: UserType | UserType[];
24
+ permissions?: string[];
25
+ };
26
+ current?: {
27
+ hasTenant: boolean;
28
+ isAuthenticated: boolean;
29
+ userType?: UserType;
30
+ permissions?: string[];
31
+ };
32
+ redirectTo: string;
33
+ }
34
+ /**
35
+ * Zone root paths for automatic redirects
36
+ */
37
+ export interface ZoneRoots {
38
+ publicGuest?: string;
39
+ publicUser?: string;
40
+ publicAdmin?: string;
41
+ tenantGuest?: string;
42
+ tenantUser?: string;
43
+ tenantAdmin?: string;
44
+ default?: string;
45
+ }
46
+ /**
47
+ * Default zone roots
48
+ */
49
+ export declare const DEFAULT_ZONE_ROOTS: Required<ZoneRoots>;
50
+ /**
51
+ * Preset zone configuration
52
+ */
53
+ export interface ZonePresetConfig {
54
+ tenant?: AccessMode;
55
+ auth?: AccessMode;
56
+ userType?: UserType | UserType[];
57
+ requiredPermissions?: string[];
58
+ }
59
+ /**
60
+ * Built-in zone presets
61
+ */
62
+ export interface ZonePresets {
63
+ landing: ZonePresetConfig;
64
+ publicOnly: ZonePresetConfig;
65
+ login: ZonePresetConfig;
66
+ guest: ZonePresetConfig;
67
+ authenticated: ZonePresetConfig;
68
+ tenant: ZonePresetConfig;
69
+ tenantOpen: ZonePresetConfig;
70
+ tenantAuth: ZonePresetConfig;
71
+ user: ZonePresetConfig;
72
+ admin: ZonePresetConfig;
73
+ open: ZonePresetConfig;
74
+ }
75
+ /**
76
+ * Default preset configurations
77
+ */
78
+ export declare const DEFAULT_ZONE_PRESETS: ZonePresets;
79
+ /**
80
+ * Return URL storage options
81
+ */
82
+ export type ReturnToStorage = 'url' | 'session' | 'local';
83
+ /**
84
+ * Routing configuration for AuthProvider
85
+ */
86
+ export interface RoutingConfig {
87
+ zoneRoots?: ZoneRoots;
88
+ presets?: Partial<ZonePresets>;
89
+ loadingFallback?: ReactNode;
90
+ accessDeniedFallback?: ReactNode;
91
+ onAccessDenied?: (reason: AccessDeniedReason) => void;
92
+ returnToParam?: string;
93
+ returnToStorage?: ReturnToStorage;
94
+ }
95
+ /**
96
+ * Props for ZoneRoute component
97
+ */
98
+ export interface ZoneRouteProps {
99
+ children: ReactNode;
100
+ preset?: keyof ZonePresets | string;
101
+ tenant?: AccessMode;
102
+ auth?: AccessMode;
103
+ userType?: UserType | UserType[];
104
+ requiredPermissions?: string[];
105
+ requireAllPermissions?: boolean;
106
+ returnTo?: boolean | string;
107
+ onAccessDenied?: (reason: AccessDeniedReason) => void;
108
+ redirectTo?: string;
109
+ loadingFallback?: ReactNode;
110
+ accessDeniedFallback?: ReactNode;
111
+ }
112
+ /**
113
+ * Zone navigation hook return type
114
+ */
115
+ export interface UseZoneNavigationReturn {
116
+ returnToUrl: string | null;
117
+ clearReturnTo: () => void;
118
+ setReturnTo: (url: string) => void;
119
+ navigateToZone: (zone: keyof ZoneRoots) => void;
120
+ getSmartRedirect: () => string;
121
+ }
122
+ //# sourceMappingURL=zoneRouting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zoneRouting.d.ts","sourceRoot":"","sources":["../../src/types/zoneRouting.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skylabs-digital/react-identity-access",
3
- "version": "2.12.0",
3
+ "version": "2.14.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"