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
|
@@ -0,0 +1,110 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.BlocklistManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const errors_1 = require("../client/errors");
|
|
41
|
+
class BlocklistManager {
|
|
42
|
+
http;
|
|
43
|
+
getApiKey;
|
|
44
|
+
blocked;
|
|
45
|
+
filePath;
|
|
46
|
+
constructor(http, getApiKey, filePath) {
|
|
47
|
+
this.http = http;
|
|
48
|
+
this.getApiKey = getApiKey;
|
|
49
|
+
this.blocked = new Set();
|
|
50
|
+
this.filePath = filePath || path.join(os.homedir(), '.oceanbus', 'blocklist.json');
|
|
51
|
+
}
|
|
52
|
+
async loadLocal() {
|
|
53
|
+
try {
|
|
54
|
+
const raw = await fs.promises.readFile(this.filePath, 'utf-8');
|
|
55
|
+
const data = JSON.parse(raw);
|
|
56
|
+
if (Array.isArray(data.blocked)) {
|
|
57
|
+
this.blocked = new Set(data.blocked);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
this.blocked = new Set();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async saveLocal() {
|
|
65
|
+
const dir = path.dirname(this.filePath);
|
|
66
|
+
await fs.promises.mkdir(dir, { recursive: true });
|
|
67
|
+
const data = { blocked: Array.from(this.blocked) };
|
|
68
|
+
await fs.promises.writeFile(this.filePath, JSON.stringify(data, null, 2), { mode: 0o600 });
|
|
69
|
+
}
|
|
70
|
+
async block(fromOpenid) {
|
|
71
|
+
const apiKey = this.getApiKey();
|
|
72
|
+
if (!apiKey)
|
|
73
|
+
throw new errors_1.OceanBusError('Not authenticated');
|
|
74
|
+
await this.http.post('/messages/block', { from_openid: fromOpenid }, { apiKey });
|
|
75
|
+
this.blocked.add(fromOpenid);
|
|
76
|
+
await this.saveLocal();
|
|
77
|
+
}
|
|
78
|
+
async unblock(fromOpenid) {
|
|
79
|
+
const apiKey = this.getApiKey();
|
|
80
|
+
if (!apiKey)
|
|
81
|
+
throw new errors_1.OceanBusError('Not authenticated');
|
|
82
|
+
// API may not support unblock yet — treat as best-effort
|
|
83
|
+
try {
|
|
84
|
+
await this.http.del(`/messages/block/${encodeURIComponent(fromOpenid)}`, { apiKey });
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Server may not support unblock endpoint
|
|
88
|
+
}
|
|
89
|
+
this.blocked.delete(fromOpenid);
|
|
90
|
+
await this.saveLocal();
|
|
91
|
+
}
|
|
92
|
+
isBlocked(fromOpenid) {
|
|
93
|
+
return this.blocked.has(fromOpenid);
|
|
94
|
+
}
|
|
95
|
+
getBlocklist() {
|
|
96
|
+
return Array.from(this.blocked);
|
|
97
|
+
}
|
|
98
|
+
async reverseLookup(openid) {
|
|
99
|
+
const apiKey = this.getApiKey();
|
|
100
|
+
if (!apiKey)
|
|
101
|
+
throw new errors_1.OceanBusError('Not authenticated');
|
|
102
|
+
const res = await this.http.get('/internal/reverse-lookup', {
|
|
103
|
+
apiKey,
|
|
104
|
+
query: { openid },
|
|
105
|
+
});
|
|
106
|
+
return res.data;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.BlocklistManager = BlocklistManager;
|
|
110
|
+
//# sourceMappingURL=blocklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocklist.js","sourceRoot":"","sources":["../../src/messaging/blocklist.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAGzB,6CAAiD;AAEjD,MAAa,gBAAgB;IACnB,IAAI,CAAa;IACjB,SAAS,CAAsB;IAC/B,OAAO,CAAc;IACrB,QAAQ,CAAS;IAEzB,YAAY,IAAgB,EAAE,SAA8B,EAAE,QAAiB;QAC7E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,sBAAa,CAAC,mBAAmB,CAAC,CAAC;QAE1D,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAEjF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,sBAAa,CAAC,mBAAmB,CAAC,CAAC;QAE1D,yDAAyD;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,kBAAkB,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,UAAkB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,sBAAa,CAAC,mBAAmB,CAAC,CAAC;QAE1D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAoB,0BAA0B,EAAE;YAC7E,MAAM;YACN,KAAK,EAAE,EAAE,MAAM,EAAE;SAClB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;CACF;AA3ED,4CA2EC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idgen.d.ts","sourceRoot":"","sources":["../../src/messaging/idgen.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -0,0 +1,45 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateClientMsgId = generateClientMsgId;
|
|
37
|
+
exports.generateRequestId = generateRequestId;
|
|
38
|
+
const crypto = __importStar(require("crypto"));
|
|
39
|
+
function generateClientMsgId() {
|
|
40
|
+
return `msg_${Date.now()}_${crypto.randomUUID()}`;
|
|
41
|
+
}
|
|
42
|
+
function generateRequestId() {
|
|
43
|
+
return `req_${Date.now()}_${crypto.randomUUID()}`;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=idgen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idgen.js","sourceRoot":"","sources":["../../src/messaging/idgen.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,kDAEC;AAED,8CAEC;AARD,+CAAiC;AAEjC,SAAgB,mBAAmB;IACjC,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;AACpD,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRequestId = exports.generateClientMsgId = exports.BlocklistManager = exports.MessagingService = void 0;
|
|
4
|
+
var send_1 = require("./send");
|
|
5
|
+
Object.defineProperty(exports, "MessagingService", { enumerable: true, get: function () { return send_1.MessagingService; } });
|
|
6
|
+
var blocklist_1 = require("./blocklist");
|
|
7
|
+
Object.defineProperty(exports, "BlocklistManager", { enumerable: true, get: function () { return blocklist_1.BlocklistManager; } });
|
|
8
|
+
var idgen_1 = require("./idgen");
|
|
9
|
+
Object.defineProperty(exports, "generateClientMsgId", { enumerable: true, get: function () { return idgen_1.generateClientMsgId; } });
|
|
10
|
+
Object.defineProperty(exports, "generateRequestId", { enumerable: true, get: function () { return idgen_1.generateRequestId; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":";;;AAAA,+BAA0C;AAAjC,wGAAA,gBAAgB,OAAA;AACzB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AACzB,iCAAiE;AAAxD,4GAAA,mBAAmB,OAAA;AAAE,0GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { HttpClient } from '../client/http-client';
|
|
2
|
+
export declare class MessagingService {
|
|
3
|
+
private http;
|
|
4
|
+
private getApiKey;
|
|
5
|
+
constructor(http: HttpClient, getApiKey: () => string | null);
|
|
6
|
+
send(toOpenid: string, content: string, clientMsgId?: string): Promise<void>;
|
|
7
|
+
sendJson(toOpenid: string, data: object, clientMsgId?: string): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=send.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/messaging/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAQnD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAsB;gBAE3B,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,GAAG,IAAI;IAKtD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC5E,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIpF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessagingService = void 0;
|
|
4
|
+
const api_1 = require("../types/api");
|
|
5
|
+
const errors_1 = require("../client/errors");
|
|
6
|
+
const idgen_1 = require("./idgen");
|
|
7
|
+
const MAX_CONTENT_LENGTH = 2000;
|
|
8
|
+
class MessagingService {
|
|
9
|
+
http;
|
|
10
|
+
getApiKey;
|
|
11
|
+
constructor(http, getApiKey) {
|
|
12
|
+
this.http = http;
|
|
13
|
+
this.getApiKey = getApiKey;
|
|
14
|
+
}
|
|
15
|
+
async send(toOpenid, content, clientMsgId) {
|
|
16
|
+
if (!toOpenid || toOpenid.trim().length === 0) {
|
|
17
|
+
throw new errors_1.OceanBusError('toOpenid must not be empty');
|
|
18
|
+
}
|
|
19
|
+
const apiKey = this.getApiKey();
|
|
20
|
+
if (!apiKey)
|
|
21
|
+
throw new errors_1.OceanBusError('Not authenticated');
|
|
22
|
+
// Validate content length
|
|
23
|
+
if (content.length > MAX_CONTENT_LENGTH) {
|
|
24
|
+
throw new errors_1.OceanBusError(`Content exceeds ${MAX_CONTENT_LENGTH} character limit (${content.length})`);
|
|
25
|
+
}
|
|
26
|
+
const payload = {
|
|
27
|
+
to_openid: toOpenid,
|
|
28
|
+
client_msg_id: clientMsgId || (0, idgen_1.generateClientMsgId)(),
|
|
29
|
+
content,
|
|
30
|
+
};
|
|
31
|
+
try {
|
|
32
|
+
await this.http.post('/messages', payload, { apiKey });
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err instanceof errors_1.ApiError) {
|
|
36
|
+
if (err.code === api_1.ErrorCode.BLOCKED_RECIPIENT) {
|
|
37
|
+
throw new errors_1.OceanBusError('Message blocked: recipient has blocked this sender');
|
|
38
|
+
}
|
|
39
|
+
if (err.code === api_1.ErrorCode.INVALID_OPENID) {
|
|
40
|
+
throw new errors_1.OceanBusError('Invalid recipient OpenID');
|
|
41
|
+
}
|
|
42
|
+
if (err.code === api_1.ErrorCode.CONTENT_TOO_LONG) {
|
|
43
|
+
throw new errors_1.OceanBusError(`Content too long (max ${MAX_CONTENT_LENGTH} chars)`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
throw err;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async sendJson(toOpenid, data, clientMsgId) {
|
|
50
|
+
const content = JSON.stringify(data);
|
|
51
|
+
return this.send(toOpenid, content, clientMsgId);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.MessagingService = MessagingService;
|
|
55
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/messaging/send.ts"],"names":[],"mappings":";;;AAEA,sCAAyC;AACzC,6CAA2D;AAC3D,mCAA8C;AAE9C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAa,gBAAgB;IACnB,IAAI,CAAa;IACjB,SAAS,CAAsB;IAEvC,YAAY,IAAgB,EAAE,SAA8B;QAC1D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAe,EAAE,WAAoB;QAChE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,sBAAa,CAAC,4BAA4B,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,sBAAa,CAAC,mBAAmB,CAAC,CAAC;QAE1D,0BAA0B;QAC1B,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACxC,MAAM,IAAI,sBAAa,CAAC,mBAAmB,kBAAkB,qBAAqB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACvG,CAAC;QAED,MAAM,OAAO,GAAgB;YAC3B,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,WAAW,IAAI,IAAA,2BAAmB,GAAE;YACnD,OAAO;SACR,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,iBAAQ,EAAE,CAAC;gBAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,eAAS,CAAC,iBAAiB,EAAE,CAAC;oBAC7C,MAAM,IAAI,sBAAa,CAAC,oDAAoD,CAAC,CAAC;gBAChF,CAAC;gBACD,IAAI,GAAG,CAAC,IAAI,KAAK,eAAS,CAAC,cAAc,EAAE,CAAC;oBAC1C,MAAM,IAAI,sBAAa,CAAC,0BAA0B,CAAC,CAAC;gBACtD,CAAC;gBACD,IAAI,GAAG,CAAC,IAAI,KAAK,eAAS,CAAC,gBAAgB,EAAE,CAAC;oBAC5C,MAAM,IAAI,sBAAa,CAAC,yBAAyB,kBAAkB,SAAS,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,IAAY,EAAE,WAAoB;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;CACF;AAlDD,4CAkDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/quota/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QuotaManager = void 0;
|
|
4
|
+
var manager_1 = require("./manager");
|
|
5
|
+
Object.defineProperty(exports, "QuotaManager", { enumerable: true, get: function () { return manager_1.QuotaManager; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quota/index.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AAAhC,uGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare class QuotaManager {
|
|
2
|
+
private filePath;
|
|
3
|
+
private dailyCount;
|
|
4
|
+
private date;
|
|
5
|
+
private warnThreshold;
|
|
6
|
+
private dailyLimit;
|
|
7
|
+
private lock;
|
|
8
|
+
constructor(filePath?: string, warnThreshold?: number, dailyLimit?: number);
|
|
9
|
+
load(): Promise<void>;
|
|
10
|
+
save(): Promise<void>;
|
|
11
|
+
private resetIfNewDay;
|
|
12
|
+
checkAndIncrement(): Promise<{
|
|
13
|
+
allowed: boolean;
|
|
14
|
+
remaining: number;
|
|
15
|
+
warning: boolean;
|
|
16
|
+
}>;
|
|
17
|
+
getUsage(): {
|
|
18
|
+
used: number;
|
|
19
|
+
limit: number;
|
|
20
|
+
remaining: number;
|
|
21
|
+
};
|
|
22
|
+
setLimit(limit: number): void;
|
|
23
|
+
reset(): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/quota/manager.ts"],"names":[],"mappings":"AAIA,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAoC;gBAEpC,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,GAAE,MAAY,EAAE,UAAU,GAAE,MAAY;IAM9E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,OAAO,CAAC,aAAa;IAQf,iBAAiB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IA6B7F,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAS9D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.QuotaManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
class QuotaManager {
|
|
41
|
+
filePath;
|
|
42
|
+
dailyCount = 0;
|
|
43
|
+
date = '';
|
|
44
|
+
warnThreshold;
|
|
45
|
+
dailyLimit;
|
|
46
|
+
lock = Promise.resolve();
|
|
47
|
+
constructor(filePath, warnThreshold = 0.8, dailyLimit = 100) {
|
|
48
|
+
this.filePath = filePath || path.join(os.homedir(), '.oceanbus', 'quota.json');
|
|
49
|
+
this.warnThreshold = warnThreshold;
|
|
50
|
+
this.dailyLimit = dailyLimit;
|
|
51
|
+
}
|
|
52
|
+
async load() {
|
|
53
|
+
try {
|
|
54
|
+
const raw = await fs.promises.readFile(this.filePath, 'utf-8');
|
|
55
|
+
const data = JSON.parse(raw);
|
|
56
|
+
this.dailyCount = data.count ?? 0;
|
|
57
|
+
this.date = data.date ?? '';
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
this.dailyCount = 0;
|
|
61
|
+
this.date = '';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async save() {
|
|
65
|
+
const dir = path.dirname(this.filePath);
|
|
66
|
+
await fs.promises.mkdir(dir, { recursive: true });
|
|
67
|
+
await fs.promises.writeFile(this.filePath, JSON.stringify({ count: this.dailyCount, date: this.date }), { mode: 0o600 });
|
|
68
|
+
}
|
|
69
|
+
resetIfNewDay() {
|
|
70
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
71
|
+
if (this.date !== today) {
|
|
72
|
+
this.dailyCount = 0;
|
|
73
|
+
this.date = today;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async checkAndIncrement() {
|
|
77
|
+
// Serialize quota operations to prevent concurrent send() bypass
|
|
78
|
+
const prev = this.lock;
|
|
79
|
+
let release;
|
|
80
|
+
this.lock = new Promise((resolve) => { release = resolve; });
|
|
81
|
+
await prev;
|
|
82
|
+
try {
|
|
83
|
+
this.resetIfNewDay();
|
|
84
|
+
if (this.dailyCount >= this.dailyLimit) {
|
|
85
|
+
const remaining = 0;
|
|
86
|
+
const warning = true;
|
|
87
|
+
return { allowed: false, remaining, warning };
|
|
88
|
+
}
|
|
89
|
+
this.dailyCount++;
|
|
90
|
+
await this.save();
|
|
91
|
+
const remaining = Math.max(0, this.dailyLimit - this.dailyCount);
|
|
92
|
+
const ratio = this.dailyCount / this.dailyLimit;
|
|
93
|
+
const warning = ratio >= this.warnThreshold;
|
|
94
|
+
return { allowed: true, remaining, warning };
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
release();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
getUsage() {
|
|
101
|
+
this.resetIfNewDay();
|
|
102
|
+
return {
|
|
103
|
+
used: this.dailyCount,
|
|
104
|
+
limit: this.dailyLimit,
|
|
105
|
+
remaining: Math.max(0, this.dailyLimit - this.dailyCount),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
setLimit(limit) {
|
|
109
|
+
this.dailyLimit = limit;
|
|
110
|
+
}
|
|
111
|
+
async reset() {
|
|
112
|
+
this.dailyCount = 0;
|
|
113
|
+
this.date = new Date().toISOString().slice(0, 10);
|
|
114
|
+
await this.save();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.QuotaManager = QuotaManager;
|
|
118
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/quota/manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAa,YAAY;IACf,QAAQ,CAAS;IACjB,UAAU,GAAW,CAAC,CAAC;IACvB,IAAI,GAAW,EAAE,CAAC;IAClB,aAAa,CAAS;IACtB,UAAU,CAAS;IACnB,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEhD,YAAY,QAAiB,EAAE,gBAAwB,GAAG,EAAE,aAAqB,GAAG;QAClF,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAC3D,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,iEAAiE;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,OAAmB,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC;QAEX,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,CAAC,CAAC;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;YAChD,CAAC;YAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAElB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YAChD,MAAM,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC;YAE5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,OAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CACF;AA3FD,oCA2FC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface RegistrationData {
|
|
2
|
+
agent_id: string;
|
|
3
|
+
api_key: string;
|
|
4
|
+
}
|
|
5
|
+
export interface OpenIDData {
|
|
6
|
+
my_openid: string;
|
|
7
|
+
created_at: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ApiKeyData {
|
|
10
|
+
key_id: string;
|
|
11
|
+
api_key: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AgentState {
|
|
14
|
+
agent_id: string;
|
|
15
|
+
api_key: string;
|
|
16
|
+
extra_keys: ApiKeyData[];
|
|
17
|
+
created_at?: string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface ApiResponse<T = unknown> {
|
|
2
|
+
code: number;
|
|
3
|
+
msg: string;
|
|
4
|
+
data: T;
|
|
5
|
+
}
|
|
6
|
+
export declare enum ErrorCode {
|
|
7
|
+
SUCCESS = 0,
|
|
8
|
+
MISSING_FIELD = 1001,
|
|
9
|
+
INVALID_OPENID = 1002,
|
|
10
|
+
INVALID_CLIENT_MSG_ID = 1003,
|
|
11
|
+
CONTENT_TOO_LONG = 1004,
|
|
12
|
+
INSUFFICIENT_PERMISSION = 1005,
|
|
13
|
+
INVALID_OPENID_REVERSE = 1006,
|
|
14
|
+
BLOCKED_RECIPIENT = 2001
|
|
15
|
+
}
|
|
16
|
+
export declare const ErrorMessages: Record<number, string>;
|
|
17
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;CACT;AAED,oBAAY,SAAS;IACnB,OAAO,IAAI;IACX,aAAa,OAAO;IACpB,cAAc,OAAO;IACrB,qBAAqB,OAAO;IAC5B,gBAAgB,OAAO;IACvB,uBAAuB,OAAO;IAC9B,sBAAsB,OAAO;IAC7B,iBAAiB,OAAO;CACzB;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAShD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// OceanBus API response envelope
|
|
3
|
+
// All L0 endpoints return HTTP 200; business errors via body.code
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.ErrorMessages = exports.ErrorCode = void 0;
|
|
6
|
+
var ErrorCode;
|
|
7
|
+
(function (ErrorCode) {
|
|
8
|
+
ErrorCode[ErrorCode["SUCCESS"] = 0] = "SUCCESS";
|
|
9
|
+
ErrorCode[ErrorCode["MISSING_FIELD"] = 1001] = "MISSING_FIELD";
|
|
10
|
+
ErrorCode[ErrorCode["INVALID_OPENID"] = 1002] = "INVALID_OPENID";
|
|
11
|
+
ErrorCode[ErrorCode["INVALID_CLIENT_MSG_ID"] = 1003] = "INVALID_CLIENT_MSG_ID";
|
|
12
|
+
ErrorCode[ErrorCode["CONTENT_TOO_LONG"] = 1004] = "CONTENT_TOO_LONG";
|
|
13
|
+
ErrorCode[ErrorCode["INSUFFICIENT_PERMISSION"] = 1005] = "INSUFFICIENT_PERMISSION";
|
|
14
|
+
ErrorCode[ErrorCode["INVALID_OPENID_REVERSE"] = 1006] = "INVALID_OPENID_REVERSE";
|
|
15
|
+
ErrorCode[ErrorCode["BLOCKED_RECIPIENT"] = 2001] = "BLOCKED_RECIPIENT";
|
|
16
|
+
})(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
|
|
17
|
+
exports.ErrorMessages = {
|
|
18
|
+
[ErrorCode.SUCCESS]: 'success',
|
|
19
|
+
[ErrorCode.MISSING_FIELD]: 'missing required field',
|
|
20
|
+
[ErrorCode.INVALID_OPENID]: 'invalid to_openid',
|
|
21
|
+
[ErrorCode.INVALID_CLIENT_MSG_ID]: 'invalid client_msg_id format',
|
|
22
|
+
[ErrorCode.CONTENT_TOO_LONG]: 'content exceeds 2000 character limit',
|
|
23
|
+
[ErrorCode.INSUFFICIENT_PERMISSION]: 'insufficient permission',
|
|
24
|
+
[ErrorCode.INVALID_OPENID_REVERSE]: 'invalid openid for reverse lookup',
|
|
25
|
+
[ErrorCode.BLOCKED_RECIPIENT]: 'target blocked, message intercepted',
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,kEAAkE;;;AAQlE,IAAY,SASX;AATD,WAAY,SAAS;IACnB,+CAAW,CAAA;IACX,8DAAoB,CAAA;IACpB,gEAAqB,CAAA;IACrB,8EAA4B,CAAA;IAC5B,oEAAuB,CAAA;IACvB,kFAA8B,CAAA;IAC9B,gFAA6B,CAAA;IAC7B,sEAAwB,CAAA;AAC1B,CAAC,EATW,SAAS,yBAAT,SAAS,QASpB;AAEY,QAAA,aAAa,GAA2B;IACnD,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS;IAC9B,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,wBAAwB;IACnD,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,mBAAmB;IAC/C,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,8BAA8B;IACjE,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,sCAAsC;IACpE,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,yBAAyB;IAC9D,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,mCAAmC;IACvE,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,qCAAqC;CACrE,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { TrustAnchor } from './crypto';
|
|
2
|
+
export interface KeyStoreConfig {
|
|
3
|
+
type: 'file' | 'memory';
|
|
4
|
+
filePath?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface HttpConfig {
|
|
7
|
+
timeout: number;
|
|
8
|
+
retry: {
|
|
9
|
+
maxAttempts: number;
|
|
10
|
+
initialDelayMs: number;
|
|
11
|
+
maxDelayMs: number;
|
|
12
|
+
multiplier: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface MailboxConfig {
|
|
16
|
+
pollIntervalMs: number;
|
|
17
|
+
defaultPageSize: number;
|
|
18
|
+
cursorPersistence: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface L1Config {
|
|
21
|
+
ypOpenids: string[];
|
|
22
|
+
trustedCAs: TrustAnchor[];
|
|
23
|
+
requestTimeoutMs: number;
|
|
24
|
+
requestPollIntervalMs: number;
|
|
25
|
+
}
|
|
26
|
+
export interface InterceptorConfig {
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface QuotaConfig {
|
|
30
|
+
enforceLocal: boolean;
|
|
31
|
+
dailyLimit: number;
|
|
32
|
+
dailyLimitWarnThreshold: number;
|
|
33
|
+
}
|
|
34
|
+
export interface OceanBusConfig {
|
|
35
|
+
baseUrl: string;
|
|
36
|
+
identity?: {
|
|
37
|
+
agent_id: string;
|
|
38
|
+
api_key: string;
|
|
39
|
+
};
|
|
40
|
+
keyStore: KeyStoreConfig;
|
|
41
|
+
http: HttpConfig;
|
|
42
|
+
mailbox: MailboxConfig;
|
|
43
|
+
l1: L1Config;
|
|
44
|
+
interceptor: InterceptorConfig;
|
|
45
|
+
quota: QuotaConfig;
|
|
46
|
+
}
|
|
47
|
+
type DeepPartial<T> = T extends object ? {
|
|
48
|
+
[P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
49
|
+
} : T;
|
|
50
|
+
export type PartialConfig = DeepPartial<OceanBusConfig> & {
|
|
51
|
+
identity?: {
|
|
52
|
+
agent_id: string;
|
|
53
|
+
api_key: string;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,EAAE,EAAE,QAAQ,CAAC;IACb,WAAW,EAAE,iBAAiB,CAAC;IAC/B,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG;KACtC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAClE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACjD,GAAG,CAAC,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG;IACxD,QAAQ,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":""}
|