Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
0fcfbf4
scaffolds evm extension
joshuascan Aug 1, 2025
2d75b49
fix import
joshuascan Aug 1, 2025
2be5eb8
change version
joshuascan Aug 4, 2025
e62eed9
adds default param
joshuascan Aug 4, 2025
3b40afb
removes unused type
joshuascan Aug 4, 2025
1500996
updates dev dependencies
joshuascan Aug 4, 2025
22ca3f9
again
joshuascan Aug 4, 2025
5b26c56
again again
joshuascan Aug 4, 2025
3773321
updates yarn lock
joshuascan Aug 4, 2025
138c847
adds sol public address
joshuascan Aug 5, 2025
fa76a66
adds hedera get address
joshuascan Aug 5, 2025
71c9131
fix payload
joshuascan Aug 5, 2025
554c1d6
adds multichain extension class
joshuascan Aug 6, 2025
ed95989
fix import
joshuascan Aug 6, 2025
b9e9674
updates remaining multichain extensions
joshuascan Aug 6, 2025
d3bf34c
revert type change
joshuascan Aug 6, 2025
4c20c4f
type fix
joshuascan Aug 6, 2025
ff9f8d8
fix deepsource errors
joshuascan Aug 6, 2025
a4d22a1
consolidates chain name and chain type
joshuascan Aug 12, 2025
908a76a
adds missing tests
joshuascan Aug 15, 2025
56075ae
Merge branch 'master' into iframe-consolidation
joshuascan Aug 15, 2025
7a696d4
updates yarn lock
joshuascan Aug 15, 2025
1548f0d
hardcode sdk version
joshuascan Aug 19, 2025
5a2596c
increase hardcoded version
joshuascan Aug 19, 2025
4ed5f51
hard codes rn versions
joshuascan Aug 20, 2025
fc2a328
update lock file
joshuascan Aug 20, 2025
0192a06
test
joshuascan Aug 27, 2025
995f2a9
revert
joshuascan Aug 27, 2025
91309f4
Merge branch 'master' into iframe-consolidation
joshuascan Aug 27, 2025
4f71477
replace commons references
joshuascan Aug 27, 2025
b2fdbab
updates yarn lock
joshuascan Aug 27, 2025
8e447f9
removes commons package
joshuascan Aug 27, 2025
81c3153
updates yarn lock
joshuascan Aug 27, 2025
7ad8334
adds reveal pk method for multichain
joshuascan Sep 29, 2025
845da31
Merge branch 'master' into iframe-consolidation
joshuascan Sep 29, 2025
deb1c54
removes pnp
joshuascan Sep 30, 2025
3822637
fixes build error
joshuascan Sep 30, 2025
ad9f671
updates base pk reveal to be for evm
joshuascan Sep 30, 2025
8780beb
adds new evm reveal pk method
joshuascan Oct 2, 2025
25c366a
adds tests
joshuascan Oct 2, 2025
3e9496c
adds comment
joshuascan Oct 2, 2025
f2b9535
Resolve yarn.lock merge conflict and update dependencies
joshuascan Oct 2, 2025
389afec
Add packages/@magic-sdk/pnp from master branch
joshuascan Oct 2, 2025
1cab0b3
updates yarn lock
joshuascan Oct 2, 2025
2955fc8
fix pnp errors
joshuascan Oct 3, 2025
92fc5ba
revert hard coded web version
joshuascan Oct 3, 2025
0781480
removes pnp
joshuascan Oct 3, 2025
14a9e75
Merge branch 'master' into iframe-consolidation
joshuascan Oct 3, 2025
d97eb19
updates readme
joshuascan Oct 3, 2025
57deb7b
adds typing to evm switch chain
joshuascan Oct 3, 2025
58d15a9
fix payload
joshuascan Oct 3, 2025
82187ba
updates evm method name
joshuascan Oct 3, 2025
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
66 changes: 53 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
<p align="left">
<a href="https://magic.link/docs/home/welcome">
<a href="https://docs.magic.link/home/welcome">
<img src="https://media.graphassets.com/T9TXZhcNRVm211eyMh3u" alt="Logo" width="270" height="auto">
</a>
</p>

# Magic JavaScript SDK

[![<MagicLabs>](https://app.circleci.com/pipelines/github/magiclabs/magic-js.svg?style=shield)](https://app.circleci.com/pipelines/github/magiclabs/magic-js)

> The Magic JavaScript SDK empowers developers to provide frictionless web3 onboarding to their end-users while preserving their security and privacy using non-custodial wallets.

<p align="center">
Expand Down Expand Up @@ -54,16 +52,60 @@ Then, you can start authenticating users with _just one method!_ Magic works acr

```ts
import { Magic } from 'magic-sdk';
import Web3 from 'web3';
import { ethers } from 'ethers';

const magic = new Magic('YOUR_API_KEY', {
network: 'goerli',
network: 'sepolia',
});

const web3 = new Web3(magic.rpcProvider);
const provider = new ethers.BrowserProvider(magic.rpcProvider);
const accounts = await magic.wallet.connectWithUI();
```

With network switching:

> Network switching is available on web SDK version 31.0.0+ and React Native SDKs version 32.0.0+

```ts
import { Magic } from 'magic-sdk';
import { SolanaExtension } from '@magic-ext/solana';
import { EVMExtension } from '@magic-ext/evm';
import { ethers } from 'ethers';

const customPolygonOptions = {
rpcUrl: 'https://polygon-rpc.com/', // Polygon RPC URL
chainId: 137, // Polygon chain id
default: true, // Set as default network
};

const customOptimismOptions = {
rpcUrl: 'https://mainnet.optimism.io',
chainId: 10,
};

const magic = new Magic(API_KEY, {
extensions: [
new EVMExtension([customPolygonOptions, customOptimismOptions]),
new SolanaExtension({
rpcUrl: 'https://api.devnet.solana.com',
}),
],
});

const provider = new ethers.BrowserProvider(magic.rpcProvider);

const network = await provider.getNetwork();
console.log(network.chainId); // => 137

magic.evm.switchChain(10);

const network = await provider.getNetwork();
console.log(network.chainId); // => 10

const solanaPublicAddress = await magic.solana.getPublicAddress();
console.log(solanaPublicAddress); // => "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM"
```

## πŸ“¦ Package Ecosystem

### Entry points
Expand All @@ -84,13 +126,11 @@ Extend Magic JS SDK functionality for your use-case through [`@magic-ext/*` pack

These are packages Magic JS SDK uses internally to work seamlessly across platforms.

| Package Name | Changelog | Description |
| -------------------------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| [`@magic-sdk/types`](https://www.npmjs.com/package/@magic-sdk/types) | [CHANGELOG](./packages/@magic-sdk/types/CHANGELOG.md) | Core typings shared between JavaScript entry-points of Magic SDK. |
| [`@magic-sdk/pnp`](https://www.npmjs.com/package/@magic-sdk/pnp) | [CHANGELOG](./packages/@magic-sdk/pnp/CHANGELOG.md) | A lightweight connector that wraps Magic JS authentication with a beautiful, functional out-of-the-box login form. |
| [`@magic-sdk/provider`](https://www.npmjs.com/package/@magic-sdk/provider) | [CHANGELOG](./packages/@magic-sdk/provider/CHANGELOG.md) | Core business logic shared between JavaScript entry-points of Magic SDK. |
| [`@magic-sdk/commons`](https://www.npmjs.com/package/@magic-sdk/commons) | [CHANGELOG](./packages/@magic-sdk/commons/CHANGELOG.md) | Exposes a listing of common public APIs from `@magic-sdk/provider` and `@magic-sdk/types` to the platform-specific entry points. |
| [`@magic-sdk/types`](https://www.npmjs.com/package/@magic-sdk/types) | [CHANGELOG](./packages/@magic-sdk/types/CHANGELOG.md) | Core typings for Magic SDK packages. |
| Package Name | Changelog | Description |
| -------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------ |
| [`@magic-sdk/types`](https://www.npmjs.com/package/@magic-sdk/types) | [CHANGELOG](./packages/@magic-sdk/types/CHANGELOG.md) | Core typings shared between JavaScript entry-points of Magic SDK. |
| [`@magic-sdk/provider`](https://www.npmjs.com/package/@magic-sdk/provider) | [CHANGELOG](./packages/@magic-sdk/provider/CHANGELOG.md) | Core business logic shared between JavaScript entry-points of Magic SDK. |
| [`@magic-sdk/types`](https://www.npmjs.com/package/@magic-sdk/types) | [CHANGELOG](./packages/@magic-sdk/types/CHANGELOG.md) | Core typings for Magic SDK packages. |

## 🚦 Testing

Expand Down
4 changes: 2 additions & 2 deletions packages/@magic-ext/algorand/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
},
"externals": {
"include": [
"@magic-sdk/commons"
"@magic-sdk/provider"
]
},
"devDependencies": {
"@magic-sdk/commons": "^26.0.0"
"@magic-sdk/provider": "^30.0.0"
}
}
11 changes: 4 additions & 7 deletions packages/@magic-ext/algorand/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
import { Extension } from '@magic-sdk/commons';
import { MultichainExtension } from '@magic-sdk/provider';
import { AlgorandConfig, AlgorandPayloadMethod } from './types';

export class AlgorandExtension extends Extension.Internal<'algod', any> {
export class AlgorandExtension extends MultichainExtension<'algod'> {
name = 'algod' as const;
config: any = {};

constructor(public algorandConfig: AlgorandConfig) {
super();

this.config = {
super({
rpcUrl: algorandConfig.rpcUrl,
chainType: 'ALGOD',
};
});
}

public async signTransaction(txn: any) {
Expand Down
2 changes: 0 additions & 2 deletions packages/@magic-ext/aptos/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,11 @@
},
"externals": {
"include": [
"@magic-sdk/commons",
"@magic-sdk/provider"
]
},
"devDependencies": {
"@aptos-labs/wallet-adapter-core": "^2.2.0",
"@magic-sdk/commons": "^26.0.0",
"@magic-sdk/provider": "^30.0.0",
"aptos": "^1.8.5"
},
Expand Down
17 changes: 6 additions & 11 deletions packages/@magic-ext/aptos/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Extension } from '@magic-sdk/commons';
import { MultichainExtension } from '@magic-sdk/provider';

// @ts-ignore
import { AptosClient, BCS, TxnBuilderTypes, Types, getAddressFromAccountOrAddress } from 'aptos';
Expand All @@ -7,20 +7,15 @@ import { AptosConfig, AptosPayloadMethod } from './type';
import { APTOS_PAYLOAD_TYPE } from './constants';

export { MagicAptosWallet } from './MagicAptosWallet';
export class AptosExtension extends Extension.Internal<'aptos', any> {
export class AptosExtension extends MultichainExtension<'aptos'> {
name = 'aptos' as const;
config: any = {};

constructor(public aptosConfig: AptosConfig) {
super();

this.config = {
rpcUrl: '',
super({
rpcUrl: aptosConfig.nodeUrl,
chainType: 'APTOS',
options: {
nodeUrl: aptosConfig.nodeUrl,
},
};
options: { nodeUrl: aptosConfig.nodeUrl },
});
}

private serializeRawTransaction = (rawTransaction: TxnBuilderTypes.RawTransaction) => {
Expand Down
6 changes: 3 additions & 3 deletions packages/@magic-ext/avalanche/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"dist"
],
"target": "neutral",
"cdnGlobalName": "MagicSolanaExtension",
"cdnGlobalName": "MagicAvalancheExtension",
"main": "./dist/cjs/index.js",
"module": "./dist/es/index.js",
"types": "./dist/types/index.d.ts",
Expand All @@ -24,10 +24,10 @@
},
"externals": {
"include": [
"@magic-sdk/commons"
"@magic-sdk/provider"
]
},
"devDependencies": {
"@magic-sdk/commons": "^26.0.0"
"@magic-sdk/provider": "^30.0.0"
}
}
11 changes: 4 additions & 7 deletions packages/@magic-ext/avalanche/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
import { Extension } from '@magic-sdk/commons';
import { MultichainExtension } from '@magic-sdk/provider';
import { AvaxConfig } from './types';

export class AvalancheExtension extends Extension.Internal<'avax', any> {
export class AvalancheExtension extends MultichainExtension<'avax'> {
name = 'avax' as const;
config: any = {};

constructor(public avalancheConfig: AvaxConfig) {
super();

this.config = {
super({
rpcUrl: avalancheConfig.rpcUrl,
chainType: 'AVAX',
options: {
chainId: avalancheConfig.chainId,
networkId: avalancheConfig.networkId,
},
};
});
}

public signTransaction = (
Expand Down
4 changes: 2 additions & 2 deletions packages/@magic-ext/bitcoin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
},
"externals": {
"include": [
"@magic-sdk/commons"
"@magic-sdk/provider"
]
},
"devDependencies": {
"@magic-sdk/commons": "^26.0.0"
"@magic-sdk/provider": "^30.0.0"
}
}
11 changes: 4 additions & 7 deletions packages/@magic-ext/bitcoin/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
import { Extension } from '@magic-sdk/commons';
import { MultichainExtension } from '@magic-sdk/provider';
import { BitcoinConfig, BitcoinPayloadMethod } from './types';

export class BitcoinExtension extends Extension.Internal<'bitcoin', any> {
export class BitcoinExtension extends MultichainExtension<'bitcoin'> {
name = 'bitcoin' as const;
config: any = {};

constructor(public bitcoinConfig: BitcoinConfig) {
super();

this.config = {
super({
rpcUrl: bitcoinConfig.rpcUrl,
chainType: 'BITCOIN',
options: {
network: bitcoinConfig.network,
},
};
});
}

public async signTransaction(txn: string, inputIndex: number) {
Expand Down
4 changes: 2 additions & 2 deletions packages/@magic-ext/conflux/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
},
"externals": {
"include": [
"@magic-sdk/commons"
"@magic-sdk/provider"
]
},
"devDependencies": {
"@magic-sdk/commons": "^26.0.0"
"@magic-sdk/provider": "^30.0.0"
}
}
11 changes: 4 additions & 7 deletions packages/@magic-ext/conflux/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
import { Extension } from '@magic-sdk/commons';
import { MultichainExtension } from '@magic-sdk/provider';
import { ConfluxPayloadMethod, ConfluxConfig } from './types';

export class ConfluxExtension extends Extension.Internal<'conflux', any> {
export class ConfluxExtension extends MultichainExtension<'conflux'> {
name = 'conflux' as const;
config: any = {};

constructor(public confluxConfig: ConfluxConfig) {
super();

this.config = {
super({
chainType: 'CONFLUX',
options: {
rpcUrl: confluxConfig.rpcUrl,
networkId: confluxConfig.networkId,
},
};
});
}

public async sendTransaction(txObject: any) {
Expand Down
4 changes: 2 additions & 2 deletions packages/@magic-ext/cosmos/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
},
"externals": {
"include": [
"@magic-sdk/commons"
"@magic-sdk/provider"
]
},
"devDependencies": {
"@magic-sdk/commons": "^26.0.0"
"@magic-sdk/provider": "^30.0.0"
}
}
11 changes: 4 additions & 7 deletions packages/@magic-ext/cosmos/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
import { Extension } from '@magic-sdk/commons';
import { MultichainExtension } from '@magic-sdk/provider';
import { CosmosConfig, CosmosPayloadMethod } from './type';

export class CosmosExtension extends Extension.Internal<'cosmos', any> {
export class CosmosExtension extends MultichainExtension<'cosmos'> {
name = 'cosmos' as const;
config: any = {};

constructor(public cosmosConfig: CosmosConfig) {
super();

this.config = {
super({
rpcUrl: cosmosConfig.rpcUrl,
chainType: 'COSMOS',
options: {
chain: cosmosConfig.chain,
},
};
});
}

public signAndBroadcast = async (message: any, fee: any) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/@magic-ext/ed25519/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
},
"externals": {
"include": [
"@magic-sdk/commons"
"@magic-sdk/provider"
]
},
"devDependencies": {
"@magic-sdk/commons": "^26.0.0"
"@magic-sdk/provider": "^30.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/@magic-ext/ed25519/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Extension } from '@magic-sdk/commons';
import { Extension } from '@magic-sdk/provider';
import { Ed25519PayloadMethod } from './types';

export class Ed25519Extension extends Extension.Internal<'ed', any> {
Expand Down
Empty file.
35 changes: 35 additions & 0 deletions packages/@magic-ext/evm/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "@magic-ext/evm",
"version": "0.0.0",
"description": "magic evm extension",
"author": "Magic <team@magic.link> (https://magic.link/)",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/magiclabs/magic-js"
},
"files": [
"dist"
],
"target": "neutral",
"cdnGlobalName": "MagicEVMExtension",
"main": "./dist/cjs/index.js",
"module": "./dist/es/index.js",
"types": "./dist/types/index.d.ts",
"jsdelivr": "./dist/extension.js",
"exports": {
"import": "./dist/es/index.mjs",
"types": "./dist/types/index.d.ts",
"require": "./dist/cjs/index.js"
},
"externals": {
"include": [
"@magic-sdk/provider",
"@magic-sdk/types"
]
},
"devDependencies": {
"@magic-sdk/provider": "^29.5.0",
"@magic-sdk/types": "^24.22.0"
}
}
3 changes: 3 additions & 0 deletions packages/@magic-ext/evm/src/index.cdn.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { EVMExtension } from './index';

export default EVMExtension;
Loading