@labacacia/nps-sdk 1.0.0-alpha.1 → 1.0.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.cn.md +181 -0
- package/CHANGELOG.md +234 -0
- package/LICENSE +0 -0
- package/NOTICE +0 -0
- package/README.cn.md +163 -0
- package/README.md +16 -6
- package/dist/core/anchor-cache.d.ts +0 -0
- package/dist/core/anchor-cache.d.ts.map +0 -0
- package/dist/core/anchor-cache.js +0 -0
- package/dist/core/anchor-cache.js.map +0 -0
- package/dist/core/cache.d.ts +0 -0
- package/dist/core/cache.d.ts.map +0 -0
- package/dist/core/cache.js +0 -0
- package/dist/core/cache.js.map +0 -0
- package/dist/core/canonical-json.d.ts +0 -0
- package/dist/core/canonical-json.d.ts.map +0 -0
- package/dist/core/canonical-json.js +0 -0
- package/dist/core/canonical-json.js.map +0 -0
- package/dist/core/codec.d.ts +0 -0
- package/dist/core/codec.d.ts.map +0 -0
- package/dist/core/codec.js +0 -0
- package/dist/core/codec.js.map +0 -0
- package/dist/core/codecs/index.d.ts +0 -0
- package/dist/core/codecs/index.d.ts.map +0 -0
- package/dist/core/codecs/index.js +0 -0
- package/dist/core/codecs/index.js.map +0 -0
- package/dist/core/codecs/ncp-codec.d.ts +0 -0
- package/dist/core/codecs/ncp-codec.d.ts.map +0 -0
- package/dist/core/codecs/ncp-codec.js +0 -0
- package/dist/core/codecs/ncp-codec.js.map +0 -0
- package/dist/core/codecs/tier1-json-codec.d.ts +0 -0
- package/dist/core/codecs/tier1-json-codec.d.ts.map +0 -0
- package/dist/core/codecs/tier1-json-codec.js +0 -0
- package/dist/core/codecs/tier1-json-codec.js.map +0 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts +0 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts.map +0 -0
- package/dist/core/codecs/tier2-msgpack-codec.js +0 -0
- package/dist/core/codecs/tier2-msgpack-codec.js.map +0 -0
- package/dist/core/crypto-provider.d.ts +0 -0
- package/dist/core/crypto-provider.d.ts.map +0 -0
- package/dist/core/crypto-provider.js +0 -0
- package/dist/core/crypto-provider.js.map +0 -0
- package/dist/core/exceptions.d.ts +0 -0
- package/dist/core/exceptions.d.ts.map +0 -0
- package/dist/core/exceptions.js +0 -0
- package/dist/core/exceptions.js.map +0 -0
- package/dist/core/frame-header.d.ts +1 -0
- package/dist/core/frame-header.d.ts.map +1 -1
- package/dist/core/frame-header.js +1 -0
- package/dist/core/frame-header.js.map +1 -1
- package/dist/core/frame-registry.d.ts +0 -0
- package/dist/core/frame-registry.d.ts.map +1 -1
- package/dist/core/frame-registry.js +1 -0
- package/dist/core/frame-registry.js.map +1 -1
- package/dist/core/frames.d.ts +3 -0
- package/dist/core/frames.d.ts.map +1 -1
- package/dist/core/frames.js +3 -0
- package/dist/core/frames.js.map +1 -1
- package/dist/core/index.d.ts +6 -4
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +17 -5
- package/dist/core/index.js.map +1 -1
- package/dist/core/registry.d.ts +0 -0
- package/dist/core/registry.d.ts.map +0 -0
- package/dist/core/registry.js +0 -0
- package/dist/core/registry.js.map +0 -0
- package/dist/core/status-codes.d.ts +20 -0
- package/dist/core/status-codes.d.ts.map +1 -1
- package/dist/core/status-codes.js +51 -0
- package/dist/core/status-codes.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ncp/frames/anchor-frame.d.ts +0 -0
- package/dist/ncp/frames/anchor-frame.d.ts.map +0 -0
- package/dist/ncp/frames/anchor-frame.js +0 -0
- package/dist/ncp/frames/anchor-frame.js.map +0 -0
- package/dist/ncp/frames/caps-frame.d.ts +0 -0
- package/dist/ncp/frames/caps-frame.d.ts.map +0 -0
- package/dist/ncp/frames/caps-frame.js +0 -0
- package/dist/ncp/frames/caps-frame.js.map +0 -0
- package/dist/ncp/frames/diff-frame.d.ts +0 -0
- package/dist/ncp/frames/diff-frame.d.ts.map +0 -0
- package/dist/ncp/frames/diff-frame.js +0 -0
- package/dist/ncp/frames/diff-frame.js.map +0 -0
- package/dist/ncp/frames/error-frame.d.ts +0 -0
- package/dist/ncp/frames/error-frame.d.ts.map +0 -0
- package/dist/ncp/frames/error-frame.js +0 -0
- package/dist/ncp/frames/error-frame.js.map +0 -0
- package/dist/ncp/frames/hello-frame.d.ts +0 -0
- package/dist/ncp/frames/hello-frame.d.ts.map +0 -0
- package/dist/ncp/frames/hello-frame.js +0 -0
- package/dist/ncp/frames/hello-frame.js.map +0 -0
- package/dist/ncp/frames/stream-frame.d.ts +0 -0
- package/dist/ncp/frames/stream-frame.d.ts.map +0 -0
- package/dist/ncp/frames/stream-frame.js +0 -0
- package/dist/ncp/frames/stream-frame.js.map +0 -0
- package/dist/ncp/frames.d.ts +25 -0
- package/dist/ncp/frames.d.ts.map +1 -1
- package/dist/ncp/frames.js +61 -0
- package/dist/ncp/frames.js.map +1 -1
- package/dist/ncp/handshake.d.ts +0 -0
- package/dist/ncp/handshake.d.ts.map +0 -0
- package/dist/ncp/handshake.js +0 -0
- package/dist/ncp/handshake.js.map +0 -0
- package/dist/ncp/index.d.ts +1 -0
- package/dist/ncp/index.d.ts.map +1 -1
- package/dist/ncp/index.js +1 -0
- package/dist/ncp/index.js.map +1 -1
- package/dist/ncp/ncp-error-codes.d.ts +5 -0
- package/dist/ncp/ncp-error-codes.d.ts.map +1 -1
- package/dist/ncp/ncp-error-codes.js +27 -0
- package/dist/ncp/ncp-error-codes.js.map +1 -1
- package/dist/ncp/ncp-patch-format.d.ts +0 -0
- package/dist/ncp/ncp-patch-format.d.ts.map +0 -0
- package/dist/ncp/ncp-patch-format.js +0 -0
- package/dist/ncp/ncp-patch-format.js.map +0 -0
- package/dist/ncp/preamble.d.ts +47 -0
- package/dist/ncp/preamble.d.ts.map +1 -0
- package/dist/ncp/preamble.js +74 -0
- package/dist/ncp/preamble.js.map +1 -0
- package/dist/ncp/registry.d.ts +0 -0
- package/dist/ncp/registry.d.ts.map +1 -1
- package/dist/ncp/registry.js +2 -1
- package/dist/ncp/registry.js.map +1 -1
- package/dist/ncp/stream-manager.d.ts +0 -0
- package/dist/ncp/stream-manager.d.ts.map +0 -0
- package/dist/ncp/stream-manager.js +0 -0
- package/dist/ncp/stream-manager.js.map +0 -0
- package/dist/ndp/dns-txt.d.ts +35 -0
- package/dist/ndp/dns-txt.d.ts.map +1 -0
- package/dist/ndp/dns-txt.js +67 -0
- package/dist/ndp/dns-txt.js.map +1 -0
- package/dist/ndp/frames.d.ts +34 -9
- package/dist/ndp/frames.d.ts.map +1 -1
- package/dist/ndp/frames.js +54 -15
- package/dist/ndp/frames.js.map +1 -1
- package/dist/ndp/index.d.ts +3 -0
- package/dist/ndp/index.d.ts.map +1 -1
- package/dist/ndp/index.js +3 -0
- package/dist/ndp/index.js.map +1 -1
- package/dist/ndp/ndp-error-codes.d.ts +25 -0
- package/dist/ndp/ndp-error-codes.d.ts.map +1 -0
- package/dist/ndp/ndp-error-codes.js +48 -0
- package/dist/ndp/ndp-error-codes.js.map +1 -0
- package/dist/ndp/ndp-registry.d.ts +2 -0
- package/dist/ndp/ndp-registry.d.ts.map +1 -1
- package/dist/ndp/ndp-registry.js +25 -0
- package/dist/ndp/ndp-registry.js.map +1 -1
- package/dist/ndp/registry.d.ts +0 -0
- package/dist/ndp/registry.d.ts.map +0 -0
- package/dist/ndp/registry.js +0 -0
- package/dist/ndp/registry.js.map +0 -0
- package/dist/ndp/security.d.ts +8 -0
- package/dist/ndp/security.d.ts.map +1 -0
- package/dist/ndp/security.js +9 -0
- package/dist/ndp/security.js.map +1 -0
- package/dist/ndp/validator.d.ts +0 -0
- package/dist/ndp/validator.d.ts.map +0 -0
- package/dist/ndp/validator.js +0 -0
- package/dist/ndp/validator.js.map +0 -0
- package/dist/nip/acme/client.d.ts +31 -0
- package/dist/nip/acme/client.d.ts.map +1 -0
- package/dist/nip/acme/client.js +136 -0
- package/dist/nip/acme/client.js.map +1 -0
- package/dist/nip/acme/index.d.ts +6 -0
- package/dist/nip/acme/index.d.ts.map +1 -0
- package/dist/nip/acme/index.js +8 -0
- package/dist/nip/acme/index.js.map +1 -0
- package/dist/nip/acme/jws.d.ts +31 -0
- package/dist/nip/acme/jws.d.ts.map +1 -0
- package/dist/nip/acme/jws.js +76 -0
- package/dist/nip/acme/jws.js.map +1 -0
- package/dist/nip/acme/messages.d.ts +71 -0
- package/dist/nip/acme/messages.d.ts.map +1 -0
- package/dist/nip/acme/messages.js +4 -0
- package/dist/nip/acme/messages.js.map +1 -0
- package/dist/nip/acme/server.d.ts +41 -0
- package/dist/nip/acme/server.d.ts.map +1 -0
- package/dist/nip/acme/server.js +458 -0
- package/dist/nip/acme/server.js.map +1 -0
- package/dist/nip/acme/wire.d.ts +19 -0
- package/dist/nip/acme/wire.d.ts.map +1 -0
- package/dist/nip/acme/wire.js +21 -0
- package/dist/nip/acme/wire.js.map +1 -0
- package/dist/nip/assurance-level.d.ts +19 -0
- package/dist/nip/assurance-level.d.ts.map +1 -0
- package/dist/nip/assurance-level.js +38 -0
- package/dist/nip/assurance-level.js.map +1 -0
- package/dist/nip/cert-format.d.ts +5 -0
- package/dist/nip/cert-format.d.ts.map +1 -0
- package/dist/nip/cert-format.js +6 -0
- package/dist/nip/cert-format.js.map +1 -0
- package/dist/nip/error-codes.d.ts +44 -0
- package/dist/nip/error-codes.d.ts.map +1 -0
- package/dist/nip/error-codes.js +97 -0
- package/dist/nip/error-codes.js.map +1 -0
- package/dist/nip/frames.d.ts +19 -1
- package/dist/nip/frames.d.ts.map +1 -1
- package/dist/nip/frames.js +39 -4
- package/dist/nip/frames.js.map +1 -1
- package/dist/nip/identity.d.ts +0 -0
- package/dist/nip/identity.d.ts.map +0 -0
- package/dist/nip/identity.js +0 -0
- package/dist/nip/identity.js.map +0 -0
- package/dist/nip/index.d.ts +7 -0
- package/dist/nip/index.d.ts.map +1 -1
- package/dist/nip/index.js +9 -0
- package/dist/nip/index.js.map +1 -1
- package/dist/nip/registry.d.ts +0 -0
- package/dist/nip/registry.d.ts.map +0 -0
- package/dist/nip/registry.js +0 -0
- package/dist/nip/registry.js.map +0 -0
- package/dist/nip/reputation-client.d.ts +116 -0
- package/dist/nip/reputation-client.d.ts.map +1 -0
- package/dist/nip/reputation-client.js +261 -0
- package/dist/nip/reputation-client.js.map +1 -0
- package/dist/nip/verifier.d.ts +23 -0
- package/dist/nip/verifier.d.ts.map +1 -0
- package/dist/nip/verifier.js +90 -0
- package/dist/nip/verifier.js.map +1 -0
- package/dist/nip/x509/builder.d.ts +35 -0
- package/dist/nip/x509/builder.d.ts.map +1 -0
- package/dist/nip/x509/builder.js +59 -0
- package/dist/nip/x509/builder.js.map +1 -0
- package/dist/nip/x509/index.d.ts +4 -0
- package/dist/nip/x509/index.d.ts.map +1 -0
- package/dist/nip/x509/index.js +6 -0
- package/dist/nip/x509/index.js.map +1 -0
- package/dist/nip/x509/oids.d.ts +16 -0
- package/dist/nip/x509/oids.d.ts.map +1 -0
- package/dist/nip/x509/oids.js +22 -0
- package/dist/nip/x509/oids.js.map +1 -0
- package/dist/nip/x509/verifier.d.ts +26 -0
- package/dist/nip/x509/verifier.d.ts.map +1 -0
- package/dist/nip/x509/verifier.js +171 -0
- package/dist/nip/x509/verifier.js.map +1 -0
- package/dist/nop/client.d.ts +0 -0
- package/dist/nop/client.d.ts.map +0 -0
- package/dist/nop/client.js +0 -0
- package/dist/nop/client.js.map +1 -1
- package/dist/nop/dag-validator.d.ts +15 -0
- package/dist/nop/dag-validator.d.ts.map +1 -0
- package/dist/nop/dag-validator.js +91 -0
- package/dist/nop/dag-validator.js.map +1 -0
- package/dist/nop/frames.d.ts +8 -3
- package/dist/nop/frames.d.ts.map +1 -1
- package/dist/nop/frames.js +21 -6
- package/dist/nop/frames.js.map +1 -1
- package/dist/nop/index.d.ts +3 -0
- package/dist/nop/index.d.ts.map +1 -1
- package/dist/nop/index.js +3 -0
- package/dist/nop/index.js.map +1 -1
- package/dist/nop/models.d.ts +13 -2
- package/dist/nop/models.d.ts.map +1 -1
- package/dist/nop/models.js +9 -0
- package/dist/nop/models.js.map +1 -1
- package/dist/nop/nop-error-codes.d.ts +31 -0
- package/dist/nop/nop-error-codes.d.ts.map +1 -0
- package/dist/nop/nop-error-codes.js +61 -0
- package/dist/nop/nop-error-codes.js.map +1 -0
- package/dist/nop/nop-types.d.ts +0 -0
- package/dist/nop/nop-types.d.ts.map +0 -0
- package/dist/nop/nop-types.js +0 -0
- package/dist/nop/nop-types.js.map +0 -0
- package/dist/nop/orchestrator.d.ts +66 -0
- package/dist/nop/orchestrator.d.ts.map +1 -0
- package/dist/nop/orchestrator.js +229 -0
- package/dist/nop/orchestrator.js.map +1 -0
- package/dist/nop/registry.d.ts +0 -0
- package/dist/nop/registry.d.ts.map +0 -0
- package/dist/nop/registry.js +0 -0
- package/dist/nop/registry.js.map +0 -0
- package/dist/nwp/anchor-client.d.ts +109 -0
- package/dist/nwp/anchor-client.d.ts.map +1 -0
- package/dist/nwp/anchor-client.js +279 -0
- package/dist/nwp/anchor-client.js.map +1 -0
- package/dist/nwp/anchor-server.d.ts +127 -0
- package/dist/nwp/anchor-server.d.ts.map +1 -0
- package/dist/nwp/anchor-server.js +649 -0
- package/dist/nwp/anchor-server.js.map +1 -0
- package/dist/nwp/bridge.d.ts +24 -0
- package/dist/nwp/bridge.d.ts.map +1 -0
- package/dist/nwp/bridge.js +26 -0
- package/dist/nwp/bridge.js.map +1 -0
- package/dist/nwp/cgn.d.ts +19 -0
- package/dist/nwp/cgn.d.ts.map +1 -0
- package/dist/nwp/cgn.js +29 -0
- package/dist/nwp/cgn.js.map +1 -0
- package/dist/nwp/client.d.ts +10 -3
- package/dist/nwp/client.d.ts.map +1 -1
- package/dist/nwp/client.js +58 -7
- package/dist/nwp/client.js.map +1 -1
- package/dist/nwp/frames.d.ts +56 -2
- package/dist/nwp/frames.d.ts.map +1 -1
- package/dist/nwp/frames.js +86 -4
- package/dist/nwp/frames.js.map +1 -1
- package/dist/nwp/http-headers.d.ts +24 -0
- package/dist/nwp/http-headers.d.ts.map +1 -0
- package/dist/nwp/http-headers.js +29 -0
- package/dist/nwp/http-headers.js.map +1 -0
- package/dist/nwp/index.d.ts +9 -0
- package/dist/nwp/index.d.ts.map +1 -1
- package/dist/nwp/index.js +9 -0
- package/dist/nwp/index.js.map +1 -1
- package/dist/nwp/manifest.d.ts +75 -0
- package/dist/nwp/manifest.d.ts.map +1 -0
- package/dist/nwp/manifest.js +5 -0
- package/dist/nwp/manifest.js.map +1 -0
- package/dist/nwp/memory-node-server.d.ts +70 -0
- package/dist/nwp/memory-node-server.d.ts.map +1 -0
- package/dist/nwp/memory-node-server.js +315 -0
- package/dist/nwp/memory-node-server.js.map +1 -0
- package/dist/nwp/nwp-error-codes.d.ts +48 -0
- package/dist/nwp/nwp-error-codes.d.ts.map +1 -0
- package/dist/nwp/nwp-error-codes.js +108 -0
- package/dist/nwp/nwp-error-codes.js.map +1 -0
- package/dist/nwp/registry.d.ts +0 -0
- package/dist/nwp/registry.d.ts.map +0 -0
- package/dist/nwp/registry.js +0 -0
- package/dist/nwp/registry.js.map +0 -0
- package/dist/nwp/reputation.d.ts +37 -0
- package/dist/nwp/reputation.d.ts.map +1 -0
- package/dist/nwp/reputation.js +118 -0
- package/dist/nwp/reputation.js.map +1 -0
- package/dist/setup.d.ts +0 -0
- package/dist/setup.d.ts.map +0 -0
- package/dist/setup.js +0 -0
- package/dist/setup.js.map +0 -0
- package/doc/nps-sdk.core.cn.md +321 -0
- package/doc/nps-sdk.core.md +326 -0
- package/doc/nps-sdk.ncp.cn.md +270 -0
- package/doc/nps-sdk.ncp.md +276 -0
- package/doc/nps-sdk.ndp.cn.md +267 -0
- package/doc/nps-sdk.ndp.md +273 -0
- package/doc/nps-sdk.nip.cn.md +265 -0
- package/doc/nps-sdk.nip.md +272 -0
- package/doc/nps-sdk.nop.cn.md +329 -0
- package/doc/nps-sdk.nop.md +332 -0
- package/doc/nps-sdk.nwp.cn.md +288 -0
- package/doc/nps-sdk.nwp.md +295 -0
- package/doc/overview.cn.md +149 -0
- package/doc/overview.md +153 -0
- package/package.json +33 -4
- package/CONTRIBUTING.md +0 -33
- package/dist/codec-CmHeovTV.d.cts +0 -120
- package/dist/codec-CmHeovTV.d.ts +0 -120
- package/dist/core/index.cjs +0 -371
- package/dist/core/index.cjs.map +0 -1
- package/dist/core/index.d.cts +0 -41
- package/dist/frames-B3qLdl_g.d.cts +0 -77
- package/dist/frames-Ff7-ZPUl.d.ts +0 -77
- package/dist/index.cjs +0 -1556
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -21
- package/dist/ncp/index.cjs +0 -188
- package/dist/ncp/index.cjs.map +0 -1
- package/dist/ncp/index.d.cts +0 -6
- package/dist/ndp/index.cjs +0 -252
- package/dist/ndp/index.cjs.map +0 -1
- package/dist/ndp/index.d.cts +0 -86
- package/dist/nip/index.cjs +0 -214
- package/dist/nip/index.cjs.map +0 -1
- package/dist/nip/index.d.cts +0 -65
- package/dist/nop/index.cjs +0 -762
- package/dist/nop/index.cjs.map +0 -1
- package/dist/nop/index.d.cts +0 -155
- package/dist/nwp/index.cjs +0 -658
- package/dist/nwp/index.cjs.map +0 -1
- package/dist/nwp/index.d.cts +0 -65
- package/nip-ca-server/Dockerfile +0 -27
- package/nip-ca-server/README.md +0 -45
- package/nip-ca-server/db/001_init.sql +0 -25
- package/nip-ca-server/docker-compose.yml +0 -29
- package/nip-ca-server/package.json +0 -23
- package/nip-ca-server/src/ca.ts +0 -155
- package/nip-ca-server/src/db.ts +0 -104
- package/nip-ca-server/src/index.ts +0 -157
- package/nip-ca-server/tsconfig.json +0 -13
- package/src/core/anchor-cache.ts +0 -129
- package/src/core/cache.ts +0 -93
- package/src/core/canonical-json.ts +0 -50
- package/src/core/codec.ts +0 -158
- package/src/core/codecs/index.ts +0 -5
- package/src/core/codecs/ncp-codec.ts +0 -170
- package/src/core/codecs/tier1-json-codec.ts +0 -33
- package/src/core/codecs/tier2-msgpack-codec.ts +0 -30
- package/src/core/crypto-provider.ts +0 -47
- package/src/core/exceptions.ts +0 -57
- package/src/core/frame-header.ts +0 -282
- package/src/core/frame-registry.ts +0 -91
- package/src/core/frames.ts +0 -183
- package/src/core/index.ts +0 -10
- package/src/core/registry.ts +0 -28
- package/src/core/status-codes.ts +0 -46
- package/src/index.ts +0 -10
- package/src/ncp/frames/anchor-frame.ts +0 -87
- package/src/ncp/frames/caps-frame.ts +0 -59
- package/src/ncp/frames/diff-frame.ts +0 -69
- package/src/ncp/frames/error-frame.ts +0 -26
- package/src/ncp/frames/hello-frame.ts +0 -50
- package/src/ncp/frames/stream-frame.ts +0 -35
- package/src/ncp/frames.ts +0 -199
- package/src/ncp/handshake.ts +0 -95
- package/src/ncp/index.ts +0 -12
- package/src/ncp/ncp-error-codes.ts +0 -34
- package/src/ncp/ncp-patch-format.ts +0 -16
- package/src/ncp/registry.ts +0 -14
- package/src/ncp/stream-manager.ts +0 -212
- package/src/ndp/frames.ts +0 -124
- package/src/ndp/index.ts +0 -7
- package/src/ndp/ndp-registry.ts +0 -82
- package/src/ndp/registry.ts +0 -12
- package/src/ndp/validator.ts +0 -64
- package/src/nip/frames.ts +0 -106
- package/src/nip/identity.ts +0 -113
- package/src/nip/index.ts +0 -6
- package/src/nip/registry.ts +0 -12
- package/src/nop/client.ts +0 -103
- package/src/nop/frames.ts +0 -181
- package/src/nop/index.ts +0 -7
- package/src/nop/models.ts +0 -79
- package/src/nop/nop-types.ts +0 -208
- package/src/nop/registry.ts +0 -13
- package/src/nwp/client.ts +0 -114
- package/src/nwp/frames.ts +0 -116
- package/src/nwp/index.ts +0 -6
- package/src/nwp/registry.ts +0 -11
- package/src/setup.ts +0 -32
- package/tests/core/anchor-cache.test.ts +0 -242
- package/tests/core/codec.test.ts +0 -205
- package/tests/core/frame-registry.test.ts +0 -46
- package/tests/core.test.ts +0 -327
- package/tests/ncp/diff-binary-bitset.test.ts +0 -107
- package/tests/ncp/e2e-enc-reject.test.ts +0 -93
- package/tests/ncp/err-error-frame.test.ts +0 -152
- package/tests/ncp/frames.test.ts +0 -359
- package/tests/ncp/framing.test.ts +0 -233
- package/tests/ncp/hello-frame.test.ts +0 -122
- package/tests/ncp/inline-anchor.test.ts +0 -88
- package/tests/ncp/security.test.ts +0 -184
- package/tests/ncp/stream-window.test.ts +0 -167
- package/tests/ncp/stream.test.ts +0 -242
- package/tests/ncp/version-negotiation.test.ts +0 -123
- package/tests/ndp.test.ts +0 -271
- package/tests/nip.test.ts +0 -184
- package/tests/nop.test.ts +0 -344
- package/tests/nwp.test.ts +0 -237
- package/tsconfig.json +0 -20
- package/tsup.config.ts +0 -20
- package/vitest.config.ts +0 -10
package/dist/nwp/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/exceptions.ts","../../src/core/frames.ts","../../src/ncp/frames.ts","../../src/nwp/frames.ts","../../src/nwp/registry.ts","../../src/core/codec.ts","../../src/nwp/client.ts","../../src/core/registry.ts","../../src/ncp/registry.ts"],"names":["view","payloadLength","buf","init_frames","msgpack"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAIa,UAQA,aAAA,EAGA,aAAA;AAfb,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wBAAA,GAAA;AAIO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,MAClC,YAAY,OAAA,EAAiB;AAC3B,QAAA,KAAA,CAAM,OAAO,CAAA;AACb,QAAA,IAAA,CAAK,OAAO,GAAA,CAAA,MAAA,CAAW,IAAA;AAAA,MACzB;AAAA,KACF;AAGO,IAAM,aAAA,GAAN,cAA4B,QAAA,CAAS;AAAA,KAAC;AAGtC,IAAM,aAAA,GAAN,cAA4B,QAAA,CAAS;AAAA,KAAC;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACf7C,IAmEa,UAAA,EAWA,mBAAA,EACA,oBAAA,EACA,mBAAA,EAmBA,WAAA;AAnGb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,oBAAA,GAAA;AAOA,IAAA,eAAA,EAAA;AA4DO,IAAM,UAAA,GAAa;AAAA,MACxB,IAAA,EAAe,CAAA;AAAA,MACf,UAAA,EAAe,CAAA;AAAA,MACf,aAAA,EAAe,CAAA;AAAA,MACf,KAAA,EAAe,CAAA;AAAA,MACf,SAAA,EAAe,CAAA;AAAA,MACf,GAAA,EAAe;AAAA,KACjB;AAIO,IAAM,mBAAA,GAAuB,CAAA;AAC7B,IAAM,oBAAA,GAAuB,CAAA;AAC7B,IAAM,mBAAA,GAAuB,KAAA;AAmB7B,IAAM,WAAA,GAAN,MAAM,YAAA,CAAY;AAAA,MACvB,WAAA,CACkB,SAAA,EACA,KAAA,EACA,aAAA,EAChB;AAHgB,QAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,QAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,QAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAAA,MACf;AAAA,MAHe,SAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA;AAAA,MAGlB,IAAI,UAAA,GAAsB;AACxB,QAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,GAAQ,UAAA,CAAW,GAAA,MAAS,CAAA;AAAA,MAC3C;AAAA,MAEA,IAAI,UAAA,GAAqB;AACvB,QAAA,OAAO,IAAA,CAAK,aAAa,oBAAA,GAAuB,mBAAA;AAAA,MAClD;AAAA,MAEA,IAAI,YAAA,GAA6B;AAC/B,QAAA,OAAQ,KAAK,KAAA,GAAQ,CAAA;AAAA,MACvB;AAAA,MAEA,IAAI,OAAA,GAAmB;AACrB,QAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,MAAU,CAAA;AAAA,MACjC;AAAA,MAEA,IAAI,WAAA,GAAuB;AACzB,QAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,MAAU,CAAA;AAAA,MACjC;AAAA;AAAA,MAIA,OAAO,MAAM,GAAA,EAA8B;AACzC,QAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AAClB,UAAA,MAAM,IAAI,aAAA;AAAA,YACR,CAAA,oEAAA,EAAuE,IAAI,MAAM,CAAA,CAAA;AAAA,WACnF;AAAA,QACF;AAEA,QAAA,MAAM,KAAA,GAAQ,IAAI,CAAC,CAAA;AACnB,QAAA,MAAM,GAAA,GAAA,CAAS,KAAA,GAAQ,UAAA,CAAW,GAAA,MAAS,CAAA;AAE3C,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,IAAI,GAAA,CAAI,SAAS,oBAAA,EAAsB;AACrC,YAAA,MAAM,IAAI,aAAA;AAAA,cACR,CAAA,iDAAA,EAAoD,oBAAoB,CAAA,YAAA,EAAe,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,aACnG;AAAA,UACF;AACA,UAAA,MAAMA,QAAO,IAAI,QAAA,CAAS,GAAA,CAAI,MAAA,EAAQ,IAAI,UAAU,CAAA;AACpD,UAAA,MAAMC,cAAAA,GAAgBD,KAAAA,CAAK,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA;AAC7C,UAAA,OAAO,IAAI,YAAA,CAAY,GAAA,CAAI,CAAC,CAAA,EAAiB,OAAOC,cAAa,CAAA;AAAA,QACnE;AAEA,QAAA,IAAI,GAAA,CAAI,SAAS,mBAAA,EAAqB;AACpC,UAAA,MAAM,IAAI,aAAA;AAAA,YACR,CAAA,wCAAA,EAA2C,mBAAmB,CAAA,YAAA,EAAe,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,WACzF;AAAA,QACF;AACA,QAAA,MAAM,OAAO,IAAI,QAAA,CAAS,GAAA,CAAI,MAAA,EAAQ,IAAI,UAAU,CAAA;AACpD,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA;AAC7C,QAAA,OAAO,IAAI,YAAA,CAAY,GAAA,CAAI,CAAC,CAAA,EAAiB,OAAO,aAAa,CAAA;AAAA,MACnE;AAAA;AAAA,MAIA,OAAA,GAAsB;AACpB,QAAA,IAAI,KAAK,UAAA,EAAY;AACnB,UAAA,MAAMC,IAAAA,GAAO,IAAI,UAAA,CAAW,oBAAoB,CAAA;AAChD,UAAA,MAAMF,KAAAA,GAAO,IAAI,QAAA,CAASE,IAAAA,CAAI,MAAM,CAAA;AACpC,UAAAF,KAAAA,CAAK,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA;AAC/B,UAAAA,KAAAA,CAAK,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA;AAC3B,UAAAA,KAAAA,CAAK,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA;AAC1B,UAAAA,KAAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,eAAe,KAAK,CAAA;AAC3C,UAAA,OAAOE,IAAAA;AAAA,QACT;AACA,QAAA,MAAM,GAAA,GAAO,IAAI,UAAA,CAAW,mBAAmB,CAAA;AAC/C,QAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AACpC,QAAA,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA;AAC/B,QAAA,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA;AAC3B,QAAA,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,KAAK,CAAA;AAC3C,QAAA,OAAO,GAAA;AAAA,MACT;AAAA,MAEA,QAAA,GAAmB;AACjB,QAAA,OAAO,CAAA,wBAAA,EAA2B,KAAK,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,UAAA,EAAa,KAAK,KAAA,CAAM,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAC,CAAA,gBAAA,EAAmB,IAAA,CAAK,aAAa,CAAA,CAAA,CAAA;AAAA,MAC1K;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtLA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,WAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAqBa,WAAA,EAsCA,SAAA,EAgCA,WAAA,EAsCA,SAAA,EAyCA,UAAA;AA1Kb,IAAAC,YAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mBAAA,GAAA;AAGA,IAAA,WAAA,EAAA;AAkBO,IAAM,WAAA,GAAN,MAAM,YAAA,CAAgC;AAAA,MAI3C,WAAA,CACkB,QAAA,EACA,MAAA,EACA,GAAA,GAAmB,IAAA,EACnC;AAHgB,QAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,QAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,QAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,MACf;AAAA,MAHe,QAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MANT,SAAA,GAAA,CAAA;AAAA,MACA,aAAA,GAAA,CAAA;AAAA,MAQT,MAAA,GAAkC;AAChC,QAAA,OAAO;AAAA,UACL,WAAW,IAAA,CAAK,QAAA;AAAA,UAChB,MAAA,EAAW,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,GAAI,CAAA,EAAE;AAAA,UAC/D,KAAW,IAAA,CAAK;AAAA,SAClB;AAAA,MACF;AAAA,MAEA,OAAO,SAAS,IAAA,EAA4C;AAC1D,QAAA,MAAM,SAAA,GAAY,KAAK,QAAQ,CAAA;AAC/B,QAAA,OAAO,IAAI,YAAA;AAAA,UACT,KAAK,WAAW,CAAA;AAAA,UAChB,EAAE,MAAA,EAAQ,SAAA,CAAU,MAAA,EAAO;AAAA,UAC1B,IAAA,CAAK,KAAK,CAAA,IAA4B;AAAA,SACzC;AAAA,MACF;AAAA,KACF;AAYO,IAAM,SAAA,GAAN,MAAM,UAAA,CAA8B;AAAA,MAIzC,WAAA,CACkB,SAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,EAChB;AAJgB,QAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,QAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,QAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,QAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,MACf;AAAA,MAJe,SAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MAPT,SAAA,GAAA,CAAA;AAAA,MACA,aAAA,GAAA,CAAA;AAAA,MAST,MAAA,GAAkC;AAChC,QAAA,OAAO;AAAA,UACL,YAAY,IAAA,CAAK,SAAA;AAAA,UACjB,UAAY,IAAA,CAAK,OAAA;AAAA,UACjB,KAAA,EAAY,KAAK,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAE,CAAE,CAAA;AAAA,UAC5C,SAAA,EAAY,KAAK,QAAA,IAAY;AAAA,SAC/B;AAAA,MACF;AAAA,MAEA,OAAO,SAAS,IAAA,EAA0C;AACxD,QAAA,OAAO,IAAI,UAAA;AAAA,UACT,KAAK,YAAY,CAAA;AAAA,UACjB,KAAK,UAAU,CAAA;AAAA,UACf,KAAK,OAAO,CAAA;AAAA,UACX,IAAA,CAAK,WAAW,CAAA,IAAuB;AAAA,SAC1C;AAAA,MACF;AAAA,KACF;AAIO,IAAM,WAAA,GAAN,MAAM,YAAA,CAAgC;AAAA,MAI3C,YACkB,QAAA,EACA,GAAA,EACA,MAAA,EACA,IAAA,EACA,WACA,UAAA,EAChB;AANgB,QAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,QAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,QAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,QAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,QAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,MACf;AAAA,MANe,QAAA;AAAA,MACA,GAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MATT,SAAA,GAAA,CAAA;AAAA,MACA,aAAA,GAAA,CAAA;AAAA,MAWT,MAAA,GAAkC;AAChC,QAAA,OAAO;AAAA,UACL,WAAa,IAAA,CAAK,QAAA;AAAA,UAClB,KAAa,IAAA,CAAK,GAAA;AAAA,UAClB,SAAa,IAAA,CAAK,MAAA;AAAA,UAClB,MAAa,IAAA,CAAK,IAAA;AAAA,UAClB,UAAA,EAAa,KAAK,SAAA,IAAc,IAAA;AAAA,UAChC,WAAA,EAAa,KAAK,UAAA,IAAc;AAAA,SAClC;AAAA,MACF;AAAA,MAEA,OAAO,SAAS,IAAA,EAA4C;AAC1D,QAAA,OAAO,IAAI,YAAA;AAAA,UACT,KAAK,WAAW,CAAA;AAAA,UAChB,KAAK,KAAK,CAAA;AAAA,UACV,KAAK,SAAS,CAAA;AAAA,UACd,KAAK,MAAM,CAAA;AAAA,UACV,IAAA,CAAK,YAAY,CAAA,IAAyB,MAAA;AAAA,UAC1C,IAAA,CAAK,aAAa,CAAA,IAAwB;AAAA,SAC7C;AAAA,MACF;AAAA,KACF;AAIO,IAAM,SAAA,GAAN,MAAM,UAAA,CAA8B;AAAA,MAIzC,YACkB,SAAA,EACA,KAAA,EACA,MACA,UAAA,EACA,QAAA,EACA,QACA,aAAA,EAChB;AAPgB,QAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,QAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,QAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,QAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,QAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,QAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAAA,MACf;AAAA,MAPe,SAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,aAAA;AAAA,MAVT,SAAA,GAAA,CAAA;AAAA,MACA,aAAA,GAAA,CAAA;AAAA,MAYT,MAAA,GAAkC;AAChC,QAAA,OAAO;AAAA,UACL,YAAiB,IAAA,CAAK,SAAA;AAAA,UACtB,OAAiB,IAAA,CAAK,KAAA;AAAA,UACtB,MAAiB,IAAA,CAAK,IAAA;AAAA,UACtB,WAAA,EAAiB,KAAK,UAAA,IAAiB,IAAA;AAAA,UACvC,SAAA,EAAiB,KAAK,QAAA,IAAiB,IAAA;AAAA,UACvC,MAAA,EAAiB,KAAK,MAAA,IAAiB,IAAA;AAAA,UACvC,cAAA,EAAiB,KAAK,aAAA,IAAiB;AAAA,SACzC;AAAA,MACF;AAAA,MAEA,OAAO,SAAS,IAAA,EAA0C;AACxD,QAAA,OAAO,IAAI,UAAA;AAAA,UACT,KAAK,YAAY,CAAA;AAAA,UACjB,KAAK,OAAO,CAAA;AAAA,UACZ,KAAK,MAAM,CAAA;AAAA,UACV,IAAA,CAAK,aAAa,CAAA,IAA0B,MAAA;AAAA,UAC5C,IAAA,CAAK,WAAW,CAAA,IAA4B,MAAA;AAAA,UAC5C,IAAA,CAAK,QAAQ,CAAA,IAAgC,MAAA;AAAA,UAC7C,IAAA,CAAK,gBAAgB,CAAA,IAAuB;AAAA,SAC/C;AAAA,MACF;AAAA,KACF;AAIO,IAAM,UAAA,GAAN,MAAM,WAAA,CAA+B;AAAA,MAI1C,WAAA,CACkB,MAAA,EACA,KAAA,EACA,OAAA,EACA,OAAA,EAChB;AAJgB,QAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,QAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,QAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,QAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,MACf;AAAA,MAJe,MAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MAPT,SAAA,GAAA,GAAA;AAAA,MACA,aAAA,GAAA,CAAA;AAAA,MAST,MAAA,GAAkC;AAChC,QAAA,OAAO;AAAA,UACL,QAAS,IAAA,CAAK,MAAA;AAAA,UACd,OAAS,IAAA,CAAK,KAAA;AAAA,UACd,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA,UACzB,OAAA,EAAS,KAAK,OAAA,IAAW;AAAA,SAC3B;AAAA,MACF;AAAA,MAEA,OAAO,SAAS,IAAA,EAA2C;AACzD,QAAA,OAAO,IAAI,WAAA;AAAA,UACT,KAAK,QAAQ,CAAA;AAAA,UACb,KAAK,OAAO,CAAA;AAAA,UACX,IAAA,CAAK,SAAS,CAAA,IAAuB,MAAA;AAAA,UACrC,IAAA,CAAK,SAAS,CAAA,IAAwC;AAAA,SACzD;AAAA,MACF;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACnMA,WAAA,EAAA;AAmBO,IAAM,UAAA,GAAN,MAAM,WAAA,CAA+B;AAAA,EAI1C,WAAA,CACkB,WACA,MAAA,EACA,KAAA,EACA,QACA,OAAA,EACA,MAAA,EACA,cACA,KAAA,EAChB;AARgB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EACf;AAAA,EARe,SAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EAXT,SAAA,GAAA,EAAA;AAAA,EACA,aAAA,GAAA,CAAA;AAAA,EAaT,MAAA,GAAkC;AAChC,IAAA,OAAO;AAAA,MACL,UAAA,EAAe,KAAK,SAAA,IAAgB,IAAA;AAAA,MACpC,MAAA,EAAe,KAAK,MAAA,IAAgB,IAAA;AAAA,MACpC,KAAA,EAAe,KAAK,KAAA,IAAgB,IAAA;AAAA,MACpC,MAAA,EAAe,KAAK,MAAA,IAAgB,IAAA;AAAA,MACpC,QAAA,EAAe,KAAK,OAAA,IAAgB,IAAA;AAAA,MACpC,MAAA,EAAe,KAAK,MAAA,IAAgB,IAAA;AAAA,MACpC,aAAA,EAAe,KAAK,YAAA,IAAgB,IAAA;AAAA,MACpC,KAAA,EAAe,KAAK,KAAA,IAAgB;AAAA,KACtC;AAAA,EACF;AAAA,EAEA,OAAO,SAAS,IAAA,EAA2C;AACzD,IAAA,OAAO,IAAI,WAAA;AAAA,MACR,IAAA,CAAK,YAAY,CAAA,IAA2B,MAAA;AAAA,MAC5C,IAAA,CAAK,QAAQ,CAAA,IAA+C,MAAA;AAAA,MAC5D,IAAA,CAAK,OAAO,CAAA,IAAgC,MAAA;AAAA,MAC5C,IAAA,CAAK,QAAQ,CAAA,IAA+B,MAAA;AAAA,MAC5C,IAAA,CAAK,UAAU,CAAA,IAAwC,MAAA;AAAA,MACvD,IAAA,CAAK,QAAQ,CAAA,IAAgC,MAAA;AAAA,MAC7C,IAAA,CAAK,eAAe,CAAA,IAAoC,MAAA;AAAA,MACxD,IAAA,CAAK,OAAO,CAAA,IAAgC;AAAA,KAC/C;AAAA,EACF;AACF;AAIO,IAAM,WAAA,GAAN,MAAM,YAAA,CAAgC;AAAA,EAI3C,WAAA,CACkB,QAAA,EACA,MAAA,EACA,MAAA,EACA,gBACA,SAAA,EAChB;AALgB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAAA,EACf;AAAA,EALe,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EART,SAAA,GAAA,EAAA;AAAA,EACA,aAAA,GAAA,CAAA;AAAA,EAUT,MAAA,GAAkC;AAChC,IAAA,OAAO;AAAA,MACL,WAAiB,IAAA,CAAK,QAAA;AAAA,MACtB,MAAA,EAAiB,KAAK,MAAA,IAAmB,IAAA;AAAA,MACzC,KAAA,EAAiB,KAAK,MAAA,IAAmB,KAAA;AAAA,MACzC,eAAA,EAAiB,KAAK,cAAA,IAAmB,IAAA;AAAA,MACzC,UAAA,EAAiB,KAAK,SAAA,IAAmB;AAAA,KAC3C;AAAA,EACF;AAAA,EAEA,OAAO,SAAS,IAAA,EAA4C;AAC1D,IAAA,OAAO,IAAI,YAAA;AAAA,MACT,KAAK,WAAW,CAAA;AAAA,MACf,IAAA,CAAK,QAAQ,CAAA,IAAiD,MAAA;AAAA,MAC9D,IAAA,CAAK,OAAO,CAAA,IAAkC,MAAA;AAAA,MAC9C,IAAA,CAAK,iBAAiB,CAAA,IAAwB,MAAA;AAAA,MAC9C,IAAA,CAAK,YAAY,CAAA,IAA6B;AAAA,KACjD;AAAA,EACF;AACF;AAUO,SAAS,4BAA4B,IAAA,EAAoD;AAC9F,EAAA,MAAM,CAAA,GAAyB;AAAA,IAC7B,MAAA,EAAQ,KAAK,SAAS,CAAA;AAAA,IACtB,MAAA,EAAQ,KAAK,QAAQ;AAAA,GACvB;AACA,EAAA,MAAM,OAAA,GAAU,KAAK,UAAU,CAAA;AAC/B,EAAA,IAAI,OAAA,IAAW,IAAA,EAAM,CAAA,CAAE,OAAA,GAAU,OAAA;AACjC,EAAA,OAAO,CAAA;AACT;;;AC/GA,WAAA,EAAA;AAGO,SAAS,kBAAkB,QAAA,EAA+B;AAC/D,EAAA,QAAA,CAAS,yBAA2B,UAAU,CAAA;AAC9C,EAAA,QAAA,CAAS,0BAA2B,WAAW,CAAA;AACjD;;;ACDA,eAAA,EAAA;AACA,WAAA,EAAA;AAmBO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,OAAO,KAAA,EAA6B;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA;AAC1C,MAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,IACtC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,gCAAA,EAAmC,KAAA,CAAM,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,OAClG;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAA,CAAO,SAAA,EAAsB,OAAA,EAAqB,QAAA,EAAmC;AACnF,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAY,CAAE,OAAO,OAAO,CAAA;AAC7C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC5B,MAAA,OAAO,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,IAC1B,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,gCAAA,EAAmC,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,OAC5F;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAIO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,OAAO,KAAA,EAA6B;AAClC,IAAA,IAAI;AACF,MAAA,OAAeC,kBAAA,CAAA,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,CAAA;AAAA,IACtC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,mCAAA,EAAsC,KAAA,CAAM,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,OACrG;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAA,CAAO,SAAA,EAAsB,OAAA,EAAqB,QAAA,EAAmC;AACnF,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAeA,0BAAO,OAAO,CAAA;AACnC,MAAA,OAAO,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,IAC1B,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,mCAAA,EAAsC,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,OAC/F;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAIO,IAAM,gBAAN,MAAoB;AAAA,EACR,SAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA,GAAW,IAAI,cAAA,EAAe;AAAA,EAC9B,QAAA,GAAW,IAAI,iBAAA,EAAkB;AAAA,EAElD,WAAA,CAAY,QAAA,EAAyB,OAAA,GAAmC,EAAC,EAAG;AAC1E,IAAA,IAAA,CAAK,SAAA,GAAc,QAAA;AACnB,IAAA,IAAA,CAAK,WAAA,GAAc,QAAQ,UAAA,IAAc,mBAAA;AAAA,EAC3C;AAAA;AAAA,EAIA,MAAA,CAAO,KAAA,EAAiB,OAAA,GAA2C,EAAC,EAAe;AACjF,IAAA,MAAM,IAAA,GAAU,OAAA,CAAQ,YAAA,IAAgB,KAAA,CAAM,aAAA;AAC9C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AAExC,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,SAAA,CAAU,OAAO,KAAK,CAAA;AAAA,IAClC,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,GAAA,YAAe,eAAe,MAAM,GAAA;AACxC,MAAA,MAAM,IAAI,cAAc,CAAA,oBAAA,EAAuB,KAAA,CAAM,UAAU,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,IAChF;AAEA,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,IAAA,CAAK,WAAA,EAAa;AACrC,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,sBAAA,EAAyB,KAAA,CAAM,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,4BAAA,EACjE,OAAA,CAAQ,MAAM,CAAA,SAAA,EAAY,KAAK,WAAW,CAAA,6CAAA;AAAA,OACjD;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,GAAS,mBAAA;AAChC,IAAA,IAAI,KAAA,GAAW,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,IAAI,CAAA;AAC3C,IAAA,IAAI,MAAA,WAAiB,UAAA,CAAW,GAAA;AAEhC,IAAA,MAAM,SAAa,IAAI,WAAA,CAAY,MAAM,SAAA,EAAW,KAAA,EAAO,QAAQ,MAAM,CAAA;AACzE,IAAA,MAAM,WAAA,GAAc,OAAO,OAAA,EAAQ;AACnC,IAAA,MAAM,OAAa,IAAI,UAAA,CAAW,WAAA,CAAY,MAAA,GAAS,QAAQ,MAAM,CAAA;AACrE,IAAA,IAAA,CAAK,GAAA,CAAI,aAAa,CAAC,CAAA;AACvB,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,WAAA,CAAY,MAAM,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAIA,OAAO,IAAA,EAA4B;AACjC,IAAA,MAAM,MAAA,GAAU,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA;AACtC,IAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,MAAA,CAAO,YAAY,MAAA,CAAO,UAAA,GAAa,OAAO,aAAa,CAAA;AACtF,IAAA,MAAM,KAAA,GAAU,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA;AACrD,IAAA,OAAO,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA,EAAW,OAAA,EAAS,KAAK,SAAS,CAAA;AAAA,EAC/D;AAAA,EAEA,OAAO,WAAW,IAAA,EAA+B;AAC/C,IAAA,OAAO,WAAA,CAAY,MAAM,IAAI,CAAA;AAAA,EAC/B;AAAA;AAAA,EAIQ,WAAA,CAAY,OAAiB,IAAA,EAA4B;AAC/D,IAAA,IAAI,KAAA,GAAQ,IAAA,KAAA,CAAA,cAA6B,UAAA,CAAW,UAAA,GAAa,UAAA,CAAW,aAAA;AAE5E,IAAA,MAAM,gBAAgB,QAAA,IAAY,KAAA;AAClC,IAAA,MAAM,OAAA,GAAgB,CAAC,aAAA,IAAkB,KAAA,CAA8B,MAAA;AACvE,IAAA,IAAI,OAAA,WAAkB,UAAA,CAAW,KAAA;AAEjC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,aAAa,IAAA,EAAwD;AAC3E,IAAA,IAAI,IAAA,KAAA,CAAA,oBAAsC,IAAA,CAAK,KAAA;AAC/C,IAAA,IAAI,IAAA,KAAA,CAAA,uBAAsC,IAAA,CAAK,QAAA;AAC/C,IAAA,MAAM,IAAI,aAAA,CAAc,CAAA,6BAAA,EAAiC,IAAA,CAAgB,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAC3G;AACF,CAAA;;;ACrJA,WAAA,EAAA;;;ACLA,eAAA,EAAA;AAQO,IAAM,gBAAN,MAAoB;AAAA,EACR,IAAA,uBAAW,GAAA,EAA2B;AAAA,EAEvD,QAAA,CAAS,WAAsB,GAAA,EAAuB;AACpD,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEA,QAAQ,SAAA,EAAkC;AACxC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AACnC,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,qCAAA,EAAwC,UAAU,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,OACjF;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;;;ACvBA,WAAA,EAAA;AACAD,YAAAA,EAAAA;AAEO,SAAS,kBAAkB,QAAA,EAA+B;AAC/D,EAAA,QAAA,CAAS,yBAA2B,WAAW,CAAA;AAC/C,EAAA,QAAA,CAAS,uBAA2B,SAAS,CAAA;AAC7C,EAAA,QAAA,CAAS,yBAA2B,WAAW,CAAA;AAC/C,EAAA,QAAA,CAAS,uBAA2B,SAAS,CAAA;AAC7C,EAAA,QAAA,CAAS,0BAA2B,UAAU,CAAA;AAChD;;;AFFAA,YAAAA,EAAAA;AAOA,IAAM,YAAA,GAAe,yBAAA;AAEd,IAAM,YAAN,MAAgB;AAAA,EACJ,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EAEjB,WAAA,CACE,OAAA,EACA,OAAA,GAAyF,EAAC,EAC1F;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACzC,IAAA,IAAA,CAAK,QAAW,OAAA,CAAQ,WAAA,IAAA,CAAA;AAExB,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,QAAA,IAAA,CAAa,MAAM;AAC1C,MAAA,MAAM,CAAA,GAAI,IAAI,aAAA,EAAc;AAC5B,MAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,MAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,MAAA,OAAO,CAAA;AAAA,IACT,CAAA,GAAG;AACH,IAAA,MAAM,SAAA,GAAY,QAAQ,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAW,GAAI,EAAC;AAC3F,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,aAAA,CAAc,QAAA,EAAU,SAAS,CAAA;AAAA,EACrD;AAAA,EAEA,MAAM,WAAW,KAAA,EAAmC;AAClD,IAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,MAAA,CAAO,OAAO,EAAE,YAAA,EAAc,IAAA,CAAK,KAAA,EAAO,CAAA;AACnE,IAAA,MAAM,MAAO,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,OAAA,CAAA,EAAW;AAAA,MAClD,MAAA,EAAS,MAAA;AAAA,MACT,IAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAS,EAAE,cAAA,EAAgB,YAAA,EAAc,UAAU,YAAA;AAAa,KACjE,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAAA,EACvE;AAAA,EAEA,MAAM,MAAM,KAAA,EAAuC;AACjD,IAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,MAAA,CAAO,OAAO,EAAE,YAAA,EAAc,IAAA,CAAK,KAAA,EAAO,CAAA;AACnE,IAAA,MAAM,MAAO,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,MAAA,CAAA,EAAU;AAAA,MACjD,MAAA,EAAS,MAAA;AAAA,MACT,IAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAS,EAAE,cAAA,EAAgB,YAAA,EAAc,UAAU,YAAA;AAAa,KACjE,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAEpE,IAAA,MAAM,MAAS,IAAI,UAAA,CAAW,MAAM,GAAA,CAAI,aAAa,CAAA;AACrD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AACrC,IAAA,IAAI,EAAE,kBAAkB,SAAA,CAAA,EAAY;AAClC,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,oCAAA,EAAuC,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IACvF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,OAAO,OAAO,KAAA,EAAgD;AAC5D,IAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,MAAA,CAAO,OAAO,EAAE,YAAA,EAAc,IAAA,CAAK,KAAA,EAAO,CAAA;AACnE,IAAA,MAAM,MAAO,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,OAAA,CAAA,EAAW;AAAA,MAClD,MAAA,EAAS,MAAA;AAAA,MACT,IAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAS,EAAE,cAAA,EAAgB,YAAA,EAAc,UAAU,YAAA;AAAa,KACjE,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AACrE,IAAA,IAAI,GAAA,CAAI,SAAS,IAAA,EAAM;AAEvB,IAAA,MAAM,EAAE,WAAA,EAAa,EAAA,EAAG,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,YAAA,EAAA,EAAA,cAAA,CAAA,CAAA;AAElC,IAAA,WAAA,MAAiB,KAAA,IAAS,IAAI,IAAA,EAAM;AAClC,MAAA,MAAM,QAAQ,KAAA,YAAiB,UAAA,GAAa,KAAA,GAAQ,IAAI,WAAW,KAAoB,CAAA;AACvF,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AACvC,MAAA,IAAI,EAAE,kBAAkB,EAAA,CAAA,EAAK;AAC3B,QAAA,MAAM,IAAI,SAAA,CAAU,CAAA,uCAAA,EAA0C,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MAC1F;AACA,MAAA,MAAM,MAAA;AACN,MAAA,IAAI,OAAO,MAAA,EAAQ;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,KAAA,EAAsC;AACjD,IAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,MAAA,CAAO,OAAO,EAAE,YAAA,EAAc,IAAA,CAAK,KAAA,EAAO,CAAA;AACnE,IAAA,MAAM,MAAO,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,OAAA,CAAA,EAAW;AAAA,MAClD,MAAA,EAAS,MAAA;AAAA,MACT,IAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAS,EAAE,cAAA,EAAgB,YAAA,EAAc,UAAU,YAAA;AAAa,KACjE,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAErE,IAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,MAAA,OAAO,2BAAA,CAA4B,MAAM,GAAA,CAAI,IAAA,EAAiC,CAAA;AAAA,IAChF;AAEA,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AACvD,IAAA,IAAI,WAAA,CAAY,QAAA,CAAS,YAAY,CAAA,EAAG;AACtC,MAAA,MAAM,MAAM,IAAI,UAAA,CAAW,MAAM,GAAA,CAAI,aAAa,CAAA;AAClD,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,IAAI,IAAA,EAAK;AAAA,EAClB;AACF","file":"index.cjs","sourcesContent":["// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/** Base class for all NPS errors. */\nexport class NpsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = new.target.name;\n }\n}\n\n/** Raised when a wire buffer cannot be parsed as a valid NPS frame. */\nexport class NpsFrameError extends NpsError {}\n\n/** Raised when frame serialisation or deserialisation fails. */\nexport class NpsCodecError extends NpsError {}\n\n/** Raised when an anchor_id is not found in the cache. */\nexport class NpsAnchorNotFoundError extends NpsError {\n constructor(public readonly anchorId: string) {\n super(`AnchorFrame not found in cache: ${anchorId}`);\n }\n}\n\n/**\n * Raised when the same anchor_id is stored with a different schema (NPS-1 §7.2).\n * This indicates a potential anchor-poisoning attack.\n */\nexport class NpsAnchorPoisonError extends NpsError {\n constructor(public readonly anchorId: string) {\n super(\n `Anchor poisoning detected: anchor_id ${anchorId} already exists with a different schema.`,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS wire-level frame primitives: FrameType, FrameFlags, EncodingTier, FrameHeader.\n */\n\nimport { NpsFrameError } from \"./exceptions.js\";\n\n// ── FrameType ────────────────────────────────────────────────────────────────\n\n/** Unified frame byte namespace for the full NPS suite (NPS-0 §9). */\nexport enum FrameType {\n // NCP 0x01–0x0F\n ANCHOR = 0x01,\n DIFF = 0x02,\n STREAM = 0x03,\n CAPS = 0x04,\n ALIGN = 0x05, // deprecated — use AlignStream (0x43)\n\n // NWP 0x10–0x1F\n QUERY = 0x10,\n ACTION = 0x11,\n\n // NIP 0x20–0x2F\n IDENT = 0x20,\n TRUST = 0x21,\n REVOKE = 0x22,\n\n // NDP 0x30–0x3F\n ANNOUNCE = 0x30,\n RESOLVE = 0x31,\n GRAPH = 0x32,\n\n // NOP 0x40–0x4F\n TASK = 0x40,\n DELEGATE = 0x41,\n SYNC = 0x42,\n ALIGN_STREAM = 0x43,\n\n // Reserved / System 0xF0–0xFF\n ERROR = 0xFE,\n}\n\n// ── EncodingTier ─────────────────────────────────────────────────────────────\n\n/**\n * Wire encoding tier, stored in the lower 2 bits of the flags byte (NPS-1 §3.2).\n * 0x00 = Tier-1 JSON — human-readable; development / compatibility.\n * 0x01 = Tier-2 MsgPack — binary, ~60 % smaller; production default.\n */\nexport enum EncodingTier {\n JSON = 0x00,\n MSGPACK = 0x01,\n}\n\n// ── FrameFlags ───────────────────────────────────────────────────────────────\n\n/**\n * Flags byte in the NPS frame header (NPS-1 §3.2).\n * Bit layout (LSB = bit 0):\n * Bits 0–1 (T0,T1) : Encoding tier\n * Bit 2 (FINAL) : Last chunk of a StreamFrame; non-stream frames MUST set this\n * Bit 3 (ENC) : Payload encrypted\n * Bits 4–6 (RSV) : Reserved — sender MUST write 0\n * Bit 7 (EXT) : Extended 8-byte header\n */\nexport const FrameFlags = {\n NONE: 0x00,\n TIER1_JSON: 0x00,\n TIER2_MSGPACK: 0x01,\n FINAL: 0x04,\n ENCRYPTED: 0x08,\n EXT: 0x80,\n} as const;\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nexport const DEFAULT_HEADER_SIZE = 4;\nexport const EXTENDED_HEADER_SIZE = 8;\nexport const DEFAULT_MAX_PAYLOAD = 0xffff; // 65 535 bytes\nexport const EXTENDED_MAX_PAYLOAD = 0xffffffff; // 4 GiB - 1\n\n// ── FrameHeader ──────────────────────────────────────────────────────────────\n\n/**\n * NPS frame header, present at the start of every wire message (NPS-1 §3.1).\n *\n * Default (4 bytes, EXT=0):\n * Byte 0 : FrameType\n * Byte 1 : Flags\n * Byte 2–3 : PayloadLength (big-endian uint16)\n *\n * Extended (8 bytes, EXT=1):\n * Byte 0 : FrameType\n * Byte 1 : Flags (bit 7 = 1)\n * Byte 2–3 : Reserved (must be 0)\n * Byte 4–7 : PayloadLength (big-endian uint32)\n */\nexport class FrameHeader {\n constructor(\n public readonly frameType: FrameType,\n public readonly flags: number,\n public readonly payloadLength: number,\n ) {}\n\n get isExtended(): boolean {\n return (this.flags & FrameFlags.EXT) !== 0;\n }\n\n get headerSize(): number {\n return this.isExtended ? EXTENDED_HEADER_SIZE : DEFAULT_HEADER_SIZE;\n }\n\n get encodingTier(): EncodingTier {\n return (this.flags & 0x03) as EncodingTier;\n }\n\n get isFinal(): boolean {\n return (this.flags & 0x04) !== 0;\n }\n\n get isEncrypted(): boolean {\n return (this.flags & 0x08) !== 0;\n }\n\n // ── Parsing ───────────────────────────────────────────────────────────────\n\n static parse(buf: Uint8Array): FrameHeader {\n if (buf.length < 2) {\n throw new NpsFrameError(\n `Buffer too small to read frame type and flags: need >= 2 bytes, got ${buf.length}.`,\n );\n }\n\n const flags = buf[1]!;\n const ext = (flags & FrameFlags.EXT) !== 0;\n\n if (ext) {\n if (buf.length < EXTENDED_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for extended frame header: need ${EXTENDED_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint32(4, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n if (buf.length < DEFAULT_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for frame header: need ${DEFAULT_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint16(2, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n // ── Serialisation ─────────────────────────────────────────────────────────\n\n toBytes(): Uint8Array {\n if (this.isExtended) {\n const buf = new Uint8Array(EXTENDED_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, 0, false); // reserved\n view.setUint32(4, this.payloadLength, false);\n return buf;\n }\n const buf = new Uint8Array(DEFAULT_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, this.payloadLength, false);\n return buf;\n }\n\n toString(): string {\n return `FrameHeader(frameType=0x${this.frameType.toString(16).padStart(2, \"0\")}, flags=0x${this.flags.toString(16).padStart(2, \"0\")}, payloadLength=${this.payloadLength})`;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\n// ── FrameSchema ───────────────────────────────────────────────────────────────\n\nexport interface SchemaField {\n name: string;\n type: string;\n semantic?: string;\n nullable?: boolean;\n}\n\nexport interface FrameSchema {\n fields: readonly SchemaField[];\n}\n\n// ── AnchorFrame ───────────────────────────────────────────────────────────────\n\nexport class AnchorFrame implements NpsFrame {\n readonly frameType = FrameType.ANCHOR;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorId: string,\n public readonly schema: FrameSchema,\n public readonly ttl: number = 3600,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_id: this.anchorId,\n schema: { fields: this.schema.fields.map((f) => ({ ...f })) },\n ttl: this.ttl,\n };\n }\n\n static fromDict(data: Record<string, unknown>): AnchorFrame {\n const schemaRaw = data[\"schema\"] as { fields: SchemaField[] };\n return new AnchorFrame(\n data[\"anchor_id\"] as string,\n { fields: schemaRaw.fields },\n (data[\"ttl\"] as number | undefined) ?? 3600,\n );\n }\n}\n\n// ── JsonPatchOperation ────────────────────────────────────────────────────────\n\nexport interface JsonPatchOperation {\n op: string;\n path: string;\n value?: unknown;\n}\n\n// ── DiffFrame ─────────────────────────────────────────────────────────────────\n\nexport class DiffFrame implements NpsFrame {\n readonly frameType = FrameType.DIFF;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef: string,\n public readonly baseSeq: number,\n public readonly patch: readonly JsonPatchOperation[],\n public readonly entityId?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef,\n base_seq: this.baseSeq,\n patch: this.patch.map((p) => ({ ...p })),\n entity_id: this.entityId ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): DiffFrame {\n return new DiffFrame(\n data[\"anchor_ref\"] as string,\n data[\"base_seq\"] as number,\n data[\"patch\"] as JsonPatchOperation[],\n (data[\"entity_id\"] as string | null) ?? undefined,\n );\n }\n}\n\n// ── StreamFrame ───────────────────────────────────────────────────────────────\n\nexport class StreamFrame implements NpsFrame {\n readonly frameType = FrameType.STREAM;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly streamId: string,\n public readonly seq: number,\n public readonly isLast: boolean,\n public readonly data: readonly Record<string, unknown>[],\n public readonly anchorRef?: string,\n public readonly windowSize?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n stream_id: this.streamId,\n seq: this.seq,\n is_last: this.isLast,\n data: this.data,\n anchor_ref: this.anchorRef ?? null,\n window_size: this.windowSize ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): StreamFrame {\n return new StreamFrame(\n data[\"stream_id\"] as string,\n data[\"seq\"] as number,\n data[\"is_last\"] as boolean,\n data[\"data\"] as Record<string, unknown>[],\n (data[\"anchor_ref\"] as string | null) ?? undefined,\n (data[\"window_size\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── CapsFrame ─────────────────────────────────────────────────────────────────\n\nexport class CapsFrame implements NpsFrame {\n readonly frameType = FrameType.CAPS;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef: string,\n public readonly count: number,\n public readonly data: readonly Record<string, unknown>[],\n public readonly nextCursor?: string,\n public readonly tokenEst?: number,\n public readonly cached?: boolean,\n public readonly tokenizerUsed?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef,\n count: this.count,\n data: this.data,\n next_cursor: this.nextCursor ?? null,\n token_est: this.tokenEst ?? null,\n cached: this.cached ?? null,\n tokenizer_used: this.tokenizerUsed ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): CapsFrame {\n return new CapsFrame(\n data[\"anchor_ref\"] as string,\n data[\"count\"] as number,\n data[\"data\"] as Record<string, unknown>[],\n (data[\"next_cursor\"] as string | null) ?? undefined,\n (data[\"token_est\"] as number | null) ?? undefined,\n (data[\"cached\"] as boolean | null) ?? undefined,\n (data[\"tokenizer_used\"] as string | null) ?? undefined,\n );\n }\n}\n\n// ── ErrorFrame ────────────────────────────────────────────────────────────────\n\nexport class ErrorFrame implements NpsFrame {\n readonly frameType = FrameType.ERROR;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly status: string,\n public readonly error: string,\n public readonly message?: string,\n public readonly details?: Record<string, unknown>,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n status: this.status,\n error: this.error,\n message: this.message ?? null,\n details: this.details ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): ErrorFrame {\n return new ErrorFrame(\n data[\"status\"] as string,\n data[\"error\"] as string,\n (data[\"message\"] as string | null) ?? undefined,\n (data[\"details\"] as Record<string, unknown> | null) ?? undefined,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\n// ── Filter DSL ────────────────────────────────────────────────────────────────\n\nexport interface QueryOrderClause {\n field: string;\n dir: \"asc\" | \"desc\";\n}\n\nexport interface VectorSearchOptions {\n vector: readonly number[];\n topK?: number;\n minScore?: number;\n vectorField?: string;\n}\n\n// ── QueryFrame ────────────────────────────────────────────────────────────────\n\nexport class QueryFrame implements NpsFrame {\n readonly frameType = FrameType.QUERY;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef?: string,\n public readonly filter?: Record<string, unknown>,\n public readonly limit?: number,\n public readonly offset?: number,\n public readonly orderBy?: readonly QueryOrderClause[],\n public readonly fields?: readonly string[],\n public readonly vectorSearch?: VectorSearchOptions,\n public readonly depth?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef ?? null,\n filter: this.filter ?? null,\n limit: this.limit ?? null,\n offset: this.offset ?? null,\n order_by: this.orderBy ?? null,\n fields: this.fields ?? null,\n vector_search: this.vectorSearch ?? null,\n depth: this.depth ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): QueryFrame {\n return new QueryFrame(\n (data[\"anchor_ref\"] as string | null) ?? undefined,\n (data[\"filter\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"limit\"] as number | null) ?? undefined,\n (data[\"offset\"] as number | null) ?? undefined,\n (data[\"order_by\"] as QueryOrderClause[] | null) ?? undefined,\n (data[\"fields\"] as string[] | null) ?? undefined,\n (data[\"vector_search\"] as VectorSearchOptions | null) ?? undefined,\n (data[\"depth\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── ActionFrame ───────────────────────────────────────────────────────────────\n\nexport class ActionFrame implements NpsFrame {\n readonly frameType = FrameType.ACTION;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly actionId: string,\n public readonly params?: Record<string, unknown>,\n public readonly async_?: boolean,\n public readonly idempotencyKey?: string,\n public readonly timeoutMs?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n action_id: this.actionId,\n params: this.params ?? null,\n async: this.async_ ?? false,\n idempotency_key: this.idempotencyKey ?? null,\n timeout_ms: this.timeoutMs ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): ActionFrame {\n return new ActionFrame(\n data[\"action_id\"] as string,\n (data[\"params\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"async\"] as boolean | null) ?? undefined,\n (data[\"idempotency_key\"] as string | null) ?? undefined,\n (data[\"timeout_ms\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── AsyncActionResponse ───────────────────────────────────────────────────────\n\nexport interface AsyncActionResponse {\n taskId: string;\n status: string;\n pollUrl?: string | undefined;\n}\n\nexport function asyncActionResponseFromDict(data: Record<string, unknown>): AsyncActionResponse {\n const r: AsyncActionResponse = {\n taskId: data[\"task_id\"] as string,\n status: data[\"status\"] as string,\n };\n const pollUrl = data[\"poll_url\"] as string | null | undefined;\n if (pollUrl != null) r.pollUrl = pollUrl;\n return r;\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { ActionFrame, QueryFrame } from \"./frames.js\";\n\nexport function registerNwpFrames(registry: FrameRegistry): void {\n registry.register(FrameType.QUERY, QueryFrame);\n registry.register(FrameType.ACTION, ActionFrame);\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS frame codec: Tier-1 (JSON) and Tier-2 (MsgPack) encode/decode,\n * plus the top-level NpsFrameCodec dispatcher.\n */\n\nimport * as msgpack from \"@msgpack/msgpack\";\nimport { NpsCodecError } from \"./exceptions.js\";\nimport {\n DEFAULT_MAX_PAYLOAD,\n EncodingTier,\n FrameFlags,\n FrameHeader,\n FrameType,\n} from \"./frames.js\";\nimport type { FrameRegistry } from \"./registry.js\";\n\n// ── NpsFrame interface ────────────────────────────────────────────────────────\n\nexport interface NpsFrame {\n readonly frameType: FrameType;\n readonly preferredTier: EncodingTier;\n toDict(): Record<string, unknown>;\n}\n\n// ── Tier-1 JSON codec ─────────────────────────────────────────────────────────\n\nexport class Tier1JsonCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n const json = JSON.stringify(frame.toDict());\n return new TextEncoder().encode(json);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const text = new TextDecoder().decode(payload);\n const data = JSON.parse(text) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── Tier-2 MsgPack codec ──────────────────────────────────────────────────────\n\nexport class Tier2MsgPackCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n return msgpack.encode(frame.toDict());\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const data = msgpack.decode(payload) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── NpsFrameCodec (dispatcher) ────────────────────────────────────────────────\n\nexport class NpsFrameCodec {\n private readonly _registry: FrameRegistry;\n private readonly _maxPayload: number;\n private readonly _json = new Tier1JsonCodec();\n private readonly _msgpack = new Tier2MsgPackCodec();\n\n constructor(registry: FrameRegistry, options: { maxPayload?: number } = {}) {\n this._registry = registry;\n this._maxPayload = options.maxPayload ?? DEFAULT_MAX_PAYLOAD;\n }\n\n // ── Encode ────────────────────────────────────────────────────────────────\n\n encode(frame: NpsFrame, options: { overrideTier?: EncodingTier } = {}): Uint8Array {\n const tier = options.overrideTier ?? frame.preferredTier;\n const tierCodec = this._selectCodec(tier);\n\n let payload: Uint8Array;\n try {\n payload = tierCodec.encode(frame);\n } catch (err) {\n if (err instanceof NpsCodecError) throw err;\n throw new NpsCodecError(`Encode failed for 0x${frame.frameType.toString(16)}.`);\n }\n\n if (payload.length > this._maxPayload) {\n throw new NpsCodecError(\n `Encoded payload for 0x${frame.frameType.toString(16).padStart(2, \"0\")} exceeds max_frame_payload` +\n ` (${payload.length} bytes > ${this._maxPayload}). Use StreamFrame (0x03) for large payloads.`,\n );\n }\n\n const useExt = payload.length > DEFAULT_MAX_PAYLOAD;\n let flags = this._buildFlags(frame, tier);\n if (useExt) flags |= FrameFlags.EXT;\n\n const header = new FrameHeader(frame.frameType, flags, payload.length);\n const headerBytes = header.toBytes();\n const wire = new Uint8Array(headerBytes.length + payload.length);\n wire.set(headerBytes, 0);\n wire.set(payload, headerBytes.length);\n return wire;\n }\n\n // ── Decode ────────────────────────────────────────────────────────────────\n\n decode(wire: Uint8Array): NpsFrame {\n const header = FrameHeader.parse(wire);\n const payload = wire.slice(header.headerSize, header.headerSize + header.payloadLength);\n const codec = this._selectCodec(header.encodingTier);\n return codec.decode(header.frameType, payload, this._registry);\n }\n\n static peekHeader(wire: Uint8Array): FrameHeader {\n return FrameHeader.parse(wire);\n }\n\n // ── Private ───────────────────────────────────────────────────────────────\n\n private _buildFlags(frame: NpsFrame, tier: EncodingTier): number {\n let flags = tier === EncodingTier.JSON ? FrameFlags.TIER1_JSON : FrameFlags.TIER2_MSGPACK;\n\n const isStreamFrame = \"isLast\" in frame;\n const isFinal = !isStreamFrame || (frame as { isLast: boolean }).isLast;\n if (isFinal) flags |= FrameFlags.FINAL;\n\n return flags;\n }\n\n private _selectCodec(tier: EncodingTier): Tier1JsonCodec | Tier2MsgPackCodec {\n if (tier === EncodingTier.JSON) return this._json;\n if (tier === EncodingTier.MSGPACK) return this._msgpack;\n throw new NpsCodecError(`Unsupported encoding tier: 0x${(tier as number).toString(16).padStart(2, \"0\")}.`);\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NwpClient — async HTTP-mode client for NPS Neural Web Protocol nodes (NPS-2).\n */\n\nimport { NpsFrameCodec } from \"../core/codec.js\";\nimport { EncodingTier } from \"../core/frames.js\";\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { registerNcpFrames } from \"../ncp/registry.js\";\nimport { CapsFrame } from \"../ncp/frames.js\";\nimport type { StreamFrame } from \"../ncp/frames.js\";\nimport { registerNwpFrames } from \"./registry.js\";\nimport { ActionFrame, asyncActionResponseFromDict } from \"./frames.js\";\nimport type { AnchorFrame } from \"../ncp/frames.js\";\nimport type { QueryFrame, AsyncActionResponse } from \"./frames.js\";\n\nconst CONTENT_TYPE = \"application/x-nps-frame\";\n\nexport class NwpClient {\n private readonly _baseUrl: string;\n private readonly _codec: NpsFrameCodec;\n private readonly _tier: EncodingTier;\n\n constructor(\n baseUrl: string,\n options: { defaultTier?: EncodingTier; maxPayload?: number; registry?: FrameRegistry } = {},\n ) {\n this._baseUrl = baseUrl.replace(/\\/$/, \"\");\n this._tier = options.defaultTier ?? EncodingTier.MSGPACK;\n\n const registry = options.registry ?? (() => {\n const r = new FrameRegistry();\n registerNcpFrames(r);\n registerNwpFrames(r);\n return r;\n })();\n const codecOpts = options.maxPayload !== undefined ? { maxPayload: options.maxPayload } : {};\n this._codec = new NpsFrameCodec(registry, codecOpts);\n }\n\n async sendAnchor(frame: AnchorFrame): Promise<void> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/anchor`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /anchor failed: HTTP ${res.status}`);\n }\n\n async query(frame: QueryFrame): Promise<CapsFrame> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/query`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /query failed: HTTP ${res.status}`);\n\n const buf = new Uint8Array(await res.arrayBuffer());\n const result = this._codec.decode(buf);\n if (!(result instanceof CapsFrame)) {\n throw new TypeError(`Expected CapsFrame from /query, got ${result.constructor.name}.`);\n }\n return result;\n }\n\n async *stream(frame: QueryFrame): AsyncGenerator<StreamFrame> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/stream`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /stream failed: HTTP ${res.status}`);\n if (res.body === null) return;\n\n const { StreamFrame: SF } = await import(\"../ncp/frames.js\");\n\n for await (const chunk of res.body) {\n const bytes = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk as ArrayBuffer);\n if (bytes.length === 0) continue;\n const result = this._codec.decode(bytes);\n if (!(result instanceof SF)) {\n throw new TypeError(`Expected StreamFrame from /stream, got ${result.constructor.name}.`);\n }\n yield result;\n if (result.isLast) break;\n }\n }\n\n async invoke(frame: ActionFrame): Promise<unknown> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/invoke`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /invoke failed: HTTP ${res.status}`);\n\n if (frame.async_) {\n return asyncActionResponseFromDict(await res.json() as Record<string, unknown>) as AsyncActionResponse;\n }\n\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(CONTENT_TYPE)) {\n const buf = new Uint8Array(await res.arrayBuffer());\n return this._codec.decode(buf);\n }\n return res.json();\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NpsFrameError } from \"./exceptions.js\";\nimport { FrameType } from \"./frames.js\";\nimport type { NpsFrame } from \"./codec.js\";\n\nexport interface FrameClass {\n fromDict(data: Record<string, unknown>): NpsFrame;\n}\n\nexport class FrameRegistry {\n private readonly _map = new Map<FrameType, FrameClass>();\n\n register(frameType: FrameType, cls: FrameClass): void {\n this._map.set(frameType, cls);\n }\n\n resolve(frameType: FrameType): FrameClass {\n const cls = this._map.get(frameType);\n if (cls === undefined) {\n throw new NpsFrameError(\n `No frame class registered for type 0x${frameType.toString(16).padStart(2, \"0\")}.`,\n );\n }\n return cls;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { AnchorFrame, CapsFrame, DiffFrame, ErrorFrame, StreamFrame } from \"./frames.js\";\n\nexport function registerNcpFrames(registry: FrameRegistry): void {\n registry.register(FrameType.ANCHOR, AnchorFrame);\n registry.register(FrameType.DIFF, DiffFrame);\n registry.register(FrameType.STREAM, StreamFrame);\n registry.register(FrameType.CAPS, CapsFrame);\n registry.register(FrameType.ERROR, ErrorFrame);\n}\n"]}
|
package/dist/nwp/index.d.cts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { N as NpsFrame, g as FrameType, c as EncodingTier, F as FrameRegistry } from '../codec-CmHeovTV.cjs';
|
|
2
|
-
import { A as AnchorFrame, C as CapsFrame, a as StreamFrame } from '../frames-B3qLdl_g.cjs';
|
|
3
|
-
|
|
4
|
-
interface QueryOrderClause {
|
|
5
|
-
field: string;
|
|
6
|
-
dir: "asc" | "desc";
|
|
7
|
-
}
|
|
8
|
-
interface VectorSearchOptions {
|
|
9
|
-
vector: readonly number[];
|
|
10
|
-
topK?: number;
|
|
11
|
-
minScore?: number;
|
|
12
|
-
vectorField?: string;
|
|
13
|
-
}
|
|
14
|
-
declare class QueryFrame implements NpsFrame {
|
|
15
|
-
readonly anchorRef?: string | undefined;
|
|
16
|
-
readonly filter?: Record<string, unknown> | undefined;
|
|
17
|
-
readonly limit?: number | undefined;
|
|
18
|
-
readonly offset?: number | undefined;
|
|
19
|
-
readonly orderBy?: readonly QueryOrderClause[] | undefined;
|
|
20
|
-
readonly fields?: readonly string[] | undefined;
|
|
21
|
-
readonly vectorSearch?: VectorSearchOptions | undefined;
|
|
22
|
-
readonly depth?: number | undefined;
|
|
23
|
-
readonly frameType = FrameType.QUERY;
|
|
24
|
-
readonly preferredTier = EncodingTier.MSGPACK;
|
|
25
|
-
constructor(anchorRef?: string | undefined, filter?: Record<string, unknown> | undefined, limit?: number | undefined, offset?: number | undefined, orderBy?: readonly QueryOrderClause[] | undefined, fields?: readonly string[] | undefined, vectorSearch?: VectorSearchOptions | undefined, depth?: number | undefined);
|
|
26
|
-
toDict(): Record<string, unknown>;
|
|
27
|
-
static fromDict(data: Record<string, unknown>): QueryFrame;
|
|
28
|
-
}
|
|
29
|
-
declare class ActionFrame implements NpsFrame {
|
|
30
|
-
readonly actionId: string;
|
|
31
|
-
readonly params?: Record<string, unknown> | undefined;
|
|
32
|
-
readonly async_?: boolean | undefined;
|
|
33
|
-
readonly idempotencyKey?: string | undefined;
|
|
34
|
-
readonly timeoutMs?: number | undefined;
|
|
35
|
-
readonly frameType = FrameType.ACTION;
|
|
36
|
-
readonly preferredTier = EncodingTier.MSGPACK;
|
|
37
|
-
constructor(actionId: string, params?: Record<string, unknown> | undefined, async_?: boolean | undefined, idempotencyKey?: string | undefined, timeoutMs?: number | undefined);
|
|
38
|
-
toDict(): Record<string, unknown>;
|
|
39
|
-
static fromDict(data: Record<string, unknown>): ActionFrame;
|
|
40
|
-
}
|
|
41
|
-
interface AsyncActionResponse {
|
|
42
|
-
taskId: string;
|
|
43
|
-
status: string;
|
|
44
|
-
pollUrl?: string | undefined;
|
|
45
|
-
}
|
|
46
|
-
declare function asyncActionResponseFromDict(data: Record<string, unknown>): AsyncActionResponse;
|
|
47
|
-
|
|
48
|
-
declare function registerNwpFrames(registry: FrameRegistry): void;
|
|
49
|
-
|
|
50
|
-
declare class NwpClient {
|
|
51
|
-
private readonly _baseUrl;
|
|
52
|
-
private readonly _codec;
|
|
53
|
-
private readonly _tier;
|
|
54
|
-
constructor(baseUrl: string, options?: {
|
|
55
|
-
defaultTier?: EncodingTier;
|
|
56
|
-
maxPayload?: number;
|
|
57
|
-
registry?: FrameRegistry;
|
|
58
|
-
});
|
|
59
|
-
sendAnchor(frame: AnchorFrame): Promise<void>;
|
|
60
|
-
query(frame: QueryFrame): Promise<CapsFrame>;
|
|
61
|
-
stream(frame: QueryFrame): AsyncGenerator<StreamFrame>;
|
|
62
|
-
invoke(frame: ActionFrame): Promise<unknown>;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export { ActionFrame, type AsyncActionResponse, NwpClient, QueryFrame, type QueryOrderClause, type VectorSearchOptions, asyncActionResponseFromDict, registerNwpFrames };
|
package/nip-ca-server/Dockerfile
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
FROM node:22-alpine AS build
|
|
2
|
-
WORKDIR /app
|
|
3
|
-
COPY package*.json ./
|
|
4
|
-
RUN npm ci
|
|
5
|
-
COPY tsconfig.json .
|
|
6
|
-
COPY src ./src
|
|
7
|
-
COPY db ./db
|
|
8
|
-
RUN npm run build
|
|
9
|
-
|
|
10
|
-
FROM node:22-alpine AS runtime
|
|
11
|
-
WORKDIR /app
|
|
12
|
-
|
|
13
|
-
RUN addgroup -g 1001 nipca \
|
|
14
|
-
&& adduser -u 1001 -G nipca -D nipca \
|
|
15
|
-
&& mkdir -p /data && chown nipca:nipca /data
|
|
16
|
-
|
|
17
|
-
COPY --from=build /app/dist ./dist
|
|
18
|
-
COPY --from=build /app/node_modules ./node_modules
|
|
19
|
-
COPY db ./db
|
|
20
|
-
|
|
21
|
-
USER nipca
|
|
22
|
-
EXPOSE 17440
|
|
23
|
-
|
|
24
|
-
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
25
|
-
CMD wget -qO- http://localhost:17440/health || exit 1
|
|
26
|
-
|
|
27
|
-
CMD ["node", "dist/index.js"]
|
package/nip-ca-server/README.md
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# NIP CA Server — TypeScript
|
|
2
|
-
|
|
3
|
-
Fastify + better-sqlite3 implementation of the NIP Certificate Authority (NPS-3 §8).
|
|
4
|
-
|
|
5
|
-
## Quick Start
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
docker compose up -d
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Environment Variables
|
|
12
|
-
|
|
13
|
-
| Variable | Required | Default | Description |
|
|
14
|
-
|----------|----------|---------|-------------|
|
|
15
|
-
| `NIP_CA_NID` | Yes | — | CA NID |
|
|
16
|
-
| `NIP_CA_PASSPHRASE` | Yes | — | Key file passphrase |
|
|
17
|
-
| `NIP_CA_BASE_URL` | Yes | — | Public base URL |
|
|
18
|
-
| `NIP_CA_DISPLAY_NAME` | No | `NPS CA` | |
|
|
19
|
-
| `NIP_CA_KEY_FILE` | No | `/data/ca.key.enc` | |
|
|
20
|
-
| `NIP_CA_DB_PATH` | No | `/data/ca.db` | |
|
|
21
|
-
| `NIP_CA_AGENT_VALIDITY_DAYS` | No | `30` | |
|
|
22
|
-
| `NIP_CA_NODE_VALIDITY_DAYS` | No | `90` | |
|
|
23
|
-
| `NIP_CA_RENEWAL_WINDOW_DAYS` | No | `7` | |
|
|
24
|
-
| `PORT` | No | `17440` | |
|
|
25
|
-
|
|
26
|
-
## API
|
|
27
|
-
|
|
28
|
-
Same endpoints as all other NIP CA Server implementations — see [NPS-3 §8](../../spec/NPS-3-NIP.md).
|
|
29
|
-
|
|
30
|
-
## Local Development
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
npm install
|
|
34
|
-
NIP_CA_NID=urn:nps:org:ca.local \
|
|
35
|
-
NIP_CA_PASSPHRASE=dev-pass \
|
|
36
|
-
NIP_CA_BASE_URL=http://localhost:17440 \
|
|
37
|
-
npm run dev
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Stack
|
|
41
|
-
|
|
42
|
-
- **Runtime**: Node.js 22
|
|
43
|
-
- **Framework**: Fastify
|
|
44
|
-
- **Crypto**: Node.js built-in `crypto` (Ed25519 + AES-256-GCM + PBKDF2)
|
|
45
|
-
- **Storage**: better-sqlite3
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
-- NIP CA Server — SQLite schema
|
|
2
|
-
-- NPS-3 §8 | Copyright 2026 INNO LOTUS PTY LTD | Apache-2.0
|
|
3
|
-
|
|
4
|
-
CREATE TABLE IF NOT EXISTS nip_certificates (
|
|
5
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
6
|
-
nid TEXT NOT NULL,
|
|
7
|
-
entity_type TEXT NOT NULL CHECK (entity_type IN ('agent','node','operator')),
|
|
8
|
-
serial TEXT NOT NULL UNIQUE,
|
|
9
|
-
pub_key TEXT NOT NULL,
|
|
10
|
-
capabilities TEXT NOT NULL DEFAULT '[]',
|
|
11
|
-
scope_json TEXT NOT NULL DEFAULT '{}',
|
|
12
|
-
issued_by TEXT NOT NULL,
|
|
13
|
-
issued_at TEXT NOT NULL,
|
|
14
|
-
expires_at TEXT NOT NULL,
|
|
15
|
-
revoked_at TEXT,
|
|
16
|
-
revoke_reason TEXT,
|
|
17
|
-
metadata_json TEXT,
|
|
18
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ','now'))
|
|
19
|
-
);
|
|
20
|
-
|
|
21
|
-
CREATE INDEX IF NOT EXISTS idx_nip_certs_nid ON nip_certificates (nid, issued_at DESC);
|
|
22
|
-
CREATE INDEX IF NOT EXISTS idx_nip_certs_serial ON nip_certificates (serial);
|
|
23
|
-
CREATE INDEX IF NOT EXISTS idx_nip_certs_revoked ON nip_certificates (revoked_at)
|
|
24
|
-
WHERE revoked_at IS NOT NULL;
|
|
25
|
-
CREATE INDEX IF NOT EXISTS idx_nip_certs_expires ON nip_certificates (expires_at);
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
version: "3.9"
|
|
2
|
-
|
|
3
|
-
services:
|
|
4
|
-
nip-ca:
|
|
5
|
-
build: .
|
|
6
|
-
restart: unless-stopped
|
|
7
|
-
ports:
|
|
8
|
-
- "${NIP_PORT:-17440}:17440"
|
|
9
|
-
volumes:
|
|
10
|
-
- ca_data:/data
|
|
11
|
-
environment:
|
|
12
|
-
NIP_CA_NID: ${NIP_CA_NID:?NIP_CA_NID is required}
|
|
13
|
-
NIP_CA_PASSPHRASE: ${NIP_CA_PASSPHRASE:?NIP_CA_PASSPHRASE is required}
|
|
14
|
-
NIP_CA_BASE_URL: ${NIP_CA_BASE_URL:?NIP_CA_BASE_URL is required}
|
|
15
|
-
NIP_CA_DISPLAY_NAME: ${NIP_CA_DISPLAY_NAME:-NPS CA}
|
|
16
|
-
NIP_CA_KEY_FILE: /data/ca.key.enc
|
|
17
|
-
NIP_CA_DB_PATH: /data/ca.db
|
|
18
|
-
NIP_CA_AGENT_VALIDITY_DAYS: ${NIP_CA_AGENT_VALIDITY_DAYS:-30}
|
|
19
|
-
NIP_CA_NODE_VALIDITY_DAYS: ${NIP_CA_NODE_VALIDITY_DAYS:-90}
|
|
20
|
-
NIP_CA_RENEWAL_WINDOW_DAYS: ${NIP_CA_RENEWAL_WINDOW_DAYS:-7}
|
|
21
|
-
healthcheck:
|
|
22
|
-
test: ["CMD", "wget", "-qO-", "http://localhost:17440/health"]
|
|
23
|
-
interval: 30s
|
|
24
|
-
timeout: 5s
|
|
25
|
-
retries: 3
|
|
26
|
-
start_period: 10s
|
|
27
|
-
|
|
28
|
-
volumes:
|
|
29
|
-
ca_data:
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@labacacia/nip-ca-server",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "NIP CA Server — TypeScript/Node.js",
|
|
5
|
-
"license": "Apache-2.0",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"main": "dist/index.js",
|
|
8
|
-
"scripts": {
|
|
9
|
-
"build": "tsc",
|
|
10
|
-
"start": "node dist/index.js",
|
|
11
|
-
"dev": "tsx src/index.ts"
|
|
12
|
-
},
|
|
13
|
-
"dependencies": {
|
|
14
|
-
"better-sqlite3": "^11.7.0",
|
|
15
|
-
"fastify": "^5.2.1"
|
|
16
|
-
},
|
|
17
|
-
"devDependencies": {
|
|
18
|
-
"@types/better-sqlite3": "^7.6.12",
|
|
19
|
-
"@types/node": "^22.10.5",
|
|
20
|
-
"tsx": "^4.19.2",
|
|
21
|
-
"typescript": "^5.7.3"
|
|
22
|
-
}
|
|
23
|
-
}
|
package/nip-ca-server/src/ca.ts
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import * as crypto from "node:crypto";
|
|
4
|
-
import * as fs from "node:fs";
|
|
5
|
-
import * as path from "node:path";
|
|
6
|
-
|
|
7
|
-
const PBKDF2_ITERS = 600_000;
|
|
8
|
-
const SALT_LEN = 16;
|
|
9
|
-
const NONCE_LEN = 12;
|
|
10
|
-
const KEY_LEN = 32;
|
|
11
|
-
|
|
12
|
-
export interface KeyEnvelope {
|
|
13
|
-
version: number;
|
|
14
|
-
algorithm: string;
|
|
15
|
-
pub_key: string;
|
|
16
|
-
salt: string;
|
|
17
|
-
nonce: string;
|
|
18
|
-
ciphertext: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function deriveKey(passphrase: string, salt: Buffer): Buffer {
|
|
22
|
-
return crypto.pbkdf2Sync(passphrase, salt, PBKDF2_ITERS, KEY_LEN, "sha256");
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function pubKeyString(pubKey: crypto.KeyObject): string {
|
|
26
|
-
const raw = pubKey.export({ type: "pkcs8", format: "der" });
|
|
27
|
-
// Ed25519 PKCS8 DER = 44 bytes; raw public key is last 32 bytes
|
|
28
|
-
const rawPub = raw.subarray(raw.length - 32);
|
|
29
|
-
return "ed25519:" + rawPub.toString("hex");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function rawPrivateBytes(privKey: crypto.KeyObject): Buffer {
|
|
33
|
-
// Ed25519 private key in JWK → d field is base64url-encoded 32-byte seed
|
|
34
|
-
const jwk = privKey.export({ format: "jwk" }) as { d: string };
|
|
35
|
-
return Buffer.from(jwk.d, "base64url");
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function generateKey(): crypto.KeyObject {
|
|
39
|
-
const { privateKey } = crypto.generateKeyPairSync("ed25519");
|
|
40
|
-
return privateKey;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function saveKey(privKey: crypto.KeyObject, filePath: string, passphrase: string): void {
|
|
44
|
-
const salt = crypto.randomBytes(SALT_LEN);
|
|
45
|
-
const nonce = crypto.randomBytes(NONCE_LEN);
|
|
46
|
-
const dk = deriveKey(passphrase, salt);
|
|
47
|
-
const seed = rawPrivateBytes(privKey);
|
|
48
|
-
const cipher = crypto.createCipheriv("aes-256-gcm", dk, nonce);
|
|
49
|
-
const encrypted = Buffer.concat([cipher.update(seed), cipher.final()]);
|
|
50
|
-
const tag = cipher.getAuthTag();
|
|
51
|
-
const ciphertext = Buffer.concat([encrypted, tag]);
|
|
52
|
-
const { privateKey: tmpPriv, publicKey: tmpPub } = crypto.generateKeyPairSync("ed25519", {
|
|
53
|
-
privateKeyEncoding: { type: "pkcs8", format: "der" },
|
|
54
|
-
publicKeyEncoding: { type: "spki", format: "der" },
|
|
55
|
-
});
|
|
56
|
-
// Re-derive public key from the same private key
|
|
57
|
-
const pubStr = pubKeyString(crypto.createPublicKey(privKey));
|
|
58
|
-
const envelope: KeyEnvelope = {
|
|
59
|
-
version: 1,
|
|
60
|
-
algorithm: "ed25519",
|
|
61
|
-
pub_key: pubStr,
|
|
62
|
-
salt: salt.toString("hex"),
|
|
63
|
-
nonce: nonce.toString("hex"),
|
|
64
|
-
ciphertext: ciphertext.toString("hex"),
|
|
65
|
-
};
|
|
66
|
-
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
67
|
-
fs.writeFileSync(filePath, JSON.stringify(envelope), { mode: 0o600 });
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export function loadKey(filePath: string, passphrase: string): crypto.KeyObject {
|
|
71
|
-
const env: KeyEnvelope = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
72
|
-
const salt = Buffer.from(env.salt, "hex");
|
|
73
|
-
const nonce = Buffer.from(env.nonce, "hex");
|
|
74
|
-
const ctBuf = Buffer.from(env.ciphertext, "hex");
|
|
75
|
-
const tag = ctBuf.subarray(ctBuf.length - 16);
|
|
76
|
-
const ciphertext = ctBuf.subarray(0, ctBuf.length - 16);
|
|
77
|
-
const dk = deriveKey(passphrase, salt);
|
|
78
|
-
const decipher = crypto.createDecipheriv("aes-256-gcm", dk, nonce);
|
|
79
|
-
decipher.setAuthTag(tag);
|
|
80
|
-
let seed: Buffer;
|
|
81
|
-
try {
|
|
82
|
-
seed = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
83
|
-
} catch {
|
|
84
|
-
throw new Error("Key decryption failed — wrong passphrase?");
|
|
85
|
-
}
|
|
86
|
-
return crypto.createPrivateKey({ key: seed, format: "der", type: "pkcs8" } as any) ||
|
|
87
|
-
(() => {
|
|
88
|
-
// Construct PKCS8 DER for Ed25519 seed manually
|
|
89
|
-
// PKCS8 for Ed25519 = 0x302e020100300506032b657004220420 + 32-byte seed
|
|
90
|
-
const pkcs8Header = Buffer.from("302e020100300506032b657004220420", "hex");
|
|
91
|
-
const der = Buffer.concat([pkcs8Header, seed]);
|
|
92
|
-
return crypto.createPrivateKey({ key: der, format: "der", type: "pkcs8" });
|
|
93
|
-
})();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function canonicalJson(obj: Record<string, unknown>): Buffer {
|
|
97
|
-
const sorted = Object.keys(obj).sort().reduce((acc, k) => {
|
|
98
|
-
(acc as any)[k] = (obj as any)[k];
|
|
99
|
-
return acc;
|
|
100
|
-
}, {} as Record<string, unknown>);
|
|
101
|
-
return Buffer.from(JSON.stringify(sorted), "utf8");
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export function signDict(privKey: crypto.KeyObject, obj: Record<string, unknown>): string {
|
|
105
|
-
const sig = crypto.sign(null, canonicalJson(obj), privKey);
|
|
106
|
-
return "ed25519:" + sig.toString("base64");
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export interface IssuedCert {
|
|
110
|
-
nid: string;
|
|
111
|
-
pub_key: string;
|
|
112
|
-
capabilities: string[];
|
|
113
|
-
scope: Record<string, unknown>;
|
|
114
|
-
issued_by: string;
|
|
115
|
-
issued_at: string;
|
|
116
|
-
expires_at: string;
|
|
117
|
-
serial: string;
|
|
118
|
-
signature: string;
|
|
119
|
-
metadata?: Record<string, unknown>;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export function issueCert(
|
|
123
|
-
privKey: crypto.KeyObject,
|
|
124
|
-
caNid: string,
|
|
125
|
-
subjectNid: string,
|
|
126
|
-
subjectPubKey: string,
|
|
127
|
-
capabilities: string[],
|
|
128
|
-
scope: Record<string, unknown>,
|
|
129
|
-
validityDays: number,
|
|
130
|
-
serial: string,
|
|
131
|
-
metadata?: Record<string, unknown> | null,
|
|
132
|
-
): IssuedCert {
|
|
133
|
-
const now = new Date();
|
|
134
|
-
const expires = new Date(now.getTime() + validityDays * 86400_000);
|
|
135
|
-
const fmt = (d: Date) => d.toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
136
|
-
const unsigned: Record<string, unknown> = {
|
|
137
|
-
capabilities,
|
|
138
|
-
expires_at: fmt(expires),
|
|
139
|
-
issued_at: fmt(now),
|
|
140
|
-
issued_by: caNid,
|
|
141
|
-
nid: subjectNid,
|
|
142
|
-
pub_key: subjectPubKey,
|
|
143
|
-
scope,
|
|
144
|
-
serial,
|
|
145
|
-
};
|
|
146
|
-
const signature = signDict(privKey, unsigned);
|
|
147
|
-
const cert: IssuedCert = { ...unsigned as any, signature };
|
|
148
|
-
if (metadata) cert.metadata = metadata;
|
|
149
|
-
return cert;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export function generateNid(domain: string, entityType: string): string {
|
|
153
|
-
const uid = crypto.randomBytes(8).toString("hex");
|
|
154
|
-
return `urn:nps:${entityType}:${domain}:${uid}`;
|
|
155
|
-
}
|
package/nip-ca-server/src/db.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import Database from "better-sqlite3";
|
|
4
|
-
import * as fs from "node:fs";
|
|
5
|
-
import * as path from "node:path";
|
|
6
|
-
|
|
7
|
-
const SCHEMA_PATH = path.join(__dirname, "..", "db", "001_init.sql");
|
|
8
|
-
|
|
9
|
-
export interface CertRecord {
|
|
10
|
-
id: number;
|
|
11
|
-
nid: string;
|
|
12
|
-
entity_type: string;
|
|
13
|
-
serial: string;
|
|
14
|
-
pub_key: string;
|
|
15
|
-
capabilities: string[];
|
|
16
|
-
scope: Record<string, unknown>;
|
|
17
|
-
issued_by: string;
|
|
18
|
-
issued_at: string;
|
|
19
|
-
expires_at: string;
|
|
20
|
-
revoked_at: string | null;
|
|
21
|
-
revoke_reason: string | null;
|
|
22
|
-
metadata: Record<string, unknown> | null;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export class CaDb {
|
|
26
|
-
private db: Database.Database;
|
|
27
|
-
|
|
28
|
-
constructor(dbPath: string) {
|
|
29
|
-
fs.mkdirSync(path.dirname(dbPath), { recursive: true });
|
|
30
|
-
this.db = new Database(dbPath);
|
|
31
|
-
this.db.pragma("journal_mode = WAL");
|
|
32
|
-
this.db.pragma("foreign_keys = ON");
|
|
33
|
-
this.db.exec(fs.readFileSync(SCHEMA_PATH, "utf8"));
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
nextSerial(): string {
|
|
37
|
-
const row = this.db
|
|
38
|
-
.prepare(
|
|
39
|
-
"SELECT COALESCE(MAX(CAST(REPLACE(serial,'0x','') AS INTEGER)),0)+1 AS n FROM nip_certificates",
|
|
40
|
-
)
|
|
41
|
-
.get() as { n: number };
|
|
42
|
-
return `0x${row.n.toString(16).toUpperCase().padStart(6, "0")}`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
insert(rec: {
|
|
46
|
-
nid: string; entity_type: string; serial: string; pub_key: string;
|
|
47
|
-
capabilities: string[]; scope: Record<string, unknown>; issued_by: string;
|
|
48
|
-
issued_at: string; expires_at: string; metadata?: Record<string, unknown> | null;
|
|
49
|
-
}): number {
|
|
50
|
-
const result = this.db.prepare(
|
|
51
|
-
`INSERT INTO nip_certificates
|
|
52
|
-
(nid, entity_type, serial, pub_key, capabilities, scope_json,
|
|
53
|
-
issued_by, issued_at, expires_at, metadata_json)
|
|
54
|
-
VALUES (?,?,?,?,?,?,?,?,?,?)`,
|
|
55
|
-
).run(
|
|
56
|
-
rec.nid, rec.entity_type, rec.serial, rec.pub_key,
|
|
57
|
-
JSON.stringify(rec.capabilities), JSON.stringify(rec.scope),
|
|
58
|
-
rec.issued_by, rec.issued_at, rec.expires_at,
|
|
59
|
-
rec.metadata ? JSON.stringify(rec.metadata) : null,
|
|
60
|
-
);
|
|
61
|
-
return Number(result.lastInsertRowid);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
getActive(nid: string): CertRecord | null {
|
|
65
|
-
const row = this.db.prepare(
|
|
66
|
-
`SELECT * FROM nip_certificates
|
|
67
|
-
WHERE nid=? AND revoked_at IS NULL
|
|
68
|
-
ORDER BY issued_at DESC LIMIT 1`,
|
|
69
|
-
).get(nid);
|
|
70
|
-
return row ? this._toRecord(row as any) : null;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
revoke(nid: string, reason: string): boolean {
|
|
74
|
-
const now = new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
75
|
-
const r = this.db.prepare(
|
|
76
|
-
"UPDATE nip_certificates SET revoked_at=?, revoke_reason=? WHERE nid=? AND revoked_at IS NULL",
|
|
77
|
-
).run(now, reason, nid);
|
|
78
|
-
return r.changes > 0;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
crl(): Array<{ serial: string; nid: string; revoked_at: string; revoke_reason: string | null }> {
|
|
82
|
-
return this.db.prepare(
|
|
83
|
-
"SELECT serial, nid, revoked_at, revoke_reason FROM nip_certificates WHERE revoked_at IS NOT NULL ORDER BY revoked_at DESC",
|
|
84
|
-
).all() as any;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
private _toRecord(row: any): CertRecord {
|
|
88
|
-
return {
|
|
89
|
-
id: row.id,
|
|
90
|
-
nid: row.nid,
|
|
91
|
-
entity_type: row.entity_type,
|
|
92
|
-
serial: row.serial,
|
|
93
|
-
pub_key: row.pub_key,
|
|
94
|
-
capabilities: JSON.parse(row.capabilities),
|
|
95
|
-
scope: JSON.parse(row.scope_json),
|
|
96
|
-
issued_by: row.issued_by,
|
|
97
|
-
issued_at: row.issued_at,
|
|
98
|
-
expires_at: row.expires_at,
|
|
99
|
-
revoked_at: row.revoked_at ?? null,
|
|
100
|
-
revoke_reason: row.revoke_reason ?? null,
|
|
101
|
-
metadata: row.metadata_json ? JSON.parse(row.metadata_json) : null,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
}
|