Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions packages/dapp-toolkit/src/_types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ export type WalletRequest =
| { type: 'sendTransaction'; payload: WalletInteraction }
| { type: 'dataRequest'; payload: WalletInteraction }

export type RadixConnectRelayConfig = {
baseUrl: string
walletUrl: string
}

export type OptionalRadixDappToolkitOptions = {
logger: Logger
onDisconnect: () => void
Expand All @@ -64,6 +69,7 @@ export type OptionalRadixDappToolkitOptions = {
providers: Partial<Providers>
requestInterceptor: (input: WalletInteraction) => Promise<WalletInteraction>
featureFlags: string[]
radixConnectRelay: RadixConnectRelayConfig
}

type RequiredRadixDappToolkitOptions = {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import { describe, it, expect } from 'vitest'
import { parse } from 'valibot'
import { Metadata } from '../../schemas'
import { WalletRequestSdk } from './wallet-request-sdk'
import { EnvironmentModule } from '../environment'

const defaultRelayUrl = 'https://radix-connect-relay.radixdlt.com'
const customRelayUrl = 'https://my-relay.example.com'

describe('Relay URL configuration', () => {
describe('Metadata schema', () => {
it('should accept metadata with relayUrl', () => {
const result = parse(Metadata, {
version: 2,
networkId: 1,
dAppDefinitionAddress: 'account_rdx123',
origin: 'https://example.com',
relayUrl: defaultRelayUrl,
})

expect(result.relayUrl).toBe(defaultRelayUrl)
})

it('should reject metadata without relayUrl', () => {
expect(() =>
parse(Metadata, {
version: 2,
networkId: 1,
dAppDefinitionAddress: 'account_rdx123',
origin: 'https://example.com',
}),
).toThrow()
})
})

describe('WalletRequestSdk metadata', () => {
it('should include default relayUrl in wallet interaction metadata', () => {
const sdk = WalletRequestSdk({
networkId: 1,
dAppDefinitionAddress: 'account_rdx123',
relayUrl: defaultRelayUrl,
origin: 'https://example.com',
providers: {
transports: [],
environmentModule: EnvironmentModule(),
},
})

const interaction = sdk.createWalletInteraction({
discriminator: 'authorizedRequest',
auth: { discriminator: 'loginWithoutChallenge' },
})

expect(interaction.metadata.relayUrl).toBe(defaultRelayUrl)
})

it('should include custom relayUrl in wallet interaction metadata', () => {
const sdk = WalletRequestSdk({
networkId: 1,
dAppDefinitionAddress: 'account_rdx123',
relayUrl: customRelayUrl,
origin: 'https://example.com',
providers: {
transports: [],
environmentModule: EnvironmentModule(),
},
})

const interaction = sdk.createWalletInteraction({
discriminator: 'authorizedRequest',
auth: { discriminator: 'loginWithoutChallenge' },
})

expect(interaction.metadata.relayUrl).toBe(customRelayUrl)
})
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { EnvironmentModule } from '../environment'
export type WalletRequestSdkInput = {
networkId: number
dAppDefinitionAddress: string
relayUrl: string
logger?: Logger
origin?: string
requestInterceptor?: (
Expand All @@ -38,6 +39,7 @@ export const WalletRequestSdk = (input: WalletRequestSdkInput) => {
origin:
input.origin ||
input.providers.environmentModule.globalThis?.location?.origin || '',
relayUrl: input.relayUrl,
} as Metadata

const interactionIdFactory = input.providers.interactionIdFactory ?? uuidV4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ describe('WalletRequestModule', () => {
useCache: false,
networkId: RadixNetwork.Stokenet,
dAppDefinitionAddress: '',
radixConnectRelay: {
baseUrl: 'https://radix-connect-relay.radixdlt.com',
walletUrl: 'radixWallet://connect',
},
providers: {
environmentModule: EnvironmentModule(),
stateModule: {} as any,
Expand Down Expand Up @@ -182,6 +186,10 @@ describe('WalletRequestModule', () => {
useCache: false,
networkId: RadixNetwork.Stokenet,
dAppDefinitionAddress: '',
radixConnectRelay: {
baseUrl: 'https://radix-connect-relay.radixdlt.com',
walletUrl: 'radixWallet://connect',
},
providers: {
stateModule: {} as any,
storageModule,
Expand All @@ -192,6 +200,7 @@ describe('WalletRequestModule', () => {
walletRequestSdk: WalletRequestSdk({
networkId: 2,
dAppDefinitionAddress: '',
relayUrl: 'https://radix-connect-relay.radixdlt.com',
providers: {
environmentModule: EnvironmentModule(),
interactionIdFactory: () => interactionId,
Expand Down Expand Up @@ -264,6 +273,10 @@ describe('WalletRequestModule', () => {
useCache: false,
networkId: RadixNetwork.Stokenet,
dAppDefinitionAddress: '',
radixConnectRelay: {
baseUrl: 'https://radix-connect-relay.radixdlt.com',
walletUrl: 'radixWallet://connect',
},
providers: {
stateModule: {} as any,
storageModule,
Expand All @@ -274,6 +287,7 @@ describe('WalletRequestModule', () => {
walletRequestSdk: WalletRequestSdk({
networkId: 2,
dAppDefinitionAddress: '',
relayUrl: 'https://radix-connect-relay.radixdlt.com',
providers: {
environmentModule: EnvironmentModule(),
interactionIdFactory: () => interactionId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import { StorageModule } from '../storage'
import type { StateModule, WalletData } from '../state'
import {
AwaitedWalletDataRequestResult,
RadixConnectRelayConfig,
SendPreAuthorizationRequestInput,
SendTransactionInput,
TransportProvider,
Expand All @@ -54,6 +55,7 @@ export const WalletRequestModule = (input: {
origin?: string
networkId: number
useCache: boolean
radixConnectRelay: RadixConnectRelayConfig
requestInterceptor?: (input: WalletInteraction) => Promise<WalletInteraction>
dAppDefinitionAddress: string
providers: {
Expand Down Expand Up @@ -155,8 +157,8 @@ export const WalletRequestModule = (input: {
}),
RadixConnectRelayModule({
logger,
walletUrl: 'radixWallet://connect',
baseUrl: 'https://radix-connect-relay.radixdlt.com',
walletUrl: input.radixConnectRelay.walletUrl,
baseUrl: input.radixConnectRelay.baseUrl,
dAppDefinitionAddress: input.dAppDefinitionAddress,
providers: {
storageModule,
Expand All @@ -173,6 +175,7 @@ export const WalletRequestModule = (input: {
networkId,
origin: input.origin,
dAppDefinitionAddress,
relayUrl: input.radixConnectRelay.baseUrl,
requestInterceptor: input.requestInterceptor,
providers: {
transports,
Expand Down
6 changes: 6 additions & 0 deletions packages/dapp-toolkit/src/radix-dapp-toolkit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ export const RadixDappToolkit = (
useCache = true,
} = options || {}

const radixConnectRelay = {
baseUrl: options.radixConnectRelay?.baseUrl ?? 'https://radix-connect-relay.radixdlt.com',
walletUrl: options.radixConnectRelay?.walletUrl ?? 'radixWallet://connect',
}

const environmentModule = providers?.environmentModule ?? EnvironmentModule()

const storageModule =
Expand Down Expand Up @@ -85,6 +90,7 @@ export const RadixDappToolkit = (
useCache,
networkId,
dAppDefinitionAddress,
radixConnectRelay,
requestInterceptor: options.requestInterceptor,
providers: {
stateModule,
Expand Down
1 change: 1 addition & 0 deletions packages/dapp-toolkit/src/schemas/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,7 @@ export const Metadata = object({
networkId: number(),
dAppDefinitionAddress: string(),
origin: string(),
relayUrl: string(),
})

export type WalletInteraction = InferOutput<typeof WalletInteraction>
Expand Down
Loading