UNPKG

inngest

Version:

Official SDK for Inngest.com. Inngest is the reliability layer for modern applications. Inngest combines durable execution, events, and queues into a zero-infra platform with built-in observability.

1 lines 6.5 kB
{"version":3,"file":"index.cjs","names":["app: Inngest.Any | undefined","getSubscriptionToken","TokenSubscription"],"sources":["../../../../src/components/realtime/subscribe/index.ts"],"sourcesContent":["import type { Inngest } from \"../../Inngest.ts\";\nimport type { Realtime } from \"../types.ts\";\nimport { TokenSubscription } from \"./TokenSubscription.ts\";\n\ntype ChannelTopicNames<InputChannel extends Realtime.ChannelInput> = Extract<\n keyof Realtime.Channel.InferTopics<InputChannel>,\n string\n>;\n\ntype ChannelTopicsInput<InputChannel extends Realtime.ChannelInput> = [\n ChannelTopicNames<InputChannel>,\n] extends [never]\n ? string[]\n : string extends ChannelTopicNames<InputChannel>\n ? string[]\n : ChannelTopicNames<InputChannel>[];\n\ntype SubscribeBaseArgs<\n InputChannel extends Realtime.ChannelInput,\n InputTopics extends ChannelTopicsInput<InputChannel>,\n> = {\n app?: Inngest.Like;\n key?: string;\n channel: InputChannel;\n topics: InputTopics;\n validate?: boolean;\n apiBaseUrl?: string;\n};\n\ntype SubscribeCallbackArgs<\n TToken extends Realtime.Subscribe.Token = Realtime.Subscribe.Token,\n> = {\n onMessage: Realtime.Subscribe.Callback<TToken>;\n onError?: (err: unknown) => void;\n};\n\nexport function subscribe<\n const InputChannel extends Realtime.ChannelInput,\n const InputTopics extends ChannelTopicsInput<InputChannel>,\n const TToken extends Realtime.Subscribe.Token<InputChannel, InputTopics>,\n const TOutput extends Realtime.Subscribe.StreamSubscription<TToken>,\n>(token: SubscribeBaseArgs<InputChannel, InputTopics>): Promise<TOutput>;\nexport function subscribe<\n const InputChannel extends Realtime.ChannelInput,\n const InputTopics extends ChannelTopicsInput<InputChannel>,\n const TToken extends Realtime.Subscribe.Token<InputChannel, InputTopics>,\n>(\n token: SubscribeBaseArgs<InputChannel, InputTopics> &\n SubscribeCallbackArgs<TToken>,\n): Promise<Realtime.Subscribe.CallbackSubscription>;\nexport function subscribe<\n const InputChannel extends Realtime.ChannelInput,\n const InputTopics extends ChannelTopicsInput<InputChannel>,\n const TToken extends Realtime.Subscribe.Token<InputChannel, InputTopics>,\n const TOutput extends Realtime.Subscribe.StreamSubscription<TToken>,\n>(\n token: SubscribeBaseArgs<InputChannel, InputTopics>,\n callback?: Realtime.Subscribe.Callback<TToken>,\n): Promise<TOutput>;\nexport async function subscribe<\n const InputChannel extends Realtime.ChannelInput,\n const InputTopics extends ChannelTopicsInput<InputChannel>,\n const TToken extends Realtime.Subscribe.Token<InputChannel, InputTopics>,\n const TOutput extends Realtime.Subscribe.StreamSubscription<TToken>,\n>(\n token: SubscribeBaseArgs<InputChannel, InputTopics> &\n Partial<SubscribeCallbackArgs<TToken>>,\n callback?: Realtime.Subscribe.Callback<TToken>,\n): Promise<TOutput | Realtime.Subscribe.CallbackSubscription> {\n const app: Inngest.Any | undefined = token.app as Inngest.Any | undefined;\n\n const getSubscriptionToken = app\n ? (channel: string, topics: string[]) =>\n (app as Inngest.Any)[\"inngestApi\"].getSubscriptionToken(channel, topics)\n : undefined;\n\n const subscription = new TokenSubscription({\n token: token as Realtime.Subscribe.Token,\n apiBaseUrl: token.apiBaseUrl ?? app?.apiBaseUrl,\n getSubscriptionToken,\n validate: token.validate,\n });\n\n await subscription.connect();\n\n const extras = {\n getJsonStream: () => subscription.getJsonStream(),\n getEncodedStream: () => subscription.getEncodedStream(),\n close: (reason?: string) => subscription.close(reason),\n unsubscribe: (reason?: string) => subscription.close(reason),\n };\n\n const onMessage = token.onMessage || callback;\n if (onMessage) {\n const callbackStream = subscription.getJsonStream();\n subscription.useCallback(onMessage, callbackStream, token.onError);\n }\n\n if (token.onMessage) {\n return extras;\n }\n\n const retStream = subscription.getJsonStream();\n return Object.assign(retStream, extras) as unknown as TOutput;\n}\n\nexport const getSubscriptionToken = async <\n const InputChannel extends Realtime.ChannelInput,\n const InputTopics extends ChannelTopicsInput<InputChannel>,\n const TToken extends Realtime.Subscribe.Token<InputChannel, InputTopics>,\n>(\n app: Inngest.Like,\n args: {\n channel: InputChannel;\n topics: InputTopics;\n },\n): Promise<TToken> => {\n const channelId =\n typeof args.channel === \"string\" ? args.channel : args.channel.name;\n\n if (!channelId) {\n throw new Error(\"Channel ID is required to create a subscription token\");\n }\n\n const key = await (app as Inngest.Any)[\"inngestApi\"].getSubscriptionToken(\n channelId,\n args.topics,\n );\n\n return {\n channel: args.channel,\n topics: args.topics,\n key,\n apiBaseUrl: (app as Inngest.Any)?.apiBaseUrl,\n } as TToken;\n};\n\nexport const getClientSubscriptionToken = async <\n const InputChannel extends Realtime.ChannelInput,\n const InputTopics extends ChannelTopicsInput<InputChannel>,\n>(\n app: Inngest.Like,\n args: {\n channel: InputChannel;\n topics: InputTopics;\n },\n): Promise<Realtime.Subscribe.ClientToken> => {\n const token = await getSubscriptionToken(app, args);\n\n if (!token.key) {\n throw new Error(\"No realtime subscription token key returned\");\n }\n\n return {\n key: token.key,\n apiBaseUrl: token.apiBaseUrl,\n };\n};\n"],"mappings":";;;AA2DA,eAAsB,UAMpB,OAEA,UAC4D;CAC5D,MAAMA,MAA+B,MAAM;CAE3C,MAAMC,yBAAuB,OACxB,SAAiB,WACf,IAAoB,cAAc,qBAAqB,SAAS,OAAO,GAC1E;CAEJ,MAAM,eAAe,IAAIC,4CAAkB;EAClC;EACP,YAAY,MAAM,cAAc,KAAK;EACrC;EACA,UAAU,MAAM;EACjB,CAAC;AAEF,OAAM,aAAa,SAAS;CAE5B,MAAM,SAAS;EACb,qBAAqB,aAAa,eAAe;EACjD,wBAAwB,aAAa,kBAAkB;EACvD,QAAQ,WAAoB,aAAa,MAAM,OAAO;EACtD,cAAc,WAAoB,aAAa,MAAM,OAAO;EAC7D;CAED,MAAM,YAAY,MAAM,aAAa;AACrC,KAAI,WAAW;EACb,MAAM,iBAAiB,aAAa,eAAe;AACnD,eAAa,YAAY,WAAW,gBAAgB,MAAM,QAAQ;;AAGpE,KAAI,MAAM,UACR,QAAO;CAGT,MAAM,YAAY,aAAa,eAAe;AAC9C,QAAO,OAAO,OAAO,WAAW,OAAO;;AAGzC,MAAa,uBAAuB,OAKlC,KACA,SAIoB;CACpB,MAAM,YACJ,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU,KAAK,QAAQ;AAEjE,KAAI,CAAC,UACH,OAAM,IAAI,MAAM,wDAAwD;CAG1E,MAAM,MAAM,MAAO,IAAoB,cAAc,qBACnD,WACA,KAAK,OACN;AAED,QAAO;EACL,SAAS,KAAK;EACd,QAAQ,KAAK;EACb;EACA,YAAa,KAAqB;EACnC;;AAGH,MAAa,6BAA6B,OAIxC,KACA,SAI4C;CAC5C,MAAM,QAAQ,MAAM,qBAAqB,KAAK,KAAK;AAEnD,KAAI,CAAC,MAAM,IACT,OAAM,IAAI,MAAM,8CAA8C;AAGhE,QAAO;EACL,KAAK,MAAM;EACX,YAAY,MAAM;EACnB"}