Skip to content

Commit 8fa3ef4

Browse files
committed
Fixing modules types
1 parent 18857e4 commit 8fa3ef4

7 files changed

Lines changed: 121 additions & 50 deletions

File tree

components/pryv-monitor/src/Monitor.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@ const _updateStreams = require('./lib/updateStreams');
99
const Changes = require('./lib/Changes');
1010

1111
/**
12+
* Monitor changes on a Pryv.io account.
13+
* Emits events when data changes are detected.
1214
* @memberof pryv
15+
* @extends EventEmitter
1316
*/
1417
class Monitor extends EventEmitter {
1518
/**
16-
*
17-
* @param {(pryv.APIEndpoint|pryv.Connection)} apiEndpointOrConnection APIEndoint or connection to use
18-
* @param {pryv.Monitor.Scope} [eventsGetScope={}] The Scope to monitor
19+
* Create a new Monitor
20+
* @param {(string|Connection)} apiEndpointOrConnection - API endpoint URL or Connection instance
21+
* @param {MonitorScope} [eventsGetScope={}] - The scope to monitor (events.get parameters)
1922
*/
2023
constructor (apiEndpointOrConnection, eventsGetScope = {}) {
2124
super();
@@ -44,8 +47,8 @@ class Monitor extends EventEmitter {
4447
}
4548

4649
/**
47-
* Start the monitor
48-
* @returns {Monitor} this
50+
* Start the monitor and perform initial sync
51+
* @returns {Promise<Monitor>} Promise resolving to this Monitor instance
4952
*/
5053
async start () {
5154
if (this.states.started || this.states.starting) return this;
@@ -63,8 +66,8 @@ class Monitor extends EventEmitter {
6366
}
6467

6568
/**
66-
* request and update of events
67-
* @returns {Monitor} this
69+
* Request an events update according to the current scope
70+
* @returns {Promise<Monitor>} Promise resolving to this Monitor instance
6871
*/
6972
async updateEvents () {
7073
if (!this.states.started) {
@@ -95,8 +98,8 @@ class Monitor extends EventEmitter {
9598
}
9699

97100
/**
98-
* request and update of streams
99-
* @returns {Monitor} this
101+
* Request a streams update
102+
* @returns {Promise<Monitor>} Promise resolving to this Monitor instance
100103
*/
101104
async updateStreams () {
102105
if (!this.states.started) {

components/pryv-monitor/src/UpdateMethod/EventsTimer.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@
44
*/
55
const UpdateMethod = require('./UpdateMethod');
66

7+
/**
8+
* Update method that polls for event changes at a fixed interval.
9+
* @memberof pryv.Monitor
10+
* @extends UpdateMethod
11+
*/
712
class EventsTimer extends UpdateMethod {
813
/**
9-
* @param {Number} updateRateMS - the refresh rate in milliseconds
14+
* @param {number} updateRateMS - The refresh rate in milliseconds (must be > 1)
1015
*/
1116
constructor (updateRateMS) {
1217
super();

components/pryv-monitor/src/UpdateMethod/Socket.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
const UpdateMethod = require('./UpdateMethod');
77
const Changes = require('../lib/Changes');
88

9+
/**
10+
* Update method that uses @pryv/socket.io events for real-time updates.
11+
* Requires @pryv/socket.io to be loaded.
12+
* @memberof pryv.Monitor
13+
* @extends UpdateMethod
14+
*/
915
class Socket extends UpdateMethod {
1016
async ready () {
1117
if (this.socket) return;

components/pryv-monitor/src/UpdateMethod/UpdateMethod.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
*/
55
const Changes = require('../lib/Changes');
66
/**
7-
* Interface for UpdateMonitor
7+
* Base class for update methods used by Monitor.
8+
* Subclass this to create custom update strategies.
89
* @memberof pryv.Monitor
9-
* @constructor {Monitor~UpdateMethod} updateMethod.setMonitor - set only once
1010
*/
1111
class UpdateMethod {
1212
/**
1313
* Assign a Monitor to this updater.
1414
* Usually called by the monitor itself on monitor.addUpdateMethod()
15-
* @param {Monitor} monitor
15+
* @param {Monitor} monitor - The monitor to attach to
1616
*/
1717
setMonitor (monitor) {
1818
if (this.monitor) {
@@ -27,15 +27,15 @@ class UpdateMethod {
2727
}
2828

2929
/**
30-
* Should be overwritten by subclases
31-
* Called with no params, when all update tasks are done.
32-
* Also used at "start" call
30+
* Called when all update tasks are done and monitor is ready for next update.
31+
* Override in subclasses to implement custom behavior.
32+
* @returns {Promise<void>}
3333
*/
3434
async ready () { }
3535

3636
/**
37-
* Should be overwritten by subclases
38-
* Called with no params, when monitor is stoped: updater should be stoped too.
37+
* Called when monitor is stopped. Override to clean up resources.
38+
* @returns {Promise<void>}
3939
*/
4040
async stop () { }
4141
}

components/pryv-monitor/src/index.d.ts

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@ import { EventEmitter } from 'events';
77
* Typical usage:
88
* ```ts
99
* import pryv from 'pryv';
10-
* import monitor from '@pryv/monitor';
10+
* import extendPryvMonitor from '@pryv/monitor';
1111
*
1212
* extendPryvMonitor(pryv);
1313
*
14-
* const monitor = new pryv.Monitor('https://token@user.pryv.me', {
14+
* const mon = new pryv.Monitor('https://token@user.pryv.me', {
1515
* streams: ['data'],
1616
* });
1717
*
18-
* monitor.on(pryv.Monitor.Changes.EVENT, (event) => {
18+
* mon.on(pryv.Monitor.Changes.EVENT, (event) => {
1919
* // handle new or changed event
2020
* });
2121
*
22-
* await monitor.start();
22+
* await mon.start();
2323
* ```
2424
*/
2525
export default function extendPryvMonitor(pryvLib: typeof pryv): typeof pryv.Monitor;
@@ -60,6 +60,9 @@ declare module 'pryv' {
6060
export class Monitor extends EventEmitter {
6161
constructor(apiEndpointOrConnection: APIEndpoint | Connection, eventsGetScope?: MonitorScope);
6262

63+
/** The connection used by this monitor */
64+
readonly connection: Connection;
65+
6366
/**
6467
* Start the monitor and perform initial sync.
6568
* Resolves with the same monitor instance.
@@ -93,6 +96,7 @@ declare module 'pryv' {
9396

9497
/**
9598
* Attach an auto-update method implementation.
99+
* @param updateMethod - The update method to use (e.g., EventsTimer, Socket)
96100
*/
97101
addUpdateMethod(updateMethod: MonitorUpdateMethod): Monitor;
98102

@@ -101,19 +105,18 @@ declare module 'pryv' {
101105
*
102106
* Events:
103107
* - `event` – new or updated event
104-
* - `eventDelete` – deleted event
108+
* - `eventDelete` – deleted event (with id property)
105109
* - `streams` – updated streams list
106110
* - `error` – error object
107111
* - `ready` – monitor is ready for next update
108112
* - `stop` – monitor has been stopped
109113
*/
110114
on(event: 'event', listener: (event: Event) => void): this;
111-
on(event: 'eventDelete', listener: (event: Event) => void): this;
115+
on(event: 'eventDelete', listener: (deletion: ItemDeletion) => void): this;
112116
on(event: 'streams', listener: (streams: Stream[]) => void): this;
113-
on(event: 'error', listener: (error: any) => void): this;
117+
on(event: 'error', listener: (error: Error | unknown) => void): this;
114118
on(event: 'ready', listener: () => void): this;
115119
on(event: 'stop', listener: () => void): this;
116-
on(event: string, listener: (...args: any[]) => void): this;
117120

118121
/**
119122
* Static access to available update methods.
@@ -128,29 +131,59 @@ declare module 'pryv' {
128131
* Static enum of change names.
129132
*/
130133
static Changes: typeof MonitorChanges;
134+
135+
/** Reference to pryv library (set during extension) */
136+
static pryv: typeof pryv;
131137
}
132138

133139
/**
134-
* Base interface for update methods used by Monitor.
140+
* Base class for update methods used by Monitor.
141+
* Subclass this to create custom update strategies.
135142
*/
136143
export class MonitorUpdateMethod {
144+
/** The monitor this update method is attached to */
137145
protected monitor?: Monitor;
146+
147+
/**
148+
* Assign a Monitor to this updater.
149+
* Usually called by the monitor itself on monitor.addUpdateMethod()
150+
* @param monitor - The monitor to attach to
151+
*/
138152
setMonitor(monitor: Monitor): void;
153+
154+
/**
155+
* Called when all update tasks are done and monitor is ready for next update.
156+
* Override in subclasses to implement custom behavior.
157+
*/
139158
ready(): Promise<void>;
159+
160+
/**
161+
* Called when monitor is stopped. Override to clean up resources.
162+
*/
140163
stop(): Promise<void>;
141164
}
142165

143166
/**
144167
* Update method that polls for event changes at a fixed interval.
145168
*/
146169
export class EventsTimerUpdateMethod extends MonitorUpdateMethod {
170+
/**
171+
* @param updateRateMS - The refresh rate in milliseconds (must be > 1)
172+
*/
147173
constructor(updateRateMS: number);
174+
175+
/** The configured update rate in milliseconds */
176+
readonly updateRateMS: number;
148177
}
149178

150179
/**
151-
* Update method that uses @pryv/socket.io events.
180+
* Update method that uses @pryv/socket.io events for real-time updates.
181+
* Requires @pryv/socket.io to be loaded.
152182
*/
153-
export class SocketUpdateMethod extends MonitorUpdateMethod {}
183+
export class SocketUpdateMethod extends MonitorUpdateMethod {
184+
/** The socket instance (set after ready() is called) */
185+
protected socket?: SocketIO;
186+
}
154187
}
155188

156189

components/pryv-socket.io/src/SocketIO.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,29 @@ const { EventEmitter } = require('events');
77

88
const EVENTS = ['eventsChanged', 'streamsChanged', 'accessesChanged', 'disconnect', 'error'];
99

10+
/**
11+
* Socket.IO transport for a Connection.
12+
* Use connection.socket to access the instance associated with a Connection.
13+
* @memberof pryv
14+
* @extends EventEmitter
15+
*/
1016
class SocketIO extends EventEmitter {
17+
/**
18+
* @param {Connection} connection - The connection to bind to
19+
*/
1120
constructor (connection) {
1221
super();
22+
/** @type {Connection} */
1323
this.connection = connection;
24+
/** @type {boolean} */
1425
this.connecting = false;
1526
this._io = null;
1627
}
1728

1829
/**
19-
* Open the scocket stream
30+
* Open the Socket.IO stream
2031
* @throws {Error} On connection failures
21-
* @return {SocketIO} this
32+
* @returns {Promise<SocketIO>} Promise resolving to this SocketIO instance
2233
*/
2334
async open () {
2435
return new Promise((resolve, reject) => {
@@ -71,10 +82,10 @@ class SocketIO extends EventEmitter {
7182
}
7283

7384
/**
74-
* Add listner
75-
* @param {string} eventName - one of 'eventsChanged', 'streamsChanged', 'accessesChanged', 'disconnect', 'error'
76-
* @param {Function} listener The callback function
77-
* @return {EventEmitter};
85+
* Add listener for Socket.IO events
86+
* @param {('eventsChanged'|'streamsChanged'|'accessesChanged'|'disconnect'|'error')} eventName - The event to listen for
87+
* @param {Function} listener - The callback function
88+
* @returns {SocketIO} this
7889
*/
7990
on (eventName, listener) {
8091
checkOpen(this);
@@ -85,7 +96,10 @@ class SocketIO extends EventEmitter {
8596
}
8697

8798
/**
88-
* Identical to Connection.api() using socket.io transport
99+
* Identical to Connection.api() but using Socket.IO transport
100+
* @param {Array<MethodCall>} arrayOfAPICalls - Array of Method Calls
101+
* @param {Function} [progress] - Return percentage of progress (0 - 100)
102+
* @returns {Promise<Array>} Promise to Array of results matching each method call in order
89103
*/
90104
async api (arrayOfAPICalls, progress) {
91105
checkOpen(this);

components/pryv-socket.io/src/index.d.ts

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ import { EventEmitter } from 'events';
2121
export default function extendPryvSocketIO(pryvLib: typeof pryv): void;
2222

2323
declare module 'pryv' {
24+
export type SocketIOEventName =
25+
| 'eventsChanged'
26+
| 'streamsChanged'
27+
| 'accessesChanged'
28+
| 'disconnect'
29+
| 'error';
30+
2431
/**
2532
* Socket.IO transport for a `Connection`.
2633
*
@@ -30,6 +37,12 @@ declare module 'pryv' {
3037
export class SocketIO extends EventEmitter {
3138
constructor(connection: Connection);
3239

40+
/** The connection this socket is bound to */
41+
readonly connection: Connection;
42+
43+
/** True while the socket is in the process of connecting */
44+
readonly connecting: boolean;
45+
3346
/**
3447
* Open the Socket.IO stream.
3548
* @throws Error on connection failures
@@ -54,21 +67,18 @@ declare module 'pryv' {
5467
* Listen to Socket.IO events emitted by the Pryv.io backend.
5568
*
5669
* Supported events:
57-
* - `eventsChanged`
58-
* - `streamsChanged`
59-
* - `accessesChanged`
60-
* - `disconnect`
61-
* - `error`
70+
* - `eventsChanged` - Events have been modified
71+
* - `streamsChanged` - Streams have been modified
72+
* - `accessesChanged` - Accesses have been modified
73+
* - `disconnect` - Socket disconnected
74+
* - `error` - An error occurred
6275
*/
63-
on(
64-
eventName:
65-
| 'eventsChanged'
66-
| 'streamsChanged'
67-
| 'accessesChanged'
68-
| 'disconnect'
69-
| 'error',
70-
listener: (...args: any[]) => void
71-
): this;
76+
on(event: 'eventsChanged', listener: () => void): this;
77+
on(event: 'streamsChanged', listener: () => void): this;
78+
on(event: 'accessesChanged', listener: () => void): this;
79+
on(event: 'disconnect', listener: (reason: string) => void): this;
80+
on(event: 'error', listener: (error: Error | unknown) => void): this;
81+
on(event: SocketIOEventName, listener: (...args: unknown[]) => void): this;
7282
}
7383

7484
export class Connection {

0 commit comments

Comments
 (0)