UNPKG

@whop/iframe

Version:

Powers communication between Whop and your embedded app

439 lines (435 loc) 14.3 kB
import { ZodDiscriminatedUnion, ZodObject, ZodLiteral, ZodTypeAny, ZodRawShape, z } from 'zod'; type ValidZodEventSchema = ZodDiscriminatedUnion<"event", ZodObject<{ event: ZodLiteral<string>; request: ZodTypeAny; response: ZodTypeAny; } & ZodRawShape>[]>; type MaybePromise<T> = Promise<T> | T; type FullServerImplementation<Schema extends ValidZodEventSchema> = { [K in NonNullable<z.infer<Schema>["event"]>]: (request: Extract<z.infer<Schema>, { event: K; }>["request"]) => MaybePromise<Extract<z.infer<Schema>, { event: K; }>["response"]>; }; type ClientSDK<ClientSchema extends ValidZodEventSchema, Complete extends boolean> = { [K in NonNullable<z.infer<ClientSchema>["event"]>]: (req: Extract<z.infer<ClientSchema>, { event: K; }>["request"]) => Promise<Complete extends true ? Extract<z.infer<ClientSchema>, { event: K; }>["response"] : Extract<z.infer<ClientSchema>, { event: K; }>["response"] | undefined>; }; type ServerImplementation<Schema extends ValidZodEventSchema, ForceCompleteness extends boolean = false> = ForceCompleteness extends true ? FullServerImplementation<Schema> : Partial<FullServerImplementation<Schema>>; type FullServerMiddlewareImplementation<Schema extends ValidZodEventSchema, ForceCompleteness extends boolean = false> = { [K in NonNullable<z.infer<Schema>["event"]>]: (request: Extract<z.infer<Schema>, { event: K; }>["request"], next: ForceCompleteness extends true ? (request: Extract<z.infer<Schema>, { event: K; }>["request"]) => MaybePromise<Extract<z.infer<Schema>, { event: K; }>["response"]> : ((request: Extract<z.infer<Schema>, { event: K; }>["request"]) => MaybePromise<Extract<z.infer<Schema>, { event: K; }>["response"]>) | undefined) => MaybePromise<ForceCompleteness extends true ? Extract<z.infer<Schema>, { event: K; }>["response"] : Extract<z.infer<Schema>, { event: K; }>["response"] | undefined>; }; type ServerMiddleware<Schema extends ValidZodEventSchema, ForceCompleteness extends boolean = false> = Partial<FullServerMiddlewareImplementation<Schema, ForceCompleteness>>; type Transport<ServerSchema extends ValidZodEventSchema | undefined> = { send: (event: string, data: unknown, params: { localAppId: string; remoteAppId: string; }) => unknown; recv: (handler: (event: string, data: unknown) => Promise<(ServerSchema extends ValidZodEventSchema ? z.infer<ServerSchema>["response"] : undefined) | undefined>, params: { localAppId: string; remoteAppId: string; }) => void | (() => void); cleanup?: () => void; }; declare function createSDK<ClientSchema extends ValidZodEventSchema | undefined, ServerSchema extends ValidZodEventSchema | undefined, ForceCompleteness extends boolean = false, ServerComplete extends boolean = false>({ clientSchema, serverSchema, serverComplete, transport, timeout, timeouts, localAppId, remoteAppId, serverImplementation, serverMiddleware, }: { clientSchema: ClientSchema; serverSchema: ServerSchema; forceCompleteness?: ForceCompleteness; serverComplete?: ServerComplete; localAppId: string; remoteAppId: string; serverMiddleware?: ServerSchema extends ValidZodEventSchema ? ServerMiddleware<ServerSchema, ForceCompleteness>[] : undefined; serverImplementation: ServerSchema extends ValidZodEventSchema ? ServerImplementation<ServerSchema, ForceCompleteness> : undefined; transport: Transport<ServerSchema>; timeout?: number; timeouts?: ClientSchema extends ValidZodEventSchema ? { [K in NonNullable<z.infer<ClientSchema>["event"]>]?: number; } : never; }): (ClientSchema extends ValidZodEventSchema ? ClientSDK<ClientSchema, ServerComplete> : object) & { _cleanupTransport: () => void; }; declare const whopServerSchema: z.ZodDiscriminatedUnion<"event", [z.ZodObject<{ event: z.ZodLiteral<"ping">; request: z.ZodLiteral<"ping">; response: z.ZodLiteral<"pong">; }, "strip", z.ZodTypeAny, { event: "ping"; request: "ping"; response: "pong"; }, { event: "ping"; request: "ping"; response: "pong"; }>, z.ZodObject<{ event: z.ZodLiteral<"getTopLevelUrlData">; request: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>; response: z.ZodObject<{ companyRoute: z.ZodString; experienceRoute: z.ZodString; experienceId: z.ZodString; viewType: z.ZodEnum<["app", "admin", "analytics", "preview"]>; baseHref: z.ZodString; fullHref: z.ZodString; }, "strip", z.ZodTypeAny, { companyRoute: string; experienceRoute: string; experienceId: string; viewType: "app" | "admin" | "analytics" | "preview"; baseHref: string; fullHref: string; }, { companyRoute: string; experienceRoute: string; experienceId: string; viewType: "app" | "admin" | "analytics" | "preview"; baseHref: string; fullHref: string; }>; }, "strip", z.ZodTypeAny, { event: "getTopLevelUrlData"; response: { companyRoute: string; experienceRoute: string; experienceId: string; viewType: "app" | "admin" | "analytics" | "preview"; baseHref: string; fullHref: string; }; request?: {} | undefined; }, { event: "getTopLevelUrlData"; response: { companyRoute: string; experienceRoute: string; experienceId: string; viewType: "app" | "admin" | "analytics" | "preview"; baseHref: string; fullHref: string; }; request?: {} | undefined; }>, z.ZodObject<{ event: z.ZodLiteral<"openExternalUrl">; request: z.ZodObject<{ newTab: z.ZodOptional<z.ZodBoolean>; url: z.ZodString; }, "strip", z.ZodTypeAny, { url: string; newTab?: boolean | undefined; }, { url: string; newTab?: boolean | undefined; }>; response: z.ZodLiteral<"ok">; }, "strip", z.ZodTypeAny, { event: "openExternalUrl"; request: { url: string; newTab?: boolean | undefined; }; response: "ok"; }, { event: "openExternalUrl"; request: { url: string; newTab?: boolean | undefined; }; response: "ok"; }>, z.ZodObject<{ event: z.ZodLiteral<"onHrefChange">; request: z.ZodObject<{ href: z.ZodString; }, "strip", z.ZodTypeAny, { href: string; }, { href: string; }>; response: z.ZodLiteral<"ok">; }, "strip", z.ZodTypeAny, { event: "onHrefChange"; request: { href: string; }; response: "ok"; }, { event: "onHrefChange"; request: { href: string; }; response: "ok"; }>, z.ZodObject<{ event: z.ZodLiteral<"inAppPurchase">; request: z.ZodObject<{ /** * ID returned from the `chargeUser` API call. * @example "ch_1234567890" */ id: z.ZodOptional<z.ZodString>; /** * ID of the plan returned from the `chargeUser` API call. * @example "plan_1234567890" */ planId: z.ZodString; }, "strip", z.ZodTypeAny, { planId: string; id?: string | undefined; }, { planId: string; id?: string | undefined; }>; response: z.ZodDiscriminatedUnion<"status", [z.ZodObject<{ status: z.ZodLiteral<"ok">; data: z.ZodObject<{ sessionId: z.ZodString; /** * The receipt ID can be used to verify the purchase. * * NOTE: When receiving payments you should always listen to webhooks as a fallback * to process the payment. Do not solely rely on the client to process payments. The receipt ID * can be used to deduplicate payment events. */ receiptId: z.ZodString; }, "strip", z.ZodTypeAny, { sessionId: string; receiptId: string; }, { sessionId: string; receiptId: string; }>; }, "strip", z.ZodTypeAny, { status: "ok"; data: { sessionId: string; receiptId: string; }; }, { status: "ok"; data: { sessionId: string; receiptId: string; }; }>, z.ZodObject<{ status: z.ZodLiteral<"error">; error: z.ZodString; }, "strip", z.ZodTypeAny, { status: "error"; error: string; }, { status: "error"; error: string; }>]>; }, "strip", z.ZodTypeAny, { event: "inAppPurchase"; request: { planId: string; id?: string | undefined; }; response: { status: "ok"; data: { sessionId: string; receiptId: string; }; } | { status: "error"; error: string; }; }, { event: "inAppPurchase"; request: { planId: string; id?: string | undefined; }; response: { status: "ok"; data: { sessionId: string; receiptId: string; }; } | { status: "error"; error: string; }; }>, z.ZodObject<{ event: z.ZodLiteral<"closeApp">; request: z.ZodNull; response: z.ZodLiteral<"ok">; }, "strip", z.ZodTypeAny, { event: "closeApp"; request: null; response: "ok"; }, { event: "closeApp"; request: null; response: "ok"; }>, z.ZodObject<{ event: z.ZodLiteral<"openHelpChat">; request: z.ZodNull; response: z.ZodLiteral<"ok">; }, "strip", z.ZodTypeAny, { event: "openHelpChat"; request: null; response: "ok"; }, { event: "openHelpChat"; request: null; response: "ok"; }>, z.ZodObject<{ event: z.ZodLiteral<"getColorTheme">; request: z.ZodVoid; response: z.ZodObject<{ appearance: z.ZodOptional<z.ZodEnum<["light", "dark"]>>; accentColor: z.ZodOptional<z.ZodString>; dangerColor: z.ZodOptional<z.ZodString>; grayColor: z.ZodOptional<z.ZodString>; infoColor: z.ZodOptional<z.ZodString>; successColor: z.ZodOptional<z.ZodString>; warningColor: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { appearance?: "light" | "dark" | undefined; accentColor?: string | undefined; dangerColor?: string | undefined; grayColor?: string | undefined; infoColor?: string | undefined; successColor?: string | undefined; warningColor?: string | undefined; }, { appearance?: "light" | "dark" | undefined; accentColor?: string | undefined; dangerColor?: string | undefined; grayColor?: string | undefined; infoColor?: string | undefined; successColor?: string | undefined; warningColor?: string | undefined; }>; }, "strip", z.ZodTypeAny, { event: "getColorTheme"; response: { appearance?: "light" | "dark" | undefined; accentColor?: string | undefined; dangerColor?: string | undefined; grayColor?: string | undefined; infoColor?: string | undefined; successColor?: string | undefined; warningColor?: string | undefined; }; request?: void | undefined; }, { event: "getColorTheme"; response: { appearance?: "light" | "dark" | undefined; accentColor?: string | undefined; dangerColor?: string | undefined; grayColor?: string | undefined; infoColor?: string | undefined; successColor?: string | undefined; warningColor?: string | undefined; }; request?: void | undefined; }>, z.ZodObject<{ event: z.ZodLiteral<"earliestUnreadNotification">; request: z.ZodObject<{ experienceId: z.ZodString; }, "strip", z.ZodTypeAny, { experienceId: string; }, { experienceId: string; }>; response: z.ZodNullable<z.ZodObject<{ externalId: z.ZodString; }, "strip", z.ZodTypeAny, { externalId: string; }, { externalId: string; }>>; }, "strip", z.ZodTypeAny, { event: "earliestUnreadNotification"; request: { experienceId: string; }; response: { externalId: string; } | null; }, { event: "earliestUnreadNotification"; request: { experienceId: string; }; response: { externalId: string; } | null; }>, z.ZodObject<{ event: z.ZodLiteral<"markExperienceRead">; request: z.ZodObject<{ experienceId: z.ZodString; notificationExternalId: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { experienceId: string; notificationExternalId?: string | undefined; }, { experienceId: string; notificationExternalId?: string | undefined; }>; response: z.ZodLiteral<"ok">; }, "strip", z.ZodTypeAny, { event: "markExperienceRead"; request: { experienceId: string; notificationExternalId?: string | undefined; }; response: "ok"; }, { event: "markExperienceRead"; request: { experienceId: string; notificationExternalId?: string | undefined; }; response: "ok"; }>, z.ZodObject<{ event: z.ZodLiteral<"performHaptic">; request: z.ZodObject<{ type: z.ZodEnum<["selection", "impact", "notification"]>; style: z.ZodEnum<["light", "medium", "heavy"]>; }, "strip", z.ZodTypeAny, { type: "selection" | "impact" | "notification"; style: "light" | "medium" | "heavy"; }, { type: "selection" | "impact" | "notification"; style: "light" | "medium" | "heavy"; }>; response: z.ZodLiteral<"ok">; }, "strip", z.ZodTypeAny, { event: "performHaptic"; request: { type: "selection" | "impact" | "notification"; style: "light" | "medium" | "heavy"; }; response: "ok"; }, { event: "performHaptic"; request: { type: "selection" | "impact" | "notification"; style: "light" | "medium" | "heavy"; }; response: "ok"; }>]>; export { type ClientSDK as C, type ServerImplementation as S, type Transport as T, type ValidZodEventSchema as V, createSDK as c, whopServerSchema as w };