rea-agents 4.1.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. package/README.md +184 -86
  2. package/bridge/android/ReaJadxBridge.java +247 -0
  3. package/bridge/native/NativeUIChildren.swift +27 -0
  4. package/bridge/native/ReaNativeUI.swift +30 -16
  5. package/dist/android/AndroidTargetSnapshot.js +5 -3
  6. package/dist/android/JadxAnalysis.js +8 -6
  7. package/dist/android/JadxConfiguration.js +19 -3
  8. package/dist/android/JadxMcpTransport.js +43 -16
  9. package/dist/android/JadxProtocol.js +8 -0
  10. package/dist/android/JadxProvider.js +117 -28
  11. package/dist/android/JadxRelease.js +8 -0
  12. package/dist/android/JadxSession.js +32 -18
  13. package/dist/application/AppBundleExecutable.js +141 -0
  14. package/dist/application/ArtifactInventory/classify.js +1 -1
  15. package/dist/application/ArtifactInventory/scanCanonical.js +1 -1
  16. package/dist/application/ArtifactInventory/scanReader.js +1 -1
  17. package/dist/application/ArtifactInventory.js +1 -1
  18. package/dist/application/BinaryTargetResolver.js +9 -64
  19. package/dist/application/CapabilityInventory.js +61 -3
  20. package/dist/application/ClientConfigurationDocument.js +72 -12
  21. package/dist/application/ClientRegistrationStatus.js +7 -8
  22. package/dist/application/DirectAnalysis.js +12 -14
  23. package/dist/application/DirectAnalysisStatus.js +4 -5
  24. package/dist/application/DoctorDiagnostics.js +3 -3
  25. package/dist/application/EnhancedTools.js +4 -4
  26. package/dist/application/EvidenceBundleCommands.js +1 -1
  27. package/dist/application/FilesystemSnapshot.js +20 -5
  28. package/dist/application/InvestigationProviders.js +6 -0
  29. package/dist/application/LinuxHopper.js +8 -2
  30. package/dist/application/OptionalObservationProviders.js +3 -0
  31. package/dist/application/ProcessCaptureCapability.js +1 -1
  32. package/dist/application/ProcessCaptureLifecycle.js +2 -2
  33. package/dist/application/ProcessCli.js +5 -1
  34. package/dist/application/ProcessHarness.js +20 -9
  35. package/dist/application/ReconstructionCoverageService.js +2 -6
  36. package/dist/application/ReconstructionObligationCandidates.js +5 -2
  37. package/dist/application/ReferenceSourceImport.js +2 -0
  38. package/dist/application/ReferenceSourceImportEntries.js +20 -3
  39. package/dist/application/ReferenceSourceImportTypes.js +5 -0
  40. package/dist/application/Setup.js +10 -2
  41. package/dist/application/SetupClientConfiguration.js +19 -16
  42. package/dist/application/SetupHost.js +18 -3
  43. package/dist/application/SetupPlan.js +1 -1
  44. package/dist/application/Uninstall.js +23 -17
  45. package/dist/application/UpdateMaintenance.js +3 -3
  46. package/dist/application/ValidateSelectedWebScript.js +27 -0
  47. package/dist/application/WebModuleTraceService.js +209 -0
  48. package/dist/application/WebRuntimeService.js +73 -0
  49. package/dist/application/WebScriptExportService.js +115 -0
  50. package/dist/application/WebSourceLocationService.js +160 -0
  51. package/dist/application/{AndroidAnalysisService.js → android/AndroidAnalysisService.js} +6 -6
  52. package/dist/application/{AndroidApplicationService.js → android/AndroidApplicationService.js} +3 -3
  53. package/dist/application/{AppleApplicationService.js → apple/AppleApplicationService.js} +5 -5
  54. package/dist/application/{AnalysisClientCleanup.js → binary/AnalysisClientCleanup.js} +2 -2
  55. package/dist/application/{AnalysisProviderEvaluation.js → binary/AnalysisProviderEvaluation.js} +4 -4
  56. package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -5
  57. package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +7 -9
  58. package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
  59. package/dist/application/{BinarySession.js → binary/BinarySession.js} +12 -10
  60. package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
  61. package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -7
  62. package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +6 -6
  63. package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +28 -40
  64. package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
  65. package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -6
  66. package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -7
  67. package/dist/application/{FirmwareAnalysisService.js → firmware/FirmwareAnalysisService.js} +5 -5
  68. package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -7
  69. package/dist/application/investigation/InvestigationRecords.js +69 -0
  70. package/dist/application/{UnknownEvidence.js → investigation/UnknownEvidence.js} +1 -1
  71. package/dist/application/{ElectronActiveEvidence.js → javascript/ElectronActiveEvidence.js} +3 -3
  72. package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
  73. package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -3
  74. package/dist/application/{ElectronBoundaryAnalysis.js → javascript/ElectronBoundaryAnalysis.js} +1 -1
  75. package/dist/application/{ElectronBoundaryGraphContext.js → javascript/ElectronBoundaryGraphContext.js} +1 -1
  76. package/dist/application/{ElectronEvidence.js → javascript/ElectronEvidence.js} +2 -2
  77. package/dist/application/javascript/ElectronObservationPort.js +1 -0
  78. package/dist/application/{ElectronObservationService.js → javascript/ElectronObservationService.js} +3 -3
  79. package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -3
  80. package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
  81. package/dist/application/{JavaScriptApplicationService.js → javascript/JavaScriptApplicationService.js} +10 -10
  82. package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
  83. package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -12
  84. package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +8 -24
  85. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +1 -0
  86. package/dist/application/{JavaScriptArtifactGraphAccumulator.js → javascript/JavaScriptArtifactGraphAccumulator.js} +16 -2
  87. package/dist/application/{JavaScriptArtifactGraphBuilder.js → javascript/JavaScriptArtifactGraphBuilder.js} +2 -2
  88. package/dist/application/{JavaScriptArtifactGraphContext.js → javascript/JavaScriptArtifactGraphContext.js} +1 -1
  89. package/dist/application/{JavaScriptArtifactGraphDocuments.js → javascript/JavaScriptArtifactGraphDocuments.js} +1 -1
  90. package/dist/application/{JavaScriptArtifactGraphFindings.js → javascript/JavaScriptArtifactGraphFindings.js} +20 -7
  91. package/dist/application/{JavaScriptArtifactGraphStructure.js → javascript/JavaScriptArtifactGraphStructure.js} +1 -1
  92. package/dist/application/{JavaScriptArtifactPathResolution.js → javascript/JavaScriptArtifactPathResolution.js} +6 -12
  93. package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +4 -8
  94. package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +1 -1
  95. package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +2 -2
  96. package/dist/application/javascript/JavaScriptRecoveryPort.js +1 -0
  97. package/dist/application/javascript/JavaScriptRecoveryService.js +52 -0
  98. package/dist/application/{JavaScriptReturnShapeProjection.js → javascript/JavaScriptReturnShapeProjection.js} +3 -3
  99. package/dist/application/{JavaScriptRuntimeObservationEvidence.js → javascript/JavaScriptRuntimeObservationEvidence.js} +2 -2
  100. package/dist/application/javascript/JavaScriptRuntimeObservationPort.js +1 -0
  101. package/dist/application/{JavaScriptRuntimeObservationService.js → javascript/JavaScriptRuntimeObservationService.js} +3 -3
  102. package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
  103. package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -6
  104. package/dist/application/{JavaScriptSemanticGraphAsyncProjection.js → javascript/JavaScriptSemanticGraphAsyncProjection.js} +1 -1
  105. package/dist/application/{JavaScriptSemanticGraphBuilder.js → javascript/JavaScriptSemanticGraphBuilder.js} +5 -3
  106. package/dist/application/{JavaScriptSemanticGraphChildProcessProjection.js → javascript/JavaScriptSemanticGraphChildProcessProjection.js} +1 -1
  107. package/dist/application/{JavaScriptSemanticGraphConstruction.js → javascript/JavaScriptSemanticGraphConstruction.js} +3 -2
  108. package/dist/application/{JavaScriptSemanticGraphDataProjection.js → javascript/JavaScriptSemanticGraphDataProjection.js} +1 -1
  109. package/dist/application/{JavaScriptSemanticGraphFingerprintProjection.js → javascript/JavaScriptSemanticGraphFingerprintProjection.js} +1 -1
  110. package/dist/application/{JavaScriptSemanticGraphFlowProjection.js → javascript/JavaScriptSemanticGraphFlowProjection.js} +2 -2
  111. package/dist/application/{JavaScriptSemanticGraphObjectProjection.js → javascript/JavaScriptSemanticGraphObjectProjection.js} +1 -1
  112. package/dist/application/{JavaScriptSemanticGraphProjection.js → javascript/JavaScriptSemanticGraphProjection.js} +2 -2
  113. package/dist/application/{JavaScriptSemanticGraphResourceProjection.js → javascript/JavaScriptSemanticGraphResourceProjection.js} +1 -1
  114. package/dist/application/{JavaScriptSemanticTraceService.js → javascript/JavaScriptSemanticTraceService.js} +6 -6
  115. package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -7
  116. package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -10
  117. package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -7
  118. package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -7
  119. package/dist/application/{NativeApiInspection.js → native/NativeApiInspection.js} +1 -1
  120. package/dist/application/{NativeCallRoutes.js → native/NativeCallRoutes.js} +3 -3
  121. package/dist/application/{NativeDispatchMetadataInspection.js → native/NativeDispatchMetadataInspection.js} +4 -4
  122. package/dist/application/{NativeUiActionTrace.js → native/NativeUiActionTrace.js} +7 -7
  123. package/dist/application/{NativeValueTrace.js → native/NativeValueTrace.js} +6 -6
  124. package/dist/{application/ArtifactInventory/hash.js → artifacts/ArtifactHash.js} +4 -2
  125. package/dist/artifacts/ArtifactPaths.js +3 -3
  126. package/dist/artifacts/ArtifactProvider.js +7 -37
  127. package/dist/artifacts/ArtifactProviderMetadata.js +36 -0
  128. package/dist/artifacts/AsarArtifactReader.js +195 -23
  129. package/dist/artifacts/AsarEntryStream.js +76 -0
  130. package/dist/artifacts/DirectoryArtifactReader.js +41 -7
  131. package/dist/artifacts/NativeDmgArtifactReader.js +161 -9
  132. package/dist/{application → artifacts/apple}/AppleAssetCatalogAnalysis.js +4 -4
  133. package/dist/{application → artifacts/apple}/InterfaceBuilderAnalysis.js +125 -51
  134. package/dist/artifacts/{KeyedArchiveReader.js → apple/KeyedArchiveReader.js} +21 -27
  135. package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
  136. package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +27 -6
  137. package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
  138. package/dist/artifacts/readStableArtifact.js +52 -0
  139. package/dist/browser/BrowserScenarioSecrets.js +50 -8
  140. package/dist/browser/CdpAuthorizedMainFrame.js +4 -4
  141. package/dist/browser/CdpAuthorizedTarget.js +22 -0
  142. package/dist/browser/CdpBrowserProvider.js +4 -15
  143. package/dist/browser/CdpCaptureDocuments.js +33 -21
  144. package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
  145. package/dist/browser/CdpCaptureEventHandlers.js +26 -26
  146. package/dist/browser/CdpCaptureEventHelpers.js +6 -6
  147. package/dist/browser/CdpCaptureStorage.js +10 -8
  148. package/dist/browser/CdpCaptureStorageFingerprints.js +24 -22
  149. package/dist/browser/CdpCaptureValues.js +2 -2
  150. package/dist/browser/CdpCommandRejection.js +17 -0
  151. package/dist/browser/CdpConnection.js +51 -11
  152. package/dist/browser/CdpElectronInspection.js +10 -10
  153. package/dist/browser/CdpElectronProvider.js +3 -6
  154. package/dist/browser/CdpElectronScriptEvents.js +6 -6
  155. package/dist/browser/CdpElectronScripts.js +2 -2
  156. package/dist/browser/CdpElectronWorkers.js +4 -4
  157. package/dist/browser/CdpObservationSession.js +18 -23
  158. package/dist/browser/CdpPageCapture.js +4 -4
  159. package/dist/browser/CdpPageCaptureScripts.js +2 -2
  160. package/dist/browser/CdpPageCaptureWorkers.js +9 -9
  161. package/dist/browser/CdpSafeMetadata.js +48 -10
  162. package/dist/browser/CdpScreenshot.js +5 -5
  163. package/dist/browser/CdpTargetEvents.js +8 -0
  164. package/dist/browser/CdpTargetSession.js +2 -2
  165. package/dist/browser/CdpWebMcpDiscovery.js +22 -16
  166. package/dist/browser/PlaywrightBrowserScenarioProvider.js +7 -6
  167. package/dist/browser/PlaywrightElectronActiveProvider.js +3 -6
  168. package/dist/browser/PlaywrightScenarioEvents.js +59 -51
  169. package/dist/browser/PlaywrightScenarioSession.js +8 -1
  170. package/dist/browser/WebSourceMapFetcher.js +37 -53
  171. package/dist/browser/assets/LocalWebScriptArtifacts.js +87 -0
  172. package/dist/browser/assets/PageScriptCapture.js +32 -0
  173. package/dist/browser/assets/PublishWebScripts.js +74 -0
  174. package/dist/browser/assets/ScenarioScriptCapture.js +76 -0
  175. package/dist/browser/assets/ScriptCaptureAdapters.js +57 -0
  176. package/dist/browser/assets/WebArtifactReads.js +56 -0
  177. package/dist/browser/assets/WebSourceLocationArtifacts.js +40 -0
  178. package/dist/browser/execution/CdpEventListeners.js +79 -0
  179. package/dist/browser/execution/CdpExecutionCapture.js +135 -0
  180. package/dist/browser/execution/CdpExecutionCollection.js +57 -0
  181. package/dist/browser/execution/CdpExecutionWindow.js +100 -0
  182. package/dist/browser/execution/CdpListenerSelector.js +22 -0
  183. package/dist/browser/execution/CdpPreciseCoverage.js +48 -0
  184. package/dist/browser/execution/CdpRuntimeInitiator.js +18 -0
  185. package/dist/browser/execution/CdpRuntimeProtocol.js +106 -0
  186. package/dist/browser/execution/CdpRuntimeRequests.js +81 -0
  187. package/dist/browser/execution/CdpRuntimeSession.js +163 -0
  188. package/dist/browser/execution/CdpRuntimeSources.js +223 -0
  189. package/dist/browser/execution/CdpWebRuntimeProvider.js +51 -0
  190. package/dist/browser/modules/NativeModuleResolver.js +210 -0
  191. package/dist/browser/modules/WebModuleArtifacts.js +40 -0
  192. package/dist/browser/network/PlaywrightNetworkContent.js +71 -0
  193. package/dist/browser/network/PlaywrightScenarioNetwork.js +180 -0
  194. package/dist/browser/providerIdentities.js +24 -0
  195. package/dist/catalogIdentity.js +23 -15
  196. package/dist/cli/androidCommands.js +13 -3
  197. package/dist/cli/applicationCommands.js +39 -8
  198. package/dist/cli/artifactCommands.js +1 -1
  199. package/dist/cli/browserAdvancedCommands.js +27 -9
  200. package/dist/cli/coreAnalysisCommands.js +5 -493
  201. package/dist/cli/coreBinaryCommands.js +211 -0
  202. package/dist/cli/coreNativeCommands.js +293 -0
  203. package/dist/cli/electronCommands.js +13 -18
  204. package/dist/cli/firmwareCommands.js +3 -3
  205. package/dist/cli/javascriptApplicationAnalysis.js +1 -1
  206. package/dist/cli/javascriptRecoveryCommands.js +45 -0
  207. package/dist/cli/managedCommands.js +4 -4
  208. package/dist/cli/managedProjectGraphCommand.js +1 -1
  209. package/dist/cli/referenceSourceImportStatus.js +6 -1
  210. package/dist/cli/utilityCommands.js +47 -23
  211. package/dist/cli/webModuleCommands.js +56 -0
  212. package/dist/cli/webRuntimeCommands.js +60 -0
  213. package/dist/cli/webScriptCommands.js +31 -0
  214. package/dist/cli/webSourceLocationCommands.js +42 -0
  215. package/dist/cli.js +10 -0
  216. package/dist/cliBrowserContext.js +4 -2
  217. package/dist/cliBrowserScenarioCommands.js +4 -3
  218. package/dist/cliCommandNames.js +8 -0
  219. package/dist/cliJavaScriptRuntimeCommands.js +6 -4
  220. package/dist/cliJsonInput.js +9 -2
  221. package/dist/cliOutput.js +37 -11
  222. package/dist/composition/android.js +3 -0
  223. package/dist/composition/auxiliaryAnalysisProviders.js +30 -0
  224. package/dist/composition/binary.js +25 -0
  225. package/dist/composition/browserObservation.js +3 -0
  226. package/dist/composition/browserScenario.js +3 -0
  227. package/dist/composition/directAnalysis.js +17 -0
  228. package/dist/composition/electronObservation.js +3 -0
  229. package/dist/composition/electronScenario.js +3 -0
  230. package/dist/composition/firmware.js +3 -0
  231. package/dist/composition/javascriptRecovery.js +3 -0
  232. package/dist/composition/javascriptRuntimeObservation.js +3 -0
  233. package/dist/composition/optionalObservationProviders.js +49 -0
  234. package/dist/composition/webModules.js +5 -0
  235. package/dist/composition/webRuntime.js +4 -0
  236. package/dist/composition/webSourceLocations.js +5 -0
  237. package/dist/config/parseConfig.js +22 -3
  238. package/dist/contracts/{androidToolContracts.js → android/androidToolContracts.js} +5 -5
  239. package/dist/contracts/applicationToolContracts.js +43 -8
  240. package/dist/contracts/artifactToolContracts.js +2 -2
  241. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  242. package/dist/contracts/enhancedInputs.js +1 -1
  243. package/dist/contracts/{firmwareToolContracts.js → firmware/firmwareToolContracts.js} +5 -5
  244. package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +6 -6
  245. package/dist/contracts/{electronToolContracts.js → javascript/electronToolContracts.js} +6 -6
  246. package/dist/contracts/{javascriptApplicationWorkflowExamples.js → javascript/javascriptApplicationWorkflowExamples.js} +3 -3
  247. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +23 -0
  248. package/dist/contracts/{javascriptRuntimeObservationToolContracts.js → javascript/javascriptRuntimeObservationToolContracts.js} +3 -3
  249. package/dist/contracts/{javascriptRuntimeReconciliationExample.js → javascript/javascriptRuntimeReconciliationExample.js} +5 -5
  250. package/dist/contracts/{managedToolContracts.js → managed/managedToolContracts.js} +3 -3
  251. package/dist/contracts/{managedWorkflowExamples.js → managed/managedWorkflowExamples.js} +1 -1
  252. package/dist/contracts/{managedWorkflowToolContracts.js → managed/managedWorkflowToolContracts.js} +6 -6
  253. package/dist/contracts/mobileApplicationGraphExamples.js +105 -0
  254. package/dist/contracts/{nativeToolContracts.js → native/nativeToolContracts.js} +14 -7
  255. package/dist/contracts/officialToolContracts.js +3 -3
  256. package/dist/contracts/sessionToolContracts.js +1 -1
  257. package/dist/contracts/toolContracts.js +13 -7
  258. package/dist/contracts/toolEffects.js +32 -0
  259. package/dist/contracts/toolOutputSchemaGroups.js +18 -18
  260. package/dist/contracts/webRuntimeToolContracts.js +43 -0
  261. package/dist/contracts/webScriptToolContracts.js +68 -0
  262. package/dist/domain/analysisErrorCore.js +4 -2
  263. package/dist/domain/analysisErrorProjection.js +1 -0
  264. package/dist/domain/{androidApplication.js → android/androidApplication.js} +7 -6
  265. package/dist/domain/apple/appleApplication.js +277 -0
  266. package/dist/domain/{appleAssetCatalog.js → apple/appleAssetCatalog.js} +2 -2
  267. package/dist/domain/apple/appleBundleAnatomy.js +236 -0
  268. package/dist/domain/{interfaceBuilderGraph.js → apple/interfaceBuilderGraph.js} +47 -314
  269. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +411 -0
  270. package/dist/domain/{keyedArchive.js → apple/keyedArchive.js} +10 -9
  271. package/dist/domain/apple/plistValue.js +35 -0
  272. package/dist/domain/artifactInventoryEvidence.js +12 -2
  273. package/dist/domain/artifactInventorySnapshot.js +1 -0
  274. package/dist/domain/artifactOperationError.js +5 -1
  275. package/dist/domain/artifactPathSyntax.js +26 -0
  276. package/dist/domain/browserNetworkEvidence.js +82 -0
  277. package/dist/domain/browserObservationError.js +2 -0
  278. package/dist/domain/browserObservationSchemas.js +2 -1
  279. package/dist/domain/browserScenarioCapture.js +22 -0
  280. package/dist/domain/browserScenarioCaptureValues.js +25 -0
  281. package/dist/domain/browserScenarioDiff.js +6 -3
  282. package/dist/domain/browserScenarioDiffEvidence.js +35 -1
  283. package/dist/domain/browserScenarioValues.js +12 -1
  284. package/dist/domain/browserSession.js +2 -7
  285. package/dist/domain/bundleComparison.js +2 -1
  286. package/dist/domain/callPath.js +52 -44
  287. package/dist/domain/comparisonStatus.js +39 -0
  288. package/dist/domain/evidenceBundle.js +98 -35
  289. package/dist/domain/{firmwareAnalysis.js → firmware/firmwareAnalysis.js} +2 -2
  290. package/dist/domain/functionComparisonNormalization.js +11 -13
  291. package/dist/domain/hopperValues.js +2 -2
  292. package/dist/domain/inputIssueProjection.js +17 -2
  293. package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
  294. package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +4 -3
  295. package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
  296. package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -13
  297. package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
  298. package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +3 -3
  299. package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
  300. package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +1 -1
  301. package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
  302. package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +2 -2
  303. package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
  304. package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +2 -2
  305. package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
  306. package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +2 -2
  307. package/dist/domain/{javascriptApplicationVersionKeys.js → javascript/javascriptApplicationVersionKeys.js} +16 -9
  308. package/dist/domain/javascript/javascriptArtifactFiles.js +1 -0
  309. package/dist/domain/{javascriptAstFingerprint.js → javascript/javascriptAstFingerprint.js} +38 -22
  310. package/dist/domain/javascript/javascriptAstValues.js +23 -0
  311. package/dist/domain/{javascriptExportShapeComparison.js → javascript/javascriptExportShapeComparison.js} +1 -1
  312. package/dist/domain/{javascriptExportShapeComparisonSchemas.js → javascript/javascriptExportShapeComparisonSchemas.js} +2 -2
  313. package/dist/domain/{javascriptExportShapeSelection.js → javascript/javascriptExportShapeSelection.js} +1 -1
  314. package/dist/domain/{javascriptExportShapeVariants.js → javascript/javascriptExportShapeVariants.js} +1 -1
  315. package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +4 -3
  316. package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +2 -2
  317. package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
  318. package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +6 -2
  319. package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +1 -1
  320. package/dist/domain/javascript/javascriptRecovery.js +88 -0
  321. package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +1 -1
  322. package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
  323. package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +3 -3
  324. package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +1 -1
  325. package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +2 -2
  326. package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +5 -5
  327. package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +2 -2
  328. package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +4 -4
  329. package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +1 -1
  330. package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +40 -14
  331. package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
  332. package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +10 -5
  333. package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
  334. package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +4 -2
  335. package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
  336. package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +8 -6
  337. package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
  338. package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +2 -2
  339. package/dist/domain/{javascriptSemanticGraphSchemas.js → javascript/javascriptSemanticGraphSchemas.js} +3 -3
  340. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +116 -0
  341. package/dist/domain/javascript/javascriptSemanticMutationValues.js +53 -0
  342. package/dist/domain/{javascriptSemanticObjects.js → javascript/javascriptSemanticObjects.js} +5 -5
  343. package/dist/domain/{javascriptSemanticPrimitives.js → javascript/javascriptSemanticPrimitives.js} +1 -1
  344. package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +31 -44
  345. package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -22
  346. package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
  347. package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +1 -1
  348. package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -1
  349. package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -1
  350. package/dist/domain/{javascriptSemanticQuerySchemas.js → javascript/javascriptSemanticQuerySchemas.js} +3 -3
  351. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +25 -0
  352. package/dist/domain/{javascriptSemanticResources.js → javascript/javascriptSemanticResources.js} +2 -1
  353. package/dist/domain/{javascriptSemanticReturns.js → javascript/javascriptSemanticReturns.js} +1 -1
  354. package/dist/domain/{javascriptSemanticTraceSchemas.js → javascript/javascriptSemanticTraceSchemas.js} +2 -2
  355. package/dist/domain/javascript/javascriptSemanticTraversal.js +55 -0
  356. package/dist/domain/javascript/javascriptSemanticValueTypes.js +1 -0
  357. package/dist/domain/{javascriptSemanticValues.js → javascript/javascriptSemanticValues.js} +72 -48
  358. package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +7 -4
  359. package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +14 -11
  360. package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +2 -2
  361. package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +231 -40
  362. package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +2 -2
  363. package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
  364. package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +2 -2
  365. package/dist/domain/{managedApplicationGraph.js → managed/managedApplicationGraph.js} +4 -4
  366. package/dist/domain/{managedApplicationGraphNodes.js → managed/managedApplicationGraphNodes.js} +1 -1
  367. package/dist/domain/{managedArtifact.js → managed/managedArtifact.js} +1 -1
  368. package/dist/domain/{managedMemberComparison.js → managed/managedMemberComparison.js} +4 -4
  369. package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
  370. package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +97 -40
  371. package/dist/domain/{managedMemberComparisonMatch.js → managed/managedMemberComparisonMatch.js} +22 -11
  372. package/dist/domain/{managedNativeVerification.js → managed/managedNativeVerification.js} +1 -1
  373. package/dist/domain/{managedNativeVerificationMatch.js → managed/managedNativeVerificationMatch.js} +3 -3
  374. package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
  375. package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
  376. package/dist/domain/{nativeFunctionAnnotations.js → native/nativeFunctionAnnotations.js} +1 -1
  377. package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
  378. package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
  379. package/dist/domain/{nativeLoadImage.js → native/nativeLoadImage.js} +1 -1
  380. package/dist/domain/{nativeUiObservation.js → native/nativeUiObservation.js} +20 -6
  381. package/dist/domain/{objcSwiftMetadata.js → native/objcSwiftMetadata.js} +17 -0
  382. package/dist/domain/processCapture.js +4 -2
  383. package/dist/domain/processScenario.js +17 -17
  384. package/dist/domain/propertyListKeys.js +69 -0
  385. package/dist/domain/providerCleanupError.js +5 -2
  386. package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
  387. package/dist/domain/reconstructionCoverageInput.js +7 -0
  388. package/dist/domain/runtimeVersion.js +2 -0
  389. package/dist/domain/sourceMapEnvelope.js +38 -0
  390. package/dist/domain/unicodeCodePointOrder.js +11 -6
  391. package/dist/domain/webBundleAnalyzerAst.js +2 -34
  392. package/dist/domain/webBundleAnalyzerInspection.js +12 -9
  393. package/dist/domain/webEventListeners.js +28 -0
  394. package/dist/domain/webExecution.js +74 -0
  395. package/dist/domain/webMcpDiscovery.js +1 -7
  396. package/dist/domain/webModuleImports.js +104 -0
  397. package/dist/domain/webModuleTrace.js +106 -0
  398. package/dist/domain/webRuntime.js +69 -0
  399. package/dist/domain/webScreenshot.js +1 -7
  400. package/dist/domain/webScriptArtifacts.js +39 -0
  401. package/dist/domain/webScriptExport.js +86 -0
  402. package/dist/domain/webScriptExportError.js +13 -0
  403. package/dist/domain/webScriptExportPlan.js +108 -0
  404. package/dist/domain/webSourceLocation.js +106 -0
  405. package/dist/domain/webSourcePosition.js +21 -0
  406. package/dist/dotnet/ManagedArtifactInspector.js +1 -1
  407. package/dist/dotnet/ManagedMemberInspector.js +1 -1
  408. package/dist/dotnet/ManagedMemberInspectorCore.js +34 -0
  409. package/dist/dotnet/ManagedMemberRows.js +5 -3
  410. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +22 -16
  411. package/dist/dotnet/ManagedNativeBoundaryInspector.js +56 -50
  412. package/dist/dotnet/ManagedStaticProvider.js +3 -33
  413. package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
  414. package/dist/evaluation/CodexAgentEval.js +2 -1
  415. package/dist/firmware/FirmwareProvider.js +18 -12
  416. package/dist/firmware/FirmwarePublication.js +1 -1
  417. package/dist/firmware/FirmwareRelease.js +1 -1
  418. package/dist/firmware/FirmwareReports.js +12 -0
  419. package/dist/firmware/FirmwareVersion.js +80 -0
  420. package/dist/generatedMcpToolCatalog.js +1 -1
  421. package/dist/generatedPackageMetadata.js +2 -2
  422. package/dist/ghidra/GhidraFunctionValues.js +5 -5
  423. package/dist/ghidra/GhidraInstallation.js +38 -34
  424. package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
  425. package/dist/ghidra/GhidraInventoryValues.js +1 -1
  426. package/dist/ghidra/GhidraLauncher.js +12 -4
  427. package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
  428. package/dist/ghidra/GhidraLoadImageValues.js +1 -1
  429. package/dist/ghidra/GhidraProvider.js +15 -233
  430. package/dist/ghidra/GhidraProviderCapabilities.js +7 -14
  431. package/dist/ghidra/GhidraProviderClient.js +209 -0
  432. package/dist/ghidra/GhidraResponseBuffer.js +7 -1
  433. package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +17 -1
  434. package/dist/hopper/HopperProvider.js +2 -48
  435. package/dist/hopper/HopperProviderCapabilities.js +73 -0
  436. package/dist/hopper/HopperResponseStream.js +7 -1
  437. package/dist/hopper/LinuxPrivateDisplayProbe.js +4 -4
  438. package/dist/ida/IdaProviderCapabilities.js +3 -11
  439. package/dist/ida/IdaSessionClient.js +12 -0
  440. package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +16 -5
  441. package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
  442. package/dist/{browser → inspector}/V8InspectorEndpoint.js +1 -1
  443. package/dist/{browser → inspector}/V8InspectorProvider.js +10 -13
  444. package/dist/inspector/providerIdentity.js +6 -0
  445. package/dist/javascript/recovery/RecoveryFiles.js +122 -0
  446. package/dist/javascript/recovery/WakaruCommand.js +116 -0
  447. package/dist/javascript/recovery/WakaruExecution.js +100 -0
  448. package/dist/javascript/recovery/WakaruProvider.js +96 -0
  449. package/dist/javascript/recovery/WakaruPublication.js +102 -0
  450. package/dist/javascript/recovery/WakaruRelease.js +29 -0
  451. package/dist/javascript/recovery/WakaruReport.js +134 -0
  452. package/dist/javascript/sourceMaps/SourceMapCodecProcess.js +37 -0
  453. package/dist/javascript/sourceMaps/SourceMapCodecProtocol.js +20 -0
  454. package/dist/javascript/sourceMaps/SourceMapCommand.js +176 -0
  455. package/dist/javascript/sourceMaps/SourceMapDecoder.js +61 -0
  456. package/dist/javascript/sourceMaps/SourceMapFormat.js +185 -0
  457. package/dist/javascript/sourceMaps/TraceSourceMap.js +138 -0
  458. package/dist/main/shutdown.js +8 -2
  459. package/dist/main/transport.js +24 -7
  460. package/dist/main.js +4 -18
  461. package/dist/native/AppleDispatchCoverage.js +58 -0
  462. package/dist/native/AppleDispatchMetadata.js +71 -509
  463. package/dist/native/AppleMachoFixups.js +292 -0
  464. package/dist/native/AppleMachoSelection.js +188 -0
  465. package/dist/native/AppleObjcCategories.js +59 -0
  466. package/dist/native/AppleObjcDispatchFacets.js +257 -0
  467. package/dist/native/AppleObjcProperties.js +68 -0
  468. package/dist/native/AppleObjcProtocols.js +2 -1
  469. package/dist/native/AppleSwiftDispatchFacets.js +150 -0
  470. package/dist/native/NativeMacOSProvider.js +132 -72
  471. package/dist/native/NativeMacOSProviderMetadata.js +42 -0
  472. package/dist/native/NativeMachoInspection.js +45 -14
  473. package/dist/native/NativeUiHelperRuntime.js +7 -3
  474. package/dist/native/NativeUiObservation.js +8 -4
  475. package/dist/native/NativeUiOutputBudget.js +8 -0
  476. package/dist/native/parsers/codesign.js +40 -5
  477. package/dist/native/parsers/demangle.js +6 -2
  478. package/dist/native/parsers/dyldInfo.js +13 -4
  479. package/dist/native/parsers/echoedPath.js +14 -0
  480. package/dist/native/parsers/lipo.js +14 -0
  481. package/dist/native/parsers/otool.js +1 -1
  482. package/dist/native/parsers/plist.js +174 -19
  483. package/dist/process/ExecFileOutput.js +2 -0
  484. package/dist/process/ProviderProcess.js +38 -17
  485. package/dist/reference/ReferenceSourceReaderEntries.js +6 -1
  486. package/dist/server/createServer.js +48 -6
  487. package/dist/server/mcpClientMetadata.js +6 -3
  488. package/dist/server/registerAndroidTools.js +1 -1
  489. package/dist/server/registerApplicationTools/compareExportShapes.js +2 -2
  490. package/dist/server/registerApplicationTools/compareSourceToBundle.js +2 -2
  491. package/dist/server/registerApplicationTools/compareVersions.js +2 -2
  492. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
  493. package/dist/server/registerApplicationTools/traceFeature.js +1 -1
  494. package/dist/server/registerApplicationTools/traceSemantics.js +1 -1
  495. package/dist/server/registerApplicationTools.js +2 -0
  496. package/dist/server/registerBrowserScenarioTool.js +6 -2
  497. package/dist/server/registerBrowserTools.js +13 -2
  498. package/dist/server/registerCloseLifecycleTool.js +1 -1
  499. package/dist/server/registerElectronTools.js +21 -7
  500. package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
  501. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
  502. package/dist/server/registerManagedTools.js +3 -3
  503. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
  504. package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
  505. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +1 -1
  506. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +1 -1
  507. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -2
  508. package/dist/server/registerNativeTools.js +1 -1
  509. package/dist/server/registerPrompts.js +5 -1
  510. package/dist/server/registerSessionTools.js +1 -1
  511. package/dist/server/registerWebModuleTool.js +17 -0
  512. package/dist/server/registerWebRuntimeTools.js +31 -0
  513. package/dist/server/registerWebScriptTool.js +18 -0
  514. package/dist/server/registerWebSourceLocationTool.js +17 -0
  515. package/dist/server/sessionAvailabilityPolicy.js +24 -12
  516. package/dist/windows/WindowsOwnedProcess.js +3 -1
  517. package/install.sh +12 -2
  518. package/native/windows/README.md +5 -0
  519. package/native/windows/build/manifest.json +2 -2
  520. package/native/windows/build/rea-windows-x64.node +0 -0
  521. package/package.json +40 -19
  522. package/scripts/hopper-demo-x11.py +67 -8
  523. package/scripts/rea.mjs +9 -1
  524. package/skills/reverse-engineer-anything/SKILL.md +3 -3
  525. package/skills/reverse-engineer-anything/references/android-applications.md +2 -2
  526. package/skills/reverse-engineer-anything/references/javascript-applications.md +1 -1
  527. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +32 -23
  528. package/dist/application/runtime.js +0 -53
  529. package/dist/domain/appleApplication.js +0 -181
  530. package/dist/domain/javascriptAstValues.js +0 -13
  531. package/dist/domain/javascriptSemanticTraversal.js +0 -30
  532. package/dist/native/NativeHostCapabilities.js +0 -23
  533. /package/dist/application/{AndroidAnalysisPort.js → DirectAnalysisDependencies.js} +0 -0
  534. /package/dist/application/{BinarySessionPort.js → WebModulePorts.js} +0 -0
  535. /package/dist/application/{ElectronActiveObservationPort.js → WebRuntimePort.js} +0 -0
  536. /package/dist/application/{ElectronObservationPort.js → WebScriptArtifactPort.js} +0 -0
  537. /package/dist/application/{FirmwareAnalysisPort.js → WebSourceLocationPorts.js} +0 -0
  538. /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → android/AndroidAnalysisPort.js} +0 -0
  539. /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
  540. /package/dist/application/{JavaScriptRuntimeObservationPort.js → binary/BinarySessionPort.js} +0 -0
  541. /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.js} +0 -0
  542. /package/dist/{domain/electronStaticAnalysisTypes.js → application/firmware/FirmwareAnalysisPort.js} +0 -0
  543. /package/dist/{domain/javascriptSemanticValueTypes.js → application/investigation/InvestigationRecordPort.js} +0 -0
  544. /package/dist/application/{ElectronBoundaryGraph.js → javascript/ElectronBoundaryGraph.js} +0 -0
  545. /package/dist/application/{ElectronBoundaryGraphIpc.js → javascript/ElectronBoundaryGraphIpc.js} +0 -0
  546. /package/dist/application/{ElectronBoundaryGraphNative.js → javascript/ElectronBoundaryGraphNative.js} +0 -0
  547. /package/dist/application/{ElectronBoundaryGraphWindows.js → javascript/ElectronBoundaryGraphWindows.js} +0 -0
  548. /package/dist/application/{JavaScriptArtifactGraphBundlers.js → javascript/JavaScriptArtifactGraphBundlers.js} +0 -0
  549. /package/dist/application/{JavaScriptArtifactGraphEvidence.js → javascript/JavaScriptArtifactGraphEvidence.js} +0 -0
  550. /package/dist/application/{JavaScriptArtifactReconstructionInput.js → javascript/JavaScriptArtifactReconstructionInput.js} +0 -0
  551. /package/dist/application/{JavaScriptSemanticGraphEvidence.js → javascript/JavaScriptSemanticGraphEvidence.js} +0 -0
  552. /package/dist/application/{JavaScriptSemanticGraphValueProjection.js → javascript/JavaScriptSemanticGraphValueProjection.js} +0 -0
  553. /package/dist/artifacts/{NibArchive.js → apple/NibArchive.js} +0 -0
  554. /package/dist/domain/{androidAnalysis.js → android/androidAnalysis.js} +0 -0
  555. /package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +0 -0
  556. /package/dist/domain/{electronStaticAnalysis.js → javascript/electronStaticAnalysis.js} +0 -0
  557. /package/dist/domain/{javascriptExportShapeComparisonIdentity.js → javascript/javascriptExportShapeComparisonIdentity.js} +0 -0
  558. /package/dist/domain/{javascriptRuntimeReconciliation.js → javascript/javascriptRuntimeReconciliation.js} +0 -0
  559. /package/dist/domain/{javascriptRuntimeReconciliationRuntime.js → javascript/javascriptRuntimeReconciliationRuntime.js} +0 -0
  560. /package/dist/domain/{javascriptSemanticCoverage.js → javascript/javascriptSemanticCoverage.js} +0 -0
  561. /package/dist/domain/{javascriptSemanticDerivedAnalysis.js → javascript/javascriptSemanticDerivedAnalysis.js} +0 -0
  562. /package/dist/domain/{javascriptSemanticGraphSerialization.js → javascript/javascriptSemanticGraphSerialization.js} +0 -0
  563. /package/dist/domain/{javascriptSemanticIr.js → javascript/javascriptSemanticIr.js} +0 -0
  564. /package/dist/domain/{javascriptSemanticQueryRelations.js → javascript/javascriptSemanticQueryRelations.js} +0 -0
  565. /package/dist/domain/{javascriptSemanticState.js → javascript/javascriptSemanticState.js} +0 -0
  566. /package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +0 -0
  567. /package/dist/domain/{javascriptStaticAnalysisFindings.js → javascript/javascriptStaticAnalysisFindings.js} +0 -0
  568. /package/dist/domain/{javascriptStaticAnalysisState.js → javascript/javascriptStaticAnalysisState.js} +0 -0
  569. /package/dist/domain/{javascriptStaticAnalysisTypes.js → javascript/javascriptStaticAnalysisTypes.js} +0 -0
  570. /package/dist/domain/{managedApplicationGraphCoverage.js → managed/managedApplicationGraphCoverage.js} +0 -0
  571. /package/dist/domain/{managedApplicationGraphNodeCoverage.js → managed/managedApplicationGraphNodeCoverage.js} +0 -0
  572. /package/dist/domain/{nativeApiBoundary.js → native/nativeApiBoundary.js} +0 -0
  573. /package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +0 -0
  574. /package/dist/domain/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
  575. /package/dist/domain/{nativeMetadataRecovery.js → native/nativeMetadataRecovery.js} +0 -0
  576. /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
  577. /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
@@ -1,12 +1,12 @@
1
1
  import { inferJsonShape } from "../domain/jsonShape.js";
2
2
  import { safeResponseMetadata } from "./CdpSafeMetadata.js";
3
- import { allowedSanitizedUrl, isHttpUrl, numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
3
+ import { allowedSanitizedUrl, isHttpUrl, numberValue, recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
4
4
  import { requestBodyShape } from "./CdpCaptureEventBodyShapes.js";
5
5
  import { consolePrimitive, decodeBase64, exclusionReasonForUrl, executionContextKey, firstCallFrame, initiatorLocation, integerOrNull, isMainFrameNavigation, } from "./CdpCaptureEventHelpers.js";
6
6
  export const handleExecutionContextCreated = (state, params) => {
7
7
  const context = recordValue(params.context);
8
8
  const identifier = numberValue(context?.id);
9
- const frameId = stringValue(recordValue(context?.auxData)?.frameId);
9
+ const frameId = cdpStringValue(recordValue(context?.auxData)?.frameId);
10
10
  if (identifier === undefined ||
11
11
  !Number.isSafeInteger(identifier) ||
12
12
  frameId === undefined)
@@ -20,8 +20,8 @@ export const handleExecutionContextDestroyed = (state, params) => {
20
20
  state.executionContextFrames.delete(key);
21
21
  };
22
22
  export const handleScriptParsed = (state, params) => {
23
- const scriptId = stringValue(params.scriptId);
24
- const rawUrl = stringValue(params.url) ?? "";
23
+ const scriptId = cdpStringValue(params.scriptId);
24
+ const rawUrl = cdpStringValue(params.url) ?? "";
25
25
  const sanitized = allowedSanitizedUrl(rawUrl, state.allowedOrigins);
26
26
  if (scriptId === undefined) {
27
27
  state.completeness.exclude("scripts", "invalid_protocol_value");
@@ -37,10 +37,10 @@ export const handleScriptParsed = (state, params) => {
37
37
  rawUrl,
38
38
  url: sanitized.url,
39
39
  origin: sanitized.origin,
40
- hash: stringValue(params.hash) ?? "",
40
+ hash: cdpStringValue(params.hash) ?? "",
41
41
  length: Math.max(0, Math.min(Number.MAX_SAFE_INTEGER, Math.trunc(numberValue(params.length) ?? 0))),
42
42
  isModule: params.isModule === true,
43
- language: stringValue(params.scriptLanguage) ?? null,
43
+ language: cdpStringValue(params.scriptLanguage) ?? null,
44
44
  sourceMapUrl: sourceMap.sanitized,
45
45
  sourceMapRawUrl: sourceMap.raw,
46
46
  executionContextKey: executionContextKey(params.executionContextId),
@@ -48,7 +48,7 @@ export const handleScriptParsed = (state, params) => {
48
48
  state.scripts.set(scriptId, script);
49
49
  };
50
50
  const sourceMapForScript = (value, scriptUrl, state) => {
51
- const declaredUrl = stringValue(value);
51
+ const declaredUrl = cdpStringValue(value);
52
52
  if (declaredUrl === undefined || declaredUrl === "")
53
53
  return { sanitized: null, raw: null };
54
54
  let rawUrl;
@@ -68,7 +68,7 @@ const sourceMapForScript = (value, scriptUrl, state) => {
68
68
  return { sanitized: null, raw: null };
69
69
  };
70
70
  export const handleRequestWillBeSent = (state, params) => {
71
- const requestId = stringValue(params.requestId);
71
+ const requestId = cdpStringValue(params.requestId);
72
72
  const request = recordValue(params.request);
73
73
  if (requestId === undefined) {
74
74
  state.completeness.exclude("network_requests", "invalid_protocol_value");
@@ -81,13 +81,13 @@ export const handleRequestWillBeSent = (state, params) => {
81
81
  }
82
82
  const sanitized = allowedSanitizedUrl(request.url, state.allowedOrigins);
83
83
  if (sanitized === undefined) {
84
- state.completeness.exclude("network_requests", exclusionReasonForUrl(stringValue(request.url)));
84
+ state.completeness.exclude("network_requests", exclusionReasonForUrl(cdpStringValue(request.url)));
85
85
  state.network.delete(requestId);
86
86
  return;
87
87
  }
88
88
  const initiator = recordValue(params.initiator);
89
89
  const initiatorFrame = initiatorLocation(initiator);
90
- const rawInitiatorUrl = stringValue(initiatorFrame?.url);
90
+ const rawInitiatorUrl = cdpStringValue(initiatorFrame?.url);
91
91
  const initiatorUrl = allowedSanitizedUrl(rawInitiatorUrl, state.allowedOrigins);
92
92
  if (rawInitiatorUrl !== undefined && initiatorUrl === undefined)
93
93
  state.completeness.exclude("network_initiators", exclusionReasonForUrl(rawInitiatorUrl));
@@ -95,13 +95,13 @@ export const handleRequestWillBeSent = (state, params) => {
95
95
  request_id: requestId,
96
96
  url: sanitized.url,
97
97
  origin: sanitized.origin ?? "",
98
- method: stringValue(request.method) ?? "GET",
99
- resource_type: stringValue(params.type) ?? null,
98
+ method: cdpStringValue(request.method) ?? "GET",
99
+ resource_type: cdpStringValue(params.type) ?? null,
100
100
  status: null,
101
101
  mime_type: null,
102
102
  encoded_data_length: null,
103
103
  initiator: {
104
- type: stringValue(initiator?.type) ?? "other",
104
+ type: cdpStringValue(initiator?.type) ?? "other",
105
105
  url: initiatorUrl?.url ?? null,
106
106
  line: integerOrNull(initiatorFrame?.lineNumber),
107
107
  column: integerOrNull(initiatorFrame?.columnNumber),
@@ -110,7 +110,7 @@ export const handleRequestWillBeSent = (state, params) => {
110
110
  });
111
111
  };
112
112
  export const handleResponseReceived = (state, params) => {
113
- const requestId = stringValue(params.requestId);
113
+ const requestId = cdpStringValue(params.requestId);
114
114
  if (requestId === undefined) {
115
115
  state.completeness.exclude("network_requests", "invalid_protocol_value");
116
116
  return;
@@ -123,21 +123,21 @@ export const handleResponseReceived = (state, params) => {
123
123
  if (response === undefined || sanitized === undefined) {
124
124
  state.completeness.exclude("network_requests", response === undefined
125
125
  ? "invalid_protocol_value"
126
- : exclusionReasonForUrl(stringValue(response.url)));
126
+ : exclusionReasonForUrl(cdpStringValue(response.url)));
127
127
  state.network.delete(requestId);
128
128
  return;
129
129
  }
130
130
  state.network.set(requestId, {
131
131
  ...current,
132
132
  status: numberValue(response.status) ?? null,
133
- mime_type: stringValue(response.mimeType) ?? null,
133
+ mime_type: cdpStringValue(response.mimeType) ?? null,
134
134
  });
135
135
  const metadata = safeResponseMetadata(requestId, sanitized.url, response, state.allowedOrigins);
136
136
  state.responseMetadata.push(metadata.response);
137
137
  state.agentHints.push(...metadata.agentHints);
138
138
  };
139
139
  export const handleLoadingFinished = (state, params) => {
140
- const requestId = stringValue(params.requestId);
140
+ const requestId = cdpStringValue(params.requestId);
141
141
  if (requestId === undefined)
142
142
  return;
143
143
  const current = state.network.get(requestId);
@@ -156,14 +156,14 @@ export const handleConsoleAPICalled = (state, params) => {
156
156
  }
157
157
  const source = allowedSanitizedUrl(frame.url, state.allowedOrigins);
158
158
  if (source === undefined) {
159
- state.completeness.exclude("console_events", exclusionReasonForUrl(stringValue(frame.url)));
159
+ state.completeness.exclude("console_events", exclusionReasonForUrl(cdpStringValue(frame.url)));
160
160
  return;
161
161
  }
162
162
  const arguments_ = recordsValue(params.args);
163
163
  state.console.push({
164
- type: stringValue(params.type) ?? "unknown",
164
+ type: cdpStringValue(params.type) ?? "unknown",
165
165
  timestamp: numberValue(params.timestamp) ?? 0,
166
- argument_types: arguments_.map((argument) => stringValue(argument.type) ?? "unknown"),
166
+ argument_types: arguments_.map((argument) => cdpStringValue(argument.type) ?? "unknown"),
167
167
  url: source.url,
168
168
  line: integerOrNull(frame.lineNumber),
169
169
  column: integerOrNull(frame.columnNumber),
@@ -198,12 +198,12 @@ const captureConsoleText = (state, arguments_) => {
198
198
  };
199
199
  };
200
200
  export const handleWebSocketFrame = (state, params, direction) => {
201
- const requestId = stringValue(params.requestId);
201
+ const requestId = cdpStringValue(params.requestId);
202
202
  if (requestId === undefined ||
203
203
  (!state.network.has(requestId) && !state.allowedWebSockets.has(requestId)))
204
204
  return;
205
205
  const response = recordValue(params.response);
206
- const payload = stringValue(response?.payloadData) ?? "";
206
+ const payload = cdpStringValue(response?.payloadData) ?? "";
207
207
  const opcode = Math.max(0, Math.trunc(numberValue(response?.opcode) ?? 0));
208
208
  const decoded = opcode === 1 ? undefined : decodeBase64(payload);
209
209
  if (opcode !== 1 && decoded === undefined)
@@ -228,8 +228,8 @@ const captureWebSocketShape = (state, payload, opcode) => {
228
228
  };
229
229
  };
230
230
  export const handleWebSocketCreated = (state, params) => {
231
- const requestId = stringValue(params.requestId);
232
- const rawUrl = stringValue(params.url);
231
+ const requestId = cdpStringValue(params.requestId);
232
+ const rawUrl = cdpStringValue(params.url);
233
233
  if (requestId === undefined) {
234
234
  state.completeness.exclude("websocket_connections", "invalid_protocol_value");
235
235
  return;
@@ -268,8 +268,8 @@ export const handleFrameNavigated = (state, params) => {
268
268
  return;
269
269
  if (!isMainFrameNavigation({ method: "Page.frameNavigated", params }, state.mainFrameId))
270
270
  return;
271
- const rawUrl = stringValue(frame?.url);
272
- const loaderId = stringValue(frame?.loaderId);
271
+ const rawUrl = cdpStringValue(frame?.url);
272
+ const loaderId = cdpStringValue(frame?.loaderId);
273
273
  // `frameNavigated` re-fires for a document already reported (same URL and
274
274
  // loader). Treating that as a navigation aborted a valid capture with
275
275
  // `target_changed`, which is a false claim that the target moved.
@@ -1,14 +1,14 @@
1
- import { isHttpUrl, numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
1
+ import { isHttpUrl, numberValue, recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
2
2
  /** Identify a top-level navigation event from its untrusted CDP envelope. */
3
3
  export const isMainFrameNavigation = (event, mainFrameId) => {
4
4
  const params = recordValue(event.params);
5
5
  if (params === undefined)
6
6
  return false;
7
7
  const frameId = event.method === "Page.frameNavigated"
8
- ? stringValue(recordValue(params.frame)?.id)
8
+ ? cdpStringValue(recordValue(params.frame)?.id)
9
9
  : event.method === "Page.frameRequestedNavigation" ||
10
10
  event.method === "Page.navigatedWithinDocument"
11
- ? stringValue(params.frameId)
11
+ ? cdpStringValue(params.frameId)
12
12
  : undefined;
13
13
  return frameId === mainFrameId;
14
14
  };
@@ -21,7 +21,7 @@ export const initiatorLocation = (initiator) => {
21
21
  return frame;
22
22
  stack = recordValue(stack.parent);
23
23
  }
24
- return stringValue(initiator?.url) === undefined ? undefined : initiator;
24
+ return cdpStringValue(initiator?.url) === undefined ? undefined : initiator;
25
25
  };
26
26
  export const exclusionReasonForUrl = (value) => value === undefined || value === ""
27
27
  ? "unattributed_origin"
@@ -43,7 +43,7 @@ export const isJsonContentType = (headers) => {
43
43
  return false;
44
44
  for (const [name, value] of Object.entries(headers))
45
45
  if (name.toLowerCase() === "content-type" &&
46
- isJsonMediaType(stringValue(value)))
46
+ isJsonMediaType(cdpStringValue(value)))
47
47
  return true;
48
48
  return false;
49
49
  };
@@ -52,7 +52,7 @@ export const isJsonMediaType = (value) => {
52
52
  return (mediaType === "application/json" || mediaType?.endsWith("+json") === true);
53
53
  };
54
54
  export const consolePrimitive = (value) => {
55
- const type = stringValue(value.type);
55
+ const type = cdpStringValue(value.type);
56
56
  switch (type) {
57
57
  case "string":
58
58
  return typeof value.value === "string"
@@ -1,9 +1,10 @@
1
1
  import { CdpConnection } from "./CdpConnection.js";
2
2
  import { optionalCdpCommand } from "./CdpOptionalCommand.js";
3
3
  import { captureStorageFingerprints, } from "./CdpCaptureStorageFingerprints.js";
4
- import { numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
5
- /** Capture redacted storage metadata for one authorized origin. */
6
- export const captureStorage = async (context, origin, limitations) => {
4
+ import { numberValue, recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
5
+ /** Capture redacted storage metadata for an authorized page and its origin. */
6
+ export const captureStorage = async (context, pageUrl, limitations) => {
7
+ const origin = new URL(pageUrl).origin;
7
8
  const quota = recordValue(await optionalCdpCommand(context, "Storage.getUsageAndQuota", { origin }, limitations));
8
9
  const local = context.input.include_storage_keys
9
10
  ? await storageItems(context, origin, true, limitations)
@@ -25,6 +26,7 @@ export const captureStorage = async (context, origin, limitations) => {
25
26
  ? await captureStorageFingerprints({
26
27
  context,
27
28
  origin,
29
+ cookieUrl: pageUrl,
28
30
  local,
29
31
  session,
30
32
  indexedDbNames: indexed,
@@ -58,8 +60,8 @@ const emptyStorageItems = {
58
60
  complete: false,
59
61
  };
60
62
  const capturedCaches = (values) => values.flatMap((cache) => {
61
- const name = stringValue(cache.cacheName);
62
- const id = stringValue(cache.cacheId);
63
+ const name = cdpStringValue(cache.cacheName);
64
+ const id = cdpStringValue(cache.cacheId);
63
65
  return name === undefined || id === undefined ? [] : [{ name, id }];
64
66
  });
65
67
  const storageItems = async (context, origin, isLocalStorage, limitations) => {
@@ -70,15 +72,15 @@ const storageItems = async (context, origin, isLocalStorage, limitations) => {
70
72
  const items = entries.flatMap((entry) => {
71
73
  if (!Array.isArray(entry))
72
74
  return [];
73
- const key = stringValue(entry[0]);
74
- const value = stringValue(entry[1]);
75
+ const key = cdpStringValue(entry[0]);
76
+ const value = cdpStringValue(entry[1]);
75
77
  return key === undefined || value === undefined ? [] : [{ key, value }];
76
78
  });
77
79
  return { items, complete: items.length === entries.length };
78
80
  };
79
81
  const stringArray = (value) => Array.isArray(value)
80
82
  ? value.flatMap((item) => {
81
- const text = stringValue(item);
83
+ const text = cdpStringValue(item);
82
84
  return text === undefined ? [] : [text];
83
85
  })
84
86
  : [];
@@ -3,9 +3,9 @@ import canonicalize from "canonicalize";
3
3
  import { compareCodePoints } from "../domain/canonicalOrdering.js";
4
4
  import { CdpConnection } from "./CdpConnection.js";
5
5
  import { optionalCdpCommand } from "./CdpOptionalCommand.js";
6
- import { recordValue, recordsValue, stringValue } from "./CdpCaptureValues.js";
6
+ import { recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
7
7
  /** Capture stable hashes of approved storage content without returning values. */
8
- export const captureStorageFingerprints = async ({ context, origin, local, session, indexedDbNames, caches, limitations, }) => {
8
+ export const captureStorageFingerprints = async ({ context, origin, cookieUrl, local, session, indexedDbNames, caches, limitations, }) => {
9
9
  const state = {
10
10
  items: [],
11
11
  complete: local.complete && session.complete,
@@ -13,7 +13,7 @@ export const captureStorageFingerprints = async ({ context, origin, local, sessi
13
13
  const run = { context, limitations, state };
14
14
  addStorageItems(state, "local_storage", local.items);
15
15
  addStorageItems(state, "session_storage", session.items);
16
- await addCookies(run, origin);
16
+ await addCookies(run, cookieUrl);
17
17
  await addIndexedDb(run, origin, indexedDbNames);
18
18
  await addCaches(run, caches);
19
19
  state.items.sort((left, right) => compareCodePoints(`${left.scope}:${left.identity_sha256}`, `${right.scope}:${right.identity_sha256}`));
@@ -29,8 +29,9 @@ const addStorageItems = (state, scope, items) => {
29
29
  complete: true,
30
30
  });
31
31
  };
32
- const addCookies = async (run, origin) => {
33
- const raw = await optionalCdpCommand(run.context, "Network.getCookies", { urls: [origin] }, run.limitations);
32
+ const addCookies = async (run, pageUrl) => {
33
+ run.limitations.push("Cookie fingerprints cover cookies applicable to the current main-frame URL, not every path on its origin.");
34
+ const raw = await optionalCdpCommand(run.context, "Network.getCookies", { urls: [pageUrl] }, run.limitations);
34
35
  if (raw === undefined) {
35
36
  run.state.complete = false;
36
37
  return;
@@ -44,10 +45,10 @@ const addCookies = async (run, origin) => {
44
45
  if (cookies.length !== cookieValues.length)
45
46
  run.state.complete = false;
46
47
  for (const cookie of cookies) {
47
- const name = stringValue(cookie.name);
48
- const value = stringValue(cookie.value);
49
- const domain = stringValue(cookie.domain);
50
- const path = stringValue(cookie.path);
48
+ const name = cdpStringValue(cookie.name);
49
+ const value = cdpStringValue(cookie.value);
50
+ const domain = cdpStringValue(cookie.domain);
51
+ const path = cdpStringValue(cookie.path);
51
52
  if (name === undefined ||
52
53
  value === undefined ||
53
54
  domain === undefined ||
@@ -76,7 +77,7 @@ const addIndexedDb = async (run, origin, names) => {
76
77
  run.state.complete = false;
77
78
  continue;
78
79
  }
79
- if (stringValue(database.name) !== databaseName) {
80
+ if (cdpStringValue(database.name) !== databaseName) {
80
81
  run.state.complete = false;
81
82
  continue;
82
83
  }
@@ -94,7 +95,7 @@ const addIndexedDb = async (run, origin, names) => {
94
95
  complete: indexedDbSchemaComplete(stores),
95
96
  });
96
97
  for (const store of stores) {
97
- const objectStoreName = stringValue(store.name);
98
+ const objectStoreName = cdpStringValue(store.name);
98
99
  if (objectStoreName === undefined) {
99
100
  run.state.complete = false;
100
101
  continue;
@@ -108,22 +109,22 @@ const addIndexedDb = async (run, origin, names) => {
108
109
  }
109
110
  };
110
111
  const indexedDbStoreSchema = (store) => ({
111
- name: stringValue(store.name) ?? null,
112
+ name: cdpStringValue(store.name) ?? null,
112
113
  key_path: stableValue(store.keyPath),
113
114
  auto_increment: store.autoIncrement === true,
114
115
  indexes: recordsValue(store.indexes).map((index) => ({
115
- name: stringValue(index.name) ?? null,
116
+ name: cdpStringValue(index.name) ?? null,
116
117
  key_path: stableValue(index.keyPath),
117
118
  unique: index.unique === true,
118
119
  multi_entry: index.multiEntry === true,
119
120
  })),
120
121
  });
121
- const indexedDbSchemaComplete = (stores) => stores.every((store) => stringValue(store.name) !== undefined &&
122
+ const indexedDbSchemaComplete = (stores) => stores.every((store) => cdpStringValue(store.name) !== undefined &&
122
123
  stableValueComplete(store.keyPath) &&
123
124
  typeof store.autoIncrement === "boolean" &&
124
125
  Array.isArray(store.indexes) &&
125
126
  recordsValue(store.indexes).length === store.indexes.length &&
126
- recordsValue(store.indexes).every((index) => stringValue(index.name) !== undefined &&
127
+ recordsValue(store.indexes).every((index) => cdpStringValue(index.name) !== undefined &&
127
128
  stableValueComplete(index.keyPath) &&
128
129
  typeof index.unique === "boolean" &&
129
130
  typeof index.multiEntry === "boolean"));
@@ -134,7 +135,6 @@ const addIndexedDbRecords = async (run, input) => {
134
135
  securityOrigin: input.origin,
135
136
  databaseName: input.databaseName,
136
137
  objectStoreName: input.objectStoreName,
137
- indexName: "",
138
138
  skipCount,
139
139
  pageSize: STORAGE_ENTRY_PAGE_SIZE,
140
140
  }, run.limitations);
@@ -164,7 +164,9 @@ const addIndexedDbRecords = async (run, input) => {
164
164
  primaryKey,
165
165
  },
166
166
  value,
167
- complete: remoteObjectComplete(entry.value),
167
+ complete: remoteObjectComplete(entry.key) &&
168
+ remoteObjectComplete(entry.primaryKey) &&
169
+ remoteObjectComplete(entry.value),
168
170
  });
169
171
  }
170
172
  if (result.hasMore !== true)
@@ -213,8 +215,8 @@ const addCaches = async (run, caches) => {
213
215
  }
214
216
  };
215
217
  const addCacheEntry = async (run, cache, entry) => {
216
- const requestURL = stringValue(entry.requestURL);
217
- const requestMethod = stringValue(entry.requestMethod);
218
+ const requestURL = cdpStringValue(entry.requestURL);
219
+ const requestMethod = cdpStringValue(entry.requestMethod);
218
220
  if (requestURL === undefined || requestMethod === undefined) {
219
221
  run.state.complete = false;
220
222
  return;
@@ -225,8 +227,8 @@ const addCacheEntry = async (run, cache, entry) => {
225
227
  }
226
228
  const headerRecords = recordsValue(entry.requestHeaders);
227
229
  const requestHeaders = headerRecords.flatMap((header) => {
228
- const name = stringValue(header.name);
229
- const value = stringValue(header.value);
230
+ const name = cdpStringValue(header.name);
231
+ const value = cdpStringValue(header.value);
230
232
  return name === undefined || value === undefined ? [] : [{ name, value }];
231
233
  });
232
234
  if (headerRecords.length !== entry.requestHeaders.length ||
@@ -235,7 +237,7 @@ const addCacheEntry = async (run, cache, entry) => {
235
237
  return;
236
238
  }
237
239
  const raw = await optionalCdpCommand(run.context, "CacheStorage.requestCachedResponse", { cacheId: cache.id, requestURL, requestHeaders }, run.limitations);
238
- const body = stringValue(recordValue(recordValue(raw)?.response)?.body);
240
+ const body = cdpStringValue(recordValue(recordValue(raw)?.response)?.body);
239
241
  const decoded = body === undefined ? null : decodeBase64(body);
240
242
  const complete = decoded !== null;
241
243
  if (!complete)
@@ -11,7 +11,7 @@ export const recordsValue = (value) => Array.isArray(value)
11
11
  return record === undefined ? [] : [record];
12
12
  })
13
13
  : [];
14
- export const stringValue = (value) => typeof value === "string" ? value : undefined;
14
+ export const cdpStringValue = (value) => typeof value === "string" ? value : undefined;
15
15
  export const numberValue = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
16
16
  export const requiredRecord = (value) => {
17
17
  const record = recordValue(value);
@@ -33,7 +33,7 @@ export const isHttpUrl = (value) => {
33
33
  }
34
34
  };
35
35
  export const allowedSanitizedUrl = (value, allowedOrigins) => {
36
- const text = stringValue(value);
36
+ const text = cdpStringValue(value);
37
37
  if (text === undefined)
38
38
  return undefined;
39
39
  const sanitized = sanitizeBrowserUrl(text);
@@ -0,0 +1,17 @@
1
+ import { BrowserObservationError } from "../domain/browserObservationError.js";
2
+ /** Preserve a producer's command rejection independently from fatal transport parsing errors. */
3
+ export class CdpCommandRejection extends BrowserObservationError {
4
+ command;
5
+ code;
6
+ reportedMessage;
7
+ constructor(operation, command, code, reportedMessage) {
8
+ super(operation, "protocol_error", {
9
+ detail: reportedMessage === null
10
+ ? "CDP returned a malformed command error."
11
+ : `CDP ${command} failed (${code === null ? "unknown code" : String(code)}): ${reportedMessage}`,
12
+ });
13
+ this.command = command;
14
+ this.code = code;
15
+ this.reportedMessage = reportedMessage;
16
+ }
17
+ }
@@ -2,36 +2,43 @@ import WebSocket, {} from "ws";
2
2
  import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
3
3
  import { AnalysisError } from "../domain/analysisErrorBase.js";
4
4
  import { BrowserObservationError } from "../domain/browserObservationError.js";
5
+ import { CdpCommandRejection } from "./CdpCommandRejection.js";
5
6
  import {} from "../domain/browserObservationErrors.js";
6
7
  import { safeParseJson } from "../domain/safeJson.js";
7
8
  /** Correlated JSON-RPC transport for one CDP target operation. */
8
9
  export class CdpConnection {
9
10
  socket;
10
11
  operation;
12
+ maxPayloadBytes;
11
13
  #pending = new Map();
12
14
  #listeners = new Set();
13
15
  #disconnectListeners = new Set();
16
+ #protocolFailureListeners = new Set();
14
17
  #nextId = 1;
15
18
  #closed = false;
16
19
  #protocolFailed = false;
17
- constructor(socket, operation) {
20
+ #transportFailure = "disconnected";
21
+ constructor(socket, operation, maxPayloadBytes) {
18
22
  this.socket = socket;
19
23
  this.operation = operation;
24
+ this.maxPayloadBytes = maxPayloadBytes;
20
25
  socket.on("message", (data) => this.#receive(data));
21
26
  socket.on("close", () => this.#disconnect());
22
- socket.on("error", () => this.#disconnect());
27
+ socket.on("error", (cause) => this.#disconnect(isRecord(cause) && cause.code === "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"
28
+ ? "payload_limit"
29
+ : "disconnected"));
23
30
  }
24
31
  /** Connect to one already-validated loopback CDP WebSocket. */
25
- static async connect(url, operation, signal) {
32
+ static async connect(url, operation, signal, limits) {
26
33
  if (signal?.aborted === true)
27
34
  throw new AnalysisCancelledError(operation);
28
35
  const socket = new WebSocket(url, {
29
36
  handshakeTimeout: 0,
30
- maxPayload: 0,
37
+ maxPayload: limits?.maxPayloadBytes ?? 0,
31
38
  perMessageDeflate: false,
32
39
  });
33
40
  await waitForOpen(socket, operation, signal);
34
- return new CdpConnection(socket, operation);
41
+ return new CdpConnection(socket, operation, limits?.maxPayloadBytes ?? 0);
35
42
  }
36
43
  /** Subscribe to validated CDP event envelopes. */
37
44
  onEvent(listener) {
@@ -47,12 +54,21 @@ export class CdpConnection {
47
54
  this.#disconnectListeners.add(listener);
48
55
  return () => this.#disconnectListeners.delete(listener);
49
56
  }
57
+ /** Notify fatal wire parsing failure even when no command is outstanding. */
58
+ onProtocolFailure(listener) {
59
+ if (this.#protocolFailed) {
60
+ listener(this.#transportError("protocol_error"));
61
+ return () => undefined;
62
+ }
63
+ this.#protocolFailureListeners.add(listener);
64
+ return () => this.#protocolFailureListeners.delete(listener);
65
+ }
50
66
  /** Execute one command, optionally within a flat target session. */
51
67
  async send(method, params = {}, sessionId, signal) {
52
68
  if (this.#protocolFailed)
53
69
  throw new BrowserObservationError(this.operation, "protocol_error");
54
70
  if (this.#closed || this.socket.readyState !== WebSocket.OPEN)
55
- throw new BrowserObservationError(this.operation, "disconnected");
71
+ throw this.#transportError(this.#transportFailure);
56
72
  if (signal?.aborted === true)
57
73
  throw new AnalysisCancelledError(this.operation);
58
74
  const id = this.#nextId;
@@ -68,6 +84,7 @@ export class CdpConnection {
68
84
  };
69
85
  signal?.addEventListener("abort", onAbort, { once: true });
70
86
  this.#pending.set(id, {
87
+ method,
71
88
  resolve,
72
89
  reject,
73
90
  removeAbort: () => signal?.removeEventListener("abort", onAbort),
@@ -111,6 +128,8 @@ export class CdpConnection {
111
128
  });
112
129
  }
113
130
  #receive(data) {
131
+ if (this.#closed || this.#protocolFailed)
132
+ return;
114
133
  const parsed = safeParseJson(rawText(data));
115
134
  if (!parsed.ok) {
116
135
  this.#failPending("protocol_error");
@@ -154,7 +173,12 @@ export class CdpConnection {
154
173
  return;
155
174
  this.#complete(id, pending);
156
175
  if ("error" in message) {
157
- pending.reject(new BrowserObservationError(this.operation, "protocol_error"));
176
+ const reported = message.error;
177
+ pending.reject(new CdpCommandRejection(this.operation, pending.method, isRecord(reported) && typeof reported.code === "number"
178
+ ? reported.code
179
+ : null, isRecord(reported) && typeof reported.message === "string"
180
+ ? reported.message
181
+ : null));
158
182
  return;
159
183
  }
160
184
  pending.resolve("result" in message ? message.result : {});
@@ -164,24 +188,40 @@ export class CdpConnection {
164
188
  this.#pending.delete(id);
165
189
  }
166
190
  #failPending(reason) {
167
- if (reason === "disconnected")
191
+ const wasProtocolFailed = this.#protocolFailed;
192
+ if (reason !== "protocol_error")
168
193
  this.#closed = true;
169
194
  else
170
195
  this.#protocolFailed = true;
171
196
  for (const [id, pending] of this.#pending) {
172
197
  this.#complete(id, pending);
173
- pending.reject(new BrowserObservationError(this.operation, reason));
198
+ pending.reject(this.#transportError(reason));
199
+ }
200
+ if (reason === "protocol_error" && !wasProtocolFailed) {
201
+ const error = this.#transportError(reason);
202
+ for (const listener of this.#protocolFailureListeners)
203
+ listener(error);
204
+ this.#protocolFailureListeners.clear();
174
205
  }
175
206
  }
176
- #disconnect() {
207
+ #disconnect(reason = "disconnected") {
177
208
  const wasClosed = this.#closed;
178
- this.#failPending("disconnected");
209
+ if (!wasClosed)
210
+ this.#transportFailure = reason;
211
+ this.#failPending(reason);
179
212
  if (wasClosed)
180
213
  return;
181
214
  for (const listener of this.#disconnectListeners)
182
215
  listener();
183
216
  this.#disconnectListeners.clear();
184
217
  }
218
+ #transportError(reason) {
219
+ return new BrowserObservationError(this.operation, reason, reason === "payload_limit"
220
+ ? {
221
+ detail: `CDP message exceeded the selected ${String(this.maxPayloadBytes)} byte protocol budget.`,
222
+ }
223
+ : undefined);
224
+ }
185
225
  }
186
226
  const rawText = (data) => Array.isArray(data)
187
227
  ? Buffer.concat(data).toString("utf8")