@glideidentity/web-client-sdk 5.1.2 → 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.
Files changed (203) hide show
  1. package/README.md +337 -526
  2. package/dist/browser/web-client-sdk.min.js +1 -1
  3. package/dist/cjs/adapters/index.js +15 -0
  4. package/dist/cjs/adapters/react.js +192 -0
  5. package/dist/cjs/adapters/vanilla.js +38 -0
  6. package/dist/cjs/adapters/vue.js +187 -0
  7. package/dist/cjs/browser.js +58 -0
  8. package/dist/cjs/client/http.js +159 -0
  9. package/dist/cjs/client/index.js +19 -0
  10. package/dist/cjs/client/logger.js +135 -0
  11. package/dist/cjs/client/phone-auth-client.js +439 -0
  12. package/dist/cjs/client/strategies/polling.js +177 -0
  13. package/dist/cjs/core/errors.js +204 -0
  14. package/dist/cjs/core/index.js +83 -0
  15. package/dist/cjs/core/type-guards.js +196 -0
  16. package/dist/cjs/core/types.js +25 -0
  17. package/dist/{core/phone-auth/validation-utils.js → cjs/core/validators.js} +70 -23
  18. package/dist/cjs/index.js +81 -0
  19. package/dist/cjs/ui/index.js +11 -0
  20. package/dist/{core/phone-auth → cjs}/ui/mobile-debug-console.js +149 -78
  21. package/dist/cjs/ui/modal.js +1122 -0
  22. package/dist/esm/adapters/index.js +11 -0
  23. package/dist/esm/adapters/react.js +182 -0
  24. package/dist/esm/adapters/vanilla.js +29 -0
  25. package/dist/esm/adapters/vue.js +177 -0
  26. package/dist/esm/browser.js +30 -11
  27. package/dist/esm/client/http.js +156 -0
  28. package/dist/esm/client/index.js +11 -0
  29. package/dist/esm/client/logger.js +131 -0
  30. package/dist/esm/client/phone-auth-client.js +435 -0
  31. package/dist/esm/client/strategies/polling.js +174 -0
  32. package/dist/esm/core/errors.js +193 -0
  33. package/dist/esm/core/index.js +60 -0
  34. package/dist/esm/core/type-guards.js +181 -0
  35. package/dist/esm/core/types.js +22 -1
  36. package/dist/esm/core/{phone-auth/validation-utils.js → validators.js} +66 -21
  37. package/dist/esm/index.js +45 -17
  38. package/dist/esm/ui/index.js +5 -0
  39. package/dist/esm/{core/phone-auth/ui → ui}/mobile-debug-console.js +149 -78
  40. package/dist/esm/ui/modal.js +1117 -0
  41. package/dist/types/adapters/index.d.ts +10 -0
  42. package/dist/types/adapters/index.d.ts.map +1 -0
  43. package/dist/types/adapters/react.d.ts +70 -0
  44. package/dist/types/adapters/react.d.ts.map +1 -0
  45. package/dist/types/adapters/vanilla.d.ts +29 -0
  46. package/dist/types/adapters/vanilla.d.ts.map +1 -0
  47. package/dist/types/adapters/vue.d.ts +71 -0
  48. package/dist/types/adapters/vue.d.ts.map +1 -0
  49. package/dist/types/browser.d.ts +27 -0
  50. package/dist/types/browser.d.ts.map +1 -0
  51. package/dist/types/client/http.d.ts +41 -0
  52. package/dist/types/client/http.d.ts.map +1 -0
  53. package/dist/types/client/index.d.ts +10 -0
  54. package/dist/types/client/index.d.ts.map +1 -0
  55. package/dist/types/client/logger.d.ts +36 -0
  56. package/dist/types/client/logger.d.ts.map +1 -0
  57. package/dist/types/client/phone-auth-client.d.ts +91 -0
  58. package/dist/types/client/phone-auth-client.d.ts.map +1 -0
  59. package/dist/types/client/strategies/polling.d.ts +36 -0
  60. package/dist/types/client/strategies/polling.d.ts.map +1 -0
  61. package/dist/types/core/errors.d.ts +71 -0
  62. package/dist/types/core/errors.d.ts.map +1 -0
  63. package/dist/types/core/index.d.ts +38 -0
  64. package/dist/types/core/index.d.ts.map +1 -0
  65. package/dist/types/core/type-guards.d.ts +118 -0
  66. package/dist/types/core/type-guards.d.ts.map +1 -0
  67. package/dist/types/core/types.d.ts +534 -0
  68. package/dist/types/core/types.d.ts.map +1 -0
  69. package/dist/types/core/validators.d.ts +63 -0
  70. package/dist/types/core/validators.d.ts.map +1 -0
  71. package/dist/types/index.d.ts +40 -0
  72. package/dist/types/index.d.ts.map +1 -0
  73. package/dist/types/ui/index.d.ts +6 -0
  74. package/dist/types/ui/index.d.ts.map +1 -0
  75. package/dist/{esm/core/phone-auth → types}/ui/mobile-debug-console.d.ts +1 -0
  76. package/dist/types/ui/mobile-debug-console.d.ts.map +1 -0
  77. package/dist/types/ui/modal.d.ts +87 -0
  78. package/dist/types/ui/modal.d.ts.map +1 -0
  79. package/package.json +48 -34
  80. package/dist/adapters/angular/client.service.d.ts +0 -7
  81. package/dist/adapters/angular/client.service.js +0 -30
  82. package/dist/adapters/angular/index.d.ts +0 -3
  83. package/dist/adapters/angular/index.js +0 -18
  84. package/dist/adapters/angular/phone-auth.service.d.ts +0 -38
  85. package/dist/adapters/angular/phone-auth.service.js +0 -130
  86. package/dist/adapters/react/index.d.ts +0 -9
  87. package/dist/adapters/react/index.js +0 -28
  88. package/dist/adapters/react/useClient.d.ts +0 -26
  89. package/dist/adapters/react/useClient.js +0 -121
  90. package/dist/adapters/react/usePhoneAuth.d.ts +0 -23
  91. package/dist/adapters/react/usePhoneAuth.js +0 -95
  92. package/dist/adapters/vanilla/client.d.ts +0 -8
  93. package/dist/adapters/vanilla/client.js +0 -33
  94. package/dist/adapters/vanilla/index.d.ts +0 -3
  95. package/dist/adapters/vanilla/index.js +0 -18
  96. package/dist/adapters/vanilla/phone-auth.d.ts +0 -46
  97. package/dist/adapters/vanilla/phone-auth.js +0 -138
  98. package/dist/adapters/vue/index.d.ts +0 -10
  99. package/dist/adapters/vue/index.js +0 -36
  100. package/dist/adapters/vue/useClient.d.ts +0 -115
  101. package/dist/adapters/vue/useClient.js +0 -131
  102. package/dist/adapters/vue/usePhoneAuth.d.ts +0 -94
  103. package/dist/adapters/vue/usePhoneAuth.js +0 -103
  104. package/dist/browser.d.ts +0 -7
  105. package/dist/browser.js +0 -31
  106. package/dist/core/client.d.ts +0 -22
  107. package/dist/core/client.js +0 -77
  108. package/dist/core/logger.d.ts +0 -130
  109. package/dist/core/logger.js +0 -370
  110. package/dist/core/phone-auth/api-types.d.ts +0 -593
  111. package/dist/core/phone-auth/api-types.js +0 -215
  112. package/dist/core/phone-auth/client.d.ts +0 -189
  113. package/dist/core/phone-auth/client.js +0 -1441
  114. package/dist/core/phone-auth/error-utils.d.ts +0 -110
  115. package/dist/core/phone-auth/error-utils.js +0 -350
  116. package/dist/core/phone-auth/index.d.ts +0 -7
  117. package/dist/core/phone-auth/index.js +0 -50
  118. package/dist/core/phone-auth/status-types.d.ts +0 -107
  119. package/dist/core/phone-auth/status-types.js +0 -31
  120. package/dist/core/phone-auth/strategies/desktop.d.ts +0 -122
  121. package/dist/core/phone-auth/strategies/desktop.js +0 -596
  122. package/dist/core/phone-auth/strategies/index.d.ts +0 -11
  123. package/dist/core/phone-auth/strategies/index.js +0 -15
  124. package/dist/core/phone-auth/strategies/link.d.ts +0 -89
  125. package/dist/core/phone-auth/strategies/link.js +0 -384
  126. package/dist/core/phone-auth/strategies/ts43.d.ts +0 -32
  127. package/dist/core/phone-auth/strategies/ts43.js +0 -151
  128. package/dist/core/phone-auth/strategies/types.d.ts +0 -18
  129. package/dist/core/phone-auth/strategies/types.js +0 -6
  130. package/dist/core/phone-auth/type-guards.d.ts +0 -143
  131. package/dist/core/phone-auth/type-guards.js +0 -198
  132. package/dist/core/phone-auth/types.d.ts +0 -237
  133. package/dist/core/phone-auth/types.js +0 -93
  134. package/dist/core/phone-auth/ui/mobile-debug-console.d.ts +0 -25
  135. package/dist/core/phone-auth/ui/modal.d.ts +0 -88
  136. package/dist/core/phone-auth/ui/modal.js +0 -598
  137. package/dist/core/phone-auth/validation-utils.d.ts +0 -44
  138. package/dist/core/types.d.ts +0 -62
  139. package/dist/core/types.js +0 -2
  140. package/dist/core/version.d.ts +0 -1
  141. package/dist/core/version.js +0 -5
  142. package/dist/esm/adapters/angular/client.service.d.ts +0 -7
  143. package/dist/esm/adapters/angular/client.service.js +0 -27
  144. package/dist/esm/adapters/angular/index.d.ts +0 -3
  145. package/dist/esm/adapters/angular/index.js +0 -4
  146. package/dist/esm/adapters/angular/phone-auth.service.d.ts +0 -38
  147. package/dist/esm/adapters/angular/phone-auth.service.js +0 -127
  148. package/dist/esm/adapters/react/index.d.ts +0 -9
  149. package/dist/esm/adapters/react/index.js +0 -8
  150. package/dist/esm/adapters/react/useClient.d.ts +0 -26
  151. package/dist/esm/adapters/react/useClient.js +0 -116
  152. package/dist/esm/adapters/react/usePhoneAuth.d.ts +0 -23
  153. package/dist/esm/adapters/react/usePhoneAuth.js +0 -92
  154. package/dist/esm/adapters/vanilla/client.d.ts +0 -8
  155. package/dist/esm/adapters/vanilla/client.js +0 -29
  156. package/dist/esm/adapters/vanilla/index.d.ts +0 -3
  157. package/dist/esm/adapters/vanilla/index.js +0 -4
  158. package/dist/esm/adapters/vanilla/phone-auth.d.ts +0 -46
  159. package/dist/esm/adapters/vanilla/phone-auth.js +0 -134
  160. package/dist/esm/adapters/vue/index.d.ts +0 -10
  161. package/dist/esm/adapters/vue/index.js +0 -11
  162. package/dist/esm/adapters/vue/useClient.d.ts +0 -115
  163. package/dist/esm/adapters/vue/useClient.js +0 -127
  164. package/dist/esm/adapters/vue/usePhoneAuth.d.ts +0 -94
  165. package/dist/esm/adapters/vue/usePhoneAuth.js +0 -100
  166. package/dist/esm/browser.d.ts +0 -7
  167. package/dist/esm/core/client.d.ts +0 -22
  168. package/dist/esm/core/client.js +0 -70
  169. package/dist/esm/core/logger.d.ts +0 -130
  170. package/dist/esm/core/logger.js +0 -359
  171. package/dist/esm/core/phone-auth/api-types.d.ts +0 -593
  172. package/dist/esm/core/phone-auth/api-types.js +0 -203
  173. package/dist/esm/core/phone-auth/client.d.ts +0 -189
  174. package/dist/esm/core/phone-auth/client.js +0 -1404
  175. package/dist/esm/core/phone-auth/error-utils.d.ts +0 -110
  176. package/dist/esm/core/phone-auth/error-utils.js +0 -338
  177. package/dist/esm/core/phone-auth/index.d.ts +0 -7
  178. package/dist/esm/core/phone-auth/index.js +0 -8
  179. package/dist/esm/core/phone-auth/status-types.d.ts +0 -107
  180. package/dist/esm/core/phone-auth/status-types.js +0 -26
  181. package/dist/esm/core/phone-auth/strategies/desktop.d.ts +0 -122
  182. package/dist/esm/core/phone-auth/strategies/desktop.js +0 -590
  183. package/dist/esm/core/phone-auth/strategies/index.d.ts +0 -11
  184. package/dist/esm/core/phone-auth/strategies/index.js +0 -7
  185. package/dist/esm/core/phone-auth/strategies/link.d.ts +0 -89
  186. package/dist/esm/core/phone-auth/strategies/link.js +0 -380
  187. package/dist/esm/core/phone-auth/strategies/ts43.d.ts +0 -32
  188. package/dist/esm/core/phone-auth/strategies/ts43.js +0 -147
  189. package/dist/esm/core/phone-auth/strategies/types.d.ts +0 -18
  190. package/dist/esm/core/phone-auth/strategies/types.js +0 -5
  191. package/dist/esm/core/phone-auth/type-guards.d.ts +0 -143
  192. package/dist/esm/core/phone-auth/type-guards.js +0 -185
  193. package/dist/esm/core/phone-auth/types.d.ts +0 -237
  194. package/dist/esm/core/phone-auth/types.js +0 -76
  195. package/dist/esm/core/phone-auth/ui/modal.d.ts +0 -88
  196. package/dist/esm/core/phone-auth/ui/modal.js +0 -594
  197. package/dist/esm/core/phone-auth/validation-utils.d.ts +0 -44
  198. package/dist/esm/core/types.d.ts +0 -62
  199. package/dist/esm/core/version.d.ts +0 -1
  200. package/dist/esm/core/version.js +0 -2
  201. package/dist/esm/index.d.ts +0 -12
  202. package/dist/index.d.ts +0 -12
  203. package/dist/index.js +0 -55
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /**
3
+ * React Adapter for Phone Authentication SDK.
4
+ *
5
+ * Provides a React hook that wraps PhoneAuthClient with React state management.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { usePhoneAuth } from '@glideidentity/web-client-sdk/react';
10
+ *
11
+ * function AuthButton() {
12
+ * const { authenticate, isLoading, error, result } = usePhoneAuth({ debug: true });
13
+ *
14
+ * const handleClick = async () => {
15
+ * try {
16
+ * const result = await authenticate({
17
+ * use_case: 'VerifyPhoneNumber',
18
+ * phone_number: '+14155551234'
19
+ * });
20
+ * console.log('Verified:', result.verified);
21
+ * } catch (err) {
22
+ * // Error is also in `error` state
23
+ * }
24
+ * };
25
+ *
26
+ * return (
27
+ * <button onClick={handleClick} disabled={isLoading}>
28
+ * {isLoading ? 'Verifying...' : 'Verify Phone'}
29
+ * </button>
30
+ * );
31
+ * }
32
+ * ```
33
+ */
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.createAuthError = exports.isAuthError = exports.ERROR_CODES = exports.AUTHENTICATION_STRATEGY = exports.USE_CASE = exports.PhoneAuthClient = void 0;
36
+ exports.usePhoneAuth = usePhoneAuth;
37
+ const react_1 = require("react");
38
+ const phone_auth_client_1 = require("../client/phone-auth-client");
39
+ // Re-export PhoneAuthClient and core types/constants for convenience
40
+ var phone_auth_client_2 = require("../client/phone-auth-client");
41
+ Object.defineProperty(exports, "PhoneAuthClient", { enumerable: true, get: function () { return phone_auth_client_2.PhoneAuthClient; } });
42
+ var types_1 = require("../core/types");
43
+ Object.defineProperty(exports, "USE_CASE", { enumerable: true, get: function () { return types_1.USE_CASE; } });
44
+ Object.defineProperty(exports, "AUTHENTICATION_STRATEGY", { enumerable: true, get: function () { return types_1.AUTHENTICATION_STRATEGY; } });
45
+ var errors_1 = require("../core/errors");
46
+ Object.defineProperty(exports, "ERROR_CODES", { enumerable: true, get: function () { return errors_1.ERROR_CODES; } });
47
+ Object.defineProperty(exports, "isAuthError", { enumerable: true, get: function () { return errors_1.isAuthError; } });
48
+ Object.defineProperty(exports, "createAuthError", { enumerable: true, get: function () { return errors_1.createAuthError; } });
49
+ // ============================================================================
50
+ // HOOK
51
+ // ============================================================================
52
+ /**
53
+ * React hook for phone authentication.
54
+ */
55
+ function usePhoneAuth(config) {
56
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
57
+ const [error, setError] = (0, react_1.useState)(null);
58
+ const [result, setResult] = (0, react_1.useState)(null);
59
+ const [step, setStep] = (0, react_1.useState)('idle');
60
+ // Memoize client - recreate if config changes
61
+ // Using JSON.stringify for stable comparison of config object
62
+ const configKey = JSON.stringify(config);
63
+ const client = (0, react_1.useMemo)(() => new phone_auth_client_1.PhoneAuthClient(config), [configKey]);
64
+ const isSupported = (0, react_1.useMemo)(() => client.isSupported(), [client]);
65
+ /**
66
+ * High-level authentication.
67
+ */
68
+ const authenticate = (0, react_1.useCallback)(async (request, options) => {
69
+ setIsLoading(true);
70
+ setError(null);
71
+ setStep('preparing');
72
+ try {
73
+ const authResult = await client.authenticate(request, options);
74
+ setResult(authResult);
75
+ setStep('complete');
76
+ return authResult;
77
+ }
78
+ catch (err) {
79
+ const authError = err;
80
+ setError(authError);
81
+ setStep('error');
82
+ throw err;
83
+ }
84
+ finally {
85
+ setIsLoading(false);
86
+ }
87
+ }, [client]);
88
+ /**
89
+ * Granular: Prepare.
90
+ */
91
+ const prepare = (0, react_1.useCallback)(async (request) => {
92
+ setIsLoading(true);
93
+ setError(null);
94
+ setStep('preparing');
95
+ try {
96
+ const result = await client.prepare(request);
97
+ setStep('idle'); // Reset step on success (prepare is just first step)
98
+ return result;
99
+ }
100
+ catch (err) {
101
+ const authError = err;
102
+ setError(authError);
103
+ setStep('error');
104
+ throw err;
105
+ }
106
+ finally {
107
+ setIsLoading(false);
108
+ }
109
+ }, [client]);
110
+ /**
111
+ * Granular: Invoke.
112
+ */
113
+ const invokeSecurePrompt = (0, react_1.useCallback)(async (prepared, options) => {
114
+ setStep('invoking');
115
+ try {
116
+ return await client.invokeSecurePrompt(prepared, options);
117
+ }
118
+ catch (err) {
119
+ const authError = err;
120
+ setError(authError);
121
+ setStep('error');
122
+ throw err;
123
+ }
124
+ }, [client]);
125
+ /**
126
+ * Granular: Get phone number.
127
+ */
128
+ const getPhoneNumber = (0, react_1.useCallback)(async (credential, session) => {
129
+ setIsLoading(true);
130
+ setStep('processing');
131
+ try {
132
+ const authResult = await client.getPhoneNumber(credential, session);
133
+ setResult(authResult);
134
+ setStep('complete');
135
+ return authResult;
136
+ }
137
+ catch (err) {
138
+ const authError = err;
139
+ setError(authError);
140
+ setStep('error');
141
+ throw err;
142
+ }
143
+ finally {
144
+ setIsLoading(false);
145
+ }
146
+ }, [client]);
147
+ /**
148
+ * Granular: Verify phone number.
149
+ */
150
+ const verifyPhoneNumber = (0, react_1.useCallback)(async (credential, session) => {
151
+ setIsLoading(true);
152
+ setStep('processing');
153
+ try {
154
+ const authResult = await client.verifyPhoneNumber(credential, session);
155
+ setResult(authResult);
156
+ setStep('complete');
157
+ return authResult;
158
+ }
159
+ catch (err) {
160
+ const authError = err;
161
+ setError(authError);
162
+ setStep('error');
163
+ throw err;
164
+ }
165
+ finally {
166
+ setIsLoading(false);
167
+ }
168
+ }, [client]);
169
+ /**
170
+ * Reset state.
171
+ */
172
+ const reset = (0, react_1.useCallback)(() => {
173
+ setIsLoading(false);
174
+ setError(null);
175
+ setResult(null);
176
+ setStep('idle');
177
+ }, []);
178
+ return {
179
+ isLoading,
180
+ error,
181
+ result,
182
+ step,
183
+ isSupported,
184
+ authenticate,
185
+ prepare,
186
+ invokeSecurePrompt,
187
+ getPhoneNumber,
188
+ verifyPhoneNumber,
189
+ reset,
190
+ client,
191
+ };
192
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * Vanilla JavaScript Adapter for Phone Authentication SDK.
4
+ *
5
+ * Simply re-exports the PhoneAuthClient for use without a framework.
6
+ *
7
+ * @example
8
+ * ```javascript
9
+ * import { PhoneAuthClient } from '@glideidentity/web-client-sdk/vanilla';
10
+ *
11
+ * const client = new PhoneAuthClient({ debug: true });
12
+ *
13
+ * document.getElementById('auth-btn').addEventListener('click', async () => {
14
+ * try {
15
+ * const result = await client.authenticate({
16
+ * use_case: 'VerifyPhoneNumber',
17
+ * phone_number: '+14155551234'
18
+ * });
19
+ * console.log('Verified:', result.verified);
20
+ * } catch (error) {
21
+ * console.error('Auth failed:', error);
22
+ * }
23
+ * });
24
+ * ```
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.createAuthError = exports.isAuthError = exports.ERROR_CODES = exports.AUTHENTICATION_STRATEGY = exports.USE_CASE = exports.PhoneAuthClient = void 0;
28
+ // Re-export everything from client
29
+ var phone_auth_client_1 = require("../client/phone-auth-client");
30
+ Object.defineProperty(exports, "PhoneAuthClient", { enumerable: true, get: function () { return phone_auth_client_1.PhoneAuthClient; } });
31
+ // Re-export constants
32
+ var types_1 = require("../core/types");
33
+ Object.defineProperty(exports, "USE_CASE", { enumerable: true, get: function () { return types_1.USE_CASE; } });
34
+ Object.defineProperty(exports, "AUTHENTICATION_STRATEGY", { enumerable: true, get: function () { return types_1.AUTHENTICATION_STRATEGY; } });
35
+ var errors_1 = require("../core/errors");
36
+ Object.defineProperty(exports, "ERROR_CODES", { enumerable: true, get: function () { return errors_1.ERROR_CODES; } });
37
+ Object.defineProperty(exports, "isAuthError", { enumerable: true, get: function () { return errors_1.isAuthError; } });
38
+ Object.defineProperty(exports, "createAuthError", { enumerable: true, get: function () { return errors_1.createAuthError; } });
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * Vue Adapter for Phone Authentication SDK.
4
+ *
5
+ * Provides a Vue composable that wraps PhoneAuthClient with Vue reactivity.
6
+ *
7
+ * @example
8
+ * ```vue
9
+ * <script setup>
10
+ * import { usePhoneAuth } from '@glideidentity/web-client-sdk/vue';
11
+ *
12
+ * const { authenticate, isLoading, error, result } = usePhoneAuth({ debug: true });
13
+ *
14
+ * const handleClick = async () => {
15
+ * try {
16
+ * const result = await authenticate({
17
+ * use_case: 'VerifyPhoneNumber',
18
+ * phone_number: '+14155551234'
19
+ * });
20
+ * console.log('Verified:', result.verified);
21
+ * } catch (err) {
22
+ * // Error is also in `error` ref
23
+ * }
24
+ * };
25
+ * </script>
26
+ *
27
+ * <template>
28
+ * <button @click="handleClick" :disabled="isLoading">
29
+ * {{ isLoading ? 'Verifying...' : 'Verify Phone' }}
30
+ * </button>
31
+ * </template>
32
+ * ```
33
+ */
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.createAuthError = exports.isAuthError = exports.ERROR_CODES = exports.AUTHENTICATION_STRATEGY = exports.USE_CASE = exports.PhoneAuthClient = void 0;
36
+ exports.usePhoneAuth = usePhoneAuth;
37
+ const vue_1 = require("vue");
38
+ const phone_auth_client_1 = require("../client/phone-auth-client");
39
+ // Re-export PhoneAuthClient and core types/constants for convenience
40
+ var phone_auth_client_2 = require("../client/phone-auth-client");
41
+ Object.defineProperty(exports, "PhoneAuthClient", { enumerable: true, get: function () { return phone_auth_client_2.PhoneAuthClient; } });
42
+ var types_1 = require("../core/types");
43
+ Object.defineProperty(exports, "USE_CASE", { enumerable: true, get: function () { return types_1.USE_CASE; } });
44
+ Object.defineProperty(exports, "AUTHENTICATION_STRATEGY", { enumerable: true, get: function () { return types_1.AUTHENTICATION_STRATEGY; } });
45
+ var errors_1 = require("../core/errors");
46
+ Object.defineProperty(exports, "ERROR_CODES", { enumerable: true, get: function () { return errors_1.ERROR_CODES; } });
47
+ Object.defineProperty(exports, "isAuthError", { enumerable: true, get: function () { return errors_1.isAuthError; } });
48
+ Object.defineProperty(exports, "createAuthError", { enumerable: true, get: function () { return errors_1.createAuthError; } });
49
+ // ============================================================================
50
+ // COMPOSABLE
51
+ // ============================================================================
52
+ /**
53
+ * Vue composable for phone authentication.
54
+ */
55
+ function usePhoneAuth(config) {
56
+ // Create client once
57
+ const client = new phone_auth_client_1.PhoneAuthClient(config);
58
+ // Reactive state
59
+ const isLoading = (0, vue_1.ref)(false);
60
+ const error = (0, vue_1.ref)(null);
61
+ const result = (0, vue_1.ref)(null);
62
+ const step = (0, vue_1.ref)('idle');
63
+ // Computed
64
+ const isSupported = (0, vue_1.computed)(() => client.isSupported());
65
+ /**
66
+ * High-level authentication.
67
+ */
68
+ async function authenticate(request, options) {
69
+ isLoading.value = true;
70
+ error.value = null;
71
+ step.value = 'preparing';
72
+ try {
73
+ const authResult = await client.authenticate(request, options);
74
+ result.value = authResult;
75
+ step.value = 'complete';
76
+ return authResult;
77
+ }
78
+ catch (err) {
79
+ error.value = err;
80
+ step.value = 'error';
81
+ throw err;
82
+ }
83
+ finally {
84
+ isLoading.value = false;
85
+ }
86
+ }
87
+ /**
88
+ * Granular: Prepare.
89
+ */
90
+ async function prepare(request) {
91
+ isLoading.value = true;
92
+ error.value = null;
93
+ step.value = 'preparing';
94
+ try {
95
+ const result = await client.prepare(request);
96
+ step.value = 'idle'; // Reset step on success (prepare is just first step)
97
+ return result;
98
+ }
99
+ catch (err) {
100
+ error.value = err;
101
+ step.value = 'error';
102
+ throw err;
103
+ }
104
+ finally {
105
+ isLoading.value = false;
106
+ }
107
+ }
108
+ /**
109
+ * Granular: Invoke.
110
+ */
111
+ async function invokeSecurePrompt(prepared, options) {
112
+ step.value = 'invoking';
113
+ try {
114
+ return await client.invokeSecurePrompt(prepared, options);
115
+ }
116
+ catch (err) {
117
+ error.value = err;
118
+ step.value = 'error';
119
+ throw err;
120
+ }
121
+ }
122
+ /**
123
+ * Granular: Get phone number.
124
+ */
125
+ async function getPhoneNumber(credential, session) {
126
+ isLoading.value = true;
127
+ step.value = 'processing';
128
+ try {
129
+ const authResult = await client.getPhoneNumber(credential, session);
130
+ result.value = authResult;
131
+ step.value = 'complete';
132
+ return authResult;
133
+ }
134
+ catch (err) {
135
+ error.value = err;
136
+ step.value = 'error';
137
+ throw err;
138
+ }
139
+ finally {
140
+ isLoading.value = false;
141
+ }
142
+ }
143
+ /**
144
+ * Granular: Verify phone number.
145
+ */
146
+ async function verifyPhoneNumber(credential, session) {
147
+ isLoading.value = true;
148
+ step.value = 'processing';
149
+ try {
150
+ const authResult = await client.verifyPhoneNumber(credential, session);
151
+ result.value = authResult;
152
+ step.value = 'complete';
153
+ return authResult;
154
+ }
155
+ catch (err) {
156
+ error.value = err;
157
+ step.value = 'error';
158
+ throw err;
159
+ }
160
+ finally {
161
+ isLoading.value = false;
162
+ }
163
+ }
164
+ /**
165
+ * Reset state.
166
+ */
167
+ function reset() {
168
+ isLoading.value = false;
169
+ error.value = null;
170
+ result.value = null;
171
+ step.value = 'idle';
172
+ }
173
+ return {
174
+ isLoading,
175
+ error,
176
+ result,
177
+ step,
178
+ isSupported,
179
+ authenticate,
180
+ prepare,
181
+ invokeSecurePrompt,
182
+ getPhoneNumber,
183
+ verifyPhoneNumber,
184
+ reset,
185
+ client,
186
+ };
187
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * Browser-specific entry point for vanilla JavaScript usage.
4
+ * This is bundled via webpack and exposed as `window.GlideWebClientSDK`.
5
+ *
6
+ * @example
7
+ * ```html
8
+ * <script src="/sdk/web-client-sdk.min.js"></script>
9
+ * <script>
10
+ * const client = new GlideWebClientSDK.PhoneAuthClient({ debug: true });
11
+ * const result = await client.authenticate({
12
+ * use_case: GlideWebClientSDK.USE_CASE.VERIFY_PHONE_NUMBER,
13
+ * phone_number: '+14155551234'
14
+ * });
15
+ * </script>
16
+ * ```
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.createQRCodeDataFromDesktop = exports.AuthModal = exports.validatePlmn = exports.validatePhoneNumber = exports.createAuthError = exports.getUserMessage = exports.isRetryableError = exports.isClientError = exports.isAuthError = exports.isErrorResponse = exports.isVerifyPhoneNumberResponse = exports.isGetPhoneNumberResponse = exports.isDesktopData = exports.isLinkData = exports.isTS43Data = exports.isCancellable = exports.isDesktopStrategy = exports.isLinkStrategy = exports.isTS43Strategy = exports.isAuthCredential = exports.isInvokeResult = exports.ERROR_CODES = exports.AUTHENTICATION_STRATEGY = exports.USE_CASE = exports.PhoneAuthClient = void 0;
20
+ // Main client
21
+ var phone_auth_client_1 = require("./client/phone-auth-client");
22
+ Object.defineProperty(exports, "PhoneAuthClient", { enumerable: true, get: function () { return phone_auth_client_1.PhoneAuthClient; } });
23
+ // Constants
24
+ var types_1 = require("./core/types");
25
+ Object.defineProperty(exports, "USE_CASE", { enumerable: true, get: function () { return types_1.USE_CASE; } });
26
+ Object.defineProperty(exports, "AUTHENTICATION_STRATEGY", { enumerable: true, get: function () { return types_1.AUTHENTICATION_STRATEGY; } });
27
+ // Error codes
28
+ var errors_1 = require("./core/errors");
29
+ Object.defineProperty(exports, "ERROR_CODES", { enumerable: true, get: function () { return errors_1.ERROR_CODES; } });
30
+ // Type guards
31
+ var type_guards_1 = require("./core/type-guards");
32
+ Object.defineProperty(exports, "isInvokeResult", { enumerable: true, get: function () { return type_guards_1.isInvokeResult; } });
33
+ Object.defineProperty(exports, "isAuthCredential", { enumerable: true, get: function () { return type_guards_1.isAuthCredential; } });
34
+ Object.defineProperty(exports, "isTS43Strategy", { enumerable: true, get: function () { return type_guards_1.isTS43Strategy; } });
35
+ Object.defineProperty(exports, "isLinkStrategy", { enumerable: true, get: function () { return type_guards_1.isLinkStrategy; } });
36
+ Object.defineProperty(exports, "isDesktopStrategy", { enumerable: true, get: function () { return type_guards_1.isDesktopStrategy; } });
37
+ Object.defineProperty(exports, "isCancellable", { enumerable: true, get: function () { return type_guards_1.isCancellable; } });
38
+ Object.defineProperty(exports, "isTS43Data", { enumerable: true, get: function () { return type_guards_1.isTS43Data; } });
39
+ Object.defineProperty(exports, "isLinkData", { enumerable: true, get: function () { return type_guards_1.isLinkData; } });
40
+ Object.defineProperty(exports, "isDesktopData", { enumerable: true, get: function () { return type_guards_1.isDesktopData; } });
41
+ Object.defineProperty(exports, "isGetPhoneNumberResponse", { enumerable: true, get: function () { return type_guards_1.isGetPhoneNumberResponse; } });
42
+ Object.defineProperty(exports, "isVerifyPhoneNumberResponse", { enumerable: true, get: function () { return type_guards_1.isVerifyPhoneNumberResponse; } });
43
+ Object.defineProperty(exports, "isErrorResponse", { enumerable: true, get: function () { return type_guards_1.isErrorResponse; } });
44
+ // Error utilities
45
+ var errors_2 = require("./core/errors");
46
+ Object.defineProperty(exports, "isAuthError", { enumerable: true, get: function () { return errors_2.isAuthError; } });
47
+ Object.defineProperty(exports, "isClientError", { enumerable: true, get: function () { return errors_2.isClientError; } });
48
+ Object.defineProperty(exports, "isRetryableError", { enumerable: true, get: function () { return errors_2.isRetryableError; } });
49
+ Object.defineProperty(exports, "getUserMessage", { enumerable: true, get: function () { return errors_2.getUserMessage; } });
50
+ Object.defineProperty(exports, "createAuthError", { enumerable: true, get: function () { return errors_2.createAuthError; } });
51
+ // Validators
52
+ var validators_1 = require("./core/validators");
53
+ Object.defineProperty(exports, "validatePhoneNumber", { enumerable: true, get: function () { return validators_1.validatePhoneNumber; } });
54
+ Object.defineProperty(exports, "validatePlmn", { enumerable: true, get: function () { return validators_1.validatePlmn; } });
55
+ // UI components
56
+ var modal_1 = require("./ui/modal");
57
+ Object.defineProperty(exports, "AuthModal", { enumerable: true, get: function () { return modal_1.AuthModal; } });
58
+ Object.defineProperty(exports, "createQRCodeDataFromDesktop", { enumerable: true, get: function () { return modal_1.createQRCodeDataFromDesktop; } });
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ /**
3
+ * HTTP Client for Phone Authentication SDK.
4
+ *
5
+ * Provides a default fetch-based implementation with:
6
+ * - Timeout support
7
+ * - Static and dynamic headers
8
+ * - Error parsing using Core utilities
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.createHttpClient = createHttpClient;
12
+ const errors_1 = require("../core/errors");
13
+ // ============================================================================
14
+ // DEFAULT HTTP CLIENT
15
+ // ============================================================================
16
+ /**
17
+ * Create a default fetch-based HTTP client.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const http = createHttpClient({
22
+ * timeout: 30000,
23
+ * headers: {
24
+ * common: { 'X-Client-Version': '2.0.0' },
25
+ * prepare: { 'X-Prepare-Only': 'true' }
26
+ * },
27
+ * dynamicHeaders: async (ctx) => {
28
+ * const token = await getAuthToken();
29
+ * return { 'Authorization': `Bearer ${token}` };
30
+ * }
31
+ * });
32
+ * ```
33
+ */
34
+ function createHttpClient(config = {}) {
35
+ const { timeout = 30000, headers = {}, dynamicHeaders } = config;
36
+ /**
37
+ * Build headers for a request.
38
+ */
39
+ async function buildHeaders(context, additionalHeaders) {
40
+ const result = {
41
+ 'Content-Type': 'application/json',
42
+ };
43
+ // Add common headers
44
+ if (headers.common) {
45
+ Object.assign(result, headers.common);
46
+ }
47
+ // Add endpoint-specific headers
48
+ const endpointHeaders = headers[context.endpoint];
49
+ if (endpointHeaders && typeof endpointHeaders === 'object') {
50
+ Object.assign(result, endpointHeaders);
51
+ }
52
+ // Add dynamic headers
53
+ if (dynamicHeaders) {
54
+ const dynamic = await dynamicHeaders(context);
55
+ Object.assign(result, dynamic);
56
+ }
57
+ // Add additional headers from options
58
+ if (additionalHeaders) {
59
+ Object.assign(result, additionalHeaders);
60
+ }
61
+ return result;
62
+ }
63
+ /**
64
+ * Make a fetch request with timeout.
65
+ */
66
+ async function fetchWithTimeout(url, init, requestTimeout, signal) {
67
+ const controller = new AbortController();
68
+ const timeoutId = setTimeout(() => controller.abort(), requestTimeout);
69
+ // If external signal provided, link it to our controller
70
+ // Store handler reference so we can remove it later (prevent memory leak)
71
+ const abortHandler = signal ? () => controller.abort() : null;
72
+ if (signal && abortHandler) {
73
+ signal.addEventListener('abort', abortHandler);
74
+ }
75
+ try {
76
+ const response = await fetch(url, {
77
+ ...init,
78
+ signal: controller.signal,
79
+ });
80
+ return response;
81
+ }
82
+ catch (error) {
83
+ // Check if it's a timeout (AbortError from our controller)
84
+ if (error instanceof Error && error.name === 'AbortError') {
85
+ // Check if it was our timeout or external abort
86
+ if (signal?.aborted) {
87
+ throw (0, errors_1.createAuthError)(errors_1.ERROR_CODES.CANCELLED, 'Request was cancelled');
88
+ }
89
+ throw (0, errors_1.createAuthError)(errors_1.ERROR_CODES.TIMEOUT, 'Request timed out');
90
+ }
91
+ // Network error
92
+ throw (0, errors_1.createAuthError)(errors_1.ERROR_CODES.NETWORK_ERROR, error instanceof Error ? error.message : 'Network request failed');
93
+ }
94
+ finally {
95
+ clearTimeout(timeoutId);
96
+ // Clean up event listener to prevent memory leak
97
+ if (signal && abortHandler) {
98
+ signal.removeEventListener('abort', abortHandler);
99
+ }
100
+ }
101
+ }
102
+ /**
103
+ * Parse response and handle errors.
104
+ */
105
+ async function parseResponse(response) {
106
+ // Try to parse JSON
107
+ let data;
108
+ try {
109
+ data = await response.json();
110
+ }
111
+ catch {
112
+ // If JSON parsing fails and response is not ok, throw generic error
113
+ if (!response.ok) {
114
+ throw (0, errors_1.createAuthError)(errors_1.ERROR_CODES.INVALID_RESPONSE, `Request failed with status ${response.status}`);
115
+ }
116
+ throw (0, errors_1.createAuthError)(errors_1.ERROR_CODES.INVALID_RESPONSE, 'Failed to parse response');
117
+ }
118
+ // If response is not ok, parse as error
119
+ if (!response.ok) {
120
+ throw (0, errors_1.parseBackendError)({ ...data, status: response.status });
121
+ }
122
+ return data;
123
+ }
124
+ /**
125
+ * Determine endpoint type from URL for header context.
126
+ */
127
+ function getEndpointType(url) {
128
+ if (url.includes('/prepare'))
129
+ return 'prepare';
130
+ if (url.includes('/process') || url.includes('/get-phone') || url.includes('/verify-phone'))
131
+ return 'process';
132
+ if (url.includes('/status'))
133
+ return 'polling';
134
+ return 'prepare'; // Default
135
+ }
136
+ return {
137
+ async post(url, body, options) {
138
+ const endpointType = getEndpointType(url);
139
+ const requestHeaders = await buildHeaders({ endpoint: endpointType, method: 'POST' }, options?.headers);
140
+ const response = await fetchWithTimeout(url, {
141
+ method: 'POST',
142
+ headers: requestHeaders,
143
+ body: JSON.stringify(body),
144
+ }, options?.timeout || timeout, options?.signal);
145
+ return parseResponse(response);
146
+ },
147
+ async get(url, options) {
148
+ const endpointType = getEndpointType(url);
149
+ const requestHeaders = await buildHeaders({ endpoint: endpointType, method: 'GET' }, options?.headers);
150
+ // Remove Content-Type for GET requests
151
+ delete requestHeaders['Content-Type'];
152
+ const response = await fetchWithTimeout(url, {
153
+ method: 'GET',
154
+ headers: requestHeaders,
155
+ }, options?.timeout || timeout, options?.signal);
156
+ return parseResponse(response);
157
+ },
158
+ };
159
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Client module exports.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createPollingHandler = exports.createNoopLogger = exports.createLogger = exports.createHttpClient = exports.PhoneAuthClient = void 0;
7
+ // Main Client
8
+ var phone_auth_client_1 = require("./phone-auth-client");
9
+ Object.defineProperty(exports, "PhoneAuthClient", { enumerable: true, get: function () { return phone_auth_client_1.PhoneAuthClient; } });
10
+ // HTTP Client
11
+ var http_1 = require("./http");
12
+ Object.defineProperty(exports, "createHttpClient", { enumerable: true, get: function () { return http_1.createHttpClient; } });
13
+ // Logger
14
+ var logger_1 = require("./logger");
15
+ Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return logger_1.createLogger; } });
16
+ Object.defineProperty(exports, "createNoopLogger", { enumerable: true, get: function () { return logger_1.createNoopLogger; } });
17
+ // Strategies (internal, but exported for advanced use)
18
+ var polling_1 = require("./strategies/polling");
19
+ Object.defineProperty(exports, "createPollingHandler", { enumerable: true, get: function () { return polling_1.createPollingHandler; } });