diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index f53fdde52a..dd7112b08e 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -84,7 +84,7 @@ export class LocalRelayer extends ProviderRelayer implements Relayer { page: proto.Page transactions: proto.MetaTxnLog[] }> { - return { page: { page: 0, pageSize: 100 }, transactions: [] } + return { page: { page: 0, pageSize: 100, more: false, column: '', sort: [] }, transactions: [] } } async getTransactionCost( @@ -98,7 +98,7 @@ export class LocalRelayer extends ProviderRelayer implements Relayer { } async listGasSponsors(args: proto.ListGasSponsorsArgs): Promise { - return { page: { page: 0, pageSize: 100 }, gasSponsors: [] } + return { page: { page: 0, pageSize: 100, more: false, column: '', sort: [] }, gasSponsors: [] } } async addGasSponsor(args: proto.AddGasSponsorArgs): Promise { diff --git a/packages/relayer/src/rpc-relayer/relayer.gen.ts b/packages/relayer/src/rpc-relayer/relayer.gen.ts index 86d38dee90..6f0fe2e54c 100644 --- a/packages/relayer/src/rpc-relayer/relayer.gen.ts +++ b/packages/relayer/src/rpc-relayer/relayer.gen.ts @@ -1,7 +1,7 @@ /* eslint-disable */ -// sequence-relayer v0.4.1 7f8a4b83b00e0b6849c76c2ff0e23931e26b3d9f +// sequence-relayer v0.4.1 0a2503bc893179ba968b0015d7580aabf6a88dd4 // -- -// Code generated by Webrpc-gen@v0.31.2 with typescript generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.32.2 with typescript generator. DO NOT EDIT. // // webrpc-gen -schema=relayer.ridl -target=typescript -client -out=./clients/relayer.gen.ts -compat @@ -12,7 +12,7 @@ export const WebrpcVersion = 'v1' export const WebrpcSchemaVersion = 'v0.4.1' // Schema hash generated from your RIDL schema -export const WebrpcSchemaHash = '7f8a4b83b00e0b6849c76c2ff0e23931e26b3d9f' +export const WebrpcSchemaHash = '0a2503bc893179ba968b0015d7580aabf6a88dd4' // // Client interface @@ -68,6 +68,23 @@ export interface RelayerClient { feeOptions(req: FeeOptionsArgs, headers?: object, signal?: AbortSignal): Promise + /** + * Bridge gas endpoints for S2S calls + * Used for bridge fees (e.g., LayerZero messaging fees) that require msg.value to be fronted at runtime. + * bridgeGas will be included in fee calculation so the relayer gets reimbursed. + */ + sendMetaTxnWithBridgeGas( + req: SendMetaTxnWithBridgeGasArgs, + headers?: object, + signal?: AbortSignal + ): Promise + + feeOptionsWithBridgeGas( + req: FeeOptionsWithBridgeGasArgs, + headers?: object, + signal?: AbortSignal + ): Promise + /** * TODO: deprecated, to be removed by https://github.com/0xsequence/stack/pull/356 at a later date */ @@ -77,20 +94,20 @@ export interface RelayerClient { signal?: AbortSignal ): Promise - getMetaTransactions(req: GetMetaTransactionsArgs, headers?: object, signal?: AbortSignal): Promise - - getTransactionCost(req: GetTransactionCostArgs, headers?: object, signal?: AbortSignal): Promise - /** - * Sent transactions from an account. If filter is omitted then it will return all transactions. + * + * Sender administration + * */ - sentTransactions(req: SentTransactionsArgs, headers?: object, signal?: AbortSignal): Promise + startSender(req: StartSenderArgs, headers?: object, signal?: AbortSignal): Promise - /** - * Pending transactions waiting to be mined for an account. This endpoint is just a sugar of `SentTransactions` - * with the filter set to pending: true. - */ - pendingTransactions(req: PendingTransactionsArgs, headers?: object, signal?: AbortSignal): Promise + stopSender(req: StopSenderArgs, headers?: object, signal?: AbortSignal): Promise + + repairSender(req: RepairSenderArgs, headers?: object, signal?: AbortSignal): Promise + + getMetaTransactions(req: GetMetaTransactionsArgs, headers?: object, signal?: AbortSignal): Promise + + getTransactionCost(req: GetTransactionCostArgs, headers?: object, signal?: AbortSignal): Promise /** * Legacy Gas Tank @@ -125,7 +142,7 @@ export interface RelayerClient { ): Promise /** - * Gas Sponsorship + * Project-Level Gas Sponsorship */ listGasSponsors(req: ListGasSponsorsArgs, headers?: object, signal?: AbortSignal): Promise @@ -137,6 +154,39 @@ export interface RelayerClient { removeGasSponsor(req: RemoveGasSponsorArgs, headers?: object, signal?: AbortSignal): Promise + /** + * Ecosystem-level Gas Sponsorship + */ + listEcosystemGasSponsors( + req: ListEcosystemGasSponsorsArgs, + headers?: object, + signal?: AbortSignal + ): Promise + + getEcosystemGasSponsor( + req: GetEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal + ): Promise + + addEcosystemGasSponsor( + req: AddEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal + ): Promise + + updateEcosystemGasSponsor( + req: UpdateEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal + ): Promise + + removeEcosystemGasSponsor( + req: RemoveEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal + ): Promise + /** * Gas Sponsor Lookup */ @@ -154,6 +204,12 @@ export interface RelayerClient { // Schema types // +export enum RepairOperation { + SKIP = 'SKIP', + REQUEUE = 'REQUEUE', + DROP = 'DROP' +} + export enum ETHTxnStatus { UNKNOWN = 'UNKNOWN', DROPPED = 'DROPPED', @@ -162,7 +218,8 @@ export enum ETHTxnStatus { SUCCEEDED = 'SUCCEEDED', PARTIALLY_FAILED = 'PARTIALLY_FAILED', FAILED = 'FAILED', - PENDING_PRECONDITION = 'PENDING_PRECONDITION' + PENDING_PRECONDITION = 'PENDING_PRECONDITION', + MINED = 'MINED' } export enum TransferType { @@ -189,7 +246,7 @@ export enum FeeTokenType { ERC1155_TOKEN = 'ERC1155_TOKEN' } -export enum SortOrder { +export enum Order { DESC = 'DESC', ASC = 'ASC' } @@ -218,7 +275,31 @@ export interface SenderStatus { index: number address: string etherBalance: number + enabled: boolean active: boolean + nonce?: NonceStatus + current?: CurrentStatus +} + +export interface NonceStatus { + chain: number + mempool: number +} + +export interface CurrentStatus { + transaction: string + first: TransactionStatus + latest?: TransactionStatus +} + +export interface TransactionStatus { + transaction: string + gas: number + gasPrice: string + priorityFee: string + time: string + age: string + error?: string } export interface RuntimeChecks {} @@ -255,6 +336,7 @@ export interface GasSponsor { id: number gasTankId: number projectId: number + ecosystemId: number chainId: number address: string name: string @@ -297,6 +379,7 @@ export interface MetaTxnLog { minedAt: string target: string input: string + bridgeGas?: string txnArgs: { [key: string]: any } txnReceipt?: { [key: string]: any } walletAddress: string @@ -370,11 +453,6 @@ export interface TxnLogTransfer { amounts: Array } -export interface SentTransactionsFilter { - pending?: boolean - failed?: boolean -} - export interface SimulateResult { executed: boolean succeeded: boolean @@ -411,19 +489,16 @@ export interface FeeToken { } export interface Page { - pageSize?: number - page?: number - more?: boolean - totalRecords?: number - column?: string - before?: any - after?: any - sort?: Array + pageSize: number + page: number + more: boolean + column: string + sort: Array } -export interface SortBy { +export interface Sort { column: string - order: SortOrder + order: Order } export interface PingArgs {} @@ -534,6 +609,33 @@ export interface FeeOptionsReturn { quote?: string } +export interface SendMetaTxnWithBridgeGasArgs { + call: MetaTxn + quote?: string + projectID?: number + bridgeGas: string + preconditions?: Array +} + +export interface SendMetaTxnWithBridgeGasReturn { + status: boolean + txnHash: string +} + +export interface FeeOptionsWithBridgeGasArgs { + wallet: string + to: string + data: string + simulate?: boolean + bridgeGas: string +} + +export interface FeeOptionsWithBridgeGasReturn { + options: Array + sponsored: boolean + quote?: string +} + export interface GetMetaTxnNetworkFeeOptionsArgs { walletConfig: any payload: string @@ -543,6 +645,26 @@ export interface GetMetaTxnNetworkFeeOptionsReturn { options: Array } +export interface StartSenderArgs { + sender: number +} + +export interface StartSenderReturn {} + +export interface StopSenderArgs { + sender: number +} + +export interface StopSenderReturn {} + +export interface RepairSenderArgs { + sender: number + nonce: number + operation: RepairOperation +} + +export interface RepairSenderReturn {} + export interface GetMetaTransactionsArgs { projectId: number page?: Page @@ -563,25 +685,6 @@ export interface GetTransactionCostReturn { cost: number } -export interface SentTransactionsArgs { - filter?: SentTransactionsFilter - page?: Page -} - -export interface SentTransactionsReturn { - page: Page - transactions: Array -} - -export interface PendingTransactionsArgs { - page?: Page -} - -export interface PendingTransactionsReturn { - page: Page - transactions: Array -} - export interface GetGasTankArgs { id: number } @@ -703,6 +806,58 @@ export interface RemoveGasSponsorReturn { status: boolean } +export interface ListEcosystemGasSponsorsArgs { + ecosystemId: number + page?: Page +} + +export interface ListEcosystemGasSponsorsReturn { + page: Page + gasSponsors: Array +} + +export interface GetEcosystemGasSponsorArgs { + ecosystemId: number + id: number +} + +export interface GetEcosystemGasSponsorReturn { + gasSponsor: GasSponsor +} + +export interface AddEcosystemGasSponsorArgs { + ecosystemId: number + address: string + name?: string + active?: boolean +} + +export interface AddEcosystemGasSponsorReturn { + status: boolean + gasSponsor: GasSponsor +} + +export interface UpdateEcosystemGasSponsorArgs { + ecosystemId: number + id: number + name?: string + active?: boolean +} + +export interface UpdateEcosystemGasSponsorReturn { + status: boolean + gasSponsor: GasSponsor +} + +export interface RemoveEcosystemGasSponsorArgs { + ecosystemId: number + id: number +} + +export interface RemoveEcosystemGasSponsorReturn { + status: boolean +} + export interface AddressGasSponsorsArgs { address: string page?: Page @@ -763,12 +918,15 @@ export class Relayer implements RelayerClient { updateMetaTxnGasLimits: (req: UpdateMetaTxnGasLimitsArgs) => ['Relayer', 'updateMetaTxnGasLimits', req] as const, feeTokens: () => ['Relayer', 'feeTokens'] as const, feeOptions: (req: FeeOptionsArgs) => ['Relayer', 'feeOptions', req] as const, + sendMetaTxnWithBridgeGas: (req: SendMetaTxnWithBridgeGasArgs) => ['Relayer', 'sendMetaTxnWithBridgeGas', req] as const, + feeOptionsWithBridgeGas: (req: FeeOptionsWithBridgeGasArgs) => ['Relayer', 'feeOptionsWithBridgeGas', req] as const, getMetaTxnNetworkFeeOptions: (req: GetMetaTxnNetworkFeeOptionsArgs) => ['Relayer', 'getMetaTxnNetworkFeeOptions', req] as const, + startSender: (req: StartSenderArgs) => ['Relayer', 'startSender', req] as const, + stopSender: (req: StopSenderArgs) => ['Relayer', 'stopSender', req] as const, + repairSender: (req: RepairSenderArgs) => ['Relayer', 'repairSender', req] as const, getMetaTransactions: (req: GetMetaTransactionsArgs) => ['Relayer', 'getMetaTransactions', req] as const, getTransactionCost: (req: GetTransactionCostArgs) => ['Relayer', 'getTransactionCost', req] as const, - sentTransactions: (req: SentTransactionsArgs) => ['Relayer', 'sentTransactions', req] as const, - pendingTransactions: (req: PendingTransactionsArgs) => ['Relayer', 'pendingTransactions', req] as const, getGasTank: (req: GetGasTankArgs) => ['Relayer', 'getGasTank', req] as const, addGasTank: (req: AddGasTankArgs) => ['Relayer', 'addGasTank', req] as const, updateGasTank: (req: UpdateGasTankArgs) => ['Relayer', 'updateGasTank', req] as const, @@ -784,6 +942,11 @@ export class Relayer implements RelayerClient { addGasSponsor: (req: AddGasSponsorArgs) => ['Relayer', 'addGasSponsor', req] as const, updateGasSponsor: (req: UpdateGasSponsorArgs) => ['Relayer', 'updateGasSponsor', req] as const, removeGasSponsor: (req: RemoveGasSponsorArgs) => ['Relayer', 'removeGasSponsor', req] as const, + listEcosystemGasSponsors: (req: ListEcosystemGasSponsorsArgs) => ['Relayer', 'listEcosystemGasSponsors', req] as const, + getEcosystemGasSponsor: (req: GetEcosystemGasSponsorArgs) => ['Relayer', 'getEcosystemGasSponsor', req] as const, + addEcosystemGasSponsor: (req: AddEcosystemGasSponsorArgs) => ['Relayer', 'addEcosystemGasSponsor', req] as const, + updateEcosystemGasSponsor: (req: UpdateEcosystemGasSponsorArgs) => ['Relayer', 'updateEcosystemGasSponsor', req] as const, + removeEcosystemGasSponsor: (req: RemoveEcosystemGasSponsorArgs) => ['Relayer', 'removeEcosystemGasSponsor', req] as const, addressGasSponsors: (req: AddressGasSponsorsArgs) => ['Relayer', 'addressGasSponsors', req] as const, getProjectBalance: (req: GetProjectBalanceArgs) => ['Relayer', 'getProjectBalance', req] as const, adjustProjectBalance: (req: AdjustProjectBalanceArgs) => ['Relayer', 'adjustProjectBalance', req] as const @@ -962,6 +1125,40 @@ export class Relayer implements RelayerClient { ) } + sendMetaTxnWithBridgeGas = ( + req: SendMetaTxnWithBridgeGasArgs, + headers?: object, + signal?: AbortSignal + ): Promise => { + return this.fetch(this.url('SendMetaTxnWithBridgeGas'), createHttpRequest(JsonEncode(req), headers, signal)).then( + res => { + return buildResponse(res).then(_data => { + return JsonDecode(_data, 'SendMetaTxnWithBridgeGasReturn') + }) + }, + error => { + throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) + } + ) + } + + feeOptionsWithBridgeGas = ( + req: FeeOptionsWithBridgeGasArgs, + headers?: object, + signal?: AbortSignal + ): Promise => { + return this.fetch(this.url('FeeOptionsWithBridgeGas'), createHttpRequest(JsonEncode(req), headers, signal)).then( + res => { + return buildResponse(res).then(_data => { + return JsonDecode(_data, 'FeeOptionsWithBridgeGasReturn') + }) + }, + error => { + throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) + } + ) + } + getMetaTxnNetworkFeeOptions = ( req: GetMetaTxnNetworkFeeOptionsArgs, headers?: object, @@ -979,15 +1176,11 @@ export class Relayer implements RelayerClient { ) } - getMetaTransactions = ( - req: GetMetaTransactionsArgs, - headers?: object, - signal?: AbortSignal - ): Promise => { - return this.fetch(this.url('GetMetaTransactions'), createHttpRequest(JsonEncode(req), headers, signal)).then( + startSender = (req: StartSenderArgs, headers?: object, signal?: AbortSignal): Promise => { + return this.fetch(this.url('StartSender'), createHttpRequest(JsonEncode(req), headers, signal)).then( res => { return buildResponse(res).then(_data => { - return JsonDecode(_data, 'GetMetaTransactionsReturn') + return JsonDecode(_data, 'StartSenderReturn') }) }, error => { @@ -996,15 +1189,11 @@ export class Relayer implements RelayerClient { ) } - getTransactionCost = ( - req: GetTransactionCostArgs, - headers?: object, - signal?: AbortSignal - ): Promise => { - return this.fetch(this.url('GetTransactionCost'), createHttpRequest(JsonEncode(req), headers, signal)).then( + stopSender = (req: StopSenderArgs, headers?: object, signal?: AbortSignal): Promise => { + return this.fetch(this.url('StopSender'), createHttpRequest(JsonEncode(req), headers, signal)).then( res => { return buildResponse(res).then(_data => { - return JsonDecode(_data, 'GetTransactionCostReturn') + return JsonDecode(_data, 'StopSenderReturn') }) }, error => { @@ -1013,11 +1202,11 @@ export class Relayer implements RelayerClient { ) } - sentTransactions = (req: SentTransactionsArgs, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('SentTransactions'), createHttpRequest(JsonEncode(req), headers, signal)).then( + repairSender = (req: RepairSenderArgs, headers?: object, signal?: AbortSignal): Promise => { + return this.fetch(this.url('RepairSender'), createHttpRequest(JsonEncode(req), headers, signal)).then( res => { return buildResponse(res).then(_data => { - return JsonDecode(_data, 'SentTransactionsReturn') + return JsonDecode(_data, 'RepairSenderReturn') }) }, error => { @@ -1026,15 +1215,32 @@ export class Relayer implements RelayerClient { ) } - pendingTransactions = ( - req: PendingTransactionsArgs, + getMetaTransactions = ( + req: GetMetaTransactionsArgs, headers?: object, signal?: AbortSignal - ): Promise => { - return this.fetch(this.url('PendingTransactions'), createHttpRequest(JsonEncode(req), headers, signal)).then( + ): Promise => { + return this.fetch(this.url('GetMetaTransactions'), createHttpRequest(JsonEncode(req), headers, signal)).then( res => { return buildResponse(res).then(_data => { - return JsonDecode(_data, 'PendingTransactionsReturn') + return JsonDecode(_data, 'GetMetaTransactionsReturn') + }) + }, + error => { + throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) + } + ) + } + + getTransactionCost = ( + req: GetTransactionCostArgs, + headers?: object, + signal?: AbortSignal + ): Promise => { + return this.fetch(this.url('GetTransactionCost'), createHttpRequest(JsonEncode(req), headers, signal)).then( + res => { + return buildResponse(res).then(_data => { + return JsonDecode(_data, 'GetTransactionCostReturn') }) }, error => { @@ -1215,6 +1421,91 @@ export class Relayer implements RelayerClient { ) } + listEcosystemGasSponsors = ( + req: ListEcosystemGasSponsorsArgs, + headers?: object, + signal?: AbortSignal + ): Promise => { + return this.fetch(this.url('ListEcosystemGasSponsors'), createHttpRequest(JsonEncode(req), headers, signal)).then( + res => { + return buildResponse(res).then(_data => { + return JsonDecode(_data, 'ListEcosystemGasSponsorsReturn') + }) + }, + error => { + throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) + } + ) + } + + getEcosystemGasSponsor = ( + req: GetEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal + ): Promise => { + return this.fetch(this.url('GetEcosystemGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( + res => { + return buildResponse(res).then(_data => { + return JsonDecode(_data, 'GetEcosystemGasSponsorReturn') + }) + }, + error => { + throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) + } + ) + } + + addEcosystemGasSponsor = ( + req: AddEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal + ): Promise => { + return this.fetch(this.url('AddEcosystemGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( + res => { + return buildResponse(res).then(_data => { + return JsonDecode(_data, 'AddEcosystemGasSponsorReturn') + }) + }, + error => { + throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) + } + ) + } + + updateEcosystemGasSponsor = ( + req: UpdateEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal + ): Promise => { + return this.fetch(this.url('UpdateEcosystemGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( + res => { + return buildResponse(res).then(_data => { + return JsonDecode(_data, 'UpdateEcosystemGasSponsorReturn') + }) + }, + error => { + throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) + } + ) + } + + removeEcosystemGasSponsor = ( + req: RemoveEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal + ): Promise => { + return this.fetch(this.url('RemoveEcosystemGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( + res => { + return buildResponse(res).then(_data => { + return JsonDecode(_data, 'RemoveEcosystemGasSponsorReturn') + }) + }, + error => { + throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) + } + ) + } + addressGasSponsors = ( req: AddressGasSponsorsArgs, headers?: object, @@ -1299,6 +1590,7 @@ export type Fetch = (input: RequestInfo, init?: RequestInit) => Promise