mcard-js 2.1.12 → 2.1.13

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 (362) hide show
  1. package/README.md +14 -0
  2. package/dist/hash/HashValidator.d.ts +14 -0
  3. package/dist/hash/HashValidator.d.ts.map +1 -0
  4. package/dist/hash/HashValidator.js +57 -0
  5. package/dist/hash/HashValidator.js.map +1 -0
  6. package/dist/index.d.ts +29 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +38 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/model/CardCollection.d.ts +92 -0
  11. package/dist/model/CardCollection.d.ts.map +1 -0
  12. package/dist/model/CardCollection.js +217 -0
  13. package/dist/model/CardCollection.js.map +1 -0
  14. package/dist/model/ContentTypeInterpreter.d.ts +23 -0
  15. package/dist/model/ContentTypeInterpreter.d.ts.map +1 -0
  16. package/dist/model/ContentTypeInterpreter.js +140 -0
  17. package/dist/model/ContentTypeInterpreter.js.map +1 -0
  18. package/dist/model/EventProducer.d.ts +10 -0
  19. package/dist/model/EventProducer.d.ts.map +1 -0
  20. package/dist/model/EventProducer.js +46 -0
  21. package/dist/model/EventProducer.js.map +1 -0
  22. package/dist/model/GTime.d.ts +44 -0
  23. package/dist/model/GTime.d.ts.map +1 -0
  24. package/dist/model/GTime.js +91 -0
  25. package/dist/model/GTime.js.map +1 -0
  26. package/dist/model/Handle.d.ts +37 -0
  27. package/dist/model/Handle.d.ts.map +1 -0
  28. package/dist/model/Handle.js +90 -0
  29. package/dist/model/Handle.js.map +1 -0
  30. package/dist/model/MCard.d.ts +43 -0
  31. package/dist/model/MCard.d.ts.map +1 -0
  32. package/dist/model/MCard.js +76 -0
  33. package/dist/model/MCard.js.map +1 -0
  34. package/dist/model/constants.d.ts +45 -0
  35. package/dist/model/constants.d.ts.map +1 -0
  36. package/dist/model/constants.js +27 -0
  37. package/dist/model/constants.js.map +1 -0
  38. package/dist/model/detectors/BaseDetector.d.ts +26 -0
  39. package/dist/model/detectors/BaseDetector.d.ts.map +1 -0
  40. package/dist/model/detectors/BaseDetector.js +5 -0
  41. package/dist/model/detectors/BaseDetector.js.map +1 -0
  42. package/dist/model/detectors/BinaryDetector.d.ts +12 -0
  43. package/dist/model/detectors/BinaryDetector.d.ts.map +1 -0
  44. package/dist/model/detectors/BinaryDetector.js +82 -0
  45. package/dist/model/detectors/BinaryDetector.js.map +1 -0
  46. package/dist/model/detectors/ContentTypeInterpreter.d.ts +11 -0
  47. package/dist/model/detectors/ContentTypeInterpreter.d.ts.map +1 -0
  48. package/dist/model/detectors/ContentTypeInterpreter.js +51 -0
  49. package/dist/model/detectors/ContentTypeInterpreter.js.map +1 -0
  50. package/dist/model/detectors/DataFormatDetectors.d.ts +29 -0
  51. package/dist/model/detectors/DataFormatDetectors.d.ts.map +1 -0
  52. package/dist/model/detectors/DataFormatDetectors.js +223 -0
  53. package/dist/model/detectors/DataFormatDetectors.js.map +1 -0
  54. package/dist/model/detectors/LanguageDetector.d.ts +11 -0
  55. package/dist/model/detectors/LanguageDetector.d.ts.map +1 -0
  56. package/dist/model/detectors/LanguageDetector.js +148 -0
  57. package/dist/model/detectors/LanguageDetector.js.map +1 -0
  58. package/dist/model/detectors/MarkupDetectors.d.ts +22 -0
  59. package/dist/model/detectors/MarkupDetectors.d.ts.map +1 -0
  60. package/dist/model/detectors/MarkupDetectors.js +132 -0
  61. package/dist/model/detectors/MarkupDetectors.js.map +1 -0
  62. package/dist/model/detectors/OBJDetector.d.ts +8 -0
  63. package/dist/model/detectors/OBJDetector.d.ts.map +1 -0
  64. package/dist/model/detectors/OBJDetector.js +48 -0
  65. package/dist/model/detectors/OBJDetector.js.map +1 -0
  66. package/dist/model/detectors/registry.d.ts +13 -0
  67. package/dist/model/detectors/registry.d.ts.map +1 -0
  68. package/dist/model/detectors/registry.js +67 -0
  69. package/dist/model/detectors/registry.js.map +1 -0
  70. package/dist/monads/Either.d.ts +51 -0
  71. package/dist/monads/Either.d.ts.map +1 -0
  72. package/dist/monads/Either.js +82 -0
  73. package/dist/monads/Either.js.map +1 -0
  74. package/dist/monads/IO.d.ts +38 -0
  75. package/dist/monads/IO.d.ts.map +1 -0
  76. package/dist/monads/IO.js +66 -0
  77. package/dist/monads/IO.js.map +1 -0
  78. package/dist/monads/Maybe.d.ts +45 -0
  79. package/dist/monads/Maybe.d.ts.map +1 -0
  80. package/dist/monads/Maybe.js +73 -0
  81. package/dist/monads/Maybe.js.map +1 -0
  82. package/dist/monads/Reader.d.ts +29 -0
  83. package/dist/monads/Reader.d.ts.map +1 -0
  84. package/dist/monads/Reader.js +44 -0
  85. package/dist/monads/Reader.js.map +1 -0
  86. package/dist/monads/State.d.ts +33 -0
  87. package/dist/monads/State.d.ts.map +1 -0
  88. package/dist/monads/State.js +50 -0
  89. package/dist/monads/State.js.map +1 -0
  90. package/dist/monads/Writer.d.ts +29 -0
  91. package/dist/monads/Writer.d.ts.map +1 -0
  92. package/dist/monads/Writer.js +46 -0
  93. package/dist/monads/Writer.js.map +1 -0
  94. package/dist/ptr/FaroSidecar.d.ts +56 -0
  95. package/dist/ptr/FaroSidecar.d.ts.map +1 -0
  96. package/dist/ptr/FaroSidecar.js +102 -0
  97. package/dist/ptr/FaroSidecar.js.map +1 -0
  98. package/dist/ptr/LensProtocol.d.ts +84 -0
  99. package/dist/ptr/LensProtocol.d.ts.map +1 -0
  100. package/dist/ptr/LensProtocol.js +98 -0
  101. package/dist/ptr/LensProtocol.js.map +1 -0
  102. package/dist/ptr/SandboxWorker.d.ts +54 -0
  103. package/dist/ptr/SandboxWorker.d.ts.map +1 -0
  104. package/dist/ptr/SandboxWorker.js +172 -0
  105. package/dist/ptr/SandboxWorker.js.map +1 -0
  106. package/dist/ptr/common_types.d.ts +39 -0
  107. package/dist/ptr/common_types.d.ts.map +1 -0
  108. package/dist/ptr/common_types.js +12 -0
  109. package/dist/ptr/common_types.js.map +1 -0
  110. package/dist/ptr/lambda/AlphaConversion.d.ts +42 -0
  111. package/dist/ptr/lambda/AlphaConversion.d.ts.map +1 -0
  112. package/dist/ptr/lambda/AlphaConversion.js +244 -0
  113. package/dist/ptr/lambda/AlphaConversion.js.map +1 -0
  114. package/dist/ptr/lambda/BetaReduction.d.ts +73 -0
  115. package/dist/ptr/lambda/BetaReduction.d.ts.map +1 -0
  116. package/dist/ptr/lambda/BetaReduction.js +322 -0
  117. package/dist/ptr/lambda/BetaReduction.js.map +1 -0
  118. package/dist/ptr/lambda/EtaConversion.d.ts +65 -0
  119. package/dist/ptr/lambda/EtaConversion.d.ts.map +1 -0
  120. package/dist/ptr/lambda/EtaConversion.js +228 -0
  121. package/dist/ptr/lambda/EtaConversion.js.map +1 -0
  122. package/dist/ptr/lambda/FreeVariables.d.ts +44 -0
  123. package/dist/ptr/lambda/FreeVariables.d.ts.map +1 -0
  124. package/dist/ptr/lambda/FreeVariables.js +207 -0
  125. package/dist/ptr/lambda/FreeVariables.js.map +1 -0
  126. package/dist/ptr/lambda/LambdaRuntime.d.ts +80 -0
  127. package/dist/ptr/lambda/LambdaRuntime.d.ts.map +1 -0
  128. package/dist/ptr/lambda/LambdaRuntime.js +433 -0
  129. package/dist/ptr/lambda/LambdaRuntime.js.map +1 -0
  130. package/dist/ptr/lambda/LambdaTerm.d.ts +95 -0
  131. package/dist/ptr/lambda/LambdaTerm.d.ts.map +1 -0
  132. package/dist/ptr/lambda/LambdaTerm.js +159 -0
  133. package/dist/ptr/lambda/LambdaTerm.js.map +1 -0
  134. package/dist/ptr/lambda/index.d.ts +24 -0
  135. package/dist/ptr/lambda/index.d.ts.map +1 -0
  136. package/dist/ptr/lambda/index.js +34 -0
  137. package/dist/ptr/lambda/index.js.map +1 -0
  138. package/dist/ptr/llm/Config.d.ts +57 -0
  139. package/dist/ptr/llm/Config.d.ts.map +1 -0
  140. package/dist/ptr/llm/Config.js +183 -0
  141. package/dist/ptr/llm/Config.js.map +1 -0
  142. package/dist/ptr/llm/LLMRuntime.d.ts +35 -0
  143. package/dist/ptr/llm/LLMRuntime.d.ts.map +1 -0
  144. package/dist/ptr/llm/LLMRuntime.js +176 -0
  145. package/dist/ptr/llm/LLMRuntime.js.map +1 -0
  146. package/dist/ptr/llm/providers/LLMProvider.d.ts +43 -0
  147. package/dist/ptr/llm/providers/LLMProvider.d.ts.map +1 -0
  148. package/dist/ptr/llm/providers/LLMProvider.js +31 -0
  149. package/dist/ptr/llm/providers/LLMProvider.js.map +1 -0
  150. package/dist/ptr/llm/providers/MLCLLMProvider.d.ts +22 -0
  151. package/dist/ptr/llm/providers/MLCLLMProvider.d.ts.map +1 -0
  152. package/dist/ptr/llm/providers/MLCLLMProvider.js +155 -0
  153. package/dist/ptr/llm/providers/MLCLLMProvider.js.map +1 -0
  154. package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts +20 -0
  155. package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts.map +1 -0
  156. package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js +42 -0
  157. package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js.map +1 -0
  158. package/dist/ptr/llm/providers/OllamaProvider.d.ts +21 -0
  159. package/dist/ptr/llm/providers/OllamaProvider.d.ts.map +1 -0
  160. package/dist/ptr/llm/providers/OllamaProvider.js +158 -0
  161. package/dist/ptr/llm/providers/OllamaProvider.js.map +1 -0
  162. package/dist/ptr/llm/providers/WebLLMProvider.d.ts +22 -0
  163. package/dist/ptr/llm/providers/WebLLMProvider.d.ts.map +1 -0
  164. package/dist/ptr/llm/providers/WebLLMProvider.js +151 -0
  165. package/dist/ptr/llm/providers/WebLLMProvider.js.map +1 -0
  166. package/dist/ptr/node/Action.d.ts +426 -0
  167. package/dist/ptr/node/Action.d.ts.map +1 -0
  168. package/dist/ptr/node/Action.js +711 -0
  169. package/dist/ptr/node/Action.js.map +1 -0
  170. package/dist/ptr/node/CLMLoader.d.ts +18 -0
  171. package/dist/ptr/node/CLMLoader.d.ts.map +1 -0
  172. package/dist/ptr/node/CLMLoader.js +18 -0
  173. package/dist/ptr/node/CLMLoader.js.map +1 -0
  174. package/dist/ptr/node/CLMRunner.d.ts +34 -0
  175. package/dist/ptr/node/CLMRunner.d.ts.map +1 -0
  176. package/dist/ptr/node/CLMRunner.js +36 -0
  177. package/dist/ptr/node/CLMRunner.js.map +1 -0
  178. package/dist/ptr/node/FileSystemUtils.d.ts +40 -0
  179. package/dist/ptr/node/FileSystemUtils.d.ts.map +1 -0
  180. package/dist/ptr/node/FileSystemUtils.js +170 -0
  181. package/dist/ptr/node/FileSystemUtils.js.map +1 -0
  182. package/dist/ptr/node/NetworkConfig.d.ts +191 -0
  183. package/dist/ptr/node/NetworkConfig.d.ts.map +1 -0
  184. package/dist/ptr/node/NetworkConfig.js +8 -0
  185. package/dist/ptr/node/NetworkConfig.js.map +1 -0
  186. package/dist/ptr/node/NetworkRuntime.d.ts +38 -0
  187. package/dist/ptr/node/NetworkRuntime.d.ts.map +1 -0
  188. package/dist/ptr/node/NetworkRuntime.js +871 -0
  189. package/dist/ptr/node/NetworkRuntime.js.map +1 -0
  190. package/dist/ptr/node/P2PChatSession.d.ts +53 -0
  191. package/dist/ptr/node/P2PChatSession.d.ts.map +1 -0
  192. package/dist/ptr/node/P2PChatSession.js +154 -0
  193. package/dist/ptr/node/P2PChatSession.js.map +1 -0
  194. package/dist/ptr/node/RuntimeInterface.d.ts +4 -0
  195. package/dist/ptr/node/RuntimeInterface.d.ts.map +1 -0
  196. package/dist/ptr/node/RuntimeInterface.js +2 -0
  197. package/dist/ptr/node/RuntimeInterface.js.map +1 -0
  198. package/dist/ptr/node/Runtimes.d.ts +34 -0
  199. package/dist/ptr/node/Runtimes.d.ts.map +1 -0
  200. package/dist/ptr/node/Runtimes.js +38 -0
  201. package/dist/ptr/node/Runtimes.js.map +1 -0
  202. package/dist/ptr/node/SignalingServer.d.ts +37 -0
  203. package/dist/ptr/node/SignalingServer.d.ts.map +1 -0
  204. package/dist/ptr/node/SignalingServer.js +218 -0
  205. package/dist/ptr/node/SignalingServer.js.map +1 -0
  206. package/dist/ptr/node/cli.d.ts +3 -0
  207. package/dist/ptr/node/cli.d.ts.map +1 -0
  208. package/dist/ptr/node/cli.js +266 -0
  209. package/dist/ptr/node/cli.js.map +1 -0
  210. package/dist/ptr/node/clm/builtins/handle.d.ts +14 -0
  211. package/dist/ptr/node/clm/builtins/handle.d.ts.map +1 -0
  212. package/dist/ptr/node/clm/builtins/handle.js +177 -0
  213. package/dist/ptr/node/clm/builtins/handle.js.map +1 -0
  214. package/dist/ptr/node/clm/builtins/index.d.ts +20 -0
  215. package/dist/ptr/node/clm/builtins/index.d.ts.map +1 -0
  216. package/dist/ptr/node/clm/builtins/index.js +60 -0
  217. package/dist/ptr/node/clm/builtins/index.js.map +1 -0
  218. package/dist/ptr/node/clm/index.d.ts +25 -0
  219. package/dist/ptr/node/clm/index.d.ts.map +1 -0
  220. package/dist/ptr/node/clm/index.js +28 -0
  221. package/dist/ptr/node/clm/index.js.map +1 -0
  222. package/dist/ptr/node/clm/loader.d.ts +25 -0
  223. package/dist/ptr/node/clm/loader.d.ts.map +1 -0
  224. package/dist/ptr/node/clm/loader.js +146 -0
  225. package/dist/ptr/node/clm/loader.js.map +1 -0
  226. package/dist/ptr/node/clm/multiruntime.d.ts +9 -0
  227. package/dist/ptr/node/clm/multiruntime.d.ts.map +1 -0
  228. package/dist/ptr/node/clm/multiruntime.js +121 -0
  229. package/dist/ptr/node/clm/multiruntime.js.map +1 -0
  230. package/dist/ptr/node/clm/runner.d.ts +70 -0
  231. package/dist/ptr/node/clm/runner.d.ts.map +1 -0
  232. package/dist/ptr/node/clm/runner.js +324 -0
  233. package/dist/ptr/node/clm/runner.js.map +1 -0
  234. package/dist/ptr/node/clm/types.d.ts +166 -0
  235. package/dist/ptr/node/clm/types.d.ts.map +1 -0
  236. package/dist/ptr/node/clm/types.js +5 -0
  237. package/dist/ptr/node/clm/types.js.map +1 -0
  238. package/dist/ptr/node/clm/utils.d.ts +29 -0
  239. package/dist/ptr/node/clm/utils.d.ts.map +1 -0
  240. package/dist/ptr/node/clm/utils.js +88 -0
  241. package/dist/ptr/node/clm/utils.js.map +1 -0
  242. package/dist/ptr/node/network/HttpClient.d.ts +14 -0
  243. package/dist/ptr/node/network/HttpClient.d.ts.map +1 -0
  244. package/dist/ptr/node/network/HttpClient.js +139 -0
  245. package/dist/ptr/node/network/HttpClient.js.map +1 -0
  246. package/dist/ptr/node/network/MCardSerialization.d.ts +19 -0
  247. package/dist/ptr/node/network/MCardSerialization.d.ts.map +1 -0
  248. package/dist/ptr/node/network/MCardSerialization.js +41 -0
  249. package/dist/ptr/node/network/MCardSerialization.js.map +1 -0
  250. package/dist/ptr/node/network/NetworkInfrastructure.d.ts +37 -0
  251. package/dist/ptr/node/network/NetworkInfrastructure.d.ts.map +1 -0
  252. package/dist/ptr/node/network/NetworkInfrastructure.js +121 -0
  253. package/dist/ptr/node/network/NetworkInfrastructure.js.map +1 -0
  254. package/dist/ptr/node/network/NetworkSecurity.d.ts +24 -0
  255. package/dist/ptr/node/network/NetworkSecurity.d.ts.map +1 -0
  256. package/dist/ptr/node/network/NetworkSecurity.js +104 -0
  257. package/dist/ptr/node/network/NetworkSecurity.js.map +1 -0
  258. package/dist/ptr/node/runtimes/base.d.ts +31 -0
  259. package/dist/ptr/node/runtimes/base.d.ts.map +1 -0
  260. package/dist/ptr/node/runtimes/base.js +33 -0
  261. package/dist/ptr/node/runtimes/base.js.map +1 -0
  262. package/dist/ptr/node/runtimes/binary.d.ts +10 -0
  263. package/dist/ptr/node/runtimes/binary.d.ts.map +1 -0
  264. package/dist/ptr/node/runtimes/binary.js +16 -0
  265. package/dist/ptr/node/runtimes/binary.js.map +1 -0
  266. package/dist/ptr/node/runtimes/factory.d.ts +22 -0
  267. package/dist/ptr/node/runtimes/factory.d.ts.map +1 -0
  268. package/dist/ptr/node/runtimes/factory.js +152 -0
  269. package/dist/ptr/node/runtimes/factory.js.map +1 -0
  270. package/dist/ptr/node/runtimes/index.d.ts +28 -0
  271. package/dist/ptr/node/runtimes/index.d.ts.map +1 -0
  272. package/dist/ptr/node/runtimes/index.js +30 -0
  273. package/dist/ptr/node/runtimes/index.js.map +1 -0
  274. package/dist/ptr/node/runtimes/javascript.d.ts +22 -0
  275. package/dist/ptr/node/runtimes/javascript.d.ts.map +1 -0
  276. package/dist/ptr/node/runtimes/javascript.js +125 -0
  277. package/dist/ptr/node/runtimes/javascript.js.map +1 -0
  278. package/dist/ptr/node/runtimes/lean.d.ts +10 -0
  279. package/dist/ptr/node/runtimes/lean.d.ts.map +1 -0
  280. package/dist/ptr/node/runtimes/lean.js +60 -0
  281. package/dist/ptr/node/runtimes/lean.js.map +1 -0
  282. package/dist/ptr/node/runtimes/loader.d.ts +21 -0
  283. package/dist/ptr/node/runtimes/loader.d.ts.map +1 -0
  284. package/dist/ptr/node/runtimes/loader.js +126 -0
  285. package/dist/ptr/node/runtimes/loader.js.map +1 -0
  286. package/dist/ptr/node/runtimes/python.d.ts +14 -0
  287. package/dist/ptr/node/runtimes/python.d.ts.map +1 -0
  288. package/dist/ptr/node/runtimes/python.js +100 -0
  289. package/dist/ptr/node/runtimes/python.js.map +1 -0
  290. package/dist/ptr/node/runtimes/wasm.d.ts +10 -0
  291. package/dist/ptr/node/runtimes/wasm.d.ts.map +1 -0
  292. package/dist/ptr/node/runtimes/wasm.js +55 -0
  293. package/dist/ptr/node/runtimes/wasm.js.map +1 -0
  294. package/dist/rag/GraphRAGEngine.d.ts +26 -0
  295. package/dist/rag/GraphRAGEngine.d.ts.map +1 -0
  296. package/dist/rag/GraphRAGEngine.js +166 -0
  297. package/dist/rag/GraphRAGEngine.js.map +1 -0
  298. package/dist/rag/HandleVectorStore.d.ts +201 -0
  299. package/dist/rag/HandleVectorStore.d.ts.map +1 -0
  300. package/dist/rag/HandleVectorStore.js +527 -0
  301. package/dist/rag/HandleVectorStore.js.map +1 -0
  302. package/dist/rag/PersistentIndexer.d.ts +148 -0
  303. package/dist/rag/PersistentIndexer.d.ts.map +1 -0
  304. package/dist/rag/PersistentIndexer.js +302 -0
  305. package/dist/rag/PersistentIndexer.js.map +1 -0
  306. package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts +87 -0
  307. package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts.map +1 -0
  308. package/dist/rag/embeddings/VisionEmbeddingProvider.js +164 -0
  309. package/dist/rag/embeddings/VisionEmbeddingProvider.js.map +1 -0
  310. package/dist/rag/graph/community.d.ts +56 -0
  311. package/dist/rag/graph/community.d.ts.map +1 -0
  312. package/dist/rag/graph/community.js +247 -0
  313. package/dist/rag/graph/community.js.map +1 -0
  314. package/dist/rag/graph/extractor.d.ts +99 -0
  315. package/dist/rag/graph/extractor.d.ts.map +1 -0
  316. package/dist/rag/graph/extractor.js +210 -0
  317. package/dist/rag/graph/extractor.js.map +1 -0
  318. package/dist/rag/graph/store.d.ts +176 -0
  319. package/dist/rag/graph/store.d.ts.map +1 -0
  320. package/dist/rag/graph/store.js +504 -0
  321. package/dist/rag/graph/store.js.map +1 -0
  322. package/dist/rag/index.d.ts +20 -0
  323. package/dist/rag/index.d.ts.map +1 -0
  324. package/dist/rag/index.js +26 -0
  325. package/dist/rag/index.js.map +1 -0
  326. package/dist/rag/semanticVersioning.d.ts +187 -0
  327. package/dist/rag/semanticVersioning.d.ts.map +1 -0
  328. package/dist/rag/semanticVersioning.js +253 -0
  329. package/dist/rag/semanticVersioning.js.map +1 -0
  330. package/dist/storage/IndexedDBEngine.d.ts +33 -0
  331. package/dist/storage/IndexedDBEngine.d.ts.map +1 -0
  332. package/dist/storage/IndexedDBEngine.js +198 -0
  333. package/dist/storage/IndexedDBEngine.js.map +1 -0
  334. package/dist/storage/SqliteNodeEngine.d.ts +123 -0
  335. package/dist/storage/SqliteNodeEngine.d.ts.map +1 -0
  336. package/dist/storage/SqliteNodeEngine.js +385 -0
  337. package/dist/storage/SqliteNodeEngine.js.map +1 -0
  338. package/dist/storage/SqliteWasmEngine.d.ts +60 -0
  339. package/dist/storage/SqliteWasmEngine.d.ts.map +1 -0
  340. package/dist/storage/SqliteWasmEngine.js +193 -0
  341. package/dist/storage/SqliteWasmEngine.js.map +1 -0
  342. package/dist/storage/StorageAdapter.d.ts +42 -0
  343. package/dist/storage/StorageAdapter.d.ts.map +1 -0
  344. package/dist/storage/StorageAdapter.js +2 -0
  345. package/dist/storage/StorageAdapter.js.map +1 -0
  346. package/dist/storage/VectorStore.d.ts +202 -0
  347. package/dist/storage/VectorStore.d.ts.map +1 -0
  348. package/dist/storage/VectorStore.js +557 -0
  349. package/dist/storage/VectorStore.js.map +1 -0
  350. package/dist/storage/schema.d.ts +162 -0
  351. package/dist/storage/schema.d.ts.map +1 -0
  352. package/dist/storage/schema.js +373 -0
  353. package/dist/storage/schema.js.map +1 -0
  354. package/dist/util/FileIO.d.ts +44 -0
  355. package/dist/util/FileIO.d.ts.map +1 -0
  356. package/dist/util/FileIO.js +203 -0
  357. package/dist/util/FileIO.js.map +1 -0
  358. package/dist/util/Loader.d.ts +34 -0
  359. package/dist/util/Loader.d.ts.map +1 -0
  360. package/dist/util/Loader.js +168 -0
  361. package/dist/util/Loader.js.map +1 -0
  362. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../../../src/ptr/node/network/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAc,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEjI,OAAO,EAAE,WAAW,EAAE,YAAY,EAAc,MAAM,4BAA4B,CAAC;AAEnF,qBAAa,UAAU;IACnB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,KAAK,CAAe;gBAEhB,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY;IAKnD,OAAO,CACT,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE;QACJ,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,YAAY,CAAA;KAC9B,GACF,OAAO,CAAC,mBAAmB,GAAG,iBAAiB,CAAC;CAyJtD"}
@@ -0,0 +1,139 @@
1
+ import { MCard } from '../../../model/MCard.js';
2
+ import { NetworkCache, RetryUtils } from './NetworkInfrastructure.js';
3
+ export class HttpClient {
4
+ rateLimiter;
5
+ cache;
6
+ constructor(rateLimiter, cache) {
7
+ this.rateLimiter = rateLimiter;
8
+ this.cache = cache;
9
+ }
10
+ async request(url, method, headers, body, config) {
11
+ const startTime = Date.now();
12
+ const fetchUrl = new URL(url);
13
+ // 1. Check cache first (only for GET requests)
14
+ const cacheConfig = config.cache;
15
+ const cacheKey = NetworkCache.generateKey(method, fetchUrl.toString(), typeof body === 'string' ? body : undefined);
16
+ if (cacheConfig?.enabled && method === 'GET') {
17
+ const cachedResponse = this.cache.get(cacheKey);
18
+ if (cachedResponse) {
19
+ console.log(`[Network] Cache hit for ${url}`);
20
+ return { ...cachedResponse, cached: true };
21
+ }
22
+ }
23
+ // 2. Rate limiting
24
+ const domain = fetchUrl.hostname;
25
+ await this.rateLimiter.waitFor(domain);
26
+ // 3. Retry configuration
27
+ const retryConfig = config.retry || {
28
+ max_attempts: 1,
29
+ backoff: 'exponential',
30
+ base_delay: 1000,
31
+ max_delay: 30000
32
+ };
33
+ let lastError = null;
34
+ let lastStatus = null;
35
+ let retriesAttempted = 0;
36
+ for (let attempt = 1; attempt <= retryConfig.max_attempts; attempt++) {
37
+ const timeout = config.timeout || 30000;
38
+ const controller = new AbortController();
39
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
40
+ try {
41
+ const ttfbStart = Date.now();
42
+ const response = await fetch(fetchUrl.toString(), {
43
+ method,
44
+ headers,
45
+ body,
46
+ signal: controller.signal
47
+ });
48
+ clearTimeout(timeoutId);
49
+ // Check if we should retry based on status
50
+ if (!response.ok && RetryUtils.shouldRetryStatus(response.status, retryConfig.retry_on)) {
51
+ lastStatus = response.status;
52
+ if (attempt < retryConfig.max_attempts) {
53
+ retriesAttempted++;
54
+ const delay = RetryUtils.calculateBackoffDelay(attempt, retryConfig.backoff, retryConfig.base_delay, retryConfig.max_delay);
55
+ console.log(`[Network] Retry ${attempt}/${retryConfig.max_attempts} for ${url} (status: ${response.status}, delay: ${delay}ms)`);
56
+ await new Promise(resolve => setTimeout(resolve, delay));
57
+ continue;
58
+ }
59
+ }
60
+ // Process Response
61
+ const ttfbTime = Date.now() - ttfbStart;
62
+ let responseBody;
63
+ const responseType = config.responseType || 'json';
64
+ if (responseType === 'json') {
65
+ try {
66
+ responseBody = await response.json();
67
+ }
68
+ catch {
69
+ responseBody = await response.text(); // Fallback
70
+ }
71
+ }
72
+ else if (responseType === 'text') {
73
+ responseBody = await response.text();
74
+ }
75
+ else if (responseType === 'binary') {
76
+ const arrayBuffer = await response.arrayBuffer();
77
+ responseBody = Buffer.from(arrayBuffer).toString('base64');
78
+ }
79
+ else {
80
+ responseBody = await response.text();
81
+ }
82
+ const totalTime = Date.now() - startTime;
83
+ // Calculate mcard_hash for content-addressed response
84
+ let mcard_hash;
85
+ try {
86
+ const bodyStr = typeof responseBody === 'string' ? responseBody : JSON.stringify(responseBody);
87
+ const responseCard = await MCard.create(bodyStr);
88
+ mcard_hash = responseCard.hash;
89
+ }
90
+ catch {
91
+ // Non-critical: skip hash if creation fails
92
+ }
93
+ const timing = {
94
+ dns: 0,
95
+ connect: 0,
96
+ ttfb: ttfbTime,
97
+ total: totalTime
98
+ };
99
+ const result = {
100
+ success: true,
101
+ status: response.status,
102
+ headers: Object.fromEntries(response.headers.entries()),
103
+ body: responseBody,
104
+ timing,
105
+ mcard_hash
106
+ };
107
+ // Cache successful GET responses
108
+ if (cacheConfig?.enabled && method === 'GET' && response.ok) {
109
+ await this.cache.set(cacheKey, result, cacheConfig.ttl, cacheConfig.storage === 'mcard');
110
+ }
111
+ return result;
112
+ }
113
+ catch (error) {
114
+ clearTimeout(timeoutId);
115
+ lastError = error;
116
+ // Only retry on network errors or timeouts
117
+ if (attempt < retryConfig.max_attempts) {
118
+ retriesAttempted++;
119
+ const delay = RetryUtils.calculateBackoffDelay(attempt, retryConfig.backoff, retryConfig.base_delay, retryConfig.max_delay);
120
+ console.log(`[Network] Retry ${attempt}/${retryConfig.max_attempts} for ${url} (error: ${lastError.message}, delay: ${delay}ms)`);
121
+ await new Promise(resolve => setTimeout(resolve, delay));
122
+ continue;
123
+ }
124
+ }
125
+ }
126
+ // All retries exhausted
127
+ const err = lastError;
128
+ return {
129
+ success: false,
130
+ error: {
131
+ code: err?.name === 'AbortError' ? 'TIMEOUT' : 'HTTP_ERROR',
132
+ message: err?.message || 'Request failed after retries',
133
+ status: lastStatus,
134
+ retries_attempted: retriesAttempted
135
+ }
136
+ };
137
+ }
138
+ }
139
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../../../src/ptr/node/network/HttpClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAe,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnF,MAAM,OAAO,UAAU;IACX,WAAW,CAAc;IACzB,KAAK,CAAe;IAE5B,YAAY,WAAwB,EAAE,KAAmB;QACrD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO,CACT,GAAW,EACX,MAAc,EACd,OAA+B,EAC/B,IAA0B,EAC1B,MAKC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAE9B,+CAA+C;QAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEpH,IAAI,WAAW,EAAE,OAAO,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,cAAc,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;gBAC9C,OAAO,EAAE,GAAG,cAAc,EAAE,MAAM,EAAE,IAAI,EAAS,CAAC;YACtD,CAAC;QACL,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACjC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEvC,yBAAyB;QACzB,MAAM,WAAW,GAAgB,MAAM,CAAC,KAAK,IAAI;YAC7C,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,KAAK;SACnB,CAAC;QAEF,IAAI,SAAS,GAAiB,IAAI,CAAC;QACnC,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;YACnE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;YAEhE,IAAI,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM;oBACN,OAAO;oBACP,IAAI;oBACJ,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC5B,CAAC,CAAC;gBAEH,YAAY,CAAC,SAAS,CAAC,CAAC;gBAExB,2CAA2C;gBAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtF,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC7B,IAAI,OAAO,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;wBACrC,gBAAgB,EAAE,CAAC;wBACnB,MAAM,KAAK,GAAG,UAAU,CAAC,qBAAqB,CAC1C,OAAO,EACP,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,UAAU,EACtB,WAAW,CAAC,SAAS,CACxB,CAAC;wBACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,IAAI,WAAW,CAAC,YAAY,QAAQ,GAAG,aAAa,QAAQ,CAAC,MAAM,YAAY,KAAK,KAAK,CAAC,CAAC;wBACjI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;wBACzD,SAAS;oBACb,CAAC;gBACL,CAAC;gBAED,mBAAmB;gBACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACxC,IAAI,YAAqB,CAAC;gBAC1B,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC;gBAEnD,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;oBAC1B,IAAI,CAAC;wBACD,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACzC,CAAC;oBAAC,MAAM,CAAC;wBACL,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW;oBACrD,CAAC;gBACL,CAAC;qBAAM,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;oBACjC,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACzC,CAAC;qBAAM,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;oBACnC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;oBACjD,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC/D,CAAC;qBAAM,CAAC;oBACJ,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACzC,CAAC;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAEzC,sDAAsD;gBACtD,IAAI,UAA8B,CAAC;gBACnC,IAAI,CAAC;oBACD,MAAM,OAAO,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;oBAC/F,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACjD,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC;gBACnC,CAAC;gBAAC,MAAM,CAAC;oBACL,4CAA4C;gBAChD,CAAC;gBAED,MAAM,MAAM,GAAe;oBACvB,GAAG,EAAE,CAAC;oBACN,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,SAAS;iBACnB,CAAC;gBAEF,MAAM,MAAM,GAAwB;oBAChC,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvD,IAAI,EAAE,YAAY;oBAClB,MAAM;oBACN,UAAU;iBACb,CAAC;gBAEF,iCAAiC;gBACjC,IAAI,WAAW,EAAE,OAAO,IAAI,MAAM,KAAK,KAAK,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAC1D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;gBAC7F,CAAC;gBAED,OAAO,MAAM,CAAC;YAElB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,SAAS,GAAG,KAAc,CAAC;gBAE3B,2CAA2C;gBAC3C,IAAI,OAAO,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;oBACrC,gBAAgB,EAAE,CAAC;oBACnB,MAAM,KAAK,GAAG,UAAU,CAAC,qBAAqB,CAC1C,OAAO,EACP,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,UAAU,EACtB,WAAW,CAAC,SAAS,CACxB,CAAC;oBACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,IAAI,WAAW,CAAC,YAAY,QAAQ,GAAG,YAAY,SAAS,CAAC,OAAO,YAAY,KAAK,KAAK,CAAC,CAAC;oBAClI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBACzD,SAAS;gBACb,CAAC;YACL,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,MAAM,GAAG,GAAG,SAAsC,CAAC;QACnD,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACH,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;gBAC3D,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,8BAA8B;gBACvD,MAAM,EAAE,UAAU;gBAClB,iBAAiB,EAAE,gBAAgB;aACtC;SACJ,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,19 @@
1
+ import { MCard } from '../../../model/MCard.js';
2
+ import { MCardPayload } from '../NetworkConfig.js';
3
+ export declare class MCardSerialization {
4
+ /**
5
+ * Serialize an MCard to a JSON-safe payload for network transfer
6
+ */
7
+ static serialize(card: MCard): MCardPayload;
8
+ /**
9
+ * Deserialize a JSON payload back to an MCard
10
+ * Uses fromData if hash/g_time provided (preserves identity)
11
+ * Otherwise creates new MCard (generates new hash/g_time)
12
+ */
13
+ static deserialize(json: Partial<MCardPayload>): Promise<MCard>;
14
+ /**
15
+ * Verify hash matches content (optional strict mode)
16
+ */
17
+ static verifyHash(card: MCard, expectedHash: string): boolean;
18
+ }
19
+ //# sourceMappingURL=MCardSerialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCardSerialization.d.ts","sourceRoot":"","sources":["../../../../src/ptr/node/network/MCardSerialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,qBAAa,kBAAkB;IAC3B;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY;IAU3C;;;;OAIG;WACU,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAYrE;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;CAOhE"}
@@ -0,0 +1,41 @@
1
+ import { MCard } from '../../../model/MCard.js';
2
+ export class MCardSerialization {
3
+ /**
4
+ * Serialize an MCard to a JSON-safe payload for network transfer
5
+ */
6
+ static serialize(card) {
7
+ return {
8
+ hash: card.hash,
9
+ content: Buffer.from(card.content).toString('base64'),
10
+ g_time: card.g_time,
11
+ contentType: card.contentType,
12
+ hashFunction: card.hashFunction
13
+ };
14
+ }
15
+ /**
16
+ * Deserialize a JSON payload back to an MCard
17
+ * Uses fromData if hash/g_time provided (preserves identity)
18
+ * Otherwise creates new MCard (generates new hash/g_time)
19
+ */
20
+ static async deserialize(json) {
21
+ if (!json.content) {
22
+ throw new Error('Missing content in MCard payload');
23
+ }
24
+ const content = Buffer.from(json.content, 'base64');
25
+ if (json.hash && json.g_time) {
26
+ return MCard.fromData(content, json.hash, json.g_time);
27
+ }
28
+ return MCard.create(content);
29
+ }
30
+ /**
31
+ * Verify hash matches content (optional strict mode)
32
+ */
33
+ static verifyHash(card, expectedHash) {
34
+ if (card.hash !== expectedHash) {
35
+ console.warn(`[Network] Hash mismatch. Expected: ${expectedHash}, Got: ${card.hash}`);
36
+ return false;
37
+ }
38
+ return true;
39
+ }
40
+ }
41
+ //# sourceMappingURL=MCardSerialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCardSerialization.js","sourceRoot":"","sources":["../../../../src/ptr/node/network/MCardSerialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGhD,MAAM,OAAO,kBAAkB;IAC3B;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,IAAW;QACxB,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACrD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAA2B;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAW,EAAE,YAAoB;QAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,sCAAsC,YAAY,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACtF,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -0,0 +1,37 @@
1
+ import { CardCollection } from '../../../model/CardCollection.js';
2
+ import { HttpSuccessResponse, BackoffStrategy } from '../NetworkConfig.js';
3
+ export declare class RateLimiter {
4
+ private limits;
5
+ private defaultLimit;
6
+ constructor(tokensPerSecond?: number, maxBurst?: number);
7
+ /**
8
+ * Check if request allowed. Consumes a token if allowed.
9
+ */
10
+ check(domain: string): boolean;
11
+ /**
12
+ * Wait until rate limit allows request
13
+ */
14
+ waitFor(domain: string): Promise<void>;
15
+ }
16
+ export declare class NetworkCache {
17
+ private memoryCache;
18
+ private collection?;
19
+ constructor(collection?: CardCollection);
20
+ /**
21
+ * Generate cache key from request config
22
+ */
23
+ static generateKey(method: string, url: string, body?: string): string;
24
+ /**
25
+ * Get cached response if valid
26
+ */
27
+ get(cacheKey: string): HttpSuccessResponse | null;
28
+ /**
29
+ * Cache a response with TTL
30
+ */
31
+ set(cacheKey: string, response: HttpSuccessResponse, ttlSeconds: number, persist?: boolean): Promise<void>;
32
+ }
33
+ export declare class RetryUtils {
34
+ static calculateBackoffDelay(attempt: number, strategy: BackoffStrategy, baseDelay: number, maxDelay?: number): number;
35
+ static shouldRetryStatus(status: number, retryOn?: number[]): boolean;
36
+ }
37
+ //# sourceMappingURL=NetworkInfrastructure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkInfrastructure.d.ts","sourceRoot":"","sources":["../../../../src/ptr/node/network/NetworkInfrastructure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAI3E,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,YAAY,CAAgD;gBAExD,eAAe,GAAE,MAAW,EAAE,QAAQ,GAAE,MAAW;IAK/D;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAuB9B;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK/C;AAID,qBAAa,YAAY;IACrB,OAAO,CAAC,WAAW,CAAoE;IACvF,OAAO,CAAC,UAAU,CAAC,CAAiB;gBAExB,UAAU,CAAC,EAAE,cAAc;IAKvC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAYtE;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAWjD;;OAEG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAiB1H;AAID,qBAAa,UAAU;IACnB,MAAM,CAAC,qBAAqB,CACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAClB,MAAM;IAkBT,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO;CAKxE"}
@@ -0,0 +1,121 @@
1
+ import { MCard } from '../../../model/MCard.js';
2
+ // ============ Rate Limiting ============
3
+ export class RateLimiter {
4
+ limits;
5
+ defaultLimit;
6
+ constructor(tokensPerSecond = 10, maxBurst = 20) {
7
+ this.limits = new Map();
8
+ this.defaultLimit = { tokensPerSecond, maxBurst };
9
+ }
10
+ /**
11
+ * Check if request allowed. Consumes a token if allowed.
12
+ */
13
+ check(domain) {
14
+ const now = Date.now();
15
+ const bucket = this.limits.get(domain) || {
16
+ tokens: this.defaultLimit.maxBurst,
17
+ lastRefill: now
18
+ };
19
+ // Refill tokens based on time elapsed
20
+ const elapsed = (now - bucket.lastRefill) / 1000;
21
+ const refill = elapsed * this.defaultLimit.tokensPerSecond;
22
+ bucket.tokens = Math.min(this.defaultLimit.maxBurst, bucket.tokens + refill);
23
+ bucket.lastRefill = now;
24
+ if (bucket.tokens >= 1) {
25
+ bucket.tokens -= 1;
26
+ this.limits.set(domain, bucket);
27
+ return true;
28
+ }
29
+ this.limits.set(domain, bucket);
30
+ return false;
31
+ }
32
+ /**
33
+ * Wait until rate limit allows request
34
+ */
35
+ async waitFor(domain) {
36
+ while (!this.check(domain)) {
37
+ await new Promise(resolve => setTimeout(resolve, 100));
38
+ }
39
+ }
40
+ }
41
+ // ============ Response Caching ============
42
+ export class NetworkCache {
43
+ memoryCache;
44
+ collection;
45
+ constructor(collection) {
46
+ this.memoryCache = new Map();
47
+ this.collection = collection;
48
+ }
49
+ /**
50
+ * Generate cache key from request config
51
+ */
52
+ static generateKey(method, url, body) {
53
+ const keyData = `${method}:${url}:${body || ''}`;
54
+ // Simple hash for cache key
55
+ let hash = 0;
56
+ for (let i = 0; i < keyData.length; i++) {
57
+ const char = keyData.charCodeAt(i);
58
+ hash = ((hash << 5) - hash) + char;
59
+ hash = hash & hash;
60
+ }
61
+ return `cache_${Math.abs(hash).toString(36)}`;
62
+ }
63
+ /**
64
+ * Get cached response if valid
65
+ */
66
+ get(cacheKey) {
67
+ const cached = this.memoryCache.get(cacheKey);
68
+ if (cached && cached.expiresAt > Date.now()) {
69
+ return { ...cached.response, timing: { ...cached.response.timing, total: 0 } };
70
+ }
71
+ if (cached) {
72
+ this.memoryCache.delete(cacheKey);
73
+ }
74
+ return null;
75
+ }
76
+ /**
77
+ * Cache a response with TTL
78
+ */
79
+ async set(cacheKey, response, ttlSeconds, persist = false) {
80
+ this.memoryCache.set(cacheKey, {
81
+ response,
82
+ expiresAt: Date.now() + (ttlSeconds * 1000)
83
+ });
84
+ if (persist && this.collection) {
85
+ const cacheEntry = {
86
+ key: cacheKey,
87
+ response,
88
+ expiresAt: Date.now() + (ttlSeconds * 1000),
89
+ cachedAt: new Date().toISOString()
90
+ };
91
+ const card = await MCard.create(JSON.stringify(cacheEntry));
92
+ await this.collection.add(card);
93
+ }
94
+ }
95
+ }
96
+ // ============ Retry Logic Helper ============
97
+ export class RetryUtils {
98
+ static calculateBackoffDelay(attempt, strategy, baseDelay, maxDelay) {
99
+ let delay;
100
+ switch (strategy) {
101
+ case 'exponential':
102
+ delay = baseDelay * Math.pow(2, attempt - 1);
103
+ break;
104
+ case 'linear':
105
+ delay = baseDelay * attempt;
106
+ break;
107
+ case 'constant':
108
+ default:
109
+ delay = baseDelay;
110
+ }
111
+ const jitter = delay * 0.1 * (Math.random() * 2 - 1);
112
+ delay = Math.round(delay + jitter);
113
+ return maxDelay ? Math.min(delay, maxDelay) : delay;
114
+ }
115
+ static shouldRetryStatus(status, retryOn) {
116
+ const defaultRetryStatuses = [408, 429, 500, 502, 503, 504];
117
+ const retryStatuses = retryOn || defaultRetryStatuses;
118
+ return retryStatuses.includes(status);
119
+ }
120
+ }
121
+ //# sourceMappingURL=NetworkInfrastructure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkInfrastructure.js","sourceRoot":"","sources":["../../../../src/ptr/node/network/NetworkInfrastructure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { NetworkSecurityConfig } from '../NetworkConfig.js';
2
+ export declare class NetworkSecurity {
3
+ private config;
4
+ constructor(config?: NetworkSecurityConfig);
5
+ /**
6
+ * Load security configuration from environment variables
7
+ */
8
+ private loadSecurityConfigFromEnv;
9
+ /**
10
+ * Validate URL against security policy
11
+ * Throws SecurityViolationError if URL is not allowed
12
+ */
13
+ validateUrl(urlString: string): void;
14
+ /**
15
+ * Match hostname against domain pattern (supports wildcards like *.example.com)
16
+ */
17
+ private matchDomainPattern;
18
+ /**
19
+ * Check if hostname is a private IP address
20
+ */
21
+ private isPrivateIP;
22
+ private createSecurityError;
23
+ }
24
+ //# sourceMappingURL=NetworkSecurity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkSecurity.d.ts","sourceRoot":"","sources":["../../../../src/ptr/node/network/NetworkSecurity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA0B,MAAM,qBAAqB,CAAC;AAEpF,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAwB;gBAE1B,MAAM,CAAC,EAAE,qBAAqB;IAI1C;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAejC;;;OAGG;IACI,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAyD3C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,mBAAmB;CAK9B"}
@@ -0,0 +1,104 @@
1
+ export class NetworkSecurity {
2
+ config;
3
+ constructor(config) {
4
+ this.config = config || this.loadSecurityConfigFromEnv();
5
+ }
6
+ /**
7
+ * Load security configuration from environment variables
8
+ */
9
+ loadSecurityConfigFromEnv() {
10
+ const parseList = (value) => {
11
+ if (!value)
12
+ return undefined;
13
+ return value.split(',').map(s => s.trim()).filter(s => s.length > 0);
14
+ };
15
+ return {
16
+ allowed_domains: parseList(process.env.CLM_ALLOWED_DOMAINS),
17
+ blocked_domains: parseList(process.env.CLM_BLOCKED_DOMAINS),
18
+ allowed_protocols: parseList(process.env.CLM_ALLOWED_PROTOCOLS),
19
+ block_private_ips: process.env.CLM_BLOCK_PRIVATE_IPS === 'true',
20
+ block_localhost: process.env.CLM_BLOCK_LOCALHOST === 'true'
21
+ };
22
+ }
23
+ /**
24
+ * Validate URL against security policy
25
+ * Throws SecurityViolationError if URL is not allowed
26
+ */
27
+ validateUrl(urlString) {
28
+ let url;
29
+ try {
30
+ url = new URL(urlString);
31
+ }
32
+ catch {
33
+ throw this.createSecurityError('DOMAIN_BLOCKED', `Invalid URL: ${urlString}`, urlString);
34
+ }
35
+ const hostname = url.hostname.toLowerCase();
36
+ const protocol = url.protocol.replace(':', '');
37
+ // 1. Check blocked domains (takes precedence)
38
+ if (this.config.blocked_domains) {
39
+ for (const pattern of this.config.blocked_domains) {
40
+ if (this.matchDomainPattern(hostname, pattern)) {
41
+ throw this.createSecurityError('DOMAIN_BLOCKED', `Domain '${hostname}' is blocked by security policy`, urlString);
42
+ }
43
+ }
44
+ }
45
+ // 2. Check allowed domains (if configured, only these are allowed)
46
+ if (this.config.allowed_domains && this.config.allowed_domains.length > 0) {
47
+ const isAllowed = this.config.allowed_domains.some(pattern => this.matchDomainPattern(hostname, pattern));
48
+ if (!isAllowed) {
49
+ throw this.createSecurityError('DOMAIN_NOT_ALLOWED', `Domain '${hostname}' is not in the allowed list`, urlString);
50
+ }
51
+ }
52
+ // 3. Check allowed protocols
53
+ if (this.config.allowed_protocols && this.config.allowed_protocols.length > 0) {
54
+ if (!this.config.allowed_protocols.includes(protocol)) {
55
+ throw this.createSecurityError('PROTOCOL_NOT_ALLOWED', `Protocol '${protocol}' is not allowed. Allowed: ${this.config.allowed_protocols.join(', ')}`, urlString);
56
+ }
57
+ }
58
+ // 4. Check localhost blocking
59
+ if (this.config.block_localhost) {
60
+ if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1') {
61
+ throw this.createSecurityError('LOCALHOST_BLOCKED', 'Localhost access is blocked by security policy', urlString);
62
+ }
63
+ }
64
+ // 5. Check private IP blocking
65
+ if (this.config.block_private_ips) {
66
+ if (this.isPrivateIP(hostname)) {
67
+ throw this.createSecurityError('PRIVATE_IP_BLOCKED', `Private IP '${hostname}' is blocked by security policy`, urlString);
68
+ }
69
+ }
70
+ }
71
+ /**
72
+ * Match hostname against domain pattern (supports wildcards like *.example.com)
73
+ */
74
+ matchDomainPattern(hostname, pattern) {
75
+ const patternLower = pattern.toLowerCase();
76
+ if (patternLower.startsWith('*.')) {
77
+ // Wildcard pattern: *.example.com matches sub.example.com, a.b.example.com
78
+ const suffix = patternLower.slice(1); // .example.com
79
+ return hostname.endsWith(suffix) || hostname === patternLower.slice(2);
80
+ }
81
+ return hostname === patternLower;
82
+ }
83
+ /**
84
+ * Check if hostname is a private IP address
85
+ */
86
+ isPrivateIP(hostname) {
87
+ // Simple regex checks for common private IP ranges
88
+ const privatePatterns = [
89
+ /^10\.\d+\.\d+\.\d+$/, // 10.x.x.x
90
+ /^192\.168\.\d+\.\d+$/, // 192.168.x.x
91
+ /^172\.(1[6-9]|2\d|3[01])\.\d+\.\d+$/, // 172.16-31.x.x
92
+ /^169\.254\.\d+\.\d+$/, // Link-local
93
+ /^fc00:/i, // IPv6 private
94
+ /^fd00:/i, // IPv6 private
95
+ ];
96
+ return privatePatterns.some(pattern => pattern.test(hostname));
97
+ }
98
+ createSecurityError(code, message, url) {
99
+ const error = new Error(message);
100
+ error.securityViolation = { code, message, url };
101
+ return error;
102
+ }
103
+ }
104
+ //# sourceMappingURL=NetworkSecurity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkSecurity.js","sourceRoot":"","sources":["../../../../src/ptr/node/network/NetworkSecurity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Base types and utilities for runtime executors.
3
+ */
4
+ import * as child_process from 'child_process';
5
+ import type { CardCollection } from '../../../model/CardCollection.js';
6
+ export declare const execFile: typeof child_process.execFile.__promisify__;
7
+ /**
8
+ * Runtime interface - all runtimes must implement this.
9
+ */
10
+ export interface Runtime {
11
+ execute(codeOrPath: string, context: unknown, config: any, chapterDir?: string): Promise<unknown>;
12
+ }
13
+ /**
14
+ * Options for runtime creation.
15
+ */
16
+ export interface RuntimeOptions {
17
+ collection?: CardCollection;
18
+ }
19
+ /**
20
+ * Supported runtime types.
21
+ */
22
+ export type RuntimeType = 'javascript' | 'python' | 'rust' | 'c' | 'wasm' | 'lean' | 'llm' | 'loader' | 'collection_loader' | 'lambda' | 'network';
23
+ /**
24
+ * Check if a command is available on the system.
25
+ */
26
+ export declare function checkCommand(cmd: string, args?: string[]): Promise<boolean>;
27
+ /**
28
+ * Parse subprocess output as JSON or return raw string.
29
+ */
30
+ export declare function parseOutput(stdout: string): unknown;
31
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/ptr/node/runtimes/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,eAAO,MAAM,QAAQ,6CAAyC,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrG;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,UAAU,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACjB,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,GAAG,GACH,MAAM,GACN,MAAM,GACN,KAAK,GACL,QAAQ,GACR,mBAAmB,GACnB,QAAQ,GACR,SAAS,CAAC;AAEhB;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CASnD"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Base types and utilities for runtime executors.
3
+ */
4
+ import * as util from 'util';
5
+ import * as child_process from 'child_process';
6
+ export const execFile = util.promisify(child_process.execFile);
7
+ /**
8
+ * Check if a command is available on the system.
9
+ */
10
+ export async function checkCommand(cmd, args = ['--version']) {
11
+ try {
12
+ await execFile(cmd, args);
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ /**
20
+ * Parse subprocess output as JSON or return raw string.
21
+ */
22
+ export function parseOutput(stdout) {
23
+ const trimmed = stdout.trim();
24
+ if (!trimmed)
25
+ return undefined;
26
+ try {
27
+ return JSON.parse(trimmed);
28
+ }
29
+ catch {
30
+ return trimmed;
31
+ }
32
+ }
33
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/ptr/node/runtimes/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAG/C,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAgC/D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,OAAiB,CAAC,WAAW,CAAC;IAC1E,IAAI,CAAC;QACD,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,OAAO,CAAC;IACnB,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Binary runtime executor.
3
+ *
4
+ * Executes compiled binaries (Rust, C) via subprocess.
5
+ */
6
+ import { Runtime } from './base.js';
7
+ export declare class BinaryRuntime implements Runtime {
8
+ execute(binaryPath: string, context: unknown, config: any, chapterDir: string): Promise<unknown>;
9
+ }
10
+ //# sourceMappingURL=binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../../src/ptr/node/runtimes/binary.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAyB,MAAM,WAAW,CAAC;AAE3D,qBAAa,aAAc,YAAW,OAAO;IACnC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAOzG"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Binary runtime executor.
3
+ *
4
+ * Executes compiled binaries (Rust, C) via subprocess.
5
+ */
6
+ import * as path from 'path';
7
+ import { execFile, parseOutput } from './base.js';
8
+ export class BinaryRuntime {
9
+ async execute(binaryPath, context, config, chapterDir) {
10
+ const fullPath = path.resolve(chapterDir, binaryPath);
11
+ const contextStr = typeof context === 'string' ? context : JSON.stringify(context);
12
+ const { stdout } = await execFile(fullPath, [contextStr]);
13
+ return parseOutput(stdout);
14
+ }
15
+ }
16
+ //# sourceMappingURL=binary.js.map