@ravi-hq/ravi 0.5.2 → 0.5.4

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 (45) hide show
  1. package/README.md +14 -7
  2. package/dist/channels/email-trusted.d.ts +129 -0
  3. package/dist/channels/email-trusted.d.ts.map +1 -0
  4. package/dist/channels/email-trusted.js +275 -0
  5. package/dist/channels/email-trusted.js.map +1 -0
  6. package/dist/channels/email-untrusted.d.ts +133 -0
  7. package/dist/channels/email-untrusted.d.ts.map +1 -0
  8. package/dist/channels/email-untrusted.js +285 -0
  9. package/dist/channels/email-untrusted.js.map +1 -0
  10. package/dist/channels/email.d.ts +8 -22
  11. package/dist/channels/email.d.ts.map +1 -1
  12. package/dist/channels/email.js +12 -30
  13. package/dist/channels/email.js.map +1 -1
  14. package/dist/channels/sms-trusted.d.ts +161 -0
  15. package/dist/channels/sms-trusted.d.ts.map +1 -0
  16. package/dist/channels/sms-trusted.js +306 -0
  17. package/dist/channels/sms-trusted.js.map +1 -0
  18. package/dist/channels/sms-untrusted.d.ts +124 -0
  19. package/dist/channels/sms-untrusted.d.ts.map +1 -0
  20. package/dist/channels/sms-untrusted.js +269 -0
  21. package/dist/channels/sms-untrusted.js.map +1 -0
  22. package/dist/channels/sms.d.ts +8 -22
  23. package/dist/channels/sms.d.ts.map +1 -1
  24. package/dist/channels/sms.js +12 -30
  25. package/dist/channels/sms.js.map +1 -1
  26. package/dist/index.d.ts +9 -12
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +22 -50
  29. package/dist/index.js.map +1 -1
  30. package/dist/sse-pool.d.ts +15 -0
  31. package/dist/sse-pool.d.ts.map +1 -0
  32. package/dist/sse-pool.js +41 -0
  33. package/dist/sse-pool.js.map +1 -0
  34. package/dist/sse.d.ts +23 -18
  35. package/dist/sse.d.ts.map +1 -1
  36. package/dist/sse.js +40 -23
  37. package/dist/sse.js.map +1 -1
  38. package/dist/types.d.ts +2 -4
  39. package/dist/types.d.ts.map +1 -1
  40. package/openclaw.plugin.json +6 -1
  41. package/package.json +1 -1
  42. package/dist/service.d.ts +0 -105
  43. package/dist/service.d.ts.map +0 -1
  44. package/dist/service.js +0 -141
  45. package/dist/service.js.map +0 -1
package/dist/service.js DELETED
@@ -1,141 +0,0 @@
1
- import { RaviSSEClient } from "./sse.js";
2
- import { raviEmailChannel } from "./channels/email.js";
3
- import { raviSmsChannel } from "./channels/sms.js";
4
- // ─── Listener Service ───────────────────────────────────────────────────────
5
- /**
6
- * Background service that manages SSE connections per identity.
7
- *
8
- * Creates one {@link RaviSSEClient} per configured identity, listens for
9
- * inbound email and SMS events, normalizes them through the respective
10
- * channel definitions, and dispatches the resulting {@link InboundMessage}
11
- * envelopes to the OpenClaw gateway via a {@link MessageDispatcher} callback.
12
- *
13
- * @example
14
- * ```ts
15
- * const service = new RaviListenerService((msg) => {
16
- * console.log(`[${msg.channel}] ${msg.senderId}: ${msg.text}`);
17
- * });
18
- *
19
- * service.addListener({
20
- * apiUrl: "https://api.ravi.dev",
21
- * token: "ey...",
22
- * identityUuid: "abc-123",
23
- * agentId: "my-agent",
24
- * emailAccount: { ... },
25
- * });
26
- *
27
- * // Later: graceful shutdown
28
- * service.stopAll();
29
- * ```
30
- */
31
- export class RaviListenerService {
32
- clients = new Map();
33
- dispatcher;
34
- constructor(dispatcher) {
35
- this.dispatcher = dispatcher;
36
- }
37
- /**
38
- * Start listening for a configured identity.
39
- *
40
- * Creates an SSE client, wires up email and/or SMS handlers based on
41
- * the provided account configs, and opens the connection. If a listener
42
- * for this identity already exists, the call is a no-op.
43
- *
44
- * @param config - Listener configuration for the identity.
45
- */
46
- addListener(config) {
47
- if (this.clients.has(config.identityUuid))
48
- return;
49
- const client = new RaviSSEClient({
50
- apiUrl: config.apiUrl,
51
- token: config.token,
52
- identityUuid: config.identityUuid,
53
- });
54
- // Email events
55
- if (config.emailAccount) {
56
- const emailAccount = config.emailAccount;
57
- client.onEmail((event) => {
58
- const normalized = raviEmailChannel.normalizeInbound(event, emailAccount);
59
- if (!normalized)
60
- return;
61
- this.dispatcher({
62
- channel: "ravi-email",
63
- accountId: config.identityUuid,
64
- senderId: normalized.senderId,
65
- text: normalized.text,
66
- threadId: normalized.threadId,
67
- sessionKey: raviEmailChannel.getSessionKey(config.agentId, config.identityUuid, normalized.threadId),
68
- metadata: normalized.metadata,
69
- readOnly: !!normalized.metadata.readOnly,
70
- });
71
- });
72
- }
73
- // SMS events
74
- if (config.smsAccount) {
75
- const smsAccount = config.smsAccount;
76
- client.onSms((event) => {
77
- const normalized = raviSmsChannel.normalizeInbound(event, smsAccount);
78
- if (!normalized)
79
- return;
80
- this.dispatcher({
81
- channel: "ravi-sms",
82
- accountId: config.identityUuid,
83
- senderId: normalized.senderId,
84
- text: normalized.text,
85
- threadId: normalized.threadId,
86
- sessionKey: raviSmsChannel.getSessionKey(config.agentId, config.identityUuid, normalized.threadId),
87
- metadata: normalized.metadata,
88
- readOnly: !!normalized.metadata.readOnly,
89
- });
90
- });
91
- }
92
- client.onReconnect(() => {
93
- console.log(`[ravi] Reconnecting SSE for identity ${config.identityUuid}`);
94
- });
95
- client.connect();
96
- this.clients.set(config.identityUuid, client);
97
- }
98
- /**
99
- * Update the bearer token for all active SSE connections.
100
- *
101
- * Called when the RaviClient refreshes the access token so SSE
102
- * reconnections use the new token instead of the expired one.
103
- */
104
- updateToken(newToken) {
105
- for (const [, client] of this.clients) {
106
- client.updateToken(newToken);
107
- }
108
- }
109
- /**
110
- * Remove a listener for an identity.
111
- *
112
- * Disconnects the SSE client and removes it from the active set.
113
- * No-op if the identity is not being listened to.
114
- *
115
- * @param identityUuid - The identity UUID to stop listening for.
116
- */
117
- removeListener(identityUuid) {
118
- const client = this.clients.get(identityUuid);
119
- if (client) {
120
- client.disconnect();
121
- this.clients.delete(identityUuid);
122
- }
123
- }
124
- /**
125
- * Stop all listeners.
126
- *
127
- * Disconnects every active SSE client and clears the internal map.
128
- * Safe to call multiple times.
129
- */
130
- stopAll() {
131
- for (const [, client] of this.clients) {
132
- client.disconnect();
133
- }
134
- this.clients.clear();
135
- }
136
- /** Get the number of active listeners. */
137
- get activeCount() {
138
- return this.clients.size;
139
- }
140
- }
141
- //# sourceMappingURL=service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}