@voyant-travel/storefront 0.120.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +231 -0
  3. package/dist/booking-intents.d.ts +42 -0
  4. package/dist/booking-intents.d.ts.map +1 -0
  5. package/dist/booking-intents.js +83 -0
  6. package/dist/customer-portal/index.d.ts +16 -0
  7. package/dist/customer-portal/index.d.ts.map +1 -0
  8. package/dist/customer-portal/index.js +23 -0
  9. package/dist/customer-portal/route-runtime.d.ts +16 -0
  10. package/dist/customer-portal/route-runtime.d.ts.map +1 -0
  11. package/dist/customer-portal/route-runtime.js +27 -0
  12. package/dist/customer-portal/routes-public.d.ts +1936 -0
  13. package/dist/customer-portal/routes-public.d.ts.map +1 -0
  14. package/dist/customer-portal/routes-public.js +165 -0
  15. package/dist/customer-portal/routes.d.ts +43 -0
  16. package/dist/customer-portal/routes.d.ts.map +1 -0
  17. package/dist/customer-portal/routes.js +17 -0
  18. package/dist/customer-portal/service-public-impl.d.ts +138 -0
  19. package/dist/customer-portal/service-public-impl.d.ts.map +1 -0
  20. package/dist/customer-portal/service-public-impl.js +1808 -0
  21. package/dist/customer-portal/service-public.d.ts +2 -0
  22. package/dist/customer-portal/service-public.d.ts.map +1 -0
  23. package/dist/customer-portal/service-public.js +1 -0
  24. package/dist/customer-portal/validation-public/bookings.d.ts +551 -0
  25. package/dist/customer-portal/validation-public/bookings.d.ts.map +1 -0
  26. package/dist/customer-portal/validation-public/bookings.js +132 -0
  27. package/dist/customer-portal/validation-public/common.d.ts +162 -0
  28. package/dist/customer-portal/validation-public/common.d.ts.map +1 -0
  29. package/dist/customer-portal/validation-public/common.js +139 -0
  30. package/dist/customer-portal/validation-public/profile.d.ts +749 -0
  31. package/dist/customer-portal/validation-public/profile.d.ts.map +1 -0
  32. package/dist/customer-portal/validation-public/profile.js +308 -0
  33. package/dist/customer-portal/validation-public.d.ts +3 -0
  34. package/dist/customer-portal/validation-public.d.ts.map +1 -0
  35. package/dist/customer-portal/validation-public.js +2 -0
  36. package/dist/guest-booking-guard.d.ts +24 -0
  37. package/dist/guest-booking-guard.d.ts.map +1 -0
  38. package/dist/guest-booking-guard.js +55 -0
  39. package/dist/index.d.ts +23 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +41 -0
  42. package/dist/product-extra-ref.d.ts +238 -0
  43. package/dist/product-extra-ref.d.ts.map +1 -0
  44. package/dist/product-extra-ref.js +22 -0
  45. package/dist/routes-admin.d.ts +220 -0
  46. package/dist/routes-admin.d.ts.map +1 -0
  47. package/dist/routes-admin.js +28 -0
  48. package/dist/routes-public.d.ts +1475 -0
  49. package/dist/routes-public.d.ts.map +1 -0
  50. package/dist/routes-public.js +362 -0
  51. package/dist/service-booking-session-bootstrap.d.ts +227 -0
  52. package/dist/service-booking-session-bootstrap.d.ts.map +1 -0
  53. package/dist/service-booking-session-bootstrap.js +287 -0
  54. package/dist/service-boundary-resource-sql.d.ts +18 -0
  55. package/dist/service-boundary-resource-sql.d.ts.map +1 -0
  56. package/dist/service-boundary-resource-sql.js +73 -0
  57. package/dist/service-boundary-sql.d.ts +103 -0
  58. package/dist/service-boundary-sql.d.ts.map +1 -0
  59. package/dist/service-boundary-sql.js +307 -0
  60. package/dist/service-departures-core.d.ts +41 -0
  61. package/dist/service-departures-core.d.ts.map +1 -0
  62. package/dist/service-departures-core.js +92 -0
  63. package/dist/service-departures-extensions.d.ts +46 -0
  64. package/dist/service-departures-extensions.d.ts.map +1 -0
  65. package/dist/service-departures-extensions.js +81 -0
  66. package/dist/service-departures-offers.d.ts +220 -0
  67. package/dist/service-departures-offers.d.ts.map +1 -0
  68. package/dist/service-departures-offers.js +177 -0
  69. package/dist/service-departures-price-preview.d.ts +306 -0
  70. package/dist/service-departures-price-preview.d.ts.map +1 -0
  71. package/dist/service-departures-price-preview.js +383 -0
  72. package/dist/service-departures-pricing-context.d.ts +115 -0
  73. package/dist/service-departures-pricing-context.d.ts.map +1 -0
  74. package/dist/service-departures-pricing-context.js +237 -0
  75. package/dist/service-departures-pricing.d.ts +5 -0
  76. package/dist/service-departures-pricing.d.ts.map +1 -0
  77. package/dist/service-departures-pricing.js +4 -0
  78. package/dist/service-departures.d.ts +192 -0
  79. package/dist/service-departures.d.ts.map +1 -0
  80. package/dist/service-departures.js +213 -0
  81. package/dist/service-intake.d.ts +130 -0
  82. package/dist/service-intake.d.ts.map +1 -0
  83. package/dist/service-intake.js +274 -0
  84. package/dist/service-transport-eligibility.d.ts +10 -0
  85. package/dist/service-transport-eligibility.d.ts.map +1 -0
  86. package/dist/service-transport-eligibility.js +198 -0
  87. package/dist/service.d.ts +1062 -0
  88. package/dist/service.d.ts.map +1 -0
  89. package/dist/service.js +332 -0
  90. package/dist/transport-eligibility.d.ts +4 -0
  91. package/dist/transport-eligibility.d.ts.map +1 -0
  92. package/dist/transport-eligibility.js +2 -0
  93. package/dist/validation/departures.d.ts +1669 -0
  94. package/dist/validation/departures.d.ts.map +1 -0
  95. package/dist/validation/departures.js +397 -0
  96. package/dist/validation/intake.d.ts +147 -0
  97. package/dist/validation/intake.d.ts.map +1 -0
  98. package/dist/validation/intake.js +69 -0
  99. package/dist/validation/offers.d.ts +340 -0
  100. package/dist/validation/offers.d.ts.map +1 -0
  101. package/dist/validation/offers.js +117 -0
  102. package/dist/validation-settings.d.ts +609 -0
  103. package/dist/validation-settings.d.ts.map +1 -0
  104. package/dist/validation-settings.js +235 -0
  105. package/dist/validation-transport-eligibility.d.ts +314 -0
  106. package/dist/validation-transport-eligibility.d.ts.map +1 -0
  107. package/dist/validation-transport-eligibility.js +97 -0
  108. package/dist/validation.d.ts +6 -0
  109. package/dist/validation.d.ts.map +1 -0
  110. package/dist/validation.js +4 -0
  111. package/dist/verification/index.d.ts +12 -0
  112. package/dist/verification/index.d.ts.map +1 -0
  113. package/dist/verification/index.js +18 -0
  114. package/dist/verification/routes-public.d.ts +121 -0
  115. package/dist/verification/routes-public.d.ts.map +1 -0
  116. package/dist/verification/routes-public.js +125 -0
  117. package/dist/verification/schema.d.ts +273 -0
  118. package/dist/verification/schema.d.ts.map +1 -0
  119. package/dist/verification/schema.js +50 -0
  120. package/dist/verification/service.d.ts +114 -0
  121. package/dist/verification/service.d.ts.map +1 -0
  122. package/dist/verification/service.js +283 -0
  123. package/dist/verification/validation.d.ts +98 -0
  124. package/dist/verification/validation.d.ts.map +1 -0
  125. package/dist/verification/validation.js +54 -0
  126. package/package.json +148 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,332 @@
1
+ import { bootstrapStorefrontBookingSession, } from "./service-booking-session-bootstrap.js";
2
+ import { getStorefrontDeparture, getStorefrontDepartureItinerary, getStorefrontProductAvailabilitySummary, getStorefrontProductExtensions, listStorefrontProductDepartures, previewStorefrontDeparturePrice, } from "./service-departures.js";
3
+ import { createStorefrontLeadSignal, subscribeStorefrontNewsletter, } from "./service-intake.js";
4
+ import { evaluateStorefrontTransportEligibility } from "./service-transport-eligibility.js";
5
+ import { storefrontSettingsInputSchema, storefrontSettingsSchema, } from "./validation.js";
6
+ const defaultPaymentLabels = {
7
+ card: "Card",
8
+ bank_transfer: "Bank transfer",
9
+ cash: "Cash",
10
+ voucher: "Voucher",
11
+ invoice: "Invoice",
12
+ };
13
+ function normalizeField(field) {
14
+ return {
15
+ key: field.key,
16
+ label: field.label,
17
+ type: field.type,
18
+ required: field.required,
19
+ placeholder: field.placeholder ?? null,
20
+ description: field.description ?? null,
21
+ autocomplete: field.autocomplete ?? null,
22
+ options: field.options,
23
+ };
24
+ }
25
+ function normalizePaymentMethod(method) {
26
+ return {
27
+ code: method.code,
28
+ label: method.label ?? defaultPaymentLabels[method.code],
29
+ description: method.description ?? null,
30
+ enabled: method.enabled,
31
+ };
32
+ }
33
+ function normalizePaymentSchedule(schedule) {
34
+ if (!schedule)
35
+ return null;
36
+ return {
37
+ depositPercent: schedule.depositPercent ?? null,
38
+ balanceDueDaysBeforeDeparture: schedule.balanceDueDaysBeforeDeparture ?? null,
39
+ };
40
+ }
41
+ function scheduleEntriesFromDefaultSchedule(schedule) {
42
+ if (!schedule?.depositPercent || schedule.depositPercent >= 100) {
43
+ return [];
44
+ }
45
+ const remainderPercent = 100 - schedule.depositPercent;
46
+ return [
47
+ {
48
+ percent: schedule.depositPercent,
49
+ dueInDays: 0,
50
+ dueCondition: "after_booking",
51
+ },
52
+ {
53
+ percent: remainderPercent,
54
+ dueInDays: schedule.balanceDueDaysBeforeDeparture ?? 0,
55
+ dueCondition: "before_departure",
56
+ },
57
+ ];
58
+ }
59
+ function normalizePaymentScheduleEntries(schedule, defaultSchedule) {
60
+ if (schedule)
61
+ return schedule;
62
+ return scheduleEntriesFromDefaultSchedule(defaultSchedule);
63
+ }
64
+ function normalizePaymentStructure(structure, schedule, defaultSchedule) {
65
+ if (structure)
66
+ return structure;
67
+ if (schedule.length > 0)
68
+ return "split";
69
+ return defaultSchedule?.depositPercent && defaultSchedule.depositPercent > 0 ? "split" : "full";
70
+ }
71
+ function normalizeBankTransferAccount(account, bankTransfer) {
72
+ const resolved = account ??
73
+ (bankTransfer.iban && bankTransfer.accountHolder && bankTransfer.bankName
74
+ ? {
75
+ provider: null,
76
+ currency: null,
77
+ iban: bankTransfer.iban,
78
+ beneficiary: bankTransfer.accountHolder,
79
+ bank: bankTransfer.bankName,
80
+ }
81
+ : null);
82
+ if (!resolved)
83
+ return null;
84
+ return {
85
+ provider: resolved.provider ?? null,
86
+ currency: resolved.currency ?? null,
87
+ iban: resolved.iban,
88
+ beneficiary: resolved.beneficiary,
89
+ bank: resolved.bank,
90
+ };
91
+ }
92
+ function normalizeBankTransfer(bankTransfer) {
93
+ if (!bankTransfer)
94
+ return null;
95
+ return {
96
+ dueDays: bankTransfer.dueDays ?? null,
97
+ account: normalizeBankTransferAccount(bankTransfer.account, bankTransfer),
98
+ accountHolder: bankTransfer.accountHolder ?? null,
99
+ bankName: bankTransfer.bankName ?? null,
100
+ iban: bankTransfer.iban ?? null,
101
+ bic: bankTransfer.bic ?? null,
102
+ paymentReference: bankTransfer.paymentReference ?? null,
103
+ instructions: bankTransfer.instructions ?? null,
104
+ };
105
+ }
106
+ function mergePaymentSchedule(current, patch) {
107
+ if (patch === null)
108
+ return null;
109
+ return {
110
+ ...(current ?? {
111
+ depositPercent: null,
112
+ balanceDueDaysBeforeDeparture: null,
113
+ }),
114
+ ...patch,
115
+ };
116
+ }
117
+ function mergeBankTransfer(current, patch) {
118
+ if (patch === null)
119
+ return null;
120
+ const merged = {
121
+ ...(current ?? {
122
+ dueDays: null,
123
+ account: null,
124
+ accountHolder: null,
125
+ bankName: null,
126
+ iban: null,
127
+ bic: null,
128
+ paymentReference: null,
129
+ instructions: null,
130
+ }),
131
+ ...patch,
132
+ };
133
+ const shouldRefreshAccountFromLegacyFields = patch.account === undefined &&
134
+ ("accountHolder" in patch || "bankName" in patch || "iban" in patch);
135
+ return {
136
+ ...merged,
137
+ account: normalizeBankTransferAccount(shouldRefreshAccountFromLegacyFields ? null : merged.account, merged),
138
+ };
139
+ }
140
+ export function resolveStorefrontSettings(input) {
141
+ const parsed = storefrontSettingsInputSchema.parse(input ?? {});
142
+ const defaultSchedule = normalizePaymentSchedule(parsed.payment?.defaultSchedule ?? null);
143
+ const schedule = normalizePaymentScheduleEntries(parsed.payment?.schedule, defaultSchedule);
144
+ return storefrontSettingsSchema.parse({
145
+ branding: {
146
+ logoUrl: parsed.branding?.logoUrl ?? null,
147
+ faviconUrl: parsed.branding?.faviconUrl ?? null,
148
+ brandMarkUrl: parsed.branding?.brandMarkUrl ?? null,
149
+ primaryColor: parsed.branding?.primaryColor ?? null,
150
+ accentColor: parsed.branding?.accentColor ?? null,
151
+ supportedLanguages: parsed.branding?.supportedLanguages ?? [],
152
+ },
153
+ support: {
154
+ email: parsed.support?.email ?? null,
155
+ phone: parsed.support?.phone ?? null,
156
+ links: parsed.support?.links ?? [],
157
+ },
158
+ legal: {
159
+ termsUrl: parsed.legal?.termsUrl ?? null,
160
+ privacyUrl: parsed.legal?.privacyUrl ?? null,
161
+ cancellationUrl: parsed.legal?.cancellationUrl ?? null,
162
+ defaultContractTemplateId: parsed.legal?.defaultContractTemplateId ?? null,
163
+ },
164
+ localization: {
165
+ defaultLocale: parsed.localization?.defaultLocale ?? null,
166
+ currencyDisplay: parsed.localization?.currencyDisplay ?? "code",
167
+ },
168
+ forms: {
169
+ billing: {
170
+ fields: (parsed.forms?.billing?.fields ?? []).map(normalizeField),
171
+ },
172
+ travelers: {
173
+ fields: (parsed.forms?.travelers?.fields ?? []).map(normalizeField),
174
+ },
175
+ },
176
+ payment: {
177
+ defaultMethod: parsed.payment?.defaultMethod ?? null,
178
+ methods: (parsed.payment?.methods ?? []).map(normalizePaymentMethod),
179
+ structure: normalizePaymentStructure(parsed.payment?.structure, schedule, defaultSchedule),
180
+ schedule,
181
+ defaultSchedule,
182
+ bankTransfer: normalizeBankTransfer(parsed.payment?.bankTransfer ?? null),
183
+ },
184
+ });
185
+ }
186
+ export function mergeStorefrontSettingsPatch(current, patch) {
187
+ return resolveStorefrontSettings({
188
+ branding: patch.branding ? { ...current.branding, ...patch.branding } : current.branding,
189
+ support: patch.support ? { ...current.support, ...patch.support } : current.support,
190
+ legal: patch.legal ? { ...current.legal, ...patch.legal } : current.legal,
191
+ localization: patch.localization
192
+ ? { ...current.localization, ...patch.localization }
193
+ : current.localization,
194
+ forms: patch.forms
195
+ ? {
196
+ billing: patch.forms.billing
197
+ ? { ...current.forms.billing, ...patch.forms.billing }
198
+ : current.forms.billing,
199
+ travelers: patch.forms.travelers
200
+ ? { ...current.forms.travelers, ...patch.forms.travelers }
201
+ : current.forms.travelers,
202
+ }
203
+ : current.forms,
204
+ payment: patch.payment
205
+ ? {
206
+ ...current.payment,
207
+ ...patch.payment,
208
+ defaultSchedule: patch.payment.defaultSchedule === undefined
209
+ ? current.payment.defaultSchedule
210
+ : mergePaymentSchedule(current.payment.defaultSchedule, patch.payment.defaultSchedule),
211
+ bankTransfer: patch.payment.bankTransfer === undefined
212
+ ? current.payment.bankTransfer
213
+ : mergeBankTransfer(current.payment.bankTransfer, patch.payment.bankTransfer),
214
+ }
215
+ : current.payment,
216
+ });
217
+ }
218
+ export function createStorefrontService(options) {
219
+ const settings = resolveStorefrontSettings(options?.settings);
220
+ async function resolveSettings(context = {}) {
221
+ if (!options?.resolveSettings) {
222
+ return settings;
223
+ }
224
+ return resolveStorefrontSettings(await options.resolveSettings(context));
225
+ }
226
+ async function updateSettings(patch, context = {}) {
227
+ if (!options?.updateSettings) {
228
+ return null;
229
+ }
230
+ const current = await resolveSettings(context);
231
+ const next = mergeStorefrontSettingsPatch(current, patch);
232
+ return resolveStorefrontSettings(await options.updateSettings(next, context));
233
+ }
234
+ async function resolveOffers(context = {}) {
235
+ return (await options?.resolveOffers?.(context)) ?? options?.offers;
236
+ }
237
+ async function resolveTransportEligibilityRules(input) {
238
+ return ((await options?.resolveTransportEligibilityRules?.(input)) ??
239
+ options?.transportEligibilityRules ??
240
+ []);
241
+ }
242
+ async function checkIntakeGuard(input) {
243
+ return options?.intake?.guard?.(input);
244
+ }
245
+ return {
246
+ getSettings() {
247
+ return settings;
248
+ },
249
+ resolveSettings,
250
+ updateSettings,
251
+ getDeparture(db, departureId) {
252
+ return getStorefrontDeparture(db, departureId);
253
+ },
254
+ listProductDepartures(db, productId, query) {
255
+ return listStorefrontProductDepartures(db, productId, query);
256
+ },
257
+ previewDeparturePrice(db, departureId, input, context = {}) {
258
+ const offerContext = { ...context, db: context.db ?? db };
259
+ return previewStorefrontDeparturePrice(db, departureId, input, {
260
+ listApplicableOffers: async (offerInput) => {
261
+ const offers = await resolveOffers(offerContext)?.then((resolvers) => resolvers?.listApplicableOffers?.({ ...offerInput, ...offerContext }));
262
+ return offers ?? [];
263
+ },
264
+ applyOffer: async (offerInput) => (await resolveOffers(offerContext)?.then((resolvers) => resolvers?.applyOffer?.({ ...offerInput, ...offerContext }))) ?? null,
265
+ redeemOffer: async (offerInput) => (await resolveOffers(offerContext)?.then((resolvers) => resolvers?.redeemOffer?.({ ...offerInput, ...offerContext }))) ?? null,
266
+ });
267
+ },
268
+ getProductExtensions(db, productId, optionId) {
269
+ return getStorefrontProductExtensions(db, productId, optionId);
270
+ },
271
+ getProductAvailabilitySummary(db, productId, query) {
272
+ return getStorefrontProductAvailabilitySummary(db, productId, query);
273
+ },
274
+ getDepartureItinerary(db, input) {
275
+ return getStorefrontDepartureItinerary(db, input);
276
+ },
277
+ async checkDepartureTransportEligibility(input) {
278
+ const { context, body, departureId } = input;
279
+ const needsDeparture = context?.db && (!input.productId || !body.travelStartsOn || !body.travelEndsOn);
280
+ const departure = needsDeparture && context?.db ? await getStorefrontDeparture(context.db, departureId) : null;
281
+ const productId = input.productId ?? departure?.productId ?? null;
282
+ const travelStartsOn = body.travelStartsOn ?? departure?.dateLocal ?? departure?.startAt?.slice(0, 10) ?? null;
283
+ const travelEndsOn = body.travelEndsOn ?? departure?.endAt?.slice(0, 10) ?? departure?.dateLocal ?? null;
284
+ const rules = await resolveTransportEligibilityRules({
285
+ ...(context ?? {}),
286
+ departureId,
287
+ productId,
288
+ travelStartsOn,
289
+ travelEndsOn,
290
+ });
291
+ return evaluateStorefrontTransportEligibility({
292
+ departureId,
293
+ productId,
294
+ travelStartsOn,
295
+ travelEndsOn,
296
+ travelers: body.travelers,
297
+ rules,
298
+ });
299
+ },
300
+ async bootstrapBookingSession(context, input, userId) {
301
+ return bootstrapStorefrontBookingSession(context, input, options?.bookingSessionBootstrap, userId);
302
+ },
303
+ async listApplicableOffers(input) {
304
+ const { context, ...offerInput } = input;
305
+ const offers = await resolveOffers(context)?.then((resolvers) => resolvers?.listApplicableOffers?.({ ...offerInput, ...(context ?? {}) }));
306
+ return offers ?? [];
307
+ },
308
+ async getOfferBySlug(input) {
309
+ const { context, ...offerInput } = input;
310
+ return ((await resolveOffers(context)?.then((resolvers) => resolvers?.getOfferBySlug?.({ ...offerInput, ...(context ?? {}) }))) ?? null);
311
+ },
312
+ async applyOffer(input) {
313
+ const { context, ...offerInput } = input;
314
+ return ((await resolveOffers(context)?.then((resolvers) => resolvers?.applyOffer?.({ ...offerInput, ...(context ?? {}) }))) ?? null);
315
+ },
316
+ async redeemOffer(input) {
317
+ const { context, ...offerInput } = input;
318
+ return ((await resolveOffers(context)?.then((resolvers) => resolvers?.redeemOffer?.({ ...offerInput, ...(context ?? {}) }))) ?? null);
319
+ },
320
+ checkIntakeGuard,
321
+ createLead(input) {
322
+ return createStorefrontLeadSignal({ ...input, intake: options?.intake });
323
+ },
324
+ subscribeNewsletter(input) {
325
+ return subscribeStorefrontNewsletter({
326
+ ...input,
327
+ intake: options?.intake,
328
+ requestDoubleOptIn: options?.intake?.requestNewsletterDoubleOptIn,
329
+ });
330
+ },
331
+ };
332
+ }
@@ -0,0 +1,4 @@
1
+ export { evaluateStorefrontTransportEligibility } from "./service-transport-eligibility.js";
2
+ export type { StorefrontTransportEligibilityInput, StorefrontTransportEligibilityIssue, StorefrontTransportEligibilityResult, StorefrontTransportEligibilityRule, StorefrontTransportEligibilityRuleInput, } from "./validation-transport-eligibility.js";
3
+ export { storefrontRequiredDocumentTypeSchema, storefrontTransportEligibilityDocumentInputSchema, storefrontTransportEligibilityInputSchema, storefrontTransportEligibilityIssueCodeSchema, storefrontTransportEligibilityIssueSchema, storefrontTransportEligibilityResultSchema, storefrontTransportEligibilityRuleSchema, storefrontTransportEligibilitySeveritySchema, storefrontTransportEligibilityTravelerInputSchema, storefrontTransportEligibilityTravelerResultSchema, storefrontTravelDocumentTypeSchema, } from "./validation-transport-eligibility.js";
4
+ //# sourceMappingURL=transport-eligibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-eligibility.d.ts","sourceRoot":"","sources":["../src/transport-eligibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sCAAsC,EAAE,MAAM,oCAAoC,CAAA;AAC3F,YAAY,EACV,mCAAmC,EACnC,mCAAmC,EACnC,oCAAoC,EACpC,kCAAkC,EAClC,uCAAuC,GACxC,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EACL,oCAAoC,EACpC,iDAAiD,EACjD,yCAAyC,EACzC,6CAA6C,EAC7C,yCAAyC,EACzC,0CAA0C,EAC1C,wCAAwC,EACxC,4CAA4C,EAC5C,iDAAiD,EACjD,kDAAkD,EAClD,kCAAkC,GACnC,MAAM,uCAAuC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { evaluateStorefrontTransportEligibility } from "./service-transport-eligibility.js";
2
+ export { storefrontRequiredDocumentTypeSchema, storefrontTransportEligibilityDocumentInputSchema, storefrontTransportEligibilityInputSchema, storefrontTransportEligibilityIssueCodeSchema, storefrontTransportEligibilityIssueSchema, storefrontTransportEligibilityResultSchema, storefrontTransportEligibilityRuleSchema, storefrontTransportEligibilitySeveritySchema, storefrontTransportEligibilityTravelerInputSchema, storefrontTransportEligibilityTravelerResultSchema, storefrontTravelDocumentTypeSchema, } from "./validation-transport-eligibility.js";