@pocketping/sdk-node 1.7.0 → 1.8.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/dist/index.cjs CHANGED
@@ -237,14 +237,19 @@ var DiscordBridge = class _DiscordBridge {
237
237
  */
238
238
  async onNewSession(session) {
239
239
  const url = session.metadata?.url || "Unknown page";
240
+ const email = session.identity?.email;
241
+ const phone = session.userPhone;
242
+ const userAgent = session.metadata?.userAgent;
243
+ const fields = [];
244
+ if (email) fields.push({ name: "\u{1F4E7} Email", value: email, inline: true });
245
+ if (phone) fields.push({ name: "\u{1F4F1} Phone", value: phone, inline: true });
246
+ if (userAgent) fields.push({ name: "\u{1F310} Device", value: this.parseUserAgent(userAgent), inline: true });
247
+ fields.push({ name: "\u{1F4CD} Page", value: url, inline: false });
240
248
  const embed = {
241
- title: "New chat session",
249
+ title: "\u{1F195} New chat session",
242
250
  color: 5793266,
243
251
  // Discord blurple
244
- fields: [
245
- { name: "Visitor", value: session.visitorId, inline: true },
246
- { name: "Page", value: url, inline: false }
247
- ],
252
+ fields,
248
253
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
249
254
  };
250
255
  try {
@@ -253,6 +258,24 @@ var DiscordBridge = class _DiscordBridge {
253
258
  console.error("[DiscordBridge] Failed to send new session notification:", error);
254
259
  }
255
260
  }
261
+ /**
262
+ * Parse user agent to readable format
263
+ */
264
+ parseUserAgent(ua) {
265
+ let browser = "Unknown";
266
+ if (ua.includes("Firefox/")) browser = "Firefox";
267
+ else if (ua.includes("Edg/")) browser = "Edge";
268
+ else if (ua.includes("Chrome/")) browser = "Chrome";
269
+ else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
270
+ else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
271
+ let os = "Unknown";
272
+ if (ua.includes("Windows")) os = "Windows";
273
+ else if (ua.includes("Mac OS")) os = "macOS";
274
+ else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
275
+ else if (ua.includes("Android")) os = "Android";
276
+ else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
277
+ return `${browser}/${os}`;
278
+ }
256
279
  /**
257
280
  * Called when a visitor sends a message.
258
281
  * Returns the Discord message ID for edit/delete sync.
@@ -616,37 +639,60 @@ ${SETUP_GUIDES.slack.botToken}`
616
639
  */
617
640
  async onNewSession(session) {
618
641
  const url = session.metadata?.url || "Unknown page";
642
+ const email = session.identity?.email;
643
+ const phone = session.userPhone;
644
+ const userAgent = session.metadata?.userAgent;
645
+ const contactFields = [];
646
+ if (email) contactFields.push({ type: "mrkdwn", text: `*\u{1F4E7} Email:*
647
+ ${email}` });
648
+ if (phone) contactFields.push({ type: "mrkdwn", text: `*\u{1F4F1} Phone:*
649
+ ${phone}` });
650
+ if (userAgent) contactFields.push({ type: "mrkdwn", text: `*\u{1F310} Device:*
651
+ ${this.parseUserAgent(userAgent)}` });
619
652
  const blocks = [
620
653
  {
621
654
  type: "header",
622
655
  text: {
623
656
  type: "plain_text",
624
- text: "New chat session",
657
+ text: "\u{1F195} New chat session",
625
658
  emoji: true
626
659
  }
627
- },
628
- {
629
- type: "section",
630
- fields: [
631
- {
632
- type: "mrkdwn",
633
- text: `*Visitor:*
634
- ${session.visitorId}`
635
- },
636
- {
637
- type: "mrkdwn",
638
- text: `*Page:*
639
- ${url}`
640
- }
641
- ]
642
660
  }
643
661
  ];
662
+ if (contactFields.length > 0) {
663
+ blocks.push({ type: "section", fields: contactFields });
664
+ }
665
+ blocks.push({
666
+ type: "section",
667
+ fields: [
668
+ { type: "mrkdwn", text: `*\u{1F4CD} Page:*
669
+ ${url}` }
670
+ ]
671
+ });
644
672
  try {
645
673
  await this.sendBlocks(blocks);
646
674
  } catch (error) {
647
675
  console.error("[SlackBridge] Failed to send new session notification:", error);
648
676
  }
649
677
  }
678
+ /**
679
+ * Parse user agent to readable format
680
+ */
681
+ parseUserAgent(ua) {
682
+ let browser = "Unknown";
683
+ if (ua.includes("Firefox/")) browser = "Firefox";
684
+ else if (ua.includes("Edg/")) browser = "Edge";
685
+ else if (ua.includes("Chrome/")) browser = "Chrome";
686
+ else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
687
+ else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
688
+ let os = "Unknown";
689
+ if (ua.includes("Windows")) os = "Windows";
690
+ else if (ua.includes("Mac OS")) os = "macOS";
691
+ else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
692
+ else if (ua.includes("Android")) os = "Android";
693
+ else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
694
+ return `${browser}/${os}`;
695
+ }
650
696
  /**
651
697
  * Called when a visitor sends a message.
652
698
  * Returns the Slack message timestamp for edit/delete sync.
@@ -993,8 +1039,7 @@ var TelegramBridge = class {
993
1039
  * Called when a new chat session is created
994
1040
  */
995
1041
  async onNewSession(session) {
996
- const url = session.metadata?.url || "Unknown page";
997
- const text = this.formatNewSession(session.visitorId, url);
1042
+ const text = this.formatNewSession(session);
998
1043
  try {
999
1044
  await this.sendMessage(text);
1000
1045
  } catch (error) {
@@ -1191,15 +1236,55 @@ ${dataStr}
1191
1236
  /**
1192
1237
  * Format new session notification
1193
1238
  */
1194
- formatNewSession(visitorId, url) {
1239
+ formatNewSession(session) {
1240
+ const url = session.metadata?.url || "Unknown page";
1241
+ const email = session.identity?.email;
1242
+ const phone = session.userPhone;
1243
+ const userAgent = session.metadata?.userAgent;
1195
1244
  if (this.parseMode === "HTML") {
1196
- return `<b>New chat session</b>
1197
- <b>Visitor:</b> ${this.escapeHtml(visitorId)}
1198
- <b>Page:</b> ${this.escapeHtml(url)}`;
1245
+ let text2 = `<b>\u{1F195} New chat session</b>
1246
+
1247
+ `;
1248
+ if (email) text2 += `\u{1F4E7} ${this.escapeHtml(email)}
1249
+ `;
1250
+ if (phone) text2 += `\u{1F4F1} ${this.escapeHtml(phone)}
1251
+ `;
1252
+ if (userAgent) text2 += `\u{1F310} ${this.escapeHtml(this.parseUserAgent(userAgent))}
1253
+ `;
1254
+ if (email || phone || userAgent) text2 += "\n";
1255
+ text2 += `<b>Page:</b> ${this.escapeHtml(url)}`;
1256
+ return text2;
1199
1257
  }
1200
- return `*New chat session*
1201
- *Visitor:* ${this.escapeMarkdown(visitorId)}
1202
- *Page:* ${this.escapeMarkdown(url)}`;
1258
+ let text = `*\u{1F195} New chat session*
1259
+
1260
+ `;
1261
+ if (email) text += `\u{1F4E7} ${this.escapeMarkdown(email)}
1262
+ `;
1263
+ if (phone) text += `\u{1F4F1} ${this.escapeMarkdown(phone)}
1264
+ `;
1265
+ if (userAgent) text += `\u{1F310} ${this.escapeMarkdown(this.parseUserAgent(userAgent))}
1266
+ `;
1267
+ if (email || phone || userAgent) text += "\n";
1268
+ text += `*Page:* ${this.escapeMarkdown(url)}`;
1269
+ return text;
1270
+ }
1271
+ /**
1272
+ * Parse user agent to readable format
1273
+ */
1274
+ parseUserAgent(ua) {
1275
+ let browser = "Unknown";
1276
+ if (ua.includes("Firefox/")) browser = "Firefox";
1277
+ else if (ua.includes("Edg/")) browser = "Edge";
1278
+ else if (ua.includes("Chrome/")) browser = "Chrome";
1279
+ else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
1280
+ else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
1281
+ let os = "Unknown";
1282
+ if (ua.includes("Windows")) os = "Windows";
1283
+ else if (ua.includes("Mac OS")) os = "macOS";
1284
+ else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
1285
+ else if (ua.includes("Android")) os = "Android";
1286
+ else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
1287
+ return `${browser}/${os}`;
1203
1288
  }
1204
1289
  /**
1205
1290
  * Format visitor message
package/dist/index.d.cts CHANGED
@@ -726,6 +726,10 @@ declare class DiscordBridge implements Bridge {
726
726
  * Called when a new chat session is created
727
727
  */
728
728
  onNewSession(session: Session): Promise<void>;
729
+ /**
730
+ * Parse user agent to readable format
731
+ */
732
+ private parseUserAgent;
729
733
  /**
730
734
  * Called when a visitor sends a message.
731
735
  * Returns the Discord message ID for edit/delete sync.
@@ -836,6 +840,10 @@ declare class SlackBridge implements Bridge {
836
840
  * Called when a new chat session is created
837
841
  */
838
842
  onNewSession(session: Session): Promise<void>;
843
+ /**
844
+ * Parse user agent to readable format
845
+ */
846
+ private parseUserAgent;
839
847
  /**
840
848
  * Called when a visitor sends a message.
841
849
  * Returns the Slack message timestamp for edit/delete sync.
@@ -966,6 +974,10 @@ declare class TelegramBridge implements Bridge {
966
974
  * Format new session notification
967
975
  */
968
976
  private formatNewSession;
977
+ /**
978
+ * Parse user agent to readable format
979
+ */
980
+ private parseUserAgent;
969
981
  /**
970
982
  * Format visitor message
971
983
  */
package/dist/index.d.ts CHANGED
@@ -726,6 +726,10 @@ declare class DiscordBridge implements Bridge {
726
726
  * Called when a new chat session is created
727
727
  */
728
728
  onNewSession(session: Session): Promise<void>;
729
+ /**
730
+ * Parse user agent to readable format
731
+ */
732
+ private parseUserAgent;
729
733
  /**
730
734
  * Called when a visitor sends a message.
731
735
  * Returns the Discord message ID for edit/delete sync.
@@ -836,6 +840,10 @@ declare class SlackBridge implements Bridge {
836
840
  * Called when a new chat session is created
837
841
  */
838
842
  onNewSession(session: Session): Promise<void>;
843
+ /**
844
+ * Parse user agent to readable format
845
+ */
846
+ private parseUserAgent;
839
847
  /**
840
848
  * Called when a visitor sends a message.
841
849
  * Returns the Slack message timestamp for edit/delete sync.
@@ -966,6 +974,10 @@ declare class TelegramBridge implements Bridge {
966
974
  * Format new session notification
967
975
  */
968
976
  private formatNewSession;
977
+ /**
978
+ * Parse user agent to readable format
979
+ */
980
+ private parseUserAgent;
969
981
  /**
970
982
  * Format visitor message
971
983
  */
package/dist/index.js CHANGED
@@ -199,14 +199,19 @@ var DiscordBridge = class _DiscordBridge {
199
199
  */
200
200
  async onNewSession(session) {
201
201
  const url = session.metadata?.url || "Unknown page";
202
+ const email = session.identity?.email;
203
+ const phone = session.userPhone;
204
+ const userAgent = session.metadata?.userAgent;
205
+ const fields = [];
206
+ if (email) fields.push({ name: "\u{1F4E7} Email", value: email, inline: true });
207
+ if (phone) fields.push({ name: "\u{1F4F1} Phone", value: phone, inline: true });
208
+ if (userAgent) fields.push({ name: "\u{1F310} Device", value: this.parseUserAgent(userAgent), inline: true });
209
+ fields.push({ name: "\u{1F4CD} Page", value: url, inline: false });
202
210
  const embed = {
203
- title: "New chat session",
211
+ title: "\u{1F195} New chat session",
204
212
  color: 5793266,
205
213
  // Discord blurple
206
- fields: [
207
- { name: "Visitor", value: session.visitorId, inline: true },
208
- { name: "Page", value: url, inline: false }
209
- ],
214
+ fields,
210
215
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
211
216
  };
212
217
  try {
@@ -215,6 +220,24 @@ var DiscordBridge = class _DiscordBridge {
215
220
  console.error("[DiscordBridge] Failed to send new session notification:", error);
216
221
  }
217
222
  }
223
+ /**
224
+ * Parse user agent to readable format
225
+ */
226
+ parseUserAgent(ua) {
227
+ let browser = "Unknown";
228
+ if (ua.includes("Firefox/")) browser = "Firefox";
229
+ else if (ua.includes("Edg/")) browser = "Edge";
230
+ else if (ua.includes("Chrome/")) browser = "Chrome";
231
+ else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
232
+ else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
233
+ let os = "Unknown";
234
+ if (ua.includes("Windows")) os = "Windows";
235
+ else if (ua.includes("Mac OS")) os = "macOS";
236
+ else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
237
+ else if (ua.includes("Android")) os = "Android";
238
+ else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
239
+ return `${browser}/${os}`;
240
+ }
218
241
  /**
219
242
  * Called when a visitor sends a message.
220
243
  * Returns the Discord message ID for edit/delete sync.
@@ -578,37 +601,60 @@ ${SETUP_GUIDES.slack.botToken}`
578
601
  */
579
602
  async onNewSession(session) {
580
603
  const url = session.metadata?.url || "Unknown page";
604
+ const email = session.identity?.email;
605
+ const phone = session.userPhone;
606
+ const userAgent = session.metadata?.userAgent;
607
+ const contactFields = [];
608
+ if (email) contactFields.push({ type: "mrkdwn", text: `*\u{1F4E7} Email:*
609
+ ${email}` });
610
+ if (phone) contactFields.push({ type: "mrkdwn", text: `*\u{1F4F1} Phone:*
611
+ ${phone}` });
612
+ if (userAgent) contactFields.push({ type: "mrkdwn", text: `*\u{1F310} Device:*
613
+ ${this.parseUserAgent(userAgent)}` });
581
614
  const blocks = [
582
615
  {
583
616
  type: "header",
584
617
  text: {
585
618
  type: "plain_text",
586
- text: "New chat session",
619
+ text: "\u{1F195} New chat session",
587
620
  emoji: true
588
621
  }
589
- },
590
- {
591
- type: "section",
592
- fields: [
593
- {
594
- type: "mrkdwn",
595
- text: `*Visitor:*
596
- ${session.visitorId}`
597
- },
598
- {
599
- type: "mrkdwn",
600
- text: `*Page:*
601
- ${url}`
602
- }
603
- ]
604
622
  }
605
623
  ];
624
+ if (contactFields.length > 0) {
625
+ blocks.push({ type: "section", fields: contactFields });
626
+ }
627
+ blocks.push({
628
+ type: "section",
629
+ fields: [
630
+ { type: "mrkdwn", text: `*\u{1F4CD} Page:*
631
+ ${url}` }
632
+ ]
633
+ });
606
634
  try {
607
635
  await this.sendBlocks(blocks);
608
636
  } catch (error) {
609
637
  console.error("[SlackBridge] Failed to send new session notification:", error);
610
638
  }
611
639
  }
640
+ /**
641
+ * Parse user agent to readable format
642
+ */
643
+ parseUserAgent(ua) {
644
+ let browser = "Unknown";
645
+ if (ua.includes("Firefox/")) browser = "Firefox";
646
+ else if (ua.includes("Edg/")) browser = "Edge";
647
+ else if (ua.includes("Chrome/")) browser = "Chrome";
648
+ else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
649
+ else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
650
+ let os = "Unknown";
651
+ if (ua.includes("Windows")) os = "Windows";
652
+ else if (ua.includes("Mac OS")) os = "macOS";
653
+ else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
654
+ else if (ua.includes("Android")) os = "Android";
655
+ else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
656
+ return `${browser}/${os}`;
657
+ }
612
658
  /**
613
659
  * Called when a visitor sends a message.
614
660
  * Returns the Slack message timestamp for edit/delete sync.
@@ -955,8 +1001,7 @@ var TelegramBridge = class {
955
1001
  * Called when a new chat session is created
956
1002
  */
957
1003
  async onNewSession(session) {
958
- const url = session.metadata?.url || "Unknown page";
959
- const text = this.formatNewSession(session.visitorId, url);
1004
+ const text = this.formatNewSession(session);
960
1005
  try {
961
1006
  await this.sendMessage(text);
962
1007
  } catch (error) {
@@ -1153,15 +1198,55 @@ ${dataStr}
1153
1198
  /**
1154
1199
  * Format new session notification
1155
1200
  */
1156
- formatNewSession(visitorId, url) {
1201
+ formatNewSession(session) {
1202
+ const url = session.metadata?.url || "Unknown page";
1203
+ const email = session.identity?.email;
1204
+ const phone = session.userPhone;
1205
+ const userAgent = session.metadata?.userAgent;
1157
1206
  if (this.parseMode === "HTML") {
1158
- return `<b>New chat session</b>
1159
- <b>Visitor:</b> ${this.escapeHtml(visitorId)}
1160
- <b>Page:</b> ${this.escapeHtml(url)}`;
1207
+ let text2 = `<b>\u{1F195} New chat session</b>
1208
+
1209
+ `;
1210
+ if (email) text2 += `\u{1F4E7} ${this.escapeHtml(email)}
1211
+ `;
1212
+ if (phone) text2 += `\u{1F4F1} ${this.escapeHtml(phone)}
1213
+ `;
1214
+ if (userAgent) text2 += `\u{1F310} ${this.escapeHtml(this.parseUserAgent(userAgent))}
1215
+ `;
1216
+ if (email || phone || userAgent) text2 += "\n";
1217
+ text2 += `<b>Page:</b> ${this.escapeHtml(url)}`;
1218
+ return text2;
1161
1219
  }
1162
- return `*New chat session*
1163
- *Visitor:* ${this.escapeMarkdown(visitorId)}
1164
- *Page:* ${this.escapeMarkdown(url)}`;
1220
+ let text = `*\u{1F195} New chat session*
1221
+
1222
+ `;
1223
+ if (email) text += `\u{1F4E7} ${this.escapeMarkdown(email)}
1224
+ `;
1225
+ if (phone) text += `\u{1F4F1} ${this.escapeMarkdown(phone)}
1226
+ `;
1227
+ if (userAgent) text += `\u{1F310} ${this.escapeMarkdown(this.parseUserAgent(userAgent))}
1228
+ `;
1229
+ if (email || phone || userAgent) text += "\n";
1230
+ text += `*Page:* ${this.escapeMarkdown(url)}`;
1231
+ return text;
1232
+ }
1233
+ /**
1234
+ * Parse user agent to readable format
1235
+ */
1236
+ parseUserAgent(ua) {
1237
+ let browser = "Unknown";
1238
+ if (ua.includes("Firefox/")) browser = "Firefox";
1239
+ else if (ua.includes("Edg/")) browser = "Edge";
1240
+ else if (ua.includes("Chrome/")) browser = "Chrome";
1241
+ else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
1242
+ else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
1243
+ let os = "Unknown";
1244
+ if (ua.includes("Windows")) os = "Windows";
1245
+ else if (ua.includes("Mac OS")) os = "macOS";
1246
+ else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
1247
+ else if (ua.includes("Android")) os = "Android";
1248
+ else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
1249
+ return `${browser}/${os}`;
1165
1250
  }
1166
1251
  /**
1167
1252
  * Format visitor message
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pocketping/sdk-node",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "type": "module",
5
5
  "description": "Node.js SDK for implementing PocketPing protocol",
6
6
  "main": "dist/index.cjs",