Skip to content
Merged
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 @@ -5,7 +5,7 @@ import type { Provider } from '@rango-dev/wallets-core';
import type { ProviderInterface } from '@rango-dev/wallets-react';

import { versions as bitget } from '@rango-dev/provider-bitget';
import * as braavos from '@rango-dev/provider-braavos';
import { versions as braavos } from '@rango-dev/provider-braavos';
import { versions as brave } from '@rango-dev/provider-brave';
import * as coin98 from '@rango-dev/provider-coin98';
import { versions as coinbase } from '@rango-dev/provider-coinbase';
Expand Down Expand Up @@ -125,7 +125,7 @@ export const allProviders = (
lazyProvider(legacyProviderImportsToVersionsInterface(leapCosmos)),
lazyProvider(legacyProviderImportsToVersionsInterface(frontier)),
taho,
lazyProvider(legacyProviderImportsToVersionsInterface(braavos)),
braavos,
ledger,
rabby,
lazyProvider(legacyProviderImportsToVersionsInterface(trezor)),
Expand Down
13 changes: 7 additions & 6 deletions wallets/provider-braavos/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@
"version": "0.49.1-next.2",
"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-braavos",
"build": "node ../../scripts/build/command.mjs --path wallets/provider-braavos --inputs src/mod.ts",
"ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json",
"clean": "rimraf dist",
"format": "prettier --write '{.,src}/**/*.{ts,tsx}'",
Expand All @@ -23,9 +23,10 @@
"dependencies": {
"@rango-dev/signer-starknet": "^0.40.0",
"@rango-dev/wallets-shared": "^0.55.1-next.2",
"@rango-dev/wallets-core": "^0.54.1-next.1",
"rango-types": "^0.1.89"
},
"publishConfig": {
"access": "public"
}
}
}
16 changes: 15 additions & 1 deletion wallets/provider-braavos/readme.md
Original file line number Diff line number Diff line change
@@ -1 +1,15 @@
# @rango-dev/provider-braavos
# Braavos
Braavos Wallet integration for hub.
[Homepage](https://braavos.app/) | [Docs](https://docs.braavos.app/)

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

## Implementation notes/limitations


### Feature
All features are currently supported, and **no limitations** have been identified for Braavos.

---

More wallet information can be found in [readme.md](../readme.md).
36 changes: 36 additions & 0 deletions wallets/provider-braavos/src/actions/starknet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import type { Context, FunctionWithContext } from '@rango-dev/wallets-core';

import {
CAIP_STARKNET_CHAIN_ID,
type ProviderAPI,
type StarknetActions,
utils,
} from '@rango-dev/wallets-core/namespaces/starknet';

export function connect(
instance: () => ProviderAPI
): FunctionWithContext<StarknetActions['connect'], Context> {
return async () => {
const starknetInstance = instance();

const connectResult = await starknetInstance?.enable();
if (
!connectResult ||
!starknetInstance.isConnected ||
!connectResult?.length
) {
throw new Error('Error during connection');
}
if (
starknetInstance?.chainId &&
starknetInstance.chainId !== CAIP_STARKNET_CHAIN_ID
) {
throw new Error(
`Please switch to Mainnet, current network is ${starknetInstance?.chainId}`
);
}

return utils.formatAccountsToCAIP(connectResult);
};
}
export const starknetActions = { connect };
26 changes: 26 additions & 0 deletions wallets/provider-braavos/src/builders/starknet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import type {
ProviderAPI,
StarknetActions,
} from '@rango-dev/wallets-core/namespaces/starknet';

import { ChangeAccountSubscriberBuilder } from '@rango-dev/wallets-core/namespaces/common';
import { utils } from '@rango-dev/wallets-core/namespaces/starknet';
// Hooks
export const changeAccountSubscriber = (getInstance: () => ProviderAPI) =>
new ChangeAccountSubscriberBuilder<string, ProviderAPI, StarknetActions>()
.getInstance(getInstance)

.onSwitchAccount((event) => {
if (!event.payload) {
event.preventDefault();
}
})
.format(async (_, accounts) => utils.formatAccountsToCAIP([accounts]))
.addEventListener((instance, callback) => {
instance.on('accountsChanged', callback);
})
.removeEventListener((instance, callback) => {
instance.off('accountsChanged', callback);
});

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

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

export const WALLET_ID = 'braavos';
export const metadata: ProviderMetadata = {
name: 'Braavos',
icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/braavos/icon.svg',
extensions: {
chrome:
'https://chrome.google.com/webstore/detail/braavos-smart-wallet/jnlgamecbpmbajjfhmmmlhejkemejdma',
brave:
'https://chrome.google.com/webstore/detail/braavos-smart-wallet/jnlgamecbpmbajjfhmmmlhejkemejdma',
firefox: 'https://addons.mozilla.org/en-US/firefox/addon/braavos-wallet/',
edge: 'https://microsoftedge.microsoft.com/addons/detail/braavos-wallet/hkkpjehhcnhgefhbdcgfkeegglpjchdc',
homepage: 'https://braavos.app/',
},
properties: [
{
name: 'namespaces',
value: {
selection: 'multiple',
data: [
{
label: 'Braavos',
value: 'Starknet',
id: 'STARKNET',
getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
starknetBlockchain(allBlockchains),
},
],
},
},
{
name: 'signers',
value: { getSigners: async () => getSigners(getInstanceOrThrow()) },
},
],
};
5 changes: 0 additions & 5 deletions wallets/provider-braavos/src/helpers.ts

This file was deleted.

75 changes: 0 additions & 75 deletions wallets/provider-braavos/src/index.ts

This file was deleted.

8 changes: 8 additions & 0 deletions wallets/provider-braavos/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 };
42 changes: 42 additions & 0 deletions wallets/provider-braavos/src/namespaces/starknet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import type { StarknetActions } from '@rango-dev/wallets-core/namespaces/starknet';

import { NamespaceBuilder } from '@rango-dev/wallets-core';
import {
builders as commonBuilders,
standardizeAndThrowError,
} from '@rango-dev/wallets-core/namespaces/common';
import { actions, builders } from '@rango-dev/wallets-core/namespaces/starknet';

import { starknetActions } from '../actions/starknet.js';
import { starknetBuilders } from '../builders/starknet.js';
import { WALLET_ID } from '../constants.js';
import { starknetBraavos } from '../utils.js';

const [changeAccountSubscriber, changeAccountCleanup] = starknetBuilders
.changeAccountSubscriber(starknetBraavos)
.build();
const connect = builders
.connect()
.action(starknetActions.connect(starknetBraavos))
.before(changeAccountSubscriber)
.or(changeAccountCleanup)
.or(standardizeAndThrowError)
.build();

const disconnect = commonBuilders
.disconnect<StarknetActions>()
.after(changeAccountCleanup)
.build();

const canEagerConnect = builders
.canEagerConnect()
.action(actions.canEagerConnect(starknetBraavos))
.build();

const starknet = new NamespaceBuilder<StarknetActions>('Starknet', WALLET_ID)
.action(connect)
.action(disconnect)
.action(canEagerConnect)
.build();

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

import { metadata, WALLET_ID } from './constants.js';
import { starknet } from './namespaces/starknet.js';
import { braavos } from './utils.js';

const buildProvider = () =>
new ProviderBuilder(WALLET_ID)
.init(function (context) {
const [, setState] = context.state();

if (braavos()) {
setState('installed', true);
console.debug('[braavos] instance detected.', context);
}
})
.config('metadata', metadata)
.add('starknet', starknet)
.build();

export { buildProvider };
25 changes: 21 additions & 4 deletions wallets/provider-braavos/src/signer.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,29 @@
import type { Provider } from './types.js';
import type { SignerFactory } from 'rango-types';

import { DefaultStarknetSigner } from '@rango-dev/signer-starknet';
import { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';
import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
import {
dynamicImportWithRefinedError,
getNetworkInstance,
} from '@rango-dev/wallets-shared';
import { DefaultSignerFactory, TransactionType } from 'rango-types';

export default async function getSigners(
provider: any
provider: Provider
): Promise<SignerFactory> {
const signers = new DefaultSignerFactory();
signers.registerSigner(TxType.STARKNET, new DefaultStarknetSigner(provider));

const starknetProvider = getNetworkInstance(
provider,
LegacyNetworks.STARKNET
);

const { DefaultStarknetSigner } = await dynamicImportWithRefinedError(
async () => await import('@rango-dev/signer-starknet')
);
signers.registerSigner(
TransactionType.STARKNET,
new DefaultStarknetSigner(starknetProvider)
);
return signers;
}
10 changes: 10 additions & 0 deletions wallets/provider-braavos/src/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
import type { ProviderAPI as StarknetProviderAPI } from '@rango-dev/wallets-core/namespaces/starknet';

export type ProviderObject = {
[LegacyNetworks.STARKNET]: StarknetProviderAPI;
};
export type Provider = Map<
keyof ProviderObject,
ProviderObject[keyof ProviderObject]
>;
Loading