@railtownai/railengine-ingest 0.0.2 → 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/README.md CHANGED
@@ -1,516 +1,41 @@
1
- # @railtownai/railengine-ingest
2
-
3
- JavaScript/TypeScript SDK for Railtown AI Rail Engine - Ingestion package. This package provides a simple interface for publishing data to Rail Engine and handling webhook events.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install @railtownai/railengine-ingest
9
- ```
10
-
11
- ## Requirements
12
-
13
- - Node.js 20+
14
- - TypeScript 5.0+ (optional, but recommended)
15
-
16
- ## Quick Start
17
-
18
- ### Basic Usage
19
-
20
- ```typescript
21
- import { RailEngineIngest } from "@railtownai/railengine-ingest";
22
- import { Buffer } from "buffer";
23
-
24
- // Create ENGINE_TOKEN (get this from your Rail Engine dashboard)
25
- const tokenData = {
26
- IngestionUrl: "https://eng123.railtownlogs.com",
27
- IngestionApiToken: "your-auth-token",
28
- EngineId: "your-engine-id"
29
- };
30
- const engineToken = Buffer.from(JSON.stringify(tokenData)).toString("base64");
31
-
32
- // Initialize client
33
- const client = new RailEngineIngest({ engineToken });
34
-
35
- // Send data
36
- await client.upsert({
37
- EventId: "guid",
38
- EngineId: client.engineId,
39
- ProjectId: "project-id",
40
- Body: JSON.stringify({ title: "My Document", content: "..." }),
41
- CustomerKey: "doc-123" // Optional
42
- });
43
- ```
44
-
45
- ### Using Environment Variables
46
-
47
- ```typescript
48
- import { RailEngineIngest } from "@railtownai/railengine-ingest";
49
-
50
- // ENGINE_TOKEN is read from environment variable automatically
51
- const client = new RailEngineIngest();
52
-
53
- await client.upsert({
54
- EventId: "guid",
55
- EngineId: client.engineId,
56
- ProjectId: "project-id",
57
- Body: JSON.stringify({ title: "My Document" })
58
- });
59
- ```
60
-
61
- ## ENGINE_TOKEN Configuration
62
-
63
- The `ENGINE_TOKEN` is a base64-encoded JSON string containing your ingestion configuration. You can create it like this:
64
-
65
- ```typescript
66
- import { Buffer } from "buffer";
67
-
68
- const tokenData = {
69
- IngestionUrl: "https://eng123.railtownlogs.com",
70
- IngestionApiToken: "your-auth-token-here",
71
- EngineId: "your-engine-guid-here"
72
- };
73
-
74
- const engineToken = Buffer.from(JSON.stringify(tokenData)).toString("base64");
75
- ```
76
-
77
- ### Setting Environment Variables
78
-
79
- #### Windows (PowerShell)
80
-
81
- ```powershell
82
- $env:ENGINE_TOKEN="<base64-encoded-token>"
83
- ```
84
-
85
- #### Windows (Command Prompt)
86
-
87
- ```cmd
88
- set ENGINE_TOKEN=<base64-encoded-token>
89
- ```
90
-
91
- #### macOS/Linux
92
-
93
- ```bash
94
- export ENGINE_TOKEN="<base64-encoded-token>"
95
- ```
96
-
97
- #### .env file
98
-
99
- Create a `.env` file in your project root:
100
-
101
- ```
102
- ENGINE_TOKEN=<base64-encoded-token>
103
- ```
104
-
105
- Then use a package like `dotenv` to load it:
106
-
107
- ```typescript
108
- import "dotenv/config";
109
- import { RailEngineIngest } from "@railtownai/railengine-ingest";
110
-
111
- const client = new RailEngineIngest(); // Reads from process.env.ENGINE_TOKEN
112
- ```
113
-
114
- ## Zod Schema Support
115
-
116
- You can provide a Zod schema during client initialization to automatically validate ingested data:
117
-
118
- ```typescript
119
- import { z } from "zod";
120
- import { RailEngineIngest } from "@railtownai/railengine-ingest";
121
- import { Buffer } from "buffer";
122
-
123
- const FoodDiaryItemSchema = z.object({
124
- food_name: z.string(),
125
- calories: z.number(),
126
- carbs: z.number(),
127
- proteins: z.number(),
128
- fats: z.number()
129
- });
130
-
131
- type FoodDiaryItem = z.infer<typeof FoodDiaryItemSchema>;
132
-
133
- // Initialize with schema
134
- const token = Buffer.from(
135
- JSON.stringify({
136
- IngestionUrl: "https://eng123.railtownlogs.com",
137
- IngestionApiToken: "your-auth-token",
138
- EngineId: "your-engine-id"
139
- })
140
- ).toString("base64");
141
-
142
- const client = new RailEngineIngest({
143
- engineToken: token,
144
- schema: FoodDiaryItemSchema
145
- });
146
-
147
- // Ingest using validated object
148
- const item: FoodDiaryItem = {
149
- food_name: "Apple",
150
- calories: 95,
151
- carbs: 25.0,
152
- proteins: 0.5,
153
- fats: 0.3
154
- };
155
-
156
- await client.upsert(item); // Automatically validates and serializes
157
- ```
158
-
159
- ## Webhook Handling
160
-
161
- The ingestion package provides webhook handling capabilities for receiving and processing webhook events from Rail Engine's Publishing cylinder.
162
-
163
- ### Basic Webhook Handler
164
-
165
- ```typescript
166
- import { z } from "zod";
167
- import { WebhookHandler } from "@railtownai/railengine-ingest";
168
-
169
- const FoodDiaryItemSchema = z.object({
170
- food_name: z.string(),
171
- calories: z.number()
172
- });
173
-
174
- // Create handler with schema
175
- const handler = new WebhookHandler({ schema: FoodDiaryItemSchema });
176
-
177
- // Parse webhook payload (list of events)
178
- const events = handler.parse(await request.json());
179
-
180
- // Process each event
181
- for (const event of events) {
182
- console.log(`Event ID: ${event.eventId}`);
183
- console.log(`Engine ID: ${event.engineId}`);
184
- console.log(`Project ID: ${event.projectId}`);
185
-
186
- // Access deserialized body (FoodDiaryItem)
187
- const item = event.body;
188
- console.log(`Food: ${item.food_name}, Calories: ${item.calories}`);
189
- }
190
- ```
191
-
192
- ### Using Client's Webhook Handler
193
-
194
- If your client was initialized with a schema, you can get a pre-configured webhook handler:
195
-
196
- ```typescript
197
- import { z } from "zod";
198
- import { RailEngineIngest } from "@railtownai/railengine-ingest";
199
- import { Buffer } from "buffer";
200
-
201
- const FoodDiaryItemSchema = z.object({
202
- food_name: z.string(),
203
- calories: z.number()
204
- });
205
-
206
- const token = Buffer.from(
207
- JSON.stringify({
208
- IngestionUrl: "https://eng123.railtownlogs.com",
209
- IngestionApiToken: "your-auth-token",
210
- EngineId: "your-engine-id"
211
- })
212
- ).toString("base64");
213
-
214
- // Initialize client with schema
215
- const client = new RailEngineIngest({
216
- engineToken: token,
217
- schema: FoodDiaryItemSchema
218
- });
219
-
220
- // Get handler (automatically uses FoodDiaryItemSchema)
221
- const handler = client.getWebhookHandler();
222
-
223
- // Parse webhook payload
224
- const events = handler.parse(await request.json());
225
-
226
- // events[0].body is a FoodDiaryItem
227
- ```
228
-
229
- ### Express.js Integration Example
230
-
231
- ```typescript
232
- import express from "express";
233
- import { z } from "zod";
234
- import { RailEngineIngest } from "@railtownai/railengine-ingest";
235
- import { Buffer } from "buffer";
236
-
237
- const app = express();
238
-
239
- const FoodDiaryItemSchema = z.object({
240
- food_name: z.string(),
241
- calories: z.number(),
242
- carbs: z.number(),
243
- proteins: z.number(),
244
- fats: z.number()
245
- });
246
-
247
- const token = Buffer.from(
248
- JSON.stringify({
249
- IngestionUrl: "https://eng123.railtownlogs.com",
250
- IngestionApiToken: "your-auth-token",
251
- EngineId: "your-engine-id"
252
- })
253
- ).toString("base64");
254
-
255
- const client = new RailEngineIngest({
256
- engineToken: token,
257
- schema: FoodDiaryItemSchema
258
- });
259
-
260
- const handler = client.getWebhookHandler();
261
-
262
- app.post("/webhook", express.json(), async (req, res) => {
263
- try {
264
- // Parse webhook payload (list of events)
265
- const events = handler.parse(req.body);
266
-
267
- // Process each event
268
- for (const event of events) {
269
- // Access metadata
270
- console.log(`Event ID: ${event.eventId}`);
271
- console.log(`Engine ID: ${event.engineId}`);
272
- console.log(`Project ID: ${event.projectId}`);
273
-
274
- // Access deserialized body (FoodDiaryItem)
275
- const item = event.body;
276
- console.log(`Food: ${item.food_name}, Calories: ${item.calories}`);
277
- }
278
-
279
- res.json({ status: "ok" });
280
- } catch (error) {
281
- console.error("Webhook processing error:", error);
282
- res.status(400).json({ error: "Invalid webhook payload" });
283
- }
284
- });
285
-
286
- app.listen(3000);
287
- ```
288
-
289
- ### Manual Deserialization
290
-
291
- You can also deserialize webhook payloads manually:
292
-
293
- ```typescript
294
- import { WebhookPublishingPayload, WebhookPublishingPayloadHelper } from "@railtownai/railengine-ingest";
295
- import { z } from "zod";
296
-
297
- const FoodDiaryItemSchema = z.object({
298
- food_name: z.string(),
299
- calories: z.number()
300
- });
301
-
302
- // Parse raw payload
303
- const payload = req.body[0] as WebhookPublishingPayload; // First event
304
-
305
- // Deserialize body manually
306
- const item = WebhookPublishingPayloadHelper.getBodyAs(payload, FoodDiaryItemSchema);
307
- console.log(`Food: ${item.food_name}, Calories: ${item.calories}`);
308
- ```
309
-
310
- ## API Reference
311
-
312
- ### RailEngineIngest
313
-
314
- Main client class for ingesting data to Rail Engine.
315
-
316
- #### Constructor
317
-
318
- ```typescript
319
- new RailEngineIngest(options?: RailEngineIngestOptions<T>)
320
- ```
321
-
322
- **Options:**
323
-
324
- - `engineToken?: string` - Base64-encoded ENGINE_TOKEN. If not provided, reads from `ENGINE_TOKEN` environment variable.
325
- - `schema?: z.ZodSchema<T>` - Optional Zod schema for validating ingested data and deserializing webhook bodies.
326
- - `timeout?: number` - Request timeout in milliseconds. Defaults to 30000 (30 seconds).
327
-
328
- **Example:**
329
-
330
- ```typescript
331
- const client = new RailEngineIngest({
332
- engineToken: token,
333
- schema: MySchema,
334
- timeout: 60000
335
- });
336
- ```
337
-
338
- #### Properties
339
-
340
- - `ingestionUrl: string` - Logic App ingestion URL from decoded ENGINE_TOKEN
341
- - `ingestionApiToken: string` - Authentication token for x-rail-auth header
342
- - `engineId: string` - Engine identifier from decoded ENGINE_TOKEN
343
-
344
- #### Methods
345
-
346
- ##### upsert(data)
347
-
348
- Send data to Rail Engine ingestion endpoint.
349
-
350
- ```typescript
351
- await client.upsert(data: T | string | Record<string, unknown>): Promise<Response>
352
- ```
353
-
354
- **Parameters:**
355
-
356
- - `data` - Data to ingest. Can be an object, JSON string, or Zod-validated object (if schema provided).
357
-
358
- **Returns:**
359
-
360
- - `Promise<Response>` - HTTP response from the ingestion endpoint
361
-
362
- **Throws:**
363
-
364
- - `RailtownError` - If the request fails
365
- - `z.ZodError` - If schema validation fails
366
-
367
- **Example:**
368
-
369
- ```typescript
370
- await client.upsert({ name: "test", value: 123 });
371
- ```
372
-
373
- ##### getWebhookHandler()
374
-
375
- Get a webhook handler configured with this client's schema.
376
-
377
- ```typescript
378
- client.getWebhookHandler(): WebhookHandler<T>
379
- ```
380
-
381
- **Returns:**
382
-
383
- - `WebhookHandler<T>` - Webhook handler instance configured with the client's schema (if provided)
384
-
385
- **Example:**
386
-
387
- ```typescript
388
- const handler = client.getWebhookHandler();
389
- const events = handler.parse(webhookPayload);
390
- ```
391
-
392
- ### WebhookHandler
393
-
394
- Generic handler class for parsing webhook events.
395
-
396
- #### Constructor
397
-
398
- ```typescript
399
- new WebhookHandler<T>(options?: { schema?: z.ZodSchema<T> })
400
- ```
401
-
402
- **Options:**
403
-
404
- - `schema?: z.ZodSchema<T>` - Optional Zod schema for deserializing webhook bodies.
405
-
406
- #### Methods
407
-
408
- ##### parse(payload)
409
-
410
- Parse webhook payload into list of WebhookEvent objects.
411
-
412
- ```typescript
413
- handler.parse(payload: WebhookPublishingPayload[] | WebhookPublishingPayload): WebhookEvent<T>[]
414
- ```
415
-
416
- **Parameters:**
417
-
418
- - `payload` - Either a list of webhook payload objects or a single object
419
-
420
- **Returns:**
421
-
422
- - `WebhookEvent<T>[]` - List of WebhookEvent objects
423
-
424
- **Throws:**
425
-
426
- - `Error` - If no schema is provided
427
- - `z.ZodError` - If body JSON doesn't match the schema
428
-
429
- ### WebhookEvent
430
-
431
- Generic wrapper class that combines webhook payload metadata with deserialized body.
432
-
433
- #### Properties
434
-
435
- - `eventId: string` - Event identifier from payload
436
- - `engineId: string` - Engine identifier from payload
437
- - `projectId: string` - Project identifier from payload
438
- - `customerKey?: string` - Customer key from payload (if present)
439
- - `body: T` - Deserialized body as validated object
440
-
441
- ### WebhookPublishingPayload
442
-
443
- TypeScript interface representing the webhook payload structure.
444
-
445
- ```typescript
446
- interface WebhookPublishingPayload {
447
- EventId: string;
448
- EngineId: string;
449
- ProjectId: string;
450
- CustomerKey?: string;
451
- Body: string; // JSON stringified document
452
- }
453
- ```
454
-
455
- ### WebhookPublishingPayloadHelper
456
-
457
- Helper class for working with WebhookPublishingPayload.
458
-
459
- #### Methods
460
-
461
- ##### getBodyAs(payload, schema)
462
-
463
- Deserializes the Body field (JSON string) into a Zod-validated object.
464
-
465
- ```typescript
466
- WebhookPublishingPayloadHelper.getBodyAs<T>(
467
- payload: WebhookPublishingPayload,
468
- schema: z.ZodSchema<T>
469
- ): T
470
- ```
471
-
472
- **Parameters:**
473
-
474
- - `payload` - The webhook payload
475
- - `schema` - Zod schema to validate the Body against
476
-
477
- **Returns:**
478
-
479
- - `T` - Validated object
480
-
481
- **Throws:**
482
-
483
- - `z.ZodError` - If the JSON doesn't match the schema
484
-
485
- ## Error Handling
486
-
487
- The SDK uses custom exception classes for different error scenarios:
488
-
489
- - `RailtownError` - Base error class
490
- - `RailtownUnauthorizedError` - Authentication failed (401)
491
- - `RailtownNotFoundError` - Resource not found (404)
492
- - `RailtownBadRequestError` - Bad request (400)
493
- - `RailtownConflictError` - Conflict (409)
494
- - `RailtownServerError` - Server error (500+)
495
-
496
- **Example:**
497
-
498
- ```typescript
499
- import { RailEngineIngest, RailtownUnauthorizedError, RailtownBadRequestError } from "@railtownai/railengine-ingest";
500
-
501
- try {
502
- await client.upsert(data);
503
- } catch (error) {
504
- if (error instanceof RailtownUnauthorizedError) {
505
- console.error("Authentication failed:", error.message);
506
- } else if (error instanceof RailtownBadRequestError) {
507
- console.error("Invalid request:", error.message);
508
- } else {
509
- console.error("Unexpected error:", error);
510
- }
511
- }
512
- ```
513
-
514
- ## License
515
-
516
- See [LICENSE](../../LICENSE) file for details.
1
+ # @railtownai/railengine-ingest
2
+
3
+ JavaScript/TypeScript SDK for [Railtown AI Rail Engine](https://railengine.ai/) - Ingestion package. This package provides a simple interface for publishing data to Rail Engine and handling webhook events.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @railtownai/railengine-ingest
9
+ ```
10
+
11
+ ## Requirements
12
+
13
+ - Node.js 20+
14
+ - TypeScript 5.0+ (optional, but recommended)
15
+
16
+ ## Quick Start
17
+
18
+ ### Basic Usage
19
+
20
+ ```typescript
21
+ import { RailEngineIngest } from "@railtownai/railengine-ingest";
22
+ import { v4 as uuidv4 } from "uuid";
23
+
24
+ // Initialize client
25
+ // ENGINE_TOKEN is read from environment variable automatically
26
+ const client = new RailEngineIngest();
27
+
28
+ const blogPost = {
29
+ id: uuidv4(),
30
+ title: "My blog post",
31
+ content: "This is my blog post",
32
+ date: new Date().toISOString()
33
+ };
34
+
35
+ // Send data
36
+ await client.upsert(blogPost);
37
+ ```
38
+
39
+ ## License
40
+
41
+ MIT.
package/dist/cjs/index.js CHANGED
@@ -361,6 +361,13 @@ class RailEngineIngest {
361
361
  * @param data - Data to ingest. Can be an object, JSON string, or Zod-validated object (if schema provided).
362
362
  * @param charset - Character encoding for the request. Defaults to "utf-8".
363
363
  * @returns HTTP response from the ingestion endpoint
364
+ *
365
+ * @example
366
+ * ```typescript
367
+ * const client = new RailEngineIngest();
368
+ * const response = await client.upsert({ name: "test", value: 123 });
369
+ * console.log(response);
370
+ * ```
364
371
  * @throws {RailtownError} If the request fails
365
372
  * @throws {z.ZodError} If schema validation fails
366
373
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../shared/dist/esm/index.js","../../src/auth.ts","../../src/models.ts","../../src/webhook.ts","../../src/client.ts"],"sourcesContent":["/**\n * Base error class for all Railtown API errors.\n */\nclass RailtownError extends Error {\n constructor(message, statusCode, responseBody) {\n super(message);\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n this.name = \"RailtownError\";\n Object.setPrototypeOf(this, RailtownError.prototype);\n }\n}\n/**\n * Error thrown when authentication fails (401).\n */\nclass RailtownUnauthorizedError extends RailtownError {\n constructor(message = \"Authentication failed\", responseBody) {\n super(message, 401, responseBody);\n this.name = \"RailtownUnauthorizedError\";\n Object.setPrototypeOf(this, RailtownUnauthorizedError.prototype);\n }\n}\n/**\n * Error thrown when a resource is not found (404).\n */\nclass RailtownNotFoundError extends RailtownError {\n constructor(message = \"Resource not found\", responseBody) {\n super(message, 404, responseBody);\n this.name = \"RailtownNotFoundError\";\n Object.setPrototypeOf(this, RailtownNotFoundError.prototype);\n }\n}\n/**\n * Error thrown when a bad request is made (400).\n */\nclass RailtownBadRequestError extends RailtownError {\n constructor(message = \"Bad request\", responseBody) {\n super(message, 400, responseBody);\n this.name = \"RailtownBadRequestError\";\n Object.setPrototypeOf(this, RailtownBadRequestError.prototype);\n }\n}\n/**\n * Error thrown when a conflict occurs (409).\n */\nclass RailtownConflictError extends RailtownError {\n constructor(message = \"Conflict\", responseBody) {\n super(message, 409, responseBody);\n this.name = \"RailtownConflictError\";\n Object.setPrototypeOf(this, RailtownConflictError.prototype);\n }\n}\n/**\n * Error thrown when a server error occurs (500+).\n */\nclass RailtownServerError extends RailtownError {\n constructor(message = \"Server error\", statusCode = 500, responseBody) {\n super(message, statusCode, responseBody);\n this.name = \"RailtownServerError\";\n Object.setPrototypeOf(this, RailtownServerError.prototype);\n }\n}\n/**\n * Maps HTTP status codes to appropriate Railtown error classes.\n */\nfunction createRailtownError(statusCode, message, responseBody) {\n switch (statusCode) {\n case 401:\n return new RailtownUnauthorizedError(message, responseBody);\n case 404:\n return new RailtownNotFoundError(message, responseBody);\n case 400:\n return new RailtownBadRequestError(message, responseBody);\n case 409:\n return new RailtownConflictError(message, responseBody);\n default:\n if (statusCode >= 500) {\n return new RailtownServerError(message, statusCode, responseBody);\n }\n return new RailtownError(message || `HTTP ${statusCode}`, statusCode, responseBody);\n }\n}\n\n/**\n * Normalizes a URL by ensuring it has a protocol and proper path.\n *\n * @param url - The URL to normalize\n * @param defaultPath - Optional default path to append if no path is present\n * @returns Normalized URL string\n */\nfunction normalizeUrl(url, defaultPath) {\n let normalized = url.trim();\n // Add protocol if missing\n if (!normalized.match(/^https?:\\/\\//)) {\n normalized = `https://${normalized}`;\n }\n // Remove trailing slash\n normalized = normalized.replace(/\\/$/, \"\");\n // Append default path if provided and no path exists\n if (defaultPath && !normalized.match(/\\/[^/]/)) {\n const path = defaultPath.startsWith(\"/\") ? defaultPath : `/${defaultPath}`;\n normalized = `${normalized}${path}`;\n }\n return normalized;\n}\n/**\n * Strips the /api suffix from a URL if present.\n *\n * @param url - The URL to process\n * @returns URL without /api suffix\n */\nfunction stripApiSuffix(url) {\n return url.replace(/\\/api\\/?$/, \"\");\n}\n/**\n * Safely parses a JSON string with error handling.\n *\n * @param jsonString - JSON string to parse\n * @param errorMessage - Optional custom error message prefix\n * @returns Parsed JSON object\n * @throws {Error} If JSON parsing fails\n */\nfunction safeJsonParse(jsonString, errorMessage) {\n try {\n return JSON.parse(jsonString);\n }\n catch (error) {\n const message = errorMessage || \"Failed to parse JSON\";\n throw new Error(`${message}: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Makes an HTTP request with timeout support.\n *\n * @param url - Request URL\n * @param options - Request options\n * @returns Response object\n * @throws {Error} If request fails or times out\n */\nasync function makeHttpRequest(url, options = {}) {\n const { timeout = 30000, signal, ...fetchOptions } = options;\n const controller = new AbortController();\n const timeoutId = timeout > 0 ? setTimeout(() => controller.abort(), timeout) : null;\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n signal: signal || controller.signal\n });\n if (timeoutId)\n clearTimeout(timeoutId);\n return response;\n }\n catch (error) {\n if (timeoutId)\n clearTimeout(timeoutId);\n throw error;\n }\n}\n/**\n * Handles HTTP response errors by creating appropriate RailtownError.\n *\n * @param response - HTTP response object\n * @param defaultMessage - Default error message\n * @returns Never (always throws)\n * @throws {RailtownError} Appropriate error based on status code\n */\nasync function handleHttpError(response, defaultMessage) {\n const responseBody = await getResponseBody(response);\n throw createRailtownError(response.status, defaultMessage, responseBody);\n}\n/**\n * Safely extracts response body as text, returning empty string on error.\n *\n * @param response - HTTP response object\n * @returns Response body as string (empty string if extraction fails)\n */\nasync function getResponseBody(response) {\n return await response.text().catch(() => \"\");\n}\n/**\n * Handles request errors (timeout, network, etc.) with consistent error messages.\n *\n * @param error - Caught error\n * @param timeout - Request timeout in milliseconds\n * @param context - Context description for error message\n * @returns Never (always throws)\n * @throws {RailtownError} If error is a RailtownError\n * @throws {Error} For timeout or other errors\n */\nfunction handleRequestError(error, timeout, context) {\n if (error instanceof RailtownError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new Error(`Request timeout after ${timeout}ms`);\n }\n throw new Error(`${context}: ${error instanceof Error ? error.message : String(error)}`);\n}\n\nexport { RailtownBadRequestError, RailtownConflictError, RailtownError, RailtownNotFoundError, RailtownServerError, RailtownUnauthorizedError, createRailtownError, getResponseBody, handleHttpError, handleRequestError, makeHttpRequest, normalizeUrl, safeJsonParse, stripApiSuffix };\n//# sourceMappingURL=index.js.map\n",null,null,null,null],"names":["z"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../shared/dist/esm/index.js","../../src/auth.ts","../../src/models.ts","../../src/webhook.ts","../../src/client.ts"],"sourcesContent":["/**\n * Base error class for all Railtown API errors.\n */\nclass RailtownError extends Error {\n constructor(message, statusCode, responseBody) {\n super(message);\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n this.name = \"RailtownError\";\n Object.setPrototypeOf(this, RailtownError.prototype);\n }\n}\n/**\n * Error thrown when authentication fails (401).\n */\nclass RailtownUnauthorizedError extends RailtownError {\n constructor(message = \"Authentication failed\", responseBody) {\n super(message, 401, responseBody);\n this.name = \"RailtownUnauthorizedError\";\n Object.setPrototypeOf(this, RailtownUnauthorizedError.prototype);\n }\n}\n/**\n * Error thrown when a resource is not found (404).\n */\nclass RailtownNotFoundError extends RailtownError {\n constructor(message = \"Resource not found\", responseBody) {\n super(message, 404, responseBody);\n this.name = \"RailtownNotFoundError\";\n Object.setPrototypeOf(this, RailtownNotFoundError.prototype);\n }\n}\n/**\n * Error thrown when a bad request is made (400).\n */\nclass RailtownBadRequestError extends RailtownError {\n constructor(message = \"Bad request\", responseBody) {\n super(message, 400, responseBody);\n this.name = \"RailtownBadRequestError\";\n Object.setPrototypeOf(this, RailtownBadRequestError.prototype);\n }\n}\n/**\n * Error thrown when a conflict occurs (409).\n */\nclass RailtownConflictError extends RailtownError {\n constructor(message = \"Conflict\", responseBody) {\n super(message, 409, responseBody);\n this.name = \"RailtownConflictError\";\n Object.setPrototypeOf(this, RailtownConflictError.prototype);\n }\n}\n/**\n * Error thrown when a server error occurs (500+).\n */\nclass RailtownServerError extends RailtownError {\n constructor(message = \"Server error\", statusCode = 500, responseBody) {\n super(message, statusCode, responseBody);\n this.name = \"RailtownServerError\";\n Object.setPrototypeOf(this, RailtownServerError.prototype);\n }\n}\n/**\n * Maps HTTP status codes to appropriate Railtown error classes.\n */\nfunction createRailtownError(statusCode, message, responseBody) {\n switch (statusCode) {\n case 401:\n return new RailtownUnauthorizedError(message, responseBody);\n case 404:\n return new RailtownNotFoundError(message, responseBody);\n case 400:\n return new RailtownBadRequestError(message, responseBody);\n case 409:\n return new RailtownConflictError(message, responseBody);\n default:\n if (statusCode >= 500) {\n return new RailtownServerError(message, statusCode, responseBody);\n }\n return new RailtownError(message || `HTTP ${statusCode}`, statusCode, responseBody);\n }\n}\n\n/**\n * Normalizes a URL by ensuring it has a protocol and proper path.\n *\n * @param url - The URL to normalize\n * @param defaultPath - Optional default path to append if no path is present\n * @returns Normalized URL string\n */\nfunction normalizeUrl(url, defaultPath) {\n let normalized = url.trim();\n // Add protocol if missing\n if (!normalized.match(/^https?:\\/\\//)) {\n normalized = `https://${normalized}`;\n }\n // Remove trailing slash\n normalized = normalized.replace(/\\/$/, \"\");\n // Append default path if provided and no path exists\n if (defaultPath && !normalized.match(/\\/[^/]/)) {\n const path = defaultPath.startsWith(\"/\") ? defaultPath : `/${defaultPath}`;\n normalized = `${normalized}${path}`;\n }\n return normalized;\n}\n/**\n * Strips the /api suffix from a URL if present.\n *\n * @param url - The URL to process\n * @returns URL without /api suffix\n */\nfunction stripApiSuffix(url) {\n return url.replace(/\\/api\\/?$/, \"\");\n}\n/**\n * Safely parses a JSON string with error handling.\n *\n * @param jsonString - JSON string to parse\n * @param errorMessage - Optional custom error message prefix\n * @returns Parsed JSON object\n * @throws {Error} If JSON parsing fails\n */\nfunction safeJsonParse(jsonString, errorMessage) {\n try {\n return JSON.parse(jsonString);\n }\n catch (error) {\n const message = errorMessage || \"Failed to parse JSON\";\n throw new Error(`${message}: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Makes an HTTP request with timeout support.\n *\n * @param url - Request URL\n * @param options - Request options\n * @returns Response object\n * @throws {Error} If request fails or times out\n */\nasync function makeHttpRequest(url, options = {}) {\n const { timeout = 30000, signal, ...fetchOptions } = options;\n const controller = new AbortController();\n const timeoutId = timeout > 0 ? setTimeout(() => controller.abort(), timeout) : null;\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n signal: signal || controller.signal\n });\n if (timeoutId)\n clearTimeout(timeoutId);\n return response;\n }\n catch (error) {\n if (timeoutId)\n clearTimeout(timeoutId);\n throw error;\n }\n}\n/**\n * Handles HTTP response errors by creating appropriate RailtownError.\n *\n * @param response - HTTP response object\n * @param defaultMessage - Default error message\n * @returns Never (always throws)\n * @throws {RailtownError} Appropriate error based on status code\n */\nasync function handleHttpError(response, defaultMessage) {\n const responseBody = await getResponseBody(response);\n throw createRailtownError(response.status, defaultMessage, responseBody);\n}\n/**\n * Safely extracts response body as text, returning empty string on error.\n *\n * @param response - HTTP response object\n * @returns Response body as string (empty string if extraction fails)\n */\nasync function getResponseBody(response) {\n return await response.text().catch(() => \"\");\n}\n/**\n * Handles request errors (timeout, network, etc.) with consistent error messages.\n *\n * @param error - Caught error\n * @param timeout - Request timeout in milliseconds\n * @param context - Context description for error message\n * @returns Never (always throws)\n * @throws {RailtownError} If error is a RailtownError\n * @throws {Error} For timeout or other errors\n */\nfunction handleRequestError(error, timeout, context) {\n if (error instanceof RailtownError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new Error(`Request timeout after ${timeout}ms`);\n }\n throw new Error(`${context}: ${error instanceof Error ? error.message : String(error)}`);\n}\n\nexport { RailtownBadRequestError, RailtownConflictError, RailtownError, RailtownNotFoundError, RailtownServerError, RailtownUnauthorizedError, createRailtownError, getResponseBody, handleHttpError, handleRequestError, makeHttpRequest, normalizeUrl, safeJsonParse, stripApiSuffix };\n//# sourceMappingURL=index.js.map\n",null,null,null,null],"names":["z"],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -359,6 +359,13 @@ class RailEngineIngest {
359
359
  * @param data - Data to ingest. Can be an object, JSON string, or Zod-validated object (if schema provided).
360
360
  * @param charset - Character encoding for the request. Defaults to "utf-8".
361
361
  * @returns HTTP response from the ingestion endpoint
362
+ *
363
+ * @example
364
+ * ```typescript
365
+ * const client = new RailEngineIngest();
366
+ * const response = await client.upsert({ name: "test", value: 123 });
367
+ * console.log(response);
368
+ * ```
362
369
  * @throws {RailtownError} If the request fails
363
370
  * @throws {z.ZodError} If schema validation fails
364
371
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../shared/dist/esm/index.js","../../src/auth.ts","../../src/models.ts","../../src/webhook.ts","../../src/client.ts"],"sourcesContent":["/**\n * Base error class for all Railtown API errors.\n */\nclass RailtownError extends Error {\n constructor(message, statusCode, responseBody) {\n super(message);\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n this.name = \"RailtownError\";\n Object.setPrototypeOf(this, RailtownError.prototype);\n }\n}\n/**\n * Error thrown when authentication fails (401).\n */\nclass RailtownUnauthorizedError extends RailtownError {\n constructor(message = \"Authentication failed\", responseBody) {\n super(message, 401, responseBody);\n this.name = \"RailtownUnauthorizedError\";\n Object.setPrototypeOf(this, RailtownUnauthorizedError.prototype);\n }\n}\n/**\n * Error thrown when a resource is not found (404).\n */\nclass RailtownNotFoundError extends RailtownError {\n constructor(message = \"Resource not found\", responseBody) {\n super(message, 404, responseBody);\n this.name = \"RailtownNotFoundError\";\n Object.setPrototypeOf(this, RailtownNotFoundError.prototype);\n }\n}\n/**\n * Error thrown when a bad request is made (400).\n */\nclass RailtownBadRequestError extends RailtownError {\n constructor(message = \"Bad request\", responseBody) {\n super(message, 400, responseBody);\n this.name = \"RailtownBadRequestError\";\n Object.setPrototypeOf(this, RailtownBadRequestError.prototype);\n }\n}\n/**\n * Error thrown when a conflict occurs (409).\n */\nclass RailtownConflictError extends RailtownError {\n constructor(message = \"Conflict\", responseBody) {\n super(message, 409, responseBody);\n this.name = \"RailtownConflictError\";\n Object.setPrototypeOf(this, RailtownConflictError.prototype);\n }\n}\n/**\n * Error thrown when a server error occurs (500+).\n */\nclass RailtownServerError extends RailtownError {\n constructor(message = \"Server error\", statusCode = 500, responseBody) {\n super(message, statusCode, responseBody);\n this.name = \"RailtownServerError\";\n Object.setPrototypeOf(this, RailtownServerError.prototype);\n }\n}\n/**\n * Maps HTTP status codes to appropriate Railtown error classes.\n */\nfunction createRailtownError(statusCode, message, responseBody) {\n switch (statusCode) {\n case 401:\n return new RailtownUnauthorizedError(message, responseBody);\n case 404:\n return new RailtownNotFoundError(message, responseBody);\n case 400:\n return new RailtownBadRequestError(message, responseBody);\n case 409:\n return new RailtownConflictError(message, responseBody);\n default:\n if (statusCode >= 500) {\n return new RailtownServerError(message, statusCode, responseBody);\n }\n return new RailtownError(message || `HTTP ${statusCode}`, statusCode, responseBody);\n }\n}\n\n/**\n * Normalizes a URL by ensuring it has a protocol and proper path.\n *\n * @param url - The URL to normalize\n * @param defaultPath - Optional default path to append if no path is present\n * @returns Normalized URL string\n */\nfunction normalizeUrl(url, defaultPath) {\n let normalized = url.trim();\n // Add protocol if missing\n if (!normalized.match(/^https?:\\/\\//)) {\n normalized = `https://${normalized}`;\n }\n // Remove trailing slash\n normalized = normalized.replace(/\\/$/, \"\");\n // Append default path if provided and no path exists\n if (defaultPath && !normalized.match(/\\/[^/]/)) {\n const path = defaultPath.startsWith(\"/\") ? defaultPath : `/${defaultPath}`;\n normalized = `${normalized}${path}`;\n }\n return normalized;\n}\n/**\n * Strips the /api suffix from a URL if present.\n *\n * @param url - The URL to process\n * @returns URL without /api suffix\n */\nfunction stripApiSuffix(url) {\n return url.replace(/\\/api\\/?$/, \"\");\n}\n/**\n * Safely parses a JSON string with error handling.\n *\n * @param jsonString - JSON string to parse\n * @param errorMessage - Optional custom error message prefix\n * @returns Parsed JSON object\n * @throws {Error} If JSON parsing fails\n */\nfunction safeJsonParse(jsonString, errorMessage) {\n try {\n return JSON.parse(jsonString);\n }\n catch (error) {\n const message = errorMessage || \"Failed to parse JSON\";\n throw new Error(`${message}: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Makes an HTTP request with timeout support.\n *\n * @param url - Request URL\n * @param options - Request options\n * @returns Response object\n * @throws {Error} If request fails or times out\n */\nasync function makeHttpRequest(url, options = {}) {\n const { timeout = 30000, signal, ...fetchOptions } = options;\n const controller = new AbortController();\n const timeoutId = timeout > 0 ? setTimeout(() => controller.abort(), timeout) : null;\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n signal: signal || controller.signal\n });\n if (timeoutId)\n clearTimeout(timeoutId);\n return response;\n }\n catch (error) {\n if (timeoutId)\n clearTimeout(timeoutId);\n throw error;\n }\n}\n/**\n * Handles HTTP response errors by creating appropriate RailtownError.\n *\n * @param response - HTTP response object\n * @param defaultMessage - Default error message\n * @returns Never (always throws)\n * @throws {RailtownError} Appropriate error based on status code\n */\nasync function handleHttpError(response, defaultMessage) {\n const responseBody = await getResponseBody(response);\n throw createRailtownError(response.status, defaultMessage, responseBody);\n}\n/**\n * Safely extracts response body as text, returning empty string on error.\n *\n * @param response - HTTP response object\n * @returns Response body as string (empty string if extraction fails)\n */\nasync function getResponseBody(response) {\n return await response.text().catch(() => \"\");\n}\n/**\n * Handles request errors (timeout, network, etc.) with consistent error messages.\n *\n * @param error - Caught error\n * @param timeout - Request timeout in milliseconds\n * @param context - Context description for error message\n * @returns Never (always throws)\n * @throws {RailtownError} If error is a RailtownError\n * @throws {Error} For timeout or other errors\n */\nfunction handleRequestError(error, timeout, context) {\n if (error instanceof RailtownError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new Error(`Request timeout after ${timeout}ms`);\n }\n throw new Error(`${context}: ${error instanceof Error ? error.message : String(error)}`);\n}\n\nexport { RailtownBadRequestError, RailtownConflictError, RailtownError, RailtownNotFoundError, RailtownServerError, RailtownUnauthorizedError, createRailtownError, getResponseBody, handleHttpError, handleRequestError, makeHttpRequest, normalizeUrl, safeJsonParse, stripApiSuffix };\n//# sourceMappingURL=index.js.map\n",null,null,null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../shared/dist/esm/index.js","../../src/auth.ts","../../src/models.ts","../../src/webhook.ts","../../src/client.ts"],"sourcesContent":["/**\n * Base error class for all Railtown API errors.\n */\nclass RailtownError extends Error {\n constructor(message, statusCode, responseBody) {\n super(message);\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n this.name = \"RailtownError\";\n Object.setPrototypeOf(this, RailtownError.prototype);\n }\n}\n/**\n * Error thrown when authentication fails (401).\n */\nclass RailtownUnauthorizedError extends RailtownError {\n constructor(message = \"Authentication failed\", responseBody) {\n super(message, 401, responseBody);\n this.name = \"RailtownUnauthorizedError\";\n Object.setPrototypeOf(this, RailtownUnauthorizedError.prototype);\n }\n}\n/**\n * Error thrown when a resource is not found (404).\n */\nclass RailtownNotFoundError extends RailtownError {\n constructor(message = \"Resource not found\", responseBody) {\n super(message, 404, responseBody);\n this.name = \"RailtownNotFoundError\";\n Object.setPrototypeOf(this, RailtownNotFoundError.prototype);\n }\n}\n/**\n * Error thrown when a bad request is made (400).\n */\nclass RailtownBadRequestError extends RailtownError {\n constructor(message = \"Bad request\", responseBody) {\n super(message, 400, responseBody);\n this.name = \"RailtownBadRequestError\";\n Object.setPrototypeOf(this, RailtownBadRequestError.prototype);\n }\n}\n/**\n * Error thrown when a conflict occurs (409).\n */\nclass RailtownConflictError extends RailtownError {\n constructor(message = \"Conflict\", responseBody) {\n super(message, 409, responseBody);\n this.name = \"RailtownConflictError\";\n Object.setPrototypeOf(this, RailtownConflictError.prototype);\n }\n}\n/**\n * Error thrown when a server error occurs (500+).\n */\nclass RailtownServerError extends RailtownError {\n constructor(message = \"Server error\", statusCode = 500, responseBody) {\n super(message, statusCode, responseBody);\n this.name = \"RailtownServerError\";\n Object.setPrototypeOf(this, RailtownServerError.prototype);\n }\n}\n/**\n * Maps HTTP status codes to appropriate Railtown error classes.\n */\nfunction createRailtownError(statusCode, message, responseBody) {\n switch (statusCode) {\n case 401:\n return new RailtownUnauthorizedError(message, responseBody);\n case 404:\n return new RailtownNotFoundError(message, responseBody);\n case 400:\n return new RailtownBadRequestError(message, responseBody);\n case 409:\n return new RailtownConflictError(message, responseBody);\n default:\n if (statusCode >= 500) {\n return new RailtownServerError(message, statusCode, responseBody);\n }\n return new RailtownError(message || `HTTP ${statusCode}`, statusCode, responseBody);\n }\n}\n\n/**\n * Normalizes a URL by ensuring it has a protocol and proper path.\n *\n * @param url - The URL to normalize\n * @param defaultPath - Optional default path to append if no path is present\n * @returns Normalized URL string\n */\nfunction normalizeUrl(url, defaultPath) {\n let normalized = url.trim();\n // Add protocol if missing\n if (!normalized.match(/^https?:\\/\\//)) {\n normalized = `https://${normalized}`;\n }\n // Remove trailing slash\n normalized = normalized.replace(/\\/$/, \"\");\n // Append default path if provided and no path exists\n if (defaultPath && !normalized.match(/\\/[^/]/)) {\n const path = defaultPath.startsWith(\"/\") ? defaultPath : `/${defaultPath}`;\n normalized = `${normalized}${path}`;\n }\n return normalized;\n}\n/**\n * Strips the /api suffix from a URL if present.\n *\n * @param url - The URL to process\n * @returns URL without /api suffix\n */\nfunction stripApiSuffix(url) {\n return url.replace(/\\/api\\/?$/, \"\");\n}\n/**\n * Safely parses a JSON string with error handling.\n *\n * @param jsonString - JSON string to parse\n * @param errorMessage - Optional custom error message prefix\n * @returns Parsed JSON object\n * @throws {Error} If JSON parsing fails\n */\nfunction safeJsonParse(jsonString, errorMessage) {\n try {\n return JSON.parse(jsonString);\n }\n catch (error) {\n const message = errorMessage || \"Failed to parse JSON\";\n throw new Error(`${message}: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Makes an HTTP request with timeout support.\n *\n * @param url - Request URL\n * @param options - Request options\n * @returns Response object\n * @throws {Error} If request fails or times out\n */\nasync function makeHttpRequest(url, options = {}) {\n const { timeout = 30000, signal, ...fetchOptions } = options;\n const controller = new AbortController();\n const timeoutId = timeout > 0 ? setTimeout(() => controller.abort(), timeout) : null;\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n signal: signal || controller.signal\n });\n if (timeoutId)\n clearTimeout(timeoutId);\n return response;\n }\n catch (error) {\n if (timeoutId)\n clearTimeout(timeoutId);\n throw error;\n }\n}\n/**\n * Handles HTTP response errors by creating appropriate RailtownError.\n *\n * @param response - HTTP response object\n * @param defaultMessage - Default error message\n * @returns Never (always throws)\n * @throws {RailtownError} Appropriate error based on status code\n */\nasync function handleHttpError(response, defaultMessage) {\n const responseBody = await getResponseBody(response);\n throw createRailtownError(response.status, defaultMessage, responseBody);\n}\n/**\n * Safely extracts response body as text, returning empty string on error.\n *\n * @param response - HTTP response object\n * @returns Response body as string (empty string if extraction fails)\n */\nasync function getResponseBody(response) {\n return await response.text().catch(() => \"\");\n}\n/**\n * Handles request errors (timeout, network, etc.) with consistent error messages.\n *\n * @param error - Caught error\n * @param timeout - Request timeout in milliseconds\n * @param context - Context description for error message\n * @returns Never (always throws)\n * @throws {RailtownError} If error is a RailtownError\n * @throws {Error} For timeout or other errors\n */\nfunction handleRequestError(error, timeout, context) {\n if (error instanceof RailtownError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new Error(`Request timeout after ${timeout}ms`);\n }\n throw new Error(`${context}: ${error instanceof Error ? error.message : String(error)}`);\n}\n\nexport { RailtownBadRequestError, RailtownConflictError, RailtownError, RailtownNotFoundError, RailtownServerError, RailtownUnauthorizedError, createRailtownError, getResponseBody, handleHttpError, handleRequestError, makeHttpRequest, normalizeUrl, safeJsonParse, stripApiSuffix };\n//# sourceMappingURL=index.js.map\n",null,null,null,null],"names":[],"mappings":"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"}
@@ -38,6 +38,13 @@ export declare class RailEngineIngest<T = unknown> {
38
38
  * @param data - Data to ingest. Can be an object, JSON string, or Zod-validated object (if schema provided).
39
39
  * @param charset - Character encoding for the request. Defaults to "utf-8".
40
40
  * @returns HTTP response from the ingestion endpoint
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const client = new RailEngineIngest();
45
+ * const response = await client.upsert({ name: "test", value: 123 });
46
+ * console.log(response);
47
+ * ```
41
48
  * @throws {RailtownError} If the request fails
42
49
  * @throws {z.ZodError} If schema validation fails
43
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,OAAO;IAClD,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,gBAAgB,CAAC,CAAC,GAAG,OAAO;IACvC,wDAAwD;IACxD,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,kDAAkD;IAClD,SAAgB,iBAAiB,EAAE,MAAM,CAAC;IAC1C,kDAAkD;IAClD,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAiB;IACzC,sCAAsC;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;;;OAKG;gBACS,OAAO,GAAE,uBAAuB,CAAC,CAAC,CAAM;IAqBpD;;;;;;;;OAQG;IACG,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAE,MAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgDtG;;;;OAIG;IACH,iBAAiB,IAAI,cAAc,CAAC,CAAC,CAAC;CAGvC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,OAAO;IAClD,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,gBAAgB,CAAC,CAAC,GAAG,OAAO;IACvC,wDAAwD;IACxD,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,kDAAkD;IAClD,SAAgB,iBAAiB,EAAE,MAAM,CAAC;IAC1C,kDAAkD;IAClD,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAiB;IACzC,sCAAsC;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;;;OAKG;gBACS,OAAO,GAAE,uBAAuB,CAAC,CAAC,CAAM;IAqBpD;;;;;;;;;;;;;;;OAeG;IACG,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAE,MAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgDtG;;;;OAIG;IACH,iBAAiB,IAAI,cAAc,CAAC,CAAC,CAAC;CAGvC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@railtownai/railengine-ingest",
3
3
  "license": "MIT",
4
4
  "author": "Railtown AI",
5
- "version": "0.0.2",
5
+ "version": "0.0.4",
6
6
  "description": "JavaScript/TypeScript SDK for Railtown AI Rail Engine - Ingestion",
7
7
  "type": "module",
8
8
  "main": "./dist/cjs/index.js",
@@ -42,6 +42,7 @@
42
42
  "test": "vitest run --passWithNoTests",
43
43
  "format": "prettier --write src",
44
44
  "update": "npx npm-check-updates -u",
45
- "dry-run": "pnpm publish --no-git-checks --access public --registry https://registry.npmjs.org --dry-run"
45
+ "dry-run": "pnpm publish --no-git-checks --access public --registry https://registry.npmjs.org --dry-run",
46
+ "release": "pnpm publish --no-git-checks --access public --registry https://registry.npmjs.org"
46
47
  }
47
48
  }