@objectstack/platform-objects 4.0.5 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/apps/index.d.mts +16 -48
  2. package/dist/apps/index.d.ts +16 -48
  3. package/dist/apps/index.js +139 -217
  4. package/dist/apps/index.js.map +1 -1
  5. package/dist/apps/index.mjs +140 -212
  6. package/dist/apps/index.mjs.map +1 -1
  7. package/dist/audit/index.d.mts +38990 -51
  8. package/dist/audit/index.d.ts +38990 -51
  9. package/dist/audit/index.js +1428 -0
  10. package/dist/audit/index.js.map +1 -1
  11. package/dist/audit/index.mjs +1417 -1
  12. package/dist/audit/index.mjs.map +1 -1
  13. package/dist/identity/index.d.mts +14869 -2802
  14. package/dist/identity/index.d.ts +14869 -2802
  15. package/dist/identity/index.js +1090 -6
  16. package/dist/identity/index.js.map +1 -1
  17. package/dist/identity/index.mjs +1089 -7
  18. package/dist/identity/index.mjs.map +1 -1
  19. package/dist/index.d.mts +8 -7
  20. package/dist/index.d.ts +8 -7
  21. package/dist/index.js +3652 -1482
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +3633 -1465
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/integration/index.d.mts +2905 -0
  26. package/dist/integration/index.d.ts +2905 -0
  27. package/dist/integration/index.js +140 -0
  28. package/dist/integration/index.js.map +1 -0
  29. package/dist/integration/index.mjs +138 -0
  30. package/dist/integration/index.mjs.map +1 -0
  31. package/dist/metadata/index.d.mts +577 -21181
  32. package/dist/metadata/index.d.ts +577 -21181
  33. package/dist/metadata/index.js +29 -619
  34. package/dist/metadata/index.js.map +1 -1
  35. package/dist/metadata/index.mjs +30 -615
  36. package/dist/metadata/index.mjs.map +1 -1
  37. package/dist/security/index.d.mts +7278 -46
  38. package/dist/security/index.d.ts +7278 -46
  39. package/dist/security/index.js +540 -0
  40. package/dist/security/index.js.map +1 -1
  41. package/dist/security/index.mjs +539 -1
  42. package/dist/security/index.mjs.map +1 -1
  43. package/dist/system/index.d.mts +8409 -0
  44. package/dist/system/index.d.ts +8409 -0
  45. package/dist/system/index.js +395 -0
  46. package/dist/system/index.js.map +1 -0
  47. package/dist/system/index.mjs +391 -0
  48. package/dist/system/index.mjs.map +1 -0
  49. package/package.json +13 -8
  50. package/dist/tenant/index.d.mts +0 -18464
  51. package/dist/tenant/index.d.ts +0 -18464
  52. package/dist/tenant/index.js +0 -741
  53. package/dist/tenant/index.js.map +0 -1
  54. package/dist/tenant/index.mjs +0 -733
  55. package/dist/tenant/index.mjs.map +0 -1
  56. /package/dist/{state-machine.zod-BFg-VE0M.d-Ek3_yo9P.d.mts → state-machine.zod-BNanU03M.d-Ek3_yo9P.d.mts} +0 -0
  57. /package/dist/{state-machine.zod-BFg-VE0M.d-Ek3_yo9P.d.ts → state-machine.zod-BNanU03M.d-Ek3_yo9P.d.ts} +0 -0
@@ -1,741 +0,0 @@
1
- 'use strict';
2
-
3
- var data = require('@objectstack/spec/data');
4
-
5
- // src/tenant/sys-project.object.ts
6
- var SysProject = data.ObjectSchema.create({
7
- name: "sys_project",
8
- label: "Project",
9
- pluralLabel: "Projects",
10
- icon: "layers",
11
- isSystem: true,
12
- description: "Control-plane registry of tenant projects (prod/test/dev/sandbox).",
13
- titleFormat: "{display_name}",
14
- compactLayout: ["display_name", "status", "is_default"],
15
- fields: {
16
- id: data.Field.text({
17
- label: "Project ID",
18
- required: true,
19
- readonly: true,
20
- description: "UUID of the project (stable, never reused)."
21
- }),
22
- created_at: data.Field.datetime({
23
- label: "Created At",
24
- defaultValue: "NOW()",
25
- readonly: true,
26
- description: "Creation timestamp."
27
- }),
28
- updated_at: data.Field.datetime({
29
- label: "Updated At",
30
- defaultValue: "NOW()",
31
- readonly: true,
32
- description: "Last update timestamp."
33
- }),
34
- organization_id: data.Field.lookup("sys_organization", {
35
- label: "Organization",
36
- required: true,
37
- description: "Foreign key to sys_organization."
38
- }),
39
- display_name: data.Field.text({
40
- label: "Display Name",
41
- required: true,
42
- maxLength: 255,
43
- description: "Display name shown in Studio and APIs."
44
- }),
45
- is_default: data.Field.boolean({
46
- label: "Is Default",
47
- required: true,
48
- defaultValue: false,
49
- description: "Whether this is the default project for the organization. Exactly one per org."
50
- }),
51
- is_system: data.Field.boolean({
52
- label: "Is System",
53
- required: true,
54
- defaultValue: false,
55
- description: "Whether this is a system project (platform infrastructure, not user data)."
56
- }),
57
- plan: data.Field.select({
58
- label: "Plan",
59
- required: true,
60
- defaultValue: "free",
61
- description: "Plan tier applied to this project for quota and billing.",
62
- options: [
63
- { value: "free", label: "Free" },
64
- { value: "starter", label: "Starter" },
65
- { value: "pro", label: "Pro" },
66
- { value: "enterprise", label: "Enterprise" },
67
- { value: "custom", label: "Custom" }
68
- ]
69
- }),
70
- status: data.Field.select({
71
- label: "Status",
72
- required: true,
73
- defaultValue: "provisioning",
74
- description: "Project lifecycle status.",
75
- options: [
76
- { value: "provisioning", label: "Provisioning" },
77
- { value: "active", label: "Active" },
78
- { value: "suspended", label: "Suspended" },
79
- { value: "archived", label: "Archived" },
80
- { value: "failed", label: "Failed" },
81
- { value: "migrating", label: "Migrating" }
82
- ]
83
- }),
84
- created_by: data.Field.lookup("sys_user", {
85
- label: "Created By",
86
- required: true,
87
- description: "User that created the project."
88
- }),
89
- database_url: data.Field.url({
90
- label: "Database URL",
91
- required: false,
92
- description: "Connection URL for the project database (e.g. libsql://proj-uuid.turso.io). Set after provisioning."
93
- }),
94
- database_driver: data.Field.text({
95
- label: "Database Driver",
96
- required: false,
97
- maxLength: 50,
98
- description: "Data-plane driver key (turso, libsql, sqlite, memory, postgres)."
99
- }),
100
- storage_limit_mb: data.Field.number({
101
- label: "Storage Limit (MB)",
102
- required: false,
103
- defaultValue: 1024,
104
- description: "Storage quota in megabytes."
105
- }),
106
- provisioned_at: data.Field.datetime({
107
- label: "Provisioned At",
108
- required: false,
109
- description: "When the physical database was provisioned."
110
- }),
111
- metadata: data.Field.textarea({
112
- label: "Metadata",
113
- required: false,
114
- description: "JSON-serialized free-form metadata (feature flags, tags, \u2026)."
115
- }),
116
- hostname: data.Field.text({
117
- label: "Hostname",
118
- required: false,
119
- maxLength: 255,
120
- unique: true,
121
- description: "Canonical hostname for this project (e.g. acme-dev.objectstack.app or api.acme.com). UNIQUE. Auto-set on creation; can be overridden for custom domains."
122
- })
123
- },
124
- indexes: [
125
- { fields: ["organization_id"] },
126
- { fields: ["organization_id", "is_default"] },
127
- { fields: ["status"] },
128
- { fields: ["database_driver"] },
129
- { fields: ["hostname"], unique: true }
130
- ],
131
- enable: {
132
- trackHistory: true,
133
- searchable: true,
134
- apiEnabled: true,
135
- apiMethods: ["get", "list", "create", "update", "delete"],
136
- trash: false,
137
- mru: true
138
- }
139
- });
140
- var SysProjectMember = data.ObjectSchema.create({
141
- name: "sys_project_member",
142
- label: "Project Member",
143
- pluralLabel: "Project Members",
144
- icon: "users",
145
- isSystem: true,
146
- description: "Per-project user/role assignments.",
147
- titleFormat: "{user_id} @ {project_id}",
148
- compactLayout: ["user_id", "project_id", "role"],
149
- fields: {
150
- id: data.Field.text({
151
- label: "Membership ID",
152
- required: true,
153
- readonly: true,
154
- description: "UUID of the membership."
155
- }),
156
- created_at: data.Field.datetime({
157
- label: "Created At",
158
- defaultValue: "NOW()",
159
- readonly: true,
160
- description: "Creation timestamp."
161
- }),
162
- updated_at: data.Field.datetime({
163
- label: "Updated At",
164
- defaultValue: "NOW()",
165
- readonly: true,
166
- description: "Last update timestamp."
167
- }),
168
- project_id: data.Field.lookup("sys_project", {
169
- label: "Project",
170
- required: true,
171
- description: "Foreign key to sys_project."
172
- }),
173
- user_id: data.Field.lookup("sys_user", {
174
- label: "User",
175
- required: true,
176
- description: "Foreign key to sys_user."
177
- }),
178
- role: data.Field.select({
179
- label: "Role",
180
- required: true,
181
- description: "Per-project role (owner/admin/maker/reader/guest).",
182
- options: [
183
- { value: "owner", label: "Owner" },
184
- { value: "admin", label: "Administrator" },
185
- { value: "maker", label: "Maker / Developer" },
186
- { value: "reader", label: "Reader" },
187
- { value: "guest", label: "Guest" }
188
- ]
189
- }),
190
- invited_by: data.Field.lookup("sys_user", {
191
- label: "Invited By",
192
- required: true,
193
- description: "User that granted this membership."
194
- })
195
- },
196
- indexes: [
197
- { fields: ["project_id", "user_id"], unique: true },
198
- { fields: ["project_id"] },
199
- { fields: ["user_id"] },
200
- { fields: ["role"] }
201
- ],
202
- enable: {
203
- trackHistory: true,
204
- searchable: true,
205
- apiEnabled: true,
206
- apiMethods: ["get", "list", "create", "update", "delete"],
207
- trash: true,
208
- mru: false
209
- }
210
- });
211
- var SysProjectCredential = data.ObjectSchema.create({
212
- name: "sys_project_credential",
213
- label: "Project Credential",
214
- pluralLabel: "Project Credentials",
215
- icon: "key",
216
- isSystem: true,
217
- description: "Rotatable encrypted credentials for project databases.",
218
- titleFormat: "{id}",
219
- compactLayout: ["project_id", "status", "authorization", "expires_at"],
220
- fields: {
221
- id: data.Field.text({
222
- label: "Credential ID",
223
- required: true,
224
- readonly: true,
225
- description: "UUID of the credential."
226
- }),
227
- created_at: data.Field.datetime({
228
- label: "Created At",
229
- defaultValue: "NOW()",
230
- readonly: true,
231
- description: "Creation timestamp."
232
- }),
233
- updated_at: data.Field.datetime({
234
- label: "Updated At",
235
- defaultValue: "NOW()",
236
- readonly: true,
237
- description: "Last update timestamp."
238
- }),
239
- project_id: data.Field.lookup("sys_project", {
240
- label: "Project",
241
- required: true,
242
- description: "Foreign key to sys_project."
243
- }),
244
- secret_ciphertext: data.Field.textarea({
245
- label: "Secret Ciphertext",
246
- required: true,
247
- description: "Encrypted auth token or secret (never store plaintext)."
248
- }),
249
- encryption_key_id: data.Field.text({
250
- label: "Encryption Key ID",
251
- required: true,
252
- maxLength: 255,
253
- description: "KMS/encryption key ID that produced the ciphertext."
254
- }),
255
- authorization: data.Field.select({
256
- label: "Authorization",
257
- required: true,
258
- defaultValue: "full_access",
259
- description: "Authorization scope for this credential.",
260
- options: [
261
- { value: "full_access", label: "Full Access" },
262
- { value: "read_only", label: "Read Only" }
263
- ]
264
- }),
265
- status: data.Field.select({
266
- label: "Status",
267
- required: true,
268
- defaultValue: "active",
269
- description: "Credential lifecycle status.",
270
- options: [
271
- { value: "active", label: "Active" },
272
- { value: "rotating", label: "Rotating" },
273
- { value: "revoked", label: "Revoked" }
274
- ]
275
- }),
276
- expires_at: data.Field.datetime({
277
- label: "Expires At",
278
- required: false,
279
- description: "Optional expiry \u2014 after this timestamp the credential must be rotated."
280
- }),
281
- revoked_at: data.Field.datetime({
282
- label: "Revoked At",
283
- required: false,
284
- description: "Timestamp when the credential was revoked (null while active)."
285
- })
286
- },
287
- indexes: [
288
- { fields: ["project_id"] },
289
- { fields: ["project_id", "status"] },
290
- { fields: ["status"] },
291
- { fields: ["expires_at"] }
292
- ],
293
- enable: {
294
- trackHistory: true,
295
- searchable: false,
296
- apiEnabled: true,
297
- apiMethods: ["get", "list", "create", "update"],
298
- trash: false,
299
- mru: false
300
- }
301
- });
302
- var SysApp = data.ObjectSchema.create({
303
- name: "sys_app",
304
- label: "App",
305
- pluralLabel: "Apps",
306
- icon: "layout-grid",
307
- isSystem: true,
308
- description: "Org-scoped catalog of apps across all projects (sys_app).",
309
- titleFormat: "{label}",
310
- compactLayout: ["label", "project_name", "source", "active"],
311
- fields: {
312
- id: data.Field.text({
313
- label: "App Catalog ID",
314
- required: true,
315
- readonly: true,
316
- description: "UUID of this catalog entry (stable, never reused)."
317
- }),
318
- created_at: data.Field.datetime({
319
- label: "Created At",
320
- defaultValue: "NOW()",
321
- readonly: true,
322
- description: "Creation timestamp (ISO-8601)."
323
- }),
324
- updated_at: data.Field.datetime({
325
- label: "Updated At",
326
- defaultValue: "NOW()",
327
- readonly: true,
328
- description: "Last update timestamp (ISO-8601)."
329
- }),
330
- organization_id: data.Field.lookup("sys_organization", {
331
- label: "Organization",
332
- required: true,
333
- description: "Foreign key to sys_organization. Drives tenant isolation \u2014 ControlPlaneProxyDriver auto-injects this filter on all reads."
334
- }),
335
- project_id: data.Field.lookup("sys_project", {
336
- label: "Project",
337
- required: true,
338
- description: "Foreign key to sys_project. The project this app lives in."
339
- }),
340
- project_name: data.Field.text({
341
- label: "Project Name",
342
- required: false,
343
- description: "Denormalized project display name. Cached here so the catalog list avoids a JOIN against sys_project for card rendering."
344
- }),
345
- name: data.Field.text({
346
- label: "App Name",
347
- required: true,
348
- description: "Short, machine name of the app (snake_case). Unique within a project."
349
- }),
350
- label: data.Field.text({
351
- label: "Display Label",
352
- required: false,
353
- description: "Human-readable display label shown on the catalog card."
354
- }),
355
- icon: data.Field.text({
356
- label: "Icon",
357
- required: false,
358
- description: "Icon identifier (e.g. lucide name, emoji, or URL)."
359
- }),
360
- branding: data.Field.textarea({
361
- label: "Branding",
362
- required: false,
363
- description: "JSON-serialized branding subset (color, logo, \u2026) used for catalog rendering."
364
- }),
365
- is_default: data.Field.boolean({
366
- label: "Is Default",
367
- required: false,
368
- defaultValue: false,
369
- description: "Whether this is the default app for its project."
370
- }),
371
- active: data.Field.boolean({
372
- label: "Active",
373
- required: true,
374
- defaultValue: true,
375
- description: "Whether the app is currently enabled in its project kernel."
376
- }),
377
- source: data.Field.select({
378
- label: "Source",
379
- required: true,
380
- defaultValue: "package",
381
- description: "Where this app originates from.",
382
- options: [
383
- { value: "package", label: "Package" },
384
- { value: "user", label: "User" }
385
- ]
386
- }),
387
- package_id: data.Field.lookup("sys_package", {
388
- label: "Package",
389
- required: false,
390
- description: "Foreign key to sys_package when source = package. Null for user-created apps."
391
- })
392
- },
393
- indexes: [
394
- { fields: ["project_id", "name"], unique: true },
395
- { fields: ["organization_id"] },
396
- { fields: ["project_id"] }
397
- ],
398
- enable: {
399
- trackHistory: false,
400
- searchable: true,
401
- apiEnabled: true,
402
- apiMethods: ["get", "list", "create", "update", "delete"],
403
- trash: false,
404
- mru: false
405
- }
406
- });
407
- var SysPackage = data.ObjectSchema.create({
408
- name: "sys_package",
409
- label: "Package",
410
- pluralLabel: "Packages",
411
- icon: "package",
412
- isSystem: true,
413
- description: "Control-plane registry of installable packages / solutions (sys_package).",
414
- titleFormat: "{display_name}",
415
- compactLayout: ["display_name", "manifest_id", "visibility", "created_at"],
416
- fields: {
417
- id: data.Field.text({
418
- label: "Package ID",
419
- required: true,
420
- readonly: true,
421
- description: "UUID of the package (stable, never reused)."
422
- }),
423
- created_at: data.Field.datetime({
424
- label: "Created At",
425
- defaultValue: "NOW()",
426
- readonly: true,
427
- description: "Creation timestamp (ISO-8601)."
428
- }),
429
- updated_at: data.Field.datetime({
430
- label: "Updated At",
431
- defaultValue: "NOW()",
432
- readonly: true,
433
- description: "Last update timestamp (ISO-8601)."
434
- }),
435
- manifest_id: data.Field.text({
436
- label: "Manifest ID",
437
- required: true,
438
- readonly: true,
439
- maxLength: 255,
440
- description: "Globally unique reverse-domain package identifier (e.g. com.acme.crm). Immutable once set. Used as the stable public key for dependency declarations."
441
- }),
442
- owner_org_id: data.Field.lookup("sys_organization", {
443
- label: "Owner Organization",
444
- required: true,
445
- description: "Organization that owns and publishes this package."
446
- }),
447
- display_name: data.Field.text({
448
- label: "Display Name",
449
- required: true,
450
- maxLength: 128,
451
- description: "Human-readable name shown in Studio and Marketplace."
452
- }),
453
- description: data.Field.textarea({
454
- label: "Description",
455
- required: false,
456
- description: "Short package description shown in search results and install dialogs (max 512 chars)."
457
- }),
458
- readme: data.Field.textarea({
459
- label: "Readme",
460
- required: false,
461
- description: "Long-form package documentation (markdown). Displayed on the Marketplace detail page."
462
- }),
463
- visibility: data.Field.select({
464
- label: "Visibility",
465
- required: true,
466
- defaultValue: "private",
467
- description: "Controls who can discover and install the package. private = owner org only; org = all envs in owner org; marketplace = public registry.",
468
- options: [
469
- { value: "private", label: "Private" },
470
- { value: "org", label: "Organization" },
471
- { value: "marketplace", label: "Marketplace" }
472
- ]
473
- }),
474
- category: data.Field.text({
475
- label: "Category",
476
- required: false,
477
- maxLength: 100,
478
- description: "Primary category for Marketplace filtering (e.g. crm, hr, finance, devtools)."
479
- }),
480
- tags: data.Field.textarea({
481
- label: "Tags",
482
- required: false,
483
- description: 'JSON-serialized array of search/filter tags (e.g. ["salesforce","sync","crm"]).'
484
- }),
485
- icon_url: data.Field.url({
486
- label: "Icon URL",
487
- required: false,
488
- description: "URL to the package icon image displayed in Studio and Marketplace."
489
- }),
490
- homepage_url: data.Field.url({
491
- label: "Homepage URL",
492
- required: false,
493
- description: "URL to the package homepage or external documentation site."
494
- }),
495
- license: data.Field.text({
496
- label: "License",
497
- required: false,
498
- maxLength: 64,
499
- description: "SPDX license identifier (e.g. MIT, Apache-2.0, proprietary)."
500
- }),
501
- created_by: data.Field.lookup("sys_user", {
502
- label: "Created By",
503
- required: true,
504
- description: "User that registered this package in the Control Plane."
505
- })
506
- },
507
- indexes: [
508
- { fields: ["manifest_id"], unique: true },
509
- { fields: ["owner_org_id"] },
510
- { fields: ["visibility"] },
511
- { fields: ["owner_org_id", "visibility"] }
512
- ],
513
- enable: {
514
- trackHistory: false,
515
- searchable: true,
516
- apiEnabled: true,
517
- apiMethods: ["get", "list", "create", "update"],
518
- trash: false,
519
- mru: false
520
- }
521
- });
522
- var SysPackageVersion = data.ObjectSchema.create({
523
- name: "sys_package_version",
524
- label: "Package Version",
525
- pluralLabel: "Package Versions",
526
- icon: "tag",
527
- isSystem: true,
528
- description: "Immutable release snapshot of a package (sys_package_version).",
529
- titleFormat: "{package_id} v{version}",
530
- compactLayout: ["package_id", "version", "status", "published_at"],
531
- fields: {
532
- id: data.Field.text({
533
- label: "Version ID",
534
- required: true,
535
- readonly: true,
536
- description: "UUID of this package version row (stable, never reused)."
537
- }),
538
- created_at: data.Field.datetime({
539
- label: "Created At",
540
- defaultValue: "NOW()",
541
- readonly: true,
542
- description: "Creation timestamp (ISO-8601)."
543
- }),
544
- updated_at: data.Field.datetime({
545
- label: "Updated At",
546
- defaultValue: "NOW()",
547
- readonly: true,
548
- description: "Last update timestamp (ISO-8601). Only modified while status is draft."
549
- }),
550
- package_id: data.Field.lookup("sys_package", {
551
- label: "Package",
552
- required: true,
553
- description: "Foreign key to sys_package (the parent package)."
554
- }),
555
- version: data.Field.text({
556
- label: "Version",
557
- required: true,
558
- maxLength: 64,
559
- description: "Semantic version string (e.g. 1.2.3, 2.0.0-beta.1). Follows semver spec."
560
- }),
561
- status: data.Field.select({
562
- label: "Status",
563
- required: true,
564
- defaultValue: "draft",
565
- description: "Lifecycle status. draft = being authored, may be mutated. published = immutable snapshot, installable in any environment. deprecated = published but superseded; new installs blocked.",
566
- options: [
567
- { value: "draft", label: "Draft" },
568
- { value: "published", label: "Published" },
569
- { value: "deprecated", label: "Deprecated" }
570
- ]
571
- }),
572
- manifest_json: data.Field.textarea({
573
- label: "Manifest JSON",
574
- required: false,
575
- description: "Full package manifest serialized as JSON. Frozen on publish \u2014 writing to this field after status = published is rejected by the service layer."
576
- }),
577
- checksum: data.Field.text({
578
- label: "Checksum",
579
- required: false,
580
- maxLength: 64,
581
- readonly: true,
582
- description: "SHA-256 hex digest of manifest_json. Computed and set on publish. Used for tamper detection."
583
- }),
584
- release_notes: data.Field.textarea({
585
- label: "Release Notes",
586
- required: false,
587
- description: "Human-readable changelog for this version (markdown). Optional."
588
- }),
589
- min_platform_version: data.Field.text({
590
- label: "Min Platform Version",
591
- required: false,
592
- maxLength: 32,
593
- description: "Minimum ObjectStack platform version required to run this version (semver, e.g. 4.0.0). Denormalized from manifest_json for fast validation."
594
- }),
595
- is_pre_release: data.Field.boolean({
596
- label: "Pre-release",
597
- required: true,
598
- defaultValue: false,
599
- description: 'Whether this is a pre-release version (alpha, beta, rc). Pre-release versions are not installed by default when resolving "latest".'
600
- }),
601
- published_at: data.Field.datetime({
602
- label: "Published At",
603
- required: false,
604
- description: "Timestamp when this version was published. Null while status is draft."
605
- }),
606
- published_by: data.Field.lookup("sys_user", {
607
- label: "Published By",
608
- required: false,
609
- description: "User who published this version. Set on the draft \u2192 published transition."
610
- }),
611
- created_by: data.Field.lookup("sys_user", {
612
- label: "Created By",
613
- required: true,
614
- description: "User that created this version row."
615
- })
616
- },
617
- indexes: [
618
- { fields: ["package_id", "version"], unique: true },
619
- { fields: ["package_id"] },
620
- { fields: ["status"] },
621
- { fields: ["package_id", "status"] }
622
- ],
623
- enable: {
624
- trackHistory: false,
625
- searchable: false,
626
- apiEnabled: true,
627
- apiMethods: ["get", "list", "create", "update"],
628
- trash: false,
629
- mru: false
630
- }
631
- });
632
- var SysPackageInstallation = data.ObjectSchema.create({
633
- name: "sys_package_installation",
634
- label: "Package Installation",
635
- pluralLabel: "Package Installations",
636
- icon: "package",
637
- isSystem: true,
638
- description: "Per-project package installation registry (sys_package_installation).",
639
- titleFormat: "{package_id} @ {project_id}",
640
- compactLayout: ["package_version_id", "project_id", "status", "installed_at"],
641
- fields: {
642
- id: data.Field.text({
643
- label: "Installation ID",
644
- required: true,
645
- readonly: true,
646
- description: "UUID of this installation record (stable, never reused)."
647
- }),
648
- created_at: data.Field.datetime({
649
- label: "Created At",
650
- defaultValue: "NOW()",
651
- readonly: true,
652
- description: "Creation timestamp (ISO-8601)."
653
- }),
654
- updated_at: data.Field.datetime({
655
- label: "Updated At",
656
- defaultValue: "NOW()",
657
- readonly: true,
658
- description: "Last update timestamp \u2014 changes on upgrade, rollback, enable/disable (ISO-8601)."
659
- }),
660
- project_id: data.Field.lookup("sys_project", {
661
- label: "Project",
662
- required: true,
663
- description: "Foreign key to sys_project. The project that owns this installation."
664
- }),
665
- package_version_id: data.Field.lookup("sys_package_version", {
666
- label: "Package Version",
667
- required: true,
668
- description: "Foreign key to sys_package_version. The specific, immutable release snapshot currently installed in this project. Upgrading = swapping this field to a newer version. Rollback = swapping to an older version."
669
- }),
670
- package_id: data.Field.lookup("sys_package", {
671
- label: "Package",
672
- required: true,
673
- description: "Foreign key to sys_package. Denormalized from the linked package_version row at install time to enforce the UNIQUE (project_id, package_id) constraint without a JOIN."
674
- }),
675
- status: data.Field.select({
676
- label: "Status",
677
- required: true,
678
- defaultValue: "installed",
679
- description: "Current lifecycle status of this installation within the project.",
680
- options: [
681
- { value: "installed", label: "Installed" },
682
- { value: "installing", label: "Installing" },
683
- { value: "upgrading", label: "Upgrading" },
684
- { value: "disabled", label: "Disabled" },
685
- { value: "error", label: "Error" }
686
- ]
687
- }),
688
- enabled: data.Field.boolean({
689
- label: "Enabled",
690
- required: true,
691
- defaultValue: true,
692
- description: "Whether the package metadata is actively loaded into this project. Disabled packages are installed but their schema is not visible to the runtime."
693
- }),
694
- settings: data.Field.textarea({
695
- label: "Settings",
696
- required: false,
697
- description: "JSON-serialized per-installation configuration overrides. Keys mirror the package manifest configurationSchema.properties."
698
- }),
699
- installed_at: data.Field.datetime({
700
- label: "Installed At",
701
- required: true,
702
- defaultValue: "NOW()",
703
- description: "Timestamp when this installation was first created (ISO-8601)."
704
- }),
705
- installed_by: data.Field.lookup("sys_user", {
706
- label: "Installed By",
707
- required: false,
708
- description: "User who performed the initial install. Null for system-automated installs."
709
- }),
710
- error_message: data.Field.textarea({
711
- label: "Error Message",
712
- required: false,
713
- description: "Error details when status is error. Cleared on next successful install/upgrade."
714
- })
715
- },
716
- indexes: [
717
- { fields: ["project_id", "package_id"], unique: true },
718
- { fields: ["project_id"] },
719
- { fields: ["package_id"] },
720
- { fields: ["package_version_id"] },
721
- { fields: ["status"] }
722
- ],
723
- enable: {
724
- trackHistory: false,
725
- searchable: true,
726
- apiEnabled: true,
727
- apiMethods: ["get", "list", "create", "update", "delete"],
728
- trash: false,
729
- mru: false
730
- }
731
- });
732
-
733
- exports.SysApp = SysApp;
734
- exports.SysPackage = SysPackage;
735
- exports.SysPackageInstallation = SysPackageInstallation;
736
- exports.SysPackageVersion = SysPackageVersion;
737
- exports.SysProject = SysProject;
738
- exports.SysProjectCredential = SysProjectCredential;
739
- exports.SysProjectMember = SysProjectMember;
740
- //# sourceMappingURL=index.js.map
741
- //# sourceMappingURL=index.js.map