@labacacia/nps-sdk 1.0.0-alpha.6 → 1.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.cn.md +115 -0
- package/CHANGELOG.md +124 -0
- package/README.cn.md +3 -1
- package/README.md +3 -1
- package/dist/core/anchor-cache.d.ts +42 -0
- package/dist/core/anchor-cache.d.ts.map +1 -0
- package/dist/core/anchor-cache.js +104 -0
- package/dist/core/anchor-cache.js.map +1 -0
- package/dist/core/cache.d.ts +14 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +80 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/canonical-json.d.ts +12 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +44 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/codec.d.ts +32 -0
- package/dist/core/codec.d.ts.map +1 -0
- package/dist/core/codec.js +119 -0
- package/dist/core/codec.js.map +1 -0
- package/dist/core/codecs/index.d.ts +4 -0
- package/dist/core/codecs/index.d.ts.map +1 -0
- package/{src/core/codecs/index.ts → dist/core/codecs/index.js} +1 -0
- package/dist/core/codecs/index.js.map +1 -0
- package/dist/core/codecs/ncp-codec.d.ts +39 -0
- package/dist/core/codecs/ncp-codec.d.ts.map +1 -0
- package/dist/core/codecs/ncp-codec.js +93 -0
- package/dist/core/codecs/ncp-codec.js.map +1 -0
- package/dist/core/codecs/tier1-json-codec.d.ts +10 -0
- package/dist/core/codecs/tier1-json-codec.d.ts.map +1 -0
- package/{src/core/codecs/tier1-json-codec.ts → dist/core/codecs/tier1-json-codec.js} +11 -16
- package/dist/core/codecs/tier1-json-codec.js.map +1 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts +10 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts.map +1 -0
- package/{src/core/codecs/tier2-msgpack-codec.ts → dist/core/codecs/tier2-msgpack-codec.js} +10 -14
- package/dist/core/codecs/tier2-msgpack-codec.js.map +1 -0
- package/dist/core/crypto-provider.d.ts +31 -0
- package/dist/core/crypto-provider.d.ts.map +1 -0
- package/dist/core/crypto-provider.js +10 -0
- package/dist/core/crypto-provider.js.map +1 -0
- package/dist/core/exceptions.d.ts +27 -0
- package/dist/core/exceptions.d.ts.map +1 -0
- package/dist/core/exceptions.js +52 -0
- package/dist/core/exceptions.js.map +1 -0
- package/dist/core/frame-header.d.ts +87 -0
- package/dist/core/frame-header.d.ts.map +1 -0
- package/dist/core/frame-header.js +185 -0
- package/dist/core/frame-header.js.map +1 -0
- package/dist/core/frame-registry.d.ts +35 -0
- package/dist/core/frame-registry.d.ts.map +1 -0
- package/dist/core/frame-registry.js +63 -0
- package/dist/core/frame-registry.js.map +1 -0
- package/dist/core/frames.d.ts +81 -0
- package/dist/core/frames.d.ts.map +1 -0
- package/dist/core/frames.js +154 -0
- package/dist/core/frames.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/{src/core/index.ts → dist/core/index.js} +3 -23
- package/dist/core/index.js.map +1 -0
- package/dist/core/registry.d.ts +11 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +17 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/status-codes.d.ts +29 -0
- package/dist/core/status-codes.d.ts.map +1 -0
- package/dist/core/status-codes.js +39 -0
- package/dist/core/status-codes.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.js} +1 -1
- package/dist/index.js.map +1 -0
- package/dist/ncp/frames/anchor-frame.d.ts +29 -0
- package/dist/ncp/frames/anchor-frame.d.ts.map +1 -0
- package/dist/ncp/frames/anchor-frame.js +54 -0
- package/dist/ncp/frames/anchor-frame.js.map +1 -0
- package/dist/ncp/frames/caps-frame.d.ts +29 -0
- package/dist/ncp/frames/caps-frame.d.ts.map +1 -0
- package/dist/ncp/frames/caps-frame.js +29 -0
- package/dist/ncp/frames/caps-frame.js.map +1 -0
- package/dist/ncp/frames/diff-frame.d.ts +32 -0
- package/dist/ncp/frames/diff-frame.d.ts.map +1 -0
- package/dist/ncp/frames/diff-frame.js +37 -0
- package/dist/ncp/frames/diff-frame.js.map +1 -0
- package/dist/ncp/frames/error-frame.d.ts +16 -0
- package/dist/ncp/frames/error-frame.d.ts.map +1 -0
- package/dist/ncp/frames/error-frame.js +13 -0
- package/dist/ncp/frames/error-frame.js.map +1 -0
- package/dist/ncp/frames/hello-frame.d.ts +21 -0
- package/dist/ncp/frames/hello-frame.d.ts.map +1 -0
- package/dist/ncp/frames/hello-frame.js +25 -0
- package/dist/ncp/frames/hello-frame.js.map +1 -0
- package/dist/ncp/frames/stream-frame.d.ts +16 -0
- package/dist/ncp/frames/stream-frame.d.ts.map +1 -0
- package/dist/ncp/frames/stream-frame.js +18 -0
- package/dist/ncp/frames/stream-frame.js.map +1 -0
- package/dist/ncp/frames.d.ts +94 -0
- package/dist/ncp/frames.d.ts.map +1 -0
- package/dist/ncp/frames.js +192 -0
- package/dist/ncp/frames.js.map +1 -0
- package/dist/ncp/handshake.d.ts +30 -0
- package/dist/ncp/handshake.d.ts.map +1 -0
- package/dist/ncp/handshake.js +80 -0
- package/dist/ncp/handshake.js.map +1 -0
- package/dist/ncp/index.d.ts +12 -0
- package/dist/ncp/index.d.ts.map +1 -0
- package/{src/ncp/index.ts → dist/ncp/index.js} +1 -0
- package/dist/ncp/index.js.map +1 -0
- package/dist/ncp/ncp-error-codes.d.ts +23 -0
- package/dist/ncp/ncp-error-codes.d.ts.map +1 -0
- package/dist/ncp/ncp-error-codes.js +34 -0
- package/dist/ncp/ncp-error-codes.js.map +1 -0
- package/dist/ncp/ncp-patch-format.d.ts +7 -0
- package/dist/ncp/ncp-patch-format.d.ts.map +1 -0
- package/dist/ncp/ncp-patch-format.js +13 -0
- package/dist/ncp/ncp-patch-format.js.map +1 -0
- package/dist/ncp/preamble.d.ts +47 -0
- package/dist/ncp/preamble.d.ts.map +1 -0
- package/dist/ncp/preamble.js +74 -0
- package/dist/ncp/preamble.js.map +1 -0
- package/dist/ncp/registry.d.ts +3 -0
- package/dist/ncp/registry.d.ts.map +1 -0
- package/dist/ncp/registry.js +13 -0
- package/dist/ncp/registry.js.map +1 -0
- package/dist/ncp/stream-manager.d.ts +57 -0
- package/dist/ncp/stream-manager.d.ts.map +1 -0
- package/dist/ncp/stream-manager.js +163 -0
- package/dist/ncp/stream-manager.js.map +1 -0
- package/dist/ndp/dns-txt.d.ts +35 -0
- package/dist/ndp/dns-txt.d.ts.map +1 -0
- package/dist/ndp/dns-txt.js +67 -0
- package/dist/ndp/dns-txt.js.map +1 -0
- package/dist/ndp/frames.d.ts +56 -0
- package/dist/ndp/frames.d.ts.map +1 -0
- package/dist/ndp/frames.js +87 -0
- package/dist/ndp/frames.js.map +1 -0
- package/dist/ndp/index.d.ts +6 -0
- package/dist/ndp/index.d.ts.map +1 -0
- package/{src/ndp/index.ts → dist/ndp/index.js} +1 -1
- package/dist/ndp/index.js.map +1 -0
- package/dist/ndp/ndp-registry.d.ts +13 -0
- package/dist/ndp/ndp-registry.d.ts.map +1 -0
- package/dist/ndp/ndp-registry.js +104 -0
- package/dist/ndp/ndp-registry.js.map +1 -0
- package/dist/ndp/registry.d.ts +3 -0
- package/dist/ndp/registry.d.ts.map +1 -0
- package/dist/ndp/registry.js +10 -0
- package/dist/ndp/registry.js.map +1 -0
- package/dist/ndp/validator.d.ts +18 -0
- package/dist/ndp/validator.d.ts.map +1 -0
- package/dist/ndp/validator.js +48 -0
- package/dist/ndp/validator.js.map +1 -0
- package/dist/nip/acme/client.d.ts +31 -0
- package/dist/nip/acme/client.d.ts.map +1 -0
- package/dist/nip/acme/client.js +136 -0
- package/dist/nip/acme/client.js.map +1 -0
- package/dist/nip/acme/index.d.ts +6 -0
- package/dist/nip/acme/index.d.ts.map +1 -0
- package/{src/nip/acme/index.ts → dist/nip/acme/index.js} +1 -1
- package/dist/nip/acme/index.js.map +1 -0
- package/dist/nip/acme/jws.d.ts +31 -0
- package/dist/nip/acme/jws.d.ts.map +1 -0
- package/dist/nip/acme/jws.js +76 -0
- package/dist/nip/acme/jws.js.map +1 -0
- package/dist/nip/acme/messages.d.ts +71 -0
- package/dist/nip/acme/messages.d.ts.map +1 -0
- package/dist/nip/acme/messages.js +4 -0
- package/dist/nip/acme/messages.js.map +1 -0
- package/dist/nip/acme/server.d.ts +41 -0
- package/dist/nip/acme/server.d.ts.map +1 -0
- package/dist/nip/acme/server.js +458 -0
- package/dist/nip/acme/server.js.map +1 -0
- package/dist/nip/acme/wire.d.ts +19 -0
- package/dist/nip/acme/wire.d.ts.map +1 -0
- package/dist/nip/acme/wire.js +21 -0
- package/dist/nip/acme/wire.js.map +1 -0
- package/dist/nip/assurance-level.d.ts +19 -0
- package/dist/nip/assurance-level.d.ts.map +1 -0
- package/dist/nip/assurance-level.js +38 -0
- package/dist/nip/assurance-level.js.map +1 -0
- package/dist/nip/cert-format.d.ts +5 -0
- package/dist/nip/cert-format.d.ts.map +1 -0
- package/dist/nip/cert-format.js +6 -0
- package/dist/nip/cert-format.js.map +1 -0
- package/dist/nip/error-codes.d.ts +25 -0
- package/dist/nip/error-codes.d.ts.map +1 -0
- package/{src/nip/error-codes.ts → dist/nip/error-codes.js} +19 -25
- package/dist/nip/error-codes.js.map +1 -0
- package/dist/nip/frames.d.ts +53 -0
- package/dist/nip/frames.d.ts.map +1 -0
- package/dist/nip/frames.js +106 -0
- package/dist/nip/frames.js.map +1 -0
- package/dist/nip/identity.d.ts +18 -0
- package/dist/nip/identity.d.ts.map +1 -0
- package/dist/nip/identity.js +94 -0
- package/dist/nip/identity.js.map +1 -0
- package/dist/nip/index.d.ts +11 -0
- package/dist/nip/index.d.ts.map +1 -0
- package/{src/nip/index.ts → dist/nip/index.js} +3 -2
- package/dist/nip/index.js.map +1 -0
- package/dist/nip/registry.d.ts +3 -0
- package/dist/nip/registry.d.ts.map +1 -0
- package/dist/nip/registry.js +10 -0
- package/dist/nip/registry.js.map +1 -0
- package/dist/nip/reputation-client.d.ts +116 -0
- package/dist/nip/reputation-client.d.ts.map +1 -0
- package/dist/nip/reputation-client.js +261 -0
- package/dist/nip/reputation-client.js.map +1 -0
- package/dist/nip/verifier.d.ts +23 -0
- package/dist/nip/verifier.d.ts.map +1 -0
- package/dist/nip/verifier.js +90 -0
- package/dist/nip/verifier.js.map +1 -0
- package/dist/nip/x509/builder.d.ts +35 -0
- package/dist/nip/x509/builder.d.ts.map +1 -0
- package/dist/nip/x509/builder.js +59 -0
- package/dist/nip/x509/builder.js.map +1 -0
- package/dist/nip/x509/index.d.ts +4 -0
- package/dist/nip/x509/index.d.ts.map +1 -0
- package/{src/nip/x509/index.ts → dist/nip/x509/index.js} +1 -1
- package/dist/nip/x509/index.js.map +1 -0
- package/dist/nip/x509/oids.d.ts +16 -0
- package/dist/nip/x509/oids.d.ts.map +1 -0
- package/{src/nip/x509/oids.ts → dist/nip/x509/oids.js} +5 -10
- package/dist/nip/x509/oids.js.map +1 -0
- package/dist/nip/x509/verifier.d.ts +26 -0
- package/dist/nip/x509/verifier.d.ts.map +1 -0
- package/dist/nip/x509/verifier.js +171 -0
- package/dist/nip/x509/verifier.js.map +1 -0
- package/dist/nop/client.d.ts +34 -0
- package/dist/nop/client.d.ts.map +1 -0
- package/dist/nop/client.js +90 -0
- package/dist/nop/client.js.map +1 -0
- package/dist/nop/frames.d.ts +65 -0
- package/dist/nop/frames.d.ts.map +1 -0
- package/dist/nop/frames.js +148 -0
- package/dist/nop/frames.js.map +1 -0
- package/dist/nop/index.d.ts +5 -0
- package/dist/nop/index.d.ts.map +1 -0
- package/{src/nop/index.ts → dist/nop/index.js} +1 -1
- package/dist/nop/index.js.map +1 -0
- package/dist/nop/models.d.ts +58 -0
- package/dist/nop/models.d.ts.map +1 -0
- package/dist/nop/models.js +50 -0
- package/dist/nop/models.js.map +1 -0
- package/dist/nop/nop-types.d.ts +136 -0
- package/dist/nop/nop-types.d.ts.map +1 -0
- package/dist/nop/nop-types.js +44 -0
- package/dist/nop/nop-types.js.map +1 -0
- package/dist/nop/registry.d.ts +3 -0
- package/dist/nop/registry.d.ts.map +1 -0
- package/dist/nop/registry.js +11 -0
- package/dist/nop/registry.js.map +1 -0
- package/dist/nwp/anchor-client.d.ts +109 -0
- package/dist/nwp/anchor-client.d.ts.map +1 -0
- package/dist/nwp/anchor-client.js +279 -0
- package/dist/nwp/anchor-client.js.map +1 -0
- package/dist/nwp/client.d.ts +22 -0
- package/dist/nwp/client.d.ts.map +1 -0
- package/dist/nwp/client.js +101 -0
- package/dist/nwp/client.js.map +1 -0
- package/dist/nwp/frames.d.ts +46 -0
- package/dist/nwp/frames.d.ts.map +1 -0
- package/dist/nwp/frames.js +81 -0
- package/dist/nwp/frames.js.map +1 -0
- package/dist/nwp/index.d.ts +5 -0
- package/dist/nwp/index.d.ts.map +1 -0
- package/{src/nwp/index.ts → dist/nwp/index.js} +2 -1
- package/dist/nwp/index.js.map +1 -0
- package/dist/nwp/registry.d.ts +3 -0
- package/dist/nwp/registry.d.ts.map +1 -0
- package/dist/nwp/registry.js +9 -0
- package/dist/nwp/registry.js.map +1 -0
- package/dist/setup.d.ts +10 -0
- package/dist/setup.d.ts.map +1 -0
- package/{src/setup.ts → dist/setup.js} +13 -16
- package/dist/setup.js.map +1 -0
- package/package.json +12 -1
- package/CONTRIBUTING.cn.md +0 -35
- package/CONTRIBUTING.md +0 -35
- package/nip-ca-server/Dockerfile +0 -27
- package/nip-ca-server/README.md +0 -45
- package/nip-ca-server/db/001_init.sql +0 -25
- package/nip-ca-server/docker-compose.yml +0 -29
- package/nip-ca-server/package.json +0 -23
- package/nip-ca-server/src/ca.ts +0 -155
- package/nip-ca-server/src/db.ts +0 -104
- package/nip-ca-server/src/index.ts +0 -157
- package/nip-ca-server/tsconfig.json +0 -13
- package/src/core/anchor-cache.ts +0 -129
- package/src/core/cache.ts +0 -93
- package/src/core/canonical-json.ts +0 -50
- package/src/core/codec.ts +0 -158
- package/src/core/codecs/ncp-codec.ts +0 -170
- package/src/core/crypto-provider.ts +0 -47
- package/src/core/exceptions.ts +0 -57
- package/src/core/frame-header.ts +0 -282
- package/src/core/frame-registry.ts +0 -91
- package/src/core/frames.ts +0 -184
- package/src/core/registry.ts +0 -28
- package/src/core/status-codes.ts +0 -47
- package/src/ncp/frames/anchor-frame.ts +0 -87
- package/src/ncp/frames/caps-frame.ts +0 -59
- package/src/ncp/frames/diff-frame.ts +0 -69
- package/src/ncp/frames/error-frame.ts +0 -26
- package/src/ncp/frames/hello-frame.ts +0 -50
- package/src/ncp/frames/stream-frame.ts +0 -35
- package/src/ncp/frames.ts +0 -251
- package/src/ncp/handshake.ts +0 -95
- package/src/ncp/ncp-error-codes.ts +0 -36
- package/src/ncp/ncp-patch-format.ts +0 -16
- package/src/ncp/preamble.ts +0 -79
- package/src/ncp/registry.ts +0 -15
- package/src/ncp/stream-manager.ts +0 -212
- package/src/ndp/dns-txt.ts +0 -86
- package/src/ndp/frames.ts +0 -124
- package/src/ndp/ndp-registry.ts +0 -116
- package/src/ndp/registry.ts +0 -12
- package/src/ndp/validator.ts +0 -64
- package/src/nip/acme/client.ts +0 -185
- package/src/nip/acme/jws.ts +0 -109
- package/src/nip/acme/messages.ts +0 -85
- package/src/nip/acme/server.ts +0 -480
- package/src/nip/acme/wire.ts +0 -24
- package/src/nip/assurance-level.ts +0 -40
- package/src/nip/cert-format.ts +0 -9
- package/src/nip/frames.ts +0 -138
- package/src/nip/identity.ts +0 -113
- package/src/nip/registry.ts +0 -12
- package/src/nip/verifier.ts +0 -122
- package/src/nip/x509/builder.ts +0 -91
- package/src/nip/x509/verifier.ts +0 -214
- package/src/nop/client.ts +0 -103
- package/src/nop/frames.ts +0 -181
- package/src/nop/models.ts +0 -79
- package/src/nop/nop-types.ts +0 -208
- package/src/nop/registry.ts +0 -13
- package/src/nwp/client.ts +0 -114
- package/src/nwp/frames.ts +0 -116
- package/src/nwp/registry.ts +0 -11
- package/tests/_rfc0002-keys.ts +0 -57
- package/tests/core/anchor-cache.test.ts +0 -242
- package/tests/core/codec.test.ts +0 -205
- package/tests/core/frame-registry.test.ts +0 -46
- package/tests/core.test.ts +0 -327
- package/tests/ncp/diff-binary-bitset.test.ts +0 -107
- package/tests/ncp/e2e-enc-reject.test.ts +0 -93
- package/tests/ncp/err-error-frame.test.ts +0 -152
- package/tests/ncp/frames.test.ts +0 -359
- package/tests/ncp/framing.test.ts +0 -233
- package/tests/ncp/hello-frame.test.ts +0 -122
- package/tests/ncp/inline-anchor.test.ts +0 -88
- package/tests/ncp/preamble.test.ts +0 -93
- package/tests/ncp/security.test.ts +0 -184
- package/tests/ncp/stream-window.test.ts +0 -167
- package/tests/ncp/stream.test.ts +0 -242
- package/tests/ncp/version-negotiation.test.ts +0 -123
- package/tests/ndp.test.ts +0 -377
- package/tests/nip-acme-agent01.test.ts +0 -192
- package/tests/nip-x509.test.ts +0 -280
- package/tests/nip.test.ts +0 -184
- package/tests/nop.test.ts +0 -344
- package/tests/nwp.test.ts +0 -237
- package/tsconfig.json +0 -20
- package/tsup.config.ts +0 -20
- package/vitest.config.ts +0 -10
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Verifies NPS X.509 NID certificate chains per NPS-RFC-0002 §4.
|
|
5
|
+
*
|
|
6
|
+
* Stages (RFC §4.6):
|
|
7
|
+
* 1. Decode chain (base64url DER → @peculiar/x509 X509Certificate).
|
|
8
|
+
* 2. Leaf EKU check — critical, contains agent-identity OR node-identity OID.
|
|
9
|
+
* 3. Subject CN / SAN URI match against asserted NID.
|
|
10
|
+
* 4. Assurance-level extension match against asserted level (if both present).
|
|
11
|
+
* 5. Chain signature verification — leaf → intermediates → trusted root.
|
|
12
|
+
*/
|
|
13
|
+
import * as x509 from "@peculiar/x509";
|
|
14
|
+
import { AssuranceLevel } from "../assurance-level.js";
|
|
15
|
+
import * as ec from "../error-codes.js";
|
|
16
|
+
import { EKU_AGENT_IDENTITY, EKU_NODE_IDENTITY, NID_ASSURANCE_LEVEL, OID_EXTENDED_KEY_USAGE, } from "./oids.js";
|
|
17
|
+
x509.cryptoProvider.set(globalThis.crypto);
|
|
18
|
+
function ok(leaf) {
|
|
19
|
+
return { valid: true, leaf };
|
|
20
|
+
}
|
|
21
|
+
function fail(errorCode, message) {
|
|
22
|
+
return { valid: false, errorCode, message };
|
|
23
|
+
}
|
|
24
|
+
export async function verify(opts) {
|
|
25
|
+
// Stage 1: decode chain ─────────────────────────────────────────────────
|
|
26
|
+
if (!opts.certChainBase64UrlDer.length) {
|
|
27
|
+
return fail(ec.CERT_FORMAT_INVALID, "cert_chain is empty");
|
|
28
|
+
}
|
|
29
|
+
let chain;
|
|
30
|
+
try {
|
|
31
|
+
chain = opts.certChainBase64UrlDer.map((s) => new x509.X509Certificate(b64uDecode(s).buffer));
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
return fail(ec.CERT_FORMAT_INVALID, `DER decode failed: ${e.message}`);
|
|
35
|
+
}
|
|
36
|
+
const leaf = chain[0];
|
|
37
|
+
// Stage 2: EKU check ────────────────────────────────────────────────────
|
|
38
|
+
const ekuResult = checkLeafEku(leaf);
|
|
39
|
+
if (!ekuResult.valid)
|
|
40
|
+
return ekuResult;
|
|
41
|
+
// Stage 3: subject CN / SAN URI match ──────────────────────────────────
|
|
42
|
+
const subjectResult = checkSubjectNid(leaf, opts.assertedNid);
|
|
43
|
+
if (!subjectResult.valid)
|
|
44
|
+
return subjectResult;
|
|
45
|
+
// Stage 4: assurance-level extension ───────────────────────────────────
|
|
46
|
+
const assuranceResult = checkAssuranceLevel(leaf, opts.assertedAssuranceLevel);
|
|
47
|
+
if (!assuranceResult.valid)
|
|
48
|
+
return assuranceResult;
|
|
49
|
+
// Stage 5: chain signature verification ────────────────────────────────
|
|
50
|
+
const chainResult = await checkChainSignature(chain, opts.trustedRootCerts);
|
|
51
|
+
if (!chainResult.valid)
|
|
52
|
+
return chainResult;
|
|
53
|
+
return ok(leaf);
|
|
54
|
+
}
|
|
55
|
+
// ── Stage helpers ──────────────────────────────────────────────────────────
|
|
56
|
+
function checkLeafEku(leaf) {
|
|
57
|
+
const ekuExt = leaf.extensions.find((e) => e.type === OID_EXTENDED_KEY_USAGE);
|
|
58
|
+
if (!ekuExt) {
|
|
59
|
+
return fail(ec.CERT_EKU_MISSING, "leaf has no ExtendedKeyUsage extension");
|
|
60
|
+
}
|
|
61
|
+
if (!ekuExt.critical) {
|
|
62
|
+
return fail(ec.CERT_EKU_MISSING, "ExtendedKeyUsage extension is not marked critical");
|
|
63
|
+
}
|
|
64
|
+
const usages = ekuExt.usages;
|
|
65
|
+
if (!usages.includes(EKU_AGENT_IDENTITY) && !usages.includes(EKU_NODE_IDENTITY)) {
|
|
66
|
+
return fail(ec.CERT_EKU_MISSING, "ExtendedKeyUsage does not contain agent-identity or node-identity OID");
|
|
67
|
+
}
|
|
68
|
+
return ok(leaf);
|
|
69
|
+
}
|
|
70
|
+
function checkSubjectNid(leaf, assertedNid) {
|
|
71
|
+
// @peculiar/x509 parses the subject DN; iterate to find CN.
|
|
72
|
+
const cn = extractCn(leaf.subject);
|
|
73
|
+
if (cn !== assertedNid) {
|
|
74
|
+
return fail(ec.CERT_SUBJECT_NID_MISMATCH, `leaf subject CN (${cn ?? "<missing>"}) does not match asserted NID (${assertedNid})`);
|
|
75
|
+
}
|
|
76
|
+
const sanExt = leaf.getExtension(x509.SubjectAlternativeNameExtension);
|
|
77
|
+
if (!sanExt) {
|
|
78
|
+
return fail(ec.CERT_SUBJECT_NID_MISMATCH, "leaf has no Subject Alternative Name extension");
|
|
79
|
+
}
|
|
80
|
+
// SubjectAlternativeNameExtension exposes general-name objects with `type: "url"` for URIs.
|
|
81
|
+
const uris = sanExt.names
|
|
82
|
+
.toJSON()
|
|
83
|
+
.filter((n) => n.type === "url")
|
|
84
|
+
.map((n) => n.value);
|
|
85
|
+
if (!uris.includes(assertedNid)) {
|
|
86
|
+
return fail(ec.CERT_SUBJECT_NID_MISMATCH, "no SAN URI matches asserted NID");
|
|
87
|
+
}
|
|
88
|
+
return ok(leaf);
|
|
89
|
+
}
|
|
90
|
+
function checkAssuranceLevel(leaf, asserted) {
|
|
91
|
+
if (asserted === null)
|
|
92
|
+
return ok(leaf);
|
|
93
|
+
const ext = leaf.extensions.find((e) => e.type === NID_ASSURANCE_LEVEL);
|
|
94
|
+
if (!ext) {
|
|
95
|
+
// Optional in v0.1 — pass silently.
|
|
96
|
+
return ok(leaf);
|
|
97
|
+
}
|
|
98
|
+
const der = new Uint8Array(ext.value);
|
|
99
|
+
// Decode ASN.1 ENUMERATED: tag=0x0A, len=0x01, content=<rank>.
|
|
100
|
+
if (der.length !== 3 || der[0] !== 0x0A || der[1] !== 0x01) {
|
|
101
|
+
return fail(ec.CERT_FORMAT_INVALID, `malformed assurance-level extension: ${Buffer.from(der).toString("hex")}`);
|
|
102
|
+
}
|
|
103
|
+
const rank = der[2];
|
|
104
|
+
let certLevel;
|
|
105
|
+
try {
|
|
106
|
+
certLevel = AssuranceLevel.fromRank(rank);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return fail(ec.ASSURANCE_UNKNOWN, `assurance-level extension contains unknown value: ${rank}`);
|
|
110
|
+
}
|
|
111
|
+
if (certLevel !== asserted) {
|
|
112
|
+
return fail(ec.ASSURANCE_MISMATCH, `cert assurance-level (${certLevel.wire}) does not match asserted (${asserted.wire})`);
|
|
113
|
+
}
|
|
114
|
+
return ok(leaf);
|
|
115
|
+
}
|
|
116
|
+
async function checkChainSignature(chain, trustedRoots) {
|
|
117
|
+
if (!trustedRoots.length) {
|
|
118
|
+
return fail(ec.CERT_FORMAT_INVALID, "no trusted X.509 roots configured");
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
// Walk leaf → intermediates: each must be signed by its successor.
|
|
122
|
+
for (let i = 0; i < chain.length - 1; i++) {
|
|
123
|
+
const okStep = await chain[i].verify({ publicKey: await chain[i + 1].publicKey.export(), signatureOnly: true });
|
|
124
|
+
if (!okStep) {
|
|
125
|
+
return fail(ec.CERT_FORMAT_INVALID, `chain link ${i} signature did not verify`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// The last cert in the chain MUST chain to a trusted root.
|
|
129
|
+
const last = chain[chain.length - 1];
|
|
130
|
+
for (const root of trustedRoots) {
|
|
131
|
+
if (Buffer.from(last.rawData).equals(Buffer.from(root.rawData))) {
|
|
132
|
+
return ok(chain[0]);
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
const okStep = await last.verify({ publicKey: await root.publicKey.export(), signatureOnly: true });
|
|
136
|
+
if (okStep)
|
|
137
|
+
return ok(chain[0]);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
/* try next root */
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return fail(ec.CERT_FORMAT_INVALID, "chain does not anchor to any trusted root");
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
return fail(ec.CERT_FORMAT_INVALID, `chain signature verification error: ${e.message}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// ── helpers ────────────────────────────────────────────────────────────────
|
|
150
|
+
function extractCn(dn) {
|
|
151
|
+
// @peculiar/x509 returns DN strings in RFC 4514 format ("CN=...,O=...").
|
|
152
|
+
for (const rdn of dn.split(",")) {
|
|
153
|
+
const trimmed = rdn.trim();
|
|
154
|
+
if (trimmed.startsWith("CN=")) {
|
|
155
|
+
let value = trimmed.slice(3);
|
|
156
|
+
// Strip surrounding quotes if any.
|
|
157
|
+
if (value.startsWith("\"") && value.endsWith("\"")) {
|
|
158
|
+
value = value.slice(1, -1);
|
|
159
|
+
}
|
|
160
|
+
// Unescape.
|
|
161
|
+
return value.replace(/\\([",+;<>\\])/g, "$1");
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
function b64uDecode(s) {
|
|
167
|
+
const padded = s + "=".repeat((4 - (s.length % 4)) % 4);
|
|
168
|
+
const std = padded.replace(/-/g, "+").replace(/_/g, "/");
|
|
169
|
+
return new Uint8Array(Buffer.from(std, "base64"));
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../src/nip/x509/verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { EncodingTier } from "../core/frames.js";
|
|
2
|
+
import { FrameRegistry } from "../core/registry.js";
|
|
3
|
+
import { TaskState } from "./models.js";
|
|
4
|
+
import type { TaskFrame } from "./frames.js";
|
|
5
|
+
export declare class NopTaskStatus {
|
|
6
|
+
private readonly _raw;
|
|
7
|
+
constructor(_raw: Record<string, unknown>);
|
|
8
|
+
get taskId(): string;
|
|
9
|
+
get state(): TaskState;
|
|
10
|
+
get isTerminal(): boolean;
|
|
11
|
+
get aggregatedResult(): unknown;
|
|
12
|
+
get errorCode(): string | undefined;
|
|
13
|
+
get errorMessage(): string | undefined;
|
|
14
|
+
get nodeResults(): Record<string, unknown>;
|
|
15
|
+
get raw(): Record<string, unknown>;
|
|
16
|
+
toString(): string;
|
|
17
|
+
}
|
|
18
|
+
export declare class NopClient {
|
|
19
|
+
private readonly _baseUrl;
|
|
20
|
+
private readonly _codec;
|
|
21
|
+
private readonly _tier;
|
|
22
|
+
constructor(baseUrl: string, options?: {
|
|
23
|
+
defaultTier?: EncodingTier;
|
|
24
|
+
registry?: FrameRegistry;
|
|
25
|
+
});
|
|
26
|
+
submit(frame: TaskFrame): Promise<string>;
|
|
27
|
+
getStatus(taskId: string): Promise<NopTaskStatus>;
|
|
28
|
+
cancel(taskId: string): Promise<void>;
|
|
29
|
+
wait(taskId: string, options?: {
|
|
30
|
+
pollIntervalMs?: number;
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
}): Promise<NopTaskStatus>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/nop/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE1D,IAAI,MAAM,IAAc,MAAM,CAAyD;IACvF,IAAI,KAAK,IAAe,SAAS,CAAsD;IACvF,IAAI,UAAU,IAAU,OAAO,CAA6E;IAC5G,IAAI,gBAAgB,IAAI,OAAO,CAAuD;IACtF,IAAI,SAAS,IAAW,MAAM,GAAG,SAAS,CAAwE;IAClH,IAAI,YAAY,IAAQ,MAAM,GAAG,SAAS,CAAwE;IAClH,IAAI,WAAW,IAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAqF;IACpI,IAAI,GAAG,IAAiB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAsB;IAErE,QAAQ,IAAI,MAAM;CAGnB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;gBAGtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,EAAE,aAAa,CAAA;KAAO;IAclE,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAYzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAQjD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrC,IAAI,CACR,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAC5D,OAAO,CAAC,aAAa,CAAC;CAgB1B"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { NpsFrameCodec } from "../core/codec.js";
|
|
4
|
+
import { EncodingTier } from "../core/frames.js";
|
|
5
|
+
import { FrameRegistry } from "../core/registry.js";
|
|
6
|
+
import { registerNcpFrames } from "../ncp/registry.js";
|
|
7
|
+
import { registerNopFrames } from "./registry.js";
|
|
8
|
+
import { TaskState } from "./models.js";
|
|
9
|
+
const TERMINAL_STATES = new Set([
|
|
10
|
+
TaskState.COMPLETED,
|
|
11
|
+
TaskState.FAILED,
|
|
12
|
+
TaskState.CANCELLED,
|
|
13
|
+
]);
|
|
14
|
+
export class NopTaskStatus {
|
|
15
|
+
_raw;
|
|
16
|
+
constructor(_raw) {
|
|
17
|
+
this._raw = _raw;
|
|
18
|
+
}
|
|
19
|
+
get taskId() { return this._raw["task_id"]; }
|
|
20
|
+
get state() { return this._raw["state"]; }
|
|
21
|
+
get isTerminal() { return TERMINAL_STATES.has(this._raw["state"]); }
|
|
22
|
+
get aggregatedResult() { return this._raw["aggregated_result"]; }
|
|
23
|
+
get errorCode() { return this._raw["error_code"] ?? undefined; }
|
|
24
|
+
get errorMessage() { return this._raw["error_message"] ?? undefined; }
|
|
25
|
+
get nodeResults() { return this._raw["node_results"] ?? {}; }
|
|
26
|
+
get raw() { return this._raw; }
|
|
27
|
+
toString() {
|
|
28
|
+
return `NopTaskStatus(taskId=${this.taskId}, state=${String(this._raw["state"])})`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class NopClient {
|
|
32
|
+
_baseUrl;
|
|
33
|
+
_codec;
|
|
34
|
+
_tier;
|
|
35
|
+
constructor(baseUrl, options = {}) {
|
|
36
|
+
this._baseUrl = baseUrl.replace(/\/$/, "");
|
|
37
|
+
this._tier = options.defaultTier ?? EncodingTier.MSGPACK;
|
|
38
|
+
const registry = options.registry ?? (() => {
|
|
39
|
+
const r = new FrameRegistry();
|
|
40
|
+
registerNcpFrames(r);
|
|
41
|
+
registerNopFrames(r);
|
|
42
|
+
return r;
|
|
43
|
+
})();
|
|
44
|
+
this._codec = new NpsFrameCodec(registry);
|
|
45
|
+
}
|
|
46
|
+
async submit(frame) {
|
|
47
|
+
const wire = this._codec.encode(frame, { overrideTier: this._tier });
|
|
48
|
+
const res = await fetch(`${this._baseUrl}/task`, {
|
|
49
|
+
method: "POST",
|
|
50
|
+
body: wire,
|
|
51
|
+
headers: { "Content-Type": "application/x-nps-frame", "Accept": "application/json" },
|
|
52
|
+
});
|
|
53
|
+
if (!res.ok)
|
|
54
|
+
throw new Error(`NOP /task failed: HTTP ${res.status}`);
|
|
55
|
+
const data = await res.json();
|
|
56
|
+
return data["task_id"];
|
|
57
|
+
}
|
|
58
|
+
async getStatus(taskId) {
|
|
59
|
+
const res = await fetch(`${this._baseUrl}/task/${taskId}`, {
|
|
60
|
+
headers: { "Accept": "application/json" },
|
|
61
|
+
});
|
|
62
|
+
if (!res.ok)
|
|
63
|
+
throw new Error(`NOP /task/${taskId} failed: HTTP ${res.status}`);
|
|
64
|
+
return new NopTaskStatus(await res.json());
|
|
65
|
+
}
|
|
66
|
+
async cancel(taskId) {
|
|
67
|
+
const res = await fetch(`${this._baseUrl}/task/${taskId}/cancel`, {
|
|
68
|
+
method: "POST",
|
|
69
|
+
headers: { "Accept": "application/json" },
|
|
70
|
+
});
|
|
71
|
+
if (!res.ok)
|
|
72
|
+
throw new Error(`NOP /task/${taskId}/cancel failed: HTTP ${res.status}`);
|
|
73
|
+
}
|
|
74
|
+
async wait(taskId, options = {}) {
|
|
75
|
+
const pollIntervalMs = options.pollIntervalMs ?? 1000;
|
|
76
|
+
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
77
|
+
const deadline = Date.now() + timeoutMs;
|
|
78
|
+
while (true) {
|
|
79
|
+
const status = await this.getStatus(taskId);
|
|
80
|
+
if (status.isTerminal)
|
|
81
|
+
return status;
|
|
82
|
+
const remaining = deadline - Date.now();
|
|
83
|
+
if (remaining <= 0) {
|
|
84
|
+
throw new Error(`Task '${taskId}' did not complete within ${timeoutMs}ms (state: ${String(status.raw["state"])}).`);
|
|
85
|
+
}
|
|
86
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(pollIntervalMs, remaining)));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/nop/client.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAY;IACzC,SAAS,CAAC,SAAS;IACnB,SAAS,CAAC,MAAM;IAChB,SAAS,CAAC,SAAS;CACpB,CAAC,CAAC;AAEH,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,IAA6B;QAA7B,SAAI,GAAJ,IAAI,CAAyB;IAAG,CAAC;IAE9D,IAAI,MAAM,KAAoC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAY,CAAC,CAAC,CAAC;IACvF,IAAI,KAAK,KAAqC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAc,CAAC,CAAC,CAAC;IACvF,IAAI,UAAU,KAAgC,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAc,CAAC,CAAC,CAAC,CAAC;IAC5G,IAAI,gBAAgB,KAA0B,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACtF,IAAI,SAAS,KAAiC,OAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAsB,IAAI,SAAS,CAAC,CAAC,CAAC;IAClH,IAAI,YAAY,KAA8B,OAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAmB,IAAI,SAAS,CAAC,CAAC,CAAC;IAClH,IAAI,WAAW,KAAmC,OAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAyC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpI,IAAI,GAAG,KAA2C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAErE,QAAQ;QACN,OAAO,wBAAwB,IAAI,CAAC,MAAM,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;IACrF,CAAC;CACF;AAED,MAAM,OAAO,SAAS;IACH,QAAQ,CAAS;IACjB,MAAM,CAAkB;IACxB,KAAK,CAAkB;IAExC,YACE,OAAe,EACf,UAAoE,EAAE;QAEtE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAM,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,OAAO,CAAC;QAE5D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;YACzC,MAAM,CAAC,GAAG,IAAI,aAAa,EAAE,CAAC;YAC9B,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrB,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,EAAE,CAAC;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAgB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,MAAM,GAAG,GAAI,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,OAAO,EAAE;YAChD,MAAM,EAAG,MAAM;YACf,IAAI,EAAK,IAAgB;YACzB,OAAO,EAAE,EAAE,cAAc,EAAE,yBAAyB,EAAE,QAAQ,EAAE,kBAAkB,EAAE;SACrF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;QACzD,OAAO,IAAI,CAAC,SAAS,CAAW,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,SAAS,MAAM,EAAE,EAAE;YACzD,OAAO,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/E,OAAO,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,SAAS,MAAM,SAAS,EAAE;YAChE,MAAM,EAAG,MAAM;YACf,OAAO,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,MAAM,wBAAwB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,IAAI,CACR,MAAc,EACd,UAA2D,EAAE;QAE7D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QACtD,MAAM,SAAS,GAAQ,OAAO,CAAC,SAAS,IAAS,MAAM,CAAC;QACxD,MAAM,QAAQ,GAAS,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE9C,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,UAAU;gBAAE,OAAO,MAAM,CAAC;YAErC,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACxC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,6BAA6B,SAAS,cAAc,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;YACtH,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { EncodingTier, FrameType } from "../core/frames.js";
|
|
2
|
+
import type { NpsFrame } from "../core/codec.js";
|
|
3
|
+
import type { AggregateStrategy, TaskContext, TaskDag, TaskPriority } from "./models.js";
|
|
4
|
+
export declare class TaskFrame implements NpsFrame {
|
|
5
|
+
readonly taskId: string;
|
|
6
|
+
readonly dag: TaskDag;
|
|
7
|
+
readonly timeoutMs?: number | undefined;
|
|
8
|
+
readonly callbackUrl?: string | undefined;
|
|
9
|
+
readonly context?: TaskContext | undefined;
|
|
10
|
+
readonly priority?: TaskPriority | undefined;
|
|
11
|
+
readonly depth?: number | undefined;
|
|
12
|
+
readonly frameType = FrameType.TASK;
|
|
13
|
+
readonly preferredTier = EncodingTier.MSGPACK;
|
|
14
|
+
constructor(taskId: string, dag: TaskDag, timeoutMs?: number | undefined, callbackUrl?: string | undefined, context?: TaskContext | undefined, priority?: TaskPriority | undefined, depth?: number | undefined);
|
|
15
|
+
toDict(): Record<string, unknown>;
|
|
16
|
+
static fromDict(data: Record<string, unknown>): TaskFrame;
|
|
17
|
+
}
|
|
18
|
+
export declare class DelegateFrame implements NpsFrame {
|
|
19
|
+
readonly taskId: string;
|
|
20
|
+
readonly subtaskId: string;
|
|
21
|
+
readonly action: string;
|
|
22
|
+
readonly agentNid: string;
|
|
23
|
+
readonly inputs?: Record<string, unknown> | undefined;
|
|
24
|
+
readonly params?: Record<string, unknown> | undefined;
|
|
25
|
+
readonly idempotencyKey?: string | undefined;
|
|
26
|
+
readonly frameType = FrameType.DELEGATE;
|
|
27
|
+
readonly preferredTier = EncodingTier.MSGPACK;
|
|
28
|
+
constructor(taskId: string, subtaskId: string, action: string, agentNid: string, inputs?: Record<string, unknown> | undefined, params?: Record<string, unknown> | undefined, idempotencyKey?: string | undefined);
|
|
29
|
+
toDict(): Record<string, unknown>;
|
|
30
|
+
static fromDict(data: Record<string, unknown>): DelegateFrame;
|
|
31
|
+
}
|
|
32
|
+
export declare class SyncFrame implements NpsFrame {
|
|
33
|
+
readonly taskId: string;
|
|
34
|
+
readonly syncId: string;
|
|
35
|
+
readonly waitFor: readonly string[];
|
|
36
|
+
readonly minRequired: number;
|
|
37
|
+
readonly aggregate: AggregateStrategy | string;
|
|
38
|
+
readonly timeoutMs?: number | undefined;
|
|
39
|
+
readonly frameType = FrameType.SYNC;
|
|
40
|
+
readonly preferredTier = EncodingTier.MSGPACK;
|
|
41
|
+
constructor(taskId: string, syncId: string, waitFor: readonly string[], minRequired?: number, aggregate?: AggregateStrategy | string, timeoutMs?: number | undefined);
|
|
42
|
+
toDict(): Record<string, unknown>;
|
|
43
|
+
static fromDict(data: Record<string, unknown>): SyncFrame;
|
|
44
|
+
}
|
|
45
|
+
export interface StreamError {
|
|
46
|
+
errorCode: string;
|
|
47
|
+
message?: string;
|
|
48
|
+
}
|
|
49
|
+
export declare class AlignStreamFrame implements NpsFrame {
|
|
50
|
+
readonly streamId: string;
|
|
51
|
+
readonly taskId: string;
|
|
52
|
+
readonly subtaskId: string;
|
|
53
|
+
readonly seq: number;
|
|
54
|
+
readonly isFinal: boolean;
|
|
55
|
+
readonly senderNid: string;
|
|
56
|
+
readonly data?: Record<string, unknown> | undefined;
|
|
57
|
+
readonly error?: StreamError | undefined;
|
|
58
|
+
readonly windowSize?: number | undefined;
|
|
59
|
+
readonly frameType = FrameType.ALIGN_STREAM;
|
|
60
|
+
readonly preferredTier = EncodingTier.MSGPACK;
|
|
61
|
+
constructor(streamId: string, taskId: string, subtaskId: string, seq: number, isFinal: boolean, senderNid: string, data?: Record<string, unknown> | undefined, error?: StreamError | undefined, windowSize?: number | undefined);
|
|
62
|
+
toDict(): Record<string, unknown>;
|
|
63
|
+
static fromDict(data: Record<string, unknown>): AlignStreamFrame;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=frames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../src/nop/frames.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// Copyright 2026 INNO LOTUS PTY LTD
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { EncodingTier, FrameType } from "../core/frames.js";
|
|
4
|
+
// ── TaskFrame ─────────────────────────────────────────────────────────────────
|
|
5
|
+
export class TaskFrame {
|
|
6
|
+
taskId;
|
|
7
|
+
dag;
|
|
8
|
+
timeoutMs;
|
|
9
|
+
callbackUrl;
|
|
10
|
+
context;
|
|
11
|
+
priority;
|
|
12
|
+
depth;
|
|
13
|
+
frameType = FrameType.TASK;
|
|
14
|
+
preferredTier = EncodingTier.MSGPACK;
|
|
15
|
+
constructor(taskId, dag, timeoutMs, callbackUrl, context, priority, depth) {
|
|
16
|
+
this.taskId = taskId;
|
|
17
|
+
this.dag = dag;
|
|
18
|
+
this.timeoutMs = timeoutMs;
|
|
19
|
+
this.callbackUrl = callbackUrl;
|
|
20
|
+
this.context = context;
|
|
21
|
+
this.priority = priority;
|
|
22
|
+
this.depth = depth;
|
|
23
|
+
}
|
|
24
|
+
toDict() {
|
|
25
|
+
return {
|
|
26
|
+
task_id: this.taskId,
|
|
27
|
+
dag: this.dag,
|
|
28
|
+
timeout_ms: this.timeoutMs ?? null,
|
|
29
|
+
callback_url: this.callbackUrl ?? null,
|
|
30
|
+
context: this.context ?? null,
|
|
31
|
+
priority: this.priority ?? null,
|
|
32
|
+
depth: this.depth ?? null,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
static fromDict(data) {
|
|
36
|
+
return new TaskFrame(data["task_id"], data["dag"], data["timeout_ms"] ?? undefined, data["callback_url"] ?? undefined, data["context"] ?? undefined, data["priority"] ?? undefined, data["depth"] ?? undefined);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// ── DelegateFrame ─────────────────────────────────────────────────────────────
|
|
40
|
+
export class DelegateFrame {
|
|
41
|
+
taskId;
|
|
42
|
+
subtaskId;
|
|
43
|
+
action;
|
|
44
|
+
agentNid;
|
|
45
|
+
inputs;
|
|
46
|
+
params;
|
|
47
|
+
idempotencyKey;
|
|
48
|
+
frameType = FrameType.DELEGATE;
|
|
49
|
+
preferredTier = EncodingTier.MSGPACK;
|
|
50
|
+
constructor(taskId, subtaskId, action, agentNid, inputs, params, idempotencyKey) {
|
|
51
|
+
this.taskId = taskId;
|
|
52
|
+
this.subtaskId = subtaskId;
|
|
53
|
+
this.action = action;
|
|
54
|
+
this.agentNid = agentNid;
|
|
55
|
+
this.inputs = inputs;
|
|
56
|
+
this.params = params;
|
|
57
|
+
this.idempotencyKey = idempotencyKey;
|
|
58
|
+
}
|
|
59
|
+
toDict() {
|
|
60
|
+
return {
|
|
61
|
+
task_id: this.taskId,
|
|
62
|
+
subtask_id: this.subtaskId,
|
|
63
|
+
action: this.action,
|
|
64
|
+
agent_nid: this.agentNid,
|
|
65
|
+
inputs: this.inputs ?? null,
|
|
66
|
+
params: this.params ?? null,
|
|
67
|
+
idempotency_key: this.idempotencyKey ?? null,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
static fromDict(data) {
|
|
71
|
+
return new DelegateFrame(data["task_id"], data["subtask_id"], data["action"], data["agent_nid"], data["inputs"] ?? undefined, data["params"] ?? undefined, data["idempotency_key"] ?? undefined);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ── SyncFrame ─────────────────────────────────────────────────────────────────
|
|
75
|
+
export class SyncFrame {
|
|
76
|
+
taskId;
|
|
77
|
+
syncId;
|
|
78
|
+
waitFor;
|
|
79
|
+
minRequired;
|
|
80
|
+
aggregate;
|
|
81
|
+
timeoutMs;
|
|
82
|
+
frameType = FrameType.SYNC;
|
|
83
|
+
preferredTier = EncodingTier.MSGPACK;
|
|
84
|
+
constructor(taskId, syncId, waitFor, minRequired = 0, aggregate = "merge", timeoutMs) {
|
|
85
|
+
this.taskId = taskId;
|
|
86
|
+
this.syncId = syncId;
|
|
87
|
+
this.waitFor = waitFor;
|
|
88
|
+
this.minRequired = minRequired;
|
|
89
|
+
this.aggregate = aggregate;
|
|
90
|
+
this.timeoutMs = timeoutMs;
|
|
91
|
+
}
|
|
92
|
+
toDict() {
|
|
93
|
+
return {
|
|
94
|
+
task_id: this.taskId,
|
|
95
|
+
sync_id: this.syncId,
|
|
96
|
+
wait_for: this.waitFor,
|
|
97
|
+
min_required: this.minRequired,
|
|
98
|
+
aggregate: this.aggregate,
|
|
99
|
+
timeout_ms: this.timeoutMs ?? null,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
static fromDict(data) {
|
|
103
|
+
return new SyncFrame(data["task_id"], data["sync_id"], data["wait_for"], data["min_required"] ?? 0, data["aggregate"] ?? "merge", data["timeout_ms"] ?? undefined);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// ── AlignStreamFrame ──────────────────────────────────────────────────────────
|
|
107
|
+
export class AlignStreamFrame {
|
|
108
|
+
streamId;
|
|
109
|
+
taskId;
|
|
110
|
+
subtaskId;
|
|
111
|
+
seq;
|
|
112
|
+
isFinal;
|
|
113
|
+
senderNid;
|
|
114
|
+
data;
|
|
115
|
+
error;
|
|
116
|
+
windowSize;
|
|
117
|
+
frameType = FrameType.ALIGN_STREAM;
|
|
118
|
+
preferredTier = EncodingTier.MSGPACK;
|
|
119
|
+
constructor(streamId, taskId, subtaskId, seq, isFinal, senderNid, data, error, windowSize) {
|
|
120
|
+
this.streamId = streamId;
|
|
121
|
+
this.taskId = taskId;
|
|
122
|
+
this.subtaskId = subtaskId;
|
|
123
|
+
this.seq = seq;
|
|
124
|
+
this.isFinal = isFinal;
|
|
125
|
+
this.senderNid = senderNid;
|
|
126
|
+
this.data = data;
|
|
127
|
+
this.error = error;
|
|
128
|
+
this.windowSize = windowSize;
|
|
129
|
+
}
|
|
130
|
+
toDict() {
|
|
131
|
+
return {
|
|
132
|
+
stream_id: this.streamId,
|
|
133
|
+
task_id: this.taskId,
|
|
134
|
+
subtask_id: this.subtaskId,
|
|
135
|
+
seq: this.seq,
|
|
136
|
+
is_final: this.isFinal,
|
|
137
|
+
sender_nid: this.senderNid,
|
|
138
|
+
data: this.data ?? null,
|
|
139
|
+
error: this.error ? { error_code: this.error.errorCode, message: this.error.message ?? null } : null,
|
|
140
|
+
window_size: this.windowSize ?? null,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
static fromDict(data) {
|
|
144
|
+
const rawError = data["error"];
|
|
145
|
+
return new AlignStreamFrame(data["stream_id"], data["task_id"], data["subtask_id"], data["seq"], data["is_final"], data["sender_nid"], data["data"] ?? undefined, rawError ? { errorCode: rawError.error_code, ...(rawError.message != null ? { message: rawError.message } : {}) } : undefined, data["window_size"] ?? undefined);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/nop/frames.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nop/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nop/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare enum TaskState {
|
|
2
|
+
PENDING = "pending",
|
|
3
|
+
PREFLIGHT = "preflight",
|
|
4
|
+
RUNNING = "running",
|
|
5
|
+
WAITING_SYNC = "waiting_sync",
|
|
6
|
+
COMPLETED = "completed",
|
|
7
|
+
FAILED = "failed",
|
|
8
|
+
CANCELLED = "cancelled",
|
|
9
|
+
SKIPPED = "skipped"
|
|
10
|
+
}
|
|
11
|
+
export declare enum TaskPriority {
|
|
12
|
+
LOW = "low",
|
|
13
|
+
NORMAL = "normal",
|
|
14
|
+
HIGH = "high"
|
|
15
|
+
}
|
|
16
|
+
export declare enum BackoffStrategy {
|
|
17
|
+
FIXED = "fixed",
|
|
18
|
+
LINEAR = "linear",
|
|
19
|
+
EXPONENTIAL = "exponential"
|
|
20
|
+
}
|
|
21
|
+
export declare enum AggregateStrategy {
|
|
22
|
+
MERGE = "merge",
|
|
23
|
+
FIRST = "first",
|
|
24
|
+
FASTEST_K = "fastest_k",
|
|
25
|
+
ALL = "all"
|
|
26
|
+
}
|
|
27
|
+
export interface RetryPolicy {
|
|
28
|
+
maxRetries: number;
|
|
29
|
+
backoff: BackoffStrategy;
|
|
30
|
+
baseDelayMs?: number;
|
|
31
|
+
maxDelayMs?: number;
|
|
32
|
+
}
|
|
33
|
+
export declare function computeDelayMs(policy: RetryPolicy, attempt: number): number;
|
|
34
|
+
export interface TaskContext {
|
|
35
|
+
sessionKey?: string;
|
|
36
|
+
requesterNid?: string;
|
|
37
|
+
traceId?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface DagNode {
|
|
40
|
+
id: string;
|
|
41
|
+
action: string;
|
|
42
|
+
agent: string;
|
|
43
|
+
inputFrom?: readonly string[];
|
|
44
|
+
inputMapping?: Record<string, string>;
|
|
45
|
+
timeoutMs?: number;
|
|
46
|
+
retryPolicy?: RetryPolicy;
|
|
47
|
+
condition?: string;
|
|
48
|
+
minRequired?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface DagEdge {
|
|
51
|
+
from: string;
|
|
52
|
+
to: string;
|
|
53
|
+
}
|
|
54
|
+
export interface TaskDag {
|
|
55
|
+
nodes: readonly DagNode[];
|
|
56
|
+
edges: readonly DagEdge[];
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/nop/models.ts"],"names":[],"mappings":"AAGA,oBAAY,SAAS;IACnB,OAAO,YAAkB;IACzB,SAAS,cAAkB;IAC3B,OAAO,YAAkB;IACzB,YAAY,iBAAkB;IAC9B,SAAS,cAAkB;IAC3B,MAAM,WAAkB;IACxB,SAAS,cAAkB;IAC3B,OAAO,YAAkB;CAC1B;AAED,oBAAY,YAAY;IACtB,GAAG,QAAW;IACd,MAAM,WAAW;IACjB,IAAI,SAAW;CAChB;AAED,oBAAY,eAAe;IACzB,KAAK,UAAgB;IACrB,MAAM,WAAgB;IACtB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,iBAAiB;IAC3B,KAAK,UAAe;IACpB,KAAK,UAAe;IACpB,SAAS,cAAe;IACxB,GAAG,QAAe;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAI,MAAM,CAAC;IACrB,OAAO,EAAO,eAAe,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAG,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAU3E;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAK,MAAM,CAAC;IACvB,YAAY,CAAC,EAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAQ,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAc,MAAM,CAAC;IACvB,MAAM,EAAU,MAAM,CAAC;IACvB,KAAK,EAAW,MAAM,CAAC;IACvB,SAAS,CAAC,EAAM,SAAS,MAAM,EAAE,CAAC;IAClC,YAAY,CAAC,EAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,SAAS,CAAC,EAAM,MAAM,CAAC;IACvB,WAAW,CAAC,EAAI,WAAW,CAAC;IAC5B,SAAS,CAAC,EAAM,MAAM,CAAC;IACvB,WAAW,CAAC,EAAI,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAI,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;CAC3B"}
|