@lumerahq/ui 0.5.0

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 (122) hide show
  1. package/README.md +69 -0
  2. package/dist/api-BNY_eNKa.js +262 -0
  3. package/dist/automations-DU4weMpK.js +369 -0
  4. package/dist/components/ApiDemo.d.ts +2 -0
  5. package/dist/components/ApiDemo.d.ts.map +1 -0
  6. package/dist/components/automation/AutomationRunList.d.ts +38 -0
  7. package/dist/components/automation/AutomationRunList.d.ts.map +1 -0
  8. package/dist/components/automation/AutomationRunner.d.ts +43 -0
  9. package/dist/components/automation/AutomationRunner.d.ts.map +1 -0
  10. package/dist/components/component-example.d.ts +2 -0
  11. package/dist/components/component-example.d.ts.map +1 -0
  12. package/dist/components/data-table/DataTable.d.ts +49 -0
  13. package/dist/components/data-table/DataTable.d.ts.map +1 -0
  14. package/dist/components/data-table/DataTableFilters.d.ts +17 -0
  15. package/dist/components/data-table/DataTableFilters.d.ts.map +1 -0
  16. package/dist/components/data-table/DataTablePagination.d.ts +12 -0
  17. package/dist/components/data-table/DataTablePagination.d.ts.map +1 -0
  18. package/dist/components/data-table/RecordSheet.d.ts +24 -0
  19. package/dist/components/data-table/RecordSheet.d.ts.map +1 -0
  20. package/dist/components/data-table/index.d.ts +5 -0
  21. package/dist/components/data-table/index.d.ts.map +1 -0
  22. package/dist/components/example.d.ts +7 -0
  23. package/dist/components/example.d.ts.map +1 -0
  24. package/dist/components/index.d.ts +23 -0
  25. package/dist/components/index.d.ts.map +1 -0
  26. package/dist/components/index.js +61 -0
  27. package/dist/components/ui/alert-dialog.d.ts +19 -0
  28. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  29. package/dist/components/ui/avatar.d.ts +12 -0
  30. package/dist/components/ui/avatar.d.ts.map +1 -0
  31. package/dist/components/ui/badge.d.ts +8 -0
  32. package/dist/components/ui/badge.d.ts.map +1 -0
  33. package/dist/components/ui/button.d.ts +9 -0
  34. package/dist/components/ui/button.d.ts.map +1 -0
  35. package/dist/components/ui/card.d.ts +12 -0
  36. package/dist/components/ui/card.d.ts.map +1 -0
  37. package/dist/components/ui/checkbox.d.ts +4 -0
  38. package/dist/components/ui/checkbox.d.ts.map +1 -0
  39. package/dist/components/ui/combobox.d.ts +25 -0
  40. package/dist/components/ui/combobox.d.ts.map +1 -0
  41. package/dist/components/ui/dialog.d.ts +18 -0
  42. package/dist/components/ui/dialog.d.ts.map +1 -0
  43. package/dist/components/ui/dropdown-menu.d.ts +26 -0
  44. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  45. package/dist/components/ui/field.d.ts +25 -0
  46. package/dist/components/ui/field.d.ts.map +1 -0
  47. package/dist/components/ui/file-dropzone.d.ts +23 -0
  48. package/dist/components/ui/file-dropzone.d.ts.map +1 -0
  49. package/dist/components/ui/input-group.d.ts +19 -0
  50. package/dist/components/ui/input-group.d.ts.map +1 -0
  51. package/dist/components/ui/input.d.ts +4 -0
  52. package/dist/components/ui/input.d.ts.map +1 -0
  53. package/dist/components/ui/label.d.ts +4 -0
  54. package/dist/components/ui/label.d.ts.map +1 -0
  55. package/dist/components/ui/popover.d.ts +10 -0
  56. package/dist/components/ui/popover.d.ts.map +1 -0
  57. package/dist/components/ui/progress.d.ts +8 -0
  58. package/dist/components/ui/progress.d.ts.map +1 -0
  59. package/dist/components/ui/scroll-area.d.ts +5 -0
  60. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  61. package/dist/components/ui/select.d.ts +16 -0
  62. package/dist/components/ui/select.d.ts.map +1 -0
  63. package/dist/components/ui/separator.d.ts +4 -0
  64. package/dist/components/ui/separator.d.ts.map +1 -0
  65. package/dist/components/ui/sheet.d.ts +15 -0
  66. package/dist/components/ui/sheet.d.ts.map +1 -0
  67. package/dist/components/ui/sidebar.d.ts +64 -0
  68. package/dist/components/ui/sidebar.d.ts.map +1 -0
  69. package/dist/components/ui/skeleton.d.ts +3 -0
  70. package/dist/components/ui/skeleton.d.ts.map +1 -0
  71. package/dist/components/ui/status-badge.d.ts +21 -0
  72. package/dist/components/ui/status-badge.d.ts.map +1 -0
  73. package/dist/components/ui/table.d.ts +11 -0
  74. package/dist/components/ui/table.d.ts.map +1 -0
  75. package/dist/components/ui/tabs.d.ts +11 -0
  76. package/dist/components/ui/tabs.d.ts.map +1 -0
  77. package/dist/components/ui/textarea.d.ts +4 -0
  78. package/dist/components/ui/textarea.d.ts.map +1 -0
  79. package/dist/components/ui/tooltip.d.ts +7 -0
  80. package/dist/components/ui/tooltip.d.ts.map +1 -0
  81. package/dist/formatters-Baj7FkeG.js +3217 -0
  82. package/dist/hooks/index.d.ts +6 -0
  83. package/dist/hooks/index.d.ts.map +1 -0
  84. package/dist/hooks/index.js +11 -0
  85. package/dist/hooks/use-automation-agent.d.ts +60 -0
  86. package/dist/hooks/use-automation-agent.d.ts.map +1 -0
  87. package/dist/hooks/use-automation-run.d.ts +65 -0
  88. package/dist/hooks/use-automation-run.d.ts.map +1 -0
  89. package/dist/hooks/use-file-upload.d.ts +57 -0
  90. package/dist/hooks/use-file-upload.d.ts.map +1 -0
  91. package/dist/hooks/use-lumera-api.d.ts +14 -0
  92. package/dist/hooks/use-lumera-api.d.ts.map +1 -0
  93. package/dist/hooks/use-mobile.d.ts +2 -0
  94. package/dist/hooks/use-mobile.d.ts.map +1 -0
  95. package/dist/hooks/use-sql-table.d.ts +52 -0
  96. package/dist/hooks/use-sql-table.d.ts.map +1 -0
  97. package/dist/index.d.ts +4 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +134 -0
  100. package/dist/lib/api.d.ts +307 -0
  101. package/dist/lib/api.d.ts.map +1 -0
  102. package/dist/lib/automations.d.ts +274 -0
  103. package/dist/lib/automations.d.ts.map +1 -0
  104. package/dist/lib/bridge.d.ts +137 -0
  105. package/dist/lib/bridge.d.ts.map +1 -0
  106. package/dist/lib/formatters.d.ts +92 -0
  107. package/dist/lib/formatters.d.ts.map +1 -0
  108. package/dist/lib/index.d.ts +12 -0
  109. package/dist/lib/index.d.ts.map +1 -0
  110. package/dist/lib/index.js +66 -0
  111. package/dist/lib/query-client.d.ts +3 -0
  112. package/dist/lib/query-client.d.ts.map +1 -0
  113. package/dist/lib/utils.d.ts +3 -0
  114. package/dist/lib/utils.d.ts.map +1 -0
  115. package/dist/logo.png +0 -0
  116. package/dist/lumera-logo.png +0 -0
  117. package/dist/query-client-DdOWay4_.js +17 -0
  118. package/dist/tooltip-BMqvkb5u.js +17305 -0
  119. package/dist/ui.css +4911 -0
  120. package/dist/use-automation-run-CbhXCKvM.js +134 -0
  121. package/dist/use-sql-table-DuIu8eMY.js +343 -0
  122. package/package.json +79 -0
@@ -0,0 +1,307 @@
1
+ /**
2
+ * PocketBase API client for Lumera custom apps.
3
+ *
4
+ * All operations go through the parent bridge for authentication.
5
+ * This module provides a clean, typed interface for CRUD operations.
6
+ *
7
+ * @module api
8
+ */
9
+ /** Base type for PocketBase records */
10
+ export type PbRecord = Record<string, unknown> & {
11
+ id?: string;
12
+ created?: string;
13
+ updated?: string;
14
+ };
15
+ /** SQL query request */
16
+ export type PbSqlRequest = {
17
+ /** SQL query string */
18
+ sql: string;
19
+ /** Named parameters (use $name in SQL) */
20
+ params?: Record<string, unknown>;
21
+ /** Positional arguments (use ? in SQL) */
22
+ args?: unknown[];
23
+ };
24
+ /** SQL query response */
25
+ export type PbSqlResponse<T> = {
26
+ columns?: string[];
27
+ rows?: T[];
28
+ rowsAffected?: number | null;
29
+ lastInsertId?: number | null;
30
+ durationMs: number;
31
+ };
32
+ /** List query options */
33
+ export type PbListOptions = {
34
+ /** Page number (1-indexed) */
35
+ page?: number;
36
+ /** Items per page */
37
+ perPage?: number;
38
+ /** Filter expression (PocketBase syntax) */
39
+ filter?: string;
40
+ /** Sort expression (e.g., "-created" for descending) */
41
+ sort?: string;
42
+ /** Relations to expand */
43
+ expand?: string;
44
+ };
45
+ /** Paginated list response */
46
+ export type PbListResponse<T> = {
47
+ page: number;
48
+ perPage: number;
49
+ totalItems: number;
50
+ totalPages: number;
51
+ items: T[];
52
+ };
53
+ /** Bulk operation result */
54
+ export type PbBulkResult = {
55
+ succeeded: number;
56
+ failed: number;
57
+ errors?: Array<{
58
+ index: number;
59
+ error: string;
60
+ }>;
61
+ };
62
+ /** File upload options */
63
+ export type UploadOptions = {
64
+ /** Target collection ID */
65
+ collectionId: string;
66
+ /** Field name in the collection */
67
+ fieldName: string;
68
+ /** Upload timeout in milliseconds (default: 60000 for large files) */
69
+ timeout?: number;
70
+ };
71
+ /** Presigned upload response */
72
+ export type UploadUrlResponse = {
73
+ object_key: string;
74
+ upload_url?: string;
75
+ download_url?: string;
76
+ };
77
+ /** File descriptor stored in Lumera */
78
+ export type FileDescriptor = {
79
+ object_key: string;
80
+ original_name: string;
81
+ size: number;
82
+ content_type: string;
83
+ uploaded_at: string;
84
+ };
85
+ /** Email send request */
86
+ export type EmailSendRequest = {
87
+ /** Recipient email address(es) */
88
+ to: string | string[];
89
+ /** Email subject line */
90
+ subject: string;
91
+ /** HTML body content */
92
+ body_html?: string;
93
+ /** Plain text body content */
94
+ body_text?: string;
95
+ /** CC recipient(s) */
96
+ cc?: string | string[];
97
+ /** BCC recipient(s) */
98
+ bcc?: string | string[];
99
+ /** Sender email address (uses platform default if not provided) */
100
+ from_address?: string;
101
+ /** Sender display name (uses platform default if not provided) */
102
+ from_name?: string;
103
+ /** Reply-to address */
104
+ reply_to?: string;
105
+ /** Custom tags for tracking/filtering */
106
+ tags?: Record<string, string>;
107
+ };
108
+ /** Email send result */
109
+ export type EmailSendResult = {
110
+ /** AWS SES message ID */
111
+ message_id: string;
112
+ /** PocketBase log record ID in lm_email_logs */
113
+ log_id: string;
114
+ };
115
+ /**
116
+ * Execute a SQL query against PocketBase.
117
+ *
118
+ * @param req - SQL query request with query and optional params/args
119
+ * @returns Query result with rows and metadata
120
+ *
121
+ * @example
122
+ * // Simple query
123
+ * const result = await pbSql<{ id: string; name: string }>({
124
+ * sql: 'SELECT id, name FROM users WHERE active = true'
125
+ * });
126
+ * console.log(result.rows);
127
+ *
128
+ * @example
129
+ * // With named parameters
130
+ * const result = await pbSql<{ count: number }>({
131
+ * sql: 'SELECT COUNT(*) as count FROM orders WHERE status = $status',
132
+ * params: { status: 'pending' }
133
+ * });
134
+ */
135
+ export declare function pbSql<T = PbRecord>(req: PbSqlRequest): Promise<PbSqlResponse<T>>;
136
+ /**
137
+ * Get a single record by ID.
138
+ *
139
+ * @param collection - Collection name or ID
140
+ * @param id - Record ID
141
+ * @param expand - Optional relations to expand
142
+ * @returns The record
143
+ *
144
+ * @example
145
+ * const user = await pbGet<User>('users', 'abc123');
146
+ */
147
+ export declare function pbGet<T extends PbRecord = PbRecord>(collection: string, id: string, expand?: string): Promise<T>;
148
+ /**
149
+ * List records with pagination, filtering, and sorting.
150
+ *
151
+ * @param collection - Collection name or ID
152
+ * @param options - List options (page, perPage, filter, sort, expand)
153
+ * @returns Paginated list of records
154
+ *
155
+ * @example
156
+ * const result = await pbList<User>('users', {
157
+ * filter: 'active = true',
158
+ * sort: '-created',
159
+ * perPage: 50,
160
+ * });
161
+ * console.log(result.items, result.totalItems);
162
+ */
163
+ export declare function pbList<T extends PbRecord = PbRecord>(collection: string, options?: PbListOptions): Promise<PbListResponse<T>>;
164
+ /**
165
+ * Full-text search across records.
166
+ *
167
+ * @param collection - Collection name or ID
168
+ * @param query - Search query
169
+ * @param options - Additional list options
170
+ * @returns Search results
171
+ *
172
+ * @example
173
+ * const results = await pbSearch<Product>('products', 'laptop', { perPage: 10 });
174
+ */
175
+ export declare function pbSearch<T extends PbRecord = PbRecord>(collection: string, query: string, options?: Omit<PbListOptions, 'filter'>): Promise<PbListResponse<T>>;
176
+ /**
177
+ * Create a new record.
178
+ *
179
+ * @param collection - Collection name or ID
180
+ * @param data - Record data
181
+ * @returns The created record
182
+ *
183
+ * @example
184
+ * const user = await pbCreate<User>('users', {
185
+ * name: 'John Doe',
186
+ * email: 'john@example.com',
187
+ * });
188
+ */
189
+ export declare function pbCreate<T extends PbRecord = PbRecord>(collection: string, data: Omit<T, 'id' | 'created' | 'updated'>): Promise<T>;
190
+ /**
191
+ * Update an existing record.
192
+ *
193
+ * @param collection - Collection name or ID
194
+ * @param id - Record ID
195
+ * @param data - Fields to update
196
+ * @returns The updated record
197
+ *
198
+ * @example
199
+ * const user = await pbUpdate<User>('users', 'abc123', { name: 'Jane Doe' });
200
+ */
201
+ export declare function pbUpdate<T extends PbRecord = PbRecord>(collection: string, id: string, data: Partial<Omit<T, 'id' | 'created' | 'updated'>>): Promise<T>;
202
+ /**
203
+ * Delete a record.
204
+ *
205
+ * @param collection - Collection name or ID
206
+ * @param id - Record ID
207
+ *
208
+ * @example
209
+ * await pbDelete('users', 'abc123');
210
+ */
211
+ export declare function pbDelete(collection: string, id: string): Promise<void>;
212
+ export declare function pbBulkUpdate(collection: string, records: Array<{
213
+ id: string;
214
+ } & Record<string, unknown>>): Promise<PbBulkResult>;
215
+ /**
216
+ * Delete multiple records in a single request.
217
+ *
218
+ * @param collection - Collection name or ID
219
+ * @param ids - Array of record IDs to delete
220
+ * @returns Bulk operation result
221
+ *
222
+ * @example
223
+ * const result = await pbBulkDelete('temp_files', ['id1', 'id2', 'id3']);
224
+ */
225
+ export declare function pbBulkDelete(collection: string, ids: string[]): Promise<PbBulkResult>;
226
+ /**
227
+ * Upsert a record by external_id (create if not exists, update if exists).
228
+ *
229
+ * @param collection - Collection name or ID
230
+ * @param data - Record data (must include external_id)
231
+ * @returns The upserted record
232
+ *
233
+ * @example
234
+ * const product = await pbUpsert<Product>('products', {
235
+ * external_id: 'SKU-123',
236
+ * name: 'Widget',
237
+ * price: 9.99,
238
+ * });
239
+ */
240
+ export declare function pbUpsert<T extends PbRecord = PbRecord>(collection: string, data: {
241
+ external_id: string;
242
+ } & Record<string, unknown>): Promise<T>;
243
+ /**
244
+ * Get a presigned upload URL for file storage.
245
+ *
246
+ * @param filename - Original filename
247
+ * @param contentType - MIME type
248
+ * @param options - Collection and field to attach the file to
249
+ * @returns Presigned upload URL and object key
250
+ *
251
+ * @example
252
+ * const { upload_url, object_key } = await getUploadUrl('report.pdf', 'application/pdf', {
253
+ * collectionId: 'documents',
254
+ * fieldName: 'file',
255
+ * });
256
+ */
257
+ export declare function getUploadUrl(filename: string, contentType: string, options: UploadOptions): Promise<UploadUrlResponse>;
258
+ export declare function uploadFile(file: File, options: UploadOptions): Promise<{
259
+ objectKey: string;
260
+ descriptor: FileDescriptor;
261
+ }>;
262
+ /**
263
+ * Get a presigned download URL for a file.
264
+ *
265
+ * @param objectKey - The object key from the file descriptor
266
+ * @returns Presigned download URL
267
+ *
268
+ * @example
269
+ * const url = await getDownloadUrl(record.attachment.object_key);
270
+ * window.open(url);
271
+ */
272
+ export declare function getDownloadUrl(objectKey: string): Promise<string>;
273
+ /**
274
+ * Send an email through the Lumera platform.
275
+ *
276
+ * At least one of body_html or body_text must be provided. If only body_html
277
+ * is provided, a plain text version will be auto-generated.
278
+ *
279
+ * @param options - Email send options
280
+ * @returns Email send result with message_id and log_id
281
+ *
282
+ * @example
283
+ * // Simple email
284
+ * const result = await sendEmail({
285
+ * to: 'user@example.com',
286
+ * subject: 'Welcome!',
287
+ * body_html: '<h1>Hello!</h1><p>Welcome to our platform.</p>',
288
+ * });
289
+ * console.log(result.message_id);
290
+ *
291
+ * @example
292
+ * // Email with multiple recipients and options
293
+ * const result = await sendEmail({
294
+ * to: ['alice@example.com', 'bob@example.com'],
295
+ * subject: 'Team Update',
296
+ * body_html: '<h1>Update</h1><p>See details below.</p>',
297
+ * body_text: 'Update\n\nSee details below.',
298
+ * cc: 'manager@example.com',
299
+ * tags: { type: 'notification', team: 'engineering' },
300
+ * });
301
+ */
302
+ export declare function sendEmail(options: EmailSendRequest): Promise<EmailSendResult>;
303
+ /**
304
+ * @deprecated Use pbUpdate instead
305
+ */
306
+ export declare function pbUpdateRecord<T extends PbRecord = PbRecord>(collectionId: string, recordId: string, data: Record<string, unknown>): Promise<T>;
307
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Automation API client for Lumera custom apps.
3
+ *
4
+ * Provides functions for triggering and monitoring automation runs.
5
+ * All operations go through the parent bridge for authentication.
6
+ *
7
+ * @module automations
8
+ */
9
+ /** Automation run status */
10
+ export type AutomationStatus = 'preparing' | 'queued' | 'running' | 'cancelling' | 'succeeded' | 'failed' | 'cancelled';
11
+ /**
12
+ * Check if a status is terminal (run is complete).
13
+ */
14
+ export declare const isTerminalStatus: (status: AutomationStatus) => boolean;
15
+ /**
16
+ * Check if a status is active (run is in progress).
17
+ */
18
+ export declare const isActiveStatus: (status: AutomationStatus) => boolean;
19
+ /** Automation definition */
20
+ export type Automation = {
21
+ id: string;
22
+ external_id?: string;
23
+ name?: string;
24
+ description?: string;
25
+ };
26
+ /** Automation run */
27
+ export type AutomationRun = {
28
+ id: string;
29
+ automation_id: string;
30
+ inputs?: string;
31
+ status: AutomationStatus;
32
+ error?: string | null;
33
+ trigger?: string | null;
34
+ result?: unknown;
35
+ metadata?: Record<string, unknown>;
36
+ external_id?: string | null;
37
+ created?: string;
38
+ updated?: string;
39
+ started_at?: string | null;
40
+ finished_at?: string | null;
41
+ artifacts?: AutomationRunFile[];
42
+ };
43
+ /** File attached to an automation run */
44
+ export type AutomationRunFile = {
45
+ name: string;
46
+ content_type?: string;
47
+ size_bytes?: number;
48
+ created_at?: string;
49
+ object?: string;
50
+ type?: string;
51
+ };
52
+ /** Options for creating a run */
53
+ export type CreateRunOptions = {
54
+ /** Automation ID or external_id (if contains `:`, treated as external_id) */
55
+ automationId: string;
56
+ /** Input parameters for the automation */
57
+ inputs: Record<string, unknown>;
58
+ /** Optional external ID for idempotency */
59
+ externalId?: string;
60
+ /** Trigger source identifier */
61
+ trigger?: string;
62
+ /** Additional metadata */
63
+ metadata?: Record<string, unknown>;
64
+ };
65
+ /** Options for listing runs */
66
+ export type ListRunsOptions = {
67
+ /** Filter by automation ID */
68
+ automationId?: string;
69
+ /** Filter by external ID */
70
+ externalId?: string;
71
+ /** Maximum number of results */
72
+ limit?: number;
73
+ /** Offset for pagination */
74
+ offset?: number;
75
+ /** Sort direction */
76
+ dir?: 'asc' | 'desc';
77
+ };
78
+ /** Options for polling a run */
79
+ export type PollOptions = {
80
+ /** Polling interval in milliseconds (default: 2000) */
81
+ intervalMs?: number;
82
+ /** Timeout in milliseconds (default: 300000 = 5 minutes) */
83
+ timeoutMs?: number;
84
+ /** Callback for status updates */
85
+ onUpdate?: (run: AutomationRun) => void;
86
+ /** AbortSignal for cancellation */
87
+ signal?: AbortSignal;
88
+ };
89
+ /**
90
+ * Clear the automation ID cache.
91
+ * Call this if automation external_ids have changed.
92
+ *
93
+ * @param externalId - Optional specific external_id to clear. If omitted, clears entire cache.
94
+ *
95
+ * @example
96
+ * // Clear specific entry
97
+ * clearAutomationCache('my_app:process_data');
98
+ *
99
+ * // Clear entire cache
100
+ * clearAutomationCache();
101
+ */
102
+ export declare function clearAutomationCache(externalId?: string): void;
103
+ /**
104
+ * Get automation ID by external_id.
105
+ * Results are cached to avoid repeated lookups.
106
+ *
107
+ * @param externalId - The external_id of the automation
108
+ * @returns The internal automation ID
109
+ *
110
+ * @example
111
+ * const id = await getAutomationByExternalId('my_app:process_data');
112
+ */
113
+ export declare function getAutomationByExternalId(externalId: string): Promise<string>;
114
+ /**
115
+ * Create and start a new automation run.
116
+ *
117
+ * @param options - Run creation options
118
+ * @returns The created run
119
+ *
120
+ * @example
121
+ * const run = await createRun({
122
+ * automationId: 'my_app:process_data',
123
+ * inputs: { file_id: 'abc123' },
124
+ * });
125
+ * console.log(`Started run: ${run.id}`);
126
+ */
127
+ export declare function createRun(options: CreateRunOptions): Promise<AutomationRun>;
128
+ /**
129
+ * Get a run by ID.
130
+ *
131
+ * @param runId - The run ID
132
+ * @returns The run
133
+ *
134
+ * @example
135
+ * const run = await getRun('run_abc123');
136
+ * console.log(`Status: ${run.status}`);
137
+ */
138
+ export declare function getRun(runId: string): Promise<AutomationRun>;
139
+ /**
140
+ * List runs with optional filters.
141
+ *
142
+ * @param options - Filter and pagination options
143
+ * @returns Array of runs
144
+ *
145
+ * @example
146
+ * const runs = await listRuns({
147
+ * automationId: 'my_app:process_data',
148
+ * limit: 10,
149
+ * });
150
+ */
151
+ export declare function listRuns(options?: ListRunsOptions): Promise<AutomationRun[]>;
152
+ /**
153
+ * Cancel a running automation.
154
+ *
155
+ * @param runId - The run ID to cancel
156
+ * @returns The updated run
157
+ *
158
+ * @example
159
+ * const run = await cancelRun('run_abc123');
160
+ * console.log(`Status: ${run.status}`); // 'cancelling' or 'cancelled'
161
+ */
162
+ export declare function cancelRun(runId: string): Promise<AutomationRun>;
163
+ /**
164
+ * Poll a run until it reaches a terminal state.
165
+ *
166
+ * @param runId - The run ID to poll
167
+ * @param options - Polling options
168
+ * @returns The final run state
169
+ * @throws {Error} If polling times out
170
+ *
171
+ * @example
172
+ * // Simple polling
173
+ * const run = await pollRun('run_abc123');
174
+ * console.log(`Completed with status: ${run.status}`);
175
+ *
176
+ * @example
177
+ * // With progress updates and cancellation
178
+ * const controller = new AbortController();
179
+ *
180
+ * const run = await pollRun('run_abc123', {
181
+ * intervalMs: 1000,
182
+ * timeoutMs: 60000,
183
+ * signal: controller.signal,
184
+ * onUpdate: (run) => console.log(`Status: ${run.status}`),
185
+ * });
186
+ */
187
+ export declare function pollRun(runId: string, options?: PollOptions): Promise<AutomationRun>;
188
+ /**
189
+ * Ensure a run exists, reusing an active or succeeded run if one exists.
190
+ * This provides idempotency for automation runs.
191
+ *
192
+ * @param options - Run creation options (externalId is required)
193
+ * @returns An existing active/succeeded run, or a newly created run
194
+ *
195
+ * @example
196
+ * // Idempotent run - safe to call multiple times
197
+ * const run = await ensureRun({
198
+ * automationId: 'my_app:process_data',
199
+ * inputs: { batch_id: 'batch_123' },
200
+ * externalId: 'batch_123_processing',
201
+ * });
202
+ */
203
+ export declare function ensureRun(options: CreateRunOptions & {
204
+ externalId: string;
205
+ }): Promise<AutomationRun>;
206
+ /**
207
+ * List files attached to a run.
208
+ *
209
+ * @param runId - The run ID
210
+ * @returns Array of file metadata
211
+ *
212
+ * @example
213
+ * const files = await getRunFiles('run_abc123');
214
+ * for (const file of files) {
215
+ * console.log(`${file.name} (${file.size_bytes} bytes)`);
216
+ * }
217
+ */
218
+ export declare function getRunFiles(runId: string): Promise<AutomationRunFile[]>;
219
+ /**
220
+ * Get a download URL for a run file.
221
+ *
222
+ * @param runId - The run ID
223
+ * @param filename - The file name
224
+ * @returns Presigned download URL
225
+ *
226
+ * @example
227
+ * const url = await getRunFileUrl('run_abc123', 'output.csv');
228
+ * window.open(url);
229
+ */
230
+ export declare function getRunFileUrl(runId: string, filename: string): Promise<string>;
231
+ /** Status helper functions and constants */
232
+ export declare const automationStatuses: {
233
+ readonly TERMINAL_STATUSES: AutomationStatus[];
234
+ readonly ACTIVE_STATUSES: AutomationStatus[];
235
+ readonly isTerminal: (status: AutomationStatus) => boolean;
236
+ readonly isActive: (status: AutomationStatus) => boolean;
237
+ };
238
+ /** Options with agentId for backwards compatibility */
239
+ export type LegacyCreateRunOptions = {
240
+ agentId: string;
241
+ inputs: Record<string, unknown>;
242
+ externalId?: string;
243
+ trigger?: string;
244
+ metadata?: Record<string, unknown>;
245
+ };
246
+ /** @deprecated Use createRun instead */
247
+ export declare function createAutomationRun(options: LegacyCreateRunOptions): Promise<AutomationRun>;
248
+ /** @deprecated Use getRun instead */
249
+ export declare const getAutomationRun: typeof getRun;
250
+ /** @deprecated Use cancelRun instead */
251
+ export declare const cancelAutomationRun: typeof cancelRun;
252
+ /** @deprecated Use ensureRun instead */
253
+ export declare function ensureAutomationRun(options: LegacyCreateRunOptions & {
254
+ externalId: string;
255
+ }): Promise<AutomationRun>;
256
+ /** @deprecated Use pollRun instead */
257
+ export declare const pollAutomationRun: typeof pollRun;
258
+ /** @deprecated Use getRunFiles instead */
259
+ export declare const listAutomationRunFiles: typeof getRunFiles;
260
+ /** @deprecated Use getRunFileUrl instead */
261
+ export declare const getAutomationRunFileDownloadUrl: typeof getRunFileUrl;
262
+ /** @deprecated Use listRuns with automationId filter instead */
263
+ export declare function listRunsByAgent(params: {
264
+ agentId: string;
265
+ limit?: number;
266
+ offset?: number;
267
+ }): Promise<AutomationRun[]>;
268
+ /** @deprecated Use listRuns with externalId filter instead */
269
+ export declare function listRunsByExternalId(params: {
270
+ externalId: string;
271
+ agentId?: string;
272
+ limit?: number;
273
+ }): Promise<AutomationRun[]>;
274
+ //# sourceMappingURL=automations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.d.ts","sourceRoot":"","sources":["../../src/lib/automations.ts"],"names":[],"mappings":"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"}