@dynamic-labs/embedded-wallet 3.0.0-alpha.8
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/CHANGELOG.md +3494 -0
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/_virtual/_tslib.cjs +36 -0
- package/_virtual/_tslib.js +32 -0
- package/package.json +39 -0
- package/src/index.cjs +23 -0
- package/src/index.d.ts +7 -0
- package/src/index.js +9 -0
- package/src/lib/AuthenticatorHandler/TurnkeyAuthenticatorRecoveryHandler.cjs +226 -0
- package/src/lib/AuthenticatorHandler/TurnkeyAuthenticatorRecoveryHandler.d.ts +1640 -0
- package/src/lib/AuthenticatorHandler/TurnkeyAuthenticatorRecoveryHandler.js +222 -0
- package/src/lib/AuthenticatorHandler/index.d.ts +1 -0
- package/src/lib/ExportHandler/ExportHandler.cjs +141 -0
- package/src/lib/ExportHandler/ExportHandler.d.ts +1630 -0
- package/src/lib/ExportHandler/ExportHandler.js +137 -0
- package/src/lib/ExportHandler/index.d.ts +1 -0
- package/src/lib/TurnkeyWalletConnectorBase/TurnkeyWalletConnectorBase.cjs +217 -0
- package/src/lib/TurnkeyWalletConnectorBase/TurnkeyWalletConnectorBase.d.ts +68 -0
- package/src/lib/TurnkeyWalletConnectorBase/TurnkeyWalletConnectorBase.js +213 -0
- package/src/lib/TurnkeyWalletConnectorBase/index.d.ts +1 -0
- package/src/lib/constants.cjs +8 -0
- package/src/lib/constants.d.ts +1 -0
- package/src/lib/constants.js +4 -0
- package/src/lib/utils/PasskeyService/PasskeyService.cjs +41 -0
- package/src/lib/utils/PasskeyService/PasskeyService.d.ts +23 -0
- package/src/lib/utils/PasskeyService/PasskeyService.js +37 -0
- package/src/lib/utils/PasskeyService/index.d.ts +2 -0
- package/src/lib/utils/PasskeyService/types.d.ts +6 -0
- package/src/lib/utils/PasskeyService/utils/createTurnkeyPasskeyService/createTurnkeyPasskeyService.cjs +14 -0
- package/src/lib/utils/PasskeyService/utils/createTurnkeyPasskeyService/createTurnkeyPasskeyService.d.ts +2 -0
- package/src/lib/utils/PasskeyService/utils/createTurnkeyPasskeyService/createTurnkeyPasskeyService.js +10 -0
- package/src/lib/utils/PasskeyService/utils/createTurnkeyPasskeyService/index.d.ts +1 -0
- package/src/lib/utils/base64UrlEncode/base64UrlEncode.cjs +12 -0
- package/src/lib/utils/base64UrlEncode/base64UrlEncode.d.ts +1 -0
- package/src/lib/utils/base64UrlEncode/base64UrlEncode.js +8 -0
- package/src/lib/utils/base64UrlEncode/index.d.ts +1 -0
- package/src/lib/utils/convertAttestationTransports/convertAttestationTransports.cjs +17 -0
- package/src/lib/utils/convertAttestationTransports/convertAttestationTransports.d.ts +4 -0
- package/src/lib/utils/convertAttestationTransports/convertAttestationTransports.js +13 -0
- package/src/lib/utils/convertAttestationTransports/index.d.ts +1 -0
- package/src/lib/utils/findTurnkeyVerifiedCredential/findTurnkeyVerifiedCredential.cjs +8 -0
- package/src/lib/utils/findTurnkeyVerifiedCredential/findTurnkeyVerifiedCredential.d.ts +2 -0
- package/src/lib/utils/findTurnkeyVerifiedCredential/findTurnkeyVerifiedCredential.js +4 -0
- package/src/lib/utils/findTurnkeyVerifiedCredential/index.d.ts +1 -0
- package/src/lib/utils/generateRandomBuffer/generateRandomBuffer.cjs +12 -0
- package/src/lib/utils/generateRandomBuffer/generateRandomBuffer.d.ts +1 -0
- package/src/lib/utils/generateRandomBuffer/generateRandomBuffer.js +8 -0
- package/src/lib/utils/generateRandomBuffer/index.d.ts +1 -0
- package/src/lib/utils/index.d.ts +4 -0
- package/src/types.cjs +17 -0
- package/src/types.d.ts +8 -0
- package/src/types.js +13 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { __awaiter } from '../../../_virtual/_tslib.js';
|
|
3
|
+
import { IframeStamper } from '@turnkey/iframe-stamper';
|
|
4
|
+
import { TurnkeyClient } from '@turnkey/http';
|
|
5
|
+
import { DynamicError, getTLD, PlatformService } from '@dynamic-labs/utils';
|
|
6
|
+
import { logger } from '@dynamic-labs/wallet-connector-core';
|
|
7
|
+
import { PasskeyService } from '../utils/PasskeyService/PasskeyService.js';
|
|
8
|
+
|
|
9
|
+
const turnkeyBaseUrl = 'https://api.turnkey.com';
|
|
10
|
+
const turnkeyPasskeyRecoveryUrl = 'https://recovery.turnkey.com';
|
|
11
|
+
const turnkeyEmailRecoveryUrl = 'https://auth.turnkey.com';
|
|
12
|
+
const TURNKEY_RECOVERY_CREDENTIAL_EXPIRATION_SECONDS = 900; // 15 seconds
|
|
13
|
+
const TURNKEY_SESSION_EXPIRATION_SECONDS = 1800; //30 seconds
|
|
14
|
+
const EMAIL_AUTH_CREDENTIAL_TYPE = 'CREDENTIAL_TYPE_API_KEY_P256';
|
|
15
|
+
const PASSKEY_RECOVERY_CREDENTIAL_TYPE = 'CREDENTIAL_TYPE_RECOVER_USER_KEY_P256';
|
|
16
|
+
class TurnkeyAuthenticatorRecoveryHandler {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.isSessionActive = () => {
|
|
19
|
+
// it's only used for email auth session
|
|
20
|
+
if (!this.__createdAt || this.__recoveryType !== 'email') {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const isExpired = this.isExpired(this.__createdAt, this.__sessionExpiration || TURNKEY_SESSION_EXPIRATION_SECONDS);
|
|
24
|
+
if (isExpired) {
|
|
25
|
+
this.clear();
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
};
|
|
30
|
+
this.isValidCode = (organizationId) => __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
var _a, _b, _c, _d;
|
|
32
|
+
if (!organizationId || !this.__turnkeyRecoveryUserId) {
|
|
33
|
+
throw new DynamicError('Cannot proceed with your request');
|
|
34
|
+
}
|
|
35
|
+
const userResponse = yield ((_a = this.__client) === null || _a === void 0 ? void 0 : _a.getUser({
|
|
36
|
+
organizationId,
|
|
37
|
+
userId: this.__turnkeyRecoveryUserId,
|
|
38
|
+
}));
|
|
39
|
+
const credentialTypeMap = {
|
|
40
|
+
email: EMAIL_AUTH_CREDENTIAL_TYPE,
|
|
41
|
+
passkey: PASSKEY_RECOVERY_CREDENTIAL_TYPE,
|
|
42
|
+
};
|
|
43
|
+
const recoveryCredential = (_d = (_c = (_b = userResponse === null || userResponse === void 0 ? void 0 : userResponse.user) === null || _b === void 0 ? void 0 : _b.apiKeys) === null || _c === void 0 ? void 0 : _c.filter((k) => k.credential.type === credentialTypeMap[this.__recoveryType])) === null || _d === void 0 ? void 0 : _d.pop();
|
|
44
|
+
if (!recoveryCredential) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
const isExpired = this.isExpired(parseInt(recoveryCredential.createdAt.seconds, 10), TURNKEY_RECOVERY_CREDENTIAL_EXPIRATION_SECONDS);
|
|
48
|
+
if (isExpired) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
this.__createdAt = parseInt(recoveryCredential.createdAt.seconds, 10);
|
|
52
|
+
return true;
|
|
53
|
+
});
|
|
54
|
+
this.isExpired = (createdAtSeconds, expirationTimeSeconds) => {
|
|
55
|
+
const recoveryExpirationSeconds = createdAtSeconds + expirationTimeSeconds;
|
|
56
|
+
const expirationTime = new Date(recoveryExpirationSeconds * 1000);
|
|
57
|
+
if (new Date() >= expirationTime) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
get publicKey() {
|
|
64
|
+
return this.__publicKey;
|
|
65
|
+
}
|
|
66
|
+
get client() {
|
|
67
|
+
return this.__client;
|
|
68
|
+
}
|
|
69
|
+
get recoveryType() {
|
|
70
|
+
return this.__recoveryType;
|
|
71
|
+
}
|
|
72
|
+
get recoveryUserId() {
|
|
73
|
+
return this.__turnkeyRecoveryUserId || '';
|
|
74
|
+
}
|
|
75
|
+
set recoveryUserId(turnkeyRecoveryUserId) {
|
|
76
|
+
this.__turnkeyRecoveryUserId = turnkeyRecoveryUserId;
|
|
77
|
+
}
|
|
78
|
+
clear() {
|
|
79
|
+
var _a;
|
|
80
|
+
(_a = this.__iframeStamper) === null || _a === void 0 ? void 0 : _a.clear();
|
|
81
|
+
this.__recoveryType = undefined;
|
|
82
|
+
this.__iframeStamper = undefined;
|
|
83
|
+
this.__publicKey = undefined;
|
|
84
|
+
this.__client = undefined;
|
|
85
|
+
this.__turnkeyRecoveryUserId = undefined;
|
|
86
|
+
this.__createdAt = undefined;
|
|
87
|
+
}
|
|
88
|
+
initRecovery(authType, iframeContainer, iframeElementId, sessionExpiration) {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
if (this.__recoveryType) {
|
|
91
|
+
this.clear();
|
|
92
|
+
}
|
|
93
|
+
this.__sessionExpiration = sessionExpiration;
|
|
94
|
+
this.__recoveryType = authType;
|
|
95
|
+
const iframeUrl = authType === 'passkey'
|
|
96
|
+
? turnkeyPasskeyRecoveryUrl
|
|
97
|
+
: turnkeyEmailRecoveryUrl;
|
|
98
|
+
this.__iframeStamper = new IframeStamper({
|
|
99
|
+
iframeContainer,
|
|
100
|
+
iframeElementId,
|
|
101
|
+
iframeUrl,
|
|
102
|
+
});
|
|
103
|
+
yield this.__iframeStamper.init();
|
|
104
|
+
this.__publicKey = this.__iframeStamper.publicKey();
|
|
105
|
+
return this.__publicKey;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
verifyRecoveryCode(recoveryBundle, organizationId) {
|
|
109
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
if (!this.__iframeStamper) {
|
|
111
|
+
throw new DynamicError('Cannot proceed with your request');
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
yield this.__iframeStamper.injectCredentialBundle(recoveryBundle);
|
|
115
|
+
this.__client = new TurnkeyClient({
|
|
116
|
+
baseUrl: turnkeyBaseUrl,
|
|
117
|
+
}, this.__iframeStamper);
|
|
118
|
+
if (!organizationId || !this.__turnkeyRecoveryUserId) {
|
|
119
|
+
throw new DynamicError('Cannot proceed with your request');
|
|
120
|
+
}
|
|
121
|
+
if (!(yield this.isValidCode(organizationId))) {
|
|
122
|
+
throw new DynamicError('The code is invalid or expired.');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
logger.error('Error while verifying recovery code', err);
|
|
127
|
+
if (err instanceof DynamicError) {
|
|
128
|
+
throw err;
|
|
129
|
+
}
|
|
130
|
+
throw new DynamicError('The code is invalid or expired.');
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
completeRecovery(_a) {
|
|
135
|
+
return __awaiter(this, arguments, void 0, function* ({ attestation, challenge, turnkeySubOrganizationId, }) {
|
|
136
|
+
if (!this.__client || !this.__turnkeyRecoveryUserId) {
|
|
137
|
+
throw new DynamicError('Cannot proceed with your request');
|
|
138
|
+
}
|
|
139
|
+
try {
|
|
140
|
+
return this.__client.recoverUser({
|
|
141
|
+
organizationId: turnkeySubOrganizationId,
|
|
142
|
+
parameters: {
|
|
143
|
+
authenticator: {
|
|
144
|
+
attestation: attestation,
|
|
145
|
+
authenticatorName: 'Passkey',
|
|
146
|
+
challenge,
|
|
147
|
+
},
|
|
148
|
+
userId: this.__turnkeyRecoveryUserId,
|
|
149
|
+
},
|
|
150
|
+
timestampMs: String(Date.now()),
|
|
151
|
+
type: 'ACTIVITY_TYPE_RECOVER_USER',
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
logger.error('Error while completing recovery process', err);
|
|
156
|
+
throw err;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
addPasskeyAuthenticator(_a) {
|
|
161
|
+
return __awaiter(this, arguments, void 0, function* ({ attestation, challenge, turnkeySubOrganizationId, }) {
|
|
162
|
+
if (!this.__client || !this.__turnkeyRecoveryUserId) {
|
|
163
|
+
throw new DynamicError('Cannot proceed with your request');
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
return this.__client.createAuthenticators({
|
|
167
|
+
organizationId: turnkeySubOrganizationId,
|
|
168
|
+
parameters: {
|
|
169
|
+
authenticators: [
|
|
170
|
+
{
|
|
171
|
+
attestation: attestation,
|
|
172
|
+
authenticatorName: 'Passkey',
|
|
173
|
+
challenge,
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
userId: this.__turnkeyRecoveryUserId,
|
|
177
|
+
},
|
|
178
|
+
timestampMs: String(Date.now()),
|
|
179
|
+
type: 'ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2',
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
logger.error('Error while creating new authenticator', err);
|
|
184
|
+
throw err;
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
addEmailRecovery(_a) {
|
|
189
|
+
return __awaiter(this, arguments, void 0, function* ({ organizationId, email, turnkeyUserId, }) {
|
|
190
|
+
let rpId = getTLD();
|
|
191
|
+
if (!rpId) {
|
|
192
|
+
rpId = PlatformService.getHostname();
|
|
193
|
+
}
|
|
194
|
+
const stamper = PasskeyService.createWebauthnStamper({
|
|
195
|
+
rpId,
|
|
196
|
+
});
|
|
197
|
+
const client = new TurnkeyClient({
|
|
198
|
+
baseUrl: turnkeyBaseUrl,
|
|
199
|
+
}, stamper);
|
|
200
|
+
try {
|
|
201
|
+
const signedRequest = yield client.stampUpdateUser({
|
|
202
|
+
organizationId,
|
|
203
|
+
parameters: {
|
|
204
|
+
userEmail: email,
|
|
205
|
+
userId: turnkeyUserId,
|
|
206
|
+
userTagIds: [],
|
|
207
|
+
},
|
|
208
|
+
timestampMs: String(Date.now()),
|
|
209
|
+
type: 'ACTIVITY_TYPE_UPDATE_USER',
|
|
210
|
+
});
|
|
211
|
+
return { signedRequest, userId: turnkeyUserId };
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
logger.error('Error while adding email recovery', err);
|
|
215
|
+
throw err;
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const turnkeyAuthenticatorRecoveryHandler = new TurnkeyAuthenticatorRecoveryHandler();
|
|
221
|
+
|
|
222
|
+
export { turnkeyAuthenticatorRecoveryHandler };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { turnkeyAuthenticatorRecoveryHandler } from './TurnkeyAuthenticatorRecoveryHandler';
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var _tslib = require('../../../_virtual/_tslib.cjs');
|
|
7
|
+
var iframeStamper = require('@turnkey/iframe-stamper');
|
|
8
|
+
var http = require('@turnkey/http');
|
|
9
|
+
var utils = require('@dynamic-labs/utils');
|
|
10
|
+
var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
|
|
11
|
+
var TurnkeyAuthenticatorRecoveryHandler = require('../AuthenticatorHandler/TurnkeyAuthenticatorRecoveryHandler.cjs');
|
|
12
|
+
var PasskeyService = require('../utils/PasskeyService/PasskeyService.cjs');
|
|
13
|
+
|
|
14
|
+
const turnkeyBaseUrl = 'https://api.turnkey.com';
|
|
15
|
+
const turnkeyExportUrl = 'https://export.turnkey.com';
|
|
16
|
+
class ExportHandler {
|
|
17
|
+
get publicKey() {
|
|
18
|
+
return this.__publicKey;
|
|
19
|
+
}
|
|
20
|
+
clear() {
|
|
21
|
+
var _a;
|
|
22
|
+
(_a = this.__iframeStamper) === null || _a === void 0 ? void 0 : _a.clear();
|
|
23
|
+
this.__iframeStamper = undefined;
|
|
24
|
+
this.__publicKey = undefined;
|
|
25
|
+
this.__turnkeyClient = undefined;
|
|
26
|
+
}
|
|
27
|
+
initExport(iframeContainer, iframeElementId) {
|
|
28
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
this.__iframeStamper = new iframeStamper.IframeStamper({
|
|
30
|
+
iframeContainer,
|
|
31
|
+
iframeElementId,
|
|
32
|
+
iframeUrl: turnkeyExportUrl,
|
|
33
|
+
});
|
|
34
|
+
yield this.__iframeStamper.init();
|
|
35
|
+
this.__publicKey = this.__iframeStamper.publicKey();
|
|
36
|
+
if (TurnkeyAuthenticatorRecoveryHandler.turnkeyAuthenticatorRecoveryHandler.isSessionActive()) {
|
|
37
|
+
this.__turnkeyClient = TurnkeyAuthenticatorRecoveryHandler.turnkeyAuthenticatorRecoveryHandler.client;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
let rpId = utils.getTLD();
|
|
41
|
+
if (!rpId) {
|
|
42
|
+
rpId = utils.PlatformService.getHostname();
|
|
43
|
+
}
|
|
44
|
+
const passkeyStamper = PasskeyService.PasskeyService.createWebauthnStamper({
|
|
45
|
+
rpId,
|
|
46
|
+
});
|
|
47
|
+
const apiKeyStamper = ExportHandler === null || ExportHandler === void 0 ? void 0 : ExportHandler.apiKeyStamper;
|
|
48
|
+
const stamper = apiKeyStamper !== null && apiKeyStamper !== void 0 ? apiKeyStamper : passkeyStamper;
|
|
49
|
+
this.__turnkeyClient = new http.TurnkeyClient({
|
|
50
|
+
baseUrl: turnkeyBaseUrl,
|
|
51
|
+
}, stamper);
|
|
52
|
+
}
|
|
53
|
+
return this.__publicKey;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
verifyExportWallet(_a) {
|
|
57
|
+
return _tslib.__awaiter(this, arguments, void 0, function* ({ exportBundle, organizationId, }) {
|
|
58
|
+
if (!this.__iframeStamper) {
|
|
59
|
+
throw new utils.DynamicError('Cannot proceed with your request');
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
return yield this.__iframeStamper.injectWalletExportBundle(exportBundle, organizationId);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
walletConnectorCore.logger.error('Error while verifying export wallet', err);
|
|
66
|
+
throw err;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
verifyExportPrivateKey(_a) {
|
|
71
|
+
return _tslib.__awaiter(this, arguments, void 0, function* ({ exportBundle, organizationId, chain, }) {
|
|
72
|
+
if (!this.__iframeStamper) {
|
|
73
|
+
throw new utils.DynamicError('Cannot proceed with your request');
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
return yield this.__iframeStamper.injectKeyExportBundle(exportBundle, organizationId, chain === 'solana' ? iframeStamper.KeyFormat.Solana : iframeStamper.KeyFormat.Hexadecimal);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
walletConnectorCore.logger.error('Error while verifying export private key', err);
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
exportPrivateKey(_a) {
|
|
85
|
+
return _tslib.__awaiter(this, arguments, void 0, function* ({ privateKeyId, organizationId, }) {
|
|
86
|
+
if (!this.__iframeStamper ||
|
|
87
|
+
!this.__publicKey ||
|
|
88
|
+
!this.__turnkeyClient ||
|
|
89
|
+
!privateKeyId) {
|
|
90
|
+
throw new utils.DynamicError('Cannot proceed with your request');
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const newActivity = yield this.__turnkeyClient.exportPrivateKey({
|
|
94
|
+
organizationId,
|
|
95
|
+
parameters: { privateKeyId, targetPublicKey: this.__publicKey },
|
|
96
|
+
timestampMs: String(Date.now()),
|
|
97
|
+
type: 'ACTIVITY_TYPE_EXPORT_PRIVATE_KEY',
|
|
98
|
+
});
|
|
99
|
+
return newActivity.activity;
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
walletConnectorCore.logger.error('Error while completing export private key process', err);
|
|
103
|
+
throw err;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
exportWallet(_a) {
|
|
108
|
+
return _tslib.__awaiter(this, arguments, void 0, function* ({ walletId, organizationId, address, }) {
|
|
109
|
+
if (!this.__iframeStamper ||
|
|
110
|
+
!this.__publicKey ||
|
|
111
|
+
!this.__turnkeyClient ||
|
|
112
|
+
!walletId) {
|
|
113
|
+
throw new utils.DynamicError('Cannot proceed with your request');
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
if (address) {
|
|
117
|
+
const newActivity = yield this.__turnkeyClient.exportWalletAccount({
|
|
118
|
+
organizationId,
|
|
119
|
+
parameters: { address, targetPublicKey: this.__publicKey },
|
|
120
|
+
timestampMs: String(Date.now()),
|
|
121
|
+
type: 'ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT',
|
|
122
|
+
});
|
|
123
|
+
return newActivity.activity;
|
|
124
|
+
}
|
|
125
|
+
const newActivity = yield this.__turnkeyClient.exportWallet({
|
|
126
|
+
organizationId,
|
|
127
|
+
parameters: { targetPublicKey: this.__publicKey, walletId },
|
|
128
|
+
timestampMs: String(Date.now()),
|
|
129
|
+
type: 'ACTIVITY_TYPE_EXPORT_WALLET',
|
|
130
|
+
});
|
|
131
|
+
return newActivity.activity;
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
walletConnectorCore.logger.error('Error while completing export wallet process', err);
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
exports.ExportHandler = ExportHandler;
|