@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,321 @@
1
+ [English Version](./nps-sdk.core.md) | 中文版
2
+
3
+ # `@labacacia/nps-sdk/core` — 类与方法参考
4
+
5
+ > 规范:[NPS-1 NCP v0.7](https://github.com/labacacia/NPS-Release/blob/main/spec/NPS-1-NCP.md)
6
+
7
+ 线路层原语:帧头解析、编解码器对(Tier-1 JSON / Tier-2 MsgPack)、
8
+ 锚点缓存、错误类型,以及 NIP 签名使用的规范化 JSON 辅助函数。
9
+
10
+ ---
11
+
12
+ ## 目录
13
+
14
+ - [帧类型与常量](#帧类型与常量)
15
+ - [`FrameHeader`](#frameheader)
16
+ - [`NpsFrameCodec`](#npsframecodec)
17
+ - [函数式编解码 API](#函数式编解码-api)
18
+ - [`FrameRegistry`](#frameregistry)
19
+ - [`AnchorCache`](#anchorcache)
20
+ - [规范化 JSON](#规范化-json)
21
+ - [异常](#异常)
22
+ - [状态码](#状态码)
23
+ - [`CryptoProvider`](#cryptoprovider)
24
+
25
+ ---
26
+
27
+ ## 帧类型与常量
28
+
29
+ ```typescript
30
+ export enum FrameType {
31
+ // NCP
32
+ Anchor = 0x01, Diff = 0x02, Stream = 0x03,
33
+ Caps = 0x04, Align = 0x05, Hello = 0x06,
34
+ // NWP
35
+ Query = 0x10, Action = 0x11, Subscribe = 0x12,
36
+ // NIP
37
+ Ident = 0x20, Trust = 0x21, Revoke = 0x22,
38
+ // NDP
39
+ Announce = 0x30, Resolve = 0x31, Graph = 0x32,
40
+ // NOP
41
+ Task = 0x40, Delegate = 0x41, Sync = 0x42,
42
+ AlignStream = 0x43,
43
+ // System
44
+ Error = 0xFE,
45
+ }
46
+
47
+ export enum EncodingTier {
48
+ JSON = 0x00,
49
+ MSGPACK = 0x01,
50
+ }
51
+
52
+ export const FrameFlags = {
53
+ NONE: 0x00,
54
+ TIER1_JSON: 0x00,
55
+ TIER2_MSGPACK: 0x01,
56
+ FINAL: 0x04,
57
+ ENCRYPTED: 0x08,
58
+ EXT: 0x80,
59
+ } as const;
60
+
61
+ export const DEFAULT_HEADER_SIZE = 4; // 字节
62
+ export const EXTENDED_HEADER_SIZE = 8;
63
+ export const DEFAULT_MAX_PAYLOAD = 0xFFFF; // 64 KiB − 1
64
+ export const EXTENDED_MAX_PAYLOAD = 0xFFFF_FFFF; // 4 GiB − 1
65
+ ```
66
+
67
+ `Align (0x05)` 已弃用 —— 请改用 NOP 的 `AlignStream (0x43)`。
68
+
69
+ ---
70
+
71
+ ## `FrameHeader`
72
+
73
+ 可解析 + 可序列化的线路帧头(NPS-1 §3.1)。
74
+
75
+ ```typescript
76
+ class FrameHeader {
77
+ constructor(
78
+ public readonly frameType: FrameType,
79
+ public readonly flags: number,
80
+ public readonly payloadLength: number,
81
+ );
82
+
83
+ readonly isExtended: boolean; // EXT 位
84
+ readonly headerSize: number; // 4 或 8
85
+ readonly encodingTier: EncodingTier; // 低 2 位
86
+ readonly isFinal: boolean; // 第 2 位
87
+ readonly isEncrypted: boolean; // 第 3 位
88
+
89
+ static parse(buf: Uint8Array): FrameHeader;
90
+ toBytes(): Uint8Array;
91
+ }
92
+ ```
93
+
94
+ 默认帧头:`[type][flags][len_be_u16]`(4 字节)。
95
+ 扩展帧头(`EXT=1`):`[type][flags][0 0][len_be_u32]`(8 字节)。
96
+
97
+ ---
98
+
99
+ ## `NpsFrameCodec`
100
+
101
+ 顶层编解码器,根据 flag 字节在 Tier-1 JSON 和 Tier-2 MsgPack 之间分派。
102
+
103
+ ```typescript
104
+ interface NpsFrame {
105
+ readonly frameType: FrameType;
106
+ readonly preferredTier: EncodingTier;
107
+ toDict(): Record<string, unknown>;
108
+ }
109
+
110
+ class NpsFrameCodec {
111
+ constructor(
112
+ registry: FrameRegistry,
113
+ options?: { maxPayload?: number },
114
+ );
115
+
116
+ encode(frame: NpsFrame, options?: { overrideTier?: EncodingTier }): Uint8Array;
117
+ decode(wire: Uint8Array): NpsFrame;
118
+
119
+ static peekHeader(wire: Uint8Array): FrameHeader;
120
+ }
121
+ ```
122
+
123
+ ### `encode(frame, opts?)`
124
+
125
+ 通过所选 tier 序列化帧的 `toDict()` 并前置帧头。当 payload
126
+ 超过 `DEFAULT_MAX_PAYLOAD` 时自动设置 `EXT=1`。对 `StreamFrame`,
127
+ 当 `isLast === true` 时设置 `FINAL` flag;其他每个帧都始终设置。
128
+
129
+ 以下情况抛 `NpsCodecError`:
130
+ - 编码失败;
131
+ - 编码后 payload 超过 `maxPayload`(默认 65 535)。
132
+
133
+ ### `decode(wire)`
134
+
135
+ 解析帧头、切出 payload、从注册表解析帧类、调用 `fromDict(data)`。
136
+
137
+ ### `peekHeader(wire)`(静态)
138
+
139
+ 返回解析后的帧头而不解码 payload —— 对路由、计长或转储很有用。
140
+
141
+ ---
142
+
143
+ ## 函数式编解码 API
144
+
145
+ 从 `@labacacia/nps-sdk/core` 重新导出。轻量、少分配的函数对,
146
+ 被测试和不希望持有类实例的工具使用。
147
+
148
+ ```typescript
149
+ // Tier 级辅助
150
+ function encodeJson(payload: unknown): Uint8Array;
151
+ function decodeJson(bytes: Uint8Array): unknown;
152
+
153
+ function encodeMsgPack(payload: unknown): Uint8Array;
154
+ function decodeMsgPack(bytes: Uint8Array): unknown;
155
+
156
+ // 完整帧辅助
157
+ function encodeFrame(
158
+ payload: unknown,
159
+ options: {
160
+ frameType: number;
161
+ tier?: EncodingTier;
162
+ final?: boolean;
163
+ encrypted?: boolean;
164
+ extended?: boolean;
165
+ },
166
+ ): Uint8Array;
167
+
168
+ function decodeFrame(
169
+ buffer: Uint8Array,
170
+ options?: { maxFramePayload?: number },
171
+ ): {
172
+ header: FrameHeader; // 来自 frame-header.ts 的接口形态
173
+ payload: unknown;
174
+ bytesConsumed: number;
175
+ };
176
+
177
+ // 低层帧头 I/O
178
+ function parseFrameHeader(buffer: Uint8Array, opts?: { max_frame_payload?: number }): FrameHeaderInterface;
179
+ function writeFrameHeader(header: FrameHeaderInterface, buffer: Uint8Array): number;
180
+ function buildFlags(options: {
181
+ tier?: EncodingTier; final?: boolean; encrypted?: boolean; extended?: boolean;
182
+ }): number;
183
+ ```
184
+
185
+ 错误以 `NcpError` 抛出,并带协议错误码(如
186
+ `NCP-FRAME-FLAGS-INVALID`、`NCP-FRAME-PAYLOAD-TOO-LARGE`、
187
+ `NCP-FRAME-PARSE-ERROR`)。
188
+
189
+ ---
190
+
191
+ ## `FrameRegistry`
192
+
193
+ 将 `FrameType` 字节映射到实现 `FrameClass.fromDict` 的帧类。
194
+ `NpsFrameCodec.decode` 用它来实例化有类型的实例。
195
+
196
+ ```typescript
197
+ class FrameRegistry {
198
+ register(frameType: FrameType, cls: FrameClass): void;
199
+ resolve(frameType: FrameType): FrameClass; // 未知类型抛 NpsFrameError
200
+ }
201
+
202
+ interface FrameClass {
203
+ fromDict(data: Record<string, unknown>): NpsFrame;
204
+ }
205
+ ```
206
+
207
+ 根包导出两个工厂:
208
+
209
+ ```typescript
210
+ import { createDefaultRegistry, createFullRegistry } from "@labacacia/nps-sdk";
211
+
212
+ createDefaultRegistry(); // 仅 NCP —— ANCHOR + DIFF + STREAM + CAPS + ERROR
213
+ createFullRegistry(); // NCP + NWP + NIP + NDP + NOP
214
+ ```
215
+
216
+ 当需要编解码器解码任意帧时使用 `createFullRegistry()`;客户端
217
+ 内部会构造合适的注册表。
218
+
219
+ ---
220
+
221
+ ## `AnchorCache`
222
+
223
+ 有界、TTL 感知的 schema 缓存(NPS-1 §5.3、§7.2、§9)。
224
+
225
+ ```typescript
226
+ class AnchorCache {
227
+ constructor(options?: { maxSize?: number; getNow?: () => number });
228
+
229
+ set(frame: AnchorFrame): void;
230
+ get(anchorId: string): AnchorFrame | null;
231
+ getRequired(anchorId: string): AnchorFrame; // 抛 NcpError NCP-ANCHOR-NOT-FOUND
232
+ readonly size: number;
233
+ }
234
+ ```
235
+
236
+ ### 行为
237
+
238
+ - `ttl === 0` → 帧**不**被缓存(规范 §4.1,"仅本 session")。
239
+ - 用**不同** schema 重新 set 同一锚点会抛
240
+ `NcpError("NCP-ANCHOR-ID-MISMATCH")` —— 投毒检测(§7.2)。
241
+ - 缓存满时,最近访问时间最早的条目被清除。
242
+ - 过期在每次 `get()` 时评估;没有后台定时器。
243
+ - 为可重现测试覆写 `getNow`。
244
+
245
+ ---
246
+
247
+ ## 规范化 JSON
248
+
249
+ SDK 提供两种不同的 JSON 规范化方案:
250
+
251
+ ```typescript
252
+ function jcsStringify(obj: unknown): string; // RFC 8785 (JCS)
253
+ function sortKeysStringify(obj: unknown): string; // 按键排序、紧凑分隔符
254
+ ```
255
+
256
+ - `jcsStringify` 是 `AnchorFrame.anchor_id` 哈希所用的规范形式
257
+ (对 JCS 字节做 SHA-256)。
258
+ - `sortKeysStringify` 镜像 Python 的
259
+ `json.dumps(sort_keys=True, separators=(",", ":"))`,NIP 签名
260
+ 使用它以实现跨语言一致。
261
+
262
+ ---
263
+
264
+ ## 异常
265
+
266
+ ```typescript
267
+ class NpsError extends Error {}
268
+ class NpsFrameError extends NpsError {}
269
+ class NpsCodecError extends NpsError {}
270
+ class NpsAnchorNotFoundError extends NpsError { readonly anchorId: string; }
271
+ class NpsAnchorPoisonError extends NpsError { readonly anchorId: string; }
272
+ class NpsStreamError extends NpsError {}
273
+
274
+ class NcpError extends Error { readonly code: string; }
275
+ ```
276
+
277
+ `NcpError` 携带规范错误码(如 `NCP-STREAM-SEQ-GAP`)。函数式
278
+ 编解码器、stream manager 和校验器抛它;基于类的编解码器和
279
+ 缓存抛 `NpsError` 子类。
280
+
281
+ ---
282
+
283
+ ## 状态码
284
+
285
+ ```typescript
286
+ import { NpsStatusCodes } from "@labacacia/nps-sdk/core";
287
+
288
+ NpsStatusCodes.NPS_OK; // "NPS-OK"
289
+ NpsStatusCodes.NPS_CLIENT_NOT_FOUND; // "NPS-CLIENT-NOT-FOUND"
290
+ NpsStatusCodes.NPS_STREAM_SEQ_GAP; // "NPS-STREAM-SEQ-GAP"
291
+ // …
292
+ ```
293
+
294
+ 与 `spec/status-codes.md` 对应的常量包。发出 `ErrorFrame` 或
295
+ 与 `status` 字段比较时使用。
296
+
297
+ ---
298
+
299
+ ## `CryptoProvider`
300
+
301
+ 可插拔异步加密的结构性脚手架(Node `node:crypto` 对比浏览器
302
+ `SubtleCrypto`)。今日公共 API 不会实例化它;NIP 目前直接使用
303
+ `@noble/ed25519`。导出供下游实现者使用。
304
+
305
+ ```typescript
306
+ interface CryptoProvider {
307
+ randomBytes(n: number): Uint8Array;
308
+
309
+ ed25519GenerateKeyPair(): Promise<{ publicKey: Uint8Array; privateKey: Uint8Array }>;
310
+ ed25519Sign(privateKey: Uint8Array, data: Uint8Array): Promise<Uint8Array>;
311
+ ed25519Verify(publicKey: Uint8Array, data: Uint8Array, sig: Uint8Array): Promise<boolean>;
312
+
313
+ aesGcmEncrypt(key: Uint8Array, iv: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array>;
314
+ aesGcmDecrypt(key: Uint8Array, iv: Uint8Array, ciphertextAndTag: Uint8Array): Promise<Uint8Array>;
315
+
316
+ pbkdf2Sha256(
317
+ passphrase: Uint8Array, salt: Uint8Array,
318
+ iterations: number, keyLen: number,
319
+ ): Promise<Uint8Array>;
320
+ }
321
+ ```
@@ -0,0 +1,326 @@
1
+ English | [中文版](./nps-sdk.core.cn.md)
2
+
3
+ # `@labacacia/nps-sdk/core` — Class and Method Reference
4
+
5
+ > Spec: [NPS-1 NCP v0.7](https://github.com/labacacia/NPS-Release/blob/main/spec/NPS-1-NCP.md)
6
+
7
+ Wire-level primitives: frame header parsing, the codec pair
8
+ (Tier-1 JSON / Tier-2 MsgPack), the anchor cache, error types, and
9
+ canonical-JSON helpers used by NIP signing.
10
+
11
+ ---
12
+
13
+ ## Table of contents
14
+
15
+ - [Frame types & constants](#frame-types--constants)
16
+ - [`FrameHeader`](#frameheader)
17
+ - [`NpsFrameCodec`](#npsframecodec)
18
+ - [Functional codec API](#functional-codec-api)
19
+ - [`FrameRegistry`](#frameregistry)
20
+ - [`AnchorCache`](#anchorcache)
21
+ - [Canonical JSON](#canonical-json)
22
+ - [Exceptions](#exceptions)
23
+ - [Status codes](#status-codes)
24
+ - [`CryptoProvider`](#cryptoprovider)
25
+
26
+ ---
27
+
28
+ ## Frame types & constants
29
+
30
+ ```typescript
31
+ export enum FrameType {
32
+ // NCP
33
+ Anchor = 0x01, Diff = 0x02, Stream = 0x03,
34
+ Caps = 0x04, Align = 0x05, Hello = 0x06,
35
+ // NWP
36
+ Query = 0x10, Action = 0x11, Subscribe = 0x12,
37
+ // NIP
38
+ Ident = 0x20, Trust = 0x21, Revoke = 0x22,
39
+ // NDP
40
+ Announce = 0x30, Resolve = 0x31, Graph = 0x32,
41
+ // NOP
42
+ Task = 0x40, Delegate = 0x41, Sync = 0x42,
43
+ AlignStream = 0x43,
44
+ // System
45
+ Error = 0xFE,
46
+ }
47
+
48
+ export enum EncodingTier {
49
+ JSON = 0x00,
50
+ MSGPACK = 0x01,
51
+ }
52
+
53
+ export const FrameFlags = {
54
+ NONE: 0x00,
55
+ TIER1_JSON: 0x00,
56
+ TIER2_MSGPACK: 0x01,
57
+ FINAL: 0x04,
58
+ ENCRYPTED: 0x08,
59
+ EXT: 0x80,
60
+ } as const;
61
+
62
+ export const DEFAULT_HEADER_SIZE = 4; // bytes
63
+ export const EXTENDED_HEADER_SIZE = 8;
64
+ export const DEFAULT_MAX_PAYLOAD = 0xFFFF; // 64 KiB − 1
65
+ export const EXTENDED_MAX_PAYLOAD = 0xFFFF_FFFF; // 4 GiB − 1
66
+ ```
67
+
68
+ `Align (0x05)` is deprecated — use `AlignStream (0x43)` from NOP instead.
69
+
70
+ ---
71
+
72
+ ## `FrameHeader`
73
+
74
+ Parsed + serialisable wire header (NPS-1 §3.1).
75
+
76
+ ```typescript
77
+ class FrameHeader {
78
+ constructor(
79
+ public readonly frameType: FrameType,
80
+ public readonly flags: number,
81
+ public readonly payloadLength: number,
82
+ );
83
+
84
+ readonly isExtended: boolean; // EXT bit
85
+ readonly headerSize: number; // 4 or 8
86
+ readonly encodingTier: EncodingTier; // lower 2 bits
87
+ readonly isFinal: boolean; // bit 2
88
+ readonly isEncrypted: boolean; // bit 3
89
+
90
+ static parse(buf: Uint8Array): FrameHeader;
91
+ toBytes(): Uint8Array;
92
+ }
93
+ ```
94
+
95
+ Default header: `[type][flags][len_be_u16]` (4 bytes).
96
+ Extended header (`EXT=1`): `[type][flags][0 0][len_be_u32]` (8 bytes).
97
+
98
+ ---
99
+
100
+ ## `NpsFrameCodec`
101
+
102
+ Top-level codec dispatching between Tier-1 JSON and Tier-2 MsgPack based on
103
+ the flags byte.
104
+
105
+ ```typescript
106
+ interface NpsFrame {
107
+ readonly frameType: FrameType;
108
+ readonly preferredTier: EncodingTier;
109
+ toDict(): Record<string, unknown>;
110
+ }
111
+
112
+ class NpsFrameCodec {
113
+ constructor(
114
+ registry: FrameRegistry,
115
+ options?: { maxPayload?: number },
116
+ );
117
+
118
+ encode(frame: NpsFrame, options?: { overrideTier?: EncodingTier }): Uint8Array;
119
+ decode(wire: Uint8Array): NpsFrame;
120
+
121
+ static peekHeader(wire: Uint8Array): FrameHeader;
122
+ }
123
+ ```
124
+
125
+ ### `encode(frame, opts?)`
126
+
127
+ Serialises the frame's `toDict()` via the chosen tier and prepends the
128
+ header. Automatically sets `EXT=1` if the payload exceeds
129
+ `DEFAULT_MAX_PAYLOAD`. For `StreamFrame`, `FINAL` flag is set when
130
+ `isLast === true`; for every other frame it is always set.
131
+
132
+ Raises `NpsCodecError` when:
133
+ - encoding fails,
134
+ - the encoded payload exceeds `maxPayload` (default 65 535).
135
+
136
+ ### `decode(wire)`
137
+
138
+ Parses the header, slices the payload, resolves the frame class from the
139
+ registry, and calls `fromDict(data)`.
140
+
141
+ ### `peekHeader(wire)` *(static)*
142
+
143
+ Returns the parsed header without decoding the payload — useful for
144
+ routing, sizing, or dumping.
145
+
146
+ ---
147
+
148
+ ## Functional codec API
149
+
150
+ Re-exported from `@labacacia/nps-sdk/core`. Thin, allocation-light pair
151
+ used by tests and tools that don't want a class instance.
152
+
153
+ ```typescript
154
+ // Tier-level helpers
155
+ function encodeJson(payload: unknown): Uint8Array;
156
+ function decodeJson(bytes: Uint8Array): unknown;
157
+
158
+ function encodeMsgPack(payload: unknown): Uint8Array;
159
+ function decodeMsgPack(bytes: Uint8Array): unknown;
160
+
161
+ // Full frame helpers
162
+ function encodeFrame(
163
+ payload: unknown,
164
+ options: {
165
+ frameType: number;
166
+ tier?: EncodingTier;
167
+ final?: boolean;
168
+ encrypted?: boolean;
169
+ extended?: boolean;
170
+ },
171
+ ): Uint8Array;
172
+
173
+ function decodeFrame(
174
+ buffer: Uint8Array,
175
+ options?: { maxFramePayload?: number },
176
+ ): {
177
+ header: FrameHeader; // the interface shape from frame-header.ts
178
+ payload: unknown;
179
+ bytesConsumed: number;
180
+ };
181
+
182
+ // Low-level header I/O
183
+ function parseFrameHeader(buffer: Uint8Array, opts?: { max_frame_payload?: number }): FrameHeaderInterface;
184
+ function writeFrameHeader(header: FrameHeaderInterface, buffer: Uint8Array): number;
185
+ function buildFlags(options: {
186
+ tier?: EncodingTier; final?: boolean; encrypted?: boolean; extended?: boolean;
187
+ }): number;
188
+ ```
189
+
190
+ Errors are raised as `NcpError` with a protocol code (e.g.
191
+ `NCP-FRAME-FLAGS-INVALID`, `NCP-FRAME-PAYLOAD-TOO-LARGE`,
192
+ `NCP-FRAME-PARSE-ERROR`).
193
+
194
+ ---
195
+
196
+ ## `FrameRegistry`
197
+
198
+ Maps `FrameType` bytes to frame classes implementing `FrameClass.fromDict`.
199
+ Used by `NpsFrameCodec.decode` to materialise typed instances.
200
+
201
+ ```typescript
202
+ class FrameRegistry {
203
+ register(frameType: FrameType, cls: FrameClass): void;
204
+ resolve(frameType: FrameType): FrameClass; // throws NpsFrameError if unknown
205
+ }
206
+
207
+ interface FrameClass {
208
+ fromDict(data: Record<string, unknown>): NpsFrame;
209
+ }
210
+ ```
211
+
212
+ The root package exports two factories:
213
+
214
+ ```typescript
215
+ import { createDefaultRegistry, createFullRegistry } from "@labacacia/nps-sdk";
216
+
217
+ createDefaultRegistry(); // NCP only — ANCHOR + DIFF + STREAM + CAPS + ERROR
218
+ createFullRegistry(); // NCP + NWP + NIP + NDP + NOP
219
+ ```
220
+
221
+ Use `createFullRegistry()` when you need the codec to decode arbitrary
222
+ frames; the clients construct a suitable registry internally.
223
+
224
+ ---
225
+
226
+ ## `AnchorCache`
227
+
228
+ Bounded, TTL-aware schema cache (NPS-1 §5.3, §7.2, §9).
229
+
230
+ ```typescript
231
+ class AnchorCache {
232
+ constructor(options?: { maxSize?: number; getNow?: () => number });
233
+
234
+ set(frame: AnchorFrame): void;
235
+ get(anchorId: string): AnchorFrame | null;
236
+ getRequired(anchorId: string): AnchorFrame; // throws NcpError NCP-ANCHOR-NOT-FOUND
237
+ readonly size: number;
238
+ }
239
+ ```
240
+
241
+ ### Behaviour
242
+
243
+ - `ttl === 0` → frame is NOT cached (spec §4.1, "session-only").
244
+ - Re-setting an anchor with a **different** schema throws
245
+ `NcpError("NCP-ANCHOR-ID-MISMATCH")` — poisoning detection (§7.2).
246
+ - When the cache is full, the least-recently-accessed entry is evicted.
247
+ - Expiry is evaluated on every `get()`; no background timer.
248
+ - Override `getNow` for deterministic tests.
249
+
250
+ ---
251
+
252
+ ## Canonical JSON
253
+
254
+ Two distinct JSON normalisations ship with the SDK:
255
+
256
+ ```typescript
257
+ function jcsStringify(obj: unknown): string; // RFC 8785 (JCS)
258
+ function sortKeysStringify(obj: unknown): string; // sort keys, compact separators
259
+ ```
260
+
261
+ - `jcsStringify` is the canonical form used for `AnchorFrame.anchor_id`
262
+ hashing (SHA-256 over the JCS bytes).
263
+ - `sortKeysStringify` mirrors Python's `json.dumps(sort_keys=True, separators=(",", ":"))`
264
+ and is used by NIP signing for cross-language parity.
265
+
266
+ ---
267
+
268
+ ## Exceptions
269
+
270
+ ```typescript
271
+ class NpsError extends Error {}
272
+ class NpsFrameError extends NpsError {}
273
+ class NpsCodecError extends NpsError {}
274
+ class NpsAnchorNotFoundError extends NpsError { readonly anchorId: string; }
275
+ class NpsAnchorPoisonError extends NpsError { readonly anchorId: string; }
276
+ class NpsStreamError extends NpsError {}
277
+
278
+ class NcpError extends Error { readonly code: string; }
279
+ ```
280
+
281
+ `NcpError` carries a spec error code (e.g. `NCP-STREAM-SEQ-GAP`). It is
282
+ thrown by the functional codec, the stream manager, and the validators;
283
+ `NpsError` subclasses are thrown by the class-based codec and cache.
284
+
285
+ ---
286
+
287
+ ## Status codes
288
+
289
+ ```typescript
290
+ import { NpsStatusCodes } from "@labacacia/nps-sdk/core";
291
+
292
+ NpsStatusCodes.NPS_OK; // "NPS-OK"
293
+ NpsStatusCodes.NPS_CLIENT_NOT_FOUND; // "NPS-CLIENT-NOT-FOUND"
294
+ NpsStatusCodes.NPS_STREAM_SEQ_GAP; // "NPS-STREAM-SEQ-GAP"
295
+ // …
296
+ ```
297
+
298
+ Constant bundle matching `spec/status-codes.md`. Use these whenever you
299
+ need to emit an `ErrorFrame` or compare against the `status` field.
300
+
301
+ ---
302
+
303
+ ## `CryptoProvider`
304
+
305
+ Structural scaffold for pluggable async crypto (Node `node:crypto` vs
306
+ browser `SubtleCrypto`). Not instantiated by the public API today; NIP
307
+ currently uses `@noble/ed25519` directly. Exported for downstream
308
+ implementers.
309
+
310
+ ```typescript
311
+ interface CryptoProvider {
312
+ randomBytes(n: number): Uint8Array;
313
+
314
+ ed25519GenerateKeyPair(): Promise<{ publicKey: Uint8Array; privateKey: Uint8Array }>;
315
+ ed25519Sign(privateKey: Uint8Array, data: Uint8Array): Promise<Uint8Array>;
316
+ ed25519Verify(publicKey: Uint8Array, data: Uint8Array, sig: Uint8Array): Promise<boolean>;
317
+
318
+ aesGcmEncrypt(key: Uint8Array, iv: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array>;
319
+ aesGcmDecrypt(key: Uint8Array, iv: Uint8Array, ciphertextAndTag: Uint8Array): Promise<Uint8Array>;
320
+
321
+ pbkdf2Sha256(
322
+ passphrase: Uint8Array, salt: Uint8Array,
323
+ iterations: number, keyLen: number,
324
+ ): Promise<Uint8Array>;
325
+ }
326
+ ```