@authdog/vue 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,73 @@
1
+ # @authdog/vue
2
+
3
+ Authdog Vue SDK for authentication and user management.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @authdog/vue
9
+ # or
10
+ yarn add @authdog/vue
11
+ # or
12
+ pnpm add @authdog/vue
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ### Client-side
18
+
19
+ ```vue
20
+ <template>
21
+ <div>
22
+ <AuthdogProvider>
23
+ <YourApp />
24
+ </AuthdogProvider>
25
+ </div>
26
+ </template>
27
+
28
+ <script setup lang="ts">
29
+ import { AuthdogProvider } from '@authdog/vue/client'
30
+ </script>
31
+ ```
32
+
33
+ ### Composables
34
+
35
+ ```vue
36
+ <script setup lang="ts">
37
+ import { useSession, useUser } from '@authdog/vue'
38
+
39
+ const { session, isLoading } = useSession()
40
+ const { user } = useUser()
41
+ </script>
42
+ ```
43
+
44
+ ### Server-side
45
+
46
+ ```typescript
47
+ import { createAuthdogServer } from '@authdog/vue/server'
48
+
49
+ const authdog = createAuthdogServer({
50
+ publicKey: process.env.AUTHDOG_PUBLIC_KEY!,
51
+ secretKey: process.env.AUTHDOG_SECRET_KEY!,
52
+ })
53
+ ```
54
+
55
+ ## API Reference
56
+
57
+ ### Composables
58
+
59
+ - `useSession()` - Get current session information
60
+ - `useUser()` - Get current user information
61
+ - `useSignIn()` - Sign in functionality
62
+ - `useSignUp()` - Sign up functionality
63
+ - `useSignOut()` - Sign out functionality
64
+
65
+ ### Components
66
+
67
+ - `AuthdogProvider` - Provider component for authentication context
68
+
69
+ ### Server
70
+
71
+ - `createAuthdogServer()` - Create server instance
72
+ - `getSessionCookie()` - Get session cookie
73
+ - `logoutHandler()` - Handle logout
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1,2 @@
1
+
2
+ export { }
package/dist/client.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var m=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var b=(r,o,p,f)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of x(o))!a.call(r,e)&&e!==p&&m(r,e,{get:()=>o[e],enumerable:!(f=t(o,e))||f.enumerable});return r};var c=r=>b(m({},"__esModule",{value:!0}),r);var d={};module.exports=c(d);
2
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client.ts"],"sourcesContent":["export * from './client'\n"],"mappings":"+WAAA,IAAAA,EAAA,kBAAAC,EAAAD","names":["client_exports","__toCommonJS"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,103 @@
1
+ import * as vue from 'vue';
2
+
3
+ declare const useSession: () => {
4
+ session: {
5
+ token: string | null;
6
+ isAuthenticated: boolean;
7
+ };
8
+ isLoading: boolean;
9
+ };
10
+
11
+ declare const useUser: () => {
12
+ user: vue.ComputedRef<any>;
13
+ isLoading: vue.ComputedRef<boolean>;
14
+ error: vue.ComputedRef<Error | null>;
15
+ isAuthenticated: vue.ComputedRef<boolean>;
16
+ fetchUser: (publicKey: string) => Promise<{
17
+ id: string;
18
+ environmentId: string;
19
+ externalId: string;
20
+ userName: string;
21
+ displayName: string;
22
+ nickName: string;
23
+ profileUrl: string;
24
+ title: string;
25
+ userType: string;
26
+ preferredLanguage: string | null;
27
+ locale: string | null;
28
+ timezone: string | null;
29
+ active: boolean;
30
+ provider: string;
31
+ lastLogin: string;
32
+ createdAt: string;
33
+ updatedAt: string;
34
+ names: {
35
+ id: string;
36
+ userId: string;
37
+ formatted: string | null;
38
+ familyName: string;
39
+ givenName: string;
40
+ middleName: string | null;
41
+ honorificPrefix: string | null;
42
+ honorificSuffix: string | null;
43
+ createdAt: string;
44
+ updatedAt: string;
45
+ };
46
+ addresses: [];
47
+ emails: {
48
+ value: string;
49
+ primary: boolean;
50
+ type: string;
51
+ }[];
52
+ phoneNumbers: [];
53
+ ims: [];
54
+ photos: {
55
+ value: string;
56
+ type: string;
57
+ }[];
58
+ } | null>;
59
+ };
60
+
61
+ declare const useSignIn: () => {
62
+ signIn: (publicKey: string, redirectUrl?: string) => Promise<void>;
63
+ isLoading: vue.ComputedRef<boolean>;
64
+ error: vue.ComputedRef<Error | null>;
65
+ };
66
+
67
+ declare const useSignUp: () => {
68
+ signUp: (publicKey: string, redirectUrl?: string) => Promise<void>;
69
+ isLoading: vue.ComputedRef<boolean>;
70
+ error: vue.ComputedRef<Error | null>;
71
+ };
72
+
73
+ declare const useSignOut: () => {
74
+ signOut: () => Promise<void>;
75
+ isLoading: vue.ComputedRef<boolean>;
76
+ error: vue.ComputedRef<Error | null>;
77
+ };
78
+
79
+ declare const useOrganization: () => {
80
+ organization: vue.ComputedRef<any>;
81
+ isLoading: vue.ComputedRef<boolean>;
82
+ error: vue.ComputedRef<Error | null>;
83
+ fetchOrganization: (organizationId: string) => Promise<any>;
84
+ };
85
+
86
+ declare const useOrganizationList: () => {
87
+ organizations: vue.ComputedRef<any[]>;
88
+ isLoading: vue.ComputedRef<boolean>;
89
+ error: vue.ComputedRef<Error | null>;
90
+ fetchOrganizations: () => Promise<any[]>;
91
+ };
92
+
93
+ declare const useAuthz: () => {
94
+ permissions: vue.ComputedRef<string[]>;
95
+ isLoading: vue.ComputedRef<boolean>;
96
+ error: vue.ComputedRef<Error | null>;
97
+ fetchPermissions: () => Promise<string[]>;
98
+ hasPermission: (permission: string) => boolean;
99
+ hasAnyPermission: (permissionList: string[]) => boolean;
100
+ hasAllPermissions: (permissionList: string[]) => boolean;
101
+ };
102
+
103
+ export { useAuthz, useOrganization, useOrganizationList, useSession, useSignIn, useSignOut, useSignUp, useUser };
@@ -0,0 +1,103 @@
1
+ import * as vue from 'vue';
2
+
3
+ declare const useSession: () => {
4
+ session: {
5
+ token: string | null;
6
+ isAuthenticated: boolean;
7
+ };
8
+ isLoading: boolean;
9
+ };
10
+
11
+ declare const useUser: () => {
12
+ user: vue.ComputedRef<any>;
13
+ isLoading: vue.ComputedRef<boolean>;
14
+ error: vue.ComputedRef<Error | null>;
15
+ isAuthenticated: vue.ComputedRef<boolean>;
16
+ fetchUser: (publicKey: string) => Promise<{
17
+ id: string;
18
+ environmentId: string;
19
+ externalId: string;
20
+ userName: string;
21
+ displayName: string;
22
+ nickName: string;
23
+ profileUrl: string;
24
+ title: string;
25
+ userType: string;
26
+ preferredLanguage: string | null;
27
+ locale: string | null;
28
+ timezone: string | null;
29
+ active: boolean;
30
+ provider: string;
31
+ lastLogin: string;
32
+ createdAt: string;
33
+ updatedAt: string;
34
+ names: {
35
+ id: string;
36
+ userId: string;
37
+ formatted: string | null;
38
+ familyName: string;
39
+ givenName: string;
40
+ middleName: string | null;
41
+ honorificPrefix: string | null;
42
+ honorificSuffix: string | null;
43
+ createdAt: string;
44
+ updatedAt: string;
45
+ };
46
+ addresses: [];
47
+ emails: {
48
+ value: string;
49
+ primary: boolean;
50
+ type: string;
51
+ }[];
52
+ phoneNumbers: [];
53
+ ims: [];
54
+ photos: {
55
+ value: string;
56
+ type: string;
57
+ }[];
58
+ } | null>;
59
+ };
60
+
61
+ declare const useSignIn: () => {
62
+ signIn: (publicKey: string, redirectUrl?: string) => Promise<void>;
63
+ isLoading: vue.ComputedRef<boolean>;
64
+ error: vue.ComputedRef<Error | null>;
65
+ };
66
+
67
+ declare const useSignUp: () => {
68
+ signUp: (publicKey: string, redirectUrl?: string) => Promise<void>;
69
+ isLoading: vue.ComputedRef<boolean>;
70
+ error: vue.ComputedRef<Error | null>;
71
+ };
72
+
73
+ declare const useSignOut: () => {
74
+ signOut: () => Promise<void>;
75
+ isLoading: vue.ComputedRef<boolean>;
76
+ error: vue.ComputedRef<Error | null>;
77
+ };
78
+
79
+ declare const useOrganization: () => {
80
+ organization: vue.ComputedRef<any>;
81
+ isLoading: vue.ComputedRef<boolean>;
82
+ error: vue.ComputedRef<Error | null>;
83
+ fetchOrganization: (organizationId: string) => Promise<any>;
84
+ };
85
+
86
+ declare const useOrganizationList: () => {
87
+ organizations: vue.ComputedRef<any[]>;
88
+ isLoading: vue.ComputedRef<boolean>;
89
+ error: vue.ComputedRef<Error | null>;
90
+ fetchOrganizations: () => Promise<any[]>;
91
+ };
92
+
93
+ declare const useAuthz: () => {
94
+ permissions: vue.ComputedRef<string[]>;
95
+ isLoading: vue.ComputedRef<boolean>;
96
+ error: vue.ComputedRef<Error | null>;
97
+ fetchPermissions: () => Promise<string[]>;
98
+ hasPermission: (permission: string) => boolean;
99
+ hasAnyPermission: (permissionList: string[]) => boolean;
100
+ hasAllPermissions: (permissionList: string[]) => boolean;
101
+ };
102
+
103
+ export { useAuthz, useOrganization, useOrganizationList, useSession, useSignIn, useSignOut, useSignUp, useUser };
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var x=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var N=(t,e)=>{for(var r in e)x(t,r,{get:e[r],enumerable:!0})},j=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of I(e))!b.call(t,s)&&s!==r&&x(t,s,{get:()=>e[s],enumerable:!(n=S(e,s))||n.enumerable});return t};var H=t=>j(x({},"__esModule",{value:!0}),t);var D={};N(D,{useAuthz:()=>z,useOrganization:()=>_,useOrganizationList:()=>L,useSession:()=>E,useSignIn:()=>T,useSignOut:()=>U,useSignUp:()=>C,useUser:()=>O});module.exports=H(D);var y=require("vue");var m=require("vue"),a=Symbol("authdog"),X=(0,m.defineComponent)({name:"AuthdogProvider",setup(t,{slots:e}){let r=(0,m.ref)(!0),n=(0,m.ref)(null),s=o=>{n.value=o};(0,m.onMounted)(()=>{if(typeof window<"u"){let o=new URL(window.location.href),i=o.searchParams.get("token");if(i){o.searchParams.delete("token"),window.history.replaceState({},document.title,o.toString()),localStorage.setItem("token",i),s(i),window.location.reload();return}let l=localStorage.getItem("token");l&&s(l),r.value=!1}else r.value=!1});let u={isLoading:r.value,token:n.value,setToken:s};return(0,m.provide)(a,u),()=>{var o;return(o=e.default)==null?void 0:o.call(e)}}});var E=()=>{let t=(0,y.inject)(a);if(!t)throw new Error("useSession must be used within AuthdogProvider");return{session:(0,y.computed)(()=>({token:t.token,isAuthenticated:!!t.token})).value,isLoading:t.isLoading}};var c=require("vue");var k=t=>{if(!t)throw new Error("Public key is not defined");if(!t.startsWith("pk_"))throw new Error("Invalid public key");try{return JSON.parse(Buffer.from(t.replace("pk_",""),"base64").toString("utf-8"))}catch{throw new Error("Failed to parse public key")}};var A=t=>{if(!t)throw new Error("Public key is not defined");if(!t.startsWith("pk_"))throw new Error("Invalid public key")},P=async(t,e)=>{A(t);let r=k(t),n=await fetch(`${r==null?void 0:r.identityHost}/oidc/${r==null?void 0:r.environmentId}/userinfo`,{headers:{authorization:`Bearer ${e}`}});if(!n.ok)throw new Error("Failed to fetch user info");return await n.json()},W={maxAge:60*60*24*7,path:"/",httpOnly:!0};var O=()=>{let t=(0,c.inject)(a),e=(0,c.ref)(null),r=(0,c.ref)(!1),n=(0,c.ref)(null);if(!t)throw new Error("useUser must be used within AuthdogProvider");let s=async o=>{if(!t.token)return null;r.value=!0,n.value=null;try{A(o);let i=await P(o,t.token);return e.value=(i==null?void 0:i.user)||null,(i==null?void 0:i.user)||null}catch(i){return n.value=i,null}finally{r.value=!1}},u=(0,c.computed)(()=>!!t.token&&!!e.value);return{user:(0,c.computed)(()=>e.value),isLoading:(0,c.computed)(()=>r.value),error:(0,c.computed)(()=>n.value),isAuthenticated:u,fetchUser:s}};var h=require("vue");var T=()=>{let t=(0,h.inject)(a),e=(0,h.ref)(!1),r=(0,h.ref)(null);if(!t)throw new Error("useSignIn must be used within AuthdogProvider");return{signIn:async(s,u)=>{e.value=!0,r.value=null;try{let o=JSON.parse(Buffer.from(s.replace("pk_",""),"base64").toString("utf-8")),i=new URL(`${o.identityHost}/oidc/${o.environmentId}/authorize`);i.searchParams.set("client_id",s),i.searchParams.set("response_type","code"),i.searchParams.set("scope","openid profile email"),i.searchParams.set("redirect_uri",u||window.location.origin),window.location.href=i.toString()}catch(o){r.value=o}finally{e.value=!1}},isLoading:(0,h.computed)(()=>e.value),error:(0,h.computed)(()=>r.value)}};var p=require("vue");var C=()=>{let t=(0,p.inject)(a),e=(0,p.ref)(!1),r=(0,p.ref)(null);if(!t)throw new Error("useSignUp must be used within AuthdogProvider");return{signUp:async(s,u)=>{e.value=!0,r.value=null;try{let o=JSON.parse(Buffer.from(s.replace("pk_",""),"base64").toString("utf-8")),i=new URL(`${o.identityHost}/oidc/${o.environmentId}/authorize`);i.searchParams.set("client_id",s),i.searchParams.set("response_type","code"),i.searchParams.set("scope","openid profile email"),i.searchParams.set("redirect_uri",u||window.location.origin),i.searchParams.set("prompt","signup"),window.location.href=i.toString()}catch(o){r.value=o}finally{e.value=!1}},isLoading:(0,p.computed)(()=>e.value),error:(0,p.computed)(()=>r.value)}};var v=require("vue");var U=()=>{let t=(0,v.inject)(a),e=(0,v.ref)(!1),r=(0,v.ref)(null);if(!t)throw new Error("useSignOut must be used within AuthdogProvider");return{signOut:async()=>{e.value=!0,r.value=null;try{t.setToken(null),typeof window<"u"&&localStorage.removeItem("token"),typeof window<"u"&&(window.location.href="/logout")}catch(s){r.value=s}finally{e.value=!1}},isLoading:(0,v.computed)(()=>e.value),error:(0,v.computed)(()=>r.value)}};var d=require("vue");var _=()=>{let t=(0,d.inject)(a),e=(0,d.ref)(null),r=(0,d.ref)(!1),n=(0,d.ref)(null);if(!t)throw new Error("useOrganization must be used within AuthdogProvider");let s=async u=>{if(!t.token)return null;r.value=!0,n.value=null;try{let o=await fetch(`/api/organizations/${u}`,{headers:{Authorization:`Bearer ${t.token}`}});if(!o.ok)throw new Error("Failed to fetch organization");return e.value=await o.json(),e.value}catch(o){return n.value=o,null}finally{r.value=!1}};return{organization:(0,d.computed)(()=>e.value),isLoading:(0,d.computed)(()=>r.value),error:(0,d.computed)(()=>n.value),fetchOrganization:s}};var g=require("vue");var L=()=>{let t=(0,g.inject)(a),e=(0,g.ref)([]),r=(0,g.ref)(!1),n=(0,g.ref)(null);if(!t)throw new Error("useOrganizationList must be used within AuthdogProvider");let s=async()=>{if(!t.token)return[];r.value=!0,n.value=null;try{let u=await fetch("/api/organizations",{headers:{Authorization:`Bearer ${t.token}`}});if(!u.ok)throw new Error("Failed to fetch organizations");let o=await u.json();return e.value=o.organizations||[],e.value}catch(u){return n.value=u,[]}finally{r.value=!1}};return{organizations:(0,g.computed)(()=>e.value),isLoading:(0,g.computed)(()=>r.value),error:(0,g.computed)(()=>n.value),fetchOrganizations:s}};var f=require("vue");var z=()=>{let t=(0,f.inject)(a),e=(0,f.ref)([]),r=(0,f.ref)(!1),n=(0,f.ref)(null);if(!t)throw new Error("useAuthz must be used within AuthdogProvider");let s=async()=>{if(!t.token)return[];r.value=!0,n.value=null;try{let l=await fetch("/api/permissions",{headers:{Authorization:`Bearer ${t.token}`}});if(!l.ok)throw new Error("Failed to fetch permissions");let w=await l.json();return e.value=w.permissions||[],e.value}catch(l){return n.value=l,[]}finally{r.value=!1}},u=l=>e.value.includes(l),o=l=>l.some(w=>e.value.includes(w)),i=l=>l.every(w=>e.value.includes(w));return{permissions:(0,f.computed)(()=>e.value),isLoading:(0,f.computed)(()=>r.value),error:(0,f.computed)(()=>n.value),fetchPermissions:s,hasPermission:u,hasAnyPermission:o,hasAllPermissions:i}};0&&(module.exports={useAuthz,useOrganization,useOrganizationList,useSession,useSignIn,useSignOut,useSignUp,useUser});
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/composables/use-session.ts","../src/client/provider.ts","../src/composables/use-user.ts","../src/commons.ts","../src/client/session.ts","../src/composables/use-signin.ts","../src/composables/use-signup.ts","../src/composables/use-signout.ts","../src/composables/use-organization.ts","../src/composables/use-organization-list.ts","../src/composables/use-authz.ts"],"sourcesContent":["export * from './client'\nexport * from './composables'\n","import { computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useSession = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n\n if (!context) {\n throw new Error('useSession must be used within AuthdogProvider')\n }\n\n const session = computed(() => ({\n token: context.token,\n isAuthenticated: !!context.token,\n }))\n\n return {\n session: session.value,\n isLoading: context.isLoading,\n }\n}\n","import { defineComponent, onMounted, ref, provide, inject, type InjectionKey } from 'vue'\n\nexport interface AuthdogContext {\n isLoading: boolean\n token: string | null\n setToken: (token: string | null) => void\n}\n\nexport const AUTHDOG_CONTEXT_KEY: InjectionKey<AuthdogContext> = Symbol('authdog')\n\nexport const AuthdogProvider = defineComponent({\n name: 'AuthdogProvider',\n setup(_, { slots }) {\n const isLoading = ref(true)\n const token = ref<string | null>(null)\n\n const setToken = (newToken: string | null) => {\n token.value = newToken\n }\n\n onMounted(() => {\n // Check if we're in the browser\n if (typeof window !== 'undefined') {\n // Check if there's a token in the URL\n const url = new URL(window.location.href)\n const urlToken = url.searchParams.get('token')\n\n if (urlToken) {\n // Remove token from URL without triggering a page reload\n url.searchParams.delete('token')\n window.history.replaceState({}, document.title, url.toString())\n \n // Store token and reload to ensure server processes it\n localStorage.setItem('token', urlToken)\n setToken(urlToken)\n \n // Force a reload to ensure the server processes the token\n window.location.reload()\n return\n }\n\n // Check for existing token in localStorage\n const existingToken = localStorage.getItem('token')\n if (existingToken) {\n setToken(existingToken)\n }\n\n // If no token, we're done loading\n isLoading.value = false\n } else {\n // If we're on the server, don't show loading state\n isLoading.value = false\n }\n })\n\n const context: AuthdogContext = {\n isLoading: isLoading.value,\n token: token.value,\n setToken\n }\n\n provide(AUTHDOG_CONTEXT_KEY, context)\n\n return () => slots.default?.()\n }\n})\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\nimport { fetchUserData, validatePublicKey } from '../client/session'\n\nexport const useUser = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const user = ref<any>(null)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useUser must be used within AuthdogProvider')\n }\n\n const fetchUser = async (publicKey: string) => {\n if (!context.token) {\n return null\n }\n\n isLoading.value = true\n error.value = null\n\n try {\n validatePublicKey(publicKey)\n const userData = await fetchUserData(publicKey, context.token)\n user.value = userData?.user || null\n return userData?.user || null\n } catch (err) {\n error.value = err as Error\n return null\n } finally {\n isLoading.value = false\n }\n }\n\n const isAuthenticated = computed(() => !!context.token && !!user.value)\n\n return {\n user: computed(() => user.value),\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n isAuthenticated,\n fetchUser,\n }\n}\n","export interface PublicKeyPayload {\n environmentId: string\n identityHost: string\n}\n\nexport const getPublicKeyPayload = (publicKey: string): PublicKeyPayload => {\n if (!publicKey) {\n throw new Error('Public key is not defined')\n }\n\n if (!publicKey.startsWith('pk_')) {\n throw new Error('Invalid public key')\n }\n\n try {\n return JSON.parse(\n Buffer.from(publicKey.replace('pk_', ''), 'base64').toString('utf-8'),\n )\n } catch (e) {\n throw new Error('Failed to parse public key')\n }\n}\n","import { getPublicKeyPayload } from '../commons'\n\nexport const getTokenFromUri = (url: string): string | null => {\n return new URL(url).searchParams.get('token')\n}\n\ninterface IFetchUserData {\n user: {\n id: string\n environmentId: string\n externalId: string\n userName: string\n displayName: string\n nickName: string\n profileUrl: string\n title: string\n userType: string\n preferredLanguage: string | null\n locale: string | null\n timezone: string | null\n active: boolean\n provider: string\n lastLogin: string\n createdAt: string\n updatedAt: string\n names: {\n id: string\n userId: string\n formatted: string | null\n familyName: string\n givenName: string\n middleName: string | null\n honorificPrefix: string | null\n honorificSuffix: string | null\n createdAt: string\n updatedAt: string\n }\n addresses: []\n emails: {\n value: string\n primary: boolean\n type: string\n }[]\n phoneNumbers: []\n ims: []\n photos: {\n value: string\n type: string\n }[]\n }\n meta: {\n code: number\n message: string\n }\n}\n\nexport const validatePublicKey = (publicKey: string) => {\n if (!publicKey) {\n throw new Error('Public key is not defined')\n }\n\n if (!publicKey.startsWith('pk_')) {\n throw new Error('Invalid public key')\n }\n}\n\nexport const fetchUserData = async (\n publicKey: string,\n token: string,\n): Promise<IFetchUserData | null> => {\n validatePublicKey(publicKey)\n const publicKeyObj = getPublicKeyPayload(publicKey)\n const userData = await fetch(\n `${publicKeyObj?.identityHost}/oidc/${publicKeyObj?.environmentId}/userinfo`,\n {\n headers: {\n authorization: `Bearer ${token}`,\n },\n },\n )\n\n if (!userData.ok) {\n throw new Error('Failed to fetch user info')\n }\n\n return await userData.json()\n}\n\nexport const browserCookiesOptions = {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: '/',\n httpOnly: true,\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useSignIn = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useSignIn must be used within AuthdogProvider')\n }\n\n const signIn = async (publicKey: string, redirectUrl?: string) => {\n isLoading.value = true\n error.value = null\n\n try {\n const publicKeyObj = JSON.parse(\n Buffer.from(publicKey.replace('pk_', ''), 'base64').toString('utf-8')\n )\n \n const authUrl = new URL(`${publicKeyObj.identityHost}/oidc/${publicKeyObj.environmentId}/authorize`)\n authUrl.searchParams.set('client_id', publicKey)\n authUrl.searchParams.set('response_type', 'code')\n authUrl.searchParams.set('scope', 'openid profile email')\n authUrl.searchParams.set('redirect_uri', redirectUrl || window.location.origin)\n \n window.location.href = authUrl.toString()\n } catch (err) {\n error.value = err as Error\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n signIn,\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useSignUp = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useSignUp must be used within AuthdogProvider')\n }\n\n const signUp = async (publicKey: string, redirectUrl?: string) => {\n isLoading.value = true\n error.value = null\n\n try {\n const publicKeyObj = JSON.parse(\n Buffer.from(publicKey.replace('pk_', ''), 'base64').toString('utf-8')\n )\n \n const authUrl = new URL(`${publicKeyObj.identityHost}/oidc/${publicKeyObj.environmentId}/authorize`)\n authUrl.searchParams.set('client_id', publicKey)\n authUrl.searchParams.set('response_type', 'code')\n authUrl.searchParams.set('scope', 'openid profile email')\n authUrl.searchParams.set('redirect_uri', redirectUrl || window.location.origin)\n authUrl.searchParams.set('prompt', 'signup')\n \n window.location.href = authUrl.toString()\n } catch (err) {\n error.value = err as Error\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n signUp,\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useSignOut = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useSignOut must be used within AuthdogProvider')\n }\n\n const signOut = async () => {\n isLoading.value = true\n error.value = null\n\n try {\n // Clear token from context\n context.setToken(null)\n \n // Clear token from localStorage\n if (typeof window !== 'undefined') {\n localStorage.removeItem('token')\n }\n \n // Redirect to logout endpoint or home page\n if (typeof window !== 'undefined') {\n window.location.href = '/logout'\n }\n } catch (err) {\n error.value = err as Error\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n signOut,\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useOrganization = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const organization = ref<any>(null)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useOrganization must be used within AuthdogProvider')\n }\n\n const fetchOrganization = async (organizationId: string) => {\n if (!context.token) {\n return null\n }\n\n isLoading.value = true\n error.value = null\n\n try {\n // This would be implemented based on your organization API\n // For now, returning a placeholder\n const response = await fetch(`/api/organizations/${organizationId}`, {\n headers: {\n 'Authorization': `Bearer ${context.token}`,\n },\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch organization')\n }\n\n organization.value = await response.json()\n return organization.value\n } catch (err) {\n error.value = err as Error\n return null\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n organization: computed(() => organization.value),\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n fetchOrganization,\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useOrganizationList = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const organizations = ref<any[]>([])\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useOrganizationList must be used within AuthdogProvider')\n }\n\n const fetchOrganizations = async () => {\n if (!context.token) {\n return []\n }\n\n isLoading.value = true\n error.value = null\n\n try {\n // This would be implemented based on your organizations API\n // For now, returning a placeholder\n const response = await fetch('/api/organizations', {\n headers: {\n 'Authorization': `Bearer ${context.token}`,\n },\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch organizations')\n }\n\n const data = await response.json()\n organizations.value = data.organizations || []\n return organizations.value\n } catch (err) {\n error.value = err as Error\n return []\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n organizations: computed(() => organizations.value),\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n fetchOrganizations,\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useAuthz = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const permissions = ref<string[]>([])\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useAuthz must be used within AuthdogProvider')\n }\n\n const fetchPermissions = async () => {\n if (!context.token) {\n return []\n }\n\n isLoading.value = true\n error.value = null\n\n try {\n // This would be implemented based on your authorization API\n // For now, returning a placeholder\n const response = await fetch('/api/permissions', {\n headers: {\n 'Authorization': `Bearer ${context.token}`,\n },\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch permissions')\n }\n\n const data = await response.json()\n permissions.value = data.permissions || []\n return permissions.value\n } catch (err) {\n error.value = err as Error\n return []\n } finally {\n isLoading.value = false\n }\n }\n\n const hasPermission = (permission: string) => {\n return permissions.value.includes(permission)\n }\n\n const hasAnyPermission = (permissionList: string[]) => {\n return permissionList.some(permission => permissions.value.includes(permission))\n }\n\n const hasAllPermissions = (permissionList: string[]) => {\n return permissionList.every(permission => permissions.value.includes(permission))\n }\n\n return {\n permissions: computed(() => permissions.value),\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n fetchPermissions,\n hasPermission,\n hasAnyPermission,\n hasAllPermissions,\n }\n}\n"],"mappings":"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","names":["index_exports","__export","useAuthz","useOrganization","useOrganizationList","useSession","useSignIn","useSignOut","useSignUp","useUser","__toCommonJS","import_vue","import_vue","AUTHDOG_CONTEXT_KEY","AuthdogProvider","_","slots","isLoading","token","setToken","newToken","url","urlToken","existingToken","context","_a","useSession","context","AUTHDOG_CONTEXT_KEY","import_vue","getPublicKeyPayload","publicKey","validatePublicKey","publicKey","fetchUserData","token","publicKeyObj","getPublicKeyPayload","userData","browserCookiesOptions","useUser","context","AUTHDOG_CONTEXT_KEY","user","isLoading","error","fetchUser","publicKey","validatePublicKey","userData","fetchUserData","err","isAuthenticated","import_vue","useSignIn","context","AUTHDOG_CONTEXT_KEY","isLoading","error","publicKey","redirectUrl","publicKeyObj","authUrl","err","import_vue","useSignUp","context","AUTHDOG_CONTEXT_KEY","isLoading","error","publicKey","redirectUrl","publicKeyObj","authUrl","err","import_vue","useSignOut","context","AUTHDOG_CONTEXT_KEY","isLoading","error","err","import_vue","useOrganization","context","AUTHDOG_CONTEXT_KEY","organization","isLoading","error","fetchOrganization","organizationId","response","err","import_vue","useOrganizationList","context","AUTHDOG_CONTEXT_KEY","organizations","isLoading","error","fetchOrganizations","response","data","err","import_vue","useAuthz","context","AUTHDOG_CONTEXT_KEY","permissions","isLoading","error","fetchPermissions","response","data","err","hasPermission","permission","hasAnyPermission","permissionList","hasAllPermissions"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import{computed as S,inject as I}from"vue";import{defineComponent as _,onMounted as L,ref as x,provide as z}from"vue";var a=Symbol("authdog"),V=_({name:"AuthdogProvider",setup(e,{slots:t}){let r=x(!0),i=x(null),s=o=>{i.value=o};L(()=>{if(typeof window<"u"){let o=new URL(window.location.href),n=o.searchParams.get("token");if(n){o.searchParams.delete("token"),window.history.replaceState({},document.title,o.toString()),localStorage.setItem("token",n),s(n),window.location.reload();return}let l=localStorage.getItem("token");l&&s(l),r.value=!1}else r.value=!1});let u={isLoading:r.value,token:i.value,setToken:s};return z(a,u),()=>{var o;return(o=t.default)==null?void 0:o.call(t)}}});var b=()=>{let e=I(a);if(!e)throw new Error("useSession must be used within AuthdogProvider");return{session:S(()=>({token:e.token,isAuthenticated:!!e.token})).value,isLoading:e.isLoading}};import{ref as f,computed as d,inject as N}from"vue";var A=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key");try{return JSON.parse(Buffer.from(e.replace("pk_",""),"base64").toString("utf-8"))}catch{throw new Error("Failed to parse public key")}};var g=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key")},E=async(e,t)=>{g(e);let r=A(e),i=await fetch(`${r==null?void 0:r.identityHost}/oidc/${r==null?void 0:r.environmentId}/userinfo`,{headers:{authorization:`Bearer ${t}`}});if(!i.ok)throw new Error("Failed to fetch user info");return await i.json()},ie={maxAge:60*60*24*7,path:"/",httpOnly:!0};var j=()=>{let e=N(a),t=f(null),r=f(!1),i=f(null);if(!e)throw new Error("useUser must be used within AuthdogProvider");let s=async o=>{if(!e.token)return null;r.value=!0,i.value=null;try{g(o);let n=await E(o,e.token);return t.value=(n==null?void 0:n.user)||null,(n==null?void 0:n.user)||null}catch(n){return i.value=n,null}finally{r.value=!1}},u=d(()=>!!e.token&&!!t.value);return{user:d(()=>t.value),isLoading:d(()=>r.value),error:d(()=>i.value),isAuthenticated:u,fetchUser:s}};import{ref as k,computed as P,inject as H}from"vue";var D=()=>{let e=H(a),t=k(!1),r=k(null);if(!e)throw new Error("useSignIn must be used within AuthdogProvider");return{signIn:async(s,u)=>{t.value=!0,r.value=null;try{let o=JSON.parse(Buffer.from(s.replace("pk_",""),"base64").toString("utf-8")),n=new URL(`${o.identityHost}/oidc/${o.environmentId}/authorize`);n.searchParams.set("client_id",s),n.searchParams.set("response_type","code"),n.searchParams.set("scope","openid profile email"),n.searchParams.set("redirect_uri",u||window.location.origin),window.location.href=n.toString()}catch(o){r.value=o}finally{t.value=!1}},isLoading:P(()=>t.value),error:P(()=>r.value)}};import{ref as O,computed as T,inject as $}from"vue";var G=()=>{let e=$(a),t=O(!1),r=O(null);if(!e)throw new Error("useSignUp must be used within AuthdogProvider");return{signUp:async(s,u)=>{t.value=!0,r.value=null;try{let o=JSON.parse(Buffer.from(s.replace("pk_",""),"base64").toString("utf-8")),n=new URL(`${o.identityHost}/oidc/${o.environmentId}/authorize`);n.searchParams.set("client_id",s),n.searchParams.set("response_type","code"),n.searchParams.set("scope","openid profile email"),n.searchParams.set("redirect_uri",u||window.location.origin),n.searchParams.set("prompt","signup"),window.location.href=n.toString()}catch(o){r.value=o}finally{t.value=!1}},isLoading:T(()=>t.value),error:T(()=>r.value)}};import{ref as C,computed as U,inject as K}from"vue";var X=()=>{let e=K(a),t=C(!1),r=C(null);if(!e)throw new Error("useSignOut must be used within AuthdogProvider");return{signOut:async()=>{t.value=!0,r.value=null;try{e.setToken(null),typeof window<"u"&&localStorage.removeItem("token"),typeof window<"u"&&(window.location.href="/logout")}catch(s){r.value=s}finally{t.value=!1}},isLoading:U(()=>t.value),error:U(()=>r.value)}};import{ref as m,computed as h,inject as Y}from"vue";var F=()=>{let e=Y(a),t=m(null),r=m(!1),i=m(null);if(!e)throw new Error("useOrganization must be used within AuthdogProvider");let s=async u=>{if(!e.token)return null;r.value=!0,i.value=null;try{let o=await fetch(`/api/organizations/${u}`,{headers:{Authorization:`Bearer ${e.token}`}});if(!o.ok)throw new Error("Failed to fetch organization");return t.value=await o.json(),t.value}catch(o){return i.value=o,null}finally{r.value=!1}};return{organization:h(()=>t.value),isLoading:h(()=>r.value),error:h(()=>i.value),fetchOrganization:s}};import{ref as p,computed as v,inject as B}from"vue";var R=()=>{let e=B(a),t=p([]),r=p(!1),i=p(null);if(!e)throw new Error("useOrganizationList must be used within AuthdogProvider");let s=async()=>{if(!e.token)return[];r.value=!0,i.value=null;try{let u=await fetch("/api/organizations",{headers:{Authorization:`Bearer ${e.token}`}});if(!u.ok)throw new Error("Failed to fetch organizations");let o=await u.json();return t.value=o.organizations||[],t.value}catch(u){return i.value=u,[]}finally{r.value=!1}};return{organizations:v(()=>t.value),isLoading:v(()=>r.value),error:v(()=>i.value),fetchOrganizations:s}};import{ref as w,computed as y,inject as J}from"vue";var W=()=>{let e=J(a),t=w([]),r=w(!1),i=w(null);if(!e)throw new Error("useAuthz must be used within AuthdogProvider");let s=async()=>{if(!e.token)return[];r.value=!0,i.value=null;try{let l=await fetch("/api/permissions",{headers:{Authorization:`Bearer ${e.token}`}});if(!l.ok)throw new Error("Failed to fetch permissions");let c=await l.json();return t.value=c.permissions||[],t.value}catch(l){return i.value=l,[]}finally{r.value=!1}},u=l=>t.value.includes(l),o=l=>l.some(c=>t.value.includes(c)),n=l=>l.every(c=>t.value.includes(c));return{permissions:y(()=>t.value),isLoading:y(()=>r.value),error:y(()=>i.value),fetchPermissions:s,hasPermission:u,hasAnyPermission:o,hasAllPermissions:n}};export{W as useAuthz,F as useOrganization,R as useOrganizationList,b as useSession,D as useSignIn,X as useSignOut,G as useSignUp,j as useUser};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/composables/use-session.ts","../src/client/provider.ts","../src/composables/use-user.ts","../src/commons.ts","../src/client/session.ts","../src/composables/use-signin.ts","../src/composables/use-signup.ts","../src/composables/use-signout.ts","../src/composables/use-organization.ts","../src/composables/use-organization-list.ts","../src/composables/use-authz.ts"],"sourcesContent":["import { computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useSession = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n\n if (!context) {\n throw new Error('useSession must be used within AuthdogProvider')\n }\n\n const session = computed(() => ({\n token: context.token,\n isAuthenticated: !!context.token,\n }))\n\n return {\n session: session.value,\n isLoading: context.isLoading,\n }\n}\n","import { defineComponent, onMounted, ref, provide, inject, type InjectionKey } from 'vue'\n\nexport interface AuthdogContext {\n isLoading: boolean\n token: string | null\n setToken: (token: string | null) => void\n}\n\nexport const AUTHDOG_CONTEXT_KEY: InjectionKey<AuthdogContext> = Symbol('authdog')\n\nexport const AuthdogProvider = defineComponent({\n name: 'AuthdogProvider',\n setup(_, { slots }) {\n const isLoading = ref(true)\n const token = ref<string | null>(null)\n\n const setToken = (newToken: string | null) => {\n token.value = newToken\n }\n\n onMounted(() => {\n // Check if we're in the browser\n if (typeof window !== 'undefined') {\n // Check if there's a token in the URL\n const url = new URL(window.location.href)\n const urlToken = url.searchParams.get('token')\n\n if (urlToken) {\n // Remove token from URL without triggering a page reload\n url.searchParams.delete('token')\n window.history.replaceState({}, document.title, url.toString())\n \n // Store token and reload to ensure server processes it\n localStorage.setItem('token', urlToken)\n setToken(urlToken)\n \n // Force a reload to ensure the server processes the token\n window.location.reload()\n return\n }\n\n // Check for existing token in localStorage\n const existingToken = localStorage.getItem('token')\n if (existingToken) {\n setToken(existingToken)\n }\n\n // If no token, we're done loading\n isLoading.value = false\n } else {\n // If we're on the server, don't show loading state\n isLoading.value = false\n }\n })\n\n const context: AuthdogContext = {\n isLoading: isLoading.value,\n token: token.value,\n setToken\n }\n\n provide(AUTHDOG_CONTEXT_KEY, context)\n\n return () => slots.default?.()\n }\n})\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\nimport { fetchUserData, validatePublicKey } from '../client/session'\n\nexport const useUser = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const user = ref<any>(null)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useUser must be used within AuthdogProvider')\n }\n\n const fetchUser = async (publicKey: string) => {\n if (!context.token) {\n return null\n }\n\n isLoading.value = true\n error.value = null\n\n try {\n validatePublicKey(publicKey)\n const userData = await fetchUserData(publicKey, context.token)\n user.value = userData?.user || null\n return userData?.user || null\n } catch (err) {\n error.value = err as Error\n return null\n } finally {\n isLoading.value = false\n }\n }\n\n const isAuthenticated = computed(() => !!context.token && !!user.value)\n\n return {\n user: computed(() => user.value),\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n isAuthenticated,\n fetchUser,\n }\n}\n","export interface PublicKeyPayload {\n environmentId: string\n identityHost: string\n}\n\nexport const getPublicKeyPayload = (publicKey: string): PublicKeyPayload => {\n if (!publicKey) {\n throw new Error('Public key is not defined')\n }\n\n if (!publicKey.startsWith('pk_')) {\n throw new Error('Invalid public key')\n }\n\n try {\n return JSON.parse(\n Buffer.from(publicKey.replace('pk_', ''), 'base64').toString('utf-8'),\n )\n } catch (e) {\n throw new Error('Failed to parse public key')\n }\n}\n","import { getPublicKeyPayload } from '../commons'\n\nexport const getTokenFromUri = (url: string): string | null => {\n return new URL(url).searchParams.get('token')\n}\n\ninterface IFetchUserData {\n user: {\n id: string\n environmentId: string\n externalId: string\n userName: string\n displayName: string\n nickName: string\n profileUrl: string\n title: string\n userType: string\n preferredLanguage: string | null\n locale: string | null\n timezone: string | null\n active: boolean\n provider: string\n lastLogin: string\n createdAt: string\n updatedAt: string\n names: {\n id: string\n userId: string\n formatted: string | null\n familyName: string\n givenName: string\n middleName: string | null\n honorificPrefix: string | null\n honorificSuffix: string | null\n createdAt: string\n updatedAt: string\n }\n addresses: []\n emails: {\n value: string\n primary: boolean\n type: string\n }[]\n phoneNumbers: []\n ims: []\n photos: {\n value: string\n type: string\n }[]\n }\n meta: {\n code: number\n message: string\n }\n}\n\nexport const validatePublicKey = (publicKey: string) => {\n if (!publicKey) {\n throw new Error('Public key is not defined')\n }\n\n if (!publicKey.startsWith('pk_')) {\n throw new Error('Invalid public key')\n }\n}\n\nexport const fetchUserData = async (\n publicKey: string,\n token: string,\n): Promise<IFetchUserData | null> => {\n validatePublicKey(publicKey)\n const publicKeyObj = getPublicKeyPayload(publicKey)\n const userData = await fetch(\n `${publicKeyObj?.identityHost}/oidc/${publicKeyObj?.environmentId}/userinfo`,\n {\n headers: {\n authorization: `Bearer ${token}`,\n },\n },\n )\n\n if (!userData.ok) {\n throw new Error('Failed to fetch user info')\n }\n\n return await userData.json()\n}\n\nexport const browserCookiesOptions = {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: '/',\n httpOnly: true,\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useSignIn = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useSignIn must be used within AuthdogProvider')\n }\n\n const signIn = async (publicKey: string, redirectUrl?: string) => {\n isLoading.value = true\n error.value = null\n\n try {\n const publicKeyObj = JSON.parse(\n Buffer.from(publicKey.replace('pk_', ''), 'base64').toString('utf-8')\n )\n \n const authUrl = new URL(`${publicKeyObj.identityHost}/oidc/${publicKeyObj.environmentId}/authorize`)\n authUrl.searchParams.set('client_id', publicKey)\n authUrl.searchParams.set('response_type', 'code')\n authUrl.searchParams.set('scope', 'openid profile email')\n authUrl.searchParams.set('redirect_uri', redirectUrl || window.location.origin)\n \n window.location.href = authUrl.toString()\n } catch (err) {\n error.value = err as Error\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n signIn,\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useSignUp = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useSignUp must be used within AuthdogProvider')\n }\n\n const signUp = async (publicKey: string, redirectUrl?: string) => {\n isLoading.value = true\n error.value = null\n\n try {\n const publicKeyObj = JSON.parse(\n Buffer.from(publicKey.replace('pk_', ''), 'base64').toString('utf-8')\n )\n \n const authUrl = new URL(`${publicKeyObj.identityHost}/oidc/${publicKeyObj.environmentId}/authorize`)\n authUrl.searchParams.set('client_id', publicKey)\n authUrl.searchParams.set('response_type', 'code')\n authUrl.searchParams.set('scope', 'openid profile email')\n authUrl.searchParams.set('redirect_uri', redirectUrl || window.location.origin)\n authUrl.searchParams.set('prompt', 'signup')\n \n window.location.href = authUrl.toString()\n } catch (err) {\n error.value = err as Error\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n signUp,\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useSignOut = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useSignOut must be used within AuthdogProvider')\n }\n\n const signOut = async () => {\n isLoading.value = true\n error.value = null\n\n try {\n // Clear token from context\n context.setToken(null)\n \n // Clear token from localStorage\n if (typeof window !== 'undefined') {\n localStorage.removeItem('token')\n }\n \n // Redirect to logout endpoint or home page\n if (typeof window !== 'undefined') {\n window.location.href = '/logout'\n }\n } catch (err) {\n error.value = err as Error\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n signOut,\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useOrganization = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const organization = ref<any>(null)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useOrganization must be used within AuthdogProvider')\n }\n\n const fetchOrganization = async (organizationId: string) => {\n if (!context.token) {\n return null\n }\n\n isLoading.value = true\n error.value = null\n\n try {\n // This would be implemented based on your organization API\n // For now, returning a placeholder\n const response = await fetch(`/api/organizations/${organizationId}`, {\n headers: {\n 'Authorization': `Bearer ${context.token}`,\n },\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch organization')\n }\n\n organization.value = await response.json()\n return organization.value\n } catch (err) {\n error.value = err as Error\n return null\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n organization: computed(() => organization.value),\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n fetchOrganization,\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useOrganizationList = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const organizations = ref<any[]>([])\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useOrganizationList must be used within AuthdogProvider')\n }\n\n const fetchOrganizations = async () => {\n if (!context.token) {\n return []\n }\n\n isLoading.value = true\n error.value = null\n\n try {\n // This would be implemented based on your organizations API\n // For now, returning a placeholder\n const response = await fetch('/api/organizations', {\n headers: {\n 'Authorization': `Bearer ${context.token}`,\n },\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch organizations')\n }\n\n const data = await response.json()\n organizations.value = data.organizations || []\n return organizations.value\n } catch (err) {\n error.value = err as Error\n return []\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n organizations: computed(() => organizations.value),\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n fetchOrganizations,\n }\n}\n","import { ref, computed, inject } from 'vue'\nimport { AUTHDOG_CONTEXT_KEY, type AuthdogContext } from '../client/provider'\n\nexport const useAuthz = () => {\n const context = inject<AuthdogContext>(AUTHDOG_CONTEXT_KEY)\n const permissions = ref<string[]>([])\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n if (!context) {\n throw new Error('useAuthz must be used within AuthdogProvider')\n }\n\n const fetchPermissions = async () => {\n if (!context.token) {\n return []\n }\n\n isLoading.value = true\n error.value = null\n\n try {\n // This would be implemented based on your authorization API\n // For now, returning a placeholder\n const response = await fetch('/api/permissions', {\n headers: {\n 'Authorization': `Bearer ${context.token}`,\n },\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch permissions')\n }\n\n const data = await response.json()\n permissions.value = data.permissions || []\n return permissions.value\n } catch (err) {\n error.value = err as Error\n return []\n } finally {\n isLoading.value = false\n }\n }\n\n const hasPermission = (permission: string) => {\n return permissions.value.includes(permission)\n }\n\n const hasAnyPermission = (permissionList: string[]) => {\n return permissionList.some(permission => permissions.value.includes(permission))\n }\n\n const hasAllPermissions = (permissionList: string[]) => {\n return permissionList.every(permission => permissions.value.includes(permission))\n }\n\n return {\n permissions: computed(() => permissions.value),\n isLoading: computed(() => isLoading.value),\n error: computed(() => error.value),\n fetchPermissions,\n hasPermission,\n hasAnyPermission,\n hasAllPermissions,\n }\n}\n"],"mappings":"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","names":["computed","inject","defineComponent","onMounted","ref","provide","AUTHDOG_CONTEXT_KEY","AuthdogProvider","_","slots","isLoading","token","setToken","newToken","url","urlToken","existingToken","context","_a","useSession","context","inject","AUTHDOG_CONTEXT_KEY","computed","ref","computed","inject","getPublicKeyPayload","publicKey","validatePublicKey","publicKey","fetchUserData","token","publicKeyObj","getPublicKeyPayload","userData","browserCookiesOptions","useUser","context","inject","AUTHDOG_CONTEXT_KEY","user","ref","isLoading","error","fetchUser","publicKey","validatePublicKey","userData","fetchUserData","err","isAuthenticated","computed","ref","computed","inject","useSignIn","context","inject","AUTHDOG_CONTEXT_KEY","isLoading","ref","error","publicKey","redirectUrl","publicKeyObj","authUrl","err","computed","ref","computed","inject","useSignUp","context","inject","AUTHDOG_CONTEXT_KEY","isLoading","ref","error","publicKey","redirectUrl","publicKeyObj","authUrl","err","computed","ref","computed","inject","useSignOut","context","inject","AUTHDOG_CONTEXT_KEY","isLoading","ref","error","err","computed","ref","computed","inject","useOrganization","context","inject","AUTHDOG_CONTEXT_KEY","organization","ref","isLoading","error","fetchOrganization","organizationId","response","err","computed","ref","computed","inject","useOrganizationList","context","inject","AUTHDOG_CONTEXT_KEY","organizations","ref","isLoading","error","fetchOrganizations","response","data","err","computed","ref","computed","inject","useAuthz","context","inject","AUTHDOG_CONTEXT_KEY","permissions","ref","isLoading","error","fetchPermissions","response","data","err","hasPermission","permission","hasAnyPermission","permissionList","hasAllPermissions","computed"]}
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1,2 @@
1
+
2
+ export { }
package/dist/server.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var m=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var b=(r,o,p,f)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of x(o))!a.call(r,e)&&e!==p&&m(r,e,{get:()=>o[e],enumerable:!(f=t(o,e))||f.enumerable});return r};var c=r=>b(m({},"__esModule",{value:!0}),r);var d={};module.exports=c(d);
2
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server.ts"],"sourcesContent":["export * from './server'\n"],"mappings":"+WAAA,IAAAA,EAAA,kBAAAC,EAAAD","names":["server_exports","__toCommonJS"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@authdog/vue",
3
+ "version": "0.0.1",
4
+ "description": "Authdog Vue SDK",
5
+ "source": "src/index.ts",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "dist/index.d.ts",
12
+ "import": "dist/index.js"
13
+ },
14
+ "./client": {
15
+ "types": "dist/client.d.ts",
16
+ "import": "dist/client.js"
17
+ },
18
+ "./server": {
19
+ "types": "dist/server.d.ts",
20
+ "import": "dist/server.js"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist/"
25
+ ],
26
+ "dependencies": {
27
+ "vue": "^3.5.0",
28
+ "@authdog/node-commons": "0.0.22"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^22.10.5",
32
+ "dotenv": "^16.4.7",
33
+ "prettier": "^3.4.2",
34
+ "tsup": "^8.3.5",
35
+ "typescript": "^5.7.2",
36
+ "vitest": "^2.1.8"
37
+ },
38
+ "publishConfig": {
39
+ "registry": "https://registry.npmjs.org/",
40
+ "access": "public"
41
+ },
42
+ "scripts": {
43
+ "format": "prettier --config .prettierrc.json --write \"**/*.{ts,md}\"",
44
+ "type-check": "tsc",
45
+ "clean": "rm -rf dist",
46
+ "build": "pnpm clean && tsup",
47
+ "ship": "pnpm build && pnpm publish --access public --no-git-checks"
48
+ }
49
+ }