@unifold/core 0.1.28 → 0.1.29

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/dist/index.d.mts CHANGED
@@ -385,6 +385,9 @@ interface ProjectConfigResponse {
385
385
  networks: PaymentNetwork[];
386
386
  };
387
387
  blocked_country_codes?: string[];
388
+ pay_with_exchange?: {
389
+ enabled: boolean;
390
+ };
388
391
  }
389
392
  /**
390
393
  * Get project configuration
@@ -496,6 +499,71 @@ interface VerifyAddressResponse {
496
499
  * @returns Verification result with valid status and reason if invalid
497
500
  */
498
501
  declare function verifyRecipientAddress(request: VerifyAddressRequest, publishableKey?: string): Promise<VerifyAddressResponse>;
502
+ interface ExchangeProviderInfo {
503
+ service_provider: string;
504
+ service_provider_display_name: string;
505
+ description: string;
506
+ icon_url: string;
507
+ icon_urls: IconUrl[];
508
+ enabled: boolean;
509
+ supported_networks: string[];
510
+ supported_currencies: string[];
511
+ }
512
+ interface ExchangeProvidersResponse {
513
+ data: ExchangeProviderInfo[];
514
+ }
515
+ interface GetExchangesQuery {
516
+ country_code?: string;
517
+ destination_currency?: string;
518
+ destination_network?: string;
519
+ source_amount?: string;
520
+ source_currency?: string;
521
+ }
522
+ /**
523
+ * Get available exchange providers for "Pay with Exchange"
524
+ * @param query - Optional filters (destination_currency, destination_network)
525
+ * @param publishableKey - Optional publishable key, defaults to configured key
526
+ */
527
+ declare function getExchanges(query?: GetExchangesQuery, publishableKey?: string): Promise<ExchangeProvidersResponse>;
528
+ interface ExchangeWalletAddress {
529
+ address: string;
530
+ chain_type: string;
531
+ }
532
+ interface CreateExchangeSessionRequest {
533
+ service_provider: string;
534
+ wallet_addresses: ExchangeWalletAddress[];
535
+ preferred_destination_currency?: string;
536
+ preferred_destination_network?: string;
537
+ source_currency?: string;
538
+ source_amount?: string;
539
+ external_id?: string;
540
+ }
541
+ interface CreateExchangeSessionResponse {
542
+ url: string;
543
+ service_provider: string;
544
+ external_id: string;
545
+ }
546
+ /**
547
+ * Create an exchange session for "Pay with Exchange"
548
+ * @param request - Exchange session request
549
+ * @param publishableKey - Optional publishable key, defaults to configured key
550
+ */
551
+ declare function createExchangeSession(request: CreateExchangeSessionRequest, publishableKey?: string): Promise<CreateExchangeSessionResponse>;
552
+ interface ExchangeSessionStartParams {
553
+ service_provider: string;
554
+ chain_type: string;
555
+ address: string;
556
+ preferred_destination_currency?: string;
557
+ preferred_destination_network?: string;
558
+ source_currency?: string;
559
+ source_amount?: string;
560
+ external_id?: string;
561
+ }
562
+ /**
563
+ * Generate a URL for the exchanges/sessions/start endpoint that redirects to the exchange provider.
564
+ * This avoids popup blockers in Safari by opening the URL directly via anchor tag or window.open().
565
+ */
566
+ declare function getExchangeSessionStartUrl(request: ExchangeSessionStartParams, publishableKey: string): string;
499
567
  interface BuildSolanaTransactionRequest {
500
568
  chain_id: string;
501
569
  token_address: string;
@@ -633,4 +701,4 @@ declare const i18n: {
633
701
  };
634
702
  type I18nStrings = typeof i18n;
635
703
 
636
- export { type AddressBalanceResponse, type AddressBalancesResponse, type AddressValidationFailureCode, type AddressValidationMetadata, type AutoSwapRequest, type AutoSwapResponse, type BuildSolanaTransactionRequest, type BuildSolanaTransactionResponse, type ChainType, type CreateDepositAddressRequest, type DefaultTokenChain, type DefaultTokenMetadata, type DefaultTokenResponse, type DepositAddressResponse, ExecutionStatus, type FeaturedToken, type FiatCurrenciesResponse, type FiatCurrency, type I18nStrings, type IconUrl, IneligibilityReason, type IpAddressResponse, type OnrampQuote, type OnrampQuotesRequest, type OnrampQuotesResponse, type OnrampSessionRequest, type OnrampSessionResponse, type PaymentNetwork, type PollExecutionsRequest, type PollExecutionsResponse, type ProjectConfigResponse, type QueryExecutionsRequest, type QueryExecutionsResponse, SOLANA_USDC_ADDRESS, type SendSolanaTransactionRequest, type SendSolanaTransactionResponse, type SupportedChain, type SupportedDepositTokensResponse, type SupportedToken, type TokenBalance, type TokenChain, type TokenChainIconUrl, type TokenChainsResponse, type TokenIconUrl, type TokenInfo, type TokenMetadata, type UserIpInfo, type VerifyAddressRequest, type VerifyAddressResponse, type Wallet, buildSolanaTransaction, createDepositAddress, createOnrampSession, getAddressBalance, getAddressBalances, getApiBaseUrl, getChainName, getDefaultOnrampToken, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getIpAddress, getOnrampQuotes, getOnrampSessionStartUrl, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getTokenMetadata, getWalletByChainType, i18n, pollDirectExecutions, queryExecutions, sendSolanaTransaction, setApiConfig, useUserIp, verifyRecipientAddress };
704
+ export { type AddressBalanceResponse, type AddressBalancesResponse, type AddressValidationFailureCode, type AddressValidationMetadata, type AutoSwapRequest, type AutoSwapResponse, type BuildSolanaTransactionRequest, type BuildSolanaTransactionResponse, type ChainType, type CreateDepositAddressRequest, type CreateExchangeSessionRequest, type CreateExchangeSessionResponse, type DefaultTokenChain, type DefaultTokenMetadata, type DefaultTokenResponse, type DepositAddressResponse, type ExchangeProviderInfo, type ExchangeProvidersResponse, type ExchangeSessionStartParams, type ExchangeWalletAddress, ExecutionStatus, type FeaturedToken, type FiatCurrenciesResponse, type FiatCurrency, type GetExchangesQuery, type I18nStrings, type IconUrl, IneligibilityReason, type IpAddressResponse, type OnrampQuote, type OnrampQuotesRequest, type OnrampQuotesResponse, type OnrampSessionRequest, type OnrampSessionResponse, type PaymentNetwork, type PollExecutionsRequest, type PollExecutionsResponse, type ProjectConfigResponse, type QueryExecutionsRequest, type QueryExecutionsResponse, SOLANA_USDC_ADDRESS, type SendSolanaTransactionRequest, type SendSolanaTransactionResponse, type SupportedChain, type SupportedDepositTokensResponse, type SupportedToken, type TokenBalance, type TokenChain, type TokenChainIconUrl, type TokenChainsResponse, type TokenIconUrl, type TokenInfo, type TokenMetadata, type UserIpInfo, type VerifyAddressRequest, type VerifyAddressResponse, type Wallet, buildSolanaTransaction, createDepositAddress, createExchangeSession, createOnrampSession, getAddressBalance, getAddressBalances, getApiBaseUrl, getChainName, getDefaultOnrampToken, getExchangeSessionStartUrl, getExchanges, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getIpAddress, getOnrampQuotes, getOnrampSessionStartUrl, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getTokenMetadata, getWalletByChainType, i18n, pollDirectExecutions, queryExecutions, sendSolanaTransaction, setApiConfig, useUserIp, verifyRecipientAddress };
package/dist/index.d.ts CHANGED
@@ -385,6 +385,9 @@ interface ProjectConfigResponse {
385
385
  networks: PaymentNetwork[];
386
386
  };
387
387
  blocked_country_codes?: string[];
388
+ pay_with_exchange?: {
389
+ enabled: boolean;
390
+ };
388
391
  }
389
392
  /**
390
393
  * Get project configuration
@@ -496,6 +499,71 @@ interface VerifyAddressResponse {
496
499
  * @returns Verification result with valid status and reason if invalid
497
500
  */
498
501
  declare function verifyRecipientAddress(request: VerifyAddressRequest, publishableKey?: string): Promise<VerifyAddressResponse>;
502
+ interface ExchangeProviderInfo {
503
+ service_provider: string;
504
+ service_provider_display_name: string;
505
+ description: string;
506
+ icon_url: string;
507
+ icon_urls: IconUrl[];
508
+ enabled: boolean;
509
+ supported_networks: string[];
510
+ supported_currencies: string[];
511
+ }
512
+ interface ExchangeProvidersResponse {
513
+ data: ExchangeProviderInfo[];
514
+ }
515
+ interface GetExchangesQuery {
516
+ country_code?: string;
517
+ destination_currency?: string;
518
+ destination_network?: string;
519
+ source_amount?: string;
520
+ source_currency?: string;
521
+ }
522
+ /**
523
+ * Get available exchange providers for "Pay with Exchange"
524
+ * @param query - Optional filters (destination_currency, destination_network)
525
+ * @param publishableKey - Optional publishable key, defaults to configured key
526
+ */
527
+ declare function getExchanges(query?: GetExchangesQuery, publishableKey?: string): Promise<ExchangeProvidersResponse>;
528
+ interface ExchangeWalletAddress {
529
+ address: string;
530
+ chain_type: string;
531
+ }
532
+ interface CreateExchangeSessionRequest {
533
+ service_provider: string;
534
+ wallet_addresses: ExchangeWalletAddress[];
535
+ preferred_destination_currency?: string;
536
+ preferred_destination_network?: string;
537
+ source_currency?: string;
538
+ source_amount?: string;
539
+ external_id?: string;
540
+ }
541
+ interface CreateExchangeSessionResponse {
542
+ url: string;
543
+ service_provider: string;
544
+ external_id: string;
545
+ }
546
+ /**
547
+ * Create an exchange session for "Pay with Exchange"
548
+ * @param request - Exchange session request
549
+ * @param publishableKey - Optional publishable key, defaults to configured key
550
+ */
551
+ declare function createExchangeSession(request: CreateExchangeSessionRequest, publishableKey?: string): Promise<CreateExchangeSessionResponse>;
552
+ interface ExchangeSessionStartParams {
553
+ service_provider: string;
554
+ chain_type: string;
555
+ address: string;
556
+ preferred_destination_currency?: string;
557
+ preferred_destination_network?: string;
558
+ source_currency?: string;
559
+ source_amount?: string;
560
+ external_id?: string;
561
+ }
562
+ /**
563
+ * Generate a URL for the exchanges/sessions/start endpoint that redirects to the exchange provider.
564
+ * This avoids popup blockers in Safari by opening the URL directly via anchor tag or window.open().
565
+ */
566
+ declare function getExchangeSessionStartUrl(request: ExchangeSessionStartParams, publishableKey: string): string;
499
567
  interface BuildSolanaTransactionRequest {
500
568
  chain_id: string;
501
569
  token_address: string;
@@ -633,4 +701,4 @@ declare const i18n: {
633
701
  };
634
702
  type I18nStrings = typeof i18n;
635
703
 
636
- export { type AddressBalanceResponse, type AddressBalancesResponse, type AddressValidationFailureCode, type AddressValidationMetadata, type AutoSwapRequest, type AutoSwapResponse, type BuildSolanaTransactionRequest, type BuildSolanaTransactionResponse, type ChainType, type CreateDepositAddressRequest, type DefaultTokenChain, type DefaultTokenMetadata, type DefaultTokenResponse, type DepositAddressResponse, ExecutionStatus, type FeaturedToken, type FiatCurrenciesResponse, type FiatCurrency, type I18nStrings, type IconUrl, IneligibilityReason, type IpAddressResponse, type OnrampQuote, type OnrampQuotesRequest, type OnrampQuotesResponse, type OnrampSessionRequest, type OnrampSessionResponse, type PaymentNetwork, type PollExecutionsRequest, type PollExecutionsResponse, type ProjectConfigResponse, type QueryExecutionsRequest, type QueryExecutionsResponse, SOLANA_USDC_ADDRESS, type SendSolanaTransactionRequest, type SendSolanaTransactionResponse, type SupportedChain, type SupportedDepositTokensResponse, type SupportedToken, type TokenBalance, type TokenChain, type TokenChainIconUrl, type TokenChainsResponse, type TokenIconUrl, type TokenInfo, type TokenMetadata, type UserIpInfo, type VerifyAddressRequest, type VerifyAddressResponse, type Wallet, buildSolanaTransaction, createDepositAddress, createOnrampSession, getAddressBalance, getAddressBalances, getApiBaseUrl, getChainName, getDefaultOnrampToken, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getIpAddress, getOnrampQuotes, getOnrampSessionStartUrl, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getTokenMetadata, getWalletByChainType, i18n, pollDirectExecutions, queryExecutions, sendSolanaTransaction, setApiConfig, useUserIp, verifyRecipientAddress };
704
+ export { type AddressBalanceResponse, type AddressBalancesResponse, type AddressValidationFailureCode, type AddressValidationMetadata, type AutoSwapRequest, type AutoSwapResponse, type BuildSolanaTransactionRequest, type BuildSolanaTransactionResponse, type ChainType, type CreateDepositAddressRequest, type CreateExchangeSessionRequest, type CreateExchangeSessionResponse, type DefaultTokenChain, type DefaultTokenMetadata, type DefaultTokenResponse, type DepositAddressResponse, type ExchangeProviderInfo, type ExchangeProvidersResponse, type ExchangeSessionStartParams, type ExchangeWalletAddress, ExecutionStatus, type FeaturedToken, type FiatCurrenciesResponse, type FiatCurrency, type GetExchangesQuery, type I18nStrings, type IconUrl, IneligibilityReason, type IpAddressResponse, type OnrampQuote, type OnrampQuotesRequest, type OnrampQuotesResponse, type OnrampSessionRequest, type OnrampSessionResponse, type PaymentNetwork, type PollExecutionsRequest, type PollExecutionsResponse, type ProjectConfigResponse, type QueryExecutionsRequest, type QueryExecutionsResponse, SOLANA_USDC_ADDRESS, type SendSolanaTransactionRequest, type SendSolanaTransactionResponse, type SupportedChain, type SupportedDepositTokensResponse, type SupportedToken, type TokenBalance, type TokenChain, type TokenChainIconUrl, type TokenChainsResponse, type TokenIconUrl, type TokenInfo, type TokenMetadata, type UserIpInfo, type VerifyAddressRequest, type VerifyAddressResponse, type Wallet, buildSolanaTransaction, createDepositAddress, createExchangeSession, createOnrampSession, getAddressBalance, getAddressBalances, getApiBaseUrl, getChainName, getDefaultOnrampToken, getExchangeSessionStartUrl, getExchanges, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getIpAddress, getOnrampQuotes, getOnrampSessionStartUrl, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getTokenMetadata, getWalletByChainType, i18n, pollDirectExecutions, queryExecutions, sendSolanaTransaction, setApiConfig, useUserIp, verifyRecipientAddress };
package/dist/index.js CHANGED
@@ -25,12 +25,15 @@ __export(index_exports, {
25
25
  SOLANA_USDC_ADDRESS: () => SOLANA_USDC_ADDRESS,
26
26
  buildSolanaTransaction: () => buildSolanaTransaction,
27
27
  createDepositAddress: () => createDepositAddress,
28
+ createExchangeSession: () => createExchangeSession,
28
29
  createOnrampSession: () => createOnrampSession,
29
30
  getAddressBalance: () => getAddressBalance,
30
31
  getAddressBalances: () => getAddressBalances,
31
32
  getApiBaseUrl: () => getApiBaseUrl,
32
33
  getChainName: () => getChainName,
33
34
  getDefaultOnrampToken: () => getDefaultOnrampToken,
35
+ getExchangeSessionStartUrl: () => getExchangeSessionStartUrl,
36
+ getExchanges: () => getExchanges,
34
37
  getFiatCurrencies: () => getFiatCurrencies,
35
38
  getIconUrl: () => getIconUrl,
36
39
  getIconUrlWithCdn: () => getIconUrlWithCdn,
@@ -468,6 +471,70 @@ async function verifyRecipientAddress(request, publishableKey) {
468
471
  }
469
472
  return response.json();
470
473
  }
474
+ async function getExchanges(query, publishableKey) {
475
+ const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
476
+ validatePublishableKey(pk);
477
+ const params = new URLSearchParams();
478
+ if (query?.destination_currency) params.append("destination_currency", query.destination_currency);
479
+ if (query?.destination_network) params.append("destination_network", query.destination_network);
480
+ const queryString = params.toString();
481
+ const url = `${API_BASE_URL}/v1/public/onramps/exchanges${queryString ? `?${queryString}` : ""}`;
482
+ const response = await fetch(url, {
483
+ method: "GET",
484
+ headers: {
485
+ accept: "application/json",
486
+ "x-publishable-key": pk,
487
+ "Content-Type": "application/json"
488
+ }
489
+ });
490
+ if (!response.ok) {
491
+ throw new Error(`Failed to fetch exchanges: ${response.statusText}`);
492
+ }
493
+ return response.json();
494
+ }
495
+ async function createExchangeSession(request, publishableKey) {
496
+ const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
497
+ validatePublishableKey(pk);
498
+ const response = await fetch(
499
+ `${API_BASE_URL}/v1/public/onramps/exchanges/sessions`,
500
+ {
501
+ method: "POST",
502
+ headers: {
503
+ accept: "application/json",
504
+ "x-publishable-key": pk,
505
+ "Content-Type": "application/json"
506
+ },
507
+ body: JSON.stringify(request)
508
+ }
509
+ );
510
+ if (!response.ok) {
511
+ throw new Error(`Failed to create exchange session: ${response.statusText}`);
512
+ }
513
+ return response.json();
514
+ }
515
+ function getExchangeSessionStartUrl(request, publishableKey) {
516
+ const params = new URLSearchParams();
517
+ params.append("publishable_key", publishableKey);
518
+ params.append("service_provider", request.service_provider);
519
+ params.append("chain_type", request.chain_type);
520
+ params.append("address", request.address);
521
+ if (request.preferred_destination_currency) {
522
+ params.append("preferred_destination_currency", request.preferred_destination_currency);
523
+ }
524
+ if (request.preferred_destination_network) {
525
+ params.append("preferred_destination_network", request.preferred_destination_network);
526
+ }
527
+ if (request.source_currency) {
528
+ params.append("source_currency", request.source_currency);
529
+ }
530
+ if (request.source_amount) {
531
+ params.append("source_amount", request.source_amount);
532
+ }
533
+ if (request.external_id) {
534
+ params.append("external_id", request.external_id);
535
+ }
536
+ return `${API_BASE_URL}/v1/public/onramps/exchanges/sessions/start?${params.toString()}`;
537
+ }
471
538
  async function buildSolanaTransaction(request, publishableKey) {
472
539
  const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
473
540
  validatePublishableKey(pk);
@@ -619,12 +686,15 @@ var i18n = en_default;
619
686
  SOLANA_USDC_ADDRESS,
620
687
  buildSolanaTransaction,
621
688
  createDepositAddress,
689
+ createExchangeSession,
622
690
  createOnrampSession,
623
691
  getAddressBalance,
624
692
  getAddressBalances,
625
693
  getApiBaseUrl,
626
694
  getChainName,
627
695
  getDefaultOnrampToken,
696
+ getExchangeSessionStartUrl,
697
+ getExchanges,
628
698
  getFiatCurrencies,
629
699
  getIconUrl,
630
700
  getIconUrlWithCdn,
package/dist/index.mjs CHANGED
@@ -413,6 +413,70 @@ async function verifyRecipientAddress(request, publishableKey) {
413
413
  }
414
414
  return response.json();
415
415
  }
416
+ async function getExchanges(query, publishableKey) {
417
+ const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
418
+ validatePublishableKey(pk);
419
+ const params = new URLSearchParams();
420
+ if (query?.destination_currency) params.append("destination_currency", query.destination_currency);
421
+ if (query?.destination_network) params.append("destination_network", query.destination_network);
422
+ const queryString = params.toString();
423
+ const url = `${API_BASE_URL}/v1/public/onramps/exchanges${queryString ? `?${queryString}` : ""}`;
424
+ const response = await fetch(url, {
425
+ method: "GET",
426
+ headers: {
427
+ accept: "application/json",
428
+ "x-publishable-key": pk,
429
+ "Content-Type": "application/json"
430
+ }
431
+ });
432
+ if (!response.ok) {
433
+ throw new Error(`Failed to fetch exchanges: ${response.statusText}`);
434
+ }
435
+ return response.json();
436
+ }
437
+ async function createExchangeSession(request, publishableKey) {
438
+ const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
439
+ validatePublishableKey(pk);
440
+ const response = await fetch(
441
+ `${API_BASE_URL}/v1/public/onramps/exchanges/sessions`,
442
+ {
443
+ method: "POST",
444
+ headers: {
445
+ accept: "application/json",
446
+ "x-publishable-key": pk,
447
+ "Content-Type": "application/json"
448
+ },
449
+ body: JSON.stringify(request)
450
+ }
451
+ );
452
+ if (!response.ok) {
453
+ throw new Error(`Failed to create exchange session: ${response.statusText}`);
454
+ }
455
+ return response.json();
456
+ }
457
+ function getExchangeSessionStartUrl(request, publishableKey) {
458
+ const params = new URLSearchParams();
459
+ params.append("publishable_key", publishableKey);
460
+ params.append("service_provider", request.service_provider);
461
+ params.append("chain_type", request.chain_type);
462
+ params.append("address", request.address);
463
+ if (request.preferred_destination_currency) {
464
+ params.append("preferred_destination_currency", request.preferred_destination_currency);
465
+ }
466
+ if (request.preferred_destination_network) {
467
+ params.append("preferred_destination_network", request.preferred_destination_network);
468
+ }
469
+ if (request.source_currency) {
470
+ params.append("source_currency", request.source_currency);
471
+ }
472
+ if (request.source_amount) {
473
+ params.append("source_amount", request.source_amount);
474
+ }
475
+ if (request.external_id) {
476
+ params.append("external_id", request.external_id);
477
+ }
478
+ return `${API_BASE_URL}/v1/public/onramps/exchanges/sessions/start?${params.toString()}`;
479
+ }
416
480
  async function buildSolanaTransaction(request, publishableKey) {
417
481
  const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
418
482
  validatePublishableKey(pk);
@@ -563,12 +627,15 @@ export {
563
627
  SOLANA_USDC_ADDRESS,
564
628
  buildSolanaTransaction,
565
629
  createDepositAddress,
630
+ createExchangeSession,
566
631
  createOnrampSession,
567
632
  getAddressBalance,
568
633
  getAddressBalances,
569
634
  getApiBaseUrl,
570
635
  getChainName,
571
636
  getDefaultOnrampToken,
637
+ getExchangeSessionStartUrl,
638
+ getExchanges,
572
639
  getFiatCurrencies,
573
640
  getIconUrl,
574
641
  getIconUrlWithCdn,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unifold/core",
3
- "version": "0.1.28",
3
+ "version": "0.1.29",
4
4
  "description": "Unifold Core SDK - Core types, API client, and business logic",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",