@labacacia/nps-sdk 1.0.0-alpha.3 → 1.0.0-alpha.5

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 (241) hide show
  1. package/CHANGELOG.cn.md +73 -0
  2. package/CHANGELOG.md +82 -0
  3. package/README.cn.md +17 -4
  4. package/README.md +17 -4
  5. package/dist/core/anchor-cache.js +104 -0
  6. package/dist/core/anchor-cache.js.map +1 -0
  7. package/dist/core/cache.js +80 -0
  8. package/dist/core/cache.js.map +1 -0
  9. package/dist/core/canonical-json.js +44 -0
  10. package/dist/core/canonical-json.js.map +1 -0
  11. package/dist/core/codec.js +119 -0
  12. package/dist/core/codec.js.map +1 -0
  13. package/dist/core/codecs/index.js +6 -0
  14. package/dist/core/codecs/index.js.map +1 -0
  15. package/dist/core/codecs/ncp-codec.js +93 -0
  16. package/dist/core/codecs/ncp-codec.js.map +1 -0
  17. package/dist/core/codecs/tier1-json-codec.js +28 -0
  18. package/dist/core/codecs/tier1-json-codec.js.map +1 -0
  19. package/dist/core/codecs/tier2-msgpack-codec.js +26 -0
  20. package/dist/core/codecs/tier2-msgpack-codec.js.map +1 -0
  21. package/dist/core/crypto-provider.js +10 -0
  22. package/dist/core/crypto-provider.js.map +1 -0
  23. package/dist/core/exceptions.js +52 -0
  24. package/dist/core/exceptions.js.map +1 -0
  25. package/dist/core/frame-header.js +185 -0
  26. package/dist/core/frame-header.js.map +1 -0
  27. package/dist/core/frame-registry.js +63 -0
  28. package/dist/core/frame-registry.js.map +1 -0
  29. package/dist/core/frames.js +154 -0
  30. package/dist/core/frames.js.map +1 -0
  31. package/dist/core/index.js +21 -405
  32. package/dist/core/index.js.map +1 -1
  33. package/dist/core/registry.js +17 -0
  34. package/dist/core/registry.js.map +1 -0
  35. package/dist/core/status-codes.d.ts +1 -0
  36. package/dist/core/status-codes.d.ts.map +1 -1
  37. package/dist/core/status-codes.js +39 -0
  38. package/dist/core/status-codes.js.map +1 -0
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +9 -5
  41. package/dist/index.js.map +1 -1
  42. package/dist/ncp/frames/anchor-frame.js +54 -0
  43. package/dist/ncp/frames/anchor-frame.js.map +1 -0
  44. package/dist/ncp/frames/caps-frame.js +29 -0
  45. package/dist/ncp/frames/caps-frame.js.map +1 -0
  46. package/dist/ncp/frames/diff-frame.js +37 -0
  47. package/dist/ncp/frames/diff-frame.js.map +1 -0
  48. package/dist/ncp/frames/error-frame.js +13 -0
  49. package/dist/ncp/frames/error-frame.js.map +1 -0
  50. package/dist/ncp/frames/hello-frame.js +25 -0
  51. package/dist/ncp/frames/hello-frame.js.map +1 -0
  52. package/dist/ncp/frames/stream-frame.js +18 -0
  53. package/dist/ncp/frames/stream-frame.js.map +1 -0
  54. package/dist/ncp/frames.js +192 -0
  55. package/dist/ncp/frames.js.map +1 -0
  56. package/dist/ncp/handshake.js +80 -0
  57. package/dist/ncp/handshake.js.map +1 -0
  58. package/dist/ncp/index.d.ts +1 -0
  59. package/dist/ncp/index.d.ts.map +1 -1
  60. package/dist/ncp/index.js +13 -368
  61. package/dist/ncp/index.js.map +1 -1
  62. package/dist/ncp/ncp-error-codes.d.ts +1 -0
  63. package/dist/ncp/ncp-error-codes.d.ts.map +1 -1
  64. package/dist/ncp/ncp-error-codes.js +34 -0
  65. package/dist/ncp/ncp-error-codes.js.map +1 -0
  66. package/dist/ncp/ncp-patch-format.js +13 -0
  67. package/dist/ncp/ncp-patch-format.js.map +1 -0
  68. package/dist/ncp/preamble.d.ts +47 -0
  69. package/dist/ncp/preamble.d.ts.map +1 -0
  70. package/dist/ncp/preamble.js +74 -0
  71. package/dist/ncp/preamble.js.map +1 -0
  72. package/dist/ncp/registry.js +13 -0
  73. package/dist/ncp/registry.js.map +1 -0
  74. package/dist/ncp/stream-manager.js +163 -0
  75. package/dist/ncp/stream-manager.js.map +1 -0
  76. package/dist/ndp/dns-txt.d.ts +35 -0
  77. package/dist/ndp/dns-txt.d.ts.map +1 -0
  78. package/dist/ndp/dns-txt.js +67 -0
  79. package/dist/ndp/dns-txt.js.map +1 -0
  80. package/dist/ndp/frames.js +87 -0
  81. package/dist/ndp/frames.js.map +1 -0
  82. package/dist/ndp/index.d.ts +1 -0
  83. package/dist/ndp/index.d.ts.map +1 -1
  84. package/dist/ndp/index.js +7 -223
  85. package/dist/ndp/index.js.map +1 -1
  86. package/dist/ndp/ndp-registry.d.ts +2 -0
  87. package/dist/ndp/ndp-registry.d.ts.map +1 -1
  88. package/dist/ndp/ndp-registry.js +104 -0
  89. package/dist/ndp/ndp-registry.js.map +1 -0
  90. package/dist/ndp/registry.js +10 -0
  91. package/dist/ndp/registry.js.map +1 -0
  92. package/dist/ndp/validator.js +48 -0
  93. package/dist/ndp/validator.js.map +1 -0
  94. package/dist/nip/acme/client.d.ts +31 -0
  95. package/dist/nip/acme/client.d.ts.map +1 -0
  96. package/dist/nip/acme/client.js +136 -0
  97. package/dist/nip/acme/client.js.map +1 -0
  98. package/dist/nip/acme/index.d.ts +6 -0
  99. package/dist/nip/acme/index.d.ts.map +1 -0
  100. package/dist/nip/acme/index.js +8 -0
  101. package/dist/nip/acme/index.js.map +1 -0
  102. package/dist/nip/acme/jws.d.ts +31 -0
  103. package/dist/nip/acme/jws.d.ts.map +1 -0
  104. package/dist/nip/acme/jws.js +76 -0
  105. package/dist/nip/acme/jws.js.map +1 -0
  106. package/dist/nip/acme/messages.d.ts +71 -0
  107. package/dist/nip/acme/messages.d.ts.map +1 -0
  108. package/dist/nip/acme/messages.js +4 -0
  109. package/dist/nip/acme/messages.js.map +1 -0
  110. package/dist/nip/acme/server.d.ts +41 -0
  111. package/dist/nip/acme/server.d.ts.map +1 -0
  112. package/dist/nip/acme/server.js +458 -0
  113. package/dist/nip/acme/server.js.map +1 -0
  114. package/dist/nip/acme/wire.d.ts +19 -0
  115. package/dist/nip/acme/wire.d.ts.map +1 -0
  116. package/dist/nip/acme/wire.js +21 -0
  117. package/dist/nip/acme/wire.js.map +1 -0
  118. package/dist/nip/assurance-level.d.ts +19 -0
  119. package/dist/nip/assurance-level.d.ts.map +1 -0
  120. package/dist/nip/assurance-level.js +38 -0
  121. package/dist/nip/assurance-level.js.map +1 -0
  122. package/dist/nip/cert-format.d.ts +5 -0
  123. package/dist/nip/cert-format.d.ts.map +1 -0
  124. package/dist/nip/cert-format.js +6 -0
  125. package/dist/nip/cert-format.js.map +1 -0
  126. package/dist/nip/error-codes.d.ts +25 -0
  127. package/dist/nip/error-codes.d.ts.map +1 -0
  128. package/dist/nip/error-codes.js +32 -0
  129. package/dist/nip/error-codes.js.map +1 -0
  130. package/dist/nip/frames.d.ts +10 -1
  131. package/dist/nip/frames.d.ts.map +1 -1
  132. package/dist/nip/frames.js +106 -0
  133. package/dist/nip/frames.js.map +1 -0
  134. package/dist/nip/identity.js +94 -0
  135. package/dist/nip/identity.js.map +1 -0
  136. package/dist/nip/index.d.ts +6 -0
  137. package/dist/nip/index.d.ts.map +1 -1
  138. package/dist/nip/index.js +12 -187
  139. package/dist/nip/index.js.map +1 -1
  140. package/dist/nip/registry.js +10 -0
  141. package/dist/nip/registry.js.map +1 -0
  142. package/dist/nip/verifier.d.ts +23 -0
  143. package/dist/nip/verifier.d.ts.map +1 -0
  144. package/dist/nip/verifier.js +90 -0
  145. package/dist/nip/verifier.js.map +1 -0
  146. package/dist/nip/x509/builder.d.ts +35 -0
  147. package/dist/nip/x509/builder.d.ts.map +1 -0
  148. package/dist/nip/x509/builder.js +59 -0
  149. package/dist/nip/x509/builder.js.map +1 -0
  150. package/dist/nip/x509/index.d.ts +4 -0
  151. package/dist/nip/x509/index.d.ts.map +1 -0
  152. package/dist/nip/x509/index.js +6 -0
  153. package/dist/nip/x509/index.js.map +1 -0
  154. package/dist/nip/x509/oids.d.ts +17 -0
  155. package/dist/nip/x509/oids.d.ts.map +1 -0
  156. package/dist/nip/x509/oids.js +23 -0
  157. package/dist/nip/x509/oids.js.map +1 -0
  158. package/dist/nip/x509/verifier.d.ts +26 -0
  159. package/dist/nip/x509/verifier.d.ts.map +1 -0
  160. package/dist/nip/x509/verifier.js +171 -0
  161. package/dist/nip/x509/verifier.js.map +1 -0
  162. package/dist/nop/client.js +90 -0
  163. package/dist/nop/client.js.map +1 -0
  164. package/dist/nop/frames.js +148 -0
  165. package/dist/nop/frames.js.map +1 -0
  166. package/dist/nop/index.js +6 -789
  167. package/dist/nop/index.js.map +1 -1
  168. package/dist/nop/models.js +50 -0
  169. package/dist/nop/models.js.map +1 -0
  170. package/dist/nop/nop-types.js +44 -0
  171. package/dist/nop/nop-types.js.map +1 -0
  172. package/dist/nop/registry.js +11 -0
  173. package/dist/nop/registry.js.map +1 -0
  174. package/dist/nwp/client.js +101 -0
  175. package/dist/nwp/client.js.map +1 -0
  176. package/dist/nwp/error-codes.d.ts +42 -0
  177. package/dist/nwp/error-codes.d.ts.map +1 -0
  178. package/dist/nwp/error-codes.js +53 -0
  179. package/dist/nwp/error-codes.js.map +1 -0
  180. package/dist/nwp/frames.js +81 -0
  181. package/dist/nwp/frames.js.map +1 -0
  182. package/dist/nwp/index.d.ts +1 -0
  183. package/dist/nwp/index.d.ts.map +1 -1
  184. package/dist/nwp/index.js +6 -693
  185. package/dist/nwp/index.js.map +1 -1
  186. package/dist/nwp/registry.js +9 -0
  187. package/dist/nwp/registry.js.map +1 -0
  188. package/dist/setup.js +29 -0
  189. package/dist/setup.js.map +1 -0
  190. package/doc/nps-sdk.nip.cn.md +30 -0
  191. package/doc/nps-sdk.nip.md +30 -0
  192. package/doc/nps-sdk.nwp.cn.md +71 -0
  193. package/doc/nps-sdk.nwp.md +71 -0
  194. package/package.json +2 -1
  195. package/src/core/status-codes.ts +1 -0
  196. package/src/index.ts +1 -1
  197. package/src/ncp/index.ts +1 -0
  198. package/src/ncp/ncp-error-codes.ts +2 -0
  199. package/src/ncp/preamble.ts +79 -0
  200. package/src/ndp/dns-txt.ts +86 -0
  201. package/src/ndp/index.ts +1 -0
  202. package/src/ndp/ndp-registry.ts +34 -0
  203. package/src/nip/acme/client.ts +185 -0
  204. package/src/nip/acme/index.ts +8 -0
  205. package/src/nip/acme/jws.ts +109 -0
  206. package/src/nip/acme/messages.ts +85 -0
  207. package/src/nip/acme/server.ts +480 -0
  208. package/src/nip/acme/wire.ts +24 -0
  209. package/src/nip/assurance-level.ts +40 -0
  210. package/src/nip/cert-format.ts +9 -0
  211. package/src/nip/error-codes.ts +38 -0
  212. package/src/nip/frames.ts +35 -3
  213. package/src/nip/index.ts +8 -0
  214. package/src/nip/verifier.ts +122 -0
  215. package/src/nip/x509/builder.ts +91 -0
  216. package/src/nip/x509/index.ts +6 -0
  217. package/src/nip/x509/oids.ts +28 -0
  218. package/src/nip/x509/verifier.ts +214 -0
  219. package/src/nop/client.ts +1 -1
  220. package/src/nwp/client.ts +4 -4
  221. package/src/nwp/error-codes.ts +62 -0
  222. package/src/nwp/index.ts +1 -0
  223. package/tests/_rfc0002-keys.ts +57 -0
  224. package/tests/ncp/preamble.test.ts +93 -0
  225. package/tests/ndp.test.ts +106 -0
  226. package/tests/nip-acme-agent01.test.ts +192 -0
  227. package/tests/nip-x509.test.ts +280 -0
  228. package/dist/core/index.cjs +0 -452
  229. package/dist/core/index.cjs.map +0 -1
  230. package/dist/index.cjs +0 -8
  231. package/dist/index.cjs.map +0 -1
  232. package/dist/ncp/index.cjs +0 -388
  233. package/dist/ncp/index.cjs.map +0 -1
  234. package/dist/ndp/index.cjs +0 -252
  235. package/dist/ndp/index.cjs.map +0 -1
  236. package/dist/nip/index.cjs +0 -214
  237. package/dist/nip/index.cjs.map +0 -1
  238. package/dist/nop/index.cjs +0 -823
  239. package/dist/nop/index.cjs.map +0 -1
  240. package/dist/nwp/index.cjs +0 -720
  241. package/dist/nwp/index.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/core/frames.ts"],"names":[],"mappings":"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"}
@@ -1,406 +1,22 @@
1
- import * as msgpack from '@msgpack/msgpack';
2
- import { createHash } from 'crypto';
3
- import canonicalizeImport from 'canonicalize';
4
-
5
- // src/core/exceptions.ts
6
- var NpsError = class extends Error {
7
- constructor(message) {
8
- super(message);
9
- this.name = "NpsError";
10
- }
11
- };
12
- var NpsFrameError = class extends NpsError {
13
- constructor(message) {
14
- super(message);
15
- this.name = "NpsFrameError";
16
- }
17
- };
18
- var NpsCodecError = class extends NpsError {
19
- constructor(message) {
20
- super(message);
21
- this.name = "NpsCodecError";
22
- }
23
- };
24
- var NpsAnchorNotFoundError = class extends NpsError {
25
- anchorId;
26
- constructor(anchorId, message) {
27
- super(message ?? `Anchor not found: ${anchorId}`);
28
- this.name = "NpsAnchorNotFoundError";
29
- this.anchorId = anchorId;
30
- }
31
- };
32
- var NpsAnchorPoisonError = class extends NpsError {
33
- anchorId;
34
- constructor(anchorId, message) {
35
- super(message ?? `Anchor poison detected: ${anchorId}`);
36
- this.name = "NpsAnchorPoisonError";
37
- this.anchorId = anchorId;
38
- }
39
- };
40
- var NpsStreamError = class extends NpsError {
41
- constructor(message) {
42
- super(message);
43
- this.name = "NpsStreamError";
44
- }
45
- };
46
-
47
- // src/core/frames.ts
48
- var FrameType = /* @__PURE__ */ ((FrameType3) => {
49
- FrameType3[FrameType3["ANCHOR"] = 1] = "ANCHOR";
50
- FrameType3[FrameType3["DIFF"] = 2] = "DIFF";
51
- FrameType3[FrameType3["STREAM"] = 3] = "STREAM";
52
- FrameType3[FrameType3["CAPS"] = 4] = "CAPS";
53
- FrameType3[FrameType3["ALIGN"] = 5] = "ALIGN";
54
- FrameType3[FrameType3["HELLO"] = 6] = "HELLO";
55
- FrameType3[FrameType3["QUERY"] = 16] = "QUERY";
56
- FrameType3[FrameType3["ACTION"] = 17] = "ACTION";
57
- FrameType3[FrameType3["IDENT"] = 32] = "IDENT";
58
- FrameType3[FrameType3["TRUST"] = 33] = "TRUST";
59
- FrameType3[FrameType3["REVOKE"] = 34] = "REVOKE";
60
- FrameType3[FrameType3["ANNOUNCE"] = 48] = "ANNOUNCE";
61
- FrameType3[FrameType3["RESOLVE"] = 49] = "RESOLVE";
62
- FrameType3[FrameType3["GRAPH"] = 50] = "GRAPH";
63
- FrameType3[FrameType3["TASK"] = 64] = "TASK";
64
- FrameType3[FrameType3["DELEGATE"] = 65] = "DELEGATE";
65
- FrameType3[FrameType3["SYNC"] = 66] = "SYNC";
66
- FrameType3[FrameType3["ALIGN_STREAM"] = 67] = "ALIGN_STREAM";
67
- FrameType3[FrameType3["ERROR"] = 254] = "ERROR";
68
- return FrameType3;
69
- })(FrameType || {});
70
- var EncodingTier = /* @__PURE__ */ ((EncodingTier2) => {
71
- EncodingTier2[EncodingTier2["JSON"] = 0] = "JSON";
72
- EncodingTier2[EncodingTier2["MSGPACK"] = 1] = "MSGPACK";
73
- return EncodingTier2;
74
- })(EncodingTier || {});
75
- var FrameFlags = {
76
- NONE: 0,
77
- TIER1_JSON: 0,
78
- TIER2_MSGPACK: 1,
79
- FINAL: 4,
80
- ENCRYPTED: 8,
81
- EXT: 128
82
- };
83
- var DEFAULT_HEADER_SIZE = 4;
84
- var EXTENDED_HEADER_SIZE = 8;
85
- var DEFAULT_MAX_PAYLOAD = 65535;
86
- var EXTENDED_MAX_PAYLOAD = 4294967295;
87
- var FrameHeader = class _FrameHeader {
88
- constructor(frameType, flags, payloadLength) {
89
- this.frameType = frameType;
90
- this.flags = flags;
91
- this.payloadLength = payloadLength;
92
- }
93
- frameType;
94
- flags;
95
- payloadLength;
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 & 3;
104
- }
105
- get isFinal() {
106
- return (this.flags & 4) !== 0;
107
- }
108
- get isEncrypted() {
109
- return (this.flags & 8) !== 0;
110
- }
111
- // ── Parsing ───────────────────────────────────────────────────────────────
112
- static parse(buf) {
113
- if (buf.length < 2) {
114
- throw new NpsFrameError(
115
- `Buffer too small to read frame type and flags: need >= 2 bytes, got ${buf.length}.`
116
- );
117
- }
118
- const flags = buf[1];
119
- const ext = (flags & FrameFlags.EXT) !== 0;
120
- if (ext) {
121
- if (buf.length < EXTENDED_HEADER_SIZE) {
122
- throw new NpsFrameError(
123
- `Buffer too small for extended frame header: need ${EXTENDED_HEADER_SIZE} bytes, got ${buf.length}.`
124
- );
125
- }
126
- const view2 = new DataView(buf.buffer, buf.byteOffset);
127
- const payloadLength2 = view2.getUint32(4, false);
128
- return new _FrameHeader(buf[0], flags, payloadLength2);
129
- }
130
- if (buf.length < DEFAULT_HEADER_SIZE) {
131
- throw new NpsFrameError(
132
- `Buffer too small for frame header: need ${DEFAULT_HEADER_SIZE} bytes, got ${buf.length}.`
133
- );
134
- }
135
- const view = new DataView(buf.buffer, buf.byteOffset);
136
- const payloadLength = view.getUint16(2, false);
137
- return new _FrameHeader(buf[0], flags, payloadLength);
138
- }
139
- // ── Serialisation ─────────────────────────────────────────────────────────
140
- toBytes() {
141
- if (this.isExtended) {
142
- const buf2 = new Uint8Array(EXTENDED_HEADER_SIZE);
143
- const view2 = new DataView(buf2.buffer);
144
- view2.setUint8(0, this.frameType);
145
- view2.setUint8(1, this.flags);
146
- view2.setUint16(2, 0, false);
147
- view2.setUint32(4, this.payloadLength, false);
148
- return buf2;
149
- }
150
- const buf = new Uint8Array(DEFAULT_HEADER_SIZE);
151
- const view = new DataView(buf.buffer);
152
- view.setUint8(0, this.frameType);
153
- view.setUint8(1, this.flags);
154
- view.setUint16(2, this.payloadLength, false);
155
- return buf;
156
- }
157
- toString() {
158
- return `FrameHeader(frameType=0x${this.frameType.toString(16).padStart(2, "0")}, flags=0x${this.flags.toString(16).padStart(2, "0")}, payloadLength=${this.payloadLength})`;
159
- }
160
- };
161
- var Tier1JsonCodec = class {
162
- encode(frame) {
163
- try {
164
- const json = JSON.stringify(frame.toDict());
165
- return new TextEncoder().encode(json);
166
- } catch (err) {
167
- throw new NpsCodecError(
168
- `Tier-1 JSON encode failed for 0x${frame.frameType.toString(16).padStart(2, "0")}: ${String(err)}`
169
- );
170
- }
171
- }
172
- decode(frameType, payload, registry) {
173
- const cls = registry.resolve(frameType);
174
- try {
175
- const text = new TextDecoder().decode(payload);
176
- const data = JSON.parse(text);
177
- return cls.fromDict(data);
178
- } catch (err) {
179
- throw new NpsCodecError(
180
- `Tier-1 JSON decode failed for 0x${frameType.toString(16).padStart(2, "0")}: ${String(err)}`
181
- );
182
- }
183
- }
184
- };
185
- var Tier2MsgPackCodec = class {
186
- encode(frame) {
187
- try {
188
- return msgpack.encode(frame.toDict());
189
- } catch (err) {
190
- throw new NpsCodecError(
191
- `Tier-2 MsgPack encode failed for 0x${frame.frameType.toString(16).padStart(2, "0")}: ${String(err)}`
192
- );
193
- }
194
- }
195
- decode(frameType, payload, registry) {
196
- const cls = registry.resolve(frameType);
197
- try {
198
- const data = msgpack.decode(payload);
199
- return cls.fromDict(data);
200
- } catch (err) {
201
- throw new NpsCodecError(
202
- `Tier-2 MsgPack decode failed for 0x${frameType.toString(16).padStart(2, "0")}: ${String(err)}`
203
- );
204
- }
205
- }
206
- };
207
- var NpsFrameCodec = class {
208
- _registry;
209
- _maxPayload;
210
- _json = new Tier1JsonCodec();
211
- _msgpack = new Tier2MsgPackCodec();
212
- constructor(registry, options = {}) {
213
- this._registry = registry;
214
- this._maxPayload = options.maxPayload ?? DEFAULT_MAX_PAYLOAD;
215
- }
216
- // ── Encode ────────────────────────────────────────────────────────────────
217
- encode(frame, options = {}) {
218
- const tier = options.overrideTier ?? frame.preferredTier;
219
- const tierCodec = this._selectCodec(tier);
220
- let payload;
221
- try {
222
- payload = tierCodec.encode(frame);
223
- } catch (err) {
224
- if (err instanceof NpsCodecError) throw err;
225
- throw new NpsCodecError(`Encode failed for 0x${frame.frameType.toString(16)}.`);
226
- }
227
- if (payload.length > this._maxPayload) {
228
- throw new NpsCodecError(
229
- `Encoded payload for 0x${frame.frameType.toString(16).padStart(2, "0")} exceeds max_frame_payload (${payload.length} bytes > ${this._maxPayload}). Use StreamFrame (0x03) for large payloads.`
230
- );
231
- }
232
- const useExt = payload.length > DEFAULT_MAX_PAYLOAD;
233
- let flags = this._buildFlags(frame, tier);
234
- if (useExt) flags |= FrameFlags.EXT;
235
- const header = new FrameHeader(frame.frameType, flags, payload.length);
236
- const headerBytes = header.toBytes();
237
- const wire = new Uint8Array(headerBytes.length + payload.length);
238
- wire.set(headerBytes, 0);
239
- wire.set(payload, headerBytes.length);
240
- return wire;
241
- }
242
- // ── Decode ────────────────────────────────────────────────────────────────
243
- decode(wire) {
244
- const header = FrameHeader.parse(wire);
245
- const payload = wire.slice(header.headerSize, header.headerSize + header.payloadLength);
246
- const codec = this._selectCodec(header.encodingTier);
247
- return codec.decode(header.frameType, payload, this._registry);
248
- }
249
- static peekHeader(wire) {
250
- return FrameHeader.parse(wire);
251
- }
252
- // ── Private ───────────────────────────────────────────────────────────────
253
- _buildFlags(frame, tier) {
254
- let flags = tier === 0 /* JSON */ ? FrameFlags.TIER1_JSON : FrameFlags.TIER2_MSGPACK;
255
- const isStreamFrame = "isLast" in frame;
256
- const isFinal = !isStreamFrame || frame.isLast;
257
- if (isFinal) flags |= FrameFlags.FINAL;
258
- return flags;
259
- }
260
- _selectCodec(tier) {
261
- if (tier === 0 /* JSON */) return this._json;
262
- if (tier === 1 /* MSGPACK */) return this._msgpack;
263
- throw new NpsCodecError(`Unsupported encoding tier: 0x${tier.toString(16).padStart(2, "0")}.`);
264
- }
265
- };
266
-
267
- // src/core/registry.ts
268
- var FrameRegistry = class {
269
- _map = /* @__PURE__ */ new Map();
270
- register(frameType, cls) {
271
- this._map.set(frameType, cls);
272
- }
273
- resolve(frameType) {
274
- const cls = this._map.get(frameType);
275
- if (cls === void 0) {
276
- throw new NpsFrameError(
277
- `No frame class registered for type 0x${frameType.toString(16).padStart(2, "0")}.`
278
- );
279
- }
280
- return cls;
281
- }
282
- };
283
- var AnchorFrameCache = class _AnchorFrameCache {
284
- _store = /* @__PURE__ */ new Map();
285
- // Allow clock injection for testing
286
- clock = () => Date.now();
287
- // ── Public API ────────────────────────────────────────────────────────────
288
- set(frame) {
289
- const anchorId = frame.anchorId.startsWith("sha256:") ? frame.anchorId : _AnchorFrameCache.computeAnchorId(frame.schema);
290
- const existing = this._store.get(anchorId);
291
- if (existing !== void 0 && this.clock() < existing.expiresAt) {
292
- if (!_AnchorFrameCache._schemasEqual(existing.frame.schema, frame.schema)) {
293
- throw new NpsAnchorPoisonError(anchorId);
294
- }
295
- }
296
- const ttlMs = (frame.ttl ?? 3600) * 1e3;
297
- const expiresAt = this.clock() + ttlMs;
298
- this._store.set(anchorId, { frame, expiresAt });
299
- return anchorId;
300
- }
301
- get(anchorId) {
302
- const entry = this._store.get(anchorId);
303
- if (entry === void 0) return void 0;
304
- if (this.clock() > entry.expiresAt) {
305
- this._store.delete(anchorId);
306
- return void 0;
307
- }
308
- return entry.frame;
309
- }
310
- getRequired(anchorId) {
311
- const frame = this.get(anchorId);
312
- if (frame === void 0) throw new NpsAnchorNotFoundError(anchorId);
313
- return frame;
314
- }
315
- invalidate(anchorId) {
316
- this._store.delete(anchorId);
317
- }
318
- get size() {
319
- this._evictExpired();
320
- return this._store.size;
321
- }
322
- // ── Static helpers ────────────────────────────────────────────────────────
323
- static computeAnchorId(schema) {
324
- const sorted = [...schema.fields].map((f) => {
325
- const obj = { name: f.name, type: f.type };
326
- if (f.semantic !== void 0) obj["semantic"] = f.semantic;
327
- if (f.nullable !== void 0) obj["nullable"] = f.nullable;
328
- return obj;
329
- }).sort((a, b) => String(a["name"]).localeCompare(String(b["name"])));
330
- const canonical = JSON.stringify(sorted);
331
- const digest = createHash("sha256").update(canonical, "utf8").digest("hex");
332
- return `sha256:${digest}`;
333
- }
334
- // ── Private ───────────────────────────────────────────────────────────────
335
- _evictExpired() {
336
- const now = this.clock();
337
- for (const [k, entry] of this._store) {
338
- if (now > entry.expiresAt) this._store.delete(k);
339
- }
340
- }
341
- static _schemasEqual(a, b) {
342
- return _AnchorFrameCache.computeAnchorId(a) === _AnchorFrameCache.computeAnchorId(b);
343
- }
344
- };
345
-
346
- // src/core/status-codes.ts
347
- var NpsStatusCodes = {
348
- // Success
349
- NPS_OK: "NPS-OK",
350
- NPS_OK_ACCEPTED: "NPS-OK-ACCEPTED",
351
- NPS_OK_NO_CONTENT: "NPS-OK-NO-CONTENT",
352
- // Auth
353
- NPS_AUTH_UNAUTHENTICATED: "NPS-AUTH-UNAUTHENTICATED",
354
- NPS_AUTH_FORBIDDEN: "NPS-AUTH-FORBIDDEN",
355
- // Client errors
356
- NPS_CLIENT_BAD_FRAME: "NPS-CLIENT-BAD-FRAME",
357
- NPS_CLIENT_BAD_PARAM: "NPS-CLIENT-BAD-PARAM",
358
- NPS_CLIENT_NOT_FOUND: "NPS-CLIENT-NOT-FOUND",
359
- NPS_CLIENT_CONFLICT: "NPS-CLIENT-CONFLICT",
360
- NPS_CLIENT_GONE: "NPS-CLIENT-GONE",
361
- NPS_CLIENT_UNPROCESSABLE: "NPS-CLIENT-UNPROCESSABLE",
362
- // Server errors
363
- NPS_SERVER_INTERNAL: "NPS-SERVER-INTERNAL",
364
- NPS_SERVER_UNAVAILABLE: "NPS-SERVER-UNAVAILABLE",
365
- NPS_SERVER_TIMEOUT: "NPS-SERVER-TIMEOUT",
366
- NPS_SERVER_ENCODING_UNSUPPORTED: "NPS-SERVER-ENCODING-UNSUPPORTED",
367
- // Stream
368
- NPS_STREAM_SEQ_GAP: "NPS-STREAM-SEQ-GAP",
369
- NPS_STREAM_NOT_FOUND: "NPS-STREAM-NOT-FOUND",
370
- NPS_STREAM_LIMIT: "NPS-STREAM-LIMIT",
371
- // Limit
372
- NPS_LIMIT_RATE: "NPS-LIMIT-RATE",
373
- NPS_LIMIT_BUDGET: "NPS-LIMIT-BUDGET",
374
- NPS_LIMIT_PAYLOAD: "NPS-LIMIT-PAYLOAD",
375
- NPS_LIMIT_EXCEEDED: "NPS-LIMIT-EXCEEDED",
376
- // Protocol
377
- NPS_PROTO_VERSION_INCOMPATIBLE: "NPS-PROTO-VERSION-INCOMPATIBLE"
378
- };
379
- var canonicalize = canonicalizeImport;
380
- function jcsStringify(obj) {
381
- const result = canonicalize(obj);
382
- if (result === void 0) {
383
- throw new Error("canonicalize returned undefined for input");
384
- }
385
- return result;
386
- }
387
- function sortKeysStringify(obj) {
388
- return JSON.stringify(sortKeys(obj));
389
- }
390
- function sortKeys(value) {
391
- if (Array.isArray(value)) {
392
- return value.map(sortKeys);
393
- }
394
- if (value !== null && typeof value === "object") {
395
- const sorted = {};
396
- for (const key of Object.keys(value).sort()) {
397
- sorted[key] = sortKeys(value[key]);
398
- }
399
- return sorted;
400
- }
401
- return value;
402
- }
403
-
404
- export { AnchorFrameCache, DEFAULT_HEADER_SIZE, DEFAULT_MAX_PAYLOAD, EXTENDED_HEADER_SIZE, EXTENDED_MAX_PAYLOAD, EncodingTier, FrameFlags, FrameHeader, FrameRegistry, FrameType, NpsAnchorNotFoundError, NpsAnchorPoisonError, NpsCodecError, NpsError, NpsFrameCodec, NpsFrameError, NpsStatusCodes, NpsStreamError, Tier1JsonCodec, Tier2MsgPackCodec, jcsStringify, sortKeysStringify };
405
- //# sourceMappingURL=index.js.map
1
+ // Copyright 2026 INNO LOTUS PTY LTD
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ //
4
+ // @labacacia/nps-sdk/core — public re-exports for NCP wire primitives.
5
+ //
6
+ // This module exposes the shipped OOP codec API used by NWP / NOP / NIP / NDP
7
+ // clients. The parallel functional API under ./codecs/ and ./frame-header.js
8
+ // remains importable by direct path but is not re-exported here to avoid
9
+ // symbol collisions (both files define FrameType / EncodingTier / FrameHeader).
10
+ // ── Frame primitives (OOP) ────────────────────────────────────────────────────
11
+ export { FrameType, EncodingTier, FrameFlags, FrameHeader, DEFAULT_HEADER_SIZE, EXTENDED_HEADER_SIZE, DEFAULT_MAX_PAYLOAD, EXTENDED_MAX_PAYLOAD, } from "./frames.js";
12
+ // ── Codec (OOP) ───────────────────────────────────────────────────────────────
13
+ export { Tier1JsonCodec, Tier2MsgPackCodec, NpsFrameCodec, } from "./codec.js";
14
+ // ── Registry (OOP) ────────────────────────────────────────────────────────────
15
+ export { FrameRegistry } from "./registry.js";
16
+ // ── Anchor cache (OOP) ────────────────────────────────────────────────────────
17
+ export { AnchorFrameCache } from "./cache.js";
18
+ // ── Exceptions / Status / Canonical JSON ──────────────────────────────────────
19
+ export * from "./exceptions.js";
20
+ export * from "./status-codes.js";
21
+ export { jcsStringify, sortKeysStringify } from "./canonical-json.js";
406
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/exceptions.ts","../../src/core/frames.ts","../../src/core/codec.ts","../../src/core/registry.ts","../../src/core/cache.ts","../../src/core/status-codes.ts","../../src/core/canonical-json.ts"],"names":["FrameType","EncodingTier","view","payloadLength","buf"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD\n//\n// NPS exception hierarchy — ported from nps_sdk/core/exceptions.py\n// NPS-1 §6\n\n/** Base class for all NPS SDK errors. */\nexport class NpsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NpsError\";\n }\n}\n\n/** Frame parse or structural error. */\nexport class NpsFrameError extends NpsError {\n constructor(message: string) {\n super(message);\n this.name = \"NpsFrameError\";\n }\n}\n\n/** Encode or decode error. */\nexport class NpsCodecError extends NpsError {\n constructor(message: string) {\n super(message);\n this.name = \"NpsCodecError\";\n }\n}\n\n/** Anchor cache miss — requested anchor ID not found. */\nexport class NpsAnchorNotFoundError extends NpsError {\n readonly anchorId: string;\n constructor(anchorId: string, message?: string) {\n super(message ?? `Anchor not found: ${anchorId}`);\n this.name = \"NpsAnchorNotFoundError\";\n this.anchorId = anchorId;\n }\n}\n\n/** Anchor ID collision — same ID but different schema content. */\nexport class NpsAnchorPoisonError extends NpsError {\n readonly anchorId: string;\n constructor(anchorId: string, message?: string) {\n super(message ?? `Anchor poison detected: ${anchorId}`);\n this.name = \"NpsAnchorPoisonError\";\n this.anchorId = anchorId;\n }\n}\n\n/** Stream-level error (sequence gap, unknown stream ID, etc.). */\nexport class NpsStreamError extends NpsError {\n constructor(message: string) {\n super(message);\n this.name = \"NpsStreamError\";\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS wire-level frame primitives: FrameType, FrameFlags, EncodingTier, FrameHeader.\n */\n\nimport { NpsFrameError } from \"./exceptions.js\";\n\n// ── FrameType ────────────────────────────────────────────────────────────────\n\n/** Unified frame byte namespace for the full NPS suite (NPS-0 §9). */\nexport enum FrameType {\n // NCP 0x01–0x0F\n ANCHOR = 0x01,\n DIFF = 0x02,\n STREAM = 0x03,\n CAPS = 0x04,\n ALIGN = 0x05, // deprecated — use AlignStream (0x43)\n HELLO = 0x06,\n\n // NWP 0x10–0x1F\n QUERY = 0x10,\n ACTION = 0x11,\n\n // NIP 0x20–0x2F\n IDENT = 0x20,\n TRUST = 0x21,\n REVOKE = 0x22,\n\n // NDP 0x30–0x3F\n ANNOUNCE = 0x30,\n RESOLVE = 0x31,\n GRAPH = 0x32,\n\n // NOP 0x40–0x4F\n TASK = 0x40,\n DELEGATE = 0x41,\n SYNC = 0x42,\n ALIGN_STREAM = 0x43,\n\n // Reserved / System 0xF0–0xFF\n ERROR = 0xFE,\n}\n\n// ── EncodingTier ─────────────────────────────────────────────────────────────\n\n/**\n * Wire encoding tier, stored in the lower 2 bits of the flags byte (NPS-1 §3.2).\n * 0x00 = Tier-1 JSON — human-readable; development / compatibility.\n * 0x01 = Tier-2 MsgPack — binary, ~60 % smaller; production default.\n */\nexport enum EncodingTier {\n JSON = 0x00,\n MSGPACK = 0x01,\n}\n\n// ── FrameFlags ───────────────────────────────────────────────────────────────\n\n/**\n * Flags byte in the NPS frame header (NPS-1 §3.2).\n * Bit layout (LSB = bit 0):\n * Bits 0–1 (T0,T1) : Encoding tier\n * Bit 2 (FINAL) : Last chunk of a StreamFrame; non-stream frames MUST set this\n * Bit 3 (ENC) : Payload encrypted\n * Bits 4–6 (RSV) : Reserved — sender MUST write 0\n * Bit 7 (EXT) : Extended 8-byte header\n */\nexport const FrameFlags = {\n NONE: 0x00,\n TIER1_JSON: 0x00,\n TIER2_MSGPACK: 0x01,\n FINAL: 0x04,\n ENCRYPTED: 0x08,\n EXT: 0x80,\n} as const;\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nexport const DEFAULT_HEADER_SIZE = 4;\nexport const EXTENDED_HEADER_SIZE = 8;\nexport const DEFAULT_MAX_PAYLOAD = 0xffff; // 65 535 bytes\nexport const EXTENDED_MAX_PAYLOAD = 0xffffffff; // 4 GiB - 1\n\n// ── FrameHeader ──────────────────────────────────────────────────────────────\n\n/**\n * NPS frame header, present at the start of every wire message (NPS-1 §3.1).\n *\n * Default (4 bytes, EXT=0):\n * Byte 0 : FrameType\n * Byte 1 : Flags\n * Byte 2–3 : PayloadLength (big-endian uint16)\n *\n * Extended (8 bytes, EXT=1):\n * Byte 0 : FrameType\n * Byte 1 : Flags (bit 7 = 1)\n * Byte 2–3 : Reserved (must be 0)\n * Byte 4–7 : PayloadLength (big-endian uint32)\n */\nexport class FrameHeader {\n constructor(\n public readonly frameType: FrameType,\n public readonly flags: number,\n public readonly payloadLength: number,\n ) {}\n\n get isExtended(): boolean {\n return (this.flags & FrameFlags.EXT) !== 0;\n }\n\n get headerSize(): number {\n return this.isExtended ? EXTENDED_HEADER_SIZE : DEFAULT_HEADER_SIZE;\n }\n\n get encodingTier(): EncodingTier {\n return (this.flags & 0x03) as EncodingTier;\n }\n\n get isFinal(): boolean {\n return (this.flags & 0x04) !== 0;\n }\n\n get isEncrypted(): boolean {\n return (this.flags & 0x08) !== 0;\n }\n\n // ── Parsing ───────────────────────────────────────────────────────────────\n\n static parse(buf: Uint8Array): FrameHeader {\n if (buf.length < 2) {\n throw new NpsFrameError(\n `Buffer too small to read frame type and flags: need >= 2 bytes, got ${buf.length}.`,\n );\n }\n\n const flags = buf[1]!;\n const ext = (flags & FrameFlags.EXT) !== 0;\n\n if (ext) {\n if (buf.length < EXTENDED_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for extended frame header: need ${EXTENDED_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint32(4, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n if (buf.length < DEFAULT_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for frame header: need ${DEFAULT_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint16(2, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n // ── Serialisation ─────────────────────────────────────────────────────────\n\n toBytes(): Uint8Array {\n if (this.isExtended) {\n const buf = new Uint8Array(EXTENDED_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, 0, false); // reserved\n view.setUint32(4, this.payloadLength, false);\n return buf;\n }\n const buf = new Uint8Array(DEFAULT_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, this.payloadLength, false);\n return buf;\n }\n\n toString(): string {\n return `FrameHeader(frameType=0x${this.frameType.toString(16).padStart(2, \"0\")}, flags=0x${this.flags.toString(16).padStart(2, \"0\")}, payloadLength=${this.payloadLength})`;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS frame codec: Tier-1 (JSON) and Tier-2 (MsgPack) encode/decode,\n * plus the top-level NpsFrameCodec dispatcher.\n */\n\nimport * as msgpack from \"@msgpack/msgpack\";\nimport { NpsCodecError } from \"./exceptions.js\";\nimport {\n DEFAULT_MAX_PAYLOAD,\n EncodingTier,\n FrameFlags,\n FrameHeader,\n FrameType,\n} from \"./frames.js\";\nimport type { FrameRegistry } from \"./registry.js\";\n\n// ── NpsFrame interface ────────────────────────────────────────────────────────\n\nexport interface NpsFrame {\n readonly frameType: FrameType;\n readonly preferredTier: EncodingTier;\n toDict(): Record<string, unknown>;\n}\n\n// ── Tier-1 JSON codec ─────────────────────────────────────────────────────────\n\nexport class Tier1JsonCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n const json = JSON.stringify(frame.toDict());\n return new TextEncoder().encode(json);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const text = new TextDecoder().decode(payload);\n const data = JSON.parse(text) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── Tier-2 MsgPack codec ──────────────────────────────────────────────────────\n\nexport class Tier2MsgPackCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n return msgpack.encode(frame.toDict());\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const data = msgpack.decode(payload) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── NpsFrameCodec (dispatcher) ────────────────────────────────────────────────\n\nexport class NpsFrameCodec {\n private readonly _registry: FrameRegistry;\n private readonly _maxPayload: number;\n private readonly _json = new Tier1JsonCodec();\n private readonly _msgpack = new Tier2MsgPackCodec();\n\n constructor(registry: FrameRegistry, options: { maxPayload?: number } = {}) {\n this._registry = registry;\n this._maxPayload = options.maxPayload ?? DEFAULT_MAX_PAYLOAD;\n }\n\n // ── Encode ────────────────────────────────────────────────────────────────\n\n encode(frame: NpsFrame, options: { overrideTier?: EncodingTier } = {}): Uint8Array {\n const tier = options.overrideTier ?? frame.preferredTier;\n const tierCodec = this._selectCodec(tier);\n\n let payload: Uint8Array;\n try {\n payload = tierCodec.encode(frame);\n } catch (err) {\n if (err instanceof NpsCodecError) throw err;\n throw new NpsCodecError(`Encode failed for 0x${frame.frameType.toString(16)}.`);\n }\n\n if (payload.length > this._maxPayload) {\n throw new NpsCodecError(\n `Encoded payload for 0x${frame.frameType.toString(16).padStart(2, \"0\")} exceeds max_frame_payload` +\n ` (${payload.length} bytes > ${this._maxPayload}). Use StreamFrame (0x03) for large payloads.`,\n );\n }\n\n const useExt = payload.length > DEFAULT_MAX_PAYLOAD;\n let flags = this._buildFlags(frame, tier);\n if (useExt) flags |= FrameFlags.EXT;\n\n const header = new FrameHeader(frame.frameType, flags, payload.length);\n const headerBytes = header.toBytes();\n const wire = new Uint8Array(headerBytes.length + payload.length);\n wire.set(headerBytes, 0);\n wire.set(payload, headerBytes.length);\n return wire;\n }\n\n // ── Decode ────────────────────────────────────────────────────────────────\n\n decode(wire: Uint8Array): NpsFrame {\n const header = FrameHeader.parse(wire);\n const payload = wire.slice(header.headerSize, header.headerSize + header.payloadLength);\n const codec = this._selectCodec(header.encodingTier);\n return codec.decode(header.frameType, payload, this._registry);\n }\n\n static peekHeader(wire: Uint8Array): FrameHeader {\n return FrameHeader.parse(wire);\n }\n\n // ── Private ───────────────────────────────────────────────────────────────\n\n private _buildFlags(frame: NpsFrame, tier: EncodingTier): number {\n let flags = tier === EncodingTier.JSON ? FrameFlags.TIER1_JSON : FrameFlags.TIER2_MSGPACK;\n\n const isStreamFrame = \"isLast\" in frame;\n const isFinal = !isStreamFrame || (frame as { isLast: boolean }).isLast;\n if (isFinal) flags |= FrameFlags.FINAL;\n\n return flags;\n }\n\n private _selectCodec(tier: EncodingTier): Tier1JsonCodec | Tier2MsgPackCodec {\n if (tier === EncodingTier.JSON) return this._json;\n if (tier === EncodingTier.MSGPACK) return this._msgpack;\n throw new NpsCodecError(`Unsupported encoding tier: 0x${(tier as number).toString(16).padStart(2, \"0\")}.`);\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NpsFrameError } from \"./exceptions.js\";\nimport { FrameType } from \"./frames.js\";\nimport type { NpsFrame } from \"./codec.js\";\n\nexport interface FrameClass {\n fromDict(data: Record<string, unknown>): NpsFrame;\n}\n\nexport class FrameRegistry {\n private readonly _map = new Map<FrameType, FrameClass>();\n\n register(frameType: FrameType, cls: FrameClass): void {\n this._map.set(frameType, cls);\n }\n\n resolve(frameType: FrameType): FrameClass {\n const cls = this._map.get(frameType);\n if (cls === undefined) {\n throw new NpsFrameError(\n `No frame class registered for type 0x${frameType.toString(16).padStart(2, \"0\")}.`,\n );\n }\n return cls;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * AnchorFrameCache — in-process cache for AnchorFrame instances (NPS-1 §4.1).\n */\n\nimport { createHash } from \"node:crypto\";\nimport { NpsAnchorNotFoundError, NpsAnchorPoisonError } from \"./exceptions.js\";\nimport type { AnchorFrame, FrameSchema } from \"../ncp/frames.js\";\n\nexport class AnchorFrameCache {\n private readonly _store = new Map<string, { frame: AnchorFrame; expiresAt: number }>();\n\n // Allow clock injection for testing\n clock: () => number = () => Date.now();\n\n // ── Public API ────────────────────────────────────────────────────────────\n\n set(frame: AnchorFrame): string {\n const anchorId = frame.anchorId.startsWith(\"sha256:\")\n ? frame.anchorId\n : AnchorFrameCache.computeAnchorId(frame.schema);\n\n const existing = this._store.get(anchorId);\n if (existing !== undefined && this.clock() < existing.expiresAt) {\n if (!AnchorFrameCache._schemasEqual(existing.frame.schema, frame.schema)) {\n throw new NpsAnchorPoisonError(anchorId);\n }\n // Same schema — idempotent; refresh TTL below\n }\n\n const ttlMs = (frame.ttl ?? 3600) * 1000;\n const expiresAt = this.clock() + ttlMs;\n this._store.set(anchorId, { frame, expiresAt });\n return anchorId;\n }\n\n get(anchorId: string): AnchorFrame | undefined {\n const entry = this._store.get(anchorId);\n if (entry === undefined) return undefined;\n if (this.clock() > entry.expiresAt) {\n this._store.delete(anchorId);\n return undefined;\n }\n return entry.frame;\n }\n\n getRequired(anchorId: string): AnchorFrame {\n const frame = this.get(anchorId);\n if (frame === undefined) throw new NpsAnchorNotFoundError(anchorId);\n return frame;\n }\n\n invalidate(anchorId: string): void {\n this._store.delete(anchorId);\n }\n\n get size(): number {\n this._evictExpired();\n return this._store.size;\n }\n\n // ── Static helpers ────────────────────────────────────────────────────────\n\n static computeAnchorId(schema: FrameSchema): string {\n const sorted = [...schema.fields]\n .map((f) => {\n const obj: Record<string, unknown> = { name: f.name, type: f.type };\n if (f.semantic !== undefined) obj[\"semantic\"] = f.semantic;\n if (f.nullable !== undefined) obj[\"nullable\"] = f.nullable;\n return obj;\n })\n .sort((a, b) => String(a[\"name\"]).localeCompare(String(b[\"name\"])));\n\n const canonical = JSON.stringify(sorted);\n const digest = createHash(\"sha256\").update(canonical, \"utf8\").digest(\"hex\");\n return `sha256:${digest}`;\n }\n\n // ── Private ───────────────────────────────────────────────────────────────\n\n private _evictExpired(): void {\n const now = this.clock();\n for (const [k, entry] of this._store) {\n if (now > entry.expiresAt) this._store.delete(k);\n }\n }\n\n private static _schemasEqual(a: FrameSchema, b: FrameSchema): boolean {\n return AnchorFrameCache.computeAnchorId(a) === AnchorFrameCache.computeAnchorId(b);\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD\n//\n// NPS native status codes — per spec/status-codes.md\n\n/** NPS native status code constants. */\nexport const NpsStatusCodes = {\n // Success\n NPS_OK: \"NPS-OK\",\n NPS_OK_ACCEPTED: \"NPS-OK-ACCEPTED\",\n NPS_OK_NO_CONTENT: \"NPS-OK-NO-CONTENT\",\n\n // Auth\n NPS_AUTH_UNAUTHENTICATED: \"NPS-AUTH-UNAUTHENTICATED\",\n NPS_AUTH_FORBIDDEN: \"NPS-AUTH-FORBIDDEN\",\n\n // Client errors\n NPS_CLIENT_BAD_FRAME: \"NPS-CLIENT-BAD-FRAME\",\n NPS_CLIENT_BAD_PARAM: \"NPS-CLIENT-BAD-PARAM\",\n NPS_CLIENT_NOT_FOUND: \"NPS-CLIENT-NOT-FOUND\",\n NPS_CLIENT_CONFLICT: \"NPS-CLIENT-CONFLICT\",\n NPS_CLIENT_GONE: \"NPS-CLIENT-GONE\",\n NPS_CLIENT_UNPROCESSABLE: \"NPS-CLIENT-UNPROCESSABLE\",\n\n // Server errors\n NPS_SERVER_INTERNAL: \"NPS-SERVER-INTERNAL\",\n NPS_SERVER_UNAVAILABLE: \"NPS-SERVER-UNAVAILABLE\",\n NPS_SERVER_TIMEOUT: \"NPS-SERVER-TIMEOUT\",\n NPS_SERVER_ENCODING_UNSUPPORTED: \"NPS-SERVER-ENCODING-UNSUPPORTED\",\n\n // Stream\n NPS_STREAM_SEQ_GAP: \"NPS-STREAM-SEQ-GAP\",\n NPS_STREAM_NOT_FOUND: \"NPS-STREAM-NOT-FOUND\",\n NPS_STREAM_LIMIT: \"NPS-STREAM-LIMIT\",\n\n // Limit\n NPS_LIMIT_RATE: \"NPS-LIMIT-RATE\",\n NPS_LIMIT_BUDGET: \"NPS-LIMIT-BUDGET\",\n NPS_LIMIT_PAYLOAD: \"NPS-LIMIT-PAYLOAD\",\n NPS_LIMIT_EXCEEDED: \"NPS-LIMIT-EXCEEDED\",\n\n // Protocol\n NPS_PROTO_VERSION_INCOMPATIBLE: \"NPS-PROTO-VERSION-INCOMPATIBLE\",\n} as const;\n\nexport type NpsStatusCode = (typeof NpsStatusCodes)[keyof typeof NpsStatusCodes];\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD\n//\n// Canonical JSON helpers — two distinct serialisation paths used in NPS.\n//\n// AnchorFrame uses JCS (RFC 8785) for anchor_id hashing → jcsStringify.\n// NIP signing uses Python-compatible sorted-key JSON → sortKeysStringify.\n\nimport canonicalizeImport from \"canonicalize\";\n\n// `canonicalize` is a CJS module whose default export resolves to a namespace\n// under NodeNext. Cast once to the call signature its .d.ts promises.\nconst canonicalize = canonicalizeImport as unknown as (\n input: unknown,\n) => string | undefined;\n\n/**\n * JCS (RFC 8785) canonical JSON stringify.\n * Used for AnchorFrame anchor_id computation.\n */\nexport function jcsStringify(obj: unknown): string {\n const result = canonicalize(obj);\n if (result === undefined) {\n throw new Error(\"canonicalize returned undefined for input\");\n }\n return result;\n}\n\n/**\n * Sorted-key JSON stringify — matches Python's\n * `json.dumps(obj, sort_keys=True, separators=(\",\",\":\"))`.\n * Used for NIP signing.\n */\nexport function sortKeysStringify(obj: unknown): string {\n return JSON.stringify(sortKeys(obj));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortKeys);\n }\n if (value !== null && typeof value === \"object\") {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(value as object).sort()) {\n sorted[key] = sortKeys((value as Record<string, unknown>)[key]);\n }\n return sorted;\n }\n return value;\n}\n"]}
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,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"}
@@ -15,6 +15,7 @@ export declare const NpsStatusCodes: {
15
15
  readonly NPS_SERVER_UNAVAILABLE: "NPS-SERVER-UNAVAILABLE";
16
16
  readonly NPS_SERVER_TIMEOUT: "NPS-SERVER-TIMEOUT";
17
17
  readonly NPS_SERVER_ENCODING_UNSUPPORTED: "NPS-SERVER-ENCODING-UNSUPPORTED";
18
+ readonly NPS_SERVER_UNSUPPORTED: "NPS-SERVER-UNSUPPORTED";
18
19
  readonly NPS_STREAM_SEQ_GAP: "NPS-STREAM-SEQ-GAP";
19
20
  readonly NPS_STREAM_NOT_FOUND: "NPS-STREAM-NOT-FOUND";
20
21
  readonly NPS_STREAM_LIMIT: "NPS-STREAM-LIMIT";
@@ -1 +1 @@
1
- {"version":3,"file":"status-codes.d.ts","sourceRoot":"","sources":["../../src/core/status-codes.ts"],"names":[],"mappings":"AAKA,wCAAwC;AACxC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;CAqCjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.0.0-alpha.3";
1
+ export declare const VERSION = "1.0.0-alpha.2";
2
2
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,6 +1,10 @@
1
- // src/index.ts
2
- var VERSION = "1.0.0-alpha.3";
3
-
4
- export { VERSION };
5
- //# sourceMappingURL=index.js.map
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
3
+ //
4
+ // @labacacia/nps-sdk root entry point.
5
+ // Mirrors Python root __init__.py: exports only the SDK version.
6
+ // All protocol APIs are accessed via sub-package imports:
7
+ // import { ... } from "@labacacia/nps-sdk/core"
8
+ // import { ... } from "@labacacia/nps-sdk/ncp"
9
+ export const VERSION = "1.0.0-alpha.2";
6
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AASO,IAAM,OAAA,GAAU","file":"index.js","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD\n//\n// @labacacia/nps-sdk — root entry point.\n// Mirrors Python root __init__.py: exports only the SDK version.\n// All protocol APIs are accessed via sub-package imports:\n// import { ... } from \"@labacacia/nps-sdk/core\"\n// import { ... } from \"@labacacia/nps-sdk/ncp\"\n\nexport const VERSION = \"1.0.0-alpha.3\";\n"]}
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"}