@0xsquid/react-hooks 6.4.0 → 6.4.1-beta.0

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 (58) 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 +99 -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 +189 -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/fiatToCryptoService.d.ts +26 -0
  51. package/dist/services/internal/fiatToCryptoService.js +57 -0
  52. package/dist/services/internal/fiatToCryptoService.js.map +1 -0
  53. package/dist/tests/assetsService.test.js +13 -26
  54. package/dist/tests/assetsService.test.js.map +1 -1
  55. package/dist/tests/revolutClientAdapter.test.d.ts +1 -0
  56. package/dist/tests/revolutClientAdapter.test.js +181 -0
  57. package/dist/tests/revolutClientAdapter.test.js.map +1 -0
  58. package/package.json +4 -2
@@ -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":"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"}
@@ -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";
@@ -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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0BAA0B,CAAC"}
@@ -106,6 +106,8 @@ export type AssetsColors = {
106
106
  export declare function fetchAssetsColors(): Promise<AssetsColors>;
107
107
  export declare function initializeSquidWithAssetsColors(squid: Squid, assetsColors: AssetsColors): void;
108
108
  export declare function isEmptyObject(obj: Record<string, unknown> | undefined): boolean;
109
+ export declare const normalizeTokenSymbol: (symbol: string) => string;
110
+ export declare const areTokenSymbolsCompatible: (symbol1: string, symbol2: string) => boolean;
109
111
  export declare function isEvmosChain(chain: ChainData | undefined): boolean;
110
112
  /**
111
113
  * Converts an evmos address (erc20/0x123...abc)