@portal-hq/provider 1.1.0 → 1.1.2

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.
@@ -237,7 +237,7 @@ class Provider {
237
237
  * @param chainId The numerical ID of the chain to switch to
238
238
  * @returns BaseProvider
239
239
  */
240
- setChainId(chainId) {
240
+ setChainId(chainId, connect) {
241
241
  return __awaiter(this, void 0, void 0, function* () {
242
242
  // Update the chainId
243
243
  this.chainId = chainId;
@@ -249,6 +249,11 @@ class Provider {
249
249
  this.emit('chainChanged', {
250
250
  chainId: this.chainId,
251
251
  });
252
+ if (connect) {
253
+ connect.emit('portalConnect_chainChanged', {
254
+ chainId: this.chainId,
255
+ });
256
+ }
252
257
  // Dispatch 'connect' event
253
258
  this.dispatchConnect();
254
259
  return this;
@@ -235,7 +235,7 @@ class Provider {
235
235
  * @param chainId The numerical ID of the chain to switch to
236
236
  * @returns BaseProvider
237
237
  */
238
- setChainId(chainId) {
238
+ setChainId(chainId, connect) {
239
239
  return __awaiter(this, void 0, void 0, function* () {
240
240
  // Update the chainId
241
241
  this.chainId = chainId;
@@ -247,6 +247,11 @@ class Provider {
247
247
  this.emit('chainChanged', {
248
248
  chainId: this.chainId,
249
249
  });
250
+ if (connect) {
251
+ connect.emit('portalConnect_chainChanged', {
252
+ chainId: this.chainId,
253
+ });
254
+ }
250
255
  // Dispatch 'connect' event
251
256
  this.dispatchConnect();
252
257
  return this;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portal-hq/provider",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "license": "MIT",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/esm/index",
@@ -19,8 +19,8 @@
19
19
  "test": "jest"
20
20
  },
21
21
  "dependencies": {
22
- "@portal-hq/connect": "^1.1.0",
23
- "@portal-hq/utils": "^1.1.0"
22
+ "@portal-hq/connect": "^1.1.2",
23
+ "@portal-hq/utils": "^1.1.2"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@babel/preset-typescript": "^7.18.6",
@@ -30,5 +30,5 @@
30
30
  "ts-jest": "^29.0.3",
31
31
  "typescript": "^4.8.4"
32
32
  },
33
- "gitHead": "b65beeaf1dd0423244a099aaa0f3d55734ae676a"
33
+ "gitHead": "fe11c271c1d85aca8f4e323a5a69b277483dbe89"
34
34
  }
@@ -1,11 +1,13 @@
1
1
  import {
2
2
  Events,
3
3
  HttpRequester,
4
+ IPortalProvider,
4
5
  InvalidApiKeyError,
5
6
  InvalidChainIdError,
6
7
  InvalidGatewayConfigError,
7
8
  KeychainAdapter,
8
9
  ProviderRpcError,
10
+ type RequestArguments,
9
11
  RpcErrorCodes,
10
12
  } from '@portal-hq/utils'
11
13
 
@@ -15,9 +17,9 @@ import {
15
17
  type GatewayLike,
16
18
  type ProviderOptions,
17
19
  type RegisteredEventHandler,
18
- type RequestArguments,
19
20
  type SwitchEthereumChainParameter,
20
21
  } from '../../types'
22
+ import PortalConnect from '@portal-hq/connect'
21
23
 
22
24
  const passiveSignerMethods = [
23
25
  'eth_accounts',
@@ -37,7 +39,7 @@ const signerMethods = [
37
39
  'personal_sign',
38
40
  ]
39
41
 
40
- class Provider {
42
+ class Provider implements IPortalProvider {
41
43
  public apiKey: string
42
44
  public autoApprove: boolean
43
45
  public chainId: number
@@ -124,7 +126,7 @@ class Provider {
124
126
  * @param data The data to be passed to registered event handlers
125
127
  * @returns BaseProvider
126
128
  */
127
- public emit(event: string, data: any): Provider {
129
+ public emit(event: string, data: any): IPortalProvider {
128
130
  // Grab the registered event handlers if any are available
129
131
  const handlers = this.events[event] || []
130
132
 
@@ -178,7 +180,7 @@ class Provider {
178
180
  * @param callback The callback to be invoked when the event is emitted
179
181
  * @returns BaseProvider
180
182
  */
181
- public on(event: string, callback: EventHandler): Provider {
183
+ public on(event: string, callback: EventHandler): IPortalProvider {
182
184
  // If no handlers are registered for this event, create an entry for the event
183
185
  if (!this.events[event]) {
184
186
  this.events[event] = []
@@ -202,7 +204,7 @@ class Provider {
202
204
  * @param callback The callback to be invoked the next time the event is emitted
203
205
  * @returns BaseProvider
204
206
  */
205
- public once(event: string, callback: EventHandler): Provider {
207
+ public once(event: string, callback: EventHandler): IPortalProvider {
206
208
  // If no handlers are registered for this event, create an entry for the event
207
209
  if (!this.events[event]) {
208
210
  this.events[event] = []
@@ -312,7 +314,7 @@ class Provider {
312
314
  * @param chainId The numerical ID of the chain to switch to
313
315
  * @returns BaseProvider
314
316
  */
315
- public async setChainId(chainId: number): Promise<Provider> {
317
+ public async setChainId(chainId: number, connect?: PortalConnect): Promise<Provider> {
316
318
  // Update the chainId
317
319
  this.chainId = chainId
318
320
 
@@ -326,6 +328,12 @@ class Provider {
326
328
  chainId: this.chainId,
327
329
  } as SwitchEthereumChainParameter)
328
330
 
331
+
332
+ if (connect) {
333
+ connect.emit('portalConnect_chainChanged', {
334
+ chainId: this.chainId,
335
+ } as SwitchEthereumChainParameter)
336
+ }
329
337
  // Dispatch 'connect' event
330
338
  this.dispatchConnect()
331
339
 
@@ -1,11 +1,11 @@
1
1
  import { NativeModules } from 'react-native'
2
2
  import {
3
+ IPortalProvider,
3
4
  KeychainAdapter,
4
5
  PortalMpcError,
5
6
  type SigningRequestArguments,
6
7
  } from '@portal-hq/utils'
7
8
 
8
- import { Provider } from '../index'
9
9
  import Signer from './abstract'
10
10
 
11
11
  import {
@@ -50,7 +50,7 @@ class MpcSigner implements Signer {
50
50
 
51
51
  public async sign(
52
52
  message: SigningRequestArguments,
53
- provider: Provider,
53
+ provider: IPortalProvider,
54
54
  ): Promise<any> {
55
55
  const address = await this.address
56
56
  const apiKey = provider.apiKey
@@ -1,52 +0,0 @@
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 utils_1 = require("@portal-hq/utils");
13
- class HttpRequester {
14
- constructor({ baseUrl }) {
15
- this.baseUrl = baseUrl.startsWith('https://')
16
- ? baseUrl
17
- : `https://${baseUrl}`;
18
- }
19
- get(path, options) {
20
- return __awaiter(this, void 0, void 0, function* () {
21
- const requestOptions = {
22
- method: 'GET',
23
- url: `${this.baseUrl}${path}`,
24
- };
25
- if (options && options.headers) {
26
- requestOptions.headers = this.buildHeaders(options.headers);
27
- }
28
- const request = new utils_1.HttpRequest(requestOptions);
29
- const response = (yield request.send());
30
- return response;
31
- });
32
- }
33
- post(path, options) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- const requestOptions = {
36
- method: 'POST',
37
- url: `${this.baseUrl}${path}`,
38
- };
39
- requestOptions.headers = this.buildHeaders(options && options.headers ? options.headers : {});
40
- if (options && options.body) {
41
- requestOptions.body = options.body;
42
- }
43
- const request = new utils_1.HttpRequest(requestOptions);
44
- const response = (yield request.send());
45
- return response;
46
- });
47
- }
48
- buildHeaders(headers) {
49
- return Object.assign({ 'Content-Type': 'application/json' }, headers);
50
- }
51
- }
52
- exports.default = HttpRequester;
@@ -1,8 +0,0 @@
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
- exports.HttpRequester = void 0;
7
- var http_1 = require("./http");
8
- Object.defineProperty(exports, "HttpRequester", { enumerable: true, get: function () { return __importDefault(http_1).default; } });
@@ -1,56 +0,0 @@
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 utils_1 = require("@portal-hq/utils");
13
- class HttpSigner {
14
- constructor(opts) {
15
- if (!opts.portal) {
16
- throw new utils_1.MissingOptionError({
17
- className: 'HttpSigner',
18
- option: 'portal',
19
- });
20
- }
21
- this.keychain = opts.keychain;
22
- this.portal = opts.portal;
23
- }
24
- sign(message, provider) {
25
- return __awaiter(this, void 0, void 0, function* () {
26
- const address = yield this.keychain.getAddress();
27
- const { chainId, method, params } = message;
28
- switch (method) {
29
- case 'eth_requestAccounts':
30
- return [address];
31
- case 'eth_accounts':
32
- return [address];
33
- default:
34
- break;
35
- }
36
- console.log(`[Portal:HttpSigner] Requesting signature from exchange for:`, JSON.stringify({
37
- chainId,
38
- method,
39
- params: JSON.stringify([params]),
40
- }, null, 2));
41
- const signatureResponse = yield this.portal.post('/api/v1/clients/transactions/sign', {
42
- body: {
43
- chainId,
44
- method,
45
- params: JSON.stringify([params]),
46
- },
47
- headers: {
48
- Authorization: `Bearer ${provider.apiKey}`,
49
- 'Content-Type': 'application/json',
50
- },
51
- });
52
- return signatureResponse;
53
- });
54
- }
55
- }
56
- exports.default = HttpSigner;
@@ -1,50 +0,0 @@
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 { HttpRequest, } from '@portal-hq/utils';
11
- class HttpRequester {
12
- constructor({ baseUrl }) {
13
- this.baseUrl = baseUrl.startsWith('https://')
14
- ? baseUrl
15
- : `https://${baseUrl}`;
16
- }
17
- get(path, options) {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- const requestOptions = {
20
- method: 'GET',
21
- url: `${this.baseUrl}${path}`,
22
- };
23
- if (options && options.headers) {
24
- requestOptions.headers = this.buildHeaders(options.headers);
25
- }
26
- const request = new HttpRequest(requestOptions);
27
- const response = (yield request.send());
28
- return response;
29
- });
30
- }
31
- post(path, options) {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- const requestOptions = {
34
- method: 'POST',
35
- url: `${this.baseUrl}${path}`,
36
- };
37
- requestOptions.headers = this.buildHeaders(options && options.headers ? options.headers : {});
38
- if (options && options.body) {
39
- requestOptions.body = options.body;
40
- }
41
- const request = new HttpRequest(requestOptions);
42
- const response = (yield request.send());
43
- return response;
44
- });
45
- }
46
- buildHeaders(headers) {
47
- return Object.assign({ 'Content-Type': 'application/json' }, headers);
48
- }
49
- }
50
- export default HttpRequester;
@@ -1 +0,0 @@
1
- export { default as HttpRequester } from './http';
@@ -1,54 +0,0 @@
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 { MissingOptionError, } from '@portal-hq/utils';
11
- class HttpSigner {
12
- constructor(opts) {
13
- if (!opts.portal) {
14
- throw new MissingOptionError({
15
- className: 'HttpSigner',
16
- option: 'portal',
17
- });
18
- }
19
- this.keychain = opts.keychain;
20
- this.portal = opts.portal;
21
- }
22
- sign(message, provider) {
23
- return __awaiter(this, void 0, void 0, function* () {
24
- const address = yield this.keychain.getAddress();
25
- const { chainId, method, params } = message;
26
- switch (method) {
27
- case 'eth_requestAccounts':
28
- return [address];
29
- case 'eth_accounts':
30
- return [address];
31
- default:
32
- break;
33
- }
34
- console.log(`[Portal:HttpSigner] Requesting signature from exchange for:`, JSON.stringify({
35
- chainId,
36
- method,
37
- params: JSON.stringify([params]),
38
- }, null, 2));
39
- const signatureResponse = yield this.portal.post('/api/v1/clients/transactions/sign', {
40
- body: {
41
- chainId,
42
- method,
43
- params: JSON.stringify([params]),
44
- },
45
- headers: {
46
- Authorization: `Bearer ${provider.apiKey}`,
47
- 'Content-Type': 'application/json',
48
- },
49
- });
50
- return signatureResponse;
51
- });
52
- }
53
- }
54
- export default HttpSigner;