@unchainedshop/events 4.3.4 → 4.4.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/README.md +84 -2
- package/lib/EventDirector.d.ts +0 -1
- package/lib/EventDirector.js +3 -4
- package/lib/events-index.d.ts +3 -3
- package/lib/events-index.js +1 -2
- package/package.json +9 -8
- package/lib/EventDirector.d.ts.map +0 -1
- package/lib/EventDirector.js.map +0 -1
- package/lib/events-index.d.ts.map +0 -1
- package/lib/events-index.js.map +0 -1
- package/src/EventDirector.ts +0 -74
- package/src/events-index.ts +0 -28
- package/tests/events-index.test.ts +0 -8
- package/tsconfig.json +0 -10
package/README.md
CHANGED
|
@@ -1,3 +1,85 @@
|
|
|
1
|
-
|
|
1
|
+
[](https://npmjs.com/package/@unchainedshop/events)
|
|
2
|
+
[](https://opensource.org/licenses/EUPL-1.2)
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
# @unchainedshop/events
|
|
5
|
+
|
|
6
|
+
Event emitter abstraction layer for the Unchained Engine. Provides a pluggable event system for emitting and subscribing to business events.
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install @unchainedshop/events
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { emit, subscribe, registerEvents } from '@unchainedshop/events';
|
|
18
|
+
|
|
19
|
+
// Register custom events
|
|
20
|
+
registerEvents(['ORDER_CREATED', 'ORDER_PAID']);
|
|
21
|
+
|
|
22
|
+
// Subscribe to events
|
|
23
|
+
subscribe('ORDER_CREATED', ({ payload }) => {
|
|
24
|
+
console.log('Order created:', payload);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Emit events
|
|
28
|
+
await emit('ORDER_CREATED', { orderId: '123', total: 99.99 });
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## API Overview
|
|
32
|
+
|
|
33
|
+
### Event Functions
|
|
34
|
+
|
|
35
|
+
| Export | Description |
|
|
36
|
+
|--------|-------------|
|
|
37
|
+
| `emit` | Emit an event with a payload |
|
|
38
|
+
| `subscribe` | Subscribe to an event with a callback handler |
|
|
39
|
+
| `registerEvents` | Register new event types |
|
|
40
|
+
| `getRegisteredEvents` | Get list of all registered event types |
|
|
41
|
+
|
|
42
|
+
### Adapter Management
|
|
43
|
+
|
|
44
|
+
| Export | Description |
|
|
45
|
+
|--------|-------------|
|
|
46
|
+
| `getEmitAdapter` | Get the current emit adapter |
|
|
47
|
+
| `setEmitAdapter` | Set a custom emit adapter |
|
|
48
|
+
| `getEmitHistoryAdapter` | Get the current emit history adapter |
|
|
49
|
+
| `setEmitHistoryAdapter` | Set a custom emit history adapter |
|
|
50
|
+
|
|
51
|
+
### Types
|
|
52
|
+
|
|
53
|
+
| Export | Description |
|
|
54
|
+
|--------|-------------|
|
|
55
|
+
| `EmitAdapter` | Interface for custom emit adapters |
|
|
56
|
+
| `RawPayloadType` | Type for event payload data |
|
|
57
|
+
|
|
58
|
+
### Built-in Events
|
|
59
|
+
|
|
60
|
+
| Event | Description |
|
|
61
|
+
|-------|-------------|
|
|
62
|
+
| `PAGE_VIEW` | Registered by default for page view tracking |
|
|
63
|
+
|
|
64
|
+
## Custom Adapters
|
|
65
|
+
|
|
66
|
+
You can implement custom emit adapters for different backends (Redis, Kafka, etc.):
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
import { setEmitAdapter, type EmitAdapter } from '@unchainedshop/events';
|
|
70
|
+
|
|
71
|
+
const customAdapter: EmitAdapter = {
|
|
72
|
+
publish: async (eventName, payload) => {
|
|
73
|
+
// Custom publish logic
|
|
74
|
+
},
|
|
75
|
+
subscribe: (eventName, callback) => {
|
|
76
|
+
// Custom subscribe logic
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
setEmitAdapter(customAdapter);
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## License
|
|
84
|
+
|
|
85
|
+
EUPL-1.2
|
package/lib/EventDirector.d.ts
CHANGED
|
@@ -15,4 +15,3 @@ export declare const EventDirector: {
|
|
|
15
15
|
emit: (eventName: string, data?: Record<string, any>) => Promise<void>;
|
|
16
16
|
subscribe: <T extends Record<string, any>>(eventName: string, callback: (payload: RawPayloadType<T>) => void) => void;
|
|
17
17
|
};
|
|
18
|
-
//# sourceMappingURL=EventDirector.d.ts.map
|
package/lib/EventDirector.js
CHANGED
|
@@ -2,8 +2,8 @@ import { createLogger } from '@unchainedshop/logger';
|
|
|
2
2
|
const logger = createLogger('unchained:events');
|
|
3
3
|
const RegisteredEventsSet = new Set();
|
|
4
4
|
const RegisteredCallbacksSet = new Set();
|
|
5
|
-
let Adapter;
|
|
6
|
-
let HistoryAdapter;
|
|
5
|
+
let Adapter;
|
|
6
|
+
let HistoryAdapter;
|
|
7
7
|
export const EventDirector = {
|
|
8
8
|
registerEvents: (events) => {
|
|
9
9
|
if (events.length) {
|
|
@@ -34,7 +34,7 @@ export const EventDirector = {
|
|
|
34
34
|
logger.debug(`EventDirector -> Emitted ${eventName} with ${JSON.stringify(data)}`);
|
|
35
35
|
},
|
|
36
36
|
subscribe: (eventName, callback) => {
|
|
37
|
-
const currentSubscription = `${eventName}${callback?.toString()}`;
|
|
37
|
+
const currentSubscription = `${eventName}${callback?.toString()}`;
|
|
38
38
|
if (!RegisteredEventsSet.has(eventName))
|
|
39
39
|
throw new Error(`Event with ${eventName} is not registered`);
|
|
40
40
|
if (!RegisteredCallbacksSet.has(currentSubscription)) {
|
|
@@ -44,4 +44,3 @@ export const EventDirector = {
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=EventDirector.js.map
|
package/lib/events-index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EmitAdapter, RawPayloadType } from './EventDirector.
|
|
1
|
+
import { type EmitAdapter, type RawPayloadType } from './EventDirector.ts';
|
|
2
2
|
declare const emit: (eventName: string, data?: Record<string, any>) => Promise<void>, getEmitAdapter: () => EmitAdapter, getEmitHistoryAdapter: () => EmitAdapter, getRegisteredEvents: () => string[], registerEvents: (events: string[]) => void, setEmitAdapter: (adapter: EmitAdapter) => void, setEmitHistoryAdapter: (adapter: EmitAdapter) => void, subscribe: <T extends Record<string, any>>(eventName: string, callback: (payload: RawPayloadType<T>) => void) => void;
|
|
3
|
-
export { emit, getEmitAdapter, getEmitHistoryAdapter, getRegisteredEvents, registerEvents, setEmitAdapter, setEmitHistoryAdapter, subscribe,
|
|
4
|
-
|
|
3
|
+
export { emit, getEmitAdapter, getEmitHistoryAdapter, getRegisteredEvents, registerEvents, setEmitAdapter, setEmitHistoryAdapter, subscribe, };
|
|
4
|
+
export type { EmitAdapter, RawPayloadType };
|
package/lib/events-index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { EventDirector } from
|
|
1
|
+
import { EventDirector } from "./EventDirector.js";
|
|
2
2
|
const { emit, getEmitAdapter, getEmitHistoryAdapter, getRegisteredEvents, registerEvents, setEmitAdapter, setEmitHistoryAdapter, subscribe, } = EventDirector;
|
|
3
3
|
const GLOBAL_EVENTS = ['PAGE_VIEW'];
|
|
4
4
|
registerEvents(GLOBAL_EVENTS);
|
|
5
5
|
export { emit, getEmitAdapter, getEmitHistoryAdapter, getRegisteredEvents, registerEvents, setEmitAdapter, setEmitHistoryAdapter, subscribe, };
|
|
6
|
-
//# sourceMappingURL=events-index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/events",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.0",
|
|
4
4
|
"main": "lib/events-index.js",
|
|
5
5
|
"types": "lib/events-index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"build": "tsc -b",
|
|
10
10
|
"prepublishOnly": "npm run clean && npm run build",
|
|
11
11
|
"watch": "tsc -w",
|
|
12
|
-
"test": "
|
|
13
|
-
"test:watch": "
|
|
12
|
+
"test": "node --test",
|
|
13
|
+
"test:watch": "node --test --watch"
|
|
14
14
|
},
|
|
15
15
|
"repository": {
|
|
16
16
|
"type": "git",
|
|
@@ -22,8 +22,10 @@
|
|
|
22
22
|
"core"
|
|
23
23
|
],
|
|
24
24
|
"authors": [
|
|
25
|
-
"
|
|
26
|
-
"
|
|
25
|
+
"Pascal Kaufmann",
|
|
26
|
+
"Mikael Araya",
|
|
27
|
+
"Vedran Rudelj",
|
|
28
|
+
"Joël Meiller"
|
|
27
29
|
],
|
|
28
30
|
"license": "EUPL-1.2",
|
|
29
31
|
"bugs": {
|
|
@@ -31,11 +33,10 @@
|
|
|
31
33
|
},
|
|
32
34
|
"homepage": "https://github.com/unchainedshop/unchained#readme",
|
|
33
35
|
"dependencies": {
|
|
34
|
-
"@unchainedshop/logger": "^4.
|
|
36
|
+
"@unchainedshop/logger": "^4.4.0"
|
|
35
37
|
},
|
|
36
38
|
"devDependencies": {
|
|
37
|
-
"@types/node": "^
|
|
38
|
-
"tsx": "^4.20.3",
|
|
39
|
+
"@types/node": "^25.0.0",
|
|
39
40
|
"typescript": "^5.8.3"
|
|
40
41
|
}
|
|
41
42
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventDirector.d.ts","sourceRoot":"","sources":["../src/EventDirector.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC;CACZ;AACD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5E,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;CACtG;AAQD,eAAO,MAAM,aAAa;6BACC,MAAM,EAAE,KAAG,IAAI;+BAMf,MAAM,EAAE;8BAIP,WAAW,KAAG,IAAI;0BAIxB,WAAW;qCAEE,WAAW,KAAG,IAAI;iCAIxB,WAAW;sBAEd,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC;gBAiB9D,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,aAC5B,MAAM,YACP,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,KAC7C,IAAI;CAYR,CAAC"}
|
package/lib/EventDirector.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventDirector.js","sourceRoot":"","sources":["../src/EventDirector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAUhD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAE,CAAC;AACtC,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAE,CAAC;AAEzC,IAAI,OAAoB,CAAC,CAAC,wBAAwB;AAClD,IAAI,cAA2B,CAAC,CAAC,sDAAsD;AAEvF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,cAAc,EAAE,CAAC,MAAgB,EAAQ,EAAE;QACzC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,mBAAmB,EAAE,GAAa,EAAE;QAClC,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAa,CAAC;IACrD,CAAC;IAED,cAAc,EAAE,CAAC,OAAoB,EAAQ,EAAE;QAC7C,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC;IAED,cAAc,EAAE,GAAgB,EAAE,CAAC,OAAO;IAE1C,qBAAqB,EAAE,CAAC,OAAoB,EAAQ,EAAE;QACpD,cAAc,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,qBAAqB,EAAE,GAAgB,EAAE,CAAC,cAAc;IAExD,IAAI,EAAE,KAAK,EAAE,SAAiB,EAAE,IAA0B,EAAiB,EAAE;QAC3E,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,oBAAoB,CAAC,CAAC;QAE/D,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAE3B,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE;YAC1B,OAAO;SACR,CAAC,CAAC;QAEH,cAAc,EAAE,OAAO,CAAC,SAAS,EAAE;YACjC,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,4BAA4B,SAAS,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,SAAS,EAAE,CACT,SAAiB,EACjB,QAA8C,EACxC,EAAE;QACR,MAAM,mBAAmB,GAAG,GAAG,SAAS,GAAG,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,6DAA6D;QAEhI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,oBAAoB,CAAC,CAAC;QAE/D,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACrD,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACxC,cAAc,EAAE,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC/C,sBAAsB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events-index.d.ts","sourceRoot":"","sources":["../src/events-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEhF,QAAA,MACE,IAAI,oEACJ,cAAc,qBACd,qBAAqB,qBACrB,mBAAmB,kBACnB,cAAc,8BACd,cAAc,kCACd,qBAAqB,kCACrB,SAAS,4GACM,CAAC;AAKlB,OAAO,EACL,IAAI,EACJ,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,cAAc,GACf,CAAC"}
|
package/lib/events-index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events-index.js","sourceRoot":"","sources":["../src/events-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA+B,MAAM,oBAAoB,CAAC;AAEhF,MAAM,EACJ,IAAI,EACJ,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,SAAS,GACV,GAAG,aAAa,CAAC;AAElB,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC;AACpC,cAAc,CAAC,aAAa,CAAC,CAAC;AAE9B,OAAO,EACL,IAAI,EACJ,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,SAAS,GAGV,CAAC"}
|
package/src/EventDirector.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { createLogger } from '@unchainedshop/logger';
|
|
2
|
-
|
|
3
|
-
const logger = createLogger('unchained:events');
|
|
4
|
-
|
|
5
|
-
export interface RawPayloadType<T> {
|
|
6
|
-
payload: T;
|
|
7
|
-
}
|
|
8
|
-
export interface EmitAdapter {
|
|
9
|
-
publish(eventName: string, data: RawPayloadType<Record<string, any>>): void;
|
|
10
|
-
subscribe(eventName: string, callback: (payload: RawPayloadType<Record<string, any>>) => void): void;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const RegisteredEventsSet = new Set();
|
|
14
|
-
const RegisteredCallbacksSet = new Set();
|
|
15
|
-
|
|
16
|
-
let Adapter: EmitAdapter; // Public (customizable)
|
|
17
|
-
let HistoryAdapter: EmitAdapter; // (Per default: Core-events adapter to write into DB)
|
|
18
|
-
|
|
19
|
-
export const EventDirector = {
|
|
20
|
-
registerEvents: (events: string[]): void => {
|
|
21
|
-
if (events.length) {
|
|
22
|
-
events.forEach((e) => RegisteredEventsSet.add(e));
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
getRegisteredEvents: (): string[] => {
|
|
27
|
-
return Array.from(RegisteredEventsSet) as string[];
|
|
28
|
-
},
|
|
29
|
-
|
|
30
|
-
setEmitAdapter: (adapter: EmitAdapter): void => {
|
|
31
|
-
Adapter = adapter;
|
|
32
|
-
},
|
|
33
|
-
|
|
34
|
-
getEmitAdapter: (): EmitAdapter => Adapter,
|
|
35
|
-
|
|
36
|
-
setEmitHistoryAdapter: (adapter: EmitAdapter): void => {
|
|
37
|
-
HistoryAdapter = adapter;
|
|
38
|
-
},
|
|
39
|
-
|
|
40
|
-
getEmitHistoryAdapter: (): EmitAdapter => HistoryAdapter,
|
|
41
|
-
|
|
42
|
-
emit: async (eventName: string, data?: Record<string, any>): Promise<void> => {
|
|
43
|
-
if (!RegisteredEventsSet.has(eventName))
|
|
44
|
-
throw new Error(`Event with ${eventName} is not registered`);
|
|
45
|
-
|
|
46
|
-
const payload = data || {};
|
|
47
|
-
|
|
48
|
-
Adapter?.publish(eventName, {
|
|
49
|
-
payload,
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
HistoryAdapter?.publish(eventName, {
|
|
53
|
-
payload,
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
logger.debug(`EventDirector -> Emitted ${eventName} with ${JSON.stringify(data)}`);
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
subscribe: <T extends Record<string, any>>(
|
|
60
|
-
eventName: string,
|
|
61
|
-
callback: (payload: RawPayloadType<T>) => void,
|
|
62
|
-
): void => {
|
|
63
|
-
const currentSubscription = `${eventName}${callback?.toString()}`; // used to avaoid registering the same event handler callback
|
|
64
|
-
|
|
65
|
-
if (!RegisteredEventsSet.has(eventName))
|
|
66
|
-
throw new Error(`Event with ${eventName} is not registered`);
|
|
67
|
-
|
|
68
|
-
if (!RegisteredCallbacksSet.has(currentSubscription)) {
|
|
69
|
-
Adapter?.subscribe(eventName, callback);
|
|
70
|
-
HistoryAdapter?.subscribe(eventName, callback);
|
|
71
|
-
RegisteredCallbacksSet.add(currentSubscription);
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
};
|
package/src/events-index.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { EventDirector, EmitAdapter, RawPayloadType } from './EventDirector.js';
|
|
2
|
-
|
|
3
|
-
const {
|
|
4
|
-
emit,
|
|
5
|
-
getEmitAdapter,
|
|
6
|
-
getEmitHistoryAdapter,
|
|
7
|
-
getRegisteredEvents,
|
|
8
|
-
registerEvents,
|
|
9
|
-
setEmitAdapter,
|
|
10
|
-
setEmitHistoryAdapter,
|
|
11
|
-
subscribe,
|
|
12
|
-
} = EventDirector;
|
|
13
|
-
|
|
14
|
-
const GLOBAL_EVENTS = ['PAGE_VIEW'];
|
|
15
|
-
registerEvents(GLOBAL_EVENTS);
|
|
16
|
-
|
|
17
|
-
export {
|
|
18
|
-
emit,
|
|
19
|
-
getEmitAdapter,
|
|
20
|
-
getEmitHistoryAdapter,
|
|
21
|
-
getRegisteredEvents,
|
|
22
|
-
registerEvents,
|
|
23
|
-
setEmitAdapter,
|
|
24
|
-
setEmitHistoryAdapter,
|
|
25
|
-
subscribe,
|
|
26
|
-
EmitAdapter,
|
|
27
|
-
RawPayloadType,
|
|
28
|
-
};
|