@getpara/core-sdk 1.2.0 → 1.3.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.
Files changed (69) hide show
  1. package/dist/cjs/.!4351!index.js.br +0 -0
  2. package/dist/cjs/.!4353!index.js.gz +0 -0
  3. package/dist/cjs/index.js +2 -97
  4. package/dist/cjs/index.js.br +0 -0
  5. package/dist/cjs/index.js.gz +0 -0
  6. package/dist/esm/.!4345!index.js.br +0 -0
  7. package/dist/esm/.!4347!index.js.gz +0 -0
  8. package/dist/esm/index.js +2 -23
  9. package/dist/esm/index.js.br +0 -0
  10. package/dist/esm/index.js.gz +0 -0
  11. package/package.json +7 -7
  12. package/dist/cjs/ParaCore.js +0 -2620
  13. package/dist/cjs/PlatformUtils.js +0 -2
  14. package/dist/cjs/StorageUtils.js +0 -2
  15. package/dist/cjs/constants.js +0 -20
  16. package/dist/cjs/cryptography/utils.js +0 -251
  17. package/dist/cjs/errors.js +0 -27
  18. package/dist/cjs/external/mpcComputationClient.js +0 -33
  19. package/dist/cjs/external/userManagementClient.js +0 -66
  20. package/dist/cjs/package.json +0 -1
  21. package/dist/cjs/shares/KeyContainer.js +0 -84
  22. package/dist/cjs/shares/recovery.js +0 -62
  23. package/dist/cjs/shares/shareDistribution.js +0 -67
  24. package/dist/cjs/transmission/transmissionUtils.js +0 -73
  25. package/dist/cjs/types/config.js +0 -22
  26. package/dist/cjs/types/events.js +0 -17
  27. package/dist/cjs/types/index.js +0 -30
  28. package/dist/cjs/types/onRamps.js +0 -10
  29. package/dist/cjs/types/params.js +0 -2
  30. package/dist/cjs/types/popup.js +0 -12
  31. package/dist/cjs/types/recovery.js +0 -12
  32. package/dist/cjs/types/theme.js +0 -2
  33. package/dist/cjs/types/wallet.js +0 -9
  34. package/dist/cjs/utils/events.js +0 -9
  35. package/dist/cjs/utils/formatting.js +0 -81
  36. package/dist/cjs/utils/index.js +0 -22
  37. package/dist/cjs/utils/onRamps.js +0 -36
  38. package/dist/cjs/utils/polling.js +0 -25
  39. package/dist/cjs/utils/url.js +0 -74
  40. package/dist/cjs/utils/wallet.js +0 -74
  41. package/dist/esm/ParaCore.js +0 -2590
  42. package/dist/esm/PlatformUtils.js +0 -1
  43. package/dist/esm/StorageUtils.js +0 -1
  44. package/dist/esm/constants.js +0 -17
  45. package/dist/esm/cryptography/utils.js +0 -226
  46. package/dist/esm/errors.js +0 -21
  47. package/dist/esm/external/mpcComputationClient.js +0 -26
  48. package/dist/esm/external/userManagementClient.js +0 -56
  49. package/dist/esm/package.json +0 -1
  50. package/dist/esm/shares/KeyContainer.js +0 -57
  51. package/dist/esm/shares/recovery.js +0 -58
  52. package/dist/esm/shares/shareDistribution.js +0 -63
  53. package/dist/esm/transmission/transmissionUtils.js +0 -45
  54. package/dist/esm/types/config.js +0 -19
  55. package/dist/esm/types/events.js +0 -14
  56. package/dist/esm/types/index.js +0 -9
  57. package/dist/esm/types/onRamps.js +0 -7
  58. package/dist/esm/types/params.js +0 -1
  59. package/dist/esm/types/popup.js +0 -9
  60. package/dist/esm/types/recovery.js +0 -9
  61. package/dist/esm/types/theme.js +0 -1
  62. package/dist/esm/types/wallet.js +0 -6
  63. package/dist/esm/utils/events.js +0 -5
  64. package/dist/esm/utils/formatting.js +0 -66
  65. package/dist/esm/utils/index.js +0 -6
  66. package/dist/esm/utils/onRamps.js +0 -30
  67. package/dist/esm/utils/polling.js +0 -21
  68. package/dist/esm/utils/url.js +0 -66
  69. package/dist/esm/utils/wallet.js +0 -64
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SHORT_POLLING_INTERVAL_MS = exports.POLLING_INTERVAL_MS = exports.SESSION_STORAGE_LOGIN_ENCRYPTION_KEY_PAIR = exports.LOCAL_STORAGE_SESSION_COOKIE = exports.LOCAL_STORAGE_CURRENT_EXTERNAL_WALLET_ADDRESSES = exports.LOCAL_STORAGE_CURRENT_WALLET_IDS = exports.LOCAL_STORAGE_EXTERNAL_WALLETS = exports.LOCAL_STORAGE_WALLETS = exports.LOCAL_STORAGE_ED25519_WALLETS = exports.LOCAL_STORAGE_USER_ID = exports.LOCAL_STORAGE_TELEGRAM_USER_ID = exports.LOCAL_STORAGE_FARCASTER_USERNAME = exports.LOCAL_STORAGE_COUNTRY_CODE = exports.LOCAL_STORAGE_PHONE = exports.LOCAL_STORAGE_EMAIL = exports.PREFIX = exports.PARA_CORE_VERSION = void 0;
4
- exports.PARA_CORE_VERSION = '1.2.0';
5
- exports.PREFIX = '@CAPSULE/';
6
- exports.LOCAL_STORAGE_EMAIL = `${exports.PREFIX}e-mail`;
7
- exports.LOCAL_STORAGE_PHONE = `${exports.PREFIX}phone`;
8
- exports.LOCAL_STORAGE_COUNTRY_CODE = `${exports.PREFIX}countryCode`;
9
- exports.LOCAL_STORAGE_FARCASTER_USERNAME = `${exports.PREFIX}farcasterUsername`;
10
- exports.LOCAL_STORAGE_TELEGRAM_USER_ID = `${exports.PREFIX}telegramUserId`;
11
- exports.LOCAL_STORAGE_USER_ID = `${exports.PREFIX}userId`;
12
- exports.LOCAL_STORAGE_ED25519_WALLETS = `${exports.PREFIX}ed25519Wallets`;
13
- exports.LOCAL_STORAGE_WALLETS = `${exports.PREFIX}wallets`;
14
- exports.LOCAL_STORAGE_EXTERNAL_WALLETS = `${exports.PREFIX}externalWallets`;
15
- exports.LOCAL_STORAGE_CURRENT_WALLET_IDS = `${exports.PREFIX}currentWalletIds`;
16
- exports.LOCAL_STORAGE_CURRENT_EXTERNAL_WALLET_ADDRESSES = `${exports.PREFIX}currentExternalWalletAddresses`;
17
- exports.LOCAL_STORAGE_SESSION_COOKIE = `${exports.PREFIX}sessionCookie`;
18
- exports.SESSION_STORAGE_LOGIN_ENCRYPTION_KEY_PAIR = `${exports.PREFIX}loginEncryptionKeyPair`;
19
- exports.POLLING_INTERVAL_MS = 2000;
20
- exports.SHORT_POLLING_INTERVAL_MS = 1000;
@@ -1,251 +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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.decryptPrivateKeyWithPassword = exports.encryptPrivateKeyWithPassword = exports.hashPasswordWithSalt = exports.encryptWithDerivedPublicKey = exports.decryptPrivateKeyAndDecryptShare = exports.getDerivedPrivateKeyAndDecrypt = exports.decryptWithPrivateKey = exports.decryptWithKeyPair = exports.symmetricKeyEncryptMessage = exports.getPublicKeyFromSignature = exports.getAsymmetricKeyPair = exports.decryptPrivateKey = exports.encryptPrivateKey = exports.decodePrivateKeyPemHex = exports.encodePrivateKeyToPemHex = exports.publicKeyHexToPem = exports.publicKeyFromHex = exports.getPublicKeyHex = exports.getSHA256HashHex = void 0;
16
- const base64url_1 = __importDefault(require("base64url"));
17
- const node_forge_1 = __importDefault(require("node-forge"));
18
- const index_js_1 = require("../utils/index.js");
19
- const rsa = node_forge_1.default.pki.rsa;
20
- const RSA_ENCRYPTION_SCHEME = 'RSA-OAEP';
21
- // ivs can be constant only because every key is only ever used to encrypt one message
22
- const CONSTANT_IV = '794241bc819a125a7b78ea313decc0bc';
23
- const CONSTANT_IV_AES = new Uint8Array([23, 66, 157, 146, 179, 158, 117, 120, 184, 73, 123, 81]);
24
- function getSHA256HashHex(str) {
25
- const md = node_forge_1.default.md.sha256.create();
26
- md.update(str);
27
- return md.digest().toHex();
28
- }
29
- exports.getSHA256HashHex = getSHA256HashHex;
30
- function getPublicKeyHex(keyPair) {
31
- const pem = node_forge_1.default.pki.publicKeyToRSAPublicKeyPem(keyPair.publicKey);
32
- return Buffer.from(pem, 'utf-8').toString('hex');
33
- }
34
- exports.getPublicKeyHex = getPublicKeyHex;
35
- function publicKeyFromHex(publicKeyHex) {
36
- const pem = publicKeyHexToPem(publicKeyHex);
37
- return node_forge_1.default.pki.publicKeyFromPem(pem);
38
- }
39
- exports.publicKeyFromHex = publicKeyFromHex;
40
- function publicKeyHexToPem(publicKeyHex) {
41
- return Buffer.from(publicKeyHex, 'hex').toString('utf-8');
42
- }
43
- exports.publicKeyHexToPem = publicKeyHexToPem;
44
- function encodePrivateKeyToPemHex(keyPair) {
45
- const pem = node_forge_1.default.pki.privateKeyToPem(keyPair.privateKey);
46
- return Buffer.from(pem, 'utf-8').toString('hex');
47
- }
48
- exports.encodePrivateKeyToPemHex = encodePrivateKeyToPemHex;
49
- function decodePrivateKeyPemHex(privateKeyPemHex) {
50
- const pem = Buffer.from(privateKeyPemHex, 'hex').toString('utf-8');
51
- return node_forge_1.default.pki.privateKeyFromPem(pem);
52
- }
53
- exports.decodePrivateKeyPemHex = decodePrivateKeyPemHex;
54
- function encryptPrivateKey(keyPair, key) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- const privateKeyPemHex = encodePrivateKeyToPemHex(keyPair);
57
- const cryptoKey = yield window.crypto.subtle.importKey('raw', Buffer.from(key, 'base64'), {
58
- name: 'AES-GCM',
59
- length: 256,
60
- }, true, ['encrypt', 'decrypt']);
61
- const encodedPlaintext = new TextEncoder().encode(privateKeyPemHex);
62
- const ciphertext = yield window.crypto.subtle.encrypt({ name: 'AES-GCM', iv: CONSTANT_IV_AES }, cryptoKey, encodedPlaintext);
63
- return Buffer.from(ciphertext).toString('base64');
64
- });
65
- }
66
- exports.encryptPrivateKey = encryptPrivateKey;
67
- function decryptPrivateKey(encryptedPrivateKeyPemHex, key) {
68
- return __awaiter(this, void 0, void 0, function* () {
69
- const secretKey = yield crypto.subtle.importKey('raw', Buffer.from(key, 'base64'), {
70
- name: 'AES-GCM',
71
- length: 256,
72
- }, true, ['encrypt', 'decrypt']);
73
- const cleartext = yield crypto.subtle.decrypt({ name: 'AES-GCM', iv: CONSTANT_IV_AES }, secretKey, Buffer.from(encryptedPrivateKeyPemHex, 'base64'));
74
- const privateKeyPemHex = new TextDecoder().decode(cleartext);
75
- const privateKey = decodePrivateKeyPemHex(privateKeyPemHex);
76
- return privateKey;
77
- });
78
- }
79
- exports.decryptPrivateKey = decryptPrivateKey;
80
- function getAsymmetricKeyPair(ctx, seedValue) {
81
- return __awaiter(this, void 0, void 0, function* () {
82
- const prng = node_forge_1.default.random.createInstance();
83
- if (seedValue) {
84
- prng.seedFileSync = (_n) => seedValue;
85
- prng.seedFile = (_n, cb) => {
86
- cb(null, seedValue);
87
- };
88
- }
89
- const options = {
90
- bits: 2048,
91
- e: 65537,
92
- prng,
93
- };
94
- if (!ctx.disableWorkers) {
95
- options.workLoad = 100;
96
- // only using 1 web worker as more makes the call non-deterministic
97
- // -1 uses optimal amount of web workers
98
- options.workers = seedValue ? 1 : -1;
99
- const workerRes = yield fetch(`${(0, index_js_1.getPortalBaseURL)(ctx)}/static/js/prime.worker.min.js`);
100
- const workerBlob = new Blob([yield workerRes.text()], { type: 'application/javascript' });
101
- options.workerScript = URL.createObjectURL(workerBlob);
102
- }
103
- return new Promise((resolve, reject) => rsa.generateKeyPair(options, (err, keypair) => {
104
- if (err) {
105
- reject(err);
106
- }
107
- resolve(keypair);
108
- }));
109
- });
110
- }
111
- exports.getAsymmetricKeyPair = getAsymmetricKeyPair;
112
- function getPublicKeyFromSignature(ctx, userHandle) {
113
- return __awaiter(this, void 0, void 0, function* () {
114
- const encodedUserHandle = base64url_1.default.encode(userHandle);
115
- const keyPair = yield getAsymmetricKeyPair(ctx, encodedUserHandle);
116
- return getPublicKeyHex(keyPair);
117
- });
118
- }
119
- exports.getPublicKeyFromSignature = getPublicKeyFromSignature;
120
- // only use for one time key encryptions as iv is constant
121
- function symmetricKeyEncryptMessage(message) {
122
- const key = node_forge_1.default.random.getBytesSync(16);
123
- const cipher = node_forge_1.default.cipher.createCipher('AES-CBC', key);
124
- // iv can be constant only because every key is only ever used to encrypt one message
125
- cipher.start({ iv: CONSTANT_IV });
126
- cipher.update(node_forge_1.default.util.createBuffer(message));
127
- cipher.finish();
128
- const encryptedMessageHex = cipher.output.toHex();
129
- return { key, encryptedMessageHex };
130
- }
131
- exports.symmetricKeyEncryptMessage = symmetricKeyEncryptMessage;
132
- function decipherEncryptedMessageHex(key, encryptedMessageHex) {
133
- const decipher = node_forge_1.default.cipher.createDecipher('AES-CBC', key);
134
- // iv can be constant only because every key is only ever used to encrypt one message
135
- decipher.start({ iv: CONSTANT_IV });
136
- decipher.update(node_forge_1.default.util.createBuffer(node_forge_1.default.util.hexToBytes(encryptedMessageHex)));
137
- decipher.finish();
138
- return decipher.output.toString();
139
- }
140
- // Deprecated in favor of decryptWithPrivateKey
141
- function decryptWithKeyPair(keyPair, encryptedMessageHex, encryptedKeyHex) {
142
- const encryptedKey = Buffer.from(encryptedKeyHex, 'hex').toString('utf-8');
143
- const key = keyPair.privateKey.decrypt(encryptedKey, RSA_ENCRYPTION_SCHEME);
144
- return decipherEncryptedMessageHex(key, encryptedMessageHex);
145
- }
146
- exports.decryptWithKeyPair = decryptWithKeyPair;
147
- function decryptWithPrivateKey(privateKey, encryptedMessageHex, encryptedKeyHex) {
148
- const encryptedKey = Buffer.from(encryptedKeyHex, 'hex').toString('utf-8');
149
- const key = privateKey.decrypt(encryptedKey, RSA_ENCRYPTION_SCHEME);
150
- return decipherEncryptedMessageHex(key, encryptedMessageHex);
151
- }
152
- exports.decryptWithPrivateKey = decryptWithPrivateKey;
153
- function decryptWithDerivedPrivateKey(ctx, { seedValue, encryptedMessageHex, encryptedKeyHex, }) {
154
- return __awaiter(this, void 0, void 0, function* () {
155
- const keyPair = yield getAsymmetricKeyPair(ctx, seedValue);
156
- return decryptWithPrivateKey(keyPair.privateKey, encryptedMessageHex, encryptedKeyHex);
157
- });
158
- }
159
- function getDerivedPrivateKeyAndDecrypt(ctx, seedValue, encryptedShares) {
160
- return __awaiter(this, void 0, void 0, function* () {
161
- return Promise.all(encryptedShares.map((share) => __awaiter(this, void 0, void 0, function* () {
162
- return ({
163
- walletId: share.walletId,
164
- walletScheme: share.walletScheme,
165
- partnerId: share.partnerId,
166
- signer: yield decryptWithDerivedPrivateKey(ctx, {
167
- seedValue,
168
- encryptedMessageHex: share.encryptedShare,
169
- encryptedKeyHex: share.encryptedKey,
170
- }),
171
- protocolId: share.protocolId,
172
- });
173
- })));
174
- });
175
- }
176
- exports.getDerivedPrivateKeyAndDecrypt = getDerivedPrivateKeyAndDecrypt;
177
- function decryptPrivateKeyAndDecryptShare(encryptionKey, encryptedShares, encryptedPrivateKey) {
178
- return __awaiter(this, void 0, void 0, function* () {
179
- let privateKey;
180
- try {
181
- privateKey = yield decryptPrivateKey(encryptedPrivateKey, encryptionKey);
182
- }
183
- catch (e) { }
184
- try {
185
- privateKey = yield decryptPrivateKeyWithPassword(encryptedPrivateKey, encryptionKey);
186
- }
187
- catch (e) { }
188
- if (!privateKey) {
189
- throw new Error('Could not decrypt private key');
190
- }
191
- return encryptedShares.map(share => ({
192
- walletId: share.walletId,
193
- walletScheme: share.walletScheme,
194
- partnerId: share.partnerId,
195
- signer: decryptWithPrivateKey(privateKey, share.encryptedShare, share.encryptedKey),
196
- protocolId: share.protocolId,
197
- }));
198
- });
199
- }
200
- exports.decryptPrivateKeyAndDecryptShare = decryptPrivateKeyAndDecryptShare;
201
- function encryptWithDerivedPublicKey(publicKeyHex, message) {
202
- const { key, encryptedMessageHex } = symmetricKeyEncryptMessage(message);
203
- const publicKeyPem = publicKeyHexToPem(publicKeyHex);
204
- const publicKey = node_forge_1.default.pki.publicKeyFromPem(publicKeyPem);
205
- const encryptedKey = publicKey.encrypt(key, RSA_ENCRYPTION_SCHEME);
206
- const encryptedKeyHex = Buffer.from(encryptedKey, 'utf-8').toString('hex');
207
- return { encryptedMessageHex, encryptedKeyHex };
208
- }
209
- exports.encryptWithDerivedPublicKey = encryptWithDerivedPublicKey;
210
- function hashPasswordWithSalt(password) {
211
- const salt = generateSalt();
212
- const saltedPassword = salt + password;
213
- const hash = getSHA256HashHex(saltedPassword);
214
- return { salt, hash };
215
- }
216
- exports.hashPasswordWithSalt = hashPasswordWithSalt;
217
- function generateSalt(length = 16) {
218
- return node_forge_1.default.util.bytesToHex(node_forge_1.default.random.getBytesSync(length));
219
- }
220
- function deriveCryptoKeyFromPassword(hashedPassword) {
221
- return __awaiter(this, void 0, void 0, function* () {
222
- const keyBuffer = Buffer.from(hashedPassword, 'hex');
223
- return yield window.crypto.subtle.importKey('raw', keyBuffer, {
224
- name: 'AES-GCM',
225
- length: 256,
226
- }, true, ['encrypt', 'decrypt']);
227
- });
228
- }
229
- function encryptPrivateKeyWithPassword(keyPair, hashedPassword) {
230
- return __awaiter(this, void 0, void 0, function* () {
231
- const cryptoKey = yield deriveCryptoKeyFromPassword(hashedPassword);
232
- const privateKeyPemHex = encodePrivateKeyToPemHex(keyPair);
233
- const encodedPlaintext = new TextEncoder().encode(privateKeyPemHex);
234
- const ciphertext = yield window.crypto.subtle.encrypt({ name: 'AES-GCM', iv: CONSTANT_IV_AES }, cryptoKey, encodedPlaintext);
235
- return Buffer.from(ciphertext).toString('base64');
236
- });
237
- }
238
- exports.encryptPrivateKeyWithPassword = encryptPrivateKeyWithPassword;
239
- function decryptPrivateKeyWithPassword(encryptedPrivateKeyPemHex, hashedPassword) {
240
- return __awaiter(this, void 0, void 0, function* () {
241
- const secretKey = yield crypto.subtle.importKey('raw', Buffer.from(hashedPassword, 'hex'), {
242
- name: 'AES-GCM',
243
- length: 256,
244
- }, true, ['encrypt', 'decrypt']);
245
- const cleartext = yield crypto.subtle.decrypt({ name: 'AES-GCM', iv: CONSTANT_IV_AES }, secretKey, Buffer.from(encryptedPrivateKeyPemHex, 'base64'));
246
- const privateKeyPemHex = new TextDecoder().decode(cleartext);
247
- const privateKey = decodePrivateKeyPemHex(privateKeyPemHex);
248
- return privateKey;
249
- });
250
- }
251
- exports.decryptPrivateKeyWithPassword = decryptPrivateKeyWithPassword;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransactionReviewTimeout = exports.TransactionReviewDenied = exports.TransactionReviewError = void 0;
4
- class TransactionReviewError extends Error {
5
- constructor(transactionReviewUrl) {
6
- super('transaction review error');
7
- this.name = 'TransactionReviewError';
8
- this.transactionReviewUrl = transactionReviewUrl;
9
- }
10
- }
11
- exports.TransactionReviewError = TransactionReviewError;
12
- class TransactionReviewDenied extends Error {
13
- constructor() {
14
- super('transaction review has been denied by the user');
15
- this.name = 'TransactionReviewDenied';
16
- }
17
- }
18
- exports.TransactionReviewDenied = TransactionReviewDenied;
19
- class TransactionReviewTimeout extends Error {
20
- constructor(transactionReviewUrl, pendingTransactionId) {
21
- super('transaction review has timed out');
22
- this.name = 'TransactionReviewTimeout';
23
- this.transactionReviewUrl = transactionReviewUrl;
24
- this.pendingTransactionId = pendingTransactionId;
25
- }
26
- }
27
- exports.TransactionReviewTimeout = TransactionReviewTimeout;
@@ -1,33 +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.initClient = void 0;
7
- const axios_1 = __importDefault(require("axios"));
8
- function initClient(baseURL, useAdapter) {
9
- const client = axios_1.default.create({ baseURL });
10
- if (useAdapter) {
11
- client.defaults.adapter = function (config) {
12
- return fetch(config.baseURL + config.url, {
13
- method: config.method,
14
- headers: config.headers,
15
- body: config.data,
16
- credentials: config.withCredentials ? 'include' : undefined,
17
- })
18
- .then(response => response.text().then(text => ({
19
- data: text,
20
- status: response.status,
21
- statusText: response.statusText,
22
- headers: response.headers,
23
- config: config,
24
- request: fetch,
25
- })))
26
- .catch(function (reason) {
27
- throw reason;
28
- });
29
- };
30
- }
31
- return client;
32
- }
33
- exports.initClient = initClient;
@@ -1,66 +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.initClient = exports.getBaseMPCNetworkUrl = exports.getBaseUrl = exports.getBaseOAuthUrl = void 0;
7
- const user_management_client_1 = __importDefault(require("@getpara/user-management-client"));
8
- const index_js_1 = require("../types/index.js");
9
- function getBaseOAuthUrl(env) {
10
- switch (env) {
11
- case index_js_1.Environment.DEV:
12
- return 'http://localhost:8080/';
13
- case index_js_1.Environment.SANDBOX:
14
- return 'https://api.sandbox.usecapsule.com/';
15
- case index_js_1.Environment.BETA:
16
- return 'https://api.beta.usecapsule.com/';
17
- case index_js_1.Environment.PROD:
18
- return 'https://api.usecapsule.com/';
19
- default:
20
- throw new Error(`unsupported env: ${env}`);
21
- }
22
- }
23
- exports.getBaseOAuthUrl = getBaseOAuthUrl;
24
- function getBaseUrl(env) {
25
- switch (env) {
26
- case index_js_1.Environment.DEV:
27
- return 'http://localhost:8080/';
28
- case index_js_1.Environment.SANDBOX:
29
- return 'https://api.sandbox.getpara.com/';
30
- case index_js_1.Environment.BETA:
31
- return 'https://api.beta.getpara.com/';
32
- case index_js_1.Environment.PROD:
33
- return 'https://api.getpara.com/';
34
- default:
35
- throw new Error(`unsupported env: ${env}`);
36
- }
37
- }
38
- exports.getBaseUrl = getBaseUrl;
39
- function getBaseMPCNetworkUrl(env, useWebsocket) {
40
- const prefix = useWebsocket ? 'ws' : 'http';
41
- switch (env) {
42
- case index_js_1.Environment.DEV:
43
- return `${prefix}://localhost:3000`;
44
- case index_js_1.Environment.SANDBOX:
45
- return `${prefix}s://mpc-network.sandbox.getpara.com`;
46
- case index_js_1.Environment.BETA:
47
- return `${prefix}s://mpc-network.beta.getpara.com`;
48
- case index_js_1.Environment.PROD:
49
- return `${prefix}s://mpc-network.prod.getpara.com`;
50
- default:
51
- throw new Error(`unsupported env: ${env}`);
52
- }
53
- }
54
- exports.getBaseMPCNetworkUrl = getBaseMPCNetworkUrl;
55
- function initClient({ env, version, apiKey, partnerId, useFetchAdapter = false, retrieveSessionCookie, persistSessionCookie, }) {
56
- return new user_management_client_1.default({
57
- userManagementHost: getBaseUrl(env),
58
- version: [index_js_1.Environment.DEV, index_js_1.Environment.SANDBOX].includes(env) ? 'dev' : version,
59
- apiKey: apiKey,
60
- partnerId,
61
- opts: { useFetchAdapter },
62
- retrieveSessionCookie,
63
- persistSessionCookie,
64
- });
65
- }
66
- exports.initClient = initClient;
@@ -1 +0,0 @@
1
- {"type":"commonjs"}
@@ -1,84 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.KeyContainer = void 0;
27
- const ecies_js_1 = require("@celo/utils/lib/ecies.js");
28
- const eutil = __importStar(require("ethereumjs-util"));
29
- const forge = __importStar(require("node-forge"));
30
- class KeyContainer {
31
- constructor(walletId, keyshare, address) {
32
- this.walletId = walletId;
33
- this.keyshare = keyshare;
34
- this.address = address;
35
- this.backupDecryptionKey = Buffer.from(forge.random.getBytesSync(32), 'binary').toString('hex');
36
- }
37
- static buildFrom(serializedContainer) {
38
- try {
39
- const parsedObject = JSON.parse(serializedContainer);
40
- return Object.assign(new KeyContainer('', '', ''), parsedObject);
41
- }
42
- catch (e) {
43
- const container = new KeyContainer('', '', '');
44
- container.backupDecryptionKey = serializedContainer.split('|')[0];
45
- return container;
46
- }
47
- }
48
- getPublicEncryptionKey() {
49
- return Buffer.from(eutil.privateToPublic(Buffer.from(this.backupDecryptionKey, 'hex')));
50
- }
51
- getPublicEncryptionKeyHex() {
52
- return this.getPublicEncryptionKey().toString('hex');
53
- }
54
- encryptForSelf(backup) {
55
- try {
56
- const pubkey = this.getPublicEncryptionKey();
57
- const data = (0, ecies_js_1.Encrypt)(pubkey, Buffer.from(backup, 'ucs2')).toString('base64');
58
- return data;
59
- }
60
- catch (error) {
61
- throw Error('Error encrypting backup');
62
- }
63
- }
64
- static encryptWithPublicKey(publicKey, backup) {
65
- try {
66
- const data = (0, ecies_js_1.Encrypt)(publicKey, Buffer.from(backup, 'ucs2')).toString('base64');
67
- return data;
68
- }
69
- catch (error) {
70
- throw Error('Error encrypting backup');
71
- }
72
- }
73
- decrypt(encryptedBackup) {
74
- try {
75
- const buf = Buffer.from(encryptedBackup, 'base64');
76
- const data = (0, ecies_js_1.Decrypt)(Buffer.from(this.backupDecryptionKey, 'hex'), buf);
77
- return Buffer.from(data.buffer).toString('ucs2');
78
- }
79
- catch (error) {
80
- throw Error('Error decrypting backup');
81
- }
82
- }
83
- }
84
- exports.KeyContainer = KeyContainer;
@@ -1,62 +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
- exports.sendRecoveryForShare = void 0;
13
- const user_management_client_1 = require("@getpara/user-management-client");
14
- const KeyContainer_js_1 = require("./KeyContainer.js");
15
- function sendRecoveryForShare({ ctx, userId, walletId, otherEncryptedShares = [], userSigner, ignoreRedistributingBackupEncryptedShare = false, emailProps = {}, forceRefresh = false, }) {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- if (ignoreRedistributingBackupEncryptedShare) {
18
- yield ctx.client.uploadUserKeyShares(userId, otherEncryptedShares.map(share => (Object.assign({ walletId }, share))));
19
- return '';
20
- }
21
- let userBackupKeyShareOptsArr;
22
- let recoveryPrivateKeyContainer;
23
- const { recoveryPublicKeys } = yield ctx.client.getRecoveryPublicKeys(userId);
24
- if (forceRefresh || !(recoveryPublicKeys === null || recoveryPublicKeys === void 0 ? void 0 : recoveryPublicKeys.length)) {
25
- recoveryPrivateKeyContainer = new KeyContainer_js_1.KeyContainer(walletId, '', '');
26
- const { recoveryPublicKeys } = yield ctx.client.persistRecoveryPublicKeys(userId, [
27
- recoveryPrivateKeyContainer.getPublicEncryptionKeyHex(),
28
- ]);
29
- const encryptedUserBackup = recoveryPrivateKeyContainer.encryptForSelf(userSigner);
30
- userBackupKeyShareOptsArr = [
31
- {
32
- walletId,
33
- encryptedShare: encryptedUserBackup,
34
- type: user_management_client_1.KeyShareType.USER,
35
- encryptor: user_management_client_1.EncryptorType.RECOVERY,
36
- recoveryPublicKeyId: recoveryPublicKeys[0].id,
37
- },
38
- ];
39
- }
40
- else {
41
- userBackupKeyShareOptsArr = recoveryPublicKeys.map(recoveryPublicKey => {
42
- const { id: recoveryPublicKeyId, publicKey } = recoveryPublicKey;
43
- const encryptedUserBackup = KeyContainer_js_1.KeyContainer.encryptWithPublicKey(Buffer.from(publicKey, 'hex'), userSigner);
44
- return {
45
- walletId,
46
- encryptedShare: encryptedUserBackup,
47
- type: user_management_client_1.KeyShareType.USER,
48
- encryptor: user_management_client_1.EncryptorType.RECOVERY,
49
- recoveryPublicKeyId,
50
- };
51
- });
52
- }
53
- yield ctx.client.uploadUserKeyShares(userId, [
54
- ...otherEncryptedShares.map(share => (Object.assign({ walletId }, share))),
55
- ...(ignoreRedistributingBackupEncryptedShare ? [] : userBackupKeyShareOptsArr),
56
- ]);
57
- yield ctx.client.distributeParaShare(Object.assign({ userId,
58
- walletId, useDKLS: ctx.useDKLS }, emailProps));
59
- return recoveryPrivateKeyContainer ? JSON.stringify(recoveryPrivateKeyContainer) : '';
60
- });
61
- }
62
- exports.sendRecoveryForShare = sendRecoveryForShare;
@@ -1,67 +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
- exports.distributeNewShare = void 0;
13
- const user_management_client_1 = require("@getpara/user-management-client");
14
- const utils_js_1 = require("../cryptography/utils.js");
15
- const recovery_js_1 = require("./recovery.js");
16
- // function to call on new user share to perform all necessary distribution
17
- function distributeNewShare({ ctx, userId, walletId, userShare, ignoreRedistributingBackupEncryptedShare = false, emailProps = {}, partnerId, protocolId, }) {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- const publicKeysRes = yield ctx.client.getSessionPublicKeys(userId);
20
- const biometricEncryptedShares = publicKeysRes.data.keys
21
- .map(key => {
22
- if (!key.publicKey) {
23
- return;
24
- }
25
- const { encryptedMessageHex, encryptedKeyHex } = (0, utils_js_1.encryptWithDerivedPublicKey)(key.sigDerivedPublicKey, userShare);
26
- return {
27
- encryptedShare: encryptedMessageHex,
28
- encryptedKey: encryptedKeyHex,
29
- type: user_management_client_1.KeyShareType.USER,
30
- encryptor: user_management_client_1.EncryptorType.BIOMETRICS,
31
- biometricPublicKey: key.sigDerivedPublicKey,
32
- partnerId,
33
- protocolId,
34
- };
35
- })
36
- .filter(Boolean);
37
- const passwords = yield ctx.client.getPasswords({ userId });
38
- const passwordEncryptedShares = passwords
39
- .map(password => {
40
- if (password.status === 'PENDING') {
41
- return;
42
- }
43
- const { encryptedMessageHex, encryptedKeyHex } = (0, utils_js_1.encryptWithDerivedPublicKey)(password.sigDerivedPublicKey, userShare);
44
- return {
45
- encryptedShare: encryptedMessageHex,
46
- encryptedKey: encryptedKeyHex,
47
- type: user_management_client_1.KeyShareType.USER,
48
- encryptor: user_management_client_1.EncryptorType.PASSWORD,
49
- passwordId: password.id,
50
- partnerId,
51
- protocolId,
52
- };
53
- })
54
- .filter(Boolean);
55
- const allEncryptedShares = [...biometricEncryptedShares, ...passwordEncryptedShares];
56
- return yield (0, recovery_js_1.sendRecoveryForShare)({
57
- ctx,
58
- userId,
59
- walletId,
60
- otherEncryptedShares: allEncryptedShares,
61
- userSigner: userShare,
62
- ignoreRedistributingBackupEncryptedShare,
63
- emailProps,
64
- });
65
- });
66
- }
67
- exports.distributeNewShare = distributeNewShare;