@labacacia/nps-sdk 1.0.0-alpha.1 → 1.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.cn.md +57 -0
- package/CHANGELOG.md +57 -0
- package/CONTRIBUTING.cn.md +35 -0
- package/CONTRIBUTING.md +2 -0
- package/README.cn.md +155 -0
- package/README.md +5 -3
- package/dist/core/anchor-cache.d.ts +0 -0
- package/dist/core/anchor-cache.d.ts.map +0 -0
- package/dist/core/cache.d.ts +0 -0
- package/dist/core/cache.d.ts.map +0 -0
- package/dist/core/canonical-json.d.ts +0 -0
- package/dist/core/canonical-json.d.ts.map +0 -0
- package/dist/core/codec.d.ts +0 -0
- package/dist/core/codec.d.ts.map +0 -0
- package/dist/core/codecs/index.d.ts +0 -0
- package/dist/core/codecs/index.d.ts.map +0 -0
- package/dist/core/codecs/ncp-codec.d.ts +0 -0
- package/dist/core/codecs/ncp-codec.d.ts.map +0 -0
- package/dist/core/codecs/tier1-json-codec.d.ts +0 -0
- package/dist/core/codecs/tier1-json-codec.d.ts.map +0 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts +0 -0
- package/dist/core/codecs/tier2-msgpack-codec.d.ts.map +0 -0
- package/dist/core/crypto-provider.d.ts +0 -0
- package/dist/core/crypto-provider.d.ts.map +0 -0
- package/dist/core/exceptions.d.ts +0 -0
- package/dist/core/exceptions.d.ts.map +0 -0
- package/dist/core/frame-header.d.ts +0 -0
- package/dist/core/frame-header.d.ts.map +0 -0
- package/dist/core/frame-registry.d.ts +0 -0
- package/dist/core/frame-registry.d.ts.map +0 -0
- package/dist/core/frames.d.ts +1 -0
- package/dist/core/frames.d.ts.map +1 -1
- package/dist/core/index.cjs +90 -9
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +6 -4
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +405 -9
- package/dist/core/index.js.map +1 -1
- package/dist/core/registry.d.ts +0 -0
- package/dist/core/registry.d.ts.map +0 -0
- package/dist/core/status-codes.d.ts +0 -0
- package/dist/core/status-codes.d.ts.map +0 -0
- package/dist/index.cjs +3 -1551
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -9
- package/dist/index.js.map +1 -1
- package/dist/ncp/frames/anchor-frame.d.ts +0 -0
- package/dist/ncp/frames/anchor-frame.d.ts.map +0 -0
- package/dist/ncp/frames/caps-frame.d.ts +0 -0
- package/dist/ncp/frames/caps-frame.d.ts.map +0 -0
- package/dist/ncp/frames/diff-frame.d.ts +0 -0
- package/dist/ncp/frames/diff-frame.d.ts.map +0 -0
- package/dist/ncp/frames/error-frame.d.ts +0 -0
- package/dist/ncp/frames/error-frame.d.ts.map +0 -0
- package/dist/ncp/frames/hello-frame.d.ts +0 -0
- package/dist/ncp/frames/hello-frame.d.ts.map +0 -0
- package/dist/ncp/frames/stream-frame.d.ts +0 -0
- package/dist/ncp/frames/stream-frame.d.ts.map +0 -0
- package/dist/ncp/frames.d.ts +18 -0
- package/dist/ncp/frames.d.ts.map +1 -1
- package/dist/ncp/handshake.d.ts +0 -0
- package/dist/ncp/handshake.d.ts.map +0 -0
- package/dist/ncp/index.cjs +364 -164
- package/dist/ncp/index.cjs.map +1 -1
- package/dist/ncp/index.d.ts +0 -0
- package/dist/ncp/index.d.ts.map +0 -0
- package/dist/ncp/index.js +368 -12
- package/dist/ncp/index.js.map +1 -1
- package/dist/ncp/ncp-error-codes.d.ts +0 -0
- package/dist/ncp/ncp-error-codes.d.ts.map +0 -0
- package/dist/ncp/ncp-patch-format.d.ts +0 -0
- package/dist/ncp/ncp-patch-format.d.ts.map +0 -0
- package/dist/ncp/registry.d.ts +0 -0
- package/dist/ncp/registry.d.ts.map +1 -1
- package/dist/ncp/stream-manager.d.ts +0 -0
- package/dist/ncp/stream-manager.d.ts.map +0 -0
- package/dist/ndp/frames.d.ts +0 -0
- package/dist/ndp/frames.d.ts.map +0 -0
- package/dist/ndp/index.cjs +0 -0
- package/dist/ndp/index.cjs.map +0 -0
- package/dist/ndp/index.d.ts +0 -0
- package/dist/ndp/index.d.ts.map +0 -0
- package/dist/ndp/index.js +223 -6
- package/dist/ndp/index.js.map +1 -1
- package/dist/ndp/ndp-registry.d.ts +0 -0
- package/dist/ndp/ndp-registry.d.ts.map +0 -0
- package/dist/ndp/registry.d.ts +0 -0
- package/dist/ndp/registry.d.ts.map +0 -0
- package/dist/ndp/validator.d.ts +0 -0
- package/dist/ndp/validator.d.ts.map +0 -0
- package/dist/nip/frames.d.ts +0 -0
- package/dist/nip/frames.d.ts.map +0 -0
- package/dist/nip/identity.d.ts +0 -0
- package/dist/nip/identity.d.ts.map +0 -0
- package/dist/nip/index.cjs +0 -0
- package/dist/nip/index.cjs.map +0 -0
- package/dist/nip/index.d.ts +0 -0
- package/dist/nip/index.d.ts.map +0 -0
- package/dist/nip/index.js +187 -5
- package/dist/nip/index.js.map +1 -1
- package/dist/nip/registry.d.ts +0 -0
- package/dist/nip/registry.d.ts.map +0 -0
- package/dist/nop/client.d.ts +0 -0
- package/dist/nop/client.d.ts.map +0 -0
- package/dist/nop/frames.d.ts +0 -0
- package/dist/nop/frames.d.ts.map +0 -0
- package/dist/nop/index.cjs +62 -1
- package/dist/nop/index.cjs.map +1 -1
- package/dist/nop/index.d.ts +0 -0
- package/dist/nop/index.d.ts.map +0 -0
- package/dist/nop/index.js +789 -6
- package/dist/nop/index.js.map +1 -1
- package/dist/nop/models.d.ts +0 -0
- package/dist/nop/models.d.ts.map +0 -0
- package/dist/nop/nop-types.d.ts +0 -0
- package/dist/nop/nop-types.d.ts.map +0 -0
- package/dist/nop/registry.d.ts +0 -0
- package/dist/nop/registry.d.ts.map +0 -0
- package/dist/nwp/client.d.ts +0 -0
- package/dist/nwp/client.d.ts.map +0 -0
- package/dist/nwp/frames.d.ts +0 -0
- package/dist/nwp/frames.d.ts.map +0 -0
- package/dist/nwp/index.cjs +64 -2
- package/dist/nwp/index.cjs.map +1 -1
- package/dist/nwp/index.d.ts +0 -0
- package/dist/nwp/index.d.ts.map +0 -0
- package/dist/nwp/index.js +693 -5
- package/dist/nwp/index.js.map +1 -1
- package/dist/nwp/registry.d.ts +0 -0
- package/dist/nwp/registry.d.ts.map +0 -0
- package/dist/setup.d.ts +0 -0
- package/dist/setup.d.ts.map +0 -0
- package/doc/nps-sdk.core.cn.md +321 -0
- package/doc/nps-sdk.core.md +326 -0
- package/doc/nps-sdk.ncp.cn.md +270 -0
- package/doc/nps-sdk.ncp.md +276 -0
- package/doc/nps-sdk.ndp.cn.md +267 -0
- package/doc/nps-sdk.ndp.md +273 -0
- package/doc/nps-sdk.nip.cn.md +235 -0
- package/doc/nps-sdk.nip.md +242 -0
- package/doc/nps-sdk.nop.cn.md +329 -0
- package/doc/nps-sdk.nop.md +332 -0
- package/doc/nps-sdk.nwp.cn.md +217 -0
- package/doc/nps-sdk.nwp.md +224 -0
- package/doc/overview.cn.md +149 -0
- package/doc/overview.md +153 -0
- package/package.json +21 -4
- package/src/core/frames.ts +1 -0
- package/src/core/index.ts +37 -5
- package/src/index.ts +1 -1
- package/src/ncp/frames.ts +52 -0
- package/src/ncp/registry.ts +2 -1
- package/dist/codec-CmHeovTV.d.cts +0 -120
- package/dist/codec-CmHeovTV.d.ts +0 -120
- package/dist/core/anchor-cache.js +0 -104
- package/dist/core/anchor-cache.js.map +0 -1
- package/dist/core/cache.js +0 -80
- package/dist/core/cache.js.map +0 -1
- package/dist/core/canonical-json.js +0 -44
- package/dist/core/canonical-json.js.map +0 -1
- package/dist/core/codec.js +0 -119
- package/dist/core/codec.js.map +0 -1
- package/dist/core/codecs/index.js +0 -6
- package/dist/core/codecs/index.js.map +0 -1
- package/dist/core/codecs/ncp-codec.js +0 -93
- package/dist/core/codecs/ncp-codec.js.map +0 -1
- package/dist/core/codecs/tier1-json-codec.js +0 -28
- package/dist/core/codecs/tier1-json-codec.js.map +0 -1
- package/dist/core/codecs/tier2-msgpack-codec.js +0 -26
- package/dist/core/codecs/tier2-msgpack-codec.js.map +0 -1
- package/dist/core/crypto-provider.js +0 -10
- package/dist/core/crypto-provider.js.map +0 -1
- package/dist/core/exceptions.js +0 -52
- package/dist/core/exceptions.js.map +0 -1
- package/dist/core/frame-header.js +0 -185
- package/dist/core/frame-header.js.map +0 -1
- package/dist/core/frame-registry.js +0 -63
- package/dist/core/frame-registry.js.map +0 -1
- package/dist/core/frames.js +0 -153
- package/dist/core/frames.js.map +0 -1
- package/dist/core/index.d.cts +0 -41
- package/dist/core/registry.js +0 -17
- package/dist/core/registry.js.map +0 -1
- package/dist/core/status-codes.js +0 -38
- package/dist/core/status-codes.js.map +0 -1
- package/dist/frames-B3qLdl_g.d.cts +0 -77
- package/dist/frames-Ff7-ZPUl.d.ts +0 -77
- package/dist/index.d.cts +0 -21
- package/dist/ncp/frames/anchor-frame.js +0 -54
- package/dist/ncp/frames/anchor-frame.js.map +0 -1
- package/dist/ncp/frames/caps-frame.js +0 -29
- package/dist/ncp/frames/caps-frame.js.map +0 -1
- package/dist/ncp/frames/diff-frame.js +0 -37
- package/dist/ncp/frames/diff-frame.js.map +0 -1
- package/dist/ncp/frames/error-frame.js +0 -13
- package/dist/ncp/frames/error-frame.js.map +0 -1
- package/dist/ncp/frames/hello-frame.js +0 -25
- package/dist/ncp/frames/hello-frame.js.map +0 -1
- package/dist/ncp/frames/stream-frame.js +0 -18
- package/dist/ncp/frames/stream-frame.js.map +0 -1
- package/dist/ncp/frames.js +0 -147
- package/dist/ncp/frames.js.map +0 -1
- package/dist/ncp/handshake.js +0 -80
- package/dist/ncp/handshake.js.map +0 -1
- package/dist/ncp/index.d.cts +0 -6
- package/dist/ncp/ncp-error-codes.js +0 -32
- package/dist/ncp/ncp-error-codes.js.map +0 -1
- package/dist/ncp/ncp-patch-format.js +0 -13
- package/dist/ncp/ncp-patch-format.js.map +0 -1
- package/dist/ncp/registry.js +0 -12
- package/dist/ncp/registry.js.map +0 -1
- package/dist/ncp/stream-manager.js +0 -163
- package/dist/ncp/stream-manager.js.map +0 -1
- package/dist/ndp/frames.js +0 -87
- package/dist/ndp/frames.js.map +0 -1
- package/dist/ndp/index.d.cts +0 -86
- package/dist/ndp/ndp-registry.js +0 -79
- package/dist/ndp/ndp-registry.js.map +0 -1
- package/dist/ndp/registry.js +0 -10
- package/dist/ndp/registry.js.map +0 -1
- package/dist/ndp/validator.js +0 -48
- package/dist/ndp/validator.js.map +0 -1
- package/dist/nip/frames.js +0 -81
- package/dist/nip/frames.js.map +0 -1
- package/dist/nip/identity.js +0 -94
- package/dist/nip/identity.js.map +0 -1
- package/dist/nip/index.d.cts +0 -65
- package/dist/nip/registry.js +0 -10
- package/dist/nip/registry.js.map +0 -1
- package/dist/nop/client.js +0 -90
- package/dist/nop/client.js.map +0 -1
- package/dist/nop/frames.js +0 -148
- package/dist/nop/frames.js.map +0 -1
- package/dist/nop/index.d.cts +0 -155
- package/dist/nop/models.js +0 -50
- package/dist/nop/models.js.map +0 -1
- package/dist/nop/nop-types.js +0 -44
- package/dist/nop/nop-types.js.map +0 -1
- package/dist/nop/registry.js +0 -11
- package/dist/nop/registry.js.map +0 -1
- package/dist/nwp/client.js +0 -101
- package/dist/nwp/client.js.map +0 -1
- package/dist/nwp/frames.js +0 -81
- package/dist/nwp/frames.js.map +0 -1
- package/dist/nwp/index.d.cts +0 -65
- package/dist/nwp/registry.js +0 -9
- package/dist/nwp/registry.js.map +0 -1
- package/dist/setup.js +0 -29
- package/dist/setup.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,1556 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
var ed25519 = require('@noble/ed25519');
|
|
6
|
-
var sha512 = require('@noble/hashes/sha512');
|
|
7
|
-
var fs = require('fs');
|
|
3
|
+
// src/index.ts
|
|
4
|
+
var VERSION = "1.0.0-alpha.3";
|
|
8
5
|
|
|
9
|
-
|
|
10
|
-
if (e && e.__esModule) return e;
|
|
11
|
-
var n = Object.create(null);
|
|
12
|
-
if (e) {
|
|
13
|
-
Object.keys(e).forEach(function (k) {
|
|
14
|
-
if (k !== 'default') {
|
|
15
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
get: function () { return e[k]; }
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
n.default = e;
|
|
24
|
-
return Object.freeze(n);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
var msgpack__namespace = /*#__PURE__*/_interopNamespace(msgpack);
|
|
28
|
-
var ed25519__namespace = /*#__PURE__*/_interopNamespace(ed25519);
|
|
29
|
-
|
|
30
|
-
var __defProp = Object.defineProperty;
|
|
31
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
32
|
-
var __esm = (fn, res) => function __init() {
|
|
33
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
34
|
-
};
|
|
35
|
-
var __export = (target, all) => {
|
|
36
|
-
for (var name in all)
|
|
37
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
// src/core/exceptions.ts
|
|
41
|
-
exports.NpsError = void 0; exports.NpsFrameError = void 0; exports.NpsCodecError = void 0; exports.NpsAnchorNotFoundError = void 0; exports.NpsAnchorPoisonError = void 0;
|
|
42
|
-
var init_exceptions = __esm({
|
|
43
|
-
"src/core/exceptions.ts"() {
|
|
44
|
-
exports.NpsError = class extends Error {
|
|
45
|
-
constructor(message) {
|
|
46
|
-
super(message);
|
|
47
|
-
this.name = new.target.name;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
exports.NpsFrameError = class extends exports.NpsError {
|
|
51
|
-
};
|
|
52
|
-
exports.NpsCodecError = class extends exports.NpsError {
|
|
53
|
-
};
|
|
54
|
-
exports.NpsAnchorNotFoundError = class extends exports.NpsError {
|
|
55
|
-
constructor(anchorId) {
|
|
56
|
-
super(`AnchorFrame not found in cache: ${anchorId}`);
|
|
57
|
-
this.anchorId = anchorId;
|
|
58
|
-
}
|
|
59
|
-
anchorId;
|
|
60
|
-
};
|
|
61
|
-
exports.NpsAnchorPoisonError = class extends exports.NpsError {
|
|
62
|
-
constructor(anchorId) {
|
|
63
|
-
super(
|
|
64
|
-
`Anchor poisoning detected: anchor_id ${anchorId} already exists with a different schema.`
|
|
65
|
-
);
|
|
66
|
-
this.anchorId = anchorId;
|
|
67
|
-
}
|
|
68
|
-
anchorId;
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
// src/core/frames.ts
|
|
74
|
-
exports.FrameType = void 0; exports.EncodingTier = void 0; exports.FrameFlags = void 0; exports.DEFAULT_HEADER_SIZE = void 0; exports.EXTENDED_HEADER_SIZE = void 0; exports.DEFAULT_MAX_PAYLOAD = void 0; exports.EXTENDED_MAX_PAYLOAD = void 0; exports.FrameHeader = void 0;
|
|
75
|
-
var init_frames = __esm({
|
|
76
|
-
"src/core/frames.ts"() {
|
|
77
|
-
init_exceptions();
|
|
78
|
-
exports.FrameType = /* @__PURE__ */ ((FrameType3) => {
|
|
79
|
-
FrameType3[FrameType3["ANCHOR"] = 1] = "ANCHOR";
|
|
80
|
-
FrameType3[FrameType3["DIFF"] = 2] = "DIFF";
|
|
81
|
-
FrameType3[FrameType3["STREAM"] = 3] = "STREAM";
|
|
82
|
-
FrameType3[FrameType3["CAPS"] = 4] = "CAPS";
|
|
83
|
-
FrameType3[FrameType3["ALIGN"] = 5] = "ALIGN";
|
|
84
|
-
FrameType3[FrameType3["QUERY"] = 16] = "QUERY";
|
|
85
|
-
FrameType3[FrameType3["ACTION"] = 17] = "ACTION";
|
|
86
|
-
FrameType3[FrameType3["IDENT"] = 32] = "IDENT";
|
|
87
|
-
FrameType3[FrameType3["TRUST"] = 33] = "TRUST";
|
|
88
|
-
FrameType3[FrameType3["REVOKE"] = 34] = "REVOKE";
|
|
89
|
-
FrameType3[FrameType3["ANNOUNCE"] = 48] = "ANNOUNCE";
|
|
90
|
-
FrameType3[FrameType3["RESOLVE"] = 49] = "RESOLVE";
|
|
91
|
-
FrameType3[FrameType3["GRAPH"] = 50] = "GRAPH";
|
|
92
|
-
FrameType3[FrameType3["TASK"] = 64] = "TASK";
|
|
93
|
-
FrameType3[FrameType3["DELEGATE"] = 65] = "DELEGATE";
|
|
94
|
-
FrameType3[FrameType3["SYNC"] = 66] = "SYNC";
|
|
95
|
-
FrameType3[FrameType3["ALIGN_STREAM"] = 67] = "ALIGN_STREAM";
|
|
96
|
-
FrameType3[FrameType3["ERROR"] = 254] = "ERROR";
|
|
97
|
-
return FrameType3;
|
|
98
|
-
})(exports.FrameType || {});
|
|
99
|
-
exports.EncodingTier = /* @__PURE__ */ ((EncodingTier2) => {
|
|
100
|
-
EncodingTier2[EncodingTier2["JSON"] = 0] = "JSON";
|
|
101
|
-
EncodingTier2[EncodingTier2["MSGPACK"] = 1] = "MSGPACK";
|
|
102
|
-
return EncodingTier2;
|
|
103
|
-
})(exports.EncodingTier || {});
|
|
104
|
-
exports.FrameFlags = {
|
|
105
|
-
NONE: 0,
|
|
106
|
-
TIER1_JSON: 0,
|
|
107
|
-
TIER2_MSGPACK: 1,
|
|
108
|
-
FINAL: 4,
|
|
109
|
-
ENCRYPTED: 8,
|
|
110
|
-
EXT: 128
|
|
111
|
-
};
|
|
112
|
-
exports.DEFAULT_HEADER_SIZE = 4;
|
|
113
|
-
exports.EXTENDED_HEADER_SIZE = 8;
|
|
114
|
-
exports.DEFAULT_MAX_PAYLOAD = 65535;
|
|
115
|
-
exports.EXTENDED_MAX_PAYLOAD = 4294967295;
|
|
116
|
-
exports.FrameHeader = class _FrameHeader {
|
|
117
|
-
constructor(frameType, flags, payloadLength) {
|
|
118
|
-
this.frameType = frameType;
|
|
119
|
-
this.flags = flags;
|
|
120
|
-
this.payloadLength = payloadLength;
|
|
121
|
-
}
|
|
122
|
-
frameType;
|
|
123
|
-
flags;
|
|
124
|
-
payloadLength;
|
|
125
|
-
get isExtended() {
|
|
126
|
-
return (this.flags & exports.FrameFlags.EXT) !== 0;
|
|
127
|
-
}
|
|
128
|
-
get headerSize() {
|
|
129
|
-
return this.isExtended ? exports.EXTENDED_HEADER_SIZE : exports.DEFAULT_HEADER_SIZE;
|
|
130
|
-
}
|
|
131
|
-
get encodingTier() {
|
|
132
|
-
return this.flags & 3;
|
|
133
|
-
}
|
|
134
|
-
get isFinal() {
|
|
135
|
-
return (this.flags & 4) !== 0;
|
|
136
|
-
}
|
|
137
|
-
get isEncrypted() {
|
|
138
|
-
return (this.flags & 8) !== 0;
|
|
139
|
-
}
|
|
140
|
-
// ── Parsing ───────────────────────────────────────────────────────────────
|
|
141
|
-
static parse(buf) {
|
|
142
|
-
if (buf.length < 2) {
|
|
143
|
-
throw new exports.NpsFrameError(
|
|
144
|
-
`Buffer too small to read frame type and flags: need >= 2 bytes, got ${buf.length}.`
|
|
145
|
-
);
|
|
146
|
-
}
|
|
147
|
-
const flags = buf[1];
|
|
148
|
-
const ext = (flags & exports.FrameFlags.EXT) !== 0;
|
|
149
|
-
if (ext) {
|
|
150
|
-
if (buf.length < exports.EXTENDED_HEADER_SIZE) {
|
|
151
|
-
throw new exports.NpsFrameError(
|
|
152
|
-
`Buffer too small for extended frame header: need ${exports.EXTENDED_HEADER_SIZE} bytes, got ${buf.length}.`
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
const view2 = new DataView(buf.buffer, buf.byteOffset);
|
|
156
|
-
const payloadLength2 = view2.getUint32(4, false);
|
|
157
|
-
return new _FrameHeader(buf[0], flags, payloadLength2);
|
|
158
|
-
}
|
|
159
|
-
if (buf.length < exports.DEFAULT_HEADER_SIZE) {
|
|
160
|
-
throw new exports.NpsFrameError(
|
|
161
|
-
`Buffer too small for frame header: need ${exports.DEFAULT_HEADER_SIZE} bytes, got ${buf.length}.`
|
|
162
|
-
);
|
|
163
|
-
}
|
|
164
|
-
const view = new DataView(buf.buffer, buf.byteOffset);
|
|
165
|
-
const payloadLength = view.getUint16(2, false);
|
|
166
|
-
return new _FrameHeader(buf[0], flags, payloadLength);
|
|
167
|
-
}
|
|
168
|
-
// ── Serialisation ─────────────────────────────────────────────────────────
|
|
169
|
-
toBytes() {
|
|
170
|
-
if (this.isExtended) {
|
|
171
|
-
const buf2 = new Uint8Array(exports.EXTENDED_HEADER_SIZE);
|
|
172
|
-
const view2 = new DataView(buf2.buffer);
|
|
173
|
-
view2.setUint8(0, this.frameType);
|
|
174
|
-
view2.setUint8(1, this.flags);
|
|
175
|
-
view2.setUint16(2, 0, false);
|
|
176
|
-
view2.setUint32(4, this.payloadLength, false);
|
|
177
|
-
return buf2;
|
|
178
|
-
}
|
|
179
|
-
const buf = new Uint8Array(exports.DEFAULT_HEADER_SIZE);
|
|
180
|
-
const view = new DataView(buf.buffer);
|
|
181
|
-
view.setUint8(0, this.frameType);
|
|
182
|
-
view.setUint8(1, this.flags);
|
|
183
|
-
view.setUint16(2, this.payloadLength, false);
|
|
184
|
-
return buf;
|
|
185
|
-
}
|
|
186
|
-
toString() {
|
|
187
|
-
return `FrameHeader(frameType=0x${this.frameType.toString(16).padStart(2, "0")}, flags=0x${this.flags.toString(16).padStart(2, "0")}, payloadLength=${this.payloadLength})`;
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
// src/ncp/frames.ts
|
|
194
|
-
var frames_exports = {};
|
|
195
|
-
__export(frames_exports, {
|
|
196
|
-
AnchorFrame: () => exports.AnchorFrame,
|
|
197
|
-
CapsFrame: () => exports.CapsFrame,
|
|
198
|
-
DiffFrame: () => exports.DiffFrame,
|
|
199
|
-
ErrorFrame: () => exports.ErrorFrame,
|
|
200
|
-
StreamFrame: () => exports.StreamFrame
|
|
201
|
-
});
|
|
202
|
-
exports.AnchorFrame = void 0; exports.DiffFrame = void 0; exports.StreamFrame = void 0; exports.CapsFrame = void 0; exports.ErrorFrame = void 0;
|
|
203
|
-
var init_frames2 = __esm({
|
|
204
|
-
"src/ncp/frames.ts"() {
|
|
205
|
-
init_frames();
|
|
206
|
-
exports.AnchorFrame = class _AnchorFrame {
|
|
207
|
-
constructor(anchorId, schema, ttl = 3600) {
|
|
208
|
-
this.anchorId = anchorId;
|
|
209
|
-
this.schema = schema;
|
|
210
|
-
this.ttl = ttl;
|
|
211
|
-
}
|
|
212
|
-
anchorId;
|
|
213
|
-
schema;
|
|
214
|
-
ttl;
|
|
215
|
-
frameType = 1 /* ANCHOR */;
|
|
216
|
-
preferredTier = 1 /* MSGPACK */;
|
|
217
|
-
toDict() {
|
|
218
|
-
return {
|
|
219
|
-
anchor_id: this.anchorId,
|
|
220
|
-
schema: { fields: this.schema.fields.map((f) => ({ ...f })) },
|
|
221
|
-
ttl: this.ttl
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
static fromDict(data) {
|
|
225
|
-
const schemaRaw = data["schema"];
|
|
226
|
-
return new _AnchorFrame(
|
|
227
|
-
data["anchor_id"],
|
|
228
|
-
{ fields: schemaRaw.fields },
|
|
229
|
-
data["ttl"] ?? 3600
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
exports.DiffFrame = class _DiffFrame {
|
|
234
|
-
constructor(anchorRef, baseSeq, patch, entityId) {
|
|
235
|
-
this.anchorRef = anchorRef;
|
|
236
|
-
this.baseSeq = baseSeq;
|
|
237
|
-
this.patch = patch;
|
|
238
|
-
this.entityId = entityId;
|
|
239
|
-
}
|
|
240
|
-
anchorRef;
|
|
241
|
-
baseSeq;
|
|
242
|
-
patch;
|
|
243
|
-
entityId;
|
|
244
|
-
frameType = 2 /* DIFF */;
|
|
245
|
-
preferredTier = 1 /* MSGPACK */;
|
|
246
|
-
toDict() {
|
|
247
|
-
return {
|
|
248
|
-
anchor_ref: this.anchorRef,
|
|
249
|
-
base_seq: this.baseSeq,
|
|
250
|
-
patch: this.patch.map((p) => ({ ...p })),
|
|
251
|
-
entity_id: this.entityId ?? null
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
static fromDict(data) {
|
|
255
|
-
return new _DiffFrame(
|
|
256
|
-
data["anchor_ref"],
|
|
257
|
-
data["base_seq"],
|
|
258
|
-
data["patch"],
|
|
259
|
-
data["entity_id"] ?? void 0
|
|
260
|
-
);
|
|
261
|
-
}
|
|
262
|
-
};
|
|
263
|
-
exports.StreamFrame = class _StreamFrame {
|
|
264
|
-
constructor(streamId, seq, isLast, data, anchorRef, windowSize) {
|
|
265
|
-
this.streamId = streamId;
|
|
266
|
-
this.seq = seq;
|
|
267
|
-
this.isLast = isLast;
|
|
268
|
-
this.data = data;
|
|
269
|
-
this.anchorRef = anchorRef;
|
|
270
|
-
this.windowSize = windowSize;
|
|
271
|
-
}
|
|
272
|
-
streamId;
|
|
273
|
-
seq;
|
|
274
|
-
isLast;
|
|
275
|
-
data;
|
|
276
|
-
anchorRef;
|
|
277
|
-
windowSize;
|
|
278
|
-
frameType = 3 /* STREAM */;
|
|
279
|
-
preferredTier = 1 /* MSGPACK */;
|
|
280
|
-
toDict() {
|
|
281
|
-
return {
|
|
282
|
-
stream_id: this.streamId,
|
|
283
|
-
seq: this.seq,
|
|
284
|
-
is_last: this.isLast,
|
|
285
|
-
data: this.data,
|
|
286
|
-
anchor_ref: this.anchorRef ?? null,
|
|
287
|
-
window_size: this.windowSize ?? null
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
static fromDict(data) {
|
|
291
|
-
return new _StreamFrame(
|
|
292
|
-
data["stream_id"],
|
|
293
|
-
data["seq"],
|
|
294
|
-
data["is_last"],
|
|
295
|
-
data["data"],
|
|
296
|
-
data["anchor_ref"] ?? void 0,
|
|
297
|
-
data["window_size"] ?? void 0
|
|
298
|
-
);
|
|
299
|
-
}
|
|
300
|
-
};
|
|
301
|
-
exports.CapsFrame = class _CapsFrame {
|
|
302
|
-
constructor(anchorRef, count, data, nextCursor, tokenEst, cached, tokenizerUsed) {
|
|
303
|
-
this.anchorRef = anchorRef;
|
|
304
|
-
this.count = count;
|
|
305
|
-
this.data = data;
|
|
306
|
-
this.nextCursor = nextCursor;
|
|
307
|
-
this.tokenEst = tokenEst;
|
|
308
|
-
this.cached = cached;
|
|
309
|
-
this.tokenizerUsed = tokenizerUsed;
|
|
310
|
-
}
|
|
311
|
-
anchorRef;
|
|
312
|
-
count;
|
|
313
|
-
data;
|
|
314
|
-
nextCursor;
|
|
315
|
-
tokenEst;
|
|
316
|
-
cached;
|
|
317
|
-
tokenizerUsed;
|
|
318
|
-
frameType = 4 /* CAPS */;
|
|
319
|
-
preferredTier = 1 /* MSGPACK */;
|
|
320
|
-
toDict() {
|
|
321
|
-
return {
|
|
322
|
-
anchor_ref: this.anchorRef,
|
|
323
|
-
count: this.count,
|
|
324
|
-
data: this.data,
|
|
325
|
-
next_cursor: this.nextCursor ?? null,
|
|
326
|
-
token_est: this.tokenEst ?? null,
|
|
327
|
-
cached: this.cached ?? null,
|
|
328
|
-
tokenizer_used: this.tokenizerUsed ?? null
|
|
329
|
-
};
|
|
330
|
-
}
|
|
331
|
-
static fromDict(data) {
|
|
332
|
-
return new _CapsFrame(
|
|
333
|
-
data["anchor_ref"],
|
|
334
|
-
data["count"],
|
|
335
|
-
data["data"],
|
|
336
|
-
data["next_cursor"] ?? void 0,
|
|
337
|
-
data["token_est"] ?? void 0,
|
|
338
|
-
data["cached"] ?? void 0,
|
|
339
|
-
data["tokenizer_used"] ?? void 0
|
|
340
|
-
);
|
|
341
|
-
}
|
|
342
|
-
};
|
|
343
|
-
exports.ErrorFrame = class _ErrorFrame {
|
|
344
|
-
constructor(status, error, message, details) {
|
|
345
|
-
this.status = status;
|
|
346
|
-
this.error = error;
|
|
347
|
-
this.message = message;
|
|
348
|
-
this.details = details;
|
|
349
|
-
}
|
|
350
|
-
status;
|
|
351
|
-
error;
|
|
352
|
-
message;
|
|
353
|
-
details;
|
|
354
|
-
frameType = 254 /* ERROR */;
|
|
355
|
-
preferredTier = 1 /* MSGPACK */;
|
|
356
|
-
toDict() {
|
|
357
|
-
return {
|
|
358
|
-
status: this.status,
|
|
359
|
-
error: this.error,
|
|
360
|
-
message: this.message ?? null,
|
|
361
|
-
details: this.details ?? null
|
|
362
|
-
};
|
|
363
|
-
}
|
|
364
|
-
static fromDict(data) {
|
|
365
|
-
return new _ErrorFrame(
|
|
366
|
-
data["status"],
|
|
367
|
-
data["error"],
|
|
368
|
-
data["message"] ?? void 0,
|
|
369
|
-
data["details"] ?? void 0
|
|
370
|
-
);
|
|
371
|
-
}
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
// src/core/index.ts
|
|
377
|
-
init_exceptions();
|
|
378
|
-
init_frames();
|
|
379
|
-
|
|
380
|
-
// src/core/codec.ts
|
|
381
|
-
init_exceptions();
|
|
382
|
-
init_frames();
|
|
383
|
-
var Tier1JsonCodec = class {
|
|
384
|
-
encode(frame) {
|
|
385
|
-
try {
|
|
386
|
-
const json = JSON.stringify(frame.toDict());
|
|
387
|
-
return new TextEncoder().encode(json);
|
|
388
|
-
} catch (err) {
|
|
389
|
-
throw new exports.NpsCodecError(
|
|
390
|
-
`Tier-1 JSON encode failed for 0x${frame.frameType.toString(16).padStart(2, "0")}: ${String(err)}`
|
|
391
|
-
);
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
decode(frameType, payload, registry) {
|
|
395
|
-
const cls = registry.resolve(frameType);
|
|
396
|
-
try {
|
|
397
|
-
const text = new TextDecoder().decode(payload);
|
|
398
|
-
const data = JSON.parse(text);
|
|
399
|
-
return cls.fromDict(data);
|
|
400
|
-
} catch (err) {
|
|
401
|
-
throw new exports.NpsCodecError(
|
|
402
|
-
`Tier-1 JSON decode failed for 0x${frameType.toString(16).padStart(2, "0")}: ${String(err)}`
|
|
403
|
-
);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
};
|
|
407
|
-
var Tier2MsgPackCodec = class {
|
|
408
|
-
encode(frame) {
|
|
409
|
-
try {
|
|
410
|
-
return msgpack__namespace.encode(frame.toDict());
|
|
411
|
-
} catch (err) {
|
|
412
|
-
throw new exports.NpsCodecError(
|
|
413
|
-
`Tier-2 MsgPack encode failed for 0x${frame.frameType.toString(16).padStart(2, "0")}: ${String(err)}`
|
|
414
|
-
);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
decode(frameType, payload, registry) {
|
|
418
|
-
const cls = registry.resolve(frameType);
|
|
419
|
-
try {
|
|
420
|
-
const data = msgpack__namespace.decode(payload);
|
|
421
|
-
return cls.fromDict(data);
|
|
422
|
-
} catch (err) {
|
|
423
|
-
throw new exports.NpsCodecError(
|
|
424
|
-
`Tier-2 MsgPack decode failed for 0x${frameType.toString(16).padStart(2, "0")}: ${String(err)}`
|
|
425
|
-
);
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
};
|
|
429
|
-
var NpsFrameCodec = class {
|
|
430
|
-
_registry;
|
|
431
|
-
_maxPayload;
|
|
432
|
-
_json = new Tier1JsonCodec();
|
|
433
|
-
_msgpack = new Tier2MsgPackCodec();
|
|
434
|
-
constructor(registry, options = {}) {
|
|
435
|
-
this._registry = registry;
|
|
436
|
-
this._maxPayload = options.maxPayload ?? exports.DEFAULT_MAX_PAYLOAD;
|
|
437
|
-
}
|
|
438
|
-
// ── Encode ────────────────────────────────────────────────────────────────
|
|
439
|
-
encode(frame, options = {}) {
|
|
440
|
-
const tier = options.overrideTier ?? frame.preferredTier;
|
|
441
|
-
const tierCodec = this._selectCodec(tier);
|
|
442
|
-
let payload;
|
|
443
|
-
try {
|
|
444
|
-
payload = tierCodec.encode(frame);
|
|
445
|
-
} catch (err) {
|
|
446
|
-
if (err instanceof exports.NpsCodecError) throw err;
|
|
447
|
-
throw new exports.NpsCodecError(`Encode failed for 0x${frame.frameType.toString(16)}.`);
|
|
448
|
-
}
|
|
449
|
-
if (payload.length > this._maxPayload) {
|
|
450
|
-
throw new exports.NpsCodecError(
|
|
451
|
-
`Encoded payload for 0x${frame.frameType.toString(16).padStart(2, "0")} exceeds max_frame_payload (${payload.length} bytes > ${this._maxPayload}). Use StreamFrame (0x03) for large payloads.`
|
|
452
|
-
);
|
|
453
|
-
}
|
|
454
|
-
const useExt = payload.length > exports.DEFAULT_MAX_PAYLOAD;
|
|
455
|
-
let flags = this._buildFlags(frame, tier);
|
|
456
|
-
if (useExt) flags |= exports.FrameFlags.EXT;
|
|
457
|
-
const header = new exports.FrameHeader(frame.frameType, flags, payload.length);
|
|
458
|
-
const headerBytes = header.toBytes();
|
|
459
|
-
const wire = new Uint8Array(headerBytes.length + payload.length);
|
|
460
|
-
wire.set(headerBytes, 0);
|
|
461
|
-
wire.set(payload, headerBytes.length);
|
|
462
|
-
return wire;
|
|
463
|
-
}
|
|
464
|
-
// ── Decode ────────────────────────────────────────────────────────────────
|
|
465
|
-
decode(wire) {
|
|
466
|
-
const header = exports.FrameHeader.parse(wire);
|
|
467
|
-
const payload = wire.slice(header.headerSize, header.headerSize + header.payloadLength);
|
|
468
|
-
const codec = this._selectCodec(header.encodingTier);
|
|
469
|
-
return codec.decode(header.frameType, payload, this._registry);
|
|
470
|
-
}
|
|
471
|
-
static peekHeader(wire) {
|
|
472
|
-
return exports.FrameHeader.parse(wire);
|
|
473
|
-
}
|
|
474
|
-
// ── Private ───────────────────────────────────────────────────────────────
|
|
475
|
-
_buildFlags(frame, tier) {
|
|
476
|
-
let flags = tier === 0 /* JSON */ ? exports.FrameFlags.TIER1_JSON : exports.FrameFlags.TIER2_MSGPACK;
|
|
477
|
-
const isStreamFrame = "isLast" in frame;
|
|
478
|
-
const isFinal = !isStreamFrame || frame.isLast;
|
|
479
|
-
if (isFinal) flags |= exports.FrameFlags.FINAL;
|
|
480
|
-
return flags;
|
|
481
|
-
}
|
|
482
|
-
_selectCodec(tier) {
|
|
483
|
-
if (tier === 0 /* JSON */) return this._json;
|
|
484
|
-
if (tier === 1 /* MSGPACK */) return this._msgpack;
|
|
485
|
-
throw new exports.NpsCodecError(`Unsupported encoding tier: 0x${tier.toString(16).padStart(2, "0")}.`);
|
|
486
|
-
}
|
|
487
|
-
};
|
|
488
|
-
|
|
489
|
-
// src/core/registry.ts
|
|
490
|
-
init_exceptions();
|
|
491
|
-
var FrameRegistry = class {
|
|
492
|
-
_map = /* @__PURE__ */ new Map();
|
|
493
|
-
register(frameType, cls) {
|
|
494
|
-
this._map.set(frameType, cls);
|
|
495
|
-
}
|
|
496
|
-
resolve(frameType) {
|
|
497
|
-
const cls = this._map.get(frameType);
|
|
498
|
-
if (cls === void 0) {
|
|
499
|
-
throw new exports.NpsFrameError(
|
|
500
|
-
`No frame class registered for type 0x${frameType.toString(16).padStart(2, "0")}.`
|
|
501
|
-
);
|
|
502
|
-
}
|
|
503
|
-
return cls;
|
|
504
|
-
}
|
|
505
|
-
};
|
|
506
|
-
|
|
507
|
-
// src/core/cache.ts
|
|
508
|
-
init_exceptions();
|
|
509
|
-
var AnchorFrameCache = class _AnchorFrameCache {
|
|
510
|
-
_store = /* @__PURE__ */ new Map();
|
|
511
|
-
// Allow clock injection for testing
|
|
512
|
-
clock = () => Date.now();
|
|
513
|
-
// ── Public API ────────────────────────────────────────────────────────────
|
|
514
|
-
set(frame) {
|
|
515
|
-
const anchorId = frame.anchorId.startsWith("sha256:") ? frame.anchorId : _AnchorFrameCache.computeAnchorId(frame.schema);
|
|
516
|
-
const existing = this._store.get(anchorId);
|
|
517
|
-
if (existing !== void 0 && this.clock() < existing.expiresAt) {
|
|
518
|
-
if (!_AnchorFrameCache._schemasEqual(existing.frame.schema, frame.schema)) {
|
|
519
|
-
throw new exports.NpsAnchorPoisonError(anchorId);
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
const ttlMs = (frame.ttl ?? 3600) * 1e3;
|
|
523
|
-
const expiresAt = this.clock() + ttlMs;
|
|
524
|
-
this._store.set(anchorId, { frame, expiresAt });
|
|
525
|
-
return anchorId;
|
|
526
|
-
}
|
|
527
|
-
get(anchorId) {
|
|
528
|
-
const entry = this._store.get(anchorId);
|
|
529
|
-
if (entry === void 0) return void 0;
|
|
530
|
-
if (this.clock() > entry.expiresAt) {
|
|
531
|
-
this._store.delete(anchorId);
|
|
532
|
-
return void 0;
|
|
533
|
-
}
|
|
534
|
-
return entry.frame;
|
|
535
|
-
}
|
|
536
|
-
getRequired(anchorId) {
|
|
537
|
-
const frame = this.get(anchorId);
|
|
538
|
-
if (frame === void 0) throw new exports.NpsAnchorNotFoundError(anchorId);
|
|
539
|
-
return frame;
|
|
540
|
-
}
|
|
541
|
-
invalidate(anchorId) {
|
|
542
|
-
this._store.delete(anchorId);
|
|
543
|
-
}
|
|
544
|
-
get size() {
|
|
545
|
-
this._evictExpired();
|
|
546
|
-
return this._store.size;
|
|
547
|
-
}
|
|
548
|
-
// ── Static helpers ────────────────────────────────────────────────────────
|
|
549
|
-
static computeAnchorId(schema) {
|
|
550
|
-
const sorted = [...schema.fields].map((f) => {
|
|
551
|
-
const obj = { name: f.name, type: f.type };
|
|
552
|
-
if (f.semantic !== void 0) obj["semantic"] = f.semantic;
|
|
553
|
-
if (f.nullable !== void 0) obj["nullable"] = f.nullable;
|
|
554
|
-
return obj;
|
|
555
|
-
}).sort((a, b) => String(a["name"]).localeCompare(String(b["name"])));
|
|
556
|
-
const canonical = JSON.stringify(sorted);
|
|
557
|
-
const digest = crypto.createHash("sha256").update(canonical, "utf8").digest("hex");
|
|
558
|
-
return `sha256:${digest}`;
|
|
559
|
-
}
|
|
560
|
-
// ── Private ───────────────────────────────────────────────────────────────
|
|
561
|
-
_evictExpired() {
|
|
562
|
-
const now = this.clock();
|
|
563
|
-
for (const [k, entry] of this._store) {
|
|
564
|
-
if (now > entry.expiresAt) this._store.delete(k);
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
static _schemasEqual(a, b) {
|
|
568
|
-
return _AnchorFrameCache.computeAnchorId(a) === _AnchorFrameCache.computeAnchorId(b);
|
|
569
|
-
}
|
|
570
|
-
};
|
|
571
|
-
|
|
572
|
-
// src/ncp/index.ts
|
|
573
|
-
init_frames2();
|
|
574
|
-
|
|
575
|
-
// src/ncp/registry.ts
|
|
576
|
-
init_frames();
|
|
577
|
-
init_frames2();
|
|
578
|
-
function registerNcpFrames(registry) {
|
|
579
|
-
registry.register(1 /* ANCHOR */, exports.AnchorFrame);
|
|
580
|
-
registry.register(2 /* DIFF */, exports.DiffFrame);
|
|
581
|
-
registry.register(3 /* STREAM */, exports.StreamFrame);
|
|
582
|
-
registry.register(4 /* CAPS */, exports.CapsFrame);
|
|
583
|
-
registry.register(254 /* ERROR */, exports.ErrorFrame);
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
// src/nwp/frames.ts
|
|
587
|
-
init_frames();
|
|
588
|
-
var QueryFrame = class _QueryFrame {
|
|
589
|
-
constructor(anchorRef, filter, limit, offset, orderBy, fields, vectorSearch, depth) {
|
|
590
|
-
this.anchorRef = anchorRef;
|
|
591
|
-
this.filter = filter;
|
|
592
|
-
this.limit = limit;
|
|
593
|
-
this.offset = offset;
|
|
594
|
-
this.orderBy = orderBy;
|
|
595
|
-
this.fields = fields;
|
|
596
|
-
this.vectorSearch = vectorSearch;
|
|
597
|
-
this.depth = depth;
|
|
598
|
-
}
|
|
599
|
-
anchorRef;
|
|
600
|
-
filter;
|
|
601
|
-
limit;
|
|
602
|
-
offset;
|
|
603
|
-
orderBy;
|
|
604
|
-
fields;
|
|
605
|
-
vectorSearch;
|
|
606
|
-
depth;
|
|
607
|
-
frameType = 16 /* QUERY */;
|
|
608
|
-
preferredTier = 1 /* MSGPACK */;
|
|
609
|
-
toDict() {
|
|
610
|
-
return {
|
|
611
|
-
anchor_ref: this.anchorRef ?? null,
|
|
612
|
-
filter: this.filter ?? null,
|
|
613
|
-
limit: this.limit ?? null,
|
|
614
|
-
offset: this.offset ?? null,
|
|
615
|
-
order_by: this.orderBy ?? null,
|
|
616
|
-
fields: this.fields ?? null,
|
|
617
|
-
vector_search: this.vectorSearch ?? null,
|
|
618
|
-
depth: this.depth ?? null
|
|
619
|
-
};
|
|
620
|
-
}
|
|
621
|
-
static fromDict(data) {
|
|
622
|
-
return new _QueryFrame(
|
|
623
|
-
data["anchor_ref"] ?? void 0,
|
|
624
|
-
data["filter"] ?? void 0,
|
|
625
|
-
data["limit"] ?? void 0,
|
|
626
|
-
data["offset"] ?? void 0,
|
|
627
|
-
data["order_by"] ?? void 0,
|
|
628
|
-
data["fields"] ?? void 0,
|
|
629
|
-
data["vector_search"] ?? void 0,
|
|
630
|
-
data["depth"] ?? void 0
|
|
631
|
-
);
|
|
632
|
-
}
|
|
633
|
-
};
|
|
634
|
-
var ActionFrame = class _ActionFrame {
|
|
635
|
-
constructor(actionId, params, async_, idempotencyKey, timeoutMs) {
|
|
636
|
-
this.actionId = actionId;
|
|
637
|
-
this.params = params;
|
|
638
|
-
this.async_ = async_;
|
|
639
|
-
this.idempotencyKey = idempotencyKey;
|
|
640
|
-
this.timeoutMs = timeoutMs;
|
|
641
|
-
}
|
|
642
|
-
actionId;
|
|
643
|
-
params;
|
|
644
|
-
async_;
|
|
645
|
-
idempotencyKey;
|
|
646
|
-
timeoutMs;
|
|
647
|
-
frameType = 17 /* ACTION */;
|
|
648
|
-
preferredTier = 1 /* MSGPACK */;
|
|
649
|
-
toDict() {
|
|
650
|
-
return {
|
|
651
|
-
action_id: this.actionId,
|
|
652
|
-
params: this.params ?? null,
|
|
653
|
-
async: this.async_ ?? false,
|
|
654
|
-
idempotency_key: this.idempotencyKey ?? null,
|
|
655
|
-
timeout_ms: this.timeoutMs ?? null
|
|
656
|
-
};
|
|
657
|
-
}
|
|
658
|
-
static fromDict(data) {
|
|
659
|
-
return new _ActionFrame(
|
|
660
|
-
data["action_id"],
|
|
661
|
-
data["params"] ?? void 0,
|
|
662
|
-
data["async"] ?? void 0,
|
|
663
|
-
data["idempotency_key"] ?? void 0,
|
|
664
|
-
data["timeout_ms"] ?? void 0
|
|
665
|
-
);
|
|
666
|
-
}
|
|
667
|
-
};
|
|
668
|
-
function asyncActionResponseFromDict(data) {
|
|
669
|
-
const r = {
|
|
670
|
-
taskId: data["task_id"],
|
|
671
|
-
status: data["status"]
|
|
672
|
-
};
|
|
673
|
-
const pollUrl = data["poll_url"];
|
|
674
|
-
if (pollUrl != null) r.pollUrl = pollUrl;
|
|
675
|
-
return r;
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
// src/nwp/registry.ts
|
|
679
|
-
init_frames();
|
|
680
|
-
function registerNwpFrames(registry) {
|
|
681
|
-
registry.register(16 /* QUERY */, QueryFrame);
|
|
682
|
-
registry.register(17 /* ACTION */, ActionFrame);
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
// src/nwp/client.ts
|
|
686
|
-
init_frames();
|
|
687
|
-
init_frames2();
|
|
688
|
-
var CONTENT_TYPE = "application/x-nps-frame";
|
|
689
|
-
var NwpClient = class {
|
|
690
|
-
_baseUrl;
|
|
691
|
-
_codec;
|
|
692
|
-
_tier;
|
|
693
|
-
constructor(baseUrl, options = {}) {
|
|
694
|
-
this._baseUrl = baseUrl.replace(/\/$/, "");
|
|
695
|
-
this._tier = options.defaultTier ?? 1 /* MSGPACK */;
|
|
696
|
-
const registry = options.registry ?? (() => {
|
|
697
|
-
const r = new FrameRegistry();
|
|
698
|
-
registerNcpFrames(r);
|
|
699
|
-
registerNwpFrames(r);
|
|
700
|
-
return r;
|
|
701
|
-
})();
|
|
702
|
-
const codecOpts = options.maxPayload !== void 0 ? { maxPayload: options.maxPayload } : {};
|
|
703
|
-
this._codec = new NpsFrameCodec(registry, codecOpts);
|
|
704
|
-
}
|
|
705
|
-
async sendAnchor(frame) {
|
|
706
|
-
const wire = this._codec.encode(frame, { overrideTier: this._tier });
|
|
707
|
-
const res = await fetch(`${this._baseUrl}/anchor`, {
|
|
708
|
-
method: "POST",
|
|
709
|
-
body: wire,
|
|
710
|
-
headers: { "Content-Type": CONTENT_TYPE, "Accept": CONTENT_TYPE }
|
|
711
|
-
});
|
|
712
|
-
if (!res.ok) throw new Error(`NWP /anchor failed: HTTP ${res.status}`);
|
|
713
|
-
}
|
|
714
|
-
async query(frame) {
|
|
715
|
-
const wire = this._codec.encode(frame, { overrideTier: this._tier });
|
|
716
|
-
const res = await fetch(`${this._baseUrl}/query`, {
|
|
717
|
-
method: "POST",
|
|
718
|
-
body: wire,
|
|
719
|
-
headers: { "Content-Type": CONTENT_TYPE, "Accept": CONTENT_TYPE }
|
|
720
|
-
});
|
|
721
|
-
if (!res.ok) throw new Error(`NWP /query failed: HTTP ${res.status}`);
|
|
722
|
-
const buf = new Uint8Array(await res.arrayBuffer());
|
|
723
|
-
const result = this._codec.decode(buf);
|
|
724
|
-
if (!(result instanceof exports.CapsFrame)) {
|
|
725
|
-
throw new TypeError(`Expected CapsFrame from /query, got ${result.constructor.name}.`);
|
|
726
|
-
}
|
|
727
|
-
return result;
|
|
728
|
-
}
|
|
729
|
-
async *stream(frame) {
|
|
730
|
-
const wire = this._codec.encode(frame, { overrideTier: this._tier });
|
|
731
|
-
const res = await fetch(`${this._baseUrl}/stream`, {
|
|
732
|
-
method: "POST",
|
|
733
|
-
body: wire,
|
|
734
|
-
headers: { "Content-Type": CONTENT_TYPE, "Accept": CONTENT_TYPE }
|
|
735
|
-
});
|
|
736
|
-
if (!res.ok) throw new Error(`NWP /stream failed: HTTP ${res.status}`);
|
|
737
|
-
if (res.body === null) return;
|
|
738
|
-
const { StreamFrame: SF } = await Promise.resolve().then(() => (init_frames2(), frames_exports));
|
|
739
|
-
for await (const chunk of res.body) {
|
|
740
|
-
const bytes = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk);
|
|
741
|
-
if (bytes.length === 0) continue;
|
|
742
|
-
const result = this._codec.decode(bytes);
|
|
743
|
-
if (!(result instanceof SF)) {
|
|
744
|
-
throw new TypeError(`Expected StreamFrame from /stream, got ${result.constructor.name}.`);
|
|
745
|
-
}
|
|
746
|
-
yield result;
|
|
747
|
-
if (result.isLast) break;
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
|
-
async invoke(frame) {
|
|
751
|
-
const wire = this._codec.encode(frame, { overrideTier: this._tier });
|
|
752
|
-
const res = await fetch(`${this._baseUrl}/invoke`, {
|
|
753
|
-
method: "POST",
|
|
754
|
-
body: wire,
|
|
755
|
-
headers: { "Content-Type": CONTENT_TYPE, "Accept": CONTENT_TYPE }
|
|
756
|
-
});
|
|
757
|
-
if (!res.ok) throw new Error(`NWP /invoke failed: HTTP ${res.status}`);
|
|
758
|
-
if (frame.async_) {
|
|
759
|
-
return asyncActionResponseFromDict(await res.json());
|
|
760
|
-
}
|
|
761
|
-
const contentType = res.headers.get("content-type") ?? "";
|
|
762
|
-
if (contentType.includes(CONTENT_TYPE)) {
|
|
763
|
-
const buf = new Uint8Array(await res.arrayBuffer());
|
|
764
|
-
return this._codec.decode(buf);
|
|
765
|
-
}
|
|
766
|
-
return res.json();
|
|
767
|
-
}
|
|
768
|
-
};
|
|
769
|
-
|
|
770
|
-
// src/nip/frames.ts
|
|
771
|
-
init_frames();
|
|
772
|
-
var IdentFrame = class _IdentFrame {
|
|
773
|
-
constructor(nid, pubKey, metadata, signature) {
|
|
774
|
-
this.nid = nid;
|
|
775
|
-
this.pubKey = pubKey;
|
|
776
|
-
this.metadata = metadata;
|
|
777
|
-
this.signature = signature;
|
|
778
|
-
}
|
|
779
|
-
nid;
|
|
780
|
-
pubKey;
|
|
781
|
-
metadata;
|
|
782
|
-
signature;
|
|
783
|
-
frameType = 32 /* IDENT */;
|
|
784
|
-
preferredTier = 1 /* MSGPACK */;
|
|
785
|
-
unsignedDict() {
|
|
786
|
-
return {
|
|
787
|
-
nid: this.nid,
|
|
788
|
-
pub_key: this.pubKey,
|
|
789
|
-
metadata: this.metadata
|
|
790
|
-
};
|
|
791
|
-
}
|
|
792
|
-
toDict() {
|
|
793
|
-
return { ...this.unsignedDict(), signature: this.signature };
|
|
794
|
-
}
|
|
795
|
-
static fromDict(data) {
|
|
796
|
-
return new _IdentFrame(
|
|
797
|
-
data["nid"],
|
|
798
|
-
data["pub_key"],
|
|
799
|
-
data["metadata"],
|
|
800
|
-
data["signature"]
|
|
801
|
-
);
|
|
802
|
-
}
|
|
803
|
-
};
|
|
804
|
-
var TrustFrame = class _TrustFrame {
|
|
805
|
-
constructor(issuerNid, subjectNid, scopes, expiresAt, signature) {
|
|
806
|
-
this.issuerNid = issuerNid;
|
|
807
|
-
this.subjectNid = subjectNid;
|
|
808
|
-
this.scopes = scopes;
|
|
809
|
-
this.expiresAt = expiresAt;
|
|
810
|
-
this.signature = signature;
|
|
811
|
-
}
|
|
812
|
-
issuerNid;
|
|
813
|
-
subjectNid;
|
|
814
|
-
scopes;
|
|
815
|
-
expiresAt;
|
|
816
|
-
signature;
|
|
817
|
-
frameType = 33 /* TRUST */;
|
|
818
|
-
preferredTier = 1 /* MSGPACK */;
|
|
819
|
-
toDict() {
|
|
820
|
-
return {
|
|
821
|
-
issuer_nid: this.issuerNid,
|
|
822
|
-
subject_nid: this.subjectNid,
|
|
823
|
-
scopes: this.scopes,
|
|
824
|
-
expires_at: this.expiresAt,
|
|
825
|
-
signature: this.signature
|
|
826
|
-
};
|
|
827
|
-
}
|
|
828
|
-
static fromDict(data) {
|
|
829
|
-
return new _TrustFrame(
|
|
830
|
-
data["issuer_nid"],
|
|
831
|
-
data["subject_nid"],
|
|
832
|
-
data["scopes"],
|
|
833
|
-
data["expires_at"],
|
|
834
|
-
data["signature"]
|
|
835
|
-
);
|
|
836
|
-
}
|
|
837
|
-
};
|
|
838
|
-
var RevokeFrame = class _RevokeFrame {
|
|
839
|
-
constructor(nid, reason, revokedAt) {
|
|
840
|
-
this.nid = nid;
|
|
841
|
-
this.reason = reason;
|
|
842
|
-
this.revokedAt = revokedAt;
|
|
843
|
-
}
|
|
844
|
-
nid;
|
|
845
|
-
reason;
|
|
846
|
-
revokedAt;
|
|
847
|
-
frameType = 34 /* REVOKE */;
|
|
848
|
-
preferredTier = 1 /* MSGPACK */;
|
|
849
|
-
toDict() {
|
|
850
|
-
return {
|
|
851
|
-
nid: this.nid,
|
|
852
|
-
reason: this.reason ?? null,
|
|
853
|
-
revoked_at: this.revokedAt ?? null
|
|
854
|
-
};
|
|
855
|
-
}
|
|
856
|
-
static fromDict(data) {
|
|
857
|
-
return new _RevokeFrame(
|
|
858
|
-
data["nid"],
|
|
859
|
-
data["reason"] ?? void 0,
|
|
860
|
-
data["revoked_at"] ?? void 0
|
|
861
|
-
);
|
|
862
|
-
}
|
|
863
|
-
};
|
|
864
|
-
ed25519__namespace.etc.sha512Sync = (...m) => sha512.sha512(ed25519__namespace.etc.concatBytes(...m));
|
|
865
|
-
var KEY_FILE_VERSION = 1;
|
|
866
|
-
var PBKDF2_ITERS = 6e5;
|
|
867
|
-
var SALT_BYTES = 16;
|
|
868
|
-
var IV_BYTES = 12;
|
|
869
|
-
var KEY_BYTES = 32;
|
|
870
|
-
var NipIdentity = class _NipIdentity {
|
|
871
|
-
constructor(_privKey, pubKey) {
|
|
872
|
-
this._privKey = _privKey;
|
|
873
|
-
this.pubKey = pubKey;
|
|
874
|
-
}
|
|
875
|
-
_privKey;
|
|
876
|
-
pubKey;
|
|
877
|
-
// ── Factory ───────────────────────────────────────────────────────────────
|
|
878
|
-
static generate() {
|
|
879
|
-
const priv = ed25519__namespace.utils.randomPrivateKey();
|
|
880
|
-
const pub = ed25519__namespace.getPublicKey(priv);
|
|
881
|
-
return new _NipIdentity(priv, pub);
|
|
882
|
-
}
|
|
883
|
-
static fromPrivateKey(privKey) {
|
|
884
|
-
const pub = ed25519__namespace.getPublicKey(privKey);
|
|
885
|
-
return new _NipIdentity(privKey, pub);
|
|
886
|
-
}
|
|
887
|
-
/** Load from an AES-256-GCM encrypted key file. */
|
|
888
|
-
static load(path, passphrase) {
|
|
889
|
-
const envelope = JSON.parse(fs.readFileSync(path, "utf8"));
|
|
890
|
-
const salt = Buffer.from(envelope.salt, "hex");
|
|
891
|
-
const iv = Buffer.from(envelope.iv, "hex");
|
|
892
|
-
const ct = Buffer.from(envelope.ciphertext, "hex");
|
|
893
|
-
const dk = crypto.pbkdf2Sync(passphrase, salt, PBKDF2_ITERS, KEY_BYTES, "sha256");
|
|
894
|
-
const decipher = crypto.createDecipheriv("aes-256-gcm", dk, iv);
|
|
895
|
-
const authTag = ct.slice(ct.length - 16);
|
|
896
|
-
const body = ct.slice(0, ct.length - 16);
|
|
897
|
-
decipher.setAuthTag(authTag);
|
|
898
|
-
const priv = Buffer.concat([decipher.update(body), decipher.final()]);
|
|
899
|
-
return _NipIdentity.fromPrivateKey(new Uint8Array(priv));
|
|
900
|
-
}
|
|
901
|
-
/** Save to an AES-256-GCM encrypted key file. */
|
|
902
|
-
save(path, passphrase) {
|
|
903
|
-
const salt = crypto.randomBytes(SALT_BYTES);
|
|
904
|
-
const iv = crypto.randomBytes(IV_BYTES);
|
|
905
|
-
const dk = crypto.pbkdf2Sync(passphrase, salt, PBKDF2_ITERS, KEY_BYTES, "sha256");
|
|
906
|
-
const cipher = crypto.createCipheriv("aes-256-gcm", dk, iv);
|
|
907
|
-
const body = Buffer.concat([cipher.update(Buffer.from(this._privKey)), cipher.final()]);
|
|
908
|
-
const tag = cipher.getAuthTag();
|
|
909
|
-
const envelope = {
|
|
910
|
-
version: KEY_FILE_VERSION,
|
|
911
|
-
salt: salt.toString("hex"),
|
|
912
|
-
iv: iv.toString("hex"),
|
|
913
|
-
ciphertext: Buffer.concat([body, tag]).toString("hex"),
|
|
914
|
-
pubKey: Buffer.from(this.pubKey).toString("hex")
|
|
915
|
-
};
|
|
916
|
-
fs.writeFileSync(path, JSON.stringify(envelope, null, 2), "utf8");
|
|
917
|
-
}
|
|
918
|
-
// ── Signing ───────────────────────────────────────────────────────────────
|
|
919
|
-
/** Sign a dict payload. Returns `ed25519:<base64url>`. */
|
|
920
|
-
sign(payload) {
|
|
921
|
-
const canonical = JSON.stringify(payload, Object.keys(payload).sort());
|
|
922
|
-
const bytes = new TextEncoder().encode(canonical);
|
|
923
|
-
const sig = ed25519__namespace.sign(bytes, this._privKey);
|
|
924
|
-
return `ed25519:${Buffer.from(sig).toString("base64")}`;
|
|
925
|
-
}
|
|
926
|
-
/** Verify a signature string against a dict payload. */
|
|
927
|
-
verify(payload, signature) {
|
|
928
|
-
if (!signature.startsWith("ed25519:")) return false;
|
|
929
|
-
try {
|
|
930
|
-
const canonical = JSON.stringify(payload, Object.keys(payload).sort());
|
|
931
|
-
const bytes = new TextEncoder().encode(canonical);
|
|
932
|
-
const sigBytes = Buffer.from(signature.slice("ed25519:".length), "base64");
|
|
933
|
-
return ed25519__namespace.verify(sigBytes, bytes, this.pubKey);
|
|
934
|
-
} catch {
|
|
935
|
-
return false;
|
|
936
|
-
}
|
|
937
|
-
}
|
|
938
|
-
/** Public key as `ed25519:<hex>` string. */
|
|
939
|
-
get pubKeyString() {
|
|
940
|
-
return `ed25519:${Buffer.from(this.pubKey).toString("hex")}`;
|
|
941
|
-
}
|
|
942
|
-
};
|
|
943
|
-
|
|
944
|
-
// src/nip/registry.ts
|
|
945
|
-
init_frames();
|
|
946
|
-
function registerNipFrames(registry) {
|
|
947
|
-
registry.register(32 /* IDENT */, IdentFrame);
|
|
948
|
-
registry.register(33 /* TRUST */, TrustFrame);
|
|
949
|
-
registry.register(34 /* REVOKE */, RevokeFrame);
|
|
950
|
-
}
|
|
951
|
-
|
|
952
|
-
// src/ndp/frames.ts
|
|
953
|
-
init_frames();
|
|
954
|
-
var AnnounceFrame = class _AnnounceFrame {
|
|
955
|
-
constructor(nid, addresses, capabilities, ttl, timestamp, signature, nodeType) {
|
|
956
|
-
this.nid = nid;
|
|
957
|
-
this.addresses = addresses;
|
|
958
|
-
this.capabilities = capabilities;
|
|
959
|
-
this.ttl = ttl;
|
|
960
|
-
this.timestamp = timestamp;
|
|
961
|
-
this.signature = signature;
|
|
962
|
-
this.nodeType = nodeType;
|
|
963
|
-
}
|
|
964
|
-
nid;
|
|
965
|
-
addresses;
|
|
966
|
-
capabilities;
|
|
967
|
-
ttl;
|
|
968
|
-
timestamp;
|
|
969
|
-
signature;
|
|
970
|
-
nodeType;
|
|
971
|
-
frameType = 48 /* ANNOUNCE */;
|
|
972
|
-
preferredTier = 1 /* MSGPACK */;
|
|
973
|
-
unsignedDict() {
|
|
974
|
-
return {
|
|
975
|
-
nid: this.nid,
|
|
976
|
-
addresses: this.addresses,
|
|
977
|
-
capabilities: this.capabilities,
|
|
978
|
-
ttl: this.ttl,
|
|
979
|
-
timestamp: this.timestamp,
|
|
980
|
-
node_type: this.nodeType ?? null
|
|
981
|
-
};
|
|
982
|
-
}
|
|
983
|
-
toDict() {
|
|
984
|
-
return { ...this.unsignedDict(), signature: this.signature };
|
|
985
|
-
}
|
|
986
|
-
static fromDict(data) {
|
|
987
|
-
return new _AnnounceFrame(
|
|
988
|
-
data["nid"],
|
|
989
|
-
data["addresses"],
|
|
990
|
-
data["capabilities"],
|
|
991
|
-
data["ttl"],
|
|
992
|
-
data["timestamp"],
|
|
993
|
-
data["signature"],
|
|
994
|
-
data["node_type"] ?? void 0
|
|
995
|
-
);
|
|
996
|
-
}
|
|
997
|
-
};
|
|
998
|
-
var ResolveFrame = class _ResolveFrame {
|
|
999
|
-
constructor(target, requesterNid, resolved) {
|
|
1000
|
-
this.target = target;
|
|
1001
|
-
this.requesterNid = requesterNid;
|
|
1002
|
-
this.resolved = resolved;
|
|
1003
|
-
}
|
|
1004
|
-
target;
|
|
1005
|
-
requesterNid;
|
|
1006
|
-
resolved;
|
|
1007
|
-
frameType = 49 /* RESOLVE */;
|
|
1008
|
-
preferredTier = 1 /* MSGPACK */;
|
|
1009
|
-
toDict() {
|
|
1010
|
-
return {
|
|
1011
|
-
target: this.target,
|
|
1012
|
-
requester_nid: this.requesterNid ?? null,
|
|
1013
|
-
resolved: this.resolved ?? null
|
|
1014
|
-
};
|
|
1015
|
-
}
|
|
1016
|
-
static fromDict(data) {
|
|
1017
|
-
return new _ResolveFrame(
|
|
1018
|
-
data["target"],
|
|
1019
|
-
data["requester_nid"] ?? void 0,
|
|
1020
|
-
data["resolved"] ?? void 0
|
|
1021
|
-
);
|
|
1022
|
-
}
|
|
1023
|
-
};
|
|
1024
|
-
var GraphFrame = class _GraphFrame {
|
|
1025
|
-
constructor(seq, initialSync, nodes, patch) {
|
|
1026
|
-
this.seq = seq;
|
|
1027
|
-
this.initialSync = initialSync;
|
|
1028
|
-
this.nodes = nodes;
|
|
1029
|
-
this.patch = patch;
|
|
1030
|
-
}
|
|
1031
|
-
seq;
|
|
1032
|
-
initialSync;
|
|
1033
|
-
nodes;
|
|
1034
|
-
patch;
|
|
1035
|
-
frameType = 50 /* GRAPH */;
|
|
1036
|
-
preferredTier = 1 /* MSGPACK */;
|
|
1037
|
-
toDict() {
|
|
1038
|
-
return {
|
|
1039
|
-
seq: this.seq,
|
|
1040
|
-
initial_sync: this.initialSync,
|
|
1041
|
-
nodes: this.nodes ?? null,
|
|
1042
|
-
patch: this.patch ?? null
|
|
1043
|
-
};
|
|
1044
|
-
}
|
|
1045
|
-
static fromDict(data) {
|
|
1046
|
-
return new _GraphFrame(
|
|
1047
|
-
data["seq"],
|
|
1048
|
-
data["initial_sync"],
|
|
1049
|
-
data["nodes"] ?? void 0,
|
|
1050
|
-
data["patch"] ?? void 0
|
|
1051
|
-
);
|
|
1052
|
-
}
|
|
1053
|
-
};
|
|
1054
|
-
|
|
1055
|
-
// src/ndp/registry.ts
|
|
1056
|
-
init_frames();
|
|
1057
|
-
function registerNdpFrames(registry) {
|
|
1058
|
-
registry.register(48 /* ANNOUNCE */, AnnounceFrame);
|
|
1059
|
-
registry.register(49 /* RESOLVE */, ResolveFrame);
|
|
1060
|
-
registry.register(50 /* GRAPH */, GraphFrame);
|
|
1061
|
-
}
|
|
1062
|
-
|
|
1063
|
-
// src/ndp/ndp-registry.ts
|
|
1064
|
-
var InMemoryNdpRegistry = class _InMemoryNdpRegistry {
|
|
1065
|
-
_store = /* @__PURE__ */ new Map();
|
|
1066
|
-
// Replaceable for testing
|
|
1067
|
-
clock = () => Date.now();
|
|
1068
|
-
announce(frame) {
|
|
1069
|
-
const expiresAt = this.clock() + frame.ttl * 1e3;
|
|
1070
|
-
if (frame.ttl === 0) {
|
|
1071
|
-
this._store.delete(frame.nid);
|
|
1072
|
-
return;
|
|
1073
|
-
}
|
|
1074
|
-
this._store.set(frame.nid, { frame, expiresAt });
|
|
1075
|
-
}
|
|
1076
|
-
getByNid(nid) {
|
|
1077
|
-
const entry = this._store.get(nid);
|
|
1078
|
-
if (entry === void 0) return void 0;
|
|
1079
|
-
if (this.clock() > entry.expiresAt) {
|
|
1080
|
-
this._store.delete(nid);
|
|
1081
|
-
return void 0;
|
|
1082
|
-
}
|
|
1083
|
-
return entry.frame;
|
|
1084
|
-
}
|
|
1085
|
-
resolve(target) {
|
|
1086
|
-
for (const [nid, entry] of this._store) {
|
|
1087
|
-
if (this.clock() > entry.expiresAt) {
|
|
1088
|
-
this._store.delete(nid);
|
|
1089
|
-
continue;
|
|
1090
|
-
}
|
|
1091
|
-
if (!_InMemoryNdpRegistry.nwpTargetMatchesNid(nid, target)) continue;
|
|
1092
|
-
const addr = entry.frame.addresses[0];
|
|
1093
|
-
if (addr === void 0) continue;
|
|
1094
|
-
return { host: addr.host, port: addr.port, ttl: entry.frame.ttl };
|
|
1095
|
-
}
|
|
1096
|
-
return void 0;
|
|
1097
|
-
}
|
|
1098
|
-
getAll() {
|
|
1099
|
-
const now = this.clock();
|
|
1100
|
-
const result = [];
|
|
1101
|
-
for (const [nid, entry] of this._store) {
|
|
1102
|
-
if (now > entry.expiresAt) {
|
|
1103
|
-
this._store.delete(nid);
|
|
1104
|
-
continue;
|
|
1105
|
-
}
|
|
1106
|
-
result.push(entry.frame);
|
|
1107
|
-
}
|
|
1108
|
-
return result;
|
|
1109
|
-
}
|
|
1110
|
-
static nwpTargetMatchesNid(nid, target) {
|
|
1111
|
-
const nidParts = nid.split(":");
|
|
1112
|
-
if (nidParts.length < 5 || nidParts[0] !== "urn" || nidParts[1] !== "nps" || nidParts[2] !== "node") {
|
|
1113
|
-
return false;
|
|
1114
|
-
}
|
|
1115
|
-
if (!target.startsWith("nwp://")) return false;
|
|
1116
|
-
const nidAuthority = nidParts[3];
|
|
1117
|
-
const nidPath = nidParts[4];
|
|
1118
|
-
const rest = target.slice("nwp://".length);
|
|
1119
|
-
const slashIdx = rest.indexOf("/");
|
|
1120
|
-
if (slashIdx === -1) return false;
|
|
1121
|
-
const urlAuthority = rest.slice(0, slashIdx);
|
|
1122
|
-
const urlPath = rest.slice(slashIdx + 1);
|
|
1123
|
-
if (urlAuthority !== nidAuthority) return false;
|
|
1124
|
-
if (urlPath === nidPath) return true;
|
|
1125
|
-
if (urlPath.startsWith(nidPath + "/")) return true;
|
|
1126
|
-
return false;
|
|
1127
|
-
}
|
|
1128
|
-
};
|
|
1129
|
-
ed25519__namespace.etc.sha512Sync = (...m) => sha512.sha512(ed25519__namespace.etc.concatBytes(...m));
|
|
1130
|
-
var NdpAnnounceResult = {
|
|
1131
|
-
ok: () => ({ isValid: true }),
|
|
1132
|
-
fail: (errorCode, message) => ({ isValid: false, errorCode, message })
|
|
1133
|
-
};
|
|
1134
|
-
var NdpAnnounceValidator = class {
|
|
1135
|
-
_keys = /* @__PURE__ */ new Map();
|
|
1136
|
-
// nid → "ed25519:<hex>"
|
|
1137
|
-
registerPublicKey(nid, encodedPubKey) {
|
|
1138
|
-
this._keys.set(nid, encodedPubKey);
|
|
1139
|
-
}
|
|
1140
|
-
removePublicKey(nid) {
|
|
1141
|
-
this._keys.delete(nid);
|
|
1142
|
-
}
|
|
1143
|
-
get knownPublicKeys() {
|
|
1144
|
-
return this._keys;
|
|
1145
|
-
}
|
|
1146
|
-
validate(frame) {
|
|
1147
|
-
const encoded = this._keys.get(frame.nid);
|
|
1148
|
-
if (encoded === void 0) {
|
|
1149
|
-
return NdpAnnounceResult.fail("NDP-ANNOUNCE-NID-MISMATCH", `No public key registered for NID: ${frame.nid}`);
|
|
1150
|
-
}
|
|
1151
|
-
try {
|
|
1152
|
-
const prefix = "ed25519:";
|
|
1153
|
-
const pubHex = encoded.startsWith(prefix) ? encoded.slice(prefix.length) : encoded;
|
|
1154
|
-
const pubKey = Buffer.from(pubHex, "hex");
|
|
1155
|
-
const sig = frame.signature;
|
|
1156
|
-
if (!sig.startsWith(prefix)) {
|
|
1157
|
-
return NdpAnnounceResult.fail("NDP-ANNOUNCE-SIG-INVALID", "Signature must start with 'ed25519:'");
|
|
1158
|
-
}
|
|
1159
|
-
const sigBytes = Buffer.from(sig.slice(prefix.length), "base64");
|
|
1160
|
-
const unsigned = frame.unsignedDict();
|
|
1161
|
-
const canonical = JSON.stringify(unsigned, Object.keys(unsigned).sort());
|
|
1162
|
-
const message = new TextEncoder().encode(canonical);
|
|
1163
|
-
const valid = ed25519__namespace.verify(sigBytes, message, pubKey);
|
|
1164
|
-
if (!valid) return NdpAnnounceResult.fail("NDP-ANNOUNCE-SIG-INVALID", "Ed25519 signature verification failed.");
|
|
1165
|
-
return NdpAnnounceResult.ok();
|
|
1166
|
-
} catch {
|
|
1167
|
-
return NdpAnnounceResult.fail("NDP-ANNOUNCE-SIG-INVALID", "Ed25519 signature verification failed.");
|
|
1168
|
-
}
|
|
1169
|
-
}
|
|
1170
|
-
};
|
|
1171
|
-
|
|
1172
|
-
// src/nop/models.ts
|
|
1173
|
-
var TaskState = /* @__PURE__ */ ((TaskState2) => {
|
|
1174
|
-
TaskState2["PENDING"] = "pending";
|
|
1175
|
-
TaskState2["PREFLIGHT"] = "preflight";
|
|
1176
|
-
TaskState2["RUNNING"] = "running";
|
|
1177
|
-
TaskState2["WAITING_SYNC"] = "waiting_sync";
|
|
1178
|
-
TaskState2["COMPLETED"] = "completed";
|
|
1179
|
-
TaskState2["FAILED"] = "failed";
|
|
1180
|
-
TaskState2["CANCELLED"] = "cancelled";
|
|
1181
|
-
TaskState2["SKIPPED"] = "skipped";
|
|
1182
|
-
return TaskState2;
|
|
1183
|
-
})(TaskState || {});
|
|
1184
|
-
var TaskPriority = /* @__PURE__ */ ((TaskPriority2) => {
|
|
1185
|
-
TaskPriority2["LOW"] = "low";
|
|
1186
|
-
TaskPriority2["NORMAL"] = "normal";
|
|
1187
|
-
TaskPriority2["HIGH"] = "high";
|
|
1188
|
-
return TaskPriority2;
|
|
1189
|
-
})(TaskPriority || {});
|
|
1190
|
-
var BackoffStrategy = /* @__PURE__ */ ((BackoffStrategy2) => {
|
|
1191
|
-
BackoffStrategy2["FIXED"] = "fixed";
|
|
1192
|
-
BackoffStrategy2["LINEAR"] = "linear";
|
|
1193
|
-
BackoffStrategy2["EXPONENTIAL"] = "exponential";
|
|
1194
|
-
return BackoffStrategy2;
|
|
1195
|
-
})(BackoffStrategy || {});
|
|
1196
|
-
var AggregateStrategy = /* @__PURE__ */ ((AggregateStrategy2) => {
|
|
1197
|
-
AggregateStrategy2["MERGE"] = "merge";
|
|
1198
|
-
AggregateStrategy2["FIRST"] = "first";
|
|
1199
|
-
AggregateStrategy2["FASTEST_K"] = "fastest_k";
|
|
1200
|
-
AggregateStrategy2["ALL"] = "all";
|
|
1201
|
-
return AggregateStrategy2;
|
|
1202
|
-
})(AggregateStrategy || {});
|
|
1203
|
-
function computeDelayMs(policy, attempt) {
|
|
1204
|
-
const base = policy.baseDelayMs ?? 1e3;
|
|
1205
|
-
const cap = policy.maxDelayMs ?? 3e4;
|
|
1206
|
-
let delay;
|
|
1207
|
-
switch (policy.backoff) {
|
|
1208
|
-
case "fixed" /* FIXED */:
|
|
1209
|
-
delay = base;
|
|
1210
|
-
break;
|
|
1211
|
-
case "linear" /* LINEAR */:
|
|
1212
|
-
delay = base * (attempt + 1);
|
|
1213
|
-
break;
|
|
1214
|
-
case "exponential" /* EXPONENTIAL */:
|
|
1215
|
-
delay = base * Math.pow(2, attempt);
|
|
1216
|
-
break;
|
|
1217
|
-
}
|
|
1218
|
-
return Math.min(delay, cap);
|
|
1219
|
-
}
|
|
1220
|
-
|
|
1221
|
-
// src/nop/frames.ts
|
|
1222
|
-
init_frames();
|
|
1223
|
-
var TaskFrame = class _TaskFrame {
|
|
1224
|
-
constructor(taskId, dag, timeoutMs, callbackUrl, context, priority, depth) {
|
|
1225
|
-
this.taskId = taskId;
|
|
1226
|
-
this.dag = dag;
|
|
1227
|
-
this.timeoutMs = timeoutMs;
|
|
1228
|
-
this.callbackUrl = callbackUrl;
|
|
1229
|
-
this.context = context;
|
|
1230
|
-
this.priority = priority;
|
|
1231
|
-
this.depth = depth;
|
|
1232
|
-
}
|
|
1233
|
-
taskId;
|
|
1234
|
-
dag;
|
|
1235
|
-
timeoutMs;
|
|
1236
|
-
callbackUrl;
|
|
1237
|
-
context;
|
|
1238
|
-
priority;
|
|
1239
|
-
depth;
|
|
1240
|
-
frameType = 64 /* TASK */;
|
|
1241
|
-
preferredTier = 1 /* MSGPACK */;
|
|
1242
|
-
toDict() {
|
|
1243
|
-
return {
|
|
1244
|
-
task_id: this.taskId,
|
|
1245
|
-
dag: this.dag,
|
|
1246
|
-
timeout_ms: this.timeoutMs ?? null,
|
|
1247
|
-
callback_url: this.callbackUrl ?? null,
|
|
1248
|
-
context: this.context ?? null,
|
|
1249
|
-
priority: this.priority ?? null,
|
|
1250
|
-
depth: this.depth ?? null
|
|
1251
|
-
};
|
|
1252
|
-
}
|
|
1253
|
-
static fromDict(data) {
|
|
1254
|
-
return new _TaskFrame(
|
|
1255
|
-
data["task_id"],
|
|
1256
|
-
data["dag"],
|
|
1257
|
-
data["timeout_ms"] ?? void 0,
|
|
1258
|
-
data["callback_url"] ?? void 0,
|
|
1259
|
-
data["context"] ?? void 0,
|
|
1260
|
-
data["priority"] ?? void 0,
|
|
1261
|
-
data["depth"] ?? void 0
|
|
1262
|
-
);
|
|
1263
|
-
}
|
|
1264
|
-
};
|
|
1265
|
-
var DelegateFrame = class _DelegateFrame {
|
|
1266
|
-
constructor(taskId, subtaskId, action, agentNid, inputs, params, idempotencyKey) {
|
|
1267
|
-
this.taskId = taskId;
|
|
1268
|
-
this.subtaskId = subtaskId;
|
|
1269
|
-
this.action = action;
|
|
1270
|
-
this.agentNid = agentNid;
|
|
1271
|
-
this.inputs = inputs;
|
|
1272
|
-
this.params = params;
|
|
1273
|
-
this.idempotencyKey = idempotencyKey;
|
|
1274
|
-
}
|
|
1275
|
-
taskId;
|
|
1276
|
-
subtaskId;
|
|
1277
|
-
action;
|
|
1278
|
-
agentNid;
|
|
1279
|
-
inputs;
|
|
1280
|
-
params;
|
|
1281
|
-
idempotencyKey;
|
|
1282
|
-
frameType = 65 /* DELEGATE */;
|
|
1283
|
-
preferredTier = 1 /* MSGPACK */;
|
|
1284
|
-
toDict() {
|
|
1285
|
-
return {
|
|
1286
|
-
task_id: this.taskId,
|
|
1287
|
-
subtask_id: this.subtaskId,
|
|
1288
|
-
action: this.action,
|
|
1289
|
-
agent_nid: this.agentNid,
|
|
1290
|
-
inputs: this.inputs ?? null,
|
|
1291
|
-
params: this.params ?? null,
|
|
1292
|
-
idempotency_key: this.idempotencyKey ?? null
|
|
1293
|
-
};
|
|
1294
|
-
}
|
|
1295
|
-
static fromDict(data) {
|
|
1296
|
-
return new _DelegateFrame(
|
|
1297
|
-
data["task_id"],
|
|
1298
|
-
data["subtask_id"],
|
|
1299
|
-
data["action"],
|
|
1300
|
-
data["agent_nid"],
|
|
1301
|
-
data["inputs"] ?? void 0,
|
|
1302
|
-
data["params"] ?? void 0,
|
|
1303
|
-
data["idempotency_key"] ?? void 0
|
|
1304
|
-
);
|
|
1305
|
-
}
|
|
1306
|
-
};
|
|
1307
|
-
var SyncFrame = class _SyncFrame {
|
|
1308
|
-
constructor(taskId, syncId, waitFor, minRequired = 0, aggregate = "merge", timeoutMs) {
|
|
1309
|
-
this.taskId = taskId;
|
|
1310
|
-
this.syncId = syncId;
|
|
1311
|
-
this.waitFor = waitFor;
|
|
1312
|
-
this.minRequired = minRequired;
|
|
1313
|
-
this.aggregate = aggregate;
|
|
1314
|
-
this.timeoutMs = timeoutMs;
|
|
1315
|
-
}
|
|
1316
|
-
taskId;
|
|
1317
|
-
syncId;
|
|
1318
|
-
waitFor;
|
|
1319
|
-
minRequired;
|
|
1320
|
-
aggregate;
|
|
1321
|
-
timeoutMs;
|
|
1322
|
-
frameType = 66 /* SYNC */;
|
|
1323
|
-
preferredTier = 1 /* MSGPACK */;
|
|
1324
|
-
toDict() {
|
|
1325
|
-
return {
|
|
1326
|
-
task_id: this.taskId,
|
|
1327
|
-
sync_id: this.syncId,
|
|
1328
|
-
wait_for: this.waitFor,
|
|
1329
|
-
min_required: this.minRequired,
|
|
1330
|
-
aggregate: this.aggregate,
|
|
1331
|
-
timeout_ms: this.timeoutMs ?? null
|
|
1332
|
-
};
|
|
1333
|
-
}
|
|
1334
|
-
static fromDict(data) {
|
|
1335
|
-
return new _SyncFrame(
|
|
1336
|
-
data["task_id"],
|
|
1337
|
-
data["sync_id"],
|
|
1338
|
-
data["wait_for"],
|
|
1339
|
-
data["min_required"] ?? 0,
|
|
1340
|
-
data["aggregate"] ?? "merge",
|
|
1341
|
-
data["timeout_ms"] ?? void 0
|
|
1342
|
-
);
|
|
1343
|
-
}
|
|
1344
|
-
};
|
|
1345
|
-
var AlignStreamFrame = class _AlignStreamFrame {
|
|
1346
|
-
constructor(streamId, taskId, subtaskId, seq, isFinal, senderNid, data, error, windowSize) {
|
|
1347
|
-
this.streamId = streamId;
|
|
1348
|
-
this.taskId = taskId;
|
|
1349
|
-
this.subtaskId = subtaskId;
|
|
1350
|
-
this.seq = seq;
|
|
1351
|
-
this.isFinal = isFinal;
|
|
1352
|
-
this.senderNid = senderNid;
|
|
1353
|
-
this.data = data;
|
|
1354
|
-
this.error = error;
|
|
1355
|
-
this.windowSize = windowSize;
|
|
1356
|
-
}
|
|
1357
|
-
streamId;
|
|
1358
|
-
taskId;
|
|
1359
|
-
subtaskId;
|
|
1360
|
-
seq;
|
|
1361
|
-
isFinal;
|
|
1362
|
-
senderNid;
|
|
1363
|
-
data;
|
|
1364
|
-
error;
|
|
1365
|
-
windowSize;
|
|
1366
|
-
frameType = 67 /* ALIGN_STREAM */;
|
|
1367
|
-
preferredTier = 1 /* MSGPACK */;
|
|
1368
|
-
toDict() {
|
|
1369
|
-
return {
|
|
1370
|
-
stream_id: this.streamId,
|
|
1371
|
-
task_id: this.taskId,
|
|
1372
|
-
subtask_id: this.subtaskId,
|
|
1373
|
-
seq: this.seq,
|
|
1374
|
-
is_final: this.isFinal,
|
|
1375
|
-
sender_nid: this.senderNid,
|
|
1376
|
-
data: this.data ?? null,
|
|
1377
|
-
error: this.error ? { error_code: this.error.errorCode, message: this.error.message ?? null } : null,
|
|
1378
|
-
window_size: this.windowSize ?? null
|
|
1379
|
-
};
|
|
1380
|
-
}
|
|
1381
|
-
static fromDict(data) {
|
|
1382
|
-
const rawError = data["error"];
|
|
1383
|
-
return new _AlignStreamFrame(
|
|
1384
|
-
data["stream_id"],
|
|
1385
|
-
data["task_id"],
|
|
1386
|
-
data["subtask_id"],
|
|
1387
|
-
data["seq"],
|
|
1388
|
-
data["is_final"],
|
|
1389
|
-
data["sender_nid"],
|
|
1390
|
-
data["data"] ?? void 0,
|
|
1391
|
-
rawError ? { errorCode: rawError.error_code, ...rawError.message != null ? { message: rawError.message } : {} } : void 0,
|
|
1392
|
-
data["window_size"] ?? void 0
|
|
1393
|
-
);
|
|
1394
|
-
}
|
|
1395
|
-
};
|
|
1396
|
-
|
|
1397
|
-
// src/nop/registry.ts
|
|
1398
|
-
init_frames();
|
|
1399
|
-
function registerNopFrames(registry) {
|
|
1400
|
-
registry.register(64 /* TASK */, TaskFrame);
|
|
1401
|
-
registry.register(65 /* DELEGATE */, DelegateFrame);
|
|
1402
|
-
registry.register(66 /* SYNC */, SyncFrame);
|
|
1403
|
-
registry.register(67 /* ALIGN_STREAM */, AlignStreamFrame);
|
|
1404
|
-
}
|
|
1405
|
-
|
|
1406
|
-
// src/nop/client.ts
|
|
1407
|
-
init_frames();
|
|
1408
|
-
var TERMINAL_STATES = /* @__PURE__ */ new Set([
|
|
1409
|
-
"completed" /* COMPLETED */,
|
|
1410
|
-
"failed" /* FAILED */,
|
|
1411
|
-
"cancelled" /* CANCELLED */
|
|
1412
|
-
]);
|
|
1413
|
-
var NopTaskStatus = class {
|
|
1414
|
-
constructor(_raw) {
|
|
1415
|
-
this._raw = _raw;
|
|
1416
|
-
}
|
|
1417
|
-
_raw;
|
|
1418
|
-
get taskId() {
|
|
1419
|
-
return this._raw["task_id"];
|
|
1420
|
-
}
|
|
1421
|
-
get state() {
|
|
1422
|
-
return this._raw["state"];
|
|
1423
|
-
}
|
|
1424
|
-
get isTerminal() {
|
|
1425
|
-
return TERMINAL_STATES.has(this._raw["state"]);
|
|
1426
|
-
}
|
|
1427
|
-
get aggregatedResult() {
|
|
1428
|
-
return this._raw["aggregated_result"];
|
|
1429
|
-
}
|
|
1430
|
-
get errorCode() {
|
|
1431
|
-
return this._raw["error_code"] ?? void 0;
|
|
1432
|
-
}
|
|
1433
|
-
get errorMessage() {
|
|
1434
|
-
return this._raw["error_message"] ?? void 0;
|
|
1435
|
-
}
|
|
1436
|
-
get nodeResults() {
|
|
1437
|
-
return this._raw["node_results"] ?? {};
|
|
1438
|
-
}
|
|
1439
|
-
get raw() {
|
|
1440
|
-
return this._raw;
|
|
1441
|
-
}
|
|
1442
|
-
toString() {
|
|
1443
|
-
return `NopTaskStatus(taskId=${this.taskId}, state=${String(this._raw["state"])})`;
|
|
1444
|
-
}
|
|
1445
|
-
};
|
|
1446
|
-
var NopClient = class {
|
|
1447
|
-
_baseUrl;
|
|
1448
|
-
_codec;
|
|
1449
|
-
_tier;
|
|
1450
|
-
constructor(baseUrl, options = {}) {
|
|
1451
|
-
this._baseUrl = baseUrl.replace(/\/$/, "");
|
|
1452
|
-
this._tier = options.defaultTier ?? 1 /* MSGPACK */;
|
|
1453
|
-
const registry = options.registry ?? (() => {
|
|
1454
|
-
const r = new FrameRegistry();
|
|
1455
|
-
registerNcpFrames(r);
|
|
1456
|
-
registerNopFrames(r);
|
|
1457
|
-
return r;
|
|
1458
|
-
})();
|
|
1459
|
-
this._codec = new NpsFrameCodec(registry);
|
|
1460
|
-
}
|
|
1461
|
-
async submit(frame) {
|
|
1462
|
-
const wire = this._codec.encode(frame, { overrideTier: this._tier });
|
|
1463
|
-
const res = await fetch(`${this._baseUrl}/task`, {
|
|
1464
|
-
method: "POST",
|
|
1465
|
-
body: wire,
|
|
1466
|
-
headers: { "Content-Type": "application/x-nps-frame", "Accept": "application/json" }
|
|
1467
|
-
});
|
|
1468
|
-
if (!res.ok) throw new Error(`NOP /task failed: HTTP ${res.status}`);
|
|
1469
|
-
const data = await res.json();
|
|
1470
|
-
return data["task_id"];
|
|
1471
|
-
}
|
|
1472
|
-
async getStatus(taskId) {
|
|
1473
|
-
const res = await fetch(`${this._baseUrl}/task/${taskId}`, {
|
|
1474
|
-
headers: { "Accept": "application/json" }
|
|
1475
|
-
});
|
|
1476
|
-
if (!res.ok) throw new Error(`NOP /task/${taskId} failed: HTTP ${res.status}`);
|
|
1477
|
-
return new NopTaskStatus(await res.json());
|
|
1478
|
-
}
|
|
1479
|
-
async cancel(taskId) {
|
|
1480
|
-
const res = await fetch(`${this._baseUrl}/task/${taskId}/cancel`, {
|
|
1481
|
-
method: "POST",
|
|
1482
|
-
headers: { "Accept": "application/json" }
|
|
1483
|
-
});
|
|
1484
|
-
if (!res.ok) throw new Error(`NOP /task/${taskId}/cancel failed: HTTP ${res.status}`);
|
|
1485
|
-
}
|
|
1486
|
-
async wait(taskId, options = {}) {
|
|
1487
|
-
const pollIntervalMs = options.pollIntervalMs ?? 1e3;
|
|
1488
|
-
const timeoutMs = options.timeoutMs ?? 3e4;
|
|
1489
|
-
const deadline = Date.now() + timeoutMs;
|
|
1490
|
-
while (true) {
|
|
1491
|
-
const status = await this.getStatus(taskId);
|
|
1492
|
-
if (status.isTerminal) return status;
|
|
1493
|
-
const remaining = deadline - Date.now();
|
|
1494
|
-
if (remaining <= 0) {
|
|
1495
|
-
throw new Error(`Task '${taskId}' did not complete within ${timeoutMs}ms (state: ${String(status.raw["state"])}).`);
|
|
1496
|
-
}
|
|
1497
|
-
await new Promise((resolve) => setTimeout(resolve, Math.min(pollIntervalMs, remaining)));
|
|
1498
|
-
}
|
|
1499
|
-
}
|
|
1500
|
-
};
|
|
1501
|
-
|
|
1502
|
-
// src/setup.ts
|
|
1503
|
-
function createDefaultRegistry() {
|
|
1504
|
-
const r = new FrameRegistry();
|
|
1505
|
-
registerNcpFrames(r);
|
|
1506
|
-
return r;
|
|
1507
|
-
}
|
|
1508
|
-
function createFullRegistry() {
|
|
1509
|
-
const r = new FrameRegistry();
|
|
1510
|
-
registerNcpFrames(r);
|
|
1511
|
-
registerNwpFrames(r);
|
|
1512
|
-
registerNipFrames(r);
|
|
1513
|
-
registerNdpFrames(r);
|
|
1514
|
-
registerNopFrames(r);
|
|
1515
|
-
return r;
|
|
1516
|
-
}
|
|
1517
|
-
|
|
1518
|
-
exports.ActionFrame = ActionFrame;
|
|
1519
|
-
exports.AggregateStrategy = AggregateStrategy;
|
|
1520
|
-
exports.AlignStreamFrame = AlignStreamFrame;
|
|
1521
|
-
exports.AnchorFrameCache = AnchorFrameCache;
|
|
1522
|
-
exports.AnnounceFrame = AnnounceFrame;
|
|
1523
|
-
exports.BackoffStrategy = BackoffStrategy;
|
|
1524
|
-
exports.DelegateFrame = DelegateFrame;
|
|
1525
|
-
exports.FrameRegistry = FrameRegistry;
|
|
1526
|
-
exports.GraphFrame = GraphFrame;
|
|
1527
|
-
exports.IdentFrame = IdentFrame;
|
|
1528
|
-
exports.InMemoryNdpRegistry = InMemoryNdpRegistry;
|
|
1529
|
-
exports.NdpAnnounceResult = NdpAnnounceResult;
|
|
1530
|
-
exports.NdpAnnounceValidator = NdpAnnounceValidator;
|
|
1531
|
-
exports.NipIdentity = NipIdentity;
|
|
1532
|
-
exports.NopClient = NopClient;
|
|
1533
|
-
exports.NopTaskStatus = NopTaskStatus;
|
|
1534
|
-
exports.NpsFrameCodec = NpsFrameCodec;
|
|
1535
|
-
exports.NwpClient = NwpClient;
|
|
1536
|
-
exports.QueryFrame = QueryFrame;
|
|
1537
|
-
exports.ResolveFrame = ResolveFrame;
|
|
1538
|
-
exports.RevokeFrame = RevokeFrame;
|
|
1539
|
-
exports.SyncFrame = SyncFrame;
|
|
1540
|
-
exports.TaskFrame = TaskFrame;
|
|
1541
|
-
exports.TaskPriority = TaskPriority;
|
|
1542
|
-
exports.TaskState = TaskState;
|
|
1543
|
-
exports.Tier1JsonCodec = Tier1JsonCodec;
|
|
1544
|
-
exports.Tier2MsgPackCodec = Tier2MsgPackCodec;
|
|
1545
|
-
exports.TrustFrame = TrustFrame;
|
|
1546
|
-
exports.asyncActionResponseFromDict = asyncActionResponseFromDict;
|
|
1547
|
-
exports.computeDelayMs = computeDelayMs;
|
|
1548
|
-
exports.createDefaultRegistry = createDefaultRegistry;
|
|
1549
|
-
exports.createFullRegistry = createFullRegistry;
|
|
1550
|
-
exports.registerNcpFrames = registerNcpFrames;
|
|
1551
|
-
exports.registerNdpFrames = registerNdpFrames;
|
|
1552
|
-
exports.registerNipFrames = registerNipFrames;
|
|
1553
|
-
exports.registerNopFrames = registerNopFrames;
|
|
1554
|
-
exports.registerNwpFrames = registerNwpFrames;
|
|
6
|
+
exports.VERSION = VERSION;
|
|
1555
7
|
//# sourceMappingURL=index.cjs.map
|
|
1556
8
|
//# sourceMappingURL=index.cjs.map
|