UNPKG

bitgo

Version:
72 lines 14.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.nockSendSignatureShare = nockSendSignatureShare; exports.nockGetTxRequest = nockGetTxRequest; exports.nockGetEnterprise = nockGetEnterprise; exports.nockGetChallenges = nockGetChallenges; exports.nockGetChallenge = nockGetChallenge; exports.nockGetSigningKey = nockGetSigningKey; exports.createWalletSignatures = createWalletSignatures; const openpgp = require("openpgp"); const sdk_core_1 = require("@bitgo/sdk-core"); const common_1 = require("../internal/tssUtils/common"); const nock = require("nock"); async function nockSendSignatureShare(params, status = 200) { const { signatureShare, signerShare, tssType } = params; const transactions = (0, common_1.getRoute)(tssType); const requestBody = signerShare === undefined ? { signatureShare } : { signatureShare, signerShare }; return nock('https://bitgo.fakeurl') .post(`/api/v2/wallet/${params.walletId}/txrequests/${params.txRequestId + transactions}/signatureshares`, requestBody) .reply(status, status === 200 ? (params.response ? params.response : params.signatureShare) : { error: 'some error' }); } async function nockGetTxRequest(params) { const n = nock('https://bitgo.fakeurl').get(`/api/v2/wallet/${params.walletId}/txrequests?txRequestIds=${params.txRequestId}&latest=true`); if (params.times !== undefined) { return n.times(params.times).reply(200, params.response); } return n.reply(200, params.response); } async function nockGetEnterprise(params) { const n = nock('https://bitgo.fakeurl').get(`/api/v1/enterprise/${params.enterpriseId}`); if (params.times !== undefined) { return n.times(params.times).reply(200, params.response); } return n.reply(200, params.response); } async function nockGetChallenges(params) { return nock('https://bitgo.fakeurl') .get('/api/v2/wallet/' + params.walletId + '/challenges') .reply(200, params.response); } async function nockGetChallenge(params) { const n = nock('https://bitgo.fakeurl').post('/api/v2/wallet/' + params.walletId + '/txrequests/' + params.txRequestId + params.addendum + '/challenge'); if (params.times !== undefined) { return n.times(params.times).reply(200, params.response); } return n.reply(200, params.response); } async function nockGetSigningKey(params) { const path = `/api/v2/enterprise/${params.enterpriseId}/user/${params.userId}/signingkey`; const n = nock('https://bitgo.fakeurl').get(path); if (params.times !== undefined) { return n.times(params.times).reply(200, params.response); } return n.reply(200, params.response); } async function createWalletSignatures(privateKeyArmored, publicKeyToCertArmoredUser, publicKeyToCertArmoredBackup, notations) { const userWalletSigArmored = await (0, sdk_core_1.createSharedDataProof)(privateKeyArmored, publicKeyToCertArmoredUser, notations); const backupWalletSigArmored = await (0, sdk_core_1.createSharedDataProof)(privateKeyArmored, publicKeyToCertArmoredBackup, notations); const certsUserKey = await openpgp.readKey({ armoredKey: userWalletSigArmored }); const certsBackupKey = await openpgp.readKey({ armoredKey: backupWalletSigArmored }); const mergedWalletKeys = new openpgp.PacketList(); certsUserKey.toPacketList().forEach((packet) => mergedWalletKeys.push(packet)); certsBackupKey.toPacketList().forEach((packet) => mergedWalletKeys.push(packet)); // the underlying function only requires two arguments but the according .d.ts file for openpgp has the further // arguments marked as mandatory as well. // Once the following PR has been merged and released we no longer need the ts-ignore: // https://github.com/openpgpjs/openpgpjs/pull/1576 // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return openpgp.armor(openpgp.enums.armor.publicKey, mergedWalletKeys.write()); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdjIvdW5pdC90c3MvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLHdEQXdCQztBQUVELDRDQWFDO0FBQ0QsOENBVUM7QUFFRCw4Q0FJQztBQUVELDRDQWNDO0FBRUQsOENBWUM7QUFDRCx3REEyQkM7QUF2SEQsbUNBQW1DO0FBQ25DLDhDQUE4RTtBQUM5RSx3REFBdUQ7QUFDdkQsNkJBQThCO0FBRXZCLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsTUFPQyxFQUNELE1BQU0sR0FBRyxHQUFHO0lBRVosTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3hELE1BQU0sWUFBWSxHQUFHLElBQUEsaUJBQVEsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxNQUFNLFdBQVcsR0FBRyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUVyRyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztTQUNqQyxJQUFJLENBQ0gsa0JBQWtCLE1BQU0sQ0FBQyxRQUFRLGVBQWUsTUFBTSxDQUFDLFdBQVcsR0FBRyxZQUFZLGtCQUFrQixFQUNuRyxXQUFXLENBQ1o7U0FDQSxLQUFLLENBQ0osTUFBTSxFQUNOLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FDdkcsQ0FBQztBQUNOLENBQUM7QUFFTSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsTUFLdEM7SUFD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QztJQUU1QyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sSUFBQSxnQ0FBcUIsRUFBQyxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNuSCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sSUFBQSxnQ0FBcUIsRUFDeEQsaUJBQWlCLEVBQ2pCLDRCQUE0QixFQUM1QixTQUFTLENBQ1YsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDakYsTUFBTSxjQUFjLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUVyRixNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9FLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWpGLCtHQUErRztJQUMvRyx5Q0FBeUM7SUFDekMsc0ZBQXNGO0lBQ3RGLG1EQUFtRDtJQUNuRCw2REFBNkQ7SUFDN0QsYUFBYTtJQUNiLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3BlbnBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IGNyZWF0ZVNoYXJlZERhdGFQcm9vZiwgU2lnbmF0dXJlU2hhcmVSZWNvcmQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgZ2V0Um91dGUgfSBmcm9tICcuLi9pbnRlcm5hbC90c3NVdGlscy9jb21tb24nO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub2NrU2VuZFNpZ25hdHVyZVNoYXJlKFxuICBwYXJhbXM6IHtcbiAgICB3YWxsZXRJZDogc3RyaW5nO1xuICAgIHR4UmVxdWVzdElkOiBzdHJpbmc7XG4gICAgc2lnbmF0dXJlU2hhcmU6IGFueTtcbiAgICBzaWduZXJTaGFyZT86IHN0cmluZztcbiAgICByZXNwb25zZT86IFNpZ25hdHVyZVNoYXJlUmVjb3JkO1xuICAgIHRzc1R5cGU/OiAnZWNkc2EnIHwgJ2VkZHNhJztcbiAgfSxcbiAgc3RhdHVzID0gMjAwXG4pOiBQcm9taXNlPG5vY2suU2NvcGU+IHtcbiAgY29uc3QgeyBzaWduYXR1cmVTaGFyZSwgc2lnbmVyU2hhcmUsIHRzc1R5cGUgfSA9IHBhcmFtcztcbiAgY29uc3QgdHJhbnNhY3Rpb25zID0gZ2V0Um91dGUodHNzVHlwZSk7XG4gIGNvbnN0IHJlcXVlc3RCb2R5ID0gc2lnbmVyU2hhcmUgPT09IHVuZGVmaW5lZCA/IHsgc2lnbmF0dXJlU2hhcmUgfSA6IHsgc2lnbmF0dXJlU2hhcmUsIHNpZ25lclNoYXJlIH07XG5cbiAgcmV0dXJuIG5vY2soJ2h0dHBzOi8vYml0Z28uZmFrZXVybCcpXG4gICAgLnBvc3QoXG4gICAgICBgL2FwaS92Mi93YWxsZXQvJHtwYXJhbXMud2FsbGV0SWR9L3R4cmVxdWVzdHMvJHtwYXJhbXMudHhSZXF1ZXN0SWQgKyB0cmFuc2FjdGlvbnN9L3NpZ25hdHVyZXNoYXJlc2AsXG4gICAgICByZXF1ZXN0Qm9keVxuICAgIClcbiAgICAucmVwbHkoXG4gICAgICBzdGF0dXMsXG4gICAgICBzdGF0dXMgPT09IDIwMCA/IChwYXJhbXMucmVzcG9uc2UgPyBwYXJhbXMucmVzcG9uc2UgOiBwYXJhbXMuc2lnbmF0dXJlU2hhcmUpIDogeyBlcnJvcjogJ3NvbWUgZXJyb3InIH1cbiAgICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9ja0dldFR4UmVxdWVzdChwYXJhbXM6IHtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZztcbiAgcmVzcG9uc2U6IGFueTtcbiAgdGltZXM/OiBudW1iZXI7XG59KTogUHJvbWlzZTxub2NrLlNjb3BlPiB7XG4gIGNvbnN0IG4gPSBub2NrKCdodHRwczovL2JpdGdvLmZha2V1cmwnKS5nZXQoXG4gICAgYC9hcGkvdjIvd2FsbGV0LyR7cGFyYW1zLndhbGxldElkfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke3BhcmFtcy50eFJlcXVlc3RJZH0mbGF0ZXN0PXRydWVgXG4gICk7XG4gIGlmIChwYXJhbXMudGltZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuLnRpbWVzKHBhcmFtcy50aW1lcykucmVwbHkoMjAwLCBwYXJhbXMucmVzcG9uc2UpO1xuICB9XG4gIHJldHVybiBuLnJlcGx5KDIwMCwgcGFyYW1zLnJlc3BvbnNlKTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub2NrR2V0RW50ZXJwcmlzZShwYXJhbXM6IHtcbiAgZW50ZXJwcmlzZUlkOiBzdHJpbmc7XG4gIHJlc3BvbnNlOiBhbnk7XG4gIHRpbWVzPzogbnVtYmVyO1xufSk6IFByb21pc2U8bm9jay5TY29wZT4ge1xuICBjb25zdCBuID0gbm9jaygnaHR0cHM6Ly9iaXRnby5mYWtldXJsJykuZ2V0KGAvYXBpL3YxL2VudGVycHJpc2UvJHtwYXJhbXMuZW50ZXJwcmlzZUlkfWApO1xuICBpZiAocGFyYW1zLnRpbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbi50aW1lcyhwYXJhbXMudGltZXMpLnJlcGx5KDIwMCwgcGFyYW1zLnJlc3BvbnNlKTtcbiAgfVxuICByZXR1cm4gbi5yZXBseSgyMDAsIHBhcmFtcy5yZXNwb25zZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub2NrR2V0Q2hhbGxlbmdlcyhwYXJhbXM6IHsgd2FsbGV0SWQ6IHN0cmluZzsgcmVzcG9uc2U6IGFueSB9KTogUHJvbWlzZTxub2NrLlNjb3BlPiB7XG4gIHJldHVybiBub2NrKCdodHRwczovL2JpdGdvLmZha2V1cmwnKVxuICAgIC5nZXQoJy9hcGkvdjIvd2FsbGV0LycgKyBwYXJhbXMud2FsbGV0SWQgKyAnL2NoYWxsZW5nZXMnKVxuICAgIC5yZXBseSgyMDAsIHBhcmFtcy5yZXNwb25zZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub2NrR2V0Q2hhbGxlbmdlKHBhcmFtczoge1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICB0eFJlcXVlc3RJZDogc3RyaW5nO1xuICBhZGRlbmR1bTogc3RyaW5nO1xuICByZXNwb25zZTogYW55O1xuICB0aW1lcz86IG51bWJlcjtcbn0pOiBQcm9taXNlPG5vY2suU2NvcGU+IHtcbiAgY29uc3QgbiA9IG5vY2soJ2h0dHBzOi8vYml0Z28uZmFrZXVybCcpLnBvc3QoXG4gICAgJy9hcGkvdjIvd2FsbGV0LycgKyBwYXJhbXMud2FsbGV0SWQgKyAnL3R4cmVxdWVzdHMvJyArIHBhcmFtcy50eFJlcXVlc3RJZCArIHBhcmFtcy5hZGRlbmR1bSArICcvY2hhbGxlbmdlJ1xuICApO1xuICBpZiAocGFyYW1zLnRpbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbi50aW1lcyhwYXJhbXMudGltZXMpLnJlcGx5KDIwMCwgcGFyYW1zLnJlc3BvbnNlKTtcbiAgfVxuICByZXR1cm4gbi5yZXBseSgyMDAsIHBhcmFtcy5yZXNwb25zZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub2NrR2V0U2lnbmluZ0tleShwYXJhbXM6IHtcbiAgZW50ZXJwcmlzZUlkOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICByZXNwb25zZTogYW55O1xuICB0aW1lcz86IG51bWJlcjtcbn0pOiBQcm9taXNlPG5vY2suU2NvcGU+IHtcbiAgY29uc3QgcGF0aCA9IGAvYXBpL3YyL2VudGVycHJpc2UvJHtwYXJhbXMuZW50ZXJwcmlzZUlkfS91c2VyLyR7cGFyYW1zLnVzZXJJZH0vc2lnbmluZ2tleWA7XG4gIGNvbnN0IG4gPSBub2NrKCdodHRwczovL2JpdGdvLmZha2V1cmwnKS5nZXQocGF0aCk7XG4gIGlmIChwYXJhbXMudGltZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuLnRpbWVzKHBhcmFtcy50aW1lcykucmVwbHkoMjAwLCBwYXJhbXMucmVzcG9uc2UpO1xuICB9XG4gIHJldHVybiBuLnJlcGx5KDIwMCwgcGFyYW1zLnJlc3BvbnNlKTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVXYWxsZXRTaWduYXR1cmVzKFxuICBwcml2YXRlS2V5QXJtb3JlZDogc3RyaW5nLFxuICBwdWJsaWNLZXlUb0NlcnRBcm1vcmVkVXNlcjogc3RyaW5nLFxuICBwdWJsaWNLZXlUb0NlcnRBcm1vcmVkQmFja3VwOiBzdHJpbmcsXG4gIG5vdGF0aW9uczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB1c2VyV2FsbGV0U2lnQXJtb3JlZCA9IGF3YWl0IGNyZWF0ZVNoYXJlZERhdGFQcm9vZihwcml2YXRlS2V5QXJtb3JlZCwgcHVibGljS2V5VG9DZXJ0QXJtb3JlZFVzZXIsIG5vdGF0aW9ucyk7XG4gIGNvbnN0IGJhY2t1cFdhbGxldFNpZ0FybW9yZWQgPSBhd2FpdCBjcmVhdGVTaGFyZWREYXRhUHJvb2YoXG4gICAgcHJpdmF0ZUtleUFybW9yZWQsXG4gICAgcHVibGljS2V5VG9DZXJ0QXJtb3JlZEJhY2t1cCxcbiAgICBub3RhdGlvbnNcbiAgKTtcblxuICBjb25zdCBjZXJ0c1VzZXJLZXkgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiB1c2VyV2FsbGV0U2lnQXJtb3JlZCB9KTtcbiAgY29uc3QgY2VydHNCYWNrdXBLZXkgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiYWNrdXBXYWxsZXRTaWdBcm1vcmVkIH0pO1xuXG4gIGNvbnN0IG1lcmdlZFdhbGxldEtleXMgPSBuZXcgb3BlbnBncC5QYWNrZXRMaXN0KCk7XG4gIGNlcnRzVXNlcktleS50b1BhY2tldExpc3QoKS5mb3JFYWNoKChwYWNrZXQpID0+IG1lcmdlZFdhbGxldEtleXMucHVzaChwYWNrZXQpKTtcbiAgY2VydHNCYWNrdXBLZXkudG9QYWNrZXRMaXN0KCkuZm9yRWFjaCgocGFja2V0KSA9PiBtZXJnZWRXYWxsZXRLZXlzLnB1c2gocGFja2V0KSk7XG5cbiAgLy8gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb25seSByZXF1aXJlcyB0d28gYXJndW1lbnRzIGJ1dCB0aGUgYWNjb3JkaW5nIC5kLnRzIGZpbGUgZm9yIG9wZW5wZ3AgaGFzIHRoZSBmdXJ0aGVyXG4gIC8vIGFyZ3VtZW50cyBtYXJrZWQgYXMgbWFuZGF0b3J5IGFzIHdlbGwuXG4gIC8vIE9uY2UgdGhlIGZvbGxvd2luZyBQUiBoYXMgYmVlbiBtZXJnZWQgYW5kIHJlbGVhc2VkIHdlIG5vIGxvbmdlciBuZWVkIHRoZSB0cy1pZ25vcmU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVucGdwanMvb3BlbnBncGpzL3B1bGwvMTU3NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIG9wZW5wZ3AuYXJtb3Iob3BlbnBncC5lbnVtcy5hcm1vci5wdWJsaWNLZXksIG1lcmdlZFdhbGxldEtleXMud3JpdGUoKSk7XG59XG4iXX0=