@powersync/service-core 0.0.0-dev-20250714115156 → 0.0.0-dev-20250714132759
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/CHANGELOG.md +2 -2
- package/dist/emitters/EmitterEngine.d.ts +12 -11
- package/dist/emitters/EmitterEngine.js +34 -22
- package/dist/emitters/EmitterEngine.js.map +1 -1
- package/dist/emitters/emitter-interfaces.d.ts +7 -35
- package/dist/emitters/emitter-interfaces.js +16 -9
- package/dist/emitters/emitter-interfaces.js.map +1 -1
- package/dist/routes/endpoints/sync-stream.js +4 -8
- package/dist/routes/endpoints/sync-stream.js.map +1 -1
- package/dist/system/ServiceContext.js +1 -2
- package/dist/system/ServiceContext.js.map +1 -1
- package/package.json +2 -2
- package/src/emitters/EmitterEngine.ts +37 -25
- package/src/emitters/emitter-interfaces.ts +22 -43
- package/src/routes/endpoints/sync-stream.ts +4 -9
- package/src/system/ServiceContext.ts +1 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/emitters/AbstractEmitterEngine.d.ts +0 -13
- package/dist/emitters/AbstractEmitterEngine.js +0 -57
- package/dist/emitters/AbstractEmitterEngine.js.map +0 -1
- package/dist/emitters/event-error.d.ts +0 -5
- package/dist/emitters/event-error.js +0 -8
- package/dist/emitters/event-error.js.map +0 -1
- package/dist/emitters/events/connect-event.d.ts +0 -10
- package/dist/emitters/events/connect-event.js +0 -32
- package/dist/emitters/events/connect-event.js.map +0 -1
- package/dist/emitters/events/disconnect-event.d.ts +0 -10
- package/dist/emitters/events/disconnect-event.js +0 -27
- package/dist/emitters/events/disconnect-event.js.map +0 -1
- package/dist/emitters/events/index.d.ts +0 -1
- package/dist/emitters/events/index.js +0 -4
- package/dist/emitters/events/index.js.map +0 -1
- package/src/emitters/AbstractEmitterEngine.ts +0 -64
- package/src/emitters/event-error.ts +0 -10
- package/src/emitters/events/connect-event.ts +0 -34
- package/src/emitters/events/disconnect-event.ts +0 -36
- package/src/emitters/events/index.ts +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @powersync/service-core
|
|
2
2
|
|
|
3
|
-
## 0.0.0-dev-
|
|
3
|
+
## 0.0.0-dev-20250714132759
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- ba1ceef: Remove unused dev config.
|
|
12
12
|
- f1431b6: Improve diagnostics in logs for JWKS timeouts.
|
|
13
13
|
- Updated dependencies [ba1ceef]
|
|
14
|
-
- @powersync/service-types@0.0.0-dev-
|
|
14
|
+
- @powersync/service-types@0.0.0-dev-20250714132759
|
|
15
15
|
|
|
16
16
|
## 1.13.3
|
|
17
17
|
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { BaseEmitterEngine
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
constructor(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { BaseEmitterEngine } from './emitter-interfaces.js';
|
|
2
|
+
import { event_types } from '@powersync/service-types';
|
|
3
|
+
export declare class EmitterEngine implements BaseEmitterEngine {
|
|
4
|
+
private emitter;
|
|
5
|
+
eventsMap: Map<event_types.EmitterEngineEventNames, event_types.EmitterEvent>;
|
|
6
|
+
constructor();
|
|
7
|
+
eventNames(): event_types.EmitterEngineEventNames[];
|
|
8
|
+
getStoredEvent(eventName: event_types.EmitterEngineEventNames): event_types.EmitterEvent;
|
|
9
|
+
get listEvents(): event_types.EmitterEngineEventNames[];
|
|
10
|
+
bindEvent(event: event_types.EmitterEvent): void;
|
|
11
|
+
emitEvent(eventName: event_types.EmitterEngineEventNames, data: any): void;
|
|
12
|
+
shutDown(): void;
|
|
12
13
|
}
|
|
@@ -1,35 +1,47 @@
|
|
|
1
|
-
import
|
|
1
|
+
import EventEmitter from 'node:events';
|
|
2
2
|
import { logger } from '@powersync/lib-services-framework';
|
|
3
|
-
export class EmitterEngine
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
this.
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
export class EmitterEngine {
|
|
4
|
+
emitter;
|
|
5
|
+
eventsMap = new Map();
|
|
6
|
+
constructor() {
|
|
7
|
+
this.emitter = new EventEmitter({ captureRejections: true });
|
|
8
|
+
this.emitter.on('error', (error) => {
|
|
9
|
+
logger.error(error);
|
|
10
|
+
});
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
eventNames() {
|
|
13
|
+
return this.emitter.eventNames();
|
|
14
|
+
}
|
|
15
|
+
getStoredEvent(eventName) {
|
|
16
|
+
if (!this.eventsMap.has(eventName)) {
|
|
14
17
|
throw new Error(`Event ${eventName} is not registered.`);
|
|
15
18
|
}
|
|
16
|
-
return
|
|
19
|
+
return this.eventsMap.get(eventName);
|
|
17
20
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.removeListeners(eventName);
|
|
21
|
-
}
|
|
21
|
+
get listEvents() {
|
|
22
|
+
return this.emitter.eventNames();
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
bindEvent(event) {
|
|
25
|
+
const eventNames = this.emitter.eventNames();
|
|
26
|
+
if (!eventNames.includes(event.name)) {
|
|
27
|
+
this.eventsMap.set(event.name, event);
|
|
28
|
+
this.emitter.on(event.name, event.handler.bind(event));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
logger.warn(`Event ${event.name} is already registered. Skipping.`);
|
|
32
|
+
}
|
|
25
33
|
}
|
|
26
34
|
emitEvent(eventName, data) {
|
|
27
|
-
if (this.
|
|
28
|
-
|
|
35
|
+
if (!this.emitter.eventNames().includes(eventName)) {
|
|
36
|
+
logger.error(`Event ${eventName} is not registered.`);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.emitter.emit(eventName, { ...data, type: eventName });
|
|
29
40
|
}
|
|
30
41
|
}
|
|
31
|
-
|
|
32
|
-
this.
|
|
42
|
+
shutDown() {
|
|
43
|
+
this.emitter.removeAllListeners();
|
|
44
|
+
logger.info('Emitter engine shut down and all listeners removed.');
|
|
33
45
|
}
|
|
34
46
|
}
|
|
35
47
|
//# sourceMappingURL=EmitterEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmitterEngine.js","sourceRoot":"","sources":["../../src/emitters/EmitterEngine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EmitterEngine.js","sourceRoot":"","sources":["../../src/emitters/EmitterEngine.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAG3D,MAAM,OAAO,aAAa;IAChB,OAAO,CAAe;IAC9B,SAAS,GAAuE,IAAI,GAAG,EAAE,CAAC;IAC1F;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YACxC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAA2C,CAAC;IAC5E,CAAC;IAED,cAAc,CAAC,SAA8C;QAC3D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,SAAS,SAAS,qBAAqB,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAA6B,CAAC;IACnE,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAA2C,CAAC;IAC5E,CAAC;IAED,SAAS,CAAC,KAA+B;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,mCAAmC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,SAAS,CAAC,SAA8C,EAAE,IAAS;QACjE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,SAAS,SAAS,qBAAqB,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;CACF"}
|
|
@@ -1,37 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import * as storage from '../storage/storage-index.js';
|
|
3
|
-
import { EventError } from './event-error.js';
|
|
4
|
-
export declare enum EventNames {
|
|
5
|
-
SDK_CONNECT_EVENT = "sdk-connect-event",
|
|
6
|
-
SDK_DISCONNECT_EVENT = "sdk-disconnect-event"
|
|
7
|
-
}
|
|
8
|
-
export type SdkEvent = {
|
|
9
|
-
client_id?: string;
|
|
10
|
-
user_id: string;
|
|
11
|
-
user_agent: string;
|
|
12
|
-
jwt_token?: JwtPayload;
|
|
13
|
-
};
|
|
14
|
-
export type EventConnectData = {
|
|
15
|
-
type: EventNames.SDK_CONNECT_EVENT;
|
|
16
|
-
connect_at: number;
|
|
17
|
-
} & SdkEvent;
|
|
18
|
-
export type EventDisconnectData = {
|
|
19
|
-
type: EventNames.SDK_DISCONNECT_EVENT;
|
|
20
|
-
disconnect_at: number;
|
|
21
|
-
} & SdkEvent;
|
|
22
|
-
export type EmitterEventData = EventConnectData | EventDisconnectData;
|
|
23
|
-
export type EventHandler = (data: EmitterEventData) => Promise<void>;
|
|
24
|
-
export type StorageHandler = (storageEngine: storage.StorageEngine) => EventHandler;
|
|
25
|
-
export interface EmitterEvent {
|
|
26
|
-
name: EventNames;
|
|
27
|
-
handler: StorageHandler;
|
|
28
|
-
errorhandler?: (error: Error | EventError) => void;
|
|
29
|
-
}
|
|
1
|
+
import { event_types } from '@powersync/service-types';
|
|
30
2
|
export interface BaseEmitterEngine {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
3
|
+
listEvents: event_types.EmitterEngineEventNames[];
|
|
4
|
+
bindEvent(events: event_types.EmitterEvent): void;
|
|
5
|
+
eventNames(): event_types.EmitterEngineEventNames[];
|
|
6
|
+
emitEvent(eventName: event_types.EmitterEngineEventNames, data: any): void;
|
|
7
|
+
getStoredEvent(eventName: event_types.EmitterEngineEventNames): event_types.EmitterEvent;
|
|
8
|
+
shutDown(): void;
|
|
36
9
|
}
|
|
37
|
-
export declare function isEventError(error: Error | EventError): error is EventError;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
// export type SdkEvent = {
|
|
2
|
+
// client_id?: string;
|
|
3
|
+
// user_id: string;
|
|
4
|
+
// user_agent: string;
|
|
5
|
+
// jwt_token?: JwtPayload;
|
|
6
|
+
// };
|
|
7
|
+
//
|
|
8
|
+
// export type EventConnectData = {
|
|
9
|
+
// type: EmitterEngineEventNames.SDK_CONNECT_EVENT;
|
|
10
|
+
// connect_at: number;
|
|
11
|
+
// } & SdkEvent;
|
|
12
|
+
// export type EventDisconnectData = {
|
|
13
|
+
// type: EmitterEngineEventNames.SDK_DISCONNECT_EVENT;
|
|
14
|
+
// disconnect_at: number;
|
|
15
|
+
// } & SdkEvent;
|
|
16
|
+
export {};
|
|
10
17
|
//# sourceMappingURL=emitter-interfaces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter-interfaces.js","sourceRoot":"","sources":["../../src/emitters/emitter-interfaces.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emitter-interfaces.js","sourceRoot":"","sources":["../../src/emitters/emitter-interfaces.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,wBAAwB;AACxB,qBAAqB;AACrB,wBAAwB;AACxB,4BAA4B;AAC5B,KAAK;AACL,EAAE;AACF,mCAAmC;AACnC,qDAAqD;AACrD,wBAAwB;AACxB,gBAAgB;AAChB,sCAAsC;AACtC,wDAAwD;AACxD,2BAA2B;AAC3B,gBAAgB"}
|
|
@@ -5,8 +5,7 @@ import * as sync from '../../sync/sync-index.js';
|
|
|
5
5
|
import * as util from '../../util/util-index.js';
|
|
6
6
|
import { authUser } from '../auth.js';
|
|
7
7
|
import { routeDefinition } from '../router.js';
|
|
8
|
-
import { APIMetric } from '@powersync/service-types';
|
|
9
|
-
import { EventNames } from '../../emitters/emitter-interfaces.js';
|
|
8
|
+
import { APIMetric, event_types } from '@powersync/service-types';
|
|
10
9
|
export var SyncRoutes;
|
|
11
10
|
(function (SyncRoutes) {
|
|
12
11
|
SyncRoutes["STREAM"] = "/sync/stream";
|
|
@@ -57,8 +56,7 @@ export const syncStreamed = routeDefinition({
|
|
|
57
56
|
const tracker = new sync.RequestTracker(metricsEngine);
|
|
58
57
|
try {
|
|
59
58
|
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(1);
|
|
60
|
-
service_context.emitterEngine.emitEvent(
|
|
61
|
-
type: EventNames.SDK_CONNECT_EVENT,
|
|
59
|
+
service_context.emitterEngine.emitEvent(event_types.EmitterEngineEventNames.SDK_CONNECT_EVENT, {
|
|
62
60
|
...sdkData,
|
|
63
61
|
connect_at: streamStart
|
|
64
62
|
});
|
|
@@ -110,8 +108,7 @@ export const syncStreamed = routeDefinition({
|
|
|
110
108
|
}
|
|
111
109
|
controller.abort();
|
|
112
110
|
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(-1);
|
|
113
|
-
service_context.emitterEngine.emitEvent(
|
|
114
|
-
type: EventNames.SDK_DISCONNECT_EVENT,
|
|
111
|
+
service_context.emitterEngine.emitEvent(event_types.EmitterEngineEventNames.SDK_DISCONNECT_EVENT, {
|
|
115
112
|
...sdkData,
|
|
116
113
|
disconnect_at: Date.now()
|
|
117
114
|
});
|
|
@@ -126,8 +123,7 @@ export const syncStreamed = routeDefinition({
|
|
|
126
123
|
catch (ex) {
|
|
127
124
|
controller.abort();
|
|
128
125
|
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(-1);
|
|
129
|
-
service_context.emitterEngine.emitEvent(
|
|
130
|
-
type: EventNames.SDK_DISCONNECT_EVENT,
|
|
126
|
+
service_context.emitterEngine.emitEvent(event_types.EmitterEngineEventNames.SDK_DISCONNECT_EVENT, {
|
|
131
127
|
...sdkData,
|
|
132
128
|
disconnect_at: Date.now()
|
|
133
129
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-stream.js","sourceRoot":"","sources":["../../../src/routes/endpoints/sync-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-stream.js","sourceRoot":"","sources":["../../../src/routes/endpoints/sync-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,6 @@ import * as storage from '../storage/storage-index.js';
|
|
|
7
7
|
import { SyncContext } from '../sync/SyncContext.js';
|
|
8
8
|
import * as utils from '../util/util-index.js';
|
|
9
9
|
import { EmitterEngine } from '../emitters/EmitterEngine.js';
|
|
10
|
-
import { events } from '../emitters/events/index.js';
|
|
11
10
|
export var ServiceContextMode;
|
|
12
11
|
(function (ServiceContextMode) {
|
|
13
12
|
ServiceContextMode["API"] = "api";
|
|
@@ -45,7 +44,7 @@ export class ServiceContextContainer {
|
|
|
45
44
|
this.lifeCycleEngine.stopWithError(error);
|
|
46
45
|
}
|
|
47
46
|
});
|
|
48
|
-
this.emitterEngine = new EmitterEngine(
|
|
47
|
+
this.emitterEngine = new EmitterEngine();
|
|
49
48
|
this.lifeCycleEngine.withLifecycle(this.storageEngine, {
|
|
50
49
|
start: (storageEngine) => storageEngine.start(),
|
|
51
50
|
stop: (storageEngine) => storageEngine.shutDown()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceContext.js","sourceRoot":"","sources":["../../src/system/ServiceContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAqB,MAAM,mCAAmC,CAAC;AAErH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAC;AAEvD,OAAO,KAAK,WAAW,MAAM,qCAAqC,CAAC;AACnE,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"ServiceContext.js","sourceRoot":"","sources":["../../src/system/ServiceContext.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "0.0.0-dev-
|
|
8
|
+
"version": "0.0.0-dev-20250714132759",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"license": "FSL-1.1-Apache-2.0",
|
|
11
11
|
"type": "module",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@powersync/service-jsonbig": "0.17.10",
|
|
37
37
|
"@powersync/service-rsocket-router": "0.1.1",
|
|
38
38
|
"@powersync/service-sync-rules": "0.27.0",
|
|
39
|
-
"@powersync/service-types": "0.0.0-dev-
|
|
39
|
+
"@powersync/service-types": "0.0.0-dev-20250714132759"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/async": "^3.2.24",
|
|
@@ -1,41 +1,53 @@
|
|
|
1
|
-
import { BaseEmitterEngine
|
|
2
|
-
import
|
|
3
|
-
import { AbstractEmitterEngine } from './AbstractEmitterEngine.js';
|
|
1
|
+
import { BaseEmitterEngine } from './emitter-interfaces.js';
|
|
2
|
+
import EventEmitter from 'node:events';
|
|
4
3
|
import { logger } from '@powersync/lib-services-framework';
|
|
4
|
+
import { event_types } from '@powersync/service-types';
|
|
5
5
|
|
|
6
|
-
export class EmitterEngine
|
|
7
|
-
private
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
this.
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
export class EmitterEngine implements BaseEmitterEngine {
|
|
7
|
+
private emitter: EventEmitter;
|
|
8
|
+
eventsMap: Map<event_types.EmitterEngineEventNames, event_types.EmitterEvent> = new Map();
|
|
9
|
+
constructor() {
|
|
10
|
+
this.emitter = new EventEmitter({ captureRejections: true });
|
|
11
|
+
this.emitter.on('error', (error: Error) => {
|
|
12
|
+
logger.error(error);
|
|
13
|
+
});
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
eventNames(): event_types.EmitterEngineEventNames[] {
|
|
17
|
+
return this.emitter.eventNames() as event_types.EmitterEngineEventNames[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getStoredEvent(eventName: event_types.EmitterEngineEventNames): event_types.EmitterEvent {
|
|
21
|
+
if (!this.eventsMap.has(eventName)) {
|
|
18
22
|
throw new Error(`Event ${eventName} is not registered.`);
|
|
19
23
|
}
|
|
20
|
-
return
|
|
24
|
+
return this.eventsMap.get(eventName) as event_types.EmitterEvent;
|
|
21
25
|
}
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.removeListeners(eventName);
|
|
26
|
-
}
|
|
27
|
+
get listEvents(): event_types.EmitterEngineEventNames[] {
|
|
28
|
+
return this.emitter.eventNames() as event_types.EmitterEngineEventNames[];
|
|
27
29
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
|
|
31
|
+
bindEvent(event: event_types.EmitterEvent): void {
|
|
32
|
+
const eventNames = this.emitter.eventNames();
|
|
33
|
+
if (!eventNames.includes(event.name)) {
|
|
34
|
+
this.eventsMap.set(event.name, event);
|
|
35
|
+
this.emitter.on(event.name, event.handler.bind(event));
|
|
36
|
+
} else {
|
|
37
|
+
logger.warn(`Event ${event.name} is already registered. Skipping.`);
|
|
38
|
+
}
|
|
30
39
|
}
|
|
31
40
|
|
|
32
|
-
emitEvent(eventName:
|
|
33
|
-
if (this.
|
|
34
|
-
|
|
41
|
+
emitEvent(eventName: event_types.EmitterEngineEventNames, data: any): void {
|
|
42
|
+
if (!this.emitter.eventNames().includes(eventName)) {
|
|
43
|
+
logger.error(`Event ${eventName} is not registered.`);
|
|
44
|
+
} else {
|
|
45
|
+
this.emitter.emit(eventName, { ...data, type: eventName });
|
|
35
46
|
}
|
|
36
47
|
}
|
|
37
48
|
|
|
38
|
-
|
|
39
|
-
this.
|
|
49
|
+
shutDown(): void {
|
|
50
|
+
this.emitter.removeAllListeners();
|
|
51
|
+
logger.info('Emitter engine shut down and all listeners removed.');
|
|
40
52
|
}
|
|
41
53
|
}
|
|
@@ -1,47 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// export type SdkEvent = {
|
|
2
|
+
// client_id?: string;
|
|
3
|
+
// user_id: string;
|
|
4
|
+
// user_agent: string;
|
|
5
|
+
// jwt_token?: JwtPayload;
|
|
6
|
+
// };
|
|
7
|
+
//
|
|
8
|
+
// export type EventConnectData = {
|
|
9
|
+
// type: EmitterEngineEventNames.SDK_CONNECT_EVENT;
|
|
10
|
+
// connect_at: number;
|
|
11
|
+
// } & SdkEvent;
|
|
12
|
+
// export type EventDisconnectData = {
|
|
13
|
+
// type: EmitterEngineEventNames.SDK_DISCONNECT_EVENT;
|
|
14
|
+
// disconnect_at: number;
|
|
15
|
+
// } & SdkEvent;
|
|
4
16
|
|
|
5
|
-
|
|
6
|
-
// SdK events
|
|
7
|
-
SDK_CONNECT_EVENT = 'sdk-connect-event',
|
|
8
|
-
SDK_DISCONNECT_EVENT = 'sdk-disconnect-event'
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export type SdkEvent = {
|
|
12
|
-
client_id?: string;
|
|
13
|
-
user_id: string;
|
|
14
|
-
user_agent: string;
|
|
15
|
-
jwt_token?: JwtPayload;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export type EventConnectData = {
|
|
19
|
-
type: EventNames.SDK_CONNECT_EVENT;
|
|
20
|
-
connect_at: number;
|
|
21
|
-
} & SdkEvent;
|
|
22
|
-
|
|
23
|
-
export type EventDisconnectData = {
|
|
24
|
-
type: EventNames.SDK_DISCONNECT_EVENT;
|
|
25
|
-
disconnect_at: number;
|
|
26
|
-
} & SdkEvent;
|
|
27
|
-
|
|
28
|
-
export type EmitterEventData = EventConnectData | EventDisconnectData;
|
|
29
|
-
export type EventHandler = (data: EmitterEventData) => Promise<void>;
|
|
30
|
-
export type StorageHandler = (storageEngine: storage.StorageEngine) => EventHandler;
|
|
31
|
-
export interface EmitterEvent {
|
|
32
|
-
name: EventNames;
|
|
33
|
-
handler: StorageHandler;
|
|
34
|
-
errorhandler?: (error: Error | EventError) => void;
|
|
35
|
-
}
|
|
17
|
+
import { event_types } from '@powersync/service-types';
|
|
36
18
|
|
|
37
19
|
export interface BaseEmitterEngine {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
export function isEventError(error: Error | EventError): error is EventError {
|
|
46
|
-
return (error as EventError).eventName !== undefined;
|
|
20
|
+
listEvents: event_types.EmitterEngineEventNames[];
|
|
21
|
+
bindEvent(events: event_types.EmitterEvent): void;
|
|
22
|
+
eventNames(): event_types.EmitterEngineEventNames[];
|
|
23
|
+
emitEvent(eventName: event_types.EmitterEngineEventNames, data: any): void;
|
|
24
|
+
getStoredEvent(eventName: event_types.EmitterEngineEventNames): event_types.EmitterEvent;
|
|
25
|
+
shutDown(): void;
|
|
47
26
|
}
|
|
@@ -7,9 +7,7 @@ import * as util from '../../util/util-index.js';
|
|
|
7
7
|
|
|
8
8
|
import { authUser } from '../auth.js';
|
|
9
9
|
import { routeDefinition } from '../router.js';
|
|
10
|
-
|
|
11
|
-
import { APIMetric } from '@powersync/service-types';
|
|
12
|
-
import { EventNames } from '../../emitters/emitter-interfaces.js';
|
|
10
|
+
import { APIMetric, event_types } from '@powersync/service-types';
|
|
13
11
|
|
|
14
12
|
export enum SyncRoutes {
|
|
15
13
|
STREAM = '/sync/stream'
|
|
@@ -69,8 +67,7 @@ export const syncStreamed = routeDefinition({
|
|
|
69
67
|
const tracker = new sync.RequestTracker(metricsEngine);
|
|
70
68
|
try {
|
|
71
69
|
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(1);
|
|
72
|
-
service_context.emitterEngine.emitEvent(
|
|
73
|
-
type: EventNames.SDK_CONNECT_EVENT,
|
|
70
|
+
service_context.emitterEngine.emitEvent(event_types.EmitterEngineEventNames.SDK_CONNECT_EVENT, {
|
|
74
71
|
...sdkData,
|
|
75
72
|
connect_at: streamStart
|
|
76
73
|
});
|
|
@@ -136,8 +133,7 @@ export const syncStreamed = routeDefinition({
|
|
|
136
133
|
}
|
|
137
134
|
controller.abort();
|
|
138
135
|
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(-1);
|
|
139
|
-
service_context.emitterEngine.emitEvent(
|
|
140
|
-
type: EventNames.SDK_DISCONNECT_EVENT,
|
|
136
|
+
service_context.emitterEngine.emitEvent(event_types.EmitterEngineEventNames.SDK_DISCONNECT_EVENT, {
|
|
141
137
|
...sdkData,
|
|
142
138
|
disconnect_at: Date.now()
|
|
143
139
|
});
|
|
@@ -151,8 +147,7 @@ export const syncStreamed = routeDefinition({
|
|
|
151
147
|
} catch (ex) {
|
|
152
148
|
controller.abort();
|
|
153
149
|
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(-1);
|
|
154
|
-
service_context.emitterEngine.emitEvent(
|
|
155
|
-
type: EventNames.SDK_DISCONNECT_EVENT,
|
|
150
|
+
service_context.emitterEngine.emitEvent(event_types.EmitterEngineEventNames.SDK_DISCONNECT_EVENT, {
|
|
156
151
|
...sdkData,
|
|
157
152
|
disconnect_at: Date.now()
|
|
158
153
|
});
|
|
@@ -9,7 +9,6 @@ import * as storage from '../storage/storage-index.js';
|
|
|
9
9
|
import { SyncContext } from '../sync/SyncContext.js';
|
|
10
10
|
import * as utils from '../util/util-index.js';
|
|
11
11
|
import { EmitterEngine } from '../emitters/EmitterEngine.js';
|
|
12
|
-
import { events } from '../emitters/events/index.js';
|
|
13
12
|
|
|
14
13
|
export interface ServiceContext {
|
|
15
14
|
configuration: utils.ResolvedPowerSyncConfig;
|
|
@@ -70,7 +69,7 @@ export class ServiceContextContainer implements ServiceContext {
|
|
|
70
69
|
}
|
|
71
70
|
});
|
|
72
71
|
|
|
73
|
-
this.emitterEngine = new EmitterEngine(
|
|
72
|
+
this.emitterEngine = new EmitterEngine();
|
|
74
73
|
|
|
75
74
|
this.lifeCycleEngine.withLifecycle(this.storageEngine, {
|
|
76
75
|
start: (storageEngine) => storageEngine.start(),
|