@labacacia/nps-sdk 1.0.0-alpha.2 → 1.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.cn.md +20 -2
- package/CHANGELOG.md +20 -2
- package/README.cn.md +1 -1
- package/README.md +1 -1
- package/dist/core/anchor-cache.d.ts +0 -0
- package/dist/core/anchor-cache.d.ts.map +0 -0
- package/dist/core/cache.d.ts +0 -0
- package/dist/core/cache.d.ts.map +0 -0
- package/dist/core/canonical-json.d.ts +0 -0
- package/dist/core/canonical-json.d.ts.map +0 -0
- package/dist/core/codec.d.ts +0 -0
- package/dist/core/codec.d.ts.map +0 -0
- package/dist/core/codecs/index.d.ts +0 -0
- package/dist/core/codecs/index.d.ts.map +0 -0
- package/dist/core/codecs/ncp-codec.d.ts +0 -0
- package/dist/core/codecs/ncp-codec.d.ts.map +0 -0
- package/dist/core/codecs/tier1-json-codec.d.ts +0 -0
- package/dist/core/codecs/tier1-json-codec.d.ts.map +0 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts +0 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts.map +0 -0
- package/dist/core/crypto-provider.d.ts +0 -0
- package/dist/core/crypto-provider.d.ts.map +0 -0
- package/dist/core/exceptions.d.ts +0 -0
- package/dist/core/exceptions.d.ts.map +0 -0
- package/dist/core/frame-header.d.ts +0 -0
- package/dist/core/frame-header.d.ts.map +0 -0
- package/dist/core/frame-registry.d.ts +0 -0
- package/dist/core/frame-registry.d.ts.map +0 -0
- package/dist/core/frames.d.ts +0 -0
- package/dist/core/frames.d.ts.map +0 -0
- package/dist/core/index.cjs +90 -9
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +0 -0
- package/dist/core/index.d.ts.map +0 -0
- package/dist/core/index.js +405 -21
- package/dist/core/index.js.map +1 -1
- package/dist/core/registry.d.ts +0 -0
- package/dist/core/registry.d.ts.map +0 -0
- package/dist/core/status-codes.d.ts +0 -0
- package/dist/core/status-codes.d.ts.map +0 -0
- package/dist/index.cjs +3 -1551
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +0 -0
- package/dist/index.js +5 -9
- package/dist/index.js.map +1 -1
- package/dist/ncp/frames/anchor-frame.d.ts +0 -0
- package/dist/ncp/frames/anchor-frame.d.ts.map +0 -0
- package/dist/ncp/frames/caps-frame.d.ts +0 -0
- package/dist/ncp/frames/caps-frame.d.ts.map +0 -0
- package/dist/ncp/frames/diff-frame.d.ts +0 -0
- package/dist/ncp/frames/diff-frame.d.ts.map +0 -0
- package/dist/ncp/frames/error-frame.d.ts +0 -0
- package/dist/ncp/frames/error-frame.d.ts.map +0 -0
- package/dist/ncp/frames/hello-frame.d.ts +0 -0
- package/dist/ncp/frames/hello-frame.d.ts.map +0 -0
- package/dist/ncp/frames/stream-frame.d.ts +0 -0
- package/dist/ncp/frames/stream-frame.d.ts.map +0 -0
- package/dist/ncp/frames.d.ts +0 -0
- package/dist/ncp/frames.d.ts.map +0 -0
- package/dist/ncp/handshake.d.ts +0 -0
- package/dist/ncp/handshake.d.ts.map +0 -0
- package/dist/ncp/index.cjs +364 -164
- package/dist/ncp/index.cjs.map +1 -1
- package/dist/ncp/index.d.ts +0 -0
- package/dist/ncp/index.d.ts.map +0 -0
- package/dist/ncp/index.js +368 -12
- package/dist/ncp/index.js.map +1 -1
- package/dist/ncp/ncp-error-codes.d.ts +0 -0
- package/dist/ncp/ncp-error-codes.d.ts.map +0 -0
- package/dist/ncp/ncp-patch-format.d.ts +0 -0
- package/dist/ncp/ncp-patch-format.d.ts.map +0 -0
- package/dist/ncp/registry.d.ts +0 -0
- package/dist/ncp/registry.d.ts.map +0 -0
- package/dist/ncp/stream-manager.d.ts +0 -0
- package/dist/ncp/stream-manager.d.ts.map +0 -0
- package/dist/ndp/frames.d.ts +0 -0
- package/dist/ndp/frames.d.ts.map +0 -0
- package/dist/ndp/index.cjs +0 -0
- package/dist/ndp/index.cjs.map +0 -0
- package/dist/ndp/index.d.ts +0 -0
- package/dist/ndp/index.d.ts.map +0 -0
- package/dist/ndp/index.js +223 -6
- package/dist/ndp/index.js.map +1 -1
- package/dist/ndp/ndp-registry.d.ts +0 -0
- package/dist/ndp/ndp-registry.d.ts.map +0 -0
- package/dist/ndp/registry.d.ts +0 -0
- package/dist/ndp/registry.d.ts.map +0 -0
- package/dist/ndp/validator.d.ts +0 -0
- package/dist/ndp/validator.d.ts.map +0 -0
- package/dist/nip/frames.d.ts +0 -0
- package/dist/nip/frames.d.ts.map +0 -0
- package/dist/nip/identity.d.ts +0 -0
- package/dist/nip/identity.d.ts.map +0 -0
- package/dist/nip/index.cjs +0 -0
- package/dist/nip/index.cjs.map +0 -0
- package/dist/nip/index.d.ts +0 -0
- package/dist/nip/index.d.ts.map +0 -0
- package/dist/nip/index.js +187 -5
- package/dist/nip/index.js.map +1 -1
- package/dist/nip/registry.d.ts +0 -0
- package/dist/nip/registry.d.ts.map +0 -0
- package/dist/nop/client.d.ts +0 -0
- package/dist/nop/client.d.ts.map +0 -0
- package/dist/nop/frames.d.ts +0 -0
- package/dist/nop/frames.d.ts.map +0 -0
- package/dist/nop/index.cjs +62 -1
- package/dist/nop/index.cjs.map +1 -1
- package/dist/nop/index.d.ts +0 -0
- package/dist/nop/index.d.ts.map +0 -0
- package/dist/nop/index.js +789 -6
- package/dist/nop/index.js.map +1 -1
- package/dist/nop/models.d.ts +0 -0
- package/dist/nop/models.d.ts.map +0 -0
- package/dist/nop/nop-types.d.ts +0 -0
- package/dist/nop/nop-types.d.ts.map +0 -0
- package/dist/nop/registry.d.ts +0 -0
- package/dist/nop/registry.d.ts.map +0 -0
- package/dist/nwp/client.d.ts +0 -0
- package/dist/nwp/client.d.ts.map +0 -0
- package/dist/nwp/frames.d.ts +0 -0
- package/dist/nwp/frames.d.ts.map +0 -0
- package/dist/nwp/index.cjs +64 -2
- package/dist/nwp/index.cjs.map +1 -1
- package/dist/nwp/index.d.ts +0 -0
- package/dist/nwp/index.d.ts.map +0 -0
- package/dist/nwp/index.js +693 -5
- package/dist/nwp/index.js.map +1 -1
- package/dist/nwp/registry.d.ts +0 -0
- package/dist/nwp/registry.d.ts.map +0 -0
- package/dist/setup.d.ts +0 -0
- package/dist/setup.d.ts.map +0 -0
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/.npmrc.publish +0 -1
- package/dist/codec-CmHeovTV.d.cts +0 -120
- package/dist/codec-CmHeovTV.d.ts +0 -120
- package/dist/core/anchor-cache.js +0 -104
- package/dist/core/anchor-cache.js.map +0 -1
- package/dist/core/cache.js +0 -80
- package/dist/core/cache.js.map +0 -1
- package/dist/core/canonical-json.js +0 -44
- package/dist/core/canonical-json.js.map +0 -1
- package/dist/core/codec.js +0 -119
- package/dist/core/codec.js.map +0 -1
- package/dist/core/codecs/index.js +0 -6
- package/dist/core/codecs/index.js.map +0 -1
- package/dist/core/codecs/ncp-codec.js +0 -93
- package/dist/core/codecs/ncp-codec.js.map +0 -1
- package/dist/core/codecs/tier1-json-codec.js +0 -28
- package/dist/core/codecs/tier1-json-codec.js.map +0 -1
- package/dist/core/codecs/tier2-msgpack-codec.js +0 -26
- package/dist/core/codecs/tier2-msgpack-codec.js.map +0 -1
- package/dist/core/crypto-provider.js +0 -10
- package/dist/core/crypto-provider.js.map +0 -1
- package/dist/core/exceptions.js +0 -52
- package/dist/core/exceptions.js.map +0 -1
- package/dist/core/frame-header.js +0 -185
- package/dist/core/frame-header.js.map +0 -1
- package/dist/core/frame-registry.js +0 -63
- package/dist/core/frame-registry.js.map +0 -1
- package/dist/core/frames.js +0 -154
- package/dist/core/frames.js.map +0 -1
- package/dist/core/index.d.cts +0 -41
- package/dist/core/registry.js +0 -17
- package/dist/core/registry.js.map +0 -1
- package/dist/core/status-codes.js +0 -38
- package/dist/core/status-codes.js.map +0 -1
- package/dist/frames-B3qLdl_g.d.cts +0 -77
- package/dist/frames-Ff7-ZPUl.d.ts +0 -77
- package/dist/index.d.cts +0 -21
- package/dist/ncp/frames/anchor-frame.js +0 -54
- package/dist/ncp/frames/anchor-frame.js.map +0 -1
- package/dist/ncp/frames/caps-frame.js +0 -29
- package/dist/ncp/frames/caps-frame.js.map +0 -1
- package/dist/ncp/frames/diff-frame.js +0 -37
- package/dist/ncp/frames/diff-frame.js.map +0 -1
- package/dist/ncp/frames/error-frame.js +0 -13
- package/dist/ncp/frames/error-frame.js.map +0 -1
- package/dist/ncp/frames/hello-frame.js +0 -25
- package/dist/ncp/frames/hello-frame.js.map +0 -1
- package/dist/ncp/frames/stream-frame.js +0 -18
- package/dist/ncp/frames/stream-frame.js.map +0 -1
- package/dist/ncp/frames.js +0 -192
- package/dist/ncp/frames.js.map +0 -1
- package/dist/ncp/handshake.js +0 -80
- package/dist/ncp/handshake.js.map +0 -1
- package/dist/ncp/index.d.cts +0 -6
- package/dist/ncp/ncp-error-codes.js +0 -32
- package/dist/ncp/ncp-error-codes.js.map +0 -1
- package/dist/ncp/ncp-patch-format.js +0 -13
- package/dist/ncp/ncp-patch-format.js.map +0 -1
- package/dist/ncp/registry.js +0 -13
- package/dist/ncp/registry.js.map +0 -1
- package/dist/ncp/stream-manager.js +0 -163
- package/dist/ncp/stream-manager.js.map +0 -1
- package/dist/ndp/frames.js +0 -87
- package/dist/ndp/frames.js.map +0 -1
- package/dist/ndp/index.d.cts +0 -86
- package/dist/ndp/ndp-registry.js +0 -79
- package/dist/ndp/ndp-registry.js.map +0 -1
- package/dist/ndp/registry.js +0 -10
- package/dist/ndp/registry.js.map +0 -1
- package/dist/ndp/validator.js +0 -48
- package/dist/ndp/validator.js.map +0 -1
- package/dist/nip/frames.js +0 -81
- package/dist/nip/frames.js.map +0 -1
- package/dist/nip/identity.js +0 -94
- package/dist/nip/identity.js.map +0 -1
- package/dist/nip/index.d.cts +0 -65
- package/dist/nip/registry.js +0 -10
- package/dist/nip/registry.js.map +0 -1
- package/dist/nop/client.js +0 -90
- package/dist/nop/client.js.map +0 -1
- package/dist/nop/frames.js +0 -148
- package/dist/nop/frames.js.map +0 -1
- package/dist/nop/index.d.cts +0 -155
- package/dist/nop/models.js +0 -50
- package/dist/nop/models.js.map +0 -1
- package/dist/nop/nop-types.js +0 -44
- package/dist/nop/nop-types.js.map +0 -1
- package/dist/nop/registry.js +0 -11
- package/dist/nop/registry.js.map +0 -1
- package/dist/nwp/client.js +0 -101
- package/dist/nwp/client.js.map +0 -1
- package/dist/nwp/frames.js +0 -81
- package/dist/nwp/frames.js.map +0 -1
- package/dist/nwp/index.d.cts +0 -65
- package/dist/nwp/registry.js +0 -9
- package/dist/nwp/registry.js.map +0 -1
- package/dist/setup.js +0 -29
- package/dist/setup.js.map +0 -1
package/dist/nwp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nwp/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/exceptions.ts","../../src/core/frames.ts","../../src/ncp/frames.ts","../../src/nwp/frames.ts","../../src/nwp/registry.ts","../../src/core/codec.ts","../../src/nwp/client.ts","../../src/core/registry.ts","../../src/ncp/registry.ts"],"names":["view","payloadLength","buf","init_frames"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD\n//\n// NPS exception hierarchy — ported from nps_sdk/core/exceptions.py\n// NPS-1 §6\n\n/** Base class for all NPS SDK errors. */\nexport class NpsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NpsError\";\n }\n}\n\n/** Frame parse or structural error. */\nexport class NpsFrameError extends NpsError {\n constructor(message: string) {\n super(message);\n this.name = \"NpsFrameError\";\n }\n}\n\n/** Encode or decode error. */\nexport class NpsCodecError extends NpsError {\n constructor(message: string) {\n super(message);\n this.name = \"NpsCodecError\";\n }\n}\n\n/** Anchor cache miss — requested anchor ID not found. */\nexport class NpsAnchorNotFoundError extends NpsError {\n readonly anchorId: string;\n constructor(anchorId: string, message?: string) {\n super(message ?? `Anchor not found: ${anchorId}`);\n this.name = \"NpsAnchorNotFoundError\";\n this.anchorId = anchorId;\n }\n}\n\n/** Anchor ID collision — same ID but different schema content. */\nexport class NpsAnchorPoisonError extends NpsError {\n readonly anchorId: string;\n constructor(anchorId: string, message?: string) {\n super(message ?? `Anchor poison detected: ${anchorId}`);\n this.name = \"NpsAnchorPoisonError\";\n this.anchorId = anchorId;\n }\n}\n\n/** Stream-level error (sequence gap, unknown stream ID, etc.). */\nexport class NpsStreamError extends NpsError {\n constructor(message: string) {\n super(message);\n this.name = \"NpsStreamError\";\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS wire-level frame primitives: FrameType, FrameFlags, EncodingTier, FrameHeader.\n */\n\nimport { NpsFrameError } from \"./exceptions.js\";\n\n// ── FrameType ────────────────────────────────────────────────────────────────\n\n/** Unified frame byte namespace for the full NPS suite (NPS-0 §9). */\nexport enum FrameType {\n // NCP 0x01–0x0F\n ANCHOR = 0x01,\n DIFF = 0x02,\n STREAM = 0x03,\n CAPS = 0x04,\n ALIGN = 0x05, // deprecated — use AlignStream (0x43)\n HELLO = 0x06,\n\n // NWP 0x10–0x1F\n QUERY = 0x10,\n ACTION = 0x11,\n\n // NIP 0x20–0x2F\n IDENT = 0x20,\n TRUST = 0x21,\n REVOKE = 0x22,\n\n // NDP 0x30–0x3F\n ANNOUNCE = 0x30,\n RESOLVE = 0x31,\n GRAPH = 0x32,\n\n // NOP 0x40–0x4F\n TASK = 0x40,\n DELEGATE = 0x41,\n SYNC = 0x42,\n ALIGN_STREAM = 0x43,\n\n // Reserved / System 0xF0–0xFF\n ERROR = 0xFE,\n}\n\n// ── EncodingTier ─────────────────────────────────────────────────────────────\n\n/**\n * Wire encoding tier, stored in the lower 2 bits of the flags byte (NPS-1 §3.2).\n * 0x00 = Tier-1 JSON — human-readable; development / compatibility.\n * 0x01 = Tier-2 MsgPack — binary, ~60 % smaller; production default.\n */\nexport enum EncodingTier {\n JSON = 0x00,\n MSGPACK = 0x01,\n}\n\n// ── FrameFlags ───────────────────────────────────────────────────────────────\n\n/**\n * Flags byte in the NPS frame header (NPS-1 §3.2).\n * Bit layout (LSB = bit 0):\n * Bits 0–1 (T0,T1) : Encoding tier\n * Bit 2 (FINAL) : Last chunk of a StreamFrame; non-stream frames MUST set this\n * Bit 3 (ENC) : Payload encrypted\n * Bits 4–6 (RSV) : Reserved — sender MUST write 0\n * Bit 7 (EXT) : Extended 8-byte header\n */\nexport const FrameFlags = {\n NONE: 0x00,\n TIER1_JSON: 0x00,\n TIER2_MSGPACK: 0x01,\n FINAL: 0x04,\n ENCRYPTED: 0x08,\n EXT: 0x80,\n} as const;\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nexport const DEFAULT_HEADER_SIZE = 4;\nexport const EXTENDED_HEADER_SIZE = 8;\nexport const DEFAULT_MAX_PAYLOAD = 0xffff; // 65 535 bytes\nexport const EXTENDED_MAX_PAYLOAD = 0xffffffff; // 4 GiB - 1\n\n// ── FrameHeader ──────────────────────────────────────────────────────────────\n\n/**\n * NPS frame header, present at the start of every wire message (NPS-1 §3.1).\n *\n * Default (4 bytes, EXT=0):\n * Byte 0 : FrameType\n * Byte 1 : Flags\n * Byte 2–3 : PayloadLength (big-endian uint16)\n *\n * Extended (8 bytes, EXT=1):\n * Byte 0 : FrameType\n * Byte 1 : Flags (bit 7 = 1)\n * Byte 2–3 : Reserved (must be 0)\n * Byte 4–7 : PayloadLength (big-endian uint32)\n */\nexport class FrameHeader {\n constructor(\n public readonly frameType: FrameType,\n public readonly flags: number,\n public readonly payloadLength: number,\n ) {}\n\n get isExtended(): boolean {\n return (this.flags & FrameFlags.EXT) !== 0;\n }\n\n get headerSize(): number {\n return this.isExtended ? EXTENDED_HEADER_SIZE : DEFAULT_HEADER_SIZE;\n }\n\n get encodingTier(): EncodingTier {\n return (this.flags & 0x03) as EncodingTier;\n }\n\n get isFinal(): boolean {\n return (this.flags & 0x04) !== 0;\n }\n\n get isEncrypted(): boolean {\n return (this.flags & 0x08) !== 0;\n }\n\n // ── Parsing ───────────────────────────────────────────────────────────────\n\n static parse(buf: Uint8Array): FrameHeader {\n if (buf.length < 2) {\n throw new NpsFrameError(\n `Buffer too small to read frame type and flags: need >= 2 bytes, got ${buf.length}.`,\n );\n }\n\n const flags = buf[1]!;\n const ext = (flags & FrameFlags.EXT) !== 0;\n\n if (ext) {\n if (buf.length < EXTENDED_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for extended frame header: need ${EXTENDED_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint32(4, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n if (buf.length < DEFAULT_HEADER_SIZE) {\n throw new NpsFrameError(\n `Buffer too small for frame header: need ${DEFAULT_HEADER_SIZE} bytes, got ${buf.length}.`,\n );\n }\n const view = new DataView(buf.buffer, buf.byteOffset);\n const payloadLength = view.getUint16(2, false); // big-endian\n return new FrameHeader(buf[0]! as FrameType, flags, payloadLength);\n }\n\n // ── Serialisation ─────────────────────────────────────────────────────────\n\n toBytes(): Uint8Array {\n if (this.isExtended) {\n const buf = new Uint8Array(EXTENDED_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, 0, false); // reserved\n view.setUint32(4, this.payloadLength, false);\n return buf;\n }\n const buf = new Uint8Array(DEFAULT_HEADER_SIZE);\n const view = new DataView(buf.buffer);\n view.setUint8(0, this.frameType);\n view.setUint8(1, this.flags);\n view.setUint16(2, this.payloadLength, false);\n return buf;\n }\n\n toString(): string {\n return `FrameHeader(frameType=0x${this.frameType.toString(16).padStart(2, \"0\")}, flags=0x${this.flags.toString(16).padStart(2, \"0\")}, payloadLength=${this.payloadLength})`;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\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\n// ── HelloFrame ────────────────────────────────────────────────────────────────\n// NPS-1 §4.6 — Native-mode handshake (0x06). Always Tier-1 JSON: encoding\n// is not yet negotiated when this frame is sent.\n\nexport class HelloFrame implements NpsFrame {\n readonly frameType = FrameType.HELLO;\n readonly preferredTier = EncodingTier.JSON;\n\n static readonly DEFAULT_MAX_FRAME_PAYLOAD = 0xFFFF;\n static readonly DEFAULT_MAX_CONCURRENT_STREAMS = 32;\n\n constructor(\n public readonly npsVersion: string,\n public readonly supportedEncodings: readonly string[],\n public readonly supportedProtocols: readonly string[],\n public minVersion?: string,\n public agentId?: string,\n public maxFramePayload: number = HelloFrame.DEFAULT_MAX_FRAME_PAYLOAD,\n public extSupport: boolean = false,\n public maxConcurrentStreams: number = HelloFrame.DEFAULT_MAX_CONCURRENT_STREAMS,\n public e2eEncAlgorithms?: readonly string[],\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n nps_version: this.npsVersion,\n supported_encodings: [...this.supportedEncodings],\n supported_protocols: [...this.supportedProtocols],\n min_version: this.minVersion ?? null,\n agent_id: this.agentId ?? null,\n max_frame_payload: this.maxFramePayload,\n ext_support: this.extSupport,\n max_concurrent_streams: this.maxConcurrentStreams,\n e2e_enc_algorithms: this.e2eEncAlgorithms ? [...this.e2eEncAlgorithms] : null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): HelloFrame {\n return new HelloFrame(\n data[\"nps_version\"] as string,\n (data[\"supported_encodings\"] as string[]) ?? [],\n (data[\"supported_protocols\"] as string[]) ?? [],\n (data[\"min_version\"] as string | null) ?? undefined,\n (data[\"agent_id\"] as string | null) ?? undefined,\n (data[\"max_frame_payload\"] as number | null) ?? HelloFrame.DEFAULT_MAX_FRAME_PAYLOAD,\n (data[\"ext_support\"] as boolean | null) ?? false,\n (data[\"max_concurrent_streams\"] as number | null) ?? HelloFrame.DEFAULT_MAX_CONCURRENT_STREAMS,\n (data[\"e2e_enc_algorithms\"] as string[] | null) ?? undefined,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\n// ── Filter DSL ────────────────────────────────────────────────────────────────\n\nexport interface QueryOrderClause {\n field: string;\n dir: \"asc\" | \"desc\";\n}\n\nexport interface VectorSearchOptions {\n vector: readonly number[];\n topK?: number;\n minScore?: number;\n vectorField?: string;\n}\n\n// ── QueryFrame ────────────────────────────────────────────────────────────────\n\nexport class QueryFrame implements NpsFrame {\n readonly frameType = FrameType.QUERY;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef?: string,\n public readonly filter?: Record<string, unknown>,\n public readonly limit?: number,\n public readonly offset?: number,\n public readonly orderBy?: readonly QueryOrderClause[],\n public readonly fields?: readonly string[],\n public readonly vectorSearch?: VectorSearchOptions,\n public readonly depth?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef ?? null,\n filter: this.filter ?? null,\n limit: this.limit ?? null,\n offset: this.offset ?? null,\n order_by: this.orderBy ?? null,\n fields: this.fields ?? null,\n vector_search: this.vectorSearch ?? null,\n depth: this.depth ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): QueryFrame {\n return new QueryFrame(\n (data[\"anchor_ref\"] as string | null) ?? undefined,\n (data[\"filter\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"limit\"] as number | null) ?? undefined,\n (data[\"offset\"] as number | null) ?? undefined,\n (data[\"order_by\"] as QueryOrderClause[] | null) ?? undefined,\n (data[\"fields\"] as string[] | null) ?? undefined,\n (data[\"vector_search\"] as VectorSearchOptions | null) ?? undefined,\n (data[\"depth\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── ActionFrame ───────────────────────────────────────────────────────────────\n\nexport class ActionFrame implements NpsFrame {\n readonly frameType = FrameType.ACTION;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly actionId: string,\n public readonly params?: Record<string, unknown>,\n public readonly async_?: boolean,\n public readonly idempotencyKey?: string,\n public readonly timeoutMs?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n action_id: this.actionId,\n params: this.params ?? null,\n async: this.async_ ?? false,\n idempotency_key: this.idempotencyKey ?? null,\n timeout_ms: this.timeoutMs ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): ActionFrame {\n return new ActionFrame(\n data[\"action_id\"] as string,\n (data[\"params\"] as Record<string, unknown> | null) ?? undefined,\n (data[\"async\"] as boolean | null) ?? undefined,\n (data[\"idempotency_key\"] as string | null) ?? undefined,\n (data[\"timeout_ms\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── AsyncActionResponse ───────────────────────────────────────────────────────\n\nexport interface AsyncActionResponse {\n taskId: string;\n status: string;\n pollUrl?: string | undefined;\n}\n\nexport function asyncActionResponseFromDict(data: Record<string, unknown>): AsyncActionResponse {\n const r: AsyncActionResponse = {\n taskId: data[\"task_id\"] as string,\n status: data[\"status\"] as string,\n };\n const pollUrl = data[\"poll_url\"] as string | null | undefined;\n if (pollUrl != null) r.pollUrl = pollUrl;\n return r;\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { ActionFrame, QueryFrame } from \"./frames.js\";\n\nexport function registerNwpFrames(registry: FrameRegistry): void {\n registry.register(FrameType.QUERY, QueryFrame);\n registry.register(FrameType.ACTION, ActionFrame);\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NPS frame codec: Tier-1 (JSON) and Tier-2 (MsgPack) encode/decode,\n * plus the top-level NpsFrameCodec dispatcher.\n */\n\nimport * as msgpack from \"@msgpack/msgpack\";\nimport { NpsCodecError } from \"./exceptions.js\";\nimport {\n DEFAULT_MAX_PAYLOAD,\n EncodingTier,\n FrameFlags,\n FrameHeader,\n FrameType,\n} from \"./frames.js\";\nimport type { FrameRegistry } from \"./registry.js\";\n\n// ── NpsFrame interface ────────────────────────────────────────────────────────\n\nexport interface NpsFrame {\n readonly frameType: FrameType;\n readonly preferredTier: EncodingTier;\n toDict(): Record<string, unknown>;\n}\n\n// ── Tier-1 JSON codec ─────────────────────────────────────────────────────────\n\nexport class Tier1JsonCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n const json = JSON.stringify(frame.toDict());\n return new TextEncoder().encode(json);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const text = new TextDecoder().decode(payload);\n const data = JSON.parse(text) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-1 JSON decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── Tier-2 MsgPack codec ──────────────────────────────────────────────────────\n\nexport class Tier2MsgPackCodec {\n encode(frame: NpsFrame): Uint8Array {\n try {\n return msgpack.encode(frame.toDict());\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack encode failed for 0x${frame.frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n\n decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame {\n const cls = registry.resolve(frameType);\n try {\n const data = msgpack.decode(payload) as Record<string, unknown>;\n return cls.fromDict(data);\n } catch (err) {\n throw new NpsCodecError(\n `Tier-2 MsgPack decode failed for 0x${frameType.toString(16).padStart(2, \"0\")}: ${String(err)}`,\n );\n }\n }\n}\n\n// ── NpsFrameCodec (dispatcher) ────────────────────────────────────────────────\n\nexport class NpsFrameCodec {\n private readonly _registry: FrameRegistry;\n private readonly _maxPayload: number;\n private readonly _json = new Tier1JsonCodec();\n private readonly _msgpack = new Tier2MsgPackCodec();\n\n constructor(registry: FrameRegistry, options: { maxPayload?: number } = {}) {\n this._registry = registry;\n this._maxPayload = options.maxPayload ?? DEFAULT_MAX_PAYLOAD;\n }\n\n // ── Encode ────────────────────────────────────────────────────────────────\n\n encode(frame: NpsFrame, options: { overrideTier?: EncodingTier } = {}): Uint8Array {\n const tier = options.overrideTier ?? frame.preferredTier;\n const tierCodec = this._selectCodec(tier);\n\n let payload: Uint8Array;\n try {\n payload = tierCodec.encode(frame);\n } catch (err) {\n if (err instanceof NpsCodecError) throw err;\n throw new NpsCodecError(`Encode failed for 0x${frame.frameType.toString(16)}.`);\n }\n\n if (payload.length > this._maxPayload) {\n throw new NpsCodecError(\n `Encoded payload for 0x${frame.frameType.toString(16).padStart(2, \"0\")} exceeds max_frame_payload` +\n ` (${payload.length} bytes > ${this._maxPayload}). Use StreamFrame (0x03) for large payloads.`,\n );\n }\n\n const useExt = payload.length > DEFAULT_MAX_PAYLOAD;\n let flags = this._buildFlags(frame, tier);\n if (useExt) flags |= FrameFlags.EXT;\n\n const header = new FrameHeader(frame.frameType, flags, payload.length);\n const headerBytes = header.toBytes();\n const wire = new Uint8Array(headerBytes.length + payload.length);\n wire.set(headerBytes, 0);\n wire.set(payload, headerBytes.length);\n return wire;\n }\n\n // ── Decode ────────────────────────────────────────────────────────────────\n\n decode(wire: Uint8Array): NpsFrame {\n const header = FrameHeader.parse(wire);\n const payload = wire.slice(header.headerSize, header.headerSize + header.payloadLength);\n const codec = this._selectCodec(header.encodingTier);\n return codec.decode(header.frameType, payload, this._registry);\n }\n\n static peekHeader(wire: Uint8Array): FrameHeader {\n return FrameHeader.parse(wire);\n }\n\n // ── Private ───────────────────────────────────────────────────────────────\n\n private _buildFlags(frame: NpsFrame, tier: EncodingTier): number {\n let flags = tier === EncodingTier.JSON ? FrameFlags.TIER1_JSON : FrameFlags.TIER2_MSGPACK;\n\n const isStreamFrame = \"isLast\" in frame;\n const isFinal = !isStreamFrame || (frame as { isLast: boolean }).isLast;\n if (isFinal) flags |= FrameFlags.FINAL;\n\n return flags;\n }\n\n private _selectCodec(tier: EncodingTier): Tier1JsonCodec | Tier2MsgPackCodec {\n if (tier === EncodingTier.JSON) return this._json;\n if (tier === EncodingTier.MSGPACK) return this._msgpack;\n throw new NpsCodecError(`Unsupported encoding tier: 0x${(tier as number).toString(16).padStart(2, \"0\")}.`);\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * NwpClient — async HTTP-mode client for NPS Neural Web Protocol nodes (NPS-2).\n */\n\nimport { NpsFrameCodec } from \"../core/codec.js\";\nimport { EncodingTier } from \"../core/frames.js\";\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { registerNcpFrames } from \"../ncp/registry.js\";\nimport { CapsFrame } from \"../ncp/frames.js\";\nimport type { StreamFrame } from \"../ncp/frames.js\";\nimport { registerNwpFrames } from \"./registry.js\";\nimport { ActionFrame, asyncActionResponseFromDict } from \"./frames.js\";\nimport type { AnchorFrame } from \"../ncp/frames.js\";\nimport type { QueryFrame, AsyncActionResponse } from \"./frames.js\";\n\nconst CONTENT_TYPE = \"application/x-nps-frame\";\n\nexport class NwpClient {\n private readonly _baseUrl: string;\n private readonly _codec: NpsFrameCodec;\n private readonly _tier: EncodingTier;\n\n constructor(\n baseUrl: string,\n options: { defaultTier?: EncodingTier; maxPayload?: number; registry?: FrameRegistry } = {},\n ) {\n this._baseUrl = baseUrl.replace(/\\/$/, \"\");\n this._tier = options.defaultTier ?? EncodingTier.MSGPACK;\n\n const registry = options.registry ?? (() => {\n const r = new FrameRegistry();\n registerNcpFrames(r);\n registerNwpFrames(r);\n return r;\n })();\n const codecOpts = options.maxPayload !== undefined ? { maxPayload: options.maxPayload } : {};\n this._codec = new NpsFrameCodec(registry, codecOpts);\n }\n\n async sendAnchor(frame: AnchorFrame): Promise<void> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/anchor`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /anchor failed: HTTP ${res.status}`);\n }\n\n async query(frame: QueryFrame): Promise<CapsFrame> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/query`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /query failed: HTTP ${res.status}`);\n\n const buf = new Uint8Array(await res.arrayBuffer());\n const result = this._codec.decode(buf);\n if (!(result instanceof CapsFrame)) {\n throw new TypeError(`Expected CapsFrame from /query, got ${result.constructor.name}.`);\n }\n return result;\n }\n\n async *stream(frame: QueryFrame): AsyncGenerator<StreamFrame> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/stream`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /stream failed: HTTP ${res.status}`);\n if (res.body === null) return;\n\n const { StreamFrame: SF } = await import(\"../ncp/frames.js\");\n\n for await (const chunk of res.body) {\n const bytes = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk as ArrayBuffer);\n if (bytes.length === 0) continue;\n const result = this._codec.decode(bytes);\n if (!(result instanceof SF)) {\n throw new TypeError(`Expected StreamFrame from /stream, got ${result.constructor.name}.`);\n }\n yield result;\n if (result.isLast) break;\n }\n }\n\n async invoke(frame: ActionFrame): Promise<unknown> {\n const wire = this._codec.encode(frame, { overrideTier: this._tier });\n const res = await fetch(`${this._baseUrl}/invoke`, {\n method: \"POST\",\n body: wire,\n headers: { \"Content-Type\": CONTENT_TYPE, \"Accept\": CONTENT_TYPE },\n });\n if (!res.ok) throw new Error(`NWP /invoke failed: HTTP ${res.status}`);\n\n if (frame.async_) {\n return asyncActionResponseFromDict(await res.json() as Record<string, unknown>) as AsyncActionResponse;\n }\n\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(CONTENT_TYPE)) {\n const buf = new Uint8Array(await res.arrayBuffer());\n return this._codec.decode(buf);\n }\n return res.json();\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NpsFrameError } from \"./exceptions.js\";\nimport { FrameType } from \"./frames.js\";\nimport type { NpsFrame } from \"./codec.js\";\n\nexport interface FrameClass {\n fromDict(data: Record<string, unknown>): NpsFrame;\n}\n\nexport class FrameRegistry {\n private readonly _map = new Map<FrameType, FrameClass>();\n\n register(frameType: FrameType, cls: FrameClass): void {\n this._map.set(frameType, cls);\n }\n\n resolve(frameType: FrameType): FrameClass {\n const cls = this._map.get(frameType);\n if (cls === undefined) {\n throw new NpsFrameError(\n `No frame class registered for type 0x${frameType.toString(16).padStart(2, \"0\")}.`,\n );\n }\n return cls;\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrameRegistry } from \"../core/registry.js\";\nimport { FrameType } from \"../core/frames.js\";\nimport { AnchorFrame, CapsFrame, DiffFrame, ErrorFrame, HelloFrame, 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.HELLO, HelloFrame);\n registry.register(FrameType.ERROR, ErrorFrame);\n}\n"]}
|
package/dist/nwp/registry.d.ts
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/setup.d.ts
CHANGED
|
File without changes
|
package/dist/setup.d.ts.map
CHANGED
|
File without changes
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
package/.npmrc.publish
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//registry.npmjs.org/:_authToken=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
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/** Unified frame byte namespace for the full NPS suite (NPS-0 §9). */
|
|
2
|
-
declare enum FrameType {
|
|
3
|
-
ANCHOR = 1,
|
|
4
|
-
DIFF = 2,
|
|
5
|
-
STREAM = 3,
|
|
6
|
-
CAPS = 4,
|
|
7
|
-
ALIGN = 5,// deprecated — use AlignStream (0x43)
|
|
8
|
-
QUERY = 16,
|
|
9
|
-
ACTION = 17,
|
|
10
|
-
IDENT = 32,
|
|
11
|
-
TRUST = 33,
|
|
12
|
-
REVOKE = 34,
|
|
13
|
-
ANNOUNCE = 48,
|
|
14
|
-
RESOLVE = 49,
|
|
15
|
-
GRAPH = 50,
|
|
16
|
-
TASK = 64,
|
|
17
|
-
DELEGATE = 65,
|
|
18
|
-
SYNC = 66,
|
|
19
|
-
ALIGN_STREAM = 67,
|
|
20
|
-
ERROR = 254
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Wire encoding tier, stored in the lower 2 bits of the flags byte (NPS-1 §3.2).
|
|
24
|
-
* 0x00 = Tier-1 JSON — human-readable; development / compatibility.
|
|
25
|
-
* 0x01 = Tier-2 MsgPack — binary, ~60 % smaller; production default.
|
|
26
|
-
*/
|
|
27
|
-
declare enum EncodingTier {
|
|
28
|
-
JSON = 0,
|
|
29
|
-
MSGPACK = 1
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Flags byte in the NPS frame header (NPS-1 §3.2).
|
|
33
|
-
* Bit layout (LSB = bit 0):
|
|
34
|
-
* Bits 0–1 (T0,T1) : Encoding tier
|
|
35
|
-
* Bit 2 (FINAL) : Last chunk of a StreamFrame; non-stream frames MUST set this
|
|
36
|
-
* Bit 3 (ENC) : Payload encrypted
|
|
37
|
-
* Bits 4–6 (RSV) : Reserved — sender MUST write 0
|
|
38
|
-
* Bit 7 (EXT) : Extended 8-byte header
|
|
39
|
-
*/
|
|
40
|
-
declare const FrameFlags: {
|
|
41
|
-
readonly NONE: 0;
|
|
42
|
-
readonly TIER1_JSON: 0;
|
|
43
|
-
readonly TIER2_MSGPACK: 1;
|
|
44
|
-
readonly FINAL: 4;
|
|
45
|
-
readonly ENCRYPTED: 8;
|
|
46
|
-
readonly EXT: 128;
|
|
47
|
-
};
|
|
48
|
-
declare const DEFAULT_HEADER_SIZE = 4;
|
|
49
|
-
declare const EXTENDED_HEADER_SIZE = 8;
|
|
50
|
-
declare const DEFAULT_MAX_PAYLOAD = 65535;
|
|
51
|
-
declare const EXTENDED_MAX_PAYLOAD = 4294967295;
|
|
52
|
-
/**
|
|
53
|
-
* NPS frame header, present at the start of every wire message (NPS-1 §3.1).
|
|
54
|
-
*
|
|
55
|
-
* Default (4 bytes, EXT=0):
|
|
56
|
-
* Byte 0 : FrameType
|
|
57
|
-
* Byte 1 : Flags
|
|
58
|
-
* Byte 2–3 : PayloadLength (big-endian uint16)
|
|
59
|
-
*
|
|
60
|
-
* Extended (8 bytes, EXT=1):
|
|
61
|
-
* Byte 0 : FrameType
|
|
62
|
-
* Byte 1 : Flags (bit 7 = 1)
|
|
63
|
-
* Byte 2–3 : Reserved (must be 0)
|
|
64
|
-
* Byte 4–7 : PayloadLength (big-endian uint32)
|
|
65
|
-
*/
|
|
66
|
-
declare class FrameHeader {
|
|
67
|
-
readonly frameType: FrameType;
|
|
68
|
-
readonly flags: number;
|
|
69
|
-
readonly payloadLength: number;
|
|
70
|
-
constructor(frameType: FrameType, flags: number, payloadLength: number);
|
|
71
|
-
get isExtended(): boolean;
|
|
72
|
-
get headerSize(): number;
|
|
73
|
-
get encodingTier(): EncodingTier;
|
|
74
|
-
get isFinal(): boolean;
|
|
75
|
-
get isEncrypted(): boolean;
|
|
76
|
-
static parse(buf: Uint8Array): FrameHeader;
|
|
77
|
-
toBytes(): Uint8Array;
|
|
78
|
-
toString(): string;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
interface FrameClass {
|
|
82
|
-
fromDict(data: Record<string, unknown>): NpsFrame;
|
|
83
|
-
}
|
|
84
|
-
declare class FrameRegistry {
|
|
85
|
-
private readonly _map;
|
|
86
|
-
register(frameType: FrameType, cls: FrameClass): void;
|
|
87
|
-
resolve(frameType: FrameType): FrameClass;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
interface NpsFrame {
|
|
91
|
-
readonly frameType: FrameType;
|
|
92
|
-
readonly preferredTier: EncodingTier;
|
|
93
|
-
toDict(): Record<string, unknown>;
|
|
94
|
-
}
|
|
95
|
-
declare class Tier1JsonCodec {
|
|
96
|
-
encode(frame: NpsFrame): Uint8Array;
|
|
97
|
-
decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame;
|
|
98
|
-
}
|
|
99
|
-
declare class Tier2MsgPackCodec {
|
|
100
|
-
encode(frame: NpsFrame): Uint8Array;
|
|
101
|
-
decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame;
|
|
102
|
-
}
|
|
103
|
-
declare class NpsFrameCodec {
|
|
104
|
-
private readonly _registry;
|
|
105
|
-
private readonly _maxPayload;
|
|
106
|
-
private readonly _json;
|
|
107
|
-
private readonly _msgpack;
|
|
108
|
-
constructor(registry: FrameRegistry, options?: {
|
|
109
|
-
maxPayload?: number;
|
|
110
|
-
});
|
|
111
|
-
encode(frame: NpsFrame, options?: {
|
|
112
|
-
overrideTier?: EncodingTier;
|
|
113
|
-
}): Uint8Array;
|
|
114
|
-
decode(wire: Uint8Array): NpsFrame;
|
|
115
|
-
static peekHeader(wire: Uint8Array): FrameHeader;
|
|
116
|
-
private _buildFlags;
|
|
117
|
-
private _selectCodec;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export { DEFAULT_HEADER_SIZE as D, EXTENDED_HEADER_SIZE as E, FrameRegistry as F, type NpsFrame as N, Tier1JsonCodec as T, DEFAULT_MAX_PAYLOAD as a, EXTENDED_MAX_PAYLOAD as b, EncodingTier as c, type FrameClass as d, FrameFlags as e, FrameHeader as f, FrameType as g, NpsFrameCodec as h, Tier2MsgPackCodec as i };
|
package/dist/codec-CmHeovTV.d.ts
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/** Unified frame byte namespace for the full NPS suite (NPS-0 §9). */
|
|
2
|
-
declare enum FrameType {
|
|
3
|
-
ANCHOR = 1,
|
|
4
|
-
DIFF = 2,
|
|
5
|
-
STREAM = 3,
|
|
6
|
-
CAPS = 4,
|
|
7
|
-
ALIGN = 5,// deprecated — use AlignStream (0x43)
|
|
8
|
-
QUERY = 16,
|
|
9
|
-
ACTION = 17,
|
|
10
|
-
IDENT = 32,
|
|
11
|
-
TRUST = 33,
|
|
12
|
-
REVOKE = 34,
|
|
13
|
-
ANNOUNCE = 48,
|
|
14
|
-
RESOLVE = 49,
|
|
15
|
-
GRAPH = 50,
|
|
16
|
-
TASK = 64,
|
|
17
|
-
DELEGATE = 65,
|
|
18
|
-
SYNC = 66,
|
|
19
|
-
ALIGN_STREAM = 67,
|
|
20
|
-
ERROR = 254
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Wire encoding tier, stored in the lower 2 bits of the flags byte (NPS-1 §3.2).
|
|
24
|
-
* 0x00 = Tier-1 JSON — human-readable; development / compatibility.
|
|
25
|
-
* 0x01 = Tier-2 MsgPack — binary, ~60 % smaller; production default.
|
|
26
|
-
*/
|
|
27
|
-
declare enum EncodingTier {
|
|
28
|
-
JSON = 0,
|
|
29
|
-
MSGPACK = 1
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Flags byte in the NPS frame header (NPS-1 §3.2).
|
|
33
|
-
* Bit layout (LSB = bit 0):
|
|
34
|
-
* Bits 0–1 (T0,T1) : Encoding tier
|
|
35
|
-
* Bit 2 (FINAL) : Last chunk of a StreamFrame; non-stream frames MUST set this
|
|
36
|
-
* Bit 3 (ENC) : Payload encrypted
|
|
37
|
-
* Bits 4–6 (RSV) : Reserved — sender MUST write 0
|
|
38
|
-
* Bit 7 (EXT) : Extended 8-byte header
|
|
39
|
-
*/
|
|
40
|
-
declare const FrameFlags: {
|
|
41
|
-
readonly NONE: 0;
|
|
42
|
-
readonly TIER1_JSON: 0;
|
|
43
|
-
readonly TIER2_MSGPACK: 1;
|
|
44
|
-
readonly FINAL: 4;
|
|
45
|
-
readonly ENCRYPTED: 8;
|
|
46
|
-
readonly EXT: 128;
|
|
47
|
-
};
|
|
48
|
-
declare const DEFAULT_HEADER_SIZE = 4;
|
|
49
|
-
declare const EXTENDED_HEADER_SIZE = 8;
|
|
50
|
-
declare const DEFAULT_MAX_PAYLOAD = 65535;
|
|
51
|
-
declare const EXTENDED_MAX_PAYLOAD = 4294967295;
|
|
52
|
-
/**
|
|
53
|
-
* NPS frame header, present at the start of every wire message (NPS-1 §3.1).
|
|
54
|
-
*
|
|
55
|
-
* Default (4 bytes, EXT=0):
|
|
56
|
-
* Byte 0 : FrameType
|
|
57
|
-
* Byte 1 : Flags
|
|
58
|
-
* Byte 2–3 : PayloadLength (big-endian uint16)
|
|
59
|
-
*
|
|
60
|
-
* Extended (8 bytes, EXT=1):
|
|
61
|
-
* Byte 0 : FrameType
|
|
62
|
-
* Byte 1 : Flags (bit 7 = 1)
|
|
63
|
-
* Byte 2–3 : Reserved (must be 0)
|
|
64
|
-
* Byte 4–7 : PayloadLength (big-endian uint32)
|
|
65
|
-
*/
|
|
66
|
-
declare class FrameHeader {
|
|
67
|
-
readonly frameType: FrameType;
|
|
68
|
-
readonly flags: number;
|
|
69
|
-
readonly payloadLength: number;
|
|
70
|
-
constructor(frameType: FrameType, flags: number, payloadLength: number);
|
|
71
|
-
get isExtended(): boolean;
|
|
72
|
-
get headerSize(): number;
|
|
73
|
-
get encodingTier(): EncodingTier;
|
|
74
|
-
get isFinal(): boolean;
|
|
75
|
-
get isEncrypted(): boolean;
|
|
76
|
-
static parse(buf: Uint8Array): FrameHeader;
|
|
77
|
-
toBytes(): Uint8Array;
|
|
78
|
-
toString(): string;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
interface FrameClass {
|
|
82
|
-
fromDict(data: Record<string, unknown>): NpsFrame;
|
|
83
|
-
}
|
|
84
|
-
declare class FrameRegistry {
|
|
85
|
-
private readonly _map;
|
|
86
|
-
register(frameType: FrameType, cls: FrameClass): void;
|
|
87
|
-
resolve(frameType: FrameType): FrameClass;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
interface NpsFrame {
|
|
91
|
-
readonly frameType: FrameType;
|
|
92
|
-
readonly preferredTier: EncodingTier;
|
|
93
|
-
toDict(): Record<string, unknown>;
|
|
94
|
-
}
|
|
95
|
-
declare class Tier1JsonCodec {
|
|
96
|
-
encode(frame: NpsFrame): Uint8Array;
|
|
97
|
-
decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame;
|
|
98
|
-
}
|
|
99
|
-
declare class Tier2MsgPackCodec {
|
|
100
|
-
encode(frame: NpsFrame): Uint8Array;
|
|
101
|
-
decode(frameType: FrameType, payload: Uint8Array, registry: FrameRegistry): NpsFrame;
|
|
102
|
-
}
|
|
103
|
-
declare class NpsFrameCodec {
|
|
104
|
-
private readonly _registry;
|
|
105
|
-
private readonly _maxPayload;
|
|
106
|
-
private readonly _json;
|
|
107
|
-
private readonly _msgpack;
|
|
108
|
-
constructor(registry: FrameRegistry, options?: {
|
|
109
|
-
maxPayload?: number;
|
|
110
|
-
});
|
|
111
|
-
encode(frame: NpsFrame, options?: {
|
|
112
|
-
overrideTier?: EncodingTier;
|
|
113
|
-
}): Uint8Array;
|
|
114
|
-
decode(wire: Uint8Array): NpsFrame;
|
|
115
|
-
static peekHeader(wire: Uint8Array): FrameHeader;
|
|
116
|
-
private _buildFlags;
|
|
117
|
-
private _selectCodec;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export { DEFAULT_HEADER_SIZE as D, EXTENDED_HEADER_SIZE as E, FrameRegistry as F, type NpsFrame as N, Tier1JsonCodec as T, DEFAULT_MAX_PAYLOAD as a, EXTENDED_MAX_PAYLOAD as b, EncodingTier as c, type FrameClass as d, FrameFlags as e, FrameHeader as f, FrameType as g, NpsFrameCodec as h, Tier2MsgPackCodec as i };
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
-
//
|
|
4
|
-
// AnchorCache — Schema cache with TTL, LRU eviction, poison detection
|
|
5
|
-
// NPS-1 §5.3, §7.2, §9
|
|
6
|
-
import { NcpError } from "./frame-header.js";
|
|
7
|
-
/**
|
|
8
|
-
* AnchorFrame cache with:
|
|
9
|
-
* - TTL-based expiry (NPS-1 §5.3)
|
|
10
|
-
* - LRU eviction at maxSize (NPS-1 §9, default 1000)
|
|
11
|
-
* - Anchor poisoning detection (NPS-1 §7.2)
|
|
12
|
-
*/
|
|
13
|
-
export class AnchorCache {
|
|
14
|
-
cache = new Map();
|
|
15
|
-
maxSize;
|
|
16
|
-
getNow;
|
|
17
|
-
constructor(options) {
|
|
18
|
-
this.maxSize = options?.maxSize ?? 1000;
|
|
19
|
-
this.getNow = options?.getNow ?? (() => Date.now());
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Cache an AnchorFrame.
|
|
23
|
-
*
|
|
24
|
-
* - ttl=0: frame is valid but not cached (NPS-1 §4.1)
|
|
25
|
-
* - Same anchor_id + same schema: idempotent (no-op)
|
|
26
|
-
* - Same anchor_id + different schema: NCP-ANCHOR-ID-MISMATCH (poison detection)
|
|
27
|
-
*
|
|
28
|
-
* @throws {NcpError} NCP-ANCHOR-ID-MISMATCH on anchor poisoning.
|
|
29
|
-
*/
|
|
30
|
-
set(frame) {
|
|
31
|
-
// ttl=0 means use once, don't cache
|
|
32
|
-
if (frame.ttl === 0)
|
|
33
|
-
return;
|
|
34
|
-
const existing = this.cache.get(frame.anchor_id);
|
|
35
|
-
if (existing) {
|
|
36
|
-
// Poison detection: same ID, different schema
|
|
37
|
-
const existingJson = JSON.stringify(existing.frame.schema);
|
|
38
|
-
const newJson = JSON.stringify(frame.schema);
|
|
39
|
-
if (existingJson !== newJson) {
|
|
40
|
-
throw new NcpError("NCP-ANCHOR-ID-MISMATCH", `Anchor poisoning detected: anchor_id ${frame.anchor_id} received with different schema`);
|
|
41
|
-
}
|
|
42
|
-
// Same schema — idempotent, update access time
|
|
43
|
-
existing.lastAccessed = this.getNow();
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
// LRU eviction if at capacity
|
|
47
|
-
if (this.cache.size >= this.maxSize) {
|
|
48
|
-
this.evictLru();
|
|
49
|
-
}
|
|
50
|
-
const ttlMs = (frame.ttl ?? 3600) * 1000;
|
|
51
|
-
this.cache.set(frame.anchor_id, {
|
|
52
|
-
frame,
|
|
53
|
-
expiresAt: this.getNow() + ttlMs,
|
|
54
|
-
lastAccessed: this.getNow(),
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Get a cached AnchorFrame by anchor_id.
|
|
59
|
-
*
|
|
60
|
-
* @returns The cached frame, or null if not found or expired.
|
|
61
|
-
*/
|
|
62
|
-
get(anchorId) {
|
|
63
|
-
const entry = this.cache.get(anchorId);
|
|
64
|
-
if (!entry)
|
|
65
|
-
return null;
|
|
66
|
-
// Check TTL expiry
|
|
67
|
-
if (this.getNow() >= entry.expiresAt) {
|
|
68
|
-
this.cache.delete(anchorId);
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
entry.lastAccessed = this.getNow();
|
|
72
|
-
return entry.frame;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Get a cached AnchorFrame, throwing if not found.
|
|
76
|
-
* @throws {NcpError} NCP-ANCHOR-NOT-FOUND if not in cache or expired.
|
|
77
|
-
*/
|
|
78
|
-
getRequired(anchorId) {
|
|
79
|
-
const frame = this.get(anchorId);
|
|
80
|
-
if (!frame) {
|
|
81
|
-
throw new NcpError("NCP-ANCHOR-NOT-FOUND", `Schema anchor ${anchorId} not found in cache`);
|
|
82
|
-
}
|
|
83
|
-
return frame;
|
|
84
|
-
}
|
|
85
|
-
/** Current cache size. */
|
|
86
|
-
get size() {
|
|
87
|
-
return this.cache.size;
|
|
88
|
-
}
|
|
89
|
-
/** Evict the least recently accessed entry. */
|
|
90
|
-
evictLru() {
|
|
91
|
-
let oldestKey;
|
|
92
|
-
let oldestTime = Infinity;
|
|
93
|
-
for (const [key, entry] of this.cache) {
|
|
94
|
-
if (entry.lastAccessed < oldestTime) {
|
|
95
|
-
oldestTime = entry.lastAccessed;
|
|
96
|
-
oldestKey = key;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
if (oldestKey) {
|
|
100
|
-
this.cache.delete(oldestKey);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=anchor-cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anchor-cache.js","sourceRoot":"","sources":["../../src/core/anchor-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/core/cache.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
/**
|
|
4
|
-
* AnchorFrameCache — in-process cache for AnchorFrame instances (NPS-1 §4.1).
|
|
5
|
-
*/
|
|
6
|
-
import { createHash } from "node:crypto";
|
|
7
|
-
import { NpsAnchorNotFoundError, NpsAnchorPoisonError } from "./exceptions.js";
|
|
8
|
-
export class AnchorFrameCache {
|
|
9
|
-
_store = new Map();
|
|
10
|
-
// Allow clock injection for testing
|
|
11
|
-
clock = () => Date.now();
|
|
12
|
-
// ── Public API ────────────────────────────────────────────────────────────
|
|
13
|
-
set(frame) {
|
|
14
|
-
const anchorId = frame.anchorId.startsWith("sha256:")
|
|
15
|
-
? frame.anchorId
|
|
16
|
-
: AnchorFrameCache.computeAnchorId(frame.schema);
|
|
17
|
-
const existing = this._store.get(anchorId);
|
|
18
|
-
if (existing !== undefined && this.clock() < existing.expiresAt) {
|
|
19
|
-
if (!AnchorFrameCache._schemasEqual(existing.frame.schema, frame.schema)) {
|
|
20
|
-
throw new NpsAnchorPoisonError(anchorId);
|
|
21
|
-
}
|
|
22
|
-
// Same schema — idempotent; refresh TTL below
|
|
23
|
-
}
|
|
24
|
-
const ttlMs = (frame.ttl ?? 3600) * 1000;
|
|
25
|
-
const expiresAt = this.clock() + ttlMs;
|
|
26
|
-
this._store.set(anchorId, { frame, expiresAt });
|
|
27
|
-
return anchorId;
|
|
28
|
-
}
|
|
29
|
-
get(anchorId) {
|
|
30
|
-
const entry = this._store.get(anchorId);
|
|
31
|
-
if (entry === undefined)
|
|
32
|
-
return undefined;
|
|
33
|
-
if (this.clock() > entry.expiresAt) {
|
|
34
|
-
this._store.delete(anchorId);
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
return entry.frame;
|
|
38
|
-
}
|
|
39
|
-
getRequired(anchorId) {
|
|
40
|
-
const frame = this.get(anchorId);
|
|
41
|
-
if (frame === undefined)
|
|
42
|
-
throw new NpsAnchorNotFoundError(anchorId);
|
|
43
|
-
return frame;
|
|
44
|
-
}
|
|
45
|
-
invalidate(anchorId) {
|
|
46
|
-
this._store.delete(anchorId);
|
|
47
|
-
}
|
|
48
|
-
get size() {
|
|
49
|
-
this._evictExpired();
|
|
50
|
-
return this._store.size;
|
|
51
|
-
}
|
|
52
|
-
// ── Static helpers ────────────────────────────────────────────────────────
|
|
53
|
-
static computeAnchorId(schema) {
|
|
54
|
-
const sorted = [...schema.fields]
|
|
55
|
-
.map((f) => {
|
|
56
|
-
const obj = { name: f.name, type: f.type };
|
|
57
|
-
if (f.semantic !== undefined)
|
|
58
|
-
obj["semantic"] = f.semantic;
|
|
59
|
-
if (f.nullable !== undefined)
|
|
60
|
-
obj["nullable"] = f.nullable;
|
|
61
|
-
return obj;
|
|
62
|
-
})
|
|
63
|
-
.sort((a, b) => String(a["name"]).localeCompare(String(b["name"])));
|
|
64
|
-
const canonical = JSON.stringify(sorted);
|
|
65
|
-
const digest = createHash("sha256").update(canonical, "utf8").digest("hex");
|
|
66
|
-
return `sha256:${digest}`;
|
|
67
|
-
}
|
|
68
|
-
// ── Private ───────────────────────────────────────────────────────────────
|
|
69
|
-
_evictExpired() {
|
|
70
|
-
const now = this.clock();
|
|
71
|
-
for (const [k, entry] of this._store) {
|
|
72
|
-
if (now > entry.expiresAt)
|
|
73
|
-
this._store.delete(k);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
static _schemasEqual(a, b) {
|
|
77
|
-
return AnchorFrameCache.computeAnchorId(a) === AnchorFrameCache.computeAnchorId(b);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=cache.js.map
|
package/dist/core/cache.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
-
//
|
|
4
|
-
// Canonical JSON helpers — two distinct serialisation paths used in NPS.
|
|
5
|
-
//
|
|
6
|
-
// AnchorFrame uses JCS (RFC 8785) for anchor_id hashing → jcsStringify.
|
|
7
|
-
// NIP signing uses Python-compatible sorted-key JSON → sortKeysStringify.
|
|
8
|
-
import canonicalizeImport from "canonicalize";
|
|
9
|
-
// `canonicalize` is a CJS module whose default export resolves to a namespace
|
|
10
|
-
// under NodeNext. Cast once to the call signature its .d.ts promises.
|
|
11
|
-
const canonicalize = canonicalizeImport;
|
|
12
|
-
/**
|
|
13
|
-
* JCS (RFC 8785) canonical JSON stringify.
|
|
14
|
-
* Used for AnchorFrame anchor_id computation.
|
|
15
|
-
*/
|
|
16
|
-
export function jcsStringify(obj) {
|
|
17
|
-
const result = canonicalize(obj);
|
|
18
|
-
if (result === undefined) {
|
|
19
|
-
throw new Error("canonicalize returned undefined for input");
|
|
20
|
-
}
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Sorted-key JSON stringify — matches Python's
|
|
25
|
-
* `json.dumps(obj, sort_keys=True, separators=(",",":"))`.
|
|
26
|
-
* Used for NIP signing.
|
|
27
|
-
*/
|
|
28
|
-
export function sortKeysStringify(obj) {
|
|
29
|
-
return JSON.stringify(sortKeys(obj));
|
|
30
|
-
}
|
|
31
|
-
function sortKeys(value) {
|
|
32
|
-
if (Array.isArray(value)) {
|
|
33
|
-
return value.map(sortKeys);
|
|
34
|
-
}
|
|
35
|
-
if (value !== null && typeof value === "object") {
|
|
36
|
-
const sorted = {};
|
|
37
|
-
for (const key of Object.keys(value).sort()) {
|
|
38
|
-
sorted[key] = sortKeys(value[key]);
|
|
39
|
-
}
|
|
40
|
-
return sorted;
|
|
41
|
-
}
|
|
42
|
-
return value;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=canonical-json.js.map
|