UNPKG

@zitadel/vue

Version:

Wraps vue-oidc-client to provide a simple interface for ZITADEL

37 lines (36 loc) 1.64 kB
import { createOidcAuth, SignInType, LogLevel } from 'vue-oidc-client/vue3'; export function createZITADELAuth(zitadelConfig, authName = "zitadel", defaultSignInType = SignInType.Window, appUrl = `${window.location.origin}/`, oidcConfig, logger = console, logLevel = LogLevel.Error) { const cfg = { response_type: 'code', scope: 'openid profile email offline_access' + (zitadelConfig.project_resource_id ? ` urn:zitadel:iam:org:project:id:${zitadelConfig.project_resource_id}:aud` + ' urn:zitadel:iam:org:projects:roles' : '') + (zitadelConfig.org_id ? ` urn:zitadel:iam:org:id:${zitadelConfig.org_id}` : ''), authority: zitadelConfig.issuer, client_id: zitadelConfig.client_id, loadUserInfo: true, automaticSilentRenew: true, ...oidcConfig, // everything can be overridden! }; const oidcAuth = createOidcAuth(authName, defaultSignInType, appUrl, cfg, logger, logLevel); return { oidcAuth, hasRole: (role) => { if (!zitadelConfig.project_resource_id) { throw new Error('projectResourceID is required for hasRole'); } const roles = oidcAuth.userProfile[`urn:zitadel:iam:org:project:${zitadelConfig.project_resource_id}:roles`]; if (!roles) { return false; } if (Array.isArray(roles)) { return roles.find(r => r[role]); } else { return Object.keys(roles).some(key => key === role); } } }; }