PHP WebShell

Текущая директория: /opt/BitGoJS/modules/express/dist/src

Просмотр файла: fetchEncryptedPrivKeys.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchKeys = void 0;
/**
 * This tool will help you creates a private key JSON file to be used with the external singing mode feature.
 * It creates a JSON file containing a list of wallet IDs and their corresponding encrypted user private keys.
 *
 * To run this file, use the command:
 * `yarn ts-node <path/to/fetchEncryptedPrivKeys.ts>`
 *
 * Copyright 2022, BitGo, Inc.  All Rights Reserved.
 */
const fs_1 = require("fs");
const bitgo_1 = require("bitgo");
require("dotenv/config");
const esAccessToken = process.env.BITGO_EXTERNAL_SIGNER_ACCESS_TOKEN;
const esWalletIDs = process.env.BITGO_EXTERNAL_SIGNER_WALLET_IDS; // example: "{"tbtc":[{"walletId":"xxx","walletPassword":"xxx","secret":"xxx"}],"hteth":["walletId":"xxx","walletPassword":"xxx"]}"
const esWalletWithPrv = process.env.BITGO_EXTERNAL_SIGNER_WALLET_IDS_WITH_PRV; // example: "[{"walletId":"xxx","encryptedPrv":"xxx"}]"
// TODO: set env to 'test' or 'prod'
const bg = new bitgo_1.BitGo({ env: process.env.BITGO_EXTERNAL_SIGNER_ENV ?? 'test' });
// TODO: set your access token here
const accessToken = esAccessToken || '';
// TODO: set your coin type and wallet ids here e.g.
const walletIds = esWalletIDs ? JSON.parse(esWalletIDs) : {};
// {
// tbtc: ['61f039aad587c2000745c687373e0111', '6225b081cd291300071fed36b1362222'],
// tbtc: [{
// walletId: '<WALLET_ID>',
// walletPassword: '<WALLET_PASSWORD>',
// secret: 'xprv...',
// }],
// gteth: ['61fb21819c54dd000755f8de3a18e333'],
// };
// TODO: set walletId and encryptedPrv here e.g.
const walletWithPrv = esWalletWithPrv ? JSON.parse(esWalletWithPrv) : [];
// [
//   {
//     walletId: '<WALLET_ID>',
//     encryptedPrv: '<ENCRYPTED_PRV>',
//   },
// ];
async function fetchKeys(ids, token, accessToken) {
    bg.authenticateWithAccessToken({ accessToken: token });
    // get the encrypted user privKey for each walletId and store in the JSON output
    const output = {};
    for (const [coinName, credentials] of Object.entries(ids)) {
        const coin = bg.coin(coinName);
        for (const credential of credentials) {
            const id = typeof credential === 'string' ? credential : credential.walletId;
            const wallet = await coin.wallets().get({ id });
            const userKeyId = wallet.keyIds()[0];
            const keychain = await coin.keychains().get({ id: userKeyId });
            if (keychain.encryptedPrv === undefined) {
                if (typeof credential === 'object') {
                    const encryptedPrv = bg.encrypt({ password: credential.walletPassword, input: credential.secret });
                    output[id] = encryptedPrv;
                }
                else {
                    console.warn(`could not find a ${coinName} encrypted user private key for wallet id ${id}, skipping`);
                    continue;
                }
            }
            else {
                output[id] = keychain.encryptedPrv;
            }
        }
    }
    for (const { walletId, encryptedPrv } of walletWithPrv) {
        output[walletId] = encryptedPrv;
    }
    const data = JSON.stringify(output, null, '\t');
    const fileName = 'encryptedPrivKeys.json';
    (0, fs_1.writeFile)(fileName, data, (err) => {
        if (err) {
            throw err;
        }
        console.log(`Wallet IDs and encrypted private keys saved to ${fileName}`);
    });
    return Promise.resolve(output);
}
exports.fetchKeys = fetchKeys;
fetchKeys(walletIds, accessToken).catch((e) => console.error(e));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2hFbmNyeXB0ZWRQcml2S2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mZXRjaEVuY3J5cHRlZFByaXZLZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsMkJBQStCO0FBQy9CLGlDQUErQztBQUMvQyx5QkFBdUI7QUFxQnZCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUM7QUFDckUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLG1JQUFtSTtBQUNyTSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsdURBQXVEO0FBRXRJLG9DQUFvQztBQUNwQyxNQUFNLEVBQUUsR0FBRyxJQUFJLGFBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUE2QyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFFcEcsbUNBQW1DO0FBQ25DLE1BQU0sV0FBVyxHQUFHLGFBQWEsSUFBSSxFQUFFLENBQUM7QUFFeEMsb0RBQW9EO0FBQ3BELE1BQU0sU0FBUyxHQUFjLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hFLElBQUk7QUFDSixrRkFBa0Y7QUFDbEYsV0FBVztBQUNYLDJCQUEyQjtBQUMzQix1Q0FBdUM7QUFDdkMscUJBQXFCO0FBQ3JCLE1BQU07QUFDTiwrQ0FBK0M7QUFDL0MsS0FBSztBQUVMLGdEQUFnRDtBQUNoRCxNQUFNLGFBQWEsR0FBa0IsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDeEYsSUFBSTtBQUNKLE1BQU07QUFDTiwrQkFBK0I7QUFDL0IsdUNBQXVDO0FBQ3ZDLE9BQU87QUFDUCxLQUFLO0FBRUUsS0FBSyxVQUFVLFNBQVMsQ0FBQyxHQUFjLEVBQUUsS0FBYSxFQUFFLFdBQW9CO0lBQ2pGLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXZELGdGQUFnRjtJQUNoRixNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7SUFDMUIsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekQsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtZQUNwQyxNQUFNLEVBQUUsR0FBRyxPQUFPLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM3RSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUUvRCxJQUFJLFFBQVEsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO2dCQUN2QyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtvQkFDbEMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDbkcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQztpQkFDM0I7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsUUFBUSw2Q0FBNkMsRUFBRSxZQUFZLENBQUMsQ0FBQztvQkFDdEcsU0FBUztpQkFDVjthQUNGO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO2FBQ3BDO1NBQ0Y7S0FDRjtJQUVELEtBQUssTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxhQUFhLEVBQUU7UUFDdEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFlBQVksQ0FBQztLQUNqQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQztJQUMxQyxJQUFBLGNBQVMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxHQUFHLEVBQUU7WUFDUCxNQUFNLEdBQUcsQ0FBQztTQUNYO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBekNELDhCQXlDQztBQUVELFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgdG9vbCB3aWxsIGhlbHAgeW91IGNyZWF0ZXMgYSBwcml2YXRlIGtleSBKU09OIGZpbGUgdG8gYmUgdXNlZCB3aXRoIHRoZSBleHRlcm5hbCBzaW5naW5nIG1vZGUgZmVhdHVyZS5cbiAqIEl0IGNyZWF0ZXMgYSBKU09OIGZpbGUgY29udGFpbmluZyBhIGxpc3Qgb2Ygd2FsbGV0IElEcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBlbmNyeXB0ZWQgdXNlciBwcml2YXRlIGtleXMuXG4gKlxuICogVG8gcnVuIHRoaXMgZmlsZSwgdXNlIHRoZSBjb21tYW5kOlxuICogYHlhcm4gdHMtbm9kZSA8cGF0aC90by9mZXRjaEVuY3J5cHRlZFByaXZLZXlzLnRzPmBcbiAqXG4gKiBDb3B5cmlnaHQgMjAyMiwgQml0R28sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IEJpdEdvLCBFbnZpcm9ubWVudE5hbWUgfSBmcm9tICdiaXRnbyc7XG5pbXBvcnQgJ2RvdGVudi9jb25maWcnO1xuXG50eXBlIE91dHB1dCA9IHtcbiAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xufTtcblxudHlwZSBDcmVkZW50aWFscyA9IHtcbiAgd2FsbGV0SWQ6IHN0cmluZzsgLy8gSWQgb2YgdGhlIEJpdEdvIHdhbGxldC5cbiAgd2FsbGV0UGFzc3dvcmQ6IHN0cmluZzsgLy8gUGFzc3dvcmQgdXNlZCBmb3IgdGhlIHdhbGxldC5cbiAgc2VjcmV0OiBzdHJpbmc7IC8vIHhwcnYgb2YgdXNlciBrZXkgb3IgYmFja3VwIGtleS5cbn07XG5cbnR5cGUgV2FsbGV0SWRzID0ge1xuICBba2V5OiBzdHJpbmddOiAoc3RyaW5nIHwgQ3JlZGVudGlhbHMpW107XG59O1xuXG50eXBlIFdhbGxldFdpdGhQcnYgPSBBcnJheTx7XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIGVuY3J5cHRlZFBydjogc3RyaW5nO1xufT47XG5cbmNvbnN0IGVzQWNjZXNzVG9rZW4gPSBwcm9jZXNzLmVudi5CSVRHT19FWFRFUk5BTF9TSUdORVJfQUNDRVNTX1RPS0VOO1xuY29uc3QgZXNXYWxsZXRJRHMgPSBwcm9jZXNzLmVudi5CSVRHT19FWFRFUk5BTF9TSUdORVJfV0FMTEVUX0lEUzsgLy8gZXhhbXBsZTogXCJ7XCJ0YnRjXCI6W3tcIndhbGxldElkXCI6XCJ4eHhcIixcIndhbGxldFBhc3N3b3JkXCI6XCJ4eHhcIixcInNlY3JldFwiOlwieHh4XCJ9XSxcImh0ZXRoXCI6W1wid2FsbGV0SWRcIjpcInh4eFwiLFwid2FsbGV0UGFzc3dvcmRcIjpcInh4eFwiXX1cIlxuY29uc3QgZXNXYWxsZXRXaXRoUHJ2ID0gcHJvY2Vzcy5lbnYuQklUR09fRVhURVJOQUxfU0lHTkVSX1dBTExFVF9JRFNfV0lUSF9QUlY7IC8vIGV4YW1wbGU6IFwiW3tcIndhbGxldElkXCI6XCJ4eHhcIixcImVuY3J5cHRlZFBydlwiOlwieHh4XCJ9XVwiXG5cbi8vIFRPRE86IHNldCBlbnYgdG8gJ3Rlc3QnIG9yICdwcm9kJ1xuY29uc3QgYmcgPSBuZXcgQml0R28oeyBlbnY6IChwcm9jZXNzLmVudi5CSVRHT19FWFRFUk5BTF9TSUdORVJfRU5WIGFzIEVudmlyb25tZW50TmFtZSkgPz8gJ3Rlc3QnIH0pO1xuXG4vLyBUT0RPOiBzZXQgeW91ciBhY2Nlc3MgdG9rZW4gaGVyZVxuY29uc3QgYWNjZXNzVG9rZW4gPSBlc0FjY2Vzc1Rva2VuIHx8ICcnO1xuXG4vLyBUT0RPOiBzZXQgeW91ciBjb2luIHR5cGUgYW5kIHdhbGxldCBpZHMgaGVyZSBlLmcuXG5jb25zdCB3YWxsZXRJZHM6IFdhbGxldElkcyA9IGVzV2FsbGV0SURzID8gSlNPTi5wYXJzZShlc1dhbGxldElEcykgOiB7fTtcbi8vIHtcbi8vIHRidGM6IFsnNjFmMDM5YWFkNTg3YzIwMDA3NDVjNjg3MzczZTAxMTEnLCAnNjIyNWIwODFjZDI5MTMwMDA3MWZlZDM2YjEzNjIyMjInXSxcbi8vIHRidGM6IFt7XG4vLyB3YWxsZXRJZDogJzxXQUxMRVRfSUQ+Jyxcbi8vIHdhbGxldFBhc3N3b3JkOiAnPFdBTExFVF9QQVNTV09SRD4nLFxuLy8gc2VjcmV0OiAneHBydi4uLicsXG4vLyB9XSxcbi8vIGd0ZXRoOiBbJzYxZmIyMTgxOWM1NGRkMDAwNzU1ZjhkZTNhMThlMzMzJ10sXG4vLyB9O1xuXG4vLyBUT0RPOiBzZXQgd2FsbGV0SWQgYW5kIGVuY3J5cHRlZFBydiBoZXJlIGUuZy5cbmNvbnN0IHdhbGxldFdpdGhQcnY6IFdhbGxldFdpdGhQcnYgPSBlc1dhbGxldFdpdGhQcnYgPyBKU09OLnBhcnNlKGVzV2FsbGV0V2l0aFBydikgOiBbXTtcbi8vIFtcbi8vICAge1xuLy8gICAgIHdhbGxldElkOiAnPFdBTExFVF9JRD4nLFxuLy8gICAgIGVuY3J5cHRlZFBydjogJzxFTkNSWVBURURfUFJWPicsXG4vLyAgIH0sXG4vLyBdO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hLZXlzKGlkczogV2FsbGV0SWRzLCB0b2tlbjogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBiZy5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogdG9rZW4gfSk7XG5cbiAgLy8gZ2V0IHRoZSBlbmNyeXB0ZWQgdXNlciBwcml2S2V5IGZvciBlYWNoIHdhbGxldElkIGFuZCBzdG9yZSBpbiB0aGUgSlNPTiBvdXRwdXRcbiAgY29uc3Qgb3V0cHV0OiBPdXRwdXQgPSB7fTtcbiAgZm9yIChjb25zdCBbY29pbk5hbWUsIGNyZWRlbnRpYWxzXSBvZiBPYmplY3QuZW50cmllcyhpZHMpKSB7XG4gICAgY29uc3QgY29pbiA9IGJnLmNvaW4oY29pbk5hbWUpO1xuICAgIGZvciAoY29uc3QgY3JlZGVudGlhbCBvZiBjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgaWQgPSB0eXBlb2YgY3JlZGVudGlhbCA9PT0gJ3N0cmluZycgPyBjcmVkZW50aWFsIDogY3JlZGVudGlhbC53YWxsZXRJZDtcbiAgICAgIGNvbnN0IHdhbGxldCA9IGF3YWl0IGNvaW4ud2FsbGV0cygpLmdldCh7IGlkIH0pO1xuICAgICAgY29uc3QgdXNlcktleUlkID0gd2FsbGV0LmtleUlkcygpWzBdO1xuICAgICAgY29uc3Qga2V5Y2hhaW4gPSBhd2FpdCBjb2luLmtleWNoYWlucygpLmdldCh7IGlkOiB1c2VyS2V5SWQgfSk7XG5cbiAgICAgIGlmIChrZXljaGFpbi5lbmNyeXB0ZWRQcnYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNyZWRlbnRpYWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gYmcuZW5jcnlwdCh7IHBhc3N3b3JkOiBjcmVkZW50aWFsLndhbGxldFBhc3N3b3JkLCBpbnB1dDogY3JlZGVudGlhbC5zZWNyZXQgfSk7XG4gICAgICAgICAgb3V0cHV0W2lkXSA9IGVuY3J5cHRlZFBydjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYGNvdWxkIG5vdCBmaW5kIGEgJHtjb2luTmFtZX0gZW5jcnlwdGVkIHVzZXIgcHJpdmF0ZSBrZXkgZm9yIHdhbGxldCBpZCAke2lkfSwgc2tpcHBpbmdgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0W2lkXSA9IGtleWNoYWluLmVuY3J5cHRlZFBydjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHsgd2FsbGV0SWQsIGVuY3J5cHRlZFBydiB9IG9mIHdhbGxldFdpdGhQcnYpIHtcbiAgICBvdXRwdXRbd2FsbGV0SWRdID0gZW5jcnlwdGVkUHJ2O1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KG91dHB1dCwgbnVsbCwgJ1xcdCcpO1xuICBjb25zdCBmaWxlTmFtZSA9ICdlbmNyeXB0ZWRQcml2S2V5cy5qc29uJztcbiAgd3JpdGVGaWxlKGZpbGVOYW1lLCBkYXRhLCAoZXJyKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgV2FsbGV0IElEcyBhbmQgZW5jcnlwdGVkIHByaXZhdGUga2V5cyBzYXZlZCB0byAke2ZpbGVOYW1lfWApO1xuICB9KTtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG91dHB1dCk7XG59XG5cbmZldGNoS2V5cyh3YWxsZXRJZHMsIGFjY2Vzc1Rva2VuKS5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcihlKSk7XG4iXX0=

Выполнить команду


Для локальной разработки. Не используйте в интернете!