@objectstack/platform-objects 7.1.0 → 7.2.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.d.mts CHANGED
@@ -2,7 +2,7 @@ export { SysAccount, SysApiKey, SysDepartment, SysDepartmentMember, SysDeviceCod
2
2
  export { SysPermissionSet, SysRecordShare, SysRole, SysRolePermissionSet, SysShareLink, SysSharingRule, SysUserPermissionSet, defaultPermissionSets } from './security/index.mjs';
3
3
  export { SysActivity, SysApprovalAction, SysApprovalProcess, SysApprovalRequest, SysAttachment, SysAuditLog, SysComment, SysEmail, SysEmailTemplate, SysJob, SysJobQueue, SysJobRun, SysNotification, SysPresence, SysReportSchedule, SysSavedReport } from './audit/index.mjs';
4
4
  export { SysWebhook } from './integration/index.mjs';
5
- export { SysMetadata, SysMetadataHistoryObject, SysMetadata as SysMetadataObject } from './metadata/index.mjs';
5
+ export { SysMetadata, SysMetadataAuditObject, SysMetadataHistoryObject, SysMetadata as SysMetadataObject } from './metadata/index.mjs';
6
6
  export { SysSecret, SysSetting, SysSettingAudit } from './system/index.mjs';
7
7
  export { ACCOUNT_APP, SETUP_APP, STUDIO_APP, SetupAppTranslations, SystemOverviewDashboard, en, esES, jaJP, zhCN } from './apps/index.mjs';
8
8
  export { SysOrganizationDetailPage, SysUserDetailPage } from './pages/index.mjs';
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { SysAccount, SysApiKey, SysDepartment, SysDepartmentMember, SysDeviceCod
2
2
  export { SysPermissionSet, SysRecordShare, SysRole, SysRolePermissionSet, SysShareLink, SysSharingRule, SysUserPermissionSet, defaultPermissionSets } from './security/index.js';
3
3
  export { SysActivity, SysApprovalAction, SysApprovalProcess, SysApprovalRequest, SysAttachment, SysAuditLog, SysComment, SysEmail, SysEmailTemplate, SysJob, SysJobQueue, SysJobRun, SysNotification, SysPresence, SysReportSchedule, SysSavedReport } from './audit/index.js';
4
4
  export { SysWebhook } from './integration/index.js';
5
- export { SysMetadata, SysMetadataHistoryObject, SysMetadata as SysMetadataObject } from './metadata/index.js';
5
+ export { SysMetadata, SysMetadataAuditObject, SysMetadataHistoryObject, SysMetadata as SysMetadataObject } from './metadata/index.js';
6
6
  export { SysSecret, SysSetting, SysSettingAudit } from './system/index.js';
7
7
  export { ACCOUNT_APP, SETUP_APP, STUDIO_APP, SetupAppTranslations, SystemOverviewDashboard, en, esES, jaJP, zhCN } from './apps/index.js';
8
8
  export { SysOrganizationDetailPage, SysUserDetailPage } from './pages/index.js';
package/dist/index.js CHANGED
@@ -12,6 +12,9 @@ var SysUser = data.ObjectSchema.create({
12
12
  icon: "user",
13
13
  isSystem: true,
14
14
  managedBy: "better-auth",
15
+ // ADR-0010 — identity table is managed by better-auth, schema must not drift.
16
+ _lock: "full",
17
+ _lockReason: "Identity table managed by better-auth \u2014 see ADR-0010.",
15
18
  description: "User accounts for authentication",
16
19
  displayNameField: "name",
17
20
  titleFormat: "{name}",
@@ -603,7 +606,7 @@ var SysAccount = data.ObjectSchema.create({
603
606
  mode: "create",
604
607
  locations: ["list_toolbar"],
605
608
  type: "url",
606
- target: "/api/v1/auth/sign-in/social?provider=${param.provider}&callbackURL=${ctx.origin}/apps/account/sys_account",
609
+ target: "/api/v1/auth/sign-in/social?provider=${param.provider}&callbackURL=${ctx.origin}/_console/apps/account/sys_account",
607
610
  params: [
608
611
  {
609
612
  name: "provider",
@@ -6924,6 +6927,135 @@ var SysMetadataHistoryObject = data.ObjectSchema.create({
6924
6927
  trash: false
6925
6928
  }
6926
6929
  });
6930
+ var SysMetadataAuditObject = data.ObjectSchema.create({
6931
+ name: "sys_metadata_audit",
6932
+ label: "Metadata Audit",
6933
+ pluralLabel: "Metadata Audit",
6934
+ icon: "shield-check",
6935
+ isSystem: true,
6936
+ managedBy: "append-only",
6937
+ description: "Append-only audit trail of metadata write decisions (ADR-0010).",
6938
+ fields: {
6939
+ /** Primary Key (UUID) */
6940
+ id: data.Field.text({
6941
+ label: "ID",
6942
+ required: true,
6943
+ readonly: true
6944
+ }),
6945
+ /** When the decision was made (ISO-8601 UTC). */
6946
+ occurred_at: data.Field.datetime({
6947
+ label: "Occurred At",
6948
+ required: true,
6949
+ readonly: true
6950
+ }),
6951
+ /** Acting principal (user id, system id, or 'system'). */
6952
+ actor: data.Field.text({
6953
+ label: "Actor",
6954
+ required: true,
6955
+ readonly: true,
6956
+ maxLength: 255,
6957
+ description: 'Acting principal \u2014 user id, system id, or "system".'
6958
+ }),
6959
+ /** Code path that produced the decision (e.g. `protocol.saveMetaItem`). */
6960
+ source: data.Field.text({
6961
+ label: "Source",
6962
+ required: false,
6963
+ readonly: true,
6964
+ maxLength: 128
6965
+ }),
6966
+ /** Metadata type (singular, e.g. `app`, `object`, `view`). */
6967
+ type: data.Field.text({
6968
+ label: "Metadata Type",
6969
+ required: true,
6970
+ readonly: true,
6971
+ searchable: true,
6972
+ maxLength: 100
6973
+ }),
6974
+ /** Item machine name. */
6975
+ name: data.Field.text({
6976
+ label: "Name",
6977
+ required: true,
6978
+ readonly: true,
6979
+ searchable: true,
6980
+ maxLength: 255
6981
+ }),
6982
+ /** Organization for multi-tenant filtering. NULL for env-wide writes. */
6983
+ organization_id: data.Field.lookup("sys_organization", {
6984
+ label: "Organization",
6985
+ required: false,
6986
+ readonly: true
6987
+ }),
6988
+ /** Operation kind. */
6989
+ operation: data.Field.select(["save", "publish", "rollback", "delete", "reset"], {
6990
+ label: "Operation",
6991
+ required: true,
6992
+ readonly: true
6993
+ }),
6994
+ /** Decision outcome — allowed, denied (refused), or forced (bypassed via override). */
6995
+ outcome: data.Field.select(["allowed", "denied", "forced"], {
6996
+ label: "Outcome",
6997
+ required: true,
6998
+ readonly: true
6999
+ }),
7000
+ /**
7001
+ * Machine-readable code for the decision:
7002
+ * - on `allowed`: `'ok'`
7003
+ * - on `denied`: `'not_overridable'` | `'not_creatable'` |
7004
+ * `'item_locked'` | `'invalid_metadata'` | `'destructive_change'` |
7005
+ * `'metadata_conflict'`
7006
+ * - on `forced`: `'lock_override'` (Phase 3)
7007
+ */
7008
+ code: data.Field.text({
7009
+ label: "Code",
7010
+ required: true,
7011
+ readonly: true,
7012
+ maxLength: 64
7013
+ }),
7014
+ /**
7015
+ * Lock state observed at the time of the decision (`none` if the
7016
+ * item carried no `_lock`). Captured even on `allowed` rows so
7017
+ * later compliance queries can see "what was the lock state when
7018
+ * this write succeeded".
7019
+ */
7020
+ lock_state: data.Field.select(["none", "no-overlay", "no-delete", "full"], {
7021
+ label: "Lock State",
7022
+ required: false,
7023
+ readonly: true
7024
+ }),
7025
+ /** True when the write succeeded by bypassing a lock (Phase 3). */
7026
+ lock_overridden: data.Field.boolean({
7027
+ label: "Lock Overridden",
7028
+ required: false,
7029
+ readonly: true
7030
+ }),
7031
+ /** Optional request correlation id for tracing. */
7032
+ request_id: data.Field.text({
7033
+ label: "Request ID",
7034
+ required: false,
7035
+ readonly: true,
7036
+ maxLength: 128
7037
+ }),
7038
+ /** Optional free-form context (e.g. brief diff summary). */
7039
+ note: data.Field.textarea({
7040
+ label: "Note",
7041
+ required: false,
7042
+ readonly: true
7043
+ })
7044
+ },
7045
+ indexes: [
7046
+ { fields: ["organization_id", "occurred_at"] },
7047
+ { fields: ["type", "name", "occurred_at"] },
7048
+ { fields: ["actor", "occurred_at"] },
7049
+ { fields: ["outcome"] }
7050
+ ],
7051
+ enable: {
7052
+ trackHistory: false,
7053
+ searchable: false,
7054
+ apiEnabled: true,
7055
+ apiMethods: ["get", "list"],
7056
+ trash: false
7057
+ }
7058
+ });
6927
7059
  var SysSetting = data.ObjectSchema.create({
6928
7060
  name: "sys_setting",
6929
7061
  label: "Setting",
@@ -7317,6 +7449,9 @@ var SETUP_APP = {
7317
7449
  icon: "settings",
7318
7450
  active: true,
7319
7451
  isDefault: false,
7452
+ // ADR-0010 — core admin UI must not be overlay-edited or deleted.
7453
+ _lock: "full",
7454
+ _lockReason: "Core admin UI shipped by @objectstack/platform-objects \u2014 see ADR-0010.",
7320
7455
  branding: {
7321
7456
  primaryColor: "#475569"
7322
7457
  // Slate-600 — neutral admin palette
@@ -26029,6 +26164,7 @@ exports.SysJobRun = SysJobRun;
26029
26164
  exports.SysJwks = SysJwks;
26030
26165
  exports.SysMember = SysMember;
26031
26166
  exports.SysMetadata = SysMetadataObject;
26167
+ exports.SysMetadataAuditObject = SysMetadataAuditObject;
26032
26168
  exports.SysMetadataHistoryObject = SysMetadataHistoryObject;
26033
26169
  exports.SysMetadataObject = SysMetadataObject;
26034
26170
  exports.SysNotification = SysNotification;