@0xsequence/provider 2.2.2 → 2.2.3
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/0xsequence-provider.cjs.dev.js +64 -44
- package/dist/0xsequence-provider.cjs.prod.js +64 -44
- package/dist/0xsequence-provider.esm.js +64 -44
- package/package.json +10 -10
- package/src/client.ts +7 -3
- package/src/init.ts +61 -40
|
@@ -3728,9 +3728,13 @@ class SequenceClientSession {
|
|
|
3728
3728
|
return this.store.setItem(SequenceClientSession.SESSION_LOCALSTORE_KEY, JSON.stringify(session));
|
|
3729
3729
|
}
|
|
3730
3730
|
getSession() {
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
|
|
3731
|
+
try {
|
|
3732
|
+
const session = this.store.getItem(SequenceClientSession.SESSION_LOCALSTORE_KEY);
|
|
3733
|
+
if (session) {
|
|
3734
|
+
return JSON.parse(session);
|
|
3735
|
+
}
|
|
3736
|
+
} catch (err) {
|
|
3737
|
+
console.error('Error parsing session', err);
|
|
3734
3738
|
}
|
|
3735
3739
|
return undefined;
|
|
3736
3740
|
}
|
|
@@ -4182,7 +4186,7 @@ let sequenceWalletProvider;
|
|
|
4182
4186
|
* @throws Error if projectAccessKey is not provided, empty string or is not string.
|
|
4183
4187
|
*/
|
|
4184
4188
|
const initWallet = (projectAccessKey, partialConfig) => {
|
|
4185
|
-
var
|
|
4189
|
+
var _findNetworkConfig, _client$getSession;
|
|
4186
4190
|
if (!projectAccessKey || typeof projectAccessKey !== 'string') {
|
|
4187
4191
|
throw new Error('Please pass a projectAccessKey in initWallet.');
|
|
4188
4192
|
}
|
|
@@ -4194,53 +4198,29 @@ const initWallet = (projectAccessKey, partialConfig) => {
|
|
|
4194
4198
|
const config = _extends({}, DefaultProviderConfig, partialConfig, {
|
|
4195
4199
|
transports: _extends({}, DefaultProviderConfig.transports, partialConfig == null ? void 0 : partialConfig.transports)
|
|
4196
4200
|
});
|
|
4197
|
-
|
|
4201
|
+
let networks = [];
|
|
4202
|
+
const updateNetworks = (connectedNetworks = []) => {
|
|
4203
|
+
var _config$networks;
|
|
4204
|
+
networks = mergeNetworks(network.allNetworks, connectedNetworks, (_config$networks = config.networks) != null ? _config$networks : []);
|
|
4205
|
+
|
|
4206
|
+
// Append projectAccessKey to network rpcUrls
|
|
4207
|
+
networks = networks.map(network => {
|
|
4208
|
+
// Don't double-append in the case the user has already included their access key in the rpc URL
|
|
4209
|
+
if (network.rpcUrl.includes(projectAccessKey)) {
|
|
4210
|
+
return network;
|
|
4211
|
+
}
|
|
4198
4212
|
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
const newNetworks = (_config$networks$filt = (_config$networks = config.networks) == null ? void 0 : _config$networks.filter(n => {
|
|
4202
|
-
// eslint-disable-next-line
|
|
4203
|
-
n.rpcUrl !== undefined && n.chainId !== undefined && !network.allNetworks.find(an => an.chainId === n.chainId);
|
|
4204
|
-
})) != null ? _config$networks$filt : [];
|
|
4205
|
-
|
|
4206
|
-
// Override any information about the networks using the config
|
|
4207
|
-
const combinedNetworks = network.allNetworks.map(n => {
|
|
4208
|
-
var _config$networks2;
|
|
4209
|
-
const network = (_config$networks2 = config.networks) == null ? void 0 : _config$networks2.find(cn => cn.chainId === n.chainId);
|
|
4210
|
-
return network ? _extends({}, n, network) : n;
|
|
4211
|
-
}).concat(newNetworks).map(network => {
|
|
4212
|
-
// don't double-append in the case the user has already included their access key in the rpc URL
|
|
4213
|
-
if (network.rpcUrl.includes(projectAccessKey)) {
|
|
4213
|
+
// XXX: This will probably break non-sequence RPC provider URLs.
|
|
4214
|
+
network.rpcUrl = network.rpcUrl + `/${projectAccessKey}`;
|
|
4214
4215
|
return network;
|
|
4215
|
-
}
|
|
4216
|
-
|
|
4217
|
-
// this will probably break non-sequence RPC provider URLs.
|
|
4218
|
-
network.rpcUrl = network.rpcUrl + `/${projectAccessKey}`;
|
|
4219
|
-
return network;
|
|
4220
|
-
});
|
|
4221
|
-
|
|
4222
|
-
// This builds a "public rpc" on demand, we build them on demand because we don't want to
|
|
4223
|
-
// generate a bunch of providers for networks that aren't used.
|
|
4224
|
-
const providerForChainId = chainId => {
|
|
4225
|
-
if (!rpcProviders[chainId]) {
|
|
4226
|
-
var _combinedNetworks$fin;
|
|
4227
|
-
const rpcUrl = (_combinedNetworks$fin = combinedNetworks.find(n => n.chainId === chainId)) == null ? void 0 : _combinedNetworks$fin.rpcUrl;
|
|
4228
|
-
if (!rpcUrl) {
|
|
4229
|
-
throw new Error(`no rpcUrl found for chainId: ${chainId}`);
|
|
4230
|
-
}
|
|
4231
|
-
rpcProviders[chainId] = new network.JsonRpcProvider(rpcUrl, {
|
|
4232
|
-
middlewares: [network.loggingProviderMiddleware, network.exceptionProviderMiddleware, new network.CachedProvider()]
|
|
4233
|
-
}, {
|
|
4234
|
-
cacheTimeout: -1
|
|
4235
|
-
});
|
|
4236
|
-
}
|
|
4237
|
-
return rpcProviders[chainId];
|
|
4216
|
+
});
|
|
4238
4217
|
};
|
|
4218
|
+
updateNetworks();
|
|
4239
4219
|
|
|
4240
4220
|
// This is the starting default network (as defined by the config)
|
|
4241
4221
|
// it can be later be changed using `wallet_switchEthereumChain` or some
|
|
4242
4222
|
// of the other methods on the provider.
|
|
4243
|
-
const defaultNetwork = config.defaultNetwork ? (_findNetworkConfig = network.findNetworkConfig(
|
|
4223
|
+
const defaultNetwork = config.defaultNetwork ? (_findNetworkConfig = network.findNetworkConfig(networks, config.defaultNetwork)) == null ? void 0 : _findNetworkConfig.chainId : undefined;
|
|
4244
4224
|
if (!defaultNetwork && config.defaultNetwork) {
|
|
4245
4225
|
throw new Error(`defaultNetwork not found for chainId: ${config.defaultNetwork}`);
|
|
4246
4226
|
}
|
|
@@ -4255,6 +4235,34 @@ const initWallet = (projectAccessKey, partialConfig) => {
|
|
|
4255
4235
|
projectAccessKey: projectAccessKey,
|
|
4256
4236
|
analytics: config.analytics
|
|
4257
4237
|
});
|
|
4238
|
+
updateNetworks((_client$getSession = client.getSession()) == null ? void 0 : _client$getSession.networks);
|
|
4239
|
+
client.onConnect(ev => {
|
|
4240
|
+
var _ev$session;
|
|
4241
|
+
updateNetworks((_ev$session = ev.session) == null ? void 0 : _ev$session.networks);
|
|
4242
|
+
});
|
|
4243
|
+
const rpcProviders = {};
|
|
4244
|
+
|
|
4245
|
+
// This builds a "public rpc" on demand, we build them on demand because we don't want to
|
|
4246
|
+
// generate a bunch of providers for networks that aren't used.
|
|
4247
|
+
const providerForChainId = chainId => {
|
|
4248
|
+
const network$1 = network.findNetworkConfig(networks, chainId);
|
|
4249
|
+
if (!network$1) {
|
|
4250
|
+
throw new Error(`no network config found for chainId: ${chainId}`);
|
|
4251
|
+
}
|
|
4252
|
+
const {
|
|
4253
|
+
rpcUrl
|
|
4254
|
+
} = network$1;
|
|
4255
|
+
|
|
4256
|
+
// Cache providers by rpc url
|
|
4257
|
+
if (!rpcProviders[rpcUrl]) {
|
|
4258
|
+
rpcProviders[rpcUrl] = new network.JsonRpcProvider(rpcUrl, {
|
|
4259
|
+
middlewares: [network.loggingProviderMiddleware, network.exceptionProviderMiddleware, new network.CachedProvider()]
|
|
4260
|
+
}, {
|
|
4261
|
+
cacheTimeout: -1
|
|
4262
|
+
});
|
|
4263
|
+
}
|
|
4264
|
+
return rpcProviders[rpcUrl];
|
|
4265
|
+
};
|
|
4258
4266
|
sequenceWalletProvider = new SequenceProvider(client, providerForChainId);
|
|
4259
4267
|
return sequenceWalletProvider;
|
|
4260
4268
|
};
|
|
@@ -4271,6 +4279,18 @@ const getWallet = () => {
|
|
|
4271
4279
|
return sequenceWalletProvider;
|
|
4272
4280
|
};
|
|
4273
4281
|
|
|
4282
|
+
// allNetworks <- connectedNetworks <- config.networks
|
|
4283
|
+
const mergeNetworks = (...networks) => {
|
|
4284
|
+
const networkMap = new Map();
|
|
4285
|
+
for (const network of networks.flat()) {
|
|
4286
|
+
if (network.chainId && network.rpcUrl) {
|
|
4287
|
+
const existingNetwork = networkMap.get(network.chainId);
|
|
4288
|
+
networkMap.set(network.chainId, _extends({}, existingNetwork, network));
|
|
4289
|
+
}
|
|
4290
|
+
}
|
|
4291
|
+
return Array.from(networkMap.values());
|
|
4292
|
+
};
|
|
4293
|
+
|
|
4274
4294
|
exports.Analytics = Analytics;
|
|
4275
4295
|
exports.AnalyticsEventType = AnalyticsEventType;
|
|
4276
4296
|
exports.BaseInjectedTransport = BaseInjectedTransport;
|
|
@@ -3728,9 +3728,13 @@ class SequenceClientSession {
|
|
|
3728
3728
|
return this.store.setItem(SequenceClientSession.SESSION_LOCALSTORE_KEY, JSON.stringify(session));
|
|
3729
3729
|
}
|
|
3730
3730
|
getSession() {
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
|
|
3731
|
+
try {
|
|
3732
|
+
const session = this.store.getItem(SequenceClientSession.SESSION_LOCALSTORE_KEY);
|
|
3733
|
+
if (session) {
|
|
3734
|
+
return JSON.parse(session);
|
|
3735
|
+
}
|
|
3736
|
+
} catch (err) {
|
|
3737
|
+
console.error('Error parsing session', err);
|
|
3734
3738
|
}
|
|
3735
3739
|
return undefined;
|
|
3736
3740
|
}
|
|
@@ -4182,7 +4186,7 @@ let sequenceWalletProvider;
|
|
|
4182
4186
|
* @throws Error if projectAccessKey is not provided, empty string or is not string.
|
|
4183
4187
|
*/
|
|
4184
4188
|
const initWallet = (projectAccessKey, partialConfig) => {
|
|
4185
|
-
var
|
|
4189
|
+
var _findNetworkConfig, _client$getSession;
|
|
4186
4190
|
if (!projectAccessKey || typeof projectAccessKey !== 'string') {
|
|
4187
4191
|
throw new Error('Please pass a projectAccessKey in initWallet.');
|
|
4188
4192
|
}
|
|
@@ -4194,53 +4198,29 @@ const initWallet = (projectAccessKey, partialConfig) => {
|
|
|
4194
4198
|
const config = _extends({}, DefaultProviderConfig, partialConfig, {
|
|
4195
4199
|
transports: _extends({}, DefaultProviderConfig.transports, partialConfig == null ? void 0 : partialConfig.transports)
|
|
4196
4200
|
});
|
|
4197
|
-
|
|
4201
|
+
let networks = [];
|
|
4202
|
+
const updateNetworks = (connectedNetworks = []) => {
|
|
4203
|
+
var _config$networks;
|
|
4204
|
+
networks = mergeNetworks(network.allNetworks, connectedNetworks, (_config$networks = config.networks) != null ? _config$networks : []);
|
|
4205
|
+
|
|
4206
|
+
// Append projectAccessKey to network rpcUrls
|
|
4207
|
+
networks = networks.map(network => {
|
|
4208
|
+
// Don't double-append in the case the user has already included their access key in the rpc URL
|
|
4209
|
+
if (network.rpcUrl.includes(projectAccessKey)) {
|
|
4210
|
+
return network;
|
|
4211
|
+
}
|
|
4198
4212
|
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
const newNetworks = (_config$networks$filt = (_config$networks = config.networks) == null ? void 0 : _config$networks.filter(n => {
|
|
4202
|
-
// eslint-disable-next-line
|
|
4203
|
-
n.rpcUrl !== undefined && n.chainId !== undefined && !network.allNetworks.find(an => an.chainId === n.chainId);
|
|
4204
|
-
})) != null ? _config$networks$filt : [];
|
|
4205
|
-
|
|
4206
|
-
// Override any information about the networks using the config
|
|
4207
|
-
const combinedNetworks = network.allNetworks.map(n => {
|
|
4208
|
-
var _config$networks2;
|
|
4209
|
-
const network = (_config$networks2 = config.networks) == null ? void 0 : _config$networks2.find(cn => cn.chainId === n.chainId);
|
|
4210
|
-
return network ? _extends({}, n, network) : n;
|
|
4211
|
-
}).concat(newNetworks).map(network => {
|
|
4212
|
-
// don't double-append in the case the user has already included their access key in the rpc URL
|
|
4213
|
-
if (network.rpcUrl.includes(projectAccessKey)) {
|
|
4213
|
+
// XXX: This will probably break non-sequence RPC provider URLs.
|
|
4214
|
+
network.rpcUrl = network.rpcUrl + `/${projectAccessKey}`;
|
|
4214
4215
|
return network;
|
|
4215
|
-
}
|
|
4216
|
-
|
|
4217
|
-
// this will probably break non-sequence RPC provider URLs.
|
|
4218
|
-
network.rpcUrl = network.rpcUrl + `/${projectAccessKey}`;
|
|
4219
|
-
return network;
|
|
4220
|
-
});
|
|
4221
|
-
|
|
4222
|
-
// This builds a "public rpc" on demand, we build them on demand because we don't want to
|
|
4223
|
-
// generate a bunch of providers for networks that aren't used.
|
|
4224
|
-
const providerForChainId = chainId => {
|
|
4225
|
-
if (!rpcProviders[chainId]) {
|
|
4226
|
-
var _combinedNetworks$fin;
|
|
4227
|
-
const rpcUrl = (_combinedNetworks$fin = combinedNetworks.find(n => n.chainId === chainId)) == null ? void 0 : _combinedNetworks$fin.rpcUrl;
|
|
4228
|
-
if (!rpcUrl) {
|
|
4229
|
-
throw new Error(`no rpcUrl found for chainId: ${chainId}`);
|
|
4230
|
-
}
|
|
4231
|
-
rpcProviders[chainId] = new network.JsonRpcProvider(rpcUrl, {
|
|
4232
|
-
middlewares: [network.loggingProviderMiddleware, network.exceptionProviderMiddleware, new network.CachedProvider()]
|
|
4233
|
-
}, {
|
|
4234
|
-
cacheTimeout: -1
|
|
4235
|
-
});
|
|
4236
|
-
}
|
|
4237
|
-
return rpcProviders[chainId];
|
|
4216
|
+
});
|
|
4238
4217
|
};
|
|
4218
|
+
updateNetworks();
|
|
4239
4219
|
|
|
4240
4220
|
// This is the starting default network (as defined by the config)
|
|
4241
4221
|
// it can be later be changed using `wallet_switchEthereumChain` or some
|
|
4242
4222
|
// of the other methods on the provider.
|
|
4243
|
-
const defaultNetwork = config.defaultNetwork ? (_findNetworkConfig = network.findNetworkConfig(
|
|
4223
|
+
const defaultNetwork = config.defaultNetwork ? (_findNetworkConfig = network.findNetworkConfig(networks, config.defaultNetwork)) == null ? void 0 : _findNetworkConfig.chainId : undefined;
|
|
4244
4224
|
if (!defaultNetwork && config.defaultNetwork) {
|
|
4245
4225
|
throw new Error(`defaultNetwork not found for chainId: ${config.defaultNetwork}`);
|
|
4246
4226
|
}
|
|
@@ -4255,6 +4235,34 @@ const initWallet = (projectAccessKey, partialConfig) => {
|
|
|
4255
4235
|
projectAccessKey: projectAccessKey,
|
|
4256
4236
|
analytics: config.analytics
|
|
4257
4237
|
});
|
|
4238
|
+
updateNetworks((_client$getSession = client.getSession()) == null ? void 0 : _client$getSession.networks);
|
|
4239
|
+
client.onConnect(ev => {
|
|
4240
|
+
var _ev$session;
|
|
4241
|
+
updateNetworks((_ev$session = ev.session) == null ? void 0 : _ev$session.networks);
|
|
4242
|
+
});
|
|
4243
|
+
const rpcProviders = {};
|
|
4244
|
+
|
|
4245
|
+
// This builds a "public rpc" on demand, we build them on demand because we don't want to
|
|
4246
|
+
// generate a bunch of providers for networks that aren't used.
|
|
4247
|
+
const providerForChainId = chainId => {
|
|
4248
|
+
const network$1 = network.findNetworkConfig(networks, chainId);
|
|
4249
|
+
if (!network$1) {
|
|
4250
|
+
throw new Error(`no network config found for chainId: ${chainId}`);
|
|
4251
|
+
}
|
|
4252
|
+
const {
|
|
4253
|
+
rpcUrl
|
|
4254
|
+
} = network$1;
|
|
4255
|
+
|
|
4256
|
+
// Cache providers by rpc url
|
|
4257
|
+
if (!rpcProviders[rpcUrl]) {
|
|
4258
|
+
rpcProviders[rpcUrl] = new network.JsonRpcProvider(rpcUrl, {
|
|
4259
|
+
middlewares: [network.loggingProviderMiddleware, network.exceptionProviderMiddleware, new network.CachedProvider()]
|
|
4260
|
+
}, {
|
|
4261
|
+
cacheTimeout: -1
|
|
4262
|
+
});
|
|
4263
|
+
}
|
|
4264
|
+
return rpcProviders[rpcUrl];
|
|
4265
|
+
};
|
|
4258
4266
|
sequenceWalletProvider = new SequenceProvider(client, providerForChainId);
|
|
4259
4267
|
return sequenceWalletProvider;
|
|
4260
4268
|
};
|
|
@@ -4271,6 +4279,18 @@ const getWallet = () => {
|
|
|
4271
4279
|
return sequenceWalletProvider;
|
|
4272
4280
|
};
|
|
4273
4281
|
|
|
4282
|
+
// allNetworks <- connectedNetworks <- config.networks
|
|
4283
|
+
const mergeNetworks = (...networks) => {
|
|
4284
|
+
const networkMap = new Map();
|
|
4285
|
+
for (const network of networks.flat()) {
|
|
4286
|
+
if (network.chainId && network.rpcUrl) {
|
|
4287
|
+
const existingNetwork = networkMap.get(network.chainId);
|
|
4288
|
+
networkMap.set(network.chainId, _extends({}, existingNetwork, network));
|
|
4289
|
+
}
|
|
4290
|
+
}
|
|
4291
|
+
return Array.from(networkMap.values());
|
|
4292
|
+
};
|
|
4293
|
+
|
|
4274
4294
|
exports.Analytics = Analytics;
|
|
4275
4295
|
exports.AnalyticsEventType = AnalyticsEventType;
|
|
4276
4296
|
exports.BaseInjectedTransport = BaseInjectedTransport;
|
|
@@ -3724,9 +3724,13 @@ class SequenceClientSession {
|
|
|
3724
3724
|
return this.store.setItem(SequenceClientSession.SESSION_LOCALSTORE_KEY, JSON.stringify(session));
|
|
3725
3725
|
}
|
|
3726
3726
|
getSession() {
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3727
|
+
try {
|
|
3728
|
+
const session = this.store.getItem(SequenceClientSession.SESSION_LOCALSTORE_KEY);
|
|
3729
|
+
if (session) {
|
|
3730
|
+
return JSON.parse(session);
|
|
3731
|
+
}
|
|
3732
|
+
} catch (err) {
|
|
3733
|
+
console.error('Error parsing session', err);
|
|
3730
3734
|
}
|
|
3731
3735
|
return undefined;
|
|
3732
3736
|
}
|
|
@@ -4178,7 +4182,7 @@ let sequenceWalletProvider;
|
|
|
4178
4182
|
* @throws Error if projectAccessKey is not provided, empty string or is not string.
|
|
4179
4183
|
*/
|
|
4180
4184
|
const initWallet = (projectAccessKey, partialConfig) => {
|
|
4181
|
-
var
|
|
4185
|
+
var _findNetworkConfig, _client$getSession;
|
|
4182
4186
|
if (!projectAccessKey || typeof projectAccessKey !== 'string') {
|
|
4183
4187
|
throw new Error('Please pass a projectAccessKey in initWallet.');
|
|
4184
4188
|
}
|
|
@@ -4190,53 +4194,29 @@ const initWallet = (projectAccessKey, partialConfig) => {
|
|
|
4190
4194
|
const config = _extends({}, DefaultProviderConfig, partialConfig, {
|
|
4191
4195
|
transports: _extends({}, DefaultProviderConfig.transports, partialConfig == null ? void 0 : partialConfig.transports)
|
|
4192
4196
|
});
|
|
4193
|
-
|
|
4197
|
+
let networks = [];
|
|
4198
|
+
const updateNetworks = (connectedNetworks = []) => {
|
|
4199
|
+
var _config$networks;
|
|
4200
|
+
networks = mergeNetworks(allNetworks, connectedNetworks, (_config$networks = config.networks) != null ? _config$networks : []);
|
|
4201
|
+
|
|
4202
|
+
// Append projectAccessKey to network rpcUrls
|
|
4203
|
+
networks = networks.map(network => {
|
|
4204
|
+
// Don't double-append in the case the user has already included their access key in the rpc URL
|
|
4205
|
+
if (network.rpcUrl.includes(projectAccessKey)) {
|
|
4206
|
+
return network;
|
|
4207
|
+
}
|
|
4194
4208
|
|
|
4195
|
-
|
|
4196
|
-
|
|
4197
|
-
const newNetworks = (_config$networks$filt = (_config$networks = config.networks) == null ? void 0 : _config$networks.filter(n => {
|
|
4198
|
-
// eslint-disable-next-line
|
|
4199
|
-
n.rpcUrl !== undefined && n.chainId !== undefined && !allNetworks.find(an => an.chainId === n.chainId);
|
|
4200
|
-
})) != null ? _config$networks$filt : [];
|
|
4201
|
-
|
|
4202
|
-
// Override any information about the networks using the config
|
|
4203
|
-
const combinedNetworks = allNetworks.map(n => {
|
|
4204
|
-
var _config$networks2;
|
|
4205
|
-
const network = (_config$networks2 = config.networks) == null ? void 0 : _config$networks2.find(cn => cn.chainId === n.chainId);
|
|
4206
|
-
return network ? _extends({}, n, network) : n;
|
|
4207
|
-
}).concat(newNetworks).map(network => {
|
|
4208
|
-
// don't double-append in the case the user has already included their access key in the rpc URL
|
|
4209
|
-
if (network.rpcUrl.includes(projectAccessKey)) {
|
|
4209
|
+
// XXX: This will probably break non-sequence RPC provider URLs.
|
|
4210
|
+
network.rpcUrl = network.rpcUrl + `/${projectAccessKey}`;
|
|
4210
4211
|
return network;
|
|
4211
|
-
}
|
|
4212
|
-
|
|
4213
|
-
// this will probably break non-sequence RPC provider URLs.
|
|
4214
|
-
network.rpcUrl = network.rpcUrl + `/${projectAccessKey}`;
|
|
4215
|
-
return network;
|
|
4216
|
-
});
|
|
4217
|
-
|
|
4218
|
-
// This builds a "public rpc" on demand, we build them on demand because we don't want to
|
|
4219
|
-
// generate a bunch of providers for networks that aren't used.
|
|
4220
|
-
const providerForChainId = chainId => {
|
|
4221
|
-
if (!rpcProviders[chainId]) {
|
|
4222
|
-
var _combinedNetworks$fin;
|
|
4223
|
-
const rpcUrl = (_combinedNetworks$fin = combinedNetworks.find(n => n.chainId === chainId)) == null ? void 0 : _combinedNetworks$fin.rpcUrl;
|
|
4224
|
-
if (!rpcUrl) {
|
|
4225
|
-
throw new Error(`no rpcUrl found for chainId: ${chainId}`);
|
|
4226
|
-
}
|
|
4227
|
-
rpcProviders[chainId] = new JsonRpcProvider(rpcUrl, {
|
|
4228
|
-
middlewares: [loggingProviderMiddleware, exceptionProviderMiddleware, new CachedProvider()]
|
|
4229
|
-
}, {
|
|
4230
|
-
cacheTimeout: -1
|
|
4231
|
-
});
|
|
4232
|
-
}
|
|
4233
|
-
return rpcProviders[chainId];
|
|
4212
|
+
});
|
|
4234
4213
|
};
|
|
4214
|
+
updateNetworks();
|
|
4235
4215
|
|
|
4236
4216
|
// This is the starting default network (as defined by the config)
|
|
4237
4217
|
// it can be later be changed using `wallet_switchEthereumChain` or some
|
|
4238
4218
|
// of the other methods on the provider.
|
|
4239
|
-
const defaultNetwork = config.defaultNetwork ? (_findNetworkConfig = findNetworkConfig(
|
|
4219
|
+
const defaultNetwork = config.defaultNetwork ? (_findNetworkConfig = findNetworkConfig(networks, config.defaultNetwork)) == null ? void 0 : _findNetworkConfig.chainId : undefined;
|
|
4240
4220
|
if (!defaultNetwork && config.defaultNetwork) {
|
|
4241
4221
|
throw new Error(`defaultNetwork not found for chainId: ${config.defaultNetwork}`);
|
|
4242
4222
|
}
|
|
@@ -4251,6 +4231,34 @@ const initWallet = (projectAccessKey, partialConfig) => {
|
|
|
4251
4231
|
projectAccessKey: projectAccessKey,
|
|
4252
4232
|
analytics: config.analytics
|
|
4253
4233
|
});
|
|
4234
|
+
updateNetworks((_client$getSession = client.getSession()) == null ? void 0 : _client$getSession.networks);
|
|
4235
|
+
client.onConnect(ev => {
|
|
4236
|
+
var _ev$session;
|
|
4237
|
+
updateNetworks((_ev$session = ev.session) == null ? void 0 : _ev$session.networks);
|
|
4238
|
+
});
|
|
4239
|
+
const rpcProviders = {};
|
|
4240
|
+
|
|
4241
|
+
// This builds a "public rpc" on demand, we build them on demand because we don't want to
|
|
4242
|
+
// generate a bunch of providers for networks that aren't used.
|
|
4243
|
+
const providerForChainId = chainId => {
|
|
4244
|
+
const network = findNetworkConfig(networks, chainId);
|
|
4245
|
+
if (!network) {
|
|
4246
|
+
throw new Error(`no network config found for chainId: ${chainId}`);
|
|
4247
|
+
}
|
|
4248
|
+
const {
|
|
4249
|
+
rpcUrl
|
|
4250
|
+
} = network;
|
|
4251
|
+
|
|
4252
|
+
// Cache providers by rpc url
|
|
4253
|
+
if (!rpcProviders[rpcUrl]) {
|
|
4254
|
+
rpcProviders[rpcUrl] = new JsonRpcProvider(rpcUrl, {
|
|
4255
|
+
middlewares: [loggingProviderMiddleware, exceptionProviderMiddleware, new CachedProvider()]
|
|
4256
|
+
}, {
|
|
4257
|
+
cacheTimeout: -1
|
|
4258
|
+
});
|
|
4259
|
+
}
|
|
4260
|
+
return rpcProviders[rpcUrl];
|
|
4261
|
+
};
|
|
4254
4262
|
sequenceWalletProvider = new SequenceProvider(client, providerForChainId);
|
|
4255
4263
|
return sequenceWalletProvider;
|
|
4256
4264
|
};
|
|
@@ -4267,4 +4275,16 @@ const getWallet = () => {
|
|
|
4267
4275
|
return sequenceWalletProvider;
|
|
4268
4276
|
};
|
|
4269
4277
|
|
|
4278
|
+
// allNetworks <- connectedNetworks <- config.networks
|
|
4279
|
+
const mergeNetworks = (...networks) => {
|
|
4280
|
+
const networkMap = new Map();
|
|
4281
|
+
for (const network of networks.flat()) {
|
|
4282
|
+
if (network.chainId && network.rpcUrl) {
|
|
4283
|
+
const existingNetwork = networkMap.get(network.chainId);
|
|
4284
|
+
networkMap.set(network.chainId, _extends({}, existingNetwork, network));
|
|
4285
|
+
}
|
|
4286
|
+
}
|
|
4287
|
+
return Array.from(networkMap.values());
|
|
4288
|
+
};
|
|
4289
|
+
|
|
4270
4290
|
export { Analytics, AnalyticsEventType, BaseInjectedTransport, BaseProviderTransport, BaseWalletTransport, CHANNEL_ID, DefaultChainIdTracker, DefaultProviderConfig, ErrSignedInRequired, EventType, ExtensionMessageHandler, ExtensionMessageProvider, InitState, LocalStorage, MemoryItemStore, MuxMessageProvider, OpenState, PROVIDER_OPEN_TIMEOUT, ProviderError, ProxyMessageChannel, ProxyMessageChannelPort, ProxyMessageHandler, ProxyMessageProvider, SequenceClient, SequenceClientSession, SequenceProvider, SequenceSigner, SingleNetworkSequenceProvider, SingleNetworkSequenceSigner, UnrealMessageHandler, UnrealMessageProvider, WalletRequestHandler, WindowMessageHandler, WindowMessageProvider, WindowSessionParams, getWallet, initWallet, isBrowserExtension, isMuxTransportTemplate, isProviderTransport, isUnityPlugin, isValidMessageSignature, isValidSignature, isValidTypedDataSignature, isWalletUpToDate, messageToBytes, nextMessageIdx, prefixEIP191Message, resolveArrayProperties, setupAnalytics, trimEIP191Prefix, unregisterWallet, useBestStore, validateTransactionRequest };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xsequence/provider",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"description": "provider sub-package for Sequence",
|
|
5
5
|
"repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/provider",
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
"@databeat/tracker": "^0.9.3",
|
|
16
16
|
"eventemitter2": "^6.4.5",
|
|
17
17
|
"webextension-polyfill": "^0.10.0",
|
|
18
|
-
"@0xsequence/abi": "2.2.
|
|
19
|
-
"@0xsequence/account": "2.2.
|
|
20
|
-
"@0xsequence/
|
|
21
|
-
"@0xsequence/
|
|
22
|
-
"@0xsequence/
|
|
23
|
-
"@0xsequence/network": "2.2.
|
|
24
|
-
"@0xsequence/
|
|
25
|
-
"@0xsequence/
|
|
26
|
-
"@0xsequence/wallet": "2.2.
|
|
18
|
+
"@0xsequence/abi": "2.2.3",
|
|
19
|
+
"@0xsequence/account": "2.2.3",
|
|
20
|
+
"@0xsequence/auth": "2.2.3",
|
|
21
|
+
"@0xsequence/core": "2.2.3",
|
|
22
|
+
"@0xsequence/migration": "2.2.3",
|
|
23
|
+
"@0xsequence/network": "2.2.3",
|
|
24
|
+
"@0xsequence/relayer": "2.2.3",
|
|
25
|
+
"@0xsequence/utils": "2.2.3",
|
|
26
|
+
"@0xsequence/wallet": "2.2.3"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/webextension-polyfill": "^0.10.0",
|
package/src/client.ts
CHANGED
|
@@ -54,10 +54,14 @@ export class SequenceClientSession {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
getSession(): WalletSession | undefined {
|
|
57
|
-
|
|
57
|
+
try {
|
|
58
|
+
const session = this.store.getItem(SequenceClientSession.SESSION_LOCALSTORE_KEY)
|
|
58
59
|
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
if (session) {
|
|
61
|
+
return JSON.parse(session)
|
|
62
|
+
}
|
|
63
|
+
} catch (err) {
|
|
64
|
+
console.error('Error parsing session', err)
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
return undefined
|
package/src/init.ts
CHANGED
|
@@ -84,58 +84,31 @@ export const initWallet = (projectAccessKey: string, partialConfig?: Partial<Pro
|
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
// Override any information about the networks using the config
|
|
97
|
-
const combinedNetworks = allNetworks
|
|
98
|
-
.map(n => {
|
|
99
|
-
const network = config.networks?.find(cn => cn.chainId === n.chainId)
|
|
100
|
-
return network ? { ...n, ...network } : n
|
|
101
|
-
})
|
|
102
|
-
.concat(newNetworks)
|
|
103
|
-
.map(network => {
|
|
104
|
-
// don't double-append in the case the user has already included their access key in the rpc URL
|
|
87
|
+
let networks: NetworkConfig[] = []
|
|
88
|
+
|
|
89
|
+
const updateNetworks = (connectedNetworks: NetworkConfig[] = []) => {
|
|
90
|
+
networks = mergeNetworks(allNetworks, connectedNetworks, config.networks ?? [])
|
|
91
|
+
|
|
92
|
+
// Append projectAccessKey to network rpcUrls
|
|
93
|
+
networks = networks.map(network => {
|
|
94
|
+
// Don't double-append in the case the user has already included their access key in the rpc URL
|
|
105
95
|
if (network.rpcUrl.includes(projectAccessKey)) {
|
|
106
96
|
return network
|
|
107
97
|
}
|
|
108
98
|
|
|
109
|
-
//
|
|
99
|
+
// XXX: This will probably break non-sequence RPC provider URLs.
|
|
110
100
|
network.rpcUrl = network.rpcUrl + `/${projectAccessKey}`
|
|
101
|
+
|
|
111
102
|
return network
|
|
112
103
|
})
|
|
113
|
-
|
|
114
|
-
// This builds a "public rpc" on demand, we build them on demand because we don't want to
|
|
115
|
-
// generate a bunch of providers for networks that aren't used.
|
|
116
|
-
const providerForChainId = (chainId: number) => {
|
|
117
|
-
if (!rpcProviders[chainId]) {
|
|
118
|
-
const rpcUrl = combinedNetworks.find(n => n.chainId === chainId)?.rpcUrl
|
|
119
|
-
if (!rpcUrl) {
|
|
120
|
-
throw new Error(`no rpcUrl found for chainId: ${chainId}`)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
rpcProviders[chainId] = new JsonRpcProvider(
|
|
124
|
-
rpcUrl,
|
|
125
|
-
{
|
|
126
|
-
middlewares: [loggingProviderMiddleware, exceptionProviderMiddleware, new CachedProvider()]
|
|
127
|
-
},
|
|
128
|
-
{ cacheTimeout: -1 }
|
|
129
|
-
)
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
return rpcProviders[chainId]
|
|
133
104
|
}
|
|
134
105
|
|
|
106
|
+
updateNetworks()
|
|
107
|
+
|
|
135
108
|
// This is the starting default network (as defined by the config)
|
|
136
109
|
// it can be later be changed using `wallet_switchEthereumChain` or some
|
|
137
110
|
// of the other methods on the provider.
|
|
138
|
-
const defaultNetwork = config.defaultNetwork ? findNetworkConfig(
|
|
111
|
+
const defaultNetwork = config.defaultNetwork ? findNetworkConfig(networks, config.defaultNetwork)?.chainId : undefined
|
|
139
112
|
if (!defaultNetwork && config.defaultNetwork) {
|
|
140
113
|
throw new Error(`defaultNetwork not found for chainId: ${config.defaultNetwork}`)
|
|
141
114
|
}
|
|
@@ -151,6 +124,39 @@ export const initWallet = (projectAccessKey: string, partialConfig?: Partial<Pro
|
|
|
151
124
|
analytics: config.analytics
|
|
152
125
|
})
|
|
153
126
|
|
|
127
|
+
updateNetworks(client.getSession()?.networks)
|
|
128
|
+
|
|
129
|
+
client.onConnect(ev => {
|
|
130
|
+
updateNetworks(ev.session?.networks)
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
const rpcProviders: Record<string, ethers.JsonRpcProvider> = {}
|
|
134
|
+
|
|
135
|
+
// This builds a "public rpc" on demand, we build them on demand because we don't want to
|
|
136
|
+
// generate a bunch of providers for networks that aren't used.
|
|
137
|
+
const providerForChainId = (chainId: number) => {
|
|
138
|
+
const network = findNetworkConfig(networks, chainId)
|
|
139
|
+
|
|
140
|
+
if (!network) {
|
|
141
|
+
throw new Error(`no network config found for chainId: ${chainId}`)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const { rpcUrl } = network
|
|
145
|
+
|
|
146
|
+
// Cache providers by rpc url
|
|
147
|
+
if (!rpcProviders[rpcUrl]) {
|
|
148
|
+
rpcProviders[rpcUrl] = new JsonRpcProvider(
|
|
149
|
+
rpcUrl,
|
|
150
|
+
{
|
|
151
|
+
middlewares: [loggingProviderMiddleware, exceptionProviderMiddleware, new CachedProvider()]
|
|
152
|
+
},
|
|
153
|
+
{ cacheTimeout: -1 }
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return rpcProviders[rpcUrl]
|
|
158
|
+
}
|
|
159
|
+
|
|
154
160
|
sequenceWalletProvider = new SequenceProvider(client, providerForChainId)
|
|
155
161
|
return sequenceWalletProvider
|
|
156
162
|
}
|
|
@@ -168,3 +174,18 @@ export const getWallet = () => {
|
|
|
168
174
|
}
|
|
169
175
|
return sequenceWalletProvider
|
|
170
176
|
}
|
|
177
|
+
|
|
178
|
+
// allNetworks <- connectedNetworks <- config.networks
|
|
179
|
+
const mergeNetworks = (...networks: Partial<NetworkConfig>[][]) => {
|
|
180
|
+
const networkMap = new Map<number, NetworkConfig>()
|
|
181
|
+
|
|
182
|
+
for (const network of networks.flat()) {
|
|
183
|
+
if (network.chainId && network.rpcUrl) {
|
|
184
|
+
const existingNetwork = networkMap.get(network.chainId)
|
|
185
|
+
|
|
186
|
+
networkMap.set(network.chainId, { ...existingNetwork, ...network } as NetworkConfig)
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return Array.from(networkMap.values())
|
|
191
|
+
}
|