@hashgraphonline/standards-sdk 0.1.189 → 0.1.191
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/hcs-25/adapters/agentverse.d.ts.map +1 -1
- package/dist/browser/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/browser/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser/hcs-25/adapters/availability.d.ts.map +1 -1
- package/dist/browser/hcs-25/adapters/connectivity.d.ts.map +1 -1
- package/dist/browser/hcs-25/adapters/ethos.d.ts.map +1 -1
- package/dist/browser/hcs-25/adapters/index.d.ts +1 -0
- package/dist/browser/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/browser/hcs-25/adapters/model-evals.d.ts.map +1 -1
- package/dist/browser/hcs-25/adapters/simple-evals.d.ts.map +1 -1
- package/dist/browser/hcs-25/adapters/x402.d.ts.map +1 -1
- package/dist/browser/hcs-25/collectors/acp.d.ts +42 -0
- package/dist/browser/hcs-25/collectors/acp.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/agentverse.d.ts +37 -0
- package/dist/browser/hcs-25/collectors/agentverse.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/browser/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/availability.d.ts +29 -0
- package/dist/browser/hcs-25/collectors/availability.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/catalog.d.ts +64 -0
- package/dist/browser/hcs-25/collectors/catalog.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/connectivity.d.ts +49 -0
- package/dist/browser/hcs-25/collectors/connectivity.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/endpoints.d.ts +9 -0
- package/dist/browser/hcs-25/collectors/endpoints.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/erc8004.d.ts +104 -0
- package/dist/browser/hcs-25/collectors/erc8004.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/ethos.d.ts +95 -0
- package/dist/browser/hcs-25/collectors/ethos.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/freshness.d.ts +36 -0
- package/dist/browser/hcs-25/collectors/freshness.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/http.d.ts +67 -0
- package/dist/browser/hcs-25/collectors/http.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/index.d.ts +22 -0
- package/dist/browser/hcs-25/collectors/index.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/merge.d.ts +11 -0
- package/dist/browser/hcs-25/collectors/merge.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/model-evals.d.ts +315 -0
- package/dist/browser/hcs-25/collectors/model-evals.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/oss-popularity.d.ts +51 -0
- package/dist/browser/hcs-25/collectors/oss-popularity.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/output-verification.d.ts +37 -0
- package/dist/browser/hcs-25/collectors/output-verification.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/pipeline.d.ts +19 -0
- package/dist/browser/hcs-25/collectors/pipeline.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/runner.d.ts +20 -0
- package/dist/browser/hcs-25/collectors/runner.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/simple-evals.d.ts +91 -0
- package/dist/browser/hcs-25/collectors/simple-evals.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/types.d.ts +113 -0
- package/dist/browser/hcs-25/collectors/types.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/x402-onchain.d.ts +105 -0
- package/dist/browser/hcs-25/collectors/x402-onchain.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/x402.d.ts +48 -0
- package/dist/browser/hcs-25/collectors/x402.d.ts.map +1 -0
- package/dist/browser/hcs-25/index.d.ts +1 -0
- package/dist/browser/hcs-25/index.d.ts.map +1 -1
- package/dist/browser/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/browser/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser/hcs-25/signals/index.d.ts +1 -0
- package/dist/browser/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/browser/hcs-25/signals/marketplace.d.ts +6 -6
- package/dist/browser/hcs-25/signals/marketplace.d.ts.map +1 -1
- package/dist/browser/hcs-25/signals/model-evals.d.ts +12 -12
- package/dist/browser/hcs-25/signals/model-evals.d.ts.map +1 -1
- package/dist/browser/hcs-25/signals/operational.d.ts +15 -12
- package/dist/browser/hcs-25/signals/operational.d.ts.map +1 -1
- package/dist/browser/hcs-25/signals/simple-evals.d.ts +1 -1
- package/dist/browser/hcs-25/signals/simple-evals.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/agentverse.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/browser-root/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/adapters/availability.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/connectivity.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/ethos.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/index.d.ts +1 -0
- package/dist/browser-root/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/model-evals.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/simple-evals.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/x402.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/collectors/acp.d.ts +42 -0
- package/dist/browser-root/hcs-25/collectors/acp.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/agentverse.d.ts +37 -0
- package/dist/browser-root/hcs-25/collectors/agentverse.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/browser-root/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/availability.d.ts +29 -0
- package/dist/browser-root/hcs-25/collectors/availability.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/catalog.d.ts +64 -0
- package/dist/browser-root/hcs-25/collectors/catalog.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/connectivity.d.ts +49 -0
- package/dist/browser-root/hcs-25/collectors/connectivity.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/endpoints.d.ts +9 -0
- package/dist/browser-root/hcs-25/collectors/endpoints.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/erc8004.d.ts +104 -0
- package/dist/browser-root/hcs-25/collectors/erc8004.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/ethos.d.ts +95 -0
- package/dist/browser-root/hcs-25/collectors/ethos.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/freshness.d.ts +36 -0
- package/dist/browser-root/hcs-25/collectors/freshness.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/http.d.ts +67 -0
- package/dist/browser-root/hcs-25/collectors/http.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/index.d.ts +22 -0
- package/dist/browser-root/hcs-25/collectors/index.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/merge.d.ts +11 -0
- package/dist/browser-root/hcs-25/collectors/merge.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/model-evals.d.ts +315 -0
- package/dist/browser-root/hcs-25/collectors/model-evals.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/oss-popularity.d.ts +51 -0
- package/dist/browser-root/hcs-25/collectors/oss-popularity.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/output-verification.d.ts +37 -0
- package/dist/browser-root/hcs-25/collectors/output-verification.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/pipeline.d.ts +19 -0
- package/dist/browser-root/hcs-25/collectors/pipeline.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/runner.d.ts +20 -0
- package/dist/browser-root/hcs-25/collectors/runner.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/simple-evals.d.ts +91 -0
- package/dist/browser-root/hcs-25/collectors/simple-evals.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/types.d.ts +113 -0
- package/dist/browser-root/hcs-25/collectors/types.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/x402-onchain.d.ts +105 -0
- package/dist/browser-root/hcs-25/collectors/x402-onchain.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/x402.d.ts +48 -0
- package/dist/browser-root/hcs-25/collectors/x402.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/index.d.ts +1 -0
- package/dist/browser-root/hcs-25/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/browser-root/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/signals/index.d.ts +1 -0
- package/dist/browser-root/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/signals/marketplace.d.ts +6 -6
- package/dist/browser-root/hcs-25/signals/marketplace.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/signals/model-evals.d.ts +12 -12
- package/dist/browser-root/hcs-25/signals/model-evals.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/signals/operational.d.ts +15 -12
- package/dist/browser-root/hcs-25/signals/operational.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/signals/simple-evals.d.ts +1 -1
- package/dist/browser-root/hcs-25/signals/simple-evals.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/agentverse.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/cjs/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/cjs/hcs-25/adapters/availability.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/connectivity.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/ethos.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/index.d.ts +1 -0
- package/dist/cjs/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/model-evals.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/simple-evals.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/x402.d.ts.map +1 -1
- package/dist/cjs/hcs-25/collectors/acp.d.ts +42 -0
- package/dist/cjs/hcs-25/collectors/acp.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/agentverse.d.ts +37 -0
- package/dist/cjs/hcs-25/collectors/agentverse.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/cjs/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/availability.d.ts +29 -0
- package/dist/cjs/hcs-25/collectors/availability.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/catalog.d.ts +64 -0
- package/dist/cjs/hcs-25/collectors/catalog.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/connectivity.d.ts +49 -0
- package/dist/cjs/hcs-25/collectors/connectivity.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/endpoints.d.ts +9 -0
- package/dist/cjs/hcs-25/collectors/endpoints.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/erc8004.d.ts +104 -0
- package/dist/cjs/hcs-25/collectors/erc8004.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/ethos.d.ts +95 -0
- package/dist/cjs/hcs-25/collectors/ethos.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/freshness.d.ts +36 -0
- package/dist/cjs/hcs-25/collectors/freshness.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/http.d.ts +67 -0
- package/dist/cjs/hcs-25/collectors/http.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/index.d.ts +22 -0
- package/dist/cjs/hcs-25/collectors/index.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/merge.d.ts +11 -0
- package/dist/cjs/hcs-25/collectors/merge.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/model-evals.d.ts +315 -0
- package/dist/cjs/hcs-25/collectors/model-evals.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/oss-popularity.d.ts +51 -0
- package/dist/cjs/hcs-25/collectors/oss-popularity.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/output-verification.d.ts +37 -0
- package/dist/cjs/hcs-25/collectors/output-verification.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/pipeline.d.ts +19 -0
- package/dist/cjs/hcs-25/collectors/pipeline.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/runner.d.ts +20 -0
- package/dist/cjs/hcs-25/collectors/runner.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/simple-evals.d.ts +91 -0
- package/dist/cjs/hcs-25/collectors/simple-evals.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/types.d.ts +113 -0
- package/dist/cjs/hcs-25/collectors/types.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/x402-onchain.d.ts +105 -0
- package/dist/cjs/hcs-25/collectors/x402-onchain.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/x402.d.ts +48 -0
- package/dist/cjs/hcs-25/collectors/x402.d.ts.map +1 -0
- package/dist/cjs/hcs-25/index.d.ts +1 -0
- package/dist/cjs/hcs-25/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/cjs/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/cjs/hcs-25/signals/index.d.ts +1 -0
- package/dist/cjs/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/signals/marketplace.d.ts +6 -6
- package/dist/cjs/hcs-25/signals/marketplace.d.ts.map +1 -1
- package/dist/cjs/hcs-25/signals/model-evals.d.ts +12 -12
- package/dist/cjs/hcs-25/signals/model-evals.d.ts.map +1 -1
- package/dist/cjs/hcs-25/signals/operational.d.ts +15 -12
- package/dist/cjs/hcs-25/signals/operational.d.ts.map +1 -1
- package/dist/cjs/hcs-25/signals/simple-evals.d.ts +1 -1
- package/dist/cjs/hcs-25/signals/simple-evals.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-25/adapters/agentverse.d.ts.map +1 -1
- package/dist/es/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/es/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/es/hcs-25/adapters/availability.d.ts.map +1 -1
- package/dist/es/hcs-25/adapters/connectivity.d.ts.map +1 -1
- package/dist/es/hcs-25/adapters/ethos.d.ts.map +1 -1
- package/dist/es/hcs-25/adapters/index.d.ts +1 -0
- package/dist/es/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/es/hcs-25/adapters/model-evals.d.ts.map +1 -1
- package/dist/es/hcs-25/adapters/simple-evals.d.ts.map +1 -1
- package/dist/es/hcs-25/adapters/x402.d.ts.map +1 -1
- package/dist/es/hcs-25/collectors/acp.d.ts +42 -0
- package/dist/es/hcs-25/collectors/acp.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/agentverse.d.ts +37 -0
- package/dist/es/hcs-25/collectors/agentverse.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/es/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/availability.d.ts +29 -0
- package/dist/es/hcs-25/collectors/availability.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/catalog.d.ts +64 -0
- package/dist/es/hcs-25/collectors/catalog.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/connectivity.d.ts +49 -0
- package/dist/es/hcs-25/collectors/connectivity.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/endpoints.d.ts +9 -0
- package/dist/es/hcs-25/collectors/endpoints.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/erc8004.d.ts +104 -0
- package/dist/es/hcs-25/collectors/erc8004.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/ethos.d.ts +95 -0
- package/dist/es/hcs-25/collectors/ethos.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/freshness.d.ts +36 -0
- package/dist/es/hcs-25/collectors/freshness.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/http.d.ts +67 -0
- package/dist/es/hcs-25/collectors/http.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/index.d.ts +22 -0
- package/dist/es/hcs-25/collectors/index.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/merge.d.ts +11 -0
- package/dist/es/hcs-25/collectors/merge.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/model-evals.d.ts +315 -0
- package/dist/es/hcs-25/collectors/model-evals.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/oss-popularity.d.ts +51 -0
- package/dist/es/hcs-25/collectors/oss-popularity.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/output-verification.d.ts +37 -0
- package/dist/es/hcs-25/collectors/output-verification.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/pipeline.d.ts +19 -0
- package/dist/es/hcs-25/collectors/pipeline.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/runner.d.ts +20 -0
- package/dist/es/hcs-25/collectors/runner.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/simple-evals.d.ts +91 -0
- package/dist/es/hcs-25/collectors/simple-evals.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/types.d.ts +113 -0
- package/dist/es/hcs-25/collectors/types.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/x402-onchain.d.ts +105 -0
- package/dist/es/hcs-25/collectors/x402-onchain.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/x402.d.ts +48 -0
- package/dist/es/hcs-25/collectors/x402.d.ts.map +1 -0
- package/dist/es/hcs-25/index.d.ts +1 -0
- package/dist/es/hcs-25/index.d.ts.map +1 -1
- package/dist/es/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/es/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/es/hcs-25/signals/index.d.ts +1 -0
- package/dist/es/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/es/hcs-25/signals/marketplace.d.ts +6 -6
- package/dist/es/hcs-25/signals/marketplace.d.ts.map +1 -1
- package/dist/es/hcs-25/signals/model-evals.d.ts +12 -12
- package/dist/es/hcs-25/signals/model-evals.d.ts.map +1 -1
- package/dist/es/hcs-25/signals/operational.d.ts +15 -12
- package/dist/es/hcs-25/signals/operational.d.ts.map +1 -1
- package/dist/es/hcs-25/signals/simple-evals.d.ts +1 -1
- package/dist/es/hcs-25/signals/simple-evals.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +144 -58
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +2 -2
- package/dist/es/standards-sdk.es103.js +2 -2
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es106.js +1 -1
- package/dist/es/standards-sdk.es108.js +2 -2
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es111.js +2 -2
- package/dist/es/standards-sdk.es115.js +3 -3
- package/dist/es/standards-sdk.es116.js +4 -4
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +22 -4
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +15 -12
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +176 -240
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +42 -468
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +29 -103
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +185 -145
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +13 -33
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +45 -10
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +120 -168
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +158 -26
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +1 -1
- package/dist/es/standards-sdk.es130.js +166 -19
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +360 -140
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +371 -180
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +210 -766
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +229 -11
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +368 -556
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +108 -612
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +251 -12
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +1330 -2
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +126 -79
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es140.js +264 -32
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +111 -2
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +244 -227
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +436 -1098
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +92 -293
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +157 -419
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +30 -351
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +9 -1119
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +160 -186
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +27 -1565
- package/dist/es/standards-sdk.es149.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es150.js +16 -1160
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +157 -14
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +191 -440
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +764 -233
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +13 -4
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +567 -81
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +617 -78
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +13 -60
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +2 -2547
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +73 -145
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +6 -6
- package/dist/es/standards-sdk.es160.js +40 -7
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +2 -86
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +225 -55
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +1137 -191
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +303 -23
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +419 -55
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +351 -91
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +1113 -40
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +200 -196
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +1561 -50
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +1161 -44
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +14 -53
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +443 -41
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +242 -105
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +4 -54
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +79 -42
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +87 -72
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +60 -68
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +2545 -42
- package/dist/es/standards-sdk.es178.js.map +1 -1
- package/dist/es/standards-sdk.es179.js +157 -34
- package/dist/es/standards-sdk.es179.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +13 -13
- package/dist/es/standards-sdk.es180.js +7 -30
- package/dist/es/standards-sdk.es180.js.map +1 -1
- package/dist/es/standards-sdk.es181.js +86 -34
- package/dist/es/standards-sdk.es181.js.map +1 -1
- package/dist/es/standards-sdk.es182.js +65 -48
- package/dist/es/standards-sdk.es182.js.map +1 -1
- package/dist/es/standards-sdk.es183.js +27 -138
- package/dist/es/standards-sdk.es183.js.map +1 -1
- package/dist/es/standards-sdk.es184.js +191 -37
- package/dist/es/standards-sdk.es184.js.map +1 -1
- package/dist/es/standards-sdk.es185.js +17 -12473
- package/dist/es/standards-sdk.es185.js.map +1 -1
- package/dist/es/standards-sdk.es186.js +56 -53
- package/dist/es/standards-sdk.es186.js.map +1 -1
- package/dist/es/standards-sdk.es187.js +104 -100
- package/dist/es/standards-sdk.es187.js.map +1 -1
- package/dist/es/standards-sdk.es188.js +43 -75
- package/dist/es/standards-sdk.es188.js.map +1 -1
- package/dist/es/standards-sdk.es189.js +55 -197
- package/dist/es/standards-sdk.es189.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +10 -10
- package/dist/es/standards-sdk.es190.js +229 -669
- package/dist/es/standards-sdk.es190.js.map +1 -1
- package/dist/es/standards-sdk.es191.js +67 -166
- package/dist/es/standards-sdk.es191.js.map +1 -1
- package/dist/es/standards-sdk.es192.js +45 -317
- package/dist/es/standards-sdk.es192.js.map +1 -1
- package/dist/es/standards-sdk.es193.js +59 -342
- package/dist/es/standards-sdk.es193.js.map +1 -1
- package/dist/es/standards-sdk.es194.js +45 -448
- package/dist/es/standards-sdk.es194.js.map +1 -1
- package/dist/es/standards-sdk.es195.js +117 -325
- package/dist/es/standards-sdk.es195.js.map +1 -1
- package/dist/es/standards-sdk.es196.js +51 -69
- package/dist/es/standards-sdk.es196.js.map +1 -1
- package/dist/es/standards-sdk.es197.js +54 -67
- package/dist/es/standards-sdk.es197.js.map +1 -1
- package/dist/es/standards-sdk.es198.js +72 -17
- package/dist/es/standards-sdk.es198.js.map +1 -1
- package/dist/es/standards-sdk.es199.js +75 -139
- package/dist/es/standards-sdk.es199.js.map +1 -1
- package/dist/es/standards-sdk.es2.js +2 -2
- package/dist/es/standards-sdk.es20.js +1 -1
- package/dist/es/standards-sdk.es200.js +44 -517
- package/dist/es/standards-sdk.es200.js.map +1 -1
- package/dist/es/standards-sdk.es201.js +33 -256
- package/dist/es/standards-sdk.es201.js.map +1 -1
- package/dist/es/standards-sdk.es202.js +30 -196
- package/dist/es/standards-sdk.es202.js.map +1 -1
- package/dist/es/standards-sdk.es203.js +34 -119
- package/dist/es/standards-sdk.es203.js.map +1 -1
- package/dist/es/standards-sdk.es204.js +48 -152
- package/dist/es/standards-sdk.es204.js.map +1 -1
- package/dist/es/standards-sdk.es205.js +126 -172
- package/dist/es/standards-sdk.es205.js.map +1 -1
- package/dist/es/standards-sdk.es206.js +34 -676
- package/dist/es/standards-sdk.es206.js.map +1 -1
- package/dist/es/standards-sdk.es207.js +12453 -156
- package/dist/es/standards-sdk.es207.js.map +1 -1
- package/dist/es/standards-sdk.es208.js +14 -232
- package/dist/es/standards-sdk.es208.js.map +1 -1
- package/dist/es/standards-sdk.es209.js +49 -232
- package/dist/es/standards-sdk.es209.js.map +1 -1
- package/dist/es/standards-sdk.es21.js +1 -1
- package/dist/es/standards-sdk.es210.js +114 -0
- package/dist/es/standards-sdk.es210.js.map +1 -0
- package/dist/es/standards-sdk.es211.js +84 -0
- package/dist/es/standards-sdk.es211.js.map +1 -0
- package/dist/es/standards-sdk.es212.js +203 -0
- package/dist/es/standards-sdk.es212.js.map +1 -0
- package/dist/es/standards-sdk.es213.js +76 -0
- package/dist/es/standards-sdk.es213.js.map +1 -0
- package/dist/es/standards-sdk.es214.js +675 -0
- package/dist/es/standards-sdk.es214.js.map +1 -0
- package/dist/es/standards-sdk.es215.js +175 -0
- package/dist/es/standards-sdk.es215.js.map +1 -0
- package/dist/es/standards-sdk.es216.js +325 -0
- package/dist/es/standards-sdk.es216.js.map +1 -0
- package/dist/es/standards-sdk.es217.js +349 -0
- package/dist/es/standards-sdk.es217.js.map +1 -0
- package/dist/es/standards-sdk.es218.js +456 -0
- package/dist/es/standards-sdk.es218.js.map +1 -0
- package/dist/es/standards-sdk.es219.js +334 -0
- package/dist/es/standards-sdk.es219.js.map +1 -0
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es220.js +79 -0
- package/dist/es/standards-sdk.es220.js.map +1 -0
- package/dist/es/standards-sdk.es221.js +142 -0
- package/dist/es/standards-sdk.es221.js.map +1 -0
- package/dist/es/standards-sdk.es222.js +520 -0
- package/dist/es/standards-sdk.es222.js.map +1 -0
- package/dist/es/standards-sdk.es223.js +262 -0
- package/dist/es/standards-sdk.es223.js.map +1 -0
- package/dist/es/standards-sdk.es224.js +199 -0
- package/dist/es/standards-sdk.es224.js.map +1 -0
- package/dist/es/standards-sdk.es225.js +122 -0
- package/dist/es/standards-sdk.es225.js.map +1 -0
- package/dist/es/standards-sdk.es226.js +155 -0
- package/dist/es/standards-sdk.es226.js.map +1 -0
- package/dist/es/standards-sdk.es227.js +187 -0
- package/dist/es/standards-sdk.es227.js.map +1 -0
- package/dist/es/standards-sdk.es228.js +687 -0
- package/dist/es/standards-sdk.es228.js.map +1 -0
- package/dist/es/standards-sdk.es229.js +188 -0
- package/dist/es/standards-sdk.es229.js.map +1 -0
- package/dist/es/standards-sdk.es23.js +1 -1
- package/dist/es/standards-sdk.es230.js +238 -0
- package/dist/es/standards-sdk.es230.js.map +1 -0
- package/dist/es/standards-sdk.es231.js +242 -0
- package/dist/es/standards-sdk.es231.js.map +1 -0
- package/dist/es/standards-sdk.es24.js +1 -1
- package/dist/es/standards-sdk.es25.js +1 -1
- package/dist/es/standards-sdk.es26.js +1 -1
- package/dist/es/standards-sdk.es27.js +13 -13
- package/dist/es/standards-sdk.es30.js +2 -2
- package/dist/es/standards-sdk.es31.js +4 -4
- package/dist/es/standards-sdk.es32.js +1 -1
- package/dist/es/standards-sdk.es35.js +7 -7
- package/dist/es/standards-sdk.es36.js +4 -4
- package/dist/es/standards-sdk.es37.js +2 -2
- package/dist/es/standards-sdk.es38.js +2 -2
- package/dist/es/standards-sdk.es39.js +1 -1
- package/dist/es/standards-sdk.es4.js +2 -2
- package/dist/es/standards-sdk.es40.js +1 -1
- package/dist/es/standards-sdk.es41.js +2 -2
- package/dist/es/standards-sdk.es46.js +1 -1
- package/dist/es/standards-sdk.es5.js +2 -2
- package/dist/es/standards-sdk.es51.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.js +2 -2
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es6.js +2 -2
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es63.js +2 -2
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +1 -1
- package/dist/es/standards-sdk.es67.js +8 -8
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +2 -2
- package/dist/es/standards-sdk.es72.js +3 -3
- package/dist/es/standards-sdk.es75.js +5 -5
- package/dist/es/standards-sdk.es76.js +3 -3
- package/dist/es/standards-sdk.es77.js +2 -2
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es81.js +2 -2
- package/dist/es/standards-sdk.es83.js +2 -2
- package/dist/es/standards-sdk.es84.js +5 -5
- package/dist/es/standards-sdk.es85.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es89.js +2 -2
- package/dist/es/standards-sdk.es9.js +2 -2
- package/dist/es/standards-sdk.es90.js +4 -4
- package/dist/es/standards-sdk.es94.js +3 -3
- package/dist/es/standards-sdk.es96.js +2 -2
- package/dist/es/standards-sdk.es98.js +1 -1
- package/dist/es/standards-sdk.es99.js +3 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es163.js","sources":["../../src/hcs-25/signals/simple-evals.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport type { Hcs25SignalStatus } from '../types';\n\n/**\n * Status tokens emitted by simple eval runners, per the HCS-25 simple-evals\n * methodology.\n */\nexport type Hcs25SimpleEvalStatus =\n | 'correct'\n | 'wrong'\n | 'unparseable'\n | 'timeout'\n | 'missing'\n | 'empty'\n | 'skipped'\n | 'upstream-error'\n | 'error';\n\n/**\n * A graded simple-eval outcome. Scores are binary per the methodology.\n */\nexport interface Hcs25SimpleEvalGrade {\n status: Hcs25SimpleEvalStatus;\n score: number;\n}\n\nconst SIMPLE_EVAL_GRADE_CORRECT: Hcs25SimpleEvalGrade = {\n status: 'correct',\n score: 100,\n};\n\nconst SIMPLE_EVAL_GRADE_WRONG: Hcs25SimpleEvalGrade = {\n status: 'wrong',\n score: 0,\n};\n\nconst SIMPLE_EVAL_GRADE_UNPARSEABLE: Hcs25SimpleEvalGrade = {\n status: 'unparseable',\n score: 0,\n};\n\n/**\n * Maps a simple-eval status token onto an HCS-25 signal status code.\n * Substantive outcomes stay `ok` because the stored score carries the value;\n * skipped runs are treated as missing.\n */\nexport function mapSimpleEvalStatus(token: string | null): Hcs25SignalStatus {\n switch (token) {\n case 'timeout':\n return 'timeout';\n case 'missing':\n case 'skipped':\n return 'missing';\n case 'upstream-error':\n case 'error':\n return 'error';\n default:\n return 'ok';\n }\n}\n\n/**\n * Grades a SimpleMath response by extracting the first numeric token and\n * comparing it against the expected answer.\n */\nexport function gradeSimpleMathResponse(\n response: string,\n expected: number,\n): Hcs25SimpleEvalGrade {\n const match = response.match(/-?\\d+(?:\\.\\d+)?/);\n if (!match) {\n return SIMPLE_EVAL_GRADE_UNPARSEABLE;\n }\n\n const value = Number.parseFloat(match[0]);\n return value === expected\n ? SIMPLE_EVAL_GRADE_CORRECT\n : SIMPLE_EVAL_GRADE_WRONG;\n}\n\nconst SCIENCE_CHOICE_LETTERS = ['A', 'B', 'C', 'D'] as const;\n\n/**\n * Grades a SimpleScience response by extracting a standalone `A|B|C|D`\n * token, falling back to full option-text matching when options are\n * provided.\n */\nexport function gradeSimpleScienceResponse(\n response: string,\n correctChoice: (typeof SCIENCE_CHOICE_LETTERS)[number],\n options?: readonly string[],\n): Hcs25SimpleEvalGrade {\n const letterMatch = response.match(/\\b([A-Da-d])\\b/);\n if (letterMatch) {\n return letterMatch[1].toUpperCase() === correctChoice\n ? SIMPLE_EVAL_GRADE_CORRECT\n : SIMPLE_EVAL_GRADE_WRONG;\n }\n\n if (options) {\n const normalized = response.toLowerCase();\n const matchedIndex = options.findIndex(\n option => option.length > 0 && normalized.includes(option.toLowerCase()),\n );\n if (matchedIndex >= 0) {\n return SCIENCE_CHOICE_LETTERS[matchedIndex] === correctChoice\n ? SIMPLE_EVAL_GRADE_CORRECT\n : SIMPLE_EVAL_GRADE_WRONG;\n }\n }\n\n return SIMPLE_EVAL_GRADE_UNPARSEABLE;\n}\n\n/**\n * A generated SimpleMath question with its stable identifier and expected\n * answer.\n */\nexport interface Hcs25SimpleMathQuestion {\n questionId: string;\n prompt: string;\n expected: number;\n}\n\nfunction randomInt(\n rng: () => number,\n minInclusive: number,\n maxInclusive: number,\n): number {\n const span = maxInclusive - minInclusive + 1;\n return minInclusive + Math.floor(rng() * span);\n}\n\n/**\n * Generates a random SimpleMath question. Operand ranges follow the\n * methodology: addition uses two integers in 10–100, subtraction subtracts\n * 1–50 from 10–100, and multiplication uses small integers in 2–12. Pass a\n * seeded rng for deterministic generation.\n */\nexport function generateSimpleMathQuestion(\n rng: () => number = Math.random,\n): Hcs25SimpleMathQuestion {\n const operations = ['add', 'sub', 'mul'] as const;\n const operation =\n operations[Math.floor(rng() * operations.length) % operations.length];\n\n let left: number;\n let right: number;\n let expected: number;\n let expression: string;\n\n if (operation === 'add') {\n left = randomInt(rng, 10, 100);\n right = randomInt(rng, 10, 100);\n expected = left + right;\n expression = `${left}+${right}`;\n } else if (operation === 'sub') {\n left = randomInt(rng, 10, 100);\n right = randomInt(rng, 1, 50);\n expected = left - right;\n expression = `${left}-${right}`;\n } else {\n left = randomInt(rng, 2, 12);\n right = randomInt(rng, 2, 12);\n expected = left * right;\n expression = `${left}x${right}`;\n }\n\n const operator = operation === 'add' ? '+' : operation === 'sub' ? '−' : '×';\n\n return {\n questionId: `math:${operation}:${expression}`,\n prompt: `Answer with just the number.\\n\\nWhat is ${left} ${operator} ${right}?`,\n expected,\n };\n}\n\n/**\n * A curated SimpleScience multiple-choice question with exactly four\n * options and one unambiguous correct choice.\n */\nexport interface Hcs25SimpleScienceQuestion {\n questionId: string;\n prompt: string;\n options: readonly [string, string, string, string];\n correctChoice: (typeof SCIENCE_CHOICE_LETTERS)[number];\n}\n\nfunction sciencePrompt(stem: string, options: readonly string[]): string {\n const lines = options.map(\n (option, index) => `${SCIENCE_CHOICE_LETTERS[index]}) ${option}`,\n );\n return `Answer with just A, B, C, or D.\\n\\n${stem}\\n${lines.join('\\n')}`;\n}\n\nfunction scienceQuestion(\n questionId: string,\n stem: string,\n options: readonly string[],\n correctIndex: number,\n): Hcs25SimpleScienceQuestion {\n return {\n questionId,\n prompt: sciencePrompt(stem, options),\n options: [options[0], options[1], options[2], options[3]],\n correctChoice: SCIENCE_CHOICE_LETTERS[correctIndex],\n };\n}\n\n/**\n * A small curated bank of basic science facts spanning chemistry, biology,\n * physics, and earth science, per the methodology.\n */\nexport const SIMPLE_SCIENCE_QUESTION_BANK: readonly Hcs25SimpleScienceQuestion[] =\n [\n scienceQuestion(\n 'science:photosynthesis-gas',\n 'Which gas do plants primarily absorb during photosynthesis?',\n ['Oxygen', 'Carbon dioxide', 'Nitrogen', 'Helium'],\n 1,\n ),\n scienceQuestion(\n 'science:water-formula',\n 'What is the chemical formula for water?',\n ['HO', 'H2O2', 'H2O', 'O2H'],\n 2,\n ),\n scienceQuestion(\n 'science:blood-pump',\n 'Which organ pumps blood through the human body?',\n ['Liver', 'Heart', 'Lungs', 'Kidneys'],\n 1,\n ),\n scienceQuestion(\n 'science:vacuum-speed',\n 'Which of these travels fastest in a vacuum?',\n ['Sound', 'Water waves', 'Wind', 'Light'],\n 3,\n ),\n scienceQuestion(\n 'science:red-planet',\n 'Which planet is known as the Red Planet?',\n ['Mars', 'Venus', 'Jupiter', 'Mercury'],\n 0,\n ),\n scienceQuestion(\n 'science:boiling-point',\n 'At what temperature does water boil at sea level, in Celsius?',\n ['50°C', '100°C', '150°C', '200°C'],\n 1,\n ),\n scienceQuestion(\n 'science:photosynthesis-energy',\n 'What is the primary source of energy for photosynthesis?',\n ['Sunlight', 'Moonlight', 'Lightning', 'Starlight'],\n 0,\n ),\n scienceQuestion(\n 'science:atom-charge',\n 'What is the electrical charge of a proton?',\n ['Negative', 'Neutral', 'Positive', 'Variable'],\n 2,\n ),\n ];\n\n/**\n * Samples a random science question from the curated bank. Pass a seeded rng\n * for deterministic sampling.\n */\nexport function sampleSimpleScienceQuestion(\n rng: () => number = Math.random,\n): Hcs25SimpleScienceQuestion {\n const index =\n Math.floor(rng() * SIMPLE_SCIENCE_QUESTION_BANK.length) %\n SIMPLE_SCIENCE_QUESTION_BANK.length;\n return SIMPLE_SCIENCE_QUESTION_BANK[index];\n}\n\n/**\n * Stored-field schema for the shared A2A/NANDA simple-eval signal family.\n * Field names follow the `a2aSimple*` / `nandaSimple*` conventions.\n */\nexport const hcs25SimpleEvalFieldsSchema = z\n .object({\n a2aSimpleMathScore: z.number().nullish(),\n a2aSimpleMathStatus: z.string().nullish(),\n a2aSimpleMathQuestionId: z.string().nullish(),\n a2aSimpleMathSessionId: z.string().nullish(),\n a2aSimpleMathResponse: z.string().nullish(),\n a2aSimpleMathError: z.string().nullish(),\n a2aSimpleMathUpdatedAt: z.string().nullish(),\n a2aSimpleScienceScore: z.number().nullish(),\n a2aSimpleScienceStatus: z.string().nullish(),\n a2aSimpleScienceQuestionId: z.string().nullish(),\n a2aSimpleScienceSessionId: z.string().nullish(),\n a2aSimpleScienceResponse: z.string().nullish(),\n a2aSimpleScienceError: z.string().nullish(),\n a2aSimpleScienceUpdatedAt: z.string().nullish(),\n nandaSimpleMathScore: z.number().nullish(),\n nandaSimpleMathStatus: z.string().nullish(),\n nandaSimpleMathQuestionId: z.string().nullish(),\n nandaSimpleMathResponse: z.string().nullish(),\n nandaSimpleMathError: z.string().nullish(),\n nandaSimpleMathUpdatedAt: z.string().nullish(),\n nandaSimpleScienceScore: z.number().nullish(),\n nandaSimpleScienceStatus: z.string().nullish(),\n nandaSimpleScienceQuestionId: z.string().nullish(),\n nandaSimpleScienceResponse: z.string().nullish(),\n nandaSimpleScienceError: z.string().nullish(),\n nandaSimpleScienceUpdatedAt: z.string().nullish(),\n })\n .passthrough();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es163.js","sources":["../../src/utils/parsers/hts-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { AccountId, TokenId, Long } from '@hashgraph/sdk';\nimport {\n TokenCreationData,\n TokenMintData,\n TokenBurnData,\n TokenUpdateData,\n TokenFeeScheduleUpdateData,\n TokenFreezeData,\n TokenUnfreezeData,\n TokenGrantKycData,\n TokenRevokeKycData,\n TokenPauseData,\n TokenUnpauseData,\n TokenWipeAccountData,\n TokenDeleteData,\n TokenAssociateData,\n TokenDissociateData,\n TokenAirdropData,\n CustomFeeData,\n FixedFeeData,\n FractionalFeeData,\n RoyaltyFeeData,\n} from '../transaction-parser-types';\nimport { ParsedTransaction } from '../transaction-parser-types';\nimport {\n parseKey,\n extractTransactionBody,\n hasTransactionType,\n} from './parser-utils';\nimport { Buffer } from 'buffer';\n\nimport { Transaction } from '@hashgraph/sdk';\n\nexport class HTSParser {\n /**\n * Main entry point for parsing HTS transactions from a Transaction object\n * This method bridges between the Transaction object and the protobuf parsers\n */\n static parseHTSTransaction(\n transaction: Transaction,\n ): Partial<ParsedTransaction> {\n try {\n const transactionBody = (\n transaction as unknown as { _transactionBody?: proto.ITransactionBody }\n )._transactionBody as proto.ITransactionBody | undefined;\n\n if (!transactionBody) {\n return {};\n }\n\n if (transactionBody.tokenCreation) {\n const tokenCreation = this.parseTokenCreate(\n transactionBody.tokenCreation,\n );\n if (tokenCreation) {\n return {\n type: 'TOKENCREATE',\n humanReadableType: 'Token Creation',\n tokenCreation,\n };\n }\n }\n\n if (transactionBody.tokenMint) {\n const tokenMint = this.parseTokenMint(transactionBody.tokenMint);\n if (tokenMint) {\n return {\n type: 'TOKENMINT',\n humanReadableType: 'Token Mint',\n tokenMint,\n };\n }\n }\n\n if (transactionBody.tokenBurn) {\n const tokenBurn = this.parseTokenBurn(transactionBody.tokenBurn);\n if (tokenBurn) {\n return {\n type: 'TOKENBURN',\n humanReadableType: 'Token Burn',\n tokenBurn,\n };\n }\n }\n\n if (transactionBody.tokenUpdate) {\n const tokenUpdate = this.parseTokenUpdate(transactionBody.tokenUpdate);\n if (tokenUpdate) {\n return {\n type: 'TOKENUPDATE',\n humanReadableType: 'Token Update',\n tokenUpdate,\n };\n }\n }\n\n if (transactionBody.tokenFreeze) {\n const tokenFreeze = this.parseTokenFreeze(transactionBody.tokenFreeze);\n if (tokenFreeze) {\n return {\n type: 'TOKENFREEZE',\n humanReadableType: 'Token Freeze',\n tokenFreeze,\n };\n }\n }\n\n if (transactionBody.tokenUnfreeze) {\n const tokenUnfreeze = this.parseTokenUnfreeze(\n transactionBody.tokenUnfreeze,\n );\n if (tokenUnfreeze) {\n return {\n type: 'TOKENUNFREEZE',\n humanReadableType: 'Token Unfreeze',\n tokenUnfreeze,\n };\n }\n }\n\n if (transactionBody.tokenGrantKyc) {\n const tokenGrantKyc = this.parseTokenGrantKyc(\n transactionBody.tokenGrantKyc,\n );\n if (tokenGrantKyc) {\n return {\n type: 'TOKENGRANTKYC',\n humanReadableType: 'Token Grant KYC',\n tokenGrantKyc,\n };\n }\n }\n\n if (transactionBody.tokenRevokeKyc) {\n const tokenRevokeKyc = this.parseTokenRevokeKyc(\n transactionBody.tokenRevokeKyc,\n );\n if (tokenRevokeKyc) {\n return {\n type: 'TOKENREVOKEKYC',\n humanReadableType: 'Token Revoke KYC',\n tokenRevokeKyc,\n };\n }\n }\n\n if (transactionBody.tokenPause) {\n const tokenPause = this.parseTokenPause(transactionBody.tokenPause);\n if (tokenPause) {\n return {\n type: 'TOKENPAUSE',\n humanReadableType: 'Token Pause',\n tokenPause,\n };\n }\n }\n\n if (transactionBody.tokenUnpause) {\n const tokenUnpause = this.parseTokenUnpause(\n transactionBody.tokenUnpause,\n );\n if (tokenUnpause) {\n return {\n type: 'TOKENUNPAUSE',\n humanReadableType: 'Token Unpause',\n tokenUnpause,\n };\n }\n }\n\n if (transactionBody.tokenWipe) {\n const tokenWipeAccount = this.parseTokenWipeAccount(\n transactionBody.tokenWipe,\n );\n if (tokenWipeAccount) {\n return {\n type: 'TOKENWIPEACCOUNT',\n humanReadableType: 'Token Wipe Account',\n tokenWipeAccount,\n };\n }\n }\n\n if (transactionBody.tokenDeletion) {\n const tokenDelete = this.parseTokenDelete(\n transactionBody.tokenDeletion,\n );\n if (tokenDelete) {\n return {\n type: 'TOKENDELETE',\n humanReadableType: 'Token Delete',\n tokenDelete,\n };\n }\n }\n\n if (transactionBody.tokenAssociate) {\n const tokenAssociate = this.parseTokenAssociate(\n transactionBody.tokenAssociate,\n );\n if (tokenAssociate) {\n return {\n type: 'TOKENASSOCIATE',\n humanReadableType: 'Token Associate',\n tokenAssociate,\n };\n }\n }\n\n if (transactionBody.tokenDissociate) {\n const tokenDissociate = this.parseTokenDissociate(\n transactionBody.tokenDissociate,\n );\n if (tokenDissociate) {\n return {\n type: 'TOKENDISSOCIATE',\n humanReadableType: 'Token Dissociate',\n tokenDissociate,\n };\n }\n }\n\n if (transactionBody.tokenFeeScheduleUpdate) {\n const tokenFeeScheduleUpdate = this.parseTokenFeeScheduleUpdate(\n transactionBody.tokenFeeScheduleUpdate,\n );\n if (tokenFeeScheduleUpdate) {\n return {\n type: 'TOKENFEESCHEDULEUPDATE',\n humanReadableType: 'Token Fee Schedule Update',\n tokenFeeScheduleUpdate,\n };\n }\n }\n\n const airdrop = this.parseTokenAirdrop(transaction);\n if (airdrop) {\n return {\n type: 'TOKENAIRDROP',\n humanReadableType: 'Token Airdrop',\n tokenAirdrop: airdrop,\n };\n }\n\n return {};\n } catch (error) {\n console.warn('[HTSParser] Failed to parse HTS transaction:', error);\n return {};\n }\n }\n\n static parseTokenCreate(\n body: proto.ITokenCreateTransactionBody,\n ): TokenCreationData | undefined {\n if (!body) return undefined;\n const data: TokenCreationData = {};\n if (body.name) {\n data.tokenName = body.name;\n }\n if (body.symbol) {\n data.tokenSymbol = body.symbol;\n }\n if (body.treasury) {\n data.treasuryAccountId = new AccountId(\n body.treasury.shardNum ?? 0,\n body.treasury.realmNum ?? 0,\n body.treasury.accountNum ?? 0,\n ).toString();\n }\n if (body.initialSupply) {\n data.initialSupply = Long.fromValue(body.initialSupply).toString();\n }\n if (body.decimals !== undefined && body.decimals !== null) {\n data.decimals = Long.fromValue(body.decimals).toNumber();\n }\n if (body.maxSupply) {\n data.maxSupply = Long.fromValue(body.maxSupply).toString();\n }\n if (body.memo) {\n data.memo = body.memo;\n }\n if (body.tokenType !== null && body.tokenType !== undefined) {\n data.tokenType = proto.TokenType[body.tokenType];\n }\n if (body.supplyType !== null && body.supplyType !== undefined) {\n data.supplyType = proto.TokenSupplyType[body.supplyType];\n }\n data.adminKey = parseKey(body.adminKey);\n data.kycKey = parseKey(body.kycKey);\n data.freezeKey = parseKey(body.freezeKey);\n data.wipeKey = parseKey(body.wipeKey);\n data.supplyKey = parseKey(body.supplyKey);\n data.feeScheduleKey = parseKey(body.feeScheduleKey);\n data.pauseKey = parseKey(body.pauseKey);\n if (body.autoRenewAccount) {\n data.autoRenewAccount = new AccountId(\n body.autoRenewAccount.shardNum ?? 0,\n body.autoRenewAccount.realmNum ?? 0,\n body.autoRenewAccount.accountNum ?? 0,\n ).toString();\n }\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n if (body.customFees && body.customFees.length > 0) {\n data.customFees = body.customFees.map(fee => {\n const feeCollectorAccountId = fee.feeCollectorAccountId\n ? new AccountId(\n fee.feeCollectorAccountId.shardNum ?? 0,\n fee.feeCollectorAccountId.realmNum ?? 0,\n fee.feeCollectorAccountId.accountNum ?? 0,\n ).toString()\n : 'Not Set';\n const commonFeeData = {\n feeCollectorAccountId,\n allCollectorsAreExempt: fee.allCollectorsAreExempt || false,\n };\n if (fee.fixedFee) {\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: {\n amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),\n denominatingTokenId: fee.fixedFee.denominatingTokenId\n ? new TokenId(\n fee.fixedFee.denominatingTokenId.shardNum ?? 0,\n fee.fixedFee.denominatingTokenId.realmNum ?? 0,\n fee.fixedFee.denominatingTokenId.tokenNum ?? 0,\n ).toString()\n : undefined,\n },\n };\n } else if (fee.fractionalFee) {\n return {\n ...commonFeeData,\n feeType: 'FRACTIONAL_FEE',\n fractionalFee: {\n numerator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.denominator || 1,\n ).toString(),\n minimumAmount: Long.fromValue(\n fee.fractionalFee.minimumAmount || 0,\n ).toString(),\n maximumAmount: Long.fromValue(\n fee.fractionalFee.maximumAmount || 0,\n ).toString(),\n netOfTransfers: fee.fractionalFee.netOfTransfers || false,\n },\n };\n } else if (fee.royaltyFee) {\n let fallbackFeeData: FixedFeeData | undefined = undefined;\n if (fee.royaltyFee.fallbackFee) {\n fallbackFeeData = {\n amount: Long.fromValue(\n fee.royaltyFee.fallbackFee.amount || 0,\n ).toString(),\n denominatingTokenId: fee.royaltyFee.fallbackFee\n .denominatingTokenId\n ? new TokenId(\n fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ??\n 0,\n ).toString()\n : undefined,\n };\n }\n return {\n ...commonFeeData,\n feeType: 'ROYALTY_FEE',\n royaltyFee: {\n numerator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.denominator || 1,\n ).toString(),\n fallbackFee: fallbackFeeData,\n },\n };\n }\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: { amount: '0' },\n } as CustomFeeData;\n });\n }\n return data;\n }\n\n static parseTokenMint(\n body: proto.ITokenMintTransactionBody,\n ): TokenMintData | undefined {\n if (\n !body ||\n !body.token ||\n body.amount === null ||\n body.amount === undefined\n ) {\n return undefined;\n }\n const data: TokenMintData = {\n tokenId: new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString(),\n amount: Long.fromValue(body.amount).toNumber(),\n };\n if (body.metadata && body.metadata.length > 0) {\n data.metadata = body.metadata.map(meta =>\n Buffer.from(meta).toString('base64'),\n );\n }\n return data;\n }\n\n static parseTokenBurn(\n body: proto.ITokenBurnTransactionBody,\n ): TokenBurnData | undefined {\n if (\n !body ||\n !body.token ||\n body.amount === null ||\n body.amount === undefined\n ) {\n return undefined;\n }\n const data: TokenBurnData = {\n tokenId: new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString(),\n amount: Long.fromValue(body.amount).toNumber(),\n };\n if (body.serialNumbers && body.serialNumbers.length > 0) {\n data.serialNumbers = body.serialNumbers.map(sn =>\n Long.fromValue(sn).toNumber(),\n );\n }\n return data;\n }\n\n static parseTokenUpdate(\n body: proto.ITokenUpdateTransactionBody,\n ): TokenUpdateData | undefined {\n if (!body) return undefined;\n const data: TokenUpdateData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.name) {\n data.name = body.name;\n }\n if (body.symbol) {\n data.symbol = body.symbol;\n }\n if (body.treasury) {\n data.treasuryAccountId = new AccountId(\n body.treasury.shardNum ?? 0,\n body.treasury.realmNum ?? 0,\n body.treasury.accountNum ?? 0,\n ).toString();\n }\n data.adminKey = parseKey(body.adminKey);\n data.kycKey = parseKey(body.kycKey);\n data.freezeKey = parseKey(body.freezeKey);\n data.wipeKey = parseKey(body.wipeKey);\n data.supplyKey = parseKey(body.supplyKey);\n data.feeScheduleKey = parseKey(body.feeScheduleKey);\n data.pauseKey = parseKey(body.pauseKey);\n if (body.autoRenewAccount) {\n data.autoRenewAccountId = new AccountId(\n body.autoRenewAccount.shardNum ?? 0,\n body.autoRenewAccount.realmNum ?? 0,\n body.autoRenewAccount.accountNum ?? 0,\n ).toString();\n }\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n if (body.memo?.value !== undefined) {\n data.memo = body.memo.value;\n }\n if (body.expiry?.seconds) {\n data.expiry = `${Long.fromValue(body.expiry.seconds).toString()}.${\n body.expiry.nanos\n }`;\n }\n return data;\n }\n\n static parseTokenFeeScheduleUpdate(\n body: proto.ITokenFeeScheduleUpdateTransactionBody,\n ): TokenFeeScheduleUpdateData | undefined {\n if (!body) return undefined;\n const data: TokenFeeScheduleUpdateData = {};\n if (body.tokenId) {\n data.tokenId = new TokenId(\n body.tokenId.shardNum ?? 0,\n body.tokenId.realmNum ?? 0,\n body.tokenId.tokenNum ?? 0,\n ).toString();\n }\n if (body.customFees && body.customFees.length > 0) {\n data.customFees = body.customFees.map(fee => {\n const feeCollectorAccountId = fee.feeCollectorAccountId\n ? new AccountId(\n fee.feeCollectorAccountId.shardNum ?? 0,\n fee.feeCollectorAccountId.realmNum ?? 0,\n fee.feeCollectorAccountId.accountNum ?? 0,\n ).toString()\n : 'Not Set';\n const commonFeeData = {\n feeCollectorAccountId,\n allCollectorsAreExempt: fee.allCollectorsAreExempt || false,\n };\n if (fee.fixedFee) {\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: {\n amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),\n denominatingTokenId: fee.fixedFee.denominatingTokenId\n ? new TokenId(\n fee.fixedFee.denominatingTokenId.shardNum ?? 0,\n fee.fixedFee.denominatingTokenId.realmNum ?? 0,\n fee.fixedFee.denominatingTokenId.tokenNum ?? 0,\n ).toString()\n : undefined,\n },\n };\n } else if (fee.fractionalFee) {\n return {\n ...commonFeeData,\n feeType: 'FRACTIONAL_FEE',\n fractionalFee: {\n numerator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.denominator || 1,\n ).toString(),\n minimumAmount: Long.fromValue(\n fee.fractionalFee.minimumAmount || 0,\n ).toString(),\n maximumAmount: Long.fromValue(\n fee.fractionalFee.maximumAmount || 0,\n ).toString(),\n netOfTransfers: fee.fractionalFee.netOfTransfers || false,\n },\n };\n } else if (fee.royaltyFee) {\n let fallbackFeeData: FixedFeeData | undefined = undefined;\n if (fee.royaltyFee.fallbackFee) {\n fallbackFeeData = {\n amount: Long.fromValue(\n fee.royaltyFee.fallbackFee.amount || 0,\n ).toString(),\n denominatingTokenId: fee.royaltyFee.fallbackFee\n .denominatingTokenId\n ? new TokenId(\n fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ??\n 0,\n ).toString()\n : undefined,\n };\n }\n return {\n ...commonFeeData,\n feeType: 'ROYALTY_FEE',\n royaltyFee: {\n numerator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.denominator || 1,\n ).toString(),\n fallbackFee: fallbackFeeData,\n },\n };\n }\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: { amount: '0' },\n } as CustomFeeData;\n });\n }\n return data;\n }\n\n static parseTokenFreeze(\n body: proto.ITokenFreezeAccountTransactionBody,\n ): TokenFreezeData | undefined {\n if (!body) return undefined;\n const data: TokenFreezeData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenUnfreeze(\n body: proto.ITokenUnfreezeAccountTransactionBody,\n ): TokenUnfreezeData | undefined {\n if (!body) return undefined;\n const data: TokenUnfreezeData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenGrantKyc(\n body: proto.ITokenGrantKycTransactionBody,\n ): TokenGrantKycData | undefined {\n if (!body) return undefined;\n const data: TokenGrantKycData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenRevokeKyc(\n body: proto.ITokenRevokeKycTransactionBody,\n ): TokenRevokeKycData | undefined {\n if (!body) return undefined;\n const data: TokenRevokeKycData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenPause(\n body: proto.ITokenPauseTransactionBody,\n ): TokenPauseData | undefined {\n if (!body) return undefined;\n const data: TokenPauseData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenUnpause(\n body: proto.ITokenUnpauseTransactionBody,\n ): TokenUnpauseData | undefined {\n if (!body) return undefined;\n const data: TokenUnpauseData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenWipeAccount(\n body: proto.ITokenWipeAccountTransactionBody,\n ): TokenWipeAccountData | undefined {\n if (!body) return undefined;\n const data: TokenWipeAccountData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n if (body.serialNumbers && body.serialNumbers.length > 0) {\n data.serialNumbers = body.serialNumbers.map(sn =>\n Long.fromValue(sn).toString(),\n );\n }\n if (body.amount) {\n data.amount = Long.fromValue(body.amount).toString();\n }\n return data;\n }\n\n static parseTokenDelete(\n body: proto.ITokenDeleteTransactionBody,\n ): TokenDeleteData | undefined {\n if (!body) return undefined;\n const data: TokenDeleteData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenAssociate(\n body: proto.ITokenAssociateTransactionBody,\n ): TokenAssociateData | undefined {\n if (!body) return undefined;\n const data: TokenAssociateData = {};\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n if (body.tokens && body.tokens.length > 0) {\n data.tokenIds = body.tokens.map(t =>\n new TokenId(\n t.shardNum ?? 0,\n t.realmNum ?? 0,\n t.tokenNum ?? 0,\n ).toString(),\n );\n }\n return data;\n }\n\n static parseTokenDissociate(\n body: proto.ITokenDissociateTransactionBody,\n ): TokenDissociateData | undefined {\n if (!body) return undefined;\n const data: TokenDissociateData = {};\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n if (body.tokens && body.tokens.length > 0) {\n data.tokenIds = body.tokens.map(t =>\n new TokenId(\n t.shardNum ?? 0,\n t.realmNum ?? 0,\n t.tokenNum ?? 0,\n ).toString(),\n );\n }\n return data;\n }\n\n /**\n * Parse token airdrop transaction for both fungible tokens and NFTs\n * Extracts airdrop transfers from transaction protobuf data\n */\n static parseTokenAirdrop(transaction: Transaction): TokenAirdropData | null {\n try {\n const transactionBody = (\n transaction as unknown as { _transactionBody?: proto.ITransactionBody }\n )._transactionBody as proto.ITransactionBody | undefined;\n\n if (transactionBody?.tokenAirdrop) {\n const airdrop = transactionBody.tokenAirdrop;\n\n return {\n tokenTransfers: (airdrop.tokenTransfers || []).map(\n (transfer: any) => ({\n tokenId: transfer.token?.toString() || 'Unknown',\n transfers: (transfer.transfers || []).map((t: any) => ({\n accountId: t.accountID?.toString() || 'Unknown',\n amount: t.amount?.toString() || '0',\n serialNumbers: t.serialNumbers?.map((sn: any) => sn.toString()),\n })),\n }),\n ),\n };\n }\n\n if (hasTransactionType(transaction, 'tokenAirdrop')) {\n const txBody = extractTransactionBody(transaction);\n if (txBody?.tokenAirdrop) {\n return this.parseTokenAirdropFromProto(txBody.tokenAirdrop);\n }\n }\n\n const tx = transaction as unknown as {\n _tokenTransfers?: Array<{\n tokenId?: { toString(): string } | string;\n transfers?: Array<{\n accountId?: { toString(): string } | string;\n amount?: { toString(): string } | string | number | Long;\n serialNumbers?: Array<\n { toString(): string } | string | number | Long\n >;\n }>;\n }>;\n };\n const tokenTransfersList = tx._tokenTransfers || [];\n\n if (tokenTransfersList.length > 0) {\n return {\n tokenTransfers: tokenTransfersList.map((transfer: any) => ({\n tokenId: transfer.tokenId?.toString() || 'Unknown',\n transfers: (transfer.transfers || []).map((t: any) => ({\n accountId: t.accountId?.toString() || 'Unknown',\n amount: t.amount?.toString() || '0',\n serialNumbers: t.serialNumbers?.map((sn: any) => sn.toString()),\n })),\n })),\n };\n }\n\n return null;\n } catch (error) {\n console.warn('[HTSParser] Failed to parse token airdrop:', error);\n return null;\n }\n }\n\n /**\n * Parse token airdrop from protobuf data for scheduled transactions\n */\n static parseTokenAirdropFromProto(airdrop: any): TokenAirdropData {\n const tokenTransfers = [];\n\n if (airdrop.tokenTransfers) {\n for (const tokenTransfer of airdrop.tokenTransfers) {\n const token = tokenTransfer.token\n ? new TokenId(\n tokenTransfer.token.shardNum ?? 0,\n tokenTransfer.token.realmNum ?? 0,\n tokenTransfer.token.tokenNum ?? 0,\n )\n : null;\n const transfers = [];\n\n if (tokenTransfer.transfers) {\n for (const transfer of tokenTransfer.transfers) {\n const accountId = transfer.accountID\n ? new AccountId(\n transfer.accountID.shardNum ?? 0,\n transfer.accountID.realmNum ?? 0,\n transfer.accountID.accountNum ?? 0,\n )\n : null;\n\n transfers.push({\n accountId: accountId?.toString() || 'Unknown',\n amount: transfer.amount\n ? Long.fromValue(transfer.amount).toString()\n : '0',\n serialNumbers: transfer.serialNumbers?.map((sn: any) =>\n Long.fromValue(sn).toString(),\n ),\n });\n }\n }\n\n tokenTransfers.push({\n tokenId: token?.toString() || 'Unknown',\n transfers,\n });\n }\n }\n\n return { tokenTransfers };\n }\n\n /**\n * Extract token creation data from Transaction object internal fields\n * This handles the case where token creation data is stored in Transaction internals\n */\n static extractTokenCreationFromTransaction(\n transaction: Transaction,\n ): TokenCreationData | null {\n try {\n const tx = transaction as unknown as {\n _tokenName?: string;\n _tokenSymbol?: string;\n _initialSupply?: number | Long;\n _decimals?: number | Long;\n _treasuryAccountId?: AccountId;\n _maxSupply?: number | Long;\n _tokenType?: unknown;\n _supplyType?: unknown;\n _tokenMemo?: string;\n _adminKey?: unknown;\n _kycKey?: unknown;\n _freezeKey?: unknown;\n _wipeKey?: unknown;\n _supplyKey?: unknown;\n _feeScheduleKey?: unknown;\n _pauseKey?: unknown;\n _metadataKey?: unknown;\n _autoRenewAccountId?: AccountId;\n _autoRenewPeriod?: { seconds?: Long; toString(): string };\n _expirationTime?: { seconds?: Long; toString(): string };\n _customFees?: unknown[];\n };\n\n if (tx._tokenName || tx._tokenSymbol) {\n const result: TokenCreationData = {\n tokenName: tx._tokenName || 'Unknown Token',\n tokenSymbol: tx._tokenSymbol || 'UNKNOWN',\n initialSupply: tx._initialSupply?.toString() || '0',\n decimals: Number(tx._decimals || 0),\n treasuryAccountId: tx._treasuryAccountId?.toString() || 'Unknown',\n };\n\n if (tx._maxSupply) {\n result.maxSupply = tx._maxSupply.toString();\n }\n\n if (tx._tokenType) {\n result.tokenType = tx._tokenType.toString\n ? tx._tokenType.toString()\n : String(tx._tokenType);\n }\n\n if (tx._supplyType) {\n result.supplyType = tx._supplyType.toString\n ? tx._supplyType.toString()\n : String(tx._supplyType);\n }\n\n if (tx._tokenMemo) {\n result.memo = tx._tokenMemo;\n }\n\n if (tx._adminKey) {\n result.adminKey = tx._adminKey.toString();\n }\n\n if (tx._kycKey) {\n result.kycKey = tx._kycKey.toString();\n }\n\n if (tx._freezeKey) {\n result.freezeKey = tx._freezeKey.toString();\n }\n\n if (tx._wipeKey) {\n result.wipeKey = tx._wipeKey.toString();\n }\n\n if (tx._supplyKey) {\n result.supplyKey = tx._supplyKey.toString();\n }\n\n if (tx._feeScheduleKey) {\n result.feeScheduleKey = tx._feeScheduleKey.toString();\n }\n\n if (tx._pauseKey) {\n result.pauseKey = tx._pauseKey.toString();\n }\n\n if (tx._metadataKey) {\n result.metadataKey = tx._metadataKey.toString();\n }\n\n if (tx._autoRenewAccountId) {\n result.autoRenewAccount = tx._autoRenewAccountId.toString();\n }\n\n if (tx._autoRenewPeriod) {\n result.autoRenewPeriod =\n tx._autoRenewPeriod.seconds?.toString() ||\n tx._autoRenewPeriod.toString();\n }\n\n if (tx._expirationTime) {\n result.expiry =\n tx._expirationTime.seconds?.toString() ||\n tx._expirationTime.toString();\n }\n\n if (\n tx._customFees &&\n Array.isArray(tx._customFees) &&\n tx._customFees.length > 0\n ) {\n result.customFees = tx._customFees.map((fee: any) => {\n const customFee: CustomFeeData = {\n feeCollectorAccountId:\n fee.feeCollectorAccountId?.toString() || '',\n feeType: 'FIXED_FEE',\n };\n\n if (fee.fixedFee) {\n customFee.feeType = 'FIXED_FEE';\n customFee.fixedFee = {\n amount: fee.fixedFee.amount?.toString() || '0',\n denominatingTokenId:\n fee.fixedFee.denominatingTokenId?.toString(),\n };\n } else if (fee.fractionalFee) {\n customFee.feeType = 'FRACTIONAL_FEE';\n customFee.fractionalFee = {\n numerator: fee.fractionalFee.numerator?.toString() || '0',\n denominator: fee.fractionalFee.denominator?.toString() || '1',\n minimumAmount:\n fee.fractionalFee.minimumAmount?.toString() || '0',\n maximumAmount:\n fee.fractionalFee.maximumAmount?.toString() || '0',\n netOfTransfers: fee.fractionalFee.netOfTransfers || false,\n };\n } else if (fee.royaltyFee) {\n customFee.feeType = 'ROYALTY_FEE';\n customFee.royaltyFee = {\n numerator: fee.royaltyFee.numerator?.toString() || '0',\n denominator: fee.royaltyFee.denominator?.toString() || '1',\n fallbackFee: fee.royaltyFee.fallbackFee\n ? {\n amount:\n fee.royaltyFee.fallbackFee.amount?.toString() || '0',\n denominatingTokenId:\n fee.royaltyFee.fallbackFee.denominatingTokenId?.toString(),\n }\n : undefined,\n };\n }\n\n customFee.allCollectorsAreExempt =\n fee.allCollectorsAreExempt || false;\n return customFee;\n });\n }\n\n return result;\n }\n\n return null;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Extract token airdrop data from Transaction object internal fields\n * This handles the case where airdrop data is stored in Transaction internals\n */\n static extractTokenAirdropFromTransaction(\n transaction: Transaction,\n ): TokenAirdropData | null {\n try {\n const tx = transaction as unknown as {\n _tokenAirdrops?: Array<{\n tokenId?: { toString(): string };\n transfers?: Array<{\n accountId?: { toString(): string };\n amount?: { toString(): string };\n serialNumbers?: Array<{ toString(): string }>;\n }>;\n }>;\n };\n\n if (tx._tokenAirdrops && Array.isArray(tx._tokenAirdrops)) {\n const tokenTransfers = tx._tokenAirdrops.map(airdrop => ({\n tokenId: airdrop.tokenId?.toString() || 'Unknown',\n transfers: (airdrop.transfers || []).map(transfer => ({\n accountId: transfer.accountId?.toString() || 'Unknown',\n amount: transfer.amount?.toString() || '0',\n serialNumbers: transfer.serialNumbers?.map(s => s.toString()) || [],\n })),\n }));\n\n return { tokenTransfers };\n }\n\n return null;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Parse HTS transaction from Transaction object with comprehensive extraction\n * This is the unified entry point that handles both protobuf and internal field extraction\n */\n static parseFromTransactionObject(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n tokenCreation?: TokenCreationData;\n tokenAirdrop?: TokenAirdropData;\n [key: string]: unknown;\n } {\n try {\n try {\n const bytes = transaction.toBytes ? transaction.toBytes() : undefined;\n if (bytes) {\n const decoded = proto.TransactionList.decode(bytes);\n if (decoded.transactionList && decoded.transactionList.length > 0) {\n const tx = decoded.transactionList[0];\n let txBody: proto.TransactionBody | null = null;\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n txBody = proto.TransactionBody.decode(tx.bodyBytes);\n } else if (\n tx.signedTransactionBytes &&\n tx.signedTransactionBytes.length > 0\n ) {\n const signedTx = proto.SignedTransaction.decode(\n tx.signedTransactionBytes,\n );\n if (signedTx.bodyBytes) {\n txBody = proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n if (txBody) {\n if (txBody.tokenCreation) {\n const tokenCreation = this.parseTokenCreate(\n txBody.tokenCreation,\n );\n if (tokenCreation) {\n return {\n type: 'TOKENCREATE',\n humanReadableType: 'Token Creation',\n tokenCreation,\n };\n }\n }\n if (txBody.tokenMint) {\n const tokenMint = this.parseTokenMint(txBody.tokenMint);\n if (tokenMint) {\n return {\n type: 'TOKENMINT',\n humanReadableType: 'Token Mint',\n tokenMint,\n };\n }\n }\n if (txBody.tokenBurn) {\n const tokenBurn = this.parseTokenBurn(txBody.tokenBurn);\n if (tokenBurn) {\n return {\n type: 'TOKENBURN',\n humanReadableType: 'Token Burn',\n tokenBurn,\n };\n }\n }\n if (txBody.tokenUpdate) {\n const tokenUpdate = this.parseTokenUpdate(txBody.tokenUpdate);\n if (tokenUpdate) {\n return {\n type: 'TOKENUPDATE',\n humanReadableType: 'Token Update',\n tokenUpdate,\n };\n }\n }\n if (txBody.tokenFreeze) {\n const tokenFreeze = this.parseTokenFreeze(txBody.tokenFreeze);\n if (tokenFreeze) {\n return {\n type: 'TOKENFREEZE',\n humanReadableType: 'Token Freeze',\n tokenFreeze,\n };\n }\n }\n if (txBody.tokenUnfreeze) {\n const tokenUnfreeze = this.parseTokenUnfreeze(\n txBody.tokenUnfreeze,\n );\n if (tokenUnfreeze) {\n return {\n type: 'TOKENUNFREEZE',\n humanReadableType: 'Token Unfreeze',\n tokenUnfreeze,\n };\n }\n }\n if (txBody.tokenGrantKyc) {\n const tokenGrantKyc = this.parseTokenGrantKyc(\n txBody.tokenGrantKyc,\n );\n if (tokenGrantKyc) {\n return {\n type: 'TOKENGRANTKYC',\n humanReadableType: 'Token Grant KYC',\n tokenGrantKyc,\n };\n }\n }\n if (txBody.tokenRevokeKyc) {\n const tokenRevokeKyc = this.parseTokenRevokeKyc(\n txBody.tokenRevokeKyc,\n );\n if (tokenRevokeKyc) {\n return {\n type: 'TOKENREVOKEKYC',\n humanReadableType: 'Token Revoke KYC',\n tokenRevokeKyc,\n };\n }\n }\n if (txBody.tokenPause) {\n const tokenPause = this.parseTokenPause(txBody.tokenPause);\n if (tokenPause) {\n return {\n type: 'TOKENPAUSE',\n humanReadableType: 'Token Pause',\n tokenPause,\n };\n }\n }\n if (txBody.tokenUnpause) {\n const tokenUnpause = this.parseTokenUnpause(\n txBody.tokenUnpause,\n );\n if (tokenUnpause) {\n return {\n type: 'TOKENUNPAUSE',\n humanReadableType: 'Token Unpause',\n tokenUnpause,\n };\n }\n }\n if (txBody.tokenWipe) {\n const tokenWipeAccount = this.parseTokenWipeAccount(\n txBody.tokenWipe,\n );\n if (tokenWipeAccount) {\n return {\n type: 'TOKENWIPEACCOUNT',\n humanReadableType: 'Token Wipe Account',\n tokenWipeAccount,\n } as {\n type?: string;\n humanReadableType?: string;\n tokenWipeAccount?: TokenWipeAccountData;\n };\n }\n }\n if (txBody.tokenDeletion) {\n const tokenDelete = this.parseTokenDelete(txBody.tokenDeletion);\n if (tokenDelete) {\n return {\n type: 'TOKENDELETE',\n humanReadableType: 'Token Delete',\n tokenDelete,\n };\n }\n }\n if (txBody.tokenAssociate) {\n const tokenAssociate = this.parseTokenAssociate(\n txBody.tokenAssociate,\n );\n if (tokenAssociate) {\n return {\n type: 'TOKENASSOCIATE',\n humanReadableType: 'Token Associate',\n tokenAssociate,\n };\n }\n }\n if (txBody.tokenDissociate) {\n const tokenDissociate = this.parseTokenDissociate(\n txBody.tokenDissociate,\n );\n if (tokenDissociate) {\n return {\n type: 'TOKENDISSOCIATE',\n humanReadableType: 'Token Dissociate',\n tokenDissociate,\n };\n }\n }\n if (txBody.tokenFeeScheduleUpdate) {\n const tokenFeeScheduleUpdate = this.parseTokenFeeScheduleUpdate(\n txBody.tokenFeeScheduleUpdate,\n );\n if (tokenFeeScheduleUpdate) {\n return {\n type: 'TOKENFEESCHEDULEUPDATE',\n humanReadableType: 'Token Fee Schedule Update',\n tokenFeeScheduleUpdate,\n };\n }\n }\n if (txBody.tokenAirdrop) {\n const tokenAirdrop = this.parseTokenAirdropFromProto(\n txBody.tokenAirdrop,\n );\n if (tokenAirdrop) {\n return {\n type: 'TOKENAIRDROP',\n humanReadableType: 'Token Airdrop',\n tokenAirdrop,\n };\n }\n }\n }\n }\n }\n } catch (e) {}\n\n const protoResult = this.parseHTSTransaction(transaction);\n if (protoResult.type) {\n return protoResult;\n }\n\n const tokenCreation =\n this.extractTokenCreationFromTransaction(transaction);\n const tokenAirdrop = this.extractTokenAirdropFromTransaction(transaction);\n if (tokenCreation) {\n return {\n type: 'TOKENCREATE',\n humanReadableType: 'Token Creation',\n tokenCreation,\n };\n }\n if (tokenAirdrop) {\n return {\n type: 'TOKENAIRDROP',\n humanReadableType: 'Token Airdrop',\n tokenAirdrop,\n };\n }\n\n return {};\n } catch (error) {\n return {};\n }\n }\n}\n"],"names":["tokenCreation","tokenAirdrop"],"mappings":"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"}
|
|
@@ -1,29 +1,309 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { proto } from "@hashgraph/proto";
|
|
2
|
+
import { hasTransactionType, parseKey } from "./standards-sdk.es220.js";
|
|
3
|
+
import { AccountId, Long, ScheduleId } from "@hashgraph/sdk";
|
|
4
|
+
class ScheduleParser {
|
|
5
|
+
/**
|
|
6
|
+
* Parse Schedule Service transaction using unified dual-branch approach
|
|
7
|
+
* This handles both regular transactions and signed transaction variants
|
|
8
|
+
*/
|
|
9
|
+
static parseScheduleTransaction(transaction, originalBytes) {
|
|
10
|
+
try {
|
|
11
|
+
if (originalBytes || transaction.toBytes) {
|
|
12
|
+
try {
|
|
13
|
+
const bytesToParse = originalBytes || transaction.toBytes();
|
|
14
|
+
const decoded = proto.TransactionList.decode(bytesToParse);
|
|
15
|
+
if (decoded.transactionList && decoded.transactionList.length > 0) {
|
|
16
|
+
const tx = decoded.transactionList[0];
|
|
17
|
+
let txBody = null;
|
|
18
|
+
if (tx.bodyBytes && tx.bodyBytes.length > 0) {
|
|
19
|
+
txBody = proto.TransactionBody.decode(tx.bodyBytes);
|
|
20
|
+
} else if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
|
|
21
|
+
const signedTx = proto.SignedTransaction.decode(
|
|
22
|
+
tx.signedTransactionBytes
|
|
23
|
+
);
|
|
24
|
+
if (signedTx.bodyBytes) {
|
|
25
|
+
txBody = proto.TransactionBody.decode(signedTx.bodyBytes);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (txBody) {
|
|
29
|
+
const protoResult = this.parseFromProtobufTxBody(txBody);
|
|
30
|
+
if (protoResult.type && protoResult.type !== "UNKNOWN") {
|
|
31
|
+
return protoResult;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
} catch (protoError) {
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return this.parseFromTransactionInternals(transaction);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
return {
|
|
41
|
+
type: "UNKNOWN",
|
|
42
|
+
humanReadableType: "Unknown Schedule Transaction"
|
|
43
|
+
};
|
|
44
|
+
}
|
|
11
45
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Parse schedule transaction from protobuf TransactionBody
|
|
48
|
+
* Handles all schedule operations from decoded protobuf data
|
|
49
|
+
*/
|
|
50
|
+
static parseFromProtobufTxBody(txBody) {
|
|
51
|
+
if (txBody.scheduleCreate) {
|
|
52
|
+
const scheduleCreate = this.parseScheduleCreateFromProto(
|
|
53
|
+
txBody.scheduleCreate
|
|
54
|
+
);
|
|
55
|
+
if (scheduleCreate) {
|
|
56
|
+
return {
|
|
57
|
+
type: "SCHEDULECREATE",
|
|
58
|
+
humanReadableType: "Schedule Create",
|
|
59
|
+
scheduleCreate
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (txBody.scheduleSign) {
|
|
64
|
+
const scheduleSign = this.parseScheduleSignFromProto(txBody.scheduleSign);
|
|
65
|
+
if (scheduleSign) {
|
|
66
|
+
return {
|
|
67
|
+
type: "SCHEDULESIGN",
|
|
68
|
+
humanReadableType: "Schedule Sign",
|
|
69
|
+
scheduleSign
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (txBody.scheduleDelete) {
|
|
74
|
+
const scheduleDelete = this.parseScheduleDeleteFromProto(
|
|
75
|
+
txBody.scheduleDelete
|
|
76
|
+
);
|
|
77
|
+
if (scheduleDelete) {
|
|
78
|
+
return {
|
|
79
|
+
type: "SCHEDULEDELETE",
|
|
80
|
+
humanReadableType: "Schedule Delete",
|
|
81
|
+
scheduleDelete
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Extract schedule data from Transaction internal fields
|
|
89
|
+
* This handles cases where data is stored in Transaction object internals
|
|
90
|
+
*/
|
|
91
|
+
static parseFromTransactionInternals(transaction) {
|
|
92
|
+
try {
|
|
93
|
+
const tx = transaction;
|
|
94
|
+
if (hasTransactionType(transaction, "scheduleCreate")) {
|
|
95
|
+
const scheduleCreate = {
|
|
96
|
+
scheduledTransactionBody: Buffer.from(
|
|
97
|
+
tx._scheduledTransaction
|
|
98
|
+
).toString("base64"),
|
|
99
|
+
memo: tx._scheduleMemo,
|
|
100
|
+
adminKey: tx._adminKey ? parseKey(tx._adminKey) : void 0,
|
|
101
|
+
payerAccountId: tx._payerAccountId?.toString(),
|
|
102
|
+
expirationTime: tx._expirationTime?.toString(),
|
|
103
|
+
waitForExpiry: tx._waitForExpiry || false
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
type: "SCHEDULECREATE",
|
|
107
|
+
humanReadableType: "Schedule Create",
|
|
108
|
+
scheduleCreate
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
if (hasTransactionType(transaction, "scheduleSign")) {
|
|
112
|
+
const scheduleSign = {
|
|
113
|
+
scheduleId: tx._scheduleId.toString()
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
type: "SCHEDULESIGN",
|
|
117
|
+
humanReadableType: "Schedule Sign",
|
|
118
|
+
scheduleSign
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (hasTransactionType(transaction, "scheduleDelete")) {
|
|
122
|
+
const scheduleDelete = {
|
|
123
|
+
scheduleId: tx._scheduleId.toString()
|
|
124
|
+
};
|
|
125
|
+
return {
|
|
126
|
+
type: "SCHEDULEDELETE",
|
|
127
|
+
humanReadableType: "Schedule Delete",
|
|
128
|
+
scheduleDelete
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return {};
|
|
132
|
+
} catch (error) {
|
|
133
|
+
return {};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Parse Schedule Create from protobuf data
|
|
138
|
+
*/
|
|
139
|
+
static parseScheduleCreateFromProto(body) {
|
|
140
|
+
if (!body) return void 0;
|
|
141
|
+
const data = {};
|
|
142
|
+
if (body.scheduledTransactionBody) {
|
|
143
|
+
const schedBytes = proto.SchedulableTransactionBody.encode(
|
|
144
|
+
proto.SchedulableTransactionBody.create(body.scheduledTransactionBody)
|
|
145
|
+
).finish();
|
|
146
|
+
data.scheduledTransactionBody = Buffer.from(schedBytes).toString("base64");
|
|
147
|
+
}
|
|
148
|
+
if (body.memo) {
|
|
149
|
+
data.memo = body.memo;
|
|
150
|
+
}
|
|
151
|
+
if (body.adminKey) {
|
|
152
|
+
data.adminKey = parseKey(body.adminKey);
|
|
153
|
+
}
|
|
154
|
+
if (body.payerAccountID) {
|
|
155
|
+
data.payerAccountId = new AccountId(
|
|
156
|
+
body.payerAccountID.shardNum ?? 0,
|
|
157
|
+
body.payerAccountID.realmNum ?? 0,
|
|
158
|
+
body.payerAccountID.accountNum ?? 0
|
|
159
|
+
).toString();
|
|
160
|
+
}
|
|
161
|
+
if (body.expirationTime?.seconds) {
|
|
162
|
+
data.expirationTime = `${Long.fromValue(
|
|
163
|
+
body.expirationTime.seconds
|
|
164
|
+
).toString()}.${body.expirationTime.nanos ?? 0}`;
|
|
165
|
+
}
|
|
166
|
+
if (body.waitForExpiry !== void 0) {
|
|
167
|
+
data.waitForExpiry = body.waitForExpiry;
|
|
168
|
+
}
|
|
169
|
+
return data;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Parse Schedule Sign from protobuf data
|
|
173
|
+
*/
|
|
174
|
+
static parseScheduleSignFromProto(body) {
|
|
175
|
+
if (!body) return void 0;
|
|
176
|
+
const data = {};
|
|
177
|
+
if (body.scheduleID) {
|
|
178
|
+
data.scheduleId = new ScheduleId(
|
|
179
|
+
body.scheduleID.shardNum ?? 0,
|
|
180
|
+
body.scheduleID.realmNum ?? 0,
|
|
181
|
+
body.scheduleID.scheduleNum ?? 0
|
|
182
|
+
).toString();
|
|
183
|
+
}
|
|
184
|
+
return data;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Parse Schedule Delete from protobuf data
|
|
188
|
+
*/
|
|
189
|
+
static parseScheduleDeleteFromProto(body) {
|
|
190
|
+
if (!body) return void 0;
|
|
191
|
+
const data = {};
|
|
192
|
+
if (body.scheduleID) {
|
|
193
|
+
data.scheduleId = new ScheduleId(
|
|
194
|
+
body.scheduleID.shardNum ?? 0,
|
|
195
|
+
body.scheduleID.realmNum ?? 0,
|
|
196
|
+
body.scheduleID.scheduleNum ?? 0
|
|
197
|
+
).toString();
|
|
198
|
+
}
|
|
199
|
+
return data;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Legacy method: Parse schedule create transaction
|
|
203
|
+
* @deprecated Use parseScheduleTransaction instead
|
|
204
|
+
*/
|
|
205
|
+
static parseScheduleCreate(transaction) {
|
|
206
|
+
try {
|
|
207
|
+
const result = this.parseScheduleTransaction(transaction);
|
|
208
|
+
return result.scheduleCreate || null;
|
|
209
|
+
} catch (error) {
|
|
210
|
+
console.warn("[ScheduleParser] Failed to parse schedule create:", error);
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Legacy method: Parse schedule sign transaction
|
|
216
|
+
* @deprecated Use parseScheduleTransaction instead
|
|
217
|
+
*/
|
|
218
|
+
static parseScheduleSign(transaction) {
|
|
219
|
+
try {
|
|
220
|
+
const result = this.parseScheduleTransaction(transaction);
|
|
221
|
+
return result.scheduleSign || null;
|
|
222
|
+
} catch (error) {
|
|
223
|
+
console.warn("[ScheduleParser] Failed to parse schedule sign:", error);
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Legacy method: Parse schedule delete transaction
|
|
229
|
+
* @deprecated Use parseScheduleTransaction instead
|
|
230
|
+
*/
|
|
231
|
+
static parseScheduleDelete(transaction) {
|
|
232
|
+
try {
|
|
233
|
+
const result = this.parseScheduleTransaction(transaction);
|
|
234
|
+
return result.scheduleDelete || null;
|
|
235
|
+
} catch (error) {
|
|
236
|
+
console.warn("[ScheduleParser] Failed to parse schedule delete:", error);
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Parse schedule info from transaction body (for scheduled transactions)
|
|
242
|
+
*/
|
|
243
|
+
static extractScheduleInfo(transaction) {
|
|
244
|
+
try {
|
|
245
|
+
const transactionBody = transaction._transactionBody;
|
|
246
|
+
if (transactionBody?.scheduleRef) {
|
|
247
|
+
return {
|
|
248
|
+
isScheduled: true,
|
|
249
|
+
scheduleRef: transactionBody.scheduleRef.toString()
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
const tx = transaction;
|
|
253
|
+
if (tx._scheduleId || tx.scheduleId) {
|
|
254
|
+
return {
|
|
255
|
+
isScheduled: true,
|
|
256
|
+
scheduleRef: (tx._scheduleId || tx.scheduleId)?.toString()
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
return { isScheduled: false };
|
|
260
|
+
} catch (error) {
|
|
261
|
+
return { isScheduled: false };
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Parse a scheduled transaction body to extract the inner transaction
|
|
266
|
+
* This is used when a schedule contains another transaction to be executed
|
|
267
|
+
*/
|
|
268
|
+
static parseScheduledTransactionBody(scheduledTxBytes) {
|
|
269
|
+
try {
|
|
270
|
+
let bytes;
|
|
271
|
+
if (scheduledTxBytes.startsWith("0x")) {
|
|
272
|
+
const hexString = scheduledTxBytes.slice(2);
|
|
273
|
+
bytes = new Uint8Array(Buffer.from(hexString, "hex"));
|
|
274
|
+
} else {
|
|
275
|
+
bytes = new Uint8Array(Buffer.from(scheduledTxBytes, "base64"));
|
|
276
|
+
}
|
|
277
|
+
const schedulableBody = proto.SchedulableTransactionBody.decode(bytes);
|
|
278
|
+
const txType = Object.keys(schedulableBody).find(
|
|
279
|
+
(key) => schedulableBody[key] !== null && key !== "transactionFee" && key !== "memo"
|
|
280
|
+
);
|
|
281
|
+
if (txType) {
|
|
282
|
+
return {
|
|
283
|
+
type: txType.toUpperCase(),
|
|
284
|
+
body: schedulableBody[txType],
|
|
285
|
+
memo: schedulableBody.memo,
|
|
286
|
+
transactionFee: schedulableBody.transactionFee?.toString()
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
return null;
|
|
290
|
+
} catch (error) {
|
|
291
|
+
console.warn(
|
|
292
|
+
"[ScheduleParser] Failed to parse scheduled transaction body:",
|
|
293
|
+
error
|
|
294
|
+
);
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Parse Schedule Service transaction from Transaction object
|
|
300
|
+
* This is the unified entry point that delegates to the comprehensive parsing logic
|
|
301
|
+
*/
|
|
302
|
+
static parseFromTransactionObject(transaction) {
|
|
303
|
+
return this.parseScheduleTransaction(transaction);
|
|
20
304
|
}
|
|
21
|
-
return present.reduce((sum, value) => sum + value, 0) / present.length;
|
|
22
305
|
}
|
|
23
306
|
export {
|
|
24
|
-
|
|
25
|
-
logScale,
|
|
26
|
-
meanOfPresent,
|
|
27
|
-
normalizeRatio
|
|
307
|
+
ScheduleParser
|
|
28
308
|
};
|
|
29
309
|
//# sourceMappingURL=standards-sdk.es164.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es164.js","sources":["../../src/hcs-25/adapters/normalization.ts"],"sourcesContent":["import { clampScore } from '../scoring';\n\n/**\n * Clamps a value into the unit interval `[0, 1]`.\n */\nexport function clampUnit(value: number): number {\n return Math.min(1, Math.max(0, value));\n}\n\n/**\n * Normalizes a ratio that implementations may store either as `0..1` or as\n * `0..100`. Values above one are treated as percent scale.\n */\nexport function normalizeRatio(value: number): number {\n return clampUnit(value > 1 ? value / 100 : value);\n}\n\n/**\n * Log-scales a raw count into `[0, 100]` using `log1p` against a cap, per\n * the HCS-25 recommended log-scaling pattern.\n */\nexport function logScale(value: number, cap: number): number {\n if (cap <= 0) {\n return 0;\n }\n return clampScore(\n 100 * clampUnit(Math.log1p(Math.max(0, value)) / Math.log1p(cap)),\n );\n}\n\n/**\n * Computes the arithmetic mean of the provided values, returning null when\n * none are present.\n */\nexport function meanOfPresent(\n values: readonly (number | null)[],\n): number | null {\n const present = values.filter((value): value is number => value !== null);\n if (present.length === 0) {\n return null;\n }\n return present.reduce((sum, value) => sum + value, 0) / present.length;\n}\n"],"names":[],"mappings":";AAKO,SAAS,UAAU,OAAuB;AAC/C,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;AACvC;AAMO,SAAS,eAAe,OAAuB;AACpD,SAAO,UAAU,QAAQ,IAAI,QAAQ,MAAM,KAAK;AAClD;AAMO,SAAS,SAAS,OAAe,KAAqB;AAC3D,MAAI,OAAO,GAAG;AACZ,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,MAAM,UAAU,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC;AAAA,EAAA;AAEpE;AAMO,SAAS,cACd,QACe;AACf,QAAM,UAAU,OAAO,OAAO,CAAC,UAA2B,UAAU,IAAI;AACxE,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC,IAAI,QAAQ;AAClE;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es164.js","sources":["../../src/utils/parsers/schedule-parser.ts"],"sourcesContent":["import { Transaction } from '@hashgraph/sdk';\nimport { proto } from '@hashgraph/proto';\nimport {\n ScheduleCreateData,\n ScheduleSignData,\n ScheduleDeleteData,\n ParsedTransaction,\n} from '../transaction-parser-types';\nimport {\n parseKey,\n extractTransactionBody,\n hasTransactionType,\n} from './parser-utils';\nimport { AccountId, ScheduleId, Long } from '@hashgraph/sdk';\n\n/**\n * Schedule Operations Parser\n *\n * Specialized parser for schedule-related transaction types including:\n * - Schedule Create with inner transaction parsing\n * - Schedule Sign operations\n * - Schedule Delete operations\n * - Proper dual-branch parsing (regular vs signed transactions)\n * - Comprehensive protobuf extraction\n *\n * Scheduled transactions allow for deferred execution of transactions\n * that require multiple signatures or meet specific conditions.\n */\nexport class ScheduleParser {\n /**\n * Parse Schedule Service transaction using unified dual-branch approach\n * This handles both regular transactions and signed transaction variants\n */\n static parseScheduleTransaction(\n transaction: Transaction,\n originalBytes?: Uint8Array,\n ): {\n type?: string;\n humanReadableType?: string;\n scheduleCreate?: ScheduleCreateData;\n scheduleSign?: ScheduleSignData;\n scheduleDelete?: ScheduleDeleteData;\n [key: string]: unknown;\n } {\n try {\n if (originalBytes || transaction.toBytes) {\n try {\n const bytesToParse = originalBytes || transaction.toBytes();\n const decoded = proto.TransactionList.decode(bytesToParse);\n\n if (decoded.transactionList && decoded.transactionList.length > 0) {\n const tx = decoded.transactionList[0];\n let txBody: proto.ITransactionBody | null = null;\n\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n txBody = proto.TransactionBody.decode(tx.bodyBytes);\n } else if (\n tx.signedTransactionBytes &&\n tx.signedTransactionBytes.length > 0\n ) {\n const signedTx = proto.SignedTransaction.decode(\n tx.signedTransactionBytes,\n );\n if (signedTx.bodyBytes) {\n txBody = proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n if (txBody) {\n const protoResult = this.parseFromProtobufTxBody(txBody);\n if (protoResult.type && protoResult.type !== 'UNKNOWN') {\n return protoResult;\n }\n }\n }\n } catch (protoError) {}\n }\n\n return this.parseFromTransactionInternals(transaction);\n } catch (error) {\n return {\n type: 'UNKNOWN',\n humanReadableType: 'Unknown Schedule Transaction',\n };\n }\n }\n\n /**\n * Parse schedule transaction from protobuf TransactionBody\n * Handles all schedule operations from decoded protobuf data\n */\n private static parseFromProtobufTxBody(txBody: proto.ITransactionBody): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n if (txBody.scheduleCreate) {\n const scheduleCreate = this.parseScheduleCreateFromProto(\n txBody.scheduleCreate,\n );\n if (scheduleCreate) {\n return {\n type: 'SCHEDULECREATE',\n humanReadableType: 'Schedule Create',\n scheduleCreate,\n };\n }\n }\n\n if (txBody.scheduleSign) {\n const scheduleSign = this.parseScheduleSignFromProto(txBody.scheduleSign);\n if (scheduleSign) {\n return {\n type: 'SCHEDULESIGN',\n humanReadableType: 'Schedule Sign',\n scheduleSign,\n };\n }\n }\n\n if (txBody.scheduleDelete) {\n const scheduleDelete = this.parseScheduleDeleteFromProto(\n txBody.scheduleDelete,\n );\n if (scheduleDelete) {\n return {\n type: 'SCHEDULEDELETE',\n humanReadableType: 'Schedule Delete',\n scheduleDelete,\n };\n }\n }\n\n return {};\n }\n\n /**\n * Extract schedule data from Transaction internal fields\n * This handles cases where data is stored in Transaction object internals\n */\n private static parseFromTransactionInternals(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n try {\n const tx = transaction as unknown as {\n _scheduledTransaction?: Uint8Array;\n _scheduleMemo?: string;\n _adminKey?: unknown;\n _payerAccountId?: { toString(): string };\n _expirationTime?: { toString(): string };\n _waitForExpiry?: boolean;\n _scheduleId?: { toString(): string };\n constructor?: { name?: string };\n };\n\n if (hasTransactionType(transaction, 'scheduleCreate')) {\n const scheduleCreate: ScheduleCreateData = {\n scheduledTransactionBody: Buffer.from(\n tx._scheduledTransaction,\n ).toString('base64'),\n memo: tx._scheduleMemo,\n adminKey: tx._adminKey ? parseKey(tx._adminKey) : undefined,\n payerAccountId: tx._payerAccountId?.toString(),\n expirationTime: tx._expirationTime?.toString(),\n waitForExpiry: tx._waitForExpiry || false,\n };\n\n return {\n type: 'SCHEDULECREATE',\n humanReadableType: 'Schedule Create',\n scheduleCreate,\n };\n }\n\n if (hasTransactionType(transaction, 'scheduleSign')) {\n const scheduleSign: ScheduleSignData = {\n scheduleId: tx._scheduleId.toString(),\n };\n\n return {\n type: 'SCHEDULESIGN',\n humanReadableType: 'Schedule Sign',\n scheduleSign,\n };\n }\n\n if (hasTransactionType(transaction, 'scheduleDelete')) {\n const scheduleDelete: ScheduleDeleteData = {\n scheduleId: tx._scheduleId.toString(),\n };\n\n return {\n type: 'SCHEDULEDELETE',\n humanReadableType: 'Schedule Delete',\n scheduleDelete,\n };\n }\n\n return {};\n } catch (error) {\n return {};\n }\n }\n\n /**\n * Parse Schedule Create from protobuf data\n */\n static parseScheduleCreateFromProto(\n body: proto.IScheduleCreateTransactionBody,\n ): ScheduleCreateData | undefined {\n if (!body) return undefined;\n\n const data: ScheduleCreateData = {};\n\n if (body.scheduledTransactionBody) {\n const schedBytes = proto.SchedulableTransactionBody.encode(\n proto.SchedulableTransactionBody.create(body.scheduledTransactionBody),\n ).finish();\n data.scheduledTransactionBody =\n Buffer.from(schedBytes).toString('base64');\n }\n\n if (body.memo) {\n data.memo = body.memo;\n }\n\n if (body.adminKey) {\n data.adminKey = parseKey(body.adminKey);\n }\n\n if (body.payerAccountID) {\n data.payerAccountId = new AccountId(\n body.payerAccountID.shardNum ?? 0,\n body.payerAccountID.realmNum ?? 0,\n body.payerAccountID.accountNum ?? 0,\n ).toString();\n }\n\n if (body.expirationTime?.seconds) {\n data.expirationTime = `${Long.fromValue(\n body.expirationTime.seconds,\n ).toString()}.${body.expirationTime.nanos ?? 0}`;\n }\n\n if (body.waitForExpiry !== undefined) {\n data.waitForExpiry = body.waitForExpiry;\n }\n\n return data;\n }\n\n /**\n * Parse Schedule Sign from protobuf data\n */\n static parseScheduleSignFromProto(\n body: proto.IScheduleSignTransactionBody,\n ): ScheduleSignData | undefined {\n if (!body) return undefined;\n\n const data: ScheduleSignData = {};\n\n if (body.scheduleID) {\n data.scheduleId = new ScheduleId(\n body.scheduleID.shardNum ?? 0,\n body.scheduleID.realmNum ?? 0,\n body.scheduleID.scheduleNum ?? 0,\n ).toString();\n }\n\n return data;\n }\n\n /**\n * Parse Schedule Delete from protobuf data\n */\n static parseScheduleDeleteFromProto(\n body: proto.IScheduleDeleteTransactionBody,\n ): ScheduleDeleteData | undefined {\n if (!body) return undefined;\n\n const data: ScheduleDeleteData = {};\n\n if (body.scheduleID) {\n data.scheduleId = new ScheduleId(\n body.scheduleID.shardNum ?? 0,\n body.scheduleID.realmNum ?? 0,\n body.scheduleID.scheduleNum ?? 0,\n ).toString();\n }\n\n return data;\n }\n\n /**\n * Legacy method: Parse schedule create transaction\n * @deprecated Use parseScheduleTransaction instead\n */\n static parseScheduleCreate(\n transaction: Transaction,\n ): ScheduleCreateData | null {\n try {\n const result = this.parseScheduleTransaction(transaction);\n return result.scheduleCreate || null;\n } catch (error) {\n console.warn('[ScheduleParser] Failed to parse schedule create:', error);\n return null;\n }\n }\n\n /**\n * Legacy method: Parse schedule sign transaction\n * @deprecated Use parseScheduleTransaction instead\n */\n static parseScheduleSign(transaction: Transaction): ScheduleSignData | null {\n try {\n const result = this.parseScheduleTransaction(transaction);\n return result.scheduleSign || null;\n } catch (error) {\n console.warn('[ScheduleParser] Failed to parse schedule sign:', error);\n return null;\n }\n }\n\n /**\n * Legacy method: Parse schedule delete transaction\n * @deprecated Use parseScheduleTransaction instead\n */\n static parseScheduleDelete(\n transaction: Transaction,\n ): ScheduleDeleteData | null {\n try {\n const result = this.parseScheduleTransaction(transaction);\n return result.scheduleDelete || null;\n } catch (error) {\n console.warn('[ScheduleParser] Failed to parse schedule delete:', error);\n return null;\n }\n }\n\n /**\n * Parse schedule info from transaction body (for scheduled transactions)\n */\n static extractScheduleInfo(transaction: Transaction): {\n isScheduled: boolean;\n scheduleRef?: string;\n } {\n try {\n const transactionBody = (transaction as any)._transactionBody;\n\n if (transactionBody?.scheduleRef) {\n return {\n isScheduled: true,\n scheduleRef: transactionBody.scheduleRef.toString(),\n };\n }\n\n const tx = transaction as any;\n if (tx._scheduleId || tx.scheduleId) {\n return {\n isScheduled: true,\n scheduleRef: (tx._scheduleId || tx.scheduleId)?.toString(),\n };\n }\n\n return { isScheduled: false };\n } catch (error) {\n return { isScheduled: false };\n }\n }\n\n /**\n * Parse a scheduled transaction body to extract the inner transaction\n * This is used when a schedule contains another transaction to be executed\n */\n static parseScheduledTransactionBody(scheduledTxBytes: string): any {\n try {\n let bytes: Uint8Array;\n\n if (scheduledTxBytes.startsWith('0x')) {\n const hexString = scheduledTxBytes.slice(2);\n bytes = new Uint8Array(Buffer.from(hexString, 'hex'));\n } else {\n bytes = new Uint8Array(Buffer.from(scheduledTxBytes, 'base64'));\n }\n\n const schedulableBody = proto.SchedulableTransactionBody.decode(bytes);\n\n const txType = Object.keys(schedulableBody).find(\n key =>\n schedulableBody[key as keyof proto.ISchedulableTransactionBody] !==\n null &&\n key !== 'transactionFee' &&\n key !== 'memo',\n );\n\n if (txType) {\n return {\n type: txType.toUpperCase(),\n body: schedulableBody[\n txType as keyof proto.ISchedulableTransactionBody\n ],\n memo: schedulableBody.memo,\n transactionFee: schedulableBody.transactionFee?.toString(),\n };\n }\n\n return null;\n } catch (error) {\n console.warn(\n '[ScheduleParser] Failed to parse scheduled transaction body:',\n error,\n );\n return null;\n }\n }\n\n /**\n * Parse Schedule Service transaction from Transaction object\n * This is the unified entry point that delegates to the comprehensive parsing logic\n */\n static parseFromTransactionObject(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n return this.parseScheduleTransaction(transaction);\n }\n}\n"],"names":[],"mappings":";;;AA4BO,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAK1B,OAAO,yBACL,aACA,eAQA;AACA,QAAI;AACF,UAAI,iBAAiB,YAAY,SAAS;AACxC,YAAI;AACF,gBAAM,eAAe,iBAAiB,YAAY,QAAA;AAClD,gBAAM,UAAU,MAAM,gBAAgB,OAAO,YAAY;AAEzD,cAAI,QAAQ,mBAAmB,QAAQ,gBAAgB,SAAS,GAAG;AACjE,kBAAM,KAAK,QAAQ,gBAAgB,CAAC;AACpC,gBAAI,SAAwC;AAE5C,gBAAI,GAAG,aAAa,GAAG,UAAU,SAAS,GAAG;AAC3C,uBAAS,MAAM,gBAAgB,OAAO,GAAG,SAAS;AAAA,YACpD,WACE,GAAG,0BACH,GAAG,uBAAuB,SAAS,GACnC;AACA,oBAAM,WAAW,MAAM,kBAAkB;AAAA,gBACvC,GAAG;AAAA,cAAA;AAEL,kBAAI,SAAS,WAAW;AACtB,yBAAS,MAAM,gBAAgB,OAAO,SAAS,SAAS;AAAA,cAC1D;AAAA,YACF;AAEA,gBAAI,QAAQ;AACV,oBAAM,cAAc,KAAK,wBAAwB,MAAM;AACvD,kBAAI,YAAY,QAAQ,YAAY,SAAS,WAAW;AACtD,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF,SAAS,YAAY;AAAA,QAAC;AAAA,MACxB;AAEA,aAAO,KAAK,8BAA8B,WAAW;AAAA,IACvD,SAAS,OAAO;AACd,aAAO;AAAA,QACL,MAAM;AAAA,QACN,mBAAmB;AAAA,MAAA;AAAA,IAEvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,wBAAwB,QAIrC;AACA,QAAI,OAAO,gBAAgB;AACzB,YAAM,iBAAiB,KAAK;AAAA,QAC1B,OAAO;AAAA,MAAA;AAET,UAAI,gBAAgB;AAClB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,QAAI,OAAO,cAAc;AACvB,YAAM,eAAe,KAAK,2BAA2B,OAAO,YAAY;AACxE,UAAI,cAAc;AAChB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,QAAI,OAAO,gBAAgB;AACzB,YAAM,iBAAiB,KAAK;AAAA,QAC1B,OAAO;AAAA,MAAA;AAET,UAAI,gBAAgB;AAClB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,WAAO,CAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,8BAA8B,aAI3C;AACA,QAAI;AACF,YAAM,KAAK;AAWX,UAAI,mBAAmB,aAAa,gBAAgB,GAAG;AACrD,cAAM,iBAAqC;AAAA,UACzC,0BAA0B,OAAO;AAAA,YAC/B,GAAG;AAAA,UAAA,EACH,SAAS,QAAQ;AAAA,UACnB,MAAM,GAAG;AAAA,UACT,UAAU,GAAG,YAAY,SAAS,GAAG,SAAS,IAAI;AAAA,UAClD,gBAAgB,GAAG,iBAAiB,SAAA;AAAA,UACpC,gBAAgB,GAAG,iBAAiB,SAAA;AAAA,UACpC,eAAe,GAAG,kBAAkB;AAAA,QAAA;AAGtC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAEA,UAAI,mBAAmB,aAAa,cAAc,GAAG;AACnD,cAAM,eAAiC;AAAA,UACrC,YAAY,GAAG,YAAY,SAAA;AAAA,QAAS;AAGtC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAEA,UAAI,mBAAmB,aAAa,gBAAgB,GAAG;AACrD,cAAM,iBAAqC;AAAA,UACzC,YAAY,GAAG,YAAY,SAAA;AAAA,QAAS;AAGtC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAEA,aAAO,CAAA;AAAA,IACT,SAAS,OAAO;AACd,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,6BACL,MACgC;AAChC,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAA2B,CAAA;AAEjC,QAAI,KAAK,0BAA0B;AACjC,YAAM,aAAa,MAAM,2BAA2B;AAAA,QAClD,MAAM,2BAA2B,OAAO,KAAK,wBAAwB;AAAA,MAAA,EACrE,OAAA;AACF,WAAK,2BACH,OAAO,KAAK,UAAU,EAAE,SAAS,QAAQ;AAAA,IAC7C;AAEA,QAAI,KAAK,MAAM;AACb,WAAK,OAAO,KAAK;AAAA,IACnB;AAEA,QAAI,KAAK,UAAU;AACjB,WAAK,WAAW,SAAS,KAAK,QAAQ;AAAA,IACxC;AAEA,QAAI,KAAK,gBAAgB;AACvB,WAAK,iBAAiB,IAAI;AAAA,QACxB,KAAK,eAAe,YAAY;AAAA,QAChC,KAAK,eAAe,YAAY;AAAA,QAChC,KAAK,eAAe,cAAc;AAAA,MAAA,EAClC,SAAA;AAAA,IACJ;AAEA,QAAI,KAAK,gBAAgB,SAAS;AAChC,WAAK,iBAAiB,GAAG,KAAK;AAAA,QAC5B,KAAK,eAAe;AAAA,MAAA,EACpB,SAAA,CAAU,IAAI,KAAK,eAAe,SAAS,CAAC;AAAA,IAChD;AAEA,QAAI,KAAK,kBAAkB,QAAW;AACpC,WAAK,gBAAgB,KAAK;AAAA,IAC5B;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,2BACL,MAC8B;AAC9B,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAAyB,CAAA;AAE/B,QAAI,KAAK,YAAY;AACnB,WAAK,aAAa,IAAI;AAAA,QACpB,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,eAAe;AAAA,MAAA,EAC/B,SAAA;AAAA,IACJ;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,6BACL,MACgC;AAChC,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAA2B,CAAA;AAEjC,QAAI,KAAK,YAAY;AACnB,WAAK,aAAa,IAAI;AAAA,QACpB,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,eAAe;AAAA,MAAA,EAC/B,SAAA;AAAA,IACJ;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,oBACL,aAC2B;AAC3B,QAAI;AACF,YAAM,SAAS,KAAK,yBAAyB,WAAW;AACxD,aAAO,OAAO,kBAAkB;AAAA,IAClC,SAAS,OAAO;AACd,cAAQ,KAAK,qDAAqD,KAAK;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,kBAAkB,aAAmD;AAC1E,QAAI;AACF,YAAM,SAAS,KAAK,yBAAyB,WAAW;AACxD,aAAO,OAAO,gBAAgB;AAAA,IAChC,SAAS,OAAO;AACd,cAAQ,KAAK,mDAAmD,KAAK;AACrE,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,oBACL,aAC2B;AAC3B,QAAI;AACF,YAAM,SAAS,KAAK,yBAAyB,WAAW;AACxD,aAAO,OAAO,kBAAkB;AAAA,IAClC,SAAS,OAAO;AACd,cAAQ,KAAK,qDAAqD,KAAK;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,oBAAoB,aAGzB;AACA,QAAI;AACF,YAAM,kBAAmB,YAAoB;AAE7C,UAAI,iBAAiB,aAAa;AAChC,eAAO;AAAA,UACL,aAAa;AAAA,UACb,aAAa,gBAAgB,YAAY,SAAA;AAAA,QAAS;AAAA,MAEtD;AAEA,YAAM,KAAK;AACX,UAAI,GAAG,eAAe,GAAG,YAAY;AACnC,eAAO;AAAA,UACL,aAAa;AAAA,UACb,cAAc,GAAG,eAAe,GAAG,aAAa,SAAA;AAAA,QAAS;AAAA,MAE7D;AAEA,aAAO,EAAE,aAAa,MAAA;AAAA,IACxB,SAAS,OAAO;AACd,aAAO,EAAE,aAAa,MAAA;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,8BAA8B,kBAA+B;AAClE,QAAI;AACF,UAAI;AAEJ,UAAI,iBAAiB,WAAW,IAAI,GAAG;AACrC,cAAM,YAAY,iBAAiB,MAAM,CAAC;AAC1C,gBAAQ,IAAI,WAAW,OAAO,KAAK,WAAW,KAAK,CAAC;AAAA,MACtD,OAAO;AACL,gBAAQ,IAAI,WAAW,OAAO,KAAK,kBAAkB,QAAQ,CAAC;AAAA,MAChE;AAEA,YAAM,kBAAkB,MAAM,2BAA2B,OAAO,KAAK;AAErE,YAAM,SAAS,OAAO,KAAK,eAAe,EAAE;AAAA,QAC1C,SACE,gBAAgB,GAA8C,MAC5D,QACF,QAAQ,oBACR,QAAQ;AAAA,MAAA;AAGZ,UAAI,QAAQ;AACV,eAAO;AAAA,UACL,MAAM,OAAO,YAAA;AAAA,UACb,MAAM,gBACJ,MACF;AAAA,UACA,MAAM,gBAAgB;AAAA,UACtB,gBAAgB,gBAAgB,gBAAgB,SAAA;AAAA,QAAS;AAAA,MAE7D;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAEF,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,2BAA2B,aAIhC;AACA,WAAO,KAAK,yBAAyB,WAAW;AAAA,EAClD;AACF;"}
|