@botonic/webchat-core 2.23.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +247 -0
  2. package/PR-LOCALE-SUPPORT.md +156 -0
  3. package/README.md +11 -0
  4. package/package.json +29 -0
  5. package/src/index.d.ts +11 -0
  6. package/src/index.js +15 -0
  7. package/src/index.js.map +1 -0
  8. package/src/lib/controllers/index.d.ts +2 -0
  9. package/src/lib/controllers/index.js +3 -0
  10. package/src/lib/controllers/index.js.map +1 -0
  11. package/src/lib/controllers/public.d.ts +383 -0
  12. package/src/lib/controllers/public.js +194 -0
  13. package/src/lib/controllers/public.js.map +1 -0
  14. package/src/lib/controllers/webchat.d.ts +414 -0
  15. package/src/lib/controllers/webchat.js +255 -0
  16. package/src/lib/controllers/webchat.js.map +1 -0
  17. package/src/lib/domain/index.d.ts +50 -0
  18. package/src/lib/domain/index.js +11 -0
  19. package/src/lib/domain/index.js.map +1 -0
  20. package/src/lib/infra/clients/hubtype-api.d.ts +53 -0
  21. package/src/lib/infra/clients/hubtype-api.js +189 -0
  22. package/src/lib/infra/clients/hubtype-api.js.map +1 -0
  23. package/src/lib/infra/clients/index.d.ts +3 -0
  24. package/src/lib/infra/clients/index.js +4 -0
  25. package/src/lib/infra/clients/index.js.map +1 -0
  26. package/src/lib/infra/clients/realtime.d.ts +92 -0
  27. package/src/lib/infra/clients/realtime.js +277 -0
  28. package/src/lib/infra/clients/realtime.js.map +1 -0
  29. package/src/lib/infra/clients/types.d.ts +21 -0
  30. package/src/lib/infra/clients/types.js +2 -0
  31. package/src/lib/infra/clients/types.js.map +1 -0
  32. package/src/lib/infra/repositories/index.d.ts +1 -0
  33. package/src/lib/infra/repositories/index.js +2 -0
  34. package/src/lib/infra/repositories/index.js.map +1 -0
  35. package/src/lib/infra/repositories/storage/base-storage.d.ts +23 -0
  36. package/src/lib/infra/repositories/storage/base-storage.js +102 -0
  37. package/src/lib/infra/repositories/storage/base-storage.js.map +1 -0
  38. package/src/lib/infra/repositories/storage/browser-storage.d.ts +9 -0
  39. package/src/lib/infra/repositories/storage/browser-storage.js +46 -0
  40. package/src/lib/infra/repositories/storage/browser-storage.js.map +1 -0
  41. package/src/lib/infra/repositories/storage/factory.d.ts +2 -0
  42. package/src/lib/infra/repositories/storage/factory.js +20 -0
  43. package/src/lib/infra/repositories/storage/factory.js.map +1 -0
  44. package/src/lib/infra/repositories/storage/in-memory.d.ts +9 -0
  45. package/src/lib/infra/repositories/storage/in-memory.js +21 -0
  46. package/src/lib/infra/repositories/storage/in-memory.js.map +1 -0
  47. package/src/lib/infra/repositories/storage/index.d.ts +7 -0
  48. package/src/lib/infra/repositories/storage/index.js +7 -0
  49. package/src/lib/infra/repositories/storage/index.js.map +1 -0
  50. package/src/lib/infra/repositories/storage/local-storage.d.ts +4 -0
  51. package/src/lib/infra/repositories/storage/local-storage.js +7 -0
  52. package/src/lib/infra/repositories/storage/local-storage.js.map +1 -0
  53. package/src/lib/infra/repositories/storage/session-storage.d.ts +4 -0
  54. package/src/lib/infra/repositories/storage/session-storage.js +7 -0
  55. package/src/lib/infra/repositories/storage/session-storage.js.map +1 -0
  56. package/src/lib/infra/repositories/storage/types.d.ts +30 -0
  57. package/src/lib/infra/repositories/storage/types.js +2 -0
  58. package/src/lib/infra/repositories/storage/types.js.map +1 -0
  59. package/src/lib/machines/message.d.ts +200 -0
  60. package/src/lib/machines/message.js +210 -0
  61. package/src/lib/machines/message.js.map +1 -0
  62. package/src/lib/machines/overlay.d.ts +299 -0
  63. package/src/lib/machines/overlay.js +217 -0
  64. package/src/lib/machines/overlay.js.map +1 -0
  65. package/src/lib/machines/webchat.d.ts +641 -0
  66. package/src/lib/machines/webchat.js +768 -0
  67. package/src/lib/machines/webchat.js.map +1 -0
  68. package/src/lib/services/webchat-service.d.ts +125 -0
  69. package/src/lib/services/webchat-service.js +339 -0
  70. package/src/lib/services/webchat-service.js.map +1 -0
  71. package/src/lib/utils/locale-detection.d.ts +2 -0
  72. package/src/lib/utils/locale-detection.js +20 -0
  73. package/src/lib/utils/locale-detection.js.map +1 -0
  74. package/src/lib/utils/timezone-to-country.d.ts +1 -0
  75. package/src/lib/utils/timezone-to-country.js +105 -0
  76. package/src/lib/utils/timezone-to-country.js.map +1 -0
  77. package/src/lib/webview/constants.d.ts +10 -0
  78. package/src/lib/webview/constants.js +10 -0
  79. package/src/lib/webview/constants.js.map +1 -0
  80. package/src/lib/webview/index.d.ts +3 -0
  81. package/src/lib/webview/index.js +4 -0
  82. package/src/lib/webview/index.js.map +1 -0
  83. package/src/lib/webview/types.d.ts +35 -0
  84. package/src/lib/webview/types.js +16 -0
  85. package/src/lib/webview/types.js.map +1 -0
  86. package/src/lib/webview/utils.d.ts +9 -0
  87. package/src/lib/webview/utils.js +33 -0
  88. package/src/lib/webview/utils.js.map +1 -0
@@ -0,0 +1,7 @@
1
+ import { BrowserStorageRepository } from './browser-storage';
2
+ export class SessionStorageRepository extends BrowserStorageRepository {
3
+ get storage() {
4
+ return sessionStorage;
5
+ }
6
+ }
7
+ //# sourceMappingURL=session-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../../../../../../../../libs/botonic/webchat-core/src/lib/infra/repositories/storage/session-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,MAAM,OAAO,wBAAyB,SAAQ,wBAAwB;IACpE,IAAc,OAAO;QACnB,OAAO,cAAc,CAAA;IACvB,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ import { type HubtypeUser, type WebchatMessage } from '@botonic/shared';
2
+ import { WebchatMessageStatus } from '../../../machines/message';
3
+ export interface StoredMessage extends WebchatMessage {
4
+ status: WebchatMessageStatus;
5
+ }
6
+ export interface WebchatHubtypeUser extends HubtypeUser {
7
+ lastActiveAt?: string;
8
+ botId?: string;
9
+ chatId?: string;
10
+ }
11
+ export interface ConversationData {
12
+ messages: StoredMessage[];
13
+ user: WebchatHubtypeUser | null;
14
+ }
15
+ export interface StorageRepository {
16
+ saveMessage(appId: string, userId: string, message: StoredMessage): Promise<void>;
17
+ saveAllMessages(appId: string, userId: string, messages: StoredMessage[]): Promise<void>;
18
+ findMessagesByConversation(appId: string, userId: string): Promise<StoredMessage[]>;
19
+ saveUser(appId: string, user: HubtypeUser): Promise<void>;
20
+ findUserById(appId: string, userId: string): Promise<HubtypeUser | null>;
21
+ saveLastUserSession(appId: string, user: HubtypeUser): Promise<void>;
22
+ findLastUserSession(appId: string): Promise<HubtypeUser | null>;
23
+ clearConversation(appId: string, userId: string): Promise<void>;
24
+ clearAppData(appId: string): Promise<void>;
25
+ }
26
+ export type StorageType = 'localStorage' | 'sessionStorage' | 'inMemory';
27
+ export interface StorageConfig {
28
+ type?: StorageType;
29
+ keyPrefix?: string;
30
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../../../libs/botonic/webchat-core/src/lib/infra/repositories/storage/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,200 @@
1
+ import { BotonicButtonContent, HubtypeUser, WebchatMessage } from '@botonic/shared';
2
+ import { ActorRefFrom, PromiseActorLogic } from 'xstate';
3
+ export declare enum WebchatMessageStatus {
4
+ UNSENT = "unsent",
5
+ SENT = "sent",
6
+ FAILED = "failed"
7
+ }
8
+ export interface WebchatMessageTypes {
9
+ context: {
10
+ message: WebchatMessage;
11
+ user: HubtypeUser;
12
+ status: WebchatMessageStatus;
13
+ postMessageActor?: any;
14
+ };
15
+ input: {
16
+ message: WebchatMessage;
17
+ user: HubtypeUser;
18
+ status: WebchatMessageStatus;
19
+ postMessageActor?: any;
20
+ };
21
+ events: {
22
+ type: 'RETRY';
23
+ } | {
24
+ type: 'BUTTON_CLICKED';
25
+ button: BotonicButtonContent;
26
+ };
27
+ emitted: {
28
+ type: 'PERSISTENCE.SAVE_MESSAGE';
29
+ } | {
30
+ type: 'WEBVIEW.OPEN';
31
+ url: string;
32
+ title: string;
33
+ };
34
+ }
35
+ export type PostMessageActor = PromiseActorLogic<{
36
+ message: Promise<{
37
+ detail: string;
38
+ }>;
39
+ }, {
40
+ message: WebchatMessage;
41
+ user: HubtypeUser;
42
+ }>;
43
+ export declare const WebchatMessageMachine: import("xstate").StateMachine<{
44
+ message: WebchatMessage;
45
+ user: HubtypeUser;
46
+ status: WebchatMessageStatus;
47
+ postMessageActor?: any;
48
+ }, {
49
+ type: "RETRY";
50
+ } | {
51
+ type: "BUTTON_CLICKED";
52
+ button: BotonicButtonContent;
53
+ }, {
54
+ [x: string]: import("xstate").ActorRefFromLogic<PostMessageActor> | undefined;
55
+ }, {
56
+ src: "postMessage";
57
+ logic: PostMessageActor;
58
+ id: string | undefined;
59
+ }, {
60
+ type: "emitSaveMessage";
61
+ params: import("xstate").NonReducibleUnknown;
62
+ } | {
63
+ type: "emitWebviewOpen";
64
+ params: import("xstate").NonReducibleUnknown;
65
+ } | {
66
+ type: "performNavigation";
67
+ params: unknown;
68
+ } | {
69
+ type: "updateStatusToSent";
70
+ params: import("xstate").NonReducibleUnknown;
71
+ } | {
72
+ type: "updateStatusToFailed";
73
+ params: import("xstate").NonReducibleUnknown;
74
+ } | {
75
+ type: "logPostbackSuccess";
76
+ params: unknown;
77
+ } | {
78
+ type: "logPostbackError";
79
+ params: unknown;
80
+ } | {
81
+ type: "sendPostbackMessage";
82
+ params: import("xstate").NonReducibleUnknown;
83
+ }, {
84
+ type: "isUnsent";
85
+ params: unknown;
86
+ } | {
87
+ type: "isSent";
88
+ params: unknown;
89
+ } | {
90
+ type: "isPostbackButton";
91
+ params: unknown;
92
+ } | {
93
+ type: "isWebviewButton";
94
+ params: unknown;
95
+ } | {
96
+ type: "isNavigationButton";
97
+ params: unknown;
98
+ }, never, "checkStatus" | "sending" | "idle" | "errorSendingMessage" | "performingPostback", string, {
99
+ message: WebchatMessage;
100
+ user: HubtypeUser;
101
+ status: WebchatMessageStatus;
102
+ postMessageActor?: any;
103
+ }, import("xstate").NonReducibleUnknown, {
104
+ type: "PERSISTENCE.SAVE_MESSAGE";
105
+ } | {
106
+ type: "WEBVIEW.OPEN";
107
+ url: string;
108
+ title: string;
109
+ }, import("xstate").MetaObject, {
110
+ states: {
111
+ readonly checkStatus: {};
112
+ readonly sending: {};
113
+ readonly idle: {};
114
+ readonly performingPostback: {};
115
+ readonly errorSendingMessage: {};
116
+ };
117
+ }>;
118
+ /**
119
+ * Factory function to create message machine logic with injected dependencies
120
+ * Returns machine logic suitable for spawning within another machine
121
+ */
122
+ export declare function createWebchatMessageMachine(postMessageActor: PostMessageActor): import("xstate").StateMachine<{
123
+ message: WebchatMessage;
124
+ user: HubtypeUser;
125
+ status: WebchatMessageStatus;
126
+ postMessageActor?: any;
127
+ }, {
128
+ type: "RETRY";
129
+ } | {
130
+ type: "BUTTON_CLICKED";
131
+ button: BotonicButtonContent;
132
+ }, {
133
+ [x: string]: import("xstate").ActorRefFromLogic<PostMessageActor> | undefined;
134
+ }, {
135
+ src: "postMessage";
136
+ logic: PostMessageActor;
137
+ id: string | undefined;
138
+ }, {
139
+ type: "emitSaveMessage";
140
+ params: import("xstate").NonReducibleUnknown;
141
+ } | {
142
+ type: "emitWebviewOpen";
143
+ params: import("xstate").NonReducibleUnknown;
144
+ } | {
145
+ type: "performNavigation";
146
+ params: unknown;
147
+ } | {
148
+ type: "updateStatusToSent";
149
+ params: import("xstate").NonReducibleUnknown;
150
+ } | {
151
+ type: "updateStatusToFailed";
152
+ params: import("xstate").NonReducibleUnknown;
153
+ } | {
154
+ type: "logPostbackSuccess";
155
+ params: unknown;
156
+ } | {
157
+ type: "logPostbackError";
158
+ params: unknown;
159
+ } | {
160
+ type: "sendPostbackMessage";
161
+ params: import("xstate").NonReducibleUnknown;
162
+ }, {
163
+ type: "isUnsent";
164
+ params: unknown;
165
+ } | {
166
+ type: "isSent";
167
+ params: unknown;
168
+ } | {
169
+ type: "isPostbackButton";
170
+ params: unknown;
171
+ } | {
172
+ type: "isWebviewButton";
173
+ params: unknown;
174
+ } | {
175
+ type: "isNavigationButton";
176
+ params: unknown;
177
+ }, never, "checkStatus" | "sending" | "idle" | "errorSendingMessage" | "performingPostback", string, {
178
+ message: WebchatMessage;
179
+ user: HubtypeUser;
180
+ status: WebchatMessageStatus;
181
+ postMessageActor?: any;
182
+ }, import("xstate").NonReducibleUnknown, {
183
+ type: "PERSISTENCE.SAVE_MESSAGE";
184
+ } | {
185
+ type: "WEBVIEW.OPEN";
186
+ url: string;
187
+ title: string;
188
+ }, import("xstate").MetaObject, {
189
+ states: {
190
+ readonly checkStatus: {};
191
+ readonly sending: {};
192
+ readonly idle: {};
193
+ readonly performingPostback: {};
194
+ readonly errorSendingMessage: {};
195
+ };
196
+ }>;
197
+ /**
198
+ * Standalone factory to create a started actor (for use outside of a parent machine)
199
+ */
200
+ export declare function createWebchatMessageActor(message: WebchatMessage, user: HubtypeUser, postMessageActor: PostMessageActor, overrideStatus?: WebchatMessageStatus): ActorRefFrom<typeof WebchatMessageMachine>;
@@ -0,0 +1,210 @@
1
+ import { __awaiter } from "tslib";
2
+ import { BotonicButtonType, MessageSentBy, WebchatMessageFactory, } from '@botonic/shared';
3
+ import { assertEvent, assign, createActor, fromPromise, sendParent, setup, } from 'xstate';
4
+ export var WebchatMessageStatus;
5
+ (function (WebchatMessageStatus) {
6
+ WebchatMessageStatus["UNSENT"] = "unsent";
7
+ WebchatMessageStatus["SENT"] = "sent";
8
+ WebchatMessageStatus["FAILED"] = "failed";
9
+ })(WebchatMessageStatus || (WebchatMessageStatus = {}));
10
+ export const WebchatMessageMachine = setup({
11
+ types: {},
12
+ guards: {
13
+ isUnsent: ({ context }) => context.status === WebchatMessageStatus.UNSENT,
14
+ isSent: ({ context }) => context.status === WebchatMessageStatus.SENT,
15
+ // action button guards
16
+ isPostbackButton: ({ event }) => event.type === 'BUTTON_CLICKED' &&
17
+ event.button.type === BotonicButtonType.Postback,
18
+ isWebviewButton: ({ event }) => {
19
+ var _a;
20
+ const result = event.type === 'BUTTON_CLICKED' &&
21
+ event.button.type === BotonicButtonType.WebUrl &&
22
+ !!((_a = event.button.url) === null || _a === void 0 ? void 0 : _a.includes('/webviews'));
23
+ return result;
24
+ },
25
+ isNavigationButton: ({ event }) => {
26
+ var _a;
27
+ return event.type === 'BUTTON_CLICKED' &&
28
+ event.button.type === BotonicButtonType.WebUrl &&
29
+ !((_a = event.button.url) === null || _a === void 0 ? void 0 : _a.includes('/webviews'));
30
+ },
31
+ },
32
+ actions: {
33
+ emitSaveMessage: sendParent({ type: 'PERSISTENCE.SAVE_MESSAGE' }),
34
+ emitWebviewOpen: sendParent(({ event }) => {
35
+ assertEvent(event, 'BUTTON_CLICKED');
36
+ const emittedEvent = {
37
+ type: 'WEBVIEW.OPEN',
38
+ url: event.button.url || '',
39
+ title: event.button.title || '',
40
+ };
41
+ return emittedEvent;
42
+ }),
43
+ performNavigation: ({ event }) => {
44
+ assertEvent(event, 'BUTTON_CLICKED');
45
+ window.open(event.button.url, '_blank');
46
+ },
47
+ updateStatusToSent: assign(() => {
48
+ return {
49
+ status: WebchatMessageStatus.SENT,
50
+ };
51
+ }),
52
+ updateStatusToFailed: assign(() => {
53
+ return {
54
+ status: WebchatMessageStatus.FAILED,
55
+ };
56
+ }),
57
+ // updateMessageInfo: assign({
58
+ // message: ({ context, event }) => {
59
+ // assertEvent(event, 'UPDATE_MESSAGE_INFO')
60
+ // return {
61
+ // ...context.message,
62
+ // data: event.message.data[context.message.type],
63
+ // } as WebchatMessage
64
+ // },
65
+ // }),
66
+ logPostbackSuccess: ({ context }) => {
67
+ // Note: After domain refactoring, messages use provider_id as unique identifier
68
+ console.log(`✅ Postback handled successfully for message ${context.message.provider_id}`);
69
+ },
70
+ logPostbackError: ({ context, event }) => {
71
+ // Note: After domain refactoring, messages use provider_id as unique identifier
72
+ console.error(`❌ Postback failed for message ${context.message.provider_id}:`, event.error);
73
+ },
74
+ sendPostbackMessage: sendParent(({ event }) => {
75
+ assertEvent(event, 'BUTTON_CLICKED');
76
+ return {
77
+ type: 'SEND_MESSAGE',
78
+ message: WebchatMessageFactory.createText({
79
+ text: event.button.title,
80
+ payload: event.button.payload,
81
+ metadata: {
82
+ sent_by: MessageSentBy.User,
83
+ },
84
+ }),
85
+ };
86
+ }),
87
+ },
88
+ actors: {
89
+ // Use the injected postMessage actor or default implementation
90
+ postMessage: fromPromise((_a) => __awaiter(void 0, [_a], void 0, function* ({ input }) {
91
+ // This will be overridden by the injected actor
92
+ console.info('WebchatMessage', input.message);
93
+ console.info('User', input.user);
94
+ throw new Error('PostMessage actor not properly injected');
95
+ })),
96
+ },
97
+ }).createMachine({
98
+ /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAYgFUAFAEQEEAVAUQH0BZBgZXZoHFmBJAHIAxAPIBtAAwBdRKAAOAe1i4ALrgX5ZIAB6IArAA4JAOgkG9ATgsB2ACwGAbACZLtgDQgAnogCMTgL7+HmhYeIRExjhgmADW7CroKgCusCSSMkggispqGlq6CD4WTqYAzC4+9noStmbuXogOFgbG1g6VBj4+7RaltqWBwRg4BMSR2NFxCcmpYj4Z8kqq6pqZBUUlEuV6HdW1BvXehUbGtrU2BgalW1cOtoMgISPhxrBg+BAEUCQQGmDGBAAbgoYv8nmExm8Pl8EECFJhEit0uktNllnk1vorsZLoZSgYbM4HNYnB4jno9A5Tk4nBYHFs+np+g4HuDRhEoZ98N8wAAnXkKXnGOQAG0SADNBahjGyXpyYXCEbl8MjpKilsr8ljSjjzFcCW0nMTSQ0EG0Wk5rBIfNZSqU-BJiQMgo9hhCIrgICKwCQAEJkOh0EQCJgAYQAMnxQwBpBhUFGZNGazEIPG6vEGokksmIWktcrWiQSJy2Em02x6Vlu9kAr0+-2B4NhyMxuNzBZZDUrLUIOklAzWAlXEvWSldHMIUvWYwUm0GWk+CkWHZV0I1z3ev0BoMhiNR2PxpwdpPdlN06fWHwHa5Fhz43oT-E62mWotXivWS-3F2ysbYdAfCKXwUEoKgAEZYDEPx-AC+DAqCMrVi8-6AcBoEQbEsJwfCiIaKqx5dhioAFGmuL6oSRrZqafTTnoVpMnoTg3i4dirs8f4AV6aGwOBkEkHyApCqKEpSoha7IZxQHciBPEYTEWHAkqSLSAmiw5KexHaum5GGsaE79C0Vz2DelxbNYdJse6xgCYK7DvFyUAsHAsDoDAJAAEoMHQ7kAJqqZ26lEToiCjjqXR9D4jqjou-QTsStimF0EgWBIhiRbYFjfi6+AKBAcBaL+RDqoFqyaQgAC0PgTr0xguBYXSlg45iZd0lk1lEsTxIkKTFeipXBZO1hxQSxjNExVptLYlrzm1cr2V8vXJmVpTtMYDhNfYFbJUYTSHI0tqmM49ijlNdKMbNYwbmAi0aQNXSLqcfT2p+pTNLFpp0VSnRmA4lK2OtPjOkM4kcah0noZBN1BQUfQtHRbRNXc9VGOYj5TWtJZMtsWOOJWP5IWMNm8nZ0Lck5sAuTAUP9esXR6I9-Q2rab2lBORgWKN1pOI6hhGq9FiBIEQA */
99
+ initial: 'checkStatus',
100
+ context: ({ input }) => ({
101
+ message: (input === null || input === void 0 ? void 0 : input.message) || {},
102
+ user: (input === null || input === void 0 ? void 0 : input.user) || {},
103
+ status: (input === null || input === void 0 ? void 0 : input.status) || WebchatMessageStatus.UNSENT,
104
+ }),
105
+ // on: {
106
+ // UPDATE_MESSAGE_INFO: {
107
+ // actions: 'updateMessageInfo',
108
+ // },
109
+ // },
110
+ states: {
111
+ checkStatus: {
112
+ always: [
113
+ {
114
+ target: 'sending',
115
+ guard: 'isUnsent',
116
+ },
117
+ {
118
+ target: 'idle',
119
+ },
120
+ ],
121
+ },
122
+ sending: {
123
+ invoke: {
124
+ src: 'postMessage',
125
+ input: ({ context }) => ({
126
+ message: context.message,
127
+ user: context.user,
128
+ }),
129
+ onDone: {
130
+ target: 'idle',
131
+ actions: ['updateStatusToSent', 'emitSaveMessage'],
132
+ },
133
+ onError: {
134
+ target: 'errorSendingMessage',
135
+ actions: [
136
+ 'updateStatusToFailed',
137
+ 'emitSaveMessage',
138
+ ({ event, context }) => {
139
+ // Note: After domain refactoring, messages use provider_id as unique identifier
140
+ console.error(`WebchatMessage ${context.message.provider_id} failed to send:`, event.error);
141
+ },
142
+ ],
143
+ },
144
+ },
145
+ },
146
+ idle: {
147
+ on: {
148
+ BUTTON_CLICKED: [
149
+ {
150
+ guard: 'isPostbackButton',
151
+ target: 'performingPostback',
152
+ },
153
+ {
154
+ guard: 'isNavigationButton',
155
+ actions: 'performNavigation',
156
+ },
157
+ {
158
+ guard: 'isWebviewButton',
159
+ actions: 'emitWebviewOpen',
160
+ },
161
+ ],
162
+ },
163
+ },
164
+ performingPostback: {
165
+ entry: 'sendPostbackMessage',
166
+ always: 'idle',
167
+ },
168
+ errorSendingMessage: {
169
+ on: {
170
+ RETRY: {
171
+ target: 'sending',
172
+ actions: 'emitSaveMessage',
173
+ },
174
+ },
175
+ },
176
+ },
177
+ });
178
+ /**
179
+ * Factory function to create message machine logic with injected dependencies
180
+ * Returns machine logic suitable for spawning within another machine
181
+ */
182
+ export function createWebchatMessageMachine(postMessageActor) {
183
+ return WebchatMessageMachine.provide({
184
+ actors: {
185
+ postMessage: postMessageActor,
186
+ },
187
+ });
188
+ }
189
+ /**
190
+ * Standalone factory to create a started actor (for use outside of a parent machine)
191
+ */
192
+ export function createWebchatMessageActor(message, user, postMessageActor, overrideStatus) {
193
+ const machineWithActor = createWebchatMessageMachine(postMessageActor);
194
+ // Use override status if provided, otherwise determine based on message action
195
+ // Note: After domain refactoring:
196
+ // - UserInputMessage doesn't have sent_by property (only protocol fields + provider_id)
197
+ // - RealtimeResponseMessage has sent_by property
198
+ // This function is for standalone usage; the main machine uses event.type instead
199
+ const initialStatus = overrideStatus !== null && overrideStatus !== void 0 ? overrideStatus : (message.sent_by === MessageSentBy.User
200
+ ? WebchatMessageStatus.UNSENT
201
+ : WebchatMessageStatus.SENT);
202
+ return createActor(machineWithActor, {
203
+ input: {
204
+ message,
205
+ user,
206
+ status: initialStatus,
207
+ },
208
+ });
209
+ }
210
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/webchat-core/src/lib/machines/message.ts"],"names":[],"mappings":"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"}