@authsome/ui-vue 1.7.2 → 1.8.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/dist/index.d.ts +6 -0
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -141,6 +141,7 @@ declare function useAuth(): {
|
|
|
141
141
|
readonly error: string;
|
|
142
142
|
}>>;
|
|
143
143
|
clientConfig: Readonly<Ref<{
|
|
144
|
+
readonly signup_enabled?: boolean | undefined;
|
|
144
145
|
readonly version?: string | undefined;
|
|
145
146
|
readonly app_id?: string | undefined;
|
|
146
147
|
readonly branding?: {
|
|
@@ -212,6 +213,7 @@ declare function useAuth(): {
|
|
|
212
213
|
readonly site_key?: string | undefined;
|
|
213
214
|
} | undefined;
|
|
214
215
|
} | null, {
|
|
216
|
+
readonly signup_enabled?: boolean | undefined;
|
|
215
217
|
readonly version?: string | undefined;
|
|
216
218
|
readonly app_id?: string | undefined;
|
|
217
219
|
readonly branding?: {
|
|
@@ -291,6 +293,8 @@ declare function useAuth(): {
|
|
|
291
293
|
error: vue.ComputedRef<string | null>;
|
|
292
294
|
client: _authsome_ui_core.AuthClient;
|
|
293
295
|
signIn: (email: string, password: string, options?: AuthSubmitOptions) => Promise<void>;
|
|
296
|
+
startSSOLogin: (connectionId: string, returnUrl?: string) => Promise<string>;
|
|
297
|
+
completeSSOLogin: (code: string) => Promise<void>;
|
|
294
298
|
signUp: (email: string, password: string, fields?: Record<string, string>, options?: AuthSubmitOptions) => Promise<void>;
|
|
295
299
|
signOut: () => Promise<void>;
|
|
296
300
|
resendVerification: (email: string) => Promise<void>;
|
|
@@ -312,6 +316,7 @@ declare function useAuth(): {
|
|
|
312
316
|
*/
|
|
313
317
|
declare function useClientConfig(): {
|
|
314
318
|
config: Readonly<Ref<{
|
|
319
|
+
readonly signup_enabled?: boolean | undefined;
|
|
315
320
|
readonly version?: string | undefined;
|
|
316
321
|
readonly app_id?: string | undefined;
|
|
317
322
|
readonly branding?: {
|
|
@@ -383,6 +388,7 @@ declare function useClientConfig(): {
|
|
|
383
388
|
readonly site_key?: string | undefined;
|
|
384
389
|
} | undefined;
|
|
385
390
|
} | null, {
|
|
391
|
+
readonly signup_enabled?: boolean | undefined;
|
|
386
392
|
readonly version?: string | undefined;
|
|
387
393
|
readonly app_id?: string | undefined;
|
|
388
394
|
readonly branding?: {
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,8 @@ import {
|
|
|
7
7
|
ref
|
|
8
8
|
} from "vue";
|
|
9
9
|
import {
|
|
10
|
-
AuthManager
|
|
10
|
+
AuthManager,
|
|
11
|
+
readOrganizationList
|
|
11
12
|
} from "@authsome/ui-core";
|
|
12
13
|
var AUTH_KEY = /* @__PURE__ */ Symbol("authsome");
|
|
13
14
|
var AUTH_STATE_KEY = /* @__PURE__ */ Symbol("authsome:state");
|
|
@@ -77,6 +78,12 @@ function useAuth() {
|
|
|
77
78
|
captcha_token: options?.captchaToken
|
|
78
79
|
});
|
|
79
80
|
}
|
|
81
|
+
async function startSSOLogin(connectionId, returnUrl) {
|
|
82
|
+
return manager.startSSOLogin(connectionId, returnUrl);
|
|
83
|
+
}
|
|
84
|
+
async function completeSSOLogin(code) {
|
|
85
|
+
await manager.completeSSOLogin(code);
|
|
86
|
+
}
|
|
80
87
|
async function signUp(email, password, fields, options) {
|
|
81
88
|
const { first_name, last_name, username, ...rest } = fields ?? {};
|
|
82
89
|
const metadata = Object.keys(rest).length > 0 ? rest : void 0;
|
|
@@ -113,6 +120,8 @@ function useAuth() {
|
|
|
113
120
|
error,
|
|
114
121
|
client: manager.getClient(),
|
|
115
122
|
signIn,
|
|
123
|
+
startSSOLogin,
|
|
124
|
+
completeSSOLogin,
|
|
116
125
|
signUp,
|
|
117
126
|
signOut,
|
|
118
127
|
resendVerification,
|
|
@@ -153,8 +162,10 @@ function useOrganizations() {
|
|
|
153
162
|
if (!session.value) return;
|
|
154
163
|
isLoading.value = true;
|
|
155
164
|
try {
|
|
156
|
-
const res =
|
|
157
|
-
|
|
165
|
+
const res = readOrganizationList(
|
|
166
|
+
await manager.getClient().listOrganizations(session.value.session_token)
|
|
167
|
+
);
|
|
168
|
+
organizations.value = res.organizations;
|
|
158
169
|
total.value = res.total;
|
|
159
170
|
} finally {
|
|
160
171
|
isLoading.value = false;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composables.ts"],"sourcesContent":["/**\n * Vue 3 composables for AuthSome authentication.\n *\n * Usage:\n * ```ts\n * // main.ts\n * import { createAuthPlugin } from \"@authsome/ui-vue\";\n * app.use(createAuthPlugin({ baseURL: \"https://api.example.com\" }));\n *\n * // Component.vue\n * import { useAuth, useUser } from \"@authsome/ui-vue\";\n * const { signIn, isAuthenticated, user } = useAuth();\n * ```\n */\n\nimport {\n computed,\n inject,\n onMounted,\n readonly,\n ref,\n type App,\n type InjectionKey,\n type Ref,\n} from \"vue\";\nimport {\n AuthManager,\n type AuthConfig,\n type AuthState,\n type ClientConfig,\n type User,\n type Session,\n type Organization,\n type ListResponse,\n} from \"@authsome/ui-core\";\n\n/** Injection key for the AuthManager. */\nconst AUTH_KEY: InjectionKey<AuthManager> = Symbol(\"authsome\");\n\n/** Injection key for the reactive auth state. */\nconst AUTH_STATE_KEY: InjectionKey<Ref<AuthState>> = Symbol(\"authsome:state\");\n\n/** Injection key for the reactive client config. */\nconst AUTH_CONFIG_KEY: InjectionKey<Ref<ClientConfig | null>> = Symbol(\n \"authsome:config\",\n);\n\n/**\n * Creates a Vue plugin that provides AuthSome authentication.\n *\n * ```ts\n * const app = createApp(App);\n * app.use(createAuthPlugin({ baseURL: \"https://api.example.com\" }));\n * ```\n */\nexport function createAuthPlugin(config: AuthConfig) {\n return {\n install(app: App) {\n const manager = new AuthManager(config);\n const state = ref<AuthState>(manager.getState());\n const clientConfig = ref<ClientConfig | null>(manager.getClientConfig());\n\n manager.subscribe((s) => {\n state.value = s;\n });\n manager.subscribeConfig((c) => {\n clientConfig.value = c;\n });\n\n app.provide(AUTH_KEY, manager);\n app.provide(AUTH_STATE_KEY, state);\n app.provide(AUTH_CONFIG_KEY, clientConfig);\n\n // Initialize on mount (hydrate from storage).\n void manager.initialize();\n },\n };\n}\n\nfunction useManager(): AuthManager {\n const manager = inject(AUTH_KEY);\n if (!manager) {\n throw new Error(\"useAuth requires the authsome plugin. Call app.use(createAuthPlugin(...)).\");\n }\n return manager;\n}\n\nfunction useAuthState(): Ref<AuthState> {\n const state = inject(AUTH_STATE_KEY);\n if (!state) {\n throw new Error(\"useAuth requires the authsome plugin. Call app.use(createAuthPlugin(...)).\");\n }\n return state;\n}\n\nfunction useAuthConfig(): Ref<ClientConfig | null> {\n const cfg = inject(AUTH_CONFIG_KEY);\n if (!cfg) {\n throw new Error(\"useClientConfig requires the authsome plugin. Call app.use(createAuthPlugin(...)).\");\n }\n return cfg;\n}\n\n/** Optional second arg for sign-in / sign-up to attach a captcha token. */\nexport interface AuthSubmitOptions {\n captchaToken?: string;\n}\n\n/**\n * Main auth composable providing state and actions.\n */\nexport function useAuth() {\n const manager = useManager();\n const state = useAuthState();\n const clientConfig = useAuthConfig();\n\n const isAuthenticated = computed(() => state.value.status === \"authenticated\");\n const isLoading = computed(() => state.value.status === \"loading\");\n const isConfigLoaded = computed(() => clientConfig.value !== null);\n\n const user = computed<User | null>(() =>\n state.value.status === \"authenticated\" ? state.value.user : null,\n );\n\n const session = computed<Session | null>(() =>\n state.value.status === \"authenticated\" ? state.value.session : null,\n );\n\n const error = computed<string | null>(() =>\n state.value.status === \"error\" ? state.value.error : null,\n );\n\n async function signIn(\n email: string,\n password: string,\n options?: AuthSubmitOptions,\n ) {\n await manager.signIn({\n email,\n password,\n captcha_token: options?.captchaToken,\n });\n }\n\n async function signUp(\n email: string,\n password: string,\n fields?: Record<string, string>,\n options?: AuthSubmitOptions,\n ) {\n const { first_name, last_name, username, ...rest } = fields ?? {};\n const metadata = Object.keys(rest).length > 0 ? rest : undefined;\n await manager.signUp({\n email,\n password,\n first_name,\n last_name,\n username,\n metadata,\n captcha_token: options?.captchaToken,\n });\n }\n\n async function signOut() {\n await manager.signOut();\n }\n\n async function resendVerification(email: string) {\n await manager.resendVerification(email);\n }\n\n async function submitMFACode(enrollmentId: string, code: string) {\n await manager.submitMFACode(enrollmentId, code);\n }\n\n async function submitRecoveryCode(code: string) {\n await manager.submitRecoveryCode(code);\n }\n\n return {\n state: readonly(state),\n clientConfig: readonly(clientConfig),\n isAuthenticated,\n isLoading,\n isConfigLoaded,\n user,\n session,\n error,\n client: manager.getClient(),\n signIn,\n signUp,\n signOut,\n resendVerification,\n submitMFACode,\n submitRecoveryCode,\n };\n}\n\n/**\n * Composable returning the auto-discovered client configuration.\n *\n * Includes feature flags such as `social`, `passkeys`, `email_verification`,\n * and `captcha`. Useful for templates that need to gate UI on backend config.\n *\n * ```ts\n * const { config, isLoaded } = useClientConfig();\n * if (config.value?.captcha?.required) {\n * // render Turnstile\n * }\n * ```\n */\nexport function useClientConfig() {\n const config = useAuthConfig();\n const isLoaded = computed(() => config.value !== null);\n return {\n config: readonly(config),\n isLoaded,\n };\n}\n\n/**\n * Composable to fetch and reload the user profile.\n */\nexport function useUser() {\n const { user: authUser, isLoading, session } = useAuth();\n const manager = useManager();\n const localUser = ref<User | null>(authUser.value);\n\n async function reload() {\n if (!session.value) return;\n const u = await manager.getClient().getMe(session.value.session_token);\n localUser.value = u;\n }\n\n return {\n user: computed(() => localUser.value ?? authUser.value),\n isLoading,\n reload,\n };\n}\n\n/**\n * Composable to list organizations.\n */\nexport function useOrganizations() {\n const { session, isAuthenticated } = useAuth();\n const manager = useManager();\n\n const organizations = ref<Organization[]>([]);\n const total = ref(0);\n const isLoading = ref(false);\n\n async function load() {\n if (!session.value) return;\n isLoading.value = true;\n try {\n const res = await manager\n .getClient()\n .listOrganizations(session.value.session_token) as unknown as ListResponse<Organization>;\n organizations.value = res.items;\n total.value = res.total;\n } finally {\n isLoading.value = false;\n }\n }\n\n onMounted(() => {\n if (isAuthenticated.value) {\n void load();\n }\n });\n\n return {\n organizations: readonly(organizations),\n total: readonly(total),\n isLoading: readonly(isLoading),\n reload: load,\n };\n}\n\n/**\n * Composable that returns the current session token.\n */\nexport function useSessionToken() {\n const { session } = useAuth();\n return computed(() => session.value?.session_token ?? null);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/composables.ts"],"sourcesContent":["/**\n * Vue 3 composables for AuthSome authentication.\n *\n * Usage:\n * ```ts\n * // main.ts\n * import { createAuthPlugin } from \"@authsome/ui-vue\";\n * app.use(createAuthPlugin({ baseURL: \"https://api.example.com\" }));\n *\n * // Component.vue\n * import { useAuth, useUser } from \"@authsome/ui-vue\";\n * const { signIn, isAuthenticated, user } = useAuth();\n * ```\n */\n\nimport {\n computed,\n inject,\n onMounted,\n readonly,\n ref,\n type App,\n type InjectionKey,\n type Ref,\n} from \"vue\";\nimport {\n AuthManager,\n readOrganizationList,\n type AuthConfig,\n type AuthState,\n type ClientConfig,\n type User,\n type Session,\n type Organization,\n} from \"@authsome/ui-core\";\n\n/** Injection key for the AuthManager. */\nconst AUTH_KEY: InjectionKey<AuthManager> = Symbol(\"authsome\");\n\n/** Injection key for the reactive auth state. */\nconst AUTH_STATE_KEY: InjectionKey<Ref<AuthState>> = Symbol(\"authsome:state\");\n\n/** Injection key for the reactive client config. */\nconst AUTH_CONFIG_KEY: InjectionKey<Ref<ClientConfig | null>> = Symbol(\n \"authsome:config\",\n);\n\n/**\n * Creates a Vue plugin that provides AuthSome authentication.\n *\n * ```ts\n * const app = createApp(App);\n * app.use(createAuthPlugin({ baseURL: \"https://api.example.com\" }));\n * ```\n */\nexport function createAuthPlugin(config: AuthConfig) {\n return {\n install(app: App) {\n const manager = new AuthManager(config);\n const state = ref<AuthState>(manager.getState());\n const clientConfig = ref<ClientConfig | null>(manager.getClientConfig());\n\n manager.subscribe((s) => {\n state.value = s;\n });\n manager.subscribeConfig((c) => {\n clientConfig.value = c;\n });\n\n app.provide(AUTH_KEY, manager);\n app.provide(AUTH_STATE_KEY, state);\n app.provide(AUTH_CONFIG_KEY, clientConfig);\n\n // Initialize on mount (hydrate from storage).\n void manager.initialize();\n },\n };\n}\n\nfunction useManager(): AuthManager {\n const manager = inject(AUTH_KEY);\n if (!manager) {\n throw new Error(\"useAuth requires the authsome plugin. Call app.use(createAuthPlugin(...)).\");\n }\n return manager;\n}\n\nfunction useAuthState(): Ref<AuthState> {\n const state = inject(AUTH_STATE_KEY);\n if (!state) {\n throw new Error(\"useAuth requires the authsome plugin. Call app.use(createAuthPlugin(...)).\");\n }\n return state;\n}\n\nfunction useAuthConfig(): Ref<ClientConfig | null> {\n const cfg = inject(AUTH_CONFIG_KEY);\n if (!cfg) {\n throw new Error(\"useClientConfig requires the authsome plugin. Call app.use(createAuthPlugin(...)).\");\n }\n return cfg;\n}\n\n/** Optional second arg for sign-in / sign-up to attach a captcha token. */\nexport interface AuthSubmitOptions {\n captchaToken?: string;\n}\n\n/**\n * Main auth composable providing state and actions.\n */\nexport function useAuth() {\n const manager = useManager();\n const state = useAuthState();\n const clientConfig = useAuthConfig();\n\n const isAuthenticated = computed(() => state.value.status === \"authenticated\");\n const isLoading = computed(() => state.value.status === \"loading\");\n const isConfigLoaded = computed(() => clientConfig.value !== null);\n\n const user = computed<User | null>(() =>\n state.value.status === \"authenticated\" ? state.value.user : null,\n );\n\n const session = computed<Session | null>(() =>\n state.value.status === \"authenticated\" ? state.value.session : null,\n );\n\n const error = computed<string | null>(() =>\n state.value.status === \"error\" ? state.value.error : null,\n );\n\n async function signIn(\n email: string,\n password: string,\n options?: AuthSubmitOptions,\n ) {\n await manager.signIn({\n email,\n password,\n captcha_token: options?.captchaToken,\n });\n }\n\n async function startSSOLogin(connectionId: string, returnUrl?: string) {\n return manager.startSSOLogin(connectionId, returnUrl);\n }\n\n async function completeSSOLogin(code: string) {\n await manager.completeSSOLogin(code);\n }\n\n async function signUp(\n email: string,\n password: string,\n fields?: Record<string, string>,\n options?: AuthSubmitOptions,\n ) {\n const { first_name, last_name, username, ...rest } = fields ?? {};\n const metadata = Object.keys(rest).length > 0 ? rest : undefined;\n await manager.signUp({\n email,\n password,\n first_name,\n last_name,\n username,\n metadata,\n captcha_token: options?.captchaToken,\n });\n }\n\n async function signOut() {\n await manager.signOut();\n }\n\n async function resendVerification(email: string) {\n await manager.resendVerification(email);\n }\n\n async function submitMFACode(enrollmentId: string, code: string) {\n await manager.submitMFACode(enrollmentId, code);\n }\n\n async function submitRecoveryCode(code: string) {\n await manager.submitRecoveryCode(code);\n }\n\n return {\n state: readonly(state),\n clientConfig: readonly(clientConfig),\n isAuthenticated,\n isLoading,\n isConfigLoaded,\n user,\n session,\n error,\n client: manager.getClient(),\n signIn,\n startSSOLogin,\n completeSSOLogin,\n signUp,\n signOut,\n resendVerification,\n submitMFACode,\n submitRecoveryCode,\n };\n}\n\n/**\n * Composable returning the auto-discovered client configuration.\n *\n * Includes feature flags such as `social`, `passkeys`, `email_verification`,\n * and `captcha`. Useful for templates that need to gate UI on backend config.\n *\n * ```ts\n * const { config, isLoaded } = useClientConfig();\n * if (config.value?.captcha?.required) {\n * // render Turnstile\n * }\n * ```\n */\nexport function useClientConfig() {\n const config = useAuthConfig();\n const isLoaded = computed(() => config.value !== null);\n return {\n config: readonly(config),\n isLoaded,\n };\n}\n\n/**\n * Composable to fetch and reload the user profile.\n */\nexport function useUser() {\n const { user: authUser, isLoading, session } = useAuth();\n const manager = useManager();\n const localUser = ref<User | null>(authUser.value);\n\n async function reload() {\n if (!session.value) return;\n const u = await manager.getClient().getMe(session.value.session_token);\n localUser.value = u;\n }\n\n return {\n user: computed(() => localUser.value ?? authUser.value),\n isLoading,\n reload,\n };\n}\n\n/**\n * Composable to list organizations.\n */\nexport function useOrganizations() {\n const { session, isAuthenticated } = useAuth();\n const manager = useManager();\n\n const organizations = ref<Organization[]>([]);\n const total = ref(0);\n const isLoading = ref(false);\n\n async function load() {\n if (!session.value) return;\n isLoading.value = true;\n try {\n const res = readOrganizationList(\n await manager.getClient().listOrganizations(session.value.session_token),\n );\n organizations.value = res.organizations;\n total.value = res.total;\n } finally {\n isLoading.value = false;\n }\n }\n\n onMounted(() => {\n if (isAuthenticated.value) {\n void load();\n }\n });\n\n return {\n organizations: readonly(organizations),\n total: readonly(total),\n isLoading: readonly(isLoading),\n reload: load,\n };\n}\n\n/**\n * Composable that returns the current session token.\n */\nexport function useSessionToken() {\n const { session } = useAuth();\n return computed(() => session.value?.session_token ?? null);\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@authsome/ui-vue",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.2",
|
|
4
4
|
"description": "Vue.js bindings for AuthSome authentication UI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"lint": "eslint ."
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@authsome/ui-core": "^1.
|
|
34
|
+
"@authsome/ui-core": "^1.8.2"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"vue": "^3.3.0"
|
|
@@ -39,6 +39,6 @@
|
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"tsup": "^8.5.1",
|
|
41
41
|
"typescript": "^5.9.3",
|
|
42
|
-
"vue": "^3.5.
|
|
42
|
+
"vue": "^3.5.43"
|
|
43
43
|
}
|
|
44
44
|
}
|