@aventara/core 1.0.0-rc.0 → 1.0.0-rc.10

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 (338) hide show
  1. package/CHANGELOG.md +2068 -1
  2. package/ERRORS.md +142 -0
  3. package/README.md +485 -60
  4. package/dist/adapters/adapter-discovery-diagnostic.d.ts +4 -4
  5. package/dist/adapters/adapter-discovery-diagnostic.guidance.d.ts +6 -0
  6. package/dist/adapters/adapter-discovery-diagnostic.guidance.js +7 -0
  7. package/dist/adapters/adapter-field.d.ts +33 -11
  8. package/dist/adapters/adapter-identifier.d.ts +15 -6
  9. package/dist/adapters/adapter-identifier.js +6 -1
  10. package/dist/adapters/adapter-model.d.ts +18 -9
  11. package/dist/adapters/adapter-operation-executor.interface.d.ts +4 -4
  12. package/dist/adapters/adapter-operation.d.ts +21 -6
  13. package/dist/adapters/adapter-resource.d.ts +23 -9
  14. package/dist/adapters/adapter-sql-statement.d.ts +19 -0
  15. package/dist/adapters/adapter-transaction-executor.interface.d.ts +19 -0
  16. package/dist/adapters/adapter.interface.d.ts +59 -29
  17. package/dist/avz/avz-check.factory.d.ts +83 -0
  18. package/dist/avz/avz-check.factory.js +116 -0
  19. package/dist/avz/avz-check.registry.d.ts +35 -0
  20. package/dist/avz/avz-check.registry.js +9 -0
  21. package/dist/avz/avz.d.ts +203 -0
  22. package/dist/{json → avz}/avz.js +150 -8
  23. package/dist/{json → avz}/index.d.ts +2 -1
  24. package/dist/{json → avz}/json-shape.registry.d.ts +9 -8
  25. package/dist/{json → avz}/zod-issue.translator.d.ts +8 -2
  26. package/dist/{json → avz}/zod-issue.translator.js +7 -0
  27. package/dist/compiler/contract-compiler-diagnostic.d.ts +31 -5
  28. package/dist/compiler/contract-compiler-diagnostic.guidance.d.ts +6 -0
  29. package/dist/compiler/contract-compiler-diagnostic.guidance.js +97 -0
  30. package/dist/compiler/contract.compiler.d.ts +23 -17
  31. package/dist/compiler/contract.compiler.js +753 -443
  32. package/dist/compiler/create-requirements.projector.d.ts +49 -0
  33. package/dist/compiler/create-requirements.projector.js +423 -0
  34. package/dist/compiler/field-validator.compiler.d.ts +47 -0
  35. package/dist/compiler/field-validator.compiler.js +238 -0
  36. package/dist/compiler/managed-elsewhere.projector.d.ts +52 -0
  37. package/dist/compiler/managed-elsewhere.projector.js +179 -0
  38. package/dist/compiler/managed-elsewhere.validator.d.ts +9 -0
  39. package/dist/compiler/managed-elsewhere.validator.js +74 -0
  40. package/dist/config/any-framework-config.d.ts +19 -12
  41. package/dist/config/computed-fields.d.ts +62 -0
  42. package/dist/config/computed-fields.js +73 -0
  43. package/dist/config/config-diagnostic.d.ts +11 -4
  44. package/dist/config/config-diagnostic.guidance.d.ts +6 -0
  45. package/dist/config/config-diagnostic.guidance.js +32 -0
  46. package/dist/config/config-layer.d.ts +15 -6
  47. package/dist/config/config.resolver.d.ts +98 -31
  48. package/dist/config/config.resolver.js +173 -44
  49. package/dist/config/config.validator.d.ts +7 -7
  50. package/dist/config/config.validator.js +792 -69
  51. package/dist/config/define-resource.d.ts +53 -0
  52. package/dist/config/define-resource.js +14 -0
  53. package/dist/config/effective-fields.d.ts +19 -23
  54. package/dist/config/entrypoint.normalizer.d.ts +4 -3
  55. package/dist/config/exact-framework-config.d.ts +325 -0
  56. package/dist/config/field-compute.resolver.d.ts +21 -0
  57. package/dist/config/field-compute.resolver.js +123 -0
  58. package/dist/config/field-pipeline-config.d.ts +47 -0
  59. package/dist/config/forced-operation.validator.d.ts +10 -0
  60. package/dist/config/forced-operation.validator.js +66 -0
  61. package/dist/config/framework-config.d.ts +148 -39
  62. package/dist/config/framework-exemptions-config.d.ts +91 -0
  63. package/dist/config/framework-exemptions-config.js +1 -0
  64. package/dist/config/framework-field-definition.d.ts +78 -0
  65. package/dist/config/framework-field-definition.js +28 -0
  66. package/dist/config/framework-resources-config.d.ts +127 -0
  67. package/dist/config/framework-resources-config.js +1 -0
  68. package/dist/config/pipeline-config.d.ts +56 -20
  69. package/dist/config/pipeline-tree.resolver.d.ts +79 -0
  70. package/dist/config/pipeline-tree.resolver.js +220 -0
  71. package/dist/config/stage-type.eraser.d.ts +65 -0
  72. package/dist/config/stage-type.eraser.js +1 -0
  73. package/dist/contracts/access-route.rules.d.ts +10 -0
  74. package/dist/contracts/access-route.rules.js +45 -0
  75. package/dist/contracts/capability.d.ts +37 -12
  76. package/dist/contracts/capability.js +20 -0
  77. package/dist/contracts/client-contract-structure.validator.d.ts +621 -114
  78. package/dist/contracts/client-contract-structure.validator.js +189 -10
  79. package/dist/contracts/contract-access.d.ts +29 -0
  80. package/dist/contracts/contract-access.js +1 -0
  81. package/dist/contracts/contract-canonicalizer.d.ts +27 -3
  82. package/dist/contracts/contract-canonicalizer.js +168 -29
  83. package/dist/contracts/contract-hash.d.ts +11 -7
  84. package/dist/contracts/contract-hash.js +4 -3
  85. package/dist/contracts/contract-limits.d.ts +4 -1
  86. package/dist/contracts/contract-limits.js +1 -0
  87. package/dist/contracts/contract-lookup.d.ts +5 -5
  88. package/dist/contracts/contract-protocol.d.ts +4 -4
  89. package/dist/contracts/contract.d.ts +51 -17
  90. package/dist/contracts/create-requirements.d.ts +35 -0
  91. package/dist/contracts/create-requirements.js +1 -0
  92. package/dist/contracts/enum-definition.d.ts +1 -1
  93. package/dist/contracts/field-check.d.ts +101 -0
  94. package/dist/contracts/field-check.js +1 -0
  95. package/dist/contracts/field.d.ts +109 -42
  96. package/dist/contracts/identifier.d.ts +4 -4
  97. package/dist/contracts/json-schema.projector.d.ts +11 -0
  98. package/dist/contracts/json-schema.projector.js +78 -0
  99. package/dist/contracts/json-shape.d.ts +12 -1
  100. package/dist/contracts/lifecycle-trait.d.ts +2 -2
  101. package/dist/contracts/resource-operations.d.ts +28 -28
  102. package/dist/contracts/resource.d.ts +15 -9
  103. package/dist/contracts/scalar-value-type.d.ts +17 -15
  104. package/dist/contracts/scalar.d.ts +3 -3
  105. package/dist/contracts/transaction-capability.d.ts +1 -1
  106. package/dist/contracts/wire-scalar-format.d.ts +4 -4
  107. package/dist/framework/access-facade.d.ts +116 -0
  108. package/dist/framework/access-facade.js +120 -0
  109. package/dist/framework/contract-view.d.ts +315 -145
  110. package/dist/framework/framework-construction.error.d.ts +21 -11
  111. package/dist/framework/framework-construction.error.js +20 -4
  112. package/dist/framework/framework.d.ts +71 -26
  113. package/dist/framework/framework.factory.d.ts +8 -6
  114. package/dist/framework/framework.factory.js +150 -38
  115. package/dist/framework/operation-facade.d.ts +192 -54
  116. package/dist/framework/operation-facade.js +10 -1
  117. package/dist/index.d.ts +67 -50
  118. package/dist/index.js +7 -6
  119. package/dist/internal.d.ts +20 -10
  120. package/dist/internal.js +9 -1
  121. package/dist/operations/database-refusal.d.ts +51 -0
  122. package/dist/operations/database-refusal.js +45 -0
  123. package/dist/operations/operation-arguments.d.ts +381 -228
  124. package/dist/operations/operation-call.d.ts +31 -28
  125. package/dist/operations/operation-identity.d.ts +10 -10
  126. package/dist/operations/operation-result.d.ts +25 -23
  127. package/dist/operations/operation-validator-core.d.ts +6 -6
  128. package/dist/operations/operation-validator-core.js +172 -38
  129. package/dist/operations/operation-validator.d.ts +10 -10
  130. package/dist/operations/projection-scope.resolver.d.ts +6 -6
  131. package/dist/operations/structural-limits.walker.d.ts +7 -7
  132. package/dist/operations/structural-limits.walker.js +145 -0
  133. package/dist/operations/validation-code.d.ts +11 -6
  134. package/dist/operations/validation-code.guidance.d.ts +6 -0
  135. package/dist/operations/validation-code.guidance.js +90 -0
  136. package/dist/operations/validation-code.js +4 -0
  137. package/dist/operations/write-scope.resolver.d.ts +10 -6
  138. package/dist/operations/write-scope.resolver.js +2 -0
  139. package/dist/policy/access-provider.interface.d.ts +91 -0
  140. package/dist/policy/access-provider.interface.js +1 -0
  141. package/dist/policy/access-provider.registry.d.ts +17 -0
  142. package/dist/policy/access-provider.registry.js +15 -0
  143. package/dist/policy/access-question.d.ts +20 -0
  144. package/dist/policy/access-question.js +1 -0
  145. package/dist/policy/access-question.registry.d.ts +5 -0
  146. package/dist/policy/access-question.registry.js +19 -0
  147. package/dist/policy/access-question.runtime.d.ts +36 -0
  148. package/dist/policy/access-question.runtime.js +297 -0
  149. package/dist/policy/access-verb.table.d.ts +56 -0
  150. package/dist/policy/access-verb.table.js +21 -0
  151. package/dist/policy/access-verbs.d.ts +46 -0
  152. package/dist/policy/access-verbs.js +1 -0
  153. package/dist/policy/policy-admission.d.ts +20 -0
  154. package/dist/policy/policy-admission.js +409 -0
  155. package/dist/policy/policy-after-update.runtime.d.ts +79 -0
  156. package/dist/policy/policy-after-update.runtime.js +208 -0
  157. package/dist/policy/policy-condition.d.ts +15 -0
  158. package/dist/policy/policy-condition.js +36 -0
  159. package/dist/policy/policy-engine.d.ts +205 -0
  160. package/dist/policy/policy-engine.js +1 -0
  161. package/dist/policy/policy-named-rows.d.ts +18 -0
  162. package/dist/policy/policy-named-rows.js +51 -0
  163. package/dist/policy/policy-nested-write.runtime.d.ts +44 -0
  164. package/dist/policy/policy-nested-write.runtime.js +545 -0
  165. package/dist/policy/policy-read.runtime.d.ts +81 -0
  166. package/dist/policy/policy-read.runtime.js +503 -0
  167. package/dist/policy/policy-reference-write.runtime.d.ts +51 -0
  168. package/dist/policy/policy-reference-write.runtime.js +345 -0
  169. package/dist/policy/policy-request.d.ts +41 -0
  170. package/dist/policy/policy-request.js +63 -0
  171. package/dist/policy/policy-session.d.ts +106 -0
  172. package/dist/policy/policy-session.js +295 -0
  173. package/dist/policy/policy-startup.validator.d.ts +10 -0
  174. package/dist/policy/policy-startup.validator.js +112 -0
  175. package/dist/policy/policy-write.runtime.d.ts +39 -0
  176. package/dist/policy/policy-write.runtime.js +532 -0
  177. package/dist/prebuilt/core-version.generated.d.ts +2 -0
  178. package/dist/prebuilt/core-version.generated.js +1 -0
  179. package/dist/prebuilt/prebuilt-changes.d.ts +29 -0
  180. package/dist/prebuilt/prebuilt-changes.js +65 -0
  181. package/dist/prebuilt/prebuilt-contracts.d.ts +40 -0
  182. package/dist/prebuilt/prebuilt-contracts.emitter.d.ts +16 -0
  183. package/dist/prebuilt/prebuilt-contracts.emitter.js +50 -0
  184. package/dist/prebuilt/prebuilt-contracts.js +1 -0
  185. package/dist/prebuilt/prebuilt-contracts.loader.d.ts +19 -0
  186. package/dist/prebuilt/prebuilt-contracts.loader.js +77 -0
  187. package/dist/prebuilt/prebuilt-inputs.fingerprint.d.ts +16 -0
  188. package/dist/prebuilt/prebuilt-inputs.fingerprint.js +229 -0
  189. package/dist/protocol/absent-route.responder.d.ts +17 -34
  190. package/dist/protocol/absent-route.responder.js +53 -20
  191. package/dist/protocol/contract-document.responder.d.ts +5 -4
  192. package/dist/protocol/contract-document.responder.js +2 -2
  193. package/dist/protocol/http-request.decoder.d.ts +33 -13
  194. package/dist/protocol/http-request.decoder.js +34 -11
  195. package/dist/protocol/http-request.reader.d.ts +9 -6
  196. package/dist/protocol/http-request.reader.js +1 -0
  197. package/dist/protocol/http-response.encoder.d.ts +4 -4
  198. package/dist/protocol/http-response.encoder.js +94 -55
  199. package/dist/protocol/http-status.table.d.ts +2 -2
  200. package/dist/protocol/operation-response.guard.d.ts +2 -2
  201. package/dist/protocol/protocol-headers.d.ts +3 -3
  202. package/dist/protocol/protocol-surface.d.ts +10 -5
  203. package/dist/protocol/protocol-surface.js +7 -0
  204. package/dist/protocol/protocol.binder.d.ts +66 -28
  205. package/dist/protocol/protocol.binder.js +16 -10
  206. package/dist/protocol/protocol.handler.d.ts +34 -14
  207. package/dist/protocol/protocol.handler.js +122 -18
  208. package/dist/protocol/unmounted-route.error.d.ts +4 -4
  209. package/dist/protocol/unmounted-route.error.js +2 -2
  210. package/dist/runtime/caller-data.copier.d.ts +22 -7
  211. package/dist/runtime/caller-data.copier.js +30 -17
  212. package/dist/runtime/caller-data.door.d.ts +18 -11
  213. package/dist/runtime/caller-data.door.js +6 -4
  214. package/dist/runtime/computed-read-runtime.d.ts +12 -6
  215. package/dist/runtime/computed-read-runtime.js +271 -71
  216. package/dist/runtime/computed-value.error.d.ts +7 -6
  217. package/dist/runtime/computed-value.error.js +5 -4
  218. package/dist/runtime/context-executor.runtime.d.ts +60 -0
  219. package/dist/runtime/context-executor.runtime.js +277 -0
  220. package/dist/runtime/core-class.brand.d.ts +10 -0
  221. package/dist/runtime/core-class.brand.js +21 -0
  222. package/dist/runtime/create-requirement.d.ts +34 -79
  223. package/dist/runtime/create-requirement.js +205 -74
  224. package/dist/runtime/decimal.d.ts +16 -2
  225. package/dist/runtime/decimal.js +22 -1
  226. package/dist/runtime/diagnostics-reporter.d.ts +91 -30
  227. package/dist/runtime/diagnostics-reporter.js +37 -1
  228. package/dist/runtime/error-boundary.d.ts +73 -9
  229. package/dist/runtime/error-boundary.js +57 -19
  230. package/dist/runtime/error-guidance.d.ts +12 -0
  231. package/dist/runtime/error-guidance.js +1 -0
  232. package/dist/runtime/error.catalog.d.ts +49 -0
  233. package/dist/runtime/error.catalog.js +49 -0
  234. package/dist/runtime/execution-options.d.ts +18 -2
  235. package/dist/runtime/field-check.evaluator.d.ts +27 -0
  236. package/dist/runtime/field-check.evaluator.js +521 -0
  237. package/dist/runtime/field-compute.d.ts +65 -0
  238. package/dist/runtime/field-compute.js +1 -0
  239. package/dist/runtime/field-stage.plan.d.ts +15 -0
  240. package/dist/runtime/field-stage.plan.js +27 -0
  241. package/dist/runtime/field-stage.runtime.d.ts +37 -0
  242. package/dist/runtime/field-stage.runtime.js +147 -0
  243. package/dist/runtime/field-validator.runtime.d.ts +29 -0
  244. package/dist/runtime/field-validator.runtime.js +126 -0
  245. package/dist/runtime/framework-error-class.table.d.ts +33 -0
  246. package/dist/runtime/framework-error-class.table.js +25 -0
  247. package/dist/runtime/framework-error.d.ts +68 -8
  248. package/dist/runtime/framework-error.factory.d.ts +4 -0
  249. package/dist/runtime/framework-error.factory.js +15 -0
  250. package/dist/runtime/framework-error.js +32 -2
  251. package/dist/runtime/framework-warning.emitter.d.ts +6 -0
  252. package/dist/runtime/framework-warning.emitter.js +8 -0
  253. package/dist/runtime/interceptor-next.error.d.ts +5 -0
  254. package/dist/runtime/interceptor-next.error.js +6 -0
  255. package/dist/runtime/json-value.d.ts +11 -6
  256. package/dist/runtime/level-lifecycle.runtime.d.ts +26 -0
  257. package/dist/runtime/level-lifecycle.runtime.js +40 -0
  258. package/dist/runtime/misuse-reporter.d.ts +12 -12
  259. package/dist/runtime/mutation-planner.d.ts +20 -16
  260. package/dist/runtime/mutation-planner.js +48 -35
  261. package/dist/runtime/nested-write.walker.d.ts +32 -0
  262. package/dist/runtime/nested-write.walker.js +73 -0
  263. package/dist/runtime/operation-code.guidance.d.ts +6 -0
  264. package/dist/runtime/operation-code.guidance.js +167 -0
  265. package/dist/runtime/operation-request.d.ts +45 -11
  266. package/dist/runtime/operation-response.d.ts +17 -17
  267. package/dist/runtime/operation-runtime.d.ts +133 -27
  268. package/dist/runtime/operation-runtime.js +576 -84
  269. package/dist/runtime/outcome-mapper.d.ts +17 -5
  270. package/dist/runtime/outcome-mapper.js +23 -6
  271. package/dist/runtime/output-validator.d.ts +11 -11
  272. package/dist/runtime/output-validator.js +3 -3
  273. package/dist/runtime/owned-execution.registry.d.ts +16 -6
  274. package/dist/runtime/pipe-output.validator.d.ts +43 -18
  275. package/dist/runtime/pipe-output.validator.js +15 -13
  276. package/dist/runtime/pipeline.d.ts +221 -34
  277. package/dist/runtime/readonly-value.d.ts +47 -0
  278. package/dist/runtime/readonly-value.js +189 -0
  279. package/dist/runtime/referential-action.d.ts +1 -1
  280. package/dist/runtime/request-envelope.validator.d.ts +3 -3
  281. package/dist/runtime/request-envelope.validator.js +12 -7
  282. package/dist/runtime/request-id.d.ts +1 -1
  283. package/dist/runtime/request-state.d.ts +14 -0
  284. package/dist/runtime/request-state.js +1 -0
  285. package/dist/runtime/request-state.resolver.d.ts +12 -0
  286. package/dist/runtime/request-state.resolver.js +20 -0
  287. package/dist/runtime/scalar-runtime.d.ts +33 -25
  288. package/dist/runtime/scalar-runtime.js +105 -38
  289. package/dist/runtime/unsent-value.normalizer.d.ts +15 -0
  290. package/dist/runtime/unsent-value.normalizer.js +128 -0
  291. package/dist/transactions/deferred-operation.d.ts +35 -20
  292. package/dist/transactions/operation-arguments-encoder.d.ts +3 -3
  293. package/dist/transactions/operation-arguments-encoder.js +8 -3
  294. package/dist/transactions/operation-fingerprint.js +2 -2
  295. package/dist/transactions/sql-statement.d.ts +85 -0
  296. package/dist/transactions/sql-statement.js +47 -0
  297. package/dist/transactions/sql-statement.validator.d.ts +44 -0
  298. package/dist/transactions/sql-statement.validator.js +167 -0
  299. package/dist/transactions/transaction-envelope.d.ts +9 -8
  300. package/dist/transactions/transaction-integrity-error.d.ts +6 -6
  301. package/dist/transactions/transaction-integrity-error.js +7 -2
  302. package/dist/transactions/transaction-plan-assembler.d.ts +30 -13
  303. package/dist/transactions/transaction-plan-assembler.js +184 -32
  304. package/dist/transactions/transaction-plan-validator.d.ts +50 -25
  305. package/dist/transactions/transaction-plan-validator.js +96 -38
  306. package/dist/transactions/transaction-reference-collector.d.ts +5 -5
  307. package/dist/transactions/transaction-reference-resolver.d.ts +21 -3
  308. package/dist/transactions/transaction-reference-resolver.js +26 -14
  309. package/dist/transactions/transaction-reference-validator.d.ts +74 -4
  310. package/dist/transactions/transaction-reference-validator.js +129 -71
  311. package/dist/transactions/transaction-reference.d.ts +14 -14
  312. package/dist/transactions/transaction-reference.js +5 -0
  313. package/dist/transactions/transaction-request.d.ts +22 -9
  314. package/dist/transactions/transaction-response.d.ts +6 -6
  315. package/dist/transactions/transaction-runtime.d.ts +12 -8
  316. package/dist/transactions/transaction-runtime.js +218 -50
  317. package/dist/transactions/transaction-settlement.runtime.d.ts +52 -0
  318. package/dist/transactions/transaction-settlement.runtime.js +120 -0
  319. package/dist/transactions/transaction-slot-path-error.d.ts +4 -4
  320. package/dist/transactions/transaction-slot-path-error.js +4 -2
  321. package/dist/transactions/transaction-slot-writer.js +2 -2
  322. package/dist/transactions/transaction-stage.runtime.d.ts +83 -0
  323. package/dist/transactions/transaction-stage.runtime.js +126 -0
  324. package/package.json +11 -9
  325. package/src/runtime/field-check.evaluator.ts +720 -0
  326. package/dist/config/define-fields.d.ts +0 -42
  327. package/dist/config/define-fields.js +0 -3
  328. package/dist/config/framework-behaviors-config.d.ts +0 -30
  329. package/dist/config/framework-fields-config.d.ts +0 -42
  330. package/dist/config/framework-restrictions-config.d.ts +0 -142
  331. package/dist/json/avz.d.ts +0 -96
  332. package/dist/runtime/field-behavior.d.ts +0 -48
  333. /package/dist/{config/framework-behaviors-config.js → adapters/adapter-sql-statement.js} +0 -0
  334. /package/dist/{config/framework-fields-config.js → adapters/adapter-transaction-executor.interface.js} +0 -0
  335. /package/dist/{json → avz}/index.js +0 -0
  336. /package/dist/{json → avz}/json-shape.registry.js +0 -0
  337. /package/dist/config/{framework-restrictions-config.js → exact-framework-config.js} +0 -0
  338. /package/dist/{runtime/field-behavior.js → config/field-pipeline-config.js} +0 -0
@@ -164,86 +164,136 @@ function isAssignable(source, destination, shape) {
164
164
  return source.list && !source.nullable;
165
165
  }
166
166
  }
167
+ export function invalidSourceIndexIssue(operationPath) {
168
+ return validationIssue("V1016", operationPath, "Transaction reference operation index is invalid.");
169
+ }
170
+ export function referenceSourceAt(earlier, sourceIndex, referencingIndex) {
171
+ if (typeof sourceIndex !== "number" ||
172
+ !Number.isInteger(sourceIndex) ||
173
+ sourceIndex < 0 ||
174
+ sourceIndex >= referencingIndex) {
175
+ return undefined;
176
+ }
177
+ const source = earlier[sourceIndex];
178
+ return source !== undefined && source.index === sourceIndex
179
+ ? source
180
+ : undefined;
181
+ }
182
+ function sqlSourceIssue(pathPath) {
183
+ return validationIssue("V1010", pathPath, "Transaction reference source is a SQL step, whose rows cannot be referenced.");
184
+ }
185
+ export function referenceSourceField(source, segment, pathPath) {
186
+ if (source.kind === "sql") {
187
+ return { ok: false, issue: sqlSourceIssue(pathPath) };
188
+ }
189
+ if (source.request.variant === "many" || source.request.variant === "count") {
190
+ return {
191
+ ok: false,
192
+ issue: validationIssue("V1010", pathPath, "Transaction reference source has no addressable single-row projection."),
193
+ };
194
+ }
195
+ const projection = source.projection;
196
+ if (projection?.reducers.some((reducer) => reducer === segment)) {
197
+ return {
198
+ ok: false,
199
+ issue: validationIssue("V1011", pathPath, "Transaction reference source is not a scalar field."),
200
+ };
201
+ }
202
+ const field = projection === undefined || !projection.requested.includes(segment)
203
+ ? undefined
204
+ : lookupField(lookupResource(source.contract, projection.resource), segment);
205
+ if (field === undefined) {
206
+ return {
207
+ ok: false,
208
+ issue: validationIssue("V1010", pathPath, "Transaction reference path is not present in the source projection."),
209
+ };
210
+ }
211
+ return { ok: true, field };
212
+ }
167
213
  const CANDIDATE_KEYS = new Set(["$ref"]);
168
214
  const REFERENCE_KEYS = new Set(["operation", "fingerprint", "path"]);
169
- export function validateTransactionReferences(operation, earlier) {
215
+ export function inspectReferenceCandidate(candidate, slotPath, earlier, referencingIndex) {
216
+ const refused = (issue) => ({ ok: false, issue });
217
+ const candidateInspection = inspectControlObject(candidate, CANDIDATE_KEYS, slotPath, validationIssue("V1001", slotPath, "Reference control value must be an object."));
218
+ if (!candidateInspection.ok) {
219
+ return refused(candidateInspection.issue);
220
+ }
221
+ const refPath = [...slotPath, "$ref"];
222
+ const refProperty = inspectOwnDataProperty(candidateInspection.value, "$ref", refPath, "V1001", slotPath);
223
+ if (!refProperty.ok) {
224
+ return refused(refProperty.issue);
225
+ }
226
+ const operationPath = [...refPath, "operation"];
227
+ const referenceInspection = inspectControlObject(refProperty.value, REFERENCE_KEYS, refPath, validationIssue("V1016", operationPath, "Transaction reference operation index is invalid."));
228
+ if (!referenceInspection.ok) {
229
+ return refused(referenceInspection.issue);
230
+ }
231
+ const sourceIndexProperty = inspectOwnDataProperty(referenceInspection.value, "operation", operationPath, "V1016", refPath);
232
+ if (!sourceIndexProperty.ok) {
233
+ return refused(sourceIndexProperty.issue);
234
+ }
235
+ const source = referenceSourceAt(earlier, sourceIndexProperty.value, referencingIndex);
236
+ if (source === undefined) {
237
+ return refused(invalidSourceIndexIssue(operationPath));
238
+ }
239
+ if (source.kind === "sql") {
240
+ return refused(sqlSourceIssue([...refPath, "path"]));
241
+ }
242
+ const fingerprintPath = [...refPath, "fingerprint"];
243
+ const fingerprintProperty = inspectOwnDataProperty(referenceInspection.value, "fingerprint", fingerprintPath, "V1000", refPath);
244
+ if (!fingerprintProperty.ok) {
245
+ return refused(fingerprintProperty.issue);
246
+ }
247
+ const fingerprint = fingerprintProperty.value;
248
+ if (!isOperationFingerprint(fingerprint) ||
249
+ fingerprint !== source.fingerprint) {
250
+ return refused(validationIssue("V1017", fingerprintPath, "Transaction reference fingerprint does not match its source operation."));
251
+ }
252
+ const pathPath = [...refPath, "path"];
253
+ const pathProperty = inspectOwnDataProperty(referenceInspection.value, "path", pathPath, "V1010", refPath);
254
+ if (!pathProperty.ok) {
255
+ return refused(pathProperty.issue);
256
+ }
257
+ const pathInspection = inspectPathTuple(pathProperty.value, pathPath);
258
+ if (!pathInspection.ok) {
259
+ return refused(pathInspection.issue);
260
+ }
261
+ const { segment } = pathInspection;
262
+ if (containsUnpairedSurrogate(segment)) {
263
+ return refused(validationIssue("V1010", pathPath, "Transaction reference path contains invalid Unicode."));
264
+ }
265
+ const sourceRead = referenceSourceField(source, segment, pathPath);
266
+ if (!sourceRead.ok) {
267
+ return refused(sourceRead.issue);
268
+ }
269
+ return {
270
+ ok: true,
271
+ source,
272
+ segment,
273
+ fingerprint,
274
+ field: sourceRead.field,
275
+ pathPath,
276
+ };
277
+ }
278
+ export function validateReferenceSlots(candidates, earlier, index) {
170
279
  const references = [];
171
- for (const slot of operation.candidates) {
172
- const candidateInspection = inspectControlObject(slot.candidate, CANDIDATE_KEYS, slot.path, validationIssue("V1001", slot.path, "Reference control value must be an object."));
173
- if (!candidateInspection.ok) {
174
- return failure(candidateInspection.issue, operation.index);
175
- }
176
- const refPath = [...slot.path, "$ref"];
177
- const refProperty = inspectOwnDataProperty(candidateInspection.value, "$ref", refPath, "V1001", slot.path);
178
- if (!refProperty.ok) {
179
- return failure(refProperty.issue, operation.index);
180
- }
181
- const operationPath = [...refPath, "operation"];
182
- const referenceInspection = inspectControlObject(refProperty.value, REFERENCE_KEYS, refPath, validationIssue("V1016", operationPath, "Transaction reference operation index is invalid."));
183
- if (!referenceInspection.ok) {
184
- return failure(referenceInspection.issue, operation.index);
185
- }
186
- const sourceIndexProperty = inspectOwnDataProperty(referenceInspection.value, "operation", operationPath, "V1016", refPath);
187
- if (!sourceIndexProperty.ok) {
188
- return failure(sourceIndexProperty.issue, operation.index);
189
- }
190
- const sourceIndex = sourceIndexProperty.value;
191
- const source = typeof sourceIndex === "number" && Number.isInteger(sourceIndex)
192
- ? earlier[sourceIndex]
193
- : undefined;
194
- if (typeof sourceIndex !== "number" ||
195
- !Number.isInteger(sourceIndex) ||
196
- sourceIndex < 0 ||
197
- sourceIndex >= operation.index ||
198
- source === undefined ||
199
- source.index !== sourceIndex) {
200
- return failure(validationIssue("V1016", operationPath, "Transaction reference operation index is invalid."), operation.index);
201
- }
202
- const fingerprintPath = [...refPath, "fingerprint"];
203
- const fingerprintProperty = inspectOwnDataProperty(referenceInspection.value, "fingerprint", fingerprintPath, "V1017", refPath);
204
- if (!fingerprintProperty.ok) {
205
- return failure(fingerprintProperty.issue, operation.index);
206
- }
207
- const fingerprint = fingerprintProperty.value;
208
- if (!isOperationFingerprint(fingerprint) ||
209
- fingerprint !== source.fingerprint) {
210
- return failure(validationIssue("V1017", fingerprintPath, "Transaction reference fingerprint does not match its source operation."), operation.index);
211
- }
212
- const pathPath = [...refPath, "path"];
213
- const pathProperty = inspectOwnDataProperty(referenceInspection.value, "path", pathPath, "V1010", refPath);
214
- if (!pathProperty.ok) {
215
- return failure(pathProperty.issue, operation.index);
216
- }
217
- const pathInspection = inspectPathTuple(pathProperty.value, pathPath);
218
- if (!pathInspection.ok) {
219
- return failure(pathInspection.issue, operation.index);
220
- }
221
- const { segment } = pathInspection;
222
- if (containsUnpairedSurrogate(segment)) {
223
- return failure(validationIssue("V1010", pathPath, "Transaction reference path contains invalid Unicode."), operation.index);
224
- }
225
- if (source.request.variant === "many" ||
226
- source.request.variant === "count") {
227
- return failure(validationIssue("V1010", pathPath, "Transaction reference source has no addressable single-row projection."), operation.index);
228
- }
229
- const projection = source.projection;
230
- if (projection?.reducers.some((reducer) => reducer === segment)) {
231
- return failure(validationIssue("V1011", pathPath, "Transaction reference source is not a scalar field."), operation.index);
232
- }
233
- if (projection === undefined || !projection.requested.includes(segment)) {
234
- return failure(validationIssue("V1010", pathPath, "Transaction reference path is not present in the source projection."), operation.index);
235
- }
236
- const sourceField = lookupField(lookupResource(source.contract, projection.resource), segment);
237
- if (sourceField === undefined) {
238
- return failure(validationIssue("V1010", pathPath, "Transaction reference path is not present in the source projection."), operation.index);
280
+ for (const slot of candidates) {
281
+ const inspection = inspectReferenceCandidate(slot.candidate, slot.path, earlier, index);
282
+ if (!inspection.ok) {
283
+ return inspection;
239
284
  }
285
+ const { source, segment, fingerprint, pathPath } = inspection;
286
+ const sourceField = inspection.field;
240
287
  if (sourceField.kind !== "scalar" ||
241
288
  !isAssignable(sourceField, slot.field, slot.shape)) {
242
- return failure(validationIssue("V1011", pathPath, "Transaction reference source type is not assignable to its destination."), operation.index);
289
+ return {
290
+ ok: false,
291
+ issue: validationIssue("V1011", pathPath, "Transaction reference source type is not assignable to its destination."),
292
+ };
243
293
  }
244
294
  const reference = Object.freeze({
245
295
  $ref: Object.freeze({
246
- operation: sourceIndex,
296
+ operation: source.index,
247
297
  fingerprint,
248
298
  path: Object.freeze([segment]),
249
299
  }),
@@ -257,6 +307,14 @@ export function validateTransactionReferences(operation, earlier) {
257
307
  reference,
258
308
  });
259
309
  }
310
+ return { ok: true, references };
311
+ }
312
+ export function validateTransactionReferences(operation, earlier) {
313
+ const validation = validateReferenceSlots(operation.candidates, earlier, operation.index);
314
+ if (!validation.ok) {
315
+ return failure(validation.issue, operation.index);
316
+ }
317
+ const { references } = validation;
260
318
  const controls = references.map((slot) => ({
261
319
  path: slot.path,
262
320
  value: slot.reference,
@@ -1,8 +1,8 @@
1
- import type { WriteScope } from "../contracts/capability.js";
2
- import type { Contract } from "../contracts/contract.js";
1
+ import type { AvWriteScope } from "../contracts/capability.js";
2
+ import type { AvContract } from "../contracts/contract.js";
3
3
  import type { ScalarForms } from "../contracts/scalar-value-type.js";
4
- import type { CreateDataInput, OperationArgumentsFor, ResourceKey, UpdateDataInput } from "../operations/operation-arguments.js";
5
- import type { OperationIdentity } from "../operations/operation-identity.js";
4
+ import type { AvCreateDataInput, AvOperationArgumentsFor, AvResourceKey, AvUpdateDataInput } from "../operations/operation-arguments.js";
5
+ import type { AvOperationIdentity } from "../operations/operation-identity.js";
6
6
  import type { OperationFingerprint } from "./deferred-operation.js";
7
7
  declare const REFERENCE_VALUE: unique symbol;
8
8
  /** Any object with a `$ref` key, before it is validated as a reference. */
@@ -13,7 +13,7 @@ export type TransactionReferenceCandidate = {
13
13
  * A reference to a field of an earlier operation's result in the same
14
14
  * transaction plan: `{ $ref: { operation, fingerprint, path } }`.
15
15
  */
16
- export type TransactionReference<Value = unknown> = {
16
+ export type AvTransactionReference<Value = unknown> = {
17
17
  readonly $ref: {
18
18
  readonly operation: number;
19
19
  readonly fingerprint: OperationFingerprint;
@@ -22,7 +22,7 @@ export type TransactionReference<Value = unknown> = {
22
22
  readonly [REFERENCE_VALUE]?: Value;
23
23
  };
24
24
  /** Whether a value is an ordinary value or a `$ref` candidate. */
25
- export type TransactionReferenceCandidateRoute = {
25
+ type TransactionReferenceCandidateRoute = {
26
26
  readonly kind: "ordinary";
27
27
  } | {
28
28
  readonly kind: "candidate";
@@ -38,12 +38,12 @@ export declare function routeTransactionReferenceCandidate(value: unknown): Tran
38
38
  /** Whether `value` is an object with a `$ref` key; it is not validated here. */
39
39
  export declare function isTransactionReferenceCandidate(value: unknown): value is TransactionReferenceCandidate;
40
40
  /** Whether `value` is a complete `$ref` object. */
41
- export declare function isTransactionReferenceObject(value: unknown): value is TransactionReference;
41
+ export declare function isTransactionReferenceObject(value: unknown): value is AvTransactionReference;
42
42
  /**
43
43
  * A scalar mutation value inside a plan: the value itself, or a reference to an
44
44
  * earlier operation's field of that same type.
45
45
  */
46
- export type TransactionScalarValue<Value> = Value | TransactionReference<Value>;
46
+ export type TransactionScalarValue<Value> = Value | AvTransactionReference<Value>;
47
47
  /**
48
48
  * What a Transaction Slot holds of its destination field, which decides the source
49
49
  * fields a reference there accepts — always the same scalar or enum, no coercion:
@@ -62,16 +62,16 @@ export type TransactionSlotShape = "value" | "nonNullValue" | "entry" | "entries
62
62
  /**
63
63
  * Create data inside a transaction plan, at one write position: its scalar values
64
64
  * and the unique keys its relation directives name may hold a `$ref`. The default
65
- * is the unrestricted position, as on `CreateDataInput`.
65
+ * is the unrestricted position, as on `AvCreateDataInput`.
66
66
  */
67
- export type TransactionCreateDataInput<C extends Contract, K extends ResourceKey<C>, Scope extends WriteScope = "nested"> = CreateDataInput<C, K, Scope, ScalarForms, ScalarForms>;
67
+ export type TransactionCreateDataInput<C extends AvContract, K extends AvResourceKey<C>, Scope extends AvWriteScope = "nested"> = AvCreateDataInput<C, K, Scope, ScalarForms, ScalarForms>;
68
68
  /** Update data inside a transaction plan. See {@link TransactionCreateDataInput}. */
69
- export type TransactionUpdateDataInput<C extends Contract, K extends ResourceKey<C>, Scope extends WriteScope = "nested"> = UpdateDataInput<C, K, Scope, ScalarForms, ScalarForms>;
69
+ export type TransactionUpdateDataInput<C extends AvContract, K extends AvResourceKey<C>, Scope extends AvWriteScope = "nested"> = AvUpdateDataInput<C, K, Scope, ScalarForms, ScalarForms>;
70
70
  /**
71
71
  * Operation arguments inside a transaction plan, under one value form and one
72
- * reference form: `OperationArgumentsFor` with its reference positions opened.
72
+ * reference form: `AvOperationArgumentsFor` with its reference positions opened.
73
73
  */
74
- export type ReferenceableArgumentsFor<C extends Contract, K extends ResourceKey<C>, I extends OperationIdentity, Forms extends ScalarForms, ReferenceForms extends ScalarForms> = OperationArgumentsFor<C, K, I, Forms, ReferenceForms>;
74
+ export type ReferenceableArgumentsFor<C extends AvContract, K extends AvResourceKey<C>, I extends AvOperationIdentity, Forms extends ScalarForms, ReferenceForms extends ScalarForms> = AvOperationArgumentsFor<C, K, I, Forms, ReferenceForms>;
75
75
  /** Operation arguments inside a transaction plan, no scalar form stated. */
76
- export type TransactionOperationArgumentsFor<C extends Contract, K extends ResourceKey<C>, I extends OperationIdentity> = ReferenceableArgumentsFor<C, K, I, ScalarForms, ScalarForms>;
76
+ export type TransactionOperationArgumentsFor<C extends AvContract, K extends AvResourceKey<C>, I extends AvOperationIdentity> = ReferenceableArgumentsFor<C, K, I, ScalarForms, ScalarForms>;
77
77
  export {};
@@ -14,6 +14,11 @@ export function routeTransactionReferenceCandidate(value) {
14
14
  if (!ownKeys.includes("$ref") || referenceDescriptor === undefined) {
15
15
  return ORDINARY_ROUTE;
16
16
  }
17
+ if ("value" in referenceDescriptor &&
18
+ (referenceDescriptor.value === null ||
19
+ typeof referenceDescriptor.value !== "object")) {
20
+ return ORDINARY_ROUTE;
21
+ }
17
22
  return {
18
23
  kind: "candidate",
19
24
  candidate: value,
@@ -1,26 +1,39 @@
1
- import type { ClientProtocolIdentity } from "../runtime/operation-request.js";
2
- import type { PipelineTransportContext } from "../runtime/pipeline.js";
1
+ import type { AvRequestProtocol } from "../runtime/operation-request.js";
2
+ import type { AvTransportContext } from "../runtime/pipeline.js";
3
+ import type { AvState } from "../runtime/request-state.js";
3
4
  type TransactionRequestBase = {
4
5
  readonly requestId: string;
5
6
  readonly plan: unknown;
7
+ /**
8
+ * The run's `ctx.$state`: every step's stages and the transaction stages share
9
+ * this one object. Omitted, it is a fresh `{}`.
10
+ */
11
+ readonly state?: AvState;
6
12
  };
7
13
  /** An in-process transaction request, run under the Application Contract. */
8
- export type ApplicationTransactionRequest = TransactionRequestBase & {
14
+ export type AvApplicationTransactionRequest = TransactionRequestBase & {
9
15
  readonly origin: "application";
10
16
  readonly protocol?: never;
11
17
  readonly transport?: never;
12
18
  };
13
19
  /** A remote transaction request, run under the Client Contract. */
14
- export type ClientTransactionRequest = TransactionRequestBase & {
20
+ export type AvClientTransactionRequest = TransactionRequestBase & {
15
21
  readonly origin: "client";
16
- readonly protocol: ClientProtocolIdentity;
17
- readonly transport?: PipelineTransportContext;
22
+ readonly protocol: AvRequestProtocol;
23
+ readonly transport?: AvTransportContext;
24
+ };
25
+ /** An AI agent's transaction request, run under the Agent Contract. */
26
+ export type AvAgentTransactionRequest = TransactionRequestBase & {
27
+ readonly origin: "agent";
28
+ readonly protocol: AvRequestProtocol;
29
+ readonly transport?: AvTransportContext;
18
30
  };
19
31
  /** One transaction request, as `framework.executeTransaction` takes it. */
20
- export type FrameworkTransactionRequest = ApplicationTransactionRequest | ClientTransactionRequest;
32
+ export type AvTransactionRequest = AvApplicationTransactionRequest | AvClientTransactionRequest | AvAgentTransactionRequest;
21
33
  /**
22
34
  * The origin one plan operation runs under: its own layer's Contract, its own
23
- * pipelines, and — for a client step — the protocol identity it is accepted with.
35
+ * pipelines, and — for a client or agent step — the protocol identity it is
36
+ * accepted with.
24
37
  */
25
- export type TransactionOperationOrigin = Pick<ApplicationTransactionRequest, "origin"> | Pick<ClientTransactionRequest, "origin" | "protocol" | "transport">;
38
+ export type TransactionOperationOrigin = Pick<AvApplicationTransactionRequest, "origin"> | Pick<AvClientTransactionRequest, "origin" | "protocol" | "transport"> | Pick<AvAgentTransactionRequest, "origin" | "protocol" | "transport">;
26
39
  export {};
@@ -1,20 +1,20 @@
1
- import type { OperationFailureResponse } from "../runtime/operation-response.js";
1
+ import type { AvOperationFailureResponse } from "../runtime/operation-response.js";
2
2
  /** A committed plan: each operation's final `data`, in plan order. */
3
- export type TransactionCommittedResponse<T = readonly unknown[]> = {
3
+ export type AvTransactionCommittedResponse<T = readonly unknown[]> = {
4
4
  readonly data: T;
5
5
  readonly code: "A1009";
6
6
  readonly cause: null;
7
7
  };
8
8
  /** What a transaction answers: committed (`A1009`) or a failure. */
9
- export type TransactionResponse = TransactionCommittedResponse | OperationFailureResponse;
9
+ export type AvTransactionResponse = AvTransactionCommittedResponse | AvOperationFailureResponse;
10
10
  /** Builds the committed response. */
11
- export declare function transactionCommitted(results: readonly unknown[]): TransactionCommittedResponse;
11
+ export declare function transactionCommitted(results: readonly unknown[]): AvTransactionCommittedResponse;
12
12
  /**
13
13
  * Builds the failure response of a plan step: the step named in
14
14
  * `cause.operation`, and each issue at its full plan location —
15
15
  * `["operations", operation, "args", …]` for the step's arguments,
16
16
  * `["operations", operation, …]` for the step itself.
17
17
  */
18
- export declare function transactionOperationFailure(failure: OperationFailureResponse, operation: number): OperationFailureResponse;
18
+ export declare function transactionOperationFailure(failure: AvOperationFailureResponse, operation: number): AvOperationFailureResponse;
19
19
  /** Builds the `A3002` response for a transaction that itself failed. */
20
- export declare function transactionInfrastructureFailure(operation?: number): OperationFailureResponse;
20
+ export declare function transactionInfrastructureFailure(operation?: number): AvOperationFailureResponse;
@@ -1,9 +1,10 @@
1
- import type { AdapterModel } from "../adapters/adapter-model.js";
1
+ import type { AvAdapterModel } from "../adapters/adapter-model.js";
2
+ import { type PolicyCaller } from "../policy/policy-request.js";
2
3
  import type { TransactionDiagnosticsChannel } from "../runtime/diagnostics-reporter.js";
3
- import type { OperationRuntimeDependencies } from "../runtime/operation-runtime.js";
4
+ import type { OperationPipelineDependencies, OperationRuntimeDependencies } from "../runtime/operation-runtime.js";
4
5
  import type { PlanArguments } from "./transaction-plan-validator.js";
5
- import type { FrameworkTransactionRequest, TransactionOperationOrigin } from "./transaction-request.js";
6
- import type { TransactionResponse } from "./transaction-response.js";
6
+ import type { AvTransactionRequest, TransactionOperationOrigin } from "./transaction-request.js";
7
+ import type { AvTransactionResponse } from "./transaction-response.js";
7
8
  /**
8
9
  * The transaction executor core. Like the operation executor it owns no
9
10
  * diagnostics channel: the framework factory binds one to the request and
@@ -13,10 +14,13 @@ import type { TransactionResponse } from "./transaction-response.js";
13
14
  * runner's mixed plans), and `planArguments` whether the steps' arguments are
14
15
  * copied at the door; see `validateTransactionPlan`.
15
16
  */
16
- export type FrameworkTransactionExecutor = (request: FrameworkTransactionRequest, diagnostics: TransactionDiagnosticsChannel, origins: readonly TransactionOperationOrigin[] | undefined, planArguments: PlanArguments) => Promise<TransactionResponse>;
17
+ export type FrameworkTransactionExecutor = (request: AvTransactionRequest, diagnostics: TransactionDiagnosticsChannel, origins: readonly TransactionOperationOrigin[] | undefined, planArguments: PlanArguments,
18
+ /** The principal an application run's steps run as (`{ as }`), when it names one. */
19
+ caller?: PolicyCaller) => Promise<AvTransactionResponse>;
17
20
  /**
18
21
  * Validates a whole plan through the Framework Validation Layer, then runs it inside
19
- * exactly one Adapter transaction. Guards, pipes, hooks and interceptors of every plan
20
- * operation run while the provider transaction is open.
22
+ * exactly one Adapter transaction. The touched Resources' transaction stages and
23
+ * every plan operation's guards, pipes, hooks and interceptors run while the
24
+ * provider transaction is open.
21
25
  */
22
- export declare function createTransactionRuntime<M extends AdapterModel>(dependencies: OperationRuntimeDependencies<M>): FrameworkTransactionExecutor;
26
+ export declare function createTransactionRuntime<M extends AvAdapterModel>(dependencies: OperationRuntimeDependencies<M>, pipelineDependencies: OperationPipelineDependencies<M>): FrameworkTransactionExecutor;