@zenky/storefront-vue 0.10.11 → 0.10.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/index.js +2 -1
- package/dist/cart/index.d.ts +2 -1
- package/dist/cart/index.js +2 -1
- package/dist/chunk-5B2P5W3E.js +20 -0
- package/dist/chunk-5B2P5W3E.js.map +1 -0
- package/dist/{chunk-5CNL24PI.js → chunk-EM6H5WFS.js} +11 -5
- package/dist/chunk-EM6H5WFS.js.map +1 -0
- package/dist/{chunk-KX7KXN3W.js → chunk-LUJSF6V7.js} +4 -3
- package/dist/chunk-LUJSF6V7.js.map +1 -0
- package/dist/{chunk-AK4276ND.js → chunk-TIQ7AJLY.js} +3 -18
- package/dist/chunk-TIQ7AJLY.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -3
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.js +3 -2
- package/dist/{useCheckoutSubmit-Be-lQd60.d.ts → useCheckoutSubmit-C934F26-.d.ts} +6 -2
- package/package.json +1 -1
- package/dist/chunk-5CNL24PI.js.map +0 -1
- package/dist/chunk-AK4276ND.js.map +0 -1
- package/dist/chunk-KX7KXN3W.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
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-KX7KXN3W.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"]}
|