@ledgerhq/device-signer-kit-solana 1.13.0 → 1.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/lib/cjs/api/app-binder/ProvisionGenericClearSignDeviceActionTypes.js +1 -1
  2. package/lib/cjs/api/app-binder/ProvisionGenericClearSignDeviceActionTypes.js.map +1 -1
  3. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  4. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  5. package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementAccumulator.js +1 -1
  6. package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementAccumulator.js.map +3 -3
  7. package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.js +1 -1
  8. package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.js.map +2 -2
  9. package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementsError.js +1 -1
  10. package/lib/cjs/internal/app-binder/clear-sign/requirements/RequirementsError.js.map +3 -3
  11. package/lib/cjs/internal/app-binder/clear-sign/requirements/__tests__/fixtures/calBuilders.js +1 -1
  12. package/lib/cjs/internal/app-binder/clear-sign/requirements/__tests__/fixtures/calBuilders.js.map +3 -3
  13. package/lib/cjs/internal/app-binder/clear-sign/requirements/accountSchema.js +2 -0
  14. package/lib/cjs/internal/app-binder/clear-sign/requirements/accountSchema.js.map +7 -0
  15. package/lib/cjs/internal/app-binder/clear-sign/requirements/accountSchema.test.js +2 -0
  16. package/lib/cjs/internal/app-binder/clear-sign/requirements/accountSchema.test.js.map +7 -0
  17. package/lib/cjs/internal/app-binder/clear-sign/requirements/buildRequirements.js +1 -1
  18. package/lib/cjs/internal/app-binder/clear-sign/requirements/buildRequirements.js.map +3 -3
  19. package/lib/cjs/internal/app-binder/clear-sign/requirements/buildRequirements.test.js +1 -1
  20. package/lib/cjs/internal/app-binder/clear-sign/requirements/buildRequirements.test.js.map +3 -3
  21. package/lib/cjs/internal/app-binder/clear-sign/requirements/calTypes.js +1 -1
  22. package/lib/cjs/internal/app-binder/clear-sign/requirements/calTypes.js.map +1 -1
  23. package/lib/cjs/internal/app-binder/clear-sign/requirements/fromCal.js +1 -1
  24. package/lib/cjs/internal/app-binder/clear-sign/requirements/fromCal.js.map +3 -3
  25. package/lib/cjs/internal/app-binder/clear-sign/requirements/fromCal.test.js +1 -1
  26. package/lib/cjs/internal/app-binder/clear-sign/requirements/fromCal.test.js.map +3 -3
  27. package/lib/cjs/internal/app-binder/clear-sign/requirements/index.js +1 -1
  28. package/lib/cjs/internal/app-binder/clear-sign/requirements/index.js.map +3 -3
  29. package/lib/cjs/internal/app-binder/clear-sign/requirements/model.js +1 -1
  30. package/lib/cjs/internal/app-binder/clear-sign/requirements/model.js.map +1 -1
  31. package/lib/cjs/internal/app-binder/clear-sign/requirements/parseInstruction.js +1 -1
  32. package/lib/cjs/internal/app-binder/clear-sign/requirements/parseInstruction.js.map +2 -2
  33. package/lib/cjs/internal/app-binder/clear-sign/requirements/parseInstruction.test.js +1 -1
  34. package/lib/cjs/internal/app-binder/clear-sign/requirements/parseInstruction.test.js.map +2 -2
  35. package/lib/cjs/internal/app-binder/clear-sign/requirements/records.js +1 -1
  36. package/lib/cjs/internal/app-binder/clear-sign/requirements/records.js.map +3 -3
  37. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.js +1 -1
  38. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.js.map +3 -3
  39. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.js +1 -1
  40. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.js.map +2 -2
  41. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/enumVariantRule.test.js +1 -1
  42. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/enumVariantRule.test.js.map +2 -2
  43. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/instructionInfoRule.test.js +1 -1
  44. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/instructionInfoRule.test.js.map +2 -2
  45. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/tokenRule.js +1 -1
  46. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/tokenRule.js.map +3 -3
  47. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/tokenRule.test.js +1 -1
  48. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/tokenRule.test.js.map +3 -3
  49. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.js +1 -1
  50. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.js.map +3 -3
  51. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.test.js +1 -1
  52. package/lib/cjs/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.test.js.map +2 -2
  53. package/lib/cjs/internal/app-binder/clear-sign/requirements/valueResolution.js +1 -1
  54. package/lib/cjs/internal/app-binder/clear-sign/requirements/valueResolution.js.map +3 -3
  55. package/lib/cjs/internal/app-binder/clear-sign/requirements/valueResolution.test.js +1 -1
  56. package/lib/cjs/internal/app-binder/clear-sign/requirements/valueResolution.test.js.map +2 -2
  57. package/lib/cjs/internal/app-binder/command/ProvideInstructionSubstructureCommand.js.map +2 -2
  58. package/lib/cjs/internal/app-binder/command/utils/SolanaApplicationErrors.js.map +2 -2
  59. package/lib/cjs/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.js +1 -1
  60. package/lib/cjs/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.js.map +2 -2
  61. package/lib/cjs/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.test.js +1 -1
  62. package/lib/cjs/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.test.js.map +2 -2
  63. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  64. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +2 -2
  65. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  66. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +2 -2
  67. package/lib/cjs/internal/app-binder/services/DefaultSolanaTransactionSerializer.js +1 -1
  68. package/lib/cjs/internal/app-binder/services/DefaultSolanaTransactionSerializer.js.map +3 -3
  69. package/lib/cjs/internal/app-binder/services/DefaultSolanaTransactionSerializer.test.js +1 -1
  70. package/lib/cjs/internal/app-binder/services/DefaultSolanaTransactionSerializer.test.js.map +3 -3
  71. package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.js +1 -1
  72. package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.js.map +3 -3
  73. package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.test.js +1 -1
  74. package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.test.js.map +3 -3
  75. package/lib/cjs/internal/app-binder/services/TransactionInspector.js +1 -1
  76. package/lib/cjs/internal/app-binder/services/TransactionInspector.js.map +2 -2
  77. package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js +1 -1
  78. package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js.map +2 -2
  79. package/lib/cjs/internal/app-binder/services/classifyAndExtract.test.js +1 -1
  80. package/lib/cjs/internal/app-binder/services/classifyAndExtract.test.js.map +2 -2
  81. package/lib/cjs/internal/app-binder/services/utils/TransactionParser.js +1 -1
  82. package/lib/cjs/internal/app-binder/services/utils/TransactionParser.js.map +3 -3
  83. package/lib/cjs/internal/app-binder/services/utils/TransactionParser.test.js +1 -1
  84. package/lib/cjs/internal/app-binder/services/utils/TransactionParser.test.js.map +2 -2
  85. package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.js +1 -1
  86. package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.js.map +3 -3
  87. package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.test.js +1 -1
  88. package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.test.js.map +3 -3
  89. package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.js +1 -1
  90. package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.js.map +3 -3
  91. package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js +1 -1
  92. package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js.map +3 -3
  93. package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.js +1 -1
  94. package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.js.map +2 -2
  95. package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.test.js +1 -1
  96. package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.test.js.map +2 -2
  97. package/lib/cjs/internal/app-binder/task/context-providers/provideInstructionInfoContext.test.js +1 -1
  98. package/lib/cjs/internal/app-binder/task/context-providers/provideInstructionInfoContext.test.js.map +3 -3
  99. package/lib/cjs/package.json +5 -3
  100. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  101. package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementAccumulator.js +1 -1
  102. package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementAccumulator.js.map +3 -3
  103. package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.js +1 -1
  104. package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementAccumulator.test.js.map +2 -2
  105. package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementsError.js +1 -1
  106. package/lib/esm/internal/app-binder/clear-sign/requirements/RequirementsError.js.map +3 -3
  107. package/lib/esm/internal/app-binder/clear-sign/requirements/__tests__/fixtures/calBuilders.js +1 -1
  108. package/lib/esm/internal/app-binder/clear-sign/requirements/__tests__/fixtures/calBuilders.js.map +3 -3
  109. package/lib/esm/internal/app-binder/clear-sign/requirements/accountSchema.js +2 -0
  110. package/lib/esm/internal/app-binder/clear-sign/requirements/accountSchema.js.map +7 -0
  111. package/lib/esm/internal/app-binder/clear-sign/requirements/accountSchema.test.js +2 -0
  112. package/lib/esm/internal/app-binder/clear-sign/requirements/accountSchema.test.js.map +7 -0
  113. package/lib/esm/internal/app-binder/clear-sign/requirements/buildRequirements.js +1 -1
  114. package/lib/esm/internal/app-binder/clear-sign/requirements/buildRequirements.js.map +3 -3
  115. package/lib/esm/internal/app-binder/clear-sign/requirements/buildRequirements.test.js +1 -1
  116. package/lib/esm/internal/app-binder/clear-sign/requirements/buildRequirements.test.js.map +3 -3
  117. package/lib/esm/internal/app-binder/clear-sign/requirements/fromCal.js +1 -1
  118. package/lib/esm/internal/app-binder/clear-sign/requirements/fromCal.js.map +3 -3
  119. package/lib/esm/internal/app-binder/clear-sign/requirements/fromCal.test.js +1 -1
  120. package/lib/esm/internal/app-binder/clear-sign/requirements/fromCal.test.js.map +3 -3
  121. package/lib/esm/internal/app-binder/clear-sign/requirements/index.js +1 -1
  122. package/lib/esm/internal/app-binder/clear-sign/requirements/index.js.map +3 -3
  123. package/lib/esm/internal/app-binder/clear-sign/requirements/parseInstruction.js +1 -1
  124. package/lib/esm/internal/app-binder/clear-sign/requirements/parseInstruction.js.map +3 -3
  125. package/lib/esm/internal/app-binder/clear-sign/requirements/parseInstruction.test.js +1 -1
  126. package/lib/esm/internal/app-binder/clear-sign/requirements/parseInstruction.test.js.map +3 -3
  127. package/lib/esm/internal/app-binder/clear-sign/requirements/records.js +1 -1
  128. package/lib/esm/internal/app-binder/clear-sign/requirements/records.js.map +3 -3
  129. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.js +1 -1
  130. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.js.map +3 -3
  131. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.js +1 -1
  132. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.test.js.map +3 -3
  133. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/enumVariantRule.test.js +1 -1
  134. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/enumVariantRule.test.js.map +2 -2
  135. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/instructionInfoRule.test.js +1 -1
  136. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/instructionInfoRule.test.js.map +2 -2
  137. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/tokenRule.js +1 -1
  138. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/tokenRule.js.map +3 -3
  139. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/tokenRule.test.js +1 -1
  140. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/tokenRule.test.js.map +3 -3
  141. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.js +1 -1
  142. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.js.map +3 -3
  143. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.test.js +1 -1
  144. package/lib/esm/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.test.js.map +2 -2
  145. package/lib/esm/internal/app-binder/clear-sign/requirements/valueResolution.js +1 -1
  146. package/lib/esm/internal/app-binder/clear-sign/requirements/valueResolution.js.map +3 -3
  147. package/lib/esm/internal/app-binder/clear-sign/requirements/valueResolution.test.js +1 -1
  148. package/lib/esm/internal/app-binder/clear-sign/requirements/valueResolution.test.js.map +3 -3
  149. package/lib/esm/internal/app-binder/command/ProvideInstructionSubstructureCommand.js.map +2 -2
  150. package/lib/esm/internal/app-binder/command/utils/SolanaApplicationErrors.js.map +2 -2
  151. package/lib/esm/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.js +1 -1
  152. package/lib/esm/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.js.map +2 -2
  153. package/lib/esm/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.test.js +1 -1
  154. package/lib/esm/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.test.js.map +2 -2
  155. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  156. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +2 -2
  157. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  158. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +2 -2
  159. package/lib/esm/internal/app-binder/services/DefaultSolanaTransactionSerializer.js +1 -1
  160. package/lib/esm/internal/app-binder/services/DefaultSolanaTransactionSerializer.js.map +3 -3
  161. package/lib/esm/internal/app-binder/services/DefaultSolanaTransactionSerializer.test.js +1 -1
  162. package/lib/esm/internal/app-binder/services/DefaultSolanaTransactionSerializer.test.js.map +3 -3
  163. package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.js +1 -1
  164. package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.js.map +3 -3
  165. package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.test.js +1 -1
  166. package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.test.js.map +3 -3
  167. package/lib/esm/internal/app-binder/services/TransactionInspector.js +1 -1
  168. package/lib/esm/internal/app-binder/services/TransactionInspector.js.map +2 -2
  169. package/lib/esm/internal/app-binder/services/TransactionInspector.test.js +1 -1
  170. package/lib/esm/internal/app-binder/services/TransactionInspector.test.js.map +2 -2
  171. package/lib/esm/internal/app-binder/services/classifyAndExtract.test.js +1 -1
  172. package/lib/esm/internal/app-binder/services/classifyAndExtract.test.js.map +2 -2
  173. package/lib/esm/internal/app-binder/services/utils/TransactionParser.js +1 -1
  174. package/lib/esm/internal/app-binder/services/utils/TransactionParser.js.map +3 -3
  175. package/lib/esm/internal/app-binder/services/utils/TransactionParser.test.js +1 -1
  176. package/lib/esm/internal/app-binder/services/utils/TransactionParser.test.js.map +2 -2
  177. package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.js +1 -1
  178. package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.js.map +3 -3
  179. package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.test.js +1 -1
  180. package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.test.js.map +3 -3
  181. package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.js +1 -1
  182. package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.js.map +3 -3
  183. package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js +1 -1
  184. package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js.map +3 -3
  185. package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.js +1 -1
  186. package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.js.map +2 -2
  187. package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.test.js +1 -1
  188. package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.test.js.map +2 -2
  189. package/lib/esm/internal/app-binder/task/context-providers/provideInstructionInfoContext.test.js +1 -1
  190. package/lib/esm/internal/app-binder/task/context-providers/provideInstructionInfoContext.test.js.map +3 -3
  191. package/lib/esm/package.json +5 -3
  192. package/lib/types/api/app-binder/ProvisionGenericClearSignDeviceActionTypes.d.ts +3 -0
  193. package/lib/types/api/app-binder/ProvisionGenericClearSignDeviceActionTypes.d.ts.map +1 -1
  194. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +1 -0
  195. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  196. package/lib/types/internal/app-binder/clear-sign/requirements/RequirementAccumulator.d.ts +12 -0
  197. package/lib/types/internal/app-binder/clear-sign/requirements/RequirementAccumulator.d.ts.map +1 -1
  198. package/lib/types/internal/app-binder/clear-sign/requirements/RequirementsError.d.ts +13 -1
  199. package/lib/types/internal/app-binder/clear-sign/requirements/RequirementsError.d.ts.map +1 -1
  200. package/lib/types/internal/app-binder/clear-sign/requirements/__tests__/fixtures/calBuilders.d.ts +12 -1
  201. package/lib/types/internal/app-binder/clear-sign/requirements/__tests__/fixtures/calBuilders.d.ts.map +1 -1
  202. package/lib/types/internal/app-binder/clear-sign/requirements/accountSchema.d.ts +11 -0
  203. package/lib/types/internal/app-binder/clear-sign/requirements/accountSchema.d.ts.map +1 -0
  204. package/lib/types/internal/app-binder/clear-sign/requirements/accountSchema.test.d.ts +2 -0
  205. package/lib/types/internal/app-binder/clear-sign/requirements/accountSchema.test.d.ts.map +1 -0
  206. package/lib/types/internal/app-binder/clear-sign/requirements/buildRequirements.d.ts.map +1 -1
  207. package/lib/types/internal/app-binder/clear-sign/requirements/calTypes.d.ts +5 -1
  208. package/lib/types/internal/app-binder/clear-sign/requirements/calTypes.d.ts.map +1 -1
  209. package/lib/types/internal/app-binder/clear-sign/requirements/fromCal.d.ts +14 -3
  210. package/lib/types/internal/app-binder/clear-sign/requirements/fromCal.d.ts.map +1 -1
  211. package/lib/types/internal/app-binder/clear-sign/requirements/index.d.ts +6 -5
  212. package/lib/types/internal/app-binder/clear-sign/requirements/index.d.ts.map +1 -1
  213. package/lib/types/internal/app-binder/clear-sign/requirements/model.d.ts +38 -1
  214. package/lib/types/internal/app-binder/clear-sign/requirements/model.d.ts.map +1 -1
  215. package/lib/types/internal/app-binder/clear-sign/requirements/parseInstruction.d.ts +1 -2
  216. package/lib/types/internal/app-binder/clear-sign/requirements/parseInstruction.d.ts.map +1 -1
  217. package/lib/types/internal/app-binder/clear-sign/requirements/records.d.ts +55 -0
  218. package/lib/types/internal/app-binder/clear-sign/requirements/records.d.ts.map +1 -1
  219. package/lib/types/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.d.ts +22 -6
  220. package/lib/types/internal/app-binder/clear-sign/requirements/rules/altResolutionRule.d.ts.map +1 -1
  221. package/lib/types/internal/app-binder/clear-sign/requirements/rules/tokenRule.d.ts +23 -8
  222. package/lib/types/internal/app-binder/clear-sign/requirements/rules/tokenRule.d.ts.map +1 -1
  223. package/lib/types/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.d.ts +6 -0
  224. package/lib/types/internal/app-binder/clear-sign/requirements/rules/trustedNameRule.d.ts.map +1 -1
  225. package/lib/types/internal/app-binder/clear-sign/requirements/valueResolution.d.ts +27 -1
  226. package/lib/types/internal/app-binder/clear-sign/requirements/valueResolution.d.ts.map +1 -1
  227. package/lib/types/internal/app-binder/command/ProvideInstructionSubstructureCommand.d.ts +5 -2
  228. package/lib/types/internal/app-binder/command/ProvideInstructionSubstructureCommand.d.ts.map +1 -1
  229. package/lib/types/internal/app-binder/command/utils/SolanaApplicationErrors.d.ts.map +1 -1
  230. package/lib/types/internal/app-binder/device-action/ProvisionGenericClearSignDeviceAction.d.ts.map +1 -1
  231. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
  232. package/lib/types/internal/app-binder/services/DefaultSolanaTransactionSerializer.d.ts +6 -0
  233. package/lib/types/internal/app-binder/services/DefaultSolanaTransactionSerializer.d.ts.map +1 -1
  234. package/lib/types/internal/app-binder/services/TransactionInputNormaliser.d.ts +13 -0
  235. package/lib/types/internal/app-binder/services/TransactionInputNormaliser.d.ts.map +1 -1
  236. package/lib/types/internal/app-binder/services/TransactionInspector.d.ts +2 -0
  237. package/lib/types/internal/app-binder/services/TransactionInspector.d.ts.map +1 -1
  238. package/lib/types/internal/app-binder/services/utils/TransactionParser.d.ts.map +1 -1
  239. package/lib/types/internal/app-binder/task/BuildGenericClearSignContextTask.d.ts +12 -0
  240. package/lib/types/internal/app-binder/task/BuildGenericClearSignContextTask.d.ts.map +1 -1
  241. package/lib/types/internal/app-binder/task/ProvideGenericClearSignContextTask.d.ts +10 -0
  242. package/lib/types/internal/app-binder/task/ProvideGenericClearSignContextTask.d.ts.map +1 -1
  243. package/lib/types/internal/app-binder/task/SolanaSigningReportTask.d.ts +2 -0
  244. package/lib/types/internal/app-binder/task/SolanaSigningReportTask.d.ts.map +1 -1
  245. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  246. package/package.json +8 -6
@@ -1,2 +1,2 @@
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);
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 s=r=>p(t({},"__esModule",{value:!0}),r);var g={};module.exports=s(g);
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 = {\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"],
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 /** `true` when `\"degraded\"` specifically because an ACCOUNT_SCHEMA pre-check failed (stale CAL descriptor). */\n staleDescriptor: boolean;\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 readonly staleDescriptor: boolean;\n};\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["ProvisionGenericClearSignDeviceActionTypes_exports", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var S=(n,e)=>{for(var r in e)o(n,r,{get:e[r],enumerable:!0})},l=(n,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of s(e))!p.call(n,t)&&t!==r&&o(n,t,{get:()=>e[t],enumerable:!(a=i(e,t))||a.enumerable});return n};var A=n=>l(o({},"__esModule",{value:!0}),n);var g={};S(g,{signTransactionDAStateSteps:()=>c});module.exports=A(g);const c=Object.freeze({OPEN_APP:"signer.sol.steps.openApp",GET_APP_CONFIG:"signer.sol.steps.getAppConfig",TRANSACTION_CHECKS_OPT_IN:"signer.sol.steps.transactionChecksOptIn",TRANSACTION_CHECKS_OPT_IN_RESULT:"signer.sol.steps.transactionChecksOptInResult",TRANSACTION_CHECKS_PROVIDE:"signer.sol.steps.transactionChecksProvide",INSPECT_TRANSACTION:"signer.sol.steps.inspectTransaction",GET_PUB_KEY:"signer.sol.steps.getPubKey",BUILD_BASIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.buildBasicClearSignContext",PROVIDE_BASIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.provideBasicClearSignContext",BUILD_GENERIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.buildGenericClearSignContext",PROVIDE_GENERIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.provideGenericClearSignContext",FINALIZE_GENERIC_CLEAR_SIGN:"signer.sol.steps.finalizeGenericClearSign",PROMPT_UI_DISPLAY:"signer.sol.steps.promptUiDisplay",SIGN_TRANSACTION:"signer.sol.steps.signTransaction",DELAYED_SIGN:"signer.sol.steps.delayedSign"});0&&(module.exports={signTransactionDAStateSteps});
1
+ "use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var S=(n,e)=>{for(var r in e)o(n,r,{get:e[r],enumerable:!0})},l=(n,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of s(e))!p.call(n,t)&&t!==r&&o(n,t,{get:()=>e[t],enumerable:!(a=i(e,t))||a.enumerable});return n};var c=n=>l(o({},"__esModule",{value:!0}),n);var g={};S(g,{signTransactionDAStateSteps:()=>A});module.exports=c(g);const A=Object.freeze({OPEN_APP:"signer.sol.steps.openApp",GET_APP_CONFIG:"signer.sol.steps.getAppConfig",TRANSACTION_CHECKS_OPT_IN:"signer.sol.steps.transactionChecksOptIn",TRANSACTION_CHECKS_OPT_IN_RESULT:"signer.sol.steps.transactionChecksOptInResult",TRANSACTION_CHECKS_PROVIDE:"signer.sol.steps.transactionChecksProvide",INSPECT_TRANSACTION:"signer.sol.steps.inspectTransaction",GET_PUB_KEY:"signer.sol.steps.getPubKey",BUILD_BASIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.buildBasicClearSignContext",PROVIDE_BASIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.provideBasicClearSignContext",BUILD_GENERIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.buildGenericClearSignContext",PROVIDE_GENERIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.provideGenericClearSignContext",FINALIZE_GENERIC_CLEAR_SIGN:"signer.sol.steps.finalizeGenericClearSign",PROMPT_UI_DISPLAY:"signer.sol.steps.promptUiDisplay",SIGN_TRANSACTION:"signer.sol.steps.signTransaction",DELAYED_SIGN:"signer.sol.steps.delayedSign"});0&&(module.exports={signTransactionDAStateSteps});
2
2
  //# sourceMappingURL=SignTransactionDeviceActionTypes.js.map
@@ -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 // 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"],
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 // Set when generic clear-sign degraded specifically due to an ACCOUNT_SCHEMA\n // pre-check failure (stale CAL descriptor), used for blind-sign reporting.\n readonly staleDescriptor: boolean;\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 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});
1
+ "use strict";var r=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var f=(i,t)=>{for(var e in t)r(i,e,{get:t[e],enumerable:!0})},c=(i,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of m(t))!A.call(i,a)&&a!==e&&r(i,a,{get:()=>t[a],enumerable:!(o=d(t,a))||o.enumerable});return i};var h=i=>c(r({},"__esModule",{value:!0}),i);var R={};f(R,{RequirementAccumulator:()=>v});module.exports=h(R);class v{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;tokenAccountStateAltRefs=new s;trustedNameAltRefs=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)}addTrustedNameAltRef(t,e){this.trustedNameAltRefs.add(`${t}:${e}`,{altAddress:t,entryIndex:e})}addTokenAmountRef(t){this.tokenAmountRefs.add(t,t)}addTokenAmountAltRef(t,e){this.tokenAmountAltRefs.add(`${t}:${e}`,{altAddress:t,entryIndex:e})}addTokenAccountStateAltRef(t,e){this.tokenAccountStateAltRefs.add(`${t}:${e}`,{altAddress:t,entryIndex:e})}addMintAltRef(t,e){this.mintAltRefs.add(`${t}:${e}`,{altAddress:t,entryIndex:e})}build(){const t=({altAddress:n,entryIndex:l})=>`${n}:${l}`,e=new Set(this.tokenAccountStateAltRefs.values().map(t)),o=new Set(this.tokenAmountAltRefs.values().map(t).filter(n=>!e.has(n))),a=new Set(this.mintAltRefs.values().map(t).filter(n=>!e.has(n)&&!o.has(n))),u=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(n=>!e.has(t(n))&&!a.has(t(n))&&!o.has(t(n))),trustedNames:this.trustedNames.values(),trustedNameAltRefs:this.trustedNameAltRefs.values(),tokenAmountRefs:this.tokenAmountRefs.values().filter(n=>!u.has(n)),tokenAmountAltRefs:this.tokenAmountAltRefs.values().filter(n=>!e.has(t(n))),tokenAccountStateAltRefs:this.tokenAccountStateAltRefs.values(),mintAltRefs:this.mintAltRefs.values().filter(n=>a.has(t(n)))}}}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 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"]
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 private readonly tokenAccountStateAltRefs = new OrderedSet<AltEntryKey>();\n private readonly trustedNameAltRefs = 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 /**\n * Marks `(altAddress, entryIndex)` as a trusted-name target for an\n * ALT-supplied slot. This is not a fifth ALT_RESOLUTION requester: the slot\n * is already covered by `altResolutionRule`'s DISPLAY_FIELD pass (or by a\n * higher-priority ALT bucket), so this set is consulted, not stripped, in\n * the provide phase \u2014 once any of the other loops resolves the entry, its\n * address gets a TRUSTED_NAME fetch too.\n */\n addTrustedNameAltRef(altAddress: string, entryIndex: number): void {\n this.trustedNameAltRefs.add(`${altAddress}:${entryIndex}`, {\n altAddress,\n entryIndex,\n });\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 addTokenAccountStateAltRef(altAddress: string, entryIndex: number): void {\n this.tokenAccountStateAltRefs.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 four ALT loops: tokenAccountStateAltRefs >\n // tokenAmountAltRefs > mintAltRefs > altResolutions. Each higher-priority\n // bucket does everything the lower one does plus more (TOKEN_INFO /\n // TOKEN_ACCOUNT_STATE fallback). Strip lower-priority entries here so the\n // provide phase never sees duplicates \u2014 the device rejects a second\n // ALT_RESOLUTION for the same entry \u2014 and always runs the most complete\n // behaviour for each (altAddress, entryIndex).\n const altKey = ({ altAddress, entryIndex }: AltEntryKey) =>\n `${altAddress}:${entryIndex}`;\n const stateKeys = new Set(\n this.tokenAccountStateAltRefs.values().map(altKey),\n );\n const tokenAmountKeys = new Set(\n this.tokenAmountAltRefs\n .values()\n .map(altKey)\n .filter((k) => !stateKeys.has(k)),\n );\n const mintKeys = new Set(\n this.mintAltRefs\n .values()\n .map(altKey)\n .filter((k) => !stateKeys.has(k) && !tokenAmountKeys.has(k)),\n );\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) =>\n !stateKeys.has(altKey(k)) &&\n !mintKeys.has(altKey(k)) &&\n !tokenAmountKeys.has(altKey(k)),\n ),\n trustedNames: this.trustedNames.values(),\n trustedNameAltRefs: this.trustedNameAltRefs.values(),\n tokenAmountRefs: this.tokenAmountRefs\n .values()\n .filter((address) => !tokenAccountKeys.has(address)),\n tokenAmountAltRefs: this.tokenAmountAltRefs\n .values()\n .filter((k) => !stateKeys.has(altKey(k))),\n tokenAccountStateAltRefs: this.tokenAccountStateAltRefs.values(),\n mintAltRefs: this.mintAltRefs\n .values()\n .filter((k) => mintKeys.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": "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",
6
+ "names": ["RequirementAccumulator_exports", "__export", "RequirementAccumulator", "__toCommonJS", "OrderedSet", "programId", "discriminator", "enumId", "variantIndex", "mint", "account", "altAddress", "entryIndex", "address", "altKey", "stateKeys", "tokenAmountKeys", "k", "mintKeys", "tokenAccountKeys", "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("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:[]})})});
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("trustedNameAltRefs is deduplicated but never stripped by the ALT priority dedup",()=>{const t=new n.RequirementAccumulator;t.addTrustedNameAltRef("ALT",5),t.addTrustedNameAltRef("ALT",5),t.addTokenAccountStateAltRef("ALT",5);const e=t.build();expect(e.trustedNameAltRefs).toEqual([{altAddress:"ALT",entryIndex:5}]),expect(e.tokenAccountStateAltRefs).toEqual([{altAddress:"ALT",entryIndex:5}])}),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() ranks tokenAccountStateAltRefs above every other ALT bucket",()=>{const t=new n.RequirementAccumulator;t.addAltResolution("ALT",1),t.addMintAltRef("ALT",1),t.addTokenAmountAltRef("ALT",1),t.addTokenAccountStateAltRef("ALT",1);const e=t.build();expect(e.tokenAccountStateAltRefs).toEqual([{altAddress:"ALT",entryIndex:1}]),expect(e.tokenAmountAltRefs).toEqual([]),expect(e.mintAltRefs).toEqual([]),expect(e.altResolutions).toEqual([])}),it("build() keeps mintAltRefs when only tokenAmountAltRefs is outranked",()=>{const t=new n.RequirementAccumulator;t.addTokenAccountStateAltRef("ALT",1),t.addTokenAmountAltRef("ALT",1),t.addMintAltRef("ALT",1),t.addMintAltRef("ALT",2);const e=t.build();expect(e.mintAltRefs).toEqual([{altAddress:"ALT",entryIndex:2}])}),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:[],trustedNameAltRefs:[],tokenAmountRefs:[],tokenAmountAltRefs:[],tokenAccountStateAltRefs:[],mintAltRefs:[]})})});
2
2
  //# sourceMappingURL=RequirementAccumulator.test.js.map
@@ -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(\"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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",
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(\"trustedNameAltRefs is deduplicated but never stripped by the ALT priority dedup\", () => {\n const accumulator = new RequirementAccumulator();\n accumulator.addTrustedNameAltRef(\"ALT\", 5);\n accumulator.addTrustedNameAltRef(\"ALT\", 5);\n // The same entry also requested through a higher-priority ALT bucket:\n // trustedNameAltRefs is a marker set, so it must survive build()'s\n // cross-bucket strip untouched.\n accumulator.addTokenAccountStateAltRef(\"ALT\", 5);\n\n const result = accumulator.build();\n expect(result.trustedNameAltRefs).toEqual([\n { altAddress: \"ALT\", entryIndex: 5 },\n ]);\n expect(result.tokenAccountStateAltRefs).toEqual([\n { altAddress: \"ALT\", entryIndex: 5 },\n ]);\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() ranks tokenAccountStateAltRefs above every other ALT bucket\", () => {\n const accumulator = new RequirementAccumulator();\n\n // (ALT, 1) is an IS_SIGNER target that is also a PARAM_TOKEN_AMOUNT ref, a\n // MINT_ASSOC mint and a writable slot: four buckets, one ALT entry, and the\n // device rejects a second ALT_RESOLUTION for it.\n accumulator.addAltResolution(\"ALT\", 1);\n accumulator.addMintAltRef(\"ALT\", 1);\n accumulator.addTokenAmountAltRef(\"ALT\", 1);\n accumulator.addTokenAccountStateAltRef(\"ALT\", 1);\n\n const result = accumulator.build();\n\n // The state bucket's loop ends with a TOKEN_INFO attempt on the resolved\n // address, so it does everything the three lower buckets do.\n expect(result.tokenAccountStateAltRefs).toEqual([\n { altAddress: \"ALT\", entryIndex: 1 },\n ]);\n expect(result.tokenAmountAltRefs).toEqual([]);\n expect(result.mintAltRefs).toEqual([]);\n expect(result.altResolutions).toEqual([]);\n });\n\n it(\"build() keeps mintAltRefs when only tokenAmountAltRefs is outranked\", () => {\n // Regression guard for the strip order: mintAltRefs must be filtered against\n // the *surviving* tokenAmount keys, not the raw ones.\n const accumulator = new RequirementAccumulator();\n accumulator.addTokenAccountStateAltRef(\"ALT\", 1);\n accumulator.addTokenAmountAltRef(\"ALT\", 1);\n accumulator.addMintAltRef(\"ALT\", 1);\n accumulator.addMintAltRef(\"ALT\", 2);\n\n const result = accumulator.build();\n\n expect(result.mintAltRefs).toEqual([{ altAddress: \"ALT\", entryIndex: 2 }]);\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 trustedNameAltRefs: [],\n tokenAmountRefs: [],\n tokenAmountAltRefs: [],\n tokenAccountStateAltRefs: [],\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 i=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var a=(e,r)=>{for(var t in r)i(e,t,{get:r[t],enumerable:!0})},c=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of s(r))!E.call(e,o)&&o!==t&&i(e,o,{get:()=>r[o],enumerable:!(n=m(r,o))||n.enumerable});return e};var l=e=>c(i({},"__esModule",{value:!0}),e);var d={};a(d,{RequirementsDecodeError:()=>p});module.exports=l(d);class p{_tag="RequirementsDecodeError";originalError;constructor(r){this.originalError=new Error(r)}}0&&(module.exports={RequirementsDecodeError});
1
+ "use strict";var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var a=(o,r)=>{for(var t in r)n(o,t,{get:r[t],enumerable:!0})},E=(o,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of m(r))!s.call(o,e)&&e!==t&&n(o,e,{get:()=>r[e],enumerable:!(i=c(r,e))||i.enumerable});return o};var l=o=>E(n({},"__esModule",{value:!0}),o);var h={};a(h,{AccountSchemaMismatchError:()=>g,RequirementsDecodeError:()=>u});module.exports=l(h);class u{_tag="RequirementsDecodeError";originalError;constructor(r){this.originalError=new Error(r)}}class g{_tag="AccountSchemaMismatchError";originalError;constructor(r){this.originalError=new Error(r)}}0&&(module.exports={AccountSchemaMismatchError,RequirementsDecodeError});
2
2
  //# sourceMappingURL=RequirementsError.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/clear-sign/requirements/RequirementsError.ts"],
4
- "sourcesContent": ["import { type DmkError } from \"@ledgerhq/device-management-kit\";\n\n/** Raised when building requirements from a CAL descriptor fails. */\nexport class RequirementsDecodeError implements DmkError {\n readonly _tag = \"RequirementsDecodeError\";\n readonly originalError: Error;\n\n constructor(message: string) {\n this.originalError = new Error(message);\n }\n}\n\nexport type RequirementsError = RequirementsDecodeError;\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GAGO,MAAME,CAA4C,CAC9C,KAAO,0BACP,cAET,YAAYE,EAAiB,CAC3B,KAAK,cAAgB,IAAI,MAAMA,CAAO,CACxC,CACF",
6
- "names": ["RequirementsError_exports", "__export", "RequirementsDecodeError", "__toCommonJS", "message"]
4
+ "sourcesContent": ["import { type DmkError } from \"@ledgerhq/device-management-kit\";\n\n/** Raised when building requirements from a CAL descriptor fails. */\nexport class RequirementsDecodeError implements DmkError {\n readonly _tag = \"RequirementsDecodeError\";\n readonly originalError: Error;\n\n constructor(message: string) {\n this.originalError = new Error(message);\n }\n}\n\n/**\n * Raised when an instruction's live accounts fail its CAL `ACCOUNT_SCHEMA`\n * check (the host pre-check for a stale/incompatible descriptor). Kept\n * distinct from {@link RequirementsDecodeError} so callers can tell \"the CAL\n * descriptor is malformed\" apart from \"the descriptor is stale for this\n * instruction\" and report the latter as a distinct blind-sign reason.\n */\nexport class AccountSchemaMismatchError implements DmkError {\n readonly _tag = \"AccountSchemaMismatchError\";\n readonly originalError: Error;\n\n constructor(message: string) {\n this.originalError = new Error(message);\n }\n}\n\nexport type RequirementsError =\n | RequirementsDecodeError\n | AccountSchemaMismatchError;\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,EAAA,4BAAAC,IAAA,eAAAC,EAAAJ,GAGO,MAAMG,CAA4C,CAC9C,KAAO,0BACP,cAET,YAAYE,EAAiB,CAC3B,KAAK,cAAgB,IAAI,MAAMA,CAAO,CACxC,CACF,CASO,MAAMH,CAA+C,CACjD,KAAO,6BACP,cAET,YAAYG,EAAiB,CAC3B,KAAK,cAAgB,IAAI,MAAMA,CAAO,CACxC,CACF",
6
+ "names": ["RequirementsError_exports", "__export", "AccountSchemaMismatchError", "RequirementsDecodeError", "__toCommonJS", "message"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var y=(e,t)=>{for(var o in t)r(e,o,{get:t[o],enumerable:!0})},d=(e,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of p(t))!s.call(e,n)&&n!==o&&r(e,n,{get:()=>t[n],enumerable:!(a=i(t,n))||a.enumerable});return e};var m=e=>d(r({},"__esModule",{value:!0}),e);var D={};y(D,{accountPathValue:()=>T,accountReset:()=>f,argumentPathValue:()=>u,bytes:()=>C,constantValue:()=>A,descriptor:()=>I,idlDescriptor:()=>c,mintAssociation:()=>b,tokenAmountDisplayField:()=>P,tokenValue:()=>l,trustedNameDisplayField:()=>_,valueFlowPort:()=>V});module.exports=m(D);function C(...e){return Uint8Array.from(e)}function x(e){return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}function A(e){return{source:"CONSTANT",data:x(e)}}function T(e){return{source:"ACCOUNT_PATH",account_index:e}}function u(e=[]){return{source:"ARGUMENT_PATH",path:{steps:e}}}function l(e,t={}){return{kind:e,value:t.value,account_index:t.accountIndex}}function V(e){return{account_indices:e.accountIndices??(e.accountIndex!==void 0?[e.accountIndex]:[]),optional_account_strategy:e.optionalAccountStrategy,token_value:e.tokenValue??l("NATIVE")}}function f(e){return{account_index:e.accountIndex,require_pre_balance_zero:e.requirePreBalanceZero}}function _(e){return{name:"Name",param:{type:"TRUSTED_NAME",value:e}}}function P(e){return{name:"Amount",param:{type:"TOKEN_AMOUNT",value:u([0]),token:e}}}function c(e){return{type_pool:e.typePool??[{index:0,kind:"STRUCT",refs:[]}],root_type:e.rootType??0}}function I(e={}){return{discriminator:"00",idlDescriptor:c({}),mintAssociations:[],valueFlowPorts:[],accountResets:[],displayFields:[],enumCache:new Map,...e}}function b(e,t){return{account_index:e,mint_index:t}}0&&(module.exports={accountPathValue,accountReset,argumentPathValue,bytes,constantValue,descriptor,idlDescriptor,mintAssociation,tokenAmountDisplayField,tokenValue,trustedNameDisplayField,valueFlowPort});
1
+ "use strict";var r=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var s=(e,n)=>{for(var a in n)r(e,a,{get:n[a],enumerable:!0})},y=(e,n,a,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of d(n))!p.call(e,t)&&t!==a&&r(e,t,{get:()=>n[t],enumerable:!(o=l(n,t))||o.enumerable});return e};var C=e=>y(r({},"__esModule",{value:!0}),e);var D={};s(D,{accountPathValue:()=>_,accountReset:()=>b,argumentPathValue:()=>u,bytes:()=>m,constantValue:()=>x,descriptor:()=>v,hideRule:()=>V,idlDescriptor:()=>c,mintAssociation:()=>I,ownerAssociation:()=>T,tokenAmountDisplayField:()=>P,tokenValue:()=>i,trustedNameDisplayField:()=>k,valueFlowPort:()=>f});module.exports=C(D);function m(...e){return Uint8Array.from(e)}function A(e){return Array.from(e,n=>n.toString(16).padStart(2,"0")).join("")}function x(e){return{source:"CONSTANT",data:A(e)}}function _(e){return{source:"ACCOUNT_PATH",account_index:e}}function u(e=[]){return{source:"ARGUMENT_PATH",path:{steps:e}}}function i(e,n={}){return{kind:e,value:n.value,account_index:n.accountIndex,fallback_account:n.fallbackAccount}}function f(e){return{account_indices:e.accountIndices??(e.accountIndex!==void 0?[e.accountIndex]:[]),optional_account_strategy:e.optionalAccountStrategy,token_value:e.tokenValue??i("NATIVE"),active_when:e.activeWhen}}function V(e){return{rule_set_index:e.ruleSetIndex,target:e.target,condition:e.condition}}function T(e,n){return{account_index:e,owner:n}}function b(e){return{account_index:e.accountIndex,require_pre_balance_zero:e.requirePreBalanceZero,value_kind:e.valueKind??"NATIVE",token:e.token,require_native_pre_balance_zero:e.requireNativePreBalanceZero}}function k(e){return{name:"Name",param:{type:"TRUSTED_NAME",value:e}}}function P(e){return{name:"Amount",param:{type:"TOKEN_AMOUNT",value:u([0]),token:e}}}function c(e){return{type_pool:e.typePool??[{index:0,kind:"STRUCT",refs:[]}],root_type:e.rootType??0}}function v(e={}){return{discriminator:"00",idlDescriptor:c({}),mintAssociations:[],ownerAssociations:[],valueFlowPorts:[],accountResets:[],displayFields:[],hideRules:[],enumCache:new Map,...e}}function I(e,n){return{account_index:e,mint_index:n}}0&&(module.exports={accountPathValue,accountReset,argumentPathValue,bytes,constantValue,descriptor,hideRule,idlDescriptor,mintAssociation,ownerAssociation,tokenAmountDisplayField,tokenValue,trustedNameDisplayField,valueFlowPort});
2
2
  //# sourceMappingURL=calBuilders.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../../src/internal/app-binder/clear-sign/requirements/__tests__/fixtures/calBuilders.ts"],
4
- "sourcesContent": ["/**\n * Builders for the decoded CAL JSON the requirement builder consumes.\n */\n\nimport { type CalTypePoolEntry } from \"@internal/app-binder/clear-sign/idl-type-pool\";\nimport {\n type CalAccountReset,\n type CalDisplayField,\n type CalIdlDescriptor,\n type CalMintAssociation,\n type CalTokenValue,\n type CalValue,\n type CalValueFlowPort,\n} from \"@internal/app-binder/clear-sign/requirements/calTypes\";\nimport { type InstructionDescriptor } from \"@internal/app-binder/clear-sign/requirements/model\";\n\nexport function bytes(...values: number[]): Uint8Array {\n return Uint8Array.from(values);\n}\n\nfunction toHex(value: Uint8Array): string {\n return Array.from(value, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n// ---- VALUE -----------------------------------------------------------------\n\nexport function constantValue(payload: Uint8Array): CalValue {\n return { source: \"CONSTANT\", data: toHex(payload) };\n}\n\nexport function accountPathValue(accountIndex: number): CalValue {\n return { source: \"ACCOUNT_PATH\", account_index: accountIndex };\n}\n\nexport function argumentPathValue(steps: number[] = []): CalValue {\n return { source: \"ARGUMENT_PATH\", path: { steps } };\n}\n\n// ---- substructures ---------------------------------------------------------\n\nexport function tokenValue(\n kind: CalTokenValue[\"kind\"],\n opts: { value?: CalValue; accountIndex?: number } = {},\n): CalTokenValue {\n return { kind, value: opts.value, account_index: opts.accountIndex };\n}\n\nexport function valueFlowPort(opts: {\n accountIndex?: number;\n accountIndices?: number[];\n optionalAccountStrategy?: CalValueFlowPort[\"optional_account_strategy\"];\n tokenValue?: CalTokenValue;\n}): CalValueFlowPort {\n return {\n account_indices:\n opts.accountIndices ??\n (opts.accountIndex !== undefined ? [opts.accountIndex] : []),\n optional_account_strategy: opts.optionalAccountStrategy,\n token_value: opts.tokenValue ?? tokenValue(\"NATIVE\"),\n };\n}\n\nexport function accountReset(opts: {\n accountIndex: number;\n requirePreBalanceZero?: boolean;\n}): CalAccountReset {\n return {\n account_index: opts.accountIndex,\n require_pre_balance_zero: opts.requirePreBalanceZero,\n };\n}\n\nexport function trustedNameDisplayField(value: CalValue): CalDisplayField {\n return { name: \"Name\", param: { type: \"TRUSTED_NAME\", value } };\n}\n\nexport function tokenAmountDisplayField(token: CalValue): CalDisplayField {\n return {\n name: \"Amount\",\n param: { type: \"TOKEN_AMOUNT\", value: argumentPathValue([0]), token },\n };\n}\n\n// ---- descriptor ------------------------------------------------------------\n\nexport function idlDescriptor(opts: {\n typePool?: CalTypePoolEntry[];\n rootType?: number;\n}): CalIdlDescriptor {\n return {\n type_pool: opts.typePool ?? [{ index: 0, kind: \"STRUCT\", refs: [] }],\n root_type: opts.rootType ?? 0,\n };\n}\n\nexport function descriptor(\n overrides: Partial<InstructionDescriptor> = {},\n): InstructionDescriptor {\n return {\n discriminator: \"00\",\n idlDescriptor: idlDescriptor({}),\n mintAssociations: [],\n valueFlowPorts: [],\n accountResets: [],\n displayFields: [],\n enumCache: new Map(),\n ...overrides,\n };\n}\n\nexport function mintAssociation(\n accountIndex: number,\n mintIndex: number,\n): CalMintAssociation {\n return { account_index: accountIndex, mint_index: mintIndex };\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,EAAA,iBAAAC,EAAA,sBAAAC,EAAA,UAAAC,EAAA,kBAAAC,EAAA,eAAAC,EAAA,kBAAAC,EAAA,oBAAAC,EAAA,4BAAAC,EAAA,eAAAC,EAAA,4BAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAd,GAgBO,SAASK,KAASU,EAA8B,CACrD,OAAO,WAAW,KAAKA,CAAM,CAC/B,CAEA,SAASC,EAAMC,EAA2B,CACxC,OAAO,MAAM,KAAKA,EAAQC,GAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,KAAK,EAAE,CAC1E,CAIO,SAASZ,EAAca,EAA+B,CAC3D,MAAO,CAAE,OAAQ,WAAY,KAAMH,EAAMG,CAAO,CAAE,CACpD,CAEO,SAASjB,EAAiBkB,EAAgC,CAC/D,MAAO,CAAE,OAAQ,eAAgB,cAAeA,CAAa,CAC/D,CAEO,SAAShB,EAAkBiB,EAAkB,CAAC,EAAa,CAChE,MAAO,CAAE,OAAQ,gBAAiB,KAAM,CAAE,MAAAA,CAAM,CAAE,CACpD,CAIO,SAASV,EACdW,EACAC,EAAoD,CAAC,EACtC,CACf,MAAO,CAAE,KAAAD,EAAM,MAAOC,EAAK,MAAO,cAAeA,EAAK,YAAa,CACrE,CAEO,SAASV,EAAcU,EAKT,CACnB,MAAO,CACL,gBACEA,EAAK,iBACJA,EAAK,eAAiB,OAAY,CAACA,EAAK,YAAY,EAAI,CAAC,GAC5D,0BAA2BA,EAAK,wBAChC,YAAaA,EAAK,YAAcZ,EAAW,QAAQ,CACrD,CACF,CAEO,SAASR,EAAaoB,EAGT,CAClB,MAAO,CACL,cAAeA,EAAK,aACpB,yBAA0BA,EAAK,qBACjC,CACF,CAEO,SAASX,EAAwBK,EAAkC,CACxE,MAAO,CAAE,KAAM,OAAQ,MAAO,CAAE,KAAM,eAAgB,MAAAA,CAAM,CAAE,CAChE,CAEO,SAASP,EAAwBc,EAAkC,CACxE,MAAO,CACL,KAAM,SACN,MAAO,CAAE,KAAM,eAAgB,MAAOpB,EAAkB,CAAC,CAAC,CAAC,EAAG,MAAAoB,CAAM,CACtE,CACF,CAIO,SAAShB,EAAce,EAGT,CACnB,MAAO,CACL,UAAWA,EAAK,UAAY,CAAC,CAAE,MAAO,EAAG,KAAM,SAAU,KAAM,CAAC,CAAE,CAAC,EACnE,UAAWA,EAAK,UAAY,CAC9B,CACF,CAEO,SAAShB,EACdkB,EAA4C,CAAC,EACtB,CACvB,MAAO,CACL,cAAe,KACf,cAAejB,EAAc,CAAC,CAAC,EAC/B,iBAAkB,CAAC,EACnB,eAAgB,CAAC,EACjB,cAAe,CAAC,EAChB,cAAe,CAAC,EAChB,UAAW,IAAI,IACf,GAAGiB,CACL,CACF,CAEO,SAAShB,EACdW,EACAM,EACoB,CACpB,MAAO,CAAE,cAAeN,EAAc,WAAYM,CAAU,CAC9D",
6
- "names": ["calBuilders_exports", "__export", "accountPathValue", "accountReset", "argumentPathValue", "bytes", "constantValue", "descriptor", "idlDescriptor", "mintAssociation", "tokenAmountDisplayField", "tokenValue", "trustedNameDisplayField", "valueFlowPort", "__toCommonJS", "values", "toHex", "value", "b", "payload", "accountIndex", "steps", "kind", "opts", "token", "overrides", "mintIndex"]
4
+ "sourcesContent": ["/**\n * Builders for the decoded CAL JSON the requirement builder consumes.\n */\n\nimport { type CalTypePoolEntry } from \"@internal/app-binder/clear-sign/idl-type-pool\";\nimport {\n type CalAccountReset,\n type CalActiveWhenPredicate,\n type CalDisplayField,\n type CalHideRule,\n type CalIdlDescriptor,\n type CalMintAssociation,\n type CalOwnerAssociation,\n type CalTokenValue,\n type CalValue,\n type CalValueFlowPort,\n} from \"@internal/app-binder/clear-sign/requirements/calTypes\";\nimport { type InstructionDescriptor } from \"@internal/app-binder/clear-sign/requirements/model\";\n\nexport function bytes(...values: number[]): Uint8Array {\n return Uint8Array.from(values);\n}\n\nfunction toHex(value: Uint8Array): string {\n return Array.from(value, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n// ---- VALUE -----------------------------------------------------------------\n\nexport function constantValue(payload: Uint8Array): CalValue {\n return { source: \"CONSTANT\", data: toHex(payload) };\n}\n\nexport function accountPathValue(accountIndex: number): CalValue {\n return { source: \"ACCOUNT_PATH\", account_index: accountIndex };\n}\n\nexport function argumentPathValue(steps: number[] = []): CalValue {\n return { source: \"ARGUMENT_PATH\", path: { steps } };\n}\n\n// ---- substructures ---------------------------------------------------------\n\nexport function tokenValue(\n kind: CalTokenValue[\"kind\"],\n opts: {\n value?: CalValue;\n accountIndex?: number;\n fallbackAccount?: number;\n } = {},\n): CalTokenValue {\n return {\n kind,\n value: opts.value,\n account_index: opts.accountIndex,\n fallback_account: opts.fallbackAccount,\n };\n}\n\nexport function valueFlowPort(opts: {\n accountIndex?: number;\n accountIndices?: number[];\n optionalAccountStrategy?: CalValueFlowPort[\"optional_account_strategy\"];\n tokenValue?: CalTokenValue;\n activeWhen?: CalActiveWhenPredicate[];\n}): CalValueFlowPort {\n return {\n account_indices:\n opts.accountIndices ??\n (opts.accountIndex !== undefined ? [opts.accountIndex] : []),\n optional_account_strategy: opts.optionalAccountStrategy,\n token_value: opts.tokenValue ?? tokenValue(\"NATIVE\"),\n active_when: opts.activeWhen,\n };\n}\n\nexport function hideRule(opts: {\n condition: string;\n target?: CalValue;\n ruleSetIndex?: number;\n}): CalHideRule {\n return {\n rule_set_index: opts.ruleSetIndex,\n target: opts.target,\n condition: opts.condition,\n };\n}\n\nexport function ownerAssociation(\n accountIndex: number,\n owner: CalValue,\n): CalOwnerAssociation {\n return { account_index: accountIndex, owner };\n}\n\nexport function accountReset(opts: {\n accountIndex: number;\n requirePreBalanceZero?: boolean;\n valueKind?: CalAccountReset[\"value_kind\"];\n token?: CalAccountReset[\"token\"];\n requireNativePreBalanceZero?: boolean;\n}): CalAccountReset {\n return {\n account_index: opts.accountIndex,\n require_pre_balance_zero: opts.requirePreBalanceZero,\n value_kind: opts.valueKind ?? \"NATIVE\",\n token: opts.token,\n require_native_pre_balance_zero: opts.requireNativePreBalanceZero,\n };\n}\n\nexport function trustedNameDisplayField(value: CalValue): CalDisplayField {\n return { name: \"Name\", param: { type: \"TRUSTED_NAME\", value } };\n}\n\nexport function tokenAmountDisplayField(token: CalValue): CalDisplayField {\n return {\n name: \"Amount\",\n param: { type: \"TOKEN_AMOUNT\", value: argumentPathValue([0]), token },\n };\n}\n\n// ---- descriptor ------------------------------------------------------------\n\nexport function idlDescriptor(opts: {\n typePool?: CalTypePoolEntry[];\n rootType?: number;\n}): CalIdlDescriptor {\n return {\n type_pool: opts.typePool ?? [{ index: 0, kind: \"STRUCT\", refs: [] }],\n root_type: opts.rootType ?? 0,\n };\n}\n\nexport function descriptor(\n overrides: Partial<InstructionDescriptor> = {},\n): InstructionDescriptor {\n return {\n discriminator: \"00\",\n idlDescriptor: idlDescriptor({}),\n mintAssociations: [],\n ownerAssociations: [],\n valueFlowPorts: [],\n accountResets: [],\n displayFields: [],\n hideRules: [],\n enumCache: new Map(),\n ...overrides,\n };\n}\n\nexport function mintAssociation(\n accountIndex: number,\n mintIndex: number,\n): CalMintAssociation {\n return { account_index: accountIndex, mint_index: mintIndex };\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,EAAA,iBAAAC,EAAA,sBAAAC,EAAA,UAAAC,EAAA,kBAAAC,EAAA,eAAAC,EAAA,aAAAC,EAAA,kBAAAC,EAAA,oBAAAC,EAAA,qBAAAC,EAAA,4BAAAC,EAAA,eAAAC,EAAA,4BAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAhB,GAmBO,SAASK,KAASY,EAA8B,CACrD,OAAO,WAAW,KAAKA,CAAM,CAC/B,CAEA,SAASC,EAAMC,EAA2B,CACxC,OAAO,MAAM,KAAKA,EAAQC,GAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,KAAK,EAAE,CAC1E,CAIO,SAASd,EAAce,EAA+B,CAC3D,MAAO,CAAE,OAAQ,WAAY,KAAMH,EAAMG,CAAO,CAAE,CACpD,CAEO,SAASnB,EAAiBoB,EAAgC,CAC/D,MAAO,CAAE,OAAQ,eAAgB,cAAeA,CAAa,CAC/D,CAEO,SAASlB,EAAkBmB,EAAkB,CAAC,EAAa,CAChE,MAAO,CAAE,OAAQ,gBAAiB,KAAM,CAAE,MAAAA,CAAM,CAAE,CACpD,CAIO,SAASV,EACdW,EACAC,EAII,CAAC,EACU,CACf,MAAO,CACL,KAAAD,EACA,MAAOC,EAAK,MACZ,cAAeA,EAAK,aACpB,iBAAkBA,EAAK,eACzB,CACF,CAEO,SAASV,EAAcU,EAMT,CACnB,MAAO,CACL,gBACEA,EAAK,iBACJA,EAAK,eAAiB,OAAY,CAACA,EAAK,YAAY,EAAI,CAAC,GAC5D,0BAA2BA,EAAK,wBAChC,YAAaA,EAAK,YAAcZ,EAAW,QAAQ,EACnD,YAAaY,EAAK,UACpB,CACF,CAEO,SAASjB,EAASiB,EAIT,CACd,MAAO,CACL,eAAgBA,EAAK,aACrB,OAAQA,EAAK,OACb,UAAWA,EAAK,SAClB,CACF,CAEO,SAASd,EACdW,EACAI,EACqB,CACrB,MAAO,CAAE,cAAeJ,EAAc,MAAAI,CAAM,CAC9C,CAEO,SAASvB,EAAasB,EAMT,CAClB,MAAO,CACL,cAAeA,EAAK,aACpB,yBAA0BA,EAAK,sBAC/B,WAAYA,EAAK,WAAa,SAC9B,MAAOA,EAAK,MACZ,gCAAiCA,EAAK,2BACxC,CACF,CAEO,SAASX,EAAwBK,EAAkC,CACxE,MAAO,CAAE,KAAM,OAAQ,MAAO,CAAE,KAAM,eAAgB,MAAAA,CAAM,CAAE,CAChE,CAEO,SAASP,EAAwBe,EAAkC,CACxE,MAAO,CACL,KAAM,SACN,MAAO,CAAE,KAAM,eAAgB,MAAOvB,EAAkB,CAAC,CAAC,CAAC,EAAG,MAAAuB,CAAM,CACtE,CACF,CAIO,SAASlB,EAAcgB,EAGT,CACnB,MAAO,CACL,UAAWA,EAAK,UAAY,CAAC,CAAE,MAAO,EAAG,KAAM,SAAU,KAAM,CAAC,CAAE,CAAC,EACnE,UAAWA,EAAK,UAAY,CAC9B,CACF,CAEO,SAASlB,EACdqB,EAA4C,CAAC,EACtB,CACvB,MAAO,CACL,cAAe,KACf,cAAenB,EAAc,CAAC,CAAC,EAC/B,iBAAkB,CAAC,EACnB,kBAAmB,CAAC,EACpB,eAAgB,CAAC,EACjB,cAAe,CAAC,EAChB,cAAe,CAAC,EAChB,UAAW,CAAC,EACZ,UAAW,IAAI,IACf,GAAGmB,CACL,CACF,CAEO,SAASlB,EACdY,EACAO,EACoB,CACpB,MAAO,CAAE,cAAeP,EAAc,WAAYO,CAAU,CAC9D",
6
+ "names": ["calBuilders_exports", "__export", "accountPathValue", "accountReset", "argumentPathValue", "bytes", "constantValue", "descriptor", "hideRule", "idlDescriptor", "mintAssociation", "ownerAssociation", "tokenAmountDisplayField", "tokenValue", "trustedNameDisplayField", "valueFlowPort", "__toCommonJS", "values", "toHex", "value", "b", "payload", "accountIndex", "steps", "kind", "opts", "owner", "token", "overrides", "mintIndex"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var u=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var f=(t,n)=>{for(var e in n)u(t,e,{get:n[e],enumerable:!0})},m=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of a(n))!b.call(t,o)&&o!==e&&u(t,o,{get:()=>n[o],enumerable:!(i=l(n,o))||i.enumerable});return t};var g=t=>m(u({},"__esModule",{value:!0}),t);var N={};f(N,{checkAccountSchema:()=>D});module.exports=g(N);const c="FORBIDDEN",s="REQUIRED",_=255;function D(t,n){const e=n.length;if(e<t.count_min)return`account count ${e} below COUNT_MIN ${t.count_min}`;if(t.count_max!==_&&e>t.count_max)return`account count ${e} above COUNT_MAX ${t.count_max}`;for(let i=0;i<e;i++){const o=i<t.slots.length?t.slots[i]:t.remaining_policy,r=n[i];if(o.signer===c&&r.isSigner)return`slot ${i} is a signer but the schema forbids it`;if(o.signer===s&&!r.isSigner)return`slot ${i} is not a signer but the schema requires it`;if(o.writable===c&&r.isWritable)return`slot ${i} is writable but the schema forbids it`;if(o.writable===s&&!r.isWritable)return`slot ${i} is not writable but the schema requires it`}return null}0&&(module.exports={checkAccountSchema});
2
+ //# sourceMappingURL=accountSchema.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/app-binder/clear-sign/requirements/accountSchema.ts"],
4
+ "sourcesContent": ["import { type CalAccountSchema } from \"./calTypes\";\nimport { type RequirementAccount } from \"./model\";\n\nconst FORBIDDEN = \"FORBIDDEN\";\nconst REQUIRED = \"REQUIRED\";\nconst COUNT_UNBOUNDED = 255;\n\n/**\n * Host-side port of `poc/idl_descriptors/account_schema.py::check_account_schema`.\n *\n * Returns a human-readable mismatch description on failure, `null` on pass.\n * Called before streaming any descriptor so a stale CAL entry is detected\n * before `FINALIZE` would reject it.\n */\nexport function checkAccountSchema(\n schema: CalAccountSchema,\n accounts: RequirementAccount[],\n): string | null {\n const count = accounts.length;\n\n if (count < schema.count_min) {\n return `account count ${count} below COUNT_MIN ${schema.count_min}`;\n }\n if (schema.count_max !== COUNT_UNBOUNDED && count > schema.count_max) {\n return `account count ${count} above COUNT_MAX ${schema.count_max}`;\n }\n\n for (let i = 0; i < count; i++) {\n const slot =\n i < schema.slots.length ? schema.slots[i]! : schema.remaining_policy;\n const account = accounts[i]!;\n\n if (slot.signer === FORBIDDEN && account.isSigner) {\n return `slot ${i} is a signer but the schema forbids it`;\n }\n if (slot.signer === REQUIRED && !account.isSigner) {\n return `slot ${i} is not a signer but the schema requires it`;\n }\n if (slot.writable === FORBIDDEN && account.isWritable) {\n return `slot ${i} is writable but the schema forbids it`;\n }\n if (slot.writable === REQUIRED && !account.isWritable) {\n return `slot ${i} is not writable but the schema requires it`;\n }\n }\n\n return null;\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAGA,MAAMI,EAAY,YACZC,EAAW,WACXC,EAAkB,IASjB,SAASJ,EACdK,EACAC,EACe,CACf,MAAMC,EAAQD,EAAS,OAEvB,GAAIC,EAAQF,EAAO,UACjB,MAAO,iBAAiBE,CAAK,oBAAoBF,EAAO,SAAS,GAEnE,GAAIA,EAAO,YAAcD,GAAmBG,EAAQF,EAAO,UACzD,MAAO,iBAAiBE,CAAK,oBAAoBF,EAAO,SAAS,GAGnE,QAAS,EAAI,EAAG,EAAIE,EAAO,IAAK,CAC9B,MAAMC,EACJ,EAAIH,EAAO,MAAM,OAASA,EAAO,MAAM,CAAC,EAAKA,EAAO,iBAChDI,EAAUH,EAAS,CAAC,EAE1B,GAAIE,EAAK,SAAWN,GAAaO,EAAQ,SACvC,MAAO,QAAQ,CAAC,yCAElB,GAAID,EAAK,SAAWL,GAAY,CAACM,EAAQ,SACvC,MAAO,QAAQ,CAAC,8CAElB,GAAID,EAAK,WAAaN,GAAaO,EAAQ,WACzC,MAAO,QAAQ,CAAC,yCAElB,GAAID,EAAK,WAAaL,GAAY,CAACM,EAAQ,WACzC,MAAO,QAAQ,CAAC,6CAEpB,CAEA,OAAO,IACT",
6
+ "names": ["accountSchema_exports", "__export", "checkAccountSchema", "__toCommonJS", "FORBIDDEN", "REQUIRED", "COUNT_UNBOUNDED", "schema", "accounts", "count", "slot", "account"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var s=require("vitest"),e=require("./accountSchema");function n(t,c){return{isWritable:t,isSigner:c}}const a={signer:"EITHER",writable:"EITHER"};(0,s.describe)("checkAccountSchema",()=>{(0,s.describe)("count bounds",()=>{(0,s.it)("passes when count == count_min == count_max",()=>{const t={count_min:2,count_max:2,remaining_policy:a,slots:[]},c=[n(!1,!1),n(!1,!1)];(0,s.expect)((0,e.checkAccountSchema)(t,c)).toBeNull()}),(0,s.it)("fails when count < count_min",()=>{const t={count_min:3,count_max:5,remaining_policy:a,slots:[]},c=[n(!1,!1),n(!1,!1)];(0,s.expect)((0,e.checkAccountSchema)(t,c)).toMatch(/below COUNT_MIN/)}),(0,s.it)("fails when count > count_max",()=>{const t={count_min:1,count_max:2,remaining_policy:a,slots:[]},c=[n(!1,!1),n(!1,!1),n(!1,!1)];(0,s.expect)((0,e.checkAccountSchema)(t,c)).toMatch(/above COUNT_MAX/)}),(0,s.it)("passes when count > count_max but count_max is COUNT_UNBOUNDED (255)",()=>{const t={count_min:0,count_max:255,remaining_policy:a,slots:[]},c=Array.from({length:300},()=>n(!1,!1));(0,s.expect)((0,e.checkAccountSchema)(t,c)).toBeNull()})}),(0,s.describe)("slot constraints \u2014 signer",()=>{(0,s.it)("passes when REQUIRED and account is a signer",()=>{(0,s.expect)((0,e.checkAccountSchema)({count_min:1,count_max:1,remaining_policy:a,slots:[{signer:"REQUIRED",writable:"EITHER"}]},[n(!1,!0)])).toBeNull()}),(0,s.it)("fails when REQUIRED and account is not a signer",()=>{(0,s.expect)((0,e.checkAccountSchema)({count_min:1,count_max:1,remaining_policy:a,slots:[{signer:"REQUIRED",writable:"EITHER"}]},[n(!1,!1)])).toMatch(/not a signer but the schema requires it/)}),(0,s.it)("passes when FORBIDDEN and account is not a signer",()=>{(0,s.expect)((0,e.checkAccountSchema)({count_min:1,count_max:1,remaining_policy:a,slots:[{signer:"FORBIDDEN",writable:"EITHER"}]},[n(!1,!1)])).toBeNull()}),(0,s.it)("fails when FORBIDDEN and account is a signer",()=>{(0,s.expect)((0,e.checkAccountSchema)({count_min:1,count_max:1,remaining_policy:a,slots:[{signer:"FORBIDDEN",writable:"EITHER"}]},[n(!1,!0)])).toMatch(/is a signer but the schema forbids it/)})}),(0,s.describe)("slot constraints \u2014 writable",()=>{(0,s.it)("passes when REQUIRED and account is writable",()=>{(0,s.expect)((0,e.checkAccountSchema)({count_min:1,count_max:1,remaining_policy:a,slots:[{signer:"EITHER",writable:"REQUIRED"}]},[n(!0,!1)])).toBeNull()}),(0,s.it)("fails when REQUIRED and account is not writable",()=>{(0,s.expect)((0,e.checkAccountSchema)({count_min:1,count_max:1,remaining_policy:a,slots:[{signer:"EITHER",writable:"REQUIRED"}]},[n(!1,!1)])).toMatch(/not writable but the schema requires it/)}),(0,s.it)("passes when FORBIDDEN and account is not writable",()=>{(0,s.expect)((0,e.checkAccountSchema)({count_min:1,count_max:1,remaining_policy:a,slots:[{signer:"EITHER",writable:"FORBIDDEN"}]},[n(!1,!1)])).toBeNull()}),(0,s.it)("fails when FORBIDDEN and account is writable",()=>{(0,s.expect)((0,e.checkAccountSchema)({count_min:1,count_max:1,remaining_policy:a,slots:[{signer:"EITHER",writable:"FORBIDDEN"}]},[n(!0,!1)])).toMatch(/is writable but the schema forbids it/)})}),(0,s.describe)("remaining_policy (accounts beyond slots array)",()=>{(0,s.it)("applies remaining_policy to slots beyond the slots array",()=>{const t={count_min:3,count_max:255,remaining_policy:{signer:"FORBIDDEN",writable:"EITHER"},slots:[a,a]},c=[n(!1,!1),n(!1,!1),n(!1,!0)];(0,s.expect)((0,e.checkAccountSchema)(t,c)).toMatch(/is a signer but the schema forbids it/)}),(0,s.it)("passes when remaining_policy matches remaining accounts",()=>{const t={count_min:3,count_max:255,remaining_policy:{signer:"FORBIDDEN",writable:"EITHER"},slots:[a,a]},c=[n(!1,!1),n(!1,!1),n(!0,!1)];(0,s.expect)((0,e.checkAccountSchema)(t,c)).toBeNull()})}),(0,s.describe)("error reports correct slot index",()=>{(0,s.it)("includes the failing slot index in the message",()=>{const t={count_min:3,count_max:3,remaining_policy:a,slots:[a,{signer:"REQUIRED",writable:"EITHER"},a]},c=[n(!1,!1),n(!1,!1),n(!1,!1)],o=(0,e.checkAccountSchema)(t,c);(0,s.expect)(o).toContain("slot 1")})})});
2
+ //# sourceMappingURL=accountSchema.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/app-binder/clear-sign/requirements/accountSchema.test.ts"],
4
+ "sourcesContent": ["import { describe, expect, it } from \"vitest\";\n\nimport { checkAccountSchema } from \"./accountSchema\";\nimport { type RequirementAccount } from \"./model\";\n\nfunction account(isWritable: boolean, isSigner: boolean): RequirementAccount {\n return { isWritable, isSigner };\n}\n\nconst EITHER: { signer: \"EITHER\"; writable: \"EITHER\" } = {\n signer: \"EITHER\",\n writable: \"EITHER\",\n};\n\ndescribe(\"checkAccountSchema\", () => {\n describe(\"count bounds\", () => {\n it(\"passes when count == count_min == count_max\", () => {\n const schema = {\n count_min: 2,\n count_max: 2,\n remaining_policy: EITHER,\n slots: [],\n };\n const accounts = [account(false, false), account(false, false)];\n expect(checkAccountSchema(schema, accounts)).toBeNull();\n });\n\n it(\"fails when count < count_min\", () => {\n const schema = {\n count_min: 3,\n count_max: 5,\n remaining_policy: EITHER,\n slots: [],\n };\n const accounts = [account(false, false), account(false, false)];\n expect(checkAccountSchema(schema, accounts)).toMatch(/below COUNT_MIN/);\n });\n\n it(\"fails when count > count_max\", () => {\n const schema = {\n count_min: 1,\n count_max: 2,\n remaining_policy: EITHER,\n slots: [],\n };\n const accounts = [\n account(false, false),\n account(false, false),\n account(false, false),\n ];\n expect(checkAccountSchema(schema, accounts)).toMatch(/above COUNT_MAX/);\n });\n\n it(\"passes when count > count_max but count_max is COUNT_UNBOUNDED (255)\", () => {\n const schema = {\n count_min: 0,\n count_max: 255,\n remaining_policy: EITHER,\n slots: [],\n };\n const accounts = Array.from({ length: 300 }, () => account(false, false));\n expect(checkAccountSchema(schema, accounts)).toBeNull();\n });\n });\n\n describe(\"slot constraints \u2014 signer\", () => {\n it(\"passes when REQUIRED and account is a signer\", () => {\n const schema = {\n count_min: 1,\n count_max: 1,\n remaining_policy: EITHER,\n slots: [{ signer: \"REQUIRED\" as const, writable: \"EITHER\" as const }],\n };\n expect(checkAccountSchema(schema, [account(false, true)])).toBeNull();\n });\n\n it(\"fails when REQUIRED and account is not a signer\", () => {\n const schema = {\n count_min: 1,\n count_max: 1,\n remaining_policy: EITHER,\n slots: [{ signer: \"REQUIRED\" as const, writable: \"EITHER\" as const }],\n };\n expect(checkAccountSchema(schema, [account(false, false)])).toMatch(\n /not a signer but the schema requires it/,\n );\n });\n\n it(\"passes when FORBIDDEN and account is not a signer\", () => {\n const schema = {\n count_min: 1,\n count_max: 1,\n remaining_policy: EITHER,\n slots: [{ signer: \"FORBIDDEN\" as const, writable: \"EITHER\" as const }],\n };\n expect(checkAccountSchema(schema, [account(false, false)])).toBeNull();\n });\n\n it(\"fails when FORBIDDEN and account is a signer\", () => {\n const schema = {\n count_min: 1,\n count_max: 1,\n remaining_policy: EITHER,\n slots: [{ signer: \"FORBIDDEN\" as const, writable: \"EITHER\" as const }],\n };\n expect(checkAccountSchema(schema, [account(false, true)])).toMatch(\n /is a signer but the schema forbids it/,\n );\n });\n });\n\n describe(\"slot constraints \u2014 writable\", () => {\n it(\"passes when REQUIRED and account is writable\", () => {\n const schema = {\n count_min: 1,\n count_max: 1,\n remaining_policy: EITHER,\n slots: [{ signer: \"EITHER\" as const, writable: \"REQUIRED\" as const }],\n };\n expect(checkAccountSchema(schema, [account(true, false)])).toBeNull();\n });\n\n it(\"fails when REQUIRED and account is not writable\", () => {\n const schema = {\n count_min: 1,\n count_max: 1,\n remaining_policy: EITHER,\n slots: [{ signer: \"EITHER\" as const, writable: \"REQUIRED\" as const }],\n };\n expect(checkAccountSchema(schema, [account(false, false)])).toMatch(\n /not writable but the schema requires it/,\n );\n });\n\n it(\"passes when FORBIDDEN and account is not writable\", () => {\n const schema = {\n count_min: 1,\n count_max: 1,\n remaining_policy: EITHER,\n slots: [{ signer: \"EITHER\" as const, writable: \"FORBIDDEN\" as const }],\n };\n expect(checkAccountSchema(schema, [account(false, false)])).toBeNull();\n });\n\n it(\"fails when FORBIDDEN and account is writable\", () => {\n const schema = {\n count_min: 1,\n count_max: 1,\n remaining_policy: EITHER,\n slots: [{ signer: \"EITHER\" as const, writable: \"FORBIDDEN\" as const }],\n };\n expect(checkAccountSchema(schema, [account(true, false)])).toMatch(\n /is writable but the schema forbids it/,\n );\n });\n });\n\n describe(\"remaining_policy (accounts beyond slots array)\", () => {\n it(\"applies remaining_policy to slots beyond the slots array\", () => {\n const schema = {\n count_min: 3,\n count_max: 255,\n remaining_policy: {\n signer: \"FORBIDDEN\" as const,\n writable: \"EITHER\" as const,\n },\n slots: [EITHER, EITHER],\n };\n const accounts = [\n account(false, false),\n account(false, false),\n account(false, true), // slot 2: no explicit slot \u2192 remaining_policy with FORBIDDEN signer\n ];\n expect(checkAccountSchema(schema, accounts)).toMatch(\n /is a signer but the schema forbids it/,\n );\n });\n\n it(\"passes when remaining_policy matches remaining accounts\", () => {\n const schema = {\n count_min: 3,\n count_max: 255,\n remaining_policy: {\n signer: \"FORBIDDEN\" as const,\n writable: \"EITHER\" as const,\n },\n slots: [EITHER, EITHER],\n };\n const accounts = [\n account(false, false),\n account(false, false),\n account(true, false), // not a signer \u2014 passes FORBIDDEN signer\n ];\n expect(checkAccountSchema(schema, accounts)).toBeNull();\n });\n });\n\n describe(\"error reports correct slot index\", () => {\n it(\"includes the failing slot index in the message\", () => {\n const schema = {\n count_min: 3,\n count_max: 3,\n remaining_policy: EITHER,\n slots: [\n EITHER,\n { signer: \"REQUIRED\" as const, writable: \"EITHER\" as const },\n EITHER,\n ],\n };\n const accounts = [\n account(false, false),\n account(false, false), // slot 1: needs to be signer\n account(false, false),\n ];\n const result = checkAccountSchema(schema, accounts);\n expect(result).toContain(\"slot 1\");\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAAqC,kBAErCC,EAAmC,2BAGnC,SAASC,EAAQC,EAAqBC,EAAuC,CAC3E,MAAO,CAAE,WAAAD,EAAY,SAAAC,CAAS,CAChC,CAEA,MAAMC,EAAmD,CACvD,OAAQ,SACR,SAAU,QACZ,KAEA,YAAS,qBAAsB,IAAM,IACnC,YAAS,eAAgB,IAAM,IAC7B,MAAG,8CAA+C,IAAM,CACtD,MAAMC,EAAS,CACb,UAAW,EACX,UAAW,EACX,iBAAkBD,EAClB,MAAO,CAAC,CACV,EACME,EAAW,CAACL,EAAQ,GAAO,EAAK,EAAGA,EAAQ,GAAO,EAAK,CAAC,KAC9D,aAAO,sBAAmBI,EAAQC,CAAQ,CAAC,EAAE,SAAS,CACxD,CAAC,KAED,MAAG,+BAAgC,IAAM,CACvC,MAAMD,EAAS,CACb,UAAW,EACX,UAAW,EACX,iBAAkBD,EAClB,MAAO,CAAC,CACV,EACME,EAAW,CAACL,EAAQ,GAAO,EAAK,EAAGA,EAAQ,GAAO,EAAK,CAAC,KAC9D,aAAO,sBAAmBI,EAAQC,CAAQ,CAAC,EAAE,QAAQ,iBAAiB,CACxE,CAAC,KAED,MAAG,+BAAgC,IAAM,CACvC,MAAMD,EAAS,CACb,UAAW,EACX,UAAW,EACX,iBAAkBD,EAClB,MAAO,CAAC,CACV,EACME,EAAW,CACfL,EAAQ,GAAO,EAAK,EACpBA,EAAQ,GAAO,EAAK,EACpBA,EAAQ,GAAO,EAAK,CACtB,KACA,aAAO,sBAAmBI,EAAQC,CAAQ,CAAC,EAAE,QAAQ,iBAAiB,CACxE,CAAC,KAED,MAAG,uEAAwE,IAAM,CAC/E,MAAMD,EAAS,CACb,UAAW,EACX,UAAW,IACX,iBAAkBD,EAClB,MAAO,CAAC,CACV,EACME,EAAW,MAAM,KAAK,CAAE,OAAQ,GAAI,EAAG,IAAML,EAAQ,GAAO,EAAK,CAAC,KACxE,aAAO,sBAAmBI,EAAQC,CAAQ,CAAC,EAAE,SAAS,CACxD,CAAC,CACH,CAAC,KAED,YAAS,iCAA6B,IAAM,IAC1C,MAAG,+CAAgD,IAAM,IAOvD,aAAO,sBANQ,CACb,UAAW,EACX,UAAW,EACX,iBAAkBF,EAClB,MAAO,CAAC,CAAE,OAAQ,WAAqB,SAAU,QAAkB,CAAC,CACtE,EACkC,CAACH,EAAQ,GAAO,EAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CACtE,CAAC,KAED,MAAG,kDAAmD,IAAM,IAO1D,aAAO,sBANQ,CACb,UAAW,EACX,UAAW,EACX,iBAAkBG,EAClB,MAAO,CAAC,CAAE,OAAQ,WAAqB,SAAU,QAAkB,CAAC,CACtE,EACkC,CAACH,EAAQ,GAAO,EAAK,CAAC,CAAC,CAAC,EAAE,QAC1D,yCACF,CACF,CAAC,KAED,MAAG,oDAAqD,IAAM,IAO5D,aAAO,sBANQ,CACb,UAAW,EACX,UAAW,EACX,iBAAkBG,EAClB,MAAO,CAAC,CAAE,OAAQ,YAAsB,SAAU,QAAkB,CAAC,CACvE,EACkC,CAACH,EAAQ,GAAO,EAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CACvE,CAAC,KAED,MAAG,+CAAgD,IAAM,IAOvD,aAAO,sBANQ,CACb,UAAW,EACX,UAAW,EACX,iBAAkBG,EAClB,MAAO,CAAC,CAAE,OAAQ,YAAsB,SAAU,QAAkB,CAAC,CACvE,EACkC,CAACH,EAAQ,GAAO,EAAI,CAAC,CAAC,CAAC,EAAE,QACzD,uCACF,CACF,CAAC,CACH,CAAC,KAED,YAAS,mCAA+B,IAAM,IAC5C,MAAG,+CAAgD,IAAM,IAOvD,aAAO,sBANQ,CACb,UAAW,EACX,UAAW,EACX,iBAAkBG,EAClB,MAAO,CAAC,CAAE,OAAQ,SAAmB,SAAU,UAAoB,CAAC,CACtE,EACkC,CAACH,EAAQ,GAAM,EAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CACtE,CAAC,KAED,MAAG,kDAAmD,IAAM,IAO1D,aAAO,sBANQ,CACb,UAAW,EACX,UAAW,EACX,iBAAkBG,EAClB,MAAO,CAAC,CAAE,OAAQ,SAAmB,SAAU,UAAoB,CAAC,CACtE,EACkC,CAACH,EAAQ,GAAO,EAAK,CAAC,CAAC,CAAC,EAAE,QAC1D,yCACF,CACF,CAAC,KAED,MAAG,oDAAqD,IAAM,IAO5D,aAAO,sBANQ,CACb,UAAW,EACX,UAAW,EACX,iBAAkBG,EAClB,MAAO,CAAC,CAAE,OAAQ,SAAmB,SAAU,WAAqB,CAAC,CACvE,EACkC,CAACH,EAAQ,GAAO,EAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CACvE,CAAC,KAED,MAAG,+CAAgD,IAAM,IAOvD,aAAO,sBANQ,CACb,UAAW,EACX,UAAW,EACX,iBAAkBG,EAClB,MAAO,CAAC,CAAE,OAAQ,SAAmB,SAAU,WAAqB,CAAC,CACvE,EACkC,CAACH,EAAQ,GAAM,EAAK,CAAC,CAAC,CAAC,EAAE,QACzD,uCACF,CACF,CAAC,CACH,CAAC,KAED,YAAS,iDAAkD,IAAM,IAC/D,MAAG,2DAA4D,IAAM,CACnE,MAAMI,EAAS,CACb,UAAW,EACX,UAAW,IACX,iBAAkB,CAChB,OAAQ,YACR,SAAU,QACZ,EACA,MAAO,CAACD,EAAQA,CAAM,CACxB,EACME,EAAW,CACfL,EAAQ,GAAO,EAAK,EACpBA,EAAQ,GAAO,EAAK,EACpBA,EAAQ,GAAO,EAAI,CACrB,KACA,aAAO,sBAAmBI,EAAQC,CAAQ,CAAC,EAAE,QAC3C,uCACF,CACF,CAAC,KAED,MAAG,0DAA2D,IAAM,CAClE,MAAMD,EAAS,CACb,UAAW,EACX,UAAW,IACX,iBAAkB,CAChB,OAAQ,YACR,SAAU,QACZ,EACA,MAAO,CAACD,EAAQA,CAAM,CACxB,EACME,EAAW,CACfL,EAAQ,GAAO,EAAK,EACpBA,EAAQ,GAAO,EAAK,EACpBA,EAAQ,GAAM,EAAK,CACrB,KACA,aAAO,sBAAmBI,EAAQC,CAAQ,CAAC,EAAE,SAAS,CACxD,CAAC,CACH,CAAC,KAED,YAAS,mCAAoC,IAAM,IACjD,MAAG,iDAAkD,IAAM,CACzD,MAAMD,EAAS,CACb,UAAW,EACX,UAAW,EACX,iBAAkBD,EAClB,MAAO,CACLA,EACA,CAAE,OAAQ,WAAqB,SAAU,QAAkB,EAC3DA,CACF,CACF,EACME,EAAW,CACfL,EAAQ,GAAO,EAAK,EACpBA,EAAQ,GAAO,EAAK,EACpBA,EAAQ,GAAO,EAAK,CACtB,EACMM,KAAS,sBAAmBF,EAAQC,CAAQ,KAClD,UAAOC,CAAM,EAAE,UAAU,QAAQ,CACnC,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_vitest", "import_accountSchema", "account", "isWritable", "isSigner", "EITHER", "schema", "accounts", "result"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var f=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var x=(r,n)=>{for(var i in n)f(r,i,{get:n[i],enumerable:!0})},A=(r,n,i,c)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of b(n))!h.call(r,t)&&t!==i&&f(r,t,{get:()=>n[t],enumerable:!(c=q(n,t))||c.enumerable});return r};var B=r=>A(f({},"__esModule",{value:!0}),r);var D={};x(D,{buildRequirements:()=>V});module.exports=B(D);var m=require("purify-ts"),l=require("../../../app-binder/clear-sign/idl-type-pool"),E=require("../../../app-binder/services/bs58Encoder"),R=require("./parseInstruction"),y=require("./RequirementAccumulator"),I=require("./RequirementsError"),o=require("./rules");function M(r,n){const i=new Map;return r.forEach((c,t)=>{const{accounts:u}=c.instruction;for(const{accountIndex:d,mintIndex:e}of n[t].info.mintAssociations){const s=u[d]?.address,a=u[e]?.address;s!==void 0&&a!==void 0&&i.set(s,a)}}),i}function V(r,n={}){const i=n.selectEnumVariants??l.findSelectedEnumVariants,c=n.bs58Encoder??E.DefaultBs58Encoder;try{const t=new y.RequirementAccumulator,u=r.map(e=>({match:e,records:(0,R.parseInstructionDescriptor)(e.descriptor)})),d=M(r,u.map(({records:e})=>e));for(const{match:e,records:s}of u){(0,o.applyInstructionInfoRule)(e,t);const a=(0,o.applyEnumVariantRule)(e,t,i,s.info.typePool,s.info.rootType).extract();if(a)return(0,m.Left)(a);(0,o.applyTokenRule)(s,e.instruction,d,t,c),(0,o.applyAltResolutionRule)(s,e.instruction,t);for(const{mintIndex:g}of s.info.mintAssociations){const p=e.instruction.accounts[g];p?.altRef!==void 0&&t.addMintAltRef(p.altRef.altAddress,p.altRef.entryIndex)}(0,o.applyTrustedNameRule)(s,e.instruction,t,c)}return(0,m.Right)(t.build())}catch(t){return(0,m.Left)(new I.RequirementsDecodeError(t instanceof Error?t.message:String(t)))}}0&&(module.exports={buildRequirements});
1
+ "use strict";var y=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var S=(r,e)=>{for(var c in e)y(r,c,{get:e[c],enumerable:!0})},b=(r,e,c,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of B(e))!M.call(r,t)&&t!==c&&y(r,t,{get:()=>e[t],enumerable:!(s=w(e,t))||s.enumerable});return r};var V=r=>b(y({},"__esModule",{value:!0}),r);var P={};S(P,{buildRequirements:()=>D});module.exports=V(P);var a=require("purify-ts"),h=require("../../../app-binder/clear-sign/idl-type-pool"),A=require("../../../app-binder/services/bs58Encoder"),I=require("./accountSchema"),g=require("./parseInstruction"),x=require("./RequirementAccumulator"),E=require("./RequirementsError"),i=require("./rules"),q=require("./valueResolution");function T(r,e,c){const s=new Map,t=new Map;return r.forEach((d,R)=>{const{accounts:n}=d.instruction,{mintAssociations:o,ownerAssociations:l}=e[R].info;for(const{accountIndex:m,mintIndex:u}of o){const f=n[m]?.address,p=n[u]?.address;f!==void 0&&p!==void 0&&s.set(f,p)}for(const{accountIndex:m,owner:u}of l){const f=n[m]?.address,p=(0,q.resolvePubkeyValue)(u,d.instruction,c);f!==void 0&&p!==void 0&&t.set(f,p)}}),{mints:s,owners:t}}function D(r,e={}){const c=e.selectEnumVariants??h.findSelectedEnumVariants,s=e.bs58Encoder??A.DefaultBs58Encoder;try{for(const n of r){if(n.descriptor.accountSchema===void 0)continue;const o=(0,I.checkAccountSchema)(n.descriptor.accountSchema,n.instruction.accounts);if(o!==null)return(0,a.Left)(new E.AccountSchemaMismatchError(`ACCOUNT_SCHEMA mismatch for (${n.descriptor.discriminator}): ${o}`))}const t=new x.RequirementAccumulator,d=r.map(n=>({match:n,records:(0,g.parseInstructionDescriptor)(n.descriptor)})),R=T(r,d.map(({records:n})=>n),s);for(const{match:n,records:o}of d){(0,i.applyInstructionInfoRule)(n,t);const l=(0,i.applyEnumVariantRule)(n,t,c,o.info.typePool,o.info.rootType).extract();if(l)return(0,a.Left)(l);(0,i.applyTokenRule)(o,n.instruction,R,t,s),(0,i.applyAltResolutionRule)(o,n.instruction,t);for(const{mintIndex:m}of o.info.mintAssociations){const u=n.instruction.accounts[m];u?.altRef!==void 0&&t.addMintAltRef(u.altRef.altAddress,u.altRef.entryIndex)}(0,i.applyTrustedNameRule)(o,n.instruction,t,s)}return(0,a.Right)(t.build())}catch(t){return(0,a.Left)(new E.RequirementsDecodeError(t instanceof Error?t.message:String(t)))}}0&&(module.exports={buildRequirements});
2
2
  //# sourceMappingURL=buildRequirements.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/clear-sign/requirements/buildRequirements.ts"],
4
- "sourcesContent": ["import { type Either, Left, Right } from \"purify-ts\";\n\nimport { findSelectedEnumVariants } from \"@internal/app-binder/clear-sign/idl-type-pool\";\nimport {\n type Bs58Encoder,\n DefaultBs58Encoder,\n} from \"@internal/app-binder/services/bs58Encoder\";\n\nimport { type DescriptorRequirements, type MatchedInstruction } from \"./model\";\nimport { parseInstructionDescriptor } from \"./parseInstruction\";\nimport { type ParsedInstruction } from \"./records\";\nimport { RequirementAccumulator } from \"./RequirementAccumulator\";\nimport {\n RequirementsDecodeError,\n type RequirementsError,\n} from \"./RequirementsError\";\nimport {\n applyAltResolutionRule,\n applyEnumVariantRule,\n applyInstructionInfoRule,\n applyTokenRule,\n applyTrustedNameRule,\n type EnumVariantSelector,\n} from \"./rules\";\n\nexport type BuildRequirementsOptions = {\n /** Enum-variant decoder; defaults to the real type-pool decoder. */\n selectEnumVariants?: EnumVariantSelector;\n /** Base58 encoder for pubkey constants; defaults to {@link DefaultBs58Encoder}. */\n bs58Encoder?: Bs58Encoder;\n};\n\n/** TX-derived `MINT_ASSOC` bindings: token-account address to mint address. */\nfunction buildMintBindings(\n matched: MatchedInstruction[],\n parsed: ParsedInstruction[],\n): Map<string, string> {\n const bindings = new Map<string, string>();\n matched.forEach((match, index) => {\n const { accounts } = match.instruction;\n for (const { accountIndex, mintIndex } of parsed[index]!.info\n .mintAssociations) {\n const account = accounts[accountIndex]?.address;\n const mint = accounts[mintIndex]?.address;\n if (account !== undefined && mint !== undefined) {\n bindings.set(account, mint);\n }\n }\n });\n return bindings;\n}\n\n/**\n * Given every TX instruction matched to its CAL descriptor, compute the\n * deduplicated set of extra descriptors the device must fetch. Pure and\n * deterministic; malformed descriptors surface as a typed\n * {@link RequirementsError} `Left`.\n */\nexport function buildRequirements(\n matched: MatchedInstruction[],\n options: BuildRequirementsOptions = {},\n): Either<RequirementsError, DescriptorRequirements> {\n const selectEnumVariants =\n options.selectEnumVariants ?? findSelectedEnumVariants;\n const bs58Encoder = options.bs58Encoder ?? DefaultBs58Encoder;\n try {\n const accumulator = new RequirementAccumulator();\n const instructions = matched.map((match) => ({\n match,\n records: parseInstructionDescriptor(match.descriptor),\n }));\n const mintBindings = buildMintBindings(\n matched,\n instructions.map(({ records }) => records),\n );\n\n for (const { match, records } of instructions) {\n applyInstructionInfoRule(match, accumulator);\n\n const decodeFailure = applyEnumVariantRule(\n match,\n accumulator,\n selectEnumVariants,\n records.info.typePool,\n records.info.rootType,\n ).extract();\n if (decodeFailure) return Left(decodeFailure);\n\n applyTokenRule(\n records,\n match.instruction,\n mintBindings,\n accumulator,\n bs58Encoder,\n );\n applyAltResolutionRule(records, match.instruction, accumulator);\n\n // Identify ALT-backed mint accounts from MINT_ASSOCIATIONS: the device\n // signals these via 0x6d10 after receiving their ALT_RESOLUTION and\n // requires TOKEN_INFO immediately after. They are excluded from the plain\n // altResolutions loop and handled with hold-and-conditionally-stream.\n for (const { mintIndex } of records.info.mintAssociations) {\n const mintAccount = match.instruction.accounts[mintIndex];\n if (mintAccount?.altRef !== undefined) {\n accumulator.addMintAltRef(\n mintAccount.altRef.altAddress,\n mintAccount.altRef.entryIndex,\n );\n }\n }\n\n applyTrustedNameRule(\n records,\n match.instruction,\n accumulator,\n bs58Encoder,\n );\n }\n\n return Right(accumulator.build());\n } catch (error) {\n // Parsers (e.g. poolFromJson) signal malformed descriptors by throwing.\n return Left(\n new RequirementsDecodeError(\n error instanceof Error ? error.message : String(error),\n ),\n );\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyC,qBAEzCC,EAAyC,yDACzCC,EAGO,qDAGPC,EAA2C,8BAE3CC,EAAuC,oCACvCC,EAGO,+BACPC,EAOO,mBAUP,SAASC,EACPC,EACAC,EACqB,CACrB,MAAMC,EAAW,IAAI,IACrB,OAAAF,EAAQ,QAAQ,CAACG,EAAOC,IAAU,CAChC,KAAM,CAAE,SAAAC,CAAS,EAAIF,EAAM,YAC3B,SAAW,CAAE,aAAAG,EAAc,UAAAC,CAAU,IAAKN,EAAOG,CAAK,EAAG,KACtD,iBAAkB,CACnB,MAAMI,EAAUH,EAASC,CAAY,GAAG,QAClCG,EAAOJ,EAASE,CAAS,GAAG,QAC9BC,IAAY,QAAaC,IAAS,QACpCP,EAAS,IAAIM,EAASC,CAAI,CAE9B,CACF,CAAC,EACMP,CACT,CAQO,SAASZ,EACdU,EACAU,EAAoC,CAAC,EACc,CACnD,MAAMC,EACJD,EAAQ,oBAAsB,2BAC1BE,EAAcF,EAAQ,aAAe,qBAC3C,GAAI,CACF,MAAMG,EAAc,IAAI,yBAClBC,EAAed,EAAQ,IAAKG,IAAW,CAC3C,MAAAA,EACA,WAAS,8BAA2BA,EAAM,UAAU,CACtD,EAAE,EACIY,EAAehB,EACnBC,EACAc,EAAa,IAAI,CAAC,CAAE,QAAAE,CAAQ,IAAMA,CAAO,CAC3C,EAEA,SAAW,CAAE,MAAAb,EAAO,QAAAa,CAAQ,IAAKF,EAAc,IAC7C,4BAAyBX,EAAOU,CAAW,EAE3C,MAAMI,KAAgB,wBACpBd,EACAU,EACAF,EACAK,EAAQ,KAAK,SACbA,EAAQ,KAAK,QACf,EAAE,QAAQ,EACV,GAAIC,EAAe,SAAO,QAAKA,CAAa,KAE5C,kBACED,EACAb,EAAM,YACNY,EACAF,EACAD,CACF,KACA,0BAAuBI,EAASb,EAAM,YAAaU,CAAW,EAM9D,SAAW,CAAE,UAAAN,CAAU,IAAKS,EAAQ,KAAK,iBAAkB,CACzD,MAAME,EAAcf,EAAM,YAAY,SAASI,CAAS,EACpDW,GAAa,SAAW,QAC1BL,EAAY,cACVK,EAAY,OAAO,WACnBA,EAAY,OAAO,UACrB,CAEJ,IAEA,wBACEF,EACAb,EAAM,YACNU,EACAD,CACF,CACF,CAEA,SAAO,SAAMC,EAAY,MAAM,CAAC,CAClC,OAASM,EAAO,CAEd,SAAO,QACL,IAAI,0BACFA,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CACvD,CACF,CACF,CACF",
6
- "names": ["buildRequirements_exports", "__export", "buildRequirements", "__toCommonJS", "import_purify_ts", "import_idl_type_pool", "import_bs58Encoder", "import_parseInstruction", "import_RequirementAccumulator", "import_RequirementsError", "import_rules", "buildMintBindings", "matched", "parsed", "bindings", "match", "index", "accounts", "accountIndex", "mintIndex", "account", "mint", "options", "selectEnumVariants", "bs58Encoder", "accumulator", "instructions", "mintBindings", "records", "decodeFailure", "mintAccount", "error"]
4
+ "sourcesContent": ["import { type Either, Left, Right } from \"purify-ts\";\n\nimport { findSelectedEnumVariants } from \"@internal/app-binder/clear-sign/idl-type-pool\";\nimport {\n type Bs58Encoder,\n DefaultBs58Encoder,\n} from \"@internal/app-binder/services/bs58Encoder\";\n\nimport { checkAccountSchema } from \"./accountSchema\";\nimport {\n type DescriptorRequirements,\n type MatchedInstruction,\n type TxBindings,\n} from \"./model\";\nimport { parseInstructionDescriptor } from \"./parseInstruction\";\nimport { type ParsedInstruction } from \"./records\";\nimport { RequirementAccumulator } from \"./RequirementAccumulator\";\nimport {\n AccountSchemaMismatchError,\n RequirementsDecodeError,\n type RequirementsError,\n} from \"./RequirementsError\";\nimport {\n applyAltResolutionRule,\n applyEnumVariantRule,\n applyInstructionInfoRule,\n applyTokenRule,\n applyTrustedNameRule,\n type EnumVariantSelector,\n} from \"./rules\";\nimport { resolvePubkeyValue } from \"./valueResolution\";\n\nexport type BuildRequirementsOptions = {\n /** Enum-variant decoder; defaults to the real type-pool decoder. */\n selectEnumVariants?: EnumVariantSelector;\n /** Base58 encoder for pubkey constants; defaults to {@link DefaultBs58Encoder}. */\n bs58Encoder?: Bs58Encoder;\n};\n\n/**\n * The TX-derived binding maps, both scoped to the whole transaction: token\n * account to mint (`MINT_ASSOC`) and token account to owner (`OWNER_ASSOC`).\n * Slots that stay unresolved host-side (ALT-backed, or out of range) contribute\n * no binding \u2014 the device then falls back to the attested descriptors, which is\n * exactly what the rules request for an uncovered account.\n */\nfunction buildTxBindings(\n matched: MatchedInstruction[],\n parsed: ParsedInstruction[],\n bs58Encoder: Bs58Encoder,\n): TxBindings {\n const mints = new Map<string, string>();\n const owners = new Map<string, string>();\n matched.forEach((match, index) => {\n const { accounts } = match.instruction;\n const { mintAssociations, ownerAssociations } = parsed[index]!.info;\n for (const { accountIndex, mintIndex } of mintAssociations) {\n const account = accounts[accountIndex]?.address;\n const mint = accounts[mintIndex]?.address;\n if (account !== undefined && mint !== undefined) {\n mints.set(account, mint);\n }\n }\n for (const { accountIndex, owner } of ownerAssociations) {\n const account = accounts[accountIndex]?.address;\n const ownerAddress = resolvePubkeyValue(\n owner,\n match.instruction,\n bs58Encoder,\n );\n if (account !== undefined && ownerAddress !== undefined) {\n owners.set(account, ownerAddress);\n }\n }\n });\n return { mints, owners };\n}\n\n/**\n * Given every TX instruction matched to its CAL descriptor, compute the\n * deduplicated set of extra descriptors the device must fetch. Pure and\n * deterministic; malformed descriptors surface as a typed\n * {@link RequirementsError} `Left`.\n */\nexport function buildRequirements(\n matched: MatchedInstruction[],\n options: BuildRequirementsOptions = {},\n): Either<RequirementsError, DescriptorRequirements> {\n const selectEnumVariants =\n options.selectEnumVariants ?? findSelectedEnumVariants;\n const bs58Encoder = options.bs58Encoder ?? DefaultBs58Encoder;\n try {\n // ACCOUNT_SCHEMA pre-check: validate every matched instruction's live\n // accounts against its descriptor's schema *before* parsing or binding\n // anything else. Doing this in its own pass over the whole transaction\n // (rather than interleaved with the per-instruction rules below) means a\n // stale descriptor is always reported as AccountSchemaMismatchError, even\n // when an earlier instruction would otherwise fail first for an unrelated\n // reason (e.g. a decode error) and short-circuit the main loop.\n for (const match of matched) {\n if (match.descriptor.accountSchema === undefined) continue;\n const schemaMismatch = checkAccountSchema(\n match.descriptor.accountSchema,\n match.instruction.accounts,\n );\n if (schemaMismatch !== null) {\n return Left(\n new AccountSchemaMismatchError(\n `ACCOUNT_SCHEMA mismatch for (${match.descriptor.discriminator}): ${schemaMismatch}`,\n ),\n );\n }\n }\n\n const accumulator = new RequirementAccumulator();\n const instructions = matched.map((match) => ({\n match,\n records: parseInstructionDescriptor(match.descriptor),\n }));\n const bindings = buildTxBindings(\n matched,\n instructions.map(({ records }) => records),\n bs58Encoder,\n );\n\n for (const { match, records } of instructions) {\n applyInstructionInfoRule(match, accumulator);\n\n const decodeFailure = applyEnumVariantRule(\n match,\n accumulator,\n selectEnumVariants,\n records.info.typePool,\n records.info.rootType,\n ).extract();\n if (decodeFailure) return Left(decodeFailure);\n\n applyTokenRule(\n records,\n match.instruction,\n bindings,\n accumulator,\n bs58Encoder,\n );\n applyAltResolutionRule(records, match.instruction, accumulator);\n\n // Identify ALT-backed mint accounts from MINT_ASSOCIATIONS: the device\n // signals these via 0x6d10 after receiving their ALT_RESOLUTION and\n // requires TOKEN_INFO immediately after. They are excluded from the plain\n // altResolutions loop and handled with hold-and-conditionally-stream.\n for (const { mintIndex } of records.info.mintAssociations) {\n const mintAccount = match.instruction.accounts[mintIndex];\n if (mintAccount?.altRef !== undefined) {\n accumulator.addMintAltRef(\n mintAccount.altRef.altAddress,\n mintAccount.altRef.entryIndex,\n );\n }\n }\n\n applyTrustedNameRule(\n records,\n match.instruction,\n accumulator,\n bs58Encoder,\n );\n }\n\n return Right(accumulator.build());\n } catch (error) {\n // Parsers (e.g. poolFromJson) signal malformed descriptors by throwing.\n return Left(\n new RequirementsDecodeError(\n error instanceof Error ? error.message : String(error),\n ),\n );\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyC,qBAEzCC,EAAyC,yDACzCC,EAGO,qDAEPC,EAAmC,2BAMnCC,EAA2C,8BAE3CC,EAAuC,oCACvCC,EAIO,+BACPC,EAOO,mBACPC,EAAmC,6BAgBnC,SAASC,EACPC,EACAC,EACAC,EACY,CACZ,MAAMC,EAAQ,IAAI,IACZC,EAAS,IAAI,IACnB,OAAAJ,EAAQ,QAAQ,CAACK,EAAOC,IAAU,CAChC,KAAM,CAAE,SAAAC,CAAS,EAAIF,EAAM,YACrB,CAAE,iBAAAG,EAAkB,kBAAAC,CAAkB,EAAIR,EAAOK,CAAK,EAAG,KAC/D,SAAW,CAAE,aAAAI,EAAc,UAAAC,CAAU,IAAKH,EAAkB,CAC1D,MAAMI,EAAUL,EAASG,CAAY,GAAG,QAClCG,EAAON,EAASI,CAAS,GAAG,QAC9BC,IAAY,QAAaC,IAAS,QACpCV,EAAM,IAAIS,EAASC,CAAI,CAE3B,CACA,SAAW,CAAE,aAAAH,EAAc,MAAAI,CAAM,IAAKL,EAAmB,CACvD,MAAMG,EAAUL,EAASG,CAAY,GAAG,QAClCK,KAAe,sBACnBD,EACAT,EAAM,YACNH,CACF,EACIU,IAAY,QAAaG,IAAiB,QAC5CX,EAAO,IAAIQ,EAASG,CAAY,CAEpC,CACF,CAAC,EACM,CAAE,MAAAZ,EAAO,OAAAC,CAAO,CACzB,CAQO,SAAShB,EACdY,EACAgB,EAAoC,CAAC,EACc,CACnD,MAAMC,EACJD,EAAQ,oBAAsB,2BAC1Bd,EAAcc,EAAQ,aAAe,qBAC3C,GAAI,CAQF,UAAWX,KAASL,EAAS,CAC3B,GAAIK,EAAM,WAAW,gBAAkB,OAAW,SAClD,MAAMa,KAAiB,sBACrBb,EAAM,WAAW,cACjBA,EAAM,YAAY,QACpB,EACA,GAAIa,IAAmB,KACrB,SAAO,QACL,IAAI,6BACF,gCAAgCb,EAAM,WAAW,aAAa,MAAMa,CAAc,EACpF,CACF,CAEJ,CAEA,MAAMC,EAAc,IAAI,yBAClBC,EAAepB,EAAQ,IAAKK,IAAW,CAC3C,MAAAA,EACA,WAAS,8BAA2BA,EAAM,UAAU,CACtD,EAAE,EACIgB,EAAWtB,EACfC,EACAoB,EAAa,IAAI,CAAC,CAAE,QAAAE,CAAQ,IAAMA,CAAO,EACzCpB,CACF,EAEA,SAAW,CAAE,MAAAG,EAAO,QAAAiB,CAAQ,IAAKF,EAAc,IAC7C,4BAAyBf,EAAOc,CAAW,EAE3C,MAAMI,KAAgB,wBACpBlB,EACAc,EACAF,EACAK,EAAQ,KAAK,SACbA,EAAQ,KAAK,QACf,EAAE,QAAQ,EACV,GAAIC,EAAe,SAAO,QAAKA,CAAa,KAE5C,kBACED,EACAjB,EAAM,YACNgB,EACAF,EACAjB,CACF,KACA,0BAAuBoB,EAASjB,EAAM,YAAac,CAAW,EAM9D,SAAW,CAAE,UAAAR,CAAU,IAAKW,EAAQ,KAAK,iBAAkB,CACzD,MAAME,EAAcnB,EAAM,YAAY,SAASM,CAAS,EACpDa,GAAa,SAAW,QAC1BL,EAAY,cACVK,EAAY,OAAO,WACnBA,EAAY,OAAO,UACrB,CAEJ,IAEA,wBACEF,EACAjB,EAAM,YACNc,EACAjB,CACF,CACF,CAEA,SAAO,SAAMiB,EAAY,MAAM,CAAC,CAClC,OAASM,EAAO,CAEd,SAAO,QACL,IAAI,0BACFA,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CACvD,CACF,CACF,CACF",
6
+ "names": ["buildRequirements_exports", "__export", "buildRequirements", "__toCommonJS", "import_purify_ts", "import_idl_type_pool", "import_bs58Encoder", "import_accountSchema", "import_parseInstruction", "import_RequirementAccumulator", "import_RequirementsError", "import_rules", "import_valueResolution", "buildTxBindings", "matched", "parsed", "bs58Encoder", "mints", "owners", "match", "index", "accounts", "mintAssociations", "ownerAssociations", "accountIndex", "mintIndex", "account", "mint", "owner", "ownerAddress", "options", "selectEnumVariants", "schemaMismatch", "accumulator", "instructions", "bindings", "records", "decodeFailure", "mintAccount", "error"]
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"),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))})});
1
+ "use strict";var E=require("purify-ts"),u=require("../../../app-binder/services/bs58Encoder"),e=require("./__tests__/fixtures/calBuilders"),d=require("./buildRequirements"),s=require("./records"),A=require("./RequirementsError");const m=new Map,p=()=>(0,E.Right)([]);function n(t,o,r=!1){return{address:t,altRef:o,isWritable:r,isSigner:!1}}function i(t,o={}){const r=["DIRECT","RESOLVE","NULL","NATIVE"][t];return(0,e.valueFlowPort)({accountIndex:o.accountIndex??0,activeWhen:o.activeWhen,tokenValue:(0,e.tokenValue)(r,{accountIndex:o.tokenAccountIndex,fallbackAccount:o.fallbackAccount,value:o.value})})}function c(t){return{instruction:{programId:t.programId??"Prog",accounts:t.accounts,data:t.data??new Uint8Array},descriptor:(0,e.descriptor)({discriminator:t.discriminator??"00",enumCache:m,...t.descriptor})}}function a(t,o=p){return(0,d.buildRequirements)(t,{selectEnumVariants:o}).unsafeCoerce()}describe("buildRequirements",()=>{it("System transfer: only INSTRUCTION_INFO, native port pulls no token info",()=>{const t=a([c({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=a([c({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=a([c({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=a([c({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=a([c({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=a([c({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=a([c({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=a([c({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=a([c({accounts:[n("ata")],descriptor:{accountResets:[(0,e.accountReset)({accountIndex:0})]}})]);expect(t.tokenAccountStates).toEqual([])}),it("multiple resets sharing one account_index are each kept (no deduplication)",()=>{const t=a([c({accounts:[n("ata")],descriptor:{accountResets:[(0,e.accountReset)({accountIndex:0,valueKind:"NATIVE",requirePreBalanceZero:!0}),(0,e.accountReset)({accountIndex:0,valueKind:"SPL_TOKEN",requirePreBalanceZero:!0,token:{kind:"DIRECT"}})]}})]);expect(t.tokenAccountStates).toEqual(["ata"])}),it("emits ALT_RESOLUTION only for accounts referenced by DISPLAY_FIELD ACCOUNT_PATH or MINT_ASSOC",()=>{const t=a([c({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=a([c({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=a([c({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=a([c({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)([c({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=()=>c({programId:"P",discriminator:"01",accounts:[n("a")],descriptor:{valueFlowPorts:[i(s.TokenKind.DIRECT,{value:(0,e.constantValue)(t)})]}}),r=a([o(),o()]);expect(r.instructionInfos).toEqual([{programId:"P",discriminator:"01"}]),expect(r.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),r=()=>(0,E.Right)([{enumId:"swap",variantIndex:46}]),l=a([c({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)})]}})],r);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=c({programId:"P",accounts:[],descriptor:{idlDescriptor:{type_pool:[{index:0,kind:"NOT_A_KIND"}],root_type:0}}}),o=(0,d.buildRequirements)([t],{selectEnumVariants:p});expect(o.isLeft()).toBe(!0),o.ifLeft(r=>expect(r).toBeInstanceOf(A.RequirementsDecodeError))}),it("no accountSchema on the descriptor: check is skipped, requirements build normally",()=>{const t=a([c({accounts:[n("a"),n("b")],descriptor:{accountSchema:void 0}})]);expect(t.instructionInfos).toEqual([{programId:"Prog",discriminator:"00"}])}),it("accountSchema matches the live accounts: requirements build normally",()=>{const t=a([c({accounts:[n("a",void 0,!1),n("b",void 0,!0)],descriptor:{accountSchema:{count_min:2,count_max:2,remaining_policy:{signer:"EITHER",writable:"EITHER"},slots:[{signer:"EITHER",writable:"FORBIDDEN"},{signer:"EITHER",writable:"REQUIRED"}]}}})]);expect(t.instructionInfos).toEqual([{programId:"Prog",discriminator:"00"}])}),it("accountSchema mismatch: surfaces a typed AccountSchemaMismatchError Left and short-circuits",()=>{const t=c({discriminator:"AA",accounts:[n("a")],descriptor:{accountSchema:{count_min:2,count_max:2,remaining_policy:{signer:"EITHER",writable:"EITHER"},slots:[]}}}),o=(0,d.buildRequirements)([t],{selectEnumVariants:p});expect(o.isLeft()).toBe(!0),o.ifLeft(r=>{expect(r).toBeInstanceOf(A.AccountSchemaMismatchError),expect(r.originalError.message).toBe("ACCOUNT_SCHEMA mismatch for (AA): account count 1 below COUNT_MIN 2")})}),it("accountSchema mismatch on a later instruction still wins over an earlier unrelated decode error",()=>{const t=c({programId:"P",discriminator:"01",accounts:[],descriptor:{idlDescriptor:{type_pool:[{index:0,kind:"NOT_A_KIND"}],root_type:0}}}),o=c({discriminator:"AA",accounts:[n("a")],descriptor:{accountSchema:{count_min:2,count_max:2,remaining_policy:{signer:"EITHER",writable:"EITHER"},slots:[]}}}),r=(0,d.buildRequirements)([t,o],{selectEnumVariants:p});expect(r.isLeft()).toBe(!0),r.ifLeft(l=>expect(l).toBeInstanceOf(A.AccountSchemaMismatchError))}),it("emits ALT_RESOLUTION for a hide-rule target and an owner association behind an ALT",()=>{const t=r=>({isWritable:!1,isSigner:!1,altRef:{altAddress:"ALT",entryIndex:r}}),o=a([c({accounts:[n("signer"),t(3),t(4)],descriptor:{ownerAssociations:[(0,e.ownerAssociation)(1,(0,e.accountPathValue)(2))],hideRules:[(0,e.hideRule)({condition:"IS_SIGNER",target:(0,e.accountPathValue)(1)})]}})]);expect(o.tokenAccountStateAltRefs).toEqual([{altAddress:"ALT",entryIndex:3}]),expect(o.altResolutions).toEqual([{altAddress:"ALT",entryIndex:4}])}),it("emits TOKEN_ACCOUNT_STATE_ALT_REF for an ALT-backed IS_SIGNER hide-rule target",()=>{const t=a([c({accounts:[n(void 0,{altAddress:"ALT",entryIndex:5})],descriptor:{hideRules:[(0,e.hideRule)({condition:"IS_SIGNER",target:(0,e.accountPathValue)(0)})]}})]);expect(t.tokenAccountStateAltRefs).toEqual([{altAddress:"ALT",entryIndex:5}]),expect(t.altResolutions).toEqual([]),expect(t.tokenAccountStates).toEqual([])}),it("emits TOKEN_ACCOUNT_STATE_ALT_REF for an ALT-backed RESOLVE port token account",()=>{const t=a([c({accounts:[n(void 0,{altAddress:"ALT",entryIndex:1})],descriptor:{valueFlowPorts:[i(s.TokenKind.RESOLVE,{accountIndex:0})]}})]);expect(t.tokenAccountStateAltRefs).toEqual([{altAddress:"ALT",entryIndex:1}]),expect(t.tokenAccountStates).toEqual([])}),it("keeps an ALT-backed ACTIVE_WHEN IS_SIGNER port out of the plain ALT bucket",()=>{const t=a([c({accounts:[n(void 0,{altAddress:"ALT",entryIndex:2})],descriptor:{valueFlowPorts:[i(s.TokenKind.NULL,{accountIndex:0,activeWhen:["IS_SIGNER"]})]}})]);expect(t.tokenAccountStateAltRefs).toEqual([{altAddress:"ALT",entryIndex:2}]),expect(t.altResolutions).toEqual([])}),it("emits TOKEN_ACCOUNT_STATE for an IS_SIGNER hide-rule target, unless a TX-derived OWNER_ASSOC covers it",()=>{const t=a([c({accounts:[n("ata")],descriptor:{hideRules:[(0,e.hideRule)({condition:"IS_SIGNER",target:(0,e.accountPathValue)(0)})]}})]);expect(t.tokenAccountStates).toEqual(["ata"]);const o=a([c({accounts:[n("ata"),n("owner")],descriptor:{ownerAssociations:[(0,e.ownerAssociation)(0,(0,e.accountPathValue)(1))],hideRules:[(0,e.hideRule)({condition:"IS_SIGNER",target:(0,e.accountPathValue)(0)})]}})]);expect(o.tokenAccountStates).toEqual([])}),it("honours an OWNER_ASSOC declared by another instruction of the transaction",()=>{const t=a([c({programId:"Ata",accounts:[n("ata"),n("owner")],descriptor:{ownerAssociations:[(0,e.ownerAssociation)(0,(0,e.accountPathValue)(1))]}}),c({programId:"Token",accounts:[n("ata")],descriptor:{hideRules:[(0,e.hideRule)({condition:"IS_SIGNER",target:(0,e.accountPathValue)(0)})]}})]);expect(t.tokenAccountStates).toEqual([])}),it("treats a RESOLVE port's FALLBACK_ACCOUNT address as a mint candidate",()=>{const t=a([c({accounts:[n("ephemeralAta"),n("fallbackMint")],descriptor:{valueFlowPorts:[i(s.TokenKind.RESOLVE,{accountIndex:0,fallbackAccount:1})]}})]);expect(t.tokenInfos).toEqual(["fallbackMint"]),expect(t.tokenAccountStates).toEqual(["ephemeralAta"])}),it("still emits ALT_RESOLUTION for the target of a rule whose condition CAL did not name",()=>{const t=a([c({accounts:[n(void 0,{altAddress:"ALT",entryIndex:7})],descriptor:{hideRules:[{target:(0,e.accountPathValue)(0)},(0,e.hideRule)({condition:"IS_SIGNER",target:(0,e.accountPathValue)(0)})]}})]);expect(t.altResolutions).toEqual([]),expect(t.tokenAccountStateAltRefs).toEqual([{altAddress:"ALT",entryIndex:7}])})});
2
2
  //# sourceMappingURL=buildRequirements.test.js.map