@tthr/server 0.0.5 → 0.0.6

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/index.d.ts CHANGED
@@ -12,33 +12,58 @@ export interface AuthContext {
12
12
  claims: Record<string, unknown>;
13
13
  }
14
14
  /**
15
- * Database client type - represents the generated db object
15
+ * Table operations interface
16
16
  */
17
- export type DatabaseClient = Record<string, {
18
- findMany: (options?: unknown) => Promise<unknown[]>;
19
- findFirst: (options?: unknown) => Promise<unknown | null>;
20
- findUnique: (options?: unknown) => Promise<unknown | null>;
21
- findById: (id: unknown) => Promise<unknown | null>;
22
- count: (options?: unknown) => Promise<number>;
23
- insert: (data: unknown) => Promise<unknown>;
24
- insertMany: (data: unknown[]) => Promise<unknown[]>;
17
+ export interface TableOperations<T = unknown> {
18
+ findMany: (options?: {
19
+ where?: Partial<T>;
20
+ orderBy?: Partial<Record<keyof T, 'asc' | 'desc'>>;
21
+ limit?: number;
22
+ offset?: number;
23
+ }) => Promise<T[]>;
24
+ findFirst: (options?: {
25
+ where?: Partial<T>;
26
+ orderBy?: Partial<Record<keyof T, 'asc' | 'desc'>>;
27
+ }) => Promise<T | null>;
28
+ findUnique: (options?: {
29
+ where?: Partial<T>;
30
+ }) => Promise<T | null>;
31
+ findById: (id: unknown) => Promise<T | null>;
32
+ count: (options?: {
33
+ where?: Partial<T>;
34
+ }) => Promise<number>;
35
+ insert: (data: T) => Promise<T>;
36
+ insertMany: (data: T[]) => Promise<T[]>;
25
37
  create: (options: {
26
- data: unknown;
27
- }) => Promise<unknown>;
38
+ data: T;
39
+ }) => Promise<T>;
28
40
  update: (options: {
29
- where: unknown;
30
- data: unknown;
41
+ where: Partial<T>;
42
+ data: Partial<T>;
31
43
  }) => Promise<number>;
32
44
  upsert: (options: {
33
- where: unknown;
34
- create: unknown;
35
- update: unknown;
36
- }) => Promise<unknown>;
45
+ where: Partial<T>;
46
+ create: T;
47
+ update: Partial<T>;
48
+ }) => Promise<T>;
37
49
  delete: (options: {
38
- where: unknown;
50
+ where: Partial<T>;
39
51
  }) => Promise<number>;
40
52
  deleteById: (id: unknown) => Promise<boolean>;
41
- }>;
53
+ }
54
+ /**
55
+ * Database client type - represents the generated db object
56
+ * Can be used with a schema type for full type safety:
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * import type { Schema } from '~/tether/_generated/db';
61
+ * type DB = DatabaseClient<Schema>;
62
+ * ```
63
+ */
64
+ export type DatabaseClient<TSchema = Record<string, unknown>> = {
65
+ [K in keyof TSchema]: TableOperations<TSchema[K]>;
66
+ };
42
67
  /**
43
68
  * Tether context for actions - provides access to queries, mutations, and env vars
44
69
  */
@@ -71,47 +96,47 @@ export interface ExecutionCtx {
71
96
  /**
72
97
  * Base handler context (without args) for queries/mutations with no arguments
73
98
  */
74
- export interface BaseHandlerContext {
99
+ export interface BaseHandlerContext<TSchema = Record<string, unknown>> {
75
100
  /** Database client for the project */
76
- db: DatabaseClient;
101
+ db: DatabaseClient<TSchema>;
77
102
  /** Execution context with auth info */
78
103
  ctx: ExecutionCtx;
79
104
  }
80
105
  /**
81
106
  * Query/Mutation handler context with typed args
82
107
  */
83
- export type FunctionHandlerContext<TArgs> = TArgs extends void ? BaseHandlerContext : BaseHandlerContext & {
108
+ export type FunctionHandlerContext<TArgs, TSchema = Record<string, unknown>> = TArgs extends void ? BaseHandlerContext<TSchema> : BaseHandlerContext<TSchema> & {
84
109
  args: TArgs;
85
110
  };
86
111
  /**
87
112
  * Action handler context with typed args
88
113
  */
89
- export type ActionHandlerCtx<TArgs> = TArgs extends void ? BaseHandlerContext & {
114
+ export type ActionHandlerCtx<TArgs, TSchema = Record<string, unknown>> = TArgs extends void ? BaseHandlerContext<TSchema> & {
90
115
  tether: TetherContext;
91
- } : BaseHandlerContext & {
116
+ } : BaseHandlerContext<TSchema> & {
92
117
  args: TArgs;
93
118
  tether: TetherContext;
94
119
  };
95
120
  /**
96
121
  * Query function definition
97
122
  */
98
- export interface QueryDefinition<TArgs, TResult> {
123
+ export interface QueryDefinition<TArgs, TResult, TSchema = Record<string, unknown>> {
99
124
  args?: ZodType<TArgs>;
100
- handler: (context: FunctionHandlerContext<TArgs>) => Promise<TResult> | TResult;
125
+ handler: (context: FunctionHandlerContext<TArgs, TSchema>) => Promise<TResult> | TResult;
101
126
  }
102
127
  /**
103
128
  * Mutation function definition
104
129
  */
105
- export interface MutationDefinition<TArgs, TResult> {
130
+ export interface MutationDefinition<TArgs, TResult, TSchema = Record<string, unknown>> {
106
131
  args?: ZodType<TArgs>;
107
- handler: (context: FunctionHandlerContext<TArgs>) => Promise<TResult> | TResult;
132
+ handler: (context: FunctionHandlerContext<TArgs, TSchema>) => Promise<TResult> | TResult;
108
133
  }
109
134
  /**
110
135
  * Action function definition
111
136
  */
112
- export interface ActionDefinition<TArgs, TResult> {
137
+ export interface ActionDefinition<TArgs, TResult, TSchema = Record<string, unknown>> {
113
138
  args?: ZodType<TArgs>;
114
- handler: (context: ActionHandlerCtx<TArgs>) => Promise<TResult> | TResult;
139
+ handler: (context: ActionHandlerCtx<TArgs, TSchema>) => Promise<TResult> | TResult;
115
140
  }
116
141
  /**
117
142
  * Define a query function
@@ -142,7 +167,7 @@ export interface ActionDefinition<TArgs, TResult> {
142
167
  * });
143
168
  * ```
144
169
  */
145
- export declare function query<TArgs = void, TResult = unknown>(definition: QueryDefinition<TArgs, TResult>): QueryDefinition<TArgs, TResult>;
170
+ export declare function query<TArgs = void, TResult = unknown, TSchema = Record<string, unknown>>(definition: QueryDefinition<TArgs, TResult, TSchema>): QueryDefinition<TArgs, TResult, TSchema>;
146
171
  /**
147
172
  * Define a mutation function
148
173
  *
@@ -171,7 +196,7 @@ export declare function query<TArgs = void, TResult = unknown>(definition: Query
171
196
  * });
172
197
  * ```
173
198
  */
174
- export declare function mutation<TArgs = void, TResult = unknown>(definition: MutationDefinition<TArgs, TResult>): MutationDefinition<TArgs, TResult>;
199
+ export declare function mutation<TArgs = void, TResult = unknown, TSchema = Record<string, unknown>>(definition: MutationDefinition<TArgs, TResult, TSchema>): MutationDefinition<TArgs, TResult, TSchema>;
175
200
  /**
176
201
  * Define an action function
177
202
  *
@@ -203,17 +228,26 @@ export declare function mutation<TArgs = void, TResult = unknown>(definition: Mu
203
228
  * });
204
229
  * ```
205
230
  */
206
- export declare function action<TArgs = void, TResult = unknown>(definition: ActionDefinition<TArgs, TResult>): ActionDefinition<TArgs, TResult>;
231
+ export declare function action<TArgs = void, TResult = unknown, TSchema = Record<string, unknown>>(definition: ActionDefinition<TArgs, TResult, TSchema>): ActionDefinition<TArgs, TResult, TSchema>;
207
232
  /**
208
233
  * Server-side Tether client for direct function calls
209
234
  */
210
235
  export interface ServerClientOptions {
211
236
  url: string;
237
+ /** Project ID */
238
+ projectId: string;
239
+ /** Environment name (defaults to 'production') */
240
+ environment?: string;
241
+ /** API key for authentication */
212
242
  apiKey: string;
213
243
  }
214
244
  export declare class TetherServerClient {
215
245
  private options;
216
246
  constructor(options: ServerClientOptions);
247
+ /**
248
+ * Get the base URL for API calls
249
+ */
250
+ private getBaseUrl;
217
251
  /**
218
252
  * Execute a query function
219
253
  */
@@ -235,6 +269,8 @@ export interface TetherRuntimeConfig {
235
269
  url: string;
236
270
  /** Project ID */
237
271
  projectId: string;
272
+ /** Environment name (defaults to 'production') */
273
+ environment?: string;
238
274
  /** API key or auth token */
239
275
  apiKey?: string;
240
276
  /** Auth token function (for user context) */
@@ -295,4 +331,128 @@ export declare function executeWithLogging<TResult>(functionName: string, fn: ()
295
331
  */
296
332
  export declare function flushTetherLogs(): Promise<void>;
297
333
  export { z };
334
+ /**
335
+ * Cron trigger message from Tether server
336
+ */
337
+ export interface CronTriggerMessage {
338
+ type: 'cron_trigger';
339
+ executionId: string;
340
+ cronId: string;
341
+ functionName: string;
342
+ functionType: 'query' | 'mutation' | 'action';
343
+ args?: unknown;
344
+ }
345
+ /**
346
+ * Cron handler function type
347
+ */
348
+ export type CronHandler = (functionName: string, args: unknown) => Promise<{
349
+ success: boolean;
350
+ result?: unknown;
351
+ error?: string;
352
+ }>;
353
+ /**
354
+ * Options for TetherCronConnection
355
+ */
356
+ export interface TetherCronConnectionOptions {
357
+ /** Tether API URL */
358
+ url: string;
359
+ /** Project ID */
360
+ projectId: string;
361
+ /** Environment name (defaults to 'production') */
362
+ environment?: string;
363
+ /** API key for authentication */
364
+ apiKey: string;
365
+ /** Handler function for cron triggers */
366
+ onCronTrigger: CronHandler;
367
+ /** Called when connection is established */
368
+ onConnected?: () => void;
369
+ /** Called when connection is closed */
370
+ onDisconnected?: () => void;
371
+ /** Called on connection error */
372
+ onError?: (error: Error) => void;
373
+ }
374
+ /**
375
+ * Server-side WebSocket connection for receiving cron triggers.
376
+ *
377
+ * This connects to Tether with `?type=server` to identify as a server connection.
378
+ * Only server connections receive cron triggers - client connections do not.
379
+ *
380
+ * @example
381
+ * ```ts
382
+ * import { TetherCronConnection } from '@tthr/server';
383
+ *
384
+ * const cronConnection = new TetherCronConnection({
385
+ * url: process.env.TETHER_URL!,
386
+ * projectId: process.env.TETHER_PROJECT_ID!,
387
+ * apiKey: process.env.TETHER_API_KEY!,
388
+ * onCronTrigger: async (functionName, args) => {
389
+ * // Execute your function here
390
+ * try {
391
+ * const result = await executeFunction(functionName, args);
392
+ * return { success: true, result };
393
+ * } catch (error) {
394
+ * return { success: false, error: error.message };
395
+ * }
396
+ * },
397
+ * });
398
+ *
399
+ * await cronConnection.connect();
400
+ * ```
401
+ */
402
+ export declare class TetherCronConnection {
403
+ private options;
404
+ private ws;
405
+ private connectionId;
406
+ private reconnectAttempts;
407
+ private maxReconnectAttempts;
408
+ private reconnectDelay;
409
+ private isConnecting;
410
+ private shouldReconnect;
411
+ private heartbeatInterval;
412
+ private heartbeatTimeout;
413
+ private heartbeatTimer;
414
+ private heartbeatTimeoutTimer;
415
+ private awaitingPong;
416
+ constructor(options: TetherCronConnectionOptions);
417
+ /**
418
+ * Get the WebSocket URL with server type parameter
419
+ */
420
+ private getWsUrl;
421
+ /**
422
+ * Connect to Tether server
423
+ */
424
+ connect(): Promise<void>;
425
+ /**
426
+ * Handle incoming WebSocket message
427
+ */
428
+ private handleMessage;
429
+ /**
430
+ * Handle a cron trigger message
431
+ */
432
+ private handleCronTrigger;
433
+ /**
434
+ * Report execution result back to Tether
435
+ */
436
+ private reportExecution;
437
+ /**
438
+ * Start heartbeat timer
439
+ */
440
+ private startHeartbeat;
441
+ /**
442
+ * Stop heartbeat timer
443
+ */
444
+ private stopHeartbeat;
445
+ /**
446
+ * Handle reconnection
447
+ */
448
+ private handleReconnect;
449
+ /**
450
+ * Disconnect from Tether
451
+ */
452
+ disconnect(): void;
453
+ /**
454
+ * Check if connected
455
+ */
456
+ get isConnected(): boolean;
457
+ }
298
458
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE;IAC1C,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC1D,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC3D,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACnD,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,MAAM,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5F,MAAM,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjE;;;;OAIG;IACH,QAAQ,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAEpE;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,EAAE,EAAE,cAAc,CAAC;IACnB,uCAAuC;IACvC,GAAG,EAAE,YAAY,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,KAAK,IAAI,KAAK,SAAS,IAAI,GAC1D,kBAAkB,GAClB,kBAAkB,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,KAAK,IAAI,KAAK,SAAS,IAAI,GACpD,kBAAkB,GAAG;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GAC9C,kBAAkB,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK,EAAE,OAAO;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACjF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,KAAK,EAAE,OAAO;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACjF;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,KAAK,EAAE,OAAO;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC3E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,GAAG,OAAO,EACnD,UAAU,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,GAC1C,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAEjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,QAAQ,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,GAAG,OAAO,EACtD,UAAU,EAAE,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,GAC7C,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAEpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,MAAM,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,GAAG,OAAO,EACpD,UAAU,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAC3C,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAElC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAsB;gBAEzB,OAAO,EAAE,mBAAmB;IAIxC;;OAEG;IACG,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAmBlE;;OAEG;IACG,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAkBtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAE7E;AAkBD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qBAAqB;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,mEAAmE;IACnE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAOnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,mBAAmB,GAAG,IAAI,CAE7D;AAkID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAC9C,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GACnC,OAAO,CAAC,OAAO,CAAC,CA6BlB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAMrD;AAGD,OAAO,EAAE,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -106,11 +106,23 @@ export class TetherServerClient {
106
106
  constructor(options) {
107
107
  this.options = options;
108
108
  }
109
+ /**
110
+ * Get the base URL for API calls
111
+ */
112
+ getBaseUrl() {
113
+ const base = this.options.url.replace(/\/$/, '');
114
+ const env = this.options.environment;
115
+ // Only include /env/{env} if not production (production is the default)
116
+ if (env && env !== 'production') {
117
+ return `${base}/api/v1/projects/${this.options.projectId}/env/${env}`;
118
+ }
119
+ return `${base}/api/v1/projects/${this.options.projectId}`;
120
+ }
109
121
  /**
110
122
  * Execute a query function
111
123
  */
112
124
  async query(name, args) {
113
- const response = await fetch(`${this.options.url}/api/v1/query`, {
125
+ const response = await fetch(`${this.getBaseUrl()}/query`, {
114
126
  method: 'POST',
115
127
  headers: {
116
128
  'Content-Type': 'application/json',
@@ -129,7 +141,7 @@ export class TetherServerClient {
129
141
  * Execute a mutation function
130
142
  */
131
143
  async mutation(name, args) {
132
- const response = await fetch(`${this.options.url}/api/v1/mutation`, {
144
+ const response = await fetch(`${this.getBaseUrl()}/mutation`, {
133
145
  method: 'POST',
134
146
  headers: {
135
147
  'Content-Type': 'application/json',
@@ -197,7 +209,13 @@ async function flushLogs() {
197
209
  const token = typeof _runtimeConfig.authToken === 'function'
198
210
  ? await _runtimeConfig.authToken()
199
211
  : _runtimeConfig.authToken ?? _runtimeConfig.apiKey;
200
- const response = await fetch(`${_runtimeConfig.url}/api/v1/projects/${_runtimeConfig.projectId}/logs`, {
212
+ // Build URL with optional environment
213
+ const base = _runtimeConfig.url.replace(/\/$/, '');
214
+ const env = _runtimeConfig.environment;
215
+ const baseUrl = env && env !== 'production'
216
+ ? `${base}/api/v1/projects/${_runtimeConfig.projectId}/env/${env}`
217
+ : `${base}/api/v1/projects/${_runtimeConfig.projectId}`;
218
+ const response = await fetch(`${baseUrl}/logs`, {
201
219
  method: 'POST',
202
220
  headers: {
203
221
  'Content-Type': 'application/json',
@@ -356,4 +374,283 @@ export async function flushTetherLogs() {
356
374
  }
357
375
  // Re-export zod for convenience
358
376
  export { z };
377
+ /**
378
+ * Server-side WebSocket connection for receiving cron triggers.
379
+ *
380
+ * This connects to Tether with `?type=server` to identify as a server connection.
381
+ * Only server connections receive cron triggers - client connections do not.
382
+ *
383
+ * @example
384
+ * ```ts
385
+ * import { TetherCronConnection } from '@tthr/server';
386
+ *
387
+ * const cronConnection = new TetherCronConnection({
388
+ * url: process.env.TETHER_URL!,
389
+ * projectId: process.env.TETHER_PROJECT_ID!,
390
+ * apiKey: process.env.TETHER_API_KEY!,
391
+ * onCronTrigger: async (functionName, args) => {
392
+ * // Execute your function here
393
+ * try {
394
+ * const result = await executeFunction(functionName, args);
395
+ * return { success: true, result };
396
+ * } catch (error) {
397
+ * return { success: false, error: error.message };
398
+ * }
399
+ * },
400
+ * });
401
+ *
402
+ * await cronConnection.connect();
403
+ * ```
404
+ */
405
+ export class TetherCronConnection {
406
+ options;
407
+ ws = null;
408
+ connectionId = null;
409
+ reconnectAttempts = 0;
410
+ maxReconnectAttempts = 10;
411
+ reconnectDelay = 1000;
412
+ isConnecting = false;
413
+ shouldReconnect = true;
414
+ // Heartbeat configuration
415
+ heartbeatInterval = 30000; // 30 seconds
416
+ heartbeatTimeout = 10000; // 10 seconds to receive pong
417
+ heartbeatTimer = null;
418
+ heartbeatTimeoutTimer = null;
419
+ awaitingPong = false;
420
+ constructor(options) {
421
+ this.options = options;
422
+ }
423
+ /**
424
+ * Get the WebSocket URL with server type parameter
425
+ */
426
+ getWsUrl() {
427
+ const base = this.options.url
428
+ .replace('https://', 'wss://')
429
+ .replace('http://', 'ws://')
430
+ .replace(/\/$/, '');
431
+ const env = this.options.environment;
432
+ let wsPath;
433
+ if (env && env !== 'production') {
434
+ wsPath = `${base}/ws/${this.options.projectId}/${env}`;
435
+ }
436
+ else {
437
+ wsPath = `${base}/ws/${this.options.projectId}`;
438
+ }
439
+ // Add type=server to identify as server connection and token for auth
440
+ return `${wsPath}?type=server&token=${encodeURIComponent(this.options.apiKey)}`;
441
+ }
442
+ /**
443
+ * Connect to Tether server
444
+ */
445
+ async connect() {
446
+ if (this.ws?.readyState === WebSocket.OPEN) {
447
+ return;
448
+ }
449
+ if (this.isConnecting) {
450
+ return;
451
+ }
452
+ this.isConnecting = true;
453
+ this.shouldReconnect = true;
454
+ return new Promise((resolve, reject) => {
455
+ try {
456
+ const url = this.getWsUrl();
457
+ // Use ws package for Node.js if available, otherwise use global WebSocket
458
+ const WebSocketImpl = typeof WebSocket !== 'undefined' ? WebSocket : require('ws');
459
+ this.ws = new WebSocketImpl(url);
460
+ this.ws.onopen = () => {
461
+ this.reconnectAttempts = 0;
462
+ console.log('[Tether Cron] WebSocket connected');
463
+ };
464
+ this.ws.onmessage = async (event) => {
465
+ const data = typeof event.data === 'string' ? event.data : event.data.toString();
466
+ await this.handleMessage(data, resolve);
467
+ };
468
+ this.ws.onerror = (error) => {
469
+ const err = error instanceof Error ? error : new Error('WebSocket error');
470
+ console.error('[Tether Cron] WebSocket error:', err.message);
471
+ this.isConnecting = false;
472
+ this.options.onError?.(err);
473
+ reject(err);
474
+ };
475
+ this.ws.onclose = () => {
476
+ this.connectionId = null;
477
+ this.isConnecting = false;
478
+ this.stopHeartbeat();
479
+ console.log('[Tether Cron] WebSocket disconnected');
480
+ this.options.onDisconnected?.();
481
+ this.handleReconnect();
482
+ };
483
+ }
484
+ catch (error) {
485
+ this.isConnecting = false;
486
+ reject(error);
487
+ }
488
+ });
489
+ }
490
+ /**
491
+ * Handle incoming WebSocket message
492
+ */
493
+ async handleMessage(data, resolveConnect) {
494
+ try {
495
+ const message = JSON.parse(data);
496
+ switch (message.type) {
497
+ case 'connected':
498
+ this.connectionId = message.connection_id ?? null;
499
+ this.isConnecting = false;
500
+ this.startHeartbeat();
501
+ console.log(`[Tether Cron] Connected with ID: ${this.connectionId}`);
502
+ this.options.onConnected?.();
503
+ resolveConnect?.();
504
+ break;
505
+ case 'cron_trigger':
506
+ await this.handleCronTrigger(message);
507
+ break;
508
+ case 'pong':
509
+ this.awaitingPong = false;
510
+ if (this.heartbeatTimeoutTimer) {
511
+ clearTimeout(this.heartbeatTimeoutTimer);
512
+ this.heartbeatTimeoutTimer = null;
513
+ }
514
+ break;
515
+ case 'error':
516
+ console.error('[Tether Cron] Server error:', message.error);
517
+ break;
518
+ }
519
+ }
520
+ catch (e) {
521
+ console.error('[Tether Cron] Failed to parse message:', e);
522
+ }
523
+ }
524
+ /**
525
+ * Handle a cron trigger message
526
+ */
527
+ async handleCronTrigger(trigger) {
528
+ console.log(`[Tether Cron] Received trigger for ${trigger.functionName} (execution: ${trigger.executionId})`);
529
+ const startTime = Date.now();
530
+ try {
531
+ // Execute the handler
532
+ const result = await this.options.onCronTrigger(trigger.functionName, trigger.args);
533
+ const durationMs = Date.now() - startTime;
534
+ // Report result back to Tether
535
+ await this.reportExecution(trigger, result, durationMs);
536
+ }
537
+ catch (error) {
538
+ const durationMs = Date.now() - startTime;
539
+ const errorMessage = error instanceof Error ? error.message : String(error);
540
+ console.error(`[Tether Cron] Handler error for ${trigger.functionName}:`, errorMessage);
541
+ // Report failure
542
+ await this.reportExecution(trigger, { success: false, error: errorMessage }, durationMs);
543
+ }
544
+ }
545
+ /**
546
+ * Report execution result back to Tether
547
+ */
548
+ async reportExecution(trigger, result, durationMs) {
549
+ const base = this.options.url.replace(/\/$/, '');
550
+ const env = this.options.environment;
551
+ let apiPath;
552
+ if (env && env !== 'production') {
553
+ apiPath = `${base}/api/v1/projects/${this.options.projectId}/env/${env}`;
554
+ }
555
+ else {
556
+ apiPath = `${base}/api/v1/projects/${this.options.projectId}`;
557
+ }
558
+ const url = `${apiPath}/crons/${trigger.cronId}/executions`;
559
+ try {
560
+ const response = await fetch(url, {
561
+ method: 'POST',
562
+ headers: {
563
+ 'Content-Type': 'application/json',
564
+ 'Authorization': `Bearer ${this.options.apiKey}`,
565
+ },
566
+ body: JSON.stringify({
567
+ executionId: trigger.executionId,
568
+ success: result.success,
569
+ errorMessage: result.error,
570
+ result: result.result,
571
+ durationMs,
572
+ }),
573
+ });
574
+ if (!response.ok) {
575
+ console.error(`[Tether Cron] Failed to report execution: ${response.status} ${response.statusText}`);
576
+ }
577
+ else {
578
+ console.log(`[Tether Cron] Reported execution ${trigger.executionId}: ${result.success ? 'success' : 'failed'}`);
579
+ }
580
+ }
581
+ catch (error) {
582
+ console.error('[Tether Cron] Failed to report execution:', error);
583
+ }
584
+ }
585
+ /**
586
+ * Start heartbeat timer
587
+ */
588
+ startHeartbeat() {
589
+ this.stopHeartbeat();
590
+ this.heartbeatTimer = setInterval(() => {
591
+ if (this.ws?.readyState === WebSocket.OPEN) {
592
+ this.awaitingPong = true;
593
+ this.ws.send(JSON.stringify({ type: 'ping' }));
594
+ this.heartbeatTimeoutTimer = setTimeout(() => {
595
+ if (this.awaitingPong) {
596
+ console.warn('[Tether Cron] Heartbeat timeout - forcing reconnect');
597
+ this.ws?.close();
598
+ }
599
+ }, this.heartbeatTimeout);
600
+ }
601
+ }, this.heartbeatInterval);
602
+ }
603
+ /**
604
+ * Stop heartbeat timer
605
+ */
606
+ stopHeartbeat() {
607
+ if (this.heartbeatTimer) {
608
+ clearInterval(this.heartbeatTimer);
609
+ this.heartbeatTimer = null;
610
+ }
611
+ if (this.heartbeatTimeoutTimer) {
612
+ clearTimeout(this.heartbeatTimeoutTimer);
613
+ this.heartbeatTimeoutTimer = null;
614
+ }
615
+ this.awaitingPong = false;
616
+ }
617
+ /**
618
+ * Handle reconnection
619
+ */
620
+ handleReconnect() {
621
+ if (!this.shouldReconnect) {
622
+ return;
623
+ }
624
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
625
+ console.error('[Tether Cron] Max reconnection attempts reached');
626
+ return;
627
+ }
628
+ this.reconnectAttempts++;
629
+ const delay = Math.min(this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1), 30000);
630
+ console.log(`[Tether Cron] Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
631
+ setTimeout(() => {
632
+ this.connect().catch((error) => {
633
+ console.error('[Tether Cron] Reconnection failed:', error);
634
+ });
635
+ }, delay);
636
+ }
637
+ /**
638
+ * Disconnect from Tether
639
+ */
640
+ disconnect() {
641
+ this.shouldReconnect = false;
642
+ this.stopHeartbeat();
643
+ if (this.ws) {
644
+ this.ws.close();
645
+ this.ws = null;
646
+ }
647
+ this.connectionId = null;
648
+ }
649
+ /**
650
+ * Check if connected
651
+ */
652
+ get isConnected() {
653
+ return this.ws?.readyState === WebSocket.OPEN;
654
+ }
655
+ }
359
656
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AA6GtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,KAAK,CACnB,UAA2C;IAE3C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,QAAQ,CACtB,UAA8C;IAE9C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,MAAM,CACpB,UAA4C;IAE5C,OAAO,UAAU,CAAC;AACpB,CAAC;AAUD,MAAM,OAAO,kBAAkB;IACrB,OAAO,CAAsB;IAErC,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAc,IAAY,EAAE,IAAc;QACnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,eAAe,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;aACjD;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SAC/C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,IAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAc,IAAY,EAAE,IAAc;QACtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,kBAAkB,EAAE;YAClE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;aACjD;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SAC/C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,iBAAiB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,IAAS,CAAC;IAC1B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAsCD,0BAA0B;AAC1B,IAAI,cAAc,GAA+B,IAAI,CAAC;AACtD,IAAI,UAAU,GAAe,EAAE,CAAC;AAChC,IAAI,WAAW,GAAyC,IAAI,CAAC;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA2B;IAC3D,cAAc,GAAG;QACf,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACpD,SAAS,EAAE,EAAE;QACb,aAAa,EAAE,IAAI;QACnB,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS;IACtB,IAAI,CAAC,cAAc,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEvD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,OAAO,cAAc,CAAC,SAAS,KAAK,UAAU;YAC1D,CAAC,CAAC,MAAM,cAAc,CAAC,SAAS,EAAE;YAClC,CAAC,CAAC,cAAc,CAAC,SAAS,IAAI,cAAc,CAAC,MAAM,CAAC;QAEtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,cAAc,CAAC,GAAG,oBAAoB,cAAc,CAAC,SAAS,OAAO,EACxE;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzD;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;SAC/B,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,+DAA+D;YAC/D,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;gBAC7B,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yBAAyB;QACzB,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YAC7B,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa;IACpB,IAAI,WAAW;QAAE,OAAO;IAExB,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,WAAW,GAAG,IAAI,CAAC;QACnB,SAAS,EAAE,CAAC;IACd,CAAC,EAAE,cAAc,EAAE,aAAa,IAAI,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,KAAe;IAC7B,IAAI,CAAC,cAAc,EAAE,aAAa;QAAE,OAAO;IAE3C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEvB,8BAA8B;IAC9B,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1D,SAAS,EAAE,CAAC;IACd,CAAC;SAAM,CAAC;QACN,aAAa,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,YAAoB,EACpB,WAAmB;IAEnB,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC;IAE3C,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE;QAChD,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;YAC5B,8BAA8B;YAC9B,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAEhC,qBAAqB;YACrB,MAAM,OAAO,GAAG,IAAI;iBACjB,GAAG,CAAC,GAAG,CAAC,EAAE,CACT,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CACpD;iBACA,IAAI,CAAC,GAAG,CAAC,CAAC;YAEb,oDAAoD;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;gBAC/E,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACT,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;oBACf,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,SAAS,CAAC;YAEhB,MAAM,CAAC;gBACL,QAAQ,EAAE,YAAY;gBACtB,KAAK;gBACL,OAAO;gBACP,IAAI;gBACJ,YAAY,EAAE,WAAW;gBACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,4CAA4C;IAC5C,OAAO,IAAI,KAAK,CAAC,eAAe,EAAE;QAChC,GAAG,CAAC,MAAM,EAAE,IAAI;YACd,IAAI,IAAI,KAAK,KAAK;gBAAE,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,IAAI,KAAK,MAAM;gBAAE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,IAAI,KAAK,MAAM;gBAAE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,IAAI,KAAK,OAAO;gBAAE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,IAAI,KAAK,OAAO;gBAAE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;YACnD,OAAQ,MAAsD,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC;KACF,CAAY,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB;IAC1B,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,EAAoC;IAEpC,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAG,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAErE,yBAAyB;IACzB,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC;IAE3C,IAAI,CAAC;QACH,yBAAyB;QACzB,UAAU,CAAC,OAAO,GAAG,aAAa,CAAC;QAEnC,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAE1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAgB;QAChB,aAAa,CAAC,KAAK,CACjB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACtD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAC;QACF,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,2BAA2B;QAC3B,UAAU,CAAC,OAAO,GAAG,eAAe,CAAC;QAErC,iEAAiE;QACjE,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1B,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,MAAM,SAAS,EAAE,CAAC;AACpB,CAAC;AAED,gCAAgC;AAChC,OAAO,EAAE,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tthr/server",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "Tether server SDK for Node.js/Bun/Deno",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -14,15 +14,18 @@
14
14
  "files": [
15
15
  "dist"
16
16
  ],
17
- "scripts": {
18
- "build": "tsc",
19
- "dev": "tsc --watch",
20
- "typecheck": "tsc --noEmit"
21
- },
22
17
  "dependencies": {
18
+ "ws": "^8.18.0",
23
19
  "zod": "^3.24.0"
24
20
  },
25
21
  "devDependencies": {
22
+ "@types/node": "^22.0.0",
23
+ "@types/ws": "^8.5.13",
26
24
  "typescript": "^5.7.2"
25
+ },
26
+ "scripts": {
27
+ "build": "tsc",
28
+ "dev": "tsc --watch",
29
+ "typecheck": "tsc --noEmit"
27
30
  }
28
- }
31
+ }