xytara 3.1.0 → 3.1.2

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 (373) hide show
  1. package/.env.example +67 -58
  2. package/ADAPTER_START_HERE.md +56 -56
  3. package/CARRIED_HANDOFF_DEMO.md +60 -60
  4. package/EXAMPLE_PATHS.md +53 -53
  5. package/FINAL_CONTRACT.md +498 -498
  6. package/LICENSE +201 -201
  7. package/NOTICE +3 -3
  8. package/PARTNER_READY_PATH.md +71 -71
  9. package/PUBLIC_DEMO_SCRIPT.md +78 -78
  10. package/README.md +6 -1
  11. package/REAL_PAYMENT_SETUP.md +32 -3
  12. package/RELEASE_NOTES.md +14 -14
  13. package/SERVICE_CONTRACT.md +419 -419
  14. package/START_HERE.md +1 -1
  15. package/SUPABASE_RUNTIME_STATE_SETUP.md +61 -61
  16. package/TERMINOLOGY.md +50 -50
  17. package/WHY_XYTARA_XOONYA.md +63 -63
  18. package/XT1_EXECUTION_TRUTH_STANDARD.md +78 -78
  19. package/XYTARA_ADAPTER_PROTOCOL_TRUTH_MODEL.md +75 -75
  20. package/XYTARA_AUTONOMOUS_ENTRY_MODEL.md +124 -124
  21. package/XYTARA_DEFAULT_PATH_MODEL.md +84 -84
  22. package/XYTARA_EXECUTION_TRUTH_MODEL.md +171 -171
  23. package/XYTARA_PAYMENT_RAIL_TRUTH_MODEL.md +68 -68
  24. package/adapters/AUTHORING_GUIDE.md +243 -243
  25. package/adapters/ONBOARDING_POSTURE.md +61 -61
  26. package/adapters/THIRD_PARTY_SUBMISSION_PROCESS.md +84 -84
  27. package/adapters/adapter-manifest.schema.json +283 -283
  28. package/adapters/examples/example-execution-adapter.js +61 -61
  29. package/adapters/examples/example-execution-adapter.manifest.json +81 -81
  30. package/adapters/examples/example-settlement-adapter.js +55 -55
  31. package/adapters/examples/example-settlement-adapter.manifest.json +78 -78
  32. package/adapters/examples/example-third-party-acp-registration.submission-bundle.json +124 -124
  33. package/adapters/examples/example-third-party-erc8004-registration.submission-bundle.json +121 -121
  34. package/adapters/examples/example-third-party-identity-registration.certification-pack.json +22 -22
  35. package/adapters/examples/example-third-party-identity-registration.record.json +26 -26
  36. package/adapters/examples/example-third-party-identity-registration.submission-bundle.json +126 -126
  37. package/adapters/examples/example-third-party-langchain-registration.submission-bundle.json +124 -124
  38. package/adapters/examples/example-third-party-mpp-registration.submission-bundle.json +120 -120
  39. package/adapters/examples/example-third-party-registration.certification-pack.json +22 -22
  40. package/adapters/examples/example-third-party-registration.record.json +28 -28
  41. package/adapters/examples/example-third-party-registration.submission-bundle.json +126 -126
  42. package/adapters/examples/example-third-party-settlement-registration.certification-pack.json +22 -22
  43. package/adapters/examples/example-third-party-settlement-registration.record.json +26 -26
  44. package/adapters/examples/example-third-party-settlement-registration.submission-bundle.json +127 -127
  45. package/adapters/examples/langchain-reference-execution-adapter.js +81 -81
  46. package/adapters/examples/langchain-reference-execution-adapter.manifest.json +79 -79
  47. package/adapters/examples/langgraph-reference-execution-adapter.js +81 -81
  48. package/adapters/examples/langgraph-reference-execution-adapter.manifest.json +79 -79
  49. package/adapters/examples/minimal-third-party-execution-adapter.js +61 -61
  50. package/adapters/examples/minimal-third-party-execution-adapter.manifest.json +79 -79
  51. package/adapters/examples/minimal-third-party-execution-registration.record.json +26 -26
  52. package/adapters/examples/minimal-third-party-execution.certification-pack.json +22 -22
  53. package/adapters/examples/minimal-third-party-execution.submission-bundle.json +126 -126
  54. package/adapters/integration-certification-pack.schema.json +82 -82
  55. package/adapters/integration-registration-record.schema.json +114 -114
  56. package/adapters/integration-submission-bundle-set.schema.json +39 -39
  57. package/adapters/integration-submission-bundle.schema.json +34 -34
  58. package/adapters/interfaces.js +56 -56
  59. package/bin/xytara-first-run.js +244 -244
  60. package/bin/xytara-release.js +1429 -1429
  61. package/bin/xytara-run.js +186 -186
  62. package/bin/xytara.js +80 -80
  63. package/client.js +3 -3
  64. package/examples/_demo_env.js +40 -0
  65. package/examples/adapter_review_walkthrough.js +54 -53
  66. package/examples/export_carried_handoff.js +81 -80
  67. package/examples/funded_runtime_walkthrough.js +71 -70
  68. package/examples/generated.carried-handoff.json +30 -0
  69. package/examples/partner_launch_walkthrough.js +44 -43
  70. package/examples/quickstart.js +3256 -3255
  71. package/fixtures/catalog.js +1134 -1134
  72. package/index.js +395 -395
  73. package/integrations/dispatch.js +276 -276
  74. package/integrations/registry-snapshot.schema.json +36 -36
  75. package/integrations/registry.js +2261 -2261
  76. package/integrations/views.js +28 -28
  77. package/lib/a2a_lane_contract.js +104 -104
  78. package/lib/a2c_lane_contract.js +111 -111
  79. package/lib/account_auth.js +518 -518
  80. package/lib/acp_lane_contract.js +54 -54
  81. package/lib/activity_audit_contract.js +322 -322
  82. package/lib/adapter_certification_contract.js +130 -130
  83. package/lib/adapter_depth_contract.js +156 -156
  84. package/lib/adapter_pack.js +118 -118
  85. package/lib/adapter_partner_pack.js +89 -89
  86. package/lib/adapter_promotion_pack.js +89 -89
  87. package/lib/adapter_protocol_truth_contract.js +229 -229
  88. package/lib/announcement_pack.js +61 -61
  89. package/lib/artifact_distribution_lane_contract.js +54 -54
  90. package/lib/asyncapi_contract.js +150 -150
  91. package/lib/auth_interop_contract.js +80 -80
  92. package/lib/authority_binding_lifecycle_contract.js +182 -182
  93. package/lib/autonomous_entry_contract.js +409 -409
  94. package/lib/bolt_lane_contract.js +55 -55
  95. package/lib/bolt_payment_front.js +172 -172
  96. package/lib/business_cockpit.js +378 -378
  97. package/lib/capability_execution_truth.js +272 -272
  98. package/lib/capability_registry.js +633 -633
  99. package/lib/catalog_contract.js +966 -966
  100. package/lib/catalog_family_model.js +193 -193
  101. package/lib/catalog_views.js +55 -55
  102. package/lib/checkout_event_security.js +142 -142
  103. package/lib/cloudevents_contract.js +80 -80
  104. package/lib/command_flow.js +411 -406
  105. package/lib/commerce_artifacts.js +503 -503
  106. package/lib/commerce_authority.js +449 -449
  107. package/lib/commerce_cases.js +317 -317
  108. package/lib/commerce_checkout.js +509 -509
  109. package/lib/commerce_client.js +7687 -7676
  110. package/lib/commerce_coordination.js +346 -346
  111. package/lib/commerce_economics.js +4017 -4016
  112. package/lib/commerce_identity.js +578 -578
  113. package/lib/commerce_quotes.js +237 -237
  114. package/lib/commerce_reports.js +14461 -14461
  115. package/lib/commerce_runtime.js +315 -315
  116. package/lib/commerce_shell.js +257 -257
  117. package/lib/crypto_agility_matrix.js +125 -125
  118. package/lib/default_path_contract.js +412 -412
  119. package/lib/delivery_summary_contract.js +95 -95
  120. package/lib/ecosystem_entry.js +64 -64
  121. package/lib/erc8004_lane_contract.js +65 -65
  122. package/lib/event_system_lane_contract.js +75 -75
  123. package/lib/execution_truth_contract.js +234 -234
  124. package/lib/external_credit_bridge.js +142 -142
  125. package/lib/external_execution_runtime.js +132 -132
  126. package/lib/feature_control_lane_contract.js +54 -54
  127. package/lib/first_run_conversion_contract.js +290 -290
  128. package/lib/framework_lane_contract.js +89 -89
  129. package/lib/framework_provider_promotion.js +235 -235
  130. package/lib/full_catalog_contract.js +525 -525
  131. package/lib/go_live_operator_pack.js +391 -391
  132. package/lib/http_transport.js +73 -73
  133. package/lib/identity_auth.js +175 -175
  134. package/lib/identity_interop_contract.js +82 -82
  135. package/lib/integration_matrix_contract.js +102 -102
  136. package/lib/l402_lane_contract.js +55 -55
  137. package/lib/l402_payment_front.js +192 -192
  138. package/lib/launch_narrative.js +53 -53
  139. package/lib/lifecycle_continuity_contract.js +115 -115
  140. package/lib/machine_identity_registry_contract.js +199 -199
  141. package/lib/major_rails_lane_contract.js +150 -150
  142. package/lib/market_lane_contract.js +467 -467
  143. package/lib/market_lane_depth_contract.js +182 -182
  144. package/lib/market_lane_promotion_contract.js +210 -210
  145. package/lib/market_lane_trace_contract.js +278 -278
  146. package/lib/mcp_lane_contract.js +137 -137
  147. package/lib/network_transport.js +110 -110
  148. package/lib/offline_verifiability_recovery_contract.js +155 -155
  149. package/lib/openapi_contract.js +296 -296
  150. package/lib/operational_receipt_contract.js +165 -165
  151. package/lib/operator_intelligence.js +407 -407
  152. package/lib/outreach_copy_pack.js +51 -51
  153. package/lib/outreach_message_pack.js +71 -71
  154. package/lib/outreach_proof.js +71 -71
  155. package/lib/outreach_target_pack.js +60 -60
  156. package/lib/partner_intelligence.js +105 -105
  157. package/lib/payment_config.js +239 -191
  158. package/lib/payment_front_registry.js +53 -53
  159. package/lib/payment_protocol_contract.js +165 -165
  160. package/lib/payment_rail_truth_contract.js +324 -324
  161. package/lib/payment_verification.js +312 -264
  162. package/lib/phase_10_closeout_pack.js +45 -45
  163. package/lib/phase_10_completion_pack.js +76 -76
  164. package/lib/phase_10_decision_record_pack.js +54 -54
  165. package/lib/phase_10_decision_resolution_pack.js +53 -53
  166. package/lib/phase_10_demand_signal_adapters_runtime_pack.js +74 -74
  167. package/lib/phase_10_ecosystem_backlog_triage_runtime_pack.js +74 -74
  168. package/lib/phase_10_freeze_baseline_pack.js +67 -67
  169. package/lib/phase_10_freeze_review_pack.js +64 -64
  170. package/lib/phase_10_gate_pack.js +57 -57
  171. package/lib/phase_10_long_tail_continuity_pack.js +80 -80
  172. package/lib/phase_10_long_tail_ecosystem_pack.js +66 -66
  173. package/lib/phase_10_niche_extension_registry_runtime_pack.js +74 -74
  174. package/lib/phase_1_claude_mcp_pack.js +60 -60
  175. package/lib/phase_1_claude_mcp_runtime_pack.js +52 -52
  176. package/lib/phase_1_ecosystem_pack.js +67 -67
  177. package/lib/phase_1_openai_codex_pack.js +60 -60
  178. package/lib/phase_1_openai_codex_runtime_pack.js +52 -52
  179. package/lib/phase_2_base_runtime_pack.js +71 -71
  180. package/lib/phase_2_base_usdc_runtime_pack.js +72 -72
  181. package/lib/phase_2_closeout_pack.js +65 -65
  182. package/lib/phase_2_completion_pack.js +113 -113
  183. package/lib/phase_2_decision_record_pack.js +66 -66
  184. package/lib/phase_2_decision_resolution_pack.js +69 -69
  185. package/lib/phase_2_eth_runtime_pack.js +70 -70
  186. package/lib/phase_2_evm_base_runtime_pack.js +73 -73
  187. package/lib/phase_2_evm_runtime_pack.js +71 -71
  188. package/lib/phase_2_flip_preview_pack.js +60 -60
  189. package/lib/phase_2_freeze_review_pack.js +99 -99
  190. package/lib/phase_2_gate_pack.js +77 -77
  191. package/lib/phase_2_payment_rails_pack.js +71 -71
  192. package/lib/phase_2_usdc_runtime_pack.js +71 -71
  193. package/lib/phase_3_brc_runtime_pack.js +81 -81
  194. package/lib/phase_3_bsv_teranode_runtime_pack.js +83 -83
  195. package/lib/phase_3_closeout_pack.js +62 -62
  196. package/lib/phase_3_completion_pack.js +94 -94
  197. package/lib/phase_3_decision_record_pack.js +64 -64
  198. package/lib/phase_3_decision_resolution_pack.js +69 -69
  199. package/lib/phase_3_freeze_baseline_pack.js +67 -67
  200. package/lib/phase_3_freeze_review_pack.js +80 -80
  201. package/lib/phase_3_gate_pack.js +76 -76
  202. package/lib/phase_3_metanet_runtime_pack.js +81 -81
  203. package/lib/phase_3_native_bsv_pack.js +91 -91
  204. package/lib/phase_3_native_continuity_pack.js +82 -82
  205. package/lib/phase_4_attestation_runtime_pack.js +75 -75
  206. package/lib/phase_4_closeout_pack.js +45 -45
  207. package/lib/phase_4_completion_pack.js +94 -94
  208. package/lib/phase_4_decision_record_pack.js +54 -54
  209. package/lib/phase_4_decision_resolution_pack.js +45 -45
  210. package/lib/phase_4_erc8004_runtime_pack.js +76 -76
  211. package/lib/phase_4_freeze_baseline_pack.js +67 -67
  212. package/lib/phase_4_freeze_review_pack.js +68 -68
  213. package/lib/phase_4_gate_pack.js +58 -58
  214. package/lib/phase_4_identity_registry_runtime_pack.js +75 -75
  215. package/lib/phase_4_identity_trust_pack.js +73 -73
  216. package/lib/phase_4_trust_continuity_pack.js +86 -86
  217. package/lib/phase_5_antelope_runtime_pack.js +76 -76
  218. package/lib/phase_5_closeout_pack.js +44 -44
  219. package/lib/phase_5_completion_pack.js +82 -82
  220. package/lib/phase_5_constellation_dag_runtime_pack.js +76 -76
  221. package/lib/phase_5_decision_record_pack.js +54 -54
  222. package/lib/phase_5_decision_resolution_pack.js +45 -45
  223. package/lib/phase_5_digibyte_dgb_runtime_pack.js +76 -76
  224. package/lib/phase_5_freeze_baseline_pack.js +67 -67
  225. package/lib/phase_5_freeze_review_pack.js +68 -68
  226. package/lib/phase_5_gate_pack.js +58 -58
  227. package/lib/phase_5_hedera_hbar_runtime_pack.js +76 -76
  228. package/lib/phase_5_kaspa_kas_runtime_pack.js +76 -76
  229. package/lib/phase_5_major_rails_continuity_pack.js +86 -86
  230. package/lib/phase_5_major_rails_pack.js +110 -110
  231. package/lib/phase_5_metal_runtime_pack.js +76 -76
  232. package/lib/phase_5_polkadot_dot_runtime_pack.js +76 -76
  233. package/lib/phase_5_proton_xpr_runtime_pack.js +76 -76
  234. package/lib/phase_5_solana_runtime_pack.js +76 -76
  235. package/lib/phase_6_autogen_runtime_pack.js +72 -72
  236. package/lib/phase_6_closeout_pack.js +46 -46
  237. package/lib/phase_6_completion_pack.js +77 -77
  238. package/lib/phase_6_decision_record_pack.js +54 -54
  239. package/lib/phase_6_decision_resolution_pack.js +53 -53
  240. package/lib/phase_6_framework_continuity_pack.js +81 -81
  241. package/lib/phase_6_framework_runtime_pack.js +68 -68
  242. package/lib/phase_6_freeze_baseline_pack.js +68 -68
  243. package/lib/phase_6_freeze_review_pack.js +65 -65
  244. package/lib/phase_6_gate_pack.js +59 -59
  245. package/lib/phase_6_langchain_runtime_pack.js +72 -72
  246. package/lib/phase_6_langgraph_runtime_pack.js +72 -72
  247. package/lib/phase_6_semantic_kernel_runtime_pack.js +72 -72
  248. package/lib/phase_7_closeout_pack.js +45 -45
  249. package/lib/phase_7_completion_pack.js +85 -85
  250. package/lib/phase_7_decision_record_pack.js +53 -53
  251. package/lib/phase_7_decision_resolution_pack.js +53 -53
  252. package/lib/phase_7_event_system_continuity_pack.js +89 -89
  253. package/lib/phase_7_event_system_pack.js +76 -76
  254. package/lib/phase_7_freeze_baseline_pack.js +74 -74
  255. package/lib/phase_7_freeze_review_pack.js +65 -65
  256. package/lib/phase_7_gate_pack.js +58 -58
  257. package/lib/phase_7_kafka_runtime_pack.js +74 -74
  258. package/lib/phase_7_mqtt_runtime_pack.js +74 -74
  259. package/lib/phase_7_nats_runtime_pack.js +74 -74
  260. package/lib/phase_7_webhook_event_bus_runtime_pack.js +74 -74
  261. package/lib/phase_8_closeout_pack.js +46 -46
  262. package/lib/phase_8_completion_pack.js +82 -82
  263. package/lib/phase_8_decision_record_pack.js +54 -54
  264. package/lib/phase_8_decision_resolution_pack.js +53 -53
  265. package/lib/phase_8_external_receipt_import_runtime_pack.js +74 -74
  266. package/lib/phase_8_external_result_import_runtime_pack.js +74 -74
  267. package/lib/phase_8_freeze_baseline_pack.js +71 -71
  268. package/lib/phase_8_freeze_review_pack.js +64 -64
  269. package/lib/phase_8_gate_pack.js +58 -58
  270. package/lib/phase_8_proof_bridge_continuity_pack.js +86 -86
  271. package/lib/phase_8_proof_bridges_pack.js +72 -72
  272. package/lib/phase_8_proof_bundle_normalization_runtime_pack.js +74 -74
  273. package/lib/phase_9_closeout_pack.js +46 -46
  274. package/lib/phase_9_completion_pack.js +82 -82
  275. package/lib/phase_9_custody_refs_runtime_pack.js +74 -74
  276. package/lib/phase_9_decision_record_pack.js +54 -54
  277. package/lib/phase_9_decision_resolution_pack.js +53 -53
  278. package/lib/phase_9_freeze_baseline_pack.js +71 -71
  279. package/lib/phase_9_freeze_review_pack.js +64 -64
  280. package/lib/phase_9_gate_pack.js +58 -58
  281. package/lib/phase_9_operator_accounting_bridges_runtime_pack.js +74 -74
  282. package/lib/phase_9_treasury_connectivity_pack.js +72 -72
  283. package/lib/phase_9_treasury_continuity_pack.js +86 -86
  284. package/lib/phase_9_treasury_destinations_runtime_pack.js +74 -74
  285. package/lib/phase_program_pack.js +120 -120
  286. package/lib/pricing_optimization_contract.js +775 -775
  287. package/lib/protocol_lane_contract.js +117 -117
  288. package/lib/provenance_lane_contract.js +54 -54
  289. package/lib/provider_lane_contract.js +240 -240
  290. package/lib/provider_runtime_journey_contract.js +183 -183
  291. package/lib/public_surface_policy_contract.js +111 -111
  292. package/lib/publish_plan.js +51 -51
  293. package/lib/record_queries.js +48 -48
  294. package/lib/release_candidate.js +50 -50
  295. package/lib/release_center.js +1093 -1093
  296. package/lib/release_history.js +205 -205
  297. package/lib/release_manifest.js +113 -113
  298. package/lib/release_pack.js +453 -453
  299. package/lib/request_rate_limit.js +144 -144
  300. package/lib/resource_views.js +31 -31
  301. package/lib/revenue_launch_path_contract.js +326 -326
  302. package/lib/route_matchers.js +34 -34
  303. package/lib/route_params.js +19 -19
  304. package/lib/runtime_bridge.js +124 -124
  305. package/lib/runtime_operations_worker.js +282 -282
  306. package/lib/runtime_state_store.js +354 -354
  307. package/lib/settlement_lane_contract.js +111 -111
  308. package/lib/shared_signals_lane_contract.js +54 -54
  309. package/lib/signed_audit_provenance_contract.js +83 -83
  310. package/lib/soft_launch_pack.js +78 -78
  311. package/lib/stablecoin_lane_contract.js +76 -76
  312. package/lib/stripe_mpp_lane_contract.js +96 -96
  313. package/lib/stripe_mpp_payment_front.js +158 -158
  314. package/lib/telemetry_lane_contract.js +54 -54
  315. package/lib/treasury_destinations_contract.js +764 -764
  316. package/lib/treasury_egress_policy_contract.js +91 -91
  317. package/lib/treasury_lane_contract.js +84 -84
  318. package/lib/trust_portability_boundary_contract.js +72 -72
  319. package/lib/x402_facilitator.js +155 -0
  320. package/lib/x402_lane_contract.js +118 -118
  321. package/package.json +106 -105
  322. package/scripts/registry_cli.js +275 -275
  323. package/scripts/verify_adapters.js +554 -554
  324. package/scripts/verify_all.js +4962 -4962
  325. package/scripts/verify_control_plane_contracts.js +34 -34
  326. package/scripts/verify_control_plane_routes.js +70 -70
  327. package/scripts/verify_delivery_summary.js +112 -112
  328. package/scripts/verify_examples.js +19 -19
  329. package/scripts/verify_first_run_conversions.js +81 -81
  330. package/scripts/verify_framework_provider_promotion.js +152 -152
  331. package/scripts/verify_full_catalog.js +174 -174
  332. package/scripts/verify_integrations.js +620 -620
  333. package/scripts/verify_lifecycle_continuity.js +96 -96
  334. package/scripts/verify_market_lane_depth.js +94 -94
  335. package/scripts/verify_market_lane_promotion.js +103 -103
  336. package/scripts/verify_market_lane_traces.js +98 -98
  337. package/scripts/verify_market_lanes.js +102 -102
  338. package/scripts/verify_operator_observability_boundary.js +83 -83
  339. package/scripts/verify_pricing_experiment_plan.js +124 -124
  340. package/scripts/verify_provider_runtime_breadth.js +109 -109
  341. package/scripts/verify_provider_runtime_journeys.js +111 -111
  342. package/scripts/verify_revenue_launch_paths.js +105 -105
  343. package/scripts/verify_runtime_durability.js +52 -52
  344. package/scripts/verify_service.js +15410 -15250
  345. package/scripts/verify_tooling.js +1412 -1412
  346. package/scripts/verify_treasury_public_boundary.js +97 -97
  347. package/scripts/verify_x402_facilitator.js +174 -0
  348. package/server.js +11117 -11006
  349. package/.env.production.checklist +0 -77
  350. package/.env.production.template +0 -54
  351. package/.github/workflows/publish-mcp-executor.yml +0 -43
  352. package/ADAPTER_PARTNER_PATH.md +0 -47
  353. package/ADAPTER_PROMOTION_START_HERE.md +0 -44
  354. package/BOLT_BINDINGS.production.worksheet.json +0 -31
  355. package/EXECUTION_TARGETS.production.worksheet.json +0 -73
  356. package/GO_LIVE_OPERATOR_PACK.md +0 -412
  357. package/L402_BINDINGS.production.worksheet.json +0 -30
  358. package/OPERATIONS_RUNBOOK.md +0 -115
  359. package/OPERATOR_START_HERE.md +0 -63
  360. package/OUTREACH_MESSAGES.md +0 -19
  361. package/OUTREACH_START_HERE.md +0 -36
  362. package/PRODUCTION_MANUAL_CLOSEOUT_SEQUENCE.md +0 -172
  363. package/PROGRAM_COMPLETE_RELEASE.md +0 -63
  364. package/PROGRAM_STATUS.md +0 -57
  365. package/PUBLISH_PLAN.md +0 -26
  366. package/RELEASE_CHECKLIST.md +0 -16
  367. package/SOFT_LAUNCH_KIT.md +0 -47
  368. package/services/mcp-execution-target/DISCOVERY_REGISTRY_PLAYBOOK.md +0 -141
  369. package/services/mcp-execution-target/README.md +0 -319
  370. package/services/mcp-execution-target/package.json +0 -14
  371. package/services/mcp-execution-target/server.js +0 -1031
  372. package/services/mcp-execution-target/server.json +0 -16
  373. package/services/mcp-execution-target/verify.js +0 -308
@@ -1,322 +1,322 @@
1
- "use strict";
2
-
3
- function toArrayFromMap(mapValue) {
4
- if (!(mapValue instanceof Map)) return [];
5
- return Array.from(mapValue.values());
6
- }
7
-
8
- function normalizeTimestamp(value) {
9
- if (typeof value !== "string" || !value.trim()) return null;
10
- const parsed = Date.parse(value);
11
- return Number.isFinite(parsed) ? new Date(parsed).toISOString() : null;
12
- }
13
-
14
- function firstTimestamp(record, fieldNames) {
15
- for (const fieldName of fieldNames) {
16
- const timestamp = normalizeTimestamp(record && record[fieldName]);
17
- if (timestamp) return timestamp;
18
- }
19
- return null;
20
- }
21
-
22
- function sortByTimestampDescending(items) {
23
- return [...items].sort((left, right) => {
24
- const leftTime = left && left.at_iso ? Date.parse(left.at_iso) : 0;
25
- const rightTime = right && right.at_iso ? Date.parse(right.at_iso) : 0;
26
- return rightTime - leftTime;
27
- });
28
- }
29
-
30
- function buildQuoteActivities(state, accountId) {
31
- return toArrayFromMap(state.quotes)
32
- .filter((quote) => !accountId || quote.account_id === accountId)
33
- .map((quote) => ({
34
- activity_id: `quote.${quote.quote_id}`,
35
- activity_kind: "quote",
36
- activity_family: "commercial_admission",
37
- at_iso: firstTimestamp(quote, ["executed_at_iso", "payment_recorded_at_iso", "created_at_iso"]),
38
- account_id: quote.account_id || null,
39
- actor_ref: quote.account_id || null,
40
- action: quote.status === "executed" ? "quoted_and_executed" : "quoted",
41
- status: quote.status || null,
42
- amount_minor: quote.amount_minor || null,
43
- currency: quote.currency || null,
44
- settlement_mode: quote.settlement_mode || null,
45
- payment_protocol: quote.payment_protocol || null,
46
- route_ref: "/v1/payment-quotes",
47
- linked_refs: {
48
- quote_ref: quote.quote_id ? `/v1/quotes/${encodeURIComponent(quote.quote_id)}` : null
49
- }
50
- }));
51
- }
52
-
53
- function buildTransactionActivities(state, accountId) {
54
- return toArrayFromMap(state.transactions)
55
- .map((entry) => entry && entry.transaction ? entry.transaction : null)
56
- .filter(Boolean)
57
- .filter((transaction) => !accountId || transaction.account_id === accountId)
58
- .map((transaction) => ({
59
- activity_id: `transaction.${transaction.transaction_id}`,
60
- activity_kind: "transaction",
61
- activity_family: "runtime_execution",
62
- at_iso: firstTimestamp(transaction, ["completed_at_iso", "created_at_iso"]),
63
- account_id: transaction.account_id || null,
64
- actor_ref: transaction.account_id || null,
65
- action: "executed_runtime_work",
66
- status: transaction.status || null,
67
- amount_minor: transaction.payment && transaction.payment.amount_minor ? transaction.payment.amount_minor : null,
68
- currency: transaction.payment && transaction.payment.currency ? transaction.payment.currency : null,
69
- settlement_mode: transaction.settlement && transaction.settlement.mode ? transaction.settlement.mode : null,
70
- payment_protocol: transaction.payment && transaction.payment.protocol ? transaction.payment.protocol : null,
71
- delivery_target_kind: transaction.callback_url ? "callback" : "direct",
72
- route_ref: "/v1/commands/execute",
73
- linked_refs: {
74
- transaction_ref: transaction.transaction_id ? `/v1/transactions/${encodeURIComponent(transaction.transaction_id)}` : null,
75
- proof_ref: transaction.proof_ref || null
76
- }
77
- }));
78
- }
79
-
80
- function buildReceiptActivities(state, accountId) {
81
- return toArrayFromMap(state.receipts)
82
- .map((entry) => entry && entry.receipt ? entry.receipt : null)
83
- .filter(Boolean)
84
- .filter((receipt) => !accountId || receipt.account_id === accountId)
85
- .map((receipt) => ({
86
- activity_id: `receipt.${receipt.receipt_id}`,
87
- activity_kind: "receipt",
88
- activity_family: "delivery_proof",
89
- at_iso: firstTimestamp(receipt, ["created_at_iso", "completed_at_iso"]),
90
- account_id: receipt.account_id || null,
91
- actor_ref: receipt.account_id || null,
92
- action: "receipt_issued",
93
- status: receipt.status || null,
94
- proof_ref: receipt.proof_ref || null,
95
- route_ref: receipt.receipt_id ? `/v1/receipts/${encodeURIComponent(receipt.receipt_id)}` : "/v1/receipts",
96
- linked_refs: {
97
- receipt_ref: receipt.receipt_id ? `/v1/receipts/${encodeURIComponent(receipt.receipt_id)}` : null
98
- }
99
- }));
100
- }
101
-
102
- function buildPaymentActivities(state, accountId) {
103
- const ledger = Array.isArray(state.paymentLedger) ? state.paymentLedger : [];
104
- return ledger
105
- .filter((payment) => !accountId || payment.account_id === accountId)
106
- .map((payment) => ({
107
- activity_id: `payment.${payment.payment_id}`,
108
- activity_kind: "payment",
109
- activity_family: "funds_in",
110
- at_iso: firstTimestamp(payment, ["recorded_at_iso"]),
111
- account_id: payment.account_id || null,
112
- actor_ref: payment.account_id || null,
113
- action: "payment_recorded",
114
- status: payment.payment && payment.payment.status ? payment.payment.status : null,
115
- amount_minor: payment.amount_minor || null,
116
- currency: payment.currency || null,
117
- settlement_mode: payment.settlement && payment.settlement.mode ? payment.settlement.mode : null,
118
- settlement_adapter: payment.settlement_adapter || null,
119
- settlement_integration_id: payment.settlement_integration_id || null,
120
- payment_protocol: payment.payment && payment.payment.protocol ? payment.payment.protocol : null,
121
- treasury_destination_id: payment.treasury && payment.treasury.destination_id ? payment.treasury.destination_id : null,
122
- treasury_external_ref: payment.treasury && payment.treasury.custody_external_ref ? payment.treasury.custody_external_ref : null,
123
- route_ref: payment.payment_id ? `/v1/payment-ledger/${encodeURIComponent(payment.payment_id)}` : "/v1/payment-ledger",
124
- linked_refs: {
125
- payment_ref: payment.payment_id ? `/v1/payment-ledger/${encodeURIComponent(payment.payment_id)}` : null,
126
- operator_pack_ref: payment.payment_id ? `/v1/payment-ledger/${encodeURIComponent(payment.payment_id)}/operator-pack` : null
127
- }
128
- }));
129
- }
130
-
131
- function buildDeliveryActivities(state, accountId) {
132
- return toArrayFromMap(state.deliveries)
133
- .filter((delivery) => !accountId || delivery.account_id === accountId)
134
- .map((delivery) => ({
135
- activity_id: `delivery.${delivery.delivery_id}`,
136
- activity_kind: "delivery",
137
- activity_family: "delivery_proof",
138
- at_iso: firstTimestamp(delivery, ["delivered_at_iso", "last_attempt_at_iso", "created_at_iso"]),
139
- account_id: delivery.account_id || null,
140
- actor_ref: delivery.account_id || null,
141
- action: delivery.status === "delivered" ? "delivered_result" : "delivery_pending",
142
- status: delivery.status || null,
143
- output_ref: delivery.output_ref || null,
144
- proof_ref: delivery.proof_ref || null,
145
- payment_id: delivery.payment_id || null,
146
- delivery_target_kind: delivery.delivery_target_kind || null,
147
- route_ref: delivery.transaction_id ? `/v1/transactions/${encodeURIComponent(delivery.transaction_id)}` : null,
148
- linked_refs: {
149
- transaction_ref: delivery.transaction_id ? `/v1/transactions/${encodeURIComponent(delivery.transaction_id)}` : null,
150
- receipt_ref: delivery.receipt_id ? `/v1/receipts/${encodeURIComponent(delivery.receipt_id)}` : null
151
- }
152
- }));
153
- }
154
-
155
- function buildHistoryActivities(records, accountId, config) {
156
- return records.flatMap((record) => {
157
- const history = Array.isArray(record && record.history) ? record.history : [];
158
- return history
159
- .filter((entry) => {
160
- const recordAccountId = record && record.account_id ? record.account_id : null;
161
- const transactionId = record && record.transaction_id ? record.transaction_id : null;
162
- if (!accountId) return true;
163
- return recordAccountId === accountId || transactionId === accountId || record && record.requested_by === accountId;
164
- })
165
- .map((entry, index) => ({
166
- activity_id: `${config.prefix}.${record[config.idField]}.${index}`,
167
- activity_kind: config.kind,
168
- activity_family: config.family,
169
- at_iso: firstTimestamp(entry, ["at_iso"]) || firstTimestamp(record, ["updated_at_iso", "created_at_iso"]),
170
- account_id: record && record.account_id ? record.account_id : null,
171
- actor_ref: entry && entry.actor ? `${entry.actor.type || "actor"}:${entry.actor.role || "unknown"}` : null,
172
- action: entry && entry.event ? entry.event : config.defaultAction,
173
- status: entry && entry.next_status ? entry.next_status : record.status || null,
174
- reason_code: entry && entry.reason_code ? entry.reason_code : record.reason_code || null,
175
- note: entry && entry.note ? entry.note : null,
176
- route_ref: config.routeTemplate(record[config.idField]),
177
- linked_refs: {
178
- transaction_ref: record && record.transaction_id ? `/v1/transactions/${encodeURIComponent(record.transaction_id)}` : null,
179
- receipt_ref: record && record.receipt_id ? `/v1/receipts/${encodeURIComponent(record.receipt_id)}` : null
180
- }
181
- }));
182
- });
183
- }
184
-
185
- function buildCreditGrantActivities(state, accountId) {
186
- return toArrayFromMap(state.externalCreditGrants)
187
- .filter((grant) => !accountId || grant.account_id === accountId)
188
- .map((grant) => ({
189
- activity_id: `credit_grant.${grant.grant_id || grant.credit_grant_id || grant.account_id || "unknown"}`,
190
- activity_kind: "credit_grant",
191
- activity_family: "funding",
192
- at_iso: firstTimestamp(grant, ["created_at_iso", "granted_at_iso", "recorded_at_iso"]),
193
- account_id: grant.account_id || null,
194
- actor_ref: grant.account_id || null,
195
- action: "credit_granted",
196
- status: grant.status || null,
197
- amount_minor: grant.amount_minor || grant.credit_amount_minor || null,
198
- currency: grant.currency || null,
199
- route_ref: "/v1/credit-bridge/grants",
200
- linked_refs: {}
201
- }));
202
- }
203
-
204
- function buildBridgeActivities(state, accountId) {
205
- return toArrayFromMap(state.runtimeBridgeDispatches)
206
- .filter((dispatch) => !accountId || dispatch.account_id === accountId)
207
- .map((dispatch) => ({
208
- activity_id: `bridge.${dispatch.dispatch_id || dispatch.bridge_dispatch_id || "unknown"}`,
209
- activity_kind: "bridge_dispatch",
210
- activity_family: "runtime_proof_handoff",
211
- at_iso: firstTimestamp(dispatch, ["created_at_iso", "dispatched_at_iso", "recorded_at_iso"]),
212
- account_id: dispatch.account_id || null,
213
- actor_ref: dispatch.account_id || null,
214
- action: "bridge_dispatched",
215
- status: dispatch.status || null,
216
- route_ref: "/v1/proof-bridge",
217
- linked_refs: {
218
- proof_ref: dispatch.proof_ref || null,
219
- receipt_ref: dispatch.receipt_id ? `/v1/receipts/${encodeURIComponent(dispatch.receipt_id)}` : null
220
- }
221
- }));
222
- }
223
-
224
- function buildParticipantActivities(records, kind, routeRef) {
225
- return records.map((participant) => ({
226
- activity_id: `${kind}.${participant.participant_id || participant.operator_id || participant.network_participant_id || "unknown"}`,
227
- activity_kind: kind,
228
- activity_family: "third_party_participation",
229
- at_iso: firstTimestamp(participant, ["created_at_iso", "updated_at_iso", "admitted_at_iso"]),
230
- account_id: participant.account_id || null,
231
- actor_ref: participant.account_id || null,
232
- action: `registered_${kind}`,
233
- status: participant.status || null,
234
- route_ref: routeRef,
235
- linked_refs: {}
236
- }));
237
- }
238
-
239
- function buildActivityLedger(state, options) {
240
- const accountId = options && options.account_id ? options.account_id : null;
241
- const activities = sortByTimestampDescending([
242
- ...buildQuoteActivities(state, accountId),
243
- ...buildTransactionActivities(state, accountId),
244
- ...buildReceiptActivities(state, accountId),
245
- ...buildPaymentActivities(state, accountId),
246
- ...buildDeliveryActivities(state, accountId),
247
- ...buildHistoryActivities(toArrayFromMap(state.refunds), accountId, {
248
- prefix: "refund",
249
- idField: "refund_id",
250
- kind: "refund",
251
- family: "remediation",
252
- defaultAction: "refund_review",
253
- routeTemplate: (id) => `/v1/refunds/${encodeURIComponent(id)}`
254
- }),
255
- ...buildHistoryActivities(toArrayFromMap(state.disputes), accountId, {
256
- prefix: "dispute",
257
- idField: "dispute_id",
258
- kind: "dispute",
259
- family: "remediation",
260
- defaultAction: "dispute_review",
261
- routeTemplate: (id) => `/v1/disputes/${encodeURIComponent(id)}`
262
- }),
263
- ...buildHistoryActivities(toArrayFromMap(state.remediationTickets), accountId, {
264
- prefix: "remediation_ticket",
265
- idField: "ticket_id",
266
- kind: "remediation_ticket",
267
- family: "remediation",
268
- defaultAction: "remediation_review",
269
- routeTemplate: (id) => `/v1/remediation-tickets/${encodeURIComponent(id)}`
270
- }),
271
- ...buildCreditGrantActivities(state, accountId),
272
- ...buildBridgeActivities(state, accountId),
273
- ...buildParticipantActivities(toArrayFromMap(state.operatorParticipants), "operator_participant", "/v1/multi-operator"),
274
- ...buildParticipantActivities(toArrayFromMap(state.networkParticipants), "network_participant", "/v1/network-participation")
275
- ]).slice(0, 300);
276
-
277
- return {
278
- product: "xytara",
279
- category: "machine-commerce-activity-ledger",
280
- pack_version: "xytara-activity-ledger-v1",
281
- posture: "operator_facing_runtime_and_funds_activity_visibility",
282
- audit_posture: "operator_visibility_first",
283
- account_scope: accountId || "all_accounts",
284
- counts: {
285
- activity_count: activities.length,
286
- payment_count: activities.filter((entry) => entry.activity_kind === "payment").length,
287
- transaction_count: activities.filter((entry) => entry.activity_kind === "transaction").length,
288
- delivery_count: activities.filter((entry) => entry.activity_kind === "delivery").length,
289
- remediation_count: activities.filter((entry) => entry.activity_family === "remediation").length,
290
- participation_count: activities.filter((entry) => entry.activity_family === "third_party_participation").length
291
- },
292
- activities,
293
- linked_surfaces: {
294
- payment_ledger_ref: "/v1/payment-ledger",
295
- reconciliation_report_ref: "/v1/reconciliation-report",
296
- integration_registry_ref: "/v1/integrations",
297
- treasury_summary_ref_template: "/v1/economics/accounts/:account_id/treasury-summary",
298
- rail_summary_ref_template: "/v1/economics/accounts/:account_id/rail-summary",
299
- proof_bridge_ref: "/v1/proof-bridge",
300
- activity_summary_ref: "/v1/activity-ledger/summary"
301
- },
302
- operator_note: "use this ledger to inspect who did what, what was paid, what was delivered, and how funds and consequence moved through the runtime"
303
- };
304
- }
305
-
306
- function summarizeActivityLedger(state, options) {
307
- const pack = buildActivityLedger(state, options);
308
- return {
309
- product: "xytara",
310
- category: "machine-commerce-activity-ledger-summary",
311
- summary_version: "xytara-activity-ledger-summary-v1",
312
- activity_count: pack.counts.activity_count,
313
- account_scope: pack.account_scope,
314
- counts: pack.counts,
315
- linked_surfaces: pack.linked_surfaces
316
- };
317
- }
318
-
319
- module.exports = {
320
- buildActivityLedger,
321
- summarizeActivityLedger
322
- };
1
+ "use strict";
2
+
3
+ function toArrayFromMap(mapValue) {
4
+ if (!(mapValue instanceof Map)) return [];
5
+ return Array.from(mapValue.values());
6
+ }
7
+
8
+ function normalizeTimestamp(value) {
9
+ if (typeof value !== "string" || !value.trim()) return null;
10
+ const parsed = Date.parse(value);
11
+ return Number.isFinite(parsed) ? new Date(parsed).toISOString() : null;
12
+ }
13
+
14
+ function firstTimestamp(record, fieldNames) {
15
+ for (const fieldName of fieldNames) {
16
+ const timestamp = normalizeTimestamp(record && record[fieldName]);
17
+ if (timestamp) return timestamp;
18
+ }
19
+ return null;
20
+ }
21
+
22
+ function sortByTimestampDescending(items) {
23
+ return [...items].sort((left, right) => {
24
+ const leftTime = left && left.at_iso ? Date.parse(left.at_iso) : 0;
25
+ const rightTime = right && right.at_iso ? Date.parse(right.at_iso) : 0;
26
+ return rightTime - leftTime;
27
+ });
28
+ }
29
+
30
+ function buildQuoteActivities(state, accountId) {
31
+ return toArrayFromMap(state.quotes)
32
+ .filter((quote) => !accountId || quote.account_id === accountId)
33
+ .map((quote) => ({
34
+ activity_id: `quote.${quote.quote_id}`,
35
+ activity_kind: "quote",
36
+ activity_family: "commercial_admission",
37
+ at_iso: firstTimestamp(quote, ["executed_at_iso", "payment_recorded_at_iso", "created_at_iso"]),
38
+ account_id: quote.account_id || null,
39
+ actor_ref: quote.account_id || null,
40
+ action: quote.status === "executed" ? "quoted_and_executed" : "quoted",
41
+ status: quote.status || null,
42
+ amount_minor: quote.amount_minor || null,
43
+ currency: quote.currency || null,
44
+ settlement_mode: quote.settlement_mode || null,
45
+ payment_protocol: quote.payment_protocol || null,
46
+ route_ref: "/v1/payment-quotes",
47
+ linked_refs: {
48
+ quote_ref: quote.quote_id ? `/v1/quotes/${encodeURIComponent(quote.quote_id)}` : null
49
+ }
50
+ }));
51
+ }
52
+
53
+ function buildTransactionActivities(state, accountId) {
54
+ return toArrayFromMap(state.transactions)
55
+ .map((entry) => entry && entry.transaction ? entry.transaction : null)
56
+ .filter(Boolean)
57
+ .filter((transaction) => !accountId || transaction.account_id === accountId)
58
+ .map((transaction) => ({
59
+ activity_id: `transaction.${transaction.transaction_id}`,
60
+ activity_kind: "transaction",
61
+ activity_family: "runtime_execution",
62
+ at_iso: firstTimestamp(transaction, ["completed_at_iso", "created_at_iso"]),
63
+ account_id: transaction.account_id || null,
64
+ actor_ref: transaction.account_id || null,
65
+ action: "executed_runtime_work",
66
+ status: transaction.status || null,
67
+ amount_minor: transaction.payment && transaction.payment.amount_minor ? transaction.payment.amount_minor : null,
68
+ currency: transaction.payment && transaction.payment.currency ? transaction.payment.currency : null,
69
+ settlement_mode: transaction.settlement && transaction.settlement.mode ? transaction.settlement.mode : null,
70
+ payment_protocol: transaction.payment && transaction.payment.protocol ? transaction.payment.protocol : null,
71
+ delivery_target_kind: transaction.callback_url ? "callback" : "direct",
72
+ route_ref: "/v1/commands/execute",
73
+ linked_refs: {
74
+ transaction_ref: transaction.transaction_id ? `/v1/transactions/${encodeURIComponent(transaction.transaction_id)}` : null,
75
+ proof_ref: transaction.proof_ref || null
76
+ }
77
+ }));
78
+ }
79
+
80
+ function buildReceiptActivities(state, accountId) {
81
+ return toArrayFromMap(state.receipts)
82
+ .map((entry) => entry && entry.receipt ? entry.receipt : null)
83
+ .filter(Boolean)
84
+ .filter((receipt) => !accountId || receipt.account_id === accountId)
85
+ .map((receipt) => ({
86
+ activity_id: `receipt.${receipt.receipt_id}`,
87
+ activity_kind: "receipt",
88
+ activity_family: "delivery_proof",
89
+ at_iso: firstTimestamp(receipt, ["created_at_iso", "completed_at_iso"]),
90
+ account_id: receipt.account_id || null,
91
+ actor_ref: receipt.account_id || null,
92
+ action: "receipt_issued",
93
+ status: receipt.status || null,
94
+ proof_ref: receipt.proof_ref || null,
95
+ route_ref: receipt.receipt_id ? `/v1/receipts/${encodeURIComponent(receipt.receipt_id)}` : "/v1/receipts",
96
+ linked_refs: {
97
+ receipt_ref: receipt.receipt_id ? `/v1/receipts/${encodeURIComponent(receipt.receipt_id)}` : null
98
+ }
99
+ }));
100
+ }
101
+
102
+ function buildPaymentActivities(state, accountId) {
103
+ const ledger = Array.isArray(state.paymentLedger) ? state.paymentLedger : [];
104
+ return ledger
105
+ .filter((payment) => !accountId || payment.account_id === accountId)
106
+ .map((payment) => ({
107
+ activity_id: `payment.${payment.payment_id}`,
108
+ activity_kind: "payment",
109
+ activity_family: "funds_in",
110
+ at_iso: firstTimestamp(payment, ["recorded_at_iso"]),
111
+ account_id: payment.account_id || null,
112
+ actor_ref: payment.account_id || null,
113
+ action: "payment_recorded",
114
+ status: payment.payment && payment.payment.status ? payment.payment.status : null,
115
+ amount_minor: payment.amount_minor || null,
116
+ currency: payment.currency || null,
117
+ settlement_mode: payment.settlement && payment.settlement.mode ? payment.settlement.mode : null,
118
+ settlement_adapter: payment.settlement_adapter || null,
119
+ settlement_integration_id: payment.settlement_integration_id || null,
120
+ payment_protocol: payment.payment && payment.payment.protocol ? payment.payment.protocol : null,
121
+ treasury_destination_id: payment.treasury && payment.treasury.destination_id ? payment.treasury.destination_id : null,
122
+ treasury_external_ref: payment.treasury && payment.treasury.custody_external_ref ? payment.treasury.custody_external_ref : null,
123
+ route_ref: payment.payment_id ? `/v1/payment-ledger/${encodeURIComponent(payment.payment_id)}` : "/v1/payment-ledger",
124
+ linked_refs: {
125
+ payment_ref: payment.payment_id ? `/v1/payment-ledger/${encodeURIComponent(payment.payment_id)}` : null,
126
+ operator_pack_ref: payment.payment_id ? `/v1/payment-ledger/${encodeURIComponent(payment.payment_id)}/operator-pack` : null
127
+ }
128
+ }));
129
+ }
130
+
131
+ function buildDeliveryActivities(state, accountId) {
132
+ return toArrayFromMap(state.deliveries)
133
+ .filter((delivery) => !accountId || delivery.account_id === accountId)
134
+ .map((delivery) => ({
135
+ activity_id: `delivery.${delivery.delivery_id}`,
136
+ activity_kind: "delivery",
137
+ activity_family: "delivery_proof",
138
+ at_iso: firstTimestamp(delivery, ["delivered_at_iso", "last_attempt_at_iso", "created_at_iso"]),
139
+ account_id: delivery.account_id || null,
140
+ actor_ref: delivery.account_id || null,
141
+ action: delivery.status === "delivered" ? "delivered_result" : "delivery_pending",
142
+ status: delivery.status || null,
143
+ output_ref: delivery.output_ref || null,
144
+ proof_ref: delivery.proof_ref || null,
145
+ payment_id: delivery.payment_id || null,
146
+ delivery_target_kind: delivery.delivery_target_kind || null,
147
+ route_ref: delivery.transaction_id ? `/v1/transactions/${encodeURIComponent(delivery.transaction_id)}` : null,
148
+ linked_refs: {
149
+ transaction_ref: delivery.transaction_id ? `/v1/transactions/${encodeURIComponent(delivery.transaction_id)}` : null,
150
+ receipt_ref: delivery.receipt_id ? `/v1/receipts/${encodeURIComponent(delivery.receipt_id)}` : null
151
+ }
152
+ }));
153
+ }
154
+
155
+ function buildHistoryActivities(records, accountId, config) {
156
+ return records.flatMap((record) => {
157
+ const history = Array.isArray(record && record.history) ? record.history : [];
158
+ return history
159
+ .filter((entry) => {
160
+ const recordAccountId = record && record.account_id ? record.account_id : null;
161
+ const transactionId = record && record.transaction_id ? record.transaction_id : null;
162
+ if (!accountId) return true;
163
+ return recordAccountId === accountId || transactionId === accountId || record && record.requested_by === accountId;
164
+ })
165
+ .map((entry, index) => ({
166
+ activity_id: `${config.prefix}.${record[config.idField]}.${index}`,
167
+ activity_kind: config.kind,
168
+ activity_family: config.family,
169
+ at_iso: firstTimestamp(entry, ["at_iso"]) || firstTimestamp(record, ["updated_at_iso", "created_at_iso"]),
170
+ account_id: record && record.account_id ? record.account_id : null,
171
+ actor_ref: entry && entry.actor ? `${entry.actor.type || "actor"}:${entry.actor.role || "unknown"}` : null,
172
+ action: entry && entry.event ? entry.event : config.defaultAction,
173
+ status: entry && entry.next_status ? entry.next_status : record.status || null,
174
+ reason_code: entry && entry.reason_code ? entry.reason_code : record.reason_code || null,
175
+ note: entry && entry.note ? entry.note : null,
176
+ route_ref: config.routeTemplate(record[config.idField]),
177
+ linked_refs: {
178
+ transaction_ref: record && record.transaction_id ? `/v1/transactions/${encodeURIComponent(record.transaction_id)}` : null,
179
+ receipt_ref: record && record.receipt_id ? `/v1/receipts/${encodeURIComponent(record.receipt_id)}` : null
180
+ }
181
+ }));
182
+ });
183
+ }
184
+
185
+ function buildCreditGrantActivities(state, accountId) {
186
+ return toArrayFromMap(state.externalCreditGrants)
187
+ .filter((grant) => !accountId || grant.account_id === accountId)
188
+ .map((grant) => ({
189
+ activity_id: `credit_grant.${grant.grant_id || grant.credit_grant_id || grant.account_id || "unknown"}`,
190
+ activity_kind: "credit_grant",
191
+ activity_family: "funding",
192
+ at_iso: firstTimestamp(grant, ["created_at_iso", "granted_at_iso", "recorded_at_iso"]),
193
+ account_id: grant.account_id || null,
194
+ actor_ref: grant.account_id || null,
195
+ action: "credit_granted",
196
+ status: grant.status || null,
197
+ amount_minor: grant.amount_minor || grant.credit_amount_minor || null,
198
+ currency: grant.currency || null,
199
+ route_ref: "/v1/credit-bridge/grants",
200
+ linked_refs: {}
201
+ }));
202
+ }
203
+
204
+ function buildBridgeActivities(state, accountId) {
205
+ return toArrayFromMap(state.runtimeBridgeDispatches)
206
+ .filter((dispatch) => !accountId || dispatch.account_id === accountId)
207
+ .map((dispatch) => ({
208
+ activity_id: `bridge.${dispatch.dispatch_id || dispatch.bridge_dispatch_id || "unknown"}`,
209
+ activity_kind: "bridge_dispatch",
210
+ activity_family: "runtime_proof_handoff",
211
+ at_iso: firstTimestamp(dispatch, ["created_at_iso", "dispatched_at_iso", "recorded_at_iso"]),
212
+ account_id: dispatch.account_id || null,
213
+ actor_ref: dispatch.account_id || null,
214
+ action: "bridge_dispatched",
215
+ status: dispatch.status || null,
216
+ route_ref: "/v1/proof-bridge",
217
+ linked_refs: {
218
+ proof_ref: dispatch.proof_ref || null,
219
+ receipt_ref: dispatch.receipt_id ? `/v1/receipts/${encodeURIComponent(dispatch.receipt_id)}` : null
220
+ }
221
+ }));
222
+ }
223
+
224
+ function buildParticipantActivities(records, kind, routeRef) {
225
+ return records.map((participant) => ({
226
+ activity_id: `${kind}.${participant.participant_id || participant.operator_id || participant.network_participant_id || "unknown"}`,
227
+ activity_kind: kind,
228
+ activity_family: "third_party_participation",
229
+ at_iso: firstTimestamp(participant, ["created_at_iso", "updated_at_iso", "admitted_at_iso"]),
230
+ account_id: participant.account_id || null,
231
+ actor_ref: participant.account_id || null,
232
+ action: `registered_${kind}`,
233
+ status: participant.status || null,
234
+ route_ref: routeRef,
235
+ linked_refs: {}
236
+ }));
237
+ }
238
+
239
+ function buildActivityLedger(state, options) {
240
+ const accountId = options && options.account_id ? options.account_id : null;
241
+ const activities = sortByTimestampDescending([
242
+ ...buildQuoteActivities(state, accountId),
243
+ ...buildTransactionActivities(state, accountId),
244
+ ...buildReceiptActivities(state, accountId),
245
+ ...buildPaymentActivities(state, accountId),
246
+ ...buildDeliveryActivities(state, accountId),
247
+ ...buildHistoryActivities(toArrayFromMap(state.refunds), accountId, {
248
+ prefix: "refund",
249
+ idField: "refund_id",
250
+ kind: "refund",
251
+ family: "remediation",
252
+ defaultAction: "refund_review",
253
+ routeTemplate: (id) => `/v1/refunds/${encodeURIComponent(id)}`
254
+ }),
255
+ ...buildHistoryActivities(toArrayFromMap(state.disputes), accountId, {
256
+ prefix: "dispute",
257
+ idField: "dispute_id",
258
+ kind: "dispute",
259
+ family: "remediation",
260
+ defaultAction: "dispute_review",
261
+ routeTemplate: (id) => `/v1/disputes/${encodeURIComponent(id)}`
262
+ }),
263
+ ...buildHistoryActivities(toArrayFromMap(state.remediationTickets), accountId, {
264
+ prefix: "remediation_ticket",
265
+ idField: "ticket_id",
266
+ kind: "remediation_ticket",
267
+ family: "remediation",
268
+ defaultAction: "remediation_review",
269
+ routeTemplate: (id) => `/v1/remediation-tickets/${encodeURIComponent(id)}`
270
+ }),
271
+ ...buildCreditGrantActivities(state, accountId),
272
+ ...buildBridgeActivities(state, accountId),
273
+ ...buildParticipantActivities(toArrayFromMap(state.operatorParticipants), "operator_participant", "/v1/multi-operator"),
274
+ ...buildParticipantActivities(toArrayFromMap(state.networkParticipants), "network_participant", "/v1/network-participation")
275
+ ]).slice(0, 300);
276
+
277
+ return {
278
+ product: "xytara",
279
+ category: "machine-commerce-activity-ledger",
280
+ pack_version: "xytara-activity-ledger-v1",
281
+ posture: "operator_facing_runtime_and_funds_activity_visibility",
282
+ audit_posture: "operator_visibility_first",
283
+ account_scope: accountId || "all_accounts",
284
+ counts: {
285
+ activity_count: activities.length,
286
+ payment_count: activities.filter((entry) => entry.activity_kind === "payment").length,
287
+ transaction_count: activities.filter((entry) => entry.activity_kind === "transaction").length,
288
+ delivery_count: activities.filter((entry) => entry.activity_kind === "delivery").length,
289
+ remediation_count: activities.filter((entry) => entry.activity_family === "remediation").length,
290
+ participation_count: activities.filter((entry) => entry.activity_family === "third_party_participation").length
291
+ },
292
+ activities,
293
+ linked_surfaces: {
294
+ payment_ledger_ref: "/v1/payment-ledger",
295
+ reconciliation_report_ref: "/v1/reconciliation-report",
296
+ integration_registry_ref: "/v1/integrations",
297
+ treasury_summary_ref_template: "/v1/economics/accounts/:account_id/treasury-summary",
298
+ rail_summary_ref_template: "/v1/economics/accounts/:account_id/rail-summary",
299
+ proof_bridge_ref: "/v1/proof-bridge",
300
+ activity_summary_ref: "/v1/activity-ledger/summary"
301
+ },
302
+ operator_note: "use this ledger to inspect who did what, what was paid, what was delivered, and how funds and consequence moved through the runtime"
303
+ };
304
+ }
305
+
306
+ function summarizeActivityLedger(state, options) {
307
+ const pack = buildActivityLedger(state, options);
308
+ return {
309
+ product: "xytara",
310
+ category: "machine-commerce-activity-ledger-summary",
311
+ summary_version: "xytara-activity-ledger-summary-v1",
312
+ activity_count: pack.counts.activity_count,
313
+ account_scope: pack.account_scope,
314
+ counts: pack.counts,
315
+ linked_surfaces: pack.linked_surfaces
316
+ };
317
+ }
318
+
319
+ module.exports = {
320
+ buildActivityLedger,
321
+ summarizeActivityLedger
322
+ };