@wow-two-beta/fe-identity 0.0.0-stage → 0.0.2
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/LICENSE +21 -0
- package/README.md +43 -2
- package/dist/chunks/PasswordChangeConfirmationType-xUIFj0b9.js +51 -0
- package/dist/chunks/PasswordChangeConfirmationType-xUIFj0b9.js.map +1 -0
- package/dist/contracts/AccountInfoDto.d.ts +13 -0
- package/dist/contracts/AccountRouteConstants.d.ts +39 -0
- package/dist/contracts/ConfirmEmailApiRequest.d.ts +7 -0
- package/dist/contracts/EmailAddressApiRequest.d.ts +5 -0
- package/dist/contracts/HostedPageRouteConstants.d.ts +27 -0
- package/dist/contracts/PasswordChangeApiRequest.d.ts +11 -0
- package/dist/contracts/PasswordChangeConfirmationApiRequest.d.ts +5 -0
- package/dist/contracts/PasswordChangeConfirmationDto.d.ts +8 -0
- package/dist/contracts/PasswordChangeConfirmationType.d.ts +10 -0
- package/dist/contracts/PasswordChangeLinkApiRequest.d.ts +7 -0
- package/dist/contracts/PasswordChangeRequiredDto.d.ts +13 -0
- package/dist/contracts/PhoneSignInApiRequest.d.ts +7 -0
- package/dist/contracts/PhoneSignInSendApiRequest.d.ts +5 -0
- package/dist/contracts/PhoneSignInSentDto.d.ts +7 -0
- package/dist/contracts/RegisterAccountApiRequest.d.ts +9 -0
- package/dist/contracts/RegisteredAccountDto.d.ts +7 -0
- package/dist/contracts/ResetPasswordApiRequest.d.ts +9 -0
- package/dist/contracts/SignInApiRequest.d.ts +7 -0
- package/dist/contracts/SignInFieldDto.d.ts +12 -0
- package/dist/contracts/SignInMethodDto.d.ts +16 -0
- package/dist/contracts/SignInMethodIdConstants.d.ts +7 -0
- package/dist/contracts/SignInOptionsDto.d.ts +24 -0
- package/dist/contracts/SignInRequirementsDto.d.ts +9 -0
- package/dist/contracts/SignInRuleDto.d.ts +12 -0
- package/dist/contracts/index.d.ts +24 -0
- package/dist/contracts/index.js +40 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/kit/account/CreateAccountClient.d.ts +73 -0
- package/dist/kit/account/hooks/UseAccountClient.d.ts +10 -0
- package/dist/kit/account/hooks/UseAccountForm.d.ts +2 -0
- package/dist/kit/account/hooks/UseAccountText.d.ts +7 -0
- package/dist/kit/account/hooks/index.d.ts +3 -0
- package/dist/kit/account/index.d.ts +2 -0
- package/dist/kit/index.d.ts +2 -0
- package/dist/kit/index.js +1197 -0
- package/dist/kit/index.js.map +1 -0
- package/dist/kit/presentation/feedback/failureAlert/FailureAlert.vue.d.ts +7 -0
- package/dist/kit/presentation/feedback/failureAlert/index.d.ts +1 -0
- package/dist/kit/presentation/forms/changePasswordForm/ChangePasswordForm.vue.d.ts +26 -0
- package/dist/kit/presentation/forms/changePasswordForm/ChangePasswordStage.d.ts +12 -0
- package/dist/kit/presentation/forms/changePasswordForm/index.d.ts +2 -0
- package/dist/kit/presentation/forms/forgotPasswordForm/ForgotPasswordForm.vue.d.ts +19 -0
- package/dist/kit/presentation/forms/forgotPasswordForm/index.d.ts +1 -0
- package/dist/kit/presentation/forms/index.d.ts +6 -0
- package/dist/kit/presentation/forms/passwordSignIn/PasswordSignIn.vue.d.ts +28 -0
- package/dist/kit/presentation/forms/passwordSignIn/index.d.ts +1 -0
- package/dist/kit/presentation/forms/phoneCodeSignIn/PhoneCodeSignIn.vue.d.ts +25 -0
- package/dist/kit/presentation/forms/phoneCodeSignIn/PhoneSignInStep.d.ts +10 -0
- package/dist/kit/presentation/forms/phoneCodeSignIn/index.d.ts +2 -0
- package/dist/kit/presentation/forms/resetPasswordForm/ResetPasswordForm.vue.d.ts +23 -0
- package/dist/kit/presentation/forms/resetPasswordForm/index.d.ts +1 -0
- package/dist/kit/presentation/forms/signUpForm/SignUpForm.vue.d.ts +20 -0
- package/dist/kit/presentation/forms/signUpForm/index.d.ts +1 -0
- package/package.json +59 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/kit/account/CreateAccountClient.ts","../../src/kit/account/hooks/UseAccountClient.ts","../../src/kit/account/hooks/UseAccountText.ts","../../src/kit/presentation/feedback/failureAlert/FailureAlert.vue","../../src/kit/presentation/forms/changePasswordForm/ChangePasswordStage.ts","../../src/kit/presentation/forms/changePasswordForm/ChangePasswordForm.vue","../../src/kit/presentation/forms/forgotPasswordForm/ForgotPasswordForm.vue","../../src/kit/presentation/forms/passwordSignIn/PasswordSignIn.vue","../../src/kit/presentation/forms/phoneCodeSignIn/PhoneSignInStep.ts","../../src/kit/presentation/forms/phoneCodeSignIn/PhoneCodeSignIn.vue","../../src/kit/presentation/forms/resetPasswordForm/ResetPasswordForm.vue","../../src/kit/presentation/forms/signUpForm/SignUpForm.vue"],"sourcesContent":["import { ApiFailureFactory, createApiClient, type ApiFailure } from '@wow-two-beta/fe/foundation/http';\nimport { ResultExtensions, type Result } from '@wow-two-beta/fe/foundation/results';\nimport {\n AccountRouteConstants,\n PasswordChangeConfirmationType,\n type AccountInfoDto,\n type ConfirmEmailApiRequest,\n type EmailAddressApiRequest,\n type PasswordChangeApiRequest,\n type PasswordChangeConfirmationApiRequest,\n type PasswordChangeConfirmationDto,\n type PasswordChangeLinkApiRequest,\n type PasswordChangeRequiredDto,\n type PhoneSignInApiRequest,\n type PhoneSignInSendApiRequest,\n type PhoneSignInSentDto,\n type RegisterAccountApiRequest,\n type RegisteredAccountDto,\n type ResetPasswordApiRequest,\n type SignInApiRequest,\n type SignInFieldDto,\n type SignInMethodDto,\n type SignInOptionsDto,\n type SignInRuleDto,\n} from '../../contracts';\n\n/** Configures where the account API is reached. */\nexport interface AccountClientOptions {\n /** The origin serving the API: empty for the consumer's own backend (Form 1), the service's URL otherwise. */\n readonly baseUrl?: string;\n /**\n * Whether the browser sends the session cookie. Default `same-origin`, or `include` when `baseUrl` is set, which\n * the service's CORS policy must allow.\n */\n readonly credentials?: RequestCredentials;\n /** Replaces the global fetch, for tests. */\n readonly fetch?: typeof globalThis.fetch;\n}\n\n/** Describes a sign-in call beyond its body. */\nexport interface AccountSignInOptions {\n /** The OIDC client the sign-in serves, recorded by the sign-in log. */\n readonly clientId?: string | null;\n /** Cancels the request. */\n readonly signal?: AbortSignal;\n}\n\n/** Describes a sign-in declaration request. */\nexport interface SignInOptionsQuery {\n /** The OIDC client the sign-in serves: its own theme and background replace the instance's. */\n readonly clientId?: string | null;\n /** The locale of the rule messages (`uz`, `ru`, `en`); the browser's `Accept-Language` when omitted. */\n readonly locale?: string | null;\n /** Cancels the request. */\n readonly signal?: AbortSignal;\n}\n\n/** Calls the account API over HTTP, signing in with cookie sessions. */\nexport interface AccountClient {\n /**\n * Reads the sign-in declaration: the hosted pages' look, whether sign-up is open, and each enabled method in layout\n * order with its fields and rules. An unknown `clientId` answers the instance's own look.\n */\n getSignInOptions(query?: SignInOptionsQuery): Promise<Result<SignInOptionsDto, ApiFailure>>;\n /** Creates an account while sign-up is on; `403` while it is closed. */\n register(request: RegisterAccountApiRequest, signal?: AbortSignal): Promise<Result<RegisteredAccountDto, ApiFailure>>;\n /**\n * Signs in with a login and password: `null` once the session cookie is set, or the ticket of a required password\n * change, which sets no session.\n */\n signIn(\n request: SignInApiRequest,\n options?: AccountSignInOptions,\n ): Promise<Result<PasswordChangeRequiredDto | null, ApiFailure>>;\n /** Confirms an email with the emailed token. */\n confirmEmail(request: ConfirmEmailApiRequest, signal?: AbortSignal): Promise<Result<void, ApiFailure>>;\n /** Sends the confirmation email again; succeeds whether or not the account exists. */\n resendConfirmationEmail(request: EmailAddressApiRequest, signal?: AbortSignal): Promise<Result<void, ApiFailure>>;\n /** Sends a password reset email; succeeds whether or not the account exists. */\n forgotPassword(request: EmailAddressApiRequest, signal?: AbortSignal): Promise<Result<void, ApiFailure>>;\n /** Sets a new password with the emailed reset token. */\n resetPassword(request: ResetPasswordApiRequest, signal?: AbortSignal): Promise<Result<void, ApiFailure>>;\n /** Reads the signed-in account; `401` when nobody is signed in. */\n getAccountInfo(signal?: AbortSignal): Promise<Result<AccountInfoDto, ApiFailure>>;\n /**\n * Starts a password change, signed in or with a required change's ticket: answers how it is confirmed, and sends the\n * code or link the setting asks for.\n */\n startPasswordChange(\n request?: PasswordChangeConfirmationApiRequest,\n signal?: AbortSignal,\n ): Promise<Result<PasswordChangeConfirmationDto, ApiFailure>>;\n /** Changes the password of the signed-in person, or of the one a required change's ticket names. */\n changePassword(request: PasswordChangeApiRequest, signal?: AbortSignal): Promise<Result<void, ApiFailure>>;\n /** Changes a password with the one-time token a change link carries. */\n changePasswordWithLink(\n request: PasswordChangeLinkApiRequest,\n signal?: AbortSignal,\n ): Promise<Result<void, ApiFailure>>;\n /** Sends a phone sign-in code, or answers the Telegram link that sends one once the contact is shared. */\n sendPhoneSignInCode(\n request: PhoneSignInSendApiRequest,\n signal?: AbortSignal,\n ): Promise<Result<PhoneSignInSentDto, ApiFailure>>;\n /** Signs in with a phone and its code and sets the session cookie. */\n signInWithPhone(request: PhoneSignInApiRequest, options?: AccountSignInOptions): Promise<Result<void, ApiFailure>>;\n /** Ends the cookie's session. */\n signOut(signal?: AbortSignal): Promise<Result<void, ApiFailure>>;\n}\n\ntype Decoded<T> = Result<T, ApiFailure>;\n\nconst protocolFailure = () => ResultExtensions.fail(ApiFailureFactory.create('protocol'));\n\nfunction record(value: unknown): Readonly<Record<string, unknown>> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction decodeRegistered(value: unknown): Decoded<RegisteredAccountDto> {\n const body = record(value);\n if (body && typeof body.userId === 'string') {\n return ResultExtensions.ok({ userId: body.userId, isConfirmationSent: body.isConfirmationSent === true });\n }\n return protocolFailure();\n}\n\nfunction decodeAccountInfo(value: unknown): Decoded<AccountInfoDto> {\n const body = record(value);\n if (body && typeof body.userId === 'string') {\n return ResultExtensions.ok({\n userId: body.userId,\n userName: typeof body.userName === 'string' ? body.userName : null,\n email: typeof body.email === 'string' ? body.email : null,\n isEmailConfirmed: body.isEmailConfirmed === true,\n isTwoFactorEnabled: body.isTwoFactorEnabled === true,\n });\n }\n return protocolFailure();\n}\n\nconst confirmationTypes = Object.values(PasswordChangeConfirmationType);\n\n/** Reads a confirmation type whatever its case; `undefined` for anything else. */\nfunction confirmationOf(value: unknown): PasswordChangeConfirmationType | undefined {\n return typeof value === 'string'\n ? confirmationTypes.find((type) => type.toLowerCase() === value.toLowerCase())\n : undefined;\n}\n\nfunction decodeConfirmation(value: unknown): Decoded<PasswordChangeConfirmationDto> {\n const body = record(value);\n const confirmation = confirmationOf(body?.confirmation);\n if (body && confirmation) return ResultExtensions.ok({ confirmation, isSent: body.isSent === true });\n return protocolFailure();\n}\n\nfunction decodeCodeSent(value: unknown): Decoded<PhoneSignInSentDto> {\n const body = record(value);\n if (!body) return protocolFailure();\n const link =\n typeof body.telegramLinkUrl === 'string' && body.telegramLinkUrl.length > 0 ? body.telegramLinkUrl : null;\n return ResultExtensions.ok({ isCodeSent: body.isCodeSent === true, telegramLinkUrl: link });\n}\n\nfunction text(value: unknown): string | null {\n return typeof value === 'string' ? value : null;\n}\n\nfunction strings(value: unknown): ReadonlyArray<string> | null {\n return Array.isArray(value) && value.every((item): item is string => typeof item === 'string') ? value : null;\n}\n\n/** Decodes each item of a list, or `null` when it is no list or any item fails. */\nfunction list<T>(value: unknown, decode: (item: unknown) => T | null): ReadonlyArray<T> | null {\n if (!Array.isArray(value)) return null;\n const items = value.map(decode);\n return items.every((item): item is T => item !== null) ? items : null;\n}\n\nfunction decodeRule(value: unknown): SignInRuleDto | null {\n const body = record(value);\n const code = text(body?.code);\n const message = text(body?.message);\n return body && code && message !== null ? { code, params: record(body.params), message } : null;\n}\n\nfunction decodeField(value: unknown): SignInFieldDto | null {\n const body = record(value);\n const name = text(body?.name);\n const kind = text(body?.kind);\n const rules = list(body?.rules, decodeRule);\n return body && name && kind && rules ? { name, kind, countries: strings(body.countries), rules } : null;\n}\n\nfunction decodeMethod(value: unknown): SignInMethodDto | null {\n const body = record(value);\n const id = text(body?.id);\n const fields = list(body?.fields, decodeField);\n if (!body || !id || !fields) return null;\n const passwordRules = body.passwordRules == null ? null : list(body.passwordRules, decodeRule);\n if (body.passwordRules != null && passwordRules === null) return null;\n return { id, channels: strings(body.channels) ?? [], fields, passwordRules };\n}\n\nfunction decodeSignInOptions(value: unknown): Decoded<SignInOptionsDto> {\n const body = record(value);\n const brandName = text(body?.brandName);\n const theme = text(body?.theme);\n const methods = list(body?.methods, decodeMethod);\n if (!body || !brandName || !theme || !methods) return protocolFailure();\n const requirements = record(body.requirements);\n return ResultExtensions.ok({\n brandName,\n theme,\n backgroundUrl: text(body.backgroundUrl) || null,\n isSignUpEnabled: body.isSignUpEnabled === true,\n locale: text(body.locale) ?? 'en',\n locales: strings(body.locales) ?? [],\n methods,\n requirements: {\n isConfirmedEmailRequired: requirements?.isConfirmedEmailRequired === true,\n isConfirmedPhoneNumberRequired: requirements?.isConfirmedPhoneNumberRequired === true,\n isSecondFactorRequired: requirements?.isSecondFactorRequired === true,\n },\n });\n}\n\n/**\n * Reads a cookie sign-in's answer: `204` set the session; a body flagged `isPasswordChangeRequired`, enveloped or\n * bare, holds the change's ticket instead.\n */\nfunction decodeSignedIn(text: string): Decoded<PasswordChangeRequiredDto | null> {\n if (text.trim() === '') return ResultExtensions.ok(null);\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return protocolFailure();\n }\n const outer = record(parsed);\n const body = record(outer?.data) ?? outer;\n if (body?.isPasswordChangeRequired !== true) return body ? ResultExtensions.ok(null) : protocolFailure();\n if (typeof body.ticket !== 'string' || body.ticket === '') return protocolFailure();\n return ResultExtensions.ok({\n isPasswordChangeRequired: true,\n confirmation: confirmationOf(body.confirmation) ?? PasswordChangeConfirmationType.None,\n ticket: body.ticket,\n });\n}\n\n/** Creates a client for the account API at `baseUrl` (same origin by default). */\nexport function createAccountClient(options: AccountClientOptions = {}): AccountClient {\n const baseUrl = options.baseUrl?.replace(/\\/+$/, '') ?? '';\n const credentials = options.credentials ?? (baseUrl ? 'include' : undefined);\n const client = createApiClient({\n baseUrl: `${baseUrl}${AccountRouteConstants.base}`,\n ...(credentials !== undefined ? { credentials } : {}),\n ...(options.fetch !== undefined ? { fetch: options.fetch } : {}),\n });\n const signInQuery = (clientId?: string | null) => ({\n [AccountRouteConstants.useCookiesParameter]: true,\n ...(clientId ? { [AccountRouteConstants.clientIdParameter]: clientId } : {}),\n });\n const send = (path: string, body: unknown, signal?: AbortSignal) =>\n client.post(path, { body, response: 'empty', signal });\n\n return {\n getSignInOptions: ({ clientId, locale, signal } = {}) =>\n client.get(AccountRouteConstants.signInOptions, {\n query: {\n ...(clientId ? { [AccountRouteConstants.clientIdParameter]: clientId } : {}),\n ...(locale ? { [AccountRouteConstants.localeParameter]: locale } : {}),\n },\n signal,\n decode: decodeSignInOptions,\n }),\n register: (request, signal) =>\n client.post(AccountRouteConstants.register, { body: request, signal, decode: decodeRegistered }),\n async signIn(request, { clientId, signal } = {}) {\n const answered = await client.post(AccountRouteConstants.login, {\n query: signInQuery(clientId),\n body: request,\n response: 'text',\n signal,\n });\n return answered.ok ? decodeSignedIn(answered.value) : answered;\n },\n confirmEmail: (request, signal) =>\n client.get(AccountRouteConstants.confirmEmail, { query: { ...request }, response: 'empty', signal }),\n resendConfirmationEmail: (request, signal) => send(AccountRouteConstants.resendConfirmationEmail, request, signal),\n forgotPassword: (request, signal) => send(AccountRouteConstants.forgotPassword, request, signal),\n resetPassword: (request, signal) => send(AccountRouteConstants.resetPassword, request, signal),\n getAccountInfo: (signal) => client.get(AccountRouteConstants.manageInfo, { signal, decode: decodeAccountInfo }),\n startPasswordChange: (request, signal) =>\n client.post(AccountRouteConstants.managePasswordConfirmation, {\n body: request ?? {},\n signal,\n decode: decodeConfirmation,\n }),\n changePassword: (request, signal) => send(AccountRouteConstants.managePassword, request, signal),\n changePasswordWithLink: (request, signal) => send(AccountRouteConstants.passwordChange, request, signal),\n sendPhoneSignInCode: (request, signal) =>\n client.post(AccountRouteConstants.phoneSignInSend, { body: request, signal, decode: decodeCodeSent }),\n signInWithPhone: (request, { clientId, signal } = {}) =>\n client.post(AccountRouteConstants.phoneSignIn, {\n query: signInQuery(clientId),\n body: request,\n response: 'empty',\n signal,\n }),\n signOut: (signal) => client.post(AccountRouteConstants.logout, { response: 'empty', signal }),\n };\n}\n","import { createAccountClient, type AccountClient } from '../CreateAccountClient';\n\n/** Names where a kit component reaches the account API. */\nexport interface AccountClientSource {\n /** The client to call; built from `baseUrl` when omitted. */\n readonly client?: AccountClient;\n /** The service's origin; the consumer's own origin (Form 1) when omitted. */\n readonly baseUrl?: string;\n}\n\n/** Returns the component's account client, read once at setup: the given one, or one for `baseUrl`. */\nexport function useAccountClient(source: AccountClientSource): AccountClient {\n return source.client ?? createAccountClient(source.baseUrl ? { baseUrl: source.baseUrl } : {});\n}\n","import { useLocale } from '@wow-two-beta/fe/foundation/i18n';\n\n/** Resolves one kit message: its key under `IdentityKit.`, the English fallback, and the values it interpolates. */\nexport type AccountText = (key: string, fallback: string, values?: Readonly<Record<string, string | number>>) => string;\n\n/**\n * Returns the kit's message resolver: the consumer's `LocaleProvider` messages for `IdentityKit.{key}`, else the\n * English fallback. Call it in `setup()`.\n */\nexport function useAccountText(): AccountText {\n const locale = useLocale();\n return (key, fallback, values) => locale.t(`IdentityKit.${key}`, values, fallback);\n}\n","<script setup lang=\"ts\">\nimport { ApiFailureExtensions } from '@wow-two-beta/fe/foundation/http';\nimport { AppErrorType, type AppError } from '@wow-two-beta/fe/foundation/results';\nimport { AlertSimple } from '@wow-two-beta/fe/presentation/feedback';\nimport { computed } from 'vue';\n\n/** Says why a request failed: the problem's own text, else the failure's display-safe message. */\ndefineOptions({ name: 'FailureAlert' });\n\nconst props = defineProps<{\n /** The failure to explain; nothing renders without one. */\n failure: AppError | null;\n}>();\n\nconst reason = computed(() =>\n props.failure && props.failure.type !== AppErrorType.Cancelled ? ApiFailureExtensions.reason(props.failure) : '',\n);\n</script>\n\n<template>\n <AlertSimple v-if=\"reason\" severity=\"danger\">{{ reason }}</AlertSimple>\n</template>\n","/** Defines where a password change stands. */\nexport const ChangePasswordStage = {\n /** Refers to the change not started: the instance has not said how it is confirmed. */\n Idle: 'idle',\n /** Refers to the change form, with the code field under the `Code` confirmation. */\n Form: 'form',\n /** Refers to the `Link` confirmation: only the emailed link opens the form. */\n LinkSent: 'link-sent',\n /** Refers to the password changed. */\n Done: 'done',\n} as const;\nexport type ChangePasswordStage = (typeof ChangePasswordStage)[keyof typeof ChangePasswordStage];\n","<script setup lang=\"ts\">\nimport type { AppError } from '@wow-two-beta/fe/foundation/results';\nimport { Button } from '@wow-two-beta/fe/presentation/actions';\nimport { AlertSimple } from '@wow-two-beta/fe/presentation/feedback';\nimport { Field, PasswordInput, TextInput } from '@wow-two-beta/fe/presentation/forms';\nimport { computed, onMounted, shallowRef } from 'vue';\nimport { PasswordChangeConfirmationType, type PasswordChangeConfirmationDto } from '../../../../contracts';\nimport type { AccountClient } from '../../../account';\nimport { useAccountClient, useAccountForm, useAccountText } from '../../../account/hooks';\nimport { FailureAlert } from '../../feedback/failureAlert';\nimport { ChangePasswordStage } from './ChangePasswordStage';\n\n/**\n * Changes a password under the instance's confirmation setting. Signed in, it starts the change and asks for the\n * current password, plus the sent code under `Code`, or says a link went out under `Link`. With the ticket of a\n * sign-in that requires the change, it starts at once and skips the current password. With the token a change link\n * carried, it asks only for the new password.\n */\ndefineOptions({ name: 'ChangePasswordForm' });\n\nconst props = withDefaults(\n defineProps<{\n /** The account API to call; built from `baseUrl` when omitted. */\n client?: AccountClient;\n /** The service's origin; the consumer's own origin when omitted. */\n baseUrl?: string;\n /** The one-time token a change link carried. */\n token?: string | null;\n /** The ticket a sign-in answered with when the password breaks the current rules. */\n ticket?: string | null;\n /** How the ticket's change is confirmed, as the sign-in answered; asked of the instance when omitted. */\n confirmation?: PasswordChangeConfirmationType | null;\n }>(),\n { client: undefined, baseUrl: undefined, token: null, ticket: null, confirmation: null },\n);\n\nconst emit = defineEmits<{\n /** Fires once the password is changed. */\n changed: [];\n}>();\n\nconst client = useAccountClient(props);\nconst t = useAccountText();\n/** The ticketed change under `None` needs no round trip: the sign-in already said so, and nothing is sent. */\nconst isOpenAtOnce = Boolean(props.ticket) && props.confirmation === PasswordChangeConfirmationType.None;\nconst stage = shallowRef<ChangePasswordStage>(\n props.token || isOpenAtOnce ? ChangePasswordStage.Form : ChangePasswordStage.Idle,\n);\n/** How the change is confirmed, once known, and whether its code or link went out. */\nconst started = shallowRef<PasswordChangeConfirmationDto | null>(\n isOpenAtOnce ? { confirmation: PasswordChangeConfirmationType.None, isSent: false } : null,\n);\nconst isStarting = shallowRef(false);\nconst startFailure = shallowRef<AppError | null>(null);\nconst isCodeRequired = computed(() => started.value?.confirmation === PasswordChangeConfirmationType.Code);\n\nconst form = useAccountForm({\n defaultValues: { currentPassword: '', newPassword: '', code: '' },\n onSubmit: async (values, { signal }) => {\n const result = props.token\n ? await client.changePasswordWithLink({ token: props.token, newPassword: values.newPassword }, signal)\n : await client.changePassword(\n {\n ...(props.ticket ? { ticket: props.ticket } : { currentPassword: values.currentPassword }),\n newPassword: values.newPassword,\n ...(isCodeRequired.value ? { code: values.code.trim() } : {}),\n },\n signal,\n );\n if (result.ok) {\n stage.value = ChangePasswordStage.Done;\n emit('changed');\n }\n return result;\n },\n});\n\n/** Asks the instance how the change is confirmed, which sends the code or link that setting calls for. */\nasync function start() {\n isStarting.value = true;\n startFailure.value = null;\n const result = await client.startPasswordChange(props.ticket ? { ticket: props.ticket } : undefined);\n isStarting.value = false;\n if (!result.ok) {\n startFailure.value = result.failure;\n return;\n }\n started.value = result.value;\n stage.value =\n result.value.confirmation === PasswordChangeConfirmationType.Link\n ? ChangePasswordStage.LinkSent\n : ChangePasswordStage.Form;\n}\n\nonMounted(() => {\n if (props.ticket && !isOpenAtOnce) void start();\n});\n</script>\n\n<template>\n <div class=\"flex flex-col gap-4\">\n <p v-if=\"ticket && stage !== ChangePasswordStage.Done\" class=\"text-sm text-muted-foreground\">\n {{\n t(\n 'ChangePasswordForm.required',\n 'Your password no longer meets the rules here. Choose a new one, then sign in with it.',\n )\n }}\n </p>\n\n <template v-if=\"stage === ChangePasswordStage.Idle\">\n <FailureAlert :failure=\"startFailure\" />\n <Button type=\"button\" is-full-width :is-loading=\"isStarting\" @click=\"start\">\n {{ t('ChangePasswordForm.start', 'Change the password') }}\n </Button>\n </template>\n\n <template v-else-if=\"stage === ChangePasswordStage.LinkSent\">\n <AlertSimple v-if=\"started?.isSent\" severity=\"info\">\n {{ t('ChangePasswordForm.linkSent', 'We sent you a link to change the password. Open it to continue.') }}\n </AlertSimple>\n <AlertSimple v-else severity=\"warning\">\n {{ t('ChangePasswordForm.linkNotSent', 'We could not send the link. Try again in a minute.') }}\n </AlertSimple>\n <FailureAlert :failure=\"startFailure\" />\n <Button type=\"button\" variant=\"outline\" tone=\"neutral\" :is-loading=\"isStarting\" @click=\"start\">\n {{ t('ChangePasswordForm.resendLink', 'Send the link again') }}\n </Button>\n </template>\n\n <form\n v-else-if=\"stage === ChangePasswordStage.Form\"\n class=\"flex flex-col gap-4\"\n novalidate\n @submit=\"form.handleSubmit\"\n >\n <template v-if=\"isCodeRequired\">\n <AlertSimple v-if=\"started?.isSent\" severity=\"info\">\n {{ t('ChangePasswordForm.codeSent', 'We sent you a code. Enter it beside the new password.') }}\n </AlertSimple>\n <AlertSimple v-else severity=\"warning\">\n {{ t('ChangePasswordForm.codeNotSent', 'We could not send a code. Try again in a minute.') }}\n </AlertSimple>\n </template>\n <form.Field v-if=\"!token && !ticket\" v-slot=\"field\" name=\"currentPassword\" is-required>\n <Field :label=\"t('ChangePasswordForm.currentPassword', 'Current password')\">\n <PasswordInput\n v-model=\"field.value\"\n name=\"currentPassword\"\n autocomplete=\"current-password\"\n @blur=\"field.onBlur\"\n />\n </Field>\n </form.Field>\n <form.Field v-slot=\"field\" name=\"newPassword\" is-required>\n <Field :label=\"t('ChangePasswordForm.newPassword', 'New password')\">\n <PasswordInput v-model=\"field.value\" name=\"newPassword\" autocomplete=\"new-password\" @blur=\"field.onBlur\" />\n </Field>\n </form.Field>\n <form.Field v-if=\"isCodeRequired\" v-slot=\"field\" name=\"code\" is-required>\n <Field :label=\"t('ChangePasswordForm.code', 'Code')\">\n <TextInput\n v-model=\"field.value\"\n name=\"code\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n @blur=\"field.onBlur\"\n />\n </Field>\n </form.Field>\n <FailureAlert :failure=\"form.state.submitError\" />\n <FailureAlert :failure=\"startFailure\" />\n <Button type=\"submit\" is-full-width :is-loading=\"form.state.isSubmitting\">\n {{ t('ChangePasswordForm.submit', 'Change the password') }}\n </Button>\n <Button\n v-if=\"isCodeRequired\"\n type=\"button\"\n variant=\"ghost\"\n tone=\"neutral\"\n :is-loading=\"isStarting\"\n @click=\"start\"\n >\n {{ t('ChangePasswordForm.resendCode', 'Send a new code') }}\n </Button>\n </form>\n\n <AlertSimple v-else severity=\"success\">\n {{ t('ChangePasswordForm.done', 'Your password is changed.') }}\n </AlertSimple>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@wow-two-beta/fe/presentation/actions';\nimport { AlertSimple } from '@wow-two-beta/fe/presentation/feedback';\nimport { EmailInput, Field } from '@wow-two-beta/fe/presentation/forms';\nimport { shallowRef } from 'vue';\nimport type { AccountClient } from '../../../account';\nimport { useAccountClient, useAccountForm, useAccountText } from '../../../account/hooks';\nimport { FailureAlert } from '../../feedback/failureAlert';\n\n/** Sends a password reset link to an email; it says the same whether or not an account uses it. */\ndefineOptions({ name: 'ForgotPasswordForm' });\n\nconst props = withDefaults(\n defineProps<{\n /** The account API to call; built from `baseUrl` when omitted. */\n client?: AccountClient;\n /** The service's origin; the consumer's own origin when omitted. */\n baseUrl?: string;\n /** The email the field starts with. */\n initialEmail?: string;\n }>(),\n { client: undefined, baseUrl: undefined, initialEmail: '' },\n);\n\nconst emit = defineEmits<{\n /** Fires once the reset email is requested. */\n sent: [email: string];\n}>();\n\nconst client = useAccountClient(props);\nconst t = useAccountText();\nconst sentTo = shallowRef<string | null>(null);\n\nconst form = useAccountForm({\n defaultValues: { email: props.initialEmail },\n onSubmit: async (values, { signal }) => {\n const result = await client.forgotPassword(values, signal);\n if (result.ok) {\n sentTo.value = values.email;\n emit('sent', values.email);\n }\n return result;\n },\n});\n</script>\n\n<template>\n <AlertSimple v-if=\"sentTo\" severity=\"success\">\n {{\n t('ForgotPasswordForm.sent', 'If an account uses {email}, we sent it a link to reset the password.', {\n email: sentTo,\n })\n }}\n </AlertSimple>\n <form v-else class=\"flex flex-col gap-4\" novalidate @submit=\"form.handleSubmit\">\n <form.Field v-slot=\"field\" name=\"email\" is-required>\n <Field :label=\"t('ForgotPasswordForm.email', 'Email')\">\n <EmailInput v-model=\"field.value\" name=\"email\" autocomplete=\"email\" @blur=\"field.onBlur\" />\n </Field>\n </form.Field>\n <FailureAlert :failure=\"form.state.submitError\" />\n <Button type=\"submit\" is-full-width :is-loading=\"form.state.isSubmitting\">\n {{ t('ForgotPasswordForm.submit', 'Send the reset link') }}\n </Button>\n </form>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@wow-two-beta/fe/presentation/actions';\nimport { AlertSimple } from '@wow-two-beta/fe/presentation/feedback';\nimport { Field, PasswordInput, TextInput } from '@wow-two-beta/fe/presentation/forms';\nimport { shallowRef } from 'vue';\nimport type { PasswordChangeRequiredDto } from '../../../../contracts';\nimport type { AccountClient } from '../../../account';\nimport { useAccountClient, useAccountForm, useAccountText } from '../../../account/hooks';\nimport { FailureAlert } from '../../feedback/failureAlert';\n\n/** Signs a person in with a login and password, by cookie session — on the hosted page or embedded in a product. */\ndefineOptions({ name: 'PasswordSignIn' });\n\nconst props = withDefaults(\n defineProps<{\n /** The account API to call; built from `baseUrl` when omitted. */\n client?: AccountClient;\n /** The service's origin; the consumer's own origin when omitted. */\n baseUrl?: string;\n /** The OIDC client the sign-in serves, recorded by the sign-in log. */\n clientId?: string | null;\n /** Where \"Forgot your password?\" leads; no link when omitted. */\n forgotPasswordHref?: string;\n /** The login the field starts with. */\n initialLogin?: string;\n }>(),\n { client: undefined, baseUrl: undefined, clientId: null, forgotPasswordHref: undefined, initialLogin: '' },\n);\n\nconst emit = defineEmits<{\n /** Fires once the session cookie is set. */\n signedIn: [];\n /** Fires when the password matched but breaks the current rules: no session, only the change's ticket. */\n passwordChangeRequired: [required: PasswordChangeRequiredDto];\n}>();\n\nconst client = useAccountClient(props);\nconst t = useAccountText();\n/** The email of an account that must confirm it before signing in, when the login was one. */\nconst unconfirmedEmail = shallowRef<string | null>(null);\nconst isResent = shallowRef(false);\nconst isResending = shallowRef(false);\n\nconst form = useAccountForm({\n defaultValues: { login: props.initialLogin, password: '' },\n onSubmit: async (values, { signal }) => {\n unconfirmedEmail.value = null;\n isResent.value = false;\n const result = await client.signIn(values, { clientId: props.clientId, signal });\n if (result.ok) {\n if (result.value) emit('passwordChangeRequired', result.value);\n else emit('signedIn');\n } else if (result.failure.status === 403 && values.login.includes('@')) unconfirmedEmail.value = values.login;\n return result;\n },\n});\n\nasync function resendConfirmation() {\n if (!unconfirmedEmail.value) return;\n isResending.value = true;\n const result = await client.resendConfirmationEmail({ email: unconfirmedEmail.value });\n isResending.value = false;\n isResent.value = result.ok;\n}\n</script>\n\n<template>\n <form class=\"flex flex-col gap-4\" novalidate @submit=\"form.handleSubmit\">\n <form.Field v-slot=\"field\" name=\"login\" is-required>\n <Field :label=\"t('PasswordSignIn.login', 'Email or user name')\">\n <TextInput v-model=\"field.value\" name=\"login\" autocomplete=\"username\" @blur=\"field.onBlur\" />\n </Field>\n </form.Field>\n <form.Field v-slot=\"field\" name=\"password\" is-required>\n <Field :label=\"t('PasswordSignIn.password', 'Password')\">\n <PasswordInput v-model=\"field.value\" name=\"password\" autocomplete=\"current-password\" @blur=\"field.onBlur\" />\n </Field>\n </form.Field>\n <a\n v-if=\"forgotPasswordHref\"\n :href=\"forgotPasswordHref\"\n class=\"-mt-2 self-end text-sm text-primary underline-offset-4 hover:underline\"\n >\n {{ t('PasswordSignIn.forgotPassword', 'Forgot your password?') }}\n </a>\n <FailureAlert :failure=\"form.state.submitError\" />\n <template v-if=\"unconfirmedEmail\">\n <AlertSimple v-if=\"isResent\" severity=\"success\">\n {{\n t('PasswordSignIn.confirmationResent', 'We sent the confirmation link to {email} again.', {\n email: unconfirmedEmail,\n })\n }}\n </AlertSimple>\n <Button\n v-else\n type=\"button\"\n variant=\"outline\"\n tone=\"neutral\"\n :is-loading=\"isResending\"\n @click=\"resendConfirmation\"\n >\n {{ t('PasswordSignIn.resendConfirmation', 'Send the confirmation email again') }}\n </Button>\n </template>\n <Button type=\"submit\" is-full-width :is-loading=\"form.state.isSubmitting\">\n {{ t('PasswordSignIn.submit', 'Sign in') }}\n </Button>\n </form>\n</template>\n","/** Defines where a phone sign-in stands. */\nexport const PhoneSignInStep = {\n /** Refers to entering the phone a code goes to. */\n Phone: 'phone',\n /** Refers to opening the Telegram bot and sharing the contact, after which the bot sends the code. */\n Telegram: 'telegram',\n /** Refers to entering the code. */\n Code: 'code',\n} as const;\nexport type PhoneSignInStep = (typeof PhoneSignInStep)[keyof typeof PhoneSignInStep];\n","<script setup lang=\"ts\">\nimport { AppErrorFactory, ResultExtensions, type AppError } from '@wow-two-beta/fe/foundation/results';\nimport { Button } from '@wow-two-beta/fe/presentation/actions';\nimport { AlertSimple } from '@wow-two-beta/fe/presentation/feedback';\nimport { Field, PhoneInput, TextInput } from '@wow-two-beta/fe/presentation/forms';\nimport { shallowRef } from 'vue';\nimport type { AccountClient } from '../../../account';\nimport { useAccountClient, useAccountForm, useAccountText } from '../../../account/hooks';\nimport { FailureAlert } from '../../feedback/failureAlert';\nimport { PhoneSignInStep } from './PhoneSignInStep';\n\n/**\n * Signs a person in by a code sent to their phone: the phone first, then the code. A phone with no linked Telegram\n * chat first opens the bot, where sharing the contact links it and brings the code.\n */\ndefineOptions({ name: 'PhoneCodeSignIn' });\n\nconst props = withDefaults(\n defineProps<{\n /** The account API to call; built from `baseUrl` when omitted. */\n client?: AccountClient;\n /** The service's origin; the consumer's own origin when omitted. */\n baseUrl?: string;\n /** The OIDC client the sign-in serves, recorded by the sign-in log. */\n clientId?: string | null;\n /** The ISO codes of the countries a phone may come from, in display order; every country when omitted. */\n countries?: ReadonlyArray<string>;\n /** The ISO code selected first; the first allowed country when omitted. */\n defaultCountry?: string;\n }>(),\n { client: undefined, baseUrl: undefined, clientId: null, countries: undefined, defaultCountry: undefined },\n);\n\nconst emit = defineEmits<{\n /** Fires once the session cookie is set. */\n signedIn: [];\n}>();\n\nconst client = useAccountClient(props);\nconst t = useAccountText();\nconst step = shallowRef<PhoneSignInStep>(PhoneSignInStep.Phone);\n/** The phone the current code was sent to. */\nconst phone = shallowRef('');\nconst telegramLinkUrl = shallowRef<string | null>(null);\nconst isResending = shallowRef(false);\nconst isResent = shallowRef(false);\nconst resendFailure = shallowRef<AppError | null>(null);\n\nconst notSent = () =>\n ResultExtensions.fail({\n ...AppErrorFactory.unavailable(),\n message: t('PhoneCodeSignIn.notSent', 'We could not send a code. Try again in a minute.'),\n });\n\nasync function send(value: string, signal?: AbortSignal) {\n const result = await client.sendPhoneSignInCode({ phone: value }, signal);\n if (!result.ok) return result;\n if (!result.value.isCodeSent && !result.value.telegramLinkUrl) return notSent();\n phone.value = value;\n telegramLinkUrl.value = result.value.telegramLinkUrl;\n return result;\n}\n\nconst phoneForm = useAccountForm({\n defaultValues: { phone: '' },\n onSubmit: async (values, { signal }) => {\n const result = await send(values.phone, signal);\n if (result.ok) {\n codeForm.reset();\n isResent.value = false;\n resendFailure.value = null;\n step.value = telegramLinkUrl.value ? PhoneSignInStep.Telegram : PhoneSignInStep.Code;\n }\n return result;\n },\n});\n\nconst codeForm = useAccountForm({\n defaultValues: { code: '' },\n onSubmit: async (values, { signal }) => {\n const result = await client.signInWithPhone(\n { phone: phone.value, code: values.code.trim() },\n { clientId: props.clientId, signal },\n );\n if (result.ok) emit('signedIn');\n return result;\n },\n});\n\nasync function resend() {\n isResending.value = true;\n isResent.value = false;\n resendFailure.value = null;\n const result = await send(phone.value);\n isResending.value = false;\n if (result.ok) isResent.value = true;\n else resendFailure.value = result.failure;\n}\n\nfunction useAnotherPhone() {\n step.value = PhoneSignInStep.Phone;\n telegramLinkUrl.value = null;\n}\n</script>\n\n<template>\n <form v-if=\"step === PhoneSignInStep.Phone\" class=\"flex flex-col gap-4\" novalidate @submit=\"phoneForm.handleSubmit\">\n <phoneForm.Field v-slot=\"field\" name=\"phone\" is-required>\n <Field :label=\"t('PhoneCodeSignIn.phone', 'Phone number')\">\n <PhoneInput\n v-model=\"field.value\"\n name=\"phone\"\n class=\"w-full [&>span]:shrink-0 [&>span]:whitespace-nowrap\"\n :countries=\"countries\"\n :placeholder=\"t('PhoneCodeSignIn.phonePlaceholder', '')\"\n :default-country=\"defaultCountry\"\n @blur=\"field.onBlur\"\n />\n </Field>\n </phoneForm.Field>\n <FailureAlert :failure=\"phoneForm.state.submitError\" />\n <Button type=\"submit\" is-full-width :is-loading=\"phoneForm.state.isSubmitting\">\n {{ t('PhoneCodeSignIn.send', 'Send a code') }}\n </Button>\n </form>\n\n <div v-else-if=\"step === PhoneSignInStep.Telegram\" class=\"flex flex-col gap-4\">\n <p class=\"text-sm text-muted-foreground\">\n {{\n t(\n 'PhoneCodeSignIn.telegramIntro',\n 'Open our Telegram bot, press Start and share your contact. The bot then sends your code for {phone}.',\n { phone },\n )\n }}\n </p>\n <Button as-child is-full-width>\n <a\n :href=\"telegramLinkUrl ?? undefined\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n @click=\"step = PhoneSignInStep.Code\"\n >\n {{ t('PhoneCodeSignIn.openTelegram', 'Open Telegram') }}\n </a>\n </Button>\n <Button type=\"button\" variant=\"outline\" tone=\"neutral\" is-full-width @click=\"step = PhoneSignInStep.Code\">\n {{ t('PhoneCodeSignIn.haveCode', 'I have the code') }}\n </Button>\n <Button type=\"button\" variant=\"ghost\" tone=\"neutral\" @click=\"useAnotherPhone\">\n {{ t('PhoneCodeSignIn.otherPhone', 'Use another number') }}\n </Button>\n </div>\n\n <form v-else class=\"flex flex-col gap-4\" novalidate @submit=\"codeForm.handleSubmit\">\n <p class=\"text-sm text-muted-foreground\">\n <template v-if=\"telegramLinkUrl\">\n {{ t('PhoneCodeSignIn.codeFromTelegram', 'Enter the code the bot sent you in Telegram.') }}\n <a\n :href=\"telegramLinkUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"text-primary underline-offset-4 hover:underline\"\n >\n {{ t('PhoneCodeSignIn.openTelegramAgain', 'Open Telegram') }}\n </a>\n </template>\n <template v-else>{{ t('PhoneCodeSignIn.codeSent', 'We sent a code to {phone}.', { phone }) }}</template>\n </p>\n <codeForm.Field v-slot=\"field\" name=\"code\" is-required>\n <Field :label=\"t('PhoneCodeSignIn.code', 'Code')\">\n <TextInput\n v-model=\"field.value\"\n name=\"code\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n @blur=\"field.onBlur\"\n />\n </Field>\n </codeForm.Field>\n <FailureAlert :failure=\"codeForm.state.submitError\" />\n <FailureAlert :failure=\"resendFailure\" />\n <AlertSimple v-if=\"isResent\" severity=\"success\">\n {{ t('PhoneCodeSignIn.resent', 'We sent a new code.') }}\n </AlertSimple>\n <Button type=\"submit\" is-full-width :is-loading=\"codeForm.state.isSubmitting\">\n {{ t('PhoneCodeSignIn.submit', 'Sign in') }}\n </Button>\n <div class=\"flex flex-wrap justify-between gap-2\">\n <Button type=\"button\" variant=\"ghost\" tone=\"neutral\" :is-loading=\"isResending\" @click=\"resend\">\n {{ t('PhoneCodeSignIn.resend', 'Send a new code') }}\n </Button>\n <Button type=\"button\" variant=\"ghost\" tone=\"neutral\" @click=\"useAnotherPhone\">\n {{ t('PhoneCodeSignIn.otherPhone', 'Use another number') }}\n </Button>\n </div>\n </form>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@wow-two-beta/fe/presentation/actions';\nimport { AlertSimple } from '@wow-two-beta/fe/presentation/feedback';\nimport { Field, PasswordInput } from '@wow-two-beta/fe/presentation/forms';\nimport { shallowRef } from 'vue';\nimport type { AccountClient } from '../../../account';\nimport { useAccountClient, useAccountForm, useAccountText } from '../../../account/hooks';\nimport { FailureAlert } from '../../feedback/failureAlert';\n\n/** Sets a new password with the token a reset email carried. */\ndefineOptions({ name: 'ResetPasswordForm' });\n\nconst props = withDefaults(\n defineProps<{\n /** The account API to call; built from `baseUrl` when omitted. */\n client?: AccountClient;\n /** The service's origin; the consumer's own origin when omitted. */\n baseUrl?: string;\n /** The account email the reset link named. */\n email: string;\n /** The reset token the link carried. */\n token: string;\n /** Where the person signs in once the password is set; no link when omitted. */\n signInHref?: string;\n }>(),\n { client: undefined, baseUrl: undefined, signInHref: undefined },\n);\n\nconst emit = defineEmits<{\n /** Fires once the new password is set. */\n reset: [];\n}>();\n\nconst client = useAccountClient(props);\nconst t = useAccountText();\nconst isReset = shallowRef(false);\n\nconst form = useAccountForm({\n defaultValues: { newPassword: '' },\n onSubmit: async (values, { signal }) => {\n const result = await client.resetPassword(\n { email: props.email, resetToken: props.token, newPassword: values.newPassword },\n signal,\n );\n if (result.ok) {\n isReset.value = true;\n emit('reset');\n }\n return result;\n },\n});\n</script>\n\n<template>\n <div v-if=\"isReset\" class=\"flex flex-col gap-4\">\n <AlertSimple severity=\"success\">{{ t('ResetPasswordForm.done', 'Your password is changed.') }}</AlertSimple>\n <Button v-if=\"signInHref\" as-child is-full-width>\n <a :href=\"signInHref\">{{ t('ResetPasswordForm.signIn', 'Sign in') }}</a>\n </Button>\n </div>\n <form v-else class=\"flex flex-col gap-4\" novalidate @submit=\"form.handleSubmit\">\n <p class=\"text-sm text-muted-foreground\">\n {{ t('ResetPasswordForm.intro', 'Choose a new password for {email}.', { email }) }}\n </p>\n <form.Field v-slot=\"field\" name=\"newPassword\" is-required>\n <Field :label=\"t('ResetPasswordForm.newPassword', 'New password')\">\n <PasswordInput v-model=\"field.value\" name=\"newPassword\" autocomplete=\"new-password\" @blur=\"field.onBlur\" />\n </Field>\n </form.Field>\n <FailureAlert :failure=\"form.state.submitError\" />\n <Button type=\"submit\" is-full-width :is-loading=\"form.state.isSubmitting\">\n {{ t('ResetPasswordForm.submit', 'Set the password') }}\n </Button>\n </form>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@wow-two-beta/fe/presentation/actions';\nimport { AlertSimple } from '@wow-two-beta/fe/presentation/feedback';\nimport { EmailInput, Field, PasswordInput } from '@wow-two-beta/fe/presentation/forms';\nimport { shallowRef } from 'vue';\nimport type { RegisteredAccountDto } from '../../../../contracts';\nimport type { AccountClient } from '../../../account';\nimport { useAccountClient, useAccountForm, useAccountText } from '../../../account/hooks';\nimport { FailureAlert } from '../../feedback/failureAlert';\n\n/** Creates an account with an email and password while the instance keeps sign-up on, then says what comes next. */\ndefineOptions({ name: 'SignUpForm' });\n\nconst props = withDefaults(\n defineProps<{\n /** The account API to call; built from `baseUrl` when omitted. */\n client?: AccountClient;\n /** The service's origin; the consumer's own origin when omitted. */\n baseUrl?: string;\n /** Where the person signs in once the account exists; no link when omitted. */\n signInHref?: string;\n }>(),\n { client: undefined, baseUrl: undefined, signInHref: undefined },\n);\n\nconst emit = defineEmits<{\n /** Fires with the account a registration created. */\n signedUp: [account: RegisteredAccountDto];\n}>();\n\nconst client = useAccountClient(props);\nconst t = useAccountText();\nconst registered = shallowRef<{ account: RegisteredAccountDto; email: string } | null>(null);\n\nconst form = useAccountForm({\n defaultValues: { email: '', password: '' },\n onSubmit: async (values, { signal }) => {\n const result = await client.register(values, signal);\n if (result.ok) {\n registered.value = { account: result.value, email: values.email };\n emit('signedUp', result.value);\n }\n return result;\n },\n});\n</script>\n\n<template>\n <div v-if=\"registered\" class=\"flex flex-col gap-4\">\n <AlertSimple severity=\"success\">\n <template v-if=\"registered.account.isConfirmationSent\">\n {{\n t('SignUpForm.confirmationSent', 'Check your inbox: we sent a link to {email} to confirm the address.', {\n email: registered.email,\n })\n }}\n </template>\n <template v-else>{{ t('SignUpForm.created', 'Your account is ready.') }}</template>\n </AlertSimple>\n <Button v-if=\"signInHref\" as-child is-full-width>\n <a :href=\"signInHref\">{{ t('SignUpForm.signIn', 'Sign in') }}</a>\n </Button>\n </div>\n <form v-else class=\"flex flex-col gap-4\" novalidate @submit=\"form.handleSubmit\">\n <form.Field v-slot=\"field\" name=\"email\" is-required>\n <Field :label=\"t('SignUpForm.email', 'Email')\">\n <EmailInput v-model=\"field.value\" name=\"email\" autocomplete=\"email\" @blur=\"field.onBlur\" />\n </Field>\n </form.Field>\n <form.Field v-slot=\"field\" name=\"password\" is-required>\n <Field :label=\"t('SignUpForm.password', 'Password')\">\n <PasswordInput v-model=\"field.value\" name=\"password\" autocomplete=\"new-password\" @blur=\"field.onBlur\" />\n </Field>\n </form.Field>\n <FailureAlert :failure=\"form.state.submitError\" />\n <Button type=\"submit\" is-full-width :is-loading=\"form.state.isSubmitting\">\n {{ t('SignUpForm.submit', 'Create the account') }}\n </Button>\n </form>\n</template>\n"],"names":["text","_createBlock","_unref","useAccountForm","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","_Fragment","_createVNode","FailureAlert","_withCtx","_createElementVNode","_hoisted_3","_createTextVNode"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type AppError } from '@wow-two-beta/fe/foundation/results';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
/** The failure to explain; nothing renders without one. */
|
|
4
|
+
failure: AppError | null;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as FailureAlert } from './FailureAlert.vue';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { PasswordChangeConfirmationType } from '../../../../contracts';
|
|
2
|
+
import type { AccountClient } from '../../../account';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
/** The account API to call; built from `baseUrl` when omitted. */
|
|
5
|
+
client?: AccountClient;
|
|
6
|
+
/** The service's origin; the consumer's own origin when omitted. */
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
/** The one-time token a change link carried. */
|
|
9
|
+
token?: string | null;
|
|
10
|
+
/** The ticket a sign-in answered with when the password breaks the current rules. */
|
|
11
|
+
ticket?: string | null;
|
|
12
|
+
/** How the ticket's change is confirmed, as the sign-in answered; asked of the instance when omitted. */
|
|
13
|
+
confirmation?: PasswordChangeConfirmationType | null;
|
|
14
|
+
};
|
|
15
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
16
|
+
changed: () => any;
|
|
17
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
18
|
+
onChanged?: (() => any) | undefined;
|
|
19
|
+
}>, {
|
|
20
|
+
token: string | null;
|
|
21
|
+
confirmation: PasswordChangeConfirmationType | null;
|
|
22
|
+
ticket: string | null;
|
|
23
|
+
baseUrl: string;
|
|
24
|
+
client: AccountClient;
|
|
25
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
26
|
+
export default _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Defines where a password change stands. */
|
|
2
|
+
export declare const ChangePasswordStage: {
|
|
3
|
+
/** Refers to the change not started: the instance has not said how it is confirmed. */
|
|
4
|
+
readonly Idle: "idle";
|
|
5
|
+
/** Refers to the change form, with the code field under the `Code` confirmation. */
|
|
6
|
+
readonly Form: "form";
|
|
7
|
+
/** Refers to the `Link` confirmation: only the emailed link opens the form. */
|
|
8
|
+
readonly LinkSent: "link-sent";
|
|
9
|
+
/** Refers to the password changed. */
|
|
10
|
+
readonly Done: "done";
|
|
11
|
+
};
|
|
12
|
+
export type ChangePasswordStage = (typeof ChangePasswordStage)[keyof typeof ChangePasswordStage];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AccountClient } from '../../../account';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
/** The account API to call; built from `baseUrl` when omitted. */
|
|
4
|
+
client?: AccountClient;
|
|
5
|
+
/** The service's origin; the consumer's own origin when omitted. */
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
/** The email the field starts with. */
|
|
8
|
+
initialEmail?: string;
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
sent: (email: string) => any;
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
+
onSent?: ((email: string) => any) | undefined;
|
|
14
|
+
}>, {
|
|
15
|
+
baseUrl: string;
|
|
16
|
+
client: AccountClient;
|
|
17
|
+
initialEmail: string;
|
|
18
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as ForgotPasswordForm } from './ForgotPasswordForm.vue';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PasswordChangeRequiredDto } from '../../../../contracts';
|
|
2
|
+
import type { AccountClient } from '../../../account';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
/** The account API to call; built from `baseUrl` when omitted. */
|
|
5
|
+
client?: AccountClient;
|
|
6
|
+
/** The service's origin; the consumer's own origin when omitted. */
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
/** The OIDC client the sign-in serves, recorded by the sign-in log. */
|
|
9
|
+
clientId?: string | null;
|
|
10
|
+
/** Where "Forgot your password?" leads; no link when omitted. */
|
|
11
|
+
forgotPasswordHref?: string;
|
|
12
|
+
/** The login the field starts with. */
|
|
13
|
+
initialLogin?: string;
|
|
14
|
+
};
|
|
15
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
16
|
+
signedIn: () => any;
|
|
17
|
+
passwordChangeRequired: (required: PasswordChangeRequiredDto) => any;
|
|
18
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
19
|
+
onSignedIn?: (() => any) | undefined;
|
|
20
|
+
onPasswordChangeRequired?: ((required: PasswordChangeRequiredDto) => any) | undefined;
|
|
21
|
+
}>, {
|
|
22
|
+
clientId: string | null;
|
|
23
|
+
baseUrl: string;
|
|
24
|
+
client: AccountClient;
|
|
25
|
+
forgotPasswordHref: string;
|
|
26
|
+
initialLogin: string;
|
|
27
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
28
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as PasswordSignIn } from './PasswordSignIn.vue';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AccountClient } from '../../../account';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
/** The account API to call; built from `baseUrl` when omitted. */
|
|
4
|
+
client?: AccountClient;
|
|
5
|
+
/** The service's origin; the consumer's own origin when omitted. */
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
/** The OIDC client the sign-in serves, recorded by the sign-in log. */
|
|
8
|
+
clientId?: string | null;
|
|
9
|
+
/** The ISO codes of the countries a phone may come from, in display order; every country when omitted. */
|
|
10
|
+
countries?: ReadonlyArray<string>;
|
|
11
|
+
/** The ISO code selected first; the first allowed country when omitted. */
|
|
12
|
+
defaultCountry?: string;
|
|
13
|
+
};
|
|
14
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
15
|
+
signedIn: () => any;
|
|
16
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
17
|
+
onSignedIn?: (() => any) | undefined;
|
|
18
|
+
}>, {
|
|
19
|
+
clientId: string | null;
|
|
20
|
+
countries: ReadonlyArray<string>;
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
client: AccountClient;
|
|
23
|
+
defaultCountry: string;
|
|
24
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
25
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Defines where a phone sign-in stands. */
|
|
2
|
+
export declare const PhoneSignInStep: {
|
|
3
|
+
/** Refers to entering the phone a code goes to. */
|
|
4
|
+
readonly Phone: "phone";
|
|
5
|
+
/** Refers to opening the Telegram bot and sharing the contact, after which the bot sends the code. */
|
|
6
|
+
readonly Telegram: "telegram";
|
|
7
|
+
/** Refers to entering the code. */
|
|
8
|
+
readonly Code: "code";
|
|
9
|
+
};
|
|
10
|
+
export type PhoneSignInStep = (typeof PhoneSignInStep)[keyof typeof PhoneSignInStep];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AccountClient } from '../../../account';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
/** The account API to call; built from `baseUrl` when omitted. */
|
|
4
|
+
client?: AccountClient;
|
|
5
|
+
/** The service's origin; the consumer's own origin when omitted. */
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
/** The account email the reset link named. */
|
|
8
|
+
email: string;
|
|
9
|
+
/** The reset token the link carried. */
|
|
10
|
+
token: string;
|
|
11
|
+
/** Where the person signs in once the password is set; no link when omitted. */
|
|
12
|
+
signInHref?: string;
|
|
13
|
+
};
|
|
14
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
15
|
+
reset: () => any;
|
|
16
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
17
|
+
onReset?: (() => any) | undefined;
|
|
18
|
+
}>, {
|
|
19
|
+
baseUrl: string;
|
|
20
|
+
client: AccountClient;
|
|
21
|
+
signInHref: string;
|
|
22
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
23
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as ResetPasswordForm } from './ResetPasswordForm.vue';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { RegisteredAccountDto } from '../../../../contracts';
|
|
2
|
+
import type { AccountClient } from '../../../account';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
/** The account API to call; built from `baseUrl` when omitted. */
|
|
5
|
+
client?: AccountClient;
|
|
6
|
+
/** The service's origin; the consumer's own origin when omitted. */
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
/** Where the person signs in once the account exists; no link when omitted. */
|
|
9
|
+
signInHref?: string;
|
|
10
|
+
};
|
|
11
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
12
|
+
signedUp: (account: RegisteredAccountDto) => any;
|
|
13
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
14
|
+
onSignedUp?: ((account: RegisteredAccountDto) => any) | undefined;
|
|
15
|
+
}>, {
|
|
16
|
+
baseUrl: string;
|
|
17
|
+
client: AccountClient;
|
|
18
|
+
signInHref: string;
|
|
19
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as SignUpForm } from './SignUpForm.vue';
|
package/package.json
CHANGED
|
@@ -1,6 +1,61 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wow-two-beta/fe-identity",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "Identity domain UI: the account API contract, an account client and one embeddable component per sign-in and password step.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/wow-two-sdk-beta/wow-two-sdk-beta.identity.git",
|
|
10
|
+
"directory": "engineering/codebase/identity.frontend-services/packages/fe-identity"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"sideEffects": false,
|
|
18
|
+
"exports": {
|
|
19
|
+
"./contracts": {
|
|
20
|
+
"types": "./dist/contracts/index.d.ts",
|
|
21
|
+
"import": "./dist/contracts/index.js",
|
|
22
|
+
"default": "./dist/contracts/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./kit": {
|
|
25
|
+
"types": "./dist/kit/index.d.ts",
|
|
26
|
+
"import": "./dist/kit/index.js",
|
|
27
|
+
"default": "./dist/kit/index.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "vite build && vue-tsc -p tsconfig.build.json",
|
|
32
|
+
"typecheck": "vue-tsc --noEmit -p tsconfig.json",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"lint": "eslint .",
|
|
35
|
+
"format": "prettier --write src tests scripts *.ts *.mjs *.json",
|
|
36
|
+
"format:check": "prettier --check src tests scripts *.ts *.mjs *.json",
|
|
37
|
+
"check:package": "node scripts/check-package.mjs"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"@wow-two-beta/fe": ">=0.0.37 <0.1.0",
|
|
41
|
+
"vue": "^3.5.0"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@eslint/js": "^9.14.0",
|
|
45
|
+
"@vitejs/plugin-vue": "^5.2.1",
|
|
46
|
+
"@vue/test-utils": "^2.4.6",
|
|
47
|
+
"@wow-two-beta/fe": "0.0.37",
|
|
48
|
+
"eslint": "^9.14.0",
|
|
49
|
+
"eslint-plugin-vue": "^9.32.0",
|
|
50
|
+
"globals": "^16.0.0",
|
|
51
|
+
"happy-dom": "^20.11.2",
|
|
52
|
+
"prettier": "^3.9.6",
|
|
53
|
+
"typescript": "~5.9.3",
|
|
54
|
+
"typescript-eslint": "^8.13.0",
|
|
55
|
+
"vite": "^6.0.0",
|
|
56
|
+
"vitest": "^4.1.10",
|
|
57
|
+
"vue": "^3.5.13",
|
|
58
|
+
"vue-eslint-parser": "^9.4.3",
|
|
59
|
+
"vue-tsc": "^2.2.0"
|
|
60
|
+
}
|
|
61
|
+
}
|