@revoengine/cli 1.0.10 → 1.0.11

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 (79) hide show
  1. package/README.md +312 -33
  2. package/dist/src/cli.js +58 -7
  3. package/dist/src/client.d.ts +356 -5
  4. package/dist/src/client.js +803 -19
  5. package/dist/src/commands/auth.js +4 -2
  6. package/dist/src/commands/component.js +260 -141
  7. package/dist/src/commands/database-schemas.d.ts +2 -0
  8. package/dist/src/commands/database-schemas.js +188 -0
  9. package/dist/src/commands/database-views.d.ts +2 -0
  10. package/dist/src/commands/database-views.js +123 -0
  11. package/dist/src/commands/endpoints.js +114 -0
  12. package/dist/src/commands/env.js +44 -24
  13. package/dist/src/commands/events.d.ts +2 -0
  14. package/dist/src/commands/events.js +146 -0
  15. package/dist/src/commands/groups.d.ts +2 -0
  16. package/dist/src/commands/groups.js +169 -0
  17. package/dist/src/commands/index.d.ts +8 -0
  18. package/dist/src/commands/index.js +8 -0
  19. package/dist/src/commands/job-templates.d.ts +2 -0
  20. package/dist/src/commands/job-templates.js +101 -0
  21. package/dist/src/commands/metadata.js +29 -7
  22. package/dist/src/commands/project.js +10 -3
  23. package/dist/src/commands/role-groups.d.ts +2 -0
  24. package/dist/src/commands/role-groups.js +152 -0
  25. package/dist/src/commands/schedules.d.ts +2 -0
  26. package/dist/src/commands/schedules.js +141 -0
  27. package/dist/src/commands/terminal-service.d.ts +38 -0
  28. package/dist/src/commands/terminal-service.js +210 -0
  29. package/dist/src/commands/terminal.d.ts +22 -0
  30. package/dist/src/commands/terminal.js +511 -0
  31. package/dist/src/component-lock.d.ts +100 -2
  32. package/dist/src/component-lock.js +304 -15
  33. package/dist/src/config.d.ts +10 -2
  34. package/dist/src/config.js +49 -14
  35. package/dist/src/database-schema-artifacts.d.ts +7 -0
  36. package/dist/src/database-schema-artifacts.js +8 -0
  37. package/dist/src/env-sync.d.ts +0 -3
  38. package/dist/src/env-sync.js +3 -19
  39. package/dist/src/metadata-backfill.d.ts +16 -6
  40. package/dist/src/metadata-backfill.js +1069 -18
  41. package/dist/src/project.d.ts +2 -0
  42. package/dist/src/project.js +4 -17
  43. package/dist/src/prompt.js +10 -18
  44. package/dist/src/resource-metadata.d.ts +1 -0
  45. package/dist/src/resource-metadata.js +3 -0
  46. package/dist/src/resource-syncs/database-schema-sync.d.ts +117 -0
  47. package/dist/src/resource-syncs/database-schema-sync.js +2289 -0
  48. package/dist/src/resource-syncs/database-view-sync.d.ts +124 -0
  49. package/dist/src/resource-syncs/database-view-sync.js +1317 -0
  50. package/dist/src/resource-syncs/endpoint-sync.d.ts +96 -0
  51. package/dist/src/resource-syncs/endpoint-sync.js +1283 -0
  52. package/dist/src/resource-syncs/event-sync.d.ts +99 -0
  53. package/dist/src/resource-syncs/event-sync.js +949 -0
  54. package/dist/src/resource-syncs/group-sync.d.ts +86 -0
  55. package/dist/src/resource-syncs/group-sync.js +882 -0
  56. package/dist/src/resource-syncs/job-template-sync.d.ts +85 -0
  57. package/dist/src/resource-syncs/job-template-sync.js +782 -0
  58. package/dist/src/resource-syncs/role-group-sync.d.ts +83 -0
  59. package/dist/src/resource-syncs/role-group-sync.js +597 -0
  60. package/dist/src/resource-syncs/schedule-sync.d.ts +111 -0
  61. package/dist/src/resource-syncs/schedule-sync.js +1302 -0
  62. package/dist/src/resource-syncs/util.d.ts +19 -0
  63. package/dist/src/resource-syncs/util.js +116 -0
  64. package/dist/src/runtime-view.d.ts +1 -0
  65. package/dist/src/runtime-view.js +6 -1
  66. package/dist/src/sync-output.d.ts +38 -0
  67. package/dist/src/sync-output.js +131 -0
  68. package/dist/src/tracked-resources.d.ts +1 -1
  69. package/dist/src/tracked-resources.js +26 -2
  70. package/dist/src/types.d.ts +224 -0
  71. package/dist/src/ui.d.ts +3 -0
  72. package/dist/src/ui.js +67 -18
  73. package/dist/src/utils.d.ts +2 -0
  74. package/dist/src/utils.js +64 -0
  75. package/dist/src/workspace-component.d.ts +2 -0
  76. package/dist/src/workspace-component.js +34 -0
  77. package/dist/src/workspace-resource.d.ts +2 -0
  78. package/dist/src/workspace-resource.js +52 -0
  79. package/package.json +8 -3
@@ -1,14 +1,266 @@
1
+ import type { ComponentRecord, DatabaseSchemaRecord, DatabaseViewRecord, EndpointRecord, EventRecord, GroupRecord, JobTemplateRecord, RoleGroupRecord, ScheduleRecord } from './types.ts';
1
2
  export type RequestOptions = {
2
3
  query?: Record<string, unknown>;
3
4
  body?: unknown;
4
5
  headers?: HeadersInit;
5
6
  authGuard?: boolean;
6
7
  spinnerLabel?: string;
8
+ productionWrite?: boolean;
9
+ timeoutMs?: number;
10
+ /** Explicitly trusted service endpoint, such as the sandbox URL returned by /me. */
11
+ allowExternalOrigin?: boolean;
7
12
  };
8
- export type ComponentListRequest = {
13
+ export type PaginatedListRequest = {
9
14
  path?: string;
10
15
  query?: Record<string, unknown>;
11
16
  };
17
+ export type ComponentListRequest = PaginatedListRequest;
18
+ export type DatabaseSchemaListRequest = PaginatedListRequest;
19
+ export type DatabaseSchemaResponse = DatabaseSchemaRecord | {
20
+ data: DatabaseSchemaRecord;
21
+ };
22
+ export type DatabaseSchemaStatsRecord = {
23
+ databaseId: string;
24
+ name?: string;
25
+ type?: string;
26
+ size: {
27
+ total: number;
28
+ table: number;
29
+ indexes: number;
30
+ relations: number;
31
+ audit: number;
32
+ };
33
+ };
34
+ export type DatabaseSchemaMetadataWritePayload = {
35
+ version: number;
36
+ metadata: Record<string, unknown>;
37
+ };
38
+ export type DatabaseSchemaUpdatePayload = Omit<DatabaseSchemaMetadataWritePayload, 'metadata'> & {
39
+ metadata?: Record<string, unknown>;
40
+ category?: string;
41
+ desc?: string;
42
+ definition?: Record<string, unknown>[];
43
+ };
44
+ export type DatabaseSchemaCreatePayload = {
45
+ name: string;
46
+ category?: string | null;
47
+ desc?: string;
48
+ metadata: Record<string, unknown>;
49
+ definition?: Record<string, unknown>[];
50
+ partition?: Record<string, unknown>;
51
+ parent?: string;
52
+ audit?: false;
53
+ restricted?: false;
54
+ };
55
+ export type DatabaseViewPreviewPayload = ({
56
+ definitionMode: 'STRUCTURED';
57
+ request: Record<string, unknown>;
58
+ } | {
59
+ definitionMode: 'RAW_SQL';
60
+ rawQuery: string;
61
+ }) & {
62
+ take: 0;
63
+ output: {
64
+ take: 0;
65
+ count: false;
66
+ };
67
+ };
68
+ export type DatabaseViewCreatePayload = {
69
+ name: string;
70
+ category?: string | null;
71
+ desc?: string;
72
+ metadata: Record<string, unknown>;
73
+ type: 'VIEW' | 'MATERIALIZED_VIEW';
74
+ restricted: true;
75
+ users: [];
76
+ groups: [];
77
+ uniqueKey?: string[];
78
+ indexes?: Array<{
79
+ columns: Array<{
80
+ name: string;
81
+ }>;
82
+ unique?: boolean;
83
+ }>;
84
+ } & ({
85
+ definitionMode: 'STRUCTURED';
86
+ request: Record<string, unknown>;
87
+ } | {
88
+ definitionMode: 'RAW_SQL';
89
+ rawQuery: string;
90
+ });
91
+ export type DatabaseViewUpdatePayload = {
92
+ name: string;
93
+ category?: string | null;
94
+ desc?: string | null;
95
+ metadata: Record<string, unknown>;
96
+ type: 'VIEW' | 'MATERIALIZED_VIEW';
97
+ restricted: boolean;
98
+ users: string[];
99
+ groups: string[];
100
+ version: number;
101
+ uniqueKey?: string[];
102
+ indexes?: Array<{
103
+ name?: string;
104
+ columns: Array<{
105
+ name: string;
106
+ }>;
107
+ unique?: boolean;
108
+ [key: string]: unknown;
109
+ }>;
110
+ } & ({
111
+ definitionMode: 'STRUCTURED';
112
+ request: Record<string, unknown>;
113
+ } | {
114
+ definitionMode: 'RAW_SQL';
115
+ rawQuery: string;
116
+ });
117
+ export type EndpointListRequest = ComponentListRequest;
118
+ export type EndpointWritePayload = {
119
+ version: number;
120
+ metadata: Record<string, unknown>;
121
+ name?: string;
122
+ category?: string | null;
123
+ desc?: string;
124
+ componentId?: string | null;
125
+ componentVersion?: number | null;
126
+ timeout?: number;
127
+ path?: string;
128
+ method?: string;
129
+ options?: Record<string, unknown> | null;
130
+ };
131
+ export type EndpointCreatePayload = Omit<EndpointWritePayload, 'version'> & {
132
+ name: string;
133
+ active: boolean;
134
+ path: string;
135
+ method: string;
136
+ };
137
+ export type RoleGroupListRequest = {
138
+ path?: string;
139
+ query?: Record<string, unknown>;
140
+ };
141
+ export type GroupListRequest = ComponentListRequest;
142
+ export type JobTemplateListRequest = ComponentListRequest;
143
+ export type JobTemplateResponse = JobTemplateRecord | {
144
+ data: JobTemplateRecord;
145
+ };
146
+ export type ScheduleListRequest = ComponentListRequest;
147
+ export type ScheduleResponse = ScheduleRecord | {
148
+ data: ScheduleRecord;
149
+ };
150
+ export type EventListRequest = ComponentListRequest;
151
+ export type EventResponse = EventRecord | {
152
+ data: EventRecord;
153
+ };
154
+ export type EventMetadataWritePayload = {
155
+ version: number;
156
+ metadata: Record<string, unknown>;
157
+ };
158
+ export type EventWritePayload = EventMetadataWritePayload & {
159
+ name?: string;
160
+ category?: string | null;
161
+ desc?: string;
162
+ type?: string;
163
+ targetType?: string;
164
+ targetId?: string;
165
+ filter?: Record<string, unknown> | null;
166
+ [key: string]: unknown;
167
+ };
168
+ export type EventCreatePayload = Omit<EventWritePayload, 'version'> & {
169
+ name: string;
170
+ active: boolean;
171
+ type: string;
172
+ targetType: string;
173
+ targetId: string;
174
+ };
175
+ export type EventListAllOptions = {
176
+ includeDeleted?: boolean;
177
+ };
178
+ export type ScheduleWritePayload = {
179
+ version: number;
180
+ metadata: Record<string, unknown>;
181
+ name?: string;
182
+ category?: string | null;
183
+ desc?: string;
184
+ cron?: string;
185
+ timezone?: string;
186
+ targetType?: string;
187
+ targetId?: string;
188
+ targetVersion?: number | null;
189
+ targetConfig?: Record<string, unknown> | null;
190
+ };
191
+ export type ScheduleCreatePayload = {
192
+ name: string;
193
+ category?: string | null;
194
+ active: boolean;
195
+ desc?: string;
196
+ metadata: Record<string, unknown>;
197
+ cron: string;
198
+ timezone: string;
199
+ targetType: string;
200
+ targetId: string;
201
+ targetVersion?: number | null;
202
+ targetConfig?: Record<string, unknown> | null;
203
+ };
204
+ export type JobTemplateUpdatePayload = {
205
+ version: number;
206
+ name?: string;
207
+ category?: string | null;
208
+ desc?: string;
209
+ metadata?: Record<string, unknown>;
210
+ componentId?: string;
211
+ timeout?: number | null;
212
+ options?: unknown;
213
+ inputs?: unknown;
214
+ };
215
+ export type JobTemplateCreatePayload = {
216
+ name: string;
217
+ category?: string | null;
218
+ desc?: string;
219
+ metadata: Record<string, unknown>;
220
+ componentId: string;
221
+ timeout?: number;
222
+ options?: unknown;
223
+ inputs?: unknown;
224
+ };
225
+ export type RoleGroupResponse = RoleGroupRecord | {
226
+ data: RoleGroupRecord;
227
+ };
228
+ export type GroupResponse = GroupRecord | {
229
+ data: GroupRecord;
230
+ };
231
+ export type GroupWritePayload = {
232
+ version: number;
233
+ metadata: Record<string, unknown>;
234
+ name?: string;
235
+ category?: string | null;
236
+ desc?: string;
237
+ ownerId?: string;
238
+ ownerType?: 'GROUP';
239
+ };
240
+ export type GroupCreatePayload = Omit<GroupWritePayload, 'version'> & {
241
+ name: string;
242
+ ownerId: string;
243
+ ownerType: 'GROUP';
244
+ members: string[];
245
+ };
246
+ export type RoleGroupWritePayload = {
247
+ name?: string;
248
+ category?: string | null;
249
+ desc?: string;
250
+ metadata: Record<string, unknown>;
251
+ version?: number;
252
+ };
253
+ export type RoleGroupCreatePayload = RoleGroupWritePayload & {
254
+ name: string;
255
+ roles: string[];
256
+ };
257
+ export type SystemRoleRecord = {
258
+ roleKey?: string;
259
+ key?: string;
260
+ name?: string;
261
+ code?: string;
262
+ [key: string]: unknown;
263
+ };
12
264
  export type DebugStreamEvent = {
13
265
  event: string;
14
266
  data: unknown;
@@ -18,7 +270,14 @@ export type ClientOptions = {
18
270
  instance?: string;
19
271
  token?: string;
20
272
  envName?: string;
273
+ production?: true;
21
274
  fetch?: typeof fetch;
275
+ confirmProductionWrite?: (details: {
276
+ baseUrl: string;
277
+ method: string;
278
+ path: string;
279
+ }) => Promise<boolean>;
280
+ trustedServiceOrigins?: string[];
22
281
  };
23
282
  export type ApiResponse<T = unknown> = {
24
283
  status: number;
@@ -29,14 +288,15 @@ export type ApiResponse<T = unknown> = {
29
288
  export declare class ApiError extends Error {
30
289
  status: number;
31
290
  data: unknown;
32
- constructor(status: number, message: string, data: unknown);
291
+ headers?: Headers;
292
+ constructor(status: number, message: string, data: unknown, headers?: Headers);
33
293
  }
34
294
  export declare class AuthenticationError extends ApiError {
35
- constructor(status: number, message: string, data: unknown);
295
+ constructor(status: number, message: string, data: unknown, headers?: Headers);
36
296
  }
37
297
  export declare class PermissionDeniedError extends ApiError {
38
298
  path: string;
39
- constructor(path: string, message: string, data: unknown);
299
+ constructor(path: string, message: string, data: unknown, headers?: Headers);
40
300
  }
41
301
  declare const COMPONENT_LIST_PAGE_SIZE = 200;
42
302
  declare function buildUrl(baseUrl: string, requestPath: string, query?: Record<string, unknown>): URL;
@@ -46,7 +306,11 @@ export declare class RevoClient {
46
306
  baseUrl: string;
47
307
  instance: string;
48
308
  token: string;
309
+ production: boolean;
49
310
  fetchImpl: typeof fetch | undefined;
311
+ private productionWriteConfirmed;
312
+ private confirmProductionWrite;
313
+ private trustedServiceOrigins;
50
314
  constructor(options?: ClientOptions);
51
315
  get authHeader(): string;
52
316
  get authValidationKey(): string;
@@ -63,11 +327,50 @@ export declare class RevoClient {
63
327
  profile: unknown;
64
328
  }>;
65
329
  request(method: string, path: string, options?: RequestOptions): Promise<ApiResponse>;
330
+ private assertProductionWriteConfirmed;
66
331
  requestData<T = unknown>(method: string, path: string, options?: RequestOptions): Promise<T>;
67
332
  me(options?: {
68
333
  force?: boolean;
69
334
  }): Promise<unknown>;
70
- listEndpoints(): Promise<unknown>;
335
+ listEndpoints(options?: EndpointListRequest): Promise<unknown>;
336
+ listDatabaseSchemas(options?: DatabaseSchemaListRequest): Promise<unknown>;
337
+ listAllDatabaseSchemas(options?: {
338
+ projection?: 'thin' | 'pull';
339
+ skipPartitions?: boolean;
340
+ }): Promise<{
341
+ databases: DatabaseSchemaRecord[];
342
+ discoveredTotal: number | null;
343
+ }>;
344
+ findActiveDatabaseSchemasByField(field: string, value: unknown, path?: Array<string | number>): Promise<DatabaseSchemaRecord[]>;
345
+ getDatabaseSchemaStats(): Promise<DatabaseSchemaStatsRecord[]>;
346
+ getDatabaseSchema(databaseId: string): Promise<DatabaseSchemaResponse>;
347
+ createDatabaseSchema(body: DatabaseSchemaCreatePayload): Promise<DatabaseSchemaResponse>;
348
+ updateDatabaseSchemaMetadata(databaseId: string, body: DatabaseSchemaMetadataWritePayload): Promise<DatabaseSchemaResponse>;
349
+ updateDatabaseSchema(databaseId: string, body: DatabaseSchemaUpdatePayload): Promise<DatabaseSchemaResponse>;
350
+ deleteDatabaseSchema(databaseId: string): Promise<unknown>;
351
+ listAllDatabaseViews(): Promise<DatabaseViewRecord[]>;
352
+ getDatabaseView(databaseViewId: string): Promise<DatabaseViewRecord | {
353
+ data: DatabaseViewRecord;
354
+ }>;
355
+ listAllDatabaseViewsForSync(): Promise<DatabaseViewRecord[]>;
356
+ previewDatabaseView(body: DatabaseViewPreviewPayload): Promise<unknown>;
357
+ createDatabaseView(body: DatabaseViewCreatePayload): Promise<DatabaseViewRecord | {
358
+ data: DatabaseViewRecord;
359
+ }>;
360
+ updateDatabaseView(databaseViewId: string, body: DatabaseViewUpdatePayload): Promise<DatabaseViewRecord | {
361
+ data: DatabaseViewRecord;
362
+ }>;
363
+ listAllEndpoints(): Promise<{
364
+ endpoints: EndpointRecord[];
365
+ discoveredTotal: number | null;
366
+ }>;
367
+ getEndpoint(endpointId: string): Promise<EndpointRecord>;
368
+ createEndpoint(body: EndpointCreatePayload): Promise<EndpointRecord>;
369
+ updateEndpoint(endpointId: string, body: EndpointWritePayload): Promise<EndpointRecord>;
370
+ activateEndpoint(endpointId: string): Promise<void>;
371
+ disableEndpoint(endpointId: string): Promise<void>;
372
+ restoreEndpoint(endpointId: string): Promise<void>;
373
+ getComponentSnapshotVersion(componentId: string, version: number): Promise<ComponentRecord>;
71
374
  getEditorTypes(requestPath?: string): Promise<unknown>;
72
375
  debugComponent(requestPath: string, body: unknown): Promise<unknown>;
73
376
  debugComponentStream(requestPath: string, body: unknown): AsyncGenerator<DebugStreamEvent>;
@@ -81,6 +384,54 @@ export declare class RevoClient {
81
384
  createComponent(body: unknown): Promise<unknown>;
82
385
  updateComponent(componentId: string, body: unknown): Promise<unknown>;
83
386
  deleteComponent(componentId: string): Promise<ApiResponse<unknown>>;
387
+ listRoleGroups(options?: RoleGroupListRequest): Promise<unknown>;
388
+ listAllRoleGroups(): Promise<{
389
+ roleGroups: RoleGroupRecord[];
390
+ discoveredTotal: number | null;
391
+ }>;
392
+ getRoleGroup(roleGroupId: string): Promise<RoleGroupResponse>;
393
+ listGroups(options?: GroupListRequest): Promise<unknown>;
394
+ listAllGroups(): Promise<{
395
+ groups: GroupRecord[];
396
+ discoveredTotal: number | null;
397
+ }>;
398
+ getGroup(groupId: string): Promise<GroupResponse>;
399
+ listJobTemplates(options?: JobTemplateListRequest): Promise<unknown>;
400
+ listAllJobTemplates(): Promise<{
401
+ jobTemplates: JobTemplateRecord[];
402
+ discoveredTotal: number | null;
403
+ }>;
404
+ getJobTemplate(jobTemplateId: string): Promise<JobTemplateResponse>;
405
+ createJobTemplate(body: JobTemplateCreatePayload): Promise<JobTemplateResponse>;
406
+ updateJobTemplate(jobTemplateId: string, body: JobTemplateUpdatePayload): Promise<JobTemplateResponse>;
407
+ listSchedules(options?: ScheduleListRequest): Promise<unknown>;
408
+ listAllSchedules(): Promise<{
409
+ schedules: ScheduleRecord[];
410
+ discoveredTotal: number | null;
411
+ }>;
412
+ getSchedule(scheduleId: string): Promise<ScheduleResponse>;
413
+ createSchedule(body: ScheduleCreatePayload): Promise<ScheduleResponse>;
414
+ updateSchedule(scheduleId: string, body: ScheduleWritePayload): Promise<ScheduleResponse>;
415
+ activateSchedule(scheduleId: string): Promise<unknown>;
416
+ listEvents(options?: EventListRequest): Promise<unknown>;
417
+ listAllEvents({ includeDeleted }?: EventListAllOptions): Promise<{
418
+ events: EventRecord[];
419
+ discoveredTotal: number | null;
420
+ }>;
421
+ getEvent(eventId: string): Promise<EventResponse>;
422
+ createEvent(body: EventCreatePayload): Promise<EventResponse>;
423
+ updateEvent(eventId: string, body: EventWritePayload): Promise<EventResponse>;
424
+ activateEvent(eventId: string): Promise<unknown>;
425
+ disableEvent(eventId: string): Promise<unknown>;
426
+ createRoleGroup(body: RoleGroupCreatePayload): Promise<RoleGroupResponse>;
427
+ updateRoleGroup(roleGroupId: string, body: RoleGroupWritePayload): Promise<RoleGroupResponse>;
428
+ updateGroup(groupId: string, body: GroupWritePayload): Promise<GroupResponse>;
429
+ createGroup(body: GroupCreatePayload): Promise<GroupResponse>;
430
+ addRoleGroupRole(roleGroupId: string, roleKey: string): Promise<unknown>;
431
+ removeRoleGroupRole(roleGroupId: string, roleKey: string): Promise<unknown>;
432
+ deleteRoleGroup(roleGroupId: string): Promise<ApiResponse<unknown>>;
433
+ listSystemRoles(): Promise<unknown>;
434
+ listAllSystemRoles(): Promise<SystemRoleRecord[]>;
84
435
  saveComponentElements(componentId: string, body: unknown): Promise<ApiResponse<unknown>>;
85
436
  }
86
437
  export { COMPONENT_LIST_PAGE_SIZE };