@oobe-protocol-labs/synapse-sap-sdk 0.14.0 → 0.15.1
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/LICENSE +21 -0
- package/README.md +986 -0
- package/dist/cjs/client.js +31 -14
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/constants/addresses.js +143 -0
- package/dist/cjs/constants/addresses.js.map +1 -0
- package/dist/cjs/constants/index.js +64 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/constants/limits.js +161 -0
- package/dist/cjs/constants/limits.js.map +1 -0
- package/dist/cjs/constants/network.js +81 -0
- package/dist/cjs/constants/network.js.map +1 -0
- package/dist/cjs/constants/payments.js +137 -0
- package/dist/cjs/constants/payments.js.map +1 -0
- package/dist/cjs/constants/programs.js +78 -0
- package/dist/cjs/constants/programs.js.map +1 -0
- package/dist/cjs/constants/seeds.js +76 -0
- package/dist/cjs/constants/seeds.js.map +1 -0
- package/dist/cjs/constants.js +39 -32
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/core/client.js +546 -0
- package/dist/cjs/core/client.js.map +1 -0
- package/dist/cjs/core/connection.js +350 -0
- package/dist/cjs/core/connection.js.map +1 -0
- package/dist/cjs/core/index.js +25 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/errors/index.js +334 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/errors.js +15 -5
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/events/geyser.js +295 -0
- package/dist/cjs/events/geyser.js.map +1 -0
- package/dist/cjs/events/index.js +32 -26
- package/dist/cjs/events/index.js.map +1 -1
- package/dist/cjs/idl/index.js +63 -0
- package/dist/cjs/idl/index.js.map +1 -0
- package/dist/cjs/idl/synapse_agent_sap.json +14595 -0
- package/dist/cjs/instructions/agent.js +1 -0
- package/dist/cjs/instructions/agent.js.map +1 -1
- package/dist/cjs/instructions/attestation.js +1 -0
- package/dist/cjs/instructions/attestation.js.map +1 -1
- package/dist/cjs/instructions/digest.js +1 -0
- package/dist/cjs/instructions/digest.js.map +1 -1
- package/dist/cjs/instructions/dispute.js +1 -0
- package/dist/cjs/instructions/dispute.js.map +1 -1
- package/dist/cjs/instructions/escrow.js +1 -0
- package/dist/cjs/instructions/escrow.js.map +1 -1
- package/dist/cjs/instructions/global.js +1 -0
- package/dist/cjs/instructions/global.js.map +1 -1
- package/dist/cjs/instructions/indexing.js +1 -0
- package/dist/cjs/instructions/indexing.js.map +1 -1
- package/dist/cjs/instructions/misc.js +1 -0
- package/dist/cjs/instructions/misc.js.map +1 -1
- package/dist/cjs/instructions/session.js +1 -0
- package/dist/cjs/instructions/session.js.map +1 -1
- package/dist/cjs/instructions/staking.js +1 -0
- package/dist/cjs/instructions/staking.js.map +1 -1
- package/dist/cjs/instructions/subscription.js +1 -0
- package/dist/cjs/instructions/subscription.js.map +1 -1
- package/dist/cjs/instructions/tools.js +1 -0
- package/dist/cjs/instructions/tools.js.map +1 -1
- package/dist/cjs/instructions/vault.js +1 -0
- package/dist/cjs/instructions/vault.js.map +1 -1
- package/dist/cjs/modules/agent.js +272 -0
- package/dist/cjs/modules/agent.js.map +1 -0
- package/dist/cjs/modules/attestation.js +147 -0
- package/dist/cjs/modules/attestation.js.map +1 -0
- package/dist/cjs/modules/base.js +189 -0
- package/dist/cjs/modules/base.js.map +1 -0
- package/dist/cjs/modules/escrow-v2.js +607 -0
- package/dist/cjs/modules/escrow-v2.js.map +1 -0
- package/dist/cjs/modules/escrow.js +336 -0
- package/dist/cjs/modules/escrow.js.map +1 -0
- package/dist/cjs/modules/feedback.js +166 -0
- package/dist/cjs/modules/feedback.js.map +1 -0
- package/dist/cjs/modules/index.js +43 -0
- package/dist/cjs/modules/index.js.map +1 -0
- package/dist/cjs/modules/indexing.js +375 -0
- package/dist/cjs/modules/indexing.js.map +1 -0
- package/dist/cjs/modules/ledger.js +234 -0
- package/dist/cjs/modules/ledger.js.map +1 -0
- package/dist/cjs/modules/receipt.js +148 -0
- package/dist/cjs/modules/receipt.js.map +1 -0
- package/dist/cjs/modules/staking.js +159 -0
- package/dist/cjs/modules/staking.js.map +1 -0
- package/dist/cjs/modules/subscription.js +96 -0
- package/dist/cjs/modules/subscription.js.map +1 -0
- package/dist/cjs/modules/tools.js +345 -0
- package/dist/cjs/modules/tools.js.map +1 -0
- package/dist/cjs/modules/vault.js +427 -0
- package/dist/cjs/modules/vault.js.map +1 -0
- package/dist/cjs/parser/client.js +146 -0
- package/dist/cjs/parser/client.js.map +1 -0
- package/dist/cjs/parser/complete.js +177 -0
- package/dist/cjs/parser/complete.js.map +1 -0
- package/dist/cjs/parser/index.js +57 -0
- package/dist/cjs/parser/index.js.map +1 -0
- package/dist/cjs/parser/inner.js +185 -0
- package/dist/cjs/parser/inner.js.map +1 -0
- package/dist/cjs/parser/instructions.js +114 -0
- package/dist/cjs/parser/instructions.js.map +1 -0
- package/dist/cjs/parser/transaction.js +153 -0
- package/dist/cjs/parser/transaction.js.map +1 -0
- package/dist/cjs/parser/types.js +14 -0
- package/dist/cjs/parser/types.js.map +1 -0
- package/dist/cjs/pda/index.js +672 -0
- package/dist/cjs/pda/index.js.map +1 -0
- package/dist/cjs/plugin/index.js +952 -0
- package/dist/cjs/plugin/index.js.map +1 -0
- package/dist/cjs/plugin/protocols.js +282 -0
- package/dist/cjs/plugin/protocols.js.map +1 -0
- package/dist/cjs/plugin/schemas.js +863 -0
- package/dist/cjs/plugin/schemas.js.map +1 -0
- package/dist/cjs/postgres/adapter.js +715 -0
- package/dist/cjs/postgres/adapter.js.map +1 -0
- package/dist/cjs/postgres/index.js +50 -0
- package/dist/cjs/postgres/index.js.map +1 -0
- package/dist/cjs/postgres/serializers.js +381 -0
- package/dist/cjs/postgres/serializers.js.map +1 -0
- package/dist/cjs/postgres/sync.js +289 -0
- package/dist/cjs/postgres/sync.js.map +1 -0
- package/dist/cjs/postgres/types.js +44 -0
- package/dist/cjs/postgres/types.js.map +1 -0
- package/dist/cjs/registries/builder.js +414 -0
- package/dist/cjs/registries/builder.js.map +1 -0
- package/dist/cjs/registries/discovery.js +362 -0
- package/dist/cjs/registries/discovery.js.map +1 -0
- package/dist/cjs/registries/fairscale.js +639 -0
- package/dist/cjs/registries/fairscale.js.map +1 -0
- package/dist/cjs/registries/index.js +58 -0
- package/dist/cjs/registries/index.js.map +1 -0
- package/dist/cjs/registries/metaplex-bridge.js +743 -0
- package/dist/cjs/registries/metaplex-bridge.js.map +1 -0
- package/dist/cjs/registries/session.js +433 -0
- package/dist/cjs/registries/session.js.map +1 -0
- package/dist/cjs/registries/x402.js +668 -0
- package/dist/cjs/registries/x402.js.map +1 -0
- package/dist/cjs/types/accounts.js +13 -0
- package/dist/cjs/types/accounts.js.map +1 -0
- package/dist/cjs/types/common.js +13 -0
- package/dist/cjs/types/common.js.map +1 -0
- package/dist/cjs/types/endpoint.js +15 -0
- package/dist/cjs/types/endpoint.js.map +1 -0
- package/dist/cjs/types/enums.js +269 -0
- package/dist/cjs/types/enums.js.map +1 -0
- package/dist/cjs/types/index.js +41 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/instructions.js +92 -0
- package/dist/cjs/types/instructions.js.map +1 -0
- package/dist/cjs/types.js +4 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/anchor-errors.js +453 -0
- package/dist/cjs/utils/anchor-errors.js.map +1 -0
- package/dist/cjs/utils/endpoint-validator.js +232 -0
- package/dist/cjs/utils/endpoint-validator.js.map +1 -0
- package/dist/cjs/utils/escrow-validation.js +219 -0
- package/dist/cjs/utils/escrow-validation.js.map +1 -0
- package/dist/cjs/utils/hash.js +109 -0
- package/dist/cjs/utils/hash.js.map +1 -0
- package/dist/cjs/utils/index.js +10 -4
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/merchant-validator.js +246 -0
- package/dist/cjs/utils/merchant-validator.js.map +1 -0
- package/dist/cjs/utils/network-normalizer.js +236 -0
- package/dist/cjs/utils/network-normalizer.js.map +1 -0
- package/dist/cjs/utils/priority-fee.js +215 -0
- package/dist/cjs/utils/priority-fee.js.map +1 -0
- package/dist/cjs/utils/rpc-strategy.js +239 -0
- package/dist/cjs/utils/rpc-strategy.js.map +1 -0
- package/dist/cjs/utils/schemas.js +331 -0
- package/dist/cjs/utils/schemas.js.map +1 -0
- package/dist/cjs/utils/serialization.js +105 -0
- package/dist/cjs/utils/serialization.js.map +1 -0
- package/dist/cjs/utils/validate.js +1 -1
- package/dist/cjs/utils/validate.js.map +1 -1
- package/dist/cjs/utils/validation.js +36 -0
- package/dist/cjs/utils/validation.js.map +1 -0
- package/dist/cjs/utils/volume-curve.js +117 -0
- package/dist/cjs/utils/volume-curve.js.map +1 -0
- package/dist/cjs/utils/x402-direct.js +231 -0
- package/dist/cjs/utils/x402-direct.js.map +1 -0
- package/dist/esm/client.js +31 -14
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/constants/addresses.d.ts +117 -0
- package/dist/esm/constants/addresses.d.ts.map +1 -0
- package/dist/esm/constants/addresses.js +140 -0
- package/dist/esm/constants/addresses.js.map +1 -0
- package/dist/esm/constants/index.d.ts +31 -0
- package/dist/esm/constants/index.d.ts.map +1 -0
- package/dist/esm/constants/index.js +35 -0
- package/dist/esm/constants/index.js.map +1 -0
- package/dist/esm/constants/limits.d.ts +149 -0
- package/dist/esm/constants/limits.d.ts.map +1 -0
- package/dist/esm/constants/limits.js +158 -0
- package/dist/esm/constants/limits.js.map +1 -0
- package/dist/esm/constants/network.d.ts +81 -0
- package/dist/esm/constants/network.d.ts.map +1 -0
- package/dist/esm/constants/network.js +78 -0
- package/dist/esm/constants/network.js.map +1 -0
- package/dist/esm/constants/payments.d.ts +121 -0
- package/dist/esm/constants/payments.d.ts.map +1 -0
- package/dist/esm/constants/payments.js +131 -0
- package/dist/esm/constants/payments.js.map +1 -0
- package/dist/esm/constants/programs.d.ts +69 -0
- package/dist/esm/constants/programs.d.ts.map +1 -0
- package/dist/esm/constants/programs.js +75 -0
- package/dist/esm/constants/programs.js.map +1 -0
- package/dist/esm/constants/seeds.d.ts +80 -0
- package/dist/esm/constants/seeds.d.ts.map +1 -0
- package/dist/esm/constants/seeds.js +73 -0
- package/dist/esm/constants/seeds.js.map +1 -0
- package/dist/esm/constants.d.ts +14 -27
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +16 -31
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/core/client.d.ts +452 -0
- package/dist/esm/core/client.d.ts.map +1 -0
- package/dist/esm/core/client.js +539 -0
- package/dist/esm/core/client.js.map +1 -0
- package/dist/esm/core/connection.d.ts +305 -0
- package/dist/esm/core/connection.d.ts.map +1 -0
- package/dist/esm/core/connection.js +345 -0
- package/dist/esm/core/connection.js.map +1 -0
- package/dist/esm/core/index.d.ts +20 -0
- package/dist/esm/core/index.d.ts.map +1 -0
- package/dist/esm/core/index.js +19 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/errors/index.d.ts +276 -0
- package/dist/esm/errors/index.d.ts.map +1 -0
- package/dist/esm/errors/index.js +325 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/errors.d.ts +8 -0
- package/dist/esm/errors.d.ts.map +1 -1
- package/dist/esm/errors.js +8 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/events/geyser.d.ts +150 -0
- package/dist/esm/events/geyser.d.ts.map +1 -0
- package/dist/esm/events/geyser.js +258 -0
- package/dist/esm/events/geyser.js.map +1 -0
- package/dist/esm/events/index.d.ts +11 -7
- package/dist/esm/events/index.d.ts.map +1 -1
- package/dist/esm/events/index.js +30 -26
- package/dist/esm/events/index.js.map +1 -1
- package/dist/esm/idl/index.d.ts +70 -0
- package/dist/esm/idl/index.d.ts.map +1 -0
- package/dist/esm/idl/index.js +57 -0
- package/dist/esm/idl/index.js.map +1 -0
- package/dist/esm/idl/synapse_agent_sap.json +14595 -0
- package/dist/esm/instructions/agent.js +1 -0
- package/dist/esm/instructions/agent.js.map +1 -1
- package/dist/esm/instructions/attestation.js +1 -0
- package/dist/esm/instructions/attestation.js.map +1 -1
- package/dist/esm/instructions/digest.js +1 -0
- package/dist/esm/instructions/digest.js.map +1 -1
- package/dist/esm/instructions/dispute.js +1 -0
- package/dist/esm/instructions/dispute.js.map +1 -1
- package/dist/esm/instructions/escrow.js +1 -0
- package/dist/esm/instructions/escrow.js.map +1 -1
- package/dist/esm/instructions/global.js +1 -0
- package/dist/esm/instructions/global.js.map +1 -1
- package/dist/esm/instructions/indexing.js +1 -0
- package/dist/esm/instructions/indexing.js.map +1 -1
- package/dist/esm/instructions/misc.js +1 -0
- package/dist/esm/instructions/misc.js.map +1 -1
- package/dist/esm/instructions/session.js +1 -0
- package/dist/esm/instructions/session.js.map +1 -1
- package/dist/esm/instructions/staking.js +1 -0
- package/dist/esm/instructions/staking.js.map +1 -1
- package/dist/esm/instructions/subscription.js +1 -0
- package/dist/esm/instructions/subscription.js.map +1 -1
- package/dist/esm/instructions/tools.js +1 -0
- package/dist/esm/instructions/tools.js.map +1 -1
- package/dist/esm/instructions/vault.js +1 -0
- package/dist/esm/instructions/vault.js.map +1 -1
- package/dist/esm/modules/agent.d.ts +166 -0
- package/dist/esm/modules/agent.d.ts.map +1 -0
- package/dist/esm/modules/agent.js +268 -0
- package/dist/esm/modules/agent.js.map +1 -0
- package/dist/esm/modules/attestation.d.ts +96 -0
- package/dist/esm/modules/attestation.d.ts.map +1 -0
- package/dist/esm/modules/attestation.js +143 -0
- package/dist/esm/modules/attestation.js.map +1 -0
- package/dist/esm/modules/base.d.ts +161 -0
- package/dist/esm/modules/base.d.ts.map +1 -0
- package/dist/esm/modules/base.js +185 -0
- package/dist/esm/modules/base.js.map +1 -0
- package/dist/esm/modules/escrow-v2.d.ts +169 -0
- package/dist/esm/modules/escrow-v2.d.ts.map +1 -0
- package/dist/esm/modules/escrow-v2.js +603 -0
- package/dist/esm/modules/escrow-v2.js.map +1 -0
- package/dist/esm/modules/escrow.d.ts +168 -0
- package/dist/esm/modules/escrow.d.ts.map +1 -0
- package/dist/esm/modules/escrow.js +332 -0
- package/dist/esm/modules/escrow.js.map +1 -0
- package/dist/esm/modules/feedback.d.ts +105 -0
- package/dist/esm/modules/feedback.d.ts.map +1 -0
- package/dist/esm/modules/feedback.js +162 -0
- package/dist/esm/modules/feedback.js.map +1 -0
- package/dist/esm/modules/index.d.ts +28 -0
- package/dist/esm/modules/index.d.ts.map +1 -0
- package/dist/esm/modules/index.js +27 -0
- package/dist/esm/modules/index.js.map +1 -0
- package/dist/esm/modules/indexing.d.ts +200 -0
- package/dist/esm/modules/indexing.d.ts.map +1 -0
- package/dist/esm/modules/indexing.js +371 -0
- package/dist/esm/modules/indexing.js.map +1 -0
- package/dist/esm/modules/ledger.d.ts +150 -0
- package/dist/esm/modules/ledger.d.ts.map +1 -0
- package/dist/esm/modules/ledger.js +230 -0
- package/dist/esm/modules/ledger.js.map +1 -0
- package/dist/esm/modules/receipt.d.ts +77 -0
- package/dist/esm/modules/receipt.d.ts.map +1 -0
- package/dist/esm/modules/receipt.js +144 -0
- package/dist/esm/modules/receipt.js.map +1 -0
- package/dist/esm/modules/staking.d.ts +51 -0
- package/dist/esm/modules/staking.d.ts.map +1 -0
- package/dist/esm/modules/staking.js +155 -0
- package/dist/esm/modules/staking.js.map +1 -0
- package/dist/esm/modules/subscription.d.ts +33 -0
- package/dist/esm/modules/subscription.d.ts.map +1 -0
- package/dist/esm/modules/subscription.js +92 -0
- package/dist/esm/modules/subscription.js.map +1 -0
- package/dist/esm/modules/tools.d.ts +182 -0
- package/dist/esm/modules/tools.d.ts.map +1 -0
- package/dist/esm/modules/tools.js +341 -0
- package/dist/esm/modules/tools.js.map +1 -0
- package/dist/esm/modules/vault.d.ts +240 -0
- package/dist/esm/modules/vault.d.ts.map +1 -0
- package/dist/esm/modules/vault.js +423 -0
- package/dist/esm/modules/vault.js.map +1 -0
- package/dist/esm/parser/client.d.ts +123 -0
- package/dist/esm/parser/client.d.ts.map +1 -0
- package/dist/esm/parser/client.js +142 -0
- package/dist/esm/parser/client.js.map +1 -0
- package/dist/esm/parser/complete.d.ts +90 -0
- package/dist/esm/parser/complete.d.ts.map +1 -0
- package/dist/esm/parser/complete.js +173 -0
- package/dist/esm/parser/complete.js.map +1 -0
- package/dist/esm/parser/index.d.ts +40 -0
- package/dist/esm/parser/index.d.ts.map +1 -0
- package/dist/esm/parser/index.js +43 -0
- package/dist/esm/parser/index.js.map +1 -0
- package/dist/esm/parser/inner.d.ts +114 -0
- package/dist/esm/parser/inner.d.ts.map +1 -0
- package/dist/esm/parser/inner.js +180 -0
- package/dist/esm/parser/inner.js.map +1 -0
- package/dist/esm/parser/instructions.d.ts +76 -0
- package/dist/esm/parser/instructions.d.ts.map +1 -0
- package/dist/esm/parser/instructions.js +109 -0
- package/dist/esm/parser/instructions.js.map +1 -0
- package/dist/esm/parser/transaction.d.ts +77 -0
- package/dist/esm/parser/transaction.d.ts.map +1 -0
- package/dist/esm/parser/transaction.js +149 -0
- package/dist/esm/parser/transaction.js.map +1 -0
- package/dist/esm/parser/types.d.ts +154 -0
- package/dist/esm/parser/types.d.ts.map +1 -0
- package/dist/esm/parser/types.js +13 -0
- package/dist/esm/parser/types.js.map +1 -0
- package/dist/esm/pda/index.d.ts +510 -0
- package/dist/esm/pda/index.d.ts.map +1 -0
- package/dist/esm/pda/index.js +638 -0
- package/dist/esm/pda/index.js.map +1 -0
- package/dist/esm/plugin/index.d.ts +171 -0
- package/dist/esm/plugin/index.d.ts.map +1 -0
- package/dist/esm/plugin/index.js +945 -0
- package/dist/esm/plugin/index.js.map +1 -0
- package/dist/esm/plugin/protocols.d.ts +152 -0
- package/dist/esm/plugin/protocols.d.ts.map +1 -0
- package/dist/esm/plugin/protocols.js +279 -0
- package/dist/esm/plugin/protocols.js.map +1 -0
- package/dist/esm/plugin/schemas.d.ts +829 -0
- package/dist/esm/plugin/schemas.d.ts.map +1 -0
- package/dist/esm/plugin/schemas.js +860 -0
- package/dist/esm/plugin/schemas.js.map +1 -0
- package/dist/esm/postgres/adapter.d.ts +355 -0
- package/dist/esm/postgres/adapter.d.ts.map +1 -0
- package/dist/esm/postgres/adapter.js +678 -0
- package/dist/esm/postgres/adapter.js.map +1 -0
- package/dist/esm/postgres/index.d.ts +24 -0
- package/dist/esm/postgres/index.d.ts.map +1 -0
- package/dist/esm/postgres/index.js +27 -0
- package/dist/esm/postgres/index.js.map +1 -0
- package/dist/esm/postgres/serializers.d.ts +30 -0
- package/dist/esm/postgres/serializers.d.ts.map +1 -0
- package/dist/esm/postgres/serializers.js +362 -0
- package/dist/esm/postgres/serializers.js.map +1 -0
- package/dist/esm/postgres/sync.d.ts +156 -0
- package/dist/esm/postgres/sync.d.ts.map +1 -0
- package/dist/esm/postgres/sync.js +285 -0
- package/dist/esm/postgres/sync.js.map +1 -0
- package/dist/esm/postgres/types.d.ts +167 -0
- package/dist/esm/postgres/types.d.ts.map +1 -0
- package/dist/esm/postgres/types.js +41 -0
- package/dist/esm/postgres/types.js.map +1 -0
- package/dist/esm/registries/builder.d.ts +340 -0
- package/dist/esm/registries/builder.d.ts.map +1 -0
- package/dist/esm/registries/builder.js +410 -0
- package/dist/esm/registries/builder.js.map +1 -0
- package/dist/esm/registries/discovery.d.ts +333 -0
- package/dist/esm/registries/discovery.d.ts.map +1 -0
- package/dist/esm/registries/discovery.js +358 -0
- package/dist/esm/registries/discovery.js.map +1 -0
- package/dist/esm/registries/fairscale.d.ts +680 -0
- package/dist/esm/registries/fairscale.d.ts.map +1 -0
- package/dist/esm/registries/fairscale.js +633 -0
- package/dist/esm/registries/fairscale.js.map +1 -0
- package/dist/esm/registries/index.d.ts +52 -0
- package/dist/esm/registries/index.d.ts.map +1 -0
- package/dist/esm/registries/index.js +46 -0
- package/dist/esm/registries/index.js.map +1 -0
- package/dist/esm/registries/metaplex-bridge.d.ts +489 -0
- package/dist/esm/registries/metaplex-bridge.d.ts.map +1 -0
- package/dist/esm/registries/metaplex-bridge.js +706 -0
- package/dist/esm/registries/metaplex-bridge.js.map +1 -0
- package/dist/esm/registries/session.d.ts +323 -0
- package/dist/esm/registries/session.d.ts.map +1 -0
- package/dist/esm/registries/session.js +429 -0
- package/dist/esm/registries/session.js.map +1 -0
- package/dist/esm/registries/x402.d.ts +530 -0
- package/dist/esm/registries/x402.d.ts.map +1 -0
- package/dist/esm/registries/x402.js +664 -0
- package/dist/esm/registries/x402.js.map +1 -0
- package/dist/esm/types/accounts.d.ts +765 -0
- package/dist/esm/types/accounts.d.ts.map +1 -0
- package/dist/esm/types/accounts.js +12 -0
- package/dist/esm/types/accounts.js.map +1 -0
- package/dist/esm/types/common.d.ts +166 -0
- package/dist/esm/types/common.d.ts.map +1 -0
- package/dist/esm/types/common.js +12 -0
- package/dist/esm/types/common.js.map +1 -0
- package/dist/esm/types/endpoint.d.ts +161 -0
- package/dist/esm/types/endpoint.d.ts.map +1 -0
- package/dist/esm/types/endpoint.js +14 -0
- package/dist/esm/types/endpoint.js.map +1 -0
- package/dist/esm/types/enums.d.ts +353 -0
- package/dist/esm/types/enums.d.ts.map +1 -0
- package/dist/esm/types/enums.js +266 -0
- package/dist/esm/types/enums.js.map +1 -0
- package/dist/esm/types/index.d.ts +29 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +25 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/instructions.d.ts +400 -0
- package/dist/esm/types/instructions.d.ts.map +1 -0
- package/dist/esm/types/instructions.js +89 -0
- package/dist/esm/types/instructions.js.map +1 -0
- package/dist/esm/types.d.ts +28 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/anchor-errors.d.ts +61 -0
- package/dist/esm/utils/anchor-errors.d.ts.map +1 -0
- package/dist/esm/utils/anchor-errors.js +447 -0
- package/dist/esm/utils/anchor-errors.js.map +1 -0
- package/dist/esm/utils/endpoint-validator.d.ts +110 -0
- package/dist/esm/utils/endpoint-validator.d.ts.map +1 -0
- package/dist/esm/utils/endpoint-validator.js +226 -0
- package/dist/esm/utils/endpoint-validator.js.map +1 -0
- package/dist/esm/utils/escrow-validation.d.ts +145 -0
- package/dist/esm/utils/escrow-validation.d.ts.map +1 -0
- package/dist/esm/utils/escrow-validation.js +212 -0
- package/dist/esm/utils/escrow-validation.js.map +1 -0
- package/dist/esm/utils/hash.d.ts +75 -0
- package/dist/esm/utils/hash.d.ts.map +1 -0
- package/dist/esm/utils/hash.js +103 -0
- package/dist/esm/utils/hash.js.map +1 -0
- package/dist/esm/utils/index.d.ts +3 -1
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +6 -3
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/merchant-validator.d.ts +176 -0
- package/dist/esm/utils/merchant-validator.d.ts.map +1 -0
- package/dist/esm/utils/merchant-validator.js +241 -0
- package/dist/esm/utils/merchant-validator.js.map +1 -0
- package/dist/esm/utils/network-normalizer.d.ts +120 -0
- package/dist/esm/utils/network-normalizer.d.ts.map +1 -0
- package/dist/esm/utils/network-normalizer.js +229 -0
- package/dist/esm/utils/network-normalizer.js.map +1 -0
- package/dist/esm/utils/priority-fee.d.ts +205 -0
- package/dist/esm/utils/priority-fee.d.ts.map +1 -0
- package/dist/esm/utils/priority-fee.js +209 -0
- package/dist/esm/utils/priority-fee.js.map +1 -0
- package/dist/esm/utils/rpc-strategy.d.ts +172 -0
- package/dist/esm/utils/rpc-strategy.d.ts.map +1 -0
- package/dist/esm/utils/rpc-strategy.js +231 -0
- package/dist/esm/utils/rpc-strategy.js.map +1 -0
- package/dist/esm/utils/schemas.d.ts +351 -0
- package/dist/esm/utils/schemas.d.ts.map +1 -0
- package/dist/esm/utils/schemas.js +320 -0
- package/dist/esm/utils/schemas.js.map +1 -0
- package/dist/esm/utils/serialization.d.ts +69 -0
- package/dist/esm/utils/serialization.d.ts.map +1 -0
- package/dist/esm/utils/serialization.js +98 -0
- package/dist/esm/utils/serialization.js.map +1 -0
- package/dist/esm/utils/validate.js +1 -1
- package/dist/esm/utils/validate.js.map +1 -1
- package/dist/esm/utils/validation.d.ts +29 -0
- package/dist/esm/utils/validation.d.ts.map +1 -0
- package/dist/esm/utils/validation.js +33 -0
- package/dist/esm/utils/validation.js.map +1 -0
- package/dist/esm/utils/volume-curve.d.ts +60 -0
- package/dist/esm/utils/volume-curve.d.ts.map +1 -0
- package/dist/esm/utils/volume-curve.js +114 -0
- package/dist/esm/utils/volume-curve.js.map +1 -0
- package/dist/esm/utils/x402-direct.d.ts +114 -0
- package/dist/esm/utils/x402-direct.d.ts.map +1 -0
- package/dist/esm/utils/x402-direct.js +228 -0
- package/dist/esm/utils/x402-direct.js.map +1 -0
- package/package.json +2 -2
- package/dist/esm/instructions/memory.d.ts +0 -8
- package/dist/esm/instructions/memory.d.ts.map +0 -1
- package/dist/esm/instructions/memory.js +0 -234
- package/dist/esm/instructions/memory.js.map +0 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module utils/merchant-validator
|
|
4
|
+
* @description Standard Synapse merchant middleware for x402 settlement.
|
|
5
|
+
*
|
|
6
|
+
* Reads `X-Payment-*` headers from incoming HTTP requests, validates
|
|
7
|
+
* the escrow on-chain, auto-generates the correct `AccountMeta[]`,
|
|
8
|
+
* and throws explicit errors (e.g. {@link MissingEscrowAtaError})
|
|
9
|
+
* instead of letting the program return a generic crash.
|
|
10
|
+
*
|
|
11
|
+
* Designed for agents like Syra/Invoica that receive x402 payments.
|
|
12
|
+
*
|
|
13
|
+
* @category Utils
|
|
14
|
+
* @since v0.6.4
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.SapMerchantValidator = void 0;
|
|
18
|
+
exports.parseX402Headers = parseX402Headers;
|
|
19
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
20
|
+
const anchor_1 = require("@coral-xyz/anchor");
|
|
21
|
+
const escrow_validation_1 = require("./escrow-validation");
|
|
22
|
+
const index_1 = require("../errors/index");
|
|
23
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
24
|
+
// Header parsing
|
|
25
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
26
|
+
/** Required x402 headers. */
|
|
27
|
+
const REQUIRED_HEADERS = [
|
|
28
|
+
"X-Payment-Protocol",
|
|
29
|
+
"X-Payment-Escrow",
|
|
30
|
+
"X-Payment-Agent",
|
|
31
|
+
"X-Payment-Depositor",
|
|
32
|
+
"X-Payment-MaxCalls",
|
|
33
|
+
"X-Payment-PricePerCall",
|
|
34
|
+
"X-Payment-Program",
|
|
35
|
+
"X-Payment-Network",
|
|
36
|
+
];
|
|
37
|
+
/**
|
|
38
|
+
* @name parseX402Headers
|
|
39
|
+
* @description Parse and validate x402 headers from an HTTP request.
|
|
40
|
+
*
|
|
41
|
+
* @param headers - HTTP headers object (case-insensitive key lookup).
|
|
42
|
+
* @returns Parsed x402 headers.
|
|
43
|
+
* @throws {SapValidationError} If required headers are missing or malformed.
|
|
44
|
+
*
|
|
45
|
+
* @category Utils
|
|
46
|
+
* @since v0.6.4
|
|
47
|
+
*/
|
|
48
|
+
function parseX402Headers(headers) {
|
|
49
|
+
// Normalize to case-insensitive
|
|
50
|
+
const normalized = new Map();
|
|
51
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
52
|
+
const val = Array.isArray(value) ? value[0] : value;
|
|
53
|
+
if (val !== undefined) {
|
|
54
|
+
normalized.set(key.toLowerCase(), val);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Validate required headers present
|
|
58
|
+
const missing = [];
|
|
59
|
+
for (const h of REQUIRED_HEADERS) {
|
|
60
|
+
if (!normalized.has(h.toLowerCase())) {
|
|
61
|
+
missing.push(h);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (missing.length > 0) {
|
|
65
|
+
throw new index_1.SapValidationError(`Missing required x402 headers: ${missing.join(", ")}`, "x402-headers");
|
|
66
|
+
}
|
|
67
|
+
const get = (key) => normalized.get(key.toLowerCase());
|
|
68
|
+
// Validate protocol
|
|
69
|
+
const protocol = get("X-Payment-Protocol");
|
|
70
|
+
if (protocol !== "SAP-x402") {
|
|
71
|
+
throw new index_1.SapValidationError(`Invalid X-Payment-Protocol: "${protocol}" (expected "SAP-x402")`, "X-Payment-Protocol");
|
|
72
|
+
}
|
|
73
|
+
// Parse PublicKeys
|
|
74
|
+
let escrowPda;
|
|
75
|
+
let agentPda;
|
|
76
|
+
let depositorWallet;
|
|
77
|
+
let programId;
|
|
78
|
+
try {
|
|
79
|
+
escrowPda = new web3_js_1.PublicKey(get("X-Payment-Escrow"));
|
|
80
|
+
agentPda = new web3_js_1.PublicKey(get("X-Payment-Agent"));
|
|
81
|
+
depositorWallet = new web3_js_1.PublicKey(get("X-Payment-Depositor"));
|
|
82
|
+
programId = new web3_js_1.PublicKey(get("X-Payment-Program"));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
throw new index_1.SapValidationError("Malformed public key in x402 headers", "x402-headers");
|
|
86
|
+
}
|
|
87
|
+
// Parse numeric values
|
|
88
|
+
const maxCallsStr = get("X-Payment-MaxCalls");
|
|
89
|
+
const pricePerCallStr = get("X-Payment-PricePerCall");
|
|
90
|
+
let maxCalls;
|
|
91
|
+
let pricePerCall;
|
|
92
|
+
try {
|
|
93
|
+
maxCalls = new anchor_1.BN(maxCallsStr);
|
|
94
|
+
pricePerCall = new anchor_1.BN(pricePerCallStr);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
throw new index_1.SapValidationError("Invalid numeric value in X-Payment-MaxCalls or X-Payment-PricePerCall", "x402-headers");
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
protocol,
|
|
101
|
+
escrowPda,
|
|
102
|
+
agentPda,
|
|
103
|
+
depositorWallet,
|
|
104
|
+
maxCalls,
|
|
105
|
+
pricePerCall,
|
|
106
|
+
programId,
|
|
107
|
+
network: get("X-Payment-Network"),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
111
|
+
// Merchant Validator
|
|
112
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
113
|
+
/**
|
|
114
|
+
* @name SapMerchantValidator
|
|
115
|
+
* @description Standard Synapse merchant middleware for x402 payment validation.
|
|
116
|
+
*
|
|
117
|
+
* Reads `X-Payment-*` headers, validates escrow state on-chain, generates
|
|
118
|
+
* correct `AccountMeta[]` for SPL token escrows, and throws explicit errors
|
|
119
|
+
* (e.g. {@link MissingEscrowAtaError}) when ATA accounts are missing.
|
|
120
|
+
*
|
|
121
|
+
* @category Utils
|
|
122
|
+
* @since v0.6.4
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* const validator = new SapMerchantValidator(connection, fetchEscrow);
|
|
127
|
+
*
|
|
128
|
+
* // Express.js integration
|
|
129
|
+
* app.post("/api/v1/chat", async (req, res) => {
|
|
130
|
+
* try {
|
|
131
|
+
* const validation = await validator.validateRequest(req.headers, {
|
|
132
|
+
* callsToSettle: 1,
|
|
133
|
+
* });
|
|
134
|
+
*
|
|
135
|
+
* if (!validation.valid) {
|
|
136
|
+
* return res.status(402).json({ errors: validation.errors });
|
|
137
|
+
* }
|
|
138
|
+
*
|
|
139
|
+
* // Process request...
|
|
140
|
+
*
|
|
141
|
+
* // Settle payment using pre-built account metas
|
|
142
|
+
* await client.escrow.settle(
|
|
143
|
+
* validation.headers.depositorWallet,
|
|
144
|
+
* 1,
|
|
145
|
+
* serviceHash,
|
|
146
|
+
* validation.accountMetas,
|
|
147
|
+
* );
|
|
148
|
+
*
|
|
149
|
+
* res.json({ result: "..." });
|
|
150
|
+
* } catch (err) {
|
|
151
|
+
* if (err instanceof MissingEscrowAtaError) {
|
|
152
|
+
* return res.status(402).json({
|
|
153
|
+
* error: err.message,
|
|
154
|
+
* side: err.side,
|
|
155
|
+
* ata: err.ataAddress,
|
|
156
|
+
* });
|
|
157
|
+
* }
|
|
158
|
+
* throw err;
|
|
159
|
+
* }
|
|
160
|
+
* });
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
class SapMerchantValidator {
|
|
164
|
+
connection;
|
|
165
|
+
fetchEscrow;
|
|
166
|
+
/**
|
|
167
|
+
* @param connection - Solana RPC connection.
|
|
168
|
+
* @param fetchEscrow - Callback to fetch escrow account data by PDA.
|
|
169
|
+
* Typically `(pda) => client.escrow.fetchByPda(pda).catch(() => null)`.
|
|
170
|
+
*/
|
|
171
|
+
constructor(connection, fetchEscrow) {
|
|
172
|
+
this.connection = connection;
|
|
173
|
+
this.fetchEscrow = fetchEscrow;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* @name validateRequest
|
|
177
|
+
* @description Full validation pipeline for an incoming x402 request.
|
|
178
|
+
*
|
|
179
|
+
* Steps:
|
|
180
|
+
* 1. Parse `X-Payment-*` headers
|
|
181
|
+
* 2. Fetch escrow on-chain
|
|
182
|
+
* 3. Validate escrow state (balance, expiry, max calls)
|
|
183
|
+
* 4. If SPL escrow: validate ATAs exist and mint matches
|
|
184
|
+
* 5. Build `AccountMeta[]` for settlement TX
|
|
185
|
+
*
|
|
186
|
+
* @param headers - HTTP headers from the incoming request.
|
|
187
|
+
* @param opts
|
|
188
|
+
* @param opts.callsToSettle - Number of calls to validate affordability for (default: 1).
|
|
189
|
+
* @param opts.throwOnMissingAta - Throw {@link MissingEscrowAtaError} instead of returning errors (default: true).
|
|
190
|
+
*
|
|
191
|
+
* @returns A complete {@link MerchantValidationResult}.
|
|
192
|
+
*
|
|
193
|
+
* @throws {SapValidationError} If headers are missing or malformed.
|
|
194
|
+
* @throws {MissingEscrowAtaError} If SPL ATAs are missing and `throwOnMissingAta` is true.
|
|
195
|
+
*
|
|
196
|
+
* @category Utils
|
|
197
|
+
* @since v0.6.4
|
|
198
|
+
*/
|
|
199
|
+
async validateRequest(headers, opts) {
|
|
200
|
+
// 1. Parse headers
|
|
201
|
+
const parsed = parseX402Headers(headers);
|
|
202
|
+
// 2. Validate escrow state
|
|
203
|
+
const escrowValidation = await (0, escrow_validation_1.validateEscrowState)(this.connection, parsed.agentPda, // agentWallet derived inside validate
|
|
204
|
+
parsed.depositorWallet, this.fetchEscrow, { callsToSettle: opts?.callsToSettle ?? 1 });
|
|
205
|
+
// 3. Check for ATA errors and optionally throw
|
|
206
|
+
const throwOnMissingAta = opts?.throwOnMissingAta !== false;
|
|
207
|
+
if (throwOnMissingAta && escrowValidation.isSplEscrow) {
|
|
208
|
+
for (const error of escrowValidation.errors) {
|
|
209
|
+
if (error.includes("Depositor ATA does not exist")) {
|
|
210
|
+
const ataAddr = error.split(": ")[1] ?? "unknown";
|
|
211
|
+
throw new escrow_validation_1.MissingEscrowAtaError(ataAddr, "depositor");
|
|
212
|
+
}
|
|
213
|
+
if (error.includes("Escrow ATA does not exist")) {
|
|
214
|
+
const ataAddr = error.split(": ")[1] ?? "unknown";
|
|
215
|
+
throw new escrow_validation_1.MissingEscrowAtaError(ataAddr, "escrow");
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// 4. Build account metas
|
|
220
|
+
const accountMetas = (0, escrow_validation_1.toAccountMetas)(escrowValidation.splAccounts);
|
|
221
|
+
return {
|
|
222
|
+
valid: escrowValidation.valid,
|
|
223
|
+
headers: parsed,
|
|
224
|
+
escrowValidation,
|
|
225
|
+
accountMetas,
|
|
226
|
+
errors: escrowValidation.errors,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* @name validateEscrow
|
|
231
|
+
* @description Validate escrow from pre-parsed headers (convenience method).
|
|
232
|
+
* Call this when you've already parsed the headers yourself.
|
|
233
|
+
*
|
|
234
|
+
* @param headers - Pre-parsed x402 headers.
|
|
235
|
+
* @param opts
|
|
236
|
+
* @returns The escrow validation result with pre-built account metas.
|
|
237
|
+
*
|
|
238
|
+
* @category Utils
|
|
239
|
+
* @since v0.6.4
|
|
240
|
+
*/
|
|
241
|
+
async validateEscrow(headers, opts) {
|
|
242
|
+
return (0, escrow_validation_1.validateEscrowState)(this.connection, headers.agentPda, headers.depositorWallet, this.fetchEscrow, opts);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
exports.SapMerchantValidator = SapMerchantValidator;
|
|
246
|
+
//# sourceMappingURL=merchant-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merchant-validator.js","sourceRoot":"","sources":["../../../src/utils/merchant-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module utils/network-normalizer
|
|
4
|
+
* @description Network identifier normalization for x402 payment headers.
|
|
5
|
+
*
|
|
6
|
+
* Solves the canonical-string mismatch between SAP clients and servers:
|
|
7
|
+
* some providers accept `solana:mainnet-beta` while others require
|
|
8
|
+
* the genesis-hash form `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`.
|
|
9
|
+
*
|
|
10
|
+
* This module provides a single source of truth for normalizing
|
|
11
|
+
* network identifiers so that both clients and agents canonicalize
|
|
12
|
+
* before comparing. Catches the Kamiyo "sap network mismatch" error
|
|
13
|
+
* at the SDK level.
|
|
14
|
+
*
|
|
15
|
+
* @category Utils
|
|
16
|
+
* @since v0.6.0
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.normalizeNetworkId = normalizeNetworkId;
|
|
20
|
+
exports.isNetworkEquivalent = isNetworkEquivalent;
|
|
21
|
+
exports.getNetworkGenesisHash = getNetworkGenesisHash;
|
|
22
|
+
exports.getNetworkClusterName = getNetworkClusterName;
|
|
23
|
+
exports.isKnownNetwork = isKnownNetwork;
|
|
24
|
+
const network_1 = require("../constants/network");
|
|
25
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
26
|
+
// Canonical Mapping
|
|
27
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
28
|
+
/**
|
|
29
|
+
* Bidirectional alias map: for every known network string, stores the
|
|
30
|
+
* canonical SapNetworkId it resolves to, plus all known aliases.
|
|
31
|
+
*/
|
|
32
|
+
const NETWORK_ALIASES = new Map([
|
|
33
|
+
// ── Mainnet ───────────────────────────────
|
|
34
|
+
// Canonical: genesis-hash form
|
|
35
|
+
["solana:mainnet-beta", network_1.SapNetwork.SOLANA_MAINNET],
|
|
36
|
+
["solana:mainnet", network_1.SapNetwork.SOLANA_MAINNET],
|
|
37
|
+
["mainnet-beta", network_1.SapNetwork.SOLANA_MAINNET],
|
|
38
|
+
["mainnet", network_1.SapNetwork.SOLANA_MAINNET],
|
|
39
|
+
["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", network_1.SapNetwork.SOLANA_MAINNET_GENESIS],
|
|
40
|
+
["5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", network_1.SapNetwork.SOLANA_MAINNET_GENESIS],
|
|
41
|
+
// ── Devnet ────────────────────────────────
|
|
42
|
+
["solana:devnet", network_1.SapNetwork.SOLANA_DEVNET_NAMED],
|
|
43
|
+
["devnet", network_1.SapNetwork.SOLANA_DEVNET_NAMED],
|
|
44
|
+
["solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", network_1.SapNetwork.SOLANA_DEVNET],
|
|
45
|
+
["EtWTRABZaYq6iMfeYKouRu166VU2xqa1", network_1.SapNetwork.SOLANA_DEVNET],
|
|
46
|
+
]);
|
|
47
|
+
/**
|
|
48
|
+
* Mainnet equivalence set: all strings that refer to Solana mainnet-beta,
|
|
49
|
+
* regardless of format.
|
|
50
|
+
*/
|
|
51
|
+
const MAINNET_EQUIVALENTS = new Set([
|
|
52
|
+
network_1.SapNetwork.SOLANA_MAINNET,
|
|
53
|
+
network_1.SapNetwork.SOLANA_MAINNET_GENESIS,
|
|
54
|
+
"solana:mainnet",
|
|
55
|
+
"mainnet-beta",
|
|
56
|
+
"mainnet",
|
|
57
|
+
"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
|
|
58
|
+
]);
|
|
59
|
+
/**
|
|
60
|
+
* Devnet equivalence set.
|
|
61
|
+
*/
|
|
62
|
+
const DEVNET_EQUIVALENTS = new Set([
|
|
63
|
+
network_1.SapNetwork.SOLANA_DEVNET,
|
|
64
|
+
network_1.SapNetwork.SOLANA_DEVNET_NAMED,
|
|
65
|
+
"devnet",
|
|
66
|
+
"EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
|
|
67
|
+
]);
|
|
68
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
69
|
+
// Public API
|
|
70
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
71
|
+
/**
|
|
72
|
+
* @name normalizeNetworkId
|
|
73
|
+
* @description Normalize a raw network identifier string to its canonical
|
|
74
|
+
* {@link SapNetworkId} form.
|
|
75
|
+
*
|
|
76
|
+
* Handles:
|
|
77
|
+
* - Case-insensitive matching
|
|
78
|
+
* - Stripping whitespace
|
|
79
|
+
* - Resolving genesis-hash vs. cluster-name aliases
|
|
80
|
+
* - Unknown strings are returned as-is (passthrough)
|
|
81
|
+
*
|
|
82
|
+
* @param raw - Raw network identifier string from headers, env vars, or config.
|
|
83
|
+
* @returns The canonical {@link SapNetworkId}, or the trimmed input if unknown.
|
|
84
|
+
*
|
|
85
|
+
* @category Utils
|
|
86
|
+
* @since v0.6.0
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```ts
|
|
90
|
+
* import { normalizeNetworkId } from "@synapse-sap/sdk";
|
|
91
|
+
*
|
|
92
|
+
* normalizeNetworkId("solana:mainnet-beta");
|
|
93
|
+
* // → "solana:mainnet-beta"
|
|
94
|
+
*
|
|
95
|
+
* normalizeNetworkId("5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp");
|
|
96
|
+
* // → "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"
|
|
97
|
+
*
|
|
98
|
+
* normalizeNetworkId(" MAINNET ");
|
|
99
|
+
* // → "solana:mainnet-beta"
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
function normalizeNetworkId(raw) {
|
|
103
|
+
const trimmed = raw.trim();
|
|
104
|
+
// Exact match first
|
|
105
|
+
const exact = NETWORK_ALIASES.get(trimmed);
|
|
106
|
+
if (exact)
|
|
107
|
+
return exact;
|
|
108
|
+
// Case-insensitive lookup
|
|
109
|
+
const lower = trimmed.toLowerCase();
|
|
110
|
+
for (const [alias, canonical] of NETWORK_ALIASES) {
|
|
111
|
+
if (alias.toLowerCase() === lower)
|
|
112
|
+
return canonical;
|
|
113
|
+
}
|
|
114
|
+
// Passthrough for unknown networks (custom chains, etc.)
|
|
115
|
+
return trimmed;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @name isNetworkEquivalent
|
|
119
|
+
* @description Check if two network identifier strings refer to the same network,
|
|
120
|
+
* even if they use different formats (cluster-name vs. genesis-hash).
|
|
121
|
+
*
|
|
122
|
+
* This is the key function that prevents the Kamiyo "sap network mismatch"
|
|
123
|
+
* error — instead of comparing strings literally, we compare their
|
|
124
|
+
* canonical equivalence class.
|
|
125
|
+
*
|
|
126
|
+
* @param a - First network identifier.
|
|
127
|
+
* @param b - Second network identifier.
|
|
128
|
+
* @returns `true` if both identifiers refer to the same Solana network.
|
|
129
|
+
*
|
|
130
|
+
* @category Utils
|
|
131
|
+
* @since v0.6.0
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```ts
|
|
135
|
+
* import { isNetworkEquivalent } from "@synapse-sap/sdk";
|
|
136
|
+
*
|
|
137
|
+
* isNetworkEquivalent("solana:mainnet-beta", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp");
|
|
138
|
+
* // → true
|
|
139
|
+
*
|
|
140
|
+
* isNetworkEquivalent("solana:devnet", "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1");
|
|
141
|
+
* // → true
|
|
142
|
+
*
|
|
143
|
+
* isNetworkEquivalent("solana:mainnet-beta", "solana:devnet");
|
|
144
|
+
* // → false
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
function isNetworkEquivalent(a, b) {
|
|
148
|
+
const normA = a.trim();
|
|
149
|
+
const normB = b.trim();
|
|
150
|
+
// Fast path: identical strings
|
|
151
|
+
if (normA === normB)
|
|
152
|
+
return true;
|
|
153
|
+
// Check if both are in the same equivalence set
|
|
154
|
+
if (MAINNET_EQUIVALENTS.has(normA) && MAINNET_EQUIVALENTS.has(normB))
|
|
155
|
+
return true;
|
|
156
|
+
if (DEVNET_EQUIVALENTS.has(normA) && DEVNET_EQUIVALENTS.has(normB))
|
|
157
|
+
return true;
|
|
158
|
+
// Case-insensitive match
|
|
159
|
+
const lowerA = normA.toLowerCase();
|
|
160
|
+
const lowerB = normB.toLowerCase();
|
|
161
|
+
if (lowerA === lowerB)
|
|
162
|
+
return true;
|
|
163
|
+
// Resolve both to canonical and compare
|
|
164
|
+
const canonA = normalizeNetworkId(normA);
|
|
165
|
+
const canonB = normalizeNetworkId(normB);
|
|
166
|
+
if (canonA === canonB)
|
|
167
|
+
return true;
|
|
168
|
+
// Final check: both resolve to the same equivalence set
|
|
169
|
+
if (MAINNET_EQUIVALENTS.has(canonA) && MAINNET_EQUIVALENTS.has(canonB))
|
|
170
|
+
return true;
|
|
171
|
+
if (DEVNET_EQUIVALENTS.has(canonA) && DEVNET_EQUIVALENTS.has(canonB))
|
|
172
|
+
return true;
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* @name getNetworkGenesisHash
|
|
177
|
+
* @description Get the genesis-hash form of a network identifier.
|
|
178
|
+
* Returns the genesis-hash variant for known networks, or the input as-is.
|
|
179
|
+
*
|
|
180
|
+
* Useful for agents that require the genesis-hash form (Kamiyo, Helius x402).
|
|
181
|
+
*
|
|
182
|
+
* @param networkId - Any network identifier.
|
|
183
|
+
* @returns The genesis-hash form, or the input if unknown.
|
|
184
|
+
*
|
|
185
|
+
* @category Utils
|
|
186
|
+
* @since v0.6.0
|
|
187
|
+
*/
|
|
188
|
+
function getNetworkGenesisHash(networkId) {
|
|
189
|
+
const norm = normalizeNetworkId(networkId);
|
|
190
|
+
if (MAINNET_EQUIVALENTS.has(networkId) || MAINNET_EQUIVALENTS.has(norm)) {
|
|
191
|
+
return network_1.SapNetwork.SOLANA_MAINNET_GENESIS;
|
|
192
|
+
}
|
|
193
|
+
if (DEVNET_EQUIVALENTS.has(networkId) || DEVNET_EQUIVALENTS.has(norm)) {
|
|
194
|
+
return network_1.SapNetwork.SOLANA_DEVNET;
|
|
195
|
+
}
|
|
196
|
+
return norm;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* @name getNetworkClusterName
|
|
200
|
+
* @description Get the cluster-name form of a network identifier.
|
|
201
|
+
* Returns the human-readable cluster name for known networks.
|
|
202
|
+
*
|
|
203
|
+
* Useful for providers that accept cluster names (Coinbase, Phantom).
|
|
204
|
+
*
|
|
205
|
+
* @param networkId - Any network identifier.
|
|
206
|
+
* @returns The cluster-name form, or the input if unknown.
|
|
207
|
+
*
|
|
208
|
+
* @category Utils
|
|
209
|
+
* @since v0.6.0
|
|
210
|
+
*/
|
|
211
|
+
function getNetworkClusterName(networkId) {
|
|
212
|
+
const norm = normalizeNetworkId(networkId);
|
|
213
|
+
if (MAINNET_EQUIVALENTS.has(networkId) || MAINNET_EQUIVALENTS.has(norm)) {
|
|
214
|
+
return network_1.SapNetwork.SOLANA_MAINNET;
|
|
215
|
+
}
|
|
216
|
+
if (DEVNET_EQUIVALENTS.has(networkId) || DEVNET_EQUIVALENTS.has(norm)) {
|
|
217
|
+
return network_1.SapNetwork.SOLANA_DEVNET_NAMED;
|
|
218
|
+
}
|
|
219
|
+
return norm;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* @name isKnownNetwork
|
|
223
|
+
* @description Check if a network identifier is recognized by the SDK.
|
|
224
|
+
*
|
|
225
|
+
* @param networkId - The network identifier to check.
|
|
226
|
+
* @returns `true` if the identifier maps to a known Solana network.
|
|
227
|
+
*
|
|
228
|
+
* @category Utils
|
|
229
|
+
* @since v0.6.0
|
|
230
|
+
*/
|
|
231
|
+
function isKnownNetwork(networkId) {
|
|
232
|
+
const trimmed = networkId.trim();
|
|
233
|
+
return MAINNET_EQUIVALENTS.has(trimmed) || DEVNET_EQUIVALENTS.has(trimmed) ||
|
|
234
|
+
NETWORK_ALIASES.has(trimmed);
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=network-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-normalizer.js","sourceRoot":"","sources":["../../../src/utils/network-normalizer.ts"],"names":[],"mappings":"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"}
|