@imtbl/sdk 0.28.10-alpha.1 → 0.29.0-alpha.1
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 +147 -0
- package/dist/blockchain_data.d.ts +14 -5
- package/dist/blockchain_data.js +4 -4
- package/dist/browser/checkout/sdk.js +2 -2
- package/dist/browser/checkout/widgets.js +51 -51
- package/dist/checkout_sdk.d.ts +462 -216
- package/dist/checkout_sdk.js +6 -24
- package/dist/config.d.ts +18 -6
- package/dist/config.js +21 -20
- package/dist/immutablex_client.d.ts +14 -5
- package/dist/immutablex_client.js +1 -1
- package/dist/index.browser.js +10 -10
- package/dist/index.browser.js.map +1 -1
- package/dist/index.cjs +174 -122
- package/dist/index.d.ts +471 -216
- package/dist/index.js +174 -122
- package/dist/orderbook.d.ts +14 -5
- package/dist/passport.d.ts +14 -5
- package/dist/passport.js +146 -98
- package/dist/provider.d.ts +14 -5
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -7,10 +7,10 @@ var jwt_decode = require('jwt-decode');
|
|
|
7
7
|
var crypto = require('crypto');
|
|
8
8
|
var magicSdk = require('magic-sdk');
|
|
9
9
|
var oidc = require('@magic-ext/oidc');
|
|
10
|
+
var providers = require('@ethersproject/providers');
|
|
10
11
|
var ethers = require('ethers');
|
|
11
12
|
var BN$2 = require('bn.js');
|
|
12
13
|
var encUtils = require('enc-utils');
|
|
13
|
-
var providers = require('@ethersproject/providers');
|
|
14
14
|
var events = require('events');
|
|
15
15
|
var abi = require('@0xsequence/abi');
|
|
16
16
|
var config$1 = require('@0xsequence/config');
|
|
@@ -55,34 +55,38 @@ class ImmutableConfiguration {
|
|
|
55
55
|
environment;
|
|
56
56
|
rateLimitingKey;
|
|
57
57
|
apiKey;
|
|
58
|
-
|
|
58
|
+
publishableKey;
|
|
59
59
|
constructor(options) {
|
|
60
60
|
this.environment = options.environment;
|
|
61
|
-
if (options.rateLimitingKey) {
|
|
62
|
-
this.rateLimitingKey = options.rateLimitingKey;
|
|
63
|
-
globalAxios$1.defaults.headers.common['x-api-key'] = this.rateLimitingKey;
|
|
64
|
-
}
|
|
65
|
-
if (options.apiKey) {
|
|
66
|
-
if (!options.apiKey.startsWith('sk_imapik-')) {
|
|
67
|
-
throw new Error('Invalid API key');
|
|
68
|
-
}
|
|
69
|
-
this.apiKey = options.apiKey;
|
|
70
|
-
globalAxios$1.defaults.headers.common['x-immutable-api-key'] = this.apiKey;
|
|
71
|
-
}
|
|
72
|
-
if (options.clientAppId) {
|
|
73
|
-
if (!options.clientAppId.startsWith('cai_imapik-')) {
|
|
74
|
-
throw new Error('Invalid Client App Id');
|
|
75
|
-
}
|
|
76
|
-
this.clientAppId = options.clientAppId;
|
|
77
|
-
globalAxios$1.defaults.headers.common['x-immutable-client-app-id'] = this.clientAppId;
|
|
78
|
-
}
|
|
79
61
|
}
|
|
80
62
|
}
|
|
63
|
+
const API_KEY_PREFIX = 'sk_imapik-';
|
|
64
|
+
const PUBLISHABLE_KEY_PREFIX = 'pk_imapik-';
|
|
65
|
+
const PUBLISHABLE_KEY_LENGTH = 30;
|
|
66
|
+
const addApiKeyToAxiosHeader = (apiKey) => {
|
|
67
|
+
if (!apiKey.startsWith(API_KEY_PREFIX)) {
|
|
68
|
+
throw new Error('Invalid API key. Create your api key in Immutable developer hub. https://hub.immutable.com');
|
|
69
|
+
}
|
|
70
|
+
globalAxios$1.defaults.headers.common['x-immutable-api-key'] = apiKey;
|
|
71
|
+
};
|
|
72
|
+
const addPublishableKeyToAxiosHeader = (publishableKey) => {
|
|
73
|
+
if (!publishableKey.startsWith(PUBLISHABLE_KEY_PREFIX) || publishableKey.length !== PUBLISHABLE_KEY_LENGTH) {
|
|
74
|
+
throw new Error('Invalid Publishable key. Create your Publishable key in Immutable developer hub.'
|
|
75
|
+
+ ' https://hub.immutable.com');
|
|
76
|
+
}
|
|
77
|
+
globalAxios$1.defaults.headers.common['x-immutable-publishable-key'] = publishableKey;
|
|
78
|
+
};
|
|
79
|
+
const addRateLimitingKeyToAxiosHeader = (rateLimitingKey) => {
|
|
80
|
+
globalAxios$1.defaults.headers.common['x-api-key'] = rateLimitingKey;
|
|
81
|
+
};
|
|
81
82
|
|
|
82
83
|
var config = /*#__PURE__*/Object.freeze({
|
|
83
84
|
__proto__: null,
|
|
84
85
|
get Environment () { return Environment$1; },
|
|
85
|
-
ImmutableConfiguration: ImmutableConfiguration
|
|
86
|
+
ImmutableConfiguration: ImmutableConfiguration,
|
|
87
|
+
addApiKeyToAxiosHeader: addApiKeyToAxiosHeader,
|
|
88
|
+
addPublishableKeyToAxiosHeader: addPublishableKeyToAxiosHeader,
|
|
89
|
+
addRateLimitingKeyToAxiosHeader: addRateLimitingKeyToAxiosHeader
|
|
86
90
|
});
|
|
87
91
|
|
|
88
92
|
/* tslint:disable */
|
|
@@ -839,7 +843,7 @@ const CollectionsApiAxiosParamCreator = function (configuration) {
|
|
|
839
843
|
const localVarHeaderParameter = {};
|
|
840
844
|
const localVarQueryParameter = {};
|
|
841
845
|
// authentication ImmutableApiKey required
|
|
842
|
-
await setApiKeyToObject(localVarHeaderParameter, "x-immutable-api-
|
|
846
|
+
await setApiKeyToObject(localVarHeaderParameter, "x-immutable-api-key", configuration);
|
|
843
847
|
localVarHeaderParameter['Content-Type'] = 'application/json';
|
|
844
848
|
setSearchParams$1(localVarUrlObj, localVarQueryParameter);
|
|
845
849
|
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
|
@@ -1149,7 +1153,7 @@ const MetadataApiAxiosParamCreator = function (configuration) {
|
|
|
1149
1153
|
const localVarHeaderParameter = {};
|
|
1150
1154
|
const localVarQueryParameter = {};
|
|
1151
1155
|
// authentication ImmutableApiKey required
|
|
1152
|
-
await setApiKeyToObject(localVarHeaderParameter, "x-immutable-api-
|
|
1156
|
+
await setApiKeyToObject(localVarHeaderParameter, "x-immutable-api-key", configuration);
|
|
1153
1157
|
localVarHeaderParameter['Content-Type'] = 'application/json';
|
|
1154
1158
|
setSearchParams$1(localVarUrlObj, localVarQueryParameter);
|
|
1155
1159
|
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
|
@@ -1189,7 +1193,7 @@ const MetadataApiAxiosParamCreator = function (configuration) {
|
|
|
1189
1193
|
const localVarHeaderParameter = {};
|
|
1190
1194
|
const localVarQueryParameter = {};
|
|
1191
1195
|
// authentication ImmutableApiKey required
|
|
1192
|
-
await setApiKeyToObject(localVarHeaderParameter, "x-immutable-api-
|
|
1196
|
+
await setApiKeyToObject(localVarHeaderParameter, "x-immutable-api-key", configuration);
|
|
1193
1197
|
localVarHeaderParameter['Content-Type'] = 'application/json';
|
|
1194
1198
|
setSearchParams$1(localVarUrlObj, localVarQueryParameter);
|
|
1195
1199
|
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
|
@@ -3649,7 +3653,7 @@ class MultiRollupApiClients {
|
|
|
3649
3653
|
}
|
|
3650
3654
|
|
|
3651
3655
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
3652
|
-
const defaultHeaders$1 = { 'x-sdk-version': 'ts-immutable-sdk-0.
|
|
3656
|
+
const defaultHeaders$1 = { 'x-sdk-version': 'ts-immutable-sdk-0.29.0-alpha.1' };
|
|
3653
3657
|
const createConfig = ({ basePath, headers, }) => {
|
|
3654
3658
|
if (!basePath.trim()) {
|
|
3655
3659
|
throw Error('basePath can not be empty');
|
|
@@ -3709,7 +3713,7 @@ class APIError extends Error {
|
|
|
3709
3713
|
|
|
3710
3714
|
/* eslint-disable implicit-arrow-linebreak */
|
|
3711
3715
|
const defaultHeaders = {
|
|
3712
|
-
sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.
|
|
3716
|
+
sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.29.0-alpha.1',
|
|
3713
3717
|
};
|
|
3714
3718
|
/**
|
|
3715
3719
|
* createAPIConfiguration to create a custom Configuration
|
|
@@ -4120,7 +4124,7 @@ const createImmutableXConfiguration = ({ basePath, chainID, coreContractAddress,
|
|
|
4120
4124
|
chainID,
|
|
4121
4125
|
coreContractAddress,
|
|
4122
4126
|
registrationContractAddress,
|
|
4123
|
-
sdkVersion: 'ts-immutable-sdk-0.
|
|
4127
|
+
sdkVersion: 'ts-immutable-sdk-0.29.0-alpha.1',
|
|
4124
4128
|
});
|
|
4125
4129
|
/**
|
|
4126
4130
|
* Sets `sdkVersion` at the time of build
|
|
@@ -8775,9 +8779,9 @@ class AuthManager {
|
|
|
8775
8779
|
};
|
|
8776
8780
|
if (passport?.imx_eth_address) {
|
|
8777
8781
|
user.imx = {
|
|
8778
|
-
ethAddress: passport
|
|
8779
|
-
starkAddress: passport
|
|
8780
|
-
userAdminAddress: passport
|
|
8782
|
+
ethAddress: passport.imx_eth_address,
|
|
8783
|
+
starkAddress: passport.imx_stark_address,
|
|
8784
|
+
userAdminAddress: passport.imx_user_admin_address,
|
|
8781
8785
|
};
|
|
8782
8786
|
}
|
|
8783
8787
|
if (passport?.zkevm_eth_address) {
|
|
@@ -8800,11 +8804,11 @@ class AuthManager {
|
|
|
8800
8804
|
nickname: idTokenPayload.nickname,
|
|
8801
8805
|
},
|
|
8802
8806
|
};
|
|
8803
|
-
if (idTokenPayload?.passport
|
|
8807
|
+
if (idTokenPayload?.passport.imx_eth_address) {
|
|
8804
8808
|
user.imx = {
|
|
8805
|
-
ethAddress: idTokenPayload
|
|
8806
|
-
starkAddress: idTokenPayload
|
|
8807
|
-
userAdminAddress: idTokenPayload
|
|
8809
|
+
ethAddress: idTokenPayload.passport.imx_eth_address,
|
|
8810
|
+
starkAddress: idTokenPayload.passport.imx_stark_address,
|
|
8811
|
+
userAdminAddress: idTokenPayload.passport.imx_user_admin_address,
|
|
8808
8812
|
};
|
|
8809
8813
|
}
|
|
8810
8814
|
if (idTokenPayload?.passport?.zkevm_eth_address) {
|
|
@@ -9065,7 +9069,7 @@ class AuthManager {
|
|
|
9065
9069
|
}
|
|
9066
9070
|
}
|
|
9067
9071
|
|
|
9068
|
-
const lazyLoad = (promiseToAwait, initialiseFunction) =>
|
|
9072
|
+
const lazyLoad = (promiseToAwait, initialiseFunction) => promiseToAwait().then(initialiseFunction);
|
|
9069
9073
|
const lazyDocumentReady = (initialiseFunction) => {
|
|
9070
9074
|
const documentReadyPromise = () => new Promise((resolve) => {
|
|
9071
9075
|
if (window.document.readyState === 'complete') {
|
|
@@ -9479,33 +9483,31 @@ async function cancelOrder$1({ user, starkSigner, request, ordersApi, guardianCl
|
|
|
9479
9483
|
}
|
|
9480
9484
|
|
|
9481
9485
|
async function registerPassport({ ethSigner, starkSigner, usersApi }, authorization) {
|
|
9482
|
-
|
|
9483
|
-
|
|
9484
|
-
|
|
9485
|
-
|
|
9486
|
-
|
|
9487
|
-
|
|
9488
|
-
|
|
9489
|
-
|
|
9490
|
-
|
|
9491
|
-
|
|
9492
|
-
|
|
9493
|
-
|
|
9494
|
-
|
|
9495
|
-
|
|
9496
|
-
|
|
9497
|
-
|
|
9498
|
-
|
|
9499
|
-
|
|
9500
|
-
|
|
9501
|
-
|
|
9502
|
-
|
|
9503
|
-
|
|
9504
|
-
|
|
9505
|
-
|
|
9506
|
-
|
|
9507
|
-
return response.statusText;
|
|
9508
|
-
}, PassportErrorType.USER_REGISTRATION_ERROR);
|
|
9486
|
+
const [userAddress, starkPublicKey] = await Promise.all([
|
|
9487
|
+
ethSigner.getAddress(),
|
|
9488
|
+
starkSigner.getAddress(),
|
|
9489
|
+
]);
|
|
9490
|
+
const signableResult = await usersApi.getSignableRegistrationOffchain({
|
|
9491
|
+
getSignableRegistrationRequest: {
|
|
9492
|
+
ether_key: userAddress,
|
|
9493
|
+
stark_key: starkPublicKey,
|
|
9494
|
+
},
|
|
9495
|
+
});
|
|
9496
|
+
const { signable_message: signableMessage, payload_hash: payloadHash } = signableResult.data;
|
|
9497
|
+
const [ethSignature, starkSignature] = await Promise.all([
|
|
9498
|
+
signRaw(signableMessage, ethSigner),
|
|
9499
|
+
starkSigner.signMessage(payloadHash),
|
|
9500
|
+
]);
|
|
9501
|
+
const response = await usersApi.registerPassportUser({
|
|
9502
|
+
authorization: `Bearer ${authorization}`,
|
|
9503
|
+
registerPassportUserRequest: {
|
|
9504
|
+
eth_signature: ethSignature,
|
|
9505
|
+
ether_key: userAddress,
|
|
9506
|
+
stark_signature: starkSignature,
|
|
9507
|
+
stark_key: starkPublicKey,
|
|
9508
|
+
},
|
|
9509
|
+
});
|
|
9510
|
+
return response.data;
|
|
9509
9511
|
}
|
|
9510
9512
|
|
|
9511
9513
|
async function createTrade$1({ request, tradesApi, user, starkSigner, guardianClient, }) {
|
|
@@ -9651,37 +9653,123 @@ async function batchNftTransfer({ user, starkSigner, request, transfersApi, guar
|
|
|
9651
9653
|
}), PassportErrorType.TRANSFER_ERROR);
|
|
9652
9654
|
}
|
|
9653
9655
|
|
|
9656
|
+
async function forceUserRefresh(authManager) {
|
|
9657
|
+
// User metadata is updated asynchronously. Poll userinfo endpoint until it is updated.
|
|
9658
|
+
await retryWithDelay(async () => {
|
|
9659
|
+
const user = await authManager.loginSilent({ forceRefresh: true }); // force refresh to get updated user info
|
|
9660
|
+
if (user?.imx)
|
|
9661
|
+
return user;
|
|
9662
|
+
return Promise.reject(new Error('user wallet addresses not exist'));
|
|
9663
|
+
});
|
|
9664
|
+
}
|
|
9665
|
+
async function registerOffchain$1(userAdminKeySigner, starkSigner, unregisteredUser, authManager, usersApi) {
|
|
9666
|
+
return withPassportError(async () => {
|
|
9667
|
+
try {
|
|
9668
|
+
const response = await registerPassport({
|
|
9669
|
+
ethSigner: userAdminKeySigner,
|
|
9670
|
+
starkSigner,
|
|
9671
|
+
usersApi,
|
|
9672
|
+
}, unregisteredUser.accessToken);
|
|
9673
|
+
await forceUserRefresh(authManager);
|
|
9674
|
+
return response;
|
|
9675
|
+
}
|
|
9676
|
+
catch (err) {
|
|
9677
|
+
if (globalAxios$1.isAxiosError(err) && err.status === 409) {
|
|
9678
|
+
// The user already registered, but the user token is not updated yet.
|
|
9679
|
+
await forceUserRefresh(authManager);
|
|
9680
|
+
return { tx_hash: '' };
|
|
9681
|
+
}
|
|
9682
|
+
throw err;
|
|
9683
|
+
}
|
|
9684
|
+
}, PassportErrorType.USER_REGISTRATION_ERROR);
|
|
9685
|
+
}
|
|
9686
|
+
|
|
9654
9687
|
class PassportImxProvider {
|
|
9655
9688
|
authManager;
|
|
9656
|
-
starkSigner;
|
|
9657
9689
|
immutableXClient;
|
|
9658
9690
|
guardianClient;
|
|
9659
|
-
|
|
9691
|
+
magicAdapter;
|
|
9692
|
+
/**
|
|
9693
|
+
* This property is set during initialisation and stores the signers in a promise.
|
|
9694
|
+
* This property is not meant to be accessed directly, but through the
|
|
9695
|
+
* `getAuthenticatedUserAndSigners` method.
|
|
9696
|
+
* @see getAuthenticatedUserAndSigners
|
|
9697
|
+
*/
|
|
9698
|
+
signers;
|
|
9699
|
+
signerInitialisationError;
|
|
9700
|
+
constructor({ authManager, immutableXClient, confirmationScreen, config, passportEventEmitter, magicAdapter, }) {
|
|
9660
9701
|
this.authManager = authManager;
|
|
9661
|
-
this.starkSigner = starkSigner;
|
|
9662
9702
|
this.immutableXClient = immutableXClient;
|
|
9663
9703
|
this.guardianClient = new GuardianClient({
|
|
9664
9704
|
confirmationScreen,
|
|
9665
9705
|
config,
|
|
9666
9706
|
});
|
|
9707
|
+
this.magicAdapter = magicAdapter;
|
|
9708
|
+
this.initialiseSigners();
|
|
9667
9709
|
passportEventEmitter.on(PassportEvents.LOGGED_OUT, this.handleLogout);
|
|
9668
9710
|
}
|
|
9669
9711
|
handleLogout = () => {
|
|
9670
|
-
this.
|
|
9712
|
+
this.signers = undefined;
|
|
9671
9713
|
};
|
|
9672
|
-
|
|
9714
|
+
/**
|
|
9715
|
+
* This method is called by the constructor and asynchronously initialises the signers.
|
|
9716
|
+
* The signers are stored in a promise so that they can be retrieved by the provider
|
|
9717
|
+
* when needed.
|
|
9718
|
+
*
|
|
9719
|
+
* If an error is thrown during initialisation, it is stored in the `signerInitialisationError`,
|
|
9720
|
+
* so that it doesn't result in an unhandled promise rejection.
|
|
9721
|
+
*
|
|
9722
|
+
* This error is thrown when the signers are requested through:
|
|
9723
|
+
* @see getAuthenticatedUserAndSigners
|
|
9724
|
+
*
|
|
9725
|
+
*/
|
|
9726
|
+
async initialiseSigners() {
|
|
9727
|
+
const generateSigners = async () => {
|
|
9728
|
+
const user = await this.authManager.getUser();
|
|
9729
|
+
// The user will be present because the factory validates it
|
|
9730
|
+
const magicRpcProvider = await this.magicAdapter.login(user.idToken);
|
|
9731
|
+
const web3Provider = new providers.Web3Provider(magicRpcProvider);
|
|
9732
|
+
const ethSigner = web3Provider.getSigner();
|
|
9733
|
+
const starkSigner = await getStarkSigner(ethSigner);
|
|
9734
|
+
return { ethSigner, starkSigner };
|
|
9735
|
+
};
|
|
9736
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
9737
|
+
this.signers = new Promise(async (resolve) => {
|
|
9738
|
+
try {
|
|
9739
|
+
resolve(await generateSigners());
|
|
9740
|
+
}
|
|
9741
|
+
catch (err) {
|
|
9742
|
+
// Capture and store the initialization error
|
|
9743
|
+
this.signerInitialisationError = err;
|
|
9744
|
+
resolve(undefined);
|
|
9745
|
+
}
|
|
9746
|
+
});
|
|
9747
|
+
}
|
|
9748
|
+
async getAuthenticatedUserAndSigners() {
|
|
9673
9749
|
const user = await this.authManager.getUser();
|
|
9674
|
-
if (!user || this.
|
|
9750
|
+
if (!user || !this.signers) {
|
|
9675
9751
|
throw new PassportError('User has been logged out', PassportErrorType.NOT_LOGGED_IN_ERROR);
|
|
9676
9752
|
}
|
|
9753
|
+
const signers = await this.signers;
|
|
9754
|
+
// Throw the stored error if the signers failed to initialise
|
|
9755
|
+
if (typeof signers === 'undefined') {
|
|
9756
|
+
if (typeof this.signerInitialisationError !== 'undefined') {
|
|
9757
|
+
throw this.signerInitialisationError;
|
|
9758
|
+
}
|
|
9759
|
+
throw new Error('Signers failed to initialise');
|
|
9760
|
+
}
|
|
9761
|
+
return { user, ...signers };
|
|
9762
|
+
}
|
|
9763
|
+
async getRegisteredImxUserAndSigners() {
|
|
9764
|
+
const { user, starkSigner, ethSigner } = await this.getAuthenticatedUserAndSigners();
|
|
9677
9765
|
const isUserImx = (oidcUser) => oidcUser?.imx !== undefined;
|
|
9678
9766
|
if (!isUserImx(user)) {
|
|
9679
9767
|
throw new PassportError('User has not been registered with StarkEx', PassportErrorType.USER_NOT_REGISTERED_ERROR);
|
|
9680
9768
|
}
|
|
9681
|
-
return { user, starkSigner
|
|
9769
|
+
return { user, starkSigner, ethSigner };
|
|
9682
9770
|
}
|
|
9683
9771
|
async transfer(request) {
|
|
9684
|
-
const { user, starkSigner } = await this.
|
|
9772
|
+
const { user, starkSigner } = await this.getRegisteredImxUserAndSigners();
|
|
9685
9773
|
return transfer$1({
|
|
9686
9774
|
request,
|
|
9687
9775
|
user,
|
|
@@ -9690,23 +9778,21 @@ class PassportImxProvider {
|
|
|
9690
9778
|
guardianClient: this.guardianClient,
|
|
9691
9779
|
});
|
|
9692
9780
|
}
|
|
9693
|
-
|
|
9694
|
-
|
|
9695
|
-
|
|
9696
|
-
throw new PassportError('Operation not supported', PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR);
|
|
9781
|
+
async registerOffchain() {
|
|
9782
|
+
const { user, ethSigner, starkSigner } = await this.getAuthenticatedUserAndSigners();
|
|
9783
|
+
return await registerOffchain$1(ethSigner, starkSigner, user, this.authManager, this.immutableXClient.usersApi);
|
|
9697
9784
|
}
|
|
9698
|
-
|
|
9699
|
-
|
|
9700
|
-
|
|
9701
|
-
throw new PassportError('Operation not supported', PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR);
|
|
9785
|
+
async isRegisteredOffchain() {
|
|
9786
|
+
const { user } = await this.getAuthenticatedUserAndSigners();
|
|
9787
|
+
return !!user.imx;
|
|
9702
9788
|
}
|
|
9703
9789
|
// TODO: Remove once implemented
|
|
9704
|
-
// eslint-disable-next-line class-methods-use-this
|
|
9790
|
+
// eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars
|
|
9705
9791
|
isRegisteredOnchain() {
|
|
9706
9792
|
throw new PassportError('Operation not supported', PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR);
|
|
9707
9793
|
}
|
|
9708
9794
|
async createOrder(request) {
|
|
9709
|
-
const { user, starkSigner } = await this.
|
|
9795
|
+
const { user, starkSigner } = await this.getRegisteredImxUserAndSigners();
|
|
9710
9796
|
return createOrder$1({
|
|
9711
9797
|
request,
|
|
9712
9798
|
user,
|
|
@@ -9716,7 +9802,7 @@ class PassportImxProvider {
|
|
|
9716
9802
|
});
|
|
9717
9803
|
}
|
|
9718
9804
|
async cancelOrder(request) {
|
|
9719
|
-
const { user, starkSigner } = await this.
|
|
9805
|
+
const { user, starkSigner } = await this.getRegisteredImxUserAndSigners();
|
|
9720
9806
|
return cancelOrder$1({
|
|
9721
9807
|
request,
|
|
9722
9808
|
user,
|
|
@@ -9726,7 +9812,7 @@ class PassportImxProvider {
|
|
|
9726
9812
|
});
|
|
9727
9813
|
}
|
|
9728
9814
|
async createTrade(request) {
|
|
9729
|
-
const { user, starkSigner } = await this.
|
|
9815
|
+
const { user, starkSigner } = await this.getRegisteredImxUserAndSigners();
|
|
9730
9816
|
return createTrade$1({
|
|
9731
9817
|
request,
|
|
9732
9818
|
user,
|
|
@@ -9736,7 +9822,7 @@ class PassportImxProvider {
|
|
|
9736
9822
|
});
|
|
9737
9823
|
}
|
|
9738
9824
|
async batchNftTransfer(request) {
|
|
9739
|
-
const { user, starkSigner } = await this.
|
|
9825
|
+
const { user, starkSigner } = await this.getRegisteredImxUserAndSigners();
|
|
9740
9826
|
return batchNftTransfer({
|
|
9741
9827
|
request,
|
|
9742
9828
|
user,
|
|
@@ -9746,7 +9832,7 @@ class PassportImxProvider {
|
|
|
9746
9832
|
});
|
|
9747
9833
|
}
|
|
9748
9834
|
async exchangeTransfer(request) {
|
|
9749
|
-
const { user, starkSigner } = await this.
|
|
9835
|
+
const { user, starkSigner } = await this.getRegisteredImxUserAndSigners();
|
|
9750
9836
|
return exchangeTransfer$1({
|
|
9751
9837
|
request,
|
|
9752
9838
|
user,
|
|
@@ -9774,7 +9860,7 @@ class PassportImxProvider {
|
|
|
9774
9860
|
throw new PassportError('Operation not supported', PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR);
|
|
9775
9861
|
}
|
|
9776
9862
|
async getAddress() {
|
|
9777
|
-
const { user } = await this.
|
|
9863
|
+
const { user } = await this.getRegisteredImxUserAndSigners();
|
|
9778
9864
|
return Promise.resolve(user.imx.ethAddress);
|
|
9779
9865
|
}
|
|
9780
9866
|
}
|
|
@@ -9834,49 +9920,15 @@ class PassportImxProviderFactory {
|
|
|
9834
9920
|
if (!user.idToken) {
|
|
9835
9921
|
throw new PassportError('Failed to initialise', PassportErrorType.WALLET_CONNECTION_ERROR);
|
|
9836
9922
|
}
|
|
9837
|
-
const magicRpcProvider = await this.magicAdapter.login(user.idToken);
|
|
9838
|
-
const web3Provider = new providers.Web3Provider(magicRpcProvider);
|
|
9839
|
-
const ethSigner = web3Provider.getSigner();
|
|
9840
|
-
const starkSigner = await getStarkSigner(ethSigner);
|
|
9841
|
-
if (!user.imx?.ethAddress) {
|
|
9842
|
-
await this.registerStarkEx(ethSigner, starkSigner, user.accessToken);
|
|
9843
|
-
return new PassportImxProvider({
|
|
9844
|
-
authManager: this.authManager,
|
|
9845
|
-
starkSigner,
|
|
9846
|
-
immutableXClient: this.immutableXClient,
|
|
9847
|
-
confirmationScreen: this.confirmationScreen,
|
|
9848
|
-
config: this.config,
|
|
9849
|
-
passportEventEmitter: this.passportEventEmitter,
|
|
9850
|
-
});
|
|
9851
|
-
}
|
|
9852
9923
|
return new PassportImxProvider({
|
|
9924
|
+
config: this.config,
|
|
9853
9925
|
authManager: this.authManager,
|
|
9854
|
-
starkSigner,
|
|
9855
9926
|
immutableXClient: this.immutableXClient,
|
|
9856
9927
|
confirmationScreen: this.confirmationScreen,
|
|
9857
|
-
config: this.config,
|
|
9858
9928
|
passportEventEmitter: this.passportEventEmitter,
|
|
9929
|
+
magicAdapter: this.magicAdapter,
|
|
9859
9930
|
});
|
|
9860
9931
|
}
|
|
9861
|
-
async registerStarkEx(userAdminKeySigner, starkSigner, jwt) {
|
|
9862
|
-
return withPassportError(async () => {
|
|
9863
|
-
await registerPassport({
|
|
9864
|
-
ethSigner: userAdminKeySigner,
|
|
9865
|
-
starkSigner,
|
|
9866
|
-
usersApi: this.immutableXClient.usersApi,
|
|
9867
|
-
}, jwt);
|
|
9868
|
-
// User metadata is updated asynchronously. Poll userinfo endpoint until it is updated.
|
|
9869
|
-
const updatedUser = await retryWithDelay(async () => {
|
|
9870
|
-
const user = await this.authManager.loginSilent({ forceRefresh: true }); // force refresh to get updated user info
|
|
9871
|
-
const metadataExists = !!user?.imx;
|
|
9872
|
-
if (metadataExists) {
|
|
9873
|
-
return user;
|
|
9874
|
-
}
|
|
9875
|
-
return Promise.reject(new Error('user wallet addresses not exist'));
|
|
9876
|
-
});
|
|
9877
|
-
return updatedUser;
|
|
9878
|
-
}, PassportErrorType.REFRESH_TOKEN_ERROR);
|
|
9879
|
-
}
|
|
9880
9932
|
}
|
|
9881
9933
|
|
|
9882
9934
|
const validateConfiguration = (configuration, requiredKeys, prefix) => {
|
|
@@ -33760,7 +33812,7 @@ async function getItemRequirementsFromRequirements(provider, requirements) {
|
|
|
33760
33812
|
return itemRequirements;
|
|
33761
33813
|
}
|
|
33762
33814
|
|
|
33763
|
-
const SDK_VERSION_MARKER = '0.
|
|
33815
|
+
const SDK_VERSION_MARKER = '0.29.0-alpha.1';
|
|
33764
33816
|
// This SDK version is replaced by the `yarn build` command ran on the root level
|
|
33765
33817
|
const globalPackageVersion = () => SDK_VERSION_MARKER;
|
|
33766
33818
|
|