@vertracloud/api-types 0.1.1 → 0.2.1

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 (113) hide show
  1. package/README.md +47 -40
  2. package/common/v1.d.ts +23 -7
  3. package/common/v1.js.map +1 -1
  4. package/package.json +5 -5
  5. package/payloads/v1/activity.d.ts +22 -10
  6. package/payloads/v1/activity.js +9 -0
  7. package/payloads/v1/activity.js.map +1 -1
  8. package/payloads/v1/activity.mjs +8 -0
  9. package/payloads/v1/api-error.d.ts +302 -0
  10. package/payloads/v1/api-error.js +216 -0
  11. package/payloads/v1/api-error.js.map +1 -0
  12. package/payloads/v1/api-error.mjs +188 -0
  13. package/payloads/v1/api-key.d.ts +88 -0
  14. package/payloads/v1/api-key.js +267 -0
  15. package/payloads/v1/api-key.js.map +1 -0
  16. package/payloads/v1/api-key.mjs +235 -0
  17. package/payloads/v1/application.d.ts +234 -47
  18. package/payloads/v1/application.js +34 -3
  19. package/payloads/v1/application.js.map +1 -1
  20. package/payloads/v1/application.mjs +28 -2
  21. package/payloads/v1/database-data.d.ts +329 -0
  22. package/payloads/v1/database-data.js +63 -0
  23. package/payloads/v1/database-data.js.map +1 -0
  24. package/payloads/v1/database-data.mjs +35 -0
  25. package/payloads/v1/database.d.ts +29 -31
  26. package/payloads/v1/database.js.map +1 -1
  27. package/payloads/v1/github.d.ts +20 -0
  28. package/{rest/v1/credits.js → payloads/v1/github.js} +4 -4
  29. package/payloads/v1/github.js.map +1 -0
  30. package/payloads/v1/github.mjs +1 -0
  31. package/payloads/v1/index.d.ts +12 -9
  32. package/payloads/v1/index.js +630 -10
  33. package/payloads/v1/index.js.map +1 -1
  34. package/payloads/v1/index.mjs +590 -9
  35. package/payloads/v1/notification.d.ts +2 -3
  36. package/payloads/v1/notification.js.map +1 -1
  37. package/payloads/v1/oauth.d.ts +27 -0
  38. package/payloads/v1/oauth.js +34 -0
  39. package/payloads/v1/oauth.js.map +1 -0
  40. package/payloads/v1/oauth.mjs +8 -0
  41. package/payloads/v1/orders.d.ts +52 -27
  42. package/payloads/v1/orders.js +30 -0
  43. package/payloads/v1/orders.js.map +1 -1
  44. package/payloads/v1/orders.mjs +21 -0
  45. package/payloads/v1/redeem.d.ts +1 -1
  46. package/payloads/v1/redeem.js.map +1 -1
  47. package/payloads/v1/snapshot.d.ts +37 -7
  48. package/payloads/v1/snapshot.js +8 -2
  49. package/payloads/v1/snapshot.js.map +1 -1
  50. package/payloads/v1/snapshot.mjs +6 -1
  51. package/payloads/v1/status.d.ts +2 -2
  52. package/payloads/v1/status.js.map +1 -1
  53. package/payloads/v1/user.d.ts +54 -20
  54. package/payloads/v1/user.js +16 -0
  55. package/payloads/v1/user.js.map +1 -1
  56. package/payloads/v1/user.mjs +9 -0
  57. package/payloads/v1/workspace.d.ts +296 -25
  58. package/payloads/v1/workspace.js +128 -8
  59. package/payloads/v1/workspace.js.map +1 -1
  60. package/payloads/v1/workspace.mjs +115 -7
  61. package/rest/v1/activity.d.ts +20 -9
  62. package/rest/v1/activity.js.map +1 -1
  63. package/rest/v1/api-key.d.ts +26 -0
  64. package/{payloads/v1/credits.js → rest/v1/api-key.js} +4 -4
  65. package/rest/v1/api-key.js.map +1 -0
  66. package/rest/v1/api-key.mjs +1 -0
  67. package/rest/v1/application.d.ts +302 -30
  68. package/rest/v1/application.js.map +1 -1
  69. package/rest/v1/database-data.d.ts +234 -0
  70. package/rest/v1/database-data.js +19 -0
  71. package/rest/v1/database-data.js.map +1 -0
  72. package/rest/v1/database-data.mjs +1 -0
  73. package/rest/v1/database.d.ts +55 -14
  74. package/rest/v1/database.js.map +1 -1
  75. package/rest/v1/github.d.ts +22 -0
  76. package/rest/v1/{wing.js → github.js} +4 -4
  77. package/rest/v1/github.js.map +1 -0
  78. package/rest/v1/github.mjs +1 -0
  79. package/rest/v1/index.d.ts +16 -11
  80. package/rest/v1/index.js.map +1 -1
  81. package/rest/v1/notification.d.ts +2 -3
  82. package/rest/v1/notification.js.map +1 -1
  83. package/rest/v1/oauth.d.ts +60 -0
  84. package/{payloads/v1/wing.js → rest/v1/oauth.js} +4 -4
  85. package/rest/v1/oauth.js.map +1 -0
  86. package/rest/v1/oauth.mjs +1 -0
  87. package/rest/v1/orders.d.ts +28 -7
  88. package/rest/v1/orders.js.map +1 -1
  89. package/rest/v1/redeem.d.ts +2 -1
  90. package/rest/v1/redeem.js.map +1 -1
  91. package/rest/v1/snapshot.d.ts +45 -10
  92. package/rest/v1/snapshot.js.map +1 -1
  93. package/rest/v1/status.d.ts +1 -0
  94. package/rest/v1/user.d.ts +56 -7
  95. package/rest/v1/user.js.map +1 -1
  96. package/rest/v1/workspace.d.ts +186 -18
  97. package/rest/v1/workspace.js.map +1 -1
  98. package/v1.d.ts +24 -19
  99. package/v1.js +630 -10
  100. package/v1.js.map +1 -1
  101. package/v1.mjs +590 -9
  102. package/payloads/v1/credits.d.ts +0 -56
  103. package/payloads/v1/credits.js.map +0 -1
  104. package/payloads/v1/credits.mjs +0 -1
  105. package/payloads/v1/wing.d.ts +0 -133
  106. package/payloads/v1/wing.js.map +0 -1
  107. package/payloads/v1/wing.mjs +0 -1
  108. package/rest/v1/credits.d.ts +0 -17
  109. package/rest/v1/credits.js.map +0 -1
  110. package/rest/v1/credits.mjs +0 -1
  111. package/rest/v1/wing.d.ts +0 -38
  112. package/rest/v1/wing.js.map +0 -1
  113. package/rest/v1/wing.mjs +0 -1
@@ -1,59 +1,330 @@
1
- import { ISODateString, SnowFlake } from '../../common/v1.js';
1
+ import { SnowFlake, ISODateString, UserPlan } from '../../common/v1.js';
2
2
  import { APIApplication } from './application.js';
3
3
  import { APIDatabase } from './database.js';
4
+ import './api-error.js';
4
5
 
5
6
  /**
6
- * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces
7
+ * Granular workspace permission. Display group in `WORKSPACE_PERMISSIONS`.
8
+ * The owner (`owner_id`) has no entry here: owner-only actions (rename/delete the workspace,
9
+ * transfer ownership, link/unlink projects, deploy webhook, web publishing) are allowed for the
10
+ * owner only, never through a permission.
11
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get
7
12
  */
8
- type WorkspaceMemberRole = "owner" | "admin" | "developer" | "operator" | "viewer";
9
- declare const WorkspaceMemberRole: {
10
- readonly OWNER: "owner";
11
- readonly ADMIN: "admin";
12
- readonly DEVELOPER: "developer";
13
- readonly OPERATOR: "operator";
14
- readonly VIEWER: "viewer";
13
+ type WorkspacePermission = "apps:read" | "apps:manage" | "apps:lifecycle" | "apps:envs" | "apps:files" | "apps:delete" | "databases:read" | "databases:manage" | "databases:lifecycle" | "databases:credentials" | "databases:data" | "databases:delete" | "snapshots:read" | "snapshots:manage" | "members:read" | "members:manage" | "roles:manage" | "activities:read";
14
+ declare const WorkspacePermission: {
15
+ readonly APPS_READ: "apps:read";
16
+ readonly APPS_MANAGE: "apps:manage";
17
+ readonly APPS_LIFECYCLE: "apps:lifecycle";
18
+ readonly APPS_ENVS: "apps:envs";
19
+ readonly APPS_FILES: "apps:files";
20
+ readonly APPS_DELETE: "apps:delete";
21
+ readonly DATABASES_READ: "databases:read";
22
+ readonly DATABASES_MANAGE: "databases:manage";
23
+ readonly DATABASES_LIFECYCLE: "databases:lifecycle";
24
+ readonly DATABASES_CREDENTIALS: "databases:credentials";
25
+ readonly DATABASES_DATA: "databases:data";
26
+ readonly DATABASES_DELETE: "databases:delete";
27
+ readonly SNAPSHOTS_READ: "snapshots:read";
28
+ readonly SNAPSHOTS_MANAGE: "snapshots:manage";
29
+ readonly MEMBERS_READ: "members:read";
30
+ readonly MEMBERS_MANAGE: "members:manage";
31
+ readonly ROLES_MANAGE: "roles:manage";
32
+ readonly ACTIVITIES_READ: "activities:read";
15
33
  };
34
+ interface WorkspacePermissionEntry {
35
+ group: "apps" | "databases" | "snapshots" | "members" | "roles" | "activities";
36
+ }
37
+ /**
38
+ * Closed catalog of workspace permissions. A member whose role lacks the permission a route
39
+ * requires gets 403 `WORKSPACE_PERMISSION_DENIED`.
40
+ */
41
+ declare const WORKSPACE_PERMISSIONS: Record<WorkspacePermission, WorkspacePermissionEntry>;
42
+ declare const WORKSPACE_PERMISSION_LIST: WorkspacePermission[];
43
+ /**
44
+ * Seed role, created together with the workspace. It can be renamed and deleted like any other
45
+ * role (it becomes a regular role; `preset` is not restored) and counts toward the plan's role limit.
46
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get
47
+ */
48
+ type WorkspaceRolePreset = "admin" | "developer" | "operator" | "viewer";
49
+ declare const WorkspaceRolePreset: {
50
+ readonly Admin: "admin";
51
+ readonly Developer: "developer";
52
+ readonly Operator: "operator";
53
+ readonly Viewer: "viewer";
54
+ };
55
+ /**
56
+ * Permissions a seed role gets when the workspace is created. `admin` does NOT include
57
+ * `snapshots:manage` (restoring/deleting snapshots is destructive); the owner can grant it per role.
58
+ */
59
+ declare function workspacePresetPermissions(preset: WorkspaceRolePreset): WorkspacePermission[];
16
60
  /**
17
- * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces
61
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/roles/list
62
+ */
63
+ interface APIWorkspaceRole {
64
+ id: SnowFlake;
65
+ workspace_id: SnowFlake;
66
+ name: string;
67
+ permissions: WorkspacePermission[];
68
+ /** Seed role it came from; `null` for a manually created role. Informational only. */
69
+ preset: WorkspaceRolePreset | null;
70
+ /** Display order. */
71
+ position: number;
72
+ members_count: number;
73
+ created_at: ISODateString;
74
+ updated_at: ISODateString;
75
+ }
76
+ /**
77
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/members/list
18
78
  */
19
79
  interface APIWorkspaceMember {
20
- user_id: string;
21
- role: WorkspaceMemberRole;
80
+ user_id: SnowFlake;
81
+ role_id: SnowFlake;
82
+ role_name: string;
22
83
  joined_at: ISODateString;
84
+ /** When the member's access expires; `null` = never. */
85
+ expires_at: ISODateString | null;
86
+ user: {
87
+ display_name: string;
88
+ email: string;
89
+ };
23
90
  }
24
91
  /**
25
- * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces
92
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get
26
93
  */
27
94
  interface APIWorkspace {
28
95
  id: SnowFlake;
29
96
  name: string;
30
97
  description: string | null;
31
98
  owner_id: SnowFlake;
32
- members: APIWorkspaceMember[];
99
+ owner: {
100
+ display_name: string;
101
+ };
102
+ members_count: number;
103
+ /** Soft delete timestamp. `null` = active. */
104
+ deleted_at: ISODateString | null;
105
+ /**
106
+ * `true` when the OWNER's plan does not include workspaces (it expired or was downgraded):
107
+ * reads keep working, every write returns `PLAN_RESTRICTED_FEATURE`. Nobody is removed — the
108
+ * owner must upgrade to unfreeze it.
109
+ */
110
+ frozen: boolean;
33
111
  created_at: ISODateString;
34
112
  updated_at: ISODateString;
35
113
  }
36
114
  /**
37
- * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces
115
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get
38
116
  */
39
117
  interface APIWorkspaceInfoResponse extends APIWorkspace {
118
+ members: APIWorkspaceMember[];
119
+ roles: APIWorkspaceRole[];
40
120
  applications: APIApplication[];
41
121
  databases: APIDatabase[];
122
+ /** Resolved permissions of the caller. The owner always gets the full list, regardless of role. */
123
+ permissions: WorkspacePermission[];
124
+ is_owner: boolean;
125
+ /** Owner's plan — it determines which features the workspace has. */
126
+ owner_plan_id: UserPlan;
127
+ /** The caller's saved resource organization (folders, favorites) in this workspace. */
128
+ resource_organization: APIWorkspaceResourceOrganization;
129
+ }
130
+ type WorkspaceResourceType = "application" | "database";
131
+ declare const WorkspaceResourceType: {
132
+ readonly Application: "application";
133
+ readonly Database: "database";
134
+ };
135
+ type WorkspaceResourceOrganizationScope = "personal" | "workspace";
136
+ declare const WorkspaceResourceOrganizationScope: {
137
+ readonly Personal: "personal";
138
+ readonly Workspace: "workspace";
139
+ };
140
+ type WorkspaceFolderColor = "neutral" | "red" | "orange" | "yellow" | "green" | "blue" | "purple";
141
+ declare const WorkspaceFolderColor: {
142
+ readonly Neutral: "neutral";
143
+ readonly Red: "red";
144
+ readonly Orange: "orange";
145
+ readonly Yellow: "yellow";
146
+ readonly Green: "green";
147
+ readonly Blue: "blue";
148
+ readonly Purple: "purple";
149
+ };
150
+ declare const WORKSPACE_FOLDER_COLORS: WorkspaceFolderColor[];
151
+ interface APIWorkspaceResourceRef {
152
+ resource_type: WorkspaceResourceType;
153
+ resource_id: SnowFlake;
154
+ }
155
+ interface APIWorkspaceFolderItem extends APIWorkspaceResourceRef {
156
+ position: number;
157
+ }
158
+ interface APIWorkspaceResourceFolder {
159
+ id: SnowFlake;
160
+ name: string;
161
+ color: WorkspaceFolderColor;
162
+ position: number;
163
+ resources: APIWorkspaceFolderItem[];
164
+ created_at: ISODateString;
165
+ updated_at: ISODateString;
166
+ }
167
+ interface APIWorkspaceFavorite extends APIWorkspaceResourceRef {
168
+ position: number;
169
+ created_at: ISODateString;
170
+ }
171
+ interface APIWorkspaceResourceOrganization {
172
+ scope: WorkspaceResourceOrganizationScope;
173
+ user_id: SnowFlake;
174
+ workspace_id: SnowFlake | null;
175
+ folders: APIWorkspaceResourceFolder[];
176
+ favorites: APIWorkspaceFavorite[];
177
+ }
178
+ /**
179
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/invites/list
180
+ */
181
+ type WorkspaceInviteKind = "email" | "link";
182
+ declare const WorkspaceInviteKind: {
183
+ readonly Email: "email";
184
+ readonly Link: "link";
185
+ };
186
+ /**
187
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/invites/list
188
+ */
189
+ interface APIWorkspaceInvite {
190
+ id: SnowFlake;
191
+ workspace_id: SnowFlake;
192
+ kind: WorkspaceInviteKind;
193
+ /** Bound e-mail; only for `kind: "email"`. */
194
+ email: string | null;
195
+ role_id: SnowFlake;
196
+ role_name: string;
197
+ invited_by: {
198
+ id: SnowFlake;
199
+ display_name: string;
200
+ };
201
+ expires_at: ISODateString;
202
+ accepted_at: ISODateString | null;
203
+ revoked_at: ISODateString | null;
204
+ uses: number;
205
+ /** Only for `kind: "link"`; `null` = unlimited uses. */
206
+ max_uses: number | null;
207
+ /** Access expiration applied to members who join through this invite; `null` = never. */
208
+ expires_in_days: number | null;
209
+ created_at: ISODateString;
210
+ }
211
+ /**
212
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/invites/create
213
+ */
214
+ interface APIWorkspaceInviteCreated extends APIWorkspaceInvite {
215
+ /** Invite URL; only for `kind: "link"`, shown once. */
216
+ url: string | null;
42
217
  }
43
218
  /**
44
- * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces
219
+ * What the invitee sees before accepting (`GET /v1/workspaces/invites/:token`).
220
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/invites/preview
45
221
  */
46
- interface APIWorkspaceMemberAdd {
47
- id: string;
48
- email: string;
49
- role: WorkspaceMemberRole;
222
+ interface APIWorkspaceInvitePreview {
223
+ workspace: {
224
+ id: SnowFlake;
225
+ name: string;
226
+ };
227
+ inviter: {
228
+ display_name: string;
229
+ };
230
+ role_name: string;
231
+ kind: WorkspaceInviteKind;
232
+ expires_at: ISODateString;
50
233
  }
51
234
  /**
52
- * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces
235
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/action-requests/list
53
236
  */
54
- interface APIWorkspaceMemberRoleUpdate {
55
- user_id: string;
56
- role: WorkspaceMemberRole;
237
+ type WorkspaceActionRequestAction = "app_delete" | "database_delete" | "snapshot_create" | "snapshot_restore";
238
+ declare const WorkspaceActionRequestAction: {
239
+ readonly AppDelete: "app_delete";
240
+ readonly DatabaseDelete: "database_delete";
241
+ readonly SnapshotCreate: "snapshot_create";
242
+ readonly SnapshotRestore: "snapshot_restore";
243
+ };
244
+ type WorkspaceActionRequestStatus = "pending" | "approved" | "rejected" | "expired";
245
+ declare const WorkspaceActionRequestStatus: {
246
+ readonly Pending: "pending";
247
+ readonly Approved: "approved";
248
+ readonly Rejected: "rejected";
249
+ readonly Expired: "expired";
250
+ };
251
+ /**
252
+ * `params` of an action request, per `action`. Actions without parameters take an empty object;
253
+ * unknown keys are rejected with `WORKSPACE_ACTION_INVALID_PARAMS`.
254
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/action-requests/create
255
+ */
256
+ interface WorkspaceActionRequestParams {
257
+ app_delete: Record<string, never>;
258
+ database_delete: Record<string, never>;
259
+ snapshot_create: Record<string, never>;
260
+ /** The snapshot must belong to the request's resource. */
261
+ snapshot_restore: {
262
+ snapshot_id: SnowFlake;
263
+ };
57
264
  }
265
+ interface APIWorkspaceActionRequestBase {
266
+ id: SnowFlake;
267
+ workspace_id: SnowFlake;
268
+ resource_type: WorkspaceResourceType;
269
+ resource_id: SnowFlake;
270
+ resource_name: string | null;
271
+ status: WorkspaceActionRequestStatus;
272
+ requested_by: {
273
+ id: SnowFlake;
274
+ display_name: string;
275
+ };
276
+ decided_by: {
277
+ id: SnowFlake;
278
+ display_name: string;
279
+ } | null;
280
+ decided_at: ISODateString | null;
281
+ expires_at: ISODateString;
282
+ created_at: ISODateString;
283
+ }
284
+ /**
285
+ * A request for a destructive/sensitive action made by a member who lacks its permission, to be
286
+ * approved by someone who has it. Expires after 24 h without a decision. Discriminated by `action`,
287
+ * which decides the shape of `params`.
288
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/action-requests/list
289
+ */
290
+ type APIWorkspaceActionRequest = {
291
+ [A in WorkspaceActionRequestAction]: APIWorkspaceActionRequestBase & {
292
+ action: A;
293
+ params: WorkspaceActionRequestParams[A];
294
+ };
295
+ }[WorkspaceActionRequestAction];
296
+ /**
297
+ * Workspace error codes. Stable English sentinels returned in `code`; clients are expected to
298
+ * translate them.
299
+ * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get
300
+ */
301
+ declare const WORKSPACE_ERROR_CODES: {
302
+ readonly WORKSPACE_NOT_FOUND: "WORKSPACE_NOT_FOUND";
303
+ readonly WORKSPACE_NAME_ALREADY_EXISTS: "WORKSPACE_NAME_ALREADY_EXISTS";
304
+ readonly WORKSPACE_MEMBER_LIMIT_REACHED: "WORKSPACE_MEMBER_LIMIT_REACHED";
305
+ readonly WORKSPACE_ROLE_LIMIT_REACHED: "WORKSPACE_ROLE_LIMIT_REACHED";
306
+ readonly WORKSPACE_ROLE_IN_USE: "WORKSPACE_ROLE_IN_USE";
307
+ readonly WORKSPACE_ROLE_NOT_FOUND: "WORKSPACE_ROLE_NOT_FOUND";
308
+ readonly WORKSPACE_ROLE_NAME_ALREADY_EXISTS: "WORKSPACE_ROLE_NAME_ALREADY_EXISTS";
309
+ readonly WORKSPACE_PERMISSION_DENIED: "WORKSPACE_PERMISSION_DENIED";
310
+ readonly WORKSPACE_PERMISSION_ESCALATION: "WORKSPACE_PERMISSION_ESCALATION";
311
+ readonly WORKSPACE_INVITE_NOT_FOUND: "WORKSPACE_INVITE_NOT_FOUND";
312
+ readonly WORKSPACE_INVITE_EXPIRED: "WORKSPACE_INVITE_EXPIRED";
313
+ readonly WORKSPACE_INVITE_EMAIL_MISMATCH: "WORKSPACE_INVITE_EMAIL_MISMATCH";
314
+ readonly WORKSPACE_OWNER_ONLY: "WORKSPACE_OWNER_ONLY";
315
+ readonly WORKSPACE_ACTION_REQUEST_NOT_FOUND: "WORKSPACE_ACTION_REQUEST_NOT_FOUND";
316
+ /** 409 — the request was already approved or rejected. */
317
+ /** 400 — the requester already has the permission; perform the action directly. */
318
+ readonly WORKSPACE_ACTION_NOT_NEEDED: "WORKSPACE_ACTION_NOT_NEEDED";
319
+ /** 400 — the request `params` failed the action's validation (e.g. a snapshot of another resource). */
320
+ readonly WORKSPACE_ACTION_INVALID_PARAMS: "WORKSPACE_ACTION_INVALID_PARAMS";
321
+ /** 409 — a pending request already exists for the same action on the same resource. */
322
+ readonly WORKSPACE_ACTION_REQUEST_PENDING: "WORKSPACE_ACTION_REQUEST_PENDING";
323
+ readonly WORKSPACE_RESOURCE_FOLDER_NOT_FOUND: "WORKSPACE_RESOURCE_FOLDER_NOT_FOUND";
324
+ readonly WORKSPACE_RESOURCE_FOLDER_NAME_CONFLICT: "WORKSPACE_RESOURCE_FOLDER_NAME_CONFLICT";
325
+ readonly WORKSPACE_RESOURCE_NOT_FOUND: "WORKSPACE_RESOURCE_NOT_FOUND";
326
+ readonly PLAN_RESTRICTED_FEATURE: "PLAN_RESTRICTED_FEATURE";
327
+ };
328
+ type WorkspaceErrorCode = (typeof WORKSPACE_ERROR_CODES)[keyof typeof WORKSPACE_ERROR_CODES];
58
329
 
59
- export { type APIWorkspace, type APIWorkspaceInfoResponse, type APIWorkspaceMember, type APIWorkspaceMemberAdd, type APIWorkspaceMemberRoleUpdate, WorkspaceMemberRole };
330
+ export { type APIWorkspace, type APIWorkspaceActionRequest, type APIWorkspaceFavorite, type APIWorkspaceFolderItem, type APIWorkspaceInfoResponse, type APIWorkspaceInvite, type APIWorkspaceInviteCreated, type APIWorkspaceInvitePreview, type APIWorkspaceMember, type APIWorkspaceResourceFolder, type APIWorkspaceResourceOrganization, type APIWorkspaceResourceRef, type APIWorkspaceRole, WORKSPACE_ERROR_CODES, WORKSPACE_FOLDER_COLORS, WORKSPACE_PERMISSIONS, WORKSPACE_PERMISSION_LIST, WorkspaceActionRequestAction, type WorkspaceActionRequestParams, WorkspaceActionRequestStatus, type WorkspaceErrorCode, WorkspaceFolderColor, WorkspaceInviteKind, WorkspacePermission, type WorkspacePermissionEntry, WorkspaceResourceOrganizationScope, WorkspaceResourceType, WorkspaceRolePreset, workspacePresetPermissions };
@@ -20,18 +20,138 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // payloads/v1/workspace.ts
21
21
  var workspace_exports = {};
22
22
  __export(workspace_exports, {
23
- WorkspaceMemberRole: () => WorkspaceMemberRole
23
+ WORKSPACE_ERROR_CODES: () => WORKSPACE_ERROR_CODES,
24
+ WORKSPACE_FOLDER_COLORS: () => WORKSPACE_FOLDER_COLORS,
25
+ WORKSPACE_PERMISSIONS: () => WORKSPACE_PERMISSIONS,
26
+ WORKSPACE_PERMISSION_LIST: () => WORKSPACE_PERMISSION_LIST,
27
+ WorkspaceActionRequestAction: () => WorkspaceActionRequestAction,
28
+ WorkspaceActionRequestStatus: () => WorkspaceActionRequestStatus,
29
+ WorkspaceFolderColor: () => WorkspaceFolderColor,
30
+ WorkspaceInviteKind: () => WorkspaceInviteKind,
31
+ WorkspacePermission: () => WorkspacePermission,
32
+ WorkspaceResourceOrganizationScope: () => WorkspaceResourceOrganizationScope,
33
+ WorkspaceResourceType: () => WorkspaceResourceType,
34
+ WorkspaceRolePreset: () => WorkspaceRolePreset,
35
+ workspacePresetPermissions: () => workspacePresetPermissions
24
36
  });
25
37
  module.exports = __toCommonJS(workspace_exports);
26
- var WorkspaceMemberRole = {
27
- OWNER: "owner",
28
- ADMIN: "admin",
29
- DEVELOPER: "developer",
30
- OPERATOR: "operator",
31
- VIEWER: "viewer"
38
+ var WorkspacePermission = {
39
+ APPS_READ: "apps:read",
40
+ APPS_MANAGE: "apps:manage",
41
+ APPS_LIFECYCLE: "apps:lifecycle",
42
+ APPS_ENVS: "apps:envs",
43
+ APPS_FILES: "apps:files",
44
+ APPS_DELETE: "apps:delete",
45
+ DATABASES_READ: "databases:read",
46
+ DATABASES_MANAGE: "databases:manage",
47
+ DATABASES_LIFECYCLE: "databases:lifecycle",
48
+ DATABASES_CREDENTIALS: "databases:credentials",
49
+ DATABASES_DATA: "databases:data",
50
+ DATABASES_DELETE: "databases:delete",
51
+ SNAPSHOTS_READ: "snapshots:read",
52
+ SNAPSHOTS_MANAGE: "snapshots:manage",
53
+ MEMBERS_READ: "members:read",
54
+ MEMBERS_MANAGE: "members:manage",
55
+ ROLES_MANAGE: "roles:manage",
56
+ ACTIVITIES_READ: "activities:read"
57
+ };
58
+ var WORKSPACE_PERMISSIONS = {
59
+ "apps:read": { group: "apps" },
60
+ "apps:manage": { group: "apps" },
61
+ "apps:lifecycle": { group: "apps" },
62
+ "apps:envs": { group: "apps" },
63
+ "apps:files": { group: "apps" },
64
+ "apps:delete": { group: "apps" },
65
+ "databases:read": { group: "databases" },
66
+ "databases:manage": { group: "databases" },
67
+ "databases:lifecycle": { group: "databases" },
68
+ "databases:credentials": { group: "databases" },
69
+ "databases:data": { group: "databases" },
70
+ "databases:delete": { group: "databases" },
71
+ "snapshots:read": { group: "snapshots" },
72
+ "snapshots:manage": { group: "snapshots" },
73
+ "members:read": { group: "members" },
74
+ "members:manage": { group: "members" },
75
+ "roles:manage": { group: "roles" },
76
+ "activities:read": { group: "activities" }
77
+ };
78
+ var WORKSPACE_PERMISSION_LIST = Object.keys(WORKSPACE_PERMISSIONS);
79
+ var WorkspaceRolePreset = {
80
+ Admin: "admin",
81
+ Developer: "developer",
82
+ Operator: "operator",
83
+ Viewer: "viewer"
84
+ };
85
+ function workspacePresetPermissions(preset) {
86
+ switch (preset) {
87
+ case "admin":
88
+ return WORKSPACE_PERMISSION_LIST.filter((p) => p !== "snapshots:manage");
89
+ case "developer":
90
+ return ["apps:read", "apps:manage", "apps:lifecycle", "apps:envs", "apps:files", "databases:read", "databases:manage", "databases:lifecycle", "databases:credentials", "databases:data", "snapshots:read", "members:read", "activities:read"];
91
+ case "operator":
92
+ return ["apps:read", "apps:lifecycle", "databases:read", "databases:lifecycle", "snapshots:read", "members:read", "activities:read"];
93
+ case "viewer":
94
+ return ["apps:read", "databases:read", "snapshots:read", "members:read", "activities:read"];
95
+ }
96
+ }
97
+ var WorkspaceResourceType = { Application: "application", Database: "database" };
98
+ var WorkspaceResourceOrganizationScope = { Personal: "personal", Workspace: "workspace" };
99
+ var WorkspaceFolderColor = { Neutral: "neutral", Red: "red", Orange: "orange", Yellow: "yellow", Green: "green", Blue: "blue", Purple: "purple" };
100
+ var WORKSPACE_FOLDER_COLORS = Object.values(WorkspaceFolderColor);
101
+ var WorkspaceInviteKind = { Email: "email", Link: "link" };
102
+ var WorkspaceActionRequestAction = {
103
+ AppDelete: "app_delete",
104
+ DatabaseDelete: "database_delete",
105
+ SnapshotCreate: "snapshot_create",
106
+ SnapshotRestore: "snapshot_restore"
107
+ };
108
+ var WorkspaceActionRequestStatus = {
109
+ Pending: "pending",
110
+ Approved: "approved",
111
+ Rejected: "rejected",
112
+ Expired: "expired"
113
+ };
114
+ var WORKSPACE_ERROR_CODES = {
115
+ WORKSPACE_NOT_FOUND: "WORKSPACE_NOT_FOUND",
116
+ WORKSPACE_NAME_ALREADY_EXISTS: "WORKSPACE_NAME_ALREADY_EXISTS",
117
+ WORKSPACE_MEMBER_LIMIT_REACHED: "WORKSPACE_MEMBER_LIMIT_REACHED",
118
+ WORKSPACE_ROLE_LIMIT_REACHED: "WORKSPACE_ROLE_LIMIT_REACHED",
119
+ WORKSPACE_ROLE_IN_USE: "WORKSPACE_ROLE_IN_USE",
120
+ WORKSPACE_ROLE_NOT_FOUND: "WORKSPACE_ROLE_NOT_FOUND",
121
+ WORKSPACE_ROLE_NAME_ALREADY_EXISTS: "WORKSPACE_ROLE_NAME_ALREADY_EXISTS",
122
+ WORKSPACE_PERMISSION_DENIED: "WORKSPACE_PERMISSION_DENIED",
123
+ WORKSPACE_PERMISSION_ESCALATION: "WORKSPACE_PERMISSION_ESCALATION",
124
+ WORKSPACE_INVITE_NOT_FOUND: "WORKSPACE_INVITE_NOT_FOUND",
125
+ WORKSPACE_INVITE_EXPIRED: "WORKSPACE_INVITE_EXPIRED",
126
+ WORKSPACE_INVITE_EMAIL_MISMATCH: "WORKSPACE_INVITE_EMAIL_MISMATCH",
127
+ WORKSPACE_OWNER_ONLY: "WORKSPACE_OWNER_ONLY",
128
+ WORKSPACE_ACTION_REQUEST_NOT_FOUND: "WORKSPACE_ACTION_REQUEST_NOT_FOUND",
129
+ /** 409 — the request was already approved or rejected. */
130
+ /** 400 — the requester already has the permission; perform the action directly. */
131
+ WORKSPACE_ACTION_NOT_NEEDED: "WORKSPACE_ACTION_NOT_NEEDED",
132
+ /** 400 — the request `params` failed the action's validation (e.g. a snapshot of another resource). */
133
+ WORKSPACE_ACTION_INVALID_PARAMS: "WORKSPACE_ACTION_INVALID_PARAMS",
134
+ /** 409 — a pending request already exists for the same action on the same resource. */
135
+ WORKSPACE_ACTION_REQUEST_PENDING: "WORKSPACE_ACTION_REQUEST_PENDING",
136
+ WORKSPACE_RESOURCE_FOLDER_NOT_FOUND: "WORKSPACE_RESOURCE_FOLDER_NOT_FOUND",
137
+ WORKSPACE_RESOURCE_FOLDER_NAME_CONFLICT: "WORKSPACE_RESOURCE_FOLDER_NAME_CONFLICT",
138
+ WORKSPACE_RESOURCE_NOT_FOUND: "WORKSPACE_RESOURCE_NOT_FOUND",
139
+ PLAN_RESTRICTED_FEATURE: "PLAN_RESTRICTED_FEATURE"
32
140
  };
33
141
  // Annotate the CommonJS export names for ESM import in node:
34
142
  0 && (module.exports = {
35
- WorkspaceMemberRole
143
+ WORKSPACE_ERROR_CODES,
144
+ WORKSPACE_FOLDER_COLORS,
145
+ WORKSPACE_PERMISSIONS,
146
+ WORKSPACE_PERMISSION_LIST,
147
+ WorkspaceActionRequestAction,
148
+ WorkspaceActionRequestStatus,
149
+ WorkspaceFolderColor,
150
+ WorkspaceInviteKind,
151
+ WorkspacePermission,
152
+ WorkspaceResourceOrganizationScope,
153
+ WorkspaceResourceType,
154
+ WorkspaceRolePreset,
155
+ workspacePresetPermissions
36
156
  });
37
157
  //# sourceMappingURL=workspace.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["workspace.ts"],"sourcesContent":["import type { ISODateString, SnowFlake } from \"../../v1\";\nimport type { APIApplication, APIDatabase } from \"./index\";\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces\n */\nexport type WorkspaceMemberRole = \"owner\" | \"admin\" | \"developer\" | \"operator\" | \"viewer\";\nexport const WorkspaceMemberRole = {\n\tOWNER: \"owner\",\n\tADMIN: \"admin\",\n\tDEVELOPER: \"developer\",\n\tOPERATOR: \"operator\",\n\tVIEWER: \"viewer\",\n} as const;\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces\n */\nexport interface APIWorkspaceMember {\n\tuser_id: string;\n\trole: WorkspaceMemberRole;\n\tjoined_at: ISODateString;\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces\n */\nexport interface APIWorkspace {\n\tid: SnowFlake;\n\tname: string;\n\tdescription: string | null;\n\towner_id: SnowFlake;\n\tmembers: APIWorkspaceMember[];\n\tcreated_at: ISODateString;\n\tupdated_at: ISODateString;\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces\n */\nexport interface APIWorkspaceInfoResponse extends APIWorkspace {\n\tapplications: APIApplication[];\n\tdatabases: APIDatabase[];\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces\n */\nexport interface APIWorkspaceMemberAdd {\n\tid: string;\n\temail: string;\n\trole: WorkspaceMemberRole;\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces\n */\nexport interface APIWorkspaceMemberRoleUpdate {\n\tuser_id: string;\n\trole: WorkspaceMemberRole;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,IAAM,sBAAsB;AAAA,EAClC,OAAO;AAAA,EACP,OAAO;AAAA,EACP,WAAW;AAAA,EACX,UAAU;AAAA,EACV,QAAQ;AACT;","names":[]}
1
+ {"version":3,"sources":["workspace.ts"],"sourcesContent":["import type { ISODateString, SnowFlake, UserPlan } from \"../../v1\";\nimport type { APIApplication, APIDatabase } from \"./index\";\n\n/**\n * Granular workspace permission. Display group in `WORKSPACE_PERMISSIONS`.\n * The owner (`owner_id`) has no entry here: owner-only actions (rename/delete the workspace,\n * transfer ownership, link/unlink projects, deploy webhook, web publishing) are allowed for the\n * owner only, never through a permission.\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get\n */\nexport type WorkspacePermission =\n\t| \"apps:read\"\n\t| \"apps:manage\"\n\t| \"apps:lifecycle\"\n\t| \"apps:envs\"\n\t| \"apps:files\"\n\t| \"apps:delete\"\n\t| \"databases:read\"\n\t| \"databases:manage\"\n\t| \"databases:lifecycle\"\n\t| \"databases:credentials\"\n\t| \"databases:data\"\n\t| \"databases:delete\"\n\t| \"snapshots:read\"\n\t| \"snapshots:manage\"\n\t| \"members:read\"\n\t| \"members:manage\"\n\t| \"roles:manage\"\n\t| \"activities:read\";\n\nexport const WorkspacePermission = {\n\tAPPS_READ: \"apps:read\",\n\tAPPS_MANAGE: \"apps:manage\",\n\tAPPS_LIFECYCLE: \"apps:lifecycle\",\n\tAPPS_ENVS: \"apps:envs\",\n\tAPPS_FILES: \"apps:files\",\n\tAPPS_DELETE: \"apps:delete\",\n\tDATABASES_READ: \"databases:read\",\n\tDATABASES_MANAGE: \"databases:manage\",\n\tDATABASES_LIFECYCLE: \"databases:lifecycle\",\n\tDATABASES_CREDENTIALS: \"databases:credentials\",\n\tDATABASES_DATA: \"databases:data\",\n\tDATABASES_DELETE: \"databases:delete\",\n\tSNAPSHOTS_READ: \"snapshots:read\",\n\tSNAPSHOTS_MANAGE: \"snapshots:manage\",\n\tMEMBERS_READ: \"members:read\",\n\tMEMBERS_MANAGE: \"members:manage\",\n\tROLES_MANAGE: \"roles:manage\",\n\tACTIVITIES_READ: \"activities:read\",\n} as const satisfies Record<string, WorkspacePermission>;\n\nexport interface WorkspacePermissionEntry {\n\tgroup: \"apps\" | \"databases\" | \"snapshots\" | \"members\" | \"roles\" | \"activities\";\n}\n\n/**\n * Closed catalog of workspace permissions. A member whose role lacks the permission a route\n * requires gets 403 `WORKSPACE_PERMISSION_DENIED`.\n */\nexport const WORKSPACE_PERMISSIONS: Record<WorkspacePermission, WorkspacePermissionEntry> = {\n\t\"apps:read\": { group: \"apps\" },\n\t\"apps:manage\": { group: \"apps\" },\n\t\"apps:lifecycle\": { group: \"apps\" },\n\t\"apps:envs\": { group: \"apps\" },\n\t\"apps:files\": { group: \"apps\" },\n\t\"apps:delete\": { group: \"apps\" },\n\t\"databases:read\": { group: \"databases\" },\n\t\"databases:manage\": { group: \"databases\" },\n\t\"databases:lifecycle\": { group: \"databases\" },\n\t\"databases:credentials\": { group: \"databases\" },\n\t\"databases:data\": { group: \"databases\" },\n\t\"databases:delete\": { group: \"databases\" },\n\t\"snapshots:read\": { group: \"snapshots\" },\n\t\"snapshots:manage\": { group: \"snapshots\" },\n\t\"members:read\": { group: \"members\" },\n\t\"members:manage\": { group: \"members\" },\n\t\"roles:manage\": { group: \"roles\" },\n\t\"activities:read\": { group: \"activities\" },\n};\n\nexport const WORKSPACE_PERMISSION_LIST = Object.keys(WORKSPACE_PERMISSIONS) as WorkspacePermission[];\n\n/**\n * Seed role, created together with the workspace. It can be renamed and deleted like any other\n * role (it becomes a regular role; `preset` is not restored) and counts toward the plan's role limit.\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get\n */\nexport type WorkspaceRolePreset = \"admin\" | \"developer\" | \"operator\" | \"viewer\";\nexport const WorkspaceRolePreset = {\n\tAdmin: \"admin\",\n\tDeveloper: \"developer\",\n\tOperator: \"operator\",\n\tViewer: \"viewer\",\n} as const satisfies Record<string, WorkspaceRolePreset>;\n\n/**\n * Permissions a seed role gets when the workspace is created. `admin` does NOT include\n * `snapshots:manage` (restoring/deleting snapshots is destructive); the owner can grant it per role.\n */\nexport function workspacePresetPermissions(preset: WorkspaceRolePreset): WorkspacePermission[] {\n\tswitch (preset) {\n\t\tcase \"admin\":\n\t\t\treturn WORKSPACE_PERMISSION_LIST.filter((p) => p !== \"snapshots:manage\");\n\t\tcase \"developer\":\n\t\t\treturn [\"apps:read\", \"apps:manage\", \"apps:lifecycle\", \"apps:envs\", \"apps:files\", \"databases:read\", \"databases:manage\", \"databases:lifecycle\", \"databases:credentials\", \"databases:data\", \"snapshots:read\", \"members:read\", \"activities:read\"];\n\t\tcase \"operator\":\n\t\t\treturn [\"apps:read\", \"apps:lifecycle\", \"databases:read\", \"databases:lifecycle\", \"snapshots:read\", \"members:read\", \"activities:read\"];\n\t\tcase \"viewer\":\n\t\t\treturn [\"apps:read\", \"databases:read\", \"snapshots:read\", \"members:read\", \"activities:read\"];\n\t}\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/roles/list\n */\nexport interface APIWorkspaceRole {\n\tid: SnowFlake;\n\tworkspace_id: SnowFlake;\n\tname: string;\n\tpermissions: WorkspacePermission[];\n\t/** Seed role it came from; `null` for a manually created role. Informational only. */\n\tpreset: WorkspaceRolePreset | null;\n\t/** Display order. */\n\tposition: number;\n\tmembers_count: number;\n\tcreated_at: ISODateString;\n\tupdated_at: ISODateString;\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/members/list\n */\nexport interface APIWorkspaceMember {\n\tuser_id: SnowFlake;\n\trole_id: SnowFlake;\n\trole_name: string;\n\tjoined_at: ISODateString;\n\t/** When the member's access expires; `null` = never. */\n\texpires_at: ISODateString | null;\n\tuser: {\n\t\tdisplay_name: string;\n\t\temail: string;\n\t};\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get\n */\nexport interface APIWorkspace {\n\tid: SnowFlake;\n\tname: string;\n\tdescription: string | null;\n\towner_id: SnowFlake;\n\towner: { display_name: string };\n\tmembers_count: number;\n\t/** Soft delete timestamp. `null` = active. */\n\tdeleted_at: ISODateString | null;\n\t/**\n\t * `true` when the OWNER's plan does not include workspaces (it expired or was downgraded):\n\t * reads keep working, every write returns `PLAN_RESTRICTED_FEATURE`. Nobody is removed — the\n\t * owner must upgrade to unfreeze it.\n\t */\n\tfrozen: boolean;\n\tcreated_at: ISODateString;\n\tupdated_at: ISODateString;\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get\n */\nexport interface APIWorkspaceInfoResponse extends APIWorkspace {\n\tmembers: APIWorkspaceMember[];\n\troles: APIWorkspaceRole[];\n\tapplications: APIApplication[];\n\tdatabases: APIDatabase[];\n\t/** Resolved permissions of the caller. The owner always gets the full list, regardless of role. */\n\tpermissions: WorkspacePermission[];\n\tis_owner: boolean;\n\t/** Owner's plan — it determines which features the workspace has. */\n\towner_plan_id: UserPlan;\n\t/** The caller's saved resource organization (folders, favorites) in this workspace. */\n\tresource_organization: APIWorkspaceResourceOrganization;\n}\n\nexport type WorkspaceResourceType = \"application\" | \"database\";\nexport const WorkspaceResourceType = { Application: \"application\", Database: \"database\" } as const satisfies Record<string, WorkspaceResourceType>;\n\nexport type WorkspaceResourceOrganizationScope = \"personal\" | \"workspace\";\nexport const WorkspaceResourceOrganizationScope = { Personal: \"personal\", Workspace: \"workspace\" } as const satisfies Record<string, WorkspaceResourceOrganizationScope>;\n\nexport type WorkspaceFolderColor = \"neutral\" | \"red\" | \"orange\" | \"yellow\" | \"green\" | \"blue\" | \"purple\";\nexport const WorkspaceFolderColor = { Neutral: \"neutral\", Red: \"red\", Orange: \"orange\", Yellow: \"yellow\", Green: \"green\", Blue: \"blue\", Purple: \"purple\" } as const satisfies Record<string, WorkspaceFolderColor>;\nexport const WORKSPACE_FOLDER_COLORS = Object.values(WorkspaceFolderColor) as WorkspaceFolderColor[];\n\nexport interface APIWorkspaceResourceRef {\n\tresource_type: WorkspaceResourceType;\n\tresource_id: SnowFlake;\n}\n\nexport interface APIWorkspaceFolderItem extends APIWorkspaceResourceRef {\n\tposition: number;\n}\n\nexport interface APIWorkspaceResourceFolder {\n\tid: SnowFlake;\n\tname: string;\n\tcolor: WorkspaceFolderColor;\n\tposition: number;\n\tresources: APIWorkspaceFolderItem[];\n\tcreated_at: ISODateString;\n\tupdated_at: ISODateString;\n}\n\nexport interface APIWorkspaceFavorite extends APIWorkspaceResourceRef {\n\tposition: number;\n\tcreated_at: ISODateString;\n}\n\nexport interface APIWorkspaceResourceOrganization {\n\tscope: WorkspaceResourceOrganizationScope;\n\tuser_id: SnowFlake;\n\tworkspace_id: SnowFlake | null;\n\tfolders: APIWorkspaceResourceFolder[];\n\tfavorites: APIWorkspaceFavorite[];\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/invites/list\n */\nexport type WorkspaceInviteKind = \"email\" | \"link\";\nexport const WorkspaceInviteKind = { Email: \"email\", Link: \"link\" } as const satisfies Record<string, WorkspaceInviteKind>;\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/invites/list\n */\nexport interface APIWorkspaceInvite {\n\tid: SnowFlake;\n\tworkspace_id: SnowFlake;\n\tkind: WorkspaceInviteKind;\n\t/** Bound e-mail; only for `kind: \"email\"`. */\n\temail: string | null;\n\trole_id: SnowFlake;\n\trole_name: string;\n\tinvited_by: { id: SnowFlake; display_name: string };\n\texpires_at: ISODateString;\n\taccepted_at: ISODateString | null;\n\trevoked_at: ISODateString | null;\n\tuses: number;\n\t/** Only for `kind: \"link\"`; `null` = unlimited uses. */\n\tmax_uses: number | null;\n\t/** Access expiration applied to members who join through this invite; `null` = never. */\n\texpires_in_days: number | null;\n\tcreated_at: ISODateString;\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/invites/create\n */\nexport interface APIWorkspaceInviteCreated extends APIWorkspaceInvite {\n\t/** Invite URL; only for `kind: \"link\"`, shown once. */\n\turl: string | null;\n}\n\n/**\n * What the invitee sees before accepting (`GET /v1/workspaces/invites/:token`).\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/invites/preview\n */\nexport interface APIWorkspaceInvitePreview {\n\tworkspace: { id: SnowFlake; name: string };\n\tinviter: { display_name: string };\n\trole_name: string;\n\tkind: WorkspaceInviteKind;\n\texpires_at: ISODateString;\n}\n\n/**\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/action-requests/list\n */\nexport type WorkspaceActionRequestAction = \"app_delete\" | \"database_delete\" | \"snapshot_create\" | \"snapshot_restore\";\nexport const WorkspaceActionRequestAction = {\n\tAppDelete: \"app_delete\",\n\tDatabaseDelete: \"database_delete\",\n\tSnapshotCreate: \"snapshot_create\",\n\tSnapshotRestore: \"snapshot_restore\",\n} as const satisfies Record<string, WorkspaceActionRequestAction>;\n\nexport type WorkspaceActionRequestStatus = \"pending\" | \"approved\" | \"rejected\" | \"expired\";\nexport const WorkspaceActionRequestStatus = {\n\tPending: \"pending\",\n\tApproved: \"approved\",\n\tRejected: \"rejected\",\n\tExpired: \"expired\",\n} as const satisfies Record<string, WorkspaceActionRequestStatus>;\n\n/**\n * `params` of an action request, per `action`. Actions without parameters take an empty object;\n * unknown keys are rejected with `WORKSPACE_ACTION_INVALID_PARAMS`.\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/action-requests/create\n */\nexport interface WorkspaceActionRequestParams {\n\tapp_delete: Record<string, never>;\n\tdatabase_delete: Record<string, never>;\n\tsnapshot_create: Record<string, never>;\n\t/** The snapshot must belong to the request's resource. */\n\tsnapshot_restore: { snapshot_id: SnowFlake };\n}\n\ninterface APIWorkspaceActionRequestBase {\n\tid: SnowFlake;\n\tworkspace_id: SnowFlake;\n\tresource_type: WorkspaceResourceType;\n\tresource_id: SnowFlake;\n\tresource_name: string | null;\n\tstatus: WorkspaceActionRequestStatus;\n\trequested_by: { id: SnowFlake; display_name: string };\n\tdecided_by: { id: SnowFlake; display_name: string } | null;\n\tdecided_at: ISODateString | null;\n\texpires_at: ISODateString;\n\tcreated_at: ISODateString;\n}\n\n/**\n * A request for a destructive/sensitive action made by a member who lacks its permission, to be\n * approved by someone who has it. Expires after 24 h without a decision. Discriminated by `action`,\n * which decides the shape of `params`.\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/action-requests/list\n */\nexport type APIWorkspaceActionRequest = {\n\t[A in WorkspaceActionRequestAction]: APIWorkspaceActionRequestBase & { action: A; params: WorkspaceActionRequestParams[A] };\n}[WorkspaceActionRequestAction];\n\n/**\n * Workspace error codes. Stable English sentinels returned in `code`; clients are expected to\n * translate them.\n * @see https://docs.vertracloud.app/api-reference/endpoint/workspaces/get\n */\nexport const WORKSPACE_ERROR_CODES = {\n\tWORKSPACE_NOT_FOUND: \"WORKSPACE_NOT_FOUND\",\n\tWORKSPACE_NAME_ALREADY_EXISTS: \"WORKSPACE_NAME_ALREADY_EXISTS\",\n\tWORKSPACE_MEMBER_LIMIT_REACHED: \"WORKSPACE_MEMBER_LIMIT_REACHED\",\n\tWORKSPACE_ROLE_LIMIT_REACHED: \"WORKSPACE_ROLE_LIMIT_REACHED\",\n\tWORKSPACE_ROLE_IN_USE: \"WORKSPACE_ROLE_IN_USE\",\n\tWORKSPACE_ROLE_NOT_FOUND: \"WORKSPACE_ROLE_NOT_FOUND\",\n\tWORKSPACE_ROLE_NAME_ALREADY_EXISTS: \"WORKSPACE_ROLE_NAME_ALREADY_EXISTS\",\n\tWORKSPACE_PERMISSION_DENIED: \"WORKSPACE_PERMISSION_DENIED\",\n\tWORKSPACE_PERMISSION_ESCALATION: \"WORKSPACE_PERMISSION_ESCALATION\",\n\tWORKSPACE_INVITE_NOT_FOUND: \"WORKSPACE_INVITE_NOT_FOUND\",\n\tWORKSPACE_INVITE_EXPIRED: \"WORKSPACE_INVITE_EXPIRED\",\n\tWORKSPACE_INVITE_EMAIL_MISMATCH: \"WORKSPACE_INVITE_EMAIL_MISMATCH\",\n\tWORKSPACE_OWNER_ONLY: \"WORKSPACE_OWNER_ONLY\",\n\tWORKSPACE_ACTION_REQUEST_NOT_FOUND: \"WORKSPACE_ACTION_REQUEST_NOT_FOUND\",\n\t/** 409 — the request was already approved or rejected. */\n\t/** 400 — the requester already has the permission; perform the action directly. */\n\tWORKSPACE_ACTION_NOT_NEEDED: \"WORKSPACE_ACTION_NOT_NEEDED\",\n\t/** 400 — the request `params` failed the action's validation (e.g. a snapshot of another resource). */\n\tWORKSPACE_ACTION_INVALID_PARAMS: \"WORKSPACE_ACTION_INVALID_PARAMS\",\n\t/** 409 — a pending request already exists for the same action on the same resource. */\n\tWORKSPACE_ACTION_REQUEST_PENDING: \"WORKSPACE_ACTION_REQUEST_PENDING\",\n\tWORKSPACE_RESOURCE_FOLDER_NOT_FOUND: \"WORKSPACE_RESOURCE_FOLDER_NOT_FOUND\",\n\tWORKSPACE_RESOURCE_FOLDER_NAME_CONFLICT: \"WORKSPACE_RESOURCE_FOLDER_NAME_CONFLICT\",\n\tWORKSPACE_RESOURCE_NOT_FOUND: \"WORKSPACE_RESOURCE_NOT_FOUND\",\n\tPLAN_RESTRICTED_FEATURE: \"PLAN_RESTRICTED_FEATURE\",\n} as const;\nexport type WorkspaceErrorCode = (typeof WORKSPACE_ERROR_CODES)[keyof typeof WORKSPACE_ERROR_CODES];\n"],"mappings":"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","names":[]}