@smvtech/x-flux 1.0.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/dist/index.mjs ADDED
@@ -0,0 +1,1322 @@
1
+ import { createContext, useState, useRef, useCallback, useEffect, useContext } from 'react';
2
+ import axios from 'axios';
3
+ import * as z2 from 'zod';
4
+ import z2__default from 'zod';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ // src/context/index.tsx
8
+ var axiosInstance = null;
9
+ var initializeApiClient = (config) => {
10
+ const baseURL = config.baseUrls[config.environment];
11
+ if (!baseURL) {
12
+ throw new Error(`Invalid environment: ${config.environment}`);
13
+ }
14
+ axiosInstance = axios.create({
15
+ baseURL: `${baseURL}/v1`,
16
+ headers: {
17
+ authorization: config.jwtToken
18
+ },
19
+ withCredentials: true
20
+ });
21
+ };
22
+ var getClient = () => {
23
+ if (!axiosInstance) {
24
+ throw new Error("API client not initialized. Call initializeEDCFlow() first.");
25
+ }
26
+ return axiosInstance;
27
+ };
28
+ var APPLICATION_STATUS = /* @__PURE__ */ ((APPLICATION_STATUS2) => {
29
+ APPLICATION_STATUS2["CREATED"] = "CREATED";
30
+ APPLICATION_STATUS2["IN_PROGRESS"] = "IN_PROGRESS";
31
+ APPLICATION_STATUS2["READY_TO_SUBMIT"] = "READY_TO_SUBMIT";
32
+ APPLICATION_STATUS2["SUBMITTING"] = "SUBMITTING";
33
+ APPLICATION_STATUS2["AWAITING_RESULT"] = "AWAITING_RESULT";
34
+ APPLICATION_STATUS2["COMPLETED"] = "COMPLETED";
35
+ APPLICATION_STATUS2["VOID"] = "VOID";
36
+ return APPLICATION_STATUS2;
37
+ })(APPLICATION_STATUS || {});
38
+ var APPLICATION_TAGS = /* @__PURE__ */ ((APPLICATION_TAGS2) => {
39
+ APPLICATION_TAGS2["SUBMISSION_PENDING"] = "SUBMISSION_PENDING";
40
+ APPLICATION_TAGS2["EMBASSY_PENDING"] = "EMBASSY_PENDING";
41
+ APPLICATION_TAGS2["VERDICT_QC_PENDING"] = "VERDICT_QC_PENDING";
42
+ APPLICATION_TAGS2["PAYMENT_CARD_PENDING"] = "PAYMENT_CARD_PENDING";
43
+ APPLICATION_TAGS2["DOCUMENT_PENDING"] = "DOCUMENT_PENDING";
44
+ APPLICATION_TAGS2["COMPLETED"] = "COMPLETED";
45
+ APPLICATION_TAGS2["MINOR"] = "MINOR";
46
+ APPLICATION_TAGS2["VRI_OPTED"] = "VRI_OPTED";
47
+ APPLICATION_TAGS2["VRI_APPLIED"] = "VRI_APPLIED";
48
+ APPLICATION_TAGS2["AMENDMENT_REQUESTED"] = "AMENDMENT_REQUESTED";
49
+ APPLICATION_TAGS2["OK_TO_BOARD"] = "OK_TO_BOARD";
50
+ APPLICATION_TAGS2["ABSCONDING_APPLICANT"] = "ABSCONDING_APPLICANT";
51
+ APPLICATION_TAGS2["DRAFTED_APPLICATION"] = "DRAFTED_APPLICATION";
52
+ APPLICATION_TAGS2["DUPLICATE_TRAVELLER"] = "DUPLICATE_TRAVELLER";
53
+ return APPLICATION_TAGS2;
54
+ })(APPLICATION_TAGS || {});
55
+ var TA_QC_EXTRACTION_STATUS = /* @__PURE__ */ ((TA_QC_EXTRACTION_STATUS2) => {
56
+ TA_QC_EXTRACTION_STATUS2["SUCCESS"] = "SUCCESS";
57
+ TA_QC_EXTRACTION_STATUS2["FAIL"] = "FAIL";
58
+ TA_QC_EXTRACTION_STATUS2["NA"] = "NA";
59
+ return TA_QC_EXTRACTION_STATUS2;
60
+ })(TA_QC_EXTRACTION_STATUS || {});
61
+ var QuestionnaireSchema = z2.object({
62
+ questionsWithRank: z2.array(z2.object({ id: z2.string(), rank: z2.number() })),
63
+ questionMap: z2.record(
64
+ z2.object({
65
+ category: z2.string(),
66
+ answer_source: z2.string(),
67
+ isApplicationSpecific: z2.boolean(),
68
+ question: z2.string(),
69
+ subType: z2.string(),
70
+ options: z2.array(z2.string()),
71
+ is_required: z2.boolean(),
72
+ is_root: z2.boolean(),
73
+ type: z2.enum(["CALENDAR", "DOCUMENT", "DROPDOWN", "SINGLE_CHOICE", "TEXT", "TEXTAREA"]),
74
+ renders: z2.array(
75
+ z2.object({
76
+ operation: z2.string(),
77
+ value: z2.string(),
78
+ question_ids: z2.array(z2.string())
79
+ })
80
+ )
81
+ })
82
+ )
83
+ });
84
+ var ApplicationAbscondingMetadataSchema = z2.object({
85
+ is_ecr: z2.string().nullable(),
86
+ is_young: z2.string().nullable(),
87
+ is_solo_traveller: z2.string().nullable(),
88
+ is_high_risk_state: z2.string().nullable(),
89
+ is_regional_signature: z2.string().nullable(),
90
+ is_recent_issue_passport: z2.string().nullable(),
91
+ is_village_pincode: z2.string().nullable(),
92
+ is_flight_confirmed: z2.object({
93
+ label: z2.string().nullable(),
94
+ metadata: z2.any().optional()
95
+ }).nullable()
96
+ });
97
+ var ApplicationSchema = z2.object({
98
+ _id: z2.string(),
99
+ visa_order_id: z2.string(),
100
+ application_status: z2.nativeEnum(APPLICATION_STATUS),
101
+ tags: z2.nativeEnum(APPLICATION_TAGS).array().optional(),
102
+ absconding_metadata: ApplicationAbscondingMetadataSchema.optional(),
103
+ created_at: z2.string(),
104
+ updated_at: z2.string()
105
+ });
106
+ var TravellerSchema = z2.object({
107
+ _id: z2.string(),
108
+ application_id: z2.string(),
109
+ order_id: z2.string(),
110
+ first_name: z2.string(),
111
+ middle_name: z2.string().nullable().optional(),
112
+ last_name: z2.string().nullable().optional(),
113
+ is_demo_traveller: z2.boolean(),
114
+ passport: z2.string(),
115
+ is_foreign_passport: z2.boolean().optional(),
116
+ is_deleted: z2.boolean(),
117
+ created_by: z2.string(),
118
+ created_at: z2.string(),
119
+ updated_at: z2.string()
120
+ });
121
+ var AnswerSchema = z2.object({
122
+ _id: z2.string(),
123
+ visa_questions_id: z2.string(),
124
+ application_id: z2.string(),
125
+ traveller_id: z2.string(),
126
+ assets_id: z2.array(
127
+ z2.object({
128
+ doc_id: z2.string(),
129
+ issue_reason: z2.string().nullable(),
130
+ status: z2.enum(["ANSWERED", "APPROVED", "REJECTED", "DELETED"])
131
+ })
132
+ ),
133
+ answer: z2.string().array(),
134
+ issue_reason: z2.string().nullable(),
135
+ status: z2.enum(["ANSWERED", "APPROVED", "REJECTED", "NA", "UNSTARTED", "PENDING"]),
136
+ is_deleted: z2.boolean(),
137
+ visa_order_id: z2.string(),
138
+ created_by: z2.string(),
139
+ created_at: z2.string(),
140
+ updated_at: z2.string()
141
+ });
142
+
143
+ // src/helpers/index.tsx
144
+ var createAllQuestionsWithAnswers = (questionnaire, answers = []) => {
145
+ if (!questionnaire) return [];
146
+ const answerMap = /* @__PURE__ */ new Map();
147
+ answers.forEach((answer) => {
148
+ answerMap.set(answer.visa_questions_id, answer);
149
+ });
150
+ const questionsWithAnswers = [];
151
+ questionnaire.questionsWithRank.forEach(({ id, rank }) => {
152
+ const question = questionnaire.questionMap[id];
153
+ if (question) {
154
+ questionsWithAnswers.push({
155
+ id,
156
+ rank,
157
+ question,
158
+ answer_data: answerMap.get(id)
159
+ });
160
+ }
161
+ });
162
+ return questionsWithAnswers;
163
+ };
164
+ var filterConditionalQuestions = (questions, order) => {
165
+ const questionMap = /* @__PURE__ */ new Map();
166
+ questions.forEach((q) => {
167
+ questionMap.set(q.id, q);
168
+ });
169
+ const visibleQuestionIds = /* @__PURE__ */ new Set();
170
+ const processRenders = (questionId) => {
171
+ const question = questionMap.get(questionId);
172
+ if (!question) return;
173
+ const answerValue = question.answer_data?.answer || [];
174
+ question.question.renders?.forEach((render) => {
175
+ if (shouldRenderQuestion(render, answerValue, order)) {
176
+ render.question_ids.forEach((id) => {
177
+ if (!visibleQuestionIds.has(id)) {
178
+ visibleQuestionIds.add(id);
179
+ processRenders(id);
180
+ }
181
+ });
182
+ }
183
+ });
184
+ };
185
+ questions.forEach((q) => {
186
+ if (q.question.is_root) {
187
+ visibleQuestionIds.add(q.id);
188
+ processRenders(q.id);
189
+ }
190
+ });
191
+ return questions.filter((q) => visibleQuestionIds.has(q.id)).sort((a, b) => a.rank - b.rank);
192
+ };
193
+ var extractDynamicFieldName = (value) => {
194
+ const match = value.match(/^\{\{([^}]+)\}\}$/);
195
+ return match ? match[1].trim() : null;
196
+ };
197
+ var isMinor = (dateOfBirth, travelStartDate) => {
198
+ if (!dateOfBirth || !travelStartDate) return false;
199
+ let dob;
200
+ if (dateOfBirth.includes("/")) {
201
+ const [month, day, year] = dateOfBirth.split("/").map(Number);
202
+ dob = new Date(year, month - 1, day);
203
+ } else {
204
+ dob = new Date(dateOfBirth);
205
+ }
206
+ const travelDate = new Date(travelStartDate);
207
+ if (isNaN(dob.getTime()) || isNaN(travelDate.getTime())) return false;
208
+ const ageDiff = travelDate.getFullYear() - dob.getFullYear();
209
+ const monthDiff = travelDate.getMonth() - dob.getMonth();
210
+ const dayDiff = travelDate.getDate() - dob.getDate();
211
+ const actualAge = monthDiff < 0 || monthDiff === 0 && dayDiff < 0 ? ageDiff - 1 : ageDiff;
212
+ return actualAge < 18;
213
+ };
214
+ var shouldRenderQuestion = (render, answerValue, order) => {
215
+ const dynamicFieldName = extractDynamicFieldName(render.value);
216
+ if (dynamicFieldName) {
217
+ switch (dynamicFieldName) {
218
+ case "travel_start_date":
219
+ return isMinor(answerValue[0], order.travel_start_date);
220
+ default:
221
+ return false;
222
+ }
223
+ }
224
+ switch (render.operation) {
225
+ case "answers":
226
+ return !!answerValue;
227
+ case "eq":
228
+ return answerValue.some((value) => value === render.value);
229
+ case "neq":
230
+ return answerValue.some((value) => value !== render.value);
231
+ case "gt":
232
+ return answerValue.some((value) => parseInt(value) > parseInt(render.value));
233
+ case "gte":
234
+ return answerValue.some((value) => parseInt(value) >= parseInt(render.value));
235
+ case "lt":
236
+ return answerValue.some((value) => parseInt(value) < parseInt(render.value));
237
+ case "lte":
238
+ return answerValue.some((value) => parseInt(value) <= parseInt(render.value));
239
+ case "includes":
240
+ return answerValue.some((value) => value.includes(render.value));
241
+ case "nincludes":
242
+ return !answerValue.some((value) => value.includes(render.value));
243
+ default:
244
+ return false;
245
+ }
246
+ };
247
+ var getVisibleQuestions = (questions, order) => {
248
+ return filterConditionalQuestions(questions, order);
249
+ };
250
+ var formatApplicationFromResponse = (application) => {
251
+ return {
252
+ _id: application._id,
253
+ visa_order_id: application.visa_order_id,
254
+ application_status: application.application_status,
255
+ tags: application.tags,
256
+ absconding_metadata: application.absconding_metadata,
257
+ created_at: application.created_at,
258
+ updated_at: application.updated_at
259
+ };
260
+ };
261
+ var formatTravellerFromResponse = (traveller) => {
262
+ return {
263
+ _id: traveller._id,
264
+ application_id: traveller.application_id,
265
+ order_id: traveller.order_id,
266
+ first_name: traveller.first_name,
267
+ middle_name: traveller.middle_name,
268
+ last_name: traveller.last_name,
269
+ is_demo_traveller: traveller.is_demo_traveller,
270
+ passport: traveller.passport,
271
+ is_foreign_passport: traveller.is_foreign_passport,
272
+ is_deleted: traveller.is_deleted,
273
+ created_by: traveller.created_by,
274
+ created_at: traveller.created_at,
275
+ updated_at: traveller.updated_at
276
+ };
277
+ };
278
+ var formatAnswerFromResponse = (updatedAnswer, orderId) => {
279
+ return {
280
+ _id: updatedAnswer._id,
281
+ visa_questions_id: updatedAnswer.visa_questions_id,
282
+ application_id: updatedAnswer.application_id,
283
+ traveller_id: updatedAnswer.traveller_id,
284
+ assets_id: updatedAnswer.assets_id || [],
285
+ answer: updatedAnswer.answer,
286
+ issue_reason: updatedAnswer.issue_reason,
287
+ status: updatedAnswer.status,
288
+ is_deleted: updatedAnswer.is_deleted,
289
+ visa_order_id: updatedAnswer.visa_order_id || orderId,
290
+ created_by: updatedAnswer.created_by,
291
+ created_at: updatedAnswer.created_at,
292
+ updated_at: updatedAnswer.updated_at
293
+ };
294
+ };
295
+ var updateApplicantWithAnswer = (applicant, question_id, answer, questionnaire, order) => {
296
+ const answerMap = /* @__PURE__ */ new Map();
297
+ applicant.questions.forEach((q) => {
298
+ if (q.answer_data) {
299
+ answerMap.set(q.id, q.answer_data);
300
+ }
301
+ });
302
+ answerMap.set(question_id, answer);
303
+ const answers = Array.from(answerMap.values());
304
+ const questions = createAllQuestionsWithAnswers(questionnaire, answers);
305
+ const visibleQuestions = getVisibleQuestions(questions, order);
306
+ return {
307
+ ...applicant,
308
+ questions: visibleQuestions
309
+ };
310
+ };
311
+ var createApplicantData = (traveller, answers, questionnaire, application, order) => {
312
+ if (!questionnaire) return null;
313
+ const questions = createAllQuestionsWithAnswers(questionnaire, answers);
314
+ const visibleQuestions = getVisibleQuestions(questions, order);
315
+ return {
316
+ application_id: application._id,
317
+ application,
318
+ traveller,
319
+ questions: visibleQuestions
320
+ };
321
+ };
322
+ var transformApplicationResponse = (response) => {
323
+ return {
324
+ application: formatApplicationFromResponse(response.application),
325
+ traveller: formatTravellerFromResponse(response.traveller),
326
+ answers: (response.answers || []).map((answer) => formatAnswerFromResponse(answer, response.application.visa_order_id))
327
+ };
328
+ };
329
+ var createApplicantsFromApplications = (applications, questionnaire, order) => {
330
+ if (!applications || !Array.isArray(applications)) {
331
+ return {};
332
+ }
333
+ const applicants = {};
334
+ applications.forEach((applicationData) => {
335
+ const applicant = createApplicantData(
336
+ applicationData.traveller,
337
+ applicationData.answers,
338
+ questionnaire,
339
+ applicationData.application,
340
+ order
341
+ );
342
+ if (applicant) {
343
+ applicants[applicationData.application._id] = applicant;
344
+ }
345
+ });
346
+ return applicants;
347
+ };
348
+ var getExt = (filename) => {
349
+ return filename.split(".").pop()?.toLowerCase() ?? "";
350
+ };
351
+ async function getSignedUrlFromAsset(docId) {
352
+ if (!docId) return null;
353
+ try {
354
+ const { data: documentData } = await getDocumentData([docId]);
355
+ const docData = Array.isArray(documentData) ? documentData[0] : documentData;
356
+ if (docData && typeof docData === "object" && "s3_path" in docData && docData.s3_path) {
357
+ const { data: urls } = await getFileURLfromFilename(docData.s3_path);
358
+ return urls?.[0]?.url || null;
359
+ }
360
+ return null;
361
+ } catch (error) {
362
+ console.error("Failed to fetch signed URL:", error);
363
+ return null;
364
+ }
365
+ }
366
+ var findQuestionsWithDynamicOptions = (questionnaire, dynamicValue) => {
367
+ return Object.entries(questionnaire.questionMap).filter(([, question]) => question.options?.includes(`{{${dynamicValue}}}`)).map(([id]) => id);
368
+ };
369
+ var buildDynamicQuestionMap = (questionnaire) => {
370
+ const dynamicMap = {};
371
+ const dynamicValues = ["adults"];
372
+ for (const dynamicValue of dynamicValues) {
373
+ const questionIds = findQuestionsWithDynamicOptions(questionnaire, dynamicValue);
374
+ for (const questionId of questionIds) {
375
+ dynamicMap[questionId] = `{{${dynamicValue}}}`;
376
+ }
377
+ }
378
+ return dynamicMap;
379
+ };
380
+ var computeDynamicOptions = (dynamicValue, applicants) => {
381
+ switch (dynamicValue) {
382
+ case "{{adults}}": {
383
+ const adults = Object.values(applicants).filter(
384
+ (applicant) => !applicant.application.tags?.includes("MINOR" /* MINOR */)
385
+ );
386
+ return adults.map((adult) => `app_id_${adult.application_id}`);
387
+ }
388
+ // Add more cases for future dynamic options
389
+ // case "{{non-dependents}}": { ... }
390
+ default:
391
+ return [];
392
+ }
393
+ };
394
+ var updateQuestionnaireWithDynamicOptions = (questionnaire, dynamicQuestionMap, applicants) => {
395
+ if (Object.keys(dynamicQuestionMap).length === 0) return questionnaire;
396
+ const updatedQuestionMap = { ...questionnaire.questionMap };
397
+ for (const [questionId, dynamicValue] of Object.entries(dynamicQuestionMap)) {
398
+ const question = questionnaire.questionMap[questionId];
399
+ if (!question) continue;
400
+ const computedOptions = computeDynamicOptions(dynamicValue, applicants);
401
+ updatedQuestionMap[questionId] = {
402
+ ...question,
403
+ options: computedOptions
404
+ };
405
+ }
406
+ return {
407
+ ...questionnaire,
408
+ questionMap: updatedQuestionMap
409
+ };
410
+ };
411
+ var updateApplicantsQuestionOptions = (applicants, dynamicQuestionMap, updatedQuestionnaire) => {
412
+ const dynamicQuestionIds = new Set(Object.keys(dynamicQuestionMap));
413
+ const updatedApplicants = {};
414
+ for (const [applicationId, applicant] of Object.entries(applicants)) {
415
+ const hasDynamicQuestions = applicant.questions.some((q) => dynamicQuestionIds.has(q.id));
416
+ if (!hasDynamicQuestions) {
417
+ updatedApplicants[applicationId] = applicant;
418
+ continue;
419
+ }
420
+ const updatedQuestions = applicant.questions.map((questionWithAnswer) => {
421
+ if (dynamicQuestionIds.has(questionWithAnswer.id)) {
422
+ const updatedQuestion = updatedQuestionnaire.questionMap[questionWithAnswer.id];
423
+ if (updatedQuestion) {
424
+ return {
425
+ ...questionWithAnswer,
426
+ question: {
427
+ ...questionWithAnswer.question,
428
+ options: updatedQuestion.options
429
+ }
430
+ };
431
+ }
432
+ }
433
+ return questionWithAnswer;
434
+ });
435
+ updatedApplicants[applicationId] = {
436
+ ...applicant,
437
+ questions: updatedQuestions
438
+ };
439
+ }
440
+ return updatedApplicants;
441
+ };
442
+ var runApplicantSideEffects = (applicants, questionnaire, dynamicQuestionMap) => {
443
+ if (Object.keys(dynamicQuestionMap).length === 0) {
444
+ return { updatedQuestionnaire: questionnaire, updatedApplicants: applicants };
445
+ }
446
+ const updatedQuestionnaire = updateQuestionnaireWithDynamicOptions(questionnaire, dynamicQuestionMap, applicants);
447
+ const updatedApplicants = updateApplicantsQuestionOptions(applicants, dynamicQuestionMap, updatedQuestionnaire);
448
+ return { updatedQuestionnaire, updatedApplicants };
449
+ };
450
+
451
+ // src/api/index.ts
452
+ var transformApplicationData = (rawData) => {
453
+ const transformed = transformApplicationResponse(rawData);
454
+ return {
455
+ application: transformed.application,
456
+ traveller: transformed.traveller,
457
+ answers: transformed.answers
458
+ };
459
+ };
460
+ var getOrderByOrderId = async (orderId, signal) => {
461
+ const client = getClient();
462
+ const response = await client.get(`/visa_orders/order-details/${orderId}`, { signal });
463
+ return { data: response.data.data };
464
+ };
465
+ var getQuestionnaires = async (orderId, isSmvUser = false, signal) => {
466
+ const client = getClient();
467
+ const response = await client.get(`/visa_orders/generate-questionnaire/${orderId}?showAll=${isSmvUser}`, {
468
+ signal
469
+ });
470
+ return { data: response.data.data };
471
+ };
472
+ var getApplicantsForOrder = async (orderId, signal) => {
473
+ const client = getClient();
474
+ const response = await client.get(`/visa_orders/edc-applicants/${orderId}`, { signal });
475
+ const rawData = response.data.data;
476
+ const transformedData = rawData.map(transformApplicationData);
477
+ return { data: transformedData };
478
+ };
479
+ var getApplicant = async (applicationId, signal) => {
480
+ const client = getClient();
481
+ const response = await client.get(`/applications/edc-applicant/${applicationId}`, { signal });
482
+ const rawData = response.data.data;
483
+ return { data: transformApplicationData(rawData) };
484
+ };
485
+ var addApplicant = async (orderId, payload) => {
486
+ const client = getClient();
487
+ const response = await client.post(`/travellers/edc-applicant/${orderId}`, payload);
488
+ const rawData = response.data.data;
489
+ return { data: transformApplicationData(rawData) };
490
+ };
491
+ var deleteApplicant = async (applicationId) => {
492
+ const client = getClient();
493
+ await client.delete(`/applications/${applicationId}`);
494
+ return { data: void 0 };
495
+ };
496
+ var updateAnswer = async (applicationId, data, onProgress) => {
497
+ const client = getClient();
498
+ const formData = new FormData();
499
+ formData.append("application_id", applicationId);
500
+ formData.append("visa_question_id", data.visa_question_id);
501
+ formData.append("answer", data.answer);
502
+ if (data.file) {
503
+ formData.append("docs", data.file);
504
+ }
505
+ const response = await client.post(`/visa_answers/upsert-answer-edc`, formData, {
506
+ onUploadProgress: (event) => {
507
+ onProgress?.({
508
+ percent: event.loaded / (event.total ?? 100) * 100
509
+ });
510
+ }
511
+ });
512
+ const rawData = response.data.data;
513
+ const transformedApplication = formatApplicationFromResponse(rawData.application);
514
+ const transformedTraveller = formatTravellerFromResponse(rawData.traveller);
515
+ const transformedAnswer = formatAnswerFromResponse(rawData.upsertedAnswer, rawData.application.visa_order_id);
516
+ return {
517
+ data: {
518
+ application: transformedApplication,
519
+ traveller: transformedTraveller,
520
+ answers: transformedAnswer,
521
+ docId: rawData.docId,
522
+ signedUrl: rawData.signedUrl,
523
+ ocrStatus: rawData.ocrStatus
524
+ }
525
+ };
526
+ };
527
+ var getDocumentData = async (assetId, signal) => {
528
+ const client = getClient();
529
+ const documentIds = Array.isArray(assetId) ? assetId : [assetId];
530
+ const response = await client.get("/documents/assets", {
531
+ params: { documentIds },
532
+ paramsSerializer: (params) => new URLSearchParams(params.documentIds.map((id) => ["documentIds", id])).toString(),
533
+ signal
534
+ });
535
+ return { data: response.data.data };
536
+ };
537
+ var getFileURLfromFilename = async (filename, signal) => {
538
+ const client = getClient();
539
+ const response = await client.get(`/documents/signed-url?filename=${encodeURIComponent(filename)}`, { signal });
540
+ const signedURLs = response.data.data.map((url) => {
541
+ const urlObj = new URL(url);
542
+ const extractedFilename = urlObj.pathname.split("/").pop();
543
+ const extension = getExt(extractedFilename ?? "");
544
+ if (!extractedFilename) return { url, filename: "", extension: "" };
545
+ return { url, filename: extractedFilename, extension };
546
+ });
547
+ return { data: signedURLs };
548
+ };
549
+ var EDCFlowContext = createContext(void 0);
550
+ var EDCFlowProvider = ({ children, orderId }) => {
551
+ const [order, setOrder] = useState(null);
552
+ const [questionnaire, setQuestionnaire] = useState(null);
553
+ const [dynamicQuestionMap, setDynamicQuestionMap] = useState({});
554
+ const [applicants, setApplicants] = useState({});
555
+ const [activeApplicant, setActiveApplicant] = useState(null);
556
+ const [loading, setLoading] = useState(true);
557
+ const [error, setError] = useState(null);
558
+ const [success, setSuccess] = useState(null);
559
+ const [docIdToS3Url, setDocIdToS3Url] = useState({});
560
+ const s3UrlFetchFlightRequests = useRef(/* @__PURE__ */ new Map());
561
+ const fetchOrder = useCallback(async () => {
562
+ if (!orderId) return;
563
+ try {
564
+ const { data: order2 } = await getOrderByOrderId(orderId);
565
+ setOrder(order2);
566
+ return order2;
567
+ } catch (err) {
568
+ console.error("Failed to fetch order:", err);
569
+ setError("Failed to load order details");
570
+ return null;
571
+ }
572
+ }, [orderId]);
573
+ const fetchQuestionnaire = useCallback(async () => {
574
+ if (!orderId) return null;
575
+ try {
576
+ const { data: questionnaire2 } = await getQuestionnaires(orderId, true);
577
+ setQuestionnaire(questionnaire2);
578
+ if (questionnaire2) {
579
+ const dynamicMap = buildDynamicQuestionMap(questionnaire2);
580
+ setDynamicQuestionMap(dynamicMap);
581
+ }
582
+ return questionnaire2;
583
+ } catch (err) {
584
+ console.error("Failed to fetch questionnaire:", err);
585
+ setError("Failed to load questionnaire");
586
+ return null;
587
+ }
588
+ }, [orderId]);
589
+ const fetchApplicantsForOrder = useCallback(async () => {
590
+ if (!orderId) return null;
591
+ try {
592
+ const { data: applications } = await getApplicantsForOrder(orderId);
593
+ return applications;
594
+ } catch (err) {
595
+ console.error("Failed to fetch applicants:", err);
596
+ setError("Failed to fetch applicants");
597
+ return null;
598
+ }
599
+ }, [orderId]);
600
+ const addApplicant2 = useCallback(
601
+ async (payload) => {
602
+ if (!order || !questionnaire) {
603
+ setError("Order or questionnaire not loaded");
604
+ return null;
605
+ }
606
+ try {
607
+ const { data: newApplicant } = await addApplicant(order._id, payload);
608
+ const applicant = createApplicantData(
609
+ newApplicant.traveller,
610
+ newApplicant.answers,
611
+ questionnaire,
612
+ newApplicant.application,
613
+ order
614
+ );
615
+ if (!applicant) {
616
+ setError("Failed to create applicant data");
617
+ return null;
618
+ }
619
+ setApplicants((prev) => {
620
+ const updatedApplicants = {
621
+ ...prev,
622
+ [applicant.application_id]: applicant
623
+ };
624
+ const { updatedQuestionnaire, updatedApplicants: applicantsWithSideEffects } = runApplicantSideEffects(updatedApplicants, questionnaire, dynamicQuestionMap);
625
+ setQuestionnaire(updatedQuestionnaire);
626
+ return applicantsWithSideEffects;
627
+ });
628
+ setActiveApplicant(applicant.application_id);
629
+ setSuccess("Traveller added and Applicant created");
630
+ return applicant;
631
+ } catch (err) {
632
+ setError("Failed to add traveller, Applicant not created");
633
+ return null;
634
+ }
635
+ },
636
+ [questionnaire, order, dynamicQuestionMap]
637
+ );
638
+ const refreshApplicant = useCallback(
639
+ async (application_id) => {
640
+ if (!order || !questionnaire) return;
641
+ try {
642
+ const { data: refreshedApplicantData } = await getApplicant(application_id);
643
+ const applicant = createApplicantData(
644
+ refreshedApplicantData.traveller,
645
+ refreshedApplicantData.answers,
646
+ questionnaire,
647
+ refreshedApplicantData.application,
648
+ order
649
+ );
650
+ if (!applicant) return;
651
+ setApplicants((prev) => {
652
+ const updatedApplicants = {
653
+ ...prev,
654
+ [application_id]: applicant
655
+ };
656
+ const { updatedQuestionnaire, updatedApplicants: applicantsWithSideEffects } = runApplicantSideEffects(updatedApplicants, questionnaire, dynamicQuestionMap);
657
+ setQuestionnaire(updatedQuestionnaire);
658
+ return applicantsWithSideEffects;
659
+ });
660
+ } catch (err) {
661
+ console.error(`Failed to refresh applicant ${application_id}:`, err);
662
+ setError("Failed to refresh applicant");
663
+ }
664
+ },
665
+ [questionnaire, order, dynamicQuestionMap]
666
+ );
667
+ const updateAnswer2 = useCallback(
668
+ async (application_id, question_type, question, data, onProgress) => {
669
+ if (!order || !questionnaire) return;
670
+ try {
671
+ const { data: updatedAnswerData } = await updateAnswer(
672
+ application_id,
673
+ data,
674
+ onProgress ? (event) => onProgress({ percent: event.percent ?? 0 }) : void 0
675
+ );
676
+ if (updatedAnswerData.docId && updatedAnswerData.signedUrl) {
677
+ setDocIdToS3Url((prev) => ({
678
+ ...prev,
679
+ [updatedAnswerData.docId]: updatedAnswerData.signedUrl
680
+ }));
681
+ }
682
+ if (question_type === "DOCUMENT") {
683
+ await refreshApplicant(application_id);
684
+ } else {
685
+ const shouldRecalculateSideEffects = question.toLowerCase().includes("birth");
686
+ setApplicants((prev) => {
687
+ const currentApplicant = prev[application_id];
688
+ if (!currentApplicant) return prev;
689
+ const applicantWithUpdatedAnswer = updateApplicantWithAnswer(
690
+ currentApplicant,
691
+ updatedAnswerData.answers.visa_questions_id,
692
+ updatedAnswerData.answers,
693
+ questionnaire,
694
+ order
695
+ );
696
+ const updatedApplicants = {
697
+ ...prev,
698
+ [application_id]: {
699
+ ...applicantWithUpdatedAnswer,
700
+ application: updatedAnswerData.application,
701
+ traveller: updatedAnswerData.traveller
702
+ }
703
+ };
704
+ if (shouldRecalculateSideEffects) {
705
+ const { updatedQuestionnaire, updatedApplicants: applicantsWithSideEffects } = runApplicantSideEffects(updatedApplicants, questionnaire, dynamicQuestionMap);
706
+ setQuestionnaire(updatedQuestionnaire);
707
+ return applicantsWithSideEffects;
708
+ }
709
+ return updatedApplicants;
710
+ });
711
+ }
712
+ } catch (err) {
713
+ console.error("Failed to update answer:", err);
714
+ setError("Failed to update answer");
715
+ }
716
+ },
717
+ [questionnaire, refreshApplicant, order, dynamicQuestionMap]
718
+ );
719
+ const deleteApplicantById = useCallback(async (application_id) => {
720
+ if (!questionnaire || !order) return;
721
+ try {
722
+ await deleteApplicant(application_id);
723
+ setApplicants((prev) => {
724
+ const { [application_id]: _, ...updatedApplicants } = prev;
725
+ const { updatedQuestionnaire, updatedApplicants: applicantsWithSideEffects } = runApplicantSideEffects(updatedApplicants, questionnaire, dynamicQuestionMap);
726
+ setQuestionnaire(updatedQuestionnaire);
727
+ setActiveApplicant((prevActive) => {
728
+ if (prevActive === application_id) {
729
+ const remainingIds = Object.keys(applicantsWithSideEffects);
730
+ return remainingIds.length > 0 ? remainingIds[remainingIds.length - 1] : null;
731
+ }
732
+ return prevActive;
733
+ });
734
+ return applicantsWithSideEffects;
735
+ });
736
+ setSuccess("Applicant deleted successfully");
737
+ } catch (err) {
738
+ console.error("Failed to delete applicant:", err);
739
+ setError("Failed to delete applicant");
740
+ throw err;
741
+ }
742
+ }, [questionnaire, order, dynamicQuestionMap]);
743
+ const refreshOrder = useCallback(async () => {
744
+ await fetchOrder();
745
+ }, [fetchOrder]);
746
+ const getS3UrlForAsset = useCallback(async (doc_id) => {
747
+ if (!doc_id) return null;
748
+ if (docIdToS3Url[doc_id] !== void 0) {
749
+ return docIdToS3Url[doc_id];
750
+ }
751
+ const existingRequest = s3UrlFetchFlightRequests.current.get(doc_id);
752
+ if (existingRequest) {
753
+ return existingRequest;
754
+ }
755
+ const request = (async () => {
756
+ try {
757
+ const s3Url = await getSignedUrlFromAsset(doc_id);
758
+ setDocIdToS3Url((prev) => ({
759
+ ...prev,
760
+ [doc_id]: s3Url
761
+ }));
762
+ s3UrlFetchFlightRequests.current.delete(doc_id);
763
+ return s3Url;
764
+ } catch (error2) {
765
+ setDocIdToS3Url((prev) => ({
766
+ ...prev,
767
+ [doc_id]: null
768
+ }));
769
+ s3UrlFetchFlightRequests.current.delete(doc_id);
770
+ return null;
771
+ }
772
+ })();
773
+ s3UrlFetchFlightRequests.current.set(doc_id, request);
774
+ return request;
775
+ }, [docIdToS3Url]);
776
+ useEffect(() => {
777
+ if (!orderId) return;
778
+ const initialize = async () => {
779
+ setLoading(true);
780
+ setError(null);
781
+ try {
782
+ const [orderData, questionnaireData, applications] = await Promise.all([
783
+ fetchOrder(),
784
+ fetchQuestionnaire(),
785
+ fetchApplicantsForOrder()
786
+ ]);
787
+ if (orderData && questionnaireData && applications) {
788
+ const applicants2 = createApplicantsFromApplications(
789
+ applications,
790
+ questionnaireData,
791
+ orderData
792
+ );
793
+ const dynamicMap = buildDynamicQuestionMap(questionnaireData);
794
+ const { updatedQuestionnaire, updatedApplicants } = runApplicantSideEffects(applicants2, questionnaireData, dynamicMap);
795
+ setQuestionnaire(updatedQuestionnaire);
796
+ setApplicants(updatedApplicants);
797
+ const applicantIds = Object.keys(updatedApplicants);
798
+ if (applicantIds.length > 0) {
799
+ setActiveApplicant(applicantIds[0]);
800
+ }
801
+ }
802
+ } catch (err) {
803
+ console.error("Failed to initialize:", err);
804
+ setError("Failed to load data");
805
+ } finally {
806
+ setLoading(false);
807
+ }
808
+ };
809
+ initialize();
810
+ }, [orderId, fetchOrder, fetchQuestionnaire, fetchApplicantsForOrder]);
811
+ const value = {
812
+ orderId,
813
+ order,
814
+ questionnaire,
815
+ applicants,
816
+ activeApplicant,
817
+ setActiveApplicant,
818
+ loading,
819
+ error,
820
+ addApplicant: addApplicant2,
821
+ updateAnswer: updateAnswer2,
822
+ deleteApplicant: deleteApplicantById,
823
+ refreshOrder,
824
+ refreshApplicant,
825
+ getS3UrlForAsset,
826
+ success
827
+ };
828
+ return /* @__PURE__ */ jsx(EDCFlowContext.Provider, { value, children });
829
+ };
830
+ var useEDCFlow = () => {
831
+ const context = useContext(EDCFlowContext);
832
+ if (!context) {
833
+ throw new Error("useEDCFlow must be used within EDCFlowProvider");
834
+ }
835
+ return context;
836
+ };
837
+ var VisaOrderStatusSchema = z2__default.enum([
838
+ "PENDING",
839
+ "TO_BE_STARTED",
840
+ "PROCESSING",
841
+ "APPROVAL_FOR_SUBMISSION",
842
+ "READY_FOR_SUBMISSION",
843
+ "SUBMITTED",
844
+ "COMPLETED",
845
+ "CANCELLED"
846
+ ]);
847
+ var PurposeOfVisitSchema = z2__default.enum([
848
+ "BUSINESS",
849
+ "VACATION",
850
+ "TOURISM",
851
+ "VISIT_FRIENDS_&_FAMILY",
852
+ "HONEYMOON",
853
+ "TRAVEL"
854
+ ]);
855
+ var CouponSchema = z2__default.object({
856
+ _id: z2__default.string(),
857
+ visa_order_id: z2__default.string(),
858
+ org_id: z2__default.string(),
859
+ name: z2__default.string(),
860
+ description: z2__default.string(),
861
+ value: z2__default.number(),
862
+ status: z2__default.string(),
863
+ created_at: z2__default.coerce.date(),
864
+ updated_at: z2__default.coerce.date(),
865
+ __v: z2__default.number()
866
+ });
867
+ var INTERNAL_ORDER_TAGS = /* @__PURE__ */ ((INTERNAL_ORDER_TAGS2) => {
868
+ INTERNAL_ORDER_TAGS2["DOCUMENTS_PENDING"] = "DOCUMENTS_PENDING";
869
+ INTERNAL_ORDER_TAGS2["TA_QC_ORDER"] = "TA_QC_ORDER";
870
+ return INTERNAL_ORDER_TAGS2;
871
+ })(INTERNAL_ORDER_TAGS || {});
872
+ var PROCESSING_BLOCKED_ON_PAYMENT_STATUS = /* @__PURE__ */ ((PROCESSING_BLOCKED_ON_PAYMENT_STATUS2) => {
873
+ PROCESSING_BLOCKED_ON_PAYMENT_STATUS2["BLOCKED"] = "BLOCKED";
874
+ PROCESSING_BLOCKED_ON_PAYMENT_STATUS2["UNBLOCKED"] = "UNBLOCKED";
875
+ PROCESSING_BLOCKED_ON_PAYMENT_STATUS2["FAILED"] = "FAILED";
876
+ return PROCESSING_BLOCKED_ON_PAYMENT_STATUS2;
877
+ })(PROCESSING_BLOCKED_ON_PAYMENT_STATUS || {});
878
+ var TIMELINE_STEP = /* @__PURE__ */ ((TIMELINE_STEP2) => {
879
+ TIMELINE_STEP2["ORDER_CREATION"] = "ORDER_CREATION";
880
+ TIMELINE_STEP2["DOCUMENT_SUBMITTED"] = "DOCUMENT_SUBMITTED";
881
+ TIMELINE_STEP2["VISA_FORM_SUBMITTED"] = "VISA_FORM_SUBMITTED";
882
+ TIMELINE_STEP2["SEND_PHYSICAL_DOCUMENTS"] = "SEND_PHYSICAL_DOCUMENTS";
883
+ TIMELINE_STEP2["VERIFICATION_IN_PROCESS"] = "VERIFICATION_IN_PROCESS";
884
+ TIMELINE_STEP2["PHYSICAL_DOCUMENT_VERIFICATION"] = "PHYSICAL_DOCUMENT_VERIFICATION";
885
+ TIMELINE_STEP2["VERIFICATION"] = "VERIFICATION";
886
+ TIMELINE_STEP2["APPOINTMENT"] = "APPOINTMENT";
887
+ TIMELINE_STEP2["PAYMENT"] = "PAYMENT";
888
+ TIMELINE_STEP2["SUBMISSION_TO_EMBASSY"] = "SUBMISSION_TO_EMBASSY";
889
+ TIMELINE_STEP2["VISA_APPLICATIONS_VERDICT"] = "VISA_APPLICATIONS_VERDICT";
890
+ return TIMELINE_STEP2;
891
+ })(TIMELINE_STEP || {});
892
+ var VisaOrderTimelineStepSchema = z2__default.enum([
893
+ "ORDER_CREATION" /* ORDER_CREATION */,
894
+ "DOCUMENT_SUBMITTED" /* DOCUMENT_SUBMITTED */,
895
+ "VISA_FORM_SUBMITTED" /* VISA_FORM_SUBMITTED */,
896
+ "VERIFICATION_IN_PROCESS" /* VERIFICATION_IN_PROCESS */,
897
+ "PHYSICAL_DOCUMENT_VERIFICATION" /* PHYSICAL_DOCUMENT_VERIFICATION */,
898
+ "PAYMENT" /* PAYMENT */,
899
+ "SUBMISSION_TO_EMBASSY" /* SUBMISSION_TO_EMBASSY */,
900
+ "VISA_APPLICATIONS_VERDICT" /* VISA_APPLICATIONS_VERDICT */,
901
+ "VERIFICATION" /* VERIFICATION */,
902
+ "SEND_PHYSICAL_DOCUMENTS" /* SEND_PHYSICAL_DOCUMENTS */,
903
+ "APPOINTMENT" /* APPOINTMENT */
904
+ ]);
905
+ var VisaOrderTimelineMetadataSchema = z2__default.object({
906
+ created_at: z2__default.date(),
907
+ applications: z2__default.object({
908
+ submitted: z2__default.number(),
909
+ pending: z2__default.number()
910
+ }),
911
+ cycle: z2__default.number(),
912
+ waiting_time: z2__default.string(),
913
+ errors: z2__default.object({
914
+ documents: z2__default.number(),
915
+ questions: z2__default.number()
916
+ }),
917
+ invoice_no: z2__default.string(),
918
+ amount: z2__default.object({
919
+ total: z2__default.number(),
920
+ received: z2__default.number(),
921
+ cashback_utilised: z2__default.number()
922
+ }),
923
+ expected_date: z2__default.union([z2__default.date(), z2__default.null()]),
924
+ visa: z2__default.object({
925
+ approved: z2__default.number(),
926
+ rejected: z2__default.number(),
927
+ awaited: z2__default.number(),
928
+ unstarted: z2__default.number(),
929
+ qualityCheckPending: z2__default.number()
930
+ }),
931
+ contact_at: z2__default.string(),
932
+ downloadableVerdicts: z2__default.number(),
933
+ kam: z2__default.object({
934
+ first_name: z2__default.string(),
935
+ last_name: z2__default.string(),
936
+ email: z2__default.string(),
937
+ phone: z2__default.string()
938
+ })
939
+ });
940
+ var VisaOrderTimelineOrderCreationSchema = z2__default.object({
941
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
942
+ skip: z2__default.boolean(),
943
+ step_no: z2__default.number(),
944
+ name: z2__default.string().optional().nullable(),
945
+ status: z2__default.enum(["COMPLETED"]),
946
+ metadata: VisaOrderTimelineMetadataSchema.optional().nullable()
947
+ });
948
+ var VisaOrderTimelineDocumentSubmittedSchema = z2__default.object({
949
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
950
+ skip: z2__default.boolean(),
951
+ step_no: z2__default.number(),
952
+ name: z2__default.string().optional().nullable(),
953
+ status: z2__default.enum(["UNSTARTED", "CLASSIFYING", "COMPLETED"]),
954
+ metadata: VisaOrderTimelineMetadataSchema.optional().nullable()
955
+ });
956
+ var VisaOrderTimelineVisaFormSubmittedSchema = z2__default.object({
957
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
958
+ skip: z2__default.boolean(),
959
+ step_no: z2__default.number(),
960
+ name: z2__default.string().optional().nullable(),
961
+ status: z2__default.enum(["UNSTARTED", "COMPLETED", "IN_PROGRESS"]),
962
+ metadata: VisaOrderTimelineMetadataSchema.optional().nullable()
963
+ });
964
+ var VisaOrderTimelineVerificationInProgressSchema = z2__default.object({
965
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
966
+ skip: z2__default.boolean(),
967
+ step_no: z2__default.number(),
968
+ name: z2__default.string().optional().nullable(),
969
+ status: z2__default.enum(["UNSTARTED", "COMPLETED", "VE_PENDING", "TA_PENDING"]),
970
+ metadata: VisaOrderTimelineMetadataSchema.optional().nullable()
971
+ });
972
+ var VisaOrderTimelinePhysicalDocumentVerificationSchema = z2__default.object({
973
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
974
+ skip: z2__default.boolean(),
975
+ step_no: z2__default.number(),
976
+ name: z2__default.string().optional().nullable(),
977
+ status: z2__default.enum(["UNSTARTED", "COMPLETED", "IN_PROGRESS", "TA_PENDING"]),
978
+ metadata: z2__default.object({
979
+ documents: z2__default.object({
980
+ received: z2__default.number(),
981
+ not_received: z2__default.number(),
982
+ not_applicable: z2__default.number(),
983
+ unstarted: z2__default.number(),
984
+ rejected: z2__default.number()
985
+ }),
986
+ kam: z2__default.object({
987
+ first_name: z2__default.string(),
988
+ last_name: z2__default.string(),
989
+ email: z2__default.string(),
990
+ phone: z2__default.string(),
991
+ middle_name: z2__default.string()
992
+ })
993
+ })
994
+ });
995
+ var DocumentsStatusSchema = z2__default.object({
996
+ completed: z2__default.number(),
997
+ rejected: z2__default.number(),
998
+ in_progress: z2__default.number()
999
+ });
1000
+ var AdditionalDocumentsStatusSchema = z2__default.object({
1001
+ completed: z2__default.number(),
1002
+ rejected: z2__default.number(),
1003
+ answered: z2__default.number(),
1004
+ requested: z2__default.number()
1005
+ });
1006
+ var KamSchema = z2__default.object({
1007
+ first_name: z2__default.string(),
1008
+ last_name: z2__default.string(),
1009
+ email: z2__default.string(),
1010
+ phone: z2__default.string(),
1011
+ middle_name: z2__default.string()
1012
+ });
1013
+ var VisaOrderTimelineVerificationSchema = z2__default.object({
1014
+ name: z2__default.string(),
1015
+ status: z2__default.enum(["UNSTARTED", "COMPLETED", "VE_PENDING", "TA_PENDING"]),
1016
+ metadata: z2__default.object({
1017
+ cycle: z2__default.number(),
1018
+ waiting_time: z2__default.string(),
1019
+ visa_form: DocumentsStatusSchema,
1020
+ online_documents: DocumentsStatusSchema,
1021
+ offline_documents: DocumentsStatusSchema,
1022
+ additional_online_documents: AdditionalDocumentsStatusSchema,
1023
+ additional_offline_documents: AdditionalDocumentsStatusSchema,
1024
+ kam: KamSchema
1025
+ }),
1026
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
1027
+ skip: z2__default.boolean(),
1028
+ step_no: z2__default.number()
1029
+ });
1030
+ var VisaOrderTimelineSendPhysicalDocumentsSchema = z2__default.object({
1031
+ name: z2__default.string(),
1032
+ metadata: z2__default.object({
1033
+ kam: KamSchema,
1034
+ address: z2__default.string()
1035
+ }),
1036
+ status: z2__default.enum(["UNSTARTED", "COMPLETED", "VE_PENDING", "TA_PENDING"]),
1037
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
1038
+ skip: z2__default.boolean(),
1039
+ step_no: z2__default.number()
1040
+ });
1041
+ var TimelinePaymentStatus = /* @__PURE__ */ ((TimelinePaymentStatus2) => {
1042
+ TimelinePaymentStatus2["UNSTARTED"] = "UNSTARTED";
1043
+ TimelinePaymentStatus2["INVOICE_PENDING"] = "INVOICE_PENDING";
1044
+ TimelinePaymentStatus2["INVOICE_GENERATED"] = "INVOICE_GENERATED";
1045
+ TimelinePaymentStatus2["PAYMENT_FROM_WALLET_INITIATED"] = "PAYMENT_FROM_WALLET_INITIATED";
1046
+ TimelinePaymentStatus2["PARTIAL_PAYMENT"] = "PARTIAL_PAYMENT";
1047
+ TimelinePaymentStatus2["COMPLETE_PAYMENT"] = "COMPLETE_PAYMENT";
1048
+ TimelinePaymentStatus2["ESTIMATE_CONVERTED_TO_INVOICE"] = "ESTIMATE_CONVERTED_TO_INVOICE";
1049
+ TimelinePaymentStatus2["ORDER_TO_BE_BLOCKED_FOR_PROCESSING"] = "ORDER_TO_BE_BLOCKED_FOR_PROCESSING";
1050
+ return TimelinePaymentStatus2;
1051
+ })(TimelinePaymentStatus || {});
1052
+ var VisaOrderTimelinePaymentSchema = z2__default.object({
1053
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
1054
+ skip: z2__default.boolean(),
1055
+ step_no: z2__default.number(),
1056
+ name: z2__default.string().optional().nullable(),
1057
+ status: z2__default.nativeEnum(TimelinePaymentStatus),
1058
+ metadata: VisaOrderTimelineMetadataSchema.optional().nullable()
1059
+ });
1060
+ var VisaOrderTimelineSubmissionToEmbassySchema = z2__default.object({
1061
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
1062
+ skip: z2__default.boolean(),
1063
+ step_no: z2__default.number(),
1064
+ name: z2__default.string().optional().nullable(),
1065
+ status: z2__default.enum(["UNSTARTED", "COMPLETED", "IN_PROGRESS"]),
1066
+ metadata: VisaOrderTimelineMetadataSchema.optional().nullable()
1067
+ });
1068
+ var VisaOrderTimelineApplicationsVerdictSchema = z2__default.object({
1069
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
1070
+ skip: z2__default.boolean(),
1071
+ step_no: z2__default.number(),
1072
+ name: z2__default.string().optional().nullable(),
1073
+ status: z2__default.enum(["UNSTARTED", "COMPLETED", "IN_PROGRESS"]),
1074
+ metadata: VisaOrderTimelineMetadataSchema.optional().nullable()
1075
+ });
1076
+ var VisaOrderTimelineAppointmentSchema = z2__default.object({
1077
+ completed_at: z2__default.union([z2__default.date(), z2__default.null()]),
1078
+ skip: z2__default.boolean(),
1079
+ step_no: z2__default.number(),
1080
+ name: z2__default.string().optional().nullable(),
1081
+ status: z2__default.enum(["UNSTARTED", "COMPLETED", "IN_PROGRESS"]),
1082
+ metadata: z2__default.object({
1083
+ appointments: z2__default.object({
1084
+ booked: z2__default.number(),
1085
+ pending: z2__default.number()
1086
+ })
1087
+ })
1088
+ });
1089
+ var VisaOrderTimelineSchema = z2__default.object({
1090
+ ["ORDER_CREATION" /* ORDER_CREATION */]: VisaOrderTimelineOrderCreationSchema,
1091
+ ["DOCUMENT_SUBMITTED" /* DOCUMENT_SUBMITTED */]: VisaOrderTimelineDocumentSubmittedSchema,
1092
+ ["VISA_FORM_SUBMITTED" /* VISA_FORM_SUBMITTED */]: VisaOrderTimelineVisaFormSubmittedSchema,
1093
+ ["PHYSICAL_DOCUMENT_VERIFICATION" /* PHYSICAL_DOCUMENT_VERIFICATION */]: VisaOrderTimelinePhysicalDocumentVerificationSchema,
1094
+ ["VERIFICATION" /* VERIFICATION */]: VisaOrderTimelineVerificationSchema,
1095
+ ["SEND_PHYSICAL_DOCUMENTS" /* SEND_PHYSICAL_DOCUMENTS */]: VisaOrderTimelineSendPhysicalDocumentsSchema,
1096
+ ["VERIFICATION_IN_PROCESS" /* VERIFICATION_IN_PROCESS */]: VisaOrderTimelineVerificationInProgressSchema,
1097
+ ["PAYMENT" /* PAYMENT */]: VisaOrderTimelinePaymentSchema,
1098
+ ["SUBMISSION_TO_EMBASSY" /* SUBMISSION_TO_EMBASSY */]: VisaOrderTimelineSubmissionToEmbassySchema,
1099
+ ["VISA_APPLICATIONS_VERDICT" /* VISA_APPLICATIONS_VERDICT */]: VisaOrderTimelineApplicationsVerdictSchema,
1100
+ ["APPOINTMENT" /* APPOINTMENT */]: VisaOrderTimelineAppointmentSchema
1101
+ });
1102
+ var CreatedBySchema = z2__default.object({
1103
+ _id: z2__default.string(),
1104
+ organisation_id: z2__default.string(),
1105
+ phone: z2__default.string(),
1106
+ first_name: z2__default.string(),
1107
+ last_name: z2__default.string(),
1108
+ roles: z2__default.array(z2__default.string()),
1109
+ type: z2__default.string(),
1110
+ is_email_verified: z2__default.boolean(),
1111
+ is_active: z2__default.boolean(),
1112
+ is_deleted: z2__default.boolean(),
1113
+ is_smv_user: z2__default.boolean(),
1114
+ created_at: z2__default.coerce.date(),
1115
+ updated_at: z2__default.coerce.date()
1116
+ });
1117
+ var MetadataSchema = z2__default.object({
1118
+ note_for_visa_expert: z2__default.union([z2__default.null(), z2__default.string()]).optional(),
1119
+ visa_details_sheet: z2__default.union([z2__default.null(), z2__default.string()]).optional(),
1120
+ external_ref_id: z2__default.union([z2__default.null(), z2__default.string()]).optional()
1121
+ });
1122
+ var EstimateAddonSchema = z2__default.object({
1123
+ name: z2__default.string(),
1124
+ add_on_id: z2__default.string(),
1125
+ quantity: z2__default.number(),
1126
+ price: z2__default.number(),
1127
+ comment: z2__default.string(),
1128
+ discount: z2__default.number()
1129
+ });
1130
+ var BillingInfoMetadataSchema = z2__default.object({
1131
+ addons_updated: z2__default.boolean(),
1132
+ addons_updated_at: z2__default.coerce.date(),
1133
+ addons_updated_by: z2__default.string()
1134
+ }).optional();
1135
+ var BillingInfoSchema = z2__default.object({
1136
+ invoice: z2__default.union([z2__default.null(), z2__default.string()]).optional(),
1137
+ order_addons: z2__default.array(EstimateAddonSchema),
1138
+ metadata: BillingInfoMetadataSchema
1139
+ });
1140
+ var CountrySchema = z2__default.object({
1141
+ _id: z2__default.string(),
1142
+ name: z2__default.string(),
1143
+ symbol: z2__default.string(),
1144
+ flag_symbol: z2__default.string(),
1145
+ currency: z2__default.string(),
1146
+ currency_symbol: z2__default.string(),
1147
+ processing_time: z2__default.number(),
1148
+ visa_info_available: z2__default.boolean(),
1149
+ visa_automation_enabled: z2__default.boolean(),
1150
+ search_metadata: z2__default.string(),
1151
+ is_deleted: z2__default.boolean(),
1152
+ is_supported: z2__default.boolean(),
1153
+ is_doorstep: z2__default.boolean(),
1154
+ is_evisa: z2__default.boolean(),
1155
+ is_schengen: z2__default.boolean()
1156
+ });
1157
+ var FeesSchema = z2__default.object({
1158
+ amount: z2__default.union([z2__default.number(), z2__default.null()]).optional(),
1159
+ currency: z2__default.union([z2__default.null(), z2__default.string()]).optional()
1160
+ });
1161
+ var ServiceFeesSchema = z2__default.object({
1162
+ currency: z2__default.string(),
1163
+ amount_b2b: z2__default.number()
1164
+ });
1165
+ var VISA_TYPE_INTERNAL_TAGS = /* @__PURE__ */ ((VISA_TYPE_INTERNAL_TAGS2) => {
1166
+ VISA_TYPE_INTERNAL_TAGS2["SMV_QC"] = "SMV_QC";
1167
+ VISA_TYPE_INTERNAL_TAGS2["TA_QC"] = "TA_QC";
1168
+ VISA_TYPE_INTERNAL_TAGS2["VRI_ORDER"] = "VRI_ORDER";
1169
+ return VISA_TYPE_INTERNAL_TAGS2;
1170
+ })(VISA_TYPE_INTERNAL_TAGS || {});
1171
+ var VisaTypeSchema = z2__default.object({
1172
+ _id: z2__default.string(),
1173
+ purpose: z2__default.array(z2__default.string()),
1174
+ country_symbol: z2__default.string(),
1175
+ flag_symbol: z2__default.string(),
1176
+ visa_type: z2__default.string(),
1177
+ visa_fees: FeesSchema,
1178
+ service_fees: ServiceFeesSchema,
1179
+ vfs_fees: FeesSchema,
1180
+ child_visa_fees: FeesSchema,
1181
+ documents_list: z2__default.string(),
1182
+ apply_before: z2__default.number(),
1183
+ duration_permitted: z2__default.number(),
1184
+ entries_permitted: z2__default.number(),
1185
+ validity_period: z2__default.number(),
1186
+ processing_time: z2__default.number(),
1187
+ visa_type_internal_tags: z2__default.enum(["SMV_QC" /* SMV_QC */, "TA_QC" /* TA_QC */]),
1188
+ created_at: z2__default.string(),
1189
+ updated_at: z2__default.string(),
1190
+ is_deleted: z2__default.boolean()
1191
+ });
1192
+ var TravelAgentSchema = z2__default.object({
1193
+ _id: z2__default.string(),
1194
+ organisation_id: z2__default.string(),
1195
+ phone: z2__default.string(),
1196
+ first_name: z2__default.string(),
1197
+ last_name: z2__default.string()
1198
+ });
1199
+ var PointOfContactSchema = z2__default.object({
1200
+ name: z2__default.string(),
1201
+ email: z2__default.string(),
1202
+ mobile_number: z2__default.string()
1203
+ });
1204
+ var DocumentProofSchema = z2__default.object({
1205
+ type: z2__default.string(),
1206
+ s3_path: z2__default.string()
1207
+ });
1208
+ var OrganisationSchema = z2__default.object({
1209
+ _id: z2__default.string(),
1210
+ name: z2__default.string(),
1211
+ point_of_contact: PointOfContactSchema,
1212
+ document_proof: DocumentProofSchema,
1213
+ state: z2__default.string(),
1214
+ type: z2__default.string(),
1215
+ status: z2__default.string(),
1216
+ agency_logo: z2__default.string()
1217
+ });
1218
+ var PaymentAmountSchema = z2__default.object({
1219
+ total: z2__default.number(),
1220
+ tax_total: z2__default.number(),
1221
+ sub_total: z2__default.number(),
1222
+ balance: z2__default.number()
1223
+ }).partial().optional().nullable();
1224
+ var OrderNotesForVisaExpert = z2__default.array(
1225
+ z2__default.object({
1226
+ note: z2__default.string(),
1227
+ created_at: z2__default.string(),
1228
+ created_by: z2__default.string(),
1229
+ _id: z2__default.string()
1230
+ })
1231
+ );
1232
+ var CfbrOrderMetadataSchema = z2__default.object({
1233
+ visa_rejection_insurance_opted: z2__default.boolean(),
1234
+ symbo_policy_id: z2__default.string(),
1235
+ comm_mails: z2__default.array(z2__default.string()),
1236
+ branch_id: z2__default.string(),
1237
+ miles_credit: z2__default.number(),
1238
+ line_item_id: z2__default.string(),
1239
+ account_id: z2__default.string(),
1240
+ gst_rate: z2__default.number()
1241
+ });
1242
+ z2__default.object({
1243
+ _id: z2__default.string(),
1244
+ application_ids: z2__default.array(z2__default.string()),
1245
+ status: VisaOrderStatusSchema,
1246
+ order_id: z2__default.string(),
1247
+ purpose_of_visit: PurposeOfVisitSchema,
1248
+ coupon: CouponSchema.nullable(),
1249
+ travel_start_date: z2__default.string(),
1250
+ travel_end_date: z2__default.string(),
1251
+ no_of_travelers: z2__default.number(),
1252
+ travellers_for_vri: z2__default.number(),
1253
+ travelers_count: z2__default.object({
1254
+ adults: z2__default.number().min(-1),
1255
+ child: z2__default.number().min(-1)
1256
+ }),
1257
+ qc_terms_and_conditions: z2__default.string().nullable().optional(),
1258
+ internal_tags: z2__default.nativeEnum(INTERNAL_ORDER_TAGS),
1259
+ is_processing_blocked_on_payment: z2__default.nativeEnum(PROCESSING_BLOCKED_ON_PAYMENT_STATUS),
1260
+ timeline_status: VisaOrderTimelineStepSchema,
1261
+ timeline: VisaOrderTimelineSchema,
1262
+ created_by: z2__default.union([CreatedBySchema, z2__default.string()]),
1263
+ metadata: z2__default.union([MetadataSchema, z2__default.null()]).optional(),
1264
+ billing_info: BillingInfoSchema,
1265
+ expected_delivery_date: z2__default.string(),
1266
+ created_at: z2__default.string(),
1267
+ updated_at: z2__default.string(),
1268
+ is_demo_order: z2__default.boolean(),
1269
+ visa_rejection_added: z2__default.boolean(),
1270
+ visa_experts: z2__default.array(z2__default.string()),
1271
+ country: CountrySchema,
1272
+ visa_type: VisaTypeSchema,
1273
+ travel_agent: TravelAgentSchema,
1274
+ organisation: OrganisationSchema,
1275
+ doorstep_pickup: z2__default.boolean(),
1276
+ kam: z2__default.object({
1277
+ first_name: z2__default.string(),
1278
+ last_name: z2__default.string(),
1279
+ email: z2__default.string(),
1280
+ phone: z2__default.string(),
1281
+ middle_name: z2__default.string(),
1282
+ _id: z2__default.string()
1283
+ }).nullable(),
1284
+ invoice_amount: PaymentAmountSchema,
1285
+ invoice_details: z2__default.object({
1286
+ invoice_id: z2__default.string().optional(),
1287
+ invoice_number: z2__default.string().optional(),
1288
+ date: z2__default.string().optional(),
1289
+ due_date: z2__default.string().optional(),
1290
+ status: z2__default.string().optional(),
1291
+ invoice_url: z2__default.string().optional(),
1292
+ last_modified_time: z2__default.string().optional(),
1293
+ invoice_source: z2__default.string().optional()
1294
+ }).optional(),
1295
+ estimate_details: z2__default.object({
1296
+ estimate_id: z2__default.string().optional(),
1297
+ estimate_number: z2__default.string().optional(),
1298
+ estimate_url: z2__default.string().optional(),
1299
+ estimate_status: z2__default.string().optional()
1300
+ }).nullable().optional(),
1301
+ estimate_amount: PaymentAmountSchema,
1302
+ notes_from_ta: OrderNotesForVisaExpert,
1303
+ miles_config: z2__default.object({
1304
+ max_deductible_amount: z2__default.number(),
1305
+ only_for_service_fee: z2__default.boolean(),
1306
+ service_fee_percentage: z2__default.number()
1307
+ }),
1308
+ cfbr_metadata: CfbrOrderMetadataSchema.optional()
1309
+ });
1310
+
1311
+ // src/index.ts
1312
+ var initializeEDCFlow = (config) => {
1313
+ initializeApiClient(config);
1314
+ };
1315
+ var EDCFlow = {
1316
+ initialize: initializeEDCFlow,
1317
+ Provider: EDCFlowProvider,
1318
+ useEDCFlow
1319
+ };
1320
+ var index_default = EDCFlow;
1321
+
1322
+ export { APPLICATION_STATUS, APPLICATION_TAGS, AnswerSchema, ApplicationSchema, EDCFlowProvider, INTERNAL_ORDER_TAGS, PROCESSING_BLOCKED_ON_PAYMENT_STATUS, QuestionnaireSchema, TA_QC_EXTRACTION_STATUS, TIMELINE_STEP, TimelinePaymentStatus, TravellerSchema, VISA_TYPE_INTERNAL_TAGS, createAllQuestionsWithAnswers, createApplicantData, index_default as default, filterConditionalQuestions, formatAnswerFromResponse, formatTravellerFromResponse, getSignedUrlFromAsset, getVisibleQuestions, initializeEDCFlow, updateApplicantWithAnswer, useEDCFlow };