@ledgerhq/device-signer-kit-solana 1.12.0 → 1.13.0
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/lib/cjs/api/app-binder/ProvisionGenericClearSignDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/ProvisionGenericClearSignDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
- package/lib/cjs/internal/app-binder/SolanaApplicationResolver.js +1 -1
- package/lib/cjs/internal/app-binder/SolanaApplicationResolver.js.map +3 -3
- package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementAccumulator.js +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementAccumulator.js.map +3 -3
- package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.js +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/clear-sign/requirements/buildRequirements.test.js +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/buildRequirements.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/clear-sign/requirements/model.js +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/model.js.map +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.js +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.js.map +3 -3
- package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.js +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/tokenRule.test.js +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/tokenRule.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.test.js +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/clear-sign/requirements/valueResolution.test.js +1 -1
- package/lib/cjs/internal/app-binder/clear-sign/requirements/valueResolution.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/constants.js +1 -1
- package/lib/cjs/internal/app-binder/constants.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/SignBasicClearSignDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignBasicClearSignDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/SignGenericClearSignDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignGenericClearSignDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildBasicClearSignContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildBasicClearSignContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildBasicClearSignContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildBasicClearSignContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideBasicClearSignContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideBasicClearSignContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideBasicClearSignContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideBasicClearSignContextTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionCheckTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionCheckTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionCheckTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionCheckTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/RefreshBlockhashTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/RefreshBlockhashTask.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/context-providers/loadCertificate.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/loadCertificate.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/loadCertificate.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/context-providers/loadCertificate.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/context-providers/provideAltResolutionContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideAltResolutionContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideAltResolutionContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideAltResolutionContext.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideBasicTrustedNameContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideBasicTrustedNameContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideBasicTrustedNameContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideBasicTrustedNameContext.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideContextRegistry.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideContextRegistry.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/context-providers/provideContextRegistry.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideContextRegistry.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideContextTypes.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideContextTypes.js.map +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideEnumVariantContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideEnumVariantContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideEnumVariantContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideEnumVariantContext.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideInstructionInfoContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideInstructionInfoContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideInstructionInfoContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideInstructionInfoContext.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideLifiContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideLifiContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideLifiContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideLifiContext.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenAccountStateContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenAccountStateContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenAccountStateContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenAccountStateContext.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenContext.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenInfoContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenInfoContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenInfoContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTokenInfoContext.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTransactionCheckContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTransactionCheckContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTransactionCheckContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTransactionCheckContext.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTrustedNameContext.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTrustedNameContext.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/context-providers/provideTrustedNameContext.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/context-providers/provideTrustedNameContext.test.js.map +3 -3
- package/lib/cjs/package.json +3 -3
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
- package/lib/esm/internal/app-binder/SolanaApplicationResolver.js +1 -1
- package/lib/esm/internal/app-binder/SolanaApplicationResolver.js.map +3 -3
- package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementAccumulator.js +1 -1
- package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementAccumulator.js.map +3 -3
- package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.js +1 -1
- package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.js.map +2 -2
- package/lib/esm/internal/app-binder/clear-sign/requirements/buildRequirements.test.js +1 -1
- package/lib/esm/internal/app-binder/clear-sign/requirements/buildRequirements.test.js.map +3 -3
- package/lib/esm/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.js +1 -1
- package/lib/esm/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.js.map +3 -3
- package/lib/esm/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.js +1 -1
- package/lib/esm/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.js.map +3 -3
- package/lib/esm/internal/app-binder/clear-sign/requirements/rules/tokenRule.test.js +1 -1
- package/lib/esm/internal/app-binder/clear-sign/requirements/rules/tokenRule.test.js.map +2 -2
- package/lib/esm/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.test.js +1 -1
- package/lib/esm/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.test.js.map +2 -2
- package/lib/esm/internal/app-binder/clear-sign/requirements/valueResolution.test.js +1 -1
- package/lib/esm/internal/app-binder/clear-sign/requirements/valueResolution.test.js.map +2 -2
- package/lib/esm/internal/app-binder/constants.js +1 -1
- package/lib/esm/internal/app-binder/constants.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.test.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/SignBasicClearSignDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignBasicClearSignDeviceAction.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/SignGenericClearSignDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignGenericClearSignDeviceAction.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildBasicClearSignContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildBasicClearSignContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildBasicClearSignContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildBasicClearSignContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideBasicClearSignContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideBasicClearSignContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideBasicClearSignContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideBasicClearSignContextTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionCheckTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionCheckTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionCheckTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionCheckTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/RefreshBlockhashTask.js +1 -1
- package/lib/esm/internal/app-binder/task/RefreshBlockhashTask.js.map +2 -2
- package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.js +2 -0
- package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/context-providers/loadCertificate.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/loadCertificate.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/loadCertificate.test.js +2 -0
- package/lib/esm/internal/app-binder/task/context-providers/loadCertificate.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/context-providers/provideAltResolutionContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideAltResolutionContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideAltResolutionContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideAltResolutionContext.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideBasicTrustedNameContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideBasicTrustedNameContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideBasicTrustedNameContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideBasicTrustedNameContext.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideContextRegistry.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideContextRegistry.js.map +2 -2
- package/lib/esm/internal/app-binder/task/context-providers/provideContextRegistry.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideContextRegistry.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideEnumVariantContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideEnumVariantContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideEnumVariantContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideEnumVariantContext.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideInstructionInfoContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideInstructionInfoContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideInstructionInfoContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideInstructionInfoContext.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideLifiContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideLifiContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideLifiContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideLifiContext.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenAccountStateContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenAccountStateContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenAccountStateContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenAccountStateContext.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenContext.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenInfoContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenInfoContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenInfoContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTokenInfoContext.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTransactionCheckContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTransactionCheckContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTransactionCheckContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTransactionCheckContext.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTrustedNameContext.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTrustedNameContext.js.map +3 -3
- package/lib/esm/internal/app-binder/task/context-providers/provideTrustedNameContext.test.js +1 -1
- package/lib/esm/internal/app-binder/task/context-providers/provideTrustedNameContext.test.js.map +3 -3
- package/lib/esm/package.json +3 -3
- package/lib/types/api/app-binder/ProvisionGenericClearSignDeviceActionTypes.d.ts +6 -2
- package/lib/types/api/app-binder/ProvisionGenericClearSignDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +1 -0
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/internal/app-binder/SolanaApplicationResolver.d.ts +2 -2
- package/lib/types/internal/app-binder/SolanaApplicationResolver.d.ts.map +1 -1
- package/lib/types/internal/app-binder/clear-sign/requirements/RequirementAccumulator.d.ts.map +1 -1
- package/lib/types/internal/app-binder/clear-sign/requirements/model.d.ts +6 -0
- package/lib/types/internal/app-binder/clear-sign/requirements/model.d.ts.map +1 -1
- package/lib/types/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.d.ts +25 -12
- package/lib/types/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.d.ts.map +1 -1
- package/lib/types/internal/app-binder/constants.d.ts +2 -0
- package/lib/types/internal/app-binder/constants.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.d.ts +2 -2
- package/lib/types/internal/app-binder/device-action/ProvisionBasicClearSignDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.d.ts +2 -1
- package/lib/types/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +4 -0
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildBasicClearSignContextTask.d.ts +2 -2
- package/lib/types/internal/app-binder/task/BuildBasicClearSignContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildGenericClearSignContextTask.d.ts +3 -7
- package/lib/types/internal/app-binder/task/BuildGenericClearSignContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideBasicClearSignContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideGenericClearSignContextTask.d.ts +14 -5
- package/lib/types/internal/app-binder/task/ProvideGenericClearSignContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionCheckTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SolanaSigningReportTask.d.ts +21 -0
- package/lib/types/internal/app-binder/task/SolanaSigningReportTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SolanaSigningReportTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/SolanaSigningReportTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/context-providers/loadCertificate.d.ts +8 -2
- package/lib/types/internal/app-binder/task/context-providers/loadCertificate.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/loadCertificate.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/context-providers/loadCertificate.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/context-providers/provideAltResolutionContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideBasicTrustedNameContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideContextRegistry.d.ts +3 -2
- package/lib/types/internal/app-binder/task/context-providers/provideContextRegistry.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideContextTypes.d.ts +4 -2
- package/lib/types/internal/app-binder/task/context-providers/provideContextTypes.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideEnumVariantContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideInstructionInfoContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideLifiContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideTokenAccountStateContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideTokenContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideTokenInfoContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideTransactionCheckContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/context-providers/provideTrustedNameContext.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var t=Object.defineProperty;var
|
|
1
|
+
"use strict";var t=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var p=(r,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of l(e))!d.call(r,n)&&n!==i&&t(r,n,{get:()=>e[n],enumerable:!(o=a(e,n))||o.enumerable});return r};var g=r=>p(t({},"__esModule",{value:!0}),r);var u={};module.exports=g(u);
|
|
2
2
|
//# sourceMappingURL=ProvisionGenericClearSignDeviceActionTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/ProvisionGenericClearSignDeviceActionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ClearSignContext,\n type ContextModule,\n} from \"@ledgerhq/context-module\";\n\nimport {\n type ClearSignMode,\n type SignTransactionDAError,\n type SignTransactionDASimpleIntermediateValue,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type ChallengeBoundRequirements } from \"@internal/app-binder/task/BuildGenericClearSignContextTask\";\n\n/**\n * Outcome of the generic clear-sign preparation. This machine streams the\n * descriptors and validates the session but performs no UI and does not sign \u2014\n * the prompt and terminal sign are run by\n * `SignGenericClearSignDeviceAction`.\n * - `\"prepared\"` \u2014 `BuildContext` + `ProvideContext` + `Finalize` succeeded; the\n * session is ready for the prompt + terminal sign.\n * - `\"degraded\"` \u2014 no instruction recognised or a best-effort step (build /\n * provide / finalize) failed; the caller should fall back to the legacy path.\n *\n * Every step is best-effort, so this machine never surfaces a user cancel (the\n * first user interaction lives downstream in the prompt).\n */\nexport type ProvisionGenericClearSignDAOutput = \"prepared\" | \"degraded\";\n\nexport type ProvisionGenericClearSignDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly contextModule: ContextModule;\n};\n\nexport type ProvisionGenericClearSignDAError = SignTransactionDAError;\n\nexport type ProvisionGenericClearSignDAIntermediateValue =\n SignTransactionDASimpleIntermediateValue;\n\nexport type ProvisionGenericClearSignDAInternalState = {\n readonly error: ProvisionGenericClearSignDAError | null;\n readonly outcome:
|
|
4
|
+
"sourcesContent": ["import {\n type ClearSignContext,\n type ContextModule,\n} from \"@ledgerhq/context-module\";\n\nimport {\n type ClearSignMode,\n type SignTransactionDAError,\n type SignTransactionDASimpleIntermediateValue,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type ChallengeBoundRequirements } from \"@internal/app-binder/task/BuildGenericClearSignContextTask\";\n\n/**\n * Outcome of the generic clear-sign preparation. This machine streams the\n * descriptors and validates the session but performs no UI and does not sign \u2014\n * the prompt and terminal sign are run by\n * `SignGenericClearSignDeviceAction`.\n * - `\"prepared\"` \u2014 `BuildContext` + `ProvideContext` + `Finalize` succeeded; the\n * session is ready for the prompt + terminal sign.\n * - `\"degraded\"` \u2014 no instruction recognised or a best-effort step (build /\n * provide / finalize) failed; the caller should fall back to the legacy path.\n *\n * Every step is best-effort, so this machine never surfaces a user cancel (the\n * first user interaction lives downstream in the prompt).\n */\nexport type ProvisionGenericClearSignDAOutput = {\n status: \"prepared\" | \"degraded\";\n unrecognizedProgramIds: string[];\n};\n\nexport type ProvisionGenericClearSignDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly contextModule: ContextModule;\n};\n\nexport type ProvisionGenericClearSignDAError = SignTransactionDAError;\n\nexport type ProvisionGenericClearSignDAIntermediateValue =\n SignTransactionDASimpleIntermediateValue;\n\nexport type ProvisionGenericClearSignDAInternalState = {\n readonly error: ProvisionGenericClearSignDAError | null;\n readonly outcome: \"prepared\" | \"degraded\" | null;\n readonly mode: ClearSignMode | null;\n readonly poolContexts: ClearSignContext[] | null;\n readonly instructionInfoContexts: ClearSignContext[] | null;\n readonly challengeBoundRequirements: ChallengeBoundRequirements | null;\n readonly unrecognizedProgramIds: string[];\n};\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["ProvisionGenericClearSignDeviceActionTypes_exports", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type SendCommandInAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { type BlockhashService } from \"@internal/app-binder/services/BlockhashService\";\nimport { type SolanaSignerFeaturesNames } from \"@internal/app-binder/SolanaApplicationResolver\";\n\nimport { type SignClearSignDAStateStep } from \"./SignClearSignDeviceActionTypes\";\n\nexport const signTransactionDAStateSteps = Object.freeze({\n OPEN_APP: \"signer.sol.steps.openApp\",\n GET_APP_CONFIG: \"signer.sol.steps.getAppConfig\",\n TRANSACTION_CHECKS_OPT_IN: \"signer.sol.steps.transactionChecksOptIn\",\n TRANSACTION_CHECKS_OPT_IN_RESULT:\n \"signer.sol.steps.transactionChecksOptInResult\",\n TRANSACTION_CHECKS_PROVIDE: \"signer.sol.steps.transactionChecksProvide\",\n INSPECT_TRANSACTION: \"signer.sol.steps.inspectTransaction\",\n GET_PUB_KEY: \"signer.sol.steps.getPubKey\",\n BUILD_BASIC_CLEAR_SIGN_CONTEXT: \"signer.sol.steps.buildBasicClearSignContext\",\n PROVIDE_BASIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.provideBasicClearSignContext\",\n BUILD_GENERIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.buildGenericClearSignContext\",\n PROVIDE_GENERIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.provideGenericClearSignContext\",\n FINALIZE_GENERIC_CLEAR_SIGN: \"signer.sol.steps.finalizeGenericClearSign\",\n PROMPT_UI_DISPLAY: \"signer.sol.steps.promptUiDisplay\",\n SIGN_TRANSACTION: \"signer.sol.steps.signTransaction\",\n DELAYED_SIGN: \"signer.sol.steps.delayedSign\",\n} as const);\n\n/**\n * Which clear-signing path produced the signature.\n * `full` = device ran the merge engine\n * `srfc39-only` = partial CAL coverage, device auto-rendered per-instruction without merge\n * `none` = blind/legacy fallback (no instruction recognised or capability absent).\n */\nexport type ClearSignMode = \"full\" | \"srfc39-only\" | \"none\";\n\nexport type SignTransactionDAStateStep =\n | (typeof signTransactionDAStateSteps)[keyof typeof signTransactionDAStateSteps]\n | SignClearSignDAStateStep;\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Transaction;\n readonly contextModule: ContextModule;\n readonly transactionOptions?: SolanaTransactionOptionalConfig;\n readonly solanaRPCURL?: string;\n readonly blockhashService?: BlockhashService;\n readonly disabledFeatures?: ReadonlyArray<SolanaSignerFeaturesNames>;\n};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | SendCommandInAppDAError<SolanaAppErrorCodes>;\n\ntype SignTransactionDARequiredInteraction =\n | UserInteractionRequired\n | OpenAppDARequiredInteraction;\n\n/**\n * The intermediate value shared by every sign-transaction step except the\n * TRANSACTION_CHECKS_OPT_IN_RESULT branch (which carries an extra `result`). The\n * clear-sign child machines emit exactly this shape, so the parent can fold\n * their snapshots into its own intermediate value without a cast.\n */\nexport type SignTransactionDASimpleIntermediateValue = {\n requiredUserInteraction: SignTransactionDARequiredInteraction;\n step: Exclude<\n SignTransactionDAStateStep,\n typeof signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT\n >;\n};\n\nexport type SignTransactionDAIntermediateValue =\n | SignTransactionDASimpleIntermediateValue\n | {\n requiredUserInteraction: UserInteractionRequired.None;\n step: typeof signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT;\n result: boolean;\n };\n\nexport type SignTransactionDAInternalState = {\n readonly error: SignTransactionDAError | null;\n readonly signature: Signature | null;\n readonly appConfig: AppConfiguration | null;\n // Updated by NormalizeTransaction; starts as the raw input and is replaced\n // with the extracted message bytes once the actor completes. serializedForTxCheck\n // is only set when the input was tx.serialize().\n readonly messageBytes: Uint8Array;\n readonly serializedForTxCheck: Uint8Array | undefined;\n // Set when the generic clear-sign path streamed + FINALIZE-validated the\n // descriptors, so the terminal sign runs the generic PROMPT UI DISPLAY flow\n // instead of the legacy preview.\n readonly clearSignPrepared: boolean;\n};\n\nexport type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n"],
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type SendCommandInAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { type BlockhashService } from \"@internal/app-binder/services/BlockhashService\";\nimport { type SolanaSignerFeaturesNames } from \"@internal/app-binder/SolanaApplicationResolver\";\n\nimport { type SignClearSignDAStateStep } from \"./SignClearSignDeviceActionTypes\";\n\nexport const signTransactionDAStateSteps = Object.freeze({\n OPEN_APP: \"signer.sol.steps.openApp\",\n GET_APP_CONFIG: \"signer.sol.steps.getAppConfig\",\n TRANSACTION_CHECKS_OPT_IN: \"signer.sol.steps.transactionChecksOptIn\",\n TRANSACTION_CHECKS_OPT_IN_RESULT:\n \"signer.sol.steps.transactionChecksOptInResult\",\n TRANSACTION_CHECKS_PROVIDE: \"signer.sol.steps.transactionChecksProvide\",\n INSPECT_TRANSACTION: \"signer.sol.steps.inspectTransaction\",\n GET_PUB_KEY: \"signer.sol.steps.getPubKey\",\n BUILD_BASIC_CLEAR_SIGN_CONTEXT: \"signer.sol.steps.buildBasicClearSignContext\",\n PROVIDE_BASIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.provideBasicClearSignContext\",\n BUILD_GENERIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.buildGenericClearSignContext\",\n PROVIDE_GENERIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.provideGenericClearSignContext\",\n FINALIZE_GENERIC_CLEAR_SIGN: \"signer.sol.steps.finalizeGenericClearSign\",\n PROMPT_UI_DISPLAY: \"signer.sol.steps.promptUiDisplay\",\n SIGN_TRANSACTION: \"signer.sol.steps.signTransaction\",\n DELAYED_SIGN: \"signer.sol.steps.delayedSign\",\n} as const);\n\n/**\n * Which clear-signing path produced the signature.\n * `full` = device ran the merge engine\n * `srfc39-only` = partial CAL coverage, device auto-rendered per-instruction without merge\n * `none` = blind/legacy fallback (no instruction recognised or capability absent).\n */\nexport type ClearSignMode = \"full\" | \"srfc39-only\" | \"none\";\n\nexport type SignTransactionDAStateStep =\n | (typeof signTransactionDAStateSteps)[keyof typeof signTransactionDAStateSteps]\n | SignClearSignDAStateStep;\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Transaction;\n readonly contextModule: ContextModule;\n readonly transactionOptions?: SolanaTransactionOptionalConfig;\n readonly solanaRPCURL?: string;\n readonly blockhashService?: BlockhashService;\n readonly disabledFeatures?: ReadonlyArray<SolanaSignerFeaturesNames>;\n};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | SendCommandInAppDAError<SolanaAppErrorCodes>;\n\ntype SignTransactionDARequiredInteraction =\n | UserInteractionRequired\n | OpenAppDARequiredInteraction;\n\n/**\n * The intermediate value shared by every sign-transaction step except the\n * TRANSACTION_CHECKS_OPT_IN_RESULT branch (which carries an extra `result`). The\n * clear-sign child machines emit exactly this shape, so the parent can fold\n * their snapshots into its own intermediate value without a cast.\n */\nexport type SignTransactionDASimpleIntermediateValue = {\n requiredUserInteraction: SignTransactionDARequiredInteraction;\n step: Exclude<\n SignTransactionDAStateStep,\n typeof signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT\n >;\n};\n\nexport type SignTransactionDAIntermediateValue =\n | SignTransactionDASimpleIntermediateValue\n | {\n requiredUserInteraction: UserInteractionRequired.None;\n step: typeof signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT;\n result: boolean;\n };\n\nexport type SignTransactionDAInternalState = {\n readonly error: SignTransactionDAError | null;\n readonly signature: Signature | null;\n readonly appConfig: AppConfiguration | null;\n // Updated by NormalizeTransaction; starts as the raw input and is replaced\n // with the extracted message bytes once the actor completes. serializedForTxCheck\n // is only set when the input was tx.serialize().\n readonly messageBytes: Uint8Array;\n readonly serializedForTxCheck: Uint8Array | undefined;\n // Set when the generic clear-sign path streamed + FINALIZE-validated the\n // descriptors, so the terminal sign runs the generic PROMPT UI DISPLAY flow\n // instead of the legacy preview.\n readonly clearSignPrepared: boolean;\n // Unrecognized program IDs from generic clear-sign, used for blind-sign reporting.\n readonly unrecognizedProgramIds: string[];\n};\n\nexport type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n"],
|
|
5
5
|
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAmBO,MAAME,EAA8B,OAAO,OAAO,CACvD,SAAU,2BACV,eAAgB,gCAChB,0BAA2B,0CAC3B,iCACE,gDACF,2BAA4B,4CAC5B,oBAAqB,sCACrB,YAAa,6BACb,+BAAgC,8CAChC,iCACE,gDACF,iCACE,gDACF,mCACE,kDACF,4BAA6B,4CAC7B,kBAAmB,mCACnB,iBAAkB,mCAClB,aAAc,8BAChB,CAAU",
|
|
6
6
|
"names": ["SignTransactionDeviceActionTypes_exports", "__export", "signTransactionDAStateSteps", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=Object.defineProperty;var
|
|
1
|
+
"use strict";var p=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var I=(n,e)=>{for(var s in e)p(n,s,{get:e[s],enumerable:!0})},g=(n,e,s,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of E(e))!m.call(n,t)&&t!==s&&p(n,t,{get:()=>e[t],enumerable:!(i=x(e,t))||i.enumerable});return n};var R=n=>g(p({},"__esModule",{value:!0}),n);var O={};I(O,{SOLANA_MIN_DELAYED_SIGNING_VERSION:()=>c,SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION:()=>S,SOLANA_MIN_SPL_VERSION:()=>l,SOLANA_MIN_TRANSACTION_CHECKS_VERSION:()=>A,SOLANA_SIGNER_FEATURES:()=>d,SolanaApplicationResolver:()=>N,isSolanaSignerFeatureSupported:()=>v});module.exports=R(O);var o=require("@ledgerhq/device-management-kit"),a=require("./constants");const r="0.0.1",l="1.9.2",c="1.14.0",A="1.16.0",S="1.17.0",d={spl:{minVersion:l,excludedModels:[o.DeviceModelId.NANO_S],excludedApps:[]},transactionChecks:{minVersion:A,excludedModels:[o.DeviceModelId.NANO_S,o.DeviceModelId.NANO_SP,o.DeviceModelId.NANO_X],excludedApps:["Exchange"]},delayedSigning:{minVersion:c,excludedModels:[],excludedApps:[]},genericClearSign:{minVersion:S,excludedModels:[o.DeviceModelId.NANO_S],excludedApps:["Exchange"]}};function v(n,e,s,i){if(i?.has(e))return!1;const{minVersion:t,excludedModels:u,excludedApps:_}=d[e];return new o.ApplicationChecker(n.getDeviceSessionState(),s,new N).withMinVersionInclusive(t).excludeDeviceModels(...u).excludeApps(..._).check()}class N{resolve(e,s){if(e.sessionStateType===o.DeviceSessionStateType.Connected)return{isCompatible:!1,version:r};const i=e.currentApp?.name;return!i||i!==a.APP_NAME&&i!=="Exchange"?{isCompatible:!1,version:r}:{isCompatible:!0,version:s.version}}}0&&(module.exports={SOLANA_MIN_DELAYED_SIGNING_VERSION,SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION,SOLANA_MIN_SPL_VERSION,SOLANA_MIN_TRANSACTION_CHECKS_VERSION,SOLANA_SIGNER_FEATURES,SolanaApplicationResolver,isSolanaSignerFeatureSupported});
|
|
2
2
|
//# sourceMappingURL=SolanaApplicationResolver.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/app-binder/SolanaApplicationResolver.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type AppConfig,\n ApplicationChecker,\n type ApplicationResolver,\n DeviceModelId,\n type DeviceSessionState,\n DeviceSessionStateType,\n type InternalApi,\n type ResolvedApp,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\n\nimport { APP_NAME } from \"./constants\";\n\
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wCAAAE,EAAA,0CAAAC,EAAA,2BAAAC,EAAA,0CAAAC,EAAA,2BAAAC,EAAA,8BAAAC,EAAA,mCAAAC,IAAA,eAAAC,EAAAT,GAAA,IAAAU,EASO,2CAIPC,EAAyB,
|
|
6
|
-
"names": ["SolanaApplicationResolver_exports", "__export", "SOLANA_MIN_DELAYED_SIGNING_VERSION", "SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION", "SOLANA_MIN_SPL_VERSION", "SOLANA_MIN_TRANSACTION_CHECKS_VERSION", "SOLANA_SIGNER_FEATURES", "SolanaApplicationResolver", "isSolanaSignerFeatureSupported", "__toCommonJS", "import_device_management_kit", "import_constants", "
|
|
4
|
+
"sourcesContent": ["import {\n type AppConfig,\n ApplicationChecker,\n type ApplicationResolver,\n DeviceModelId,\n type DeviceSessionState,\n DeviceSessionStateType,\n type InternalApi,\n type ResolvedApp,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\n\nimport { APP_NAME } from \"./constants\";\n\n//const UNRELEASED_MIN_VERSION = \"10.0.0\";\nconst DEFAULT_VERSION = \"0.0.1\";\nexport const SOLANA_MIN_SPL_VERSION = \"1.9.2\";\nexport const SOLANA_MIN_DELAYED_SIGNING_VERSION = \"1.14.0\";\n\nexport const SOLANA_MIN_TRANSACTION_CHECKS_VERSION = \"1.16.0\";\nexport const SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION = \"1.17.0\";\n\nexport const SOLANA_SIGNER_FEATURES = {\n spl: {\n minVersion: SOLANA_MIN_SPL_VERSION,\n excludedModels: [DeviceModelId.NANO_S],\n excludedApps: [] as string[],\n },\n transactionChecks: {\n minVersion: SOLANA_MIN_TRANSACTION_CHECKS_VERSION,\n excludedModels: [\n DeviceModelId.NANO_S,\n DeviceModelId.NANO_SP,\n DeviceModelId.NANO_X,\n ],\n excludedApps: [\"Exchange\"],\n },\n delayedSigning: {\n minVersion: SOLANA_MIN_DELAYED_SIGNING_VERSION,\n excludedModels: [] as DeviceModelId[],\n excludedApps: [] as string[],\n },\n genericClearSign: {\n minVersion: SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION,\n excludedModels: [DeviceModelId.NANO_S],\n excludedApps: [\"Exchange\"],\n },\n} as const;\n\nexport type SolanaSignerFeaturesNames = keyof typeof SOLANA_SIGNER_FEATURES;\n\n/**\n * Whether the connected Solana app supports a given feature, applying its\n * minimum version plus device-model / orchestrating-app exclusions.\n *\n * Pass `disabledFeatures` to force-disable specific features regardless of\n * firmware version (e.g. for testing or temporary kill-switches).\n */\nexport function isSolanaSignerFeatureSupported(\n internalApi: InternalApi,\n feature: SolanaSignerFeaturesNames,\n appConfig: AppConfiguration,\n disabledFeatures?: ReadonlySet<SolanaSignerFeaturesNames>,\n): boolean {\n if (disabledFeatures?.has(feature)) {\n return false;\n }\n const { minVersion, excludedModels, excludedApps } =\n SOLANA_SIGNER_FEATURES[feature];\n return new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n appConfig,\n new SolanaApplicationResolver(),\n )\n .withMinVersionInclusive(minVersion)\n .excludeDeviceModels(...excludedModels)\n .excludeApps(...excludedApps)\n .check();\n}\n\nexport class SolanaApplicationResolver implements ApplicationResolver {\n resolve(deviceState: DeviceSessionState, appConfig: AppConfig): ResolvedApp {\n if (deviceState.sessionStateType === DeviceSessionStateType.Connected) {\n return { isCompatible: false, version: DEFAULT_VERSION };\n }\n\n const appName = deviceState.currentApp?.name;\n\n if (!appName || (appName !== APP_NAME && appName !== \"Exchange\")) {\n return { isCompatible: false, version: DEFAULT_VERSION };\n }\n\n // appConfig.version is authoritative: it comes from GetAppConfiguration\n // executed against the signer app, so it reflects the actual on-device version\n // whether Solana is opened directly or via Exchange orchestration.\n return { isCompatible: true, version: appConfig.version };\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wCAAAE,EAAA,0CAAAC,EAAA,2BAAAC,EAAA,0CAAAC,EAAA,2BAAAC,EAAA,8BAAAC,EAAA,mCAAAC,IAAA,eAAAC,EAAAT,GAAA,IAAAU,EASO,2CAIPC,EAAyB,uBAGzB,MAAMC,EAAkB,QACXR,EAAyB,QACzBF,EAAqC,SAErCG,EAAwC,SACxCF,EAAwC,SAExCG,EAAyB,CACpC,IAAK,CACH,WAAYF,EACZ,eAAgB,CAAC,gBAAc,MAAM,EACrC,aAAc,CAAC,CACjB,EACA,kBAAmB,CACjB,WAAYC,EACZ,eAAgB,CACd,gBAAc,OACd,gBAAc,QACd,gBAAc,MAChB,EACA,aAAc,CAAC,UAAU,CAC3B,EACA,eAAgB,CACd,WAAYH,EACZ,eAAgB,CAAC,EACjB,aAAc,CAAC,CACjB,EACA,iBAAkB,CAChB,WAAYC,EACZ,eAAgB,CAAC,gBAAc,MAAM,EACrC,aAAc,CAAC,UAAU,CAC3B,CACF,EAWO,SAASK,EACdK,EACAC,EACAC,EACAC,EACS,CACT,GAAIA,GAAkB,IAAIF,CAAO,EAC/B,MAAO,GAET,KAAM,CAAE,WAAAG,EAAY,eAAAC,EAAgB,aAAAC,CAAa,EAC/Cb,EAAuBQ,CAAO,EAChC,OAAO,IAAI,qBACTD,EAAY,sBAAsB,EAClCE,EACA,IAAIR,CACN,EACG,wBAAwBU,CAAU,EAClC,oBAAoB,GAAGC,CAAc,EACrC,YAAY,GAAGC,CAAY,EAC3B,MAAM,CACX,CAEO,MAAMZ,CAAyD,CACpE,QAAQa,EAAiCL,EAAmC,CAC1E,GAAIK,EAAY,mBAAqB,yBAAuB,UAC1D,MAAO,CAAE,aAAc,GAAO,QAASR,CAAgB,EAGzD,MAAMS,EAAUD,EAAY,YAAY,KAExC,MAAI,CAACC,GAAYA,IAAY,YAAYA,IAAY,WAC5C,CAAE,aAAc,GAAO,QAAST,CAAgB,EAMlD,CAAE,aAAc,GAAM,QAASG,EAAU,OAAQ,CAC1D,CACF",
|
|
6
|
+
"names": ["SolanaApplicationResolver_exports", "__export", "SOLANA_MIN_DELAYED_SIGNING_VERSION", "SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION", "SOLANA_MIN_SPL_VERSION", "SOLANA_MIN_TRANSACTION_CHECKS_VERSION", "SOLANA_SIGNER_FEATURES", "SolanaApplicationResolver", "isSolanaSignerFeatureSupported", "__toCommonJS", "import_device_management_kit", "import_constants", "DEFAULT_VERSION", "internalApi", "feature", "appConfig", "disabledFeatures", "minVersion", "excludedModels", "excludedApps", "deviceState", "appName"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var r=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var A=(n,t)=>{for(var e in t)r(n,e,{get:t[e],enumerable:!0})},v=(n,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of d(t))!m.call(n,a)&&a!==e&&r(n,a,{get:()=>t[a],enumerable:!(o=l(t,a))||o.enumerable});return n};var f=n=>v(r({},"__esModule",{value:!0}),n);var c={};A(c,{RequirementAccumulator:()=>h});module.exports=f(c);class h{instructionInfos=new s;enumVariants=new s;tokenInfos=new s;tokenAccountStates=new s;altResolutions=new s;trustedNames=new s;tokenAmountRefs=new s;tokenAmountAltRefs=new s;mintAltRefs=new s;addInstructionInfo(t,e){this.instructionInfos.add(`${t}:${e}`,{programId:t,discriminator:e})}addEnumVariant(t,e,o){this.enumVariants.add(`${t}:${e}:${o}`,{programId:t,enumId:e,variantIndex:o})}addTokenInfo(t){this.tokenInfos.add(t,t)}addTokenAccountState(t){this.tokenAccountStates.add(t,t)}addAltResolution(t,e){this.altResolutions.add(`${t}:${e}`,{altAddress:t,entryIndex:e})}addTrustedName(t){this.trustedNames.add(t,t)}addTokenAmountRef(t){this.tokenAmountRefs.add(t,t)}addTokenAmountAltRef(t,e){this.tokenAmountAltRefs.add(`${t}:${e}`,{altAddress:t,entryIndex:e})}addMintAltRef(t,e){this.mintAltRefs.add(`${t}:${e}`,{altAddress:t,entryIndex:e})}build(){const t=({altAddress:i,entryIndex:u})=>`${i}:${u}`,e=new Set(this.tokenAmountAltRefs.values().map(t)),o=new Set(this.mintAltRefs.values().map(t)),a=new Set(this.tokenAccountStates.values());return{instructionInfos:this.instructionInfos.values(),enumVariants:this.enumVariants.values(),tokenInfos:this.tokenInfos.values(),tokenAccountStates:this.tokenAccountStates.values(),altResolutions:this.altResolutions.values().filter(i=>!o.has(t(i))&&!e.has(t(i))),trustedNames:this.trustedNames.values(),tokenAmountRefs:this.tokenAmountRefs.values().filter(i=>!a.has(i)),tokenAmountAltRefs:this.tokenAmountAltRefs.values(),mintAltRefs:this.mintAltRefs.values().filter(i=>!e.has(t(i)))}}}class s{seen=new Set;items=[];add(t,e){this.seen.has(t)||(this.seen.add(t),this.items.push(e))}values(){return[...this.items]}}0&&(module.exports={RequirementAccumulator});
|
|
2
2
|
//# sourceMappingURL=RequirementAccumulator.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/app-binder/clear-sign/requirements/RequirementAccumulator.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type AltEntryKey,\n type DescriptorRequirements,\n type EnumVariantKey,\n type ProgramDiscriminator,\n} from \"./model\";\n\n/**\n * Collects requirements while deduplicating by each descriptor's key and\n * preserving first-seen order, so the output is deterministic.\n */\nexport class RequirementAccumulator {\n private readonly instructionInfos = new OrderedSet<ProgramDiscriminator>();\n private readonly enumVariants = new OrderedSet<EnumVariantKey>();\n private readonly tokenInfos = new OrderedSet<string>();\n private readonly tokenAccountStates = new OrderedSet<string>();\n private readonly altResolutions = new OrderedSet<AltEntryKey>();\n private readonly trustedNames = new OrderedSet<string>();\n private readonly tokenAmountRefs = new OrderedSet<string>();\n private readonly tokenAmountAltRefs = new OrderedSet<AltEntryKey>();\n private readonly mintAltRefs = new OrderedSet<AltEntryKey>();\n\n addInstructionInfo(programId: string, discriminator: string): void {\n this.instructionInfos.add(`${programId}:${discriminator}`, {\n programId,\n discriminator,\n });\n }\n\n addEnumVariant(\n programId: string,\n enumId: string,\n variantIndex: number,\n ): void {\n this.enumVariants.add(`${programId}:${enumId}:${variantIndex}`, {\n programId,\n enumId,\n variantIndex,\n });\n }\n\n addTokenInfo(mint: string): void {\n this.tokenInfos.add(mint, mint);\n }\n\n addTokenAccountState(account: string): void {\n this.tokenAccountStates.add(account, account);\n }\n\n addAltResolution(altAddress: string, entryIndex: number): void {\n this.altResolutions.add(`${altAddress}:${entryIndex}`, {\n altAddress,\n entryIndex,\n });\n }\n\n addTrustedName(address: string): void {\n this.trustedNames.add(address, address);\n }\n\n addTokenAmountRef(address: string): void {\n this.tokenAmountRefs.add(address, address);\n }\n\n addTokenAmountAltRef(altAddress: string, entryIndex: number): void {\n this.tokenAmountAltRefs.add(`${altAddress}:${entryIndex}`, {\n altAddress,\n entryIndex,\n });\n }\n\n addMintAltRef(altAddress: string, entryIndex: number): void {\n this.mintAltRefs.add(`${altAddress}:${entryIndex}`, {\n altAddress,\n entryIndex,\n });\n }\n\n build(): DescriptorRequirements {\n // Priority across the three ALT loops: tokenAmountAltRefs > mintAltRefs >\n // altResolutions. Each higher-priority bucket does everything the lower one\n // does plus more (TOKEN_INFO / TOKEN_ACCOUNT_STATE fallback). Strip\n // lower-priority entries here so the provide phase never sees duplicates and\n // always runs the most complete behaviour for each (altAddress, entryIndex).\n const altKey = ({ altAddress, entryIndex }: AltEntryKey) =>\n `${altAddress}:${entryIndex}`;\n const tokenAmountKeys = new Set(\n this.tokenAmountAltRefs.values().map(altKey),\n );\n const mintKeys = new Set(this.mintAltRefs.values().map(altKey));\n\n return {\n instructionInfos: this.instructionInfos.values(),\n enumVariants: this.enumVariants.values(),\n tokenInfos: this.tokenInfos.values(),\n tokenAccountStates: this.tokenAccountStates.values(),\n altResolutions: this.altResolutions\n .values()\n .filter(\n (k) => !mintKeys.has(altKey(k)) && !tokenAmountKeys.has(altKey(k)),\n ),\n trustedNames: this.trustedNames.values(),\n tokenAmountRefs: this.tokenAmountRefs.values(),\n tokenAmountAltRefs: this.tokenAmountAltRefs.values(),\n mintAltRefs: this.mintAltRefs\n .values()\n .filter((k) => !tokenAmountKeys.has(altKey(k))),\n };\n }\n}\n\nclass OrderedSet<T> {\n private readonly seen = new Set<string>();\n private readonly items: T[] = [];\n\n add(key: string, item: T): void {\n if (this.seen.has(key)) return;\n this.seen.add(key);\n this.items.push(item);\n }\n\n values(): T[] {\n return [...this.items];\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAWO,MAAME,CAAuB,CACjB,iBAAmB,IAAIE,EACvB,aAAe,IAAIA,EACnB,WAAa,IAAIA,EACjB,mBAAqB,IAAIA,EACzB,eAAiB,IAAIA,EACrB,aAAe,IAAIA,EACnB,gBAAkB,IAAIA,EACtB,mBAAqB,IAAIA,EACzB,YAAc,IAAIA,EAEnC,mBAAmBC,EAAmBC,EAA6B,CACjE,KAAK,iBAAiB,IAAI,GAAGD,CAAS,IAAIC,CAAa,GAAI,CACzD,UAAAD,EACA,cAAAC,CACF,CAAC,CACH,CAEA,eACED,EACAE,EACAC,EACM,CACN,KAAK,aAAa,IAAI,GAAGH,CAAS,IAAIE,CAAM,IAAIC,CAAY,GAAI,CAC9D,UAAAH,EACA,OAAAE,EACA,aAAAC,CACF,CAAC,CACH,CAEA,aAAaC,EAAoB,CAC/B,KAAK,WAAW,IAAIA,EAAMA,CAAI,CAChC,CAEA,qBAAqBC,EAAuB,CAC1C,KAAK,mBAAmB,IAAIA,EAASA,CAAO,CAC9C,CAEA,iBAAiBC,EAAoBC,EAA0B,CAC7D,KAAK,eAAe,IAAI,GAAGD,CAAU,IAAIC,CAAU,GAAI,CACrD,WAAAD,EACA,WAAAC,CACF,CAAC,CACH,CAEA,eAAeC,EAAuB,CACpC,KAAK,aAAa,IAAIA,EAASA,CAAO,CACxC,CAEA,kBAAkBA,EAAuB,CACvC,KAAK,gBAAgB,IAAIA,EAASA,CAAO,CAC3C,CAEA,qBAAqBF,EAAoBC,EAA0B,CACjE,KAAK,mBAAmB,IAAI,GAAGD,CAAU,IAAIC,CAAU,GAAI,CACzD,WAAAD,EACA,WAAAC,CACF,CAAC,CACH,CAEA,cAAcD,EAAoBC,EAA0B,CAC1D,KAAK,YAAY,IAAI,GAAGD,CAAU,IAAIC,CAAU,GAAI,CAClD,WAAAD,EACA,WAAAC,CACF,CAAC,CACH,CAEA,OAAgC,CAM9B,MAAME,EAAS,CAAC,CAAE,WAAAH,EAAY,WAAAC,CAAW,IACvC,GAAGD,CAAU,IAAIC,CAAU,GACvBG,EAAkB,IAAI,IAC1B,KAAK,mBAAmB,OAAO,EAAE,IAAID,CAAM,CAC7C,EACME,EAAW,IAAI,IAAI,KAAK,YAAY,OAAO,EAAE,IAAIF,CAAM,CAAC,
|
|
6
|
-
"names": ["RequirementAccumulator_exports", "__export", "RequirementAccumulator", "__toCommonJS", "OrderedSet", "programId", "discriminator", "enumId", "variantIndex", "mint", "account", "altAddress", "entryIndex", "address", "altKey", "tokenAmountKeys", "mintKeys", "k", "key", "item"]
|
|
4
|
+
"sourcesContent": ["import {\n type AltEntryKey,\n type DescriptorRequirements,\n type EnumVariantKey,\n type ProgramDiscriminator,\n} from \"./model\";\n\n/**\n * Collects requirements while deduplicating by each descriptor's key and\n * preserving first-seen order, so the output is deterministic.\n */\nexport class RequirementAccumulator {\n private readonly instructionInfos = new OrderedSet<ProgramDiscriminator>();\n private readonly enumVariants = new OrderedSet<EnumVariantKey>();\n private readonly tokenInfos = new OrderedSet<string>();\n private readonly tokenAccountStates = new OrderedSet<string>();\n private readonly altResolutions = new OrderedSet<AltEntryKey>();\n private readonly trustedNames = new OrderedSet<string>();\n private readonly tokenAmountRefs = new OrderedSet<string>();\n private readonly tokenAmountAltRefs = new OrderedSet<AltEntryKey>();\n private readonly mintAltRefs = new OrderedSet<AltEntryKey>();\n\n addInstructionInfo(programId: string, discriminator: string): void {\n this.instructionInfos.add(`${programId}:${discriminator}`, {\n programId,\n discriminator,\n });\n }\n\n addEnumVariant(\n programId: string,\n enumId: string,\n variantIndex: number,\n ): void {\n this.enumVariants.add(`${programId}:${enumId}:${variantIndex}`, {\n programId,\n enumId,\n variantIndex,\n });\n }\n\n addTokenInfo(mint: string): void {\n this.tokenInfos.add(mint, mint);\n }\n\n addTokenAccountState(account: string): void {\n this.tokenAccountStates.add(account, account);\n }\n\n addAltResolution(altAddress: string, entryIndex: number): void {\n this.altResolutions.add(`${altAddress}:${entryIndex}`, {\n altAddress,\n entryIndex,\n });\n }\n\n addTrustedName(address: string): void {\n this.trustedNames.add(address, address);\n }\n\n addTokenAmountRef(address: string): void {\n this.tokenAmountRefs.add(address, address);\n }\n\n addTokenAmountAltRef(altAddress: string, entryIndex: number): void {\n this.tokenAmountAltRefs.add(`${altAddress}:${entryIndex}`, {\n altAddress,\n entryIndex,\n });\n }\n\n addMintAltRef(altAddress: string, entryIndex: number): void {\n this.mintAltRefs.add(`${altAddress}:${entryIndex}`, {\n altAddress,\n entryIndex,\n });\n }\n\n build(): DescriptorRequirements {\n // Priority across the three ALT loops: tokenAmountAltRefs > mintAltRefs >\n // altResolutions. Each higher-priority bucket does everything the lower one\n // does plus more (TOKEN_INFO / TOKEN_ACCOUNT_STATE fallback). Strip\n // lower-priority entries here so the provide phase never sees duplicates and\n // always runs the most complete behaviour for each (altAddress, entryIndex).\n const altKey = ({ altAddress, entryIndex }: AltEntryKey) =>\n `${altAddress}:${entryIndex}`;\n const tokenAmountKeys = new Set(\n this.tokenAmountAltRefs.values().map(altKey),\n );\n const mintKeys = new Set(this.mintAltRefs.values().map(altKey));\n\n const tokenAccountKeys = new Set(this.tokenAccountStates.values());\n\n return {\n instructionInfos: this.instructionInfos.values(),\n enumVariants: this.enumVariants.values(),\n tokenInfos: this.tokenInfos.values(),\n tokenAccountStates: this.tokenAccountStates.values(),\n altResolutions: this.altResolutions\n .values()\n .filter(\n (k) => !mintKeys.has(altKey(k)) && !tokenAmountKeys.has(altKey(k)),\n ),\n trustedNames: this.trustedNames.values(),\n tokenAmountRefs: this.tokenAmountRefs\n .values()\n .filter((address) => !tokenAccountKeys.has(address)),\n tokenAmountAltRefs: this.tokenAmountAltRefs.values(),\n mintAltRefs: this.mintAltRefs\n .values()\n .filter((k) => !tokenAmountKeys.has(altKey(k))),\n };\n }\n}\n\nclass OrderedSet<T> {\n private readonly seen = new Set<string>();\n private readonly items: T[] = [];\n\n add(key: string, item: T): void {\n if (this.seen.has(key)) return;\n this.seen.add(key);\n this.items.push(item);\n }\n\n values(): T[] {\n return [...this.items];\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAWO,MAAME,CAAuB,CACjB,iBAAmB,IAAIE,EACvB,aAAe,IAAIA,EACnB,WAAa,IAAIA,EACjB,mBAAqB,IAAIA,EACzB,eAAiB,IAAIA,EACrB,aAAe,IAAIA,EACnB,gBAAkB,IAAIA,EACtB,mBAAqB,IAAIA,EACzB,YAAc,IAAIA,EAEnC,mBAAmBC,EAAmBC,EAA6B,CACjE,KAAK,iBAAiB,IAAI,GAAGD,CAAS,IAAIC,CAAa,GAAI,CACzD,UAAAD,EACA,cAAAC,CACF,CAAC,CACH,CAEA,eACED,EACAE,EACAC,EACM,CACN,KAAK,aAAa,IAAI,GAAGH,CAAS,IAAIE,CAAM,IAAIC,CAAY,GAAI,CAC9D,UAAAH,EACA,OAAAE,EACA,aAAAC,CACF,CAAC,CACH,CAEA,aAAaC,EAAoB,CAC/B,KAAK,WAAW,IAAIA,EAAMA,CAAI,CAChC,CAEA,qBAAqBC,EAAuB,CAC1C,KAAK,mBAAmB,IAAIA,EAASA,CAAO,CAC9C,CAEA,iBAAiBC,EAAoBC,EAA0B,CAC7D,KAAK,eAAe,IAAI,GAAGD,CAAU,IAAIC,CAAU,GAAI,CACrD,WAAAD,EACA,WAAAC,CACF,CAAC,CACH,CAEA,eAAeC,EAAuB,CACpC,KAAK,aAAa,IAAIA,EAASA,CAAO,CACxC,CAEA,kBAAkBA,EAAuB,CACvC,KAAK,gBAAgB,IAAIA,EAASA,CAAO,CAC3C,CAEA,qBAAqBF,EAAoBC,EAA0B,CACjE,KAAK,mBAAmB,IAAI,GAAGD,CAAU,IAAIC,CAAU,GAAI,CACzD,WAAAD,EACA,WAAAC,CACF,CAAC,CACH,CAEA,cAAcD,EAAoBC,EAA0B,CAC1D,KAAK,YAAY,IAAI,GAAGD,CAAU,IAAIC,CAAU,GAAI,CAClD,WAAAD,EACA,WAAAC,CACF,CAAC,CACH,CAEA,OAAgC,CAM9B,MAAME,EAAS,CAAC,CAAE,WAAAH,EAAY,WAAAC,CAAW,IACvC,GAAGD,CAAU,IAAIC,CAAU,GACvBG,EAAkB,IAAI,IAC1B,KAAK,mBAAmB,OAAO,EAAE,IAAID,CAAM,CAC7C,EACME,EAAW,IAAI,IAAI,KAAK,YAAY,OAAO,EAAE,IAAIF,CAAM,CAAC,EAExDG,EAAmB,IAAI,IAAI,KAAK,mBAAmB,OAAO,CAAC,EAEjE,MAAO,CACL,iBAAkB,KAAK,iBAAiB,OAAO,EAC/C,aAAc,KAAK,aAAa,OAAO,EACvC,WAAY,KAAK,WAAW,OAAO,EACnC,mBAAoB,KAAK,mBAAmB,OAAO,EACnD,eAAgB,KAAK,eAClB,OAAO,EACP,OACEC,GAAM,CAACF,EAAS,IAAIF,EAAOI,CAAC,CAAC,GAAK,CAACH,EAAgB,IAAID,EAAOI,CAAC,CAAC,CACnE,EACF,aAAc,KAAK,aAAa,OAAO,EACvC,gBAAiB,KAAK,gBACnB,OAAO,EACP,OAAQL,GAAY,CAACI,EAAiB,IAAIJ,CAAO,CAAC,EACrD,mBAAoB,KAAK,mBAAmB,OAAO,EACnD,YAAa,KAAK,YACf,OAAO,EACP,OAAQK,GAAM,CAACH,EAAgB,IAAID,EAAOI,CAAC,CAAC,CAAC,CAClD,CACF,CACF,CAEA,MAAMd,CAAc,CACD,KAAO,IAAI,IACX,MAAa,CAAC,EAE/B,IAAIe,EAAaC,EAAe,CAC1B,KAAK,KAAK,IAAID,CAAG,IACrB,KAAK,KAAK,IAAIA,CAAG,EACjB,KAAK,MAAM,KAAKC,CAAI,EACtB,CAEA,QAAc,CACZ,MAAO,CAAC,GAAG,KAAK,KAAK,CACvB,CACF",
|
|
6
|
+
"names": ["RequirementAccumulator_exports", "__export", "RequirementAccumulator", "__toCommonJS", "OrderedSet", "programId", "discriminator", "enumId", "variantIndex", "mint", "account", "altAddress", "entryIndex", "address", "altKey", "tokenAmountKeys", "mintKeys", "tokenAccountKeys", "k", "key", "item"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var n=require("./RequirementAccumulator");describe("RequirementAccumulator",()=>{it("deduplicates each descriptor type by its key",()=>{const t=new n.RequirementAccumulator;t.addInstructionInfo("P","00"),t.addInstructionInfo("P","00"),t.addEnumVariant("P","e",1),t.addEnumVariant("P","e",1),t.addTokenInfo("mint"),t.addTokenInfo("mint"),t.addTokenAccountState("ata"),t.addTokenAccountState("ata"),t.addAltResolution("ALT",2),t.addAltResolution("ALT",2),t.addTrustedName("name"),t.addTrustedName("name");const e=t.build();expect(e.instructionInfos).toHaveLength(1),expect(e.enumVariants).toHaveLength(1),expect(e.tokenInfos).toEqual(["mint"]),expect(e.tokenAccountStates).toEqual(["ata"]),expect(e.altResolutions).toEqual([{altAddress:"ALT",entryIndex:2}]),expect(e.trustedNames).toEqual(["name"])}),it("preserves first-seen insertion order",()=>{const t=new n.RequirementAccumulator;t.addTokenInfo("c"),t.addTokenInfo("a"),t.addTokenInfo("b"),t.addTokenInfo("a"),expect(t.build().tokenInfos).toEqual(["c","a","b"])}),it("treats different keys of the same type as distinct",()=>{const t=new n.RequirementAccumulator;t.addAltResolution("ALT",1),t.addAltResolution("ALT",2),t.addEnumVariant("P","e",1),t.addEnumVariant("P","e",2),expect(t.build().altResolutions).toHaveLength(2),expect(t.build().enumVariants).toHaveLength(2)}),it("build() applies cross-bucket priority dedup: tokenAmountAltRefs > mintAltRefs > altResolutions",()=>{const t=new n.RequirementAccumulator;t.addAltResolution("ALT",1),t.addMintAltRef("ALT",1),t.addTokenAmountAltRef("ALT",1),t.addAltResolution("ALT",2),t.addMintAltRef("ALT",2),t.addAltResolution("ALT",3);const e=t.build();expect(e.tokenAmountAltRefs).toEqual([{altAddress:"ALT",entryIndex:1}]),expect(e.mintAltRefs).toEqual([{altAddress:"ALT",entryIndex:2}]),expect(e.altResolutions).toEqual([{altAddress:"ALT",entryIndex:3}])}),it("returns an empty set when nothing was added",()=>{expect(new n.RequirementAccumulator().build()).toEqual({instructionInfos:[],enumVariants:[],tokenInfos:[],tokenAccountStates:[],altResolutions:[],trustedNames:[],tokenAmountRefs:[],tokenAmountAltRefs:[],mintAltRefs:[]})})});
|
|
1
|
+
"use strict";var n=require("./RequirementAccumulator");describe("RequirementAccumulator",()=>{it("deduplicates each descriptor type by its key",()=>{const t=new n.RequirementAccumulator;t.addInstructionInfo("P","00"),t.addInstructionInfo("P","00"),t.addEnumVariant("P","e",1),t.addEnumVariant("P","e",1),t.addTokenInfo("mint"),t.addTokenInfo("mint"),t.addTokenAccountState("ata"),t.addTokenAccountState("ata"),t.addAltResolution("ALT",2),t.addAltResolution("ALT",2),t.addTrustedName("name"),t.addTrustedName("name");const e=t.build();expect(e.instructionInfos).toHaveLength(1),expect(e.enumVariants).toHaveLength(1),expect(e.tokenInfos).toEqual(["mint"]),expect(e.tokenAccountStates).toEqual(["ata"]),expect(e.altResolutions).toEqual([{altAddress:"ALT",entryIndex:2}]),expect(e.trustedNames).toEqual(["name"])}),it("preserves first-seen insertion order",()=>{const t=new n.RequirementAccumulator;t.addTokenInfo("c"),t.addTokenInfo("a"),t.addTokenInfo("b"),t.addTokenInfo("a"),expect(t.build().tokenInfos).toEqual(["c","a","b"])}),it("treats different keys of the same type as distinct",()=>{const t=new n.RequirementAccumulator;t.addAltResolution("ALT",1),t.addAltResolution("ALT",2),t.addEnumVariant("P","e",1),t.addEnumVariant("P","e",2),expect(t.build().altResolutions).toHaveLength(2),expect(t.build().enumVariants).toHaveLength(2)}),it("build() applies cross-bucket priority dedup: tokenAmountAltRefs > mintAltRefs > altResolutions",()=>{const t=new n.RequirementAccumulator;t.addAltResolution("ALT",1),t.addMintAltRef("ALT",1),t.addTokenAmountAltRef("ALT",1),t.addAltResolution("ALT",2),t.addMintAltRef("ALT",2),t.addAltResolution("ALT",3);const e=t.build();expect(e.tokenAmountAltRefs).toEqual([{altAddress:"ALT",entryIndex:1}]),expect(e.mintAltRefs).toEqual([{altAddress:"ALT",entryIndex:2}]),expect(e.altResolutions).toEqual([{altAddress:"ALT",entryIndex:3}])}),it("build() applies cross-bucket priority dedup: tokenAccountStates > tokenAmountRefs",()=>{const t=new n.RequirementAccumulator;t.addTokenAccountState("ata"),t.addTokenAmountRef("ata"),t.addTokenAmountRef("maybeMint");const e=t.build();expect(e.tokenAccountStates).toEqual(["ata"]),expect(e.tokenAmountRefs).toEqual(["maybeMint"])}),it("returns an empty set when nothing was added",()=>{expect(new n.RequirementAccumulator().build()).toEqual({instructionInfos:[],enumVariants:[],tokenInfos:[],tokenAccountStates:[],altResolutions:[],trustedNames:[],tokenAmountRefs:[],tokenAmountAltRefs:[],mintAltRefs:[]})})});
|
|
2
2
|
//# sourceMappingURL=RequirementAccumulator.test.js.map
|
package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { RequirementAccumulator } from \"./RequirementAccumulator\";\n\ndescribe(\"RequirementAccumulator\", () => {\n it(\"deduplicates each descriptor type by its key\", () => {\n const accumulator = new RequirementAccumulator();\n accumulator.addInstructionInfo(\"P\", \"00\");\n accumulator.addInstructionInfo(\"P\", \"00\");\n accumulator.addEnumVariant(\"P\", \"e\", 1);\n accumulator.addEnumVariant(\"P\", \"e\", 1);\n accumulator.addTokenInfo(\"mint\");\n accumulator.addTokenInfo(\"mint\");\n accumulator.addTokenAccountState(\"ata\");\n accumulator.addTokenAccountState(\"ata\");\n accumulator.addAltResolution(\"ALT\", 2);\n accumulator.addAltResolution(\"ALT\", 2);\n accumulator.addTrustedName(\"name\");\n accumulator.addTrustedName(\"name\");\n\n const result = accumulator.build();\n expect(result.instructionInfos).toHaveLength(1);\n expect(result.enumVariants).toHaveLength(1);\n expect(result.tokenInfos).toEqual([\"mint\"]);\n expect(result.tokenAccountStates).toEqual([\"ata\"]);\n expect(result.altResolutions).toEqual([\n { altAddress: \"ALT\", entryIndex: 2 },\n ]);\n expect(result.trustedNames).toEqual([\"name\"]);\n });\n\n it(\"preserves first-seen insertion order\", () => {\n const accumulator = new RequirementAccumulator();\n accumulator.addTokenInfo(\"c\");\n accumulator.addTokenInfo(\"a\");\n accumulator.addTokenInfo(\"b\");\n accumulator.addTokenInfo(\"a\");\n expect(accumulator.build().tokenInfos).toEqual([\"c\", \"a\", \"b\"]);\n });\n\n it(\"treats different keys of the same type as distinct\", () => {\n const accumulator = new RequirementAccumulator();\n accumulator.addAltResolution(\"ALT\", 1);\n accumulator.addAltResolution(\"ALT\", 2);\n accumulator.addEnumVariant(\"P\", \"e\", 1);\n accumulator.addEnumVariant(\"P\", \"e\", 2);\n expect(accumulator.build().altResolutions).toHaveLength(2);\n expect(accumulator.build().enumVariants).toHaveLength(2);\n });\n\n it(\"build() applies cross-bucket priority dedup: tokenAmountAltRefs > mintAltRefs > altResolutions\", () => {\n const accumulator = new RequirementAccumulator();\n\n // (ALT, 1) added to all three buckets.\n accumulator.addAltResolution(\"ALT\", 1);\n accumulator.addMintAltRef(\"ALT\", 1);\n accumulator.addTokenAmountAltRef(\"ALT\", 1);\n\n // (ALT, 2) added to mintAltRefs and altResolutions.\n accumulator.addAltResolution(\"ALT\", 2);\n accumulator.addMintAltRef(\"ALT\", 2);\n\n // (ALT, 3) only in altResolutions.\n accumulator.addAltResolution(\"ALT\", 3);\n\n const result = accumulator.build();\n\n // tokenAmountAltRefs wins for (ALT,1) \u2192 stripped from altResolutions and mintAltRefs.\n // mintAltRefs wins for (ALT,2) \u2192 stripped from altResolutions.\n // (ALT,3) has no higher-priority entry \u2192 stays in altResolutions.\n expect(result.tokenAmountAltRefs).toEqual([\n { altAddress: \"ALT\", entryIndex: 1 },\n ]);\n expect(result.mintAltRefs).toEqual([{ altAddress: \"ALT\", entryIndex: 2 }]);\n expect(result.altResolutions).toEqual([\n { altAddress: \"ALT\", entryIndex: 3 },\n ]);\n });\n\n it(\"returns an empty set when nothing was added\", () => {\n expect(new RequirementAccumulator().build()).toEqual({\n instructionInfos: [],\n enumVariants: [],\n tokenInfos: [],\n tokenAccountStates: [],\n altResolutions: [],\n trustedNames: [],\n tokenAmountRefs: [],\n tokenAmountAltRefs: [],\n mintAltRefs: [],\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAAuC,oCAEvC,SAAS,yBAA0B,IAAM,CACvC,GAAG,+CAAgD,IAAM,CACvD,MAAMC,EAAc,IAAI,yBACxBA,EAAY,mBAAmB,IAAK,IAAI,EACxCA,EAAY,mBAAmB,IAAK,IAAI,EACxCA,EAAY,eAAe,IAAK,IAAK,CAAC,EACtCA,EAAY,eAAe,IAAK,IAAK,CAAC,EACtCA,EAAY,aAAa,MAAM,EAC/BA,EAAY,aAAa,MAAM,EAC/BA,EAAY,qBAAqB,KAAK,EACtCA,EAAY,qBAAqB,KAAK,EACtCA,EAAY,iBAAiB,MAAO,CAAC,EACrCA,EAAY,iBAAiB,MAAO,CAAC,EACrCA,EAAY,eAAe,MAAM,EACjCA,EAAY,eAAe,MAAM,EAEjC,MAAMC,EAASD,EAAY,MAAM,EACjC,OAAOC,EAAO,gBAAgB,EAAE,aAAa,CAAC,EAC9C,OAAOA,EAAO,YAAY,EAAE,aAAa,CAAC,EAC1C,OAAOA,EAAO,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC1C,OAAOA,EAAO,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,EACjD,OAAOA,EAAO,cAAc,EAAE,QAAQ,CACpC,CAAE,WAAY,MAAO,WAAY,CAAE,CACrC,CAAC,EACD,OAAOA,EAAO,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAC9C,CAAC,EAED,GAAG,uCAAwC,IAAM,CAC/C,MAAMD,EAAc,IAAI,yBACxBA,EAAY,aAAa,GAAG,EAC5BA,EAAY,aAAa,GAAG,EAC5BA,EAAY,aAAa,GAAG,EAC5BA,EAAY,aAAa,GAAG,EAC5B,OAAOA,EAAY,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAK,IAAK,GAAG,CAAC,CAChE,CAAC,EAED,GAAG,qDAAsD,IAAM,CAC7D,MAAMA,EAAc,IAAI,yBACxBA,EAAY,iBAAiB,MAAO,CAAC,EACrCA,EAAY,iBAAiB,MAAO,CAAC,EACrCA,EAAY,eAAe,IAAK,IAAK,CAAC,EACtCA,EAAY,eAAe,IAAK,IAAK,CAAC,EACtC,OAAOA,EAAY,MAAM,EAAE,cAAc,EAAE,aAAa,CAAC,EACzD,OAAOA,EAAY,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CACzD,CAAC,EAED,GAAG,iGAAkG,IAAM,CACzG,MAAMA,EAAc,IAAI,yBAGxBA,EAAY,iBAAiB,MAAO,CAAC,EACrCA,EAAY,cAAc,MAAO,CAAC,EAClCA,EAAY,qBAAqB,MAAO,CAAC,EAGzCA,EAAY,iBAAiB,MAAO,CAAC,EACrCA,EAAY,cAAc,MAAO,CAAC,EAGlCA,EAAY,iBAAiB,MAAO,CAAC,EAErC,MAAMC,EAASD,EAAY,MAAM,EAKjC,OAAOC,EAAO,kBAAkB,EAAE,QAAQ,CACxC,CAAE,WAAY,MAAO,WAAY,CAAE,CACrC,CAAC,EACD,OAAOA,EAAO,WAAW,EAAE,QAAQ,CAAC,CAAE,WAAY,MAAO,WAAY,CAAE,CAAC,CAAC,EACzE,OAAOA,EAAO,cAAc,EAAE,QAAQ,CACpC,CAAE,WAAY,MAAO,WAAY,CAAE,CACrC,CAAC,CACH,CAAC,EAED,GAAG,8CAA+C,IAAM,CACtD,OAAO,IAAI,yBAAuB,EAAE,MAAM,CAAC,EAAE,QAAQ,CACnD,iBAAkB,CAAC,EACnB,aAAc,CAAC,EACf,WAAY,CAAC,EACb,mBAAoB,CAAC,EACrB,eAAgB,CAAC,EACjB,aAAc,CAAC,EACf,gBAAiB,CAAC,EAClB,mBAAoB,CAAC,EACrB,YAAa,CAAC,CAChB,CAAC,CACH,CAAC,CACH,CAAC",
|
|
4
|
+
"sourcesContent": ["import { RequirementAccumulator } from \"./RequirementAccumulator\";\n\ndescribe(\"RequirementAccumulator\", () => {\n it(\"deduplicates each descriptor type by its key\", () => {\n const accumulator = new RequirementAccumulator();\n accumulator.addInstructionInfo(\"P\", \"00\");\n accumulator.addInstructionInfo(\"P\", \"00\");\n accumulator.addEnumVariant(\"P\", \"e\", 1);\n accumulator.addEnumVariant(\"P\", \"e\", 1);\n accumulator.addTokenInfo(\"mint\");\n accumulator.addTokenInfo(\"mint\");\n accumulator.addTokenAccountState(\"ata\");\n accumulator.addTokenAccountState(\"ata\");\n accumulator.addAltResolution(\"ALT\", 2);\n accumulator.addAltResolution(\"ALT\", 2);\n accumulator.addTrustedName(\"name\");\n accumulator.addTrustedName(\"name\");\n\n const result = accumulator.build();\n expect(result.instructionInfos).toHaveLength(1);\n expect(result.enumVariants).toHaveLength(1);\n expect(result.tokenInfos).toEqual([\"mint\"]);\n expect(result.tokenAccountStates).toEqual([\"ata\"]);\n expect(result.altResolutions).toEqual([\n { altAddress: \"ALT\", entryIndex: 2 },\n ]);\n expect(result.trustedNames).toEqual([\"name\"]);\n });\n\n it(\"preserves first-seen insertion order\", () => {\n const accumulator = new RequirementAccumulator();\n accumulator.addTokenInfo(\"c\");\n accumulator.addTokenInfo(\"a\");\n accumulator.addTokenInfo(\"b\");\n accumulator.addTokenInfo(\"a\");\n expect(accumulator.build().tokenInfos).toEqual([\"c\", \"a\", \"b\"]);\n });\n\n it(\"treats different keys of the same type as distinct\", () => {\n const accumulator = new RequirementAccumulator();\n accumulator.addAltResolution(\"ALT\", 1);\n accumulator.addAltResolution(\"ALT\", 2);\n accumulator.addEnumVariant(\"P\", \"e\", 1);\n accumulator.addEnumVariant(\"P\", \"e\", 2);\n expect(accumulator.build().altResolutions).toHaveLength(2);\n expect(accumulator.build().enumVariants).toHaveLength(2);\n });\n\n it(\"build() applies cross-bucket priority dedup: tokenAmountAltRefs > mintAltRefs > altResolutions\", () => {\n const accumulator = new RequirementAccumulator();\n\n // (ALT, 1) added to all three buckets.\n accumulator.addAltResolution(\"ALT\", 1);\n accumulator.addMintAltRef(\"ALT\", 1);\n accumulator.addTokenAmountAltRef(\"ALT\", 1);\n\n // (ALT, 2) added to mintAltRefs and altResolutions.\n accumulator.addAltResolution(\"ALT\", 2);\n accumulator.addMintAltRef(\"ALT\", 2);\n\n // (ALT, 3) only in altResolutions.\n accumulator.addAltResolution(\"ALT\", 3);\n\n const result = accumulator.build();\n\n // tokenAmountAltRefs wins for (ALT,1) \u2192 stripped from altResolutions and mintAltRefs.\n // mintAltRefs wins for (ALT,2) \u2192 stripped from altResolutions.\n // (ALT,3) has no higher-priority entry \u2192 stays in altResolutions.\n expect(result.tokenAmountAltRefs).toEqual([\n { altAddress: \"ALT\", entryIndex: 1 },\n ]);\n expect(result.mintAltRefs).toEqual([{ altAddress: \"ALT\", entryIndex: 2 }]);\n expect(result.altResolutions).toEqual([\n { altAddress: \"ALT\", entryIndex: 3 },\n ]);\n });\n\n it(\"build() applies cross-bucket priority dedup: tokenAccountStates > tokenAmountRefs\", () => {\n const accumulator = new RequirementAccumulator();\n\n // \"ata\" is both a RESOLVE-port token account and a PARAM_TOKEN_AMOUNT ref.\n accumulator.addTokenAccountState(\"ata\");\n accumulator.addTokenAmountRef(\"ata\");\n // \"maybeMint\" is only a PARAM_TOKEN_AMOUNT ref.\n accumulator.addTokenAmountRef(\"maybeMint\");\n\n const result = accumulator.build();\n\n // Without the strip, the ref's TOKEN_INFO probe 404s and its fallback\n // queues a duplicate TOKEN_ACCOUNT_STATE for \"ata\".\n expect(result.tokenAccountStates).toEqual([\"ata\"]);\n expect(result.tokenAmountRefs).toEqual([\"maybeMint\"]);\n });\n\n it(\"returns an empty set when nothing was added\", () => {\n expect(new RequirementAccumulator().build()).toEqual({\n instructionInfos: [],\n enumVariants: [],\n tokenInfos: [],\n tokenAccountStates: [],\n altResolutions: [],\n trustedNames: [],\n tokenAmountRefs: [],\n tokenAmountAltRefs: [],\n mintAltRefs: [],\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_RequirementAccumulator", "accumulator", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=require("purify-ts"),u=require("../../../app-binder/services/bs58Encoder"),e=require("./__tests__/fixtures/calBuilders"),d=require("./buildRequirements"),
|
|
1
|
+
"use strict";var p=require("purify-ts"),u=require("../../../app-binder/services/bs58Encoder"),e=require("./__tests__/fixtures/calBuilders"),d=require("./buildRequirements"),s=require("./records"),m=require("./RequirementsError");const I=new Map,A=()=>(0,p.Right)([]);function n(t,o,a=!1){return{address:t,altRef:o,isWritable:a}}function i(t,o={}){const a=["DIRECT","RESOLVE","NULL","NATIVE"][t];return(0,e.valueFlowPort)({accountIndex:o.accountIndex??0,tokenValue:(0,e.tokenValue)(a,{accountIndex:o.tokenAccountIndex,value:o.value})})}function r(t){return{instruction:{programId:t.programId??"Prog",accounts:t.accounts,data:t.data??new Uint8Array},descriptor:{discriminator:t.discriminator??"00",idlDescriptor:(0,e.idlDescriptor)({}),mintAssociations:[],valueFlowPorts:[],accountResets:[],displayFields:[],enumCache:I,...t.descriptor}}}function c(t,o=A){return(0,d.buildRequirements)(t,{selectEnumVariants:o}).unsafeCoerce()}describe("buildRequirements",()=>{it("System transfer: only INSTRUCTION_INFO, native port pulls no token info",()=>{const t=c([r({programId:"11111111111111111111111111111111",discriminator:"02000000",accounts:[n("from"),n("to")],descriptor:{valueFlowPorts:[i(s.TokenKind.NATIVE,{accountIndex:0})]}})]);expect(t.instructionInfos).toEqual([{programId:"11111111111111111111111111111111",discriminator:"02000000"}]),expect(t.tokenInfos).toEqual([]),expect(t.tokenAccountStates).toEqual([])}),it("DIRECT port: a constant mint becomes a TOKEN_INFO",()=>{const t=new Uint8Array(32).fill(9),o=c([r({accounts:[n("a")],descriptor:{valueFlowPorts:[i(s.TokenKind.DIRECT,{value:(0,e.constantValue)(t)})]}})]);expect(o.tokenInfos).toEqual([u.DefaultBs58Encoder.encode(t)])}),it("DIRECT port: an ACCOUNT_PATH mint resolves to the account address",()=>{const t=c([r({accounts:[n("tokenAcct"),n("theMint")],descriptor:{valueFlowPorts:[i(s.TokenKind.DIRECT,{value:(0,e.accountPathValue)(1)})]}})]);expect(t.tokenInfos).toEqual(["theMint"])}),it("RESOLVE port not covered by MINT_ASSOC: sends TOKEN_ACCOUNT_STATE",()=>{const t=c([r({accounts:[n("userAta")],descriptor:{valueFlowPorts:[i(s.TokenKind.RESOLVE,{accountIndex:0,tokenAccountIndex:0})]}})]);expect(t.tokenAccountStates).toEqual(["userAta"]),expect(t.tokenInfos).toEqual([])}),it("RESOLVE port with a single-account candidate list resolves the token account",()=>{const t=c([r({accounts:[n("userAta")],descriptor:{valueFlowPorts:[{account_indices:[0],token_value:{kind:"RESOLVE"}}]}})]);expect(t.tokenAccountStates).toEqual(["userAta"])}),it("RESOLVE port covered by MINT_ASSOC: emits TOKEN_INFO, skips account-state",()=>{const t=c([r({accounts:[n("createdAta"),n("theMint")],descriptor:{mintAssociations:[(0,e.mintAssociation)(0,1)],valueFlowPorts:[i(s.TokenKind.RESOLVE,{accountIndex:0,tokenAccountIndex:0})]}})]);expect(t.tokenAccountStates).toEqual([]),expect(t.tokenInfos).toEqual(["theMint"])}),it("NULL port pulls no token requirements",()=>{const t=c([r({accounts:[n("x")],descriptor:{valueFlowPorts:[i(s.TokenKind.NULL)]}})]);expect(t.tokenInfos).toEqual([]),expect(t.tokenAccountStates).toEqual([])}),it("ACCOUNT_RESET with requirePreBalanceZero forces a TOKEN_ACCOUNT_STATE",()=>{const t=c([r({accounts:[n("ata")],descriptor:{accountResets:[(0,e.accountReset)({accountIndex:0,requirePreBalanceZero:!0})]}})]);expect(t.tokenAccountStates).toEqual(["ata"])}),it("ACCOUNT_RESET without the flag adds nothing",()=>{const t=c([r({accounts:[n("ata")],descriptor:{accountResets:[(0,e.accountReset)({accountIndex:0})]}})]);expect(t.tokenAccountStates).toEqual([])}),it("emits ALT_RESOLUTION only for accounts referenced by DISPLAY_FIELD ACCOUNT_PATH or MINT_ASSOC",()=>{const t=c([r({accounts:[n("staticKey"),n(void 0,{altAddress:"ALT",entryIndex:3}),n(void 0,{altAddress:"ALT",entryIndex:9})],descriptor:{displayFields:[(0,e.trustedNameDisplayField)((0,e.accountPathValue)(1))]}})]);expect(t.altResolutions).toEqual([{altAddress:"ALT",entryIndex:3}])}),it("routes a read-only ALT mint from MINT_ASSOCIATION to mintAltRefs",()=>{const t=c([r({accounts:[n(void 0,{altAddress:"ALT",entryIndex:4}),n(void 0,{altAddress:"ALT",entryIndex:6})],descriptor:{mintAssociations:[(0,e.mintAssociation)(0,1)]}})]);expect(t.altResolutions).toEqual([{altAddress:"ALT",entryIndex:4}]),expect(t.mintAltRefs).toEqual([{altAddress:"ALT",entryIndex:6}])}),it("emits ALT_RESOLUTION for a writable ALT account named by no descriptor field",()=>{const t=c([r({accounts:[n("staticKey"),n(void 0,{altAddress:"ALT",entryIndex:3},!0),n(void 0,{altAddress:"ALT",entryIndex:9})]})]);expect(t.altResolutions).toEqual([{altAddress:"ALT",entryIndex:3}])}),it("emits TRUSTED_NAME for PARAM_TRUSTED_NAME fields (account path + constant)",()=>{const t=new Uint8Array(32).fill(5),o=c([r({accounts:[n("ignored"),n("namedAccount")],descriptor:{displayFields:[(0,e.trustedNameDisplayField)((0,e.accountPathValue)(1)),(0,e.trustedNameDisplayField)((0,e.constantValue)(t))]}})]);expect(o.trustedNames).toEqual(["namedAccount",u.DefaultBs58Encoder.encode(t)])}),it("decodes selected enum variants via the default decoder",()=>{const t=[{index:0,kind:"STRUCT",refs:[1]},{index:1,kind:"ENUM",disc_kind:"U8",total_variants:9,enum_id:"k"}],o=(0,d.buildRequirements)([r({programId:"P",accounts:[],data:(0,e.bytes)(2),descriptor:{idlDescriptor:(0,e.idlDescriptor)({typePool:t,rootType:0})}})]).unsafeCoerce();expect(o.enumVariants).toEqual([{programId:"P",enumId:"k",variantIndex:2}])}),it("deduplicates across instructions and stays deterministic",()=>{const t=new Uint8Array(32).fill(1),o=()=>r({programId:"P",discriminator:"01",accounts:[n("a")],descriptor:{valueFlowPorts:[i(s.TokenKind.DIRECT,{value:(0,e.constantValue)(t)})]}}),a=c([o(),o()]);expect(a.instructionInfos).toEqual([{programId:"P",discriminator:"01"}]),expect(a.tokenInfos).toEqual([u.DefaultBs58Encoder.encode(t)])}),it("Jupiter-like route: enum + two token infos + ALT entry",()=>{const t=new Uint8Array(32).fill(2),o=new Uint8Array(32).fill(3),a=()=>(0,p.Right)([{enumId:"swap",variantIndex:46}]),l=c([r({programId:"JUP",discriminator:"e517cb977ae3ad2a",accounts:[n("inputAta"),n("outputAta"),n(void 0,{altAddress:"ALT",entryIndex:7})],descriptor:{valueFlowPorts:[i(s.TokenKind.DIRECT,{accountIndex:0,value:(0,e.constantValue)(t)}),i(s.TokenKind.DIRECT,{accountIndex:1,value:(0,e.constantValue)(o)})]}})],a);expect(l.enumVariants).toEqual([{programId:"JUP",enumId:"swap",variantIndex:46}]),expect(l.tokenInfos).toEqual([u.DefaultBs58Encoder.encode(t),u.DefaultBs58Encoder.encode(o)]),expect(l.altResolutions).toEqual([])}),it("surfaces a malformed type pool as a typed Left",()=>{const t=r({programId:"P",accounts:[],descriptor:{idlDescriptor:{type_pool:[{index:0,kind:"NOT_A_KIND"}],root_type:0}}}),o=(0,d.buildRequirements)([t],{selectEnumVariants:A});expect(o.isLeft()).toBe(!0),o.ifLeft(a=>expect(a).toBeInstanceOf(m.RequirementsDecodeError))})});
|
|
2
2
|
//# sourceMappingURL=buildRequirements.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/app-binder/clear-sign/requirements/buildRequirements.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Either, Right } from \"purify-ts\";\n\nimport {\n type SelectedEnumVariant,\n type VariantCache,\n} from \"@internal/app-binder/clear-sign/idl-type-pool\";\nimport { DefaultBs58Encoder } from \"@internal/app-binder/services/bs58Encoder\";\n\nimport {\n accountPathValue,\n accountReset,\n bytes,\n constantValue,\n idlDescriptor,\n mintAssociation,\n tokenValue,\n trustedNameDisplayField,\n valueFlowPort,\n} from \"./__tests__/fixtures/calBuilders\";\nimport { buildRequirements } from \"./buildRequirements\";\nimport { type CalValue, type CalValueFlowPort } from \"./calTypes\";\nimport {\n type InstructionDescriptor,\n type MatchedInstruction,\n type RequirementAccount,\n} from \"./model\";\nimport { TokenKind } from \"./records\";\nimport { RequirementsDecodeError } from \"./RequirementsError\";\nimport { type EnumVariantSelector } from \"./rules\";\n\nconst EMPTY_CACHE: VariantCache = new Map();\nconst NO_ENUMS: EnumVariantSelector = () => Right([]);\n\nfunction account(\n address?: string,\n altRef?: RequirementAccount[\"altRef\"],\n): RequirementAccount {\n return { address, altRef };\n}\n\nfunction port(\n kind: TokenKind,\n opts: {\n accountIndex?: number;\n tokenAccountIndex?: number;\n value?: CalValue;\n } = {},\n): CalValueFlowPort {\n const kindName = ([\"DIRECT\", \"RESOLVE\", \"NULL\", \"NATIVE\"] as const)[kind]!;\n return valueFlowPort({\n accountIndex: opts.accountIndex ?? 0,\n tokenValue: tokenValue(kindName, {\n accountIndex: opts.tokenAccountIndex,\n value: opts.value,\n }),\n });\n}\n\nfunction matched(opts: {\n programId?: string;\n discriminator?: string;\n accounts: RequirementAccount[];\n data?: Uint8Array;\n descriptor?: Partial<InstructionDescriptor>;\n}): MatchedInstruction {\n return {\n instruction: {\n programId: opts.programId ?? \"Prog\",\n accounts: opts.accounts,\n data: opts.data ?? new Uint8Array(),\n },\n descriptor: {\n discriminator: opts.discriminator ?? \"00\",\n idlDescriptor: idlDescriptor({}),\n mintAssociations: [],\n valueFlowPorts: [],\n accountResets: [],\n displayFields: [],\n enumCache: EMPTY_CACHE,\n ...opts.descriptor,\n },\n };\n}\n\nfunction run(matchedList: MatchedInstruction[], selector = NO_ENUMS) {\n return buildRequirements(matchedList, {\n selectEnumVariants: selector,\n }).unsafeCoerce();\n}\n\ndescribe(\"buildRequirements\", () => {\n it(\"System transfer: only INSTRUCTION_INFO, native port pulls no token info\", () => {\n const result = run([\n matched({\n programId: \"11111111111111111111111111111111\",\n discriminator: \"02000000\",\n accounts: [account(\"from\"), account(\"to\")],\n descriptor: {\n valueFlowPorts: [port(TokenKind.NATIVE, { accountIndex: 0 })],\n },\n }),\n ]);\n expect(result.instructionInfos).toEqual([\n {\n programId: \"11111111111111111111111111111111\",\n discriminator: \"02000000\",\n },\n ]);\n expect(result.tokenInfos).toEqual([]);\n expect(result.tokenAccountStates).toEqual([]);\n });\n\n it(\"DIRECT port: a constant mint becomes a TOKEN_INFO\", () => {\n const mintBytes = new Uint8Array(32).fill(9);\n const result = run([\n matched({\n accounts: [account(\"a\")],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.DIRECT, { value: constantValue(mintBytes) }),\n ],\n },\n }),\n ]);\n expect(result.tokenInfos).toEqual([DefaultBs58Encoder.encode(mintBytes)]);\n });\n\n it(\"DIRECT port: an ACCOUNT_PATH mint resolves to the account address\", () => {\n const result = run([\n matched({\n accounts: [account(\"tokenAcct\"), account(\"theMint\")],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.DIRECT, { value: accountPathValue(1) }),\n ],\n },\n }),\n ]);\n expect(result.tokenInfos).toEqual([\"theMint\"]);\n });\n\n it(\"RESOLVE port not covered by MINT_ASSOC: sends TOKEN_ACCOUNT_STATE\", () => {\n const result = run([\n matched({\n accounts: [account(\"userAta\")],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.RESOLVE, { accountIndex: 0, tokenAccountIndex: 0 }),\n ],\n },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([\"userAta\"]);\n expect(result.tokenInfos).toEqual([]);\n });\n\n it(\"RESOLVE port with a single-account candidate list resolves the token account\", () => {\n const result = run([\n matched({\n accounts: [account(\"userAta\")],\n descriptor: {\n // The common single-account port is a 1-element `account_indices` list.\n valueFlowPorts: [\n { account_indices: [0], token_value: { kind: \"RESOLVE\" } },\n ],\n },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([\"userAta\"]);\n });\n\n it(\"RESOLVE port covered by MINT_ASSOC: emits TOKEN_INFO, skips account-state\", () => {\n const result = run([\n matched({\n accounts: [account(\"createdAta\"), account(\"theMint\")],\n descriptor: {\n mintAssociations: [mintAssociation(0, 1)],\n valueFlowPorts: [\n port(TokenKind.RESOLVE, { accountIndex: 0, tokenAccountIndex: 0 }),\n ],\n },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([]);\n expect(result.tokenInfos).toEqual([\"theMint\"]);\n });\n\n it(\"NULL port pulls no token requirements\", () => {\n const result = run([\n matched({\n accounts: [account(\"x\")],\n descriptor: { valueFlowPorts: [port(TokenKind.NULL)] },\n }),\n ]);\n expect(result.tokenInfos).toEqual([]);\n expect(result.tokenAccountStates).toEqual([]);\n });\n\n it(\"ACCOUNT_RESET with requirePreBalanceZero forces a TOKEN_ACCOUNT_STATE\", () => {\n const result = run([\n matched({\n accounts: [account(\"ata\")],\n descriptor: {\n accountResets: [\n accountReset({ accountIndex: 0, requirePreBalanceZero: true }),\n ],\n },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([\"ata\"]);\n });\n\n it(\"ACCOUNT_RESET without the flag adds nothing\", () => {\n const result = run([\n matched({\n accounts: [account(\"ata\")],\n descriptor: { accountResets: [accountReset({ accountIndex: 0 })] },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([]);\n });\n\n it(\"emits ALT_RESOLUTION only for accounts referenced by DISPLAY_FIELD ACCOUNT_PATH or MINT_ASSOC\", () => {\n const result = run([\n matched({\n accounts: [\n account(\"staticKey\"),\n account(undefined, { altAddress: \"ALT\", entryIndex: 3 }),\n account(undefined, { altAddress: \"ALT\", entryIndex: 9 }), // unreferenced\n ],\n descriptor: {\n // account[1] is referenced by a display field \u2192 emitted\n displayFields: [trustedNameDisplayField(accountPathValue(1))],\n // account[2] is not referenced by any display field or MINT_ASSOC \u2192 excluded\n },\n }),\n ]);\n expect(result.altResolutions).toEqual([\n { altAddress: \"ALT\", entryIndex: 3 },\n ]);\n });\n\n it(\"emits TRUSTED_NAME for PARAM_TRUSTED_NAME fields (account path + constant)\", () => {\n const constantAddr = new Uint8Array(32).fill(5);\n const result = run([\n matched({\n accounts: [account(\"ignored\"), account(\"namedAccount\")],\n descriptor: {\n displayFields: [\n trustedNameDisplayField(accountPathValue(1)),\n trustedNameDisplayField(constantValue(constantAddr)),\n ],\n },\n }),\n ]);\n expect(result.trustedNames).toEqual([\n \"namedAccount\",\n DefaultBs58Encoder.encode(constantAddr),\n ]);\n });\n\n it(\"decodes selected enum variants via the default decoder\", () => {\n // pool: [0] STRUCT{ref 1}, [1] ENUM disc=U8 enum_id=\"k\"; data selects variant 2.\n const typePool = [\n { index: 0, kind: \"STRUCT\", refs: [1] },\n {\n index: 1,\n kind: \"ENUM\",\n disc_kind: \"U8\",\n total_variants: 9,\n enum_id: \"k\",\n },\n ];\n const result = buildRequirements([\n matched({\n programId: \"P\",\n accounts: [],\n data: bytes(2),\n descriptor: { idlDescriptor: idlDescriptor({ typePool, rootType: 0 }) },\n }),\n ]).unsafeCoerce();\n expect(result.enumVariants).toEqual([\n { programId: \"P\", enumId: \"k\", variantIndex: 2 },\n ]);\n });\n\n it(\"deduplicates across instructions and stays deterministic\", () => {\n const usdc = new Uint8Array(32).fill(1);\n const direct = () =>\n matched({\n programId: \"P\",\n discriminator: \"01\",\n accounts: [account(\"a\")],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.DIRECT, { value: constantValue(usdc) }),\n ],\n },\n });\n const result = run([direct(), direct()]);\n expect(result.instructionInfos).toEqual([\n { programId: \"P\", discriminator: \"01\" },\n ]);\n expect(result.tokenInfos).toEqual([DefaultBs58Encoder.encode(usdc)]);\n });\n\n it(\"Jupiter-like route: enum + two token infos + ALT entry\", () => {\n const inMint = new Uint8Array(32).fill(2);\n const outMint = new Uint8Array(32).fill(3);\n const selector: EnumVariantSelector = () =>\n Right([{ enumId: \"swap\", variantIndex: 46 }] as SelectedEnumVariant[]);\n const result = run(\n [\n matched({\n programId: \"JUP\",\n discriminator: \"e517cb977ae3ad2a\",\n accounts: [\n account(\"inputAta\"),\n account(\"outputAta\"),\n account(undefined, { altAddress: \"ALT\", entryIndex: 7 }),\n ],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.DIRECT, {\n accountIndex: 0,\n value: constantValue(inMint),\n }),\n port(TokenKind.DIRECT, {\n accountIndex: 1,\n value: constantValue(outMint),\n }),\n ],\n },\n }),\n ],\n selector,\n );\n expect(result.enumVariants).toEqual([\n { programId: \"JUP\", enumId: \"swap\", variantIndex: 46 },\n ]);\n expect(result.tokenInfos).toEqual([\n DefaultBs58Encoder.encode(inMint),\n DefaultBs58Encoder.encode(outMint),\n ]);\n // account[2] is ALT-backed but not referenced by any display field or\n // MINT_ASSOC, so it is excluded from altResolutions (stays within the\n // device's 16-entry ALT cache limit).\n expect(result.altResolutions).toEqual([]);\n });\n\n it(\"surfaces a malformed type pool as a typed Left\", () => {\n const broken = matched({\n programId: \"P\",\n accounts: [],\n descriptor: {\n idlDescriptor: {\n type_pool: [{ index: 0, kind: \"NOT_A_KIND\" }],\n root_type: 0,\n },\n },\n });\n const result: Either<unknown, unknown> = buildRequirements([broken], {\n selectEnumVariants: NO_ENUMS,\n });\n expect(result.isLeft()).toBe(true);\n result.ifLeft((error) =>\n expect(error).toBeInstanceOf(RequirementsDecodeError),\n );\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAAmC,qBAMnCC,EAAmC,qDAEnCC,EAUO,4CACPC,EAAkC,+BAOlCC,EAA0B,qBAC1BC,EAAwC,+BAGxC,MAAMC,EAA4B,IAAI,IAChCC,EAAgC,OAAM,SAAM,CAAC,CAAC,EAEpD,SAASC,EACPC,EACAC,
|
|
6
|
-
"names": ["import_purify_ts", "import_bs58Encoder", "import_calBuilders", "import_buildRequirements", "import_records", "import_RequirementsError", "EMPTY_CACHE", "NO_ENUMS", "account", "address", "altRef", "port", "kind", "opts", "kindName", "matched", "run", "matchedList", "selector", "result", "mintBytes", "constantAddr", "typePool", "usdc", "direct", "inMint", "outMint", "broken", "error"]
|
|
4
|
+
"sourcesContent": ["import { type Either, Right } from \"purify-ts\";\n\nimport {\n type SelectedEnumVariant,\n type VariantCache,\n} from \"@internal/app-binder/clear-sign/idl-type-pool\";\nimport { DefaultBs58Encoder } from \"@internal/app-binder/services/bs58Encoder\";\n\nimport {\n accountPathValue,\n accountReset,\n bytes,\n constantValue,\n idlDescriptor,\n mintAssociation,\n tokenValue,\n trustedNameDisplayField,\n valueFlowPort,\n} from \"./__tests__/fixtures/calBuilders\";\nimport { buildRequirements } from \"./buildRequirements\";\nimport { type CalValue, type CalValueFlowPort } from \"./calTypes\";\nimport {\n type InstructionDescriptor,\n type MatchedInstruction,\n type RequirementAccount,\n} from \"./model\";\nimport { TokenKind } from \"./records\";\nimport { RequirementsDecodeError } from \"./RequirementsError\";\nimport { type EnumVariantSelector } from \"./rules\";\n\nconst EMPTY_CACHE: VariantCache = new Map();\nconst NO_ENUMS: EnumVariantSelector = () => Right([]);\n\nfunction account(\n address?: string,\n altRef?: RequirementAccount[\"altRef\"],\n isWritable = false,\n): RequirementAccount {\n return { address, altRef, isWritable };\n}\n\nfunction port(\n kind: TokenKind,\n opts: {\n accountIndex?: number;\n tokenAccountIndex?: number;\n value?: CalValue;\n } = {},\n): CalValueFlowPort {\n const kindName = ([\"DIRECT\", \"RESOLVE\", \"NULL\", \"NATIVE\"] as const)[kind]!;\n return valueFlowPort({\n accountIndex: opts.accountIndex ?? 0,\n tokenValue: tokenValue(kindName, {\n accountIndex: opts.tokenAccountIndex,\n value: opts.value,\n }),\n });\n}\n\nfunction matched(opts: {\n programId?: string;\n discriminator?: string;\n accounts: RequirementAccount[];\n data?: Uint8Array;\n descriptor?: Partial<InstructionDescriptor>;\n}): MatchedInstruction {\n return {\n instruction: {\n programId: opts.programId ?? \"Prog\",\n accounts: opts.accounts,\n data: opts.data ?? new Uint8Array(),\n },\n descriptor: {\n discriminator: opts.discriminator ?? \"00\",\n idlDescriptor: idlDescriptor({}),\n mintAssociations: [],\n valueFlowPorts: [],\n accountResets: [],\n displayFields: [],\n enumCache: EMPTY_CACHE,\n ...opts.descriptor,\n },\n };\n}\n\nfunction run(matchedList: MatchedInstruction[], selector = NO_ENUMS) {\n return buildRequirements(matchedList, {\n selectEnumVariants: selector,\n }).unsafeCoerce();\n}\n\ndescribe(\"buildRequirements\", () => {\n it(\"System transfer: only INSTRUCTION_INFO, native port pulls no token info\", () => {\n const result = run([\n matched({\n programId: \"11111111111111111111111111111111\",\n discriminator: \"02000000\",\n accounts: [account(\"from\"), account(\"to\")],\n descriptor: {\n valueFlowPorts: [port(TokenKind.NATIVE, { accountIndex: 0 })],\n },\n }),\n ]);\n expect(result.instructionInfos).toEqual([\n {\n programId: \"11111111111111111111111111111111\",\n discriminator: \"02000000\",\n },\n ]);\n expect(result.tokenInfos).toEqual([]);\n expect(result.tokenAccountStates).toEqual([]);\n });\n\n it(\"DIRECT port: a constant mint becomes a TOKEN_INFO\", () => {\n const mintBytes = new Uint8Array(32).fill(9);\n const result = run([\n matched({\n accounts: [account(\"a\")],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.DIRECT, { value: constantValue(mintBytes) }),\n ],\n },\n }),\n ]);\n expect(result.tokenInfos).toEqual([DefaultBs58Encoder.encode(mintBytes)]);\n });\n\n it(\"DIRECT port: an ACCOUNT_PATH mint resolves to the account address\", () => {\n const result = run([\n matched({\n accounts: [account(\"tokenAcct\"), account(\"theMint\")],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.DIRECT, { value: accountPathValue(1) }),\n ],\n },\n }),\n ]);\n expect(result.tokenInfos).toEqual([\"theMint\"]);\n });\n\n it(\"RESOLVE port not covered by MINT_ASSOC: sends TOKEN_ACCOUNT_STATE\", () => {\n const result = run([\n matched({\n accounts: [account(\"userAta\")],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.RESOLVE, { accountIndex: 0, tokenAccountIndex: 0 }),\n ],\n },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([\"userAta\"]);\n expect(result.tokenInfos).toEqual([]);\n });\n\n it(\"RESOLVE port with a single-account candidate list resolves the token account\", () => {\n const result = run([\n matched({\n accounts: [account(\"userAta\")],\n descriptor: {\n // The common single-account port is a 1-element `account_indices` list.\n valueFlowPorts: [\n { account_indices: [0], token_value: { kind: \"RESOLVE\" } },\n ],\n },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([\"userAta\"]);\n });\n\n it(\"RESOLVE port covered by MINT_ASSOC: emits TOKEN_INFO, skips account-state\", () => {\n const result = run([\n matched({\n accounts: [account(\"createdAta\"), account(\"theMint\")],\n descriptor: {\n mintAssociations: [mintAssociation(0, 1)],\n valueFlowPorts: [\n port(TokenKind.RESOLVE, { accountIndex: 0, tokenAccountIndex: 0 }),\n ],\n },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([]);\n expect(result.tokenInfos).toEqual([\"theMint\"]);\n });\n\n it(\"NULL port pulls no token requirements\", () => {\n const result = run([\n matched({\n accounts: [account(\"x\")],\n descriptor: { valueFlowPorts: [port(TokenKind.NULL)] },\n }),\n ]);\n expect(result.tokenInfos).toEqual([]);\n expect(result.tokenAccountStates).toEqual([]);\n });\n\n it(\"ACCOUNT_RESET with requirePreBalanceZero forces a TOKEN_ACCOUNT_STATE\", () => {\n const result = run([\n matched({\n accounts: [account(\"ata\")],\n descriptor: {\n accountResets: [\n accountReset({ accountIndex: 0, requirePreBalanceZero: true }),\n ],\n },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([\"ata\"]);\n });\n\n it(\"ACCOUNT_RESET without the flag adds nothing\", () => {\n const result = run([\n matched({\n accounts: [account(\"ata\")],\n descriptor: { accountResets: [accountReset({ accountIndex: 0 })] },\n }),\n ]);\n expect(result.tokenAccountStates).toEqual([]);\n });\n\n it(\"emits ALT_RESOLUTION only for accounts referenced by DISPLAY_FIELD ACCOUNT_PATH or MINT_ASSOC\", () => {\n const result = run([\n matched({\n accounts: [\n account(\"staticKey\"),\n account(undefined, { altAddress: \"ALT\", entryIndex: 3 }),\n account(undefined, { altAddress: \"ALT\", entryIndex: 9 }), // unreferenced\n ],\n descriptor: {\n // account[1] is referenced by a display field \u2192 emitted\n displayFields: [trustedNameDisplayField(accountPathValue(1))],\n // account[2] is not referenced by any display field or MINT_ASSOC \u2192 excluded\n },\n }),\n ]);\n expect(result.altResolutions).toEqual([\n { altAddress: \"ALT\", entryIndex: 3 },\n ]);\n });\n\n it(\"routes a read-only ALT mint from MINT_ASSOCIATION to mintAltRefs\", () => {\n const result = run([\n matched({\n accounts: [\n account(undefined, { altAddress: \"ALT\", entryIndex: 4 }), // token account\n account(undefined, { altAddress: \"ALT\", entryIndex: 6 }), // mint, read-only\n ],\n descriptor: { mintAssociations: [mintAssociation(0, 1)] },\n }),\n ]);\n // The mint stays out of altResolutions: the provide phase holds it and\n // conditionally streams TOKEN_INFO after the 0x6d10 signal.\n expect(result.altResolutions).toEqual([\n { altAddress: \"ALT\", entryIndex: 4 },\n ]);\n expect(result.mintAltRefs).toEqual([{ altAddress: \"ALT\", entryIndex: 6 }]);\n });\n\n it(\"emits ALT_RESOLUTION for a writable ALT account named by no descriptor field\", () => {\n const result = run([\n matched({\n accounts: [\n account(\"staticKey\"),\n account(undefined, { altAddress: \"ALT\", entryIndex: 3 }, true),\n account(undefined, { altAddress: \"ALT\", entryIndex: 9 }), // read-only\n ],\n }),\n ]);\n expect(result.altResolutions).toEqual([\n { altAddress: \"ALT\", entryIndex: 3 },\n ]);\n });\n\n it(\"emits TRUSTED_NAME for PARAM_TRUSTED_NAME fields (account path + constant)\", () => {\n const constantAddr = new Uint8Array(32).fill(5);\n const result = run([\n matched({\n accounts: [account(\"ignored\"), account(\"namedAccount\")],\n descriptor: {\n displayFields: [\n trustedNameDisplayField(accountPathValue(1)),\n trustedNameDisplayField(constantValue(constantAddr)),\n ],\n },\n }),\n ]);\n expect(result.trustedNames).toEqual([\n \"namedAccount\",\n DefaultBs58Encoder.encode(constantAddr),\n ]);\n });\n\n it(\"decodes selected enum variants via the default decoder\", () => {\n // pool: [0] STRUCT{ref 1}, [1] ENUM disc=U8 enum_id=\"k\"; data selects variant 2.\n const typePool = [\n { index: 0, kind: \"STRUCT\", refs: [1] },\n {\n index: 1,\n kind: \"ENUM\",\n disc_kind: \"U8\",\n total_variants: 9,\n enum_id: \"k\",\n },\n ];\n const result = buildRequirements([\n matched({\n programId: \"P\",\n accounts: [],\n data: bytes(2),\n descriptor: { idlDescriptor: idlDescriptor({ typePool, rootType: 0 }) },\n }),\n ]).unsafeCoerce();\n expect(result.enumVariants).toEqual([\n { programId: \"P\", enumId: \"k\", variantIndex: 2 },\n ]);\n });\n\n it(\"deduplicates across instructions and stays deterministic\", () => {\n const usdc = new Uint8Array(32).fill(1);\n const direct = () =>\n matched({\n programId: \"P\",\n discriminator: \"01\",\n accounts: [account(\"a\")],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.DIRECT, { value: constantValue(usdc) }),\n ],\n },\n });\n const result = run([direct(), direct()]);\n expect(result.instructionInfos).toEqual([\n { programId: \"P\", discriminator: \"01\" },\n ]);\n expect(result.tokenInfos).toEqual([DefaultBs58Encoder.encode(usdc)]);\n });\n\n it(\"Jupiter-like route: enum + two token infos + ALT entry\", () => {\n const inMint = new Uint8Array(32).fill(2);\n const outMint = new Uint8Array(32).fill(3);\n const selector: EnumVariantSelector = () =>\n Right([{ enumId: \"swap\", variantIndex: 46 }] as SelectedEnumVariant[]);\n const result = run(\n [\n matched({\n programId: \"JUP\",\n discriminator: \"e517cb977ae3ad2a\",\n accounts: [\n account(\"inputAta\"),\n account(\"outputAta\"),\n account(undefined, { altAddress: \"ALT\", entryIndex: 7 }),\n ],\n descriptor: {\n valueFlowPorts: [\n port(TokenKind.DIRECT, {\n accountIndex: 0,\n value: constantValue(inMint),\n }),\n port(TokenKind.DIRECT, {\n accountIndex: 1,\n value: constantValue(outMint),\n }),\n ],\n },\n }),\n ],\n selector,\n );\n expect(result.enumVariants).toEqual([\n { programId: \"JUP\", enumId: \"swap\", variantIndex: 46 },\n ]);\n expect(result.tokenInfos).toEqual([\n DefaultBs58Encoder.encode(inMint),\n DefaultBs58Encoder.encode(outMint),\n ]);\n // account[2] is ALT-backed but read-only and named by nothing, so it is\n // excluded from altResolutions (the deliberate exclusion of the rule).\n expect(result.altResolutions).toEqual([]);\n });\n\n it(\"surfaces a malformed type pool as a typed Left\", () => {\n const broken = matched({\n programId: \"P\",\n accounts: [],\n descriptor: {\n idlDescriptor: {\n type_pool: [{ index: 0, kind: \"NOT_A_KIND\" }],\n root_type: 0,\n },\n },\n });\n const result: Either<unknown, unknown> = buildRequirements([broken], {\n selectEnumVariants: NO_ENUMS,\n });\n expect(result.isLeft()).toBe(true);\n result.ifLeft((error) =>\n expect(error).toBeInstanceOf(RequirementsDecodeError),\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_purify_ts", "import_bs58Encoder", "import_calBuilders", "import_buildRequirements", "import_records", "import_RequirementsError", "EMPTY_CACHE", "NO_ENUMS", "account", "address", "altRef", "isWritable", "port", "kind", "opts", "kindName", "matched", "run", "matchedList", "selector", "result", "mintBytes", "constantAddr", "typePool", "usdc", "direct", "inMint", "outMint", "broken", "error"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var
|
|
1
|
+
"use strict";var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var l=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of a(t))!c.call(e,r)&&r!==o&&i(e,r,{get:()=>t[r],enumerable:!(n=s(t,r))||n.enumerable});return e};var p=e=>l(i({},"__esModule",{value:!0}),e);var u={};module.exports=p(u);
|
|
2
2
|
//# sourceMappingURL=model.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/app-binder/clear-sign/requirements/model.ts"],
|
|
4
|
-
"sourcesContent": ["import { type VariantCache } from \"@internal/app-binder/clear-sign/idl-type-pool\";\n\nimport {\n type CalAccountReset,\n type CalDisplayField,\n type CalIdlDescriptor,\n type CalMintAssociation,\n type CalValueFlowPort,\n} from \"./calTypes\";\n\n/** A `(altAddress, entryIndex)` reference into an Address Lookup Table. */\nexport type AltEntryKey = { altAddress: string; entryIndex: number };\n\n/**\n * One account slot of an instruction. `address` is the resolved base58 key;\n * it is `undefined` for ALT-supplied slots that are not resolved at\n * requirement-build time (DMK does not talk to RPC) \u2014 those still carry an\n * `altRef` so an `ALT_RESOLUTION` requirement can be emitted.\n */\nexport type RequirementAccount = {\n address?: string;\n altRef?: AltEntryKey;\n};\n\nexport type RequirementInstruction = {\n programId: string;\n accounts: RequirementAccount[];\n data: Uint8Array;\n};\n\n/**\n * The matched CAL descriptor for one instruction, as decoded JSON. These fields\n * drive host-side requirement building only (see {@link parseInstructionDescriptor}).\n */\nexport type InstructionDescriptor = {\n discriminator: string;\n idlDescriptor: CalIdlDescriptor;\n mintAssociations: CalMintAssociation[];\n valueFlowPorts: CalValueFlowPort[];\n accountResets: CalAccountReset[];\n displayFields: CalDisplayField[];\n enumCache: VariantCache;\n};\n\n/** A transaction instruction paired with its matched CAL descriptor. */\nexport type MatchedInstruction = {\n instruction: RequirementInstruction;\n descriptor: InstructionDescriptor;\n};\n\n// ---- output ---------------------------------------------------------------\n\nexport type ProgramDiscriminator = { programId: string; discriminator: string };\n\nexport type EnumVariantKey = {\n programId: string;\n enumId: string;\n variantIndex: number;\n};\n\n/** The deduplicated set of descriptors the device needs, per descriptor type. */\nexport type DescriptorRequirements = {\n instructionInfos: ProgramDiscriminator[];\n enumVariants: EnumVariantKey[];\n tokenInfos: string[];\n tokenAccountStates: string[];\n altResolutions: AltEntryKey[];\n trustedNames: string[];\n /**\n * PARAM_TOKEN_AMOUNT.TOKEN refs (ACCOUNT_PATH, non-ALT, not in mintBindings).\n * Try TOKEN_INFO first at fetch time; fall back to TOKEN_ACCOUNT_STATE if it fails.\n */\n tokenAmountRefs: string[];\n /**\n * PARAM_TOKEN_AMOUNT.TOKEN refs backed by ALT entries (not resolvable at build time).\n * After ALT_RESOLUTION is fetched, resolve the address and apply the same\n * TOKEN_INFO-first / TOKEN_ACCOUNT_STATE-fallback logic.\n */\n tokenAmountAltRefs: AltEntryKey[];\n /**\n * ALT-backed MINT entries from MINT_ASSOCIATIONS (accounts at a `mint_index`\n * that have no resolved address). The device may signal these via status\n * 0x6d10 after receiving ALT_RESOLUTION; TOKEN_INFO is then streamed best-effort.\n * They are excluded from `altResolutions` and handled with\n * hold-and-conditionally-stream logic in the provide phase.\n */\n mintAltRefs: AltEntryKey[];\n};\n"],
|
|
4
|
+
"sourcesContent": ["import { type VariantCache } from \"@internal/app-binder/clear-sign/idl-type-pool\";\n\nimport {\n type CalAccountReset,\n type CalDisplayField,\n type CalIdlDescriptor,\n type CalMintAssociation,\n type CalValueFlowPort,\n} from \"./calTypes\";\n\n/** A `(altAddress, entryIndex)` reference into an Address Lookup Table. */\nexport type AltEntryKey = { altAddress: string; entryIndex: number };\n\n/**\n * One account slot of an instruction. `address` is the resolved base58 key;\n * it is `undefined` for ALT-supplied slots that are not resolved at\n * requirement-build time (DMK does not talk to RPC) \u2014 those still carry an\n * `altRef` so an `ALT_RESOLUTION` requirement can be emitted.\n *\n * `isWritable` mirrors the slot's writability as compiled in the message (its\n * header plus the ALT writable/read-only index lists). The device needs every\n * writable slot resolved to report its writable-account list complete, so the\n * ALT rule reads this flag; no RPC call is involved.\n */\nexport type RequirementAccount = {\n address?: string;\n altRef?: AltEntryKey;\n isWritable: boolean;\n};\n\nexport type RequirementInstruction = {\n programId: string;\n accounts: RequirementAccount[];\n data: Uint8Array;\n};\n\n/**\n * The matched CAL descriptor for one instruction, as decoded JSON. These fields\n * drive host-side requirement building only (see {@link parseInstructionDescriptor}).\n */\nexport type InstructionDescriptor = {\n discriminator: string;\n idlDescriptor: CalIdlDescriptor;\n mintAssociations: CalMintAssociation[];\n valueFlowPorts: CalValueFlowPort[];\n accountResets: CalAccountReset[];\n displayFields: CalDisplayField[];\n enumCache: VariantCache;\n};\n\n/** A transaction instruction paired with its matched CAL descriptor. */\nexport type MatchedInstruction = {\n instruction: RequirementInstruction;\n descriptor: InstructionDescriptor;\n};\n\n// ---- output ---------------------------------------------------------------\n\nexport type ProgramDiscriminator = { programId: string; discriminator: string };\n\nexport type EnumVariantKey = {\n programId: string;\n enumId: string;\n variantIndex: number;\n};\n\n/** The deduplicated set of descriptors the device needs, per descriptor type. */\nexport type DescriptorRequirements = {\n instructionInfos: ProgramDiscriminator[];\n enumVariants: EnumVariantKey[];\n tokenInfos: string[];\n tokenAccountStates: string[];\n altResolutions: AltEntryKey[];\n trustedNames: string[];\n /**\n * PARAM_TOKEN_AMOUNT.TOKEN refs (ACCOUNT_PATH, non-ALT, not in mintBindings).\n * Try TOKEN_INFO first at fetch time; fall back to TOKEN_ACCOUNT_STATE if it fails.\n */\n tokenAmountRefs: string[];\n /**\n * PARAM_TOKEN_AMOUNT.TOKEN refs backed by ALT entries (not resolvable at build time).\n * After ALT_RESOLUTION is fetched, resolve the address and apply the same\n * TOKEN_INFO-first / TOKEN_ACCOUNT_STATE-fallback logic.\n */\n tokenAmountAltRefs: AltEntryKey[];\n /**\n * ALT-backed MINT entries from MINT_ASSOCIATIONS (accounts at a `mint_index`\n * that have no resolved address). The device may signal these via status\n * 0x6d10 after receiving ALT_RESOLUTION; TOKEN_INFO is then streamed best-effort.\n * They are excluded from `altResolutions` and handled with\n * hold-and-conditionally-stream logic in the provide phase.\n */\n mintAltRefs: AltEntryKey[];\n};\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["model_exports", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var f=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var p=(t,o)=>{for(var i in o)f(t,i,{get:o[i],enumerable:!0})},A=(t,o,i,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let u of l(o))!m.call(t,u)&&u!==i&&f(t,u,{get:()=>o[u],enumerable:!(r=s(o,u))||r.enumerable});return t};var R=t=>A(f({},"__esModule",{value:!0}),t);var I={};p(I,{applyAltResolutionRule:()=>y});module.exports=R(I);var c=require("../../../../app-binder/clear-sign/requirements/records"),a=require("../../../../app-binder/clear-sign/requirements/valueResolution");function y(t,o,i){const r=e=>{if(e===void 0)return;const n=o.accounts[e]?.altRef;n!==void 0&&i.addAltResolution(n.altAddress,n.entryIndex)},u=e=>{e?.source===c.ValueSource.ACCOUNT_PATH&&e.payload.length!==0&&r(e.payload[0])};o.accounts.forEach((e,n)=>{e.isWritable&&r(n)});for(const e of t.valueFlowPorts){for(const d of e.accountIndices)r(d);const{tokenValue:n}=e;n!==void 0&&(n.kind===c.TokenKind.RESOLVE&&r(n.accountIndex??(0,a.resolvePortAccountIndex)(e,o)),u(n.value))}for(const e of t.displayFields)u(e.value),e.paramType===c.PARAM_TYPE_TOKEN_AMOUNT&&u(e.token);for(const{accountIndex:e}of t.info.mintAssociations)r(e);for(const{accountIndex:e}of t.accountResets)r(e)}0&&(module.exports={applyAltResolutionRule});
|
|
2
2
|
//# sourceMappingURL=altResolutionRule.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../src/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.ts"],
|
|
4
|
-
"sourcesContent": ["import { type RequirementInstruction } from \"@internal/app-binder/clear-sign/requirements/model\";\nimport {\n type ParsedInstruction,\n ValueSource,\n} from \"@internal/app-binder/clear-sign/requirements/records\";\nimport { type RequirementAccumulator } from \"@internal/app-binder/clear-sign/requirements/RequirementAccumulator\";\n\n/**\n * Emit `ALT_RESOLUTION` requirements for
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,
|
|
6
|
-
"names": ["altResolutionRule_exports", "__export", "applyAltResolutionRule", "__toCommonJS", "import_records", "parsed", "instruction", "accumulator", "
|
|
4
|
+
"sourcesContent": ["import { type RequirementInstruction } from \"@internal/app-binder/clear-sign/requirements/model\";\nimport {\n PARAM_TYPE_TOKEN_AMOUNT,\n type ParsedInstruction,\n type ParsedValue,\n TokenKind,\n ValueSource,\n} from \"@internal/app-binder/clear-sign/requirements/records\";\nimport { type RequirementAccumulator } from \"@internal/app-binder/clear-sign/requirements/RequirementAccumulator\";\nimport { resolvePortAccountIndex } from \"@internal/app-binder/clear-sign/requirements/valueResolution\";\n\n/**\n * Emit `ALT_RESOLUTION` requirements for the ALT-backed accounts the device's\n * finalize walk dereferences through `pubkey_from_account_index`. That helper\n * returns NULL for an ALT slot with no attested resolution, and the device then\n * either marks a result incomplete or refuses to sign. The covered categories:\n *\n * 1. Every **writable** account of the instruction's raw account list. This is\n * what lets `collect_writable_accounts` report `complete`, without which the\n * merge scan stops at the instruction and two mergeable screens stay apart.\n * 2. Every `VALUE_FLOW_PORT` account candidate \u2014 the whole candidate array, not\n * just the first: the device walks them in order and refuses on the first\n * in-range candidate it cannot resolve.\n * 3. Every port token reference: the `RESOLVE` token account (with the port's\n * own account as its fallback) and any `ACCOUNT_PATH` token value.\n * 4. Every `DISPLAY_FIELD` `ACCOUNT_PATH` address \u2014 read for rendering,\n * trusted-name lookup, etc.\n * 5. Every `PARAM_TOKEN_AMOUNT` token reference sourced from an `ACCOUNT_PATH`.\n * 6. Every `MINT_ASSOCIATION` token-account position, seeded into the\n * mint-binding map. Mint positions are handled separately as `mintAltRefs`\n * so they can be paired with a TOKEN_INFO attempt for display.\n * 7. Every `ACCOUNT_RESET` account index.\n *\n * Deliberately excluded, to keep device heap use down: read-only ALT accounts\n * that no port, token reference, display field, association or reset names. The\n * only site that reads them is `collect_all_accounts`, and a slot missing there\n * only weakens `condition_account_used_elsewhere` \u2014 it cannot cost merge\n * compaction, it can only make the device show more screens, never fewer and\n * never a wrong value.\n */\nexport function applyAltResolutionRule(\n parsed: ParsedInstruction,\n instruction: RequirementInstruction,\n accumulator: RequirementAccumulator,\n): void {\n // Requests a resolution for one account slot; out-of-range slots and\n // statically-resolved ones are no-ops. The accumulator dedupes on\n // `(altAddress, entryIndex)`, so overlapping categories cost nothing.\n const requestAccount = (accountIndex: number | undefined): void => {\n if (accountIndex === undefined) return;\n const altRef = instruction.accounts[accountIndex]?.altRef;\n if (altRef === undefined) return;\n accumulator.addAltResolution(altRef.altAddress, altRef.entryIndex);\n };\n\n const requestValue = (value: ParsedValue | undefined): void => {\n if (value?.source !== ValueSource.ACCOUNT_PATH) return;\n if (value.payload.length === 0) return;\n requestAccount(value.payload[0]!);\n };\n\n // 1. Writable accounts of the raw account list.\n instruction.accounts.forEach((account, index) => {\n if (account.isWritable) requestAccount(index);\n });\n\n // 2 + 3. Port account candidates and their token references.\n for (const port of parsed.valueFlowPorts) {\n for (const candidate of port.accountIndices) requestAccount(candidate);\n\n const { tokenValue } = port;\n if (tokenValue === undefined) continue;\n if (tokenValue.kind === TokenKind.RESOLVE) {\n requestAccount(\n tokenValue.accountIndex ?? resolvePortAccountIndex(port, instruction),\n );\n }\n requestValue(tokenValue.value);\n }\n\n // 4 + 5. DISPLAY_FIELD addresses and PARAM_TOKEN_AMOUNT token references.\n for (const field of parsed.displayFields) {\n requestValue(field.value);\n if (field.paramType === PARAM_TYPE_TOKEN_AMOUNT) requestValue(field.token);\n }\n\n // 6. MINT_ASSOCIATION token-account positions. Mint positions (mintIndex) are\n // emitted by the separate mintAltRef pass so the provide phase can also\n // attempt TOKEN_INFO.\n for (const { accountIndex } of parsed.info.mintAssociations) {\n requestAccount(accountIndex);\n }\n\n // 7. ACCOUNT_RESET targets.\n for (const { accountIndex } of parsed.accountResets) {\n requestAccount(accountIndex);\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAMO,gEAEPC,EAAwC,wEA+BjC,SAASH,EACdI,EACAC,EACAC,EACM,CAIN,MAAMC,EAAkBC,GAA2C,CACjE,GAAIA,IAAiB,OAAW,OAChC,MAAMC,EAASJ,EAAY,SAASG,CAAY,GAAG,OAC/CC,IAAW,QACfH,EAAY,iBAAiBG,EAAO,WAAYA,EAAO,UAAU,CACnE,EAEMC,EAAgBC,GAAyC,CACzDA,GAAO,SAAW,cAAY,cAC9BA,EAAM,QAAQ,SAAW,GAC7BJ,EAAeI,EAAM,QAAQ,CAAC,CAAE,CAClC,EAGAN,EAAY,SAAS,QAAQ,CAACO,EAASC,IAAU,CAC3CD,EAAQ,YAAYL,EAAeM,CAAK,CAC9C,CAAC,EAGD,UAAWC,KAAQV,EAAO,eAAgB,CACxC,UAAWW,KAAaD,EAAK,eAAgBP,EAAeQ,CAAS,EAErE,KAAM,CAAE,WAAAC,CAAW,EAAIF,EACnBE,IAAe,SACfA,EAAW,OAAS,YAAU,SAChCT,EACES,EAAW,iBAAgB,2BAAwBF,EAAMT,CAAW,CACtE,EAEFK,EAAaM,EAAW,KAAK,EAC/B,CAGA,UAAWC,KAASb,EAAO,cACzBM,EAAaO,EAAM,KAAK,EACpBA,EAAM,YAAc,2BAAyBP,EAAaO,EAAM,KAAK,EAM3E,SAAW,CAAE,aAAAT,CAAa,IAAKJ,EAAO,KAAK,iBACzCG,EAAeC,CAAY,EAI7B,SAAW,CAAE,aAAAA,CAAa,IAAKJ,EAAO,cACpCG,EAAeC,CAAY,CAE/B",
|
|
6
|
+
"names": ["altResolutionRule_exports", "__export", "applyAltResolutionRule", "__toCommonJS", "import_records", "import_valueResolution", "parsed", "instruction", "accumulator", "requestAccount", "accountIndex", "altRef", "requestValue", "value", "account", "index", "port", "candidate", "tokenValue", "field"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var n=require("../../../../app-binder/clear-sign/requirements/records"),d=require("../../../../app-binder/clear-sign/requirements/RequirementAccumulator"),l=require("./altResolutionRule");function r(){return{info:{typePool:[],rootType:0,mintAssociations:[]},valueFlowPorts:[],accountResets:[],displayFields:[]}}function o(t,e=!1){return{altRef:{altAddress:"ALT",entryIndex:t},isWritable:e}}function c(t,e=!1){return{address:t,isWritable:e}}function i(t){return{source:n.ValueSource.ACCOUNT_PATH,payload:Uint8Array.from([t])}}function s(t,e="P"){return{programId:e,accounts:t,data:new Uint8Array}}function a(t,e){const u=new d.RequirementAccumulator;return(0,l.applyAltResolutionRule)(t,e,u),u.build().altResolutions}describe("applyAltResolutionRule",()=>{it("emits ALT_RESOLUTION for a writable ALT account named by nothing",()=>{const t=s([c("static",!0),o(3,!0),o(9)]);expect(a(r(),t)).toEqual([{altAddress:"ALT",entryIndex:3}])}),it("emits nothing for a read-only ALT account named by nothing",()=>{const t=s([o(1),o(2)]);expect(a(r(),t)).toEqual([])}),it("emits ALT_RESOLUTION for ALT-backed DISPLAY_FIELD ACCOUNT_PATH accounts",()=>{const t={...r(),displayFields:[{value:i(1)},{value:i(0)}]},e=s([c("static"),o(3)]);expect(a(t,e)).toEqual([{altAddress:"ALT",entryIndex:3}])}),it("emits ALT_RESOLUTION for every ALT-backed candidate of a port",()=>{const t={...r(),valueFlowPorts:[{accountIndices:[0,1,2],optionalAccountStrategy:n.OptionalAccountStrategy.PROGRAM_ID}]},e=s([o(1),c("static"),o(2)]);expect(a(t,e)).toEqual([{altAddress:"ALT",entryIndex:1},{altAddress:"ALT",entryIndex:2}])}),it("emits ALT_RESOLUTION for a RESOLVE port's token account",()=>{const t={...r(),valueFlowPorts:[{accountIndices:[0],optionalAccountStrategy:n.OptionalAccountStrategy.PROGRAM_ID,tokenValue:{kind:n.TokenKind.RESOLVE,accountIndex:2}}]},e=s([c("port"),c("other"),o(6)]);expect(a(t,e)).toEqual([{altAddress:"ALT",entryIndex:6}])}),it("falls back to the port's own account when a RESOLVE port carries no token account",()=>{const t={...r(),valueFlowPorts:[{accountIndices:[1],optionalAccountStrategy:n.OptionalAccountStrategy.PROGRAM_ID,tokenValue:{kind:n.TokenKind.RESOLVE}}]},e=s([c("static"),o(4)]);expect(a(t,e)).toEqual([{altAddress:"ALT",entryIndex:4}])}),it("emits ALT_RESOLUTION for an ACCOUNT_PATH port token value",()=>{const t={...r(),valueFlowPorts:[{accountIndices:[0],optionalAccountStrategy:n.OptionalAccountStrategy.PROGRAM_ID,tokenValue:{kind:n.TokenKind.DIRECT,value:i(1)}}]},e=s([c("port"),o(8)]);expect(a(t,e)).toEqual([{altAddress:"ALT",entryIndex:8}])}),it("emits ALT_RESOLUTION for a PARAM_TOKEN_AMOUNT ACCOUNT_PATH token reference",()=>{const t={...r(),displayFields:[{paramType:n.PARAM_TYPE_TOKEN_AMOUNT,token:i(1)}]},e=s([c("static"),o(11)]);expect(a(t,e)).toEqual([{altAddress:"ALT",entryIndex:11}])}),it("emits ALT_RESOLUTION for ALT-backed MINT_ASSOCIATION token-account positions",()=>{const t={...r(),info:{typePool:[],rootType:0,mintAssociations:[{accountIndex:0,mintIndex:1}]}},e=s([o(5),o(7)]);expect(a(t,e)).toEqual([{altAddress:"ALT",entryIndex:5}])}),it("emits ALT_RESOLUTION for an ALT-backed ACCOUNT_RESET target",()=>{const t={...r(),accountResets:[{accountIndex:1,requirePreBalanceZero:!1}]},e=s([c("static"),o(12)]);expect(a(t,e)).toEqual([{altAddress:"ALT",entryIndex:12}])}),it("emits one requirement for an ALT entry reached through several categories",()=>{const t={...r(),valueFlowPorts:[{accountIndices:[0],optionalAccountStrategy:n.OptionalAccountStrategy.PROGRAM_ID,tokenValue:{kind:n.TokenKind.RESOLVE,accountIndex:0}}],accountResets:[{accountIndex:0,requirePreBalanceZero:!1}],displayFields:[{value:i(0)}]},e=s([o(2,!0)]);expect(a(t,e)).toEqual([{altAddress:"ALT",entryIndex:2}])}),it("emits nothing when no account is ALT-supplied",()=>{const t={...r(),displayFields:[{value:i(0)}]};expect(a(t,s([c("static",!0)]))).toEqual([])}),it("ignores out-of-range references",()=>{const t={...r(),valueFlowPorts:[{accountIndices:[],optionalAccountStrategy:n.OptionalAccountStrategy.PROGRAM_ID,tokenValue:{kind:n.TokenKind.RESOLVE}}],accountResets:[{accountIndex:9,requirePreBalanceZero:!1}],displayFields:[{value:i(9)}]};expect(a(t,s([o(1)]))).toEqual([])})});
|
|
2
2
|
//# sourceMappingURL=altResolutionRule.test.js.map
|
package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../src/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type RequirementInstruction
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["import_records", "import_RequirementAccumulator", "import_altResolutionRule", "emptyParsed", "run", "parsed", "instruction", "accumulator"]
|
|
4
|
+
"sourcesContent": ["import {\n type RequirementAccount,\n type RequirementInstruction,\n} from \"@internal/app-binder/clear-sign/requirements/model\";\nimport {\n OptionalAccountStrategy,\n PARAM_TYPE_TOKEN_AMOUNT,\n type ParsedInstruction,\n TokenKind,\n ValueSource,\n} from \"@internal/app-binder/clear-sign/requirements/records\";\nimport { RequirementAccumulator } from \"@internal/app-binder/clear-sign/requirements/RequirementAccumulator\";\n\nimport { applyAltResolutionRule } from \"./altResolutionRule\";\n\nfunction emptyParsed(): ParsedInstruction {\n return {\n info: { typePool: [], rootType: 0, mintAssociations: [] },\n valueFlowPorts: [],\n accountResets: [],\n displayFields: [],\n };\n}\n\n/** An ALT-backed slot at `entryIndex` of the \"ALT\" table. */\nfunction alt(entryIndex: number, isWritable = false): RequirementAccount {\n return { altRef: { altAddress: \"ALT\", entryIndex }, isWritable };\n}\n\n/** A statically resolved slot. */\nfunction addr(address: string, isWritable = false): RequirementAccount {\n return { address, isWritable };\n}\n\nfunction accountPath(index: number) {\n return {\n source: ValueSource.ACCOUNT_PATH,\n payload: Uint8Array.from([index]),\n };\n}\n\nfunction instructionOf(\n accounts: RequirementAccount[],\n programId = \"P\",\n): RequirementInstruction {\n return { programId, accounts, data: new Uint8Array() };\n}\n\nfunction run(\n parsed: ParsedInstruction,\n instruction: RequirementInstruction,\n): ReturnType<RequirementAccumulator[\"build\"]>[\"altResolutions\"] {\n const accumulator = new RequirementAccumulator();\n applyAltResolutionRule(parsed, instruction, accumulator);\n return accumulator.build().altResolutions;\n}\n\ndescribe(\"applyAltResolutionRule\", () => {\n it(\"emits ALT_RESOLUTION for a writable ALT account named by nothing\", () => {\n // Regression: the device's writable-account walk dereferences every\n // writable slot; an unresolved one marks the list incomplete and stops the\n // merge scan.\n const instruction = instructionOf([\n addr(\"static\", true),\n alt(3, true),\n alt(9),\n ]);\n expect(run(emptyParsed(), instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 3 },\n ]);\n });\n\n it(\"emits nothing for a read-only ALT account named by nothing\", () => {\n const instruction = instructionOf([alt(1), alt(2)]);\n expect(run(emptyParsed(), instruction)).toEqual([]);\n });\n\n it(\"emits ALT_RESOLUTION for ALT-backed DISPLAY_FIELD ACCOUNT_PATH accounts\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n displayFields: [\n // ACCOUNT_PATH field \u2014 account at index 1 is ALT-backed\n { value: accountPath(1) },\n // Another ACCOUNT_PATH field \u2014 account at index 0 is static\n { value: accountPath(0) },\n ],\n };\n const instruction = instructionOf([addr(\"static\"), alt(3)]);\n expect(run(parsed, instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 3 },\n ]);\n });\n\n it(\"emits ALT_RESOLUTION for every ALT-backed candidate of a port\", () => {\n // The device walks the candidate array in order and refuses on the first\n // in-range candidate it cannot resolve, so all of them are requested.\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n valueFlowPorts: [\n {\n accountIndices: [0, 1, 2],\n optionalAccountStrategy: OptionalAccountStrategy.PROGRAM_ID,\n },\n ],\n };\n const instruction = instructionOf([alt(1), addr(\"static\"), alt(2)]);\n expect(run(parsed, instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 1 },\n { altAddress: \"ALT\", entryIndex: 2 },\n ]);\n });\n\n it(\"emits ALT_RESOLUTION for a RESOLVE port's token account\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n valueFlowPorts: [\n {\n accountIndices: [0],\n optionalAccountStrategy: OptionalAccountStrategy.PROGRAM_ID,\n tokenValue: { kind: TokenKind.RESOLVE, accountIndex: 2 },\n },\n ],\n };\n const instruction = instructionOf([addr(\"port\"), addr(\"other\"), alt(6)]);\n expect(run(parsed, instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 6 },\n ]);\n });\n\n it(\"falls back to the port's own account when a RESOLVE port carries no token account\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n valueFlowPorts: [\n {\n accountIndices: [1],\n optionalAccountStrategy: OptionalAccountStrategy.PROGRAM_ID,\n tokenValue: { kind: TokenKind.RESOLVE },\n },\n ],\n };\n const instruction = instructionOf([addr(\"static\"), alt(4)]);\n expect(run(parsed, instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 4 },\n ]);\n });\n\n it(\"emits ALT_RESOLUTION for an ACCOUNT_PATH port token value\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n valueFlowPorts: [\n {\n accountIndices: [0],\n optionalAccountStrategy: OptionalAccountStrategy.PROGRAM_ID,\n tokenValue: { kind: TokenKind.DIRECT, value: accountPath(1) },\n },\n ],\n };\n const instruction = instructionOf([addr(\"port\"), alt(8)]);\n expect(run(parsed, instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 8 },\n ]);\n });\n\n it(\"emits ALT_RESOLUTION for a PARAM_TOKEN_AMOUNT ACCOUNT_PATH token reference\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n displayFields: [\n { paramType: PARAM_TYPE_TOKEN_AMOUNT, token: accountPath(1) },\n ],\n };\n const instruction = instructionOf([addr(\"static\"), alt(11)]);\n expect(run(parsed, instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 11 },\n ]);\n });\n\n it(\"emits ALT_RESOLUTION for ALT-backed MINT_ASSOCIATION token-account positions\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n info: {\n typePool: [],\n rootType: 0,\n mintAssociations: [{ accountIndex: 0, mintIndex: 1 }],\n },\n };\n // token account at 0, mint at 1 \u2014 the mint is NOT emitted here\n const instruction = instructionOf([alt(5), alt(7)]);\n // Only the token-account position (accountIndex=0) is emitted; the\n // mint position (mintIndex=1) is handled by the mintAltRef pass.\n expect(run(parsed, instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 5 },\n ]);\n });\n\n it(\"emits ALT_RESOLUTION for an ALT-backed ACCOUNT_RESET target\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n accountResets: [{ accountIndex: 1, requirePreBalanceZero: false }],\n };\n const instruction = instructionOf([addr(\"static\"), alt(12)]);\n expect(run(parsed, instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 12 },\n ]);\n });\n\n it(\"emits one requirement for an ALT entry reached through several categories\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n valueFlowPorts: [\n {\n accountIndices: [0],\n optionalAccountStrategy: OptionalAccountStrategy.PROGRAM_ID,\n tokenValue: { kind: TokenKind.RESOLVE, accountIndex: 0 },\n },\n ],\n accountResets: [{ accountIndex: 0, requirePreBalanceZero: false }],\n displayFields: [{ value: accountPath(0) }],\n };\n // Writable, port candidate, port token account, reset target and display\n // field all point at the same slot.\n const instruction = instructionOf([alt(2, true)]);\n expect(run(parsed, instruction)).toEqual([\n { altAddress: \"ALT\", entryIndex: 2 },\n ]);\n });\n\n it(\"emits nothing when no account is ALT-supplied\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n displayFields: [{ value: accountPath(0) }],\n };\n expect(run(parsed, instructionOf([addr(\"static\", true)]))).toEqual([]);\n });\n\n it(\"ignores out-of-range references\", () => {\n const parsed: ParsedInstruction = {\n ...emptyParsed(),\n valueFlowPorts: [\n {\n accountIndices: [],\n optionalAccountStrategy: OptionalAccountStrategy.PROGRAM_ID,\n tokenValue: { kind: TokenKind.RESOLVE },\n },\n ],\n accountResets: [{ accountIndex: 9, requirePreBalanceZero: false }],\n displayFields: [{ value: accountPath(9) }],\n };\n expect(run(parsed, instructionOf([alt(1)]))).toEqual([]);\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_records", "import_RequirementAccumulator", "import_altResolutionRule", "emptyParsed", "alt", "entryIndex", "isWritable", "addr", "address", "accountPath", "index", "instructionOf", "accounts", "programId", "run", "parsed", "instruction", "accumulator"]
|
|
7
7
|
}
|