oceanbus 0.1.0
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/LICENSE +21 -0
- package/README.md +171 -0
- package/bin/oceanbus.js +28 -0
- package/dist/agent/identity.d.ts +23 -0
- package/dist/agent/identity.d.ts.map +1 -0
- package/dist/agent/identity.js +84 -0
- package/dist/agent/identity.js.map +1 -0
- package/dist/agent/index.d.ts +4 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +11 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/keys.d.ts +11 -0
- package/dist/agent/keys.d.ts.map +1 -0
- package/dist/agent/keys.js +50 -0
- package/dist/agent/keys.js.map +1 -0
- package/dist/agent/store.d.ts +23 -0
- package/dist/agent/store.d.ts.map +1 -0
- package/dist/agent/store.js +89 -0
- package/dist/agent/store.js.map +1 -0
- package/dist/cli/commands/block.d.ts +3 -0
- package/dist/cli/commands/block.d.ts.map +1 -0
- package/dist/cli/commands/block.js +25 -0
- package/dist/cli/commands/block.js.map +1 -0
- package/dist/cli/commands/key-new.d.ts +3 -0
- package/dist/cli/commands/key-new.d.ts.map +1 -0
- package/dist/cli/commands/key-new.js +21 -0
- package/dist/cli/commands/key-new.js.map +1 -0
- package/dist/cli/commands/key-revoke.d.ts +3 -0
- package/dist/cli/commands/key-revoke.d.ts.map +1 -0
- package/dist/cli/commands/key-revoke.js +25 -0
- package/dist/cli/commands/key-revoke.js.map +1 -0
- package/dist/cli/commands/keygen.d.ts +3 -0
- package/dist/cli/commands/keygen.d.ts.map +1 -0
- package/dist/cli/commands/keygen.js +20 -0
- package/dist/cli/commands/keygen.js.map +1 -0
- package/dist/cli/commands/listen.d.ts +3 -0
- package/dist/cli/commands/listen.d.ts.map +1 -0
- package/dist/cli/commands/listen.js +45 -0
- package/dist/cli/commands/listen.js.map +1 -0
- package/dist/cli/commands/openid.d.ts +3 -0
- package/dist/cli/commands/openid.d.ts.map +1 -0
- package/dist/cli/commands/openid.js +20 -0
- package/dist/cli/commands/openid.js.map +1 -0
- package/dist/cli/commands/register.d.ts +3 -0
- package/dist/cli/commands/register.d.ts.map +1 -0
- package/dist/cli/commands/register.js +21 -0
- package/dist/cli/commands/register.js.map +1 -0
- package/dist/cli/commands/send.d.ts +3 -0
- package/dist/cli/commands/send.d.ts.map +1 -0
- package/dist/cli/commands/send.js +61 -0
- package/dist/cli/commands/send.js.map +1 -0
- package/dist/cli/commands/whoami.d.ts +3 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/commands/whoami.js +20 -0
- package/dist/cli/commands/whoami.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +37 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/program.d.ts +1 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +4 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/client/errors.d.ts +16 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +42 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/http-client.d.ts +23 -0
- package/dist/client/http-client.d.ts.map +1 -0
- package/dist/client/http-client.js +130 -0
- package/dist/client/http-client.js.map +1 -0
- package/dist/client/index.d.ts +5 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +12 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/retry.d.ts +14 -0
- package/dist/client/retry.d.ts.map +1 -0
- package/dist/client/retry.js +53 -0
- package/dist/client/retry.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +39 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +9 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +106 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/crypto/canonical-json.d.ts +2 -0
- package/dist/crypto/canonical-json.d.ts.map +1 -0
- package/dist/crypto/canonical-json.js +39 -0
- package/dist/crypto/canonical-json.js.map +1 -0
- package/dist/crypto/ed25519.d.ts +12 -0
- package/dist/crypto/ed25519.d.ts.map +1 -0
- package/dist/crypto/ed25519.js +101 -0
- package/dist/crypto/ed25519.js.map +1 -0
- package/dist/crypto/index.d.ts +4 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +17 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/pow.d.ts +5 -0
- package/dist/crypto/pow.d.ts.map +1 -0
- package/dist/crypto/pow.js +16 -0
- package/dist/crypto/pow.js.map +1 -0
- package/dist/index.d.ts +89 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +269 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/chain.d.ts +33 -0
- package/dist/interceptors/chain.d.ts.map +1 -0
- package/dist/interceptors/chain.js +32 -0
- package/dist/interceptors/chain.js.map +1 -0
- package/dist/interceptors/index.d.ts +5 -0
- package/dist/interceptors/index.d.ts.map +1 -0
- package/dist/interceptors/index.js +10 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/llm.d.ts +13 -0
- package/dist/interceptors/llm.d.ts.map +1 -0
- package/dist/interceptors/llm.js +21 -0
- package/dist/interceptors/llm.js.map +1 -0
- package/dist/l1/base-client.d.ts +17 -0
- package/dist/l1/base-client.d.ts.map +1 -0
- package/dist/l1/base-client.js +40 -0
- package/dist/l1/base-client.js.map +1 -0
- package/dist/l1/ca.d.ts +16 -0
- package/dist/l1/ca.d.ts.map +1 -0
- package/dist/l1/ca.js +92 -0
- package/dist/l1/ca.js.map +1 -0
- package/dist/l1/dispatcher.d.ts +15 -0
- package/dist/l1/dispatcher.d.ts.map +1 -0
- package/dist/l1/dispatcher.js +68 -0
- package/dist/l1/dispatcher.js.map +1 -0
- package/dist/l1/index.d.ts +7 -0
- package/dist/l1/index.d.ts.map +1 -0
- package/dist/l1/index.js +14 -0
- package/dist/l1/index.js.map +1 -0
- package/dist/l1/reputation.d.ts +14 -0
- package/dist/l1/reputation.d.ts.map +1 -0
- package/dist/l1/reputation.js +48 -0
- package/dist/l1/reputation.js.map +1 -0
- package/dist/l1/yellow-pages.d.ts +16 -0
- package/dist/l1/yellow-pages.d.ts.map +1 -0
- package/dist/l1/yellow-pages.js +71 -0
- package/dist/l1/yellow-pages.js.map +1 -0
- package/dist/mailbox/cursor.d.ts +11 -0
- package/dist/mailbox/cursor.d.ts.map +1 -0
- package/dist/mailbox/cursor.js +79 -0
- package/dist/mailbox/cursor.js.map +1 -0
- package/dist/mailbox/index.d.ts +5 -0
- package/dist/mailbox/index.d.ts.map +1 -0
- package/dist/mailbox/index.js +10 -0
- package/dist/mailbox/index.js.map +1 -0
- package/dist/mailbox/poller.d.ts +18 -0
- package/dist/mailbox/poller.d.ts.map +1 -0
- package/dist/mailbox/poller.js +64 -0
- package/dist/mailbox/poller.js.map +1 -0
- package/dist/mailbox/sync.d.ts +13 -0
- package/dist/mailbox/sync.d.ts.map +1 -0
- package/dist/mailbox/sync.js +60 -0
- package/dist/mailbox/sync.js.map +1 -0
- package/dist/messaging/blocklist.d.ts +17 -0
- package/dist/messaging/blocklist.d.ts.map +1 -0
- package/dist/messaging/blocklist.js +110 -0
- package/dist/messaging/blocklist.js.map +1 -0
- package/dist/messaging/idgen.d.ts +3 -0
- package/dist/messaging/idgen.d.ts.map +1 -0
- package/dist/messaging/idgen.js +45 -0
- package/dist/messaging/idgen.js.map +1 -0
- package/dist/messaging/index.d.ts +4 -0
- package/dist/messaging/index.d.ts.map +1 -0
- package/dist/messaging/index.js +11 -0
- package/dist/messaging/index.js.map +1 -0
- package/dist/messaging/send.d.ts +9 -0
- package/dist/messaging/send.d.ts.map +1 -0
- package/dist/messaging/send.js +55 -0
- package/dist/messaging/send.js.map +1 -0
- package/dist/quota/index.d.ts +2 -0
- package/dist/quota/index.d.ts.map +1 -0
- package/dist/quota/index.js +6 -0
- package/dist/quota/index.js.map +1 -0
- package/dist/quota/manager.d.ts +25 -0
- package/dist/quota/manager.d.ts.map +1 -0
- package/dist/quota/manager.js +118 -0
- package/dist/quota/manager.js.map +1 -0
- package/dist/types/agent.d.ts +19 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +3 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/api.d.ts +17 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +27 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/config.d.ts +57 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/crypto.d.ts +39 -0
- package/dist/types/crypto.d.ts.map +1 -0
- package/dist/types/crypto.js +3 -0
- package/dist/types/crypto.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/l1.d.ts +129 -0
- package/dist/types/l1.d.ts.map +1 -0
- package/dist/types/l1.js +5 -0
- package/dist/types/l1.js.map +1 -0
- package/dist/types/messaging.d.ts +30 -0
- package/dist/types/messaging.d.ts.map +1 -0
- package/dist/types/messaging.js +3 -0
- package/dist/types/messaging.js.map +1 -0
- package/package.json +52 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.OceanBus = void 0;
|
|
18
|
+
exports.createOceanBus = createOceanBus;
|
|
19
|
+
const http_client_1 = require("./client/http-client");
|
|
20
|
+
const store_1 = require("./agent/store");
|
|
21
|
+
const identity_1 = require("./agent/identity");
|
|
22
|
+
const keys_1 = require("./agent/keys");
|
|
23
|
+
const send_1 = require("./messaging/send");
|
|
24
|
+
const blocklist_1 = require("./messaging/blocklist");
|
|
25
|
+
const sync_1 = require("./mailbox/sync");
|
|
26
|
+
const poller_1 = require("./mailbox/poller");
|
|
27
|
+
const cursor_1 = require("./mailbox/cursor");
|
|
28
|
+
const loader_1 = require("./config/loader");
|
|
29
|
+
const errors_1 = require("./client/errors");
|
|
30
|
+
// Crypto
|
|
31
|
+
const ed25519_1 = require("./crypto/ed25519");
|
|
32
|
+
const canonical_json_1 = require("./crypto/canonical-json");
|
|
33
|
+
// L1
|
|
34
|
+
const dispatcher_1 = require("./l1/dispatcher");
|
|
35
|
+
const yellow_pages_1 = require("./l1/yellow-pages");
|
|
36
|
+
const ca_1 = require("./l1/ca");
|
|
37
|
+
const reputation_1 = require("./l1/reputation");
|
|
38
|
+
// Interceptors
|
|
39
|
+
const chain_1 = require("./interceptors/chain");
|
|
40
|
+
const llm_1 = require("./interceptors/llm");
|
|
41
|
+
// Quota
|
|
42
|
+
const manager_1 = require("./quota/manager");
|
|
43
|
+
class OceanBus {
|
|
44
|
+
config;
|
|
45
|
+
http;
|
|
46
|
+
identity;
|
|
47
|
+
keys;
|
|
48
|
+
messaging;
|
|
49
|
+
blocklist;
|
|
50
|
+
mailbox;
|
|
51
|
+
poller = null;
|
|
52
|
+
keyStore;
|
|
53
|
+
cursor;
|
|
54
|
+
l1Dispatcher = null;
|
|
55
|
+
// Crypto
|
|
56
|
+
crypto;
|
|
57
|
+
// L1
|
|
58
|
+
l1;
|
|
59
|
+
// Interceptors
|
|
60
|
+
interceptors;
|
|
61
|
+
_quota; // internal, exposed via getter
|
|
62
|
+
constructor(config, keyStore) {
|
|
63
|
+
this.config = config;
|
|
64
|
+
this.keyStore = keyStore;
|
|
65
|
+
// HTTP client
|
|
66
|
+
this.http = new http_client_1.HttpClient(config.baseUrl, config.http);
|
|
67
|
+
// Identity
|
|
68
|
+
this.identity = new identity_1.AgentIdentityManager(this.http, config.identity?.api_key, config.identity?.agent_id);
|
|
69
|
+
// API Keys
|
|
70
|
+
this.keys = new keys_1.ApiKeyManager(this.http, () => this.identity.getApiKey());
|
|
71
|
+
// Messaging
|
|
72
|
+
this.messaging = new send_1.MessagingService(this.http, () => this.identity.getApiKey());
|
|
73
|
+
// Blocklist
|
|
74
|
+
this.blocklist = new blocklist_1.BlocklistManager(this.http, () => this.identity.getApiKey());
|
|
75
|
+
// Mailbox cursor
|
|
76
|
+
this.cursor = new cursor_1.SeqCursor();
|
|
77
|
+
this.mailbox = new sync_1.MailboxSync(this.http, () => this.identity.getApiKey(), this.cursor, config.mailbox.defaultPageSize);
|
|
78
|
+
// Interceptors
|
|
79
|
+
this.interceptors = new chain_1.InterceptorChain();
|
|
80
|
+
if (config.interceptor.enabled) {
|
|
81
|
+
// Note: noopEvaluator passes all messages — user must provide custom LLMEvaluatorFn
|
|
82
|
+
// via ob.interceptors.register(new LLMInterceptor(yourEvaluator))
|
|
83
|
+
this.interceptors.register(new llm_1.LLMInterceptor(llm_1.noopEvaluator));
|
|
84
|
+
}
|
|
85
|
+
// Quota
|
|
86
|
+
this._quota = new manager_1.QuotaManager(undefined, config.quota.dailyLimitWarnThreshold, config.quota.dailyLimit);
|
|
87
|
+
// Crypto
|
|
88
|
+
this.crypto = {
|
|
89
|
+
generateKeypair: ed25519_1.generateKeypair,
|
|
90
|
+
sign: (keypair, payload) => (0, ed25519_1.sign)(keypair.secretKey, payload),
|
|
91
|
+
verify: ed25519_1.verify,
|
|
92
|
+
canonicalize: canonical_json_1.canonicalize,
|
|
93
|
+
keypairToHex: ed25519_1.keypairToHex,
|
|
94
|
+
hexToKeypair: ed25519_1.hexToKeypair,
|
|
95
|
+
verifyCertificate: async (cert, trustedCAs) => {
|
|
96
|
+
// Use the shared CAClient if available (post-create), otherwise create a temp one
|
|
97
|
+
if (this.l1) {
|
|
98
|
+
return this.l1.ca.verifyCertificateOffline(cert);
|
|
99
|
+
}
|
|
100
|
+
const ca = new ca_1.CAClient({ send: () => Promise.resolve(), sendJson: () => Promise.resolve() }, '', trustedCAs || []);
|
|
101
|
+
return ca.verifyCertificateOffline(cert);
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
static async create(userConfig) {
|
|
106
|
+
const config = (0, loader_1.resolveConfig)(userConfig);
|
|
107
|
+
// Initialize key store
|
|
108
|
+
let keyStore;
|
|
109
|
+
if (config.keyStore.type === 'file') {
|
|
110
|
+
keyStore = new store_1.FileKeyStore(config.keyStore.filePath);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
keyStore = new store_1.MemoryKeyStore();
|
|
114
|
+
}
|
|
115
|
+
const ob = new OceanBus(config, keyStore);
|
|
116
|
+
// Load persisted identity if not provided via config
|
|
117
|
+
if (!config.identity?.api_key) {
|
|
118
|
+
const saved = await keyStore.load();
|
|
119
|
+
if (saved) {
|
|
120
|
+
ob.identity.fromState(saved);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Load persisted blocklist
|
|
124
|
+
await ob.blocklist.loadLocal();
|
|
125
|
+
// Load quota
|
|
126
|
+
await ob._quota.load();
|
|
127
|
+
// Load seq cursor
|
|
128
|
+
await ob.cursor.load();
|
|
129
|
+
// Set up shared L1 dispatcher — one polling engine for all L1 requests
|
|
130
|
+
ob.l1Dispatcher = new dispatcher_1.L1Dispatcher(ob.mailbox, config.l1.requestTimeoutMs, config.l1.requestPollIntervalMs);
|
|
131
|
+
// Initialize L1 clients
|
|
132
|
+
// L1 transport bypasses quota — infrastructure messages (heartbeat, CA, YP)
|
|
133
|
+
// are not user messages and should not count toward daily limits
|
|
134
|
+
const transport = {
|
|
135
|
+
send: (to, content, cid) => ob.messaging.send(to, content, cid),
|
|
136
|
+
sendJson: (to, data, cid) => ob.messaging.sendJson(to, data, cid),
|
|
137
|
+
};
|
|
138
|
+
ob.l1 = {
|
|
139
|
+
yellowPages: new yellow_pages_1.YellowPagesClient(transport, config.l1.ypOpenids[0] || '', ob.l1Dispatcher, config.l1.requestTimeoutMs),
|
|
140
|
+
ca: new ca_1.CAClient(transport, config.l1.trustedCAs[0]?.ca_openid || '', config.l1.trustedCAs, ob.l1Dispatcher, config.l1.requestTimeoutMs),
|
|
141
|
+
reputation: new reputation_1.ReputationClient(transport, '', ob.l1Dispatcher, config.l1.requestTimeoutMs),
|
|
142
|
+
};
|
|
143
|
+
return ob;
|
|
144
|
+
}
|
|
145
|
+
// Identity convenience methods
|
|
146
|
+
async register() {
|
|
147
|
+
const data = await this.identity.register();
|
|
148
|
+
await this.keyStore.save(this.identity.toState());
|
|
149
|
+
return data;
|
|
150
|
+
}
|
|
151
|
+
async whoami() {
|
|
152
|
+
const data = await this.identity.whoami();
|
|
153
|
+
return { agent_id: this.identity.getAgentId(), openid: data.my_openid };
|
|
154
|
+
}
|
|
155
|
+
async getOpenId() {
|
|
156
|
+
return this.identity.getOpenId();
|
|
157
|
+
}
|
|
158
|
+
// API Key convenience methods
|
|
159
|
+
async createApiKey() {
|
|
160
|
+
return this.keys.createApiKeyWithRetry();
|
|
161
|
+
}
|
|
162
|
+
async revokeApiKey(keyId) {
|
|
163
|
+
return this.keys.revokeApiKey(keyId);
|
|
164
|
+
}
|
|
165
|
+
// Messaging convenience methods
|
|
166
|
+
async send(toOpenid, content, opts) {
|
|
167
|
+
// Quota check
|
|
168
|
+
if (this.config.quota.enforceLocal) {
|
|
169
|
+
const q = await this._quota.checkAndIncrement();
|
|
170
|
+
if (!q.allowed) {
|
|
171
|
+
throw new errors_1.OceanBusError('Daily message quota exceeded');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return this.messaging.send(toOpenid, content, opts?.clientMsgId);
|
|
175
|
+
}
|
|
176
|
+
async sendJson(toOpenid, data, opts) {
|
|
177
|
+
if (this.config.quota.enforceLocal) {
|
|
178
|
+
const q = await this._quota.checkAndIncrement();
|
|
179
|
+
if (!q.allowed) {
|
|
180
|
+
throw new errors_1.OceanBusError('Daily message quota exceeded');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return this.messaging.sendJson(toOpenid, data, opts?.clientMsgId);
|
|
184
|
+
}
|
|
185
|
+
// Mailbox convenience methods
|
|
186
|
+
async sync(sinceSeq, limit) {
|
|
187
|
+
return this.mailbox.sync(sinceSeq, limit);
|
|
188
|
+
}
|
|
189
|
+
startListening(onMessage, options) {
|
|
190
|
+
if (this.poller)
|
|
191
|
+
this.poller.stop();
|
|
192
|
+
this.poller = new poller_1.AutoPollEngine(this.mailbox, async (msg) => {
|
|
193
|
+
// Run through interceptor chain
|
|
194
|
+
if (this.config.interceptor.enabled) {
|
|
195
|
+
const ctx = {
|
|
196
|
+
agentId: this.identity.getAgentId() || '',
|
|
197
|
+
timestamp: Date.now(),
|
|
198
|
+
};
|
|
199
|
+
const result = await this.interceptors.process(msg, ctx);
|
|
200
|
+
if (result.decision.action === 'block')
|
|
201
|
+
return; // silent discard
|
|
202
|
+
if (result.decision.action === 'flag') {
|
|
203
|
+
// Attach flag metadata for the handler
|
|
204
|
+
msg.flagged = true;
|
|
205
|
+
msg.flagReason = result.decision.reason;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
await onMessage(msg);
|
|
209
|
+
}, (err) => { console.error('[oceanbus] listen error:', err.message); }, options?.intervalMs ?? this.config.mailbox.pollIntervalMs);
|
|
210
|
+
this.poller.start();
|
|
211
|
+
return () => {
|
|
212
|
+
if (this.poller) {
|
|
213
|
+
this.poller.stop();
|
|
214
|
+
this.poller = null;
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
stopListening() {
|
|
219
|
+
if (this.poller) {
|
|
220
|
+
this.poller.stop();
|
|
221
|
+
this.poller = null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Blocklist convenience methods
|
|
225
|
+
async blockSender(fromOpenid) {
|
|
226
|
+
return this.blocklist.block(fromOpenid);
|
|
227
|
+
}
|
|
228
|
+
async unblockSender(fromOpenid) {
|
|
229
|
+
return this.blocklist.unblock(fromOpenid);
|
|
230
|
+
}
|
|
231
|
+
isBlocked(fromOpenid) {
|
|
232
|
+
return this.blocklist.isBlocked(fromOpenid);
|
|
233
|
+
}
|
|
234
|
+
getBlocklist() {
|
|
235
|
+
return this.blocklist.getBlocklist();
|
|
236
|
+
}
|
|
237
|
+
async reverseLookup(openid) {
|
|
238
|
+
return this.blocklist.reverseLookup(openid);
|
|
239
|
+
}
|
|
240
|
+
// Quota convenience methods
|
|
241
|
+
get quota() {
|
|
242
|
+
return {
|
|
243
|
+
getDailyUsage: () => this._quota.getUsage(),
|
|
244
|
+
resetDailyCount: () => this._quota.reset(),
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
// Lifecycle
|
|
248
|
+
async destroy() {
|
|
249
|
+
this.stopListening();
|
|
250
|
+
if (this.l1Dispatcher) {
|
|
251
|
+
this.l1Dispatcher.destroy();
|
|
252
|
+
this.l1Dispatcher = null;
|
|
253
|
+
}
|
|
254
|
+
if (this.identity.getAgentId()) {
|
|
255
|
+
await this.keyStore.save(this.identity.toState());
|
|
256
|
+
}
|
|
257
|
+
await this.cursor.save();
|
|
258
|
+
await this.blocklist.saveLocal();
|
|
259
|
+
await this._quota.save();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.OceanBus = OceanBus;
|
|
263
|
+
async function createOceanBus(config) {
|
|
264
|
+
return OceanBus.create(config);
|
|
265
|
+
}
|
|
266
|
+
// Re-export all types
|
|
267
|
+
__exportStar(require("./types"), exports);
|
|
268
|
+
__exportStar(require("./client/errors"), exports);
|
|
269
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Message } from '../types/messaging';
|
|
2
|
+
export interface InterceptorContext {
|
|
3
|
+
agentId: string;
|
|
4
|
+
timestamp: number;
|
|
5
|
+
sessionCount?: number;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
export type InterceptorDecision = {
|
|
9
|
+
action: 'pass';
|
|
10
|
+
} | {
|
|
11
|
+
action: 'flag';
|
|
12
|
+
reason: string;
|
|
13
|
+
risk: 'low' | 'medium' | 'high';
|
|
14
|
+
} | {
|
|
15
|
+
action: 'block';
|
|
16
|
+
reason: string;
|
|
17
|
+
};
|
|
18
|
+
export interface MessageInterceptor {
|
|
19
|
+
name: string;
|
|
20
|
+
priority: number;
|
|
21
|
+
evaluate(message: Message, context: InterceptorContext): Promise<InterceptorDecision>;
|
|
22
|
+
}
|
|
23
|
+
export declare class InterceptorChain {
|
|
24
|
+
private interceptors;
|
|
25
|
+
register(interceptor: MessageInterceptor): void;
|
|
26
|
+
remove(name: string): boolean;
|
|
27
|
+
list(): ReadonlyArray<MessageInterceptor>;
|
|
28
|
+
process(message: Message, context: InterceptorContext): Promise<{
|
|
29
|
+
decision: InterceptorDecision;
|
|
30
|
+
by: string;
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/interceptors/chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;CAAE,GACnE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACvF;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAA4B;IAEhD,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;IAM/C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAO7B,IAAI,IAAI,aAAa,CAAC,kBAAkB,CAAC;IAInC,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;QAAE,QAAQ,EAAE,mBAAmB,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAS1D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InterceptorChain = void 0;
|
|
4
|
+
class InterceptorChain {
|
|
5
|
+
interceptors = [];
|
|
6
|
+
register(interceptor) {
|
|
7
|
+
this.interceptors.push(interceptor);
|
|
8
|
+
// Sort by priority (higher runs first)
|
|
9
|
+
this.interceptors.sort((a, b) => b.priority - a.priority);
|
|
10
|
+
}
|
|
11
|
+
remove(name) {
|
|
12
|
+
const idx = this.interceptors.findIndex((i) => i.name === name);
|
|
13
|
+
if (idx === -1)
|
|
14
|
+
return false;
|
|
15
|
+
this.interceptors.splice(idx, 1);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
list() {
|
|
19
|
+
return this.interceptors;
|
|
20
|
+
}
|
|
21
|
+
async process(message, context) {
|
|
22
|
+
for (const interceptor of this.interceptors) {
|
|
23
|
+
const decision = await interceptor.evaluate(message, context);
|
|
24
|
+
if (decision.action === 'block' || decision.action === 'flag') {
|
|
25
|
+
return { decision, by: interceptor.name };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return { decision: { action: 'pass' }, by: 'default' };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.InterceptorChain = InterceptorChain;
|
|
32
|
+
//# sourceMappingURL=chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/interceptors/chain.ts"],"names":[],"mappings":";;;AAoBA,MAAa,gBAAgB;IACnB,YAAY,GAAyB,EAAE,CAAC;IAEhD,QAAQ,CAAC,WAA+B;QACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,uCAAuC;QACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChE,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAgB,EAChB,OAA2B;QAE3B,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9D,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9D,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;IACzD,CAAC;CACF;AAhCD,4CAgCC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { InterceptorChain } from './chain';
|
|
2
|
+
export type { MessageInterceptor, InterceptorContext, InterceptorDecision } from './chain';
|
|
3
|
+
export { LLMInterceptor, DEFAULT_SECURITY_PROMPT, noopEvaluator } from './llm';
|
|
4
|
+
export type { LLMEvaluatorFn } from './llm';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interceptors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.noopEvaluator = exports.DEFAULT_SECURITY_PROMPT = exports.LLMInterceptor = exports.InterceptorChain = void 0;
|
|
4
|
+
var chain_1 = require("./chain");
|
|
5
|
+
Object.defineProperty(exports, "InterceptorChain", { enumerable: true, get: function () { return chain_1.InterceptorChain; } });
|
|
6
|
+
var llm_1 = require("./llm");
|
|
7
|
+
Object.defineProperty(exports, "LLMInterceptor", { enumerable: true, get: function () { return llm_1.LLMInterceptor; } });
|
|
8
|
+
Object.defineProperty(exports, "DEFAULT_SECURITY_PROMPT", { enumerable: true, get: function () { return llm_1.DEFAULT_SECURITY_PROMPT; } });
|
|
9
|
+
Object.defineProperty(exports, "noopEvaluator", { enumerable: true, get: function () { return llm_1.noopEvaluator; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interceptors/index.ts"],"names":[],"mappings":";;;AAAA,iCAA2C;AAAlC,yGAAA,gBAAgB,OAAA;AAEzB,6BAA+E;AAAtE,qGAAA,cAAc,OAAA;AAAE,8GAAA,uBAAuB,OAAA;AAAE,oGAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MessageInterceptor, InterceptorContext, InterceptorDecision } from './chain';
|
|
2
|
+
import type { Message } from '../types/messaging';
|
|
3
|
+
export type LLMEvaluatorFn = (message: Message, context: InterceptorContext) => Promise<InterceptorDecision>;
|
|
4
|
+
export declare class LLMInterceptor implements MessageInterceptor {
|
|
5
|
+
name: string;
|
|
6
|
+
priority: number;
|
|
7
|
+
private evaluator;
|
|
8
|
+
constructor(evaluator: LLMEvaluatorFn);
|
|
9
|
+
evaluate(message: Message, context: InterceptorContext): Promise<InterceptorDecision>;
|
|
10
|
+
}
|
|
11
|
+
export declare const DEFAULT_SECURITY_PROMPT = "\u4F60\u662F\u4E3B\u4EBA\u7684\u672C\u5730\u53CD\u8BC8\u5B89\u5168\u5B88\u536B\u3002\u8BF7\u5206\u6790\u4EE5\u4E0B\u89E3\u5BC6\u4FE1\u606F\u3002\u5982\u679C\u5176\u4E2D\u5305\u542B\u660E\u663E\u7684\"\u65E0\u62C5\u4FDD\u4EA4\u6613\u8981\u6C42\"\u3001\"\u9493\u9C7C\u5916\u90E8\u94FE\u63A5\"\u3001\"\u5192\u5145\u5B98\u65B9\u5BA2\u670D\"\u7B49\u5178\u578B\u6B3A\u8BC8\u7279\u5F81\uFF0C\u8BF7\u76F4\u63A5\u8FD4\u56DE [BLOCK]\uFF0C\u5E76\u5728\u672C\u5730\u9759\u9ED8\u9500\u6BC1\u8BE5\u6D88\u606F\u3002";
|
|
12
|
+
export declare const noopEvaluator: LLMEvaluatorFn;
|
|
13
|
+
//# sourceMappingURL=llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/interceptors/llm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC3F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,kBAAkB,KACxB,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAElC,qBAAa,cAAe,YAAW,kBAAkB;IACvD,IAAI,SAA0B;IAC9B,QAAQ,SAAO;IACf,OAAO,CAAC,SAAS,CAAiB;gBAEtB,SAAS,EAAE,cAAc;IAI/B,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAG5F;AAGD,eAAO,MAAM,uBAAuB,yfAAmG,CAAC;AAGxI,eAAO,MAAM,aAAa,EAAE,cAAiD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.noopEvaluator = exports.DEFAULT_SECURITY_PROMPT = exports.LLMInterceptor = void 0;
|
|
4
|
+
class LLMInterceptor {
|
|
5
|
+
name = 'llm-security-scanner';
|
|
6
|
+
priority = 100;
|
|
7
|
+
evaluator;
|
|
8
|
+
constructor(evaluator) {
|
|
9
|
+
this.evaluator = evaluator;
|
|
10
|
+
}
|
|
11
|
+
async evaluate(message, context) {
|
|
12
|
+
return this.evaluator(message, context);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.LLMInterceptor = LLMInterceptor;
|
|
16
|
+
// Default system prompt for LLM-based fraud detection
|
|
17
|
+
exports.DEFAULT_SECURITY_PROMPT = `你是主人的本地反诈安全守卫。请分析以下解密信息。如果其中包含明显的"无担保交易要求"、"钓鱼外部链接"、"冒充官方客服"等典型欺诈特征,请直接返回 [BLOCK],并在本地静默销毁该消息。`;
|
|
18
|
+
// No-op evaluator that passes everything (default when no LLM configured)
|
|
19
|
+
const noopEvaluator = async () => ({ action: 'pass' });
|
|
20
|
+
exports.noopEvaluator = noopEvaluator;
|
|
21
|
+
//# sourceMappingURL=llm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/interceptors/llm.ts"],"names":[],"mappings":";;;AAQA,MAAa,cAAc;IACzB,IAAI,GAAG,sBAAsB,CAAC;IAC9B,QAAQ,GAAG,GAAG,CAAC;IACP,SAAS,CAAiB;IAElC,YAAY,SAAyB;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAgB,EAAE,OAA2B;QAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF;AAZD,wCAYC;AAED,sDAAsD;AACzC,QAAA,uBAAuB,GAAG,gGAAgG,CAAC;AAExI,0EAA0E;AACnE,MAAM,aAAa,GAAmB,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAAjE,QAAA,aAAa,iBAAoD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { L1Request, L1Response } from '../types/l1';
|
|
2
|
+
import type { L1Dispatcher } from './dispatcher';
|
|
3
|
+
export interface L1Transport {
|
|
4
|
+
send(toOpenid: string, content: string, clientMsgId?: string): Promise<void>;
|
|
5
|
+
sendJson(toOpenid: string, data: object, clientMsgId?: string): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare class L1Client {
|
|
8
|
+
protected sendFn: L1Transport;
|
|
9
|
+
protected serviceOpenid: string;
|
|
10
|
+
protected requestTimeoutMs: number;
|
|
11
|
+
private dispatcher;
|
|
12
|
+
constructor(sendFn: L1Transport, serviceOpenid: string, dispatcher?: L1Dispatcher, requestTimeoutMs?: number);
|
|
13
|
+
setDispatcher(dispatcher: L1Dispatcher): void;
|
|
14
|
+
protected buildRequest(action: string, extra?: Record<string, unknown>): L1Request;
|
|
15
|
+
sendAction(request: L1Request): Promise<L1Response>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=base-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-client.d.ts","sourceRoot":"","sources":["../../src/l1/base-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAED,qBAAa,QAAQ;IACnB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;IAC9B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,OAAO,CAAC,UAAU,CAAsB;gBAGtC,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,YAAY,EACzB,gBAAgB,GAAE,MAAc;IAQlC,aAAa,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI;IAI7C,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,SAAS;IAQhF,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;CAc1D"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.L1Client = void 0;
|
|
4
|
+
const idgen_1 = require("../messaging/idgen");
|
|
5
|
+
const errors_1 = require("../client/errors");
|
|
6
|
+
class L1Client {
|
|
7
|
+
sendFn;
|
|
8
|
+
serviceOpenid;
|
|
9
|
+
requestTimeoutMs;
|
|
10
|
+
dispatcher;
|
|
11
|
+
constructor(sendFn, serviceOpenid, dispatcher, requestTimeoutMs = 30000) {
|
|
12
|
+
this.sendFn = sendFn;
|
|
13
|
+
this.serviceOpenid = serviceOpenid;
|
|
14
|
+
this.dispatcher = dispatcher || null;
|
|
15
|
+
this.requestTimeoutMs = requestTimeoutMs;
|
|
16
|
+
}
|
|
17
|
+
setDispatcher(dispatcher) {
|
|
18
|
+
this.dispatcher = dispatcher;
|
|
19
|
+
}
|
|
20
|
+
buildRequest(action, extra = {}) {
|
|
21
|
+
return {
|
|
22
|
+
action,
|
|
23
|
+
request_id: (0, idgen_1.generateRequestId)(),
|
|
24
|
+
...extra,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async sendAction(request) {
|
|
28
|
+
if (!this.dispatcher) {
|
|
29
|
+
throw new errors_1.OceanBusError('L1 dispatcher not configured');
|
|
30
|
+
}
|
|
31
|
+
// Register pending request with dispatcher BEFORE sending
|
|
32
|
+
const responsePromise = this.dispatcher.register(request.request_id, this.requestTimeoutMs);
|
|
33
|
+
// Send the request
|
|
34
|
+
await this.sendFn.sendJson(this.serviceOpenid, request);
|
|
35
|
+
// Wait for the shared dispatcher to match the response
|
|
36
|
+
return responsePromise;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.L1Client = L1Client;
|
|
40
|
+
//# sourceMappingURL=base-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-client.js","sourceRoot":"","sources":["../../src/l1/base-client.ts"],"names":[],"mappings":";;;AACA,8CAAuD;AACvD,6CAAiD;AAQjD,MAAa,QAAQ;IACT,MAAM,CAAc;IACpB,aAAa,CAAS;IACtB,gBAAgB,CAAS;IAC3B,UAAU,CAAsB;IAExC,YACE,MAAmB,EACnB,aAAqB,EACrB,UAAyB,EACzB,mBAA2B,KAAK;QAEhC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;IAED,aAAa,CAAC,UAAwB;QACpC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAES,YAAY,CAAC,MAAc,EAAE,QAAiC,EAAE;QACxE,OAAO;YACL,MAAM;YACN,UAAU,EAAE,IAAA,yBAAiB,GAAE;YAC/B,GAAG,KAAK;SACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAkB;QACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,sBAAa,CAAC,8BAA8B,CAAC,CAAC;QAC1D,CAAC;QAED,0DAA0D;QAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE5F,mBAAmB;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAExD,uDAAuD;QACvD,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AA5CD,4BA4CC"}
|
package/dist/l1/ca.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { L1Client, L1Transport } from './base-client';
|
|
2
|
+
import type { L1Dispatcher } from './dispatcher';
|
|
3
|
+
import type { CaApplyRequest } from '../types/l1';
|
|
4
|
+
import type { L1Response } from '../types/l1';
|
|
5
|
+
import type { Certificate, TrustAnchor, CertVerifyResult } from '../types/crypto';
|
|
6
|
+
export declare class CAClient extends L1Client {
|
|
7
|
+
private trustedCAs;
|
|
8
|
+
constructor(sendFn: L1Transport, serviceOpenid: string, trustedCAs?: TrustAnchor[], dispatcher?: L1Dispatcher, requestTimeoutMs?: number);
|
|
9
|
+
addTrustAnchor(anchor: TrustAnchor): void;
|
|
10
|
+
applyCert(application: CaApplyRequest['application']): Promise<L1Response>;
|
|
11
|
+
challengeResponse(applicationId: string, signedNonce: string): Promise<L1Response>;
|
|
12
|
+
verifyCertOnline(certId: string): Promise<L1Response>;
|
|
13
|
+
getCRL(): Promise<L1Response>;
|
|
14
|
+
verifyCertificateOffline(certificate: Certificate): Promise<CertVerifyResult>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ca.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ca.d.ts","sourceRoot":"","sources":["../../src/l1/ca.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGlF,qBAAa,QAAS,SAAQ,QAAQ;IACpC,OAAO,CAAC,UAAU,CAAuC;gBAGvD,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,MAAM,EACrB,UAAU,GAAE,WAAW,EAAO,EAC9B,UAAU,CAAC,EAAE,YAAY,EACzB,gBAAgB,GAAE,MAAc;IAgBlC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAUnC,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAS1E,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAUlF,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IASrD,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;IAQ7B,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA+BpF"}
|
package/dist/l1/ca.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CAClient = void 0;
|
|
4
|
+
const base_client_1 = require("./base-client");
|
|
5
|
+
const crypto_1 = require("../crypto");
|
|
6
|
+
class CAClient extends base_client_1.L1Client {
|
|
7
|
+
trustedCAs;
|
|
8
|
+
constructor(sendFn, serviceOpenid, trustedCAs = [], dispatcher, requestTimeoutMs = 30000) {
|
|
9
|
+
super(sendFn, serviceOpenid, dispatcher, requestTimeoutMs);
|
|
10
|
+
this.trustedCAs = new Map();
|
|
11
|
+
for (const ca of trustedCAs) {
|
|
12
|
+
const keyMap = new Map();
|
|
13
|
+
for (const key of ca.keys) {
|
|
14
|
+
if (key.status === 'active') {
|
|
15
|
+
keyMap.set(key.key_id, (0, crypto_1.hexToBuffer)(key.public_key.replace('ed25519:', '')));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
this.trustedCAs.set(ca.issuer, keyMap);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
addTrustAnchor(anchor) {
|
|
22
|
+
const keyMap = new Map();
|
|
23
|
+
for (const key of anchor.keys) {
|
|
24
|
+
if (key.status === 'active') {
|
|
25
|
+
keyMap.set(key.key_id, (0, crypto_1.hexToBuffer)(key.public_key.replace('ed25519:', '')));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
this.trustedCAs.set(anchor.issuer, keyMap);
|
|
29
|
+
}
|
|
30
|
+
async applyCert(application) {
|
|
31
|
+
const request = {
|
|
32
|
+
...this.buildRequest('apply_cert'),
|
|
33
|
+
action: 'apply_cert',
|
|
34
|
+
application,
|
|
35
|
+
};
|
|
36
|
+
return this.sendAction(request);
|
|
37
|
+
}
|
|
38
|
+
async challengeResponse(applicationId, signedNonce) {
|
|
39
|
+
const request = {
|
|
40
|
+
...this.buildRequest('cert_challenge_response'),
|
|
41
|
+
action: 'cert_challenge_response',
|
|
42
|
+
application_id: applicationId,
|
|
43
|
+
signed_nonce: signedNonce,
|
|
44
|
+
};
|
|
45
|
+
return this.sendAction(request);
|
|
46
|
+
}
|
|
47
|
+
async verifyCertOnline(certId) {
|
|
48
|
+
const request = {
|
|
49
|
+
...this.buildRequest('verify_cert'),
|
|
50
|
+
action: 'verify_cert',
|
|
51
|
+
cert_id: certId,
|
|
52
|
+
};
|
|
53
|
+
return this.sendAction(request);
|
|
54
|
+
}
|
|
55
|
+
async getCRL() {
|
|
56
|
+
const request = {
|
|
57
|
+
...this.buildRequest('get_crl'),
|
|
58
|
+
action: 'get_crl',
|
|
59
|
+
};
|
|
60
|
+
return this.sendAction(request);
|
|
61
|
+
}
|
|
62
|
+
async verifyCertificateOffline(certificate) {
|
|
63
|
+
try {
|
|
64
|
+
const issuerKeys = this.trustedCAs.get(certificate.cert.issuer);
|
|
65
|
+
if (!issuerKeys) {
|
|
66
|
+
return { valid: false, error: `Unknown CA issuer: ${certificate.cert.issuer}` };
|
|
67
|
+
}
|
|
68
|
+
const caPk = issuerKeys.get(certificate.cert.issuer_key_id);
|
|
69
|
+
if (!caPk) {
|
|
70
|
+
return { valid: false, error: `Unknown CA key_id: ${certificate.cert.issuer_key_id}` };
|
|
71
|
+
}
|
|
72
|
+
const valid = await (0, crypto_1.verify)(caPk, certificate.cert, certificate.sig);
|
|
73
|
+
if (!valid) {
|
|
74
|
+
return { valid: false, error: 'Signature verification failed' };
|
|
75
|
+
}
|
|
76
|
+
const now = new Date();
|
|
77
|
+
const expires = new Date(certificate.cert.expires_at);
|
|
78
|
+
if (isNaN(expires.getTime())) {
|
|
79
|
+
return { valid: false, error: 'Invalid expiry date' };
|
|
80
|
+
}
|
|
81
|
+
if (now > expires) {
|
|
82
|
+
return { valid: false, error: 'Certificate expired' };
|
|
83
|
+
}
|
|
84
|
+
return { valid: true, level: certificate.cert.level };
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
return { valid: false, error: err.message };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.CAClient = CAClient;
|
|
92
|
+
//# sourceMappingURL=ca.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ca.js","sourceRoot":"","sources":["../../src/l1/ca.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MailboxSync } from '../mailbox/sync';
|
|
2
|
+
import type { L1Response } from '../types/l1';
|
|
3
|
+
export declare class L1Dispatcher {
|
|
4
|
+
private mailbox;
|
|
5
|
+
private engine;
|
|
6
|
+
private pending;
|
|
7
|
+
private requestTimeoutMs;
|
|
8
|
+
private pollIntervalMs;
|
|
9
|
+
constructor(mailbox: MailboxSync, requestTimeoutMs?: number, pollIntervalMs?: number);
|
|
10
|
+
private dispatch;
|
|
11
|
+
register(requestId: string, timeoutMs?: number): Promise<L1Response>;
|
|
12
|
+
get pendingCount(): number;
|
|
13
|
+
destroy(): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/l1/dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQ9C,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,cAAc,CAAS;gBAG7B,OAAO,EAAE,WAAW,EACpB,gBAAgB,GAAE,MAAc,EAChC,cAAc,GAAE,MAAa;IAO/B,OAAO,CAAC,QAAQ;IAmBhB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA4BpE,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,OAAO,IAAI,IAAI;CAYhB"}
|