@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
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export interface ObservationWindow {
|
|
2
|
+
start: string;
|
|
3
|
+
end: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const IncidentType: {
|
|
6
|
+
readonly Other: "other";
|
|
7
|
+
readonly CertRevoked: "cert-revoked";
|
|
8
|
+
readonly RateLimitViolation: "rate-limit-violation";
|
|
9
|
+
readonly TosViolation: "tos-violation";
|
|
10
|
+
readonly ScrapingPattern: "scraping-pattern";
|
|
11
|
+
readonly PaymentDefault: "payment-default";
|
|
12
|
+
readonly ContractDispute: "contract-dispute";
|
|
13
|
+
readonly ImpersonationClaim: "impersonation-claim";
|
|
14
|
+
readonly PositiveAttestation: "positive-attestation";
|
|
15
|
+
};
|
|
16
|
+
export type IncidentType = typeof IncidentType[keyof typeof IncidentType];
|
|
17
|
+
export declare const Severity: {
|
|
18
|
+
readonly Info: 0;
|
|
19
|
+
readonly Minor: 1;
|
|
20
|
+
readonly Moderate: 2;
|
|
21
|
+
readonly Major: 3;
|
|
22
|
+
readonly Critical: 4;
|
|
23
|
+
};
|
|
24
|
+
export type Severity = typeof Severity[keyof typeof Severity];
|
|
25
|
+
export interface ReputationLogEntry {
|
|
26
|
+
v: number;
|
|
27
|
+
log_id: string;
|
|
28
|
+
seq: number;
|
|
29
|
+
timestamp: string;
|
|
30
|
+
subject_nid: string;
|
|
31
|
+
incident: string;
|
|
32
|
+
incidentRaw?: string;
|
|
33
|
+
severity: string;
|
|
34
|
+
window?: ObservationWindow;
|
|
35
|
+
observation?: unknown;
|
|
36
|
+
evidence_ref?: string;
|
|
37
|
+
evidence_sha256?: string;
|
|
38
|
+
issuer_nid: string;
|
|
39
|
+
signature: string;
|
|
40
|
+
}
|
|
41
|
+
export interface SignedTreeHead {
|
|
42
|
+
log_id: string;
|
|
43
|
+
tree_size: number;
|
|
44
|
+
timestamp: string;
|
|
45
|
+
sha256_root_hash: string;
|
|
46
|
+
signature: string;
|
|
47
|
+
}
|
|
48
|
+
export interface InclusionProof {
|
|
49
|
+
seq: number;
|
|
50
|
+
leaf_index: number;
|
|
51
|
+
tree_size: number;
|
|
52
|
+
leaf_hash: string;
|
|
53
|
+
audit_path: string[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Sign a ReputationLogEntry and return a new entry with `signature` set.
|
|
57
|
+
* The private key must be a 32-byte raw Ed25519 private key.
|
|
58
|
+
*/
|
|
59
|
+
export declare function signEntry(privKey: Uint8Array, entry: ReputationLogEntry): ReputationLogEntry;
|
|
60
|
+
/**
|
|
61
|
+
* Verify the `signature` field of a ReputationLogEntry against the given
|
|
62
|
+
* Ed25519 public key (32-byte raw).
|
|
63
|
+
*/
|
|
64
|
+
export declare function verifyEntry(pubKey: Uint8Array, entry: ReputationLogEntry): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Parse a wire severity string. Throws an Error for unknown values
|
|
67
|
+
* (no forward-compat — callers must upgrade to handle new severity levels).
|
|
68
|
+
*/
|
|
69
|
+
export declare function parseSeverity(wire: string): Severity;
|
|
70
|
+
/**
|
|
71
|
+
* Parse a wire incident string. Unknown values map to `IncidentType.Other`
|
|
72
|
+
* (forward-compat); the original string is returned as `incidentRaw`.
|
|
73
|
+
*/
|
|
74
|
+
export declare function parseIncident(wire: string): {
|
|
75
|
+
incident: IncidentType;
|
|
76
|
+
incidentRaw?: string;
|
|
77
|
+
};
|
|
78
|
+
export declare class ReputationLogException extends Error {
|
|
79
|
+
readonly nipErrorCode: string;
|
|
80
|
+
readonly npsStatus: string;
|
|
81
|
+
constructor(nipErrorCode: string, npsStatus: string, message?: string);
|
|
82
|
+
}
|
|
83
|
+
export declare class ReputationLogClient {
|
|
84
|
+
private readonly baseUrl;
|
|
85
|
+
constructor(baseUrl: string);
|
|
86
|
+
/**
|
|
87
|
+
* POST /v1/log/entries — submit a signed entry.
|
|
88
|
+
* Returns the server-echoed entry with seq/timestamp/log_id filled in.
|
|
89
|
+
*/
|
|
90
|
+
submit(entry: ReputationLogEntry): Promise<ReputationLogEntry>;
|
|
91
|
+
/**
|
|
92
|
+
* GET /v1/log/entries — query entries.
|
|
93
|
+
* @param options.nid Filter by subject NID.
|
|
94
|
+
* @param options.sinceSeq Return only entries with seq > sinceSeq.
|
|
95
|
+
*/
|
|
96
|
+
query(options?: {
|
|
97
|
+
nid?: string;
|
|
98
|
+
sinceSeq?: number;
|
|
99
|
+
}): Promise<ReputationLogEntry[]>;
|
|
100
|
+
/** GET /v1/log/sth — current SignedTreeHead. */
|
|
101
|
+
getSth(): Promise<SignedTreeHead>;
|
|
102
|
+
/** GET /v1/log/proof?seq=<seq> — InclusionProof for a log entry. */
|
|
103
|
+
getProof(seq: number): Promise<InclusionProof>;
|
|
104
|
+
/** GET /v1/log/gossip/sth — gossip SignedTreeHead. */
|
|
105
|
+
getGossipSth(): Promise<SignedTreeHead>;
|
|
106
|
+
/**
|
|
107
|
+
* Verify that `entry` is included in the log at the position described by
|
|
108
|
+
* `proof`, under the given `sth`.
|
|
109
|
+
*
|
|
110
|
+
* Merkle construction (RFC 9162):
|
|
111
|
+
* leaf_hash = SHA256(0x00 || utf8(canonical_all_sorted_json_of_entry))
|
|
112
|
+
* node_hash = SHA256(0x01 || left_bytes || right_bytes)
|
|
113
|
+
*/
|
|
114
|
+
static verifyInclusion(proof: InclusionProof, sth: SignedTreeHead, entry: ReputationLogEntry): boolean;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=reputation-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reputation-client.d.ts","sourceRoot":"","sources":["../../src/nip/reputation-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* ReputationLogClient — NPS-RFC-0004 reputation log HTTP client, signing
|
|
5
|
+
* helpers, and Merkle inclusion verification.
|
|
6
|
+
*/
|
|
7
|
+
import * as ed25519 from "@noble/ed25519";
|
|
8
|
+
import { sha512 } from "@noble/hashes/sha512";
|
|
9
|
+
import { sha256 } from "@noble/hashes/sha256";
|
|
10
|
+
// noble/ed25519 requires sha512 to be set explicitly in Node environments
|
|
11
|
+
ed25519.etc.sha512Sync = (...m) => sha512(ed25519.etc.concatBytes(...m));
|
|
12
|
+
// ── Base64url helpers ────────────────────────────────────────────────────────
|
|
13
|
+
function base64urlEncode(bytes) {
|
|
14
|
+
return Buffer.from(bytes)
|
|
15
|
+
.toString("base64")
|
|
16
|
+
.replace(/\+/g, "-")
|
|
17
|
+
.replace(/\//g, "_")
|
|
18
|
+
.replace(/=/g, "");
|
|
19
|
+
}
|
|
20
|
+
function base64urlDecode(s) {
|
|
21
|
+
// Re-pad to a multiple of 4
|
|
22
|
+
const padded = s.replace(/-/g, "+").replace(/_/g, "/");
|
|
23
|
+
const pad = (4 - (padded.length % 4)) % 4;
|
|
24
|
+
return new Uint8Array(Buffer.from(padded + "=".repeat(pad), "base64"));
|
|
25
|
+
}
|
|
26
|
+
// ── Sorted-key canonical JSON ────────────────────────────────────────────────
|
|
27
|
+
/**
|
|
28
|
+
* Returns a value where every object in the tree has its keys sorted
|
|
29
|
+
* alphabetically (deeply). Arrays and primitives pass through unchanged.
|
|
30
|
+
*/
|
|
31
|
+
function sortedValue(v) {
|
|
32
|
+
if (v === null || typeof v !== "object")
|
|
33
|
+
return v;
|
|
34
|
+
if (Array.isArray(v))
|
|
35
|
+
return v.map(sortedValue);
|
|
36
|
+
const obj = v;
|
|
37
|
+
const sorted = {};
|
|
38
|
+
for (const k of Object.keys(obj).sort()) {
|
|
39
|
+
sorted[k] = sortedValue(obj[k]);
|
|
40
|
+
}
|
|
41
|
+
return sorted;
|
|
42
|
+
}
|
|
43
|
+
/** Canonical JSON with all object keys sorted recursively. */
|
|
44
|
+
function sortedJson(obj) {
|
|
45
|
+
return JSON.stringify(sortedValue(obj));
|
|
46
|
+
}
|
|
47
|
+
export const IncidentType = {
|
|
48
|
+
Other: "other",
|
|
49
|
+
CertRevoked: "cert-revoked",
|
|
50
|
+
RateLimitViolation: "rate-limit-violation",
|
|
51
|
+
TosViolation: "tos-violation",
|
|
52
|
+
ScrapingPattern: "scraping-pattern",
|
|
53
|
+
PaymentDefault: "payment-default",
|
|
54
|
+
ContractDispute: "contract-dispute",
|
|
55
|
+
ImpersonationClaim: "impersonation-claim",
|
|
56
|
+
PositiveAttestation: "positive-attestation",
|
|
57
|
+
};
|
|
58
|
+
export const Severity = {
|
|
59
|
+
Info: 0,
|
|
60
|
+
Minor: 1,
|
|
61
|
+
Moderate: 2,
|
|
62
|
+
Major: 3,
|
|
63
|
+
Critical: 4,
|
|
64
|
+
};
|
|
65
|
+
/** Maps wire severity strings to numeric values. Throws on unknown values. */
|
|
66
|
+
const SEVERITY_WIRE = {
|
|
67
|
+
info: Severity.Info,
|
|
68
|
+
minor: Severity.Minor,
|
|
69
|
+
moderate: Severity.Moderate,
|
|
70
|
+
major: Severity.Major,
|
|
71
|
+
critical: Severity.Critical,
|
|
72
|
+
};
|
|
73
|
+
/** Known incident wire strings for forward-compat mapping. */
|
|
74
|
+
const KNOWN_INCIDENTS = new Set(Object.values(IncidentType).filter(v => v !== "other"));
|
|
75
|
+
// ── Signing helpers ──────────────────────────────────────────────────────────
|
|
76
|
+
/**
|
|
77
|
+
* Build the canonical bytes to sign for a ReputationLogEntry.
|
|
78
|
+
* The `signature` field is excluded; all remaining keys are sorted recursively.
|
|
79
|
+
*/
|
|
80
|
+
function entrySigningBytes(entry) {
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
82
|
+
const { signature, ...rest } = entry;
|
|
83
|
+
return new TextEncoder().encode(sortedJson(rest));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Sign a ReputationLogEntry and return a new entry with `signature` set.
|
|
87
|
+
* The private key must be a 32-byte raw Ed25519 private key.
|
|
88
|
+
*/
|
|
89
|
+
export function signEntry(privKey, entry) {
|
|
90
|
+
const bytes = entrySigningBytes(entry);
|
|
91
|
+
const sig = ed25519.sign(bytes, privKey);
|
|
92
|
+
return { ...entry, signature: `ed25519:${base64urlEncode(sig)}` };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Verify the `signature` field of a ReputationLogEntry against the given
|
|
96
|
+
* Ed25519 public key (32-byte raw).
|
|
97
|
+
*/
|
|
98
|
+
export function verifyEntry(pubKey, entry) {
|
|
99
|
+
if (!entry.signature.startsWith("ed25519:"))
|
|
100
|
+
return false;
|
|
101
|
+
try {
|
|
102
|
+
const sigBytes = base64urlDecode(entry.signature.slice("ed25519:".length));
|
|
103
|
+
const bytes = entrySigningBytes(entry);
|
|
104
|
+
return ed25519.verify(sigBytes, bytes, pubKey);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// ── Severity / incident parsing ──────────────────────────────────────────────
|
|
111
|
+
/**
|
|
112
|
+
* Parse a wire severity string. Throws an Error for unknown values
|
|
113
|
+
* (no forward-compat — callers must upgrade to handle new severity levels).
|
|
114
|
+
*/
|
|
115
|
+
export function parseSeverity(wire) {
|
|
116
|
+
const v = SEVERITY_WIRE[wire.toLowerCase()];
|
|
117
|
+
if (v === undefined)
|
|
118
|
+
throw new Error(`Unknown NPS severity value: "${wire}"`);
|
|
119
|
+
return v;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Parse a wire incident string. Unknown values map to `IncidentType.Other`
|
|
123
|
+
* (forward-compat); the original string is returned as `incidentRaw`.
|
|
124
|
+
*/
|
|
125
|
+
export function parseIncident(wire) {
|
|
126
|
+
if (KNOWN_INCIDENTS.has(wire))
|
|
127
|
+
return { incident: wire };
|
|
128
|
+
return { incident: IncidentType.Other, incidentRaw: wire };
|
|
129
|
+
}
|
|
130
|
+
// ── Merkle verification ──────────────────────────────────────────────────────
|
|
131
|
+
function bytesEqual(a, b) {
|
|
132
|
+
if (a.length !== b.length)
|
|
133
|
+
return false;
|
|
134
|
+
for (let i = 0; i < a.length; i++)
|
|
135
|
+
if (a[i] !== b[i])
|
|
136
|
+
return false;
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
// ── HTTP client ──────────────────────────────────────────────────────────────
|
|
140
|
+
export class ReputationLogException extends Error {
|
|
141
|
+
nipErrorCode;
|
|
142
|
+
npsStatus;
|
|
143
|
+
constructor(nipErrorCode, npsStatus, message) {
|
|
144
|
+
super(message);
|
|
145
|
+
this.nipErrorCode = nipErrorCode;
|
|
146
|
+
this.npsStatus = npsStatus;
|
|
147
|
+
this.name = "ReputationLogException";
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/** Throw a ReputationLogException for non-ok HTTP responses. */
|
|
151
|
+
async function ensureOk(resp) {
|
|
152
|
+
if (resp.ok)
|
|
153
|
+
return;
|
|
154
|
+
let nipCode = "NIP-UNKNOWN";
|
|
155
|
+
let npsStatus = String(resp.status);
|
|
156
|
+
let message = resp.statusText;
|
|
157
|
+
try {
|
|
158
|
+
const body = await resp.json();
|
|
159
|
+
if (body.error)
|
|
160
|
+
nipCode = body.error;
|
|
161
|
+
if (body.status)
|
|
162
|
+
npsStatus = body.status;
|
|
163
|
+
if (body.message)
|
|
164
|
+
message = body.message;
|
|
165
|
+
}
|
|
166
|
+
catch { /* ignore parse failures */ }
|
|
167
|
+
throw new ReputationLogException(nipCode, npsStatus, message);
|
|
168
|
+
}
|
|
169
|
+
export class ReputationLogClient {
|
|
170
|
+
baseUrl;
|
|
171
|
+
constructor(baseUrl) {
|
|
172
|
+
// Strip trailing slash for consistent path construction
|
|
173
|
+
this.baseUrl = baseUrl.replace(/\/+$/, "");
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* POST /v1/log/entries — submit a signed entry.
|
|
177
|
+
* Returns the server-echoed entry with seq/timestamp/log_id filled in.
|
|
178
|
+
*/
|
|
179
|
+
async submit(entry) {
|
|
180
|
+
const resp = await fetch(`${this.baseUrl}/v1/log/entries`, {
|
|
181
|
+
method: "POST",
|
|
182
|
+
headers: { "Content-Type": "application/json" },
|
|
183
|
+
body: JSON.stringify(entry),
|
|
184
|
+
});
|
|
185
|
+
await ensureOk(resp);
|
|
186
|
+
return resp.json();
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* GET /v1/log/entries — query entries.
|
|
190
|
+
* @param options.nid Filter by subject NID.
|
|
191
|
+
* @param options.sinceSeq Return only entries with seq > sinceSeq.
|
|
192
|
+
*/
|
|
193
|
+
async query(options) {
|
|
194
|
+
const params = new URLSearchParams();
|
|
195
|
+
if (options?.nid !== undefined)
|
|
196
|
+
params.set("nid", options.nid);
|
|
197
|
+
if (options?.sinceSeq !== undefined)
|
|
198
|
+
params.set("since", String(options.sinceSeq));
|
|
199
|
+
const qs = params.size > 0 ? `?${params.toString()}` : "";
|
|
200
|
+
const resp = await fetch(`${this.baseUrl}/v1/log/entries${qs}`);
|
|
201
|
+
await ensureOk(resp);
|
|
202
|
+
const body = await resp.json();
|
|
203
|
+
return body.entries;
|
|
204
|
+
}
|
|
205
|
+
/** GET /v1/log/sth — current SignedTreeHead. */
|
|
206
|
+
async getSth() {
|
|
207
|
+
const resp = await fetch(`${this.baseUrl}/v1/log/sth`);
|
|
208
|
+
await ensureOk(resp);
|
|
209
|
+
return resp.json();
|
|
210
|
+
}
|
|
211
|
+
/** GET /v1/log/proof?seq=<seq> — InclusionProof for a log entry. */
|
|
212
|
+
async getProof(seq) {
|
|
213
|
+
const resp = await fetch(`${this.baseUrl}/v1/log/proof?seq=${seq}`);
|
|
214
|
+
await ensureOk(resp);
|
|
215
|
+
return resp.json();
|
|
216
|
+
}
|
|
217
|
+
/** GET /v1/log/gossip/sth — gossip SignedTreeHead. */
|
|
218
|
+
async getGossipSth() {
|
|
219
|
+
const resp = await fetch(`${this.baseUrl}/v1/log/gossip/sth`);
|
|
220
|
+
await ensureOk(resp);
|
|
221
|
+
return resp.json();
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Verify that `entry` is included in the log at the position described by
|
|
225
|
+
* `proof`, under the given `sth`.
|
|
226
|
+
*
|
|
227
|
+
* Merkle construction (RFC 9162):
|
|
228
|
+
* leaf_hash = SHA256(0x00 || utf8(canonical_all_sorted_json_of_entry))
|
|
229
|
+
* node_hash = SHA256(0x01 || left_bytes || right_bytes)
|
|
230
|
+
*/
|
|
231
|
+
static verifyInclusion(proof, sth, entry) {
|
|
232
|
+
// Leaf hash includes the signature field
|
|
233
|
+
const leafBytes = new TextEncoder().encode(sortedJson(entry));
|
|
234
|
+
const leafBuf = new Uint8Array(1 + leafBytes.length);
|
|
235
|
+
leafBuf[0] = 0x00;
|
|
236
|
+
leafBuf.set(leafBytes, 1);
|
|
237
|
+
const computedLeafHash = sha256(leafBuf);
|
|
238
|
+
// Verify that the computed leaf hash matches the proof's leaf_hash
|
|
239
|
+
const proofLeafHash = base64urlDecode(proof.leaf_hash);
|
|
240
|
+
if (!bytesEqual(computedLeafHash, proofLeafHash))
|
|
241
|
+
return false;
|
|
242
|
+
// RFC 9162 fold up the audit path
|
|
243
|
+
let nodeHash = computedLeafHash;
|
|
244
|
+
for (let i = 0; i < proof.audit_path.length; i++) {
|
|
245
|
+
const sibling = base64urlDecode(proof.audit_path[i]);
|
|
246
|
+
const buf = new Uint8Array(65);
|
|
247
|
+
buf[0] = 0x01;
|
|
248
|
+
if (((BigInt(proof.leaf_index) >> BigInt(i)) & 1n) === 0n) {
|
|
249
|
+
buf.set(nodeHash, 1);
|
|
250
|
+
buf.set(sibling, 33);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
buf.set(sibling, 1);
|
|
254
|
+
buf.set(nodeHash, 33);
|
|
255
|
+
}
|
|
256
|
+
nodeHash = sha256(buf);
|
|
257
|
+
}
|
|
258
|
+
return bytesEqual(nodeHash, base64urlDecode(sth.sha256_root_hash));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=reputation-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reputation-client.js","sourceRoot":"","sources":["../../src/nip/reputation-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { X509Certificate } from "@peculiar/x509";
|
|
2
|
+
import { AssuranceLevel } from "./assurance-level.js";
|
|
3
|
+
import type { IdentFrame } from "./frames.js";
|
|
4
|
+
export interface NipVerifierOptions {
|
|
5
|
+
/** Map of issuer NID → CA public key string (`ed25519:<hex>`). */
|
|
6
|
+
trustedCaPublicKeys?: Readonly<Record<string, string>>;
|
|
7
|
+
/** X.509 trust anchors. Empty/undefined makes Step 3b reject v2 frames. */
|
|
8
|
+
trustedX509Roots?: readonly X509Certificate[];
|
|
9
|
+
/** Minimum required assurance level (NPS-RFC-0003). */
|
|
10
|
+
minAssuranceLevel?: AssuranceLevel;
|
|
11
|
+
}
|
|
12
|
+
export interface NipIdentVerifyResult {
|
|
13
|
+
valid: boolean;
|
|
14
|
+
stepFailed: number;
|
|
15
|
+
errorCode?: string;
|
|
16
|
+
message?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class NipIdentVerifier {
|
|
19
|
+
readonly options: NipVerifierOptions;
|
|
20
|
+
constructor(options: NipVerifierOptions);
|
|
21
|
+
verify(frame: IdentFrame, issuerNid: string): Promise<NipIdentVerifyResult>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/nip/verifier.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,2EAA2E;IAC3E,gBAAgB,CAAC,EAAK,SAAS,eAAe,EAAE,CAAC;IACjD,uDAAuD;IACvD,iBAAiB,CAAC,EAAI,cAAc,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAO,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAI,MAAM,CAAC;CACpB;AAQD,qBAAa,gBAAgB;aACC,OAAO,EAAE,kBAAkB;gBAA3B,OAAO,EAAE,kBAAkB;IAEjD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAsDlF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* NipIdentVerifier — Phase 1 dual-trust IdentFrame verifier per NPS-RFC-0002 §8.1.
|
|
5
|
+
*
|
|
6
|
+
* Steps:
|
|
7
|
+
* 1. v1 Ed25519 signature check against the issuer's CA public key.
|
|
8
|
+
* 2. Optional minimum assurance level check.
|
|
9
|
+
* 3b. X.509 chain validation (only if `cert_format === "v2-x509"` AND
|
|
10
|
+
* `trustedX509Roots` is configured).
|
|
11
|
+
*/
|
|
12
|
+
import * as ed25519 from "@noble/ed25519";
|
|
13
|
+
import { sha512 } from "@noble/hashes/sha512";
|
|
14
|
+
import { AssuranceLevel } from "./assurance-level.js";
|
|
15
|
+
import * as cf from "./cert-format.js";
|
|
16
|
+
import * as ec from "./error-codes.js";
|
|
17
|
+
import { verify as verifyX509 } from "./x509/verifier.js";
|
|
18
|
+
// noble/ed25519 needs sha512 wired up.
|
|
19
|
+
ed25519.etc.sha512Sync = (...m) => sha512(ed25519.etc.concatBytes(...m));
|
|
20
|
+
function ok() { return { valid: true, stepFailed: 0 }; }
|
|
21
|
+
function fail(stepFailed, errorCode, message) {
|
|
22
|
+
return { valid: false, stepFailed, errorCode, message };
|
|
23
|
+
}
|
|
24
|
+
export class NipIdentVerifier {
|
|
25
|
+
options;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
}
|
|
29
|
+
async verify(frame, issuerNid) {
|
|
30
|
+
// Step 1: v1 Ed25519 signature check ────────────────────────────────
|
|
31
|
+
const caPubKeyStr = this.options.trustedCaPublicKeys?.[issuerNid];
|
|
32
|
+
if (caPubKeyStr === undefined) {
|
|
33
|
+
return fail(1, ec.CERT_UNTRUSTED_ISSUER, `no trusted CA public key for issuer: ${issuerNid}`);
|
|
34
|
+
}
|
|
35
|
+
if (!frame.signature?.startsWith("ed25519:")) {
|
|
36
|
+
return fail(1, ec.CERT_SIGNATURE_INVALID, "missing or malformed signature");
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const caPubBytes = parsePubKeyString(caPubKeyStr);
|
|
40
|
+
const sigBytes = Buffer.from(frame.signature.slice("ed25519:".length), "base64");
|
|
41
|
+
const canonical = canonicalJson(frame.unsignedDict());
|
|
42
|
+
const msg = new TextEncoder().encode(canonical);
|
|
43
|
+
if (!ed25519.verify(sigBytes, msg, caPubBytes)) {
|
|
44
|
+
return fail(1, ec.CERT_SIGNATURE_INVALID, "v1 Ed25519 signature did not verify against issuer CA key");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
return fail(1, ec.CERT_SIGNATURE_INVALID, `v1 signature verification error: ${e.message}`);
|
|
49
|
+
}
|
|
50
|
+
// Step 2: minimum assurance level ───────────────────────────────────
|
|
51
|
+
const minLevel = this.options.minAssuranceLevel;
|
|
52
|
+
if (minLevel !== undefined) {
|
|
53
|
+
const got = frame.assuranceLevel ?? AssuranceLevel.ANONYMOUS;
|
|
54
|
+
if (!got.meetsOrExceeds(minLevel)) {
|
|
55
|
+
return fail(2, ec.ASSURANCE_MISMATCH, `assurance_level (${got.wire}) below required minimum (${minLevel.wire})`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Step 3b: X.509 chain check (only if both opt-ins present) ──────────
|
|
59
|
+
const trustedRoots = this.options.trustedX509Roots ?? [];
|
|
60
|
+
const hasV2Trust = trustedRoots.length > 0;
|
|
61
|
+
const isV2Frame = frame.certFormat === cf.V2_X509;
|
|
62
|
+
if (hasV2Trust && isV2Frame) {
|
|
63
|
+
const x509Result = await verifyX509({
|
|
64
|
+
certChainBase64UrlDer: frame.certChain ?? [],
|
|
65
|
+
assertedNid: frame.nid,
|
|
66
|
+
assertedAssuranceLevel: frame.assuranceLevel,
|
|
67
|
+
trustedRootCerts: trustedRoots,
|
|
68
|
+
});
|
|
69
|
+
if (!x509Result.valid) {
|
|
70
|
+
return fail(3, x509Result.errorCode ?? ec.CERT_FORMAT_INVALID, x509Result.message ?? "X.509 chain validation failed");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return ok();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Canonical JSON matching NipIdentity.sign — top-level keys filtered/ordered
|
|
78
|
+
* via `Object.keys(payload).sort()` as JSON.stringify replacer.
|
|
79
|
+
*/
|
|
80
|
+
function canonicalJson(payload) {
|
|
81
|
+
return JSON.stringify(payload, Object.keys(payload).sort());
|
|
82
|
+
}
|
|
83
|
+
/** Parse `ed25519:<hex>` into a 32-byte Uint8Array public key. */
|
|
84
|
+
function parsePubKeyString(s) {
|
|
85
|
+
if (!s.startsWith("ed25519:")) {
|
|
86
|
+
throw new Error(`Unsupported public key format: ${s}`);
|
|
87
|
+
}
|
|
88
|
+
return new Uint8Array(Buffer.from(s.slice("ed25519:".length), "hex"));
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/nip/verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issues NPS X.509 NID certificates per NPS-RFC-0002 §4.
|
|
3
|
+
*
|
|
4
|
+
* Backed by @peculiar/x509 + Web Crypto Ed25519 (Node 22+).
|
|
5
|
+
*
|
|
6
|
+
* Two factory functions:
|
|
7
|
+
* - {@link issueLeaf} — leaf cert with critical NPS EKU + SAN URI = NID + assurance-level extension.
|
|
8
|
+
* - {@link issueRoot} — self-signed root for testing / private-CA use.
|
|
9
|
+
*/
|
|
10
|
+
import * as x509 from "@peculiar/x509";
|
|
11
|
+
import { AssuranceLevel } from "../assurance-level.js";
|
|
12
|
+
export type LeafRole = "agent" | "node";
|
|
13
|
+
export interface IssueLeafOptions {
|
|
14
|
+
subjectNid: string;
|
|
15
|
+
subjectPublicKey: CryptoKey;
|
|
16
|
+
caKeys: CryptoKeyPair;
|
|
17
|
+
issuerNid: string;
|
|
18
|
+
role: LeafRole;
|
|
19
|
+
assuranceLevel: AssuranceLevel;
|
|
20
|
+
notBefore: Date;
|
|
21
|
+
notAfter: Date;
|
|
22
|
+
serialNumber: string;
|
|
23
|
+
}
|
|
24
|
+
export interface IssueRootOptions {
|
|
25
|
+
caNid: string;
|
|
26
|
+
caKeys: CryptoKeyPair;
|
|
27
|
+
notBefore: Date;
|
|
28
|
+
notAfter: Date;
|
|
29
|
+
serialNumber: string;
|
|
30
|
+
}
|
|
31
|
+
/** Issue a leaf NPS NID certificate (RFC-0002 §4.1). */
|
|
32
|
+
export declare function issueLeaf(opts: IssueLeafOptions): Promise<x509.X509Certificate>;
|
|
33
|
+
/** Issue a self-signed CA root cert (testing / private CA). */
|
|
34
|
+
export declare function issueRoot(opts: IssueRootOptions): Promise<x509.X509Certificate>;
|
|
35
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/nip/x509/builder.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOvD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAU,MAAM,CAAC;IAC3B,gBAAgB,EAAI,SAAS,CAAC;IAC9B,MAAM,EAAc,aAAa,CAAC;IAClC,SAAS,EAAW,MAAM,CAAC;IAC3B,IAAI,EAAgB,QAAQ,CAAC;IAC7B,cAAc,EAAM,cAAc,CAAC;IACnC,SAAS,EAAW,IAAI,CAAC;IACzB,QAAQ,EAAY,IAAI,CAAC;IACzB,YAAY,EAAQ,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAe,MAAM,CAAC;IAC3B,MAAM,EAAc,aAAa,CAAC;IAClC,SAAS,EAAW,IAAI,CAAC;IACzB,QAAQ,EAAY,IAAI,CAAC;IACzB,YAAY,EAAQ,MAAM,CAAC;CAC5B;AAED,wDAAwD;AACxD,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAuBrF;AAED,+DAA+D;AAC/D,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAcrF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Issues NPS X.509 NID certificates per NPS-RFC-0002 §4.
|
|
5
|
+
*
|
|
6
|
+
* Backed by @peculiar/x509 + Web Crypto Ed25519 (Node 22+).
|
|
7
|
+
*
|
|
8
|
+
* Two factory functions:
|
|
9
|
+
* - {@link issueLeaf} — leaf cert with critical NPS EKU + SAN URI = NID + assurance-level extension.
|
|
10
|
+
* - {@link issueRoot} — self-signed root for testing / private-CA use.
|
|
11
|
+
*/
|
|
12
|
+
import * as x509 from "@peculiar/x509";
|
|
13
|
+
import { EKU_AGENT_IDENTITY, EKU_NODE_IDENTITY, NID_ASSURANCE_LEVEL } from "./oids.js";
|
|
14
|
+
// Initialize @peculiar/x509 cryptoProvider once on first import. Web Crypto
|
|
15
|
+
// (globalThis.crypto) supports Ed25519 in Node 18+.
|
|
16
|
+
x509.cryptoProvider.set(globalThis.crypto);
|
|
17
|
+
/** Issue a leaf NPS NID certificate (RFC-0002 §4.1). */
|
|
18
|
+
export async function issueLeaf(opts) {
|
|
19
|
+
const ekuOid = opts.role === "node" ? EKU_NODE_IDENTITY : EKU_AGENT_IDENTITY;
|
|
20
|
+
// ASN.1 ENUMERATED encoding of assurance level: tag=0x0A, len=0x01, value=<rank>.
|
|
21
|
+
const assuranceDer = new Uint8Array([0x0A, 0x01, opts.assuranceLevel.rank]);
|
|
22
|
+
return x509.X509CertificateGenerator.create({
|
|
23
|
+
serialNumber: opts.serialNumber,
|
|
24
|
+
issuer: `CN=${escapeDn(opts.issuerNid)}`,
|
|
25
|
+
subject: `CN=${escapeDn(opts.subjectNid)}`,
|
|
26
|
+
notBefore: opts.notBefore,
|
|
27
|
+
notAfter: opts.notAfter,
|
|
28
|
+
publicKey: opts.subjectPublicKey,
|
|
29
|
+
signingAlgorithm: { name: "Ed25519" },
|
|
30
|
+
signingKey: opts.caKeys.privateKey,
|
|
31
|
+
extensions: [
|
|
32
|
+
new x509.BasicConstraintsExtension(false, undefined, true),
|
|
33
|
+
new x509.KeyUsagesExtension(x509.KeyUsageFlags.digitalSignature, true),
|
|
34
|
+
new x509.ExtendedKeyUsageExtension([ekuOid], true),
|
|
35
|
+
new x509.SubjectAlternativeNameExtension([{ type: "url", value: opts.subjectNid }], false),
|
|
36
|
+
new x509.Extension(NID_ASSURANCE_LEVEL, false, assuranceDer),
|
|
37
|
+
],
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** Issue a self-signed CA root cert (testing / private CA). */
|
|
41
|
+
export async function issueRoot(opts) {
|
|
42
|
+
return x509.X509CertificateGenerator.createSelfSigned({
|
|
43
|
+
serialNumber: opts.serialNumber,
|
|
44
|
+
name: `CN=${escapeDn(opts.caNid)}`,
|
|
45
|
+
notBefore: opts.notBefore,
|
|
46
|
+
notAfter: opts.notAfter,
|
|
47
|
+
signingAlgorithm: { name: "Ed25519" },
|
|
48
|
+
keys: opts.caKeys,
|
|
49
|
+
extensions: [
|
|
50
|
+
new x509.BasicConstraintsExtension(true, undefined, true),
|
|
51
|
+
new x509.KeyUsagesExtension(x509.KeyUsageFlags.keyCertSign | x509.KeyUsageFlags.cRLSign, true),
|
|
52
|
+
],
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function escapeDn(value) {
|
|
56
|
+
// Escape characters that have special meaning in RFC 4514 DN syntax.
|
|
57
|
+
return value.replace(/([",+;<>\\])/g, "\\$1");
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/nip/x509/builder.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC;;;;;;;;GAQG;AAEH,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEvF,4EAA4E;AAC5E,oDAAoD;AACpD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAwB3C,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAsB;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAE7E,kFAAkF;IAClF,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5E,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;QAC1C,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAQ,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAC9C,OAAO,EAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAC/C,SAAS,EAAK,IAAI,CAAC,SAAS;QAC5B,QAAQ,EAAM,IAAI,CAAC,QAAQ;QAC3B,SAAS,EAAK,IAAI,CAAC,gBAAgB;QACnC,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,UAAU,EAAI,IAAI,CAAC,MAAM,CAAC,UAAU;QACpC,UAAU,EAAE;YACV,IAAI,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC;YAC1D,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC;YACtE,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;YAClD,IAAI,IAAI,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC;YAC1F,IAAI,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,KAAK,EAAE,YAAY,CAAC;SAC7D;KACF,CAAC,CAAC;AACL,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAsB;IACpD,OAAO,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC;QACpD,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,IAAI,EAAU,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC1C,SAAS,EAAK,IAAI,CAAC,SAAS;QAC5B,QAAQ,EAAM,IAAI,CAAC,QAAQ;QAC3B,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,IAAI,EAAU,IAAI,CAAC,MAAM;QACzB,UAAU,EAAE;YACV,IAAI,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC;YACzD,IAAI,IAAI,CAAC,kBAAkB,CACzB,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;SACrE;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,qEAAqE;IACrE,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/nip/x509/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nip/x509/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
|