From 810dfbe06f1e1f47f882e5511e70e5b81f66172c Mon Sep 17 00:00:00 2001 From: Manoj Kumar Date: Tue, 28 Jul 2026 10:07:43 +0530 Subject: [PATCH] feat(bitgo): register Pearl in the coin factory Wire the Pearl (Duplex) coin classes from @bitgo/sdk-coin-pearl into the bitgo module so `bitgo.coin('pearl')` and `bitgo.coin('tpearl')` resolve. Completes the BitGoJS onboarding started in #9347 (statics) and #9360 (abstract-utxo + sdk-coin-pearl). Registers in both mechanisms: registerCoinConstructors for eager registration and getCoinConstructor for the lazy lookup. Pearl and Tpearl are imported directly from @bitgo/sdk-coin-pearl rather than through the ./coins barrel. Routing them through the barrel makes coinFactory observe a partially initialised module and leaves unrelated constructors such as TethLikeCoin undefined at registration time. Several other coins in this file are imported directly for the same reason. The barrel still re-exports Pearl/Tpearl so `import { Pearl } from 'bitgo'` keeps working like every other coin. Regenerate the Dockerfile with `yarn update-dockerfile` so the new module is copied and linked for bitgo-express. This is generated content and the dockerfile-check CI job diffs it, so it must be committed rather than hand-edited. TICKET: CECHO-1792 Co-Authored-By: Claude Opus 5 (1M context) --- Dockerfile | 3 +++ modules/bitgo/package.json | 1 + modules/bitgo/src/v2/coinFactory.ts | 7 +++++++ modules/bitgo/src/v2/coins/index.ts | 2 ++ modules/bitgo/tsconfig.json | 3 +++ 5 files changed, 16 insertions(+) diff --git a/Dockerfile b/Dockerfile index 657501fa91..4bb52a1fdf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -142,6 +142,7 @@ COPY --from=builder /tmp/bitgo/modules/sdk-coin-ethw /var/modules/sdk-coin-ethw/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-iota /var/modules/sdk-coin-iota/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-lnbtc /var/modules/sdk-coin-lnbtc/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-ltc /var/modules/sdk-coin-ltc/ +COPY --from=builder /tmp/bitgo/modules/sdk-coin-pearl /var/modules/sdk-coin-pearl/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-xlm /var/modules/sdk-coin-xlm/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-zec /var/modules/sdk-coin-zec/ @@ -246,6 +247,7 @@ cd /var/modules/sdk-coin-ethw && yarn link && \ cd /var/modules/sdk-coin-iota && yarn link && \ cd /var/modules/sdk-coin-lnbtc && yarn link && \ cd /var/modules/sdk-coin-ltc && yarn link && \ +cd /var/modules/sdk-coin-pearl && yarn link && \ cd /var/modules/sdk-coin-xlm && yarn link && \ cd /var/modules/sdk-coin-zec && yarn link #COPY_END @@ -353,6 +355,7 @@ RUN cd /var/bitgo-express && \ yarn link @bitgo/sdk-coin-iota && \ yarn link @bitgo/sdk-coin-lnbtc && \ yarn link @bitgo/sdk-coin-ltc && \ + yarn link @bitgo/sdk-coin-pearl && \ yarn link @bitgo/sdk-coin-xlm && \ yarn link @bitgo/sdk-coin-zec #LINK_END diff --git a/modules/bitgo/package.json b/modules/bitgo/package.json index 3d7012d91c..9ee5543846 100644 --- a/modules/bitgo/package.json +++ b/modules/bitgo/package.json @@ -100,6 +100,7 @@ "@bitgo/sdk-coin-oas": "^2.7.26", "@bitgo/sdk-coin-opeth": "^18.10.26", "@bitgo/sdk-coin-osmo": "^3.7.26", + "@bitgo/sdk-coin-pearl": "^1.0.0", "@bitgo/sdk-coin-polygon": "^21.7.26", "@bitgo/sdk-coin-polyx": "^2.0.4", "@bitgo/sdk-coin-rbtc": "^2.5.26", diff --git a/modules/bitgo/src/v2/coinFactory.ts b/modules/bitgo/src/v2/coinFactory.ts index d64ce2a6b7..7f4be02122 100644 --- a/modules/bitgo/src/v2/coinFactory.ts +++ b/modules/bitgo/src/v2/coinFactory.ts @@ -5,6 +5,7 @@ import { AdaToken } from '@bitgo/sdk-coin-ada'; import { AlgoToken } from '@bitgo/sdk-coin-algo'; import { CantonToken } from '@bitgo/sdk-coin-canton'; import { Bcha, Tbcha } from '@bitgo/sdk-coin-bcha'; +import { Pearl, Tpearl } from '@bitgo/sdk-coin-pearl'; import { HbarToken } from '@bitgo/sdk-coin-hbar'; import { Near, TNear, Nep141Token } from '@bitgo/sdk-coin-near'; import { SolToken } from '@bitgo/sdk-coin-sol'; @@ -298,6 +299,7 @@ export function registerCoinConstructors(coinFactory: CoinFactory, coinMap: Coin coinFactory.register('ofc', Ofc.createInstance); coinFactory.register('opeth', Opeth.createInstance); coinFactory.register('osmo', Osmo.createInstance); + coinFactory.register('pearl', Pearl.createInstance); coinFactory.register('polygon', Polygon.createInstance); coinFactory.register('polyx', Polyx.createInstance); coinFactory.register('rbtc', Rbtc.createInstance); @@ -363,6 +365,7 @@ export function registerCoinConstructors(coinFactory: CoinFactory, coinMap: Coin coinFactory.register('toas', Toas.createInstance); coinFactory.register('topeth', Topeth.createInstance); coinFactory.register('tosmo', Tosmo.createInstance); + coinFactory.register('tpearl', Tpearl.createInstance); coinFactory.register('tpolygon', Tpolygon.createInstance); coinFactory.register('tpolyx', Tpolyx.createInstance); coinFactory.register('trbtc', Trbtc.createInstance); @@ -744,6 +747,8 @@ export function getCoinConstructor(coinName: string): CoinConstructor | undefine return Opeth.createInstance; case 'osmo': return Osmo.createInstance; + case 'pearl': + return Pearl.createInstance; case 'polygon': return Polygon.createInstance; case 'polyx': @@ -874,6 +879,8 @@ export function getCoinConstructor(coinName: string): CoinConstructor | undefine return Topeth.createInstance; case 'tosmo': return Tosmo.createInstance; + case 'tpearl': + return Tpearl.createInstance; case 'tpolygon': return Tpolygon.createInstance; case 'tpolyx': diff --git a/modules/bitgo/src/v2/coins/index.ts b/modules/bitgo/src/v2/coins/index.ts index cbbe8fdb50..a5bbf9a68e 100644 --- a/modules/bitgo/src/v2/coins/index.ts +++ b/modules/bitgo/src/v2/coins/index.ts @@ -50,6 +50,7 @@ import { Mon, Tmon, MonToken } from '@bitgo/sdk-coin-mon'; import { Oas, Toas } from '@bitgo/sdk-coin-oas'; import { Opeth, Topeth, OpethToken } from '@bitgo/sdk-coin-opeth'; import { Osmo, Tosmo } from '@bitgo/sdk-coin-osmo'; +import { Pearl, Tpearl } from '@bitgo/sdk-coin-pearl'; import { Polygon, PolygonToken, Tpolygon } from '@bitgo/sdk-coin-polygon'; import { Polyx, Tpolyx, PolyxToken } from '@bitgo/sdk-coin-polyx'; import { Rbtc, Trbtc } from '@bitgo/sdk-coin-rbtc'; @@ -127,6 +128,7 @@ export { Mon, Tmon, MonToken }; export { Oas, Toas }; export { Opeth, Topeth, OpethToken }; export { Osmo, Tosmo }; +export { Pearl, Tpearl }; export { Polygon, PolygonToken, Tpolygon }; export { Polyx, Tpolyx, PolyxToken }; export { Rbtc, Trbtc }; diff --git a/modules/bitgo/tsconfig.json b/modules/bitgo/tsconfig.json index 26c3e3d8c2..361617114d 100644 --- a/modules/bitgo/tsconfig.json +++ b/modules/bitgo/tsconfig.json @@ -209,6 +209,9 @@ { "path": "../sdk-coin-osmo" }, + { + "path": "../sdk-coin-pearl" + }, { "path": "../sdk-coin-polygon" },