@glideidentity/web-client-sdk 5.1.3 → 6.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +337 -526
- package/dist/browser/web-client-sdk.min.js +1 -1
- package/dist/cjs/adapters/index.js +15 -0
- package/dist/cjs/adapters/react.js +192 -0
- package/dist/cjs/adapters/vanilla.js +38 -0
- package/dist/cjs/adapters/vue.js +187 -0
- package/dist/cjs/browser.js +58 -0
- package/dist/cjs/client/http.js +159 -0
- package/dist/cjs/client/index.js +19 -0
- package/dist/cjs/client/logger.js +135 -0
- package/dist/cjs/client/phone-auth-client.js +439 -0
- package/dist/cjs/client/strategies/polling.js +177 -0
- package/dist/cjs/core/errors.js +204 -0
- package/dist/cjs/core/index.js +83 -0
- package/dist/cjs/core/type-guards.js +196 -0
- package/dist/cjs/core/types.js +25 -0
- package/dist/{core/phone-auth/validation-utils.js → cjs/core/validators.js} +70 -23
- package/dist/cjs/index.js +81 -0
- package/dist/cjs/ui/index.js +11 -0
- package/dist/{core/phone-auth → cjs}/ui/mobile-debug-console.js +149 -78
- package/dist/cjs/ui/modal.js +1122 -0
- package/dist/esm/adapters/index.js +11 -0
- package/dist/esm/adapters/react.js +182 -0
- package/dist/esm/adapters/vanilla.js +29 -0
- package/dist/esm/adapters/vue.js +177 -0
- package/dist/esm/browser.js +30 -11
- package/dist/esm/client/http.js +156 -0
- package/dist/esm/client/index.js +11 -0
- package/dist/esm/client/logger.js +131 -0
- package/dist/esm/client/phone-auth-client.js +435 -0
- package/dist/esm/client/strategies/polling.js +174 -0
- package/dist/esm/core/errors.js +193 -0
- package/dist/esm/core/index.js +60 -0
- package/dist/esm/core/type-guards.js +181 -0
- package/dist/esm/core/types.js +22 -1
- package/dist/esm/core/{phone-auth/validation-utils.js → validators.js} +66 -21
- package/dist/esm/index.js +45 -17
- package/dist/esm/ui/index.js +5 -0
- package/dist/esm/{core/phone-auth/ui → ui}/mobile-debug-console.js +149 -78
- package/dist/esm/ui/modal.js +1117 -0
- package/dist/types/adapters/index.d.ts +10 -0
- package/dist/types/adapters/index.d.ts.map +1 -0
- package/dist/types/adapters/react.d.ts +70 -0
- package/dist/types/adapters/react.d.ts.map +1 -0
- package/dist/types/adapters/vanilla.d.ts +29 -0
- package/dist/types/adapters/vanilla.d.ts.map +1 -0
- package/dist/types/adapters/vue.d.ts +71 -0
- package/dist/types/adapters/vue.d.ts.map +1 -0
- package/dist/types/browser.d.ts +27 -0
- package/dist/types/browser.d.ts.map +1 -0
- package/dist/types/client/http.d.ts +41 -0
- package/dist/types/client/http.d.ts.map +1 -0
- package/dist/types/client/index.d.ts +10 -0
- package/dist/types/client/index.d.ts.map +1 -0
- package/dist/types/client/logger.d.ts +36 -0
- package/dist/types/client/logger.d.ts.map +1 -0
- package/dist/types/client/phone-auth-client.d.ts +91 -0
- package/dist/types/client/phone-auth-client.d.ts.map +1 -0
- package/dist/types/client/strategies/polling.d.ts +36 -0
- package/dist/types/client/strategies/polling.d.ts.map +1 -0
- package/dist/types/core/errors.d.ts +71 -0
- package/dist/types/core/errors.d.ts.map +1 -0
- package/dist/types/core/index.d.ts +38 -0
- package/dist/types/core/index.d.ts.map +1 -0
- package/dist/types/core/type-guards.d.ts +118 -0
- package/dist/types/core/type-guards.d.ts.map +1 -0
- package/dist/types/core/types.d.ts +534 -0
- package/dist/types/core/types.d.ts.map +1 -0
- package/dist/types/core/validators.d.ts +63 -0
- package/dist/types/core/validators.d.ts.map +1 -0
- package/dist/types/index.d.ts +40 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/ui/index.d.ts +6 -0
- package/dist/types/ui/index.d.ts.map +1 -0
- package/dist/{esm/core/phone-auth → types}/ui/mobile-debug-console.d.ts +1 -0
- package/dist/types/ui/mobile-debug-console.d.ts.map +1 -0
- package/dist/types/ui/modal.d.ts +87 -0
- package/dist/types/ui/modal.d.ts.map +1 -0
- package/package.json +48 -34
- package/dist/adapters/angular/client.service.d.ts +0 -7
- package/dist/adapters/angular/client.service.js +0 -30
- package/dist/adapters/angular/index.d.ts +0 -3
- package/dist/adapters/angular/index.js +0 -18
- package/dist/adapters/angular/phone-auth.service.d.ts +0 -38
- package/dist/adapters/angular/phone-auth.service.js +0 -130
- package/dist/adapters/react/index.d.ts +0 -9
- package/dist/adapters/react/index.js +0 -28
- package/dist/adapters/react/useClient.d.ts +0 -26
- package/dist/adapters/react/useClient.js +0 -121
- package/dist/adapters/react/usePhoneAuth.d.ts +0 -23
- package/dist/adapters/react/usePhoneAuth.js +0 -95
- package/dist/adapters/vanilla/client.d.ts +0 -8
- package/dist/adapters/vanilla/client.js +0 -33
- package/dist/adapters/vanilla/index.d.ts +0 -3
- package/dist/adapters/vanilla/index.js +0 -18
- package/dist/adapters/vanilla/phone-auth.d.ts +0 -46
- package/dist/adapters/vanilla/phone-auth.js +0 -138
- package/dist/adapters/vue/index.d.ts +0 -10
- package/dist/adapters/vue/index.js +0 -36
- package/dist/adapters/vue/useClient.d.ts +0 -115
- package/dist/adapters/vue/useClient.js +0 -131
- package/dist/adapters/vue/usePhoneAuth.d.ts +0 -94
- package/dist/adapters/vue/usePhoneAuth.js +0 -103
- package/dist/browser.d.ts +0 -7
- package/dist/browser.js +0 -31
- package/dist/core/client.d.ts +0 -22
- package/dist/core/client.js +0 -77
- package/dist/core/logger.d.ts +0 -130
- package/dist/core/logger.js +0 -370
- package/dist/core/phone-auth/api-types.d.ts +0 -593
- package/dist/core/phone-auth/api-types.js +0 -215
- package/dist/core/phone-auth/client.d.ts +0 -189
- package/dist/core/phone-auth/client.js +0 -1441
- package/dist/core/phone-auth/error-utils.d.ts +0 -110
- package/dist/core/phone-auth/error-utils.js +0 -350
- package/dist/core/phone-auth/index.d.ts +0 -7
- package/dist/core/phone-auth/index.js +0 -50
- package/dist/core/phone-auth/status-types.d.ts +0 -107
- package/dist/core/phone-auth/status-types.js +0 -31
- package/dist/core/phone-auth/strategies/desktop.d.ts +0 -122
- package/dist/core/phone-auth/strategies/desktop.js +0 -596
- package/dist/core/phone-auth/strategies/index.d.ts +0 -11
- package/dist/core/phone-auth/strategies/index.js +0 -15
- package/dist/core/phone-auth/strategies/link.d.ts +0 -89
- package/dist/core/phone-auth/strategies/link.js +0 -384
- package/dist/core/phone-auth/strategies/ts43.d.ts +0 -32
- package/dist/core/phone-auth/strategies/ts43.js +0 -161
- package/dist/core/phone-auth/strategies/types.d.ts +0 -18
- package/dist/core/phone-auth/strategies/types.js +0 -6
- package/dist/core/phone-auth/type-guards.d.ts +0 -143
- package/dist/core/phone-auth/type-guards.js +0 -198
- package/dist/core/phone-auth/types.d.ts +0 -237
- package/dist/core/phone-auth/types.js +0 -93
- package/dist/core/phone-auth/ui/mobile-debug-console.d.ts +0 -25
- package/dist/core/phone-auth/ui/modal.d.ts +0 -88
- package/dist/core/phone-auth/ui/modal.js +0 -598
- package/dist/core/phone-auth/validation-utils.d.ts +0 -44
- package/dist/core/types.d.ts +0 -62
- package/dist/core/types.js +0 -2
- package/dist/core/version.d.ts +0 -1
- package/dist/core/version.js +0 -5
- package/dist/esm/adapters/angular/client.service.d.ts +0 -7
- package/dist/esm/adapters/angular/client.service.js +0 -27
- package/dist/esm/adapters/angular/index.d.ts +0 -3
- package/dist/esm/adapters/angular/index.js +0 -4
- package/dist/esm/adapters/angular/phone-auth.service.d.ts +0 -38
- package/dist/esm/adapters/angular/phone-auth.service.js +0 -127
- package/dist/esm/adapters/react/index.d.ts +0 -9
- package/dist/esm/adapters/react/index.js +0 -8
- package/dist/esm/adapters/react/useClient.d.ts +0 -26
- package/dist/esm/adapters/react/useClient.js +0 -116
- package/dist/esm/adapters/react/usePhoneAuth.d.ts +0 -23
- package/dist/esm/adapters/react/usePhoneAuth.js +0 -92
- package/dist/esm/adapters/vanilla/client.d.ts +0 -8
- package/dist/esm/adapters/vanilla/client.js +0 -29
- package/dist/esm/adapters/vanilla/index.d.ts +0 -3
- package/dist/esm/adapters/vanilla/index.js +0 -4
- package/dist/esm/adapters/vanilla/phone-auth.d.ts +0 -46
- package/dist/esm/adapters/vanilla/phone-auth.js +0 -134
- package/dist/esm/adapters/vue/index.d.ts +0 -10
- package/dist/esm/adapters/vue/index.js +0 -11
- package/dist/esm/adapters/vue/useClient.d.ts +0 -115
- package/dist/esm/adapters/vue/useClient.js +0 -127
- package/dist/esm/adapters/vue/usePhoneAuth.d.ts +0 -94
- package/dist/esm/adapters/vue/usePhoneAuth.js +0 -100
- package/dist/esm/browser.d.ts +0 -7
- package/dist/esm/core/client.d.ts +0 -22
- package/dist/esm/core/client.js +0 -70
- package/dist/esm/core/logger.d.ts +0 -130
- package/dist/esm/core/logger.js +0 -359
- package/dist/esm/core/phone-auth/api-types.d.ts +0 -593
- package/dist/esm/core/phone-auth/api-types.js +0 -203
- package/dist/esm/core/phone-auth/client.d.ts +0 -189
- package/dist/esm/core/phone-auth/client.js +0 -1404
- package/dist/esm/core/phone-auth/error-utils.d.ts +0 -110
- package/dist/esm/core/phone-auth/error-utils.js +0 -338
- package/dist/esm/core/phone-auth/index.d.ts +0 -7
- package/dist/esm/core/phone-auth/index.js +0 -8
- package/dist/esm/core/phone-auth/status-types.d.ts +0 -107
- package/dist/esm/core/phone-auth/status-types.js +0 -26
- package/dist/esm/core/phone-auth/strategies/desktop.d.ts +0 -122
- package/dist/esm/core/phone-auth/strategies/desktop.js +0 -590
- package/dist/esm/core/phone-auth/strategies/index.d.ts +0 -11
- package/dist/esm/core/phone-auth/strategies/index.js +0 -7
- package/dist/esm/core/phone-auth/strategies/link.d.ts +0 -89
- package/dist/esm/core/phone-auth/strategies/link.js +0 -380
- package/dist/esm/core/phone-auth/strategies/ts43.d.ts +0 -32
- package/dist/esm/core/phone-auth/strategies/ts43.js +0 -157
- package/dist/esm/core/phone-auth/strategies/types.d.ts +0 -18
- package/dist/esm/core/phone-auth/strategies/types.js +0 -5
- package/dist/esm/core/phone-auth/type-guards.d.ts +0 -143
- package/dist/esm/core/phone-auth/type-guards.js +0 -185
- package/dist/esm/core/phone-auth/types.d.ts +0 -237
- package/dist/esm/core/phone-auth/types.js +0 -76
- package/dist/esm/core/phone-auth/ui/modal.d.ts +0 -88
- package/dist/esm/core/phone-auth/ui/modal.js +0 -594
- package/dist/esm/core/phone-auth/validation-utils.d.ts +0 -44
- package/dist/esm/core/types.d.ts +0 -62
- package/dist/esm/core/version.d.ts +0 -1
- package/dist/esm/core/version.js +0 -2
- package/dist/esm/index.d.ts +0 -12
- package/dist/index.d.ts +0 -12
- package/dist/index.js +0 -55
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
export declare const PhoneAuthErrorCode: {
|
|
2
|
-
readonly BAD_REQUEST: "BAD_REQUEST";
|
|
3
|
-
readonly VALIDATION_ERROR: "VALIDATION_ERROR";
|
|
4
|
-
readonly INVALID_PARAMETERS: "INVALID_PARAMETERS";
|
|
5
|
-
readonly MISSING_PARAMETERS: "MISSING_PARAMETERS";
|
|
6
|
-
readonly INVALID_PHONE_NUMBER: "INVALID_PHONE_NUMBER";
|
|
7
|
-
readonly INVALID_MCC_MNC: "INVALID_MCC_MNC";
|
|
8
|
-
readonly UNAUTHORIZED: "UNAUTHORIZED";
|
|
9
|
-
readonly INVALID_CREDENTIALS: "INVALID_CREDENTIALS";
|
|
10
|
-
readonly EXPIRED_TOKEN: "EXPIRED_TOKEN";
|
|
11
|
-
readonly TOKEN_ACQUISITION_FAILED: "TOKEN_ACQUISITION_FAILED";
|
|
12
|
-
readonly INVALID_API_KEY: "INVALID_API_KEY";
|
|
13
|
-
readonly MISSING_AUTH_HEADER: "MISSING_AUTH_HEADER";
|
|
14
|
-
readonly FORBIDDEN: "FORBIDDEN";
|
|
15
|
-
readonly INSUFFICIENT_PERMISSIONS: "INSUFFICIENT_PERMISSIONS";
|
|
16
|
-
readonly ACCESS_DENIED: "ACCESS_DENIED";
|
|
17
|
-
readonly NOT_FOUND: "NOT_FOUND";
|
|
18
|
-
readonly RESOURCE_NOT_FOUND: "RESOURCE_NOT_FOUND";
|
|
19
|
-
readonly SESSION_NOT_FOUND: "SESSION_NOT_FOUND";
|
|
20
|
-
readonly CARRIER_NOT_FOUND: "CARRIER_NOT_FOUND";
|
|
21
|
-
readonly ENDPOINT_NOT_FOUND: "ENDPOINT_NOT_FOUND";
|
|
22
|
-
readonly CONFLICT: "CONFLICT";
|
|
23
|
-
readonly RESOURCE_ALREADY_EXISTS: "RESOURCE_ALREADY_EXISTS";
|
|
24
|
-
readonly DUPLICATE_SESSION: "DUPLICATE_SESSION";
|
|
25
|
-
readonly CONCURRENT_MODIFICATION: "CONCURRENT_MODIFICATION";
|
|
26
|
-
readonly UNPROCESSABLE_ENTITY: "UNPROCESSABLE_ENTITY";
|
|
27
|
-
readonly UNSUPPORTED_VERIFICATION: "UNSUPPORTED_VERIFICATION";
|
|
28
|
-
readonly INVALID_VERIFICATION: "INVALID_VERIFICATION";
|
|
29
|
-
readonly VERIFICATION_FAILED: "VERIFICATION_FAILED";
|
|
30
|
-
readonly OTP_EXPIRED: "OTP_EXPIRED";
|
|
31
|
-
readonly OTP_INVALID: "OTP_INVALID";
|
|
32
|
-
readonly RCS_UNAVAILABLE: "RCS_UNAVAILABLE";
|
|
33
|
-
readonly CARRIER_IDENTIFICATION_FAILED: "CARRIER_IDENTIFICATION_FAILED";
|
|
34
|
-
readonly CARRIER_NOT_ELIGIBLE: "CARRIER_NOT_ELIGIBLE";
|
|
35
|
-
readonly UNSUPPORTED_CARRIER: "UNSUPPORTED_CARRIER";
|
|
36
|
-
readonly UNSUPPORTED_PLATFORM: "UNSUPPORTED_PLATFORM";
|
|
37
|
-
readonly UNSUPPORTED_STRATEGY: "UNSUPPORTED_STRATEGY";
|
|
38
|
-
readonly INVALID_SESSION_STATE: "INVALID_SESSION_STATE";
|
|
39
|
-
readonly PHONE_NUMBER_MISMATCH: "PHONE_NUMBER_MISMATCH";
|
|
40
|
-
readonly INVALID_CREDENTIAL_FORMAT: "INVALID_CREDENTIAL_FORMAT";
|
|
41
|
-
readonly RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED";
|
|
42
|
-
readonly TOO_MANY_REQUESTS: "TOO_MANY_REQUESTS";
|
|
43
|
-
readonly QUOTA_EXCEEDED: "QUOTA_EXCEEDED";
|
|
44
|
-
readonly INTERNAL_SERVER_ERROR: "INTERNAL_SERVER_ERROR";
|
|
45
|
-
readonly CIRCUIT_BREAKER_CONFIGURATION_ERROR: "CIRCUIT_BREAKER_CONFIGURATION_ERROR";
|
|
46
|
-
readonly DATABASE_ERROR: "DATABASE_ERROR";
|
|
47
|
-
readonly CACHE_ERROR: "CACHE_ERROR";
|
|
48
|
-
readonly SERIALIZATION_ERROR: "SERIALIZATION_ERROR";
|
|
49
|
-
readonly CRYPTO_ERROR: "CRYPTO_ERROR";
|
|
50
|
-
readonly BAD_GATEWAY: "BAD_GATEWAY";
|
|
51
|
-
readonly UPSTREAM_ERROR: "UPSTREAM_ERROR";
|
|
52
|
-
readonly INVALID_RESPONSE: "INVALID_RESPONSE";
|
|
53
|
-
readonly SERVICE_UNAVAILABLE: "SERVICE_UNAVAILABLE";
|
|
54
|
-
readonly DOWNSTREAM_SERVICE_ERROR: "DOWNSTREAM_SERVICE_ERROR";
|
|
55
|
-
readonly PROVIDER_ERROR: "PROVIDER_ERROR";
|
|
56
|
-
readonly CIRCUIT_BREAKER_OPEN: "CIRCUIT_BREAKER_OPEN";
|
|
57
|
-
readonly MAINTENANCE_MODE: "MAINTENANCE_MODE";
|
|
58
|
-
readonly GATEWAY_TIMEOUT: "GATEWAY_TIMEOUT";
|
|
59
|
-
readonly REQUEST_TIMEOUT: "REQUEST_TIMEOUT";
|
|
60
|
-
readonly UPSTREAM_TIMEOUT: "UPSTREAM_TIMEOUT";
|
|
61
|
-
readonly DEADLINE_EXCEEDED: "DEADLINE_EXCEEDED";
|
|
62
|
-
readonly BROWSER_NOT_SUPPORTED: "BROWSER_NOT_SUPPORTED";
|
|
63
|
-
readonly USER_DENIED: "USER_DENIED";
|
|
64
|
-
readonly NETWORK_ERROR: "NETWORK_ERROR";
|
|
65
|
-
};
|
|
66
|
-
export type PhoneAuthErrorCode = typeof PhoneAuthErrorCode[keyof typeof PhoneAuthErrorCode];
|
|
67
|
-
import type { AuthError } from './types';
|
|
68
|
-
/**
|
|
69
|
-
* Type guard to check if an error is a PhoneAuthError
|
|
70
|
-
*/
|
|
71
|
-
export declare function isPhoneAuthError(error: any): error is AuthError;
|
|
72
|
-
/**
|
|
73
|
-
* Check if error should be shown to user
|
|
74
|
-
*/
|
|
75
|
-
export declare function isUserError(error: AuthError): boolean;
|
|
76
|
-
/**
|
|
77
|
-
* Get user-friendly error message
|
|
78
|
-
*/
|
|
79
|
-
export declare function getUserMessage(error: AuthError): string;
|
|
80
|
-
/**
|
|
81
|
-
* Check if error matches a specific code
|
|
82
|
-
*/
|
|
83
|
-
export declare function isErrorCode(error: AuthError, code: PhoneAuthErrorCode): boolean;
|
|
84
|
-
/**
|
|
85
|
-
* Get retry delay for rate-limited requests
|
|
86
|
-
*/
|
|
87
|
-
export declare function getRetryDelay(error: AuthError): number | null;
|
|
88
|
-
/**
|
|
89
|
-
* Check if error is retryable
|
|
90
|
-
*/
|
|
91
|
-
export declare function isRetryableError(error: AuthError): boolean;
|
|
92
|
-
/**
|
|
93
|
-
* Parse error response from backend API
|
|
94
|
-
*/
|
|
95
|
-
export declare function parseBackendError(response: any): AuthError;
|
|
96
|
-
/**
|
|
97
|
-
* Serialize error for logging/observability tools like Sentry
|
|
98
|
-
* This ensures all error details are captured in a format that can be sent over the network
|
|
99
|
-
*/
|
|
100
|
-
export declare function serializeError(error: AuthError): Record<string, any>;
|
|
101
|
-
/**
|
|
102
|
-
* Create a breadcrumb trail for error tracking
|
|
103
|
-
* Useful for understanding the sequence of events leading to an error
|
|
104
|
-
*/
|
|
105
|
-
export declare function createErrorBreadcrumb(error: AuthError): {
|
|
106
|
-
category: string;
|
|
107
|
-
message: string;
|
|
108
|
-
level: 'error' | 'warning' | 'info';
|
|
109
|
-
data: Record<string, any>;
|
|
110
|
-
};
|
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
import { SDK_VERSION } from '../version';
|
|
2
|
-
// Error constants matching the backend for consistency
|
|
3
|
-
export const PhoneAuthErrorCode = {
|
|
4
|
-
// 400 Bad Request errors
|
|
5
|
-
BAD_REQUEST: 'BAD_REQUEST',
|
|
6
|
-
VALIDATION_ERROR: 'VALIDATION_ERROR',
|
|
7
|
-
INVALID_PARAMETERS: 'INVALID_PARAMETERS',
|
|
8
|
-
MISSING_PARAMETERS: 'MISSING_PARAMETERS',
|
|
9
|
-
INVALID_PHONE_NUMBER: 'INVALID_PHONE_NUMBER',
|
|
10
|
-
INVALID_MCC_MNC: 'INVALID_MCC_MNC',
|
|
11
|
-
// 401 Unauthorized errors
|
|
12
|
-
UNAUTHORIZED: 'UNAUTHORIZED',
|
|
13
|
-
INVALID_CREDENTIALS: 'INVALID_CREDENTIALS',
|
|
14
|
-
EXPIRED_TOKEN: 'EXPIRED_TOKEN',
|
|
15
|
-
TOKEN_ACQUISITION_FAILED: 'TOKEN_ACQUISITION_FAILED',
|
|
16
|
-
INVALID_API_KEY: 'INVALID_API_KEY',
|
|
17
|
-
MISSING_AUTH_HEADER: 'MISSING_AUTH_HEADER',
|
|
18
|
-
// 403 Forbidden errors
|
|
19
|
-
FORBIDDEN: 'FORBIDDEN',
|
|
20
|
-
INSUFFICIENT_PERMISSIONS: 'INSUFFICIENT_PERMISSIONS',
|
|
21
|
-
ACCESS_DENIED: 'ACCESS_DENIED',
|
|
22
|
-
// 404 Not Found errors
|
|
23
|
-
NOT_FOUND: 'NOT_FOUND',
|
|
24
|
-
RESOURCE_NOT_FOUND: 'RESOURCE_NOT_FOUND',
|
|
25
|
-
SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',
|
|
26
|
-
CARRIER_NOT_FOUND: 'CARRIER_NOT_FOUND',
|
|
27
|
-
ENDPOINT_NOT_FOUND: 'ENDPOINT_NOT_FOUND',
|
|
28
|
-
// 409 Conflict errors
|
|
29
|
-
CONFLICT: 'CONFLICT',
|
|
30
|
-
RESOURCE_ALREADY_EXISTS: 'RESOURCE_ALREADY_EXISTS',
|
|
31
|
-
DUPLICATE_SESSION: 'DUPLICATE_SESSION',
|
|
32
|
-
CONCURRENT_MODIFICATION: 'CONCURRENT_MODIFICATION',
|
|
33
|
-
// 422 Unprocessable Entity errors
|
|
34
|
-
UNPROCESSABLE_ENTITY: 'UNPROCESSABLE_ENTITY',
|
|
35
|
-
UNSUPPORTED_VERIFICATION: 'UNSUPPORTED_VERIFICATION',
|
|
36
|
-
INVALID_VERIFICATION: 'INVALID_VERIFICATION',
|
|
37
|
-
VERIFICATION_FAILED: 'VERIFICATION_FAILED',
|
|
38
|
-
OTP_EXPIRED: 'OTP_EXPIRED',
|
|
39
|
-
OTP_INVALID: 'OTP_INVALID',
|
|
40
|
-
RCS_UNAVAILABLE: 'RCS_UNAVAILABLE',
|
|
41
|
-
CARRIER_IDENTIFICATION_FAILED: 'CARRIER_IDENTIFICATION_FAILED',
|
|
42
|
-
CARRIER_NOT_ELIGIBLE: 'CARRIER_NOT_ELIGIBLE',
|
|
43
|
-
UNSUPPORTED_CARRIER: 'UNSUPPORTED_CARRIER',
|
|
44
|
-
UNSUPPORTED_PLATFORM: 'UNSUPPORTED_PLATFORM',
|
|
45
|
-
UNSUPPORTED_STRATEGY: 'UNSUPPORTED_STRATEGY',
|
|
46
|
-
INVALID_SESSION_STATE: 'INVALID_SESSION_STATE',
|
|
47
|
-
PHONE_NUMBER_MISMATCH: 'PHONE_NUMBER_MISMATCH',
|
|
48
|
-
INVALID_CREDENTIAL_FORMAT: 'INVALID_CREDENTIAL_FORMAT',
|
|
49
|
-
// 429 Too Many Requests errors
|
|
50
|
-
RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',
|
|
51
|
-
TOO_MANY_REQUESTS: 'TOO_MANY_REQUESTS',
|
|
52
|
-
QUOTA_EXCEEDED: 'QUOTA_EXCEEDED',
|
|
53
|
-
// 500 Internal Server errors
|
|
54
|
-
INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',
|
|
55
|
-
CIRCUIT_BREAKER_CONFIGURATION_ERROR: 'CIRCUIT_BREAKER_CONFIGURATION_ERROR',
|
|
56
|
-
DATABASE_ERROR: 'DATABASE_ERROR',
|
|
57
|
-
CACHE_ERROR: 'CACHE_ERROR',
|
|
58
|
-
SERIALIZATION_ERROR: 'SERIALIZATION_ERROR',
|
|
59
|
-
CRYPTO_ERROR: 'CRYPTO_ERROR',
|
|
60
|
-
// 502 Bad Gateway errors
|
|
61
|
-
BAD_GATEWAY: 'BAD_GATEWAY',
|
|
62
|
-
UPSTREAM_ERROR: 'UPSTREAM_ERROR',
|
|
63
|
-
INVALID_RESPONSE: 'INVALID_RESPONSE',
|
|
64
|
-
// 503 Service Unavailable errors
|
|
65
|
-
SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',
|
|
66
|
-
DOWNSTREAM_SERVICE_ERROR: 'DOWNSTREAM_SERVICE_ERROR',
|
|
67
|
-
PROVIDER_ERROR: 'PROVIDER_ERROR',
|
|
68
|
-
CIRCUIT_BREAKER_OPEN: 'CIRCUIT_BREAKER_OPEN',
|
|
69
|
-
MAINTENANCE_MODE: 'MAINTENANCE_MODE',
|
|
70
|
-
// 504 Gateway Timeout errors
|
|
71
|
-
GATEWAY_TIMEOUT: 'GATEWAY_TIMEOUT',
|
|
72
|
-
REQUEST_TIMEOUT: 'REQUEST_TIMEOUT',
|
|
73
|
-
UPSTREAM_TIMEOUT: 'UPSTREAM_TIMEOUT',
|
|
74
|
-
DEADLINE_EXCEEDED: 'DEADLINE_EXCEEDED',
|
|
75
|
-
// Browser-specific errors (never thrown by backend)
|
|
76
|
-
BROWSER_NOT_SUPPORTED: 'BROWSER_NOT_SUPPORTED',
|
|
77
|
-
USER_DENIED: 'USER_DENIED',
|
|
78
|
-
NETWORK_ERROR: 'NETWORK_ERROR',
|
|
79
|
-
};
|
|
80
|
-
// User-facing error messages - NEVER expose carrier names or phone numbers
|
|
81
|
-
const USER_ERROR_MESSAGES = {
|
|
82
|
-
// Privacy-conscious messages - no carrier/phone info exposed
|
|
83
|
-
CARRIER_NOT_ELIGIBLE: 'Your carrier is not eligible for this verification method.',
|
|
84
|
-
CARRIER_IDENTIFICATION_FAILED: 'Unable to identify carrier for the provided phone number.',
|
|
85
|
-
CARRIER_NOT_FOUND: 'Carrier information not available.',
|
|
86
|
-
UNSUPPORTED_CARRIER: 'This carrier is not supported.',
|
|
87
|
-
// Rate limiting
|
|
88
|
-
RATE_LIMIT_EXCEEDED: 'Too many attempts. Please wait a moment and try again.',
|
|
89
|
-
TOO_MANY_REQUESTS: 'Too many requests. Please slow down and try again.',
|
|
90
|
-
QUOTA_EXCEEDED: 'Usage limit reached. Please try again later.',
|
|
91
|
-
// Session errors
|
|
92
|
-
SESSION_NOT_FOUND: 'Your session has expired. Please start over.',
|
|
93
|
-
INVALID_SESSION_STATE: 'Invalid session state. Please start over.',
|
|
94
|
-
DUPLICATE_SESSION: 'A session already exists. Please complete or cancel it first.',
|
|
95
|
-
// Browser/platform errors
|
|
96
|
-
BROWSER_NOT_SUPPORTED: 'Digital Credentials API is not available. Please enable the #web-identity-digital-credentials flag in chrome://flags',
|
|
97
|
-
UNSUPPORTED_PLATFORM: 'This platform is not supported for authentication.',
|
|
98
|
-
UNSUPPORTED_STRATEGY: 'This authentication method is not available.',
|
|
99
|
-
USER_DENIED: 'Authentication was cancelled. Please try again when you\'re ready.',
|
|
100
|
-
// Service availability
|
|
101
|
-
SERVICE_UNAVAILABLE: 'The service is temporarily unavailable. Please try again later.',
|
|
102
|
-
CIRCUIT_BREAKER_OPEN: 'Service is experiencing issues. Please try again later.',
|
|
103
|
-
MAINTENANCE_MODE: 'Service is under maintenance. Please try again later.',
|
|
104
|
-
DOWNSTREAM_SERVICE_ERROR: 'A required service is unavailable. Please try again later.',
|
|
105
|
-
// Authentication errors
|
|
106
|
-
TOKEN_ACQUISITION_FAILED: 'Failed to acquire authentication token. Please try again.',
|
|
107
|
-
EXPIRED_TOKEN: 'Your authentication has expired. Please start over.',
|
|
108
|
-
INVALID_CREDENTIALS: 'Invalid credentials provided.',
|
|
109
|
-
// Validation errors
|
|
110
|
-
INVALID_PHONE_NUMBER: 'Please enter a valid phone number.',
|
|
111
|
-
PHONE_NUMBER_MISMATCH: 'Phone number mismatch. Please verify your number.',
|
|
112
|
-
INVALID_PARAMETERS: 'Invalid parameters provided.',
|
|
113
|
-
MISSING_PARAMETERS: 'Required information is missing.',
|
|
114
|
-
VALIDATION_ERROR: 'Validation failed. Please check your input.',
|
|
115
|
-
// Network errors
|
|
116
|
-
NETWORK_ERROR: 'Network connection failed. Please check your connection and try again.',
|
|
117
|
-
GATEWAY_TIMEOUT: 'Request timed out. Please try again.',
|
|
118
|
-
REQUEST_TIMEOUT: 'Request timed out. Please try again.',
|
|
119
|
-
DEADLINE_EXCEEDED: 'Operation took too long. Please try again.',
|
|
120
|
-
// Verification errors
|
|
121
|
-
VERIFICATION_FAILED: 'Verification failed. Please try again.',
|
|
122
|
-
INVALID_VERIFICATION: 'Invalid verification response.',
|
|
123
|
-
INVALID_CREDENTIAL_FORMAT: 'Invalid credential format.',
|
|
124
|
-
// Generic fallbacks
|
|
125
|
-
BAD_REQUEST: 'Invalid request. Please try again.',
|
|
126
|
-
UNAUTHORIZED: 'Authentication required.',
|
|
127
|
-
FORBIDDEN: 'Access denied.',
|
|
128
|
-
NOT_FOUND: 'Resource not found.',
|
|
129
|
-
INTERNAL_SERVER_ERROR: 'An error occurred. Please try again later.',
|
|
130
|
-
};
|
|
131
|
-
// Errors that should be shown to users vs logged internally
|
|
132
|
-
const USER_FACING_ERRORS = new Set([
|
|
133
|
-
// Carrier errors (privacy-safe messages)
|
|
134
|
-
'CARRIER_NOT_ELIGIBLE',
|
|
135
|
-
'CARRIER_IDENTIFICATION_FAILED',
|
|
136
|
-
'CARRIER_NOT_FOUND',
|
|
137
|
-
'UNSUPPORTED_CARRIER',
|
|
138
|
-
// Rate limiting
|
|
139
|
-
'RATE_LIMIT_EXCEEDED',
|
|
140
|
-
'TOO_MANY_REQUESTS',
|
|
141
|
-
'QUOTA_EXCEEDED',
|
|
142
|
-
// Browser/platform
|
|
143
|
-
'BROWSER_NOT_SUPPORTED',
|
|
144
|
-
'UNSUPPORTED_PLATFORM',
|
|
145
|
-
'UNSUPPORTED_STRATEGY',
|
|
146
|
-
'USER_DENIED',
|
|
147
|
-
// Session
|
|
148
|
-
'SESSION_NOT_FOUND',
|
|
149
|
-
'INVALID_SESSION_STATE',
|
|
150
|
-
'EXPIRED_TOKEN',
|
|
151
|
-
// Service availability
|
|
152
|
-
'SERVICE_UNAVAILABLE',
|
|
153
|
-
'CIRCUIT_BREAKER_OPEN',
|
|
154
|
-
'MAINTENANCE_MODE',
|
|
155
|
-
// Network
|
|
156
|
-
'NETWORK_ERROR',
|
|
157
|
-
'GATEWAY_TIMEOUT',
|
|
158
|
-
'REQUEST_TIMEOUT',
|
|
159
|
-
// Validation
|
|
160
|
-
'INVALID_PHONE_NUMBER',
|
|
161
|
-
'PHONE_NUMBER_MISMATCH',
|
|
162
|
-
'MISSING_PARAMETERS',
|
|
163
|
-
'VALIDATION_ERROR',
|
|
164
|
-
]);
|
|
165
|
-
/**
|
|
166
|
-
* Type guard to check if an error is a PhoneAuthError
|
|
167
|
-
*/
|
|
168
|
-
export function isPhoneAuthError(error) {
|
|
169
|
-
return error &&
|
|
170
|
-
typeof error.code === 'string' &&
|
|
171
|
-
typeof error.message === 'string';
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Check if error should be shown to user
|
|
175
|
-
*/
|
|
176
|
-
export function isUserError(error) {
|
|
177
|
-
return USER_FACING_ERRORS.has(error.code);
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Get user-friendly error message
|
|
181
|
-
*/
|
|
182
|
-
export function getUserMessage(error) {
|
|
183
|
-
return USER_ERROR_MESSAGES[error.code] || 'An unexpected error occurred. Please try again.';
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Check if error matches a specific code
|
|
187
|
-
*/
|
|
188
|
-
export function isErrorCode(error, code) {
|
|
189
|
-
return error.code === code;
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Get retry delay for rate-limited requests
|
|
193
|
-
*/
|
|
194
|
-
export function getRetryDelay(error) {
|
|
195
|
-
if (error.code === PhoneAuthErrorCode.RATE_LIMIT_EXCEEDED && error.retryAfter) {
|
|
196
|
-
return error.retryAfter * 1000; // Convert to milliseconds
|
|
197
|
-
}
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Check if error is retryable
|
|
202
|
-
*/
|
|
203
|
-
export function isRetryableError(error) {
|
|
204
|
-
const retryableCodes = [
|
|
205
|
-
PhoneAuthErrorCode.NETWORK_ERROR,
|
|
206
|
-
PhoneAuthErrorCode.SERVICE_UNAVAILABLE,
|
|
207
|
-
PhoneAuthErrorCode.DOWNSTREAM_SERVICE_ERROR,
|
|
208
|
-
PhoneAuthErrorCode.RATE_LIMIT_EXCEEDED,
|
|
209
|
-
];
|
|
210
|
-
return retryableCodes.includes(error.code);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Parse error response from backend API
|
|
214
|
-
*/
|
|
215
|
-
export function parseBackendError(response) {
|
|
216
|
-
var _a, _b;
|
|
217
|
-
// Direct error structure from backend
|
|
218
|
-
if (response && typeof response === 'object' && (response.code || response.error)) {
|
|
219
|
-
const errorCode = response.code || response.error;
|
|
220
|
-
const error = {
|
|
221
|
-
code: errorCode,
|
|
222
|
-
message: response.message || getUserMessage({ code: errorCode }),
|
|
223
|
-
status: response.status,
|
|
224
|
-
requestId: response.requestId || response.request_id,
|
|
225
|
-
timestamp: response.timestamp,
|
|
226
|
-
details: response.details,
|
|
227
|
-
// Include trace info for observability
|
|
228
|
-
traceId: response.trace_id || response.traceId,
|
|
229
|
-
spanId: response.span_id || response.spanId,
|
|
230
|
-
service: response.service
|
|
231
|
-
};
|
|
232
|
-
// Extract retryAfter from details if present
|
|
233
|
-
if ((_a = response.details) === null || _a === void 0 ? void 0 : _a.retryAfter) {
|
|
234
|
-
error.retryAfter = response.details.retryAfter;
|
|
235
|
-
}
|
|
236
|
-
return error;
|
|
237
|
-
}
|
|
238
|
-
// Handle HTTP response with error
|
|
239
|
-
if (response && response.status) {
|
|
240
|
-
const code = mapStatusToErrorCode(response.status);
|
|
241
|
-
return {
|
|
242
|
-
code,
|
|
243
|
-
message: response.message || getUserMessage({ code }),
|
|
244
|
-
status: response.status,
|
|
245
|
-
requestId: (_b = response.headers) === null || _b === void 0 ? void 0 : _b['x-request-id']
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
// Default to unexpected error
|
|
249
|
-
return {
|
|
250
|
-
code: PhoneAuthErrorCode.INTERNAL_SERVER_ERROR,
|
|
251
|
-
message: 'An unexpected error occurred',
|
|
252
|
-
status: 500
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Map HTTP status to error code
|
|
257
|
-
*/
|
|
258
|
-
function mapStatusToErrorCode(status) {
|
|
259
|
-
switch (status) {
|
|
260
|
-
case 400: return PhoneAuthErrorCode.BAD_REQUEST;
|
|
261
|
-
case 401: return PhoneAuthErrorCode.UNAUTHORIZED;
|
|
262
|
-
case 403: return PhoneAuthErrorCode.FORBIDDEN;
|
|
263
|
-
case 404: return PhoneAuthErrorCode.NOT_FOUND;
|
|
264
|
-
case 409: return PhoneAuthErrorCode.CONFLICT;
|
|
265
|
-
case 422: return PhoneAuthErrorCode.UNPROCESSABLE_ENTITY;
|
|
266
|
-
case 429: return PhoneAuthErrorCode.RATE_LIMIT_EXCEEDED;
|
|
267
|
-
case 500: return PhoneAuthErrorCode.INTERNAL_SERVER_ERROR;
|
|
268
|
-
case 502: return PhoneAuthErrorCode.BAD_GATEWAY;
|
|
269
|
-
case 503: return PhoneAuthErrorCode.SERVICE_UNAVAILABLE;
|
|
270
|
-
case 504: return PhoneAuthErrorCode.GATEWAY_TIMEOUT;
|
|
271
|
-
default: return PhoneAuthErrorCode.INTERNAL_SERVER_ERROR;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Serialize error for logging/observability tools like Sentry
|
|
276
|
-
* This ensures all error details are captured in a format that can be sent over the network
|
|
277
|
-
*/
|
|
278
|
-
export function serializeError(error) {
|
|
279
|
-
return {
|
|
280
|
-
// Core error info
|
|
281
|
-
code: error.code,
|
|
282
|
-
message: error.message,
|
|
283
|
-
// Backend error details
|
|
284
|
-
status: error.status,
|
|
285
|
-
requestId: error.requestId,
|
|
286
|
-
timestamp: error.timestamp,
|
|
287
|
-
// Trace context for distributed tracing
|
|
288
|
-
traceId: error.traceId,
|
|
289
|
-
spanId: error.spanId,
|
|
290
|
-
service: error.service,
|
|
291
|
-
// Specific error fields
|
|
292
|
-
retryAfter: error.retryAfter,
|
|
293
|
-
// Browser error details
|
|
294
|
-
browserError: error.browserError,
|
|
295
|
-
// Context
|
|
296
|
-
context: error.context,
|
|
297
|
-
// Additional details (sanitized - no sensitive info)
|
|
298
|
-
details: sanitizeDetails(error.details),
|
|
299
|
-
// SDK metadata
|
|
300
|
-
sdkVersion: SDK_VERSION,
|
|
301
|
-
errorCapturedAt: new Date().toISOString()
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Sanitize error details to remove sensitive information
|
|
306
|
-
*/
|
|
307
|
-
function sanitizeDetails(details) {
|
|
308
|
-
if (!details || typeof details !== 'object') {
|
|
309
|
-
return details;
|
|
310
|
-
}
|
|
311
|
-
// Clone the object
|
|
312
|
-
const sanitized = JSON.parse(JSON.stringify(details));
|
|
313
|
-
// Remove sensitive fields
|
|
314
|
-
const sensitiveFields = ['carrier', 'phone_number', 'mnc', 'mcc', 'carrier_name'];
|
|
315
|
-
for (const field of sensitiveFields) {
|
|
316
|
-
delete sanitized[field];
|
|
317
|
-
}
|
|
318
|
-
return sanitized;
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Create a breadcrumb trail for error tracking
|
|
322
|
-
* Useful for understanding the sequence of events leading to an error
|
|
323
|
-
*/
|
|
324
|
-
export function createErrorBreadcrumb(error) {
|
|
325
|
-
var _a, _b, _c;
|
|
326
|
-
return {
|
|
327
|
-
category: 'phone-auth',
|
|
328
|
-
message: `Phone Auth Error: ${error.code}`,
|
|
329
|
-
level: isUserError(error) ? 'warning' : 'error',
|
|
330
|
-
data: {
|
|
331
|
-
code: error.code,
|
|
332
|
-
step: (_a = error.context) === null || _a === void 0 ? void 0 : _a.step,
|
|
333
|
-
useCase: (_b = error.context) === null || _b === void 0 ? void 0 : _b.useCase,
|
|
334
|
-
requestId: error.requestId,
|
|
335
|
-
browserErrorType: (_c = error.browserError) === null || _c === void 0 ? void 0 : _c.name
|
|
336
|
-
}
|
|
337
|
-
};
|
|
338
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { PhoneAuthClient } from './client';
|
|
2
|
-
export * from './types';
|
|
3
|
-
export { PhoneAuthErrorCode, isPhoneAuthError, isUserError, getUserMessage, isErrorCode, getRetryDelay, isRetryableError, serializeError, createErrorBreadcrumb } from './error-utils';
|
|
4
|
-
export type { PhoneAuthErrorCode as PhoneAuthErrorCodeType } from './error-utils';
|
|
5
|
-
export { validatePhoneNumber, validatePlmn, validateUseCaseRequirements } from './validation-utils';
|
|
6
|
-
export { MobileDebugConsole } from './ui/mobile-debug-console';
|
|
7
|
-
export { isExtendedResponse, isCredential, isAuthCredential, isLinkStrategy, isTS43Strategy, isDesktopStrategy, getStrategy, hasPollingControls, hasTrigger, isHeadlessResult, requiresPolling, requiresUserAction } from './type-guards';
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { PhoneAuthClient } from './client';
|
|
2
|
-
export * from './types';
|
|
3
|
-
export { PhoneAuthErrorCode, isPhoneAuthError, isUserError, getUserMessage, isErrorCode, getRetryDelay, isRetryableError, serializeError, createErrorBreadcrumb } from './error-utils';
|
|
4
|
-
export { validatePhoneNumber, validatePlmn, validateUseCaseRequirements } from './validation-utils';
|
|
5
|
-
export { MobileDebugConsole } from './ui/mobile-debug-console';
|
|
6
|
-
export { isExtendedResponse, isCredential, isAuthCredential, isLinkStrategy, isTS43Strategy, isDesktopStrategy, getStrategy, hasPollingControls, hasTrigger,
|
|
7
|
-
// Deprecated aliases
|
|
8
|
-
isHeadlessResult, requiresPolling, requiresUserAction } from './type-guards';
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Status Types for Public Status Endpoint
|
|
3
|
-
*
|
|
4
|
-
* These types define the response format for the public status endpoint
|
|
5
|
-
* Used for polling authentication status without exposing sensitive data
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Status values returned by the public endpoint (HTTP 200 only)
|
|
9
|
-
*/
|
|
10
|
-
export type AuthenticationStatus = 'pending' | 'completed';
|
|
11
|
-
/**
|
|
12
|
-
* Authentication protocol/strategy used
|
|
13
|
-
*/
|
|
14
|
-
export type AuthenticationProtocol = 'ts43' | 'link' | 'desktop';
|
|
15
|
-
/**
|
|
16
|
-
* Public Status Response (HTTP 200 OK)
|
|
17
|
-
*
|
|
18
|
-
* This response is only returned with HTTP 200 status code
|
|
19
|
-
* Failed/expired sessions return HTTP 4xx with ErrorResponse
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```typescript
|
|
23
|
-
* // Public endpoint (no auth required)
|
|
24
|
-
* const response = await fetch('/public/status/{sessionKey}');
|
|
25
|
-
*
|
|
26
|
-
* if (response.status === 200) {
|
|
27
|
-
* const status: StatusResponse = await response.json();
|
|
28
|
-
* if (status.status === 'completed') {
|
|
29
|
-
* // Authentication successful - now call process endpoint
|
|
30
|
-
* const result = await processAuthentication(sessionKey);
|
|
31
|
-
* }
|
|
32
|
-
* } else if (response.status === 410) {
|
|
33
|
-
* // Session expired
|
|
34
|
-
* } else if (response.status === 422) {
|
|
35
|
-
* // Authentication failed (user cancelled, etc.)
|
|
36
|
-
* }
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
export interface StatusResponse {
|
|
40
|
-
/**
|
|
41
|
-
* The session key/identifier
|
|
42
|
-
*/
|
|
43
|
-
session_key: string;
|
|
44
|
-
/**
|
|
45
|
-
* Current status of the authentication (only successful states)
|
|
46
|
-
*/
|
|
47
|
-
status: AuthenticationStatus;
|
|
48
|
-
/**
|
|
49
|
-
* Protocol/strategy used for authentication
|
|
50
|
-
* Optional - may not be present during pending state
|
|
51
|
-
*/
|
|
52
|
-
protocol?: AuthenticationProtocol;
|
|
53
|
-
/**
|
|
54
|
-
* ISO 8601 timestamp when session was created
|
|
55
|
-
*/
|
|
56
|
-
created_at: string;
|
|
57
|
-
/**
|
|
58
|
-
* ISO 8601 timestamp of last status update
|
|
59
|
-
*/
|
|
60
|
-
last_updated: string;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Error Response (HTTP 4xx)
|
|
64
|
-
*
|
|
65
|
-
* Returned when session is expired, failed, or not found
|
|
66
|
-
*/
|
|
67
|
-
export interface StatusErrorResponse {
|
|
68
|
-
code: 'SESSION_EXPIRED' | 'USER_CANCELLED' | 'AUTHENTICATION_FAILED' | 'SESSION_NOT_FOUND' | 'INVALID_SESSION_KEY';
|
|
69
|
-
message: string;
|
|
70
|
-
request_id: string;
|
|
71
|
-
timestamp: string;
|
|
72
|
-
details?: {
|
|
73
|
-
session_key?: string;
|
|
74
|
-
reason?: string;
|
|
75
|
-
expired_at?: string;
|
|
76
|
-
duration_seconds?: number;
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Type guard to check if authentication was successful
|
|
81
|
-
*/
|
|
82
|
-
export declare function isSuccessStatus(status: AuthenticationStatus): boolean;
|
|
83
|
-
/**
|
|
84
|
-
* Helper to determine if polling should continue based on HTTP status
|
|
85
|
-
*/
|
|
86
|
-
export declare function shouldContinuePolling(httpStatus: number, response?: StatusResponse): boolean;
|
|
87
|
-
/**
|
|
88
|
-
* Helper to determine if session is terminated based on HTTP status
|
|
89
|
-
*/
|
|
90
|
-
export declare function isTerminalHttpStatus(httpStatus: number): boolean;
|
|
91
|
-
/**
|
|
92
|
-
* Session binding types for parent-child relationships
|
|
93
|
-
*/
|
|
94
|
-
export interface SessionBinding {
|
|
95
|
-
/**
|
|
96
|
-
* Parent session ID (desktop QR code session)
|
|
97
|
-
*/
|
|
98
|
-
parent_session_id?: string;
|
|
99
|
-
/**
|
|
100
|
-
* Child session ID (mobile authentication session)
|
|
101
|
-
*/
|
|
102
|
-
child_session_id?: string;
|
|
103
|
-
/**
|
|
104
|
-
* Whether this is a parent or child session
|
|
105
|
-
*/
|
|
106
|
-
session_type?: 'parent' | 'child';
|
|
107
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Status Types for Public Status Endpoint
|
|
3
|
-
*
|
|
4
|
-
* These types define the response format for the public status endpoint
|
|
5
|
-
* Used for polling authentication status without exposing sensitive data
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Type guard to check if authentication was successful
|
|
9
|
-
*/
|
|
10
|
-
export function isSuccessStatus(status) {
|
|
11
|
-
return status === 'completed';
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Helper to determine if polling should continue based on HTTP status
|
|
15
|
-
*/
|
|
16
|
-
export function shouldContinuePolling(httpStatus, response) {
|
|
17
|
-
// Only continue if HTTP 200 and status is pending
|
|
18
|
-
return httpStatus === 200 && (response === null || response === void 0 ? void 0 : response.status) === 'pending';
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Helper to determine if session is terminated based on HTTP status
|
|
22
|
-
*/
|
|
23
|
-
export function isTerminalHttpStatus(httpStatus) {
|
|
24
|
-
// 410 Gone (expired), 422 Unprocessable (failed), 404 Not Found
|
|
25
|
-
return httpStatus === 410 || httpStatus === 422 || httpStatus === 404;
|
|
26
|
-
}
|