From 300f18b109483bb1367db524dd08ab1bc23c8059 Mon Sep 17 00:00:00 2001
From: Azizi <64193693+azizi-a@users.noreply.github.com>
Date: Fri, 26 Apr 2024 14:15:51 +0100
Subject: [PATCH 1/2] feat: add alternate init dapp-definition field name

---
 packages/dapp-toolkit/src/_types.ts             | 17 ++++++++++++++---
 packages/dapp-toolkit/src/radix-dapp-toolkit.ts |  3 ++-
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/packages/dapp-toolkit/src/_types.ts b/packages/dapp-toolkit/src/_types.ts
index d1d2dbff..9f47b815 100644
--- a/packages/dapp-toolkit/src/_types.ts
+++ b/packages/dapp-toolkit/src/_types.ts
@@ -95,10 +95,21 @@ export type OptionalRadixDappToolkitOptions = {
   enableMobile: boolean
 }
 
-export type RadixDappToolkitOptions = {
+type RequiredRadixDappToolkitOptions = {
   networkId: number
-  dAppDefinitionAddress: string
-} & Partial<OptionalRadixDappToolkitOptions>
+} & (
+  | {
+      dAppDefinitionAddress: string
+      applicationDappDefinitionAddress?: never
+    }
+  | {
+      dAppDefinitionAddress?: never
+      applicationDappDefinitionAddress: string
+    }
+)
+
+export type RadixDappToolkitOptions = Partial<OptionalRadixDappToolkitOptions> &
+  RequiredRadixDappToolkitOptions
 
 export type SendTransactionResult = ResultAsync<
   {
diff --git a/packages/dapp-toolkit/src/radix-dapp-toolkit.ts b/packages/dapp-toolkit/src/radix-dapp-toolkit.ts
index 2db52ae2..99ad1c08 100644
--- a/packages/dapp-toolkit/src/radix-dapp-toolkit.ts
+++ b/packages/dapp-toolkit/src/radix-dapp-toolkit.ts
@@ -22,8 +22,9 @@ export type RadixDappToolkit = {
 export const RadixDappToolkit = (
   options: RadixDappToolkitOptions,
 ): RadixDappToolkit => {
+  const dAppDefinitionAddress =
+    options.dAppDefinitionAddress ?? options.applicationDappDefinitionAddress
   const {
-    dAppDefinitionAddress,
     networkId,
     providers,
     logger,

From bf8f1b58ccfaf5dafe41d7338769f1ab56af3e9f Mon Sep 17 00:00:00 2001
From: Azizi <64193693+azizi-a@users.noreply.github.com>
Date: Mon, 29 Apr 2024 11:00:07 +0100
Subject: [PATCH 2/2] feat: add gateway api client config

---
 examples/simple-dapp/package.json             |  1 +
 examples/simple-dapp/src/main.ts              | 23 ++++++++++++++---
 examples/simple-dapp/src/style.css            |  1 -
 package-lock.json                             |  6 +++++
 packages/dapp-toolkit/src/_types.ts           |  7 ++++++
 .../dapp-toolkit/src/gateway/gateway-api.ts   | 16 +++++-------
 .../helpers/generate-gateway-api-config.ts    | 20 +++++++++++++++
 .../dapp-toolkit/src/radix-dapp-toolkit.ts    | 25 +++++++++++++------
 8 files changed, 77 insertions(+), 22 deletions(-)
 create mode 100644 packages/dapp-toolkit/src/helpers/generate-gateway-api-config.ts

diff --git a/examples/simple-dapp/package.json b/examples/simple-dapp/package.json
index 70df0d05..a993c923 100644
--- a/examples/simple-dapp/package.json
+++ b/examples/simple-dapp/package.json
@@ -10,6 +10,7 @@
     "deploy": "sst deploy"
   },
   "dependencies": {
+    "@radixdlt/babylon-gateway-api-sdk": "^1.4.1",
     "@radixdlt/radix-dapp-toolkit": "*"
   },
   "devDependencies": {
diff --git a/examples/simple-dapp/src/main.ts b/examples/simple-dapp/src/main.ts
index 7d533821..856ae5cc 100644
--- a/examples/simple-dapp/src/main.ts
+++ b/examples/simple-dapp/src/main.ts
@@ -1,3 +1,4 @@
+import { GatewayApiClient } from '@radixdlt/babylon-gateway-api-sdk'
 import './style.css'
 import {
   RadixDappToolkit,
@@ -28,6 +29,8 @@ content.innerHTML = `
   <pre id="walletResponse"></pre>
   <pre id="requests"></pre>
   <pre id="state"></pre>
+  <pre id="gatewayConfig"></pre>
+  <pre id="gatewayStatus"></pre>
   <pre id="device"></pre>
   <pre id="logs"></pre>
 `
@@ -39,6 +42,8 @@ const walletResponse = document.getElementById('walletResponse')!
 const device = document.getElementById('device')!
 const logs = document.getElementById('logs')!
 const state = document.getElementById('state')!
+const gatewayConfig = document.getElementById('gatewayConfig')!
+const gatewayStatus = document.getElementById('gatewayStatus')!
 
 const logger = Logger()
 
@@ -56,7 +61,7 @@ const requestItemClient = RequestItemClient({
 })
 
 const dAppToolkit = RadixDappToolkit({
-  dAppDefinitionAddress,
+  applicationDappDefinitionAddress: dAppDefinitionAddress,
   networkId,
   enableMobile: true,
   providers: {
@@ -69,6 +74,10 @@ const dAppToolkit = RadixDappToolkit({
   logger,
 })
 
+const gatewayApi = GatewayApiClient.initialize(
+  dAppToolkit.gatewayApi.clientConfig,
+)
+
 dAppToolkit.walletApi.provideChallengeGenerator(async () =>
   [...window.crypto.getRandomValues(new Uint8Array(32))]
     .map((x) => x.toString(16).padStart(2, '0'))
@@ -77,6 +86,10 @@ dAppToolkit.walletApi.provideChallengeGenerator(async () =>
 
 dAppToolkit.walletApi.setRequestData(DataRequestBuilder.persona().withProof())
 
+gatewayConfig.innerHTML = `
+[Gateway]
+${JSON.stringify(dAppToolkit.gatewayApi.clientConfig, null, 2)}`
+
 resetButton.onclick = () => {
   sessionStore.clear()
   requestsStore.clear()
@@ -96,9 +109,13 @@ setInterval(() => {
   sessionStore.getItemList().map((value: any) => {
     sessions.innerHTML = JSON.stringify({ sessions: value }, null, 2)
   })
-  // storageClient.getPartition('identities')
+  gatewayApi.status
+    .getCurrent()
+    .then(
+      (status) => (gatewayStatus.innerHTML = JSON.stringify(status, null, 2)),
+    ) // storageClient.getPartition('identities')
   // .getState((state) => {
-  //   keyPairs.innerHTML = JSON.stringify(state, null, 2)
+  // keyPairs.innerHTML = JSON.stringify(state, null, 2)
   //   debugger
   // })
   // .map((items) => {
diff --git a/examples/simple-dapp/src/style.css b/examples/simple-dapp/src/style.css
index 3040e7bb..336f2e34 100644
--- a/examples/simple-dapp/src/style.css
+++ b/examples/simple-dapp/src/style.css
@@ -98,7 +98,6 @@ header {
 }
 
 pre {
-  width: 300px;
   text-align: left;
   overflow: auto;
 }
diff --git a/package-lock.json b/package-lock.json
index 874bfbbd..6768b549 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -76,6 +76,7 @@
     "examples/simple-dapp": {
       "version": "0.0.0",
       "dependencies": {
+        "@radixdlt/babylon-gateway-api-sdk": "^1.4.1",
         "@radixdlt/radix-dapp-toolkit": "*"
       },
       "devDependencies": {
@@ -8147,6 +8148,11 @@
         "@babel/runtime": "^7.13.10"
       }
     },
+    "node_modules/@radixdlt/babylon-gateway-api-sdk": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/@radixdlt/babylon-gateway-api-sdk/-/babylon-gateway-api-sdk-1.4.1.tgz",
+      "integrity": "sha512-oXkhGe80mZ5rGW1ZNnB1H03YpK7E2lhjW4P4Rw+zEC9QtgYl4xv5dVUjL4+g+yEPeXRKHNxkj4ko5v7jW+sh8A=="
+    },
     "node_modules/@radixdlt/connect-button": {
       "resolved": "packages/connect-button",
       "link": true
diff --git a/packages/dapp-toolkit/src/_types.ts b/packages/dapp-toolkit/src/_types.ts
index 9f47b815..cda17b7f 100644
--- a/packages/dapp-toolkit/src/_types.ts
+++ b/packages/dapp-toolkit/src/_types.ts
@@ -205,3 +205,10 @@ export type TransportProvider = {
   disconnect: () => void
   destroy: () => void
 }
+
+export type GatewayApiClientConfig = {
+  basePath: string
+  applicationName: string
+  applicationVersion: string
+  applicationDappDefinitionAddress: string
+}
diff --git a/packages/dapp-toolkit/src/gateway/gateway-api.ts b/packages/dapp-toolkit/src/gateway/gateway-api.ts
index 1763f5a6..9dde3afa 100644
--- a/packages/dapp-toolkit/src/gateway/gateway-api.ts
+++ b/packages/dapp-toolkit/src/gateway/gateway-api.ts
@@ -1,20 +1,16 @@
 import { EntityMetadataItem, TransactionStatus } from './types'
 import { fetchWrapper } from '../helpers'
 import { __VERSION__ } from '../version'
+import { GatewayApiClientConfig } from '../_types'
 
 export type GatewayApiClient = ReturnType<typeof GatewayApiClient>
 
 export const GatewayApiClient = ({
   basePath,
-  dAppDefinitionAddress,
   applicationName,
   applicationVersion,
-}: {
-  basePath: string
-  dAppDefinitionAddress?: string
-  applicationVersion?: string
-  applicationName?: string
-}) => {
+  applicationDappDefinitionAddress,
+}: GatewayApiClientConfig) => {
   const fetchWithHeaders = <T>(url: string, body: any) =>
     fetchWrapper<T>(
       fetch(`${basePath}${url}`, {
@@ -24,9 +20,9 @@ export const GatewayApiClient = ({
           'Content-Type': 'application/json',
           'RDX-Client-Name': '@radixdlt/radix-dapp-toolkit',
           'RDX-Client-Version': __VERSION__,
-          'RDX-App-Name': applicationName ?? 'Unknown',
-          'RDX-App-Version': applicationVersion ?? 'Unknown',
-          'RDX-App-Dapp-Definition': dAppDefinitionAddress ?? 'Unknown',
+          'RDX-App-Name': applicationName,
+          'RDX-App-Version': applicationVersion,
+          'RDX-App-Dapp-Definition': applicationDappDefinitionAddress,
         } as Record<string, string>,
       }),
     ).map((response) => response.data)
diff --git a/packages/dapp-toolkit/src/helpers/generate-gateway-api-config.ts b/packages/dapp-toolkit/src/helpers/generate-gateway-api-config.ts
new file mode 100644
index 00000000..b3791169
--- /dev/null
+++ b/packages/dapp-toolkit/src/helpers/generate-gateway-api-config.ts
@@ -0,0 +1,20 @@
+import { RadixNetworkConfigById } from '../gateway'
+
+export const generateGatewayApiClientConfig = ({
+  networkId,
+  dAppDefinitionAddress,
+  gatewayBaseUrl,
+  applicationName,
+  applicationVersion,
+}: {
+  networkId: number
+  dAppDefinitionAddress: string
+  gatewayBaseUrl?: string
+  applicationName?: string
+  applicationVersion?: string
+}) => ({
+  basePath: gatewayBaseUrl ?? RadixNetworkConfigById[networkId].gatewayUrl,
+  applicationName: applicationName ?? 'Unknown',
+  applicationVersion: applicationVersion ?? 'Unknown',
+  applicationDappDefinitionAddress: dAppDefinitionAddress,
+})
diff --git a/packages/dapp-toolkit/src/radix-dapp-toolkit.ts b/packages/dapp-toolkit/src/radix-dapp-toolkit.ts
index 99ad1c08..dd119298 100644
--- a/packages/dapp-toolkit/src/radix-dapp-toolkit.ts
+++ b/packages/dapp-toolkit/src/radix-dapp-toolkit.ts
@@ -1,6 +1,7 @@
 import { ConnectButtonClient } from './connect-button/connect-button-client'
 import {
   ButtonApi,
+  GatewayApiClientConfig,
   RadixDappToolkitOptions,
   SendTransactionInput,
   WalletApi,
@@ -10,11 +11,14 @@ import { GatewayClient } from './gateway/gateway'
 import { GatewayApiClient } from './gateway/gateway-api'
 import { WalletRequestClient } from './wallet-request'
 import { StateClient, WalletData } from './state'
-import { RadixNetworkConfigById } from './gateway/types'
+import { generateGatewayApiClientConfig } from './helpers/generate-gateway-api-config'
 
 export type RadixDappToolkit = {
   walletApi: WalletApi
   buttonApi: ButtonApi
+  gatewayApi: {
+    clientConfig: GatewayApiClientConfig
+  }
   disconnect: () => void
   destroy: () => void
 }
@@ -49,17 +53,19 @@ export const RadixDappToolkit = (
       },
     })
 
+  const gatewayApiClientConfig = generateGatewayApiClientConfig({
+    networkId,
+    dAppDefinitionAddress,
+    gatewayBaseUrl,
+    applicationName,
+    applicationVersion,
+  })
+
   const gatewayClient =
     providers?.gatewayClient ??
     GatewayClient({
       logger,
-      gatewayApi: GatewayApiClient({
-        basePath:
-          gatewayBaseUrl ?? RadixNetworkConfigById[networkId].gatewayUrl,
-        dAppDefinitionAddress,
-        applicationName,
-        applicationVersion,
-      }),
+      gatewayApi: GatewayApiClient(gatewayApiClientConfig),
     })
 
   const walletRequestClient =
@@ -123,6 +129,9 @@ export const RadixDappToolkit = (
       setMode: connectButtonClient.setMode,
       status$: connectButtonClient.status$,
     },
+    gatewayApi: {
+      clientConfig: gatewayApiClientConfig,
+    },
     disconnect: () => {
       walletRequestClient.disconnect()
       connectButtonClient.disconnect()