@labacacia/nps-sdk 1.0.0-alpha.6 → 1.0.0-alpha.7
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 +115 -0
- package/CHANGELOG.md +124 -0
- package/README.cn.md +3 -1
- package/README.md +3 -1
- package/dist/core/anchor-cache.d.ts +42 -0
- package/dist/core/anchor-cache.d.ts.map +1 -0
- package/dist/core/anchor-cache.js +104 -0
- package/dist/core/anchor-cache.js.map +1 -0
- package/dist/core/cache.d.ts +14 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +80 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/canonical-json.d.ts +12 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +44 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/codec.d.ts +32 -0
- package/dist/core/codec.d.ts.map +1 -0
- package/dist/core/codec.js +119 -0
- package/dist/core/codec.js.map +1 -0
- package/dist/core/codecs/index.d.ts +4 -0
- package/dist/core/codecs/index.d.ts.map +1 -0
- package/{src/core/codecs/index.ts → dist/core/codecs/index.js} +1 -0
- package/dist/core/codecs/index.js.map +1 -0
- package/dist/core/codecs/ncp-codec.d.ts +39 -0
- package/dist/core/codecs/ncp-codec.d.ts.map +1 -0
- package/dist/core/codecs/ncp-codec.js +93 -0
- package/dist/core/codecs/ncp-codec.js.map +1 -0
- package/dist/core/codecs/tier1-json-codec.d.ts +10 -0
- package/dist/core/codecs/tier1-json-codec.d.ts.map +1 -0
- package/{src/core/codecs/tier1-json-codec.ts → dist/core/codecs/tier1-json-codec.js} +11 -16
- package/dist/core/codecs/tier1-json-codec.js.map +1 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts +10 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts.map +1 -0
- package/{src/core/codecs/tier2-msgpack-codec.ts → dist/core/codecs/tier2-msgpack-codec.js} +10 -14
- package/dist/core/codecs/tier2-msgpack-codec.js.map +1 -0
- package/dist/core/crypto-provider.d.ts +31 -0
- package/dist/core/crypto-provider.d.ts.map +1 -0
- package/dist/core/crypto-provider.js +10 -0
- package/dist/core/crypto-provider.js.map +1 -0
- package/dist/core/exceptions.d.ts +27 -0
- package/dist/core/exceptions.d.ts.map +1 -0
- package/dist/core/exceptions.js +52 -0
- package/dist/core/exceptions.js.map +1 -0
- package/dist/core/frame-header.d.ts +87 -0
- package/dist/core/frame-header.d.ts.map +1 -0
- package/dist/core/frame-header.js +185 -0
- package/dist/core/frame-header.js.map +1 -0
- package/dist/core/frame-registry.d.ts +35 -0
- package/dist/core/frame-registry.d.ts.map +1 -0
- package/dist/core/frame-registry.js +63 -0
- package/dist/core/frame-registry.js.map +1 -0
- package/dist/core/frames.d.ts +81 -0
- package/dist/core/frames.d.ts.map +1 -0
- package/dist/core/frames.js +154 -0
- package/dist/core/frames.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/{src/core/index.ts → dist/core/index.js} +3 -23
- package/dist/core/index.js.map +1 -0
- package/dist/core/registry.d.ts +11 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +17 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/status-codes.d.ts +29 -0
- package/dist/core/status-codes.d.ts.map +1 -0
- package/dist/core/status-codes.js +39 -0
- package/dist/core/status-codes.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.js} +1 -1
- package/dist/index.js.map +1 -0
- package/dist/ncp/frames/anchor-frame.d.ts +29 -0
- package/dist/ncp/frames/anchor-frame.d.ts.map +1 -0
- package/dist/ncp/frames/anchor-frame.js +54 -0
- package/dist/ncp/frames/anchor-frame.js.map +1 -0
- package/dist/ncp/frames/caps-frame.d.ts +29 -0
- package/dist/ncp/frames/caps-frame.d.ts.map +1 -0
- package/dist/ncp/frames/caps-frame.js +29 -0
- package/dist/ncp/frames/caps-frame.js.map +1 -0
- package/dist/ncp/frames/diff-frame.d.ts +32 -0
- package/dist/ncp/frames/diff-frame.d.ts.map +1 -0
- package/dist/ncp/frames/diff-frame.js +37 -0
- package/dist/ncp/frames/diff-frame.js.map +1 -0
- package/dist/ncp/frames/error-frame.d.ts +16 -0
- package/dist/ncp/frames/error-frame.d.ts.map +1 -0
- package/dist/ncp/frames/error-frame.js +13 -0
- package/dist/ncp/frames/error-frame.js.map +1 -0
- package/dist/ncp/frames/hello-frame.d.ts +21 -0
- package/dist/ncp/frames/hello-frame.d.ts.map +1 -0
- package/dist/ncp/frames/hello-frame.js +25 -0
- package/dist/ncp/frames/hello-frame.js.map +1 -0
- package/dist/ncp/frames/stream-frame.d.ts +16 -0
- package/dist/ncp/frames/stream-frame.d.ts.map +1 -0
- package/dist/ncp/frames/stream-frame.js +18 -0
- package/dist/ncp/frames/stream-frame.js.map +1 -0
- package/dist/ncp/frames.d.ts +94 -0
- package/dist/ncp/frames.d.ts.map +1 -0
- package/dist/ncp/frames.js +192 -0
- package/dist/ncp/frames.js.map +1 -0
- package/dist/ncp/handshake.d.ts +30 -0
- package/dist/ncp/handshake.d.ts.map +1 -0
- package/dist/ncp/handshake.js +80 -0
- package/dist/ncp/handshake.js.map +1 -0
- package/dist/ncp/index.d.ts +12 -0
- package/dist/ncp/index.d.ts.map +1 -0
- package/{src/ncp/index.ts → dist/ncp/index.js} +1 -0
- package/dist/ncp/index.js.map +1 -0
- package/dist/ncp/ncp-error-codes.d.ts +23 -0
- package/dist/ncp/ncp-error-codes.d.ts.map +1 -0
- package/dist/ncp/ncp-error-codes.js +34 -0
- package/dist/ncp/ncp-error-codes.js.map +1 -0
- package/dist/ncp/ncp-patch-format.d.ts +7 -0
- package/dist/ncp/ncp-patch-format.d.ts.map +1 -0
- package/dist/ncp/ncp-patch-format.js +13 -0
- package/dist/ncp/ncp-patch-format.js.map +1 -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 +3 -0
- package/dist/ncp/registry.d.ts.map +1 -0
- package/dist/ncp/registry.js +13 -0
- package/dist/ncp/registry.js.map +1 -0
- package/dist/ncp/stream-manager.d.ts +57 -0
- package/dist/ncp/stream-manager.d.ts.map +1 -0
- package/dist/ncp/stream-manager.js +163 -0
- package/dist/ncp/stream-manager.js.map +1 -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 +56 -0
- package/dist/ndp/frames.d.ts.map +1 -0
- package/dist/ndp/frames.js +87 -0
- package/dist/ndp/frames.js.map +1 -0
- package/dist/ndp/index.d.ts +6 -0
- package/dist/ndp/index.d.ts.map +1 -0
- package/{src/ndp/index.ts → dist/ndp/index.js} +1 -1
- package/dist/ndp/index.js.map +1 -0
- package/dist/ndp/ndp-registry.d.ts +13 -0
- package/dist/ndp/ndp-registry.d.ts.map +1 -0
- package/dist/ndp/ndp-registry.js +104 -0
- package/dist/ndp/ndp-registry.js.map +1 -0
- package/dist/ndp/registry.d.ts +3 -0
- package/dist/ndp/registry.d.ts.map +1 -0
- package/dist/ndp/registry.js +10 -0
- package/dist/ndp/registry.js.map +1 -0
- package/dist/ndp/validator.d.ts +18 -0
- package/dist/ndp/validator.d.ts.map +1 -0
- package/dist/ndp/validator.js +48 -0
- package/dist/ndp/validator.js.map +1 -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/{src/nip/acme/index.ts → dist/nip/acme/index.js} +1 -1
- 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 +25 -0
- package/dist/nip/error-codes.d.ts.map +1 -0
- package/{src/nip/error-codes.ts → dist/nip/error-codes.js} +19 -25
- package/dist/nip/error-codes.js.map +1 -0
- package/dist/nip/frames.d.ts +53 -0
- package/dist/nip/frames.d.ts.map +1 -0
- package/dist/nip/frames.js +106 -0
- package/dist/nip/frames.js.map +1 -0
- package/dist/nip/identity.d.ts +18 -0
- package/dist/nip/identity.d.ts.map +1 -0
- package/dist/nip/identity.js +94 -0
- package/dist/nip/identity.js.map +1 -0
- package/dist/nip/index.d.ts +11 -0
- package/dist/nip/index.d.ts.map +1 -0
- package/{src/nip/index.ts → dist/nip/index.js} +3 -2
- package/dist/nip/index.js.map +1 -0
- package/dist/nip/registry.d.ts +3 -0
- package/dist/nip/registry.d.ts.map +1 -0
- package/dist/nip/registry.js +10 -0
- package/dist/nip/registry.js.map +1 -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/{src/nip/x509/index.ts → dist/nip/x509/index.js} +1 -1
- 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/{src/nip/x509/oids.ts → dist/nip/x509/oids.js} +5 -10
- 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 +34 -0
- package/dist/nop/client.d.ts.map +1 -0
- package/dist/nop/client.js +90 -0
- package/dist/nop/client.js.map +1 -0
- package/dist/nop/frames.d.ts +65 -0
- package/dist/nop/frames.d.ts.map +1 -0
- package/dist/nop/frames.js +148 -0
- package/dist/nop/frames.js.map +1 -0
- package/dist/nop/index.d.ts +5 -0
- package/dist/nop/index.d.ts.map +1 -0
- package/{src/nop/index.ts → dist/nop/index.js} +1 -1
- package/dist/nop/index.js.map +1 -0
- package/dist/nop/models.d.ts +58 -0
- package/dist/nop/models.d.ts.map +1 -0
- package/dist/nop/models.js +50 -0
- package/dist/nop/models.js.map +1 -0
- package/dist/nop/nop-types.d.ts +136 -0
- package/dist/nop/nop-types.d.ts.map +1 -0
- package/dist/nop/nop-types.js +44 -0
- package/dist/nop/nop-types.js.map +1 -0
- package/dist/nop/registry.d.ts +3 -0
- package/dist/nop/registry.d.ts.map +1 -0
- package/dist/nop/registry.js +11 -0
- package/dist/nop/registry.js.map +1 -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/client.d.ts +22 -0
- package/dist/nwp/client.d.ts.map +1 -0
- package/dist/nwp/client.js +101 -0
- package/dist/nwp/client.js.map +1 -0
- package/dist/nwp/frames.d.ts +46 -0
- package/dist/nwp/frames.d.ts.map +1 -0
- package/dist/nwp/frames.js +81 -0
- package/dist/nwp/frames.js.map +1 -0
- package/dist/nwp/index.d.ts +5 -0
- package/dist/nwp/index.d.ts.map +1 -0
- package/{src/nwp/index.ts → dist/nwp/index.js} +2 -1
- package/dist/nwp/index.js.map +1 -0
- package/dist/nwp/registry.d.ts +3 -0
- package/dist/nwp/registry.d.ts.map +1 -0
- package/dist/nwp/registry.js +9 -0
- package/dist/nwp/registry.js.map +1 -0
- package/dist/setup.d.ts +10 -0
- package/dist/setup.d.ts.map +1 -0
- package/{src/setup.ts → dist/setup.js} +13 -16
- package/dist/setup.js.map +1 -0
- package/package.json +12 -1
- package/CONTRIBUTING.cn.md +0 -35
- package/CONTRIBUTING.md +0 -35
- 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/ncp-codec.ts +0 -170
- 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 -184
- package/src/core/registry.ts +0 -28
- package/src/core/status-codes.ts +0 -47
- 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 -251
- package/src/ncp/handshake.ts +0 -95
- package/src/ncp/ncp-error-codes.ts +0 -36
- package/src/ncp/ncp-patch-format.ts +0 -16
- package/src/ncp/preamble.ts +0 -79
- package/src/ncp/registry.ts +0 -15
- package/src/ncp/stream-manager.ts +0 -212
- package/src/ndp/dns-txt.ts +0 -86
- package/src/ndp/frames.ts +0 -124
- package/src/ndp/ndp-registry.ts +0 -116
- package/src/ndp/registry.ts +0 -12
- package/src/ndp/validator.ts +0 -64
- package/src/nip/acme/client.ts +0 -185
- package/src/nip/acme/jws.ts +0 -109
- package/src/nip/acme/messages.ts +0 -85
- package/src/nip/acme/server.ts +0 -480
- package/src/nip/acme/wire.ts +0 -24
- package/src/nip/assurance-level.ts +0 -40
- package/src/nip/cert-format.ts +0 -9
- package/src/nip/frames.ts +0 -138
- package/src/nip/identity.ts +0 -113
- package/src/nip/registry.ts +0 -12
- package/src/nip/verifier.ts +0 -122
- package/src/nip/x509/builder.ts +0 -91
- package/src/nip/x509/verifier.ts +0 -214
- package/src/nop/client.ts +0 -103
- package/src/nop/frames.ts +0 -181
- 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/registry.ts +0 -11
- package/tests/_rfc0002-keys.ts +0 -57
- 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/preamble.test.ts +0 -93
- 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 -377
- package/tests/nip-acme-agent01.test.ts +0 -192
- package/tests/nip-x509.test.ts +0 -280
- 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,32 @@
|
|
|
1
|
+
import { EncodingTier, FrameHeader, FrameType } from "./frames.js";
|
|
2
|
+
import type { FrameRegistry } from "./registry.js";
|
|
3
|
+
export interface NpsFrame {
|
|
4
|
+
readonly frameType: FrameType;
|
|
5
|
+
readonly preferredTier: EncodingTier;
|
|
6
|
+
toDict(): Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export declare class Tier1JsonCodec {
|
|
9
|
+
encode(frame: NpsFrame): Uint8Array;
|
|
10
|
+
decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame;
|
|
11
|
+
}
|
|
12
|
+
export declare class Tier2MsgPackCodec {
|
|
13
|
+
encode(frame: NpsFrame): Uint8Array;
|
|
14
|
+
decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame;
|
|
15
|
+
}
|
|
16
|
+
export declare class NpsFrameCodec {
|
|
17
|
+
private readonly _registry;
|
|
18
|
+
private readonly _maxPayload;
|
|
19
|
+
private readonly _json;
|
|
20
|
+
private readonly _msgpack;
|
|
21
|
+
constructor(registry: FrameRegistry, options?: {
|
|
22
|
+
maxPayload?: number;
|
|
23
|
+
});
|
|
24
|
+
encode(frame: NpsFrame, options?: {
|
|
25
|
+
overrideTier?: EncodingTier;
|
|
26
|
+
}): Uint8Array;
|
|
27
|
+
decode(wire: Uint8Array): NpsFrame;
|
|
28
|
+
static peekHeader(wire: Uint8Array): FrameHeader;
|
|
29
|
+
private _buildFlags;
|
|
30
|
+
private _selectCodec;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/core/codec.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,YAAY,EAEZ,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;IACrC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAID,qBAAa,cAAc;IACzB,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,UAAU;IAWnC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,GAAG,QAAQ;CAYrF;AAID,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,UAAU;IAUnC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,GAAG,QAAQ;CAWrF;AAID,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;gBAExC,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAO1E,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,YAAY,CAAA;KAAO,GAAG,UAAU;IAiClF,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ;IAOlC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW;IAMhD,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,YAAY;CAKrB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* NPS frame codec: Tier-1 (JSON) and Tier-2 (MsgPack) encode/decode,
|
|
5
|
+
* plus the top-level NpsFrameCodec dispatcher.
|
|
6
|
+
*/
|
|
7
|
+
import * as msgpack from "@msgpack/msgpack";
|
|
8
|
+
import { NpsCodecError } from "./exceptions.js";
|
|
9
|
+
import { DEFAULT_MAX_PAYLOAD, EncodingTier, FrameFlags, FrameHeader, } from "./frames.js";
|
|
10
|
+
// ── Tier-1 JSON codec ─────────────────────────────────────────────────────────
|
|
11
|
+
export class Tier1JsonCodec {
|
|
12
|
+
encode(frame) {
|
|
13
|
+
try {
|
|
14
|
+
const json = JSON.stringify(frame.toDict());
|
|
15
|
+
return new TextEncoder().encode(json);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
throw new NpsCodecError(`Tier-1 JSON encode failed for 0x${frame.frameType.toString(16).padStart(2, "0")}: ${String(err)}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
decode(frameType, payload, registry) {
|
|
22
|
+
const cls = registry.resolve(frameType);
|
|
23
|
+
try {
|
|
24
|
+
const text = new TextDecoder().decode(payload);
|
|
25
|
+
const data = JSON.parse(text);
|
|
26
|
+
return cls.fromDict(data);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
throw new NpsCodecError(`Tier-1 JSON decode failed for 0x${frameType.toString(16).padStart(2, "0")}: ${String(err)}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// ── Tier-2 MsgPack codec ──────────────────────────────────────────────────────
|
|
34
|
+
export class Tier2MsgPackCodec {
|
|
35
|
+
encode(frame) {
|
|
36
|
+
try {
|
|
37
|
+
return msgpack.encode(frame.toDict());
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
throw new NpsCodecError(`Tier-2 MsgPack encode failed for 0x${frame.frameType.toString(16).padStart(2, "0")}: ${String(err)}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
decode(frameType, payload, registry) {
|
|
44
|
+
const cls = registry.resolve(frameType);
|
|
45
|
+
try {
|
|
46
|
+
const data = msgpack.decode(payload);
|
|
47
|
+
return cls.fromDict(data);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
throw new NpsCodecError(`Tier-2 MsgPack decode failed for 0x${frameType.toString(16).padStart(2, "0")}: ${String(err)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// ── NpsFrameCodec (dispatcher) ────────────────────────────────────────────────
|
|
55
|
+
export class NpsFrameCodec {
|
|
56
|
+
_registry;
|
|
57
|
+
_maxPayload;
|
|
58
|
+
_json = new Tier1JsonCodec();
|
|
59
|
+
_msgpack = new Tier2MsgPackCodec();
|
|
60
|
+
constructor(registry, options = {}) {
|
|
61
|
+
this._registry = registry;
|
|
62
|
+
this._maxPayload = options.maxPayload ?? DEFAULT_MAX_PAYLOAD;
|
|
63
|
+
}
|
|
64
|
+
// ── Encode ────────────────────────────────────────────────────────────────
|
|
65
|
+
encode(frame, options = {}) {
|
|
66
|
+
const tier = options.overrideTier ?? frame.preferredTier;
|
|
67
|
+
const tierCodec = this._selectCodec(tier);
|
|
68
|
+
let payload;
|
|
69
|
+
try {
|
|
70
|
+
payload = tierCodec.encode(frame);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (err instanceof NpsCodecError)
|
|
74
|
+
throw err;
|
|
75
|
+
throw new NpsCodecError(`Encode failed for 0x${frame.frameType.toString(16)}.`);
|
|
76
|
+
}
|
|
77
|
+
if (payload.length > this._maxPayload) {
|
|
78
|
+
throw new NpsCodecError(`Encoded payload for 0x${frame.frameType.toString(16).padStart(2, "0")} exceeds max_frame_payload` +
|
|
79
|
+
` (${payload.length} bytes > ${this._maxPayload}). Use StreamFrame (0x03) for large payloads.`);
|
|
80
|
+
}
|
|
81
|
+
const useExt = payload.length > DEFAULT_MAX_PAYLOAD;
|
|
82
|
+
let flags = this._buildFlags(frame, tier);
|
|
83
|
+
if (useExt)
|
|
84
|
+
flags |= FrameFlags.EXT;
|
|
85
|
+
const header = new FrameHeader(frame.frameType, flags, payload.length);
|
|
86
|
+
const headerBytes = header.toBytes();
|
|
87
|
+
const wire = new Uint8Array(headerBytes.length + payload.length);
|
|
88
|
+
wire.set(headerBytes, 0);
|
|
89
|
+
wire.set(payload, headerBytes.length);
|
|
90
|
+
return wire;
|
|
91
|
+
}
|
|
92
|
+
// ── Decode ────────────────────────────────────────────────────────────────
|
|
93
|
+
decode(wire) {
|
|
94
|
+
const header = FrameHeader.parse(wire);
|
|
95
|
+
const payload = wire.slice(header.headerSize, header.headerSize + header.payloadLength);
|
|
96
|
+
const codec = this._selectCodec(header.encodingTier);
|
|
97
|
+
return codec.decode(header.frameType, payload, this._registry);
|
|
98
|
+
}
|
|
99
|
+
static peekHeader(wire) {
|
|
100
|
+
return FrameHeader.parse(wire);
|
|
101
|
+
}
|
|
102
|
+
// ── Private ───────────────────────────────────────────────────────────────
|
|
103
|
+
_buildFlags(frame, tier) {
|
|
104
|
+
let flags = tier === EncodingTier.JSON ? FrameFlags.TIER1_JSON : FrameFlags.TIER2_MSGPACK;
|
|
105
|
+
const isStreamFrame = "isLast" in frame;
|
|
106
|
+
const isFinal = !isStreamFrame || frame.isLast;
|
|
107
|
+
if (isFinal)
|
|
108
|
+
flags |= FrameFlags.FINAL;
|
|
109
|
+
return flags;
|
|
110
|
+
}
|
|
111
|
+
_selectCodec(tier) {
|
|
112
|
+
if (tier === EncodingTier.JSON)
|
|
113
|
+
return this._json;
|
|
114
|
+
if (tier === EncodingTier.MSGPACK)
|
|
115
|
+
return this._msgpack;
|
|
116
|
+
throw new NpsCodecError(`Unsupported encoding tier: 0x${tier.toString(16).padStart(2, "0")}.`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/core/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/codecs/index.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/codecs/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { EncodingTier, type FrameHeader } from "../frame-header.js";
|
|
2
|
+
export interface DecodeResult {
|
|
3
|
+
/** Parsed frame header. */
|
|
4
|
+
header: FrameHeader;
|
|
5
|
+
/** Decoded payload object. */
|
|
6
|
+
payload: unknown;
|
|
7
|
+
/** Total bytes consumed (header + payload). */
|
|
8
|
+
bytesConsumed: number;
|
|
9
|
+
}
|
|
10
|
+
export interface EncodeOptions {
|
|
11
|
+
/** Frame type byte. */
|
|
12
|
+
frameType: number;
|
|
13
|
+
/** Encoding tier (default: JSON). */
|
|
14
|
+
tier?: EncodingTier;
|
|
15
|
+
/** Set FINAL flag. */
|
|
16
|
+
final?: boolean;
|
|
17
|
+
/** Set ENC flag. */
|
|
18
|
+
encrypted?: boolean;
|
|
19
|
+
/** Use extended header (for payloads > 64KB). */
|
|
20
|
+
extended?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface CodecOptions {
|
|
23
|
+
/** Maximum frame payload in bytes (negotiated via CapsFrame). Default: 65535. */
|
|
24
|
+
maxFramePayload?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Decode a complete NCP frame from a buffer.
|
|
28
|
+
*
|
|
29
|
+
* @returns Decoded header + payload + bytes consumed.
|
|
30
|
+
* @throws {NcpError} NCP-ENCODING-UNSUPPORTED for reserved tiers.
|
|
31
|
+
* @throws {NcpError} NCP-FRAME-PAYLOAD-TOO-LARGE if payload exceeds max.
|
|
32
|
+
* @throws {NcpError} NCP-FRAME-INCOMPLETE if buffer doesn't have enough data.
|
|
33
|
+
*/
|
|
34
|
+
export declare function decodeFrame(buffer: Uint8Array, options?: CodecOptions): DecodeResult;
|
|
35
|
+
/**
|
|
36
|
+
* Encode a payload into a complete NCP frame (header + payload bytes).
|
|
37
|
+
*/
|
|
38
|
+
export declare function encodeFrame(payload: unknown, options: EncodeOptions): Uint8Array;
|
|
39
|
+
//# sourceMappingURL=ncp-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ncp-codec.d.ts","sourceRoot":"","sources":["../../../src/core/codecs/ncp-codec.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,YAAY,EAGZ,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,sBAAsB;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,YAAY,CA8Cd;AAMD;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACrB,UAAU,CA+CZ"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// NCP Codec — Top-level encode/decode dispatcher
|
|
5
|
+
// Routes to Tier-1 JSON or Tier-2 MsgPack based on frame header flags.
|
|
6
|
+
import { parseFrameHeader, writeFrameHeader, buildFlags, EncodingTier, NcpError, DEFAULT_MAX_PAYLOAD, } from "../frame-header.js";
|
|
7
|
+
import { encodeJson, decodeJson } from "./tier1-json-codec.js";
|
|
8
|
+
import { encodeMsgPack, decodeMsgPack } from "./tier2-msgpack-codec.js";
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Decode
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
/**
|
|
13
|
+
* Decode a complete NCP frame from a buffer.
|
|
14
|
+
*
|
|
15
|
+
* @returns Decoded header + payload + bytes consumed.
|
|
16
|
+
* @throws {NcpError} NCP-ENCODING-UNSUPPORTED for reserved tiers.
|
|
17
|
+
* @throws {NcpError} NCP-FRAME-PAYLOAD-TOO-LARGE if payload exceeds max.
|
|
18
|
+
* @throws {NcpError} NCP-FRAME-INCOMPLETE if buffer doesn't have enough data.
|
|
19
|
+
*/
|
|
20
|
+
export function decodeFrame(buffer, options) {
|
|
21
|
+
const header = parseFrameHeader(buffer);
|
|
22
|
+
const maxPayload = options?.maxFramePayload ?? DEFAULT_MAX_PAYLOAD;
|
|
23
|
+
// NCP-F-09: Validate against negotiated max_frame_payload
|
|
24
|
+
if (header.payloadLength > maxPayload) {
|
|
25
|
+
throw new NcpError("NCP-FRAME-PAYLOAD-TOO-LARGE", `Payload ${header.payloadLength} exceeds max_frame_payload ${maxPayload}`);
|
|
26
|
+
}
|
|
27
|
+
const totalSize = header.headerSize + header.payloadLength;
|
|
28
|
+
// NCP-F-05: Buffer underrun — not enough data for payload
|
|
29
|
+
if (buffer.length < totalSize) {
|
|
30
|
+
throw new NcpError("NCP-FRAME-INCOMPLETE", `Buffer has ${buffer.length} bytes but frame needs ${totalSize}`);
|
|
31
|
+
}
|
|
32
|
+
// Extract payload bytes
|
|
33
|
+
const payloadBytes = buffer.subarray(header.headerSize, header.headerSize + header.payloadLength);
|
|
34
|
+
// Route to codec by tier
|
|
35
|
+
let payload;
|
|
36
|
+
switch (header.tier) {
|
|
37
|
+
case EncodingTier.Json:
|
|
38
|
+
payload = decodeJson(payloadBytes);
|
|
39
|
+
break;
|
|
40
|
+
case EncodingTier.MsgPack:
|
|
41
|
+
payload = decodeMsgPack(payloadBytes);
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
// NCP-E-05: Reserved tiers (0x02, 0x03)
|
|
45
|
+
throw new NcpError("NCP-ENCODING-UNSUPPORTED", `Unsupported encoding tier: 0x${header.tier.toString(16).padStart(2, "0")}`);
|
|
46
|
+
}
|
|
47
|
+
return { header, payload, bytesConsumed: totalSize };
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Encode
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
/**
|
|
53
|
+
* Encode a payload into a complete NCP frame (header + payload bytes).
|
|
54
|
+
*/
|
|
55
|
+
export function encodeFrame(payload, options) {
|
|
56
|
+
const tier = options.tier ?? EncodingTier.Json;
|
|
57
|
+
// Encode payload
|
|
58
|
+
let payloadBytes;
|
|
59
|
+
switch (tier) {
|
|
60
|
+
case EncodingTier.Json:
|
|
61
|
+
payloadBytes = encodeJson(payload);
|
|
62
|
+
break;
|
|
63
|
+
case EncodingTier.MsgPack:
|
|
64
|
+
payloadBytes = encodeMsgPack(payload);
|
|
65
|
+
break;
|
|
66
|
+
default:
|
|
67
|
+
throw new NcpError("NCP-ENCODING-UNSUPPORTED", `Unsupported encoding tier for encode: ${tier}`);
|
|
68
|
+
}
|
|
69
|
+
// Determine if extended header is needed
|
|
70
|
+
const needsExtended = options.extended || payloadBytes.length > DEFAULT_MAX_PAYLOAD;
|
|
71
|
+
const flags = buildFlags({
|
|
72
|
+
tier,
|
|
73
|
+
final: options.final,
|
|
74
|
+
encrypted: options.encrypted,
|
|
75
|
+
extended: needsExtended,
|
|
76
|
+
});
|
|
77
|
+
const header = {
|
|
78
|
+
frameType: options.frameType,
|
|
79
|
+
flags,
|
|
80
|
+
payloadLength: payloadBytes.length,
|
|
81
|
+
tier,
|
|
82
|
+
isFinal: options.final ?? false,
|
|
83
|
+
isEncrypted: options.encrypted ?? false,
|
|
84
|
+
isExtended: needsExtended,
|
|
85
|
+
headerSize: needsExtended ? 8 : 4,
|
|
86
|
+
};
|
|
87
|
+
// Write frame
|
|
88
|
+
const frame = new Uint8Array(header.headerSize + payloadBytes.length);
|
|
89
|
+
writeFrameHeader(header, frame);
|
|
90
|
+
frame.set(payloadBytes, header.headerSize);
|
|
91
|
+
return frame;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=ncp-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ncp-codec.js","sourceRoot":"","sources":["../../../src/core/codecs/ncp-codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encode a frame payload to Tier-1 JSON bytes.
|
|
3
|
+
*/
|
|
4
|
+
export declare function encodeJson(payload: unknown): Uint8Array;
|
|
5
|
+
/**
|
|
6
|
+
* Decode Tier-1 JSON bytes to a parsed object.
|
|
7
|
+
* @throws {NcpError} NPS-CLIENT-BAD-FRAME on malformed JSON.
|
|
8
|
+
*/
|
|
9
|
+
export declare function decodeJson(bytes: Uint8Array): unknown;
|
|
10
|
+
//# sourceMappingURL=tier1-json-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier1-json-codec.d.ts","sourceRoot":"","sources":["../../../src/core/codecs/tier1-json-codec.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAEvD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAUrD"}
|
|
@@ -3,31 +3,26 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Tier-1 JSON Codec — UTF-8 JSON encode/decode
|
|
5
5
|
// NPS-1 §8
|
|
6
|
-
|
|
7
6
|
import { NcpError } from "../frame-header.js";
|
|
8
|
-
|
|
9
7
|
const encoder = new TextEncoder();
|
|
10
8
|
const decoder = new TextDecoder();
|
|
11
|
-
|
|
12
9
|
/**
|
|
13
10
|
* Encode a frame payload to Tier-1 JSON bytes.
|
|
14
11
|
*/
|
|
15
|
-
export function encodeJson(payload
|
|
16
|
-
|
|
12
|
+
export function encodeJson(payload) {
|
|
13
|
+
return encoder.encode(JSON.stringify(payload));
|
|
17
14
|
}
|
|
18
|
-
|
|
19
15
|
/**
|
|
20
16
|
* Decode Tier-1 JSON bytes to a parsed object.
|
|
21
17
|
* @throws {NcpError} NPS-CLIENT-BAD-FRAME on malformed JSON.
|
|
22
18
|
*/
|
|
23
|
-
export function decodeJson(bytes
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
);
|
|
32
|
-
}
|
|
19
|
+
export function decodeJson(bytes) {
|
|
20
|
+
const text = decoder.decode(bytes);
|
|
21
|
+
try {
|
|
22
|
+
return JSON.parse(text);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
throw new NcpError("NPS-CLIENT-BAD-FRAME", "Malformed JSON payload");
|
|
26
|
+
}
|
|
33
27
|
}
|
|
28
|
+
//# sourceMappingURL=tier1-json-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier1-json-codec.js","sourceRoot":"","sources":["../../../src/core/codecs/tier1-json-codec.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,+CAA+C;AAC/C,WAAW;AAEX,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,wBAAwB,CACzB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encode a frame payload to Tier-2 MsgPack bytes.
|
|
3
|
+
*/
|
|
4
|
+
export declare function encodeMsgPack(payload: unknown): Uint8Array;
|
|
5
|
+
/**
|
|
6
|
+
* Decode Tier-2 MsgPack bytes to a parsed object.
|
|
7
|
+
* @throws {NcpError} NPS-CLIENT-BAD-FRAME on malformed MsgPack.
|
|
8
|
+
*/
|
|
9
|
+
export declare function decodeMsgPack(bytes: Uint8Array): unknown;
|
|
10
|
+
//# sourceMappingURL=tier2-msgpack-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier2-msgpack-codec.d.ts","sourceRoot":"","sources":["../../../src/core/codecs/tier2-msgpack-codec.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAE1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CASxD"}
|
|
@@ -3,28 +3,24 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Tier-2 MsgPack Codec — Binary encode/decode
|
|
5
5
|
// NPS-1 §8
|
|
6
|
-
|
|
7
6
|
import { encode, decode } from "@msgpack/msgpack";
|
|
8
7
|
import { NcpError } from "../frame-header.js";
|
|
9
|
-
|
|
10
8
|
/**
|
|
11
9
|
* Encode a frame payload to Tier-2 MsgPack bytes.
|
|
12
10
|
*/
|
|
13
|
-
export function encodeMsgPack(payload
|
|
14
|
-
|
|
11
|
+
export function encodeMsgPack(payload) {
|
|
12
|
+
return encode(payload);
|
|
15
13
|
}
|
|
16
|
-
|
|
17
14
|
/**
|
|
18
15
|
* Decode Tier-2 MsgPack bytes to a parsed object.
|
|
19
16
|
* @throws {NcpError} NPS-CLIENT-BAD-FRAME on malformed MsgPack.
|
|
20
17
|
*/
|
|
21
|
-
export function decodeMsgPack(bytes
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
);
|
|
29
|
-
}
|
|
18
|
+
export function decodeMsgPack(bytes) {
|
|
19
|
+
try {
|
|
20
|
+
return decode(bytes);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new NcpError("NPS-CLIENT-BAD-FRAME", "Malformed MsgPack payload");
|
|
24
|
+
}
|
|
30
25
|
}
|
|
26
|
+
//# sourceMappingURL=tier2-msgpack-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier2-msgpack-codec.js","sourceRoot":"","sources":["../../../src/core/codecs/tier2-msgpack-codec.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,8CAA8C;AAC9C,WAAW;AAEX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAY,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,2BAA2B,CAC5B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Async crypto operations used across NPS protocols.
|
|
3
|
+
* All keys, IVs, and byte payloads are Uint8Array.
|
|
4
|
+
*/
|
|
5
|
+
export interface CryptoProvider {
|
|
6
|
+
/** Generate cryptographically secure random bytes. */
|
|
7
|
+
randomBytes(n: number): Uint8Array;
|
|
8
|
+
/** Generate an Ed25519 keypair. */
|
|
9
|
+
ed25519GenerateKeyPair(): Promise<{
|
|
10
|
+
publicKey: Uint8Array;
|
|
11
|
+
privateKey: Uint8Array;
|
|
12
|
+
}>;
|
|
13
|
+
/** Sign data with an Ed25519 private key. Returns 64-byte signature. */
|
|
14
|
+
ed25519Sign(privateKey: Uint8Array, data: Uint8Array): Promise<Uint8Array>;
|
|
15
|
+
/** Verify an Ed25519 signature. */
|
|
16
|
+
ed25519Verify(publicKey: Uint8Array, data: Uint8Array, sig: Uint8Array): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* AES-256-GCM encrypt.
|
|
19
|
+
* Returns ciphertext || 16-byte tag (single contiguous buffer, matching
|
|
20
|
+
* Web Crypto subtle.encrypt output and Python pycryptodome layout).
|
|
21
|
+
*/
|
|
22
|
+
aesGcmEncrypt(key: Uint8Array, iv: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array>;
|
|
23
|
+
/**
|
|
24
|
+
* AES-256-GCM decrypt.
|
|
25
|
+
* Input is ciphertext || 16-byte tag (same layout as aesGcmEncrypt output).
|
|
26
|
+
*/
|
|
27
|
+
aesGcmDecrypt(key: Uint8Array, iv: Uint8Array, ciphertextAndTag: Uint8Array): Promise<Uint8Array>;
|
|
28
|
+
/** PBKDF2-SHA256 key derivation. */
|
|
29
|
+
pbkdf2Sha256(passphrase: Uint8Array, salt: Uint8Array, iterations: number, keyLen: number): Promise<Uint8Array>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=crypto-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-provider.d.ts","sourceRoot":"","sources":["../../src/core/crypto-provider.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAEnC,mCAAmC;IACnC,sBAAsB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IAErF,wEAAwE;IACxE,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3E,mCAAmC;IACnC,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1F;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3F;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAElG,oCAAoC;IACpC,YAAY,CACV,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC,CAAC;CACxB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// CryptoProvider interface — async crypto abstraction for Node + browser.
|
|
5
|
+
// NPS-3 §10 / Q10 resolution in nps-ts-sdk-step7-plan.
|
|
6
|
+
//
|
|
7
|
+
// Implementations (NodeCryptoProvider, WebCryptoProvider) land at P3
|
|
8
|
+
// alongside NIP tests. This file is structural scaffold only.
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=crypto-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-provider.js","sourceRoot":"","sources":["../../src/core/crypto-provider.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,0EAA0E;AAC1E,uDAAuD;AACvD,EAAE;AACF,qEAAqE;AACrE,8DAA8D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Base class for all NPS SDK errors. */
|
|
2
|
+
export declare class NpsError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/** Frame parse or structural error. */
|
|
6
|
+
export declare class NpsFrameError extends NpsError {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
/** Encode or decode error. */
|
|
10
|
+
export declare class NpsCodecError extends NpsError {
|
|
11
|
+
constructor(message: string);
|
|
12
|
+
}
|
|
13
|
+
/** Anchor cache miss — requested anchor ID not found. */
|
|
14
|
+
export declare class NpsAnchorNotFoundError extends NpsError {
|
|
15
|
+
readonly anchorId: string;
|
|
16
|
+
constructor(anchorId: string, message?: string);
|
|
17
|
+
}
|
|
18
|
+
/** Anchor ID collision — same ID but different schema content. */
|
|
19
|
+
export declare class NpsAnchorPoisonError extends NpsError {
|
|
20
|
+
readonly anchorId: string;
|
|
21
|
+
constructor(anchorId: string, message?: string);
|
|
22
|
+
}
|
|
23
|
+
/** Stream-level error (sequence gap, unknown stream ID, etc.). */
|
|
24
|
+
export declare class NpsStreamError extends NpsError {
|
|
25
|
+
constructor(message: string);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=exceptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../../src/core/exceptions.ts"],"names":[],"mappings":"AAMA,yCAAyC;AACzC,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAED,uCAAuC;AACvC,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,8BAA8B;AAC9B,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,yDAAyD;AACzD,qBAAa,sBAAuB,SAAQ,QAAQ;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACd,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAK/C;AAED,kEAAkE;AAClE,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACd,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAK/C;AAED,kEAAkE;AAClE,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// NPS exception hierarchy — ported from nps_sdk/core/exceptions.py
|
|
5
|
+
// NPS-1 §6
|
|
6
|
+
/** Base class for all NPS SDK errors. */
|
|
7
|
+
export class NpsError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = "NpsError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** Frame parse or structural error. */
|
|
14
|
+
export class NpsFrameError extends NpsError {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "NpsFrameError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/** Encode or decode error. */
|
|
21
|
+
export class NpsCodecError extends NpsError {
|
|
22
|
+
constructor(message) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.name = "NpsCodecError";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Anchor cache miss — requested anchor ID not found. */
|
|
28
|
+
export class NpsAnchorNotFoundError extends NpsError {
|
|
29
|
+
anchorId;
|
|
30
|
+
constructor(anchorId, message) {
|
|
31
|
+
super(message ?? `Anchor not found: ${anchorId}`);
|
|
32
|
+
this.name = "NpsAnchorNotFoundError";
|
|
33
|
+
this.anchorId = anchorId;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Anchor ID collision — same ID but different schema content. */
|
|
37
|
+
export class NpsAnchorPoisonError extends NpsError {
|
|
38
|
+
anchorId;
|
|
39
|
+
constructor(anchorId, message) {
|
|
40
|
+
super(message ?? `Anchor poison detected: ${anchorId}`);
|
|
41
|
+
this.name = "NpsAnchorPoisonError";
|
|
42
|
+
this.anchorId = anchorId;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Stream-level error (sequence gap, unknown stream ID, etc.). */
|
|
46
|
+
export class NpsStreamError extends NpsError {
|
|
47
|
+
constructor(message) {
|
|
48
|
+
super(message);
|
|
49
|
+
this.name = "NpsStreamError";
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=exceptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/core/exceptions.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,mEAAmE;AACnE,WAAW;AAEX,yCAAyC;AACzC,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,uCAAuC;AACvC,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,8BAA8B;AAC9B,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,yDAAyD;AACzD,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IACzC,QAAQ,CAAS;IAC1B,YAAY,QAAgB,EAAE,OAAgB;QAC5C,KAAK,CAAC,OAAO,IAAI,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,kEAAkE;AAClE,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IACvC,QAAQ,CAAS;IAC1B,YAAY,QAAgB,EAAE,OAAgB;QAC5C,KAAK,CAAC,OAAO,IAAI,2BAA2B,QAAQ,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,kEAAkE;AAClE,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
|