@opencx/widget 3.0.32 → 3.0.34

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.
Files changed (44) hide show
  1. package/dist/designs.cjs +54 -54
  2. package/dist/designs.cjs.map +1 -1
  3. package/dist/designs.js +1954 -1934
  4. package/dist/designs.js.map +1 -1
  5. package/dist/index.cjs +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/react.cjs +1 -1
  8. package/dist/react.cjs.map +1 -1
  9. package/dist/react.js +22 -16
  10. package/dist/react.js.map +1 -1
  11. package/dist/src/designs/react/components/custom-components/Handoff.component.d.ts +3 -0
  12. package/dist/src/designs/react/hooks/useWidgetContentHeight.d.ts +1 -1
  13. package/dist/src/headless/core/api.d.ts +1 -1
  14. package/dist/src/headless/core/context/contact.ctx.d.ts +8 -3
  15. package/dist/src/headless/core/context/message.ctx.d.ts +1 -1
  16. package/dist/src/headless/core/context/session.ctx.d.ts +2 -8
  17. package/dist/src/headless/core/context/storage.ctx.d.ts +12 -0
  18. package/dist/src/headless/core/context/widget.ctx.d.ts +6 -2
  19. package/dist/src/headless/core/index.d.ts +2 -1
  20. package/dist/src/headless/core/types/external-storage.d.ts +5 -0
  21. package/dist/src/headless/core/utils/Poller.d.ts +1 -1
  22. package/dist/src/headless/core/utils/PrimitiveState.d.ts +3 -35
  23. package/dist/src/headless/core/utils/PrimitiveState.spec.d.ts +1 -0
  24. package/dist/src/headless/react/ComponentRegistry.d.ts +1 -1
  25. package/dist/src/headless/react/WidgetProvider.d.ts +3 -2
  26. package/dist/src/headless/react/hooks/useContact.d.ts +1 -0
  27. package/dist/src/headless/react/hooks/useSessions.d.ts +1 -0
  28. package/dist/{useUploadFiles-Cr6lNjTS.cjs → useUploadFiles-C0y6HEB6.cjs} +2 -2
  29. package/dist/{useUploadFiles-CeI1AbIE.js.map → useUploadFiles-C0y6HEB6.cjs.map} +1 -1
  30. package/dist/{useUploadFiles-CeI1AbIE.js → useUploadFiles-DkWg1-Gg.js} +83 -83
  31. package/dist/useUploadFiles-DkWg1-Gg.js.map +1 -0
  32. package/dist/{widget.ctx-OHYgtVi5.js → widget.ctx-CplVbjtp.js} +171 -187
  33. package/dist/widget.ctx-CplVbjtp.js.map +1 -0
  34. package/dist/widget.ctx-D_AFA5p3.cjs +2 -0
  35. package/dist/widget.ctx-D_AFA5p3.cjs.map +1 -0
  36. package/dist-embed/script.js +105 -105
  37. package/dist-embed/script.js.map +1 -1
  38. package/package.json +5 -4
  39. package/dist/useUploadFiles-Cr6lNjTS.cjs.map +0 -1
  40. package/dist/widget.ctx-DmyynT8O.cjs +0 -2
  41. package/dist/widget.ctx-DmyynT8O.cjs.map +0 -1
  42. package/dist/widget.ctx-OHYgtVi5.js.map +0 -1
  43. /package/dist/src/headless/core/types/{WidgetConfig.d.ts → widget-config.d.ts} +0 -0
  44. /package/dist/src/headless/core/utils/{PrimitiveState.test.d.ts → Poller.spec.d.ts} +0 -0
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./widget.ctx-DmyynT8O.cjs");exports.PrimitiveState=t.PrimitiveState;exports.WidgetCtx=t.WidgetCtx;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./widget.ctx-D_AFA5p3.cjs");exports.PrimitiveState=t.PrimitiveState;exports.WidgetCtx=t.WidgetCtx;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P as i, W as a } from "./widget.ctx-OHYgtVi5.js";
1
+ import { P as i, W as a } from "./widget.ctx-CplVbjtp.js";
2
2
  export {
3
3
  i as PrimitiveState,
4
4
  a as WidgetCtx
package/dist/react.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./useUploadFiles-Cr6lNjTS.cjs");function a(t,s,u){const{widgetCtx:{api:i}}=e.useWidget();return e._default(async o=>o==="up"?i.vote({action:"upvote",messagePublicId:t,sessionId:s}).then(u):i.vote({action:"downvote",messagePublicId:t,sessionId:s}).then(u),[i,t,s,u])}exports.WidgetProvider=e.WidgetProvider;exports.useConfig=e.useConfig;exports.useContact=e.useContact;exports.useIsAwaitingBotReply=e.useIsAwaitingBotReply;exports.useMessages=e.useMessages;exports.usePreludeData=e.usePreludeData;exports.usePrimitiveState=e.usePrimitiveState;exports.useSessions=e.useSessions;exports.useUploadFiles=e.useUploadFiles;exports.useWidget=e.useWidget;exports.useWidgetRouter=e.useWidgetRouter;exports.useVote=a;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./useUploadFiles-C0y6HEB6.cjs");function a(t,s,u){const{widgetCtx:{api:i}}=e.useWidget();return e._default(async o=>i.vote({action:o==="up"?"upvote":"downvote",messagePublicId:t,sessionId:s}).then(u),[i,t,s,u])}exports.WidgetProvider=e.WidgetProvider;exports.useConfig=e.useConfig;exports.useContact=e.useContact;exports.useIsAwaitingBotReply=e.useIsAwaitingBotReply;exports.useMessages=e.useMessages;exports.usePreludeData=e.usePreludeData;exports.usePrimitiveState=e.usePrimitiveState;exports.useSessions=e.useSessions;exports.useUploadFiles=e.useUploadFiles;exports.useWidget=e.useWidget;exports.useWidgetRouter=e.useWidgetRouter;exports.useVote=a;
2
2
  //# sourceMappingURL=react.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.cjs","sources":["../src/headless/react/hooks/useVote.ts"],"sourcesContent":["import useAsyncFn from \"react-use/lib/useAsyncFn\";\nimport { useWidget } from \"../WidgetProvider\";\n\n/**\n * @param id\n * @param onSuccess\n * @returns\n */\nexport function useVote(id: string, sessionId: string, onSuccess?: () => void) {\n const { widgetCtx: { api } } = useWidget();\n return useAsyncFn(\n async (action: \"up\" | \"down\") => {\n if (action === \"up\") {\n return api\n .vote({ action: \"upvote\", messagePublicId: id, sessionId })\n .then(onSuccess);\n } else {\n return api\n .vote({ action: \"downvote\", messagePublicId: id, sessionId })\n .then(onSuccess);\n }\n },\n [api, id, sessionId, onSuccess],\n );\n}\n\n/**\n * @param id\n * @param onSuccess\n * @deprecated use useVote instead\n */\nexport function useUpvote(\n id: string,\n sessionId: string,\n onSuccess?: () => void,\n) {\n const { widgetCtx: { api } } = useWidget();\n return useAsyncFn(\n async () =>\n api\n .vote({ action: \"upvote\", messagePublicId: id, sessionId })\n .then(onSuccess),\n [api, id, sessionId, onSuccess],\n );\n}\n\n/**\n * @param id\n * @param onSuccess\n * @deprecated use useVote instead\n */\nexport function useDownvote(\n id: string,\n sessionId: string,\n onSuccess?: () => void,\n) {\n const { widgetCtx: { api } } = useWidget();\n return useAsyncFn(\n async () =>\n api\n .vote({ action: \"downvote\", messagePublicId: id, sessionId })\n .then(onSuccess),\n [api, id, sessionId, onSuccess],\n );\n}\n"],"names":["useVote","id","sessionId","onSuccess","api","useWidget","useAsyncFn","action"],"mappings":"iIAQgB,SAAAA,EAAQC,EAAYC,EAAmBC,EAAwB,CAC7E,KAAM,CAAE,UAAW,CAAE,IAAAC,CAAI,GAAMC,EAAU,UAAA,EAClC,OAAAC,EAAA,SACL,MAAOC,GACDA,IAAW,KACNH,EACJ,KAAK,CAAE,OAAQ,SAAU,gBAAiBH,EAAI,UAAAC,CAAW,CAAA,EACzD,KAAKC,CAAS,EAEVC,EACJ,KAAK,CAAE,OAAQ,WAAY,gBAAiBH,EAAI,UAAAC,CAAW,CAAA,EAC3D,KAAKC,CAAS,EAGrB,CAACC,EAAKH,EAAIC,EAAWC,CAAS,CAAA,CAElC"}
1
+ {"version":3,"file":"react.cjs","sources":["../src/headless/react/hooks/useVote.ts"],"sourcesContent":["import useAsyncFn from \"react-use/lib/useAsyncFn\";\nimport { useWidget } from \"../WidgetProvider\";\n\n/**\n * @param id\n * @param onSuccess\n * @returns\n */\nexport function useVote(id: string, sessionId: string, onSuccess?: () => void) {\n const {\n widgetCtx: { api },\n } = useWidget();\n return useAsyncFn(\n async (action: \"up\" | \"down\") => {\n return api\n .vote({\n action: action === \"up\" ? \"upvote\" : \"downvote\",\n messagePublicId: id,\n sessionId,\n })\n .then(onSuccess);\n },\n [api, id, sessionId, onSuccess],\n );\n}\n\n/**\n * @param id\n * @param onSuccess\n * @deprecated use useVote instead\n */\nexport function useUpvote(\n id: string,\n sessionId: string,\n onSuccess?: () => void,\n) {\n const {\n widgetCtx: { api },\n } = useWidget();\n return useAsyncFn(\n async () =>\n api\n .vote({ action: \"upvote\", messagePublicId: id, sessionId })\n .then(onSuccess),\n [api, id, sessionId, onSuccess],\n );\n}\n\n/**\n * @param id\n * @param onSuccess\n * @deprecated use useVote instead\n */\nexport function useDownvote(\n id: string,\n sessionId: string,\n onSuccess?: () => void,\n) {\n const {\n widgetCtx: { api },\n } = useWidget();\n return useAsyncFn(\n async () =>\n api\n .vote({ action: \"downvote\", messagePublicId: id, sessionId })\n .then(onSuccess),\n [api, id, sessionId, onSuccess],\n );\n}\n"],"names":["useVote","id","sessionId","onSuccess","api","useWidget","useAsyncFn","action"],"mappings":"iIAQgB,SAAAA,EAAQC,EAAYC,EAAmBC,EAAwB,CACvE,KAAA,CACJ,UAAW,CAAE,IAAAC,CAAI,GACfC,EAAU,UAAA,EACP,OAAAC,EAAA,SACL,MAAOC,GACEH,EACJ,KAAK,CACJ,OAAQG,IAAW,KAAO,SAAW,WACrC,gBAAiBN,EACjB,UAAAC,CAAA,CACD,EACA,KAAKC,CAAS,EAEnB,CAACC,EAAKH,EAAIC,EAAWC,CAAS,CAAA,CAElC"}
package/dist/react.js CHANGED
@@ -1,24 +1,30 @@
1
- import { u as i, _ as o } from "./useUploadFiles-CeI1AbIE.js";
2
- import { W as l, a as p, b as f, c as m, d as v, e as c, f as P, g as W, i as b, h } from "./useUploadFiles-CeI1AbIE.js";
3
- function n(e, t, s) {
4
- const { widgetCtx: { api: a } } = i();
5
- return o(
6
- async (u) => u === "up" ? a.vote({ action: "upvote", messagePublicId: e, sessionId: t }).then(s) : a.vote({ action: "downvote", messagePublicId: e, sessionId: t }).then(s),
7
- [a, e, t, s]
1
+ import { u as o, _ as i } from "./useUploadFiles-DkWg1-Gg.js";
2
+ import { W as p, a as f, b as l, c, d as m, e as v, f as P, g as W, i as w, h as x } from "./useUploadFiles-DkWg1-Gg.js";
3
+ function n(e, s, t) {
4
+ const {
5
+ widgetCtx: { api: a }
6
+ } = o();
7
+ return i(
8
+ async (u) => a.vote({
9
+ action: u === "up" ? "upvote" : "downvote",
10
+ messagePublicId: e,
11
+ sessionId: s
12
+ }).then(t),
13
+ [a, e, s, t]
8
14
  );
9
15
  }
10
16
  export {
11
- l as WidgetProvider,
12
- p as useConfig,
13
- f as useContact,
14
- m as useIsAwaitingBotReply,
15
- v as useMessages,
16
- c as usePreludeData,
17
+ p as WidgetProvider,
18
+ f as useConfig,
19
+ l as useContact,
20
+ c as useIsAwaitingBotReply,
21
+ m as useMessages,
22
+ v as usePreludeData,
17
23
  P as usePrimitiveState,
18
24
  W as useSessions,
19
- b as useUploadFiles,
25
+ w as useUploadFiles,
20
26
  n as useVote,
21
- i as useWidget,
22
- h as useWidgetRouter
27
+ o as useWidget,
28
+ x as useWidgetRouter
23
29
  };
24
30
  //# sourceMappingURL=react.js.map
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sources":["../src/headless/react/hooks/useVote.ts"],"sourcesContent":["import useAsyncFn from \"react-use/lib/useAsyncFn\";\nimport { useWidget } from \"../WidgetProvider\";\n\n/**\n * @param id\n * @param onSuccess\n * @returns\n */\nexport function useVote(id: string, sessionId: string, onSuccess?: () => void) {\n const { widgetCtx: { api } } = useWidget();\n return useAsyncFn(\n async (action: \"up\" | \"down\") => {\n if (action === \"up\") {\n return api\n .vote({ action: \"upvote\", messagePublicId: id, sessionId })\n .then(onSuccess);\n } else {\n return api\n .vote({ action: \"downvote\", messagePublicId: id, sessionId })\n .then(onSuccess);\n }\n },\n [api, id, sessionId, onSuccess],\n );\n}\n\n/**\n * @param id\n * @param onSuccess\n * @deprecated use useVote instead\n */\nexport function useUpvote(\n id: string,\n sessionId: string,\n onSuccess?: () => void,\n) {\n const { widgetCtx: { api } } = useWidget();\n return useAsyncFn(\n async () =>\n api\n .vote({ action: \"upvote\", messagePublicId: id, sessionId })\n .then(onSuccess),\n [api, id, sessionId, onSuccess],\n );\n}\n\n/**\n * @param id\n * @param onSuccess\n * @deprecated use useVote instead\n */\nexport function useDownvote(\n id: string,\n sessionId: string,\n onSuccess?: () => void,\n) {\n const { widgetCtx: { api } } = useWidget();\n return useAsyncFn(\n async () =>\n api\n .vote({ action: \"downvote\", messagePublicId: id, sessionId })\n .then(onSuccess),\n [api, id, sessionId, onSuccess],\n );\n}\n"],"names":["useVote","id","sessionId","onSuccess","api","useWidget","useAsyncFn","action"],"mappings":";;AAQgB,SAAAA,EAAQC,GAAYC,GAAmBC,GAAwB;AAC7E,QAAM,EAAE,WAAW,EAAE,KAAAC,EAAI,MAAMC,EAAU;AAClC,SAAAC;AAAAA,IACL,OAAOC,MACDA,MAAW,OACNH,EACJ,KAAK,EAAE,QAAQ,UAAU,iBAAiBH,GAAI,WAAAC,EAAW,CAAA,EACzD,KAAKC,CAAS,IAEVC,EACJ,KAAK,EAAE,QAAQ,YAAY,iBAAiBH,GAAI,WAAAC,EAAW,CAAA,EAC3D,KAAKC,CAAS;AAAA,IAGrB,CAACC,GAAKH,GAAIC,GAAWC,CAAS;AAAA,EAAA;AAElC;"}
1
+ {"version":3,"file":"react.js","sources":["../src/headless/react/hooks/useVote.ts"],"sourcesContent":["import useAsyncFn from \"react-use/lib/useAsyncFn\";\nimport { useWidget } from \"../WidgetProvider\";\n\n/**\n * @param id\n * @param onSuccess\n * @returns\n */\nexport function useVote(id: string, sessionId: string, onSuccess?: () => void) {\n const {\n widgetCtx: { api },\n } = useWidget();\n return useAsyncFn(\n async (action: \"up\" | \"down\") => {\n return api\n .vote({\n action: action === \"up\" ? \"upvote\" : \"downvote\",\n messagePublicId: id,\n sessionId,\n })\n .then(onSuccess);\n },\n [api, id, sessionId, onSuccess],\n );\n}\n\n/**\n * @param id\n * @param onSuccess\n * @deprecated use useVote instead\n */\nexport function useUpvote(\n id: string,\n sessionId: string,\n onSuccess?: () => void,\n) {\n const {\n widgetCtx: { api },\n } = useWidget();\n return useAsyncFn(\n async () =>\n api\n .vote({ action: \"upvote\", messagePublicId: id, sessionId })\n .then(onSuccess),\n [api, id, sessionId, onSuccess],\n );\n}\n\n/**\n * @param id\n * @param onSuccess\n * @deprecated use useVote instead\n */\nexport function useDownvote(\n id: string,\n sessionId: string,\n onSuccess?: () => void,\n) {\n const {\n widgetCtx: { api },\n } = useWidget();\n return useAsyncFn(\n async () =>\n api\n .vote({ action: \"downvote\", messagePublicId: id, sessionId })\n .then(onSuccess),\n [api, id, sessionId, onSuccess],\n );\n}\n"],"names":["useVote","id","sessionId","onSuccess","api","useWidget","useAsyncFn","action"],"mappings":";;AAQgB,SAAAA,EAAQC,GAAYC,GAAmBC,GAAwB;AACvE,QAAA;AAAA,IACJ,WAAW,EAAE,KAAAC,EAAI;AAAA,MACfC,EAAU;AACP,SAAAC;AAAAA,IACL,OAAOC,MACEH,EACJ,KAAK;AAAA,MACJ,QAAQG,MAAW,OAAO,WAAW;AAAA,MACrC,iBAAiBN;AAAA,MACjB,WAAAC;AAAA,IAAA,CACD,EACA,KAAKC,CAAS;AAAA,IAEnB,CAACC,GAAKH,GAAIC,GAAWC,CAAS;AAAA,EAAA;AAElC;"}
@@ -0,0 +1,3 @@
1
+ import { default as React } from 'react';
2
+ import { WidgetComponentProps } from '../../../../headless/react';
3
+ export declare function HandoffComponent({ data }: WidgetComponentProps): React.JSX.Element;
@@ -1,4 +1,4 @@
1
- export declare function useWidgetContentHeight({ fallbackHeight: minHeight, }: {
1
+ export declare function useWidgetContentHeight({ fallbackHeight, }: {
2
2
  /**
3
3
  * unrendered elements have an offset height of 0, this is causes a weird animation when opening the widget.
4
4
  * So, a fallback value equal to the fixed height or min height of the screen's root div solves the issue.
@@ -1,6 +1,6 @@
1
1
  import { AxiosRequestConfig } from 'axios';
2
2
  import { Dto } from './sdk';
3
- import { WidgetConfig } from './types/WidgetConfig';
3
+ import { WidgetConfig } from './types/widget-config';
4
4
  import { SendMessageDto, VoteInputDto } from './types/schemas';
5
5
  export declare class ApiCaller {
6
6
  private client;
@@ -1,24 +1,29 @@
1
1
  import { PrimitiveState } from '../utils/PrimitiveState';
2
2
  import { ApiCaller } from '../api';
3
- import { WidgetConfig } from '../types/WidgetConfig';
3
+ import { WidgetConfig } from '../types/widget-config';
4
4
  import { Dto } from '../sdk';
5
+ import { StorageCtx } from './storage.ctx';
5
6
  type ContactState = {
6
7
  contact: {
7
8
  token: string;
9
+ externalId: string | undefined;
8
10
  } | null;
9
11
  isCreatingUnverifiedContact: boolean;
10
12
  isErrorCreatingUnverifiedContact: boolean;
11
13
  };
12
14
  export declare class ContactCtx {
13
15
  private config;
16
+ private storageCtx?;
14
17
  private api;
15
18
  state: PrimitiveState<ContactState>;
16
- constructor({ config, api, }: {
19
+ constructor({ config, api, storageCtx, }: {
17
20
  api: ApiCaller;
18
21
  config: WidgetConfig;
22
+ storageCtx?: StorageCtx;
19
23
  });
20
24
  shouldCollectData: () => boolean;
21
- private autoCreateUnverifiedUser;
25
+ private autoCreateUnverifiedUserIfNotExists;
22
26
  createUnverifiedContact: (payload: Dto["CreateUnverifiedContactDto"]) => Promise<void>;
27
+ setUnverifiedContact: (token: string) => Promise<void>;
23
28
  }
24
29
  export {};
@@ -1,5 +1,5 @@
1
1
  import { ApiCaller } from '../api';
2
- import { WidgetConfig } from '../types/WidgetConfig';
2
+ import { WidgetConfig } from '../types/widget-config';
3
3
  import { SafeOmit, SomeOptional } from '../types/helpers';
4
4
  import { MessageType } from '../types/messages';
5
5
  import { SendMessageDto } from '../types/schemas';
@@ -1,6 +1,5 @@
1
1
  import { ApiCaller } from '../api';
2
2
  import { SessionDto } from '../types/schemas';
3
- import { WidgetConfig } from '../types/WidgetConfig';
4
3
  import { PrimitiveState } from '../utils/PrimitiveState';
5
4
  import { ContactCtx } from './contact.ctx';
6
5
  type SessionState = {
@@ -23,15 +22,13 @@ type SessionsState = {
23
22
  isInitialFetchLoading: boolean;
24
23
  };
25
24
  export declare class SessionCtx {
26
- private config;
27
25
  private api;
28
26
  private contactCtx;
29
27
  private activeSessionPoller;
30
28
  private sessionsRefresher;
31
29
  sessionState: PrimitiveState<SessionState>;
32
30
  sessionsState: PrimitiveState<SessionsState>;
33
- constructor({ config, api, contactCtx, }: {
34
- config: WidgetConfig;
31
+ constructor({ api, contactCtx }: {
35
32
  api: ApiCaller;
36
33
  contactCtx: ContactCtx;
37
34
  });
@@ -55,10 +52,7 @@ export declare class SessionCtx {
55
52
  isVerified: boolean;
56
53
  lastMessage: string | null;
57
54
  } | null>;
58
- /**
59
- * Let's keep this private for now until we figure out how to do paginated fetching in tandem with the interval refreshing
60
- */
61
- private loadMoreSessions;
55
+ loadMoreSessions: () => Promise<void>;
62
56
  private getSessions;
63
57
  }
64
58
  export {};
@@ -0,0 +1,12 @@
1
+ import { ExternalStorage } from '../types/external-storage';
2
+ export declare class StorageCtx {
3
+ private storage;
4
+ private KEYS;
5
+ constructor({ storage }: {
6
+ storage: ExternalStorage;
7
+ });
8
+ setContactToken: (token: string) => Promise<void>;
9
+ getContactToken: () => Promise<string | null>;
10
+ setExternalContactId: (id: string) => Promise<void>;
11
+ getExternalContactId: () => Promise<string | null>;
12
+ }
@@ -1,9 +1,11 @@
1
1
  import { ApiCaller } from '../api';
2
- import { WidgetConfig } from '../types/WidgetConfig';
2
+ import { ExternalStorage } from '../types/external-storage';
3
+ import { WidgetConfig } from '../types/widget-config';
3
4
  import { ContactCtx } from './contact.ctx';
4
5
  import { MessageCtx } from './message.ctx';
5
6
  import { RouterCtx } from './router.ctx';
6
7
  import { SessionCtx } from './session.ctx';
8
+ import { StorageCtx } from './storage.ctx';
7
9
  export declare class WidgetCtx {
8
10
  config: WidgetConfig;
9
11
  api: ApiCaller;
@@ -11,8 +13,10 @@ export declare class WidgetCtx {
11
13
  sessionCtx: SessionCtx;
12
14
  messageCtx: MessageCtx;
13
15
  routerCtx: RouterCtx;
14
- constructor({ config }: {
16
+ storageCtx?: StorageCtx;
17
+ constructor({ config, storage, }: {
15
18
  config: WidgetConfig;
19
+ storage?: ExternalStorage;
16
20
  });
17
21
  resetChat: () => void;
18
22
  }
@@ -2,7 +2,8 @@ export type { AgentOrBotType } from './types/agent-or-bot';
2
2
  export type { SafeExtract, SafeOmit, SomeOptional, StringOrLiteral, } from './types/helpers';
3
3
  export type { WidgetComponentKey, UserMessageType, AgentMessageType, BotMessageType, MessageType, } from './types/messages';
4
4
  export type { MessageAttachmentType, MessageDto, PreludeDto, SendMessageDto, SendMessageOutputDto, SessionDto, VoteInputDto, VoteOutputDto, } from './types/schemas';
5
- export type { WidgetConfig } from './types/WidgetConfig';
5
+ export type { WidgetConfig } from './types/widget-config';
6
+ export type { ExternalStorage } from './types/external-storage';
6
7
  export { WidgetCtx } from './context/widget.ctx';
7
8
  export type { ContactCtx } from './context/contact.ctx';
8
9
  export type { SessionCtx } from './context/session.ctx';
@@ -0,0 +1,5 @@
1
+ export type ExternalStorage = {
2
+ get: (key: string) => Promise<string | null>;
3
+ set: (key: string, value: string) => Promise<void>;
4
+ remove: (key: string) => Promise<void>;
5
+ };
@@ -7,6 +7,6 @@ export declare class Poller {
7
7
  state: PrimitiveState<PollingState>;
8
8
  private abortController;
9
9
  reset: () => void;
10
- stopPolling: (() => void) | null;
10
+ private stopPolling;
11
11
  startPolling: (cb: (abortSignal: AbortSignal) => Promise<void>, interval: number) => void;
12
12
  }
@@ -1,45 +1,13 @@
1
1
  export type Subscriber<T> = (data: T) => void;
2
- export declare enum LifecycleEvent {
3
- INIT = "init",
4
- STATE_CHANGE = "stateChange",
5
- BEFORE_UPDATE = "beforeUpdate",
6
- AFTER_UPDATE = "afterUpdate",
7
- DESTROY = "destroy",
8
- ERROR = "error"
9
- }
10
- type LifecycleListener = (event: {
11
- type: LifecycleEvent;
12
- timestamp: number;
13
- data?: any;
14
- }) => void;
15
2
  export declare class PrimitiveState<S> {
16
- #private;
17
3
  private subscribers;
4
+ private state;
18
5
  private initialState;
19
- private lifecycleListeners;
20
6
  constructor(state: S);
21
- private emitLifecycle;
22
- private notifySubscribers;
23
- /**
24
- * Subscribe to state changes
25
- * @param callback Function to call when state changes
26
- * @returns Unsubscribe function
27
- */
28
- subscribe: (callback: Subscriber<S>) => (() => void);
29
- onLifecycle: (event: LifecycleEvent, listener: LifecycleListener) => (() => void);
30
- /** Get the current state */
31
7
  get: () => S;
32
- /**
33
- * Set the state and notify subscribers if the state changes
34
- * @param newState The new state to set
35
- */
36
8
  set: (newState: S) => void;
37
9
  setPartial: (_s: Partial<S>) => void;
38
- /**
39
- * Clear all subscriptions
40
- */
41
- clear: () => void;
42
10
  reset: () => void;
43
- lastUpdated: () => number | null;
11
+ private notifySubscribers;
12
+ subscribe: (callback: Subscriber<S>) => (() => void);
44
13
  }
45
- export {};
@@ -4,7 +4,7 @@ export declare class ComponentRegistry {
4
4
  constructor(opts: {
5
5
  components?: WidgetComponentType[];
6
6
  });
7
- register(com: WidgetComponentType): this;
7
+ register(component: WidgetComponentType): this;
8
8
  private get;
9
9
  getComponent(key: string): import('react').ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
10
10
  }
@@ -1,7 +1,7 @@
1
1
  import { default as React } from 'react';
2
2
  import { ComponentRegistry } from './ComponentRegistry';
3
3
  import { WidgetComponentType } from './types/components';
4
- import { WidgetConfig, WidgetCtx } from '../core';
4
+ import { ExternalStorage, WidgetConfig, WidgetCtx } from '../core';
5
5
  interface WidgetProviderValue {
6
6
  widgetCtx: WidgetCtx;
7
7
  components?: WidgetComponentType[];
@@ -9,9 +9,10 @@ interface WidgetProviderValue {
9
9
  version: string;
10
10
  }
11
11
  declare const useWidget: () => WidgetProviderValue;
12
- declare function WidgetProvider({ options, children, components, }: {
12
+ declare function WidgetProvider({ options, children, components, storage, }: {
13
13
  options: WidgetConfig;
14
14
  children: React.ReactNode;
15
15
  components?: WidgetComponentType[];
16
+ storage?: ExternalStorage;
16
17
  }): React.JSX.Element;
17
18
  export { useWidget, WidgetProvider };
@@ -2,6 +2,7 @@ export declare function useContact(): {
2
2
  contactState: {
3
3
  contact: {
4
4
  token: string;
5
+ externalId: string | undefined;
5
6
  } | null;
6
7
  isCreatingUnverifiedContact: boolean;
7
8
  isErrorCreatingUnverifiedContact: boolean;
@@ -10,4 +10,5 @@ export declare function useSessions(): {
10
10
  didStartInitialFetch: boolean;
11
11
  isInitialFetchLoading: boolean;
12
12
  };
13
+ loadMoreSessions: () => Promise<void>;
13
14
  };
@@ -1,4 +1,4 @@
1
- "use strict";var qt=Object.defineProperty;var Bt=(e,t,n)=>t in e?qt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ke=(e,t,n)=>Bt(e,typeof t!="symbol"?t+"":t,n);const E=require("react"),Gt=require("react/jsx-runtime"),Ht=require("./widget.ctx-DmyynT8O.cjs"),$t=require("uuid");class Kt{constructor(t){ke(this,"components",[{key:"loading",component:t=>"loading"}]);const{components:n}=t;if(n&&n.forEach(r=>this.register(r)),this.components.length===0)throw new Error("No components registered");if(!this.get("fallback"))throw new Error("No fallback component registered")}register(t){const n=this.components.findIndex(r=>r.key===t.key);return n!==-1?this.components[n]=t:this.components.push(t),this}get(t){const n=this.components.find(r=>r.key.toUpperCase()===t.toUpperCase());return n||null}getComponent(t){var n;return(n=this.get(t))==null?void 0:n.component}}function kt(e){const t=E.createContext({});return[()=>{const r=E.useContext(t);if(r===void 0)throw new Error("useSafeContext must be used within a Provider");return r},t.Provider]}const zt="3.0.32",[K,Yt]=kt();function Jt({options:e,children:t,components:n}){const r=E.useRef(new Ht.WidgetCtx({config:e})).current,o=E.useMemo(()=>new Kt({components:n}),[n]);return Gt.jsx(Yt,{value:{widgetCtx:r,components:n,componentStore:o,version:zt},children:t})}function Xt(){const{widgetCtx:e}=K();return e.config}function ee(e){return E.useSyncExternalStore(e.subscribe,e.get,e.get)}function Qt(){const{widgetCtx:e}=K();return{contactState:ee(e.contactCtx.state),createUnverifiedContact:e.contactCtx.createUnverifiedContact}}function tt(){const{widgetCtx:e}=K();return{messagesState:ee(e.messageCtx.state),sendMessage:e.messageCtx.sendMessage}}function nt(){const{widgetCtx:e}=K(),t=ee(e.sessionCtx.sessionState),n=ee(e.sessionCtx.sessionsState);return{sessionState:t,sessionsState:n}}function Zt(){var s,i;const{sessionState:e}=nt(),{messagesState:t}=tt(),n=((s=e.session)==null?void 0:s.assignee.kind)==="ai",r=((i=t.messages.at(-1))==null?void 0:i.type)==="FROM_USER";return{isAwaitingBotReply:(n||e.isCreatingSession)&&(t.isSendingMessage||r)}}var en=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function tn(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function nn(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function r(){return this instanceof r?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}),n}var Oe={exports:{}},ye={};/**
1
+ "use strict";var qt=Object.defineProperty;var Bt=(e,t,n)=>t in e?qt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ke=(e,t,n)=>Bt(e,typeof t!="symbol"?t+"":t,n);const E=require("react"),Gt=require("react/jsx-runtime"),Ht=require("./widget.ctx-D_AFA5p3.cjs"),$t=require("uuid");class Kt{constructor(t){ke(this,"components",[]);const{components:n}=t;if(n&&n.forEach(r=>this.register(r)),this.components.length===0)throw new Error("No components registered");if(!this.get("fallback"))throw new Error("No fallback component registered")}register(t){const n=this.components.findIndex(r=>r.key===t.key);return n!==-1?this.components[n]=t:this.components.push(t),this}get(t){const n=this.components.find(r=>r.key.toUpperCase()===t.toUpperCase());return n||null}getComponent(t){var n;return(n=this.get(t))==null?void 0:n.component}}function kt(e){const t=E.createContext({});return[()=>{const r=E.useContext(t);if(r===void 0)throw new Error("useSafeContext must be used within a Provider");return r},t.Provider]}const zt="3.0.34",[K,Yt]=kt();function Jt({options:e,children:t,components:n,storage:r}){const o=E.useRef(new Ht.WidgetCtx({config:e,storage:r})).current,s=E.useMemo(()=>new Kt({components:n}),[n]);return Gt.jsx(Yt,{value:{widgetCtx:o,components:n,componentStore:s,version:zt},children:t})}function Xt(){const{widgetCtx:e}=K();return e.config}function ee(e){return E.useSyncExternalStore(e.subscribe,e.get,e.get)}function Qt(){const{widgetCtx:e}=K();return{contactState:ee(e.contactCtx.state),createUnverifiedContact:e.contactCtx.createUnverifiedContact}}function tt(){const{widgetCtx:e}=K();return{messagesState:ee(e.messageCtx.state),sendMessage:e.messageCtx.sendMessage}}function nt(){const{widgetCtx:e}=K(),t=ee(e.sessionCtx.sessionState),n=ee(e.sessionCtx.sessionsState);return{sessionState:t,sessionsState:n,loadMoreSessions:e.sessionCtx.loadMoreSessions}}function Zt(){var s,i;const{sessionState:e}=nt(),{messagesState:t}=tt(),n=((s=e.session)==null?void 0:s.assignee.kind)==="ai",r=((i=t.messages.at(-1))==null?void 0:i.type)==="FROM_USER";return{isAwaitingBotReply:(n||e.isCreatingSession)&&(t.isSendingMessage||r)}}var en=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function tn(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function nn(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function r(){return this instanceof r?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}),n}var Oe={exports:{}},ye={};/**
2
2
  * @license React
3
3
  * use-sync-external-store-shim.production.min.js
4
4
  *
@@ -15,4 +15,4 @@
15
15
  * This source code is licensed under the MIT license found in the
16
16
  * LICENSE file in the root directory of this source tree.
17
17
  */var Ye;function on(){return Ye||(Ye=1,process.env.NODE_ENV!=="production"&&function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var e=E,t=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function n(R){{for(var v=arguments.length,w=new Array(v>1?v-1:0),S=1;S<v;S++)w[S-1]=arguments[S];r("error",R,w)}}function r(R,v,w){{var S=t.ReactDebugCurrentFrame,I=S.getStackAddendum();I!==""&&(v+="%s",w=w.concat([I]));var m=w.map(function(D){return String(D)});m.unshift("Warning: "+v),Function.prototype.apply.call(console[R],console,m)}}function o(R,v){return R===v&&(R!==0||1/R===1/v)||R!==R&&v!==v}var s=typeof Object.is=="function"?Object.is:o,i=e.useState,d=e.useEffect,_=e.useLayoutEffect,f=e.useDebugValue,a=!1,u=!1;function l(R,v,w){a||e.startTransition!==void 0&&(a=!0,n("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var S=v();if(!u){var I=v();s(S,I)||(n("The result of getSnapshot should be cached to avoid an infinite loop"),u=!0)}var m=i({inst:{value:S,getSnapshot:v}}),D=m[0].inst,P=m[1];return _(function(){D.value=S,D.getSnapshot=v,c(D)&&P({inst:D})},[R,S,v]),d(function(){c(D)&&P({inst:D});var B=function(){c(D)&&P({inst:D})};return R(B)},[R]),f(S),S}function c(R){var v=R.getSnapshot,w=R.value;try{var S=v();return!s(w,S)}catch{return!0}}function y(R,v,w){return v()}var h=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",T=!h,p=T?y:l,z=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:p;ge.useSyncExternalStore=z,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()),ge}process.env.NODE_ENV==="production"?Oe.exports=rn():Oe.exports=on();var sn=Oe.exports;const H=()=>{},L=H(),Ee=Object,g=e=>e===L,N=e=>typeof e=="function",$=(e,t)=>({...e,...t}),an=e=>N(e.then),ue=new WeakMap;let un=0;const oe=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,s;if(Ee(e)===e&&!r&&n!=RegExp){if(o=ue.get(e),o)return o;if(o=++un+"~",ue.set(e,o),n==Array){for(o="@",s=0;s<e.length;s++)o+=oe(e[s])+",";ue.set(e,o)}if(n==Ee){o="#";const i=Ee.keys(e).sort();for(;!g(s=i.pop());)g(e[s])||(o+=s+":"+oe(e[s])+",");ue.set(e,o)}}else o=r?e.toJSON():t=="symbol"?e.toString():t=="string"?JSON.stringify(e):""+e;return o},q=new WeakMap,ve={},ce={},Pe="undefined",de=typeof window!=Pe,Re=typeof document!=Pe,cn=()=>de&&typeof window.requestAnimationFrame!=Pe,rt=(e,t)=>{const n=q.get(e);return[()=>!g(t)&&e.get(t)||ve,r=>{if(!g(t)){const o=e.get(t);t in ce||(ce[t]=o),n[5](t,$(o,r),o||ve)}},n[6],()=>!g(t)&&t in ce?ce[t]:!g(t)&&e.get(t)||ve]};let Ce=!0;const fn=()=>Ce,[Te,De]=de&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[H,H],ln=()=>{const e=Re&&document.visibilityState;return g(e)||e!=="hidden"},dn=e=>(Re&&document.addEventListener("visibilitychange",e),Te("focus",e),()=>{Re&&document.removeEventListener("visibilitychange",e),De("focus",e)}),pn=e=>{const t=()=>{Ce=!0,e()},n=()=>{Ce=!1};return Te("online",t),Te("offline",n),()=>{De("online",t),De("offline",n)}},_n={isOnline:fn,isVisible:ln},hn={initFocus:dn,initReconnect:pn},Je=!E.useId,se=!de||"Deno"in window,yn=e=>cn()?window.requestAnimationFrame(e):setTimeout(e,1),Se=se?E.useEffect:E.useLayoutEffect,we=typeof navigator<"u"&&navigator.connection,Xe=!se&&we&&(["slow-2g","2g"].includes(we.effectiveType)||we.saveData),Le=e=>{if(N(e))try{e=e()}catch{e=""}const t=e;return e=typeof e=="string"?e:(Array.isArray(e)?e.length:e)?oe(e):"",[e,t]};let gn=0;const Ae=()=>++gn,ot=0,st=1,it=2,En=3;var re={__proto__:null,ERROR_REVALIDATE_EVENT:En,FOCUS_EVENT:ot,MUTATE_EVENT:it,RECONNECT_EVENT:st};async function at(...e){const[t,n,r,o]=e,s=$({populateCache:!0,throwOnError:!0},typeof o=="boolean"?{revalidate:o}:o||{});let i=s.populateCache;const d=s.rollbackOnError;let _=s.optimisticData;const f=l=>typeof d=="function"?d(l):d!==!1,a=s.throwOnError;if(N(n)){const l=n,c=[],y=t.keys();for(const h of y)!/^\$(inf|sub)\$/.test(h)&&l(t.get(h)._k)&&c.push(h);return Promise.all(c.map(u))}return u(n);async function u(l){const[c]=Le(l);if(!c)return;const[y,h]=rt(t,c),[T,p,z,R]=q.get(t),v=()=>{const M=T[c];return(N(s.revalidate)?s.revalidate(y().data,l):s.revalidate!==!1)&&(delete z[c],delete R[c],M&&M[0])?M[0](it).then(()=>y().data):y().data};if(e.length<3)return v();let w=r,S;const I=Ae();p[c]=[I,0];const m=!g(_),D=y(),P=D.data,B=D._c,k=g(B)?P:B;if(m&&(_=N(_)?_(k,P):_,h({data:_,_c:k})),N(w))try{w=w(k)}catch(M){S=M}if(w&&an(w))if(w=await w.catch(M=>{S=M}),I!==p[c][0]){if(S)throw S;return w}else S&&m&&f(S)&&(i=!0,h({data:k,_c:L}));if(i&&!S)if(N(i)){const M=i(w,k);h({data:M,error:L,_c:L})}else h({data:w,error:L,_c:L});if(p[c][1]=Ae(),Promise.resolve(v()).then(()=>{h({_c:L})}),S){if(a)throw S;return}return w}}const Qe=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},vn=(e,t)=>{if(!q.has(e)){const n=$(hn,t),r={},o=at.bind(L,e);let s=H;const i={},d=(a,u)=>{const l=i[a]||[];return i[a]=l,l.push(u),()=>l.splice(l.indexOf(u),1)},_=(a,u,l)=>{e.set(a,u);const c=i[a];if(c)for(const y of c)y(u,l)},f=()=>{if(!q.has(e)&&(q.set(e,[r,{},{},{},o,_,d]),!se)){const a=n.initFocus(setTimeout.bind(L,Qe.bind(L,r,ot))),u=n.initReconnect(setTimeout.bind(L,Qe.bind(L,r,st)));s=()=>{a&&a(),u&&u(),q.delete(e)}}};return f(),[e,o,f,s]}return[e,q.get(e)[4]]},Sn=(e,t,n,r,o)=>{const s=n.errorRetryCount,i=o.retryCount,d=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!g(s)&&i>s||setTimeout(r,d,o)},wn=(e,t)=>oe(e)==oe(t),[ut,mn]=vn(new Map),bn=$({onLoadingSlow:H,onSuccess:H,onError:H,onErrorRetry:Sn,onDiscarded:H,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:Xe?1e4:5e3,focusThrottleInterval:5*1e3,dedupingInterval:2*1e3,loadingTimeout:Xe?5e3:3e3,compare:wn,isPaused:()=>!1,cache:ut,mutate:mn,fallback:{}},_n),On=(e,t)=>{const n=$(e,t);if(t){const{use:r,fallback:o}=e,{use:s,fallback:i}=t;r&&s&&(n.use=r.concat(s)),o&&i&&(n.fallback=$(o,i))}return n},Rn=E.createContext({}),Cn="$inf$",ct=de&&window.__SWR_DEVTOOLS_USE__,Tn=ct?window.__SWR_DEVTOOLS_USE__:[],Dn=()=>{ct&&(window.__SWR_DEVTOOLS_REACT__=E)},An=e=>N(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(e[1]===null?e[2]:e[1])||{}],xn=()=>$(bn,E.useContext(Rn)),jn=e=>(t,n,r)=>e(t,n&&((...s)=>{const[i]=Le(t),[,,,d]=q.get(ut);if(i.startsWith(Cn))return n(...s);const _=d[i];return g(_)?n(...s):(delete d[i],_)}),r),Pn=Tn.concat(jn),Ln=e=>function(...n){const r=xn(),[o,s,i]=An(n),d=On(r,i);let _=e;const{use:f}=d,a=(f||[]).concat(Pn);for(let u=a.length;u--;)_=a[u](_);return _(o,s||d.fetcher||null,d)},In=(e,t,n)=>{const r=t[e]||(t[e]=[]);return r.push(n),()=>{const o=r.indexOf(n);o>=0&&(r[o]=r[r.length-1],r.pop())}};Dn();const Ze=E.use||(e=>{if(e.status==="pending")throw e;if(e.status==="fulfilled")return e.value;throw e.status==="rejected"?e.reason:(e.status="pending",e.then(t=>{e.status="fulfilled",e.value=t},t=>{e.status="rejected",e.reason=t}),e)}),me={dedupe:!0},Vn=(e,t,n)=>{const{cache:r,compare:o,suspense:s,fallbackData:i,revalidateOnMount:d,revalidateIfStale:_,refreshInterval:f,refreshWhenHidden:a,refreshWhenOffline:u,keepPreviousData:l}=n,[c,y,h,T]=q.get(r),[p,z]=Le(e),R=E.useRef(!1),v=E.useRef(!1),w=E.useRef(p),S=E.useRef(t),I=E.useRef(n),m=()=>I.current,D=()=>m().isVisible()&&m().isOnline(),[P,B,k,M]=rt(r,p),Y=E.useRef({}).current,Mt=g(i)?n.fallback[p]:i,Fe=(b,O)=>{for(const x in Y){const C=x;if(C==="data"){if(!o(b[C],O[C])&&(!g(b[C])||!o(ae,O[C])))return!1}else if(O[C]!==b[C])return!1}return!0},Ne=E.useMemo(()=>{const b=!p||!t?!1:g(d)?m().isPaused()||s?!1:g(_)?!0:_:d,O=j=>{const U=$(j);return delete U._k,b?{isValidating:!0,isLoading:!0,...U}:U},x=P(),C=M(),F=O(x),Z=x===C?F:O(C);let A=F;return[()=>{const j=O(P());return Fe(j,A)?(A.data=j.data,A.isLoading=j.isLoading,A.isValidating=j.isValidating,A.error=j.error,A):(A=j,j)},()=>Z]},[r,p]),J=sn.useSyncExternalStore(E.useCallback(b=>k(p,(O,x)=>{Fe(x,O)||b()}),[r,p]),Ne[0],Ne[1]),Ue=!R.current,Ft=c[p]&&c[p].length>0,X=J.data,Q=g(X)?Mt:X,ie=J.error,We=E.useRef(Q),ae=l?g(X)?We.current:X:Q,qe=Ft&&!g(ie)?!1:Ue&&!g(d)?d:m().isPaused()?!1:s?g(Q)?!1:_:g(Q)||_,Be=!!(p&&t&&Ue&&qe),Nt=g(J.isValidating)?Be:J.isValidating,Ut=g(J.isLoading)?Be:J.isLoading,ne=E.useCallback(async b=>{const O=S.current;if(!p||!O||v.current||m().isPaused())return!1;let x,C,F=!0;const Z=b||{},A=!h[p]||!Z.dedupe,j=()=>Je?!v.current&&p===w.current&&R.current:p===w.current,U={isValidating:!1,isLoading:!1},He=()=>{B(U)},$e=()=>{const V=h[p];V&&V[1]===C&&delete h[p]},Ke={isValidating:!0};g(P().data)&&(Ke.isLoading=!0);try{if(A&&(B(Ke),n.loadingTimeout&&g(P().data)&&setTimeout(()=>{F&&j()&&m().onLoadingSlow(p,n)},n.loadingTimeout),h[p]=[O(z),Ae()]),[x,C]=h[p],x=await x,A&&setTimeout($e,n.dedupingInterval),!h[p]||h[p][1]!==C)return A&&j()&&m().onDiscarded(p),!1;U.error=L;const V=y[p];if(!g(V)&&(C<=V[0]||C<=V[1]||V[1]===0))return He(),A&&j()&&m().onDiscarded(p),!1;const W=P().data;U.data=o(W,x)?W:x,A&&j()&&m().onSuccess(x,p,n)}catch(V){$e();const W=m(),{shouldRetryOnError:_e}=W;W.isPaused()||(U.error=V,A&&j()&&(W.onError(V,p,W),(_e===!0||N(_e)&&_e(V))&&(!m().revalidateOnFocus||!m().revalidateOnReconnect||D())&&W.onErrorRetry(V,p,W,Wt=>{const he=c[p];he&&he[0]&&he[0](re.ERROR_REVALIDATE_EVENT,Wt)},{retryCount:(Z.retryCount||0)+1,dedupe:!0})))}return F=!1,He(),!0},[p,r]),Ge=E.useCallback((...b)=>at(r,w.current,...b),[]);if(Se(()=>{S.current=t,I.current=n,g(X)||(We.current=X)}),Se(()=>{if(!p)return;const b=ne.bind(L,me);let O=0;const C=In(p,c,(F,Z={})=>{if(F==re.FOCUS_EVENT){const A=Date.now();m().revalidateOnFocus&&A>O&&D()&&(O=A+m().focusThrottleInterval,b())}else if(F==re.RECONNECT_EVENT)m().revalidateOnReconnect&&D()&&b();else{if(F==re.MUTATE_EVENT)return ne();if(F==re.ERROR_REVALIDATE_EVENT)return ne(Z)}});return v.current=!1,w.current=p,R.current=!0,B({_k:z}),qe&&(g(Q)||se?b():yn(b)),()=>{v.current=!0,C()}},[p]),Se(()=>{let b;function O(){const C=N(f)?f(P().data):f;C&&b!==-1&&(b=setTimeout(x,C))}function x(){!P().error&&(a||m().isVisible())&&(u||m().isOnline())?ne(me).then(O):O()}return O(),()=>{b&&(clearTimeout(b),b=-1)}},[f,a,u,p]),E.useDebugValue(ae),s&&g(Q)&&p){if(!Je&&se)throw new Error("Fallback data is required when using suspense in SSR.");S.current=t,I.current=n,v.current=!1;const b=T[p];if(!g(b)){const O=Ge(b);Ze(O)}if(g(ie)){const O=ne(me);g(ae)||(O.status="fulfilled",O.value=!0),Ze(O)}else throw ie}return{mutate:Ge,get data(){return Y.data=!0,ae},get error(){return Y.error=!0,ie},get isValidating(){return Y.isValidating=!0,Nt},get isLoading(){return Y.isLoading=!0,Ut}}},Mn=Ln(Vn);function Fn(){const{widgetCtx:e}=K();return Mn([e.config.token],e.api.widgetPrelude,{revalidateOnFocus:!1})}function Nn(){const{widgetCtx:e}=K();return{routerState:ee(e.routerCtx.state),toSessionsScreen:e.routerCtx.toSessionsScreen,toChatScreen:e.routerCtx.toChatScreen}}var ft={},xe=function(e,t){return xe=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},xe(e,t)};function lt(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");xe(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}exports.__assign=function(){return exports.__assign=Object.assign||function(t){for(var n,r=1,o=arguments.length;r<o;r++){n=arguments[r];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},exports.__assign.apply(this,arguments)};function Ie(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n}function dt(e,t,n,r){var o=arguments.length,s=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(e,t,n,r);else for(var d=e.length-1;d>=0;d--)(i=e[d])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}function pt(e,t){return function(n,r){t(n,r,e)}}function _t(e,t,n,r,o,s){function i(p){if(p!==void 0&&typeof p!="function")throw new TypeError("Function expected");return p}for(var d=r.kind,_=d==="getter"?"get":d==="setter"?"set":"value",f=!t&&e?r.static?e:e.prototype:null,a=t||(f?Object.getOwnPropertyDescriptor(f,r.name):{}),u,l=!1,c=n.length-1;c>=0;c--){var y={};for(var h in r)y[h]=h==="access"?{}:r[h];for(var h in r.access)y.access[h]=r.access[h];y.addInitializer=function(p){if(l)throw new TypeError("Cannot add initializers after decoration has completed");s.push(i(p||null))};var T=(0,n[c])(d==="accessor"?{get:a.get,set:a.set}:a[_],y);if(d==="accessor"){if(T===void 0)continue;if(T===null||typeof T!="object")throw new TypeError("Object expected");(u=i(T.get))&&(a.get=u),(u=i(T.set))&&(a.set=u),(u=i(T.init))&&o.unshift(u)}else(u=i(T))&&(d==="field"?o.unshift(u):a[_]=u)}f&&Object.defineProperty(f,r.name,a),l=!0}function ht(e,t,n){for(var r=arguments.length>2,o=0;o<t.length;o++)n=r?t[o].call(e,n):t[o].call(e);return r?n:void 0}function yt(e){return typeof e=="symbol"?e:"".concat(e)}function gt(e,t,n){return typeof t=="symbol"&&(t=t.description?"[".concat(t.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:n?"".concat(n," ",t):t})}function Et(e,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,t)}function vt(e,t,n,r){function o(s){return s instanceof n?s:new n(function(i){i(s)})}return new(n||(n=Promise))(function(s,i){function d(a){try{f(r.next(a))}catch(u){i(u)}}function _(a){try{f(r.throw(a))}catch(u){i(u)}}function f(a){a.done?s(a.value):o(a.value).then(d,_)}f((r=r.apply(e,t||[])).next())})}function St(e,t){var n={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,o,s,i=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return i.next=d(0),i.throw=d(1),i.return=d(2),typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function d(f){return function(a){return _([f,a])}}function _(f){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,f[0]&&(n=0)),n;)try{if(r=1,o&&(s=f[0]&2?o.return:f[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,f[1])).done)return s;switch(o=0,s&&(f=[f[0]&2,s.value]),f[0]){case 0:case 1:s=f;break;case 4:return n.label++,{value:f[1],done:!1};case 5:n.label++,o=f[1],f=[0];continue;case 7:f=n.ops.pop(),n.trys.pop();continue;default:if(s=n.trys,!(s=s.length>0&&s[s.length-1])&&(f[0]===6||f[0]===2)){n=0;continue}if(f[0]===3&&(!s||f[1]>s[0]&&f[1]<s[3])){n.label=f[1];break}if(f[0]===6&&n.label<s[1]){n.label=s[1],s=f;break}if(s&&n.label<s[2]){n.label=s[2],n.ops.push(f);break}s[2]&&n.ops.pop(),n.trys.pop();continue}f=t.call(e,n)}catch(a){f=[6,a],o=0}finally{r=s=0}if(f[0]&5)throw f[1];return{value:f[0]?f[1]:void 0,done:!0}}}var pe=Object.create?function(e,t,n,r){r===void 0&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]};function wt(e,t){for(var n in e)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&pe(t,e,n)}function le(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Ve(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),o,s=[],i;try{for(;(t===void 0||t-- >0)&&!(o=r.next()).done;)s.push(o.value)}catch(d){i={error:d}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(i)throw i.error}}return s}function mt(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(Ve(arguments[t]));return e}function bt(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;for(var r=Array(e),o=0,t=0;t<n;t++)for(var s=arguments[t],i=0,d=s.length;i<d;i++,o++)r[o]=s[i];return r}function Me(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,s;r<o;r++)(s||!(r in t))&&(s||(s=Array.prototype.slice.call(t,0,r)),s[r]=t[r]);return e.concat(s||Array.prototype.slice.call(t))}function te(e){return this instanceof te?(this.v=e,this):new te(e)}function Ot(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=n.apply(e,t||[]),o,s=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),d("next"),d("throw"),d("return",i),o[Symbol.asyncIterator]=function(){return this},o;function i(c){return function(y){return Promise.resolve(y).then(c,u)}}function d(c,y){r[c]&&(o[c]=function(h){return new Promise(function(T,p){s.push([c,h,T,p])>1||_(c,h)})},y&&(o[c]=y(o[c])))}function _(c,y){try{f(r[c](y))}catch(h){l(s[0][3],h)}}function f(c){c.value instanceof te?Promise.resolve(c.value.v).then(a,u):l(s[0][2],c)}function a(c){_("next",c)}function u(c){_("throw",c)}function l(c,y){c(y),s.shift(),s.length&&_(s[0][0],s[0][1])}}function Rt(e){var t,n;return t={},r("next"),r("throw",function(o){throw o}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(o,s){t[o]=e[o]?function(i){return(n=!n)?{value:te(e[o](i)),done:!1}:s?s(i):i}:s}}function Ct(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof le=="function"?le(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(s){n[s]=e[s]&&function(i){return new Promise(function(d,_){i=e[s](i),o(d,_,i.done,i.value)})}}function o(s,i,d,_){Promise.resolve(_).then(function(f){s({value:f,done:d})},i)}}function Tt(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var Un=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function Dt(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&pe(t,e,n);return Un(t,e),t}function At(e){return e&&e.__esModule?e:{default:e}}function xt(e,t,n,r){if(n==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?r:n==="a"?r.call(e):r?r.value:t.get(e)}function jt(e,t,n,r,o){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?o.call(e,n):o?o.value=n:t.set(e,n),n}function Pt(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function Lt(e,t,n){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var r,o;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],n&&(o=r)}if(typeof r!="function")throw new TypeError("Object not disposable.");o&&(r=function(){try{o.call(this)}catch(s){return Promise.reject(s)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var Wn=typeof SuppressedError=="function"?SuppressedError:function(e,t,n){var r=new Error(n);return r.name="SuppressedError",r.error=e,r.suppressed=t,r};function It(e){function t(s){e.error=e.hasError?new Wn(s,e.error,"An error was suppressed during disposal."):s,e.hasError=!0}var n,r=0;function o(){for(;n=e.stack.pop();)try{if(!n.async&&r===1)return r=0,e.stack.push(n),Promise.resolve().then(o);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return r|=2,Promise.resolve(s).then(o,function(i){return t(i),o()})}else r|=1}catch(i){t(i)}if(r===1)return e.hasError?Promise.reject(e.error):Promise.resolve();if(e.hasError)throw e.error}return o()}function Vt(e,t){return typeof e=="string"&&/^\.\.?\//.test(e)?e.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(n,r,o,s,i){return r?t?".jsx":".js":o&&(!s||!i)?n:o+s+"."+i.toLowerCase()+"js"}):e}const qn={__extends:lt,__assign:exports.__assign,__rest:Ie,__decorate:dt,__param:pt,__esDecorate:_t,__runInitializers:ht,__propKey:yt,__setFunctionName:gt,__metadata:Et,__awaiter:vt,__generator:St,__createBinding:pe,__exportStar:wt,__values:le,__read:Ve,__spread:mt,__spreadArrays:bt,__spreadArray:Me,__await:te,__asyncGenerator:Ot,__asyncDelegator:Rt,__asyncValues:Ct,__makeTemplateObject:Tt,__importStar:Dt,__importDefault:At,__classPrivateFieldGet:xt,__classPrivateFieldSet:jt,__classPrivateFieldIn:Pt,__addDisposableResource:Lt,__disposeResources:It,__rewriteRelativeImportExtension:Vt},Bn=Object.freeze(Object.defineProperty({__proto__:null,__addDisposableResource:Lt,get __assign(){return exports.__assign},__asyncDelegator:Rt,__asyncGenerator:Ot,__asyncValues:Ct,__await:te,__awaiter:vt,__classPrivateFieldGet:xt,__classPrivateFieldIn:Pt,__classPrivateFieldSet:jt,__createBinding:pe,__decorate:dt,__disposeResources:It,__esDecorate:_t,__exportStar:wt,__extends:lt,__generator:St,__importDefault:At,__importStar:Dt,__makeTemplateObject:Tt,__metadata:Et,__param:pt,__propKey:yt,__read:Ve,__rest:Ie,__rewriteRelativeImportExtension:Vt,__runInitializers:ht,__setFunctionName:gt,__spread:mt,__spreadArray:Me,__spreadArrays:bt,__values:le,default:qn},Symbol.toStringTag,{value:"Module"})),Gn=nn(Bn);var fe={},et;function Hn(){if(et)return fe;et=1,Object.defineProperty(fe,"__esModule",{value:!0});var e=E;function t(){var n=e.useRef(!1),r=e.useCallback(function(){return n.current},[]);return e.useEffect(function(){return n.current=!0,function(){n.current=!1}},[]),r}return fe.default=t,fe}Object.defineProperty(ft,"__esModule",{value:!0});var je=Gn,be=E,$n=je.__importDefault(Hn());function Kn(e,t,n){t===void 0&&(t=[]),n===void 0&&(n={loading:!1});var r=be.useRef(0),o=$n.default(),s=be.useState(n),i=s[0],d=s[1],_=be.useCallback(function(){for(var f=[],a=0;a<arguments.length;a++)f[a]=arguments[a];var u=++r.current;return i.loading||d(function(l){return je.__assign(je.__assign({},l),{loading:!0})}),e.apply(void 0,f).then(function(l){return o()&&u===r.current&&d({value:l,loading:!1}),l},function(l){return o()&&u===r.current&&d({error:l,loading:!1}),l})},t);return[i,_]}var kn=ft.default=Kn;const G=new Map;function zn(){const[e,t]=E.useState([]),{widgetCtx:{api:n}}=K();function r(a){const u=a.map(l=>({file:l,id:$t.v4(),status:"pending",progress:0}));t(l=>[...l,...u]),u.forEach(i)}function o(a,u){t(l=>l.map(c=>c.id===a?{...c,...u}:c))}function s(a){t(u=>u.filter(l=>l.id!==a))}const i=async a=>{const u=new AbortController;G.set(a.id,u);try{t(c=>c.map(y=>y.id===a.id?{...y,status:"uploading",progress:0}:y));const l=await n.uploadFile(a,{signal:u.signal,onUploadProgress:c=>{if(!c.total)return;const y=Math.round(c.loaded*100/c.total);o(a.id,{progress:y})}});o(a.id,{status:"success",fileUrl:l.fileUrl,progress:100})}catch(l){u.signal.aborted||o(a.id,{status:"error",error:l instanceof Error?l.message:"Upload failed",progress:0})}finally{G.delete(a.id)}},d=a=>{const u=G.get(a);u&&(u.abort(),G.delete(a)),s(a)},_=E.useMemo(()=>e.filter(a=>a.status==="success"&&a.fileUrl),[e]);function f(){G.forEach(a=>a.abort()),G.clear(),t([])}return E.useEffect(()=>()=>{G.forEach(a=>a.abort()),G.clear()},[]),{allFiles:e,appendFiles:r,handleCancelUpload:d,successFiles:_,emptyTheFiles:f,getFileById:a=>e.find(u=>u.id===a),getUploadProgress:a=>{var u;return((u=e.find(l=>l.id===a))==null?void 0:u.progress)??0},getUploadStatus:a=>{var u;return(u=e.find(l=>l.id===a))==null?void 0:u.status},hasErrors:e.some(a=>a.status==="error"),isUploading:e.some(a=>a.status==="uploading")}}exports.WidgetProvider=Jt;exports.__rest=Ie;exports.__spreadArray=Me;exports._default=kn;exports.commonjsGlobal=en;exports.getDefaultExportFromCjs=tn;exports.useConfig=Xt;exports.useContact=Qt;exports.useIsAwaitingBotReply=Zt;exports.useMessages=tt;exports.usePreludeData=Fn;exports.usePrimitiveState=ee;exports.useSessions=nt;exports.useUploadFiles=zn;exports.useWidget=K;exports.useWidgetRouter=Nn;
18
- //# sourceMappingURL=useUploadFiles-Cr6lNjTS.cjs.map
18
+ //# sourceMappingURL=useUploadFiles-C0y6HEB6.cjs.map