Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion masterBitgoExpress.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"openapi": "3.0.3",
"info": {
"title": "@bitgo/master-bitgo-express",
"version": "1.0.0",
"version": "0.0.0-semantically-released",
"description": "BitGo Enclaved Express - Secure enclave for BitGo signing operations with mTLS"
},
"paths": {
Expand Down Expand Up @@ -522,6 +522,26 @@
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
Expand Down
96 changes: 80 additions & 16 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@bitgo/enclaved-bitgo-express",
"version": "1.0.0",
"version": "0.0.0-semantically-released",
"description": "BitGo Enclaved Express - Secure enclave for BitGo signing operations with mTLS",
"main": "./dist/src/index.js",
"types": "./dist/src/index.d.ts",
Expand All @@ -13,33 +13,97 @@
"test": "mocha --require ts-node/register 'src/**/__tests__/**/*.test.ts'",
"test:watch": "mocha --require ts-node/register --watch 'src/**/__tests__/**/*.test.ts'",
"test:coverage": "nyc mocha --require ts-node/register 'src/**/__tests__/**/*.test.ts'",
"lint": "eslint --quiet .",
"lint:fix": "eslint --quiet . --fix",
"lint": "eslint --quiet --ignore-pattern scripts/bump-version.ts .",
"lint:fix": "eslint --quiet --ignore-pattern scripts/bump-version.ts . --fix",
"generate-test-ssl": "openssl req -x509 -newkey rsa:2048 -keyout test-ssl-key.pem -out test-ssl-cert.pem -days 365 -nodes -subj '/CN=localhost'",
"generate:openapi:masterExpress": "npx @api-ts/openapi-generator --name @bitgo/master-bitgo-express ./src/api/master/routers/index.ts > masterBitgoExpress.json",
"container:build": "podman build -t bitgo-onprem-express ."
"container:build": "podman build -t bitgo-onprem-express .",
"bump-versions": "ts-node scripts/bump-version.ts"
},
"dependencies": {
"@api-ts/io-ts-http": "^3.2.1",
"@api-ts/openapi-generator": "^5.7.0",
"@api-ts/response": "^2.1.0",
"@api-ts/superagent-wrapper": "^1.3.3",
"@api-ts/typed-express-router": "^1.1.13",
"@bitgo-beta/sdk-lib-mpc": "8.2.1-alpha.291",
"@bitgo/abstract-utxo": "^9.21.4",
"@bitgo/sdk-coin-ada": "^4.11.5",
"@bitgo/sdk-coin-dot": "^4.3.5",
"@bitgo/sdk-coin-near": "^2.7.0",
"@bitgo/sdk-coin-sol": "^4.12.5",
"@bitgo/sdk-coin-sui": "^5.15.5",
"@bitgo/sdk-core": "^35.3.0",
"@bitgo/statics": "^54.6.0",
"@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1022",
"@bitgo-beta/abstract-utxo": "1.1.1-beta.1263",
"@bitgo-beta/abstract-eth": "1.0.2-beta.1260",
"@bitgo-beta/sdk-coin-ada": "2.3.14-beta.1028",
"@bitgo-beta/sdk-coin-algo": "1.3.19-beta.1028",
"@bitgo-beta/sdk-coin-apt": "1.0.1-beta.470",
"@bitgo-beta/sdk-coin-arbeth": "1.0.1-beta.884",
"@bitgo-beta/sdk-coin-asi": "1.0.1-beta.117",
"@bitgo-beta/sdk-coin-atom": "3.1.2-beta.1027",
"@bitgo-beta/sdk-coin-avaxc": "1.1.1-beta.1255",
"@bitgo-beta/sdk-coin-avaxp": "3.5.10-beta.1027",
"@bitgo-beta/sdk-coin-baby": "1.0.1-beta.370",
"@bitgo-beta/sdk-coin-bch": "1.1.1-beta.1256",
"@bitgo-beta/sdk-coin-bcha": "1.1.1-beta.1255",
"@bitgo-beta/sdk-coin-bera": "1.0.1-beta.883",
"@bitgo-beta/sdk-coin-bld": "1.0.1-beta.989",
"@bitgo-beta/sdk-coin-bsc": "1.0.1-beta.1255",
"@bitgo-beta/sdk-coin-bsv": "1.1.1-beta.1255",
"@bitgo-beta/sdk-coin-btc": "1.0.2-beta.1256",
"@bitgo-beta/sdk-coin-btg": "1.1.1-beta.1255",
"@bitgo-beta/sdk-coin-celo": "1.1.1-beta.1254",
"@bitgo-beta/sdk-coin-coredao": "1.0.0-beta.462",
"@bitgo-beta/sdk-coin-coreum": "1.0.1-beta.871",
"@bitgo-beta/sdk-coin-cronos": "1.0.1-beta.163",
"@bitgo-beta/sdk-coin-cspr": "1.2.19-beta.1027",
"@bitgo-beta/sdk-coin-dash": "1.1.1-beta.1256",
"@bitgo-beta/sdk-coin-doge": "1.0.2-beta.1256",
"@bitgo-beta/sdk-coin-dot": "2.2.8-beta.1027",
"@bitgo-beta/sdk-coin-eos": "1.3.19-beta.1026",
"@bitgo-beta/sdk-coin-etc": "1.0.2-beta.1254",
"@bitgo-beta/sdk-coin-eth": "4.4.1-beta.1025",
"@bitgo-beta/sdk-coin-ethw": "20.0.76-beta.193",
"@bitgo-beta/sdk-coin-flr": "1.0.1-beta.369",
"@bitgo-beta/sdk-coin-hash": "1.0.1-beta.986",
"@bitgo-beta/sdk-coin-hbar": "1.0.2-beta.1256",
"@bitgo-beta/sdk-coin-icp": "1.0.1-beta.382",
"@bitgo-beta/sdk-coin-initia": "1.1.1-beta.143",
"@bitgo-beta/sdk-coin-injective": "1.1.3-beta.980",
"@bitgo-beta/sdk-coin-islm": "1.0.1-beta.883",
"@bitgo-beta/sdk-coin-ltc": "1.1.1-beta.1256",
"@bitgo-beta/sdk-coin-mon": "1.0.1-beta.198",
"@bitgo-beta/sdk-coin-near": "1.3.19-beta.1025",
"@bitgo-beta/sdk-coin-oas": "1.0.1-beta.464",
"@bitgo-beta/sdk-coin-opeth": "1.0.1-beta.881",
"@bitgo-beta/sdk-coin-osmo": "1.0.1-beta.1010",
"@bitgo-beta/sdk-coin-polygon": "1.0.2-beta.1254",
"@bitgo-beta/sdk-coin-polyx": "1.0.1-beta.227",
"@bitgo-beta/sdk-coin-rbtc": "1.1.1-beta.1254",
"@bitgo-beta/sdk-coin-rune": "1.0.0-beta.494",
"@bitgo-beta/sdk-coin-sei": "1.0.1-beta.982",
"@bitgo-beta/sdk-coin-sgb": "1.1.1-beta.369",
"@bitgo-beta/sdk-coin-sol": "2.4.3-beta.1024",
"@bitgo-beta/sdk-coin-soneium": "1.0.1-beta.178",
"@bitgo-beta/sdk-coin-stt": "1.0.1-beta.187",
"@bitgo-beta/sdk-coin-stx": "1.1.1-beta.1259",
"@bitgo-beta/sdk-coin-sui": "3.0.3-beta.1024",
"@bitgo-beta/sdk-coin-tao": "1.0.0-beta.391",
"@bitgo-beta/sdk-coin-tia": "1.0.0-beta.991",
"@bitgo-beta/sdk-coin-ton": "1.0.1-beta.892",
"@bitgo-beta/sdk-coin-trx": "1.0.2-beta.1258",
"@bitgo-beta/sdk-coin-vet": "1.0.1-beta.142",
"@bitgo-beta/sdk-coin-wemix": "1.0.1-beta.362",
"@bitgo-beta/sdk-coin-world": "1.0.1-beta.188",
"@bitgo-beta/sdk-coin-xdc": "1.0.1-beta.369",
"@bitgo-beta/sdk-coin-xlm": "2.0.5-beta.1024",
"@bitgo-beta/sdk-coin-xrp": "1.1.1-beta.1257",
"@bitgo-beta/sdk-coin-xtz": "1.1.1-beta.1257",
"@bitgo-beta/sdk-coin-zec": "1.1.1-beta.1256",
"@bitgo-beta/sdk-coin-zeta": "1.0.1-beta.947",
"@bitgo-beta/sdk-coin-zketh": "1.0.1-beta.811",
"@bitgo-beta/sdk-core": "8.2.1-beta.1030",
"@bitgo-beta/statics": "15.1.1-beta.1033",
"@bitgo/wasm-miniscript": "2.0.0-beta.7",
"@commitlint/config-conventional": "^19.8.1",
"bitgo": "^48.1.0",
"body-parser": "^1.20.3",
"connect-timeout": "^1.9.0",
"debug": "^3.1.0",
"express": "4.17.3",
"express": "4.21.2",
"io-ts": "2.1.3",
"lodash": "^4.17.20",
"morgan": "^1.9.1",
Expand All @@ -51,7 +115,7 @@
"zod": "^3.25.48"
},
"resolutions": {
"@bitgo/sdk-core": "^35.3.0"
"@bitgo-beta/sdk-core": "8.2.1-beta.1030"
},
"devDependencies": {
"@api-ts/openapi-generator": "^5.7.0",
Expand Down
98 changes: 98 additions & 0 deletions scripts/bump-version.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
export {};

const { writeFileSync, mkdirSync, existsSync } = require('fs');
const path = require('path');
const https = require('https');

/**
* Script purpose: Automatically update @bitgo-beta/ package versions in package.json
* - Reads package.json in current directory
* - Bumps @bitgo-beta/ packages to latest version
* - Overwrites package.json with updated versions
*/

type BitGoBetaPackageName = `@bitgo-beta/${string}`;

function dependencyIsBitGoBetaPackage(dependency: string): dependency is BitGoBetaPackageName {
return dependency.startsWith('@bitgo-beta/');
}

type Tag = {
beta?: string;
latest?: string;
};

type DistTags = {
tags: Tag;
};

const packageJsonPath = path.resolve(process.cwd(), 'package.json');
const packageJson = require(packageJsonPath);
const packageNames: BitGoBetaPackageName[] = Object.keys(packageJson.dependencies).filter(
dependencyIsBitGoBetaPackage,
);

/**
* Fetches distribution tags for a given package from npm registry
*/
const getDistTags = async (packageName: BitGoBetaPackageName): Promise<DistTags> => {
return new Promise((resolve) => {
https.get(
`https://registry.npmjs.org/-/package/${packageName}/dist-tags`,
(res: { on: (arg0: string, arg1: (d: any) => void) => void }) => {
let data = '';
res.on('data', (d) => {
data += d;
});
res.on('end', () => {
const tags = JSON.parse(data) as Tag;
resolve({ tags });
});
},
);
});
};

/**
* Updates package version to latest in package.json
*/
const bumpVersion = async (packageName: BitGoBetaPackageName) => {
const { tags } = await getDistTags(packageName);

// Prefer beta tag if available, otherwise use latest
const next = tags['beta'] || tags['latest'];

if (next) {
packageJson.dependencies[packageName] = next;
console.log(`Upgrading ${packageName} to ${packageJson.dependencies[packageName]}...`);

// Update resolutions if the package is in resolutions
if (packageJson.resolutions && packageJson.resolutions[packageName]) {
packageJson.resolutions[packageName] = next;
console.log(`Updating resolution for ${packageName} to ${next}...`);
}
} else {
console.log(`No suitable version found for ${packageName}, keeping current version`);
}

return;
};

const bumpVersions = async () => {
const bumpPromises = packageNames.map(bumpVersion);
await Promise.all(bumpPromises);

const targetDir = path.join(process.cwd());

// Ensure scripts directory exists
const scriptsDir = path.join(targetDir, 'scripts');
if (!existsSync(scriptsDir)) {
mkdirSync(scriptsDir, { recursive: true });
}

writeFileSync(path.join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2) + '\n');

console.log(`Successfully bumped ${packageJson.name} dependencies`);
};

void bumpVersions();
4 changes: 2 additions & 2 deletions src/__tests__/api/enclaved/ecdsaUtils.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// ECDSA MPCv2 specific imports
import { DklsTypes, DklsComms, DklsDsg } from '@bitgo/sdk-lib-mpc';
import { DklsTypes, DklsComms, DklsDsg } from '@bitgo-beta/sdk-lib-mpc';

import { TxRequest, SignatureShareRecord, SignatureShareType } from '@bitgo/sdk-core';
import { TxRequest, SignatureShareRecord, SignatureShareType } from '@bitgo-beta/sdk-core';

// MPCv2 type definitions
import {
Expand Down
4 changes: 2 additions & 2 deletions src/__tests__/api/enclaved/postMpcV2Key.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import 'should';
import * as request from 'supertest';
import * as sinon from 'sinon';
import * as configModule from '../../../initConfig';
import * as bitgoSdk from '@bitgo/sdk-core';
import * as bitgoSdk from '@bitgo-beta/sdk-core';
import { DklsComms, DklsDkg, DklsTypes } from '@bitgo-beta/sdk-lib-mpc';
import { MPCv2PartiesEnum } from '@bitgo/sdk-core/dist/src/bitgo/utils/tss/ecdsa';
import { MPCv2PartiesEnum } from '@bitgo-beta/sdk-core/dist/src/bitgo/utils/tss/ecdsa';

describe('postMpcV2Key', () => {
let cfg: EnclavedConfig;
Expand Down
13 changes: 2 additions & 11 deletions src/__tests__/api/enclaved/recoveryMultisigTransaction.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ import { AppMode, EnclavedConfig, TlsMode } from '../../../shared/types';
import sinon from 'sinon';
import * as middleware from '../../../shared/middleware';
import { BitGoRequest } from '../../../types/request';
import { BitGo } from 'bitgo';
import { BitGoAPI as BitGo } from '@bitgo-beta/sdk-api';
import * as kmsUtils from '../../../api/enclaved/utils';

describe('UTXO recovery', () => {
let agent: request.SuperAgentTest;
let mockBitgo: BitGo;
let mockRetrieveKmsPrvKey: sinon.SinonStub;
const coin = 'tbtc';
const config: EnclavedConfig = {
Expand All @@ -36,17 +35,9 @@ describe('UTXO recovery', () => {
accessToken: 'test_token',
});

// Create mock BitGo instance
mockBitgo = {
_coinFactory: {},
_useAms: false,
initCoinFactory: sinon.stub(),
coin: bitgo.coin.bind(bitgo), // Use the real coin method from initialized BitGo
} as unknown as BitGo;

// Setup middleware stubs before creating app
sinon.stub(middleware, 'prepareBitGo').callsFake(() => (req, res, next) => {
(req as BitGoRequest<EnclavedConfig>).bitgo = mockBitgo;
(req as BitGoRequest<EnclavedConfig>).bitgo = bitgo;
(req as BitGoRequest<EnclavedConfig>).config = config;
next();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'should';
import nock from 'nock';
import sinon from 'sinon';
import supertest from 'supertest';
import { Utils } from '@bitgo/sdk-coin-sol';
import { Utils } from '@bitgo-beta/sdk-coin-sol';
import * as kmsUtils from '../../../api/enclaved/utils';
import { app as expressApp } from '../../../enclavedApp';
import { AppMode, EnclavedConfig, TlsMode } from '../../../shared/types';
Expand Down
4 changes: 2 additions & 2 deletions src/__tests__/api/enclaved/signMpcTransaction.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import { AppMode, EnclavedConfig, TlsMode } from '../../../shared/types';
import express from 'express';
import * as sinon from 'sinon';
import * as configModule from '../../../initConfig';
import { Ed25519BIP32, Eddsa, SignatureShareType } from '@bitgo/sdk-core';
import { Ed25519BIP32, Eddsa, SignatureShareType } from '@bitgo-beta/sdk-core';
import { TxRequest } from '@bitgo/public-types';

Copilot AI Jul 22, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This import uses '@bitgo/public-types' instead of the beta equivalent. Consider updating to '@bitgo-beta/public-types' if available to maintain consistency with the migration.

Copilot uses AI. Check for mistakes.
import { DklsUtils, DklsDsg, DklsTypes } from '@bitgo/sdk-lib-mpc';
import { DklsUtils, DklsDsg, DklsTypes } from '@bitgo-beta/sdk-lib-mpc';
import assert from 'assert';
import { signBitgoMPCv2Round1, signBitgoMPCv2Round2, signBitgoMPCv2Round3 } from './ecdsaUtils';
import { Hash } from 'crypto';
Expand Down
2 changes: 1 addition & 1 deletion src/__tests__/api/master/accelerate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import * as request from 'supertest';
import nock from 'nock';
import { app as expressApp } from '../../../masterExpressApp';
import { AppMode, MasterExpressConfig, TlsMode } from '../../../shared/types';
import { Environments, Wallet } from '@bitgo/sdk-core';
import { Environments, Wallet } from '@bitgo-beta/sdk-core';

describe('POST /api/:coin/wallet/:walletId/accelerate', () => {
let agent: request.SuperAgentTest;
Expand Down
4 changes: 2 additions & 2 deletions src/__tests__/api/master/consolidate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import * as request from 'supertest';
import nock from 'nock';
import { app as expressApp } from '../../../masterExpressApp';
import { AppMode, MasterExpressConfig, TlsMode } from '../../../shared/types';
import { Environments, Wallet } from '@bitgo/sdk-core';
import { Hteth } from '@bitgo/sdk-coin-eth';
import { Environments, Wallet } from '@bitgo-beta/sdk-core';
import { Hteth } from '@bitgo-beta/sdk-coin-eth';
import * as transactionRequests from '../../../api/master/handlers/transactionRequests';
import * as handlerUtils from '../../../api/master/handlerUtils';

Expand Down
2 changes: 1 addition & 1 deletion src/__tests__/api/master/consolidateUnspents.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import * as request from 'supertest';
import nock from 'nock';
import { app as expressApp } from '../../../masterExpressApp';
import { AppMode, MasterExpressConfig, TlsMode } from '../../../shared/types';
import { Environments, Wallet } from '@bitgo/sdk-core';
import { Environments, Wallet } from '@bitgo-beta/sdk-core';

describe('POST /api/:coin/wallet/:walletId/consolidateunspents', () => {
let agent: request.SuperAgentTest;
Expand Down
Loading