@objectstack/platform-objects 11.6.0 → 11.9.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.
package/dist/index.mjs CHANGED
@@ -21,7 +21,7 @@ var SysUser = ObjectSchema.create({
21
21
  nameField: "name",
22
22
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
23
23
  titleFormat: "{name}",
24
- compactLayout: ["name", "email", "email_verified"],
24
+ highlightFields: ["name", "email", "email_verified"],
25
25
  // Custom actions — generic CRUD is suppressed because user accounts are
26
26
  // managed by better-auth, but we still need first-class affordances for
27
27
  // common operations. Each action delegates to a Console-side named script
@@ -547,7 +547,7 @@ var SysSession = ObjectSchema.create({
547
547
  nameField: "user_id",
548
548
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
549
549
  titleFormat: "Session \u2014 {user_id}",
550
- compactLayout: ["user_id", "ip_address", "expires_at"],
550
+ highlightFields: ["user_id", "ip_address", "expires_at"],
551
551
  // Custom actions — sessions are managed by better-auth (generic CRUD
552
552
  // suppressed). "Sign out other devices" is the high-value self-service
553
553
  // affordance every IdP exposes. Maps to better-auth's
@@ -732,7 +732,7 @@ var SysAccount = ObjectSchema.create({
732
732
  },
733
733
  description: "OAuth and authentication provider accounts",
734
734
  titleFormat: "{provider_id} - {account_id}",
735
- compactLayout: ["provider_id", "user_id", "account_id"],
735
+ highlightFields: ["provider_id", "user_id", "account_id"],
736
736
  // Custom actions — sysadmins routinely need to revoke a user's OAuth
737
737
  // link (e.g. when an SSO provider is decommissioned or the user
738
738
  // requests it). Better-auth exposes `/unlink-account { providerId,
@@ -923,7 +923,7 @@ var SysVerification = ObjectSchema.create({
923
923
  },
924
924
  description: "Email and phone verification tokens",
925
925
  titleFormat: "Verification for {identifier}",
926
- compactLayout: ["identifier", "expires_at", "created_at"],
926
+ highlightFields: ["identifier", "expires_at", "created_at"],
927
927
  fields: {
928
928
  id: Field.text({
929
929
  label: "Verification ID",
@@ -995,7 +995,7 @@ var SysOrganization = ObjectSchema.create({
995
995
  nameField: "name",
996
996
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
997
997
  titleFormat: "{name}",
998
- compactLayout: ["name", "slug"],
998
+ highlightFields: ["name", "slug"],
999
999
  // Custom actions — generic CRUD is suppressed (better-auth-managed),
1000
1000
  // but admins still need to create new orgs from the Setup app.
1001
1001
  actions: [
@@ -1226,7 +1226,7 @@ var SysMember = ObjectSchema.create({
1226
1226
  // '{user_id} in {organization_id}' format renders "… in null". User + role
1227
1227
  // identifies the membership in both single- and multi-org deployments.
1228
1228
  titleFormat: "{user_id} ({role})",
1229
- compactLayout: ["user_id", "organization_id", "role"],
1229
+ highlightFields: ["user_id", "organization_id", "role"],
1230
1230
  // Row-level actions: better-auth `organization/update-member-role` and
1231
1231
  // `organization/remove-member`. Generic CRUD is suppressed on better-auth
1232
1232
  // managed tables, so these are the canonical edit/delete entry points.
@@ -1396,7 +1396,7 @@ var SysInvitation = ObjectSchema.create({
1396
1396
  // single-org mode (renders "Invitation to null"), and the recipient email is
1397
1397
  // the more useful identifier in both modes anyway.
1398
1398
  titleFormat: "Invitation for {email}",
1399
- compactLayout: ["email", "organization_id", "status"],
1399
+ highlightFields: ["email", "organization_id", "status"],
1400
1400
  // Custom actions — generic CRUD is suppressed (better-auth-managed).
1401
1401
  // Mirror the `invite_user` toolbar action from sys_user here so admins
1402
1402
  // landing on the Invitations page get an obvious entry point.
@@ -1619,7 +1619,7 @@ var SysTeam = ObjectSchema.create({
1619
1619
  nameField: "name",
1620
1620
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
1621
1621
  titleFormat: "{name}",
1622
- compactLayout: ["name", "organization_id"],
1622
+ highlightFields: ["name", "organization_id"],
1623
1623
  // Custom actions calling better-auth's team endpoints. Generic CRUD is
1624
1624
  // suppressed (managedBy: 'better-auth'), so these are the canonical
1625
1625
  // entry points for create/update/delete.
@@ -1774,7 +1774,7 @@ var SysTeamMember = ObjectSchema.create({
1774
1774
  },
1775
1775
  description: "Team membership records linking users to teams",
1776
1776
  titleFormat: "{user_id} in {team_id}",
1777
- compactLayout: ["user_id", "team_id", "created_at"],
1777
+ highlightFields: ["user_id", "team_id", "created_at"],
1778
1778
  // Custom actions calling better-auth's team-member endpoints. Generic
1779
1779
  // CRUD is suppressed (managedBy: 'better-auth') so these are the
1780
1780
  // canonical add/remove entry points.
@@ -1867,7 +1867,7 @@ var SysBusinessUnit = ObjectSchema.create({
1867
1867
  nameField: "name",
1868
1868
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
1869
1869
  titleFormat: "{name}",
1870
- compactLayout: ["name", "kind", "parent_business_unit_id", "manager_user_id"],
1870
+ highlightFields: ["name", "kind", "parent_business_unit_id", "manager_user_id"],
1871
1871
  listViews: {
1872
1872
  // Org chart — the hierarchy view. Surfaces the self-referencing
1873
1873
  // `parent_business_unit_id` tree (ADR-0057 D2) as an indented, expand/
@@ -2050,7 +2050,7 @@ var SysBusinessUnitMember = ObjectSchema.create({
2050
2050
  managedBy: "platform",
2051
2051
  description: "User assignment to a business unit (matrix-org friendly, effective-dated).",
2052
2052
  titleFormat: "{user_id} in {business_unit_id}",
2053
- compactLayout: ["user_id", "business_unit_id", "role_in_business_unit", "is_primary"],
2053
+ highlightFields: ["user_id", "business_unit_id", "role_in_business_unit", "is_primary"],
2054
2054
  fields: {
2055
2055
  id: Field.text({
2056
2056
  label: "Member ID",
@@ -2142,7 +2142,7 @@ var SysApiKey = ObjectSchema.create({
2142
2142
  nameField: "name",
2143
2143
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
2144
2144
  titleFormat: "{name}",
2145
- compactLayout: ["name", "prefix", "user_id", "expires_at", "revoked"],
2145
+ highlightFields: ["name", "prefix", "user_id", "expires_at", "revoked"],
2146
2146
  // Custom actions — sys_api_key is managed-by 'better-auth' but the
2147
2147
  // `revoked` boolean is a column we control via the data API. These row
2148
2148
  // actions use the generic PATCH /api/v1/sys_api_key/{id} endpoint with
@@ -2331,7 +2331,7 @@ var SysTwoFactor = ObjectSchema.create({
2331
2331
  },
2332
2332
  description: "Two-factor authentication credentials",
2333
2333
  titleFormat: "Two-factor for {user_id}",
2334
- compactLayout: ["user_id", "created_at"],
2334
+ highlightFields: ["user_id", "created_at"],
2335
2335
  listViews: {
2336
2336
  mine: {
2337
2337
  type: "grid",
@@ -2487,7 +2487,7 @@ var SysDeviceCode = ObjectSchema.create({
2487
2487
  nameField: "user_code",
2488
2488
  // [ADR-0079] canonical primary-title pointer (single-field titleFormat)
2489
2489
  titleFormat: "{user_code}",
2490
- compactLayout: ["user_code", "status", "client_id", "expires_at"],
2490
+ highlightFields: ["user_code", "status", "client_id", "expires_at"],
2491
2491
  fields: {
2492
2492
  id: Field.text({
2493
2493
  label: "Device Code ID",
@@ -2582,7 +2582,7 @@ var SysUserPreference = ObjectSchema.create({
2582
2582
  nameField: "key",
2583
2583
  // [ADR-0079] canonical primary-title pointer (single-field titleFormat)
2584
2584
  titleFormat: "{key}",
2585
- compactLayout: ["user_id", "key"],
2585
+ highlightFields: ["user_id", "key"],
2586
2586
  listViews: {
2587
2587
  mine: {
2588
2588
  type: "grid",
@@ -2679,7 +2679,7 @@ var SysOauthApplication = ObjectSchema.create({
2679
2679
  nameField: "name",
2680
2680
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
2681
2681
  titleFormat: "{name}",
2682
- compactLayout: ["name", "client_id", "type", "disabled"],
2682
+ highlightFields: ["name", "client_id", "type", "disabled"],
2683
2683
  // Custom actions — all OAuth-application mutations are routed through
2684
2684
  // better-auth's `@better-auth/oauth-provider` endpoints (and a thin
2685
2685
  // ObjectStack-added auth route for the enable/disable toggle) rather
@@ -3079,7 +3079,7 @@ var SysOauthAccessToken = ObjectSchema.create({
3079
3079
  docsUrl: "https://docs.objectstack.ai/adr/0010-metadata-protection"
3080
3080
  },
3081
3081
  description: "Opaque OAuth access tokens issued to client applications",
3082
- compactLayout: ["client_id", "user_id", "expires_at"],
3082
+ highlightFields: ["client_id", "user_id", "expires_at"],
3083
3083
  fields: {
3084
3084
  id: Field.text({
3085
3085
  label: "ID",
@@ -3165,7 +3165,7 @@ var SysOauthRefreshToken = ObjectSchema.create({
3165
3165
  docsUrl: "https://docs.objectstack.ai/adr/0010-metadata-protection"
3166
3166
  },
3167
3167
  description: "Opaque OAuth refresh tokens (linked to a session)",
3168
- compactLayout: ["client_id", "user_id", "expires_at"],
3168
+ highlightFields: ["client_id", "user_id", "expires_at"],
3169
3169
  fields: {
3170
3170
  id: Field.text({
3171
3171
  label: "ID",
@@ -3255,7 +3255,7 @@ var SysOauthConsent = ObjectSchema.create({
3255
3255
  docsUrl: "https://docs.objectstack.ai/adr/0010-metadata-protection"
3256
3256
  },
3257
3257
  description: "User consent records for OAuth client applications",
3258
- compactLayout: ["client_id", "user_id", "scopes"],
3258
+ highlightFields: ["client_id", "user_id", "scopes"],
3259
3259
  fields: {
3260
3260
  id: Field.text({
3261
3261
  label: "ID",
@@ -3323,7 +3323,7 @@ var SysJwks = ObjectSchema.create({
3323
3323
  docsUrl: "https://docs.objectstack.ai/adr/0010-metadata-protection"
3324
3324
  },
3325
3325
  description: "Asymmetric key pairs used to sign and verify issued JWTs",
3326
- compactLayout: ["id", "created_at", "expires_at"],
3326
+ highlightFields: ["id", "created_at", "expires_at"],
3327
3327
  fields: {
3328
3328
  id: Field.text({
3329
3329
  label: "Key ID",
@@ -3396,7 +3396,7 @@ var SysSsoProvider = ObjectSchema.create({
3396
3396
  nameField: "provider_id",
3397
3397
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
3398
3398
  titleFormat: "{provider_id}",
3399
- compactLayout: ["provider_id", "issuer", "domain"],
3399
+ highlightFields: ["provider_id", "issuer", "domain"],
3400
3400
  // All mutations go through @better-auth/sso's endpoints under
3401
3401
  // /api/v1/auth/sso/* (register / delete-provider) rather than the generic
3402
3402
  // data layer, so server-side config validation + secret handling run.
@@ -3638,7 +3638,7 @@ var SysScimProvider = ObjectSchema.create({
3638
3638
  nameField: "provider_id",
3639
3639
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
3640
3640
  titleFormat: "{provider_id}",
3641
- compactLayout: ["provider_id", "organization_id"],
3641
+ highlightFields: ["provider_id", "organization_id"],
3642
3642
  listViews: {
3643
3643
  all: {
3644
3644
  type: "grid",
@@ -3714,7 +3714,7 @@ var SysNotification = ObjectSchema.create({
3714
3714
  nameField: "topic",
3715
3715
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
3716
3716
  titleFormat: "{topic}",
3717
- compactLayout: ["topic", "severity", "source_object", "created_at"],
3717
+ highlightFields: ["topic", "severity", "source_object", "created_at"],
3718
3718
  listViews: {
3719
3719
  recent: {
3720
3720
  type: "grid",
@@ -3822,7 +3822,7 @@ var SysAttachment = ObjectSchema.create({
3822
3822
  managedBy: "platform",
3823
3823
  description: "Polymorphic link between a sys_file and any other record",
3824
3824
  titleFormat: "{file_name} \u2192 {parent_object}/{parent_id}",
3825
- compactLayout: ["created_at", "parent_object", "file_name", "mime_type", "size"],
3825
+ highlightFields: ["created_at", "parent_object", "file_name", "mime_type", "size"],
3826
3826
  fields: {
3827
3827
  id: Field.text({
3828
3828
  label: "Attachment ID",
@@ -3942,7 +3942,7 @@ var SysEmail = ObjectSchema.create({
3942
3942
  nameField: "subject",
3943
3943
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
3944
3944
  titleFormat: "{subject}",
3945
- compactLayout: ["subject", "to", "status", "sent_at"],
3945
+ highlightFields: ["subject", "to", "status", "sent_at"],
3946
3946
  fields: {
3947
3947
  id: Field.text({
3948
3948
  label: "Email ID",
@@ -4092,7 +4092,7 @@ var SysEmailTemplate = ObjectSchema.create({
4092
4092
  nameField: "label",
4093
4093
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
4094
4094
  titleFormat: "{label}",
4095
- compactLayout: ["name", "label", "category", "locale", "active"],
4095
+ highlightFields: ["name", "label", "category", "locale", "active"],
4096
4096
  fields: {
4097
4097
  id: Field.text({
4098
4098
  label: "ID",
@@ -4230,7 +4230,7 @@ var SysSavedReport = ObjectSchema.create({
4230
4230
  nameField: "name",
4231
4231
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
4232
4232
  titleFormat: "{name}",
4233
- compactLayout: ["name", "object_name", "format", "owner_id", "updated_at"],
4233
+ highlightFields: ["name", "object_name", "format", "owner_id", "updated_at"],
4234
4234
  fields: {
4235
4235
  id: Field.text({
4236
4236
  label: "Report ID",
@@ -4318,7 +4318,7 @@ var SysReportSchedule = ObjectSchema.create({
4318
4318
  managedBy: "platform",
4319
4319
  description: "Recurring delivery of a sys_saved_report via email",
4320
4320
  titleFormat: "{report_id} \u2192 {recipients}",
4321
- compactLayout: ["report_id", "recipients", "interval_minutes", "active", "next_run_at"],
4321
+ highlightFields: ["report_id", "recipients", "interval_minutes", "active", "next_run_at"],
4322
4322
  fields: {
4323
4323
  id: Field.text({
4324
4324
  label: "Schedule ID",
@@ -4450,7 +4450,7 @@ var SysJob = ObjectSchema.create({
4450
4450
  nameField: "name",
4451
4451
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
4452
4452
  titleFormat: "{name}",
4453
- compactLayout: ["name", "schedule_type", "active", "last_run_at", "last_status"],
4453
+ highlightFields: ["name", "schedule_type", "active", "last_run_at", "last_status"],
4454
4454
  fields: {
4455
4455
  id: Field.text({ label: "Job ID", required: true, readonly: true, group: "System" }),
4456
4456
  name: Field.text({
@@ -4520,7 +4520,7 @@ var SysJobRun = ObjectSchema.create({
4520
4520
  nameField: "job_name",
4521
4521
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
4522
4522
  titleFormat: "{job_name} @ {started_at}",
4523
- compactLayout: ["job_name", "status", "started_at", "duration_ms", "attempt"],
4523
+ highlightFields: ["job_name", "status", "started_at", "duration_ms", "attempt"],
4524
4524
  fields: {
4525
4525
  id: Field.text({ label: "Run ID", required: true, readonly: true, group: "System" }),
4526
4526
  job_name: Field.text({
@@ -4574,7 +4574,7 @@ var SysJobQueue = ObjectSchema.create({
4574
4574
  nameField: "queue",
4575
4575
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
4576
4576
  titleFormat: "{queue} #{id}",
4577
- compactLayout: ["queue", "status", "attempts", "scheduled_for", "last_error"],
4577
+ highlightFields: ["queue", "status", "attempts", "scheduled_for", "last_error"],
4578
4578
  fields: {
4579
4579
  id: Field.text({ label: "Message ID", required: true, readonly: true, group: "System" }),
4580
4580
  queue: Field.text({
@@ -4686,7 +4686,7 @@ var SysImportJob = ObjectSchema.create({
4686
4686
  nameField: "object_name",
4687
4687
  // [ADR-0079] canonical primary-title pointer
4688
4688
  titleFormat: "{object_name} import @ {created_at}",
4689
- compactLayout: ["object_name", "status", "processed_rows", "total_rows", "created_at"],
4689
+ highlightFields: ["object_name", "status", "processed_rows", "total_rows", "created_at"],
4690
4690
  fields: {
4691
4691
  id: Field.text({ label: "Job ID", required: true, readonly: true, group: "System" }),
4692
4692
  object_name: Field.text({
@@ -4766,7 +4766,7 @@ var SysSetting = ObjectSchema.create({
4766
4766
  nameField: "key",
4767
4767
  // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
4768
4768
  titleFormat: "{namespace}.{key}",
4769
- compactLayout: ["namespace", "key", "scope", "updated_at"],
4769
+ highlightFields: ["namespace", "key", "scope", "updated_at"],
4770
4770
  listViews: {
4771
4771
  by_namespace: {
4772
4772
  type: "grid",
@@ -4916,7 +4916,7 @@ var SysSecret = ObjectSchema.create({
4916
4916
  isSystem: true,
4917
4917
  managedBy: "system",
4918
4918
  description: "Cipher store referenced by sys_setting handles. Never holds plaintext.",
4919
- compactLayout: ["namespace", "key", "kms_key_id", "version", "rotated_at"],
4919
+ highlightFields: ["namespace", "key", "kms_key_id", "version", "rotated_at"],
4920
4920
  listViews: {
4921
4921
  all: {
4922
4922
  type: "grid",
@@ -5007,7 +5007,7 @@ var SysSettingAudit = ObjectSchema.create({
5007
5007
  isSystem: true,
5008
5008
  managedBy: "system",
5009
5009
  description: "Append-only audit trail for SettingsService mutations.",
5010
- compactLayout: ["namespace", "key", "scope", "action", "actor_id", "created_at"],
5010
+ highlightFields: ["namespace", "key", "scope", "action", "actor_id", "created_at"],
5011
5011
  listViews: {
5012
5012
  recent: {
5013
5013
  type: "grid",
@@ -5243,9 +5243,19 @@ var SETUP_NAV_CONTRIBUTIONS = [
5243
5243
  { id: "nav_system_overview", type: "dashboard", label: "System Overview", dashboardName: "system_overview", icon: "activity" }
5244
5244
  ]
5245
5245
  },
5246
- // No group_apps contribution left here — both marketplace entries moved
5247
- // out (see header note); the group_apps shell anchor in setup.app.ts is
5248
- // filled entirely by capability plugins now.
5246
+ {
5247
+ // Package ADMINISTRATION is a platform/operator concern (ADR-0084:
5248
+ // packages are Operate, out of the builder) — so its home is Setup, not
5249
+ // the application builder. The console binds `developer:packages` to the
5250
+ // existing package-management page. Building/creating apps is a separate
5251
+ // journey (Home cover → /studio); this entry is for install/inspect/admin.
5252
+ app: "setup",
5253
+ group: "group_apps",
5254
+ priority: BASE_PRIORITY,
5255
+ items: [
5256
+ { id: "nav_packages", type: "component", label: "Packages", componentRef: "developer:packages", icon: "package" }
5257
+ ]
5258
+ },
5249
5259
  {
5250
5260
  app: "setup",
5251
5261
  group: "group_people_org",
@@ -5389,6 +5399,19 @@ var STUDIO_APP = {
5389
5399
  label: "Overview",
5390
5400
  icon: "layout-dashboard",
5391
5401
  children: [
5402
+ {
5403
+ // The application builder's front door (ADR-0080/0084): pick or
5404
+ // create a writable base package, then design in the full-screen
5405
+ // pillar builder (/studio/:packageId/:tab). The console binds
5406
+ // `studio:builder` to the BuilderLanding page — this makes the
5407
+ // builder reachable from login (Home → Studio → App Builder)
5408
+ // instead of being a URL-only surface.
5409
+ id: "nav_app_builder",
5410
+ type: "component",
5411
+ label: "App Builder",
5412
+ componentRef: "studio:builder",
5413
+ icon: "hammer"
5414
+ },
5392
5415
  {
5393
5416
  id: "nav_metadata_directory",
5394
5417
  type: "component",