@zenky/storefront-vue 0.10.18 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/dist/cart/index.js +5 -5
- package/dist/{chunk-6BXHWR5E.js → chunk-5KCBZJV3.js} +45 -12
- package/dist/chunk-5KCBZJV3.js.map +1 -0
- package/dist/{chunk-LABBB43Q.js → chunk-KK645XNR.js} +162 -4
- package/dist/chunk-KK645XNR.js.map +1 -0
- package/dist/{chunk-YTYCSTHP.js → chunk-PBBVWWMI.js} +3 -3
- package/dist/{chunk-YTYCSTHP.js.map → chunk-PBBVWWMI.js.map} +1 -1
- package/dist/{chunk-2DUKIVKC.js → chunk-QFKA2R6D.js} +3 -3
- package/dist/{chunk-2DUKIVKC.js.map → chunk-QFKA2R6D.js.map} +1 -1
- package/dist/{chunk-T52G6JN7.js → chunk-TXR76IDL.js} +16 -3
- package/dist/chunk-TXR76IDL.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +8 -8
- package/dist/products/index.d.ts +41 -2
- package/dist/products/index.js +2 -2
- package/dist/promotions/index.js +2 -2
- package/dist/seo/index.js +3 -3
- package/dist/stores/index.d.ts +3 -2
- package/dist/stores/index.js +3 -3
- package/docs/consumer-setup.md +1 -1
- package/package.json +3 -3
- package/dist/chunk-6BXHWR5E.js.map +0 -1
- package/dist/chunk-LABBB43Q.js.map +0 -1
- package/dist/chunk-T52G6JN7.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stores/products.ts","../src/stores/authFlow.ts","../src/stores/useStore.ts","../src/stores/useStorefrontProfile.ts"],"names":["defineStore","ref","computed"],"mappings":"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","file":"chunk-YTYCSTHP.js","sourcesContent":["import { defineStore } from 'pinia'\nimport { computed, ref, type ComputedRef, type Ref } from 'vue'\n\nimport type { Product } from '@zenky/storefront-api'\n\n// Explicit return type — keeps `Product` as a named reference in the .d.ts instead of expanding it.\nexport interface ProductsStore {\n products: Ref<Product[]>\n setProducts: (list: Product[]) => void\n hasProducts: ComputedRef<boolean>\n}\n\n// Products live in this store, but it's populated from the catalog, not from a separate API call.\nexport const useProductsStore = defineStore('zenky-products', (): ProductsStore => {\n const products = ref<Product[]>([])\n\n function setProducts(list: Product[]): void {\n products.value = list\n }\n\n const hasProducts = computed(() => products.value.length > 0)\n\n return { products, setProducts, hasProducts }\n})\n","import { RecaptchaAction } from '@zenky/storefront-api'\n\nimport type { RequestedConfirmationMethod } from '@zenky/storefront-api'\nimport { defineStore } from 'pinia'\nimport { customRef, ref, type ComputedRef, type Ref } from 'vue'\n\nimport { useAvailableConfirmationChannels } from '../auth/useAvailableConfirmationChannels'\nimport {\n AUTH_STEP,\n CHANNEL_INTENT,\n CODE_CONTEXT,\n CONFIRMATION_CHANNEL,\n toConfirmationChannel,\n toRequestedMethod,\n type AuthStep,\n type ChannelIntent,\n type CodeContext,\n type ConfirmationChannel,\n type SelectableConfirmationChannel,\n} from '../auth/types'\n// Тот же провайдер и error-парсинг, что уже использует useCheckoutSubmit — не дублируем.\n// getCartErrorMessage (в отличие от старой локальной версии) никогда не пропускает наружу\n// сырой e.message для не-ZenkyError — только `fallback`.\nimport {\n getCartErrorCode,\n getCartErrorMessage,\n getValidationErrors,\n logCartError,\n} from '../cart/logCartError'\nimport type { RecaptchaPayloadProvider } from '../cart/useCheckoutSubmit'\nimport type { StorefrontMessageKey } from '../ports'\nimport { useRuntime } from '../ports/runtime'\nimport { useAuthStore } from './auth'\nimport { useStoreProfileStore } from './store-profile'\n\nconst RESEND_TIMER_SECONDS = 60\nexport { RESEND_TIMER_SECONDS }\n\nconst AUTH_ERROR_CODE = {\n ConfirmationRequired: 'auth.registration.confirmation_required',\n InvalidCode: 'auth.confirmation.invalid_code',\n InvalidRegistrationCode: 'auth.registration.invalid_confirmation_code',\n InvalidResetCode: 'auth.password_reset.invalid_code',\n ExpiredCode: 'auth.confirmation.expired_code',\n OtpRequestFailed: 'auth.otp_request.failed',\n} as const\n\n// Named return type (the dts rule).\nexport interface AuthFlowStore {\n currentStep: Ref<AuthStep>\n phone: Ref<string>\n countryCode: Ref<string>\n loading: Ref<boolean>\n error: Ref<string | null>\n fieldErrors: Ref<Record<string, string[]>>\n codeContext: Ref<CodeContext>\n confirmationMethod: Ref<ConfirmationChannel | null>\n /** Какой flow привёл на AUTH_STEP.Channel — публичное, часть $state (SSR-гидратируется). */\n channelIntent: Ref<ChannelIntent | null>\n /**\n * Канал, на котором последний раз получили `auth.otp_request.failed`. UI может\n * скрыть/задизейблить эту кнопку на повторном показе Channel — бэк уже отказал,\n * выбор того же канала снова даст ту же ошибку.\n */\n lastFailedChannel: Ref<SelectableConfirmationChannel | null>\n resetCode: Ref<string>\n registerCode: Ref<string>\n resendTimerEndsAt: Ref<number>\n pendingPassword: Ref<string>\n availableChannels: ComputedRef<SelectableConfirmationChannel[]>\n checkPhone: (getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<void>\n /**\n * @returns true — токен получен, флоу завершён. false — либо ошибка (см. `error`),\n * либо телефон зарегистрирован, но не подтверждён: код уже отправлен и `currentStep`\n * ушёл на Code/Channel — в этом случае `error` пустой, это не сбой.\n */\n login: (password: string, getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<boolean>\n /** @returns true — токен получен (сразу или через login-fallback при 0 каналах), false — код отправлен / ошибка / шаг выбора канала */\n register: (password: string, getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<boolean>\n confirmRegistration: (code: string, password?: string) => Promise<boolean>\n resendCode: (getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<number>\n dispatchReset: (getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<void>\n resetPassword: (code: string, password: string) => Promise<boolean>\n selectChannel: (\n channel: SelectableConfirmationChannel,\n getRecaptchaPayload: RecaptchaPayloadProvider\n ) => Promise<boolean>\n /** Сбрасывает выбранный канал перед ручным resend — иначе гейт сработает только один раз. */\n changeChannel: () => void\n goToChannelBack: () => void\n goToReset: () => void\n goToPhone: () => void\n goToMethod: () => void\n goToLogin: () => void\n goToNewPassword: (code: string) => void\n goToResetCode: () => void\n goToRegisterPassword: (code: string) => void\n goToRegisterCode: () => void\n reset: () => void\n}\n\nexport const useAuthFlowStore = defineStore('zenky-auth-flow', (): AuthFlowStore => {\n const { sdk, notifier, messages } = useRuntime()\n const authStore = useAuthStore()\n const profileStore = useStoreProfileStore()\n\n const currentStep = ref<AuthStep>(AUTH_STEP.Phone)\n const phone = invalidatingRef('')\n const countryCode = invalidatingRef('RU')\n const loading = ref(false)\n const error = ref<string | null>(null)\n const codeContext = ref<CodeContext>(CODE_CONTEXT.Register)\n const confirmationMethod = ref<ConfirmationChannel | null>(null)\n const resetCode = ref('')\n const registerCode = ref('')\n const resendTimerEndsAt = ref(0)\n const fieldErrors = ref<Record<string, string[]>>({})\n const pendingPassword = ref('')\n const channelIntent = ref<ChannelIntent | null>(null)\n const lastFailedChannel = ref<SelectableConfirmationChannel | null>(null)\n\n /**\n * Race-condition guard. Каждый top-level вызов получает свою ревизию через\n * `beginOperation()`; после каждого `await` функция проверяет `isStale(revision)`\n * перед тем как трогать state. Более поздний вызов инкрементирует счётчик и тем\n * самым «протухает» всё, что было запущено раньше, — их ответы дописывают в никуда.\n *\n * Вложенные вызовы (checkPhone/login → resendCode, register → login, selectChannel\n * → register/resendCode/dispatchReset) — продолжение той же попытки, не новая:\n * родитель передаёт им свою ревизию третьим (необязательным) параметром вместо\n * `beginOperation()`, иначе инвалидировал бы сам себя. Параметр — деталь реализации,\n * в публичном `AuthFlowStore` его нет.\n */\n const operationRevision = ref(0)\n\n function invalidatePendingOperation(): void {\n operationRevision.value += 1\n }\n\n /**\n * Инвалидирует то, что в полёте, и синхронно гасит `loading` — не полагается на то,\n * что «следующая строка» его переустановит, потому что у большинства действий между\n * вызовом этой функции и реальным `loading.value = true` есть ранние `return`\n * (channel-гейт, отсутствие `storeId`), после которых до запроса дело не доходит.\n * Действие, которое реально запрашивает, выставляет `loading` обратно в `true`\n * следующей строкой — без `await` между ними, так что снаружи это один переход.\n */\n function beginOperation(): number {\n invalidatePendingOperation()\n loading.value = false\n return operationRevision.value\n }\n\n /** То же, что `beginOperation()` — новая операция не начинается, только отмена (Back/`reset()`/`changeChannel()`). Отдельное имя для читаемости на месте вызова. */\n function cancelPendingOperation(): void {\n beginOperation()\n }\n\n function isStale(revision: number): boolean {\n return revision !== operationRevision.value\n }\n\n /**\n * Ref, прямая запись в который отменяет pending-операцию, как `cancelPendingOperation()`,\n * но без явного вызова действия. `phone`/`countryCode` обычно v-model'ятся на инпут\n * напрямую — пользователь может отредактировать поле, пока предыдущий checkPhone/\n * login/register ждёт ответ, минуя все action'ы стора, и revision этого не увидит.\n * Публичный тип остаётся `Ref<T>` — `v-model` работает без изменений.\n */\n function invalidatingRef<T>(initial: T): Ref<T> {\n let value = initial\n return customRef<T>((track, trigger) => ({\n get() {\n track()\n return value\n },\n set(newValue) {\n if (newValue === value) return\n value = newValue\n cancelPendingOperation()\n trigger()\n },\n }))\n }\n\n const availableChannels = useAvailableConfirmationChannels()\n\n /**\n * `ConfirmationChannel` шире, чем `RequestedConfirmationMethod` (см. auth/types.ts).\n * Явный выбор > единственный доступный канал > undefined (бэк дефолтит на sms).\n */\n function resolveOutgoingMethod(): RequestedConfirmationMethod | undefined {\n const channel =\n confirmationMethod.value ??\n (availableChannels.value.length === 1 ? availableChannels.value[0] : undefined)\n return toRequestedMethod(channel)\n }\n\n function getStoreId(): string | null {\n return profileStore.store?.id ?? null\n }\n\n function phoneRequest(): { number: string; country: string } {\n return { number: phone.value, country: countryCode.value }\n }\n\n function clearError(): void {\n error.value = null\n fieldErrors.value = {}\n }\n\n // 422 validation: сообщение → notifier, per-field ошибки → inline под полем.\n // Прочие ошибки → один inline `error`. Обёртка над логированием — каждый catch\n // передаёт свой scope, чтобы в логе было видно, какой именно вызов упал. `fallbackKey` —\n // ключ messages-порта, не готовая строка: текст/локаль остаются на стороне потребителя.\n function handleAuthError(e: unknown, fallbackKey: StorefrontMessageKey, scope: string): void {\n logCartError({ scope: `auth-${scope}`, context: { step: currentStep.value } }, e)\n\n const fallback = messages.format(fallbackKey)\n const validationErrors = getValidationErrors(e)\n if (Object.keys(validationErrors).length > 0) {\n notifier.error(getCartErrorMessage(e, fallback))\n fieldErrors.value = validationErrors\n return\n }\n\n error.value = getCartErrorMessage(e, fallback)\n }\n\n /**\n * `true` = ошибку обработали (вернули на Channel), вызывающий код НЕ должен\n * звать handleAuthError следом. Логирует сама — это альтернативная ветка\n * обработки, не проходит через handleAuthError.\n *\n * `attemptedChannel` — снэпшот `confirmationMethod.value`, взятый вызывающей\n * функцией ДО await (как и `phoneSnapshot`/`method` для самого запроса), а не\n * прочитанный здесь заново. Мы уже внутри catch, то есть после как минимум одного\n * await — если бы читали `confirmationMethod.value` живьём, унаследованное от\n * ПОЗЖЕ выбранного канала (или сброшенное `changeChannel()`) значение записалось\n * бы как «упавший канал» для запроса, который на деле пытался другой.\n */\n function handleOtpDispatchError(\n e: unknown,\n intent: ChannelIntent,\n scope: string,\n attemptedChannel: ConfirmationChannel | null\n ): boolean {\n if (\n getCartErrorCode(e) === AUTH_ERROR_CODE.OtpRequestFailed &&\n availableChannels.value.length >= 2\n ) {\n logCartError({ scope: `auth-${scope}`, context: { step: currentStep.value } }, e)\n // Call — легаси, response-only (см. auth/types.ts) — никогда не выбирается\n // явно и не показывается ни в одной кнопке. Если унаследованный snapshot\n // всё же Call (бэк звонил вместо реальной отправки на предыдущем успешном\n // dispatch), запоминать его как «упавший канал» бессмысленно.\n lastFailedChannel.value =\n attemptedChannel && attemptedChannel !== CONFIRMATION_CHANNEL.Call\n ? attemptedChannel\n : null\n confirmationMethod.value = null\n error.value = messages.format('auth.otpUnavailable')\n channelIntent.value = intent\n currentStep.value = AUTH_STEP.Channel\n return true\n }\n return false\n }\n\n /**\n * Сбрасывает выбранный канал — следующий register/resendCode/dispatchReset снова\n * спросит. Инвалидирует pending-операцию — если предыдущий dispatch ещё не ответил,\n * его успешный ответ (`confirmationMethod.value = toConfirmationChannel(result.method)`)\n * иначе воскресил бы канал, который пользователь только что явно сбросил.\n */\n function changeChannel(): void {\n cancelPendingOperation()\n confirmationMethod.value = null\n lastFailedChannel.value = null\n }\n\n function reset(): void {\n cancelPendingOperation()\n currentStep.value = AUTH_STEP.Phone\n phone.value = ''\n countryCode.value = 'RU'\n error.value = null\n fieldErrors.value = {}\n codeContext.value = CODE_CONTEXT.Register\n confirmationMethod.value = null\n resetCode.value = ''\n registerCode.value = ''\n resendTimerEndsAt.value = 0\n pendingPassword.value = ''\n channelIntent.value = null\n lastFailedChannel.value = null\n }\n\n async function checkPhone(getRecaptchaPayload: RecaptchaPayloadProvider): Promise<void> {\n // Новая попытка проверки телефона — самая частая точка входа, всегда top-level:\n // инвалидирует любую предыдущую попытку (для этого же номера или для другого,\n // если пользователь успел вернуться на Phone и ввести новый).\n const revision = beginOperation()\n clearError()\n // checkPhone — единственная точка входа в flow для номера телефона. Сбрасываем\n // весь phone-scoped state: без этого попытка для номера A (выбранный канал,\n // pending-пароль, таймер, intent, коды) утекала бы в проверку номера B — например,\n // canal/пароль, выбранные для A, автоматически применились бы к B, минуя picker.\n codeContext.value = CODE_CONTEXT.Register\n resendTimerEndsAt.value = 0\n confirmationMethod.value = null\n lastFailedChannel.value = null\n pendingPassword.value = ''\n channelIntent.value = null\n resetCode.value = ''\n registerCode.value = ''\n\n const storeId = getStoreId()\n if (!storeId) return\n\n // Снэпшот номера — берём то, что было введено на момент вызова, а не то, что\n // окажется в phone.value/countryCode.value к моменту, когда SDK ответит.\n const phoneSnapshot = phoneRequest()\n loading.value = true\n\n try {\n const result = await sdk.auth.checkPhone(storeId, { phone: phoneSnapshot })\n if (isStale(revision)) return\n\n if (result.registered && result.confirmed) {\n currentStep.value = AUTH_STEP.Login\n } else if (result.registered && !result.confirmed) {\n // resendCode сам решит: гейт на Channel (≥2 каналов) или сразу код.\n // Своя ревизия не создаётся — это продолжение этой же попытки, не новая.\n codeContext.value = CODE_CONTEXT.Register\n await resendCode(getRecaptchaPayload, revision)\n if (isStale(revision)) return\n if (currentStep.value !== AUTH_STEP.Channel) currentStep.value = AUTH_STEP.Code\n } else {\n currentStep.value = AUTH_STEP.Register\n }\n } catch (e: unknown) {\n if (!isStale(revision)) handleAuthError(e, 'auth.checkPhoneFailed', 'check-phone')\n } finally {\n // Ревизия протухла — за loading уже отвечает более новая операция, эта не трогает.\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /**\n * `parentRevision` — только для вызова изнутри `register()` (0-channel fallback).\n * Прямой вызов из UI её не передаёт, функция сама открывает новую операцию.\n */\n async function login(\n password: string,\n getRecaptchaPayload: RecaptchaPayloadProvider,\n parentRevision?: number\n ): Promise<boolean> {\n const revision = parentRevision ?? beginOperation()\n clearError()\n const storeId = getStoreId()\n if (!storeId) return false\n\n const phoneSnapshot = phoneRequest()\n loading.value = true\n\n try {\n const result = await sdk.auth.login(storeId, { phone: phoneSnapshot, password })\n if (isStale(revision)) return false\n\n authStore.setToken(result.token, phoneSnapshot.number, phoneSnapshot.country)\n pendingPassword.value = ''\n return true\n } catch (e: unknown) {\n if (isStale(revision)) return false\n\n // Если телефон не подтверждён — отправить код и перейти на ввод.\n if (getCartErrorCode(e) === AUTH_ERROR_CODE.ConfirmationRequired) {\n pendingPassword.value = password\n codeContext.value = CODE_CONTEXT.Register\n loading.value = false\n await resendCode(getRecaptchaPayload, revision)\n if (isStale(revision)) return false\n if (currentStep.value !== AUTH_STEP.Channel) currentStep.value = AUTH_STEP.Code\n return false\n }\n\n handleAuthError(e, 'auth.invalidPassword', 'login')\n return false\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /** `parentRevision` — только для вызова изнутри `selectChannel()`. */\n async function register(\n password: string,\n getRecaptchaPayload: RecaptchaPayloadProvider,\n parentRevision?: number\n ): Promise<boolean> {\n const revision = parentRevision ?? beginOperation()\n clearError()\n pendingPassword.value = password\n\n if (confirmationMethod.value === null && availableChannels.value.length >= 2) {\n channelIntent.value = CHANNEL_INTENT.Register\n currentStep.value = AUTH_STEP.Channel\n return false\n }\n\n const storeId = getStoreId()\n if (!storeId) return false\n\n const phoneSnapshot = phoneRequest()\n const method = resolveOutgoingMethod()\n const attemptedChannel = confirmationMethod.value\n loading.value = true\n\n try {\n const recaptcha = await getRecaptchaPayload(RecaptchaAction.Registration)\n // reCAPTCHA сама по себе — await; если за это время пользователь успел\n // выбрать другой канал (новая операция), нет смысла долетать до SDK — тот,\n // другой вызов уже переопределил, что сейчас актуально.\n if (isStale(revision)) return false\n\n const result = await sdk.auth.register(storeId, {\n phone: phoneSnapshot,\n password,\n recaptcha,\n method,\n })\n if (isStale(revision)) return false\n\n if (result.confirmation_required) {\n codeContext.value = CODE_CONTEXT.Register\n confirmationMethod.value = toConfirmationChannel(result.method)\n resendTimerEndsAt.value = Date.now() + RESEND_TIMER_SECONDS * 1000\n currentStep.value = AUTH_STEP.Code\n channelIntent.value = null\n lastFailedChannel.value = null\n return false\n }\n\n // Регистрация без подтверждения (0 каналов включено на магазине). SDK не\n // возвращает токен в этом ответе (AuthConfirmationStatus его не содержит) —\n // логинимся отдельным вызовом с тем же паролем, чтобы реально авторизовать,\n // а не просто закрыть флоу с пустым (== неаутентифицированным) токеном.\n // await, не голый return — иначе register()'s finally сработает раньше, чем\n // login() завершит свой собственный loading-цикл, и погасит индикатор\n // посреди ещё идущего запроса. Та же revision — это продолжение той же попытки.\n channelIntent.value = null\n lastFailedChannel.value = null\n return await login(password, getRecaptchaPayload, revision)\n } catch (e: unknown) {\n if (isStale(revision)) return false\n if (!handleOtpDispatchError(e, CHANNEL_INTENT.Register, 'register', attemptedChannel)) {\n handleAuthError(e, 'auth.registerFailed', 'register')\n }\n return false\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n async function confirmRegistration(code: string, password?: string): Promise<boolean> {\n const revision = beginOperation()\n clearError()\n const storeId = getStoreId()\n if (!storeId) return false\n\n const phoneSnapshot = phoneRequest()\n const passwordSnapshot = password || pendingPassword.value || undefined\n loading.value = true\n\n try {\n const result = await sdk.auth.confirmRegistration(storeId, {\n phone: phoneSnapshot,\n code,\n password: passwordSnapshot,\n })\n if (isStale(revision)) return false\n\n authStore.setToken(result.token, phoneSnapshot.number, phoneSnapshot.country)\n pendingPassword.value = ''\n return true\n } catch (e: unknown) {\n if (isStale(revision)) return false\n handleAuthError(e, 'auth.invalidCode', 'confirm-registration')\n return false\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /** `parentRevision` — только для вызова изнутри checkPhone/login/selectChannel. */\n async function resendCode(\n getRecaptchaPayload: RecaptchaPayloadProvider,\n parentRevision?: number\n ): Promise<number> {\n const revision = parentRevision ?? beginOperation()\n clearError()\n\n if (confirmationMethod.value === null && availableChannels.value.length >= 2) {\n channelIntent.value = CHANNEL_INTENT.Resend\n currentStep.value = AUTH_STEP.Channel\n return 0\n }\n\n const storeId = getStoreId()\n if (!storeId) return 0\n\n const phoneSnapshot = phoneRequest()\n const method = resolveOutgoingMethod()\n const context = codeContext.value\n const attemptedChannel = confirmationMethod.value\n loading.value = true\n\n try {\n const recaptcha = await getRecaptchaPayload(\n context === CODE_CONTEXT.Reset\n ? RecaptchaAction.ResetPassword\n : RecaptchaAction.ResendRegistrationCode\n )\n if (isStale(revision)) return 0\n\n const result =\n context === CODE_CONTEXT.Reset\n ? await sdk.auth.dispatchPasswordReset(storeId, {\n phone: phoneSnapshot,\n recaptcha,\n method,\n })\n : await sdk.auth.resendRegistrationConfirmation(storeId, {\n phone: phoneSnapshot,\n recaptcha,\n method,\n })\n if (isStale(revision)) return 0\n\n confirmationMethod.value = toConfirmationChannel(result.method)\n resendTimerEndsAt.value = Date.now() + RESEND_TIMER_SECONDS * 1000\n // Успешная отправка — прошлый сбой (если был) уже неактуален для новых попыток.\n lastFailedChannel.value = null\n // Если сюда попали прямо с Channel (через selectChannel) — успешный dispatch\n // завершает channel-selection, переходим на Code сами. Обычный resend (вызван\n // с Code) этой веткой не задет — currentStep уже Code, условие не сработает.\n if (currentStep.value === AUTH_STEP.Channel) {\n channelIntent.value = null\n currentStep.value = AUTH_STEP.Code\n }\n return RESEND_TIMER_SECONDS\n } catch (e: unknown) {\n if (isStale(revision)) return 0\n if (\n !handleOtpDispatchError(e, CHANNEL_INTENT.Resend, 'resend-code', attemptedChannel)\n ) {\n handleAuthError(e, 'auth.resendCodeFailed', 'resend-code')\n }\n return 0\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /** `parentRevision` — только для вызова изнутри `selectChannel()`. */\n async function dispatchReset(\n getRecaptchaPayload: RecaptchaPayloadProvider,\n parentRevision?: number\n ): Promise<void> {\n const revision = parentRevision ?? beginOperation()\n clearError()\n\n if (confirmationMethod.value === null && availableChannels.value.length >= 2) {\n channelIntent.value = CHANNEL_INTENT.DispatchReset\n currentStep.value = AUTH_STEP.Channel\n return\n }\n\n const storeId = getStoreId()\n if (!storeId) return\n\n const phoneSnapshot = phoneRequest()\n const method = resolveOutgoingMethod()\n const attemptedChannel = confirmationMethod.value\n loading.value = true\n\n try {\n const recaptcha = await getRecaptchaPayload(RecaptchaAction.ResetPassword)\n if (isStale(revision)) return\n\n const result = await sdk.auth.dispatchPasswordReset(storeId, {\n phone: phoneSnapshot,\n recaptcha,\n method,\n })\n if (isStale(revision)) return\n\n codeContext.value = CODE_CONTEXT.Reset\n confirmationMethod.value = toConfirmationChannel(result.method)\n resendTimerEndsAt.value = Date.now() + RESEND_TIMER_SECONDS * 1000\n currentStep.value = AUTH_STEP.Code\n channelIntent.value = null\n lastFailedChannel.value = null\n } catch (e: unknown) {\n if (isStale(revision)) return\n if (\n !handleOtpDispatchError(\n e,\n CHANNEL_INTENT.DispatchReset,\n 'dispatch-reset',\n attemptedChannel\n )\n ) {\n handleAuthError(e, 'auth.dispatchResetFailed', 'dispatch-reset')\n }\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n async function resetPassword(code: string, password: string): Promise<boolean> {\n const revision = beginOperation()\n clearError()\n const storeId = getStoreId()\n if (!storeId) return false\n\n const phoneSnapshot = phoneRequest()\n loading.value = true\n\n try {\n const result = await sdk.auth.resetPassword(storeId, {\n phone: phoneSnapshot,\n code,\n password,\n })\n if (isStale(revision)) return false\n\n authStore.setToken(result.token, phoneSnapshot.number, phoneSnapshot.country)\n return true\n } catch (e: unknown) {\n if (isStale(revision)) return false\n\n const errorCode = getCartErrorCode(e)\n if (\n errorCode === AUTH_ERROR_CODE.InvalidCode ||\n errorCode === AUTH_ERROR_CODE.InvalidRegistrationCode ||\n errorCode === AUTH_ERROR_CODE.InvalidResetCode ||\n errorCode === AUTH_ERROR_CODE.ExpiredCode\n ) {\n handleAuthError(e, 'auth.invalidCode', 'reset-password')\n resetCode.value = ''\n currentStep.value = AUTH_STEP.Code\n return false\n }\n\n handleAuthError(e, 'auth.resetPasswordFailed', 'reset-password')\n return false\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /**\n * Выбор канала на шаге AUTH_STEP.Channel — повторяет вызов, который привёл сюда.\n * НЕ обнуляет `channelIntent` сама — register/resendCode/dispatchReset обнуляют его\n * только на реальном успехе. При ошибке (валидация, сеть, otp_request.failed — что\n * угодно, не только последнее) intent и currentStep остаются как были: пользователь\n * видит picker снова и может повторить попытку, а не упирается в молчаливый no-op.\n */\n async function selectChannel(\n channel: SelectableConfirmationChannel,\n getRecaptchaPayload: RecaptchaPayloadProvider\n ): Promise<boolean> {\n if (!availableChannels.value.includes(channel)) return false\n\n // Каждый выбор канала — новая попытка пользователя, top-level: если предыдущий\n // выбор ещё висит на recaptcha/сети, этот его инвалидирует, а не наоборот —\n // побеждает то, что пользователь выбрал последним.\n const revision = beginOperation()\n confirmationMethod.value = channel\n const intent = channelIntent.value\n\n if (intent === CHANNEL_INTENT.Register)\n return register(pendingPassword.value, getRecaptchaPayload, revision)\n if (intent === CHANNEL_INTENT.Resend) {\n await resendCode(getRecaptchaPayload, revision)\n return false\n }\n if (intent === CHANNEL_INTENT.DispatchReset) {\n await dispatchReset(getRecaptchaPayload, revision)\n return false\n }\n return false\n }\n\n function goToChannelBack(): void {\n // Back с Channel почти всегда означает «отменить то, что сейчас в полёте»\n // (пользователь передумал после клика по каналу, пока шёл recaptcha/dispatch).\n cancelPendingOperation()\n clearError()\n const intent = channelIntent.value\n channelIntent.value = null\n\n if (intent === CHANNEL_INTENT.Register) currentStep.value = AUTH_STEP.Register\n else if (intent === CHANNEL_INTENT.Resend) currentStep.value = AUTH_STEP.Code\n else if (intent === CHANNEL_INTENT.DispatchReset) currentStep.value = AUTH_STEP.Reset\n else currentStep.value = AUTH_STEP.Phone\n }\n\n /** Перейти к шагу сброса пароля (или сразу к коду, если для сброса уже отправлен код и таймер ещё активен) */\n function goToReset(): void {\n cancelPendingOperation()\n clearError()\n\n if (codeContext.value === CODE_CONTEXT.Reset && resendTimerEndsAt.value > Date.now()) {\n currentStep.value = AUTH_STEP.Code\n } else {\n currentStep.value = AUTH_STEP.Reset\n }\n }\n\n function goToPhone(): void {\n cancelPendingOperation()\n clearError()\n currentStep.value = AUTH_STEP.Phone\n }\n\n function goToMethod(): void {\n cancelPendingOperation()\n clearError()\n currentStep.value = AUTH_STEP.Method\n }\n\n function goToLogin(): void {\n cancelPendingOperation()\n clearError()\n currentStep.value = AUTH_STEP.Login\n }\n\n function goToNewPassword(code: string): void {\n cancelPendingOperation()\n clearError()\n resetCode.value = code\n currentStep.value = AUTH_STEP.NewPassword\n }\n\n function goToResetCode(): void {\n cancelPendingOperation()\n clearError()\n resetCode.value = ''\n currentStep.value = AUTH_STEP.Code\n }\n\n function goToRegisterPassword(code: string): void {\n cancelPendingOperation()\n clearError()\n registerCode.value = code\n currentStep.value = AUTH_STEP.RegisterPassword\n }\n\n function goToRegisterCode(): void {\n cancelPendingOperation()\n clearError()\n registerCode.value = ''\n currentStep.value = AUTH_STEP.Code\n }\n\n return {\n currentStep,\n phone,\n countryCode,\n loading,\n error,\n fieldErrors,\n codeContext,\n confirmationMethod,\n channelIntent,\n lastFailedChannel,\n resetCode,\n registerCode,\n resendTimerEndsAt,\n pendingPassword,\n availableChannels,\n checkPhone,\n login,\n register,\n confirmRegistration,\n resendCode,\n dispatchReset,\n resetPassword,\n selectChannel,\n changeChannel,\n goToChannelBack,\n goToReset,\n goToPhone,\n goToMethod,\n goToLogin,\n goToNewPassword,\n goToResetCode,\n goToRegisterPassword,\n goToRegisterCode,\n reset,\n }\n})\n","import { computed, type ComputedRef } from 'vue'\n\nimport type { City, Stock, Store } from '@zenky/storefront-api'\n\nimport { useStoreProfileStore } from './store-profile'\n\n/** Accessor for the loaded store/city/stock (store/city are guaranteed to be loaded). */\nexport function useStore(): {\n store: ComputedRef<Store>\n city: ComputedRef<City>\n stock: ComputedRef<Stock | null>\n} {\n const profileStore = useStoreProfileStore()\n\n return {\n store: computed(() => profileStore.store!),\n city: computed(() => profileStore.city!),\n stock: computed(() => profileStore.stock),\n }\n}\n","import { storeToRefs } from 'pinia'\nimport { computed } from 'vue'\n\nimport { useStoreProfileStore } from './store-profile'\n\nexport function useStorefrontProfile() {\n const profileStore = useStoreProfileStore()\n const { store, city, stock, categories } = storeToRefs(profileStore)\n\n const isReady = computed(() => profileStore.isReady)\n const hasStock = computed(() => profileStore.hasStock)\n\n return {\n store,\n city,\n stock,\n categories,\n isReady,\n hasStock,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/stores/products.ts","../src/stores/authFlow.ts","../src/stores/useStore.ts","../src/stores/useStorefrontProfile.ts"],"names":["defineStore","ref","computed"],"mappings":"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","file":"chunk-PBBVWWMI.js","sourcesContent":["import { defineStore } from 'pinia'\nimport { computed, ref, type ComputedRef, type Ref } from 'vue'\n\nimport type { Product } from '@zenky/storefront-api'\n\n// Explicit return type — keeps `Product` as a named reference in the .d.ts instead of expanding it.\nexport interface ProductsStore {\n products: Ref<Product[]>\n setProducts: (list: Product[]) => void\n hasProducts: ComputedRef<boolean>\n}\n\n// Products live in this store, but it's populated from the catalog, not from a separate API call.\nexport const useProductsStore = defineStore('zenky-products', (): ProductsStore => {\n const products = ref<Product[]>([])\n\n function setProducts(list: Product[]): void {\n products.value = list\n }\n\n const hasProducts = computed(() => products.value.length > 0)\n\n return { products, setProducts, hasProducts }\n})\n","import { RecaptchaAction } from '@zenky/storefront-api'\n\nimport type { RequestedConfirmationMethod } from '@zenky/storefront-api'\nimport { defineStore } from 'pinia'\nimport { customRef, ref, type ComputedRef, type Ref } from 'vue'\n\nimport { useAvailableConfirmationChannels } from '../auth/useAvailableConfirmationChannels'\nimport {\n AUTH_STEP,\n CHANNEL_INTENT,\n CODE_CONTEXT,\n CONFIRMATION_CHANNEL,\n toConfirmationChannel,\n toRequestedMethod,\n type AuthStep,\n type ChannelIntent,\n type CodeContext,\n type ConfirmationChannel,\n type SelectableConfirmationChannel,\n} from '../auth/types'\n// Тот же провайдер и error-парсинг, что уже использует useCheckoutSubmit — не дублируем.\n// getCartErrorMessage (в отличие от старой локальной версии) никогда не пропускает наружу\n// сырой e.message для не-ZenkyError — только `fallback`.\nimport {\n getCartErrorCode,\n getCartErrorMessage,\n getValidationErrors,\n logCartError,\n} from '../cart/logCartError'\nimport type { RecaptchaPayloadProvider } from '../cart/useCheckoutSubmit'\nimport type { StorefrontMessageKey } from '../ports'\nimport { useRuntime } from '../ports/runtime'\nimport { useAuthStore } from './auth'\nimport { useStoreProfileStore } from './store-profile'\n\nconst RESEND_TIMER_SECONDS = 60\nexport { RESEND_TIMER_SECONDS }\n\nconst AUTH_ERROR_CODE = {\n ConfirmationRequired: 'auth.registration.confirmation_required',\n InvalidCode: 'auth.confirmation.invalid_code',\n InvalidRegistrationCode: 'auth.registration.invalid_confirmation_code',\n InvalidResetCode: 'auth.password_reset.invalid_code',\n ExpiredCode: 'auth.confirmation.expired_code',\n OtpRequestFailed: 'auth.otp_request.failed',\n} as const\n\n// Named return type (the dts rule).\nexport interface AuthFlowStore {\n currentStep: Ref<AuthStep>\n phone: Ref<string>\n countryCode: Ref<string>\n loading: Ref<boolean>\n error: Ref<string | null>\n fieldErrors: Ref<Record<string, string[]>>\n codeContext: Ref<CodeContext>\n confirmationMethod: Ref<ConfirmationChannel | null>\n /** Какой flow привёл на AUTH_STEP.Channel — публичное, часть $state (SSR-гидратируется). */\n channelIntent: Ref<ChannelIntent | null>\n /**\n * Канал, на котором последний раз получили `auth.otp_request.failed`. UI может\n * скрыть/задизейблить эту кнопку на повторном показе Channel — бэк уже отказал,\n * выбор того же канала снова даст ту же ошибку.\n */\n lastFailedChannel: Ref<SelectableConfirmationChannel | null>\n resetCode: Ref<string>\n registerCode: Ref<string>\n resendTimerEndsAt: Ref<number>\n pendingPassword: Ref<string>\n availableChannels: ComputedRef<SelectableConfirmationChannel[]>\n checkPhone: (getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<void>\n /**\n * @returns true — токен получен, флоу завершён. false — либо ошибка (см. `error`),\n * либо телефон зарегистрирован, но не подтверждён: код уже отправлен и `currentStep`\n * ушёл на Code/Channel — в этом случае `error` пустой, это не сбой.\n */\n login: (password: string, getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<boolean>\n /** @returns true — токен получен (сразу или через login-fallback при 0 каналах), false — код отправлен / ошибка / шаг выбора канала */\n register: (password: string, getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<boolean>\n confirmRegistration: (code: string, password?: string) => Promise<boolean>\n resendCode: (getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<number>\n dispatchReset: (getRecaptchaPayload: RecaptchaPayloadProvider) => Promise<void>\n resetPassword: (code: string, password: string) => Promise<boolean>\n selectChannel: (\n channel: SelectableConfirmationChannel,\n getRecaptchaPayload: RecaptchaPayloadProvider\n ) => Promise<boolean>\n /** Сбрасывает выбранный канал перед ручным resend — иначе гейт сработает только один раз. */\n changeChannel: () => void\n goToChannelBack: () => void\n goToReset: () => void\n goToPhone: () => void\n goToMethod: () => void\n goToLogin: () => void\n goToNewPassword: (code: string) => void\n goToResetCode: () => void\n goToRegisterPassword: (code: string) => void\n goToRegisterCode: () => void\n reset: () => void\n}\n\nexport const useAuthFlowStore = defineStore('zenky-auth-flow', (): AuthFlowStore => {\n const { sdk, notifier, messages } = useRuntime()\n const authStore = useAuthStore()\n const profileStore = useStoreProfileStore()\n\n const currentStep = ref<AuthStep>(AUTH_STEP.Phone)\n const phone = invalidatingRef('')\n const countryCode = invalidatingRef('RU')\n const loading = ref(false)\n const error = ref<string | null>(null)\n const codeContext = ref<CodeContext>(CODE_CONTEXT.Register)\n const confirmationMethod = ref<ConfirmationChannel | null>(null)\n const resetCode = ref('')\n const registerCode = ref('')\n const resendTimerEndsAt = ref(0)\n const fieldErrors = ref<Record<string, string[]>>({})\n const pendingPassword = ref('')\n const channelIntent = ref<ChannelIntent | null>(null)\n const lastFailedChannel = ref<SelectableConfirmationChannel | null>(null)\n\n /**\n * Race-condition guard. Каждый top-level вызов получает свою ревизию через\n * `beginOperation()`; после каждого `await` функция проверяет `isStale(revision)`\n * перед тем как трогать state. Более поздний вызов инкрементирует счётчик и тем\n * самым «протухает» всё, что было запущено раньше, — их ответы дописывают в никуда.\n *\n * Вложенные вызовы (checkPhone/login → resendCode, register → login, selectChannel\n * → register/resendCode/dispatchReset) — продолжение той же попытки, не новая:\n * родитель передаёт им свою ревизию третьим (необязательным) параметром вместо\n * `beginOperation()`, иначе инвалидировал бы сам себя. Параметр — деталь реализации,\n * в публичном `AuthFlowStore` его нет.\n */\n const operationRevision = ref(0)\n\n function invalidatePendingOperation(): void {\n operationRevision.value += 1\n }\n\n /**\n * Инвалидирует то, что в полёте, и синхронно гасит `loading` — не полагается на то,\n * что «следующая строка» его переустановит, потому что у большинства действий между\n * вызовом этой функции и реальным `loading.value = true` есть ранние `return`\n * (channel-гейт, отсутствие `storeId`), после которых до запроса дело не доходит.\n * Действие, которое реально запрашивает, выставляет `loading` обратно в `true`\n * следующей строкой — без `await` между ними, так что снаружи это один переход.\n */\n function beginOperation(): number {\n invalidatePendingOperation()\n loading.value = false\n return operationRevision.value\n }\n\n /** То же, что `beginOperation()` — новая операция не начинается, только отмена (Back/`reset()`/`changeChannel()`). Отдельное имя для читаемости на месте вызова. */\n function cancelPendingOperation(): void {\n beginOperation()\n }\n\n function isStale(revision: number): boolean {\n return revision !== operationRevision.value\n }\n\n /**\n * Ref, прямая запись в который отменяет pending-операцию, как `cancelPendingOperation()`,\n * но без явного вызова действия. `phone`/`countryCode` обычно v-model'ятся на инпут\n * напрямую — пользователь может отредактировать поле, пока предыдущий checkPhone/\n * login/register ждёт ответ, минуя все action'ы стора, и revision этого не увидит.\n * Публичный тип остаётся `Ref<T>` — `v-model` работает без изменений.\n */\n function invalidatingRef<T>(initial: T): Ref<T> {\n let value = initial\n return customRef<T>((track, trigger) => ({\n get() {\n track()\n return value\n },\n set(newValue) {\n if (newValue === value) return\n value = newValue\n cancelPendingOperation()\n trigger()\n },\n }))\n }\n\n const availableChannels = useAvailableConfirmationChannels()\n\n /**\n * `ConfirmationChannel` шире, чем `RequestedConfirmationMethod` (см. auth/types.ts).\n * Явный выбор > единственный доступный канал > undefined (бэк дефолтит на sms).\n */\n function resolveOutgoingMethod(): RequestedConfirmationMethod | undefined {\n const channel =\n confirmationMethod.value ??\n (availableChannels.value.length === 1 ? availableChannels.value[0] : undefined)\n return toRequestedMethod(channel)\n }\n\n function getStoreId(): string | null {\n return profileStore.store?.id ?? null\n }\n\n function phoneRequest(): { number: string; country: string } {\n return { number: phone.value, country: countryCode.value }\n }\n\n function clearError(): void {\n error.value = null\n fieldErrors.value = {}\n }\n\n // 422 validation: сообщение → notifier, per-field ошибки → inline под полем.\n // Прочие ошибки → один inline `error`. Обёртка над логированием — каждый catch\n // передаёт свой scope, чтобы в логе было видно, какой именно вызов упал. `fallbackKey` —\n // ключ messages-порта, не готовая строка: текст/локаль остаются на стороне потребителя.\n function handleAuthError(e: unknown, fallbackKey: StorefrontMessageKey, scope: string): void {\n logCartError({ scope: `auth-${scope}`, context: { step: currentStep.value } }, e)\n\n const fallback = messages.format(fallbackKey)\n const validationErrors = getValidationErrors(e)\n if (Object.keys(validationErrors).length > 0) {\n notifier.error(getCartErrorMessage(e, fallback))\n fieldErrors.value = validationErrors\n return\n }\n\n error.value = getCartErrorMessage(e, fallback)\n }\n\n /**\n * `true` = ошибку обработали (вернули на Channel), вызывающий код НЕ должен\n * звать handleAuthError следом. Логирует сама — это альтернативная ветка\n * обработки, не проходит через handleAuthError.\n *\n * `attemptedChannel` — снэпшот `confirmationMethod.value`, взятый вызывающей\n * функцией ДО await (как и `phoneSnapshot`/`method` для самого запроса), а не\n * прочитанный здесь заново. Мы уже внутри catch, то есть после как минимум одного\n * await — если бы читали `confirmationMethod.value` живьём, унаследованное от\n * ПОЗЖЕ выбранного канала (или сброшенное `changeChannel()`) значение записалось\n * бы как «упавший канал» для запроса, который на деле пытался другой.\n */\n function handleOtpDispatchError(\n e: unknown,\n intent: ChannelIntent,\n scope: string,\n attemptedChannel: ConfirmationChannel | null\n ): boolean {\n if (\n getCartErrorCode(e) === AUTH_ERROR_CODE.OtpRequestFailed &&\n availableChannels.value.length >= 2\n ) {\n logCartError({ scope: `auth-${scope}`, context: { step: currentStep.value } }, e)\n // Call — легаси, response-only (см. auth/types.ts) — никогда не выбирается\n // явно и не показывается ни в одной кнопке. Если унаследованный snapshot\n // всё же Call (бэк звонил вместо реальной отправки на предыдущем успешном\n // dispatch), запоминать его как «упавший канал» бессмысленно.\n lastFailedChannel.value =\n attemptedChannel && attemptedChannel !== CONFIRMATION_CHANNEL.Call\n ? attemptedChannel\n : null\n confirmationMethod.value = null\n error.value = messages.format('auth.otpUnavailable')\n channelIntent.value = intent\n currentStep.value = AUTH_STEP.Channel\n return true\n }\n return false\n }\n\n /**\n * Сбрасывает выбранный канал — следующий register/resendCode/dispatchReset снова\n * спросит. Инвалидирует pending-операцию — если предыдущий dispatch ещё не ответил,\n * его успешный ответ (`confirmationMethod.value = toConfirmationChannel(result.method)`)\n * иначе воскресил бы канал, который пользователь только что явно сбросил.\n */\n function changeChannel(): void {\n cancelPendingOperation()\n confirmationMethod.value = null\n lastFailedChannel.value = null\n }\n\n function reset(): void {\n cancelPendingOperation()\n currentStep.value = AUTH_STEP.Phone\n phone.value = ''\n countryCode.value = 'RU'\n error.value = null\n fieldErrors.value = {}\n codeContext.value = CODE_CONTEXT.Register\n confirmationMethod.value = null\n resetCode.value = ''\n registerCode.value = ''\n resendTimerEndsAt.value = 0\n pendingPassword.value = ''\n channelIntent.value = null\n lastFailedChannel.value = null\n }\n\n async function checkPhone(getRecaptchaPayload: RecaptchaPayloadProvider): Promise<void> {\n // Новая попытка проверки телефона — самая частая точка входа, всегда top-level:\n // инвалидирует любую предыдущую попытку (для этого же номера или для другого,\n // если пользователь успел вернуться на Phone и ввести новый).\n const revision = beginOperation()\n clearError()\n // checkPhone — единственная точка входа в flow для номера телефона. Сбрасываем\n // весь phone-scoped state: без этого попытка для номера A (выбранный канал,\n // pending-пароль, таймер, intent, коды) утекала бы в проверку номера B — например,\n // canal/пароль, выбранные для A, автоматически применились бы к B, минуя picker.\n codeContext.value = CODE_CONTEXT.Register\n resendTimerEndsAt.value = 0\n confirmationMethod.value = null\n lastFailedChannel.value = null\n pendingPassword.value = ''\n channelIntent.value = null\n resetCode.value = ''\n registerCode.value = ''\n\n const storeId = getStoreId()\n if (!storeId) return\n\n // Снэпшот номера — берём то, что было введено на момент вызова, а не то, что\n // окажется в phone.value/countryCode.value к моменту, когда SDK ответит.\n const phoneSnapshot = phoneRequest()\n loading.value = true\n\n try {\n const result = await sdk.auth.checkPhone(storeId, { phone: phoneSnapshot })\n if (isStale(revision)) return\n\n if (result.registered && result.confirmed) {\n currentStep.value = AUTH_STEP.Login\n } else if (result.registered && !result.confirmed) {\n // resendCode сам решит: гейт на Channel (≥2 каналов) или сразу код.\n // Своя ревизия не создаётся — это продолжение этой же попытки, не новая.\n codeContext.value = CODE_CONTEXT.Register\n await resendCode(getRecaptchaPayload, revision)\n if (isStale(revision)) return\n if (currentStep.value !== AUTH_STEP.Channel) currentStep.value = AUTH_STEP.Code\n } else {\n currentStep.value = AUTH_STEP.Register\n }\n } catch (e: unknown) {\n if (!isStale(revision)) handleAuthError(e, 'auth.checkPhoneFailed', 'check-phone')\n } finally {\n // Ревизия протухла — за loading уже отвечает более новая операция, эта не трогает.\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /**\n * `parentRevision` — только для вызова изнутри `register()` (0-channel fallback).\n * Прямой вызов из UI её не передаёт, функция сама открывает новую операцию.\n */\n async function login(\n password: string,\n getRecaptchaPayload: RecaptchaPayloadProvider,\n parentRevision?: number\n ): Promise<boolean> {\n const revision = parentRevision ?? beginOperation()\n clearError()\n const storeId = getStoreId()\n if (!storeId) return false\n\n const phoneSnapshot = phoneRequest()\n loading.value = true\n\n try {\n const result = await sdk.auth.login(storeId, { phone: phoneSnapshot, password })\n if (isStale(revision)) return false\n\n authStore.setToken(result.token, phoneSnapshot.number, phoneSnapshot.country)\n pendingPassword.value = ''\n return true\n } catch (e: unknown) {\n if (isStale(revision)) return false\n\n // Если телефон не подтверждён — отправить код и перейти на ввод.\n if (getCartErrorCode(e) === AUTH_ERROR_CODE.ConfirmationRequired) {\n pendingPassword.value = password\n codeContext.value = CODE_CONTEXT.Register\n loading.value = false\n await resendCode(getRecaptchaPayload, revision)\n if (isStale(revision)) return false\n if (currentStep.value !== AUTH_STEP.Channel) currentStep.value = AUTH_STEP.Code\n return false\n }\n\n handleAuthError(e, 'auth.invalidPassword', 'login')\n return false\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /** `parentRevision` — только для вызова изнутри `selectChannel()`. */\n async function register(\n password: string,\n getRecaptchaPayload: RecaptchaPayloadProvider,\n parentRevision?: number\n ): Promise<boolean> {\n const revision = parentRevision ?? beginOperation()\n clearError()\n pendingPassword.value = password\n\n if (confirmationMethod.value === null && availableChannels.value.length >= 2) {\n channelIntent.value = CHANNEL_INTENT.Register\n currentStep.value = AUTH_STEP.Channel\n return false\n }\n\n const storeId = getStoreId()\n if (!storeId) return false\n\n const phoneSnapshot = phoneRequest()\n const method = resolveOutgoingMethod()\n const attemptedChannel = confirmationMethod.value\n loading.value = true\n\n try {\n const recaptcha = await getRecaptchaPayload(RecaptchaAction.Registration)\n // reCAPTCHA сама по себе — await; если за это время пользователь успел\n // выбрать другой канал (новая операция), нет смысла долетать до SDK — тот,\n // другой вызов уже переопределил, что сейчас актуально.\n if (isStale(revision)) return false\n\n const result = await sdk.auth.register(storeId, {\n phone: phoneSnapshot,\n password,\n recaptcha,\n method,\n })\n if (isStale(revision)) return false\n\n if (result.confirmation_required) {\n codeContext.value = CODE_CONTEXT.Register\n confirmationMethod.value = toConfirmationChannel(result.method)\n resendTimerEndsAt.value = Date.now() + RESEND_TIMER_SECONDS * 1000\n currentStep.value = AUTH_STEP.Code\n channelIntent.value = null\n lastFailedChannel.value = null\n return false\n }\n\n // Регистрация без подтверждения (0 каналов включено на магазине). SDK не\n // возвращает токен в этом ответе (AuthConfirmationStatus его не содержит) —\n // логинимся отдельным вызовом с тем же паролем, чтобы реально авторизовать,\n // а не просто закрыть флоу с пустым (== неаутентифицированным) токеном.\n // await, не голый return — иначе register()'s finally сработает раньше, чем\n // login() завершит свой собственный loading-цикл, и погасит индикатор\n // посреди ещё идущего запроса. Та же revision — это продолжение той же попытки.\n channelIntent.value = null\n lastFailedChannel.value = null\n return await login(password, getRecaptchaPayload, revision)\n } catch (e: unknown) {\n if (isStale(revision)) return false\n if (!handleOtpDispatchError(e, CHANNEL_INTENT.Register, 'register', attemptedChannel)) {\n handleAuthError(e, 'auth.registerFailed', 'register')\n }\n return false\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n async function confirmRegistration(code: string, password?: string): Promise<boolean> {\n const revision = beginOperation()\n clearError()\n const storeId = getStoreId()\n if (!storeId) return false\n\n const phoneSnapshot = phoneRequest()\n const passwordSnapshot = password || pendingPassword.value || undefined\n loading.value = true\n\n try {\n const result = await sdk.auth.confirmRegistration(storeId, {\n phone: phoneSnapshot,\n code,\n password: passwordSnapshot,\n })\n if (isStale(revision)) return false\n\n authStore.setToken(result.token, phoneSnapshot.number, phoneSnapshot.country)\n pendingPassword.value = ''\n return true\n } catch (e: unknown) {\n if (isStale(revision)) return false\n handleAuthError(e, 'auth.invalidCode', 'confirm-registration')\n return false\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /** `parentRevision` — только для вызова изнутри checkPhone/login/selectChannel. */\n async function resendCode(\n getRecaptchaPayload: RecaptchaPayloadProvider,\n parentRevision?: number\n ): Promise<number> {\n const revision = parentRevision ?? beginOperation()\n clearError()\n\n if (confirmationMethod.value === null && availableChannels.value.length >= 2) {\n channelIntent.value = CHANNEL_INTENT.Resend\n currentStep.value = AUTH_STEP.Channel\n return 0\n }\n\n const storeId = getStoreId()\n if (!storeId) return 0\n\n const phoneSnapshot = phoneRequest()\n const method = resolveOutgoingMethod()\n const context = codeContext.value\n const attemptedChannel = confirmationMethod.value\n loading.value = true\n\n try {\n const recaptcha = await getRecaptchaPayload(\n context === CODE_CONTEXT.Reset\n ? RecaptchaAction.ResetPassword\n : RecaptchaAction.ResendRegistrationCode\n )\n if (isStale(revision)) return 0\n\n const result =\n context === CODE_CONTEXT.Reset\n ? await sdk.auth.dispatchPasswordReset(storeId, {\n phone: phoneSnapshot,\n recaptcha,\n method,\n })\n : await sdk.auth.resendRegistrationConfirmation(storeId, {\n phone: phoneSnapshot,\n recaptcha,\n method,\n })\n if (isStale(revision)) return 0\n\n confirmationMethod.value = toConfirmationChannel(result.method)\n resendTimerEndsAt.value = Date.now() + RESEND_TIMER_SECONDS * 1000\n // Успешная отправка — прошлый сбой (если был) уже неактуален для новых попыток.\n lastFailedChannel.value = null\n // Если сюда попали прямо с Channel (через selectChannel) — успешный dispatch\n // завершает channel-selection, переходим на Code сами. Обычный resend (вызван\n // с Code) этой веткой не задет — currentStep уже Code, условие не сработает.\n if (currentStep.value === AUTH_STEP.Channel) {\n channelIntent.value = null\n currentStep.value = AUTH_STEP.Code\n }\n return RESEND_TIMER_SECONDS\n } catch (e: unknown) {\n if (isStale(revision)) return 0\n if (\n !handleOtpDispatchError(e, CHANNEL_INTENT.Resend, 'resend-code', attemptedChannel)\n ) {\n handleAuthError(e, 'auth.resendCodeFailed', 'resend-code')\n }\n return 0\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /** `parentRevision` — только для вызова изнутри `selectChannel()`. */\n async function dispatchReset(\n getRecaptchaPayload: RecaptchaPayloadProvider,\n parentRevision?: number\n ): Promise<void> {\n const revision = parentRevision ?? beginOperation()\n clearError()\n\n if (confirmationMethod.value === null && availableChannels.value.length >= 2) {\n channelIntent.value = CHANNEL_INTENT.DispatchReset\n currentStep.value = AUTH_STEP.Channel\n return\n }\n\n const storeId = getStoreId()\n if (!storeId) return\n\n const phoneSnapshot = phoneRequest()\n const method = resolveOutgoingMethod()\n const attemptedChannel = confirmationMethod.value\n loading.value = true\n\n try {\n const recaptcha = await getRecaptchaPayload(RecaptchaAction.ResetPassword)\n if (isStale(revision)) return\n\n const result = await sdk.auth.dispatchPasswordReset(storeId, {\n phone: phoneSnapshot,\n recaptcha,\n method,\n })\n if (isStale(revision)) return\n\n codeContext.value = CODE_CONTEXT.Reset\n confirmationMethod.value = toConfirmationChannel(result.method)\n resendTimerEndsAt.value = Date.now() + RESEND_TIMER_SECONDS * 1000\n currentStep.value = AUTH_STEP.Code\n channelIntent.value = null\n lastFailedChannel.value = null\n } catch (e: unknown) {\n if (isStale(revision)) return\n if (\n !handleOtpDispatchError(\n e,\n CHANNEL_INTENT.DispatchReset,\n 'dispatch-reset',\n attemptedChannel\n )\n ) {\n handleAuthError(e, 'auth.dispatchResetFailed', 'dispatch-reset')\n }\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n async function resetPassword(code: string, password: string): Promise<boolean> {\n const revision = beginOperation()\n clearError()\n const storeId = getStoreId()\n if (!storeId) return false\n\n const phoneSnapshot = phoneRequest()\n loading.value = true\n\n try {\n const result = await sdk.auth.resetPassword(storeId, {\n phone: phoneSnapshot,\n code,\n password,\n })\n if (isStale(revision)) return false\n\n authStore.setToken(result.token, phoneSnapshot.number, phoneSnapshot.country)\n return true\n } catch (e: unknown) {\n if (isStale(revision)) return false\n\n const errorCode = getCartErrorCode(e)\n if (\n errorCode === AUTH_ERROR_CODE.InvalidCode ||\n errorCode === AUTH_ERROR_CODE.InvalidRegistrationCode ||\n errorCode === AUTH_ERROR_CODE.InvalidResetCode ||\n errorCode === AUTH_ERROR_CODE.ExpiredCode\n ) {\n handleAuthError(e, 'auth.invalidCode', 'reset-password')\n resetCode.value = ''\n currentStep.value = AUTH_STEP.Code\n return false\n }\n\n handleAuthError(e, 'auth.resetPasswordFailed', 'reset-password')\n return false\n } finally {\n if (!isStale(revision)) loading.value = false\n }\n }\n\n /**\n * Выбор канала на шаге AUTH_STEP.Channel — повторяет вызов, который привёл сюда.\n * НЕ обнуляет `channelIntent` сама — register/resendCode/dispatchReset обнуляют его\n * только на реальном успехе. При ошибке (валидация, сеть, otp_request.failed — что\n * угодно, не только последнее) intent и currentStep остаются как были: пользователь\n * видит picker снова и может повторить попытку, а не упирается в молчаливый no-op.\n */\n async function selectChannel(\n channel: SelectableConfirmationChannel,\n getRecaptchaPayload: RecaptchaPayloadProvider\n ): Promise<boolean> {\n if (!availableChannels.value.includes(channel)) return false\n\n // Каждый выбор канала — новая попытка пользователя, top-level: если предыдущий\n // выбор ещё висит на recaptcha/сети, этот его инвалидирует, а не наоборот —\n // побеждает то, что пользователь выбрал последним.\n const revision = beginOperation()\n confirmationMethod.value = channel\n const intent = channelIntent.value\n\n if (intent === CHANNEL_INTENT.Register)\n return register(pendingPassword.value, getRecaptchaPayload, revision)\n if (intent === CHANNEL_INTENT.Resend) {\n await resendCode(getRecaptchaPayload, revision)\n return false\n }\n if (intent === CHANNEL_INTENT.DispatchReset) {\n await dispatchReset(getRecaptchaPayload, revision)\n return false\n }\n return false\n }\n\n function goToChannelBack(): void {\n // Back с Channel почти всегда означает «отменить то, что сейчас в полёте»\n // (пользователь передумал после клика по каналу, пока шёл recaptcha/dispatch).\n cancelPendingOperation()\n clearError()\n const intent = channelIntent.value\n channelIntent.value = null\n\n if (intent === CHANNEL_INTENT.Register) currentStep.value = AUTH_STEP.Register\n else if (intent === CHANNEL_INTENT.Resend) currentStep.value = AUTH_STEP.Code\n else if (intent === CHANNEL_INTENT.DispatchReset) currentStep.value = AUTH_STEP.Reset\n else currentStep.value = AUTH_STEP.Phone\n }\n\n /** Перейти к шагу сброса пароля (или сразу к коду, если для сброса уже отправлен код и таймер ещё активен) */\n function goToReset(): void {\n cancelPendingOperation()\n clearError()\n\n if (codeContext.value === CODE_CONTEXT.Reset && resendTimerEndsAt.value > Date.now()) {\n currentStep.value = AUTH_STEP.Code\n } else {\n currentStep.value = AUTH_STEP.Reset\n }\n }\n\n function goToPhone(): void {\n cancelPendingOperation()\n clearError()\n currentStep.value = AUTH_STEP.Phone\n }\n\n function goToMethod(): void {\n cancelPendingOperation()\n clearError()\n currentStep.value = AUTH_STEP.Method\n }\n\n function goToLogin(): void {\n cancelPendingOperation()\n clearError()\n currentStep.value = AUTH_STEP.Login\n }\n\n function goToNewPassword(code: string): void {\n cancelPendingOperation()\n clearError()\n resetCode.value = code\n currentStep.value = AUTH_STEP.NewPassword\n }\n\n function goToResetCode(): void {\n cancelPendingOperation()\n clearError()\n resetCode.value = ''\n currentStep.value = AUTH_STEP.Code\n }\n\n function goToRegisterPassword(code: string): void {\n cancelPendingOperation()\n clearError()\n registerCode.value = code\n currentStep.value = AUTH_STEP.RegisterPassword\n }\n\n function goToRegisterCode(): void {\n cancelPendingOperation()\n clearError()\n registerCode.value = ''\n currentStep.value = AUTH_STEP.Code\n }\n\n return {\n currentStep,\n phone,\n countryCode,\n loading,\n error,\n fieldErrors,\n codeContext,\n confirmationMethod,\n channelIntent,\n lastFailedChannel,\n resetCode,\n registerCode,\n resendTimerEndsAt,\n pendingPassword,\n availableChannels,\n checkPhone,\n login,\n register,\n confirmRegistration,\n resendCode,\n dispatchReset,\n resetPassword,\n selectChannel,\n changeChannel,\n goToChannelBack,\n goToReset,\n goToPhone,\n goToMethod,\n goToLogin,\n goToNewPassword,\n goToResetCode,\n goToRegisterPassword,\n goToRegisterCode,\n reset,\n }\n})\n","import { computed, type ComputedRef } from 'vue'\n\nimport type { City, Stock, Store } from '@zenky/storefront-api'\n\nimport { useStoreProfileStore } from './store-profile'\n\n/** Accessor for the loaded store/city/stock (store/city are guaranteed to be loaded). */\nexport function useStore(): {\n store: ComputedRef<Store>\n city: ComputedRef<City>\n stock: ComputedRef<Stock | null>\n} {\n const profileStore = useStoreProfileStore()\n\n return {\n store: computed(() => profileStore.store!),\n city: computed(() => profileStore.city!),\n stock: computed(() => profileStore.stock),\n }\n}\n","import { storeToRefs } from 'pinia'\nimport { computed } from 'vue'\n\nimport { useStoreProfileStore } from './store-profile'\n\nexport function useStorefrontProfile() {\n const profileStore = useStoreProfileStore()\n const { store, city, stock, categories } = storeToRefs(profileStore)\n\n const isReady = computed(() => profileStore.isReady)\n const hasStock = computed(() => profileStore.hasStock)\n\n return {\n store,\n city,\n stock,\n categories,\n isReady,\n hasStock,\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { usePromotionsStore } from './chunk-544USTPB.js';
|
|
2
|
-
import { useRuntime, useCartStore, useAuthStore } from './chunk-
|
|
2
|
+
import { useRuntime, useCartStore, useAuthStore } from './chunk-TXR76IDL.js';
|
|
3
3
|
import { useStoreProfileStore } from './chunk-IOYYCA75.js';
|
|
4
4
|
import { ref } from 'vue';
|
|
5
5
|
|
|
@@ -106,5 +106,5 @@ function usePromotionsChecker() {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
export { useCartCredentials, usePromotionsChecker };
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
110
|
-
//# sourceMappingURL=chunk-
|
|
109
|
+
//# sourceMappingURL=chunk-QFKA2R6D.js.map
|
|
110
|
+
//# sourceMappingURL=chunk-QFKA2R6D.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cart/useCartCredentials.ts","../src/promotions/usePromotionsChecker.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/cart/useCartCredentials.ts","../src/promotions/usePromotionsChecker.ts"],"names":[],"mappings":"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","file":"chunk-QFKA2R6D.js","sourcesContent":["import { ref, type Ref } from 'vue'\n\nimport type { Order, OrderCredentials } from '@zenky/storefront-api'\n\nimport { useRuntime } from '../ports/runtime'\nimport { useAuthStore } from '../stores/auth'\nimport { useCartStore } from '../stores/cart'\nimport { useStoreProfileStore } from '../stores/store-profile'\n\nconst KEY_ORDER_ID = 'zenky_order_id'\nconst KEY_ORDER_TOKEN = 'zenky_order_token'\nconst WEEK_SECONDS = 60 * 60 * 24 * 7\n\n// App-level enum: OrderStatusKind.Pending = 'pending'.\nconst ORDER_STATUS_PENDING = 'pending'\n\nexport interface CartCredentials {\n orderIdCookie: Ref<string | null>\n orderTokenCookie: Ref<string | null>\n getStoreId: () => string\n getCityId: () => string\n getApiToken: () => string | undefined\n buildCredentials: (orderId: string, orderToken: string) => OrderCredentials\n getCredentials: () => OrderCredentials\n persistCredentials: (savedOrder: Order) => void\n clearPersistedCredentials: () => void\n isOrderActive: (order: Order) => boolean\n}\n\n/**\n * Manages order credentials. Order id/token persistence goes through the `storage`\n * port (the core doesn't know about useCookie). The refs are initialized from\n * storage; persisting writes to both.\n */\nexport function useCartCredentials(): CartCredentials {\n const { storage } = useRuntime()\n const cartStore = useCartStore()\n const authStore = useAuthStore()\n const profileStore = useStoreProfileStore()\n\n const orderIdRef = ref<string | null>(storage.get(KEY_ORDER_ID))\n const orderTokenRef = ref<string | null>(storage.get(KEY_ORDER_TOKEN))\n\n function getStoreId(): string {\n if (!profileStore.store) {\n throw new Error('Store is not initialized.')\n }\n\n return profileStore.store.id\n }\n\n function getCityId(): string {\n if (!profileStore.city) {\n throw new Error('City is not initialized.')\n }\n\n return profileStore.city.id\n }\n\n function getApiToken(): string | undefined {\n return authStore.apiToken\n }\n\n function buildCredentials(orderId: string, orderToken: string): OrderCredentials {\n const credentials: OrderCredentials = {\n id: orderId,\n token: orderToken,\n }\n\n const apiToken = getApiToken()\n\n if (apiToken) {\n credentials.api_token = apiToken\n }\n\n return credentials\n }\n\n function getCredentials(): OrderCredentials {\n if (!cartStore.credentials) {\n throw new Error('Cart has no credentials.')\n }\n\n return buildCredentials(cartStore.credentials.id, cartStore.credentials.token)\n }\n\n function persistCredentials(savedOrder: Order): void {\n orderIdRef.value = savedOrder.id\n orderTokenRef.value = savedOrder.token\n storage.set(KEY_ORDER_ID, savedOrder.id, { maxAge: WEEK_SECONDS })\n storage.set(KEY_ORDER_TOKEN, savedOrder.token, { maxAge: WEEK_SECONDS })\n }\n\n function clearPersistedCredentials(): void {\n orderIdRef.value = null\n orderTokenRef.value = null\n storage.remove(KEY_ORDER_ID)\n storage.remove(KEY_ORDER_TOKEN)\n }\n\n function isOrderActive(existingOrder: Order): boolean {\n if (!existingOrder.status) return true\n\n return String(existingOrder.status.kind) === ORDER_STATUS_PENDING\n }\n\n return {\n orderIdCookie: orderIdRef,\n orderTokenCookie: orderTokenRef,\n getStoreId,\n getCityId,\n getApiToken,\n buildCredentials,\n getCredentials,\n persistCredentials,\n clearPersistedCredentials,\n isOrderActive,\n }\n}\n","import { useRuntime } from '../ports/runtime'\nimport { useCartCredentials } from '../cart/useCartCredentials'\nimport { useCartStore } from '../stores/cart'\nimport { usePromotionsStore } from '../stores/promotions'\nimport { useStoreProfileStore } from '../stores/store-profile'\n\nexport interface PromotionsChecker {\n dispatchCheck: () => Promise<void>\n}\n\n/** Timeout — if the WS never responds, reset the checking flag. */\nconst WS_RESPONSE_TIMEOUT_MS = 5000\n\n/**\n * Checks promotions. Calls dispatchPromotionsChecker after the cart changes.\n * The result arrives over WebSocket (handled in useOrderChannel).\n *\n * Resolve this synchronously in setup, and call only `dispatchCheck` after an\n * await — like any core composable, see \"Call composables and stores\n * synchronously in setup\" in the README.\n *\n * ```ts\n * const { dispatchCheck } = usePromotionsChecker()\n *\n * async function addGift() {\n * await addVariantToOrder()\n * dispatchCheck()\n * }\n * ```\n */\nexport function usePromotionsChecker(): PromotionsChecker {\n const { sdk, events } = useRuntime()\n const cartStore = useCartStore()\n const profileStore = useStoreProfileStore()\n const promotionsStore = usePromotionsStore()\n const credentials = useCartCredentials()\n\n async function dispatchCheck(): Promise<void> {\n if (!cartStore.hasOrder || promotionsStore.checking) return\n\n const storeId = profileStore.store?.id\n if (!storeId) return\n\n promotionsStore.setChecking(true)\n promotionsStore.clearRewards() // Clear old ones — WS will refill with current ones\n events?.get()?.promotionsCheckerStarted({ order: cartStore.order })\n\n try {\n const creds = credentials.getCredentials()\n await sdk.orders.dispatchPromotionsChecker(storeId, creds)\n\n setTimeout(() => {\n if (promotionsStore.checking) promotionsStore.setChecking(false)\n }, WS_RESPONSE_TIMEOUT_MS)\n } catch (e: unknown) {\n console.error('[promotions] check failed', e)\n promotionsStore.setChecking(false)\n }\n }\n\n return { dispatchCheck }\n}\n"]}
|
|
@@ -198,6 +198,14 @@ function parsePersonsCount(raw) {
|
|
|
198
198
|
const parsed = raw ? Number.parseInt(raw, 10) : NaN;
|
|
199
199
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
|
|
200
200
|
}
|
|
201
|
+
function carryOverPackages(previous, next) {
|
|
202
|
+
if (!previous || previous.id !== next.id || next.packages !== void 0) return next;
|
|
203
|
+
return {
|
|
204
|
+
...next,
|
|
205
|
+
...previous.packages !== void 0 ? { packages: previous.packages } : {},
|
|
206
|
+
...next.packaging_price === void 0 && previous.packaging_price !== void 0 ? { packaging_price: previous.packaging_price } : {}
|
|
207
|
+
};
|
|
208
|
+
}
|
|
201
209
|
var useCartStore = defineStore("zenky-cart", () => {
|
|
202
210
|
const { storage } = useRuntime();
|
|
203
211
|
const settingsStore = useOrderSettingsStore();
|
|
@@ -253,7 +261,7 @@ var useCartStore = defineStore("zenky-cart", () => {
|
|
|
253
261
|
});
|
|
254
262
|
return;
|
|
255
263
|
}
|
|
256
|
-
order.value = next;
|
|
264
|
+
order.value = carryOverPackages(order.value, next);
|
|
257
265
|
credentials.value = { id: next.id, token: next.token };
|
|
258
266
|
if (Array.isArray(next.payments) && next.payments.length > 0) {
|
|
259
267
|
restorePaymentSelection(next.payments);
|
|
@@ -284,6 +292,10 @@ var useCartStore = defineStore("zenky-cart", () => {
|
|
|
284
292
|
restorePaymentSelection(partial.payments);
|
|
285
293
|
}
|
|
286
294
|
}
|
|
295
|
+
function setOrderPackages(packages, packagingPrice) {
|
|
296
|
+
if (!order.value) return;
|
|
297
|
+
order.value = { ...order.value, packages, packaging_price: packagingPrice };
|
|
298
|
+
}
|
|
287
299
|
function setCredentials(next) {
|
|
288
300
|
credentials.value = next;
|
|
289
301
|
}
|
|
@@ -446,6 +458,7 @@ var useCartStore = defineStore("zenky-cart", () => {
|
|
|
446
458
|
minPriceViolation,
|
|
447
459
|
setOrder,
|
|
448
460
|
patchOrder,
|
|
461
|
+
setOrderPackages,
|
|
449
462
|
setCredentials,
|
|
450
463
|
setLoading,
|
|
451
464
|
setInitializing,
|
|
@@ -485,5 +498,5 @@ var useCartStore = defineStore("zenky-cart", () => {
|
|
|
485
498
|
});
|
|
486
499
|
|
|
487
500
|
export { createStorefront, provideStorefront, useAuthStore, useCartStore, useOrderSettingsStore, useRuntime };
|
|
488
|
-
//# sourceMappingURL=chunk-
|
|
489
|
-
//# sourceMappingURL=chunk-
|
|
501
|
+
//# sourceMappingURL=chunk-TXR76IDL.js.map
|
|
502
|
+
//# sourceMappingURL=chunk-TXR76IDL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ports/runtime.ts","../src/stores/auth.ts","../src/stores/order-settings.ts","../src/stores/cart.ts"],"names":["defineStore","ref","computed","raw"],"mappings":"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","file":"chunk-TXR76IDL.js","sourcesContent":["import { inject, provide, type App, type InjectionKey, type Plugin } from 'vue'\n\nimport type { StorefrontRuntime } from './index'\n\n// Composition root. The consumer assembles the runtime (adapters) once and installs\n// the plugin; domain composables read it via useRuntime() instead of calling Nuxt directly.\n\nconst RUNTIME_KEY = Symbol.for('zenky.storefront.runtime') as InjectionKey<StorefrontRuntime>\n\ntype RequiredPort = {\n [K in keyof StorefrontRuntime]-?: undefined extends StorefrontRuntime[K] ? never : K\n}[keyof StorefrontRuntime]\n\nconst REQUIRED_PORTS = [\n 'sdk',\n 'storage',\n 'notifier',\n 'activity',\n 'messages',\n] as const satisfies readonly RequiredPort[]\n\ntype ListedPort = (typeof REQUIRED_PORTS)[number]\ntype UnlistedRequiredPort = Exclude<RequiredPort, ListedPort>\n\nconst _allRequiredPortsListed: UnlistedRequiredPort extends never ? true : never = true\nvoid _allRequiredPortsListed\n\nfunction assertRequiredPorts(runtime: StorefrontRuntime): void {\n const missing = REQUIRED_PORTS.filter((port) => runtime[port] == null)\n if (missing.length > 0) {\n throw new Error(\n `[@zenky/storefront-vue] Runtime is missing required ports: ${missing.join(', ')}. ` +\n 'See the Runtime Ports table in the README.'\n )\n }\n}\n\n/** Vue plugin: app.use(createStorefront(runtime)). */\nexport function createStorefront(runtime: StorefrontRuntime): Plugin {\n assertRequiredPorts(runtime)\n\n return {\n install(app: App) {\n app.provide(RUNTIME_KEY, runtime)\n },\n }\n}\n\n/** Alternative to the plugin — calls provide() inside setup (e.g. for an isolated widget). */\nexport function provideStorefront(runtime: StorefrontRuntime): void {\n assertRequiredPorts(runtime)\n provide(RUNTIME_KEY, runtime)\n}\n\n/** Gives any core composable or store access to the runtime. */\nexport function useRuntime(): StorefrontRuntime {\n const runtime = inject(RUNTIME_KEY)\n if (!runtime) {\n throw new Error(\n '[@zenky/storefront-vue] Runtime was not provided. ' +\n 'Install the plugin with app.use(createStorefront(runtime)).'\n )\n }\n return runtime\n}\n","import { defineStore } from 'pinia'\nimport { computed, ref, type ComputedRef, type Ref } from 'vue'\n\nimport { useRuntime } from '../ports/runtime'\n\n// Keys match the old CookieKey.AuthToken/AuthPhone — so users don't get logged out.\nconst AUTH_TOKEN_KEY = 'zenky_auth_token'\nconst AUTH_PHONE_KEY = 'zenky_auth_phone'\nconst YEAR_SECONDS = 60 * 60 * 24 * 365\n\n// Named return type (the dts rule).\nexport interface AuthStore {\n token: Ref<string | null>\n phone: Ref<string | null>\n countryCode: Ref<string>\n isAuthenticated: ComputedRef<boolean>\n apiToken: ComputedRef<string | undefined>\n initials: ComputedRef<string>\n setToken: (token: string, phone?: string, countryCode?: string) => void\n clearToken: () => void\n initFromCookie: () => void\n}\n\nexport const useAuthStore = defineStore('zenky-auth', (): AuthStore => {\n // The token is only stored and exposed here — it is never written into the SDK.\n // The consumer passes it as a parameter on every call: mutating a shared client\n // during SSR would leak one user's Bearer token into another user's requests.\n const { storage } = useRuntime()\n\n const token = ref<string | null>(null)\n const phone = ref<string | null>(null)\n const countryCode = ref('RU')\n\n const isAuthenticated = computed(() => token.value !== null && token.value !== '')\n\n // The only place that decides which token goes to the SDK. Consumers read this\n // instead of `token` directly: undefined instead of an empty string, otherwise\n // an empty Bearer '' would be sent.\n const apiToken = computed(() =>\n isAuthenticated.value ? (token.value ?? undefined) : undefined\n )\n\n const initials = computed(() => {\n if (!phone.value) return '?'\n return phone.value.replace(/\\D/g, '').slice(-4)\n })\n\n function setToken(nextToken: string, nextPhone?: string, nextCountryCode?: string): void {\n token.value = nextToken\n storage.set(AUTH_TOKEN_KEY, nextToken, { maxAge: YEAR_SECONDS })\n\n if (nextPhone) {\n phone.value = nextPhone\n storage.set(AUTH_PHONE_KEY, nextPhone, { maxAge: YEAR_SECONDS })\n }\n\n if (nextCountryCode) {\n countryCode.value = nextCountryCode\n }\n }\n\n function clearToken(): void {\n token.value = null\n phone.value = null\n storage.remove(AUTH_TOKEN_KEY)\n storage.remove(AUTH_PHONE_KEY)\n }\n\n function initFromCookie(): void {\n const savedToken = storage.get(AUTH_TOKEN_KEY) || null\n token.value = savedToken\n\n phone.value = storage.get(AUTH_PHONE_KEY) || null\n }\n\n return {\n token,\n phone,\n countryCode,\n isAuthenticated,\n apiToken,\n initials,\n setToken,\n clearToken,\n initFromCookie,\n }\n})\n","import { DeliveryMethod } from '@zenky/storefront-api'\nimport { defineStore } from 'pinia'\nimport { computed, ref, type ComputedRef, type Ref } from 'vue'\n\nimport type { City, Stock } from '@zenky/storefront-api'\n\nimport { useRuntime } from '../ports/runtime'\n\n// Keys match the old CookieKey.* — so saved settings aren't lost.\nconst KEY_DELIVERY_METHOD = 'zenky_delivery_method'\nconst KEY_ON_PREMISE_TABLE = 'zenky_on_premise_table'\nconst KEY_SELECTED_STOCK_ID = 'zenky_selected_stock_id'\nconst KEY_SELECTED_ADDRESS = 'zenky_selected_address'\nconst KEY_SELECTED_ADDRESS_ID = 'zenky_selected_address_id'\nconst KEY_SELECTED_ADDRESS_NAME = 'zenky_selected_address_name'\n\nconst VALID_DELIVERY_METHODS = new Set<string>(Object.values(DeliveryMethod))\n\nexport interface OrderSettingsStore {\n deliveryMethod: Ref<DeliveryMethod>\n onPremiseTable: Ref<string | null>\n selectedStock: Ref<Stock | null>\n selectedAddress: Ref<string | null>\n selectedAddressId: Ref<string | null>\n selectedAddressName: Ref<string | null>\n setDeliveryMethod: (method: DeliveryMethod) => void\n setOnPremiseTable: (table: string | null) => void\n setSelectedStock: (stock: Stock | null) => void\n setSelectedAddress: (\n address: string | null,\n addressId?: string | null,\n addressName?: string | null\n ) => void\n validateDeliveryMethod: (availableMethods: DeliveryMethod[]) => void\n restoreFromCookies: (city: City) => void\n isDelivery: ComputedRef<boolean>\n isPickup: ComputedRef<boolean>\n isOnPremise: ComputedRef<boolean>\n needsAddress: ComputedRef<boolean>\n needsStock: ComputedRef<boolean>\n needsTable: ComputedRef<boolean>\n}\n\nexport const useOrderSettingsStore = defineStore('zenky-order-settings', (): OrderSettingsStore => {\n const { storage } = useRuntime()\n\n const deliveryMethod = ref<DeliveryMethod>(DeliveryMethod.Delivery)\n const onPremiseTable = ref<string | null>(null)\n const selectedStock = ref<Stock | null>(null)\n const selectedAddress = ref<string | null>(null)\n const selectedAddressId = ref<string | null>(null)\n const selectedAddressName = ref<string | null>(null)\n\n function setDeliveryMethod(method: DeliveryMethod): void {\n deliveryMethod.value = method\n storage.set(KEY_DELIVERY_METHOD, method)\n }\n\n function setOnPremiseTable(table: string | null): void {\n onPremiseTable.value = table\n if (table) storage.set(KEY_ON_PREMISE_TABLE, table)\n else storage.remove(KEY_ON_PREMISE_TABLE)\n }\n\n function setSelectedStock(stock: Stock | null): void {\n selectedStock.value = stock\n if (stock) storage.set(KEY_SELECTED_STOCK_ID, stock.id)\n else storage.remove(KEY_SELECTED_STOCK_ID)\n }\n\n function setSelectedAddress(\n address: string | null,\n addressId?: string | null,\n addressName?: string | null\n ): void {\n selectedAddress.value = address\n selectedAddressId.value = addressId ?? null\n selectedAddressName.value = addressName ?? null\n writeOrRemove(KEY_SELECTED_ADDRESS, address)\n writeOrRemove(KEY_SELECTED_ADDRESS_ID, addressId ?? null)\n writeOrRemove(KEY_SELECTED_ADDRESS_NAME, addressName ?? null)\n }\n\n function writeOrRemove(key: string, value: string | null): void {\n if (value) storage.set(key, value)\n else storage.remove(key)\n }\n\n function validateDeliveryMethod(availableMethods: DeliveryMethod[]): void {\n const first = availableMethods[0]\n if (!first) return\n\n if (!availableMethods.includes(deliveryMethod.value)) {\n deliveryMethod.value = first\n storage.set(KEY_DELIVERY_METHOD, first)\n }\n }\n\n /** Call only after the city has loaded. */\n function restoreFromCookies(city: City): void {\n const savedMethod = storage.get(KEY_DELIVERY_METHOD)\n if (savedMethod && VALID_DELIVERY_METHODS.has(savedMethod)) {\n deliveryMethod.value = savedMethod as DeliveryMethod\n }\n\n const savedStockId = storage.get(KEY_SELECTED_STOCK_ID)\n const stocks = city.stocks ?? []\n if (savedStockId && stocks.length) {\n const stock = stocks.find((s) => s.id === savedStockId) ?? null\n selectedStock.value = stock\n if (!stock) storage.remove(KEY_SELECTED_STOCK_ID)\n }\n\n const savedAddress = storage.get(KEY_SELECTED_ADDRESS)\n if (savedAddress) selectedAddress.value = savedAddress\n\n const savedAddressId = storage.get(KEY_SELECTED_ADDRESS_ID)\n if (savedAddressId) selectedAddressId.value = savedAddressId\n\n const savedAddressName = storage.get(KEY_SELECTED_ADDRESS_NAME)\n if (savedAddressName) selectedAddressName.value = savedAddressName\n\n const savedTable = storage.get(KEY_ON_PREMISE_TABLE)\n if (savedTable) onPremiseTable.value = savedTable\n }\n\n const isDelivery = computed(() => deliveryMethod.value === DeliveryMethod.Delivery)\n const isPickup = computed(() => deliveryMethod.value === DeliveryMethod.Pickup)\n const isOnPremise = computed(() => deliveryMethod.value === DeliveryMethod.OnPremise)\n const needsAddress = computed(() => deliveryMethod.value === DeliveryMethod.Delivery)\n const needsStock = computed(\n () =>\n deliveryMethod.value === DeliveryMethod.Pickup ||\n deliveryMethod.value === DeliveryMethod.OnPremise\n )\n const needsTable = computed(() => deliveryMethod.value === DeliveryMethod.OnPremise)\n\n return {\n deliveryMethod,\n onPremiseTable,\n selectedStock,\n selectedAddress,\n selectedAddressId,\n selectedAddressName,\n setDeliveryMethod,\n setOnPremiseTable,\n setSelectedStock,\n setSelectedAddress,\n validateDeliveryMethod,\n restoreFromCookies,\n isDelivery,\n isPickup,\n isOnPremise,\n needsAddress,\n needsStock,\n needsTable,\n }\n})\n","import { PaymentMethod } from '@zenky/storefront-api'\nimport { defineStore } from 'pinia'\nimport { computed, ref, type ComputedRef, type Ref } from 'vue'\n\nimport type {\n DeliveryMethod,\n Order,\n OrderCheckoutTotal,\n OrderDeliveryMethod,\n OrderPackage,\n OrderPaymentMethod,\n OrderPaymentTransaction,\n OrderProductVariant,\n OrderSettings,\n} from '@zenky/storefront-api'\n\nimport { useRuntime } from '../ports/runtime'\nimport { useOrderSettingsStore } from './order-settings'\n\n// Keys match the old CookieKey.* — so saved values aren't lost.\nconst KEY_COMMENT = 'zenky_order_comment'\nconst KEY_PERSONS_COUNT = 'zenky_order_persons_count'\n\nexport interface CartCredentials {\n id: string\n token: string\n}\n\n/** Bonus intent (business state) — used for headless reconciliation. */\nexport interface AppliedBonusesIntent {\n enabled: boolean\n /** null means \"redeem the maximum available\". */\n desiredAmountMinor: number | null\n /** PIN flow: bonuses were reset and need to be reconfirmed. */\n requiresConfirmation: boolean\n}\n\nexport interface MinPriceViolation {\n remaining: number\n progress: number\n minPrice: number\n}\n\nfunction emptyBonusesIntent(): AppliedBonusesIntent {\n return { enabled: false, desiredAmountMinor: null, requiresConfirmation: false }\n}\n\nfunction parsePersonsCount(raw: string | null): number {\n const parsed = raw ? Number.parseInt(raw, 10) : NaN\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 0\n}\n\nfunction carryOverPackages(previous: Order | null, next: Order): Order {\n if (!previous || previous.id !== next.id || next.packages !== undefined) return next\n\n return {\n ...next,\n ...(previous.packages !== undefined ? { packages: previous.packages } : {}),\n ...(next.packaging_price === undefined && previous.packaging_price !== undefined\n ? { packaging_price: previous.packaging_price }\n : {}),\n }\n}\n\nexport interface CartStore {\n order: Ref<Order | null>\n credentials: Ref<CartCredentials | null>\n loading: Ref<boolean>\n initializing: Ref<boolean>\n optimisticAdjustments: Ref<Record<string, number>>\n lineOptimistic: Ref<Record<string, number>>\n deliveryMethods: Ref<OrderDeliveryMethod[]>\n orderSettings: Ref<OrderSettings | null>\n comment: Ref<string>\n personsCount: Ref<number>\n checkoutTotal: Ref<OrderCheckoutTotal | null>\n selectedPaymentMethod: Ref<PaymentMethod | null>\n selectedPaymentBill: Ref<number | null>\n selectedCardTokenId: Ref<string | null>\n selectedSaveCard: Ref<boolean>\n bonusesIntent: Ref<AppliedBonusesIntent>\n deliveryTimeIntent: Ref<string | null>\n minPriceViolation: Ref<MinPriceViolation | null>\n setOrder: (order: Order) => void\n patchOrder: (partial: Order) => void\n setOrderPackages: (packages: OrderPackage[], packagingPrice: number | null) => void\n setCredentials: (credentials: CartCredentials) => void\n setLoading: (value: boolean) => void\n setInitializing: (value: boolean) => void\n adjustOptimistic: (productId: string, delta: number) => void\n clearOptimistic: (productId: string) => void\n adjustLineOptimistic: (lineKey: string, delta: number) => void\n setDeliveryMethods: (methods: OrderDeliveryMethod[]) => void\n setOrderSettings: (settings: OrderSettings) => void\n clearOrderSettings: () => void\n setComment: (value: string) => void\n setPersonsCount: (value: number) => void\n setSelectedPaymentMethod: (method: PaymentMethod | null) => void\n setSelectedPaymentBill: (bill: number | null) => void\n setSelectedCardTokenId: (id: string | null) => void\n setSelectedSaveCard: (value: boolean) => void\n setBonusesIntentEnabled: (value: boolean) => void\n setDesiredBonusesAmount: (value: number | null) => void\n setBonusesRequiresConfirmation: (value: boolean) => void\n clearBonusesIntent: () => void\n setDeliveryTimeIntent: (value: string | null) => void\n restorePaymentSelection: (payments: OrderPaymentTransaction[]) => void\n validatePaymentSelection: () => void\n setOrderPaymentsState: (payments: OrderPaymentTransaction[]) => void\n setCheckoutTotal: (value: OrderCheckoutTotal) => void\n clearCheckoutTotal: () => void\n clearCart: () => void\n hasOrder: ComputedRef<boolean>\n hasCredentials: ComputedRef<boolean>\n variants: ComputedRef<OrderProductVariant[]>\n totalPrice: ComputedRef<number>\n itemCount: ComputedRef<number>\n availableDeliveryMethodIds: ComputedRef<DeliveryMethod[]>\n paymentMethods: ComputedRef<OrderPaymentMethod[]>\n hasBonusesApplied: ComputedRef<boolean>\n productQuantities: ComputedRef<Record<string, number>>\n}\n\nexport const useCartStore = defineStore('zenky-cart', (): CartStore => {\n const { storage } = useRuntime()\n const settingsStore = useOrderSettingsStore()\n\n const order = ref<Order | null>(null)\n const credentials = ref<CartCredentials | null>(null)\n const loading = ref(false)\n const initializing = ref(false)\n const optimisticAdjustments = ref<Record<string, number>>({})\n const lineOptimistic = ref<Record<string, number>>({})\n const deliveryMethods = ref<OrderDeliveryMethod[]>([])\n const orderSettings = ref<OrderSettings | null>(null)\n const comment = ref(storage.get(KEY_COMMENT) ?? '')\n const personsCount = ref(parsePersonsCount(storage.get(KEY_PERSONS_COUNT)))\n const checkoutTotal = ref<OrderCheckoutTotal | null>(null)\n const selectedPaymentMethod = ref<PaymentMethod | null>(null)\n const selectedPaymentBill = ref<number | null>(null)\n const selectedCardTokenId = ref<string | null>(null)\n const selectedSaveCard = ref(false)\n const bonusesIntent = ref<AppliedBonusesIntent>(emptyBonusesIntent())\n const deliveryTimeIntent = ref<string | null>(null)\n const minPriceViolation = ref<MinPriceViolation | null>(null)\n\n function restorePaymentSelection(payments: OrderPaymentTransaction[]): void {\n const restored = payments.find((p) => {\n const raw = p.method as unknown\n const id = typeof raw === 'string' ? raw : ((raw as { id?: string } | null)?.id ?? null)\n return id !== PaymentMethod.Bonuses\n })\n if (!restored) return\n\n const raw = restored.method as unknown\n const methodId = (\n typeof raw === 'string' ? raw : ((raw as { id?: PaymentMethod } | null)?.id ?? null)\n ) as PaymentMethod | null\n if (!methodId || selectedPaymentMethod.value === methodId) return\n\n selectedPaymentMethod.value = methodId\n\n const meta = restored.transaction_meta as { bill?: number | null } | null | undefined\n const billMinor = meta?.bill ?? null\n const newBill = billMinor != null && billMinor > 0 ? billMinor : null\n if (selectedPaymentBill.value !== newBill) {\n selectedPaymentBill.value = newBill\n }\n }\n\n function validatePaymentSelection(): void {\n if (!selectedPaymentMethod.value) return\n const methods = orderSettings.value?.payment_methods ?? []\n if (!methods.some((m) => m.id === selectedPaymentMethod.value)) {\n selectedPaymentMethod.value = null\n selectedPaymentBill.value = null\n }\n }\n\n function setOrder(next: Order): void {\n if (!next?.id || !next.token) {\n console.warn('[cart] setOrder ignored — missing id/token', {\n hasId: Boolean(next?.id),\n hasToken: Boolean(next?.token),\n })\n return\n }\n\n order.value = carryOverPackages(order.value, next)\n credentials.value = { id: next.id, token: next.token }\n\n if (Array.isArray(next.payments) && next.payments.length > 0) {\n restorePaymentSelection(next.payments as unknown as OrderPaymentTransaction[])\n }\n }\n\n function patchOrder(partial: Order): void {\n if (!partial?.id || !partial.token) {\n console.warn('[cart] patchOrder ignored — missing id/token', {\n hasId: Boolean(partial?.id),\n hasToken: Boolean(partial?.token),\n })\n return\n }\n\n if (!order.value) {\n order.value = partial\n } else {\n const merged: Order = { ...order.value }\n for (const key of Object.keys(partial) as (keyof Order)[]) {\n const value = partial[key]\n if (value !== undefined) {\n ;(merged as unknown as Record<string, unknown>)[key as string] = value\n }\n }\n order.value = merged\n }\n\n credentials.value = { id: partial.id, token: partial.token }\n\n if (Array.isArray(partial.payments) && partial.payments.length > 0) {\n restorePaymentSelection(partial.payments as unknown as OrderPaymentTransaction[])\n }\n }\n\n function setOrderPackages(packages: OrderPackage[], packagingPrice: number | null): void {\n if (!order.value) return\n\n order.value = { ...order.value, packages, packaging_price: packagingPrice }\n }\n\n function setCredentials(next: CartCredentials): void {\n credentials.value = next\n }\n\n function setLoading(value: boolean): void {\n loading.value = value\n }\n\n function setInitializing(value: boolean): void {\n initializing.value = value\n }\n\n function adjustOptimistic(productId: string, delta: number): void {\n const next = (optimisticAdjustments.value[productId] ?? 0) + delta\n if (next === 0) delete optimisticAdjustments.value[productId]\n else optimisticAdjustments.value[productId] = next\n }\n\n function clearOptimistic(productId: string): void {\n delete optimisticAdjustments.value[productId]\n }\n\n function adjustLineOptimistic(lineKey: string, delta: number): void {\n const next = (lineOptimistic.value[lineKey] ?? 0) + delta\n if (next === 0) delete lineOptimistic.value[lineKey]\n else lineOptimistic.value[lineKey] = next\n }\n\n function setDeliveryMethods(methods: OrderDeliveryMethod[]): void {\n deliveryMethods.value = methods\n settingsStore.validateDeliveryMethod(methods.map((m) => m.id))\n }\n\n function setOrderSettings(settings: OrderSettings): void {\n orderSettings.value = settings\n setDeliveryMethods(settings.delivery_methods)\n validatePaymentSelection()\n }\n\n function clearOrderSettings(): void {\n orderSettings.value = null\n }\n\n function setComment(value: string): void {\n comment.value = value\n if (value) storage.set(KEY_COMMENT, value)\n else storage.remove(KEY_COMMENT)\n }\n\n function setPersonsCount(value: number): void {\n personsCount.value = value\n if (value > 0) storage.set(KEY_PERSONS_COUNT, String(value))\n else storage.remove(KEY_PERSONS_COUNT)\n }\n\n function setSelectedPaymentMethod(method: PaymentMethod | null): void {\n selectedPaymentMethod.value = method\n }\n\n function setSelectedPaymentBill(bill: number | null): void {\n selectedPaymentBill.value = bill\n }\n\n function setSelectedCardTokenId(id: string | null): void {\n selectedCardTokenId.value = id\n }\n\n function setSelectedSaveCard(value: boolean): void {\n selectedSaveCard.value = value\n }\n\n function setBonusesIntentEnabled(value: boolean): void {\n bonusesIntent.value.enabled = value\n if (!value) {\n bonusesIntent.value.desiredAmountMinor = null\n bonusesIntent.value.requiresConfirmation = false\n }\n }\n\n function setDesiredBonusesAmount(value: number | null): void {\n bonusesIntent.value.desiredAmountMinor = value\n }\n\n function setBonusesRequiresConfirmation(value: boolean): void {\n bonusesIntent.value.requiresConfirmation = value\n }\n\n function clearBonusesIntent(): void {\n bonusesIntent.value = emptyBonusesIntent()\n }\n\n function setDeliveryTimeIntent(value: string | null): void {\n deliveryTimeIntent.value = value\n }\n\n function setOrderPaymentsState(payments: OrderPaymentTransaction[]): void {\n if (order.value) {\n order.value = { ...order.value, payments } as Order\n }\n restorePaymentSelection(payments)\n }\n\n function setCheckoutTotal(value: OrderCheckoutTotal): void {\n checkoutTotal.value = value\n\n const min = value.min_price\n // An empty order (no variants) with a non-zero delivery fee in the total\n // doesn't count as a minimum-price violation.\n const hasItems = (order.value?.variants?.length ?? 0) > 0\n minPriceViolation.value =\n hasItems && min != null && value.total > 0 && value.total < min\n ? {\n remaining: Math.max(0, min - value.total),\n progress: Math.min(1, value.total / min),\n minPrice: min,\n }\n : null\n }\n\n function clearCheckoutTotal(): void {\n checkoutTotal.value = null\n minPriceViolation.value = null\n }\n\n function clearCart(): void {\n order.value = null\n credentials.value = null\n checkoutTotal.value = null\n optimisticAdjustments.value = {}\n lineOptimistic.value = {}\n orderSettings.value = null\n comment.value = ''\n personsCount.value = 0\n storage.remove(KEY_COMMENT)\n storage.remove(KEY_PERSONS_COUNT)\n selectedPaymentMethod.value = null\n selectedPaymentBill.value = null\n selectedCardTokenId.value = null\n selectedSaveCard.value = false\n bonusesIntent.value = emptyBonusesIntent()\n deliveryTimeIntent.value = null\n minPriceViolation.value = null\n }\n\n const hasOrder = computed(() => order.value !== null)\n const hasCredentials = computed(() => credentials.value !== null)\n const variants = computed<OrderProductVariant[]>(() => order.value?.variants ?? [])\n const totalPrice = computed(() => order.value?.total_price ?? 0)\n const itemCount = computed(() => variants.value.reduce((sum, v) => sum + v.quantity, 0))\n const availableDeliveryMethodIds = computed<DeliveryMethod[]>(() =>\n deliveryMethods.value.map((m) => m.id)\n )\n const paymentMethods = computed<OrderPaymentMethod[]>(\n () => orderSettings.value?.payment_methods ?? []\n )\n const hasBonusesApplied = computed(() => {\n const payments = order.value?.payments ?? []\n return (payments as unknown as Array<{ method: unknown }>).some((p) => {\n const raw = p.method\n const id = typeof raw === 'string' ? raw : ((raw as { id?: string } | null)?.id ?? null)\n return id === PaymentMethod.Bonuses\n })\n })\n const productQuantities = computed<Record<string, number>>(() => {\n const map: Record<string, number> = {}\n for (const variant of variants.value) {\n const pid = variant.product_id\n map[pid] = (map[pid] ?? 0) + variant.quantity\n }\n return map\n })\n\n return {\n order,\n credentials,\n loading,\n initializing,\n optimisticAdjustments,\n lineOptimistic,\n deliveryMethods,\n orderSettings,\n comment,\n personsCount,\n checkoutTotal,\n selectedPaymentMethod,\n selectedPaymentBill,\n selectedCardTokenId,\n selectedSaveCard,\n bonusesIntent,\n deliveryTimeIntent,\n minPriceViolation,\n setOrder,\n patchOrder,\n setOrderPackages,\n setCredentials,\n setLoading,\n setInitializing,\n adjustOptimistic,\n clearOptimistic,\n adjustLineOptimistic,\n setDeliveryMethods,\n setOrderSettings,\n clearOrderSettings,\n setComment,\n setPersonsCount,\n setSelectedPaymentMethod,\n setSelectedPaymentBill,\n setSelectedCardTokenId,\n setSelectedSaveCard,\n setBonusesIntentEnabled,\n setDesiredBonusesAmount,\n setBonusesRequiresConfirmation,\n clearBonusesIntent,\n setDeliveryTimeIntent,\n restorePaymentSelection,\n validatePaymentSelection,\n setOrderPaymentsState,\n setCheckoutTotal,\n clearCheckoutTotal,\n clearCart,\n hasOrder,\n hasCredentials,\n variants,\n totalPrice,\n itemCount,\n availableDeliveryMethodIds,\n paymentMethods,\n hasBonusesApplied,\n productQuantities,\n }\n})\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { Plugin } from 'vue';
|
|
|
4
4
|
export { Major, Minor, asMajor, asMinor, formatPrice, majorToMinor, minorToMajor, minorToMajorString } from './money/index.js';
|
|
5
5
|
export { FontConfig, PrimaryShades, ThemeColorConfig, ThemeData, buildCssVariableMap, generatePrimaryShades, generateShades, useTheme } from './theme/index.js';
|
|
6
6
|
export { DayScheduleInfo, OperationChain, ScheduleRow, SocialLink, TodayScheduleInfo, buildQrCodeUrl, createDebounce, createOperationChain, formatAddressCityLast, formatDate, formatDateTime, formatPhoneNational, formatPhoneSpaced, formatScheduleStatus, getApiErrorMessage, getApiFieldErrors, getEmailLink, getPhoneTelLink, getSocialLinks, getTodayInfo, getWebsiteLink, getWeeklySchedule, groupScheduleDays, pluralize, toDateInputValue, todayInTimezone } from './utils/index.js';
|
|
7
|
-
export { CatalogProductMatch, CategoryWithProducts, OrderCredentials, ProductListParams, ProductVariantOptionListItem, ResolvedPrice, UseProductDetailApi, UseProductListApi, canAddDirectly, findProductInCatalog, formatWeight, getProductWeight, getVariantWeight, resolveVariantPrice, toGrams, usePriceRecalculation, useProductDetail, useProductList, useProductPricing, useProductVariant, useProductVariantModifiers, useProductVariantSelector, useProductsByCategory, useRelatedProducts } from './products/index.js';
|
|
7
|
+
export { CatalogProductMatch, CategoryWithProducts, OrderCredentials, ProductBadgeAccent, ProductBadgeLayout, ProductBadgeView, ProductBadgeVisibility, ProductListParams, ProductVariantOptionListItem, ResolvedPrice, UseProductDetailApi, UseProductListApi, canAddDirectly, filterProductBadges, findProductInCatalog, formatWeight, getProductBadgeAccent, getProductBadgeLayout, getProductWeight, getVariantWeight, resolveVariantPrice, toGrams, toProductBadgeViews, usePriceRecalculation, useProductDetail, useProductList, useProductPricing, useProductVariant, useProductVariantModifiers, useProductVariantSelector, useProductsByCategory, useRelatedProducts } from './products/index.js';
|
|
8
8
|
export { GroupedProducts, SubcategoryGroup, collectDescendantIds, findCategoryById, findCategoryByShortId, findRootAncestor, getCategoryPath, getCity, getRemoteCatalog, getStock, groupProductsBySubcategory, useCollections } from './catalog/index.js';
|
|
9
9
|
export { C as CatalogEntity, S as StaticCatalogItem, a as StaticRemoteCatalog, c as catalogItemEntity, i as isRenderableCatalogItem } from './catalogEntity-C2UxCFng.js';
|
|
10
10
|
export { AttachedCustomerCache, BonusesReconciliation, BonusesReconciliationDeps, CASH_DENOMINATIONS_MAJOR, CachedCustomerView, CartCredentials, CartDependencies, CartErrorScope, CartInitialization, CartItemRequest, CartLineKeyParams, CartMutationComposable, CartOperations, CartQuantities, CartRecalculation, CartRecalculationDeps, CartStockWatcher, CashChangePresetsOptions, CheckoutFlowFlags, CustomerAttachComposable, DEFAULT_ROUND_STEPS_MAJOR, MainPaymentRequestParams, MutationKind, MutationOptions, ORDER_EVENTS, ORDER_WITH, OrderBonusesComposable, OrderBonusesDeps, OrderCredentialsLike, OrderDelivery, OrderDeliveryDeps, OrderPromocodeComposable, OrderPromocodeDeps, OrderSettingsComposable, OrderTotal, PaymentSelection, PaymentSelectionComposable, RestrictedAddToCart, RestrictionGate, RestrictionGateProduct, RetryOptions, StorefrontCart, buildCartLineKey, buildCashChangePresets, buildMainPaymentRequest, getCartErrorCode, getCartErrorHttpCode, getCartErrorMessage, getCashDenominationsMinor, getDefaultRoundStepsMinor, getValidationErrors, logCartError, normalizeAddress, useBonusesReconciliation, useCartAddressSync, useCartCredentials, useCartCustomerAttachment, useCartDeliveryAttachment, useCartInitialization, useCartMutation, useCartOperations, useCartQuantities, useCartRecalculation, useCartStockWatcher, useCheckoutFlow, useCustomerAttach, useOnlinePaymentRetry, useOrderBonuses, useOrderChannel, useOrderDelivery, useOrderPromocode, useOrderSettings, useOrderTotal, usePaymentSelection, useRestrictedAddToCart, useRestrictionGate, useStorefrontCart, useVisibleCartVariants, variantLineKey } from './cart/index.js';
|
package/dist/index.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { KEY_MESSAGE_FORMATTER, NOOP_ACTIVITY_REPORTER, NOOP_NOTIFIER, NOOP_RUM, createMemoryStorage, err, ok } from './chunk-VTZYJ6OZ.js';
|
|
2
|
+
export { canAddDirectly, filterProductBadges, findProductInCatalog, formatWeight, getProductBadgeAccent, getProductBadgeLayout, getProductWeight, getVariantWeight, resolveVariantPrice, toGrams, toProductBadgeViews, usePriceRecalculation, useProductDetail, useProductList, useProductPricing, useProductVariant, useProductVariantModifiers, useProductVariantSelector, useProductsByCategory, useRelatedProducts } from './chunk-KK645XNR.js';
|
|
2
3
|
export { normalizeSnippets } from './chunk-GLQXTMVW.js';
|
|
3
|
-
export { RESEND_TIMER_SECONDS, useAuthFlowStore, useProductsStore, useStore, useStorefrontProfile } from './chunk-
|
|
4
|
+
export { RESEND_TIMER_SECONDS, useAuthFlowStore, useProductsStore, useStore, useStorefrontProfile } from './chunk-PBBVWWMI.js';
|
|
4
5
|
export { buildCssVariableMap, generatePrimaryShades, generateShades, useTheme } from './chunk-BUNI6MGH.js';
|
|
5
6
|
export { buildQrCodeUrl, createOperationChain, formatAddressCityLast, formatDate, formatDateTime, formatPhoneNational, formatPhoneSpaced, formatScheduleStatus, getApiErrorMessage, getApiFieldErrors, getEmailLink, getPhoneTelLink, getSocialLinks, getTodayInfo, getWebsiteLink, getWeeklySchedule, groupScheduleDays, pluralize, toDateInputValue, todayInTimezone } from './chunk-RURXGVWW.js';
|
|
6
7
|
export { createDebounce } from './chunk-XUGXLJZB.js';
|
|
7
8
|
import './chunk-EMGQXBU3.js';
|
|
8
9
|
import './chunk-5B2P5W3E.js';
|
|
9
|
-
export { CASH_DENOMINATIONS_MAJOR, DEFAULT_ROUND_STEPS_MAJOR, ORDER_EVENTS, ORDER_WITH, buildCartLineKey, buildCashChangePresets, buildMainPaymentRequest, getCashDenominationsMinor, getDefaultRoundStepsMinor, normalizeAddress, useBonusesReconciliation, useCartAddressSync, useCartCustomerAttachment, useCartDeliveryAttachment, useCartInitialization, useCartMutation, useCartOperations, useCartQuantities, useCartRecalculation, useCartStockWatcher, useCheckoutFlow, useCheckoutSubmit, useCustomerAttach, useOnlinePaymentRetry, useOrderBonuses, useOrderChannel, useOrderDelivery, useOrderPromocode, useOrderSettings, useOrderTotal, usePaymentSelection, useRestrictedAddToCart, useRestrictionGate, useStorefrontCart, useVisibleCartVariants, variantLineKey } from './chunk-
|
|
10
|
-
export { useCartCredentials } from './chunk-2DUKIVKC.js';
|
|
10
|
+
export { CASH_DENOMINATIONS_MAJOR, DEFAULT_ROUND_STEPS_MAJOR, ORDER_EVENTS, ORDER_WITH, buildCartLineKey, buildCashChangePresets, buildMainPaymentRequest, getCashDenominationsMinor, getDefaultRoundStepsMinor, normalizeAddress, useBonusesReconciliation, useCartAddressSync, useCartCustomerAttachment, useCartDeliveryAttachment, useCartInitialization, useCartMutation, useCartOperations, useCartQuantities, useCartRecalculation, useCartStockWatcher, useCheckoutFlow, useCheckoutSubmit, useCustomerAttach, useOnlinePaymentRetry, useOrderBonuses, useOrderChannel, useOrderDelivery, useOrderPromocode, useOrderSettings, useOrderTotal, usePaymentSelection, useRestrictedAddToCart, useRestrictionGate, useStorefrontCart, useVisibleCartVariants, variantLineKey } from './chunk-5KCBZJV3.js';
|
|
11
11
|
import './chunk-5QCUH3FF.js';
|
|
12
12
|
export { getCartErrorCode, getCartErrorHttpCode, getCartErrorMessage, getValidationErrors, logCartError } from './chunk-TE42OCFK.js';
|
|
13
|
-
export { usePromotionsStore } from './chunk-544USTPB.js';
|
|
14
13
|
export { useCatalogStore } from './chunk-4JCJHAL3.js';
|
|
15
|
-
export { createStorefront, provideStorefront, useAuthStore, useCartStore, useOrderSettingsStore, useRuntime } from './chunk-T52G6JN7.js';
|
|
16
14
|
import './chunk-TIQ7AJLY.js';
|
|
17
|
-
export { useStoreProfileStore } from './chunk-IOYYCA75.js';
|
|
18
15
|
export { catalogItemEntity, collectDescendantIds, findCategoryById, findCategoryByShortId, findRootAncestor, getCategoryPath, groupProductsBySubcategory, isRenderableCatalogItem, useCollections } from './chunk-EHARSEZT.js';
|
|
19
16
|
export { getCity, getRemoteCatalog, getStock } from './chunk-FS2UNPTY.js';
|
|
20
17
|
export { asMajor, asMinor, formatPrice, majorToMinor, minorToMajor, minorToMajorString } from './chunk-2Y6QTHXI.js';
|
|
21
|
-
export {
|
|
18
|
+
export { useCartCredentials } from './chunk-QFKA2R6D.js';
|
|
19
|
+
export { usePromotionsStore } from './chunk-544USTPB.js';
|
|
20
|
+
export { createStorefront, provideStorefront, useAuthStore, useCartStore, useOrderSettingsStore, useRuntime } from './chunk-TXR76IDL.js';
|
|
21
|
+
export { useStoreProfileStore } from './chunk-IOYYCA75.js';
|
|
22
22
|
//# sourceMappingURL=index.js.map
|
|
23
23
|
//# sourceMappingURL=index.js.map
|