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
37 changes: 9 additions & 28 deletions sdk/dapp-sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

## Features

- **Wallet Discovery** — Remote gateways, `window.*` namespace scanning, EIP-6963-style `canton:announceProvider` events, and pluggable adapters
- **Wallet Discovery** — Remote gateways, EIP-6963-style `canton:announceProvider` events, and pluggable adapters
- **Wallet Picker UI** — Built-in, framework-agnostic Web Component that lets users choose a wallet, enter custom gateway URLs, and manage recently used connections
- **Wallet Connectivity** — Connect, disconnect, and monitor connection status
- **Account Management** — List accounts and respond to account changes
Expand Down Expand Up @@ -74,22 +74,22 @@ The SDK is built around three layers:
┌──────────────────────────────────────────────┐
│ DappClient │
│ Thin wrapper: typed RPC helpers, events, │
window.canton injection, session persist │
│ session persist
├──────────────────────────────────────────────┤
│ DiscoveryClient │
│ Adapter registry, session restore, │
│ wallet picker integration │
├──────────────────────────────────────────────┤
│ ProviderAdapter implementations │
│ ExtensionAdapter, InjectedAdapter
│ (browser / postMessage, window.* inject)
│ ExtensionAdapter (announce protocol)
│ (browser / postMessage)
│ RemoteAdapter (HTTP/SSE gateway) │
└──────────────────────────────────────────────┘
```

## Wallet providers

Wallet and extension authors: see **[Wallet providers (discovery)](https://github.com/canton-network/wallet-gateway/blob/main/docs/dapp-building/dapp-sdk/provider.md)** in the dApp Building docs for how to appear in the picker (`RemoteAdapter`, `window.*` scan, `canton:announceProvider`, and `additionalAdapters`).
Wallet and extension authors: see **[Wallet providers (discovery)](https://github.com/canton-network/wallet-gateway/blob/main/docs/dapp-building/dapp-sdk/provider.md)** in the dApp Building docs for how to appear in the picker (`RemoteAdapter`, `canton:announceProvider`, and `additionalAdapters`).

## Usage

Expand Down Expand Up @@ -163,23 +163,6 @@ const client = new DappClient(provider)
const result = await client.connect()
```

### Provider API

The SDK also exposes a CIP-103 provider on `window.canton` (injected by default when a `DappClient` is created):

```typescript
const provider = window.canton

const result = await provider.request({ method: 'connect' })
const accounts = await provider.request({ method: 'listAccounts' })

provider.on('statusChanged', (event) => {
console.log('Status:', event.connection.isConnected)
})

provider.removeListener('statusChanged', listener)
```

## API Reference

### DappClient
Expand All @@ -203,7 +186,6 @@ provider.removeListener('statusChanged', listener)

| Option | Type | Default | Description |
| -------------- | -------------- | ---------- | ------------------------------------------------------------------------- |
| `injectGlobal` | `boolean` | `true` | Inject the provider into `window.canton` |
| `providerType` | `ProviderType` | `'remote'` | Affects `open()` routing (`'browser'` uses postMessage, others use popup) |

### DiscoveryClient
Expand All @@ -221,11 +203,10 @@ provider.removeListener('statusChanged', listener)

### Built-in Adapters

| Adapter | Provider Type | Transport | Description |
| ------------------ | ------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ExtensionAdapter` | `'browser'` | `postMessage` | Browser extensions (announced wallets or dApp-registered; optional explicit slot). |
| `InjectedAdapter` | `'browser'` | in-page `window` | Created when namespace scan finds a provider on `window` ([Wallet providers guide](https://github.com/canton-network/wallet-gateway/blob/main/docs/dapp-building/dapp-sdk/provider.md)). |
| `RemoteAdapter` | `'remote'` | HTTP/SSE | CIP-103 Wallet Gateways over the network. |
| Adapter | Provider Type | Transport | Description |
| ------------------ | ------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ExtensionAdapter` | `'browser'` | `postMessage` | Browser extensions discovered via `canton:announceProvider` ([Wallet providers guide](https://github.com/canton-network/wallet-gateway/blob/main/docs/dapp-building/dapp-sdk/provider.md)). |
| `RemoteAdapter` | `'remote'` | HTTP/SSE | CIP-103 Wallet Gateways over the network. |

## Documentation

Expand Down
1 change: 0 additions & 1 deletion sdk/dapp-sdk/src/adapter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ export * from './types'
export * from './errors'
export * from './events'
export { ExtensionAdapter } from './extension-adapter'
export { InjectedAdapter } from './injected-adapter'
export { RemoteAdapter } from './remote-adapter'
export type { RemoteAdapterConfig } from './remote-adapter'
export { WalletConnectAdapter } from './walletconnect-adapter'
Expand Down
77 changes: 0 additions & 77 deletions sdk/dapp-sdk/src/adapter/injected-adapter.ts

This file was deleted.

9 changes: 1 addition & 8 deletions sdk/dapp-sdk/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import type {
Provider,
EventListener,
} from '@canton-network/core-splice-provider'
import { injectProvider } from '@canton-network/core-provider-dapp'
import { WalletEvent, type SpliceMessage } from '@canton-network/core-types'
import type {
AccountsChangedEvent,
Expand All @@ -27,8 +26,6 @@ import { popup } from '@canton-network/core-wallet-ui-components'
import { clearAllLocalState } from './util'

export interface DappClientOptions {
/** Inject provider into `window.canton`. Defaults to true. */
injectGlobal?: boolean | undefined
/** Provider type hint — affects `open()` routing. Defaults to `'remote'`. */
providerType?: ProviderType | undefined
/** Optional routing key for extension open messages. */
Expand All @@ -40,7 +37,7 @@ export interface DappClientOptions {
* `Provider<DappRpcTypes>`.
*
* It exposes typed RPC helpers, event subscription shortcuts,
* `window.canton` injection, and session-persistence listeners.
* and session-persistence listeners.
*
* How to obtain a provider is **not** this class's concern.
* Use `DiscoveryClient` + the wallet picker, or construct any
Expand All @@ -56,10 +53,6 @@ export class DappClient {
) {
this.provider = provider
this.options = options

if (options.injectGlobal !== false) {
injectProvider(provider)
}
}

// ── Provider access ───────────────────────────────────
Expand Down
2 changes: 1 addition & 1 deletion sdk/dapp-sdk/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

// Import global Window augmentation for the DappProvider injection
// Import global Window augmentation for `window.canton`
import '@canton-network/core-provider-dapp'

// ── Asset exports (icons for wallet adapters) ──
Expand Down
71 changes: 0 additions & 71 deletions sdk/dapp-sdk/src/injected-discovery.ts

This file was deleted.

30 changes: 1 addition & 29 deletions sdk/dapp-sdk/src/sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ import type {
} from '@canton-network/core-wallet-dapp-rpc-client'
import { DappClient } from './client'
import { ExtensionAdapter } from './adapter/extension-adapter'
import { InjectedAdapter } from './adapter/injected-adapter'
import {
RemoteAdapter,
type RemoteAdapterConfig,
Expand All @@ -52,7 +51,6 @@ import * as storage from './storage'
import { clearAllLocalState } from './util'
import defaultGatewayList from './gateways.json'
import { CANTON_LOGO_PNG } from './assets'
import { discoverInjectedProviders } from './injected-discovery'
import { requestAnnouncedProviders } from './announce-discovery'

export interface DappSDKConnectOptions<
Expand Down Expand Up @@ -107,30 +105,6 @@ export class DappSDK {
}
}

private async registerInjectedNamespaceAdapters(
discovery: DiscoveryClient
): Promise<void> {
const existingIds = new Set(
discovery.listAdapters().map((a) => a.providerId as string)
)

const injected = discoverInjectedProviders()
for (const item of injected) {
const id = `browser:${item.id}`
if (existingIds.has(id)) continue

const key = `${item.id} (injected)`
const adapter = new InjectedAdapter({
id: item.id,
name: key,
provider: item.provider,
description: `Injected provider from window.${item.id}`,
})
discovery.registerAdapter(adapter)
existingIds.add(id)
}
}

private async registerAnnouncedAdapters(
discovery: DiscoveryClient
): Promise<void> {
Expand Down Expand Up @@ -173,8 +147,7 @@ export class DappSDK {
await this.registerAdapters(this.discovery, initAdapters)
}

// These can appear after initial create() (injected providers, extensions).
await this.registerInjectedNamespaceAdapters(this.discovery)
// Extensions can announce after initial create().
await this.registerAnnouncedAdapters(this.discovery)

await this.discovery.restorePersistedSessionIfNeeded()
Expand Down Expand Up @@ -362,7 +335,6 @@ export class DappSDK {
}

const discovery = this.discovery!
await this.registerInjectedNamespaceAdapters(discovery)
await this.registerAnnouncedAdapters(discovery)

clearAllLocalState()
Expand Down
Loading