signer-test-sdk-core 0.0.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 (63) hide show
  1. package/README.md +81 -0
  2. package/dist/src/components/OnboardingUI/auth.d.ts +158 -0
  3. package/dist/src/components/OnboardingUI/auth.js +230 -0
  4. package/dist/src/components/OnboardingUI/auth.js.map +1 -0
  5. package/dist/src/components/OnboardingUI/index.d.ts +9 -0
  6. package/dist/src/components/OnboardingUI/index.js +9 -0
  7. package/dist/src/components/OnboardingUI/index.js.map +1 -0
  8. package/dist/src/components/OnboardingUI/types.d.ts +159 -0
  9. package/dist/src/components/OnboardingUI/types.js +5 -0
  10. package/dist/src/components/OnboardingUI/types.js.map +1 -0
  11. package/dist/src/core/AbstraxnWallet.d.ts +162 -0
  12. package/dist/src/core/AbstraxnWallet.js +593 -0
  13. package/dist/src/core/AbstraxnWallet.js.map +1 -0
  14. package/dist/src/core/AuthManager.d.ts +112 -0
  15. package/dist/src/core/AuthManager.js +685 -0
  16. package/dist/src/core/AuthManager.js.map +1 -0
  17. package/dist/src/core/Signer.d.ts +35 -0
  18. package/dist/src/core/Signer.js +156 -0
  19. package/dist/src/core/Signer.js.map +1 -0
  20. package/dist/src/index.d.ts +17 -0
  21. package/dist/src/index.js +19 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/interfaces/IAuth.d.ts +26 -0
  24. package/dist/src/interfaces/IAuth.js +2 -0
  25. package/dist/src/interfaces/IAuth.js.map +1 -0
  26. package/dist/src/interfaces/ISigner.d.ts +14 -0
  27. package/dist/src/interfaces/ISigner.js +2 -0
  28. package/dist/src/interfaces/ISigner.js.map +1 -0
  29. package/dist/src/interfaces/IStorage.d.ts +15 -0
  30. package/dist/src/interfaces/IStorage.js +2 -0
  31. package/dist/src/interfaces/IStorage.js.map +1 -0
  32. package/dist/src/interfaces/IWallet.d.ts +45 -0
  33. package/dist/src/interfaces/IWallet.js +2 -0
  34. package/dist/src/interfaces/IWallet.js.map +1 -0
  35. package/dist/src/services/ApiService.d.ts +131 -0
  36. package/dist/src/services/ApiService.js +626 -0
  37. package/dist/src/services/ApiService.js.map +1 -0
  38. package/dist/src/services/TokenService.d.ts +29 -0
  39. package/dist/src/services/TokenService.js +40 -0
  40. package/dist/src/services/TokenService.js.map +1 -0
  41. package/dist/src/services/TurnkeyService.d.ts +54 -0
  42. package/dist/src/services/TurnkeyService.js +91 -0
  43. package/dist/src/services/TurnkeyService.js.map +1 -0
  44. package/dist/src/storage/IndexedDBStorage.d.ts +39 -0
  45. package/dist/src/storage/IndexedDBStorage.js +280 -0
  46. package/dist/src/storage/IndexedDBStorage.js.map +1 -0
  47. package/dist/src/utils/constants.d.ts +52 -0
  48. package/dist/src/utils/constants.js +78 -0
  49. package/dist/src/utils/constants.js.map +1 -0
  50. package/dist/src/utils/errors.d.ts +23 -0
  51. package/dist/src/utils/errors.js +48 -0
  52. package/dist/src/utils/errors.js.map +1 -0
  53. package/dist/src/utils/helpers.d.ts +12 -0
  54. package/dist/src/utils/helpers.js +30 -0
  55. package/dist/src/utils/helpers.js.map +1 -0
  56. package/dist/src/utils/passkey.d.ts +33 -0
  57. package/dist/src/utils/passkey.js +122 -0
  58. package/dist/src/utils/passkey.js.map +1 -0
  59. package/dist/src/utils/types.d.ts +182 -0
  60. package/dist/src/utils/types.js +5 -0
  61. package/dist/src/utils/types.js.map +1 -0
  62. package/dist/tsconfig.tsbuildinfo +1 -0
  63. package/package.json +49 -0
@@ -0,0 +1,626 @@
1
+ import { API_ENDPOINTS, API_BASE_URL, TURNKEY_CONFIG, TURNKEY_ENDPOINTS } from '../utils/constants';
2
+ import { AuthenticationError, NetworkError } from '../utils/errors';
3
+ import { getErrorMessage } from '../utils/helpers';
4
+ export class ApiService {
5
+ constructor(apiKey, tokenService, turnkeyService) {
6
+ this.apiKey = apiKey;
7
+ this.tokenService = tokenService;
8
+ this.turnkeyService = turnkeyService;
9
+ this.isRefreshing = false;
10
+ this.refreshPromise = null;
11
+ // Use fixed backend URL from constants
12
+ this.baseUrl = API_BASE_URL;
13
+ }
14
+ /**
15
+ * Build URL with API key as query parameter
16
+ */
17
+ buildUrl(endpoint) {
18
+ const url = new URL(endpoint, this.baseUrl);
19
+ url.searchParams.set('apikey', this.apiKey);
20
+ return url.toString();
21
+ }
22
+ /**
23
+ * Initialize OTP
24
+ */
25
+ async initOtp(email) {
26
+ try {
27
+ const url = this.buildUrl(API_ENDPOINTS.INIT_OTP);
28
+ const response = await fetch(url, {
29
+ method: 'POST',
30
+ headers: {
31
+ 'Content-Type': 'application/json',
32
+ },
33
+ body: JSON.stringify({ email }),
34
+ });
35
+ if (!response.ok) {
36
+ const error = await response.json().catch(() => ({ message: 'Failed to initialize OTP' }));
37
+ throw new AuthenticationError(error.message || 'Failed to initialize OTP');
38
+ }
39
+ return await response.json();
40
+ }
41
+ catch (error) {
42
+ if (error instanceof AuthenticationError) {
43
+ throw error;
44
+ }
45
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
46
+ }
47
+ }
48
+ /**
49
+ * Verify OTP
50
+ */
51
+ async verifyOtp(otpId, otpCode, targetPublicKey) {
52
+ try {
53
+ const url = this.buildUrl(API_ENDPOINTS.VERIFY_OTP);
54
+ const response = await fetch(url, {
55
+ method: 'POST',
56
+ headers: {
57
+ 'Content-Type': 'application/json',
58
+ },
59
+ body: JSON.stringify({
60
+ otpId,
61
+ otpCode,
62
+ targetPublicKey,
63
+ }),
64
+ });
65
+ if (!response.ok) {
66
+ const error = await response.json().catch(() => ({ message: 'Failed to verify OTP' }));
67
+ throw new AuthenticationError(error.message || 'Failed to verify OTP');
68
+ }
69
+ const data = await response.json();
70
+ // Store tokens if provided
71
+ if (data.accessToken && data.refreshToken) {
72
+ await this.tokenService.setTokens({
73
+ accessToken: data.accessToken,
74
+ refreshToken: data.refreshToken,
75
+ });
76
+ }
77
+ return data;
78
+ }
79
+ catch (error) {
80
+ if (error instanceof AuthenticationError) {
81
+ throw error;
82
+ }
83
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
84
+ }
85
+ }
86
+ /**
87
+ * Get Google OAuth URL
88
+ */
89
+ getGoogleAuthUrl(publicKey, originUrl) {
90
+ const url = new URL(API_ENDPOINTS.GOOGLE_AUTH, this.baseUrl);
91
+ url.searchParams.set('apikey', this.apiKey);
92
+ url.searchParams.set('publickey', publicKey);
93
+ url.searchParams.set('origin', originUrl);
94
+ return url.toString();
95
+ }
96
+ /**
97
+ * Get Discord OAuth URL
98
+ */
99
+ getDiscordAuthUrl(publicKey, originUrl) {
100
+ const url = new URL(API_ENDPOINTS.DISCORD_AUTH, this.baseUrl);
101
+ url.searchParams.set('apikey', this.apiKey);
102
+ url.searchParams.set('publickey', publicKey);
103
+ url.searchParams.set('origin', originUrl);
104
+ return url.toString();
105
+ }
106
+ /**
107
+ * Get X (Twitter) OAuth URL
108
+ */
109
+ getTwitterAuthUrl(publicKey, originUrl) {
110
+ const url = new URL(API_ENDPOINTS.X_AUTH, this.baseUrl);
111
+ url.searchParams.set('apikey', this.apiKey);
112
+ url.searchParams.set('publickey', publicKey);
113
+ url.searchParams.set('origin', originUrl);
114
+ return url.toString();
115
+ }
116
+ /**
117
+ * Passkey signup
118
+ * Calls the backend API to register a new user with passkey
119
+ */
120
+ async passkeySignup(payload) {
121
+ try {
122
+ const url = this.buildUrl(API_ENDPOINTS.PASSKEY_SIGNUP);
123
+ const response = await fetch(url, {
124
+ method: 'POST',
125
+ headers: {
126
+ 'Content-Type': 'application/json',
127
+ },
128
+ body: JSON.stringify(payload),
129
+ });
130
+ if (!response.ok) {
131
+ const error = await response.json().catch(() => ({ message: 'Failed to signup with passkey' }));
132
+ throw new AuthenticationError(error.message || 'Failed to signup with passkey');
133
+ }
134
+ const data = await response.json();
135
+ // Store tokens if provided
136
+ if (data.accessToken && data.refreshToken) {
137
+ await this.tokenService.setTokens({
138
+ accessToken: data.accessToken,
139
+ refreshToken: data.refreshToken,
140
+ });
141
+ }
142
+ return data;
143
+ }
144
+ catch (error) {
145
+ if (error instanceof AuthenticationError) {
146
+ throw error;
147
+ }
148
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
149
+ }
150
+ }
151
+ /**
152
+ * Passkey login
153
+ * Calls the backend API to login with passkey stamp
154
+ */
155
+ async passkeyLogin(payload) {
156
+ try {
157
+ const url = this.buildUrl(API_ENDPOINTS.PASSKEY_LOGIN);
158
+ const response = await fetch(url, {
159
+ method: 'POST',
160
+ headers: {
161
+ 'Content-Type': 'application/json',
162
+ },
163
+ body: JSON.stringify(payload),
164
+ });
165
+ if (!response.ok) {
166
+ const error = await response.json().catch(() => ({ message: 'Failed to login with passkey' }));
167
+ throw new AuthenticationError(error.message || 'Failed to login with passkey');
168
+ }
169
+ const data = await response.json();
170
+ // Store tokens if provided
171
+ if (data.accessToken && data.refreshToken) {
172
+ await this.tokenService.setTokens({
173
+ accessToken: data.accessToken,
174
+ refreshToken: data.refreshToken,
175
+ });
176
+ }
177
+ return data;
178
+ }
179
+ catch (error) {
180
+ if (error instanceof AuthenticationError) {
181
+ throw error;
182
+ }
183
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
184
+ }
185
+ }
186
+ /**
187
+ * Handle Google OAuth callback
188
+ * Calls the backend API with code and state to get accessToken and refreshToken
189
+ */
190
+ async handleGoogleCallback(code, state) {
191
+ try {
192
+ const url = new URL(API_ENDPOINTS.GOOGLE_CALLBACK, this.baseUrl);
193
+ url.searchParams.set('apikey', this.apiKey);
194
+ url.searchParams.set('code', code);
195
+ url.searchParams.set('state', state);
196
+ const response = await fetch(url.toString(), {
197
+ method: 'GET',
198
+ headers: {
199
+ 'Content-Type': 'application/json',
200
+ },
201
+ });
202
+ if (!response.ok) {
203
+ const error = await response.json().catch(() => ({ message: 'Failed to handle Google callback' }));
204
+ throw new AuthenticationError(error.message || 'Failed to handle Google callback');
205
+ }
206
+ const data = await response.json();
207
+ // Store tokens using TokenService
208
+ if (data.accessToken && data.refreshToken) {
209
+ await this.tokenService.setTokens({
210
+ accessToken: data.accessToken,
211
+ refreshToken: data.refreshToken,
212
+ });
213
+ }
214
+ return data;
215
+ }
216
+ catch (error) {
217
+ if (error instanceof AuthenticationError) {
218
+ throw error;
219
+ }
220
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
221
+ }
222
+ }
223
+ /**
224
+ * Handle Discord OAuth callback
225
+ * Calls the backend API with code and state to get accessToken and refreshToken
226
+ */
227
+ async handleDiscordCallback(code, state) {
228
+ try {
229
+ const url = new URL(API_ENDPOINTS.DISCORD_CALLBACK, this.baseUrl);
230
+ url.searchParams.set('apikey', this.apiKey);
231
+ url.searchParams.set('code', code);
232
+ url.searchParams.set('state', state);
233
+ const response = await fetch(url.toString(), {
234
+ method: 'GET',
235
+ headers: {
236
+ 'Content-Type': 'application/json',
237
+ },
238
+ });
239
+ if (!response.ok) {
240
+ const error = await response.json().catch(() => ({ message: 'Failed to handle Discord callback' }));
241
+ throw new AuthenticationError(error.message || 'Failed to handle Discord callback');
242
+ }
243
+ const data = await response.json();
244
+ if (data.accessToken && data.refreshToken) {
245
+ await this.tokenService.setTokens({
246
+ accessToken: data.accessToken,
247
+ refreshToken: data.refreshToken,
248
+ });
249
+ }
250
+ return data;
251
+ }
252
+ catch (error) {
253
+ if (error instanceof AuthenticationError) {
254
+ throw error;
255
+ }
256
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
257
+ }
258
+ }
259
+ /**
260
+ * Handle X (Twitter) OAuth callback
261
+ * Calls the backend API with code and state to get accessToken and refreshToken
262
+ */
263
+ async handleTwitterCallback(code, state) {
264
+ try {
265
+ const url = new URL(API_ENDPOINTS.X_CALLBACK, this.baseUrl);
266
+ url.searchParams.set('apikey', this.apiKey);
267
+ url.searchParams.set('code', code);
268
+ url.searchParams.set('state', state);
269
+ const response = await fetch(url.toString(), {
270
+ method: 'GET',
271
+ headers: {
272
+ 'Content-Type': 'application/json',
273
+ },
274
+ });
275
+ if (!response.ok) {
276
+ const error = await response.json().catch(() => ({ message: 'Failed to handle X (Twitter) callback' }));
277
+ throw new AuthenticationError(error.message || 'Failed to handle X (Twitter) callback');
278
+ }
279
+ const data = await response.json();
280
+ if (data.accessToken && data.refreshToken) {
281
+ await this.tokenService.setTokens({
282
+ accessToken: data.accessToken,
283
+ refreshToken: data.refreshToken,
284
+ });
285
+ }
286
+ return data;
287
+ }
288
+ catch (error) {
289
+ if (error instanceof AuthenticationError) {
290
+ throw error;
291
+ }
292
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
293
+ }
294
+ }
295
+ /**
296
+ * Refresh access token
297
+ * Handles both cases where API returns only accessToken or both accessToken and refreshToken
298
+ */
299
+ async refreshToken() {
300
+ // If already refreshing, return the existing promise to prevent concurrent calls
301
+ if (this.isRefreshing && this.refreshPromise) {
302
+ return this.refreshPromise;
303
+ }
304
+ this.isRefreshing = true;
305
+ this.refreshPromise = (async () => {
306
+ try {
307
+ const refreshToken = await this.tokenService.getRefreshToken();
308
+ if (!refreshToken) {
309
+ throw new AuthenticationError('No refresh token available');
310
+ }
311
+ const url = this.buildUrl(API_ENDPOINTS.REFRESH_TOKEN);
312
+ const response = await fetch(url, {
313
+ method: 'POST',
314
+ headers: {
315
+ 'Content-Type': 'application/json',
316
+ },
317
+ body: JSON.stringify({ refreshToken }),
318
+ });
319
+ if (!response.ok) {
320
+ throw new AuthenticationError('Failed to refresh token');
321
+ }
322
+ const data = await response.json();
323
+ // If API returns new refreshToken, use it; otherwise keep the existing one
324
+ const newRefreshToken = data.refreshToken || refreshToken;
325
+ // Save both tokens
326
+ await this.tokenService.setTokens({
327
+ accessToken: data.accessToken,
328
+ refreshToken: newRefreshToken,
329
+ });
330
+ return {
331
+ accessToken: data.accessToken,
332
+ refreshToken: newRefreshToken,
333
+ };
334
+ }
335
+ finally {
336
+ this.isRefreshing = false;
337
+ this.refreshPromise = null;
338
+ }
339
+ })();
340
+ return this.refreshPromise;
341
+ }
342
+ /**
343
+ * Check if response indicates token expiration (401 or 403)
344
+ */
345
+ isTokenExpired(response) {
346
+ return response.status === 401 || response.status === 403;
347
+ }
348
+ /**
349
+ * Make an authenticated request with automatic token refresh on expiration
350
+ */
351
+ async makeAuthenticatedRequest(requestFn, retryCount = 0) {
352
+ const accessToken = await this.tokenService.getAccessToken();
353
+ if (!accessToken) {
354
+ throw new AuthenticationError('No access token available');
355
+ }
356
+ let response = await requestFn(accessToken);
357
+ // If token expired, refresh and retry once
358
+ if (this.isTokenExpired(response) && retryCount === 0) {
359
+ try {
360
+ // Refresh the token
361
+ await this.refreshToken();
362
+ // Get the new access token
363
+ const newAccessToken = await this.tokenService.getAccessToken();
364
+ if (!newAccessToken) {
365
+ throw new AuthenticationError('Failed to get new access token after refresh');
366
+ }
367
+ // Retry the request with new token
368
+ response = await requestFn(newAccessToken);
369
+ }
370
+ catch (error) {
371
+ // If refresh fails, throw authentication error
372
+ if (error instanceof AuthenticationError) {
373
+ throw error;
374
+ }
375
+ throw new AuthenticationError('Failed to refresh token and retry request');
376
+ }
377
+ }
378
+ // If still not ok after retry, throw error
379
+ if (!response.ok) {
380
+ const error = await response.json().catch(() => ({ message: 'Request failed' }));
381
+ throw new Error(error.message || `Request failed with status ${response.status}`);
382
+ }
383
+ return await response.json();
384
+ }
385
+ /**
386
+ * Sign transaction (legacy - for Turnkey proxy)
387
+ */
388
+ async signTransaction(body, stamp, url) {
389
+ try {
390
+ return await this.makeAuthenticatedRequest(async (accessToken) => {
391
+ const apiUrl = this.buildUrl(API_ENDPOINTS.SIGN_TRANSACTION);
392
+ return await fetch(apiUrl, {
393
+ method: 'POST',
394
+ headers: {
395
+ 'Content-Type': 'application/json',
396
+ Authorization: `Bearer ${accessToken}`,
397
+ },
398
+ body: JSON.stringify({
399
+ body,
400
+ stamp,
401
+ url,
402
+ }),
403
+ });
404
+ });
405
+ }
406
+ catch (error) {
407
+ if (error instanceof AuthenticationError) {
408
+ throw error;
409
+ }
410
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
411
+ }
412
+ }
413
+ /**
414
+ * Sign transaction via backend API
415
+ * Takes an unsigned transaction and returns a signed transaction
416
+ * Backend expects the same format as PROXY endpoint (url, method, body, stamp)
417
+ */
418
+ async signTransactionViaBackend(unsignedTransaction, signWith, organizationId) {
419
+ try {
420
+ // Create request body for Turnkey sign transaction call
421
+ const body = JSON.stringify({
422
+ type: 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2',
423
+ timestampMs: new Date().getTime().toString(),
424
+ organizationId,
425
+ parameters: {
426
+ signWith,
427
+ unsignedTransaction,
428
+ type: 'TRANSACTION_TYPE_ETHEREUM',
429
+ },
430
+ });
431
+ // Create stamp for the request
432
+ const stamp = await this.turnkeyService.createStamp(body);
433
+ // Turnkey sign transaction endpoint URL
434
+ const turnkeyUrl = `${TURNKEY_CONFIG.BASE_URL}${TURNKEY_ENDPOINTS.SIGN_TRANSACTION}`;
435
+ const response = await this.makeAuthenticatedRequest(async (accessToken) => {
436
+ const url = this.buildUrl(API_ENDPOINTS.SIGN_TRANSACTION);
437
+ return await fetch(url, {
438
+ method: 'POST',
439
+ headers: {
440
+ 'Content-Type': 'application/json',
441
+ 'Authorization': `Bearer ${accessToken}`,
442
+ },
443
+ body: JSON.stringify({
444
+ url: turnkeyUrl,
445
+ body,
446
+ stamp,
447
+ }),
448
+ });
449
+ });
450
+ // console.log('response', response)
451
+ // Extract signed transaction from response
452
+ // Try direct signature field first (new format)
453
+ let signedTransaction = response.signature;
454
+ // Fallback to nested structure (old format)
455
+ if (!signedTransaction) {
456
+ signedTransaction = response.result?.activity?.result?.signTransactionResult?.signedTransaction;
457
+ }
458
+ if (!signedTransaction) {
459
+ throw new Error('No signed transaction found in response');
460
+ }
461
+ return { signedTransaction };
462
+ }
463
+ catch (error) {
464
+ if (error instanceof AuthenticationError) {
465
+ throw error;
466
+ }
467
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
468
+ }
469
+ }
470
+ /**
471
+ * Export wallet account
472
+ * Calls backend API to export private key
473
+ */
474
+ async exportWalletAccount(organizationId, address, targetPublicKey) {
475
+ try {
476
+ // Create request body for Turnkey export wallet call
477
+ const body = JSON.stringify({
478
+ type: 'ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT',
479
+ timestampMs: new Date().getTime().toString(),
480
+ organizationId,
481
+ parameters: {
482
+ address,
483
+ targetPublicKey,
484
+ },
485
+ });
486
+ // Create stamp for the request
487
+ const stamp = await this.turnkeyService.createStamp(body);
488
+ // Turnkey export wallet endpoint URL
489
+ const turnkeyUrl = `${TURNKEY_CONFIG.BASE_URL}${TURNKEY_ENDPOINTS.STAMP_EXPORT_WALLET_ACCOUNT}`;
490
+ const response = await this.makeAuthenticatedRequest(async (accessToken) => {
491
+ const url = this.buildUrl(API_ENDPOINTS.EXPORT_WALLET);
492
+ return await fetch(url, {
493
+ method: 'POST',
494
+ headers: {
495
+ 'Content-Type': 'application/json',
496
+ 'Authorization': `Bearer ${accessToken}`,
497
+ },
498
+ body: JSON.stringify({
499
+ url: turnkeyUrl,
500
+ body,
501
+ stamp,
502
+ }),
503
+ });
504
+ });
505
+ const exportBundle = response.result?.activity?.result?.exportWalletAccountResult?.exportBundle;
506
+ if (!exportBundle) {
507
+ throw new Error('No export bundle found in response');
508
+ }
509
+ return { exportBundle };
510
+ }
511
+ catch (error) {
512
+ if (error instanceof AuthenticationError) {
513
+ throw error;
514
+ }
515
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
516
+ }
517
+ }
518
+ /**
519
+ * Get whoami information from backend endpoint
520
+ * Calls backend whoami endpoint with access token
521
+ * Backend expects the same format as PROXY endpoint (url, method, body, stamp)
522
+ */
523
+ async getWhoami(organizationId) {
524
+ try {
525
+ // Create request body for whoami call
526
+ const body = JSON.stringify({
527
+ organizationId,
528
+ });
529
+ // Create stamp for the request
530
+ const stamp = await this.turnkeyService.createStamp(body);
531
+ // Turnkey whoami endpoint URL
532
+ const turnkeyUrl = `${TURNKEY_CONFIG.BASE_URL}${TURNKEY_ENDPOINTS.GET_WHOAMI}`;
533
+ const response = await this.makeAuthenticatedRequest(async (accessToken) => {
534
+ const url = this.buildUrl(API_ENDPOINTS.WHOAMI);
535
+ return await fetch(url, {
536
+ method: 'POST',
537
+ headers: {
538
+ 'Content-Type': 'application/json',
539
+ 'Authorization': `Bearer ${accessToken}`,
540
+ },
541
+ body: JSON.stringify({
542
+ url: turnkeyUrl,
543
+ body,
544
+ stamp,
545
+ }),
546
+ });
547
+ });
548
+ // Extract result from response wrapper
549
+ if (response.result) {
550
+ return response.result;
551
+ }
552
+ throw new Error('Invalid whoami response: missing result');
553
+ }
554
+ catch (error) {
555
+ if (error instanceof AuthenticationError) {
556
+ throw error;
557
+ }
558
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
559
+ }
560
+ }
561
+ /**
562
+ * Get whoami information from Turnkey via PROXY (deprecated - use getWhoami instead)
563
+ * This is kept for backward compatibility but should use getWhoami
564
+ */
565
+ async getWhoamiViaProxy(organizationId) {
566
+ // Use the new backend endpoint instead
567
+ return this.getWhoami(organizationId);
568
+ }
569
+ /**
570
+ * Call PROXY endpoint to proxy Turnkey requests
571
+ */
572
+ async callProxy(turnkeyUrl, method, body, stamp) {
573
+ try {
574
+ // Use makeAuthenticatedRequest if we have an access token, otherwise make direct call
575
+ const accessToken = await this.tokenService.getAccessToken();
576
+ if (accessToken) {
577
+ return await this.makeAuthenticatedRequest(async (token) => {
578
+ const proxyUrl = this.buildUrl(API_ENDPOINTS.PROXY);
579
+ const headers = {
580
+ 'Content-Type': 'application/json',
581
+ 'Authorization': `Bearer ${token}`,
582
+ };
583
+ return await fetch(proxyUrl, {
584
+ method: 'POST',
585
+ headers,
586
+ body: JSON.stringify({
587
+ url: turnkeyUrl,
588
+ method,
589
+ body,
590
+ stamp,
591
+ }),
592
+ });
593
+ });
594
+ }
595
+ else {
596
+ // If no access token, make direct call without authentication
597
+ const proxyUrl = this.buildUrl(API_ENDPOINTS.PROXY);
598
+ const headers = {
599
+ 'Content-Type': 'application/json',
600
+ };
601
+ const response = await fetch(proxyUrl, {
602
+ method: 'POST',
603
+ headers,
604
+ body: JSON.stringify({
605
+ url: turnkeyUrl,
606
+ method,
607
+ body,
608
+ stamp,
609
+ }),
610
+ });
611
+ if (!response.ok) {
612
+ const error = await response.json().catch(() => ({ message: 'Failed to call PROXY' }));
613
+ throw new Error(error.message || 'Failed to call PROXY');
614
+ }
615
+ return await response.json();
616
+ }
617
+ }
618
+ catch (error) {
619
+ if (error instanceof AuthenticationError) {
620
+ throw error;
621
+ }
622
+ throw new NetworkError(`Network error: ${getErrorMessage(error)}`);
623
+ }
624
+ }
625
+ }
626
+ //# sourceMappingURL=ApiService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiService.js","sourceRoot":"","sources":["../../../src/services/ApiService.ts"],"names":[],"mappings":"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"}