@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.
Files changed (70) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/LICENSE +21 -0
  3. package/README.md +951 -0
  4. package/dist/components/DevToolsDashboard.d.ts +18 -0
  5. package/dist/components/DevToolsDashboard.d.ts.map +1 -0
  6. package/dist/components/LazyComponents.d.ts +22 -0
  7. package/dist/components/LazyComponents.d.ts.map +1 -0
  8. package/dist/components/NotificationProvider.d.ts +31 -0
  9. package/dist/components/NotificationProvider.d.ts.map +1 -0
  10. package/dist/components/PasskeymeAuthPanel.d.ts +121 -0
  11. package/dist/components/PasskeymeAuthPanel.d.ts.map +1 -0
  12. package/dist/components/PasskeymeButton.d.ts +64 -0
  13. package/dist/components/PasskeymeButton.d.ts.map +1 -0
  14. package/dist/components/PasskeymeCallbackHandler.d.ts +50 -0
  15. package/dist/components/PasskeymeCallbackHandler.d.ts.map +1 -0
  16. package/dist/components/PasskeymeErrorDisplay.d.ts +28 -0
  17. package/dist/components/PasskeymeErrorDisplay.d.ts.map +1 -0
  18. package/dist/components/PasskeymeLoadingIndicator.d.ts +34 -0
  19. package/dist/components/PasskeymeLoadingIndicator.d.ts.map +1 -0
  20. package/dist/components/PasskeymeOAuthButton.d.ts +8 -0
  21. package/dist/components/PasskeymeOAuthButton.d.ts.map +1 -0
  22. package/dist/components/PasskeymeProtectedRoute.d.ts +16 -0
  23. package/dist/components/PasskeymeProtectedRoute.d.ts.map +1 -0
  24. package/dist/components/PasskeymeProvider.d.ts +24 -0
  25. package/dist/components/PasskeymeProvider.d.ts.map +1 -0
  26. package/dist/components/PasskeymeUserProfile.d.ts +31 -0
  27. package/dist/components/PasskeymeUserProfile.d.ts.map +1 -0
  28. package/dist/components/PerformanceDashboard.d.ts +30 -0
  29. package/dist/components/PerformanceDashboard.d.ts.map +1 -0
  30. package/dist/components/VirtualScrollList.d.ts +105 -0
  31. package/dist/components/VirtualScrollList.d.ts.map +1 -0
  32. package/dist/hooks/useAuthUtils.d.ts +26 -0
  33. package/dist/hooks/useAuthUtils.d.ts.map +1 -0
  34. package/dist/hooks/useLoadingState.d.ts +31 -0
  35. package/dist/hooks/useLoadingState.d.ts.map +1 -0
  36. package/dist/hooks/usePerformanceMonitor.d.ts +41 -0
  37. package/dist/hooks/usePerformanceMonitor.d.ts.map +1 -0
  38. package/dist/hooks/useUsernameManager.d.ts +62 -0
  39. package/dist/hooks/useUsernameManager.d.ts.map +1 -0
  40. package/dist/index.d.ts +85 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.esm.js +8734 -0
  43. package/dist/index.esm.js.map +1 -0
  44. package/dist/index.js +8827 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/types.d.ts +249 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/utils/analytics.d.ts +112 -0
  49. package/dist/utils/analytics.d.ts.map +1 -0
  50. package/dist/utils/debug.d.ts +9 -0
  51. package/dist/utils/debug.d.ts.map +1 -0
  52. package/dist/utils/devUtils.d.ts +53 -0
  53. package/dist/utils/devUtils.d.ts.map +1 -0
  54. package/dist/utils/enhancedButtonStyles.d.ts +70 -0
  55. package/dist/utils/enhancedButtonStyles.d.ts.map +1 -0
  56. package/dist/utils/importOptimizer.d.ts +79 -0
  57. package/dist/utils/importOptimizer.d.ts.map +1 -0
  58. package/dist/utils/loadingStates.d.ts +35 -0
  59. package/dist/utils/loadingStates.d.ts.map +1 -0
  60. package/dist/utils/logger.d.ts +41 -0
  61. package/dist/utils/logger.d.ts.map +1 -0
  62. package/dist/utils/performanceProfiler.d.ts +80 -0
  63. package/dist/utils/performanceProfiler.d.ts.map +1 -0
  64. package/dist/utils/reactCompat.d.ts +6 -0
  65. package/dist/utils/reactCompat.d.ts.map +1 -0
  66. package/dist/utils/storageOptimization.d.ts +173 -0
  67. package/dist/utils/storageOptimization.d.ts.map +1 -0
  68. package/dist/utils/testingUtils.d.ts +163 -0
  69. package/dist/utils/testingUtils.d.ts.map +1 -0
  70. 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
+ }