@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.
- package/CHANGELOG.md +247 -0
- package/PR-LOCALE-SUPPORT.md +156 -0
- package/README.md +11 -0
- package/package.json +29 -0
- package/src/index.d.ts +11 -0
- package/src/index.js +15 -0
- package/src/index.js.map +1 -0
- package/src/lib/controllers/index.d.ts +2 -0
- package/src/lib/controllers/index.js +3 -0
- package/src/lib/controllers/index.js.map +1 -0
- package/src/lib/controllers/public.d.ts +383 -0
- package/src/lib/controllers/public.js +194 -0
- package/src/lib/controllers/public.js.map +1 -0
- package/src/lib/controllers/webchat.d.ts +414 -0
- package/src/lib/controllers/webchat.js +255 -0
- package/src/lib/controllers/webchat.js.map +1 -0
- package/src/lib/domain/index.d.ts +50 -0
- package/src/lib/domain/index.js +11 -0
- package/src/lib/domain/index.js.map +1 -0
- package/src/lib/infra/clients/hubtype-api.d.ts +53 -0
- package/src/lib/infra/clients/hubtype-api.js +189 -0
- package/src/lib/infra/clients/hubtype-api.js.map +1 -0
- package/src/lib/infra/clients/index.d.ts +3 -0
- package/src/lib/infra/clients/index.js +4 -0
- package/src/lib/infra/clients/index.js.map +1 -0
- package/src/lib/infra/clients/realtime.d.ts +92 -0
- package/src/lib/infra/clients/realtime.js +277 -0
- package/src/lib/infra/clients/realtime.js.map +1 -0
- package/src/lib/infra/clients/types.d.ts +21 -0
- package/src/lib/infra/clients/types.js +2 -0
- package/src/lib/infra/clients/types.js.map +1 -0
- package/src/lib/infra/repositories/index.d.ts +1 -0
- package/src/lib/infra/repositories/index.js +2 -0
- package/src/lib/infra/repositories/index.js.map +1 -0
- package/src/lib/infra/repositories/storage/base-storage.d.ts +23 -0
- package/src/lib/infra/repositories/storage/base-storage.js +102 -0
- package/src/lib/infra/repositories/storage/base-storage.js.map +1 -0
- package/src/lib/infra/repositories/storage/browser-storage.d.ts +9 -0
- package/src/lib/infra/repositories/storage/browser-storage.js +46 -0
- package/src/lib/infra/repositories/storage/browser-storage.js.map +1 -0
- package/src/lib/infra/repositories/storage/factory.d.ts +2 -0
- package/src/lib/infra/repositories/storage/factory.js +20 -0
- package/src/lib/infra/repositories/storage/factory.js.map +1 -0
- package/src/lib/infra/repositories/storage/in-memory.d.ts +9 -0
- package/src/lib/infra/repositories/storage/in-memory.js +21 -0
- package/src/lib/infra/repositories/storage/in-memory.js.map +1 -0
- package/src/lib/infra/repositories/storage/index.d.ts +7 -0
- package/src/lib/infra/repositories/storage/index.js +7 -0
- package/src/lib/infra/repositories/storage/index.js.map +1 -0
- package/src/lib/infra/repositories/storage/local-storage.d.ts +4 -0
- package/src/lib/infra/repositories/storage/local-storage.js +7 -0
- package/src/lib/infra/repositories/storage/local-storage.js.map +1 -0
- package/src/lib/infra/repositories/storage/session-storage.d.ts +4 -0
- package/src/lib/infra/repositories/storage/session-storage.js +7 -0
- package/src/lib/infra/repositories/storage/session-storage.js.map +1 -0
- package/src/lib/infra/repositories/storage/types.d.ts +30 -0
- package/src/lib/infra/repositories/storage/types.js +2 -0
- package/src/lib/infra/repositories/storage/types.js.map +1 -0
- package/src/lib/machines/message.d.ts +200 -0
- package/src/lib/machines/message.js +210 -0
- package/src/lib/machines/message.js.map +1 -0
- package/src/lib/machines/overlay.d.ts +299 -0
- package/src/lib/machines/overlay.js +217 -0
- package/src/lib/machines/overlay.js.map +1 -0
- package/src/lib/machines/webchat.d.ts +641 -0
- package/src/lib/machines/webchat.js +768 -0
- package/src/lib/machines/webchat.js.map +1 -0
- package/src/lib/services/webchat-service.d.ts +125 -0
- package/src/lib/services/webchat-service.js +339 -0
- package/src/lib/services/webchat-service.js.map +1 -0
- package/src/lib/utils/locale-detection.d.ts +2 -0
- package/src/lib/utils/locale-detection.js +20 -0
- package/src/lib/utils/locale-detection.js.map +1 -0
- package/src/lib/utils/timezone-to-country.d.ts +1 -0
- package/src/lib/utils/timezone-to-country.js +105 -0
- package/src/lib/utils/timezone-to-country.js.map +1 -0
- package/src/lib/webview/constants.d.ts +10 -0
- package/src/lib/webview/constants.js +10 -0
- package/src/lib/webview/constants.js.map +1 -0
- package/src/lib/webview/index.d.ts +3 -0
- package/src/lib/webview/index.js +4 -0
- package/src/lib/webview/index.js.map +1 -0
- package/src/lib/webview/types.d.ts +35 -0
- package/src/lib/webview/types.js +16 -0
- package/src/lib/webview/types.js.map +1 -0
- package/src/lib/webview/utils.d.ts +9 -0
- package/src/lib/webview/utils.js +33 -0
- package/src/lib/webview/utils.js.map +1 -0
|
@@ -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 @@
|
|
|
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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"}
|