From c062b8fb79223a726ffc924eff94bbd664edcbdd Mon Sep 17 00:00:00 2001 From: Evan Zheng Date: Fri, 8 Aug 2025 16:42:33 -0700 Subject: [PATCH 1/5] fix(sdk-core): coins specific message sign validate SC-2419 TICKET: SC-2419 --- .../lib/messages/cip8/cip8MessageBuilder.ts | 19 +++++++++++++++++++ .../baseCoin/messages/baseMessageBuilder.ts | 9 +++++++++ .../account-lib/baseCoin/messages/iface.ts | 7 +++++++ 3 files changed, 35 insertions(+) diff --git a/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts b/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts index cf7355d253..2d8b901ff5 100644 --- a/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts +++ b/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts @@ -6,6 +6,14 @@ import { BaseMessageBuilder, IMessage, MessageOptions, MessageStandardType } fro * Builder for CIP-8 messages */ export class Cip8MessageBuilder extends BaseMessageBuilder { + private static readonly MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b'; + + /* + * matches a message that starts with "STAR ", followed by a number, + * then " to addr" or " to addr_test1", followed by a 50+ character alphanumeric address, + * and ends with the midnight TnC hash + */ + private static readonly MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${Cip8MessageBuilder.MIDNIGHT_TNC_HASH}`; /** * Base constructor. * @param _coinConfig BaseCoin from statics library @@ -22,4 +30,15 @@ export class Cip8MessageBuilder extends BaseMessageBuilder { async buildMessage(options: MessageOptions): Promise { return new Cip8Message(options); } + + /** + * Validates the signable payload + * @param message The message to validate + * @returns A boolean indicating whether the signable payload is valid + */ + public validateSignablePayload(message: string | Buffer): boolean { + const messageStr = Buffer.isBuffer(message) ? message.toString('utf8') : message; + const regex = new RegExp(`^${Cip8MessageBuilder.MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE}$`, 's'); + return regex.test(messageStr); + } } diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts index 032ab09643..5f35190c35 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts @@ -118,6 +118,15 @@ export abstract class BaseMessageBuilder implements IMessageBuilder { return this; } + /** + * Validates the signable payload + * @param message The message to validate + * @returns A boolean indicating whether the signable payload is valid + */ + public validateSignablePayload(message: string | Buffer): boolean { + return true; + } + /** * Builds a message using the previously set payload and metadata * @returns A Promise resolving to the built IMessage diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts index 43303d77b2..3b6b1d935d 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts @@ -136,6 +136,13 @@ export interface IMessageBuilder { */ getPayload(): MessagePayload | undefined; + /** + * Validates the signable payload + * @param message The message to validate + * @returns A boolean indicating whether the signable payload is valid + */ + validateSignablePayload(message: string | Buffer): boolean; + /** * Gets the current metadata * @returns The current metadata From d79b1122f068281c817b761dc0db2456e0d2d149 Mon Sep 17 00:00:00 2001 From: Bhavi Dhingra Date: Sat, 9 Aug 2025 08:16:55 +0530 Subject: [PATCH 2/5] feat: add isMessageWhitelisted() in MessageBuilder TICKET: SC-2419 --- modules/account-lib/src/index.ts | 6 ++--- .../account-lib/src/utils/messages/index.ts | 14 +++++------ .../test/unit/utils/messages/index.ts | 24 ++++++++++++------- .../lib/messages/cip8/cip8MessageBuilder.ts | 24 ++++--------------- .../baseCoin/messages/baseMessageBuilder.ts | 11 ++++----- .../account-lib/baseCoin/messages/iface.ts | 8 +++---- .../messages/simple/simpleMessageBuilder.ts | 5 ++++ 7 files changed, 42 insertions(+), 50 deletions(-) diff --git a/modules/account-lib/src/index.ts b/modules/account-lib/src/index.ts index 2547c2420e..3b2c44be80 100644 --- a/modules/account-lib/src/index.ts +++ b/modules/account-lib/src/index.ts @@ -203,8 +203,8 @@ export { Vet }; import * as CosmosSharedCoin from '@bitgo/sdk-coin-cosmos'; export { CosmosSharedCoin }; -import { validateAgainstMessageTemplates, MIDNIGHT_TNC_HASH } from './utils'; -export { MIDNIGHT_TNC_HASH }; +import { isMessageWhitelisted, MIDNIGHT_TNC_HASH, MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE } from './utils'; +export { isMessageWhitelisted, MIDNIGHT_TNC_HASH, MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE }; const coinBuilderMap = { trx: Trx.WrappedBuilder, @@ -429,7 +429,7 @@ export async function verifyMessage( if (!isValidMessageEncoded) { return false; } - return validateAgainstMessageTemplates(messageRaw); + return messageBuilder.isMessageWhitelisted(messageRaw); } catch (e) { console.error(`Error verifying message for coin ${coinName}:`, e); return false; diff --git a/modules/account-lib/src/utils/messages/index.ts b/modules/account-lib/src/utils/messages/index.ts index 6d986e1176..45fade5fcd 100644 --- a/modules/account-lib/src/utils/messages/index.ts +++ b/modules/account-lib/src/utils/messages/index.ts @@ -5,22 +5,20 @@ export const MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629 * then " to addr" or " to addr_test1", followed by a 50+ character alphanumeric address, * and ends with the midnight TnC hash */ -const MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${MIDNIGHT_TNC_HASH}`; - -/** - * @file Utility functions for validating messages against whitelisted templates. - * This is used to ensure that only specific message formats are accepted. - */ -const whitelistedMessageTemplates = [MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE]; +export const MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${MIDNIGHT_TNC_HASH}`; /** * Validates a message against a set of whitelisted templates. * The templates can contain placeholders like {{variable}} which will be replaced with a wildcard in the regex. * + * @param whitelistedMessageTemplates - An array of whitelisted message templates. * @param {string} messageRaw - The raw message to validate. * @returns {boolean} - Returns true if the message matches any of the whitelisted templates, false otherwise. */ -export function validateAgainstMessageTemplates(messageRaw: string): boolean { +export function isMessageWhitelisted(whitelistedMessageTemplates: string[], messageRaw: string): boolean { + if (!whitelistedMessageTemplates || whitelistedMessageTemplates.length === 0) { + return true; + } return whitelistedMessageTemplates.some((template) => { const regex = new RegExp(`^${template}$`, 's'); // 's' flag to match newlines return regex.test(messageRaw); diff --git a/modules/account-lib/test/unit/utils/messages/index.ts b/modules/account-lib/test/unit/utils/messages/index.ts index 37088efea9..abe2dcf328 100644 --- a/modules/account-lib/test/unit/utils/messages/index.ts +++ b/modules/account-lib/test/unit/utils/messages/index.ts @@ -1,8 +1,14 @@ import should from 'should'; -import { MIDNIGHT_TNC_HASH, validateAgainstMessageTemplates } from '../../../../src/utils'; +import { + MIDNIGHT_TNC_HASH, + isMessageWhitelisted, + MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, +} from '../../../../src/utils'; describe('Message validation', () => { - describe('validateAgainstMessageTemplates', () => { + describe('isMessageWhitelisted', () => { + const whitelistedMessageTemplates = [MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE]; + const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur'; const adaMainnetDestinationAddress = 'addr1q9k6u7lhf467y2f8skr2dafldx2npsd8fymq0mslnj0t44nd4ealwnt4ug5j0pvx5m6n76v4xrq6wjfkqlhpl8y7httq2m9cmu'; @@ -10,7 +16,7 @@ describe('Message validation', () => { it('should validate testnet message matching the Midnight glacier drop claim template', () => { const messageRaw = `STAR 100 to ${adaTestnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`; - const result = validateAgainstMessageTemplates(messageRaw); + const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); should.equal(result, true); }); @@ -18,7 +24,7 @@ describe('Message validation', () => { it('should validate mainnet message matching the Midnight glacier drop claim template', () => { const messageRaw = `STAR 100 to ${adaMainnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`; - const result = validateAgainstMessageTemplates(messageRaw); + const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); should.equal(result, true); }); @@ -26,7 +32,7 @@ describe('Message validation', () => { it('should not validate message with incorrect format', () => { const messageRaw = `INCORRECT 100 to ${adaTestnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`; - const result = validateAgainstMessageTemplates(messageRaw); + const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); should.equal(result, false); }); @@ -35,7 +41,7 @@ describe('Message validation', () => { // Missing "to addr" part const messageRaw = `STAR 100 ${MIDNIGHT_TNC_HASH}`; - const result = validateAgainstMessageTemplates(messageRaw); + const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); should.equal(result, false); }); @@ -46,13 +52,13 @@ describe('Message validation', () => { '5af1adf825baa496729e2eac1e895ebc77973744bce67f44276bf6006f5c21de863ed121e11828d8fc0241773191e26dc1134803a681a9a98ba0ae812553db24'; const messageRaw = `STAR 100 to ${adaTestnetDestinationAddress} ${incorrectHash}`; - const result = validateAgainstMessageTemplates(messageRaw); + const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); should.equal(result, false); }); it('should handle empty message', () => { - const result = validateAgainstMessageTemplates(''); + const result = isMessageWhitelisted(whitelistedMessageTemplates, ''); should.equal(result, false); }); @@ -60,7 +66,7 @@ describe('Message validation', () => { it('should not validate message with special regex characters', () => { const messageRaw = `STAR shade.with+special*chars to addr.with[special]chars ${MIDNIGHT_TNC_HASH}`; - const result = validateAgainstMessageTemplates(messageRaw); + const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); should.equal(result, false); }); diff --git a/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts b/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts index 2d8b901ff5..9a370d5b02 100644 --- a/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts +++ b/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts @@ -1,25 +1,22 @@ import { Cip8Message } from './cip8Message'; import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { BaseMessageBuilder, IMessage, MessageOptions, MessageStandardType } from '@bitgo/sdk-core'; +import { MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE } from '@bitgo/account-lib'; /** * Builder for CIP-8 messages */ export class Cip8MessageBuilder extends BaseMessageBuilder { - private static readonly MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b'; - - /* - * matches a message that starts with "STAR ", followed by a number, - * then " to addr" or " to addr_test1", followed by a 50+ character alphanumeric address, - * and ends with the midnight TnC hash - */ - private static readonly MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${Cip8MessageBuilder.MIDNIGHT_TNC_HASH}`; /** * Base constructor. * @param _coinConfig BaseCoin from statics library */ public constructor(_coinConfig: Readonly) { super(_coinConfig, MessageStandardType.CIP8); + this.whitelistedMessageTemplates = [ + MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, + // Add more templates as needed + ]; } /** @@ -30,15 +27,4 @@ export class Cip8MessageBuilder extends BaseMessageBuilder { async buildMessage(options: MessageOptions): Promise { return new Cip8Message(options); } - - /** - * Validates the signable payload - * @param message The message to validate - * @returns A boolean indicating whether the signable payload is valid - */ - public validateSignablePayload(message: string | Buffer): boolean { - const messageStr = Buffer.isBuffer(message) ? message.toString('utf8') : message; - const regex = new RegExp(`^${Cip8MessageBuilder.MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE}$`, 's'); - return regex.test(messageStr); - } } diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts index 5f35190c35..5ec3d7f637 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts @@ -2,6 +2,7 @@ import { BroadcastableMessage, MessageOptions, MessagePayload, MessageStandardTy import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { IMessage, IMessageBuilder } from './iface'; import { deserializeSignatures, Signature } from '../iface'; +import { isMessageWhitelisted } from '@bitgo/account-lib'; /** * Base Message Builder @@ -12,6 +13,7 @@ export abstract class BaseMessageBuilder implements IMessageBuilder { protected type: MessageStandardType; protected signatures: Signature[] = []; protected signers: string[] = []; + protected whitelistedMessageTemplates: string[] = []; protected metadata?: Record = {}; protected digest?: string; @@ -118,13 +120,8 @@ export abstract class BaseMessageBuilder implements IMessageBuilder { return this; } - /** - * Validates the signable payload - * @param message The message to validate - * @returns A boolean indicating whether the signable payload is valid - */ - public validateSignablePayload(message: string | Buffer): boolean { - return true; + public isMessageWhitelisted(messageRaw: string): boolean { + return isMessageWhitelisted(this.whitelistedMessageTemplates, messageRaw); } /** diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts index 3b6b1d935d..306e97f4c4 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts @@ -137,11 +137,11 @@ export interface IMessageBuilder { getPayload(): MessagePayload | undefined; /** - * Validates the signable payload - * @param message The message to validate - * @returns A boolean indicating whether the signable payload is valid + * Checks if the message string is whitelisted + * @param messageRaw The raw message string to check + * @return True if the message is whitelisted, false otherwise */ - validateSignablePayload(message: string | Buffer): boolean; + isMessageWhitelisted(messageRaw: string): boolean; /** * Gets the current metadata diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts index 237dbdb3ce..3da4ddf0cd 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts @@ -3,6 +3,7 @@ import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { BaseMessageBuilder } from '../baseMessageBuilder'; import { MessageOptions, MessageStandardType } from '../../../../bitgo'; import { IMessage } from '../iface'; +import { MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE } from '@bitgo/account-lib'; /** * Builder for string messages @@ -14,6 +15,10 @@ export class SimpleMessageBuilder extends BaseMessageBuilder { */ public constructor(_coinConfig: Readonly) { super(_coinConfig, MessageStandardType.SIMPLE); + this.whitelistedMessageTemplates = [ + MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, + // Add more templates as needed + ]; } /** From 05f03507bce9e30a4b213c3b96aa0d5ca14d8c00 Mon Sep 17 00:00:00 2001 From: Bhavi Dhingra Date: Sat, 9 Aug 2025 12:31:41 +0530 Subject: [PATCH 3/5] feat(sdk-core): use common isMessageWhitelisted() function TICKET: SC-2419 --- examples/ts/build-message.ts | 6 +++--- examples/ts/sign-message.ts | 6 +++--- modules/account-lib/src/index.ts | 3 --- modules/account-lib/src/utils/index.ts | 2 -- .../account-lib/test/unit/utils/messages/index.ts | 10 ++++++---- modules/account-lib/test/unit/verifyMessage.ts | 6 +++--- .../src/lib/messages/cip8/cip8MessageBuilder.ts | 9 +++++++-- .../src/account-lib/baseCoin/messages/baseMessage.ts | 2 +- .../baseCoin/messages/baseMessageBuilder.ts | 4 ++-- .../baseCoin/messages/baseMessageBuilderFactory.ts | 2 +- .../src/account-lib/baseCoin/messages/iface.ts | 2 +- .../src/account-lib/baseCoin/messages/index.ts | 3 +++ .../baseCoin/messages}/messageTypes.ts | 2 +- .../src/account-lib/baseCoin/messages/midnight.ts | 12 ++++++++++++ .../baseCoin/messages/simple/simpleMessage.ts | 2 +- .../baseCoin/messages/simple/simpleMessageBuilder.ts | 4 ++-- .../src/account-lib/baseCoin/messages/utils.ts} | 9 --------- modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts | 6 +++--- modules/sdk-core/src/bitgo/utils/index.ts | 1 - modules/sdk-core/src/bitgo/utils/tss/baseTSSUtils.ts | 2 +- modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts | 2 +- .../test/unit/account-lib/mpc/tss/ecdsa/fixtures.ts | 4 ++-- 22 files changed, 53 insertions(+), 46 deletions(-) rename modules/sdk-core/src/{bitgo/utils => account-lib/baseCoin/messages}/messageTypes.ts (93%) create mode 100644 modules/sdk-core/src/account-lib/baseCoin/messages/midnight.ts rename modules/{account-lib/src/utils/messages/index.ts => sdk-core/src/account-lib/baseCoin/messages/utils.ts} (65%) diff --git a/examples/ts/build-message.ts b/examples/ts/build-message.ts index acb1cd5da2..410b89468b 100644 --- a/examples/ts/build-message.ts +++ b/examples/ts/build-message.ts @@ -8,9 +8,8 @@ */ import {BitGoAPI} from '@bitgo/sdk-api'; -import {MessageStandardType} from "@bitgo/sdk-core"; +import {MessageStandardType, getMidnightGlacierDropMsg} from "@bitgo/sdk-core"; import {Hteth} from "@bitgo/sdk-coin-eth"; -import {MIDNIGHT_TNC_HASH} from "@bitgo/account-lib"; require('dotenv').config({ path: '../../.env' }); const bitgo = new BitGoAPI({ @@ -30,7 +29,8 @@ async function main() { console.log(`Wallet label: ${wallet.label()}`); const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur'; - const testnetMessageRaw = `STAR 12345678 to ${adaTestnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`; + const allocationAmt = 12345678; + const testnetMessageRaw = getMidnightGlacierDropMsg(adaTestnetDestinationAddress, allocationAmt); const txRequest = await wallet.buildSignMessageRequest({ message: { diff --git a/examples/ts/sign-message.ts b/examples/ts/sign-message.ts index 69331ae598..2f7f99e8d0 100644 --- a/examples/ts/sign-message.ts +++ b/examples/ts/sign-message.ts @@ -4,8 +4,7 @@ * Copyright 2025, BitGo, Inc. All Rights Reserved. */ import { BitGo } from 'bitgo'; -import { MessageStandardType } from '@bitgo/sdk-core'; -import { MIDNIGHT_TNC_HASH } from "@bitgo/account-lib"; +import { getMidnightGlacierDropMsg, MessageStandardType } from '@bitgo/sdk-core'; const bitgo = new BitGo({ env: 'test' }); @@ -20,7 +19,8 @@ async function signMessage(): Promise { const walletInstance = await basecoin.wallets().get({ id: walletId }); const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur'; - const testnetMessageRaw = `STAR 12345678 to ${adaTestnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`; + const allocationAmt = 12345678; + const testnetMessageRaw = getMidnightGlacierDropMsg(adaTestnetDestinationAddress, allocationAmt); const messageTxn = await walletInstance.signMessage({ message: { diff --git a/modules/account-lib/src/index.ts b/modules/account-lib/src/index.ts index 3b2c44be80..e9a625a708 100644 --- a/modules/account-lib/src/index.ts +++ b/modules/account-lib/src/index.ts @@ -203,9 +203,6 @@ export { Vet }; import * as CosmosSharedCoin from '@bitgo/sdk-coin-cosmos'; export { CosmosSharedCoin }; -import { isMessageWhitelisted, MIDNIGHT_TNC_HASH, MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE } from './utils'; -export { isMessageWhitelisted, MIDNIGHT_TNC_HASH, MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE }; - const coinBuilderMap = { trx: Trx.WrappedBuilder, ttrx: Trx.WrappedBuilder, diff --git a/modules/account-lib/src/utils/index.ts b/modules/account-lib/src/utils/index.ts index c9dbda5019..a103ebcf77 100644 --- a/modules/account-lib/src/utils/index.ts +++ b/modules/account-lib/src/utils/index.ts @@ -18,5 +18,3 @@ export function register(coinName: string): BaseUtils { } throw new NotSupported(`${coinName} util factory not supported`); } - -export * from './messages'; diff --git a/modules/account-lib/test/unit/utils/messages/index.ts b/modules/account-lib/test/unit/utils/messages/index.ts index abe2dcf328..2bbbf83148 100644 --- a/modules/account-lib/test/unit/utils/messages/index.ts +++ b/modules/account-lib/test/unit/utils/messages/index.ts @@ -1,9 +1,10 @@ import should from 'should'; import { - MIDNIGHT_TNC_HASH, + getMidnightGlacierDropMsg, isMessageWhitelisted, MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, -} from '../../../../src/utils'; + MIDNIGHT_TNC_HASH, +} from '@bitgo/sdk-core'; describe('Message validation', () => { describe('isMessageWhitelisted', () => { @@ -12,9 +13,10 @@ describe('Message validation', () => { const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur'; const adaMainnetDestinationAddress = 'addr1q9k6u7lhf467y2f8skr2dafldx2npsd8fymq0mslnj0t44nd4ealwnt4ug5j0pvx5m6n76v4xrq6wjfkqlhpl8y7httq2m9cmu'; + const allocationAmt = 100; it('should validate testnet message matching the Midnight glacier drop claim template', () => { - const messageRaw = `STAR 100 to ${adaTestnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`; + const messageRaw = getMidnightGlacierDropMsg(adaTestnetDestinationAddress, allocationAmt); const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); @@ -22,7 +24,7 @@ describe('Message validation', () => { }); it('should validate mainnet message matching the Midnight glacier drop claim template', () => { - const messageRaw = `STAR 100 to ${adaMainnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`; + const messageRaw = getMidnightGlacierDropMsg(adaMainnetDestinationAddress, allocationAmt); const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); diff --git a/modules/account-lib/test/unit/verifyMessage.ts b/modules/account-lib/test/unit/verifyMessage.ts index 6c94118d9d..f9290fb080 100644 --- a/modules/account-lib/test/unit/verifyMessage.ts +++ b/modules/account-lib/test/unit/verifyMessage.ts @@ -1,12 +1,12 @@ import should from 'should'; import * as accountLib from '../../src'; -import { MessageStandardType } from '@bitgo/sdk-core'; -import { MIDNIGHT_TNC_HASH } from '../../src/utils'; +import { getMidnightGlacierDropMsg, MessageStandardType } from '@bitgo/sdk-core'; describe('verifyMessage', () => { const adaTestnetOriginAddress = 'addr_test1wz4h6068hs93n8j5ar88fgzz6sfnw8krng09xx0mmf36m8c7j9yap'; const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur'; - const testnetMessageRaw = `STAR 100 to ${adaTestnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`; + const allocationAmt = 100; + const testnetMessageRaw = getMidnightGlacierDropMsg(adaTestnetDestinationAddress, allocationAmt); describe('EIP191 Message', function () { const eip191MessageBuilder = accountLib diff --git a/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts b/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts index 9a370d5b02..b413b925d7 100644 --- a/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts +++ b/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts @@ -1,7 +1,12 @@ import { Cip8Message } from './cip8Message'; import { BaseCoin as CoinConfig } from '@bitgo/statics'; -import { BaseMessageBuilder, IMessage, MessageOptions, MessageStandardType } from '@bitgo/sdk-core'; -import { MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE } from '@bitgo/account-lib'; +import { + BaseMessageBuilder, + IMessage, + MessageOptions, + MessageStandardType, + MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, +} from '@bitgo/sdk-core'; /** * Builder for CIP-8 messages diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessage.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessage.ts index 1ab37342f9..7cbd7e00a2 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessage.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessage.ts @@ -5,7 +5,7 @@ import { MessageOptions, MessagePayload, MessageStandardType, -} from '../../../bitgo'; +} from './messageTypes'; import { IMessage } from './iface'; import { serializeSignatures, Signature } from '../iface'; diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts index 5ec3d7f637..1f54231ebe 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts @@ -1,8 +1,8 @@ -import { BroadcastableMessage, MessageOptions, MessagePayload, MessageStandardType } from '../../../bitgo'; +import { BroadcastableMessage, MessageOptions, MessagePayload, MessageStandardType } from './messageTypes'; import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { IMessage, IMessageBuilder } from './iface'; import { deserializeSignatures, Signature } from '../iface'; -import { isMessageWhitelisted } from '@bitgo/account-lib'; +import { isMessageWhitelisted } from './index'; /** * Base Message Builder diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.ts index 831fa958f6..c48be4f7d1 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.ts @@ -1,6 +1,6 @@ import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { IMessageBuilder, IMessageBuilderFactory } from './iface'; -import { BroadcastableMessage, MessageStandardType } from '../../../bitgo'; +import { BroadcastableMessage, MessageStandardType } from './messageTypes'; import { deserializeSignatures } from '../iface'; /** diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts index 306e97f4c4..2d8ef23476 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts @@ -1,4 +1,4 @@ -import { BroadcastableMessage, MessageMetadata, MessagePayload, MessageStandardType } from '../../../bitgo'; +import { BroadcastableMessage, MessageMetadata, MessagePayload, MessageStandardType } from './messageTypes'; import { Signature } from '../iface'; /** diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/index.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/index.ts index 53aa2421c0..33999fdd34 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/index.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/index.ts @@ -3,3 +3,6 @@ export * from './baseMessageBuilder'; export * from './baseMessageBuilderFactory'; export * from './iface'; export * from './simple'; +export * from './messageTypes'; +export * from './midnight'; +export * from './utils'; diff --git a/modules/sdk-core/src/bitgo/utils/messageTypes.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/messageTypes.ts similarity index 93% rename from modules/sdk-core/src/bitgo/utils/messageTypes.ts rename to modules/sdk-core/src/account-lib/baseCoin/messages/messageTypes.ts index 1a322bd5fa..bc43234de9 100644 --- a/modules/sdk-core/src/bitgo/utils/messageTypes.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/messageTypes.ts @@ -1,5 +1,5 @@ import { BaseCoin as CoinConfig } from '@bitgo/statics'; -import { SerializedSignature, Signature } from '../../account-lib'; +import { SerializedSignature, Signature } from '../iface'; /** * Supported message signing standard types diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/midnight.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/midnight.ts new file mode 100644 index 0000000000..d16d8ccc3c --- /dev/null +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/midnight.ts @@ -0,0 +1,12 @@ +export const MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b'; + +/* + * matches a message that starts with "STAR ", followed by a number, + * then " to addr" or " to addr_test1", followed by a 50+ character alphanumeric address, + * and ends with the midnight TnC hash + */ +export const MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${MIDNIGHT_TNC_HASH}`; + +export function getMidnightGlacierDropMsg(cardanoDestAddr: string, allocationAmt: number): string { + return `STAR ${allocationAmt} to ${cardanoDestAddr} ${MIDNIGHT_TNC_HASH}`; +} diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessage.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessage.ts index cd7f35d1d7..694d909b80 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessage.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessage.ts @@ -1,5 +1,5 @@ import { BaseMessage } from '../baseMessage'; -import { MessageOptions, MessageStandardType } from '../../../../bitgo'; +import { MessageOptions, MessageStandardType } from '../messageTypes'; /** * Implementation of String Message diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts index 3da4ddf0cd..9d5a3e0b6d 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts @@ -1,9 +1,9 @@ import { SimpleMessage } from './simpleMessage'; import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { BaseMessageBuilder } from '../baseMessageBuilder'; -import { MessageOptions, MessageStandardType } from '../../../../bitgo'; +import { MessageOptions, MessageStandardType } from '../messageTypes'; import { IMessage } from '../iface'; -import { MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE } from '@bitgo/account-lib'; +import { MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE } from '../midnight'; /** * Builder for string messages diff --git a/modules/account-lib/src/utils/messages/index.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/utils.ts similarity index 65% rename from modules/account-lib/src/utils/messages/index.ts rename to modules/sdk-core/src/account-lib/baseCoin/messages/utils.ts index 45fade5fcd..b0b36304c8 100644 --- a/modules/account-lib/src/utils/messages/index.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/utils.ts @@ -1,12 +1,3 @@ -export const MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b'; - -/* - * matches a message that starts with "STAR ", followed by a number, - * then " to addr" or " to addr_test1", followed by a 50+ character alphanumeric address, - * and ends with the midnight TnC hash - */ -export const MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${MIDNIGHT_TNC_HASH}`; - /** * Validates a message against a set of whitelisted templates. * The templates can contain placeholders like {{variable}} which will be replaced with a wildcard in the regex. diff --git a/modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts b/modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts index 86ed77f77a..4c8a3a85d0 100644 --- a/modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts +++ b/modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts @@ -12,10 +12,10 @@ import { CreateAddressFormat, CustomSigningFunction, IWallet, IWallets, Memo, Wa import { TokenEnablement } from '@bitgo/public-types'; import { Hash } from 'crypto'; -import { TransactionType } from '../../account-lib'; +import { MessageStandardType, TransactionType } from '../../account-lib'; import { IInscriptionBuilder } from '../inscriptionBuilder'; -import { MessageStandardType, MPCTx, PopulatedIntent, TokenTransferRecipientParams, TokenType } from '../utils'; -import { IWebhooks } from '../webhook/iWebhooks'; +import { MPCTx, PopulatedIntent, TokenTransferRecipientParams, TokenType } from '../utils'; +import { IWebhooks } from '../webhook'; export const multisigTypes = { onchain: 'onchain', diff --git a/modules/sdk-core/src/bitgo/utils/index.ts b/modules/sdk-core/src/bitgo/utils/index.ts index 5623fd151a..c3f471375d 100644 --- a/modules/sdk-core/src/bitgo/utils/index.ts +++ b/modules/sdk-core/src/bitgo/utils/index.ts @@ -10,6 +10,5 @@ export * from './util'; export * from './decode'; export * from './notEmpty'; export * from './wallet'; -export * from './messageTypes'; export { openpgpUtils }; diff --git a/modules/sdk-core/src/bitgo/utils/tss/baseTSSUtils.ts b/modules/sdk-core/src/bitgo/utils/tss/baseTSSUtils.ts index de7fd8bfdd..319c0df50e 100644 --- a/modules/sdk-core/src/bitgo/utils/tss/baseTSSUtils.ts +++ b/modules/sdk-core/src/bitgo/utils/tss/baseTSSUtils.ts @@ -44,7 +44,7 @@ import { RequestTracer } from '../util'; import { envRequiresBitgoPubGpgKeyConfig, getBitgoMpcGpgPubKey } from '../../tss/bitgoPubKeys'; import { getBitgoGpgPubKey } from '../opengpgUtils'; import assert from 'assert'; -import { MessageStandardType } from '../messageTypes'; +import { MessageStandardType } from '../../../account-lib'; /** * BaseTssUtil class which different signature schemes have to extend diff --git a/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts b/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts index 31c80f5d76..ceb15ef23e 100644 --- a/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts +++ b/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts @@ -9,7 +9,7 @@ import { KeyShare } from './ecdsa'; import { EcdsaTypes } from '@bitgo/sdk-lib-mpc'; import { TssEcdsaStep1ReturnMessage, TssEcdsaStep2ReturnMessage, TxRequestChallengeResponse } from '../../tss/types'; import { AShare, DShare, SShare } from '../../tss/ecdsa/types'; -import { MessageStandardType } from '../messageTypes'; +import { MessageStandardType } from '../../../account-lib'; export type TxRequestVersion = 'full' | 'lite'; export interface HopParams { diff --git a/modules/sdk-core/test/unit/account-lib/mpc/tss/ecdsa/fixtures.ts b/modules/sdk-core/test/unit/account-lib/mpc/tss/ecdsa/fixtures.ts index 1bc31a204b..eafe4d57de 100644 --- a/modules/sdk-core/test/unit/account-lib/mpc/tss/ecdsa/fixtures.ts +++ b/modules/sdk-core/test/unit/account-lib/mpc/tss/ecdsa/fixtures.ts @@ -1,4 +1,4 @@ -import { KeyPair, PrivateKey, PublicKey } from 'paillier-bigint'; +import { PrivateKey, PublicKey } from 'paillier-bigint'; const publicKeys: PublicKey[] = [ new PublicKey( @@ -27,7 +27,7 @@ const publicKeys: PublicKey[] = [ ), ]; -export const paillierKeyPairs: KeyPair[] = [ +export const paillierKeyPairs: { publicKey: PublicKey; privateKey: PrivateKey }[] = [ { publicKey: publicKeys[0], privateKey: new PrivateKey( From 78a73ebc8011d2d82d7d669ba1293fe4b6354ec3 Mon Sep 17 00:00:00 2001 From: Bhavi Dhingra Date: Sat, 9 Aug 2025 13:29:46 +0530 Subject: [PATCH 4/5] refactor: import should without (=) TICKET: SC-2419 --- modules/account-lib/src/index.ts | 3 +++ modules/sdk-coin-ada/test/unit/ada.ts | 2 +- modules/sdk-coin-asi/test/unit/asi.ts | 2 +- modules/sdk-coin-atom/test/unit/atom.ts | 2 +- modules/sdk-coin-baby/test/unit/baby.ts | 2 +- modules/sdk-coin-bld/test/unit/bld.ts | 2 +- modules/sdk-coin-coreum/test/unit/coreum.ts | 2 +- modules/sdk-coin-cronos/test/unit/cronos.ts | 2 +- modules/sdk-coin-dot/test/unit/dot.ts | 2 +- modules/sdk-coin-hash/test/unit/hash.ts | 2 +- modules/sdk-coin-initia/test/unit/initia.ts | 2 +- modules/sdk-coin-injective/test/unit/injective.ts | 2 +- modules/sdk-coin-islm/test/unit/islm.ts | 2 +- modules/sdk-coin-mantra/test/unit/mantra.ts | 2 +- modules/sdk-coin-osmo/test/unit/osmo.ts | 2 +- modules/sdk-coin-rune/test/unit/rune.ts | 2 +- modules/sdk-coin-sei/test/unit/sei.ts | 2 +- modules/sdk-coin-tia/test/unit/tia.ts | 2 +- modules/sdk-coin-zeta/test/unit/zeta.ts | 2 +- 19 files changed, 21 insertions(+), 18 deletions(-) diff --git a/modules/account-lib/src/index.ts b/modules/account-lib/src/index.ts index e9a625a708..dd49fbd470 100644 --- a/modules/account-lib/src/index.ts +++ b/modules/account-lib/src/index.ts @@ -10,7 +10,10 @@ import { BaseMessageBuilderFactory, BuildMessageError, MessageStandardType, + MIDNIGHT_TNC_HASH, } from '@bitgo/sdk-core'; +export { MIDNIGHT_TNC_HASH }; + import { BaseCoin as CoinConfig, CoinFeature, coins } from '@bitgo/statics'; export { Ed25519BIP32, Eddsa }; diff --git a/modules/sdk-coin-ada/test/unit/ada.ts b/modules/sdk-coin-ada/test/unit/ada.ts index 37f8f8ea7a..239857f88b 100644 --- a/modules/sdk-coin-ada/test/unit/ada.ts +++ b/modules/sdk-coin-ada/test/unit/ada.ts @@ -2,7 +2,7 @@ * @prettier */ -import should = require('should'); +import should from 'should'; import { randomBytes } from 'crypto'; import * as sinon from 'sinon'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; diff --git a/modules/sdk-coin-asi/test/unit/asi.ts b/modules/sdk-coin-asi/test/unit/asi.ts index 955350becb..70e6cbd0d2 100644 --- a/modules/sdk-coin-asi/test/unit/asi.ts +++ b/modules/sdk-coin-asi/test/unit/asi.ts @@ -1,4 +1,4 @@ -import should = require('should'); +import should from 'should'; import BigNumber from 'bignumber.js'; import sinon from 'sinon'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; diff --git a/modules/sdk-coin-atom/test/unit/atom.ts b/modules/sdk-coin-atom/test/unit/atom.ts index 206a961976..37d0515dd4 100644 --- a/modules/sdk-coin-atom/test/unit/atom.ts +++ b/modules/sdk-coin-atom/test/unit/atom.ts @@ -19,7 +19,7 @@ import { wrwUser, wrwUserDkls, } from '../resources/atom'; -import should = require('should'); +import should from 'should'; describe('ATOM', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-baby/test/unit/baby.ts b/modules/sdk-coin-baby/test/unit/baby.ts index 51a45059e7..f849e1e7b1 100644 --- a/modules/sdk-coin-baby/test/unit/baby.ts +++ b/modules/sdk-coin-baby/test/unit/baby.ts @@ -4,7 +4,7 @@ import BigNumber from 'bignumber.js'; import sinon from 'sinon'; import { Baby, Tbaby } from '../../src'; import { TEST_SEND_MANY_TX, TEST_SEND_TX, TEST_TX_WITH_MEMO, address } from '../resources/baby'; -import should = require('should'); +import should from 'should'; import utils from '../../src/lib/utils'; describe('Babylon', function () { diff --git a/modules/sdk-coin-bld/test/unit/bld.ts b/modules/sdk-coin-bld/test/unit/bld.ts index 855d92ebc2..214a2047ab 100644 --- a/modules/sdk-coin-bld/test/unit/bld.ts +++ b/modules/sdk-coin-bld/test/unit/bld.ts @@ -17,7 +17,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/bld'; -import should = require('should'); +import should from 'should'; describe('BLD', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-coreum/test/unit/coreum.ts b/modules/sdk-coin-coreum/test/unit/coreum.ts index 858b892cc4..591aa6e2d2 100644 --- a/modules/sdk-coin-coreum/test/unit/coreum.ts +++ b/modules/sdk-coin-coreum/test/unit/coreum.ts @@ -19,7 +19,7 @@ import { testnetAddress, wrwUser, } from '../resources/tcoreum'; -import should = require('should'); +import should from 'should'; describe('Coreum', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-cronos/test/unit/cronos.ts b/modules/sdk-coin-cronos/test/unit/cronos.ts index a711c3ef95..12ddf3234f 100644 --- a/modules/sdk-coin-cronos/test/unit/cronos.ts +++ b/modules/sdk-coin-cronos/test/unit/cronos.ts @@ -1,4 +1,4 @@ -import should = require('should'); +import should from 'should'; import BigNumber from 'bignumber.js'; import sinon from 'sinon'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; diff --git a/modules/sdk-coin-dot/test/unit/dot.ts b/modules/sdk-coin-dot/test/unit/dot.ts index ee7f3c367b..6c8a62f992 100644 --- a/modules/sdk-coin-dot/test/unit/dot.ts +++ b/modules/sdk-coin-dot/test/unit/dot.ts @@ -1,7 +1,7 @@ import { BitGoAPI } from '@bitgo/sdk-api'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; import { randomBytes } from 'crypto'; -import should = require('should'); +import should from 'should'; import { Dot, Tdot, KeyPair } from '../../src'; import * as testData from '../fixtures'; import { chainName, txVersion, genesisHash, specVersion } from '../resources'; diff --git a/modules/sdk-coin-hash/test/unit/hash.ts b/modules/sdk-coin-hash/test/unit/hash.ts index b40e5287ad..b0a1147c20 100644 --- a/modules/sdk-coin-hash/test/unit/hash.ts +++ b/modules/sdk-coin-hash/test/unit/hash.ts @@ -18,7 +18,7 @@ import { testnetAddress, wrwUser, } from '../resources/hash'; -import should = require('should'); +import should from 'should'; describe('HASH', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-initia/test/unit/initia.ts b/modules/sdk-coin-initia/test/unit/initia.ts index f3aad0ced5..d04c7c2c1b 100644 --- a/modules/sdk-coin-initia/test/unit/initia.ts +++ b/modules/sdk-coin-initia/test/unit/initia.ts @@ -1,4 +1,4 @@ -import should = require('should'); +import should from 'should'; import BigNumber from 'bignumber.js'; import sinon from 'sinon'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; diff --git a/modules/sdk-coin-injective/test/unit/injective.ts b/modules/sdk-coin-injective/test/unit/injective.ts index dd1269fab6..6ab81e6274 100644 --- a/modules/sdk-coin-injective/test/unit/injective.ts +++ b/modules/sdk-coin-injective/test/unit/injective.ts @@ -18,7 +18,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/injective'; -import should = require('should'); +import should from 'should'; import nock = require('nock'); describe('INJ', function () { diff --git a/modules/sdk-coin-islm/test/unit/islm.ts b/modules/sdk-coin-islm/test/unit/islm.ts index 03d34cbe73..7bd3929697 100644 --- a/modules/sdk-coin-islm/test/unit/islm.ts +++ b/modules/sdk-coin-islm/test/unit/islm.ts @@ -12,7 +12,7 @@ import { TEST_WITHDRAW_REWARDS_TX, address, } from '../resources/islm'; -import should = require('should'); +import should from 'should'; describe('Islm', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-mantra/test/unit/mantra.ts b/modules/sdk-coin-mantra/test/unit/mantra.ts index 2110632bf1..90bf2aeb82 100644 --- a/modules/sdk-coin-mantra/test/unit/mantra.ts +++ b/modules/sdk-coin-mantra/test/unit/mantra.ts @@ -5,7 +5,7 @@ import sinon from 'sinon'; import { Mantra, Tmantra } from '../../src'; import utils from '../../src/lib/utils'; import { TEST_SEND_MANY_TX, TEST_SEND_TX, TEST_TX_WITH_MEMO, address } from '../resources/mantra'; -import should = require('should'); +import should from 'should'; describe('Mantra', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-osmo/test/unit/osmo.ts b/modules/sdk-coin-osmo/test/unit/osmo.ts index 4d27e0972f..7d9606589e 100644 --- a/modules/sdk-coin-osmo/test/unit/osmo.ts +++ b/modules/sdk-coin-osmo/test/unit/osmo.ts @@ -18,7 +18,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/osmo'; -import should = require('should'); +import should from 'should'; describe('OSMO', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-rune/test/unit/rune.ts b/modules/sdk-coin-rune/test/unit/rune.ts index 887d2bbd5b..2d534c5fed 100644 --- a/modules/sdk-coin-rune/test/unit/rune.ts +++ b/modules/sdk-coin-rune/test/unit/rune.ts @@ -10,7 +10,7 @@ import { RuneUtils } from '../../src/lib/utils'; import { mainnetAddress } from '../resources/rune'; import { TEST_SEND_TX, TEST_TX_WITH_MEMO, testnetAddress, wrwUser } from '../resources/trune'; const bech32 = require('bech32-buffer'); -import should = require('should'); +import should from 'should'; describe('Rune', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-sei/test/unit/sei.ts b/modules/sdk-coin-sei/test/unit/sei.ts index 08cd926949..9b4bcaccc7 100644 --- a/modules/sdk-coin-sei/test/unit/sei.ts +++ b/modules/sdk-coin-sei/test/unit/sei.ts @@ -17,7 +17,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/sei'; -import should = require('should'); +import should from 'should'; describe('SEI', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-tia/test/unit/tia.ts b/modules/sdk-coin-tia/test/unit/tia.ts index 7c41b3d201..d676f50d16 100644 --- a/modules/sdk-coin-tia/test/unit/tia.ts +++ b/modules/sdk-coin-tia/test/unit/tia.ts @@ -21,7 +21,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/tia'; -import should = require('should'); +import should from 'should'; import nock = require('nock'); describe('TIA', function () { diff --git a/modules/sdk-coin-zeta/test/unit/zeta.ts b/modules/sdk-coin-zeta/test/unit/zeta.ts index fcfb8a4f82..4dc4746421 100644 --- a/modules/sdk-coin-zeta/test/unit/zeta.ts +++ b/modules/sdk-coin-zeta/test/unit/zeta.ts @@ -20,7 +20,7 @@ import { mockAccountDetailsResponse, wrwUser, } from '../resources/zeta'; -import should = require('should'); +import should from 'should'; import nock = require('nock'); describe('Zeta', function () { From 1180821734f15b3dbedcf861150fa78d923a41c6 Mon Sep 17 00:00:00 2001 From: Bhavi Dhingra Date: Sat, 9 Aug 2025 16:01:28 +0530 Subject: [PATCH 5/5] Revert "refactor: import should without (=)" This reverts commit 516c30a30af2697328645167412e5e736698ae5c. TICKET: SC-2419 --- examples/ts/build-message.ts | 4 ++-- examples/ts/sign-message.ts | 4 ++-- .../lib/messages/eip191/eip191MessageBuilder.ts | 6 ++++++ modules/account-lib/src/index.ts | 10 ++++------ .../account-lib/test/unit/utils/messages/index.ts | 10 ++++++---- modules/account-lib/test/unit/verifyMessage.ts | 4 ++-- .../src/lib/messages/cip8/cip8MessageBuilder.ts | 12 +----------- modules/sdk-coin-ada/test/unit/ada.ts | 2 +- modules/sdk-coin-asi/test/unit/asi.ts | 2 +- modules/sdk-coin-atom/test/unit/atom.ts | 2 +- modules/sdk-coin-baby/test/unit/baby.ts | 2 +- modules/sdk-coin-bld/test/unit/bld.ts | 2 +- modules/sdk-coin-coreum/test/unit/coreum.ts | 2 +- modules/sdk-coin-cronos/test/unit/cronos.ts | 2 +- modules/sdk-coin-dot/test/unit/dot.ts | 2 +- modules/sdk-coin-hash/test/unit/hash.ts | 2 +- modules/sdk-coin-initia/test/unit/initia.ts | 2 +- modules/sdk-coin-injective/test/unit/injective.ts | 2 +- modules/sdk-coin-islm/test/unit/islm.ts | 2 +- modules/sdk-coin-mantra/test/unit/mantra.ts | 2 +- modules/sdk-coin-osmo/test/unit/osmo.ts | 2 +- modules/sdk-coin-rune/test/unit/rune.ts | 2 +- modules/sdk-coin-sei/test/unit/sei.ts | 2 +- modules/sdk-coin-tia/test/unit/tia.ts | 2 +- modules/sdk-coin-zeta/test/unit/zeta.ts | 2 +- .../baseCoin/messages/baseMessageBuilder.ts | 15 ++++++++++++++- .../src/account-lib/baseCoin/messages/iface.ts | 6 ++++-- .../src/account-lib/baseCoin/messages/midnight.ts | 2 +- .../messages/simple/simpleMessageBuilder.ts | 5 ----- .../src/account-lib/baseCoin/messages/utils.ts | 8 ++++---- .../signAccountBasedMidnightClaimMessages.ts | 2 +- .../unit/account-lib/mpc/tss/ecdsa/fixtures.ts | 4 ++-- yarn.lock | 11 +++++++++++ 33 files changed, 78 insertions(+), 61 deletions(-) diff --git a/examples/ts/build-message.ts b/examples/ts/build-message.ts index 410b89468b..aeab64cd9f 100644 --- a/examples/ts/build-message.ts +++ b/examples/ts/build-message.ts @@ -8,7 +8,7 @@ */ import {BitGoAPI} from '@bitgo/sdk-api'; -import {MessageStandardType, getMidnightGlacierDropMsg} from "@bitgo/sdk-core"; +import {MessageStandardType, getMidnightGlacierDropClaimMsg} from "@bitgo/sdk-core"; import {Hteth} from "@bitgo/sdk-coin-eth"; require('dotenv').config({ path: '../../.env' }); @@ -30,7 +30,7 @@ async function main() { const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur'; const allocationAmt = 12345678; - const testnetMessageRaw = getMidnightGlacierDropMsg(adaTestnetDestinationAddress, allocationAmt); + const testnetMessageRaw = getMidnightGlacierDropClaimMsg(adaTestnetDestinationAddress, allocationAmt); const txRequest = await wallet.buildSignMessageRequest({ message: { diff --git a/examples/ts/sign-message.ts b/examples/ts/sign-message.ts index 2f7f99e8d0..3f9f0ef15a 100644 --- a/examples/ts/sign-message.ts +++ b/examples/ts/sign-message.ts @@ -4,7 +4,7 @@ * Copyright 2025, BitGo, Inc. All Rights Reserved. */ import { BitGo } from 'bitgo'; -import { getMidnightGlacierDropMsg, MessageStandardType } from '@bitgo/sdk-core'; +import { getMidnightGlacierDropClaimMsg, MessageStandardType } from '@bitgo/sdk-core'; const bitgo = new BitGo({ env: 'test' }); @@ -20,7 +20,7 @@ async function signMessage(): Promise { const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur'; const allocationAmt = 12345678; - const testnetMessageRaw = getMidnightGlacierDropMsg(adaTestnetDestinationAddress, allocationAmt); + const testnetMessageRaw = getMidnightGlacierDropClaimMsg(adaTestnetDestinationAddress, allocationAmt); const messageTxn = await walletInstance.signMessage({ message: { diff --git a/modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts b/modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts index 858836127c..ccccf0937f 100644 --- a/modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts +++ b/modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts @@ -22,4 +22,10 @@ export class Eip191MessageBuilder extends BaseMessageBuilder { async buildMessage(options: MessageOptions): Promise { return new EIP191Message(options); } + + protected getWhitelistedMessageTemplates(): Record { + // EIP-191 does not have whitelisted message templates + // This means all messages are allowed + return {}; + } } diff --git a/modules/account-lib/src/index.ts b/modules/account-lib/src/index.ts index dd49fbd470..d8bbb99dfd 100644 --- a/modules/account-lib/src/index.ts +++ b/modules/account-lib/src/index.ts @@ -423,15 +423,13 @@ export async function verifyMessage( try { const messageBuilderFactory = getMessageBuilderFactory(coinName); const messageBuilder = messageBuilderFactory.getMessageBuilder(messageStandardType); - messageBuilder.setPayload(messageRaw); - const message = await messageBuilder.build(); - const isValidMessageEncoded = await message.verifyEncodedPayload(messageEncoded, metadata); - if (!isValidMessageEncoded) { + if (!messageBuilder || !messageBuilder.isMessageWhitelisted(messageRaw)) { return false; } - return messageBuilder.isMessageWhitelisted(messageRaw); + messageBuilder.setPayload(messageRaw); + const message = await messageBuilder.build(); + return await message.verifyEncodedPayload(messageEncoded, metadata); } catch (e) { - console.error(`Error verifying message for coin ${coinName}:`, e); return false; } } diff --git a/modules/account-lib/test/unit/utils/messages/index.ts b/modules/account-lib/test/unit/utils/messages/index.ts index 2bbbf83148..d7aa11c6e5 100644 --- a/modules/account-lib/test/unit/utils/messages/index.ts +++ b/modules/account-lib/test/unit/utils/messages/index.ts @@ -1,6 +1,6 @@ import should from 'should'; import { - getMidnightGlacierDropMsg, + getMidnightGlacierDropClaimMsg, isMessageWhitelisted, MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, MIDNIGHT_TNC_HASH, @@ -8,7 +8,9 @@ import { describe('Message validation', () => { describe('isMessageWhitelisted', () => { - const whitelistedMessageTemplates = [MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE]; + const whitelistedMessageTemplates: Record = { + midnightGDClaimMsgTemplate: MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, + }; const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur'; const adaMainnetDestinationAddress = @@ -16,7 +18,7 @@ describe('Message validation', () => { const allocationAmt = 100; it('should validate testnet message matching the Midnight glacier drop claim template', () => { - const messageRaw = getMidnightGlacierDropMsg(adaTestnetDestinationAddress, allocationAmt); + const messageRaw = getMidnightGlacierDropClaimMsg(adaTestnetDestinationAddress, allocationAmt); const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); @@ -24,7 +26,7 @@ describe('Message validation', () => { }); it('should validate mainnet message matching the Midnight glacier drop claim template', () => { - const messageRaw = getMidnightGlacierDropMsg(adaMainnetDestinationAddress, allocationAmt); + const messageRaw = getMidnightGlacierDropClaimMsg(adaMainnetDestinationAddress, allocationAmt); const result = isMessageWhitelisted(whitelistedMessageTemplates, messageRaw); diff --git a/modules/account-lib/test/unit/verifyMessage.ts b/modules/account-lib/test/unit/verifyMessage.ts index f9290fb080..4c497f0ed6 100644 --- a/modules/account-lib/test/unit/verifyMessage.ts +++ b/modules/account-lib/test/unit/verifyMessage.ts @@ -1,12 +1,12 @@ import should from 'should'; import * as accountLib from '../../src'; -import { getMidnightGlacierDropMsg, MessageStandardType } from '@bitgo/sdk-core'; +import { getMidnightGlacierDropClaimMsg, MessageStandardType } from '@bitgo/sdk-core'; describe('verifyMessage', () => { const adaTestnetOriginAddress = 'addr_test1wz4h6068hs93n8j5ar88fgzz6sfnw8krng09xx0mmf36m8c7j9yap'; const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur'; const allocationAmt = 100; - const testnetMessageRaw = getMidnightGlacierDropMsg(adaTestnetDestinationAddress, allocationAmt); + const testnetMessageRaw = getMidnightGlacierDropClaimMsg(adaTestnetDestinationAddress, allocationAmt); describe('EIP191 Message', function () { const eip191MessageBuilder = accountLib diff --git a/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts b/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts index b413b925d7..cf7355d253 100644 --- a/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts +++ b/modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts @@ -1,12 +1,6 @@ import { Cip8Message } from './cip8Message'; import { BaseCoin as CoinConfig } from '@bitgo/statics'; -import { - BaseMessageBuilder, - IMessage, - MessageOptions, - MessageStandardType, - MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, -} from '@bitgo/sdk-core'; +import { BaseMessageBuilder, IMessage, MessageOptions, MessageStandardType } from '@bitgo/sdk-core'; /** * Builder for CIP-8 messages @@ -18,10 +12,6 @@ export class Cip8MessageBuilder extends BaseMessageBuilder { */ public constructor(_coinConfig: Readonly) { super(_coinConfig, MessageStandardType.CIP8); - this.whitelistedMessageTemplates = [ - MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, - // Add more templates as needed - ]; } /** diff --git a/modules/sdk-coin-ada/test/unit/ada.ts b/modules/sdk-coin-ada/test/unit/ada.ts index 239857f88b..37f8f8ea7a 100644 --- a/modules/sdk-coin-ada/test/unit/ada.ts +++ b/modules/sdk-coin-ada/test/unit/ada.ts @@ -2,7 +2,7 @@ * @prettier */ -import should from 'should'; +import should = require('should'); import { randomBytes } from 'crypto'; import * as sinon from 'sinon'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; diff --git a/modules/sdk-coin-asi/test/unit/asi.ts b/modules/sdk-coin-asi/test/unit/asi.ts index 70e6cbd0d2..955350becb 100644 --- a/modules/sdk-coin-asi/test/unit/asi.ts +++ b/modules/sdk-coin-asi/test/unit/asi.ts @@ -1,4 +1,4 @@ -import should from 'should'; +import should = require('should'); import BigNumber from 'bignumber.js'; import sinon from 'sinon'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; diff --git a/modules/sdk-coin-atom/test/unit/atom.ts b/modules/sdk-coin-atom/test/unit/atom.ts index 37d0515dd4..206a961976 100644 --- a/modules/sdk-coin-atom/test/unit/atom.ts +++ b/modules/sdk-coin-atom/test/unit/atom.ts @@ -19,7 +19,7 @@ import { wrwUser, wrwUserDkls, } from '../resources/atom'; -import should from 'should'; +import should = require('should'); describe('ATOM', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-baby/test/unit/baby.ts b/modules/sdk-coin-baby/test/unit/baby.ts index f849e1e7b1..51a45059e7 100644 --- a/modules/sdk-coin-baby/test/unit/baby.ts +++ b/modules/sdk-coin-baby/test/unit/baby.ts @@ -4,7 +4,7 @@ import BigNumber from 'bignumber.js'; import sinon from 'sinon'; import { Baby, Tbaby } from '../../src'; import { TEST_SEND_MANY_TX, TEST_SEND_TX, TEST_TX_WITH_MEMO, address } from '../resources/baby'; -import should from 'should'; +import should = require('should'); import utils from '../../src/lib/utils'; describe('Babylon', function () { diff --git a/modules/sdk-coin-bld/test/unit/bld.ts b/modules/sdk-coin-bld/test/unit/bld.ts index 214a2047ab..855d92ebc2 100644 --- a/modules/sdk-coin-bld/test/unit/bld.ts +++ b/modules/sdk-coin-bld/test/unit/bld.ts @@ -17,7 +17,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/bld'; -import should from 'should'; +import should = require('should'); describe('BLD', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-coreum/test/unit/coreum.ts b/modules/sdk-coin-coreum/test/unit/coreum.ts index 591aa6e2d2..858b892cc4 100644 --- a/modules/sdk-coin-coreum/test/unit/coreum.ts +++ b/modules/sdk-coin-coreum/test/unit/coreum.ts @@ -19,7 +19,7 @@ import { testnetAddress, wrwUser, } from '../resources/tcoreum'; -import should from 'should'; +import should = require('should'); describe('Coreum', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-cronos/test/unit/cronos.ts b/modules/sdk-coin-cronos/test/unit/cronos.ts index 12ddf3234f..a711c3ef95 100644 --- a/modules/sdk-coin-cronos/test/unit/cronos.ts +++ b/modules/sdk-coin-cronos/test/unit/cronos.ts @@ -1,4 +1,4 @@ -import should from 'should'; +import should = require('should'); import BigNumber from 'bignumber.js'; import sinon from 'sinon'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; diff --git a/modules/sdk-coin-dot/test/unit/dot.ts b/modules/sdk-coin-dot/test/unit/dot.ts index 6c8a62f992..ee7f3c367b 100644 --- a/modules/sdk-coin-dot/test/unit/dot.ts +++ b/modules/sdk-coin-dot/test/unit/dot.ts @@ -1,7 +1,7 @@ import { BitGoAPI } from '@bitgo/sdk-api'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; import { randomBytes } from 'crypto'; -import should from 'should'; +import should = require('should'); import { Dot, Tdot, KeyPair } from '../../src'; import * as testData from '../fixtures'; import { chainName, txVersion, genesisHash, specVersion } from '../resources'; diff --git a/modules/sdk-coin-hash/test/unit/hash.ts b/modules/sdk-coin-hash/test/unit/hash.ts index b0a1147c20..b40e5287ad 100644 --- a/modules/sdk-coin-hash/test/unit/hash.ts +++ b/modules/sdk-coin-hash/test/unit/hash.ts @@ -18,7 +18,7 @@ import { testnetAddress, wrwUser, } from '../resources/hash'; -import should from 'should'; +import should = require('should'); describe('HASH', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-initia/test/unit/initia.ts b/modules/sdk-coin-initia/test/unit/initia.ts index d04c7c2c1b..f3aad0ced5 100644 --- a/modules/sdk-coin-initia/test/unit/initia.ts +++ b/modules/sdk-coin-initia/test/unit/initia.ts @@ -1,4 +1,4 @@ -import should from 'should'; +import should = require('should'); import BigNumber from 'bignumber.js'; import sinon from 'sinon'; import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test'; diff --git a/modules/sdk-coin-injective/test/unit/injective.ts b/modules/sdk-coin-injective/test/unit/injective.ts index 6ab81e6274..dd1269fab6 100644 --- a/modules/sdk-coin-injective/test/unit/injective.ts +++ b/modules/sdk-coin-injective/test/unit/injective.ts @@ -18,7 +18,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/injective'; -import should from 'should'; +import should = require('should'); import nock = require('nock'); describe('INJ', function () { diff --git a/modules/sdk-coin-islm/test/unit/islm.ts b/modules/sdk-coin-islm/test/unit/islm.ts index 7bd3929697..03d34cbe73 100644 --- a/modules/sdk-coin-islm/test/unit/islm.ts +++ b/modules/sdk-coin-islm/test/unit/islm.ts @@ -12,7 +12,7 @@ import { TEST_WITHDRAW_REWARDS_TX, address, } from '../resources/islm'; -import should from 'should'; +import should = require('should'); describe('Islm', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-mantra/test/unit/mantra.ts b/modules/sdk-coin-mantra/test/unit/mantra.ts index 90bf2aeb82..2110632bf1 100644 --- a/modules/sdk-coin-mantra/test/unit/mantra.ts +++ b/modules/sdk-coin-mantra/test/unit/mantra.ts @@ -5,7 +5,7 @@ import sinon from 'sinon'; import { Mantra, Tmantra } from '../../src'; import utils from '../../src/lib/utils'; import { TEST_SEND_MANY_TX, TEST_SEND_TX, TEST_TX_WITH_MEMO, address } from '../resources/mantra'; -import should from 'should'; +import should = require('should'); describe('Mantra', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-osmo/test/unit/osmo.ts b/modules/sdk-coin-osmo/test/unit/osmo.ts index 7d9606589e..4d27e0972f 100644 --- a/modules/sdk-coin-osmo/test/unit/osmo.ts +++ b/modules/sdk-coin-osmo/test/unit/osmo.ts @@ -18,7 +18,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/osmo'; -import should from 'should'; +import should = require('should'); describe('OSMO', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-rune/test/unit/rune.ts b/modules/sdk-coin-rune/test/unit/rune.ts index 2d534c5fed..887d2bbd5b 100644 --- a/modules/sdk-coin-rune/test/unit/rune.ts +++ b/modules/sdk-coin-rune/test/unit/rune.ts @@ -10,7 +10,7 @@ import { RuneUtils } from '../../src/lib/utils'; import { mainnetAddress } from '../resources/rune'; import { TEST_SEND_TX, TEST_TX_WITH_MEMO, testnetAddress, wrwUser } from '../resources/trune'; const bech32 = require('bech32-buffer'); -import should from 'should'; +import should = require('should'); describe('Rune', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-sei/test/unit/sei.ts b/modules/sdk-coin-sei/test/unit/sei.ts index 9b4bcaccc7..08cd926949 100644 --- a/modules/sdk-coin-sei/test/unit/sei.ts +++ b/modules/sdk-coin-sei/test/unit/sei.ts @@ -17,7 +17,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/sei'; -import should from 'should'; +import should = require('should'); describe('SEI', function () { let bitgo: TestBitGoAPI; diff --git a/modules/sdk-coin-tia/test/unit/tia.ts b/modules/sdk-coin-tia/test/unit/tia.ts index d676f50d16..7c41b3d201 100644 --- a/modules/sdk-coin-tia/test/unit/tia.ts +++ b/modules/sdk-coin-tia/test/unit/tia.ts @@ -21,7 +21,7 @@ import { TEST_WITHDRAW_REWARDS_TX, wrwUser, } from '../resources/tia'; -import should from 'should'; +import should = require('should'); import nock = require('nock'); describe('TIA', function () { diff --git a/modules/sdk-coin-zeta/test/unit/zeta.ts b/modules/sdk-coin-zeta/test/unit/zeta.ts index 4dc4746421..fcfb8a4f82 100644 --- a/modules/sdk-coin-zeta/test/unit/zeta.ts +++ b/modules/sdk-coin-zeta/test/unit/zeta.ts @@ -20,7 +20,7 @@ import { mockAccountDetailsResponse, wrwUser, } from '../resources/zeta'; -import should from 'should'; +import should = require('should'); import nock = require('nock'); describe('Zeta', function () { diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts index 1f54231ebe..874620dfaa 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts @@ -13,7 +13,7 @@ export abstract class BaseMessageBuilder implements IMessageBuilder { protected type: MessageStandardType; protected signatures: Signature[] = []; protected signers: string[] = []; - protected whitelistedMessageTemplates: string[] = []; + protected whitelistedMessageTemplates: Record = {}; protected metadata?: Record = {}; protected digest?: string; @@ -28,6 +28,7 @@ export abstract class BaseMessageBuilder implements IMessageBuilder { ) { this.coinConfig = coinConfig; this.type = messageType; + this.whitelistedMessageTemplates = this.getWhitelistedMessageTemplates(); } /** @@ -173,4 +174,16 @@ export abstract class BaseMessageBuilder implements IMessageBuilder { }; return this.build(); } + + protected getWhitelistedMessageTemplates(): Record { + // By default, all messages are allowed + return {}; + + // Example of adding a whitelisted message template + // Uncomment and modify as needed + // return { + // midnightGDClaimMsgTemplate: MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, + // // Add more whitelisted templates as needed + // }; + } } diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts index 2d8ef23476..883dd2259c 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts @@ -137,9 +137,11 @@ export interface IMessageBuilder { getPayload(): MessagePayload | undefined; /** - * Checks if the message string is whitelisted + * Checks if the message string is whitelisted. + * Some message standards like EIP-191 allow any message + * * @param messageRaw The raw message string to check - * @return True if the message is whitelisted, false otherwise + * @return True if the message builder allows any message or the message is whitelisted, false otherwise */ isMessageWhitelisted(messageRaw: string): boolean; diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/midnight.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/midnight.ts index d16d8ccc3c..323f23b824 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/midnight.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/midnight.ts @@ -7,6 +7,6 @@ export const MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629 */ export const MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${MIDNIGHT_TNC_HASH}`; -export function getMidnightGlacierDropMsg(cardanoDestAddr: string, allocationAmt: number): string { +export function getMidnightGlacierDropClaimMsg(cardanoDestAddr: string, allocationAmt: number): string { return `STAR ${allocationAmt} to ${cardanoDestAddr} ${MIDNIGHT_TNC_HASH}`; } diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts index 9d5a3e0b6d..0104685f02 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.ts @@ -3,7 +3,6 @@ import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { BaseMessageBuilder } from '../baseMessageBuilder'; import { MessageOptions, MessageStandardType } from '../messageTypes'; import { IMessage } from '../iface'; -import { MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE } from '../midnight'; /** * Builder for string messages @@ -15,10 +14,6 @@ export class SimpleMessageBuilder extends BaseMessageBuilder { */ public constructor(_coinConfig: Readonly) { super(_coinConfig, MessageStandardType.SIMPLE); - this.whitelistedMessageTemplates = [ - MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE, - // Add more templates as needed - ]; } /** diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/utils.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/utils.ts index b0b36304c8..3521253c47 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/utils.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/utils.ts @@ -2,15 +2,15 @@ * Validates a message against a set of whitelisted templates. * The templates can contain placeholders like {{variable}} which will be replaced with a wildcard in the regex. * - * @param whitelistedMessageTemplates - An array of whitelisted message templates. + * @param whitelistedMessageTemplates - A record of whitelisted message templates. * @param {string} messageRaw - The raw message to validate. * @returns {boolean} - Returns true if the message matches any of the whitelisted templates, false otherwise. */ -export function isMessageWhitelisted(whitelistedMessageTemplates: string[], messageRaw: string): boolean { - if (!whitelistedMessageTemplates || whitelistedMessageTemplates.length === 0) { +export function isMessageWhitelisted(whitelistedMessageTemplates: Record, messageRaw: string): boolean { + if (!whitelistedMessageTemplates || !Object.keys(whitelistedMessageTemplates).length) { return true; } - return whitelistedMessageTemplates.some((template) => { + return Object.values(whitelistedMessageTemplates).some((template) => { const regex = new RegExp(`^${template}$`, 's'); // 's' flag to match newlines return regex.test(messageRaw); }); diff --git a/modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts b/modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts index bcd17ffca9..f90acec570 100644 --- a/modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts +++ b/modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts @@ -1,7 +1,7 @@ import { Wallet, IWallet } from '../wallet'; -import { MessageStandardType } from '../utils'; import { MidnightMessageProvider } from './midnightMessageProvider'; import { IMessageProvider, MessageInfo } from './iMessageProvider'; +import { MessageStandardType } from '../../account-lib'; type BulkAccountBasedMessageResponse = { txRequests: Record[]; diff --git a/modules/sdk-core/test/unit/account-lib/mpc/tss/ecdsa/fixtures.ts b/modules/sdk-core/test/unit/account-lib/mpc/tss/ecdsa/fixtures.ts index eafe4d57de..1bc31a204b 100644 --- a/modules/sdk-core/test/unit/account-lib/mpc/tss/ecdsa/fixtures.ts +++ b/modules/sdk-core/test/unit/account-lib/mpc/tss/ecdsa/fixtures.ts @@ -1,4 +1,4 @@ -import { PrivateKey, PublicKey } from 'paillier-bigint'; +import { KeyPair, PrivateKey, PublicKey } from 'paillier-bigint'; const publicKeys: PublicKey[] = [ new PublicKey( @@ -27,7 +27,7 @@ const publicKeys: PublicKey[] = [ ), ]; -export const paillierKeyPairs: { publicKey: PublicKey; privateKey: PrivateKey }[] = [ +export const paillierKeyPairs: KeyPair[] = [ { publicKey: publicKeys[0], privateKey: new PrivateKey( diff --git a/yarn.lock b/yarn.lock index 9d6d4e85b0..3d90bbdcd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -956,6 +956,17 @@ monocle-ts "^2.3.13" newtype-ts "^0.3.5" +"@bitgo/public-types@5.29.0": + version "5.29.0" + resolved "https://registry.npmjs.org/@bitgo/public-types/-/public-types-5.29.0.tgz#4ceae8cf837359b0cb8808f417aef64ae2f52839" + integrity sha512-E1zKNPwDmMKoJq/WC0Igg4ftdGX5DUMu49hi1vqjkdMebFliHRrPiVTSiGwDkFj7kwZbaNORNMqS/Qv4WugV0g== + dependencies: + fp-ts "^2.0.0" + io-ts "npm:@bitgo-forks/io-ts@2.1.4" + io-ts-types "^0.5.16" + monocle-ts "^2.3.13" + newtype-ts "^0.3.5" + "@bitgo/wasm-miniscript@2.0.0-beta.7": version "2.0.0-beta.7" resolved "https://registry.npmjs.org/@bitgo/wasm-miniscript/-/wasm-miniscript-2.0.0-beta.7.tgz"