@passkeyme/react-auth 1.0.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.
- package/CHANGELOG.md +86 -0
- package/LICENSE +21 -0
- package/README.md +951 -0
- package/dist/components/DevToolsDashboard.d.ts +18 -0
- package/dist/components/DevToolsDashboard.d.ts.map +1 -0
- package/dist/components/LazyComponents.d.ts +22 -0
- package/dist/components/LazyComponents.d.ts.map +1 -0
- package/dist/components/NotificationProvider.d.ts +31 -0
- package/dist/components/NotificationProvider.d.ts.map +1 -0
- package/dist/components/PasskeymeAuthPanel.d.ts +121 -0
- package/dist/components/PasskeymeAuthPanel.d.ts.map +1 -0
- package/dist/components/PasskeymeButton.d.ts +64 -0
- package/dist/components/PasskeymeButton.d.ts.map +1 -0
- package/dist/components/PasskeymeCallbackHandler.d.ts +50 -0
- package/dist/components/PasskeymeCallbackHandler.d.ts.map +1 -0
- package/dist/components/PasskeymeErrorDisplay.d.ts +28 -0
- package/dist/components/PasskeymeErrorDisplay.d.ts.map +1 -0
- package/dist/components/PasskeymeLoadingIndicator.d.ts +34 -0
- package/dist/components/PasskeymeLoadingIndicator.d.ts.map +1 -0
- package/dist/components/PasskeymeOAuthButton.d.ts +8 -0
- package/dist/components/PasskeymeOAuthButton.d.ts.map +1 -0
- package/dist/components/PasskeymeProtectedRoute.d.ts +16 -0
- package/dist/components/PasskeymeProtectedRoute.d.ts.map +1 -0
- package/dist/components/PasskeymeProvider.d.ts +24 -0
- package/dist/components/PasskeymeProvider.d.ts.map +1 -0
- package/dist/components/PasskeymeUserProfile.d.ts +31 -0
- package/dist/components/PasskeymeUserProfile.d.ts.map +1 -0
- package/dist/components/PerformanceDashboard.d.ts +30 -0
- package/dist/components/PerformanceDashboard.d.ts.map +1 -0
- package/dist/components/VirtualScrollList.d.ts +105 -0
- package/dist/components/VirtualScrollList.d.ts.map +1 -0
- package/dist/hooks/useAuthUtils.d.ts +26 -0
- package/dist/hooks/useAuthUtils.d.ts.map +1 -0
- package/dist/hooks/useLoadingState.d.ts +31 -0
- package/dist/hooks/useLoadingState.d.ts.map +1 -0
- package/dist/hooks/usePerformanceMonitor.d.ts +41 -0
- package/dist/hooks/usePerformanceMonitor.d.ts.map +1 -0
- package/dist/hooks/useUsernameManager.d.ts +62 -0
- package/dist/hooks/useUsernameManager.d.ts.map +1 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +8734 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +8827 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +249 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/analytics.d.ts +112 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/debug.d.ts +9 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/devUtils.d.ts +53 -0
- package/dist/utils/devUtils.d.ts.map +1 -0
- package/dist/utils/enhancedButtonStyles.d.ts +70 -0
- package/dist/utils/enhancedButtonStyles.d.ts.map +1 -0
- package/dist/utils/importOptimizer.d.ts +79 -0
- package/dist/utils/importOptimizer.d.ts.map +1 -0
- package/dist/utils/loadingStates.d.ts +35 -0
- package/dist/utils/loadingStates.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +41 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/performanceProfiler.d.ts +80 -0
- package/dist/utils/performanceProfiler.d.ts.map +1 -0
- package/dist/utils/reactCompat.d.ts +6 -0
- package/dist/utils/reactCompat.d.ts.map +1 -0
- package/dist/utils/storageOptimization.d.ts +173 -0
- package/dist/utils/storageOptimization.d.ts.map +1 -0
- package/dist/utils/testingUtils.d.ts +163 -0
- package/dist/utils/testingUtils.d.ts.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Professional logging system for React SDK
|
|
3
|
+
* Environment-aware with configurable log levels
|
|
4
|
+
*/
|
|
5
|
+
export type LogLevel = "debug" | "info" | "warn" | "error";
|
|
6
|
+
export interface LoggerConfig {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
level: LogLevel;
|
|
9
|
+
}
|
|
10
|
+
declare class Logger {
|
|
11
|
+
private enabled;
|
|
12
|
+
private level;
|
|
13
|
+
configure(config: Partial<LoggerConfig>): void;
|
|
14
|
+
private shouldLog;
|
|
15
|
+
private formatMessage;
|
|
16
|
+
debug(component: string, ...args: any[]): void;
|
|
17
|
+
info(component: string, ...args: any[]): void;
|
|
18
|
+
warn(component: string, ...args: any[]): void;
|
|
19
|
+
error(component: string, ...args: any[]): void;
|
|
20
|
+
}
|
|
21
|
+
declare const logger: Logger;
|
|
22
|
+
export declare const debugLogger: {
|
|
23
|
+
debug: (...args: any[]) => void;
|
|
24
|
+
info: (...args: any[]) => void;
|
|
25
|
+
warn: (...args: any[]) => void;
|
|
26
|
+
error: (...args: any[]) => void;
|
|
27
|
+
};
|
|
28
|
+
export declare const storageLogger: {
|
|
29
|
+
debug: (...args: any[]) => void;
|
|
30
|
+
info: (...args: any[]) => void;
|
|
31
|
+
warn: (...args: any[]) => void;
|
|
32
|
+
error: (...args: any[]) => void;
|
|
33
|
+
};
|
|
34
|
+
export declare const importLogger: {
|
|
35
|
+
debug: (...args: any[]) => void;
|
|
36
|
+
info: (...args: any[]) => void;
|
|
37
|
+
warn: (...args: any[]) => void;
|
|
38
|
+
error: (...args: any[]) => void;
|
|
39
|
+
};
|
|
40
|
+
export { Logger, logger };
|
|
41
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,cAAM,MAAM;IACV,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,KAAK,CAAoB;IAEjC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAS9C,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,aAAa;IAKrB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM9C,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM7C,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM7C,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAK/C;AAGD,QAAA,MAAM,MAAM,QAAe,CAAC;AAa5B,eAAO,MAAM,WAAW;qBACL,GAAG,EAAE;oBACN,GAAG,EAAE;oBACL,GAAG,EAAE;qBACJ,GAAG,EAAE;CACvB,CAAC;AAEF,eAAO,MAAM,aAAa;qBACP,GAAG,EAAE;oBACN,GAAG,EAAE;oBACL,GAAG,EAAE;qBACJ,GAAG,EAAE;CACvB,CAAC;AAEF,eAAO,MAAM,YAAY;qBACN,GAAG,EAAE;oBACN,GAAG,EAAE;oBACL,GAAG,EAAE;qBACJ,GAAG,EAAE;CACvB,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React DevTools Profiler integration for PasskeyMe components
|
|
3
|
+
* Provides performance monitoring and profiling capabilities
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
export interface ProfilerData {
|
|
7
|
+
id: string;
|
|
8
|
+
phase: "mount" | "update" | "nested-update";
|
|
9
|
+
actualDuration: number;
|
|
10
|
+
baseDuration: number;
|
|
11
|
+
startTime: number;
|
|
12
|
+
commitTime: number;
|
|
13
|
+
interactions: Set<any>;
|
|
14
|
+
}
|
|
15
|
+
export interface ProfilerOptions {
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
logToConsole?: boolean;
|
|
18
|
+
onRender?: (data: ProfilerData) => void;
|
|
19
|
+
threshold?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Performance data store
|
|
23
|
+
*/
|
|
24
|
+
declare class PerformanceStore {
|
|
25
|
+
private data;
|
|
26
|
+
add(componentId: string, data: ProfilerData): void;
|
|
27
|
+
get(componentId: string): ProfilerData[];
|
|
28
|
+
getAll(): Map<string, ProfilerData[]>;
|
|
29
|
+
clear(componentId?: string): void;
|
|
30
|
+
getStats(componentId: string): {
|
|
31
|
+
totalRenders: number;
|
|
32
|
+
totalTime: number;
|
|
33
|
+
averageTime: number;
|
|
34
|
+
maxTime: number;
|
|
35
|
+
minTime: number;
|
|
36
|
+
mountCount: number;
|
|
37
|
+
updateCount: number;
|
|
38
|
+
} | null;
|
|
39
|
+
}
|
|
40
|
+
export declare const performanceStore: PerformanceStore;
|
|
41
|
+
/**
|
|
42
|
+
* Enhanced profiler component wrapper
|
|
43
|
+
*/
|
|
44
|
+
export interface PasskeymeProfilerProps extends ProfilerOptions {
|
|
45
|
+
id: string;
|
|
46
|
+
children: React.ReactNode;
|
|
47
|
+
}
|
|
48
|
+
export declare const PasskeymeProfiler: ({ id, children, enabled, logToConsole, onRender, threshold, }: PasskeymeProfilerProps) => import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
/**
|
|
50
|
+
* Hook to get performance stats for a component
|
|
51
|
+
*/
|
|
52
|
+
export declare const usePerformanceStats: (componentId: string) => {
|
|
53
|
+
totalRenders: number;
|
|
54
|
+
totalTime: number;
|
|
55
|
+
averageTime: number;
|
|
56
|
+
maxTime: number;
|
|
57
|
+
minTime: number;
|
|
58
|
+
mountCount: number;
|
|
59
|
+
updateCount: number;
|
|
60
|
+
} | null;
|
|
61
|
+
/**
|
|
62
|
+
* Component to display performance stats
|
|
63
|
+
*/
|
|
64
|
+
export interface PerformanceStatsProps {
|
|
65
|
+
componentId: string;
|
|
66
|
+
className?: string;
|
|
67
|
+
}
|
|
68
|
+
export declare const PerformanceStats: ({ componentId, className, }: PerformanceStatsProps) => import("react/jsx-runtime").JSX.Element;
|
|
69
|
+
/**
|
|
70
|
+
* HOC to wrap components with profiler
|
|
71
|
+
*/
|
|
72
|
+
export declare const withProfiler: <P extends object>(Component: React.ComponentType<P>, options: ProfilerOptions & {
|
|
73
|
+
id: string;
|
|
74
|
+
}) => React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<any>>;
|
|
75
|
+
/**
|
|
76
|
+
* Development-only performance monitoring dashboard
|
|
77
|
+
*/
|
|
78
|
+
export declare const PerformanceDashboard: () => import("react/jsx-runtime").JSX.Element | null;
|
|
79
|
+
export {};
|
|
80
|
+
//# sourceMappingURL=performanceProfiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performanceProfiler.d.ts","sourceRoot":"","sources":["../../src/utils/performanceProfiler.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAA6C,MAAM,OAAO,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,cAAM,gBAAgB;IACpB,OAAO,CAAC,IAAI,CAA0C;IAEtD,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;IAM3C,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE;IAIxC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAIrC,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM;IAQ1B,QAAQ,CAAC,WAAW,EAAE,MAAM;;;;;;;;;CAsB7B;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AA0BvD;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,iBAAiB,kEAO3B,sBAAsB,4CA6DxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,gBAAiB,MAAM;;;;;;;;QAetD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,gCAG1B,qBAAqB,4CAyBvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,gCACZ,MAAM,aAAa,CAAC,CAAC,CAAC,WACxB,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,yFAY1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,sDAsEhC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React compatibility utilities for supporting React 16.8+
|
|
3
|
+
* Instead of using React.FC, we simply declare function components as regular functions
|
|
4
|
+
* This avoids the children prop differences between React versions
|
|
5
|
+
*/
|
|
6
|
+
//# sourceMappingURL=reactCompat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactCompat.d.ts","sourceRoot":"","sources":["../../src/utils/reactCompat.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimized localStorage utilities for PasskeyMe React SDK
|
|
3
|
+
* Provides caching, compression, and performance optimizations
|
|
4
|
+
*/
|
|
5
|
+
export interface CacheEntry<T = any> {
|
|
6
|
+
data: T;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
expiry?: number;
|
|
9
|
+
version?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CacheOptions {
|
|
12
|
+
expiry?: number;
|
|
13
|
+
compress?: boolean;
|
|
14
|
+
encrypt?: boolean;
|
|
15
|
+
version?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Optimized localStorage manager with caching and compression
|
|
19
|
+
*/
|
|
20
|
+
export declare class OptimizedStorage {
|
|
21
|
+
private prefix;
|
|
22
|
+
private compression;
|
|
23
|
+
private maxSize;
|
|
24
|
+
constructor(prefix?: string, compression?: boolean, maxSize?: number);
|
|
25
|
+
/**
|
|
26
|
+
* Set item with optimization features
|
|
27
|
+
*/
|
|
28
|
+
setItem<T>(key: string, value: T, options?: CacheOptions): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Get item with cache validation
|
|
31
|
+
*/
|
|
32
|
+
getItem<T>(key: string, defaultValue?: T): T | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Remove item
|
|
35
|
+
*/
|
|
36
|
+
removeItem(key: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Clear all items with this prefix
|
|
39
|
+
*/
|
|
40
|
+
clear(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get storage usage statistics
|
|
43
|
+
*/
|
|
44
|
+
getStats(): {
|
|
45
|
+
totalSize: number;
|
|
46
|
+
itemCount: number;
|
|
47
|
+
availableSpace: number;
|
|
48
|
+
items: Array<{
|
|
49
|
+
key: string;
|
|
50
|
+
size: number;
|
|
51
|
+
age: number;
|
|
52
|
+
}>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Clean expired items
|
|
56
|
+
*/
|
|
57
|
+
cleanup(): number;
|
|
58
|
+
private getStorageKey;
|
|
59
|
+
private compress;
|
|
60
|
+
private decompress;
|
|
61
|
+
private isCompressed;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Request cache with deduplication
|
|
65
|
+
*/
|
|
66
|
+
export declare class RequestCache {
|
|
67
|
+
private cache;
|
|
68
|
+
private storage;
|
|
69
|
+
private ttl;
|
|
70
|
+
constructor(ttl?: number);
|
|
71
|
+
/**
|
|
72
|
+
* Get or fetch data with caching and deduplication
|
|
73
|
+
*/
|
|
74
|
+
get<T>(key: string, fetcher: () => Promise<T>, options?: {
|
|
75
|
+
ttl?: number;
|
|
76
|
+
forceRefresh?: boolean;
|
|
77
|
+
}): Promise<T>;
|
|
78
|
+
/**
|
|
79
|
+
* Invalidate cache entry
|
|
80
|
+
*/
|
|
81
|
+
invalidate(key: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Clear all cache
|
|
84
|
+
*/
|
|
85
|
+
clear(): void;
|
|
86
|
+
/**
|
|
87
|
+
* Get cache statistics
|
|
88
|
+
*/
|
|
89
|
+
getStats(): {
|
|
90
|
+
memoryCache: {
|
|
91
|
+
size: number;
|
|
92
|
+
keys: string[];
|
|
93
|
+
};
|
|
94
|
+
persistentCache: {
|
|
95
|
+
totalSize: number;
|
|
96
|
+
itemCount: number;
|
|
97
|
+
availableSpace: number;
|
|
98
|
+
items: {
|
|
99
|
+
key: string;
|
|
100
|
+
size: number;
|
|
101
|
+
age: number;
|
|
102
|
+
}[];
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Optimized user session storage
|
|
108
|
+
*/
|
|
109
|
+
export declare class SessionStorage extends OptimizedStorage {
|
|
110
|
+
constructor();
|
|
111
|
+
/**
|
|
112
|
+
* Store user session with automatic cleanup
|
|
113
|
+
*/
|
|
114
|
+
storeSession(user: any, token: string, refreshToken?: string): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Get current session
|
|
117
|
+
*/
|
|
118
|
+
getSession(): {
|
|
119
|
+
user: any;
|
|
120
|
+
token: string;
|
|
121
|
+
refreshToken?: string;
|
|
122
|
+
loginTime: number;
|
|
123
|
+
} | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* Clear session
|
|
126
|
+
*/
|
|
127
|
+
clearSession(): void;
|
|
128
|
+
/**
|
|
129
|
+
* Check if session is valid
|
|
130
|
+
*/
|
|
131
|
+
isSessionValid(): boolean;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Hook for using optimized storage
|
|
135
|
+
*/
|
|
136
|
+
export declare const useOptimizedStorage: (prefix?: string) => {
|
|
137
|
+
setItem: <T>(key: string, value: T, options?: CacheOptions) => boolean;
|
|
138
|
+
getItem: <T_1>(key: string, defaultValue?: T_1 | undefined) => T_1 | undefined;
|
|
139
|
+
removeItem: (key: string) => void;
|
|
140
|
+
clear: () => void;
|
|
141
|
+
storage: OptimizedStorage;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Hook for using request cache
|
|
145
|
+
*/
|
|
146
|
+
export declare const useRequestCache: (ttl?: number) => {
|
|
147
|
+
get: <T>(key: string, fetcher: () => Promise<T>, options?: {
|
|
148
|
+
ttl?: number;
|
|
149
|
+
forceRefresh?: boolean;
|
|
150
|
+
}) => Promise<T>;
|
|
151
|
+
invalidate: (key: string) => void;
|
|
152
|
+
clear: () => void;
|
|
153
|
+
cache: RequestCache;
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Hook for session storage
|
|
157
|
+
*/
|
|
158
|
+
export declare const useSessionStorage: () => {
|
|
159
|
+
session: {
|
|
160
|
+
user: any;
|
|
161
|
+
token: string;
|
|
162
|
+
refreshToken?: string | undefined;
|
|
163
|
+
loginTime: number;
|
|
164
|
+
} | undefined;
|
|
165
|
+
storeSession: (user: any, token: string, refreshToken?: string) => boolean;
|
|
166
|
+
clearSession: () => void;
|
|
167
|
+
isValid: () => boolean;
|
|
168
|
+
storage: SessionStorage;
|
|
169
|
+
};
|
|
170
|
+
export declare const storage: OptimizedStorage;
|
|
171
|
+
export declare const requestCache: RequestCache;
|
|
172
|
+
export declare const sessionStorage: SessionStorage;
|
|
173
|
+
//# sourceMappingURL=storageOptimization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageOptimization.d.ts","sourceRoot":"","sources":["../../src/utils/storageOptimization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Testing utilities for PasskeyMe React SDK
|
|
3
|
+
* Provides helpers for testing components with authentication and accessibility
|
|
4
|
+
*
|
|
5
|
+
* Note: Some functions require @testing-library/react to be installed as a dev dependency
|
|
6
|
+
*/
|
|
7
|
+
import React from "react";
|
|
8
|
+
import type { User } from "@passkeyme/auth";
|
|
9
|
+
export interface PasskeymeConfig {
|
|
10
|
+
appId: string;
|
|
11
|
+
redirectUri: string;
|
|
12
|
+
hostedAuthUrl?: string;
|
|
13
|
+
debug?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface MockUser extends User {
|
|
16
|
+
id: string;
|
|
17
|
+
name?: string;
|
|
18
|
+
email?: string;
|
|
19
|
+
picture?: string;
|
|
20
|
+
roles?: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface TestingProviderProps {
|
|
23
|
+
children: React.ReactNode;
|
|
24
|
+
config?: Partial<PasskeymeConfig>;
|
|
25
|
+
initialUser?: MockUser | null;
|
|
26
|
+
initialLoading?: boolean;
|
|
27
|
+
initialError?: string | null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Mock provider for testing components that use PasskeyMe
|
|
31
|
+
*/
|
|
32
|
+
export declare const MockPasskeymeProvider: ({ children, config, initialUser, initialLoading, initialError, }: TestingProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
/**
|
|
34
|
+
* Custom render function with PasskeyMe provider
|
|
35
|
+
* Note: Requires @testing-library/react render function to be passed in
|
|
36
|
+
*/
|
|
37
|
+
export declare const createRenderWithPasskeymeProvider: (renderFunction: any) => (ui: React.ReactElement, options?: {
|
|
38
|
+
providerProps?: TestingProviderProps;
|
|
39
|
+
renderOptions?: any;
|
|
40
|
+
}) => any;
|
|
41
|
+
/**
|
|
42
|
+
* Accessibility testing helpers
|
|
43
|
+
*/
|
|
44
|
+
export declare const accessibilityTestHelpers: {
|
|
45
|
+
/**
|
|
46
|
+
* Check if element has proper ARIA attributes
|
|
47
|
+
*/
|
|
48
|
+
hasProperAria: (element: HTMLElement) => {
|
|
49
|
+
score: number;
|
|
50
|
+
hasRole: boolean;
|
|
51
|
+
hasAriaLabel: boolean;
|
|
52
|
+
hasAriaDescription: boolean;
|
|
53
|
+
hasFocusable: boolean;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Check color contrast (basic implementation)
|
|
57
|
+
*/
|
|
58
|
+
checkColorContrast: (element: HTMLElement) => {
|
|
59
|
+
backgroundColor: string;
|
|
60
|
+
color: string;
|
|
61
|
+
hasContrast: boolean;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Check keyboard navigation
|
|
65
|
+
*/
|
|
66
|
+
isKeyboardAccessible: (element: HTMLElement) => {
|
|
67
|
+
isFocusable: boolean;
|
|
68
|
+
hasKeyboardHandlers: boolean;
|
|
69
|
+
isButton: boolean;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Performance testing utilities
|
|
74
|
+
*/
|
|
75
|
+
export declare const performanceTestHelpers: {
|
|
76
|
+
/**
|
|
77
|
+
* Measure component render time
|
|
78
|
+
*/
|
|
79
|
+
measureRenderTime: (renderFn: () => Promise<any> | any) => Promise<number>;
|
|
80
|
+
/**
|
|
81
|
+
* Test for memory leaks
|
|
82
|
+
*/
|
|
83
|
+
detectMemoryLeaks: () => {
|
|
84
|
+
usedJSMemory: any;
|
|
85
|
+
totalJSMemory: any;
|
|
86
|
+
jsMemoryLimit: any;
|
|
87
|
+
} | null;
|
|
88
|
+
/**
|
|
89
|
+
* Check for unnecessary re-renders
|
|
90
|
+
*/
|
|
91
|
+
trackRerenders: (componentName: string) => {
|
|
92
|
+
getRenderCount: () => number;
|
|
93
|
+
reset: () => void;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Mock authentication responses
|
|
98
|
+
*/
|
|
99
|
+
export declare const mockAuthResponses: {
|
|
100
|
+
successfulPasskeyAuth: {
|
|
101
|
+
user: {
|
|
102
|
+
id: string;
|
|
103
|
+
name: string;
|
|
104
|
+
email: string;
|
|
105
|
+
picture: string;
|
|
106
|
+
};
|
|
107
|
+
token: string;
|
|
108
|
+
refreshToken: string;
|
|
109
|
+
};
|
|
110
|
+
successfulOAuthAuth: {
|
|
111
|
+
user: {
|
|
112
|
+
id: string;
|
|
113
|
+
name: string;
|
|
114
|
+
email: string;
|
|
115
|
+
};
|
|
116
|
+
token: string;
|
|
117
|
+
refreshToken: string;
|
|
118
|
+
};
|
|
119
|
+
authError: {
|
|
120
|
+
error: string;
|
|
121
|
+
error_description: string;
|
|
122
|
+
};
|
|
123
|
+
networkError: Error;
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Visual regression testing setup
|
|
127
|
+
*/
|
|
128
|
+
export declare const visualRegressionHelpers: {
|
|
129
|
+
/**
|
|
130
|
+
* Take a screenshot of a component (requires additional setup)
|
|
131
|
+
*/
|
|
132
|
+
captureComponent: (element: HTMLElement, name: string) => Promise<string>;
|
|
133
|
+
/**
|
|
134
|
+
* Compare screenshots (mock implementation)
|
|
135
|
+
*/
|
|
136
|
+
compareScreenshots: (baseline: string, current: string) => Promise<{
|
|
137
|
+
match: boolean;
|
|
138
|
+
difference: number;
|
|
139
|
+
}>;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* E2E testing utilities
|
|
143
|
+
*/
|
|
144
|
+
export declare const e2eTestHelpers: {
|
|
145
|
+
/**
|
|
146
|
+
* Mock WebAuthn API for E2E tests
|
|
147
|
+
*/
|
|
148
|
+
mockWebAuthn: () => void;
|
|
149
|
+
/**
|
|
150
|
+
* Mock localStorage for testing
|
|
151
|
+
*/
|
|
152
|
+
mockLocalStorage: () => void;
|
|
153
|
+
/**
|
|
154
|
+
* Mock window.location for testing redirects
|
|
155
|
+
*/
|
|
156
|
+
mockWindowLocation: () => void;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Test data factories
|
|
160
|
+
*/
|
|
161
|
+
export declare const createMockUser: (overrides?: Partial<MockUser>) => MockUser;
|
|
162
|
+
export declare const createMockConfig: (overrides?: Partial<PasskeymeConfig>) => PasskeymeConfig;
|
|
163
|
+
//# sourceMappingURL=testingUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testingUtils.d.ts","sourceRoot":"","sources":["../../src/utils/testingUtils.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AA+B5C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,qEAM/B,oBAAoB,4CAqBtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iCAAiC,mBAC3B,GAAG,UAEd,MAAM,YAAY,YACb;IACP,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB,QAWF,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,wBAAwB;IACnC;;OAEG;6BACsB,WAAW;;;;;;;IAkBpC;;OAEG;kCAC2B,WAAW;;;;;IAazC;;OAEG;oCAC6B,WAAW;;;;;CAU5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB;IACjC;;OAEG;kCACiC,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG;IAO5D;;OAEG;;;;;;IAcH;;OAEG;oCAC6B,MAAM;;;;CAmBvC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CA4B7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB;IAClC;;OAEG;gCAC+B,WAAW,QAAQ,MAAM;IAM3D;;OAEG;mCACkC,MAAM,WAAW,MAAM;;;;CAO7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;;IA2BH;;OAEG;;IAmBH;;OAEG;;CAcJ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,eACd,QAAQ,QAAQ,CAAC,KAC3B,QAOD,CAAC;AAEH,eAAO,MAAM,gBAAgB,eAChB,QAAQ,eAAe,CAAC,KAClC,eAID,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@passkeyme/react-auth",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "React integration for PasskeyMe Authentication SDK",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.esm.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "rollup -c",
|
|
11
|
+
"build:analyze": "rollup -c --environment ANALYZE",
|
|
12
|
+
"dev": "rollup -c -w",
|
|
13
|
+
"test": "jest",
|
|
14
|
+
"test:coverage": "jest --coverage",
|
|
15
|
+
"lint": "echo 'Linting skipped - TypeScript handled by tsc' || true",
|
|
16
|
+
"lint:fix": "echo 'Linting skipped - TypeScript handled by tsc' || true",
|
|
17
|
+
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
|
|
18
|
+
"format:check": "prettier --check \"src/**/*.{ts,tsx}\"",
|
|
19
|
+
"typecheck": "tsc --noEmit",
|
|
20
|
+
"prepublishOnly": "npm run build",
|
|
21
|
+
"size": "size-limit",
|
|
22
|
+
"size:why": "size-limit --why"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"react",
|
|
26
|
+
"authentication",
|
|
27
|
+
"passkeys",
|
|
28
|
+
"webauthn",
|
|
29
|
+
"oauth",
|
|
30
|
+
"hooks",
|
|
31
|
+
"components"
|
|
32
|
+
],
|
|
33
|
+
"author": "PasskeyMe",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"files": [
|
|
36
|
+
"dist",
|
|
37
|
+
"README.md",
|
|
38
|
+
"LICENSE",
|
|
39
|
+
"CHANGELOG.md"
|
|
40
|
+
],
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"react": ">=16.8.0",
|
|
43
|
+
"react-dom": ">=16.8.0"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@passkeyme/auth": "^1.0.0",
|
|
47
|
+
"@passkeyme/react-core": "file:../react-core",
|
|
48
|
+
"axios": "^1.10.0",
|
|
49
|
+
"passkeyme-web-sdk": "^0.1.3"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
53
|
+
"@rollup/plugin-typescript": "^11.0.0",
|
|
54
|
+
"@size-limit/preset-small-lib": "^11.2.0",
|
|
55
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
56
|
+
"@testing-library/react": "^16.3.0",
|
|
57
|
+
"@types/jest": "^29.0.0",
|
|
58
|
+
"@types/react": "^18.2.0",
|
|
59
|
+
"@types/react-dom": "^18.2.0",
|
|
60
|
+
"eslint": "^8.0.0",
|
|
61
|
+
"jest": "^29.0.0",
|
|
62
|
+
"jest-environment-jsdom": "^30.0.4",
|
|
63
|
+
"prettier": "^3.6.2",
|
|
64
|
+
"react": "^18.2.0",
|
|
65
|
+
"react-dom": "^18.2.0",
|
|
66
|
+
"rollup": "^3.0.0",
|
|
67
|
+
"rollup-plugin-analyzer": "^4.0.0",
|
|
68
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
69
|
+
"rollup-plugin-visualizer": "^5.9.0",
|
|
70
|
+
"size-limit": "^11.2.0",
|
|
71
|
+
"ts-jest": "^29.4.0",
|
|
72
|
+
"typescript": "^5.0.0"
|
|
73
|
+
},
|
|
74
|
+
"size-limit": [
|
|
75
|
+
{
|
|
76
|
+
"path": "dist/index.js",
|
|
77
|
+
"limit": "70 KB"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"path": "dist/index.esm.js",
|
|
81
|
+
"limit": "65 KB"
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"repository": {
|
|
85
|
+
"type": "git",
|
|
86
|
+
"url": "https://github.com/passkeyme/passkeyme.git",
|
|
87
|
+
"directory": "sdk/react"
|
|
88
|
+
},
|
|
89
|
+
"homepage": "https://passkeyme.com",
|
|
90
|
+
"bugs": {
|
|
91
|
+
"url": "https://github.com/passkeyme/passkeyme/issues"
|
|
92
|
+
}
|
|
93
|
+
}
|