@onekeyfe/onekey-polkadot-provider 1.1.27 → 1.1.29
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/dist/OnekeyPolkadotProvider.d.ts +27 -3
- package/dist/OnekeyPolkadotProvider.js +124 -34
- package/dist/cjs/OnekeyPolkadotProvider.js +127 -34
- package/dist/cjs/inject/Accounts.js +14 -0
- package/dist/cjs/inject/Injected.js +16 -0
- package/dist/cjs/inject/MessageProvider.js +136 -0
- package/dist/cjs/inject/Signer.js +27 -0
- package/dist/inject/Accounts.d.ts +9 -0
- package/dist/inject/Accounts.js +11 -0
- package/dist/inject/Injected.d.ts +11 -0
- package/dist/inject/Injected.js +10 -0
- package/dist/inject/MessageProvider.d.ts +46 -0
- package/dist/inject/MessageProvider.js +133 -0
- package/dist/inject/Signer.d.ts +8 -0
- package/dist/inject/Signer.js +24 -0
- package/dist/types.d.ts +12 -0
- package/package.json +8 -8
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { IInpageProviderConfig } from '@onekeyfe/cross-inpage-provider-core';
|
|
2
2
|
import { ProviderPolkadotBase } from './ProviderPolkadotBase';
|
|
3
3
|
import type { IJsonRpcRequest } from '@onekeyfe/cross-inpage-provider-types';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import type { JsonRpcResponse } from '@polkadot/rpc-provider/types';
|
|
5
|
+
import { Unsubcall, InjectedAccount, ProviderList, ProviderMeta } from '@polkadot/extension-inject/types';
|
|
6
|
+
import { RequestRpcSend, RequestRpcSubscribe, RequestRpcUnsubscribe, SignerPayloadJSON, SignerPayloadRaw, SignerResult } from './types';
|
|
6
7
|
declare const PROVIDER_EVENTS: {
|
|
7
8
|
readonly connect: "connect";
|
|
8
9
|
readonly disconnect: "disconnect";
|
|
@@ -21,6 +22,12 @@ export declare type PolkadotRequest = {
|
|
|
21
22
|
'web3AccountsSubscribe': (cb: (accounts: InjectedAccount[]) => any) => Promise<Unsubcall>;
|
|
22
23
|
'web3SignPayload': (payload: SignerPayloadJSON) => Promise<SignerResult>;
|
|
23
24
|
'web3SignRaw': (payload: SignerPayloadRaw) => Promise<SignerResult>;
|
|
25
|
+
'web3RpcSubscribe': (payload: RequestRpcSubscribe, cb: (cb: JsonRpcResponse<unknown>) => void) => Promise<string | number>;
|
|
26
|
+
'web3RpcUnSubscribe': () => Promise<boolean>;
|
|
27
|
+
'web3RpcSubscribeConnected': (cb: (connected: boolean) => void) => boolean;
|
|
28
|
+
'web3RpcSend': (payload: RequestRpcSend) => Promise<JsonRpcResponse<unknown>>;
|
|
29
|
+
'web3RpcListProviders': () => Promise<ProviderList>;
|
|
30
|
+
'web3RpcStartProvider': (payload: string) => Promise<ProviderMeta>;
|
|
24
31
|
};
|
|
25
32
|
export declare type PROVIDER_EVENTS_STRINGS = keyof typeof PROVIDER_EVENTS;
|
|
26
33
|
export interface IProviderPolkadot {
|
|
@@ -30,6 +37,12 @@ export interface IProviderPolkadot {
|
|
|
30
37
|
web3AccountsSubscribe: (cb: (accounts: InjectedAccount[]) => any) => Unsubcall;
|
|
31
38
|
web3SignPayload: (payload: SignerPayloadJSON) => Promise<SignerResult>;
|
|
32
39
|
web3SignRaw: (payload: SignerPayloadRaw) => Promise<SignerResult>;
|
|
40
|
+
web3RpcSubscribe: (payload: RequestRpcSubscribe, cb: (accounts: JsonRpcResponse<unknown>) => void) => Promise<string | number>;
|
|
41
|
+
web3RpcUnSubscribe: (payload: RequestRpcUnsubscribe) => Promise<boolean>;
|
|
42
|
+
web3RpcSubscribeConnected: (cb: (connected: boolean) => void) => boolean;
|
|
43
|
+
web3RpcSend: (payload: RequestRpcSend) => Promise<JsonRpcResponse<unknown>>;
|
|
44
|
+
web3RpcListProviders: () => Promise<ProviderList>;
|
|
45
|
+
web3RpcStartProvider: (payload: string) => Promise<ProviderMeta>;
|
|
33
46
|
}
|
|
34
47
|
export declare type OneKeyPolkadotProviderProps = IInpageProviderConfig & {
|
|
35
48
|
timeout?: number;
|
|
@@ -48,11 +61,22 @@ declare class ProviderPolkadot extends ProviderPolkadotBase implements IProvider
|
|
|
48
61
|
isConnected(): boolean;
|
|
49
62
|
on<E extends keyof CosmosProviderEventsMap>(event: E, listener: CosmosProviderEventsMap[E]): this;
|
|
50
63
|
emit<E extends keyof CosmosProviderEventsMap>(event: E, ...args: Parameters<CosmosProviderEventsMap[E]>): boolean;
|
|
64
|
+
private createMessage;
|
|
65
|
+
private _postMessage;
|
|
66
|
+
postRequest(payload: any): void;
|
|
67
|
+
postResponse(payload: any): void;
|
|
68
|
+
postError(payload: string): void;
|
|
51
69
|
web3Enable(dappName: string): Promise<boolean>;
|
|
52
70
|
web3Accounts(anyType?: boolean): Promise<InjectedAccount[]>;
|
|
53
71
|
web3AccountsSubscribe(cb: (accounts: InjectedAccount[]) => any): Unsubcall;
|
|
54
72
|
web3SignPayload(payload: SignerPayloadJSON): Promise<SignerResult>;
|
|
55
73
|
web3SignRaw(payload: SignerPayloadRaw): Promise<SignerResult>;
|
|
74
|
+
web3RpcSubscribe(payload: RequestRpcSubscribe, cb: (accounts: JsonRpcResponse<unknown>) => void): Promise<string | number>;
|
|
75
|
+
web3RpcUnSubscribe(): Promise<boolean>;
|
|
76
|
+
web3RpcSubscribeConnected(cb: (connected: boolean) => void): boolean;
|
|
77
|
+
web3RpcSend(payload: RequestRpcSend): Promise<JsonRpcResponse<unknown>>;
|
|
78
|
+
web3RpcListProviders(): Promise<ProviderList>;
|
|
79
|
+
web3RpcStartProvider(payload: string): Promise<ProviderMeta>;
|
|
56
80
|
}
|
|
57
|
-
declare const registerPolkadot: (provider: ProviderPolkadot) => void;
|
|
81
|
+
declare const registerPolkadot: (provider: ProviderPolkadot, name?: string, version?: string) => void;
|
|
58
82
|
export { ProviderPolkadot, registerPolkadot };
|
|
@@ -1,6 +1,16 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
1
10
|
import { getOrCreateExtInjectedJsBridge } from '@onekeyfe/extension-bridge-injected';
|
|
2
11
|
import { ProviderPolkadotBase } from './ProviderPolkadotBase';
|
|
3
12
|
import { injectExtension } from '@polkadot/extension-inject';
|
|
13
|
+
import OneKeyInjected from './inject/Injected';
|
|
4
14
|
const PROVIDER_EVENTS = {
|
|
5
15
|
'connect': 'connect',
|
|
6
16
|
'disconnect': 'disconnect',
|
|
@@ -22,9 +32,18 @@ class ProviderPolkadot extends ProviderPolkadotBase {
|
|
|
22
32
|
this._handleDisconnected();
|
|
23
33
|
});
|
|
24
34
|
this.on(PROVIDER_EVENTS.message_low_level, (payload) => {
|
|
35
|
+
if (!payload)
|
|
36
|
+
return;
|
|
25
37
|
const { method, params } = payload;
|
|
26
38
|
if (isWalletEventMethodMatch({ method, name: PROVIDER_EVENTS.accountChanged })) {
|
|
27
|
-
|
|
39
|
+
let temp = undefined;
|
|
40
|
+
if (typeof params === 'string') {
|
|
41
|
+
temp = JSON.parse(params);
|
|
42
|
+
}
|
|
43
|
+
else if (typeof params === 'object') {
|
|
44
|
+
temp = params;
|
|
45
|
+
}
|
|
46
|
+
this._handleAccountChange(temp);
|
|
28
47
|
}
|
|
29
48
|
});
|
|
30
49
|
}
|
|
@@ -50,7 +69,7 @@ class ProviderPolkadot extends ProviderPolkadotBase {
|
|
|
50
69
|
}
|
|
51
70
|
// trigger by bridge account change event
|
|
52
71
|
_handleAccountChange(payload) {
|
|
53
|
-
const account =
|
|
72
|
+
const account = payload ? [payload] : [];
|
|
54
73
|
this.emit('accountChanged', account);
|
|
55
74
|
if (!account) {
|
|
56
75
|
this._handleDisconnected();
|
|
@@ -69,6 +88,33 @@ class ProviderPolkadot extends ProviderPolkadotBase {
|
|
|
69
88
|
emit(event, ...args) {
|
|
70
89
|
return super.emit(event, ...args);
|
|
71
90
|
}
|
|
91
|
+
createMessage(payload) {
|
|
92
|
+
return Object.assign({ id: 2, origin: 'OneKey Polkadot Provider' }, payload);
|
|
93
|
+
}
|
|
94
|
+
_postMessage(payload) {
|
|
95
|
+
try {
|
|
96
|
+
const message = this.createMessage(payload);
|
|
97
|
+
window.postMessage(message);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
// ignore
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
postRequest(payload) {
|
|
104
|
+
this._postMessage({
|
|
105
|
+
request: payload,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
postResponse(payload) {
|
|
109
|
+
this._postMessage({
|
|
110
|
+
response: payload,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
postError(payload) {
|
|
114
|
+
this._postMessage({
|
|
115
|
+
error: payload,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
72
118
|
web3Enable(dappName) {
|
|
73
119
|
return this._callBridge({
|
|
74
120
|
method: 'web3Enable',
|
|
@@ -88,48 +134,92 @@ class ProviderPolkadot extends ProviderPolkadotBase {
|
|
|
88
134
|
};
|
|
89
135
|
}
|
|
90
136
|
web3SignPayload(payload) {
|
|
137
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
138
|
+
try {
|
|
139
|
+
this.postRequest(payload);
|
|
140
|
+
const result = yield this._callBridge({
|
|
141
|
+
method: 'web3SignPayload',
|
|
142
|
+
params: payload,
|
|
143
|
+
});
|
|
144
|
+
this.postResponse({
|
|
145
|
+
id: 1,
|
|
146
|
+
origin: 'OneKey Polkadot Provider',
|
|
147
|
+
signature: result.signature,
|
|
148
|
+
});
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
this.postError('Cancelled');
|
|
153
|
+
return Promise.reject('Cancelled');
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
web3SignRaw(payload) {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
try {
|
|
160
|
+
this.postRequest(payload);
|
|
161
|
+
const result = yield this._callBridge({
|
|
162
|
+
method: 'web3SignRaw',
|
|
163
|
+
params: payload,
|
|
164
|
+
});
|
|
165
|
+
this.postResponse({
|
|
166
|
+
id: 1,
|
|
167
|
+
origin: 'OneKey Polkadot Provider',
|
|
168
|
+
signature: result.signature,
|
|
169
|
+
});
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
this.postError('Cancelled');
|
|
174
|
+
return Promise.reject('Cancelled');
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
web3RpcSubscribe(payload, cb) {
|
|
91
179
|
return this._callBridge({
|
|
92
|
-
method: '
|
|
180
|
+
method: 'web3RpcSubscribe',
|
|
93
181
|
params: payload,
|
|
94
182
|
});
|
|
95
183
|
}
|
|
96
|
-
|
|
184
|
+
web3RpcUnSubscribe() {
|
|
185
|
+
super.removeAllListeners();
|
|
186
|
+
return this._callBridge({
|
|
187
|
+
method: 'web3RpcUnSubscribe',
|
|
188
|
+
params: undefined,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
web3RpcSubscribeConnected(cb) {
|
|
192
|
+
cb(this.isConnected());
|
|
193
|
+
super.on(PROVIDER_EVENTS.connect, cb);
|
|
194
|
+
super.on(PROVIDER_EVENTS.disconnect, cb);
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
web3RpcSend(payload) {
|
|
198
|
+
return this._callBridge({
|
|
199
|
+
method: 'web3RpcSend',
|
|
200
|
+
params: payload,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
web3RpcListProviders() {
|
|
97
204
|
return this._callBridge({
|
|
98
|
-
method: '
|
|
205
|
+
method: 'web3RpcListProviders',
|
|
206
|
+
params: undefined,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
web3RpcStartProvider(payload) {
|
|
210
|
+
return this._callBridge({
|
|
211
|
+
method: 'web3RpcStartProvider',
|
|
99
212
|
params: payload,
|
|
100
213
|
});
|
|
101
214
|
}
|
|
102
215
|
}
|
|
103
|
-
const registerPolkadot = (provider) => {
|
|
216
|
+
const registerPolkadot = (provider, name = 'OneKey', version = '1.0.0') => {
|
|
104
217
|
try {
|
|
105
|
-
const enableFn = (originName) => {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return {
|
|
111
|
-
accounts: {
|
|
112
|
-
get: (anyType) => {
|
|
113
|
-
return provider.web3Accounts(anyType);
|
|
114
|
-
},
|
|
115
|
-
subscribe: (cb) => {
|
|
116
|
-
return provider.web3AccountsSubscribe(cb);
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
metadata: undefined,
|
|
120
|
-
provider: undefined,
|
|
121
|
-
signer: {
|
|
122
|
-
signPayload: (message) => {
|
|
123
|
-
return provider.web3SignPayload(message);
|
|
124
|
-
},
|
|
125
|
-
signRaw: (message) => {
|
|
126
|
-
return provider.web3SignRaw(message);
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
});
|
|
131
|
-
};
|
|
132
|
-
injectExtension(enableFn, { name: 'OneKey', version: '1.0.0' });
|
|
218
|
+
const enableFn = (originName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
219
|
+
yield provider.web3Enable(originName);
|
|
220
|
+
return new OneKeyInjected(provider);
|
|
221
|
+
});
|
|
222
|
+
injectExtension(enableFn, { name: name !== null && name !== void 0 ? name : 'OneKey', version: version !== null && version !== void 0 ? version : '1.0.0' });
|
|
133
223
|
}
|
|
134
224
|
catch (error) {
|
|
135
225
|
console.error(error);
|
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
2
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
15
|
exports.registerPolkadot = exports.ProviderPolkadot = void 0;
|
|
4
16
|
const extension_bridge_injected_1 = require("@onekeyfe/extension-bridge-injected");
|
|
5
17
|
const ProviderPolkadotBase_1 = require("./ProviderPolkadotBase");
|
|
6
18
|
const extension_inject_1 = require("@polkadot/extension-inject");
|
|
19
|
+
const Injected_1 = __importDefault(require("./inject/Injected"));
|
|
7
20
|
const PROVIDER_EVENTS = {
|
|
8
21
|
'connect': 'connect',
|
|
9
22
|
'disconnect': 'disconnect',
|
|
@@ -25,9 +38,18 @@ class ProviderPolkadot extends ProviderPolkadotBase_1.ProviderPolkadotBase {
|
|
|
25
38
|
this._handleDisconnected();
|
|
26
39
|
});
|
|
27
40
|
this.on(PROVIDER_EVENTS.message_low_level, (payload) => {
|
|
41
|
+
if (!payload)
|
|
42
|
+
return;
|
|
28
43
|
const { method, params } = payload;
|
|
29
44
|
if (isWalletEventMethodMatch({ method, name: PROVIDER_EVENTS.accountChanged })) {
|
|
30
|
-
|
|
45
|
+
let temp = undefined;
|
|
46
|
+
if (typeof params === 'string') {
|
|
47
|
+
temp = JSON.parse(params);
|
|
48
|
+
}
|
|
49
|
+
else if (typeof params === 'object') {
|
|
50
|
+
temp = params;
|
|
51
|
+
}
|
|
52
|
+
this._handleAccountChange(temp);
|
|
31
53
|
}
|
|
32
54
|
});
|
|
33
55
|
}
|
|
@@ -53,7 +75,7 @@ class ProviderPolkadot extends ProviderPolkadotBase_1.ProviderPolkadotBase {
|
|
|
53
75
|
}
|
|
54
76
|
// trigger by bridge account change event
|
|
55
77
|
_handleAccountChange(payload) {
|
|
56
|
-
const account =
|
|
78
|
+
const account = payload ? [payload] : [];
|
|
57
79
|
this.emit('accountChanged', account);
|
|
58
80
|
if (!account) {
|
|
59
81
|
this._handleDisconnected();
|
|
@@ -72,6 +94,33 @@ class ProviderPolkadot extends ProviderPolkadotBase_1.ProviderPolkadotBase {
|
|
|
72
94
|
emit(event, ...args) {
|
|
73
95
|
return super.emit(event, ...args);
|
|
74
96
|
}
|
|
97
|
+
createMessage(payload) {
|
|
98
|
+
return Object.assign({ id: 2, origin: 'OneKey Polkadot Provider' }, payload);
|
|
99
|
+
}
|
|
100
|
+
_postMessage(payload) {
|
|
101
|
+
try {
|
|
102
|
+
const message = this.createMessage(payload);
|
|
103
|
+
window.postMessage(message);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
// ignore
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
postRequest(payload) {
|
|
110
|
+
this._postMessage({
|
|
111
|
+
request: payload,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
postResponse(payload) {
|
|
115
|
+
this._postMessage({
|
|
116
|
+
response: payload,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
postError(payload) {
|
|
120
|
+
this._postMessage({
|
|
121
|
+
error: payload,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
75
124
|
web3Enable(dappName) {
|
|
76
125
|
return this._callBridge({
|
|
77
126
|
method: 'web3Enable',
|
|
@@ -91,49 +140,93 @@ class ProviderPolkadot extends ProviderPolkadotBase_1.ProviderPolkadotBase {
|
|
|
91
140
|
};
|
|
92
141
|
}
|
|
93
142
|
web3SignPayload(payload) {
|
|
143
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
+
try {
|
|
145
|
+
this.postRequest(payload);
|
|
146
|
+
const result = yield this._callBridge({
|
|
147
|
+
method: 'web3SignPayload',
|
|
148
|
+
params: payload,
|
|
149
|
+
});
|
|
150
|
+
this.postResponse({
|
|
151
|
+
id: 1,
|
|
152
|
+
origin: 'OneKey Polkadot Provider',
|
|
153
|
+
signature: result.signature,
|
|
154
|
+
});
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
this.postError('Cancelled');
|
|
159
|
+
return Promise.reject('Cancelled');
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
web3SignRaw(payload) {
|
|
164
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
165
|
+
try {
|
|
166
|
+
this.postRequest(payload);
|
|
167
|
+
const result = yield this._callBridge({
|
|
168
|
+
method: 'web3SignRaw',
|
|
169
|
+
params: payload,
|
|
170
|
+
});
|
|
171
|
+
this.postResponse({
|
|
172
|
+
id: 1,
|
|
173
|
+
origin: 'OneKey Polkadot Provider',
|
|
174
|
+
signature: result.signature,
|
|
175
|
+
});
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
this.postError('Cancelled');
|
|
180
|
+
return Promise.reject('Cancelled');
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
web3RpcSubscribe(payload, cb) {
|
|
94
185
|
return this._callBridge({
|
|
95
|
-
method: '
|
|
186
|
+
method: 'web3RpcSubscribe',
|
|
96
187
|
params: payload,
|
|
97
188
|
});
|
|
98
189
|
}
|
|
99
|
-
|
|
190
|
+
web3RpcUnSubscribe() {
|
|
191
|
+
super.removeAllListeners();
|
|
100
192
|
return this._callBridge({
|
|
101
|
-
method: '
|
|
193
|
+
method: 'web3RpcUnSubscribe',
|
|
194
|
+
params: undefined,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
web3RpcSubscribeConnected(cb) {
|
|
198
|
+
cb(this.isConnected());
|
|
199
|
+
super.on(PROVIDER_EVENTS.connect, cb);
|
|
200
|
+
super.on(PROVIDER_EVENTS.disconnect, cb);
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
web3RpcSend(payload) {
|
|
204
|
+
return this._callBridge({
|
|
205
|
+
method: 'web3RpcSend',
|
|
206
|
+
params: payload,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
web3RpcListProviders() {
|
|
210
|
+
return this._callBridge({
|
|
211
|
+
method: 'web3RpcListProviders',
|
|
212
|
+
params: undefined,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
web3RpcStartProvider(payload) {
|
|
216
|
+
return this._callBridge({
|
|
217
|
+
method: 'web3RpcStartProvider',
|
|
102
218
|
params: payload,
|
|
103
219
|
});
|
|
104
220
|
}
|
|
105
221
|
}
|
|
106
222
|
exports.ProviderPolkadot = ProviderPolkadot;
|
|
107
|
-
const registerPolkadot = (provider) => {
|
|
223
|
+
const registerPolkadot = (provider, name = 'OneKey', version = '1.0.0') => {
|
|
108
224
|
try {
|
|
109
|
-
const enableFn = (originName) => {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return {
|
|
115
|
-
accounts: {
|
|
116
|
-
get: (anyType) => {
|
|
117
|
-
return provider.web3Accounts(anyType);
|
|
118
|
-
},
|
|
119
|
-
subscribe: (cb) => {
|
|
120
|
-
return provider.web3AccountsSubscribe(cb);
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
|
-
metadata: undefined,
|
|
124
|
-
provider: undefined,
|
|
125
|
-
signer: {
|
|
126
|
-
signPayload: (message) => {
|
|
127
|
-
return provider.web3SignPayload(message);
|
|
128
|
-
},
|
|
129
|
-
signRaw: (message) => {
|
|
130
|
-
return provider.web3SignRaw(message);
|
|
131
|
-
},
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
});
|
|
135
|
-
};
|
|
136
|
-
(0, extension_inject_1.injectExtension)(enableFn, { name: 'OneKey', version: '1.0.0' });
|
|
225
|
+
const enableFn = (originName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
226
|
+
yield provider.web3Enable(originName);
|
|
227
|
+
return new Injected_1.default(provider);
|
|
228
|
+
});
|
|
229
|
+
(0, extension_inject_1.injectExtension)(enableFn, { name: name !== null && name !== void 0 ? name : 'OneKey', version: version !== null && version !== void 0 ? version : '1.0.0' });
|
|
137
230
|
}
|
|
138
231
|
catch (error) {
|
|
139
232
|
console.error(error);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class default_1 {
|
|
4
|
+
constructor(provider) {
|
|
5
|
+
this.provider = provider;
|
|
6
|
+
}
|
|
7
|
+
get(anyType) {
|
|
8
|
+
return this.provider.web3Accounts(anyType);
|
|
9
|
+
}
|
|
10
|
+
subscribe(cb) {
|
|
11
|
+
return this.provider.web3AccountsSubscribe(cb);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.default = default_1;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const Signer_1 = __importDefault(require("./Signer"));
|
|
7
|
+
const Accounts_1 = __importDefault(require("./Accounts"));
|
|
8
|
+
class default_1 {
|
|
9
|
+
constructor(provider) {
|
|
10
|
+
this.accounts = new Accounts_1.default(provider);
|
|
11
|
+
this.metadata = undefined;
|
|
12
|
+
this.provider = undefined;
|
|
13
|
+
this.signer = new Signer_1.default(provider);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.default = default_1;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const eventemitter3_1 = require("eventemitter3");
|
|
13
|
+
function isUndefined(value) {
|
|
14
|
+
return value === undefined;
|
|
15
|
+
}
|
|
16
|
+
class MessageProvider {
|
|
17
|
+
constructor(provider) {
|
|
18
|
+
this.provider = provider;
|
|
19
|
+
// Whether or not the actual extension background provider is connected
|
|
20
|
+
this._isConnected = false;
|
|
21
|
+
// Subscription IDs are (historically) not guaranteed to be globally unique;
|
|
22
|
+
// only unique for a given subscription method; which is why we identify
|
|
23
|
+
// the subscriptions based on subscription id + type
|
|
24
|
+
this._subscriptions = {};
|
|
25
|
+
this._eventemitter = new eventemitter3_1.EventEmitter();
|
|
26
|
+
}
|
|
27
|
+
get isClonable() {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
clone() {
|
|
31
|
+
return new MessageProvider(this.provider);
|
|
32
|
+
}
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
34
|
+
connect() {
|
|
35
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
36
|
+
// FIXME This should see if the extension's state's provider can disconnect
|
|
37
|
+
console.error('PostMessageProvider.disconnect() is not implemented.');
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
41
|
+
disconnect() {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
// FIXME This should see if the extension's state's provider can disconnect
|
|
44
|
+
console.error('PostMessageProvider.disconnect() is not implemented.');
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
get hasSubscriptions() {
|
|
48
|
+
// FIXME This should see if the extension's state's provider has subscriptions
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @summary Whether the node is connected or not.
|
|
53
|
+
* @return {boolean} true if connected
|
|
54
|
+
*/
|
|
55
|
+
get isConnected() {
|
|
56
|
+
return this._isConnected;
|
|
57
|
+
}
|
|
58
|
+
listProviders() {
|
|
59
|
+
return this.provider.web3RpcListProviders();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @summary Listens on events after having subscribed using the [[subscribe]] function.
|
|
63
|
+
* @param {ProviderInterfaceEmitted} type Event
|
|
64
|
+
* @param {ProviderInterfaceEmitCb} sub Callback
|
|
65
|
+
* @return unsubscribe function
|
|
66
|
+
*/
|
|
67
|
+
on(type, sub) {
|
|
68
|
+
this._eventemitter.on(type, sub);
|
|
69
|
+
return () => {
|
|
70
|
+
this._eventemitter.removeListener(type, sub);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
74
|
+
send(method, params, _, subscription) {
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
if (subscription) {
|
|
77
|
+
const { callback, type } = subscription;
|
|
78
|
+
const id = yield this.provider.web3RpcSubscribe({ method, params, type }, (res) => {
|
|
79
|
+
subscription.callback(null, res);
|
|
80
|
+
});
|
|
81
|
+
// const id = await sendRequest('pub(rpc.subscribe)', { method, params, type }, (res): void => {
|
|
82
|
+
// subscription.callback(null, res);
|
|
83
|
+
// });
|
|
84
|
+
this._subscriptions[`${type}::${id}`] = callback;
|
|
85
|
+
return id;
|
|
86
|
+
}
|
|
87
|
+
return this.provider.web3RpcSend({ method, params });
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* @summary Spawn a provider on the extension background.
|
|
92
|
+
*/
|
|
93
|
+
startProvider(key) {
|
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
// Disconnect from the previous provider
|
|
96
|
+
this._isConnected = false;
|
|
97
|
+
this._eventemitter.emit('disconnected');
|
|
98
|
+
// const meta = await sendRequest('pub(rpc.startProvider)', key);
|
|
99
|
+
const meta = yield this.provider.web3RpcStartProvider(key);
|
|
100
|
+
this.provider.web3RpcSubscribeConnected((connected) => {
|
|
101
|
+
this._isConnected = connected;
|
|
102
|
+
if (connected) {
|
|
103
|
+
this._eventemitter.emit('connected');
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this._eventemitter.emit('disconnected');
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
});
|
|
110
|
+
return meta;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
subscribe(type, method, params, callback) {
|
|
114
|
+
return this.send(method, params, false, { callback, type });
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* @summary Allows unsubscribing to subscriptions made with [[subscribe]].
|
|
118
|
+
*/
|
|
119
|
+
unsubscribe(type, method, id) {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
121
|
+
const subscription = `${type}::${id}`;
|
|
122
|
+
// FIXME This now could happen with re-subscriptions. The issue is that with a re-sub
|
|
123
|
+
// the assigned id now does not match what the API user originally received. It has
|
|
124
|
+
// a slight complication in solving - since we cannot rely on the send id, but rather
|
|
125
|
+
// need to find the actual subscription id to map it
|
|
126
|
+
if (isUndefined(this._subscriptions[subscription])) {
|
|
127
|
+
console.debug(`Unable to find active subscription=${subscription}`);
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
delete this._subscriptions[subscription];
|
|
131
|
+
yield this.provider.web3RpcUnSubscribe();
|
|
132
|
+
return this.send(method, [id]);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.default = MessageProvider;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
class Signer {
|
|
13
|
+
constructor(provider) {
|
|
14
|
+
this.provider = provider;
|
|
15
|
+
}
|
|
16
|
+
signPayload(payload) {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
return this.provider.web3SignPayload(payload);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
signRaw(payload) {
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
return this.provider.web3SignRaw(payload);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.default = Signer;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Unsubcall, InjectedAccount } from '@polkadot/extension-inject/types';
|
|
2
|
+
import type { InjectedAccounts } from '@polkadot/extension-inject/types';
|
|
3
|
+
import { ProviderPolkadot } from '../OnekeyPolkadotProvider';
|
|
4
|
+
export default class implements InjectedAccounts {
|
|
5
|
+
private provider;
|
|
6
|
+
constructor(provider: ProviderPolkadot);
|
|
7
|
+
get(anyType?: boolean): Promise<InjectedAccount[]>;
|
|
8
|
+
subscribe(cb: (accounts: InjectedAccount[]) => unknown): Unsubcall;
|
|
9
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ProviderPolkadot } from '../OnekeyPolkadotProvider';
|
|
2
|
+
import Signer from './Signer';
|
|
3
|
+
import type { Injected, InjectedMetadata, InjectedProvider } from '@polkadot/extension-inject/types';
|
|
4
|
+
import Accounts from './Accounts';
|
|
5
|
+
export default class implements Injected {
|
|
6
|
+
readonly accounts: Accounts;
|
|
7
|
+
readonly metadata: InjectedMetadata | undefined;
|
|
8
|
+
readonly provider: InjectedProvider | undefined;
|
|
9
|
+
readonly signer: Signer;
|
|
10
|
+
constructor(provider: ProviderPolkadot);
|
|
11
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Signer from './Signer';
|
|
2
|
+
import Accounts from './Accounts';
|
|
3
|
+
export default class {
|
|
4
|
+
constructor(provider) {
|
|
5
|
+
this.accounts = new Accounts(provider);
|
|
6
|
+
this.metadata = undefined;
|
|
7
|
+
this.provider = undefined;
|
|
8
|
+
this.signer = new Signer(provider);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { InjectedProvider, ProviderList, ProviderMeta } from '@polkadot/extension-inject/types';
|
|
2
|
+
import type { ProviderInterfaceEmitCb, ProviderInterfaceEmitted } from '@polkadot/rpc-provider/types';
|
|
3
|
+
import { EventEmitter } from 'eventemitter3';
|
|
4
|
+
import { ProviderPolkadot } from '../OnekeyPolkadotProvider';
|
|
5
|
+
declare type CallbackHandler = (error?: null | Error, value?: unknown) => void;
|
|
6
|
+
declare type AnyFunction = (...args: any[]) => any;
|
|
7
|
+
interface SubscriptionHandler {
|
|
8
|
+
callback: CallbackHandler;
|
|
9
|
+
type: string;
|
|
10
|
+
}
|
|
11
|
+
export default class MessageProvider implements InjectedProvider {
|
|
12
|
+
private provider;
|
|
13
|
+
readonly _eventemitter: EventEmitter;
|
|
14
|
+
_isConnected: boolean;
|
|
15
|
+
readonly _subscriptions: Record<string, AnyFunction>;
|
|
16
|
+
constructor(provider: ProviderPolkadot);
|
|
17
|
+
get isClonable(): boolean;
|
|
18
|
+
clone(): MessageProvider;
|
|
19
|
+
connect(): Promise<void>;
|
|
20
|
+
disconnect(): Promise<void>;
|
|
21
|
+
get hasSubscriptions(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* @summary Whether the node is connected or not.
|
|
24
|
+
* @return {boolean} true if connected
|
|
25
|
+
*/
|
|
26
|
+
get isConnected(): boolean;
|
|
27
|
+
listProviders(): Promise<ProviderList>;
|
|
28
|
+
/**
|
|
29
|
+
* @summary Listens on events after having subscribed using the [[subscribe]] function.
|
|
30
|
+
* @param {ProviderInterfaceEmitted} type Event
|
|
31
|
+
* @param {ProviderInterfaceEmitCb} sub Callback
|
|
32
|
+
* @return unsubscribe function
|
|
33
|
+
*/
|
|
34
|
+
on(type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): () => void;
|
|
35
|
+
send(method: string, params: unknown[], _?: boolean, subscription?: SubscriptionHandler): Promise<any>;
|
|
36
|
+
/**
|
|
37
|
+
* @summary Spawn a provider on the extension background.
|
|
38
|
+
*/
|
|
39
|
+
startProvider(key: string): Promise<ProviderMeta>;
|
|
40
|
+
subscribe(type: string, method: string, params: unknown[], callback: AnyFunction): Promise<number>;
|
|
41
|
+
/**
|
|
42
|
+
* @summary Allows unsubscribing to subscriptions made with [[subscribe]].
|
|
43
|
+
*/
|
|
44
|
+
unsubscribe(type: string, method: string, id: number): Promise<boolean>;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { EventEmitter } from 'eventemitter3';
|
|
11
|
+
function isUndefined(value) {
|
|
12
|
+
return value === undefined;
|
|
13
|
+
}
|
|
14
|
+
export default class MessageProvider {
|
|
15
|
+
constructor(provider) {
|
|
16
|
+
this.provider = provider;
|
|
17
|
+
// Whether or not the actual extension background provider is connected
|
|
18
|
+
this._isConnected = false;
|
|
19
|
+
// Subscription IDs are (historically) not guaranteed to be globally unique;
|
|
20
|
+
// only unique for a given subscription method; which is why we identify
|
|
21
|
+
// the subscriptions based on subscription id + type
|
|
22
|
+
this._subscriptions = {};
|
|
23
|
+
this._eventemitter = new EventEmitter();
|
|
24
|
+
}
|
|
25
|
+
get isClonable() {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
clone() {
|
|
29
|
+
return new MessageProvider(this.provider);
|
|
30
|
+
}
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
32
|
+
connect() {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
// FIXME This should see if the extension's state's provider can disconnect
|
|
35
|
+
console.error('PostMessageProvider.disconnect() is not implemented.');
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
39
|
+
disconnect() {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
// FIXME This should see if the extension's state's provider can disconnect
|
|
42
|
+
console.error('PostMessageProvider.disconnect() is not implemented.');
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
get hasSubscriptions() {
|
|
46
|
+
// FIXME This should see if the extension's state's provider has subscriptions
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* @summary Whether the node is connected or not.
|
|
51
|
+
* @return {boolean} true if connected
|
|
52
|
+
*/
|
|
53
|
+
get isConnected() {
|
|
54
|
+
return this._isConnected;
|
|
55
|
+
}
|
|
56
|
+
listProviders() {
|
|
57
|
+
return this.provider.web3RpcListProviders();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @summary Listens on events after having subscribed using the [[subscribe]] function.
|
|
61
|
+
* @param {ProviderInterfaceEmitted} type Event
|
|
62
|
+
* @param {ProviderInterfaceEmitCb} sub Callback
|
|
63
|
+
* @return unsubscribe function
|
|
64
|
+
*/
|
|
65
|
+
on(type, sub) {
|
|
66
|
+
this._eventemitter.on(type, sub);
|
|
67
|
+
return () => {
|
|
68
|
+
this._eventemitter.removeListener(type, sub);
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
72
|
+
send(method, params, _, subscription) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
if (subscription) {
|
|
75
|
+
const { callback, type } = subscription;
|
|
76
|
+
const id = yield this.provider.web3RpcSubscribe({ method, params, type }, (res) => {
|
|
77
|
+
subscription.callback(null, res);
|
|
78
|
+
});
|
|
79
|
+
// const id = await sendRequest('pub(rpc.subscribe)', { method, params, type }, (res): void => {
|
|
80
|
+
// subscription.callback(null, res);
|
|
81
|
+
// });
|
|
82
|
+
this._subscriptions[`${type}::${id}`] = callback;
|
|
83
|
+
return id;
|
|
84
|
+
}
|
|
85
|
+
return this.provider.web3RpcSend({ method, params });
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* @summary Spawn a provider on the extension background.
|
|
90
|
+
*/
|
|
91
|
+
startProvider(key) {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
// Disconnect from the previous provider
|
|
94
|
+
this._isConnected = false;
|
|
95
|
+
this._eventemitter.emit('disconnected');
|
|
96
|
+
// const meta = await sendRequest('pub(rpc.startProvider)', key);
|
|
97
|
+
const meta = yield this.provider.web3RpcStartProvider(key);
|
|
98
|
+
this.provider.web3RpcSubscribeConnected((connected) => {
|
|
99
|
+
this._isConnected = connected;
|
|
100
|
+
if (connected) {
|
|
101
|
+
this._eventemitter.emit('connected');
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this._eventemitter.emit('disconnected');
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
});
|
|
108
|
+
return meta;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
subscribe(type, method, params, callback) {
|
|
112
|
+
return this.send(method, params, false, { callback, type });
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* @summary Allows unsubscribing to subscriptions made with [[subscribe]].
|
|
116
|
+
*/
|
|
117
|
+
unsubscribe(type, method, id) {
|
|
118
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
const subscription = `${type}::${id}`;
|
|
120
|
+
// FIXME This now could happen with re-subscriptions. The issue is that with a re-sub
|
|
121
|
+
// the assigned id now does not match what the API user originally received. It has
|
|
122
|
+
// a slight complication in solving - since we cannot rely on the send id, but rather
|
|
123
|
+
// need to find the actual subscription id to map it
|
|
124
|
+
if (isUndefined(this._subscriptions[subscription])) {
|
|
125
|
+
console.debug(`Unable to find active subscription=${subscription}`);
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
delete this._subscriptions[subscription];
|
|
129
|
+
yield this.provider.web3RpcUnSubscribe();
|
|
130
|
+
return this.send(method, [id]);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ProviderPolkadot } from '../OnekeyPolkadotProvider';
|
|
2
|
+
import { SignerPayloadJSON, SignerPayloadRaw, SignerResult } from '../types';
|
|
3
|
+
export default class Signer {
|
|
4
|
+
private provider;
|
|
5
|
+
constructor(provider: ProviderPolkadot);
|
|
6
|
+
signPayload(payload: SignerPayloadJSON): Promise<SignerResult>;
|
|
7
|
+
signRaw(payload: SignerPayloadRaw): Promise<SignerResult>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
export default class Signer {
|
|
11
|
+
constructor(provider) {
|
|
12
|
+
this.provider = provider;
|
|
13
|
+
}
|
|
14
|
+
signPayload(payload) {
|
|
15
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
return this.provider.web3SignPayload(payload);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
signRaw(payload) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
return this.provider.web3SignRaw(payload);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -78,3 +78,15 @@ export interface SignerResult {
|
|
|
78
78
|
*/
|
|
79
79
|
signature: `0x${string}`;
|
|
80
80
|
}
|
|
81
|
+
export interface RequestRpcSend {
|
|
82
|
+
method: string;
|
|
83
|
+
params: unknown[];
|
|
84
|
+
}
|
|
85
|
+
export interface RequestRpcSubscribe extends RequestRpcSend {
|
|
86
|
+
type: string;
|
|
87
|
+
}
|
|
88
|
+
export interface RequestRpcUnsubscribe {
|
|
89
|
+
type: string;
|
|
90
|
+
method: string;
|
|
91
|
+
id: string;
|
|
92
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/onekey-polkadot-provider",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.29",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"cross-inpage-provider"
|
|
6
6
|
],
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"start": "tsc --watch"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@noble/hashes": "^1.
|
|
32
|
-
"@onekeyfe/cross-inpage-provider-core": "1.1.
|
|
33
|
-
"@onekeyfe/cross-inpage-provider-errors": "1.1.
|
|
34
|
-
"@onekeyfe/cross-inpage-provider-types": "1.1.
|
|
35
|
-
"@onekeyfe/extension-bridge-injected": "1.1.
|
|
36
|
-
"@polkadot/extension-inject": "^0.
|
|
31
|
+
"@noble/hashes": "^1.3.0",
|
|
32
|
+
"@onekeyfe/cross-inpage-provider-core": "1.1.29",
|
|
33
|
+
"@onekeyfe/cross-inpage-provider-errors": "1.1.29",
|
|
34
|
+
"@onekeyfe/cross-inpage-provider-types": "1.1.29",
|
|
35
|
+
"@onekeyfe/extension-bridge-injected": "1.1.29",
|
|
36
|
+
"@polkadot/extension-inject": "^0.46.3",
|
|
37
37
|
"eth-rpc-errors": "^4.0.3",
|
|
38
38
|
"long": "^5.2.1",
|
|
39
39
|
"mitt": "^3.0.0"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "fcabc1f3c77291112c0ff6685bd58a1f1d4b3bfb"
|
|
42
42
|
}
|