From 529df0f7963ab0a4639814790453a2eb582a6548 Mon Sep 17 00:00:00 2001 From: Andrew Yang Date: Thu, 26 Sep 2024 12:53:56 +1000 Subject: [PATCH 1/3] feat: add Marketplace package to support onramp --- .github/workflows/update-version.yml | 66 +++++++++++++++--- .../Marketplace/Immutable.Marketplace.asmdef | 19 ++++++ .../Immutable.Marketplace.asmdef.meta | 7 ++ src/Packages/Marketplace/OnRamp.meta | 8 +++ src/Packages/Marketplace/OnRamp/OnRamp.cs | 67 +++++++++++++++++++ .../Marketplace/OnRamp/OnRamp.cs.meta | 11 +++ src/Packages/Marketplace/package.json | 19 ++++++ src/Packages/Marketplace/package.json.meta | 7 ++ 8 files changed, 193 insertions(+), 11 deletions(-) create mode 100644 src/Packages/Marketplace/Immutable.Marketplace.asmdef create mode 100644 src/Packages/Marketplace/Immutable.Marketplace.asmdef.meta create mode 100644 src/Packages/Marketplace/OnRamp.meta create mode 100644 src/Packages/Marketplace/OnRamp/OnRamp.cs create mode 100644 src/Packages/Marketplace/OnRamp/OnRamp.cs.meta create mode 100644 src/Packages/Marketplace/package.json create mode 100644 src/Packages/Marketplace/package.json.meta diff --git a/.github/workflows/update-version.yml b/.github/workflows/update-version.yml index e5e932a0..a64357cd 100644 --- a/.github/workflows/update-version.yml +++ b/.github/workflows/update-version.yml @@ -1,12 +1,21 @@ --- -name: "Update version in package.json" +name: "Update SDK version" on: workflow_dispatch: inputs: - version: - description: 'Version to update to (e.g. 1.20.0)' + upgrade_type: + type: choice + description: Upgrade Type + options: + - patch + - minor + # - major required: true + default: patch + +env: + UPGRADE_TYPE: ${{ github.event.inputs.upgrade_type || 'patch' }} jobs: update: @@ -37,19 +46,54 @@ jobs: - name: Install jq run: sudo apt-get install -y jq - - name: Replace version string + - name: Update Version in package.json id: replace_version run: | - FILE=./src/Packages/Passport/package.json - VERSION=${{ github.event.inputs.version }} - jq --arg version "$VERSION" '.version = $version' $FILE > tmp.$$.json && mv tmp.$$.json $FILE + PASSPORT_FILE=./src/Packages/Passport/package.json + MARKETPLACE_FILE=./src/Packages/Marketplace/package.json + + CURRENT_VERSION=$(jq -r '.version' $PASSPORT_FILE) + IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION" + + # Increment version based on UPGRADE_TYPE + case "$UPGRADE_TYPE" in + major) + MAJOR=$((MAJOR + 1)) + MINOR=0 + PATCH=0 + ;; + minor) + MINOR=$((MINOR + 1)) + PATCH=0 + ;; + patch) + PATCH=$((PATCH + 1)) + ;; + *) + echo "Invalid upgrade type: $UPGRADE_TYPE" + exit 1 + ;; + esac + + NEW_VERSION="$MAJOR.$MINOR.$PATCH" + + # Update Passport package.json + jq --arg version "$NEW_VERSION" '.version = $version' $PASSPORT_FILE > tmp.$$.json && mv tmp.$$.json $PASSPORT_FILE + echo "Updated version in Passport package.json from $CURRENT_VERSION to $NEW_VERSION" + + # Update Marketplace package.json + jq --arg version "$NEW_VERSION" '.version = $version' $MARKETPLACE_FILE > tmp.$$.json && mv tmp.$$.json $MARKETPLACE_FILE + echo "Updated version in Marketplace package.json from $CURRENT_VERSION to $NEW_VERSION" + + echo "version=$NEW_VERSION" >> "$GITHUB_OUTPUT" - - name: Replace engine sdk version string + - name: Update SDK Version in SdkVersionInfoHelpers.cs id: replace_engine_sdk_version run: | FILE=./src/Packages/Passport/Runtime/Scripts/Private/Helpers/SdkVersionInfoHelpers.cs - VERSION=${{ github.event.inputs.version }} - sed -i -E "s/[0-9]+\.[0-9]+\.[0-9]+/$VERSION/g" $FILE + NEW_VERSION="${{ steps.replace_version.outputs.version }}" + sed -i -E "s/[0-9]+\.[0-9]+\.[0-9]+/$NEW_VERSION/g" $FILE + echo "Updated SDK version in SdkVersionInfoHelpers.cs to $NEW_VERSION" - uses: gr2m/create-or-update-pull-request-action@v1 env: @@ -57,6 +101,6 @@ jobs: with: title: "chore: update version" body: "Update version in package.json" - branch: "chore/update-version-${{ github.event.inputs.version }}" + branch: "chore/update-version-${{ steps.replace_version.outputs.version }}" commit-message: "chore: update version" labels: release diff --git a/src/Packages/Marketplace/Immutable.Marketplace.asmdef b/src/Packages/Marketplace/Immutable.Marketplace.asmdef new file mode 100644 index 00000000..b0210703 --- /dev/null +++ b/src/Packages/Marketplace/Immutable.Marketplace.asmdef @@ -0,0 +1,19 @@ +{ + "name": "Immutable.Integrations", + "rootNamespace": "Immutable.Integrations", + "references": [ + "UniTask", + "Immutable.Browser.Core", + "Immutable.Passport.Runtime.Public", + "Immutable.Passport.Runtime.Private" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/src/Packages/Marketplace/Immutable.Marketplace.asmdef.meta b/src/Packages/Marketplace/Immutable.Marketplace.asmdef.meta new file mode 100644 index 00000000..660cfded --- /dev/null +++ b/src/Packages/Marketplace/Immutable.Marketplace.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c7a369c5a572d4b6b84cab646212889e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Marketplace/OnRamp.meta b/src/Packages/Marketplace/OnRamp.meta new file mode 100644 index 00000000..1397a22e --- /dev/null +++ b/src/Packages/Marketplace/OnRamp.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ddb0de63ab0184d7fb2cf71a08124a02 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Marketplace/OnRamp/OnRamp.cs b/src/Packages/Marketplace/OnRamp/OnRamp.cs new file mode 100644 index 00000000..593d39bf --- /dev/null +++ b/src/Packages/Marketplace/OnRamp/OnRamp.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace Immutable.Marketplace.OnRamp +{ + public class OnRamp + { + private readonly Passport.Passport _passport; + private static readonly Dictionary TransakBaseUrls = new Dictionary + { + { "sandbox", "https://global-stg.transak.com" }, + { "production", "https://global.transak.com/" } + }; + + private static readonly Dictionary TransakApiKeys = new Dictionary + { + { "sandbox", "d14b44fb-0f84-4db5-affb-e044040d724b" }, // This can be hardcoded as it is a public API key + { "production", "ad1bca70-d917-4628-bb0f-5609537498bc" } + }; + + public OnRamp(Passport.Passport passport) + { + _passport = passport; + } + + public async UniTask GetLink( + string fiatCurrency = "USD", + string defaultFiatAmount = "50", + string defaultCryptoCurrency = "IMX", + string networks = "immutablezkevm", + bool disableWalletAddressForm = true) + { + await _passport.ConnectImx(); + string environment = _passport.GetPassportImpl().environment; + + string email = await _passport.GetEmail(); + string walletAddress = await _passport.GetAddress(); + string baseUrl = TransakBaseUrls[environment]; + string apiKey = TransakApiKeys[environment]; + + var queryParams = new Dictionary + { + {"apiKey", apiKey}, + {"network", networks}, + {"defaultPaymentMethod", "credit_debit_card"}, + {"disablePaymentMethods", ""}, + {"productsAvailed", "buy"}, + {"exchangeScreenTitle", "Buy"}, + {"themeColor", "0D0D0D"}, + {"defaultCryptoCurrency", defaultCryptoCurrency}, + {"email", Uri.EscapeDataString(email)}, + {"isAutoFillUserData", "true"}, + {"disableWalletAddressForm", disableWalletAddressForm.ToString().ToLower()}, + {"defaultFiatAmount", defaultFiatAmount}, + {"defaultFiatCurrency", fiatCurrency}, + {"walletAddress", walletAddress}, + {"cryptoCurrencyList", "imx,eth,usdc"} + }; + + string queryString = string.Join("&", queryParams.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray()); + return $"{baseUrl}?{queryString}"; + } + } +} \ No newline at end of file diff --git a/src/Packages/Marketplace/OnRamp/OnRamp.cs.meta b/src/Packages/Marketplace/OnRamp/OnRamp.cs.meta new file mode 100644 index 00000000..3efcaadd --- /dev/null +++ b/src/Packages/Marketplace/OnRamp/OnRamp.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebb99edbcb8c04a90abe7d962fef8a3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Marketplace/package.json b/src/Packages/Marketplace/package.json new file mode 100644 index 00000000..5d5ad25c --- /dev/null +++ b/src/Packages/Marketplace/package.json @@ -0,0 +1,19 @@ +{ + "name": "com.immutable.marketplace", + "version": "1.26.0", + "description": "Marketplace package for the Immutable SDK for Unity", + "displayName": "Immutable Marketplace", + "author": { + "name": "Immutable", + "url": "https://immutable.com" + }, + "dependencies": { + "com.cysharp.unitask": "2.3.3" + }, + "keywords": [ + "unity", + "immutable", + "Marketplace" + ], + "unity": "2021.3" +} \ No newline at end of file diff --git a/src/Packages/Marketplace/package.json.meta b/src/Packages/Marketplace/package.json.meta new file mode 100644 index 00000000..8b4b6fe2 --- /dev/null +++ b/src/Packages/Marketplace/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4a4f5fed79b484dd19b5d58d6d6fc129 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From f3d05063db56593608b893c3743d0f3d44b35ab0 Mon Sep 17 00:00:00 2001 From: Andrew Yang Date: Thu, 26 Sep 2024 13:08:54 +1000 Subject: [PATCH 2/3] ci: rename to marketplace --- src/Packages/Marketplace/Immutable.Marketplace.asmdef | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Packages/Marketplace/Immutable.Marketplace.asmdef b/src/Packages/Marketplace/Immutable.Marketplace.asmdef index b0210703..c1fb98aa 100644 --- a/src/Packages/Marketplace/Immutable.Marketplace.asmdef +++ b/src/Packages/Marketplace/Immutable.Marketplace.asmdef @@ -1,6 +1,6 @@ { - "name": "Immutable.Integrations", - "rootNamespace": "Immutable.Integrations", + "name": "Immutable.Marketplace", + "rootNamespace": "Immutable.Marketplace", "references": [ "UniTask", "Immutable.Browser.Core", From a63bf2f058999d2fd61080e0e5f00e2efdb12dfe Mon Sep 17 00:00:00 2001 From: Andrew Yang Date: Thu, 26 Sep 2024 13:40:28 +1000 Subject: [PATCH 3/3] chore: not pass passport instance --- .../Marketplace/Immutable.Marketplace.asmdef | 5 +-- src/Packages/Marketplace/OnRamp/OnRamp.cs | 34 +++++++++---------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/Packages/Marketplace/Immutable.Marketplace.asmdef b/src/Packages/Marketplace/Immutable.Marketplace.asmdef index c1fb98aa..22613b38 100644 --- a/src/Packages/Marketplace/Immutable.Marketplace.asmdef +++ b/src/Packages/Marketplace/Immutable.Marketplace.asmdef @@ -2,10 +2,7 @@ "name": "Immutable.Marketplace", "rootNamespace": "Immutable.Marketplace", "references": [ - "UniTask", - "Immutable.Browser.Core", - "Immutable.Passport.Runtime.Public", - "Immutable.Passport.Runtime.Private" + "UniTask" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/src/Packages/Marketplace/OnRamp/OnRamp.cs b/src/Packages/Marketplace/OnRamp/OnRamp.cs index 593d39bf..3c28b421 100644 --- a/src/Packages/Marketplace/OnRamp/OnRamp.cs +++ b/src/Packages/Marketplace/OnRamp/OnRamp.cs @@ -8,7 +8,9 @@ namespace Immutable.Marketplace.OnRamp { public class OnRamp { - private readonly Passport.Passport _passport; + private readonly string _environment; + private readonly string _email; + private readonly string _address; private static readonly Dictionary TransakBaseUrls = new Dictionary { { "sandbox", "https://global-stg.transak.com" }, @@ -21,25 +23,23 @@ public class OnRamp { "production", "ad1bca70-d917-4628-bb0f-5609537498bc" } }; - public OnRamp(Passport.Passport passport) + public OnRamp(string environment, string email, string address) { - _passport = passport; + _environment = environment; + _email = email; + _address = address; } public async UniTask GetLink( - string fiatCurrency = "USD", - string defaultFiatAmount = "50", - string defaultCryptoCurrency = "IMX", - string networks = "immutablezkevm", - bool disableWalletAddressForm = true) + string fiatCurrency = "USD", + string defaultFiatAmount = "50", + string defaultCryptoCurrency = "IMX", + string networks = "immutablezkevm", + bool disableWalletAddressForm = true + ) { - await _passport.ConnectImx(); - string environment = _passport.GetPassportImpl().environment; - - string email = await _passport.GetEmail(); - string walletAddress = await _passport.GetAddress(); - string baseUrl = TransakBaseUrls[environment]; - string apiKey = TransakApiKeys[environment]; + string baseUrl = TransakBaseUrls[_environment]; + string apiKey = TransakApiKeys[_environment]; var queryParams = new Dictionary { @@ -51,12 +51,12 @@ public async UniTask GetLink( {"exchangeScreenTitle", "Buy"}, {"themeColor", "0D0D0D"}, {"defaultCryptoCurrency", defaultCryptoCurrency}, - {"email", Uri.EscapeDataString(email)}, + {"email", Uri.EscapeDataString(_email)}, {"isAutoFillUserData", "true"}, {"disableWalletAddressForm", disableWalletAddressForm.ToString().ToLower()}, {"defaultFiatAmount", defaultFiatAmount}, {"defaultFiatCurrency", fiatCurrency}, - {"walletAddress", walletAddress}, + {"walletAddress", _address}, {"cryptoCurrencyList", "imx,eth,usdc"} };