@strands.gg/accui 0.2.14 → 0.2.16

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.
Files changed (96) hide show
  1. package/dist/accui.css +2896 -1
  2. package/dist/index.d.ts +1 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/nuxt/module.cjs.js +105 -1
  5. package/dist/nuxt/module.cjs.js.map +1 -1
  6. package/dist/nuxt/module.es.js +42 -32
  7. package/dist/nuxt/module.es.js.map +1 -1
  8. package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js +56 -1
  9. package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js.map +1 -1
  10. package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts +23 -1
  11. package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts.map +1 -1
  12. package/dist/nuxt/runtime/composables/useStrandsAuth.es.js +46 -30
  13. package/dist/nuxt/runtime/composables/useStrandsAuth.es.js.map +1 -1
  14. package/dist/nuxt/runtime/middleware/auth.global.cjs.js +41 -1
  15. package/dist/nuxt/runtime/middleware/auth.global.cjs.js.map +1 -1
  16. package/dist/nuxt/runtime/middleware/auth.global.es.js +37 -20
  17. package/dist/nuxt/runtime/middleware/auth.global.es.js.map +1 -1
  18. package/dist/nuxt/runtime/plugin.client.cjs.js +25 -1
  19. package/dist/nuxt/runtime/plugin.client.cjs.js.map +1 -1
  20. package/dist/nuxt/runtime/plugin.client.es.js +19 -10
  21. package/dist/nuxt/runtime/plugin.client.es.js.map +1 -1
  22. package/dist/nuxt/runtime/plugin.server.cjs.js +16 -1
  23. package/dist/nuxt/runtime/plugin.server.cjs.js.map +1 -1
  24. package/dist/nuxt/runtime/plugin.server.es.js +10 -8
  25. package/dist/nuxt/runtime/plugin.server.es.js.map +1 -1
  26. package/dist/nuxt-v4/module.cjs.js +112 -5
  27. package/dist/nuxt-v4/module.cjs.js.map +1 -1
  28. package/dist/nuxt-v4/module.d.ts.map +1 -1
  29. package/dist/nuxt-v4/module.es.js +47 -37
  30. package/dist/nuxt-v4/module.es.js.map +1 -1
  31. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.cjs.js +69 -1
  32. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.cjs.js.map +1 -1
  33. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.d.ts +2 -2
  34. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.d.ts.map +1 -1
  35. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.es.js +57 -41
  36. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.es.js.map +1 -1
  37. package/dist/nuxt-v4/runtime/middleware/auth.global.cjs.js +41 -1
  38. package/dist/nuxt-v4/runtime/middleware/auth.global.cjs.js.map +1 -1
  39. package/dist/nuxt-v4/runtime/middleware/auth.global.es.js +37 -20
  40. package/dist/nuxt-v4/runtime/middleware/auth.global.es.js.map +1 -1
  41. package/dist/nuxt-v4/runtime/plugin.client.cjs.js +25 -1
  42. package/dist/nuxt-v4/runtime/plugin.client.cjs.js.map +1 -1
  43. package/dist/nuxt-v4/runtime/plugin.client.es.js +19 -10
  44. package/dist/nuxt-v4/runtime/plugin.client.es.js.map +1 -1
  45. package/dist/nuxt-v4/runtime/plugin.server.cjs.js +21 -1
  46. package/dist/nuxt-v4/runtime/plugin.server.cjs.js.map +1 -1
  47. package/dist/nuxt-v4/runtime/plugin.server.es.js +13 -10
  48. package/dist/nuxt-v4/runtime/plugin.server.es.js.map +1 -1
  49. package/dist/strands-auth-ui.cjs.js +10820 -7
  50. package/dist/strands-auth-ui.cjs.js.map +1 -1
  51. package/dist/strands-auth-ui.es.js +8622 -3594
  52. package/dist/strands-auth-ui.es.js.map +1 -1
  53. package/dist/types/index.d.ts +13 -0
  54. package/dist/types/index.d.ts.map +1 -1
  55. package/dist/useStrandsAuth-CZ7inSUU.js +527 -0
  56. package/dist/useStrandsAuth-CZ7inSUU.js.map +1 -0
  57. package/dist/useStrandsAuth-fa48rk-t.cjs +526 -0
  58. package/dist/useStrandsAuth-fa48rk-t.cjs.map +1 -0
  59. package/dist/useStrandsConfig-Cbpo8XZg.js +154 -0
  60. package/dist/useStrandsConfig-Cbpo8XZg.js.map +1 -0
  61. package/dist/useStrandsConfig-CtKyh8RT.cjs +153 -0
  62. package/dist/useStrandsConfig-CtKyh8RT.cjs.map +1 -0
  63. package/dist/vue/components/SignedIn.vue.d.ts.map +1 -1
  64. package/dist/vue/components/StrandsAuth.vue.d.ts.map +1 -1
  65. package/dist/vue/components/StrandsBackupCodesModal.vue.d.ts.map +1 -1
  66. package/dist/vue/components/StrandsConfirmModal.vue.d.ts.map +1 -1
  67. package/dist/vue/components/StrandsEmailMfaSetupModal.vue.d.ts.map +1 -1
  68. package/dist/vue/components/StrandsHardwareKeySetupModal.vue.d.ts +12 -0
  69. package/dist/vue/components/StrandsHardwareKeySetupModal.vue.d.ts.map +1 -0
  70. package/dist/vue/components/StrandsMFASetup.vue.d.ts +10 -5
  71. package/dist/vue/components/StrandsMFASetup.vue.d.ts.map +1 -1
  72. package/dist/vue/components/StrandsMfaModal.vue.d.ts.map +1 -1
  73. package/dist/vue/components/StrandsMfaVerification.vue.d.ts +17 -0
  74. package/dist/vue/components/StrandsMfaVerification.vue.d.ts.map +1 -0
  75. package/dist/vue/components/StrandsSecuredFooter.vue.d.ts +16 -1
  76. package/dist/vue/components/StrandsSecuredFooter.vue.d.ts.map +1 -1
  77. package/dist/vue/components/StrandsSignIn.vue.d.ts.map +1 -1
  78. package/dist/vue/components/StrandsTotpSetupModal.vue.d.ts.map +1 -1
  79. package/dist/vue/components/StrandsUserProfile.vue.d.ts.map +1 -1
  80. package/dist/vue/components/index.d.ts +2 -0
  81. package/dist/vue/components/index.d.ts.map +1 -1
  82. package/dist/vue/composables/useStrandsAuth.d.ts +22 -0
  83. package/dist/vue/composables/useStrandsAuth.d.ts.map +1 -1
  84. package/dist/vue/composables/useStrandsConfig.d.ts.map +1 -1
  85. package/dist/vue/ui/UiCard.vue.d.ts.map +1 -1
  86. package/dist/vue/ui/UiModal.vue.d.ts +41 -0
  87. package/dist/vue/ui/UiModal.vue.d.ts.map +1 -0
  88. package/package.json +3 -1
  89. package/dist/useStrandsAuth-DE3JScoq.cjs +0 -2
  90. package/dist/useStrandsAuth-DE3JScoq.cjs.map +0 -1
  91. package/dist/useStrandsAuth-DVIEH9Nm.js +0 -248
  92. package/dist/useStrandsAuth-DVIEH9Nm.js.map +0 -1
  93. package/dist/useStrandsConfig-BIACvByo.cjs +0 -2
  94. package/dist/useStrandsConfig-BIACvByo.cjs.map +0 -1
  95. package/dist/useStrandsConfig-DK37s9ZC.js +0 -120
  96. package/dist/useStrandsConfig-DK37s9ZC.js.map +0 -1
@@ -0,0 +1,154 @@
1
+ import { ref, inject, computed, provide } from "vue";
2
+ const STRANDS_AUTH_DEFAULTS = {
3
+ baseUrl: "https://your-api.example.com",
4
+ accentColor: "#EA00A8",
5
+ redirectUrl: "/",
6
+ onSignInUrl: "/dashboard",
7
+ onSignOutUrl: "/",
8
+ autoRefresh: true,
9
+ refreshInterval: 4,
10
+ protectedRoutes: [],
11
+ guestOnlyRoutes: ["/auth", "/login", "/register"],
12
+ devMode: false,
13
+ styles: true,
14
+ endpoints: {}
15
+ };
16
+ const DEFAULT_ENDPOINTS = {
17
+ signIn: "/api/v1/auth/sign-in",
18
+ signUp: "/api/v1/auth/sign-up",
19
+ signOut: "/api/v1/auth/sign-out",
20
+ refresh: "/api/v1/auth/refresh",
21
+ passwordReset: "/api/v1/auth/password-reset",
22
+ passwordResetConfirm: "/api/v1/auth/password-reset/confirm",
23
+ profile: "/api/v1/user/profile",
24
+ verifyEmail: "/api/v1/auth/verify-email",
25
+ oauthProviders: "/api/v1/oauth/providers",
26
+ oauthProvider: "/api/v1/oauth/providers/{provider_id}",
27
+ changeEmail: "/api/v1/user/change-email",
28
+ avatar: "/api/v1/user/avatar",
29
+ // MFA endpoints
30
+ mfaDevices: "/api/v1/mfa/devices",
31
+ mfaTotpSetup: "/api/v1/mfa/totp/setup",
32
+ mfaTotpVerify: "/api/v1/mfa/totp/verify",
33
+ mfaEmailSetup: "/api/v1/mfa/email/setup",
34
+ mfaEmailSend: "/api/v1/mfa/email/send",
35
+ mfaEmailVerify: "/api/v1/mfa/email/verify",
36
+ mfaDeviceDisable: "/api/v1/mfa/device/disable",
37
+ mfaBackupCodes: "/api/v1/mfa/backup-codes/regenerate",
38
+ // Hardware key endpoints
39
+ mfaHardwareStartRegistration: "/api/v1/mfa/hardware/start-registration",
40
+ mfaHardwareCompleteRegistration: "/api/v1/mfa/hardware/complete-registration",
41
+ // MFA sign-in specific endpoints
42
+ mfaSigninSendEmail: "/api/v1/auth/mfa/email/send",
43
+ mfaSigninVerify: "/api/v1/auth/mfa/verify"
44
+ };
45
+ const STRANDS_CONFIG_KEY = Symbol("strands-config");
46
+ const globalConfig = ref(null);
47
+ function provideStrandsConfig(config) {
48
+ globalConfig.value = config;
49
+ try {
50
+ provide(STRANDS_CONFIG_KEY, config);
51
+ } catch (error) {
52
+ console.warn("[Strands Auth] Could not provide config via Vue provide/inject. Config available via global state only.", error);
53
+ }
54
+ }
55
+ function useStrandsConfig(fallbackConfig) {
56
+ const injectedConfig = inject(STRANDS_CONFIG_KEY, null);
57
+ let nuxtConfig = null;
58
+ try {
59
+ if (typeof window !== "undefined") {
60
+ if (window.__STRANDS_CONFIG__) {
61
+ nuxtConfig = window.__STRANDS_CONFIG__;
62
+ } else if (window.__NUXT__) {
63
+ const nuxtData = window.__NUXT__;
64
+ nuxtConfig = nuxtData?.config?.public?.strandsAuth || nuxtData?.public?.strandsAuth || nuxtData?.strandsAuth;
65
+ }
66
+ }
67
+ } catch (error) {
68
+ console.error("[Strands Auth] Error accessing runtime configuration:", error);
69
+ }
70
+ const activeConfig = computed(() => {
71
+ const config = {
72
+ ...STRANDS_AUTH_DEFAULTS,
73
+ ...fallbackConfig || {},
74
+ ...injectedConfig || {},
75
+ ...globalConfig.value || {},
76
+ ...nuxtConfig || {}
77
+ };
78
+ if (config.baseUrl === STRANDS_AUTH_DEFAULTS.baseUrl && typeof window === "undefined") {
79
+ console.warn("[Strands Auth] No baseUrl configured for SSR. Please provide a baseUrl in your strandsAuth configuration.");
80
+ }
81
+ return config;
82
+ });
83
+ const endpoints = computed(() => {
84
+ const config = activeConfig.value;
85
+ const customEndpoints = config.endpoints || {};
86
+ return {
87
+ signIn: customEndpoints.signIn || DEFAULT_ENDPOINTS.signIn,
88
+ signUp: customEndpoints.signUp || DEFAULT_ENDPOINTS.signUp,
89
+ signOut: customEndpoints.signOut || DEFAULT_ENDPOINTS.signOut,
90
+ refresh: customEndpoints.refresh || DEFAULT_ENDPOINTS.refresh,
91
+ passwordReset: customEndpoints.passwordReset || DEFAULT_ENDPOINTS.passwordReset,
92
+ passwordResetConfirm: customEndpoints.passwordResetConfirm || DEFAULT_ENDPOINTS.passwordResetConfirm,
93
+ profile: customEndpoints.profile || DEFAULT_ENDPOINTS.profile,
94
+ verifyEmail: customEndpoints.verifyEmail || DEFAULT_ENDPOINTS.verifyEmail,
95
+ oauthProviders: customEndpoints.oauthProviders || DEFAULT_ENDPOINTS.oauthProviders,
96
+ oauthProvider: customEndpoints.oauthProvider || DEFAULT_ENDPOINTS.oauthProvider,
97
+ changeEmail: customEndpoints.changeEmail || DEFAULT_ENDPOINTS.changeEmail,
98
+ avatar: customEndpoints.avatar || DEFAULT_ENDPOINTS.avatar,
99
+ // MFA endpoints
100
+ mfaDevices: customEndpoints.mfaDevices || DEFAULT_ENDPOINTS.mfaDevices,
101
+ mfaTotpSetup: customEndpoints.mfaTotpSetup || DEFAULT_ENDPOINTS.mfaTotpSetup,
102
+ mfaTotpVerify: customEndpoints.mfaTotpVerify || DEFAULT_ENDPOINTS.mfaTotpVerify,
103
+ mfaEmailSetup: customEndpoints.mfaEmailSetup || DEFAULT_ENDPOINTS.mfaEmailSetup,
104
+ mfaEmailSend: customEndpoints.mfaEmailSend || DEFAULT_ENDPOINTS.mfaEmailSend,
105
+ mfaEmailVerify: customEndpoints.mfaEmailVerify || DEFAULT_ENDPOINTS.mfaEmailVerify,
106
+ mfaDeviceDisable: customEndpoints.mfaDeviceDisable || DEFAULT_ENDPOINTS.mfaDeviceDisable,
107
+ mfaBackupCodes: customEndpoints.mfaBackupCodes || DEFAULT_ENDPOINTS.mfaBackupCodes,
108
+ // Hardware key endpoints
109
+ mfaHardwareStartRegistration: customEndpoints.mfaHardwareStartRegistration || DEFAULT_ENDPOINTS.mfaHardwareStartRegistration,
110
+ mfaHardwareCompleteRegistration: customEndpoints.mfaHardwareCompleteRegistration || DEFAULT_ENDPOINTS.mfaHardwareCompleteRegistration,
111
+ // MFA sign-in specific endpoints
112
+ mfaSigninSendEmail: customEndpoints.mfaSigninSendEmail || DEFAULT_ENDPOINTS.mfaSigninSendEmail,
113
+ mfaSigninVerify: customEndpoints.mfaSigninVerify || DEFAULT_ENDPOINTS.mfaSigninVerify
114
+ };
115
+ });
116
+ const getUrl = (endpoint) => {
117
+ const config = activeConfig.value;
118
+ if (!config.baseUrl) {
119
+ throw new Error("Base URL is required in configuration");
120
+ }
121
+ let endpointPath;
122
+ if (typeof endpoint === "string" && endpoint in endpoints.value) {
123
+ endpointPath = endpoints.value[endpoint];
124
+ } else if (typeof endpoint === "string") {
125
+ endpointPath = endpoint;
126
+ } else {
127
+ endpointPath = endpoints.value[endpoint];
128
+ }
129
+ const baseUrl = config.baseUrl.replace(/\/$/, "");
130
+ const path = endpointPath.startsWith("/") ? endpointPath : `/${endpointPath}`;
131
+ console.debug(`[Strands Auth] Constructing URL for endpoint "${endpoint}": ${baseUrl}${path}`);
132
+ return `${baseUrl}${path}`;
133
+ };
134
+ const getSupportEmail = () => {
135
+ const config = activeConfig.value;
136
+ return config.supportEmail || null;
137
+ };
138
+ return {
139
+ config: activeConfig,
140
+ endpoints,
141
+ getUrl,
142
+ getSupportEmail
143
+ };
144
+ }
145
+ function setStrandsConfig(config) {
146
+ globalConfig.value = config;
147
+ }
148
+ export {
149
+ STRANDS_AUTH_DEFAULTS as S,
150
+ provideStrandsConfig as p,
151
+ setStrandsConfig as s,
152
+ useStrandsConfig as u
153
+ };
154
+ //# sourceMappingURL=useStrandsConfig-Cbpo8XZg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStrandsConfig-Cbpo8XZg.js","sources":["../../../apps/accounts-ui/src/shared/defaults.ts","../../../apps/accounts-ui/src/vue/composables/useStrandsConfig.ts"],"sourcesContent":["import type { StrandsAuthConfig } from '../types'\n\nexport const STRANDS_AUTH_DEFAULTS: Required<Omit<StrandsAuthConfig, 'clientId' | 'supportEmail'>> = {\n baseUrl: 'https://your-api.example.com',\n accentColor: '#EA00A8',\n redirectUrl: '/',\n onSignInUrl: '/dashboard',\n onSignOutUrl: '/',\n autoRefresh: true,\n refreshInterval: 4,\n protectedRoutes: [],\n guestOnlyRoutes: ['/auth', '/login', '/register'],\n devMode: false,\n styles: true,\n endpoints: {}\n}","import { ref, computed, inject, provide } from 'vue'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\n\n// Re-export types for components\nexport type { StrandsAuthConfig, StrandsAuthEndpoints } from '../../types'\nimport type { StrandsAuthConfig, StrandsAuthEndpoints } from '../../types'\n\nconst DEFAULT_ENDPOINTS: StrandsAuthEndpoints = {\n signIn: '/api/v1/auth/sign-in',\n signUp: '/api/v1/auth/sign-up',\n signOut: '/api/v1/auth/sign-out',\n refresh: '/api/v1/auth/refresh',\n passwordReset: '/api/v1/auth/password-reset',\n passwordResetConfirm: '/api/v1/auth/password-reset/confirm',\n profile: '/api/v1/user/profile',\n verifyEmail: '/api/v1/auth/verify-email',\n oauthProviders: '/api/v1/oauth/providers',\n oauthProvider: '/api/v1/oauth/providers/{provider_id}',\n changeEmail: '/api/v1/user/change-email',\n avatar: '/api/v1/user/avatar',\n // MFA endpoints\n mfaDevices: '/api/v1/mfa/devices',\n mfaTotpSetup: '/api/v1/mfa/totp/setup',\n mfaTotpVerify: '/api/v1/mfa/totp/verify',\n mfaEmailSetup: '/api/v1/mfa/email/setup',\n mfaEmailSend: '/api/v1/mfa/email/send',\n mfaEmailVerify: '/api/v1/mfa/email/verify',\n mfaDeviceDisable: '/api/v1/mfa/device/disable',\n mfaBackupCodes: '/api/v1/mfa/backup-codes/regenerate',\n // Hardware key endpoints\n mfaHardwareStartRegistration: '/api/v1/mfa/hardware/start-registration',\n mfaHardwareCompleteRegistration: '/api/v1/mfa/hardware/complete-registration',\n // MFA sign-in specific endpoints\n mfaSigninSendEmail: '/api/v1/auth/mfa/email/send',\n mfaSigninVerify: '/api/v1/auth/mfa/verify'\n}\n\nconst STRANDS_CONFIG_KEY = Symbol('strands-config')\n\n// Global configuration state\nconst globalConfig = ref<StrandsAuthConfig | null>(null)\n\nexport function provideStrandsConfig(config: StrandsAuthConfig) {\n globalConfig.value = config\n \n try {\n provide(STRANDS_CONFIG_KEY, config)\n } catch (error) {\n console.warn('[Strands Auth] Could not provide config via Vue provide/inject. Config available via global state only.', error)\n }\n}\n\nexport function useStrandsConfig(fallbackConfig?: Partial<StrandsAuthConfig>) {\n // Try to get config from provide/inject first\n const injectedConfig = inject<StrandsAuthConfig | null>(STRANDS_CONFIG_KEY, null)\n \n // Try to get Nuxt runtime config as additional fallback\n let nuxtConfig = null\n try {\n if (typeof window !== 'undefined') {\n // Check window global set by plugin\n if ((window as any).__STRANDS_CONFIG__) {\n nuxtConfig = (window as any).__STRANDS_CONFIG__\n }\n // Fallback to __NUXT__ hydration data\n else if ((window as any).__NUXT__) {\n const nuxtData = (window as any).__NUXT__\n nuxtConfig = nuxtData?.config?.public?.strandsAuth ||\n nuxtData?.public?.strandsAuth ||\n nuxtData?.strandsAuth\n }\n }\n } catch (error) {\n console.error('[Strands Auth] Error accessing runtime configuration:', error)\n }\n \n // Merge configuration sources in priority order\n const activeConfig = computed(() => {\n // Start with defaults, then layer on user configurations\n const config = {\n ...STRANDS_AUTH_DEFAULTS,\n ...(fallbackConfig || {}),\n ...(injectedConfig || {}),\n ...(globalConfig.value || {}),\n ...(nuxtConfig || {})\n }\n \n // Only warn if we're using the exact default URL (indicating no config was provided)\n if (config.baseUrl === STRANDS_AUTH_DEFAULTS.baseUrl && typeof window === 'undefined') {\n console.warn('[Strands Auth] No baseUrl configured for SSR. Please provide a baseUrl in your strandsAuth configuration.')\n }\n \n return config\n })\n\n const endpoints = computed<StrandsAuthEndpoints>(() => {\n const config = activeConfig.value\n const customEndpoints = config.endpoints || {}\n \n return {\n signIn: customEndpoints.signIn || DEFAULT_ENDPOINTS.signIn,\n signUp: customEndpoints.signUp || DEFAULT_ENDPOINTS.signUp,\n signOut: customEndpoints.signOut || DEFAULT_ENDPOINTS.signOut,\n refresh: customEndpoints.refresh || DEFAULT_ENDPOINTS.refresh,\n passwordReset: customEndpoints.passwordReset || DEFAULT_ENDPOINTS.passwordReset,\n passwordResetConfirm: customEndpoints.passwordResetConfirm || DEFAULT_ENDPOINTS.passwordResetConfirm,\n profile: customEndpoints.profile || DEFAULT_ENDPOINTS.profile,\n verifyEmail: customEndpoints.verifyEmail || DEFAULT_ENDPOINTS.verifyEmail,\n oauthProviders: customEndpoints.oauthProviders || DEFAULT_ENDPOINTS.oauthProviders,\n oauthProvider: customEndpoints.oauthProvider || DEFAULT_ENDPOINTS.oauthProvider,\n changeEmail: customEndpoints.changeEmail || DEFAULT_ENDPOINTS.changeEmail,\n avatar: customEndpoints.avatar || DEFAULT_ENDPOINTS.avatar,\n // MFA endpoints\n mfaDevices: customEndpoints.mfaDevices || DEFAULT_ENDPOINTS.mfaDevices,\n mfaTotpSetup: customEndpoints.mfaTotpSetup || DEFAULT_ENDPOINTS.mfaTotpSetup,\n mfaTotpVerify: customEndpoints.mfaTotpVerify || DEFAULT_ENDPOINTS.mfaTotpVerify,\n mfaEmailSetup: customEndpoints.mfaEmailSetup || DEFAULT_ENDPOINTS.mfaEmailSetup,\n mfaEmailSend: customEndpoints.mfaEmailSend || DEFAULT_ENDPOINTS.mfaEmailSend,\n mfaEmailVerify: customEndpoints.mfaEmailVerify || DEFAULT_ENDPOINTS.mfaEmailVerify,\n mfaDeviceDisable: customEndpoints.mfaDeviceDisable || DEFAULT_ENDPOINTS.mfaDeviceDisable,\n mfaBackupCodes: customEndpoints.mfaBackupCodes || DEFAULT_ENDPOINTS.mfaBackupCodes,\n // Hardware key endpoints\n mfaHardwareStartRegistration: customEndpoints.mfaHardwareStartRegistration || DEFAULT_ENDPOINTS.mfaHardwareStartRegistration,\n mfaHardwareCompleteRegistration: customEndpoints.mfaHardwareCompleteRegistration || DEFAULT_ENDPOINTS.mfaHardwareCompleteRegistration,\n // MFA sign-in specific endpoints\n mfaSigninSendEmail: customEndpoints.mfaSigninSendEmail || DEFAULT_ENDPOINTS.mfaSigninSendEmail,\n mfaSigninVerify: customEndpoints.mfaSigninVerify || DEFAULT_ENDPOINTS.mfaSigninVerify\n }\n })\n\n const getUrl = (endpoint: keyof StrandsAuthEndpoints | string) => {\n const config = activeConfig.value\n if (!config.baseUrl) {\n throw new Error('Base URL is required in configuration')\n }\n \n // If endpoint is a string key, try to find it in endpoints first\n let endpointPath: string\n if (typeof endpoint === 'string' && endpoint in endpoints.value) {\n endpointPath = endpoints.value[endpoint as keyof StrandsAuthEndpoints]\n } else if (typeof endpoint === 'string') {\n // If it's a string but not a key, treat it as a literal path\n endpointPath = endpoint\n } else {\n // It's a keyof StrandsAuthEndpoints\n endpointPath = endpoints.value[endpoint]\n }\n \n // Ensure proper URL construction with slash separation\n const baseUrl = config.baseUrl.replace(/\\/$/, '')\n const path = endpointPath.startsWith('/') ? endpointPath : `/${endpointPath}`\n console.debug(`[Strands Auth] Constructing URL for endpoint \"${endpoint}\": ${baseUrl}${path}`)\n return `${baseUrl}${path}`\n }\n\n const getSupportEmail = () => {\n const config = activeConfig.value\n return config.supportEmail || null\n }\n\n return {\n config: activeConfig,\n endpoints,\n getUrl,\n getSupportEmail\n }\n}\n\n// Convenience function to set global config\nexport function setStrandsConfig(config: StrandsAuthConfig) {\n globalConfig.value = config\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ const vue = require("vue");
3
+ const STRANDS_AUTH_DEFAULTS = {
4
+ baseUrl: "https://your-api.example.com",
5
+ accentColor: "#EA00A8",
6
+ redirectUrl: "/",
7
+ onSignInUrl: "/dashboard",
8
+ onSignOutUrl: "/",
9
+ autoRefresh: true,
10
+ refreshInterval: 4,
11
+ protectedRoutes: [],
12
+ guestOnlyRoutes: ["/auth", "/login", "/register"],
13
+ devMode: false,
14
+ styles: true,
15
+ endpoints: {}
16
+ };
17
+ const DEFAULT_ENDPOINTS = {
18
+ signIn: "/api/v1/auth/sign-in",
19
+ signUp: "/api/v1/auth/sign-up",
20
+ signOut: "/api/v1/auth/sign-out",
21
+ refresh: "/api/v1/auth/refresh",
22
+ passwordReset: "/api/v1/auth/password-reset",
23
+ passwordResetConfirm: "/api/v1/auth/password-reset/confirm",
24
+ profile: "/api/v1/user/profile",
25
+ verifyEmail: "/api/v1/auth/verify-email",
26
+ oauthProviders: "/api/v1/oauth/providers",
27
+ oauthProvider: "/api/v1/oauth/providers/{provider_id}",
28
+ changeEmail: "/api/v1/user/change-email",
29
+ avatar: "/api/v1/user/avatar",
30
+ // MFA endpoints
31
+ mfaDevices: "/api/v1/mfa/devices",
32
+ mfaTotpSetup: "/api/v1/mfa/totp/setup",
33
+ mfaTotpVerify: "/api/v1/mfa/totp/verify",
34
+ mfaEmailSetup: "/api/v1/mfa/email/setup",
35
+ mfaEmailSend: "/api/v1/mfa/email/send",
36
+ mfaEmailVerify: "/api/v1/mfa/email/verify",
37
+ mfaDeviceDisable: "/api/v1/mfa/device/disable",
38
+ mfaBackupCodes: "/api/v1/mfa/backup-codes/regenerate",
39
+ // Hardware key endpoints
40
+ mfaHardwareStartRegistration: "/api/v1/mfa/hardware/start-registration",
41
+ mfaHardwareCompleteRegistration: "/api/v1/mfa/hardware/complete-registration",
42
+ // MFA sign-in specific endpoints
43
+ mfaSigninSendEmail: "/api/v1/auth/mfa/email/send",
44
+ mfaSigninVerify: "/api/v1/auth/mfa/verify"
45
+ };
46
+ const STRANDS_CONFIG_KEY = Symbol("strands-config");
47
+ const globalConfig = vue.ref(null);
48
+ function provideStrandsConfig(config) {
49
+ globalConfig.value = config;
50
+ try {
51
+ vue.provide(STRANDS_CONFIG_KEY, config);
52
+ } catch (error) {
53
+ console.warn("[Strands Auth] Could not provide config via Vue provide/inject. Config available via global state only.", error);
54
+ }
55
+ }
56
+ function useStrandsConfig(fallbackConfig) {
57
+ const injectedConfig = vue.inject(STRANDS_CONFIG_KEY, null);
58
+ let nuxtConfig = null;
59
+ try {
60
+ if (typeof window !== "undefined") {
61
+ if (window.__STRANDS_CONFIG__) {
62
+ nuxtConfig = window.__STRANDS_CONFIG__;
63
+ } else if (window.__NUXT__) {
64
+ const nuxtData = window.__NUXT__;
65
+ nuxtConfig = nuxtData?.config?.public?.strandsAuth || nuxtData?.public?.strandsAuth || nuxtData?.strandsAuth;
66
+ }
67
+ }
68
+ } catch (error) {
69
+ console.error("[Strands Auth] Error accessing runtime configuration:", error);
70
+ }
71
+ const activeConfig = vue.computed(() => {
72
+ const config = {
73
+ ...STRANDS_AUTH_DEFAULTS,
74
+ ...fallbackConfig || {},
75
+ ...injectedConfig || {},
76
+ ...globalConfig.value || {},
77
+ ...nuxtConfig || {}
78
+ };
79
+ if (config.baseUrl === STRANDS_AUTH_DEFAULTS.baseUrl && typeof window === "undefined") {
80
+ console.warn("[Strands Auth] No baseUrl configured for SSR. Please provide a baseUrl in your strandsAuth configuration.");
81
+ }
82
+ return config;
83
+ });
84
+ const endpoints = vue.computed(() => {
85
+ const config = activeConfig.value;
86
+ const customEndpoints = config.endpoints || {};
87
+ return {
88
+ signIn: customEndpoints.signIn || DEFAULT_ENDPOINTS.signIn,
89
+ signUp: customEndpoints.signUp || DEFAULT_ENDPOINTS.signUp,
90
+ signOut: customEndpoints.signOut || DEFAULT_ENDPOINTS.signOut,
91
+ refresh: customEndpoints.refresh || DEFAULT_ENDPOINTS.refresh,
92
+ passwordReset: customEndpoints.passwordReset || DEFAULT_ENDPOINTS.passwordReset,
93
+ passwordResetConfirm: customEndpoints.passwordResetConfirm || DEFAULT_ENDPOINTS.passwordResetConfirm,
94
+ profile: customEndpoints.profile || DEFAULT_ENDPOINTS.profile,
95
+ verifyEmail: customEndpoints.verifyEmail || DEFAULT_ENDPOINTS.verifyEmail,
96
+ oauthProviders: customEndpoints.oauthProviders || DEFAULT_ENDPOINTS.oauthProviders,
97
+ oauthProvider: customEndpoints.oauthProvider || DEFAULT_ENDPOINTS.oauthProvider,
98
+ changeEmail: customEndpoints.changeEmail || DEFAULT_ENDPOINTS.changeEmail,
99
+ avatar: customEndpoints.avatar || DEFAULT_ENDPOINTS.avatar,
100
+ // MFA endpoints
101
+ mfaDevices: customEndpoints.mfaDevices || DEFAULT_ENDPOINTS.mfaDevices,
102
+ mfaTotpSetup: customEndpoints.mfaTotpSetup || DEFAULT_ENDPOINTS.mfaTotpSetup,
103
+ mfaTotpVerify: customEndpoints.mfaTotpVerify || DEFAULT_ENDPOINTS.mfaTotpVerify,
104
+ mfaEmailSetup: customEndpoints.mfaEmailSetup || DEFAULT_ENDPOINTS.mfaEmailSetup,
105
+ mfaEmailSend: customEndpoints.mfaEmailSend || DEFAULT_ENDPOINTS.mfaEmailSend,
106
+ mfaEmailVerify: customEndpoints.mfaEmailVerify || DEFAULT_ENDPOINTS.mfaEmailVerify,
107
+ mfaDeviceDisable: customEndpoints.mfaDeviceDisable || DEFAULT_ENDPOINTS.mfaDeviceDisable,
108
+ mfaBackupCodes: customEndpoints.mfaBackupCodes || DEFAULT_ENDPOINTS.mfaBackupCodes,
109
+ // Hardware key endpoints
110
+ mfaHardwareStartRegistration: customEndpoints.mfaHardwareStartRegistration || DEFAULT_ENDPOINTS.mfaHardwareStartRegistration,
111
+ mfaHardwareCompleteRegistration: customEndpoints.mfaHardwareCompleteRegistration || DEFAULT_ENDPOINTS.mfaHardwareCompleteRegistration,
112
+ // MFA sign-in specific endpoints
113
+ mfaSigninSendEmail: customEndpoints.mfaSigninSendEmail || DEFAULT_ENDPOINTS.mfaSigninSendEmail,
114
+ mfaSigninVerify: customEndpoints.mfaSigninVerify || DEFAULT_ENDPOINTS.mfaSigninVerify
115
+ };
116
+ });
117
+ const getUrl = (endpoint) => {
118
+ const config = activeConfig.value;
119
+ if (!config.baseUrl) {
120
+ throw new Error("Base URL is required in configuration");
121
+ }
122
+ let endpointPath;
123
+ if (typeof endpoint === "string" && endpoint in endpoints.value) {
124
+ endpointPath = endpoints.value[endpoint];
125
+ } else if (typeof endpoint === "string") {
126
+ endpointPath = endpoint;
127
+ } else {
128
+ endpointPath = endpoints.value[endpoint];
129
+ }
130
+ const baseUrl = config.baseUrl.replace(/\/$/, "");
131
+ const path = endpointPath.startsWith("/") ? endpointPath : `/${endpointPath}`;
132
+ console.debug(`[Strands Auth] Constructing URL for endpoint "${endpoint}": ${baseUrl}${path}`);
133
+ return `${baseUrl}${path}`;
134
+ };
135
+ const getSupportEmail = () => {
136
+ const config = activeConfig.value;
137
+ return config.supportEmail || null;
138
+ };
139
+ return {
140
+ config: activeConfig,
141
+ endpoints,
142
+ getUrl,
143
+ getSupportEmail
144
+ };
145
+ }
146
+ function setStrandsConfig(config) {
147
+ globalConfig.value = config;
148
+ }
149
+ exports.STRANDS_AUTH_DEFAULTS = STRANDS_AUTH_DEFAULTS;
150
+ exports.provideStrandsConfig = provideStrandsConfig;
151
+ exports.setStrandsConfig = setStrandsConfig;
152
+ exports.useStrandsConfig = useStrandsConfig;
153
+ //# sourceMappingURL=useStrandsConfig-CtKyh8RT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStrandsConfig-CtKyh8RT.cjs","sources":["../../../apps/accounts-ui/src/shared/defaults.ts","../../../apps/accounts-ui/src/vue/composables/useStrandsConfig.ts"],"sourcesContent":["import type { StrandsAuthConfig } from '../types'\n\nexport const STRANDS_AUTH_DEFAULTS: Required<Omit<StrandsAuthConfig, 'clientId' | 'supportEmail'>> = {\n baseUrl: 'https://your-api.example.com',\n accentColor: '#EA00A8',\n redirectUrl: '/',\n onSignInUrl: '/dashboard',\n onSignOutUrl: '/',\n autoRefresh: true,\n refreshInterval: 4,\n protectedRoutes: [],\n guestOnlyRoutes: ['/auth', '/login', '/register'],\n devMode: false,\n styles: true,\n endpoints: {}\n}","import { ref, computed, inject, provide } from 'vue'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\n\n// Re-export types for components\nexport type { StrandsAuthConfig, StrandsAuthEndpoints } from '../../types'\nimport type { StrandsAuthConfig, StrandsAuthEndpoints } from '../../types'\n\nconst DEFAULT_ENDPOINTS: StrandsAuthEndpoints = {\n signIn: '/api/v1/auth/sign-in',\n signUp: '/api/v1/auth/sign-up',\n signOut: '/api/v1/auth/sign-out',\n refresh: '/api/v1/auth/refresh',\n passwordReset: '/api/v1/auth/password-reset',\n passwordResetConfirm: '/api/v1/auth/password-reset/confirm',\n profile: '/api/v1/user/profile',\n verifyEmail: '/api/v1/auth/verify-email',\n oauthProviders: '/api/v1/oauth/providers',\n oauthProvider: '/api/v1/oauth/providers/{provider_id}',\n changeEmail: '/api/v1/user/change-email',\n avatar: '/api/v1/user/avatar',\n // MFA endpoints\n mfaDevices: '/api/v1/mfa/devices',\n mfaTotpSetup: '/api/v1/mfa/totp/setup',\n mfaTotpVerify: '/api/v1/mfa/totp/verify',\n mfaEmailSetup: '/api/v1/mfa/email/setup',\n mfaEmailSend: '/api/v1/mfa/email/send',\n mfaEmailVerify: '/api/v1/mfa/email/verify',\n mfaDeviceDisable: '/api/v1/mfa/device/disable',\n mfaBackupCodes: '/api/v1/mfa/backup-codes/regenerate',\n // Hardware key endpoints\n mfaHardwareStartRegistration: '/api/v1/mfa/hardware/start-registration',\n mfaHardwareCompleteRegistration: '/api/v1/mfa/hardware/complete-registration',\n // MFA sign-in specific endpoints\n mfaSigninSendEmail: '/api/v1/auth/mfa/email/send',\n mfaSigninVerify: '/api/v1/auth/mfa/verify'\n}\n\nconst STRANDS_CONFIG_KEY = Symbol('strands-config')\n\n// Global configuration state\nconst globalConfig = ref<StrandsAuthConfig | null>(null)\n\nexport function provideStrandsConfig(config: StrandsAuthConfig) {\n globalConfig.value = config\n \n try {\n provide(STRANDS_CONFIG_KEY, config)\n } catch (error) {\n console.warn('[Strands Auth] Could not provide config via Vue provide/inject. Config available via global state only.', error)\n }\n}\n\nexport function useStrandsConfig(fallbackConfig?: Partial<StrandsAuthConfig>) {\n // Try to get config from provide/inject first\n const injectedConfig = inject<StrandsAuthConfig | null>(STRANDS_CONFIG_KEY, null)\n \n // Try to get Nuxt runtime config as additional fallback\n let nuxtConfig = null\n try {\n if (typeof window !== 'undefined') {\n // Check window global set by plugin\n if ((window as any).__STRANDS_CONFIG__) {\n nuxtConfig = (window as any).__STRANDS_CONFIG__\n }\n // Fallback to __NUXT__ hydration data\n else if ((window as any).__NUXT__) {\n const nuxtData = (window as any).__NUXT__\n nuxtConfig = nuxtData?.config?.public?.strandsAuth ||\n nuxtData?.public?.strandsAuth ||\n nuxtData?.strandsAuth\n }\n }\n } catch (error) {\n console.error('[Strands Auth] Error accessing runtime configuration:', error)\n }\n \n // Merge configuration sources in priority order\n const activeConfig = computed(() => {\n // Start with defaults, then layer on user configurations\n const config = {\n ...STRANDS_AUTH_DEFAULTS,\n ...(fallbackConfig || {}),\n ...(injectedConfig || {}),\n ...(globalConfig.value || {}),\n ...(nuxtConfig || {})\n }\n \n // Only warn if we're using the exact default URL (indicating no config was provided)\n if (config.baseUrl === STRANDS_AUTH_DEFAULTS.baseUrl && typeof window === 'undefined') {\n console.warn('[Strands Auth] No baseUrl configured for SSR. Please provide a baseUrl in your strandsAuth configuration.')\n }\n \n return config\n })\n\n const endpoints = computed<StrandsAuthEndpoints>(() => {\n const config = activeConfig.value\n const customEndpoints = config.endpoints || {}\n \n return {\n signIn: customEndpoints.signIn || DEFAULT_ENDPOINTS.signIn,\n signUp: customEndpoints.signUp || DEFAULT_ENDPOINTS.signUp,\n signOut: customEndpoints.signOut || DEFAULT_ENDPOINTS.signOut,\n refresh: customEndpoints.refresh || DEFAULT_ENDPOINTS.refresh,\n passwordReset: customEndpoints.passwordReset || DEFAULT_ENDPOINTS.passwordReset,\n passwordResetConfirm: customEndpoints.passwordResetConfirm || DEFAULT_ENDPOINTS.passwordResetConfirm,\n profile: customEndpoints.profile || DEFAULT_ENDPOINTS.profile,\n verifyEmail: customEndpoints.verifyEmail || DEFAULT_ENDPOINTS.verifyEmail,\n oauthProviders: customEndpoints.oauthProviders || DEFAULT_ENDPOINTS.oauthProviders,\n oauthProvider: customEndpoints.oauthProvider || DEFAULT_ENDPOINTS.oauthProvider,\n changeEmail: customEndpoints.changeEmail || DEFAULT_ENDPOINTS.changeEmail,\n avatar: customEndpoints.avatar || DEFAULT_ENDPOINTS.avatar,\n // MFA endpoints\n mfaDevices: customEndpoints.mfaDevices || DEFAULT_ENDPOINTS.mfaDevices,\n mfaTotpSetup: customEndpoints.mfaTotpSetup || DEFAULT_ENDPOINTS.mfaTotpSetup,\n mfaTotpVerify: customEndpoints.mfaTotpVerify || DEFAULT_ENDPOINTS.mfaTotpVerify,\n mfaEmailSetup: customEndpoints.mfaEmailSetup || DEFAULT_ENDPOINTS.mfaEmailSetup,\n mfaEmailSend: customEndpoints.mfaEmailSend || DEFAULT_ENDPOINTS.mfaEmailSend,\n mfaEmailVerify: customEndpoints.mfaEmailVerify || DEFAULT_ENDPOINTS.mfaEmailVerify,\n mfaDeviceDisable: customEndpoints.mfaDeviceDisable || DEFAULT_ENDPOINTS.mfaDeviceDisable,\n mfaBackupCodes: customEndpoints.mfaBackupCodes || DEFAULT_ENDPOINTS.mfaBackupCodes,\n // Hardware key endpoints\n mfaHardwareStartRegistration: customEndpoints.mfaHardwareStartRegistration || DEFAULT_ENDPOINTS.mfaHardwareStartRegistration,\n mfaHardwareCompleteRegistration: customEndpoints.mfaHardwareCompleteRegistration || DEFAULT_ENDPOINTS.mfaHardwareCompleteRegistration,\n // MFA sign-in specific endpoints\n mfaSigninSendEmail: customEndpoints.mfaSigninSendEmail || DEFAULT_ENDPOINTS.mfaSigninSendEmail,\n mfaSigninVerify: customEndpoints.mfaSigninVerify || DEFAULT_ENDPOINTS.mfaSigninVerify\n }\n })\n\n const getUrl = (endpoint: keyof StrandsAuthEndpoints | string) => {\n const config = activeConfig.value\n if (!config.baseUrl) {\n throw new Error('Base URL is required in configuration')\n }\n \n // If endpoint is a string key, try to find it in endpoints first\n let endpointPath: string\n if (typeof endpoint === 'string' && endpoint in endpoints.value) {\n endpointPath = endpoints.value[endpoint as keyof StrandsAuthEndpoints]\n } else if (typeof endpoint === 'string') {\n // If it's a string but not a key, treat it as a literal path\n endpointPath = endpoint\n } else {\n // It's a keyof StrandsAuthEndpoints\n endpointPath = endpoints.value[endpoint]\n }\n \n // Ensure proper URL construction with slash separation\n const baseUrl = config.baseUrl.replace(/\\/$/, '')\n const path = endpointPath.startsWith('/') ? endpointPath : `/${endpointPath}`\n console.debug(`[Strands Auth] Constructing URL for endpoint \"${endpoint}\": ${baseUrl}${path}`)\n return `${baseUrl}${path}`\n }\n\n const getSupportEmail = () => {\n const config = activeConfig.value\n return config.supportEmail || null\n }\n\n return {\n config: activeConfig,\n endpoints,\n getUrl,\n getSupportEmail\n }\n}\n\n// Convenience function to set global config\nexport function setStrandsConfig(config: StrandsAuthConfig) {\n globalConfig.value = config\n}\n"],"names":["ref","provide","inject","computed"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SignedIn.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/SignedIn.vue"],"names":[],"mappings":"AAmCA;AA+EA,UAAU,KAAK;IACb,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAsCD,iBAAS,cAAc;WAwFT,OAAO,IAA6B;;;;;;;;;;;;;;;;YAZrB,GAAG;;;YACF,GAAG;yBACJ,GAAG;;;;EAe/B;AAgBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;kBArJJ,OAAO;6EA6JtB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"SignedIn.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/SignedIn.vue"],"names":[],"mappings":"AAmCA;AAgFA,UAAU,KAAK;IACb,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAuCD,iBAAS,cAAc;WAwFT,OAAO,IAA6B;;;;;;;;;;;;;;;;YAZrB,GAAG;;;YACF,GAAG;yBACJ,GAAG;;;;EAe/B;AAgBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;kBAtJJ,OAAO;6EA8JtB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsAuth.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsAuth.vue"],"names":[],"mappings":"AAgKA;AAgyBA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAK1F,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,CAAA;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;;;;;;;;;;;;;;iBAHe,MAAM;UADb,QAAQ,GAAG,QAAQ,GAAG,gBAAgB;;AAk1B/C,wBASG"}
1
+ {"version":3,"file":"StrandsAuth.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsAuth.vue"],"names":[],"mappings":"AAyKA;AAi1BA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAK1F,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,CAAA;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;;;;;;;;;;;;;;iBAHe,MAAM;UADb,QAAQ,GAAG,QAAQ,GAAG,gBAAgB;;AA25B/C,wBASG"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsBackupCodesModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsBackupCodesModal.vue"],"names":[],"mappings":"AAqJA;AA0RA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC1B;;;;;;AAscD,wBAOG"}
1
+ {"version":3,"file":"StrandsBackupCodesModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsBackupCodesModal.vue"],"names":[],"mappings":"AA0IA;AAkQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC1B;;;;;;AA2cD,wBAQG"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsConfirmModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsConfirmModal.vue"],"names":[],"mappings":"AAuCA;AAsGA,KAAK,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAA;AAElE,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;;;;;;;;aADW,aAAa;iBAFT,MAAM;gBACP,MAAM;;AA2JrB,wBAQG"}
1
+ {"version":3,"file":"StrandsConfirmModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsConfirmModal.vue"],"names":[],"mappings":"AA0BA;AA4EA,KAAK,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAA;AAElE,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;;;;;;;;aADW,aAAa;iBAFT,MAAM;gBACP,MAAM;;AAuJrB,wBASG"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsEmailMfaSetupModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsEmailMfaSetupModal.vue"],"names":[],"mappings":"AAkLA;AAiVA,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;CACd;;;;;;;;AAwhBD,wBAOG"}
1
+ {"version":3,"file":"StrandsEmailMfaSetupModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsEmailMfaSetupModal.vue"],"names":[],"mappings":"AAuKA;AA6TA,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;CACd;;;;;;;;AAiiBD,wBAQG"}
@@ -0,0 +1,12 @@
1
+ interface Props {
2
+ show: boolean;
3
+ }
4
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
5
+ success: () => any;
6
+ close: () => any;
7
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
8
+ onSuccess?: (() => any) | undefined;
9
+ onClose?: (() => any) | undefined;
10
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
+ export default _default;
12
+ //# sourceMappingURL=StrandsHardwareKeySetupModal.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StrandsHardwareKeySetupModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsHardwareKeySetupModal.vue"],"names":[],"mappings":"AAqOA;AA+fA,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;CACd;;;;;;;;AA4xBD,wBAQG"}
@@ -1,11 +1,16 @@
1
- declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
1
+ interface Props {
2
+ show?: boolean;
3
+ }
4
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
2
5
  success: () => any;
3
6
  error: (error: string) => any;
4
- back: () => any;
5
- }, string, import('vue').PublicProps, Readonly<{}> & Readonly<{
7
+ close: () => any;
8
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
6
9
  onSuccess?: (() => any) | undefined;
7
10
  onError?: ((error: string) => any) | undefined;
8
- onBack?: (() => any) | undefined;
9
- }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
11
+ onClose?: (() => any) | undefined;
12
+ }>, {
13
+ show: boolean;
14
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
10
15
  export default _default;
11
16
  //# sourceMappingURL=StrandsMFASetup.vue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsMFASetup.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsMFASetup.vue"],"names":[],"mappings":"AA2DA;;;;;;;;;;AA4LA,wBAOG"}
1
+ {"version":3,"file":"StrandsMFASetup.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsMFASetup.vue"],"names":[],"mappings":"AA8HA;AAsNA,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;;;;;;;;;;UADQ,OAAO;;AAibhB,wBAQG"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsMfaModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsMfaModal.vue"],"names":[],"mappings":"AA4OA;AA4XA,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;CACd;;;;;;;;AAspBD,wBAOG"}
1
+ {"version":3,"file":"StrandsMfaModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsMfaModal.vue"],"names":[],"mappings":"AA6NA;AA2XA,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;CACd;;;;;;;;AAisBD,wBAOG"}
@@ -0,0 +1,17 @@
1
+ import { MfaDevice } from '../../types';
2
+ interface Props {
3
+ show: boolean;
4
+ availableMfaMethods?: MfaDevice[];
5
+ sessionId?: string | null;
6
+ }
7
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
8
+ success: () => any;
9
+ error: (error: string) => any;
10
+ close: () => any;
11
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
12
+ onSuccess?: (() => any) | undefined;
13
+ onError?: ((error: string) => any) | undefined;
14
+ onClose?: (() => any) | undefined;
15
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
16
+ export default _default;
17
+ //# sourceMappingURL=StrandsMfaVerification.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StrandsMfaVerification.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsMfaVerification.vue"],"names":[],"mappings":"AAgMA;AAweA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;IACb,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;;;;;;;;;;AAwuBD,wBAQG"}
@@ -2,6 +2,21 @@ import { StrandsAuthConfig } from '../composables/useStrandsConfig';
2
2
  interface Props {
3
3
  config?: StrandsAuthConfig;
4
4
  }
5
- declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
5
+ declare function __VLS_template(): {
6
+ attrs: Partial<{}>;
7
+ slots: {
8
+ default?(_: {}): any;
9
+ };
10
+ refs: {};
11
+ rootEl: any;
12
+ };
13
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
14
+ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
15
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
6
16
  export default _default;
17
+ type __VLS_WithTemplateSlots<T, S> = T & {
18
+ new (): {
19
+ $slots: S;
20
+ };
21
+ };
7
22
  //# sourceMappingURL=StrandsSecuredFooter.vue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsSecuredFooter.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsSecuredFooter.vue"],"names":[],"mappings":"AAKA;AA2BA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE1F,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;;AA4DD,wBAOG"}
1
+ {"version":3,"file":"StrandsSecuredFooter.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsSecuredFooter.vue"],"names":[],"mappings":"AAYA;AAkCA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE1F,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;AAiBD,iBAAS,cAAc;WAoCT,OAAO,IAA6B;;yBAVrB,GAAG;;;;EAe/B;AAUD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe,sRAOnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsSignIn.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsSignIn.vue"],"names":[],"mappings":"AAqGA;AAgOA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAK1F,UAAU,KAAK;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;;;;;;;;;;;;iBAHe,MAAM;iBACN,MAAM,EAAE;;AAqdxB,wBASG"}
1
+ {"version":3,"file":"StrandsSignIn.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsSignIn.vue"],"names":[],"mappings":"AAkHA;AAyPA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAK1F,UAAU,KAAK;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;;;;;;;;;;;;iBAHe,MAAM;iBACN,MAAM,EAAE;;AAmgBxB,wBASG"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsTotpSetupModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsTotpSetupModal.vue"],"names":[],"mappings":"AAkOA;AA8VA,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;CACd;;;;;;;;AAwkBD,wBAOG"}
1
+ {"version":3,"file":"StrandsTotpSetupModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsTotpSetupModal.vue"],"names":[],"mappings":"AAqNA;AA0VA,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;CACd;;;;;;;;AAomBD,wBAQG"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsUserProfile.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsUserProfile.vue"],"names":[],"mappings":"AAiSA;AA2xBA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE1F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;;;;;;;;;;;;eADa,OAAO;;;;AAmoCrB,wBAUG"}
1
+ {"version":3,"file":"StrandsUserProfile.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsUserProfile.vue"],"names":[],"mappings":"AA2SA;AAw4BA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE1F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;;;;;;;;;;;;eADa,OAAO;;;;AA4qCrB,wBAUG"}
@@ -6,8 +6,10 @@ export { default as StrandsUserProfile } from './StrandsUserProfile.vue';
6
6
  export { default as StrandsPasswordReset } from './StrandsPasswordReset.vue';
7
7
  export { default as StrandsMFASetup } from './StrandsMFASetup.vue';
8
8
  export { default as StrandsMfaModal } from './StrandsMfaModal.vue';
9
+ export { default as StrandsMfaVerification } from './StrandsMfaVerification.vue';
9
10
  export { default as StrandsTotpSetupModal } from './StrandsTotpSetupModal.vue';
10
11
  export { default as StrandsEmailMfaSetupModal } from './StrandsEmailMfaSetupModal.vue';
12
+ export { default as StrandsHardwareKeySetupModal } from './StrandsHardwareKeySetupModal.vue';
11
13
  export { default as StrandsBackupCodesModal } from './StrandsBackupCodesModal.vue';
12
14
  export { default as StrandsConfirmModal } from './StrandsConfirmModal.vue';
13
15
  export { default as SignedIn } from './SignedIn.vue';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AACtF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAClF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAChF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AACtF,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AAC5F,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAClF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAA"}
@@ -35,6 +35,24 @@ export declare function useStrandsAuth(): {
35
35
  isAuthenticated: import('vue').ComputedRef<boolean>;
36
36
  isLoading: import('vue').ComputedRef<boolean>;
37
37
  loading: import('vue').ComputedRef<boolean>;
38
+ loadingMessage: import('vue').ComputedRef<"Loading..." | "Checking authentication..." | "Signing you in..." | "Creating your account..." | "Signing you out..." | "Refreshing session..." | "Sending verification code..." | "Verifying code...">;
39
+ isInitializing: import('vue').Ref<boolean, boolean>;
40
+ isSigningIn: import('vue').Ref<boolean, boolean>;
41
+ isSigningUp: import('vue').Ref<boolean, boolean>;
42
+ isSigningOut: import('vue').Ref<boolean, boolean>;
43
+ isRefreshingToken: import('vue').Ref<boolean, boolean>;
44
+ isSendingMfaEmail: import('vue').Ref<boolean, boolean>;
45
+ isVerifyingMfa: import('vue').Ref<boolean, boolean>;
46
+ mfaRequired: import('vue').ComputedRef<boolean>;
47
+ mfaSessionId: import('vue').ComputedRef<string | null>;
48
+ availableMfaMethods: import('vue').ComputedRef<{
49
+ id: string;
50
+ device_type: import('../..').MfaDeviceType;
51
+ device_name: string;
52
+ is_active: boolean;
53
+ last_used_at?: (string | Date) | undefined;
54
+ created_at: string | Date;
55
+ }[]>;
38
56
  signIn: (credentials: SignInCredentials) => Promise<AuthResponse>;
39
57
  signUp: (userData: SignUpData) => Promise<never>;
40
58
  signOut: () => Promise<void>;
@@ -55,6 +73,10 @@ export declare function useStrandsAuth(): {
55
73
  changeEmail: (newEmail: string, password: string) => Promise<any>;
56
74
  initialize: () => Promise<void>;
57
75
  setAuthData: (authResponse: AuthResponse) => void;
76
+ verifyMfa: (deviceId: string, code: string, isBackupCode?: boolean) => Promise<AuthResponse>;
77
+ sendMfaEmailCode: (deviceId: string) => Promise<any>;
78
+ registerHardwareKey: (deviceName: string, accessToken: string) => Promise<any>;
79
+ completeHardwareKeyRegistration: (deviceId: string, credential: any, accessToken: string) => Promise<any>;
58
80
  startTokenRefreshTimer: () => void;
59
81
  stopTokenRefreshTimer: () => void;
60
82
  forceReInit: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useStrandsAuth.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/composables/useStrandsAuth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAW,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAY7F,wBAAgB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAIS,iBAAiB;uBAiCtB,UAAU;;;wBAwFX,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;iCAkDT,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;4BAyDlB,MAAM,YAAY,MAAM;;gCAmD1B,YAAY;;;;EAgKhD"}
1
+ {"version":3,"file":"useStrandsAuth.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/composables/useStrandsAuth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAW,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAA+B,MAAM,aAAa,CAAA;AA4C1H,wBAAgB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAuES,iBAAiB;uBA+EtB,UAAU;;;wBA6EX,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;iCAkDT,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;4BAyDlB,MAAM,YAAY,MAAM;;gCA0I1B,YAAY;0BAvFZ,MAAM,QAAQ,MAAM;iCAiDb,MAAM;sCA1YD,MAAM,eAAe,MAAM;gDAnCjB,MAAM,cAAc,GAAG,eAAe,MAAM;;;;EA6nBtG"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStrandsConfig.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/composables/useStrandsConfig.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AA+B1E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,QAQ7D;AAED,wBAAgB,gBAAgB,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;;;uBAwEhD,MAAM,oBAAoB,GAAG,MAAM;;EAoC9D;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,QAEzD"}
1
+ {"version":3,"file":"useStrandsConfig.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/composables/useStrandsConfig.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAqC1E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,QAQ7D;AAED,wBAAgB,gBAAgB,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;;;uBA8EhD,MAAM,oBAAoB,GAAG,MAAM;;EAoC9D;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,QAEzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"UiCard.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiCard.vue"],"names":[],"mappings":"AAeA;AAoEA,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC1C,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CACrC;AAiDD,iBAAS,cAAc;WA2CT,OAAO,IAA6B;;wBAZtB,GAAG;yBACF,GAAG;wBACJ,GAAG;;;;EAe9B;AAUD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;aA/GT,SAAS,GAAG,QAAQ,GAAG,SAAS;aAChC,IAAI,GAAG,IAAI,GAAG,IAAI;YACnB,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;wFAqHpC,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"UiCard.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiCard.vue"],"names":[],"mappings":"AAeA;AAgFA,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC1C,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CACrC;AAiDD,iBAAS,cAAc;WAkDT,OAAO,IAA6B;;wBAZtB,GAAG;yBACF,GAAG;wBACJ,GAAG;;;;EAe9B;AAUD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;aAtHT,SAAS,GAAG,QAAQ,GAAG,SAAS;aAChC,IAAI,GAAG,IAAI,GAAG,IAAI;YACnB,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;wFA4HpC,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}