diff --git a/packages/solana/src/index.ts b/packages/solana/src/index.ts index 2126a308c..6df071078 100644 --- a/packages/solana/src/index.ts +++ b/packages/solana/src/index.ts @@ -61,6 +61,7 @@ export class TurnkeySigner { tx: Transaction | VersionedTransaction, fromAddress: string, organizationId?: string, + timestampMs?: number, ) { const fromKey = new PublicKey(fromAddress); const messageToSign: Buffer = this.getMessageToSign(tx); @@ -68,6 +69,7 @@ export class TurnkeySigner { messageToSign.toString("hex"), fromAddress, organizationId ?? this.organizationId, + timestampMs, ); const signature = `${signRawPayloadResult?.r}${signRawPayloadResult?.s}`; @@ -84,11 +86,13 @@ export class TurnkeySigner { message: Uint8Array, fromAddress: string, organizationId?: string, + timestampMs?: number, ): Promise { const signRawPayloadResult = await this.signRawPayload( Buffer.from(message).toString("hex"), fromAddress, organizationId, + timestampMs, ); return Buffer.from( `${signRawPayloadResult?.r}${signRawPayloadResult?.s}`, @@ -107,6 +111,7 @@ export class TurnkeySigner { tx: Transaction | VersionedTransaction, fromAddress: string, organizationId?: string, + timestampMs?: number, ): Promise { const payloadToSign = Buffer.from( tx.serialize({ @@ -119,6 +124,7 @@ export class TurnkeySigner { payloadToSign, fromAddress, organizationId, + timestampMs, ); const decodedTransaction = Buffer.from(signedTransaction, "hex"); @@ -135,12 +141,13 @@ export class TurnkeySigner { unsignedTransaction: string, signWith: string, organizationId?: string, + timestampMs?: number ) { if (this.client instanceof TurnkeyClient) { const response = await this.client.signTransaction({ type: "ACTIVITY_TYPE_SIGN_TRANSACTION_V2", organizationId: organizationId ?? this.organizationId, - timestampMs: String(Date.now()), + timestampMs: timestampMs ? String(timestampMs) : String(Date.now()), parameters: { signWith, unsignedTransaction, @@ -175,12 +182,13 @@ export class TurnkeySigner { payload: string, signWith: string, organizationId?: string, + timestampMs?: number, ) { if (this.client instanceof TurnkeyClient) { const response = await this.client.signRawPayload({ type: "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2", organizationId: organizationId ?? this.organizationId, - timestampMs: String(Date.now()), + timestampMs: timestampMs ? String(timestampMs) : String(Date.now()), parameters: { signWith, payload, @@ -221,12 +229,13 @@ export class TurnkeySigner { payloads: string[], signWith: string, organizationId?: string, + timestampMs?: number, ) { if (this.client instanceof TurnkeyClient) { const response = await this.client.signRawPayloads({ type: "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS", organizationId: organizationId ?? this.organizationId, - timestampMs: String(Date.now()), + timestampMs: timestampMs ? String(timestampMs) : String(Date.now()), parameters: { signWith, payloads, diff --git a/packages/viem/src/index.ts b/packages/viem/src/index.ts index f2bdfaf0d..3547c97b7 100644 --- a/packages/viem/src/index.ts +++ b/packages/viem/src/index.ts @@ -144,8 +144,8 @@ export function createAccountWithAddress(input: { transaction: TTransactionSerializable, options?: { serializer?: - | SerializeTransactionFn - | undefined; + | SerializeTransactionFn + | undefined; }, ): Promise { const serializer: SerializeTransactionFn = @@ -300,8 +300,8 @@ export async function createApiKeyAccount( transaction: TTransactionSerializable, options?: { serializer?: - | SerializeTransactionFn - | undefined; + | SerializeTransactionFn + | undefined; }, ): Promise { const serializer: SerializeTransactionFn = @@ -338,6 +338,7 @@ export async function signAuthorization( parameters: TSignAuthorizationParameters, organizationId: string, signWith: string, + timestampMs?: number, ): Promise { const { chainId, nonce, to = "object" } = parameters; const address = parameters.contractAddress ?? parameters.address; @@ -360,6 +361,7 @@ export async function signAuthorization( organizationId, signWith, to, + timestampMs, ); if (to === "object") @@ -379,6 +381,7 @@ export async function signMessage( message: SignableMessage, organizationId: string, signWith: string, + timestampMs?: number, ): Promise { const hashedMessage = hashMessage(message); const signedMessage = await signMessageWithErrorWrapping( @@ -386,6 +389,8 @@ export async function signMessage( hashedMessage, organizationId, signWith, + undefined, + timestampMs, ); return `${signedMessage}` as Hex; } @@ -435,6 +440,7 @@ export async function signTypedData( data: TypedData | { [key: string]: unknown }, organizationId: string, signWith: string, + timestampMs?: number, ): Promise { const hashToSign = hashTypedData(data as HashTypedDataParameters); @@ -444,6 +450,7 @@ export async function signTypedData( organizationId, signWith, "hex", + timestampMs, )) as Hex; } @@ -452,6 +459,7 @@ async function signTransactionWithErrorWrapping( unsignedTransaction: string, organizationId: string, signWith: string, + timestampMs?: number ): Promise { let signedTx: string; try { @@ -460,6 +468,7 @@ async function signTransactionWithErrorWrapping( unsignedTransaction, organizationId, signWith, + timestampMs, ); } catch (error: any) { // Wrap Turnkey error in Viem-specific error @@ -492,6 +501,7 @@ async function signTransactionImpl( unsignedTransaction: string, organizationId: string, signWith: string, + timestampMs?: number ): Promise { if (client instanceof TurnkeyClient) { const { activity } = await client.signTransaction({ @@ -502,7 +512,7 @@ async function signTransactionImpl( type: "TRANSACTION_TYPE_ETHEREUM", unsignedTransaction: unsignedTransaction, }, - timestampMs: String(Date.now()), // millisecond timestamp + timestampMs: timestampMs ? String(timestampMs) : String(Date.now()), // millisecond timestamp }); assertActivityCompleted(activity); @@ -530,6 +540,7 @@ async function signMessageWithErrorWrapping( organizationId: string, signWith: string, to?: TSignatureFormat, + timestampMs?: number, ): Promise { let signedMessage: TSignMessageResult; @@ -540,6 +551,7 @@ async function signMessageWithErrorWrapping( organizationId, signWith, to, + timestampMs, ); } catch (error: any) { // Wrap Turnkey error in Viem-specific error @@ -573,6 +585,7 @@ async function signMessageImpl( organizationId: string, signWith: string, to?: TSignatureFormat, + timestampMs?: number, ): Promise { let result: TSignature; @@ -586,7 +599,7 @@ async function signMessageImpl( encoding: "PAYLOAD_ENCODING_HEXADECIMAL", hashFunction: "HASH_FUNCTION_NO_OP", }, - timestampMs: String(Date.now()), // millisecond timestamp + timestampMs: timestampMs ? String(timestampMs) : String(Date.now()), // millisecond timestamp }); assertActivityCompleted(activity);