@authsome/ui-vue 1.7.2 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 = await manager.getClient().listOrganizations(session.value.session_token);
157
- organizations.value = res.items;
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.7.2",
3
+ "version": "1.8.1",
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.7.2"
34
+ "@authsome/ui-core": "^1.8.1"
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.41"
42
+ "vue": "^3.5.43"
43
43
  }
44
44
  }