@wipperoz/wipperoz-core 1.1.9 → 1.1.10

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.
@@ -3,11 +3,32 @@ import { JSONObject } from '@wipperoz/common-utils/dist/lib/utils';
3
3
  import { NotificationCategoryEnum, NotificationPriorityEnum, NotificationSeverityEnum } from '@wipperoz/common-entities/dist/src/enums';
4
4
  type MetadataLeaf = string | number | boolean | null | Date;
5
5
  type NotificationMetadata = Record<string, MetadataLeaf | JsonValue | JSONObject | MetadataLeaf[] | JsonValue[] | JSONObject[] | Record<string, MetadataLeaf | JsonValue | JSONObject>>;
6
+ /**
7
+ * SNS Message Types - Defines WHAT ACTION the UI should take
8
+ *
9
+ * - USER_NOTIFICATION: Show a bell notification to the user (user-facing alert)
10
+ * - USER_UPDATE: Silent UI update (refresh data without showing notification)
11
+ * - BROADCAST_MESSAGE: System-wide announcement to all users
12
+ * - SYSTEM_ALERT: Critical system notification
13
+ * - TYPING_INDICATOR: Real-time typing status in chat
14
+ * - STATUS_UPDATE: Status change (online/offline, etc.)
15
+ *
16
+ * Combined with NotificationCategoryEnum (CV, BILLING, ACCOUNT, etc.) to identify
17
+ * WHICH PART of the platform the notification belongs to.
18
+ *
19
+ * Examples:
20
+ * - CV Created: type=USER_NOTIFICATION, category=CV → Bell notification
21
+ * - CV Updated: type=USER_UPDATE, category=CV → Silent refresh of CV list
22
+ * - Balance Charged: type=USER_UPDATE, category=BILLING → Update balance display
23
+ * - Credits Added: type=USER_NOTIFICATION, category=BILLING → Bell + update balance
24
+ */
25
+ export type SNSMessageType = 'USER_NOTIFICATION' | 'BROADCAST_MESSAGE' | 'SYSTEM_ALERT' | 'USER_UPDATE' | 'TYPING_INDICATOR' | 'STATUS_UPDATE';
6
26
  export interface BellNotificationPayload {
7
27
  userId: string;
8
28
  id: string;
9
29
  title: string;
10
30
  message: string;
31
+ type?: SNSMessageType;
11
32
  category?: NotificationCategoryEnum;
12
33
  priority?: NotificationPriorityEnum;
13
34
  severity?: NotificationSeverityEnum;
@@ -18,8 +39,13 @@ export interface BellNotificationPayload {
18
39
  channels?: Partial<Record<'websocket' | 'email' | 'push', boolean>>;
19
40
  }
20
41
  /**
21
- * Send a generic bell notification (Notification Center).
22
- * This creates a persistent notification in the user's notification center.
42
+ * Send a WebSocket notification via SNS.
43
+ *
44
+ * Use `type` to control UI behavior:
45
+ * - USER_NOTIFICATION: Creates a bell notification (user-facing alert)
46
+ * - USER_UPDATE: Silent data refresh (no bell, just update UI state)
47
+ *
48
+ * Use `category` to identify the platform section (CV, BILLING, ACCOUNT, etc.)
23
49
  */
24
50
  export declare function sendBellNotification(notification: BellNotificationPayload): Promise<void>;
25
51
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"sendWebSocketNotification.d.ts","sourceRoot":"","sources":["../../src/utils/sendWebSocketNotification.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,uCAAuC,CAAC;AACjE,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,0CAA0C,CAAC;AAElD,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5D,KAAK,oBAAoB,GAAG,MAAM,CAChC,MAAM,EACJ,YAAY,GACZ,SAAS,GACT,UAAU,GACV,YAAY,EAAE,GACd,SAAS,EAAE,GACX,UAAU,EAAE,GACZ,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC,CACxD,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsE/F"}
1
+ {"version":3,"file":"sendWebSocketNotification.d.ts","sourceRoot":"","sources":["../../src/utils/sendWebSocketNotification.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,uCAAuC,CAAC;AACjE,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,0CAA0C,CAAC;AAElD,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5D,KAAK,oBAAoB,GAAG,MAAM,CAChC,MAAM,EACJ,YAAY,GACZ,SAAS,GACT,UAAU,GACV,YAAY,EAAE,GACd,SAAS,EAAE,GACX,UAAU,EAAE,GACZ,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC,CACxD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,cAAc,GACtB,mBAAmB,GACnB,mBAAmB,GACnB,cAAc,GACd,aAAa,GACb,kBAAkB,GAClB,eAAe,CAAC;AAEpB,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrE;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE/F"}
@@ -4,8 +4,13 @@ exports.sendBellNotification = sendBellNotification;
4
4
  const client_sns_1 = require("@aws-sdk/client-sns");
5
5
  const enums_1 = require("@wipperoz/common-entities/dist/src/enums");
6
6
  /**
7
- * Send a generic bell notification (Notification Center).
8
- * This creates a persistent notification in the user's notification center.
7
+ * Send a WebSocket notification via SNS.
8
+ *
9
+ * Use `type` to control UI behavior:
10
+ * - USER_NOTIFICATION: Creates a bell notification (user-facing alert)
11
+ * - USER_UPDATE: Silent data refresh (no bell, just update UI state)
12
+ *
13
+ * Use `category` to identify the platform section (CV, BILLING, ACCOUNT, etc.)
9
14
  */
10
15
  async function sendBellNotification(notification) {
11
16
  const snsTopicArn = process.env.WEBSOCKET_SNS_TOPIC_ARN;
@@ -25,8 +30,9 @@ async function sendBellNotification(notification) {
25
30
  console.warn('[sendBellNotification] At least one channel must be enabled, skipping bell notification');
26
31
  return;
27
32
  }
33
+ const messageType = notification.type ?? 'USER_NOTIFICATION';
28
34
  const bellNotification = {
29
- type: 'NOTIFICATION',
35
+ type: messageType,
30
36
  userId: notification.userId,
31
37
  timestamp: Date.now(),
32
38
  channels,
@@ -45,6 +51,7 @@ async function sendBellNotification(notification) {
45
51
  },
46
52
  },
47
53
  };
54
+ console.log('[sendBellNotification] Bell notification:', bellNotification);
48
55
  try {
49
56
  const command = new client_sns_1.PublishCommand({
50
57
  TopicArn: snsTopicArn,
@@ -52,7 +59,7 @@ async function sendBellNotification(notification) {
52
59
  MessageAttributes: {
53
60
  messageType: {
54
61
  DataType: 'String',
55
- StringValue: 'NOTIFICATION',
62
+ StringValue: messageType,
56
63
  },
57
64
  userId: {
58
65
  DataType: 'String',
@@ -60,6 +67,7 @@ async function sendBellNotification(notification) {
60
67
  },
61
68
  },
62
69
  });
70
+ console.log('[sendBellNotification] Bell notification command:', command);
63
71
  await snsClient.send(command);
64
72
  console.log('[sendBellNotification] Bell notification sent:', {
65
73
  userId: notification.userId,
@@ -1 +1 @@
1
- {"version":3,"file":"sendWebSocketNotification.js","sourceRoot":"","sources":["../../src/utils/sendWebSocketNotification.ts"],"names":[],"mappings":";;AAyCA,oDAsEC;AA/GD,oDAA8D;AAG9D,oEAIkD;AA8BlD;;;GAGG;AACI,KAAK,UAAU,oBAAoB,CAAC,YAAqC;IAC9E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAExD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;QAC1G,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,sBAAS,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;KAC9C,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG;QACf,SAAS,EAAE,YAAY,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI;QACnD,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,KAAK;QAC5C,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK;KAC3C,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;QACxG,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG;QACvB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,QAAQ;QACR,IAAI,EAAE;YACJ,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,gCAAwB,CAAC,OAAO;YACnE,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,gCAAwB,CAAC,MAAM;YAClE,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,gCAAwB,CAAC,IAAI;YAChE,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,KAAK;YAChC,WAAW,EAAE,YAAY,CAAC,WAAW,IAAI,IAAI;YAC7C,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,KAAK;YAC1C,QAAQ,EAAE;gBACR,EAAE,EAAE,YAAY,CAAC,EAAE;gBACnB,GAAG,CAAC,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC;aACjC;SACF;KACF,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,2BAAc,CAAC;YACjC,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;YACzC,iBAAiB,EAAE;gBACjB,WAAW,EAAE;oBACX,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,cAAc;iBAC5B;gBACD,MAAM,EAAE;oBACN,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,YAAY,CAAC,MAAM;iBACjC;aACF;SACF,CAAC,CAAC;QAEH,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE;YAC5D,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,EAAE,EAAE,YAAY,CAAC,EAAE;YACnB,KAAK,EAAE,YAAY,CAAC,KAAK;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,KAAK,CAAC,CAAC;QAC5E,oEAAoE;IACtE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"sendWebSocketNotification.js","sourceRoot":"","sources":["../../src/utils/sendWebSocketNotification.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipperoz/wipperoz-core",
3
- "version": "1.1.9",
3
+ "version": "1.1.10",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
@@ -79,7 +79,7 @@
79
79
  },
80
80
  "dependencies": {
81
81
  "@wipperoz/common-utils": "1.23.10",
82
- "@wipperoz/common-entities": "1.8.2",
82
+ "@wipperoz/common-entities": "1.8.3",
83
83
  "@wipperoz/common-entities-account": "1.4.4"
84
84
  },
85
85
  "config": {