@getpara/core-sdk 0.1.0

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 (63) hide show
  1. package/dist/cjs/ParaCore.js +2600 -0
  2. package/dist/cjs/PlatformUtils.js +2 -0
  3. package/dist/cjs/StorageUtils.js +2 -0
  4. package/dist/cjs/cryptography/utils.js +251 -0
  5. package/dist/cjs/definitions.js +155 -0
  6. package/dist/cjs/errors.js +27 -0
  7. package/dist/cjs/external/mpcComputationClient.js +33 -0
  8. package/dist/cjs/external/userManagementClient.js +51 -0
  9. package/dist/cjs/index.js +81 -0
  10. package/dist/cjs/package.json +1 -0
  11. package/dist/cjs/shares/KeyContainer.js +84 -0
  12. package/dist/cjs/shares/recovery.js +62 -0
  13. package/dist/cjs/shares/shareDistribution.js +67 -0
  14. package/dist/cjs/transmission/transmissionUtils.js +73 -0
  15. package/dist/cjs/types/index.js +20 -0
  16. package/dist/cjs/types/params.js +2 -0
  17. package/dist/cjs/types/popupTypes.js +12 -0
  18. package/dist/cjs/types/theme.js +2 -0
  19. package/dist/cjs/types/walletTypes.js +2 -0
  20. package/dist/cjs/utils/formattingUtils.js +71 -0
  21. package/dist/cjs/utils/pollingUtils.js +25 -0
  22. package/dist/esm/ParaCore.js +2563 -0
  23. package/dist/esm/PlatformUtils.js +1 -0
  24. package/dist/esm/StorageUtils.js +1 -0
  25. package/dist/esm/cryptography/utils.js +226 -0
  26. package/dist/esm/definitions.js +142 -0
  27. package/dist/esm/errors.js +21 -0
  28. package/dist/esm/external/mpcComputationClient.js +26 -0
  29. package/dist/esm/external/userManagementClient.js +42 -0
  30. package/dist/esm/index.js +19 -0
  31. package/dist/esm/package.json +1 -0
  32. package/dist/esm/shares/KeyContainer.js +57 -0
  33. package/dist/esm/shares/recovery.js +58 -0
  34. package/dist/esm/shares/shareDistribution.js +63 -0
  35. package/dist/esm/transmission/transmissionUtils.js +45 -0
  36. package/dist/esm/types/index.js +4 -0
  37. package/dist/esm/types/params.js +1 -0
  38. package/dist/esm/types/popupTypes.js +9 -0
  39. package/dist/esm/types/theme.js +1 -0
  40. package/dist/esm/types/walletTypes.js +1 -0
  41. package/dist/esm/utils/formattingUtils.js +58 -0
  42. package/dist/esm/utils/pollingUtils.js +21 -0
  43. package/dist/types/ParaCore.d.ts +1021 -0
  44. package/dist/types/PlatformUtils.d.ts +48 -0
  45. package/dist/types/StorageUtils.d.ts +20 -0
  46. package/dist/types/cryptography/utils.d.ts +51 -0
  47. package/dist/types/definitions.d.ts +88 -0
  48. package/dist/types/errors.d.ts +12 -0
  49. package/dist/types/external/mpcComputationClient.d.ts +2 -0
  50. package/dist/types/external/userManagementClient.d.ts +13 -0
  51. package/dist/types/index.d.ts +22 -0
  52. package/dist/types/shares/KeyContainer.d.ts +14 -0
  53. package/dist/types/shares/recovery.d.ts +12 -0
  54. package/dist/types/shares/shareDistribution.d.ts +12 -0
  55. package/dist/types/transmission/transmissionUtils.d.ts +3 -0
  56. package/dist/types/types/index.d.ts +4 -0
  57. package/dist/types/types/params.d.ts +24 -0
  58. package/dist/types/types/popupTypes.d.ts +8 -0
  59. package/dist/types/types/theme.d.ts +12 -0
  60. package/dist/types/types/walletTypes.d.ts +11 -0
  61. package/dist/types/utils/formattingUtils.d.ts +16 -0
  62. package/dist/types/utils/pollingUtils.d.ts +1 -0
  63. package/package.json +44 -0
@@ -0,0 +1,84 @@
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;
@@ -0,0 +1,62 @@
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;
@@ -0,0 +1,67 @@
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;
@@ -0,0 +1,73 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.retrieve = exports.upload = void 0;
36
+ const crypto_1 = require("crypto");
37
+ const ecies_js_1 = require("@celo/utils/lib/ecies.js");
38
+ const buffer_1 = require("buffer");
39
+ const eutil = __importStar(require("ethereumjs-util"));
40
+ function upload(message, userManagementClient) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ let secret;
43
+ let publicKeyUint8Array;
44
+ while (true) {
45
+ try {
46
+ secret = (0, crypto_1.randomBytes)(32).toString('hex');
47
+ // privateToPublic throws error when private key is larger than group order
48
+ // so we want to keep trying until we get a valid private key
49
+ publicKeyUint8Array = eutil.privateToPublic(buffer_1.Buffer.from(secret, 'hex'));
50
+ break;
51
+ }
52
+ catch (e) {
53
+ continue;
54
+ }
55
+ }
56
+ const pubkey = buffer_1.Buffer.from(publicKeyUint8Array);
57
+ const data = (0, ecies_js_1.Encrypt)(pubkey, buffer_1.Buffer.from(message, 'ucs2')).toString('base64');
58
+ const { data: { id }, } = yield userManagementClient.tempTrasmissionInit(data);
59
+ return encodeURIComponent(id + '|' + secret);
60
+ });
61
+ }
62
+ exports.upload = upload;
63
+ function retrieve(uriEncodedMessage, userManagementClient) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const [id, secret] = decodeURIComponent(uriEncodedMessage).split('|');
66
+ const response = yield userManagementClient.tempTrasmission(id);
67
+ const data = response.data.message;
68
+ const buf = buffer_1.Buffer.from(data, 'base64');
69
+ const res = buffer_1.Buffer.from((0, ecies_js_1.Decrypt)(buffer_1.Buffer.from(secret, 'hex'), buf).buffer).toString('ucs2');
70
+ return res;
71
+ });
72
+ }
73
+ exports.retrieve = retrieve;
@@ -0,0 +1,20 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./walletTypes.js"), exports);
18
+ __exportStar(require("./params.js"), exports);
19
+ __exportStar(require("./theme.js"), exports);
20
+ __exportStar(require("./popupTypes.js"), exports);
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PopupType = void 0;
4
+ var PopupType;
5
+ (function (PopupType) {
6
+ PopupType["SIGN_TRANSACTION_REVIEW"] = "SIGN_TRANSACTION_REVIEW";
7
+ PopupType["SIGN_MESSAGE_REVIEW"] = "SIGN_MESSAGE_REVIEW";
8
+ PopupType["LOGIN_PASSKEY"] = "LOGIN_PASSKEY";
9
+ PopupType["CREATE_PASSKEY"] = "CREATE_PASSKEY";
10
+ PopupType["OAUTH"] = "OAUTH";
11
+ PopupType["ON_RAMP_TRANSACTION"] = "ON_RAMP_TRANSACTION";
12
+ })(PopupType || (exports.PopupType = PopupType = {}));
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,71 @@
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.truncateAddress = exports.getCosmosAddress = exports.decimalToHex = exports.hexToDecimal = exports.hexToUint8Array = exports.hexToSignature = exports.hexStringToBase64 = void 0;
7
+ const encoding_1 = require("@cosmjs/encoding");
8
+ const sha256_1 = require("@noble/hashes/sha256");
9
+ const ripemd160_1 = require("@noble/hashes/ripemd160");
10
+ const elliptic_1 = __importDefault(require("elliptic"));
11
+ const secp256k1 = new elliptic_1.default.ec('secp256k1');
12
+ function hexStringToBase64(hexString) {
13
+ if (hexString.substring(0, 2) === '0x') {
14
+ hexString = hexString.substring(2);
15
+ }
16
+ return Buffer.from(hexString, 'hex').toString('base64');
17
+ }
18
+ exports.hexStringToBase64 = hexStringToBase64;
19
+ function hexToSignature(hexSig) {
20
+ return {
21
+ r: `0x${hexSig.slice(2, 66)}`,
22
+ s: `0x${hexSig.slice(66, 130)}`,
23
+ v: BigInt(hexSig.slice(130, 132)),
24
+ };
25
+ }
26
+ exports.hexToSignature = hexToSignature;
27
+ function hexToUint8Array(hex) {
28
+ if (hex.startsWith('0x')) {
29
+ hex = hex.slice(2);
30
+ }
31
+ return new Uint8Array(Buffer.from(hex, 'hex'));
32
+ }
33
+ exports.hexToUint8Array = hexToUint8Array;
34
+ function hexToDecimal(hex) {
35
+ if (hex.startsWith('0x')) {
36
+ hex = hex.slice(2);
37
+ }
38
+ return `${parseInt(hex, 16)}`;
39
+ }
40
+ exports.hexToDecimal = hexToDecimal;
41
+ function decimalToHex(decimal) {
42
+ return `0x${parseInt(decimal).toString(16)}`;
43
+ }
44
+ exports.decimalToHex = decimalToHex;
45
+ function compressPubkey(pubkey) {
46
+ switch (pubkey.length) {
47
+ case 33:
48
+ return pubkey;
49
+ case 65:
50
+ return Uint8Array.from(secp256k1.keyFromPublic(pubkey).getPublic(true, 'array'));
51
+ default:
52
+ throw new Error('Invalid pubkey length');
53
+ }
54
+ }
55
+ function rawSecp256k1PubkeyToRawAddress(pubkeyData) {
56
+ if (pubkeyData.length !== 33) {
57
+ throw new Error(`Invalid Secp256k1 pubkey length (compressed): ${pubkeyData.length}`);
58
+ }
59
+ return (0, ripemd160_1.ripemd160)((0, sha256_1.sha256)(pubkeyData));
60
+ }
61
+ function getCosmosAddress(publicKey, prefix) {
62
+ const uncompressedPublicKey = new Uint8Array(Buffer.from(publicKey.startsWith('0x') ? publicKey.slice(2) : publicKey, 'hex'));
63
+ const compressedPublicKey = compressPubkey(uncompressedPublicKey);
64
+ return (0, encoding_1.toBech32)(prefix, rawSecp256k1PubkeyToRawAddress(compressedPublicKey));
65
+ }
66
+ exports.getCosmosAddress = getCosmosAddress;
67
+ function truncateAddress(str, addressType, { prefix = addressType === 'COSMOS' ? 'cosmos' : undefined } = {}) {
68
+ const headLength = (addressType === 'COSMOS' ? prefix.length : addressType === 'SOLANA' ? 0 : 2) + 4;
69
+ return `${str.slice(0, headLength)}...${str.slice(-4)}`;
70
+ }
71
+ exports.truncateAddress = truncateAddress;
@@ -0,0 +1,25 @@
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.waitUntilTrue = void 0;
13
+ function waitUntilTrue(condition, timeoutMs, intervalMs) {
14
+ return __awaiter(this, void 0, void 0, function* () {
15
+ const start = Date.now();
16
+ while (Date.now() - start < timeoutMs) {
17
+ if (yield condition()) {
18
+ return true;
19
+ }
20
+ yield new Promise(resolve => setTimeout(resolve, intervalMs));
21
+ }
22
+ return false;
23
+ });
24
+ }
25
+ exports.waitUntilTrue = waitUntilTrue;