@labacacia/nps-sdk 1.0.0-alpha.6 → 1.0.0-alpha.8

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 (369) hide show
  1. package/CHANGELOG.cn.md +126 -0
  2. package/CHANGELOG.md +135 -0
  3. package/README.cn.md +9 -2
  4. package/README.md +9 -2
  5. package/dist/core/anchor-cache.d.ts +42 -0
  6. package/dist/core/anchor-cache.d.ts.map +1 -0
  7. package/dist/core/anchor-cache.js +104 -0
  8. package/dist/core/anchor-cache.js.map +1 -0
  9. package/dist/core/cache.d.ts +14 -0
  10. package/dist/core/cache.d.ts.map +1 -0
  11. package/dist/core/cache.js +80 -0
  12. package/dist/core/cache.js.map +1 -0
  13. package/dist/core/canonical-json.d.ts +12 -0
  14. package/dist/core/canonical-json.d.ts.map +1 -0
  15. package/dist/core/canonical-json.js +44 -0
  16. package/dist/core/canonical-json.js.map +1 -0
  17. package/dist/core/codec.d.ts +32 -0
  18. package/dist/core/codec.d.ts.map +1 -0
  19. package/dist/core/codec.js +119 -0
  20. package/dist/core/codec.js.map +1 -0
  21. package/dist/core/codecs/index.d.ts +4 -0
  22. package/dist/core/codecs/index.d.ts.map +1 -0
  23. package/{src/core/codecs/index.ts → dist/core/codecs/index.js} +1 -0
  24. package/dist/core/codecs/index.js.map +1 -0
  25. package/dist/core/codecs/ncp-codec.d.ts +39 -0
  26. package/dist/core/codecs/ncp-codec.d.ts.map +1 -0
  27. package/dist/core/codecs/ncp-codec.js +93 -0
  28. package/dist/core/codecs/ncp-codec.js.map +1 -0
  29. package/dist/core/codecs/tier1-json-codec.d.ts +10 -0
  30. package/dist/core/codecs/tier1-json-codec.d.ts.map +1 -0
  31. package/{src/core/codecs/tier1-json-codec.ts → dist/core/codecs/tier1-json-codec.js} +11 -16
  32. package/dist/core/codecs/tier1-json-codec.js.map +1 -0
  33. package/dist/core/codecs/tier2-msgpack-codec.d.ts +10 -0
  34. package/dist/core/codecs/tier2-msgpack-codec.d.ts.map +1 -0
  35. package/{src/core/codecs/tier2-msgpack-codec.ts → dist/core/codecs/tier2-msgpack-codec.js} +10 -14
  36. package/dist/core/codecs/tier2-msgpack-codec.js.map +1 -0
  37. package/dist/core/crypto-provider.d.ts +31 -0
  38. package/dist/core/crypto-provider.d.ts.map +1 -0
  39. package/dist/core/crypto-provider.js +10 -0
  40. package/dist/core/crypto-provider.js.map +1 -0
  41. package/dist/core/exceptions.d.ts +27 -0
  42. package/dist/core/exceptions.d.ts.map +1 -0
  43. package/dist/core/exceptions.js +52 -0
  44. package/dist/core/exceptions.js.map +1 -0
  45. package/dist/core/frame-header.d.ts +87 -0
  46. package/dist/core/frame-header.d.ts.map +1 -0
  47. package/dist/core/frame-header.js +185 -0
  48. package/dist/core/frame-header.js.map +1 -0
  49. package/dist/core/frame-registry.d.ts +35 -0
  50. package/dist/core/frame-registry.d.ts.map +1 -0
  51. package/dist/core/frame-registry.js +63 -0
  52. package/dist/core/frame-registry.js.map +1 -0
  53. package/dist/core/frames.d.ts +82 -0
  54. package/dist/core/frames.d.ts.map +1 -0
  55. package/dist/core/frames.js +155 -0
  56. package/dist/core/frames.js.map +1 -0
  57. package/dist/core/index.d.ts +11 -0
  58. package/dist/core/index.d.ts.map +1 -0
  59. package/{src/core/index.ts → dist/core/index.js} +3 -23
  60. package/dist/core/index.js.map +1 -0
  61. package/dist/core/registry.d.ts +11 -0
  62. package/dist/core/registry.d.ts.map +1 -0
  63. package/dist/core/registry.js +17 -0
  64. package/dist/core/registry.js.map +1 -0
  65. package/dist/core/status-codes.d.ts +29 -0
  66. package/dist/core/status-codes.d.ts.map +1 -0
  67. package/dist/core/status-codes.js +39 -0
  68. package/dist/core/status-codes.js.map +1 -0
  69. package/dist/index.d.ts +2 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/{src/index.ts → dist/index.js} +1 -1
  72. package/dist/index.js.map +1 -0
  73. package/dist/ncp/frames/anchor-frame.d.ts +29 -0
  74. package/dist/ncp/frames/anchor-frame.d.ts.map +1 -0
  75. package/dist/ncp/frames/anchor-frame.js +54 -0
  76. package/dist/ncp/frames/anchor-frame.js.map +1 -0
  77. package/dist/ncp/frames/caps-frame.d.ts +29 -0
  78. package/dist/ncp/frames/caps-frame.d.ts.map +1 -0
  79. package/dist/ncp/frames/caps-frame.js +29 -0
  80. package/dist/ncp/frames/caps-frame.js.map +1 -0
  81. package/dist/ncp/frames/diff-frame.d.ts +32 -0
  82. package/dist/ncp/frames/diff-frame.d.ts.map +1 -0
  83. package/dist/ncp/frames/diff-frame.js +37 -0
  84. package/dist/ncp/frames/diff-frame.js.map +1 -0
  85. package/dist/ncp/frames/error-frame.d.ts +16 -0
  86. package/dist/ncp/frames/error-frame.d.ts.map +1 -0
  87. package/dist/ncp/frames/error-frame.js +13 -0
  88. package/dist/ncp/frames/error-frame.js.map +1 -0
  89. package/dist/ncp/frames/hello-frame.d.ts +21 -0
  90. package/dist/ncp/frames/hello-frame.d.ts.map +1 -0
  91. package/dist/ncp/frames/hello-frame.js +25 -0
  92. package/dist/ncp/frames/hello-frame.js.map +1 -0
  93. package/dist/ncp/frames/stream-frame.d.ts +16 -0
  94. package/dist/ncp/frames/stream-frame.d.ts.map +1 -0
  95. package/dist/ncp/frames/stream-frame.js +18 -0
  96. package/dist/ncp/frames/stream-frame.js.map +1 -0
  97. package/dist/ncp/frames.d.ts +94 -0
  98. package/dist/ncp/frames.d.ts.map +1 -0
  99. package/dist/ncp/frames.js +192 -0
  100. package/dist/ncp/frames.js.map +1 -0
  101. package/dist/ncp/handshake.d.ts +30 -0
  102. package/dist/ncp/handshake.d.ts.map +1 -0
  103. package/dist/ncp/handshake.js +80 -0
  104. package/dist/ncp/handshake.js.map +1 -0
  105. package/dist/ncp/index.d.ts +12 -0
  106. package/dist/ncp/index.d.ts.map +1 -0
  107. package/{src/ncp/index.ts → dist/ncp/index.js} +1 -0
  108. package/dist/ncp/index.js.map +1 -0
  109. package/dist/ncp/ncp-error-codes.d.ts +23 -0
  110. package/dist/ncp/ncp-error-codes.d.ts.map +1 -0
  111. package/dist/ncp/ncp-error-codes.js +34 -0
  112. package/dist/ncp/ncp-error-codes.js.map +1 -0
  113. package/dist/ncp/ncp-patch-format.d.ts +7 -0
  114. package/dist/ncp/ncp-patch-format.d.ts.map +1 -0
  115. package/dist/ncp/ncp-patch-format.js +13 -0
  116. package/dist/ncp/ncp-patch-format.js.map +1 -0
  117. package/dist/ncp/preamble.d.ts +47 -0
  118. package/dist/ncp/preamble.d.ts.map +1 -0
  119. package/dist/ncp/preamble.js +74 -0
  120. package/dist/ncp/preamble.js.map +1 -0
  121. package/dist/ncp/registry.d.ts +3 -0
  122. package/dist/ncp/registry.d.ts.map +1 -0
  123. package/dist/ncp/registry.js +13 -0
  124. package/dist/ncp/registry.js.map +1 -0
  125. package/dist/ncp/stream-manager.d.ts +57 -0
  126. package/dist/ncp/stream-manager.d.ts.map +1 -0
  127. package/dist/ncp/stream-manager.js +163 -0
  128. package/dist/ncp/stream-manager.js.map +1 -0
  129. package/dist/ndp/dns-txt.d.ts +35 -0
  130. package/dist/ndp/dns-txt.d.ts.map +1 -0
  131. package/dist/ndp/dns-txt.js +67 -0
  132. package/dist/ndp/dns-txt.js.map +1 -0
  133. package/dist/ndp/frames.d.ts +56 -0
  134. package/dist/ndp/frames.d.ts.map +1 -0
  135. package/dist/ndp/frames.js +87 -0
  136. package/dist/ndp/frames.js.map +1 -0
  137. package/dist/ndp/index.d.ts +6 -0
  138. package/dist/ndp/index.d.ts.map +1 -0
  139. package/{src/ndp/index.ts → dist/ndp/index.js} +1 -1
  140. package/dist/ndp/index.js.map +1 -0
  141. package/dist/ndp/ndp-registry.d.ts +13 -0
  142. package/dist/ndp/ndp-registry.d.ts.map +1 -0
  143. package/dist/ndp/ndp-registry.js +104 -0
  144. package/dist/ndp/ndp-registry.js.map +1 -0
  145. package/dist/ndp/registry.d.ts +3 -0
  146. package/dist/ndp/registry.d.ts.map +1 -0
  147. package/dist/ndp/registry.js +10 -0
  148. package/dist/ndp/registry.js.map +1 -0
  149. package/dist/ndp/validator.d.ts +18 -0
  150. package/dist/ndp/validator.d.ts.map +1 -0
  151. package/dist/ndp/validator.js +48 -0
  152. package/dist/ndp/validator.js.map +1 -0
  153. package/dist/nip/acme/client.d.ts +31 -0
  154. package/dist/nip/acme/client.d.ts.map +1 -0
  155. package/dist/nip/acme/client.js +136 -0
  156. package/dist/nip/acme/client.js.map +1 -0
  157. package/dist/nip/acme/index.d.ts +6 -0
  158. package/dist/nip/acme/index.d.ts.map +1 -0
  159. package/{src/nip/acme/index.ts → dist/nip/acme/index.js} +1 -1
  160. package/dist/nip/acme/index.js.map +1 -0
  161. package/dist/nip/acme/jws.d.ts +31 -0
  162. package/dist/nip/acme/jws.d.ts.map +1 -0
  163. package/dist/nip/acme/jws.js +76 -0
  164. package/dist/nip/acme/jws.js.map +1 -0
  165. package/dist/nip/acme/messages.d.ts +71 -0
  166. package/dist/nip/acme/messages.d.ts.map +1 -0
  167. package/dist/nip/acme/messages.js +4 -0
  168. package/dist/nip/acme/messages.js.map +1 -0
  169. package/dist/nip/acme/server.d.ts +41 -0
  170. package/dist/nip/acme/server.d.ts.map +1 -0
  171. package/dist/nip/acme/server.js +458 -0
  172. package/dist/nip/acme/server.js.map +1 -0
  173. package/dist/nip/acme/wire.d.ts +19 -0
  174. package/dist/nip/acme/wire.d.ts.map +1 -0
  175. package/dist/nip/acme/wire.js +21 -0
  176. package/dist/nip/acme/wire.js.map +1 -0
  177. package/dist/nip/assurance-level.d.ts +19 -0
  178. package/dist/nip/assurance-level.d.ts.map +1 -0
  179. package/dist/nip/assurance-level.js +38 -0
  180. package/dist/nip/assurance-level.js.map +1 -0
  181. package/dist/nip/cert-format.d.ts +5 -0
  182. package/dist/nip/cert-format.d.ts.map +1 -0
  183. package/dist/nip/cert-format.js +6 -0
  184. package/dist/nip/cert-format.js.map +1 -0
  185. package/dist/nip/error-codes.d.ts +25 -0
  186. package/dist/nip/error-codes.d.ts.map +1 -0
  187. package/{src/nip/error-codes.ts → dist/nip/error-codes.js} +19 -25
  188. package/dist/nip/error-codes.js.map +1 -0
  189. package/dist/nip/frames.d.ts +53 -0
  190. package/dist/nip/frames.d.ts.map +1 -0
  191. package/dist/nip/frames.js +106 -0
  192. package/dist/nip/frames.js.map +1 -0
  193. package/dist/nip/identity.d.ts +18 -0
  194. package/dist/nip/identity.d.ts.map +1 -0
  195. package/dist/nip/identity.js +94 -0
  196. package/dist/nip/identity.js.map +1 -0
  197. package/dist/nip/index.d.ts +11 -0
  198. package/dist/nip/index.d.ts.map +1 -0
  199. package/{src/nip/index.ts → dist/nip/index.js} +3 -2
  200. package/dist/nip/index.js.map +1 -0
  201. package/dist/nip/registry.d.ts +3 -0
  202. package/dist/nip/registry.d.ts.map +1 -0
  203. package/dist/nip/registry.js +10 -0
  204. package/dist/nip/registry.js.map +1 -0
  205. package/dist/nip/reputation-client.d.ts +116 -0
  206. package/dist/nip/reputation-client.d.ts.map +1 -0
  207. package/dist/nip/reputation-client.js +261 -0
  208. package/dist/nip/reputation-client.js.map +1 -0
  209. package/dist/nip/verifier.d.ts +23 -0
  210. package/dist/nip/verifier.d.ts.map +1 -0
  211. package/dist/nip/verifier.js +90 -0
  212. package/dist/nip/verifier.js.map +1 -0
  213. package/dist/nip/x509/builder.d.ts +35 -0
  214. package/dist/nip/x509/builder.d.ts.map +1 -0
  215. package/dist/nip/x509/builder.js +59 -0
  216. package/dist/nip/x509/builder.js.map +1 -0
  217. package/dist/nip/x509/index.d.ts +4 -0
  218. package/dist/nip/x509/index.d.ts.map +1 -0
  219. package/{src/nip/x509/index.ts → dist/nip/x509/index.js} +1 -1
  220. package/dist/nip/x509/index.js.map +1 -0
  221. package/dist/nip/x509/oids.d.ts +16 -0
  222. package/dist/nip/x509/oids.d.ts.map +1 -0
  223. package/{src/nip/x509/oids.ts → dist/nip/x509/oids.js} +5 -10
  224. package/dist/nip/x509/oids.js.map +1 -0
  225. package/dist/nip/x509/verifier.d.ts +26 -0
  226. package/dist/nip/x509/verifier.d.ts.map +1 -0
  227. package/dist/nip/x509/verifier.js +171 -0
  228. package/dist/nip/x509/verifier.js.map +1 -0
  229. package/dist/nop/client.d.ts +34 -0
  230. package/dist/nop/client.d.ts.map +1 -0
  231. package/dist/nop/client.js +90 -0
  232. package/dist/nop/client.js.map +1 -0
  233. package/dist/nop/frames.d.ts +65 -0
  234. package/dist/nop/frames.d.ts.map +1 -0
  235. package/dist/nop/frames.js +148 -0
  236. package/dist/nop/frames.js.map +1 -0
  237. package/dist/nop/index.d.ts +5 -0
  238. package/dist/nop/index.d.ts.map +1 -0
  239. package/{src/nop/index.ts → dist/nop/index.js} +1 -1
  240. package/dist/nop/index.js.map +1 -0
  241. package/dist/nop/models.d.ts +58 -0
  242. package/dist/nop/models.d.ts.map +1 -0
  243. package/dist/nop/models.js +50 -0
  244. package/dist/nop/models.js.map +1 -0
  245. package/dist/nop/nop-types.d.ts +136 -0
  246. package/dist/nop/nop-types.d.ts.map +1 -0
  247. package/dist/nop/nop-types.js +44 -0
  248. package/dist/nop/nop-types.js.map +1 -0
  249. package/dist/nop/registry.d.ts +3 -0
  250. package/dist/nop/registry.d.ts.map +1 -0
  251. package/dist/nop/registry.js +11 -0
  252. package/dist/nop/registry.js.map +1 -0
  253. package/dist/nwp/anchor-client.d.ts +109 -0
  254. package/dist/nwp/anchor-client.d.ts.map +1 -0
  255. package/dist/nwp/anchor-client.js +279 -0
  256. package/dist/nwp/anchor-client.js.map +1 -0
  257. package/dist/nwp/client.d.ts +28 -0
  258. package/dist/nwp/client.d.ts.map +1 -0
  259. package/dist/nwp/client.js +142 -0
  260. package/dist/nwp/client.js.map +1 -0
  261. package/dist/nwp/frames.d.ts +107 -0
  262. package/dist/nwp/frames.d.ts.map +1 -0
  263. package/dist/nwp/frames.js +198 -0
  264. package/dist/nwp/frames.js.map +1 -0
  265. package/dist/nwp/index.d.ts +6 -0
  266. package/dist/nwp/index.d.ts.map +1 -0
  267. package/{src/nwp/index.ts → dist/nwp/index.js} +3 -1
  268. package/dist/nwp/index.js.map +1 -0
  269. package/dist/nwp/manifest.d.ts +69 -0
  270. package/dist/nwp/manifest.d.ts.map +1 -0
  271. package/dist/nwp/manifest.js +4 -0
  272. package/dist/nwp/manifest.js.map +1 -0
  273. package/dist/nwp/registry.d.ts +3 -0
  274. package/dist/nwp/registry.d.ts.map +1 -0
  275. package/dist/nwp/registry.js +10 -0
  276. package/dist/nwp/registry.js.map +1 -0
  277. package/dist/setup.d.ts +10 -0
  278. package/dist/setup.d.ts.map +1 -0
  279. package/{src/setup.ts → dist/setup.js} +13 -16
  280. package/dist/setup.js.map +1 -0
  281. package/package.json +12 -1
  282. package/CONTRIBUTING.cn.md +0 -35
  283. package/CONTRIBUTING.md +0 -35
  284. package/nip-ca-server/Dockerfile +0 -27
  285. package/nip-ca-server/README.md +0 -45
  286. package/nip-ca-server/db/001_init.sql +0 -25
  287. package/nip-ca-server/docker-compose.yml +0 -29
  288. package/nip-ca-server/package.json +0 -23
  289. package/nip-ca-server/src/ca.ts +0 -155
  290. package/nip-ca-server/src/db.ts +0 -104
  291. package/nip-ca-server/src/index.ts +0 -157
  292. package/nip-ca-server/tsconfig.json +0 -13
  293. package/src/core/anchor-cache.ts +0 -129
  294. package/src/core/cache.ts +0 -93
  295. package/src/core/canonical-json.ts +0 -50
  296. package/src/core/codec.ts +0 -158
  297. package/src/core/codecs/ncp-codec.ts +0 -170
  298. package/src/core/crypto-provider.ts +0 -47
  299. package/src/core/exceptions.ts +0 -57
  300. package/src/core/frame-header.ts +0 -282
  301. package/src/core/frame-registry.ts +0 -91
  302. package/src/core/frames.ts +0 -184
  303. package/src/core/registry.ts +0 -28
  304. package/src/core/status-codes.ts +0 -47
  305. package/src/ncp/frames/anchor-frame.ts +0 -87
  306. package/src/ncp/frames/caps-frame.ts +0 -59
  307. package/src/ncp/frames/diff-frame.ts +0 -69
  308. package/src/ncp/frames/error-frame.ts +0 -26
  309. package/src/ncp/frames/hello-frame.ts +0 -50
  310. package/src/ncp/frames/stream-frame.ts +0 -35
  311. package/src/ncp/frames.ts +0 -251
  312. package/src/ncp/handshake.ts +0 -95
  313. package/src/ncp/ncp-error-codes.ts +0 -36
  314. package/src/ncp/ncp-patch-format.ts +0 -16
  315. package/src/ncp/preamble.ts +0 -79
  316. package/src/ncp/registry.ts +0 -15
  317. package/src/ncp/stream-manager.ts +0 -212
  318. package/src/ndp/dns-txt.ts +0 -86
  319. package/src/ndp/frames.ts +0 -124
  320. package/src/ndp/ndp-registry.ts +0 -116
  321. package/src/ndp/registry.ts +0 -12
  322. package/src/ndp/validator.ts +0 -64
  323. package/src/nip/acme/client.ts +0 -185
  324. package/src/nip/acme/jws.ts +0 -109
  325. package/src/nip/acme/messages.ts +0 -85
  326. package/src/nip/acme/server.ts +0 -480
  327. package/src/nip/acme/wire.ts +0 -24
  328. package/src/nip/assurance-level.ts +0 -40
  329. package/src/nip/cert-format.ts +0 -9
  330. package/src/nip/frames.ts +0 -138
  331. package/src/nip/identity.ts +0 -113
  332. package/src/nip/registry.ts +0 -12
  333. package/src/nip/verifier.ts +0 -122
  334. package/src/nip/x509/builder.ts +0 -91
  335. package/src/nip/x509/verifier.ts +0 -214
  336. package/src/nop/client.ts +0 -103
  337. package/src/nop/frames.ts +0 -181
  338. package/src/nop/models.ts +0 -79
  339. package/src/nop/nop-types.ts +0 -208
  340. package/src/nop/registry.ts +0 -13
  341. package/src/nwp/client.ts +0 -114
  342. package/src/nwp/frames.ts +0 -116
  343. package/src/nwp/registry.ts +0 -11
  344. package/tests/_rfc0002-keys.ts +0 -57
  345. package/tests/core/anchor-cache.test.ts +0 -242
  346. package/tests/core/codec.test.ts +0 -205
  347. package/tests/core/frame-registry.test.ts +0 -46
  348. package/tests/core.test.ts +0 -327
  349. package/tests/ncp/diff-binary-bitset.test.ts +0 -107
  350. package/tests/ncp/e2e-enc-reject.test.ts +0 -93
  351. package/tests/ncp/err-error-frame.test.ts +0 -152
  352. package/tests/ncp/frames.test.ts +0 -359
  353. package/tests/ncp/framing.test.ts +0 -233
  354. package/tests/ncp/hello-frame.test.ts +0 -122
  355. package/tests/ncp/inline-anchor.test.ts +0 -88
  356. package/tests/ncp/preamble.test.ts +0 -93
  357. package/tests/ncp/security.test.ts +0 -184
  358. package/tests/ncp/stream-window.test.ts +0 -167
  359. package/tests/ncp/stream.test.ts +0 -242
  360. package/tests/ncp/version-negotiation.test.ts +0 -123
  361. package/tests/ndp.test.ts +0 -377
  362. package/tests/nip-acme-agent01.test.ts +0 -192
  363. package/tests/nip-x509.test.ts +0 -280
  364. package/tests/nip.test.ts +0 -184
  365. package/tests/nop.test.ts +0 -344
  366. package/tests/nwp.test.ts +0 -237
  367. package/tsconfig.json +0 -20
  368. package/tsup.config.ts +0 -20
  369. package/vitest.config.ts +0 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/core/exceptions.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,mEAAmE;AACnE,WAAW;AAEX,yCAAyC;AACzC,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,uCAAuC;AACvC,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,8BAA8B;AAC9B,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,yDAAyD;AACzD,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IACzC,QAAQ,CAAS;IAC1B,YAAY,QAAgB,EAAE,OAAgB;QAC5C,KAAK,CAAC,OAAO,IAAI,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,kEAAkE;AAClE,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IACvC,QAAQ,CAAS;IAC1B,YAAY,QAAgB,EAAE,OAAgB;QAC5C,KAAK,CAAC,OAAO,IAAI,2BAA2B,QAAQ,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,kEAAkE;AAClE,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,87 @@
1
+ /** Wire encoding tier (NPS-1 §3.2, flags bits 0-1). */
2
+ export declare enum EncodingTier {
3
+ /** Tier-1: UTF-8 JSON — development & compatibility. */
4
+ Json = 0,
5
+ /** Tier-2: MessagePack binary — production (~60% compression). */
6
+ MsgPack = 1
7
+ }
8
+ /** Unified frame type namespace for the full NPS suite (NPS-0 §9). */
9
+ export declare enum FrameType {
10
+ Anchor = 1,
11
+ Diff = 2,
12
+ Stream = 3,
13
+ Caps = 4,
14
+ Align = 5,// deprecated — use AlignStream (0x43)
15
+ Hello = 6,
16
+ Query = 16,
17
+ Action = 17,
18
+ Subscribe = 18,
19
+ Ident = 32,
20
+ Trust = 33,
21
+ Revoke = 34,
22
+ Announce = 48,
23
+ Resolve = 49,
24
+ Graph = 50,
25
+ Task = 64,
26
+ Delegate = 65,
27
+ Sync = 66,
28
+ AlignStream = 67,
29
+ Error = 254
30
+ }
31
+ /** Default (compact) header size in bytes. */
32
+ export declare const DEFAULT_HEADER_SIZE = 4;
33
+ /** Extended header size in bytes (EXT=1). */
34
+ export declare const EXTENDED_HEADER_SIZE = 8;
35
+ /** Maximum payload in default mode (64 KiB − 1). */
36
+ export declare const DEFAULT_MAX_PAYLOAD = 65535;
37
+ /** Maximum payload in extended mode (4 GiB − 1). */
38
+ export declare const EXTENDED_MAX_PAYLOAD = 4294967295;
39
+ /** NCP protocol error with machine-readable error code. */
40
+ export declare class NcpError extends Error {
41
+ readonly code: string;
42
+ constructor(code: string, message: string);
43
+ }
44
+ /** Parsed frame header. */
45
+ export interface FrameHeader {
46
+ /** Raw frame type byte. */
47
+ frameType: number;
48
+ /** Raw flags byte. */
49
+ flags: number;
50
+ /** Payload length in bytes. */
51
+ payloadLength: number;
52
+ /** Encoding tier extracted from flags bits 0-1. */
53
+ tier: EncodingTier;
54
+ /** True when FINAL flag (bit 2) is set. */
55
+ isFinal: boolean;
56
+ /** True when ENC flag (bit 3) is set. */
57
+ isEncrypted: boolean;
58
+ /** True when EXT flag (bit 7) is set — 8-byte header. */
59
+ isExtended: boolean;
60
+ /** Header size in bytes (4 or 8). */
61
+ headerSize: number;
62
+ }
63
+ /**
64
+ * Parse a frame header from the start of the buffer.
65
+ * Reads 2 bytes first to determine EXT, then reads remaining bytes.
66
+ *
67
+ * @throws {NcpError} NCP-FRAME-FLAGS-INVALID if reserved bits 4-6 are non-zero.
68
+ * @throws {NcpError} NCP-FRAME-PARSE-ERROR if buffer is too small.
69
+ * @throws {NcpError} NCP-FRAME-PAYLOAD-TOO-LARGE if opts.max_frame_payload is set and exceeded.
70
+ */
71
+ export declare function parseFrameHeader(buffer: Uint8Array, opts?: {
72
+ max_frame_payload?: number;
73
+ }): FrameHeader;
74
+ /**
75
+ * Write a frame header into the buffer.
76
+ * @returns Number of bytes written (4 or 8).
77
+ * @throws {Error} if buffer is too small.
78
+ */
79
+ export declare function writeFrameHeader(header: FrameHeader, buffer: Uint8Array): number;
80
+ /** Build a flags byte from individual options. */
81
+ export declare function buildFlags(options: {
82
+ tier?: EncodingTier;
83
+ final?: boolean;
84
+ encrypted?: boolean;
85
+ extended?: boolean;
86
+ }): number;
87
+ //# sourceMappingURL=frame-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-header.d.ts","sourceRoot":"","sources":["../../src/core/frame-header.ts"],"names":[],"mappings":"AAUA,uDAAuD;AACvD,oBAAY,YAAY;IACtB,wDAAwD;IACxD,IAAI,IAAO;IACX,kEAAkE;IAClE,OAAO,IAAO;CAGf;AAED,sEAAsE;AACtE,oBAAY,SAAS;IAEnB,MAAM,IAAO;IACb,IAAI,IAAO;IACX,MAAM,IAAO;IACb,IAAI,IAAO;IACX,KAAK,IAAO,CAAE,sCAAsC;IACpD,KAAK,IAAO;IAEZ,KAAK,KAAO;IACZ,MAAM,KAAO;IACb,SAAS,KAAO;IAEhB,KAAK,KAAO;IACZ,KAAK,KAAO;IACZ,MAAM,KAAO;IAEb,QAAQ,KAAO;IACf,OAAO,KAAO;IACd,KAAK,KAAO;IAEZ,IAAI,KAAO;IACX,QAAQ,KAAO;IACf,IAAI,KAAO;IACX,WAAW,KAAO;IAElB,KAAK,MAAO;CACb;AAMD,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,6CAA6C;AAC7C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,oDAAoD;AACpD,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,oDAAoD;AACpD,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAa/C,2DAA2D;AAC3D,qBAAa,QAAS,SAAQ,KAAK;aAKf,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAMD,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,IAAI,EAAE,YAAY,CAAC;IACnB,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,UAAU,EAAE,OAAO,CAAC;IACpB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,IAAI,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC,WAAW,CA6Fb;AAMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,UAAU,GACjB,MAAM,CA0BR;AAMD,kDAAkD;AAClD,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,MAAM,CAMT"}
@@ -0,0 +1,185 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // NCP Frame Header — Binary parse/write for NPS wire format
5
+ // NPS-1 Neural Communication Protocol §3.1, §3.2
6
+ // ---------------------------------------------------------------------------
7
+ // Enums
8
+ // ---------------------------------------------------------------------------
9
+ /** Wire encoding tier (NPS-1 §3.2, flags bits 0-1). */
10
+ export var EncodingTier;
11
+ (function (EncodingTier) {
12
+ /** Tier-1: UTF-8 JSON — development & compatibility. */
13
+ EncodingTier[EncodingTier["Json"] = 0] = "Json";
14
+ /** Tier-2: MessagePack binary — production (~60% compression). */
15
+ EncodingTier[EncodingTier["MsgPack"] = 1] = "MsgPack";
16
+ // 0x02 = Reserved
17
+ // 0x03 = Reserved
18
+ })(EncodingTier || (EncodingTier = {}));
19
+ /** Unified frame type namespace for the full NPS suite (NPS-0 §9). */
20
+ export var FrameType;
21
+ (function (FrameType) {
22
+ // NCP 0x01–0x0F
23
+ FrameType[FrameType["Anchor"] = 1] = "Anchor";
24
+ FrameType[FrameType["Diff"] = 2] = "Diff";
25
+ FrameType[FrameType["Stream"] = 3] = "Stream";
26
+ FrameType[FrameType["Caps"] = 4] = "Caps";
27
+ FrameType[FrameType["Align"] = 5] = "Align";
28
+ FrameType[FrameType["Hello"] = 6] = "Hello";
29
+ // NWP 0x10–0x1F
30
+ FrameType[FrameType["Query"] = 16] = "Query";
31
+ FrameType[FrameType["Action"] = 17] = "Action";
32
+ FrameType[FrameType["Subscribe"] = 18] = "Subscribe";
33
+ // NIP 0x20–0x2F
34
+ FrameType[FrameType["Ident"] = 32] = "Ident";
35
+ FrameType[FrameType["Trust"] = 33] = "Trust";
36
+ FrameType[FrameType["Revoke"] = 34] = "Revoke";
37
+ // NDP 0x30–0x3F
38
+ FrameType[FrameType["Announce"] = 48] = "Announce";
39
+ FrameType[FrameType["Resolve"] = 49] = "Resolve";
40
+ FrameType[FrameType["Graph"] = 50] = "Graph";
41
+ // NOP 0x40–0x4F
42
+ FrameType[FrameType["Task"] = 64] = "Task";
43
+ FrameType[FrameType["Delegate"] = 65] = "Delegate";
44
+ FrameType[FrameType["Sync"] = 66] = "Sync";
45
+ FrameType[FrameType["AlignStream"] = 67] = "AlignStream";
46
+ // System 0xF0–0xFF
47
+ FrameType[FrameType["Error"] = 254] = "Error";
48
+ })(FrameType || (FrameType = {}));
49
+ // ---------------------------------------------------------------------------
50
+ // Constants
51
+ // ---------------------------------------------------------------------------
52
+ /** Default (compact) header size in bytes. */
53
+ export const DEFAULT_HEADER_SIZE = 4;
54
+ /** Extended header size in bytes (EXT=1). */
55
+ export const EXTENDED_HEADER_SIZE = 8;
56
+ /** Maximum payload in default mode (64 KiB − 1). */
57
+ export const DEFAULT_MAX_PAYLOAD = 0xffff;
58
+ /** Maximum payload in extended mode (4 GiB − 1). */
59
+ export const EXTENDED_MAX_PAYLOAD = 0xffffffff;
60
+ // Flag bit positions (NPS-1 §3.2)
61
+ const TIER_MASK = 0x03; // bits 0-1
62
+ const FINAL_BIT = 0x04; // bit 2
63
+ const ENC_BIT = 0x08; // bit 3
64
+ const RESERVED_MASK = 0x70; // bits 4-6
65
+ const EXT_BIT = 0x80; // bit 7
66
+ // ---------------------------------------------------------------------------
67
+ // Error
68
+ // ---------------------------------------------------------------------------
69
+ /** NCP protocol error with machine-readable error code. */
70
+ export class NcpError extends Error {
71
+ code;
72
+ // `code` accepts NcpErrorCode constants (preferred) as well as NPS status
73
+ // strings that are not NCP-prefixed (e.g. "NPS-CLIENT-CONFLICT") for cases
74
+ // where the spec delegates to NPS-level codes without assigning an NCP code.
75
+ constructor(code, message) {
76
+ super(message);
77
+ this.code = code;
78
+ this.name = "NcpError";
79
+ }
80
+ }
81
+ // ---------------------------------------------------------------------------
82
+ // Parse
83
+ // ---------------------------------------------------------------------------
84
+ /**
85
+ * Parse a frame header from the start of the buffer.
86
+ * Reads 2 bytes first to determine EXT, then reads remaining bytes.
87
+ *
88
+ * @throws {NcpError} NCP-FRAME-FLAGS-INVALID if reserved bits 4-6 are non-zero.
89
+ * @throws {NcpError} NCP-FRAME-PARSE-ERROR if buffer is too small.
90
+ * @throws {NcpError} NCP-FRAME-PAYLOAD-TOO-LARGE if opts.max_frame_payload is set and exceeded.
91
+ */
92
+ export function parseFrameHeader(buffer, opts) {
93
+ if (buffer.length < 2) {
94
+ throw new NcpError("NCP-FRAME-PARSE-ERROR", `Buffer too small to read frame type and flags: need >= 2 bytes, got ${buffer.length}`);
95
+ }
96
+ const frameType = buffer[0];
97
+ const flags = buffer[1];
98
+ // Validate reserved bits (NPS-1 §3.2: bits 4-6 MUST be 0)
99
+ if ((flags & RESERVED_MASK) !== 0) {
100
+ throw new NcpError("NCP-FRAME-FLAGS-INVALID", "Reserved flag bits 4-6 must be zero");
101
+ }
102
+ const isExtended = (flags & EXT_BIT) !== 0;
103
+ if (isExtended) {
104
+ if (buffer.length < EXTENDED_HEADER_SIZE) {
105
+ throw new NcpError("NCP-FRAME-PARSE-ERROR", `Buffer too small for extended header: need ${EXTENDED_HEADER_SIZE} bytes, got ${buffer.length}`);
106
+ }
107
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
108
+ const payloadLength = view.getUint32(2, false); // big-endian
109
+ if (opts?.max_frame_payload !== undefined &&
110
+ payloadLength > opts.max_frame_payload) {
111
+ throw new NcpError("NCP-FRAME-PAYLOAD-TOO-LARGE", `Payload length ${payloadLength} exceeds max_frame_payload ${opts.max_frame_payload}`);
112
+ }
113
+ return {
114
+ frameType,
115
+ flags,
116
+ payloadLength,
117
+ tier: (flags & TIER_MASK),
118
+ isFinal: (flags & FINAL_BIT) !== 0,
119
+ isEncrypted: (flags & ENC_BIT) !== 0,
120
+ isExtended: true,
121
+ headerSize: EXTENDED_HEADER_SIZE,
122
+ };
123
+ }
124
+ // Default 4-byte header
125
+ if (buffer.length < DEFAULT_HEADER_SIZE) {
126
+ throw new NcpError("NCP-FRAME-PARSE-ERROR", `Buffer too small for header: need ${DEFAULT_HEADER_SIZE} bytes, got ${buffer.length}`);
127
+ }
128
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
129
+ const payloadLength = view.getUint16(2, false); // big-endian
130
+ if (opts?.max_frame_payload !== undefined &&
131
+ payloadLength > opts.max_frame_payload) {
132
+ throw new NcpError("NCP-FRAME-PAYLOAD-TOO-LARGE", `Payload length ${payloadLength} exceeds max_frame_payload ${opts.max_frame_payload}`);
133
+ }
134
+ return {
135
+ frameType,
136
+ flags,
137
+ payloadLength,
138
+ tier: (flags & TIER_MASK),
139
+ isFinal: (flags & FINAL_BIT) !== 0,
140
+ isEncrypted: (flags & ENC_BIT) !== 0,
141
+ isExtended: false,
142
+ headerSize: DEFAULT_HEADER_SIZE,
143
+ };
144
+ }
145
+ // ---------------------------------------------------------------------------
146
+ // Write
147
+ // ---------------------------------------------------------------------------
148
+ /**
149
+ * Write a frame header into the buffer.
150
+ * @returns Number of bytes written (4 or 8).
151
+ * @throws {Error} if buffer is too small.
152
+ */
153
+ export function writeFrameHeader(header, buffer) {
154
+ const size = header.isExtended ? EXTENDED_HEADER_SIZE : DEFAULT_HEADER_SIZE;
155
+ if (buffer.length < size) {
156
+ throw new Error(`Destination buffer must be at least ${size} bytes, got ${buffer.length}`);
157
+ }
158
+ buffer[0] = header.frameType;
159
+ buffer[1] = header.flags;
160
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
161
+ if (header.isExtended) {
162
+ view.setUint32(2, header.payloadLength, false); // big-endian
163
+ buffer[6] = 0; // reserved
164
+ buffer[7] = 0; // reserved
165
+ }
166
+ else {
167
+ view.setUint16(2, header.payloadLength, false); // big-endian
168
+ }
169
+ return size;
170
+ }
171
+ // ---------------------------------------------------------------------------
172
+ // Helpers
173
+ // ---------------------------------------------------------------------------
174
+ /** Build a flags byte from individual options. */
175
+ export function buildFlags(options) {
176
+ let flags = (options.tier ?? EncodingTier.Json) & TIER_MASK;
177
+ if (options.final)
178
+ flags |= FINAL_BIT;
179
+ if (options.encrypted)
180
+ flags |= ENC_BIT;
181
+ if (options.extended)
182
+ flags |= EXT_BIT;
183
+ return flags;
184
+ }
185
+ //# sourceMappingURL=frame-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-header.js","sourceRoot":"","sources":["../../src/core/frame-header.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export type Protocol = "ncp" | "nwp" | "nip" | "ndp" | "nop" | "system";
2
+ export interface FrameRegistryEntry {
3
+ /** Frame type byte. */
4
+ frameType: number;
5
+ /** Human-readable name. */
6
+ name: string;
7
+ /** Protocol this frame belongs to. */
8
+ protocol: Protocol;
9
+ }
10
+ /**
11
+ * Maps frame type bytes to metadata.
12
+ * Built once at startup, then read-only.
13
+ */
14
+ export declare class FrameRegistry {
15
+ private readonly map;
16
+ constructor(entries: FrameRegistryEntry[]);
17
+ /**
18
+ * Resolve a frame type byte to its registry entry.
19
+ * @throws {NcpError} NCP-FRAME-UNKNOWN-TYPE if not registered.
20
+ */
21
+ resolve(frameType: number): FrameRegistryEntry;
22
+ /** Check if a frame type is registered. */
23
+ has(frameType: number): boolean;
24
+ /**
25
+ * Create a registry pre-populated with all NCP core frames.
26
+ * Upper-layer protocols can extend via the builder.
27
+ */
28
+ static createDefault(): FrameRegistry;
29
+ }
30
+ export declare class FrameRegistryBuilder {
31
+ private readonly entries;
32
+ add(frameType: number, name: string, protocol: Protocol): this;
33
+ build(): FrameRegistry;
34
+ }
35
+ //# sourceMappingURL=frame-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-registry.d.ts","sourceRoot":"","sources":["../../src/core/frame-registry.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAMD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkC;gBAE1C,OAAO,EAAE,kBAAkB,EAAE;IAIzC;;;OAGG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB;IAW9C,2CAA2C;IAC3C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B;;;OAGG;IACH,MAAM,CAAC,aAAa,IAAI,aAAa;CAWtC;AAMD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAK9D,KAAK,IAAI,aAAa;CAGvB"}
@@ -0,0 +1,63 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // NCP Frame Registry — Maps frame type bytes to protocol identifiers
5
+ // NPS-0 §9 Unified frame namespace
6
+ import { FrameType, NcpError } from "./frame-header.js";
7
+ // ---------------------------------------------------------------------------
8
+ // Registry
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * Maps frame type bytes to metadata.
12
+ * Built once at startup, then read-only.
13
+ */
14
+ export class FrameRegistry {
15
+ map;
16
+ constructor(entries) {
17
+ this.map = new Map(entries.map((e) => [e.frameType, e]));
18
+ }
19
+ /**
20
+ * Resolve a frame type byte to its registry entry.
21
+ * @throws {NcpError} NCP-FRAME-UNKNOWN-TYPE if not registered.
22
+ */
23
+ resolve(frameType) {
24
+ const entry = this.map.get(frameType);
25
+ if (!entry) {
26
+ throw new NcpError("NCP-FRAME-UNKNOWN-TYPE", `No entry registered for frame type 0x${frameType.toString(16).padStart(2, "0")}`);
27
+ }
28
+ return entry;
29
+ }
30
+ /** Check if a frame type is registered. */
31
+ has(frameType) {
32
+ return this.map.has(frameType);
33
+ }
34
+ /**
35
+ * Create a registry pre-populated with all NCP core frames.
36
+ * Upper-layer protocols can extend via the builder.
37
+ */
38
+ static createDefault() {
39
+ return new FrameRegistryBuilder()
40
+ .add(FrameType.Anchor, "AnchorFrame", "ncp")
41
+ .add(FrameType.Diff, "DiffFrame", "ncp")
42
+ .add(FrameType.Stream, "StreamFrame", "ncp")
43
+ .add(FrameType.Caps, "CapsFrame", "ncp")
44
+ .add(FrameType.Align, "AlignFrame", "ncp") // deprecated
45
+ .add(FrameType.Hello, "HelloFrame", "ncp")
46
+ .add(FrameType.Error, "ErrorFrame", "system")
47
+ .build();
48
+ }
49
+ }
50
+ // ---------------------------------------------------------------------------
51
+ // Builder
52
+ // ---------------------------------------------------------------------------
53
+ export class FrameRegistryBuilder {
54
+ entries = [];
55
+ add(frameType, name, protocol) {
56
+ this.entries.push({ frameType, name, protocol });
57
+ return this;
58
+ }
59
+ build() {
60
+ return new FrameRegistry(this.entries);
61
+ }
62
+ }
63
+ //# sourceMappingURL=frame-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-registry.js","sourceRoot":"","sources":["../../src/core/frame-registry.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,qEAAqE;AACrE,mCAAmC;AAEnC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAiBxD,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,OAAO,aAAa;IACP,GAAG,CAAkC;IAEtD,YAAY,OAA6B;QACvC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,SAAiB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,QAAQ,CAChB,wBAAwB,EACxB,wCAAwC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAClF,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2CAA2C;IAC3C,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa;QAClB,OAAO,IAAI,oBAAoB,EAAE;aAC9B,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC;aAC3C,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC;aACvC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC;aAC3C,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC;aACvC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,aAAa;aACvD,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC;aACzC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC;aAC5C,KAAK,EAAE,CAAC;IACb,CAAC;CACF;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,OAAO,oBAAoB;IACd,OAAO,GAAyB,EAAE,CAAC;IAEpD,GAAG,CAAC,SAAiB,EAAE,IAAY,EAAE,QAAkB;QACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,82 @@
1
+ /** Unified frame byte namespace for the full NPS suite (NPS-0 §9). */
2
+ export declare enum FrameType {
3
+ ANCHOR = 1,
4
+ DIFF = 2,
5
+ STREAM = 3,
6
+ CAPS = 4,
7
+ ALIGN = 5,// deprecated — use AlignStream (0x43)
8
+ HELLO = 6,
9
+ QUERY = 16,
10
+ ACTION = 17,
11
+ SUBSCRIBE = 18,
12
+ IDENT = 32,
13
+ TRUST = 33,
14
+ REVOKE = 34,
15
+ ANNOUNCE = 48,
16
+ RESOLVE = 49,
17
+ GRAPH = 50,
18
+ TASK = 64,
19
+ DELEGATE = 65,
20
+ SYNC = 66,
21
+ ALIGN_STREAM = 67,
22
+ ERROR = 254
23
+ }
24
+ /**
25
+ * Wire encoding tier, stored in the lower 2 bits of the flags byte (NPS-1 §3.2).
26
+ * 0x00 = Tier-1 JSON — human-readable; development / compatibility.
27
+ * 0x01 = Tier-2 MsgPack — binary, ~60 % smaller; production default.
28
+ */
29
+ export declare enum EncodingTier {
30
+ JSON = 0,
31
+ MSGPACK = 1
32
+ }
33
+ /**
34
+ * Flags byte in the NPS frame header (NPS-1 §3.2).
35
+ * Bit layout (LSB = bit 0):
36
+ * Bits 0–1 (T0,T1) : Encoding tier
37
+ * Bit 2 (FINAL) : Last chunk of a StreamFrame; non-stream frames MUST set this
38
+ * Bit 3 (ENC) : Payload encrypted
39
+ * Bits 4–6 (RSV) : Reserved — sender MUST write 0
40
+ * Bit 7 (EXT) : Extended 8-byte header
41
+ */
42
+ export declare const FrameFlags: {
43
+ readonly NONE: 0;
44
+ readonly TIER1_JSON: 0;
45
+ readonly TIER2_MSGPACK: 1;
46
+ readonly FINAL: 4;
47
+ readonly ENCRYPTED: 8;
48
+ readonly EXT: 128;
49
+ };
50
+ export declare const DEFAULT_HEADER_SIZE = 4;
51
+ export declare const EXTENDED_HEADER_SIZE = 8;
52
+ export declare const DEFAULT_MAX_PAYLOAD = 65535;
53
+ export declare const EXTENDED_MAX_PAYLOAD = 4294967295;
54
+ /**
55
+ * NPS frame header, present at the start of every wire message (NPS-1 §3.1).
56
+ *
57
+ * Default (4 bytes, EXT=0):
58
+ * Byte 0 : FrameType
59
+ * Byte 1 : Flags
60
+ * Byte 2–3 : PayloadLength (big-endian uint16)
61
+ *
62
+ * Extended (8 bytes, EXT=1):
63
+ * Byte 0 : FrameType
64
+ * Byte 1 : Flags (bit 7 = 1)
65
+ * Byte 2–3 : Reserved (must be 0)
66
+ * Byte 4–7 : PayloadLength (big-endian uint32)
67
+ */
68
+ export declare class FrameHeader {
69
+ readonly frameType: FrameType;
70
+ readonly flags: number;
71
+ readonly payloadLength: number;
72
+ constructor(frameType: FrameType, flags: number, payloadLength: number);
73
+ get isExtended(): boolean;
74
+ get headerSize(): number;
75
+ get encodingTier(): EncodingTier;
76
+ get isFinal(): boolean;
77
+ get isEncrypted(): boolean;
78
+ static parse(buf: Uint8Array): FrameHeader;
79
+ toBytes(): Uint8Array;
80
+ toString(): string;
81
+ }
82
+ //# sourceMappingURL=frames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../src/core/frames.ts"],"names":[],"mappings":"AAWA,sEAAsE;AACtE,oBAAY,SAAS;IAEnB,MAAM,IAAa;IACnB,IAAI,IAAe;IACnB,MAAM,IAAa;IACnB,IAAI,IAAe;IACnB,KAAK,IAAc,CAAE,sCAAsC;IAC3D,KAAK,IAAc;IAGnB,KAAK,KAAc;IACnB,MAAM,KAAa;IACnB,SAAS,KAAU;IAGnB,KAAK,KAAc;IACnB,KAAK,KAAc;IACnB,MAAM,KAAa;IAGnB,QAAQ,KAAW;IACnB,OAAO,KAAY;IACnB,KAAK,KAAc;IAGnB,IAAI,KAAe;IACnB,QAAQ,KAAW;IACnB,IAAI,KAAe;IACnB,YAAY,KAAO;IAGnB,KAAK,MAAc;CACpB;AAID;;;;GAIG;AACH,oBAAY,YAAY;IACtB,IAAI,IAAU;IACd,OAAO,IAAO;CACf;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAIX,eAAO,MAAM,mBAAmB,IAAK,CAAC;AACtC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,mBAAmB,QAAU,CAAC;AAC3C,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAI/C;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAW;aAEJ,SAAS,EAAE,SAAS;aACpB,KAAK,EAAE,MAAM;aACb,aAAa,EAAE,MAAM;gBAFrB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM;IAGvC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAID,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,WAAW;IAiC1C,OAAO,IAAI,UAAU;IAkBrB,QAAQ,IAAI,MAAM;CAGnB"}
@@ -0,0 +1,155 @@
1
+ // Copyright 2026 INNO LOTUS PTY LTD
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * NPS wire-level frame primitives: FrameType, FrameFlags, EncodingTier, FrameHeader.
5
+ */
6
+ import { NpsFrameError } from "./exceptions.js";
7
+ // ── FrameType ────────────────────────────────────────────────────────────────
8
+ /** Unified frame byte namespace for the full NPS suite (NPS-0 §9). */
9
+ export var FrameType;
10
+ (function (FrameType) {
11
+ // NCP 0x01–0x0F
12
+ FrameType[FrameType["ANCHOR"] = 1] = "ANCHOR";
13
+ FrameType[FrameType["DIFF"] = 2] = "DIFF";
14
+ FrameType[FrameType["STREAM"] = 3] = "STREAM";
15
+ FrameType[FrameType["CAPS"] = 4] = "CAPS";
16
+ FrameType[FrameType["ALIGN"] = 5] = "ALIGN";
17
+ FrameType[FrameType["HELLO"] = 6] = "HELLO";
18
+ // NWP 0x10–0x1F
19
+ FrameType[FrameType["QUERY"] = 16] = "QUERY";
20
+ FrameType[FrameType["ACTION"] = 17] = "ACTION";
21
+ FrameType[FrameType["SUBSCRIBE"] = 18] = "SUBSCRIBE";
22
+ // NIP 0x20–0x2F
23
+ FrameType[FrameType["IDENT"] = 32] = "IDENT";
24
+ FrameType[FrameType["TRUST"] = 33] = "TRUST";
25
+ FrameType[FrameType["REVOKE"] = 34] = "REVOKE";
26
+ // NDP 0x30–0x3F
27
+ FrameType[FrameType["ANNOUNCE"] = 48] = "ANNOUNCE";
28
+ FrameType[FrameType["RESOLVE"] = 49] = "RESOLVE";
29
+ FrameType[FrameType["GRAPH"] = 50] = "GRAPH";
30
+ // NOP 0x40–0x4F
31
+ FrameType[FrameType["TASK"] = 64] = "TASK";
32
+ FrameType[FrameType["DELEGATE"] = 65] = "DELEGATE";
33
+ FrameType[FrameType["SYNC"] = 66] = "SYNC";
34
+ FrameType[FrameType["ALIGN_STREAM"] = 67] = "ALIGN_STREAM";
35
+ // Reserved / System 0xF0–0xFF
36
+ FrameType[FrameType["ERROR"] = 254] = "ERROR";
37
+ })(FrameType || (FrameType = {}));
38
+ // ── EncodingTier ─────────────────────────────────────────────────────────────
39
+ /**
40
+ * Wire encoding tier, stored in the lower 2 bits of the flags byte (NPS-1 §3.2).
41
+ * 0x00 = Tier-1 JSON — human-readable; development / compatibility.
42
+ * 0x01 = Tier-2 MsgPack — binary, ~60 % smaller; production default.
43
+ */
44
+ export var EncodingTier;
45
+ (function (EncodingTier) {
46
+ EncodingTier[EncodingTier["JSON"] = 0] = "JSON";
47
+ EncodingTier[EncodingTier["MSGPACK"] = 1] = "MSGPACK";
48
+ })(EncodingTier || (EncodingTier = {}));
49
+ // ── FrameFlags ───────────────────────────────────────────────────────────────
50
+ /**
51
+ * Flags byte in the NPS frame header (NPS-1 §3.2).
52
+ * Bit layout (LSB = bit 0):
53
+ * Bits 0–1 (T0,T1) : Encoding tier
54
+ * Bit 2 (FINAL) : Last chunk of a StreamFrame; non-stream frames MUST set this
55
+ * Bit 3 (ENC) : Payload encrypted
56
+ * Bits 4–6 (RSV) : Reserved — sender MUST write 0
57
+ * Bit 7 (EXT) : Extended 8-byte header
58
+ */
59
+ export const FrameFlags = {
60
+ NONE: 0x00,
61
+ TIER1_JSON: 0x00,
62
+ TIER2_MSGPACK: 0x01,
63
+ FINAL: 0x04,
64
+ ENCRYPTED: 0x08,
65
+ EXT: 0x80,
66
+ };
67
+ // ── Constants ─────────────────────────────────────────────────────────────────
68
+ export const DEFAULT_HEADER_SIZE = 4;
69
+ export const EXTENDED_HEADER_SIZE = 8;
70
+ export const DEFAULT_MAX_PAYLOAD = 0xffff; // 65 535 bytes
71
+ export const EXTENDED_MAX_PAYLOAD = 0xffffffff; // 4 GiB - 1
72
+ // ── FrameHeader ──────────────────────────────────────────────────────────────
73
+ /**
74
+ * NPS frame header, present at the start of every wire message (NPS-1 §3.1).
75
+ *
76
+ * Default (4 bytes, EXT=0):
77
+ * Byte 0 : FrameType
78
+ * Byte 1 : Flags
79
+ * Byte 2–3 : PayloadLength (big-endian uint16)
80
+ *
81
+ * Extended (8 bytes, EXT=1):
82
+ * Byte 0 : FrameType
83
+ * Byte 1 : Flags (bit 7 = 1)
84
+ * Byte 2–3 : Reserved (must be 0)
85
+ * Byte 4–7 : PayloadLength (big-endian uint32)
86
+ */
87
+ export class FrameHeader {
88
+ frameType;
89
+ flags;
90
+ payloadLength;
91
+ constructor(frameType, flags, payloadLength) {
92
+ this.frameType = frameType;
93
+ this.flags = flags;
94
+ this.payloadLength = payloadLength;
95
+ }
96
+ get isExtended() {
97
+ return (this.flags & FrameFlags.EXT) !== 0;
98
+ }
99
+ get headerSize() {
100
+ return this.isExtended ? EXTENDED_HEADER_SIZE : DEFAULT_HEADER_SIZE;
101
+ }
102
+ get encodingTier() {
103
+ return (this.flags & 0x03);
104
+ }
105
+ get isFinal() {
106
+ return (this.flags & 0x04) !== 0;
107
+ }
108
+ get isEncrypted() {
109
+ return (this.flags & 0x08) !== 0;
110
+ }
111
+ // ── Parsing ───────────────────────────────────────────────────────────────
112
+ static parse(buf) {
113
+ if (buf.length < 2) {
114
+ throw new NpsFrameError(`Buffer too small to read frame type and flags: need >= 2 bytes, got ${buf.length}.`);
115
+ }
116
+ const flags = buf[1];
117
+ const ext = (flags & FrameFlags.EXT) !== 0;
118
+ if (ext) {
119
+ if (buf.length < EXTENDED_HEADER_SIZE) {
120
+ throw new NpsFrameError(`Buffer too small for extended frame header: need ${EXTENDED_HEADER_SIZE} bytes, got ${buf.length}.`);
121
+ }
122
+ const view = new DataView(buf.buffer, buf.byteOffset);
123
+ const payloadLength = view.getUint32(4, false); // big-endian
124
+ return new FrameHeader(buf[0], flags, payloadLength);
125
+ }
126
+ if (buf.length < DEFAULT_HEADER_SIZE) {
127
+ throw new NpsFrameError(`Buffer too small for frame header: need ${DEFAULT_HEADER_SIZE} bytes, got ${buf.length}.`);
128
+ }
129
+ const view = new DataView(buf.buffer, buf.byteOffset);
130
+ const payloadLength = view.getUint16(2, false); // big-endian
131
+ return new FrameHeader(buf[0], flags, payloadLength);
132
+ }
133
+ // ── Serialisation ─────────────────────────────────────────────────────────
134
+ toBytes() {
135
+ if (this.isExtended) {
136
+ const buf = new Uint8Array(EXTENDED_HEADER_SIZE);
137
+ const view = new DataView(buf.buffer);
138
+ view.setUint8(0, this.frameType);
139
+ view.setUint8(1, this.flags);
140
+ view.setUint16(2, 0, false); // reserved
141
+ view.setUint32(4, this.payloadLength, false);
142
+ return buf;
143
+ }
144
+ const buf = new Uint8Array(DEFAULT_HEADER_SIZE);
145
+ const view = new DataView(buf.buffer);
146
+ view.setUint8(0, this.frameType);
147
+ view.setUint8(1, this.flags);
148
+ view.setUint16(2, this.payloadLength, false);
149
+ return buf;
150
+ }
151
+ toString() {
152
+ return `FrameHeader(frameType=0x${this.frameType.toString(16).padStart(2, "0")}, flags=0x${this.flags.toString(16).padStart(2, "0")}, payloadLength=${this.payloadLength})`;
153
+ }
154
+ }
155
+ //# sourceMappingURL=frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/core/frames.ts"],"names":[],"mappings":"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"}