@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,11 @@
1
+ export { FrameType, EncodingTier, FrameFlags, FrameHeader, DEFAULT_HEADER_SIZE, EXTENDED_HEADER_SIZE, DEFAULT_MAX_PAYLOAD, EXTENDED_MAX_PAYLOAD, } from "./frames.js";
2
+ export { Tier1JsonCodec, Tier2MsgPackCodec, NpsFrameCodec, } from "./codec.js";
3
+ export type { NpsFrame } from "./codec.js";
4
+ export { FrameRegistry } from "./registry.js";
5
+ export type { FrameClass } from "./registry.js";
6
+ export { AnchorFrameCache } from "./cache.js";
7
+ export * from "./exceptions.js";
8
+ export * from "./status-codes.js";
9
+ export { jcsStringify, sortKeysStringify } from "./canonical-json.js";
10
+ export type { CryptoProvider } from "./crypto-provider.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -7,36 +7,16 @@
7
7
  // clients. The parallel functional API under ./codecs/ and ./frame-header.js
8
8
  // remains importable by direct path but is not re-exported here to avoid
9
9
  // symbol collisions (both files define FrameType / EncodingTier / FrameHeader).
10
-
11
10
  // ── Frame primitives (OOP) ────────────────────────────────────────────────────
12
- export {
13
- FrameType,
14
- EncodingTier,
15
- FrameFlags,
16
- FrameHeader,
17
- DEFAULT_HEADER_SIZE,
18
- EXTENDED_HEADER_SIZE,
19
- DEFAULT_MAX_PAYLOAD,
20
- EXTENDED_MAX_PAYLOAD,
21
- } from "./frames.js";
22
-
11
+ export { FrameType, EncodingTier, FrameFlags, FrameHeader, DEFAULT_HEADER_SIZE, EXTENDED_HEADER_SIZE, DEFAULT_MAX_PAYLOAD, EXTENDED_MAX_PAYLOAD, } from "./frames.js";
23
12
  // ── Codec (OOP) ───────────────────────────────────────────────────────────────
24
- export {
25
- Tier1JsonCodec,
26
- Tier2MsgPackCodec,
27
- NpsFrameCodec,
28
- } from "./codec.js";
29
- export type { NpsFrame } from "./codec.js";
30
-
13
+ export { Tier1JsonCodec, Tier2MsgPackCodec, NpsFrameCodec, } from "./codec.js";
31
14
  // ── Registry (OOP) ────────────────────────────────────────────────────────────
32
15
  export { FrameRegistry } from "./registry.js";
33
- export type { FrameClass } from "./registry.js";
34
-
35
16
  // ── Anchor cache (OOP) ────────────────────────────────────────────────────────
36
17
  export { AnchorFrameCache } from "./cache.js";
37
-
38
18
  // ── Exceptions / Status / Canonical JSON ──────────────────────────────────────
39
19
  export * from "./exceptions.js";
40
20
  export * from "./status-codes.js";
41
21
  export { jcsStringify, sortKeysStringify } from "./canonical-json.js";
42
- export type { CryptoProvider } from "./crypto-provider.js";
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AACtC,EAAE;AACF,uEAAuE;AACvE,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,yEAAyE;AACzE,gFAAgF;AAEhF,iFAAiF;AACjF,OAAO,EACL,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,iFAAiF;AACjF,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,iFAAiF;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,iFAAiF;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,iFAAiF;AACjF,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { FrameType } from "./frames.js";
2
+ import type { NpsFrame } from "./codec.js";
3
+ export interface FrameClass {
4
+ fromDict(data: Record<string, unknown>): NpsFrame;
5
+ }
6
+ export declare class FrameRegistry {
7
+ private readonly _map;
8
+ register(frameType: FrameType, cls: FrameClass): void;
9
+ resolve(frameType: FrameType): FrameClass;
10
+ }
11
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC;CACnD;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoC;IAEzD,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAIrD,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU;CAS1C"}
@@ -0,0 +1,17 @@
1
+ // Copyright 2026 INNO LOTUS PTY LTD
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { NpsFrameError } from "./exceptions.js";
4
+ export class FrameRegistry {
5
+ _map = new Map();
6
+ register(frameType, cls) {
7
+ this._map.set(frameType, cls);
8
+ }
9
+ resolve(frameType) {
10
+ const cls = this._map.get(frameType);
11
+ if (cls === undefined) {
12
+ throw new NpsFrameError(`No frame class registered for type 0x${frameType.toString(16).padStart(2, "0")}.`);
13
+ }
14
+ return cls;
15
+ }
16
+ }
17
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD,MAAM,OAAO,aAAa;IACP,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEzD,QAAQ,CAAC,SAAoB,EAAE,GAAe;QAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,SAAoB;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,aAAa,CACrB,wCAAwC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ /** NPS native status code constants. */
2
+ export declare const NpsStatusCodes: {
3
+ readonly NPS_OK: "NPS-OK";
4
+ readonly NPS_OK_ACCEPTED: "NPS-OK-ACCEPTED";
5
+ readonly NPS_OK_NO_CONTENT: "NPS-OK-NO-CONTENT";
6
+ readonly NPS_AUTH_UNAUTHENTICATED: "NPS-AUTH-UNAUTHENTICATED";
7
+ readonly NPS_AUTH_FORBIDDEN: "NPS-AUTH-FORBIDDEN";
8
+ readonly NPS_CLIENT_BAD_FRAME: "NPS-CLIENT-BAD-FRAME";
9
+ readonly NPS_CLIENT_BAD_PARAM: "NPS-CLIENT-BAD-PARAM";
10
+ readonly NPS_CLIENT_NOT_FOUND: "NPS-CLIENT-NOT-FOUND";
11
+ readonly NPS_CLIENT_CONFLICT: "NPS-CLIENT-CONFLICT";
12
+ readonly NPS_CLIENT_GONE: "NPS-CLIENT-GONE";
13
+ readonly NPS_CLIENT_UNPROCESSABLE: "NPS-CLIENT-UNPROCESSABLE";
14
+ readonly NPS_SERVER_INTERNAL: "NPS-SERVER-INTERNAL";
15
+ readonly NPS_SERVER_UNAVAILABLE: "NPS-SERVER-UNAVAILABLE";
16
+ readonly NPS_SERVER_TIMEOUT: "NPS-SERVER-TIMEOUT";
17
+ readonly NPS_SERVER_ENCODING_UNSUPPORTED: "NPS-SERVER-ENCODING-UNSUPPORTED";
18
+ readonly NPS_SERVER_UNSUPPORTED: "NPS-SERVER-UNSUPPORTED";
19
+ readonly NPS_STREAM_SEQ_GAP: "NPS-STREAM-SEQ-GAP";
20
+ readonly NPS_STREAM_NOT_FOUND: "NPS-STREAM-NOT-FOUND";
21
+ readonly NPS_STREAM_LIMIT: "NPS-STREAM-LIMIT";
22
+ readonly NPS_LIMIT_RATE: "NPS-LIMIT-RATE";
23
+ readonly NPS_LIMIT_BUDGET: "NPS-LIMIT-BUDGET";
24
+ readonly NPS_LIMIT_PAYLOAD: "NPS-LIMIT-PAYLOAD";
25
+ readonly NPS_LIMIT_EXCEEDED: "NPS-LIMIT-EXCEEDED";
26
+ readonly NPS_PROTO_VERSION_INCOMPATIBLE: "NPS-PROTO-VERSION-INCOMPATIBLE";
27
+ };
28
+ export type NpsStatusCode = (typeof NpsStatusCodes)[keyof typeof NpsStatusCodes];
29
+ //# sourceMappingURL=status-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-codes.d.ts","sourceRoot":"","sources":["../../src/core/status-codes.ts"],"names":[],"mappings":"AAKA,wCAAwC;AACxC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAsCjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // NPS native status codes — per spec/status-codes.md
5
+ /** NPS native status code constants. */
6
+ export const NpsStatusCodes = {
7
+ // Success
8
+ NPS_OK: "NPS-OK",
9
+ NPS_OK_ACCEPTED: "NPS-OK-ACCEPTED",
10
+ NPS_OK_NO_CONTENT: "NPS-OK-NO-CONTENT",
11
+ // Auth
12
+ NPS_AUTH_UNAUTHENTICATED: "NPS-AUTH-UNAUTHENTICATED",
13
+ NPS_AUTH_FORBIDDEN: "NPS-AUTH-FORBIDDEN",
14
+ // Client errors
15
+ NPS_CLIENT_BAD_FRAME: "NPS-CLIENT-BAD-FRAME",
16
+ NPS_CLIENT_BAD_PARAM: "NPS-CLIENT-BAD-PARAM",
17
+ NPS_CLIENT_NOT_FOUND: "NPS-CLIENT-NOT-FOUND",
18
+ NPS_CLIENT_CONFLICT: "NPS-CLIENT-CONFLICT",
19
+ NPS_CLIENT_GONE: "NPS-CLIENT-GONE",
20
+ NPS_CLIENT_UNPROCESSABLE: "NPS-CLIENT-UNPROCESSABLE",
21
+ // Server errors
22
+ NPS_SERVER_INTERNAL: "NPS-SERVER-INTERNAL",
23
+ NPS_SERVER_UNAVAILABLE: "NPS-SERVER-UNAVAILABLE",
24
+ NPS_SERVER_TIMEOUT: "NPS-SERVER-TIMEOUT",
25
+ NPS_SERVER_ENCODING_UNSUPPORTED: "NPS-SERVER-ENCODING-UNSUPPORTED",
26
+ NPS_SERVER_UNSUPPORTED: "NPS-SERVER-UNSUPPORTED",
27
+ // Stream
28
+ NPS_STREAM_SEQ_GAP: "NPS-STREAM-SEQ-GAP",
29
+ NPS_STREAM_NOT_FOUND: "NPS-STREAM-NOT-FOUND",
30
+ NPS_STREAM_LIMIT: "NPS-STREAM-LIMIT",
31
+ // Limit
32
+ NPS_LIMIT_RATE: "NPS-LIMIT-RATE",
33
+ NPS_LIMIT_BUDGET: "NPS-LIMIT-BUDGET",
34
+ NPS_LIMIT_PAYLOAD: "NPS-LIMIT-PAYLOAD",
35
+ NPS_LIMIT_EXCEEDED: "NPS-LIMIT-EXCEEDED",
36
+ // Protocol
37
+ NPS_PROTO_VERSION_INCOMPATIBLE: "NPS-PROTO-VERSION-INCOMPATIBLE",
38
+ };
39
+ //# sourceMappingURL=status-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-codes.js","sourceRoot":"","sources":["../../src/core/status-codes.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,qDAAqD;AAErD,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU;IACV,MAAM,EAAE,QAAQ;IAChB,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IAEtC,OAAO;IACP,wBAAwB,EAAE,0BAA0B;IACpD,kBAAkB,EAAE,oBAAoB;IAExC,gBAAgB;IAChB,oBAAoB,EAAE,sBAAsB;IAC5C,oBAAoB,EAAE,sBAAsB;IAC5C,oBAAoB,EAAE,sBAAsB;IAC5C,mBAAmB,EAAE,qBAAqB;IAC1C,eAAe,EAAE,iBAAiB;IAClC,wBAAwB,EAAE,0BAA0B;IAEpD,gBAAgB;IAChB,mBAAmB,EAAE,qBAAqB;IAC1C,sBAAsB,EAAE,wBAAwB;IAChD,kBAAkB,EAAE,oBAAoB;IACxC,+BAA+B,EAAE,iCAAiC;IAClE,sBAAsB,EAAE,wBAAwB;IAEhD,SAAS;IACT,kBAAkB,EAAE,oBAAoB;IACxC,oBAAoB,EAAE,sBAAsB;IAC5C,gBAAgB,EAAE,kBAAkB;IAEpC,QAAQ;IACR,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,iBAAiB,EAAE,mBAAmB;IACtC,kBAAkB,EAAE,oBAAoB;IAExC,WAAW;IACX,8BAA8B,EAAE,gCAAgC;CACxD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION = "1.0.0-alpha.2";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,OAAO,kBAAkB,CAAC"}
@@ -6,5 +6,5 @@
6
6
  // All protocol APIs are accessed via sub-package imports:
7
7
  // import { ... } from "@labacacia/nps-sdk/core"
8
8
  // import { ... } from "@labacacia/nps-sdk/ncp"
9
-
10
9
  export const VERSION = "1.0.0-alpha.2";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,yCAAyC;AACzC,iEAAiE;AACjE,0DAA0D;AAC1D,kDAAkD;AAClD,iDAAiD;AAEjD,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAC"}
@@ -0,0 +1,29 @@
1
+ declare const VALID_FIELD_TYPES: readonly ["string", "uint64", "int64", "decimal", "bool", "timestamp", "bytes", "object", "array"];
2
+ export type SchemaFieldType = (typeof VALID_FIELD_TYPES)[number];
3
+ export interface SchemaField {
4
+ name: string;
5
+ type: string;
6
+ semantic?: string;
7
+ nullable?: boolean;
8
+ }
9
+ export interface FrameSchema {
10
+ fields: SchemaField[];
11
+ }
12
+ export interface AnchorFrame {
13
+ frame: string;
14
+ anchor_id: string;
15
+ schema: FrameSchema;
16
+ ttl?: number;
17
+ }
18
+ /**
19
+ * Compute anchor_id from schema using RFC 8785 JCS canonicalization + SHA-256.
20
+ * Format: "sha256:{64 lowercase hex chars}"
21
+ */
22
+ export declare function computeAnchorId(schema: FrameSchema): string;
23
+ /**
24
+ * Validate an AnchorFrame.
25
+ * @throws {NcpError} NCP-ANCHOR-SCHEMA-INVALID if anchor_id doesn't match or schema is invalid.
26
+ */
27
+ export declare function validateAnchorFrame(frame: AnchorFrame): void;
28
+ export {};
29
+ //# sourceMappingURL=anchor-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/anchor-frame.ts"],"names":[],"mappings":"AAgBA,QAAA,MAAM,iBAAiB,oGAGb,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAO3D;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAoB5D"}
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // AnchorFrame (0x01) — Schema anchor for global reference
5
+ // NPS-1 §4.1
6
+ import { createHash } from "node:crypto";
7
+ // canonicalize ships CJS with TS `export default` — NodeNext resolves as namespace
8
+ import canonicalizeDefault from "canonicalize";
9
+ const canonicalize = canonicalizeDefault;
10
+ import { NcpError } from "../../core/frame-header.js";
11
+ // ---------------------------------------------------------------------------
12
+ // Types
13
+ // ---------------------------------------------------------------------------
14
+ const VALID_FIELD_TYPES = [
15
+ "string", "uint64", "int64", "decimal", "bool",
16
+ "timestamp", "bytes", "object", "array",
17
+ ];
18
+ // ---------------------------------------------------------------------------
19
+ // anchor_id computation (RFC 8785 JCS + SHA-256)
20
+ // ---------------------------------------------------------------------------
21
+ /**
22
+ * Compute anchor_id from schema using RFC 8785 JCS canonicalization + SHA-256.
23
+ * Format: "sha256:{64 lowercase hex chars}"
24
+ */
25
+ export function computeAnchorId(schema) {
26
+ const canonical = canonicalize(schema);
27
+ if (!canonical) {
28
+ throw new NcpError("NCP-ANCHOR-SCHEMA-INVALID", "Schema cannot be canonicalized");
29
+ }
30
+ const hash = createHash("sha256").update(canonical).digest("hex");
31
+ return `sha256:${hash}`;
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Validation
35
+ // ---------------------------------------------------------------------------
36
+ /**
37
+ * Validate an AnchorFrame.
38
+ * @throws {NcpError} NCP-ANCHOR-SCHEMA-INVALID if anchor_id doesn't match or schema is invalid.
39
+ */
40
+ export function validateAnchorFrame(frame) {
41
+ // Validate schema field types
42
+ for (const field of frame.schema.fields) {
43
+ if (!VALID_FIELD_TYPES.includes(field.type)) {
44
+ throw new NcpError("NCP-ANCHOR-SCHEMA-INVALID", `Unsupported field type "${field.type}" for field "${field.name}". ` +
45
+ `Valid types: ${VALID_FIELD_TYPES.join(", ")}`);
46
+ }
47
+ }
48
+ // Validate anchor_id matches computed hash
49
+ const expected = computeAnchorId(frame.schema);
50
+ if (frame.anchor_id !== expected) {
51
+ throw new NcpError("NCP-ANCHOR-SCHEMA-INVALID", `anchor_id mismatch: expected ${expected}, got ${frame.anchor_id}`);
52
+ }
53
+ }
54
+ //# sourceMappingURL=anchor-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor-frame.js","sourceRoot":"","sources":["../../../src/ncp/frames/anchor-frame.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,0DAA0D;AAC1D,aAAa;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,mFAAmF;AACnF,OAAO,mBAAmB,MAAM,cAAc,CAAC;AAC/C,MAAM,YAAY,GAAG,mBAAwE,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM;IAC9C,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;CAC/B,CAAC;AAsBX,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,gCAAgC,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,OAAO,UAAU,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACpD,8BAA8B;IAC9B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAuB,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,QAAQ,CAChB,2BAA2B,EAC3B,2BAA2B,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,IAAI,KAAK;gBAClE,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,QAAQ,CAChB,2BAA2B,EAC3B,gCAAgC,QAAQ,SAAS,KAAK,CAAC,SAAS,EAAE,CACnE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type FrameSchema } from "./anchor-frame.js";
2
+ export interface CapsFrameInlineAnchor {
3
+ anchor_id: string;
4
+ schema: FrameSchema;
5
+ ttl?: number;
6
+ }
7
+ export interface CapsFrame {
8
+ frame: string;
9
+ anchor_ref: string;
10
+ count: number;
11
+ data: unknown[];
12
+ next_cursor?: string | null;
13
+ token_est?: number;
14
+ tokenizer_used?: string;
15
+ cached?: boolean;
16
+ inline_anchor?: CapsFrameInlineAnchor;
17
+ }
18
+ /**
19
+ * Validate a CapsFrame.
20
+ *
21
+ * Checks:
22
+ * - count matches data.length (NPS-CLIENT-BAD-FRAME)
23
+ * - if inline_anchor present, recomputes anchor_id and validates match (NCP-ANCHOR-SCHEMA-INVALID)
24
+ *
25
+ * @throws {NcpError} NPS-CLIENT-BAD-FRAME if count doesn't match data length.
26
+ * @throws {NcpError} NCP-ANCHOR-SCHEMA-INVALID if inline_anchor.anchor_id doesn't match schema.
27
+ */
28
+ export declare function validateCapsFrame(frame: CapsFrame): void;
29
+ //# sourceMappingURL=caps-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caps-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/caps-frame.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAiBxD"}
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // CapsFrame (0x04) — Capsule response envelope
5
+ // NPS-1 §4.4
6
+ import { NcpError } from "../../core/frame-header.js";
7
+ import { computeAnchorId, } from "./anchor-frame.js";
8
+ /**
9
+ * Validate a CapsFrame.
10
+ *
11
+ * Checks:
12
+ * - count matches data.length (NPS-CLIENT-BAD-FRAME)
13
+ * - if inline_anchor present, recomputes anchor_id and validates match (NCP-ANCHOR-SCHEMA-INVALID)
14
+ *
15
+ * @throws {NcpError} NPS-CLIENT-BAD-FRAME if count doesn't match data length.
16
+ * @throws {NcpError} NCP-ANCHOR-SCHEMA-INVALID if inline_anchor.anchor_id doesn't match schema.
17
+ */
18
+ export function validateCapsFrame(frame) {
19
+ if (frame.count !== frame.data.length) {
20
+ throw new NcpError("NPS-CLIENT-BAD-FRAME", `CapsFrame count mismatch: count=${frame.count}, data.length=${frame.data.length}`);
21
+ }
22
+ if (frame.inline_anchor !== undefined) {
23
+ const computed = computeAnchorId(frame.inline_anchor.schema);
24
+ if (frame.inline_anchor.anchor_id !== computed) {
25
+ throw new NcpError("NCP-ANCHOR-SCHEMA-INVALID", `inline_anchor anchor_id mismatch: expected ${computed}, got ${frame.inline_anchor.anchor_id}`);
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=caps-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caps-frame.js","sourceRoot":"","sources":["../../../src/ncp/frames/caps-frame.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,+CAA+C;AAC/C,aAAa;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EACL,eAAe,GAGhB,MAAM,mBAAmB,CAAC;AAoB3B;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,mCAAmC,KAAK,CAAC,KAAK,iBAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CACnF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,IAAI,QAAQ,CAChB,2BAA2B,EAC3B,8CAA8C,QAAQ,SAAS,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,CAC/F,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { EncodingTier } from "../../core/frame-header.js";
2
+ import { type PatchFormat } from "../ncp-patch-format.js";
3
+ export interface JsonPatchOperation {
4
+ op: "add" | "remove" | "replace" | "move" | "copy" | "test";
5
+ path: string;
6
+ value?: unknown;
7
+ from?: string;
8
+ }
9
+ export interface DiffFrame {
10
+ frame: string;
11
+ anchor_ref: string;
12
+ base_seq: number;
13
+ patch_format?: PatchFormat;
14
+ patch: JsonPatchOperation[] | Uint8Array;
15
+ entity_id?: string;
16
+ }
17
+ /**
18
+ * Validate DiffFrame base_seq against current sequence.
19
+ * @throws {NcpError} NCP-STREAM-SEQ-GAP if sequences don't match.
20
+ */
21
+ export declare function validateDiffSeq(frame: DiffFrame, currentSeq: number): void;
22
+ /**
23
+ * Validate DiffFrame patch_format against the encoding tier.
24
+ *
25
+ * binary_bitset is only supported on Tier-2 (MsgPack) frames.
26
+ * Unknown patch_format values are also rejected.
27
+ *
28
+ * @throws {NcpError} NCP-DIFF-FORMAT-UNSUPPORTED if binary_bitset on non-Tier-2,
29
+ * or if patch_format is an unknown value.
30
+ */
31
+ export declare function validateDiffFrame(frame: DiffFrame, encodingTier: EncodingTier | number): void;
32
+ //# sourceMappingURL=diff-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/diff-frame.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE9E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,KAAK,EAAE,kBAAkB,EAAE,GAAG,UAAU,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAO1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,YAAY,GAAG,MAAM,GAClC,IAAI,CAkBN"}
@@ -0,0 +1,37 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // DiffFrame (0x02) — Incremental data patch
5
+ // NPS-1 §4.2
6
+ import { NcpError, EncodingTier } from "../../core/frame-header.js";
7
+ import { isValidPatchFormat } from "../ncp-patch-format.js";
8
+ /**
9
+ * Validate DiffFrame base_seq against current sequence.
10
+ * @throws {NcpError} NCP-STREAM-SEQ-GAP if sequences don't match.
11
+ */
12
+ export function validateDiffSeq(frame, currentSeq) {
13
+ if (frame.base_seq !== currentSeq) {
14
+ throw new NcpError("NCP-STREAM-SEQ-GAP", `DiffFrame base_seq=${frame.base_seq} does not match current seq=${currentSeq}`);
15
+ }
16
+ }
17
+ /**
18
+ * Validate DiffFrame patch_format against the encoding tier.
19
+ *
20
+ * binary_bitset is only supported on Tier-2 (MsgPack) frames.
21
+ * Unknown patch_format values are also rejected.
22
+ *
23
+ * @throws {NcpError} NCP-DIFF-FORMAT-UNSUPPORTED if binary_bitset on non-Tier-2,
24
+ * or if patch_format is an unknown value.
25
+ */
26
+ export function validateDiffFrame(frame, encodingTier) {
27
+ const fmt = frame.patch_format;
28
+ // Unknown patch_format
29
+ if (fmt !== undefined && !isValidPatchFormat(fmt)) {
30
+ throw new NcpError("NCP-DIFF-FORMAT-UNSUPPORTED", `Unknown patch_format "${String(fmt)}"`);
31
+ }
32
+ // binary_bitset requires Tier-2 MsgPack
33
+ if (fmt === "binary_bitset" && encodingTier !== EncodingTier.MsgPack) {
34
+ throw new NcpError("NCP-DIFF-FORMAT-UNSUPPORTED", "patch_format=binary_bitset requires Tier-2 MsgPack encoding");
35
+ }
36
+ }
37
+ //# sourceMappingURL=diff-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-frame.js","sourceRoot":"","sources":["../../../src/ncp/frames/diff-frame.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,4CAA4C;AAC5C,aAAa;AAEb,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAoB,MAAM,wBAAwB,CAAC;AAkB9E;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAgB,EAAE,UAAkB;IAClE,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,QAAQ,CAChB,oBAAoB,EACpB,sBAAsB,KAAK,CAAC,QAAQ,+BAA+B,UAAU,EAAE,CAChF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAgB,EAChB,YAAmC;IAEnC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC;IAE/B,uBAAuB;IACvB,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,QAAQ,CAChB,6BAA6B,EAC7B,yBAAyB,MAAM,CAAC,GAAG,CAAC,GAAG,CACxC,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,IAAI,GAAG,KAAK,eAAe,IAAI,YAAY,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;QACrE,MAAM,IAAI,QAAQ,CAChB,6BAA6B,EAC7B,6DAA6D,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Unified error frame shared across all NPS protocol layers. */
2
+ export interface ErrorFrame {
3
+ /** Fixed value "0xFE". */
4
+ frame: string;
5
+ /** NPS status code, e.g. "NPS-CLIENT-NOT-FOUND". */
6
+ status: string;
7
+ /** Protocol-level error code, e.g. "NCP-ANCHOR-NOT-FOUND". */
8
+ error: string;
9
+ /** Human-readable error description. */
10
+ message?: string;
11
+ /** Structured error details (e.g. anchor_ref, stream_id). */
12
+ details?: Record<string, unknown>;
13
+ }
14
+ /** Type guard for ErrorFrame. */
15
+ export declare function isErrorFrame(obj: unknown): obj is ErrorFrame;
16
+ //# sourceMappingURL=error-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/error-frame.ts"],"names":[],"mappings":"AAMA,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAI5D"}
@@ -0,0 +1,13 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // ErrorFrame (0xFE) — Unified error frame for all NPS protocol layers
5
+ // NPS-1 §4.7
6
+ /** Type guard for ErrorFrame. */
7
+ export function isErrorFrame(obj) {
8
+ if (typeof obj !== "object" || obj === null)
9
+ return false;
10
+ const o = obj;
11
+ return o.frame === "0xFE" && typeof o.status === "string" && typeof o.error === "string";
12
+ }
13
+ //# sourceMappingURL=error-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-frame.js","sourceRoot":"","sources":["../../../src/ncp/frames/error-frame.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,sEAAsE;AACtE,aAAa;AAgBb,iCAAiC;AACjC,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface HelloFrame {
2
+ frame: string;
3
+ nps_version: string;
4
+ min_version?: string;
5
+ supported_encodings: string[];
6
+ supported_protocols: string[];
7
+ agent_id?: string;
8
+ max_frame_payload?: number;
9
+ ext_support?: boolean;
10
+ max_concurrent_streams?: number;
11
+ e2e_enc_algorithms?: string[];
12
+ }
13
+ /**
14
+ * Validate a HelloFrame.
15
+ *
16
+ * Required fields: nps_version, supported_encodings (non-empty), supported_protocols (non-empty).
17
+ *
18
+ * @throws {NcpError} NPS-CLIENT-BAD-FRAME if any required field is missing or empty.
19
+ */
20
+ export declare function validateHelloFrame(frame: HelloFrame): void;
21
+ //# sourceMappingURL=hello-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hello-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/hello-frame.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAqB1D"}
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // HelloFrame (0x06) — Native-mode client handshake
5
+ // NPS-1 §4.6
6
+ import { NcpError } from "../../core/frame-header.js";
7
+ /**
8
+ * Validate a HelloFrame.
9
+ *
10
+ * Required fields: nps_version, supported_encodings (non-empty), supported_protocols (non-empty).
11
+ *
12
+ * @throws {NcpError} NPS-CLIENT-BAD-FRAME if any required field is missing or empty.
13
+ */
14
+ export function validateHelloFrame(frame) {
15
+ if (!frame.nps_version) {
16
+ throw new NcpError("NPS-CLIENT-BAD-FRAME", "HelloFrame missing required field: nps_version");
17
+ }
18
+ if (!frame.supported_encodings || frame.supported_encodings.length === 0) {
19
+ throw new NcpError("NPS-CLIENT-BAD-FRAME", "HelloFrame missing required field: supported_encodings (must be non-empty)");
20
+ }
21
+ if (!frame.supported_protocols || frame.supported_protocols.length === 0) {
22
+ throw new NcpError("NPS-CLIENT-BAD-FRAME", "HelloFrame missing required field: supported_protocols (must be non-empty)");
23
+ }
24
+ }
25
+ //# sourceMappingURL=hello-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hello-frame.js","sourceRoot":"","sources":["../../../src/ncp/frames/hello-frame.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,mDAAmD;AACnD,aAAa;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAetD;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,gDAAgD,CACjD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,4EAA4E,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface StreamFrame {
2
+ frame: string;
3
+ stream_id: string;
4
+ seq: number;
5
+ is_last: boolean;
6
+ anchor_ref?: string;
7
+ data: unknown[];
8
+ window_size?: number;
9
+ error_code?: string;
10
+ }
11
+ /**
12
+ * Validate stream_id is a valid UUID v4.
13
+ * @throws {NcpError} NPS-CLIENT-BAD-FRAME if stream_id is not a valid UUID v4.
14
+ */
15
+ export declare function validateStreamFrame(frame: StreamFrame): void;
16
+ //# sourceMappingURL=stream-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/stream-frame.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAO5D"}
@@ -0,0 +1,18 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // StreamFrame (0x03) — Streaming data chunks with flow control
5
+ // NPS-1 §4.3
6
+ import { NcpError } from "../../core/frame-header.js";
7
+ // UUID v4 format: xxxxxxxx-xxxx-4xxx-[89ab]xxx-xxxxxxxxxxxx
8
+ const UUID_V4_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
9
+ /**
10
+ * Validate stream_id is a valid UUID v4.
11
+ * @throws {NcpError} NPS-CLIENT-BAD-FRAME if stream_id is not a valid UUID v4.
12
+ */
13
+ export function validateStreamFrame(frame) {
14
+ if (!UUID_V4_RE.test(frame.stream_id)) {
15
+ throw new NcpError("NPS-CLIENT-BAD-FRAME", `stream_id "${frame.stream_id}" is not a valid UUID v4`);
16
+ }
17
+ }
18
+ //# sourceMappingURL=stream-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-frame.js","sourceRoot":"","sources":["../../../src/ncp/frames/stream-frame.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,+DAA+D;AAC/D,aAAa;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAatD,4DAA4D;AAC5D,MAAM,UAAU,GACd,wEAAwE,CAAC;AAE3E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,cAAc,KAAK,CAAC,SAAS,0BAA0B,CACxD,CAAC;IACJ,CAAC;AACH,CAAC"}