diff --git a/src/adapters/action/dispatcher-http-hook-mastodon.spec.ts b/src/adapters/action/dispatcher-http-hook-mastodon.spec.ts index 1f5b7e14a..db93c3291 100644 --- a/src/adapters/action/dispatcher-http-hook-mastodon.spec.ts +++ b/src/adapters/action/dispatcher-http-hook-mastodon.spec.ts @@ -80,4 +80,26 @@ describe("DispatcherHttp", () => { await expect(promise).rejects.toBeInstanceOf(Error); }); + + it("skips media polling if `skipPolling` is passed", async () => { + const http = new HttpMockImpl(); + const dispatcher = new HttpActionDispatcher( + http, + new HttpActionDispatcherHookMastodon(http), + ); + + httpPost.mockResolvedValueOnce({ id: "1" }); + + const media = await dispatcher.dispatch({ + type: "create", + path: "/api/v2/media", + data: { + skipPolling: true, + }, + meta: {}, + }); + + expect(media).toHaveProperty("id", "1"); + expect(httpGet).toHaveBeenCalledTimes(0); + }); }); diff --git a/src/adapters/action/dispatcher-http-hook-mastodon.ts b/src/adapters/action/dispatcher-http-hook-mastodon.ts index 15915077b..167a9b50f 100644 --- a/src/adapters/action/dispatcher-http-hook-mastodon.ts +++ b/src/adapters/action/dispatcher-http-hook-mastodon.ts @@ -8,7 +8,7 @@ import { type HttpMetaParams, } from "../../interfaces"; import { type mastodon } from "../../mastodon"; -import { sleep } from "../../utils"; +import { isRecord, sleep } from "../../utils"; import { MastoHttpError, MastoTimeoutError } from "../errors"; import { type HttpAction, type HttpActionType } from "./dispatcher-http"; @@ -105,6 +105,9 @@ export class HttpActionDispatcherHookMastodon afterDispatch(action: AnyAction, result: unknown): unknown { if (action.type === "create" && action.path === "/api/v2/media") { const media = result as mastodon.v1.MediaAttachment; + if (isRecord(action.data) && action.data?.skipPolling === true) { + return media; + } return waitForMediaAttachment(media.id, this.mediaTimeout, this.http); } diff --git a/src/adapters/serializers/flatten-record.ts b/src/adapters/serializers/flatten-record.ts index c8b6a15b9..90ca24129 100644 --- a/src/adapters/serializers/flatten-record.ts +++ b/src/adapters/serializers/flatten-record.ts @@ -1,4 +1,4 @@ -import { isRecord } from "./is-record"; +import { isRecord } from "../../utils"; export const flattenRecord = ( object: unknown, diff --git a/src/adapters/serializers/rails-query-string.ts b/src/adapters/serializers/rails-query-string.ts index 544c83017..16be5e2a9 100644 --- a/src/adapters/serializers/rails-query-string.ts +++ b/src/adapters/serializers/rails-query-string.ts @@ -1,4 +1,4 @@ -import { isRecord } from "./is-record"; +import { isRecord } from "../../utils"; const flatten = (object: unknown, parent = ""): [string, unknown][] => { if (Array.isArray(object)) { diff --git a/src/adapters/serializers/transform-keys.ts b/src/adapters/serializers/transform-keys.ts index 7270047c6..e2d2cfad4 100644 --- a/src/adapters/serializers/transform-keys.ts +++ b/src/adapters/serializers/transform-keys.ts @@ -1,4 +1,4 @@ -import { isRecord } from "./is-record"; +import { isRecord } from "../../utils"; const _transformKeys = ( data: unknown, diff --git a/src/utils/index.ts b/src/utils/index.ts index b76a791c9..6b270f500 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,4 +1,5 @@ export * from "./sleep"; +export * from "./is-record"; export * from "./noop"; export * from "./exponential-backoff"; export * from "./promise-with-resolvers"; diff --git a/src/adapters/serializers/is-record.ts b/src/utils/is-record.ts similarity index 100% rename from src/adapters/serializers/is-record.ts rename to src/utils/is-record.ts