@trigger.dev/core 3.0.0-beta.16 → 3.0.0-beta.18

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.
Files changed (65) hide show
  1. package/dist/catalog-A-D3UC6S.d.mts +6646 -0
  2. package/dist/catalog-TAZd4-TP.d.ts +6646 -0
  3. package/dist/manager-M9GLDnhJ.d.mts +1158 -0
  4. package/dist/manager-M9GLDnhJ.d.ts +1158 -0
  5. package/dist/messages-AriaDDm0.d.mts +8696 -0
  6. package/dist/messages-AriaDDm0.d.ts +8696 -0
  7. package/dist/v3/dev/index.d.mts +28 -0
  8. package/dist/v3/dev/index.d.ts +28 -0
  9. package/dist/v3/dev/index.js +93 -0
  10. package/dist/v3/dev/index.js.map +1 -0
  11. package/dist/v3/dev/index.mjs +91 -0
  12. package/dist/v3/dev/index.mjs.map +1 -0
  13. package/dist/v3/index.d.mts +299 -17348
  14. package/dist/v3/index.d.ts +299 -17348
  15. package/dist/v3/index.js +2091 -3860
  16. package/dist/v3/index.js.map +1 -1
  17. package/dist/v3/index.mjs +2093 -3836
  18. package/dist/v3/index.mjs.map +1 -1
  19. package/dist/v3/otel/index.js +62 -38
  20. package/dist/v3/otel/index.js.map +1 -1
  21. package/dist/v3/otel/index.mjs +62 -38
  22. package/dist/v3/otel/index.mjs.map +1 -1
  23. package/dist/v3/prod/index.d.mts +45 -0
  24. package/dist/v3/prod/index.d.ts +45 -0
  25. package/dist/v3/prod/index.js +205 -0
  26. package/dist/v3/prod/index.js.map +1 -0
  27. package/dist/v3/prod/index.mjs +203 -0
  28. package/dist/v3/prod/index.mjs.map +1 -0
  29. package/dist/v3/utils/structuredLogger.d.mts +31 -0
  30. package/dist/v3/utils/structuredLogger.d.ts +31 -0
  31. package/dist/v3/utils/structuredLogger.js +88 -0
  32. package/dist/v3/utils/structuredLogger.js.map +1 -0
  33. package/dist/v3/utils/structuredLogger.mjs +86 -0
  34. package/dist/v3/utils/structuredLogger.mjs.map +1 -0
  35. package/dist/v3/workers/index.d.mts +95 -0
  36. package/dist/v3/workers/index.d.ts +95 -0
  37. package/dist/v3/workers/index.js +2663 -0
  38. package/dist/v3/workers/index.js.map +1 -0
  39. package/dist/v3/workers/index.mjs +2647 -0
  40. package/dist/v3/workers/index.mjs.map +1 -0
  41. package/dist/v3/zodIpc.d.mts +32 -0
  42. package/dist/v3/zodIpc.d.ts +32 -0
  43. package/dist/v3/zodIpc.js +268 -0
  44. package/dist/v3/zodIpc.js.map +1 -0
  45. package/dist/v3/zodIpc.mjs +266 -0
  46. package/dist/v3/zodIpc.mjs.map +1 -0
  47. package/dist/v3/zodMessageHandler.d.mts +69 -0
  48. package/dist/v3/zodMessageHandler.d.ts +69 -0
  49. package/dist/v3/zodMessageHandler.js +168 -0
  50. package/dist/v3/zodMessageHandler.js.map +1 -0
  51. package/dist/v3/zodMessageHandler.mjs +163 -0
  52. package/dist/v3/zodMessageHandler.mjs.map +1 -0
  53. package/dist/v3/zodNamespace.d.mts +3663 -0
  54. package/dist/v3/zodNamespace.d.ts +3663 -0
  55. package/dist/v3/zodNamespace.js +356 -0
  56. package/dist/v3/zodNamespace.js.map +1 -0
  57. package/dist/v3/zodNamespace.mjs +354 -0
  58. package/dist/v3/zodNamespace.mjs.map +1 -0
  59. package/dist/v3/zodSocket.d.mts +88 -0
  60. package/dist/v3/zodSocket.d.ts +88 -0
  61. package/dist/v3/zodSocket.js +309 -0
  62. package/dist/v3/zodSocket.js.map +1 -0
  63. package/dist/v3/zodSocket.mjs +305 -0
  64. package/dist/v3/zodSocket.mjs.map +1 -0
  65. package/package.json +69 -5
@@ -0,0 +1,309 @@
1
+ 'use strict';
2
+
3
+ var socket_ioClient = require('socket.io-client');
4
+ var zod = require('zod');
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
+ var __accessCheck = (obj, member, msg) => {
9
+ if (!member.has(obj))
10
+ throw TypeError("Cannot " + msg);
11
+ };
12
+ var __privateGet = (obj, member, getter) => {
13
+ __accessCheck(obj, member, "read from private field");
14
+ return getter ? getter.call(obj) : member.get(obj);
15
+ };
16
+ var __privateAdd = (obj, member, value) => {
17
+ if (member.has(obj))
18
+ throw TypeError("Cannot add the same private member more than once");
19
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
20
+ };
21
+ var __privateSet = (obj, member, value, setter) => {
22
+ __accessCheck(obj, member, "write to private field");
23
+ setter ? setter.call(obj, value) : member.set(obj, value);
24
+ return value;
25
+ };
26
+ var __privateMethod = (obj, member, method) => {
27
+ __accessCheck(obj, member, "access private method");
28
+ return method;
29
+ };
30
+
31
+ // src/v3/utils/structuredLogger.ts
32
+ var LogLevel;
33
+ (function(LogLevel2) {
34
+ LogLevel2[LogLevel2["log"] = 0] = "log";
35
+ LogLevel2[LogLevel2["error"] = 1] = "error";
36
+ LogLevel2[LogLevel2["warn"] = 2] = "warn";
37
+ LogLevel2[LogLevel2["info"] = 3] = "info";
38
+ LogLevel2[LogLevel2["debug"] = 4] = "debug";
39
+ })(LogLevel || (LogLevel = {}));
40
+ var _structuredLog, structuredLog_fn;
41
+ var _SimpleStructuredLogger = class _SimpleStructuredLogger {
42
+ constructor(name, level = [
43
+ "1",
44
+ "true"
45
+ ].includes(process.env.DEBUG ?? "") ? LogLevel.debug : LogLevel.info, fields) {
46
+ __privateAdd(this, _structuredLog);
47
+ this.name = name;
48
+ this.level = level;
49
+ this.fields = fields;
50
+ }
51
+ child(fields, level) {
52
+ return new _SimpleStructuredLogger(this.name, level, {
53
+ ...this.fields,
54
+ ...fields
55
+ });
56
+ }
57
+ log(message, ...args) {
58
+ if (this.level < LogLevel.log)
59
+ return;
60
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.log, message, "log", ...args);
61
+ }
62
+ error(message, ...args) {
63
+ if (this.level < LogLevel.error)
64
+ return;
65
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.error, message, "error", ...args);
66
+ }
67
+ warn(message, ...args) {
68
+ if (this.level < LogLevel.warn)
69
+ return;
70
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.warn, message, "warn", ...args);
71
+ }
72
+ info(message, ...args) {
73
+ if (this.level < LogLevel.info)
74
+ return;
75
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.info, message, "info", ...args);
76
+ }
77
+ debug(message, ...args) {
78
+ if (this.level < LogLevel.debug)
79
+ return;
80
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.debug, message, "debug", ...args);
81
+ }
82
+ };
83
+ _structuredLog = new WeakSet();
84
+ structuredLog_fn = /* @__PURE__ */ __name(function(loggerFunction, message, level, ...args) {
85
+ const structuredLog = {
86
+ ...args.length === 1 ? args[0] : args,
87
+ ...this.fields,
88
+ timestamp: /* @__PURE__ */ new Date(),
89
+ name: this.name,
90
+ message,
91
+ level
92
+ };
93
+ loggerFunction(JSON.stringify(structuredLog));
94
+ }, "#structuredLog");
95
+ __name(_SimpleStructuredLogger, "SimpleStructuredLogger");
96
+ var SimpleStructuredLogger = _SimpleStructuredLogger;
97
+
98
+ // src/v3/zodSocket.ts
99
+ var messageSchema = zod.z.object({
100
+ version: zod.z.literal("v1").default("v1"),
101
+ type: zod.z.string(),
102
+ payload: zod.z.unknown()
103
+ });
104
+ var _schema, _handlers;
105
+ var _ZodSocketMessageHandler = class _ZodSocketMessageHandler {
106
+ constructor(options) {
107
+ __privateAdd(this, _schema, void 0);
108
+ __privateAdd(this, _handlers, void 0);
109
+ __privateSet(this, _schema, options.schema);
110
+ __privateSet(this, _handlers, options.handlers);
111
+ }
112
+ async handleMessage(message) {
113
+ const parsedMessage = this.parseMessage(message);
114
+ if (!__privateGet(this, _handlers)) {
115
+ throw new Error("No handlers provided");
116
+ }
117
+ const handler = __privateGet(this, _handlers)[parsedMessage.type];
118
+ if (!handler) {
119
+ console.error(`No handler for message type: ${String(parsedMessage.type)}`);
120
+ return;
121
+ }
122
+ const ack = await handler(parsedMessage.payload);
123
+ return ack;
124
+ }
125
+ parseMessage(message) {
126
+ const parsedMessage = messageSchema.safeParse(message);
127
+ if (!parsedMessage.success) {
128
+ throw new Error(`Failed to parse message: ${JSON.stringify(parsedMessage.error)}`);
129
+ }
130
+ const schema = __privateGet(this, _schema)[parsedMessage.data.type]["message"];
131
+ if (!schema) {
132
+ throw new Error(`Unknown message type: ${parsedMessage.data.type}`);
133
+ }
134
+ const parsedPayload = schema.safeParse(parsedMessage.data.payload);
135
+ if (!parsedPayload.success) {
136
+ throw new Error(`Failed to parse message payload: ${JSON.stringify(parsedPayload.error)}`);
137
+ }
138
+ return {
139
+ type: parsedMessage.data.type,
140
+ payload: parsedPayload.data
141
+ };
142
+ }
143
+ registerHandlers(emitter, logger) {
144
+ const log = logger ?? console;
145
+ if (!__privateGet(this, _handlers)) {
146
+ log.info("No handlers provided");
147
+ return;
148
+ }
149
+ for (const eventName of Object.keys(__privateGet(this, _handlers))) {
150
+ emitter.on(eventName, async (message, callback) => {
151
+ log.info(`handling ${eventName}`, {
152
+ payload: message,
153
+ hasCallback: !!callback
154
+ });
155
+ let ack;
156
+ try {
157
+ if ("payload" in message) {
158
+ ack = await this.handleMessage({
159
+ type: eventName,
160
+ ...message
161
+ });
162
+ } else {
163
+ const { version, ...payload } = message;
164
+ ack = await this.handleMessage({
165
+ type: eventName,
166
+ version,
167
+ payload
168
+ });
169
+ }
170
+ } catch (error) {
171
+ log.error("Error while handling message", {
172
+ error
173
+ });
174
+ return;
175
+ }
176
+ if (callback && typeof callback === "function") {
177
+ callback(ack);
178
+ }
179
+ });
180
+ }
181
+ }
182
+ };
183
+ _schema = new WeakMap();
184
+ _handlers = new WeakMap();
185
+ __name(_ZodSocketMessageHandler, "ZodSocketMessageHandler");
186
+ var ZodSocketMessageHandler = _ZodSocketMessageHandler;
187
+ var _schema2, _socket;
188
+ var _ZodSocketMessageSender = class _ZodSocketMessageSender {
189
+ constructor(options) {
190
+ __privateAdd(this, _schema2, void 0);
191
+ __privateAdd(this, _socket, void 0);
192
+ __privateSet(this, _schema2, options.schema);
193
+ __privateSet(this, _socket, options.socket);
194
+ }
195
+ send(type, payload) {
196
+ const schema = __privateGet(this, _schema2)[type]["message"];
197
+ if (!schema) {
198
+ throw new Error(`Unknown message type: ${type}`);
199
+ }
200
+ const parsedPayload = schema.safeParse(payload);
201
+ if (!parsedPayload.success) {
202
+ throw new Error(`Failed to parse message payload: ${JSON.stringify(parsedPayload.error)}`);
203
+ }
204
+ __privateGet(this, _socket).emit(type, {
205
+ payload,
206
+ version: "v1"
207
+ });
208
+ return;
209
+ }
210
+ async sendWithAck(type, payload) {
211
+ const schema = __privateGet(this, _schema2)[type]["message"];
212
+ if (!schema) {
213
+ throw new Error(`Unknown message type: ${type}`);
214
+ }
215
+ const parsedPayload = schema.safeParse(payload);
216
+ if (!parsedPayload.success) {
217
+ throw new Error(`Failed to parse message payload: ${JSON.stringify(parsedPayload.error)}`);
218
+ }
219
+ const callbackResult = await __privateGet(this, _socket).emitWithAck(type, {
220
+ payload,
221
+ version: "v1"
222
+ });
223
+ return callbackResult;
224
+ }
225
+ };
226
+ _schema2 = new WeakMap();
227
+ _socket = new WeakMap();
228
+ __name(_ZodSocketMessageSender, "ZodSocketMessageSender");
229
+ var ZodSocketMessageSender = _ZodSocketMessageSender;
230
+ var _sender, _handler, _logger;
231
+ var _ZodSocketConnection = class _ZodSocketConnection {
232
+ constructor(opts) {
233
+ __privateAdd(this, _sender, void 0);
234
+ __privateAdd(this, _handler, void 0);
235
+ __privateAdd(this, _logger, void 0);
236
+ const uri = `${opts.secure ? "wss" : "ws"}://${opts.host}:${opts.port ?? (opts.secure ? "443" : "80")}/${opts.namespace}`;
237
+ const logger = new SimpleStructuredLogger(opts.namespace, LogLevel.info);
238
+ logger.log("new zod socket", {
239
+ uri
240
+ });
241
+ this.socket = socket_ioClient.io(uri, {
242
+ transports: [
243
+ "websocket"
244
+ ],
245
+ auth: {
246
+ token: opts.authToken
247
+ },
248
+ extraHeaders: opts.extraHeaders,
249
+ reconnectionDelay: 500,
250
+ reconnectionDelayMax: 1e3
251
+ });
252
+ __privateSet(this, _logger, logger.child({
253
+ socketId: this.socket.id
254
+ }));
255
+ __privateSet(this, _handler, new ZodSocketMessageHandler({
256
+ schema: opts.serverMessages,
257
+ handlers: opts.handlers
258
+ }));
259
+ __privateGet(this, _handler).registerHandlers(this.socket, __privateGet(this, _logger));
260
+ __privateSet(this, _sender, new ZodSocketMessageSender({
261
+ schema: opts.clientMessages,
262
+ socket: this.socket
263
+ }));
264
+ this.socket.on("connect_error", async (error) => {
265
+ __privateGet(this, _logger).error(`connect_error: ${error}`);
266
+ if (opts.onError) {
267
+ await opts.onError(this.socket, error, __privateGet(this, _logger));
268
+ }
269
+ });
270
+ this.socket.on("connect", async () => {
271
+ __privateGet(this, _logger).info("connect");
272
+ if (opts.onConnection) {
273
+ await opts.onConnection(this.socket, __privateGet(this, _handler), __privateGet(this, _sender), __privateGet(this, _logger));
274
+ }
275
+ });
276
+ this.socket.on("disconnect", async (reason, description) => {
277
+ __privateGet(this, _logger).info("disconnect", {
278
+ reason,
279
+ description
280
+ });
281
+ if (opts.onDisconnect) {
282
+ await opts.onDisconnect(this.socket, reason, description, __privateGet(this, _logger));
283
+ }
284
+ });
285
+ }
286
+ close() {
287
+ this.socket.close();
288
+ }
289
+ connect() {
290
+ this.socket.connect();
291
+ }
292
+ get send() {
293
+ return __privateGet(this, _sender).send.bind(__privateGet(this, _sender));
294
+ }
295
+ get sendWithAck() {
296
+ return __privateGet(this, _sender).sendWithAck.bind(__privateGet(this, _sender));
297
+ }
298
+ };
299
+ _sender = new WeakMap();
300
+ _handler = new WeakMap();
301
+ _logger = new WeakMap();
302
+ __name(_ZodSocketConnection, "ZodSocketConnection");
303
+ var ZodSocketConnection = _ZodSocketConnection;
304
+
305
+ exports.ZodSocketConnection = ZodSocketConnection;
306
+ exports.ZodSocketMessageHandler = ZodSocketMessageHandler;
307
+ exports.ZodSocketMessageSender = ZodSocketMessageSender;
308
+ //# sourceMappingURL=out.js.map
309
+ //# sourceMappingURL=zodSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/v3/zodSocket.ts","../../src/v3/utils/structuredLogger.ts"],"names":["io","z","LogLevel","SimpleStructuredLogger","constructor","name","level","includes","process","env","DEBUG","debug","info","fields","child","log","message","args","console","error","warn","loggerFunction","structuredLog","length","timestamp","Date","JSON","stringify","messageSchema","object","version","literal","default","type","string","payload","unknown","ZodSocketMessageHandler","options","schema","handlers","handleMessage","parsedMessage","parseMessage","Error","handler","String","ack","safeParse","success","data","parsedPayload","registerHandlers","emitter","logger","eventName","Object","keys","on","callback","hasCallback","_schema","ZodSocketMessageSender","socket","send","emit","sendWithAck","callbackResult","emitWithAck","ZodSocketConnection","opts","uri","secure","host","port","namespace","transports","auth","token","authToken","extraHeaders","reconnectionDelay","reconnectionDelayMax","socketId","id","serverMessages","clientMessages","onError","onConnection","reason","description","onDisconnect","close","connect","bind"],"mappings":"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","sourcesContent":["import type { Socket } from \"socket.io-client\";\nimport { io } from \"socket.io-client\";\nimport { z } from \"zod\";\nimport { EventEmitterLike, ZodMessageValueSchema } from \"./zodMessageHandler\";\nimport { LogLevel, SimpleStructuredLogger, StructuredLogger } from \"./utils/structuredLogger\";\n\nexport interface ZodSocketMessageCatalogSchema {\n [key: string]:\n | {\n message: ZodMessageValueSchema<any>;\n }\n | {\n message: ZodMessageValueSchema<any>;\n callback?: ZodMessageValueSchema<any>;\n };\n}\n\nexport type ZodMessageCatalogToSocketIoEvents<TCatalog extends ZodSocketMessageCatalogSchema> = {\n [K in keyof TCatalog]: SocketMessageHasCallback<TCatalog, K> extends true\n ? (\n message: z.infer<GetSocketMessageSchema<TCatalog, K>>,\n callback: (ack: z.infer<GetSocketCallbackSchema<TCatalog, K>>) => void\n ) => void\n : (message: z.infer<GetSocketMessageSchema<TCatalog, K>>) => void;\n};\n\nexport type GetSocketMessageSchema<\n TRPCCatalog extends ZodSocketMessageCatalogSchema,\n TMessageType extends keyof TRPCCatalog,\n> = TRPCCatalog[TMessageType][\"message\"];\n\nexport type InferSocketMessageSchema<\n TRPCCatalog extends ZodSocketMessageCatalogSchema,\n TMessageType extends keyof TRPCCatalog,\n> = z.infer<GetSocketMessageSchema<TRPCCatalog, TMessageType>>;\n\nexport type GetSocketCallbackSchema<\n TRPCCatalog extends ZodSocketMessageCatalogSchema,\n TMessageType extends keyof TRPCCatalog,\n> = TRPCCatalog[TMessageType] extends { callback: any }\n ? TRPCCatalog[TMessageType][\"callback\"]\n : never;\n\nexport type InferSocketCallbackSchema<\n TRPCCatalog extends ZodSocketMessageCatalogSchema,\n TMessageType extends keyof TRPCCatalog,\n> = z.infer<GetSocketCallbackSchema<TRPCCatalog, TMessageType>>;\n\nexport type SocketMessageHasCallback<\n TRPCCatalog extends ZodSocketMessageCatalogSchema,\n TMessageType extends keyof TRPCCatalog,\n> = GetSocketCallbackSchema<TRPCCatalog, TMessageType> extends never ? false : true;\n\nexport type ZodSocketMessageHandlers<TCatalogSchema extends ZodSocketMessageCatalogSchema> =\n Partial<{\n [K in keyof TCatalogSchema]: (\n payload: z.infer<GetSocketMessageSchema<TCatalogSchema, K>>\n ) => Promise<\n SocketMessageHasCallback<TCatalogSchema, K> extends true\n ? z.input<GetSocketCallbackSchema<TCatalogSchema, K>>\n : void\n >;\n }>;\n\nexport type ZodSocketMessageHandlerOptions<TMessageCatalog extends ZodSocketMessageCatalogSchema> =\n {\n schema: TMessageCatalog;\n handlers?: ZodSocketMessageHandlers<TMessageCatalog>;\n };\n\ntype MessageFromSocketSchema<\n K extends keyof TMessageCatalog,\n TMessageCatalog extends ZodSocketMessageCatalogSchema,\n> = {\n type: K;\n payload: z.input<GetSocketMessageSchema<TMessageCatalog, K>>;\n};\n\nexport type MessagesFromSocketCatalog<TMessageCatalog extends ZodSocketMessageCatalogSchema> = {\n [K in keyof TMessageCatalog]: MessageFromSocketSchema<K, TMessageCatalog>;\n}[keyof TMessageCatalog];\n\nconst messageSchema = z.object({\n version: z.literal(\"v1\").default(\"v1\"),\n type: z.string(),\n payload: z.unknown(),\n});\n\nexport class ZodSocketMessageHandler<TRPCCatalog extends ZodSocketMessageCatalogSchema> {\n #schema: TRPCCatalog;\n #handlers: ZodSocketMessageHandlers<TRPCCatalog> | undefined;\n\n constructor(options: ZodSocketMessageHandlerOptions<TRPCCatalog>) {\n this.#schema = options.schema;\n this.#handlers = options.handlers;\n }\n\n public async handleMessage(message: unknown) {\n const parsedMessage = this.parseMessage(message);\n\n if (!this.#handlers) {\n throw new Error(\"No handlers provided\");\n }\n\n const handler = this.#handlers[parsedMessage.type];\n\n if (!handler) {\n console.error(`No handler for message type: ${String(parsedMessage.type)}`);\n return;\n }\n\n const ack = await handler(parsedMessage.payload);\n\n return ack;\n }\n\n public parseMessage(message: unknown): MessagesFromSocketCatalog<TRPCCatalog> {\n const parsedMessage = messageSchema.safeParse(message);\n\n if (!parsedMessage.success) {\n throw new Error(`Failed to parse message: ${JSON.stringify(parsedMessage.error)}`);\n }\n\n const schema = this.#schema[parsedMessage.data.type][\"message\"];\n\n if (!schema) {\n throw new Error(`Unknown message type: ${parsedMessage.data.type}`);\n }\n\n const parsedPayload = schema.safeParse(parsedMessage.data.payload);\n\n if (!parsedPayload.success) {\n throw new Error(`Failed to parse message payload: ${JSON.stringify(parsedPayload.error)}`);\n }\n\n return {\n type: parsedMessage.data.type,\n payload: parsedPayload.data,\n };\n }\n\n public registerHandlers(emitter: EventEmitterLike, logger?: StructuredLogger) {\n const log = logger ?? console;\n\n if (!this.#handlers) {\n log.info(\"No handlers provided\");\n return;\n }\n\n for (const eventName of Object.keys(this.#handlers)) {\n emitter.on(eventName, async (message: any, callback?: any): Promise<void> => {\n log.info(`handling ${eventName}`, {\n payload: message,\n hasCallback: !!callback,\n });\n\n let ack;\n\n try {\n // FIXME: this only works if the message doesn't have genuine payload prop\n if (\"payload\" in message) {\n ack = await this.handleMessage({ type: eventName, ...message });\n } else {\n // Handle messages not sent by ZodMessageSender\n const { version, ...payload } = message;\n ack = await this.handleMessage({ type: eventName, version, payload });\n }\n } catch (error) {\n log.error(\"Error while handling message\", { error });\n return;\n }\n\n if (callback && typeof callback === \"function\") {\n callback(ack);\n }\n });\n }\n }\n}\n\nexport type ZodSocketMessageSenderOptions<TMessageCatalog extends ZodSocketMessageCatalogSchema> = {\n schema: TMessageCatalog;\n socket: ZodSocket<any, TMessageCatalog>;\n};\n\nexport type GetSocketMessagesWithCallback<TMessageCatalog extends ZodSocketMessageCatalogSchema> = {\n [K in keyof TMessageCatalog]: SocketMessageHasCallback<TMessageCatalog, K> extends true\n ? K\n : never;\n}[keyof TMessageCatalog];\n\nexport type GetSocketMessagesWithoutCallback<\n TMessageCatalog extends ZodSocketMessageCatalogSchema,\n> = {\n [K in keyof TMessageCatalog]: SocketMessageHasCallback<TMessageCatalog, K> extends true\n ? never\n : K;\n}[keyof TMessageCatalog];\n\nexport class ZodSocketMessageSender<TMessageCatalog extends ZodSocketMessageCatalogSchema> {\n #schema: TMessageCatalog;\n #socket: ZodSocket<any, TMessageCatalog>;\n\n constructor(options: ZodSocketMessageSenderOptions<TMessageCatalog>) {\n this.#schema = options.schema;\n this.#socket = options.socket;\n }\n\n public send<K extends GetSocketMessagesWithoutCallback<TMessageCatalog>>(\n type: K,\n payload: z.input<GetSocketMessageSchema<TMessageCatalog, K>>\n ): void {\n const schema = this.#schema[type][\"message\"];\n\n if (!schema) {\n throw new Error(`Unknown message type: ${type as string}`);\n }\n\n const parsedPayload = schema.safeParse(payload);\n\n if (!parsedPayload.success) {\n throw new Error(`Failed to parse message payload: ${JSON.stringify(parsedPayload.error)}`);\n }\n\n // @ts-expect-error\n this.#socket.emit(type, { payload, version: \"v1\" });\n\n return;\n }\n\n public async sendWithAck<K extends GetSocketMessagesWithCallback<TMessageCatalog>>(\n type: K,\n payload: z.input<GetSocketMessageSchema<TMessageCatalog, K>>\n ): Promise<z.infer<GetSocketCallbackSchema<TMessageCatalog, K>>> {\n const schema = this.#schema[type][\"message\"];\n\n if (!schema) {\n throw new Error(`Unknown message type: ${type as string}`);\n }\n\n const parsedPayload = schema.safeParse(payload);\n\n if (!parsedPayload.success) {\n throw new Error(`Failed to parse message payload: ${JSON.stringify(parsedPayload.error)}`);\n }\n\n // @ts-expect-error\n const callbackResult = await this.#socket.emitWithAck(type, { payload, version: \"v1\" });\n\n return callbackResult;\n }\n}\n\nexport type ZodSocket<\n TListenEvents extends ZodSocketMessageCatalogSchema,\n TEmitEvents extends ZodSocketMessageCatalogSchema,\n> = Socket<\n ZodMessageCatalogToSocketIoEvents<TListenEvents>,\n ZodMessageCatalogToSocketIoEvents<TEmitEvents>\n>;\n\ninterface ZodSocketConnectionOptions<\n TClientMessages extends ZodSocketMessageCatalogSchema,\n TServerMessages extends ZodSocketMessageCatalogSchema,\n> {\n host: string;\n port?: number;\n secure?: boolean;\n namespace: string;\n clientMessages: TClientMessages;\n serverMessages: TServerMessages;\n extraHeaders?: {\n [header: string]: string;\n };\n handlers?: ZodSocketMessageHandlers<TServerMessages>;\n authToken?: string;\n onConnection?: (\n socket: ZodSocket<TServerMessages, TClientMessages>,\n handler: ZodSocketMessageHandler<TServerMessages>,\n sender: ZodSocketMessageSender<TClientMessages>,\n logger: StructuredLogger\n ) => Promise<void>;\n onDisconnect?: (\n socket: ZodSocket<TServerMessages, TClientMessages>,\n reason: Socket.DisconnectReason,\n description: any,\n logger: StructuredLogger\n ) => Promise<void>;\n onError?: (\n socket: ZodSocket<TServerMessages, TClientMessages>,\n err: Error,\n logger: StructuredLogger\n ) => Promise<void>;\n}\n\nexport class ZodSocketConnection<\n TClientMessages extends ZodSocketMessageCatalogSchema,\n TServerMessages extends ZodSocketMessageCatalogSchema,\n> {\n #sender: ZodSocketMessageSender<TClientMessages>;\n socket: ZodSocket<TServerMessages, TClientMessages>;\n\n #handler: ZodSocketMessageHandler<TServerMessages>;\n #logger: StructuredLogger;\n\n constructor(opts: ZodSocketConnectionOptions<TClientMessages, TServerMessages>) {\n const uri = `${opts.secure ? \"wss\" : \"ws\"}://${opts.host}:${\n opts.port ?? (opts.secure ? \"443\" : \"80\")\n }/${opts.namespace}`;\n\n const logger = new SimpleStructuredLogger(opts.namespace, LogLevel.info);\n logger.log(\"new zod socket\", { uri });\n\n this.socket = io(uri, {\n transports: [\"websocket\"],\n auth: {\n token: opts.authToken,\n },\n extraHeaders: opts.extraHeaders,\n reconnectionDelay: 500,\n reconnectionDelayMax: 1000,\n });\n\n this.#logger = logger.child({\n socketId: this.socket.id,\n });\n\n this.#handler = new ZodSocketMessageHandler({\n schema: opts.serverMessages,\n handlers: opts.handlers,\n });\n this.#handler.registerHandlers(this.socket, this.#logger);\n\n this.#sender = new ZodSocketMessageSender({\n schema: opts.clientMessages,\n socket: this.socket,\n });\n\n this.socket.on(\"connect_error\", async (error) => {\n this.#logger.error(`connect_error: ${error}`);\n\n if (opts.onError) {\n await opts.onError(this.socket, error, this.#logger);\n }\n });\n\n this.socket.on(\"connect\", async () => {\n this.#logger.info(\"connect\");\n\n if (opts.onConnection) {\n await opts.onConnection(this.socket, this.#handler, this.#sender, this.#logger);\n }\n });\n\n this.socket.on(\"disconnect\", async (reason, description) => {\n this.#logger.info(\"disconnect\", { reason, description });\n\n if (opts.onDisconnect) {\n await opts.onDisconnect(this.socket, reason, description, this.#logger);\n }\n });\n }\n\n close() {\n this.socket.close();\n }\n\n connect() {\n this.socket.connect();\n }\n\n get send() {\n return this.#sender.send.bind(this.#sender);\n }\n\n get sendWithAck() {\n return this.#sender.sendWithAck.bind(this.#sender);\n }\n}\n\nfunction createLogger(prefix: string) {\n return (...args: any[]) => console.log(prefix, ...args);\n}\n","type StructuredArgs = (Record<string, unknown> | undefined)[];\n\nexport interface StructuredLogger {\n log: (message: string, ...args: StructuredArgs) => any;\n error: (message: string, ...args: StructuredArgs) => any;\n warn: (message: string, ...args: StructuredArgs) => any;\n info: (message: string, ...args: StructuredArgs) => any;\n debug: (message: string, ...args: StructuredArgs) => any;\n child: (fields: Record<string, unknown>) => StructuredLogger;\n}\n\nexport enum LogLevel {\n \"log\",\n \"error\",\n \"warn\",\n \"info\",\n \"debug\",\n}\n\nexport class SimpleStructuredLogger implements StructuredLogger {\n constructor(\n private name: string,\n private level: LogLevel = [\"1\", \"true\"].includes(process.env.DEBUG ?? \"\")\n ? LogLevel.debug\n : LogLevel.info,\n private fields?: Record<string, unknown>\n ) {}\n\n child(fields: Record<string, unknown>, level?: LogLevel) {\n return new SimpleStructuredLogger(this.name, level, { ...this.fields, ...fields });\n }\n\n log(message: string, ...args: StructuredArgs) {\n if (this.level < LogLevel.log) return;\n\n this.#structuredLog(console.log, message, \"log\", ...args);\n }\n\n error(message: string, ...args: StructuredArgs) {\n if (this.level < LogLevel.error) return;\n\n this.#structuredLog(console.error, message, \"error\", ...args);\n }\n\n warn(message: string, ...args: StructuredArgs) {\n if (this.level < LogLevel.warn) return;\n\n this.#structuredLog(console.warn, message, \"warn\", ...args);\n }\n\n info(message: string, ...args: StructuredArgs) {\n if (this.level < LogLevel.info) return;\n\n this.#structuredLog(console.info, message, \"info\", ...args);\n }\n\n debug(message: string, ...args: StructuredArgs) {\n if (this.level < LogLevel.debug) return;\n\n this.#structuredLog(console.debug, message, \"debug\", ...args);\n }\n\n #structuredLog(\n loggerFunction: (message: string, ...args: any[]) => void,\n message: string,\n level: string,\n ...args: StructuredArgs\n ) {\n const structuredLog = {\n ...(args.length === 1 ? args[0] : args),\n ...this.fields,\n timestamp: new Date(),\n name: this.name,\n message,\n level,\n };\n\n loggerFunction(JSON.stringify(structuredLog));\n }\n}\n"]}
@@ -0,0 +1,305 @@
1
+ import { io } from 'socket.io-client';
2
+ import { z } from 'zod';
3
+
4
+ var __defProp = Object.defineProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __accessCheck = (obj, member, msg) => {
7
+ if (!member.has(obj))
8
+ throw TypeError("Cannot " + msg);
9
+ };
10
+ var __privateGet = (obj, member, getter) => {
11
+ __accessCheck(obj, member, "read from private field");
12
+ return getter ? getter.call(obj) : member.get(obj);
13
+ };
14
+ var __privateAdd = (obj, member, value) => {
15
+ if (member.has(obj))
16
+ throw TypeError("Cannot add the same private member more than once");
17
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
18
+ };
19
+ var __privateSet = (obj, member, value, setter) => {
20
+ __accessCheck(obj, member, "write to private field");
21
+ setter ? setter.call(obj, value) : member.set(obj, value);
22
+ return value;
23
+ };
24
+ var __privateMethod = (obj, member, method) => {
25
+ __accessCheck(obj, member, "access private method");
26
+ return method;
27
+ };
28
+
29
+ // src/v3/utils/structuredLogger.ts
30
+ var LogLevel;
31
+ (function(LogLevel2) {
32
+ LogLevel2[LogLevel2["log"] = 0] = "log";
33
+ LogLevel2[LogLevel2["error"] = 1] = "error";
34
+ LogLevel2[LogLevel2["warn"] = 2] = "warn";
35
+ LogLevel2[LogLevel2["info"] = 3] = "info";
36
+ LogLevel2[LogLevel2["debug"] = 4] = "debug";
37
+ })(LogLevel || (LogLevel = {}));
38
+ var _structuredLog, structuredLog_fn;
39
+ var _SimpleStructuredLogger = class _SimpleStructuredLogger {
40
+ constructor(name, level = [
41
+ "1",
42
+ "true"
43
+ ].includes(process.env.DEBUG ?? "") ? LogLevel.debug : LogLevel.info, fields) {
44
+ __privateAdd(this, _structuredLog);
45
+ this.name = name;
46
+ this.level = level;
47
+ this.fields = fields;
48
+ }
49
+ child(fields, level) {
50
+ return new _SimpleStructuredLogger(this.name, level, {
51
+ ...this.fields,
52
+ ...fields
53
+ });
54
+ }
55
+ log(message, ...args) {
56
+ if (this.level < LogLevel.log)
57
+ return;
58
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.log, message, "log", ...args);
59
+ }
60
+ error(message, ...args) {
61
+ if (this.level < LogLevel.error)
62
+ return;
63
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.error, message, "error", ...args);
64
+ }
65
+ warn(message, ...args) {
66
+ if (this.level < LogLevel.warn)
67
+ return;
68
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.warn, message, "warn", ...args);
69
+ }
70
+ info(message, ...args) {
71
+ if (this.level < LogLevel.info)
72
+ return;
73
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.info, message, "info", ...args);
74
+ }
75
+ debug(message, ...args) {
76
+ if (this.level < LogLevel.debug)
77
+ return;
78
+ __privateMethod(this, _structuredLog, structuredLog_fn).call(this, console.debug, message, "debug", ...args);
79
+ }
80
+ };
81
+ _structuredLog = new WeakSet();
82
+ structuredLog_fn = /* @__PURE__ */ __name(function(loggerFunction, message, level, ...args) {
83
+ const structuredLog = {
84
+ ...args.length === 1 ? args[0] : args,
85
+ ...this.fields,
86
+ timestamp: /* @__PURE__ */ new Date(),
87
+ name: this.name,
88
+ message,
89
+ level
90
+ };
91
+ loggerFunction(JSON.stringify(structuredLog));
92
+ }, "#structuredLog");
93
+ __name(_SimpleStructuredLogger, "SimpleStructuredLogger");
94
+ var SimpleStructuredLogger = _SimpleStructuredLogger;
95
+
96
+ // src/v3/zodSocket.ts
97
+ var messageSchema = z.object({
98
+ version: z.literal("v1").default("v1"),
99
+ type: z.string(),
100
+ payload: z.unknown()
101
+ });
102
+ var _schema, _handlers;
103
+ var _ZodSocketMessageHandler = class _ZodSocketMessageHandler {
104
+ constructor(options) {
105
+ __privateAdd(this, _schema, void 0);
106
+ __privateAdd(this, _handlers, void 0);
107
+ __privateSet(this, _schema, options.schema);
108
+ __privateSet(this, _handlers, options.handlers);
109
+ }
110
+ async handleMessage(message) {
111
+ const parsedMessage = this.parseMessage(message);
112
+ if (!__privateGet(this, _handlers)) {
113
+ throw new Error("No handlers provided");
114
+ }
115
+ const handler = __privateGet(this, _handlers)[parsedMessage.type];
116
+ if (!handler) {
117
+ console.error(`No handler for message type: ${String(parsedMessage.type)}`);
118
+ return;
119
+ }
120
+ const ack = await handler(parsedMessage.payload);
121
+ return ack;
122
+ }
123
+ parseMessage(message) {
124
+ const parsedMessage = messageSchema.safeParse(message);
125
+ if (!parsedMessage.success) {
126
+ throw new Error(`Failed to parse message: ${JSON.stringify(parsedMessage.error)}`);
127
+ }
128
+ const schema = __privateGet(this, _schema)[parsedMessage.data.type]["message"];
129
+ if (!schema) {
130
+ throw new Error(`Unknown message type: ${parsedMessage.data.type}`);
131
+ }
132
+ const parsedPayload = schema.safeParse(parsedMessage.data.payload);
133
+ if (!parsedPayload.success) {
134
+ throw new Error(`Failed to parse message payload: ${JSON.stringify(parsedPayload.error)}`);
135
+ }
136
+ return {
137
+ type: parsedMessage.data.type,
138
+ payload: parsedPayload.data
139
+ };
140
+ }
141
+ registerHandlers(emitter, logger) {
142
+ const log = logger ?? console;
143
+ if (!__privateGet(this, _handlers)) {
144
+ log.info("No handlers provided");
145
+ return;
146
+ }
147
+ for (const eventName of Object.keys(__privateGet(this, _handlers))) {
148
+ emitter.on(eventName, async (message, callback) => {
149
+ log.info(`handling ${eventName}`, {
150
+ payload: message,
151
+ hasCallback: !!callback
152
+ });
153
+ let ack;
154
+ try {
155
+ if ("payload" in message) {
156
+ ack = await this.handleMessage({
157
+ type: eventName,
158
+ ...message
159
+ });
160
+ } else {
161
+ const { version, ...payload } = message;
162
+ ack = await this.handleMessage({
163
+ type: eventName,
164
+ version,
165
+ payload
166
+ });
167
+ }
168
+ } catch (error) {
169
+ log.error("Error while handling message", {
170
+ error
171
+ });
172
+ return;
173
+ }
174
+ if (callback && typeof callback === "function") {
175
+ callback(ack);
176
+ }
177
+ });
178
+ }
179
+ }
180
+ };
181
+ _schema = new WeakMap();
182
+ _handlers = new WeakMap();
183
+ __name(_ZodSocketMessageHandler, "ZodSocketMessageHandler");
184
+ var ZodSocketMessageHandler = _ZodSocketMessageHandler;
185
+ var _schema2, _socket;
186
+ var _ZodSocketMessageSender = class _ZodSocketMessageSender {
187
+ constructor(options) {
188
+ __privateAdd(this, _schema2, void 0);
189
+ __privateAdd(this, _socket, void 0);
190
+ __privateSet(this, _schema2, options.schema);
191
+ __privateSet(this, _socket, options.socket);
192
+ }
193
+ send(type, payload) {
194
+ const schema = __privateGet(this, _schema2)[type]["message"];
195
+ if (!schema) {
196
+ throw new Error(`Unknown message type: ${type}`);
197
+ }
198
+ const parsedPayload = schema.safeParse(payload);
199
+ if (!parsedPayload.success) {
200
+ throw new Error(`Failed to parse message payload: ${JSON.stringify(parsedPayload.error)}`);
201
+ }
202
+ __privateGet(this, _socket).emit(type, {
203
+ payload,
204
+ version: "v1"
205
+ });
206
+ return;
207
+ }
208
+ async sendWithAck(type, payload) {
209
+ const schema = __privateGet(this, _schema2)[type]["message"];
210
+ if (!schema) {
211
+ throw new Error(`Unknown message type: ${type}`);
212
+ }
213
+ const parsedPayload = schema.safeParse(payload);
214
+ if (!parsedPayload.success) {
215
+ throw new Error(`Failed to parse message payload: ${JSON.stringify(parsedPayload.error)}`);
216
+ }
217
+ const callbackResult = await __privateGet(this, _socket).emitWithAck(type, {
218
+ payload,
219
+ version: "v1"
220
+ });
221
+ return callbackResult;
222
+ }
223
+ };
224
+ _schema2 = new WeakMap();
225
+ _socket = new WeakMap();
226
+ __name(_ZodSocketMessageSender, "ZodSocketMessageSender");
227
+ var ZodSocketMessageSender = _ZodSocketMessageSender;
228
+ var _sender, _handler, _logger;
229
+ var _ZodSocketConnection = class _ZodSocketConnection {
230
+ constructor(opts) {
231
+ __privateAdd(this, _sender, void 0);
232
+ __privateAdd(this, _handler, void 0);
233
+ __privateAdd(this, _logger, void 0);
234
+ const uri = `${opts.secure ? "wss" : "ws"}://${opts.host}:${opts.port ?? (opts.secure ? "443" : "80")}/${opts.namespace}`;
235
+ const logger = new SimpleStructuredLogger(opts.namespace, LogLevel.info);
236
+ logger.log("new zod socket", {
237
+ uri
238
+ });
239
+ this.socket = io(uri, {
240
+ transports: [
241
+ "websocket"
242
+ ],
243
+ auth: {
244
+ token: opts.authToken
245
+ },
246
+ extraHeaders: opts.extraHeaders,
247
+ reconnectionDelay: 500,
248
+ reconnectionDelayMax: 1e3
249
+ });
250
+ __privateSet(this, _logger, logger.child({
251
+ socketId: this.socket.id
252
+ }));
253
+ __privateSet(this, _handler, new ZodSocketMessageHandler({
254
+ schema: opts.serverMessages,
255
+ handlers: opts.handlers
256
+ }));
257
+ __privateGet(this, _handler).registerHandlers(this.socket, __privateGet(this, _logger));
258
+ __privateSet(this, _sender, new ZodSocketMessageSender({
259
+ schema: opts.clientMessages,
260
+ socket: this.socket
261
+ }));
262
+ this.socket.on("connect_error", async (error) => {
263
+ __privateGet(this, _logger).error(`connect_error: ${error}`);
264
+ if (opts.onError) {
265
+ await opts.onError(this.socket, error, __privateGet(this, _logger));
266
+ }
267
+ });
268
+ this.socket.on("connect", async () => {
269
+ __privateGet(this, _logger).info("connect");
270
+ if (opts.onConnection) {
271
+ await opts.onConnection(this.socket, __privateGet(this, _handler), __privateGet(this, _sender), __privateGet(this, _logger));
272
+ }
273
+ });
274
+ this.socket.on("disconnect", async (reason, description) => {
275
+ __privateGet(this, _logger).info("disconnect", {
276
+ reason,
277
+ description
278
+ });
279
+ if (opts.onDisconnect) {
280
+ await opts.onDisconnect(this.socket, reason, description, __privateGet(this, _logger));
281
+ }
282
+ });
283
+ }
284
+ close() {
285
+ this.socket.close();
286
+ }
287
+ connect() {
288
+ this.socket.connect();
289
+ }
290
+ get send() {
291
+ return __privateGet(this, _sender).send.bind(__privateGet(this, _sender));
292
+ }
293
+ get sendWithAck() {
294
+ return __privateGet(this, _sender).sendWithAck.bind(__privateGet(this, _sender));
295
+ }
296
+ };
297
+ _sender = new WeakMap();
298
+ _handler = new WeakMap();
299
+ _logger = new WeakMap();
300
+ __name(_ZodSocketConnection, "ZodSocketConnection");
301
+ var ZodSocketConnection = _ZodSocketConnection;
302
+
303
+ export { ZodSocketConnection, ZodSocketMessageHandler, ZodSocketMessageSender };
304
+ //# sourceMappingURL=out.js.map
305
+ //# sourceMappingURL=zodSocket.mjs.map