UNPKG

@debridge-finance/desdk

Version:

Send, track and claim arbitrary cross-chain messages over the deBridge protocol programmatically

70 lines 2.46 kB
import { ethers } from "ethers"; import { SubmissionStatus } from "./submission"; export class DeBridgeApiStatus { async getStatus(submissionId) { const url = [ `https://api.debridge.finance`, `/api/Transactions/GetFullSubmissionInfo?filter=${submissionId}`, ].join(""); const response = await fetch(url); const data = (await response.json()); if (data.send.isExecuted === true) return SubmissionStatus.CLAIMED; else return SubmissionStatus.WAITING_CLAIM; } } export class DummySignatureStorage { async getSignatures() { return ["0x1", "0x2", "0x3", "0x4", "0x5", "0x6", "0x7", "0x8"]; } } export class FixedSignatureStorage { constructor(_signatures) { this._signatures = _signatures; } async getSignatures() { return this._signatures; } } export class SignersSignatureStorage { constructor(_signers) { this._signers = _signers; } async getSignatures(submissionId) { const signatures = []; // see the note: https://docs.ethers.io/v5/api/signer/#Signer-signMessage // submissionId is a string (0x12[...]), but we must sign the bytes const bytesToSign = ethers.getBytes(submissionId); // Sort signers by their addresses to ensure consistent order const sortedSigners = await Promise.all(this._signers.map(async (signer) => ({ signer, address: await signer.getAddress(), }))); sortedSigners.sort((a, b) => BigInt(a.address) < BigInt(b.address) ? -1 : 1); // Collect signatures from sorted signers for (const { signer } of sortedSigners) { const signature = await signer.signMessage(bytesToSign); signatures.push(signature); } return signatures; } } export class IPFSSignatureStorage { async getSignatures() { throw new Error("IPFSSignatureStorage not implemented"); return []; } } export class DeBridgeApiSignatureStorage { async getSignatures(submissionId) { const url = [ `https://api.debridge.finance`, `/api/SubmissionConfirmations/getForSubmission?submissionId=${submissionId}`, ].join(""); const response = await fetch(url); const data = (await response.json()); return data.map((v) => v.signature); } } //# sourceMappingURL=connectors.js.map