@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.
@@ -47,7 +47,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
47
47
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
48
48
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
49
49
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
50
- 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;
50
+ 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;
51
51
  class EventEmitter {
52
52
  constructor() {
53
53
  __publicField(this, "callbacks", /* @__PURE__ */ new Map());
@@ -269,10 +269,12 @@ class HttpError extends Error {
269
269
  super(message);
270
270
  __publicField(this, "status");
271
271
  __publicField(this, "statusText");
272
+ __publicField(this, "retryAfterMs");
272
273
  __publicField(this, "metadata");
273
274
  this.name = "HttpError";
274
275
  this.statusText = res.statusText;
275
276
  this.status = res.status;
277
+ this.retryAfterMs = res.retryAfterMs;
276
278
  this.metadata = metadata;
277
279
  }
278
280
  static fromPossibleFrameSafeError(error) {
@@ -285,7 +287,8 @@ class HttpError extends Error {
285
287
  safeError.message,
286
288
  {
287
289
  status: safeError.status,
288
- statusText: safeError.statusText
290
+ statusText: safeError.statusText,
291
+ retryAfterMs: safeError.retryAfterMs
289
292
  },
290
293
  safeError.metadata
291
294
  );
@@ -303,11 +306,13 @@ const _FrameSafeHttpError = class _FrameSafeHttpError {
303
306
  __publicField(this, "stack");
304
307
  __publicField(this, "status");
305
308
  __publicField(this, "statusText");
309
+ __publicField(this, "retryAfterMs");
306
310
  __publicField(this, "metadata");
307
311
  this.message = message;
308
312
  this.stack = new Error(message).stack;
309
313
  this.status = res.status;
310
314
  this.statusText = res.statusText;
315
+ this.retryAfterMs = res.retryAfterMs;
311
316
  this.metadata = metadata;
312
317
  }
313
318
  static fromHttpError(error) {
@@ -315,7 +320,8 @@ const _FrameSafeHttpError = class _FrameSafeHttpError {
315
320
  error.message,
316
321
  {
317
322
  status: error.status,
318
- statusText: error.statusText
323
+ statusText: error.statusText,
324
+ retryAfterMs: error.retryAfterMs
319
325
  },
320
326
  error.metadata
321
327
  );
@@ -437,19 +443,42 @@ class FrameSafeIntegrationError {
437
443
  }
438
444
  }
439
445
  function serializeFrameError(error) {
446
+ if (error instanceof HttpError || error instanceof FrameSafeHttpError) {
447
+ try {
448
+ return structuredClone(
449
+ error instanceof HttpError ? FrameSafeHttpError.fromHttpError(error) : error
450
+ );
451
+ } catch {
452
+ }
453
+ }
454
+ if (error && typeof error === "object" && "status" in error && typeof error.status === "number") {
455
+ const message = "message" in error && typeof error.message === "string" ? error.message : "ChatKit host request failed";
456
+ return new FrameSafeHttpError(message, {
457
+ status: error.status,
458
+ statusText: "statusText" in error && typeof error.statusText === "string" ? error.statusText : void 0,
459
+ retryAfterMs: readRetryAfterMs(error)
460
+ });
461
+ }
440
462
  try {
441
463
  return structuredClone(error);
442
464
  } catch {
443
465
  const message = error && typeof error === "object" && "message" in error && typeof error.message === "string" ? error.message : "ChatKit host request failed";
444
- if (error && typeof error === "object" && "status" in error && typeof error.status === "number") {
445
- return new FrameSafeHttpError(message, {
446
- status: error.status,
447
- statusText: "statusText" in error && typeof error.statusText === "string" ? error.statusText : void 0
448
- });
449
- }
450
466
  return new Error(message);
451
467
  }
452
468
  }
469
+ function readRetryAfterMs(error) {
470
+ if ("retryAfterMs" in error && typeof error.retryAfterMs === "number" && Number.isFinite(error.retryAfterMs)) {
471
+ return Math.max(0, error.retryAfterMs);
472
+ }
473
+ if (!("headers" in error) || !error.headers || typeof error.headers !== "object")
474
+ return;
475
+ const headers = error.headers;
476
+ if (!("get" in headers) || typeof headers.get !== "function") return;
477
+ const value = headers.get("Retry-After");
478
+ if (typeof value !== "string" || !value.trim()) return;
479
+ const duration = /^\d+(\.\d+)?$/.test(value.trim()) ? Number(value) * 1e3 : Date.parse(value) - Date.now();
480
+ return Number.isFinite(duration) ? Math.max(0, duration) : void 0;
481
+ }
453
482
  class BaseMessenger {
454
483
  constructor({
455
484
  handlers,
@@ -752,6 +781,7 @@ const BASE_CAPABILITY_ALLOWLIST = [
752
781
  "command.setThreadId",
753
782
  "command.focusComposer",
754
783
  "command.focusMessage",
784
+ "command.prepareLeave",
755
785
  "command.fetchUpdates",
756
786
  "command.sendCustomAction",
757
787
  "command.showHistory",
@@ -1045,6 +1075,14 @@ const DEFAULT_PET_BOUNDS_PADDING = {
1045
1075
  left: 0
1046
1076
  };
1047
1077
  const DEFAULT_PET_STORAGE_KEY = "chatkit:pet:position:v1";
1078
+ function getPetAssetsBaseUrl(pet) {
1079
+ return pet && typeof pet === "object" ? pet.assetsBaseUrl : void 0;
1080
+ }
1081
+ function getPetAssetUrl(id, assetsBaseUrl) {
1082
+ const base = ((assetsBaseUrl == null ? void 0 : assetsBaseUrl.trim()) || "/pets").replace(/\/+$/, "");
1083
+ const resourceId = id;
1084
+ return `${base}/${encodeURIComponent(resourceId)}/spritesheet.webp`;
1085
+ }
1048
1086
  const DEFAULT_PET_SPRITESHEET_URL = "/pets/boba/spritesheet.webp";
1049
1087
  const DEFAULT_PET_CHARACTER = {
1050
1088
  type: "sprite-atlas",
@@ -1091,12 +1129,16 @@ function normalizeCharacter(character) {
1091
1129
  return DEFAULT_PET_CHARACTER;
1092
1130
  }
1093
1131
  function normalizePetOptions(pet) {
1132
+ var _a2;
1094
1133
  if (!pet) {
1095
1134
  return null;
1096
1135
  }
1097
1136
  if (pet === true) {
1098
1137
  return {
1099
- character: DEFAULT_PET_CHARACTER,
1138
+ character: {
1139
+ ...DEFAULT_PET_CHARACTER,
1140
+ src: getPetAssetUrl("boba")
1141
+ },
1100
1142
  position: DEFAULT_POSITION,
1101
1143
  behavior: "auto",
1102
1144
  ariaLabel: "Animated pet",
@@ -1107,7 +1149,10 @@ function normalizePetOptions(pet) {
1107
1149
  return null;
1108
1150
  }
1109
1151
  return {
1110
- character: normalizeCharacter(pet.character),
1152
+ character: ((_a2 = pet.character) == null ? void 0 : _a2.src) ? normalizeCharacter(pet.character) : {
1153
+ ...DEFAULT_PET_CHARACTER,
1154
+ src: getPetAssetUrl("boba", pet.assetsBaseUrl)
1155
+ },
1111
1156
  position: {
1112
1157
  ...DEFAULT_POSITION,
1113
1158
  ...pet.position
@@ -2747,7 +2792,7 @@ function requireCommandCapability(value, context) {
2747
2792
  return value.apply(this, args);
2748
2793
  };
2749
2794
  }
2750
- 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) {
2795
+ 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) {
2751
2796
  constructor({ profile }) {
2752
2797
  super();
2753
2798
  __runInitializers(_init, 5, this);
@@ -3293,6 +3338,11 @@ class ChatKitElementBase extends (_c = HTMLElement, _focusComposer_dec = [requir
3293
3338
  await __privateGet(this, _loaded);
3294
3339
  await ((_a2 = __privateGet(this, _messenger)) == null ? void 0 : _a2.commands.setThreadId({ threadId }));
3295
3340
  }
3341
+ async prepareLeave() {
3342
+ await __privateGet(this, _loaded);
3343
+ if (!__privateGet(this, _messenger)) return false;
3344
+ return __privateGet(this, _messenger).commands.prepareLeave();
3345
+ }
3296
3346
  async focusMessage(request) {
3297
3347
  await __privateGet(this, _loaded);
3298
3348
  if (!__privateGet(this, _messenger)) return { success: false, code: "not_ready" };
@@ -3362,7 +3412,7 @@ getConfiguredPetOptions_fn = function(options = __privateGet(this, _opts)) {
3362
3412
  return null;
3363
3413
  }
3364
3414
  if (__privateMethod(this, _ChatKitElementBase_instances, getDisplayMode_fn).call(this, options) === "pet" && !normalizePetOptions(options.pet ?? null)) {
3365
- return true;
3415
+ return typeof options.pet === "object" ? { ...options.pet, enabled: true } : true;
3366
3416
  }
3367
3417
  return options.pet ?? null;
3368
3418
  };
@@ -3420,7 +3470,11 @@ resolvePetAssetUrl_fn = function(src) {
3420
3470
  }
3421
3471
  };
3422
3472
  resolveOverlayPetOptions_fn = function(pet) {
3423
- const normalized = normalizePetOptions(pet ?? null);
3473
+ var _a2;
3474
+ const assetsBaseUrl = getPetAssetsBaseUrl(pet ?? void 0) ?? getPetAssetsBaseUrl((_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.pet);
3475
+ const normalized = normalizePetOptions(
3476
+ pet ? { ...pet === true ? {} : pet, assetsBaseUrl } : null
3477
+ );
3424
3478
  if (!normalized) {
3425
3479
  return null;
3426
3480
  }
@@ -3566,6 +3620,7 @@ __decorateElement(_init, 1, "sendUserMessage", _sendUserMessage_dec, ChatKitElem
3566
3620
  __decorateElement(_init, 1, "setComposerValue", _setComposerValue_dec, ChatKitElementBase);
3567
3621
  __decorateElement(_init, 1, "setRuntimeCapabilities", _setRuntimeCapabilities_dec, ChatKitElementBase);
3568
3622
  __decorateElement(_init, 1, "setThreadId", _setThreadId_dec, ChatKitElementBase);
3623
+ __decorateElement(_init, 1, "prepareLeave", _prepareLeave_dec, ChatKitElementBase);
3569
3624
  __decorateElement(_init, 1, "focusMessage", _focusMessage_dec, ChatKitElementBase);
3570
3625
  __decorateElement(_init, 1, "shareThread", _shareThread_dec, ChatKitElementBase);
3571
3626
  __decorateElement(_init, 1, "sendCustomAction", _sendCustomAction_dec, ChatKitElementBase);