@labacacia/nps-sdk 1.0.0-alpha.1
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/CONTRIBUTING.md +33 -0
- package/LICENSE +170 -0
- package/NOTICE +7 -0
- package/README.md +153 -0
- package/dist/codec-CmHeovTV.d.cts +120 -0
- package/dist/codec-CmHeovTV.d.ts +120 -0
- 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/dist/core/codecs/index.js +6 -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/dist/core/codecs/tier1-json-codec.js +28 -0
- 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/dist/core/codecs/tier2-msgpack-codec.js +26 -0
- 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 +80 -0
- package/dist/core/frames.d.ts.map +1 -0
- package/dist/core/frames.js +153 -0
- package/dist/core/frames.js.map +1 -0
- package/dist/core/index.cjs +371 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +41 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +10 -0
- 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 +28 -0
- package/dist/core/status-codes.d.ts.map +1 -0
- package/dist/core/status-codes.js +38 -0
- package/dist/core/status-codes.js.map +1 -0
- package/dist/frames-B3qLdl_g.d.cts +77 -0
- package/dist/frames-Ff7-ZPUl.d.ts +77 -0
- package/dist/index.cjs +1556 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +21 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- 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 +76 -0
- package/dist/ncp/frames.d.ts.map +1 -0
- package/dist/ncp/frames.js +147 -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.cjs +188 -0
- package/dist/ncp/index.cjs.map +1 -0
- package/dist/ncp/index.d.cts +6 -0
- package/dist/ncp/index.d.ts +11 -0
- package/dist/ncp/index.d.ts.map +1 -0
- package/dist/ncp/index.js +13 -0
- package/dist/ncp/index.js.map +1 -0
- package/dist/ncp/ncp-error-codes.d.ts +22 -0
- package/dist/ncp/ncp-error-codes.d.ts.map +1 -0
- package/dist/ncp/ncp-error-codes.js +32 -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/registry.d.ts +3 -0
- package/dist/ncp/registry.d.ts.map +1 -0
- package/dist/ncp/registry.js +12 -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/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.cjs +252 -0
- package/dist/ndp/index.cjs.map +1 -0
- package/dist/ndp/index.d.cts +86 -0
- package/dist/ndp/index.d.ts +5 -0
- package/dist/ndp/index.d.ts.map +1 -0
- package/dist/ndp/index.js +7 -0
- package/dist/ndp/index.js.map +1 -0
- package/dist/ndp/ndp-registry.d.ts +11 -0
- package/dist/ndp/ndp-registry.d.ts.map +1 -0
- package/dist/ndp/ndp-registry.js +79 -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/frames.d.ts +44 -0
- package/dist/nip/frames.d.ts.map +1 -0
- package/dist/nip/frames.js +81 -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.cjs +214 -0
- package/dist/nip/index.cjs.map +1 -0
- package/dist/nip/index.d.cts +65 -0
- package/dist/nip/index.d.ts +4 -0
- package/dist/nip/index.d.ts.map +1 -0
- package/dist/nip/index.js +6 -0
- 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/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.cjs +762 -0
- package/dist/nop/index.cjs.map +1 -0
- package/dist/nop/index.d.cts +155 -0
- package/dist/nop/index.d.ts +5 -0
- package/dist/nop/index.d.ts.map +1 -0
- package/dist/nop/index.js +7 -0
- 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/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.cjs +658 -0
- package/dist/nwp/index.cjs.map +1 -0
- package/dist/nwp/index.d.cts +65 -0
- package/dist/nwp/index.d.ts +4 -0
- package/dist/nwp/index.d.ts.map +1 -0
- package/dist/nwp/index.js +6 -0
- 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/dist/setup.js +29 -0
- package/dist/setup.js.map +1 -0
- package/nip-ca-server/Dockerfile +27 -0
- package/nip-ca-server/README.md +45 -0
- package/nip-ca-server/db/001_init.sql +25 -0
- package/nip-ca-server/docker-compose.yml +29 -0
- package/nip-ca-server/package.json +23 -0
- package/nip-ca-server/src/ca.ts +155 -0
- package/nip-ca-server/src/db.ts +104 -0
- package/nip-ca-server/src/index.ts +157 -0
- package/nip-ca-server/tsconfig.json +13 -0
- package/package.json +47 -0
- package/src/core/anchor-cache.ts +129 -0
- package/src/core/cache.ts +93 -0
- package/src/core/canonical-json.ts +50 -0
- package/src/core/codec.ts +158 -0
- package/src/core/codecs/index.ts +5 -0
- package/src/core/codecs/ncp-codec.ts +170 -0
- package/src/core/codecs/tier1-json-codec.ts +33 -0
- package/src/core/codecs/tier2-msgpack-codec.ts +30 -0
- package/src/core/crypto-provider.ts +47 -0
- package/src/core/exceptions.ts +57 -0
- package/src/core/frame-header.ts +282 -0
- package/src/core/frame-registry.ts +91 -0
- package/src/core/frames.ts +183 -0
- package/src/core/index.ts +10 -0
- package/src/core/registry.ts +28 -0
- package/src/core/status-codes.ts +46 -0
- package/src/index.ts +10 -0
- package/src/ncp/frames/anchor-frame.ts +87 -0
- package/src/ncp/frames/caps-frame.ts +59 -0
- package/src/ncp/frames/diff-frame.ts +69 -0
- package/src/ncp/frames/error-frame.ts +26 -0
- package/src/ncp/frames/hello-frame.ts +50 -0
- package/src/ncp/frames/stream-frame.ts +35 -0
- package/src/ncp/frames.ts +199 -0
- package/src/ncp/handshake.ts +95 -0
- package/src/ncp/index.ts +12 -0
- package/src/ncp/ncp-error-codes.ts +34 -0
- package/src/ncp/ncp-patch-format.ts +16 -0
- package/src/ncp/registry.ts +14 -0
- package/src/ncp/stream-manager.ts +212 -0
- package/src/ndp/frames.ts +124 -0
- package/src/ndp/index.ts +7 -0
- package/src/ndp/ndp-registry.ts +82 -0
- package/src/ndp/registry.ts +12 -0
- package/src/ndp/validator.ts +64 -0
- package/src/nip/frames.ts +106 -0
- package/src/nip/identity.ts +113 -0
- package/src/nip/index.ts +6 -0
- package/src/nip/registry.ts +12 -0
- package/src/nop/client.ts +103 -0
- package/src/nop/frames.ts +181 -0
- package/src/nop/index.ts +7 -0
- package/src/nop/models.ts +79 -0
- package/src/nop/nop-types.ts +208 -0
- package/src/nop/registry.ts +13 -0
- package/src/nwp/client.ts +114 -0
- package/src/nwp/frames.ts +116 -0
- package/src/nwp/index.ts +6 -0
- package/src/nwp/registry.ts +11 -0
- package/src/setup.ts +32 -0
- package/tests/core/anchor-cache.test.ts +242 -0
- package/tests/core/codec.test.ts +205 -0
- package/tests/core/frame-registry.test.ts +46 -0
- package/tests/core.test.ts +327 -0
- package/tests/ncp/diff-binary-bitset.test.ts +107 -0
- package/tests/ncp/e2e-enc-reject.test.ts +93 -0
- package/tests/ncp/err-error-frame.test.ts +152 -0
- package/tests/ncp/frames.test.ts +359 -0
- package/tests/ncp/framing.test.ts +233 -0
- package/tests/ncp/hello-frame.test.ts +122 -0
- package/tests/ncp/inline-anchor.test.ts +88 -0
- package/tests/ncp/security.test.ts +184 -0
- package/tests/ncp/stream-window.test.ts +167 -0
- package/tests/ncp/stream.test.ts +242 -0
- package/tests/ncp/version-negotiation.test.ts +123 -0
- package/tests/ndp.test.ts +271 -0
- package/tests/nip.test.ts +184 -0
- package/tests/nop.test.ts +344 -0
- package/tests/nwp.test.ts +237 -0
- package/tsconfig.json +20 -0
- package/tsup.config.ts +20 -0
- package/vitest.config.ts +10 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/exceptions.ts","../src/core/frames.ts","../src/ncp/frames.ts","../src/core/index.ts","../src/core/codec.ts","../src/core/registry.ts","../src/core/cache.ts","../src/ncp/index.ts","../src/ncp/registry.ts","../src/nwp/frames.ts","../src/nwp/registry.ts","../src/nwp/client.ts","../src/nip/frames.ts","../src/nip/identity.ts","../src/nip/registry.ts","../src/ndp/frames.ts","../src/ndp/registry.ts","../src/ndp/ndp-registry.ts","../src/ndp/validator.ts","../src/nop/models.ts","../src/nop/frames.ts","../src/nop/registry.ts","../src/nop/client.ts","../src/setup.ts"],"names":["NpsError","NpsFrameError","NpsCodecError","NpsAnchorNotFoundError","NpsAnchorPoisonError","FrameType","EncodingTier","FrameFlags","DEFAULT_HEADER_SIZE","EXTENDED_HEADER_SIZE","DEFAULT_MAX_PAYLOAD","EXTENDED_MAX_PAYLOAD","FrameHeader","view","payloadLength","buf","AnchorFrame","CapsFrame","DiffFrame","ErrorFrame","StreamFrame","init_frames","msgpack","createHash","ed25519","sha512","readFileSync","pbkdf2Sync","createDecipheriv","randomBytes","createCipheriv","writeFileSync","ed255192","TaskState","TaskPriority","BackoffStrategy","AggregateStrategy"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/** Base class for all NPS errors. */\nexport class NpsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = new.target.name;\n }\n}\n\n/** Raised when a wire buffer cannot be parsed as a valid NPS frame. */\nexport class NpsFrameError extends NpsError {}\n\n/** Raised when frame serialisation or deserialisation fails. */\nexport class NpsCodecError extends NpsError {}\n\n/** Raised when an anchor_id is not found in the cache. */\nexport class NpsAnchorNotFoundError extends NpsError {\n constructor(public readonly anchorId: string) {\n super(`AnchorFrame not found in cache: ${anchorId}`);\n }\n}\n\n/**\n * Raised when the same anchor_id is stored with a different schema (NPS-1 §7.2).\n * This indicates a potential anchor-poisoning attack.\n */\nexport class NpsAnchorPoisonError extends NpsError {\n constructor(public readonly anchorId: string) {\n super(\n `Anchor poisoning detected: anchor_id ${anchorId} already exists with a different schema.`,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS wire-level frame primitives: FrameType, FrameFlags, EncodingTier, FrameHeader.\n */\n\nimport { NpsFrameError } from \"./exceptions.js\";\n\n// ── FrameType ────────────────────────────────────────────────────────────────\n\n/** Unified frame byte namespace for the full NPS suite (NPS-0 §9). */\nexport enum FrameType {\n // NCP 0x01–0x0F\n ANCHOR = 0x01,\n DIFF = 0x02,\n STREAM = 0x03,\n CAPS = 0x04,\n ALIGN = 0x05, // deprecated — use AlignStream (0x43)\n\n // NWP 0x10–0x1F\n QUERY = 0x10,\n ACTION = 0x11,\n\n // NIP 0x20–0x2F\n IDENT = 0x20,\n TRUST = 0x21,\n REVOKE = 0x22,\n\n // NDP 0x30–0x3F\n ANNOUNCE = 0x30,\n RESOLVE = 0x31,\n GRAPH = 0x32,\n\n // NOP 0x40–0x4F\n TASK = 0x40,\n DELEGATE = 0x41,\n SYNC = 0x42,\n ALIGN_STREAM = 0x43,\n\n // Reserved / System 0xF0–0xFF\n ERROR = 0xFE,\n}\n\n// ── EncodingTier ─────────────────────────────────────────────────────────────\n\n/**\n * Wire encoding tier, stored in the lower 2 bits of the flags byte (NPS-1 §3.2).\n * 0x00 = Tier-1 JSON — human-readable; development / compatibility.\n * 0x01 = Tier-2 MsgPack — binary, ~60 % smaller; production default.\n */\nexport enum EncodingTier {\n JSON = 0x00,\n MSGPACK = 0x01,\n}\n\n// ── FrameFlags ───────────────────────────────────────────────────────────────\n\n/**\n * Flags byte in the NPS frame header (NPS-1 §3.2).\n * Bit layout (LSB = bit 0):\n * Bits 0–1 (T0,T1) : Encoding tier\n * Bit 2 (FINAL) : Last chunk of a StreamFrame; non-stream frames MUST set this\n * Bit 3 (ENC) : Payload encrypted\n * Bits 4–6 (RSV) : Reserved — sender MUST write 0\n * Bit 7 (EXT) : Extended 8-byte header\n */\nexport const FrameFlags = {\n NONE: 0x00,\n TIER1_JSON: 0x00,\n TIER2_MSGPACK: 0x01,\n FINAL: 0x04,\n ENCRYPTED: 0x08,\n EXT: 0x80,\n} as const;\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nexport const DEFAULT_HEADER_SIZE = 4;\nexport const EXTENDED_HEADER_SIZE = 8;\nexport const DEFAULT_MAX_PAYLOAD = 0xffff; // 65 535 bytes\nexport const EXTENDED_MAX_PAYLOAD = 0xffffffff; // 4 GiB - 1\n\n// ── FrameHeader ──────────────────────────────────────────────────────────────\n\n/**\n * NPS frame header, present at the start of every wire message (NPS-1 §3.1).\n *\n * Default (4 bytes, EXT=0):\n * Byte 0 : FrameType\n * Byte 1 : Flags\n * Byte 2–3 : PayloadLength (big-endian uint16)\n *\n * Extended (8 bytes, EXT=1):\n * Byte 0 : FrameType\n * Byte 1 : Flags (bit 7 = 1)\n * Byte 2–3 : Reserved (must be 0)\n * Byte 4–7 : PayloadLength (big-endian uint32)\n */\nexport class FrameHeader {\n constructor(\n public readonly frameType: FrameType,\n public readonly flags: number,\n public readonly payloadLength: number,\n ) {}\n\n get isExtended(): boolean {\n return (this.flags & FrameFlags.EXT) !== 0;\n }\n\n get headerSize(): number {\n return this.isExtended ? EXTENDED_HEADER_SIZE : DEFAULT_HEADER_SIZE;\n }\n\n get encodingTier(): EncodingTier {\n return (this.flags & 0x03) as EncodingTier;\n }\n\n get isFinal(): boolean {\n return (this.flags & 0x04) !== 0;\n }\n\n get isEncrypted(): boolean {\n return (this.flags & 0x08) !== 0;\n }\n\n // ── Parsing ───────────────────────────────────────────────────────────────\n\n static parse(buf: Uint8Array): FrameHeader {\n if (buf.length < 2) {\n throw new NpsFrameError(\n `Buffer too small to read frame type and flags: need >= 2 bytes, got ${buf.length}.`,\n );\n }\n\n const flags = buf[1]!;\n const ext = (flags & FrameFlags.EXT) !== 0;\n\n if (ext) {\n if (buf.length < EXTENDED_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for extended frame header: need ${EXTENDED_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint32(4, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n if (buf.length < DEFAULT_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for frame header: need ${DEFAULT_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint16(2, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n // ── Serialisation ─────────────────────────────────────────────────────────\n\n toBytes(): Uint8Array {\n if (this.isExtended) {\n const buf = new Uint8Array(EXTENDED_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, 0, false); // reserved\n view.setUint32(4, this.payloadLength, false);\n return buf;\n }\n const buf = new Uint8Array(DEFAULT_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, this.payloadLength, false);\n return buf;\n }\n\n toString(): string {\n return `FrameHeader(frameType=0x${this.frameType.toString(16).padStart(2, \"0\")}, flags=0x${this.flags.toString(16).padStart(2, \"0\")}, payloadLength=${this.payloadLength})`;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\n// ── FrameSchema ───────────────────────────────────────────────────────────────\n\nexport interface SchemaField {\n name: string;\n type: string;\n semantic?: string;\n nullable?: boolean;\n}\n\nexport interface FrameSchema {\n fields: readonly SchemaField[];\n}\n\n// ── AnchorFrame ───────────────────────────────────────────────────────────────\n\nexport class AnchorFrame implements NpsFrame {\n readonly frameType = FrameType.ANCHOR;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorId: string,\n public readonly schema: FrameSchema,\n public readonly ttl: number = 3600,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_id: this.anchorId,\n schema: { fields: this.schema.fields.map((f) => ({ ...f })) },\n ttl: this.ttl,\n };\n }\n\n static fromDict(data: Record<string, unknown>): AnchorFrame {\n const schemaRaw = data[\"schema\"] as { fields: SchemaField[] };\n return new AnchorFrame(\n data[\"anchor_id\"] as string,\n { fields: schemaRaw.fields },\n (data[\"ttl\"] as number | undefined) ?? 3600,\n );\n }\n}\n\n// ── JsonPatchOperation ────────────────────────────────────────────────────────\n\nexport interface JsonPatchOperation {\n op: string;\n path: string;\n value?: unknown;\n}\n\n// ── DiffFrame ─────────────────────────────────────────────────────────────────\n\nexport class DiffFrame implements NpsFrame {\n readonly frameType = FrameType.DIFF;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef: string,\n public readonly baseSeq: number,\n public readonly patch: readonly JsonPatchOperation[],\n public readonly entityId?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef,\n base_seq: this.baseSeq,\n patch: this.patch.map((p) => ({ ...p })),\n entity_id: this.entityId ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): DiffFrame {\n return new DiffFrame(\n data[\"anchor_ref\"] as string,\n data[\"base_seq\"] as number,\n data[\"patch\"] as JsonPatchOperation[],\n (data[\"entity_id\"] as string | null) ?? undefined,\n );\n }\n}\n\n// ── StreamFrame ───────────────────────────────────────────────────────────────\n\nexport class StreamFrame implements NpsFrame {\n readonly frameType = FrameType.STREAM;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly streamId: string,\n public readonly seq: number,\n public readonly isLast: boolean,\n public readonly data: readonly Record<string, unknown>[],\n public readonly anchorRef?: string,\n public readonly windowSize?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n stream_id: this.streamId,\n seq: this.seq,\n is_last: this.isLast,\n data: this.data,\n anchor_ref: this.anchorRef ?? null,\n window_size: this.windowSize ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): StreamFrame {\n return new StreamFrame(\n data[\"stream_id\"] as string,\n data[\"seq\"] as number,\n data[\"is_last\"] as boolean,\n data[\"data\"] as Record<string, unknown>[],\n (data[\"anchor_ref\"] as string | null) ?? undefined,\n (data[\"window_size\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── CapsFrame ─────────────────────────────────────────────────────────────────\n\nexport class CapsFrame implements NpsFrame {\n readonly frameType = FrameType.CAPS;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef: string,\n public readonly count: number,\n public readonly data: readonly Record<string, unknown>[],\n public readonly nextCursor?: string,\n public readonly tokenEst?: number,\n public readonly cached?: boolean,\n public readonly tokenizerUsed?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef,\n count: this.count,\n data: this.data,\n next_cursor: this.nextCursor ?? null,\n token_est: this.tokenEst ?? null,\n cached: this.cached ?? null,\n tokenizer_used: this.tokenizerUsed ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): CapsFrame {\n return new CapsFrame(\n data[\"anchor_ref\"] as string,\n data[\"count\"] as number,\n data[\"data\"] as Record<string, unknown>[],\n (data[\"next_cursor\"] as string | null) ?? undefined,\n (data[\"token_est\"] as number | null) ?? undefined,\n (data[\"cached\"] as boolean | null) ?? undefined,\n (data[\"tokenizer_used\"] as string | null) ?? undefined,\n );\n }\n}\n\n// ── ErrorFrame ────────────────────────────────────────────────────────────────\n\nexport class ErrorFrame implements NpsFrame {\n readonly frameType = FrameType.ERROR;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly status: string,\n public readonly error: string,\n public readonly message?: string,\n public readonly details?: Record<string, unknown>,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n status: this.status,\n error: this.error,\n message: this.message ?? null,\n details: this.details ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): ErrorFrame {\n return new ErrorFrame(\n data[\"status\"] as string,\n data[\"error\"] as string,\n (data[\"message\"] as string | null) ?? undefined,\n (data[\"details\"] as Record<string, unknown> | null) ?? undefined,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from \"./exceptions.js\";\nexport * from \"./frames.js\";\nexport * from \"./codec.js\";\nexport * from \"./registry.js\";\nexport * from \"./cache.js\";\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS frame codec: Tier-1 (JSON) and Tier-2 (MsgPack) encode/decode,\n * plus the top-level NpsFrameCodec dispatcher.\n */\n\nimport * as msgpack from \"@msgpack/msgpack\";\nimport { NpsCodecError } from \"./exceptions.js\";\nimport {\n DEFAULT_MAX_PAYLOAD,\n EncodingTier,\n FrameFlags,\n FrameHeader,\n FrameType,\n} from \"./frames.js\";\nimport type { FrameRegistry } from \"./registry.js\";\n\n// ── NpsFrame interface ────────────────────────────────────────────────────────\n\nexport interface NpsFrame {\n readonly frameType: FrameType;\n readonly preferredTier: EncodingTier;\n toDict(): Record<string, unknown>;\n}\n\n// ── Tier-1 JSON codec ─────────────────────────────────────────────────────────\n\nexport class Tier1JsonCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n const json = JSON.stringify(frame.toDict());\n return new TextEncoder().encode(json);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const text = new TextDecoder().decode(payload);\n const data = JSON.parse(text) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── Tier-2 MsgPack codec ──────────────────────────────────────────────────────\n\nexport class Tier2MsgPackCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n return msgpack.encode(frame.toDict());\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const data = msgpack.decode(payload) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── NpsFrameCodec (dispatcher) ────────────────────────────────────────────────\n\nexport class NpsFrameCodec {\n private readonly _registry: FrameRegistry;\n private readonly _maxPayload: number;\n private readonly _json = new Tier1JsonCodec();\n private readonly _msgpack = new Tier2MsgPackCodec();\n\n constructor(registry: FrameRegistry, options: { maxPayload?: number } = {}) {\n this._registry = registry;\n this._maxPayload = options.maxPayload ?? DEFAULT_MAX_PAYLOAD;\n }\n\n // ── Encode ────────────────────────────────────────────────────────────────\n\n encode(frame: NpsFrame, options: { overrideTier?: EncodingTier } = {}): Uint8Array {\n const tier = options.overrideTier ?? frame.preferredTier;\n const tierCodec = this._selectCodec(tier);\n\n let payload: Uint8Array;\n try {\n payload = tierCodec.encode(frame);\n } catch (err) {\n if (err instanceof NpsCodecError) throw err;\n throw new NpsCodecError(`Encode failed for 0x${frame.frameType.toString(16)}.`);\n }\n\n if (payload.length > this._maxPayload) {\n throw new NpsCodecError(\n `Encoded payload for 0x${frame.frameType.toString(16).padStart(2, \"0\")} exceeds max_frame_payload` +\n ` (${payload.length} bytes > ${this._maxPayload}). Use StreamFrame (0x03) for large payloads.`,\n );\n }\n\n const useExt = payload.length > DEFAULT_MAX_PAYLOAD;\n let flags = this._buildFlags(frame, tier);\n if (useExt) flags |= FrameFlags.EXT;\n\n const header = new FrameHeader(frame.frameType, flags, payload.length);\n const headerBytes = header.toBytes();\n const wire = new Uint8Array(headerBytes.length + payload.length);\n wire.set(headerBytes, 0);\n wire.set(payload, headerBytes.length);\n return wire;\n }\n\n // ── Decode ────────────────────────────────────────────────────────────────\n\n decode(wire: Uint8Array): NpsFrame {\n const header = FrameHeader.parse(wire);\n const payload = wire.slice(header.headerSize, header.headerSize + header.payloadLength);\n const codec = this._selectCodec(header.encodingTier);\n return codec.decode(header.frameType, payload, this._registry);\n }\n\n static peekHeader(wire: Uint8Array): FrameHeader {\n return FrameHeader.parse(wire);\n }\n\n // ── Private ───────────────────────────────────────────────────────────────\n\n private _buildFlags(frame: NpsFrame, tier: EncodingTier): number {\n let flags = tier === EncodingTier.JSON ? FrameFlags.TIER1_JSON : FrameFlags.TIER2_MSGPACK;\n\n const isStreamFrame = \"isLast\" in frame;\n const isFinal = !isStreamFrame || (frame as { isLast: boolean }).isLast;\n if (isFinal) flags |= FrameFlags.FINAL;\n\n return flags;\n }\n\n private _selectCodec(tier: EncodingTier): Tier1JsonCodec | Tier2MsgPackCodec {\n if (tier === EncodingTier.JSON) return this._json;\n if (tier === EncodingTier.MSGPACK) return this._msgpack;\n throw new NpsCodecError(`Unsupported encoding tier: 0x${(tier as number).toString(16).padStart(2, \"0\")}.`);\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NpsFrameError } from \"./exceptions.js\";\nimport { FrameType } from \"./frames.js\";\nimport type { NpsFrame } from \"./codec.js\";\n\nexport interface FrameClass {\n fromDict(data: Record<string, unknown>): NpsFrame;\n}\n\nexport class FrameRegistry {\n private readonly _map = new Map<FrameType, FrameClass>();\n\n register(frameType: FrameType, cls: FrameClass): void {\n this._map.set(frameType, cls);\n }\n\n resolve(frameType: FrameType): FrameClass {\n const cls = this._map.get(frameType);\n if (cls === undefined) {\n throw new NpsFrameError(\n `No frame class registered for type 0x${frameType.toString(16).padStart(2, \"0\")}.`,\n );\n }\n return cls;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * AnchorFrameCache — in-process cache for AnchorFrame instances (NPS-1 §4.1).\n */\n\nimport { createHash } from \"node:crypto\";\nimport { NpsAnchorNotFoundError, NpsAnchorPoisonError } from \"./exceptions.js\";\nimport type { AnchorFrame, FrameSchema } from \"../ncp/frames.js\";\n\nexport class AnchorFrameCache {\n private readonly _store = new Map<string, { frame: AnchorFrame; expiresAt: number }>();\n\n // Allow clock injection for testing\n clock: () => number = () => Date.now();\n\n // ── Public API ────────────────────────────────────────────────────────────\n\n set(frame: AnchorFrame): string {\n const anchorId = frame.anchorId.startsWith(\"sha256:\")\n ? frame.anchorId\n : AnchorFrameCache.computeAnchorId(frame.schema);\n\n const existing = this._store.get(anchorId);\n if (existing !== undefined && this.clock() < existing.expiresAt) {\n if (!AnchorFrameCache._schemasEqual(existing.frame.schema, frame.schema)) {\n throw new NpsAnchorPoisonError(anchorId);\n }\n // Same schema — idempotent; refresh TTL below\n }\n\n const ttlMs = (frame.ttl ?? 3600) * 1000;\n const expiresAt = this.clock() + ttlMs;\n this._store.set(anchorId, { frame, expiresAt });\n return anchorId;\n }\n\n get(anchorId: string): AnchorFrame | undefined {\n const entry = this._store.get(anchorId);\n if (entry === undefined) return undefined;\n if (this.clock() > entry.expiresAt) {\n this._store.delete(anchorId);\n return undefined;\n }\n return entry.frame;\n }\n\n getRequired(anchorId: string): AnchorFrame {\n const frame = this.get(anchorId);\n if (frame === undefined) throw new NpsAnchorNotFoundError(anchorId);\n return frame;\n }\n\n invalidate(anchorId: string): void {\n this._store.delete(anchorId);\n }\n\n get size(): number {\n this._evictExpired();\n return this._store.size;\n }\n\n // ── Static helpers ────────────────────────────────────────────────────────\n\n static computeAnchorId(schema: FrameSchema): string {\n const sorted = [...schema.fields]\n .map((f) => {\n const obj: Record<string, unknown> = { name: f.name, type: f.type };\n if (f.semantic !== undefined) obj[\"semantic\"] = f.semantic;\n if (f.nullable !== undefined) obj[\"nullable\"] = f.nullable;\n return obj;\n })\n .sort((a, b) => String(a[\"name\"]).localeCompare(String(b[\"name\"])));\n\n const canonical = JSON.stringify(sorted);\n const digest = createHash(\"sha256\").update(canonical, \"utf8\").digest(\"hex\");\n return `sha256:${digest}`;\n }\n\n // ── Private ───────────────────────────────────────────────────────────────\n\n private _evictExpired(): void {\n const now = this.clock();\n for (const [k, entry] of this._store) {\n if (now > entry.expiresAt) this._store.delete(k);\n }\n }\n\n private static _schemasEqual(a: FrameSchema, b: FrameSchema): boolean {\n return AnchorFrameCache.computeAnchorId(a) === AnchorFrameCache.computeAnchorId(b);\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from \"./frames.js\";\nexport * from \"./registry.js\";\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { AnchorFrame, CapsFrame, DiffFrame, ErrorFrame, StreamFrame } from \"./frames.js\";\n\nexport function registerNcpFrames(registry: FrameRegistry): void {\n registry.register(FrameType.ANCHOR, AnchorFrame);\n registry.register(FrameType.DIFF, DiffFrame);\n registry.register(FrameType.STREAM, StreamFrame);\n registry.register(FrameType.CAPS, CapsFrame);\n registry.register(FrameType.ERROR, ErrorFrame);\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\n// ── Filter DSL ────────────────────────────────────────────────────────────────\n\nexport interface QueryOrderClause {\n field: string;\n dir: \"asc\" | \"desc\";\n}\n\nexport interface VectorSearchOptions {\n vector: readonly number[];\n topK?: number;\n minScore?: number;\n vectorField?: string;\n}\n\n// ── QueryFrame ────────────────────────────────────────────────────────────────\n\nexport class QueryFrame implements NpsFrame {\n readonly frameType = FrameType.QUERY;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef?: string,\n public readonly filter?: Record<string, unknown>,\n public readonly limit?: number,\n public readonly offset?: number,\n public readonly orderBy?: readonly QueryOrderClause[],\n public readonly fields?: readonly string[],\n public readonly vectorSearch?: VectorSearchOptions,\n public readonly depth?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef ?? null,\n filter: this.filter ?? null,\n limit: this.limit ?? null,\n offset: this.offset ?? null,\n order_by: this.orderBy ?? null,\n fields: this.fields ?? null,\n vector_search: this.vectorSearch ?? null,\n depth: this.depth ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): QueryFrame {\n return new QueryFrame(\n (data[\"anchor_ref\"] as string | null) ?? undefined,\n (data[\"filter\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"limit\"] as number | null) ?? undefined,\n (data[\"offset\"] as number | null) ?? undefined,\n (data[\"order_by\"] as QueryOrderClause[] | null) ?? undefined,\n (data[\"fields\"] as string[] | null) ?? undefined,\n (data[\"vector_search\"] as VectorSearchOptions | null) ?? undefined,\n (data[\"depth\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── ActionFrame ───────────────────────────────────────────────────────────────\n\nexport class ActionFrame implements NpsFrame {\n readonly frameType = FrameType.ACTION;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly actionId: string,\n public readonly params?: Record<string, unknown>,\n public readonly async_?: boolean,\n public readonly idempotencyKey?: string,\n public readonly timeoutMs?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n action_id: this.actionId,\n params: this.params ?? null,\n async: this.async_ ?? false,\n idempotency_key: this.idempotencyKey ?? null,\n timeout_ms: this.timeoutMs ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): ActionFrame {\n return new ActionFrame(\n data[\"action_id\"] as string,\n (data[\"params\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"async\"] as boolean | null) ?? undefined,\n (data[\"idempotency_key\"] as string | null) ?? undefined,\n (data[\"timeout_ms\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── AsyncActionResponse ───────────────────────────────────────────────────────\n\nexport interface AsyncActionResponse {\n taskId: string;\n status: string;\n pollUrl?: string | undefined;\n}\n\nexport function asyncActionResponseFromDict(data: Record<string, unknown>): AsyncActionResponse {\n const r: AsyncActionResponse = {\n taskId: data[\"task_id\"] as string,\n status: data[\"status\"] as string,\n };\n const pollUrl = data[\"poll_url\"] as string | null | undefined;\n if (pollUrl != null) r.pollUrl = pollUrl;\n return r;\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { ActionFrame, QueryFrame } from \"./frames.js\";\n\nexport function registerNwpFrames(registry: FrameRegistry): void {\n registry.register(FrameType.QUERY, QueryFrame);\n registry.register(FrameType.ACTION, ActionFrame);\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NwpClient — async HTTP-mode client for NPS Neural Web Protocol nodes (NPS-2).\n */\n\nimport { NpsFrameCodec } from \"../core/codec.js\";\nimport { EncodingTier } from \"../core/frames.js\";\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { registerNcpFrames } from \"../ncp/registry.js\";\nimport { CapsFrame } from \"../ncp/frames.js\";\nimport type { StreamFrame } from \"../ncp/frames.js\";\nimport { registerNwpFrames } from \"./registry.js\";\nimport { ActionFrame, asyncActionResponseFromDict } from \"./frames.js\";\nimport type { AnchorFrame } from \"../ncp/frames.js\";\nimport type { QueryFrame, AsyncActionResponse } from \"./frames.js\";\n\nconst CONTENT_TYPE = \"application/x-nps-frame\";\n\nexport class NwpClient {\n private readonly _baseUrl: string;\n private readonly _codec: NpsFrameCodec;\n private readonly _tier: EncodingTier;\n\n constructor(\n baseUrl: string,\n options: { defaultTier?: EncodingTier; maxPayload?: number; registry?: FrameRegistry } = {},\n ) {\n this._baseUrl = baseUrl.replace(/\\/$/, \"\");\n this._tier = options.defaultTier ?? EncodingTier.MSGPACK;\n\n const registry = options.registry ?? (() => {\n const r = new FrameRegistry();\n registerNcpFrames(r);\n registerNwpFrames(r);\n return r;\n })();\n const codecOpts = options.maxPayload !== undefined ? { maxPayload: options.maxPayload } : {};\n this._codec = new NpsFrameCodec(registry, codecOpts);\n }\n\n async sendAnchor(frame: AnchorFrame): Promise<void> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/anchor`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /anchor failed: HTTP ${res.status}`);\n }\n\n async query(frame: QueryFrame): Promise<CapsFrame> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/query`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /query failed: HTTP ${res.status}`);\n\n const buf = new Uint8Array(await res.arrayBuffer());\n const result = this._codec.decode(buf);\n if (!(result instanceof CapsFrame)) {\n throw new TypeError(`Expected CapsFrame from /query, got ${result.constructor.name}.`);\n }\n return result;\n }\n\n async *stream(frame: QueryFrame): AsyncGenerator<StreamFrame> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/stream`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /stream failed: HTTP ${res.status}`);\n if (res.body === null) return;\n\n const { StreamFrame: SF } = await import(\"../ncp/frames.js\");\n\n for await (const chunk of res.body) {\n const bytes = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk as ArrayBuffer);\n if (bytes.length === 0) continue;\n const result = this._codec.decode(bytes);\n if (!(result instanceof SF)) {\n throw new TypeError(`Expected StreamFrame from /stream, got ${result.constructor.name}.`);\n }\n yield result;\n if (result.isLast) break;\n }\n }\n\n async invoke(frame: ActionFrame): Promise<unknown> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/invoke`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /invoke failed: HTTP ${res.status}`);\n\n if (frame.async_) {\n return asyncActionResponseFromDict(await res.json() as Record<string, unknown>) as AsyncActionResponse;\n }\n\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(CONTENT_TYPE)) {\n const buf = new Uint8Array(await res.arrayBuffer());\n return this._codec.decode(buf);\n }\n return res.json();\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\nexport interface IdentMetadata {\n issuer: string;\n issuedAt: string;\n expiresAt?: string;\n capabilities?: readonly string[];\n scopes?: readonly string[];\n}\n\nexport class IdentFrame implements NpsFrame {\n readonly frameType = FrameType.IDENT;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly nid: string,\n public readonly pubKey: string,\n public readonly metadata: IdentMetadata,\n public readonly signature: string,\n ) {}\n\n unsignedDict(): Record<string, unknown> {\n return {\n nid: this.nid,\n pub_key: this.pubKey,\n metadata: this.metadata,\n };\n }\n\n toDict(): Record<string, unknown> {\n return { ...this.unsignedDict(), signature: this.signature };\n }\n\n static fromDict(data: Record<string, unknown>): IdentFrame {\n return new IdentFrame(\n data[\"nid\"] as string,\n data[\"pub_key\"] as string,\n data[\"metadata\"] as IdentMetadata,\n data[\"signature\"] as string,\n );\n }\n}\n\nexport class TrustFrame implements NpsFrame {\n readonly frameType = FrameType.TRUST;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly issuerNid: string,\n public readonly subjectNid: string,\n public readonly scopes: readonly string[],\n public readonly expiresAt: string,\n public readonly signature: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n issuer_nid: this.issuerNid,\n subject_nid: this.subjectNid,\n scopes: this.scopes,\n expires_at: this.expiresAt,\n signature: this.signature,\n };\n }\n\n static fromDict(data: Record<string, unknown>): TrustFrame {\n return new TrustFrame(\n data[\"issuer_nid\"] as string,\n data[\"subject_nid\"] as string,\n data[\"scopes\"] as string[],\n data[\"expires_at\"] as string,\n data[\"signature\"] as string,\n );\n }\n}\n\nexport class RevokeFrame implements NpsFrame {\n readonly frameType = FrameType.REVOKE;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly nid: string,\n public readonly reason?: string,\n public readonly revokedAt?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n nid: this.nid,\n reason: this.reason ?? null,\n revoked_at: this.revokedAt ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): RevokeFrame {\n return new RevokeFrame(\n data[\"nid\"] as string,\n (data[\"reason\"] as string | null) ?? undefined,\n (data[\"revoked_at\"] as string | null) ?? undefined,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NipIdentity — Ed25519 key management and signing for NPS NID identity.\n * Uses @noble/ed25519 for signing; node:crypto for key storage encryption.\n */\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha512 } from \"@noble/hashes/sha512\";\nimport { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes } from \"node:crypto\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\n\n// noble/ed25519 requires sha512 to be set explicitly in Node environments\ned25519.etc.sha512Sync = (...m) => sha512(ed25519.etc.concatBytes(...m));\n\nconst KEY_FILE_VERSION = 1;\nconst PBKDF2_ITERS = 600_000;\nconst SALT_BYTES = 16;\nconst IV_BYTES = 12;\nconst KEY_BYTES = 32;\n\ninterface KeyFileEnvelope {\n version: number;\n salt: string; // hex\n iv: string; // hex\n ciphertext: string; // hex\n pubKey: string; // hex\n}\n\nexport class NipIdentity {\n private constructor(\n private readonly _privKey: Uint8Array,\n public readonly pubKey: Uint8Array,\n ) {}\n\n // ── Factory ───────────────────────────────────────────────────────────────\n\n static generate(): NipIdentity {\n const priv = ed25519.utils.randomPrivateKey();\n const pub = ed25519.getPublicKey(priv);\n return new NipIdentity(priv, pub);\n }\n\n static fromPrivateKey(privKey: Uint8Array): NipIdentity {\n const pub = ed25519.getPublicKey(privKey);\n return new NipIdentity(privKey, pub);\n }\n\n /** Load from an AES-256-GCM encrypted key file. */\n static load(path: string, passphrase: string): NipIdentity {\n const envelope = JSON.parse(readFileSync(path, \"utf8\")) as KeyFileEnvelope;\n const salt = Buffer.from(envelope.salt, \"hex\");\n const iv = Buffer.from(envelope.iv, \"hex\");\n const ct = Buffer.from(envelope.ciphertext, \"hex\");\n\n const dk = pbkdf2Sync(passphrase, salt, PBKDF2_ITERS, KEY_BYTES, \"sha256\");\n const decipher = createDecipheriv(\"aes-256-gcm\", dk, iv);\n // Last 16 bytes of ciphertext are the GCM auth tag\n const authTag = ct.slice(ct.length - 16);\n const body = ct.slice(0, ct.length - 16);\n (decipher as ReturnType<typeof createDecipheriv> & { setAuthTag(tag: Buffer): void }).setAuthTag(authTag);\n const priv = Buffer.concat([decipher.update(body), decipher.final()]);\n return NipIdentity.fromPrivateKey(new Uint8Array(priv));\n }\n\n /** Save to an AES-256-GCM encrypted key file. */\n save(path: string, passphrase: string): void {\n const salt = randomBytes(SALT_BYTES);\n const iv = randomBytes(IV_BYTES);\n const dk = pbkdf2Sync(passphrase, salt, PBKDF2_ITERS, KEY_BYTES, \"sha256\");\n const cipher = createCipheriv(\"aes-256-gcm\", dk, iv);\n const body = Buffer.concat([cipher.update(Buffer.from(this._privKey)), cipher.final()]);\n const tag = (cipher as ReturnType<typeof createCipheriv> & { getAuthTag(): Buffer }).getAuthTag();\n\n const envelope: KeyFileEnvelope = {\n version: KEY_FILE_VERSION,\n salt: salt.toString(\"hex\"),\n iv: iv.toString(\"hex\"),\n ciphertext: Buffer.concat([body, tag]).toString(\"hex\"),\n pubKey: Buffer.from(this.pubKey).toString(\"hex\"),\n };\n writeFileSync(path, JSON.stringify(envelope, null, 2), \"utf8\");\n }\n\n // ── Signing ───────────────────────────────────────────────────────────────\n\n /** Sign a dict payload. Returns `ed25519:<base64url>`. */\n sign(payload: Record<string, unknown>): string {\n const canonical = JSON.stringify(payload, Object.keys(payload).sort());\n const bytes = new TextEncoder().encode(canonical);\n const sig = ed25519.sign(bytes, this._privKey);\n return `ed25519:${Buffer.from(sig).toString(\"base64\")}`;\n }\n\n /** Verify a signature string against a dict payload. */\n verify(payload: Record<string, unknown>, signature: string): boolean {\n if (!signature.startsWith(\"ed25519:\")) return false;\n try {\n const canonical = JSON.stringify(payload, Object.keys(payload).sort());\n const bytes = new TextEncoder().encode(canonical);\n const sigBytes = Buffer.from(signature.slice(\"ed25519:\".length), \"base64\");\n return ed25519.verify(sigBytes, bytes, this.pubKey);\n } catch {\n return false;\n }\n }\n\n /** Public key as `ed25519:<hex>` string. */\n get pubKeyString(): string {\n return `ed25519:${Buffer.from(this.pubKey).toString(\"hex\")}`;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { IdentFrame, TrustFrame, RevokeFrame } from \"./frames.js\";\n\nexport function registerNipFrames(registry: FrameRegistry): void {\n registry.register(FrameType.IDENT, IdentFrame);\n registry.register(FrameType.TRUST, TrustFrame);\n registry.register(FrameType.REVOKE, RevokeFrame);\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\nexport interface NdpAddress {\n host: string;\n port: number;\n protocol: string;\n}\n\nexport interface NdpGraphNode {\n nid: string;\n addresses: readonly NdpAddress[];\n capabilities: readonly string[];\n nodeType?: string;\n}\n\nexport interface NdpResolveResult {\n host: string;\n port: number;\n ttl: number;\n certFingerprint?: string;\n}\n\nexport class AnnounceFrame implements NpsFrame {\n readonly frameType = FrameType.ANNOUNCE;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly nid: string,\n public readonly addresses: readonly NdpAddress[],\n public readonly capabilities: readonly string[],\n public readonly ttl: number,\n public readonly timestamp: string,\n public readonly signature: string,\n public readonly nodeType?: string,\n ) {}\n\n unsignedDict(): Record<string, unknown> {\n return {\n nid: this.nid,\n addresses: this.addresses,\n capabilities: this.capabilities,\n ttl: this.ttl,\n timestamp: this.timestamp,\n node_type: this.nodeType ?? null,\n };\n }\n\n toDict(): Record<string, unknown> {\n return { ...this.unsignedDict(), signature: this.signature };\n }\n\n static fromDict(data: Record<string, unknown>): AnnounceFrame {\n return new AnnounceFrame(\n data[\"nid\"] as string,\n data[\"addresses\"] as NdpAddress[],\n data[\"capabilities\"] as string[],\n data[\"ttl\"] as number,\n data[\"timestamp\"] as string,\n data[\"signature\"] as string,\n (data[\"node_type\"] as string | null) ?? undefined,\n );\n }\n}\n\nexport class ResolveFrame implements NpsFrame {\n readonly frameType = FrameType.RESOLVE;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly target: string,\n public readonly requesterNid?: string,\n public readonly resolved?: NdpResolveResult,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n target: this.target,\n requester_nid: this.requesterNid ?? null,\n resolved: this.resolved ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): ResolveFrame {\n return new ResolveFrame(\n data[\"target\"] as string,\n (data[\"requester_nid\"] as string | null) ?? undefined,\n (data[\"resolved\"] as NdpResolveResult | null) ?? undefined,\n );\n }\n}\n\nexport class GraphFrame implements NpsFrame {\n readonly frameType = FrameType.GRAPH;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly seq: number,\n public readonly initialSync: boolean,\n public readonly nodes?: readonly NdpGraphNode[],\n public readonly patch?: readonly Record<string, unknown>[],\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n seq: this.seq,\n initial_sync: this.initialSync,\n nodes: this.nodes ?? null,\n patch: this.patch ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): GraphFrame {\n return new GraphFrame(\n data[\"seq\"] as number,\n data[\"initial_sync\"] as boolean,\n (data[\"nodes\"] as NdpGraphNode[] | null) ?? undefined,\n (data[\"patch\"] as Record<string, unknown>[] | null) ?? undefined,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { AnnounceFrame, GraphFrame, ResolveFrame } from \"./frames.js\";\n\nexport function registerNdpFrames(registry: FrameRegistry): void {\n registry.register(FrameType.ANNOUNCE, AnnounceFrame);\n registry.register(FrameType.RESOLVE, ResolveFrame);\n registry.register(FrameType.GRAPH, GraphFrame);\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { AnnounceFrame, NdpResolveResult } from \"./frames.js\";\n\ninterface RegistryEntry {\n frame: AnnounceFrame;\n expiresAt: number;\n}\n\nexport class InMemoryNdpRegistry {\n private readonly _store = new Map<string, RegistryEntry>();\n\n // Replaceable for testing\n clock: () => number = () => Date.now();\n\n announce(frame: AnnounceFrame): void {\n const expiresAt = this.clock() + frame.ttl * 1000;\n if (frame.ttl === 0) {\n this._store.delete(frame.nid);\n return;\n }\n this._store.set(frame.nid, { frame, expiresAt });\n }\n\n getByNid(nid: string): AnnounceFrame | undefined {\n const entry = this._store.get(nid);\n if (entry === undefined) return undefined;\n if (this.clock() > entry.expiresAt) {\n this._store.delete(nid);\n return undefined;\n }\n return entry.frame;\n }\n\n resolve(target: string): NdpResolveResult | undefined {\n for (const [nid, entry] of this._store) {\n if (this.clock() > entry.expiresAt) { this._store.delete(nid); continue; }\n if (!InMemoryNdpRegistry.nwpTargetMatchesNid(nid, target)) continue;\n const addr = entry.frame.addresses[0];\n if (addr === undefined) continue;\n return { host: addr.host, port: addr.port, ttl: entry.frame.ttl };\n }\n return undefined;\n }\n\n getAll(): AnnounceFrame[] {\n const now = this.clock();\n const result: AnnounceFrame[] = [];\n for (const [nid, entry] of this._store) {\n if (now > entry.expiresAt) { this._store.delete(nid); continue; }\n result.push(entry.frame);\n }\n return result;\n }\n\n static nwpTargetMatchesNid(nid: string, target: string): boolean {\n // NID: urn:nps:node:{authority}:{path-segment}\n // target: nwp://{authority}/{path}\n const nidParts = nid.split(\":\");\n if (nidParts.length < 5 || nidParts[0] !== \"urn\" || nidParts[1] !== \"nps\" || nidParts[2] !== \"node\") {\n return false;\n }\n if (!target.startsWith(\"nwp://\")) return false;\n\n const nidAuthority = nidParts[3]!;\n const nidPath = nidParts[4]!;\n const rest = target.slice(\"nwp://\".length);\n const slashIdx = rest.indexOf(\"/\");\n if (slashIdx === -1) return false;\n\n const urlAuthority = rest.slice(0, slashIdx);\n const urlPath = rest.slice(slashIdx + 1); // without leading slash\n\n if (urlAuthority !== nidAuthority) return false;\n\n // nidPath must be a prefix of urlPath at a segment boundary\n if (urlPath === nidPath) return true;\n if (urlPath.startsWith(nidPath + \"/\")) return true;\n return false;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha512 } from \"@noble/hashes/sha512\";\nimport type { AnnounceFrame } from \"./frames.js\";\n\ned25519.etc.sha512Sync = (...m) => sha512(ed25519.etc.concatBytes(...m));\n\nexport interface NdpAnnounceResult {\n isValid: boolean;\n errorCode?: string;\n message?: string;\n}\n\nexport const NdpAnnounceResult = {\n ok: (): NdpAnnounceResult => ({ isValid: true }),\n fail: (errorCode: string, message: string): NdpAnnounceResult => ({ isValid: false, errorCode, message }),\n};\n\nexport class NdpAnnounceValidator {\n private readonly _keys = new Map<string, string>(); // nid → \"ed25519:<hex>\"\n\n registerPublicKey(nid: string, encodedPubKey: string): void {\n this._keys.set(nid, encodedPubKey);\n }\n\n removePublicKey(nid: string): void {\n this._keys.delete(nid);\n }\n\n get knownPublicKeys(): ReadonlyMap<string, string> {\n return this._keys;\n }\n\n validate(frame: AnnounceFrame): NdpAnnounceResult {\n const encoded = this._keys.get(frame.nid);\n if (encoded === undefined) {\n return NdpAnnounceResult.fail(\"NDP-ANNOUNCE-NID-MISMATCH\", `No public key registered for NID: ${frame.nid}`);\n }\n\n try {\n const prefix = \"ed25519:\";\n const pubHex = encoded.startsWith(prefix) ? encoded.slice(prefix.length) : encoded;\n const pubKey = Buffer.from(pubHex, \"hex\");\n\n const sig = frame.signature;\n if (!sig.startsWith(prefix)) {\n return NdpAnnounceResult.fail(\"NDP-ANNOUNCE-SIG-INVALID\", \"Signature must start with 'ed25519:'\");\n }\n const sigBytes = Buffer.from(sig.slice(prefix.length), \"base64\");\n\n const unsigned = frame.unsignedDict();\n const canonical = JSON.stringify(unsigned, Object.keys(unsigned).sort());\n const message = new TextEncoder().encode(canonical);\n\n const valid = ed25519.verify(sigBytes, message, pubKey);\n if (!valid) return NdpAnnounceResult.fail(\"NDP-ANNOUNCE-SIG-INVALID\", \"Ed25519 signature verification failed.\");\n return NdpAnnounceResult.ok();\n } catch {\n return NdpAnnounceResult.fail(\"NDP-ANNOUNCE-SIG-INVALID\", \"Ed25519 signature verification failed.\");\n }\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nexport enum TaskState {\n PENDING = \"pending\",\n PREFLIGHT = \"preflight\",\n RUNNING = \"running\",\n WAITING_SYNC = \"waiting_sync\",\n COMPLETED = \"completed\",\n FAILED = \"failed\",\n CANCELLED = \"cancelled\",\n SKIPPED = \"skipped\",\n}\n\nexport enum TaskPriority {\n LOW = \"low\",\n NORMAL = \"normal\",\n HIGH = \"high\",\n}\n\nexport enum BackoffStrategy {\n FIXED = \"fixed\",\n LINEAR = \"linear\",\n EXPONENTIAL = \"exponential\",\n}\n\nexport enum AggregateStrategy {\n MERGE = \"merge\",\n FIRST = \"first\",\n FASTEST_K = \"fastest_k\",\n ALL = \"all\",\n}\n\nexport interface RetryPolicy {\n maxRetries: number;\n backoff: BackoffStrategy;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nexport function computeDelayMs(policy: RetryPolicy, attempt: number): number {\n const base = policy.baseDelayMs ?? 1000;\n const cap = policy.maxDelayMs ?? 30_000;\n let delay: number;\n switch (policy.backoff) {\n case BackoffStrategy.FIXED: delay = base; break;\n case BackoffStrategy.LINEAR: delay = base * (attempt + 1); break;\n case BackoffStrategy.EXPONENTIAL: delay = base * Math.pow(2, attempt); break;\n }\n return Math.min(delay, cap);\n}\n\nexport interface TaskContext {\n sessionKey?: string;\n requesterNid?: string;\n traceId?: string;\n}\n\nexport interface DagNode {\n id: string;\n action: string;\n agent: string;\n inputFrom?: readonly string[];\n inputMapping?: Record<string, string>;\n timeoutMs?: number;\n retryPolicy?: RetryPolicy;\n condition?: string;\n minRequired?: number;\n}\n\nexport interface DagEdge {\n from: string;\n to: string;\n}\n\nexport interface TaskDag {\n nodes: readonly DagNode[];\n edges: readonly DagEdge[];\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\nimport type { AggregateStrategy, TaskContext, TaskDag, TaskPriority } from \"./models.js\";\n\n// ── TaskFrame ─────────────────────────────────────────────────────────────────\n\nexport class TaskFrame implements NpsFrame {\n readonly frameType = FrameType.TASK;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly taskId: string,\n public readonly dag: TaskDag,\n public readonly timeoutMs?: number,\n public readonly callbackUrl?: string,\n public readonly context?: TaskContext,\n public readonly priority?: TaskPriority,\n public readonly depth?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n task_id: this.taskId,\n dag: this.dag,\n timeout_ms: this.timeoutMs ?? null,\n callback_url: this.callbackUrl ?? null,\n context: this.context ?? null,\n priority: this.priority ?? null,\n depth: this.depth ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): TaskFrame {\n return new TaskFrame(\n data[\"task_id\"] as string,\n data[\"dag\"] as TaskDag,\n (data[\"timeout_ms\"] as number | null) ?? undefined,\n (data[\"callback_url\"] as string | null) ?? undefined,\n (data[\"context\"] as TaskContext | null) ?? undefined,\n (data[\"priority\"] as TaskPriority | null) ?? undefined,\n (data[\"depth\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── DelegateFrame ─────────────────────────────────────────────────────────────\n\nexport class DelegateFrame implements NpsFrame {\n readonly frameType = FrameType.DELEGATE;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly taskId: string,\n public readonly subtaskId: string,\n public readonly action: string,\n public readonly agentNid: string,\n public readonly inputs?: Record<string, unknown>,\n public readonly params?: Record<string, unknown>,\n public readonly idempotencyKey?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n task_id: this.taskId,\n subtask_id: this.subtaskId,\n action: this.action,\n agent_nid: this.agentNid,\n inputs: this.inputs ?? null,\n params: this.params ?? null,\n idempotency_key: this.idempotencyKey ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): DelegateFrame {\n return new DelegateFrame(\n data[\"task_id\"] as string,\n data[\"subtask_id\"] as string,\n data[\"action\"] as string,\n data[\"agent_nid\"] as string,\n (data[\"inputs\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"params\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"idempotency_key\"] as string | null) ?? undefined,\n );\n }\n}\n\n// ── SyncFrame ─────────────────────────────────────────────────────────────────\n\nexport class SyncFrame implements NpsFrame {\n readonly frameType = FrameType.SYNC;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly taskId: string,\n public readonly syncId: string,\n public readonly waitFor: readonly string[],\n public readonly minRequired: number = 0,\n public readonly aggregate: AggregateStrategy | string = \"merge\",\n public readonly timeoutMs?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n task_id: this.taskId,\n sync_id: this.syncId,\n wait_for: this.waitFor,\n min_required: this.minRequired,\n aggregate: this.aggregate,\n timeout_ms: this.timeoutMs ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): SyncFrame {\n return new SyncFrame(\n data[\"task_id\"] as string,\n data[\"sync_id\"] as string,\n data[\"wait_for\"] as string[],\n (data[\"min_required\"] as number) ?? 0,\n (data[\"aggregate\"] as string) ?? \"merge\",\n (data[\"timeout_ms\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── StreamError ───────────────────────────────────────────────────────────────\n\nexport interface StreamError {\n errorCode: string;\n message?: string;\n}\n\n// ── AlignStreamFrame ──────────────────────────────────────────────────────────\n\nexport class AlignStreamFrame implements NpsFrame {\n readonly frameType = FrameType.ALIGN_STREAM;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly streamId: string,\n public readonly taskId: string,\n public readonly subtaskId: string,\n public readonly seq: number,\n public readonly isFinal: boolean,\n public readonly senderNid: string,\n public readonly data?: Record<string, unknown>,\n public readonly error?: StreamError,\n public readonly windowSize?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n stream_id: this.streamId,\n task_id: this.taskId,\n subtask_id: this.subtaskId,\n seq: this.seq,\n is_final: this.isFinal,\n sender_nid: this.senderNid,\n data: this.data ?? null,\n error: this.error ? { error_code: this.error.errorCode, message: this.error.message ?? null } : null,\n window_size: this.windowSize ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): AlignStreamFrame {\n const rawError = data[\"error\"] as { error_code: string; message?: string } | null;\n return new AlignStreamFrame(\n data[\"stream_id\"] as string,\n data[\"task_id\"] as string,\n data[\"subtask_id\"] as string,\n data[\"seq\"] as number,\n data[\"is_final\"] as boolean,\n data[\"sender_nid\"] as string,\n (data[\"data\"] as Record<string, unknown> | null) ?? undefined,\n rawError ? { errorCode: rawError.error_code, ...(rawError.message != null ? { message: rawError.message } : {}) } : undefined,\n (data[\"window_size\"] as number | null) ?? undefined,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { AlignStreamFrame, DelegateFrame, SyncFrame, TaskFrame } from \"./frames.js\";\n\nexport function registerNopFrames(registry: FrameRegistry): void {\n registry.register(FrameType.TASK, TaskFrame);\n registry.register(FrameType.DELEGATE, DelegateFrame);\n registry.register(FrameType.SYNC, SyncFrame);\n registry.register(FrameType.ALIGN_STREAM, AlignStreamFrame);\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NpsFrameCodec } from \"../core/codec.js\";\nimport { EncodingTier } from \"../core/frames.js\";\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { registerNcpFrames } from \"../ncp/registry.js\";\nimport { registerNopFrames } from \"./registry.js\";\nimport { TaskState } from \"./models.js\";\nimport type { TaskFrame } from \"./frames.js\";\n\nconst TERMINAL_STATES = new Set<TaskState>([\n TaskState.COMPLETED,\n TaskState.FAILED,\n TaskState.CANCELLED,\n]);\n\nexport class NopTaskStatus {\n constructor(private readonly _raw: Record<string, unknown>) {}\n\n get taskId(): string { return this._raw[\"task_id\"] as string; }\n get state(): TaskState { return this._raw[\"state\"] as TaskState; }\n get isTerminal(): boolean { return TERMINAL_STATES.has(this._raw[\"state\"] as TaskState); }\n get aggregatedResult(): unknown { return this._raw[\"aggregated_result\"]; }\n get errorCode(): string | undefined { return (this._raw[\"error_code\"] as string | null) ?? undefined; }\n get errorMessage(): string | undefined { return (this._raw[\"error_message\"] as string | null) ?? undefined; }\n get nodeResults(): Record<string, unknown> { return (this._raw[\"node_results\"] as Record<string, unknown> | undefined) ?? {}; }\n get raw(): Record<string, unknown> { return this._raw; }\n\n toString(): string {\n return `NopTaskStatus(taskId=${this.taskId}, state=${String(this._raw[\"state\"])})`;\n }\n}\n\nexport class NopClient {\n private readonly _baseUrl: string;\n private readonly _codec: NpsFrameCodec;\n private readonly _tier: EncodingTier;\n\n constructor(\n baseUrl: string,\n options: { defaultTier?: EncodingTier; registry?: FrameRegistry } = {},\n ) {\n this._baseUrl = baseUrl.replace(/\\/$/, \"\");\n this._tier = options.defaultTier ?? EncodingTier.MSGPACK;\n\n const registry = options.registry ?? (() => {\n const r = new FrameRegistry();\n registerNcpFrames(r);\n registerNopFrames(r);\n return r;\n })();\n this._codec = new NpsFrameCodec(registry);\n }\n\n async submit(frame: TaskFrame): Promise<string> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/task`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": \"application/x-nps-frame\", \"Accept\": \"application/json\" },\n });\n if (!res.ok) throw new Error(`NOP /task failed: HTTP ${res.status}`);\n const data = await res.json() as Record<string, unknown>;\n return data[\"task_id\"] as string;\n }\n\n async getStatus(taskId: string): Promise<NopTaskStatus> {\n const res = await fetch(`${this._baseUrl}/task/${taskId}`, {\n headers: { \"Accept\": \"application/json\" },\n });\n if (!res.ok) throw new Error(`NOP /task/${taskId} failed: HTTP ${res.status}`);\n return new NopTaskStatus(await res.json() as Record<string, unknown>);\n }\n\n async cancel(taskId: string): Promise<void> {\n const res = await fetch(`${this._baseUrl}/task/${taskId}/cancel`, {\n method: \"POST\",\n headers: { \"Accept\": \"application/json\" },\n });\n if (!res.ok) throw new Error(`NOP /task/${taskId}/cancel failed: HTTP ${res.status}`);\n }\n\n async wait(\n taskId: string,\n options: { pollIntervalMs?: number; timeoutMs?: number } = {},\n ): Promise<NopTaskStatus> {\n const pollIntervalMs = options.pollIntervalMs ?? 1000;\n const timeoutMs = options.timeoutMs ?? 30_000;\n const deadline = Date.now() + timeoutMs;\n\n while (true) {\n const status = await this.getStatus(taskId);\n if (status.isTerminal) return status;\n\n const remaining = deadline - Date.now();\n if (remaining <= 0) {\n throw new Error(`Task '${taskId}' did not complete within ${timeoutMs}ms (state: ${String(status.raw[\"state\"])}).`);\n }\n await new Promise((resolve) => setTimeout(resolve, Math.min(pollIntervalMs, remaining)));\n }\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Registry factory helpers — lives outside core/ to avoid circular imports.\n * Use createDefaultRegistry() for NCP-only, createFullRegistry() for all protocols.\n */\n\nimport { FrameRegistry } from \"./core/registry.js\";\nimport { registerNcpFrames } from \"./ncp/registry.js\";\nimport { registerNwpFrames } from \"./nwp/registry.js\";\nimport { registerNipFrames } from \"./nip/registry.js\";\nimport { registerNdpFrames } from \"./ndp/registry.js\";\nimport { registerNopFrames } from \"./nop/registry.js\";\n\n/** NCP frames only (ANCHOR, DIFF, STREAM, CAPS, ERROR). */\nexport function createDefaultRegistry(): FrameRegistry {\n const r = new FrameRegistry();\n registerNcpFrames(r);\n return r;\n}\n\n/** All 5 protocols (NCP + NWP + NIP + NDP + NOP). */\nexport function createFullRegistry(): FrameRegistry {\n const r = new FrameRegistry();\n registerNcpFrames(r);\n registerNwpFrames(r);\n registerNipFrames(r);\n registerNdpFrames(r);\n registerNopFrames(r);\n return r;\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { AnchorFrameCache, NpsAnchorNotFoundError, NpsAnchorPoisonError, NpsCodecError, NpsError, NpsFrameError } from './core/index.cjs';
|
|
2
|
+
import { F as FrameRegistry } from './codec-CmHeovTV.cjs';
|
|
3
|
+
export { D as DEFAULT_HEADER_SIZE, a as DEFAULT_MAX_PAYLOAD, E as EXTENDED_HEADER_SIZE, b as EXTENDED_MAX_PAYLOAD, c as EncodingTier, d as FrameClass, e as FrameFlags, f as FrameHeader, g as FrameType, N as NpsFrame, h as NpsFrameCodec, T as Tier1JsonCodec, i as Tier2MsgPackCodec } from './codec-CmHeovTV.cjs';
|
|
4
|
+
export { A as AnchorFrame, C as CapsFrame, D as DiffFrame, E as ErrorFrame, F as FrameSchema, J as JsonPatchOperation, S as SchemaField, a as StreamFrame } from './frames-B3qLdl_g.cjs';
|
|
5
|
+
export { registerNcpFrames } from './ncp/index.cjs';
|
|
6
|
+
export { ActionFrame, AsyncActionResponse, NwpClient, QueryFrame, QueryOrderClause, VectorSearchOptions, asyncActionResponseFromDict, registerNwpFrames } from './nwp/index.cjs';
|
|
7
|
+
export { IdentFrame, IdentMetadata, NipIdentity, RevokeFrame, TrustFrame, registerNipFrames } from './nip/index.cjs';
|
|
8
|
+
export { AnnounceFrame, GraphFrame, InMemoryNdpRegistry, NdpAddress, NdpAnnounceResult, NdpAnnounceValidator, NdpGraphNode, NdpResolveResult, ResolveFrame, registerNdpFrames } from './ndp/index.cjs';
|
|
9
|
+
export { AggregateStrategy, AlignStreamFrame, BackoffStrategy, DagEdge, DagNode, DelegateFrame, NopClient, NopTaskStatus, RetryPolicy, StreamError, SyncFrame, TaskContext, TaskDag, TaskFrame, TaskPriority, TaskState, computeDelayMs, registerNopFrames } from './nop/index.cjs';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Registry factory helpers — lives outside core/ to avoid circular imports.
|
|
13
|
+
* Use createDefaultRegistry() for NCP-only, createFullRegistry() for all protocols.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** NCP frames only (ANCHOR, DIFF, STREAM, CAPS, ERROR). */
|
|
17
|
+
declare function createDefaultRegistry(): FrameRegistry;
|
|
18
|
+
/** All 5 protocols (NCP + NWP + NIP + NDP + NOP). */
|
|
19
|
+
declare function createFullRegistry(): FrameRegistry;
|
|
20
|
+
|
|
21
|
+
export { FrameRegistry, createDefaultRegistry, createFullRegistry };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// @labacacia/nps-sdk — root entry point.
|
|
5
|
+
// Mirrors Python root __init__.py: exports only the SDK version.
|
|
6
|
+
// All protocol APIs are accessed via sub-package imports:
|
|
7
|
+
// import { ... } from "@labacacia/nps-sdk/core"
|
|
8
|
+
// import { ... } from "@labacacia/nps-sdk/ncp"
|
|
9
|
+
export const VERSION = "0.1.0";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,yCAAyC;AACzC,iEAAiE;AACjE,0DAA0D;AAC1D,kDAAkD;AAClD,iDAAiD;AAEjD,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
declare const VALID_FIELD_TYPES: readonly ["string", "uint64", "int64", "decimal", "bool", "timestamp", "bytes", "object", "array"];
|
|
2
|
+
export type SchemaFieldType = (typeof VALID_FIELD_TYPES)[number];
|
|
3
|
+
export interface SchemaField {
|
|
4
|
+
name: string;
|
|
5
|
+
type: string;
|
|
6
|
+
semantic?: string;
|
|
7
|
+
nullable?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface FrameSchema {
|
|
10
|
+
fields: SchemaField[];
|
|
11
|
+
}
|
|
12
|
+
export interface AnchorFrame {
|
|
13
|
+
frame: string;
|
|
14
|
+
anchor_id: string;
|
|
15
|
+
schema: FrameSchema;
|
|
16
|
+
ttl?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Compute anchor_id from schema using RFC 8785 JCS canonicalization + SHA-256.
|
|
20
|
+
* Format: "sha256:{64 lowercase hex chars}"
|
|
21
|
+
*/
|
|
22
|
+
export declare function computeAnchorId(schema: FrameSchema): string;
|
|
23
|
+
/**
|
|
24
|
+
* Validate an AnchorFrame.
|
|
25
|
+
* @throws {NcpError} NCP-ANCHOR-SCHEMA-INVALID if anchor_id doesn't match or schema is invalid.
|
|
26
|
+
*/
|
|
27
|
+
export declare function validateAnchorFrame(frame: AnchorFrame): void;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=anchor-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchor-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/anchor-frame.ts"],"names":[],"mappings":"AAgBA,QAAA,MAAM,iBAAiB,oGAGb,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAO3D;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAoB5D"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// AnchorFrame (0x01) — Schema anchor for global reference
|
|
5
|
+
// NPS-1 §4.1
|
|
6
|
+
import { createHash } from "node:crypto";
|
|
7
|
+
// canonicalize ships CJS with TS `export default` — NodeNext resolves as namespace
|
|
8
|
+
import canonicalizeDefault from "canonicalize";
|
|
9
|
+
const canonicalize = canonicalizeDefault;
|
|
10
|
+
import { NcpError } from "../../core/frame-header.js";
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Types
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
const VALID_FIELD_TYPES = [
|
|
15
|
+
"string", "uint64", "int64", "decimal", "bool",
|
|
16
|
+
"timestamp", "bytes", "object", "array",
|
|
17
|
+
];
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// anchor_id computation (RFC 8785 JCS + SHA-256)
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
/**
|
|
22
|
+
* Compute anchor_id from schema using RFC 8785 JCS canonicalization + SHA-256.
|
|
23
|
+
* Format: "sha256:{64 lowercase hex chars}"
|
|
24
|
+
*/
|
|
25
|
+
export function computeAnchorId(schema) {
|
|
26
|
+
const canonical = canonicalize(schema);
|
|
27
|
+
if (!canonical) {
|
|
28
|
+
throw new NcpError("NCP-ANCHOR-SCHEMA-INVALID", "Schema cannot be canonicalized");
|
|
29
|
+
}
|
|
30
|
+
const hash = createHash("sha256").update(canonical).digest("hex");
|
|
31
|
+
return `sha256:${hash}`;
|
|
32
|
+
}
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Validation
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
/**
|
|
37
|
+
* Validate an AnchorFrame.
|
|
38
|
+
* @throws {NcpError} NCP-ANCHOR-SCHEMA-INVALID if anchor_id doesn't match or schema is invalid.
|
|
39
|
+
*/
|
|
40
|
+
export function validateAnchorFrame(frame) {
|
|
41
|
+
// Validate schema field types
|
|
42
|
+
for (const field of frame.schema.fields) {
|
|
43
|
+
if (!VALID_FIELD_TYPES.includes(field.type)) {
|
|
44
|
+
throw new NcpError("NCP-ANCHOR-SCHEMA-INVALID", `Unsupported field type "${field.type}" for field "${field.name}". ` +
|
|
45
|
+
`Valid types: ${VALID_FIELD_TYPES.join(", ")}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Validate anchor_id matches computed hash
|
|
49
|
+
const expected = computeAnchorId(frame.schema);
|
|
50
|
+
if (frame.anchor_id !== expected) {
|
|
51
|
+
throw new NcpError("NCP-ANCHOR-SCHEMA-INVALID", `anchor_id mismatch: expected ${expected}, got ${frame.anchor_id}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=anchor-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchor-frame.js","sourceRoot":"","sources":["../../../src/ncp/frames/anchor-frame.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,0DAA0D;AAC1D,aAAa;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,mFAAmF;AACnF,OAAO,mBAAmB,MAAM,cAAc,CAAC;AAC/C,MAAM,YAAY,GAAG,mBAAwE,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM;IAC9C,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;CAC/B,CAAC;AAsBX,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,gCAAgC,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,OAAO,UAAU,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACpD,8BAA8B;IAC9B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAuB,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,QAAQ,CAChB,2BAA2B,EAC3B,2BAA2B,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,IAAI,KAAK;gBAClE,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,QAAQ,CAChB,2BAA2B,EAC3B,gCAAgC,QAAQ,SAAS,KAAK,CAAC,SAAS,EAAE,CACnE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type FrameSchema } from "./anchor-frame.js";
|
|
2
|
+
export interface CapsFrameInlineAnchor {
|
|
3
|
+
anchor_id: string;
|
|
4
|
+
schema: FrameSchema;
|
|
5
|
+
ttl?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface CapsFrame {
|
|
8
|
+
frame: string;
|
|
9
|
+
anchor_ref: string;
|
|
10
|
+
count: number;
|
|
11
|
+
data: unknown[];
|
|
12
|
+
next_cursor?: string | null;
|
|
13
|
+
token_est?: number;
|
|
14
|
+
tokenizer_used?: string;
|
|
15
|
+
cached?: boolean;
|
|
16
|
+
inline_anchor?: CapsFrameInlineAnchor;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validate a CapsFrame.
|
|
20
|
+
*
|
|
21
|
+
* Checks:
|
|
22
|
+
* - count matches data.length (NPS-CLIENT-BAD-FRAME)
|
|
23
|
+
* - if inline_anchor present, recomputes anchor_id and validates match (NCP-ANCHOR-SCHEMA-INVALID)
|
|
24
|
+
*
|
|
25
|
+
* @throws {NcpError} NPS-CLIENT-BAD-FRAME if count doesn't match data length.
|
|
26
|
+
* @throws {NcpError} NCP-ANCHOR-SCHEMA-INVALID if inline_anchor.anchor_id doesn't match schema.
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateCapsFrame(frame: CapsFrame): void;
|
|
29
|
+
//# sourceMappingURL=caps-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caps-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/caps-frame.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAiBxD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// CapsFrame (0x04) — Capsule response envelope
|
|
5
|
+
// NPS-1 §4.4
|
|
6
|
+
import { NcpError } from "../../core/frame-header.js";
|
|
7
|
+
import { computeAnchorId, } from "./anchor-frame.js";
|
|
8
|
+
/**
|
|
9
|
+
* Validate a CapsFrame.
|
|
10
|
+
*
|
|
11
|
+
* Checks:
|
|
12
|
+
* - count matches data.length (NPS-CLIENT-BAD-FRAME)
|
|
13
|
+
* - if inline_anchor present, recomputes anchor_id and validates match (NCP-ANCHOR-SCHEMA-INVALID)
|
|
14
|
+
*
|
|
15
|
+
* @throws {NcpError} NPS-CLIENT-BAD-FRAME if count doesn't match data length.
|
|
16
|
+
* @throws {NcpError} NCP-ANCHOR-SCHEMA-INVALID if inline_anchor.anchor_id doesn't match schema.
|
|
17
|
+
*/
|
|
18
|
+
export function validateCapsFrame(frame) {
|
|
19
|
+
if (frame.count !== frame.data.length) {
|
|
20
|
+
throw new NcpError("NPS-CLIENT-BAD-FRAME", `CapsFrame count mismatch: count=${frame.count}, data.length=${frame.data.length}`);
|
|
21
|
+
}
|
|
22
|
+
if (frame.inline_anchor !== undefined) {
|
|
23
|
+
const computed = computeAnchorId(frame.inline_anchor.schema);
|
|
24
|
+
if (frame.inline_anchor.anchor_id !== computed) {
|
|
25
|
+
throw new NcpError("NCP-ANCHOR-SCHEMA-INVALID", `inline_anchor anchor_id mismatch: expected ${computed}, got ${frame.inline_anchor.anchor_id}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=caps-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caps-frame.js","sourceRoot":"","sources":["../../../src/ncp/frames/caps-frame.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,+CAA+C;AAC/C,aAAa;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EACL,eAAe,GAGhB,MAAM,mBAAmB,CAAC;AAoB3B;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,mCAAmC,KAAK,CAAC,KAAK,iBAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CACnF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,IAAI,QAAQ,CAChB,2BAA2B,EAC3B,8CAA8C,QAAQ,SAAS,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,CAC/F,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { EncodingTier } from "../../core/frame-header.js";
|
|
2
|
+
import { type PatchFormat } from "../ncp-patch-format.js";
|
|
3
|
+
export interface JsonPatchOperation {
|
|
4
|
+
op: "add" | "remove" | "replace" | "move" | "copy" | "test";
|
|
5
|
+
path: string;
|
|
6
|
+
value?: unknown;
|
|
7
|
+
from?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface DiffFrame {
|
|
10
|
+
frame: string;
|
|
11
|
+
anchor_ref: string;
|
|
12
|
+
base_seq: number;
|
|
13
|
+
patch_format?: PatchFormat;
|
|
14
|
+
patch: JsonPatchOperation[] | Uint8Array;
|
|
15
|
+
entity_id?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Validate DiffFrame base_seq against current sequence.
|
|
19
|
+
* @throws {NcpError} NCP-STREAM-SEQ-GAP if sequences don't match.
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateDiffSeq(frame: DiffFrame, currentSeq: number): void;
|
|
22
|
+
/**
|
|
23
|
+
* Validate DiffFrame patch_format against the encoding tier.
|
|
24
|
+
*
|
|
25
|
+
* binary_bitset is only supported on Tier-2 (MsgPack) frames.
|
|
26
|
+
* Unknown patch_format values are also rejected.
|
|
27
|
+
*
|
|
28
|
+
* @throws {NcpError} NCP-DIFF-FORMAT-UNSUPPORTED if binary_bitset on non-Tier-2,
|
|
29
|
+
* or if patch_format is an unknown value.
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateDiffFrame(frame: DiffFrame, encodingTier: EncodingTier | number): void;
|
|
32
|
+
//# sourceMappingURL=diff-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/diff-frame.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE9E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,KAAK,EAAE,kBAAkB,EAAE,GAAG,UAAU,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAO1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,YAAY,GAAG,MAAM,GAClC,IAAI,CAkBN"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// DiffFrame (0x02) — Incremental data patch
|
|
5
|
+
// NPS-1 §4.2
|
|
6
|
+
import { NcpError, EncodingTier } from "../../core/frame-header.js";
|
|
7
|
+
import { isValidPatchFormat } from "../ncp-patch-format.js";
|
|
8
|
+
/**
|
|
9
|
+
* Validate DiffFrame base_seq against current sequence.
|
|
10
|
+
* @throws {NcpError} NCP-STREAM-SEQ-GAP if sequences don't match.
|
|
11
|
+
*/
|
|
12
|
+
export function validateDiffSeq(frame, currentSeq) {
|
|
13
|
+
if (frame.base_seq !== currentSeq) {
|
|
14
|
+
throw new NcpError("NCP-STREAM-SEQ-GAP", `DiffFrame base_seq=${frame.base_seq} does not match current seq=${currentSeq}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Validate DiffFrame patch_format against the encoding tier.
|
|
19
|
+
*
|
|
20
|
+
* binary_bitset is only supported on Tier-2 (MsgPack) frames.
|
|
21
|
+
* Unknown patch_format values are also rejected.
|
|
22
|
+
*
|
|
23
|
+
* @throws {NcpError} NCP-DIFF-FORMAT-UNSUPPORTED if binary_bitset on non-Tier-2,
|
|
24
|
+
* or if patch_format is an unknown value.
|
|
25
|
+
*/
|
|
26
|
+
export function validateDiffFrame(frame, encodingTier) {
|
|
27
|
+
const fmt = frame.patch_format;
|
|
28
|
+
// Unknown patch_format
|
|
29
|
+
if (fmt !== undefined && !isValidPatchFormat(fmt)) {
|
|
30
|
+
throw new NcpError("NCP-DIFF-FORMAT-UNSUPPORTED", `Unknown patch_format "${String(fmt)}"`);
|
|
31
|
+
}
|
|
32
|
+
// binary_bitset requires Tier-2 MsgPack
|
|
33
|
+
if (fmt === "binary_bitset" && encodingTier !== EncodingTier.MsgPack) {
|
|
34
|
+
throw new NcpError("NCP-DIFF-FORMAT-UNSUPPORTED", "patch_format=binary_bitset requires Tier-2 MsgPack encoding");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=diff-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-frame.js","sourceRoot":"","sources":["../../../src/ncp/frames/diff-frame.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,4CAA4C;AAC5C,aAAa;AAEb,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAoB,MAAM,wBAAwB,CAAC;AAkB9E;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAgB,EAAE,UAAkB;IAClE,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,QAAQ,CAChB,oBAAoB,EACpB,sBAAsB,KAAK,CAAC,QAAQ,+BAA+B,UAAU,EAAE,CAChF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAgB,EAChB,YAAmC;IAEnC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC;IAE/B,uBAAuB;IACvB,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,QAAQ,CAChB,6BAA6B,EAC7B,yBAAyB,MAAM,CAAC,GAAG,CAAC,GAAG,CACxC,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,IAAI,GAAG,KAAK,eAAe,IAAI,YAAY,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;QACrE,MAAM,IAAI,QAAQ,CAChB,6BAA6B,EAC7B,6DAA6D,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Unified error frame shared across all NPS protocol layers. */
|
|
2
|
+
export interface ErrorFrame {
|
|
3
|
+
/** Fixed value "0xFE". */
|
|
4
|
+
frame: string;
|
|
5
|
+
/** NPS status code, e.g. "NPS-CLIENT-NOT-FOUND". */
|
|
6
|
+
status: string;
|
|
7
|
+
/** Protocol-level error code, e.g. "NCP-ANCHOR-NOT-FOUND". */
|
|
8
|
+
error: string;
|
|
9
|
+
/** Human-readable error description. */
|
|
10
|
+
message?: string;
|
|
11
|
+
/** Structured error details (e.g. anchor_ref, stream_id). */
|
|
12
|
+
details?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
/** Type guard for ErrorFrame. */
|
|
15
|
+
export declare function isErrorFrame(obj: unknown): obj is ErrorFrame;
|
|
16
|
+
//# sourceMappingURL=error-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-frame.d.ts","sourceRoot":"","sources":["../../../src/ncp/frames/error-frame.ts"],"names":[],"mappings":"AAMA,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAI5D"}
|