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.
- package/.env.example +67 -58
- package/ADAPTER_START_HERE.md +56 -56
- package/CARRIED_HANDOFF_DEMO.md +60 -60
- package/EXAMPLE_PATHS.md +53 -53
- package/FINAL_CONTRACT.md +498 -498
- package/LICENSE +201 -201
- package/NOTICE +3 -3
- package/PARTNER_READY_PATH.md +71 -71
- package/PUBLIC_DEMO_SCRIPT.md +78 -78
- package/README.md +6 -1
- package/REAL_PAYMENT_SETUP.md +32 -3
- package/RELEASE_NOTES.md +14 -14
- package/SERVICE_CONTRACT.md +419 -419
- package/START_HERE.md +1 -1
- package/SUPABASE_RUNTIME_STATE_SETUP.md +61 -61
- package/TERMINOLOGY.md +50 -50
- package/WHY_XYTARA_XOONYA.md +63 -63
- package/XT1_EXECUTION_TRUTH_STANDARD.md +78 -78
- package/XYTARA_ADAPTER_PROTOCOL_TRUTH_MODEL.md +75 -75
- package/XYTARA_AUTONOMOUS_ENTRY_MODEL.md +124 -124
- package/XYTARA_DEFAULT_PATH_MODEL.md +84 -84
- package/XYTARA_EXECUTION_TRUTH_MODEL.md +171 -171
- package/XYTARA_PAYMENT_RAIL_TRUTH_MODEL.md +68 -68
- package/adapters/AUTHORING_GUIDE.md +243 -243
- package/adapters/ONBOARDING_POSTURE.md +61 -61
- package/adapters/THIRD_PARTY_SUBMISSION_PROCESS.md +84 -84
- package/adapters/adapter-manifest.schema.json +283 -283
- package/adapters/examples/example-execution-adapter.js +61 -61
- package/adapters/examples/example-execution-adapter.manifest.json +81 -81
- package/adapters/examples/example-settlement-adapter.js +55 -55
- package/adapters/examples/example-settlement-adapter.manifest.json +78 -78
- package/adapters/examples/example-third-party-acp-registration.submission-bundle.json +124 -124
- package/adapters/examples/example-third-party-erc8004-registration.submission-bundle.json +121 -121
- package/adapters/examples/example-third-party-identity-registration.certification-pack.json +22 -22
- package/adapters/examples/example-third-party-identity-registration.record.json +26 -26
- package/adapters/examples/example-third-party-identity-registration.submission-bundle.json +126 -126
- package/adapters/examples/example-third-party-langchain-registration.submission-bundle.json +124 -124
- package/adapters/examples/example-third-party-mpp-registration.submission-bundle.json +120 -120
- package/adapters/examples/example-third-party-registration.certification-pack.json +22 -22
- package/adapters/examples/example-third-party-registration.record.json +28 -28
- package/adapters/examples/example-third-party-registration.submission-bundle.json +126 -126
- package/adapters/examples/example-third-party-settlement-registration.certification-pack.json +22 -22
- package/adapters/examples/example-third-party-settlement-registration.record.json +26 -26
- package/adapters/examples/example-third-party-settlement-registration.submission-bundle.json +127 -127
- package/adapters/examples/langchain-reference-execution-adapter.js +81 -81
- package/adapters/examples/langchain-reference-execution-adapter.manifest.json +79 -79
- package/adapters/examples/langgraph-reference-execution-adapter.js +81 -81
- package/adapters/examples/langgraph-reference-execution-adapter.manifest.json +79 -79
- package/adapters/examples/minimal-third-party-execution-adapter.js +61 -61
- package/adapters/examples/minimal-third-party-execution-adapter.manifest.json +79 -79
- package/adapters/examples/minimal-third-party-execution-registration.record.json +26 -26
- package/adapters/examples/minimal-third-party-execution.certification-pack.json +22 -22
- package/adapters/examples/minimal-third-party-execution.submission-bundle.json +126 -126
- package/adapters/integration-certification-pack.schema.json +82 -82
- package/adapters/integration-registration-record.schema.json +114 -114
- package/adapters/integration-submission-bundle-set.schema.json +39 -39
- package/adapters/integration-submission-bundle.schema.json +34 -34
- package/adapters/interfaces.js +56 -56
- package/bin/xytara-first-run.js +244 -244
- package/bin/xytara-release.js +1429 -1429
- package/bin/xytara-run.js +186 -186
- package/bin/xytara.js +80 -80
- package/client.js +3 -3
- package/examples/_demo_env.js +40 -0
- package/examples/adapter_review_walkthrough.js +54 -53
- package/examples/export_carried_handoff.js +81 -80
- package/examples/funded_runtime_walkthrough.js +71 -70
- package/examples/generated.carried-handoff.json +30 -0
- package/examples/partner_launch_walkthrough.js +44 -43
- package/examples/quickstart.js +3256 -3255
- package/fixtures/catalog.js +1134 -1134
- package/index.js +395 -395
- package/integrations/dispatch.js +276 -276
- package/integrations/registry-snapshot.schema.json +36 -36
- package/integrations/registry.js +2261 -2261
- package/integrations/views.js +28 -28
- package/lib/a2a_lane_contract.js +104 -104
- package/lib/a2c_lane_contract.js +111 -111
- package/lib/account_auth.js +518 -518
- package/lib/acp_lane_contract.js +54 -54
- package/lib/activity_audit_contract.js +322 -322
- package/lib/adapter_certification_contract.js +130 -130
- package/lib/adapter_depth_contract.js +156 -156
- package/lib/adapter_pack.js +118 -118
- package/lib/adapter_partner_pack.js +89 -89
- package/lib/adapter_promotion_pack.js +89 -89
- package/lib/adapter_protocol_truth_contract.js +229 -229
- package/lib/announcement_pack.js +61 -61
- package/lib/artifact_distribution_lane_contract.js +54 -54
- package/lib/asyncapi_contract.js +150 -150
- package/lib/auth_interop_contract.js +80 -80
- package/lib/authority_binding_lifecycle_contract.js +182 -182
- package/lib/autonomous_entry_contract.js +409 -409
- package/lib/bolt_lane_contract.js +55 -55
- package/lib/bolt_payment_front.js +172 -172
- package/lib/business_cockpit.js +378 -378
- package/lib/capability_execution_truth.js +272 -272
- package/lib/capability_registry.js +633 -633
- package/lib/catalog_contract.js +966 -966
- package/lib/catalog_family_model.js +193 -193
- package/lib/catalog_views.js +55 -55
- package/lib/checkout_event_security.js +142 -142
- package/lib/cloudevents_contract.js +80 -80
- package/lib/command_flow.js +411 -406
- package/lib/commerce_artifacts.js +503 -503
- package/lib/commerce_authority.js +449 -449
- package/lib/commerce_cases.js +317 -317
- package/lib/commerce_checkout.js +509 -509
- package/lib/commerce_client.js +7687 -7676
- package/lib/commerce_coordination.js +346 -346
- package/lib/commerce_economics.js +4017 -4016
- package/lib/commerce_identity.js +578 -578
- package/lib/commerce_quotes.js +237 -237
- package/lib/commerce_reports.js +14461 -14461
- package/lib/commerce_runtime.js +315 -315
- package/lib/commerce_shell.js +257 -257
- package/lib/crypto_agility_matrix.js +125 -125
- package/lib/default_path_contract.js +412 -412
- package/lib/delivery_summary_contract.js +95 -95
- package/lib/ecosystem_entry.js +64 -64
- package/lib/erc8004_lane_contract.js +65 -65
- package/lib/event_system_lane_contract.js +75 -75
- package/lib/execution_truth_contract.js +234 -234
- package/lib/external_credit_bridge.js +142 -142
- package/lib/external_execution_runtime.js +132 -132
- package/lib/feature_control_lane_contract.js +54 -54
- package/lib/first_run_conversion_contract.js +290 -290
- package/lib/framework_lane_contract.js +89 -89
- package/lib/framework_provider_promotion.js +235 -235
- package/lib/full_catalog_contract.js +525 -525
- package/lib/go_live_operator_pack.js +391 -391
- package/lib/http_transport.js +73 -73
- package/lib/identity_auth.js +175 -175
- package/lib/identity_interop_contract.js +82 -82
- package/lib/integration_matrix_contract.js +102 -102
- package/lib/l402_lane_contract.js +55 -55
- package/lib/l402_payment_front.js +192 -192
- package/lib/launch_narrative.js +53 -53
- package/lib/lifecycle_continuity_contract.js +115 -115
- package/lib/machine_identity_registry_contract.js +199 -199
- package/lib/major_rails_lane_contract.js +150 -150
- package/lib/market_lane_contract.js +467 -467
- package/lib/market_lane_depth_contract.js +182 -182
- package/lib/market_lane_promotion_contract.js +210 -210
- package/lib/market_lane_trace_contract.js +278 -278
- package/lib/mcp_lane_contract.js +137 -137
- package/lib/network_transport.js +110 -110
- package/lib/offline_verifiability_recovery_contract.js +155 -155
- package/lib/openapi_contract.js +296 -296
- package/lib/operational_receipt_contract.js +165 -165
- package/lib/operator_intelligence.js +407 -407
- package/lib/outreach_copy_pack.js +51 -51
- package/lib/outreach_message_pack.js +71 -71
- package/lib/outreach_proof.js +71 -71
- package/lib/outreach_target_pack.js +60 -60
- package/lib/partner_intelligence.js +105 -105
- package/lib/payment_config.js +239 -191
- package/lib/payment_front_registry.js +53 -53
- package/lib/payment_protocol_contract.js +165 -165
- package/lib/payment_rail_truth_contract.js +324 -324
- package/lib/payment_verification.js +312 -264
- package/lib/phase_10_closeout_pack.js +45 -45
- package/lib/phase_10_completion_pack.js +76 -76
- package/lib/phase_10_decision_record_pack.js +54 -54
- package/lib/phase_10_decision_resolution_pack.js +53 -53
- package/lib/phase_10_demand_signal_adapters_runtime_pack.js +74 -74
- package/lib/phase_10_ecosystem_backlog_triage_runtime_pack.js +74 -74
- package/lib/phase_10_freeze_baseline_pack.js +67 -67
- package/lib/phase_10_freeze_review_pack.js +64 -64
- package/lib/phase_10_gate_pack.js +57 -57
- package/lib/phase_10_long_tail_continuity_pack.js +80 -80
- package/lib/phase_10_long_tail_ecosystem_pack.js +66 -66
- package/lib/phase_10_niche_extension_registry_runtime_pack.js +74 -74
- package/lib/phase_1_claude_mcp_pack.js +60 -60
- package/lib/phase_1_claude_mcp_runtime_pack.js +52 -52
- package/lib/phase_1_ecosystem_pack.js +67 -67
- package/lib/phase_1_openai_codex_pack.js +60 -60
- package/lib/phase_1_openai_codex_runtime_pack.js +52 -52
- package/lib/phase_2_base_runtime_pack.js +71 -71
- package/lib/phase_2_base_usdc_runtime_pack.js +72 -72
- package/lib/phase_2_closeout_pack.js +65 -65
- package/lib/phase_2_completion_pack.js +113 -113
- package/lib/phase_2_decision_record_pack.js +66 -66
- package/lib/phase_2_decision_resolution_pack.js +69 -69
- package/lib/phase_2_eth_runtime_pack.js +70 -70
- package/lib/phase_2_evm_base_runtime_pack.js +73 -73
- package/lib/phase_2_evm_runtime_pack.js +71 -71
- package/lib/phase_2_flip_preview_pack.js +60 -60
- package/lib/phase_2_freeze_review_pack.js +99 -99
- package/lib/phase_2_gate_pack.js +77 -77
- package/lib/phase_2_payment_rails_pack.js +71 -71
- package/lib/phase_2_usdc_runtime_pack.js +71 -71
- package/lib/phase_3_brc_runtime_pack.js +81 -81
- package/lib/phase_3_bsv_teranode_runtime_pack.js +83 -83
- package/lib/phase_3_closeout_pack.js +62 -62
- package/lib/phase_3_completion_pack.js +94 -94
- package/lib/phase_3_decision_record_pack.js +64 -64
- package/lib/phase_3_decision_resolution_pack.js +69 -69
- package/lib/phase_3_freeze_baseline_pack.js +67 -67
- package/lib/phase_3_freeze_review_pack.js +80 -80
- package/lib/phase_3_gate_pack.js +76 -76
- package/lib/phase_3_metanet_runtime_pack.js +81 -81
- package/lib/phase_3_native_bsv_pack.js +91 -91
- package/lib/phase_3_native_continuity_pack.js +82 -82
- package/lib/phase_4_attestation_runtime_pack.js +75 -75
- package/lib/phase_4_closeout_pack.js +45 -45
- package/lib/phase_4_completion_pack.js +94 -94
- package/lib/phase_4_decision_record_pack.js +54 -54
- package/lib/phase_4_decision_resolution_pack.js +45 -45
- package/lib/phase_4_erc8004_runtime_pack.js +76 -76
- package/lib/phase_4_freeze_baseline_pack.js +67 -67
- package/lib/phase_4_freeze_review_pack.js +68 -68
- package/lib/phase_4_gate_pack.js +58 -58
- package/lib/phase_4_identity_registry_runtime_pack.js +75 -75
- package/lib/phase_4_identity_trust_pack.js +73 -73
- package/lib/phase_4_trust_continuity_pack.js +86 -86
- package/lib/phase_5_antelope_runtime_pack.js +76 -76
- package/lib/phase_5_closeout_pack.js +44 -44
- package/lib/phase_5_completion_pack.js +82 -82
- package/lib/phase_5_constellation_dag_runtime_pack.js +76 -76
- package/lib/phase_5_decision_record_pack.js +54 -54
- package/lib/phase_5_decision_resolution_pack.js +45 -45
- package/lib/phase_5_digibyte_dgb_runtime_pack.js +76 -76
- package/lib/phase_5_freeze_baseline_pack.js +67 -67
- package/lib/phase_5_freeze_review_pack.js +68 -68
- package/lib/phase_5_gate_pack.js +58 -58
- package/lib/phase_5_hedera_hbar_runtime_pack.js +76 -76
- package/lib/phase_5_kaspa_kas_runtime_pack.js +76 -76
- package/lib/phase_5_major_rails_continuity_pack.js +86 -86
- package/lib/phase_5_major_rails_pack.js +110 -110
- package/lib/phase_5_metal_runtime_pack.js +76 -76
- package/lib/phase_5_polkadot_dot_runtime_pack.js +76 -76
- package/lib/phase_5_proton_xpr_runtime_pack.js +76 -76
- package/lib/phase_5_solana_runtime_pack.js +76 -76
- package/lib/phase_6_autogen_runtime_pack.js +72 -72
- package/lib/phase_6_closeout_pack.js +46 -46
- package/lib/phase_6_completion_pack.js +77 -77
- package/lib/phase_6_decision_record_pack.js +54 -54
- package/lib/phase_6_decision_resolution_pack.js +53 -53
- package/lib/phase_6_framework_continuity_pack.js +81 -81
- package/lib/phase_6_framework_runtime_pack.js +68 -68
- package/lib/phase_6_freeze_baseline_pack.js +68 -68
- package/lib/phase_6_freeze_review_pack.js +65 -65
- package/lib/phase_6_gate_pack.js +59 -59
- package/lib/phase_6_langchain_runtime_pack.js +72 -72
- package/lib/phase_6_langgraph_runtime_pack.js +72 -72
- package/lib/phase_6_semantic_kernel_runtime_pack.js +72 -72
- package/lib/phase_7_closeout_pack.js +45 -45
- package/lib/phase_7_completion_pack.js +85 -85
- package/lib/phase_7_decision_record_pack.js +53 -53
- package/lib/phase_7_decision_resolution_pack.js +53 -53
- package/lib/phase_7_event_system_continuity_pack.js +89 -89
- package/lib/phase_7_event_system_pack.js +76 -76
- package/lib/phase_7_freeze_baseline_pack.js +74 -74
- package/lib/phase_7_freeze_review_pack.js +65 -65
- package/lib/phase_7_gate_pack.js +58 -58
- package/lib/phase_7_kafka_runtime_pack.js +74 -74
- package/lib/phase_7_mqtt_runtime_pack.js +74 -74
- package/lib/phase_7_nats_runtime_pack.js +74 -74
- package/lib/phase_7_webhook_event_bus_runtime_pack.js +74 -74
- package/lib/phase_8_closeout_pack.js +46 -46
- package/lib/phase_8_completion_pack.js +82 -82
- package/lib/phase_8_decision_record_pack.js +54 -54
- package/lib/phase_8_decision_resolution_pack.js +53 -53
- package/lib/phase_8_external_receipt_import_runtime_pack.js +74 -74
- package/lib/phase_8_external_result_import_runtime_pack.js +74 -74
- package/lib/phase_8_freeze_baseline_pack.js +71 -71
- package/lib/phase_8_freeze_review_pack.js +64 -64
- package/lib/phase_8_gate_pack.js +58 -58
- package/lib/phase_8_proof_bridge_continuity_pack.js +86 -86
- package/lib/phase_8_proof_bridges_pack.js +72 -72
- package/lib/phase_8_proof_bundle_normalization_runtime_pack.js +74 -74
- package/lib/phase_9_closeout_pack.js +46 -46
- package/lib/phase_9_completion_pack.js +82 -82
- package/lib/phase_9_custody_refs_runtime_pack.js +74 -74
- package/lib/phase_9_decision_record_pack.js +54 -54
- package/lib/phase_9_decision_resolution_pack.js +53 -53
- package/lib/phase_9_freeze_baseline_pack.js +71 -71
- package/lib/phase_9_freeze_review_pack.js +64 -64
- package/lib/phase_9_gate_pack.js +58 -58
- package/lib/phase_9_operator_accounting_bridges_runtime_pack.js +74 -74
- package/lib/phase_9_treasury_connectivity_pack.js +72 -72
- package/lib/phase_9_treasury_continuity_pack.js +86 -86
- package/lib/phase_9_treasury_destinations_runtime_pack.js +74 -74
- package/lib/phase_program_pack.js +120 -120
- package/lib/pricing_optimization_contract.js +775 -775
- package/lib/protocol_lane_contract.js +117 -117
- package/lib/provenance_lane_contract.js +54 -54
- package/lib/provider_lane_contract.js +240 -240
- package/lib/provider_runtime_journey_contract.js +183 -183
- package/lib/public_surface_policy_contract.js +111 -111
- package/lib/publish_plan.js +51 -51
- package/lib/record_queries.js +48 -48
- package/lib/release_candidate.js +50 -50
- package/lib/release_center.js +1093 -1093
- package/lib/release_history.js +205 -205
- package/lib/release_manifest.js +113 -113
- package/lib/release_pack.js +453 -453
- package/lib/request_rate_limit.js +144 -144
- package/lib/resource_views.js +31 -31
- package/lib/revenue_launch_path_contract.js +326 -326
- package/lib/route_matchers.js +34 -34
- package/lib/route_params.js +19 -19
- package/lib/runtime_bridge.js +124 -124
- package/lib/runtime_operations_worker.js +282 -282
- package/lib/runtime_state_store.js +354 -354
- package/lib/settlement_lane_contract.js +111 -111
- package/lib/shared_signals_lane_contract.js +54 -54
- package/lib/signed_audit_provenance_contract.js +83 -83
- package/lib/soft_launch_pack.js +78 -78
- package/lib/stablecoin_lane_contract.js +76 -76
- package/lib/stripe_mpp_lane_contract.js +96 -96
- package/lib/stripe_mpp_payment_front.js +158 -158
- package/lib/telemetry_lane_contract.js +54 -54
- package/lib/treasury_destinations_contract.js +764 -764
- package/lib/treasury_egress_policy_contract.js +91 -91
- package/lib/treasury_lane_contract.js +84 -84
- package/lib/trust_portability_boundary_contract.js +72 -72
- package/lib/x402_facilitator.js +155 -0
- package/lib/x402_lane_contract.js +118 -118
- package/package.json +106 -105
- package/scripts/registry_cli.js +275 -275
- package/scripts/verify_adapters.js +554 -554
- package/scripts/verify_all.js +4962 -4962
- package/scripts/verify_control_plane_contracts.js +34 -34
- package/scripts/verify_control_plane_routes.js +70 -70
- package/scripts/verify_delivery_summary.js +112 -112
- package/scripts/verify_examples.js +19 -19
- package/scripts/verify_first_run_conversions.js +81 -81
- package/scripts/verify_framework_provider_promotion.js +152 -152
- package/scripts/verify_full_catalog.js +174 -174
- package/scripts/verify_integrations.js +620 -620
- package/scripts/verify_lifecycle_continuity.js +96 -96
- package/scripts/verify_market_lane_depth.js +94 -94
- package/scripts/verify_market_lane_promotion.js +103 -103
- package/scripts/verify_market_lane_traces.js +98 -98
- package/scripts/verify_market_lanes.js +102 -102
- package/scripts/verify_operator_observability_boundary.js +83 -83
- package/scripts/verify_pricing_experiment_plan.js +124 -124
- package/scripts/verify_provider_runtime_breadth.js +109 -109
- package/scripts/verify_provider_runtime_journeys.js +111 -111
- package/scripts/verify_revenue_launch_paths.js +105 -105
- package/scripts/verify_runtime_durability.js +52 -52
- package/scripts/verify_service.js +15410 -15250
- package/scripts/verify_tooling.js +1412 -1412
- package/scripts/verify_treasury_public_boundary.js +97 -97
- package/scripts/verify_x402_facilitator.js +174 -0
- package/server.js +11117 -11006
- package/.env.production.checklist +0 -77
- package/.env.production.template +0 -54
- package/.github/workflows/publish-mcp-executor.yml +0 -43
- package/ADAPTER_PARTNER_PATH.md +0 -47
- package/ADAPTER_PROMOTION_START_HERE.md +0 -44
- package/BOLT_BINDINGS.production.worksheet.json +0 -31
- package/EXECUTION_TARGETS.production.worksheet.json +0 -73
- package/GO_LIVE_OPERATOR_PACK.md +0 -412
- package/L402_BINDINGS.production.worksheet.json +0 -30
- package/OPERATIONS_RUNBOOK.md +0 -115
- package/OPERATOR_START_HERE.md +0 -63
- package/OUTREACH_MESSAGES.md +0 -19
- package/OUTREACH_START_HERE.md +0 -36
- package/PRODUCTION_MANUAL_CLOSEOUT_SEQUENCE.md +0 -172
- package/PROGRAM_COMPLETE_RELEASE.md +0 -63
- package/PROGRAM_STATUS.md +0 -57
- package/PUBLISH_PLAN.md +0 -26
- package/RELEASE_CHECKLIST.md +0 -16
- package/SOFT_LAUNCH_KIT.md +0 -47
- package/services/mcp-execution-target/DISCOVERY_REGISTRY_PLAYBOOK.md +0 -141
- package/services/mcp-execution-target/README.md +0 -319
- package/services/mcp-execution-target/package.json +0 -14
- package/services/mcp-execution-target/server.js +0 -1031
- package/services/mcp-execution-target/server.json +0 -16
- package/services/mcp-execution-target/verify.js +0 -308
|
@@ -1,111 +1,111 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const assert = require("assert");
|
|
4
|
-
const { createServer } = require("../server");
|
|
5
|
-
const {
|
|
6
|
-
buildProviderRuntimeJourneyPack,
|
|
7
|
-
getProviderRuntimeJourneyDetail,
|
|
8
|
-
summarizeProviderRuntimeJourneyPack
|
|
9
|
-
} = require("../lib/provider_runtime_journey_contract");
|
|
10
|
-
|
|
11
|
-
async function getJson(baseUrl, path) {
|
|
12
|
-
const response = await fetch(`${baseUrl}${path}`);
|
|
13
|
-
return {
|
|
14
|
-
status: response.status,
|
|
15
|
-
json: await response.json()
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async function main() {
|
|
20
|
-
const previousExecutionTargets = process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
21
|
-
process.env.XYTARA_EXECUTION_TARGETS_JSON = JSON.stringify([
|
|
22
|
-
{
|
|
23
|
-
target_id: "verify-provider-journey-mcp-target",
|
|
24
|
-
task_ref: "adapter.mcp.invoke",
|
|
25
|
-
endpoint_url: "http://127.0.0.1:65535/execute",
|
|
26
|
-
provider: "xytara_mcp_executor",
|
|
27
|
-
tool_name: "summarize",
|
|
28
|
-
auth_token: "verify-provider-journey-bearer",
|
|
29
|
-
timeout_ms: 1500,
|
|
30
|
-
enabled: true
|
|
31
|
-
}
|
|
32
|
-
]);
|
|
33
|
-
|
|
34
|
-
const pack = buildProviderRuntimeJourneyPack();
|
|
35
|
-
const summary = summarizeProviderRuntimeJourneyPack();
|
|
36
|
-
assert.strictEqual(pack.ok, true, "provider runtime journey pack ok flag missing");
|
|
37
|
-
assert.strictEqual(summary.ok, true, "provider runtime journey summary ok flag missing");
|
|
38
|
-
assert.strictEqual(pack.category, "machine-commerce-provider-runtime-journey-pack", "provider runtime journey category mismatch");
|
|
39
|
-
assert.strictEqual(summary.summary_version, "xytara-provider-runtime-journey-summary-v1", "provider runtime journey summary version mismatch");
|
|
40
|
-
assert.strictEqual(summary.journey_count >= 2, true, "provider runtime journey count missing");
|
|
41
|
-
assert.strictEqual(summary.first_run_ready_journey_count >= 2, true, "provider runtime first-run readiness count missing");
|
|
42
|
-
assert.strictEqual(summary.revenue_ready_journey_count >= 2, true, "provider runtime revenue-ready journey count missing");
|
|
43
|
-
assert.strictEqual(summary.proof_followthrough_journey_count >= 2, true, "provider runtime proof-followthrough journey count missing");
|
|
44
|
-
assert.strictEqual(summary.provider_live_anchor_journey_count >= 1, true, "provider runtime provider-live anchor journey count missing");
|
|
45
|
-
|
|
46
|
-
const openaiJourney = getProviderRuntimeJourneyDetail("openai_codex");
|
|
47
|
-
const claudeJourney = getProviderRuntimeJourneyDetail("claude_mcp");
|
|
48
|
-
assert.strictEqual(Boolean(openaiJourney), true, "openai runtime journey missing");
|
|
49
|
-
assert.strictEqual(Boolean(claudeJourney), true, "claude runtime journey missing");
|
|
50
|
-
assert.strictEqual(openaiJourney.first_run_ready, true, "openai runtime journey first-run readiness missing");
|
|
51
|
-
assert.strictEqual(openaiJourney.proof_followthrough_ready, true, "openai runtime journey proof-followthrough missing");
|
|
52
|
-
assert.strictEqual(claudeJourney.provider_live_anchor_ready, true, "claude runtime journey provider-live anchor missing");
|
|
53
|
-
assert.strictEqual(claudeJourney.readiness_gates.promotion_ready, true, "claude runtime journey promotion readiness missing");
|
|
54
|
-
|
|
55
|
-
const server = createServer();
|
|
56
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
57
|
-
const address = server.address();
|
|
58
|
-
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
const journeyPack = await getJson(baseUrl, "/v1/providers/journeys");
|
|
62
|
-
assert.strictEqual(journeyPack.status, 200, "provider runtime journeys route failed");
|
|
63
|
-
assert.strictEqual(journeyPack.json.ok, true, "provider runtime journeys route ok flag missing");
|
|
64
|
-
assert.strictEqual(journeyPack.json.journey_count >= 2, true, "provider runtime journeys route count missing");
|
|
65
|
-
|
|
66
|
-
const journeySummary = await getJson(baseUrl, "/v1/providers/journeys/summary");
|
|
67
|
-
assert.strictEqual(journeySummary.status, 200, "provider runtime journeys summary route failed");
|
|
68
|
-
assert.strictEqual(journeySummary.json.ok, true, "provider runtime journeys summary ok flag missing");
|
|
69
|
-
assert.strictEqual(journeySummary.json.first_run_ready_journey_count >= 2, true, "provider runtime journeys summary first-run count missing");
|
|
70
|
-
assert.strictEqual(journeySummary.json.revenue_ready_journey_count >= 2, true, "provider runtime journeys summary revenue-ready count missing");
|
|
71
|
-
|
|
72
|
-
const openaiDetail = await getJson(baseUrl, "/v1/providers/journeys/openai_codex");
|
|
73
|
-
assert.strictEqual(openaiDetail.status, 200, "openai runtime journey detail route failed");
|
|
74
|
-
assert.strictEqual(openaiDetail.json.journey.provider_id, "openai_codex", "openai runtime journey detail id mismatch");
|
|
75
|
-
assert.strictEqual(
|
|
76
|
-
openaiDetail.json.journey.stages.some((entry) => entry.stage_id === "quote"),
|
|
77
|
-
true,
|
|
78
|
-
"openai runtime journey quote stage missing"
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
const claudeDetail = await getJson(baseUrl, "/v1/providers/journeys/claude_mcp");
|
|
82
|
-
assert.strictEqual(claudeDetail.status, 200, "claude runtime journey detail route failed");
|
|
83
|
-
assert.strictEqual(claudeDetail.json.journey.provider_id, "claude_mcp", "claude runtime journey detail id mismatch");
|
|
84
|
-
assert.strictEqual(
|
|
85
|
-
claudeDetail.json.journey.stages.some((entry) => entry.stage_id === "execute"),
|
|
86
|
-
true,
|
|
87
|
-
"claude runtime journey execute stage missing"
|
|
88
|
-
);
|
|
89
|
-
} finally {
|
|
90
|
-
await new Promise((resolve) => server.close(resolve));
|
|
91
|
-
if (previousExecutionTargets === undefined) delete process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
92
|
-
else process.env.XYTARA_EXECUTION_TARGETS_JSON = previousExecutionTargets;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
process.stdout.write(`${JSON.stringify({
|
|
96
|
-
ok: true,
|
|
97
|
-
product: "xytara",
|
|
98
|
-
category: "xytara-provider-runtime-journey-verification",
|
|
99
|
-
journey_count: summary.journey_count,
|
|
100
|
-
first_run_ready_journey_count: summary.first_run_ready_journey_count,
|
|
101
|
-
revenue_ready_journey_count: summary.revenue_ready_journey_count,
|
|
102
|
-
proof_followthrough_journey_count: summary.proof_followthrough_journey_count,
|
|
103
|
-
provider_live_anchor_journey_count: summary.provider_live_anchor_journey_count,
|
|
104
|
-
boundary: "provider_runtime_journeys_require_named_quote_fund_execute_prove_paths_with_bounded_provider_claims"
|
|
105
|
-
}, null, 2)}\n`);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
main().catch((error) => {
|
|
109
|
-
console.error(error && error.stack ? error.stack : error);
|
|
110
|
-
process.exit(1);
|
|
111
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const { createServer } = require("../server");
|
|
5
|
+
const {
|
|
6
|
+
buildProviderRuntimeJourneyPack,
|
|
7
|
+
getProviderRuntimeJourneyDetail,
|
|
8
|
+
summarizeProviderRuntimeJourneyPack
|
|
9
|
+
} = require("../lib/provider_runtime_journey_contract");
|
|
10
|
+
|
|
11
|
+
async function getJson(baseUrl, path) {
|
|
12
|
+
const response = await fetch(`${baseUrl}${path}`);
|
|
13
|
+
return {
|
|
14
|
+
status: response.status,
|
|
15
|
+
json: await response.json()
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async function main() {
|
|
20
|
+
const previousExecutionTargets = process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
21
|
+
process.env.XYTARA_EXECUTION_TARGETS_JSON = JSON.stringify([
|
|
22
|
+
{
|
|
23
|
+
target_id: "verify-provider-journey-mcp-target",
|
|
24
|
+
task_ref: "adapter.mcp.invoke",
|
|
25
|
+
endpoint_url: "http://127.0.0.1:65535/execute",
|
|
26
|
+
provider: "xytara_mcp_executor",
|
|
27
|
+
tool_name: "summarize",
|
|
28
|
+
auth_token: "verify-provider-journey-bearer",
|
|
29
|
+
timeout_ms: 1500,
|
|
30
|
+
enabled: true
|
|
31
|
+
}
|
|
32
|
+
]);
|
|
33
|
+
|
|
34
|
+
const pack = buildProviderRuntimeJourneyPack();
|
|
35
|
+
const summary = summarizeProviderRuntimeJourneyPack();
|
|
36
|
+
assert.strictEqual(pack.ok, true, "provider runtime journey pack ok flag missing");
|
|
37
|
+
assert.strictEqual(summary.ok, true, "provider runtime journey summary ok flag missing");
|
|
38
|
+
assert.strictEqual(pack.category, "machine-commerce-provider-runtime-journey-pack", "provider runtime journey category mismatch");
|
|
39
|
+
assert.strictEqual(summary.summary_version, "xytara-provider-runtime-journey-summary-v1", "provider runtime journey summary version mismatch");
|
|
40
|
+
assert.strictEqual(summary.journey_count >= 2, true, "provider runtime journey count missing");
|
|
41
|
+
assert.strictEqual(summary.first_run_ready_journey_count >= 2, true, "provider runtime first-run readiness count missing");
|
|
42
|
+
assert.strictEqual(summary.revenue_ready_journey_count >= 2, true, "provider runtime revenue-ready journey count missing");
|
|
43
|
+
assert.strictEqual(summary.proof_followthrough_journey_count >= 2, true, "provider runtime proof-followthrough journey count missing");
|
|
44
|
+
assert.strictEqual(summary.provider_live_anchor_journey_count >= 1, true, "provider runtime provider-live anchor journey count missing");
|
|
45
|
+
|
|
46
|
+
const openaiJourney = getProviderRuntimeJourneyDetail("openai_codex");
|
|
47
|
+
const claudeJourney = getProviderRuntimeJourneyDetail("claude_mcp");
|
|
48
|
+
assert.strictEqual(Boolean(openaiJourney), true, "openai runtime journey missing");
|
|
49
|
+
assert.strictEqual(Boolean(claudeJourney), true, "claude runtime journey missing");
|
|
50
|
+
assert.strictEqual(openaiJourney.first_run_ready, true, "openai runtime journey first-run readiness missing");
|
|
51
|
+
assert.strictEqual(openaiJourney.proof_followthrough_ready, true, "openai runtime journey proof-followthrough missing");
|
|
52
|
+
assert.strictEqual(claudeJourney.provider_live_anchor_ready, true, "claude runtime journey provider-live anchor missing");
|
|
53
|
+
assert.strictEqual(claudeJourney.readiness_gates.promotion_ready, true, "claude runtime journey promotion readiness missing");
|
|
54
|
+
|
|
55
|
+
const server = createServer();
|
|
56
|
+
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
57
|
+
const address = server.address();
|
|
58
|
+
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
const journeyPack = await getJson(baseUrl, "/v1/providers/journeys");
|
|
62
|
+
assert.strictEqual(journeyPack.status, 200, "provider runtime journeys route failed");
|
|
63
|
+
assert.strictEqual(journeyPack.json.ok, true, "provider runtime journeys route ok flag missing");
|
|
64
|
+
assert.strictEqual(journeyPack.json.journey_count >= 2, true, "provider runtime journeys route count missing");
|
|
65
|
+
|
|
66
|
+
const journeySummary = await getJson(baseUrl, "/v1/providers/journeys/summary");
|
|
67
|
+
assert.strictEqual(journeySummary.status, 200, "provider runtime journeys summary route failed");
|
|
68
|
+
assert.strictEqual(journeySummary.json.ok, true, "provider runtime journeys summary ok flag missing");
|
|
69
|
+
assert.strictEqual(journeySummary.json.first_run_ready_journey_count >= 2, true, "provider runtime journeys summary first-run count missing");
|
|
70
|
+
assert.strictEqual(journeySummary.json.revenue_ready_journey_count >= 2, true, "provider runtime journeys summary revenue-ready count missing");
|
|
71
|
+
|
|
72
|
+
const openaiDetail = await getJson(baseUrl, "/v1/providers/journeys/openai_codex");
|
|
73
|
+
assert.strictEqual(openaiDetail.status, 200, "openai runtime journey detail route failed");
|
|
74
|
+
assert.strictEqual(openaiDetail.json.journey.provider_id, "openai_codex", "openai runtime journey detail id mismatch");
|
|
75
|
+
assert.strictEqual(
|
|
76
|
+
openaiDetail.json.journey.stages.some((entry) => entry.stage_id === "quote"),
|
|
77
|
+
true,
|
|
78
|
+
"openai runtime journey quote stage missing"
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const claudeDetail = await getJson(baseUrl, "/v1/providers/journeys/claude_mcp");
|
|
82
|
+
assert.strictEqual(claudeDetail.status, 200, "claude runtime journey detail route failed");
|
|
83
|
+
assert.strictEqual(claudeDetail.json.journey.provider_id, "claude_mcp", "claude runtime journey detail id mismatch");
|
|
84
|
+
assert.strictEqual(
|
|
85
|
+
claudeDetail.json.journey.stages.some((entry) => entry.stage_id === "execute"),
|
|
86
|
+
true,
|
|
87
|
+
"claude runtime journey execute stage missing"
|
|
88
|
+
);
|
|
89
|
+
} finally {
|
|
90
|
+
await new Promise((resolve) => server.close(resolve));
|
|
91
|
+
if (previousExecutionTargets === undefined) delete process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
92
|
+
else process.env.XYTARA_EXECUTION_TARGETS_JSON = previousExecutionTargets;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
process.stdout.write(`${JSON.stringify({
|
|
96
|
+
ok: true,
|
|
97
|
+
product: "xytara",
|
|
98
|
+
category: "xytara-provider-runtime-journey-verification",
|
|
99
|
+
journey_count: summary.journey_count,
|
|
100
|
+
first_run_ready_journey_count: summary.first_run_ready_journey_count,
|
|
101
|
+
revenue_ready_journey_count: summary.revenue_ready_journey_count,
|
|
102
|
+
proof_followthrough_journey_count: summary.proof_followthrough_journey_count,
|
|
103
|
+
provider_live_anchor_journey_count: summary.provider_live_anchor_journey_count,
|
|
104
|
+
boundary: "provider_runtime_journeys_require_named_quote_fund_execute_prove_paths_with_bounded_provider_claims"
|
|
105
|
+
}, null, 2)}\n`);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
main().catch((error) => {
|
|
109
|
+
console.error(error && error.stack ? error.stack : error);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
});
|
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const assert = require("assert");
|
|
4
|
-
const {
|
|
5
|
-
buildRevenueLaunchPathPack,
|
|
6
|
-
getRevenueLaunchPathDetail,
|
|
7
|
-
summarizeRevenueLaunchPathPack
|
|
8
|
-
} = require("../lib/revenue_launch_path_contract");
|
|
9
|
-
const { createServer } = require("../server");
|
|
10
|
-
|
|
11
|
-
async function getJson(baseUrl, routePath) {
|
|
12
|
-
const response = await fetch(`${baseUrl}${routePath}`);
|
|
13
|
-
return {
|
|
14
|
-
status: response.status,
|
|
15
|
-
json: await response.json()
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function assertSummary(summary) {
|
|
20
|
-
assert.strictEqual(summary.ok, true, "summary should be ok");
|
|
21
|
-
assert.strictEqual(summary.path_count >= 3, true, "revenue launch path count missing");
|
|
22
|
-
assert.strictEqual(summary.first_money_in_path_count >= 2, true, "first money-in path count missing");
|
|
23
|
-
assert.strictEqual(summary.paid_execution_path_count >= 2, true, "paid execution path count missing");
|
|
24
|
-
assert.strictEqual(summary.proof_followthrough_path_count >= 3, true, "proof followthrough path count missing");
|
|
25
|
-
assert.strictEqual(summary.refund_or_reversal_path_count >= 2, true, "refund or reversal path count missing");
|
|
26
|
-
assert.strictEqual(summary.operator_reconciliation_path_count >= 3, true, "operator reconciliation path count missing");
|
|
27
|
-
assert.strictEqual(summary.hosted_checkout_path_count >= 2, true, "hosted checkout path count missing");
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function assertPack(pack) {
|
|
31
|
-
assert.strictEqual(pack.ok, true, "pack should be ok");
|
|
32
|
-
assertSummary(pack);
|
|
33
|
-
assert.strictEqual(Array.isArray(pack.paths), true, "paths missing");
|
|
34
|
-
assert.strictEqual(Boolean(getRevenueLaunchPathDetail("hosted_checkout_credits_execution_proof")), true, "hosted checkout path missing");
|
|
35
|
-
assert.strictEqual(Boolean(getRevenueLaunchPathDetail("direct_x402_execution_proof")), true, "direct x402 path missing");
|
|
36
|
-
assert.strictEqual(Boolean(getRevenueLaunchPathDetail("refund_reversal_operator_reconciliation")), true, "refund reversal path missing");
|
|
37
|
-
assert.strictEqual(
|
|
38
|
-
pack.paths.every((entry) => Array.isArray(entry.required_operator_evidence) && entry.required_operator_evidence.length >= 4),
|
|
39
|
-
true,
|
|
40
|
-
"operator evidence requirements missing"
|
|
41
|
-
);
|
|
42
|
-
assert.strictEqual(
|
|
43
|
-
pack.paths.every((entry) => typeof entry.claim_boundary === "string" && entry.claim_boundary.includes("claim_")),
|
|
44
|
-
true,
|
|
45
|
-
"claim boundaries missing"
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
async function main() {
|
|
50
|
-
const pack = buildRevenueLaunchPathPack();
|
|
51
|
-
const summary = summarizeRevenueLaunchPathPack();
|
|
52
|
-
assertPack(pack);
|
|
53
|
-
assertSummary(summary);
|
|
54
|
-
|
|
55
|
-
const server = createServer();
|
|
56
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
57
|
-
const address = server.address();
|
|
58
|
-
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
const packResponse = await getJson(baseUrl, "/v1/revenue-launch/paths");
|
|
62
|
-
assert.strictEqual(packResponse.status, 200, "revenue launch path pack route failed");
|
|
63
|
-
assertPack(packResponse.json);
|
|
64
|
-
|
|
65
|
-
const summaryResponse = await getJson(baseUrl, "/v1/revenue-launch/paths/summary");
|
|
66
|
-
assert.strictEqual(summaryResponse.status, 200, "revenue launch path summary route failed");
|
|
67
|
-
assertSummary(summaryResponse.json);
|
|
68
|
-
|
|
69
|
-
const hostedCheckoutResponse = await getJson(baseUrl, "/v1/revenue-launch/paths/hosted_checkout_credits_execution_proof");
|
|
70
|
-
assert.strictEqual(hostedCheckoutResponse.status, 200, "hosted checkout revenue launch detail failed");
|
|
71
|
-
assert.strictEqual(hostedCheckoutResponse.json.path.first_money_in_ready, true, "hosted checkout money-in readiness missing");
|
|
72
|
-
assert.strictEqual(hostedCheckoutResponse.json.path.refund_or_reversal_ready, true, "hosted checkout reversal readiness missing");
|
|
73
|
-
|
|
74
|
-
const directX402Response = await getJson(baseUrl, "/v1/revenue-launch/paths/direct_x402_execution_proof");
|
|
75
|
-
assert.strictEqual(directX402Response.status, 200, "direct x402 revenue launch detail failed");
|
|
76
|
-
assert.strictEqual(directX402Response.json.path.paid_execution_ready, true, "direct x402 paid execution readiness missing");
|
|
77
|
-
assert.strictEqual(directX402Response.json.path.proof_followthrough_ready, true, "direct x402 proof readiness missing");
|
|
78
|
-
|
|
79
|
-
const reversalResponse = await getJson(baseUrl, "/v1/revenue-launch/paths/refund_reversal_operator_reconciliation");
|
|
80
|
-
assert.strictEqual(reversalResponse.status, 200, "refund reversal revenue launch detail failed");
|
|
81
|
-
assert.strictEqual(reversalResponse.json.path.refund_or_reversal_ready, true, "refund reversal readiness missing");
|
|
82
|
-
assert.strictEqual(reversalResponse.json.path.operator_reconciliation_ready, true, "refund reversal operator reconciliation missing");
|
|
83
|
-
} finally {
|
|
84
|
-
await new Promise((resolve) => server.close(resolve));
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
console.log(JSON.stringify({
|
|
88
|
-
ok: true,
|
|
89
|
-
product: "xytara",
|
|
90
|
-
category: "machine-commerce-revenue-launch-path-verification",
|
|
91
|
-
verification_version: "xytara-revenue-launch-path-verification-v1",
|
|
92
|
-
path_count: summary.path_count,
|
|
93
|
-
first_money_in_path_count: summary.first_money_in_path_count,
|
|
94
|
-
paid_execution_path_count: summary.paid_execution_path_count,
|
|
95
|
-
proof_followthrough_path_count: summary.proof_followthrough_path_count,
|
|
96
|
-
refund_or_reversal_path_count: summary.refund_or_reversal_path_count,
|
|
97
|
-
operator_reconciliation_path_count: summary.operator_reconciliation_path_count,
|
|
98
|
-
boundary: "day_one_revenue_launch_claims_require_money_in_paid_execution_proof_reversal_and_operator_reconciliation_paths"
|
|
99
|
-
}, null, 2));
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
main().catch((error) => {
|
|
103
|
-
console.error(error);
|
|
104
|
-
process.exit(1);
|
|
105
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const {
|
|
5
|
+
buildRevenueLaunchPathPack,
|
|
6
|
+
getRevenueLaunchPathDetail,
|
|
7
|
+
summarizeRevenueLaunchPathPack
|
|
8
|
+
} = require("../lib/revenue_launch_path_contract");
|
|
9
|
+
const { createServer } = require("../server");
|
|
10
|
+
|
|
11
|
+
async function getJson(baseUrl, routePath) {
|
|
12
|
+
const response = await fetch(`${baseUrl}${routePath}`);
|
|
13
|
+
return {
|
|
14
|
+
status: response.status,
|
|
15
|
+
json: await response.json()
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function assertSummary(summary) {
|
|
20
|
+
assert.strictEqual(summary.ok, true, "summary should be ok");
|
|
21
|
+
assert.strictEqual(summary.path_count >= 3, true, "revenue launch path count missing");
|
|
22
|
+
assert.strictEqual(summary.first_money_in_path_count >= 2, true, "first money-in path count missing");
|
|
23
|
+
assert.strictEqual(summary.paid_execution_path_count >= 2, true, "paid execution path count missing");
|
|
24
|
+
assert.strictEqual(summary.proof_followthrough_path_count >= 3, true, "proof followthrough path count missing");
|
|
25
|
+
assert.strictEqual(summary.refund_or_reversal_path_count >= 2, true, "refund or reversal path count missing");
|
|
26
|
+
assert.strictEqual(summary.operator_reconciliation_path_count >= 3, true, "operator reconciliation path count missing");
|
|
27
|
+
assert.strictEqual(summary.hosted_checkout_path_count >= 2, true, "hosted checkout path count missing");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function assertPack(pack) {
|
|
31
|
+
assert.strictEqual(pack.ok, true, "pack should be ok");
|
|
32
|
+
assertSummary(pack);
|
|
33
|
+
assert.strictEqual(Array.isArray(pack.paths), true, "paths missing");
|
|
34
|
+
assert.strictEqual(Boolean(getRevenueLaunchPathDetail("hosted_checkout_credits_execution_proof")), true, "hosted checkout path missing");
|
|
35
|
+
assert.strictEqual(Boolean(getRevenueLaunchPathDetail("direct_x402_execution_proof")), true, "direct x402 path missing");
|
|
36
|
+
assert.strictEqual(Boolean(getRevenueLaunchPathDetail("refund_reversal_operator_reconciliation")), true, "refund reversal path missing");
|
|
37
|
+
assert.strictEqual(
|
|
38
|
+
pack.paths.every((entry) => Array.isArray(entry.required_operator_evidence) && entry.required_operator_evidence.length >= 4),
|
|
39
|
+
true,
|
|
40
|
+
"operator evidence requirements missing"
|
|
41
|
+
);
|
|
42
|
+
assert.strictEqual(
|
|
43
|
+
pack.paths.every((entry) => typeof entry.claim_boundary === "string" && entry.claim_boundary.includes("claim_")),
|
|
44
|
+
true,
|
|
45
|
+
"claim boundaries missing"
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function main() {
|
|
50
|
+
const pack = buildRevenueLaunchPathPack();
|
|
51
|
+
const summary = summarizeRevenueLaunchPathPack();
|
|
52
|
+
assertPack(pack);
|
|
53
|
+
assertSummary(summary);
|
|
54
|
+
|
|
55
|
+
const server = createServer();
|
|
56
|
+
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
57
|
+
const address = server.address();
|
|
58
|
+
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
const packResponse = await getJson(baseUrl, "/v1/revenue-launch/paths");
|
|
62
|
+
assert.strictEqual(packResponse.status, 200, "revenue launch path pack route failed");
|
|
63
|
+
assertPack(packResponse.json);
|
|
64
|
+
|
|
65
|
+
const summaryResponse = await getJson(baseUrl, "/v1/revenue-launch/paths/summary");
|
|
66
|
+
assert.strictEqual(summaryResponse.status, 200, "revenue launch path summary route failed");
|
|
67
|
+
assertSummary(summaryResponse.json);
|
|
68
|
+
|
|
69
|
+
const hostedCheckoutResponse = await getJson(baseUrl, "/v1/revenue-launch/paths/hosted_checkout_credits_execution_proof");
|
|
70
|
+
assert.strictEqual(hostedCheckoutResponse.status, 200, "hosted checkout revenue launch detail failed");
|
|
71
|
+
assert.strictEqual(hostedCheckoutResponse.json.path.first_money_in_ready, true, "hosted checkout money-in readiness missing");
|
|
72
|
+
assert.strictEqual(hostedCheckoutResponse.json.path.refund_or_reversal_ready, true, "hosted checkout reversal readiness missing");
|
|
73
|
+
|
|
74
|
+
const directX402Response = await getJson(baseUrl, "/v1/revenue-launch/paths/direct_x402_execution_proof");
|
|
75
|
+
assert.strictEqual(directX402Response.status, 200, "direct x402 revenue launch detail failed");
|
|
76
|
+
assert.strictEqual(directX402Response.json.path.paid_execution_ready, true, "direct x402 paid execution readiness missing");
|
|
77
|
+
assert.strictEqual(directX402Response.json.path.proof_followthrough_ready, true, "direct x402 proof readiness missing");
|
|
78
|
+
|
|
79
|
+
const reversalResponse = await getJson(baseUrl, "/v1/revenue-launch/paths/refund_reversal_operator_reconciliation");
|
|
80
|
+
assert.strictEqual(reversalResponse.status, 200, "refund reversal revenue launch detail failed");
|
|
81
|
+
assert.strictEqual(reversalResponse.json.path.refund_or_reversal_ready, true, "refund reversal readiness missing");
|
|
82
|
+
assert.strictEqual(reversalResponse.json.path.operator_reconciliation_ready, true, "refund reversal operator reconciliation missing");
|
|
83
|
+
} finally {
|
|
84
|
+
await new Promise((resolve) => server.close(resolve));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
console.log(JSON.stringify({
|
|
88
|
+
ok: true,
|
|
89
|
+
product: "xytara",
|
|
90
|
+
category: "machine-commerce-revenue-launch-path-verification",
|
|
91
|
+
verification_version: "xytara-revenue-launch-path-verification-v1",
|
|
92
|
+
path_count: summary.path_count,
|
|
93
|
+
first_money_in_path_count: summary.first_money_in_path_count,
|
|
94
|
+
paid_execution_path_count: summary.paid_execution_path_count,
|
|
95
|
+
proof_followthrough_path_count: summary.proof_followthrough_path_count,
|
|
96
|
+
refund_or_reversal_path_count: summary.refund_or_reversal_path_count,
|
|
97
|
+
operator_reconciliation_path_count: summary.operator_reconciliation_path_count,
|
|
98
|
+
boundary: "day_one_revenue_launch_claims_require_money_in_paid_execution_proof_reversal_and_operator_reconciliation_paths"
|
|
99
|
+
}, null, 2));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
main().catch((error) => {
|
|
103
|
+
console.error(error);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
});
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const assert = require("assert");
|
|
4
|
-
const { once } = require("events");
|
|
5
|
-
const { createServer } = require("../server");
|
|
6
|
-
|
|
7
|
-
async function getJson(baseUrl, pathname) {
|
|
8
|
-
const response = await fetch(`${baseUrl}${pathname}`);
|
|
9
|
-
return {
|
|
10
|
-
status: response.status,
|
|
11
|
-
json: await response.json()
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
async function main() {
|
|
16
|
-
const server = createServer();
|
|
17
|
-
server.listen(0, "127.0.0.1");
|
|
18
|
-
await once(server, "listening");
|
|
19
|
-
|
|
20
|
-
const address = server.address();
|
|
21
|
-
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
22
|
-
|
|
23
|
-
try {
|
|
24
|
-
const summary = await getJson(baseUrl, "/v1/runtime/durability/summary");
|
|
25
|
-
assert.strictEqual(summary.status, 200, "runtime durability summary route failed");
|
|
26
|
-
assert.strictEqual(summary.json.ok, true, "runtime durability summary ok flag missing");
|
|
27
|
-
assert.strictEqual(summary.json.category, "xytara-runtime-durability-summary", "runtime durability summary category missing");
|
|
28
|
-
assert.strictEqual(typeof summary.json.recovery_posture, "string", "runtime durability summary posture missing");
|
|
29
|
-
assert.strictEqual(typeof summary.json.blocker_count, "number", "runtime durability summary blocker count missing");
|
|
30
|
-
assert.strictEqual(Array.isArray(summary.json.blockers), true, "runtime durability summary blockers missing");
|
|
31
|
-
assert.strictEqual(summary.json.blocker_count, summary.json.blockers.length, "runtime durability summary blocker count mismatch");
|
|
32
|
-
assert.strictEqual(typeof summary.json.enabled, "boolean", "runtime durability summary enabled flag missing");
|
|
33
|
-
assert.strictEqual(typeof summary.json.inspect_ref, "string", "runtime durability summary inspect ref missing");
|
|
34
|
-
|
|
35
|
-
console.log(JSON.stringify({
|
|
36
|
-
ok: true,
|
|
37
|
-
product: "xytara",
|
|
38
|
-
category: "machine-commerce-runtime-durability-summary-verification",
|
|
39
|
-
verification_version: "xytara-runtime-durability-summary-verification-v1",
|
|
40
|
-
blocker_count: summary.json.blocker_count,
|
|
41
|
-
recovery_posture: summary.json.recovery_posture,
|
|
42
|
-
boundary: "runtime_durability_summary_should_be_publicly_inspectable_and_counted"
|
|
43
|
-
}, null, 2));
|
|
44
|
-
} finally {
|
|
45
|
-
server.close();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
main().catch((error) => {
|
|
50
|
-
console.error(error && error.stack ? error.stack : error);
|
|
51
|
-
process.exit(1);
|
|
52
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const { once } = require("events");
|
|
5
|
+
const { createServer } = require("../server");
|
|
6
|
+
|
|
7
|
+
async function getJson(baseUrl, pathname) {
|
|
8
|
+
const response = await fetch(`${baseUrl}${pathname}`);
|
|
9
|
+
return {
|
|
10
|
+
status: response.status,
|
|
11
|
+
json: await response.json()
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async function main() {
|
|
16
|
+
const server = createServer();
|
|
17
|
+
server.listen(0, "127.0.0.1");
|
|
18
|
+
await once(server, "listening");
|
|
19
|
+
|
|
20
|
+
const address = server.address();
|
|
21
|
+
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
const summary = await getJson(baseUrl, "/v1/runtime/durability/summary");
|
|
25
|
+
assert.strictEqual(summary.status, 200, "runtime durability summary route failed");
|
|
26
|
+
assert.strictEqual(summary.json.ok, true, "runtime durability summary ok flag missing");
|
|
27
|
+
assert.strictEqual(summary.json.category, "xytara-runtime-durability-summary", "runtime durability summary category missing");
|
|
28
|
+
assert.strictEqual(typeof summary.json.recovery_posture, "string", "runtime durability summary posture missing");
|
|
29
|
+
assert.strictEqual(typeof summary.json.blocker_count, "number", "runtime durability summary blocker count missing");
|
|
30
|
+
assert.strictEqual(Array.isArray(summary.json.blockers), true, "runtime durability summary blockers missing");
|
|
31
|
+
assert.strictEqual(summary.json.blocker_count, summary.json.blockers.length, "runtime durability summary blocker count mismatch");
|
|
32
|
+
assert.strictEqual(typeof summary.json.enabled, "boolean", "runtime durability summary enabled flag missing");
|
|
33
|
+
assert.strictEqual(typeof summary.json.inspect_ref, "string", "runtime durability summary inspect ref missing");
|
|
34
|
+
|
|
35
|
+
console.log(JSON.stringify({
|
|
36
|
+
ok: true,
|
|
37
|
+
product: "xytara",
|
|
38
|
+
category: "machine-commerce-runtime-durability-summary-verification",
|
|
39
|
+
verification_version: "xytara-runtime-durability-summary-verification-v1",
|
|
40
|
+
blocker_count: summary.json.blocker_count,
|
|
41
|
+
recovery_posture: summary.json.recovery_posture,
|
|
42
|
+
boundary: "runtime_durability_summary_should_be_publicly_inspectable_and_counted"
|
|
43
|
+
}, null, 2));
|
|
44
|
+
} finally {
|
|
45
|
+
server.close();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
main().catch((error) => {
|
|
50
|
+
console.error(error && error.stack ? error.stack : error);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
});
|