@xpert-ai/chatkit-web-component 0.4.1 → 0.5.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, _setThreadId_dec, _setRuntimeCapabilities_dec, _setComposerValue_dec, _sendUserMessage_dec, _fetchUpdates_dec, _focusComposer_dec, _c, _opts, _frameUrl, _frame, _wrapper, _launcherCloseButton, _launcherOpen, _chatMinimizedToPet, _framePetOptionsOverride, _petClosedByContextMenu, _shadow, _petOverlay, _resolveLoaded, _loaded, _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, _setThreadId_dec, _setRuntimeCapabilities_dec, _setComposerValue_dec, _sendUserMessage_dec, _fetchUpdates_dec, _focusComposer_dec, _c, _opts, _frameUrl, _frame, _wrapper, _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());
@@ -370,7 +370,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
370
370
  }
371
371
  });
372
372
  };
373
- function safeRandomUUID() {
373
+ function createSecureChannelId() {
374
374
  const cryptoRef = globalThis.crypto;
375
375
  if (typeof (cryptoRef == null ? void 0 : cryptoRef.randomUUID) === "function") {
376
376
  return cryptoRef.randomUUID();
@@ -382,7 +382,30 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
382
382
  bytes[8] = bytes[8] & 63 | 128;
383
383
  return [...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join("").replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, "$1-$2-$3-$4-$5");
384
384
  }
385
- return `ck_${Date.now()}_${Math.random().toString(16).slice(2)}`;
385
+ return null;
386
+ }
387
+ function safeRandomUUID() {
388
+ return createSecureChannelId() ?? `ck_${Date.now()}_${Math.random().toString(16).slice(2)}`;
389
+ }
390
+ function isTrustedChatKitMessageEvent(event, { channelId, expectedOrigin, expectedSource }) {
391
+ const payload = event.data;
392
+ if (!payload || typeof payload !== "object" || !("__xpaiChatKit" in payload)) {
393
+ return false;
394
+ }
395
+ if (payload.__xpaiChatKit !== true) {
396
+ return false;
397
+ }
398
+ if (expectedOrigin !== "*" && event.origin !== expectedOrigin) {
399
+ return false;
400
+ }
401
+ if (event.source === expectedSource) {
402
+ return true;
403
+ }
404
+ const normalizedChannelId = channelId == null ? void 0 : channelId.trim();
405
+ if (normalizedChannelId) {
406
+ return "channelId" in payload && payload.channelId === normalizedChannelId;
407
+ }
408
+ return false;
386
409
  }
387
410
  let IntegrationError$1 = class IntegrationError2 extends Error {
388
411
  constructor(message) {
@@ -416,10 +439,12 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
416
439
  handlers,
417
440
  target,
418
441
  targetOrigin,
442
+ channelId,
419
443
  fetch: fetch2 = window.fetch
420
444
  }) {
421
445
  __publicField(this, "targetOrigin");
422
446
  __publicField(this, "target");
447
+ __publicField(this, "channelId");
423
448
  __publicField(this, "commandHandlers");
424
449
  __publicField(this, "_fetch");
425
450
  __publicField(this, "emitter", new EventEmitter());
@@ -450,7 +475,11 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
450
475
  ));
451
476
  __publicField(this, "handleMessage", async (event) => {
452
477
  var _a2, _b2, _c2, _d;
453
- if (!event.data || event.data.__xpaiChatKit !== true || event.origin !== this.targetOrigin || event.source !== this.target()) {
478
+ if (!isTrustedChatKitMessageEvent(event, {
479
+ channelId: this.channelId,
480
+ expectedOrigin: this.targetOrigin,
481
+ expectedSource: this.target()
482
+ })) {
454
483
  return;
455
484
  }
456
485
  const data = event.data;
@@ -591,6 +620,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
591
620
  this.commandHandlers = handlers;
592
621
  this.target = target;
593
622
  this.targetOrigin = targetOrigin;
623
+ this.channelId = (channelId == null ? void 0 : channelId.trim()) || void 0;
594
624
  this._fetch = (...args) => fetch2(...args);
595
625
  }
596
626
  setTargetOrigin(targetOrigin) {
@@ -600,6 +630,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
600
630
  var _a2;
601
631
  const message = {
602
632
  __xpaiChatKit: true,
633
+ ...this.channelId ? { channelId: this.channelId } : {},
603
634
  ...data
604
635
  };
605
636
  (_a2 = this.target()) == null ? void 0 : _a2.postMessage(message, this.targetOrigin, transfer);
@@ -2607,7 +2638,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2607
2638
  __privateAdd(this, _loaded, new Promise((resolve) => {
2608
2639
  __privateSet(this, _resolveLoaded, resolve);
2609
2640
  }));
2641
+ __privateAdd(this, _channelId, createSecureChannelId());
2610
2642
  __privateAdd(this, _messenger, new ChatFrameMessenger({
2643
+ channelId: __privateGet(this, _channelId) ?? void 0,
2611
2644
  fetch: (...args) => {
2612
2645
  var _a2;
2613
2646
  const customFetch = ((_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.api) && "fetch" in __privateGet(this, _opts).api && __privateGet(this, _opts).api.fetch;
@@ -2654,6 +2687,16 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2654
2687
  }
2655
2688
  return onClientTool({ name, params, id, tool_call_id });
2656
2689
  },
2690
+ onToolOutputAttachmentPreview: async (request) => {
2691
+ var _a2, _b2;
2692
+ const onRequestPreview = (_b2 = (_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.toolOutputAttachments) == null ? void 0 : _b2.onRequestPreview;
2693
+ if (!onRequestPreview) {
2694
+ __privateMethod(this, _ChatKitElementBase_instances, emitAndThrow_fn).call(this, new IntegrationError(
2695
+ "No handler for tool-output attachment previews. Add toolOutputAttachments.onRequestPreview to your ChatKit options."
2696
+ ));
2697
+ }
2698
+ return onRequestPreview(request);
2699
+ },
2657
2700
  onWorkbenchClientCommand: async ({
2658
2701
  commandKey,
2659
2702
  payload,
@@ -3096,6 +3139,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3096
3139
  _petOverlay = new WeakMap();
3097
3140
  _resolveLoaded = new WeakMap();
3098
3141
  _loaded = new WeakMap();
3142
+ _channelId = new WeakMap();
3099
3143
  _messenger = new WeakMap();
3100
3144
  _ChatKitElementBase_instances = new WeakSet();
3101
3145
  emitAndThrow_fn = function(error) {
@@ -3306,7 +3350,8 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3306
3350
  frameURL.hash = encodeBase64({
3307
3351
  options: getInnerOptions(__privateMethod(this, _ChatKitElementBase_instances, getFrameOptions_fn).call(this, __privateGet(this, _opts))),
3308
3352
  referrer: window.location.origin,
3309
- profile: this.profile
3353
+ profile: this.profile,
3354
+ ...__privateGet(this, _channelId) ? { channelId: __privateGet(this, _channelId) } : {}
3310
3355
  });
3311
3356
  __privateGet(this, _messenger).connect();
3312
3357
  __privateGet(this, _frame).src = frameURL.toString();