@labacacia/nps-sdk 1.0.0-alpha.1 → 1.0.0-alpha.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 (452) hide show
  1. package/CHANGELOG.cn.md +181 -0
  2. package/CHANGELOG.md +234 -0
  3. package/LICENSE +0 -0
  4. package/NOTICE +0 -0
  5. package/README.cn.md +163 -0
  6. package/README.md +16 -6
  7. package/dist/core/anchor-cache.d.ts +0 -0
  8. package/dist/core/anchor-cache.d.ts.map +0 -0
  9. package/dist/core/anchor-cache.js +0 -0
  10. package/dist/core/anchor-cache.js.map +0 -0
  11. package/dist/core/cache.d.ts +0 -0
  12. package/dist/core/cache.d.ts.map +0 -0
  13. package/dist/core/cache.js +0 -0
  14. package/dist/core/cache.js.map +0 -0
  15. package/dist/core/canonical-json.d.ts +0 -0
  16. package/dist/core/canonical-json.d.ts.map +0 -0
  17. package/dist/core/canonical-json.js +0 -0
  18. package/dist/core/canonical-json.js.map +0 -0
  19. package/dist/core/codec.d.ts +0 -0
  20. package/dist/core/codec.d.ts.map +0 -0
  21. package/dist/core/codec.js +0 -0
  22. package/dist/core/codec.js.map +0 -0
  23. package/dist/core/codecs/index.d.ts +0 -0
  24. package/dist/core/codecs/index.d.ts.map +0 -0
  25. package/dist/core/codecs/index.js +0 -0
  26. package/dist/core/codecs/index.js.map +0 -0
  27. package/dist/core/codecs/ncp-codec.d.ts +0 -0
  28. package/dist/core/codecs/ncp-codec.d.ts.map +0 -0
  29. package/dist/core/codecs/ncp-codec.js +0 -0
  30. package/dist/core/codecs/ncp-codec.js.map +0 -0
  31. package/dist/core/codecs/tier1-json-codec.d.ts +0 -0
  32. package/dist/core/codecs/tier1-json-codec.d.ts.map +0 -0
  33. package/dist/core/codecs/tier1-json-codec.js +0 -0
  34. package/dist/core/codecs/tier1-json-codec.js.map +0 -0
  35. package/dist/core/codecs/tier2-msgpack-codec.d.ts +0 -0
  36. package/dist/core/codecs/tier2-msgpack-codec.d.ts.map +0 -0
  37. package/dist/core/codecs/tier2-msgpack-codec.js +0 -0
  38. package/dist/core/codecs/tier2-msgpack-codec.js.map +0 -0
  39. package/dist/core/crypto-provider.d.ts +0 -0
  40. package/dist/core/crypto-provider.d.ts.map +0 -0
  41. package/dist/core/crypto-provider.js +0 -0
  42. package/dist/core/crypto-provider.js.map +0 -0
  43. package/dist/core/exceptions.d.ts +0 -0
  44. package/dist/core/exceptions.d.ts.map +0 -0
  45. package/dist/core/exceptions.js +0 -0
  46. package/dist/core/exceptions.js.map +0 -0
  47. package/dist/core/frame-header.d.ts +1 -0
  48. package/dist/core/frame-header.d.ts.map +1 -1
  49. package/dist/core/frame-header.js +1 -0
  50. package/dist/core/frame-header.js.map +1 -1
  51. package/dist/core/frame-registry.d.ts +0 -0
  52. package/dist/core/frame-registry.d.ts.map +1 -1
  53. package/dist/core/frame-registry.js +1 -0
  54. package/dist/core/frame-registry.js.map +1 -1
  55. package/dist/core/frames.d.ts +3 -0
  56. package/dist/core/frames.d.ts.map +1 -1
  57. package/dist/core/frames.js +3 -0
  58. package/dist/core/frames.js.map +1 -1
  59. package/dist/core/index.d.ts +6 -4
  60. package/dist/core/index.d.ts.map +1 -1
  61. package/dist/core/index.js +17 -5
  62. package/dist/core/index.js.map +1 -1
  63. package/dist/core/registry.d.ts +0 -0
  64. package/dist/core/registry.d.ts.map +0 -0
  65. package/dist/core/registry.js +0 -0
  66. package/dist/core/registry.js.map +0 -0
  67. package/dist/core/status-codes.d.ts +20 -0
  68. package/dist/core/status-codes.d.ts.map +1 -1
  69. package/dist/core/status-codes.js +51 -0
  70. package/dist/core/status-codes.js.map +1 -1
  71. package/dist/index.d.ts +1 -1
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -1
  74. package/dist/index.js.map +1 -1
  75. package/dist/ncp/frames/anchor-frame.d.ts +0 -0
  76. package/dist/ncp/frames/anchor-frame.d.ts.map +0 -0
  77. package/dist/ncp/frames/anchor-frame.js +0 -0
  78. package/dist/ncp/frames/anchor-frame.js.map +0 -0
  79. package/dist/ncp/frames/caps-frame.d.ts +0 -0
  80. package/dist/ncp/frames/caps-frame.d.ts.map +0 -0
  81. package/dist/ncp/frames/caps-frame.js +0 -0
  82. package/dist/ncp/frames/caps-frame.js.map +0 -0
  83. package/dist/ncp/frames/diff-frame.d.ts +0 -0
  84. package/dist/ncp/frames/diff-frame.d.ts.map +0 -0
  85. package/dist/ncp/frames/diff-frame.js +0 -0
  86. package/dist/ncp/frames/diff-frame.js.map +0 -0
  87. package/dist/ncp/frames/error-frame.d.ts +0 -0
  88. package/dist/ncp/frames/error-frame.d.ts.map +0 -0
  89. package/dist/ncp/frames/error-frame.js +0 -0
  90. package/dist/ncp/frames/error-frame.js.map +0 -0
  91. package/dist/ncp/frames/hello-frame.d.ts +0 -0
  92. package/dist/ncp/frames/hello-frame.d.ts.map +0 -0
  93. package/dist/ncp/frames/hello-frame.js +0 -0
  94. package/dist/ncp/frames/hello-frame.js.map +0 -0
  95. package/dist/ncp/frames/stream-frame.d.ts +0 -0
  96. package/dist/ncp/frames/stream-frame.d.ts.map +0 -0
  97. package/dist/ncp/frames/stream-frame.js +0 -0
  98. package/dist/ncp/frames/stream-frame.js.map +0 -0
  99. package/dist/ncp/frames.d.ts +25 -0
  100. package/dist/ncp/frames.d.ts.map +1 -1
  101. package/dist/ncp/frames.js +61 -0
  102. package/dist/ncp/frames.js.map +1 -1
  103. package/dist/ncp/handshake.d.ts +0 -0
  104. package/dist/ncp/handshake.d.ts.map +0 -0
  105. package/dist/ncp/handshake.js +0 -0
  106. package/dist/ncp/handshake.js.map +0 -0
  107. package/dist/ncp/index.d.ts +1 -0
  108. package/dist/ncp/index.d.ts.map +1 -1
  109. package/dist/ncp/index.js +1 -0
  110. package/dist/ncp/index.js.map +1 -1
  111. package/dist/ncp/ncp-error-codes.d.ts +5 -0
  112. package/dist/ncp/ncp-error-codes.d.ts.map +1 -1
  113. package/dist/ncp/ncp-error-codes.js +27 -0
  114. package/dist/ncp/ncp-error-codes.js.map +1 -1
  115. package/dist/ncp/ncp-patch-format.d.ts +0 -0
  116. package/dist/ncp/ncp-patch-format.d.ts.map +0 -0
  117. package/dist/ncp/ncp-patch-format.js +0 -0
  118. package/dist/ncp/ncp-patch-format.js.map +0 -0
  119. package/dist/ncp/preamble.d.ts +47 -0
  120. package/dist/ncp/preamble.d.ts.map +1 -0
  121. package/dist/ncp/preamble.js +74 -0
  122. package/dist/ncp/preamble.js.map +1 -0
  123. package/dist/ncp/registry.d.ts +0 -0
  124. package/dist/ncp/registry.d.ts.map +1 -1
  125. package/dist/ncp/registry.js +2 -1
  126. package/dist/ncp/registry.js.map +1 -1
  127. package/dist/ncp/stream-manager.d.ts +0 -0
  128. package/dist/ncp/stream-manager.d.ts.map +0 -0
  129. package/dist/ncp/stream-manager.js +0 -0
  130. package/dist/ncp/stream-manager.js.map +0 -0
  131. package/dist/ndp/dns-txt.d.ts +35 -0
  132. package/dist/ndp/dns-txt.d.ts.map +1 -0
  133. package/dist/ndp/dns-txt.js +67 -0
  134. package/dist/ndp/dns-txt.js.map +1 -0
  135. package/dist/ndp/frames.d.ts +34 -9
  136. package/dist/ndp/frames.d.ts.map +1 -1
  137. package/dist/ndp/frames.js +54 -15
  138. package/dist/ndp/frames.js.map +1 -1
  139. package/dist/ndp/index.d.ts +3 -0
  140. package/dist/ndp/index.d.ts.map +1 -1
  141. package/dist/ndp/index.js +3 -0
  142. package/dist/ndp/index.js.map +1 -1
  143. package/dist/ndp/ndp-error-codes.d.ts +25 -0
  144. package/dist/ndp/ndp-error-codes.d.ts.map +1 -0
  145. package/dist/ndp/ndp-error-codes.js +48 -0
  146. package/dist/ndp/ndp-error-codes.js.map +1 -0
  147. package/dist/ndp/ndp-registry.d.ts +2 -0
  148. package/dist/ndp/ndp-registry.d.ts.map +1 -1
  149. package/dist/ndp/ndp-registry.js +25 -0
  150. package/dist/ndp/ndp-registry.js.map +1 -1
  151. package/dist/ndp/registry.d.ts +0 -0
  152. package/dist/ndp/registry.d.ts.map +0 -0
  153. package/dist/ndp/registry.js +0 -0
  154. package/dist/ndp/registry.js.map +0 -0
  155. package/dist/ndp/security.d.ts +8 -0
  156. package/dist/ndp/security.d.ts.map +1 -0
  157. package/dist/ndp/security.js +9 -0
  158. package/dist/ndp/security.js.map +1 -0
  159. package/dist/ndp/validator.d.ts +0 -0
  160. package/dist/ndp/validator.d.ts.map +0 -0
  161. package/dist/ndp/validator.js +0 -0
  162. package/dist/ndp/validator.js.map +0 -0
  163. package/dist/nip/acme/client.d.ts +31 -0
  164. package/dist/nip/acme/client.d.ts.map +1 -0
  165. package/dist/nip/acme/client.js +136 -0
  166. package/dist/nip/acme/client.js.map +1 -0
  167. package/dist/nip/acme/index.d.ts +6 -0
  168. package/dist/nip/acme/index.d.ts.map +1 -0
  169. package/dist/nip/acme/index.js +8 -0
  170. package/dist/nip/acme/index.js.map +1 -0
  171. package/dist/nip/acme/jws.d.ts +31 -0
  172. package/dist/nip/acme/jws.d.ts.map +1 -0
  173. package/dist/nip/acme/jws.js +76 -0
  174. package/dist/nip/acme/jws.js.map +1 -0
  175. package/dist/nip/acme/messages.d.ts +71 -0
  176. package/dist/nip/acme/messages.d.ts.map +1 -0
  177. package/dist/nip/acme/messages.js +4 -0
  178. package/dist/nip/acme/messages.js.map +1 -0
  179. package/dist/nip/acme/server.d.ts +41 -0
  180. package/dist/nip/acme/server.d.ts.map +1 -0
  181. package/dist/nip/acme/server.js +458 -0
  182. package/dist/nip/acme/server.js.map +1 -0
  183. package/dist/nip/acme/wire.d.ts +19 -0
  184. package/dist/nip/acme/wire.d.ts.map +1 -0
  185. package/dist/nip/acme/wire.js +21 -0
  186. package/dist/nip/acme/wire.js.map +1 -0
  187. package/dist/nip/assurance-level.d.ts +19 -0
  188. package/dist/nip/assurance-level.d.ts.map +1 -0
  189. package/dist/nip/assurance-level.js +38 -0
  190. package/dist/nip/assurance-level.js.map +1 -0
  191. package/dist/nip/cert-format.d.ts +5 -0
  192. package/dist/nip/cert-format.d.ts.map +1 -0
  193. package/dist/nip/cert-format.js +6 -0
  194. package/dist/nip/cert-format.js.map +1 -0
  195. package/dist/nip/error-codes.d.ts +44 -0
  196. package/dist/nip/error-codes.d.ts.map +1 -0
  197. package/dist/nip/error-codes.js +97 -0
  198. package/dist/nip/error-codes.js.map +1 -0
  199. package/dist/nip/frames.d.ts +19 -1
  200. package/dist/nip/frames.d.ts.map +1 -1
  201. package/dist/nip/frames.js +39 -4
  202. package/dist/nip/frames.js.map +1 -1
  203. package/dist/nip/identity.d.ts +0 -0
  204. package/dist/nip/identity.d.ts.map +0 -0
  205. package/dist/nip/identity.js +0 -0
  206. package/dist/nip/identity.js.map +0 -0
  207. package/dist/nip/index.d.ts +7 -0
  208. package/dist/nip/index.d.ts.map +1 -1
  209. package/dist/nip/index.js +9 -0
  210. package/dist/nip/index.js.map +1 -1
  211. package/dist/nip/registry.d.ts +0 -0
  212. package/dist/nip/registry.d.ts.map +0 -0
  213. package/dist/nip/registry.js +0 -0
  214. package/dist/nip/registry.js.map +0 -0
  215. package/dist/nip/reputation-client.d.ts +116 -0
  216. package/dist/nip/reputation-client.d.ts.map +1 -0
  217. package/dist/nip/reputation-client.js +261 -0
  218. package/dist/nip/reputation-client.js.map +1 -0
  219. package/dist/nip/verifier.d.ts +23 -0
  220. package/dist/nip/verifier.d.ts.map +1 -0
  221. package/dist/nip/verifier.js +90 -0
  222. package/dist/nip/verifier.js.map +1 -0
  223. package/dist/nip/x509/builder.d.ts +35 -0
  224. package/dist/nip/x509/builder.d.ts.map +1 -0
  225. package/dist/nip/x509/builder.js +59 -0
  226. package/dist/nip/x509/builder.js.map +1 -0
  227. package/dist/nip/x509/index.d.ts +4 -0
  228. package/dist/nip/x509/index.d.ts.map +1 -0
  229. package/dist/nip/x509/index.js +6 -0
  230. package/dist/nip/x509/index.js.map +1 -0
  231. package/dist/nip/x509/oids.d.ts +16 -0
  232. package/dist/nip/x509/oids.d.ts.map +1 -0
  233. package/dist/nip/x509/oids.js +22 -0
  234. package/dist/nip/x509/oids.js.map +1 -0
  235. package/dist/nip/x509/verifier.d.ts +26 -0
  236. package/dist/nip/x509/verifier.d.ts.map +1 -0
  237. package/dist/nip/x509/verifier.js +171 -0
  238. package/dist/nip/x509/verifier.js.map +1 -0
  239. package/dist/nop/client.d.ts +0 -0
  240. package/dist/nop/client.d.ts.map +0 -0
  241. package/dist/nop/client.js +0 -0
  242. package/dist/nop/client.js.map +1 -1
  243. package/dist/nop/dag-validator.d.ts +15 -0
  244. package/dist/nop/dag-validator.d.ts.map +1 -0
  245. package/dist/nop/dag-validator.js +91 -0
  246. package/dist/nop/dag-validator.js.map +1 -0
  247. package/dist/nop/frames.d.ts +8 -3
  248. package/dist/nop/frames.d.ts.map +1 -1
  249. package/dist/nop/frames.js +21 -6
  250. package/dist/nop/frames.js.map +1 -1
  251. package/dist/nop/index.d.ts +3 -0
  252. package/dist/nop/index.d.ts.map +1 -1
  253. package/dist/nop/index.js +3 -0
  254. package/dist/nop/index.js.map +1 -1
  255. package/dist/nop/models.d.ts +13 -2
  256. package/dist/nop/models.d.ts.map +1 -1
  257. package/dist/nop/models.js +9 -0
  258. package/dist/nop/models.js.map +1 -1
  259. package/dist/nop/nop-error-codes.d.ts +31 -0
  260. package/dist/nop/nop-error-codes.d.ts.map +1 -0
  261. package/dist/nop/nop-error-codes.js +61 -0
  262. package/dist/nop/nop-error-codes.js.map +1 -0
  263. package/dist/nop/nop-types.d.ts +0 -0
  264. package/dist/nop/nop-types.d.ts.map +0 -0
  265. package/dist/nop/nop-types.js +0 -0
  266. package/dist/nop/nop-types.js.map +0 -0
  267. package/dist/nop/orchestrator.d.ts +66 -0
  268. package/dist/nop/orchestrator.d.ts.map +1 -0
  269. package/dist/nop/orchestrator.js +229 -0
  270. package/dist/nop/orchestrator.js.map +1 -0
  271. package/dist/nop/registry.d.ts +0 -0
  272. package/dist/nop/registry.d.ts.map +0 -0
  273. package/dist/nop/registry.js +0 -0
  274. package/dist/nop/registry.js.map +0 -0
  275. package/dist/nwp/anchor-client.d.ts +109 -0
  276. package/dist/nwp/anchor-client.d.ts.map +1 -0
  277. package/dist/nwp/anchor-client.js +279 -0
  278. package/dist/nwp/anchor-client.js.map +1 -0
  279. package/dist/nwp/anchor-server.d.ts +127 -0
  280. package/dist/nwp/anchor-server.d.ts.map +1 -0
  281. package/dist/nwp/anchor-server.js +649 -0
  282. package/dist/nwp/anchor-server.js.map +1 -0
  283. package/dist/nwp/bridge.d.ts +24 -0
  284. package/dist/nwp/bridge.d.ts.map +1 -0
  285. package/dist/nwp/bridge.js +26 -0
  286. package/dist/nwp/bridge.js.map +1 -0
  287. package/dist/nwp/cgn.d.ts +19 -0
  288. package/dist/nwp/cgn.d.ts.map +1 -0
  289. package/dist/nwp/cgn.js +29 -0
  290. package/dist/nwp/cgn.js.map +1 -0
  291. package/dist/nwp/client.d.ts +10 -3
  292. package/dist/nwp/client.d.ts.map +1 -1
  293. package/dist/nwp/client.js +58 -7
  294. package/dist/nwp/client.js.map +1 -1
  295. package/dist/nwp/frames.d.ts +56 -2
  296. package/dist/nwp/frames.d.ts.map +1 -1
  297. package/dist/nwp/frames.js +86 -4
  298. package/dist/nwp/frames.js.map +1 -1
  299. package/dist/nwp/http-headers.d.ts +24 -0
  300. package/dist/nwp/http-headers.d.ts.map +1 -0
  301. package/dist/nwp/http-headers.js +29 -0
  302. package/dist/nwp/http-headers.js.map +1 -0
  303. package/dist/nwp/index.d.ts +9 -0
  304. package/dist/nwp/index.d.ts.map +1 -1
  305. package/dist/nwp/index.js +9 -0
  306. package/dist/nwp/index.js.map +1 -1
  307. package/dist/nwp/manifest.d.ts +75 -0
  308. package/dist/nwp/manifest.d.ts.map +1 -0
  309. package/dist/nwp/manifest.js +5 -0
  310. package/dist/nwp/manifest.js.map +1 -0
  311. package/dist/nwp/memory-node-server.d.ts +70 -0
  312. package/dist/nwp/memory-node-server.d.ts.map +1 -0
  313. package/dist/nwp/memory-node-server.js +315 -0
  314. package/dist/nwp/memory-node-server.js.map +1 -0
  315. package/dist/nwp/nwp-error-codes.d.ts +48 -0
  316. package/dist/nwp/nwp-error-codes.d.ts.map +1 -0
  317. package/dist/nwp/nwp-error-codes.js +108 -0
  318. package/dist/nwp/nwp-error-codes.js.map +1 -0
  319. package/dist/nwp/registry.d.ts +0 -0
  320. package/dist/nwp/registry.d.ts.map +0 -0
  321. package/dist/nwp/registry.js +0 -0
  322. package/dist/nwp/registry.js.map +0 -0
  323. package/dist/nwp/reputation.d.ts +37 -0
  324. package/dist/nwp/reputation.d.ts.map +1 -0
  325. package/dist/nwp/reputation.js +118 -0
  326. package/dist/nwp/reputation.js.map +1 -0
  327. package/dist/setup.d.ts +0 -0
  328. package/dist/setup.d.ts.map +0 -0
  329. package/dist/setup.js +0 -0
  330. package/dist/setup.js.map +0 -0
  331. package/doc/nps-sdk.core.cn.md +321 -0
  332. package/doc/nps-sdk.core.md +326 -0
  333. package/doc/nps-sdk.ncp.cn.md +270 -0
  334. package/doc/nps-sdk.ncp.md +276 -0
  335. package/doc/nps-sdk.ndp.cn.md +267 -0
  336. package/doc/nps-sdk.ndp.md +273 -0
  337. package/doc/nps-sdk.nip.cn.md +265 -0
  338. package/doc/nps-sdk.nip.md +272 -0
  339. package/doc/nps-sdk.nop.cn.md +329 -0
  340. package/doc/nps-sdk.nop.md +332 -0
  341. package/doc/nps-sdk.nwp.cn.md +288 -0
  342. package/doc/nps-sdk.nwp.md +295 -0
  343. package/doc/overview.cn.md +149 -0
  344. package/doc/overview.md +153 -0
  345. package/package.json +33 -4
  346. package/CONTRIBUTING.md +0 -33
  347. package/dist/codec-CmHeovTV.d.cts +0 -120
  348. package/dist/codec-CmHeovTV.d.ts +0 -120
  349. package/dist/core/index.cjs +0 -371
  350. package/dist/core/index.cjs.map +0 -1
  351. package/dist/core/index.d.cts +0 -41
  352. package/dist/frames-B3qLdl_g.d.cts +0 -77
  353. package/dist/frames-Ff7-ZPUl.d.ts +0 -77
  354. package/dist/index.cjs +0 -1556
  355. package/dist/index.cjs.map +0 -1
  356. package/dist/index.d.cts +0 -21
  357. package/dist/ncp/index.cjs +0 -188
  358. package/dist/ncp/index.cjs.map +0 -1
  359. package/dist/ncp/index.d.cts +0 -6
  360. package/dist/ndp/index.cjs +0 -252
  361. package/dist/ndp/index.cjs.map +0 -1
  362. package/dist/ndp/index.d.cts +0 -86
  363. package/dist/nip/index.cjs +0 -214
  364. package/dist/nip/index.cjs.map +0 -1
  365. package/dist/nip/index.d.cts +0 -65
  366. package/dist/nop/index.cjs +0 -762
  367. package/dist/nop/index.cjs.map +0 -1
  368. package/dist/nop/index.d.cts +0 -155
  369. package/dist/nwp/index.cjs +0 -658
  370. package/dist/nwp/index.cjs.map +0 -1
  371. package/dist/nwp/index.d.cts +0 -65
  372. package/nip-ca-server/Dockerfile +0 -27
  373. package/nip-ca-server/README.md +0 -45
  374. package/nip-ca-server/db/001_init.sql +0 -25
  375. package/nip-ca-server/docker-compose.yml +0 -29
  376. package/nip-ca-server/package.json +0 -23
  377. package/nip-ca-server/src/ca.ts +0 -155
  378. package/nip-ca-server/src/db.ts +0 -104
  379. package/nip-ca-server/src/index.ts +0 -157
  380. package/nip-ca-server/tsconfig.json +0 -13
  381. package/src/core/anchor-cache.ts +0 -129
  382. package/src/core/cache.ts +0 -93
  383. package/src/core/canonical-json.ts +0 -50
  384. package/src/core/codec.ts +0 -158
  385. package/src/core/codecs/index.ts +0 -5
  386. package/src/core/codecs/ncp-codec.ts +0 -170
  387. package/src/core/codecs/tier1-json-codec.ts +0 -33
  388. package/src/core/codecs/tier2-msgpack-codec.ts +0 -30
  389. package/src/core/crypto-provider.ts +0 -47
  390. package/src/core/exceptions.ts +0 -57
  391. package/src/core/frame-header.ts +0 -282
  392. package/src/core/frame-registry.ts +0 -91
  393. package/src/core/frames.ts +0 -183
  394. package/src/core/index.ts +0 -10
  395. package/src/core/registry.ts +0 -28
  396. package/src/core/status-codes.ts +0 -46
  397. package/src/index.ts +0 -10
  398. package/src/ncp/frames/anchor-frame.ts +0 -87
  399. package/src/ncp/frames/caps-frame.ts +0 -59
  400. package/src/ncp/frames/diff-frame.ts +0 -69
  401. package/src/ncp/frames/error-frame.ts +0 -26
  402. package/src/ncp/frames/hello-frame.ts +0 -50
  403. package/src/ncp/frames/stream-frame.ts +0 -35
  404. package/src/ncp/frames.ts +0 -199
  405. package/src/ncp/handshake.ts +0 -95
  406. package/src/ncp/index.ts +0 -12
  407. package/src/ncp/ncp-error-codes.ts +0 -34
  408. package/src/ncp/ncp-patch-format.ts +0 -16
  409. package/src/ncp/registry.ts +0 -14
  410. package/src/ncp/stream-manager.ts +0 -212
  411. package/src/ndp/frames.ts +0 -124
  412. package/src/ndp/index.ts +0 -7
  413. package/src/ndp/ndp-registry.ts +0 -82
  414. package/src/ndp/registry.ts +0 -12
  415. package/src/ndp/validator.ts +0 -64
  416. package/src/nip/frames.ts +0 -106
  417. package/src/nip/identity.ts +0 -113
  418. package/src/nip/index.ts +0 -6
  419. package/src/nip/registry.ts +0 -12
  420. package/src/nop/client.ts +0 -103
  421. package/src/nop/frames.ts +0 -181
  422. package/src/nop/index.ts +0 -7
  423. package/src/nop/models.ts +0 -79
  424. package/src/nop/nop-types.ts +0 -208
  425. package/src/nop/registry.ts +0 -13
  426. package/src/nwp/client.ts +0 -114
  427. package/src/nwp/frames.ts +0 -116
  428. package/src/nwp/index.ts +0 -6
  429. package/src/nwp/registry.ts +0 -11
  430. package/src/setup.ts +0 -32
  431. package/tests/core/anchor-cache.test.ts +0 -242
  432. package/tests/core/codec.test.ts +0 -205
  433. package/tests/core/frame-registry.test.ts +0 -46
  434. package/tests/core.test.ts +0 -327
  435. package/tests/ncp/diff-binary-bitset.test.ts +0 -107
  436. package/tests/ncp/e2e-enc-reject.test.ts +0 -93
  437. package/tests/ncp/err-error-frame.test.ts +0 -152
  438. package/tests/ncp/frames.test.ts +0 -359
  439. package/tests/ncp/framing.test.ts +0 -233
  440. package/tests/ncp/hello-frame.test.ts +0 -122
  441. package/tests/ncp/inline-anchor.test.ts +0 -88
  442. package/tests/ncp/security.test.ts +0 -184
  443. package/tests/ncp/stream-window.test.ts +0 -167
  444. package/tests/ncp/stream.test.ts +0 -242
  445. package/tests/ncp/version-negotiation.test.ts +0 -123
  446. package/tests/ndp.test.ts +0 -271
  447. package/tests/nip.test.ts +0 -184
  448. package/tests/nop.test.ts +0 -344
  449. package/tests/nwp.test.ts +0 -237
  450. package/tsconfig.json +0 -20
  451. package/tsup.config.ts +0 -20
  452. package/vitest.config.ts +0 -10
@@ -0,0 +1,329 @@
1
+ [English Version](./nps-sdk.nop.md) | 中文版
2
+
3
+ # `@labacacia/nps-sdk/nop` — 类与方法参考
4
+
5
+ > 规范:[NPS-5 NOP v0.6](https://github.com/labacacia/NPS-Release/blob/main/spec/NPS-5-NOP.md)
6
+
7
+ NOP 是编排层 —— 提交一个委托子任务 DAG、等待完成、流式拉回结果。
8
+ 本模块提供四个 NOP 帧(0x40–0x43)、任务模型(`TaskDag`、`DagNode`、
9
+ `DagEdge`、`RetryPolicy`、`TaskContext`),以及异步 `NopClient` + `NopTaskStatus`。
10
+
11
+ ---
12
+
13
+ ## 目录
14
+
15
+ - [枚举与常量](#枚举与常量)
16
+ - [`RetryPolicy`](#retrypolicy)
17
+ - [`TaskContext`](#taskcontext)
18
+ - [`DagNode` / `DagEdge` / `TaskDag`](#dagnode--dagedge--taskdag)
19
+ - [`TaskFrame` (0x40)](#taskframe-0x40)
20
+ - [`DelegateFrame` (0x41)](#delegateframe-0x41)
21
+ - [`SyncFrame` (0x42)](#syncframe-0x42)
22
+ - [`AlignStreamFrame` (0x43)](#alignstreamframe-0x43)
23
+ - [`NopClient`](#nopclient)
24
+ - [`NopTaskStatus`](#noptaskstatus)
25
+
26
+ ---
27
+
28
+ ## 枚举与常量
29
+
30
+ ```typescript
31
+ enum TaskState {
32
+ PENDING = "pending",
33
+ PREFLIGHT = "preflight",
34
+ RUNNING = "running",
35
+ WAITING_SYNC = "waiting_sync",
36
+ COMPLETED = "completed",
37
+ FAILED = "failed",
38
+ CANCELLED = "cancelled",
39
+ SKIPPED = "skipped",
40
+ }
41
+
42
+ enum TaskPriority { LOW = "low", NORMAL = "normal", HIGH = "high" }
43
+ enum BackoffStrategy { FIXED = "fixed", LINEAR = "linear", EXPONENTIAL = "exponential" }
44
+ enum AggregateStrategy { MERGE = "merge", FIRST = "first", FASTEST_K = "fastest_k", ALL = "all" }
45
+ ```
46
+
47
+ 终态为 `COMPLETED`、`FAILED`、`CANCELLED`。`NopTaskStatus.isTerminal`
48
+ 使用此集合。
49
+
50
+ ---
51
+
52
+ ## `RetryPolicy`
53
+
54
+ ```typescript
55
+ interface RetryPolicy {
56
+ maxRetries: number;
57
+ backoff: BackoffStrategy;
58
+ baseDelayMs?: number; // 默认 1 000
59
+ maxDelayMs?: number; // 默认 30 000
60
+ }
61
+
62
+ function computeDelayMs(policy: RetryPolicy, attempt: number): number;
63
+ ```
64
+
65
+ `computeDelayMs` 计算 `attempt`(从 0 起)的限幅延迟:
66
+
67
+ | Backoff | 公式 |
68
+ |---------------|------|
69
+ | `FIXED` | `baseDelayMs` |
70
+ | `LINEAR` | `baseDelayMs * (attempt + 1)` |
71
+ | `EXPONENTIAL` | `baseDelayMs * 2**attempt` |
72
+
73
+ 结果上限为 `maxDelayMs`。
74
+
75
+ ---
76
+
77
+ ## `TaskContext`
78
+
79
+ ```typescript
80
+ interface TaskContext {
81
+ sessionKey?: string;
82
+ requesterNid?: string;
83
+ traceId?: string; // OpenTelemetry 风格的 trace id
84
+ }
85
+ ```
86
+
87
+ ---
88
+
89
+ ## `DagNode` / `DagEdge` / `TaskDag`
90
+
91
+ ```typescript
92
+ interface DagNode {
93
+ id: string;
94
+ action: string;
95
+ agent: string; // 目标 NID
96
+ inputFrom?: readonly string[]; // 上游节点 id
97
+ inputMapping?: Record<string, string>; // 可选 JSONPath 改写
98
+ timeoutMs?: number;
99
+ retryPolicy?: RetryPolicy;
100
+ condition?: string; // JSONPath 风格守卫,如 "$.classify.score > 0.7"
101
+ minRequired?: number; // K-of-N fan-in
102
+ }
103
+
104
+ interface DagEdge {
105
+ from: string;
106
+ to: string;
107
+ }
108
+
109
+ interface TaskDag {
110
+ nodes: readonly DagNode[];
111
+ edges: readonly DagEdge[];
112
+ }
113
+ ```
114
+
115
+ 按规范:每个 DAG 最多 32 节点、委托链最多 3 层、超时上限
116
+ 3 600 000 ms(1 小时)。超过上述任一限制将被编排器拒绝(NPS-5 §8.2)。
117
+
118
+ ---
119
+
120
+ ## `TaskFrame` (0x40)
121
+
122
+ 提交 DAG 供执行。
123
+
124
+ ```typescript
125
+ class TaskFrame {
126
+ readonly frameType: FrameType.TASK;
127
+ readonly preferredTier: EncodingTier.MSGPACK;
128
+
129
+ constructor(
130
+ public readonly taskId: string,
131
+ public readonly dag: TaskDag,
132
+ public readonly timeoutMs?: number,
133
+ public readonly callbackUrl?: string, // 编排器做 SSRF 校验
134
+ public readonly context?: TaskContext,
135
+ public readonly priority?: TaskPriority,
136
+ public readonly depth?: number,
137
+ );
138
+
139
+ toDict(): Record<string, unknown>;
140
+ static fromDict(data: Record<string, unknown>): TaskFrame;
141
+ }
142
+ ```
143
+
144
+ ---
145
+
146
+ ## `DelegateFrame` (0x41)
147
+
148
+ 编排器向每个 agent 发出的逐节点调用。
149
+
150
+ ```typescript
151
+ class DelegateFrame {
152
+ readonly frameType: FrameType.DELEGATE;
153
+ readonly preferredTier: EncodingTier.MSGPACK;
154
+
155
+ constructor(
156
+ public readonly taskId: string,
157
+ public readonly subtaskId: string,
158
+ public readonly action: string,
159
+ public readonly agentNid: string,
160
+ public readonly inputs?: Record<string, unknown>,
161
+ public readonly params?: Record<string, unknown>,
162
+ public readonly idempotencyKey?: string,
163
+ );
164
+
165
+ toDict(): Record<string, unknown>;
166
+ static fromDict(data: Record<string, unknown>): DelegateFrame;
167
+ }
168
+ ```
169
+
170
+ ---
171
+
172
+ ## `SyncFrame` (0x42)
173
+
174
+ Fan-in 屏障 —— 等待 K-of-N 上游子任务。
175
+
176
+ ```typescript
177
+ class SyncFrame {
178
+ readonly frameType: FrameType.SYNC;
179
+ readonly preferredTier: EncodingTier.MSGPACK;
180
+
181
+ constructor(
182
+ public readonly taskId: string,
183
+ public readonly syncId: string,
184
+ public readonly waitFor: readonly string[],
185
+ public readonly minRequired: number = 0, // 0 = waitFor 全部
186
+ public readonly aggregate: AggregateStrategy | string = "merge",
187
+ public readonly timeoutMs?: number,
188
+ );
189
+
190
+ toDict(): Record<string, unknown>;
191
+ static fromDict(data: Record<string, unknown>): SyncFrame;
192
+ }
193
+ ```
194
+
195
+ `minRequired` 语义:
196
+
197
+ | 值 | 含义 |
198
+ |-------|------|
199
+ | `0` | 等待 `waitFor` 中所有项(严格 fan-in)。 |
200
+ | `K` | 只要 K 个上游子任务完成即继续。 |
201
+
202
+ ---
203
+
204
+ ## `AlignStreamFrame` (0x43)
205
+
206
+ 委托子任务的流式进度 / 部分结果帧。
207
+
208
+ ```typescript
209
+ interface StreamError {
210
+ errorCode: string;
211
+ message?: string;
212
+ }
213
+
214
+ class AlignStreamFrame {
215
+ readonly frameType: FrameType.ALIGN_STREAM;
216
+ readonly preferredTier: EncodingTier.MSGPACK;
217
+
218
+ constructor(
219
+ public readonly streamId: string,
220
+ public readonly taskId: string,
221
+ public readonly subtaskId: string,
222
+ public readonly seq: number,
223
+ public readonly isFinal: boolean,
224
+ public readonly senderNid: string,
225
+ public readonly data?: Record<string, unknown>,
226
+ public readonly error?: StreamError,
227
+ public readonly windowSize?: number,
228
+ );
229
+
230
+ toDict(): Record<string, unknown>;
231
+ static fromDict(data: Record<string, unknown>): AlignStreamFrame;
232
+ }
233
+ ```
234
+
235
+ `AlignStreamFrame` 替代已弃用的 `AlignFrame (0x05)` —— 它携带
236
+ 任务上下文(`taskId` + `subtaskId`)且绑定到特定 `senderNid`。
237
+
238
+ ---
239
+
240
+ ## `NopClient`
241
+
242
+ NOP 编排器的异步 HTTP 客户端。
243
+
244
+ ```typescript
245
+ class NopClient {
246
+ constructor(
247
+ baseUrl: string,
248
+ options?: {
249
+ defaultTier?: EncodingTier; // 默认 MSGPACK
250
+ registry?: FrameRegistry; // 默认 NCP + NOP 帧
251
+ },
252
+ );
253
+
254
+ async submit(frame: TaskFrame): Promise<string>; // 返回 taskId
255
+ async getStatus(taskId: string): Promise<NopTaskStatus>;
256
+ async cancel(taskId: string): Promise<void>;
257
+ async wait(
258
+ taskId: string,
259
+ options?: { pollIntervalMs?: number; timeoutMs?: number },
260
+ ): Promise<NopTaskStatus>;
261
+ }
262
+ ```
263
+
264
+ ### HTTP 路由
265
+
266
+ | 方法 | 路径 |
267
+ |-------------|----------------------------|
268
+ | `submit` | `POST /task` |
269
+ | `getStatus` | `GET /task/{taskId}` |
270
+ | `cancel` | `POST /task/{taskId}/cancel` |
271
+ | `wait` | 轮询 `getStatus` 直至终态或超时 |
272
+
273
+ `wait` 默认:`pollIntervalMs = 1000`、`timeoutMs = 30 000`。若截止时间
274
+ 到达仍未抵达终态则抛 `Error`。
275
+
276
+ ---
277
+
278
+ ## `NopTaskStatus`
279
+
280
+ 编排器 JSON 响应的薄视图。
281
+
282
+ ```typescript
283
+ class NopTaskStatus {
284
+ readonly taskId: string;
285
+ readonly state: TaskState;
286
+ readonly isTerminal: boolean; // COMPLETED | FAILED | CANCELLED
287
+ readonly aggregatedResult: unknown;
288
+ readonly errorCode?: string;
289
+ readonly errorMessage?: string;
290
+ readonly nodeResults: Record<string, unknown>;
291
+ readonly raw: Record<string, unknown>;
292
+ }
293
+ ```
294
+
295
+ 若需要 `NopTaskStatus` 上没有一等支持的编排器专属字段,`raw` 提供
296
+ 未经处理的原始 payload。
297
+
298
+ ---
299
+
300
+ ## 端到端示例
301
+
302
+ ```typescript
303
+ import {
304
+ NopClient, TaskFrame,
305
+ type TaskDag, BackoffStrategy,
306
+ } from "@labacacia/nps-sdk/nop";
307
+
308
+ const dag: TaskDag = {
309
+ nodes: [
310
+ { id: "fetch", action: "fetch", agent: "urn:nps:node:ingest.example.com:http" },
311
+ { id: "classify", action: "classify", agent: "urn:nps:node:ml.example.com:classifier",
312
+ inputFrom: ["fetch"],
313
+ retryPolicy: { maxRetries: 3, backoff: BackoffStrategy.EXPONENTIAL, baseDelayMs: 500 } },
314
+ { id: "route", action: "route", agent: "urn:nps:node:ml.example.com:router",
315
+ inputFrom: ["classify"],
316
+ condition: "$.classify.score > 0.7" },
317
+ ],
318
+ edges: [
319
+ { from: "fetch", to: "classify" },
320
+ { from: "classify", to: "route" },
321
+ ],
322
+ };
323
+
324
+ const nop = new NopClient("http://orchestrator.example.com:17433");
325
+ const taskId = await nop.submit(new TaskFrame("job-42", dag, 60_000));
326
+ const status = await nop.wait(taskId, { pollIntervalMs: 500, timeoutMs: 60_000 });
327
+
328
+ console.log(status.state, status.aggregatedResult);
329
+ ```
@@ -0,0 +1,332 @@
1
+ English | [中文版](./nps-sdk.nop.cn.md)
2
+
3
+ # `@labacacia/nps-sdk/nop` — Class and Method Reference
4
+
5
+ > Spec: [NPS-5 NOP v0.6](https://github.com/labacacia/NPS-Release/blob/main/spec/NPS-5-NOP.md)
6
+
7
+ NOP is the orchestration layer — submit a DAG of delegated subtasks, wait
8
+ for completion, stream results back. This module ships the four NOP
9
+ frames (0x40–0x43), the task model (`TaskDag`, `DagNode`, `DagEdge`,
10
+ `RetryPolicy`, `TaskContext`), and the async `NopClient` + `NopTaskStatus`.
11
+
12
+ ---
13
+
14
+ ## Table of contents
15
+
16
+ - [Enums & constants](#enums--constants)
17
+ - [`RetryPolicy`](#retrypolicy)
18
+ - [`TaskContext`](#taskcontext)
19
+ - [`DagNode` / `DagEdge` / `TaskDag`](#dagnode--dagedge--taskdag)
20
+ - [`TaskFrame` (0x40)](#taskframe-0x40)
21
+ - [`DelegateFrame` (0x41)](#delegateframe-0x41)
22
+ - [`SyncFrame` (0x42)](#syncframe-0x42)
23
+ - [`AlignStreamFrame` (0x43)](#alignstreamframe-0x43)
24
+ - [`NopClient`](#nopclient)
25
+ - [`NopTaskStatus`](#noptaskstatus)
26
+
27
+ ---
28
+
29
+ ## Enums & constants
30
+
31
+ ```typescript
32
+ enum TaskState {
33
+ PENDING = "pending",
34
+ PREFLIGHT = "preflight",
35
+ RUNNING = "running",
36
+ WAITING_SYNC = "waiting_sync",
37
+ COMPLETED = "completed",
38
+ FAILED = "failed",
39
+ CANCELLED = "cancelled",
40
+ SKIPPED = "skipped",
41
+ }
42
+
43
+ enum TaskPriority { LOW = "low", NORMAL = "normal", HIGH = "high" }
44
+ enum BackoffStrategy { FIXED = "fixed", LINEAR = "linear", EXPONENTIAL = "exponential" }
45
+ enum AggregateStrategy { MERGE = "merge", FIRST = "first", FASTEST_K = "fastest_k", ALL = "all" }
46
+ ```
47
+
48
+ Terminal states are `COMPLETED`, `FAILED`, `CANCELLED`. `NopTaskStatus.isTerminal`
49
+ uses this set.
50
+
51
+ ---
52
+
53
+ ## `RetryPolicy`
54
+
55
+ ```typescript
56
+ interface RetryPolicy {
57
+ maxRetries: number;
58
+ backoff: BackoffStrategy;
59
+ baseDelayMs?: number; // default 1 000
60
+ maxDelayMs?: number; // default 30 000
61
+ }
62
+
63
+ function computeDelayMs(policy: RetryPolicy, attempt: number): number;
64
+ ```
65
+
66
+ `computeDelayMs` computes the clamped delay for `attempt` (0-indexed):
67
+
68
+ | Backoff | Formula |
69
+ |---------------|---------|
70
+ | `FIXED` | `baseDelayMs` |
71
+ | `LINEAR` | `baseDelayMs * (attempt + 1)` |
72
+ | `EXPONENTIAL` | `baseDelayMs * 2**attempt` |
73
+
74
+ The result is capped at `maxDelayMs`.
75
+
76
+ ---
77
+
78
+ ## `TaskContext`
79
+
80
+ ```typescript
81
+ interface TaskContext {
82
+ sessionKey?: string;
83
+ requesterNid?: string;
84
+ traceId?: string; // OpenTelemetry-shaped trace id
85
+ }
86
+ ```
87
+
88
+ ---
89
+
90
+ ## `DagNode` / `DagEdge` / `TaskDag`
91
+
92
+ ```typescript
93
+ interface DagNode {
94
+ id: string;
95
+ action: string;
96
+ agent: string; // target NID
97
+ inputFrom?: readonly string[]; // upstream node ids
98
+ inputMapping?: Record<string, string>; // optional JSONPath rewrites
99
+ timeoutMs?: number;
100
+ retryPolicy?: RetryPolicy;
101
+ condition?: string; // JSONPath-style guard, e.g. "$.classify.score > 0.7"
102
+ minRequired?: number; // K-of-N fan-in
103
+ }
104
+
105
+ interface DagEdge {
106
+ from: string;
107
+ to: string;
108
+ }
109
+
110
+ interface TaskDag {
111
+ nodes: readonly DagNode[];
112
+ edges: readonly DagEdge[];
113
+ }
114
+ ```
115
+
116
+ Per the spec: max 32 nodes per DAG, max 3 levels of delegate chain, max
117
+ timeout 3 600 000 ms (1 h). Exceeding any of those limits is rejected by
118
+ the orchestrator (NPS-5 §8.2).
119
+
120
+ ---
121
+
122
+ ## `TaskFrame` (0x40)
123
+
124
+ Submit a DAG for execution.
125
+
126
+ ```typescript
127
+ class TaskFrame {
128
+ readonly frameType: FrameType.TASK;
129
+ readonly preferredTier: EncodingTier.MSGPACK;
130
+
131
+ constructor(
132
+ public readonly taskId: string,
133
+ public readonly dag: TaskDag,
134
+ public readonly timeoutMs?: number,
135
+ public readonly callbackUrl?: string, // SSRF-validated by the orchestrator
136
+ public readonly context?: TaskContext,
137
+ public readonly priority?: TaskPriority,
138
+ public readonly depth?: number,
139
+ );
140
+
141
+ toDict(): Record<string, unknown>;
142
+ static fromDict(data: Record<string, unknown>): TaskFrame;
143
+ }
144
+ ```
145
+
146
+ ---
147
+
148
+ ## `DelegateFrame` (0x41)
149
+
150
+ Per-node invocation emitted by the orchestrator to each agent.
151
+
152
+ ```typescript
153
+ class DelegateFrame {
154
+ readonly frameType: FrameType.DELEGATE;
155
+ readonly preferredTier: EncodingTier.MSGPACK;
156
+
157
+ constructor(
158
+ public readonly taskId: string,
159
+ public readonly subtaskId: string,
160
+ public readonly action: string,
161
+ public readonly agentNid: string,
162
+ public readonly inputs?: Record<string, unknown>,
163
+ public readonly params?: Record<string, unknown>,
164
+ public readonly idempotencyKey?: string,
165
+ );
166
+
167
+ toDict(): Record<string, unknown>;
168
+ static fromDict(data: Record<string, unknown>): DelegateFrame;
169
+ }
170
+ ```
171
+
172
+ ---
173
+
174
+ ## `SyncFrame` (0x42)
175
+
176
+ Fan-in barrier — waits for K-of-N upstream subtasks.
177
+
178
+ ```typescript
179
+ class SyncFrame {
180
+ readonly frameType: FrameType.SYNC;
181
+ readonly preferredTier: EncodingTier.MSGPACK;
182
+
183
+ constructor(
184
+ public readonly taskId: string,
185
+ public readonly syncId: string,
186
+ public readonly waitFor: readonly string[],
187
+ public readonly minRequired: number = 0, // 0 = all of waitFor
188
+ public readonly aggregate: AggregateStrategy | string = "merge",
189
+ public readonly timeoutMs?: number,
190
+ );
191
+
192
+ toDict(): Record<string, unknown>;
193
+ static fromDict(data: Record<string, unknown>): SyncFrame;
194
+ }
195
+ ```
196
+
197
+ `minRequired` semantics:
198
+
199
+ | Value | Meaning |
200
+ |-------|---------|
201
+ | `0` | Wait for all of `waitFor` (strict fan-in). |
202
+ | `K` | Proceed as soon as K upstream subtasks have completed. |
203
+
204
+ ---
205
+
206
+ ## `AlignStreamFrame` (0x43)
207
+
208
+ Streaming progress / partial result frame for a delegated subtask.
209
+
210
+ ```typescript
211
+ interface StreamError {
212
+ errorCode: string;
213
+ message?: string;
214
+ }
215
+
216
+ class AlignStreamFrame {
217
+ readonly frameType: FrameType.ALIGN_STREAM;
218
+ readonly preferredTier: EncodingTier.MSGPACK;
219
+
220
+ constructor(
221
+ public readonly streamId: string,
222
+ public readonly taskId: string,
223
+ public readonly subtaskId: string,
224
+ public readonly seq: number,
225
+ public readonly isFinal: boolean,
226
+ public readonly senderNid: string,
227
+ public readonly data?: Record<string, unknown>,
228
+ public readonly error?: StreamError,
229
+ public readonly windowSize?: number,
230
+ );
231
+
232
+ toDict(): Record<string, unknown>;
233
+ static fromDict(data: Record<string, unknown>): AlignStreamFrame;
234
+ }
235
+ ```
236
+
237
+ `AlignStreamFrame` replaces the deprecated `AlignFrame (0x05)` — it
238
+ carries task context (`taskId` + `subtaskId`) and is bound to a specific
239
+ `senderNid`.
240
+
241
+ ---
242
+
243
+ ## `NopClient`
244
+
245
+ Async HTTP client for an NOP orchestrator.
246
+
247
+ ```typescript
248
+ class NopClient {
249
+ constructor(
250
+ baseUrl: string,
251
+ options?: {
252
+ defaultTier?: EncodingTier; // default MSGPACK
253
+ registry?: FrameRegistry; // default NCP + NOP frames
254
+ },
255
+ );
256
+
257
+ async submit(frame: TaskFrame): Promise<string>; // returns taskId
258
+ async getStatus(taskId: string): Promise<NopTaskStatus>;
259
+ async cancel(taskId: string): Promise<void>;
260
+ async wait(
261
+ taskId: string,
262
+ options?: { pollIntervalMs?: number; timeoutMs?: number },
263
+ ): Promise<NopTaskStatus>;
264
+ }
265
+ ```
266
+
267
+ ### HTTP routes
268
+
269
+ | Method | Path |
270
+ |-------------|----------------------------|
271
+ | `submit` | `POST /task` |
272
+ | `getStatus` | `GET /task/{taskId}` |
273
+ | `cancel` | `POST /task/{taskId}/cancel` |
274
+ | `wait` | polls `getStatus` until terminal or timeout |
275
+
276
+ `wait` defaults: `pollIntervalMs = 1000`, `timeoutMs = 30 000`. It throws
277
+ an `Error` when the deadline expires without reaching a terminal state.
278
+
279
+ ---
280
+
281
+ ## `NopTaskStatus`
282
+
283
+ Thin view over the orchestrator's JSON response.
284
+
285
+ ```typescript
286
+ class NopTaskStatus {
287
+ readonly taskId: string;
288
+ readonly state: TaskState;
289
+ readonly isTerminal: boolean; // COMPLETED | FAILED | CANCELLED
290
+ readonly aggregatedResult: unknown;
291
+ readonly errorCode?: string;
292
+ readonly errorMessage?: string;
293
+ readonly nodeResults: Record<string, unknown>;
294
+ readonly raw: Record<string, unknown>;
295
+ }
296
+ ```
297
+
298
+ `raw` gives you the untouched payload if you need orchestrator-specific
299
+ fields that aren't first-class on `NopTaskStatus`.
300
+
301
+ ---
302
+
303
+ ## End-to-end example
304
+
305
+ ```typescript
306
+ import {
307
+ NopClient, TaskFrame,
308
+ type TaskDag, BackoffStrategy,
309
+ } from "@labacacia/nps-sdk/nop";
310
+
311
+ const dag: TaskDag = {
312
+ nodes: [
313
+ { id: "fetch", action: "fetch", agent: "urn:nps:node:ingest.example.com:http" },
314
+ { id: "classify", action: "classify", agent: "urn:nps:node:ml.example.com:classifier",
315
+ inputFrom: ["fetch"],
316
+ retryPolicy: { maxRetries: 3, backoff: BackoffStrategy.EXPONENTIAL, baseDelayMs: 500 } },
317
+ { id: "route", action: "route", agent: "urn:nps:node:ml.example.com:router",
318
+ inputFrom: ["classify"],
319
+ condition: "$.classify.score > 0.7" },
320
+ ],
321
+ edges: [
322
+ { from: "fetch", to: "classify" },
323
+ { from: "classify", to: "route" },
324
+ ],
325
+ };
326
+
327
+ const nop = new NopClient("http://orchestrator.example.com:17433");
328
+ const taskId = await nop.submit(new TaskFrame("job-42", dag, 60_000));
329
+ const status = await nop.wait(taskId, { pollIntervalMs: 500, timeoutMs: 60_000 });
330
+
331
+ console.log(status.state, status.aggregatedResult);
332
+ ```