@descope/vue-sdk 2.0.11 → 2.0.13

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/README.md CHANGED
@@ -212,6 +212,8 @@ You can also use the following functions to assist with various actions managing
212
212
  `getSessionToken()` - Get current session token.
213
213
  `getRefreshToken()` - Get current refresh token.
214
214
  `refresh(token = getRefreshToken())` - Force a refresh on current session token using an existing valid refresh token.
215
+ `isSessionTokenExpired(token = getSessionToken())` - Check whether the current session token is expired. Provide a session token if is not persisted.
216
+ `isRefreshTokenExpired(token = getRefreshToken())` - Check whether the current refresh token is expired. Provide a refresh token if is not persisted.
215
217
  `getJwtRoles(token = getSessionToken(), tenant = '')` - Get current roles from an existing session token. Provide tenant id for specific tenant roles.
216
218
  `getJwtPermissions(token = getSessionToken(), tenant = '')` - Fet current permissions from an existing session token. Provide tenant id for specific tenant permissions.
217
219
 
@@ -222,6 +224,24 @@ Descope SDK is automatically refreshes the session token when it is about to exp
222
224
  If the Descope project settings are configured to manage tokens in cookies.
223
225
  you must also configure a custom domain, and set it as the `baseUrl` to the `descope` plugin. See the above [`plugin` usage](#add-descope-plugin-to-your-application) for usage example.
224
226
 
227
+ ### Token Persistence
228
+
229
+ Descope stores two tokens: the session token and the refresh token.
230
+
231
+ - The refresh token is either stored in local storage or an `httpOnly` cookie. This is configurable in the Descope console.
232
+ - The session token is stored in either local storage or a JS cookie. This behavior is configurable via the `sessionTokenViaCookie` prop in the Descope plugin.
233
+
234
+ However, for security reasons, you may choose not to store tokens in the browser. In this case, you can pass `persistTokens: false` to the Descope plugin. This prevents the SDK from storing the tokens in the browser.
235
+
236
+ Notes:
237
+
238
+ - You must configure the refresh token to be stored in an `httpOnly` cookie in the Descope console. Otherwise, the refresh token will not be stored, and when the page is refreshed, the user will be logged out.
239
+ - You can still retrieve the session token using the `useSession` hook.
240
+
241
+ ### Last User Persistence
242
+
243
+ Descope stores the last user information in local storage. If you wish to disable this feature, you can pass `storeLastAuthenticatedUser: false` to the Descope plugin. Please note that some features related to the last authenticated user may not function as expected if this behavior is disabled.
244
+
225
245
  ### Widgets
226
246
 
227
247
  Widgets are components that allow you to expose management features for tenant-based implementation. In certain scenarios, your customers may require the capability to perform managerial actions independently, alleviating the necessity to contact you. Widgets serve as a feature enabling you to delegate these capabilities to your customers in a modular manner.
@@ -232,7 +252,7 @@ Important Note:
232
252
 
233
253
  #### User Management
234
254
 
235
- The `UserManagement` widget will let you embed a user table in your site to view and take action.
255
+ The `UserManagement` widget lets you embed a user table in your site to view and take action.
236
256
 
237
257
  The widget lets you:
238
258
 
@@ -264,7 +284,7 @@ Example:
264
284
 
265
285
  #### Role Management
266
286
 
267
- The `RoleManagement` widget will let you embed a role table in your site to view and take action.
287
+ The `RoleManagement` widget lets you embed a role table in your site to view and take action.
268
288
 
269
289
  The widget lets you:
270
290
 
@@ -294,7 +314,7 @@ Example:
294
314
 
295
315
  #### Access Key Management
296
316
 
297
- The `AccessKeyManagement` widget will let you embed an access key table in your site to view and take action.
317
+ The `AccessKeyManagement` widget lets you embed an access key table in your site to view and take action.
298
318
 
299
319
  The widget lets you:
300
320
 
@@ -306,10 +326,17 @@ The widget lets you:
306
326
 
307
327
  ```vue
308
328
  <template>
329
+ <!-- admin view: manage all tenant users' access keys -->
309
330
  <AccessKeyManagement
310
331
  tenant="tenant-id"
311
332
  widget-id="access-key-management-widget"
312
333
  />
334
+
335
+ <!-- user view: mange access key for the logged-in tenant's user -->
336
+ <AccessKeyManagement
337
+ tenant="tenant-id"
338
+ widget-id="user-access-key-management-widget"
339
+ />
313
340
  </template>
314
341
 
315
342
  <script setup>
@@ -320,6 +347,53 @@ import { AccessKeyManagement } from '@descope/vue-sdk';
320
347
  Example:
321
348
  [Manage Access Keys](./example/components/ManageAccessKeys.vue)
322
349
 
350
+ #### Audit Management
351
+
352
+ The `AuditManagement` widget lets you embed an audit table in your site.
353
+
354
+ ###### Usage
355
+
356
+ ```vue
357
+ <template>
358
+ <AuditManagement tenant="tenant-id" widget-id="audit-management-widget" />
359
+ </template>
360
+
361
+ <script setup>
362
+ import { AuditManagement } from '@descope/vue-sdk';
363
+ </script>
364
+ ```
365
+
366
+ Example:
367
+ [Manage Audit](./example/components/ManageAudit.vue)
368
+
369
+ #### User Profile
370
+
371
+ The `UserProfile` widget lets you embed a user profile component in your app and let the logged in user update his profile.
372
+
373
+ The widget lets you:
374
+
375
+ - Update user profile picture
376
+ - Update user personal information
377
+ - Update authentication methods
378
+ - Logout
379
+
380
+ ###### Usage
381
+
382
+ ```vue
383
+ <template>
384
+ <UserProfile widget-id="user-profile-widget" @logout="onLogout" />
385
+ </template>
386
+
387
+ <script setup>
388
+ import { UserProfile } from '@descope/vue-sdk';
389
+
390
+ const onLogout = () => (window.location.href = '/login');
391
+ </script>
392
+ ```
393
+
394
+ Example:
395
+ [User Profile](./example/components/MyUserProfile.vue)
396
+
323
397
  ## Code Example
324
398
 
325
399
  You can find an example Vue app in the [example folder](./example).
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("@descope/web-component"),r=require("@descope/web-js-sdk");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("@descope/user-management-widget"),require("@descope/role-management-widget"),require("@descope/access-key-management-widget");var s=n(t),o=n(r);const a=Symbol("$descope"),i={"x-descope-sdk-name":"vue","x-descope-sdk-version":"2.0.11"},u="undefined"!=typeof window,l=()=>{const t=e.inject(a);if(!t)throw Error("Missing Descope context, make sure you are using the Descope plugin");return t},d=()=>l().options,c=()=>l().sdk,p=e=>(...t)=>{let r;try{r=e(...t)}catch(e){console.error(e)}return r};let g;const m=e=>{const t=o.default({...e,persistTokens:u,autoRefresh:u});return g=t,t};g=m({projectId:"temp pid"});const f=()=>u?g?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),y=p(((e=f(),t)=>g?.getJwtPermissions(e,t))),v=p(((e=f(),t)=>g?.getJwtRoles(e,t))),h=["project-id","base-url","flow-id","^theme","^locale","^tenant","^debug","^telemetryKey","redirect-url","auto-focus",".errorTransformer","^form","^client"];var w=e.defineComponent({__name:"Descope",props:{flowId:{type:String,required:!0},tenant:{type:String},theme:{type:String},locale:{type:String},debug:{type:Boolean},telemetryKey:{type:String},redirectUrl:{type:String},autoFocus:{type:Boolean},errorTransformer:{type:Function},form:{type:Object},client:{type:Object}},emits:["success","error","ready"],setup(t,{emit:r}){const n=t;s.default.sdkConfigOverrides={baseHeaders:i,persistTokens:!1,hooks:{get beforeRequest(){return g.httpClient.hooks.beforeRequest},set beforeRequest(e){}}};const{projectId:o,baseUrl:a}=d(),u=c(),l=e.computed((()=>n.form?JSON.stringify(n.form):"")),p=e.computed((()=>n.client?JSON.stringify(n.client):"")),m=async e=>{await(u.httpClient.hooks?.afterRequest?.({},new Response(JSON.stringify(e.detail)))),r("success",e)},f=e=>r("error",e),y=e=>r("ready",e);return(r,n)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-wc",{"project-id":e.unref(o),"base-url":e.unref(a),"flow-id":t.flowId,"^theme":t.theme,"^locale":t.locale,"^tenant":t.tenant,"^debug":t.debug,"^telemetryKey":t.telemetryKey,"redirect-url":t.redirectUrl,"auto-focus":t.autoFocus,".errorTransformer":t.errorTransformer,"^form":e.unref(l),"^client":e.unref(p),onSuccess:m,onError:f,onReady:y},null,40,h)]))}});w.__file="src/Descope.vue";const b=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var S=e.defineComponent({__name:"UserManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(t){const{projectId:r,baseUrl:n}=d();return(s,o)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-user-management-widget",{"project-id":e.unref(r),"base-url":e.unref(n),"^theme":t.theme,"^tenant":t.tenant,"^debug":t.debug,"widget-id":t.widgetId},null,8,b)]))}});S.__file="src/UserManagement.vue";const k=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var j=e.defineComponent({__name:"RoleManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(t){const{projectId:r,baseUrl:n}=d();return(s,o)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-role-management-widget",{"project-id":e.unref(r),"base-url":e.unref(n),"^theme":t.theme,"^tenant":t.tenant,"^debug":t.debug,"widget-id":t.widgetId},null,8,k)]))}});j.__file="src/RoleManagement.vue";const x=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var _=e.defineComponent({__name:"AccessKeyManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(t){const{projectId:r,baseUrl:n}=d();return(s,o)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-access-key-management-widget",{"project-id":e.unref(r),"base-url":e.unref(n),"^theme":t.theme,"^tenant":t.tenant,"^debug":t.debug,"widget-id":t.widgetId},null,8,x)]))}});_.__file="src/AccessKeyManagement.vue";const q=e.ref(null);let R;var U={install:function(t,r){const n=m({...r,persistTokens:!0,autoRefresh:!0,baseHeaders:i});R=n;const s=e.ref(null),o=e.ref(""),u=e.ref(null),l=e.ref(null);n.onSessionTokenChange((e=>{o.value=e})),n.onUserChange((e=>{l.value=e}));const d=async()=>{s.value=!0,await n.refresh(),s.value=!1},c=e.computed((()=>null===s.value)),p=e.computed((()=>null===u.value));q.value=()=>new Promise(((t,r)=>{!o.value&&c.value&&d().catch(r),e.watch((()=>s.value),(()=>!s.value&&t(!!e.unref(o))),{immediate:!0})})),t.provide(a,{session:{fetchSession:d,isLoading:e.readonly(s),session:e.readonly(o),isFetchSessionWasNeverCalled:c},user:{fetchUser:async()=>{u.value=!0,await n.me(),u.value=!1},isLoading:e.readonly(u),user:e.readonly(l),isFetchUserWasNeverCalled:p},sdk:n,options:r})}};exports.AccessKeyManagement=_,exports.Descope=w,exports.RoleManagement=j,exports.UserManagement=S,exports.default=U,exports.getJwtPermissions=y,exports.getJwtRoles=v,exports.getRefreshToken=()=>u?g?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),exports.getSdk=()=>R,exports.getSessionToken=f,exports.routeGuard=()=>e.unref(q)?.(),exports.useDescope=c,exports.useSession=()=>{const{session:t}=l();return t.isFetchSessionWasNeverCalled.value&&t.fetchSession(),{isLoading:e.computed((()=>t.isLoading.value||t.isFetchSessionWasNeverCalled.value)),sessionToken:t.session,isAuthenticated:e.computed((()=>!!t.session.value))}},exports.useUser=()=>{const{user:t,session:r}=l(),n=()=>{!t.user.value&&r.session.value&&t.fetchUser()};return n(),e.watch(r.session,n),{isLoading:e.computed((()=>t.isLoading.value||t.isFetchUserWasNeverCalled.value)),user:t.user}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("@descope/web-component"),r=require("@descope/web-js-sdk");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("@descope/user-management-widget"),require("@descope/role-management-widget"),require("@descope/access-key-management-widget"),require("@descope/audit-management-widget"),require("@descope/user-profile-widget");var s=n(t),o=n(r);const i=Symbol("$descope"),a={"x-descope-sdk-name":"vue","x-descope-sdk-version":"2.0.13"},d="undefined"!=typeof window,u=()=>{const t=e.inject(i);if(!t)throw Error("Missing Descope context, make sure you are using the Descope plugin");return t},l=()=>u().options,c=()=>u().sdk,p=e=>(...t)=>{let r;try{r=e(...t)}catch(e){console.error(e)}return r};let g;const m=e=>{const t=o.default({persistTokens:d,storeLastAuthenticatedUser:d,...e,autoRefresh:d});return g=t,t};g=m({projectId:"temp pid"});const f=()=>d?g?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),y=()=>d?g?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),h=p(((e=f(),t)=>g?.getJwtPermissions(e,t))),w=p(((e=f(),t)=>g?.getJwtRoles(e,t))),b=["project-id","base-url","flow-id","^theme","^locale","^tenant","^debug","^telemetryKey","redirect-url","auto-focus","store-last-authenticated-user",".errorTransformer","^form","^client"];var v=e.defineComponent({__name:"Descope",props:{flowId:{type:String,required:!0},tenant:{type:String},theme:{type:String},locale:{type:String},debug:{type:Boolean},telemetryKey:{type:String},redirectUrl:{type:String},autoFocus:{type:Boolean},errorTransformer:{type:Function},form:{type:Object},client:{type:Object}},emits:["success","error","ready"],setup(t,{emit:r}){const n=t;s.default.sdkConfigOverrides={baseHeaders:a,persistTokens:!1,hooks:{get beforeRequest(){return g.httpClient.hooks.beforeRequest},set beforeRequest(e){}}};const{projectId:o,baseUrl:i,storeLastAuthenticatedUser:d}=l(),u=c(),p=e.computed((()=>n.form?JSON.stringify(n.form):"")),m=e.computed((()=>n.client?JSON.stringify(n.client):"")),f=async e=>{await(u.httpClient.hooks?.afterRequest?.({},new Response(JSON.stringify(e.detail)))),r("success",e)},y=e=>r("error",e),h=e=>r("ready",e);return(r,n)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-wc",{"project-id":e.unref(o),"base-url":e.unref(i),"flow-id":t.flowId,"^theme":t.theme,"^locale":t.locale,"^tenant":t.tenant,"^debug":t.debug,"^telemetryKey":t.telemetryKey,"redirect-url":t.redirectUrl,"auto-focus":t.autoFocus,"store-last-authenticated-user":e.unref(d),".errorTransformer":t.errorTransformer,"^form":e.unref(p),"^client":e.unref(m),onSuccess:f,onError:y,onReady:h},null,40,b)]))}});v.__file="src/Descope.vue";const S=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var k=e.defineComponent({__name:"UserManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(t){const{projectId:r,baseUrl:n}=l();return(s,o)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-user-management-widget",{"project-id":e.unref(r),"base-url":e.unref(n),"^theme":t.theme,"^tenant":t.tenant,"^debug":t.debug,"widget-id":t.widgetId},null,8,S)]))}});k.__file="src/UserManagement.vue";const x=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var _=e.defineComponent({__name:"RoleManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(t){const{projectId:r,baseUrl:n}=l();return(s,o)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-role-management-widget",{"project-id":e.unref(r),"base-url":e.unref(n),"^theme":t.theme,"^tenant":t.tenant,"^debug":t.debug,"widget-id":t.widgetId},null,8,x)]))}});_.__file="src/RoleManagement.vue";const j=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var q=e.defineComponent({__name:"AccessKeyManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(t){const{projectId:r,baseUrl:n}=l();return(s,o)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-access-key-management-widget",{"project-id":e.unref(r),"base-url":e.unref(n),"^theme":t.theme,"^tenant":t.tenant,"^debug":t.debug,"widget-id":t.widgetId},null,8,j)]))}});q.__file="src/AccessKeyManagement.vue";const U=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var B=e.defineComponent({__name:"AuditManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(t){const{projectId:r,baseUrl:n}=l();return(s,o)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-audit-management-widget",{"project-id":e.unref(r),"base-url":e.unref(n),"^theme":t.theme,"^tenant":t.tenant,"^debug":t.debug,"widget-id":t.widgetId},null,8,U)]))}});B.__file="src/AuditManagement.vue";const I=["project-id","base-url","^theme","^debug","widget-id"];var E=e.defineComponent({__name:"UserProfile",props:{widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},emits:["logout"],setup(t,{emit:r}){const n=e=>r("logout",e),{projectId:s,baseUrl:o}=l();return(r,i)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("descope-user-profile-widget",{"project-id":e.unref(s),"base-url":e.unref(o),"^theme":t.theme,"^debug":t.debug,"widget-id":t.widgetId,onLogout:n},null,40,I)]))}});E.__file="src/UserProfile.vue";const R=e.ref(null);let C;var T={install:function(t,r){const n=m({persistTokens:!0,...r,autoRefresh:!0,baseHeaders:a});C=n;const s=e.ref(null),o=e.ref(""),d=e.ref(null),u=e.ref(null);n.onSessionTokenChange((e=>{o.value=e})),n.onUserChange((e=>{u.value=e}));const l=async()=>{s.value=!0,await n.refresh(),s.value=!1},c=e.computed((()=>null===s.value)),p=e.computed((()=>null===d.value));R.value=()=>new Promise(((t,r)=>{!o.value&&c.value&&l().catch(r),e.watch((()=>s.value),(()=>!s.value&&t(!!e.unref(o))),{immediate:!0})})),t.provide(i,{session:{fetchSession:l,isLoading:e.readonly(s),session:e.readonly(o),isFetchSessionWasNeverCalled:c},user:{fetchUser:async()=>{d.value=!0,await n.me(),d.value=!1},isLoading:e.readonly(d),user:e.readonly(u),isFetchUserWasNeverCalled:p},sdk:n,options:r})}};exports.AccessKeyManagement=q,exports.AuditManagement=B,exports.Descope=v,exports.RoleManagement=_,exports.UserManagement=k,exports.UserProfile=E,exports.default=T,exports.getJwtPermissions=h,exports.getJwtRoles=w,exports.getRefreshToken=y,exports.getSdk=()=>C,exports.getSessionToken=f,exports.isRefreshTokenExpired=(e=y())=>g?.isJwtExpired(e),exports.isSessionTokenExpired=(e=f())=>g?.isJwtExpired(e),exports.routeGuard=()=>e.unref(R)?.(),exports.useDescope=c,exports.useSession=()=>{const{session:t}=u();return t.isFetchSessionWasNeverCalled.value&&t.fetchSession(),{isLoading:e.computed((()=>t.isLoading.value||t.isFetchSessionWasNeverCalled.value)),sessionToken:t.session,isAuthenticated:e.computed((()=>!!t.session.value))}},exports.useUser=()=>{const{user:t,session:r}=u(),n=()=>{!t.user.value&&r.session.value&&t.fetchUser()};return n(),e.watch(r.session,n),{isLoading:e.computed((()=>t.isLoading.value||t.isFetchUserWasNeverCalled.value)),user:t.user}};
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { App } from 'vue';
3
3
  import * as _descope_web_js_sdk from '@descope/web-js-sdk';
4
4
  import * as _descope_core_js_sdk from '@descope/core-js-sdk';
5
5
 
6
- declare const _default$4: vue.DefineComponent<{
6
+ declare const _default$6: vue.DefineComponent<{
7
7
  flowId: {
8
8
  type: StringConstructor;
9
9
  required: true;
@@ -84,7 +84,7 @@ declare const _default$4: vue.DefineComponent<{
84
84
  autoFocus: boolean;
85
85
  }>;
86
86
 
87
- declare const _default$3: vue.DefineComponent<{
87
+ declare const _default$5: vue.DefineComponent<{
88
88
  tenant: {
89
89
  type: StringConstructor;
90
90
  required: true;
@@ -120,7 +120,7 @@ declare const _default$3: vue.DefineComponent<{
120
120
  debug: boolean;
121
121
  }>;
122
122
 
123
- declare const _default$2: vue.DefineComponent<{
123
+ declare const _default$4: vue.DefineComponent<{
124
124
  tenant: {
125
125
  type: StringConstructor;
126
126
  required: true;
@@ -156,7 +156,43 @@ declare const _default$2: vue.DefineComponent<{
156
156
  debug: boolean;
157
157
  }>;
158
158
 
159
- declare const _default$1: vue.DefineComponent<{
159
+ declare const _default$3: vue.DefineComponent<{
160
+ tenant: {
161
+ type: StringConstructor;
162
+ required: true;
163
+ };
164
+ widgetId: {
165
+ type: StringConstructor;
166
+ required: true;
167
+ };
168
+ theme: {
169
+ type: StringConstructor;
170
+ };
171
+ debug: {
172
+ type: BooleanConstructor;
173
+ };
174
+ }, (_ctx: any, _cache: any) => vue.VNode<vue.RendererNode, vue.RendererElement, {
175
+ [key: string]: any;
176
+ }>, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly<vue.ExtractPropTypes<{
177
+ tenant: {
178
+ type: StringConstructor;
179
+ required: true;
180
+ };
181
+ widgetId: {
182
+ type: StringConstructor;
183
+ required: true;
184
+ };
185
+ theme: {
186
+ type: StringConstructor;
187
+ };
188
+ debug: {
189
+ type: BooleanConstructor;
190
+ };
191
+ }>>, {
192
+ debug: boolean;
193
+ }>;
194
+
195
+ declare const _default$2: vue.DefineComponent<{
160
196
  tenant: {
161
197
  type: StringConstructor;
162
198
  required: true;
@@ -192,10 +228,42 @@ declare const _default$1: vue.DefineComponent<{
192
228
  debug: boolean;
193
229
  }>;
194
230
 
231
+ declare const _default$1: vue.DefineComponent<{
232
+ widgetId: {
233
+ type: StringConstructor;
234
+ required: true;
235
+ };
236
+ theme: {
237
+ type: StringConstructor;
238
+ };
239
+ debug: {
240
+ type: BooleanConstructor;
241
+ };
242
+ }, (_ctx: any, _cache: any) => vue.VNode<vue.RendererNode, vue.RendererElement, {
243
+ [key: string]: any;
244
+ }>, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "logout"[], "logout", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly<vue.ExtractPropTypes<{
245
+ widgetId: {
246
+ type: StringConstructor;
247
+ required: true;
248
+ };
249
+ theme: {
250
+ type: StringConstructor;
251
+ };
252
+ debug: {
253
+ type: BooleanConstructor;
254
+ };
255
+ }>> & {
256
+ onLogout?: (...args: any[]) => any;
257
+ }, {
258
+ debug: boolean;
259
+ }>;
260
+
195
261
  type Options = {
196
262
  projectId: string;
197
263
  baseUrl?: string;
264
+ persistTokens?: boolean;
198
265
  sessionTokenViaCookie?: boolean;
266
+ storeLastAuthenticatedUser?: boolean;
199
267
  };
200
268
 
201
269
  declare const useDescope: () => ((({
@@ -644,6 +712,44 @@ declare const useDescope: () => ((({
644
712
  verify: (loginId: string, code: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
645
713
  update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
646
714
  };
715
+ notp: {
716
+ signUpOrIn: (loginId?: string, signUpOptions?: {
717
+ customClaims?: Record<string, any>;
718
+ templateOptions?: {
719
+ [x: string]: string;
720
+ };
721
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
722
+ pendingRef: string;
723
+ redirectUrl: string;
724
+ image: string;
725
+ }>>;
726
+ signUp: (loginId?: string, user?: {
727
+ email?: string;
728
+ name?: string;
729
+ givenName?: string;
730
+ middleName?: string;
731
+ familyName?: string;
732
+ phone?: string;
733
+ }, signUpOptions?: {
734
+ customClaims?: Record<string, any>;
735
+ templateOptions?: {
736
+ [x: string]: string;
737
+ };
738
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
739
+ pendingRef: string;
740
+ redirectUrl: string;
741
+ image: string;
742
+ }>>;
743
+ signIn: (loginId?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
744
+ pendingRef: string;
745
+ redirectUrl: string;
746
+ image: string;
747
+ }>>;
748
+ waitForSession: (pendingRef: string, config?: {
749
+ pollingIntervalMs: number;
750
+ timeoutMs: number;
751
+ }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
752
+ };
647
753
  password: {
648
754
  signUp: (loginId: string, password: string, user?: {
649
755
  email?: string;
@@ -1162,6 +1268,44 @@ declare const useDescope: () => ((({
1162
1268
  verify: (loginId: string, code: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
1163
1269
  update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
1164
1270
  };
1271
+ notp: {
1272
+ signUpOrIn: (loginId?: string, signUpOptions?: {
1273
+ customClaims?: Record<string, any>;
1274
+ templateOptions?: {
1275
+ [x: string]: string;
1276
+ };
1277
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
1278
+ pendingRef: string;
1279
+ redirectUrl: string;
1280
+ image: string;
1281
+ }>>;
1282
+ signUp: (loginId?: string, user?: {
1283
+ email?: string;
1284
+ name?: string;
1285
+ givenName?: string;
1286
+ middleName?: string;
1287
+ familyName?: string;
1288
+ phone?: string;
1289
+ }, signUpOptions?: {
1290
+ customClaims?: Record<string, any>;
1291
+ templateOptions?: {
1292
+ [x: string]: string;
1293
+ };
1294
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
1295
+ pendingRef: string;
1296
+ redirectUrl: string;
1297
+ image: string;
1298
+ }>>;
1299
+ signIn: (loginId?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
1300
+ pendingRef: string;
1301
+ redirectUrl: string;
1302
+ image: string;
1303
+ }>>;
1304
+ waitForSession: (pendingRef: string, config?: {
1305
+ pollingIntervalMs: number;
1306
+ timeoutMs: number;
1307
+ }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
1308
+ };
1165
1309
  password: {
1166
1310
  signUp: (loginId: string, password: string, user?: {
1167
1311
  email?: string;
@@ -1686,6 +1830,44 @@ declare const useDescope: () => ((({
1686
1830
  verify: (loginId: string, code: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
1687
1831
  update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
1688
1832
  };
1833
+ notp: {
1834
+ signUpOrIn: (loginId?: string, signUpOptions?: {
1835
+ customClaims?: Record<string, any>;
1836
+ templateOptions?: {
1837
+ [x: string]: string;
1838
+ };
1839
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
1840
+ pendingRef: string;
1841
+ redirectUrl: string;
1842
+ image: string;
1843
+ }>>;
1844
+ signUp: (loginId?: string, user?: {
1845
+ email?: string;
1846
+ name?: string;
1847
+ givenName?: string;
1848
+ middleName?: string;
1849
+ familyName?: string;
1850
+ phone?: string;
1851
+ }, signUpOptions?: {
1852
+ customClaims?: Record<string, any>;
1853
+ templateOptions?: {
1854
+ [x: string]: string;
1855
+ };
1856
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
1857
+ pendingRef: string;
1858
+ redirectUrl: string;
1859
+ image: string;
1860
+ }>>;
1861
+ signIn: (loginId?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
1862
+ pendingRef: string;
1863
+ redirectUrl: string;
1864
+ image: string;
1865
+ }>>;
1866
+ waitForSession: (pendingRef: string, config?: {
1867
+ pollingIntervalMs: number;
1868
+ timeoutMs: number;
1869
+ }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
1870
+ };
1689
1871
  password: {
1690
1872
  signUp: (loginId: string, password: string, user?: {
1691
1873
  email?: string;
@@ -2204,6 +2386,44 @@ declare const useDescope: () => ((({
2204
2386
  verify: (loginId: string, code: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
2205
2387
  update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
2206
2388
  };
2389
+ notp: {
2390
+ signUpOrIn: (loginId?: string, signUpOptions?: {
2391
+ customClaims?: Record<string, any>;
2392
+ templateOptions?: {
2393
+ [x: string]: string;
2394
+ };
2395
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
2396
+ pendingRef: string;
2397
+ redirectUrl: string;
2398
+ image: string;
2399
+ }>>;
2400
+ signUp: (loginId?: string, user?: {
2401
+ email?: string;
2402
+ name?: string;
2403
+ givenName?: string;
2404
+ middleName?: string;
2405
+ familyName?: string;
2406
+ phone?: string;
2407
+ }, signUpOptions?: {
2408
+ customClaims?: Record<string, any>;
2409
+ templateOptions?: {
2410
+ [x: string]: string;
2411
+ };
2412
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
2413
+ pendingRef: string;
2414
+ redirectUrl: string;
2415
+ image: string;
2416
+ }>>;
2417
+ signIn: (loginId?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
2418
+ pendingRef: string;
2419
+ redirectUrl: string;
2420
+ image: string;
2421
+ }>>;
2422
+ waitForSession: (pendingRef: string, config?: {
2423
+ pollingIntervalMs: number;
2424
+ timeoutMs: number;
2425
+ }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
2426
+ };
2207
2427
  password: {
2208
2428
  signUp: (loginId: string, password: string, user?: {
2209
2429
  email?: string;
@@ -2748,6 +2968,44 @@ declare const getSdk: () => ((({
2748
2968
  verify: (loginId: string, code: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
2749
2969
  update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
2750
2970
  };
2971
+ notp: {
2972
+ signUpOrIn: (loginId?: string, signUpOptions?: {
2973
+ customClaims?: Record<string, any>;
2974
+ templateOptions?: {
2975
+ [x: string]: string;
2976
+ };
2977
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
2978
+ pendingRef: string;
2979
+ redirectUrl: string;
2980
+ image: string;
2981
+ }>>;
2982
+ signUp: (loginId?: string, user?: {
2983
+ email?: string;
2984
+ name?: string;
2985
+ givenName?: string;
2986
+ middleName?: string;
2987
+ familyName?: string;
2988
+ phone?: string;
2989
+ }, signUpOptions?: {
2990
+ customClaims?: Record<string, any>;
2991
+ templateOptions?: {
2992
+ [x: string]: string;
2993
+ };
2994
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
2995
+ pendingRef: string;
2996
+ redirectUrl: string;
2997
+ image: string;
2998
+ }>>;
2999
+ signIn: (loginId?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
3000
+ pendingRef: string;
3001
+ redirectUrl: string;
3002
+ image: string;
3003
+ }>>;
3004
+ waitForSession: (pendingRef: string, config?: {
3005
+ pollingIntervalMs: number;
3006
+ timeoutMs: number;
3007
+ }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
3008
+ };
2751
3009
  password: {
2752
3010
  signUp: (loginId: string, password: string, user?: {
2753
3011
  email?: string;
@@ -3266,6 +3524,44 @@ declare const getSdk: () => ((({
3266
3524
  verify: (loginId: string, code: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
3267
3525
  update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
3268
3526
  };
3527
+ notp: {
3528
+ signUpOrIn: (loginId?: string, signUpOptions?: {
3529
+ customClaims?: Record<string, any>;
3530
+ templateOptions?: {
3531
+ [x: string]: string;
3532
+ };
3533
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
3534
+ pendingRef: string;
3535
+ redirectUrl: string;
3536
+ image: string;
3537
+ }>>;
3538
+ signUp: (loginId?: string, user?: {
3539
+ email?: string;
3540
+ name?: string;
3541
+ givenName?: string;
3542
+ middleName?: string;
3543
+ familyName?: string;
3544
+ phone?: string;
3545
+ }, signUpOptions?: {
3546
+ customClaims?: Record<string, any>;
3547
+ templateOptions?: {
3548
+ [x: string]: string;
3549
+ };
3550
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
3551
+ pendingRef: string;
3552
+ redirectUrl: string;
3553
+ image: string;
3554
+ }>>;
3555
+ signIn: (loginId?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
3556
+ pendingRef: string;
3557
+ redirectUrl: string;
3558
+ image: string;
3559
+ }>>;
3560
+ waitForSession: (pendingRef: string, config?: {
3561
+ pollingIntervalMs: number;
3562
+ timeoutMs: number;
3563
+ }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
3564
+ };
3269
3565
  password: {
3270
3566
  signUp: (loginId: string, password: string, user?: {
3271
3567
  email?: string;
@@ -3790,6 +4086,44 @@ declare const getSdk: () => ((({
3790
4086
  verify: (loginId: string, code: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
3791
4087
  update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
3792
4088
  };
4089
+ notp: {
4090
+ signUpOrIn: (loginId?: string, signUpOptions?: {
4091
+ customClaims?: Record<string, any>;
4092
+ templateOptions?: {
4093
+ [x: string]: string;
4094
+ };
4095
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
4096
+ pendingRef: string;
4097
+ redirectUrl: string;
4098
+ image: string;
4099
+ }>>;
4100
+ signUp: (loginId?: string, user?: {
4101
+ email?: string;
4102
+ name?: string;
4103
+ givenName?: string;
4104
+ middleName?: string;
4105
+ familyName?: string;
4106
+ phone?: string;
4107
+ }, signUpOptions?: {
4108
+ customClaims?: Record<string, any>;
4109
+ templateOptions?: {
4110
+ [x: string]: string;
4111
+ };
4112
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
4113
+ pendingRef: string;
4114
+ redirectUrl: string;
4115
+ image: string;
4116
+ }>>;
4117
+ signIn: (loginId?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
4118
+ pendingRef: string;
4119
+ redirectUrl: string;
4120
+ image: string;
4121
+ }>>;
4122
+ waitForSession: (pendingRef: string, config?: {
4123
+ pollingIntervalMs: number;
4124
+ timeoutMs: number;
4125
+ }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
4126
+ };
3793
4127
  password: {
3794
4128
  signUp: (loginId: string, password: string, user?: {
3795
4129
  email?: string;
@@ -4308,6 +4642,44 @@ declare const getSdk: () => ((({
4308
4642
  verify: (loginId: string, code: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
4309
4643
  update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
4310
4644
  };
4645
+ notp: {
4646
+ signUpOrIn: (loginId?: string, signUpOptions?: {
4647
+ customClaims?: Record<string, any>;
4648
+ templateOptions?: {
4649
+ [x: string]: string;
4650
+ };
4651
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
4652
+ pendingRef: string;
4653
+ redirectUrl: string;
4654
+ image: string;
4655
+ }>>;
4656
+ signUp: (loginId?: string, user?: {
4657
+ email?: string;
4658
+ name?: string;
4659
+ givenName?: string;
4660
+ middleName?: string;
4661
+ familyName?: string;
4662
+ phone?: string;
4663
+ }, signUpOptions?: {
4664
+ customClaims?: Record<string, any>;
4665
+ templateOptions?: {
4666
+ [x: string]: string;
4667
+ };
4668
+ }) => Promise<_descope_core_js_sdk.SdkResponse<{
4669
+ pendingRef: string;
4670
+ redirectUrl: string;
4671
+ image: string;
4672
+ }>>;
4673
+ signIn: (loginId?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
4674
+ pendingRef: string;
4675
+ redirectUrl: string;
4676
+ image: string;
4677
+ }>>;
4678
+ waitForSession: (pendingRef: string, config?: {
4679
+ pollingIntervalMs: number;
4680
+ timeoutMs: number;
4681
+ }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
4682
+ };
4311
4683
  password: {
4312
4684
  signUp: (loginId: string, password: string, user?: {
4313
4685
  email?: string;
@@ -4396,8 +4768,10 @@ declare const _default: {
4396
4768
 
4397
4769
  declare const getSessionToken: () => string;
4398
4770
  declare const getRefreshToken: () => string;
4771
+ declare const isSessionTokenExpired: (token?: string) => boolean;
4772
+ declare const isRefreshTokenExpired: (token?: string) => boolean;
4399
4773
  declare const getJwtPermissions: (token?: any, tenant?: string) => string[];
4400
4774
  declare const getJwtRoles: (token?: any, tenant?: string) => string[];
4401
4775
 
4402
- export { _default$1 as AccessKeyManagement, _default$4 as Descope, _default$2 as RoleManagement, _default$3 as UserManagement, _default as default, getJwtPermissions, getJwtRoles, getRefreshToken, getSdk, getSessionToken, routeGuard, useDescope, useSession, useUser };
4776
+ export { _default$3 as AccessKeyManagement, _default$2 as AuditManagement, _default$6 as Descope, _default$4 as RoleManagement, _default$5 as UserManagement, _default$1 as UserProfile, _default as default, getJwtPermissions, getJwtRoles, getRefreshToken, getSdk, getSessionToken, isRefreshTokenExpired, isSessionTokenExpired, routeGuard, useDescope, useSession, useUser };
4403
4777
  //# sourceMappingURL=index.d.ts.map
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{computed as e,watch as t,inject as s,defineComponent as n,openBlock as r,createElementBlock as o,createElementVNode as a,unref as i,ref as l,readonly as d}from"vue";import u from"@descope/web-component";import c from"@descope/web-js-sdk";import"@descope/user-management-widget";import"@descope/role-management-widget";import"@descope/access-key-management-widget";const p=Symbol("$descope"),g={"x-descope-sdk-name":"vue","x-descope-sdk-version":"2.0.11"},m="undefined"!=typeof window,y=()=>{const e=s(p);if(!e)throw Error("Missing Descope context, make sure you are using the Descope plugin");return e},f=()=>y().options,v=()=>y().sdk,h=()=>{const{session:t}=y();return t.isFetchSessionWasNeverCalled.value&&t.fetchSession(),{isLoading:e((()=>t.isLoading.value||t.isFetchSessionWasNeverCalled.value)),sessionToken:t.session,isAuthenticated:e((()=>!!t.session.value))}},b=()=>{const{user:s,session:n}=y(),r=()=>{!s.user.value&&n.session.value&&s.fetchUser()};return r(),t(n.session,r),{isLoading:e((()=>s.isLoading.value||s.isFetchUserWasNeverCalled.value)),user:s.user}},w=e=>(...t)=>{let s;try{s=e(...t)}catch(e){console.error(e)}return s};let S;const k=e=>{const t=c({...e,persistTokens:m,autoRefresh:m});return S=t,t};S=k({projectId:"temp pid"});const j=()=>m?S?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),_=()=>m?S?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),R=w(((e=j(),t)=>S?.getJwtPermissions(e,t))),U=w(((e=j(),t)=>S?.getJwtRoles(e,t))),I=["project-id","base-url","flow-id","^theme","^locale","^tenant","^debug","^telemetryKey","redirect-url","auto-focus",".errorTransformer","^form","^client"];var q=n({__name:"Descope",props:{flowId:{type:String,required:!0},tenant:{type:String},theme:{type:String},locale:{type:String},debug:{type:Boolean},telemetryKey:{type:String},redirectUrl:{type:String},autoFocus:{type:Boolean},errorTransformer:{type:Function},form:{type:Object},client:{type:Object}},emits:["success","error","ready"],setup(t,{emit:s}){const n=t;u.sdkConfigOverrides={baseHeaders:g,persistTokens:!1,hooks:{get beforeRequest(){return S.httpClient.hooks.beforeRequest},set beforeRequest(e){}}};const{projectId:l,baseUrl:d}=f(),c=v(),p=e((()=>n.form?JSON.stringify(n.form):"")),m=e((()=>n.client?JSON.stringify(n.client):"")),y=async e=>{await(c.httpClient.hooks?.afterRequest?.({},new Response(JSON.stringify(e.detail)))),s("success",e)},h=e=>s("error",e),b=e=>s("ready",e);return(e,s)=>(r(),o("div",null,[a("descope-wc",{"project-id":i(l),"base-url":i(d),"flow-id":t.flowId,"^theme":t.theme,"^locale":t.locale,"^tenant":t.tenant,"^debug":t.debug,"^telemetryKey":t.telemetryKey,"redirect-url":t.redirectUrl,"auto-focus":t.autoFocus,".errorTransformer":t.errorTransformer,"^form":i(p),"^client":i(m),onSuccess:y,onError:h,onReady:b},null,40,I)]))}});q.__file="src/Descope.vue";const T=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var C=n({__name:"UserManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(e){const{projectId:t,baseUrl:s}=f();return(n,l)=>(r(),o("div",null,[a("descope-user-management-widget",{"project-id":i(t),"base-url":i(s),"^theme":e.theme,"^tenant":e.tenant,"^debug":e.debug,"widget-id":e.widgetId},null,8,T)]))}});C.__file="src/UserManagement.vue";const M=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var F=n({__name:"RoleManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(e){const{projectId:t,baseUrl:s}=f();return(n,l)=>(r(),o("div",null,[a("descope-role-management-widget",{"project-id":i(t),"base-url":i(s),"^theme":e.theme,"^tenant":e.tenant,"^debug":e.debug,"widget-id":e.widgetId},null,8,M)]))}});F.__file="src/RoleManagement.vue";const N=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var K=n({__name:"AccessKeyManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(e){const{projectId:t,baseUrl:s}=f();return(n,l)=>(r(),o("div",null,[a("descope-access-key-management-widget",{"project-id":i(t),"base-url":i(s),"^theme":e.theme,"^tenant":e.tenant,"^debug":e.debug,"widget-id":e.widgetId},null,8,N)]))}});K.__file="src/AccessKeyManagement.vue";const L=l(null),O=()=>i(L)?.();let B;const D=()=>B;var J={install:function(s,n){const r=k({...n,persistTokens:!0,autoRefresh:!0,baseHeaders:g});B=r;const o=l(null),a=l(""),u=l(null),c=l(null);r.onSessionTokenChange((e=>{a.value=e})),r.onUserChange((e=>{c.value=e}));const m=async()=>{o.value=!0,await r.refresh(),o.value=!1},y=e((()=>null===o.value)),f=e((()=>null===u.value));L.value=()=>new Promise(((e,s)=>{!a.value&&y.value&&m().catch(s),t((()=>o.value),(()=>!o.value&&e(!!i(a))),{immediate:!0})})),s.provide(p,{session:{fetchSession:m,isLoading:d(o),session:d(a),isFetchSessionWasNeverCalled:y},user:{fetchUser:async()=>{u.value=!0,await r.me(),u.value=!1},isLoading:d(u),user:d(c),isFetchUserWasNeverCalled:f},sdk:r,options:n})}};export{K as AccessKeyManagement,q as Descope,F as RoleManagement,C as UserManagement,J as default,R as getJwtPermissions,U as getJwtRoles,_ as getRefreshToken,D as getSdk,j as getSessionToken,O as routeGuard,v as useDescope,h as useSession,b as useUser};
1
+ import{computed as e,watch as t,inject as s,defineComponent as r,openBlock as n,createElementBlock as o,createElementVNode as i,unref as a,ref as d,readonly as u}from"vue";import l from"@descope/web-component";import c from"@descope/web-js-sdk";import"@descope/user-management-widget";import"@descope/role-management-widget";import"@descope/access-key-management-widget";import"@descope/audit-management-widget";import"@descope/user-profile-widget";const p=Symbol("$descope"),g={"x-descope-sdk-name":"vue","x-descope-sdk-version":"2.0.13"},m="undefined"!=typeof window,y=()=>{const e=s(p);if(!e)throw Error("Missing Descope context, make sure you are using the Descope plugin");return e},h=()=>y().options,b=()=>y().sdk,f=()=>{const{session:t}=y();return t.isFetchSessionWasNeverCalled.value&&t.fetchSession(),{isLoading:e((()=>t.isLoading.value||t.isFetchSessionWasNeverCalled.value)),sessionToken:t.session,isAuthenticated:e((()=>!!t.session.value))}},w=()=>{const{user:s,session:r}=y(),n=()=>{!s.user.value&&r.session.value&&s.fetchUser()};return n(),t(r.session,n),{isLoading:e((()=>s.isLoading.value||s.isFetchUserWasNeverCalled.value)),user:s.user}},v=e=>(...t)=>{let s;try{s=e(...t)}catch(e){console.error(e)}return s};let S;const _=e=>{const t=c({persistTokens:m,storeLastAuthenticatedUser:m,...e,autoRefresh:m});return S=t,t};S=_({projectId:"temp pid"});const j=()=>m?S?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),k=()=>m?S?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),U=(e=j())=>S?.isJwtExpired(e),I=(e=k())=>S?.isJwtExpired(e),R=v(((e=j(),t)=>S?.getJwtPermissions(e,t))),q=v(((e=j(),t)=>S?.getJwtRoles(e,t))),M=["project-id","base-url","flow-id","^theme","^locale","^tenant","^debug","^telemetryKey","redirect-url","auto-focus","store-last-authenticated-user",".errorTransformer","^form","^client"];var T=r({__name:"Descope",props:{flowId:{type:String,required:!0},tenant:{type:String},theme:{type:String},locale:{type:String},debug:{type:Boolean},telemetryKey:{type:String},redirectUrl:{type:String},autoFocus:{type:Boolean},errorTransformer:{type:Function},form:{type:Object},client:{type:Object}},emits:["success","error","ready"],setup(t,{emit:s}){const r=t;l.sdkConfigOverrides={baseHeaders:g,persistTokens:!1,hooks:{get beforeRequest(){return S.httpClient.hooks.beforeRequest},set beforeRequest(e){}}};const{projectId:d,baseUrl:u,storeLastAuthenticatedUser:c}=h(),p=b(),m=e((()=>r.form?JSON.stringify(r.form):"")),y=e((()=>r.client?JSON.stringify(r.client):"")),f=async e=>{await(p.httpClient.hooks?.afterRequest?.({},new Response(JSON.stringify(e.detail)))),s("success",e)},w=e=>s("error",e),v=e=>s("ready",e);return(e,s)=>(n(),o("div",null,[i("descope-wc",{"project-id":a(d),"base-url":a(u),"flow-id":t.flowId,"^theme":t.theme,"^locale":t.locale,"^tenant":t.tenant,"^debug":t.debug,"^telemetryKey":t.telemetryKey,"redirect-url":t.redirectUrl,"auto-focus":t.autoFocus,"store-last-authenticated-user":a(c),".errorTransformer":t.errorTransformer,"^form":a(m),"^client":a(y),onSuccess:f,onError:w,onReady:v},null,40,M)]))}});T.__file="src/Descope.vue";const C=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var A=r({__name:"UserManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(e){const{projectId:t,baseUrl:s}=h();return(r,d)=>(n(),o("div",null,[i("descope-user-management-widget",{"project-id":a(t),"base-url":a(s),"^theme":e.theme,"^tenant":e.tenant,"^debug":e.debug,"widget-id":e.widgetId},null,8,C)]))}});A.__file="src/UserManagement.vue";const L=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var F=r({__name:"RoleManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(e){const{projectId:t,baseUrl:s}=h();return(r,d)=>(n(),o("div",null,[i("descope-role-management-widget",{"project-id":a(t),"base-url":a(s),"^theme":e.theme,"^tenant":e.tenant,"^debug":e.debug,"widget-id":e.widgetId},null,8,L)]))}});F.__file="src/RoleManagement.vue";const N=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var B=r({__name:"AccessKeyManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(e){const{projectId:t,baseUrl:s}=h();return(r,d)=>(n(),o("div",null,[i("descope-access-key-management-widget",{"project-id":a(t),"base-url":a(s),"^theme":e.theme,"^tenant":e.tenant,"^debug":e.debug,"widget-id":e.widgetId},null,8,N)]))}});B.__file="src/AccessKeyManagement.vue";const J=["project-id","base-url","^theme","^tenant","^debug","widget-id"];var K=r({__name:"AuditManagement",props:{tenant:{type:String,required:!0},widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},setup(e){const{projectId:t,baseUrl:s}=h();return(r,d)=>(n(),o("div",null,[i("descope-audit-management-widget",{"project-id":a(t),"base-url":a(s),"^theme":e.theme,"^tenant":e.tenant,"^debug":e.debug,"widget-id":e.widgetId},null,8,J)]))}});K.__file="src/AuditManagement.vue";const x=["project-id","base-url","^theme","^debug","widget-id"];var O=r({__name:"UserProfile",props:{widgetId:{type:String,required:!0},theme:{type:String},debug:{type:Boolean}},emits:["logout"],setup(e,{emit:t}){const s=e=>t("logout",e),{projectId:r,baseUrl:d}=h();return(t,u)=>(n(),o("div",null,[i("descope-user-profile-widget",{"project-id":a(r),"base-url":a(d),"^theme":e.theme,"^debug":e.debug,"widget-id":e.widgetId,onLogout:s},null,40,x)]))}});O.__file="src/UserProfile.vue";const D=d(null),P=()=>a(D)?.();let W;const E=()=>W;var G={install:function(s,r){const n=_({persistTokens:!0,...r,autoRefresh:!0,baseHeaders:g});W=n;const o=d(null),i=d(""),l=d(null),c=d(null);n.onSessionTokenChange((e=>{i.value=e})),n.onUserChange((e=>{c.value=e}));const m=async()=>{o.value=!0,await n.refresh(),o.value=!1},y=e((()=>null===o.value)),h=e((()=>null===l.value));D.value=()=>new Promise(((e,s)=>{!i.value&&y.value&&m().catch(s),t((()=>o.value),(()=>!o.value&&e(!!a(i))),{immediate:!0})})),s.provide(p,{session:{fetchSession:m,isLoading:u(o),session:u(i),isFetchSessionWasNeverCalled:y},user:{fetchUser:async()=>{l.value=!0,await n.me(),l.value=!1},isLoading:u(l),user:u(c),isFetchUserWasNeverCalled:h},sdk:n,options:r})}};export{B as AccessKeyManagement,K as AuditManagement,T as Descope,F as RoleManagement,A as UserManagement,O as UserProfile,G as default,R as getJwtPermissions,q as getJwtRoles,k as getRefreshToken,E as getSdk,j as getSessionToken,I as isRefreshTokenExpired,U as isSessionTokenExpired,P as routeGuard,b as useDescope,f as useSession,w as useUser};
2
2
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descope/vue-sdk",
3
- "version": "2.0.11",
3
+ "version": "2.0.13",
4
4
  "main": "dist/index.cjs",
5
5
  "module": "dist/index.mjs",
6
6
  "type": "module",
@@ -37,10 +37,12 @@
37
37
  ]
38
38
  },
39
39
  "dependencies": {
40
- "@descope/user-management-widget": "0.4.27",
41
- "@descope/role-management-widget": "0.1.26",
42
- "@descope/access-key-management-widget": "0.1.26",
43
- "@descope/web-component": "3.8.32"
40
+ "@descope/access-key-management-widget": "0.1.47",
41
+ "@descope/audit-management-widget": "0.1.10",
42
+ "@descope/role-management-widget": "0.1.45",
43
+ "@descope/user-management-widget": "0.4.47",
44
+ "@descope/user-profile-widget": "0.0.11",
45
+ "@descope/web-component": "3.11.5"
44
46
  },
45
47
  "peerDependencies": {
46
48
  "vue": ">=3"