@product7/product7-js 0.3.8 → 0.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.
@@ -1521,8 +1521,9 @@
1521
1521
  status: true,
1522
1522
  data: {
1523
1523
  contact_id: 'mock_contact_' + Date.now(),
1524
- email: metadata.email,
1524
+ email: metadata.email || '',
1525
1525
  name: metadata.name || '',
1526
+ avatar: metadata.avatar || '',
1526
1527
  is_new: true,
1527
1528
  },
1528
1529
  };
@@ -1530,21 +1531,22 @@
1530
1531
  return mockResponse;
1531
1532
  }
1532
1533
 
1534
+ const payload = {};
1535
+
1536
+ if (metadata.email) payload.email = metadata.email;
1537
+ if (metadata.user_id) payload.user_id = metadata.user_id;
1538
+ if (metadata.name) payload.name = metadata.name;
1539
+ if (metadata.avatar) payload.avatar = metadata.avatar;
1540
+ if (metadata.attributes) payload.attributes = metadata.attributes;
1541
+ if (metadata.company) payload.company = metadata.company;
1542
+
1533
1543
  const response = await this._makeRequest('/widget/identify', {
1534
1544
  method: 'POST',
1535
1545
  headers: {
1536
1546
  'Content-Type': 'application/json',
1537
1547
  Authorization: `Bearer ${this.sessionToken}`,
1538
1548
  },
1539
- body: JSON.stringify({
1540
- // user_id: metadata.user_id || null,
1541
- email: metadata.email || '',
1542
- // name: metadata.name || '',
1543
- // phone: metadata.phone || '',
1544
- // company: metadata.company || '',
1545
- // avatar_url: metadata.avatar_url || '',
1546
- // metadata: metadata.custom_fields || {},
1547
- }),
1549
+ body: JSON.stringify(payload),
1548
1550
  });
1549
1551
 
1550
1552
  if (response?.status && response?.data) {
@@ -3017,7 +3019,7 @@
3017
3019
  --msg-bg-hover: #F9FAFB;
3018
3020
  --msg-bg-input: rgba(255, 255, 255, 0.7);
3019
3021
  --msg-bg-bubble-own: #F3F4F6;
3020
- --msg-bg-bubble-received: rgba(21, 94, 239, 0.06);
3022
+ --msg-bg-bubble-received: #155EEF;
3021
3023
  --msg-bg-header-gradient: linear-gradient(180deg, #e0e7ff 0%, #f0f4ff 35%, #FFFFFF 65%);
3022
3024
  --msg-bg-header-glow1: radial-gradient(circle, rgba(21, 94, 239, 0.08) 0%, transparent 70%);
3023
3025
  --msg-bg-header-glow2: radial-gradient(circle, rgba(139, 92, 246, 0.05) 0%, transparent 70%);
@@ -3549,13 +3551,13 @@
3549
3551
 
3550
3552
  .messenger-message-own .messenger-message-bubble {
3551
3553
  background: var(--msg-bg-bubble-own);
3552
- color: var(--msg-text);
3554
+ color: #111827;
3553
3555
  border-bottom-right-radius: 0.25rem;
3554
3556
  }
3555
3557
 
3556
3558
  .messenger-message-received .messenger-message-bubble {
3557
3559
  background: var(--msg-bg-bubble-received);
3558
- color: var(--msg-text);
3560
+ color: #ffffff;
3559
3561
  border-bottom-left-radius: 0.25rem;
3560
3562
  }
3561
3563
 
@@ -4454,7 +4456,7 @@
4454
4456
  --msg-bg-hover: #232930;
4455
4457
  --msg-bg-input: #1a1e24;
4456
4458
  --msg-bg-bubble-own: #1e2330;
4457
- --msg-bg-bubble-received: rgba(21, 94, 239, 0.12);
4459
+ --msg-bg-bubble-received: #1D4ED8;
4458
4460
  --msg-bg-header-gradient: linear-gradient(180deg, #1a1e2e 0%, #141720 50%, #0f1317 100%);
4459
4461
  --msg-bg-header-glow1: radial-gradient(circle, rgba(21, 94, 239, 0.07) 0%, transparent 70%);
4460
4462
  --msg-bg-header-glow2: radial-gradient(circle, rgba(139, 92, 246, 0.05) 0%, transparent 70%);
@@ -8259,6 +8261,149 @@
8259
8261
  }
8260
8262
  }
8261
8263
 
8264
+ var BUNDLED_SOUND = "data:audio/mpeg;base64,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BeaJKOtqtegdfu08KKta9TmppaKVKbNRgAAdr/tXGB6CSCPl1Lelt7XW7T01ifVk2zjE1bLW839346gs//uAZPGAAtMh2Hn4GlhT52rfPeJdDAirVe28aaE2Dmr9tY0siLho4mUCDpWMFgQGgu42pLnLawWb/bpWNprQxluj9TNaXJSgOIMS1KzM0TRIAAAABFakEh3cgBQEGVwwSAstoCBiYpGhkVAplAwJmPAkYLCBkEDgYHpEhgdJRk+AeYkqaA6eReiyrxNIvmnxxStER14EjE2/9hljaO2siCoAhzKnpuRt269O0veD7Pq/uNbdzt6jfydzch/Kkpf1/dcqV6ta/y3Y1MWIft8iMqtZzUahrWPO71nqvG43fsROXu5Y3KZJGnRZbEH1clnOWX//OZ/+2WTnxeAH4ZfTSxQdl7ovLbXkoM0tW5UzXqqe3b9bPWP/+H7q59vrHa/P1WVuvIHDdeijc/LKqG114l3Joq5VSQSsRUcUBhEnmWs49v5f///////////////y/mff///////////////3Ad21LEZyZxNSU0SUaZb/+8Bk6AADBiBVfWGgCEbieq+nmAEjzhFJ+cyQBEdCKT85gkCgwCAAAAA6AP0AywXlGoy0hpYVBKCMGkNVAtKWyXWFQkQg10C3jJ4dCWsMS6ezji0j3yF6W6MVa5lLJbaXvIFSNMi8Vdp4aejr0kYgJ/IpLXJpq0lmN4S38scPty+3K4brc1En1pL+vzx/k/bwt3IYllNldscl0R/HlzH9/zJ2IEd+3kzt34vWlVWVWqbn5Z/njz8O/+aXAXCHDZovNNc0AZypebBMlXypavJwV2u4yFL1vG4qA//93+9d/ff/Fg5dCKWEFHZcd41TwOim499QNk7qNZnHhm2uvA4NA5XIelTssq//5////////////////KFL24Op////////////////I3ifN9VM55RBBXv+tQAA8aAYzpLaSOxTi1EgJ6SJFPyUphVqcwGS1LvW/Hx+27zX1/f7Y2w5rdPTwuJkLERYGnMZHg0LksCgqGoKvEWkqYTKtOnRLvoGgFPadXgqdiKxbu2ws92sNCIOHN0xkAtG+saAAuK4rNZxyl0v8x2rfuXaCm7ruwZLSEFAQkKru7B2WMZy0qeUZjNZr5eXDP+8VVSOR/5cly6S3120bi5SXY5P/1/U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";
8265
+
8266
+ /**
8267
+ * NotificationSound — plays a soft ping when a new agent message arrives.
8268
+ *
8269
+ * Default: the bundled notification-sound.mp3 (inlined as base64 at build time).
8270
+ * Falls back to a Web Audio API synthetic chime if the file was not bundled.
8271
+ * Override: pass `soundUrl` (MP3/OGG/WAV URL or base64 data URI) to use a different file.
8272
+ */
8273
+
8274
+ class NotificationSound {
8275
+ constructor({ soundUrl = BUNDLED_SOUND, volume = 0.4 } = {}) {
8276
+ this._soundUrl = soundUrl;
8277
+ this._volume = Math.min(1, Math.max(0, volume));
8278
+ this._enabled = true;
8279
+ this._audioCtx = null;
8280
+ this._audioBuffer = null;
8281
+ this._loadPromise = null;
8282
+
8283
+ if (soundUrl) {
8284
+ this._loadPromise = this._loadAudioFile(soundUrl);
8285
+ }
8286
+ }
8287
+
8288
+ setEnabled(enabled) {
8289
+ this._enabled = Boolean(enabled);
8290
+ }
8291
+
8292
+ setVolume(volume) {
8293
+ this._volume = Math.min(1, Math.max(0, volume));
8294
+ }
8295
+
8296
+ async play() {
8297
+ if (!this._enabled) return;
8298
+ if (typeof window === 'undefined') return;
8299
+
8300
+ try {
8301
+ if (this._soundUrl) {
8302
+ await this._playFile();
8303
+ } else {
8304
+ this._playSynthetic();
8305
+ }
8306
+ } catch {
8307
+ /* autoplay policy or context suspended — silent fail */
8308
+ }
8309
+ }
8310
+
8311
+ // ── Private ────────────────────────────────────────────────────────────────
8312
+
8313
+ _getAudioContext() {
8314
+ if (!this._audioCtx || this._audioCtx.state === 'closed') {
8315
+ const AudioContext = window.AudioContext || window.webkitAudioContext;
8316
+ if (!AudioContext) return null;
8317
+ this._audioCtx = new AudioContext();
8318
+ }
8319
+ return this._audioCtx;
8320
+ }
8321
+
8322
+ /**
8323
+ * Synthetic two-tone chime via Web Audio API — no file required.
8324
+ * • First tone: 880 Hz, 0–80 ms
8325
+ * • Second tone: 1100 Hz, 60–160 ms
8326
+ * Sounds like a gentle message ping.
8327
+ */
8328
+ _playSynthetic() {
8329
+ const ctx = this._getAudioContext();
8330
+ if (!ctx) return;
8331
+
8332
+ if (ctx.state === 'suspended') {
8333
+ ctx.resume().catch(() => {});
8334
+ }
8335
+
8336
+ const now = ctx.currentTime;
8337
+ const vol = this._volume;
8338
+
8339
+ const tones = [
8340
+ { freq: 880, start: 0, end: 0.08 },
8341
+ { freq: 1100, start: 0.06, end: 0.16 },
8342
+ ];
8343
+
8344
+ tones.forEach(({ freq, start, end }) => {
8345
+ const osc = ctx.createOscillator();
8346
+ const gain = ctx.createGain();
8347
+
8348
+ osc.type = 'sine';
8349
+ osc.frequency.value = freq;
8350
+
8351
+ gain.gain.setValueAtTime(0, now + start);
8352
+ gain.gain.linearRampToValueAtTime(vol, now + start + 0.01);
8353
+ gain.gain.linearRampToValueAtTime(0, now + end);
8354
+
8355
+ osc.connect(gain);
8356
+ gain.connect(ctx.destination);
8357
+
8358
+ osc.start(now + start);
8359
+ osc.stop(now + end + 0.01);
8360
+ });
8361
+ }
8362
+
8363
+ async _loadAudioFile(url) {
8364
+ try {
8365
+ const ctx = this._getAudioContext();
8366
+ if (!ctx) return;
8367
+
8368
+ const response = await fetch(url);
8369
+ const arrayBuffer = await response.arrayBuffer();
8370
+ this._audioBuffer = await ctx.decodeAudioData(arrayBuffer);
8371
+ } catch {
8372
+ /* failed to load — fall back to synthetic */
8373
+ this._soundUrl = null;
8374
+ }
8375
+ }
8376
+
8377
+ async _playFile() {
8378
+ if (this._loadPromise) {
8379
+ await this._loadPromise;
8380
+ this._loadPromise = null;
8381
+ }
8382
+
8383
+ if (!this._audioBuffer) {
8384
+ this._playSynthetic();
8385
+ return;
8386
+ }
8387
+
8388
+ const ctx = this._getAudioContext();
8389
+ if (!ctx) return;
8390
+
8391
+ if (ctx.state === 'suspended') {
8392
+ await ctx.resume();
8393
+ }
8394
+
8395
+ const source = ctx.createBufferSource();
8396
+ const gain = ctx.createGain();
8397
+
8398
+ source.buffer = this._audioBuffer;
8399
+ gain.gain.value = this._volume;
8400
+
8401
+ source.connect(gain);
8402
+ gain.connect(ctx.destination);
8403
+ source.start();
8404
+ }
8405
+ }
8406
+
8262
8407
  /**
8263
8408
  * WebSocketService - Real-time communication for messenger widget
8264
8409
  */
@@ -9800,9 +9945,25 @@
9800
9945
  `;
9801
9946
  }
9802
9947
 
9948
+ // Render automated/bot messages as a proper received chat bubble
9949
+ const teamName = this.state.teamName || 'Support';
9950
+ const logoUrl = this.options.logoUrl;
9951
+ const avatarHtml = logoUrl
9952
+ ? `<div class="sdk-avatar sdk-avatar-sm"><img src="${this._escapeHtml(logoUrl)}" alt="${this._escapeHtml(teamName)}" /></div>`
9953
+ : `<div class="sdk-avatar sdk-avatar-sm">${teamName.charAt(0).toUpperCase()}</div>`;
9954
+ const timeStr = this._formatMessageTime(message.timestamp);
9955
+
9803
9956
  return `
9804
- <div class="messenger-message-system">
9805
- <span class="messenger-message-system-text">${this._escapeHtml(content)}</span>
9957
+ <div class="messenger-message messenger-message-received">
9958
+ <div class="messenger-message-row">
9959
+ <div class="messenger-message-avatar">${avatarHtml}</div>
9960
+ <div class="messenger-message-wrapper">
9961
+ <div class="messenger-message-bubble">
9962
+ <div class="messenger-message-content">${this._formatMessageContent(content)}</div>
9963
+ </div>
9964
+ </div>
9965
+ </div>
9966
+ ${timeStr ? `<div class="messenger-message-meta"><span>${timeStr}</span></div>` : ''}
9806
9967
  </div>
9807
9968
  `;
9808
9969
  }
@@ -11363,6 +11524,19 @@
11363
11524
  this._wsUnsubscribers = [];
11364
11525
  this._feedbackWidget = null;
11365
11526
 
11527
+ const notificationSoundOption = options.notificationSound !== undefined
11528
+ ? options.notificationSound
11529
+ : true;
11530
+
11531
+ this._notificationSound = new NotificationSound({
11532
+ soundUrl: typeof notificationSoundOption === 'string' ? notificationSoundOption : null,
11533
+ volume: options.notificationVolume ?? 0.4,
11534
+ });
11535
+
11536
+ if (notificationSoundOption === false) {
11537
+ this._notificationSound.setEnabled(false);
11538
+ }
11539
+
11366
11540
  this._handleOpenChange = this._handleOpenChange.bind(this);
11367
11541
  this._handleWebSocketMessage = this._handleWebSocketMessage.bind(this);
11368
11542
  this._handleTypingStarted = this._handleTypingStarted.bind(this);
@@ -11687,6 +11861,18 @@
11687
11861
  optimisticMatchWindowMs: 30000,
11688
11862
  });
11689
11863
 
11864
+ const isOwnMessage = message.sender_type === 'customer';
11865
+
11866
+ if (!isOwnMessage) {
11867
+ const panelOpenOnThisConversation =
11868
+ this.messengerState.isOpen &&
11869
+ this.messengerState.activeConversationId === conversation_id;
11870
+
11871
+ if (!panelOpenOnThisConversation) {
11872
+ this._notificationSound.play();
11873
+ }
11874
+ }
11875
+
11690
11876
  if (
11691
11877
  !this.messengerState.isOpen ||
11692
11878
  this.messengerState.activeConversationId !== conversation_id