@memberjunction/core-entities-server 6.2.0-edge.5 → 6.2.0-edge.7

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 (214) hide show
  1. package/README.md +155 -100
  2. package/dist/custom/MJAIAgentExampleEntityServer.server.d.ts +2 -0
  3. package/dist/custom/MJAIAgentExampleEntityServer.server.d.ts.map +1 -1
  4. package/dist/custom/MJAIAgentExampleEntityServer.server.js +8 -5
  5. package/dist/custom/MJAIAgentExampleEntityServer.server.js.map +1 -1
  6. package/dist/custom/MJAIAgentNoteEntityServer.server.d.ts +2 -0
  7. package/dist/custom/MJAIAgentNoteEntityServer.server.d.ts.map +1 -1
  8. package/dist/custom/MJAIAgentNoteEntityServer.server.js +8 -5
  9. package/dist/custom/MJAIAgentNoteEntityServer.server.js.map +1 -1
  10. package/dist/custom/MJAIAgentRelationshipEntityServer.server.d.ts +17 -0
  11. package/dist/custom/MJAIAgentRelationshipEntityServer.server.d.ts.map +1 -0
  12. package/dist/custom/MJAIAgentRelationshipEntityServer.server.js +71 -0
  13. package/dist/custom/MJAIAgentRelationshipEntityServer.server.js.map +1 -0
  14. package/dist/custom/MJAIAgentSessionEntityServer.server.d.ts +8 -39
  15. package/dist/custom/MJAIAgentSessionEntityServer.server.d.ts.map +1 -1
  16. package/dist/custom/MJAIAgentSessionEntityServer.server.js +44 -44
  17. package/dist/custom/MJAIAgentSessionEntityServer.server.js.map +1 -1
  18. package/dist/custom/MJAIAgentUserPolicyEntityServer.server.d.ts +23 -0
  19. package/dist/custom/MJAIAgentUserPolicyEntityServer.server.d.ts.map +1 -0
  20. package/dist/custom/MJAIAgentUserPolicyEntityServer.server.js +53 -0
  21. package/dist/custom/MJAIAgentUserPolicyEntityServer.server.js.map +1 -0
  22. package/dist/custom/MJAIPromptEntityServer.server.d.ts.map +1 -1
  23. package/dist/custom/MJAIPromptEntityServer.server.js +2 -1
  24. package/dist/custom/MJAIPromptEntityServer.server.js.map +1 -1
  25. package/dist/custom/MJBrandKitEntityServer.server.d.ts +14 -0
  26. package/dist/custom/MJBrandKitEntityServer.server.d.ts.map +1 -0
  27. package/dist/custom/MJBrandKitEntityServer.server.js +75 -0
  28. package/dist/custom/MJBrandKitEntityServer.server.js.map +1 -0
  29. package/dist/custom/MJCompanyIntegrationEntityServer.server.d.ts.map +1 -1
  30. package/dist/custom/MJCompanyIntegrationEntityServer.server.js +1 -0
  31. package/dist/custom/MJCompanyIntegrationEntityServer.server.js.map +1 -1
  32. package/dist/custom/MJComponentEntityServer.server.d.ts +11 -0
  33. package/dist/custom/MJComponentEntityServer.server.d.ts.map +1 -1
  34. package/dist/custom/MJComponentEntityServer.server.js +30 -2
  35. package/dist/custom/MJComponentEntityServer.server.js.map +1 -1
  36. package/dist/custom/MJConversationEntityServer.server.d.ts +13 -0
  37. package/dist/custom/MJConversationEntityServer.server.d.ts.map +1 -0
  38. package/dist/custom/MJConversationEntityServer.server.js +33 -0
  39. package/dist/custom/MJConversationEntityServer.server.js.map +1 -0
  40. package/dist/custom/MJDashboardEntityServer.server.d.ts +14 -0
  41. package/dist/custom/MJDashboardEntityServer.server.d.ts.map +1 -0
  42. package/dist/custom/MJDashboardEntityServer.server.js +38 -0
  43. package/dist/custom/MJDashboardEntityServer.server.js.map +1 -0
  44. package/dist/custom/MJDuplicateRunEntityServer.server.d.ts +34 -2
  45. package/dist/custom/MJDuplicateRunEntityServer.server.d.ts.map +1 -1
  46. package/dist/custom/MJDuplicateRunEntityServer.server.js +103 -23
  47. package/dist/custom/MJDuplicateRunEntityServer.server.js.map +1 -1
  48. package/dist/custom/MJEntityAlternateBaseViewEntityServer.server.d.ts +73 -0
  49. package/dist/custom/MJEntityAlternateBaseViewEntityServer.server.d.ts.map +1 -0
  50. package/dist/custom/MJEntityAlternateBaseViewEntityServer.server.js +391 -0
  51. package/dist/custom/MJEntityAlternateBaseViewEntityServer.server.js.map +1 -0
  52. package/dist/custom/MJEntityDocumentEntityServer.server.d.ts.map +1 -1
  53. package/dist/custom/MJEntityDocumentEntityServer.server.js +1 -0
  54. package/dist/custom/MJEntityDocumentEntityServer.server.js.map +1 -1
  55. package/dist/custom/MJEntityFieldPermissionEntityServer.server.d.ts +96 -22
  56. package/dist/custom/MJEntityFieldPermissionEntityServer.server.d.ts.map +1 -1
  57. package/dist/custom/MJEntityFieldPermissionEntityServer.server.js +239 -55
  58. package/dist/custom/MJEntityFieldPermissionEntityServer.server.js.map +1 -1
  59. package/dist/custom/MJListDetailEntityServer.server.d.ts.map +1 -1
  60. package/dist/custom/MJListDetailEntityServer.server.js +1 -0
  61. package/dist/custom/MJListDetailEntityServer.server.js.map +1 -1
  62. package/dist/custom/MJQueryEntityServer.server.d.ts +184 -46
  63. package/dist/custom/MJQueryEntityServer.server.d.ts.map +1 -1
  64. package/dist/custom/MJQueryEntityServer.server.js +505 -159
  65. package/dist/custom/MJQueryEntityServer.server.js.map +1 -1
  66. package/dist/custom/MJQuerySQLEntityServer.server.d.ts +15 -18
  67. package/dist/custom/MJQuerySQLEntityServer.server.d.ts.map +1 -1
  68. package/dist/custom/MJQuerySQLEntityServer.server.js +34 -42
  69. package/dist/custom/MJQuerySQLEntityServer.server.js.map +1 -1
  70. package/dist/custom/MJTagEntityServer.server.d.ts +2 -0
  71. package/dist/custom/MJTagEntityServer.server.d.ts.map +1 -1
  72. package/dist/custom/MJTagEntityServer.server.js +13 -7
  73. package/dist/custom/MJTagEntityServer.server.js.map +1 -1
  74. package/dist/custom/MJUserRoleEntityServer.server.d.ts +74 -7
  75. package/dist/custom/MJUserRoleEntityServer.server.d.ts.map +1 -1
  76. package/dist/custom/MJUserRoleEntityServer.server.js +206 -20
  77. package/dist/custom/MJUserRoleEntityServer.server.js.map +1 -1
  78. package/dist/custom/MJUserRoutineEntityServer.server.d.ts.map +1 -1
  79. package/dist/custom/MJUserRoutineEntityServer.server.js +8 -1
  80. package/dist/custom/MJUserRoutineEntityServer.server.js.map +1 -1
  81. package/dist/custom/MJUserViewEntityServer.server.d.ts +17 -1
  82. package/dist/custom/MJUserViewEntityServer.server.d.ts.map +1 -1
  83. package/dist/custom/MJUserViewEntityServer.server.js +95 -7
  84. package/dist/custom/MJUserViewEntityServer.server.js.map +1 -1
  85. package/dist/custom/MJVectorIndexEntityServer.server.d.ts +2 -0
  86. package/dist/custom/MJVectorIndexEntityServer.server.d.ts.map +1 -1
  87. package/dist/custom/MJVectorIndexEntityServer.server.js +33 -0
  88. package/dist/custom/MJVectorIndexEntityServer.server.js.map +1 -1
  89. package/dist/custom/anonymousOwnershipKeyGuard.d.ts +42 -0
  90. package/dist/custom/anonymousOwnershipKeyGuard.d.ts.map +1 -0
  91. package/dist/custom/anonymousOwnershipKeyGuard.js +36 -0
  92. package/dist/custom/anonymousOwnershipKeyGuard.js.map +1 -0
  93. package/dist/custom/approvalStamp.d.ts +37 -0
  94. package/dist/custom/approvalStamp.d.ts.map +1 -0
  95. package/dist/custom/approvalStamp.js +67 -0
  96. package/dist/custom/approvalStamp.js.map +1 -0
  97. package/dist/custom/fieldPermissionAccess.d.ts +31 -0
  98. package/dist/custom/fieldPermissionAccess.d.ts.map +1 -0
  99. package/dist/custom/fieldPermissionAccess.js +38 -0
  100. package/dist/custom/fieldPermissionAccess.js.map +1 -0
  101. package/dist/custom/fieldPermissionReconciler.d.ts.map +1 -1
  102. package/dist/custom/fieldPermissionReconciler.js +12 -2
  103. package/dist/custom/fieldPermissionReconciler.js.map +1 -1
  104. package/dist/custom/query-extraction/childRowWriter.d.ts +77 -0
  105. package/dist/custom/query-extraction/childRowWriter.d.ts.map +1 -0
  106. package/dist/custom/query-extraction/childRowWriter.js +277 -0
  107. package/dist/custom/query-extraction/childRowWriter.js.map +1 -0
  108. package/dist/custom/query-extraction/compositionTargets.d.ts +40 -0
  109. package/dist/custom/query-extraction/compositionTargets.d.ts.map +1 -0
  110. package/dist/custom/query-extraction/compositionTargets.js +99 -0
  111. package/dist/custom/query-extraction/compositionTargets.js.map +1 -0
  112. package/dist/custom/query-extraction/declared.d.ts +79 -0
  113. package/dist/custom/query-extraction/declared.d.ts.map +1 -0
  114. package/dist/custom/query-extraction/declared.js +91 -0
  115. package/dist/custom/query-extraction/declared.js.map +1 -0
  116. package/dist/custom/query-extraction/describeFacts.d.ts +40 -0
  117. package/dist/custom/query-extraction/describeFacts.d.ts.map +1 -0
  118. package/dist/custom/query-extraction/describeFacts.js +225 -0
  119. package/dist/custom/query-extraction/describeFacts.js.map +1 -0
  120. package/dist/custom/query-extraction/descriptionPass.d.ts +23 -0
  121. package/dist/custom/query-extraction/descriptionPass.d.ts.map +1 -0
  122. package/dist/custom/query-extraction/descriptionPass.js +95 -0
  123. package/dist/custom/query-extraction/descriptionPass.js.map +1 -0
  124. package/dist/custom/query-extraction/extractQuery.d.ts +25 -0
  125. package/dist/custom/query-extraction/extractQuery.d.ts.map +1 -0
  126. package/dist/custom/query-extraction/extractQuery.js +146 -0
  127. package/dist/custom/query-extraction/extractQuery.js.map +1 -0
  128. package/dist/custom/query-extraction/extractionTypes.d.ts +133 -0
  129. package/dist/custom/query-extraction/extractionTypes.d.ts.map +1 -0
  130. package/dist/custom/query-extraction/extractionTypes.js +2 -0
  131. package/dist/custom/query-extraction/extractionTypes.js.map +1 -0
  132. package/dist/custom/query-extraction/index.d.ts +16 -0
  133. package/dist/custom/query-extraction/index.d.ts.map +1 -1
  134. package/dist/custom/query-extraction/index.js +11 -1
  135. package/dist/custom/query-extraction/index.js.map +1 -1
  136. package/dist/custom/query-extraction/pipeline.d.ts +6 -2
  137. package/dist/custom/query-extraction/pipeline.d.ts.map +1 -1
  138. package/dist/custom/query-extraction/pipeline.js +21 -14
  139. package/dist/custom/query-extraction/pipeline.js.map +1 -1
  140. package/dist/custom/query-extraction/resolve.d.ts +7 -2
  141. package/dist/custom/query-extraction/resolve.d.ts.map +1 -1
  142. package/dist/custom/query-extraction/resolve.js +41 -20
  143. package/dist/custom/query-extraction/resolve.js.map +1 -1
  144. package/dist/custom/query-extraction/sourceBinding.d.ts +57 -0
  145. package/dist/custom/query-extraction/sourceBinding.d.ts.map +1 -0
  146. package/dist/custom/query-extraction/sourceBinding.js +104 -0
  147. package/dist/custom/query-extraction/sourceBinding.js.map +1 -0
  148. package/dist/custom/query-extraction/sync.d.ts +28 -4
  149. package/dist/custom/query-extraction/sync.d.ts.map +1 -1
  150. package/dist/custom/query-extraction/sync.js +147 -59
  151. package/dist/custom/query-extraction/sync.js.map +1 -1
  152. package/dist/custom/query-extraction/templateFacts.d.ts +62 -0
  153. package/dist/custom/query-extraction/templateFacts.d.ts.map +1 -0
  154. package/dist/custom/query-extraction/templateFacts.js +229 -0
  155. package/dist/custom/query-extraction/templateFacts.js.map +1 -0
  156. package/dist/custom/query-extraction/types.d.ts +8 -0
  157. package/dist/custom/query-extraction/types.d.ts.map +1 -1
  158. package/dist/custom/query-refresh/QueryExtractionService.d.ts +54 -0
  159. package/dist/custom/query-refresh/QueryExtractionService.d.ts.map +1 -0
  160. package/dist/custom/query-refresh/QueryExtractionService.js +207 -0
  161. package/dist/custom/query-refresh/QueryExtractionService.js.map +1 -0
  162. package/dist/custom/query-refresh/QueryRefreshExtractionServerOperation.d.ts +28 -0
  163. package/dist/custom/query-refresh/QueryRefreshExtractionServerOperation.d.ts.map +1 -0
  164. package/dist/custom/query-refresh/QueryRefreshExtractionServerOperation.js +106 -0
  165. package/dist/custom/query-refresh/QueryRefreshExtractionServerOperation.js.map +1 -0
  166. package/dist/custom/query-refresh/index.d.ts +14 -0
  167. package/dist/custom/query-refresh/index.d.ts.map +1 -0
  168. package/dist/custom/query-refresh/index.js +10 -0
  169. package/dist/custom/query-refresh/index.js.map +1 -0
  170. package/dist/custom/query-refresh/queryRebind.d.ts +33 -0
  171. package/dist/custom/query-refresh/queryRebind.d.ts.map +1 -0
  172. package/dist/custom/query-refresh/queryRebind.js +85 -0
  173. package/dist/custom/query-refresh/queryRebind.js.map +1 -0
  174. package/dist/custom/query-refresh/refreshAuthorization.d.ts +29 -0
  175. package/dist/custom/query-refresh/refreshAuthorization.d.ts.map +1 -0
  176. package/dist/custom/query-refresh/refreshAuthorization.js +66 -0
  177. package/dist/custom/query-refresh/refreshAuthorization.js.map +1 -0
  178. package/dist/custom/query-refresh/refreshFormat.d.ts +16 -0
  179. package/dist/custom/query-refresh/refreshFormat.d.ts.map +1 -0
  180. package/dist/custom/query-refresh/refreshFormat.js +67 -0
  181. package/dist/custom/query-refresh/refreshFormat.js.map +1 -0
  182. package/dist/custom/query-refresh/refreshOrder.d.ts +25 -0
  183. package/dist/custom/query-refresh/refreshOrder.d.ts.map +1 -0
  184. package/dist/custom/query-refresh/refreshOrder.js +95 -0
  185. package/dist/custom/query-refresh/refreshOrder.js.map +1 -0
  186. package/dist/custom/query-refresh/refreshSelection.d.ts +15 -0
  187. package/dist/custom/query-refresh/refreshSelection.d.ts.map +1 -0
  188. package/dist/custom/query-refresh/refreshSelection.js +99 -0
  189. package/dist/custom/query-refresh/refreshSelection.js.map +1 -0
  190. package/dist/custom/query-refresh/refreshTypes.d.ts +81 -0
  191. package/dist/custom/query-refresh/refreshTypes.d.ts.map +1 -0
  192. package/dist/custom/query-refresh/refreshTypes.js +5 -0
  193. package/dist/custom/query-refresh/refreshTypes.js.map +1 -0
  194. package/dist/custom/systemUserGuardState.d.ts +73 -0
  195. package/dist/custom/systemUserGuardState.d.ts.map +1 -0
  196. package/dist/custom/systemUserGuardState.js +161 -0
  197. package/dist/custom/systemUserGuardState.js.map +1 -0
  198. package/dist/custom/template-extraction/parser.js +5 -2
  199. package/dist/custom/template-extraction/parser.js.map +1 -1
  200. package/dist/custom/template-extraction/types.d.ts +1 -1
  201. package/dist/custom/template-extraction/types.d.ts.map +1 -1
  202. package/dist/custom/util.d.ts +8 -0
  203. package/dist/custom/util.d.ts.map +1 -1
  204. package/dist/custom/util.js +18 -1
  205. package/dist/custom/util.js.map +1 -1
  206. package/dist/engines/QueryEngineServer.d.ts +4 -1
  207. package/dist/engines/QueryEngineServer.d.ts.map +1 -1
  208. package/dist/engines/QueryEngineServer.js +10 -7
  209. package/dist/engines/QueryEngineServer.js.map +1 -1
  210. package/dist/index.d.ts +9 -0
  211. package/dist/index.d.ts.map +1 -1
  212. package/dist/index.js +9 -0
  213. package/dist/index.js.map +1 -1
  214. package/package.json +30 -30
@@ -1,46 +1,15 @@
1
- import { EntitySaveOptions, ValidationResult } from '@memberjunction/core';
1
+ import { ValidationResult } from '@memberjunction/core';
2
2
  import { MJAIAgentSessionEntity } from '@memberjunction/core-entities';
3
- /**
4
- * Server-side `MJ: AI Agent Sessions` entity.
5
- *
6
- * It keeps the **server-authoritative keys** inside `Config` (the janitor's
7
- * `maxSessionDeadlineIso`, the `identityVerification` state) out of the session owner's reach, and it
8
- * keeps every save from writing back the **recording ledger's columns** (see {@link Save}). The
9
- * owner can legitimately write the row — the `UI` and `Widget Guest` roles hold `CanUpdate` on their
10
- * own sessions — so the protection has to live at the entity, where the generated CRUD mutations,
11
- * `StartAgentSession(configJson)` and every other path converge on `Save()`.
12
- *
13
- * See {@link FindProtectedSessionConfigChanges} for what is protected and why, and
14
- * `RunWithTrustedSessionConfigWrites` for how server code opts in.
15
- *
16
- * Uses the **synchronous** `Validate()` rather than `ValidateAsync()` on purpose: `Validate()` runs on
17
- * every save, whereas async validation can be skipped by an option, and a guard that a caller can opt
18
- * out of is not a guard.
19
- */
20
3
  export declare class MJAIAgentSessionEntityServer extends MJAIAgentSessionEntity {
4
+ Validate(): ValidationResult;
21
5
  /**
22
- * Columns the client-direct recording ledger's stored procedures own (#5294). They change under a live
23
- * session (shard inserts, terminal stamps, assembly claims and finishes) without going through this
24
- * entity.
25
- */
26
- private static readonly recordingLedgerFields;
27
- /**
28
- * Saves without writing back the recording ledger's columns the caller did not change.
29
- *
30
- * An update writes every loaded column, so a session loaded before a ledger procedure ran and saved
31
- * after it (a heartbeat, the close, a delegated tool call that rolls `Config` forward, a verification
32
- * step) would put the stale recording state back: rewind the assembly version and status (a running
33
- * assembly then loses its fence and a superseded one can win it) or clear `RecordingFileID` (a later
34
- * re-assembly then has no file to reuse and writes silence over audio it can no longer recover).
35
- * Marking those fields not-loaded makes the save leave them out of the update procedure, whose
36
- * `ISNULL` keeps the stored values. A field the caller set explicitly (the legacy whole-call upload
37
- * stamps `RecordingFileID`) is dirty and is still saved; an insert takes every column.
38
- *
39
- * `MarkNotLoaded` is the hydration paths' tool; this entity uses it for the same meaning — "this copy
40
- * of the value is not the database's" — at the one place every server-side save converges.
6
+ * Returns a refusal when an untrusted save writes or overwrites a server-only `CloseReason`, else null. The owner may
7
+ * close their own row as `Explicit` or `Error`; `TimeLimit` is stamped only after `SessionManager.CloseSession`
8
+ * verifies it against the stored deadline, and `Idle`, `Janitor` and `Shutdown` belong to the janitor and the
9
+ * host. A stamped server-only reason is the record of how the session ended, so the owner cannot replace it either.
10
+ * Server code that stamps them saves inside `RunWithTrustedSessionConfigWrites`.
41
11
  */
42
- Save(options?: EntitySaveOptions): Promise<boolean>;
43
- Validate(): ValidationResult;
12
+ private checkServerManagedCloseReason;
44
13
  /** Returns a refusal when an untrusted save changes a protected `Config` key, else null. */
45
14
  private checkProtectedConfigKeys;
46
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MJAIAgentSessionEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJAIAgentSessionEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,iBAAiB,EAA4C,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEjI,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,4BAA6B,SAAQ,sBAAsB;IACpE;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAG3C;IAEF;;;;;;;;;;;;;;OAcG;IACmB,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAYzD,QAAQ,IAAI,gBAAgB;IAU5C,4FAA4F;IAC5F,OAAO,CAAC,wBAAwB;CAyBnC"}
1
+ {"version":3,"file":"MJAIAgentSessionEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJAIAgentSessionEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwD,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE9G,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AA8BvE,qBACa,4BAA6B,SAAQ,sBAAsB;IACpD,QAAQ,IAAI,gBAAgB;IAc5C;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;IAkBrC,4FAA4F;IAC5F,OAAO,CAAC,wBAAwB;CAmCnC"}
@@ -4,20 +4,26 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- var MJAIAgentSessionEntityServer_1;
8
7
  import { BaseEntity, ValidationErrorInfo, ValidationErrorType } from '@memberjunction/core';
9
8
  import { RegisterClass } from '@memberjunction/global';
10
9
  import { MJAIAgentSessionEntity } from '@memberjunction/core-entities';
11
10
  import { FindProtectedSessionConfigChanges, IsTrustedSessionConfigWriteActive } from './sessionConfigGuard.js';
11
+ import { CheckAnonymousOwnershipKeyChange, IsSetByTransactionVariable } from './anonymousOwnershipKeyGuard.js';
12
12
  /**
13
13
  * Server-side `MJ: AI Agent Sessions` entity.
14
14
  *
15
15
  * It keeps the **server-authoritative keys** inside `Config` (the janitor's
16
- * `maxSessionDeadlineIso`, the `identityVerification` state) out of the session owner's reach, and it
17
- * keeps every save from writing back the **recording ledger's columns** (see {@link Save}). The
16
+ * `maxSessionDeadlineIso`, the `identityVerification` state) and the server-only `CloseReason` values (`TimeLimit`,
17
+ * `Idle`, `Janitor`, `Shutdown`) out of the session owner's reach, and keeps an
18
+ * anonymous visitor from re-pointing an existing session's `ConversationID` (the anonymous ownership key —
19
+ * see `CheckAnonymousOwnershipKeyChange`). The
18
20
  * owner can legitimately write the row — the `UI` and `Widget Guest` roles hold `CanUpdate` on their
19
21
  * own sessions — so the protection has to live at the entity, where the generated CRUD mutations,
20
- * `StartAgentSession(configJson)` and every other path converge on `Save()`.
22
+ * `StartAgentSession(configJson)` and every other path converge on `Save`.
23
+ *
24
+ * The recording ledger's columns need no subclass: they are protected in metadata
25
+ * (`AllowUpdateAPI=false`, #6010), so an entity save cannot write them and only the ledger's stored
26
+ * procedures do.
21
27
  *
22
28
  * See {@link FindProtectedSessionConfigChanges} for what is protected and why, and
23
29
  * `RunWithTrustedSessionConfigWrites` for how server code opts in.
@@ -26,52 +32,41 @@ import { FindProtectedSessionConfigChanges, IsTrustedSessionConfigWriteActive }
26
32
  * every save, whereas async validation can be skipped by an option, and a guard that a caller can opt
27
33
  * out of is not a guard.
28
34
  */
35
+ /** The close reasons a session owner may record; every other value is stamped by the server. */
36
+ const OWNER_CLOSE_REASONS = new Set(['Explicit', 'Error']);
29
37
  let MJAIAgentSessionEntityServer = class MJAIAgentSessionEntityServer extends MJAIAgentSessionEntity {
30
- static { MJAIAgentSessionEntityServer_1 = this; }
31
- /**
32
- * Columns the client-direct recording ledger's stored procedures own (#5294). They change under a live
33
- * session (shard inserts, terminal stamps, assembly claims and finishes) without going through this
34
- * entity.
35
- */
36
- static { this.recordingLedgerFields = [
37
- 'RecordingStatus', 'RecordingExpectedShards', 'RecordingCapturedSamples', 'RecordingGaps',
38
- 'RecordingAssemblyVersion', 'RecordingFileID', 'RecordingMedia',
39
- ]; }
40
- /**
41
- * Saves without writing back the recording ledger's columns the caller did not change.
42
- *
43
- * An update writes every loaded column, so a session loaded before a ledger procedure ran and saved
44
- * after it (a heartbeat, the close, a delegated tool call that rolls `Config` forward, a verification
45
- * step) would put the stale recording state back: rewind the assembly version and status (a running
46
- * assembly then loses its fence and a superseded one can win it) or clear `RecordingFileID` (a later
47
- * re-assembly then has no file to reuse and writes silence over audio it can no longer recover).
48
- * Marking those fields not-loaded makes the save leave them out of the update procedure, whose
49
- * `ISNULL` keeps the stored values. A field the caller set explicitly (the legacy whole-call upload
50
- * stamps `RecordingFileID`) is dirty and is still saved; an insert takes every column.
51
- *
52
- * `MarkNotLoaded` is the hydration paths' tool; this entity uses it for the same meaning — "this copy
53
- * of the value is not the database's" — at the one place every server-side save converges.
54
- */
55
- async Save(options) {
56
- if (this.IsSaved) {
57
- for (const name of MJAIAgentSessionEntityServer_1.recordingLedgerFields) {
58
- const field = this.GetFieldByName(name);
59
- if (field && !field.Dirty) {
60
- field.MarkNotLoaded();
61
- }
62
- }
63
- }
64
- return super.Save(options);
65
- }
66
38
  Validate() {
67
39
  const result = super.Validate();
68
- const violation = this.checkProtectedConfigKeys();
69
- if (violation) {
70
- result.Errors.push(violation);
40
+ const violations = [
41
+ this.checkProtectedConfigKeys(),
42
+ this.checkServerManagedCloseReason(),
43
+ CheckAnonymousOwnershipKeyChange(this, 'ConversationID'),
44
+ ].filter((v) => v !== null);
45
+ if (violations.length > 0) {
46
+ result.Errors.push(...violations);
71
47
  result.Success = false;
72
48
  }
73
49
  return result;
74
50
  }
51
+ /**
52
+ * Returns a refusal when an untrusted save writes or overwrites a server-only `CloseReason`, else null. The owner may
53
+ * close their own row as `Explicit` or `Error`; `TimeLimit` is stamped only after `SessionManager.CloseSession`
54
+ * verifies it against the stored deadline, and `Idle`, `Janitor` and `Shutdown` belong to the janitor and the
55
+ * host. A stamped server-only reason is the record of how the session ended, so the owner cannot replace it either.
56
+ * Server code that stamps them saves inside `RunWithTrustedSessionConfigWrites`.
57
+ */
58
+ checkServerManagedCloseReason() {
59
+ const field = this.GetFieldByName('CloseReason');
60
+ if (IsTrustedSessionConfigWriteActive() || !field?.Dirty) {
61
+ return null;
62
+ }
63
+ const previous = typeof field.OldValue === 'string' ? field.OldValue : null;
64
+ const serverOnly = [this.CloseReason, previous].find((reason) => reason !== null && !OWNER_CLOSE_REASONS.has(reason));
65
+ if (serverOnly === undefined) {
66
+ return null;
67
+ }
68
+ return new ValidationErrorInfo('CloseReason', `CloseReason '${serverOnly}' is server-managed; a session owner can close a session only as Explicit or Error, and cannot change a reason the server recorded.`, this.CloseReason, ValidationErrorType.Failure);
69
+ }
75
70
  /** Returns a refusal when an untrusted save changes a protected `Config` key, else null. */
76
71
  checkProtectedConfigKeys() {
77
72
  if (IsTrustedSessionConfigWriteActive()) {
@@ -81,6 +76,11 @@ let MJAIAgentSessionEntityServer = class MJAIAgentSessionEntityServer extends MJ
81
76
  if (!configField) {
82
77
  return null;
83
78
  }
79
+ // A 'Use' transaction variable writes its field at submit, after this comparison: on Config its value is unknown
80
+ // here, and on ID the update (and this Config) lands on another session than the one compared against.
81
+ if (IsSetByTransactionVariable(this, ['Config', 'ID'])) {
82
+ return new ValidationErrorInfo('Config', 'Config is server-managed in part, so neither it nor the row it is written to can come from a transaction variable.', null, ValidationErrorType.Failure);
83
+ }
84
84
  // A saved record is compared against what was loaded; a new record against nothing. For a
85
85
  // saved record whose Config was not touched there is nothing to compare.
86
86
  if (this.IsSaved && !configField.Dirty) {
@@ -94,7 +94,7 @@ let MJAIAgentSessionEntityServer = class MJAIAgentSessionEntityServer extends MJ
94
94
  return new ValidationErrorInfo('Config', `Config keys [${changed.join(', ')}] are server-managed and cannot be set by the session owner.`, null, ValidationErrorType.Failure);
95
95
  }
96
96
  };
97
- MJAIAgentSessionEntityServer = MJAIAgentSessionEntityServer_1 = __decorate([
97
+ MJAIAgentSessionEntityServer = __decorate([
98
98
  RegisterClass(BaseEntity, 'MJ: AI Agent Sessions')
99
99
  ], MJAIAgentSessionEntityServer);
100
100
  export { MJAIAgentSessionEntityServer };
@@ -1 +1 @@
1
- {"version":3,"file":"MJAIAgentSessionEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJAIAgentSessionEntityServer.server.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,UAAU,EAAqB,mBAAmB,EAAE,mBAAmB,EAAoB,MAAM,sBAAsB,CAAC;AACjI,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,iCAAiC,EAAE,iCAAiC,EAAE,MAAM,sBAAsB,CAAC;AAE5G;;;;;;;;;;;;;;;;GAgBG;AAEI,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,sBAAsB;;IACpE;;;;OAIG;aACqB,0BAAqB,GAA8C;QACvF,iBAAiB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,eAAe;QACzF,0BAA0B,EAAE,iBAAiB,EAAE,gBAAgB;KAClE,AAH4C,CAG3C;IAEF;;;;;;;;;;;;;;OAcG;IACa,KAAK,CAAC,IAAI,CAAC,OAA2B;QAClD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,8BAA4B,CAAC,qBAAqB,EAAE,CAAC;gBACpE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACxB,KAAK,CAAC,aAAa,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEe,QAAQ;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClD,IAAI,SAAS,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,4FAA4F;IACpF,wBAAwB;QAC5B,IAAI,iCAAiC,EAAE,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,0FAA0F;QAC1F,yEAAyE;QACzE,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,WAAW,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACxG,MAAM,OAAO,GAAG,iCAAiC,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,mBAAmB,CAC1B,QAAQ,EACR,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,8DAA8D,EAChG,IAAI,EACJ,mBAAmB,CAAC,OAAO,CAC9B,CAAC;IACN,CAAC;;AAzEQ,4BAA4B;IADxC,aAAa,CAAC,UAAU,EAAE,uBAAuB,CAAC;GACtC,4BAA4B,CA0ExC"}
1
+ {"version":3,"file":"MJAIAgentSessionEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJAIAgentSessionEntityServer.server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { EntitySaveOptions, ValidationResult } from '@memberjunction/core';
2
+ import { MJAIAgentUserPolicyEntity } from '@memberjunction/core-entities';
3
+ /**
4
+ * Server-side `MJ: AI Agent User Policies` entity: a user's agent policy is private to that user.
5
+ *
6
+ * The UI role may create and update policies (granted in `metadata/entity-permissions`) so that
7
+ * a regular user's Chief of Staff can persist their preferences during onboarding and the
8
+ * cockpit's Governance tab can save edits. Row-level security for this entity is not yet
9
+ * expressible as version-controlled metadata, so this subclass is the defense-in-depth gate,
10
+ * mirroring `MJUserRoutineEntityServer`:
11
+ *
12
+ * 1. **Ownership** — a non-Owner-type context user may only save the policy whose `UserID` is
13
+ * their own, compared against the PRE-save owner so reassigning `UserID` cannot bypass it.
14
+ * Owner-type users (administrators, the scheduler's system user) are exempt.
15
+ * 2. **Owner attribution** — first save defaults `UserID` to the context user when unset, so
16
+ * programmatic create paths attribute the row correctly.
17
+ */
18
+ export declare class MJAIAgentUserPolicyEntityServer extends MJAIAgentUserPolicyEntity {
19
+ Save(options?: EntitySaveOptions): Promise<boolean>;
20
+ Validate(): ValidationResult;
21
+ private validateOwnership;
22
+ }
23
+ //# sourceMappingURL=MJAIAgentUserPolicyEntityServer.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MJAIAgentUserPolicyEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJAIAgentUserPolicyEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,iBAAiB,EAA4C,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEjI,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,qBACa,+BAAgC,SAAQ,yBAAyB;IACpD,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAOzD,QAAQ,IAAI,gBAAgB;IAO5C,OAAO,CAAC,iBAAiB;CAe5B"}
@@ -0,0 +1,53 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { BaseEntity, ValidationErrorInfo, ValidationErrorType } from '@memberjunction/core';
8
+ import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
9
+ import { MJAIAgentUserPolicyEntity } from '@memberjunction/core-entities';
10
+ /**
11
+ * Server-side `MJ: AI Agent User Policies` entity: a user's agent policy is private to that user.
12
+ *
13
+ * The UI role may create and update policies (granted in `metadata/entity-permissions`) so that
14
+ * a regular user's Chief of Staff can persist their preferences during onboarding and the
15
+ * cockpit's Governance tab can save edits. Row-level security for this entity is not yet
16
+ * expressible as version-controlled metadata, so this subclass is the defense-in-depth gate,
17
+ * mirroring `MJUserRoutineEntityServer`:
18
+ *
19
+ * 1. **Ownership** — a non-Owner-type context user may only save the policy whose `UserID` is
20
+ * their own, compared against the PRE-save owner so reassigning `UserID` cannot bypass it.
21
+ * Owner-type users (administrators, the scheduler's system user) are exempt.
22
+ * 2. **Owner attribution** — first save defaults `UserID` to the context user when unset, so
23
+ * programmatic create paths attribute the row correctly.
24
+ */
25
+ let MJAIAgentUserPolicyEntityServer = class MJAIAgentUserPolicyEntityServer extends MJAIAgentUserPolicyEntity {
26
+ async Save(options) {
27
+ if (!this.IsSaved && !this.UserID && this.ContextCurrentUser) {
28
+ this.UserID = this.ContextCurrentUser.ID;
29
+ }
30
+ return super.Save(options);
31
+ }
32
+ Validate() {
33
+ const result = super.Validate();
34
+ this.validateOwnership(result);
35
+ result.Success = result.Success && result.Errors.length === 0;
36
+ return result;
37
+ }
38
+ validateOwnership(result) {
39
+ const user = this.ContextCurrentUser;
40
+ if (!user || user.Type?.trim().toLowerCase() === 'owner') {
41
+ return;
42
+ }
43
+ const preSaveOwnerId = this.GetFieldByName('UserID')?.OldValue ?? this.UserID;
44
+ if (preSaveOwnerId && !UUIDsEqual(preSaveOwnerId, user.ID)) {
45
+ result.Errors.push(new ValidationErrorInfo('UserID', 'An agent policy is private to its user — you can only modify your own policy.', this.UserID, ValidationErrorType.Failure));
46
+ }
47
+ }
48
+ };
49
+ MJAIAgentUserPolicyEntityServer = __decorate([
50
+ RegisterClass(BaseEntity, 'MJ: AI Agent User Policies')
51
+ ], MJAIAgentUserPolicyEntityServer);
52
+ export { MJAIAgentUserPolicyEntityServer };
53
+ //# sourceMappingURL=MJAIAgentUserPolicyEntityServer.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MJAIAgentUserPolicyEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJAIAgentUserPolicyEntityServer.server.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAqB,mBAAmB,EAAE,mBAAmB,EAAoB,MAAM,sBAAsB,CAAC;AACjI,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AAEI,IAAM,+BAA+B,GAArC,MAAM,+BAAgC,SAAQ,yBAAyB;IAC1D,KAAK,CAAC,IAAI,CAAC,OAA2B;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEe,QAAQ;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,iBAAiB,CAAC,MAAwB;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACvD,OAAO;QACX,CAAC;QACD,MAAM,cAAc,GAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAsC,IAAI,IAAI,CAAC,MAAM,CAAC;QAC7G,IAAI,cAAc,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAmB,CACtC,QAAQ,EACR,+EAA+E,EAC/E,IAAI,CAAC,MAAM,EACX,mBAAmB,CAAC,OAAO,CAC9B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;CACJ,CAAA;AA9BY,+BAA+B;IAD3C,aAAa,CAAC,UAAU,EAAE,4BAA4B,CAAC;GAC3C,+BAA+B,CA8B3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"MJAIPromptEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJAIPromptEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,iBAAiB,EAAE,iBAAiB,EAAgC,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE9J,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAkF,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjJ;;;;;;GAMG;AACH,qBACa,sBAAuB,SAAQ,wBAAwB;IAChE,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAuB;IAC5D;;;;OAIG;IACH,WAAkB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAEvD;IACD,WAAkB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAE3D;IAED,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAuB;IAC7D;;;;;;;;;;OAUG;IACH,WAAkB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAExD;IACD,WAAkB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAE5D;IAED;;;;;;;;;OASG;cACa,iCAAiC,IAAI,OAAO,CAAC,MAAM,CAAC;IA0BpE;;;;;;OAMG;cACa,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBzE;;;;;;OAMG;IACY,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8ClE;;;;;;OAMG;cACa,4BAA4B,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoDhH;;;;;OAKG;cACa,uCAAuC,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IA2ChH;;;OAGG;cACa,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;CAoB9D"}
1
+ {"version":3,"file":"MJAIPromptEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJAIPromptEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,iBAAiB,EAAE,iBAAiB,EAAgC,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE9J,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAkF,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjJ;;;;;;GAMG;AACH,qBACa,sBAAuB,SAAQ,wBAAwB;IAChE,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAuB;IAC5D;;;;OAIG;IACH,WAAkB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAEvD;IACD,WAAkB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAE3D;IAED,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAuB;IAC7D;;;;;;;;;;OAUG;IACH,WAAkB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAExD;IACD,WAAkB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAE5D;IAED;;;;;;;;;OASG;cACa,iCAAiC,IAAI,OAAO,CAAC,MAAM,CAAC;IA0BpE;;;;;;OAMG;cACa,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBzE;;;;;;OAMG;IACY,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8ClE;;;;;;OAMG;cACa,4BAA4B,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqDhH;;;;;OAKG;cACa,uCAAuC,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IA2ChH;;;OAGG;cACa,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;CAoB9D"}
@@ -175,7 +175,8 @@ let MJAIPromptEntityServer = class MJAIPromptEntityServer extends MJAIPromptEnti
175
175
  ExtraFilter: `TemplateID='${this.TemplateID}'`,
176
176
  OrderBy: "__mj_CreatedAt ASC", // first one
177
177
  ResultType: 'entity_object',
178
- MaxRows: 1 // should only be one row
178
+ MaxRows: 1, // should only be one row
179
+ SkipTotalRowCount: true
179
180
  }, this.ContextCurrentUser);
180
181
  let tc = undefined;
181
182
  if (result && result.Success && result.Results.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"MJAIPromptEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJAIPromptEntityServer.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MJAIPromptEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJAIPromptEntityServer.server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ValidationResult } from '@memberjunction/core';
2
+ import { MJBrandKitEntity } from '@memberjunction/core-entities';
3
+ /**
4
+ * Server-side `MJ: Brand Kits` entity enforcing the one-default-kit-per-scope rule (§4.1):
5
+ * at most one brand kit with `IsDefault = 1` may exist per `CompanyID` scope (where
6
+ * `CompanyID IS NULL` is the org-wide scope). No SQL index backs `IsDefault`; this
7
+ * `ValidateAsync` check is the only guard, failing a second default kit in the same scope
8
+ * with a `ValidationErrorInfo` naming the existing default kit rather than silently swapping flags.
9
+ */
10
+ export declare class MJBrandKitEntityServer extends MJBrandKitEntity {
11
+ get DefaultSkipAsyncValidation(): boolean;
12
+ ValidateAsync(): Promise<ValidationResult>;
13
+ }
14
+ //# sourceMappingURL=MJBrandKitEntityServer.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MJBrandKitEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJBrandKitEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwD,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE;;;;;;GAMG;AACH,qBACa,sBAAuB,SAAQ,gBAAgB;IACxD,IAAoB,0BAA0B,IAAI,OAAO,CAExD;IAEqB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC;CA+EnE"}
@@ -0,0 +1,75 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { BaseEntity, ValidationErrorInfo, ValidationErrorType } from '@memberjunction/core';
8
+ import { EscapeSQLString, RegisterClass } from '@memberjunction/global';
9
+ import { MJBrandKitEntity } from '@memberjunction/core-entities';
10
+ /**
11
+ * Server-side `MJ: Brand Kits` entity enforcing the one-default-kit-per-scope rule (§4.1):
12
+ * at most one brand kit with `IsDefault = 1` may exist per `CompanyID` scope (where
13
+ * `CompanyID IS NULL` is the org-wide scope). No SQL index backs `IsDefault`; this
14
+ * `ValidateAsync` check is the only guard, failing a second default kit in the same scope
15
+ * with a `ValidationErrorInfo` naming the existing default kit rather than silently swapping flags.
16
+ */
17
+ let MJBrandKitEntityServer = class MJBrandKitEntityServer extends MJBrandKitEntity {
18
+ get DefaultSkipAsyncValidation() {
19
+ return false;
20
+ }
21
+ async ValidateAsync() {
22
+ const result = await super.ValidateAsync();
23
+ if (!result.Success) {
24
+ return result;
25
+ }
26
+ if (!this.IsDefault) {
27
+ return result;
28
+ }
29
+ const isDefaultDirty = this.GetFieldByName('IsDefault')?.Dirty ?? false;
30
+ const companyIdDirty = this.GetFieldByName('CompanyID')?.Dirty ?? false;
31
+ if (this.IsSaved && !isDefaultDirty && !companyIdDirty) {
32
+ return result;
33
+ }
34
+ const companyFilter = this.CompanyID
35
+ ? `CompanyID = '${EscapeSQLString(this.CompanyID)}'`
36
+ : 'CompanyID IS NULL';
37
+ const selfFilter = this.ID
38
+ ? ` AND ID <> '${EscapeSQLString(this.ID)}'`
39
+ : '';
40
+ const extraFilter = `IsDefault = 1 AND ${companyFilter}${selfFilter}`;
41
+ try {
42
+ const rv = this.RunViewProviderToUse;
43
+ const runResult = await rv.RunView({
44
+ EntityName: 'MJ: Brand Kits',
45
+ ExtraFilter: extraFilter,
46
+ Fields: ['ID', 'Name'],
47
+ ResultType: 'simple',
48
+ MaxRows: 1,
49
+ }, this.ContextCurrentUser);
50
+ if (!runResult.Success) {
51
+ result.Errors.push(new ValidationErrorInfo('IsDefault', `Could not check for another default kit: ${runResult.ErrorMessage ?? 'RunView failed'}.`, this.IsDefault, ValidationErrorType.Failure));
52
+ result.Success = false;
53
+ return result;
54
+ }
55
+ const existing = runResult.Results?.[0];
56
+ if (existing) {
57
+ const scopeMessage = this.CompanyID
58
+ ? `Brand kit '${existing.Name}' is already the default for this company. Clear its IsDefault first.`
59
+ : `Brand kit '${existing.Name}' is already the default for all companies. Clear its IsDefault first.`;
60
+ result.Errors.push(new ValidationErrorInfo('IsDefault', scopeMessage, this.IsDefault, ValidationErrorType.Failure));
61
+ result.Success = false;
62
+ }
63
+ }
64
+ catch (err) {
65
+ result.Errors.push(new ValidationErrorInfo('IsDefault', `Could not check for another default kit: ${err instanceof Error ? err.message : String(err)}.`, this.IsDefault, ValidationErrorType.Failure));
66
+ result.Success = false;
67
+ }
68
+ return result;
69
+ }
70
+ };
71
+ MJBrandKitEntityServer = __decorate([
72
+ RegisterClass(BaseEntity, 'MJ: Brand Kits')
73
+ ], MJBrandKitEntityServer);
74
+ export { MJBrandKitEntityServer };
75
+ //# sourceMappingURL=MJBrandKitEntityServer.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MJBrandKitEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJBrandKitEntityServer.server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MJCompanyIntegrationEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJCompanyIntegrationEntityServer.server.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,0BAA0B,EAAuB,MAAM,+BAA+B,CAAC;AAQhG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8FG;AACH,qBACa,gCAAiC,SAAQ,0BAA0B;IAC5E;;;;;;;;OAQG;IACU,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;CA0EzD"}
1
+ {"version":3,"file":"MJCompanyIntegrationEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJCompanyIntegrationEntityServer.server.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,0BAA0B,EAAuB,MAAM,+BAA+B,CAAC;AAQhG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8FG;AACH,qBACa,gCAAiC,SAAQ,0BAA0B;IAC5E;;;;;;;;OAQG;IACU,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;CA2EzD"}
@@ -136,6 +136,7 @@ let MJCompanyIntegrationEntityServer = class MJCompanyIntegrationEntityServer ex
136
136
  ExtraFilter: `ID='${this.IntegrationID}'`,
137
137
  ResultType: 'entity_object',
138
138
  MaxRows: 1,
139
+ SkipTotalRowCount: true,
139
140
  }, user);
140
141
  const integration = integResult.Success ? integResult.Results[0] : undefined;
141
142
  if (!integration) {
@@ -1 +1 @@
1
- {"version":3,"file":"MJCompanyIntegrationEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJCompanyIntegrationEntityServer.server.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACH,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,OAAO,GAGV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAuB,MAAM,+BAA+B,CAAC;AAChG,OAAO,EACH,oCAAoC,EACpC,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8FG;AAEI,IAAM,gCAAgC,GAAtC,MAAM,gCAAiC,SAAQ,0BAA0B;IAC5E;;;;;;;;OAQG;IACI,KAAK,CAAC,wBAAwB;QACjC,MAAM,IAAI,GAAyB,IAAI,CAAC,kBAAkB,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,SAAS,CAAC,iEAAiE,IAAI,CAAC,EAAE,mCAAmC,CAAC,CAAC;YACvH,OAAO;QACX,CAAC;QACD,2EAA2E;QAC3E,qEAAqE;QACrE,2EAA2E;QAC3E,4EAA4E;QAC5E,MAAM,QAAQ,GAAkC,IAAI,CAAC,aAAyD,CAAC;QAE/G,SAAS,CAAC,mEAAmE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAE5I,2EAA2E;QAC3E,yDAAyD;QACzD,MAAM,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE/D,oEAAoE;QACpE,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAsB;YACtD,UAAU,EAAE,kBAAkB;YAC9B,WAAW,EAAE,OAAO,IAAI,CAAC,aAAa,GAAG;YACzC,UAAU,EAAE,eAAe;YAC3B,OAAO,EAAE,CAAC;SACb,EAAE,IAAI,CAAC,CAAC;QACT,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,QAAQ,CAAC,kFAAkF,IAAI,CAAC,aAAa,qBAAqB,CAAC,CAAC;YACpI,OAAO;QACX,CAAC;QAED,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACD,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YAClB,QAAQ,CAAC,4EAA4E,WAAW,CAAC,SAAS,KAAK,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACxL,OAAO;QACX,CAAC;QAED,mEAAmE;QACnE,wEAAwE;QACxE,wEAAwE;QACxE,qEAAqE;QACrE,qEAAqE;QACrE,wEAAwE;QACxE,uDAAuD;QACvD,MAAM,YAAY,GAAG,MAAM,6BAA6B,CAAC,IAAI,CAAC,CAAC;QAE/D,0EAA0E;QAC1E,yEAAyE;QACzE,MAAM,QAAQ,GAAG,IAAI,oCAAoC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC;YAC9B,SAAS,EAAE,SAAS;YACpB,kBAAkB,EAAE,IAAI;YACxB,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,QAAQ;YAClB,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,QAAQ;YACrB,YAAY,EAAE,YAAY,IAAI,SAAS;SAC1C,CAAC,CAAC;QAEH,wEAAwE;QACxE,2CAA2C;QAC3C,IAAI,CAAC;YAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACjF,IAAI,CAAC;YAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAElG,SAAS,CACL,kEAAkE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,IAAI;YACjG,GAAG,MAAM,CAAC,aAAa,EAAE,cAAc,IAAI,CAAC,aAAa,MAAM,CAAC,aAAa,EAAE,cAAc,IAAI,CAAC,YAAY;YAC9G,GAAG,MAAM,CAAC,aAAa,EAAE,aAAa,IAAI,CAAC,oBAAoB,MAAM,CAAC,aAAa,EAAE,aAAa,IAAI,CAAC,mBAAmB;YAC1H,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,mEAAmE,CACxG,CAAC;IACN,CAAC;CACJ,CAAA;AApFY,gCAAgC;IAD5C,aAAa,CAAC,UAAU,EAAE,0BAA0B,CAAC;GACzC,gCAAgC,CAoF5C"}
1
+ {"version":3,"file":"MJCompanyIntegrationEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJCompanyIntegrationEntityServer.server.ts"],"names":[],"mappings":"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"}
@@ -24,9 +24,18 @@ import { MJComponentEntityExtended } from "@memberjunction/core-entities";
24
24
  * found by comparing with the stored row, not with the values as loaded. When a read fails, the
25
25
  * write is refused. The check needs a query and `Validate()` is synchronous, so it runs in `Save()`
26
26
  * (an ordinary save and a `ReplayOnly` save alike) and in `Delete()`, before the write.
27
+ *
28
+ * Approval (`ApprovalStatus`) is a server act: a save that moves it to Approved records the context
29
+ * user, the time and the fingerprint of this version's specification (`ApplyApprovalRulesAsync`).
27
30
  */
28
31
  export declare class MJComponentEntityServer extends MJComponentEntityExtended {
29
32
  Save(options?: EntitySaveOptions): Promise<boolean>;
33
+ /**
34
+ * Applies the approval rules. Nothing in this save derives the specification or version, so an
35
+ * approving save stamps the fingerprint now and writes it with the row.
36
+ * @returns false when the save was refused (the reason is in `LatestResult`)
37
+ */
38
+ private applyApprovalAsync;
30
39
  Delete(options?: EntityDeleteOptions): Promise<boolean>;
31
40
  /**
32
41
  * Simple proxy to local helper method for embeddings. Needed for BaseEntity sub-classes that want to use embeddings built into BaseEntity
@@ -34,6 +43,8 @@ export declare class MJComponentEntityServer extends MJComponentEntityExtended {
34
43
  * @returns
35
44
  */
36
45
  protected EmbedTextLocal(textToEmbed: string): Promise<SimpleEmbeddingResult>;
46
+ /** A stored vector from a model other than the default local one is re-embedded on save. */
47
+ protected IsEmbeddingStale(embeddingModelID: string | null): Promise<boolean>;
37
48
  /** This component as the guard reads it. Built here because `ActiveUser` is protected on `BaseEntity`. */
38
49
  private get guardedRow();
39
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MJComponentEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJComponentEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EAExB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAK1E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBACa,uBAAwB,SAAQ,yBAAyB;IAC5C,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBnD,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAS7E;;;;OAIG;cACsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI5F,0GAA0G;IAC1G,OAAO,KAAK,UAAU,GAcrB;CACJ"}
1
+ {"version":3,"file":"MJComponentEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJComponentEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EAExB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAoC,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAM5G;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBACa,uBAAwB,SAAQ,yBAAyB;IAC5C,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BzE;;;;OAIG;YACW,kBAAkB;IAYV,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAS7E;;;;OAIG;cACsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI5F,4FAA4F;cACnE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5F,0GAA0G;IAC1G,OAAO,KAAK,UAAU,GAcrB;CACJ"}
@@ -6,10 +6,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { BaseEntity, } from "@memberjunction/core";
8
8
  import { RegisterClass } from "@memberjunction/global";
9
- import { MJComponentEntityExtended } from "@memberjunction/core-entities";
10
- import { EmbedTextLocalHelper } from "./util.js";
9
+ import { ComputeComponentFingerprintAsync, MJComponentEntityExtended } from "@memberjunction/core-entities";
10
+ import { EmbedTextLocalHelper, IsLocalEmbeddingStaleHelper } from "./util.js";
11
11
  import { FormScopeRefusalResult } from "./FormScopeGuard.js";
12
12
  import { ComponentGuardRefusal } from "./FormComponentGuard.js";
13
+ import { ApplyApprovalRulesAsync, ApprovalRefusalResult } from "./approvalStamp.js";
13
14
  /**
14
15
  * Server-side `MJ: Components` entity.
15
16
  *
@@ -34,6 +35,9 @@ import { ComponentGuardRefusal } from "./FormComponentGuard.js";
34
35
  * found by comparing with the stored row, not with the values as loaded. When a read fails, the
35
36
  * write is refused. The check needs a query and `Validate()` is synchronous, so it runs in `Save()`
36
37
  * (an ordinary save and a `ReplayOnly` save alike) and in `Delete()`, before the write.
38
+ *
39
+ * Approval (`ApprovalStatus`) is a server act: a save that moves it to Approved records the context
40
+ * user, the time and the fingerprint of this version's specification (`ApplyApprovalRulesAsync`).
37
41
  */
38
42
  let MJComponentEntityServer = class MJComponentEntityServer extends MJComponentEntityExtended {
39
43
  async Save(options) {
@@ -43,6 +47,9 @@ let MJComponentEntityServer = class MJComponentEntityServer extends MJComponentE
43
47
  this.RegisterResultHistoryEntry(FormScopeRefusalResult(operation, refusal));
44
48
  return false;
45
49
  }
50
+ if (!await this.applyApprovalAsync(options)) {
51
+ return false;
52
+ }
46
53
  await this.GenerateEmbeddingsByFieldName([
47
54
  {
48
55
  fieldName: "FunctionalRequirements",
@@ -60,6 +67,23 @@ let MJComponentEntityServer = class MJComponentEntityServer extends MJComponentE
60
67
  const saveResult = await super.Save(options);
61
68
  return saveResult;
62
69
  }
70
+ /**
71
+ * Applies the approval rules. Nothing in this save derives the specification or version, so an
72
+ * approving save stamps the fingerprint now and writes it with the row.
73
+ * @returns false when the save was refused (the reason is in `LatestResult`)
74
+ */
75
+ async applyApprovalAsync(options) {
76
+ try {
77
+ if (!options?.ReplayOnly && await ApplyApprovalRulesAsync(this, 'ApprovalStatus', this.ApprovalStatus)) {
78
+ this.ApprovedFingerprint = await ComputeComponentFingerprintAsync(this);
79
+ }
80
+ return true;
81
+ }
82
+ catch (e) {
83
+ this.RegisterResultHistoryEntry(ApprovalRefusalResult(this, e));
84
+ return false;
85
+ }
86
+ }
63
87
  async Delete(options) {
64
88
  const refusal = await ComponentGuardRefusal(this.guardedRow, 'delete');
65
89
  if (refusal) {
@@ -76,6 +100,10 @@ let MJComponentEntityServer = class MJComponentEntityServer extends MJComponentE
76
100
  async EmbedTextLocal(textToEmbed) {
77
101
  return EmbedTextLocalHelper(this, textToEmbed);
78
102
  }
103
+ /** A stored vector from a model other than the default local one is re-embedded on save. */
104
+ async IsEmbeddingStale(embeddingModelID) {
105
+ return IsLocalEmbeddingStaleHelper(this, embeddingModelID);
106
+ }
79
107
  /** This component as the guard reads it. Built here because `ActiveUser` is protected on `BaseEntity`. */
80
108
  get guardedRow() {
81
109
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"MJComponentEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJComponentEntityServer.server.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EACH,UAAU,GAKb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAA4B,MAAM,sBAAsB,CAAC;AAEvF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,yBAAyB;IAClD,KAAK,CAAC,IAAI,CAAC,OAA2B;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,0BAA0B,CAAC,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5E,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,CAAC,6BAA6B,CAAC;YACrC;gBACI,SAAS,EAAE,wBAAwB;gBACnC,eAAe,EAAE,8BAA8B;gBAC/C,cAAc,EAAE,8CAA8C;gBAC9D,qBAAqB,EAAE,oCAAoC;aAC9D;YACD;gBACI,SAAS,EAAE,iBAAiB;gBAC5B,eAAe,EAAE,uBAAuB;gBACxC,cAAc,EAAE,uCAAuC;gBACvD,qBAAqB,EAAE,6BAA6B;aACvD;SACJ,CAAC,CAAC;QACH,MAAM,UAAU,GAAY,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,UAAU,CAAC;IACtB,CAAC;IAEe,KAAK,CAAC,MAAM,CAAC,OAA6B;QACtD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvE,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,0BAA0B,CAAC,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3E,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACgB,KAAK,CAAC,cAAc,CAAC,WAAmB;QACvD,OAAO,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,0GAA0G;IAC1G,IAAY,UAAU;QAClB,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE;gBACJ,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;aAC5B;YACD,eAAe,EAAE,IAAI,CAAC,oBAAoB;YAC1C,gBAAgB,EAAE,IAAI,CAAC,aAA6C;SACvE,CAAC;IACN,CAAC;CACJ,CAAA;AA5DY,uBAAuB;IADnC,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAC;GAC/B,uBAAuB,CA4DnC"}
1
+ {"version":3,"file":"MJComponentEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJComponentEntityServer.server.ts"],"names":[],"mappings":"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"}