@eminuckan/spine 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/api-client/api-config.server.d.ts +40 -0
- package/dist/api-client/api-config.server.d.ts.map +1 -0
- package/dist/api-client/error-codes.d.ts +57 -0
- package/dist/api-client/error-codes.d.ts.map +1 -0
- package/dist/api-client/error-handler.d.ts +52 -0
- package/dist/api-client/error-handler.d.ts.map +1 -0
- package/dist/api-client/fetch-client.server.d.ts +29 -0
- package/dist/api-client/fetch-client.server.d.ts.map +1 -0
- package/dist/api-client/index.d.ts +11 -3
- package/dist/api-client/index.d.ts.map +1 -0
- package/dist/api-client/index.js +3 -2
- package/dist/api-client/retry-handler.d.ts +29 -0
- package/dist/api-client/retry-handler.d.ts.map +1 -0
- package/dist/api-client/server.d.ts +9 -4
- package/dist/api-client/server.d.ts.map +1 -0
- package/dist/api-client/server.js +4 -3
- package/dist/api-client/types.d.ts +121 -0
- package/dist/api-client/types.d.ts.map +1 -0
- package/dist/{api-client-Ftxqm3Ep.js → api-client-DsrxK05Z.js} +1 -1
- package/dist/{api-client-Ftxqm3Ep.js.map → api-client-DsrxK05Z.js.map} +1 -1
- package/dist/auth/auth.server.d.ts +124 -0
- package/dist/auth/auth.server.d.ts.map +1 -0
- package/dist/auth/index.d.ts +8 -2
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/redis-session-storage.server.d.ts +21 -0
- package/dist/auth/redis-session-storage.server.d.ts.map +1 -0
- package/dist/auth/route-protection.server.d.ts +107 -0
- package/dist/auth/route-protection.server.d.ts.map +1 -0
- package/dist/auth/server.d.ts +13 -3
- package/dist/auth/server.d.ts.map +1 -0
- package/dist/auth/server.js +3 -3
- package/dist/auth/token-refresh.server.d.ts +17 -0
- package/dist/auth/token-refresh.server.d.ts.map +1 -0
- package/dist/auth/types.d.ts +160 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth.server-BPiCtlJE.js +5 -0
- package/dist/{auth.server-C979TR6W.js → auth.server-Cx2h2qu3.js} +3 -3
- package/dist/{auth.server-C979TR6W.js.map → auth.server-Cx2h2qu3.js.map} +1 -1
- package/dist/http/response.d.ts +12 -0
- package/dist/http/response.d.ts.map +1 -0
- package/dist/identity/identity-context-provider.d.ts +19 -0
- package/dist/identity/identity-context-provider.d.ts.map +1 -0
- package/dist/identity/identity-context.server.d.ts +73 -0
- package/dist/identity/identity-context.server.d.ts.map +1 -0
- package/dist/identity/identity-store.d.ts +55 -0
- package/dist/identity/identity-store.d.ts.map +1 -0
- package/dist/identity/index.d.ts +9 -4
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/server.d.ts +6 -4
- package/dist/identity/server.d.ts.map +1 -0
- package/dist/identity/server.js +2 -1
- package/dist/identity/types.d.ts +91 -0
- package/dist/identity/types.d.ts.map +1 -0
- package/dist/index.d.ts +14 -12
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -5
- package/dist/logging/config.d.ts +7 -0
- package/dist/logging/config.d.ts.map +1 -0
- package/dist/logging/index.d.ts +9 -3
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/logger.d.ts +22 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/types.d.ts +27 -0
- package/dist/logging/types.d.ts.map +1 -0
- package/dist/permissions/components.d.ts +48 -0
- package/dist/permissions/components.d.ts.map +1 -0
- package/dist/permissions/constants.d.ts +9 -0
- package/dist/permissions/constants.d.ts.map +1 -0
- package/dist/permissions/hooks.d.ts +47 -0
- package/dist/permissions/hooks.d.ts.map +1 -0
- package/dist/permissions/index.d.ts +28 -2
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/permission-initializer.d.ts +18 -0
- package/dist/permissions/permission-initializer.d.ts.map +1 -0
- package/dist/permissions/permission-service.d.ts +53 -0
- package/dist/permissions/permission-service.d.ts.map +1 -0
- package/dist/permissions/permission-store.d.ts +42 -0
- package/dist/permissions/permission-store.d.ts.map +1 -0
- package/dist/permissions/route-protection.server.d.ts +33 -0
- package/dist/permissions/route-protection.server.d.ts.map +1 -0
- package/dist/permissions/types.d.ts +44 -0
- package/dist/permissions/types.d.ts.map +1 -0
- package/dist/query-client/index.d.ts +8 -2
- package/dist/query-client/index.d.ts.map +1 -0
- package/dist/query-client/index.js +1 -1
- package/dist/query-client/query-config.d.ts +55 -0
- package/dist/query-client/query-config.d.ts.map +1 -0
- package/dist/query-client/types.d.ts +115 -0
- package/dist/query-client/types.d.ts.map +1 -0
- package/dist/{query-client-DRPQIKHX.js → query-client-Bpe08pk9.js} +1 -1
- package/dist/query-client-Bpe08pk9.js.map +1 -0
- package/dist/react-router/index.d.ts +9 -12
- package/dist/react-router/index.d.ts.map +1 -0
- package/dist/react-router/index.js +6 -5
- package/dist/react-router/server.d.ts +9 -18
- package/dist/react-router/server.d.ts.map +1 -0
- package/dist/react-router/server.js +13 -12
- package/dist/{redis-session-storage.server-DhufyPjd.js → redis-session-storage.server-BR_0y-QO.js} +2 -2
- package/dist/{redis-session-storage.server-DhufyPjd.js.map → redis-session-storage.server-BR_0y-QO.js.map} +1 -1
- package/dist/{server-CiSbg-9C.js → server-BHfKHKF_.js} +5 -5
- package/dist/{server-CiSbg-9C.js.map → server-BHfKHKF_.js.map} +1 -1
- package/dist/{server-C-DiVP9e.js → server-BxvRxjCK.js} +2 -2
- package/dist/{server-C-DiVP9e.js.map → server-BxvRxjCK.js.map} +1 -1
- package/dist/{server-iWm3oeCM.js → server-C3L8J7iE.js} +3 -2
- package/dist/server-C3L8J7iE.js.map +1 -0
- package/dist/{server-CNp6gjFE.js → server-CouYoZiw.js} +1 -1
- package/dist/{server-CNp6gjFE.js.map → server-CouYoZiw.js.map} +1 -1
- package/dist/server-DZmcd2Lr.js +422 -0
- package/dist/server-DZmcd2Lr.js.map +1 -0
- package/dist/server.d.ts +14 -18
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +13 -12
- package/dist/signalr/index.d.ts +8 -4
- package/dist/signalr/index.d.ts.map +1 -0
- package/dist/signalr/index.js +1 -1
- package/dist/signalr/signalr-client.d.ts +98 -0
- package/dist/signalr/signalr-client.d.ts.map +1 -0
- package/dist/signalr/types.d.ts +42 -0
- package/dist/signalr/types.d.ts.map +1 -0
- package/dist/{signalr-BJGcXc0m.js → signalr-SJ-1sIxw.js} +1 -1
- package/dist/{signalr-BJGcXc0m.js.map → signalr-SJ-1sIxw.js.map} +1 -1
- package/dist/tenant/index.d.ts +9 -3
- package/dist/tenant/index.d.ts.map +1 -0
- package/dist/tenant/server.d.ts +7 -3
- package/dist/tenant/server.d.ts.map +1 -0
- package/dist/tenant/server.js +2 -2
- package/dist/tenant/tenant-context.d.ts +45 -0
- package/dist/tenant/tenant-context.d.ts.map +1 -0
- package/dist/tenant/tenant-cookie.server.d.ts +35 -0
- package/dist/tenant/tenant-cookie.server.d.ts.map +1 -0
- package/dist/tenant/tenant-store.d.ts +58 -0
- package/dist/tenant/tenant-store.d.ts.map +1 -0
- package/dist/tenant/tenant.server.d.ts +49 -0
- package/dist/tenant/tenant.server.d.ts.map +1 -0
- package/dist/tenant/types.d.ts +51 -0
- package/dist/tenant/types.d.ts.map +1 -0
- package/dist/types-BnKaWdfe.js +8 -0
- package/dist/types-BnKaWdfe.js.map +1 -0
- package/dist/utils.d.ts +6 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +2 -3
- package/dist/auth.server-DU-x2LPA.js +0 -5
- package/dist/index-BIJOC8Fb.d.ts +0 -272
- package/dist/index-BIJOC8Fb.d.ts.map +0 -1
- package/dist/index-Bt9XE6gj.d.ts +0 -104
- package/dist/index-Bt9XE6gj.d.ts.map +0 -1
- package/dist/index-C2hGpzGr.d.ts +0 -74
- package/dist/index-C2hGpzGr.d.ts.map +0 -1
- package/dist/index-CfQsb3l_.d.ts +0 -170
- package/dist/index-CfQsb3l_.d.ts.map +0 -1
- package/dist/index-D6RK_5vm.d.ts +0 -199
- package/dist/index-D6RK_5vm.d.ts.map +0 -1
- package/dist/index-DrttYPAj.d.ts +0 -30
- package/dist/index-DrttYPAj.d.ts.map +0 -1
- package/dist/index-geY2ynnN.d.ts +0 -141
- package/dist/index-geY2ynnN.d.ts.map +0 -1
- package/dist/index-kr8Wk7v5.d.ts +0 -1
- package/dist/query-client-DRPQIKHX.js.map +0 -1
- package/dist/server-BoeUiXSh.d.ts +0 -40
- package/dist/server-BoeUiXSh.d.ts.map +0 -1
- package/dist/server-CLbksnvg.d.ts +0 -144
- package/dist/server-CLbksnvg.d.ts.map +0 -1
- package/dist/server-CXGaRaiS.d.ts +0 -256
- package/dist/server-CXGaRaiS.d.ts.map +0 -1
- package/dist/server-DLgH3FRR.js +0 -312
- package/dist/server-DLgH3FRR.js.map +0 -1
- package/dist/server-DazqdM63.d.ts +0 -93
- package/dist/server-DazqdM63.d.ts.map +0 -1
- package/dist/server-iWm3oeCM.js.map +0 -1
- package/dist/server-zEKMDpP7.d.ts +0 -80
- package/dist/server-zEKMDpP7.d.ts.map +0 -1
- package/dist/types-BTjFzIhv.d.ts +0 -31
- package/dist/types-BTjFzIhv.d.ts.map +0 -1
- package/dist/types-DoIfDhl6.d.ts +0 -55
- package/dist/types-DoIfDhl6.d.ts.map +0 -1
- package/dist/types-DufLRY7A.d.ts +0 -164
- package/dist/types-DufLRY7A.d.ts.map +0 -1
- package/dist/types-uDrDMkCq.d.ts +0 -93
- package/dist/types-uDrDMkCq.d.ts.map +0 -1
- /package/dist/{src-D7mh9MKA.js → src-CJ2RLi94.js} +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export
|
|
1
|
+
/**
|
|
2
|
+
* Spine
|
|
3
|
+
*
|
|
4
|
+
* Framework-agnostic primitives for auth, permissions, tenant context,
|
|
5
|
+
* identity, API access, realtime signaling, query configuration, and logging.
|
|
6
|
+
*/
|
|
7
|
+
export * from './logging';
|
|
8
|
+
export * from './permissions';
|
|
9
|
+
export * from './tenant';
|
|
10
|
+
export * from './identity';
|
|
11
|
+
export * from './api-client';
|
|
12
|
+
export * from './signalr';
|
|
13
|
+
export * from './query-client';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,WAAW,CAAC;AAG1B,cAAc,eAAe,CAAC;AAG9B,cAAc,UAAU,CAAC;AAGzB,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAG1B,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,9 +2,10 @@ import { LOG_LEVEL_PRIORITY, LogLevel, Logger, createLogger, defaultLoggerConfig
|
|
|
2
2
|
import { PERMISSION_MODULES, PermissionChecker, PermissionInitializer, ProtectedAction, ProtectedButton, ProtectedLink, ProtectedSection, getPermissionChecker, getPermissions, initializePermissions, useAllPermissions, useHasModulePermission, useHasPermission, useHasPermissions, useModulePermission, usePermission, usePermissionChecker, usePermissionStore, usePermissions } from "./permissions-D5ScGGnd.js";
|
|
3
3
|
import { TenantProvider, configureTenantEndpoints, initializeTenantStore, useCurrentOrganization, useCurrentTenant, useOrganization, useTenant, useTenantStore, useTenantSwitcher } from "./tenant-C6KPaSCX.js";
|
|
4
4
|
import { IdentityContextProvider, configureIdentityEndpoints, configureIdentityStore, resetIdentityStoreConfig, useHasSubscription, useIdentityContext, useIdentityStore, useIsOnboarded, useUserPermissions, useUserTenants } from "./identity-CFa1txoj.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import "./
|
|
5
|
+
import { isApiClientError } from "./types-BnKaWdfe.js";
|
|
6
|
+
import { ApiError, ErrorCodes, ErrorHandler, calculateBackoffDelay, createRetryFetch, fetchWithTimeout, handleApiError, isRetryableError, withRetry } from "./api-client-DsrxK05Z.js";
|
|
7
|
+
import { IdentitySignalRClient, SignalRClient, cleanupSignalR, createIdentitySignalRClient, getIdentitySignalRClient, initializeSignalR } from "./signalr-SJ-1sIxw.js";
|
|
8
|
+
import { cachePresets, createQueryClient, createQueryKeyFactory, invalidationHelpers } from "./query-client-Bpe08pk9.js";
|
|
9
|
+
import "./src-CJ2RLi94.js";
|
|
9
10
|
|
|
10
|
-
export { ApiError, ErrorCodes, ErrorHandler, IdentityContextProvider, IdentitySignalRClient, LOG_LEVEL_PRIORITY, LogLevel, Logger, PERMISSION_MODULES, PermissionChecker, PermissionInitializer, ProtectedAction, ProtectedButton, ProtectedLink, ProtectedSection, SignalRClient, TenantProvider, cachePresets, calculateBackoffDelay, cleanupSignalR, configureIdentityEndpoints, configureIdentityStore, configureTenantEndpoints, createIdentitySignalRClient, createLogger, createQueryClient, createQueryKeyFactory, createRetryFetch, defaultLoggerConfig, fetchWithTimeout, getIdentitySignalRClient, getPermissionChecker, getPermissions, handleApiError, initializePermissions, initializeSignalR, initializeTenantStore, invalidationHelpers, isRetryableError, logger, resetIdentityStoreConfig, useAllPermissions, useCurrentOrganization, useCurrentTenant, useHasModulePermission, useHasPermission, useHasPermissions, useHasSubscription, useIdentityContext, useIdentityStore, useIsOnboarded, useModulePermission, useOrganization, usePermission, usePermissionChecker, usePermissionStore, usePermissions, useTenant, useTenantStore, useTenantSwitcher, useUserPermissions, useUserTenants, withRetry };
|
|
11
|
+
export { ApiError, ErrorCodes, ErrorHandler, IdentityContextProvider, IdentitySignalRClient, LOG_LEVEL_PRIORITY, LogLevel, Logger, PERMISSION_MODULES, PermissionChecker, PermissionInitializer, ProtectedAction, ProtectedButton, ProtectedLink, ProtectedSection, SignalRClient, TenantProvider, cachePresets, calculateBackoffDelay, cleanupSignalR, configureIdentityEndpoints, configureIdentityStore, configureTenantEndpoints, createIdentitySignalRClient, createLogger, createQueryClient, createQueryKeyFactory, createRetryFetch, defaultLoggerConfig, fetchWithTimeout, getIdentitySignalRClient, getPermissionChecker, getPermissions, handleApiError, initializePermissions, initializeSignalR, initializeTenantStore, invalidationHelpers, isApiClientError, isRetryableError, logger, resetIdentityStoreConfig, useAllPermissions, useCurrentOrganization, useCurrentTenant, useHasModulePermission, useHasPermission, useHasPermissions, useHasSubscription, useIdentityContext, useIdentityStore, useIsOnboarded, useModulePermission, useOrganization, usePermission, usePermissionChecker, usePermissionStore, usePermissions, useTenant, useTenantStore, useTenantSwitcher, useUserPermissions, useUserTenants, withRetry };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/logging/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAEtD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAKvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,YAKjC,CAAC"}
|
package/dist/logging/index.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Logging Module
|
|
3
|
+
*
|
|
4
|
+
* Centralized logging implementation with structured logging format.
|
|
5
|
+
*/
|
|
6
|
+
export * from './logger';
|
|
7
|
+
export * from './types';
|
|
8
|
+
export * from './config';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Service
|
|
3
|
+
*
|
|
4
|
+
* Centralized logging implementation with structured logging format.
|
|
5
|
+
*/
|
|
6
|
+
import { type LogContext, type LoggerConfig } from './types';
|
|
7
|
+
export declare class Logger {
|
|
8
|
+
private config;
|
|
9
|
+
constructor(config?: Partial<LoggerConfig>);
|
|
10
|
+
debug(message: string, context?: LogContext): void;
|
|
11
|
+
info(message: string, context?: LogContext): void;
|
|
12
|
+
warn(message: string, context?: LogContext): void;
|
|
13
|
+
error(message: string, error?: Error, context?: LogContext): void;
|
|
14
|
+
private log;
|
|
15
|
+
private shouldLog;
|
|
16
|
+
private logToConsole;
|
|
17
|
+
private formatEntry;
|
|
18
|
+
private sendToRemote;
|
|
19
|
+
}
|
|
20
|
+
export declare const logger: Logger;
|
|
21
|
+
export declare function createLogger(config?: Partial<LoggerConfig>): Logger;
|
|
22
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAY,KAAK,UAAU,EAAiB,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAGtF,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAO1C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjE,OAAO,CAAC,GAAG;IA6BX,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,WAAW;YAcL,YAAY;CAmB3B;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC;AAGnC,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Types
|
|
3
|
+
*/
|
|
4
|
+
export declare enum LogLevel {
|
|
5
|
+
DEBUG = "debug",
|
|
6
|
+
INFO = "info",
|
|
7
|
+
WARN = "warn",
|
|
8
|
+
ERROR = "error"
|
|
9
|
+
}
|
|
10
|
+
export interface LogContext {
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface LogEntry {
|
|
14
|
+
timestamp: string;
|
|
15
|
+
level: LogLevel;
|
|
16
|
+
message: string;
|
|
17
|
+
context?: LogContext;
|
|
18
|
+
error?: Error;
|
|
19
|
+
}
|
|
20
|
+
export interface LoggerConfig {
|
|
21
|
+
minLevel: LogLevel;
|
|
22
|
+
enableConsole: boolean;
|
|
23
|
+
enableRemote: boolean;
|
|
24
|
+
remoteEndpoint?: string;
|
|
25
|
+
serviceName?: string;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/logging/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Components
|
|
3
|
+
*
|
|
4
|
+
* Protected UI components that conditionally render based on permissions.
|
|
5
|
+
*/
|
|
6
|
+
import { type ReactNode, type ComponentProps } from 'react';
|
|
7
|
+
import type { PermissionCode, PermissionCheckOptions } from './types';
|
|
8
|
+
interface ProtectedButtonProps extends ComponentProps<'button'> {
|
|
9
|
+
permission: PermissionCode;
|
|
10
|
+
fallback?: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Button that only renders if user has the required permission
|
|
14
|
+
*/
|
|
15
|
+
export declare function ProtectedButton({ permission, fallback, children, ...props }: ProtectedButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
interface ProtectedLinkProps extends ComponentProps<'a'> {
|
|
17
|
+
permission: PermissionCode;
|
|
18
|
+
fallback?: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Link that only renders if user has the required permission
|
|
22
|
+
*/
|
|
23
|
+
export declare function ProtectedLink({ permission, fallback, children, ...props }: ProtectedLinkProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
interface ProtectedSectionProps {
|
|
25
|
+
permission?: PermissionCode;
|
|
26
|
+
permissions?: PermissionCode[];
|
|
27
|
+
options?: PermissionCheckOptions;
|
|
28
|
+
fallback?: ReactNode;
|
|
29
|
+
children: ReactNode;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Section that only renders if user has the required permission(s)
|
|
33
|
+
*/
|
|
34
|
+
export declare function ProtectedSection({ permission, permissions, options, fallback, children, }: ProtectedSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
interface ProtectedActionProps {
|
|
36
|
+
permission: PermissionCode;
|
|
37
|
+
onAction: () => void;
|
|
38
|
+
children: (props: {
|
|
39
|
+
onClick: () => void;
|
|
40
|
+
disabled: boolean;
|
|
41
|
+
}) => ReactNode;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Render prop component for protected actions
|
|
45
|
+
*/
|
|
46
|
+
export declare function ProtectedAction({ permission, onAction, children, }: ProtectedActionProps): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/permissions/components.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAc,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAMtE,UAAU,oBAAqB,SAAQ,cAAc,CAAC,QAAQ,CAAC;IAC7D,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,QAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,oBAAoB,2CAQtB;AAMD,UAAU,kBAAmB,SAAQ,cAAc,CAAC,GAAG,CAAC;IACtD,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,QAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,kBAAkB,2CAQpB;AAMD,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,WAAW,EACX,OAAO,EACP,QAAe,EACf,QAAQ,GACT,EAAE,qBAAqB,2CAwBvB;AAMD,UAAU,oBAAoB;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,KAAK,SAAS,CAAC;CAC5E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,QAAQ,EACR,QAAQ,GACT,EAAE,oBAAoB,2CAWtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/permissions/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAShD,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Hooks
|
|
3
|
+
*
|
|
4
|
+
* React hooks for permission checks.
|
|
5
|
+
*/
|
|
6
|
+
import type { PermissionCode, PermissionCheckOptions, PermissionModule } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Hook for checking a single permission
|
|
9
|
+
*/
|
|
10
|
+
export declare function usePermission(permission: PermissionCode): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Alias for usePermission
|
|
13
|
+
*/
|
|
14
|
+
export declare const useHasPermission: typeof usePermission;
|
|
15
|
+
/**
|
|
16
|
+
* Hook for checking multiple permissions
|
|
17
|
+
*/
|
|
18
|
+
export declare function usePermissions(permissions: PermissionCode[], options?: PermissionCheckOptions): import("./types").PermissionCheckResult;
|
|
19
|
+
/**
|
|
20
|
+
* Alias for usePermissions
|
|
21
|
+
*/
|
|
22
|
+
export declare const useHasPermissions: typeof usePermissions;
|
|
23
|
+
/**
|
|
24
|
+
* Hook for checking module-level permissions
|
|
25
|
+
*/
|
|
26
|
+
export declare function useModulePermission(module: PermissionModule): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Alias for useModulePermission
|
|
29
|
+
*/
|
|
30
|
+
export declare const useHasModulePermission: typeof useModulePermission;
|
|
31
|
+
/**
|
|
32
|
+
* Hook for getting a memoized permission checker function
|
|
33
|
+
*/
|
|
34
|
+
export declare function usePermissionChecker(): (permission: PermissionCode) => boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Hook for getting all user permissions
|
|
37
|
+
*/
|
|
38
|
+
export declare function useAllPermissions(): readonly PermissionCode[];
|
|
39
|
+
/**
|
|
40
|
+
* Hook for field-level permissions
|
|
41
|
+
*/
|
|
42
|
+
export declare function useFieldPermissions(module: PermissionModule, entity: string): import("./types").FieldPermissionResult;
|
|
43
|
+
/**
|
|
44
|
+
* Hook for permission loading state
|
|
45
|
+
*/
|
|
46
|
+
export declare function usePermissionLoading(): boolean;
|
|
47
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/permissions/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAExF;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAGjE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,sBAAgB,CAAC;AAE9C;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,cAAc,EAAE,EAC7B,OAAO,CAAC,EAAE,sBAAsB,2CAOjC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,uBAAiB,CAAC;AAEhD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAGrE;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,4BAAsB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,oBAAoB,iBAGnB,cAAc,aAG9B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,cAAc,EAAE,CAG7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,2CAM3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C"}
|
|
@@ -1,2 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Permissions Module
|
|
3
|
+
*
|
|
4
|
+
* Role-based access control system with React hooks and components.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* import { usePermission, ProtectedButton } from '@eminuckan/spine/permissions';
|
|
9
|
+
*
|
|
10
|
+
* function MyComponent() {
|
|
11
|
+
* const canEdit = usePermission('Identity.Users.Edit');
|
|
12
|
+
*
|
|
13
|
+
* return (
|
|
14
|
+
* <ProtectedButton permission="Identity.Users.Create">
|
|
15
|
+
* Create User
|
|
16
|
+
* </ProtectedButton>
|
|
17
|
+
* );
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export type { PermissionCode, PermissionModule, PermissionCheckOptions, PermissionCheckResult, FieldPermissionResult, } from './types';
|
|
22
|
+
export { PermissionChecker } from './permission-service';
|
|
23
|
+
export { usePermissionStore, initializePermissions, getPermissionChecker, getPermissions, } from './permission-store';
|
|
24
|
+
export { PermissionInitializer } from './permission-initializer';
|
|
25
|
+
export { usePermission, useHasPermission, usePermissions, useHasPermissions, useModulePermission, useHasModulePermission, usePermissionChecker, useAllPermissions, } from './hooks';
|
|
26
|
+
export { ProtectedButton, ProtectedLink, ProtectedSection, ProtectedAction, } from './components';
|
|
27
|
+
export { PERMISSION_MODULES } from './constants';
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Initializer Component
|
|
3
|
+
*
|
|
4
|
+
* Initializes permission store from identity context.
|
|
5
|
+
*/
|
|
6
|
+
import { type ReactNode } from 'react';
|
|
7
|
+
import type { PermissionCode } from './types';
|
|
8
|
+
interface PermissionInitializerProps {
|
|
9
|
+
permissions: PermissionCode[];
|
|
10
|
+
isLoading?: boolean;
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Component that initializes permissions from props
|
|
15
|
+
*/
|
|
16
|
+
export declare function PermissionInitializer({ permissions, isLoading, children, }: PermissionInitializerProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=permission-initializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-initializer.d.ts","sourceRoot":"","sources":["../../src/permissions/permission-initializer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,UAAU,0BAA0B;IAClC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,WAAW,EACX,SAAiB,EACjB,QAAQ,GACT,EAAE,0BAA0B,2CAM5B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Service
|
|
3
|
+
*
|
|
4
|
+
* Core permission checking logic.
|
|
5
|
+
*/
|
|
6
|
+
import type { PermissionCode, PermissionModule, PermissionCheckOptions, PermissionCheckResult, FieldPermissionResult } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Permission Checker Class
|
|
9
|
+
*
|
|
10
|
+
* Provides methods for checking user permissions.
|
|
11
|
+
*/
|
|
12
|
+
export declare class PermissionChecker {
|
|
13
|
+
private permissions;
|
|
14
|
+
private permissionArray;
|
|
15
|
+
constructor(permissions: PermissionCode[]);
|
|
16
|
+
/**
|
|
17
|
+
* Check if user has a single permission
|
|
18
|
+
*/
|
|
19
|
+
hasPermission(permission: PermissionCode): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Check multiple permissions with AND/OR logic
|
|
22
|
+
*/
|
|
23
|
+
hasPermissions(permissions: PermissionCode[], options?: PermissionCheckOptions): PermissionCheckResult;
|
|
24
|
+
/**
|
|
25
|
+
* Check wildcard permission pattern
|
|
26
|
+
*/
|
|
27
|
+
private hasWildcardPermission;
|
|
28
|
+
/**
|
|
29
|
+
* Check if user has any permission in a module
|
|
30
|
+
*/
|
|
31
|
+
hasModulePermission(module: PermissionModule): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Get field-level permissions for an entity
|
|
34
|
+
*/
|
|
35
|
+
getFieldPermissions(module: PermissionModule, entity: string): FieldPermissionResult;
|
|
36
|
+
/**
|
|
37
|
+
* Get all permissions
|
|
38
|
+
*/
|
|
39
|
+
getAllPermissions(): readonly PermissionCode[];
|
|
40
|
+
/**
|
|
41
|
+
* Get permissions for a specific module
|
|
42
|
+
*/
|
|
43
|
+
getModulePermissions(module: PermissionModule): PermissionCode[];
|
|
44
|
+
/**
|
|
45
|
+
* Check if user has any permissions
|
|
46
|
+
*/
|
|
47
|
+
hasAnyPermissions(): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Get permission count
|
|
50
|
+
*/
|
|
51
|
+
getPermissionCount(): number;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=permission-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-service.d.ts","sourceRoot":"","sources":["../../src/permissions/permission-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,eAAe,CAAmB;gBAE9B,WAAW,EAAE,cAAc,EAAE;IAKzC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO;IAIlD;;OAEG;IACH,cAAc,CACZ,WAAW,EAAE,cAAc,EAAE,EAC7B,OAAO,GAAE,sBAA2B,GACnC,qBAAqB;IA8BxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO;IAKtD;;OAEG;IACH,mBAAmB,CACjB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GACb,qBAAqB;IAWxB;;OAEG;IACH,iBAAiB,IAAI,SAAS,cAAc,EAAE;IAI9C;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,EAAE;IAKhE;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACH,kBAAkB,IAAI,MAAM;CAG7B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Store (Zustand)
|
|
3
|
+
*
|
|
4
|
+
* State management for permissions.
|
|
5
|
+
*/
|
|
6
|
+
import { PermissionChecker } from './permission-service';
|
|
7
|
+
import type { PermissionCode } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Permission store state interface
|
|
10
|
+
*/
|
|
11
|
+
interface PermissionState {
|
|
12
|
+
checker: PermissionChecker;
|
|
13
|
+
permissions: PermissionCode[];
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
setPermissions: (permissions: PermissionCode[]) => void;
|
|
16
|
+
setLoading: (isLoading: boolean) => void;
|
|
17
|
+
reset: () => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Selectors for selective subscription
|
|
21
|
+
*/
|
|
22
|
+
export declare const selectChecker: (state: PermissionState) => PermissionChecker;
|
|
23
|
+
export declare const selectPermissions: (state: PermissionState) => string[];
|
|
24
|
+
export declare const selectIsLoading: (state: PermissionState) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Permission store
|
|
27
|
+
*/
|
|
28
|
+
export declare const usePermissionStore: import("zustand").UseBoundStore<import("zustand").StoreApi<PermissionState>>;
|
|
29
|
+
/**
|
|
30
|
+
* Initialize permission store
|
|
31
|
+
*/
|
|
32
|
+
export declare function initializePermissions(permissions: PermissionCode[], isLoading?: boolean): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get permission checker outside React components
|
|
35
|
+
*/
|
|
36
|
+
export declare function getPermissionChecker(): PermissionChecker;
|
|
37
|
+
/**
|
|
38
|
+
* Get all permissions outside React components
|
|
39
|
+
*/
|
|
40
|
+
export declare function getPermissions(): PermissionCode[];
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=permission-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-store.d.ts","sourceRoot":"","sources":["../../src/permissions/permission-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;GAEG;AACH,UAAU,eAAe;IACvB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,eAAe,sBAAkB,CAAC;AACvE,eAAO,MAAM,iBAAiB,GAAI,OAAO,eAAe,aAAsB,CAAC;AAC/E,eAAO,MAAM,eAAe,GAAI,OAAO,eAAe,YAAoB,CAAC;AAW3E;;GAEG;AACH,eAAO,MAAM,kBAAkB,8EAiB5B,CAAC;AAEJ;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,cAAc,EAAE,EAC7B,SAAS,GAAE,OAAe,GACzB,IAAI,CAGN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAEjD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { PermissionCheckOptions, PermissionCode } from './types';
|
|
2
|
+
export interface PermissionRouteSession {
|
|
3
|
+
user?: {
|
|
4
|
+
sub?: string;
|
|
5
|
+
email?: string | null;
|
|
6
|
+
} | null;
|
|
7
|
+
accessToken?: string | null;
|
|
8
|
+
}
|
|
9
|
+
export interface PermissionRouteContext {
|
|
10
|
+
permissions: PermissionCode[];
|
|
11
|
+
currentTenant?: string | null;
|
|
12
|
+
}
|
|
13
|
+
export interface ForbiddenPermissionDetails {
|
|
14
|
+
request: Request;
|
|
15
|
+
permission: PermissionCode | PermissionCode[];
|
|
16
|
+
permissionsToCheck: PermissionCode[];
|
|
17
|
+
missingPermissions?: PermissionCode[];
|
|
18
|
+
options: PermissionCheckOptions;
|
|
19
|
+
session: PermissionRouteSession;
|
|
20
|
+
context: PermissionRouteContext;
|
|
21
|
+
}
|
|
22
|
+
export interface PermissionRouteProtectionConfig {
|
|
23
|
+
getSession?: (request: Request) => Promise<PermissionRouteSession>;
|
|
24
|
+
resolveContext?: (request: Request, session: PermissionRouteSession) => Promise<PermissionRouteContext>;
|
|
25
|
+
createUnauthorizedResponse?: (request: Request, session: PermissionRouteSession) => Response;
|
|
26
|
+
createForbiddenResponse?: (details: ForbiddenPermissionDetails) => Response;
|
|
27
|
+
}
|
|
28
|
+
export declare function configurePermissionRouteProtection(config: PermissionRouteProtectionConfig): void;
|
|
29
|
+
export declare function resetPermissionRouteProtection(): void;
|
|
30
|
+
export declare function requirePermission(request: Request, permission: PermissionCode | PermissionCode[], options?: PermissionCheckOptions): Promise<void>;
|
|
31
|
+
export declare function checkPermission(request: Request, permission: PermissionCode | PermissionCode[], options?: PermissionCheckOptions): Promise<boolean>;
|
|
32
|
+
export declare function withPermission<TLoaderData>(permission: PermissionCode | PermissionCode[], loader: (args: any) => Promise<TLoaderData>, options?: PermissionCheckOptions): (args: any) => Promise<TLoaderData>;
|
|
33
|
+
//# sourceMappingURL=route-protection.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-protection.server.d.ts","sourceRoot":"","sources":["../../src/permissions/route-protection.server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,GAAG,IAAI,CAAC;IACT,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;IAC9C,kBAAkB,EAAE,cAAc,EAAE,CAAC;IACrC,kBAAkB,CAAC,EAAE,cAAc,EAAE,CAAC;IACtC,OAAO,EAAE,sBAAsB,CAAC;IAChC,OAAO,EAAE,sBAAsB,CAAC;IAChC,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACnE,cAAc,CAAC,EAAE,CACf,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,sBAAsB,KAC5B,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,sBAAsB,KAC5B,QAAQ,CAAC;IACd,uBAAuB,CAAC,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,QAAQ,CAAC;CAC7E;AA6CD,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,+BAA+B,GACtC,IAAI,CAKN;AAED,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AAkBD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,cAAc,GAAG,cAAc,EAAE,EAC7C,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,cAAc,GAAG,cAAc,EAAE,EAC7C,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,wBAAgB,cAAc,CAAC,WAAW,EACxC,UAAU,EAAE,cAAc,GAAG,cAAc,EAAE,EAC7C,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,WAAW,CAAC,EAC3C,OAAO,CAAC,EAAE,sBAAsB,IAElB,MAAM,GAAG,KAAG,OAAO,CAAC,WAAW,CAAC,CAI/C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Permission code string type
|
|
6
|
+
*/
|
|
7
|
+
export type PermissionCode = string;
|
|
8
|
+
/**
|
|
9
|
+
* Permission module types
|
|
10
|
+
*/
|
|
11
|
+
export type PermissionModule = 'Identity' | 'PropertyManagement' | 'Leasing' | 'Accounting' | 'Tasks' | 'People' | 'Organization' | 'Subscription';
|
|
12
|
+
/**
|
|
13
|
+
* Permission check options
|
|
14
|
+
*/
|
|
15
|
+
export interface PermissionCheckOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Operator for multiple permissions check
|
|
18
|
+
* @default 'OR'
|
|
19
|
+
*/
|
|
20
|
+
operator?: 'AND' | 'OR';
|
|
21
|
+
/**
|
|
22
|
+
* Enable wildcard pattern matching
|
|
23
|
+
* @default false
|
|
24
|
+
*/
|
|
25
|
+
wildcard?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Permission check result
|
|
29
|
+
*/
|
|
30
|
+
export interface PermissionCheckResult {
|
|
31
|
+
hasPermission: boolean;
|
|
32
|
+
matchedPermissions: PermissionCode[];
|
|
33
|
+
missingPermissions: PermissionCode[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Field permission result
|
|
37
|
+
*/
|
|
38
|
+
export interface FieldPermissionResult {
|
|
39
|
+
canView: boolean;
|
|
40
|
+
canEdit: boolean;
|
|
41
|
+
canCreate: boolean;
|
|
42
|
+
canDelete: boolean;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/permissions/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,oBAAoB,GACpB,SAAS,GACT,YAAY,GACZ,OAAO,GACP,QAAQ,GACR,cAAc,GACd,cAAc,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,cAAc,EAAE,CAAC;IACrC,kBAAkB,EAAE,cAAc,EAAE,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB"}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Query Client Module
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query configuration and utilities.
|
|
5
|
+
*/
|
|
6
|
+
export type { QueryLogger, LogoutHandler, QueryClientConfig, CachePreset, CachePresets, InvalidationHelpers, } from './types';
|
|
7
|
+
export { createQueryClient, cachePresets, createQueryKeyFactory, invalidationHelpers, } from './query-config';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query-client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { cachePresets, createQueryClient, createQueryKeyFactory, invalidationHelpers } from "../query-client-
|
|
1
|
+
import { cachePresets, createQueryClient, createQueryKeyFactory, invalidationHelpers } from "../query-client-Bpe08pk9.js";
|
|
2
2
|
|
|
3
3
|
export { cachePresets, createQueryClient, createQueryKeyFactory, invalidationHelpers };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Client Configuration
|
|
3
|
+
*
|
|
4
|
+
* Optimized caching strategy for different types of data:
|
|
5
|
+
* - Static data (rarely changes): Long staleTime and gcTime
|
|
6
|
+
* - Dynamic data (changes frequently): Short staleTime
|
|
7
|
+
* - Critical data (needs to be fresh): Very short staleTime with prefetching
|
|
8
|
+
*/
|
|
9
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
10
|
+
import type { QueryClientConfig, CachePresets } from './types';
|
|
11
|
+
/**
|
|
12
|
+
* Create optimized QueryClient instance
|
|
13
|
+
*
|
|
14
|
+
* @param config - Configuration options
|
|
15
|
+
* @returns Configured QueryClient with optimized defaults
|
|
16
|
+
*/
|
|
17
|
+
export declare function createQueryClient(config?: QueryClientConfig): QueryClient;
|
|
18
|
+
/**
|
|
19
|
+
* Cache Presets for different data types
|
|
20
|
+
*
|
|
21
|
+
* Use these presets for consistent caching across the application.
|
|
22
|
+
*/
|
|
23
|
+
export declare const cachePresets: CachePresets;
|
|
24
|
+
/**
|
|
25
|
+
* Create base query keys for a module
|
|
26
|
+
*/
|
|
27
|
+
export declare function createQueryKeyFactory<T extends string>(module: T): {
|
|
28
|
+
all: readonly [T];
|
|
29
|
+
lists: () => readonly [T, 'list'];
|
|
30
|
+
list: (filters?: Record<string, unknown>) => readonly [T, 'list', Record<string, unknown>?];
|
|
31
|
+
details: () => readonly [T, 'detail'];
|
|
32
|
+
detail: (id: string) => readonly [T, 'detail', string];
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Invalidation helpers for common patterns
|
|
36
|
+
*/
|
|
37
|
+
export declare const invalidationHelpers: {
|
|
38
|
+
/**
|
|
39
|
+
* Invalidate all queries for a module
|
|
40
|
+
*/
|
|
41
|
+
invalidateModule: (queryClient: QueryClient, module: string) => Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Invalidate all list queries for a module
|
|
44
|
+
*/
|
|
45
|
+
invalidateLists: (queryClient: QueryClient, module: string) => Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Invalidate a specific detail query
|
|
48
|
+
*/
|
|
49
|
+
invalidateDetail: (queryClient: QueryClient, module: string, id: string) => Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Invalidate and refetch (useful for critical data)
|
|
52
|
+
*/
|
|
53
|
+
invalidateAndRefetch: (queryClient: QueryClient, queryKey: readonly unknown[]) => Promise<void>;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=query-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-config.d.ts","sourceRoot":"","sources":["../../src/query-client/query-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAA6B,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA6D/D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,iBAAsB,GAAG,WAAW,CAqE7E;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,YAwC1B,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,EACpD,MAAM,EAAE,CAAC,GACR;IACD,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAClB,KAAK,EAAE,MAAM,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5F,OAAO,EAAE,MAAM,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;CACxD,CAQA;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;OAEG;oCACmC,WAAW,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAIjF;;OAEG;mCACkC,WAAW,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAIhF;;OAEG;oCAEY,WAAW,UAChB,MAAM,MACV,MAAM,KACT,OAAO,CAAC,IAAI,CAAC;IAIhB;;OAEG;wCACuC,WAAW,YAAY,SAAS,OAAO,EAAE,KAAG,OAAO,CAAC,IAAI,CAAC;CAIpG,CAAC"}
|