@phantom/browser-sdk 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/auto-confirm/index.d.ts +37 -0
- package/dist/auto-confirm/index.js +107 -0
- package/dist/auto-confirm/index.mjs +82 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/solana/index.d.ts +2 -2
- package/dist/solana/index.js +60 -55
- package/dist/solana/index.mjs +60 -55
- package/package.json +9 -4
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ import { createSolanaPlugin } from "@phantom/browser-sdk/solana"; // Import the
|
|
|
28
28
|
|
|
29
29
|
// Create a Phantom instance with the Solana plugin
|
|
30
30
|
const phantom = createPhantom({
|
|
31
|
-
|
|
31
|
+
plugins: [createSolanaPlugin()],
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
// Now you can use the Solana-specific methods
|
|
@@ -89,7 +89,7 @@ The SDK also allows you to listen for `connect`, `disconnect`, and `accountChang
|
|
|
89
89
|
**Example:**
|
|
90
90
|
|
|
91
91
|
```typescript
|
|
92
|
-
const phantom = createPhantom({
|
|
92
|
+
const phantom = createPhantom({ plugins: [createSolanaPlugin()] });
|
|
93
93
|
|
|
94
94
|
const handleConnect = (address: string) => {
|
|
95
95
|
console.log(`Wallet connected with public key: ${address}`);
|
|
@@ -115,7 +115,7 @@ The SDK also allows you to listen for `connect`, `disconnect`, and `accountChang
|
|
|
115
115
|
**Example:**
|
|
116
116
|
|
|
117
117
|
```typescript
|
|
118
|
-
const phantom = createPhantom({
|
|
118
|
+
const phantom = createPhantom({ plugins: [createSolanaPlugin()] });
|
|
119
119
|
|
|
120
120
|
const handleDisconnect = () => {
|
|
121
121
|
console.log("Wallet disconnected");
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Plugin } from '../index.js';
|
|
2
|
+
|
|
3
|
+
type NetworkID = "bip122:000000000019d6689c085ae165831e93" | "bip122:000000000933ea01ad0ee984209779ba" | "solana:101" | "solana:102" | "solana:103" | "solana:localnet" | "eip155:1" | "eip155:11155111" | "eip155:137" | "eip155:80002" | "eip155:8453" | "eip155:84532" | "eip155:143" | "eip155:10143" | "eip155:41454" | "eip155:42161" | "eip155:421614" | "hypercore:mainnet" | "hypercore:testnet" | "sui:mainnet" | "sui:testnet";
|
|
4
|
+
type AutoConfirmEnableParams = {
|
|
5
|
+
chains?: NetworkID[];
|
|
6
|
+
};
|
|
7
|
+
type AutoConfirmResult = {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
chains: NetworkID[];
|
|
10
|
+
};
|
|
11
|
+
type AutoConfirmSupportedChainsResult = {
|
|
12
|
+
chains: NetworkID[];
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
declare function autoConfirmEnable(params?: AutoConfirmEnableParams): Promise<AutoConfirmResult>;
|
|
16
|
+
|
|
17
|
+
declare function autoConfirmDisable(): Promise<AutoConfirmResult>;
|
|
18
|
+
|
|
19
|
+
declare function autoConfirmStatus(): Promise<AutoConfirmResult>;
|
|
20
|
+
|
|
21
|
+
declare function autoConfirmSupportedChains(): Promise<AutoConfirmSupportedChainsResult>;
|
|
22
|
+
|
|
23
|
+
type AutoConfirmPlugin = {
|
|
24
|
+
autoConfirmEnable: typeof autoConfirmEnable;
|
|
25
|
+
autoConfirmDisable: typeof autoConfirmDisable;
|
|
26
|
+
autoConfirmStatus: typeof autoConfirmStatus;
|
|
27
|
+
autoConfirmSupportedChains: typeof autoConfirmSupportedChains;
|
|
28
|
+
};
|
|
29
|
+
declare function createAutoConfirmPlugin(): Plugin<AutoConfirmPlugin>;
|
|
30
|
+
|
|
31
|
+
declare module "../index" {
|
|
32
|
+
interface Phantom {
|
|
33
|
+
autoConfirm: AutoConfirmPlugin;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { AutoConfirmEnableParams, AutoConfirmResult, AutoConfirmSupportedChainsResult, NetworkID, createAutoConfirmPlugin };
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/auto-confirm/index.ts
|
|
21
|
+
var auto_confirm_exports = {};
|
|
22
|
+
__export(auto_confirm_exports, {
|
|
23
|
+
createAutoConfirmPlugin: () => createAutoConfirmPlugin
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(auto_confirm_exports);
|
|
26
|
+
|
|
27
|
+
// src/auto-confirm/getProvider.ts
|
|
28
|
+
function getProvider() {
|
|
29
|
+
if (typeof window === "undefined") {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const provider = window.phantom?.app;
|
|
33
|
+
if (!provider) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return provider;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// src/auto-confirm/autoConfirmEnable.ts
|
|
40
|
+
async function autoConfirmEnable(params) {
|
|
41
|
+
const provider = await getProvider();
|
|
42
|
+
if (!provider) {
|
|
43
|
+
throw new Error("Provider not found.");
|
|
44
|
+
}
|
|
45
|
+
const result = await provider.request({
|
|
46
|
+
method: "phantom_auto_confirm_enable",
|
|
47
|
+
params: params || {}
|
|
48
|
+
});
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// src/auto-confirm/autoConfirmDisable.ts
|
|
53
|
+
async function autoConfirmDisable() {
|
|
54
|
+
const provider = await getProvider();
|
|
55
|
+
if (!provider) {
|
|
56
|
+
throw new Error("Provider not found.");
|
|
57
|
+
}
|
|
58
|
+
const result = await provider.request({
|
|
59
|
+
method: "phantom_auto_confirm_disable",
|
|
60
|
+
params: {}
|
|
61
|
+
});
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// src/auto-confirm/autoConfirmStatus.ts
|
|
66
|
+
async function autoConfirmStatus() {
|
|
67
|
+
const provider = await getProvider();
|
|
68
|
+
if (!provider) {
|
|
69
|
+
throw new Error("Provider not found.");
|
|
70
|
+
}
|
|
71
|
+
const result = await provider.request({
|
|
72
|
+
method: "phantom_auto_confirm_status",
|
|
73
|
+
params: {}
|
|
74
|
+
});
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// src/auto-confirm/autoConfirmSupportedChains.ts
|
|
79
|
+
async function autoConfirmSupportedChains() {
|
|
80
|
+
const provider = getProvider();
|
|
81
|
+
if (!provider) {
|
|
82
|
+
throw new Error("Provider not found.");
|
|
83
|
+
}
|
|
84
|
+
const result = await provider.request({
|
|
85
|
+
method: "phantom_auto_confirm_supported_chains",
|
|
86
|
+
params: {}
|
|
87
|
+
});
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// src/auto-confirm/plugin.ts
|
|
92
|
+
var autoConfirm = {
|
|
93
|
+
autoConfirmEnable,
|
|
94
|
+
autoConfirmDisable,
|
|
95
|
+
autoConfirmStatus,
|
|
96
|
+
autoConfirmSupportedChains
|
|
97
|
+
};
|
|
98
|
+
function createAutoConfirmPlugin() {
|
|
99
|
+
return {
|
|
100
|
+
name: "autoConfirm",
|
|
101
|
+
create: () => autoConfirm
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
105
|
+
0 && (module.exports = {
|
|
106
|
+
createAutoConfirmPlugin
|
|
107
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import "../chunk-GV6AIHPN.mjs";
|
|
2
|
+
|
|
3
|
+
// src/auto-confirm/getProvider.ts
|
|
4
|
+
function getProvider() {
|
|
5
|
+
if (typeof window === "undefined") {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
const provider = window.phantom?.app;
|
|
9
|
+
if (!provider) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return provider;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// src/auto-confirm/autoConfirmEnable.ts
|
|
16
|
+
async function autoConfirmEnable(params) {
|
|
17
|
+
const provider = await getProvider();
|
|
18
|
+
if (!provider) {
|
|
19
|
+
throw new Error("Provider not found.");
|
|
20
|
+
}
|
|
21
|
+
const result = await provider.request({
|
|
22
|
+
method: "phantom_auto_confirm_enable",
|
|
23
|
+
params: params || {}
|
|
24
|
+
});
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// src/auto-confirm/autoConfirmDisable.ts
|
|
29
|
+
async function autoConfirmDisable() {
|
|
30
|
+
const provider = await getProvider();
|
|
31
|
+
if (!provider) {
|
|
32
|
+
throw new Error("Provider not found.");
|
|
33
|
+
}
|
|
34
|
+
const result = await provider.request({
|
|
35
|
+
method: "phantom_auto_confirm_disable",
|
|
36
|
+
params: {}
|
|
37
|
+
});
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/auto-confirm/autoConfirmStatus.ts
|
|
42
|
+
async function autoConfirmStatus() {
|
|
43
|
+
const provider = await getProvider();
|
|
44
|
+
if (!provider) {
|
|
45
|
+
throw new Error("Provider not found.");
|
|
46
|
+
}
|
|
47
|
+
const result = await provider.request({
|
|
48
|
+
method: "phantom_auto_confirm_status",
|
|
49
|
+
params: {}
|
|
50
|
+
});
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// src/auto-confirm/autoConfirmSupportedChains.ts
|
|
55
|
+
async function autoConfirmSupportedChains() {
|
|
56
|
+
const provider = getProvider();
|
|
57
|
+
if (!provider) {
|
|
58
|
+
throw new Error("Provider not found.");
|
|
59
|
+
}
|
|
60
|
+
const result = await provider.request({
|
|
61
|
+
method: "phantom_auto_confirm_supported_chains",
|
|
62
|
+
params: {}
|
|
63
|
+
});
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// src/auto-confirm/plugin.ts
|
|
68
|
+
var autoConfirm = {
|
|
69
|
+
autoConfirmEnable,
|
|
70
|
+
autoConfirmDisable,
|
|
71
|
+
autoConfirmStatus,
|
|
72
|
+
autoConfirmSupportedChains
|
|
73
|
+
};
|
|
74
|
+
function createAutoConfirmPlugin() {
|
|
75
|
+
return {
|
|
76
|
+
name: "autoConfirm",
|
|
77
|
+
create: () => autoConfirm
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export {
|
|
81
|
+
createAutoConfirmPlugin
|
|
82
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
type
|
|
1
|
+
type Plugin<T> = {
|
|
2
2
|
name: string;
|
|
3
3
|
create: () => T;
|
|
4
4
|
};
|
|
5
5
|
type CreatePhantomConfig = {
|
|
6
|
-
|
|
6
|
+
plugins?: Plugin<unknown>[];
|
|
7
7
|
};
|
|
8
8
|
interface Phantom {
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Creates a Phantom instance with the provided
|
|
11
|
+
* Creates a Phantom instance with the provided plugins.
|
|
12
12
|
* Each plugin extends the Phantom interface via declaration merging.
|
|
13
13
|
*/
|
|
14
|
-
declare function createPhantom({
|
|
14
|
+
declare function createPhantom({ plugins }: CreatePhantomConfig): Phantom;
|
|
15
15
|
|
|
16
|
-
export {
|
|
16
|
+
export { CreatePhantomConfig, Phantom, Plugin, createPhantom };
|
package/dist/index.js
CHANGED
|
@@ -23,9 +23,9 @@ __export(src_exports, {
|
|
|
23
23
|
createPhantom: () => createPhantom
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(src_exports);
|
|
26
|
-
function createPhantom({
|
|
26
|
+
function createPhantom({ plugins = [] }) {
|
|
27
27
|
const phantom = {};
|
|
28
|
-
for (const plugin of
|
|
28
|
+
for (const plugin of plugins) {
|
|
29
29
|
phantom[plugin.name] = plugin.create();
|
|
30
30
|
}
|
|
31
31
|
return phantom;
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "./chunk-GV6AIHPN.mjs";
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
|
-
function createPhantom({
|
|
4
|
+
function createPhantom({ plugins = [] }) {
|
|
5
5
|
const phantom = {};
|
|
6
|
-
for (const plugin of
|
|
6
|
+
for (const plugin of plugins) {
|
|
7
7
|
phantom[plugin.name] = plugin.create();
|
|
8
8
|
}
|
|
9
9
|
return phantom;
|
package/dist/solana/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Plugin } from '../index.js';
|
|
2
2
|
import { Transaction as Transaction$1 } from '@solana/kit';
|
|
3
3
|
import { VersionedTransaction as VersionedTransaction$1 } from '@solana/web3.js';
|
|
4
4
|
|
|
@@ -128,7 +128,7 @@ type Solana = {
|
|
|
128
128
|
addEventListener: (event: PhantomEventType, callback: PhantomEventCallback) => () => void;
|
|
129
129
|
removeEventListener: (event: PhantomEventType, callback: PhantomEventCallback) => void;
|
|
130
130
|
};
|
|
131
|
-
declare function createSolanaPlugin():
|
|
131
|
+
declare function createSolanaPlugin(): Plugin<Solana>;
|
|
132
132
|
|
|
133
133
|
declare module "../index" {
|
|
134
134
|
interface Phantom {
|
package/dist/solana/index.js
CHANGED
|
@@ -49,14 +49,15 @@ function transactionToVersionedTransaction(transaction) {
|
|
|
49
49
|
return fakeVersioned;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
// src/solana/
|
|
52
|
+
// src/solana/strategies/injected.ts
|
|
53
53
|
var import_compat = require("@solana/compat");
|
|
54
54
|
var MAX_RETRIES = 4;
|
|
55
55
|
var BASE_DELAY = 100;
|
|
56
56
|
var _getProvider, getProvider_fn;
|
|
57
|
-
var
|
|
57
|
+
var InjectedSolanaStrategy = class {
|
|
58
58
|
constructor() {
|
|
59
59
|
__privateAdd(this, _getProvider);
|
|
60
|
+
this.type = "injected" /* INJECTED */;
|
|
60
61
|
}
|
|
61
62
|
load() {
|
|
62
63
|
let retryCount = 0;
|
|
@@ -86,7 +87,7 @@ var InjectedSolanaAdapter = class {
|
|
|
86
87
|
async connect({ onlyIfTrusted }) {
|
|
87
88
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
88
89
|
if (!provider) {
|
|
89
|
-
throw new Error("
|
|
90
|
+
throw new Error("Provider not found.");
|
|
90
91
|
}
|
|
91
92
|
if (provider.isConnected && provider.publicKey) {
|
|
92
93
|
return this.getAccount() ?? void 0;
|
|
@@ -101,7 +102,7 @@ var InjectedSolanaAdapter = class {
|
|
|
101
102
|
async disconnect() {
|
|
102
103
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
103
104
|
if (!provider) {
|
|
104
|
-
throw new Error("
|
|
105
|
+
throw new Error("Provider not found.");
|
|
105
106
|
}
|
|
106
107
|
await provider.disconnect();
|
|
107
108
|
}
|
|
@@ -115,7 +116,7 @@ var InjectedSolanaAdapter = class {
|
|
|
115
116
|
async signMessage(message, display) {
|
|
116
117
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
117
118
|
if (!provider) {
|
|
118
|
-
throw new Error("
|
|
119
|
+
throw new Error("Provider not found.");
|
|
119
120
|
}
|
|
120
121
|
if (!provider.isConnected) {
|
|
121
122
|
throw new Error("Provider is not connected.");
|
|
@@ -129,7 +130,7 @@ var InjectedSolanaAdapter = class {
|
|
|
129
130
|
async signIn(signInData) {
|
|
130
131
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
131
132
|
if (!provider) {
|
|
132
|
-
throw new Error("
|
|
133
|
+
throw new Error("Provider not found.");
|
|
133
134
|
}
|
|
134
135
|
const result = await provider.signIn(signInData);
|
|
135
136
|
return {
|
|
@@ -141,7 +142,7 @@ var InjectedSolanaAdapter = class {
|
|
|
141
142
|
async signAndSendTransaction(transaction) {
|
|
142
143
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
143
144
|
if (!provider) {
|
|
144
|
-
throw new Error("
|
|
145
|
+
throw new Error("Provider not found.");
|
|
145
146
|
}
|
|
146
147
|
if (!provider.isConnected) {
|
|
147
148
|
throw new Error("Provider is not connected.");
|
|
@@ -156,7 +157,7 @@ var InjectedSolanaAdapter = class {
|
|
|
156
157
|
async signTransaction(transaction) {
|
|
157
158
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
158
159
|
if (!provider) {
|
|
159
|
-
throw new Error("
|
|
160
|
+
throw new Error("Provider not found.");
|
|
160
161
|
}
|
|
161
162
|
if (!provider.isConnected) {
|
|
162
163
|
throw new Error("Provider is not connected.");
|
|
@@ -169,7 +170,7 @@ var InjectedSolanaAdapter = class {
|
|
|
169
170
|
async signAllTransactions(transactions) {
|
|
170
171
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
171
172
|
if (!provider) {
|
|
172
|
-
throw new Error("
|
|
173
|
+
throw new Error("Provider not found.");
|
|
173
174
|
}
|
|
174
175
|
if (!provider.isConnected) {
|
|
175
176
|
throw new Error("Provider is not connected.");
|
|
@@ -187,12 +188,13 @@ getProvider_fn = function() {
|
|
|
187
188
|
return window?.phantom?.solana;
|
|
188
189
|
};
|
|
189
190
|
|
|
190
|
-
// src/solana/
|
|
191
|
+
// src/solana/strategies/kms.ts
|
|
191
192
|
var API_URL = "https://api.phantom.app/v1/wallet";
|
|
192
193
|
var _getJwtToken, getJwtToken_fn;
|
|
193
|
-
var
|
|
194
|
+
var KmsSolanaStrategy = class {
|
|
194
195
|
constructor() {
|
|
195
196
|
__privateAdd(this, _getJwtToken);
|
|
197
|
+
this.type = "kms" /* KMS */;
|
|
196
198
|
}
|
|
197
199
|
load() {
|
|
198
200
|
return Promise.resolve(this);
|
|
@@ -321,8 +323,11 @@ getJwtToken_fn = function() {
|
|
|
321
323
|
return localStorage.getItem("phantom-solana-kms-jwt");
|
|
322
324
|
};
|
|
323
325
|
|
|
324
|
-
// src/solana/
|
|
325
|
-
var
|
|
326
|
+
// src/solana/strategies/deeplinks.ts
|
|
327
|
+
var DeepLinkSolanaStrategy = class {
|
|
328
|
+
constructor() {
|
|
329
|
+
this.type = "deeplink" /* DEEPLINK */;
|
|
330
|
+
}
|
|
326
331
|
load() {
|
|
327
332
|
return Promise.resolve(this);
|
|
328
333
|
}
|
|
@@ -382,22 +387,22 @@ var DeepLinkSolanaAdapter = class {
|
|
|
382
387
|
}
|
|
383
388
|
};
|
|
384
389
|
|
|
385
|
-
// src/solana/
|
|
386
|
-
async function
|
|
387
|
-
if (
|
|
388
|
-
const
|
|
390
|
+
// src/solana/getProvider.ts
|
|
391
|
+
async function getProvider(strategy = "injected" /* INJECTED */) {
|
|
392
|
+
if (strategy === "injected") {
|
|
393
|
+
const provider = new InjectedSolanaStrategy();
|
|
389
394
|
try {
|
|
390
|
-
await
|
|
391
|
-
return
|
|
395
|
+
await provider.load();
|
|
396
|
+
return provider;
|
|
392
397
|
} catch (error) {
|
|
393
|
-
throw new Error("
|
|
398
|
+
throw new Error("Provider not found.");
|
|
394
399
|
}
|
|
395
|
-
} else if (
|
|
396
|
-
return new
|
|
397
|
-
} else if (
|
|
398
|
-
return new
|
|
400
|
+
} else if (strategy === "kms") {
|
|
401
|
+
return new KmsSolanaStrategy();
|
|
402
|
+
} else if (strategy === "deeplink") {
|
|
403
|
+
return new DeepLinkSolanaStrategy();
|
|
399
404
|
} else {
|
|
400
|
-
throw new Error("Invalid
|
|
405
|
+
throw new Error("Invalid provider type.");
|
|
401
406
|
}
|
|
402
407
|
}
|
|
403
408
|
|
|
@@ -436,15 +441,15 @@ function triggerEvent(event, ...args) {
|
|
|
436
441
|
|
|
437
442
|
// src/solana/connect.ts
|
|
438
443
|
async function connect() {
|
|
439
|
-
const
|
|
440
|
-
if (!
|
|
441
|
-
throw new Error("
|
|
444
|
+
const provider = await getProvider();
|
|
445
|
+
if (!provider) {
|
|
446
|
+
throw new Error("Provider not found.");
|
|
442
447
|
}
|
|
443
|
-
if (
|
|
444
|
-
return
|
|
448
|
+
if (provider.isConnected) {
|
|
449
|
+
return provider.getAccount();
|
|
445
450
|
}
|
|
446
451
|
try {
|
|
447
|
-
const address = await
|
|
452
|
+
const address = await provider.connect({ onlyIfTrusted: true });
|
|
448
453
|
if (address) {
|
|
449
454
|
triggerEvent("connect", address);
|
|
450
455
|
return address;
|
|
@@ -452,7 +457,7 @@ async function connect() {
|
|
|
452
457
|
} catch (error) {
|
|
453
458
|
}
|
|
454
459
|
try {
|
|
455
|
-
const address = await
|
|
460
|
+
const address = await provider.connect({ onlyIfTrusted: false });
|
|
456
461
|
if (address) {
|
|
457
462
|
triggerEvent("connect", address);
|
|
458
463
|
return address;
|
|
@@ -464,46 +469,46 @@ async function connect() {
|
|
|
464
469
|
|
|
465
470
|
// src/solana/disconnect.ts
|
|
466
471
|
async function disconnect() {
|
|
467
|
-
const
|
|
468
|
-
if (!
|
|
469
|
-
throw new Error("
|
|
472
|
+
const provider = await getProvider();
|
|
473
|
+
if (!provider) {
|
|
474
|
+
throw new Error("Provider not found.");
|
|
470
475
|
}
|
|
471
|
-
await
|
|
476
|
+
await provider.disconnect();
|
|
472
477
|
triggerEvent("disconnect");
|
|
473
478
|
}
|
|
474
479
|
|
|
475
480
|
// src/solana/getAccount.ts
|
|
476
481
|
async function getAccount() {
|
|
477
|
-
const
|
|
478
|
-
return
|
|
482
|
+
const provider = await getProvider();
|
|
483
|
+
return provider.getAccount();
|
|
479
484
|
}
|
|
480
485
|
|
|
481
486
|
// src/solana/signAndSendTransaction.ts
|
|
482
487
|
var import_compat2 = require("@solana/compat");
|
|
483
488
|
async function signAndSendTransaction(transaction) {
|
|
484
|
-
const
|
|
485
|
-
if (!
|
|
486
|
-
throw new Error("
|
|
489
|
+
const provider = await getProvider();
|
|
490
|
+
if (!provider) {
|
|
491
|
+
throw new Error("Provider not found.");
|
|
487
492
|
}
|
|
488
|
-
if (!
|
|
489
|
-
await
|
|
493
|
+
if (!provider.isConnected) {
|
|
494
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
490
495
|
}
|
|
491
496
|
let kitTransaction;
|
|
492
|
-
if (transaction
|
|
497
|
+
if (transaction?.messageBytes == null) {
|
|
493
498
|
kitTransaction = (0, import_compat2.fromVersionedTransaction)(transaction);
|
|
494
499
|
} else {
|
|
495
500
|
kitTransaction = transaction;
|
|
496
501
|
}
|
|
497
|
-
return
|
|
502
|
+
return provider.signAndSendTransaction(kitTransaction);
|
|
498
503
|
}
|
|
499
504
|
|
|
500
505
|
// src/solana/signIn.ts
|
|
501
506
|
async function signIn(signInData) {
|
|
502
|
-
const
|
|
503
|
-
if (!
|
|
504
|
-
throw new Error("
|
|
507
|
+
const provider = await getProvider();
|
|
508
|
+
if (!provider) {
|
|
509
|
+
throw new Error("Provider not found.");
|
|
505
510
|
}
|
|
506
|
-
const result = await
|
|
511
|
+
const result = await provider.signIn(signInData);
|
|
507
512
|
if (result.address) {
|
|
508
513
|
triggerEvent("connect", result.address);
|
|
509
514
|
}
|
|
@@ -512,14 +517,14 @@ async function signIn(signInData) {
|
|
|
512
517
|
|
|
513
518
|
// src/solana/signMessage.ts
|
|
514
519
|
async function signMessage(message, display) {
|
|
515
|
-
const
|
|
516
|
-
if (!
|
|
517
|
-
throw new Error("
|
|
520
|
+
const provider = await getProvider();
|
|
521
|
+
if (!provider) {
|
|
522
|
+
throw new Error("Provider not found.");
|
|
518
523
|
}
|
|
519
|
-
if (!
|
|
520
|
-
await
|
|
524
|
+
if (!provider.isConnected) {
|
|
525
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
521
526
|
}
|
|
522
|
-
return
|
|
527
|
+
return provider.signMessage(message, display);
|
|
523
528
|
}
|
|
524
529
|
|
|
525
530
|
// src/solana/plugin.ts
|
package/dist/solana/index.mjs
CHANGED
|
@@ -15,14 +15,15 @@ function transactionToVersionedTransaction(transaction) {
|
|
|
15
15
|
return fakeVersioned;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
// src/solana/
|
|
18
|
+
// src/solana/strategies/injected.ts
|
|
19
19
|
import { fromVersionedTransaction } from "@solana/compat";
|
|
20
20
|
var MAX_RETRIES = 4;
|
|
21
21
|
var BASE_DELAY = 100;
|
|
22
22
|
var _getProvider, getProvider_fn;
|
|
23
|
-
var
|
|
23
|
+
var InjectedSolanaStrategy = class {
|
|
24
24
|
constructor() {
|
|
25
25
|
__privateAdd(this, _getProvider);
|
|
26
|
+
this.type = "injected" /* INJECTED */;
|
|
26
27
|
}
|
|
27
28
|
load() {
|
|
28
29
|
let retryCount = 0;
|
|
@@ -52,7 +53,7 @@ var InjectedSolanaAdapter = class {
|
|
|
52
53
|
async connect({ onlyIfTrusted }) {
|
|
53
54
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
54
55
|
if (!provider) {
|
|
55
|
-
throw new Error("
|
|
56
|
+
throw new Error("Provider not found.");
|
|
56
57
|
}
|
|
57
58
|
if (provider.isConnected && provider.publicKey) {
|
|
58
59
|
return this.getAccount() ?? void 0;
|
|
@@ -67,7 +68,7 @@ var InjectedSolanaAdapter = class {
|
|
|
67
68
|
async disconnect() {
|
|
68
69
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
69
70
|
if (!provider) {
|
|
70
|
-
throw new Error("
|
|
71
|
+
throw new Error("Provider not found.");
|
|
71
72
|
}
|
|
72
73
|
await provider.disconnect();
|
|
73
74
|
}
|
|
@@ -81,7 +82,7 @@ var InjectedSolanaAdapter = class {
|
|
|
81
82
|
async signMessage(message, display) {
|
|
82
83
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
83
84
|
if (!provider) {
|
|
84
|
-
throw new Error("
|
|
85
|
+
throw new Error("Provider not found.");
|
|
85
86
|
}
|
|
86
87
|
if (!provider.isConnected) {
|
|
87
88
|
throw new Error("Provider is not connected.");
|
|
@@ -95,7 +96,7 @@ var InjectedSolanaAdapter = class {
|
|
|
95
96
|
async signIn(signInData) {
|
|
96
97
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
97
98
|
if (!provider) {
|
|
98
|
-
throw new Error("
|
|
99
|
+
throw new Error("Provider not found.");
|
|
99
100
|
}
|
|
100
101
|
const result = await provider.signIn(signInData);
|
|
101
102
|
return {
|
|
@@ -107,7 +108,7 @@ var InjectedSolanaAdapter = class {
|
|
|
107
108
|
async signAndSendTransaction(transaction) {
|
|
108
109
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
109
110
|
if (!provider) {
|
|
110
|
-
throw new Error("
|
|
111
|
+
throw new Error("Provider not found.");
|
|
111
112
|
}
|
|
112
113
|
if (!provider.isConnected) {
|
|
113
114
|
throw new Error("Provider is not connected.");
|
|
@@ -122,7 +123,7 @@ var InjectedSolanaAdapter = class {
|
|
|
122
123
|
async signTransaction(transaction) {
|
|
123
124
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
124
125
|
if (!provider) {
|
|
125
|
-
throw new Error("
|
|
126
|
+
throw new Error("Provider not found.");
|
|
126
127
|
}
|
|
127
128
|
if (!provider.isConnected) {
|
|
128
129
|
throw new Error("Provider is not connected.");
|
|
@@ -135,7 +136,7 @@ var InjectedSolanaAdapter = class {
|
|
|
135
136
|
async signAllTransactions(transactions) {
|
|
136
137
|
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
137
138
|
if (!provider) {
|
|
138
|
-
throw new Error("
|
|
139
|
+
throw new Error("Provider not found.");
|
|
139
140
|
}
|
|
140
141
|
if (!provider.isConnected) {
|
|
141
142
|
throw new Error("Provider is not connected.");
|
|
@@ -153,12 +154,13 @@ getProvider_fn = function() {
|
|
|
153
154
|
return window?.phantom?.solana;
|
|
154
155
|
};
|
|
155
156
|
|
|
156
|
-
// src/solana/
|
|
157
|
+
// src/solana/strategies/kms.ts
|
|
157
158
|
var API_URL = "https://api.phantom.app/v1/wallet";
|
|
158
159
|
var _getJwtToken, getJwtToken_fn;
|
|
159
|
-
var
|
|
160
|
+
var KmsSolanaStrategy = class {
|
|
160
161
|
constructor() {
|
|
161
162
|
__privateAdd(this, _getJwtToken);
|
|
163
|
+
this.type = "kms" /* KMS */;
|
|
162
164
|
}
|
|
163
165
|
load() {
|
|
164
166
|
return Promise.resolve(this);
|
|
@@ -287,8 +289,11 @@ getJwtToken_fn = function() {
|
|
|
287
289
|
return localStorage.getItem("phantom-solana-kms-jwt");
|
|
288
290
|
};
|
|
289
291
|
|
|
290
|
-
// src/solana/
|
|
291
|
-
var
|
|
292
|
+
// src/solana/strategies/deeplinks.ts
|
|
293
|
+
var DeepLinkSolanaStrategy = class {
|
|
294
|
+
constructor() {
|
|
295
|
+
this.type = "deeplink" /* DEEPLINK */;
|
|
296
|
+
}
|
|
292
297
|
load() {
|
|
293
298
|
return Promise.resolve(this);
|
|
294
299
|
}
|
|
@@ -348,22 +353,22 @@ var DeepLinkSolanaAdapter = class {
|
|
|
348
353
|
}
|
|
349
354
|
};
|
|
350
355
|
|
|
351
|
-
// src/solana/
|
|
352
|
-
async function
|
|
353
|
-
if (
|
|
354
|
-
const
|
|
356
|
+
// src/solana/getProvider.ts
|
|
357
|
+
async function getProvider(strategy = "injected" /* INJECTED */) {
|
|
358
|
+
if (strategy === "injected") {
|
|
359
|
+
const provider = new InjectedSolanaStrategy();
|
|
355
360
|
try {
|
|
356
|
-
await
|
|
357
|
-
return
|
|
361
|
+
await provider.load();
|
|
362
|
+
return provider;
|
|
358
363
|
} catch (error) {
|
|
359
|
-
throw new Error("
|
|
364
|
+
throw new Error("Provider not found.");
|
|
360
365
|
}
|
|
361
|
-
} else if (
|
|
362
|
-
return new
|
|
363
|
-
} else if (
|
|
364
|
-
return new
|
|
366
|
+
} else if (strategy === "kms") {
|
|
367
|
+
return new KmsSolanaStrategy();
|
|
368
|
+
} else if (strategy === "deeplink") {
|
|
369
|
+
return new DeepLinkSolanaStrategy();
|
|
365
370
|
} else {
|
|
366
|
-
throw new Error("Invalid
|
|
371
|
+
throw new Error("Invalid provider type.");
|
|
367
372
|
}
|
|
368
373
|
}
|
|
369
374
|
|
|
@@ -402,15 +407,15 @@ function triggerEvent(event, ...args) {
|
|
|
402
407
|
|
|
403
408
|
// src/solana/connect.ts
|
|
404
409
|
async function connect() {
|
|
405
|
-
const
|
|
406
|
-
if (!
|
|
407
|
-
throw new Error("
|
|
410
|
+
const provider = await getProvider();
|
|
411
|
+
if (!provider) {
|
|
412
|
+
throw new Error("Provider not found.");
|
|
408
413
|
}
|
|
409
|
-
if (
|
|
410
|
-
return
|
|
414
|
+
if (provider.isConnected) {
|
|
415
|
+
return provider.getAccount();
|
|
411
416
|
}
|
|
412
417
|
try {
|
|
413
|
-
const address = await
|
|
418
|
+
const address = await provider.connect({ onlyIfTrusted: true });
|
|
414
419
|
if (address) {
|
|
415
420
|
triggerEvent("connect", address);
|
|
416
421
|
return address;
|
|
@@ -418,7 +423,7 @@ async function connect() {
|
|
|
418
423
|
} catch (error) {
|
|
419
424
|
}
|
|
420
425
|
try {
|
|
421
|
-
const address = await
|
|
426
|
+
const address = await provider.connect({ onlyIfTrusted: false });
|
|
422
427
|
if (address) {
|
|
423
428
|
triggerEvent("connect", address);
|
|
424
429
|
return address;
|
|
@@ -430,46 +435,46 @@ async function connect() {
|
|
|
430
435
|
|
|
431
436
|
// src/solana/disconnect.ts
|
|
432
437
|
async function disconnect() {
|
|
433
|
-
const
|
|
434
|
-
if (!
|
|
435
|
-
throw new Error("
|
|
438
|
+
const provider = await getProvider();
|
|
439
|
+
if (!provider) {
|
|
440
|
+
throw new Error("Provider not found.");
|
|
436
441
|
}
|
|
437
|
-
await
|
|
442
|
+
await provider.disconnect();
|
|
438
443
|
triggerEvent("disconnect");
|
|
439
444
|
}
|
|
440
445
|
|
|
441
446
|
// src/solana/getAccount.ts
|
|
442
447
|
async function getAccount() {
|
|
443
|
-
const
|
|
444
|
-
return
|
|
448
|
+
const provider = await getProvider();
|
|
449
|
+
return provider.getAccount();
|
|
445
450
|
}
|
|
446
451
|
|
|
447
452
|
// src/solana/signAndSendTransaction.ts
|
|
448
453
|
import { fromVersionedTransaction as fromVersionedTransaction2 } from "@solana/compat";
|
|
449
454
|
async function signAndSendTransaction(transaction) {
|
|
450
|
-
const
|
|
451
|
-
if (!
|
|
452
|
-
throw new Error("
|
|
455
|
+
const provider = await getProvider();
|
|
456
|
+
if (!provider) {
|
|
457
|
+
throw new Error("Provider not found.");
|
|
453
458
|
}
|
|
454
|
-
if (!
|
|
455
|
-
await
|
|
459
|
+
if (!provider.isConnected) {
|
|
460
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
456
461
|
}
|
|
457
462
|
let kitTransaction;
|
|
458
|
-
if (transaction
|
|
463
|
+
if (transaction?.messageBytes == null) {
|
|
459
464
|
kitTransaction = fromVersionedTransaction2(transaction);
|
|
460
465
|
} else {
|
|
461
466
|
kitTransaction = transaction;
|
|
462
467
|
}
|
|
463
|
-
return
|
|
468
|
+
return provider.signAndSendTransaction(kitTransaction);
|
|
464
469
|
}
|
|
465
470
|
|
|
466
471
|
// src/solana/signIn.ts
|
|
467
472
|
async function signIn(signInData) {
|
|
468
|
-
const
|
|
469
|
-
if (!
|
|
470
|
-
throw new Error("
|
|
473
|
+
const provider = await getProvider();
|
|
474
|
+
if (!provider) {
|
|
475
|
+
throw new Error("Provider not found.");
|
|
471
476
|
}
|
|
472
|
-
const result = await
|
|
477
|
+
const result = await provider.signIn(signInData);
|
|
473
478
|
if (result.address) {
|
|
474
479
|
triggerEvent("connect", result.address);
|
|
475
480
|
}
|
|
@@ -478,14 +483,14 @@ async function signIn(signInData) {
|
|
|
478
483
|
|
|
479
484
|
// src/solana/signMessage.ts
|
|
480
485
|
async function signMessage(message, display) {
|
|
481
|
-
const
|
|
482
|
-
if (!
|
|
483
|
-
throw new Error("
|
|
486
|
+
const provider = await getProvider();
|
|
487
|
+
if (!provider) {
|
|
488
|
+
throw new Error("Provider not found.");
|
|
484
489
|
}
|
|
485
|
-
if (!
|
|
486
|
-
await
|
|
490
|
+
if (!provider.isConnected) {
|
|
491
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
487
492
|
}
|
|
488
|
-
return
|
|
493
|
+
return provider.signMessage(message, display);
|
|
489
494
|
}
|
|
490
495
|
|
|
491
496
|
// src/solana/plugin.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@phantom/browser-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.mjs",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -14,6 +14,11 @@
|
|
|
14
14
|
"import": "./dist/solana/index.mjs",
|
|
15
15
|
"require": "./dist/solana/index.js",
|
|
16
16
|
"types": "./dist/solana/index.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./auto-confirm": {
|
|
19
|
+
"import": "./dist/auto-confirm/index.mjs",
|
|
20
|
+
"require": "./dist/auto-confirm/index.js",
|
|
21
|
+
"types": "./dist/auto-confirm/index.d.ts"
|
|
17
22
|
}
|
|
18
23
|
},
|
|
19
24
|
"files": [
|
|
@@ -23,9 +28,9 @@
|
|
|
23
28
|
"scripts": {
|
|
24
29
|
"?pack-release": "When https://github.com/changesets/changesets/issues/432 has a solution we can remove this trick",
|
|
25
30
|
"pack-release": "rimraf ./_release && yarn pack && mkdir ./_release && tar zxvf ./package.tgz --directory ./_release && rm ./package.tgz",
|
|
26
|
-
"build": "rimraf ./dist && tsup src/index.ts src/solana/index.ts --format cjs,esm --dts",
|
|
27
|
-
"build:watch": "rimraf ./dist && tsup src/index.ts src/solana/index.ts --format cjs,esm --dts --watch",
|
|
28
|
-
"dev": "rimraf ./dist && tsup src/index.ts src/solana/index.ts --format cjs,esm --dts --watch",
|
|
31
|
+
"build": "rimraf ./dist && tsup src/index.ts src/solana/index.ts src/auto-confirm/index.ts --format cjs,esm --dts",
|
|
32
|
+
"build:watch": "rimraf ./dist && tsup src/index.ts src/solana/index.ts src/auto-confirm/index.ts --format cjs,esm --dts --watch",
|
|
33
|
+
"dev": "rimraf ./dist && tsup src/index.ts src/solana/index.ts src/auto-confirm/index.ts --format cjs,esm --dts --watch",
|
|
29
34
|
"lint": "tsc --noEmit && eslint --cache . --ext .ts,.tsx",
|
|
30
35
|
"test": "jest"
|
|
31
36
|
},
|