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.
Files changed (216) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/bin/oceanbus.js +28 -0
  4. package/dist/agent/identity.d.ts +23 -0
  5. package/dist/agent/identity.d.ts.map +1 -0
  6. package/dist/agent/identity.js +84 -0
  7. package/dist/agent/identity.js.map +1 -0
  8. package/dist/agent/index.d.ts +4 -0
  9. package/dist/agent/index.d.ts.map +1 -0
  10. package/dist/agent/index.js +11 -0
  11. package/dist/agent/index.js.map +1 -0
  12. package/dist/agent/keys.d.ts +11 -0
  13. package/dist/agent/keys.d.ts.map +1 -0
  14. package/dist/agent/keys.js +50 -0
  15. package/dist/agent/keys.js.map +1 -0
  16. package/dist/agent/store.d.ts +23 -0
  17. package/dist/agent/store.d.ts.map +1 -0
  18. package/dist/agent/store.js +89 -0
  19. package/dist/agent/store.js.map +1 -0
  20. package/dist/cli/commands/block.d.ts +3 -0
  21. package/dist/cli/commands/block.d.ts.map +1 -0
  22. package/dist/cli/commands/block.js +25 -0
  23. package/dist/cli/commands/block.js.map +1 -0
  24. package/dist/cli/commands/key-new.d.ts +3 -0
  25. package/dist/cli/commands/key-new.d.ts.map +1 -0
  26. package/dist/cli/commands/key-new.js +21 -0
  27. package/dist/cli/commands/key-new.js.map +1 -0
  28. package/dist/cli/commands/key-revoke.d.ts +3 -0
  29. package/dist/cli/commands/key-revoke.d.ts.map +1 -0
  30. package/dist/cli/commands/key-revoke.js +25 -0
  31. package/dist/cli/commands/key-revoke.js.map +1 -0
  32. package/dist/cli/commands/keygen.d.ts +3 -0
  33. package/dist/cli/commands/keygen.d.ts.map +1 -0
  34. package/dist/cli/commands/keygen.js +20 -0
  35. package/dist/cli/commands/keygen.js.map +1 -0
  36. package/dist/cli/commands/listen.d.ts +3 -0
  37. package/dist/cli/commands/listen.d.ts.map +1 -0
  38. package/dist/cli/commands/listen.js +45 -0
  39. package/dist/cli/commands/listen.js.map +1 -0
  40. package/dist/cli/commands/openid.d.ts +3 -0
  41. package/dist/cli/commands/openid.d.ts.map +1 -0
  42. package/dist/cli/commands/openid.js +20 -0
  43. package/dist/cli/commands/openid.js.map +1 -0
  44. package/dist/cli/commands/register.d.ts +3 -0
  45. package/dist/cli/commands/register.d.ts.map +1 -0
  46. package/dist/cli/commands/register.js +21 -0
  47. package/dist/cli/commands/register.js.map +1 -0
  48. package/dist/cli/commands/send.d.ts +3 -0
  49. package/dist/cli/commands/send.d.ts.map +1 -0
  50. package/dist/cli/commands/send.js +61 -0
  51. package/dist/cli/commands/send.js.map +1 -0
  52. package/dist/cli/commands/whoami.d.ts +3 -0
  53. package/dist/cli/commands/whoami.d.ts.map +1 -0
  54. package/dist/cli/commands/whoami.js +20 -0
  55. package/dist/cli/commands/whoami.js.map +1 -0
  56. package/dist/cli/index.d.ts +2 -0
  57. package/dist/cli/index.d.ts.map +1 -0
  58. package/dist/cli/index.js +37 -0
  59. package/dist/cli/index.js.map +1 -0
  60. package/dist/cli/program.d.ts +1 -0
  61. package/dist/cli/program.d.ts.map +1 -0
  62. package/dist/cli/program.js +4 -0
  63. package/dist/cli/program.js.map +1 -0
  64. package/dist/client/errors.d.ts +16 -0
  65. package/dist/client/errors.d.ts.map +1 -0
  66. package/dist/client/errors.js +42 -0
  67. package/dist/client/errors.js.map +1 -0
  68. package/dist/client/http-client.d.ts +23 -0
  69. package/dist/client/http-client.d.ts.map +1 -0
  70. package/dist/client/http-client.js +130 -0
  71. package/dist/client/http-client.js.map +1 -0
  72. package/dist/client/index.d.ts +5 -0
  73. package/dist/client/index.d.ts.map +1 -0
  74. package/dist/client/index.js +12 -0
  75. package/dist/client/index.js.map +1 -0
  76. package/dist/client/retry.d.ts +14 -0
  77. package/dist/client/retry.d.ts.map +1 -0
  78. package/dist/client/retry.js +53 -0
  79. package/dist/client/retry.js.map +1 -0
  80. package/dist/config/defaults.d.ts +3 -0
  81. package/dist/config/defaults.d.ts.map +1 -0
  82. package/dist/config/defaults.js +39 -0
  83. package/dist/config/defaults.js.map +1 -0
  84. package/dist/config/index.d.ts +3 -0
  85. package/dist/config/index.d.ts.map +1 -0
  86. package/dist/config/index.js +9 -0
  87. package/dist/config/index.js.map +1 -0
  88. package/dist/config/loader.d.ts +4 -0
  89. package/dist/config/loader.d.ts.map +1 -0
  90. package/dist/config/loader.js +106 -0
  91. package/dist/config/loader.js.map +1 -0
  92. package/dist/crypto/canonical-json.d.ts +2 -0
  93. package/dist/crypto/canonical-json.d.ts.map +1 -0
  94. package/dist/crypto/canonical-json.js +39 -0
  95. package/dist/crypto/canonical-json.js.map +1 -0
  96. package/dist/crypto/ed25519.d.ts +12 -0
  97. package/dist/crypto/ed25519.d.ts.map +1 -0
  98. package/dist/crypto/ed25519.js +101 -0
  99. package/dist/crypto/ed25519.js.map +1 -0
  100. package/dist/crypto/index.d.ts +4 -0
  101. package/dist/crypto/index.d.ts.map +1 -0
  102. package/dist/crypto/index.js +17 -0
  103. package/dist/crypto/index.js.map +1 -0
  104. package/dist/crypto/pow.d.ts +5 -0
  105. package/dist/crypto/pow.d.ts.map +1 -0
  106. package/dist/crypto/pow.js +16 -0
  107. package/dist/crypto/pow.js.map +1 -0
  108. package/dist/index.d.ts +89 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +269 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/interceptors/chain.d.ts +33 -0
  113. package/dist/interceptors/chain.d.ts.map +1 -0
  114. package/dist/interceptors/chain.js +32 -0
  115. package/dist/interceptors/chain.js.map +1 -0
  116. package/dist/interceptors/index.d.ts +5 -0
  117. package/dist/interceptors/index.d.ts.map +1 -0
  118. package/dist/interceptors/index.js +10 -0
  119. package/dist/interceptors/index.js.map +1 -0
  120. package/dist/interceptors/llm.d.ts +13 -0
  121. package/dist/interceptors/llm.d.ts.map +1 -0
  122. package/dist/interceptors/llm.js +21 -0
  123. package/dist/interceptors/llm.js.map +1 -0
  124. package/dist/l1/base-client.d.ts +17 -0
  125. package/dist/l1/base-client.d.ts.map +1 -0
  126. package/dist/l1/base-client.js +40 -0
  127. package/dist/l1/base-client.js.map +1 -0
  128. package/dist/l1/ca.d.ts +16 -0
  129. package/dist/l1/ca.d.ts.map +1 -0
  130. package/dist/l1/ca.js +92 -0
  131. package/dist/l1/ca.js.map +1 -0
  132. package/dist/l1/dispatcher.d.ts +15 -0
  133. package/dist/l1/dispatcher.d.ts.map +1 -0
  134. package/dist/l1/dispatcher.js +68 -0
  135. package/dist/l1/dispatcher.js.map +1 -0
  136. package/dist/l1/index.d.ts +7 -0
  137. package/dist/l1/index.d.ts.map +1 -0
  138. package/dist/l1/index.js +14 -0
  139. package/dist/l1/index.js.map +1 -0
  140. package/dist/l1/reputation.d.ts +14 -0
  141. package/dist/l1/reputation.d.ts.map +1 -0
  142. package/dist/l1/reputation.js +48 -0
  143. package/dist/l1/reputation.js.map +1 -0
  144. package/dist/l1/yellow-pages.d.ts +16 -0
  145. package/dist/l1/yellow-pages.d.ts.map +1 -0
  146. package/dist/l1/yellow-pages.js +71 -0
  147. package/dist/l1/yellow-pages.js.map +1 -0
  148. package/dist/mailbox/cursor.d.ts +11 -0
  149. package/dist/mailbox/cursor.d.ts.map +1 -0
  150. package/dist/mailbox/cursor.js +79 -0
  151. package/dist/mailbox/cursor.js.map +1 -0
  152. package/dist/mailbox/index.d.ts +5 -0
  153. package/dist/mailbox/index.d.ts.map +1 -0
  154. package/dist/mailbox/index.js +10 -0
  155. package/dist/mailbox/index.js.map +1 -0
  156. package/dist/mailbox/poller.d.ts +18 -0
  157. package/dist/mailbox/poller.d.ts.map +1 -0
  158. package/dist/mailbox/poller.js +64 -0
  159. package/dist/mailbox/poller.js.map +1 -0
  160. package/dist/mailbox/sync.d.ts +13 -0
  161. package/dist/mailbox/sync.d.ts.map +1 -0
  162. package/dist/mailbox/sync.js +60 -0
  163. package/dist/mailbox/sync.js.map +1 -0
  164. package/dist/messaging/blocklist.d.ts +17 -0
  165. package/dist/messaging/blocklist.d.ts.map +1 -0
  166. package/dist/messaging/blocklist.js +110 -0
  167. package/dist/messaging/blocklist.js.map +1 -0
  168. package/dist/messaging/idgen.d.ts +3 -0
  169. package/dist/messaging/idgen.d.ts.map +1 -0
  170. package/dist/messaging/idgen.js +45 -0
  171. package/dist/messaging/idgen.js.map +1 -0
  172. package/dist/messaging/index.d.ts +4 -0
  173. package/dist/messaging/index.d.ts.map +1 -0
  174. package/dist/messaging/index.js +11 -0
  175. package/dist/messaging/index.js.map +1 -0
  176. package/dist/messaging/send.d.ts +9 -0
  177. package/dist/messaging/send.d.ts.map +1 -0
  178. package/dist/messaging/send.js +55 -0
  179. package/dist/messaging/send.js.map +1 -0
  180. package/dist/quota/index.d.ts +2 -0
  181. package/dist/quota/index.d.ts.map +1 -0
  182. package/dist/quota/index.js +6 -0
  183. package/dist/quota/index.js.map +1 -0
  184. package/dist/quota/manager.d.ts +25 -0
  185. package/dist/quota/manager.d.ts.map +1 -0
  186. package/dist/quota/manager.js +118 -0
  187. package/dist/quota/manager.js.map +1 -0
  188. package/dist/types/agent.d.ts +19 -0
  189. package/dist/types/agent.d.ts.map +1 -0
  190. package/dist/types/agent.js +3 -0
  191. package/dist/types/agent.js.map +1 -0
  192. package/dist/types/api.d.ts +17 -0
  193. package/dist/types/api.d.ts.map +1 -0
  194. package/dist/types/api.js +27 -0
  195. package/dist/types/api.js.map +1 -0
  196. package/dist/types/config.d.ts +57 -0
  197. package/dist/types/config.d.ts.map +1 -0
  198. package/dist/types/config.js +3 -0
  199. package/dist/types/config.js.map +1 -0
  200. package/dist/types/crypto.d.ts +39 -0
  201. package/dist/types/crypto.d.ts.map +1 -0
  202. package/dist/types/crypto.js +3 -0
  203. package/dist/types/crypto.js.map +1 -0
  204. package/dist/types/index.d.ts +7 -0
  205. package/dist/types/index.d.ts.map +1 -0
  206. package/dist/types/index.js +23 -0
  207. package/dist/types/index.js.map +1 -0
  208. package/dist/types/l1.d.ts +129 -0
  209. package/dist/types/l1.d.ts.map +1 -0
  210. package/dist/types/l1.js +5 -0
  211. package/dist/types/l1.js.map +1 -0
  212. package/dist/types/messaging.d.ts +30 -0
  213. package/dist/types/messaging.d.ts.map +1 -0
  214. package/dist/types/messaging.js +3 -0
  215. package/dist/types/messaging.js.map +1 -0
  216. package/package.json +52 -0
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.L1Dispatcher = void 0;
4
+ const poller_1 = require("../mailbox/poller");
5
+ class L1Dispatcher {
6
+ mailbox;
7
+ engine = null;
8
+ pending = new Map();
9
+ requestTimeoutMs;
10
+ pollIntervalMs;
11
+ constructor(mailbox, requestTimeoutMs = 30000, pollIntervalMs = 1000) {
12
+ this.mailbox = mailbox;
13
+ this.requestTimeoutMs = requestTimeoutMs;
14
+ this.pollIntervalMs = pollIntervalMs;
15
+ }
16
+ dispatch(msg) {
17
+ try {
18
+ const parsed = JSON.parse(msg.content);
19
+ if (parsed.request_id && this.pending.has(parsed.request_id)) {
20
+ const pending = this.pending.get(parsed.request_id);
21
+ clearTimeout(pending.timeout);
22
+ this.pending.delete(parsed.request_id);
23
+ pending.resolve(parsed);
24
+ if (this.pending.size === 0 && this.engine) {
25
+ this.engine.stop();
26
+ this.engine = null;
27
+ }
28
+ }
29
+ }
30
+ catch {
31
+ // Not JSON — not an L1 response, ignore
32
+ }
33
+ }
34
+ register(requestId, timeoutMs) {
35
+ const ms = timeoutMs ?? this.requestTimeoutMs;
36
+ return new Promise((resolve, reject) => {
37
+ const timeout = setTimeout(() => {
38
+ this.pending.delete(requestId);
39
+ reject(new Error(`L1 request timed out after ${ms}ms: ${requestId}`));
40
+ if (this.pending.size === 0 && this.engine) {
41
+ this.engine.stop();
42
+ this.engine = null;
43
+ }
44
+ }, ms);
45
+ this.pending.set(requestId, { resolve, reject, timeout });
46
+ if (!this.engine || !this.engine.isRunning()) {
47
+ this.engine = new poller_1.AutoPollEngine(this.mailbox, (msg) => this.dispatch(msg), (err) => { }, this.pollIntervalMs);
48
+ this.engine.start();
49
+ }
50
+ });
51
+ }
52
+ get pendingCount() {
53
+ return this.pending.size;
54
+ }
55
+ destroy() {
56
+ for (const [id, pending] of this.pending) {
57
+ clearTimeout(pending.timeout);
58
+ pending.reject(new Error('L1 dispatcher destroyed'));
59
+ }
60
+ this.pending.clear();
61
+ if (this.engine) {
62
+ this.engine.stop();
63
+ this.engine = null;
64
+ }
65
+ }
66
+ }
67
+ exports.L1Dispatcher = L1Dispatcher;
68
+ //# sourceMappingURL=dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/l1/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { L1Client } from './base-client';
2
+ export type { L1Transport } from './base-client';
3
+ export { L1Dispatcher } from './dispatcher';
4
+ export { YellowPagesClient } from './yellow-pages';
5
+ export { CAClient } from './ca';
6
+ export { ReputationClient } from './reputation';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/l1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReputationClient = exports.CAClient = exports.YellowPagesClient = exports.L1Dispatcher = exports.L1Client = void 0;
4
+ var base_client_1 = require("./base-client");
5
+ Object.defineProperty(exports, "L1Client", { enumerable: true, get: function () { return base_client_1.L1Client; } });
6
+ var dispatcher_1 = require("./dispatcher");
7
+ Object.defineProperty(exports, "L1Dispatcher", { enumerable: true, get: function () { return dispatcher_1.L1Dispatcher; } });
8
+ var yellow_pages_1 = require("./yellow-pages");
9
+ Object.defineProperty(exports, "YellowPagesClient", { enumerable: true, get: function () { return yellow_pages_1.YellowPagesClient; } });
10
+ var ca_1 = require("./ca");
11
+ Object.defineProperty(exports, "CAClient", { enumerable: true, get: function () { return ca_1.CAClient; } });
12
+ var reputation_1 = require("./reputation");
13
+ Object.defineProperty(exports, "ReputationClient", { enumerable: true, get: function () { return reputation_1.ReputationClient; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/l1/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AAEjB,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AACrB,+CAAmD;AAA1C,iHAAA,iBAAiB,OAAA;AAC1B,2BAAgC;AAAvB,8FAAA,QAAQ,OAAA;AACjB,2CAAgD;AAAvC,8GAAA,gBAAgB,OAAA"}
@@ -0,0 +1,14 @@
1
+ import { L1Client, L1Transport } from './base-client';
2
+ import type { L1Dispatcher } from './dispatcher';
3
+ import type { ReputationQuery } from '../types/l1';
4
+ import type { L1Response } from '../types/l1';
5
+ export declare class ReputationClient extends L1Client {
6
+ constructor(sendFn: L1Transport, serviceOpenid: string, dispatcher?: L1Dispatcher, requestTimeoutMs?: number);
7
+ submitTag(targetOpenid: string, tag: string, sig: string): Promise<L1Response>;
8
+ fraudReport(targetOpenid: string, evidence: string, sig: string): Promise<L1Response>;
9
+ spamReport(targetOpenid: string, sig: string): Promise<L1Response>;
10
+ queryReputation(openids: string[]): Promise<L1Response<{
11
+ reputations: ReputationQuery[];
12
+ }>>;
13
+ }
14
+ //# sourceMappingURL=reputation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reputation.d.ts","sourceRoot":"","sources":["../../src/l1/reputation.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,EAKV,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,qBAAa,gBAAiB,SAAQ,QAAQ;gBAE1C,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,YAAY,EACzB,gBAAgB,GAAE,MAAc;IAK5B,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAW9E,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAWrF,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAUlE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;QAAE,WAAW,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC,CAAC;CAQlG"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReputationClient = void 0;
4
+ const base_client_1 = require("./base-client");
5
+ class ReputationClient extends base_client_1.L1Client {
6
+ constructor(sendFn, serviceOpenid, dispatcher, requestTimeoutMs = 30000) {
7
+ super(sendFn, serviceOpenid, dispatcher, requestTimeoutMs);
8
+ }
9
+ async submitTag(targetOpenid, tag, sig) {
10
+ const request = {
11
+ ...this.buildRequest('submit_tag'),
12
+ action: 'submit_tag',
13
+ target_openid: targetOpenid,
14
+ tag,
15
+ sig,
16
+ };
17
+ return this.sendAction(request);
18
+ }
19
+ async fraudReport(targetOpenid, evidence, sig) {
20
+ const request = {
21
+ ...this.buildRequest('fraud_report'),
22
+ action: 'fraud_report',
23
+ target_openid: targetOpenid,
24
+ evidence,
25
+ sig,
26
+ };
27
+ return this.sendAction(request);
28
+ }
29
+ async spamReport(targetOpenid, sig) {
30
+ const request = {
31
+ ...this.buildRequest('spam_report'),
32
+ action: 'spam_report',
33
+ target_openid: targetOpenid,
34
+ sig,
35
+ };
36
+ return this.sendAction(request);
37
+ }
38
+ async queryReputation(openids) {
39
+ const request = {
40
+ ...this.buildRequest('query_reputation'),
41
+ action: 'query_reputation',
42
+ openids,
43
+ };
44
+ return this.sendAction(request);
45
+ }
46
+ }
47
+ exports.ReputationClient = ReputationClient;
48
+ //# sourceMappingURL=reputation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reputation.js","sourceRoot":"","sources":["../../src/l1/reputation.ts"],"names":[],"mappings":";;;AAAA,+CAAsD;AAWtD,MAAa,gBAAiB,SAAQ,sBAAQ;IAC5C,YACE,MAAmB,EACnB,aAAqB,EACrB,UAAyB,EACzB,mBAA2B,KAAK;QAEhC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,YAAoB,EAAE,GAAW,EAAE,GAAW;QAC5D,MAAM,OAAO,GAAwB;YACnC,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAClC,MAAM,EAAE,YAAY;YACpB,aAAa,EAAE,YAAY;YAC3B,GAAG;YACH,GAAG;SACJ,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,YAAoB,EAAE,QAAgB,EAAE,GAAW;QACnE,MAAM,OAAO,GAA0B;YACrC,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;YACpC,MAAM,EAAE,cAAc;YACtB,aAAa,EAAE,YAAY;YAC3B,QAAQ;YACR,GAAG;SACJ,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,YAAoB,EAAE,GAAW;QAChD,MAAM,OAAO,GAAyB;YACpC,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;YACnC,MAAM,EAAE,aAAa;YACrB,aAAa,EAAE,YAAY;YAC3B,GAAG;SACJ,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAiB;QACrC,MAAM,OAAO,GAA2B;YACtC,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;YACxC,MAAM,EAAE,kBAAkB;YAC1B,OAAO;SACR,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAA4D,CAAC;IAC7F,CAAC;CACF;AAlDD,4CAkDC"}
@@ -0,0 +1,16 @@
1
+ import { L1Client, L1Transport } from './base-client';
2
+ import type { L1Dispatcher } from './dispatcher';
3
+ import type { YpEntry } from '../types/l1';
4
+ import type { L1Response } from '../types/l1';
5
+ export declare class YellowPagesClient extends L1Client {
6
+ constructor(sendFn: L1Transport, serviceOpenid: string, dispatcher?: L1Dispatcher, requestTimeoutMs?: number);
7
+ registerService(openid: string, tags: string[], description: string, publicKey: string, sig: string): Promise<L1Response>;
8
+ discover(tags?: string[], keywords?: string, limit?: number, offset?: number): Promise<L1Response<{
9
+ entries: YpEntry[];
10
+ total: number;
11
+ }>>;
12
+ heartbeat(openid: string, sig: string): Promise<L1Response>;
13
+ updateService(openid: string, sig: string, tags?: string[], description?: string): Promise<L1Response>;
14
+ deregisterService(openid: string, sig: string): Promise<L1Response>;
15
+ }
16
+ //# sourceMappingURL=yellow-pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yellow-pages.d.ts","sourceRoot":"","sources":["../../src/l1/yellow-pages.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,EAMV,OAAO,EACR,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,qBAAa,iBAAkB,SAAQ,QAAQ;gBAE3C,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,YAAY,EACzB,gBAAgB,GAAE,MAAc;IAK5B,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,CAAC;IAiBhB,QAAQ,CACZ,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAYvD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAU3D,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC;IAYhB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAS1E"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.YellowPagesClient = void 0;
4
+ const base_client_1 = require("./base-client");
5
+ const errors_1 = require("../client/errors");
6
+ class YellowPagesClient extends base_client_1.L1Client {
7
+ constructor(sendFn, serviceOpenid, dispatcher, requestTimeoutMs = 30000) {
8
+ super(sendFn, serviceOpenid, dispatcher, requestTimeoutMs);
9
+ }
10
+ async registerService(openid, tags, description, publicKey, sig) {
11
+ const totalTagChars = tags.reduce((sum, t) => sum + t.length, 0);
12
+ if (totalTagChars > 120)
13
+ throw new errors_1.OceanBusError('Tags total character count exceeds 120');
14
+ if (description.length > 2000)
15
+ throw new errors_1.OceanBusError('Description exceeds 2000 characters');
16
+ const request = {
17
+ ...this.buildRequest('register_service'),
18
+ action: 'register_service',
19
+ openid,
20
+ tags,
21
+ description,
22
+ public_key: publicKey,
23
+ sig,
24
+ };
25
+ return this.sendAction(request);
26
+ }
27
+ async discover(tags, keywords, limit, offset) {
28
+ const request = {
29
+ ...this.buildRequest('discover'),
30
+ action: 'discover',
31
+ tags,
32
+ keywords,
33
+ limit,
34
+ offset,
35
+ };
36
+ return this.sendAction(request);
37
+ }
38
+ async heartbeat(openid, sig) {
39
+ const request = {
40
+ ...this.buildRequest('heartbeat'),
41
+ action: 'heartbeat',
42
+ openid,
43
+ sig,
44
+ };
45
+ return this.sendAction(request);
46
+ }
47
+ async updateService(openid, sig, tags, description) {
48
+ const request = {
49
+ ...this.buildRequest('update_service'),
50
+ action: 'update_service',
51
+ openid,
52
+ sig,
53
+ };
54
+ if (tags !== undefined)
55
+ request.tags = tags;
56
+ if (description !== undefined)
57
+ request.description = description;
58
+ return this.sendAction(request);
59
+ }
60
+ async deregisterService(openid, sig) {
61
+ const request = {
62
+ ...this.buildRequest('deregister_service'),
63
+ action: 'deregister_service',
64
+ openid,
65
+ sig,
66
+ };
67
+ return this.sendAction(request);
68
+ }
69
+ }
70
+ exports.YellowPagesClient = YellowPagesClient;
71
+ //# sourceMappingURL=yellow-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yellow-pages.js","sourceRoot":"","sources":["../../src/l1/yellow-pages.ts"],"names":[],"mappings":";;;AAAA,+CAAsD;AAWtD,6CAAiD;AAEjD,MAAa,iBAAkB,SAAQ,sBAAQ;IAC7C,YACE,MAAmB,EACnB,aAAqB,EACrB,UAAyB,EACzB,mBAA2B,KAAK;QAEhC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,IAAc,EACd,WAAmB,EACnB,SAAiB,EACjB,GAAW;QAEX,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,aAAa,GAAG,GAAG;YAAE,MAAM,IAAI,sBAAa,CAAC,wCAAwC,CAAC,CAAC;QAC3F,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI;YAAE,MAAM,IAAI,sBAAa,CAAC,qCAAqC,CAAC,CAAC;QAE9F,MAAM,OAAO,GAAsB;YACjC,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;YACxC,MAAM,EAAE,kBAAkB;YAC1B,MAAM;YACN,IAAI;YACJ,WAAW;YACX,UAAU,EAAE,SAAS;YACrB,GAAG;SACJ,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,IAAe,EACf,QAAiB,EACjB,KAAc,EACd,MAAe;QAEf,MAAM,OAAO,GAAsB;YACjC,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YAChC,MAAM,EAAE,UAAU;YAClB,IAAI;YACJ,QAAQ;YACR,KAAK;YACL,MAAM;SACP,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAA+D,CAAC;IAChG,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,GAAW;QACzC,MAAM,OAAO,GAAuB;YAClC,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;YACjC,MAAM,EAAE,WAAW;YACnB,MAAM;YACN,GAAG;SACJ,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,MAAc,EACd,GAAW,EACX,IAAe,EACf,WAAoB;QAEpB,MAAM,OAAO,GAAoB;YAC/B,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;YACtC,MAAM,EAAE,gBAAgB;YACxB,MAAM;YACN,GAAG;SACJ,CAAC;QACF,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC5C,IAAI,WAAW,KAAK,SAAS;YAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QACjE,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,GAAW;QACjD,MAAM,OAAO,GAAwB;YACnC,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC;YAC1C,MAAM,EAAE,oBAAoB;YAC5B,MAAM;YACN,GAAG;SACJ,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAtFD,8CAsFC"}
@@ -0,0 +1,11 @@
1
+ export declare class SeqCursor {
2
+ private filePath;
3
+ private lastSeq;
4
+ constructor(filePath?: string);
5
+ get(): number;
6
+ set(seq: number): void;
7
+ load(): Promise<void>;
8
+ save(): Promise<void>;
9
+ reset(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/mailbox/cursor.ts"],"names":[],"mappings":"AAIA,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAa;gBAEhB,QAAQ,CAAC,EAAE,MAAM;IAI7B,GAAG,IAAI,MAAM;IAIb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -0,0 +1,79 @@
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.SeqCursor = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ class SeqCursor {
41
+ filePath;
42
+ lastSeq = 0;
43
+ constructor(filePath) {
44
+ this.filePath = filePath || path.join(os.homedir(), '.oceanbus', 'seq_cursor.json');
45
+ }
46
+ get() {
47
+ return this.lastSeq;
48
+ }
49
+ set(seq) {
50
+ if (!Number.isSafeInteger(seq))
51
+ return; // guard against infinity/NaN/overflow
52
+ if (seq > this.lastSeq) {
53
+ this.lastSeq = seq;
54
+ }
55
+ }
56
+ async load() {
57
+ try {
58
+ const raw = await fs.promises.readFile(this.filePath, 'utf-8');
59
+ const data = JSON.parse(raw);
60
+ if (typeof data.last_seq === 'number') {
61
+ this.lastSeq = data.last_seq;
62
+ }
63
+ }
64
+ catch {
65
+ this.lastSeq = 0;
66
+ }
67
+ }
68
+ async save() {
69
+ const dir = path.dirname(this.filePath);
70
+ await fs.promises.mkdir(dir, { recursive: true });
71
+ await fs.promises.writeFile(this.filePath, JSON.stringify({ last_seq: this.lastSeq }), { mode: 0o600 });
72
+ }
73
+ async reset() {
74
+ this.lastSeq = 0;
75
+ await this.save();
76
+ }
77
+ }
78
+ exports.SeqCursor = SeqCursor;
79
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/mailbox/cursor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAa,SAAS;IACZ,QAAQ,CAAS;IACjB,OAAO,GAAW,CAAC,CAAC;IAE5B,YAAY,QAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACtF,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,GAAW;QACb,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,sCAAsC;QAC9E,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACrB,CAAC;IACH,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,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACnB,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,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAC1C,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CACF;AA7CD,8BA6CC"}
@@ -0,0 +1,5 @@
1
+ export { MailboxSync } from './sync';
2
+ export { AutoPollEngine } from './poller';
3
+ export type { MessageHandler, ErrorHandler } from './poller';
4
+ export { SeqCursor } from './cursor';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mailbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SeqCursor = exports.AutoPollEngine = exports.MailboxSync = void 0;
4
+ var sync_1 = require("./sync");
5
+ Object.defineProperty(exports, "MailboxSync", { enumerable: true, get: function () { return sync_1.MailboxSync; } });
6
+ var poller_1 = require("./poller");
7
+ Object.defineProperty(exports, "AutoPollEngine", { enumerable: true, get: function () { return poller_1.AutoPollEngine; } });
8
+ var cursor_1 = require("./cursor");
9
+ Object.defineProperty(exports, "SeqCursor", { enumerable: true, get: function () { return cursor_1.SeqCursor; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mailbox/index.ts"],"names":[],"mappings":";;;AAAA,+BAAqC;AAA5B,mGAAA,WAAW,OAAA;AACpB,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AAEvB,mCAAqC;AAA5B,mGAAA,SAAS,OAAA"}
@@ -0,0 +1,18 @@
1
+ import type { Message } from '../types/messaging';
2
+ import { MailboxSync } from './sync';
3
+ export type MessageHandler = (message: Message) => void | Promise<void>;
4
+ export type ErrorHandler = (error: Error) => void;
5
+ export declare class AutoPollEngine {
6
+ private sync;
7
+ private intervalMs;
8
+ private running;
9
+ private timer;
10
+ private onMessage;
11
+ private onError;
12
+ constructor(sync: MailboxSync, onMessage: MessageHandler, onError?: ErrorHandler, intervalMs?: number);
13
+ start(): void;
14
+ stop(): void;
15
+ isRunning(): boolean;
16
+ private poll;
17
+ }
18
+ //# sourceMappingURL=poller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../src/mailbox/poller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAElD,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,OAAO,CAAe;gBAG5B,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,GAAE,MAAa;IAQ3B,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAQZ,SAAS,IAAI,OAAO;YAIN,IAAI;CAyBnB"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoPollEngine = void 0;
4
+ class AutoPollEngine {
5
+ sync;
6
+ intervalMs;
7
+ running = false;
8
+ timer = null;
9
+ onMessage;
10
+ onError;
11
+ constructor(sync, onMessage, onError, intervalMs = 2000) {
12
+ this.sync = sync;
13
+ this.onMessage = onMessage;
14
+ this.onError = onError || ((err) => { console.error('[oceanbus] polling error:', err.message); });
15
+ this.intervalMs = intervalMs;
16
+ }
17
+ start() {
18
+ if (this.running)
19
+ return;
20
+ this.running = true;
21
+ this.poll();
22
+ }
23
+ stop() {
24
+ this.running = false;
25
+ if (this.timer) {
26
+ clearTimeout(this.timer);
27
+ this.timer = null;
28
+ }
29
+ }
30
+ isRunning() {
31
+ return this.running;
32
+ }
33
+ async poll() {
34
+ while (this.running) {
35
+ try {
36
+ const messages = await this.sync.sync();
37
+ for (const msg of messages) {
38
+ try {
39
+ await this.onMessage(msg);
40
+ }
41
+ catch (handlerErr) {
42
+ this.onError(handlerErr);
43
+ }
44
+ }
45
+ }
46
+ catch (err) {
47
+ this.onError(err);
48
+ }
49
+ // Wait for next interval, but check running flag
50
+ await new Promise((resolve) => {
51
+ if (!this.running) {
52
+ resolve();
53
+ return;
54
+ }
55
+ this.timer = setTimeout(() => {
56
+ this.timer = null;
57
+ resolve();
58
+ }, this.intervalMs);
59
+ });
60
+ }
61
+ }
62
+ }
63
+ exports.AutoPollEngine = AutoPollEngine;
64
+ //# sourceMappingURL=poller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.js","sourceRoot":"","sources":["../../src/mailbox/poller.ts"],"names":[],"mappings":";;;AAMA,MAAa,cAAc;IACjB,IAAI,CAAc;IAClB,UAAU,CAAS;IACnB,OAAO,GAAY,KAAK,CAAC;IACzB,KAAK,GAAyC,IAAI,CAAC;IACnD,SAAS,CAAiB;IAC1B,OAAO,CAAe;IAE9B,YACE,IAAiB,EACjB,SAAyB,EACzB,OAAsB,EACtB,aAAqB,IAAI;QAEzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC,GAAU,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACxC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBAC5B,CAAC;oBAAC,OAAO,UAAU,EAAE,CAAC;wBACpB,IAAI,CAAC,OAAO,CAAC,UAAmB,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,OAAO,CAAC,GAAY,CAAC,CAAC;YAC7B,CAAC;YAED,iDAAiD;YACjD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAAC,OAAO,EAAE,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;oBAClB,OAAO,EAAE,CAAC;gBACZ,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AA/DD,wCA+DC"}
@@ -0,0 +1,13 @@
1
+ import { HttpClient } from '../client/http-client';
2
+ import type { Message } from '../types/messaging';
3
+ import { SeqCursor } from './cursor';
4
+ export declare class MailboxSync {
5
+ private http;
6
+ private getApiKey;
7
+ private cursor;
8
+ private defaultPageSize;
9
+ constructor(http: HttpClient, getApiKey: () => string | null, cursor: SeqCursor, defaultPageSize?: number);
10
+ getCursor(): SeqCursor;
11
+ sync(sinceSeq?: number, limit?: number): Promise<Message[]>;
12
+ }
13
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/mailbox/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,eAAe,CAAS;gBAG9B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,MAAM,GAAG,IAAI,EAC9B,MAAM,EAAE,SAAS,EACjB,eAAe,GAAE,MAAY;IAQ/B,SAAS,IAAI,SAAS;IAIhB,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA4ClE"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MailboxSync = void 0;
4
+ const errors_1 = require("../client/errors");
5
+ const MAX_PAGE_SIZE = 500;
6
+ const MAX_PAGINATION_ITERATIONS = 50;
7
+ class MailboxSync {
8
+ http;
9
+ getApiKey;
10
+ cursor;
11
+ defaultPageSize;
12
+ constructor(http, getApiKey, cursor, defaultPageSize = 100) {
13
+ this.http = http;
14
+ this.getApiKey = getApiKey;
15
+ this.cursor = cursor;
16
+ this.defaultPageSize = Math.min(defaultPageSize, MAX_PAGE_SIZE);
17
+ }
18
+ getCursor() {
19
+ return this.cursor;
20
+ }
21
+ async sync(sinceSeq, limit) {
22
+ const apiKey = this.getApiKey();
23
+ if (!apiKey)
24
+ throw new errors_1.OceanBusError('Not authenticated');
25
+ const allMessages = [];
26
+ let currentSince = sinceSeq ?? this.cursor.get();
27
+ const pageSize = limit ?? this.defaultPageSize;
28
+ let iteration = 0;
29
+ while (iteration < MAX_PAGINATION_ITERATIONS) {
30
+ iteration++;
31
+ const res = await this.http.get('/messages/sync', {
32
+ apiKey,
33
+ query: {
34
+ since_seq: currentSince,
35
+ limit: pageSize,
36
+ },
37
+ });
38
+ const { messages, has_more } = res.data;
39
+ if (messages && messages.length > 0) {
40
+ allMessages.push(...messages);
41
+ for (const msg of messages) {
42
+ this.cursor.set(msg.seq_id);
43
+ }
44
+ currentSince = this.cursor.get();
45
+ }
46
+ // Exit conditions
47
+ if (!has_more)
48
+ break;
49
+ // Guard: if has_more is true but no messages were returned, break to avoid infinite loop
50
+ if (!messages || messages.length === 0)
51
+ break;
52
+ if (limit && allMessages.length >= limit)
53
+ break;
54
+ }
55
+ await this.cursor.save();
56
+ return allMessages;
57
+ }
58
+ }
59
+ exports.MailboxSync = MailboxSync;
60
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/mailbox/sync.ts"],"names":[],"mappings":";;;AAEA,6CAAiD;AAGjD,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,MAAa,WAAW;IACd,IAAI,CAAa;IACjB,SAAS,CAAsB;IAC/B,MAAM,CAAY;IAClB,eAAe,CAAS;IAEhC,YACE,IAAgB,EAChB,SAA8B,EAC9B,MAAiB,EACjB,kBAA0B,GAAG;QAE7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IAClE,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAiB,EAAE,KAAc;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,sBAAa,CAAC,mBAAmB,CAAC,CAAC;QAE1D,MAAM,WAAW,GAAc,EAAE,CAAC;QAClC,IAAI,YAAY,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC;QAC/C,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,OAAO,SAAS,GAAG,yBAAyB,EAAE,CAAC;YAC7C,SAAS,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAW,gBAAgB,EAAE;gBAC1D,MAAM;gBACN,KAAK,EAAE;oBACL,SAAS,EAAE,YAAY;oBACvB,KAAK,EAAE,QAAQ;iBAChB;aACF,CAAC,CAAC;YAEH,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YAExC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAE9B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC;gBAED,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACnC,CAAC;YAED,kBAAkB;YAClB,IAAI,CAAC,QAAQ;gBAAE,MAAM;YAErB,yFAAyF;YACzF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM;YAE9C,IAAI,KAAK,IAAI,WAAW,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;QAClD,CAAC;QAED,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAEzB,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAlED,kCAkEC"}
@@ -0,0 +1,17 @@
1
+ import { HttpClient } from '../client/http-client';
2
+ import type { ReverseLookupData } from '../types/messaging';
3
+ export declare class BlocklistManager {
4
+ private http;
5
+ private getApiKey;
6
+ private blocked;
7
+ private filePath;
8
+ constructor(http: HttpClient, getApiKey: () => string | null, filePath?: string);
9
+ loadLocal(): Promise<void>;
10
+ saveLocal(): Promise<void>;
11
+ block(fromOpenid: string): Promise<void>;
12
+ unblock(fromOpenid: string): Promise<void>;
13
+ isBlocked(fromOpenid: string): boolean;
14
+ getBlocklist(): string[];
15
+ reverseLookup(openid: string): Promise<ReverseLookupData>;
16
+ }
17
+ //# sourceMappingURL=blocklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocklist.d.ts","sourceRoot":"","sources":["../../src/messaging/blocklist.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAS;gBAEb,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM;IAOzE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAY1B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1B,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAehD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAItC,YAAY,IAAI,MAAM,EAAE;IAIlB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAUhE"}