@unchainedshop/events 2.5.12 → 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.
@@ -1,3 +1,29 @@
1
- import { ContextNormalizerFunction, EventDirector as IEventDirector } from '@unchainedshop/types/events.js';
1
+ export type RawPayloadType<T> = {
2
+ payload: T;
3
+ context: {
4
+ userAgent?: string;
5
+ language?: string;
6
+ country?: string;
7
+ remoteAddress?: string;
8
+ referer?: string;
9
+ origin?: string;
10
+ userId?: string;
11
+ };
12
+ };
13
+ export interface EmitAdapter {
14
+ publish(eventName: string, data: RawPayloadType<Record<string, any>>): void;
15
+ subscribe(eventName: string, callback: (payload: RawPayloadType<Record<string, any>>) => void): void;
16
+ }
17
+ export type ContextNormalizerFunction = (context: any) => RawPayloadType<any>['context'];
2
18
  export declare const defaultNormalizer: ContextNormalizerFunction;
3
- export declare const EventDirector: IEventDirector;
19
+ export declare const EventDirector: {
20
+ registerEvents: (events: string[]) => void;
21
+ getRegisteredEvents: () => string[];
22
+ setContextNormalizer: (fn: ContextNormalizerFunction) => void;
23
+ setEmitAdapter: (adapter: EmitAdapter) => void;
24
+ getEmitAdapter: () => EmitAdapter;
25
+ setEmitHistoryAdapter: (adapter: EmitAdapter) => void;
26
+ getEmitHistoryAdapter: () => EmitAdapter;
27
+ emit: (eventName: string, data?: Record<string, any>) => Promise<void>;
28
+ subscribe: <T>(eventName: string, callback: (payload: RawPayloadType<T>) => void) => void;
29
+ };
@@ -41,12 +41,13 @@ export const EventDirector = {
41
41
  const extractedContext = ContextNormalizer(null);
42
42
  if (!RegisteredEventsSet.has(eventName))
43
43
  throw new Error(`Event with ${eventName} is not registered`);
44
+ const payload = data || {};
44
45
  Adapter?.publish(eventName, {
45
- payload: { ...data },
46
+ payload,
46
47
  context: extractedContext,
47
48
  });
48
49
  HistoryAdapter?.publish(eventName, {
49
- payload: { ...data },
50
+ payload,
50
51
  context: extractedContext,
51
52
  });
52
53
  logger.verbose(`EventDirector -> Emitted ${eventName} with ${JSON.stringify(data)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"EventDirector.js","sourceRoot":"","sources":["../src/EventDirector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EventDirector.js","sourceRoot":"","sources":["../src/EventDirector.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- declare const emit: (eventName: string, data?: string | Record<string, unknown>) => Promise<void>, getEmitAdapter: () => import("@unchainedshop/types/events.js").EmitAdapter, getEmitHistoryAdapter: () => import("@unchainedshop/types/events.js").EmitAdapter, getRegisteredEvents: () => string[], registerEvents: (events: string[]) => void, setEmitAdapter: (adapter: import("@unchainedshop/types/events.js").EmitAdapter) => void, setEmitHistoryAdapter: (adapter: import("@unchainedshop/types/events.js").EmitAdapter) => void, subscribe: (eventName: string, callback: (payload?: Record<string, unknown>) => void) => void;
2
- export { emit, getEmitAdapter, getEmitHistoryAdapter, getRegisteredEvents, registerEvents, setEmitAdapter, setEmitHistoryAdapter, subscribe, };
1
+ import { EmitAdapter } from './EventDirector.js';
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>(eventName: string, callback: (payload: import("./EventDirector.js").RawPayloadType<T>) => void) => void;
3
+ export { emit, getEmitAdapter, getEmitHistoryAdapter, getRegisteredEvents, registerEvents, setEmitAdapter, setEmitHistoryAdapter, subscribe, EmitAdapter, };
@@ -1 +1 @@
1
- {"version":3,"file":"events-index.js","sourceRoot":"","sources":["../src/events-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,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,GACV,CAAC"}
1
+ {"version":3,"file":"events-index.js","sourceRoot":"","sources":["../src/events-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAC;AAEhE,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,GAEV,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/events",
3
- "version": "2.5.12",
3
+ "version": "2.6.0",
4
4
  "main": "lib/events-index.js",
5
5
  "exports": {
6
6
  ".": "./lib/events-index.js",
@@ -31,14 +31,14 @@
31
31
  },
32
32
  "homepage": "https://github.com/unchainedshop/unchained#readme",
33
33
  "dependencies": {
34
- "@unchainedshop/logger": "^2.5.12"
34
+ "@unchainedshop/logger": "^2.6.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@types/jest": "^29.5.10",
38
- "@types/node": "^20.10.1",
39
- "@unchainedshop/types": "^2.5.12",
37
+ "@types/jest": "^29.5.11",
38
+ "@types/node": "^20.11.6",
39
+ "@unchainedshop/types": "^2.6.0",
40
40
  "jest": "^29.7.0",
41
- "ts-jest": "^29.1.1",
42
- "typescript": "^5.3.2"
41
+ "ts-jest": "^29.1.2",
42
+ "typescript": "^5.3.3"
43
43
  }
44
44
  }
@@ -1,12 +1,26 @@
1
- import {
2
- ContextNormalizerFunction,
3
- EmitAdapter,
4
- EventDirector as IEventDirector,
5
- } from '@unchainedshop/types/events.js';
6
1
  import { createLogger } from '@unchainedshop/logger';
7
2
 
8
3
  const logger = createLogger('unchained:events');
9
4
 
5
+ export type RawPayloadType<T> = {
6
+ payload: T;
7
+ context: {
8
+ userAgent?: string;
9
+ language?: string;
10
+ country?: string;
11
+ remoteAddress?: string;
12
+ referer?: string;
13
+ origin?: string;
14
+ userId?: string;
15
+ };
16
+ };
17
+ export interface EmitAdapter {
18
+ publish(eventName: string, data: RawPayloadType<Record<string, any>>): void;
19
+ subscribe(eventName: string, callback: (payload: RawPayloadType<Record<string, any>>) => void): void;
20
+ }
21
+
22
+ export type ContextNormalizerFunction = (context: any) => RawPayloadType<any>['context'];
23
+
10
24
  export const defaultNormalizer: ContextNormalizerFunction = (context) => {
11
25
  return {
12
26
  userAgent: context?.userAgent,
@@ -26,7 +40,7 @@ let Adapter: EmitAdapter; // Public (customizable)
26
40
  let HistoryAdapter: EmitAdapter; // (Per default: Core-events adapter to write into DB)
27
41
  let ContextNormalizer = defaultNormalizer;
28
42
 
29
- export const EventDirector: IEventDirector = {
43
+ export const EventDirector = {
30
44
  registerEvents: (events: string[]): void => {
31
45
  if (events.length) {
32
46
  events.forEach((e) => RegisteredEventsSet.add(e));
@@ -42,38 +56,40 @@ export const EventDirector: IEventDirector = {
42
56
  ContextNormalizer = fn;
43
57
  },
44
58
 
45
- setEmitAdapter: (adapter: EmitAdapter) => {
59
+ setEmitAdapter: (adapter: EmitAdapter): void => {
46
60
  Adapter = adapter;
47
61
  },
48
62
 
49
63
  getEmitAdapter: (): EmitAdapter => Adapter,
50
64
 
51
- setEmitHistoryAdapter: (adapter: EmitAdapter) => {
65
+ setEmitHistoryAdapter: (adapter: EmitAdapter): void => {
52
66
  HistoryAdapter = adapter;
53
67
  },
54
68
 
55
69
  getEmitHistoryAdapter: (): EmitAdapter => HistoryAdapter,
56
70
 
57
- emit: async (eventName: string, data: any): Promise<void> => {
71
+ emit: async (eventName: string, data?: Record<string, any>): Promise<void> => {
58
72
  const extractedContext = ContextNormalizer(null);
59
73
 
60
74
  if (!RegisteredEventsSet.has(eventName))
61
75
  throw new Error(`Event with ${eventName} is not registered`);
62
76
 
77
+ const payload = data || {};
78
+
63
79
  Adapter?.publish(eventName, {
64
- payload: { ...data },
80
+ payload,
65
81
  context: extractedContext,
66
82
  });
67
83
 
68
84
  HistoryAdapter?.publish(eventName, {
69
- payload: { ...data },
85
+ payload,
70
86
  context: extractedContext,
71
87
  });
72
88
 
73
89
  logger.verbose(`EventDirector -> Emitted ${eventName} with ${JSON.stringify(data)}`);
74
90
  },
75
91
 
76
- subscribe: (eventName: string, callback: () => void): void => {
92
+ subscribe: <T>(eventName: string, callback: (payload: RawPayloadType<T>) => void): void => {
77
93
  const currentSubscription = `${eventName}${callback?.toString()}`; // used to avaoid registering the same event handler callback
78
94
 
79
95
  if (!RegisteredEventsSet.has(eventName))
@@ -1,4 +1,4 @@
1
- import { EventDirector } from './EventDirector.js';
1
+ import { EventDirector, EmitAdapter } from './EventDirector.js';
2
2
 
3
3
  const {
4
4
  emit,
@@ -23,4 +23,5 @@ export {
23
23
  setEmitAdapter,
24
24
  setEmitHistoryAdapter,
25
25
  subscribe,
26
+ EmitAdapter,
26
27
  };