@authsome/ui-core 0.1.9 → 1.1.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.
@@ -1,98 +0,0 @@
1
- export { b as AuthContext, a as AuthError, A as AuthErrorType, c as AuthProvider, Q as AuthResponse, v as AuthState, C as CookieData, a3 as Device, F as DeviceAuthorizeRequest, B as DeviceCodeVerifyRequest, E as DeviceCodeVerifyResponse, D as DeviceFlowInitiateRequest, z as DeviceFlowInitiateResponse, G as DeviceTokenPollRequest, I as DeviceTokenPollResponse, H as DeviceTokenPollStatus, $ as EnrollMFAFactorRequest, L as FieldDefinition, K as FieldType, J as FieldValidation, a5 as ListSessionsOptions, a6 as ListSessionsResponse, a1 as MFAChallengeRequest, a2 as MFAChallengeResponse, _ as MFAFactor, M as MagicLinkRequest, i as MagicLinkVerifyRequest, g as OAuthCallbackRequest, x as OAuthConfig, h as OAuthProvider, O as OAuthSignInRequest, r as Organization, s as OrganizationMembership, q as PasskeyAuthRequest, p as PasskeyCredential, o as PasskeyRegisterRequest, P as PasswordChangeRequest, f as PasswordResetConfirmRequest, e as PasswordResetRequest, j as PhoneAuthRequest, k as PhoneVerifyRequest, R as ProviderConfig, W as RequestContext, Z as ResendVerificationRequest, X as SendVerificationEmailRequest, u as Session, w as SessionData, a4 as SessionInfo, S as SignInRequest, d as SignUpRequest, N as SignupFieldsResponse, y as TwoFactorConfig, n as TwoFactorMethod, T as TwoFactorSetupRequest, l as TwoFactorSetupResponse, m as TwoFactorVerifyRequest, U as UpdateUserRequest, t as User, V as ValidationError, Y as VerifyEmailRequest, a0 as VerifyMFAFactorRequest } from '../provider-DWklI8Wr.mjs';
2
-
3
- /**
4
- * Storage abstraction for auth tokens and data
5
- */
6
- /**
7
- * Storage interface
8
- */
9
- interface Storage {
10
- /**
11
- * Get item from storage
12
- */
13
- getItem(key: string): Promise<string | null> | string | null;
14
- /**
15
- * Set item in storage
16
- */
17
- setItem(key: string, value: string): Promise<void> | void;
18
- /**
19
- * Remove item from storage
20
- */
21
- removeItem(key: string): Promise<void> | void;
22
- /**
23
- * Clear all items from storage
24
- */
25
- clear(): Promise<void> | void;
26
- }
27
- /**
28
- * Storage adapter for localStorage
29
- */
30
- declare class LocalStorageAdapter implements Storage {
31
- getItem(key: string): string | null;
32
- setItem(key: string, value: string): void;
33
- removeItem(key: string): void;
34
- clear(): void;
35
- }
36
- /**
37
- * Storage adapter for sessionStorage
38
- */
39
- declare class SessionStorageAdapter implements Storage {
40
- getItem(key: string): string | null;
41
- setItem(key: string, value: string): void;
42
- removeItem(key: string): void;
43
- clear(): void;
44
- }
45
- /**
46
- * In-memory storage adapter (for testing or SSR)
47
- */
48
- declare class MemoryStorageAdapter implements Storage {
49
- private store;
50
- getItem(key: string): string | null;
51
- setItem(key: string, value: string): void;
52
- removeItem(key: string): void;
53
- clear(): void;
54
- }
55
-
56
- /**
57
- * Observable pattern for state management across frameworks
58
- */
59
- type Listener<T> = (value: T) => void;
60
- type Unsubscribe = () => void;
61
- /**
62
- * Observable state container
63
- */
64
- declare class Observable<T> {
65
- private value;
66
- private listeners;
67
- constructor(initialValue: T);
68
- /**
69
- * Get current value
70
- */
71
- getValue(): T;
72
- /**
73
- * Set new value and notify listeners
74
- */
75
- setValue(newValue: T): void;
76
- /**
77
- * Update value with a function
78
- */
79
- update(updater: (current: T) => T): void;
80
- /**
81
- * Subscribe to value changes
82
- */
83
- subscribe(listener: Listener<T>): Unsubscribe;
84
- /**
85
- * Notify all listeners
86
- */
87
- private notify;
88
- /**
89
- * Clear all listeners
90
- */
91
- clearListeners(): void;
92
- /**
93
- * Get number of listeners
94
- */
95
- getListenerCount(): number;
96
- }
97
-
98
- export { type Listener, LocalStorageAdapter, MemoryStorageAdapter, Observable, SessionStorageAdapter, type Storage, type Unsubscribe };
@@ -1,98 +0,0 @@
1
- export { b as AuthContext, a as AuthError, A as AuthErrorType, c as AuthProvider, Q as AuthResponse, v as AuthState, C as CookieData, a3 as Device, F as DeviceAuthorizeRequest, B as DeviceCodeVerifyRequest, E as DeviceCodeVerifyResponse, D as DeviceFlowInitiateRequest, z as DeviceFlowInitiateResponse, G as DeviceTokenPollRequest, I as DeviceTokenPollResponse, H as DeviceTokenPollStatus, $ as EnrollMFAFactorRequest, L as FieldDefinition, K as FieldType, J as FieldValidation, a5 as ListSessionsOptions, a6 as ListSessionsResponse, a1 as MFAChallengeRequest, a2 as MFAChallengeResponse, _ as MFAFactor, M as MagicLinkRequest, i as MagicLinkVerifyRequest, g as OAuthCallbackRequest, x as OAuthConfig, h as OAuthProvider, O as OAuthSignInRequest, r as Organization, s as OrganizationMembership, q as PasskeyAuthRequest, p as PasskeyCredential, o as PasskeyRegisterRequest, P as PasswordChangeRequest, f as PasswordResetConfirmRequest, e as PasswordResetRequest, j as PhoneAuthRequest, k as PhoneVerifyRequest, R as ProviderConfig, W as RequestContext, Z as ResendVerificationRequest, X as SendVerificationEmailRequest, u as Session, w as SessionData, a4 as SessionInfo, S as SignInRequest, d as SignUpRequest, N as SignupFieldsResponse, y as TwoFactorConfig, n as TwoFactorMethod, T as TwoFactorSetupRequest, l as TwoFactorSetupResponse, m as TwoFactorVerifyRequest, U as UpdateUserRequest, t as User, V as ValidationError, Y as VerifyEmailRequest, a0 as VerifyMFAFactorRequest } from '../provider-DWklI8Wr.js';
2
-
3
- /**
4
- * Storage abstraction for auth tokens and data
5
- */
6
- /**
7
- * Storage interface
8
- */
9
- interface Storage {
10
- /**
11
- * Get item from storage
12
- */
13
- getItem(key: string): Promise<string | null> | string | null;
14
- /**
15
- * Set item in storage
16
- */
17
- setItem(key: string, value: string): Promise<void> | void;
18
- /**
19
- * Remove item from storage
20
- */
21
- removeItem(key: string): Promise<void> | void;
22
- /**
23
- * Clear all items from storage
24
- */
25
- clear(): Promise<void> | void;
26
- }
27
- /**
28
- * Storage adapter for localStorage
29
- */
30
- declare class LocalStorageAdapter implements Storage {
31
- getItem(key: string): string | null;
32
- setItem(key: string, value: string): void;
33
- removeItem(key: string): void;
34
- clear(): void;
35
- }
36
- /**
37
- * Storage adapter for sessionStorage
38
- */
39
- declare class SessionStorageAdapter implements Storage {
40
- getItem(key: string): string | null;
41
- setItem(key: string, value: string): void;
42
- removeItem(key: string): void;
43
- clear(): void;
44
- }
45
- /**
46
- * In-memory storage adapter (for testing or SSR)
47
- */
48
- declare class MemoryStorageAdapter implements Storage {
49
- private store;
50
- getItem(key: string): string | null;
51
- setItem(key: string, value: string): void;
52
- removeItem(key: string): void;
53
- clear(): void;
54
- }
55
-
56
- /**
57
- * Observable pattern for state management across frameworks
58
- */
59
- type Listener<T> = (value: T) => void;
60
- type Unsubscribe = () => void;
61
- /**
62
- * Observable state container
63
- */
64
- declare class Observable<T> {
65
- private value;
66
- private listeners;
67
- constructor(initialValue: T);
68
- /**
69
- * Get current value
70
- */
71
- getValue(): T;
72
- /**
73
- * Set new value and notify listeners
74
- */
75
- setValue(newValue: T): void;
76
- /**
77
- * Update value with a function
78
- */
79
- update(updater: (current: T) => T): void;
80
- /**
81
- * Subscribe to value changes
82
- */
83
- subscribe(listener: Listener<T>): Unsubscribe;
84
- /**
85
- * Notify all listeners
86
- */
87
- private notify;
88
- /**
89
- * Clear all listeners
90
- */
91
- clearListeners(): void;
92
- /**
93
- * Get number of listeners
94
- */
95
- getListenerCount(): number;
96
- }
97
-
98
- export { type Listener, LocalStorageAdapter, MemoryStorageAdapter, Observable, SessionStorageAdapter, type Storage, type Unsubscribe };
@@ -1,180 +0,0 @@
1
- 'use strict';
2
-
3
- // src/types/auth.ts
4
- var AuthState = /* @__PURE__ */ ((AuthState2) => {
5
- AuthState2["AUTHENTICATED"] = "authenticated";
6
- AuthState2["UNAUTHENTICATED"] = "unauthenticated";
7
- AuthState2["LOADING"] = "loading";
8
- AuthState2["ERROR"] = "error";
9
- return AuthState2;
10
- })(AuthState || {});
11
- var AuthErrorType = /* @__PURE__ */ ((AuthErrorType2) => {
12
- AuthErrorType2["INVALID_CREDENTIALS"] = "invalid_credentials";
13
- AuthErrorType2["USER_NOT_FOUND"] = "user_not_found";
14
- AuthErrorType2["USER_ALREADY_EXISTS"] = "user_already_exists";
15
- AuthErrorType2["INVALID_TOKEN"] = "invalid_token";
16
- AuthErrorType2["TOKEN_EXPIRED"] = "token_expired";
17
- AuthErrorType2["NETWORK_ERROR"] = "network_error";
18
- AuthErrorType2["VALIDATION_ERROR"] = "validation_error";
19
- AuthErrorType2["MFA_REQUIRED"] = "mfa_required";
20
- AuthErrorType2["EMAIL_NOT_VERIFIED"] = "email_not_verified";
21
- AuthErrorType2["PHONE_NOT_VERIFIED"] = "phone_not_verified";
22
- AuthErrorType2["RATE_LIMIT_EXCEEDED"] = "rate_limit_exceeded";
23
- AuthErrorType2["UNKNOWN_ERROR"] = "unknown_error";
24
- return AuthErrorType2;
25
- })(AuthErrorType || {});
26
- var AuthError = class _AuthError extends Error {
27
- constructor(message, type = "unknown_error" /* UNKNOWN_ERROR */, options) {
28
- super(message);
29
- this.name = "AuthError";
30
- this.type = type;
31
- this.details = options?.details;
32
- this.code = options?.code;
33
- this.originalError = options?.originalError;
34
- if (Error.captureStackTrace) {
35
- Error.captureStackTrace(this, _AuthError);
36
- }
37
- }
38
- };
39
- var OAuthProvider = /* @__PURE__ */ ((OAuthProvider2) => {
40
- OAuthProvider2["GOOGLE"] = "google";
41
- OAuthProvider2["GITHUB"] = "github";
42
- OAuthProvider2["FACEBOOK"] = "facebook";
43
- OAuthProvider2["TWITTER"] = "twitter";
44
- OAuthProvider2["MICROSOFT"] = "microsoft";
45
- OAuthProvider2["APPLE"] = "apple";
46
- OAuthProvider2["LINKEDIN"] = "linkedin";
47
- OAuthProvider2["DISCORD"] = "discord";
48
- return OAuthProvider2;
49
- })(OAuthProvider || {});
50
- var TwoFactorMethod = /* @__PURE__ */ ((TwoFactorMethod2) => {
51
- TwoFactorMethod2["TOTP"] = "totp";
52
- TwoFactorMethod2["SMS"] = "sms";
53
- TwoFactorMethod2["EMAIL"] = "email";
54
- TwoFactorMethod2["BACKUP_CODE"] = "backup_code";
55
- return TwoFactorMethod2;
56
- })(TwoFactorMethod || {});
57
-
58
- // src/types/storage.ts
59
- var LocalStorageAdapter = class {
60
- getItem(key) {
61
- if (typeof window === "undefined") return null;
62
- return window.localStorage.getItem(key);
63
- }
64
- setItem(key, value) {
65
- if (typeof window === "undefined") return;
66
- window.localStorage.setItem(key, value);
67
- }
68
- removeItem(key) {
69
- if (typeof window === "undefined") return;
70
- window.localStorage.removeItem(key);
71
- }
72
- clear() {
73
- if (typeof window === "undefined") return;
74
- window.localStorage.clear();
75
- }
76
- };
77
- var SessionStorageAdapter = class {
78
- getItem(key) {
79
- if (typeof window === "undefined") return null;
80
- return window.sessionStorage.getItem(key);
81
- }
82
- setItem(key, value) {
83
- if (typeof window === "undefined") return;
84
- window.sessionStorage.setItem(key, value);
85
- }
86
- removeItem(key) {
87
- if (typeof window === "undefined") return;
88
- window.sessionStorage.removeItem(key);
89
- }
90
- clear() {
91
- if (typeof window === "undefined") return;
92
- window.sessionStorage.clear();
93
- }
94
- };
95
- var MemoryStorageAdapter = class {
96
- constructor() {
97
- this.store = /* @__PURE__ */ new Map();
98
- }
99
- getItem(key) {
100
- return this.store.get(key) ?? null;
101
- }
102
- setItem(key, value) {
103
- this.store.set(key, value);
104
- }
105
- removeItem(key) {
106
- this.store.delete(key);
107
- }
108
- clear() {
109
- this.store.clear();
110
- }
111
- };
112
-
113
- // src/types/observable.ts
114
- var Observable = class {
115
- constructor(initialValue) {
116
- this.listeners = /* @__PURE__ */ new Set();
117
- this.value = initialValue;
118
- }
119
- /**
120
- * Get current value
121
- */
122
- getValue() {
123
- return this.value;
124
- }
125
- /**
126
- * Set new value and notify listeners
127
- */
128
- setValue(newValue) {
129
- if (this.value !== newValue) {
130
- this.value = newValue;
131
- this.notify();
132
- }
133
- }
134
- /**
135
- * Update value with a function
136
- */
137
- update(updater) {
138
- this.setValue(updater(this.value));
139
- }
140
- /**
141
- * Subscribe to value changes
142
- */
143
- subscribe(listener) {
144
- this.listeners.add(listener);
145
- listener(this.value);
146
- return () => {
147
- this.listeners.delete(listener);
148
- };
149
- }
150
- /**
151
- * Notify all listeners
152
- */
153
- notify() {
154
- this.listeners.forEach((listener) => listener(this.value));
155
- }
156
- /**
157
- * Clear all listeners
158
- */
159
- clearListeners() {
160
- this.listeners.clear();
161
- }
162
- /**
163
- * Get number of listeners
164
- */
165
- getListenerCount() {
166
- return this.listeners.size;
167
- }
168
- };
169
-
170
- exports.AuthError = AuthError;
171
- exports.AuthErrorType = AuthErrorType;
172
- exports.AuthState = AuthState;
173
- exports.LocalStorageAdapter = LocalStorageAdapter;
174
- exports.MemoryStorageAdapter = MemoryStorageAdapter;
175
- exports.OAuthProvider = OAuthProvider;
176
- exports.Observable = Observable;
177
- exports.SessionStorageAdapter = SessionStorageAdapter;
178
- exports.TwoFactorMethod = TwoFactorMethod;
179
- //# sourceMappingURL=index.js.map
180
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/types/auth.ts","../../src/types/storage.ts","../../src/types/observable.ts"],"names":["AuthState","AuthErrorType","OAuthProvider","TwoFactorMethod"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Core authentication types and interfaces\n */\n\n/**\n * Authentication state enum\n */\nexport enum AuthState {\n AUTHENTICATED = 'authenticated',\n UNAUTHENTICATED = 'unauthenticated',\n LOADING = 'loading',\n ERROR = 'error',\n}\n\n/**\n * User profile interface\n */\nexport interface User {\n id: string;\n email?: string;\n username?: string;\n phone?: string;\n emailVerified?: boolean;\n phoneVerified?: boolean;\n name?: string;\n firstName?: string;\n lastName?: string;\n avatar?: string;\n metadata?: Record<string, unknown>;\n createdAt?: Date;\n updatedAt?: Date;\n \n // Organization fields\n organizationId?: string;\n organizationRole?: string;\n organizationMemberships?: OrganizationMembership[];\n}\n\n/**\n * Session interface\n */\nexport interface Session {\n id: string;\n userId: string;\n token: string;\n expiresAt?: Date;\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Session data with user and session combined\n * Used for efficient retrieval of both user and session in one call\n */\nexport interface SessionData {\n user: User;\n session: Session;\n expiresAt: number;\n}\n\n/**\n * Auth error types\n */\nexport enum AuthErrorType {\n INVALID_CREDENTIALS = 'invalid_credentials',\n USER_NOT_FOUND = 'user_not_found',\n USER_ALREADY_EXISTS = 'user_already_exists',\n INVALID_TOKEN = 'invalid_token',\n TOKEN_EXPIRED = 'token_expired',\n NETWORK_ERROR = 'network_error',\n VALIDATION_ERROR = 'validation_error',\n MFA_REQUIRED = 'mfa_required',\n EMAIL_NOT_VERIFIED = 'email_not_verified',\n PHONE_NOT_VERIFIED = 'phone_not_verified',\n RATE_LIMIT_EXCEEDED = 'rate_limit_exceeded',\n UNKNOWN_ERROR = 'unknown_error',\n}\n\n/**\n * Auth error class\n * \n * Extends Error to provide proper error handling with auth-specific context\n */\nexport class AuthError extends Error {\n public readonly type: AuthErrorType;\n public readonly details?: Record<string, unknown>;\n public readonly code?: string | number;\n public readonly originalError?: unknown;\n\n constructor(\n message: string,\n type: AuthErrorType = AuthErrorType.UNKNOWN_ERROR,\n options?: {\n details?: Record<string, unknown>;\n code?: string | number;\n originalError?: unknown;\n }\n ) {\n super(message);\n this.name = 'AuthError';\n this.type = type;\n this.details = options?.details;\n this.code = options?.code;\n this.originalError = options?.originalError;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AuthError);\n }\n }\n}\n\n/**\n * Auth context state\n */\nexport interface AuthContext {\n state: AuthState;\n user: User | null;\n session: Session | null;\n error: AuthError | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n}\n\n/**\n * OAuth provider types\n */\nexport enum OAuthProvider {\n GOOGLE = 'google',\n GITHUB = 'github',\n FACEBOOK = 'facebook',\n TWITTER = 'twitter',\n MICROSOFT = 'microsoft',\n APPLE = 'apple',\n LINKEDIN = 'linkedin',\n DISCORD = 'discord',\n}\n\n/**\n * OAuth configuration\n */\nexport interface OAuthConfig {\n provider: OAuthProvider;\n clientId: string;\n redirectUri: string;\n scope?: string[];\n state?: string;\n}\n\n/**\n * 2FA method types\n */\nexport enum TwoFactorMethod {\n TOTP = 'totp',\n SMS = 'sms',\n EMAIL = 'email',\n BACKUP_CODE = 'backup_code',\n}\n\n/**\n * 2FA configuration\n */\nexport interface TwoFactorConfig {\n method: TwoFactorMethod;\n enabled: boolean;\n verified?: boolean;\n}\n\n/**\n * Passkey/WebAuthn types\n */\nexport interface PasskeyCredential {\n id: string;\n name?: string;\n createdAt?: Date;\n lastUsedAt?: Date;\n}\n\n/**\n * Validation error\n */\nexport interface ValidationError {\n field: string;\n message: string;\n code?: string;\n}\n\n/**\n * Organization interface\n */\nexport interface Organization {\n id: string;\n name: string;\n slug: string;\n logoUrl?: string;\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Organization membership interface\n */\nexport interface OrganizationMembership {\n organization: Organization;\n role: 'owner' | 'admin' | 'member';\n permissions?: string[];\n}\n\n/**\n * Device Flow types (RFC 8628 - OAuth 2.0 Device Authorization Grant)\n */\n\n/**\n * Request to initiate device flow\n * Used by CLI/device applications to start the authorization process\n */\nexport interface DeviceFlowInitiateRequest {\n clientId: string;\n scope?: string;\n}\n\n/**\n * Response from device flow initiation\n * Contains codes and URIs needed for user authorization\n */\nexport interface DeviceFlowInitiateResponse {\n /** The device verification code (long, secret code for polling) */\n deviceCode: string;\n /** The user-facing code to enter in browser (short, easy-to-type) */\n userCode: string;\n /** The URL to visit for verification */\n verificationUri: string;\n /** Optional complete URL with user_code pre-filled */\n verificationUriComplete?: string;\n /** Lifetime of device_code and user_code in seconds */\n expiresIn: number;\n /** Minimum polling interval in seconds */\n interval: number;\n}\n\n/**\n * Request to verify a user-entered device code\n * Used by the web UI when user enters their code\n */\nexport interface DeviceCodeVerifyRequest {\n userCode: string;\n}\n\n/**\n * Response from device code verification\n * Contains information about the pending authorization\n */\nexport interface DeviceCodeVerifyResponse {\n /** Whether the code is valid */\n valid: boolean;\n /** Client application name requesting access */\n clientName?: string;\n /** Scopes being requested */\n scopes?: string[];\n /** Time remaining before code expires */\n expiresIn?: number;\n}\n\n/**\n * Request to authorize/deny a device\n * Used when user approves or denies the authorization request\n */\nexport interface DeviceAuthorizeRequest {\n userCode: string;\n action: 'approve' | 'deny';\n}\n\n/**\n * Request to poll for device token\n * Used by CLI/device to check if user has authorized\n */\nexport interface DeviceTokenPollRequest {\n deviceCode: string;\n clientId: string;\n}\n\n/**\n * Status returned when polling is not yet complete\n */\nexport type DeviceTokenPollStatus = \n | 'authorization_pending' // User hasn't authorized yet\n | 'slow_down' // Polling too frequently\n | 'expired_token' // Device code expired\n | 'access_denied'; // User denied authorization\n\n/**\n * Response from device token polling\n * Either contains the auth response or a status indicator\n */\nexport interface DeviceTokenPollResponse {\n status: DeviceTokenPollStatus;\n}\n","/**\n * Storage abstraction for auth tokens and data\n */\n\n/**\n * Storage interface\n */\nexport interface Storage {\n /**\n * Get item from storage\n */\n getItem(key: string): Promise<string | null> | string | null;\n\n /**\n * Set item in storage\n */\n setItem(key: string, value: string): Promise<void> | void;\n\n /**\n * Remove item from storage\n */\n removeItem(key: string): Promise<void> | void;\n\n /**\n * Clear all items from storage\n */\n clear(): Promise<void> | void;\n}\n\n/**\n * Storage adapter for localStorage\n */\nexport class LocalStorageAdapter implements Storage {\n getItem(key: string): string | null {\n if (typeof window === 'undefined') return null;\n return window.localStorage.getItem(key);\n }\n\n setItem(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem(key, value);\n }\n\n removeItem(key: string): void {\n if (typeof window === 'undefined') return;\n window.localStorage.removeItem(key);\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n window.localStorage.clear();\n }\n}\n\n/**\n * Storage adapter for sessionStorage\n */\nexport class SessionStorageAdapter implements Storage {\n getItem(key: string): string | null {\n if (typeof window === 'undefined') return null;\n return window.sessionStorage.getItem(key);\n }\n\n setItem(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n window.sessionStorage.setItem(key, value);\n }\n\n removeItem(key: string): void {\n if (typeof window === 'undefined') return;\n window.sessionStorage.removeItem(key);\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n window.sessionStorage.clear();\n }\n}\n\n/**\n * In-memory storage adapter (for testing or SSR)\n */\nexport class MemoryStorageAdapter implements Storage {\n private store: Map<string, string> = new Map();\n\n getItem(key: string): string | null {\n return this.store.get(key) ?? null;\n }\n\n setItem(key: string, value: string): void {\n this.store.set(key, value);\n }\n\n removeItem(key: string): void {\n this.store.delete(key);\n }\n\n clear(): void {\n this.store.clear();\n }\n}\n\n","/**\n * Observable pattern for state management across frameworks\n */\n\nexport type Listener<T> = (value: T) => void;\nexport type Unsubscribe = () => void;\n\n/**\n * Observable state container\n */\nexport class Observable<T> {\n private value: T;\n private listeners: Set<Listener<T>> = new Set();\n\n constructor(initialValue: T) {\n this.value = initialValue;\n }\n\n /**\n * Get current value\n */\n getValue(): T {\n return this.value;\n }\n\n /**\n * Set new value and notify listeners\n */\n setValue(newValue: T): void {\n if (this.value !== newValue) {\n this.value = newValue;\n this.notify();\n }\n }\n\n /**\n * Update value with a function\n */\n update(updater: (current: T) => T): void {\n this.setValue(updater(this.value));\n }\n\n /**\n * Subscribe to value changes\n */\n subscribe(listener: Listener<T>): Unsubscribe {\n this.listeners.add(listener);\n // Immediately call listener with current value\n listener(this.value);\n\n // Return unsubscribe function\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * Notify all listeners\n */\n private notify(): void {\n this.listeners.forEach((listener) => listener(this.value));\n }\n\n /**\n * Clear all listeners\n */\n clearListeners(): void {\n this.listeners.clear();\n }\n\n /**\n * Get number of listeners\n */\n getListenerCount(): number {\n return this.listeners.size;\n }\n}\n\n"]}
@@ -1,170 +0,0 @@
1
- // src/types/auth.ts
2
- var AuthState = /* @__PURE__ */ ((AuthState2) => {
3
- AuthState2["AUTHENTICATED"] = "authenticated";
4
- AuthState2["UNAUTHENTICATED"] = "unauthenticated";
5
- AuthState2["LOADING"] = "loading";
6
- AuthState2["ERROR"] = "error";
7
- return AuthState2;
8
- })(AuthState || {});
9
- var AuthErrorType = /* @__PURE__ */ ((AuthErrorType2) => {
10
- AuthErrorType2["INVALID_CREDENTIALS"] = "invalid_credentials";
11
- AuthErrorType2["USER_NOT_FOUND"] = "user_not_found";
12
- AuthErrorType2["USER_ALREADY_EXISTS"] = "user_already_exists";
13
- AuthErrorType2["INVALID_TOKEN"] = "invalid_token";
14
- AuthErrorType2["TOKEN_EXPIRED"] = "token_expired";
15
- AuthErrorType2["NETWORK_ERROR"] = "network_error";
16
- AuthErrorType2["VALIDATION_ERROR"] = "validation_error";
17
- AuthErrorType2["MFA_REQUIRED"] = "mfa_required";
18
- AuthErrorType2["EMAIL_NOT_VERIFIED"] = "email_not_verified";
19
- AuthErrorType2["PHONE_NOT_VERIFIED"] = "phone_not_verified";
20
- AuthErrorType2["RATE_LIMIT_EXCEEDED"] = "rate_limit_exceeded";
21
- AuthErrorType2["UNKNOWN_ERROR"] = "unknown_error";
22
- return AuthErrorType2;
23
- })(AuthErrorType || {});
24
- var AuthError = class _AuthError extends Error {
25
- constructor(message, type = "unknown_error" /* UNKNOWN_ERROR */, options) {
26
- super(message);
27
- this.name = "AuthError";
28
- this.type = type;
29
- this.details = options?.details;
30
- this.code = options?.code;
31
- this.originalError = options?.originalError;
32
- if (Error.captureStackTrace) {
33
- Error.captureStackTrace(this, _AuthError);
34
- }
35
- }
36
- };
37
- var OAuthProvider = /* @__PURE__ */ ((OAuthProvider2) => {
38
- OAuthProvider2["GOOGLE"] = "google";
39
- OAuthProvider2["GITHUB"] = "github";
40
- OAuthProvider2["FACEBOOK"] = "facebook";
41
- OAuthProvider2["TWITTER"] = "twitter";
42
- OAuthProvider2["MICROSOFT"] = "microsoft";
43
- OAuthProvider2["APPLE"] = "apple";
44
- OAuthProvider2["LINKEDIN"] = "linkedin";
45
- OAuthProvider2["DISCORD"] = "discord";
46
- return OAuthProvider2;
47
- })(OAuthProvider || {});
48
- var TwoFactorMethod = /* @__PURE__ */ ((TwoFactorMethod2) => {
49
- TwoFactorMethod2["TOTP"] = "totp";
50
- TwoFactorMethod2["SMS"] = "sms";
51
- TwoFactorMethod2["EMAIL"] = "email";
52
- TwoFactorMethod2["BACKUP_CODE"] = "backup_code";
53
- return TwoFactorMethod2;
54
- })(TwoFactorMethod || {});
55
-
56
- // src/types/storage.ts
57
- var LocalStorageAdapter = class {
58
- getItem(key) {
59
- if (typeof window === "undefined") return null;
60
- return window.localStorage.getItem(key);
61
- }
62
- setItem(key, value) {
63
- if (typeof window === "undefined") return;
64
- window.localStorage.setItem(key, value);
65
- }
66
- removeItem(key) {
67
- if (typeof window === "undefined") return;
68
- window.localStorage.removeItem(key);
69
- }
70
- clear() {
71
- if (typeof window === "undefined") return;
72
- window.localStorage.clear();
73
- }
74
- };
75
- var SessionStorageAdapter = class {
76
- getItem(key) {
77
- if (typeof window === "undefined") return null;
78
- return window.sessionStorage.getItem(key);
79
- }
80
- setItem(key, value) {
81
- if (typeof window === "undefined") return;
82
- window.sessionStorage.setItem(key, value);
83
- }
84
- removeItem(key) {
85
- if (typeof window === "undefined") return;
86
- window.sessionStorage.removeItem(key);
87
- }
88
- clear() {
89
- if (typeof window === "undefined") return;
90
- window.sessionStorage.clear();
91
- }
92
- };
93
- var MemoryStorageAdapter = class {
94
- constructor() {
95
- this.store = /* @__PURE__ */ new Map();
96
- }
97
- getItem(key) {
98
- return this.store.get(key) ?? null;
99
- }
100
- setItem(key, value) {
101
- this.store.set(key, value);
102
- }
103
- removeItem(key) {
104
- this.store.delete(key);
105
- }
106
- clear() {
107
- this.store.clear();
108
- }
109
- };
110
-
111
- // src/types/observable.ts
112
- var Observable = class {
113
- constructor(initialValue) {
114
- this.listeners = /* @__PURE__ */ new Set();
115
- this.value = initialValue;
116
- }
117
- /**
118
- * Get current value
119
- */
120
- getValue() {
121
- return this.value;
122
- }
123
- /**
124
- * Set new value and notify listeners
125
- */
126
- setValue(newValue) {
127
- if (this.value !== newValue) {
128
- this.value = newValue;
129
- this.notify();
130
- }
131
- }
132
- /**
133
- * Update value with a function
134
- */
135
- update(updater) {
136
- this.setValue(updater(this.value));
137
- }
138
- /**
139
- * Subscribe to value changes
140
- */
141
- subscribe(listener) {
142
- this.listeners.add(listener);
143
- listener(this.value);
144
- return () => {
145
- this.listeners.delete(listener);
146
- };
147
- }
148
- /**
149
- * Notify all listeners
150
- */
151
- notify() {
152
- this.listeners.forEach((listener) => listener(this.value));
153
- }
154
- /**
155
- * Clear all listeners
156
- */
157
- clearListeners() {
158
- this.listeners.clear();
159
- }
160
- /**
161
- * Get number of listeners
162
- */
163
- getListenerCount() {
164
- return this.listeners.size;
165
- }
166
- };
167
-
168
- export { AuthError, AuthErrorType, AuthState, LocalStorageAdapter, MemoryStorageAdapter, OAuthProvider, Observable, SessionStorageAdapter, TwoFactorMethod };
169
- //# sourceMappingURL=index.mjs.map
170
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/types/auth.ts","../../src/types/storage.ts","../../src/types/observable.ts"],"names":["AuthState","AuthErrorType","OAuthProvider","TwoFactorMethod"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Core authentication types and interfaces\n */\n\n/**\n * Authentication state enum\n */\nexport enum AuthState {\n AUTHENTICATED = 'authenticated',\n UNAUTHENTICATED = 'unauthenticated',\n LOADING = 'loading',\n ERROR = 'error',\n}\n\n/**\n * User profile interface\n */\nexport interface User {\n id: string;\n email?: string;\n username?: string;\n phone?: string;\n emailVerified?: boolean;\n phoneVerified?: boolean;\n name?: string;\n firstName?: string;\n lastName?: string;\n avatar?: string;\n metadata?: Record<string, unknown>;\n createdAt?: Date;\n updatedAt?: Date;\n \n // Organization fields\n organizationId?: string;\n organizationRole?: string;\n organizationMemberships?: OrganizationMembership[];\n}\n\n/**\n * Session interface\n */\nexport interface Session {\n id: string;\n userId: string;\n token: string;\n expiresAt?: Date;\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Session data with user and session combined\n * Used for efficient retrieval of both user and session in one call\n */\nexport interface SessionData {\n user: User;\n session: Session;\n expiresAt: number;\n}\n\n/**\n * Auth error types\n */\nexport enum AuthErrorType {\n INVALID_CREDENTIALS = 'invalid_credentials',\n USER_NOT_FOUND = 'user_not_found',\n USER_ALREADY_EXISTS = 'user_already_exists',\n INVALID_TOKEN = 'invalid_token',\n TOKEN_EXPIRED = 'token_expired',\n NETWORK_ERROR = 'network_error',\n VALIDATION_ERROR = 'validation_error',\n MFA_REQUIRED = 'mfa_required',\n EMAIL_NOT_VERIFIED = 'email_not_verified',\n PHONE_NOT_VERIFIED = 'phone_not_verified',\n RATE_LIMIT_EXCEEDED = 'rate_limit_exceeded',\n UNKNOWN_ERROR = 'unknown_error',\n}\n\n/**\n * Auth error class\n * \n * Extends Error to provide proper error handling with auth-specific context\n */\nexport class AuthError extends Error {\n public readonly type: AuthErrorType;\n public readonly details?: Record<string, unknown>;\n public readonly code?: string | number;\n public readonly originalError?: unknown;\n\n constructor(\n message: string,\n type: AuthErrorType = AuthErrorType.UNKNOWN_ERROR,\n options?: {\n details?: Record<string, unknown>;\n code?: string | number;\n originalError?: unknown;\n }\n ) {\n super(message);\n this.name = 'AuthError';\n this.type = type;\n this.details = options?.details;\n this.code = options?.code;\n this.originalError = options?.originalError;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AuthError);\n }\n }\n}\n\n/**\n * Auth context state\n */\nexport interface AuthContext {\n state: AuthState;\n user: User | null;\n session: Session | null;\n error: AuthError | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n}\n\n/**\n * OAuth provider types\n */\nexport enum OAuthProvider {\n GOOGLE = 'google',\n GITHUB = 'github',\n FACEBOOK = 'facebook',\n TWITTER = 'twitter',\n MICROSOFT = 'microsoft',\n APPLE = 'apple',\n LINKEDIN = 'linkedin',\n DISCORD = 'discord',\n}\n\n/**\n * OAuth configuration\n */\nexport interface OAuthConfig {\n provider: OAuthProvider;\n clientId: string;\n redirectUri: string;\n scope?: string[];\n state?: string;\n}\n\n/**\n * 2FA method types\n */\nexport enum TwoFactorMethod {\n TOTP = 'totp',\n SMS = 'sms',\n EMAIL = 'email',\n BACKUP_CODE = 'backup_code',\n}\n\n/**\n * 2FA configuration\n */\nexport interface TwoFactorConfig {\n method: TwoFactorMethod;\n enabled: boolean;\n verified?: boolean;\n}\n\n/**\n * Passkey/WebAuthn types\n */\nexport interface PasskeyCredential {\n id: string;\n name?: string;\n createdAt?: Date;\n lastUsedAt?: Date;\n}\n\n/**\n * Validation error\n */\nexport interface ValidationError {\n field: string;\n message: string;\n code?: string;\n}\n\n/**\n * Organization interface\n */\nexport interface Organization {\n id: string;\n name: string;\n slug: string;\n logoUrl?: string;\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Organization membership interface\n */\nexport interface OrganizationMembership {\n organization: Organization;\n role: 'owner' | 'admin' | 'member';\n permissions?: string[];\n}\n\n/**\n * Device Flow types (RFC 8628 - OAuth 2.0 Device Authorization Grant)\n */\n\n/**\n * Request to initiate device flow\n * Used by CLI/device applications to start the authorization process\n */\nexport interface DeviceFlowInitiateRequest {\n clientId: string;\n scope?: string;\n}\n\n/**\n * Response from device flow initiation\n * Contains codes and URIs needed for user authorization\n */\nexport interface DeviceFlowInitiateResponse {\n /** The device verification code (long, secret code for polling) */\n deviceCode: string;\n /** The user-facing code to enter in browser (short, easy-to-type) */\n userCode: string;\n /** The URL to visit for verification */\n verificationUri: string;\n /** Optional complete URL with user_code pre-filled */\n verificationUriComplete?: string;\n /** Lifetime of device_code and user_code in seconds */\n expiresIn: number;\n /** Minimum polling interval in seconds */\n interval: number;\n}\n\n/**\n * Request to verify a user-entered device code\n * Used by the web UI when user enters their code\n */\nexport interface DeviceCodeVerifyRequest {\n userCode: string;\n}\n\n/**\n * Response from device code verification\n * Contains information about the pending authorization\n */\nexport interface DeviceCodeVerifyResponse {\n /** Whether the code is valid */\n valid: boolean;\n /** Client application name requesting access */\n clientName?: string;\n /** Scopes being requested */\n scopes?: string[];\n /** Time remaining before code expires */\n expiresIn?: number;\n}\n\n/**\n * Request to authorize/deny a device\n * Used when user approves or denies the authorization request\n */\nexport interface DeviceAuthorizeRequest {\n userCode: string;\n action: 'approve' | 'deny';\n}\n\n/**\n * Request to poll for device token\n * Used by CLI/device to check if user has authorized\n */\nexport interface DeviceTokenPollRequest {\n deviceCode: string;\n clientId: string;\n}\n\n/**\n * Status returned when polling is not yet complete\n */\nexport type DeviceTokenPollStatus = \n | 'authorization_pending' // User hasn't authorized yet\n | 'slow_down' // Polling too frequently\n | 'expired_token' // Device code expired\n | 'access_denied'; // User denied authorization\n\n/**\n * Response from device token polling\n * Either contains the auth response or a status indicator\n */\nexport interface DeviceTokenPollResponse {\n status: DeviceTokenPollStatus;\n}\n","/**\n * Storage abstraction for auth tokens and data\n */\n\n/**\n * Storage interface\n */\nexport interface Storage {\n /**\n * Get item from storage\n */\n getItem(key: string): Promise<string | null> | string | null;\n\n /**\n * Set item in storage\n */\n setItem(key: string, value: string): Promise<void> | void;\n\n /**\n * Remove item from storage\n */\n removeItem(key: string): Promise<void> | void;\n\n /**\n * Clear all items from storage\n */\n clear(): Promise<void> | void;\n}\n\n/**\n * Storage adapter for localStorage\n */\nexport class LocalStorageAdapter implements Storage {\n getItem(key: string): string | null {\n if (typeof window === 'undefined') return null;\n return window.localStorage.getItem(key);\n }\n\n setItem(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem(key, value);\n }\n\n removeItem(key: string): void {\n if (typeof window === 'undefined') return;\n window.localStorage.removeItem(key);\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n window.localStorage.clear();\n }\n}\n\n/**\n * Storage adapter for sessionStorage\n */\nexport class SessionStorageAdapter implements Storage {\n getItem(key: string): string | null {\n if (typeof window === 'undefined') return null;\n return window.sessionStorage.getItem(key);\n }\n\n setItem(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n window.sessionStorage.setItem(key, value);\n }\n\n removeItem(key: string): void {\n if (typeof window === 'undefined') return;\n window.sessionStorage.removeItem(key);\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n window.sessionStorage.clear();\n }\n}\n\n/**\n * In-memory storage adapter (for testing or SSR)\n */\nexport class MemoryStorageAdapter implements Storage {\n private store: Map<string, string> = new Map();\n\n getItem(key: string): string | null {\n return this.store.get(key) ?? null;\n }\n\n setItem(key: string, value: string): void {\n this.store.set(key, value);\n }\n\n removeItem(key: string): void {\n this.store.delete(key);\n }\n\n clear(): void {\n this.store.clear();\n }\n}\n\n","/**\n * Observable pattern for state management across frameworks\n */\n\nexport type Listener<T> = (value: T) => void;\nexport type Unsubscribe = () => void;\n\n/**\n * Observable state container\n */\nexport class Observable<T> {\n private value: T;\n private listeners: Set<Listener<T>> = new Set();\n\n constructor(initialValue: T) {\n this.value = initialValue;\n }\n\n /**\n * Get current value\n */\n getValue(): T {\n return this.value;\n }\n\n /**\n * Set new value and notify listeners\n */\n setValue(newValue: T): void {\n if (this.value !== newValue) {\n this.value = newValue;\n this.notify();\n }\n }\n\n /**\n * Update value with a function\n */\n update(updater: (current: T) => T): void {\n this.setValue(updater(this.value));\n }\n\n /**\n * Subscribe to value changes\n */\n subscribe(listener: Listener<T>): Unsubscribe {\n this.listeners.add(listener);\n // Immediately call listener with current value\n listener(this.value);\n\n // Return unsubscribe function\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * Notify all listeners\n */\n private notify(): void {\n this.listeners.forEach((listener) => listener(this.value));\n }\n\n /**\n * Clear all listeners\n */\n clearListeners(): void {\n this.listeners.clear();\n }\n\n /**\n * Get number of listeners\n */\n getListenerCount(): number {\n return this.listeners.size;\n }\n}\n\n"]}