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
4 changes: 2 additions & 2 deletions wallets/provider-all/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { versions as exodus } from '@rango-dev/provider-exodus';
import * as frontier from '@rango-dev/provider-frontier';
import * as halo from '@rango-dev/provider-halo';
import { versions as keplr } from '@rango-dev/provider-keplr';
import * as leapCosmos from '@rango-dev/provider-leap-cosmos';
import { versions as leap } from '@rango-dev/provider-leap-cosmos';
import { versions as ledger } from '@rango-dev/provider-ledger';
import * as mathwallet from '@rango-dev/provider-math-wallet';
import { versions as metamask } from '@rango-dev/provider-metamask';
Expand Down Expand Up @@ -124,7 +124,7 @@ export const allProviders = (
lazyProvider(legacyProviderImportsToVersionsInterface(tokenpocket)),
lazyProvider(legacyProviderImportsToVersionsInterface(tomo)),
lazyProvider(legacyProviderImportsToVersionsInterface(halo)),
lazyProvider(legacyProviderImportsToVersionsInterface(leapCosmos)),
leap,
lazyProvider(legacyProviderImportsToVersionsInterface(frontier)),
taho,
lazyProvider(legacyProviderImportsToVersionsInterface(braavos)),
Expand Down
13 changes: 7 additions & 6 deletions wallets/provider-leap-cosmos/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@
"version": "0.54.2-next.3",
"license": "MIT",
"type": "module",
"source": "./src/index.ts",
"main": "./dist/index.js",
"source": "./src/mod.ts",
"main": "./dist/mod.js",
"exports": {
".": "./dist/index.js"
".": "./dist/mod.js"
},
"typings": "dist/index.d.ts",
"typings": "dist/mod.d.ts",
"files": [
"dist",
"src"
],
"scripts": {
"build": "node ../../scripts/build/command.mjs --path wallets/provider-leap-cosmos",
"build": "node ../../scripts/build/command.mjs --path wallets/provider-leap-cosmos --inputs src/mod.ts",
"ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json",
"clean": "rimraf dist",
"format": "prettier --write '{.,src}/**/*.{ts,tsx}'",
Expand All @@ -24,9 +24,10 @@
"@rango-dev/signer-cosmos": "^0.38.0",
"@rango-dev/wallets-core": "^0.53.1-next.2",
"@rango-dev/wallets-shared": "^0.54.2-next.3",
"@rango-dev/provider-keplr": "^0.54.2-next.3",
"rango-types": "^0.1.89"
},
"publishConfig": {
"access": "public"
}
}
}
31 changes: 30 additions & 1 deletion wallets/provider-leap-cosmos/readme.md
Original file line number Diff line number Diff line change
@@ -1 +1,30 @@
# @rango-dev/provider-leap-cosmos
# Leap (Cosmos)

Leap Cosmos integration for hub.
[Homepage](https://www.leapwallet.io/) | [Docs](https://docs.leapwallet.io/)

More about implementation status can be found [here](../readme.md).

## Implementation notes/limitations

### Group


### Feature

#### ⚠️ Cross Browser

Leap Cosmos is **only available on Chromium-based browsers**
(e.g., Chrome, Brave, Edge).
It is **not supported** on Firefox or Safari.

#### ❌ Auto Connect

Leap does **not provide a mechanism for eager/silent auto-connect**.
A manual connection approval is required every time the user revisits the dApp.

All other features—connect, account retrieval, signing, and switch network—work without known issues.

---

More wallet information can be found in [readme.md](../readme.md).
31 changes: 31 additions & 0 deletions wallets/provider-leap-cosmos/src/builders/cosmos.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import type {
CosmosActions,
ProviderAPI,
} from '@rango-dev/wallets-core/namespaces/cosmos';

import { ChangeAccountSubscriberBuilder } from '@rango-dev/wallets-core/namespaces/common';
import { utils } from '@rango-dev/wallets-core/namespaces/cosmos';

// Hooks
const changeAccountSubscriber = (getInstance: () => ProviderAPI) =>
new ChangeAccountSubscriberBuilder<Event, ProviderAPI, CosmosActions>()
.getInstance(getInstance)
.onSwitchAccount((event, context) => {
const [getState] = context.state();
event.preventDefault();
const connectArgs = getState('connectArgs');
if (!connectArgs) {
throw new Error('Connect args are empty');
}
context.action('disconnect');
void context.action('connect', connectArgs.options);
})
.format(async (_, __) => utils.formatAccountsToCAIP([]))
.addEventListener((_, callback) => {
window.addEventListener('leap_keystorechange', callback);
})
.removeEventListener((_, callback) => {
window.removeEventListener('leap_keystorechange', callback);
});

export const cosmosBuilders = { changeAccountSubscriber };
40 changes: 40 additions & 0 deletions wallets/provider-leap-cosmos/src/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { type ProviderMetadata } from '@rango-dev/wallets-core';
import { type BlockchainMeta, cosmosBlockchains } from 'rango-types';

import getSigners from './signer.js';
import { getInstanceOrThrow } from './utils.js';

export const WALLET_ID = 'leap-cosmos';
export const LEAP_INJECTION_DELAY = 1000;
export const metadata: ProviderMetadata = {
name: 'Leap',
icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/leap-cosmos/icon.svg',
extensions: {
chrome:
'https://chrome.google.com/webstore/detail/leap-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg',
brave:
'https://chrome.google.com/webstore/detail/leap-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg',
homepage: 'https://www.leapwallet.io/cosmos',
},
properties: [
{
name: 'namespaces',
value: {
selection: 'multiple',
data: [
{
label: 'Cosmos',
value: 'Cosmos',
id: 'Cosmos',
getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
cosmosBlockchains(allBlockchains),
},
],
},
},
{
name: 'signers',
value: { getSigners: async () => getSigners(getInstanceOrThrow()) },
},
],
};
13 changes: 0 additions & 13 deletions wallets/provider-leap-cosmos/src/helpers.ts

This file was deleted.

113 changes: 0 additions & 113 deletions wallets/provider-leap-cosmos/src/index.ts

This file was deleted.

8 changes: 8 additions & 0 deletions wallets/provider-leap-cosmos/src/mod.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { defineVersions } from '@rango-dev/wallets-core/utils';

import { buildProvider } from './provider.js';

const versions = () =>
defineVersions().version('1.0.0', buildProvider()).build();

export { versions };
44 changes: 44 additions & 0 deletions wallets/provider-leap-cosmos/src/namespaces/cosmos.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { keplrCosmosActions } from '@rango-dev/provider-keplr/lib';
import { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core';
import {
builders as commonBuilders,
standardizeAndThrowError,
} from '@rango-dev/wallets-core/namespaces/common';
import {
builders,
type CosmosActions,
} from '@rango-dev/wallets-core/namespaces/cosmos';

import { cosmosBuilders } from '../builders/cosmos.js';
import { WALLET_ID } from '../constants.js';
import { cosmosLeap } from '../utils.js';

const [changeAccountSubscriber, changeAccountCleanup] = cosmosBuilders
.changeAccountSubscriber(cosmosLeap)
.build();

const connect = builders
.connect()
.action(keplrCosmosActions.connect(cosmosLeap))
.or(standardizeAndThrowError)
.or(changeAccountCleanup)
.before(changeAccountSubscriber)
.build();

const suggest = new ActionBuilder<CosmosActions, 'suggest'>('suggest')
.action(keplrCosmosActions.suggest(cosmosLeap))
.or(standardizeAndThrowError)
.build();

const disconnect = commonBuilders
.disconnect<CosmosActions>()
.before(changeAccountCleanup)
.build();

const cosmos = new NamespaceBuilder<CosmosActions>('Cosmos', WALLET_ID)
.action(connect)
.action(disconnect)
.action(suggest)
.build();

export { cosmos };
22 changes: 22 additions & 0 deletions wallets/provider-leap-cosmos/src/provider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { ProviderBuilder } from '@rango-dev/wallets-core';

import { LEAP_INJECTION_DELAY, metadata, WALLET_ID } from './constants.js';
import { cosmos } from './namespaces/cosmos.js';
import { leap as leapInstance } from './utils.js';

const buildProvider = () =>
new ProviderBuilder(WALLET_ID)
.init(function (context) {
const [, setState] = context.state();
setTimeout(() => {
if (leapInstance()) {
setState('installed', true);
console.debug('[leap] instance detected.', context);
}
}, LEAP_INJECTION_DELAY);
})
.config('metadata', metadata)
.add('cosmos', cosmos)
.build();

export { buildProvider };
8 changes: 4 additions & 4 deletions wallets/provider-leap-cosmos/src/signer.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
import type { LegacyNetworkProviderMap } from '@rango-dev/wallets-core/legacy';
import type { Provider } from './types.js';
import type { SignerFactory } from 'rango-types';

import {
dynamicImportWithRefinedError,
getNetworkInstance,
Networks,
} from '@rango-dev/wallets-shared';
import { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';
import { DefaultSignerFactory, TransactionType } from 'rango-types';

export default async function getSigners(
provider: LegacyNetworkProviderMap
provider: Provider
): Promise<SignerFactory> {
const cosmosProvider = getNetworkInstance(provider, Networks.COSMOS);
const signers = new DefaultSignerFactory();
const { DefaultCosmosSigner } = await dynamicImportWithRefinedError(
async () => await import('@rango-dev/signer-cosmos')
);
signers.registerSigner(
TxType.COSMOS,
TransactionType.COSMOS,
new DefaultCosmosSigner(cosmosProvider)
);
return signers;
Expand Down
Loading
Loading