Skip to content

Commit 89e14b7

Browse files
committed
refactor: marketplace query params
1 parent 96d4c50 commit 89e14b7

File tree

6 files changed

+123
-56
lines changed

6 files changed

+123
-56
lines changed

sample/Assets/Scripts/Marketplace/BridgeScript.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,13 @@ public void OpenWidget()
2727

2828
var link = LinkFactory.GenerateBridgeLink(
2929
environment: environment,
30-
fromTokenAddress: FromTokenAddress.text.IsNullOrEmpty() ? null : FromTokenAddress.text,
31-
fromChainID: FromChain.text.IsNullOrEmpty() ? null : FromChain.text,
32-
toTokenAddress: ToTokenAddress.text.IsNullOrEmpty() ? null : ToTokenAddress.text,
33-
toChainID: ToChain.text.IsNullOrEmpty() ? null : ToChain.text
30+
queryParams: new BridgeQueryParams
31+
{
32+
FromTokenAddress = FromTokenAddress.text.IsNullOrEmpty() ? null : FromTokenAddress.text,
33+
FromChainID = FromChain.text.IsNullOrEmpty() ? null : FromChain.text,
34+
ToTokenAddress = ToTokenAddress.text.IsNullOrEmpty() ? null : ToTokenAddress.text,
35+
ToChainID = ToChain.text.IsNullOrEmpty() ? null : ToChain.text
36+
}
3437
);
3538

3639
Application.OpenURL(link);

sample/Assets/Scripts/Marketplace/OnRampScript.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,13 @@ public void OpenWidget()
5050
environment: environment,
5151
email: email,
5252
address: walletAddress,
53-
fiatCurrency: FiatCurrencyInput.text.IsNullOrEmpty() ? "USD" : FiatCurrencyInput.text,
54-
fiatAmount: FiatAmountInput.text.IsNullOrEmpty() ? "50" : FiatAmountInput.text,
55-
cryptoCurrency: CryptoCurrency.text.IsNullOrEmpty() ? "IMX" : CryptoCurrency.text,
56-
cryptoCurrencyList: CryptoCurrencyList.text.IsNullOrEmpty() ? "imx,eth,usdc" : CryptoCurrencyList.text
53+
queryParams: new OnRampQueryParams
54+
{
55+
FiatCurrency = FiatCurrencyInput.text.IsNullOrEmpty() ? "USD" : FiatCurrencyInput.text,
56+
FiatAmount = FiatAmountInput.text.IsNullOrEmpty() ? "50" : FiatAmountInput.text,
57+
CryptoCurrency = CryptoCurrency.text.IsNullOrEmpty() ? "IMX" : CryptoCurrency.text,
58+
CryptoCurrencyList = CryptoCurrencyList.text.IsNullOrEmpty() ? "imx,eth,usdc" : CryptoCurrencyList.text
59+
}
5760
);
5861

5962
Application.OpenURL(link);
@@ -66,5 +69,4 @@ public void Cancel()
6669
{
6770
SceneManager.LoadScene("MarketplaceScene");
6871
}
69-
70-
}
72+
}

sample/Assets/Scripts/Marketplace/SwapScript.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,11 @@ public void OpenWidget()
4444
var link = LinkFactory.GenerateSwapLink(
4545
environment: environment,
4646
publishableKey: publishableKey,
47-
fromTokenAddress: FromTokenAddress.text.IsNullOrEmpty() ? null : FromTokenAddress.text,
48-
toTokenAddress: ToTokenAddress.text.IsNullOrEmpty() ? null : ToTokenAddress.text
47+
queryParams: new SwapQueryParams
48+
{
49+
FromTokenAddress = FromTokenAddress.text.IsNullOrEmpty() ? null : FromTokenAddress.text,
50+
ToTokenAddress = ToTokenAddress.text.IsNullOrEmpty() ? null : ToTokenAddress.text
51+
}
4952
);
5053

5154
Application.OpenURL(link);

src/Packages/Marketplace/Runtime/LinkFactory.cs

Lines changed: 30 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,19 @@ public class LinkFactory
1212
/// <param name="environment">Specifies the environment (<c>Sandbox</c> or <c>Production</c>).</param>
1313
/// <param name="email">The user's email address, pre-filled in the on-ramp flow.</param>
1414
/// <param name="address">The user's wallet address, where tokens will be sent.</param>
15-
/// <param name="fiatCurrency">The fiat currency to use (default: "USD").</param>
16-
/// <param name="fiatAmount">The amount of fiat currency to spend when purchasing cryptocurrency (default: "50").</param>
17-
/// <param name="cryptoCurrency">The cryptocurrency to purchase (default: "IMX").</param>
18-
/// <param name="cryptoCurrencyList">A comma-separated list of available cryptocurrencies for purchase (default: "imx,eth,usdc").</param>
15+
/// <param name="queryParams">The query parameters for the on-ramp flow. Uses default values if not specified.</param>
1916
/// <returns>The generated on-ramp URL.</returns>
2017
public static string GenerateOnRampLink(
2118
Environment environment,
2219
string email,
2320
string address,
24-
string fiatCurrency = "USD",
25-
string fiatAmount = "50",
26-
string cryptoCurrency = "IMX",
27-
string cryptoCurrencyList = "imx,eth,usdc"
21+
OnRampQueryParams queryParams = default
2822
)
2923
{
3024
var baseUrl = LinkConfig.GetBaseUrl(environment, Flow.OnRamp);
3125
var apiKey = LinkConfig.GetApiKey(environment, Flow.OnRamp);
3226

33-
var queryParams = new Dictionary<string, string>
27+
var queryParamsDictionary = new Dictionary<string, string>
3428
{
3529
{"apiKey", apiKey},
3630
{"network", "immutablezkevm"},
@@ -39,17 +33,17 @@ public static string GenerateOnRampLink(
3933
{"productsAvailed", "buy"},
4034
{"exchangeScreenTitle", "Buy"},
4135
{"themeColor", "0D0D0D"},
42-
{"defaultCryptoCurrency", cryptoCurrency},
36+
{"defaultCryptoCurrency", queryParams.CryptoCurrency},
4337
{"email", Uri.EscapeDataString(email)},
4438
{"isAutoFillUserData", "true"},
4539
{"disableWalletAddressForm", "true"},
46-
{"defaultFiatAmount", fiatAmount},
47-
{"defaultFiatCurrency", fiatCurrency},
40+
{"defaultFiatAmount", queryParams.FiatAmount},
41+
{"defaultFiatCurrency", queryParams.FiatCurrency},
4842
{"walletAddress", address},
49-
{"cryptoCurrencyList", cryptoCurrencyList}
43+
{"cryptoCurrencyList", queryParams.CryptoCurrencyList}
5044
};
5145

52-
var queryString = string.Join("&", queryParams.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
46+
var queryString = string.Join("&", queryParamsDictionary.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
5347
return $"{baseUrl}?{queryString}";
5448
}
5549

@@ -58,72 +52,64 @@ public static string GenerateOnRampLink(
5852
/// </summary>
5953
/// <param name="environment">Specifies the environment (<c>Sandbox</c> or <c>Production</c>).</param>
6054
/// <param name="publishableKey">The publishable key obtained from <a href="https://hub.immutable.com/">Immutable Hub</a>. See <a href="https://docs.immutable.com/api/zkEVM/apikeys">API keys</a> for more details.</param>
61-
/// <param name="fromTokenAddress">The address of the token being swapped from (default is null).</param>
62-
/// <param name="toTokenAddress">The address of the token being swapped to (default is null).</param>
63-
/// <returns>A swap URL</returns>
55+
/// <param name="queryParams">The query parameters for the swap flow. Uses default values if not specified.</param>
56+
/// <returns>A swap URL.</returns>
6457
public static string GenerateSwapLink(
6558
Environment environment,
6659
string publishableKey,
67-
string? fromTokenAddress = null,
68-
string? toTokenAddress = null
60+
SwapQueryParams queryParams = default
6961
)
7062
{
7163
var baseUrl = LinkConfig.GetBaseUrl(environment, Flow.Swap);
7264

73-
var queryParams = new Dictionary<string, string>
65+
var queryParamsDictionary = new Dictionary<string, string>
7466
{
7567
{"publishableKey", publishableKey}
7668
};
7769

78-
if (!string.IsNullOrEmpty(fromTokenAddress))
70+
if (!string.IsNullOrEmpty(queryParams.FromTokenAddress))
7971
{
80-
queryParams["fromTokenAddress"] = fromTokenAddress;
72+
queryParamsDictionary["fromTokenAddress"] = queryParams.FromTokenAddress;
8173
}
8274

83-
if (!string.IsNullOrEmpty(toTokenAddress))
75+
if (!string.IsNullOrEmpty(queryParams.ToTokenAddress))
8476
{
85-
queryParams["toTokenAddress"] = toTokenAddress;
77+
queryParamsDictionary["toTokenAddress"] = queryParams.ToTokenAddress;
8678
}
8779

88-
var queryString = string.Join("&", queryParams.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
80+
var queryString = string.Join("&", queryParamsDictionary.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
8981
return $"{baseUrl}?{queryString}";
9082
}
9183

9284
/// <summary>
9385
/// Generates a link for the bridge flow.
9486
/// </summary>
9587
/// <param name="environment">Specifies the environment (<c>Sandbox</c> or <c>Production</c>).</param>
96-
/// <param name="fromTokenAddress">The address of the token being moved from (default is null).</param>
97-
/// <param name="fromChainID">The ID of the source blockchain (default is null).</param>
98-
/// <param name="toTokenAddress">The address of the token being moved to (default is null).</param>
99-
/// <param name="toChainID">The ID of the destination blockchain (default is null).</param>
88+
/// <param name="queryParams">The query parameters for the bridge flow. Uses default values if not specified.</param>
10089
/// <returns>A bridge URL.</returns>
10190
public static string GenerateBridgeLink(
10291
Environment environment,
103-
string? fromTokenAddress = null,
104-
string? fromChainID = null,
105-
string? toTokenAddress = null,
106-
string? toChainID = null
92+
BridgeQueryParams queryParams = default
10793
)
10894
{
10995
var baseUrl = LinkConfig.GetBaseUrl(environment, Flow.Bridge);
11096

111-
var queryParams = new Dictionary<string, string>();
97+
var queryParamsDictionary = new Dictionary<string, string>();
11298

113-
if (!string.IsNullOrEmpty(fromTokenAddress))
114-
queryParams["fromToken"] = fromTokenAddress.ToLower();
99+
if (!string.IsNullOrEmpty(queryParams.FromTokenAddress))
100+
queryParamsDictionary["fromToken"] = queryParams.FromTokenAddress.ToLower();
115101

116-
if (!string.IsNullOrEmpty(fromChainID))
117-
queryParams["fromChain"] = fromChainID;
102+
if (!string.IsNullOrEmpty(queryParams.FromChainID))
103+
queryParamsDictionary["fromChain"] = queryParams.FromChainID;
118104

119-
if (!string.IsNullOrEmpty(toTokenAddress))
120-
queryParams["toToken"] = toTokenAddress.ToLower();
105+
if (!string.IsNullOrEmpty(queryParams.ToTokenAddress))
106+
queryParamsDictionary["toToken"] = queryParams.ToTokenAddress.ToLower();
121107

122-
if (!string.IsNullOrEmpty(toChainID))
123-
queryParams["toChain"] = toChainID;
108+
if (!string.IsNullOrEmpty(queryParams.ToChainID))
109+
queryParamsDictionary["toChain"] = queryParams.ToChainID;
124110

125-
var queryString = string.Join("&", queryParams.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
111+
var queryString = string.Join("&", queryParamsDictionary.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
126112
return $"{baseUrl}?{queryString}";
127113
}
128114
}
129-
}
115+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
namespace Immutable.Marketplace
2+
{
3+
/// <summary>
4+
/// Represents the query parameters for generating an on-ramp URL.
5+
/// </summary>
6+
public struct OnRampQueryParams
7+
{
8+
/// <summary>
9+
/// The fiat currency to use (default: "USD").
10+
/// </summary>
11+
public string FiatCurrency { get; set; }
12+
13+
/// <summary>
14+
/// The amount of fiat currency to spend when purchasing cryptocurrency (default: "50").
15+
/// </summary>
16+
public string FiatAmount { get; set; }
17+
18+
/// <summary>
19+
/// The cryptocurrency to purchase (default: "IMX").
20+
/// </summary>
21+
public string CryptoCurrency { get; set; }
22+
23+
/// <summary>
24+
/// A comma-separated list of available cryptocurrencies for purchase (default: "imx,eth,usdc").
25+
/// </summary>
26+
public string CryptoCurrencyList { get; set; }
27+
}
28+
29+
/// <summary>
30+
/// Represents the query parameters for generating a swap URL.
31+
/// </summary>
32+
public struct SwapQueryParams
33+
{
34+
/// <summary>
35+
/// The address of the token being swapped from (default is null).
36+
/// </summary>
37+
public string? FromTokenAddress { get; set; }
38+
39+
/// <summary>
40+
/// The address of the token being swapped to (default is null).
41+
/// </summary>
42+
public string? ToTokenAddress { get; set; }
43+
}
44+
45+
/// <summary>
46+
/// Represents the query parameters for generating a bridge URL.
47+
/// </summary>
48+
public struct BridgeQueryParams
49+
{
50+
/// <summary>
51+
/// The address of the token being moved from (default is null).
52+
/// </summary>
53+
public string? FromTokenAddress { get; set; }
54+
55+
/// <summary>
56+
/// The ID of the source blockchain (default is null).
57+
/// </summary>
58+
public string? FromChainID { get; set; }
59+
60+
/// <summary>
61+
/// The address of the token being moved to (default is null).
62+
/// </summary>
63+
public string? ToTokenAddress { get; set; }
64+
65+
/// <summary>
66+
/// The ID of the destination blockchain (default is null).
67+
/// </summary>
68+
public string? ToChainID { get; set; }
69+
}
70+
}

src/Packages/Marketplace/Runtime/LinkQueryParams.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)