@whop/iframe 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-DPDPUJJX.mjs → chunk-VQFBDMXG.mjs} +23 -1
- package/dist/chunk-VQFBDMXG.mjs.map +1 -0
- package/dist/host.d.mts +25 -1
- package/dist/host.d.ts +25 -1
- package/dist/host.js +22 -0
- package/dist/host.js.map +1 -1
- package/dist/host.mjs +1 -1
- package/dist/index.d.mts +74 -2
- package/dist/index.d.ts +74 -2
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{whop-server-CCmOBRgb.d.mts → whop-server-BnXYtbx2.d.mts} +48 -0
- package/dist/{whop-server-CCmOBRgb.d.ts → whop-server-BnXYtbx2.d.ts} +48 -0
- package/package.json +2 -2
- package/dist/chunk-DPDPUJJX.mjs.map +0 -1
|
@@ -42,6 +42,16 @@ var appsServerSchema = z2.discriminatedUnion("event", [
|
|
|
42
42
|
event: z2.literal("onColorThemeChange"),
|
|
43
43
|
request: frostedV2Theme,
|
|
44
44
|
response: z2.void()
|
|
45
|
+
}),
|
|
46
|
+
z2.object({
|
|
47
|
+
event: z2.literal("navigateBack"),
|
|
48
|
+
request: z2.void(),
|
|
49
|
+
response: z2.literal("ok")
|
|
50
|
+
}),
|
|
51
|
+
z2.object({
|
|
52
|
+
event: z2.literal("navigateForward"),
|
|
53
|
+
request: z2.void(),
|
|
54
|
+
response: z2.literal("ok")
|
|
45
55
|
})
|
|
46
56
|
]);
|
|
47
57
|
|
|
@@ -340,6 +350,10 @@ function createHandler({
|
|
|
340
350
|
|
|
341
351
|
// src/sdk/whop-server.ts
|
|
342
352
|
import { z as z3 } from "zod";
|
|
353
|
+
var routeSchema = z3.object({
|
|
354
|
+
path: z3.array(z3.string()),
|
|
355
|
+
params: z3.record(z3.string())
|
|
356
|
+
});
|
|
343
357
|
var whopServerSchema = z3.discriminatedUnion("event", [
|
|
344
358
|
z3.object({
|
|
345
359
|
event: z3.literal("ping"),
|
|
@@ -441,6 +455,14 @@ var whopServerSchema = z3.discriminatedUnion("event", [
|
|
|
441
455
|
style: z3.enum(["light", "medium", "heavy"])
|
|
442
456
|
}),
|
|
443
457
|
response: z3.literal("ok")
|
|
458
|
+
}),
|
|
459
|
+
z3.object({
|
|
460
|
+
event: z3.literal("onNavigationStackChange"),
|
|
461
|
+
request: z3.object({
|
|
462
|
+
stack: z3.array(routeSchema),
|
|
463
|
+
currentIndex: z3.number()
|
|
464
|
+
}),
|
|
465
|
+
response: z3.literal("ok")
|
|
444
466
|
})
|
|
445
467
|
]);
|
|
446
468
|
|
|
@@ -452,4 +474,4 @@ export {
|
|
|
452
474
|
transport_exports,
|
|
453
475
|
whopServerSchema
|
|
454
476
|
};
|
|
455
|
-
//# sourceMappingURL=chunk-
|
|
477
|
+
//# sourceMappingURL=chunk-VQFBDMXG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/apps-server.ts","../src/sdk/utils.ts","../src/sdk/transport/utils.ts","../src/sdk/transport/sdk.ts","../src/sdk/transport/postmessage.ts","../src/sdk/transport/index.ts","../src/sdk/transport/handler.ts","../src/sdk/whop-server.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { frostedV2Theme } from \"./utils\";\n\nexport const appsServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"appPing\"),\n\t\trequest: z.literal(\"app_ping\"),\n\t\tresponse: z.literal(\"app_pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onColorThemeChange\"),\n\t\trequest: frostedV2Theme,\n\t\tresponse: z.void(),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"navigateBack\"),\n\t\trequest: z.void(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"navigateForward\"),\n\t\trequest: z.void(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n]);\n\nexport type AppsServerSchema = z.TypeOf<typeof appsServerSchema>;\n","import { type ZodSchema, z } from \"zod\";\n\nexport const withError = <T extends ZodSchema, E extends ZodSchema>(\n\tschema: T,\n\terror: E,\n) => {\n\treturn z.discriminatedUnion(\"status\", [\n\t\tz.object({\n\t\t\tstatus: z.literal(\"ok\"),\n\t\t\tdata: schema,\n\t\t}),\n\t\tz.object({\n\t\t\tstatus: z.literal(\"error\"),\n\t\t\terror: error,\n\t\t}),\n\t]);\n};\n\nexport const frostedV2Theme = z\n\t.object({\n\t\tappearance: z.enum([\"light\", \"dark\"]),\n\t\taccentColor: z.string(),\n\t\tdangerColor: z.string(),\n\t\tgrayColor: z.string(),\n\t\tinfoColor: z.string(),\n\t\tsuccessColor: z.string(),\n\t\twarningColor: z.string(),\n\t})\n\t.partial();\n","export class TimeoutError extends Error {\n\tconstructor() {\n\t\tsuper(\"Timeout\");\n\t}\n}\n\nexport function randomId(length: number) {\n\tconst alphabet =\n\t\t\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\tlet str = \"\";\n\tfor (let i = 0; i < length; i++) {\n\t\tstr += alphabet[Math.floor(Math.random() * alphabet.length)];\n\t}\n\treturn str;\n}\n","import type {\n\tZodDiscriminatedUnion,\n\tZodLiteral,\n\tZodObject,\n\tZodRawShape,\n\tZodTypeAny,\n\tz,\n} from \"zod\";\nimport { TimeoutError, randomId } from \"./utils\";\n\nexport type ValidZodEventSchema = ZodDiscriminatedUnion<\n\t\"event\",\n\tZodObject<\n\t\t{\n\t\t\tevent: ZodLiteral<string>;\n\t\t\trequest: ZodTypeAny;\n\t\t\tresponse: ZodTypeAny;\n\t\t} & ZodRawShape\n\t>[]\n>;\n\ntype MaybePromise<T> = Promise<T> | T;\n\ntype T = z.infer<ValidZodEventSchema>;\n\ntype FullServerImplementation<Schema extends ValidZodEventSchema> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>;\n};\n\nexport type ClientSDK<\n\tClientSchema extends ValidZodEventSchema,\n\tComplete extends boolean,\n> = {\n\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]: (\n\t\treq: Extract<z.infer<ClientSchema>, { event: K }>[\"request\"],\n\t) => Promise<\n\t\tComplete extends true\n\t\t\t? Extract<z.infer<ClientSchema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<ClientSchema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\n\nexport type ServerImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = ForceCompleteness extends true\n\t? FullServerImplementation<Schema>\n\t: Partial<FullServerImplementation<Schema>>;\n\ntype FullServerMiddlewareImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\tnext: ForceCompleteness extends true\n\t\t\t? (\n\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>\n\t\t\t:\n\t\t\t\t\t| ((\n\t\t\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t\t ) => MaybePromise<\n\t\t\t\t\t\t\tExtract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t\t\t >)\n\t\t\t\t\t| undefined,\n\t) => MaybePromise<\n\t\tForceCompleteness extends true\n\t\t\t? Extract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<Schema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\nexport type ServerMiddleware<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = Partial<FullServerMiddlewareImplementation<Schema, ForceCompleteness>>;\n\nexport type Transport<ServerSchema extends ValidZodEventSchema | undefined> = {\n\tsend: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t) => unknown;\n\trecv: (\n\t\thandler: (\n\t\t\tevent: string,\n\t\t\tdata: unknown,\n\t\t) => Promise<\n\t\t\t| (ServerSchema extends ValidZodEventSchema\n\t\t\t\t\t? z.infer<ServerSchema>[\"response\"]\n\t\t\t\t\t: undefined)\n\t\t\t| undefined\n\t\t>,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t\t// biome-ignore lint/suspicious/noConfusingVoidType: idk\n\t) => void | (() => void);\n\tcleanup?: () => void;\n};\n\nexport function createSDK<\n\tClientSchema extends ValidZodEventSchema | undefined,\n\tServerSchema extends ValidZodEventSchema | undefined,\n\tForceCompleteness extends boolean = false,\n\tServerComplete extends boolean = false,\n>({\n\tclientSchema,\n\tserverSchema,\n\tserverComplete,\n\ttransport,\n\ttimeout = 1000,\n\ttimeouts,\n\tlocalAppId,\n\tremoteAppId,\n\tserverImplementation = {},\n\tserverMiddleware,\n}: {\n\tclientSchema: ClientSchema;\n\tserverSchema: ServerSchema;\n\tforceCompleteness?: ForceCompleteness;\n\tserverComplete?: ServerComplete;\n\tlocalAppId: string;\n\tremoteAppId: string;\n\tserverMiddleware?: ServerSchema extends ValidZodEventSchema\n\t\t? ServerMiddleware<ServerSchema, ForceCompleteness>[]\n\t\t: undefined;\n\tserverImplementation: ServerSchema extends ValidZodEventSchema\n\t\t? ServerImplementation<ServerSchema, ForceCompleteness>\n\t\t: undefined;\n\ttransport: Transport<ServerSchema>;\n\ttimeout?: number;\n\ttimeouts?: ClientSchema extends ValidZodEventSchema\n\t\t? {\n\t\t\t\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]?: number;\n\t\t\t}\n\t\t: never;\n}): (ClientSchema extends ValidZodEventSchema\n\t? ClientSDK<ClientSchema, ServerComplete>\n\t: object) & {\n\t_cleanupTransport: () => void;\n} {\n\tconst callbacks: {\n\t\tid: string;\n\t\tresolve: (data: unknown) => void;\n\t}[] = [];\n\n\tconst keys =\n\t\tclientSchema?.options.map(\n\t\t\t(option) => option._def.shape().event._def.value,\n\t\t) ?? [];\n\n\tconst client = Object.fromEntries(\n\t\tkeys.map((key) => [\n\t\t\tkey,\n\t\t\tasync (req: unknown) => {\n\t\t\t\t// We make event id unique so that we can fire many requests at the same time.\n\t\t\t\tconst eventId = `${localAppId}:${key}:${randomId(8)}`;\n\n\t\t\t\tconsole.debug(\"[typed-transport] app. Created eventId\", eventId);\n\n\t\t\t\tconst responseData = new Promise((resolve, reject) => {\n\t\t\t\t\t// Timeout the request after the specified timeout\n\t\t\t\t\tconst customTimeout = timeouts?.[key];\n\n\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\tif (serverComplete) {\n\t\t\t\t\t\t\tconsole.debug(\"[typed-transport] app. Timeout error\");\n\t\t\t\t\t\t\treject(new TimeoutError());\n\t\t\t\t\t\t} else resolve(undefined);\n\t\t\t\t\t}, customTimeout ?? timeout);\n\n\t\t\t\t\tif (customTimeout && customTimeout > timeout && !serverComplete) {\n\t\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}, timeout);\n\t\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\t\tid: `${eventId}:processing`,\n\t\t\t\t\t\t\tresolve: () => clearTimeout(timeoutId),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\tid: eventId,\n\t\t\t\t\t\tresolve: (data) => {\n\t\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tconsole.debug(\"[typed-transport] app sending event\", {\n\t\t\t\t\teventId,\n\t\t\t\t\tlocalAppId,\n\t\t\t\t\tremoteAppId,\n\t\t\t\t});\n\t\t\t\tawait transport.send?.(eventId, req, { localAppId, remoteAppId });\n\n\t\t\t\tconst data = await responseData;\n\n\t\t\t\tconsole.debug(\"[typed-transport] received response\", data);\n\n\t\t\t\treturn data;\n\t\t\t},\n\t\t]),\n\t) as (ClientSchema extends ValidZodEventSchema\n\t\t? ClientSDK<ClientSchema, ServerComplete>\n\t\t: object) & {\n\t\t_cleanupTransport: () => void;\n\t};\n\n\tconst cleanupRecv = transport.recv(\n\t\tasync (event, dataAny) => {\n\t\t\tconst [app, key, _randomId, type] = event.split(\":\");\n\t\t\tif (app === localAppId) {\n\t\t\t\t// Here we are receiving a response from a request we made.\n\t\t\t\tconst idx = callbacks.findIndex((cb) => cb.id === event);\n\t\t\t\tif (idx === -1) return;\n\t\t\t\tconst dataSchema = clientSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst cb = callbacks[idx];\n\t\t\t\tif (type === \"processing\") {\n\t\t\t\t\tcb.resolve(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tconst data = dataSchema.shape.response.parse(dataAny);\n\t\t\t\t\tcallbacks.splice(idx, 1);\n\t\t\t\t\tcb.resolve(data);\n\t\t\t\t}\n\t\t\t} else if (app === remoteAppId) {\n\t\t\t\tif (serverImplementation === undefined) return;\n\t\t\t\t// Here we are responding to a request from a client.\n\n\t\t\t\t// final handler\n\t\t\t\tlet handler = (\n\t\t\t\t\tserverImplementation as unknown as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t(data: unknown) => Promise<unknown>\n\t\t\t\t\t>\n\t\t\t\t)[key];\n\n\t\t\t\t// Build a linked list of middleware invocations that will call the final handler.\n\t\t\t\tif (serverMiddleware) {\n\t\t\t\t\tfor (let i = serverMiddleware.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tconst middlewareDef = serverMiddleware[i];\n\t\t\t\t\t\tconst middleware = middlewareDef[key] as (\n\t\t\t\t\t\t\tdata: unknown,\n\t\t\t\t\t\t\tnext: unknown,\n\t\t\t\t\t\t) => Promise<unknown>;\n\t\t\t\t\t\tif (!middleware) continue;\n\t\t\t\t\t\tconst ref = handler;\n\t\t\t\t\t\thandler = (data: unknown) => middleware(data, ref);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!handler) return;\n\t\t\t\tconst dataSchema = serverSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst data = dataSchema.shape.request.parse(dataAny);\n\n\t\t\t\t// If our handler doesn't complete in 80% of the default message timeout, we send a message to the caller, saying that we are expecting an answer.\n\t\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\t\tawait transport.send(\n\t\t\t\t\t\t`${event}:processing`,\n\t\t\t\t\t\t{},\n\t\t\t\t\t\t{ localAppId, remoteAppId },\n\t\t\t\t\t);\n\t\t\t\t}, 50);\n\n\t\t\t\tconst response = await handler(data);\n\n\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\tawait transport.send(event, response, { localAppId, remoteAppId });\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: will fix at some point\n\t\t\t\treturn response as any;\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlocalAppId,\n\t\t\tremoteAppId,\n\t\t},\n\t);\n\n\tconst cleanupFunctions: (() => void)[] = [];\n\tif (transport.cleanup) cleanupFunctions.push(transport.cleanup);\n\tif (cleanupRecv) cleanupFunctions.push(cleanupRecv);\n\n\tclient._cleanupTransport = () => {\n\t\tfor (const fn of cleanupFunctions) fn();\n\t};\n\n\treturn client;\n}\n","import type { Transport, ValidZodEventSchema } from \"./sdk\";\n\nexport const MESSAGE_TAG = \"typed-transport\";\n\nexport function postmessageTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tremoteWindow,\n\ttargetOrigins,\n}: {\n\tremoteWindow: Window | undefined;\n\ttargetOrigins: string[];\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tif (!remoteWindow) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"No remote window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. Sending event\",\n\t\t\t\tevent,\n\t\t\t\tdata,\n\t\t\t);\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. target origins =\",\n\t\t\t\ttargetOrigins,\n\t\t\t);\n\n\t\t\tfor (const targetOrigin of targetOrigins) {\n\t\t\t\tconsole.debug(\"[typed-transport] remoteWindow.postMessage\", {\n\t\t\t\t\tevent,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] remoteWindow.postMessage.data\",\n\t\t\t\t\tdata,\n\t\t\t\t\tJSON.stringify(data),\n\t\t\t\t);\n\n\t\t\t\tremoteWindow.postMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttargetOrigin,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (targetOrigins.length === 0) {\n\t\t\t\tremoteWindow.postMessage({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] postmessagetransport. Receiving event\",\n\t\t\t\t\tevent,\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.source !== remoteWindow ||\n\t\t\t\t\t(!targetOrigins.includes(event.origin) && targetOrigins.length > 0) ||\n\t\t\t\t\t!event.data ||\n\t\t\t\t\t!event.data.event ||\n\t\t\t\t\tevent.data.libId !== MESSAGE_TAG ||\n\t\t\t\t\tevent.data.receiverAppId !== localAppId ||\n\t\t\t\t\tevent.data.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(event.data.event, event.data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\t// Stop logging this as it's causing more confusion than it's worth.\n\t\t\t\t// console.warn(\n\t\t\t\t// 'No window. Is the SDK running on a server without a global window object?',\n\t\t\t\t// );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function reactNativeClientTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tpostMessage,\n\ttargetOrigin,\n}: {\n\tpostMessage: (data: string) => void;\n\ttargetOrigin: string;\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tpostMessage(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconst dataString = typeof event.data === \"string\" ? event.data : null;\n\t\t\t\tif (!dataString) return;\n\n\t\t\t\tconst data = JSON.parse(dataString);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.origin !== targetOrigin ||\n\t\t\t\t\t!data ||\n\t\t\t\t\t!data.event ||\n\t\t\t\t\t!data.data ||\n\t\t\t\t\tdata.libId !== MESSAGE_TAG ||\n\t\t\t\t\tdata.receiverAppId !== localAppId ||\n\t\t\t\t\tdata.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(data.event, data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"No window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n","export { createHandler } from \"./handler\";\nexport { MESSAGE_TAG, postmessageTransport } from \"./postmessage\";\nexport { createSDK } from \"./sdk\";\n\nexport type {\n\tClientSDK,\n\tServerImplementation,\n\tTransport,\n\tValidZodEventSchema,\n} from \"./sdk\";\n\nexport { TimeoutError } from \"./utils\";\n","import type { z } from \"zod\";\nimport {\n\ttype ServerImplementation,\n\ttype ValidZodEventSchema,\n\tcreateSDK,\n} from \"./sdk\";\n\nexport function createHandler<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n>({\n\tschema,\n\tforceCompleteness,\n\thandlers,\n}: {\n\tschema: Schema;\n\tforceCompleteness?: ForceCompleteness;\n\thandlers: Schema extends ValidZodEventSchema\n\t\t? ServerImplementation<Schema, ForceCompleteness>\n\t\t: undefined;\n}) {\n\tlet eventHandler: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t) => Promise<\n\t\t| (Schema extends ValidZodEventSchema\n\t\t\t\t? z.TypeOf<Schema>[\"response\"]\n\t\t\t\t: undefined)\n\t\t| undefined\n\t>;\n\n\tcreateSDK<undefined, Schema, ForceCompleteness, false>({\n\t\tclientSchema: undefined,\n\t\tserverSchema: schema,\n\t\tlocalAppId: \"client\",\n\t\tremoteAppId: \"server\",\n\t\tforceCompleteness,\n\t\tserverImplementation: handlers,\n\t\ttransport: {\n\t\t\tsend() {\n\t\t\t\t// empty, only handling incoming events\n\t\t\t},\n\t\t\trecv(handler) {\n\t\t\t\teventHandler = handler;\n\t\t\t},\n\t\t},\n\t});\n\n\treturn (event: string, data: unknown) => {\n\t\treturn eventHandler(`server:${event}`, data);\n\t};\n}\n","import { z } from \"zod\";\nimport { frostedV2Theme, withError } from \"./utils\";\n\nexport const routeSchema = z.object({\n\tpath: z.array(z.string()),\n\tparams: z.record(z.string()),\n});\n\nexport type Route = z.TypeOf<typeof routeSchema>;\n\nexport const whopServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"ping\"),\n\t\trequest: z.literal(\"ping\"),\n\t\tresponse: z.literal(\"pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getTopLevelUrlData\"),\n\t\trequest: z.object({}).optional(),\n\t\tresponse: z.object({\n\t\t\tcompanyRoute: z.string(),\n\t\t\texperienceRoute: z.string(),\n\t\t\texperienceId: z.string(),\n\t\t\tviewType: z.enum([\"app\", \"admin\", \"analytics\", \"preview\"]),\n\t\t\tbaseHref: z.string(),\n\t\t\tfullHref: z.string(),\n\t\t}),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openExternalUrl\"),\n\t\trequest: z.object({\n\t\t\tnewTab: z.boolean().optional(),\n\t\t\turl: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onHrefChange\"),\n\t\trequest: z.object({\n\t\t\thref: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"inAppPurchase\"),\n\t\trequest: z.object({\n\t\t\t/**\n\t\t\t * ID returned from the `chargeUser` API call.\n\t\t\t * @example \"ch_1234567890\"\n\t\t\t */\n\t\t\tid: z.string().optional(),\n\t\t\t/**\n\t\t\t * ID of the plan returned from the `chargeUser` API call.\n\t\t\t * @example \"plan_1234567890\"\n\t\t\t */\n\t\t\tplanId: z.string(),\n\t\t}),\n\t\tresponse: withError(\n\t\t\tz.object({\n\t\t\t\tsessionId: z.string(),\n\t\t\t\t/**\n\t\t\t\t * The receipt ID can be used to verify the purchase.\n\t\t\t\t *\n\t\t\t\t * NOTE: When receiving payments you should always listen to webhooks as a fallback\n\t\t\t\t * to process the payment. Do not solely rely on the client to process payments. The receipt ID\n\t\t\t\t * can be used to deduplicate payment events.\n\t\t\t\t */\n\t\t\t\treceiptId: z.string(),\n\t\t\t}),\n\t\t\tz.string(),\n\t\t),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"closeApp\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openHelpChat\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getColorTheme\"),\n\t\trequest: z.void(),\n\t\tresponse: frostedV2Theme,\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"earliestUnreadNotification\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t}),\n\t\tresponse: z\n\t\t\t.object({\n\t\t\t\texternalId: z.string(),\n\t\t\t})\n\t\t\t.nullable(),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"markExperienceRead\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t\tnotificationExternalId: z.string().optional(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"performHaptic\"),\n\t\trequest: z.object({\n\t\t\ttype: z.enum([\"selection\", \"impact\", \"notification\"]),\n\t\t\tstyle: z.enum([\"light\", \"medium\", \"heavy\"]),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onNavigationStackChange\"),\n\t\trequest: z.object({\n\t\t\tstack: z.array(routeSchema),\n\t\t\tcurrentIndex: z.number(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n]);\n\nexport type WhopServerSchema = z.TypeOf<typeof whopServerSchema>;\n"],"mappings":"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","names":["z","z","timeoutId","data","cb","z","z"]}
|
package/dist/host.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as zod from 'zod';
|
|
2
|
-
import { S as ServerImplementation, w as whopServerSchema, C as ClientSDK } from './whop-server-
|
|
2
|
+
import { S as ServerImplementation, w as whopServerSchema, C as ClientSDK } from './whop-server-BnXYtbx2.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Create an iframe SDK for the container whop.com app.
|
|
@@ -76,6 +76,30 @@ declare function createSdkHost({ appId, onMessage, remoteWindow, remoteOrigin, }
|
|
|
76
76
|
warningColor?: string | undefined;
|
|
77
77
|
};
|
|
78
78
|
response?: void | undefined;
|
|
79
|
+
}>, zod.ZodObject<{
|
|
80
|
+
event: zod.ZodLiteral<"navigateBack">;
|
|
81
|
+
request: zod.ZodVoid;
|
|
82
|
+
response: zod.ZodLiteral<"ok">;
|
|
83
|
+
}, "strip", zod.ZodTypeAny, {
|
|
84
|
+
event: "navigateBack";
|
|
85
|
+
response: "ok";
|
|
86
|
+
request?: void | undefined;
|
|
87
|
+
}, {
|
|
88
|
+
event: "navigateBack";
|
|
89
|
+
response: "ok";
|
|
90
|
+
request?: void | undefined;
|
|
91
|
+
}>, zod.ZodObject<{
|
|
92
|
+
event: zod.ZodLiteral<"navigateForward">;
|
|
93
|
+
request: zod.ZodVoid;
|
|
94
|
+
response: zod.ZodLiteral<"ok">;
|
|
95
|
+
}, "strip", zod.ZodTypeAny, {
|
|
96
|
+
event: "navigateForward";
|
|
97
|
+
response: "ok";
|
|
98
|
+
request?: void | undefined;
|
|
99
|
+
}, {
|
|
100
|
+
event: "navigateForward";
|
|
101
|
+
response: "ok";
|
|
102
|
+
request?: void | undefined;
|
|
79
103
|
}>]>, false> & {
|
|
80
104
|
_cleanupTransport: () => void;
|
|
81
105
|
};
|
package/dist/host.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as zod from 'zod';
|
|
2
|
-
import { S as ServerImplementation, w as whopServerSchema, C as ClientSDK } from './whop-server-
|
|
2
|
+
import { S as ServerImplementation, w as whopServerSchema, C as ClientSDK } from './whop-server-BnXYtbx2.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Create an iframe SDK for the container whop.com app.
|
|
@@ -76,6 +76,30 @@ declare function createSdkHost({ appId, onMessage, remoteWindow, remoteOrigin, }
|
|
|
76
76
|
warningColor?: string | undefined;
|
|
77
77
|
};
|
|
78
78
|
response?: void | undefined;
|
|
79
|
+
}>, zod.ZodObject<{
|
|
80
|
+
event: zod.ZodLiteral<"navigateBack">;
|
|
81
|
+
request: zod.ZodVoid;
|
|
82
|
+
response: zod.ZodLiteral<"ok">;
|
|
83
|
+
}, "strip", zod.ZodTypeAny, {
|
|
84
|
+
event: "navigateBack";
|
|
85
|
+
response: "ok";
|
|
86
|
+
request?: void | undefined;
|
|
87
|
+
}, {
|
|
88
|
+
event: "navigateBack";
|
|
89
|
+
response: "ok";
|
|
90
|
+
request?: void | undefined;
|
|
91
|
+
}>, zod.ZodObject<{
|
|
92
|
+
event: zod.ZodLiteral<"navigateForward">;
|
|
93
|
+
request: zod.ZodVoid;
|
|
94
|
+
response: zod.ZodLiteral<"ok">;
|
|
95
|
+
}, "strip", zod.ZodTypeAny, {
|
|
96
|
+
event: "navigateForward";
|
|
97
|
+
response: "ok";
|
|
98
|
+
request?: void | undefined;
|
|
99
|
+
}, {
|
|
100
|
+
event: "navigateForward";
|
|
101
|
+
response: "ok";
|
|
102
|
+
request?: void | undefined;
|
|
79
103
|
}>]>, false> & {
|
|
80
104
|
_cleanupTransport: () => void;
|
|
81
105
|
};
|
package/dist/host.js
CHANGED
|
@@ -62,6 +62,16 @@ var appsServerSchema = import_zod2.z.discriminatedUnion("event", [
|
|
|
62
62
|
event: import_zod2.z.literal("onColorThemeChange"),
|
|
63
63
|
request: frostedV2Theme,
|
|
64
64
|
response: import_zod2.z.void()
|
|
65
|
+
}),
|
|
66
|
+
import_zod2.z.object({
|
|
67
|
+
event: import_zod2.z.literal("navigateBack"),
|
|
68
|
+
request: import_zod2.z.void(),
|
|
69
|
+
response: import_zod2.z.literal("ok")
|
|
70
|
+
}),
|
|
71
|
+
import_zod2.z.object({
|
|
72
|
+
event: import_zod2.z.literal("navigateForward"),
|
|
73
|
+
request: import_zod2.z.void(),
|
|
74
|
+
response: import_zod2.z.literal("ok")
|
|
65
75
|
})
|
|
66
76
|
]);
|
|
67
77
|
|
|
@@ -284,6 +294,10 @@ function postmessageTransport({
|
|
|
284
294
|
|
|
285
295
|
// src/sdk/whop-server.ts
|
|
286
296
|
var import_zod3 = require("zod");
|
|
297
|
+
var routeSchema = import_zod3.z.object({
|
|
298
|
+
path: import_zod3.z.array(import_zod3.z.string()),
|
|
299
|
+
params: import_zod3.z.record(import_zod3.z.string())
|
|
300
|
+
});
|
|
287
301
|
var whopServerSchema = import_zod3.z.discriminatedUnion("event", [
|
|
288
302
|
import_zod3.z.object({
|
|
289
303
|
event: import_zod3.z.literal("ping"),
|
|
@@ -385,6 +399,14 @@ var whopServerSchema = import_zod3.z.discriminatedUnion("event", [
|
|
|
385
399
|
style: import_zod3.z.enum(["light", "medium", "heavy"])
|
|
386
400
|
}),
|
|
387
401
|
response: import_zod3.z.literal("ok")
|
|
402
|
+
}),
|
|
403
|
+
import_zod3.z.object({
|
|
404
|
+
event: import_zod3.z.literal("onNavigationStackChange"),
|
|
405
|
+
request: import_zod3.z.object({
|
|
406
|
+
stack: import_zod3.z.array(routeSchema),
|
|
407
|
+
currentIndex: import_zod3.z.number()
|
|
408
|
+
}),
|
|
409
|
+
response: import_zod3.z.literal("ok")
|
|
388
410
|
})
|
|
389
411
|
]);
|
|
390
412
|
|
package/dist/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/host.ts","../src/sdk/apps-server.ts","../src/sdk/utils.ts","../src/sdk/transport/utils.ts","../src/sdk/transport/sdk.ts","../src/sdk/transport/postmessage.ts","../src/sdk/whop-server.ts"],"sourcesContent":["import { appsServerSchema } from \"@/sdk/apps-server\";\nimport {\n\ttype ServerImplementation,\n\tcreateSDK as createPostmessageSdk,\n\tpostmessageTransport,\n} from \"@/sdk/transport\";\nimport { whopServerSchema } from \"@/sdk/whop-server\";\n\n/**\n * Create an iframe SDK for the container whop.com app.\n * This will implement the functions required by client apps.\n * Do not use this function when building apps\n */\nexport function createSdkHost({\n\tappId,\n\tonMessage,\n\tremoteWindow,\n\tremoteOrigin,\n}: {\n\tappId: string;\n\tremoteWindow: Window;\n\tremoteOrigin: string;\n\tonMessage: ServerImplementation<typeof whopServerSchema, true>;\n\tisDevelopment?: boolean;\n}) {\n\treturn createPostmessageSdk({\n\t\tclientSchema: appsServerSchema,\n\t\tserverSchema: whopServerSchema,\n\t\tforceCompleteness: true,\n\t\tserverImplementation: onMessage,\n\t\tlocalAppId: \"app_whop\",\n\t\tremoteAppId: appId,\n\t\ttransport: postmessageTransport({\n\t\t\tremoteWindow: remoteWindow,\n\t\t\ttargetOrigins: [remoteOrigin],\n\t\t}),\n\t\tserverComplete: false,\n\t\ttimeout: 200,\n\t});\n}\n","import { z } from \"zod\";\nimport { frostedV2Theme } from \"./utils\";\n\nexport const appsServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"appPing\"),\n\t\trequest: z.literal(\"app_ping\"),\n\t\tresponse: z.literal(\"app_pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onColorThemeChange\"),\n\t\trequest: frostedV2Theme,\n\t\tresponse: z.void(),\n\t}),\n]);\n\nexport type AppsServerSchema = z.TypeOf<typeof appsServerSchema>;\n","import { type ZodSchema, z } from \"zod\";\n\nexport const withError = <T extends ZodSchema, E extends ZodSchema>(\n\tschema: T,\n\terror: E,\n) => {\n\treturn z.discriminatedUnion(\"status\", [\n\t\tz.object({\n\t\t\tstatus: z.literal(\"ok\"),\n\t\t\tdata: schema,\n\t\t}),\n\t\tz.object({\n\t\t\tstatus: z.literal(\"error\"),\n\t\t\terror: error,\n\t\t}),\n\t]);\n};\n\nexport const frostedV2Theme = z\n\t.object({\n\t\tappearance: z.enum([\"light\", \"dark\"]),\n\t\taccentColor: z.string(),\n\t\tdangerColor: z.string(),\n\t\tgrayColor: z.string(),\n\t\tinfoColor: z.string(),\n\t\tsuccessColor: z.string(),\n\t\twarningColor: z.string(),\n\t})\n\t.partial();\n","export class TimeoutError extends Error {\n\tconstructor() {\n\t\tsuper(\"Timeout\");\n\t}\n}\n\nexport function randomId(length: number) {\n\tconst alphabet =\n\t\t\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\tlet str = \"\";\n\tfor (let i = 0; i < length; i++) {\n\t\tstr += alphabet[Math.floor(Math.random() * alphabet.length)];\n\t}\n\treturn str;\n}\n","import type {\n\tZodDiscriminatedUnion,\n\tZodLiteral,\n\tZodObject,\n\tZodRawShape,\n\tZodTypeAny,\n\tz,\n} from \"zod\";\nimport { TimeoutError, randomId } from \"./utils\";\n\nexport type ValidZodEventSchema = ZodDiscriminatedUnion<\n\t\"event\",\n\tZodObject<\n\t\t{\n\t\t\tevent: ZodLiteral<string>;\n\t\t\trequest: ZodTypeAny;\n\t\t\tresponse: ZodTypeAny;\n\t\t} & ZodRawShape\n\t>[]\n>;\n\ntype MaybePromise<T> = Promise<T> | T;\n\ntype T = z.infer<ValidZodEventSchema>;\n\ntype FullServerImplementation<Schema extends ValidZodEventSchema> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>;\n};\n\nexport type ClientSDK<\n\tClientSchema extends ValidZodEventSchema,\n\tComplete extends boolean,\n> = {\n\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]: (\n\t\treq: Extract<z.infer<ClientSchema>, { event: K }>[\"request\"],\n\t) => Promise<\n\t\tComplete extends true\n\t\t\t? Extract<z.infer<ClientSchema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<ClientSchema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\n\nexport type ServerImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = ForceCompleteness extends true\n\t? FullServerImplementation<Schema>\n\t: Partial<FullServerImplementation<Schema>>;\n\ntype FullServerMiddlewareImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\tnext: ForceCompleteness extends true\n\t\t\t? (\n\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>\n\t\t\t:\n\t\t\t\t\t| ((\n\t\t\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t\t ) => MaybePromise<\n\t\t\t\t\t\t\tExtract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t\t\t >)\n\t\t\t\t\t| undefined,\n\t) => MaybePromise<\n\t\tForceCompleteness extends true\n\t\t\t? Extract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<Schema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\nexport type ServerMiddleware<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = Partial<FullServerMiddlewareImplementation<Schema, ForceCompleteness>>;\n\nexport type Transport<ServerSchema extends ValidZodEventSchema | undefined> = {\n\tsend: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t) => unknown;\n\trecv: (\n\t\thandler: (\n\t\t\tevent: string,\n\t\t\tdata: unknown,\n\t\t) => Promise<\n\t\t\t| (ServerSchema extends ValidZodEventSchema\n\t\t\t\t\t? z.infer<ServerSchema>[\"response\"]\n\t\t\t\t\t: undefined)\n\t\t\t| undefined\n\t\t>,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t\t// biome-ignore lint/suspicious/noConfusingVoidType: idk\n\t) => void | (() => void);\n\tcleanup?: () => void;\n};\n\nexport function createSDK<\n\tClientSchema extends ValidZodEventSchema | undefined,\n\tServerSchema extends ValidZodEventSchema | undefined,\n\tForceCompleteness extends boolean = false,\n\tServerComplete extends boolean = false,\n>({\n\tclientSchema,\n\tserverSchema,\n\tserverComplete,\n\ttransport,\n\ttimeout = 1000,\n\ttimeouts,\n\tlocalAppId,\n\tremoteAppId,\n\tserverImplementation = {},\n\tserverMiddleware,\n}: {\n\tclientSchema: ClientSchema;\n\tserverSchema: ServerSchema;\n\tforceCompleteness?: ForceCompleteness;\n\tserverComplete?: ServerComplete;\n\tlocalAppId: string;\n\tremoteAppId: string;\n\tserverMiddleware?: ServerSchema extends ValidZodEventSchema\n\t\t? ServerMiddleware<ServerSchema, ForceCompleteness>[]\n\t\t: undefined;\n\tserverImplementation: ServerSchema extends ValidZodEventSchema\n\t\t? ServerImplementation<ServerSchema, ForceCompleteness>\n\t\t: undefined;\n\ttransport: Transport<ServerSchema>;\n\ttimeout?: number;\n\ttimeouts?: ClientSchema extends ValidZodEventSchema\n\t\t? {\n\t\t\t\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]?: number;\n\t\t\t}\n\t\t: never;\n}): (ClientSchema extends ValidZodEventSchema\n\t? ClientSDK<ClientSchema, ServerComplete>\n\t: object) & {\n\t_cleanupTransport: () => void;\n} {\n\tconst callbacks: {\n\t\tid: string;\n\t\tresolve: (data: unknown) => void;\n\t}[] = [];\n\n\tconst keys =\n\t\tclientSchema?.options.map(\n\t\t\t(option) => option._def.shape().event._def.value,\n\t\t) ?? [];\n\n\tconst client = Object.fromEntries(\n\t\tkeys.map((key) => [\n\t\t\tkey,\n\t\t\tasync (req: unknown) => {\n\t\t\t\t// We make event id unique so that we can fire many requests at the same time.\n\t\t\t\tconst eventId = `${localAppId}:${key}:${randomId(8)}`;\n\n\t\t\t\tconsole.debug(\"[typed-transport] app. Created eventId\", eventId);\n\n\t\t\t\tconst responseData = new Promise((resolve, reject) => {\n\t\t\t\t\t// Timeout the request after the specified timeout\n\t\t\t\t\tconst customTimeout = timeouts?.[key];\n\n\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\tif (serverComplete) {\n\t\t\t\t\t\t\tconsole.debug(\"[typed-transport] app. Timeout error\");\n\t\t\t\t\t\t\treject(new TimeoutError());\n\t\t\t\t\t\t} else resolve(undefined);\n\t\t\t\t\t}, customTimeout ?? timeout);\n\n\t\t\t\t\tif (customTimeout && customTimeout > timeout && !serverComplete) {\n\t\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}, timeout);\n\t\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\t\tid: `${eventId}:processing`,\n\t\t\t\t\t\t\tresolve: () => clearTimeout(timeoutId),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\tid: eventId,\n\t\t\t\t\t\tresolve: (data) => {\n\t\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tconsole.debug(\"[typed-transport] app sending event\", {\n\t\t\t\t\teventId,\n\t\t\t\t\tlocalAppId,\n\t\t\t\t\tremoteAppId,\n\t\t\t\t});\n\t\t\t\tawait transport.send?.(eventId, req, { localAppId, remoteAppId });\n\n\t\t\t\tconst data = await responseData;\n\n\t\t\t\tconsole.debug(\"[typed-transport] received response\", data);\n\n\t\t\t\treturn data;\n\t\t\t},\n\t\t]),\n\t) as (ClientSchema extends ValidZodEventSchema\n\t\t? ClientSDK<ClientSchema, ServerComplete>\n\t\t: object) & {\n\t\t_cleanupTransport: () => void;\n\t};\n\n\tconst cleanupRecv = transport.recv(\n\t\tasync (event, dataAny) => {\n\t\t\tconst [app, key, _randomId, type] = event.split(\":\");\n\t\t\tif (app === localAppId) {\n\t\t\t\t// Here we are receiving a response from a request we made.\n\t\t\t\tconst idx = callbacks.findIndex((cb) => cb.id === event);\n\t\t\t\tif (idx === -1) return;\n\t\t\t\tconst dataSchema = clientSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst cb = callbacks[idx];\n\t\t\t\tif (type === \"processing\") {\n\t\t\t\t\tcb.resolve(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tconst data = dataSchema.shape.response.parse(dataAny);\n\t\t\t\t\tcallbacks.splice(idx, 1);\n\t\t\t\t\tcb.resolve(data);\n\t\t\t\t}\n\t\t\t} else if (app === remoteAppId) {\n\t\t\t\tif (serverImplementation === undefined) return;\n\t\t\t\t// Here we are responding to a request from a client.\n\n\t\t\t\t// final handler\n\t\t\t\tlet handler = (\n\t\t\t\t\tserverImplementation as unknown as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t(data: unknown) => Promise<unknown>\n\t\t\t\t\t>\n\t\t\t\t)[key];\n\n\t\t\t\t// Build a linked list of middleware invocations that will call the final handler.\n\t\t\t\tif (serverMiddleware) {\n\t\t\t\t\tfor (let i = serverMiddleware.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tconst middlewareDef = serverMiddleware[i];\n\t\t\t\t\t\tconst middleware = middlewareDef[key] as (\n\t\t\t\t\t\t\tdata: unknown,\n\t\t\t\t\t\t\tnext: unknown,\n\t\t\t\t\t\t) => Promise<unknown>;\n\t\t\t\t\t\tif (!middleware) continue;\n\t\t\t\t\t\tconst ref = handler;\n\t\t\t\t\t\thandler = (data: unknown) => middleware(data, ref);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!handler) return;\n\t\t\t\tconst dataSchema = serverSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst data = dataSchema.shape.request.parse(dataAny);\n\n\t\t\t\t// If our handler doesn't complete in 80% of the default message timeout, we send a message to the caller, saying that we are expecting an answer.\n\t\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\t\tawait transport.send(\n\t\t\t\t\t\t`${event}:processing`,\n\t\t\t\t\t\t{},\n\t\t\t\t\t\t{ localAppId, remoteAppId },\n\t\t\t\t\t);\n\t\t\t\t}, 50);\n\n\t\t\t\tconst response = await handler(data);\n\n\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\tawait transport.send(event, response, { localAppId, remoteAppId });\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: will fix at some point\n\t\t\t\treturn response as any;\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlocalAppId,\n\t\t\tremoteAppId,\n\t\t},\n\t);\n\n\tconst cleanupFunctions: (() => void)[] = [];\n\tif (transport.cleanup) cleanupFunctions.push(transport.cleanup);\n\tif (cleanupRecv) cleanupFunctions.push(cleanupRecv);\n\n\tclient._cleanupTransport = () => {\n\t\tfor (const fn of cleanupFunctions) fn();\n\t};\n\n\treturn client;\n}\n","import type { Transport, ValidZodEventSchema } from \"./sdk\";\n\nexport const MESSAGE_TAG = \"typed-transport\";\n\nexport function postmessageTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tremoteWindow,\n\ttargetOrigins,\n}: {\n\tremoteWindow: Window | undefined;\n\ttargetOrigins: string[];\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tif (!remoteWindow) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"No remote window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. Sending event\",\n\t\t\t\tevent,\n\t\t\t\tdata,\n\t\t\t);\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. target origins =\",\n\t\t\t\ttargetOrigins,\n\t\t\t);\n\n\t\t\tfor (const targetOrigin of targetOrigins) {\n\t\t\t\tconsole.debug(\"[typed-transport] remoteWindow.postMessage\", {\n\t\t\t\t\tevent,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] remoteWindow.postMessage.data\",\n\t\t\t\t\tdata,\n\t\t\t\t\tJSON.stringify(data),\n\t\t\t\t);\n\n\t\t\t\tremoteWindow.postMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttargetOrigin,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (targetOrigins.length === 0) {\n\t\t\t\tremoteWindow.postMessage({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] postmessagetransport. Receiving event\",\n\t\t\t\t\tevent,\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.source !== remoteWindow ||\n\t\t\t\t\t(!targetOrigins.includes(event.origin) && targetOrigins.length > 0) ||\n\t\t\t\t\t!event.data ||\n\t\t\t\t\t!event.data.event ||\n\t\t\t\t\tevent.data.libId !== MESSAGE_TAG ||\n\t\t\t\t\tevent.data.receiverAppId !== localAppId ||\n\t\t\t\t\tevent.data.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(event.data.event, event.data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\t// Stop logging this as it's causing more confusion than it's worth.\n\t\t\t\t// console.warn(\n\t\t\t\t// 'No window. Is the SDK running on a server without a global window object?',\n\t\t\t\t// );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function reactNativeClientTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tpostMessage,\n\ttargetOrigin,\n}: {\n\tpostMessage: (data: string) => void;\n\ttargetOrigin: string;\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tpostMessage(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconst dataString = typeof event.data === \"string\" ? event.data : null;\n\t\t\t\tif (!dataString) return;\n\n\t\t\t\tconst data = JSON.parse(dataString);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.origin !== targetOrigin ||\n\t\t\t\t\t!data ||\n\t\t\t\t\t!data.event ||\n\t\t\t\t\t!data.data ||\n\t\t\t\t\tdata.libId !== MESSAGE_TAG ||\n\t\t\t\t\tdata.receiverAppId !== localAppId ||\n\t\t\t\t\tdata.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(data.event, data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"No window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n","import { z } from \"zod\";\nimport { frostedV2Theme, withError } from \"./utils\";\n\nexport const whopServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"ping\"),\n\t\trequest: z.literal(\"ping\"),\n\t\tresponse: z.literal(\"pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getTopLevelUrlData\"),\n\t\trequest: z.object({}).optional(),\n\t\tresponse: z.object({\n\t\t\tcompanyRoute: z.string(),\n\t\t\texperienceRoute: z.string(),\n\t\t\texperienceId: z.string(),\n\t\t\tviewType: z.enum([\"app\", \"admin\", \"analytics\", \"preview\"]),\n\t\t\tbaseHref: z.string(),\n\t\t\tfullHref: z.string(),\n\t\t}),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openExternalUrl\"),\n\t\trequest: z.object({\n\t\t\tnewTab: z.boolean().optional(),\n\t\t\turl: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onHrefChange\"),\n\t\trequest: z.object({\n\t\t\thref: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"inAppPurchase\"),\n\t\trequest: z.object({\n\t\t\t/**\n\t\t\t * ID returned from the `chargeUser` API call.\n\t\t\t * @example \"ch_1234567890\"\n\t\t\t */\n\t\t\tid: z.string().optional(),\n\t\t\t/**\n\t\t\t * ID of the plan returned from the `chargeUser` API call.\n\t\t\t * @example \"plan_1234567890\"\n\t\t\t */\n\t\t\tplanId: z.string(),\n\t\t}),\n\t\tresponse: withError(\n\t\t\tz.object({\n\t\t\t\tsessionId: z.string(),\n\t\t\t\t/**\n\t\t\t\t * The receipt ID can be used to verify the purchase.\n\t\t\t\t *\n\t\t\t\t * NOTE: When receiving payments you should always listen to webhooks as a fallback\n\t\t\t\t * to process the payment. Do not solely rely on the client to process payments. The receipt ID\n\t\t\t\t * can be used to deduplicate payment events.\n\t\t\t\t */\n\t\t\t\treceiptId: z.string(),\n\t\t\t}),\n\t\t\tz.string(),\n\t\t),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"closeApp\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openHelpChat\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getColorTheme\"),\n\t\trequest: z.void(),\n\t\tresponse: frostedV2Theme,\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"earliestUnreadNotification\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t}),\n\t\tresponse: z\n\t\t\t.object({\n\t\t\t\texternalId: z.string(),\n\t\t\t})\n\t\t\t.nullable(),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"markExperienceRead\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t\tnotificationExternalId: z.string().optional(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"performHaptic\"),\n\t\trequest: z.object({\n\t\t\ttype: z.enum([\"selection\", \"impact\", \"notification\"]),\n\t\t\tstyle: z.enum([\"light\", \"medium\", \"heavy\"]),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n]);\n\nexport type WhopServerSchema = z.TypeOf<typeof whopServerSchema>;\n"],"mappings":"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","names":["import_zod","timeoutId","data","cb","import_zod"]}
|
|
1
|
+
{"version":3,"sources":["../src/host.ts","../src/sdk/apps-server.ts","../src/sdk/utils.ts","../src/sdk/transport/utils.ts","../src/sdk/transport/sdk.ts","../src/sdk/transport/postmessage.ts","../src/sdk/whop-server.ts"],"sourcesContent":["import { appsServerSchema } from \"@/sdk/apps-server\";\nimport {\n\ttype ServerImplementation,\n\tcreateSDK as createPostmessageSdk,\n\tpostmessageTransport,\n} from \"@/sdk/transport\";\nimport { whopServerSchema } from \"@/sdk/whop-server\";\n\n/**\n * Create an iframe SDK for the container whop.com app.\n * This will implement the functions required by client apps.\n * Do not use this function when building apps\n */\nexport function createSdkHost({\n\tappId,\n\tonMessage,\n\tremoteWindow,\n\tremoteOrigin,\n}: {\n\tappId: string;\n\tremoteWindow: Window;\n\tremoteOrigin: string;\n\tonMessage: ServerImplementation<typeof whopServerSchema, true>;\n\tisDevelopment?: boolean;\n}) {\n\treturn createPostmessageSdk({\n\t\tclientSchema: appsServerSchema,\n\t\tserverSchema: whopServerSchema,\n\t\tforceCompleteness: true,\n\t\tserverImplementation: onMessage,\n\t\tlocalAppId: \"app_whop\",\n\t\tremoteAppId: appId,\n\t\ttransport: postmessageTransport({\n\t\t\tremoteWindow: remoteWindow,\n\t\t\ttargetOrigins: [remoteOrigin],\n\t\t}),\n\t\tserverComplete: false,\n\t\ttimeout: 200,\n\t});\n}\n","import { z } from \"zod\";\nimport { frostedV2Theme } from \"./utils\";\n\nexport const appsServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"appPing\"),\n\t\trequest: z.literal(\"app_ping\"),\n\t\tresponse: z.literal(\"app_pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onColorThemeChange\"),\n\t\trequest: frostedV2Theme,\n\t\tresponse: z.void(),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"navigateBack\"),\n\t\trequest: z.void(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"navigateForward\"),\n\t\trequest: z.void(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n]);\n\nexport type AppsServerSchema = z.TypeOf<typeof appsServerSchema>;\n","import { type ZodSchema, z } from \"zod\";\n\nexport const withError = <T extends ZodSchema, E extends ZodSchema>(\n\tschema: T,\n\terror: E,\n) => {\n\treturn z.discriminatedUnion(\"status\", [\n\t\tz.object({\n\t\t\tstatus: z.literal(\"ok\"),\n\t\t\tdata: schema,\n\t\t}),\n\t\tz.object({\n\t\t\tstatus: z.literal(\"error\"),\n\t\t\terror: error,\n\t\t}),\n\t]);\n};\n\nexport const frostedV2Theme = z\n\t.object({\n\t\tappearance: z.enum([\"light\", \"dark\"]),\n\t\taccentColor: z.string(),\n\t\tdangerColor: z.string(),\n\t\tgrayColor: z.string(),\n\t\tinfoColor: z.string(),\n\t\tsuccessColor: z.string(),\n\t\twarningColor: z.string(),\n\t})\n\t.partial();\n","export class TimeoutError extends Error {\n\tconstructor() {\n\t\tsuper(\"Timeout\");\n\t}\n}\n\nexport function randomId(length: number) {\n\tconst alphabet =\n\t\t\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\tlet str = \"\";\n\tfor (let i = 0; i < length; i++) {\n\t\tstr += alphabet[Math.floor(Math.random() * alphabet.length)];\n\t}\n\treturn str;\n}\n","import type {\n\tZodDiscriminatedUnion,\n\tZodLiteral,\n\tZodObject,\n\tZodRawShape,\n\tZodTypeAny,\n\tz,\n} from \"zod\";\nimport { TimeoutError, randomId } from \"./utils\";\n\nexport type ValidZodEventSchema = ZodDiscriminatedUnion<\n\t\"event\",\n\tZodObject<\n\t\t{\n\t\t\tevent: ZodLiteral<string>;\n\t\t\trequest: ZodTypeAny;\n\t\t\tresponse: ZodTypeAny;\n\t\t} & ZodRawShape\n\t>[]\n>;\n\ntype MaybePromise<T> = Promise<T> | T;\n\ntype T = z.infer<ValidZodEventSchema>;\n\ntype FullServerImplementation<Schema extends ValidZodEventSchema> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>;\n};\n\nexport type ClientSDK<\n\tClientSchema extends ValidZodEventSchema,\n\tComplete extends boolean,\n> = {\n\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]: (\n\t\treq: Extract<z.infer<ClientSchema>, { event: K }>[\"request\"],\n\t) => Promise<\n\t\tComplete extends true\n\t\t\t? Extract<z.infer<ClientSchema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<ClientSchema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\n\nexport type ServerImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = ForceCompleteness extends true\n\t? FullServerImplementation<Schema>\n\t: Partial<FullServerImplementation<Schema>>;\n\ntype FullServerMiddlewareImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\tnext: ForceCompleteness extends true\n\t\t\t? (\n\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>\n\t\t\t:\n\t\t\t\t\t| ((\n\t\t\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t\t ) => MaybePromise<\n\t\t\t\t\t\t\tExtract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t\t\t >)\n\t\t\t\t\t| undefined,\n\t) => MaybePromise<\n\t\tForceCompleteness extends true\n\t\t\t? Extract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<Schema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\nexport type ServerMiddleware<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = Partial<FullServerMiddlewareImplementation<Schema, ForceCompleteness>>;\n\nexport type Transport<ServerSchema extends ValidZodEventSchema | undefined> = {\n\tsend: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t) => unknown;\n\trecv: (\n\t\thandler: (\n\t\t\tevent: string,\n\t\t\tdata: unknown,\n\t\t) => Promise<\n\t\t\t| (ServerSchema extends ValidZodEventSchema\n\t\t\t\t\t? z.infer<ServerSchema>[\"response\"]\n\t\t\t\t\t: undefined)\n\t\t\t| undefined\n\t\t>,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t\t// biome-ignore lint/suspicious/noConfusingVoidType: idk\n\t) => void | (() => void);\n\tcleanup?: () => void;\n};\n\nexport function createSDK<\n\tClientSchema extends ValidZodEventSchema | undefined,\n\tServerSchema extends ValidZodEventSchema | undefined,\n\tForceCompleteness extends boolean = false,\n\tServerComplete extends boolean = false,\n>({\n\tclientSchema,\n\tserverSchema,\n\tserverComplete,\n\ttransport,\n\ttimeout = 1000,\n\ttimeouts,\n\tlocalAppId,\n\tremoteAppId,\n\tserverImplementation = {},\n\tserverMiddleware,\n}: {\n\tclientSchema: ClientSchema;\n\tserverSchema: ServerSchema;\n\tforceCompleteness?: ForceCompleteness;\n\tserverComplete?: ServerComplete;\n\tlocalAppId: string;\n\tremoteAppId: string;\n\tserverMiddleware?: ServerSchema extends ValidZodEventSchema\n\t\t? ServerMiddleware<ServerSchema, ForceCompleteness>[]\n\t\t: undefined;\n\tserverImplementation: ServerSchema extends ValidZodEventSchema\n\t\t? ServerImplementation<ServerSchema, ForceCompleteness>\n\t\t: undefined;\n\ttransport: Transport<ServerSchema>;\n\ttimeout?: number;\n\ttimeouts?: ClientSchema extends ValidZodEventSchema\n\t\t? {\n\t\t\t\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]?: number;\n\t\t\t}\n\t\t: never;\n}): (ClientSchema extends ValidZodEventSchema\n\t? ClientSDK<ClientSchema, ServerComplete>\n\t: object) & {\n\t_cleanupTransport: () => void;\n} {\n\tconst callbacks: {\n\t\tid: string;\n\t\tresolve: (data: unknown) => void;\n\t}[] = [];\n\n\tconst keys =\n\t\tclientSchema?.options.map(\n\t\t\t(option) => option._def.shape().event._def.value,\n\t\t) ?? [];\n\n\tconst client = Object.fromEntries(\n\t\tkeys.map((key) => [\n\t\t\tkey,\n\t\t\tasync (req: unknown) => {\n\t\t\t\t// We make event id unique so that we can fire many requests at the same time.\n\t\t\t\tconst eventId = `${localAppId}:${key}:${randomId(8)}`;\n\n\t\t\t\tconsole.debug(\"[typed-transport] app. Created eventId\", eventId);\n\n\t\t\t\tconst responseData = new Promise((resolve, reject) => {\n\t\t\t\t\t// Timeout the request after the specified timeout\n\t\t\t\t\tconst customTimeout = timeouts?.[key];\n\n\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\tif (serverComplete) {\n\t\t\t\t\t\t\tconsole.debug(\"[typed-transport] app. Timeout error\");\n\t\t\t\t\t\t\treject(new TimeoutError());\n\t\t\t\t\t\t} else resolve(undefined);\n\t\t\t\t\t}, customTimeout ?? timeout);\n\n\t\t\t\t\tif (customTimeout && customTimeout > timeout && !serverComplete) {\n\t\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}, timeout);\n\t\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\t\tid: `${eventId}:processing`,\n\t\t\t\t\t\t\tresolve: () => clearTimeout(timeoutId),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\tid: eventId,\n\t\t\t\t\t\tresolve: (data) => {\n\t\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tconsole.debug(\"[typed-transport] app sending event\", {\n\t\t\t\t\teventId,\n\t\t\t\t\tlocalAppId,\n\t\t\t\t\tremoteAppId,\n\t\t\t\t});\n\t\t\t\tawait transport.send?.(eventId, req, { localAppId, remoteAppId });\n\n\t\t\t\tconst data = await responseData;\n\n\t\t\t\tconsole.debug(\"[typed-transport] received response\", data);\n\n\t\t\t\treturn data;\n\t\t\t},\n\t\t]),\n\t) as (ClientSchema extends ValidZodEventSchema\n\t\t? ClientSDK<ClientSchema, ServerComplete>\n\t\t: object) & {\n\t\t_cleanupTransport: () => void;\n\t};\n\n\tconst cleanupRecv = transport.recv(\n\t\tasync (event, dataAny) => {\n\t\t\tconst [app, key, _randomId, type] = event.split(\":\");\n\t\t\tif (app === localAppId) {\n\t\t\t\t// Here we are receiving a response from a request we made.\n\t\t\t\tconst idx = callbacks.findIndex((cb) => cb.id === event);\n\t\t\t\tif (idx === -1) return;\n\t\t\t\tconst dataSchema = clientSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst cb = callbacks[idx];\n\t\t\t\tif (type === \"processing\") {\n\t\t\t\t\tcb.resolve(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tconst data = dataSchema.shape.response.parse(dataAny);\n\t\t\t\t\tcallbacks.splice(idx, 1);\n\t\t\t\t\tcb.resolve(data);\n\t\t\t\t}\n\t\t\t} else if (app === remoteAppId) {\n\t\t\t\tif (serverImplementation === undefined) return;\n\t\t\t\t// Here we are responding to a request from a client.\n\n\t\t\t\t// final handler\n\t\t\t\tlet handler = (\n\t\t\t\t\tserverImplementation as unknown as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t(data: unknown) => Promise<unknown>\n\t\t\t\t\t>\n\t\t\t\t)[key];\n\n\t\t\t\t// Build a linked list of middleware invocations that will call the final handler.\n\t\t\t\tif (serverMiddleware) {\n\t\t\t\t\tfor (let i = serverMiddleware.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tconst middlewareDef = serverMiddleware[i];\n\t\t\t\t\t\tconst middleware = middlewareDef[key] as (\n\t\t\t\t\t\t\tdata: unknown,\n\t\t\t\t\t\t\tnext: unknown,\n\t\t\t\t\t\t) => Promise<unknown>;\n\t\t\t\t\t\tif (!middleware) continue;\n\t\t\t\t\t\tconst ref = handler;\n\t\t\t\t\t\thandler = (data: unknown) => middleware(data, ref);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!handler) return;\n\t\t\t\tconst dataSchema = serverSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst data = dataSchema.shape.request.parse(dataAny);\n\n\t\t\t\t// If our handler doesn't complete in 80% of the default message timeout, we send a message to the caller, saying that we are expecting an answer.\n\t\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\t\tawait transport.send(\n\t\t\t\t\t\t`${event}:processing`,\n\t\t\t\t\t\t{},\n\t\t\t\t\t\t{ localAppId, remoteAppId },\n\t\t\t\t\t);\n\t\t\t\t}, 50);\n\n\t\t\t\tconst response = await handler(data);\n\n\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\tawait transport.send(event, response, { localAppId, remoteAppId });\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: will fix at some point\n\t\t\t\treturn response as any;\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlocalAppId,\n\t\t\tremoteAppId,\n\t\t},\n\t);\n\n\tconst cleanupFunctions: (() => void)[] = [];\n\tif (transport.cleanup) cleanupFunctions.push(transport.cleanup);\n\tif (cleanupRecv) cleanupFunctions.push(cleanupRecv);\n\n\tclient._cleanupTransport = () => {\n\t\tfor (const fn of cleanupFunctions) fn();\n\t};\n\n\treturn client;\n}\n","import type { Transport, ValidZodEventSchema } from \"./sdk\";\n\nexport const MESSAGE_TAG = \"typed-transport\";\n\nexport function postmessageTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tremoteWindow,\n\ttargetOrigins,\n}: {\n\tremoteWindow: Window | undefined;\n\ttargetOrigins: string[];\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tif (!remoteWindow) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"No remote window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. Sending event\",\n\t\t\t\tevent,\n\t\t\t\tdata,\n\t\t\t);\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. target origins =\",\n\t\t\t\ttargetOrigins,\n\t\t\t);\n\n\t\t\tfor (const targetOrigin of targetOrigins) {\n\t\t\t\tconsole.debug(\"[typed-transport] remoteWindow.postMessage\", {\n\t\t\t\t\tevent,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] remoteWindow.postMessage.data\",\n\t\t\t\t\tdata,\n\t\t\t\t\tJSON.stringify(data),\n\t\t\t\t);\n\n\t\t\t\tremoteWindow.postMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttargetOrigin,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (targetOrigins.length === 0) {\n\t\t\t\tremoteWindow.postMessage({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] postmessagetransport. Receiving event\",\n\t\t\t\t\tevent,\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.source !== remoteWindow ||\n\t\t\t\t\t(!targetOrigins.includes(event.origin) && targetOrigins.length > 0) ||\n\t\t\t\t\t!event.data ||\n\t\t\t\t\t!event.data.event ||\n\t\t\t\t\tevent.data.libId !== MESSAGE_TAG ||\n\t\t\t\t\tevent.data.receiverAppId !== localAppId ||\n\t\t\t\t\tevent.data.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(event.data.event, event.data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\t// Stop logging this as it's causing more confusion than it's worth.\n\t\t\t\t// console.warn(\n\t\t\t\t// 'No window. Is the SDK running on a server without a global window object?',\n\t\t\t\t// );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function reactNativeClientTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tpostMessage,\n\ttargetOrigin,\n}: {\n\tpostMessage: (data: string) => void;\n\ttargetOrigin: string;\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tpostMessage(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconst dataString = typeof event.data === \"string\" ? event.data : null;\n\t\t\t\tif (!dataString) return;\n\n\t\t\t\tconst data = JSON.parse(dataString);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.origin !== targetOrigin ||\n\t\t\t\t\t!data ||\n\t\t\t\t\t!data.event ||\n\t\t\t\t\t!data.data ||\n\t\t\t\t\tdata.libId !== MESSAGE_TAG ||\n\t\t\t\t\tdata.receiverAppId !== localAppId ||\n\t\t\t\t\tdata.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(data.event, data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"No window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n","import { z } from \"zod\";\nimport { frostedV2Theme, withError } from \"./utils\";\n\nexport const routeSchema = z.object({\n\tpath: z.array(z.string()),\n\tparams: z.record(z.string()),\n});\n\nexport type Route = z.TypeOf<typeof routeSchema>;\n\nexport const whopServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"ping\"),\n\t\trequest: z.literal(\"ping\"),\n\t\tresponse: z.literal(\"pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getTopLevelUrlData\"),\n\t\trequest: z.object({}).optional(),\n\t\tresponse: z.object({\n\t\t\tcompanyRoute: z.string(),\n\t\t\texperienceRoute: z.string(),\n\t\t\texperienceId: z.string(),\n\t\t\tviewType: z.enum([\"app\", \"admin\", \"analytics\", \"preview\"]),\n\t\t\tbaseHref: z.string(),\n\t\t\tfullHref: z.string(),\n\t\t}),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openExternalUrl\"),\n\t\trequest: z.object({\n\t\t\tnewTab: z.boolean().optional(),\n\t\t\turl: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onHrefChange\"),\n\t\trequest: z.object({\n\t\t\thref: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"inAppPurchase\"),\n\t\trequest: z.object({\n\t\t\t/**\n\t\t\t * ID returned from the `chargeUser` API call.\n\t\t\t * @example \"ch_1234567890\"\n\t\t\t */\n\t\t\tid: z.string().optional(),\n\t\t\t/**\n\t\t\t * ID of the plan returned from the `chargeUser` API call.\n\t\t\t * @example \"plan_1234567890\"\n\t\t\t */\n\t\t\tplanId: z.string(),\n\t\t}),\n\t\tresponse: withError(\n\t\t\tz.object({\n\t\t\t\tsessionId: z.string(),\n\t\t\t\t/**\n\t\t\t\t * The receipt ID can be used to verify the purchase.\n\t\t\t\t *\n\t\t\t\t * NOTE: When receiving payments you should always listen to webhooks as a fallback\n\t\t\t\t * to process the payment. Do not solely rely on the client to process payments. The receipt ID\n\t\t\t\t * can be used to deduplicate payment events.\n\t\t\t\t */\n\t\t\t\treceiptId: z.string(),\n\t\t\t}),\n\t\t\tz.string(),\n\t\t),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"closeApp\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openHelpChat\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getColorTheme\"),\n\t\trequest: z.void(),\n\t\tresponse: frostedV2Theme,\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"earliestUnreadNotification\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t}),\n\t\tresponse: z\n\t\t\t.object({\n\t\t\t\texternalId: z.string(),\n\t\t\t})\n\t\t\t.nullable(),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"markExperienceRead\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t\tnotificationExternalId: z.string().optional(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"performHaptic\"),\n\t\trequest: z.object({\n\t\t\ttype: z.enum([\"selection\", \"impact\", \"notification\"]),\n\t\t\tstyle: z.enum([\"light\", \"medium\", \"heavy\"]),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onNavigationStackChange\"),\n\t\trequest: z.object({\n\t\t\tstack: z.array(routeSchema),\n\t\t\tcurrentIndex: z.number(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n]);\n\nexport type WhopServerSchema = z.TypeOf<typeof whopServerSchema>;\n"],"mappings":"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","names":["import_zod","timeoutId","data","cb","import_zod"]}
|
package/dist/host.mjs
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { V as ValidZodEventSchema, S as ServerImplementation, T as Transport, C as ClientSDK, c as createSDK } from './whop-server-
|
|
3
|
-
export { w as whopServerSchema } from './whop-server-
|
|
2
|
+
import { V as ValidZodEventSchema, S as ServerImplementation, T as Transport, C as ClientSDK, c as createSDK } from './whop-server-BnXYtbx2.mjs';
|
|
3
|
+
export { w as whopServerSchema } from './whop-server-BnXYtbx2.mjs';
|
|
4
4
|
|
|
5
5
|
declare function createHandler<Schema extends ValidZodEventSchema, ForceCompleteness extends boolean = false>({ schema, forceCompleteness, handlers, }: {
|
|
6
6
|
schema: Schema;
|
|
@@ -96,6 +96,30 @@ declare const appsServerSchema: z.ZodDiscriminatedUnion<"event", [z.ZodObject<{
|
|
|
96
96
|
warningColor?: string | undefined;
|
|
97
97
|
};
|
|
98
98
|
response?: void | undefined;
|
|
99
|
+
}>, z.ZodObject<{
|
|
100
|
+
event: z.ZodLiteral<"navigateBack">;
|
|
101
|
+
request: z.ZodVoid;
|
|
102
|
+
response: z.ZodLiteral<"ok">;
|
|
103
|
+
}, "strip", z.ZodTypeAny, {
|
|
104
|
+
event: "navigateBack";
|
|
105
|
+
response: "ok";
|
|
106
|
+
request?: void | undefined;
|
|
107
|
+
}, {
|
|
108
|
+
event: "navigateBack";
|
|
109
|
+
response: "ok";
|
|
110
|
+
request?: void | undefined;
|
|
111
|
+
}>, z.ZodObject<{
|
|
112
|
+
event: z.ZodLiteral<"navigateForward">;
|
|
113
|
+
request: z.ZodVoid;
|
|
114
|
+
response: z.ZodLiteral<"ok">;
|
|
115
|
+
}, "strip", z.ZodTypeAny, {
|
|
116
|
+
event: "navigateForward";
|
|
117
|
+
response: "ok";
|
|
118
|
+
request?: void | undefined;
|
|
119
|
+
}, {
|
|
120
|
+
event: "navigateForward";
|
|
121
|
+
response: "ok";
|
|
122
|
+
request?: void | undefined;
|
|
99
123
|
}>]>;
|
|
100
124
|
|
|
101
125
|
/**
|
|
@@ -454,6 +478,54 @@ declare function createSdk({ onMessage, appId, overrideParentOrigins, }: {
|
|
|
454
478
|
style: "light" | "medium" | "heavy";
|
|
455
479
|
};
|
|
456
480
|
response: "ok";
|
|
481
|
+
}>, z.ZodObject<{
|
|
482
|
+
event: z.ZodLiteral<"onNavigationStackChange">;
|
|
483
|
+
request: z.ZodObject<{
|
|
484
|
+
stack: z.ZodArray<z.ZodObject<{
|
|
485
|
+
path: z.ZodArray<z.ZodString, "many">;
|
|
486
|
+
params: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
487
|
+
}, "strip", z.ZodTypeAny, {
|
|
488
|
+
params: Record<string, string>;
|
|
489
|
+
path: string[];
|
|
490
|
+
}, {
|
|
491
|
+
params: Record<string, string>;
|
|
492
|
+
path: string[];
|
|
493
|
+
}>, "many">;
|
|
494
|
+
currentIndex: z.ZodNumber;
|
|
495
|
+
}, "strip", z.ZodTypeAny, {
|
|
496
|
+
stack: {
|
|
497
|
+
params: Record<string, string>;
|
|
498
|
+
path: string[];
|
|
499
|
+
}[];
|
|
500
|
+
currentIndex: number;
|
|
501
|
+
}, {
|
|
502
|
+
stack: {
|
|
503
|
+
params: Record<string, string>;
|
|
504
|
+
path: string[];
|
|
505
|
+
}[];
|
|
506
|
+
currentIndex: number;
|
|
507
|
+
}>;
|
|
508
|
+
response: z.ZodLiteral<"ok">;
|
|
509
|
+
}, "strip", z.ZodTypeAny, {
|
|
510
|
+
event: "onNavigationStackChange";
|
|
511
|
+
request: {
|
|
512
|
+
stack: {
|
|
513
|
+
params: Record<string, string>;
|
|
514
|
+
path: string[];
|
|
515
|
+
}[];
|
|
516
|
+
currentIndex: number;
|
|
517
|
+
};
|
|
518
|
+
response: "ok";
|
|
519
|
+
}, {
|
|
520
|
+
event: "onNavigationStackChange";
|
|
521
|
+
request: {
|
|
522
|
+
stack: {
|
|
523
|
+
params: Record<string, string>;
|
|
524
|
+
path: string[];
|
|
525
|
+
}[];
|
|
526
|
+
currentIndex: number;
|
|
527
|
+
};
|
|
528
|
+
response: "ok";
|
|
457
529
|
}>]>, true> & {
|
|
458
530
|
_cleanupTransport: () => void;
|
|
459
531
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { V as ValidZodEventSchema, S as ServerImplementation, T as Transport, C as ClientSDK, c as createSDK } from './whop-server-
|
|
3
|
-
export { w as whopServerSchema } from './whop-server-
|
|
2
|
+
import { V as ValidZodEventSchema, S as ServerImplementation, T as Transport, C as ClientSDK, c as createSDK } from './whop-server-BnXYtbx2.js';
|
|
3
|
+
export { w as whopServerSchema } from './whop-server-BnXYtbx2.js';
|
|
4
4
|
|
|
5
5
|
declare function createHandler<Schema extends ValidZodEventSchema, ForceCompleteness extends boolean = false>({ schema, forceCompleteness, handlers, }: {
|
|
6
6
|
schema: Schema;
|
|
@@ -96,6 +96,30 @@ declare const appsServerSchema: z.ZodDiscriminatedUnion<"event", [z.ZodObject<{
|
|
|
96
96
|
warningColor?: string | undefined;
|
|
97
97
|
};
|
|
98
98
|
response?: void | undefined;
|
|
99
|
+
}>, z.ZodObject<{
|
|
100
|
+
event: z.ZodLiteral<"navigateBack">;
|
|
101
|
+
request: z.ZodVoid;
|
|
102
|
+
response: z.ZodLiteral<"ok">;
|
|
103
|
+
}, "strip", z.ZodTypeAny, {
|
|
104
|
+
event: "navigateBack";
|
|
105
|
+
response: "ok";
|
|
106
|
+
request?: void | undefined;
|
|
107
|
+
}, {
|
|
108
|
+
event: "navigateBack";
|
|
109
|
+
response: "ok";
|
|
110
|
+
request?: void | undefined;
|
|
111
|
+
}>, z.ZodObject<{
|
|
112
|
+
event: z.ZodLiteral<"navigateForward">;
|
|
113
|
+
request: z.ZodVoid;
|
|
114
|
+
response: z.ZodLiteral<"ok">;
|
|
115
|
+
}, "strip", z.ZodTypeAny, {
|
|
116
|
+
event: "navigateForward";
|
|
117
|
+
response: "ok";
|
|
118
|
+
request?: void | undefined;
|
|
119
|
+
}, {
|
|
120
|
+
event: "navigateForward";
|
|
121
|
+
response: "ok";
|
|
122
|
+
request?: void | undefined;
|
|
99
123
|
}>]>;
|
|
100
124
|
|
|
101
125
|
/**
|
|
@@ -454,6 +478,54 @@ declare function createSdk({ onMessage, appId, overrideParentOrigins, }: {
|
|
|
454
478
|
style: "light" | "medium" | "heavy";
|
|
455
479
|
};
|
|
456
480
|
response: "ok";
|
|
481
|
+
}>, z.ZodObject<{
|
|
482
|
+
event: z.ZodLiteral<"onNavigationStackChange">;
|
|
483
|
+
request: z.ZodObject<{
|
|
484
|
+
stack: z.ZodArray<z.ZodObject<{
|
|
485
|
+
path: z.ZodArray<z.ZodString, "many">;
|
|
486
|
+
params: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
487
|
+
}, "strip", z.ZodTypeAny, {
|
|
488
|
+
params: Record<string, string>;
|
|
489
|
+
path: string[];
|
|
490
|
+
}, {
|
|
491
|
+
params: Record<string, string>;
|
|
492
|
+
path: string[];
|
|
493
|
+
}>, "many">;
|
|
494
|
+
currentIndex: z.ZodNumber;
|
|
495
|
+
}, "strip", z.ZodTypeAny, {
|
|
496
|
+
stack: {
|
|
497
|
+
params: Record<string, string>;
|
|
498
|
+
path: string[];
|
|
499
|
+
}[];
|
|
500
|
+
currentIndex: number;
|
|
501
|
+
}, {
|
|
502
|
+
stack: {
|
|
503
|
+
params: Record<string, string>;
|
|
504
|
+
path: string[];
|
|
505
|
+
}[];
|
|
506
|
+
currentIndex: number;
|
|
507
|
+
}>;
|
|
508
|
+
response: z.ZodLiteral<"ok">;
|
|
509
|
+
}, "strip", z.ZodTypeAny, {
|
|
510
|
+
event: "onNavigationStackChange";
|
|
511
|
+
request: {
|
|
512
|
+
stack: {
|
|
513
|
+
params: Record<string, string>;
|
|
514
|
+
path: string[];
|
|
515
|
+
}[];
|
|
516
|
+
currentIndex: number;
|
|
517
|
+
};
|
|
518
|
+
response: "ok";
|
|
519
|
+
}, {
|
|
520
|
+
event: "onNavigationStackChange";
|
|
521
|
+
request: {
|
|
522
|
+
stack: {
|
|
523
|
+
params: Record<string, string>;
|
|
524
|
+
path: string[];
|
|
525
|
+
}[];
|
|
526
|
+
currentIndex: number;
|
|
527
|
+
};
|
|
528
|
+
response: "ok";
|
|
457
529
|
}>]>, true> & {
|
|
458
530
|
_cleanupTransport: () => void;
|
|
459
531
|
};
|
package/dist/index.js
CHANGED
|
@@ -65,6 +65,16 @@ var appsServerSchema = import_zod2.z.discriminatedUnion("event", [
|
|
|
65
65
|
event: import_zod2.z.literal("onColorThemeChange"),
|
|
66
66
|
request: frostedV2Theme,
|
|
67
67
|
response: import_zod2.z.void()
|
|
68
|
+
}),
|
|
69
|
+
import_zod2.z.object({
|
|
70
|
+
event: import_zod2.z.literal("navigateBack"),
|
|
71
|
+
request: import_zod2.z.void(),
|
|
72
|
+
response: import_zod2.z.literal("ok")
|
|
73
|
+
}),
|
|
74
|
+
import_zod2.z.object({
|
|
75
|
+
event: import_zod2.z.literal("navigateForward"),
|
|
76
|
+
request: import_zod2.z.void(),
|
|
77
|
+
response: import_zod2.z.literal("ok")
|
|
68
78
|
})
|
|
69
79
|
]);
|
|
70
80
|
|
|
@@ -405,6 +415,10 @@ function reactNativeClientTransport({
|
|
|
405
415
|
|
|
406
416
|
// src/sdk/whop-server.ts
|
|
407
417
|
var import_zod3 = require("zod");
|
|
418
|
+
var routeSchema = import_zod3.z.object({
|
|
419
|
+
path: import_zod3.z.array(import_zod3.z.string()),
|
|
420
|
+
params: import_zod3.z.record(import_zod3.z.string())
|
|
421
|
+
});
|
|
408
422
|
var whopServerSchema = import_zod3.z.discriminatedUnion("event", [
|
|
409
423
|
import_zod3.z.object({
|
|
410
424
|
event: import_zod3.z.literal("ping"),
|
|
@@ -506,6 +520,14 @@ var whopServerSchema = import_zod3.z.discriminatedUnion("event", [
|
|
|
506
520
|
style: import_zod3.z.enum(["light", "medium", "heavy"])
|
|
507
521
|
}),
|
|
508
522
|
response: import_zod3.z.literal("ok")
|
|
523
|
+
}),
|
|
524
|
+
import_zod3.z.object({
|
|
525
|
+
event: import_zod3.z.literal("onNavigationStackChange"),
|
|
526
|
+
request: import_zod3.z.object({
|
|
527
|
+
stack: import_zod3.z.array(routeSchema),
|
|
528
|
+
currentIndex: import_zod3.z.number()
|
|
529
|
+
}),
|
|
530
|
+
response: import_zod3.z.literal("ok")
|
|
509
531
|
})
|
|
510
532
|
]);
|
|
511
533
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/sdk/apps-server.ts","../src/sdk/utils.ts","../src/sdk/mobile-app-postmessage.ts","../src/sdk/sync-href.ts","../src/sdk/transport/index.ts","../src/sdk/transport/utils.ts","../src/sdk/transport/sdk.ts","../src/sdk/transport/handler.ts","../src/sdk/transport/postmessage.ts","../src/sdk/whop-server.ts","../src/sdk/index.ts"],"sourcesContent":["export * from \"@/sdk\";\nexport * as transport from \"@/sdk/transport\";\n","import { z } from \"zod\";\nimport { frostedV2Theme } from \"./utils\";\n\nexport const appsServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"appPing\"),\n\t\trequest: z.literal(\"app_ping\"),\n\t\tresponse: z.literal(\"app_pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onColorThemeChange\"),\n\t\trequest: frostedV2Theme,\n\t\tresponse: z.void(),\n\t}),\n]);\n\nexport type AppsServerSchema = z.TypeOf<typeof appsServerSchema>;\n","import { type ZodSchema, z } from \"zod\";\n\nexport const withError = <T extends ZodSchema, E extends ZodSchema>(\n\tschema: T,\n\terror: E,\n) => {\n\treturn z.discriminatedUnion(\"status\", [\n\t\tz.object({\n\t\t\tstatus: z.literal(\"ok\"),\n\t\t\tdata: schema,\n\t\t}),\n\t\tz.object({\n\t\t\tstatus: z.literal(\"error\"),\n\t\t\terror: error,\n\t\t}),\n\t]);\n};\n\nexport const frostedV2Theme = z\n\t.object({\n\t\tappearance: z.enum([\"light\", \"dark\"]),\n\t\taccentColor: z.string(),\n\t\tdangerColor: z.string(),\n\t\tgrayColor: z.string(),\n\t\tinfoColor: z.string(),\n\t\tsuccessColor: z.string(),\n\t\twarningColor: z.string(),\n\t})\n\t.partial();\n","export function getReactNativePostMessage() {\n\tconst reactNativePostMessage =\n\t\ttypeof window !== \"undefined\" &&\n\t\t\"ReactNativeWebView\" in window &&\n\t\ttypeof window.ReactNativeWebView === \"object\" &&\n\t\twindow.ReactNativeWebView &&\n\t\t\"postMessage\" in window.ReactNativeWebView &&\n\t\ttypeof window.ReactNativeWebView.postMessage === \"function\"\n\t\t\t? (data: string) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof window !== \"undefined\" &&\n\t\t\t\t\t\t\"ReactNativeWebView\" in window &&\n\t\t\t\t\t\ttypeof window.ReactNativeWebView === \"object\" &&\n\t\t\t\t\t\twindow.ReactNativeWebView &&\n\t\t\t\t\t\t\"postMessage\" in window.ReactNativeWebView &&\n\t\t\t\t\t\ttypeof window.ReactNativeWebView.postMessage === \"function\"\n\t\t\t\t\t)\n\t\t\t\t\t\twindow?.ReactNativeWebView?.postMessage(data);\n\t\t\t\t}\n\t\t\t: undefined;\n\treturn reactNativePostMessage;\n}\n\nexport function getSwiftPostMessage() {\n\tconst swiftMessageHandler =\n\t\ttypeof window !== \"undefined\" &&\n\t\t\"webkit\" in window &&\n\t\ttypeof window.webkit === \"object\" &&\n\t\twindow.webkit !== null &&\n\t\t\"messageHandlers\" in window.webkit &&\n\t\ttypeof window.webkit.messageHandlers === \"object\" &&\n\t\twindow.webkit.messageHandlers !== null &&\n\t\t\"SwiftWebView\" in window.webkit.messageHandlers &&\n\t\ttypeof window.webkit.messageHandlers.SwiftWebView === \"object\" &&\n\t\twindow.webkit.messageHandlers.SwiftWebView !== null &&\n\t\t\"postMessage\" in window.webkit.messageHandlers.SwiftWebView\n\t\t\t? window.webkit.messageHandlers.SwiftWebView\n\t\t\t: null;\n\n\tconst swiftPostMessage = swiftMessageHandler\n\t\t? (data: string) => {\n\t\t\t\tif (typeof swiftMessageHandler.postMessage === \"function\") {\n\t\t\t\t\tswiftMessageHandler.postMessage(data);\n\t\t\t\t}\n\t\t\t}\n\t\t: undefined;\n\n\treturn swiftPostMessage;\n}\n","declare global {\n\tinterface Window {\n\t\t_whop_sync_href_interval?: ReturnType<typeof setInterval>;\n\t}\n}\n\nexport function syncHref({\n\tonChange,\n}: { onChange: (req: { href: string }) => Promise<\"ok\"> }) {\n\tif (typeof window === \"undefined\") return;\n\n\tconst initialHref = window.location.href;\n\tonChange({ href: initialHref }).catch(() => null);\n\tlet lastKnown = initialHref;\n\n\twindow.addEventListener(\"popstate\", () => {\n\t\tconst { href } = window.location;\n\t\tonChange({ href }).catch(() => null);\n\t\tlastKnown = href;\n\t});\n\n\tif (window._whop_sync_href_interval) {\n\t\tclearInterval(window._whop_sync_href_interval);\n\t}\n\twindow._whop_sync_href_interval = setInterval(() => {\n\t\tconst { href } = window.location;\n\t\tif (href === lastKnown) return;\n\t\tonChange({ href }).catch(() => null);\n\t\tlastKnown = href;\n\t}, 250);\n}\n","export { createHandler } from \"./handler\";\nexport { MESSAGE_TAG, postmessageTransport } from \"./postmessage\";\nexport { createSDK } from \"./sdk\";\n\nexport type {\n\tClientSDK,\n\tServerImplementation,\n\tTransport,\n\tValidZodEventSchema,\n} from \"./sdk\";\n\nexport { TimeoutError } from \"./utils\";\n","export class TimeoutError extends Error {\n\tconstructor() {\n\t\tsuper(\"Timeout\");\n\t}\n}\n\nexport function randomId(length: number) {\n\tconst alphabet =\n\t\t\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\tlet str = \"\";\n\tfor (let i = 0; i < length; i++) {\n\t\tstr += alphabet[Math.floor(Math.random() * alphabet.length)];\n\t}\n\treturn str;\n}\n","import type {\n\tZodDiscriminatedUnion,\n\tZodLiteral,\n\tZodObject,\n\tZodRawShape,\n\tZodTypeAny,\n\tz,\n} from \"zod\";\nimport { TimeoutError, randomId } from \"./utils\";\n\nexport type ValidZodEventSchema = ZodDiscriminatedUnion<\n\t\"event\",\n\tZodObject<\n\t\t{\n\t\t\tevent: ZodLiteral<string>;\n\t\t\trequest: ZodTypeAny;\n\t\t\tresponse: ZodTypeAny;\n\t\t} & ZodRawShape\n\t>[]\n>;\n\ntype MaybePromise<T> = Promise<T> | T;\n\ntype T = z.infer<ValidZodEventSchema>;\n\ntype FullServerImplementation<Schema extends ValidZodEventSchema> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>;\n};\n\nexport type ClientSDK<\n\tClientSchema extends ValidZodEventSchema,\n\tComplete extends boolean,\n> = {\n\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]: (\n\t\treq: Extract<z.infer<ClientSchema>, { event: K }>[\"request\"],\n\t) => Promise<\n\t\tComplete extends true\n\t\t\t? Extract<z.infer<ClientSchema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<ClientSchema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\n\nexport type ServerImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = ForceCompleteness extends true\n\t? FullServerImplementation<Schema>\n\t: Partial<FullServerImplementation<Schema>>;\n\ntype FullServerMiddlewareImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\tnext: ForceCompleteness extends true\n\t\t\t? (\n\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>\n\t\t\t:\n\t\t\t\t\t| ((\n\t\t\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t\t ) => MaybePromise<\n\t\t\t\t\t\t\tExtract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t\t\t >)\n\t\t\t\t\t| undefined,\n\t) => MaybePromise<\n\t\tForceCompleteness extends true\n\t\t\t? Extract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<Schema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\nexport type ServerMiddleware<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = Partial<FullServerMiddlewareImplementation<Schema, ForceCompleteness>>;\n\nexport type Transport<ServerSchema extends ValidZodEventSchema | undefined> = {\n\tsend: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t) => unknown;\n\trecv: (\n\t\thandler: (\n\t\t\tevent: string,\n\t\t\tdata: unknown,\n\t\t) => Promise<\n\t\t\t| (ServerSchema extends ValidZodEventSchema\n\t\t\t\t\t? z.infer<ServerSchema>[\"response\"]\n\t\t\t\t\t: undefined)\n\t\t\t| undefined\n\t\t>,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t\t// biome-ignore lint/suspicious/noConfusingVoidType: idk\n\t) => void | (() => void);\n\tcleanup?: () => void;\n};\n\nexport function createSDK<\n\tClientSchema extends ValidZodEventSchema | undefined,\n\tServerSchema extends ValidZodEventSchema | undefined,\n\tForceCompleteness extends boolean = false,\n\tServerComplete extends boolean = false,\n>({\n\tclientSchema,\n\tserverSchema,\n\tserverComplete,\n\ttransport,\n\ttimeout = 1000,\n\ttimeouts,\n\tlocalAppId,\n\tremoteAppId,\n\tserverImplementation = {},\n\tserverMiddleware,\n}: {\n\tclientSchema: ClientSchema;\n\tserverSchema: ServerSchema;\n\tforceCompleteness?: ForceCompleteness;\n\tserverComplete?: ServerComplete;\n\tlocalAppId: string;\n\tremoteAppId: string;\n\tserverMiddleware?: ServerSchema extends ValidZodEventSchema\n\t\t? ServerMiddleware<ServerSchema, ForceCompleteness>[]\n\t\t: undefined;\n\tserverImplementation: ServerSchema extends ValidZodEventSchema\n\t\t? ServerImplementation<ServerSchema, ForceCompleteness>\n\t\t: undefined;\n\ttransport: Transport<ServerSchema>;\n\ttimeout?: number;\n\ttimeouts?: ClientSchema extends ValidZodEventSchema\n\t\t? {\n\t\t\t\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]?: number;\n\t\t\t}\n\t\t: never;\n}): (ClientSchema extends ValidZodEventSchema\n\t? ClientSDK<ClientSchema, ServerComplete>\n\t: object) & {\n\t_cleanupTransport: () => void;\n} {\n\tconst callbacks: {\n\t\tid: string;\n\t\tresolve: (data: unknown) => void;\n\t}[] = [];\n\n\tconst keys =\n\t\tclientSchema?.options.map(\n\t\t\t(option) => option._def.shape().event._def.value,\n\t\t) ?? [];\n\n\tconst client = Object.fromEntries(\n\t\tkeys.map((key) => [\n\t\t\tkey,\n\t\t\tasync (req: unknown) => {\n\t\t\t\t// We make event id unique so that we can fire many requests at the same time.\n\t\t\t\tconst eventId = `${localAppId}:${key}:${randomId(8)}`;\n\n\t\t\t\tconsole.debug(\"[typed-transport] app. Created eventId\", eventId);\n\n\t\t\t\tconst responseData = new Promise((resolve, reject) => {\n\t\t\t\t\t// Timeout the request after the specified timeout\n\t\t\t\t\tconst customTimeout = timeouts?.[key];\n\n\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\tif (serverComplete) {\n\t\t\t\t\t\t\tconsole.debug(\"[typed-transport] app. Timeout error\");\n\t\t\t\t\t\t\treject(new TimeoutError());\n\t\t\t\t\t\t} else resolve(undefined);\n\t\t\t\t\t}, customTimeout ?? timeout);\n\n\t\t\t\t\tif (customTimeout && customTimeout > timeout && !serverComplete) {\n\t\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}, timeout);\n\t\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\t\tid: `${eventId}:processing`,\n\t\t\t\t\t\t\tresolve: () => clearTimeout(timeoutId),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\tid: eventId,\n\t\t\t\t\t\tresolve: (data) => {\n\t\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tconsole.debug(\"[typed-transport] app sending event\", {\n\t\t\t\t\teventId,\n\t\t\t\t\tlocalAppId,\n\t\t\t\t\tremoteAppId,\n\t\t\t\t});\n\t\t\t\tawait transport.send?.(eventId, req, { localAppId, remoteAppId });\n\n\t\t\t\tconst data = await responseData;\n\n\t\t\t\tconsole.debug(\"[typed-transport] received response\", data);\n\n\t\t\t\treturn data;\n\t\t\t},\n\t\t]),\n\t) as (ClientSchema extends ValidZodEventSchema\n\t\t? ClientSDK<ClientSchema, ServerComplete>\n\t\t: object) & {\n\t\t_cleanupTransport: () => void;\n\t};\n\n\tconst cleanupRecv = transport.recv(\n\t\tasync (event, dataAny) => {\n\t\t\tconst [app, key, _randomId, type] = event.split(\":\");\n\t\t\tif (app === localAppId) {\n\t\t\t\t// Here we are receiving a response from a request we made.\n\t\t\t\tconst idx = callbacks.findIndex((cb) => cb.id === event);\n\t\t\t\tif (idx === -1) return;\n\t\t\t\tconst dataSchema = clientSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst cb = callbacks[idx];\n\t\t\t\tif (type === \"processing\") {\n\t\t\t\t\tcb.resolve(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tconst data = dataSchema.shape.response.parse(dataAny);\n\t\t\t\t\tcallbacks.splice(idx, 1);\n\t\t\t\t\tcb.resolve(data);\n\t\t\t\t}\n\t\t\t} else if (app === remoteAppId) {\n\t\t\t\tif (serverImplementation === undefined) return;\n\t\t\t\t// Here we are responding to a request from a client.\n\n\t\t\t\t// final handler\n\t\t\t\tlet handler = (\n\t\t\t\t\tserverImplementation as unknown as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t(data: unknown) => Promise<unknown>\n\t\t\t\t\t>\n\t\t\t\t)[key];\n\n\t\t\t\t// Build a linked list of middleware invocations that will call the final handler.\n\t\t\t\tif (serverMiddleware) {\n\t\t\t\t\tfor (let i = serverMiddleware.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tconst middlewareDef = serverMiddleware[i];\n\t\t\t\t\t\tconst middleware = middlewareDef[key] as (\n\t\t\t\t\t\t\tdata: unknown,\n\t\t\t\t\t\t\tnext: unknown,\n\t\t\t\t\t\t) => Promise<unknown>;\n\t\t\t\t\t\tif (!middleware) continue;\n\t\t\t\t\t\tconst ref = handler;\n\t\t\t\t\t\thandler = (data: unknown) => middleware(data, ref);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!handler) return;\n\t\t\t\tconst dataSchema = serverSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst data = dataSchema.shape.request.parse(dataAny);\n\n\t\t\t\t// If our handler doesn't complete in 80% of the default message timeout, we send a message to the caller, saying that we are expecting an answer.\n\t\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\t\tawait transport.send(\n\t\t\t\t\t\t`${event}:processing`,\n\t\t\t\t\t\t{},\n\t\t\t\t\t\t{ localAppId, remoteAppId },\n\t\t\t\t\t);\n\t\t\t\t}, 50);\n\n\t\t\t\tconst response = await handler(data);\n\n\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\tawait transport.send(event, response, { localAppId, remoteAppId });\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: will fix at some point\n\t\t\t\treturn response as any;\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlocalAppId,\n\t\t\tremoteAppId,\n\t\t},\n\t);\n\n\tconst cleanupFunctions: (() => void)[] = [];\n\tif (transport.cleanup) cleanupFunctions.push(transport.cleanup);\n\tif (cleanupRecv) cleanupFunctions.push(cleanupRecv);\n\n\tclient._cleanupTransport = () => {\n\t\tfor (const fn of cleanupFunctions) fn();\n\t};\n\n\treturn client;\n}\n","import type { z } from \"zod\";\nimport {\n\ttype ServerImplementation,\n\ttype ValidZodEventSchema,\n\tcreateSDK,\n} from \"./sdk\";\n\nexport function createHandler<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n>({\n\tschema,\n\tforceCompleteness,\n\thandlers,\n}: {\n\tschema: Schema;\n\tforceCompleteness?: ForceCompleteness;\n\thandlers: Schema extends ValidZodEventSchema\n\t\t? ServerImplementation<Schema, ForceCompleteness>\n\t\t: undefined;\n}) {\n\tlet eventHandler: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t) => Promise<\n\t\t| (Schema extends ValidZodEventSchema\n\t\t\t\t? z.TypeOf<Schema>[\"response\"]\n\t\t\t\t: undefined)\n\t\t| undefined\n\t>;\n\n\tcreateSDK<undefined, Schema, ForceCompleteness, false>({\n\t\tclientSchema: undefined,\n\t\tserverSchema: schema,\n\t\tlocalAppId: \"client\",\n\t\tremoteAppId: \"server\",\n\t\tforceCompleteness,\n\t\tserverImplementation: handlers,\n\t\ttransport: {\n\t\t\tsend() {\n\t\t\t\t// empty, only handling incoming events\n\t\t\t},\n\t\t\trecv(handler) {\n\t\t\t\teventHandler = handler;\n\t\t\t},\n\t\t},\n\t});\n\n\treturn (event: string, data: unknown) => {\n\t\treturn eventHandler(`server:${event}`, data);\n\t};\n}\n","import type { Transport, ValidZodEventSchema } from \"./sdk\";\n\nexport const MESSAGE_TAG = \"typed-transport\";\n\nexport function postmessageTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tremoteWindow,\n\ttargetOrigins,\n}: {\n\tremoteWindow: Window | undefined;\n\ttargetOrigins: string[];\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tif (!remoteWindow) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"No remote window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. Sending event\",\n\t\t\t\tevent,\n\t\t\t\tdata,\n\t\t\t);\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. target origins =\",\n\t\t\t\ttargetOrigins,\n\t\t\t);\n\n\t\t\tfor (const targetOrigin of targetOrigins) {\n\t\t\t\tconsole.debug(\"[typed-transport] remoteWindow.postMessage\", {\n\t\t\t\t\tevent,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] remoteWindow.postMessage.data\",\n\t\t\t\t\tdata,\n\t\t\t\t\tJSON.stringify(data),\n\t\t\t\t);\n\n\t\t\t\tremoteWindow.postMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttargetOrigin,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (targetOrigins.length === 0) {\n\t\t\t\tremoteWindow.postMessage({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] postmessagetransport. Receiving event\",\n\t\t\t\t\tevent,\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.source !== remoteWindow ||\n\t\t\t\t\t(!targetOrigins.includes(event.origin) && targetOrigins.length > 0) ||\n\t\t\t\t\t!event.data ||\n\t\t\t\t\t!event.data.event ||\n\t\t\t\t\tevent.data.libId !== MESSAGE_TAG ||\n\t\t\t\t\tevent.data.receiverAppId !== localAppId ||\n\t\t\t\t\tevent.data.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(event.data.event, event.data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\t// Stop logging this as it's causing more confusion than it's worth.\n\t\t\t\t// console.warn(\n\t\t\t\t// 'No window. Is the SDK running on a server without a global window object?',\n\t\t\t\t// );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function reactNativeClientTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tpostMessage,\n\ttargetOrigin,\n}: {\n\tpostMessage: (data: string) => void;\n\ttargetOrigin: string;\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tpostMessage(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconst dataString = typeof event.data === \"string\" ? event.data : null;\n\t\t\t\tif (!dataString) return;\n\n\t\t\t\tconst data = JSON.parse(dataString);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.origin !== targetOrigin ||\n\t\t\t\t\t!data ||\n\t\t\t\t\t!data.event ||\n\t\t\t\t\t!data.data ||\n\t\t\t\t\tdata.libId !== MESSAGE_TAG ||\n\t\t\t\t\tdata.receiverAppId !== localAppId ||\n\t\t\t\t\tdata.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(data.event, data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"No window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n","import { z } from \"zod\";\nimport { frostedV2Theme, withError } from \"./utils\";\n\nexport const whopServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"ping\"),\n\t\trequest: z.literal(\"ping\"),\n\t\tresponse: z.literal(\"pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getTopLevelUrlData\"),\n\t\trequest: z.object({}).optional(),\n\t\tresponse: z.object({\n\t\t\tcompanyRoute: z.string(),\n\t\t\texperienceRoute: z.string(),\n\t\t\texperienceId: z.string(),\n\t\t\tviewType: z.enum([\"app\", \"admin\", \"analytics\", \"preview\"]),\n\t\t\tbaseHref: z.string(),\n\t\t\tfullHref: z.string(),\n\t\t}),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openExternalUrl\"),\n\t\trequest: z.object({\n\t\t\tnewTab: z.boolean().optional(),\n\t\t\turl: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onHrefChange\"),\n\t\trequest: z.object({\n\t\t\thref: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"inAppPurchase\"),\n\t\trequest: z.object({\n\t\t\t/**\n\t\t\t * ID returned from the `chargeUser` API call.\n\t\t\t * @example \"ch_1234567890\"\n\t\t\t */\n\t\t\tid: z.string().optional(),\n\t\t\t/**\n\t\t\t * ID of the plan returned from the `chargeUser` API call.\n\t\t\t * @example \"plan_1234567890\"\n\t\t\t */\n\t\t\tplanId: z.string(),\n\t\t}),\n\t\tresponse: withError(\n\t\t\tz.object({\n\t\t\t\tsessionId: z.string(),\n\t\t\t\t/**\n\t\t\t\t * The receipt ID can be used to verify the purchase.\n\t\t\t\t *\n\t\t\t\t * NOTE: When receiving payments you should always listen to webhooks as a fallback\n\t\t\t\t * to process the payment. Do not solely rely on the client to process payments. The receipt ID\n\t\t\t\t * can be used to deduplicate payment events.\n\t\t\t\t */\n\t\t\t\treceiptId: z.string(),\n\t\t\t}),\n\t\t\tz.string(),\n\t\t),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"closeApp\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openHelpChat\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getColorTheme\"),\n\t\trequest: z.void(),\n\t\tresponse: frostedV2Theme,\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"earliestUnreadNotification\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t}),\n\t\tresponse: z\n\t\t\t.object({\n\t\t\t\texternalId: z.string(),\n\t\t\t})\n\t\t\t.nullable(),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"markExperienceRead\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t\tnotificationExternalId: z.string().optional(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"performHaptic\"),\n\t\trequest: z.object({\n\t\t\ttype: z.enum([\"selection\", \"impact\", \"notification\"]),\n\t\t\tstyle: z.enum([\"light\", \"medium\", \"heavy\"]),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n]);\n\nexport type WhopServerSchema = z.TypeOf<typeof whopServerSchema>;\n","import { appsServerSchema } from \"@/sdk/apps-server\";\nimport {\n\tgetReactNativePostMessage,\n\tgetSwiftPostMessage,\n} from \"@/sdk/mobile-app-postmessage\";\nimport { syncHref } from \"@/sdk/sync-href\";\nimport {\n\ttype ServerImplementation,\n\tcreateSDK as createPostmessageSdk,\n\tpostmessageTransport,\n} from \"@/sdk/transport\";\nimport { reactNativeClientTransport } from \"@/sdk/transport/postmessage\";\nimport type { frostedV2Theme } from \"@/sdk/utils\";\nimport { whopServerSchema } from \"@/sdk/whop-server\";\nimport type { z } from \"zod\";\n\nexport { appsServerSchema, whopServerSchema };\n\nfunction setColorTheme(theme: z.infer<typeof frostedV2Theme>) {\n\tdocument.documentElement.dispatchEvent(\n\t\tnew CustomEvent(\"frosted-ui:set-theme\", {\n\t\t\tdetail: theme,\n\t\t}),\n\t);\n}\n\n/**\n * Create an iframe SDK for a client app. This will communicate with the parent\n * window which is required to be whop.com.\n */\nexport function createSdk({\n\tonMessage = {},\n\tappId = process.env.NEXT_PUBLIC_WHOP_APP_ID,\n\toverrideParentOrigins,\n}: {\n\tonMessage?: ServerImplementation<typeof appsServerSchema, false>;\n\tappId?: string;\n\toverrideParentOrigins?: string[];\n}) {\n\tconst mobileWebView = getSwiftPostMessage() ?? getReactNativePostMessage();\n\n\tconst remoteWindow =\n\t\ttypeof window === \"undefined\" ? undefined : window.parent;\n\n\tif (!appId) {\n\t\tthrow new Error(\n\t\t\t\"[createSdk]: appId is required. Please provide an appId or set the NEXT_PUBLIC_WHOP_APP_ID environment variable.\",\n\t\t);\n\t}\n\n\tconst sdk = createPostmessageSdk({\n\t\tclientSchema: whopServerSchema,\n\t\tserverSchema: appsServerSchema,\n\t\tforceCompleteness: false,\n\t\tserverImplementation: onMessage,\n\t\tlocalAppId: appId,\n\t\tremoteAppId: \"app_whop\",\n\t\ttransport: mobileWebView\n\t\t\t? reactNativeClientTransport({\n\t\t\t\t\tpostMessage: mobileWebView,\n\t\t\t\t\ttargetOrigin: \"com.whop.whopapp\",\n\t\t\t\t})\n\t\t\t: postmessageTransport({\n\t\t\t\t\tremoteWindow,\n\t\t\t\t\ttargetOrigins: overrideParentOrigins ?? [\n\t\t\t\t\t\t\"https://whop.com\",\n\t\t\t\t\t\t\"https://dash.whop.com\",\n\t\t\t\t\t\t\"http://localhost:8003\",\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\tserverComplete: true,\n\t\tserverMiddleware: [\n\t\t\t{\n\t\t\t\tonColorThemeChange: setColorTheme,\n\t\t\t},\n\t\t],\n\t\ttimeout: 15000,\n\t\ttimeouts: {\n\t\t\tinAppPurchase: 1000 * 60 * 60 * 24, // 24 hours, we never want this to timeout.\n\t\t\tonHrefChange: 500, // we don't really care about a response here.\n\t\t},\n\t});\n\n\tif (typeof window !== \"undefined\") {\n\t\tsdk\n\t\t\t.getColorTheme()\n\t\t\t.then(setColorTheme)\n\t\t\t.catch(() => null);\n\t\tdocument.documentElement.addEventListener(\"frosted-ui:mounted\", () => {\n\t\t\tsdk\n\t\t\t\t.getColorTheme()\n\t\t\t\t.then(setColorTheme)\n\t\t\t\t.catch(() => null);\n\t\t});\n\t}\n\n\tsyncHref({ onChange: sdk.onHrefChange });\n\n\treturn sdk;\n}\n\nexport type WhopIframeSdk = ReturnType<typeof createSdk>;\n"],"mappings":"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","names":["import_zod","timeoutId","data","cb","import_zod"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/sdk/apps-server.ts","../src/sdk/utils.ts","../src/sdk/mobile-app-postmessage.ts","../src/sdk/sync-href.ts","../src/sdk/transport/index.ts","../src/sdk/transport/utils.ts","../src/sdk/transport/sdk.ts","../src/sdk/transport/handler.ts","../src/sdk/transport/postmessage.ts","../src/sdk/whop-server.ts","../src/sdk/index.ts"],"sourcesContent":["export * from \"@/sdk\";\nexport * as transport from \"@/sdk/transport\";\n","import { z } from \"zod\";\nimport { frostedV2Theme } from \"./utils\";\n\nexport const appsServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"appPing\"),\n\t\trequest: z.literal(\"app_ping\"),\n\t\tresponse: z.literal(\"app_pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onColorThemeChange\"),\n\t\trequest: frostedV2Theme,\n\t\tresponse: z.void(),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"navigateBack\"),\n\t\trequest: z.void(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"navigateForward\"),\n\t\trequest: z.void(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n]);\n\nexport type AppsServerSchema = z.TypeOf<typeof appsServerSchema>;\n","import { type ZodSchema, z } from \"zod\";\n\nexport const withError = <T extends ZodSchema, E extends ZodSchema>(\n\tschema: T,\n\terror: E,\n) => {\n\treturn z.discriminatedUnion(\"status\", [\n\t\tz.object({\n\t\t\tstatus: z.literal(\"ok\"),\n\t\t\tdata: schema,\n\t\t}),\n\t\tz.object({\n\t\t\tstatus: z.literal(\"error\"),\n\t\t\terror: error,\n\t\t}),\n\t]);\n};\n\nexport const frostedV2Theme = z\n\t.object({\n\t\tappearance: z.enum([\"light\", \"dark\"]),\n\t\taccentColor: z.string(),\n\t\tdangerColor: z.string(),\n\t\tgrayColor: z.string(),\n\t\tinfoColor: z.string(),\n\t\tsuccessColor: z.string(),\n\t\twarningColor: z.string(),\n\t})\n\t.partial();\n","export function getReactNativePostMessage() {\n\tconst reactNativePostMessage =\n\t\ttypeof window !== \"undefined\" &&\n\t\t\"ReactNativeWebView\" in window &&\n\t\ttypeof window.ReactNativeWebView === \"object\" &&\n\t\twindow.ReactNativeWebView &&\n\t\t\"postMessage\" in window.ReactNativeWebView &&\n\t\ttypeof window.ReactNativeWebView.postMessage === \"function\"\n\t\t\t? (data: string) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof window !== \"undefined\" &&\n\t\t\t\t\t\t\"ReactNativeWebView\" in window &&\n\t\t\t\t\t\ttypeof window.ReactNativeWebView === \"object\" &&\n\t\t\t\t\t\twindow.ReactNativeWebView &&\n\t\t\t\t\t\t\"postMessage\" in window.ReactNativeWebView &&\n\t\t\t\t\t\ttypeof window.ReactNativeWebView.postMessage === \"function\"\n\t\t\t\t\t)\n\t\t\t\t\t\twindow?.ReactNativeWebView?.postMessage(data);\n\t\t\t\t}\n\t\t\t: undefined;\n\treturn reactNativePostMessage;\n}\n\nexport function getSwiftPostMessage() {\n\tconst swiftMessageHandler =\n\t\ttypeof window !== \"undefined\" &&\n\t\t\"webkit\" in window &&\n\t\ttypeof window.webkit === \"object\" &&\n\t\twindow.webkit !== null &&\n\t\t\"messageHandlers\" in window.webkit &&\n\t\ttypeof window.webkit.messageHandlers === \"object\" &&\n\t\twindow.webkit.messageHandlers !== null &&\n\t\t\"SwiftWebView\" in window.webkit.messageHandlers &&\n\t\ttypeof window.webkit.messageHandlers.SwiftWebView === \"object\" &&\n\t\twindow.webkit.messageHandlers.SwiftWebView !== null &&\n\t\t\"postMessage\" in window.webkit.messageHandlers.SwiftWebView\n\t\t\t? window.webkit.messageHandlers.SwiftWebView\n\t\t\t: null;\n\n\tconst swiftPostMessage = swiftMessageHandler\n\t\t? (data: string) => {\n\t\t\t\tif (typeof swiftMessageHandler.postMessage === \"function\") {\n\t\t\t\t\tswiftMessageHandler.postMessage(data);\n\t\t\t\t}\n\t\t\t}\n\t\t: undefined;\n\n\treturn swiftPostMessage;\n}\n","declare global {\n\tinterface Window {\n\t\t_whop_sync_href_interval?: ReturnType<typeof setInterval>;\n\t}\n}\n\nexport function syncHref({\n\tonChange,\n}: { onChange: (req: { href: string }) => Promise<\"ok\"> }) {\n\tif (typeof window === \"undefined\") return;\n\n\tconst initialHref = window.location.href;\n\tonChange({ href: initialHref }).catch(() => null);\n\tlet lastKnown = initialHref;\n\n\twindow.addEventListener(\"popstate\", () => {\n\t\tconst { href } = window.location;\n\t\tonChange({ href }).catch(() => null);\n\t\tlastKnown = href;\n\t});\n\n\tif (window._whop_sync_href_interval) {\n\t\tclearInterval(window._whop_sync_href_interval);\n\t}\n\twindow._whop_sync_href_interval = setInterval(() => {\n\t\tconst { href } = window.location;\n\t\tif (href === lastKnown) return;\n\t\tonChange({ href }).catch(() => null);\n\t\tlastKnown = href;\n\t}, 250);\n}\n","export { createHandler } from \"./handler\";\nexport { MESSAGE_TAG, postmessageTransport } from \"./postmessage\";\nexport { createSDK } from \"./sdk\";\n\nexport type {\n\tClientSDK,\n\tServerImplementation,\n\tTransport,\n\tValidZodEventSchema,\n} from \"./sdk\";\n\nexport { TimeoutError } from \"./utils\";\n","export class TimeoutError extends Error {\n\tconstructor() {\n\t\tsuper(\"Timeout\");\n\t}\n}\n\nexport function randomId(length: number) {\n\tconst alphabet =\n\t\t\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\tlet str = \"\";\n\tfor (let i = 0; i < length; i++) {\n\t\tstr += alphabet[Math.floor(Math.random() * alphabet.length)];\n\t}\n\treturn str;\n}\n","import type {\n\tZodDiscriminatedUnion,\n\tZodLiteral,\n\tZodObject,\n\tZodRawShape,\n\tZodTypeAny,\n\tz,\n} from \"zod\";\nimport { TimeoutError, randomId } from \"./utils\";\n\nexport type ValidZodEventSchema = ZodDiscriminatedUnion<\n\t\"event\",\n\tZodObject<\n\t\t{\n\t\t\tevent: ZodLiteral<string>;\n\t\t\trequest: ZodTypeAny;\n\t\t\tresponse: ZodTypeAny;\n\t\t} & ZodRawShape\n\t>[]\n>;\n\ntype MaybePromise<T> = Promise<T> | T;\n\ntype T = z.infer<ValidZodEventSchema>;\n\ntype FullServerImplementation<Schema extends ValidZodEventSchema> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>;\n};\n\nexport type ClientSDK<\n\tClientSchema extends ValidZodEventSchema,\n\tComplete extends boolean,\n> = {\n\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]: (\n\t\treq: Extract<z.infer<ClientSchema>, { event: K }>[\"request\"],\n\t) => Promise<\n\t\tComplete extends true\n\t\t\t? Extract<z.infer<ClientSchema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<ClientSchema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\n\nexport type ServerImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = ForceCompleteness extends true\n\t? FullServerImplementation<Schema>\n\t: Partial<FullServerImplementation<Schema>>;\n\ntype FullServerMiddlewareImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\tnext: ForceCompleteness extends true\n\t\t\t? (\n\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>\n\t\t\t:\n\t\t\t\t\t| ((\n\t\t\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t\t ) => MaybePromise<\n\t\t\t\t\t\t\tExtract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t\t\t >)\n\t\t\t\t\t| undefined,\n\t) => MaybePromise<\n\t\tForceCompleteness extends true\n\t\t\t? Extract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<Schema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\nexport type ServerMiddleware<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = Partial<FullServerMiddlewareImplementation<Schema, ForceCompleteness>>;\n\nexport type Transport<ServerSchema extends ValidZodEventSchema | undefined> = {\n\tsend: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t) => unknown;\n\trecv: (\n\t\thandler: (\n\t\t\tevent: string,\n\t\t\tdata: unknown,\n\t\t) => Promise<\n\t\t\t| (ServerSchema extends ValidZodEventSchema\n\t\t\t\t\t? z.infer<ServerSchema>[\"response\"]\n\t\t\t\t\t: undefined)\n\t\t\t| undefined\n\t\t>,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t\t// biome-ignore lint/suspicious/noConfusingVoidType: idk\n\t) => void | (() => void);\n\tcleanup?: () => void;\n};\n\nexport function createSDK<\n\tClientSchema extends ValidZodEventSchema | undefined,\n\tServerSchema extends ValidZodEventSchema | undefined,\n\tForceCompleteness extends boolean = false,\n\tServerComplete extends boolean = false,\n>({\n\tclientSchema,\n\tserverSchema,\n\tserverComplete,\n\ttransport,\n\ttimeout = 1000,\n\ttimeouts,\n\tlocalAppId,\n\tremoteAppId,\n\tserverImplementation = {},\n\tserverMiddleware,\n}: {\n\tclientSchema: ClientSchema;\n\tserverSchema: ServerSchema;\n\tforceCompleteness?: ForceCompleteness;\n\tserverComplete?: ServerComplete;\n\tlocalAppId: string;\n\tremoteAppId: string;\n\tserverMiddleware?: ServerSchema extends ValidZodEventSchema\n\t\t? ServerMiddleware<ServerSchema, ForceCompleteness>[]\n\t\t: undefined;\n\tserverImplementation: ServerSchema extends ValidZodEventSchema\n\t\t? ServerImplementation<ServerSchema, ForceCompleteness>\n\t\t: undefined;\n\ttransport: Transport<ServerSchema>;\n\ttimeout?: number;\n\ttimeouts?: ClientSchema extends ValidZodEventSchema\n\t\t? {\n\t\t\t\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]?: number;\n\t\t\t}\n\t\t: never;\n}): (ClientSchema extends ValidZodEventSchema\n\t? ClientSDK<ClientSchema, ServerComplete>\n\t: object) & {\n\t_cleanupTransport: () => void;\n} {\n\tconst callbacks: {\n\t\tid: string;\n\t\tresolve: (data: unknown) => void;\n\t}[] = [];\n\n\tconst keys =\n\t\tclientSchema?.options.map(\n\t\t\t(option) => option._def.shape().event._def.value,\n\t\t) ?? [];\n\n\tconst client = Object.fromEntries(\n\t\tkeys.map((key) => [\n\t\t\tkey,\n\t\t\tasync (req: unknown) => {\n\t\t\t\t// We make event id unique so that we can fire many requests at the same time.\n\t\t\t\tconst eventId = `${localAppId}:${key}:${randomId(8)}`;\n\n\t\t\t\tconsole.debug(\"[typed-transport] app. Created eventId\", eventId);\n\n\t\t\t\tconst responseData = new Promise((resolve, reject) => {\n\t\t\t\t\t// Timeout the request after the specified timeout\n\t\t\t\t\tconst customTimeout = timeouts?.[key];\n\n\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\tif (serverComplete) {\n\t\t\t\t\t\t\tconsole.debug(\"[typed-transport] app. Timeout error\");\n\t\t\t\t\t\t\treject(new TimeoutError());\n\t\t\t\t\t\t} else resolve(undefined);\n\t\t\t\t\t}, customTimeout ?? timeout);\n\n\t\t\t\t\tif (customTimeout && customTimeout > timeout && !serverComplete) {\n\t\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}, timeout);\n\t\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\t\tid: `${eventId}:processing`,\n\t\t\t\t\t\t\tresolve: () => clearTimeout(timeoutId),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\tid: eventId,\n\t\t\t\t\t\tresolve: (data) => {\n\t\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tconsole.debug(\"[typed-transport] app sending event\", {\n\t\t\t\t\teventId,\n\t\t\t\t\tlocalAppId,\n\t\t\t\t\tremoteAppId,\n\t\t\t\t});\n\t\t\t\tawait transport.send?.(eventId, req, { localAppId, remoteAppId });\n\n\t\t\t\tconst data = await responseData;\n\n\t\t\t\tconsole.debug(\"[typed-transport] received response\", data);\n\n\t\t\t\treturn data;\n\t\t\t},\n\t\t]),\n\t) as (ClientSchema extends ValidZodEventSchema\n\t\t? ClientSDK<ClientSchema, ServerComplete>\n\t\t: object) & {\n\t\t_cleanupTransport: () => void;\n\t};\n\n\tconst cleanupRecv = transport.recv(\n\t\tasync (event, dataAny) => {\n\t\t\tconst [app, key, _randomId, type] = event.split(\":\");\n\t\t\tif (app === localAppId) {\n\t\t\t\t// Here we are receiving a response from a request we made.\n\t\t\t\tconst idx = callbacks.findIndex((cb) => cb.id === event);\n\t\t\t\tif (idx === -1) return;\n\t\t\t\tconst dataSchema = clientSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst cb = callbacks[idx];\n\t\t\t\tif (type === \"processing\") {\n\t\t\t\t\tcb.resolve(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tconst data = dataSchema.shape.response.parse(dataAny);\n\t\t\t\t\tcallbacks.splice(idx, 1);\n\t\t\t\t\tcb.resolve(data);\n\t\t\t\t}\n\t\t\t} else if (app === remoteAppId) {\n\t\t\t\tif (serverImplementation === undefined) return;\n\t\t\t\t// Here we are responding to a request from a client.\n\n\t\t\t\t// final handler\n\t\t\t\tlet handler = (\n\t\t\t\t\tserverImplementation as unknown as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t(data: unknown) => Promise<unknown>\n\t\t\t\t\t>\n\t\t\t\t)[key];\n\n\t\t\t\t// Build a linked list of middleware invocations that will call the final handler.\n\t\t\t\tif (serverMiddleware) {\n\t\t\t\t\tfor (let i = serverMiddleware.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tconst middlewareDef = serverMiddleware[i];\n\t\t\t\t\t\tconst middleware = middlewareDef[key] as (\n\t\t\t\t\t\t\tdata: unknown,\n\t\t\t\t\t\t\tnext: unknown,\n\t\t\t\t\t\t) => Promise<unknown>;\n\t\t\t\t\t\tif (!middleware) continue;\n\t\t\t\t\t\tconst ref = handler;\n\t\t\t\t\t\thandler = (data: unknown) => middleware(data, ref);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!handler) return;\n\t\t\t\tconst dataSchema = serverSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst data = dataSchema.shape.request.parse(dataAny);\n\n\t\t\t\t// If our handler doesn't complete in 80% of the default message timeout, we send a message to the caller, saying that we are expecting an answer.\n\t\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\t\tawait transport.send(\n\t\t\t\t\t\t`${event}:processing`,\n\t\t\t\t\t\t{},\n\t\t\t\t\t\t{ localAppId, remoteAppId },\n\t\t\t\t\t);\n\t\t\t\t}, 50);\n\n\t\t\t\tconst response = await handler(data);\n\n\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\tawait transport.send(event, response, { localAppId, remoteAppId });\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: will fix at some point\n\t\t\t\treturn response as any;\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlocalAppId,\n\t\t\tremoteAppId,\n\t\t},\n\t);\n\n\tconst cleanupFunctions: (() => void)[] = [];\n\tif (transport.cleanup) cleanupFunctions.push(transport.cleanup);\n\tif (cleanupRecv) cleanupFunctions.push(cleanupRecv);\n\n\tclient._cleanupTransport = () => {\n\t\tfor (const fn of cleanupFunctions) fn();\n\t};\n\n\treturn client;\n}\n","import type { z } from \"zod\";\nimport {\n\ttype ServerImplementation,\n\ttype ValidZodEventSchema,\n\tcreateSDK,\n} from \"./sdk\";\n\nexport function createHandler<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n>({\n\tschema,\n\tforceCompleteness,\n\thandlers,\n}: {\n\tschema: Schema;\n\tforceCompleteness?: ForceCompleteness;\n\thandlers: Schema extends ValidZodEventSchema\n\t\t? ServerImplementation<Schema, ForceCompleteness>\n\t\t: undefined;\n}) {\n\tlet eventHandler: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t) => Promise<\n\t\t| (Schema extends ValidZodEventSchema\n\t\t\t\t? z.TypeOf<Schema>[\"response\"]\n\t\t\t\t: undefined)\n\t\t| undefined\n\t>;\n\n\tcreateSDK<undefined, Schema, ForceCompleteness, false>({\n\t\tclientSchema: undefined,\n\t\tserverSchema: schema,\n\t\tlocalAppId: \"client\",\n\t\tremoteAppId: \"server\",\n\t\tforceCompleteness,\n\t\tserverImplementation: handlers,\n\t\ttransport: {\n\t\t\tsend() {\n\t\t\t\t// empty, only handling incoming events\n\t\t\t},\n\t\t\trecv(handler) {\n\t\t\t\teventHandler = handler;\n\t\t\t},\n\t\t},\n\t});\n\n\treturn (event: string, data: unknown) => {\n\t\treturn eventHandler(`server:${event}`, data);\n\t};\n}\n","import type { Transport, ValidZodEventSchema } from \"./sdk\";\n\nexport const MESSAGE_TAG = \"typed-transport\";\n\nexport function postmessageTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tremoteWindow,\n\ttargetOrigins,\n}: {\n\tremoteWindow: Window | undefined;\n\ttargetOrigins: string[];\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tif (!remoteWindow) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"No remote window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. Sending event\",\n\t\t\t\tevent,\n\t\t\t\tdata,\n\t\t\t);\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. target origins =\",\n\t\t\t\ttargetOrigins,\n\t\t\t);\n\n\t\t\tfor (const targetOrigin of targetOrigins) {\n\t\t\t\tconsole.debug(\"[typed-transport] remoteWindow.postMessage\", {\n\t\t\t\t\tevent,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] remoteWindow.postMessage.data\",\n\t\t\t\t\tdata,\n\t\t\t\t\tJSON.stringify(data),\n\t\t\t\t);\n\n\t\t\t\tremoteWindow.postMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttargetOrigin,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (targetOrigins.length === 0) {\n\t\t\t\tremoteWindow.postMessage({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] postmessagetransport. Receiving event\",\n\t\t\t\t\tevent,\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.source !== remoteWindow ||\n\t\t\t\t\t(!targetOrigins.includes(event.origin) && targetOrigins.length > 0) ||\n\t\t\t\t\t!event.data ||\n\t\t\t\t\t!event.data.event ||\n\t\t\t\t\tevent.data.libId !== MESSAGE_TAG ||\n\t\t\t\t\tevent.data.receiverAppId !== localAppId ||\n\t\t\t\t\tevent.data.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(event.data.event, event.data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\t// Stop logging this as it's causing more confusion than it's worth.\n\t\t\t\t// console.warn(\n\t\t\t\t// 'No window. Is the SDK running on a server without a global window object?',\n\t\t\t\t// );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function reactNativeClientTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tpostMessage,\n\ttargetOrigin,\n}: {\n\tpostMessage: (data: string) => void;\n\ttargetOrigin: string;\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tpostMessage(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconst dataString = typeof event.data === \"string\" ? event.data : null;\n\t\t\t\tif (!dataString) return;\n\n\t\t\t\tconst data = JSON.parse(dataString);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.origin !== targetOrigin ||\n\t\t\t\t\t!data ||\n\t\t\t\t\t!data.event ||\n\t\t\t\t\t!data.data ||\n\t\t\t\t\tdata.libId !== MESSAGE_TAG ||\n\t\t\t\t\tdata.receiverAppId !== localAppId ||\n\t\t\t\t\tdata.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(data.event, data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"No window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n","import { z } from \"zod\";\nimport { frostedV2Theme, withError } from \"./utils\";\n\nexport const routeSchema = z.object({\n\tpath: z.array(z.string()),\n\tparams: z.record(z.string()),\n});\n\nexport type Route = z.TypeOf<typeof routeSchema>;\n\nexport const whopServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"ping\"),\n\t\trequest: z.literal(\"ping\"),\n\t\tresponse: z.literal(\"pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getTopLevelUrlData\"),\n\t\trequest: z.object({}).optional(),\n\t\tresponse: z.object({\n\t\t\tcompanyRoute: z.string(),\n\t\t\texperienceRoute: z.string(),\n\t\t\texperienceId: z.string(),\n\t\t\tviewType: z.enum([\"app\", \"admin\", \"analytics\", \"preview\"]),\n\t\t\tbaseHref: z.string(),\n\t\t\tfullHref: z.string(),\n\t\t}),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openExternalUrl\"),\n\t\trequest: z.object({\n\t\t\tnewTab: z.boolean().optional(),\n\t\t\turl: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onHrefChange\"),\n\t\trequest: z.object({\n\t\t\thref: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"inAppPurchase\"),\n\t\trequest: z.object({\n\t\t\t/**\n\t\t\t * ID returned from the `chargeUser` API call.\n\t\t\t * @example \"ch_1234567890\"\n\t\t\t */\n\t\t\tid: z.string().optional(),\n\t\t\t/**\n\t\t\t * ID of the plan returned from the `chargeUser` API call.\n\t\t\t * @example \"plan_1234567890\"\n\t\t\t */\n\t\t\tplanId: z.string(),\n\t\t}),\n\t\tresponse: withError(\n\t\t\tz.object({\n\t\t\t\tsessionId: z.string(),\n\t\t\t\t/**\n\t\t\t\t * The receipt ID can be used to verify the purchase.\n\t\t\t\t *\n\t\t\t\t * NOTE: When receiving payments you should always listen to webhooks as a fallback\n\t\t\t\t * to process the payment. Do not solely rely on the client to process payments. The receipt ID\n\t\t\t\t * can be used to deduplicate payment events.\n\t\t\t\t */\n\t\t\t\treceiptId: z.string(),\n\t\t\t}),\n\t\t\tz.string(),\n\t\t),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"closeApp\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openHelpChat\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getColorTheme\"),\n\t\trequest: z.void(),\n\t\tresponse: frostedV2Theme,\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"earliestUnreadNotification\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t}),\n\t\tresponse: z\n\t\t\t.object({\n\t\t\t\texternalId: z.string(),\n\t\t\t})\n\t\t\t.nullable(),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"markExperienceRead\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t\tnotificationExternalId: z.string().optional(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"performHaptic\"),\n\t\trequest: z.object({\n\t\t\ttype: z.enum([\"selection\", \"impact\", \"notification\"]),\n\t\t\tstyle: z.enum([\"light\", \"medium\", \"heavy\"]),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onNavigationStackChange\"),\n\t\trequest: z.object({\n\t\t\tstack: z.array(routeSchema),\n\t\t\tcurrentIndex: z.number(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n]);\n\nexport type WhopServerSchema = z.TypeOf<typeof whopServerSchema>;\n","import { appsServerSchema } from \"@/sdk/apps-server\";\nimport {\n\tgetReactNativePostMessage,\n\tgetSwiftPostMessage,\n} from \"@/sdk/mobile-app-postmessage\";\nimport { syncHref } from \"@/sdk/sync-href\";\nimport {\n\ttype ServerImplementation,\n\tcreateSDK as createPostmessageSdk,\n\tpostmessageTransport,\n} from \"@/sdk/transport\";\nimport { reactNativeClientTransport } from \"@/sdk/transport/postmessage\";\nimport type { frostedV2Theme } from \"@/sdk/utils\";\nimport { whopServerSchema } from \"@/sdk/whop-server\";\nimport type { z } from \"zod\";\n\nexport { appsServerSchema, whopServerSchema };\n\nfunction setColorTheme(theme: z.infer<typeof frostedV2Theme>) {\n\tdocument.documentElement.dispatchEvent(\n\t\tnew CustomEvent(\"frosted-ui:set-theme\", {\n\t\t\tdetail: theme,\n\t\t}),\n\t);\n}\n\n/**\n * Create an iframe SDK for a client app. This will communicate with the parent\n * window which is required to be whop.com.\n */\nexport function createSdk({\n\tonMessage = {},\n\tappId = process.env.NEXT_PUBLIC_WHOP_APP_ID,\n\toverrideParentOrigins,\n}: {\n\tonMessage?: ServerImplementation<typeof appsServerSchema, false>;\n\tappId?: string;\n\toverrideParentOrigins?: string[];\n}) {\n\tconst mobileWebView = getSwiftPostMessage() ?? getReactNativePostMessage();\n\n\tconst remoteWindow =\n\t\ttypeof window === \"undefined\" ? undefined : window.parent;\n\n\tif (!appId) {\n\t\tthrow new Error(\n\t\t\t\"[createSdk]: appId is required. Please provide an appId or set the NEXT_PUBLIC_WHOP_APP_ID environment variable.\",\n\t\t);\n\t}\n\n\tconst sdk = createPostmessageSdk({\n\t\tclientSchema: whopServerSchema,\n\t\tserverSchema: appsServerSchema,\n\t\tforceCompleteness: false,\n\t\tserverImplementation: onMessage,\n\t\tlocalAppId: appId,\n\t\tremoteAppId: \"app_whop\",\n\t\ttransport: mobileWebView\n\t\t\t? reactNativeClientTransport({\n\t\t\t\t\tpostMessage: mobileWebView,\n\t\t\t\t\ttargetOrigin: \"com.whop.whopapp\",\n\t\t\t\t})\n\t\t\t: postmessageTransport({\n\t\t\t\t\tremoteWindow,\n\t\t\t\t\ttargetOrigins: overrideParentOrigins ?? [\n\t\t\t\t\t\t\"https://whop.com\",\n\t\t\t\t\t\t\"https://dash.whop.com\",\n\t\t\t\t\t\t\"http://localhost:8003\",\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\tserverComplete: true,\n\t\tserverMiddleware: [\n\t\t\t{\n\t\t\t\tonColorThemeChange: setColorTheme,\n\t\t\t},\n\t\t],\n\t\ttimeout: 15000,\n\t\ttimeouts: {\n\t\t\tinAppPurchase: 1000 * 60 * 60 * 24, // 24 hours, we never want this to timeout.\n\t\t\tonHrefChange: 500, // we don't really care about a response here.\n\t\t},\n\t});\n\n\tif (typeof window !== \"undefined\") {\n\t\tsdk\n\t\t\t.getColorTheme()\n\t\t\t.then(setColorTheme)\n\t\t\t.catch(() => null);\n\t\tdocument.documentElement.addEventListener(\"frosted-ui:mounted\", () => {\n\t\t\tsdk\n\t\t\t\t.getColorTheme()\n\t\t\t\t.then(setColorTheme)\n\t\t\t\t.catch(() => null);\n\t\t});\n\t}\n\n\tsyncHref({ onChange: sdk.onHrefChange });\n\n\treturn sdk;\n}\n\nexport type WhopIframeSdk = ReturnType<typeof createSdk>;\n"],"mappings":"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","names":["import_zod","timeoutId","data","cb","import_zod"]}
|
package/dist/index.mjs
CHANGED
|
@@ -433,6 +433,54 @@ declare const whopServerSchema: z.ZodDiscriminatedUnion<"event", [z.ZodObject<{
|
|
|
433
433
|
style: "light" | "medium" | "heavy";
|
|
434
434
|
};
|
|
435
435
|
response: "ok";
|
|
436
|
+
}>, z.ZodObject<{
|
|
437
|
+
event: z.ZodLiteral<"onNavigationStackChange">;
|
|
438
|
+
request: z.ZodObject<{
|
|
439
|
+
stack: z.ZodArray<z.ZodObject<{
|
|
440
|
+
path: z.ZodArray<z.ZodString, "many">;
|
|
441
|
+
params: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
442
|
+
}, "strip", z.ZodTypeAny, {
|
|
443
|
+
params: Record<string, string>;
|
|
444
|
+
path: string[];
|
|
445
|
+
}, {
|
|
446
|
+
params: Record<string, string>;
|
|
447
|
+
path: string[];
|
|
448
|
+
}>, "many">;
|
|
449
|
+
currentIndex: z.ZodNumber;
|
|
450
|
+
}, "strip", z.ZodTypeAny, {
|
|
451
|
+
stack: {
|
|
452
|
+
params: Record<string, string>;
|
|
453
|
+
path: string[];
|
|
454
|
+
}[];
|
|
455
|
+
currentIndex: number;
|
|
456
|
+
}, {
|
|
457
|
+
stack: {
|
|
458
|
+
params: Record<string, string>;
|
|
459
|
+
path: string[];
|
|
460
|
+
}[];
|
|
461
|
+
currentIndex: number;
|
|
462
|
+
}>;
|
|
463
|
+
response: z.ZodLiteral<"ok">;
|
|
464
|
+
}, "strip", z.ZodTypeAny, {
|
|
465
|
+
event: "onNavigationStackChange";
|
|
466
|
+
request: {
|
|
467
|
+
stack: {
|
|
468
|
+
params: Record<string, string>;
|
|
469
|
+
path: string[];
|
|
470
|
+
}[];
|
|
471
|
+
currentIndex: number;
|
|
472
|
+
};
|
|
473
|
+
response: "ok";
|
|
474
|
+
}, {
|
|
475
|
+
event: "onNavigationStackChange";
|
|
476
|
+
request: {
|
|
477
|
+
stack: {
|
|
478
|
+
params: Record<string, string>;
|
|
479
|
+
path: string[];
|
|
480
|
+
}[];
|
|
481
|
+
currentIndex: number;
|
|
482
|
+
};
|
|
483
|
+
response: "ok";
|
|
436
484
|
}>]>;
|
|
437
485
|
|
|
438
486
|
export { type ClientSDK as C, type ServerImplementation as S, type Transport as T, type ValidZodEventSchema as V, createSDK as c, whopServerSchema as w };
|
|
@@ -433,6 +433,54 @@ declare const whopServerSchema: z.ZodDiscriminatedUnion<"event", [z.ZodObject<{
|
|
|
433
433
|
style: "light" | "medium" | "heavy";
|
|
434
434
|
};
|
|
435
435
|
response: "ok";
|
|
436
|
+
}>, z.ZodObject<{
|
|
437
|
+
event: z.ZodLiteral<"onNavigationStackChange">;
|
|
438
|
+
request: z.ZodObject<{
|
|
439
|
+
stack: z.ZodArray<z.ZodObject<{
|
|
440
|
+
path: z.ZodArray<z.ZodString, "many">;
|
|
441
|
+
params: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
442
|
+
}, "strip", z.ZodTypeAny, {
|
|
443
|
+
params: Record<string, string>;
|
|
444
|
+
path: string[];
|
|
445
|
+
}, {
|
|
446
|
+
params: Record<string, string>;
|
|
447
|
+
path: string[];
|
|
448
|
+
}>, "many">;
|
|
449
|
+
currentIndex: z.ZodNumber;
|
|
450
|
+
}, "strip", z.ZodTypeAny, {
|
|
451
|
+
stack: {
|
|
452
|
+
params: Record<string, string>;
|
|
453
|
+
path: string[];
|
|
454
|
+
}[];
|
|
455
|
+
currentIndex: number;
|
|
456
|
+
}, {
|
|
457
|
+
stack: {
|
|
458
|
+
params: Record<string, string>;
|
|
459
|
+
path: string[];
|
|
460
|
+
}[];
|
|
461
|
+
currentIndex: number;
|
|
462
|
+
}>;
|
|
463
|
+
response: z.ZodLiteral<"ok">;
|
|
464
|
+
}, "strip", z.ZodTypeAny, {
|
|
465
|
+
event: "onNavigationStackChange";
|
|
466
|
+
request: {
|
|
467
|
+
stack: {
|
|
468
|
+
params: Record<string, string>;
|
|
469
|
+
path: string[];
|
|
470
|
+
}[];
|
|
471
|
+
currentIndex: number;
|
|
472
|
+
};
|
|
473
|
+
response: "ok";
|
|
474
|
+
}, {
|
|
475
|
+
event: "onNavigationStackChange";
|
|
476
|
+
request: {
|
|
477
|
+
stack: {
|
|
478
|
+
params: Record<string, string>;
|
|
479
|
+
path: string[];
|
|
480
|
+
}[];
|
|
481
|
+
currentIndex: number;
|
|
482
|
+
};
|
|
483
|
+
response: "ok";
|
|
436
484
|
}>]>;
|
|
437
485
|
|
|
438
486
|
export { type ClientSDK as C, type ServerImplementation as S, type Transport as T, type ValidZodEventSchema as V, createSDK as c, whopServerSchema as w };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@whop/iframe",
|
|
3
3
|
"description": "Powers communication between Whop and your embedded app",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.4",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/whopio/whop-sdk-ts",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"engines": {
|
|
48
48
|
"node": "22.x",
|
|
49
|
-
"pnpm": "
|
|
49
|
+
"pnpm": "10.23.0"
|
|
50
50
|
},
|
|
51
51
|
"publishConfig": {
|
|
52
52
|
"access": "public"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/apps-server.ts","../src/sdk/utils.ts","../src/sdk/transport/utils.ts","../src/sdk/transport/sdk.ts","../src/sdk/transport/postmessage.ts","../src/sdk/transport/index.ts","../src/sdk/transport/handler.ts","../src/sdk/whop-server.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { frostedV2Theme } from \"./utils\";\n\nexport const appsServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"appPing\"),\n\t\trequest: z.literal(\"app_ping\"),\n\t\tresponse: z.literal(\"app_pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onColorThemeChange\"),\n\t\trequest: frostedV2Theme,\n\t\tresponse: z.void(),\n\t}),\n]);\n\nexport type AppsServerSchema = z.TypeOf<typeof appsServerSchema>;\n","import { type ZodSchema, z } from \"zod\";\n\nexport const withError = <T extends ZodSchema, E extends ZodSchema>(\n\tschema: T,\n\terror: E,\n) => {\n\treturn z.discriminatedUnion(\"status\", [\n\t\tz.object({\n\t\t\tstatus: z.literal(\"ok\"),\n\t\t\tdata: schema,\n\t\t}),\n\t\tz.object({\n\t\t\tstatus: z.literal(\"error\"),\n\t\t\terror: error,\n\t\t}),\n\t]);\n};\n\nexport const frostedV2Theme = z\n\t.object({\n\t\tappearance: z.enum([\"light\", \"dark\"]),\n\t\taccentColor: z.string(),\n\t\tdangerColor: z.string(),\n\t\tgrayColor: z.string(),\n\t\tinfoColor: z.string(),\n\t\tsuccessColor: z.string(),\n\t\twarningColor: z.string(),\n\t})\n\t.partial();\n","export class TimeoutError extends Error {\n\tconstructor() {\n\t\tsuper(\"Timeout\");\n\t}\n}\n\nexport function randomId(length: number) {\n\tconst alphabet =\n\t\t\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\tlet str = \"\";\n\tfor (let i = 0; i < length; i++) {\n\t\tstr += alphabet[Math.floor(Math.random() * alphabet.length)];\n\t}\n\treturn str;\n}\n","import type {\n\tZodDiscriminatedUnion,\n\tZodLiteral,\n\tZodObject,\n\tZodRawShape,\n\tZodTypeAny,\n\tz,\n} from \"zod\";\nimport { TimeoutError, randomId } from \"./utils\";\n\nexport type ValidZodEventSchema = ZodDiscriminatedUnion<\n\t\"event\",\n\tZodObject<\n\t\t{\n\t\t\tevent: ZodLiteral<string>;\n\t\t\trequest: ZodTypeAny;\n\t\t\tresponse: ZodTypeAny;\n\t\t} & ZodRawShape\n\t>[]\n>;\n\ntype MaybePromise<T> = Promise<T> | T;\n\ntype T = z.infer<ValidZodEventSchema>;\n\ntype FullServerImplementation<Schema extends ValidZodEventSchema> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>;\n};\n\nexport type ClientSDK<\n\tClientSchema extends ValidZodEventSchema,\n\tComplete extends boolean,\n> = {\n\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]: (\n\t\treq: Extract<z.infer<ClientSchema>, { event: K }>[\"request\"],\n\t) => Promise<\n\t\tComplete extends true\n\t\t\t? Extract<z.infer<ClientSchema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<ClientSchema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\n\nexport type ServerImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = ForceCompleteness extends true\n\t? FullServerImplementation<Schema>\n\t: Partial<FullServerImplementation<Schema>>;\n\ntype FullServerMiddlewareImplementation<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = {\n\t[K in NonNullable<z.infer<Schema>[\"event\"]>]: (\n\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\tnext: ForceCompleteness extends true\n\t\t\t? (\n\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t) => MaybePromise<Extract<z.infer<Schema>, { event: K }>[\"response\"]>\n\t\t\t:\n\t\t\t\t\t| ((\n\t\t\t\t\t\t\trequest: Extract<z.infer<Schema>, { event: K }>[\"request\"],\n\t\t\t\t\t ) => MaybePromise<\n\t\t\t\t\t\t\tExtract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t\t\t >)\n\t\t\t\t\t| undefined,\n\t) => MaybePromise<\n\t\tForceCompleteness extends true\n\t\t\t? Extract<z.infer<Schema>, { event: K }>[\"response\"]\n\t\t\t: Extract<z.infer<Schema>, { event: K }>[\"response\"] | undefined\n\t>;\n};\nexport type ServerMiddleware<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n> = Partial<FullServerMiddlewareImplementation<Schema, ForceCompleteness>>;\n\nexport type Transport<ServerSchema extends ValidZodEventSchema | undefined> = {\n\tsend: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t) => unknown;\n\trecv: (\n\t\thandler: (\n\t\t\tevent: string,\n\t\t\tdata: unknown,\n\t\t) => Promise<\n\t\t\t| (ServerSchema extends ValidZodEventSchema\n\t\t\t\t\t? z.infer<ServerSchema>[\"response\"]\n\t\t\t\t\t: undefined)\n\t\t\t| undefined\n\t\t>,\n\t\tparams: { localAppId: string; remoteAppId: string },\n\t\t// biome-ignore lint/suspicious/noConfusingVoidType: idk\n\t) => void | (() => void);\n\tcleanup?: () => void;\n};\n\nexport function createSDK<\n\tClientSchema extends ValidZodEventSchema | undefined,\n\tServerSchema extends ValidZodEventSchema | undefined,\n\tForceCompleteness extends boolean = false,\n\tServerComplete extends boolean = false,\n>({\n\tclientSchema,\n\tserverSchema,\n\tserverComplete,\n\ttransport,\n\ttimeout = 1000,\n\ttimeouts,\n\tlocalAppId,\n\tremoteAppId,\n\tserverImplementation = {},\n\tserverMiddleware,\n}: {\n\tclientSchema: ClientSchema;\n\tserverSchema: ServerSchema;\n\tforceCompleteness?: ForceCompleteness;\n\tserverComplete?: ServerComplete;\n\tlocalAppId: string;\n\tremoteAppId: string;\n\tserverMiddleware?: ServerSchema extends ValidZodEventSchema\n\t\t? ServerMiddleware<ServerSchema, ForceCompleteness>[]\n\t\t: undefined;\n\tserverImplementation: ServerSchema extends ValidZodEventSchema\n\t\t? ServerImplementation<ServerSchema, ForceCompleteness>\n\t\t: undefined;\n\ttransport: Transport<ServerSchema>;\n\ttimeout?: number;\n\ttimeouts?: ClientSchema extends ValidZodEventSchema\n\t\t? {\n\t\t\t\t[K in NonNullable<z.infer<ClientSchema>[\"event\"]>]?: number;\n\t\t\t}\n\t\t: never;\n}): (ClientSchema extends ValidZodEventSchema\n\t? ClientSDK<ClientSchema, ServerComplete>\n\t: object) & {\n\t_cleanupTransport: () => void;\n} {\n\tconst callbacks: {\n\t\tid: string;\n\t\tresolve: (data: unknown) => void;\n\t}[] = [];\n\n\tconst keys =\n\t\tclientSchema?.options.map(\n\t\t\t(option) => option._def.shape().event._def.value,\n\t\t) ?? [];\n\n\tconst client = Object.fromEntries(\n\t\tkeys.map((key) => [\n\t\t\tkey,\n\t\t\tasync (req: unknown) => {\n\t\t\t\t// We make event id unique so that we can fire many requests at the same time.\n\t\t\t\tconst eventId = `${localAppId}:${key}:${randomId(8)}`;\n\n\t\t\t\tconsole.debug(\"[typed-transport] app. Created eventId\", eventId);\n\n\t\t\t\tconst responseData = new Promise((resolve, reject) => {\n\t\t\t\t\t// Timeout the request after the specified timeout\n\t\t\t\t\tconst customTimeout = timeouts?.[key];\n\n\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\tif (serverComplete) {\n\t\t\t\t\t\t\tconsole.debug(\"[typed-transport] app. Timeout error\");\n\t\t\t\t\t\t\treject(new TimeoutError());\n\t\t\t\t\t\t} else resolve(undefined);\n\t\t\t\t\t}, customTimeout ?? timeout);\n\n\t\t\t\t\tif (customTimeout && customTimeout > timeout && !serverComplete) {\n\t\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\t\tconst index = callbacks.findIndex((cb) => cb.id === eventId);\n\t\t\t\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}, timeout);\n\t\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\t\tid: `${eventId}:processing`,\n\t\t\t\t\t\t\tresolve: () => clearTimeout(timeoutId),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tcallbacks.push({\n\t\t\t\t\t\tid: eventId,\n\t\t\t\t\t\tresolve: (data) => {\n\t\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tconsole.debug(\"[typed-transport] app sending event\", {\n\t\t\t\t\teventId,\n\t\t\t\t\tlocalAppId,\n\t\t\t\t\tremoteAppId,\n\t\t\t\t});\n\t\t\t\tawait transport.send?.(eventId, req, { localAppId, remoteAppId });\n\n\t\t\t\tconst data = await responseData;\n\n\t\t\t\tconsole.debug(\"[typed-transport] received response\", data);\n\n\t\t\t\treturn data;\n\t\t\t},\n\t\t]),\n\t) as (ClientSchema extends ValidZodEventSchema\n\t\t? ClientSDK<ClientSchema, ServerComplete>\n\t\t: object) & {\n\t\t_cleanupTransport: () => void;\n\t};\n\n\tconst cleanupRecv = transport.recv(\n\t\tasync (event, dataAny) => {\n\t\t\tconst [app, key, _randomId, type] = event.split(\":\");\n\t\t\tif (app === localAppId) {\n\t\t\t\t// Here we are receiving a response from a request we made.\n\t\t\t\tconst idx = callbacks.findIndex((cb) => cb.id === event);\n\t\t\t\tif (idx === -1) return;\n\t\t\t\tconst dataSchema = clientSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst cb = callbacks[idx];\n\t\t\t\tif (type === \"processing\") {\n\t\t\t\t\tcb.resolve(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tconst data = dataSchema.shape.response.parse(dataAny);\n\t\t\t\t\tcallbacks.splice(idx, 1);\n\t\t\t\t\tcb.resolve(data);\n\t\t\t\t}\n\t\t\t} else if (app === remoteAppId) {\n\t\t\t\tif (serverImplementation === undefined) return;\n\t\t\t\t// Here we are responding to a request from a client.\n\n\t\t\t\t// final handler\n\t\t\t\tlet handler = (\n\t\t\t\t\tserverImplementation as unknown as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t(data: unknown) => Promise<unknown>\n\t\t\t\t\t>\n\t\t\t\t)[key];\n\n\t\t\t\t// Build a linked list of middleware invocations that will call the final handler.\n\t\t\t\tif (serverMiddleware) {\n\t\t\t\t\tfor (let i = serverMiddleware.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tconst middlewareDef = serverMiddleware[i];\n\t\t\t\t\t\tconst middleware = middlewareDef[key] as (\n\t\t\t\t\t\t\tdata: unknown,\n\t\t\t\t\t\t\tnext: unknown,\n\t\t\t\t\t\t) => Promise<unknown>;\n\t\t\t\t\t\tif (!middleware) continue;\n\t\t\t\t\t\tconst ref = handler;\n\t\t\t\t\t\thandler = (data: unknown) => middleware(data, ref);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!handler) return;\n\t\t\t\tconst dataSchema = serverSchema?.optionsMap.get(key);\n\t\t\t\tif (!dataSchema) return;\n\t\t\t\tconst data = dataSchema.shape.request.parse(dataAny);\n\n\t\t\t\t// If our handler doesn't complete in 80% of the default message timeout, we send a message to the caller, saying that we are expecting an answer.\n\t\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\t\tawait transport.send(\n\t\t\t\t\t\t`${event}:processing`,\n\t\t\t\t\t\t{},\n\t\t\t\t\t\t{ localAppId, remoteAppId },\n\t\t\t\t\t);\n\t\t\t\t}, 50);\n\n\t\t\t\tconst response = await handler(data);\n\n\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\tawait transport.send(event, response, { localAppId, remoteAppId });\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: will fix at some point\n\t\t\t\treturn response as any;\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlocalAppId,\n\t\t\tremoteAppId,\n\t\t},\n\t);\n\n\tconst cleanupFunctions: (() => void)[] = [];\n\tif (transport.cleanup) cleanupFunctions.push(transport.cleanup);\n\tif (cleanupRecv) cleanupFunctions.push(cleanupRecv);\n\n\tclient._cleanupTransport = () => {\n\t\tfor (const fn of cleanupFunctions) fn();\n\t};\n\n\treturn client;\n}\n","import type { Transport, ValidZodEventSchema } from \"./sdk\";\n\nexport const MESSAGE_TAG = \"typed-transport\";\n\nexport function postmessageTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tremoteWindow,\n\ttargetOrigins,\n}: {\n\tremoteWindow: Window | undefined;\n\ttargetOrigins: string[];\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tif (!remoteWindow) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"No remote window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. Sending event\",\n\t\t\t\tevent,\n\t\t\t\tdata,\n\t\t\t);\n\t\t\tconsole.debug(\n\t\t\t\t\"[typed-transport] postmessagetransport. target origins =\",\n\t\t\t\ttargetOrigins,\n\t\t\t);\n\n\t\t\tfor (const targetOrigin of targetOrigins) {\n\t\t\t\tconsole.debug(\"[typed-transport] remoteWindow.postMessage\", {\n\t\t\t\t\tevent,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] remoteWindow.postMessage.data\",\n\t\t\t\t\tdata,\n\t\t\t\t\tJSON.stringify(data),\n\t\t\t\t);\n\n\t\t\t\tremoteWindow.postMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttargetOrigin,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (targetOrigins.length === 0) {\n\t\t\t\tremoteWindow.postMessage({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconsole.debug(\n\t\t\t\t\t\"[typed-transport] postmessagetransport. Receiving event\",\n\t\t\t\t\tevent,\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.source !== remoteWindow ||\n\t\t\t\t\t(!targetOrigins.includes(event.origin) && targetOrigins.length > 0) ||\n\t\t\t\t\t!event.data ||\n\t\t\t\t\t!event.data.event ||\n\t\t\t\t\tevent.data.libId !== MESSAGE_TAG ||\n\t\t\t\t\tevent.data.receiverAppId !== localAppId ||\n\t\t\t\t\tevent.data.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(event.data.event, event.data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\t// Stop logging this as it's causing more confusion than it's worth.\n\t\t\t\t// console.warn(\n\t\t\t\t// 'No window. Is the SDK running on a server without a global window object?',\n\t\t\t\t// );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function reactNativeClientTransport<\n\tServerSchema extends ValidZodEventSchema | undefined = undefined,\n>({\n\tpostMessage,\n\ttargetOrigin,\n}: {\n\tpostMessage: (data: string) => void;\n\ttargetOrigin: string;\n}): Transport<ServerSchema> {\n\treturn {\n\t\tsend(event, data, { remoteAppId, localAppId }) {\n\t\t\tpostMessage(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tevent,\n\t\t\t\t\tdata,\n\t\t\t\t\tlibId: MESSAGE_TAG,\n\t\t\t\t\treceiverAppId: remoteAppId,\n\t\t\t\t\tsenderAppId: localAppId,\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\trecv(handler, { localAppId, remoteAppId }) {\n\t\t\tconst listener = (event: MessageEvent) => {\n\t\t\t\tconst dataString = typeof event.data === \"string\" ? event.data : null;\n\t\t\t\tif (!dataString) return;\n\n\t\t\t\tconst data = JSON.parse(dataString);\n\n\t\t\t\tif (\n\t\t\t\t\tevent.origin !== targetOrigin ||\n\t\t\t\t\t!data ||\n\t\t\t\t\t!data.event ||\n\t\t\t\t\t!data.data ||\n\t\t\t\t\tdata.libId !== MESSAGE_TAG ||\n\t\t\t\t\tdata.receiverAppId !== localAppId ||\n\t\t\t\t\tdata.senderAppId !== remoteAppId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thandler(data.event, data.data);\n\t\t\t};\n\n\t\t\tif (typeof window === \"undefined\") {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"No window. Is the SDK running on a server without a global window object?\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", listener);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n","export { createHandler } from \"./handler\";\nexport { MESSAGE_TAG, postmessageTransport } from \"./postmessage\";\nexport { createSDK } from \"./sdk\";\n\nexport type {\n\tClientSDK,\n\tServerImplementation,\n\tTransport,\n\tValidZodEventSchema,\n} from \"./sdk\";\n\nexport { TimeoutError } from \"./utils\";\n","import type { z } from \"zod\";\nimport {\n\ttype ServerImplementation,\n\ttype ValidZodEventSchema,\n\tcreateSDK,\n} from \"./sdk\";\n\nexport function createHandler<\n\tSchema extends ValidZodEventSchema,\n\tForceCompleteness extends boolean = false,\n>({\n\tschema,\n\tforceCompleteness,\n\thandlers,\n}: {\n\tschema: Schema;\n\tforceCompleteness?: ForceCompleteness;\n\thandlers: Schema extends ValidZodEventSchema\n\t\t? ServerImplementation<Schema, ForceCompleteness>\n\t\t: undefined;\n}) {\n\tlet eventHandler: (\n\t\tevent: string,\n\t\tdata: unknown,\n\t) => Promise<\n\t\t| (Schema extends ValidZodEventSchema\n\t\t\t\t? z.TypeOf<Schema>[\"response\"]\n\t\t\t\t: undefined)\n\t\t| undefined\n\t>;\n\n\tcreateSDK<undefined, Schema, ForceCompleteness, false>({\n\t\tclientSchema: undefined,\n\t\tserverSchema: schema,\n\t\tlocalAppId: \"client\",\n\t\tremoteAppId: \"server\",\n\t\tforceCompleteness,\n\t\tserverImplementation: handlers,\n\t\ttransport: {\n\t\t\tsend() {\n\t\t\t\t// empty, only handling incoming events\n\t\t\t},\n\t\t\trecv(handler) {\n\t\t\t\teventHandler = handler;\n\t\t\t},\n\t\t},\n\t});\n\n\treturn (event: string, data: unknown) => {\n\t\treturn eventHandler(`server:${event}`, data);\n\t};\n}\n","import { z } from \"zod\";\nimport { frostedV2Theme, withError } from \"./utils\";\n\nexport const whopServerSchema = z.discriminatedUnion(\"event\", [\n\tz.object({\n\t\tevent: z.literal(\"ping\"),\n\t\trequest: z.literal(\"ping\"),\n\t\tresponse: z.literal(\"pong\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getTopLevelUrlData\"),\n\t\trequest: z.object({}).optional(),\n\t\tresponse: z.object({\n\t\t\tcompanyRoute: z.string(),\n\t\t\texperienceRoute: z.string(),\n\t\t\texperienceId: z.string(),\n\t\t\tviewType: z.enum([\"app\", \"admin\", \"analytics\", \"preview\"]),\n\t\t\tbaseHref: z.string(),\n\t\t\tfullHref: z.string(),\n\t\t}),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openExternalUrl\"),\n\t\trequest: z.object({\n\t\t\tnewTab: z.boolean().optional(),\n\t\t\turl: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"onHrefChange\"),\n\t\trequest: z.object({\n\t\t\thref: z.string(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"inAppPurchase\"),\n\t\trequest: z.object({\n\t\t\t/**\n\t\t\t * ID returned from the `chargeUser` API call.\n\t\t\t * @example \"ch_1234567890\"\n\t\t\t */\n\t\t\tid: z.string().optional(),\n\t\t\t/**\n\t\t\t * ID of the plan returned from the `chargeUser` API call.\n\t\t\t * @example \"plan_1234567890\"\n\t\t\t */\n\t\t\tplanId: z.string(),\n\t\t}),\n\t\tresponse: withError(\n\t\t\tz.object({\n\t\t\t\tsessionId: z.string(),\n\t\t\t\t/**\n\t\t\t\t * The receipt ID can be used to verify the purchase.\n\t\t\t\t *\n\t\t\t\t * NOTE: When receiving payments you should always listen to webhooks as a fallback\n\t\t\t\t * to process the payment. Do not solely rely on the client to process payments. The receipt ID\n\t\t\t\t * can be used to deduplicate payment events.\n\t\t\t\t */\n\t\t\t\treceiptId: z.string(),\n\t\t\t}),\n\t\t\tz.string(),\n\t\t),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"closeApp\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"openHelpChat\"),\n\t\trequest: z.null(),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"getColorTheme\"),\n\t\trequest: z.void(),\n\t\tresponse: frostedV2Theme,\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"earliestUnreadNotification\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t}),\n\t\tresponse: z\n\t\t\t.object({\n\t\t\t\texternalId: z.string(),\n\t\t\t})\n\t\t\t.nullable(),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"markExperienceRead\"),\n\t\trequest: z.object({\n\t\t\texperienceId: z.string(),\n\t\t\tnotificationExternalId: z.string().optional(),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n\tz.object({\n\t\tevent: z.literal(\"performHaptic\"),\n\t\trequest: z.object({\n\t\t\ttype: z.enum([\"selection\", \"impact\", \"notification\"]),\n\t\t\tstyle: z.enum([\"light\", \"medium\", \"heavy\"]),\n\t\t}),\n\t\tresponse: z.literal(\"ok\"),\n\t}),\n]);\n\nexport type WhopServerSchema = z.TypeOf<typeof whopServerSchema>;\n"],"mappings":"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","names":["z","z","timeoutId","data","cb","z","z"]}
|