@simplito/privmx-webendpoint 2.5.1 → 2.6.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/Types.d.ts +98 -2
- package/Types.js +102 -15
- package/api/ConnectionNative.d.ts +18 -2
- package/api/ConnectionNative.js +26 -7
- package/api/EventApiNative.d.ts +4 -3
- package/api/EventApiNative.js +7 -4
- package/api/InboxApiNative.d.ts +4 -5
- package/api/InboxApiNative.js +6 -9
- package/api/KvdbApiNative.d.ts +5 -5
- package/api/KvdbApiNative.js +8 -8
- package/api/StoreApiNative.d.ts +6 -7
- package/api/StoreApiNative.js +6 -9
- package/api/ThreadApiNative.d.ts +4 -5
- package/api/ThreadApiNative.js +6 -9
- package/assets/driver-web-context.js +1 -1
- package/assets/e2ee-worker.js +1 -0
- package/assets/endpoint-wasm-module.js +2 -19
- package/assets/endpoint-wasm-module.wasm +0 -0
- package/assets/privmx-endpoint-web.js +2 -0
- package/bundle/privmx-endpoint-web.js +1 -1
- package/extra/PrivmxClient.d.ts +9 -2
- package/extra/PrivmxClient.js +15 -1
- package/extra/__mocks__/constants.d.ts +63 -0
- package/extra/__mocks__/constants.js +51 -0
- package/extra/__mocks__/mockContainerSubscriber.d.ts +8 -0
- package/extra/__mocks__/mockContainerSubscriber.js +26 -0
- package/extra/{__tests__/__mocks__ → __mocks__}/mockEventQueue.d.ts +1 -3
- package/extra/{__tests__/__mocks__ → __mocks__}/mockEventQueue.js +6 -8
- package/extra/{__tests__/__mocks__ → __mocks__}/utils.d.ts +1 -1
- package/extra/{__tests__/__mocks__ → __mocks__}/utils.js +4 -5
- package/extra/__tests__/eventsManager.test.js +38 -27
- package/extra/__tests__/inboxEventManager.js +79 -0
- package/extra/__tests__/storeEventManager.test.js +48 -28
- package/extra/__tests__/threadEventManager.test.js +49 -29
- package/extra/events.d.ts +4 -217
- package/extra/events.js +25 -213
- package/extra/files.d.ts +2 -2
- package/extra/files.js +2 -2
- package/extra/inbox.js +1 -2
- package/extra/index.d.ts +3 -3
- package/extra/index.js +9 -10
- package/extra/managers.d.ts +98 -0
- package/extra/managers.js +157 -0
- package/extra/subscriptions.d.ts +165 -0
- package/extra/subscriptions.js +51 -0
- package/extra/utils.js +4 -5
- package/index.d.ts +2 -2
- package/index.js +2 -1
- package/package.json +12 -13
- package/service/Connection.d.ts +21 -2
- package/service/Connection.js +27 -2
- package/service/CryptoApi.d.ts +1 -1
- package/service/CryptoApi.js +1 -1
- package/service/EventApi.d.ts +14 -9
- package/service/EventApi.js +35 -10
- package/service/InboxApi.d.ts +14 -13
- package/service/InboxApi.js +42 -17
- package/service/KvdbApi.d.ts +33 -25
- package/service/KvdbApi.js +65 -31
- package/service/StoreApi.d.ts +18 -15
- package/service/StoreApi.js +48 -20
- package/service/ThreadApi.d.ts +14 -13
- package/service/ThreadApi.js +44 -19
- package/service/index.d.ts +2 -1
- package/service/index.js +3 -1
- package/extra/__tests__/__mocks__/constants.d.ts +0 -36
- package/extra/__tests__/__mocks__/constants.js +0 -42
- package/extra/__tests__/__mocks__/mockContainerSubscriber.d.ts +0 -12
- package/extra/__tests__/__mocks__/mockContainerSubscriber.js +0 -25
- package/extra/__tests__/__mocks__/mockEventAPIs.d.ts +0 -30
- package/extra/__tests__/__mocks__/mockEventAPIs.js +0 -70
- package/extra/__tests__/inboxEventManager.test.js +0 -56
- /package/extra/__tests__/{inboxEventManager.test.d.ts → inboxEventManager.d.ts} +0 -0
package/extra/events.js
CHANGED
|
@@ -1,219 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EventManager =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
* @param channel Channel
|
|
17
|
-
* @returns {boolean} `boolean`
|
|
18
|
-
*/
|
|
19
|
-
isSubscribedToChannel(channel) {
|
|
20
|
-
return this.channels.has(channel);
|
|
21
|
-
}
|
|
22
|
-
hasEventsOnChannel(channel) {
|
|
23
|
-
return (Array.from(this._listeners.keys()).findIndex((listenerTag) => listenerTag.split('@')[1] === channel) !== -1);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Removes an event listeners from given `channel` and `eventType`
|
|
27
|
-
* @param {Channel} channel channel
|
|
28
|
-
* @param {string} eventType type of the event
|
|
29
|
-
* @param {function} callback callback function
|
|
30
|
-
*/
|
|
31
|
-
removeEventListener = (channel, eventType, callback) => {
|
|
32
|
-
const eventTag = `${eventType}@${channel}`;
|
|
33
|
-
if (this._listeners.has(eventTag)) {
|
|
34
|
-
const channelCallbacks = this._listeners.get(eventTag);
|
|
35
|
-
const newCallback = channelCallbacks.filter((cb) => cb !== callback);
|
|
36
|
-
if (newCallback.length === 0) {
|
|
37
|
-
this._listeners.delete(eventTag);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
this._listeners.set(eventTag, newCallback);
|
|
41
|
-
}
|
|
42
|
-
if (!this.hasEventsOnChannel(channel)) {
|
|
43
|
-
this.channels.delete(channel);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Removes all listeners from given channel
|
|
49
|
-
* @param {Channel} channel channel
|
|
50
|
-
* @returns {void}
|
|
51
|
-
*/
|
|
52
|
-
removeChannelEvents = (channel) => {
|
|
53
|
-
const listenersToRemove = Array.from(this._listeners.keys()).filter((listenerTag) => listenerTag.split('@')[1] === channel);
|
|
54
|
-
listenersToRemove.forEach((listenerTag) => {
|
|
55
|
-
this._listeners.delete(listenerTag);
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
dispatchEvent(event) {
|
|
59
|
-
if (event.type == 'libConnected' ||
|
|
60
|
-
event.type == 'libDisconnected' ||
|
|
61
|
-
event.type == 'libPlatformDisconnected') {
|
|
62
|
-
event.channel = `connection/${event.connectionId}`;
|
|
63
|
-
}
|
|
64
|
-
const eventTag = `${event.type}@${event.channel}`;
|
|
65
|
-
if (this._listeners.has(eventTag)) {
|
|
66
|
-
const callbacks = this._listeners.get(eventTag);
|
|
67
|
-
if (callbacks) {
|
|
68
|
-
callbacks.forEach((callback) => callback(event));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Add an event listeners on given channel and eventType
|
|
74
|
-
* @param {Channel} channel channel
|
|
75
|
-
* @param {string} eventType type of the event
|
|
76
|
-
* @param {function} callback callback function
|
|
77
|
-
* @returns {function} function to remove the event listeners
|
|
78
|
-
*/
|
|
79
|
-
addEventListener = (channel, eventType, callback) => {
|
|
80
|
-
const eventTag = `${eventType}@${channel}`;
|
|
81
|
-
if (this._listeners.has(eventTag)) {
|
|
82
|
-
this._listeners.get(eventTag).push(callback);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
this._listeners.set(eventTag, [callback]);
|
|
86
|
-
}
|
|
87
|
-
this.channels.add(channel);
|
|
88
|
-
return () => {
|
|
89
|
-
this.removeEventListener(channel, eventType, callback);
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
addContainerListener = async (channel, eventType, callback) => {
|
|
93
|
-
if (!this.isSubscribedToChannel(channel)) {
|
|
94
|
-
await this.subscribeForModuleEvents();
|
|
95
|
-
}
|
|
96
|
-
const removeListener = this.addEventListener(channel, eventType, callback);
|
|
97
|
-
return async () => {
|
|
98
|
-
removeListener();
|
|
99
|
-
if (!this.hasEventsOnChannel(channel)) {
|
|
100
|
-
await this.unsubscribeFromModuleEvents();
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
};
|
|
104
|
-
addContainerElementListener = async (containerId, channel, eventType, callback) => {
|
|
105
|
-
if (!this.isSubscribedToChannel(channel)) {
|
|
106
|
-
await this.subscribeForModuleElementsEvents(containerId);
|
|
107
|
-
}
|
|
108
|
-
const removeListener = this.addEventListener(channel, eventType, callback);
|
|
109
|
-
return async () => {
|
|
110
|
-
removeListener();
|
|
111
|
-
if (!this.hasEventsOnChannel(channel)) {
|
|
112
|
-
await this.unsubscribeFromModuleElementsEvents(containerId);
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
exports.BaseEventManager = BaseEventManager;
|
|
118
|
-
class ThreadEventsManager extends BaseEventManager {
|
|
119
|
-
threadApi;
|
|
120
|
-
constructor(threadApi) {
|
|
121
|
-
super();
|
|
122
|
-
this.threadApi = threadApi;
|
|
123
|
-
}
|
|
124
|
-
subscribeForModuleEvents() {
|
|
125
|
-
return this.threadApi.subscribeForThreadEvents();
|
|
126
|
-
}
|
|
127
|
-
subscribeForModuleElementsEvents(id) {
|
|
128
|
-
return this.threadApi.subscribeForMessageEvents(id);
|
|
129
|
-
}
|
|
130
|
-
unsubscribeFromModuleEvents() {
|
|
131
|
-
return this.threadApi.unsubscribeFromThreadEvents();
|
|
132
|
-
}
|
|
133
|
-
unsubscribeFromModuleElementsEvents(id) {
|
|
134
|
-
return this.threadApi.unsubscribeFromMessageEvents(id);
|
|
135
|
-
}
|
|
136
|
-
async onThreadEvent(handler) {
|
|
137
|
-
const channel = 'thread';
|
|
138
|
-
return this.addContainerListener(channel, handler.event, handler.callback);
|
|
139
|
-
}
|
|
140
|
-
async onMessageEvent(threadId, handler) {
|
|
141
|
-
const channel = `thread/${threadId}/messages`;
|
|
142
|
-
return this.addContainerElementListener(threadId, channel, handler.event, handler.callback);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
exports.ThreadEventsManager = ThreadEventsManager;
|
|
146
|
-
class StoreEventsManager extends BaseEventManager {
|
|
147
|
-
storeApi;
|
|
148
|
-
constructor(storeApi) {
|
|
149
|
-
super();
|
|
150
|
-
this.storeApi = storeApi;
|
|
151
|
-
}
|
|
152
|
-
subscribeForModuleEvents() { return this.storeApi.subscribeForStoreEvents(); }
|
|
153
|
-
subscribeForModuleElementsEvents(id) { return this.storeApi.subscribeForFileEvents(id); }
|
|
154
|
-
unsubscribeFromModuleEvents() { return this.storeApi.unsubscribeFromStoreEvents(); }
|
|
155
|
-
unsubscribeFromModuleElementsEvents(id) { return this.storeApi.unsubscribeFromFileEvents(id); }
|
|
156
|
-
async onStoreEvent(handler) {
|
|
157
|
-
const channel = 'store';
|
|
158
|
-
return this.addContainerListener(channel, handler.event, handler.callback);
|
|
159
|
-
}
|
|
160
|
-
async onFileEvent(storeId, handler) {
|
|
161
|
-
const channel = `store/${storeId}/files`;
|
|
162
|
-
return this.addContainerElementListener(storeId, channel, handler.event, handler.callback);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
exports.StoreEventsManager = StoreEventsManager;
|
|
166
|
-
class InboxEventsManager extends BaseEventManager {
|
|
167
|
-
inboxApi;
|
|
168
|
-
constructor(inboxApi) {
|
|
169
|
-
super();
|
|
170
|
-
this.inboxApi = inboxApi;
|
|
171
|
-
}
|
|
172
|
-
subscribeForModuleEvents() { return this.inboxApi.subscribeForInboxEvents(); }
|
|
173
|
-
subscribeForModuleElementsEvents(id) { return this.inboxApi.subscribeForEntryEvents(id); }
|
|
174
|
-
unsubscribeFromModuleEvents() { return this.inboxApi.unsubscribeFromInboxEvents(); }
|
|
175
|
-
unsubscribeFromModuleElementsEvents(id) { return this.inboxApi.unsubscribeFromEntryEvents(id); }
|
|
176
|
-
async onInboxEvent(handler) {
|
|
177
|
-
const channel = 'inbox';
|
|
178
|
-
return this.addContainerListener(channel, handler.event, handler.callback);
|
|
179
|
-
}
|
|
180
|
-
async onEntryEvent(inboxId, handler) {
|
|
181
|
-
const channel = `inbox/${inboxId}/entries`;
|
|
182
|
-
return this.addContainerElementListener(inboxId, channel, handler.event, handler.callback);
|
|
3
|
+
exports.EventManager = void 0;
|
|
4
|
+
const subscriptions_1 = require("./subscriptions");
|
|
5
|
+
const managers_1 = require("./managers");
|
|
6
|
+
function normalizeConnectionEvent(e) {
|
|
7
|
+
switch (e.type) {
|
|
8
|
+
case 'libDisconnected':
|
|
9
|
+
return { ...e, subscriptions: [`${e.connectionId}/${managers_1.ConnectionChannels[subscriptions_1.ConnectionEventType.LIB_DISCONNECTED]}`] };
|
|
10
|
+
case 'libPlatformDisconnected':
|
|
11
|
+
return { ...e, subscriptions: [`${e.connectionId}/${managers_1.ConnectionChannels[subscriptions_1.ConnectionEventType.LIB_PLATFORM_DISCONNECTED]}`] };
|
|
12
|
+
case 'libConnected':
|
|
13
|
+
return { ...e, subscriptions: [`${e.connectionId}/${managers_1.ConnectionChannels[subscriptions_1.ConnectionEventType.LIB_CONNECTED]}`] };
|
|
14
|
+
default:
|
|
15
|
+
return e;
|
|
183
16
|
}
|
|
184
17
|
}
|
|
185
|
-
exports.InboxEventsManager = InboxEventsManager;
|
|
186
|
-
class ConnectionEventsManager extends BaseEventManager {
|
|
187
|
-
connectionId;
|
|
188
|
-
//Connection events don't have subscribe functions
|
|
189
|
-
subscribeForModuleEvents() {
|
|
190
|
-
return new Promise((resolve) => resolve());
|
|
191
|
-
}
|
|
192
|
-
subscribeForModuleElementsEvents() {
|
|
193
|
-
return new Promise((resolve) => resolve());
|
|
194
|
-
}
|
|
195
|
-
unsubscribeFromModuleEvents() {
|
|
196
|
-
return new Promise((resolve) => resolve());
|
|
197
|
-
}
|
|
198
|
-
unsubscribeFromModuleElementsEvents() {
|
|
199
|
-
return new Promise((resolve) => resolve());
|
|
200
|
-
}
|
|
201
|
-
constructor(connectionId) {
|
|
202
|
-
super();
|
|
203
|
-
this.connectionId = connectionId;
|
|
204
|
-
}
|
|
205
|
-
async onConnectionEvent(handler) {
|
|
206
|
-
const channel = `connection/${this.connectionId}`;
|
|
207
|
-
const removeListener = this.addContainerListener(channel, handler.event, handler.callback);
|
|
208
|
-
return removeListener;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
exports.ConnectionEventsManager = ConnectionEventsManager;
|
|
212
18
|
class EventManager {
|
|
213
19
|
_isEventLoopRunning = false;
|
|
214
20
|
dispatchers = [];
|
|
215
21
|
eventsQueue = null;
|
|
216
|
-
constructor() {
|
|
22
|
+
constructor() {
|
|
23
|
+
}
|
|
217
24
|
listenForEvents() {
|
|
218
25
|
if (this.eventsQueue) {
|
|
219
26
|
this.eventsQueue.waitEvent().then((event) => {
|
|
@@ -241,28 +48,33 @@ class EventManager {
|
|
|
241
48
|
this.dispatchers = [];
|
|
242
49
|
};
|
|
243
50
|
onEvent(event) {
|
|
244
|
-
this.dispatchers.forEach((cb) => cb(event));
|
|
51
|
+
this.dispatchers.forEach((cb) => cb(normalizeConnectionEvent(event)));
|
|
245
52
|
}
|
|
246
53
|
registerDispatcher(manager) {
|
|
247
54
|
this.dispatchers.push((e) => manager.dispatchEvent(e));
|
|
248
55
|
}
|
|
249
56
|
getThreadEventManager(threadApi) {
|
|
250
|
-
const manager = new ThreadEventsManager(threadApi);
|
|
57
|
+
const manager = new managers_1.ThreadEventsManager(threadApi);
|
|
251
58
|
this.registerDispatcher(manager);
|
|
252
59
|
return manager;
|
|
253
60
|
}
|
|
254
61
|
getStoreEventManager(storeApi) {
|
|
255
|
-
const manager = new StoreEventsManager(storeApi);
|
|
62
|
+
const manager = new managers_1.StoreEventsManager(storeApi);
|
|
63
|
+
this.registerDispatcher(manager);
|
|
64
|
+
return manager;
|
|
65
|
+
}
|
|
66
|
+
getKvdbEventManager(kvdbApi) {
|
|
67
|
+
const manager = new managers_1.KvdbEventsManager(kvdbApi);
|
|
256
68
|
this.registerDispatcher(manager);
|
|
257
69
|
return manager;
|
|
258
70
|
}
|
|
259
71
|
getInboxEventManager(inboxApi) {
|
|
260
|
-
const manager = new InboxEventsManager(inboxApi);
|
|
72
|
+
const manager = new managers_1.InboxEventsManager(inboxApi);
|
|
261
73
|
this.registerDispatcher(manager);
|
|
262
74
|
return manager;
|
|
263
75
|
}
|
|
264
76
|
getConnectionEventManager(connectionId) {
|
|
265
|
-
const manager = new ConnectionEventsManager(connectionId);
|
|
77
|
+
const manager = new managers_1.ConnectionEventsManager(connectionId);
|
|
266
78
|
this.registerDispatcher(manager);
|
|
267
79
|
return manager;
|
|
268
80
|
}
|
package/extra/files.d.ts
CHANGED
|
@@ -22,9 +22,9 @@ export declare class StreamReader {
|
|
|
22
22
|
*
|
|
23
23
|
* @returns {Promise<boolean>} A promise that resolves to true if there are more chunks to read, or false if the end of the file is reached.
|
|
24
24
|
*/
|
|
25
|
-
[Symbol.asyncIterator](): AsyncGenerator<readonly [Uint8Array
|
|
25
|
+
[Symbol.asyncIterator](): AsyncGenerator<readonly [Uint8Array<ArrayBufferLike>, number], void, unknown>;
|
|
26
26
|
readNextChunk(): Promise<Uint8Array>;
|
|
27
|
-
getFileContent(): Promise<Uint8Array
|
|
27
|
+
getFileContent(): Promise<Uint8Array<ArrayBuffer>>;
|
|
28
28
|
/**
|
|
29
29
|
* Aborts the reading process and closes the file handle.
|
|
30
30
|
*
|
package/extra/files.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FileUploader = exports.StreamReader = exports.FILE_DEFAULT_CHUNK_SIZE = void 0;
|
|
4
|
+
exports.downloadFile = downloadFile;
|
|
4
5
|
exports.FILE_DEFAULT_CHUNK_SIZE = 1_048_576;
|
|
5
6
|
class StreamReader {
|
|
6
7
|
_handle;
|
|
@@ -213,4 +214,3 @@ async function downloadFile(api, fileId, targetFileName) {
|
|
|
213
214
|
reader.readAsDataURL(new Blob([fileBuffer]));
|
|
214
215
|
}
|
|
215
216
|
}
|
|
216
|
-
exports.downloadFile = downloadFile;
|
package/extra/inbox.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sendEntry =
|
|
3
|
+
exports.sendEntry = sendEntry;
|
|
4
4
|
const files_1 = require("./files");
|
|
5
5
|
/**
|
|
6
6
|
* Sends an entry to the specified inbox.
|
|
@@ -32,4 +32,3 @@ async function sendEntry(inboxApi, inboxId, payload) {
|
|
|
32
32
|
await Promise.all(uploaders.map((uploader) => uploader.uploadFileContent()));
|
|
33
33
|
await inboxApi.sendEntry(inboxEntryHandle);
|
|
34
34
|
}
|
|
35
|
-
exports.sendEntry = sendEntry;
|
package/extra/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as Files from './files';
|
|
2
|
-
import * as Events from './events';
|
|
3
|
-
import { EventManager, ThreadEventsManager, StoreEventsManager, InboxEventsManager, BaseEventManager, ConnectionEventsManager, Channel, EventPayload, GenericEvent } from './events';
|
|
4
2
|
import * as Utils from './utils';
|
|
5
3
|
import * as Generics from './generics';
|
|
6
4
|
import * as Inboxes from './inbox';
|
|
7
5
|
import { FileUploader, StreamReader, downloadFile } from './files';
|
|
8
6
|
import { PrivmxClient } from './PrivmxClient';
|
|
9
7
|
import { PublicConnection } from './PublicConnection';
|
|
10
|
-
export {
|
|
8
|
+
export { EventManager } from "./events";
|
|
9
|
+
export { createInboxSubscription, createThreadSubscription, createConnectionSubscription, createKvdbSubscription, createStoreSubscription, EventCallback, Subscription } from "./subscriptions";
|
|
10
|
+
export { Files, Inboxes, Utils, Generics, FileUploader, downloadFile, StreamReader, PrivmxClient, PublicConnection, };
|
package/extra/index.js
CHANGED
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.PublicConnection = exports.PrivmxClient = exports.StreamReader = exports.downloadFile = exports.FileUploader = exports.Generics = exports.Utils = exports.Inboxes = exports.Files = exports.createStoreSubscription = exports.createKvdbSubscription = exports.createConnectionSubscription = exports.createThreadSubscription = exports.createInboxSubscription = exports.EventManager = void 0;
|
|
4
4
|
const Files = require("./files");
|
|
5
5
|
exports.Files = Files;
|
|
6
|
-
const Events = require("./events");
|
|
7
|
-
exports.Events = Events;
|
|
8
|
-
const events_1 = require("./events");
|
|
9
|
-
Object.defineProperty(exports, "EventManager", { enumerable: true, get: function () { return events_1.EventManager; } });
|
|
10
|
-
Object.defineProperty(exports, "ThreadEventsManager", { enumerable: true, get: function () { return events_1.ThreadEventsManager; } });
|
|
11
|
-
Object.defineProperty(exports, "StoreEventsManager", { enumerable: true, get: function () { return events_1.StoreEventsManager; } });
|
|
12
|
-
Object.defineProperty(exports, "InboxEventsManager", { enumerable: true, get: function () { return events_1.InboxEventsManager; } });
|
|
13
|
-
Object.defineProperty(exports, "BaseEventManager", { enumerable: true, get: function () { return events_1.BaseEventManager; } });
|
|
14
|
-
Object.defineProperty(exports, "ConnectionEventsManager", { enumerable: true, get: function () { return events_1.ConnectionEventsManager; } });
|
|
15
6
|
const Utils = require("./utils");
|
|
16
7
|
exports.Utils = Utils;
|
|
17
8
|
const Generics = require("./generics");
|
|
@@ -26,3 +17,11 @@ const PrivmxClient_1 = require("./PrivmxClient");
|
|
|
26
17
|
Object.defineProperty(exports, "PrivmxClient", { enumerable: true, get: function () { return PrivmxClient_1.PrivmxClient; } });
|
|
27
18
|
const PublicConnection_1 = require("./PublicConnection");
|
|
28
19
|
Object.defineProperty(exports, "PublicConnection", { enumerable: true, get: function () { return PublicConnection_1.PublicConnection; } });
|
|
20
|
+
var events_1 = require("./events");
|
|
21
|
+
Object.defineProperty(exports, "EventManager", { enumerable: true, get: function () { return events_1.EventManager; } });
|
|
22
|
+
var subscriptions_1 = require("./subscriptions");
|
|
23
|
+
Object.defineProperty(exports, "createInboxSubscription", { enumerable: true, get: function () { return subscriptions_1.createInboxSubscription; } });
|
|
24
|
+
Object.defineProperty(exports, "createThreadSubscription", { enumerable: true, get: function () { return subscriptions_1.createThreadSubscription; } });
|
|
25
|
+
Object.defineProperty(exports, "createConnectionSubscription", { enumerable: true, get: function () { return subscriptions_1.createConnectionSubscription; } });
|
|
26
|
+
Object.defineProperty(exports, "createKvdbSubscription", { enumerable: true, get: function () { return subscriptions_1.createKvdbSubscription; } });
|
|
27
|
+
Object.defineProperty(exports, "createStoreSubscription", { enumerable: true, get: function () { return subscriptions_1.createStoreSubscription; } });
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Types } from "..";
|
|
2
|
+
import { ConnectionEventType, EventCallback, SubscriberForInboxEvents, SubscriberForKvdbEvents, SubscriberForStoreEvents, SubscriberForThreadsEvents, Subscription } from "./subscriptions";
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* General usage
|
|
6
|
+
*
|
|
7
|
+
* const fn1 = () =>{}
|
|
8
|
+
* const fn2 = () =>{}
|
|
9
|
+
*
|
|
10
|
+
* const fn3 = () =>{}
|
|
11
|
+
*
|
|
12
|
+
*
|
|
13
|
+
* const subscriptionA = createSubscription({
|
|
14
|
+
* type: Types.ThreadEventType.THREAD_CREATE,
|
|
15
|
+
* selector: Types.ThreadEventSelectorType.THREAD_CONTAINER,
|
|
16
|
+
* selectorId: "s0dvos0div0smidvmsd"
|
|
17
|
+
* callbacks: [fn1,fn2]
|
|
18
|
+
* })
|
|
19
|
+
*
|
|
20
|
+
* const subscriptionB = createThreadSubscribtion({
|
|
21
|
+
* type: Types.ThreadEventType.MESSAGE_CREATED,
|
|
22
|
+
* selector: Types.ThreadEventSelectorType.CONTEXT_CONTAINER,
|
|
23
|
+
* selectorId: "s0dvos0div0smidvmsd"
|
|
24
|
+
* callbacks: [fn3]
|
|
25
|
+
* })
|
|
26
|
+
*
|
|
27
|
+
* await manager.subscribeFor([subscriptionA, subscriptionB])
|
|
28
|
+
*
|
|
29
|
+
*
|
|
30
|
+
* await manager.unsubscribeFrom(subscriptionB)
|
|
31
|
+
*
|
|
32
|
+
* --- or ---
|
|
33
|
+
*
|
|
34
|
+
* await manager.removeCallback(subscriptionA.callbacks[0])
|
|
35
|
+
*/
|
|
36
|
+
export type Channel = "inbox" | `inbox/${string}/entries` | "store" | `store/${string}/files` | "thread" | `thread/${string}/messages` | `connection/${string}`;
|
|
37
|
+
export interface GenericEvent<K> extends Types.Event {
|
|
38
|
+
/**
|
|
39
|
+
* Data associated with the event.
|
|
40
|
+
*/
|
|
41
|
+
data: K;
|
|
42
|
+
}
|
|
43
|
+
export declare abstract class BaseEventDispatcherManager {
|
|
44
|
+
private _listenersSymbols;
|
|
45
|
+
private _listeners;
|
|
46
|
+
get listeners(): Map<string, EventCallback[]>;
|
|
47
|
+
protected abstract apiSubscribeFor(strings: string[]): Promise<string[]>;
|
|
48
|
+
protected abstract apiUnsubscribeFrom(strings: string[]): Promise<void>;
|
|
49
|
+
dispatchEvent(event: Types.Event): void;
|
|
50
|
+
unregisterCallback(symbol: Symbol): void;
|
|
51
|
+
protected prepareSubscription(channelList: string[], subscriptions: {
|
|
52
|
+
callbacks: EventCallback[];
|
|
53
|
+
}[]): Promise<string[]>;
|
|
54
|
+
unsubscribeFrom(subscriptionsId: string[]): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
export declare class ThreadEventsManager extends BaseEventDispatcherManager {
|
|
57
|
+
private threadApi;
|
|
58
|
+
constructor(threadApi: SubscriberForThreadsEvents);
|
|
59
|
+
protected apiSubscribeFor(channels: string[]): Promise<string[]>;
|
|
60
|
+
protected apiUnsubscribeFrom(subscriptionId: string[]): Promise<void>;
|
|
61
|
+
subscribeFor(subscriptions: Subscription<Types.ThreadEventType, Types.ThreadEventSelectorType>[]): Promise<string[]>;
|
|
62
|
+
}
|
|
63
|
+
export declare class StoreEventsManager extends BaseEventDispatcherManager {
|
|
64
|
+
private storeApi;
|
|
65
|
+
constructor(storeApi: SubscriberForStoreEvents);
|
|
66
|
+
protected apiSubscribeFor(channels: string[]): Promise<string[]>;
|
|
67
|
+
protected apiUnsubscribeFrom(subscriptionId: string[]): Promise<void>;
|
|
68
|
+
subscribeFor(subscriptions: Subscription<Types.StoreEventType, Types.StoreEventSelectorType>[]): Promise<string[]>;
|
|
69
|
+
}
|
|
70
|
+
export declare class InboxEventsManager extends BaseEventDispatcherManager {
|
|
71
|
+
private inboxApi;
|
|
72
|
+
constructor(inboxApi: SubscriberForInboxEvents);
|
|
73
|
+
protected apiSubscribeFor(channels: string[]): Promise<string[]>;
|
|
74
|
+
protected apiUnsubscribeFrom(subscriptionId: string[]): Promise<void>;
|
|
75
|
+
subscribeFor(subscriptions: Subscription<Types.InboxEventType, Types.InboxEventSelectorType>[]): Promise<string[]>;
|
|
76
|
+
}
|
|
77
|
+
export declare class KvdbEventsManager extends BaseEventDispatcherManager {
|
|
78
|
+
private kvdbApi;
|
|
79
|
+
constructor(kvdbApi: SubscriberForKvdbEvents);
|
|
80
|
+
protected apiSubscribeFor(channels: string[]): Promise<string[]>;
|
|
81
|
+
protected apiUnsubscribeFrom(subscriptionId: string[]): Promise<void>;
|
|
82
|
+
subscribeFor(subscriptions: Subscription<Types.KvdbEventType, Types.KvdbEventSelectorType>[]): Promise<string[]>;
|
|
83
|
+
}
|
|
84
|
+
export declare const ConnectionChannels: {
|
|
85
|
+
2: string;
|
|
86
|
+
0: string;
|
|
87
|
+
1: string;
|
|
88
|
+
};
|
|
89
|
+
export declare class ConnectionEventsManager extends BaseEventDispatcherManager {
|
|
90
|
+
private connectionId;
|
|
91
|
+
constructor(connectionId: string);
|
|
92
|
+
protected apiSubscribeFor(channels: string[]): Promise<string[]>;
|
|
93
|
+
protected apiUnsubscribeFrom(): Promise<void>;
|
|
94
|
+
subscribeFor(subscriptions: {
|
|
95
|
+
type: ConnectionEventType;
|
|
96
|
+
callbacks: EventCallback[];
|
|
97
|
+
}[]): Promise<string[]>;
|
|
98
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConnectionEventsManager = exports.ConnectionChannels = exports.KvdbEventsManager = exports.InboxEventsManager = exports.StoreEventsManager = exports.ThreadEventsManager = exports.BaseEventDispatcherManager = void 0;
|
|
4
|
+
const subscriptions_1 = require("./subscriptions");
|
|
5
|
+
class BaseEventDispatcherManager {
|
|
6
|
+
_listenersSymbols = new Map();
|
|
7
|
+
_listeners = new Map();
|
|
8
|
+
get listeners() {
|
|
9
|
+
return this._listeners;
|
|
10
|
+
}
|
|
11
|
+
dispatchEvent(event) {
|
|
12
|
+
const callbacks = event.subscriptions.flatMap((s) => this._listeners.get(s));
|
|
13
|
+
for (const listener of callbacks) {
|
|
14
|
+
listener.callback(event);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
unregisterCallback(symbol) {
|
|
18
|
+
this._listenersSymbols.delete(symbol);
|
|
19
|
+
for (const keys of this._listeners.keys()) {
|
|
20
|
+
const listeners = this._listeners.get(keys);
|
|
21
|
+
if (listeners) {
|
|
22
|
+
this._listeners.set(keys, listeners.filter((x) => x.symbol !== symbol));
|
|
23
|
+
if (this._listeners.get(keys).length === 0) {
|
|
24
|
+
this._listeners.delete(keys);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async prepareSubscription(channelList, subscriptions) {
|
|
30
|
+
const subscriptionIds = await this.apiSubscribeFor(channelList);
|
|
31
|
+
subscriptionIds.forEach((id, i) => {
|
|
32
|
+
const subscription = subscriptions[i];
|
|
33
|
+
this._listeners.set(id, subscription.callbacks);
|
|
34
|
+
for (const cb of subscription.callbacks) {
|
|
35
|
+
this._listenersSymbols.set(cb.symbol, id);
|
|
36
|
+
}
|
|
37
|
+
return subscription;
|
|
38
|
+
});
|
|
39
|
+
return subscriptionIds;
|
|
40
|
+
}
|
|
41
|
+
async unsubscribeFrom(subscriptionsId) {
|
|
42
|
+
for (const subscriptionId of subscriptionsId) {
|
|
43
|
+
for (const [key, callbackSubscription,] of this._listenersSymbols.entries()) {
|
|
44
|
+
if (callbackSubscription === subscriptionId) {
|
|
45
|
+
this.unregisterCallback(key);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return this.apiUnsubscribeFrom(subscriptionsId);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.BaseEventDispatcherManager = BaseEventDispatcherManager;
|
|
53
|
+
class ThreadEventsManager extends BaseEventDispatcherManager {
|
|
54
|
+
threadApi;
|
|
55
|
+
constructor(threadApi) {
|
|
56
|
+
super();
|
|
57
|
+
this.threadApi = threadApi;
|
|
58
|
+
}
|
|
59
|
+
apiSubscribeFor(channels) {
|
|
60
|
+
return this.threadApi.subscribeFor(channels);
|
|
61
|
+
}
|
|
62
|
+
apiUnsubscribeFrom(subscriptionId) {
|
|
63
|
+
return this.threadApi.unsubscribeFrom(subscriptionId);
|
|
64
|
+
}
|
|
65
|
+
async subscribeFor(subscriptions) {
|
|
66
|
+
const subscriptionChannels = await Promise.all(subscriptions.map((s) => {
|
|
67
|
+
return this.threadApi.buildSubscriptionQuery(s.type, s.selector, s.id);
|
|
68
|
+
}));
|
|
69
|
+
return this.prepareSubscription(subscriptionChannels, subscriptions);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.ThreadEventsManager = ThreadEventsManager;
|
|
73
|
+
class StoreEventsManager extends BaseEventDispatcherManager {
|
|
74
|
+
storeApi;
|
|
75
|
+
constructor(storeApi) {
|
|
76
|
+
super();
|
|
77
|
+
this.storeApi = storeApi;
|
|
78
|
+
}
|
|
79
|
+
apiSubscribeFor(channels) {
|
|
80
|
+
return this.storeApi.subscribeFor(channels);
|
|
81
|
+
}
|
|
82
|
+
apiUnsubscribeFrom(subscriptionId) {
|
|
83
|
+
return this.storeApi.unsubscribeFrom(subscriptionId);
|
|
84
|
+
}
|
|
85
|
+
async subscribeFor(subscriptions) {
|
|
86
|
+
const subscriptionChannels = await Promise.all(subscriptions.map((s) => {
|
|
87
|
+
return this.storeApi.buildSubscriptionQuery(s.type, s.selector, s.id);
|
|
88
|
+
}));
|
|
89
|
+
return this.prepareSubscription(subscriptionChannels, subscriptions);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.StoreEventsManager = StoreEventsManager;
|
|
93
|
+
class InboxEventsManager extends BaseEventDispatcherManager {
|
|
94
|
+
inboxApi;
|
|
95
|
+
constructor(inboxApi) {
|
|
96
|
+
super();
|
|
97
|
+
this.inboxApi = inboxApi;
|
|
98
|
+
}
|
|
99
|
+
apiSubscribeFor(channels) {
|
|
100
|
+
return this.inboxApi.subscribeFor(channels);
|
|
101
|
+
}
|
|
102
|
+
apiUnsubscribeFrom(subscriptionId) {
|
|
103
|
+
return this.inboxApi.unsubscribeFrom(subscriptionId);
|
|
104
|
+
}
|
|
105
|
+
async subscribeFor(subscriptions) {
|
|
106
|
+
const subscriptionChannels = await Promise.all(subscriptions.map((s) => {
|
|
107
|
+
return this.inboxApi.buildSubscriptionQuery(s.type, s.selector, s.id);
|
|
108
|
+
}));
|
|
109
|
+
return this.prepareSubscription(subscriptionChannels, subscriptions);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.InboxEventsManager = InboxEventsManager;
|
|
113
|
+
class KvdbEventsManager extends BaseEventDispatcherManager {
|
|
114
|
+
kvdbApi;
|
|
115
|
+
constructor(kvdbApi) {
|
|
116
|
+
super();
|
|
117
|
+
this.kvdbApi = kvdbApi;
|
|
118
|
+
}
|
|
119
|
+
apiSubscribeFor(channels) {
|
|
120
|
+
return this.kvdbApi.subscribeFor(channels);
|
|
121
|
+
}
|
|
122
|
+
apiUnsubscribeFrom(subscriptionId) {
|
|
123
|
+
return this.kvdbApi.unsubscribeFrom(subscriptionId);
|
|
124
|
+
}
|
|
125
|
+
async subscribeFor(subscriptions) {
|
|
126
|
+
const subscriptionChannels = await Promise.all(subscriptions.map((s) => {
|
|
127
|
+
return this.kvdbApi.buildSubscriptionQuery(s.type, s.selector, s.id);
|
|
128
|
+
}));
|
|
129
|
+
return this.prepareSubscription(subscriptionChannels, subscriptions);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.KvdbEventsManager = KvdbEventsManager;
|
|
133
|
+
exports.ConnectionChannels = {
|
|
134
|
+
[subscriptions_1.ConnectionEventType.LIB_CONNECTED]: "channel/lib_connected",
|
|
135
|
+
[subscriptions_1.ConnectionEventType.LIB_DISCONNECTED]: "channel/lib_disconnected",
|
|
136
|
+
[subscriptions_1.ConnectionEventType.LIB_PLATFORM_DISCONNECTED]: "channel/lib_platform_disconnected",
|
|
137
|
+
};
|
|
138
|
+
class ConnectionEventsManager extends BaseEventDispatcherManager {
|
|
139
|
+
connectionId;
|
|
140
|
+
constructor(connectionId) {
|
|
141
|
+
super();
|
|
142
|
+
this.connectionId = connectionId;
|
|
143
|
+
}
|
|
144
|
+
apiSubscribeFor(channels) {
|
|
145
|
+
return Promise.resolve(channels);
|
|
146
|
+
}
|
|
147
|
+
apiUnsubscribeFrom() {
|
|
148
|
+
return Promise.resolve();
|
|
149
|
+
}
|
|
150
|
+
async subscribeFor(subscriptions) {
|
|
151
|
+
const subscriptionChannels = subscriptions.map((x) => {
|
|
152
|
+
return `${this.connectionId}/${subscriptions_1.ConnectionEventType[x.type]}`;
|
|
153
|
+
});
|
|
154
|
+
return this.prepareSubscription(subscriptionChannels, subscriptions);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.ConnectionEventsManager = ConnectionEventsManager;
|