@xpert-ai/chatkit-web-component 0.18.0 → 0.19.1

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.
@@ -51,7 +51,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
51
51
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
52
52
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
53
53
 
54
- var _a, _b, _setTrainingOptOut_dec, _hideHistory_dec, _showHistory_dec, _sendCustomAction_dec, _shareThread_dec, _focusMessage_dec, _setThreadId_dec, _setRuntimeCapabilities_dec, _setComposerValue_dec, _sendUserMessage_dec, _fetchUpdates_dec, _focusComposer_dec, _c, _opts, _frameUrl, _frame, _wrapper, _windowDrag, _launcherCloseButton, _launcherOpen, _chatMinimizedToPet, _framePetOptionsOverride, _petClosedByContextMenu, _shadow, _petOverlay, _resolveLoaded, _loaded, _channelId, _messenger, _ChatKitElementBase_instances, emitAndThrow_fn, setOptionsDataAttributes_fn, getDisplayMode_fn, getConfiguredPetOptions_fn, mergeConfiguredPetPositionDefaults_fn, getOverlayPetOptions_fn, resolvePetAssetUrl_fn, resolveOverlayPetOptions_fn, getFrameOptions_fn, setLauncherOpen_fn, setChatMinimizedToPet_fn, syncPetOverlayOptions_fn, handlePetActivate_fn, handlePetClose_fn, handlePetReply_fn, handlePetThreadSummaryActivate_fn, _handleLauncherClose, getFrameUrl_fn, setFrameUrl_fn, consumeFrameUrl_fn, _handleFrameLoad, _initialized, maybeInit_fn, _init;
54
+ var _a, _b, _setTrainingOptOut_dec, _hideHistory_dec, _showHistory_dec, _sendCustomAction_dec, _shareThread_dec, _focusMessage_dec, _prepareLeave_dec, _setThreadId_dec, _setRuntimeCapabilities_dec, _setComposerValue_dec, _sendUserMessage_dec, _fetchUpdates_dec, _focusComposer_dec, _c, _opts, _frameUrl, _frame, _wrapper, _windowDrag, _launcherCloseButton, _launcherOpen, _chatMinimizedToPet, _framePetOptionsOverride, _petClosedByContextMenu, _shadow, _petOverlay, _resolveLoaded, _loaded, _channelId, _messenger, _ChatKitElementBase_instances, emitAndThrow_fn, setOptionsDataAttributes_fn, getDisplayMode_fn, getConfiguredPetOptions_fn, mergeConfiguredPetPositionDefaults_fn, getOverlayPetOptions_fn, resolvePetAssetUrl_fn, resolveOverlayPetOptions_fn, getFrameOptions_fn, setLauncherOpen_fn, setChatMinimizedToPet_fn, syncPetOverlayOptions_fn, handlePetActivate_fn, handlePetClose_fn, handlePetReply_fn, handlePetThreadSummaryActivate_fn, _handleLauncherClose, getFrameUrl_fn, setFrameUrl_fn, consumeFrameUrl_fn, _handleFrameLoad, _initialized, maybeInit_fn, _init;
55
55
  class EventEmitter {
56
56
  constructor() {
57
57
  __publicField(this, "callbacks", /* @__PURE__ */ new Map());
@@ -273,10 +273,12 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
273
273
  super(message);
274
274
  __publicField(this, "status");
275
275
  __publicField(this, "statusText");
276
+ __publicField(this, "retryAfterMs");
276
277
  __publicField(this, "metadata");
277
278
  this.name = "HttpError";
278
279
  this.statusText = res.statusText;
279
280
  this.status = res.status;
281
+ this.retryAfterMs = res.retryAfterMs;
280
282
  this.metadata = metadata;
281
283
  }
282
284
  static fromPossibleFrameSafeError(error) {
@@ -289,7 +291,8 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
289
291
  safeError.message,
290
292
  {
291
293
  status: safeError.status,
292
- statusText: safeError.statusText
294
+ statusText: safeError.statusText,
295
+ retryAfterMs: safeError.retryAfterMs
293
296
  },
294
297
  safeError.metadata
295
298
  );
@@ -307,11 +310,13 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
307
310
  __publicField(this, "stack");
308
311
  __publicField(this, "status");
309
312
  __publicField(this, "statusText");
313
+ __publicField(this, "retryAfterMs");
310
314
  __publicField(this, "metadata");
311
315
  this.message = message;
312
316
  this.stack = new Error(message).stack;
313
317
  this.status = res.status;
314
318
  this.statusText = res.statusText;
319
+ this.retryAfterMs = res.retryAfterMs;
315
320
  this.metadata = metadata;
316
321
  }
317
322
  static fromHttpError(error) {
@@ -319,7 +324,8 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
319
324
  error.message,
320
325
  {
321
326
  status: error.status,
322
- statusText: error.statusText
327
+ statusText: error.statusText,
328
+ retryAfterMs: error.retryAfterMs
323
329
  },
324
330
  error.metadata
325
331
  );
@@ -441,19 +447,42 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
441
447
  }
442
448
  }
443
449
  function serializeFrameError(error) {
450
+ if (error instanceof HttpError || error instanceof FrameSafeHttpError) {
451
+ try {
452
+ return structuredClone(
453
+ error instanceof HttpError ? FrameSafeHttpError.fromHttpError(error) : error
454
+ );
455
+ } catch {
456
+ }
457
+ }
458
+ if (error && typeof error === "object" && "status" in error && typeof error.status === "number") {
459
+ const message = "message" in error && typeof error.message === "string" ? error.message : "ChatKit host request failed";
460
+ return new FrameSafeHttpError(message, {
461
+ status: error.status,
462
+ statusText: "statusText" in error && typeof error.statusText === "string" ? error.statusText : void 0,
463
+ retryAfterMs: readRetryAfterMs(error)
464
+ });
465
+ }
444
466
  try {
445
467
  return structuredClone(error);
446
468
  } catch {
447
469
  const message = error && typeof error === "object" && "message" in error && typeof error.message === "string" ? error.message : "ChatKit host request failed";
448
- if (error && typeof error === "object" && "status" in error && typeof error.status === "number") {
449
- return new FrameSafeHttpError(message, {
450
- status: error.status,
451
- statusText: "statusText" in error && typeof error.statusText === "string" ? error.statusText : void 0
452
- });
453
- }
454
470
  return new Error(message);
455
471
  }
456
472
  }
473
+ function readRetryAfterMs(error) {
474
+ if ("retryAfterMs" in error && typeof error.retryAfterMs === "number" && Number.isFinite(error.retryAfterMs)) {
475
+ return Math.max(0, error.retryAfterMs);
476
+ }
477
+ if (!("headers" in error) || !error.headers || typeof error.headers !== "object")
478
+ return;
479
+ const headers = error.headers;
480
+ if (!("get" in headers) || typeof headers.get !== "function") return;
481
+ const value = headers.get("Retry-After");
482
+ if (typeof value !== "string" || !value.trim()) return;
483
+ const duration = /^\d+(\.\d+)?$/.test(value.trim()) ? Number(value) * 1e3 : Date.parse(value) - Date.now();
484
+ return Number.isFinite(duration) ? Math.max(0, duration) : void 0;
485
+ }
457
486
  class BaseMessenger {
458
487
  constructor({
459
488
  handlers,
@@ -756,6 +785,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
756
785
  "command.setThreadId",
757
786
  "command.focusComposer",
758
787
  "command.focusMessage",
788
+ "command.prepareLeave",
759
789
  "command.fetchUpdates",
760
790
  "command.sendCustomAction",
761
791
  "command.showHistory",
@@ -1049,6 +1079,14 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1049
1079
  left: 0
1050
1080
  };
1051
1081
  const DEFAULT_PET_STORAGE_KEY = "chatkit:pet:position:v1";
1082
+ function getPetAssetsBaseUrl(pet) {
1083
+ return pet && typeof pet === "object" ? pet.assetsBaseUrl : void 0;
1084
+ }
1085
+ function getPetAssetUrl(id, assetsBaseUrl) {
1086
+ const base = ((assetsBaseUrl == null ? void 0 : assetsBaseUrl.trim()) || "/pets").replace(/\/+$/, "");
1087
+ const resourceId = id;
1088
+ return `${base}/${encodeURIComponent(resourceId)}/spritesheet.webp`;
1089
+ }
1052
1090
  const DEFAULT_PET_SPRITESHEET_URL = "/pets/boba/spritesheet.webp";
1053
1091
  const DEFAULT_PET_CHARACTER = {
1054
1092
  type: "sprite-atlas",
@@ -1095,12 +1133,16 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1095
1133
  return DEFAULT_PET_CHARACTER;
1096
1134
  }
1097
1135
  function normalizePetOptions(pet) {
1136
+ var _a2;
1098
1137
  if (!pet) {
1099
1138
  return null;
1100
1139
  }
1101
1140
  if (pet === true) {
1102
1141
  return {
1103
- character: DEFAULT_PET_CHARACTER,
1142
+ character: {
1143
+ ...DEFAULT_PET_CHARACTER,
1144
+ src: getPetAssetUrl("boba")
1145
+ },
1104
1146
  position: DEFAULT_POSITION,
1105
1147
  behavior: "auto",
1106
1148
  ariaLabel: "Animated pet",
@@ -1111,7 +1153,10 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1111
1153
  return null;
1112
1154
  }
1113
1155
  return {
1114
- character: normalizeCharacter(pet.character),
1156
+ character: ((_a2 = pet.character) == null ? void 0 : _a2.src) ? normalizeCharacter(pet.character) : {
1157
+ ...DEFAULT_PET_CHARACTER,
1158
+ src: getPetAssetUrl("boba", pet.assetsBaseUrl)
1159
+ },
1115
1160
  position: {
1116
1161
  ...DEFAULT_POSITION,
1117
1162
  ...pet.position
@@ -2751,7 +2796,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2751
2796
  return value.apply(this, args);
2752
2797
  };
2753
2798
  }
2754
- class ChatKitElementBase extends (_c = HTMLElement, _focusComposer_dec = [requireCommandCapability], _fetchUpdates_dec = [requireCommandCapability], _sendUserMessage_dec = [requireCommandCapability], _setComposerValue_dec = [requireCommandCapability], _setRuntimeCapabilities_dec = [requireCommandCapability], _setThreadId_dec = [requireCommandCapability], _focusMessage_dec = [requireCommandCapability], _shareThread_dec = [requireCommandCapability], _sendCustomAction_dec = [requireCommandCapability], _showHistory_dec = [requireCommandCapability], _hideHistory_dec = [requireCommandCapability], _setTrainingOptOut_dec = [requireCommandCapability], _c) {
2799
+ class ChatKitElementBase extends (_c = HTMLElement, _focusComposer_dec = [requireCommandCapability], _fetchUpdates_dec = [requireCommandCapability], _sendUserMessage_dec = [requireCommandCapability], _setComposerValue_dec = [requireCommandCapability], _setRuntimeCapabilities_dec = [requireCommandCapability], _setThreadId_dec = [requireCommandCapability], _prepareLeave_dec = [requireCommandCapability], _focusMessage_dec = [requireCommandCapability], _shareThread_dec = [requireCommandCapability], _sendCustomAction_dec = [requireCommandCapability], _showHistory_dec = [requireCommandCapability], _hideHistory_dec = [requireCommandCapability], _setTrainingOptOut_dec = [requireCommandCapability], _c) {
2755
2800
  constructor({ profile }) {
2756
2801
  super();
2757
2802
  __runInitializers(_init, 5, this);
@@ -3297,6 +3342,11 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3297
3342
  await __privateGet(this, _loaded);
3298
3343
  await ((_a2 = __privateGet(this, _messenger)) == null ? void 0 : _a2.commands.setThreadId({ threadId }));
3299
3344
  }
3345
+ async prepareLeave() {
3346
+ await __privateGet(this, _loaded);
3347
+ if (!__privateGet(this, _messenger)) return false;
3348
+ return __privateGet(this, _messenger).commands.prepareLeave();
3349
+ }
3300
3350
  async focusMessage(request) {
3301
3351
  await __privateGet(this, _loaded);
3302
3352
  if (!__privateGet(this, _messenger)) return { success: false, code: "not_ready" };
@@ -3366,7 +3416,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3366
3416
  return null;
3367
3417
  }
3368
3418
  if (__privateMethod(this, _ChatKitElementBase_instances, getDisplayMode_fn).call(this, options) === "pet" && !normalizePetOptions(options.pet ?? null)) {
3369
- return true;
3419
+ return typeof options.pet === "object" ? { ...options.pet, enabled: true } : true;
3370
3420
  }
3371
3421
  return options.pet ?? null;
3372
3422
  };
@@ -3424,7 +3474,11 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3424
3474
  }
3425
3475
  };
3426
3476
  resolveOverlayPetOptions_fn = function(pet) {
3427
- const normalized = normalizePetOptions(pet ?? null);
3477
+ var _a2;
3478
+ const assetsBaseUrl = getPetAssetsBaseUrl(pet ?? void 0) ?? getPetAssetsBaseUrl((_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.pet);
3479
+ const normalized = normalizePetOptions(
3480
+ pet ? { ...pet === true ? {} : pet, assetsBaseUrl } : null
3481
+ );
3428
3482
  if (!normalized) {
3429
3483
  return null;
3430
3484
  }
@@ -3570,6 +3624,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3570
3624
  __decorateElement(_init, 1, "setComposerValue", _setComposerValue_dec, ChatKitElementBase);
3571
3625
  __decorateElement(_init, 1, "setRuntimeCapabilities", _setRuntimeCapabilities_dec, ChatKitElementBase);
3572
3626
  __decorateElement(_init, 1, "setThreadId", _setThreadId_dec, ChatKitElementBase);
3627
+ __decorateElement(_init, 1, "prepareLeave", _prepareLeave_dec, ChatKitElementBase);
3573
3628
  __decorateElement(_init, 1, "focusMessage", _focusMessage_dec, ChatKitElementBase);
3574
3629
  __decorateElement(_init, 1, "shareThread", _shareThread_dec, ChatKitElementBase);
3575
3630
  __decorateElement(_init, 1, "sendCustomAction", _sendCustomAction_dec, ChatKitElementBase);