@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/ncp/frames.ts","../../src/ncp/registry.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncodingTier, FrameType } from \"../core/frames.js\";\nimport type { NpsFrame } from \"../core/codec.js\";\n\n// ── FrameSchema ───────────────────────────────────────────────────────────────\n\nexport interface SchemaField {\n name: string;\n type: string;\n semantic?: string;\n nullable?: boolean;\n}\n\nexport interface FrameSchema {\n fields: readonly SchemaField[];\n}\n\n// ── AnchorFrame ───────────────────────────────────────────────────────────────\n\nexport class AnchorFrame implements NpsFrame {\n readonly frameType = FrameType.ANCHOR;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorId: string,\n public readonly schema: FrameSchema,\n public readonly ttl: number = 3600,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_id: this.anchorId,\n schema: { fields: this.schema.fields.map((f) => ({ ...f })) },\n ttl: this.ttl,\n };\n }\n\n static fromDict(data: Record<string, unknown>): AnchorFrame {\n const schemaRaw = data[\"schema\"] as { fields: SchemaField[] };\n return new AnchorFrame(\n data[\"anchor_id\"] as string,\n { fields: schemaRaw.fields },\n (data[\"ttl\"] as number | undefined) ?? 3600,\n );\n }\n}\n\n// ── JsonPatchOperation ────────────────────────────────────────────────────────\n\nexport interface JsonPatchOperation {\n op: string;\n path: string;\n value?: unknown;\n}\n\n// ── DiffFrame ─────────────────────────────────────────────────────────────────\n\nexport class DiffFrame implements NpsFrame {\n readonly frameType = FrameType.DIFF;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef: string,\n public readonly baseSeq: number,\n public readonly patch: readonly JsonPatchOperation[],\n public readonly entityId?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef,\n base_seq: this.baseSeq,\n patch: this.patch.map((p) => ({ ...p })),\n entity_id: this.entityId ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): DiffFrame {\n return new DiffFrame(\n data[\"anchor_ref\"] as string,\n data[\"base_seq\"] as number,\n data[\"patch\"] as JsonPatchOperation[],\n (data[\"entity_id\"] as string | null) ?? undefined,\n );\n }\n}\n\n// ── StreamFrame ───────────────────────────────────────────────────────────────\n\nexport class StreamFrame implements NpsFrame {\n readonly frameType = FrameType.STREAM;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly streamId: string,\n public readonly seq: number,\n public readonly isLast: boolean,\n public readonly data: readonly Record<string, unknown>[],\n public readonly anchorRef?: string,\n public readonly windowSize?: number,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n stream_id: this.streamId,\n seq: this.seq,\n is_last: this.isLast,\n data: this.data,\n anchor_ref: this.anchorRef ?? null,\n window_size: this.windowSize ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): StreamFrame {\n return new StreamFrame(\n data[\"stream_id\"] as string,\n data[\"seq\"] as number,\n data[\"is_last\"] as boolean,\n data[\"data\"] as Record<string, unknown>[],\n (data[\"anchor_ref\"] as string | null) ?? undefined,\n (data[\"window_size\"] as number | null) ?? undefined,\n );\n }\n}\n\n// ── CapsFrame ─────────────────────────────────────────────────────────────────\n\nexport class CapsFrame implements NpsFrame {\n readonly frameType = FrameType.CAPS;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly anchorRef: string,\n public readonly count: number,\n public readonly data: readonly Record<string, unknown>[],\n public readonly nextCursor?: string,\n public readonly tokenEst?: number,\n public readonly cached?: boolean,\n public readonly tokenizerUsed?: string,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n anchor_ref: this.anchorRef,\n count: this.count,\n data: this.data,\n next_cursor: this.nextCursor ?? null,\n token_est: this.tokenEst ?? null,\n cached: this.cached ?? null,\n tokenizer_used: this.tokenizerUsed ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): CapsFrame {\n return new CapsFrame(\n data[\"anchor_ref\"] as string,\n data[\"count\"] as number,\n data[\"data\"] as Record<string, unknown>[],\n (data[\"next_cursor\"] as string | null) ?? undefined,\n (data[\"token_est\"] as number | null) ?? undefined,\n (data[\"cached\"] as boolean | null) ?? undefined,\n (data[\"tokenizer_used\"] as string | null) ?? undefined,\n );\n }\n}\n\n// ── ErrorFrame ────────────────────────────────────────────────────────────────\n\nexport class ErrorFrame implements NpsFrame {\n readonly frameType = FrameType.ERROR;\n readonly preferredTier = EncodingTier.MSGPACK;\n\n constructor(\n public readonly status: string,\n public readonly error: string,\n public readonly message?: string,\n public readonly details?: Record<string, unknown>,\n ) {}\n\n toDict(): Record<string, unknown> {\n return {\n status: this.status,\n error: this.error,\n message: this.message ?? null,\n details: this.details ?? null,\n };\n }\n\n static fromDict(data: Record<string, unknown>): ErrorFrame {\n return new ErrorFrame(\n data[\"status\"] as string,\n data[\"error\"] as string,\n (data[\"message\"] as string | null) ?? undefined,\n (data[\"details\"] as Record<string, unknown> | null) ?? undefined,\n );\n }\n}\n","// Copyright 2026 INNO LOTUS PTY LTD\n// SPDX-License-Identifier: Apache-2.0\n\nimport { 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"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
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';
|
|
2
|
+
import { F as FrameRegistry } from '../codec-CmHeovTV.cjs';
|
|
3
|
+
|
|
4
|
+
declare function registerNcpFrames(registry: FrameRegistry): void;
|
|
5
|
+
|
|
6
|
+
export { registerNcpFrames };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./frames/anchor-frame.js";
|
|
2
|
+
export * from "./frames/caps-frame.js";
|
|
3
|
+
export * from "./frames/diff-frame.js";
|
|
4
|
+
export * from "./frames/error-frame.js";
|
|
5
|
+
export * from "./frames/hello-frame.js";
|
|
6
|
+
export * from "./frames/stream-frame.js";
|
|
7
|
+
export * from "./ncp-error-codes.js";
|
|
8
|
+
export * from "./ncp-patch-format.js";
|
|
9
|
+
export * from "./handshake.js";
|
|
10
|
+
export * from "./stream-manager.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ncp/index.ts"],"names":[],"mappings":"AAEA,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
export * from "./frames/anchor-frame.js";
|
|
4
|
+
export * from "./frames/caps-frame.js";
|
|
5
|
+
export * from "./frames/diff-frame.js";
|
|
6
|
+
export * from "./frames/error-frame.js";
|
|
7
|
+
export * from "./frames/hello-frame.js";
|
|
8
|
+
export * from "./frames/stream-frame.js";
|
|
9
|
+
export * from "./ncp-error-codes.js";
|
|
10
|
+
export * from "./ncp-patch-format.js";
|
|
11
|
+
export * from "./handshake.js";
|
|
12
|
+
export * from "./stream-manager.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ncp/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const NCP_ERROR_CODES: {
|
|
2
|
+
readonly NCP_FRAME_PARSE_ERROR: "NCP-FRAME-PARSE-ERROR";
|
|
3
|
+
readonly NCP_FRAME_INCOMPLETE: "NCP-FRAME-INCOMPLETE";
|
|
4
|
+
readonly NCP_FRAME_UNKNOWN_TYPE: "NCP-FRAME-UNKNOWN-TYPE";
|
|
5
|
+
readonly NCP_FRAME_PAYLOAD_TOO_LARGE: "NCP-FRAME-PAYLOAD-TOO-LARGE";
|
|
6
|
+
readonly NCP_FRAME_FLAGS_INVALID: "NCP-FRAME-FLAGS-INVALID";
|
|
7
|
+
readonly NCP_ANCHOR_NOT_FOUND: "NCP-ANCHOR-NOT-FOUND";
|
|
8
|
+
readonly NCP_ANCHOR_SCHEMA_INVALID: "NCP-ANCHOR-SCHEMA-INVALID";
|
|
9
|
+
readonly NCP_ANCHOR_ID_MISMATCH: "NCP-ANCHOR-ID-MISMATCH";
|
|
10
|
+
readonly NCP_ANCHOR_STALE: "NCP-ANCHOR-STALE";
|
|
11
|
+
readonly NCP_STREAM_SEQ_GAP: "NCP-STREAM-SEQ-GAP";
|
|
12
|
+
readonly NCP_STREAM_NOT_FOUND: "NCP-STREAM-NOT-FOUND";
|
|
13
|
+
readonly NCP_STREAM_LIMIT_EXCEEDED: "NCP-STREAM-LIMIT-EXCEEDED";
|
|
14
|
+
readonly NCP_STREAM_WINDOW_OVERFLOW: "NCP-STREAM-WINDOW-OVERFLOW";
|
|
15
|
+
readonly NCP_ENCODING_UNSUPPORTED: "NCP-ENCODING-UNSUPPORTED";
|
|
16
|
+
readonly NCP_DIFF_FORMAT_UNSUPPORTED: "NCP-DIFF-FORMAT-UNSUPPORTED";
|
|
17
|
+
readonly NCP_VERSION_INCOMPATIBLE: "NCP-VERSION-INCOMPATIBLE";
|
|
18
|
+
readonly NCP_ENC_NOT_NEGOTIATED: "NCP-ENC-NOT-NEGOTIATED";
|
|
19
|
+
readonly NCP_ENC_AUTH_FAILED: "NCP-ENC-AUTH-FAILED";
|
|
20
|
+
};
|
|
21
|
+
export type NcpErrorCode = typeof NCP_ERROR_CODES[keyof typeof NCP_ERROR_CODES];
|
|
22
|
+
//# sourceMappingURL=ncp-error-codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ncp-error-codes.d.ts","sourceRoot":"","sources":["../../src/ncp/ncp-error-codes.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;CAqBlB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// NCP Error Codes — All v0.4 protocol error codes
|
|
5
|
+
// NPS-1 §6 + §7.4
|
|
6
|
+
//
|
|
7
|
+
// Implementation-only codes (NCP_FRAME_PARSE_ERROR, NCP_FRAME_INCOMPLETE) cover
|
|
8
|
+
// wire-layer parse failures not in spec §6. See test/ncp_test_results.md spec
|
|
9
|
+
// question 2 for the proposal to register them upstream.
|
|
10
|
+
export const NCP_ERROR_CODES = {
|
|
11
|
+
// Implementation-only codes (not in spec §6 — see test_results.md spec question 2)
|
|
12
|
+
NCP_FRAME_PARSE_ERROR: "NCP-FRAME-PARSE-ERROR",
|
|
13
|
+
NCP_FRAME_INCOMPLETE: "NCP-FRAME-INCOMPLETE",
|
|
14
|
+
// Spec-defined codes
|
|
15
|
+
NCP_FRAME_UNKNOWN_TYPE: "NCP-FRAME-UNKNOWN-TYPE",
|
|
16
|
+
NCP_FRAME_PAYLOAD_TOO_LARGE: "NCP-FRAME-PAYLOAD-TOO-LARGE",
|
|
17
|
+
NCP_FRAME_FLAGS_INVALID: "NCP-FRAME-FLAGS-INVALID",
|
|
18
|
+
NCP_ANCHOR_NOT_FOUND: "NCP-ANCHOR-NOT-FOUND",
|
|
19
|
+
NCP_ANCHOR_SCHEMA_INVALID: "NCP-ANCHOR-SCHEMA-INVALID",
|
|
20
|
+
NCP_ANCHOR_ID_MISMATCH: "NCP-ANCHOR-ID-MISMATCH",
|
|
21
|
+
NCP_ANCHOR_STALE: "NCP-ANCHOR-STALE",
|
|
22
|
+
NCP_STREAM_SEQ_GAP: "NCP-STREAM-SEQ-GAP",
|
|
23
|
+
NCP_STREAM_NOT_FOUND: "NCP-STREAM-NOT-FOUND",
|
|
24
|
+
NCP_STREAM_LIMIT_EXCEEDED: "NCP-STREAM-LIMIT-EXCEEDED",
|
|
25
|
+
NCP_STREAM_WINDOW_OVERFLOW: "NCP-STREAM-WINDOW-OVERFLOW",
|
|
26
|
+
NCP_ENCODING_UNSUPPORTED: "NCP-ENCODING-UNSUPPORTED",
|
|
27
|
+
NCP_DIFF_FORMAT_UNSUPPORTED: "NCP-DIFF-FORMAT-UNSUPPORTED",
|
|
28
|
+
NCP_VERSION_INCOMPATIBLE: "NCP-VERSION-INCOMPATIBLE",
|
|
29
|
+
NCP_ENC_NOT_NEGOTIATED: "NCP-ENC-NOT-NEGOTIATED",
|
|
30
|
+
NCP_ENC_AUTH_FAILED: "NCP-ENC-AUTH-FAILED",
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=ncp-error-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ncp-error-codes.js","sourceRoot":"","sources":["../../src/ncp/ncp-error-codes.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,kDAAkD;AAClD,kBAAkB;AAClB,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,yDAAyD;AAEzD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,mFAAmF;IACnF,qBAAqB,EAAE,uBAAuB;IAC9C,oBAAoB,EAAE,sBAAsB;IAC5C,qBAAqB;IACrB,sBAAsB,EAAE,wBAAwB;IAChD,2BAA2B,EAAE,6BAA6B;IAC1D,uBAAuB,EAAE,yBAAyB;IAClD,oBAAoB,EAAE,sBAAsB;IAC5C,yBAAyB,EAAE,2BAA2B;IACtD,sBAAsB,EAAE,wBAAwB;IAChD,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,oBAAoB;IACxC,oBAAoB,EAAE,sBAAsB;IAC5C,yBAAyB,EAAE,2BAA2B;IACtD,0BAA0B,EAAE,4BAA4B;IACxD,wBAAwB,EAAE,0BAA0B;IACpD,2BAA2B,EAAE,6BAA6B;IAC1D,wBAAwB,EAAE,0BAA0B;IACpD,sBAAsB,EAAE,wBAAwB;IAChD,mBAAmB,EAAE,qBAAqB;CAClC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const PATCH_FORMAT: {
|
|
2
|
+
readonly JSON_PATCH: "json_patch";
|
|
3
|
+
readonly BINARY_BITSET: "binary_bitset";
|
|
4
|
+
};
|
|
5
|
+
export type PatchFormat = typeof PATCH_FORMAT[keyof typeof PATCH_FORMAT];
|
|
6
|
+
export declare function isValidPatchFormat(v: unknown): v is PatchFormat;
|
|
7
|
+
//# sourceMappingURL=ncp-patch-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ncp-patch-format.d.ts","sourceRoot":"","sources":["../../src/ncp/ncp-patch-format.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,OAAO,YAAY,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAEzE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAE/D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// NCP Patch Format — DiffFrame patch encoding types
|
|
5
|
+
// NPS-1 §4.2
|
|
6
|
+
export const PATCH_FORMAT = {
|
|
7
|
+
JSON_PATCH: "json_patch",
|
|
8
|
+
BINARY_BITSET: "binary_bitset",
|
|
9
|
+
};
|
|
10
|
+
export function isValidPatchFormat(v) {
|
|
11
|
+
return v === PATCH_FORMAT.JSON_PATCH || v === PATCH_FORMAT.BINARY_BITSET;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ncp-patch-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ncp-patch-format.js","sourceRoot":"","sources":["../../src/ncp/ncp-patch-format.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,oDAAoD;AACpD,aAAa;AAEb,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;CACtB,CAAC;AAIX,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,CAAC,KAAK,YAAY,CAAC,UAAU,IAAI,CAAC,KAAK,YAAY,CAAC,aAAa,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/ncp/registry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAM/D"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { FrameType } from "../core/frames.js";
|
|
4
|
+
import { AnchorFrame, CapsFrame, DiffFrame, ErrorFrame, StreamFrame } from "./frames.js";
|
|
5
|
+
export function registerNcpFrames(registry) {
|
|
6
|
+
registry.register(FrameType.ANCHOR, AnchorFrame);
|
|
7
|
+
registry.register(FrameType.DIFF, DiffFrame);
|
|
8
|
+
registry.register(FrameType.STREAM, StreamFrame);
|
|
9
|
+
registry.register(FrameType.CAPS, CapsFrame);
|
|
10
|
+
registry.register(FrameType.ERROR, ErrorFrame);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/ncp/registry.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzF,MAAM,UAAU,iBAAiB,CAAC,QAAuB;IACvD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAI,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAI,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAG,UAAU,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { StreamFrame } from "./frames/stream-frame.js";
|
|
2
|
+
/**
|
|
3
|
+
* Manages concurrent StreamFrame streams.
|
|
4
|
+
*
|
|
5
|
+
* - Tracks active streams by stream_id
|
|
6
|
+
* - Validates sequential seq numbers
|
|
7
|
+
* - Enforces max concurrent stream limit (NPS-1 §7.3, default 32)
|
|
8
|
+
* - Detects early termination via error_code
|
|
9
|
+
* - Enforces window-based flow control on outgoing streams (NCP-S-07–11)
|
|
10
|
+
*/
|
|
11
|
+
export declare class StreamManager {
|
|
12
|
+
private readonly streams;
|
|
13
|
+
private readonly outgoing;
|
|
14
|
+
private readonly maxConcurrent;
|
|
15
|
+
constructor(options?: {
|
|
16
|
+
maxConcurrent?: number;
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Receive a StreamFrame chunk.
|
|
20
|
+
*
|
|
21
|
+
* @returns true if stream is complete (is_last=true or error_code set).
|
|
22
|
+
* @throws {NcpError} NCP-STREAM-LIMIT-EXCEEDED if too many concurrent streams.
|
|
23
|
+
* @throws {NcpError} NCP-STREAM-NOT-FOUND if frame.seq > 0 for a stream that was never opened.
|
|
24
|
+
* @throws {NcpError} NPS-CLIENT-CONFLICT if the stream_id was already completed (stream-id reuse; see test_cases NCP-S-04).
|
|
25
|
+
* @throws {NcpError} NCP-STREAM-SEQ-GAP if sequence number is not expected.
|
|
26
|
+
*/
|
|
27
|
+
receive(frame: StreamFrame): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Send a StreamFrame on an outgoing stream, enforcing window-based flow control.
|
|
30
|
+
*
|
|
31
|
+
* - seq=0 with window_size initialises remainingWindow (no decrement for opening frame).
|
|
32
|
+
* - Subsequent sends decrement remainingWindow when flow control is active.
|
|
33
|
+
* - Throws NCP-STREAM-WINDOW-OVERFLOW when remainingWindow === 0.
|
|
34
|
+
*
|
|
35
|
+
* @throws {NcpError} NCP-STREAM-WINDOW-OVERFLOW if window is exhausted.
|
|
36
|
+
*/
|
|
37
|
+
send(frame: StreamFrame): void;
|
|
38
|
+
/**
|
|
39
|
+
* Update the send window for a stream.
|
|
40
|
+
*
|
|
41
|
+
* Called when a reverse-direction StreamFrame arrives with data=[] and window_size set.
|
|
42
|
+
* Replaces remainingWindow with new_size. Sets paused=true when new_size === 0.
|
|
43
|
+
*/
|
|
44
|
+
updateWindow(streamId: string, newSize: number): void;
|
|
45
|
+
/**
|
|
46
|
+
* Returns true when the outgoing stream is paused (window=0 was received).
|
|
47
|
+
* Resumes (returns false) once a non-zero window update arrives.
|
|
48
|
+
*/
|
|
49
|
+
isPaused(streamId: string): boolean;
|
|
50
|
+
/** Get reassembled data for a completed stream. */
|
|
51
|
+
getData(streamId: string): unknown[] | null;
|
|
52
|
+
/** Get error code if stream terminated with error. */
|
|
53
|
+
getError(streamId: string): string | undefined;
|
|
54
|
+
/** Number of active (non-completed) streams. */
|
|
55
|
+
get activeCount(): number;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=stream-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-manager.d.ts","sourceRoot":"","sources":["../../src/ncp/stream-manager.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAgB5D;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;IAIhD;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAwEpC;;;;;;;;OAQG;IACH,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IA8B9B;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAerD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAInC,mDAAmD;IACnD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI;IAM3C,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C,gDAAgD;IAChD,IAAI,WAAW,IAAI,MAAM,CAMxB;CACF"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 LabAcacia / INNO LOTUS PTY LTD
|
|
3
|
+
//
|
|
4
|
+
// StreamManager — Concurrent stream tracking, sequence validation, flow control
|
|
5
|
+
// NPS-1 §4.3, §7.3
|
|
6
|
+
import { NcpError } from "../core/frame-header.js";
|
|
7
|
+
import { NCP_ERROR_CODES } from "./ncp-error-codes.js";
|
|
8
|
+
/**
|
|
9
|
+
* Manages concurrent StreamFrame streams.
|
|
10
|
+
*
|
|
11
|
+
* - Tracks active streams by stream_id
|
|
12
|
+
* - Validates sequential seq numbers
|
|
13
|
+
* - Enforces max concurrent stream limit (NPS-1 §7.3, default 32)
|
|
14
|
+
* - Detects early termination via error_code
|
|
15
|
+
* - Enforces window-based flow control on outgoing streams (NCP-S-07–11)
|
|
16
|
+
*/
|
|
17
|
+
export class StreamManager {
|
|
18
|
+
streams = new Map();
|
|
19
|
+
outgoing = new Map();
|
|
20
|
+
maxConcurrent;
|
|
21
|
+
constructor(options) {
|
|
22
|
+
this.maxConcurrent = options?.maxConcurrent ?? 32;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Receive a StreamFrame chunk.
|
|
26
|
+
*
|
|
27
|
+
* @returns true if stream is complete (is_last=true or error_code set).
|
|
28
|
+
* @throws {NcpError} NCP-STREAM-LIMIT-EXCEEDED if too many concurrent streams.
|
|
29
|
+
* @throws {NcpError} NCP-STREAM-NOT-FOUND if frame.seq > 0 for a stream that was never opened.
|
|
30
|
+
* @throws {NcpError} NPS-CLIENT-CONFLICT if the stream_id was already completed (stream-id reuse; see test_cases NCP-S-04).
|
|
31
|
+
* @throws {NcpError} NCP-STREAM-SEQ-GAP if sequence number is not expected.
|
|
32
|
+
*/
|
|
33
|
+
receive(frame) {
|
|
34
|
+
let stream = this.streams.get(frame.stream_id);
|
|
35
|
+
if (!stream) {
|
|
36
|
+
// A stream is opened only by seq=0. Any other seq on an unknown stream_id
|
|
37
|
+
// means the opener was never seen (NCP-S-13: unknown stream_id).
|
|
38
|
+
if (frame.seq !== 0) {
|
|
39
|
+
throw new NcpError(NCP_ERROR_CODES.NCP_STREAM_NOT_FOUND, `Unknown stream_id ${frame.stream_id} — first frame must have seq=0`);
|
|
40
|
+
}
|
|
41
|
+
// New stream — check concurrent limit
|
|
42
|
+
if (this.streams.size >= this.maxConcurrent) {
|
|
43
|
+
throw new NcpError(NCP_ERROR_CODES.NCP_STREAM_LIMIT_EXCEEDED, `Max concurrent streams (${this.maxConcurrent}) exceeded`);
|
|
44
|
+
}
|
|
45
|
+
stream = {
|
|
46
|
+
streamId: frame.stream_id,
|
|
47
|
+
expectedSeq: 0,
|
|
48
|
+
chunks: [],
|
|
49
|
+
completed: false,
|
|
50
|
+
};
|
|
51
|
+
this.streams.set(frame.stream_id, stream);
|
|
52
|
+
}
|
|
53
|
+
// Reject writes to completed streams. Per test_cases NCP-S-04, the spec does
|
|
54
|
+
// not assign a dedicated NCP code for stream-id reuse; interim mapping uses
|
|
55
|
+
// the NPS-level NPS-CLIENT-CONFLICT until a spec-side code is added.
|
|
56
|
+
if (stream.completed) {
|
|
57
|
+
throw new NcpError("NPS-CLIENT-CONFLICT", `Stream ${frame.stream_id} is already completed — cannot reuse stream_id`);
|
|
58
|
+
}
|
|
59
|
+
// Sequence validation
|
|
60
|
+
if (frame.seq !== stream.expectedSeq) {
|
|
61
|
+
// Duplicate detection — same seq as last accepted
|
|
62
|
+
if (frame.seq < stream.expectedSeq) {
|
|
63
|
+
// Ignore duplicate (idempotent)
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
throw new NcpError(NCP_ERROR_CODES.NCP_STREAM_SEQ_GAP, `Expected seq ${stream.expectedSeq}, got ${frame.seq} on stream ${frame.stream_id}`);
|
|
67
|
+
}
|
|
68
|
+
stream.chunks.push(frame.data);
|
|
69
|
+
stream.expectedSeq = frame.seq + 1;
|
|
70
|
+
// Early termination via error_code
|
|
71
|
+
if (frame.error_code) {
|
|
72
|
+
stream.completed = true;
|
|
73
|
+
stream.errorCode = frame.error_code;
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
// Normal completion
|
|
77
|
+
if (frame.is_last) {
|
|
78
|
+
stream.completed = true;
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Send a StreamFrame on an outgoing stream, enforcing window-based flow control.
|
|
85
|
+
*
|
|
86
|
+
* - seq=0 with window_size initialises remainingWindow (no decrement for opening frame).
|
|
87
|
+
* - Subsequent sends decrement remainingWindow when flow control is active.
|
|
88
|
+
* - Throws NCP-STREAM-WINDOW-OVERFLOW when remainingWindow === 0.
|
|
89
|
+
*
|
|
90
|
+
* @throws {NcpError} NCP-STREAM-WINDOW-OVERFLOW if window is exhausted.
|
|
91
|
+
*/
|
|
92
|
+
send(frame) {
|
|
93
|
+
let out = this.outgoing.get(frame.stream_id);
|
|
94
|
+
if (!out) {
|
|
95
|
+
out = {
|
|
96
|
+
streamId: frame.stream_id,
|
|
97
|
+
remainingWindow: undefined,
|
|
98
|
+
paused: false,
|
|
99
|
+
};
|
|
100
|
+
this.outgoing.set(frame.stream_id, out);
|
|
101
|
+
}
|
|
102
|
+
// Opening frame: initialise window from window_size if provided.
|
|
103
|
+
if (frame.seq === 0 && frame.window_size !== undefined) {
|
|
104
|
+
out.remainingWindow = frame.window_size;
|
|
105
|
+
return; // opening frame does not consume a window slot
|
|
106
|
+
}
|
|
107
|
+
// Flow control check for subsequent frames.
|
|
108
|
+
if (out.remainingWindow !== undefined) {
|
|
109
|
+
if (out.remainingWindow === 0) {
|
|
110
|
+
throw new NcpError(NCP_ERROR_CODES.NCP_STREAM_WINDOW_OVERFLOW, `Window exhausted on stream ${frame.stream_id}`);
|
|
111
|
+
}
|
|
112
|
+
out.remainingWindow -= 1;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Update the send window for a stream.
|
|
117
|
+
*
|
|
118
|
+
* Called when a reverse-direction StreamFrame arrives with data=[] and window_size set.
|
|
119
|
+
* Replaces remainingWindow with new_size. Sets paused=true when new_size === 0.
|
|
120
|
+
*/
|
|
121
|
+
updateWindow(streamId, newSize) {
|
|
122
|
+
let out = this.outgoing.get(streamId);
|
|
123
|
+
if (!out) {
|
|
124
|
+
out = {
|
|
125
|
+
streamId,
|
|
126
|
+
remainingWindow: newSize,
|
|
127
|
+
paused: newSize === 0,
|
|
128
|
+
};
|
|
129
|
+
this.outgoing.set(streamId, out);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
out.remainingWindow = newSize;
|
|
133
|
+
out.paused = newSize === 0;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Returns true when the outgoing stream is paused (window=0 was received).
|
|
137
|
+
* Resumes (returns false) once a non-zero window update arrives.
|
|
138
|
+
*/
|
|
139
|
+
isPaused(streamId) {
|
|
140
|
+
return this.outgoing.get(streamId)?.paused ?? false;
|
|
141
|
+
}
|
|
142
|
+
/** Get reassembled data for a completed stream. */
|
|
143
|
+
getData(streamId) {
|
|
144
|
+
const stream = this.streams.get(streamId);
|
|
145
|
+
if (!stream || !stream.completed)
|
|
146
|
+
return null;
|
|
147
|
+
return stream.chunks.flat();
|
|
148
|
+
}
|
|
149
|
+
/** Get error code if stream terminated with error. */
|
|
150
|
+
getError(streamId) {
|
|
151
|
+
return this.streams.get(streamId)?.errorCode;
|
|
152
|
+
}
|
|
153
|
+
/** Number of active (non-completed) streams. */
|
|
154
|
+
get activeCount() {
|
|
155
|
+
let count = 0;
|
|
156
|
+
for (const s of this.streams.values()) {
|
|
157
|
+
if (!s.completed)
|
|
158
|
+
count++;
|
|
159
|
+
}
|
|
160
|
+
return count;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=stream-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-manager.js","sourceRoot":"","sources":["../../src/ncp/stream-manager.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,oDAAoD;AACpD,EAAE;AACF,gFAAgF;AAChF,mBAAmB;AAEnB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAiBvD;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACP,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC1C,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC7C,aAAa,CAAS;IAEvC,YAAY,OAAoC;QAC9C,IAAI,CAAC,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC;IACpD,CAAC;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAkB;QACxB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,0EAA0E;YAC1E,iEAAiE;YACjE,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,QAAQ,CAChB,eAAe,CAAC,oBAAoB,EACpC,qBAAqB,KAAK,CAAC,SAAS,gCAAgC,CACrE,CAAC;YACJ,CAAC;YAED,sCAAsC;YACtC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC5C,MAAM,IAAI,QAAQ,CAChB,eAAe,CAAC,yBAAyB,EACzC,2BAA2B,IAAI,CAAC,aAAa,YAAY,CAC1D,CAAC;YACJ,CAAC;YAED,MAAM,GAAG;gBACP,QAAQ,EAAE,KAAK,CAAC,SAAS;gBACzB,WAAW,EAAE,CAAC;gBACd,MAAM,EAAE,EAAE;gBACV,SAAS,EAAE,KAAK;aACjB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QAED,6EAA6E;QAC7E,4EAA4E;QAC5E,qEAAqE;QACrE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,QAAQ,CAChB,qBAAqB,EACrB,UAAU,KAAK,CAAC,SAAS,gDAAgD,CAC1E,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;YACrC,kDAAkD;YAClD,IAAI,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBACnC,gCAAgC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,IAAI,QAAQ,CAChB,eAAe,CAAC,kBAAkB,EAClC,gBAAgB,MAAM,CAAC,WAAW,SAAS,KAAK,CAAC,GAAG,cAAc,KAAK,CAAC,SAAS,EAAE,CACpF,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QAEnC,mCAAmC;QACnC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oBAAoB;QACpB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,CAAC,KAAkB;QACrB,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE7C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG;gBACJ,QAAQ,EAAE,KAAK,CAAC,SAAS;gBACzB,eAAe,EAAE,SAAS;gBAC1B,MAAM,EAAE,KAAK;aACd,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QAED,iEAAiE;QACjE,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACvD,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;YACxC,OAAO,CAAC,+CAA+C;QACzD,CAAC;QAED,4CAA4C;QAC5C,IAAI,GAAG,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,QAAQ,CAChB,eAAe,CAAC,0BAA0B,EAC1C,8BAA8B,KAAK,CAAC,SAAS,EAAE,CAChD,CAAC;YACJ,CAAC;YACD,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,QAAgB,EAAE,OAAe;QAC5C,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG;gBACJ,QAAQ;gBACR,eAAe,EAAE,OAAO;gBACxB,MAAM,EAAE,OAAO,KAAK,CAAC;aACtB,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC;QAC9B,GAAG,CAAC,MAAM,GAAG,OAAO,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC;IACtD,CAAC;IAED,mDAAmD;IACnD,OAAO,CAAC,QAAgB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,sDAAsD;IACtD,QAAQ,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC/C,CAAC;IAED,gDAAgD;IAChD,IAAI,WAAW;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,CAAC,CAAC,SAAS;gBAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { EncodingTier, FrameType } from "../core/frames.js";
|
|
2
|
+
import type { NpsFrame } from "../core/codec.js";
|
|
3
|
+
export interface NdpAddress {
|
|
4
|
+
host: string;
|
|
5
|
+
port: number;
|
|
6
|
+
protocol: string;
|
|
7
|
+
}
|
|
8
|
+
export interface NdpGraphNode {
|
|
9
|
+
nid: string;
|
|
10
|
+
addresses: readonly NdpAddress[];
|
|
11
|
+
capabilities: readonly string[];
|
|
12
|
+
nodeType?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface NdpResolveResult {
|
|
15
|
+
host: string;
|
|
16
|
+
port: number;
|
|
17
|
+
ttl: number;
|
|
18
|
+
certFingerprint?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class AnnounceFrame implements NpsFrame {
|
|
21
|
+
readonly nid: string;
|
|
22
|
+
readonly addresses: readonly NdpAddress[];
|
|
23
|
+
readonly capabilities: readonly string[];
|
|
24
|
+
readonly ttl: number;
|
|
25
|
+
readonly timestamp: string;
|
|
26
|
+
readonly signature: string;
|
|
27
|
+
readonly nodeType?: string | undefined;
|
|
28
|
+
readonly frameType = FrameType.ANNOUNCE;
|
|
29
|
+
readonly preferredTier = EncodingTier.MSGPACK;
|
|
30
|
+
constructor(nid: string, addresses: readonly NdpAddress[], capabilities: readonly string[], ttl: number, timestamp: string, signature: string, nodeType?: string | undefined);
|
|
31
|
+
unsignedDict(): Record<string, unknown>;
|
|
32
|
+
toDict(): Record<string, unknown>;
|
|
33
|
+
static fromDict(data: Record<string, unknown>): AnnounceFrame;
|
|
34
|
+
}
|
|
35
|
+
export declare class ResolveFrame implements NpsFrame {
|
|
36
|
+
readonly target: string;
|
|
37
|
+
readonly requesterNid?: string | undefined;
|
|
38
|
+
readonly resolved?: NdpResolveResult | undefined;
|
|
39
|
+
readonly frameType = FrameType.RESOLVE;
|
|
40
|
+
readonly preferredTier = EncodingTier.MSGPACK;
|
|
41
|
+
constructor(target: string, requesterNid?: string | undefined, resolved?: NdpResolveResult | undefined);
|
|
42
|
+
toDict(): Record<string, unknown>;
|
|
43
|
+
static fromDict(data: Record<string, unknown>): ResolveFrame;
|
|
44
|
+
}
|
|
45
|
+
export declare class GraphFrame implements NpsFrame {
|
|
46
|
+
readonly seq: number;
|
|
47
|
+
readonly initialSync: boolean;
|
|
48
|
+
readonly nodes?: readonly NdpGraphNode[] | undefined;
|
|
49
|
+
readonly patch?: readonly Record<string, unknown>[] | undefined;
|
|
50
|
+
readonly frameType = FrameType.GRAPH;
|
|
51
|
+
readonly preferredTier = EncodingTier.MSGPACK;
|
|
52
|
+
constructor(seq: number, initialSync: boolean, nodes?: readonly NdpGraphNode[] | undefined, patch?: readonly Record<string, unknown>[] | undefined);
|
|
53
|
+
toDict(): Record<string, unknown>;
|
|
54
|
+
static fromDict(data: Record<string, unknown>): GraphFrame;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=frames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../src/ndp/frames.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAM,MAAM,CAAC;IACjB,IAAI,EAAM,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAW,MAAM,CAAC;IACrB,SAAS,EAAK,SAAS,UAAU,EAAE,CAAC;IACpC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAK,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAe,MAAM,CAAC;IAC1B,IAAI,EAAe,MAAM,CAAC;IAC1B,GAAG,EAAgB,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAG,MAAM,CAAC;CAC3B;AAED,qBAAa,aAAc,YAAW,QAAQ;aAK1B,GAAG,EAAW,MAAM;aACpB,SAAS,EAAK,SAAS,UAAU,EAAE;aACnC,YAAY,EAAE,SAAS,MAAM,EAAE;aAC/B,GAAG,EAAW,MAAM;aACpB,SAAS,EAAK,MAAM;aACpB,SAAS,EAAK,MAAM;aACpB,QAAQ,CAAC,EAAK,MAAM;IAVtC,QAAQ,CAAC,SAAS,sBAA0B;IAC5C,QAAQ,CAAC,aAAa,wBAAwB;gBAG5B,GAAG,EAAW,MAAM,EACpB,SAAS,EAAK,SAAS,UAAU,EAAE,EACnC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,GAAG,EAAW,MAAM,EACpB,SAAS,EAAK,MAAM,EACpB,SAAS,EAAK,MAAM,EACpB,QAAQ,CAAC,EAAK,MAAM,YAAA;IAGtC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAWvC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIjC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa;CAW9D;AAED,qBAAa,YAAa,YAAW,QAAQ;aAKzB,MAAM,EAAS,MAAM;aACrB,YAAY,CAAC,EAAE,MAAM;aACrB,QAAQ,CAAC,EAAM,gBAAgB;IANjD,QAAQ,CAAC,SAAS,qBAAyB;IAC3C,QAAQ,CAAC,aAAa,wBAAwB;gBAG5B,MAAM,EAAS,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,YAAA,EACrB,QAAQ,CAAC,EAAM,gBAAgB,YAAA;IAGjD,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQjC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;CAO7D;AAED,qBAAa,UAAW,YAAW,QAAQ;aAKvB,GAAG,EAAU,MAAM;aACnB,WAAW,EAAE,OAAO;aACpB,KAAK,CAAC,EAAO,SAAS,YAAY,EAAE;aACpC,KAAK,CAAC,EAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAPjE,QAAQ,CAAC,SAAS,mBAAuB;IACzC,QAAQ,CAAC,aAAa,wBAAwB;gBAG5B,GAAG,EAAU,MAAM,EACnB,WAAW,EAAE,OAAO,EACpB,KAAK,CAAC,EAAO,SAAS,YAAY,EAAE,YAAA,EACpC,KAAK,CAAC,EAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAA;IAGjE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASjC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU;CAQ3D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { EncodingTier, FrameType } from "../core/frames.js";
|
|
4
|
+
export class AnnounceFrame {
|
|
5
|
+
nid;
|
|
6
|
+
addresses;
|
|
7
|
+
capabilities;
|
|
8
|
+
ttl;
|
|
9
|
+
timestamp;
|
|
10
|
+
signature;
|
|
11
|
+
nodeType;
|
|
12
|
+
frameType = FrameType.ANNOUNCE;
|
|
13
|
+
preferredTier = EncodingTier.MSGPACK;
|
|
14
|
+
constructor(nid, addresses, capabilities, ttl, timestamp, signature, nodeType) {
|
|
15
|
+
this.nid = nid;
|
|
16
|
+
this.addresses = addresses;
|
|
17
|
+
this.capabilities = capabilities;
|
|
18
|
+
this.ttl = ttl;
|
|
19
|
+
this.timestamp = timestamp;
|
|
20
|
+
this.signature = signature;
|
|
21
|
+
this.nodeType = nodeType;
|
|
22
|
+
}
|
|
23
|
+
unsignedDict() {
|
|
24
|
+
return {
|
|
25
|
+
nid: this.nid,
|
|
26
|
+
addresses: this.addresses,
|
|
27
|
+
capabilities: this.capabilities,
|
|
28
|
+
ttl: this.ttl,
|
|
29
|
+
timestamp: this.timestamp,
|
|
30
|
+
node_type: this.nodeType ?? null,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
toDict() {
|
|
34
|
+
return { ...this.unsignedDict(), signature: this.signature };
|
|
35
|
+
}
|
|
36
|
+
static fromDict(data) {
|
|
37
|
+
return new AnnounceFrame(data["nid"], data["addresses"], data["capabilities"], data["ttl"], data["timestamp"], data["signature"], data["node_type"] ?? undefined);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export class ResolveFrame {
|
|
41
|
+
target;
|
|
42
|
+
requesterNid;
|
|
43
|
+
resolved;
|
|
44
|
+
frameType = FrameType.RESOLVE;
|
|
45
|
+
preferredTier = EncodingTier.MSGPACK;
|
|
46
|
+
constructor(target, requesterNid, resolved) {
|
|
47
|
+
this.target = target;
|
|
48
|
+
this.requesterNid = requesterNid;
|
|
49
|
+
this.resolved = resolved;
|
|
50
|
+
}
|
|
51
|
+
toDict() {
|
|
52
|
+
return {
|
|
53
|
+
target: this.target,
|
|
54
|
+
requester_nid: this.requesterNid ?? null,
|
|
55
|
+
resolved: this.resolved ?? null,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
static fromDict(data) {
|
|
59
|
+
return new ResolveFrame(data["target"], data["requester_nid"] ?? undefined, data["resolved"] ?? undefined);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class GraphFrame {
|
|
63
|
+
seq;
|
|
64
|
+
initialSync;
|
|
65
|
+
nodes;
|
|
66
|
+
patch;
|
|
67
|
+
frameType = FrameType.GRAPH;
|
|
68
|
+
preferredTier = EncodingTier.MSGPACK;
|
|
69
|
+
constructor(seq, initialSync, nodes, patch) {
|
|
70
|
+
this.seq = seq;
|
|
71
|
+
this.initialSync = initialSync;
|
|
72
|
+
this.nodes = nodes;
|
|
73
|
+
this.patch = patch;
|
|
74
|
+
}
|
|
75
|
+
toDict() {
|
|
76
|
+
return {
|
|
77
|
+
seq: this.seq,
|
|
78
|
+
initial_sync: this.initialSync,
|
|
79
|
+
nodes: this.nodes ?? null,
|
|
80
|
+
patch: this.patch ?? null,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
static fromDict(data) {
|
|
84
|
+
return new GraphFrame(data["seq"], data["initial_sync"], data["nodes"] ?? undefined, data["patch"] ?? undefined);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/ndp/frames.ts"],"names":[],"mappings":"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"}
|