@0xsquid/react-hooks 6.4.0 → 6.4.1-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 (61) hide show
  1. package/dist/core/queries/queries-keys.d.ts +7 -1
  2. package/dist/core/queries/queries-keys.js +24 -0
  3. package/dist/core/queries/queries-keys.js.map +1 -1
  4. package/dist/core/types/index.d.ts +1 -0
  5. package/dist/core/types/onramps/index.d.ts +2 -0
  6. package/dist/core/types/onramps/index.js +3 -0
  7. package/dist/core/types/onramps/index.js.map +1 -0
  8. package/dist/core/types/onramps/onramp.d.ts +101 -0
  9. package/dist/core/types/onramps/onramp.js +2 -0
  10. package/dist/core/types/onramps/onramp.js.map +1 -0
  11. package/dist/core/types/onramps/revolut.d.ts +92 -0
  12. package/dist/core/types/onramps/revolut.js +2 -0
  13. package/dist/core/types/onramps/revolut.js.map +1 -0
  14. package/dist/hooks/index.d.ts +3 -0
  15. package/dist/hooks/index.js +3 -0
  16. package/dist/hooks/index.js.map +1 -1
  17. package/dist/hooks/onramp/useFiatToCrypto.d.ts +61 -0
  18. package/dist/hooks/onramp/useFiatToCrypto.js +190 -0
  19. package/dist/hooks/onramp/useFiatToCrypto.js.map +1 -0
  20. package/dist/hooks/store/useFiatTransactionStore.d.ts +20 -0
  21. package/dist/hooks/store/useFiatTransactionStore.js +38 -0
  22. package/dist/hooks/store/useFiatTransactionStore.js.map +1 -0
  23. package/dist/hooks/utils/useUtils.d.ts +7 -0
  24. package/dist/hooks/utils/useUtils.js +20 -0
  25. package/dist/hooks/utils/useUtils.js.map +1 -0
  26. package/dist/hooks/wallet/useEns.d.ts +0 -1
  27. package/dist/hooks/wallet/useEns.js +1 -13
  28. package/dist/hooks/wallet/useEns.js.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/services/external/baseAdapter.d.ts +31 -0
  33. package/dist/services/external/baseAdapter.js +20 -0
  34. package/dist/services/external/baseAdapter.js.map +1 -0
  35. package/dist/services/external/index.d.ts +3 -0
  36. package/dist/services/external/index.js +4 -0
  37. package/dist/services/external/index.js.map +1 -0
  38. package/dist/services/external/onramperClientAdapter.d.ts +15 -0
  39. package/dist/services/external/onramperClientAdapter.js +130 -0
  40. package/dist/services/external/onramperClientAdapter.js.map +1 -0
  41. package/dist/services/external/revolutClientAdapter.d.ts +30 -0
  42. package/dist/services/external/revolutClientAdapter.js +195 -0
  43. package/dist/services/external/revolutClientAdapter.js.map +1 -0
  44. package/dist/services/index.d.ts +1 -1
  45. package/dist/services/index.js +1 -1
  46. package/dist/services/index.js.map +1 -1
  47. package/dist/services/internal/assetsService.d.ts +2 -0
  48. package/dist/services/internal/assetsService.js +6 -0
  49. package/dist/services/internal/assetsService.js.map +1 -1
  50. package/dist/services/internal/countryCurrencyMap.d.ts +6 -0
  51. package/dist/services/internal/countryCurrencyMap.js +945 -0
  52. package/dist/services/internal/countryCurrencyMap.js.map +1 -0
  53. package/dist/services/internal/fiatToCryptoService.d.ts +24 -0
  54. package/dist/services/internal/fiatToCryptoService.js +65 -0
  55. package/dist/services/internal/fiatToCryptoService.js.map +1 -0
  56. package/dist/tests/assetsService.test.js +13 -26
  57. package/dist/tests/assetsService.test.js.map +1 -1
  58. package/dist/tests/revolutClientAdapter.test.d.ts +1 -0
  59. package/dist/tests/revolutClientAdapter.test.js +181 -0
  60. package/dist/tests/revolutClientAdapter.test.js.map +1 -0
  61. package/package.json +4 -2
@@ -0,0 +1,20 @@
1
+ import { ExecuteFiatQuoteResultClient, FiatTransactionHistory } from "../../core/types/onramps/onramp";
2
+ interface FiatTransactionState {
3
+ transactions: FiatTransactionHistory[];
4
+ persistTransaction: (details: ExecuteFiatQuoteResultClient) => void;
5
+ updateTransactionStatus: (orderId: string, status: FiatTransactionHistory["status"], transactionHash?: string) => void;
6
+ removeTransaction: (orderId: string) => void;
7
+ removeAllTransactions: () => void;
8
+ }
9
+ export declare const useFiatTransactionStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<FiatTransactionState>, "persist"> & {
10
+ persist: {
11
+ setOptions: (options: Partial<import("zustand/middleware").PersistOptions<FiatTransactionState, FiatTransactionState>>) => void;
12
+ clearStorage: () => void;
13
+ rehydrate: () => void | Promise<void>;
14
+ hasHydrated: () => boolean;
15
+ onHydrate: (fn: (state: FiatTransactionState) => void) => () => void;
16
+ onFinishHydration: (fn: (state: FiatTransactionState) => void) => () => void;
17
+ getOptions: () => Partial<import("zustand/middleware").PersistOptions<FiatTransactionState, FiatTransactionState>>;
18
+ };
19
+ }>;
20
+ export {};
@@ -0,0 +1,38 @@
1
+ import { create } from "zustand";
2
+ import { persist } from "zustand/middleware";
3
+ export const useFiatTransactionStore = create(persist((set) => ({
4
+ transactions: [],
5
+ persistTransaction: (details) => set((state) => {
6
+ const { executeQuoteRequest, toChain, orderId } = details;
7
+ return {
8
+ transactions: [
9
+ ...state.transactions,
10
+ {
11
+ orderId,
12
+ fromFiatCurrency: executeQuoteRequest.fiatCurrency,
13
+ fromAmount: executeQuoteRequest.amount.toString(),
14
+ toCryptoCurrencyID: executeQuoteRequest.cryptoCurrencyID,
15
+ fromCountryCode: executeQuoteRequest.region ?? "",
16
+ toTokenAddress: executeQuoteRequest.squidToken?.address ?? "",
17
+ toCryptoAmount: executeQuoteRequest.cryptoAmount.toString(),
18
+ toChainId: toChain?.chainId ?? "",
19
+ toAddress: executeQuoteRequest.walletAddress,
20
+ status: "awaiting_payment",
21
+ timestamp: Date.now(),
22
+ },
23
+ ],
24
+ };
25
+ }),
26
+ updateTransactionStatus: (orderId, status, transactionHash) => set((state) => ({
27
+ transactions: state.transactions.map((tx) => tx.orderId === orderId ? { ...tx, status, transactionHash } : tx),
28
+ })),
29
+ removeTransaction: (orderId) => set((state) => ({
30
+ transactions: state.transactions.filter((tx) => tx.orderId !== orderId),
31
+ })),
32
+ removeAllTransactions: () => set(() => ({
33
+ transactions: [],
34
+ })),
35
+ }), {
36
+ name: "squid.fiat.transactions.store",
37
+ }));
38
+ //# sourceMappingURL=useFiatTransactionStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFiatTransactionStore.js","sourceRoot":"","sources":["../../../src/hooks/store/useFiatTransactionStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAkB7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAC3C,OAAO,CACL,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACR,YAAY,EAAE,EAAE;IAChB,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE,CAC9B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACZ,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC1D,OAAO;YACL,YAAY,EAAE;gBACZ,GAAG,KAAK,CAAC,YAAY;gBACrB;oBACE,OAAO;oBACP,gBAAgB,EAAE,mBAAmB,CAAC,YAAY;oBAClD,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE;oBACjD,kBAAkB,EAAE,mBAAmB,CAAC,gBAAgB;oBACxD,eAAe,EAAE,mBAAmB,CAAC,MAAM,IAAI,EAAE;oBACjD,cAAc,EAAE,mBAAmB,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE;oBAC7D,cAAc,EAAE,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE;oBAC3D,SAAS,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;oBACjC,SAAS,EAAE,mBAAmB,CAAC,aAAa;oBAC5C,MAAM,EAAE,kBAAkB;oBAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB;aACF;SACF,CAAC;IACJ,CAAC,CAAC;IACJ,uBAAuB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAC5D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACd,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC1C,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CACjE;KACF,CAAC,CAAC;IACL,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CAC7B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACd,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CACrC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,OAAO,CAC/B;KACF,CAAC,CAAC;IACL,qBAAqB,EAAE,GAAG,EAAE,CAC1B,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACT,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;CACN,CAAC,EACF;IACE,IAAI,EAAE,+BAA+B;CACtC,CACF,CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Returns a debounced value that only updates after the specified delay
3
+ * @param value - The value to debounce
4
+ * @param delay - Delay in milliseconds
5
+ * @returns The debounced value
6
+ */
7
+ export declare function useDebouncedValue<T>(value: T, delay: number): T;
@@ -0,0 +1,20 @@
1
+ import { useEffect, useState } from "react";
2
+ /**
3
+ * Returns a debounced value that only updates after the specified delay
4
+ * @param value - The value to debounce
5
+ * @param delay - Delay in milliseconds
6
+ * @returns The debounced value
7
+ */
8
+ export function useDebouncedValue(value, delay) {
9
+ const [debouncedValue, setDebouncedValue] = useState(value);
10
+ useEffect(() => {
11
+ const timeoutId = setTimeout(() => {
12
+ setDebouncedValue(value);
13
+ }, delay);
14
+ return () => {
15
+ clearTimeout(timeoutId);
16
+ };
17
+ }, [value, delay]);
18
+ return debouncedValue;
19
+ }
20
+ //# sourceMappingURL=useUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUtils.js","sourceRoot":"","sources":["../../../src/hooks/utils/useUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAI,KAAQ,EAAE,KAAa;IAC1D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEnB,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -11,7 +11,6 @@ export declare function useEnsDataForAddress({ address, options, }: {
11
11
  address?: string;
12
12
  options?: QueryOptions;
13
13
  }): UseQueryResult<EnsData>;
14
- export declare function useDebouncedValue<T>(value: T, delay: number): T;
15
14
  /**
16
15
  * Search for ENS names.
17
16
  * Returns an exact match if the name is an ENS name, and multiple matches otherwise.
@@ -1,7 +1,7 @@
1
1
  import { useQuery, } from "@tanstack/react-query";
2
- import { useEffect, useState } from "react";
3
2
  import { keys } from "../../core/queries/queries-keys";
4
3
  import { EnsService } from "../../services/external/ens";
4
+ import { useDebouncedValue } from "../utils/useUtils";
5
5
  /**
6
6
  * Returns the ENS data of the given address
7
7
  *
@@ -17,18 +17,6 @@ export function useEnsDataForAddress({ address, options, }) {
17
17
  });
18
18
  return ensQuery;
19
19
  }
20
- export function useDebouncedValue(value, delay) {
21
- const [debouncedValue, setDebouncedValue] = useState(value);
22
- useEffect(() => {
23
- const timeoutId = setTimeout(() => {
24
- setDebouncedValue(value);
25
- }, delay);
26
- return () => {
27
- clearTimeout(timeoutId);
28
- };
29
- }, [value, delay]);
30
- return debouncedValue;
31
- }
32
20
  /**
33
21
  * Search for ENS names.
34
22
  * Returns an exact match if the name is an ENS name, and multiple matches otherwise.
@@ -1 +1 @@
1
- {"version":3,"file":"useEns.js","sourceRoot":"","sources":["../../../src/hooks/wallet/useEns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useEns.js","sourceRoot":"","sources":["../../../src/hooks/wallet/useEns.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAOtD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,OAAO,EACP,OAAO,GAIR;IACC,MAAM,QAAQ,GAAG,QAAQ,CACvB,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,EACtC,GAAG,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAC/C;QACE,GAAG,OAAO;QACV,OAAO,EACL,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;YACxB,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3D,SAAS,EAAE,QAAQ;KACpB,CACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,IAAI,EACJ,OAAO,GAAG,IAAI,EACd,OAAO,GAAG,GAAG,GAKd;IACC,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE7E,MAAM,cAAc,GAAG,QAAQ,CAC7B,IAAI,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,EAC/B,GAAG,EAAE;QACH,MAAM,gBAAgB,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;QAExD,OAAO,gBAAgB;YACrB,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC;YACvC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC,EACD;QACE,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,IAAI,OAAO;QAClD,SAAS,EAAE,QAAQ;KACpB,CACF,CAAC;IAEF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE5E;;;GAGG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE5C,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
+ export * from "./core";
1
2
  export * from "./hooks";
2
3
  export * from "./provider";
3
- export * from "./core";
4
4
  export * from "./services";
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // src/index.tsx
2
+ export * from "./core";
2
3
  export * from "./hooks";
3
4
  export * from "./provider";
4
- export * from "./core";
5
5
  export * from "./services";
6
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { ChainData, Token } from "@0xsquid/squid-types";
2
+ import { CountryWithCode, ExecuteFiatQuoteResult, ExecuteQuoteClient, FiatCurrencyEnhanced, FiatToCryptoConfig, OnRampQuoteResponse, OnRampTransactionStatus } from "../../core/types/onramps/onramp";
3
+ export type ProviderInfo = {
4
+ value: string;
5
+ key: string;
6
+ label: string;
7
+ iconUrl: string;
8
+ supportedPaymentMethods: readonly string[];
9
+ };
10
+ export declare abstract class BaseFiatToCryptoAdapter {
11
+ abstract readonly key: string;
12
+ abstract readonly label: string;
13
+ abstract readonly supportedPaymentMethods: readonly string[];
14
+ private readonly baseIconUrl;
15
+ getInfo(): ProviderInfo;
16
+ getCountryData(countryCode: string): CountryWithCode;
17
+ getCurrencyData(currencyCode: string): FiatCurrencyEnhanced | undefined;
18
+ abstract getQuote(fiatCurrency: string, cryptoCurrencyID: string, amount: number, paymentMethod?: string, region?: string): Promise<OnRampQuoteResponse>;
19
+ abstract getTransactionStatus(transactionId: string, walletAddress?: string): Promise<OnRampTransactionStatus>;
20
+ abstract executeQuote(executeQuoteRequest: ExecuteQuoteClient): Promise<ExecuteFiatQuoteResult>;
21
+ abstract getConfiguration(squidConfig: {
22
+ chains: ChainData[];
23
+ tokens: Token[];
24
+ }): Promise<FiatToCryptoConfig>;
25
+ mapPaymentMethod?(method: string): string;
26
+ mapConfigResponse?(data: any, squidConfig: {
27
+ chains: ChainData[];
28
+ tokens: Token[];
29
+ }): FiatToCryptoConfig;
30
+ mapQuoteResponse?(data: any, fiatCurrency: string, cryptoCurrencyID: string, originalAmount: number): OnRampQuoteResponse;
31
+ }
@@ -0,0 +1,20 @@
1
+ import { getCountryData, getCurrencyData, } from "../internal/fiatToCryptoService";
2
+ export class BaseFiatToCryptoAdapter {
3
+ baseIconUrl = "https://raw.githubusercontent.com/0xsquid/assets/main/images/webp128/onramps";
4
+ getInfo() {
5
+ return {
6
+ value: this.key,
7
+ key: this.key,
8
+ label: this.label,
9
+ supportedPaymentMethods: this.supportedPaymentMethods,
10
+ iconUrl: `${this.baseIconUrl}/${this.key}.webp`,
11
+ };
12
+ }
13
+ getCountryData(countryCode) {
14
+ return getCountryData(countryCode);
15
+ }
16
+ getCurrencyData(currencyCode) {
17
+ return getCurrencyData(currencyCode);
18
+ }
19
+ }
20
+ //# sourceMappingURL=baseAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseAdapter.js","sourceRoot":"","sources":["../../../src/services/external/baseAdapter.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,cAAc,EACd,eAAe,GAChB,MAAM,iCAAiC,CAAC;AAUzC,MAAM,OAAgB,uBAAuB;IAO1B,WAAW,GAC1B,8EAA8E,CAAC;IAEjF,OAAO;QACL,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,GAAG;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;YACrD,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,OAAO;SAChD,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,eAAe,CAAC,YAAoB;QAClC,OAAO,eAAe,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;CAsCF"}
@@ -0,0 +1,3 @@
1
+ export { OnramperAdapter } from "./onramperClientAdapter";
2
+ export { RevolutClientAdapter } from "./revolutClientAdapter";
3
+ export { EnsService } from "./ens";
@@ -0,0 +1,4 @@
1
+ export { OnramperAdapter } from "./onramperClientAdapter";
2
+ export { RevolutClientAdapter } from "./revolutClientAdapter";
3
+ export { EnsService } from "./ens";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/external/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { ExecuteFiatQuoteResult, ExecuteQuoteClient, FiatToCryptoConfig, OnRampQuoteResponse, OnRampTransactionStatus } from "../../core/types/onramps/onramp";
2
+ import { BaseFiatToCryptoAdapter } from "./baseAdapter";
3
+ export declare class OnramperAdapter extends BaseFiatToCryptoAdapter {
4
+ readonly key = "onramper";
5
+ readonly label = "Onramper";
6
+ readonly supportedPaymentMethods: readonly ["credit_card", "bank_transfer"];
7
+ private readonly baseUrl;
8
+ private readonly apiKey;
9
+ private getHeaders;
10
+ getQuote(fiatCurrency: string, cryptoCurrency: string, amount: number): Promise<OnRampQuoteResponse>;
11
+ getTransactionStatus(transactionId: string): Promise<OnRampTransactionStatus>;
12
+ executeQuote(executeQuoteRequest: ExecuteQuoteClient): Promise<ExecuteFiatQuoteResult>;
13
+ private getCryptoNetwork;
14
+ getConfiguration(): Promise<FiatToCryptoConfig>;
15
+ }
@@ -0,0 +1,130 @@
1
+ import axios from "axios";
2
+ import { BaseFiatToCryptoAdapter } from "./baseAdapter";
3
+ export class OnramperAdapter extends BaseFiatToCryptoAdapter {
4
+ key = "onramper";
5
+ label = "Onramper";
6
+ supportedPaymentMethods = ["credit_card", "bank_transfer"];
7
+ baseUrl = "https://api.onramper.com";
8
+ apiKey = "ONRAMPER_API_KEY";
9
+ getHeaders() {
10
+ return {
11
+ Authorization: this.apiKey,
12
+ "Content-Type": "application/json",
13
+ };
14
+ }
15
+ async getQuote(fiatCurrency, cryptoCurrency, amount) {
16
+ try {
17
+ const { data } = await axios.get(`${this.baseUrl}/quotes/${fiatCurrency.toLowerCase()}/${cryptoCurrency.toLowerCase()}`, {
18
+ params: {
19
+ amount,
20
+ paymentMethod: "creditcard",
21
+ },
22
+ headers: this.getHeaders(),
23
+ });
24
+ // Get the best quote from available options
25
+ const bestQuote = data[0];
26
+ if (!bestQuote) {
27
+ throw new Error("No quotes available from Onramper");
28
+ }
29
+ const totalFees = bestQuote.networkFee + bestQuote.transactionFee;
30
+ const percentageFee = (totalFees / amount) * 100;
31
+ return {
32
+ fiatCurrency: fiatCurrency.toUpperCase(),
33
+ cryptoCurrencyID: cryptoCurrency.toUpperCase(),
34
+ amount,
35
+ fees: {
36
+ fixed: totalFees,
37
+ percentage: percentageFee,
38
+ },
39
+ cryptoAmount: bestQuote.payout,
40
+ };
41
+ }
42
+ catch (error) {
43
+ if (axios.isAxiosError(error)) {
44
+ throw new Error(error.response?.data?.message || "Failed to get quote from Onramper");
45
+ }
46
+ throw error;
47
+ }
48
+ }
49
+ async getTransactionStatus(transactionId) {
50
+ try {
51
+ const { data } = await axios.get(`${this.baseUrl}/transactions/${transactionId}`, {
52
+ headers: this.getHeaders(),
53
+ });
54
+ const statusMap = {
55
+ pending: "processing",
56
+ completed: "completed",
57
+ failed: "failed",
58
+ };
59
+ return {
60
+ transactionId: data.transactionId,
61
+ status: statusMap[data.status] || "processing",
62
+ createdAt: data.statusDate,
63
+ updatedAt: data.statusDate,
64
+ errorMessage: null,
65
+ transactionHash: data.transactionHash || undefined,
66
+ };
67
+ }
68
+ catch (error) {
69
+ if (axios.isAxiosError(error)) {
70
+ throw new Error(error.response?.data?.message ||
71
+ "Failed to get transaction status from Onramper");
72
+ }
73
+ throw error;
74
+ }
75
+ }
76
+ async executeQuote(executeQuoteRequest) {
77
+ try {
78
+ const { data } = await axios.post(`${this.baseUrl}/transactions`, {
79
+ fiatCurrency: executeQuoteRequest.fiatCurrency,
80
+ cryptoCurrency: executeQuoteRequest.cryptoCurrencyID,
81
+ amount: executeQuoteRequest.amount,
82
+ walletAddress: executeQuoteRequest.walletAddress,
83
+ paymentMethod: executeQuoteRequest.paymentMethod,
84
+ }, {
85
+ headers: this.getHeaders(),
86
+ });
87
+ return {
88
+ redirectUrl: data.redirectUrl,
89
+ orderId: data.transactionId,
90
+ };
91
+ }
92
+ catch (error) {
93
+ if (axios.isAxiosError(error)) {
94
+ throw new Error(error.response?.data?.message ||
95
+ "Failed to execute quote with Onramper");
96
+ }
97
+ throw error;
98
+ }
99
+ }
100
+ getCryptoNetwork(cryptoCurrency) {
101
+ const networkMap = {
102
+ BTC: "bitcoin",
103
+ ETH: "ethereum",
104
+ SOL: "solana",
105
+ };
106
+ return networkMap[cryptoCurrency.toUpperCase()] || "ethereum";
107
+ }
108
+ async getConfiguration() {
109
+ try {
110
+ const { data } = await axios.get(`${this.baseUrl}/config`, {
111
+ headers: this.getHeaders(),
112
+ });
113
+ // Add flag URLs to country data
114
+ return {
115
+ supportedCountries: data.supportedCountries || [],
116
+ supportedCurrencies: data.supportedCurrencies || [],
117
+ supportedPaymentMethods: [...this.supportedPaymentMethods],
118
+ supportedTokens: data.supportedTokens || [],
119
+ };
120
+ }
121
+ catch (error) {
122
+ if (axios.isAxiosError(error)) {
123
+ throw new Error(error.response?.data?.message ||
124
+ "Failed to fetch Onramper configuration");
125
+ }
126
+ throw error;
127
+ }
128
+ }
129
+ }
130
+ //# sourceMappingURL=onramperClientAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onramperClientAdapter.js","sourceRoot":"","sources":["../../../src/services/external/onramperClientAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,OAAO,eAAgB,SAAQ,uBAAuB;IACjD,GAAG,GAAG,UAAU,CAAC;IAEjB,KAAK,GAAG,UAAU,CAAC;IAEnB,uBAAuB,GAAG,CAAC,aAAa,EAAE,eAAe,CAAU,CAAC;IAE5D,OAAO,GAAW,0BAA0B,CAAC;IAE7C,MAAM,GAAW,kBAAkB,CAAC;IAE7C,UAAU;QAChB,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,MAAM;YAC1B,cAAc,EAAE,kBAAkB;SACnC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,YAAoB,EACpB,cAAsB,EACtB,MAAc;QAEd,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAC9B,GAAG,IAAI,CAAC,OAAO,WAAW,YAAY,CAAC,WAAW,EAAE,IAAI,cAAc,CAAC,WAAW,EAAE,EAAE,EACtF;gBACE,MAAM,EAAE;oBACN,MAAM;oBACN,aAAa,EAAE,YAAY;iBAC5B;gBACD,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;aAC3B,CACF,CAAC;YAEF,4CAA4C;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS,EAAE;gBACd,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;aACtD;YAED,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,cAAc,CAAC;YAClE,MAAM,aAAa,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC;YAEjD,OAAO;gBACL,YAAY,EAAE,YAAY,CAAC,WAAW,EAAE;gBACxC,gBAAgB,EAAE,cAAc,CAAC,WAAW,EAAE;gBAC9C,MAAM;gBACN,IAAI,EAAE;oBACJ,KAAK,EAAE,SAAS;oBAChB,UAAU,EAAE,aAAa;iBAC1B;gBACD,YAAY,EAAE,SAAS,CAAC,MAAM;aAC/B,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,IAAI,KAAK,CACb,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,mCAAmC,CACrE,CAAC;aACH;YACD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,aAAqB;QAErB,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAC9B,GAAG,IAAI,CAAC,OAAO,iBAAiB,aAAa,EAAE,EAC/C;gBACE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;aAC3B,CACF,CAAC;YAEF,MAAM,SAAS,GAAgD;gBAC7D,OAAO,EAAE,YAAY;gBACrB,SAAS,EAAE,WAAW;gBACtB,MAAM,EAAE,QAAQ;aACjB,CAAC;YAEF,OAAO;gBACL,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,YAAY;gBAC9C,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,YAAY,EAAE,IAAI;gBAClB,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,SAAS;aACnD,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,IAAI,KAAK,CACb,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO;oBAC3B,gDAAgD,CACnD,CAAC;aACH;YACD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,mBAAuC;QAEvC,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,OAAO,eAAe,EAC9B;gBACE,YAAY,EAAE,mBAAmB,CAAC,YAAY;gBAC9C,cAAc,EAAE,mBAAmB,CAAC,gBAAgB;gBACpD,MAAM,EAAE,mBAAmB,CAAC,MAAM;gBAClC,aAAa,EAAE,mBAAmB,CAAC,aAAa;gBAChD,aAAa,EAAE,mBAAmB,CAAC,aAAa;aACjD,EACD;gBACE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;aAC3B,CACF,CAAC;YAEF,OAAO;gBACL,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,OAAO,EAAE,IAAI,CAAC,aAAa;aAC5B,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,IAAI,KAAK,CACb,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO;oBAC3B,uCAAuC,CAC1C,CAAC;aACH;YACD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAEO,gBAAgB,CAAC,cAAsB;QAC7C,MAAM,UAAU,GAA2B;YACzC,GAAG,EAAE,SAAS;YACd,GAAG,EAAE,UAAU;YACf,GAAG,EAAE,QAAQ;SACd,CAAC;QACF,OAAO,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,IAAI,UAAU,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE;gBACzD,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;aAC3B,CAAC,CAAC;YAEH,gCAAgC;YAEhC,OAAO;gBACL,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,EAAE;gBACjD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,EAAE;gBACnD,uBAAuB,EAAE,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC;gBAC1D,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE;aAC5C,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,IAAI,KAAK,CACb,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO;oBAC3B,wCAAwC,CAC3C,CAAC;aACH;YACD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ import { ChainData, Token } from "@0xsquid/squid-types";
2
+ import { ExecuteFiatQuoteResult, ExecuteQuoteClient, FiatToCryptoConfig, OnRampQuoteResponse, OnRampTransactionStatus } from "../../core/types/onramps/onramp";
3
+ import { RevolutConfig, RevolutQuoteResponse } from "../../core/types/onramps/revolut";
4
+ import { BaseFiatToCryptoAdapter } from "./baseAdapter";
5
+ export declare class RevolutClientAdapter extends BaseFiatToCryptoAdapter {
6
+ readonly key = "revolut";
7
+ readonly label = "Revolut";
8
+ readonly supportedPaymentMethods: readonly ["card", "revolut", "apple-pay", "google-pay"];
9
+ private readonly baseUrl;
10
+ private findMatchingChain;
11
+ private findMatchingToken;
12
+ private filterAndMapTokens;
13
+ mapConfigResponse(data: RevolutConfig, squidConfig: {
14
+ chains: ChainData[];
15
+ tokens: Token[];
16
+ }): FiatToCryptoConfig;
17
+ mapQuoteResponse(data: RevolutQuoteResponse, fiatCurrency: string, cryptoCurrencyID: string, originalAmount: number): OnRampQuoteResponse;
18
+ mapPaymentMethod(method: string): string;
19
+ calculateTotalFees(data: RevolutQuoteResponse, amount: number): {
20
+ totalFees: number;
21
+ percentageFee: number;
22
+ };
23
+ getQuote(fiatCurrency: string, cryptoCurrencyID: string, amount: number, paymentMethod?: string, region?: string): Promise<OnRampQuoteResponse>;
24
+ getTransactionStatus(transactionId: string, walletAddress: string): Promise<OnRampTransactionStatus>;
25
+ executeQuote(params: ExecuteQuoteClient): Promise<ExecuteFiatQuoteResult>;
26
+ getConfiguration(squidConfig: {
27
+ chains: ChainData[];
28
+ tokens: Token[];
29
+ }): Promise<FiatToCryptoConfig>;
30
+ }
@@ -0,0 +1,195 @@
1
+ import axios from "axios";
2
+ import { v4 as uuidv4 } from "uuid";
3
+ import { nativeEvmTokenAddress } from "../../core/constants";
4
+ import { BaseFiatToCryptoAdapter } from "./baseAdapter";
5
+ export class RevolutClientAdapter extends BaseFiatToCryptoAdapter {
6
+ key = "revolut";
7
+ label = "Revolut";
8
+ supportedPaymentMethods = [
9
+ "card",
10
+ "revolut",
11
+ "apple-pay",
12
+ "google-pay",
13
+ ];
14
+ baseUrl = "https://squid-app-v2-git-feat-api-fiat-onramp-0xsquid.vercel.app/api/fiat-to-crypto/revolut";
15
+ findMatchingChain(revolutBlockchain, chains) {
16
+ return chains.find((c) => c.networkIdentifier.toUpperCase() === revolutBlockchain);
17
+ }
18
+ findMatchingToken(params) {
19
+ const { revolutToken, chain, tokens } = params;
20
+ // Filter tokens by chain first
21
+ const chainTokens = tokens.filter((t) => t.chainId === chain.chainId);
22
+ if (revolutToken.smartContractAddress) {
23
+ // For tokens with contract address (EVM tokens)
24
+ return chainTokens.find((t) => t.address?.toLowerCase() ===
25
+ revolutToken.smartContractAddress?.toLowerCase());
26
+ }
27
+ // For native tokens (BTC, ETH, etc.)
28
+ return chainTokens.find((t) => t.address?.toLowerCase() === nativeEvmTokenAddress &&
29
+ t.symbol.toUpperCase() === revolutToken.currency.toUpperCase());
30
+ }
31
+ filterAndMapTokens(revolutTokens, squidConfig) {
32
+ return revolutTokens
33
+ .map((revolutToken) => {
34
+ const chain = this.findMatchingChain(revolutToken.blockchain, squidConfig.chains);
35
+ if (!chain)
36
+ return null;
37
+ const token = this.findMatchingToken({
38
+ revolutToken,
39
+ chain,
40
+ tokens: squidConfig.tokens,
41
+ });
42
+ if (!token)
43
+ return null;
44
+ return { ...token, cryptoCurrencyID: revolutToken.id };
45
+ })
46
+ .filter((token) => token !== null);
47
+ }
48
+ mapConfigResponse(data, squidConfig) {
49
+ try {
50
+ // Transform country codes into enhanced country info
51
+ const supportedCountries = data.countries
52
+ .map((code) => this.getCountryData(code))
53
+ .filter((country) => country !== null);
54
+ // Transform currencies with additional data
55
+ const currencies = (data.fiat || [])
56
+ .map((fc) => {
57
+ const currencyData = this.getCurrencyData(fc.currency);
58
+ if (!currencyData)
59
+ return null;
60
+ return {
61
+ ...currencyData,
62
+ minLimit: fc.min_limit,
63
+ maxLimit: fc.max_limit,
64
+ };
65
+ })
66
+ .filter((currency) => currency !== null);
67
+ // Filter and map tokens that exist in both systems
68
+ const allowedTokens = this.filterAndMapTokens(data.crypto, squidConfig);
69
+ return {
70
+ supportedCountries,
71
+ supportedCurrencies: currencies,
72
+ supportedPaymentMethods: data.payment_methods,
73
+ supportedTokens: allowedTokens,
74
+ };
75
+ }
76
+ catch (error) {
77
+ console.error("[Revolut Adapter] Error mapping config response:", error);
78
+ // Return empty but valid config instead of throwing
79
+ return {
80
+ supportedCountries: [],
81
+ supportedCurrencies: [],
82
+ supportedPaymentMethods: [],
83
+ supportedTokens: [],
84
+ };
85
+ }
86
+ }
87
+ mapQuoteResponse(data, fiatCurrency, cryptoCurrencyID, originalAmount) {
88
+ const { totalFees, percentageFee } = this.calculateTotalFees(data, originalAmount);
89
+ return {
90
+ fiatCurrency,
91
+ cryptoCurrencyID,
92
+ amount: originalAmount,
93
+ fees: {
94
+ fixed: totalFees,
95
+ percentage: percentageFee,
96
+ },
97
+ cryptoAmount: data.crypto.amount,
98
+ };
99
+ }
100
+ mapPaymentMethod(method) {
101
+ const methodMap = {
102
+ credit_card: "card",
103
+ bank_transfer: "revolut",
104
+ apple_pay: "apple-pay",
105
+ google_pay: "google-pay",
106
+ };
107
+ return methodMap[method] || "card";
108
+ }
109
+ calculateTotalFees(data, amount) {
110
+ const totalFees = Number((data.service_fee.amount +
111
+ data.network_fee.amount +
112
+ data.partner_fee.amount).toFixed(2));
113
+ const percentageFee = Number(((totalFees / amount) * 100).toFixed(2));
114
+ return { totalFees, percentageFee };
115
+ }
116
+ async getQuote(fiatCurrency, cryptoCurrencyID, amount, paymentMethod = "card", region = "GB") {
117
+ try {
118
+ const { data } = await axios.get(`${this.baseUrl}/quote`, {
119
+ params: {
120
+ fiatCurrency,
121
+ cryptoCurrencyID,
122
+ amount,
123
+ paymentMethod: this.mapPaymentMethod(paymentMethod),
124
+ region,
125
+ },
126
+ });
127
+ const { totalFees, percentageFee } = this.calculateTotalFees(data, amount);
128
+ return {
129
+ fiatCurrency,
130
+ cryptoCurrencyID,
131
+ amount,
132
+ fees: {
133
+ fixed: totalFees,
134
+ percentage: percentageFee,
135
+ },
136
+ cryptoAmount: data.crypto.amount,
137
+ };
138
+ }
139
+ catch (error) {
140
+ throw new Error("Failed to get quote from Revolut");
141
+ }
142
+ }
143
+ async getTransactionStatus(transactionId, walletAddress) {
144
+ try {
145
+ const { data } = await axios.get(`${this.baseUrl}/status/${transactionId}`, {
146
+ params: {
147
+ wallet: walletAddress,
148
+ },
149
+ });
150
+ return {
151
+ transactionId: data.transactionId,
152
+ status: data.status,
153
+ createdAt: data.createdAt,
154
+ updatedAt: data.updatedAt,
155
+ transactionHash: data.transactionHash,
156
+ };
157
+ }
158
+ catch (error) {
159
+ throw new Error("Failed to get transaction status");
160
+ }
161
+ }
162
+ async executeQuote(params) {
163
+ try {
164
+ const orderId = uuidv4();
165
+ const serverParams = {
166
+ orderId,
167
+ fiatCurrency: params.fiatCurrency,
168
+ cryptoCurrencyID: params.cryptoCurrencyID,
169
+ amount: params.amount,
170
+ walletAddress: params.walletAddress,
171
+ paymentMethod: this.mapPaymentMethod(params.paymentMethod),
172
+ region: params.region || "GB",
173
+ // partnerRedirectUrl: "",
174
+ };
175
+ const { data } = await axios.post(`${this.baseUrl}/execute`, serverParams);
176
+ return {
177
+ redirectUrl: data.redirectUrl,
178
+ orderId,
179
+ };
180
+ }
181
+ catch (error) {
182
+ throw new Error("Failed to execute quote");
183
+ }
184
+ }
185
+ async getConfiguration(squidConfig) {
186
+ try {
187
+ const { data } = await axios.get(`${this.baseUrl}/config`);
188
+ return this.mapConfigResponse(data, squidConfig);
189
+ }
190
+ catch (error) {
191
+ throw new Error("Failed to fetch Revolut configuration");
192
+ }
193
+ }
194
+ }
195
+ //# sourceMappingURL=revolutClientAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revolutClientAdapter.js","sourceRoot":"","sources":["../../../src/services/external/revolutClientAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export * from "./external/ens";
1
+ export * from "./external/";
2
2
  export * from "./internal/apiService";
3
3
  export * from "./internal/assetsService";
4
4
  export * from "./internal/configService";