primitive-admin 1.0.49 → 1.0.51

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 (153) hide show
  1. package/README.md +129 -10
  2. package/assets/skill/skills/primitive-platform/SKILL.md +85 -30
  3. package/dist/bin/primitive.d.ts +2 -0
  4. package/dist/bin/primitive.js +66 -1
  5. package/dist/bin/primitive.js.map +1 -1
  6. package/dist/src/commands/admins.d.ts +2 -0
  7. package/dist/src/commands/admins.js +25 -27
  8. package/dist/src/commands/admins.js.map +1 -1
  9. package/dist/src/commands/analytics.d.ts +2 -0
  10. package/dist/src/commands/apps.d.ts +2 -0
  11. package/dist/src/commands/apps.js +28 -0
  12. package/dist/src/commands/apps.js.map +1 -1
  13. package/dist/src/commands/auth.d.ts +2 -0
  14. package/dist/src/commands/blob-buckets.d.ts +2 -0
  15. package/dist/src/commands/blob-buckets.js +30 -26
  16. package/dist/src/commands/blob-buckets.js.map +1 -1
  17. package/dist/src/commands/catalog.d.ts +2 -0
  18. package/dist/src/commands/catalog.js +17 -18
  19. package/dist/src/commands/catalog.js.map +1 -1
  20. package/dist/src/commands/collection-type-configs.d.ts +2 -0
  21. package/dist/src/commands/collection-type-configs.js +9 -9
  22. package/dist/src/commands/collection-type-configs.js.map +1 -1
  23. package/dist/src/commands/collections.d.ts +2 -0
  24. package/dist/src/commands/collections.js +33 -36
  25. package/dist/src/commands/collections.js.map +1 -1
  26. package/dist/src/commands/comparisons.d.ts +2 -0
  27. package/dist/src/commands/cron-triggers.d.ts +2 -0
  28. package/dist/src/commands/cron-triggers.js +8 -15
  29. package/dist/src/commands/cron-triggers.js.map +1 -1
  30. package/dist/src/commands/database-types.d.ts +2 -0
  31. package/dist/src/commands/database-types.js +17 -18
  32. package/dist/src/commands/database-types.js.map +1 -1
  33. package/dist/src/commands/databases.d.ts +2 -0
  34. package/dist/src/commands/databases.js +72 -45
  35. package/dist/src/commands/databases.js.map +1 -1
  36. package/dist/src/commands/documents.d.ts +2 -0
  37. package/dist/src/commands/documents.js +17 -18
  38. package/dist/src/commands/documents.js.map +1 -1
  39. package/dist/src/commands/email-templates.d.ts +2 -0
  40. package/dist/src/commands/email-templates.js +9 -9
  41. package/dist/src/commands/email-templates.js.map +1 -1
  42. package/dist/src/commands/env.d.ts +12 -0
  43. package/dist/src/commands/group-type-configs.d.ts +2 -0
  44. package/dist/src/commands/group-type-configs.js +9 -9
  45. package/dist/src/commands/group-type-configs.js.map +1 -1
  46. package/dist/src/commands/groups.d.ts +2 -0
  47. package/dist/src/commands/groups.js +17 -18
  48. package/dist/src/commands/groups.js.map +1 -1
  49. package/dist/src/commands/guides.d.ts +84 -0
  50. package/dist/src/commands/guides.js +201 -24
  51. package/dist/src/commands/guides.js.map +1 -1
  52. package/dist/src/commands/init.d.ts +17 -0
  53. package/dist/src/commands/init.js +63 -25
  54. package/dist/src/commands/init.js.map +1 -1
  55. package/dist/src/commands/integrations.d.ts +2 -0
  56. package/dist/src/commands/integrations.js +39 -23
  57. package/dist/src/commands/integrations.js.map +1 -1
  58. package/dist/src/commands/llm.d.ts +2 -0
  59. package/dist/src/commands/llm.js +4 -2
  60. package/dist/src/commands/llm.js.map +1 -1
  61. package/dist/src/commands/prompts.d.ts +2 -0
  62. package/dist/src/commands/prompts.js +33 -36
  63. package/dist/src/commands/prompts.js.map +1 -1
  64. package/dist/src/commands/rule-sets.d.ts +2 -0
  65. package/dist/src/commands/rule-sets.js +9 -9
  66. package/dist/src/commands/rule-sets.js.map +1 -1
  67. package/dist/src/commands/secrets.d.ts +2 -0
  68. package/dist/src/commands/skill.d.ts +2 -0
  69. package/dist/src/commands/sync.d.ts +99 -0
  70. package/dist/src/commands/sync.js +437 -31
  71. package/dist/src/commands/sync.js.map +1 -1
  72. package/dist/src/commands/tokens.d.ts +2 -0
  73. package/dist/src/commands/tokens.js +113 -10
  74. package/dist/src/commands/tokens.js.map +1 -1
  75. package/dist/src/commands/users.d.ts +2 -0
  76. package/dist/src/commands/users.js +41 -45
  77. package/dist/src/commands/users.js.map +1 -1
  78. package/dist/src/commands/waitlist.d.ts +2 -0
  79. package/dist/src/commands/waitlist.js +10 -10
  80. package/dist/src/commands/waitlist.js.map +1 -1
  81. package/dist/src/commands/webhooks.d.ts +2 -0
  82. package/dist/src/commands/webhooks.js +9 -9
  83. package/dist/src/commands/webhooks.js.map +1 -1
  84. package/dist/src/commands/workflows.d.ts +49 -0
  85. package/dist/src/commands/workflows.js +136 -57
  86. package/dist/src/commands/workflows.js.map +1 -1
  87. package/dist/src/lib/api-client.d.ts +1229 -0
  88. package/dist/src/lib/api-client.js +44 -11
  89. package/dist/src/lib/api-client.js.map +1 -1
  90. package/dist/src/lib/auth-flow.d.ts +8 -0
  91. package/dist/src/lib/cli-manifest.d.ts +60 -0
  92. package/dist/src/lib/cli-manifest.js +70 -0
  93. package/dist/src/lib/cli-manifest.js.map +1 -0
  94. package/dist/src/lib/config.d.ts +37 -0
  95. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  96. package/dist/src/lib/confirm-prompt.js +110 -0
  97. package/dist/src/lib/confirm-prompt.js.map +1 -0
  98. package/dist/src/lib/constants.d.ts +2 -0
  99. package/dist/src/lib/crash-handlers.d.ts +20 -0
  100. package/dist/src/lib/crash-handlers.js +49 -0
  101. package/dist/src/lib/crash-handlers.js.map +1 -0
  102. package/dist/src/lib/credentials-store.d.ts +79 -0
  103. package/dist/src/lib/csv.d.ts +48 -0
  104. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  105. package/dist/src/lib/db-codegen/dbGenerator.d.ts +111 -0
  106. package/dist/src/lib/db-codegen/dbNaming.d.ts +45 -0
  107. package/dist/src/lib/db-codegen/dbTemplates.d.ts +97 -0
  108. package/dist/src/lib/db-codegen/dbTemplates.js +31 -10
  109. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
  110. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +78 -0
  111. package/dist/src/lib/db-codegen/dbTsTypes.js +2 -2
  112. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -1
  113. package/dist/src/lib/env-resolver.d.ts +62 -0
  114. package/dist/src/lib/fetch.d.ts +5 -0
  115. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  116. package/dist/src/lib/generated-allowlist.js +181 -0
  117. package/dist/src/lib/generated-allowlist.js.map +1 -0
  118. package/dist/src/lib/init-config.d.ts +46 -0
  119. package/dist/src/lib/init-config.js +7 -0
  120. package/dist/src/lib/init-config.js.map +1 -1
  121. package/dist/src/lib/migration-nag.d.ts +49 -0
  122. package/dist/src/lib/output.d.ts +49 -0
  123. package/dist/src/lib/output.js +25 -1
  124. package/dist/src/lib/output.js.map +1 -1
  125. package/dist/src/lib/paginate.d.ts +33 -0
  126. package/dist/src/lib/project-config.d.ts +97 -0
  127. package/dist/src/lib/refresh-admin-credentials.d.ts +65 -0
  128. package/dist/src/lib/resolve-platform.d.ts +45 -0
  129. package/dist/src/lib/resolve-platform.js +43 -0
  130. package/dist/src/lib/resolve-platform.js.map +1 -0
  131. package/dist/src/lib/skill-installer.d.ts +23 -0
  132. package/dist/src/lib/snapshots.d.ts +99 -0
  133. package/dist/src/lib/snapshots.js +357 -0
  134. package/dist/src/lib/snapshots.js.map +1 -0
  135. package/dist/src/lib/sync-paths.d.ts +72 -0
  136. package/dist/src/lib/sync-paths.js +29 -1
  137. package/dist/src/lib/sync-paths.js.map +1 -1
  138. package/dist/src/lib/template.d.ts +93 -0
  139. package/dist/src/lib/token-inject.d.ts +56 -0
  140. package/dist/src/lib/token-inject.js +204 -0
  141. package/dist/src/lib/token-inject.js.map +1 -0
  142. package/dist/src/lib/toml-database-config.d.ts +132 -0
  143. package/dist/src/lib/toml-params-validator.d.ts +95 -0
  144. package/dist/src/lib/version-check.d.ts +10 -0
  145. package/dist/src/lib/workflow-fragments.d.ts +41 -0
  146. package/dist/src/lib/workflow-toml-validator.d.ts +95 -0
  147. package/dist/src/lib/workflow-toml-validator.js +71 -130
  148. package/dist/src/lib/workflow-toml-validator.js.map +1 -1
  149. package/dist/src/types/index.d.ts +513 -0
  150. package/dist/src/validators.d.ts +64 -0
  151. package/dist/src/validators.js +63 -0
  152. package/dist/src/validators.js.map +1 -0
  153. package/package.json +10 -1
@@ -0,0 +1,1229 @@
1
+ export declare class ApiError extends Error {
2
+ statusCode: number;
3
+ code?: string;
4
+ /**
5
+ * Structured `details` payload from `corsErrorResponse`.
6
+ *
7
+ * The server's error envelope can emit `details` as either:
8
+ * - an array of validation issues (e.g. `[{ path, message }, ...]`) —
9
+ * this is what most legacy endpoints produce, and what sync.ts walks
10
+ * via `Array.isArray(err.details)` / `for (const detail of ...)`.
11
+ * - a record of structured offender fields (e.g. `{ refs, operations,
12
+ * opCount, line, column, ... }`) — emitted by the issue #666 schema
13
+ * gate and consumed by the typed exception subclasses below.
14
+ *
15
+ * Callers must narrow before use: `Array.isArray(err.details)` for the
16
+ * legacy shape, otherwise treat as `Record<string, any>`.
17
+ */
18
+ details?: unknown[] | Record<string, any>;
19
+ constructor(message: string, statusCode: number, code?: string, details?: unknown[] | Record<string, any>);
20
+ }
21
+ export declare class ConflictError extends ApiError {
22
+ serverModifiedAt: string;
23
+ expectedModifiedAt: string;
24
+ constructor(message: string, serverModifiedAt: string, expectedModifiedAt: string, details?: Record<string, any>);
25
+ }
26
+ /**
27
+ * Parsed shape of a non-OK HTTP response body.
28
+ *
29
+ * The server's standard error envelope (corsErrorResponse, `src/utils.ts:348`)
30
+ * writes the message to `error`. A handful of bespoke endpoints (ConflictError,
31
+ * integrations proxy) use `message`. This helper reads both fields so all CLI
32
+ * call sites surface the real server message instead of `HTTP <status>`.
33
+ *
34
+ * `htmlNotFound` is set when the body looks like an HTML 404 page (typically
35
+ * served when an API path is wrong); callers can use it to throw a clearer
36
+ * "API endpoint not found" message regardless of the original status code.
37
+ *
38
+ * `details` can be either an array (legacy validation-issue list) or a
39
+ * structured record (issue #666 schema gate); the schema-feature errors
40
+ * below need the record shape, while the legacy `for (const detail of ...)`
41
+ * walkers in sync.ts assume the array shape.
42
+ */
43
+ export interface ParsedErrorResponse {
44
+ message: string;
45
+ code?: string;
46
+ details?: unknown[] | Record<string, any>;
47
+ /** True when the response body is an HTML error page (e.g. wrong API path). */
48
+ htmlNotFound?: boolean;
49
+ /** Raw parsed JSON envelope (or `undefined` for non-JSON bodies). */
50
+ raw?: any;
51
+ }
52
+ /**
53
+ * Extract a human-readable error message + structured fields from a non-OK
54
+ * HTTP response body. Single source of truth used by every error-handler call
55
+ * site in this file (see issue #684).
56
+ */
57
+ export declare function parseErrorResponse(response: {
58
+ status: number;
59
+ }, text: string, path?: string): ParsedErrorResponse;
60
+ /**
61
+ * Typed exception classes for the database-schema feature (issue #666).
62
+ * Each maps 1:1 to a server `code` value emitted from the op-edit or
63
+ * schema-edit gate. They all extend ApiError so existing catch-all paths
64
+ * continue to work; specialized catch blocks can branch on `instanceof`.
65
+ *
66
+ * Per round-2 addendum A1, `details` is always preserved so callers can
67
+ * extract structured offender lists (refs[], operations[], etc.).
68
+ */
69
+ export declare class SchemaRequiredError extends ApiError {
70
+ constructor(message: string, details?: Record<string, any>);
71
+ }
72
+ export declare class OperationRefError extends ApiError {
73
+ constructor(message: string, details?: Record<string, any>);
74
+ get refs(): Array<{
75
+ ref: string;
76
+ location: string;
77
+ }>;
78
+ }
79
+ export declare class SchemaBreaksOpsError extends ApiError {
80
+ constructor(message: string, details?: Record<string, any>);
81
+ get operations(): Array<{
82
+ operation: string;
83
+ refs: Array<{
84
+ ref: string;
85
+ location: string;
86
+ }>;
87
+ }>;
88
+ }
89
+ export declare class SchemaHasUncheckableOpsError extends ApiError {
90
+ constructor(message: string, details?: Record<string, any>);
91
+ get operations(): Array<{
92
+ operation: string;
93
+ locations: string[];
94
+ }>;
95
+ }
96
+ export declare class TomlParseError extends ApiError {
97
+ constructor(message: string, details?: Record<string, any>);
98
+ get line(): number | undefined;
99
+ get column(): number | undefined;
100
+ }
101
+ export declare class OpsExistError extends ApiError {
102
+ constructor(message: string, details?: Record<string, any>);
103
+ get opCount(): number;
104
+ }
105
+ interface EmailTemplateSummary {
106
+ emailType: string;
107
+ label: string;
108
+ description: string;
109
+ hasOverride: boolean;
110
+ modifiedAt: string | null;
111
+ }
112
+ interface EmailTemplateDetail {
113
+ emailType: string;
114
+ label: string;
115
+ description: string;
116
+ hasOverride: boolean;
117
+ override: {
118
+ templateId: string;
119
+ subject: string;
120
+ htmlBody: string;
121
+ textBody: string;
122
+ createdAt: string;
123
+ modifiedAt: string;
124
+ } | null;
125
+ default: {
126
+ subject: string;
127
+ htmlBody: string;
128
+ textBody: string;
129
+ };
130
+ variables: {
131
+ name: string;
132
+ required: boolean;
133
+ description: string;
134
+ }[];
135
+ }
136
+ interface EmailTemplateUpsertResult {
137
+ emailType: string;
138
+ templateId: string;
139
+ subject: string;
140
+ htmlBody: string;
141
+ textBody: string;
142
+ createdAt: string;
143
+ modifiedAt: string;
144
+ warnings: string[];
145
+ }
146
+ interface AnalyticsTiming {
147
+ total_ms: number;
148
+ wae_queries: number[];
149
+ }
150
+ interface AnalyticsMetricResponse {
151
+ value: number;
152
+ previous: number;
153
+ deltaPct: number;
154
+ _timing: AnalyticsTiming;
155
+ }
156
+ interface AnalyticsGrowthResponse {
157
+ window_days: number;
158
+ retained_users: number;
159
+ new_users: number;
160
+ reactivated_users: number;
161
+ churned_users: number;
162
+ current_active: number;
163
+ previous_active: number;
164
+ deltaPct: number;
165
+ _timing: AnalyticsTiming;
166
+ }
167
+ interface AnalyticsDailyActivePoint {
168
+ day_ts: number;
169
+ day_label: string;
170
+ active_users: number;
171
+ }
172
+ interface AnalyticsDailyActiveResponse {
173
+ window_days: number;
174
+ rows: AnalyticsDailyActivePoint[];
175
+ _timing: AnalyticsTiming;
176
+ }
177
+ interface AnalyticsCohortRow {
178
+ signup_week: number;
179
+ signup_week_label: string;
180
+ cohort_size: number;
181
+ retention: (number | null)[];
182
+ }
183
+ interface AnalyticsCohortResponse {
184
+ weeks: number[];
185
+ rows: AnalyticsCohortRow[];
186
+ averages: (number | null)[];
187
+ _timing: AnalyticsTiming;
188
+ }
189
+ interface AnalyticsUserSummary {
190
+ userUlid: string;
191
+ email: string | null;
192
+ name: string | null;
193
+ firstSeen: string;
194
+ lastSeen: string;
195
+ eventCount: number;
196
+ }
197
+ interface AnalyticsTopUsersResponse {
198
+ windowDays: number;
199
+ limit: number;
200
+ results: AnalyticsUserSummary[];
201
+ _timing: AnalyticsTiming;
202
+ }
203
+ interface AnalyticsUserSearchResponse {
204
+ query: string;
205
+ limit: number;
206
+ results: AnalyticsUserSummary[];
207
+ }
208
+ interface AnalyticsUserDetailResponse {
209
+ user: {
210
+ user_ulid: string;
211
+ email: string | null;
212
+ name: string | null;
213
+ };
214
+ stats: {
215
+ first_seen: string | null;
216
+ last_active: string | null;
217
+ total_events: number;
218
+ days_active: number;
219
+ };
220
+ events_by_action: Array<{
221
+ action: string;
222
+ event_count: number;
223
+ last_occurred: string;
224
+ }>;
225
+ events_by_feature: Array<{
226
+ feature: string;
227
+ event_count: number;
228
+ pct: number;
229
+ }>;
230
+ _timing: AnalyticsTiming;
231
+ }
232
+ interface AnalyticsUserSnapshotResponse {
233
+ snapshot: {
234
+ timestamp: string;
235
+ values: unknown;
236
+ } | null;
237
+ _timing: AnalyticsTiming;
238
+ }
239
+ interface AnalyticsEventRow {
240
+ timestamp: string;
241
+ user_ulid: string;
242
+ action: string;
243
+ feature: string;
244
+ route: string;
245
+ country: string;
246
+ }
247
+ interface AnalyticsEventsResponse {
248
+ page: number;
249
+ page_size: number;
250
+ total_rows: number;
251
+ rows: AnalyticsEventRow[];
252
+ _timing: AnalyticsTiming;
253
+ }
254
+ interface AnalyticsGroupedRow {
255
+ group_value: string;
256
+ raw_group_value: string;
257
+ events: number;
258
+ unique_users: number;
259
+ }
260
+ interface AnalyticsEventsGroupedResponse {
261
+ group_by: string;
262
+ rows: AnalyticsGroupedRow[];
263
+ _timing: AnalyticsTiming;
264
+ }
265
+ interface AnalyticsIntegrationMetric {
266
+ integrationKey: string;
267
+ invocations: number;
268
+ errorRate: number;
269
+ medianDurationMs: number;
270
+ p95DurationMs: number;
271
+ }
272
+ interface AnalyticsIntegrationMetricsResponse {
273
+ windowDays: number;
274
+ integrations: AnalyticsIntegrationMetric[];
275
+ _timing: AnalyticsTiming;
276
+ }
277
+ interface WorkflowAnalyticsSummary {
278
+ workflowKey: string;
279
+ runs: number;
280
+ successRate: number;
281
+ medianDurationMs: number;
282
+ p95: number;
283
+ totalTokens: number;
284
+ }
285
+ interface TopWorkflowsResponse {
286
+ windowDays: number;
287
+ limit: number;
288
+ workflows: WorkflowAnalyticsSummary[];
289
+ _timing: AnalyticsTiming;
290
+ }
291
+ interface PromptAnalyticsSummary {
292
+ promptKey: string;
293
+ executions: number;
294
+ medianDurationMs: number;
295
+ p95DurationMs: number;
296
+ totalTokens: number;
297
+ }
298
+ interface TopPromptsResponse {
299
+ windowDays: number;
300
+ limit: number;
301
+ prompts: PromptAnalyticsSummary[];
302
+ _timing: AnalyticsTiming;
303
+ }
304
+ export declare class ApiClient {
305
+ private credentials;
306
+ constructor();
307
+ private ensureAuthenticated;
308
+ private refreshToken;
309
+ request<T = any>(path: string, options?: RequestInit): Promise<T>;
310
+ get<T = any>(path: string, params?: Record<string, any>): Promise<T>;
311
+ post<T = any>(path: string, body?: any): Promise<T>;
312
+ put<T = any>(path: string, body?: any): Promise<T>;
313
+ patch<T = any>(path: string, body?: any): Promise<T>;
314
+ delete<T = any>(path: string): Promise<T>;
315
+ listApps(): Promise<{
316
+ apps: Array<{
317
+ id: string;
318
+ name: string;
319
+ role?: string;
320
+ }>;
321
+ }>;
322
+ createApp(data: {
323
+ name: string;
324
+ initialAdminEmail?: string;
325
+ }): Promise<any>;
326
+ getApp(appId: string): Promise<{
327
+ id: string;
328
+ name: string;
329
+ }>;
330
+ deleteApp(appId: string): Promise<void>;
331
+ getAppSettings(appId: string): Promise<any>;
332
+ updateAppSettings(appId: string, settings: any): Promise<any>;
333
+ addUserByEmail(appId: string, data: {
334
+ email: string;
335
+ role?: string;
336
+ }): Promise<any>;
337
+ mintTestJwt(appId: string, userId: string, role?: string): Promise<any>;
338
+ rebuildUserSearchText(appId: string): Promise<{
339
+ count: number;
340
+ }>;
341
+ listUsers(appId: string, params?: {
342
+ name?: string;
343
+ email?: string;
344
+ userId?: string;
345
+ limit?: number;
346
+ cursor?: string;
347
+ }): Promise<{
348
+ items: any[];
349
+ nextCursor?: string | null;
350
+ }>;
351
+ removeUser(appId: string, userId: string): Promise<void>;
352
+ updateUserRole(appId: string, userId: string, role: "admin" | "member"): Promise<any>;
353
+ transferOwnership(appId: string, newOwnerEmail: string): Promise<void>;
354
+ transferAdminOwnership(appId: string, adminId: string): Promise<any>;
355
+ listAppAdmins(appId: string): Promise<any[]>;
356
+ addAppAdmin(appId: string, data: {
357
+ adminEmail: string;
358
+ role?: string;
359
+ sendEmail?: boolean;
360
+ loginUrl?: string;
361
+ }): Promise<any>;
362
+ removeAppAdmin(appId: string, adminId: string): Promise<any>;
363
+ listAppAdminInvitations(appId: string): Promise<any[]>;
364
+ deleteAppAdminInvitation(appId: string, invitationId: string): Promise<any>;
365
+ transferDocumentOwnership(appId: string, documentId: string, newOwnerId: string): Promise<void>;
366
+ listInvitations(appId: string, params?: {
367
+ limit?: number;
368
+ cursor?: string;
369
+ }): Promise<{
370
+ items: any[];
371
+ cursor?: string;
372
+ }>;
373
+ createInvitation(appId: string, data: {
374
+ email: string;
375
+ role: "admin" | "member";
376
+ expiresInDays?: number;
377
+ sendEmail?: boolean;
378
+ note?: string;
379
+ }): Promise<any>;
380
+ deleteInvitation(appId: string, invitationId: string): Promise<void>;
381
+ listWaitlist(appId: string): Promise<any[]>;
382
+ inviteWaitlistEntry(appId: string, waitlistId: string, options?: {
383
+ sendEmail?: boolean;
384
+ signupUrl?: string;
385
+ }): Promise<any>;
386
+ bulkInviteWaitlist(appId: string, payload: {
387
+ waitlistIds?: string[];
388
+ count?: number;
389
+ sendEmail?: boolean;
390
+ signupUrl?: string;
391
+ }): Promise<any>;
392
+ removeWaitlistEntry(appId: string, waitlistId: string): Promise<void>;
393
+ listDeferredGrants(appId: string, params?: {
394
+ type?: string;
395
+ email?: string;
396
+ limit?: number;
397
+ }): Promise<{
398
+ grants: any[];
399
+ nextCursor?: string | null;
400
+ }>;
401
+ revokeDeferredGrant(appId: string, deferredId: string, type: string): Promise<any>;
402
+ listIntegrations(appId: string, params?: {
403
+ status?: string;
404
+ cursor?: string;
405
+ limit?: number;
406
+ }): Promise<{
407
+ items: any[];
408
+ nextCursor?: string | null;
409
+ }>;
410
+ getIntegration(appId: string, integrationId: string): Promise<any>;
411
+ createIntegration(appId: string, payload: any): Promise<any>;
412
+ updateIntegration(appId: string, integrationId: string, payload: any, expectedModifiedAt?: string): Promise<any>;
413
+ deleteIntegration(appId: string, integrationId: string, hard?: boolean): Promise<void>;
414
+ testIntegration(appId: string, integrationId: string, payload: any): Promise<any>;
415
+ listIntegrationLogs(appId: string, integrationId: string, params?: {
416
+ limit?: number;
417
+ status?: string;
418
+ from?: string;
419
+ to?: string;
420
+ source?: "user" | "admin" | "test" | "workflow";
421
+ }): Promise<any[]>;
422
+ listWorkflowRunIntegrationLogs(appId: string, runId: string, params?: {
423
+ limit?: number;
424
+ }): Promise<any[]>;
425
+ listIntegrationSecrets(appId: string, integrationId: string, params?: {
426
+ limit?: number;
427
+ }): Promise<any[]>;
428
+ addIntegrationSecret(appId: string, integrationId: string, payload: {
429
+ secretData: any;
430
+ secretSummary?: string;
431
+ }): Promise<any>;
432
+ archiveIntegrationSecret(appId: string, integrationId: string, secretId: string): Promise<any>;
433
+ listAppSecrets(appId: string): Promise<any[]>;
434
+ createAppSecret(appId: string, payload: {
435
+ key: string;
436
+ value: string;
437
+ summary?: string;
438
+ }): Promise<any>;
439
+ updateAppSecret(appId: string, secretId: string, payload: {
440
+ value?: string;
441
+ summary?: string;
442
+ }): Promise<any>;
443
+ upsertAppSecret(appId: string, key: string, payload: {
444
+ value: string;
445
+ summary?: string;
446
+ }): Promise<any>;
447
+ deleteAppSecret(appId: string, secretId: string): Promise<any>;
448
+ listWebhooks(appId: string, params?: {
449
+ status?: string;
450
+ cursor?: string;
451
+ limit?: number;
452
+ }): Promise<{
453
+ items: any[];
454
+ nextCursor?: string | null;
455
+ }>;
456
+ getWebhook(appId: string, webhookId: string): Promise<any>;
457
+ createWebhook(appId: string, payload: any): Promise<any>;
458
+ updateWebhook(appId: string, webhookId: string, payload: any, expectedModifiedAt?: string): Promise<any>;
459
+ deleteWebhook(appId: string, webhookId: string): Promise<void>;
460
+ rotateWebhookSecret(appId: string, webhookId: string, payload: {
461
+ signingSecret: string;
462
+ }): Promise<any>;
463
+ listWebhookEvents(appId: string, webhookId: string, params?: {
464
+ limit?: number;
465
+ }): Promise<any>;
466
+ testWebhook(appId: string, webhookId: string, payload?: any): Promise<any>;
467
+ listCronTriggers(appId: string): Promise<{
468
+ items: any[];
469
+ }>;
470
+ getCronTrigger(appId: string, triggerId: string): Promise<any>;
471
+ createCronTrigger(appId: string, payload: any): Promise<any>;
472
+ updateCronTrigger(appId: string, triggerId: string, payload: any): Promise<any>;
473
+ deleteCronTrigger(appId: string, triggerId: string): Promise<any>;
474
+ pauseCronTrigger(appId: string, triggerId: string): Promise<any>;
475
+ resumeCronTrigger(appId: string, triggerId: string): Promise<any>;
476
+ testCronTrigger(appId: string, triggerId: string): Promise<any>;
477
+ listPrompts(appId: string, params?: {
478
+ status?: string;
479
+ limit?: number;
480
+ cursor?: string;
481
+ }): Promise<{
482
+ items: any[];
483
+ nextCursor?: string | null;
484
+ }>;
485
+ getPrompt(appId: string, promptId: string): Promise<any>;
486
+ createPrompt(appId: string, payload: any): Promise<any>;
487
+ updatePrompt(appId: string, promptId: string, payload: any, expectedModifiedAt?: string): Promise<any>;
488
+ deletePrompt(appId: string, promptId: string, hard?: boolean): Promise<void>;
489
+ executePrompt(appId: string, promptId: string, payload: {
490
+ variables: Record<string, any>;
491
+ modelOverride?: string;
492
+ configId?: string;
493
+ }): Promise<any>;
494
+ previewPrompt(appId: string, promptId: string, payload: {
495
+ variables: Record<string, any>;
496
+ configId?: string;
497
+ }): Promise<any>;
498
+ listPromptConfigs(appId: string, promptId: string): Promise<{
499
+ items: any[];
500
+ }>;
501
+ getPromptConfig(appId: string, promptId: string, configId: string): Promise<any>;
502
+ createPromptConfig(appId: string, promptId: string, payload: any): Promise<any>;
503
+ updatePromptConfig(appId: string, promptId: string, configId: string, payload: any): Promise<any>;
504
+ activatePromptConfig(appId: string, promptId: string, configId: string): Promise<any>;
505
+ duplicatePromptConfig(appId: string, promptId: string, configId: string, payload?: {
506
+ configName?: string;
507
+ description?: string;
508
+ }): Promise<any>;
509
+ listScripts(appId: string): Promise<{
510
+ items: any[];
511
+ }>;
512
+ getScript(appId: string, scriptId: string): Promise<any>;
513
+ createScript(appId: string, payload: {
514
+ name: string;
515
+ body: string;
516
+ description?: string;
517
+ }): Promise<any>;
518
+ /**
519
+ * Push a new body for an existing script by creating a new `ScriptConfig`
520
+ * and activating it (the prompt-model "edit → activate" flow). Referencing
521
+ * workflows pick up the new body on their next run with no fan-out. The
522
+ * config name is unique per script, so we mint a timestamped name.
523
+ */
524
+ pushScriptBody(appId: string, scriptId: string, body: string): Promise<any>;
525
+ deleteScript(appId: string, scriptId: string): Promise<void>;
526
+ getPromptSchema(appId: string, promptId: string): Promise<{
527
+ promptId: string;
528
+ promptKey: string;
529
+ displayName: string;
530
+ inputSchema: any;
531
+ inputVariables: string[];
532
+ outputSchema: any;
533
+ activeConfigId: string | null;
534
+ activeConfigName: string | null;
535
+ }>;
536
+ listTestCases(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string): Promise<{
537
+ items: any[];
538
+ }>;
539
+ getTestCase(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, testCaseId: string): Promise<any>;
540
+ createTestCase(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, payload: {
541
+ name: string;
542
+ inputVariables: Record<string, any>;
543
+ expectedOutputPattern?: string;
544
+ expectedOutputContains?: string[];
545
+ expectedJsonSubset?: Record<string, any>;
546
+ configId?: string;
547
+ evaluatorPromptId?: string;
548
+ evaluatorConfigId?: string;
549
+ }): Promise<any>;
550
+ updateTestCase(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, testCaseId: string, payload: {
551
+ name?: string;
552
+ inputVariables?: Record<string, any>;
553
+ expectedOutputPattern?: string | null;
554
+ expectedOutputContains?: string[] | null;
555
+ expectedJsonSubset?: Record<string, any> | null;
556
+ configId?: string | null;
557
+ evaluatorPromptId?: string | null;
558
+ evaluatorConfigId?: string | null;
559
+ }): Promise<any>;
560
+ deleteTestCase(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, testCaseId: string): Promise<void>;
561
+ listTestCaseAttachments(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, testCaseId: string): Promise<{
562
+ attachments: Array<{
563
+ filename: string;
564
+ contentType: string;
565
+ size: number;
566
+ r2Key: string;
567
+ }>;
568
+ }>;
569
+ uploadTestCaseAttachment(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, testCaseId: string, filename: string, data: Buffer, contentType: string): Promise<{
570
+ success: boolean;
571
+ attachment: {
572
+ filename: string;
573
+ contentType: string;
574
+ size: number;
575
+ r2Key: string;
576
+ };
577
+ }>;
578
+ downloadTestCaseAttachment(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, testCaseId: string, filename: string): Promise<{
579
+ data: Buffer;
580
+ contentType: string;
581
+ }>;
582
+ deleteTestCaseAttachment(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, testCaseId: string, filename: string): Promise<{
583
+ success: boolean;
584
+ deleted: boolean;
585
+ }>;
586
+ executeBlockTest(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, payload: {
587
+ variables?: Record<string, any>;
588
+ testCaseId?: string;
589
+ configId?: string;
590
+ comparisonGroup?: string;
591
+ }): Promise<any>;
592
+ runAllTestCases(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, payload?: {
593
+ overrideConfigId?: string;
594
+ comparisonGroup?: string;
595
+ testCaseIds?: string[];
596
+ }): Promise<any>;
597
+ listTestRuns(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, params?: {
598
+ limit?: number;
599
+ comparisonGroup?: string;
600
+ }): Promise<{
601
+ items: any[];
602
+ }>;
603
+ listWorkflows(appId: string, params?: {
604
+ status?: string;
605
+ limit?: number;
606
+ cursor?: string;
607
+ }): Promise<{
608
+ items: any[];
609
+ nextCursor?: string | null;
610
+ }>;
611
+ getWorkflow(appId: string, workflowId: string): Promise<any>;
612
+ createWorkflow(appId: string, payload: any): Promise<any>;
613
+ updateWorkflow(appId: string, workflowId: string, payload: any, expectedModifiedAt?: string): Promise<any>;
614
+ deleteWorkflow(appId: string, workflowId: string): Promise<void>;
615
+ updateWorkflowDraft(appId: string, workflowId: string, payload: any): Promise<any>;
616
+ publishWorkflow(appId: string, workflowId: string): Promise<any>;
617
+ previewWorkflow(appId: string, workflowId: string, payload: {
618
+ rootInput?: object;
619
+ meta?: object;
620
+ configId?: string;
621
+ useDraft?: boolean;
622
+ preferActive?: boolean;
623
+ }): Promise<{
624
+ instanceId: string;
625
+ usingDraft?: boolean;
626
+ source?: "config" | "active" | "draft" | null;
627
+ configName?: string | null;
628
+ configId?: string | null;
629
+ warning?: string;
630
+ }>;
631
+ getPreviewStatus(appId: string, workflowId: string, instanceId: string): Promise<any>;
632
+ listWorkflowRuns(appId: string, workflowId: string, params?: {
633
+ status?: string;
634
+ limit?: number;
635
+ cursor?: string;
636
+ forward?: boolean;
637
+ }): Promise<{
638
+ items: any[];
639
+ cursor?: string | null;
640
+ }>;
641
+ getWorkflowRunStatus(appId: string, workflowId: string, runId: string): Promise<any>;
642
+ getWorkflowStepRuns(appId: string, workflowId: string, runId: string): Promise<{
643
+ items: any[];
644
+ }>;
645
+ getWorkflowAnalytics(appId: string, params?: {
646
+ windowDays?: number;
647
+ }): Promise<any>;
648
+ getTopWorkflows(appId: string, params?: {
649
+ windowDays?: number;
650
+ limit?: number;
651
+ }): Promise<any>;
652
+ listWorkflowConfigs(appId: string, workflowId: string): Promise<{
653
+ items: any[];
654
+ }>;
655
+ getWorkflowConfig(appId: string, workflowId: string, configId: string): Promise<any>;
656
+ createWorkflowConfig(appId: string, workflowId: string, payload: {
657
+ configName: string;
658
+ description?: string;
659
+ steps: any[];
660
+ }): Promise<any>;
661
+ updateWorkflowConfig(appId: string, workflowId: string, configId: string, payload: {
662
+ configName?: string;
663
+ description?: string;
664
+ steps?: any[];
665
+ status?: string;
666
+ }): Promise<any>;
667
+ archiveWorkflowConfig(appId: string, workflowId: string, configId: string): Promise<any>;
668
+ activateWorkflowConfig(appId: string, workflowId: string, configId: string): Promise<any>;
669
+ duplicateWorkflowConfig(appId: string, workflowId: string, configId: string, payload?: {
670
+ configName?: string;
671
+ }): Promise<any>;
672
+ getAnalyticsTopUsers(appId: string, params?: {
673
+ windowDays?: number;
674
+ limit?: number;
675
+ }): Promise<AnalyticsTopUsersResponse>;
676
+ getAnalyticsIntegrationMetrics(appId: string, params?: {
677
+ windowDays?: number;
678
+ }): Promise<AnalyticsIntegrationMetricsResponse>;
679
+ getAnalyticsOverviewDau(appId: string): Promise<AnalyticsMetricResponse>;
680
+ getAnalyticsOverviewWau(appId: string): Promise<AnalyticsMetricResponse>;
681
+ getAnalyticsOverviewMau(appId: string): Promise<AnalyticsMetricResponse>;
682
+ getAnalyticsOverviewGrowth(appId: string, params?: {
683
+ windowDays?: number;
684
+ }): Promise<AnalyticsGrowthResponse>;
685
+ getAnalyticsDailyActive(appId: string, params?: {
686
+ windowDays?: number;
687
+ }): Promise<AnalyticsDailyActiveResponse>;
688
+ getAnalyticsRollingActive(appId: string, params?: {
689
+ windowDays?: number;
690
+ }): Promise<AnalyticsDailyActiveResponse>;
691
+ getAnalyticsCohortRetention(appId: string): Promise<AnalyticsCohortResponse>;
692
+ getAnalyticsUserSearch(appId: string, params: {
693
+ q: string;
694
+ limit?: number;
695
+ }): Promise<AnalyticsUserSearchResponse>;
696
+ getAnalyticsUserDetail(appId: string, userUlid: string): Promise<AnalyticsUserDetailResponse>;
697
+ getAnalyticsUserSnapshot(appId: string, userUlid: string): Promise<AnalyticsUserSnapshotResponse>;
698
+ getAnalyticsEvents(appId: string, params?: {
699
+ windowDays?: number;
700
+ page?: number;
701
+ [key: string]: any;
702
+ }): Promise<AnalyticsEventsResponse>;
703
+ getAnalyticsEventsGrouped(appId: string, params?: {
704
+ groupBy?: string;
705
+ windowDays?: number;
706
+ [key: string]: any;
707
+ }): Promise<AnalyticsEventsGroupedResponse>;
708
+ getAnalyticsTopWorkflows(appId: string, params?: {
709
+ windowDays?: number;
710
+ limit?: number;
711
+ }): Promise<TopWorkflowsResponse>;
712
+ getAnalyticsTopPrompts(appId: string, params?: {
713
+ windowDays?: number;
714
+ limit?: number;
715
+ }): Promise<TopPromptsResponse>;
716
+ listAllAdmins(params?: {
717
+ limit?: number;
718
+ cursor?: string;
719
+ }): Promise<any>;
720
+ searchAdminByEmail(email: string): Promise<any>;
721
+ getAdminApps(email: string): Promise<any>;
722
+ updateAdminSettings(adminId: string, data: {
723
+ appCreationLimit?: number;
724
+ disabled?: boolean;
725
+ role?: "admin" | "super-admin";
726
+ }): Promise<any>;
727
+ reindexAdmin(adminId: string): Promise<void>;
728
+ listAllAdminInvitations(): Promise<any[]>;
729
+ createGlobalAdminInvitation(data: {
730
+ email: string;
731
+ appCreationLimit?: number;
732
+ expiresInDays?: number;
733
+ }): Promise<any>;
734
+ deleteGlobalAdminInvitation(invitationId: string): Promise<void>;
735
+ listPromptCatalog(params?: {
736
+ status?: string;
737
+ limit?: number;
738
+ cursor?: string;
739
+ }): Promise<any>;
740
+ getPromptCatalogItem(catalogId: string): Promise<any>;
741
+ createPromptCatalogItem(payload: any): Promise<any>;
742
+ updatePromptCatalogItem(catalogId: string, payload: any): Promise<any>;
743
+ deletePromptCatalogItem(catalogId: string): Promise<void>;
744
+ listIntegrationCatalog(params?: {
745
+ status?: string;
746
+ limit?: number;
747
+ cursor?: string;
748
+ }): Promise<any>;
749
+ getIntegrationCatalogItem(catalogId: string): Promise<any>;
750
+ createIntegrationCatalogItem(payload: any): Promise<any>;
751
+ updateIntegrationCatalogItem(catalogId: string, payload: any): Promise<any>;
752
+ deleteIntegrationCatalogItem(catalogId: string): Promise<void>;
753
+ listLlmModels(provider?: string): Promise<{
754
+ models: Array<{
755
+ id: string;
756
+ name: string;
757
+ context_length?: number;
758
+ pricing?: any;
759
+ }>;
760
+ defaultModel?: string;
761
+ cachedAt?: string;
762
+ }>;
763
+ generatePrompt(payload: {
764
+ description: string;
765
+ generateOutputSchema?: boolean;
766
+ }): Promise<any>;
767
+ generateEvaluator(payload: {
768
+ appId: string;
769
+ promptId: string;
770
+ }): Promise<any>;
771
+ generateWorkflowEvaluator(payload: {
772
+ appId: string;
773
+ workflowId: string;
774
+ }): Promise<any>;
775
+ startBatchTests(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, payload?: {
776
+ comparisonGroup?: string;
777
+ overrideConfigId?: string;
778
+ testCaseIds?: string[];
779
+ }): Promise<{
780
+ batchId: string;
781
+ totalTests: number;
782
+ instanceIds: string[];
783
+ errors?: any[];
784
+ }>;
785
+ getBatchTestStatus(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, batchId: string): Promise<{
786
+ status: string;
787
+ batchId: string;
788
+ completed: number;
789
+ passed: number;
790
+ failed: number;
791
+ results: Array<{
792
+ testCaseId: string;
793
+ runId: string;
794
+ status: string;
795
+ verificationPassed: boolean;
796
+ durationMs?: number;
797
+ verificationDetails?: any;
798
+ startedAt?: string;
799
+ endedAt?: string;
800
+ }>;
801
+ }>;
802
+ cancelBatchTests(appId: string, blockType: "prompt" | "integration" | "workflow", blockId: string, batchId: string, instanceIds: string[]): Promise<{
803
+ batchId: string;
804
+ terminated: string[];
805
+ errors?: any[];
806
+ }>;
807
+ getComparisonGroup(appId: string, group: string): Promise<{
808
+ comparisonGroup: string;
809
+ runs: any[];
810
+ }>;
811
+ listEmailTemplates(appId: string): Promise<{
812
+ templates: EmailTemplateSummary[];
813
+ }>;
814
+ getEmailTemplate(appId: string, emailType: string): Promise<EmailTemplateDetail>;
815
+ upsertEmailTemplate(appId: string, emailType: string, payload: {
816
+ subject: string;
817
+ htmlBody: string;
818
+ textBody: string;
819
+ }): Promise<EmailTemplateUpsertResult>;
820
+ deleteEmailTemplate(appId: string, emailType: string): Promise<{
821
+ success: boolean;
822
+ }>;
823
+ testEmailTemplate(appId: string, emailType: string, payload?: {
824
+ subject: string;
825
+ htmlBody: string;
826
+ textBody: string;
827
+ }): Promise<{
828
+ success: boolean;
829
+ sentTo: string;
830
+ error?: string;
831
+ }>;
832
+ createToken(appId: string, data: {
833
+ name: string;
834
+ ttl?: string;
835
+ userId?: string;
836
+ }): Promise<{
837
+ token: string;
838
+ tokenId: string;
839
+ name: string;
840
+ expiresAt: string | null;
841
+ createdAt: string;
842
+ warning: string;
843
+ }>;
844
+ listTokens(appId: string, params?: {
845
+ userId?: string;
846
+ }): Promise<Array<{
847
+ tokenId: string;
848
+ name: string;
849
+ userId: string;
850
+ expiresAt: string | null;
851
+ lastUsedAt: string | null;
852
+ createdAt: string;
853
+ createdBy: string;
854
+ }>>;
855
+ getToken(appId: string, tokenId: string): Promise<{
856
+ tokenId: string;
857
+ name: string;
858
+ userId: string;
859
+ expiresAt: string | null;
860
+ lastUsedAt: string | null;
861
+ createdAt: string;
862
+ createdBy: string;
863
+ revokedAt: string | null;
864
+ }>;
865
+ revokeToken(appId: string, tokenId: string): Promise<{
866
+ success: boolean;
867
+ message: string;
868
+ }>;
869
+ listDatabases(appId: string): Promise<any[]>;
870
+ createDatabase(appId: string, data: {
871
+ title: string;
872
+ databaseType?: string;
873
+ metadata?: Record<string, any> | string;
874
+ }): Promise<any>;
875
+ getDatabase(appId: string, databaseId: string): Promise<any>;
876
+ updateDatabase(appId: string, databaseId: string, data: Record<string, any>): Promise<any>;
877
+ deleteDatabase(appId: string, databaseId: string): Promise<void>;
878
+ /**
879
+ * Read a database's CEL context dict.
880
+ *
881
+ * The HTTP path stays `/metadata` because the wire field name is still
882
+ * `metadata`; only the client/CLI-facing helper names were reframed.
883
+ */
884
+ getDatabaseCelContext(appId: string, databaseId: string): Promise<any>;
885
+ /** Update a database's CEL context dict (merge with existing). */
886
+ updateDatabaseCelContext(appId: string, databaseId: string, celContext: Record<string, any>): Promise<any>;
887
+ /** @deprecated Use {@link getDatabaseCelContext} instead. */
888
+ getDatabaseMetadata(appId: string, databaseId: string): Promise<any>;
889
+ /** @deprecated Use {@link updateDatabaseCelContext} instead. */
890
+ updateDatabaseMetadata(appId: string, databaseId: string, metadata: Record<string, any>): Promise<any>;
891
+ listDatabasePermissions(appId: string, databaseId: string): Promise<any[]>;
892
+ addDatabaseManager(appId: string, databaseId: string, userId: string): Promise<any>;
893
+ removeDatabaseManager(appId: string, databaseId: string, userId: string): Promise<any>;
894
+ /** @deprecated Use {@link addDatabaseManager} instead. */
895
+ grantDatabasePermission(appId: string, databaseId: string, data: {
896
+ userId: string;
897
+ permission: "manager";
898
+ }): Promise<any>;
899
+ /** @deprecated Use {@link removeDatabaseManager} instead. */
900
+ revokeDatabasePermission(appId: string, databaseId: string, userId: string): Promise<any>;
901
+ listDatabaseModels(appId: string, databaseId: string): Promise<any>;
902
+ describeDatabaseModel(appId: string, databaseId: string, modelName: string): Promise<any>;
903
+ queryDatabaseRecords(appId: string, databaseId: string, modelName: string, queryOptions?: {
904
+ filter?: Record<string, any>;
905
+ limit?: number;
906
+ cursor?: string;
907
+ }): Promise<any>;
908
+ listDatabaseOperations(appId: string, databaseId: string): Promise<any[]>;
909
+ executeDatabaseOperation(appId: string, databaseId: string, operationName: string, data?: {
910
+ params?: Record<string, any>;
911
+ limit?: number;
912
+ cursor?: string;
913
+ direction?: number;
914
+ }, token?: string, options?: {
915
+ timing?: boolean;
916
+ }): Promise<any>;
917
+ /**
918
+ * Execute a registered batch (bulk) database operation. Posts a chunk of
919
+ * items to the canonical `operations/:name/batch` endpoint (the same one the
920
+ * client library's `executeBatch` uses — NOT the deprecated `import-bulk`
921
+ * alias). Used by `databases import-csv`.
922
+ *
923
+ * @returns `{ imported, failed }` — DO-level write outcome counts. Per-item
924
+ * validation/access failures abort the whole chunk with a 4xx (thrown).
925
+ */
926
+ executeBatch(appId: string, databaseId: string, operationName: string, batch: Array<{
927
+ params: Record<string, any>;
928
+ }>): Promise<{
929
+ imported: number;
930
+ failed: number;
931
+ }>;
932
+ /**
933
+ * Make a request using a specific JWT token instead of the CLI's credentials.
934
+ * Used for executing operations as a different user.
935
+ */
936
+ requestWithToken<T = any>(path: string, token: string, options?: RequestInit): Promise<T>;
937
+ listDatabaseIndexes(appId: string, databaseId: string, modelName?: string): Promise<any>;
938
+ registerDatabaseIndex(appId: string, databaseId: string, data: {
939
+ modelName: string;
940
+ fieldName: string;
941
+ fieldType: string;
942
+ unique?: boolean;
943
+ }): Promise<any>;
944
+ dropDatabaseIndex(appId: string, databaseId: string, data: {
945
+ modelName: string;
946
+ fieldName: string;
947
+ }): Promise<any>;
948
+ /**
949
+ * Issue #974: back-provision an existing database instance's schema-declared
950
+ * unique indexes by reading its type schema and registering any declared-but-
951
+ * missing unique index. Idempotent.
952
+ */
953
+ reindexDatabaseFromSchema(appId: string, databaseId: string): Promise<{
954
+ ok: boolean;
955
+ registered: number;
956
+ skipped?: boolean;
957
+ reason?: string;
958
+ databaseType?: string;
959
+ }>;
960
+ listDatabaseTypeConfigs(appId: string): Promise<any[]>;
961
+ getDatabaseTypeConfig(appId: string, databaseType: string): Promise<any>;
962
+ createDatabaseTypeConfig(appId: string, data: {
963
+ databaseType: string;
964
+ ruleSetId?: string | null;
965
+ triggers?: Record<string, any> | null;
966
+ metadataAccess?: string | null;
967
+ defaultAccess?: string | null;
968
+ autoPopulatedFields?: Record<string, any> | null;
969
+ timestamps?: Record<string, any> | null;
970
+ schema?: string | null;
971
+ }): Promise<any>;
972
+ updateDatabaseTypeConfig(appId: string, databaseType: string, data: {
973
+ ruleSetId?: string | null;
974
+ triggers?: Record<string, any> | null;
975
+ metadataAccess?: string | null;
976
+ defaultAccess?: string | null;
977
+ autoPopulatedFields?: Record<string, any> | null;
978
+ timestamps?: Record<string, any> | null;
979
+ schema?: string | null;
980
+ pendingOpDeletes?: string[];
981
+ finalOpNames?: string[];
982
+ }, expectedModifiedAt?: string, options?: {
983
+ dryRun?: boolean;
984
+ acceptWarnings?: boolean;
985
+ }): Promise<any>;
986
+ deleteDatabaseTypeConfig(appId: string, databaseType: string): Promise<any>;
987
+ /**
988
+ * Issue #666 Phase 3: ask the server to scaffold a TOML schema from
989
+ * existing ops + DO field introspection. Read-only — does NOT persist.
990
+ */
991
+ scaffoldDatabaseTypeSchema(appId: string, databaseType: string): Promise<{
992
+ schema: string;
993
+ }>;
994
+ listDatabaseTypeOperations(appId: string, databaseType: string): Promise<any[]>;
995
+ getDatabaseTypeOperation(appId: string, databaseType: string, name: string): Promise<any>;
996
+ createDatabaseTypeOperation(appId: string, databaseType: string, data: {
997
+ name: string;
998
+ type: string;
999
+ modelName: string;
1000
+ access?: string | null;
1001
+ definition: Record<string, any>;
1002
+ params?: Record<string, any> | null;
1003
+ }, options?: {
1004
+ dryRun?: boolean;
1005
+ schemaOverride?: string | null;
1006
+ defaultAccess?: string | null;
1007
+ }): Promise<any>;
1008
+ updateDatabaseTypeOperation(appId: string, databaseType: string, name: string, data: Record<string, any>, expectedModifiedAt?: string, options?: {
1009
+ dryRun?: boolean;
1010
+ schemaOverride?: string | null;
1011
+ }): Promise<any>;
1012
+ deleteDatabaseTypeOperation(appId: string, databaseType: string, name: string): Promise<any>;
1013
+ listDatabaseTypeSubscriptions(appId: string, databaseType: string): Promise<any[]>;
1014
+ getDatabaseTypeSubscription(appId: string, databaseType: string, subscriptionKey: string): Promise<any>;
1015
+ createDatabaseTypeSubscription(appId: string, databaseType: string, data: {
1016
+ subscriptionKey: string;
1017
+ displayName: string;
1018
+ modelName: string;
1019
+ filter: string;
1020
+ access: string;
1021
+ description?: string | null;
1022
+ select?: string[] | null;
1023
+ emit?: string[] | null;
1024
+ params?: Record<string, any> | null;
1025
+ status?: string;
1026
+ }): Promise<any>;
1027
+ updateDatabaseTypeSubscription(appId: string, databaseType: string, subscriptionKey: string, data: Record<string, any>): Promise<any>;
1028
+ deleteDatabaseTypeSubscription(appId: string, databaseType: string, subscriptionKey: string): Promise<any>;
1029
+ listGroups(appId: string, params?: {
1030
+ type?: string;
1031
+ limit?: number;
1032
+ cursor?: string;
1033
+ }): Promise<{
1034
+ items: any[];
1035
+ cursor?: string;
1036
+ }>;
1037
+ createGroup(appId: string, data: {
1038
+ groupType: string;
1039
+ groupId: string;
1040
+ name: string;
1041
+ description?: string;
1042
+ }): Promise<any>;
1043
+ getGroup(appId: string, groupType: string, groupId: string): Promise<any>;
1044
+ updateGroup(appId: string, groupType: string, groupId: string, data: {
1045
+ name?: string;
1046
+ description?: string;
1047
+ }): Promise<any>;
1048
+ deleteGroup(appId: string, groupType: string, groupId: string): Promise<any>;
1049
+ listGroupMembers(appId: string, groupType: string, groupId: string): Promise<{
1050
+ items: any[];
1051
+ cursor?: string;
1052
+ }>;
1053
+ addGroupMember(appId: string, groupType: string, groupId: string, data: {
1054
+ userId: string;
1055
+ }): Promise<any>;
1056
+ removeGroupMember(appId: string, groupType: string, groupId: string, userId: string): Promise<any>;
1057
+ listGroupDocuments(appId: string, groupType: string, groupId: string): Promise<any[]>;
1058
+ listUserMemberships(appId: string, userId: string): Promise<any[]>;
1059
+ listDocumentGroupPermissions(appId: string, documentId: string): Promise<any[]>;
1060
+ grantDocumentGroupPermission(appId: string, documentId: string, data: {
1061
+ groupType: string;
1062
+ groupId: string;
1063
+ permission: string;
1064
+ }): Promise<any>;
1065
+ revokeDocumentGroupPermission(appId: string, documentId: string, groupType: string, groupId: string): Promise<any>;
1066
+ listCollections(appId: string, params?: {
1067
+ limit?: number;
1068
+ cursor?: string;
1069
+ }): Promise<{
1070
+ items: any[];
1071
+ nextCursor?: string | null;
1072
+ }>;
1073
+ listAllCollections(appId: string, params?: {
1074
+ limit?: number;
1075
+ cursor?: string;
1076
+ }): Promise<{
1077
+ items: any[];
1078
+ nextCursor?: string | null;
1079
+ }>;
1080
+ createCollection(appId: string, data: {
1081
+ name: string;
1082
+ description?: string;
1083
+ }): Promise<any>;
1084
+ getCollection(appId: string, collectionId: string): Promise<any>;
1085
+ updateCollection(appId: string, collectionId: string, data: {
1086
+ name?: string;
1087
+ description?: string;
1088
+ }): Promise<any>;
1089
+ deleteCollection(appId: string, collectionId: string): Promise<any>;
1090
+ listCollectionDocuments(appId: string, collectionId: string, params?: {
1091
+ limit?: number;
1092
+ cursor?: string;
1093
+ }): Promise<{
1094
+ items: any[];
1095
+ nextCursor?: string | null;
1096
+ }>;
1097
+ addCollectionDocument(appId: string, collectionId: string, data: {
1098
+ documentId: string;
1099
+ }): Promise<any>;
1100
+ removeCollectionDocument(appId: string, collectionId: string, documentId: string): Promise<any>;
1101
+ listCollectionsForDocument(appId: string, documentId: string, params?: {
1102
+ limit?: number;
1103
+ cursor?: string;
1104
+ }): Promise<{
1105
+ items: any[];
1106
+ nextCursor?: string | null;
1107
+ }>;
1108
+ getCollectionAccess(appId: string, collectionId: string): Promise<any>;
1109
+ grantCollectionGroupPermission(appId: string, collectionId: string, data: {
1110
+ groupType: string;
1111
+ groupId: string;
1112
+ permission: string;
1113
+ }): Promise<any>;
1114
+ revokeCollectionGroupPermission(appId: string, collectionId: string, groupType: string, groupId: string): Promise<any>;
1115
+ addCollectionMember(appId: string, collectionId: string, data: {
1116
+ userId: string;
1117
+ permission: string;
1118
+ }): Promise<any>;
1119
+ removeCollectionMember(appId: string, collectionId: string, userId: string): Promise<any>;
1120
+ listCollectionTypeConfigs(appId: string): Promise<any[]>;
1121
+ getCollectionTypeConfig(appId: string, collectionType: string): Promise<any>;
1122
+ createCollectionTypeConfig(appId: string, data: {
1123
+ collectionType: string;
1124
+ ruleSetId?: string;
1125
+ }): Promise<any>;
1126
+ updateCollectionTypeConfig(appId: string, collectionType: string, data: {
1127
+ ruleSetId?: string | null;
1128
+ }, expectedModifiedAt?: string): Promise<any>;
1129
+ deleteCollectionTypeConfig(appId: string, collectionType: string): Promise<any>;
1130
+ listRuleSets(appId: string, params?: {
1131
+ resourceType?: string;
1132
+ }): Promise<any[]>;
1133
+ createRuleSet(appId: string, data: {
1134
+ name: string;
1135
+ resourceType: string;
1136
+ rules: Record<string, any>;
1137
+ description?: string;
1138
+ }): Promise<any>;
1139
+ getRuleSet(appId: string, ruleSetId: string): Promise<any>;
1140
+ updateRuleSet(appId: string, ruleSetId: string, data: {
1141
+ name?: string;
1142
+ description?: string;
1143
+ rules?: Record<string, any>;
1144
+ }, expectedModifiedAt?: string): Promise<any>;
1145
+ deleteRuleSet(appId: string, ruleSetId: string): Promise<any>;
1146
+ getRuleSetSchema(appId: string): Promise<any>;
1147
+ testRuleSet(appId: string, ruleSetId: string, data: any): Promise<any>;
1148
+ debugRuleSet(appId: string, data: any): Promise<any>;
1149
+ listGroupTypeConfigs(appId: string): Promise<any[]>;
1150
+ getGroupTypeConfig(appId: string, groupType: string): Promise<any>;
1151
+ createGroupTypeConfig(appId: string, data: {
1152
+ groupType: string;
1153
+ ruleSetId?: string;
1154
+ autoAddCreator?: boolean;
1155
+ }): Promise<any>;
1156
+ updateGroupTypeConfig(appId: string, groupType: string, data: {
1157
+ ruleSetId?: string | null;
1158
+ autoAddCreator?: boolean;
1159
+ }, expectedModifiedAt?: string): Promise<any>;
1160
+ deleteGroupTypeConfig(appId: string, groupType: string): Promise<any>;
1161
+ exportDocumentState(appId: string, documentId: string): Promise<{
1162
+ state: string;
1163
+ byteLength: number;
1164
+ documentId: string;
1165
+ }>;
1166
+ importDocumentState(appId: string, documentId: string, stateBase64: string): Promise<any>;
1167
+ getDocument(appId: string, documentId: string): Promise<any>;
1168
+ createDocument(appId: string, data: {
1169
+ title: string;
1170
+ documentId?: string;
1171
+ tags?: string[];
1172
+ createdBy?: string;
1173
+ }): Promise<any>;
1174
+ listDocumentPermissions(appId: string, documentId: string): Promise<any[]>;
1175
+ grantDocumentPermission(appId: string, documentId: string, permissions: Array<{
1176
+ userId: string;
1177
+ permission: string;
1178
+ }>): Promise<any>;
1179
+ listDocumentInvitations(appId: string, documentId: string): Promise<any[]>;
1180
+ listDocumentBlobs(appId: string, documentId: string): Promise<any[]>;
1181
+ downloadBlob(appId: string, documentId: string, blobId: string): Promise<Buffer>;
1182
+ uploadBlob(appId: string, documentId: string, blobId: string, data: Buffer, meta: {
1183
+ filename: string;
1184
+ contentType: string;
1185
+ sha256: string;
1186
+ }): Promise<any>;
1187
+ listDocumentAliases(appId: string, documentId: string): Promise<any[]>;
1188
+ setDocumentAlias(appId: string, aliasScope: string, aliasKey: string, documentId: string, ownerUserId?: string, mustNotExist?: boolean): Promise<any>;
1189
+ findUserByEmail(appId: string, email: string): Promise<any | null>;
1190
+ listAdminDocuments(appId: string, userId: string): Promise<any[]>;
1191
+ saveDatabaseRecord(appId: string, databaseId: string, modelName: string, id: string, data: any): Promise<any>;
1192
+ batchDatabaseRecords(appId: string, databaseId: string, operations: any[]): Promise<any>;
1193
+ deleteDatabaseRecord(appId: string, databaseId: string, modelName: string, id: string): Promise<any>;
1194
+ batchDeleteDatabaseRecords(appId: string, databaseId: string, operations: {
1195
+ op: "delete";
1196
+ modelName: string;
1197
+ id: string;
1198
+ }[]): Promise<any>;
1199
+ listDatabaseUniqueConstraints(appId: string, databaseId: string): Promise<any[]>;
1200
+ registerDatabaseUniqueConstraint(appId: string, databaseId: string, constraint: {
1201
+ modelName: string;
1202
+ constraintName: string;
1203
+ fields: string[];
1204
+ }): Promise<any>;
1205
+ listBlobBuckets(appId: string): Promise<{
1206
+ items: any[];
1207
+ }>;
1208
+ createBlobBucket(appId: string, payload: any): Promise<any>;
1209
+ getBlobBucket(appId: string, bucketIdOrKey: string): Promise<any>;
1210
+ updateBlobBucket(appId: string, bucketIdOrKey: string, payload: any): Promise<any>;
1211
+ deleteBlobBucket(appId: string, bucketIdOrKey: string): Promise<any>;
1212
+ listBucketBlobs(appId: string, bucketIdOrKey: string, params?: {
1213
+ cursor?: string;
1214
+ limit?: number;
1215
+ }): Promise<{
1216
+ items: any[];
1217
+ cursor?: string;
1218
+ }>;
1219
+ uploadBucketBlob(appId: string, bucketIdOrKey: string, data: Buffer, meta: {
1220
+ filename: string;
1221
+ contentType: string;
1222
+ tags?: string[];
1223
+ }): Promise<any>;
1224
+ downloadBucketBlob(appId: string, bucketIdOrKey: string, blobId: string): Promise<Buffer>;
1225
+ deleteBucketBlob(appId: string, bucketIdOrKey: string, blobId: string): Promise<any>;
1226
+ getBucketBlobSignedUrl(appId: string, bucketIdOrKey: string, blobId: string, expiresInSeconds?: number): Promise<any>;
1227
+ }
1228
+ export declare const apiClient: ApiClient;
1229
+ export {};