@strands.gg/accui 2.17.55 → 2.17.56

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 (106) hide show
  1. package/dist/{StrandsUIPlugin-fvlbvZ-P.cjs.js → StrandsUIPlugin-CiAAY2sN.cjs.js} +3 -3
  2. package/dist/StrandsUIPlugin-Dar_Az2V.es.js +20430 -0
  3. package/dist/StrandsUIPlugin-fHS0GmiX.cjs.js +143 -0
  4. package/dist/{StrandsUIPlugin-CSsUxobq.es.js → StrandsUIPlugin-hYC1FxeG.es.js} +950 -931
  5. package/dist/accui.css +1 -1
  6. package/dist/index.cjs.js +5 -5
  7. package/dist/index.es.js +6574 -5585
  8. package/dist/nuxt/module.cjs.js +2 -2
  9. package/dist/nuxt/module.es.js +21 -9
  10. package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js +1 -1
  11. package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts +45 -0
  12. package/dist/nuxt/runtime/composables/useStrandsAuth.es.js +79 -19
  13. package/dist/nuxt/runtime/composables/useStrandsOAuth.d.ts +8 -0
  14. package/dist/nuxt/runtime/plugin.client.cjs.js +1 -1
  15. package/dist/nuxt/runtime/plugin.client.es.js +2 -2
  16. package/dist/nuxt/runtime/plugin.server.cjs.js +1 -1
  17. package/dist/nuxt/runtime/plugin.server.es.js +1 -1
  18. package/dist/nuxt/runtime/plugins/auth-interceptor.client.cjs.js +1 -1
  19. package/dist/nuxt/runtime/plugins/auth-interceptor.client.d.ts +7 -0
  20. package/dist/nuxt/runtime/plugins/auth-interceptor.client.es.js +21 -30
  21. package/dist/types/index.d.ts +8 -0
  22. package/dist/types/oauth.d.ts +420 -0
  23. package/dist/useDarkMode-BdG1G2mj.es.js +102 -0
  24. package/dist/{useDarkMode-Cew-NWjS.cjs.js → useDarkMode-BvBnG5kF.cjs.js} +1 -1
  25. package/dist/useDarkMode-Dd0Q5Nnz.cjs.js +1 -0
  26. package/dist/{useDarkMode-CvinMR9O.es.js → useDarkMode-FTkHLBsX.es.js} +15 -15
  27. package/dist/useDarkMode-OZ_A8-6H.es.js +102 -0
  28. package/dist/useStrandsAuth-CetpoBNk.cjs.js +1 -0
  29. package/dist/useStrandsAuth-DEWj1bFC.cjs.js +1 -0
  30. package/dist/useStrandsAuth-DTJ5fn33.es.js +666 -0
  31. package/dist/useStrandsAuth-Z7P9ujqQ.es.js +666 -0
  32. package/dist/useStrandsAuth-wzl2F9DE.es.js +702 -0
  33. package/dist/{useStrandsConfig-CKLyNlSd.es.js → useStrandsConfig-B2UXxIbT.es.js} +46 -40
  34. package/dist/useStrandsConfig-BGJg1LlC.es.js +213 -0
  35. package/dist/useStrandsConfig-BYOAEt9d.cjs.js +1 -0
  36. package/dist/vite.cjs.js +1 -1
  37. package/dist/vite.es.js +2 -2
  38. package/dist/vue/components/index.d.ts +2 -0
  39. package/dist/vue/composables/useAuthenticatedFetch.d.ts +3 -1
  40. package/dist/vue/composables/useDarkMode.d.ts +6 -1
  41. package/dist/vue/composables/useStrandsOAuth.d.ts +10 -0
  42. package/dist/vue/ui/UiMegaMenu/index.d.ts +4 -0
  43. package/dist/vue/ui/index.d.ts +8 -0
  44. package/package.json +1 -1
  45. package/dist/index.d.ts +0 -7
  46. package/dist/nuxt/module.d.ts +0 -4
  47. package/dist/nuxt/runtime/composables/useAuthenticatedFetch.d.ts +0 -20
  48. package/dist/nuxt/runtime/middleware/auth.d.ts +0 -6
  49. package/dist/nuxt/runtime/middleware/auth.global.d.ts +0 -2
  50. package/dist/nuxt/runtime/middleware/guest.d.ts +0 -6
  51. package/dist/nuxt/runtime/plugin.client.d.ts +0 -2
  52. package/dist/nuxt/runtime/plugin.server.d.ts +0 -2
  53. package/dist/nuxt.d.ts +0 -4
  54. package/dist/useStrandsAuth-CmAxFCQ_.cjs.js +0 -1
  55. package/dist/useStrandsAuth-DWsqp9WI.es.js +0 -661
  56. package/dist/useStrandsConfig-nOR0oGdb.cjs.js +0 -1
  57. package/dist/utils/colors.d.ts +0 -10
  58. package/dist/utils/index.d.ts +0 -2
  59. package/dist/utils/slots.d.ts +0 -1
  60. package/dist/utils/validation.d.ts +0 -12
  61. package/dist/vite/index.d.ts +0 -2
  62. package/dist/vite/plugin.d.ts +0 -68
  63. package/dist/vue/components/StrandsNav/index.d.ts +0 -8
  64. package/dist/vue/components/StrandsNav/types.d.ts +0 -12
  65. package/dist/vue/components/icons/index.d.ts +0 -2
  66. package/dist/vue/composables/useFloatingPosition.d.ts +0 -22
  67. package/dist/vue/composables/useModalStack.d.ts +0 -86
  68. package/dist/vue/composables/useOAuthProviders.d.ts +0 -73
  69. package/dist/vue/composables/useStrandsAuth.d.ts +0 -2
  70. package/dist/vue/composables/useStrandsConfig.d.ts +0 -5
  71. package/dist/vue/composables/useStrandsMfa.d.ts +0 -36
  72. package/dist/vue/composables/useTheme.d.ts +0 -18
  73. package/dist/vue/index.d.ts +0 -16
  74. package/dist/vue/plugins/StrandsUIPlugin.d.ts +0 -20
  75. package/dist/vue/utils/contrast.d.ts +0 -75
  76. package/dist/vue/utils/debounce.d.ts +0 -12
  77. package/dist/vue/utils/fontPreloader.d.ts +0 -11
  78. package/dist/vue/utils/iconProps.d.ts +0 -9
  79. package/dist/vue/utils/lazyComponents.d.ts +0 -4
  80. package/dist/vue/utils/levels.d.ts +0 -27
  81. package/dist/vue/utils/modalStack.d.ts +0 -34
  82. package/dist/vue/utils/performanceInit.d.ts +0 -40
  83. package/dist/vue/utils/requestCache.d.ts +0 -49
  84. package/dist/vue/utils/slots.d.ts +0 -9
  85. package/dist/vue/utils/sounds.d.ts +0 -57
  86. package/dist/webcomponents/define-element.d.ts +0 -25
  87. package/dist/webcomponents/entries/strands-alert.d.ts +0 -12
  88. package/dist/webcomponents/entries/strands-button.d.ts +0 -12
  89. package/dist/webcomponents/entries/strands-card.d.ts +0 -12
  90. package/dist/webcomponents/entries/strands-checkbox-group.d.ts +0 -11
  91. package/dist/webcomponents/entries/strands-divider.d.ts +0 -12
  92. package/dist/webcomponents/entries/strands-input.d.ts +0 -14
  93. package/dist/webcomponents/entries/strands-link.d.ts +0 -12
  94. package/dist/webcomponents/entries/strands-loader-spinner.d.ts +0 -10
  95. package/dist/webcomponents/entries/strands-modal.d.ts +0 -16
  96. package/dist/webcomponents/entries/strands-pill.d.ts +0 -11
  97. package/dist/webcomponents/entries/strands-radio-group.d.ts +0 -11
  98. package/dist/webcomponents/entries/strands-slider.d.ts +0 -10
  99. package/dist/webcomponents/entries/strands-table.d.ts +0 -13
  100. package/dist/webcomponents/entries/strands-tabs.d.ts +0 -12
  101. package/dist/webcomponents/entries/strands-theme-toggle.d.ts +0 -10
  102. package/dist/webcomponents/entries/strands-toggle.d.ts +0 -10
  103. package/dist/webcomponents/entries/strands-tooltip.d.ts +0 -12
  104. package/dist/webcomponents/index.d.ts +0 -8
  105. package/dist/webcomponents/loader.d.ts +0 -73
  106. package/dist/webcomponents/registry.d.ts +0 -41
@@ -1,4 +1,4 @@
1
- "use strict";const r=require("@nuxt/kit");var n=typeof document<"u"?document.currentScript:null;const h={baseUrl:"https://your-api.example.com",accentColor:"#EA00A8",redirectUrl:"/",onSignInUrl:"/dashboard",onSignOutUrl:"/",autoRefresh:!0,refreshInterval:4,protectedRoutes:[],guestOnlyRoutes:["/auth","/login","/register"],devMode:!1,styles:!0,supportEmail:"",oauth2RedirectUrl:"",theme:"system"},g=r.defineNuxtModule({meta:{name:"@strands.gg/accui/nuxt",configKey:"strandsAuth",compatibility:{nuxt:"^3.0.0 || ^4.0.0"}},defaults:h,async setup(a,t){const s=r.createResolver(typeof document>"u"?require("url").pathToFileURL(__filename).href:n&&n.tagName.toUpperCase()==="SCRIPT"&&n.src||new URL("nuxt/module.cjs.js",document.baseURI).href);t.options.runtimeConfig.public=t.options.runtimeConfig.public||{};const i={...a,styles:a.styles!==!1};if(t.options.runtimeConfig.public.strandsAuth=i,t.options.appConfig&&(t.options.appConfig.strandsAuth=i),a.styles!==!1&&t.options.css.push("@strands.gg/accui/style.css"),a.accentColor&&a.accentColor!=="#EA00A8"){const e=a.accentColor,p=`
1
+ "use strict";const o=require("@nuxt/kit");var n=typeof document<"u"?document.currentScript:null;const h={baseUrl:"https://your-api.example.com",accentColor:"#EA00A8",redirectUrl:"/",onSignInUrl:"/dashboard",onSignOutUrl:"/",autoRefresh:!0,refreshInterval:4,protectedRoutes:[],guestOnlyRoutes:["/auth","/login","/register"],devMode:!1,styles:!0,supportEmail:"",oauth2RedirectUrl:"",theme:"system"},g=o.defineNuxtModule({meta:{name:"@strands.gg/accui/nuxt",configKey:"strandsAuth",compatibility:{nuxt:"^3.0.0 || ^4.0.0"}},defaults:h,async setup(a,t){const s=o.createResolver(typeof document>"u"?require("url").pathToFileURL(__filename).href:n&&n.tagName.toUpperCase()==="SCRIPT"&&n.src||new URL("nuxt/module.cjs.js",document.baseURI).href);t.options.runtimeConfig.public=t.options.runtimeConfig.public||{};const i={...a,styles:a.styles!==!1};if(t.options.runtimeConfig.public.strandsAuth=i,t.options.appConfig&&(t.options.appConfig.strandsAuth=i),a.styles!==!1&&t.options.css.push("@strands.gg/accui/style.css"),a.accentColor&&a.accentColor!=="#EA00A8"){const e=a.accentColor,p=`
2
2
  :root {
3
3
  --strands-custom-accent: ${e};
4
4
  --strands-custom-50: color-mix(in srgb, ${e} 10%, white);
@@ -13,7 +13,7 @@
13
13
  --strands-custom-900: color-mix(in srgb, ${e} 40%, black);
14
14
  --strands-custom-950: color-mix(in srgb, ${e} 25%, black);
15
15
  }
16
- `;t.options.app.head=t.options.app.head||{},t.options.app.head.style=t.options.app.head.style||[],t.options.app.head.style.unshift({innerHTML:p,key:"strands-accent-override"})}const o="es.js",u=s.resolve(`./runtime/plugin.client.${o}`),d=s.resolve(`./runtime/plugin.server.${o}`),c=s.resolve(`./runtime/middleware/auth.global.${o}`),l=s.resolve(`./runtime/plugins/auth-interceptor.client.${o}`);r.addPlugin({src:u,mode:"client"}),r.addPlugin({src:d,mode:"server"}),r.addPlugin({src:l,mode:"client"}),r.addRouteMiddleware({name:"auth",path:c,global:!0}),t.hook("pages:extend",()=>{}),r.addImports([{name:"useStrandsAuth",as:"useStrandsAuth",from:s.resolve(`./runtime/composables/useStrandsAuth.${o}`)},{name:"useAuthUser",as:"useAuthUser",from:s.resolve(`./runtime/composables/useStrandsAuth.${o}`)},{name:"useAuthState",as:"useAuthState",from:s.resolve(`./runtime/composables/useStrandsAuth.${o}`)},{name:"useAuthenticatedFetch",as:"useAuthenticatedFetch",from:s.resolve(`./runtime/composables/useAuthenticatedFetch.${o}`)}]);const m=["StrandsAuth","StrandsSignIn","StrandsSignUp","StrandsCompleteSignUp","StrandsUserProfile","StrandsUserButton","StrandsPasswordReset","StrandsMFASetup","StrandsMfaVerification","StrandsMfaModal","StrandsBackupCodesModal","StrandsConfirmModal","StrandsEmailMfaSetupModal","StrandsHardwareKeySetupModal","StrandsSessionsModal","StrandsSettingsModal","StrandsTotpSetupModal","StrandsConfigProvider","SignedIn","StrandsLogo","StrandsSecuredFooter","StrandsNav","StrandsNavItem","UiAlert","UiApp","UiAvatarEditor","UiButton","UiCard","UiCheckboxGroup","UiColorPicker","UiDateTimePicker","UiDivider","UiHero","UiInput","UiLevelProgress","UiLink","UiLoader","UiModal","UiPill","UiRadioGroup","UiSlider","UiTable","UiTabs","UiThemeToggle","UiToggle","UiTooltip","VirtualList","SvgIcon","IconGithub","IconGoogle"];for(const e of m)r.addComponent({name:e,export:e,filePath:"@strands.gg/accui"});t.hook("prepare:types",e=>{e.references.push({types:"@strands.gg/auth-nuxt"}),e.declarations&&e.declarations.push(`
16
+ `;t.options.app.head=t.options.app.head||{},t.options.app.head.style=t.options.app.head.style||[],t.options.app.head.style.unshift({innerHTML:p,key:"strands-accent-override"})}const r="es.js",u=s.resolve(`./runtime/plugin.client.${r}`),d=s.resolve(`./runtime/plugin.server.${r}`),c=s.resolve(`./runtime/middleware/auth.global.${r}`),l=s.resolve(`./runtime/plugins/auth-interceptor.client.${r}`);o.addPlugin({src:u,mode:"client"}),o.addPlugin({src:d,mode:"server"}),o.addPlugin({src:l,mode:"client"}),o.addRouteMiddleware({name:"auth",path:c,global:!0}),t.hook("pages:extend",()=>{}),o.addImports([{name:"useStrandsAuth",as:"useStrandsAuth",from:s.resolve(`./runtime/composables/useStrandsAuth.${r}`)},{name:"useAuthUser",as:"useAuthUser",from:s.resolve(`./runtime/composables/useStrandsAuth.${r}`)},{name:"useAuthState",as:"useAuthState",from:s.resolve(`./runtime/composables/useStrandsAuth.${r}`)},{name:"useAuthenticatedFetch",as:"useAuthenticatedFetch",from:s.resolve(`./runtime/composables/useAuthenticatedFetch.${r}`)},{name:"useStrandsOAuth",as:"useStrandsOAuth",from:s.resolve(`./runtime/composables/useStrandsOAuth.${r}`)}]);const m=["StrandsAuth","StrandsSignIn","StrandsSignUp","StrandsCompleteSignUp","StrandsUserProfile","StrandsUserButton","StrandsPasswordReset","StrandsMFASetup","StrandsMfaVerification","StrandsMfaModal","StrandsBackupCodesModal","StrandsConfirmModal","StrandsEmailMfaSetupModal","StrandsHardwareKeySetupModal","StrandsSessionsModal","StrandsSettingsModal","StrandsTotpSetupModal","StrandsConfigProvider","SignedIn","StrandsLogo","StrandsSecuredFooter","StrandsNav","StrandsNavItem","StrandsOAuthButton","StrandsOAuthCallback","UiAlert","UiApp","UiAvatarEditor","UiButton","UiCard","UiCheckboxGroup","UiColorPicker","UiDateTimePicker","UiDivider","UiHero","UiInput","UiLevelProgress","UiLink","UiLoader","UiMegaMenu","UiMegaMenuItem","UiMegaMenuPanel","UiMegaMenuGroup","UiModal","UiPill","UiRadioGroup","UiSlider","UiTable","UiTabs","UiThemeToggle","UiToggle","UiTooltip","VirtualList","SvgIcon","IconGithub","IconGoogle"];for(const e of m)o.addComponent({name:e,export:e,filePath:"@strands.gg/accui"});t.hook("prepare:types",e=>{e.references.push({types:"@strands.gg/auth-nuxt"}),e.declarations&&e.declarations.push(`
17
17
  declare global {
18
18
  const useStrandsAuth: typeof import('${s.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useStrandsAuth']
19
19
  const useAuthUser: typeof import('${s.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useAuthUser']
@@ -1,5 +1,5 @@
1
1
  import { defineNuxtModule as p, createResolver as h, addPlugin as a, addRouteMiddleware as g, addImports as S, addComponent as f } from "@nuxt/kit";
2
- const b = {
2
+ const A = {
3
3
  baseUrl: "https://your-api.example.com",
4
4
  accentColor: "#EA00A8",
5
5
  redirectUrl: "/",
@@ -14,7 +14,7 @@ const b = {
14
14
  supportEmail: "",
15
15
  oauth2RedirectUrl: "",
16
16
  theme: "system"
17
- }, U = p({
17
+ }, b = p({
18
18
  meta: {
19
19
  name: "@strands.gg/accui/nuxt",
20
20
  configKey: "strandsAuth",
@@ -22,7 +22,7 @@ const b = {
22
22
  nuxt: "^3.0.0 || ^4.0.0"
23
23
  }
24
24
  },
25
- defaults: b,
25
+ defaults: A,
26
26
  async setup(r, t) {
27
27
  const s = h(import.meta.url);
28
28
  t.options.runtimeConfig.public = t.options.runtimeConfig.public || {};
@@ -52,7 +52,7 @@ const b = {
52
52
  key: "strands-accent-override"
53
53
  });
54
54
  }
55
- const o = "es.js", i = s.resolve(`./runtime/plugin.client.${o}`), u = s.resolve(`./runtime/plugin.server.${o}`), c = s.resolve(`./runtime/middleware/auth.global.${o}`), d = s.resolve(`./runtime/plugins/auth-interceptor.client.${o}`);
55
+ const o = "es.js", i = s.resolve(`./runtime/plugin.client.${o}`), u = s.resolve(`./runtime/plugin.server.${o}`), d = s.resolve(`./runtime/middleware/auth.global.${o}`), l = s.resolve(`./runtime/plugins/auth-interceptor.client.${o}`);
56
56
  a({
57
57
  src: i,
58
58
  mode: "client"
@@ -60,11 +60,11 @@ const b = {
60
60
  src: u,
61
61
  mode: "server"
62
62
  }), a({
63
- src: d,
63
+ src: l,
64
64
  mode: "client"
65
65
  }), g({
66
66
  name: "auth",
67
- path: c,
67
+ path: d,
68
68
  global: !0
69
69
  }), t.hook("pages:extend", () => {
70
70
  }), S([
@@ -87,9 +87,14 @@ const b = {
87
87
  name: "useAuthenticatedFetch",
88
88
  as: "useAuthenticatedFetch",
89
89
  from: s.resolve(`./runtime/composables/useAuthenticatedFetch.${o}`)
90
+ },
91
+ {
92
+ name: "useStrandsOAuth",
93
+ as: "useStrandsOAuth",
94
+ from: s.resolve(`./runtime/composables/useStrandsOAuth.${o}`)
90
95
  }
91
96
  ]);
92
- const l = [
97
+ const c = [
93
98
  // Strands Auth Components
94
99
  "StrandsAuth",
95
100
  "StrandsSignIn",
@@ -114,6 +119,9 @@ const b = {
114
119
  "StrandsSecuredFooter",
115
120
  "StrandsNav",
116
121
  "StrandsNavItem",
122
+ // OAuth2 Client Components
123
+ "StrandsOAuthButton",
124
+ "StrandsOAuthCallback",
117
125
  // UI Components
118
126
  "UiAlert",
119
127
  "UiApp",
@@ -129,6 +137,10 @@ const b = {
129
137
  "UiLevelProgress",
130
138
  "UiLink",
131
139
  "UiLoader",
140
+ "UiMegaMenu",
141
+ "UiMegaMenuItem",
142
+ "UiMegaMenuPanel",
143
+ "UiMegaMenuGroup",
132
144
  "UiModal",
133
145
  "UiPill",
134
146
  "UiRadioGroup",
@@ -145,7 +157,7 @@ const b = {
145
157
  "IconGithub",
146
158
  "IconGoogle"
147
159
  ];
148
- for (const e of l)
160
+ for (const e of c)
149
161
  f({
150
162
  name: e,
151
163
  export: e,
@@ -166,5 +178,5 @@ const b = {
166
178
  }
167
179
  });
168
180
  export {
169
- U as default
181
+ b as default
170
182
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("nuxt/app"),a=require("../../../useStrandsAuth-CmAxFCQ_.cjs.js"),u=()=>{const t=e.useRuntimeConfig().public.strandsAuth,n=a.useStrandsAuth();return{...n,initialize:async()=>{await n.initialize()},signIn:async s=>{const i=await n.signIn(s);return i&&t.onSignInUrl&&await e.navigateTo(t.onSignInUrl),i},signUp:async s=>await n.signUp({email:s.email,password:"",firstName:"",lastName:""}),signOut:async()=>{await n.signOut(),t.onSignOutUrl&&await e.navigateTo(t.onSignOutUrl)}}},r=()=>{const{user:t}=u();return{user:t}},o=()=>{const{isAuthenticated:t,isLoading:n}=u();return{isAuthenticated:t,isLoading:n}};exports.useAuthState=o;exports.useAuthUser=r;exports.useStrandsAuth=u;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("vue"),a=require("nuxt/app"),u=require("../../../useStrandsAuth-CetpoBNk.cjs.js");const i=()=>{let e;try{const s=a.useRuntimeConfig();s&&s.public&&(e=s.public.strandsAuth)}catch{}const n=u.useStrandsAuth();return{...n,initialize:async()=>{await n.initialize()},signIn:async s=>{const t=await n.signIn(s);return t&&e?.onSignInUrl&&await a.navigateTo(e.onSignInUrl),t},signUp:async s=>await n.signUp({email:s.email,password:"",firstName:"",lastName:""}),signOut:async()=>{await n.signOut(),e?.onSignOutUrl&&await a.navigateTo(e.onSignOutUrl)}}},l=()=>{const{user:e}=i();return{user:e}},r=()=>{const{isAuthenticated:e,isLoading:n}=i();return{isAuthenticated:e,isLoading:n}};exports.useAuthState=r;exports.useAuthUser=l;exports.useStrandsAuth=i;
@@ -1,6 +1,51 @@
1
1
  import type { ComputedRef } from 'vue';
2
2
  import type { User } from '../../../types';
3
3
  export declare const useStrandsAuth: () => {
4
+ user: ComputedRef<User>;
5
+ currentUser: ComputedRef<User>;
6
+ currentSession: ComputedRef<null>;
7
+ isAuthenticated: ComputedRef<boolean>;
8
+ isLoading: ComputedRef<boolean>;
9
+ loading: ComputedRef<boolean>;
10
+ loadingMessage: ComputedRef<string>;
11
+ isInitializing: ComputedRef<boolean>;
12
+ isInitialized: ComputedRef<boolean>;
13
+ isSigningIn: ComputedRef<boolean>;
14
+ isSigningUp: ComputedRef<boolean>;
15
+ isSigningOut: ComputedRef<boolean>;
16
+ isRefreshingToken: ComputedRef<boolean>;
17
+ isSendingMfaEmail: ComputedRef<boolean>;
18
+ isVerifyingMfa: ComputedRef<boolean>;
19
+ mfaRequired: ComputedRef<boolean>;
20
+ mfaSessionId: ComputedRef<string>;
21
+ availableMfaMethods: ComputedRef<unknown[]>;
22
+ signIn: () => Promise<null>;
23
+ signUp: () => Promise<null>;
24
+ signOut: () => Promise<void>;
25
+ refreshToken: () => Promise<boolean>;
26
+ fetchProfile: () => Promise<null>;
27
+ updateProfile: () => Promise<null>;
28
+ updateUserSettings: () => Promise<null>;
29
+ changeEmail: () => Promise<null>;
30
+ changeUsername: () => Promise<null>;
31
+ getUsernameCooldown: () => Promise<Record<string, unknown>>;
32
+ checkUsernameAvailability: () => Promise<Record<string, unknown>>;
33
+ getUserSessions: () => Promise<unknown[]>;
34
+ getSessionStats: () => Promise<Record<string, unknown>>;
35
+ revokeSession: () => Promise<boolean>;
36
+ revokeAllOtherSessions: () => Promise<boolean>;
37
+ initialize: () => Promise<void>;
38
+ setAuthData: () => Promise<void>;
39
+ verifyMfa: () => Promise<null>;
40
+ sendMfaEmailCode: () => Promise<null>;
41
+ getMfaWebAuthnChallenge: () => Promise<null>;
42
+ registerHardwareKey: () => Promise<null>;
43
+ completeHardwareKeyRegistration: () => Promise<null>;
44
+ startTokenRefreshTimer: () => void;
45
+ stopTokenRefreshTimer: () => void;
46
+ getAuthHeaders: () => Record<string, string>;
47
+ forceReInit: () => void;
48
+ } | {
4
49
  initialize: () => Promise<void>;
5
50
  signIn: (credentials: {
6
51
  email: string;
@@ -1,20 +1,80 @@
1
- import { useRuntimeConfig as e, navigateTo as a } from "nuxt/app";
2
- import { u as r } from "../../../useStrandsAuth-DWsqp9WI.es.js";
3
- const u = () => {
4
- const n = e().public.strandsAuth, t = r();
1
+ import { computed as n } from "vue";
2
+ import { useRuntimeConfig as r, navigateTo as t } from "nuxt/app";
3
+ import { u } from "../../../useStrandsAuth-wzl2F9DE.es.js";
4
+ const o = () => ({
5
+ user: n(() => null),
6
+ currentUser: n(() => null),
7
+ currentSession: n(() => null),
8
+ isAuthenticated: n(() => !1),
9
+ isLoading: n(() => !0),
10
+ loading: n(() => !1),
11
+ loadingMessage: n(() => "Loading..."),
12
+ isInitializing: n(() => !0),
13
+ isInitialized: n(() => !1),
14
+ isSigningIn: n(() => !1),
15
+ isSigningUp: n(() => !1),
16
+ isSigningOut: n(() => !1),
17
+ isRefreshingToken: n(() => !1),
18
+ isSendingMfaEmail: n(() => !1),
19
+ isVerifyingMfa: n(() => !1),
20
+ mfaRequired: n(() => !1),
21
+ mfaSessionId: n(() => null),
22
+ availableMfaMethods: n(() => []),
23
+ signIn: async () => null,
24
+ signUp: async () => null,
25
+ signOut: async () => {
26
+ },
27
+ refreshToken: async () => !1,
28
+ fetchProfile: async () => null,
29
+ updateProfile: async () => null,
30
+ updateUserSettings: async () => null,
31
+ changeEmail: async () => null,
32
+ changeUsername: async () => null,
33
+ getUsernameCooldown: async () => ({}),
34
+ checkUsernameAvailability: async () => ({}),
35
+ getUserSessions: async () => [],
36
+ getSessionStats: async () => ({}),
37
+ revokeSession: async () => !1,
38
+ revokeAllOtherSessions: async () => !1,
39
+ initialize: async () => {
40
+ },
41
+ setAuthData: async () => {
42
+ },
43
+ verifyMfa: async () => null,
44
+ sendMfaEmailCode: async () => null,
45
+ getMfaWebAuthnChallenge: async () => null,
46
+ registerHardwareKey: async () => null,
47
+ completeHardwareKeyRegistration: async () => null,
48
+ startTokenRefreshTimer: () => {
49
+ },
50
+ stopTokenRefreshTimer: () => {
51
+ },
52
+ getAuthHeaders: () => ({ "Content-Type": "application/json" }),
53
+ forceReInit: () => {
54
+ }
55
+ }), l = () => {
56
+ if (import.meta.server)
57
+ return o();
58
+ let e;
59
+ try {
60
+ const i = r();
61
+ i && i.public && (e = i.public.strandsAuth);
62
+ } catch {
63
+ }
64
+ const s = u();
5
65
  return {
6
66
  // Re-export Vue composable state and methods
7
- ...t,
67
+ ...s,
8
68
  // Add initialize function
9
69
  initialize: async () => {
10
- await t.initialize();
70
+ await s.initialize();
11
71
  },
12
72
  // Override methods with Nuxt-specific navigation
13
73
  signIn: async (i) => {
14
- const s = await t.signIn(i);
15
- return s && n.onSignInUrl && await a(n.onSignInUrl), s;
74
+ const a = await s.signIn(i);
75
+ return a && e?.onSignInUrl && await t(e.onSignInUrl), a;
16
76
  },
17
- signUp: async (i) => await t.signUp({
77
+ signUp: async (i) => await s.signUp({
18
78
  email: i.email,
19
79
  password: "",
20
80
  // Empty password for magic link
@@ -23,18 +83,18 @@ const u = () => {
23
83
  lastName: ""
24
84
  }),
25
85
  signOut: async () => {
26
- await t.signOut(), n.onSignOutUrl && await a(n.onSignOutUrl);
86
+ await s.signOut(), e?.onSignOutUrl && await t(e.onSignOutUrl);
27
87
  }
28
88
  };
29
- }, U = () => {
30
- const { user: n } = u();
31
- return { user: n };
32
- }, f = () => {
33
- const { isAuthenticated: n, isLoading: t } = u();
34
- return { isAuthenticated: n, isLoading: t };
89
+ }, S = () => {
90
+ const { user: e } = l();
91
+ return { user: e };
92
+ }, p = () => {
93
+ const { isAuthenticated: e, isLoading: s } = l();
94
+ return { isAuthenticated: e, isLoading: s };
35
95
  };
36
96
  export {
37
- f as useAuthState,
38
- U as useAuthUser,
39
- u as useStrandsAuth
97
+ p as useAuthState,
98
+ S as useAuthUser,
99
+ l as useStrandsAuth
40
100
  };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Re-export useStrandsOAuth composable for Nuxt runtime
3
+ *
4
+ * This composable handles OAuth2 Authorization Code flow with PKCE
5
+ * for third-party applications integrating "Sign in with Strands".
6
+ */
7
+ export { useStrandsOAuth } from '../../../vue/composables/useStrandsOAuth';
8
+ export type { StrandsOAuthConfig, PKCEChallenge, OAuth2TokenResponse, OAuth2UserInfo, OAuth2Session, OAuth2State, OAuth2CallbackParams, OAuth2Error, UseStrandsOAuthReturn } from '../../../types';
@@ -1 +1 @@
1
- "use strict";const n=require("nuxt/app"),t=require("../../useStrandsConfig-nOR0oGdb.cjs.js"),d=require("../../useDarkMode-Cew-NWjS.cjs.js"),c=n.defineNuxtPlugin({name:"strands-auth-client",async setup(){const o=n.useRuntimeConfig().public.strandsAuth,e={...t.STRANDS_AUTH_DEFAULTS,...o};if(t.setStrandsConfig(e),typeof window<"u"&&(window.__STRANDS_CONFIG__=e),e?.accentColor&&typeof window<"u"&&document.documentElement.style.setProperty("--strands-accent",e.accentColor),typeof window<"u"){const r=e?.theme||"system";d.useGlobalDarkMode().setTheme(r)}const{useStrandsAuth:s}=await Promise.resolve().then(()=>require("./composables/useStrandsAuth.cjs.js")),{initialize:i}=s();await i()}});module.exports=c;
1
+ "use strict";const n=require("nuxt/app"),t=require("../../useStrandsConfig-BYOAEt9d.cjs.js"),d=require("../../useDarkMode-Dd0Q5Nnz.cjs.js"),c=n.defineNuxtPlugin({name:"strands-auth-client",async setup(){const o=n.useRuntimeConfig().public.strandsAuth,e={...t.STRANDS_AUTH_DEFAULTS,...o};if(t.setStrandsConfig(e),typeof window<"u"&&(window.__STRANDS_CONFIG__=e),e?.accentColor&&typeof window<"u"&&document.documentElement.style.setProperty("--strands-accent",e.accentColor),typeof window<"u"){const r=e?.theme||"system";d.useGlobalDarkMode().setTheme(r)}const{useStrandsAuth:s}=await Promise.resolve().then(()=>require("./composables/useStrandsAuth.cjs.js")),{initialize:i}=s();await i()}});module.exports=c;
@@ -1,6 +1,6 @@
1
1
  import { defineNuxtPlugin as s, useRuntimeConfig as a } from "nuxt/app";
2
- import { s as d, S as c } from "../../useStrandsConfig-CKLyNlSd.es.js";
3
- import { u as r } from "../../useDarkMode-CvinMR9O.es.js";
2
+ import { s as d, S as c } from "../../useStrandsConfig-B2UXxIbT.es.js";
3
+ import { u as r } from "../../useDarkMode-BdG1G2mj.es.js";
4
4
  const g = s({
5
5
  name: "strands-auth-client",
6
6
  async setup() {
@@ -1 +1 @@
1
- "use strict";const n=require("nuxt/app"),s=require("../../useStrandsConfig-nOR0oGdb.cjs.js"),r=n.defineNuxtPlugin({name:"strands-auth-server",setup(){const e=n.useRuntimeConfig().public.strandsAuth,t={...s.STRANDS_AUTH_DEFAULTS,...e};s.setStrandsConfig(t)}});module.exports=r;
1
+ "use strict";const n=require("nuxt/app"),s=require("../../useStrandsConfig-BYOAEt9d.cjs.js"),r=n.defineNuxtPlugin({name:"strands-auth-server",setup(){const e=n.useRuntimeConfig().public.strandsAuth,t={...s.STRANDS_AUTH_DEFAULTS,...e};s.setStrandsConfig(t)}});module.exports=r;
@@ -1,5 +1,5 @@
1
1
  import { defineNuxtPlugin as t, useRuntimeConfig as e } from "nuxt/app";
2
- import { s as o, S as r } from "../../useStrandsConfig-CKLyNlSd.es.js";
2
+ import { s as o, S as r } from "../../useStrandsConfig-B2UXxIbT.es.js";
3
3
  const u = t({
4
4
  name: "strands-auth-server",
5
5
  setup() {
@@ -1 +1 @@
1
- "use strict";const p=require("nuxt/app"),f=p.defineNuxtPlugin({name:"strands-auth-interceptor",setup(){if(process.server)return;const t=globalThis.fetch;globalThis.fetch=async(e,o)=>{try{const{useStrandsAuth:c}=await Promise.resolve().then(()=>require("../composables/useStrandsAuth.cjs.js")),{currentSession:n,getAuthHeaders:i}=c();let s;if(typeof e=="string"?s=e:e instanceof URL?s=e.toString():s=e.url,m(s)&&n.value?.accessToken)try{const a=i(),h=new Headers(o?.headers);Object.entries(a).forEach(([d,l])=>{h.set(d,l)});const u={...o,headers:h};return t(e,u)}catch(a){console.warn("[Strands Auth] Failed to inject auth headers:",a)}return t(e,o)}catch(c){return console.error("[Strands Auth] Error in fetch interceptor:",c),t(e,o)}}}});function m(t){if(!t.startsWith("http")||["googleapis.com","github.com/api","api.github.com","discord.com/api","graph.microsoft.com","api.stripe.com","api.twilio.com"].some(r=>t.includes(r)))return!1;const n=["/api/","/v1/","/v2/","/graphql","/trpc"].some(r=>t.includes(r)),s=[":3001",":8000",":8080",":5000",":4000"].some(r=>t.includes(r));return n||s}module.exports=f;
1
+ "use strict";const a=require("nuxt/app"),l=a.defineNuxtPlugin({name:"strands-auth-interceptor",setup(){if(process.server)return;const t=globalThis.fetch;globalThis.fetch=async(e,o)=>{try{let s;if(typeof e=="string"?s=e:e instanceof URL?s=e.toString():s=e.url,p(s)){const c={...o,credentials:"include"};return t(e,c)}return t(e,o)}catch(s){return console.error("[Strands Auth] Error in fetch interceptor:",s),t(e,o)}}}});function p(t){if(!t.startsWith("http")||["googleapis.com","github.com/api","api.github.com","discord.com/api","graph.microsoft.com","api.stripe.com","api.twilio.com"].some(r=>t.includes(r)))return!1;const i=["/api/","/v1/","/v2/","/graphql","/trpc"].some(r=>t.includes(r)),n=[":3001",":8000",":8080",":5000",":4000"].some(r=>t.includes(r));return i||n}module.exports=l;
@@ -1,2 +1,9 @@
1
+ /**
2
+ * Auth interceptor plugin for Nuxt
3
+ *
4
+ * With HTTP-only cookies, we no longer need to inject Authorization headers.
5
+ * This interceptor now only adds `credentials: 'include'` to API requests
6
+ * so that cookies are sent automatically.
7
+ */
1
8
  declare const _default: import("nuxt/app").Plugin<Record<string, unknown>> & import("nuxt/app").ObjectPlugin<Record<string, unknown>>;
2
9
  export default _default;
@@ -1,36 +1,28 @@
1
- import { defineNuxtPlugin as p } from "nuxt/app";
2
- const g = p({
1
+ import { defineNuxtPlugin as a } from "nuxt/app";
2
+ const h = a({
3
3
  name: "strands-auth-interceptor",
4
4
  setup() {
5
5
  if (process.server) return;
6
- const e = globalThis.fetch;
7
- globalThis.fetch = async (t, o) => {
6
+ const t = globalThis.fetch;
7
+ globalThis.fetch = async (e, o) => {
8
8
  try {
9
- const { useStrandsAuth: a } = await import("../composables/useStrandsAuth.es.js"), { currentSession: c, getAuthHeaders: i } = a();
10
9
  let s;
11
- if (typeof t == "string" ? s = t : t instanceof URL ? s = t.toString() : s = t.url, f(s) && c.value?.accessToken)
12
- try {
13
- const n = i(), h = new Headers(o?.headers);
14
- Object.entries(n).forEach(([d, l]) => {
15
- h.set(d, l);
16
- });
17
- const u = {
18
- ...o,
19
- headers: h
20
- };
21
- return e(t, u);
22
- } catch (n) {
23
- console.warn("[Strands Auth] Failed to inject auth headers:", n);
24
- }
25
- return e(t, o);
26
- } catch (a) {
27
- return console.error("[Strands Auth] Error in fetch interceptor:", a), e(t, o);
10
+ if (typeof e == "string" ? s = e : e instanceof URL ? s = e.toString() : s = e.url, l(s)) {
11
+ const n = {
12
+ ...o,
13
+ credentials: "include"
14
+ };
15
+ return t(e, n);
16
+ }
17
+ return t(e, o);
18
+ } catch (s) {
19
+ return console.error("[Strands Auth] Error in fetch interceptor:", s), t(e, o);
28
20
  }
29
21
  };
30
22
  }
31
23
  });
32
- function f(e) {
33
- if (!e.startsWith("http") || [
24
+ function l(t) {
25
+ if (!t.startsWith("http") || [
34
26
  "googleapis.com",
35
27
  "github.com/api",
36
28
  "api.github.com",
@@ -38,18 +30,17 @@ function f(e) {
38
30
  "graph.microsoft.com",
39
31
  "api.stripe.com",
40
32
  "api.twilio.com"
41
- // Add other third-party APIs here
42
- ].some((r) => e.includes(r)))
33
+ ].some((r) => t.includes(r)))
43
34
  return !1;
44
- const c = [
35
+ const i = [
45
36
  "/api/",
46
37
  "/v1/",
47
38
  "/v2/",
48
39
  "/graphql",
49
40
  "/trpc"
50
- ].some((r) => e.includes(r)), s = [":3001", ":8000", ":8080", ":5000", ":4000"].some((r) => e.includes(r));
51
- return c || s;
41
+ ].some((r) => t.includes(r)), c = [":3001", ":8000", ":8080", ":5000", ":4000"].some((r) => t.includes(r));
42
+ return i || c;
52
43
  }
53
44
  export {
54
- g as default
45
+ h as default
55
46
  };
@@ -184,6 +184,7 @@ export interface StrandsAuthEndpoints {
184
184
  signUp: string;
185
185
  signOut: string;
186
186
  refresh: string;
187
+ authStatus: string;
187
188
  passwordReset: string;
188
189
  passwordResetConfirm: string;
189
190
  completeRegistration: string;
@@ -224,6 +225,12 @@ export interface AuthResponse {
224
225
  mfa_session_id?: string;
225
226
  available_mfa_methods?: MfaDevice[];
226
227
  }
228
+ export interface AuthStatusResponse {
229
+ authenticated: boolean;
230
+ user: User | null;
231
+ /** Unix timestamp (seconds) when the access token expires */
232
+ expires_at?: number;
233
+ }
227
234
  export type MfaDeviceType = 'totp' | 'email' | 'hardware' | 'passkey';
228
235
  export interface MfaDevice {
229
236
  id: string;
@@ -253,3 +260,4 @@ export interface MfaErrorResponse {
253
260
  available_methods?: string[];
254
261
  }
255
262
  export type * from './composables';
263
+ export * from './oauth';