Skip to content

Commit 80d4887

Browse files
committed
feat: add extra query params field to generate on ramp link
1 parent 89e14b7 commit 80d4887

File tree

3 files changed

+94
-34
lines changed

3 files changed

+94
-34
lines changed

sample/Assets/Scripts/Marketplace/OnRampScript.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using AltWebSocketSharp;
34
using Immutable.Marketplace;
45
using UnityEngine;
@@ -52,10 +53,13 @@ public void OpenWidget()
5253
address: walletAddress,
5354
queryParams: new OnRampQueryParams
5455
{
55-
FiatCurrency = FiatCurrencyInput.text.IsNullOrEmpty() ? "USD" : FiatCurrencyInput.text,
56-
FiatAmount = FiatAmountInput.text.IsNullOrEmpty() ? "50" : FiatAmountInput.text,
57-
CryptoCurrency = CryptoCurrency.text.IsNullOrEmpty() ? "IMX" : CryptoCurrency.text,
56+
DefaultFiatCurrency = FiatCurrencyInput.text.IsNullOrEmpty() ? "USD" : FiatCurrencyInput.text,
57+
DefaultFiatAmount = FiatAmountInput.text.IsNullOrEmpty() ? "50" : FiatAmountInput.text,
58+
DefaultCryptoCurrency = CryptoCurrency.text.IsNullOrEmpty() ? "IMX" : CryptoCurrency.text,
5859
CryptoCurrencyList = CryptoCurrencyList.text.IsNullOrEmpty() ? "imx,eth,usdc" : CryptoCurrencyList.text
60+
},
61+
extraQueryParams: new Dictionary<string, string> {
62+
{"themeColor", "000000"},
5963
}
6064
);
6165

src/Packages/Marketplace/Runtime/LinkFactory.cs

Lines changed: 81 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,95 @@ public class LinkFactory
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>
1515
/// <param name="queryParams">The query parameters for the on-ramp flow. Uses default values if not specified.</param>
16+
/// <param name="extraQueryParams">Optional additional query parameters. See <a href="https://docs.transak.com/docs/customization-options">Transak docs</a> for possible fields.</param>
1617
/// <returns>The generated on-ramp URL.</returns>
18+
/// <remarks>
19+
/// If <paramref name="extraQueryParams"/> includes any fields that are already defined in <paramref name="queryParams"/>,
20+
/// the values in <paramref name="queryParams"/> will take precedence.
21+
/// For example, if <paramref name="extraQueryParams"/> contains "defaultFiatAmount", it will be ignored and the value
22+
/// from <paramref name="queryParams.DefaultFiatAmount"/> will be used instead.
23+
/// </remarks>
1724
public static string GenerateOnRampLink(
1825
Environment environment,
1926
string email,
2027
string address,
21-
OnRampQueryParams queryParams = default
28+
OnRampQueryParams queryParams = default,
29+
Dictionary<string, string>? extraQueryParams = null
2230
)
2331
{
2432
var baseUrl = LinkConfig.GetBaseUrl(environment, Flow.OnRamp);
2533
var apiKey = LinkConfig.GetApiKey(environment, Flow.OnRamp);
2634

2735
var queryParamsDictionary = new Dictionary<string, string>
2836
{
29-
{"apiKey", apiKey},
30-
{"network", "immutablezkevm"},
31-
{"defaultPaymentMethod", "credit_debit_card"},
32-
{"disablePaymentMethods", ""},
33-
{"productsAvailed", "buy"},
34-
{"exchangeScreenTitle", "Buy"},
35-
{"themeColor", "0D0D0D"},
36-
{"defaultCryptoCurrency", queryParams.CryptoCurrency},
37-
{"email", Uri.EscapeDataString(email)},
38-
{"isAutoFillUserData", "true"},
39-
{"disableWalletAddressForm", "true"},
40-
{"defaultFiatAmount", queryParams.FiatAmount},
41-
{"defaultFiatCurrency", queryParams.FiatCurrency},
42-
{"walletAddress", address},
43-
{"cryptoCurrencyList", queryParams.CryptoCurrencyList}
37+
{ "apiKey", apiKey },
38+
{ "cryptoCurrencyList", queryParams.CryptoCurrencyList },
39+
{ "defaultCryptoCurrency", queryParams.DefaultCryptoCurrency },
40+
{ "defaultFiatAmount", queryParams.DefaultFiatAmount },
41+
{ "defaultFiatCurrency", queryParams.DefaultFiatCurrency },
42+
{
43+
"defaultPaymentMethod",
44+
extraQueryParams != null &&
45+
extraQueryParams.TryGetValue("defaultPaymentMethod", out var defaultPaymentMethod)
46+
? defaultPaymentMethod
47+
: "credit_debit_card"
48+
},
49+
{
50+
"disablePaymentMethods",
51+
extraQueryParams != null &&
52+
extraQueryParams.TryGetValue("disablePaymentMethods", out var disablePaymentMethods)
53+
? disablePaymentMethods
54+
: ""
55+
},
56+
{
57+
"disableWalletAddressForm",
58+
extraQueryParams != null &&
59+
extraQueryParams.TryGetValue("disableWalletAddressForm", out var disableWalletAddressForm)
60+
? disableWalletAddressForm
61+
: "true"
62+
},
63+
{ "email", Uri.EscapeDataString(email) },
64+
{
65+
"exchangeScreenTitle",
66+
extraQueryParams != null &&
67+
extraQueryParams.TryGetValue("exchangeScreenTitle", out var exchangeScreenTitle)
68+
? exchangeScreenTitle
69+
: "Buy"
70+
},
71+
{
72+
"isAutoFillUserData",
73+
extraQueryParams != null &&
74+
extraQueryParams.TryGetValue("isAutoFillUserData", out var isAutoFillUserData)
75+
? isAutoFillUserData
76+
: "true"
77+
},
78+
{ "network", "immutablezkevm" },
79+
{ "productsAvailed", "buy" },
80+
{
81+
"themeColor",
82+
extraQueryParams != null && extraQueryParams.TryGetValue("themeColor", out var themeColor)
83+
? themeColor
84+
: "0D0D0D"
85+
},
86+
{ "walletAddress", address }
4487
};
4588

46-
var queryString = string.Join("&", queryParamsDictionary.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
89+
90+
// Add any extra parameters that are not already in the queryParamsDictionary
91+
if (extraQueryParams != null)
92+
{
93+
foreach (var kvp in extraQueryParams)
94+
{
95+
// Add to dictionary only if the key is not already in the dictionary
96+
if (!queryParamsDictionary.ContainsKey(kvp.Key))
97+
{
98+
queryParamsDictionary[kvp.Key] = kvp.Value;
99+
}
100+
}
101+
}
102+
103+
var queryString = string.Join("&",
104+
queryParamsDictionary.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
47105
return $"{baseUrl}?{queryString}";
48106
}
49107

@@ -64,20 +122,17 @@ public static string GenerateSwapLink(
64122

65123
var queryParamsDictionary = new Dictionary<string, string>
66124
{
67-
{"publishableKey", publishableKey}
125+
{ "publishableKey", publishableKey }
68126
};
69127

70128
if (!string.IsNullOrEmpty(queryParams.FromTokenAddress))
71-
{
72129
queryParamsDictionary["fromTokenAddress"] = queryParams.FromTokenAddress;
73-
}
74130

75131
if (!string.IsNullOrEmpty(queryParams.ToTokenAddress))
76-
{
77132
queryParamsDictionary["toTokenAddress"] = queryParams.ToTokenAddress;
78-
}
79133

80-
var queryString = string.Join("&", queryParamsDictionary.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
134+
var queryString = string.Join("&",
135+
queryParamsDictionary.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
81136
return $"{baseUrl}?{queryString}";
82137
}
83138

@@ -108,8 +163,9 @@ public static string GenerateBridgeLink(
108163
if (!string.IsNullOrEmpty(queryParams.ToChainID))
109164
queryParamsDictionary["toChain"] = queryParams.ToChainID;
110165

111-
var queryString = string.Join("&", queryParamsDictionary.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
166+
var queryString = string.Join("&",
167+
queryParamsDictionary.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray());
112168
return $"{baseUrl}?{queryString}";
113169
}
114170
}
115-
}
171+
}

src/Packages/Marketplace/Runtime/LinkQueryParams.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@ namespace Immutable.Marketplace
66
public struct OnRampQueryParams
77
{
88
/// <summary>
9-
/// The fiat currency to use (default: "USD").
9+
/// The cryptocurrency to purchase (default: "IMX").
1010
/// </summary>
11-
public string FiatCurrency { get; set; }
11+
public string DefaultCryptoCurrency { get; set; }
1212

1313
/// <summary>
1414
/// The amount of fiat currency to spend when purchasing cryptocurrency (default: "50").
1515
/// </summary>
16-
public string FiatAmount { get; set; }
16+
public string DefaultFiatAmount { get; set; }
1717

1818
/// <summary>
19-
/// The cryptocurrency to purchase (default: "IMX").
19+
/// The fiat currency to use (default: "USD").
2020
/// </summary>
21-
public string CryptoCurrency { get; set; }
21+
public string DefaultFiatCurrency { get; set; }
2222

2323
/// <summary>
2424
/// A comma-separated list of available cryptocurrencies for purchase (default: "imx,eth,usdc").
@@ -67,4 +67,4 @@ public struct BridgeQueryParams
6767
/// </summary>
6868
public string? ToChainID { get; set; }
6969
}
70-
}
70+
}

0 commit comments

Comments
 (0)