@inploi/plugin-chatbot 14.8.0 → 14.10.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/cdn/index.js +6 -6
- package/cdn/style.css +1 -1
- package/dist/accessible-labels.test.d.ts +1 -0
- package/dist/chatbot-body-3e08ab1b.js +4073 -0
- package/dist/chatbot-body-d0635102.cjs +5 -0
- package/dist/chatbot.d.ts +6 -0
- package/dist/chatbot.idb.d.ts +2 -2
- package/dist/chatbot.resume.d.ts +15 -0
- package/dist/chatbot.resume.test.d.ts +1 -0
- package/dist/chatbot.state.d.ts +24 -404
- package/dist/chatbot.storage.test.d.ts +1 -0
- package/dist/chatbot.utils.d.ts +1 -253
- package/dist/components/chat-input/chat-input.address.d.ts +1 -14
- package/dist/components/chat-input/chat-input.boolean.d.ts +1 -13
- package/dist/components/chat-input/chat-input.d.ts +1 -12
- package/dist/components/chat-input/chat-input.file.d.ts +1 -12
- package/dist/components/chat-input/chat-input.multiple-choice.d.ts +1 -14
- package/dist/components/chat-input/chat-input.number.d.ts +1 -14
- package/dist/components/chat-input/chat-input.phone-number.d.ts +1 -17
- package/dist/components/chat-input/chat-input.submit.d.ts +1 -10
- package/dist/components/chat-input/chat-input.text.d.ts +1 -14
- package/dist/components/chat-input/chat-input.text.test.d.ts +1 -0
- package/dist/components/chatbot-body.lifecycle.test.d.ts +1 -0
- package/dist/components/message.link.d.ts +1 -1
- package/dist/components/useChatService.d.ts +4 -1
- package/dist/components/useChatService.test.d.ts +1 -0
- package/dist/i18n.d.ts +114 -0
- package/dist/index-5de8da64.js +3368 -0
- package/dist/index-d28fa66d.cjs +5 -0
- package/dist/plugin-chatbot.cjs +1 -1
- package/dist/plugin-chatbot.js +1 -1
- package/dist/style/tokens.d.ts +6 -4
- package/dist/style.css +1 -1
- package/package.json +8 -8
- package/dist/chatbot-body-0c22653b.cjs +0 -5
- package/dist/chatbot-body-dd2054d0.js +0 -4543
- package/dist/index-5e99d91d.js +0 -3275
- package/dist/index-b625775f.cjs +0 -5
- package/dist/interpreter.d.ts +0 -59
package/dist/chatbot.state.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { ApplicationRecovery, ChatInput, ChatMessage, FlowStateData, FlowSubmission } from '@inploi/flows/engine';
|
|
1
2
|
import { OpenChatbotParams } from '.';
|
|
2
3
|
import { Flow } from './chatbot.api';
|
|
3
|
-
import { ChatInput } from './components/chat-input/chat-input';
|
|
4
4
|
import { ChatbotFlowProgress } from './progress';
|
|
5
5
|
|
|
6
6
|
export declare const getCacheKey: (flow: Pick<StartedFlow, "flowKeys" | "id" | "version" | "build" | "context">) => string;
|
|
@@ -14,8 +14,25 @@ export type StartedFlow = Flow & {
|
|
|
14
14
|
locationOrigin: OpenChatbotParams['locationOrigin'];
|
|
15
15
|
nodeIdToProgress: Record<string, ChatbotFlowProgress>;
|
|
16
16
|
analytics: OpenChatbotParams['analytics'];
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
/**
|
|
18
|
+
* The candidate came back to a saved, unsubmitted application and has not yet chosen to continue it or start again
|
|
19
|
+
* (PROD-7338). Memory only, never in browser storage: asked on the first open after the page loads, not on a reopen.
|
|
20
|
+
*/
|
|
21
|
+
offerResume?: boolean;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* A saved application worth asking about when the candidate comes back: the candidate answered something, it is not finished, and no
|
|
25
|
+
* submit has started. A started write may have landed or succeeded, and its own guard already says so. Caches from
|
|
26
|
+
* before the write barrier existed count a visited submit node as started, as the interpreter does.
|
|
27
|
+
*/
|
|
28
|
+
export declare const hasUnfinishedApplication: ({ data, nodes }: Pick<StartedFlow, "data" | "nodes">) => boolean;
|
|
29
|
+
/**
|
|
30
|
+
* A saved application still in the chatbot's hands: not finished, and the candidate answered something or a submit
|
|
31
|
+
* started (all questions may have been optional). Unlike the resume prompt's test, a started, pending or unknown
|
|
32
|
+
* submit counts, because only the chatbot holds its write barrier and recovery state (PROD-7342: such an application
|
|
33
|
+
* finishes in the chatbot).
|
|
34
|
+
*/
|
|
35
|
+
export declare const hasApplicationInProgress: ({ data, nodes }: Pick<StartedFlow, "data" | "nodes">) => boolean;
|
|
19
36
|
type CurrentFlow = {
|
|
20
37
|
state: 'idle';
|
|
21
38
|
flow?: never;
|
|
@@ -35,277 +52,11 @@ type CurrentFlow = {
|
|
|
35
52
|
};
|
|
36
53
|
export declare const store: {
|
|
37
54
|
current$: import('@preact/signals').Signal<CurrentFlow>;
|
|
38
|
-
viewState$: import('@preact/signals').Signal<"
|
|
39
|
-
prepareFlow: ({ flow, context, flowKeys, title, analytics, job, locationOrigin }: OpenChatbotParams) => Promise<
|
|
40
|
-
data: FlowStateData;
|
|
41
|
-
startedAt: Date;
|
|
42
|
-
nodeIdToProgress: Record<string, ChatbotFlowProgress>;
|
|
43
|
-
flowKeys: string[];
|
|
44
|
-
id: string;
|
|
45
|
-
version: number;
|
|
46
|
-
nodes: ({
|
|
47
|
-
type: "flow-section";
|
|
48
|
-
id: string;
|
|
49
|
-
data: {
|
|
50
|
-
title: string;
|
|
51
|
-
};
|
|
52
|
-
isHead?: boolean | undefined;
|
|
53
|
-
nextId?: string | undefined;
|
|
54
|
-
} | {
|
|
55
|
-
type: "pre-apply-result";
|
|
56
|
-
id: string;
|
|
57
|
-
data: {
|
|
58
|
-
key: string;
|
|
59
|
-
participationKey: string;
|
|
60
|
-
messages: {
|
|
61
|
-
hard: string;
|
|
62
|
-
advisory: string;
|
|
63
|
-
matched: string;
|
|
64
|
-
};
|
|
65
|
-
continueLabel: string;
|
|
66
|
-
alternativeLink?: {
|
|
67
|
-
href: string;
|
|
68
|
-
label: string;
|
|
69
|
-
} | undefined;
|
|
70
|
-
};
|
|
71
|
-
isHead?: boolean | undefined;
|
|
72
|
-
nextId?: string | undefined;
|
|
73
|
-
} | {
|
|
74
|
-
type: "text";
|
|
75
|
-
id: string;
|
|
76
|
-
data: {
|
|
77
|
-
text: string;
|
|
78
|
-
};
|
|
79
|
-
isHead?: boolean | undefined;
|
|
80
|
-
nextId?: string | undefined;
|
|
81
|
-
} | {
|
|
82
|
-
type: "end-flow";
|
|
83
|
-
id: string;
|
|
84
|
-
data: {
|
|
85
|
-
systemMessage: string;
|
|
86
|
-
};
|
|
87
|
-
isHead?: boolean | undefined;
|
|
88
|
-
nextId?: string | undefined;
|
|
89
|
-
} | {
|
|
90
|
-
type: "integration-application-submit";
|
|
91
|
-
id: string;
|
|
92
|
-
data: {
|
|
93
|
-
integrationId: string;
|
|
94
|
-
skipConfirmation: boolean;
|
|
95
|
-
submitLabel: string;
|
|
96
|
-
submitKeys: "all" | string[];
|
|
97
|
-
key?: string | undefined;
|
|
98
|
-
successMessage?: string | undefined;
|
|
99
|
-
};
|
|
100
|
-
isHead?: boolean | undefined;
|
|
101
|
-
nextId?: string | undefined;
|
|
102
|
-
} | {
|
|
103
|
-
type: "integration-workflow-get";
|
|
104
|
-
id: string;
|
|
105
|
-
data: {
|
|
106
|
-
integrationId: string;
|
|
107
|
-
};
|
|
108
|
-
isHead?: boolean | undefined;
|
|
109
|
-
nextId?: string | undefined;
|
|
110
|
-
} | {
|
|
111
|
-
type: "link";
|
|
112
|
-
id: string;
|
|
113
|
-
data: {
|
|
114
|
-
href: string;
|
|
115
|
-
cta: string;
|
|
116
|
-
};
|
|
117
|
-
isHead?: boolean | undefined;
|
|
118
|
-
nextId?: string | undefined;
|
|
119
|
-
} | {
|
|
120
|
-
type: "image";
|
|
121
|
-
id: string;
|
|
122
|
-
data: {
|
|
123
|
-
url: string;
|
|
124
|
-
width: number;
|
|
125
|
-
height: number;
|
|
126
|
-
};
|
|
127
|
-
isHead?: boolean | undefined;
|
|
128
|
-
nextId?: string | undefined;
|
|
129
|
-
} | {
|
|
130
|
-
type: "question-boolean";
|
|
131
|
-
id: string;
|
|
132
|
-
data: {
|
|
133
|
-
key: string;
|
|
134
|
-
question: string;
|
|
135
|
-
trueLabel: string;
|
|
136
|
-
falseLabel: string;
|
|
137
|
-
optional: boolean;
|
|
138
|
-
preApply?: {
|
|
139
|
-
severity: "hard" | "advisory";
|
|
140
|
-
mismatchMessage: string;
|
|
141
|
-
expectedValue: boolean;
|
|
142
|
-
} | undefined;
|
|
143
|
-
};
|
|
144
|
-
isHead?: boolean | undefined;
|
|
145
|
-
nextId?: string | undefined;
|
|
146
|
-
} | {
|
|
147
|
-
type: "question-text";
|
|
148
|
-
id: string;
|
|
149
|
-
data: {
|
|
150
|
-
key: string;
|
|
151
|
-
question: string;
|
|
152
|
-
optional: boolean;
|
|
153
|
-
format: "date" | "text" | "url" | "email" | "phone";
|
|
154
|
-
placeholder?: string | undefined;
|
|
155
|
-
maxChars?: number | undefined;
|
|
156
|
-
minChars?: number | undefined;
|
|
157
|
-
};
|
|
158
|
-
isHead?: boolean | undefined;
|
|
159
|
-
nextId?: string | undefined;
|
|
160
|
-
} | {
|
|
161
|
-
type: "question-number";
|
|
162
|
-
id: string;
|
|
163
|
-
data: {
|
|
164
|
-
key: string;
|
|
165
|
-
question: string;
|
|
166
|
-
optional: boolean;
|
|
167
|
-
placeholder?: string | undefined;
|
|
168
|
-
decimalCases?: number | undefined;
|
|
169
|
-
min?: number | undefined;
|
|
170
|
-
max?: number | undefined;
|
|
171
|
-
};
|
|
172
|
-
isHead?: boolean | undefined;
|
|
173
|
-
nextId?: string | undefined;
|
|
174
|
-
} | {
|
|
175
|
-
type: "question-phone";
|
|
176
|
-
id: string;
|
|
177
|
-
data: {
|
|
178
|
-
key: string;
|
|
179
|
-
question: string;
|
|
180
|
-
optional: boolean;
|
|
181
|
-
placeholder: string;
|
|
182
|
-
minChars: number;
|
|
183
|
-
defaultCountryCode: string;
|
|
184
|
-
};
|
|
185
|
-
isHead?: boolean | undefined;
|
|
186
|
-
nextId?: string | undefined;
|
|
187
|
-
} | {
|
|
188
|
-
type: "question-enum";
|
|
189
|
-
id: string;
|
|
190
|
-
data: {
|
|
191
|
-
options: {
|
|
192
|
-
value: string;
|
|
193
|
-
label: string;
|
|
194
|
-
}[];
|
|
195
|
-
key: string;
|
|
196
|
-
question: string;
|
|
197
|
-
maxSelected: number;
|
|
198
|
-
minSelected: number;
|
|
199
|
-
preApply?: {
|
|
200
|
-
severity: "hard" | "advisory";
|
|
201
|
-
mismatchMessage: string;
|
|
202
|
-
expectedValue: string;
|
|
203
|
-
} | undefined;
|
|
204
|
-
};
|
|
205
|
-
isHead?: boolean | undefined;
|
|
206
|
-
nextId?: string | undefined;
|
|
207
|
-
} | {
|
|
208
|
-
type: "question-file";
|
|
209
|
-
id: string;
|
|
210
|
-
data: {
|
|
211
|
-
key: string;
|
|
212
|
-
question: string;
|
|
213
|
-
optional: boolean;
|
|
214
|
-
extensions: string[];
|
|
215
|
-
multiple?: boolean | undefined;
|
|
216
|
-
maxSizeKb?: number | undefined;
|
|
217
|
-
};
|
|
218
|
-
isHead?: boolean | undefined;
|
|
219
|
-
nextId?: string | undefined;
|
|
220
|
-
} | {
|
|
221
|
-
type: "question-address";
|
|
222
|
-
id: string;
|
|
223
|
-
data: {
|
|
224
|
-
keys: {
|
|
225
|
-
line1: string | null;
|
|
226
|
-
line2: string | null;
|
|
227
|
-
line3: string | null;
|
|
228
|
-
city: string | null;
|
|
229
|
-
state: string | null;
|
|
230
|
-
postcode: string | null;
|
|
231
|
-
country: string | null;
|
|
232
|
-
};
|
|
233
|
-
key: string;
|
|
234
|
-
question: string;
|
|
235
|
-
optional: boolean;
|
|
236
|
-
placeholder?: string | undefined;
|
|
237
|
-
line2Required?: boolean | undefined;
|
|
238
|
-
};
|
|
239
|
-
isHead?: boolean | undefined;
|
|
240
|
-
nextId?: string | undefined;
|
|
241
|
-
} | {
|
|
242
|
-
type: "if-block";
|
|
243
|
-
id: string;
|
|
244
|
-
data: {
|
|
245
|
-
compareKey: string;
|
|
246
|
-
compareValue: string;
|
|
247
|
-
compare: "equals" | "notEquals" | "contains" | "notContains" | "greaterThan" | "lessThan" | "greaterThanOrEqualTo" | "lessThanOrEqualTo";
|
|
248
|
-
} | {
|
|
249
|
-
combinator: "and" | "or";
|
|
250
|
-
conditions: {
|
|
251
|
-
compareKey: string;
|
|
252
|
-
compareValue: string;
|
|
253
|
-
compare: "equals" | "notEquals" | "contains" | "notContains" | "greaterThan" | "lessThan" | "greaterThanOrEqualTo" | "lessThanOrEqualTo";
|
|
254
|
-
}[];
|
|
255
|
-
};
|
|
256
|
-
isHead?: boolean | undefined;
|
|
257
|
-
nextId?: string | undefined;
|
|
258
|
-
branchId?: string | undefined;
|
|
259
|
-
} | {
|
|
260
|
-
type: "jump";
|
|
261
|
-
id: string;
|
|
262
|
-
data: {
|
|
263
|
-
targetId: string;
|
|
264
|
-
};
|
|
265
|
-
isHead?: boolean | undefined;
|
|
266
|
-
nextId?: string | undefined;
|
|
267
|
-
} | {
|
|
268
|
-
type: "add-submission";
|
|
269
|
-
id: string;
|
|
270
|
-
data: {
|
|
271
|
-
value: string;
|
|
272
|
-
key: string;
|
|
273
|
-
};
|
|
274
|
-
isHead?: boolean | undefined;
|
|
275
|
-
nextId?: string | undefined;
|
|
276
|
-
} | {
|
|
277
|
-
type: "check-duplicate";
|
|
278
|
-
id: string;
|
|
279
|
-
data: {
|
|
280
|
-
key: string;
|
|
281
|
-
email: string;
|
|
282
|
-
scope: "job" | "company";
|
|
283
|
-
};
|
|
284
|
-
isHead?: boolean | undefined;
|
|
285
|
-
nextId?: string | undefined;
|
|
286
|
-
} | {
|
|
287
|
-
type: "feedback";
|
|
288
|
-
id: string;
|
|
289
|
-
data: {};
|
|
290
|
-
isHead?: boolean | undefined;
|
|
291
|
-
nextId?: string | undefined;
|
|
292
|
-
})[];
|
|
293
|
-
build: number;
|
|
294
|
-
context: Record<string, unknown>;
|
|
295
|
-
title: string;
|
|
296
|
-
analytics: {
|
|
297
|
-
customProperties?: Record<string, unknown>;
|
|
298
|
-
} | undefined;
|
|
299
|
-
job: {
|
|
300
|
-
id: string;
|
|
301
|
-
id_type: "internal" | "external";
|
|
302
|
-
} | undefined;
|
|
303
|
-
locationOrigin: {
|
|
304
|
-
lat?: number;
|
|
305
|
-
lng?: number;
|
|
306
|
-
} | undefined;
|
|
307
|
-
}>;
|
|
55
|
+
viewState$: import('@preact/signals').Signal<"maximised" | "minimised" | "closed">;
|
|
56
|
+
prepareFlow: ({ flow, context, flowKeys, title, analytics, job, locationOrigin, }: OpenChatbotParams) => Promise<StartedFlow>;
|
|
308
57
|
commitFlow: (flow: StartedFlow) => void;
|
|
58
|
+
/** The candidate chose to continue or start again, so this page does not ask about this application again. */
|
|
59
|
+
settleResume: (flow: StartedFlow) => void;
|
|
309
60
|
cancelCurrentFlow: () => void;
|
|
310
61
|
markAsFinished: () => void;
|
|
311
62
|
markAsInteracted: () => void;
|
|
@@ -319,135 +70,4 @@ export declare const store: {
|
|
|
319
70
|
setInput: (input: ChatInput | undefined) => void;
|
|
320
71
|
persistWriteBarrier: (flow: StartedFlow) => Promise<void>;
|
|
321
72
|
};
|
|
322
|
-
export type MessageAuthor = 'bot' | 'user';
|
|
323
|
-
type SystemMessage = {
|
|
324
|
-
type: 'system';
|
|
325
|
-
text: string;
|
|
326
|
-
variant: 'info' | 'warning' | 'error' | 'success';
|
|
327
|
-
};
|
|
328
|
-
type TextMessage = {
|
|
329
|
-
author: MessageAuthor;
|
|
330
|
-
type: 'text';
|
|
331
|
-
text: string;
|
|
332
|
-
};
|
|
333
|
-
export type LinkMessage = {
|
|
334
|
-
type: 'link';
|
|
335
|
-
href: string;
|
|
336
|
-
text: string;
|
|
337
|
-
onClick?: () => void;
|
|
338
|
-
};
|
|
339
|
-
type ImageMessage = {
|
|
340
|
-
author: MessageAuthor;
|
|
341
|
-
type: 'image';
|
|
342
|
-
url: string;
|
|
343
|
-
width: number;
|
|
344
|
-
height: number;
|
|
345
|
-
};
|
|
346
|
-
type FileMessage = {
|
|
347
|
-
author: MessageAuthor;
|
|
348
|
-
type: 'file';
|
|
349
|
-
fileName: string;
|
|
350
|
-
fileSizeKb: number;
|
|
351
|
-
};
|
|
352
|
-
export type LoadingMessage = {
|
|
353
|
-
type: 'loading';
|
|
354
|
-
/** Shown beside the indicator and announced to screen readers. */ text?: string;
|
|
355
|
-
};
|
|
356
|
-
export type ChatMessage = TextMessage | ImageMessage | SystemMessage | FileMessage | LinkMessage | LoadingMessage;
|
|
357
|
-
export type FileToUpload = {
|
|
358
|
-
name: string;
|
|
359
|
-
data: string;
|
|
360
|
-
sizeKb: number;
|
|
361
|
-
};
|
|
362
|
-
export type FlowSubmissionAddress = {
|
|
363
|
-
value: Record<string, string | undefined>;
|
|
364
|
-
type: 'address';
|
|
365
|
-
};
|
|
366
|
-
export type FlowSubmissionFile = {
|
|
367
|
-
value: FileToUpload[];
|
|
368
|
-
type: 'file';
|
|
369
|
-
};
|
|
370
|
-
export type FlowSubmissionString = {
|
|
371
|
-
value: string;
|
|
372
|
-
type: 'string';
|
|
373
|
-
};
|
|
374
|
-
export type FlowSubmissionBoolean = {
|
|
375
|
-
value: boolean;
|
|
376
|
-
type: 'boolean';
|
|
377
|
-
};
|
|
378
|
-
export type FlowSubmissionNumber = {
|
|
379
|
-
value: number;
|
|
380
|
-
type: 'number';
|
|
381
|
-
};
|
|
382
|
-
export type FlowSubmissionPhone = {
|
|
383
|
-
value: {
|
|
384
|
-
countryCode: string;
|
|
385
|
-
phoneNumber: string;
|
|
386
|
-
};
|
|
387
|
-
type: 'phone';
|
|
388
|
-
};
|
|
389
|
-
export type FlowSubmissionEnum = {
|
|
390
|
-
value: string[];
|
|
391
|
-
type: 'enum';
|
|
392
|
-
};
|
|
393
|
-
export type FlowSubmissionIntegration = {
|
|
394
|
-
value: unknown;
|
|
395
|
-
type: 'integration';
|
|
396
|
-
};
|
|
397
|
-
export type FlowSubmission = FlowSubmissionString | FlowSubmissionBoolean | FlowSubmissionNumber | FlowSubmissionPhone | FlowSubmissionEnum | FlowSubmissionAddress | FlowSubmissionFile | FlowSubmissionIntegration;
|
|
398
|
-
export type KeyToSubmissionMap = {
|
|
399
|
-
[key: string]: FlowSubmission;
|
|
400
|
-
};
|
|
401
|
-
export type ApplicationRecovery = {
|
|
402
|
-
fileQuestionNodeId: string;
|
|
403
|
-
submitNodeId: string;
|
|
404
|
-
};
|
|
405
|
-
export type SubmitCooldown = {
|
|
406
|
-
key: string;
|
|
407
|
-
until: number;
|
|
408
|
-
/** Consecutive throttles or temporary outages behind this wait, when it follows one; it sets the next one (PROD-6636, PROD-7172). */
|
|
409
|
-
throttles?: number;
|
|
410
|
-
};
|
|
411
|
-
/** Dynamic part of a flow */
|
|
412
|
-
export type FlowStateData = {
|
|
413
|
-
/** History of messages left in the chat */
|
|
414
|
-
messages: (ChatMessage & {
|
|
415
|
-
groupId?: string;
|
|
416
|
-
})[];
|
|
417
|
-
submissions: KeyToSubmissionMap;
|
|
418
|
-
nodeHistory: string[];
|
|
419
|
-
/**
|
|
420
|
-
* Browser replay barrier: submit nodes whose write has started, flushed to the flow cache before the POST so
|
|
421
|
-
* Undo and reload cannot resend a pending, accepted or unknown attempt. It is not proof that the provider
|
|
422
|
-
* accepted the application and not server idempotency: independent tabs, cleared storage and the memory-only
|
|
423
|
-
* fallback are not coordinated. An explicit not_submitted result releases only the attempt that added the
|
|
424
|
-
* entry. Caches from before this field infer it conservatively from visited submit nodes.
|
|
425
|
-
*/
|
|
426
|
-
startedWriteNodeIds?: string[];
|
|
427
|
-
/**
|
|
428
|
-
* When the most recent unsuccessful submit of any kind, other than a duplicate, happened (epoch ms), by submit
|
|
429
|
-
* node (and job, when known) key. A duplicate within an hour of it is most likely that attempt having landed
|
|
430
|
-
* (PROD-7208). Kept across Restart, which is how a candidate retries after a failure; browser-local, like the barrier.
|
|
431
|
-
*/
|
|
432
|
-
failedAttemptAt?: Record<string, number>;
|
|
433
|
-
/**
|
|
434
|
-
* Legacy, read-only: keys of attempts with an unknown or missing verdict, written before failures carried a time
|
|
435
|
-
* (PROD-7055). Still in candidates' browser storage; with no time to compare, a key here counts as a recent
|
|
436
|
-
* failure until a new failure on that key replaces it with a time in `failedAttemptAt`. Never added to.
|
|
437
|
-
*/
|
|
438
|
-
unconfirmedAttemptKeys?: string[];
|
|
439
|
-
/**
|
|
440
|
-
* When submit becomes available again after an unsuccessful attempt, for the attempt key above (PROD-7112),
|
|
441
|
-
* and how many throttles or outages in a row led to it (PROD-6636, PROD-7172). Cleared by a success. Kept across Restart so neither
|
|
442
|
-
* Restart nor a reload skips the wait or resets the escalation; browser-local, like the barrier.
|
|
443
|
-
*/
|
|
444
|
-
submitCooldown?: SubmitCooldown;
|
|
445
|
-
applicationRecovery?: ApplicationRecovery;
|
|
446
|
-
/** Needs to be separate because a node can have many inputs */
|
|
447
|
-
currentInput: ChatInput | null;
|
|
448
|
-
isFinished: boolean;
|
|
449
|
-
hasInteracted?: boolean;
|
|
450
|
-
sequence: number;
|
|
451
|
-
flowSessionId: string;
|
|
452
|
-
};
|
|
453
73
|
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|