diff --git a/lib/firefly.ts b/lib/firefly.ts index ea7b9fd..d1c7a78 100644 --- a/lib/firefly.ts +++ b/lib/firefly.ts @@ -82,7 +82,7 @@ import { FireFlyDeployContractRequest, FireFlyDeployContractResponse, FireFlyWebSocketConnectCallback, - FireFlyGetOperationOptions, + FireFlyGetWithStatus, } from './interfaces'; import { FireFlyWebSocket, FireFlyWebSocketCallback } from './websocket'; import HttpBase, { mapConfig } from './http'; @@ -207,6 +207,13 @@ export default class FireFly extends HttpBase { return this.getMany('/subscriptions', filter, options); } + getSubscription( + id: string, + options?: FireFlyGetWithStatus, + ): Promise { + return this.getOne(`/subscriptions/${id}`, options); + } + replaceSubscription( sub: FireFlySubscriptionRequest, options?: FireFlyReplaceOptions, @@ -223,7 +230,7 @@ export default class FireFly extends HttpBase { } findData( - filter?: FireFlyDataFilter, + filter?: FireFlyDataFilter | URLSearchParams, options?: FireFlyGetOptions, ): Promise { return this.getMany(`/data`, filter, options); @@ -572,7 +579,7 @@ export default class FireFly extends HttpBase { getOperation( id: string, - options?: FireFlyGetOperationOptions, + options?: FireFlyGetWithStatus, ): Promise { const params = { fetchstatus: options?.fetchstatus }; return this.getOne(`/operations/${id}`, options, params); diff --git a/lib/http.ts b/lib/http.ts index ff0c5b7..289c1b5 100644 --- a/lib/http.ts +++ b/lib/http.ts @@ -9,6 +9,7 @@ import { FireFlyUpdateOptions, FireFlyDeleteOptions, FireFlyIdempotencyError, + FireFlyGetWithStatus, } from './interfaces'; function isSuccess(status: number) { @@ -18,6 +19,7 @@ function isSuccess(status: number) { export function mapConfig( options: | FireFlyGetOptions + | FireFlyGetWithStatus | FireFlyUpdateOptions | FireFlyReplaceOptions | FireFlyCreateOptions @@ -29,6 +31,7 @@ export function mapConfig( ...options?.requestConfig, params, }; + if (options !== undefined) { if ('confirm' in options) { config.params = { @@ -42,6 +45,12 @@ export function mapConfig( publish: options.publish, }; } + if ('fetchstatus' in options) { + config.params = { + ...config.params, + fetchstatus: options.fetchstatus, + }; + } } return config; } diff --git a/lib/interfaces.ts b/lib/interfaces.ts index 7fa9c70..b8a0e4b 100644 --- a/lib/interfaces.ts +++ b/lib/interfaces.ts @@ -37,6 +37,10 @@ export interface FireFlyCreateOptions extends FireFlyBaseHttpOptions { publish?: boolean; } +export interface FireFlyGetWithStatus extends FireFlyGetOptions { + fetchstatus?: string; +} + export interface FireFlyOptionsInput { host: string; namespace?: string; @@ -129,7 +133,7 @@ export type FireFlySubscriptionRequest = export type FireFlySubscriptionResponse = Required< operations['getSubscriptionByID']['responses']['200']['content']['application/json'] ->; +> & { status?: any }; export type FireFlyEventResponse = Required< operations['getEventByID']['responses']['200']['content']['application/json'] >; @@ -181,6 +185,17 @@ export interface FireFlyEventDelivery extends Omit }; } +export interface FireFlyEventBatchDelivery { + type: 'event_batch'; + id: string; + subscription: { + id: string; + name: string; + namespace: string; + }; + events: FireFlyEventDelivery[]; +} + // Datatypes export type FireFlyDatatypeFilter = operations['getDatatypes']['parameters']['query']; @@ -282,10 +297,6 @@ export type FireFlyTokenApprovalResponse = typeof approvals[0]; // Operations + Transactions -export interface FireFlyGetOperationOptions extends FireFlyGetOptions { - fetchstatus?: string; -} - export type FireFlyOperationFilter = operations['getOps']['parameters']['query']; export type FireFlyTransactionFilter = operations['getTxns']['parameters']['query']; diff --git a/lib/websocket.ts b/lib/websocket.ts index 59377a5..f3d79b0 100644 --- a/lib/websocket.ts +++ b/lib/websocket.ts @@ -5,6 +5,7 @@ import { FireFlyEphemeralSubscription, FireFlyWebSocketOptions, FireFlyEventDelivery, + FireFlyEventBatchDelivery, } from './interfaces'; import Logger from './logger'; @@ -19,7 +20,10 @@ function buildEphemeralQueryParams(sub: FireFlyEphemeralSubscription) { } export interface FireFlyWebSocketCallback { - (socket: FireFlyWebSocket, data: FireFlyEventDelivery): void | Promise; + ( + socket: FireFlyWebSocket, + data: FireFlyEventDelivery | FireFlyEventBatchDelivery, + ): void | Promise; } export class FireFlyWebSocket { @@ -166,7 +170,7 @@ export class FireFlyWebSocket { } } - ack(event: FireFlyEventDelivery) { + ack(event: FireFlyEventDelivery | FireFlyEventBatchDelivery) { if (this.socket !== undefined && event.id !== undefined) { this.socket.send( JSON.stringify({ @@ -179,7 +183,7 @@ export class FireFlyWebSocket { } async close(wait?: boolean): Promise { - const closedPromise = new Promise(resolve => { + const closedPromise = new Promise((resolve) => { this.closed = resolve; }); this.clearPingTimers();