import type { Modify } from "@homarr/common/types"; import type { Integration, IntegrationSecret } from "@homarr/db/schema"; import type { IntegrationKind } from "@homarr/definitions"; import { createRequestHandler } from "./request-handler"; type IntegrationOfKind = Omit & { kind: TKind; decryptedSecrets: Modify, { value: string }>[]; externalUrl: string | null; }; interface Options> { requestAsync: (integration: IntegrationOfKind, input: TInput) => Promise; } export const createIntegrationRequestHandler = < TData, TKind extends IntegrationKind, TInput extends Record, >( options: Options, ) => ({ handler: (integration: IntegrationOfKind, itemOptions: TInput) => { const inner = createRequestHandler({ requestAsync: async (input) => options.requestAsync(integration, input.options), }); return inner.handler({ integrationId: integration.id, options: itemOptions }); }, });