@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
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/exceptions.ts","../../src/core/frames.ts","../../src/ncp/frames.ts","../../src/nwp/frames.ts","../../src/nwp/registry.ts","../../src/core/codec.ts","../../src/nwp/client.ts","../../src/core/registry.ts","../../src/ncp/registry.ts"],"names":["view","payloadLength","buf","init_frames","msgpack"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/** Base class for all NPS errors. */\nexport class NpsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = new.target.name;\n }\n}\n\n/** Raised when a wire buffer cannot be parsed as a valid NPS frame. */\nexport class NpsFrameError extends NpsError {}\n\n/** Raised when frame serialisation or deserialisation fails. */\nexport class NpsCodecError extends NpsError {}\n\n/** Raised when an anchor_id is not found in the cache. */\nexport class NpsAnchorNotFoundError extends NpsError {\n constructor(public readonly anchorId: string) {\n super(`AnchorFrame not found in cache: ${anchorId}`);\n }\n}\n\n/**\n * Raised when the same anchor_id is stored with a different schema (NPS-1 §7.2).\n * This indicates a potential anchor-poisoning attack.\n */\nexport class NpsAnchorPoisonError extends NpsError {\n constructor(public readonly anchorId: string) {\n super(\n `Anchor poisoning detected: anchor_id ${anchorId} already exists with a different schema.`,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS wire-level frame primitives: FrameType, FrameFlags, EncodingTier, FrameHeader.\n */\n\nimport { NpsFrameError } from \"./exceptions.js\";\n\n// ── FrameType ────────────────────────────────────────────────────────────────\n\n/** Unified frame byte namespace for the full NPS suite (NPS-0 §9). */\nexport enum FrameType {\n // NCP 0x01–0x0F\n ANCHOR = 0x01,\n DIFF = 0x02,\n STREAM = 0x03,\n CAPS = 0x04,\n ALIGN = 0x05, // deprecated — use AlignStream (0x43)\n\n // NWP 0x10–0x1F\n QUERY = 0x10,\n ACTION = 0x11,\n\n // NIP 0x20–0x2F\n IDENT = 0x20,\n TRUST = 0x21,\n REVOKE = 0x22,\n\n // NDP 0x30–0x3F\n ANNOUNCE = 0x30,\n RESOLVE = 0x31,\n GRAPH = 0x32,\n\n // NOP 0x40–0x4F\n TASK = 0x40,\n DELEGATE = 0x41,\n SYNC = 0x42,\n ALIGN_STREAM = 0x43,\n\n // Reserved / System 0xF0–0xFF\n ERROR = 0xFE,\n}\n\n// ── EncodingTier ─────────────────────────────────────────────────────────────\n\n/**\n * Wire encoding tier, stored in the lower 2 bits of the flags byte (NPS-1 §3.2).\n * 0x00 = Tier-1 JSON — human-readable; development / compatibility.\n * 0x01 = Tier-2 MsgPack — binary, ~60 % smaller; production default.\n */\nexport enum EncodingTier {\n JSON = 0x00,\n MSGPACK = 0x01,\n}\n\n// ── FrameFlags ───────────────────────────────────────────────────────────────\n\n/**\n * Flags byte in the NPS frame header (NPS-1 §3.2).\n * Bit layout (LSB = bit 0):\n * Bits 0–1 (T0,T1) : Encoding tier\n * Bit 2 (FINAL) : Last chunk of a StreamFrame; non-stream frames MUST set this\n * Bit 3 (ENC) : Payload encrypted\n * Bits 4–6 (RSV) : Reserved — sender MUST write 0\n * Bit 7 (EXT) : Extended 8-byte header\n */\nexport const FrameFlags = {\n NONE: 0x00,\n TIER1_JSON: 0x00,\n TIER2_MSGPACK: 0x01,\n FINAL: 0x04,\n ENCRYPTED: 0x08,\n EXT: 0x80,\n} as const;\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nexport const DEFAULT_HEADER_SIZE = 4;\nexport const EXTENDED_HEADER_SIZE = 8;\nexport const DEFAULT_MAX_PAYLOAD = 0xffff; // 65 535 bytes\nexport const EXTENDED_MAX_PAYLOAD = 0xffffffff; // 4 GiB - 1\n\n// ── FrameHeader ──────────────────────────────────────────────────────────────\n\n/**\n * NPS frame header, present at the start of every wire message (NPS-1 §3.1).\n *\n * Default (4 bytes, EXT=0):\n * Byte 0 : FrameType\n * Byte 1 : Flags\n * Byte 2–3 : PayloadLength (big-endian uint16)\n *\n * Extended (8 bytes, EXT=1):\n * Byte 0 : FrameType\n * Byte 1 : Flags (bit 7 = 1)\n * Byte 2–3 : Reserved (must be 0)\n * Byte 4–7 : PayloadLength (big-endian uint32)\n */\nexport class FrameHeader {\n constructor(\n public readonly frameType: FrameType,\n public readonly flags: number,\n public readonly payloadLength: number,\n ) {}\n\n get isExtended(): boolean {\n return (this.flags & FrameFlags.EXT) !== 0;\n }\n\n get headerSize(): number {\n return this.isExtended ? EXTENDED_HEADER_SIZE : DEFAULT_HEADER_SIZE;\n }\n\n get encodingTier(): EncodingTier {\n return (this.flags & 0x03) as EncodingTier;\n }\n\n get isFinal(): boolean {\n return (this.flags & 0x04) !== 0;\n }\n\n get isEncrypted(): boolean {\n return (this.flags & 0x08) !== 0;\n }\n\n // ── Parsing ───────────────────────────────────────────────────────────────\n\n static parse(buf: Uint8Array): FrameHeader {\n if (buf.length < 2) {\n throw new NpsFrameError(\n `Buffer too small to read frame type and flags: need >= 2 bytes, got ${buf.length}.`,\n );\n }\n\n const flags = buf[1]!;\n const ext = (flags & FrameFlags.EXT) !== 0;\n\n if (ext) {\n if (buf.length < EXTENDED_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for extended frame header: need ${EXTENDED_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint32(4, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n if (buf.length < DEFAULT_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for frame header: need ${DEFAULT_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint16(2, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n // ── Serialisation ─────────────────────────────────────────────────────────\n\n toBytes(): Uint8Array {\n if (this.isExtended) {\n const buf = new Uint8Array(EXTENDED_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, 0, false); // reserved\n view.setUint32(4, this.payloadLength, false);\n return buf;\n }\n const buf = new Uint8Array(DEFAULT_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, this.payloadLength, false);\n return buf;\n }\n\n toString(): string {\n return `FrameHeader(frameType=0x${this.frameType.toString(16).padStart(2, \"0\")}, flags=0x${this.flags.toString(16).padStart(2, \"0\")}, payloadLength=${this.payloadLength})`;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\n// ── FrameSchema ───────────────────────────────────────────────────────────────\n\nexport interface SchemaField {\n name: string;\n type: string;\n semantic?: string;\n nullable?: boolean;\n}\n\nexport interface FrameSchema {\n fields: readonly SchemaField[];\n}\n\n// ── AnchorFrame ───────────────────────────────────────────────────────────────\n\nexport class AnchorFrame implements NpsFrame {\n readonly frameType = FrameType.ANCHOR;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorId: string,\n public readonly schema: FrameSchema,\n public readonly ttl: number = 3600,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_id: this.anchorId,\n schema: { fields: this.schema.fields.map((f) => ({ ...f })) },\n ttl: this.ttl,\n };\n }\n\n static fromDict(data: Record<string, unknown>): AnchorFrame {\n const schemaRaw = data[\"schema\"] as { fields: SchemaField[] };\n return new AnchorFrame(\n data[\"anchor_id\"] as string,\n { fields: schemaRaw.fields },\n (data[\"ttl\"] as number | undefined) ?? 3600,\n );\n }\n}\n\n// ── JsonPatchOperation ────────────────────────────────────────────────────────\n\nexport interface JsonPatchOperation {\n op: string;\n path: string;\n value?: unknown;\n}\n\n// ── DiffFrame ─────────────────────────────────────────────────────────────────\n\nexport class DiffFrame implements NpsFrame {\n readonly frameType = FrameType.DIFF;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef: string,\n public readonly baseSeq: number,\n public readonly patch: readonly JsonPatchOperation[],\n public readonly entityId?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef,\n base_seq: this.baseSeq,\n patch: this.patch.map((p) => ({ ...p })),\n entity_id: this.entityId ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): DiffFrame {\n return new DiffFrame(\n data[\"anchor_ref\"] as string,\n data[\"base_seq\"] as number,\n data[\"patch\"] as JsonPatchOperation[],\n (data[\"entity_id\"] as string | null) ?? undefined,\n );\n }\n}\n\n// ── StreamFrame ───────────────────────────────────────────────────────────────\n\nexport class StreamFrame implements NpsFrame {\n readonly frameType = FrameType.STREAM;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly streamId: string,\n public readonly seq: number,\n public readonly isLast: boolean,\n public readonly data: readonly Record<string, unknown>[],\n public readonly anchorRef?: string,\n public readonly windowSize?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n stream_id: this.streamId,\n seq: this.seq,\n is_last: this.isLast,\n data: this.data,\n anchor_ref: this.anchorRef ?? null,\n window_size: this.windowSize ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): StreamFrame {\n return new StreamFrame(\n data[\"stream_id\"] as string,\n data[\"seq\"] as number,\n data[\"is_last\"] as boolean,\n data[\"data\"] as Record<string, unknown>[],\n (data[\"anchor_ref\"] as string | null) ?? undefined,\n (data[\"window_size\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── CapsFrame ─────────────────────────────────────────────────────────────────\n\nexport class CapsFrame implements NpsFrame {\n readonly frameType = FrameType.CAPS;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef: string,\n public readonly count: number,\n public readonly data: readonly Record<string, unknown>[],\n public readonly nextCursor?: string,\n public readonly tokenEst?: number,\n public readonly cached?: boolean,\n public readonly tokenizerUsed?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef,\n count: this.count,\n data: this.data,\n next_cursor: this.nextCursor ?? null,\n token_est: this.tokenEst ?? null,\n cached: this.cached ?? null,\n tokenizer_used: this.tokenizerUsed ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): CapsFrame {\n return new CapsFrame(\n data[\"anchor_ref\"] as string,\n data[\"count\"] as number,\n data[\"data\"] as Record<string, unknown>[],\n (data[\"next_cursor\"] as string | null) ?? undefined,\n (data[\"token_est\"] as number | null) ?? undefined,\n (data[\"cached\"] as boolean | null) ?? undefined,\n (data[\"tokenizer_used\"] as string | null) ?? undefined,\n );\n }\n}\n\n// ── ErrorFrame ────────────────────────────────────────────────────────────────\n\nexport class ErrorFrame implements NpsFrame {\n readonly frameType = FrameType.ERROR;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly status: string,\n public readonly error: string,\n public readonly message?: string,\n public readonly details?: Record<string, unknown>,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n status: this.status,\n error: this.error,\n message: this.message ?? null,\n details: this.details ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): ErrorFrame {\n return new ErrorFrame(\n data[\"status\"] as string,\n data[\"error\"] as string,\n (data[\"message\"] as string | null) ?? undefined,\n (data[\"details\"] as Record<string, unknown> | null) ?? undefined,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\n// ── Filter DSL ────────────────────────────────────────────────────────────────\n\nexport interface QueryOrderClause {\n field: string;\n dir: \"asc\" | \"desc\";\n}\n\nexport interface VectorSearchOptions {\n vector: readonly number[];\n topK?: number;\n minScore?: number;\n vectorField?: string;\n}\n\n// ── QueryFrame ────────────────────────────────────────────────────────────────\n\nexport class QueryFrame implements NpsFrame {\n readonly frameType = FrameType.QUERY;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef?: string,\n public readonly filter?: Record<string, unknown>,\n public readonly limit?: number,\n public readonly offset?: number,\n public readonly orderBy?: readonly QueryOrderClause[],\n public readonly fields?: readonly string[],\n public readonly vectorSearch?: VectorSearchOptions,\n public readonly depth?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef ?? null,\n filter: this.filter ?? null,\n limit: this.limit ?? null,\n offset: this.offset ?? null,\n order_by: this.orderBy ?? null,\n fields: this.fields ?? null,\n vector_search: this.vectorSearch ?? null,\n depth: this.depth ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): QueryFrame {\n return new QueryFrame(\n (data[\"anchor_ref\"] as string | null) ?? undefined,\n (data[\"filter\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"limit\"] as number | null) ?? undefined,\n (data[\"offset\"] as number | null) ?? undefined,\n (data[\"order_by\"] as QueryOrderClause[] | null) ?? undefined,\n (data[\"fields\"] as string[] | null) ?? undefined,\n (data[\"vector_search\"] as VectorSearchOptions | null) ?? undefined,\n (data[\"depth\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── ActionFrame ───────────────────────────────────────────────────────────────\n\nexport class ActionFrame implements NpsFrame {\n readonly frameType = FrameType.ACTION;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly actionId: string,\n public readonly params?: Record<string, unknown>,\n public readonly async_?: boolean,\n public readonly idempotencyKey?: string,\n public readonly timeoutMs?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n action_id: this.actionId,\n params: this.params ?? null,\n async: this.async_ ?? false,\n idempotency_key: this.idempotencyKey ?? null,\n timeout_ms: this.timeoutMs ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): ActionFrame {\n return new ActionFrame(\n data[\"action_id\"] as string,\n (data[\"params\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"async\"] as boolean | null) ?? undefined,\n (data[\"idempotency_key\"] as string | null) ?? undefined,\n (data[\"timeout_ms\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── AsyncActionResponse ───────────────────────────────────────────────────────\n\nexport interface AsyncActionResponse {\n taskId: string;\n status: string;\n pollUrl?: string | undefined;\n}\n\nexport function asyncActionResponseFromDict(data: Record<string, unknown>): AsyncActionResponse {\n const r: AsyncActionResponse = {\n taskId: data[\"task_id\"] as string,\n status: data[\"status\"] as string,\n };\n const pollUrl = data[\"poll_url\"] as string | null | undefined;\n if (pollUrl != null) r.pollUrl = pollUrl;\n return r;\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { ActionFrame, QueryFrame } from \"./frames.js\";\n\nexport function registerNwpFrames(registry: FrameRegistry): void {\n registry.register(FrameType.QUERY, QueryFrame);\n registry.register(FrameType.ACTION, ActionFrame);\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS frame codec: Tier-1 (JSON) and Tier-2 (MsgPack) encode/decode,\n * plus the top-level NpsFrameCodec dispatcher.\n */\n\nimport * as msgpack from \"@msgpack/msgpack\";\nimport { NpsCodecError } from \"./exceptions.js\";\nimport {\n DEFAULT_MAX_PAYLOAD,\n EncodingTier,\n FrameFlags,\n FrameHeader,\n FrameType,\n} from \"./frames.js\";\nimport type { FrameRegistry } from \"./registry.js\";\n\n// ── NpsFrame interface ────────────────────────────────────────────────────────\n\nexport interface NpsFrame {\n readonly frameType: FrameType;\n readonly preferredTier: EncodingTier;\n toDict(): Record<string, unknown>;\n}\n\n// ── Tier-1 JSON codec ─────────────────────────────────────────────────────────\n\nexport class Tier1JsonCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n const json = JSON.stringify(frame.toDict());\n return new TextEncoder().encode(json);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const text = new TextDecoder().decode(payload);\n const data = JSON.parse(text) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── Tier-2 MsgPack codec ──────────────────────────────────────────────────────\n\nexport class Tier2MsgPackCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n return msgpack.encode(frame.toDict());\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const data = msgpack.decode(payload) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── NpsFrameCodec (dispatcher) ────────────────────────────────────────────────\n\nexport class NpsFrameCodec {\n private readonly _registry: FrameRegistry;\n private readonly _maxPayload: number;\n private readonly _json = new Tier1JsonCodec();\n private readonly _msgpack = new Tier2MsgPackCodec();\n\n constructor(registry: FrameRegistry, options: { maxPayload?: number } = {}) {\n this._registry = registry;\n this._maxPayload = options.maxPayload ?? DEFAULT_MAX_PAYLOAD;\n }\n\n // ── Encode ────────────────────────────────────────────────────────────────\n\n encode(frame: NpsFrame, options: { overrideTier?: EncodingTier } = {}): Uint8Array {\n const tier = options.overrideTier ?? frame.preferredTier;\n const tierCodec = this._selectCodec(tier);\n\n let payload: Uint8Array;\n try {\n payload = tierCodec.encode(frame);\n } catch (err) {\n if (err instanceof NpsCodecError) throw err;\n throw new NpsCodecError(`Encode failed for 0x${frame.frameType.toString(16)}.`);\n }\n\n if (payload.length > this._maxPayload) {\n throw new NpsCodecError(\n `Encoded payload for 0x${frame.frameType.toString(16).padStart(2, \"0\")} exceeds max_frame_payload` +\n ` (${payload.length} bytes > ${this._maxPayload}). Use StreamFrame (0x03) for large payloads.`,\n );\n }\n\n const useExt = payload.length > DEFAULT_MAX_PAYLOAD;\n let flags = this._buildFlags(frame, tier);\n if (useExt) flags |= FrameFlags.EXT;\n\n const header = new FrameHeader(frame.frameType, flags, payload.length);\n const headerBytes = header.toBytes();\n const wire = new Uint8Array(headerBytes.length + payload.length);\n wire.set(headerBytes, 0);\n wire.set(payload, headerBytes.length);\n return wire;\n }\n\n // ── Decode ────────────────────────────────────────────────────────────────\n\n decode(wire: Uint8Array): NpsFrame {\n const header = FrameHeader.parse(wire);\n const payload = wire.slice(header.headerSize, header.headerSize + header.payloadLength);\n const codec = this._selectCodec(header.encodingTier);\n return codec.decode(header.frameType, payload, this._registry);\n }\n\n static peekHeader(wire: Uint8Array): FrameHeader {\n return FrameHeader.parse(wire);\n }\n\n // ── Private ───────────────────────────────────────────────────────────────\n\n private _buildFlags(frame: NpsFrame, tier: EncodingTier): number {\n let flags = tier === EncodingTier.JSON ? FrameFlags.TIER1_JSON : FrameFlags.TIER2_MSGPACK;\n\n const isStreamFrame = \"isLast\" in frame;\n const isFinal = !isStreamFrame || (frame as { isLast: boolean }).isLast;\n if (isFinal) flags |= FrameFlags.FINAL;\n\n return flags;\n }\n\n private _selectCodec(tier: EncodingTier): Tier1JsonCodec | Tier2MsgPackCodec {\n if (tier === EncodingTier.JSON) return this._json;\n if (tier === EncodingTier.MSGPACK) return this._msgpack;\n throw new NpsCodecError(`Unsupported encoding tier: 0x${(tier as number).toString(16).padStart(2, \"0\")}.`);\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NwpClient — async HTTP-mode client for NPS Neural Web Protocol nodes (NPS-2).\n */\n\nimport { NpsFrameCodec } from \"../core/codec.js\";\nimport { EncodingTier } from \"../core/frames.js\";\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { registerNcpFrames } from \"../ncp/registry.js\";\nimport { CapsFrame } from \"../ncp/frames.js\";\nimport type { StreamFrame } from \"../ncp/frames.js\";\nimport { registerNwpFrames } from \"./registry.js\";\nimport { ActionFrame, asyncActionResponseFromDict } from \"./frames.js\";\nimport type { AnchorFrame } from \"../ncp/frames.js\";\nimport type { QueryFrame, AsyncActionResponse } from \"./frames.js\";\n\nconst CONTENT_TYPE = \"application/x-nps-frame\";\n\nexport class NwpClient {\n private readonly _baseUrl: string;\n private readonly _codec: NpsFrameCodec;\n private readonly _tier: EncodingTier;\n\n constructor(\n baseUrl: string,\n options: { defaultTier?: EncodingTier; maxPayload?: number; registry?: FrameRegistry } = {},\n ) {\n this._baseUrl = baseUrl.replace(/\\/$/, \"\");\n this._tier = options.defaultTier ?? EncodingTier.MSGPACK;\n\n const registry = options.registry ?? (() => {\n const r = new FrameRegistry();\n registerNcpFrames(r);\n registerNwpFrames(r);\n return r;\n })();\n const codecOpts = options.maxPayload !== undefined ? { maxPayload: options.maxPayload } : {};\n this._codec = new NpsFrameCodec(registry, codecOpts);\n }\n\n async sendAnchor(frame: AnchorFrame): Promise<void> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/anchor`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /anchor failed: HTTP ${res.status}`);\n }\n\n async query(frame: QueryFrame): Promise<CapsFrame> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/query`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /query failed: HTTP ${res.status}`);\n\n const buf = new Uint8Array(await res.arrayBuffer());\n const result = this._codec.decode(buf);\n if (!(result instanceof CapsFrame)) {\n throw new TypeError(`Expected CapsFrame from /query, got ${result.constructor.name}.`);\n }\n return result;\n }\n\n async *stream(frame: QueryFrame): AsyncGenerator<StreamFrame> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/stream`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /stream failed: HTTP ${res.status}`);\n if (res.body === null) return;\n\n const { StreamFrame: SF } = await import(\"../ncp/frames.js\");\n\n for await (const chunk of res.body) {\n const bytes = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk as ArrayBuffer);\n if (bytes.length === 0) continue;\n const result = this._codec.decode(bytes);\n if (!(result instanceof SF)) {\n throw new TypeError(`Expected StreamFrame from /stream, got ${result.constructor.name}.`);\n }\n yield result;\n if (result.isLast) break;\n }\n }\n\n async invoke(frame: ActionFrame): Promise<unknown> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/invoke`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /invoke failed: HTTP ${res.status}`);\n\n if (frame.async_) {\n return asyncActionResponseFromDict(await res.json() as Record<string, unknown>) as AsyncActionResponse;\n }\n\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(CONTENT_TYPE)) {\n const buf = new Uint8Array(await res.arrayBuffer());\n return this._codec.decode(buf);\n }\n return res.json();\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NpsFrameError } from \"./exceptions.js\";\nimport { FrameType } from \"./frames.js\";\nimport type { NpsFrame } from \"./codec.js\";\n\nexport interface FrameClass {\n fromDict(data: Record<string, unknown>): NpsFrame;\n}\n\nexport class FrameRegistry {\n private readonly _map = new Map<FrameType, FrameClass>();\n\n register(frameType: FrameType, cls: FrameClass): void {\n this._map.set(frameType, cls);\n }\n\n resolve(frameType: FrameType): FrameClass {\n const cls = this._map.get(frameType);\n if (cls === undefined) {\n throw new NpsFrameError(\n `No frame class registered for type 0x${frameType.toString(16).padStart(2, \"0\")}.`,\n );\n }\n return cls;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { AnchorFrame, CapsFrame, DiffFrame, ErrorFrame, StreamFrame } from \"./frames.js\";\n\nexport function registerNcpFrames(registry: FrameRegistry): void {\n registry.register(FrameType.ANCHOR, AnchorFrame);\n registry.register(FrameType.DIFF, DiffFrame);\n registry.register(FrameType.STREAM, StreamFrame);\n registry.register(FrameType.CAPS, CapsFrame);\n registry.register(FrameType.ERROR, ErrorFrame);\n}\n"]}
@@ -1,65 +0,0 @@
1
- import { N as NpsFrame, g as FrameType, c as EncodingTier, F as FrameRegistry } from '../codec-CmHeovTV.cjs';
2
- import { A as AnchorFrame, C as CapsFrame, a as StreamFrame } from '../frames-B3qLdl_g.cjs';
3
-
4
- interface QueryOrderClause {
5
- field: string;
6
- dir: "asc" | "desc";
7
- }
8
- interface VectorSearchOptions {
9
- vector: readonly number[];
10
- topK?: number;
11
- minScore?: number;
12
- vectorField?: string;
13
- }
14
- declare class QueryFrame implements NpsFrame {
15
- readonly anchorRef?: string | undefined;
16
- readonly filter?: Record<string, unknown> | undefined;
17
- readonly limit?: number | undefined;
18
- readonly offset?: number | undefined;
19
- readonly orderBy?: readonly QueryOrderClause[] | undefined;
20
- readonly fields?: readonly string[] | undefined;
21
- readonly vectorSearch?: VectorSearchOptions | undefined;
22
- readonly depth?: number | undefined;
23
- readonly frameType = FrameType.QUERY;
24
- readonly preferredTier = EncodingTier.MSGPACK;
25
- constructor(anchorRef?: string | undefined, filter?: Record<string, unknown> | undefined, limit?: number | undefined, offset?: number | undefined, orderBy?: readonly QueryOrderClause[] | undefined, fields?: readonly string[] | undefined, vectorSearch?: VectorSearchOptions | undefined, depth?: number | undefined);
26
- toDict(): Record<string, unknown>;
27
- static fromDict(data: Record<string, unknown>): QueryFrame;
28
- }
29
- declare class ActionFrame implements NpsFrame {
30
- readonly actionId: string;
31
- readonly params?: Record<string, unknown> | undefined;
32
- readonly async_?: boolean | undefined;
33
- readonly idempotencyKey?: string | undefined;
34
- readonly timeoutMs?: number | undefined;
35
- readonly frameType = FrameType.ACTION;
36
- readonly preferredTier = EncodingTier.MSGPACK;
37
- constructor(actionId: string, params?: Record<string, unknown> | undefined, async_?: boolean | undefined, idempotencyKey?: string | undefined, timeoutMs?: number | undefined);
38
- toDict(): Record<string, unknown>;
39
- static fromDict(data: Record<string, unknown>): ActionFrame;
40
- }
41
- interface AsyncActionResponse {
42
- taskId: string;
43
- status: string;
44
- pollUrl?: string | undefined;
45
- }
46
- declare function asyncActionResponseFromDict(data: Record<string, unknown>): AsyncActionResponse;
47
-
48
- declare function registerNwpFrames(registry: FrameRegistry): void;
49
-
50
- declare class NwpClient {
51
- private readonly _baseUrl;
52
- private readonly _codec;
53
- private readonly _tier;
54
- constructor(baseUrl: string, options?: {
55
- defaultTier?: EncodingTier;
56
- maxPayload?: number;
57
- registry?: FrameRegistry;
58
- });
59
- sendAnchor(frame: AnchorFrame): Promise<void>;
60
- query(frame: QueryFrame): Promise<CapsFrame>;
61
- stream(frame: QueryFrame): AsyncGenerator<StreamFrame>;
62
- invoke(frame: ActionFrame): Promise<unknown>;
63
- }
64
-
65
- export { ActionFrame, type AsyncActionResponse, NwpClient, QueryFrame, type QueryOrderClause, type VectorSearchOptions, asyncActionResponseFromDict, registerNwpFrames };
@@ -1,27 +0,0 @@
1
- FROM node:22-alpine AS build
2
- WORKDIR /app
3
- COPY package*.json ./
4
- RUN npm ci
5
- COPY tsconfig.json .
6
- COPY src ./src
7
- COPY db ./db
8
- RUN npm run build
9
-
10
- FROM node:22-alpine AS runtime
11
- WORKDIR /app
12
-
13
- RUN addgroup -g 1001 nipca \
14
- && adduser -u 1001 -G nipca -D nipca \
15
- && mkdir -p /data && chown nipca:nipca /data
16
-
17
- COPY --from=build /app/dist ./dist
18
- COPY --from=build /app/node_modules ./node_modules
19
- COPY db ./db
20
-
21
- USER nipca
22
- EXPOSE 17440
23
-
24
- HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
25
- CMD wget -qO- http://localhost:17440/health || exit 1
26
-
27
- CMD ["node", "dist/index.js"]
@@ -1,45 +0,0 @@
1
- # NIP CA Server — TypeScript
2
-
3
- Fastify + better-sqlite3 implementation of the NIP Certificate Authority (NPS-3 §8).
4
-
5
- ## Quick Start
6
-
7
- ```bash
8
- docker compose up -d
9
- ```
10
-
11
- ## Environment Variables
12
-
13
- | Variable | Required | Default | Description |
14
- |----------|----------|---------|-------------|
15
- | `NIP_CA_NID` | Yes | — | CA NID |
16
- | `NIP_CA_PASSPHRASE` | Yes | — | Key file passphrase |
17
- | `NIP_CA_BASE_URL` | Yes | — | Public base URL |
18
- | `NIP_CA_DISPLAY_NAME` | No | `NPS CA` | |
19
- | `NIP_CA_KEY_FILE` | No | `/data/ca.key.enc` | |
20
- | `NIP_CA_DB_PATH` | No | `/data/ca.db` | |
21
- | `NIP_CA_AGENT_VALIDITY_DAYS` | No | `30` | |
22
- | `NIP_CA_NODE_VALIDITY_DAYS` | No | `90` | |
23
- | `NIP_CA_RENEWAL_WINDOW_DAYS` | No | `7` | |
24
- | `PORT` | No | `17440` | |
25
-
26
- ## API
27
-
28
- Same endpoints as all other NIP CA Server implementations — see [NPS-3 §8](../../spec/NPS-3-NIP.md).
29
-
30
- ## Local Development
31
-
32
- ```bash
33
- npm install
34
- NIP_CA_NID=urn:nps:org:ca.local \
35
- NIP_CA_PASSPHRASE=dev-pass \
36
- NIP_CA_BASE_URL=http://localhost:17440 \
37
- npm run dev
38
- ```
39
-
40
- ## Stack
41
-
42
- - **Runtime**: Node.js 22
43
- - **Framework**: Fastify
44
- - **Crypto**: Node.js built-in `crypto` (Ed25519 + AES-256-GCM + PBKDF2)
45
- - **Storage**: better-sqlite3
@@ -1,25 +0,0 @@
1
- -- NIP CA Server — SQLite schema
2
- -- NPS-3 §8 | Copyright 2026 INNO LOTUS PTY LTD | Apache-2.0
3
-
4
- CREATE TABLE IF NOT EXISTS nip_certificates (
5
- id INTEGER PRIMARY KEY AUTOINCREMENT,
6
- nid TEXT NOT NULL,
7
- entity_type TEXT NOT NULL CHECK (entity_type IN ('agent','node','operator')),
8
- serial TEXT NOT NULL UNIQUE,
9
- pub_key TEXT NOT NULL,
10
- capabilities TEXT NOT NULL DEFAULT '[]',
11
- scope_json TEXT NOT NULL DEFAULT '{}',
12
- issued_by TEXT NOT NULL,
13
- issued_at TEXT NOT NULL,
14
- expires_at TEXT NOT NULL,
15
- revoked_at TEXT,
16
- revoke_reason TEXT,
17
- metadata_json TEXT,
18
- created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ','now'))
19
- );
20
-
21
- CREATE INDEX IF NOT EXISTS idx_nip_certs_nid ON nip_certificates (nid, issued_at DESC);
22
- CREATE INDEX IF NOT EXISTS idx_nip_certs_serial ON nip_certificates (serial);
23
- CREATE INDEX IF NOT EXISTS idx_nip_certs_revoked ON nip_certificates (revoked_at)
24
- WHERE revoked_at IS NOT NULL;
25
- CREATE INDEX IF NOT EXISTS idx_nip_certs_expires ON nip_certificates (expires_at);
@@ -1,29 +0,0 @@
1
- version: "3.9"
2
-
3
- services:
4
- nip-ca:
5
- build: .
6
- restart: unless-stopped
7
- ports:
8
- - "${NIP_PORT:-17440}:17440"
9
- volumes:
10
- - ca_data:/data
11
- environment:
12
- NIP_CA_NID: ${NIP_CA_NID:?NIP_CA_NID is required}
13
- NIP_CA_PASSPHRASE: ${NIP_CA_PASSPHRASE:?NIP_CA_PASSPHRASE is required}
14
- NIP_CA_BASE_URL: ${NIP_CA_BASE_URL:?NIP_CA_BASE_URL is required}
15
- NIP_CA_DISPLAY_NAME: ${NIP_CA_DISPLAY_NAME:-NPS CA}
16
- NIP_CA_KEY_FILE: /data/ca.key.enc
17
- NIP_CA_DB_PATH: /data/ca.db
18
- NIP_CA_AGENT_VALIDITY_DAYS: ${NIP_CA_AGENT_VALIDITY_DAYS:-30}
19
- NIP_CA_NODE_VALIDITY_DAYS: ${NIP_CA_NODE_VALIDITY_DAYS:-90}
20
- NIP_CA_RENEWAL_WINDOW_DAYS: ${NIP_CA_RENEWAL_WINDOW_DAYS:-7}
21
- healthcheck:
22
- test: ["CMD", "wget", "-qO-", "http://localhost:17440/health"]
23
- interval: 30s
24
- timeout: 5s
25
- retries: 3
26
- start_period: 10s
27
-
28
- volumes:
29
- ca_data:
@@ -1,23 +0,0 @@
1
- {
2
- "name": "@labacacia/nip-ca-server",
3
- "version": "0.1.0",
4
- "description": "NIP CA Server — TypeScript/Node.js",
5
- "license": "Apache-2.0",
6
- "type": "module",
7
- "main": "dist/index.js",
8
- "scripts": {
9
- "build": "tsc",
10
- "start": "node dist/index.js",
11
- "dev": "tsx src/index.ts"
12
- },
13
- "dependencies": {
14
- "better-sqlite3": "^11.7.0",
15
- "fastify": "^5.2.1"
16
- },
17
- "devDependencies": {
18
- "@types/better-sqlite3": "^7.6.12",
19
- "@types/node": "^22.10.5",
20
- "tsx": "^4.19.2",
21
- "typescript": "^5.7.3"
22
- }
23
- }
@@ -1,155 +0,0 @@
1
- // Copyright 2026 INNO LOTUS PTY LTD
2
- // SPDX-License-Identifier: Apache-2.0
3
- import * as crypto from "node:crypto";
4
- import * as fs from "node:fs";
5
- import * as path from "node:path";
6
-
7
- const PBKDF2_ITERS = 600_000;
8
- const SALT_LEN = 16;
9
- const NONCE_LEN = 12;
10
- const KEY_LEN = 32;
11
-
12
- export interface KeyEnvelope {
13
- version: number;
14
- algorithm: string;
15
- pub_key: string;
16
- salt: string;
17
- nonce: string;
18
- ciphertext: string;
19
- }
20
-
21
- function deriveKey(passphrase: string, salt: Buffer): Buffer {
22
- return crypto.pbkdf2Sync(passphrase, salt, PBKDF2_ITERS, KEY_LEN, "sha256");
23
- }
24
-
25
- export function pubKeyString(pubKey: crypto.KeyObject): string {
26
- const raw = pubKey.export({ type: "pkcs8", format: "der" });
27
- // Ed25519 PKCS8 DER = 44 bytes; raw public key is last 32 bytes
28
- const rawPub = raw.subarray(raw.length - 32);
29
- return "ed25519:" + rawPub.toString("hex");
30
- }
31
-
32
- function rawPrivateBytes(privKey: crypto.KeyObject): Buffer {
33
- // Ed25519 private key in JWK → d field is base64url-encoded 32-byte seed
34
- const jwk = privKey.export({ format: "jwk" }) as { d: string };
35
- return Buffer.from(jwk.d, "base64url");
36
- }
37
-
38
- export function generateKey(): crypto.KeyObject {
39
- const { privateKey } = crypto.generateKeyPairSync("ed25519");
40
- return privateKey;
41
- }
42
-
43
- export function saveKey(privKey: crypto.KeyObject, filePath: string, passphrase: string): void {
44
- const salt = crypto.randomBytes(SALT_LEN);
45
- const nonce = crypto.randomBytes(NONCE_LEN);
46
- const dk = deriveKey(passphrase, salt);
47
- const seed = rawPrivateBytes(privKey);
48
- const cipher = crypto.createCipheriv("aes-256-gcm", dk, nonce);
49
- const encrypted = Buffer.concat([cipher.update(seed), cipher.final()]);
50
- const tag = cipher.getAuthTag();
51
- const ciphertext = Buffer.concat([encrypted, tag]);
52
- const { privateKey: tmpPriv, publicKey: tmpPub } = crypto.generateKeyPairSync("ed25519", {
53
- privateKeyEncoding: { type: "pkcs8", format: "der" },
54
- publicKeyEncoding: { type: "spki", format: "der" },
55
- });
56
- // Re-derive public key from the same private key
57
- const pubStr = pubKeyString(crypto.createPublicKey(privKey));
58
- const envelope: KeyEnvelope = {
59
- version: 1,
60
- algorithm: "ed25519",
61
- pub_key: pubStr,
62
- salt: salt.toString("hex"),
63
- nonce: nonce.toString("hex"),
64
- ciphertext: ciphertext.toString("hex"),
65
- };
66
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
67
- fs.writeFileSync(filePath, JSON.stringify(envelope), { mode: 0o600 });
68
- }
69
-
70
- export function loadKey(filePath: string, passphrase: string): crypto.KeyObject {
71
- const env: KeyEnvelope = JSON.parse(fs.readFileSync(filePath, "utf8"));
72
- const salt = Buffer.from(env.salt, "hex");
73
- const nonce = Buffer.from(env.nonce, "hex");
74
- const ctBuf = Buffer.from(env.ciphertext, "hex");
75
- const tag = ctBuf.subarray(ctBuf.length - 16);
76
- const ciphertext = ctBuf.subarray(0, ctBuf.length - 16);
77
- const dk = deriveKey(passphrase, salt);
78
- const decipher = crypto.createDecipheriv("aes-256-gcm", dk, nonce);
79
- decipher.setAuthTag(tag);
80
- let seed: Buffer;
81
- try {
82
- seed = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
83
- } catch {
84
- throw new Error("Key decryption failed — wrong passphrase?");
85
- }
86
- return crypto.createPrivateKey({ key: seed, format: "der", type: "pkcs8" } as any) ||
87
- (() => {
88
- // Construct PKCS8 DER for Ed25519 seed manually
89
- // PKCS8 for Ed25519 = 0x302e020100300506032b657004220420 + 32-byte seed
90
- const pkcs8Header = Buffer.from("302e020100300506032b657004220420", "hex");
91
- const der = Buffer.concat([pkcs8Header, seed]);
92
- return crypto.createPrivateKey({ key: der, format: "der", type: "pkcs8" });
93
- })();
94
- }
95
-
96
- function canonicalJson(obj: Record<string, unknown>): Buffer {
97
- const sorted = Object.keys(obj).sort().reduce((acc, k) => {
98
- (acc as any)[k] = (obj as any)[k];
99
- return acc;
100
- }, {} as Record<string, unknown>);
101
- return Buffer.from(JSON.stringify(sorted), "utf8");
102
- }
103
-
104
- export function signDict(privKey: crypto.KeyObject, obj: Record<string, unknown>): string {
105
- const sig = crypto.sign(null, canonicalJson(obj), privKey);
106
- return "ed25519:" + sig.toString("base64");
107
- }
108
-
109
- export interface IssuedCert {
110
- nid: string;
111
- pub_key: string;
112
- capabilities: string[];
113
- scope: Record<string, unknown>;
114
- issued_by: string;
115
- issued_at: string;
116
- expires_at: string;
117
- serial: string;
118
- signature: string;
119
- metadata?: Record<string, unknown>;
120
- }
121
-
122
- export function issueCert(
123
- privKey: crypto.KeyObject,
124
- caNid: string,
125
- subjectNid: string,
126
- subjectPubKey: string,
127
- capabilities: string[],
128
- scope: Record<string, unknown>,
129
- validityDays: number,
130
- serial: string,
131
- metadata?: Record<string, unknown> | null,
132
- ): IssuedCert {
133
- const now = new Date();
134
- const expires = new Date(now.getTime() + validityDays * 86400_000);
135
- const fmt = (d: Date) => d.toISOString().replace(/\.\d{3}Z$/, "Z");
136
- const unsigned: Record<string, unknown> = {
137
- capabilities,
138
- expires_at: fmt(expires),
139
- issued_at: fmt(now),
140
- issued_by: caNid,
141
- nid: subjectNid,
142
- pub_key: subjectPubKey,
143
- scope,
144
- serial,
145
- };
146
- const signature = signDict(privKey, unsigned);
147
- const cert: IssuedCert = { ...unsigned as any, signature };
148
- if (metadata) cert.metadata = metadata;
149
- return cert;
150
- }
151
-
152
- export function generateNid(domain: string, entityType: string): string {
153
- const uid = crypto.randomBytes(8).toString("hex");
154
- return `urn:nps:${entityType}:${domain}:${uid}`;
155
- }
@@ -1,104 +0,0 @@
1
- // Copyright 2026 INNO LOTUS PTY LTD
2
- // SPDX-License-Identifier: Apache-2.0
3
- import Database from "better-sqlite3";
4
- import * as fs from "node:fs";
5
- import * as path from "node:path";
6
-
7
- const SCHEMA_PATH = path.join(__dirname, "..", "db", "001_init.sql");
8
-
9
- export interface CertRecord {
10
- id: number;
11
- nid: string;
12
- entity_type: string;
13
- serial: string;
14
- pub_key: string;
15
- capabilities: string[];
16
- scope: Record<string, unknown>;
17
- issued_by: string;
18
- issued_at: string;
19
- expires_at: string;
20
- revoked_at: string | null;
21
- revoke_reason: string | null;
22
- metadata: Record<string, unknown> | null;
23
- }
24
-
25
- export class CaDb {
26
- private db: Database.Database;
27
-
28
- constructor(dbPath: string) {
29
- fs.mkdirSync(path.dirname(dbPath), { recursive: true });
30
- this.db = new Database(dbPath);
31
- this.db.pragma("journal_mode = WAL");
32
- this.db.pragma("foreign_keys = ON");
33
- this.db.exec(fs.readFileSync(SCHEMA_PATH, "utf8"));
34
- }
35
-
36
- nextSerial(): string {
37
- const row = this.db
38
- .prepare(
39
- "SELECT COALESCE(MAX(CAST(REPLACE(serial,'0x','') AS INTEGER)),0)+1 AS n FROM nip_certificates",
40
- )
41
- .get() as { n: number };
42
- return `0x${row.n.toString(16).toUpperCase().padStart(6, "0")}`;
43
- }
44
-
45
- insert(rec: {
46
- nid: string; entity_type: string; serial: string; pub_key: string;
47
- capabilities: string[]; scope: Record<string, unknown>; issued_by: string;
48
- issued_at: string; expires_at: string; metadata?: Record<string, unknown> | null;
49
- }): number {
50
- const result = this.db.prepare(
51
- `INSERT INTO nip_certificates
52
- (nid, entity_type, serial, pub_key, capabilities, scope_json,
53
- issued_by, issued_at, expires_at, metadata_json)
54
- VALUES (?,?,?,?,?,?,?,?,?,?)`,
55
- ).run(
56
- rec.nid, rec.entity_type, rec.serial, rec.pub_key,
57
- JSON.stringify(rec.capabilities), JSON.stringify(rec.scope),
58
- rec.issued_by, rec.issued_at, rec.expires_at,
59
- rec.metadata ? JSON.stringify(rec.metadata) : null,
60
- );
61
- return Number(result.lastInsertRowid);
62
- }
63
-
64
- getActive(nid: string): CertRecord | null {
65
- const row = this.db.prepare(
66
- `SELECT * FROM nip_certificates
67
- WHERE nid=? AND revoked_at IS NULL
68
- ORDER BY issued_at DESC LIMIT 1`,
69
- ).get(nid);
70
- return row ? this._toRecord(row as any) : null;
71
- }
72
-
73
- revoke(nid: string, reason: string): boolean {
74
- const now = new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
75
- const r = this.db.prepare(
76
- "UPDATE nip_certificates SET revoked_at=?, revoke_reason=? WHERE nid=? AND revoked_at IS NULL",
77
- ).run(now, reason, nid);
78
- return r.changes > 0;
79
- }
80
-
81
- crl(): Array<{ serial: string; nid: string; revoked_at: string; revoke_reason: string | null }> {
82
- return this.db.prepare(
83
- "SELECT serial, nid, revoked_at, revoke_reason FROM nip_certificates WHERE revoked_at IS NOT NULL ORDER BY revoked_at DESC",
84
- ).all() as any;
85
- }
86
-
87
- private _toRecord(row: any): CertRecord {
88
- return {
89
- id: row.id,
90
- nid: row.nid,
91
- entity_type: row.entity_type,
92
- serial: row.serial,
93
- pub_key: row.pub_key,
94
- capabilities: JSON.parse(row.capabilities),
95
- scope: JSON.parse(row.scope_json),
96
- issued_by: row.issued_by,
97
- issued_at: row.issued_at,
98
- expires_at: row.expires_at,
99
- revoked_at: row.revoked_at ?? null,
100
- revoke_reason: row.revoke_reason ?? null,
101
- metadata: row.metadata_json ? JSON.parse(row.metadata_json) : null,
102
- };
103
- }
104
- }