UNPKG

@reservoir0x/relay-sdk

Version:

Relay is the Fastest and Cheapest Way to Bridge and Transact Across Chains.

95 lines 4.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sendUsd = exports.prepareHyperliquidSignatureStep = void 0; const viem_1 = require("viem"); const axios_1 = require("axios"); const logger_js_1 = require("./logger.js"); function prepareHyperliquidSignatureStep(steps, chainId) { const items = steps[0]?.items; const amount = items[0]?.data?.action?.parameters?.amount; const destination = items[0]?.data?.action?.parameters?.destination; const signatureStep = { id: 'sign', action: 'Confirm transaction in your wallet', description: `Sign a message to confirm the transaction`, kind: 'signature', items: [ { status: 'incomplete', data: { sign: { signatureKind: 'eip712', domain: { name: 'HyperliquidSignTransaction', version: '1', chainId: chainId, verifyingContract: '0x0000000000000000000000000000000000000000' }, types: { 'HyperliquidTransaction:UsdSend': [ { name: 'hyperliquidChain', type: 'string' }, { name: 'destination', type: 'string' }, { name: 'amount', type: 'string' }, { name: 'time', type: 'uint64' } ], EIP712Domain: [ { name: 'name', type: 'string' }, { name: 'version', type: 'string' }, { name: 'chainId', type: 'uint256' }, { name: 'verifyingContract', type: 'address' } ] }, primaryType: 'HyperliquidTransaction:UsdSend', value: { type: 'usdSend', signatureChainId: `0x${chainId.toString(16)}`, hyperliquidChain: 'Mainnet', destination: destination?.toLowerCase(), amount, time: new Date().getTime() } } }, check: { endpoint: `/intents/status?requestId=${steps[0]?.requestId}`, method: 'GET' } } ], requestId: steps[0]?.requestId, depositAddress: steps[0]?.depositAddress }; return signatureStep; } exports.prepareHyperliquidSignatureStep = prepareHyperliquidSignatureStep; async function sendUsd(client, signature, stepItem) { client.log(['Execute Steps: Sending signature to Hyperliquid', signature], logger_js_1.LogLevel.Verbose); const { r, s, v } = (0, viem_1.parseSignature)(signature); const currentTime = stepItem?.data?.sign?.value?.time ?? new Date().getTime(); const res = await axios_1.default.post('https://api.hyperliquid.xyz/exchange', { signature: { r, s, v: Number(v ?? 0n) }, nonce: currentTime, action: { type: stepItem?.data?.sign?.value?.type, signatureChainId: `0x${stepItem?.data?.sign?.domain?.chainId?.toString(16)}`, hyperliquidChain: 'Mainnet', destination: stepItem?.data?.sign?.value?.destination?.toLowerCase(), amount: stepItem?.data?.sign?.value?.amount, time: currentTime } }); if (!res || !res.data || (res && res.status !== 200) || res.data.status != 'ok') { throw 'Failed to send signature to HyperLiquid'; } client.log(['Execute Steps: Signature sent to Hyperliquid', res.data], logger_js_1.LogLevel.Verbose); return res.data; } exports.sendUsd = sendUsd; //# sourceMappingURL=hyperliquid.js.map