@korajs/auth 0.6.0 → 1.0.0-beta.0
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/LICENSE +21 -0
- package/dist/{chunk-7OXBRSJL.js → chunk-MPMXJ62R.js} +1 -1
- package/dist/chunk-MPMXJ62R.js.map +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/react.cjs +3 -2
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +4 -3
- package/dist/react.js.map +1 -1
- package/dist/server.cjs +42 -5
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +24 -0
- package/dist/server.d.ts +24 -0
- package/dist/server.js +42 -5
- package/dist/server.js.map +1 -1
- package/dist/svelte.cjs.map +1 -1
- package/dist/svelte.js +1 -1
- package/dist/svelte.js.map +1 -1
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.js +1 -1
- package/dist/vue.js.map +1 -1
- package/package.json +5 -5
- package/src/svelte/AuthProvider.svelte +19 -19
- package/src/svelte/OrgProvider.svelte +12 -12
- package/dist/chunk-7OXBRSJL.js.map +0 -1
package/dist/svelte.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/svelte.ts","../src/svelte/auth-context.ts","../src/bindings/create-auth-session.ts","../src/svelte/use-auth.ts","../src/svelte/org-context.ts","../src/bindings/create-org-session.ts","../src/svelte/org-hooks.ts"],"sourcesContent":["export {\n\tdestroyAuthProvider,\n\tgetAuthContext,\n\tinitAuthProvider,\n} from './svelte/auth-context'\nexport type { AuthContextValue } from './svelte/auth-context'\nexport {\n\tcreateAuthStore,\n\tcreateAuthStatusStore,\n\tcreateCurrentUserStore,\n\tuseAuth,\n\tuseAuthStatus,\n\tuseCurrentUser,\n} from './svelte/use-auth'\nexport type { UseAuthResult } from './svelte/use-auth'\nexport { destroyOrgProvider, getOrgContext, initOrgProvider } from './svelte/org-context'\nexport type { OrgContextValue } from './svelte/org-context'\nexport {\n\tcreatePermissionStore,\n\tuseOrg,\n\tuseOrgMembers,\n\tusePermission,\n\tcheckOrgPermission,\n} from './svelte/org-hooks'\nexport type { UseOrgResult, UseOrgMembersResult } from './svelte/org-hooks'\n","import { getContext, setContext } from 'svelte'\nimport type { AuthClient, AuthState } from '../client/auth-client'\nimport { createAuthSession, type AuthSession } from '../bindings/create-auth-session'\n\nconst authContextKey = Symbol('korajs-auth-context')\n\nexport interface AuthContextValue {\n\tclient: AuthClient\n\tsession: AuthSession\n\tget state(): AuthState\n\tget isLoading(): boolean\n}\n\n/**\n * Initialize auth context inside a Svelte component (root layout).\n * Must be called during component initialization before children render.\n */\nexport function initAuthProvider(client: AuthClient): AuthContextValue {\n\tconst session = createAuthSession(client)\n\n\tconst value: AuthContextValue = {\n\t\tclient,\n\t\tsession,\n\t\tget state() {\n\t\t\treturn session.getSnapshot().state\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn session.getSnapshot().isLoading\n\t\t},\n\t}\n\n\tsetContext(authContextKey, value)\n\treturn value\n}\n\nexport function getAuthContext(): AuthContextValue {\n\tconst context = getContext<AuthContextValue | undefined>(authContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'Auth context missing. Call initAuthProvider(client) in your root layout component.',\n\t\t)\n\t}\n\treturn context\n}\n\nexport function destroyAuthProvider(context: AuthContextValue): void {\n\tcontext.session.destroy()\n}\n","import type {\n\tAuthClient,\n\tAuthState,\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\n\nexport interface AuthSessionSnapshot {\n\tstate: AuthState\n\tuser: AuthUser | null\n\tisAuthenticated: boolean\n\tisLoading: boolean\n\tinitError: Error | null\n\terror: string | null\n}\n\nexport interface AuthSession {\n\treadonly client: AuthClient\n\tgetSnapshot(): AuthSessionSnapshot\n\tsubscribe(listener: () => void): () => void\n\tsignUp(params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}): Promise<void>\n\tsignIn(params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}): Promise<void>\n\tsignInWithOAuth(\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t): Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn(provider: string, params: OAuthCallbackParams): Promise<void>\n\tgetOAuthAuthorizationUrl(\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t): Promise<OAuthAuthorizationResult>\n\tlinkOAuth(provider: string, params: OAuthCallbackParams): Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts(): Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth(provider: string): Promise<void>\n\tsignOut(): Promise<void>\n\tdestroy(): void\n}\n\n/**\n * Framework-agnostic auth session: initialization, reactive snapshot, and client methods.\n */\nexport function createAuthSession(client: AuthClient): AuthSession {\n\tlet state: AuthState = client.state\n\tlet isLoading = true\n\tlet initError: Error | null = null\n\tlet lastError: string | null = null\n\n\tconst listeners = new Set<() => void>()\n\tlet snapshot = buildSnapshot()\n\n\tconst refreshSnapshot = (): void => {\n\t\tsnapshot = buildSnapshot()\n\t}\n\n\tconst notify = (): void => {\n\t\trefreshSnapshot()\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}\n\n\tfunction buildSnapshot(): AuthSessionSnapshot {\n\t\treturn {\n\t\t\tstate,\n\t\t\tuser: client.currentUser,\n\t\t\tisAuthenticated: state === 'authenticated',\n\t\t\tisLoading,\n\t\t\tinitError,\n\t\t\terror: lastError,\n\t\t}\n\t}\n\n\tconst captureError = (error: unknown): void => {\n\t\tlastError = error instanceof Error ? error.message : String(error)\n\t\tnotify()\n\t}\n\n\tconst run = async (action: () => Promise<void>): Promise<void> => {\n\t\tlastError = null\n\t\ttry {\n\t\t\tawait action()\n\t\t} catch (error) {\n\t\t\tcaptureError(error)\n\t\t}\n\t}\n\n\tconst runWithResult = async <T>(action: () => Promise<T>): Promise<T | null> => {\n\t\tlastError = null\n\t\ttry {\n\t\t\treturn await action()\n\t\t} catch (error) {\n\t\t\tcaptureError(error)\n\t\t\treturn null\n\t\t}\n\t}\n\n\tconst unsubscribeAuth = client.onAuthChange((nextState) => {\n\t\tstate = nextState\n\t\tnotify()\n\t})\n\n\tvoid client\n\t\t.initialize()\n\t\t.then(() => {\n\t\t\tstate = client.state\n\t\t\tisLoading = false\n\t\t\tnotify()\n\t\t})\n\t\t.catch((error: unknown) => {\n\t\t\tinitError = error instanceof Error ? error : new Error(String(error))\n\t\t\tisLoading = false\n\t\t\tnotify()\n\t\t})\n\n\treturn {\n\t\tclient,\n\t\tgetSnapshot: () => snapshot,\n\t\tsubscribe(listener) {\n\t\t\tlisteners.add(listener)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener)\n\t\t\t}\n\t\t},\n\t\tsignUp: (params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signUp(params)\n\t\t\t}),\n\t\tsignIn: (params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signIn(params)\n\t\t\t}),\n\t\tsignInWithOAuth: async (provider, options) => {\n\t\t\tlastError = null\n\t\t\ttry {\n\t\t\t\treturn await client.signInWithOAuth(provider, options)\n\t\t\t} catch (error) {\n\t\t\t\tcaptureError(error)\n\t\t\t\tthrow error instanceof Error ? error : new Error(String(error))\n\t\t\t}\n\t\t},\n\t\tcompleteOAuthSignIn: (provider, params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.completeOAuthSignIn(provider, params)\n\t\t\t}),\n\t\tgetOAuthAuthorizationUrl: async (provider, options) => {\n\t\t\tlastError = null\n\t\t\ttry {\n\t\t\t\treturn await client.getOAuthAuthorizationUrl(provider, options)\n\t\t\t} catch (error) {\n\t\t\t\tcaptureError(error)\n\t\t\t\tthrow error instanceof Error ? error : new Error(String(error))\n\t\t\t}\n\t\t},\n\t\tlinkOAuth: (provider, params) =>\n\t\t\trunWithResult(async () => client.linkOAuth(provider, params)),\n\t\tlistLinkedAccounts: () =>\n\t\t\trunWithResult(async () => client.listLinkedAccounts()).then((value) => value ?? []),\n\t\tunlinkOAuth: (provider) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.unlinkOAuth(provider)\n\t\t\t}),\n\t\tsignOut: () =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signOut()\n\t\t\t}),\n\t\tdestroy() {\n\t\t\tunsubscribeAuth()\n\t\t\tlisteners.clear()\n\t\t},\n\t}\n}\n","import { readable, type Readable } from 'svelte/store'\nimport type {\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\nimport type { AuthSessionSnapshot } from '../bindings/create-auth-session'\nimport { getAuthContext } from './auth-context'\n\nexport interface UseAuthResult extends AuthSessionSnapshot {\n\tsignUp: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignIn: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignInWithOAuth: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn: (provider: string, params: OAuthCallbackParams) => Promise<void>\n\tgetOAuthAuthorizationUrl: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tlinkOAuth: (provider: string, params: OAuthCallbackParams) => Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts: () => Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth: (provider: string) => Promise<void>\n\tsignOut: () => Promise<void>\n}\n\nexport function createAuthStore(): Readable<UseAuthResult> {\n\tconst { session } = getAuthContext()\n\n\treturn readable<UseAuthResult>(buildResult(session), (set) => {\n\t\tconst sync = (): void => {\n\t\t\tset(buildResult(session))\n\t\t}\n\t\tsync()\n\t\treturn session.subscribe(sync)\n\t})\n}\n\n/** @alias createAuthStore */\nexport const useAuth = createAuthStore\n\nfunction buildResult(session: ReturnType<typeof getAuthContext>['session']): UseAuthResult {\n\tconst snapshot = session.getSnapshot()\n\treturn {\n\t\t...snapshot,\n\t\tsignUp: (params) => session.signUp(params),\n\t\tsignIn: (params) => session.signIn(params),\n\t\tsignInWithOAuth: (provider, options) => session.signInWithOAuth(provider, options),\n\t\tcompleteOAuthSignIn: (provider, params) => session.completeOAuthSignIn(provider, params),\n\t\tgetOAuthAuthorizationUrl: (provider, options) =>\n\t\t\tsession.getOAuthAuthorizationUrl(provider, options),\n\t\tlinkOAuth: (provider, params) => session.linkOAuth(provider, params),\n\t\tlistLinkedAccounts: () => session.listLinkedAccounts(),\n\t\tunlinkOAuth: (provider) => session.unlinkOAuth(provider),\n\t\tsignOut: () => session.signOut(),\n\t}\n}\n\nexport function createCurrentUserStore(): Readable<AuthUser | null> {\n\tconst { session } = getAuthContext()\n\treturn readable<AuthUser | null>(session.getSnapshot().user, (set) => {\n\t\tconst sync = (): void => {\n\t\t\tset(session.getSnapshot().user)\n\t\t}\n\t\tsync()\n\t\treturn session.subscribe(sync)\n\t})\n}\n\n/** @alias createCurrentUserStore */\nexport const useCurrentUser = createCurrentUserStore\n\nexport function createAuthStatusStore(): Readable<{\n\tstate: AuthSessionSnapshot['state']\n\tisAuthenticated: boolean\n\tisLoading: boolean\n}> {\n\tconst { session } = getAuthContext()\n\treturn readable(\n\t\t{\n\t\t\tstate: session.getSnapshot().state,\n\t\t\tisAuthenticated: session.getSnapshot().isAuthenticated,\n\t\t\tisLoading: session.getSnapshot().isLoading,\n\t\t},\n\t\t(set) => {\n\t\t\tconst sync = (): void => {\n\t\t\t\tconst snapshot = session.getSnapshot()\n\t\t\t\tset({\n\t\t\t\t\tstate: snapshot.state,\n\t\t\t\t\tisAuthenticated: snapshot.isAuthenticated,\n\t\t\t\t\tisLoading: snapshot.isLoading,\n\t\t\t\t})\n\t\t\t}\n\t\t\tsync()\n\t\t\treturn session.subscribe(sync)\n\t\t},\n\t)\n}\n\n/** @alias createAuthStatusStore */\nexport const useAuthStatus = createAuthStatusStore\n","import { getContext, setContext } from 'svelte'\nimport type { OrgClient } from '../client/org-client'\nimport { createOrgSession, type OrgSession } from '../bindings/create-org-session'\n\nconst orgContextKey = Symbol('korajs-org-context')\n\nexport interface OrgContextValue {\n\tclient: OrgClient\n\tsession: OrgSession\n}\n\nexport function initOrgProvider(client: OrgClient): OrgContextValue {\n\tconst session = createOrgSession(client)\n\tconst value: OrgContextValue = { client, session }\n\tsetContext(orgContextKey, value)\n\treturn value\n}\n\nexport function getOrgContext(): OrgContextValue {\n\tconst context = getContext<OrgContextValue | undefined>(orgContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'Org context missing. Wrap your app with <OrgProvider client={orgClient}> from @korajs/auth/svelte.',\n\t\t)\n\t}\n\treturn context\n}\n\nexport function destroyOrgProvider(context: OrgContextValue): void {\n\tcontext.session.destroy()\n}\n","import type {\n\tClientInvitation,\n\tClientMembership,\n\tClientOrganization,\n\tOrgClient,\n} from '../client/org-client'\n\nexport interface OrgSnapshot {\n\torgId: string | null\n\torg: ClientOrganization | null\n\trole: string | null\n}\n\nexport interface OrgSession {\n\treadonly client: OrgClient\n\tgetSnapshot(): OrgSnapshot\n\tsubscribe(listener: () => void): () => void\n\tcheckPermission(requiredRole: string): boolean\n\tdestroy(): void\n}\n\nconst ROLE_LEVELS: Record<string, number> = {\n\tviewer: 10,\n\tbilling: 15,\n\tmember: 20,\n\tadmin: 30,\n\towner: 40,\n}\n\nexport function checkOrgPermission(currentRole: string | null, requiredRole: string): boolean {\n\tif (!currentRole) return false\n\tconst currentLevel = ROLE_LEVELS[currentRole] ?? 0\n\tconst requiredLevel = ROLE_LEVELS[requiredRole] ?? 0\n\treturn currentLevel >= requiredLevel\n}\n\n/**\n * Framework-agnostic org session with reactive snapshot subscription.\n */\nexport function createOrgSession(client: OrgClient): OrgSession {\n\tlet snapshot = buildSnapshot(client)\n\tconst listeners = new Set<() => void>()\n\n\tconst notify = (): void => {\n\t\tsnapshot = buildSnapshot(client)\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}\n\n\tconst unsubscribeOrgChange = client.onOrgChange(notify)\n\n\treturn {\n\t\tclient,\n\t\tgetSnapshot: () => snapshot,\n\t\tsubscribe(listener: () => void): () => void {\n\t\t\tlisteners.add(listener)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener)\n\t\t\t}\n\t\t},\n\t\tcheckPermission(requiredRole: string): boolean {\n\t\t\treturn checkOrgPermission(snapshot.role, requiredRole)\n\t\t},\n\t\tdestroy(): void {\n\t\t\tunsubscribeOrgChange()\n\t\t\tlisteners.clear()\n\t\t},\n\t}\n}\n\nfunction buildSnapshot(client: OrgClient): OrgSnapshot {\n\treturn {\n\t\torgId: client.activeOrgId,\n\t\torg: client.activeOrg,\n\t\trole: client.activeRole,\n\t}\n}\n\nexport interface UseOrgMembersActions {\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n}\n\n/**\n * Shared org member management actions (loading state remains framework-specific).\n */\nexport function createOrgMembersActions(\n\tclient: OrgClient,\n\torgId: string,\n\tonError: (message: string) => void,\n): UseOrgMembersActions {\n\treturn {\n\t\tasync refresh(): Promise<void> {\n\t\t\tawait client.listMembers(orgId)\n\t\t},\n\t\tasync invite(email: string, role: string): Promise<ClientInvitation> {\n\t\t\ttry {\n\t\t\t\treturn await client.inviteMember(orgId, { email, role })\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\t\t\tonError(message)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\t\tasync removeMember(userId: string): Promise<void> {\n\t\t\ttry {\n\t\t\t\tawait client.removeMember(orgId, userId)\n\t\t\t} catch (error) {\n\t\t\t\tonError(error instanceof Error ? error.message : String(error))\n\t\t\t}\n\t\t},\n\t\tasync updateRole(userId: string, role: string): Promise<void> {\n\t\t\ttry {\n\t\t\t\tawait client.updateMemberRole(orgId, userId, role)\n\t\t\t} catch (error) {\n\t\t\t\tonError(error instanceof Error ? error.message : String(error))\n\t\t\t}\n\t\t},\n\t}\n}\n\nexport async function loadOrgMembers(\n\tclient: OrgClient,\n\torgId: string,\n): Promise<ClientMembership[]> {\n\treturn client.listMembers(orgId)\n}\n","import { derived, get, readable, writable, type Readable } from 'svelte/store'\nimport type {\n\tClientInvitation,\n\tClientMembership,\n\tClientOrganization,\n} from '../client/org-client'\nimport {\n\tcheckOrgPermission,\n\tcreateOrgMembersActions,\n\tloadOrgMembers,\n} from '../bindings/create-org-session'\nimport { getOrgContext } from './org-context'\n\nexport interface UseOrgResult {\n\tsubscribe: Readable<{\n\t\torg: ClientOrganization | null\n\t\trole: string | null\n\t\torgId: string | null\n\t\terror: string | null\n\t}>['subscribe']\n\tget org(): ClientOrganization | null\n\tget role(): string | null\n\tget orgId(): string | null\n\tswitchOrg: (orgId: string) => Promise<void>\n\tcreateOrg: (params: { name: string; slug?: string }) => Promise<ClientOrganization>\n\tleaveOrg: () => Promise<void>\n\tclearOrg: () => void\n\tlistOrgs: () => Promise<ClientOrganization[]>\n}\n\nexport interface UseOrgMembersResult {\n\tsubscribe: Readable<{\n\t\tmembers: ClientMembership[]\n\t\tisLoading: boolean\n\t\terror: string | null\n\t}>['subscribe']\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n}\n\nfunction createOrgSnapshotStore(): Readable<{\n\torg: ClientOrganization | null\n\trole: string | null\n\torgId: string | null\n}> {\n\tconst { session } = getOrgContext()\n\n\treturn readable(session.getSnapshot(), (set) => {\n\t\tset(session.getSnapshot())\n\t\treturn session.subscribe(() => {\n\t\t\tset(session.getSnapshot())\n\t\t})\n\t})\n}\n\nexport function useOrg(): UseOrgResult {\n\tconst { client, session } = getOrgContext()\n\tconst snapshotStore = createOrgSnapshotStore()\n\tconst error = writable<string | null>(null)\n\n\tconst store = derived([snapshotStore, error], ([snapshot, errorValue]) => ({\n\t\t...snapshot,\n\t\terror: errorValue,\n\t}))\n\n\tconst switchOrg = async (orgId: string): Promise<void> => {\n\t\terror.set(null)\n\t\ttry {\n\t\t\tawait client.switchOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t}\n\t}\n\n\tconst createOrg = async (params: {\n\t\tname: string\n\t\tslug?: string\n\t}): Promise<ClientOrganization> => {\n\t\terror.set(null)\n\t\ttry {\n\t\t\treturn await client.createOrg(params)\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\terror.set(message)\n\t\t\tthrow err\n\t\t}\n\t}\n\n\tconst leaveOrg = async (): Promise<void> => {\n\t\tconst orgId = get(snapshotStore).orgId\n\t\tif (!orgId) return\n\t\terror.set(null)\n\t\ttry {\n\t\t\tawait client.leaveOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t}\n\t}\n\n\tconst clearOrg = (): void => {\n\t\tclient.clearActiveOrg()\n\t}\n\n\tconst listOrgs = async (): Promise<ClientOrganization[]> => {\n\t\ttry {\n\t\t\treturn await client.listOrgs()\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t\treturn []\n\t\t}\n\t}\n\n\treturn {\n\t\tsubscribe: store.subscribe,\n\t\tget org() {\n\t\t\treturn get(snapshotStore).org\n\t\t},\n\t\tget role() {\n\t\t\treturn get(snapshotStore).role\n\t\t},\n\t\tget orgId() {\n\t\t\treturn get(snapshotStore).orgId\n\t\t},\n\t\tswitchOrg,\n\t\tcreateOrg,\n\t\tleaveOrg,\n\t\tclearOrg,\n\t\tlistOrgs,\n\t}\n}\n\nexport function useOrgMembers(orgId: string): UseOrgMembersResult {\n\tconst { client } = getOrgContext()\n\tconst members = writable<ClientMembership[]>([])\n\tconst isLoading = writable(true)\n\tconst error = writable<string | null>(null)\n\n\tconst refresh = async (targetOrgId: string): Promise<void> => {\n\t\tisLoading.set(true)\n\t\terror.set(null)\n\t\ttry {\n\t\t\tmembers.set(await loadOrgMembers(client, targetOrgId))\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t} finally {\n\t\t\tisLoading.set(false)\n\t\t}\n\t}\n\n\t$effect(() => {\n\t\tvoid refresh(orgId)\n\t})\n\n\tconst actions = createOrgMembersActions(client, orgId, (message) => {\n\t\terror.set(message)\n\t})\n\n\tconst invite = async (email: string, role: string): Promise<ClientInvitation> => {\n\t\tconst result = await actions.invite(email, role)\n\t\tawait refresh(orgId)\n\t\treturn result\n\t}\n\n\tconst removeMember = async (userId: string): Promise<void> => {\n\t\tawait actions.removeMember(userId)\n\t\tawait refresh(orgId)\n\t}\n\n\tconst updateRole = async (userId: string, role: string): Promise<void> => {\n\t\tawait actions.updateRole(userId, role)\n\t\tawait refresh(orgId)\n\t}\n\n\tconst store = derived([members, isLoading, error], ([memberList, loading, errorValue]) => ({\n\t\tmembers: memberList,\n\t\tisLoading: loading,\n\t\terror: errorValue,\n\t}))\n\n\treturn {\n\t\tsubscribe: store.subscribe,\n\t\trefresh: () => refresh(orgId),\n\t\tinvite,\n\t\tremoveMember,\n\t\tupdateRole,\n\t}\n}\n\nexport function createPermissionStore(requiredRole: string): Readable<boolean> {\n\tconst { session } = getOrgContext()\n\n\treturn readable(session.checkPermission(requiredRole), (set) => {\n\t\tset(session.checkPermission(requiredRole))\n\t\treturn session.subscribe(() => {\n\t\t\tset(session.checkPermission(requiredRole))\n\t\t})\n\t})\n}\n\n/** Alias for {@link createPermissionStore}. */\nexport const usePermission = createPermissionStore\n\nexport { checkOrgPermission }\n"],"mappings":"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","names":["buildSnapshot","import_svelte","import_store"]}
|
|
1
|
+
{"version":3,"sources":["../src/svelte.ts","../src/svelte/auth-context.ts","../src/bindings/create-auth-session.ts","../src/svelte/use-auth.ts","../src/svelte/org-context.ts","../src/bindings/create-org-session.ts","../src/svelte/org-hooks.ts"],"sourcesContent":["export {\n\tdestroyAuthProvider,\n\tgetAuthContext,\n\tinitAuthProvider,\n} from './svelte/auth-context'\nexport type { AuthContextValue } from './svelte/auth-context'\nexport {\n\tcreateAuthStore,\n\tcreateAuthStatusStore,\n\tcreateCurrentUserStore,\n\tuseAuth,\n\tuseAuthStatus,\n\tuseCurrentUser,\n} from './svelte/use-auth'\nexport type { UseAuthResult } from './svelte/use-auth'\nexport { destroyOrgProvider, getOrgContext, initOrgProvider } from './svelte/org-context'\nexport type { OrgContextValue } from './svelte/org-context'\nexport {\n\tcreatePermissionStore,\n\tuseOrg,\n\tuseOrgMembers,\n\tusePermission,\n\tcheckOrgPermission,\n} from './svelte/org-hooks'\nexport type { UseOrgResult, UseOrgMembersResult } from './svelte/org-hooks'\n","import { getContext, setContext } from 'svelte'\nimport { type AuthSession, createAuthSession } from '../bindings/create-auth-session'\nimport type { AuthClient, AuthState } from '../client/auth-client'\n\nconst authContextKey = Symbol('korajs-auth-context')\n\nexport interface AuthContextValue {\n\tclient: AuthClient\n\tsession: AuthSession\n\tget state(): AuthState\n\tget isLoading(): boolean\n}\n\n/**\n * Initialize auth context inside a Svelte component (root layout).\n * Must be called during component initialization before children render.\n */\nexport function initAuthProvider(client: AuthClient): AuthContextValue {\n\tconst session = createAuthSession(client)\n\n\tconst value: AuthContextValue = {\n\t\tclient,\n\t\tsession,\n\t\tget state() {\n\t\t\treturn session.getSnapshot().state\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn session.getSnapshot().isLoading\n\t\t},\n\t}\n\n\tsetContext(authContextKey, value)\n\treturn value\n}\n\nexport function getAuthContext(): AuthContextValue {\n\tconst context = getContext<AuthContextValue | undefined>(authContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'Auth context missing. Call initAuthProvider(client) in your root layout component.',\n\t\t)\n\t}\n\treturn context\n}\n\nexport function destroyAuthProvider(context: AuthContextValue): void {\n\tcontext.session.destroy()\n}\n","import type {\n\tAuthClient,\n\tAuthState,\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\n\nexport interface AuthSessionSnapshot {\n\tstate: AuthState\n\tuser: AuthUser | null\n\tisAuthenticated: boolean\n\tisLoading: boolean\n\tinitError: Error | null\n\terror: string | null\n}\n\nexport interface AuthSession {\n\treadonly client: AuthClient\n\tgetSnapshot(): AuthSessionSnapshot\n\tsubscribe(listener: () => void): () => void\n\tsignUp(params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}): Promise<void>\n\tsignIn(params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}): Promise<void>\n\tsignInWithOAuth(\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t): Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn(provider: string, params: OAuthCallbackParams): Promise<void>\n\tgetOAuthAuthorizationUrl(\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t): Promise<OAuthAuthorizationResult>\n\tlinkOAuth(provider: string, params: OAuthCallbackParams): Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts(): Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth(provider: string): Promise<void>\n\tsignOut(): Promise<void>\n\tdestroy(): void\n}\n\n/**\n * Framework-agnostic auth session: initialization, reactive snapshot, and client methods.\n */\nexport function createAuthSession(client: AuthClient): AuthSession {\n\tlet state: AuthState = client.state\n\tlet isLoading = true\n\tlet initError: Error | null = null\n\tlet lastError: string | null = null\n\n\tconst listeners = new Set<() => void>()\n\tlet snapshot = buildSnapshot()\n\n\tconst refreshSnapshot = (): void => {\n\t\tsnapshot = buildSnapshot()\n\t}\n\n\tconst notify = (): void => {\n\t\trefreshSnapshot()\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}\n\n\tfunction buildSnapshot(): AuthSessionSnapshot {\n\t\treturn {\n\t\t\tstate,\n\t\t\tuser: client.currentUser,\n\t\t\tisAuthenticated: state === 'authenticated',\n\t\t\tisLoading,\n\t\t\tinitError,\n\t\t\terror: lastError,\n\t\t}\n\t}\n\n\tconst captureError = (error: unknown): void => {\n\t\tlastError = error instanceof Error ? error.message : String(error)\n\t\tnotify()\n\t}\n\n\tconst run = async (action: () => Promise<void>): Promise<void> => {\n\t\tlastError = null\n\t\ttry {\n\t\t\tawait action()\n\t\t} catch (error) {\n\t\t\tcaptureError(error)\n\t\t}\n\t}\n\n\tconst runWithResult = async <T>(action: () => Promise<T>): Promise<T | null> => {\n\t\tlastError = null\n\t\ttry {\n\t\t\treturn await action()\n\t\t} catch (error) {\n\t\t\tcaptureError(error)\n\t\t\treturn null\n\t\t}\n\t}\n\n\tconst unsubscribeAuth = client.onAuthChange((nextState) => {\n\t\tstate = nextState\n\t\tnotify()\n\t})\n\n\tvoid client\n\t\t.initialize()\n\t\t.then(() => {\n\t\t\tstate = client.state\n\t\t\tisLoading = false\n\t\t\tnotify()\n\t\t})\n\t\t.catch((error: unknown) => {\n\t\t\tinitError = error instanceof Error ? error : new Error(String(error))\n\t\t\tisLoading = false\n\t\t\tnotify()\n\t\t})\n\n\treturn {\n\t\tclient,\n\t\tgetSnapshot: () => snapshot,\n\t\tsubscribe(listener) {\n\t\t\tlisteners.add(listener)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener)\n\t\t\t}\n\t\t},\n\t\tsignUp: (params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signUp(params)\n\t\t\t}),\n\t\tsignIn: (params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signIn(params)\n\t\t\t}),\n\t\tsignInWithOAuth: async (provider, options) => {\n\t\t\tlastError = null\n\t\t\ttry {\n\t\t\t\treturn await client.signInWithOAuth(provider, options)\n\t\t\t} catch (error) {\n\t\t\t\tcaptureError(error)\n\t\t\t\tthrow error instanceof Error ? error : new Error(String(error))\n\t\t\t}\n\t\t},\n\t\tcompleteOAuthSignIn: (provider, params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.completeOAuthSignIn(provider, params)\n\t\t\t}),\n\t\tgetOAuthAuthorizationUrl: async (provider, options) => {\n\t\t\tlastError = null\n\t\t\ttry {\n\t\t\t\treturn await client.getOAuthAuthorizationUrl(provider, options)\n\t\t\t} catch (error) {\n\t\t\t\tcaptureError(error)\n\t\t\t\tthrow error instanceof Error ? error : new Error(String(error))\n\t\t\t}\n\t\t},\n\t\tlinkOAuth: (provider, params) => runWithResult(async () => client.linkOAuth(provider, params)),\n\t\tlistLinkedAccounts: () =>\n\t\t\trunWithResult(async () => client.listLinkedAccounts()).then((value) => value ?? []),\n\t\tunlinkOAuth: (provider) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.unlinkOAuth(provider)\n\t\t\t}),\n\t\tsignOut: () =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signOut()\n\t\t\t}),\n\t\tdestroy() {\n\t\t\tunsubscribeAuth()\n\t\t\tlisteners.clear()\n\t\t},\n\t}\n}\n","import { type Readable, readable } from 'svelte/store'\nimport type { AuthSessionSnapshot } from '../bindings/create-auth-session'\nimport type {\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\nimport { getAuthContext } from './auth-context'\n\nexport interface UseAuthResult extends AuthSessionSnapshot {\n\tsignUp: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignIn: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignInWithOAuth: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn: (provider: string, params: OAuthCallbackParams) => Promise<void>\n\tgetOAuthAuthorizationUrl: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tlinkOAuth: (provider: string, params: OAuthCallbackParams) => Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts: () => Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth: (provider: string) => Promise<void>\n\tsignOut: () => Promise<void>\n}\n\nexport function createAuthStore(): Readable<UseAuthResult> {\n\tconst { session } = getAuthContext()\n\n\treturn readable<UseAuthResult>(buildResult(session), (set) => {\n\t\tconst sync = (): void => {\n\t\t\tset(buildResult(session))\n\t\t}\n\t\tsync()\n\t\treturn session.subscribe(sync)\n\t})\n}\n\n/** @alias createAuthStore */\nexport const useAuth = createAuthStore\n\nfunction buildResult(session: ReturnType<typeof getAuthContext>['session']): UseAuthResult {\n\tconst snapshot = session.getSnapshot()\n\treturn {\n\t\t...snapshot,\n\t\tsignUp: (params) => session.signUp(params),\n\t\tsignIn: (params) => session.signIn(params),\n\t\tsignInWithOAuth: (provider, options) => session.signInWithOAuth(provider, options),\n\t\tcompleteOAuthSignIn: (provider, params) => session.completeOAuthSignIn(provider, params),\n\t\tgetOAuthAuthorizationUrl: (provider, options) =>\n\t\t\tsession.getOAuthAuthorizationUrl(provider, options),\n\t\tlinkOAuth: (provider, params) => session.linkOAuth(provider, params),\n\t\tlistLinkedAccounts: () => session.listLinkedAccounts(),\n\t\tunlinkOAuth: (provider) => session.unlinkOAuth(provider),\n\t\tsignOut: () => session.signOut(),\n\t}\n}\n\nexport function createCurrentUserStore(): Readable<AuthUser | null> {\n\tconst { session } = getAuthContext()\n\treturn readable<AuthUser | null>(session.getSnapshot().user, (set) => {\n\t\tconst sync = (): void => {\n\t\t\tset(session.getSnapshot().user)\n\t\t}\n\t\tsync()\n\t\treturn session.subscribe(sync)\n\t})\n}\n\n/** @alias createCurrentUserStore */\nexport const useCurrentUser = createCurrentUserStore\n\nexport function createAuthStatusStore(): Readable<{\n\tstate: AuthSessionSnapshot['state']\n\tisAuthenticated: boolean\n\tisLoading: boolean\n}> {\n\tconst { session } = getAuthContext()\n\treturn readable(\n\t\t{\n\t\t\tstate: session.getSnapshot().state,\n\t\t\tisAuthenticated: session.getSnapshot().isAuthenticated,\n\t\t\tisLoading: session.getSnapshot().isLoading,\n\t\t},\n\t\t(set) => {\n\t\t\tconst sync = (): void => {\n\t\t\t\tconst snapshot = session.getSnapshot()\n\t\t\t\tset({\n\t\t\t\t\tstate: snapshot.state,\n\t\t\t\t\tisAuthenticated: snapshot.isAuthenticated,\n\t\t\t\t\tisLoading: snapshot.isLoading,\n\t\t\t\t})\n\t\t\t}\n\t\t\tsync()\n\t\t\treturn session.subscribe(sync)\n\t\t},\n\t)\n}\n\n/** @alias createAuthStatusStore */\nexport const useAuthStatus = createAuthStatusStore\n","import { getContext, setContext } from 'svelte'\nimport { type OrgSession, createOrgSession } from '../bindings/create-org-session'\nimport type { OrgClient } from '../client/org-client'\n\nconst orgContextKey = Symbol('korajs-org-context')\n\nexport interface OrgContextValue {\n\tclient: OrgClient\n\tsession: OrgSession\n}\n\nexport function initOrgProvider(client: OrgClient): OrgContextValue {\n\tconst session = createOrgSession(client)\n\tconst value: OrgContextValue = { client, session }\n\tsetContext(orgContextKey, value)\n\treturn value\n}\n\nexport function getOrgContext(): OrgContextValue {\n\tconst context = getContext<OrgContextValue | undefined>(orgContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'Org context missing. Wrap your app with <OrgProvider client={orgClient}> from @korajs/auth/svelte.',\n\t\t)\n\t}\n\treturn context\n}\n\nexport function destroyOrgProvider(context: OrgContextValue): void {\n\tcontext.session.destroy()\n}\n","import type {\n\tClientInvitation,\n\tClientMembership,\n\tClientOrganization,\n\tOrgClient,\n} from '../client/org-client'\n\nexport interface OrgSnapshot {\n\torgId: string | null\n\torg: ClientOrganization | null\n\trole: string | null\n}\n\nexport interface OrgSession {\n\treadonly client: OrgClient\n\tgetSnapshot(): OrgSnapshot\n\tsubscribe(listener: () => void): () => void\n\tcheckPermission(requiredRole: string): boolean\n\tdestroy(): void\n}\n\nconst ROLE_LEVELS: Record<string, number> = {\n\tviewer: 10,\n\tbilling: 15,\n\tmember: 20,\n\tadmin: 30,\n\towner: 40,\n}\n\nexport function checkOrgPermission(currentRole: string | null, requiredRole: string): boolean {\n\tif (!currentRole) return false\n\tconst currentLevel = ROLE_LEVELS[currentRole] ?? 0\n\tconst requiredLevel = ROLE_LEVELS[requiredRole] ?? 0\n\treturn currentLevel >= requiredLevel\n}\n\n/**\n * Framework-agnostic org session with reactive snapshot subscription.\n */\nexport function createOrgSession(client: OrgClient): OrgSession {\n\tlet snapshot = buildSnapshot(client)\n\tconst listeners = new Set<() => void>()\n\n\tconst notify = (): void => {\n\t\tsnapshot = buildSnapshot(client)\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}\n\n\tconst unsubscribeOrgChange = client.onOrgChange(notify)\n\n\treturn {\n\t\tclient,\n\t\tgetSnapshot: () => snapshot,\n\t\tsubscribe(listener: () => void): () => void {\n\t\t\tlisteners.add(listener)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener)\n\t\t\t}\n\t\t},\n\t\tcheckPermission(requiredRole: string): boolean {\n\t\t\treturn checkOrgPermission(snapshot.role, requiredRole)\n\t\t},\n\t\tdestroy(): void {\n\t\t\tunsubscribeOrgChange()\n\t\t\tlisteners.clear()\n\t\t},\n\t}\n}\n\nfunction buildSnapshot(client: OrgClient): OrgSnapshot {\n\treturn {\n\t\torgId: client.activeOrgId,\n\t\torg: client.activeOrg,\n\t\trole: client.activeRole,\n\t}\n}\n\nexport interface UseOrgMembersActions {\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n}\n\n/**\n * Shared org member management actions (loading state remains framework-specific).\n */\nexport function createOrgMembersActions(\n\tclient: OrgClient,\n\torgId: string,\n\tonError: (message: string) => void,\n): UseOrgMembersActions {\n\treturn {\n\t\tasync refresh(): Promise<void> {\n\t\t\tawait client.listMembers(orgId)\n\t\t},\n\t\tasync invite(email: string, role: string): Promise<ClientInvitation> {\n\t\t\ttry {\n\t\t\t\treturn await client.inviteMember(orgId, { email, role })\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\t\t\tonError(message)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\t\tasync removeMember(userId: string): Promise<void> {\n\t\t\ttry {\n\t\t\t\tawait client.removeMember(orgId, userId)\n\t\t\t} catch (error) {\n\t\t\t\tonError(error instanceof Error ? error.message : String(error))\n\t\t\t}\n\t\t},\n\t\tasync updateRole(userId: string, role: string): Promise<void> {\n\t\t\ttry {\n\t\t\t\tawait client.updateMemberRole(orgId, userId, role)\n\t\t\t} catch (error) {\n\t\t\t\tonError(error instanceof Error ? error.message : String(error))\n\t\t\t}\n\t\t},\n\t}\n}\n\nexport async function loadOrgMembers(\n\tclient: OrgClient,\n\torgId: string,\n): Promise<ClientMembership[]> {\n\treturn client.listMembers(orgId)\n}\n","import { type Readable, derived, get, readable, writable } from 'svelte/store'\nimport {\n\tcheckOrgPermission,\n\tcreateOrgMembersActions,\n\tloadOrgMembers,\n} from '../bindings/create-org-session'\nimport type { ClientInvitation, ClientMembership, ClientOrganization } from '../client/org-client'\nimport { getOrgContext } from './org-context'\n\nexport interface UseOrgResult {\n\tsubscribe: Readable<{\n\t\torg: ClientOrganization | null\n\t\trole: string | null\n\t\torgId: string | null\n\t\terror: string | null\n\t}>['subscribe']\n\tget org(): ClientOrganization | null\n\tget role(): string | null\n\tget orgId(): string | null\n\tswitchOrg: (orgId: string) => Promise<void>\n\tcreateOrg: (params: { name: string; slug?: string }) => Promise<ClientOrganization>\n\tleaveOrg: () => Promise<void>\n\tclearOrg: () => void\n\tlistOrgs: () => Promise<ClientOrganization[]>\n}\n\nexport interface UseOrgMembersResult {\n\tsubscribe: Readable<{\n\t\tmembers: ClientMembership[]\n\t\tisLoading: boolean\n\t\terror: string | null\n\t}>['subscribe']\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n}\n\nfunction createOrgSnapshotStore(): Readable<{\n\torg: ClientOrganization | null\n\trole: string | null\n\torgId: string | null\n}> {\n\tconst { session } = getOrgContext()\n\n\treturn readable(session.getSnapshot(), (set) => {\n\t\tset(session.getSnapshot())\n\t\treturn session.subscribe(() => {\n\t\t\tset(session.getSnapshot())\n\t\t})\n\t})\n}\n\nexport function useOrg(): UseOrgResult {\n\tconst { client, session } = getOrgContext()\n\tconst snapshotStore = createOrgSnapshotStore()\n\tconst error = writable<string | null>(null)\n\n\tconst store = derived([snapshotStore, error], ([snapshot, errorValue]) => ({\n\t\t...snapshot,\n\t\terror: errorValue,\n\t}))\n\n\tconst switchOrg = async (orgId: string): Promise<void> => {\n\t\terror.set(null)\n\t\ttry {\n\t\t\tawait client.switchOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t}\n\t}\n\n\tconst createOrg = async (params: {\n\t\tname: string\n\t\tslug?: string\n\t}): Promise<ClientOrganization> => {\n\t\terror.set(null)\n\t\ttry {\n\t\t\treturn await client.createOrg(params)\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\terror.set(message)\n\t\t\tthrow err\n\t\t}\n\t}\n\n\tconst leaveOrg = async (): Promise<void> => {\n\t\tconst orgId = get(snapshotStore).orgId\n\t\tif (!orgId) return\n\t\terror.set(null)\n\t\ttry {\n\t\t\tawait client.leaveOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t}\n\t}\n\n\tconst clearOrg = (): void => {\n\t\tclient.clearActiveOrg()\n\t}\n\n\tconst listOrgs = async (): Promise<ClientOrganization[]> => {\n\t\ttry {\n\t\t\treturn await client.listOrgs()\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t\treturn []\n\t\t}\n\t}\n\n\treturn {\n\t\tsubscribe: store.subscribe,\n\t\tget org() {\n\t\t\treturn get(snapshotStore).org\n\t\t},\n\t\tget role() {\n\t\t\treturn get(snapshotStore).role\n\t\t},\n\t\tget orgId() {\n\t\t\treturn get(snapshotStore).orgId\n\t\t},\n\t\tswitchOrg,\n\t\tcreateOrg,\n\t\tleaveOrg,\n\t\tclearOrg,\n\t\tlistOrgs,\n\t}\n}\n\nexport function useOrgMembers(orgId: string): UseOrgMembersResult {\n\tconst { client } = getOrgContext()\n\tconst members = writable<ClientMembership[]>([])\n\tconst isLoading = writable(true)\n\tconst error = writable<string | null>(null)\n\n\tconst refresh = async (targetOrgId: string): Promise<void> => {\n\t\tisLoading.set(true)\n\t\terror.set(null)\n\t\ttry {\n\t\t\tmembers.set(await loadOrgMembers(client, targetOrgId))\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t} finally {\n\t\t\tisLoading.set(false)\n\t\t}\n\t}\n\n\t$effect(() => {\n\t\tvoid refresh(orgId)\n\t})\n\n\tconst actions = createOrgMembersActions(client, orgId, (message) => {\n\t\terror.set(message)\n\t})\n\n\tconst invite = async (email: string, role: string): Promise<ClientInvitation> => {\n\t\tconst result = await actions.invite(email, role)\n\t\tawait refresh(orgId)\n\t\treturn result\n\t}\n\n\tconst removeMember = async (userId: string): Promise<void> => {\n\t\tawait actions.removeMember(userId)\n\t\tawait refresh(orgId)\n\t}\n\n\tconst updateRole = async (userId: string, role: string): Promise<void> => {\n\t\tawait actions.updateRole(userId, role)\n\t\tawait refresh(orgId)\n\t}\n\n\tconst store = derived([members, isLoading, error], ([memberList, loading, errorValue]) => ({\n\t\tmembers: memberList,\n\t\tisLoading: loading,\n\t\terror: errorValue,\n\t}))\n\n\treturn {\n\t\tsubscribe: store.subscribe,\n\t\trefresh: () => refresh(orgId),\n\t\tinvite,\n\t\tremoveMember,\n\t\tupdateRole,\n\t}\n}\n\nexport function createPermissionStore(requiredRole: string): Readable<boolean> {\n\tconst { session } = getOrgContext()\n\n\treturn readable(session.checkPermission(requiredRole), (set) => {\n\t\tset(session.checkPermission(requiredRole))\n\t\treturn session.subscribe(() => {\n\t\t\tset(session.checkPermission(requiredRole))\n\t\t})\n\t})\n}\n\n/** Alias for {@link createPermissionStore}. */\nexport const usePermission = createPermissionStore\n\nexport { checkOrgPermission }\n"],"mappings":"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","names":["buildSnapshot","import_svelte","import_store"]}
|
package/dist/svelte.js
CHANGED
package/dist/svelte.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/svelte/auth-context.ts","../src/svelte/use-auth.ts","../src/svelte/org-context.ts","../src/svelte/org-hooks.ts"],"sourcesContent":["import { getContext, setContext } from 'svelte'\nimport type { AuthClient, AuthState } from '../client/auth-client'\nimport { createAuthSession, type AuthSession } from '../bindings/create-auth-session'\n\nconst authContextKey = Symbol('korajs-auth-context')\n\nexport interface AuthContextValue {\n\tclient: AuthClient\n\tsession: AuthSession\n\tget state(): AuthState\n\tget isLoading(): boolean\n}\n\n/**\n * Initialize auth context inside a Svelte component (root layout).\n * Must be called during component initialization before children render.\n */\nexport function initAuthProvider(client: AuthClient): AuthContextValue {\n\tconst session = createAuthSession(client)\n\n\tconst value: AuthContextValue = {\n\t\tclient,\n\t\tsession,\n\t\tget state() {\n\t\t\treturn session.getSnapshot().state\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn session.getSnapshot().isLoading\n\t\t},\n\t}\n\n\tsetContext(authContextKey, value)\n\treturn value\n}\n\nexport function getAuthContext(): AuthContextValue {\n\tconst context = getContext<AuthContextValue | undefined>(authContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'Auth context missing. Call initAuthProvider(client) in your root layout component.',\n\t\t)\n\t}\n\treturn context\n}\n\nexport function destroyAuthProvider(context: AuthContextValue): void {\n\tcontext.session.destroy()\n}\n","import { readable, type Readable } from 'svelte/store'\nimport type {\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\nimport type { AuthSessionSnapshot } from '../bindings/create-auth-session'\nimport { getAuthContext } from './auth-context'\n\nexport interface UseAuthResult extends AuthSessionSnapshot {\n\tsignUp: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignIn: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignInWithOAuth: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn: (provider: string, params: OAuthCallbackParams) => Promise<void>\n\tgetOAuthAuthorizationUrl: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tlinkOAuth: (provider: string, params: OAuthCallbackParams) => Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts: () => Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth: (provider: string) => Promise<void>\n\tsignOut: () => Promise<void>\n}\n\nexport function createAuthStore(): Readable<UseAuthResult> {\n\tconst { session } = getAuthContext()\n\n\treturn readable<UseAuthResult>(buildResult(session), (set) => {\n\t\tconst sync = (): void => {\n\t\t\tset(buildResult(session))\n\t\t}\n\t\tsync()\n\t\treturn session.subscribe(sync)\n\t})\n}\n\n/** @alias createAuthStore */\nexport const useAuth = createAuthStore\n\nfunction buildResult(session: ReturnType<typeof getAuthContext>['session']): UseAuthResult {\n\tconst snapshot = session.getSnapshot()\n\treturn {\n\t\t...snapshot,\n\t\tsignUp: (params) => session.signUp(params),\n\t\tsignIn: (params) => session.signIn(params),\n\t\tsignInWithOAuth: (provider, options) => session.signInWithOAuth(provider, options),\n\t\tcompleteOAuthSignIn: (provider, params) => session.completeOAuthSignIn(provider, params),\n\t\tgetOAuthAuthorizationUrl: (provider, options) =>\n\t\t\tsession.getOAuthAuthorizationUrl(provider, options),\n\t\tlinkOAuth: (provider, params) => session.linkOAuth(provider, params),\n\t\tlistLinkedAccounts: () => session.listLinkedAccounts(),\n\t\tunlinkOAuth: (provider) => session.unlinkOAuth(provider),\n\t\tsignOut: () => session.signOut(),\n\t}\n}\n\nexport function createCurrentUserStore(): Readable<AuthUser | null> {\n\tconst { session } = getAuthContext()\n\treturn readable<AuthUser | null>(session.getSnapshot().user, (set) => {\n\t\tconst sync = (): void => {\n\t\t\tset(session.getSnapshot().user)\n\t\t}\n\t\tsync()\n\t\treturn session.subscribe(sync)\n\t})\n}\n\n/** @alias createCurrentUserStore */\nexport const useCurrentUser = createCurrentUserStore\n\nexport function createAuthStatusStore(): Readable<{\n\tstate: AuthSessionSnapshot['state']\n\tisAuthenticated: boolean\n\tisLoading: boolean\n}> {\n\tconst { session } = getAuthContext()\n\treturn readable(\n\t\t{\n\t\t\tstate: session.getSnapshot().state,\n\t\t\tisAuthenticated: session.getSnapshot().isAuthenticated,\n\t\t\tisLoading: session.getSnapshot().isLoading,\n\t\t},\n\t\t(set) => {\n\t\t\tconst sync = (): void => {\n\t\t\t\tconst snapshot = session.getSnapshot()\n\t\t\t\tset({\n\t\t\t\t\tstate: snapshot.state,\n\t\t\t\t\tisAuthenticated: snapshot.isAuthenticated,\n\t\t\t\t\tisLoading: snapshot.isLoading,\n\t\t\t\t})\n\t\t\t}\n\t\t\tsync()\n\t\t\treturn session.subscribe(sync)\n\t\t},\n\t)\n}\n\n/** @alias createAuthStatusStore */\nexport const useAuthStatus = createAuthStatusStore\n","import { getContext, setContext } from 'svelte'\nimport type { OrgClient } from '../client/org-client'\nimport { createOrgSession, type OrgSession } from '../bindings/create-org-session'\n\nconst orgContextKey = Symbol('korajs-org-context')\n\nexport interface OrgContextValue {\n\tclient: OrgClient\n\tsession: OrgSession\n}\n\nexport function initOrgProvider(client: OrgClient): OrgContextValue {\n\tconst session = createOrgSession(client)\n\tconst value: OrgContextValue = { client, session }\n\tsetContext(orgContextKey, value)\n\treturn value\n}\n\nexport function getOrgContext(): OrgContextValue {\n\tconst context = getContext<OrgContextValue | undefined>(orgContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'Org context missing. Wrap your app with <OrgProvider client={orgClient}> from @korajs/auth/svelte.',\n\t\t)\n\t}\n\treturn context\n}\n\nexport function destroyOrgProvider(context: OrgContextValue): void {\n\tcontext.session.destroy()\n}\n","import { derived, get, readable, writable, type Readable } from 'svelte/store'\nimport type {\n\tClientInvitation,\n\tClientMembership,\n\tClientOrganization,\n} from '../client/org-client'\nimport {\n\tcheckOrgPermission,\n\tcreateOrgMembersActions,\n\tloadOrgMembers,\n} from '../bindings/create-org-session'\nimport { getOrgContext } from './org-context'\n\nexport interface UseOrgResult {\n\tsubscribe: Readable<{\n\t\torg: ClientOrganization | null\n\t\trole: string | null\n\t\torgId: string | null\n\t\terror: string | null\n\t}>['subscribe']\n\tget org(): ClientOrganization | null\n\tget role(): string | null\n\tget orgId(): string | null\n\tswitchOrg: (orgId: string) => Promise<void>\n\tcreateOrg: (params: { name: string; slug?: string }) => Promise<ClientOrganization>\n\tleaveOrg: () => Promise<void>\n\tclearOrg: () => void\n\tlistOrgs: () => Promise<ClientOrganization[]>\n}\n\nexport interface UseOrgMembersResult {\n\tsubscribe: Readable<{\n\t\tmembers: ClientMembership[]\n\t\tisLoading: boolean\n\t\terror: string | null\n\t}>['subscribe']\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n}\n\nfunction createOrgSnapshotStore(): Readable<{\n\torg: ClientOrganization | null\n\trole: string | null\n\torgId: string | null\n}> {\n\tconst { session } = getOrgContext()\n\n\treturn readable(session.getSnapshot(), (set) => {\n\t\tset(session.getSnapshot())\n\t\treturn session.subscribe(() => {\n\t\t\tset(session.getSnapshot())\n\t\t})\n\t})\n}\n\nexport function useOrg(): UseOrgResult {\n\tconst { client, session } = getOrgContext()\n\tconst snapshotStore = createOrgSnapshotStore()\n\tconst error = writable<string | null>(null)\n\n\tconst store = derived([snapshotStore, error], ([snapshot, errorValue]) => ({\n\t\t...snapshot,\n\t\terror: errorValue,\n\t}))\n\n\tconst switchOrg = async (orgId: string): Promise<void> => {\n\t\terror.set(null)\n\t\ttry {\n\t\t\tawait client.switchOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t}\n\t}\n\n\tconst createOrg = async (params: {\n\t\tname: string\n\t\tslug?: string\n\t}): Promise<ClientOrganization> => {\n\t\terror.set(null)\n\t\ttry {\n\t\t\treturn await client.createOrg(params)\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\terror.set(message)\n\t\t\tthrow err\n\t\t}\n\t}\n\n\tconst leaveOrg = async (): Promise<void> => {\n\t\tconst orgId = get(snapshotStore).orgId\n\t\tif (!orgId) return\n\t\terror.set(null)\n\t\ttry {\n\t\t\tawait client.leaveOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t}\n\t}\n\n\tconst clearOrg = (): void => {\n\t\tclient.clearActiveOrg()\n\t}\n\n\tconst listOrgs = async (): Promise<ClientOrganization[]> => {\n\t\ttry {\n\t\t\treturn await client.listOrgs()\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t\treturn []\n\t\t}\n\t}\n\n\treturn {\n\t\tsubscribe: store.subscribe,\n\t\tget org() {\n\t\t\treturn get(snapshotStore).org\n\t\t},\n\t\tget role() {\n\t\t\treturn get(snapshotStore).role\n\t\t},\n\t\tget orgId() {\n\t\t\treturn get(snapshotStore).orgId\n\t\t},\n\t\tswitchOrg,\n\t\tcreateOrg,\n\t\tleaveOrg,\n\t\tclearOrg,\n\t\tlistOrgs,\n\t}\n}\n\nexport function useOrgMembers(orgId: string): UseOrgMembersResult {\n\tconst { client } = getOrgContext()\n\tconst members = writable<ClientMembership[]>([])\n\tconst isLoading = writable(true)\n\tconst error = writable<string | null>(null)\n\n\tconst refresh = async (targetOrgId: string): Promise<void> => {\n\t\tisLoading.set(true)\n\t\terror.set(null)\n\t\ttry {\n\t\t\tmembers.set(await loadOrgMembers(client, targetOrgId))\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t} finally {\n\t\t\tisLoading.set(false)\n\t\t}\n\t}\n\n\t$effect(() => {\n\t\tvoid refresh(orgId)\n\t})\n\n\tconst actions = createOrgMembersActions(client, orgId, (message) => {\n\t\terror.set(message)\n\t})\n\n\tconst invite = async (email: string, role: string): Promise<ClientInvitation> => {\n\t\tconst result = await actions.invite(email, role)\n\t\tawait refresh(orgId)\n\t\treturn result\n\t}\n\n\tconst removeMember = async (userId: string): Promise<void> => {\n\t\tawait actions.removeMember(userId)\n\t\tawait refresh(orgId)\n\t}\n\n\tconst updateRole = async (userId: string, role: string): Promise<void> => {\n\t\tawait actions.updateRole(userId, role)\n\t\tawait refresh(orgId)\n\t}\n\n\tconst store = derived([members, isLoading, error], ([memberList, loading, errorValue]) => ({\n\t\tmembers: memberList,\n\t\tisLoading: loading,\n\t\terror: errorValue,\n\t}))\n\n\treturn {\n\t\tsubscribe: store.subscribe,\n\t\trefresh: () => refresh(orgId),\n\t\tinvite,\n\t\tremoveMember,\n\t\tupdateRole,\n\t}\n}\n\nexport function createPermissionStore(requiredRole: string): Readable<boolean> {\n\tconst { session } = getOrgContext()\n\n\treturn readable(session.checkPermission(requiredRole), (set) => {\n\t\tset(session.checkPermission(requiredRole))\n\t\treturn session.subscribe(() => {\n\t\t\tset(session.checkPermission(requiredRole))\n\t\t})\n\t})\n}\n\n/** Alias for {@link createPermissionStore}. */\nexport const usePermission = createPermissionStore\n\nexport { checkOrgPermission }\n"],"mappings":"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","names":["getContext","setContext","setContext","getContext","readable","readable"]}
|
|
1
|
+
{"version":3,"sources":["../src/svelte/auth-context.ts","../src/svelte/use-auth.ts","../src/svelte/org-context.ts","../src/svelte/org-hooks.ts"],"sourcesContent":["import { getContext, setContext } from 'svelte'\nimport { type AuthSession, createAuthSession } from '../bindings/create-auth-session'\nimport type { AuthClient, AuthState } from '../client/auth-client'\n\nconst authContextKey = Symbol('korajs-auth-context')\n\nexport interface AuthContextValue {\n\tclient: AuthClient\n\tsession: AuthSession\n\tget state(): AuthState\n\tget isLoading(): boolean\n}\n\n/**\n * Initialize auth context inside a Svelte component (root layout).\n * Must be called during component initialization before children render.\n */\nexport function initAuthProvider(client: AuthClient): AuthContextValue {\n\tconst session = createAuthSession(client)\n\n\tconst value: AuthContextValue = {\n\t\tclient,\n\t\tsession,\n\t\tget state() {\n\t\t\treturn session.getSnapshot().state\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn session.getSnapshot().isLoading\n\t\t},\n\t}\n\n\tsetContext(authContextKey, value)\n\treturn value\n}\n\nexport function getAuthContext(): AuthContextValue {\n\tconst context = getContext<AuthContextValue | undefined>(authContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'Auth context missing. Call initAuthProvider(client) in your root layout component.',\n\t\t)\n\t}\n\treturn context\n}\n\nexport function destroyAuthProvider(context: AuthContextValue): void {\n\tcontext.session.destroy()\n}\n","import { type Readable, readable } from 'svelte/store'\nimport type { AuthSessionSnapshot } from '../bindings/create-auth-session'\nimport type {\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\nimport { getAuthContext } from './auth-context'\n\nexport interface UseAuthResult extends AuthSessionSnapshot {\n\tsignUp: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignIn: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignInWithOAuth: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn: (provider: string, params: OAuthCallbackParams) => Promise<void>\n\tgetOAuthAuthorizationUrl: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tlinkOAuth: (provider: string, params: OAuthCallbackParams) => Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts: () => Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth: (provider: string) => Promise<void>\n\tsignOut: () => Promise<void>\n}\n\nexport function createAuthStore(): Readable<UseAuthResult> {\n\tconst { session } = getAuthContext()\n\n\treturn readable<UseAuthResult>(buildResult(session), (set) => {\n\t\tconst sync = (): void => {\n\t\t\tset(buildResult(session))\n\t\t}\n\t\tsync()\n\t\treturn session.subscribe(sync)\n\t})\n}\n\n/** @alias createAuthStore */\nexport const useAuth = createAuthStore\n\nfunction buildResult(session: ReturnType<typeof getAuthContext>['session']): UseAuthResult {\n\tconst snapshot = session.getSnapshot()\n\treturn {\n\t\t...snapshot,\n\t\tsignUp: (params) => session.signUp(params),\n\t\tsignIn: (params) => session.signIn(params),\n\t\tsignInWithOAuth: (provider, options) => session.signInWithOAuth(provider, options),\n\t\tcompleteOAuthSignIn: (provider, params) => session.completeOAuthSignIn(provider, params),\n\t\tgetOAuthAuthorizationUrl: (provider, options) =>\n\t\t\tsession.getOAuthAuthorizationUrl(provider, options),\n\t\tlinkOAuth: (provider, params) => session.linkOAuth(provider, params),\n\t\tlistLinkedAccounts: () => session.listLinkedAccounts(),\n\t\tunlinkOAuth: (provider) => session.unlinkOAuth(provider),\n\t\tsignOut: () => session.signOut(),\n\t}\n}\n\nexport function createCurrentUserStore(): Readable<AuthUser | null> {\n\tconst { session } = getAuthContext()\n\treturn readable<AuthUser | null>(session.getSnapshot().user, (set) => {\n\t\tconst sync = (): void => {\n\t\t\tset(session.getSnapshot().user)\n\t\t}\n\t\tsync()\n\t\treturn session.subscribe(sync)\n\t})\n}\n\n/** @alias createCurrentUserStore */\nexport const useCurrentUser = createCurrentUserStore\n\nexport function createAuthStatusStore(): Readable<{\n\tstate: AuthSessionSnapshot['state']\n\tisAuthenticated: boolean\n\tisLoading: boolean\n}> {\n\tconst { session } = getAuthContext()\n\treturn readable(\n\t\t{\n\t\t\tstate: session.getSnapshot().state,\n\t\t\tisAuthenticated: session.getSnapshot().isAuthenticated,\n\t\t\tisLoading: session.getSnapshot().isLoading,\n\t\t},\n\t\t(set) => {\n\t\t\tconst sync = (): void => {\n\t\t\t\tconst snapshot = session.getSnapshot()\n\t\t\t\tset({\n\t\t\t\t\tstate: snapshot.state,\n\t\t\t\t\tisAuthenticated: snapshot.isAuthenticated,\n\t\t\t\t\tisLoading: snapshot.isLoading,\n\t\t\t\t})\n\t\t\t}\n\t\t\tsync()\n\t\t\treturn session.subscribe(sync)\n\t\t},\n\t)\n}\n\n/** @alias createAuthStatusStore */\nexport const useAuthStatus = createAuthStatusStore\n","import { getContext, setContext } from 'svelte'\nimport { type OrgSession, createOrgSession } from '../bindings/create-org-session'\nimport type { OrgClient } from '../client/org-client'\n\nconst orgContextKey = Symbol('korajs-org-context')\n\nexport interface OrgContextValue {\n\tclient: OrgClient\n\tsession: OrgSession\n}\n\nexport function initOrgProvider(client: OrgClient): OrgContextValue {\n\tconst session = createOrgSession(client)\n\tconst value: OrgContextValue = { client, session }\n\tsetContext(orgContextKey, value)\n\treturn value\n}\n\nexport function getOrgContext(): OrgContextValue {\n\tconst context = getContext<OrgContextValue | undefined>(orgContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'Org context missing. Wrap your app with <OrgProvider client={orgClient}> from @korajs/auth/svelte.',\n\t\t)\n\t}\n\treturn context\n}\n\nexport function destroyOrgProvider(context: OrgContextValue): void {\n\tcontext.session.destroy()\n}\n","import { type Readable, derived, get, readable, writable } from 'svelte/store'\nimport {\n\tcheckOrgPermission,\n\tcreateOrgMembersActions,\n\tloadOrgMembers,\n} from '../bindings/create-org-session'\nimport type { ClientInvitation, ClientMembership, ClientOrganization } from '../client/org-client'\nimport { getOrgContext } from './org-context'\n\nexport interface UseOrgResult {\n\tsubscribe: Readable<{\n\t\torg: ClientOrganization | null\n\t\trole: string | null\n\t\torgId: string | null\n\t\terror: string | null\n\t}>['subscribe']\n\tget org(): ClientOrganization | null\n\tget role(): string | null\n\tget orgId(): string | null\n\tswitchOrg: (orgId: string) => Promise<void>\n\tcreateOrg: (params: { name: string; slug?: string }) => Promise<ClientOrganization>\n\tleaveOrg: () => Promise<void>\n\tclearOrg: () => void\n\tlistOrgs: () => Promise<ClientOrganization[]>\n}\n\nexport interface UseOrgMembersResult {\n\tsubscribe: Readable<{\n\t\tmembers: ClientMembership[]\n\t\tisLoading: boolean\n\t\terror: string | null\n\t}>['subscribe']\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n}\n\nfunction createOrgSnapshotStore(): Readable<{\n\torg: ClientOrganization | null\n\trole: string | null\n\torgId: string | null\n}> {\n\tconst { session } = getOrgContext()\n\n\treturn readable(session.getSnapshot(), (set) => {\n\t\tset(session.getSnapshot())\n\t\treturn session.subscribe(() => {\n\t\t\tset(session.getSnapshot())\n\t\t})\n\t})\n}\n\nexport function useOrg(): UseOrgResult {\n\tconst { client, session } = getOrgContext()\n\tconst snapshotStore = createOrgSnapshotStore()\n\tconst error = writable<string | null>(null)\n\n\tconst store = derived([snapshotStore, error], ([snapshot, errorValue]) => ({\n\t\t...snapshot,\n\t\terror: errorValue,\n\t}))\n\n\tconst switchOrg = async (orgId: string): Promise<void> => {\n\t\terror.set(null)\n\t\ttry {\n\t\t\tawait client.switchOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t}\n\t}\n\n\tconst createOrg = async (params: {\n\t\tname: string\n\t\tslug?: string\n\t}): Promise<ClientOrganization> => {\n\t\terror.set(null)\n\t\ttry {\n\t\t\treturn await client.createOrg(params)\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\terror.set(message)\n\t\t\tthrow err\n\t\t}\n\t}\n\n\tconst leaveOrg = async (): Promise<void> => {\n\t\tconst orgId = get(snapshotStore).orgId\n\t\tif (!orgId) return\n\t\terror.set(null)\n\t\ttry {\n\t\t\tawait client.leaveOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t}\n\t}\n\n\tconst clearOrg = (): void => {\n\t\tclient.clearActiveOrg()\n\t}\n\n\tconst listOrgs = async (): Promise<ClientOrganization[]> => {\n\t\ttry {\n\t\t\treturn await client.listOrgs()\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t\treturn []\n\t\t}\n\t}\n\n\treturn {\n\t\tsubscribe: store.subscribe,\n\t\tget org() {\n\t\t\treturn get(snapshotStore).org\n\t\t},\n\t\tget role() {\n\t\t\treturn get(snapshotStore).role\n\t\t},\n\t\tget orgId() {\n\t\t\treturn get(snapshotStore).orgId\n\t\t},\n\t\tswitchOrg,\n\t\tcreateOrg,\n\t\tleaveOrg,\n\t\tclearOrg,\n\t\tlistOrgs,\n\t}\n}\n\nexport function useOrgMembers(orgId: string): UseOrgMembersResult {\n\tconst { client } = getOrgContext()\n\tconst members = writable<ClientMembership[]>([])\n\tconst isLoading = writable(true)\n\tconst error = writable<string | null>(null)\n\n\tconst refresh = async (targetOrgId: string): Promise<void> => {\n\t\tisLoading.set(true)\n\t\terror.set(null)\n\t\ttry {\n\t\t\tmembers.set(await loadOrgMembers(client, targetOrgId))\n\t\t} catch (err) {\n\t\t\terror.set(err instanceof Error ? err.message : String(err))\n\t\t} finally {\n\t\t\tisLoading.set(false)\n\t\t}\n\t}\n\n\t$effect(() => {\n\t\tvoid refresh(orgId)\n\t})\n\n\tconst actions = createOrgMembersActions(client, orgId, (message) => {\n\t\terror.set(message)\n\t})\n\n\tconst invite = async (email: string, role: string): Promise<ClientInvitation> => {\n\t\tconst result = await actions.invite(email, role)\n\t\tawait refresh(orgId)\n\t\treturn result\n\t}\n\n\tconst removeMember = async (userId: string): Promise<void> => {\n\t\tawait actions.removeMember(userId)\n\t\tawait refresh(orgId)\n\t}\n\n\tconst updateRole = async (userId: string, role: string): Promise<void> => {\n\t\tawait actions.updateRole(userId, role)\n\t\tawait refresh(orgId)\n\t}\n\n\tconst store = derived([members, isLoading, error], ([memberList, loading, errorValue]) => ({\n\t\tmembers: memberList,\n\t\tisLoading: loading,\n\t\terror: errorValue,\n\t}))\n\n\treturn {\n\t\tsubscribe: store.subscribe,\n\t\trefresh: () => refresh(orgId),\n\t\tinvite,\n\t\tremoveMember,\n\t\tupdateRole,\n\t}\n}\n\nexport function createPermissionStore(requiredRole: string): Readable<boolean> {\n\tconst { session } = getOrgContext()\n\n\treturn readable(session.checkPermission(requiredRole), (set) => {\n\t\tset(session.checkPermission(requiredRole))\n\t\treturn session.subscribe(() => {\n\t\t\tset(session.checkPermission(requiredRole))\n\t\t})\n\t})\n}\n\n/** Alias for {@link createPermissionStore}. */\nexport const usePermission = createPermissionStore\n\nexport { checkOrgPermission }\n"],"mappings":"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","names":["getContext","setContext","setContext","getContext","readable","readable"]}
|
package/dist/vue.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vue.ts","../src/vue/auth-provider.ts","../src/bindings/create-auth-session.ts","../src/vue/auth-context.ts","../src/vue/use-auth.ts","../src/vue/org-provider.ts","../src/bindings/create-org-session.ts","../src/vue/org-hooks.ts"],"sourcesContent":["export { AuthProvider, useAuthContext } from './vue/auth-provider'\nexport type { AuthProviderProps } from './vue/auth-provider-types'\nexport { useAuth, useCurrentUser, useAuthStatus } from './vue/use-auth'\nexport type { UseAuthResult, AuthStatus } from './vue/use-auth'\nexport { authContextKey } from './vue/auth-context'\nexport type { AuthContextValue } from './vue/auth-context'\nexport { OrgProvider, useOrgContext } from './vue/org-provider'\nexport type { OrgContextValue } from './vue/org-provider'\nexport { useOrg, useOrgMembers, usePermission } from './vue/org-hooks'\nexport type { UseOrgResult, UseOrgMembersResult } from './vue/org-hooks'\n","import type { PropType, VNode } from 'vue'\nimport { defineComponent, h, inject, onScopeDispose, provide, shallowRef } from 'vue'\nimport type { AuthClient } from '../client/auth-client'\nimport { createAuthSession, type AuthSessionSnapshot } from '../bindings/create-auth-session'\nimport { authContextKey, type AuthContextValue } from './auth-context'\n\nexport const AuthProvider = defineComponent({\n\tname: 'AuthProvider',\n\tprops: {\n\t\tclient: {\n\t\t\ttype: Object as PropType<AuthClient>,\n\t\t\trequired: true,\n\t\t},\n\t\tfallback: {\n\t\t\ttype: [Object, String] as PropType<VNode | string | null>,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\tconst session = createAuthSession(props.client)\n\t\tconst snapshot = shallowRef<AuthSessionSnapshot>(session.getSnapshot())\n\n\t\tconst unsubscribe = session.subscribe(() => {\n\t\t\tsnapshot.value = session.getSnapshot()\n\t\t})\n\n\t\tonScopeDispose(() => {\n\t\t\tunsubscribe()\n\t\t\tsession.destroy()\n\t\t})\n\n\t\tconst contextValue: AuthContextValue = {\n\t\t\tclient: props.client,\n\t\t\tget state() {\n\t\t\t\treturn snapshot.value.state\n\t\t\t},\n\t\t\tget isLoading() {\n\t\t\t\treturn snapshot.value.isLoading\n\t\t\t},\n\t\t\tsession,\n\t\t}\n\n\t\tprovide(authContextKey, contextValue)\n\n\t\treturn () => {\n\t\t\tconst current = snapshot.value\n\n\t\t\tif (current.initError) {\n\t\t\t\treturn h(\n\t\t\t\t\t'div',\n\t\t\t\t\t{\n\t\t\t\t\t\tstyle: { color: 'red', padding: '1rem', fontFamily: 'monospace' },\n\t\t\t\t\t\trole: 'alert',\n\t\t\t\t\t},\n\t\t\t\t\t[h('strong', null, 'Kora Auth initialization error: '), current.initError.message],\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (current.isLoading && props.fallback !== null) {\n\t\t\t\treturn props.fallback\n\t\t\t}\n\n\t\t\treturn slots.default?.()\n\t\t}\n\t},\n})\n\nexport function useAuthContext(): AuthContextValue {\n\tconst context = inject<AuthContextValue | undefined>(authContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'useAuth must be used within <AuthProvider>. Wrap your app with <AuthProvider client={authClient}>.',\n\t\t)\n\t}\n\treturn context\n}\n","import type {\n\tAuthClient,\n\tAuthState,\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\n\nexport interface AuthSessionSnapshot {\n\tstate: AuthState\n\tuser: AuthUser | null\n\tisAuthenticated: boolean\n\tisLoading: boolean\n\tinitError: Error | null\n\terror: string | null\n}\n\nexport interface AuthSession {\n\treadonly client: AuthClient\n\tgetSnapshot(): AuthSessionSnapshot\n\tsubscribe(listener: () => void): () => void\n\tsignUp(params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}): Promise<void>\n\tsignIn(params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}): Promise<void>\n\tsignInWithOAuth(\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t): Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn(provider: string, params: OAuthCallbackParams): Promise<void>\n\tgetOAuthAuthorizationUrl(\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t): Promise<OAuthAuthorizationResult>\n\tlinkOAuth(provider: string, params: OAuthCallbackParams): Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts(): Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth(provider: string): Promise<void>\n\tsignOut(): Promise<void>\n\tdestroy(): void\n}\n\n/**\n * Framework-agnostic auth session: initialization, reactive snapshot, and client methods.\n */\nexport function createAuthSession(client: AuthClient): AuthSession {\n\tlet state: AuthState = client.state\n\tlet isLoading = true\n\tlet initError: Error | null = null\n\tlet lastError: string | null = null\n\n\tconst listeners = new Set<() => void>()\n\tlet snapshot = buildSnapshot()\n\n\tconst refreshSnapshot = (): void => {\n\t\tsnapshot = buildSnapshot()\n\t}\n\n\tconst notify = (): void => {\n\t\trefreshSnapshot()\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}\n\n\tfunction buildSnapshot(): AuthSessionSnapshot {\n\t\treturn {\n\t\t\tstate,\n\t\t\tuser: client.currentUser,\n\t\t\tisAuthenticated: state === 'authenticated',\n\t\t\tisLoading,\n\t\t\tinitError,\n\t\t\terror: lastError,\n\t\t}\n\t}\n\n\tconst captureError = (error: unknown): void => {\n\t\tlastError = error instanceof Error ? error.message : String(error)\n\t\tnotify()\n\t}\n\n\tconst run = async (action: () => Promise<void>): Promise<void> => {\n\t\tlastError = null\n\t\ttry {\n\t\t\tawait action()\n\t\t} catch (error) {\n\t\t\tcaptureError(error)\n\t\t}\n\t}\n\n\tconst runWithResult = async <T>(action: () => Promise<T>): Promise<T | null> => {\n\t\tlastError = null\n\t\ttry {\n\t\t\treturn await action()\n\t\t} catch (error) {\n\t\t\tcaptureError(error)\n\t\t\treturn null\n\t\t}\n\t}\n\n\tconst unsubscribeAuth = client.onAuthChange((nextState) => {\n\t\tstate = nextState\n\t\tnotify()\n\t})\n\n\tvoid client\n\t\t.initialize()\n\t\t.then(() => {\n\t\t\tstate = client.state\n\t\t\tisLoading = false\n\t\t\tnotify()\n\t\t})\n\t\t.catch((error: unknown) => {\n\t\t\tinitError = error instanceof Error ? error : new Error(String(error))\n\t\t\tisLoading = false\n\t\t\tnotify()\n\t\t})\n\n\treturn {\n\t\tclient,\n\t\tgetSnapshot: () => snapshot,\n\t\tsubscribe(listener) {\n\t\t\tlisteners.add(listener)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener)\n\t\t\t}\n\t\t},\n\t\tsignUp: (params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signUp(params)\n\t\t\t}),\n\t\tsignIn: (params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signIn(params)\n\t\t\t}),\n\t\tsignInWithOAuth: async (provider, options) => {\n\t\t\tlastError = null\n\t\t\ttry {\n\t\t\t\treturn await client.signInWithOAuth(provider, options)\n\t\t\t} catch (error) {\n\t\t\t\tcaptureError(error)\n\t\t\t\tthrow error instanceof Error ? error : new Error(String(error))\n\t\t\t}\n\t\t},\n\t\tcompleteOAuthSignIn: (provider, params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.completeOAuthSignIn(provider, params)\n\t\t\t}),\n\t\tgetOAuthAuthorizationUrl: async (provider, options) => {\n\t\t\tlastError = null\n\t\t\ttry {\n\t\t\t\treturn await client.getOAuthAuthorizationUrl(provider, options)\n\t\t\t} catch (error) {\n\t\t\t\tcaptureError(error)\n\t\t\t\tthrow error instanceof Error ? error : new Error(String(error))\n\t\t\t}\n\t\t},\n\t\tlinkOAuth: (provider, params) =>\n\t\t\trunWithResult(async () => client.linkOAuth(provider, params)),\n\t\tlistLinkedAccounts: () =>\n\t\t\trunWithResult(async () => client.listLinkedAccounts()).then((value) => value ?? []),\n\t\tunlinkOAuth: (provider) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.unlinkOAuth(provider)\n\t\t\t}),\n\t\tsignOut: () =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signOut()\n\t\t\t}),\n\t\tdestroy() {\n\t\t\tunsubscribeAuth()\n\t\t\tlisteners.clear()\n\t\t},\n\t}\n}\n","import type { AuthClient, AuthState } from '../client/auth-client'\n\nexport interface AuthContextValue {\n\tclient: AuthClient\n\tstate: AuthState\n\tisLoading: boolean\n\tsession: import('../bindings/create-auth-session').AuthSession\n}\n\nexport const authContextKey = Symbol('korajs-auth-context')\n","import { computed, onScopeDispose, reactive } from 'vue'\nimport type {\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\nimport { useAuthContext } from './auth-provider'\n\nexport interface UseAuthResult {\n\tuser: AuthUser | null\n\tisAuthenticated: boolean\n\tisLoading: boolean\n\tsignUp: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignIn: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignInWithOAuth: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn: (provider: string, params: OAuthCallbackParams) => Promise<void>\n\tgetOAuthAuthorizationUrl: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tlinkOAuth: (provider: string, params: OAuthCallbackParams) => Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts: () => Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth: (provider: string) => Promise<void>\n\tsignOut: () => Promise<void>\n\terror: string | null\n}\n\nexport interface AuthStatus {\n\tstate: import('../client/auth-client').AuthState\n\tisAuthenticated: boolean\n\tisLoading: boolean\n}\n\nexport function useAuth(): UseAuthResult {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({ ...session.getSnapshot() })\n\n\tconst sync = (): void => {\n\t\tObject.assign(state, session.getSnapshot())\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\n\tonScopeDispose(unsubscribe)\n\n\treturn {\n\t\tget user() {\n\t\t\treturn state.user\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn state.isAuthenticated\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn state.isLoading\n\t\t},\n\t\tget error() {\n\t\t\treturn state.error\n\t\t},\n\t\tsignUp: (params) => session.signUp(params).then(sync),\n\t\tsignIn: (params) => session.signIn(params).then(sync),\n\t\tsignInWithOAuth: (provider, options) => session.signInWithOAuth(provider, options).then((result) => {\n\t\t\tsync()\n\t\t\treturn result\n\t\t}),\n\t\tcompleteOAuthSignIn: (provider, params) =>\n\t\t\tsession.completeOAuthSignIn(provider, params).then(sync),\n\t\tgetOAuthAuthorizationUrl: (provider, options) =>\n\t\t\tsession.getOAuthAuthorizationUrl(provider, options).then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tlinkOAuth: (provider, params) => session.linkOAuth(provider, params).then((result) => {\n\t\t\tsync()\n\t\t\treturn result\n\t\t}),\n\t\tlistLinkedAccounts: () =>\n\t\t\tsession.listLinkedAccounts().then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tunlinkOAuth: (provider) => session.unlinkOAuth(provider).then(sync),\n\t\tsignOut: () => session.signOut().then(sync),\n\t}\n}\n\nexport function useCurrentUser() {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({ user: session.getSnapshot().user })\n\n\tconst sync = (): void => {\n\t\tstate.user = session.getSnapshot().user\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tonScopeDispose(unsubscribe)\n\n\treturn computed(() => state.user)\n}\n\nexport function useAuthStatus(): AuthStatus {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({\n\t\tstate: session.getSnapshot().state,\n\t\tisAuthenticated: session.getSnapshot().isAuthenticated,\n\t\tisLoading: session.getSnapshot().isLoading,\n\t})\n\n\tconst sync = (): void => {\n\t\tconst snapshot = session.getSnapshot()\n\t\tstate.state = snapshot.state\n\t\tstate.isAuthenticated = snapshot.isAuthenticated\n\t\tstate.isLoading = snapshot.isLoading\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\tonScopeDispose(unsubscribe)\n\n\treturn state\n}\n","import type { InjectionKey } from 'vue'\nimport type { PropType } from 'vue'\nimport { defineComponent, inject, onScopeDispose, provide } from 'vue'\nimport type { OrgClient } from '../client/org-client'\nimport { createOrgSession, type OrgSession } from '../bindings/create-org-session'\n\nexport interface OrgContextValue {\n\tclient: OrgClient\n\tsession: OrgSession\n}\n\nexport const orgContextKey: InjectionKey<OrgContextValue> = Symbol('korajs-org-context')\n\nexport const OrgProvider = defineComponent({\n\tname: 'OrgProvider',\n\tprops: {\n\t\tclient: {\n\t\t\ttype: Object as PropType<OrgClient>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\tconst session = createOrgSession(props.client)\n\n\t\tonScopeDispose(() => {\n\t\t\tsession.destroy()\n\t\t})\n\n\t\tconst contextValue: OrgContextValue = {\n\t\t\tclient: props.client,\n\t\t\tsession,\n\t\t}\n\n\t\tprovide(orgContextKey, contextValue)\n\n\t\treturn () => slots.default?.()\n\t},\n})\n\nexport function useOrgContext(): OrgContextValue {\n\tconst context = inject(orgContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'useOrg / useOrgMembers / usePermission must be used within an <OrgProvider>. ' +\n\t\t\t\t'Wrap your component tree with <OrgProvider :client=\"orgClient\">.',\n\t\t)\n\t}\n\treturn context\n}\n","import type {\n\tClientInvitation,\n\tClientMembership,\n\tClientOrganization,\n\tOrgClient,\n} from '../client/org-client'\n\nexport interface OrgSnapshot {\n\torgId: string | null\n\torg: ClientOrganization | null\n\trole: string | null\n}\n\nexport interface OrgSession {\n\treadonly client: OrgClient\n\tgetSnapshot(): OrgSnapshot\n\tsubscribe(listener: () => void): () => void\n\tcheckPermission(requiredRole: string): boolean\n\tdestroy(): void\n}\n\nconst ROLE_LEVELS: Record<string, number> = {\n\tviewer: 10,\n\tbilling: 15,\n\tmember: 20,\n\tadmin: 30,\n\towner: 40,\n}\n\nexport function checkOrgPermission(currentRole: string | null, requiredRole: string): boolean {\n\tif (!currentRole) return false\n\tconst currentLevel = ROLE_LEVELS[currentRole] ?? 0\n\tconst requiredLevel = ROLE_LEVELS[requiredRole] ?? 0\n\treturn currentLevel >= requiredLevel\n}\n\n/**\n * Framework-agnostic org session with reactive snapshot subscription.\n */\nexport function createOrgSession(client: OrgClient): OrgSession {\n\tlet snapshot = buildSnapshot(client)\n\tconst listeners = new Set<() => void>()\n\n\tconst notify = (): void => {\n\t\tsnapshot = buildSnapshot(client)\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}\n\n\tconst unsubscribeOrgChange = client.onOrgChange(notify)\n\n\treturn {\n\t\tclient,\n\t\tgetSnapshot: () => snapshot,\n\t\tsubscribe(listener: () => void): () => void {\n\t\t\tlisteners.add(listener)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener)\n\t\t\t}\n\t\t},\n\t\tcheckPermission(requiredRole: string): boolean {\n\t\t\treturn checkOrgPermission(snapshot.role, requiredRole)\n\t\t},\n\t\tdestroy(): void {\n\t\t\tunsubscribeOrgChange()\n\t\t\tlisteners.clear()\n\t\t},\n\t}\n}\n\nfunction buildSnapshot(client: OrgClient): OrgSnapshot {\n\treturn {\n\t\torgId: client.activeOrgId,\n\t\torg: client.activeOrg,\n\t\trole: client.activeRole,\n\t}\n}\n\nexport interface UseOrgMembersActions {\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n}\n\n/**\n * Shared org member management actions (loading state remains framework-specific).\n */\nexport function createOrgMembersActions(\n\tclient: OrgClient,\n\torgId: string,\n\tonError: (message: string) => void,\n): UseOrgMembersActions {\n\treturn {\n\t\tasync refresh(): Promise<void> {\n\t\t\tawait client.listMembers(orgId)\n\t\t},\n\t\tasync invite(email: string, role: string): Promise<ClientInvitation> {\n\t\t\ttry {\n\t\t\t\treturn await client.inviteMember(orgId, { email, role })\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\t\t\tonError(message)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\t\tasync removeMember(userId: string): Promise<void> {\n\t\t\ttry {\n\t\t\t\tawait client.removeMember(orgId, userId)\n\t\t\t} catch (error) {\n\t\t\t\tonError(error instanceof Error ? error.message : String(error))\n\t\t\t}\n\t\t},\n\t\tasync updateRole(userId: string, role: string): Promise<void> {\n\t\t\ttry {\n\t\t\t\tawait client.updateMemberRole(orgId, userId, role)\n\t\t\t} catch (error) {\n\t\t\t\tonError(error instanceof Error ? error.message : String(error))\n\t\t\t}\n\t\t},\n\t}\n}\n\nexport async function loadOrgMembers(\n\tclient: OrgClient,\n\torgId: string,\n): Promise<ClientMembership[]> {\n\treturn client.listMembers(orgId)\n}\n","import { onScopeDispose, reactive, readonly, ref, watch } from 'vue'\nimport type {\n\tClientInvitation,\n\tClientMembership,\n\tClientOrganization,\n} from '../client/org-client'\nimport {\n\tcreateOrgMembersActions,\n\tloadOrgMembers,\n\ttype OrgSnapshot,\n} from '../bindings/create-org-session'\nimport { useOrgContext } from './org-provider'\n\nexport interface UseOrgResult {\n\torg: ClientOrganization | null\n\trole: string | null\n\torgId: string | null\n\tswitchOrg: (orgId: string) => Promise<void>\n\tcreateOrg: (params: { name: string; slug?: string }) => Promise<ClientOrganization>\n\tleaveOrg: () => Promise<void>\n\tclearOrg: () => void\n\tlistOrgs: () => Promise<ClientOrganization[]>\n\terror: string | null\n}\n\nexport interface UseOrgMembersResult {\n\tmembers: ClientMembership[]\n\tisLoading: boolean\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n\terror: string | null\n}\n\nfunction useOrgSnapshot(session: ReturnType<typeof useOrgContext>['session']): OrgSnapshot {\n\tconst state = reactive({ ...session.getSnapshot() })\n\n\tconst sync = (): void => {\n\t\tObject.assign(state, session.getSnapshot())\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\n\tonScopeDispose(unsubscribe)\n\n\treturn state\n}\n\nexport function useOrg(): UseOrgResult {\n\tconst { client, session } = useOrgContext()\n\tconst snapshot = useOrgSnapshot(session)\n\tconst error = ref<string | null>(null)\n\n\tconst switchOrg = async (orgId: string): Promise<void> => {\n\t\terror.value = null\n\t\ttry {\n\t\t\tawait client.switchOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t}\n\t}\n\n\tconst createOrg = async (params: {\n\t\tname: string\n\t\tslug?: string\n\t}): Promise<ClientOrganization> => {\n\t\terror.value = null\n\t\ttry {\n\t\t\treturn await client.createOrg(params)\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\terror.value = message\n\t\t\tthrow err\n\t\t}\n\t}\n\n\tconst leaveOrg = async (): Promise<void> => {\n\t\tif (!snapshot.orgId) return\n\t\terror.value = null\n\t\ttry {\n\t\t\tawait client.leaveOrg(snapshot.orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t}\n\t}\n\n\tconst clearOrg = (): void => {\n\t\tclient.clearActiveOrg()\n\t}\n\n\tconst listOrgs = async (): Promise<ClientOrganization[]> => {\n\t\ttry {\n\t\t\treturn await client.listOrgs()\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t\treturn []\n\t\t}\n\t}\n\n\treturn {\n\t\tget org() {\n\t\t\treturn snapshot.org\n\t\t},\n\t\tget role() {\n\t\t\treturn snapshot.role\n\t\t},\n\t\tget orgId() {\n\t\t\treturn snapshot.orgId\n\t\t},\n\t\tswitchOrg,\n\t\tcreateOrg,\n\t\tleaveOrg,\n\t\tclearOrg,\n\t\tlistOrgs,\n\t\tget error() {\n\t\t\treturn error.value\n\t\t},\n\t}\n}\n\nexport function useOrgMembers(orgId: string): UseOrgMembersResult {\n\tconst { client } = useOrgContext()\n\tconst members = ref<ClientMembership[]>([])\n\tconst isLoading = ref(true)\n\tconst error = ref<string | null>(null)\n\n\tconst refresh = async (): Promise<void> => {\n\t\tisLoading.value = true\n\t\terror.value = null\n\t\ttry {\n\t\t\tmembers.value = await loadOrgMembers(client, orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t} finally {\n\t\t\tisLoading.value = false\n\t\t}\n\t}\n\n\twatch(\n\t\t() => orgId,\n\t\t() => {\n\t\t\tvoid refresh()\n\t\t},\n\t\t{ immediate: true },\n\t)\n\n\tconst actions = createOrgMembersActions(client, orgId, (message) => {\n\t\terror.value = message\n\t})\n\n\tconst invite = async (email: string, role: string): Promise<ClientInvitation> => {\n\t\tconst result = await actions.invite(email, role)\n\t\tawait refresh()\n\t\treturn result\n\t}\n\n\tconst removeMember = async (userId: string): Promise<void> => {\n\t\tawait actions.removeMember(userId)\n\t\tawait refresh()\n\t}\n\n\tconst updateRole = async (userId: string, role: string): Promise<void> => {\n\t\tawait actions.updateRole(userId, role)\n\t\tawait refresh()\n\t}\n\n\treturn {\n\t\tget members() {\n\t\t\treturn members.value\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn isLoading.value\n\t\t},\n\t\trefresh,\n\t\tinvite,\n\t\tremoveMember,\n\t\tupdateRole,\n\t\tget error() {\n\t\t\treturn error.value\n\t\t},\n\t}\n}\n\nexport function usePermission(requiredRole: string): Readonly<{ value: boolean }> {\n\tconst { session } = useOrgContext()\n\tconst allowed = ref(session.checkPermission(requiredRole))\n\n\tconst unsubscribe = session.subscribe(() => {\n\t\tallowed.value = session.checkPermission(requiredRole)\n\t})\n\n\tonScopeDispose(unsubscribe)\n\n\treturn readonly(allowed)\n}\n"],"mappings":"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","names":["buildSnapshot","import_vue","import_vue","import_vue"]}
|
|
1
|
+
{"version":3,"sources":["../src/vue.ts","../src/vue/auth-provider.ts","../src/bindings/create-auth-session.ts","../src/vue/auth-context.ts","../src/vue/use-auth.ts","../src/vue/org-provider.ts","../src/bindings/create-org-session.ts","../src/vue/org-hooks.ts"],"sourcesContent":["export { AuthProvider, useAuthContext } from './vue/auth-provider'\nexport type { AuthProviderProps } from './vue/auth-provider-types'\nexport { useAuth, useCurrentUser, useAuthStatus } from './vue/use-auth'\nexport type { UseAuthResult, AuthStatus } from './vue/use-auth'\nexport { authContextKey } from './vue/auth-context'\nexport type { AuthContextValue } from './vue/auth-context'\nexport { OrgProvider, useOrgContext } from './vue/org-provider'\nexport type { OrgContextValue } from './vue/org-provider'\nexport { useOrg, useOrgMembers, usePermission } from './vue/org-hooks'\nexport type { UseOrgResult, UseOrgMembersResult } from './vue/org-hooks'\n","import type { PropType, VNode } from 'vue'\nimport { defineComponent, h, inject, onScopeDispose, provide, shallowRef } from 'vue'\nimport { type AuthSessionSnapshot, createAuthSession } from '../bindings/create-auth-session'\nimport type { AuthClient } from '../client/auth-client'\nimport { type AuthContextValue, authContextKey } from './auth-context'\n\nexport const AuthProvider = defineComponent({\n\tname: 'AuthProvider',\n\tprops: {\n\t\tclient: {\n\t\t\ttype: Object as PropType<AuthClient>,\n\t\t\trequired: true,\n\t\t},\n\t\tfallback: {\n\t\t\ttype: [Object, String] as PropType<VNode | string | null>,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\tconst session = createAuthSession(props.client)\n\t\tconst snapshot = shallowRef<AuthSessionSnapshot>(session.getSnapshot())\n\n\t\tconst unsubscribe = session.subscribe(() => {\n\t\t\tsnapshot.value = session.getSnapshot()\n\t\t})\n\n\t\tonScopeDispose(() => {\n\t\t\tunsubscribe()\n\t\t\tsession.destroy()\n\t\t})\n\n\t\tconst contextValue: AuthContextValue = {\n\t\t\tclient: props.client,\n\t\t\tget state() {\n\t\t\t\treturn snapshot.value.state\n\t\t\t},\n\t\t\tget isLoading() {\n\t\t\t\treturn snapshot.value.isLoading\n\t\t\t},\n\t\t\tsession,\n\t\t}\n\n\t\tprovide(authContextKey, contextValue)\n\n\t\treturn () => {\n\t\t\tconst current = snapshot.value\n\n\t\t\tif (current.initError) {\n\t\t\t\treturn h(\n\t\t\t\t\t'div',\n\t\t\t\t\t{\n\t\t\t\t\t\tstyle: { color: 'red', padding: '1rem', fontFamily: 'monospace' },\n\t\t\t\t\t\trole: 'alert',\n\t\t\t\t\t},\n\t\t\t\t\t[h('strong', null, 'Kora Auth initialization error: '), current.initError.message],\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (current.isLoading && props.fallback !== null) {\n\t\t\t\treturn props.fallback\n\t\t\t}\n\n\t\t\treturn slots.default?.()\n\t\t}\n\t},\n})\n\nexport function useAuthContext(): AuthContextValue {\n\tconst context = inject<AuthContextValue | undefined>(authContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'useAuth must be used within <AuthProvider>. Wrap your app with <AuthProvider client={authClient}>.',\n\t\t)\n\t}\n\treturn context\n}\n","import type {\n\tAuthClient,\n\tAuthState,\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\n\nexport interface AuthSessionSnapshot {\n\tstate: AuthState\n\tuser: AuthUser | null\n\tisAuthenticated: boolean\n\tisLoading: boolean\n\tinitError: Error | null\n\terror: string | null\n}\n\nexport interface AuthSession {\n\treadonly client: AuthClient\n\tgetSnapshot(): AuthSessionSnapshot\n\tsubscribe(listener: () => void): () => void\n\tsignUp(params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}): Promise<void>\n\tsignIn(params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}): Promise<void>\n\tsignInWithOAuth(\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t): Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn(provider: string, params: OAuthCallbackParams): Promise<void>\n\tgetOAuthAuthorizationUrl(\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t): Promise<OAuthAuthorizationResult>\n\tlinkOAuth(provider: string, params: OAuthCallbackParams): Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts(): Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth(provider: string): Promise<void>\n\tsignOut(): Promise<void>\n\tdestroy(): void\n}\n\n/**\n * Framework-agnostic auth session: initialization, reactive snapshot, and client methods.\n */\nexport function createAuthSession(client: AuthClient): AuthSession {\n\tlet state: AuthState = client.state\n\tlet isLoading = true\n\tlet initError: Error | null = null\n\tlet lastError: string | null = null\n\n\tconst listeners = new Set<() => void>()\n\tlet snapshot = buildSnapshot()\n\n\tconst refreshSnapshot = (): void => {\n\t\tsnapshot = buildSnapshot()\n\t}\n\n\tconst notify = (): void => {\n\t\trefreshSnapshot()\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}\n\n\tfunction buildSnapshot(): AuthSessionSnapshot {\n\t\treturn {\n\t\t\tstate,\n\t\t\tuser: client.currentUser,\n\t\t\tisAuthenticated: state === 'authenticated',\n\t\t\tisLoading,\n\t\t\tinitError,\n\t\t\terror: lastError,\n\t\t}\n\t}\n\n\tconst captureError = (error: unknown): void => {\n\t\tlastError = error instanceof Error ? error.message : String(error)\n\t\tnotify()\n\t}\n\n\tconst run = async (action: () => Promise<void>): Promise<void> => {\n\t\tlastError = null\n\t\ttry {\n\t\t\tawait action()\n\t\t} catch (error) {\n\t\t\tcaptureError(error)\n\t\t}\n\t}\n\n\tconst runWithResult = async <T>(action: () => Promise<T>): Promise<T | null> => {\n\t\tlastError = null\n\t\ttry {\n\t\t\treturn await action()\n\t\t} catch (error) {\n\t\t\tcaptureError(error)\n\t\t\treturn null\n\t\t}\n\t}\n\n\tconst unsubscribeAuth = client.onAuthChange((nextState) => {\n\t\tstate = nextState\n\t\tnotify()\n\t})\n\n\tvoid client\n\t\t.initialize()\n\t\t.then(() => {\n\t\t\tstate = client.state\n\t\t\tisLoading = false\n\t\t\tnotify()\n\t\t})\n\t\t.catch((error: unknown) => {\n\t\t\tinitError = error instanceof Error ? error : new Error(String(error))\n\t\t\tisLoading = false\n\t\t\tnotify()\n\t\t})\n\n\treturn {\n\t\tclient,\n\t\tgetSnapshot: () => snapshot,\n\t\tsubscribe(listener) {\n\t\t\tlisteners.add(listener)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener)\n\t\t\t}\n\t\t},\n\t\tsignUp: (params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signUp(params)\n\t\t\t}),\n\t\tsignIn: (params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signIn(params)\n\t\t\t}),\n\t\tsignInWithOAuth: async (provider, options) => {\n\t\t\tlastError = null\n\t\t\ttry {\n\t\t\t\treturn await client.signInWithOAuth(provider, options)\n\t\t\t} catch (error) {\n\t\t\t\tcaptureError(error)\n\t\t\t\tthrow error instanceof Error ? error : new Error(String(error))\n\t\t\t}\n\t\t},\n\t\tcompleteOAuthSignIn: (provider, params) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.completeOAuthSignIn(provider, params)\n\t\t\t}),\n\t\tgetOAuthAuthorizationUrl: async (provider, options) => {\n\t\t\tlastError = null\n\t\t\ttry {\n\t\t\t\treturn await client.getOAuthAuthorizationUrl(provider, options)\n\t\t\t} catch (error) {\n\t\t\t\tcaptureError(error)\n\t\t\t\tthrow error instanceof Error ? error : new Error(String(error))\n\t\t\t}\n\t\t},\n\t\tlinkOAuth: (provider, params) => runWithResult(async () => client.linkOAuth(provider, params)),\n\t\tlistLinkedAccounts: () =>\n\t\t\trunWithResult(async () => client.listLinkedAccounts()).then((value) => value ?? []),\n\t\tunlinkOAuth: (provider) =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.unlinkOAuth(provider)\n\t\t\t}),\n\t\tsignOut: () =>\n\t\t\trun(async () => {\n\t\t\t\tawait client.signOut()\n\t\t\t}),\n\t\tdestroy() {\n\t\t\tunsubscribeAuth()\n\t\t\tlisteners.clear()\n\t\t},\n\t}\n}\n","import type { AuthClient, AuthState } from '../client/auth-client'\n\nexport interface AuthContextValue {\n\tclient: AuthClient\n\tstate: AuthState\n\tisLoading: boolean\n\tsession: import('../bindings/create-auth-session').AuthSession\n}\n\nexport const authContextKey = Symbol('korajs-auth-context')\n","import { computed, onScopeDispose, reactive } from 'vue'\nimport type {\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\nimport { useAuthContext } from './auth-provider'\n\nexport interface UseAuthResult {\n\tuser: AuthUser | null\n\tisAuthenticated: boolean\n\tisLoading: boolean\n\tsignUp: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignIn: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignInWithOAuth: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn: (provider: string, params: OAuthCallbackParams) => Promise<void>\n\tgetOAuthAuthorizationUrl: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tlinkOAuth: (provider: string, params: OAuthCallbackParams) => Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts: () => Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth: (provider: string) => Promise<void>\n\tsignOut: () => Promise<void>\n\terror: string | null\n}\n\nexport interface AuthStatus {\n\tstate: import('../client/auth-client').AuthState\n\tisAuthenticated: boolean\n\tisLoading: boolean\n}\n\nexport function useAuth(): UseAuthResult {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({ ...session.getSnapshot() })\n\n\tconst sync = (): void => {\n\t\tObject.assign(state, session.getSnapshot())\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\n\tonScopeDispose(unsubscribe)\n\n\treturn {\n\t\tget user() {\n\t\t\treturn state.user\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn state.isAuthenticated\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn state.isLoading\n\t\t},\n\t\tget error() {\n\t\t\treturn state.error\n\t\t},\n\t\tsignUp: (params) => session.signUp(params).then(sync),\n\t\tsignIn: (params) => session.signIn(params).then(sync),\n\t\tsignInWithOAuth: (provider, options) =>\n\t\t\tsession.signInWithOAuth(provider, options).then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tcompleteOAuthSignIn: (provider, params) =>\n\t\t\tsession.completeOAuthSignIn(provider, params).then(sync),\n\t\tgetOAuthAuthorizationUrl: (provider, options) =>\n\t\t\tsession.getOAuthAuthorizationUrl(provider, options).then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tlinkOAuth: (provider, params) =>\n\t\t\tsession.linkOAuth(provider, params).then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tlistLinkedAccounts: () =>\n\t\t\tsession.listLinkedAccounts().then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tunlinkOAuth: (provider) => session.unlinkOAuth(provider).then(sync),\n\t\tsignOut: () => session.signOut().then(sync),\n\t}\n}\n\nexport function useCurrentUser() {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({ user: session.getSnapshot().user })\n\n\tconst sync = (): void => {\n\t\tstate.user = session.getSnapshot().user\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tonScopeDispose(unsubscribe)\n\n\treturn computed(() => state.user)\n}\n\nexport function useAuthStatus(): AuthStatus {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({\n\t\tstate: session.getSnapshot().state,\n\t\tisAuthenticated: session.getSnapshot().isAuthenticated,\n\t\tisLoading: session.getSnapshot().isLoading,\n\t})\n\n\tconst sync = (): void => {\n\t\tconst snapshot = session.getSnapshot()\n\t\tstate.state = snapshot.state\n\t\tstate.isAuthenticated = snapshot.isAuthenticated\n\t\tstate.isLoading = snapshot.isLoading\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\tonScopeDispose(unsubscribe)\n\n\treturn state\n}\n","import type { InjectionKey } from 'vue'\nimport type { PropType } from 'vue'\nimport { defineComponent, inject, onScopeDispose, provide } from 'vue'\nimport { type OrgSession, createOrgSession } from '../bindings/create-org-session'\nimport type { OrgClient } from '../client/org-client'\n\nexport interface OrgContextValue {\n\tclient: OrgClient\n\tsession: OrgSession\n}\n\nexport const orgContextKey: InjectionKey<OrgContextValue> = Symbol('korajs-org-context')\n\nexport const OrgProvider = defineComponent({\n\tname: 'OrgProvider',\n\tprops: {\n\t\tclient: {\n\t\t\ttype: Object as PropType<OrgClient>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\tconst session = createOrgSession(props.client)\n\n\t\tonScopeDispose(() => {\n\t\t\tsession.destroy()\n\t\t})\n\n\t\tconst contextValue: OrgContextValue = {\n\t\t\tclient: props.client,\n\t\t\tsession,\n\t\t}\n\n\t\tprovide(orgContextKey, contextValue)\n\n\t\treturn () => slots.default?.()\n\t},\n})\n\nexport function useOrgContext(): OrgContextValue {\n\tconst context = inject(orgContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'useOrg / useOrgMembers / usePermission must be used within an <OrgProvider>. ' +\n\t\t\t\t'Wrap your component tree with <OrgProvider :client=\"orgClient\">.',\n\t\t)\n\t}\n\treturn context\n}\n","import type {\n\tClientInvitation,\n\tClientMembership,\n\tClientOrganization,\n\tOrgClient,\n} from '../client/org-client'\n\nexport interface OrgSnapshot {\n\torgId: string | null\n\torg: ClientOrganization | null\n\trole: string | null\n}\n\nexport interface OrgSession {\n\treadonly client: OrgClient\n\tgetSnapshot(): OrgSnapshot\n\tsubscribe(listener: () => void): () => void\n\tcheckPermission(requiredRole: string): boolean\n\tdestroy(): void\n}\n\nconst ROLE_LEVELS: Record<string, number> = {\n\tviewer: 10,\n\tbilling: 15,\n\tmember: 20,\n\tadmin: 30,\n\towner: 40,\n}\n\nexport function checkOrgPermission(currentRole: string | null, requiredRole: string): boolean {\n\tif (!currentRole) return false\n\tconst currentLevel = ROLE_LEVELS[currentRole] ?? 0\n\tconst requiredLevel = ROLE_LEVELS[requiredRole] ?? 0\n\treturn currentLevel >= requiredLevel\n}\n\n/**\n * Framework-agnostic org session with reactive snapshot subscription.\n */\nexport function createOrgSession(client: OrgClient): OrgSession {\n\tlet snapshot = buildSnapshot(client)\n\tconst listeners = new Set<() => void>()\n\n\tconst notify = (): void => {\n\t\tsnapshot = buildSnapshot(client)\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}\n\n\tconst unsubscribeOrgChange = client.onOrgChange(notify)\n\n\treturn {\n\t\tclient,\n\t\tgetSnapshot: () => snapshot,\n\t\tsubscribe(listener: () => void): () => void {\n\t\t\tlisteners.add(listener)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener)\n\t\t\t}\n\t\t},\n\t\tcheckPermission(requiredRole: string): boolean {\n\t\t\treturn checkOrgPermission(snapshot.role, requiredRole)\n\t\t},\n\t\tdestroy(): void {\n\t\t\tunsubscribeOrgChange()\n\t\t\tlisteners.clear()\n\t\t},\n\t}\n}\n\nfunction buildSnapshot(client: OrgClient): OrgSnapshot {\n\treturn {\n\t\torgId: client.activeOrgId,\n\t\torg: client.activeOrg,\n\t\trole: client.activeRole,\n\t}\n}\n\nexport interface UseOrgMembersActions {\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n}\n\n/**\n * Shared org member management actions (loading state remains framework-specific).\n */\nexport function createOrgMembersActions(\n\tclient: OrgClient,\n\torgId: string,\n\tonError: (message: string) => void,\n): UseOrgMembersActions {\n\treturn {\n\t\tasync refresh(): Promise<void> {\n\t\t\tawait client.listMembers(orgId)\n\t\t},\n\t\tasync invite(email: string, role: string): Promise<ClientInvitation> {\n\t\t\ttry {\n\t\t\t\treturn await client.inviteMember(orgId, { email, role })\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\t\t\tonError(message)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\t\tasync removeMember(userId: string): Promise<void> {\n\t\t\ttry {\n\t\t\t\tawait client.removeMember(orgId, userId)\n\t\t\t} catch (error) {\n\t\t\t\tonError(error instanceof Error ? error.message : String(error))\n\t\t\t}\n\t\t},\n\t\tasync updateRole(userId: string, role: string): Promise<void> {\n\t\t\ttry {\n\t\t\t\tawait client.updateMemberRole(orgId, userId, role)\n\t\t\t} catch (error) {\n\t\t\t\tonError(error instanceof Error ? error.message : String(error))\n\t\t\t}\n\t\t},\n\t}\n}\n\nexport async function loadOrgMembers(\n\tclient: OrgClient,\n\torgId: string,\n): Promise<ClientMembership[]> {\n\treturn client.listMembers(orgId)\n}\n","import { onScopeDispose, reactive, readonly, ref, watch } from 'vue'\nimport {\n\ttype OrgSnapshot,\n\tcreateOrgMembersActions,\n\tloadOrgMembers,\n} from '../bindings/create-org-session'\nimport type { ClientInvitation, ClientMembership, ClientOrganization } from '../client/org-client'\nimport { useOrgContext } from './org-provider'\n\nexport interface UseOrgResult {\n\torg: ClientOrganization | null\n\trole: string | null\n\torgId: string | null\n\tswitchOrg: (orgId: string) => Promise<void>\n\tcreateOrg: (params: { name: string; slug?: string }) => Promise<ClientOrganization>\n\tleaveOrg: () => Promise<void>\n\tclearOrg: () => void\n\tlistOrgs: () => Promise<ClientOrganization[]>\n\terror: string | null\n}\n\nexport interface UseOrgMembersResult {\n\tmembers: ClientMembership[]\n\tisLoading: boolean\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n\terror: string | null\n}\n\nfunction useOrgSnapshot(session: ReturnType<typeof useOrgContext>['session']): OrgSnapshot {\n\tconst state = reactive({ ...session.getSnapshot() })\n\n\tconst sync = (): void => {\n\t\tObject.assign(state, session.getSnapshot())\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\n\tonScopeDispose(unsubscribe)\n\n\treturn state\n}\n\nexport function useOrg(): UseOrgResult {\n\tconst { client, session } = useOrgContext()\n\tconst snapshot = useOrgSnapshot(session)\n\tconst error = ref<string | null>(null)\n\n\tconst switchOrg = async (orgId: string): Promise<void> => {\n\t\terror.value = null\n\t\ttry {\n\t\t\tawait client.switchOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t}\n\t}\n\n\tconst createOrg = async (params: {\n\t\tname: string\n\t\tslug?: string\n\t}): Promise<ClientOrganization> => {\n\t\terror.value = null\n\t\ttry {\n\t\t\treturn await client.createOrg(params)\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\terror.value = message\n\t\t\tthrow err\n\t\t}\n\t}\n\n\tconst leaveOrg = async (): Promise<void> => {\n\t\tif (!snapshot.orgId) return\n\t\terror.value = null\n\t\ttry {\n\t\t\tawait client.leaveOrg(snapshot.orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t}\n\t}\n\n\tconst clearOrg = (): void => {\n\t\tclient.clearActiveOrg()\n\t}\n\n\tconst listOrgs = async (): Promise<ClientOrganization[]> => {\n\t\ttry {\n\t\t\treturn await client.listOrgs()\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t\treturn []\n\t\t}\n\t}\n\n\treturn {\n\t\tget org() {\n\t\t\treturn snapshot.org\n\t\t},\n\t\tget role() {\n\t\t\treturn snapshot.role\n\t\t},\n\t\tget orgId() {\n\t\t\treturn snapshot.orgId\n\t\t},\n\t\tswitchOrg,\n\t\tcreateOrg,\n\t\tleaveOrg,\n\t\tclearOrg,\n\t\tlistOrgs,\n\t\tget error() {\n\t\t\treturn error.value\n\t\t},\n\t}\n}\n\nexport function useOrgMembers(orgId: string): UseOrgMembersResult {\n\tconst { client } = useOrgContext()\n\tconst members = ref<ClientMembership[]>([])\n\tconst isLoading = ref(true)\n\tconst error = ref<string | null>(null)\n\n\tconst refresh = async (): Promise<void> => {\n\t\tisLoading.value = true\n\t\terror.value = null\n\t\ttry {\n\t\t\tmembers.value = await loadOrgMembers(client, orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t} finally {\n\t\t\tisLoading.value = false\n\t\t}\n\t}\n\n\twatch(\n\t\t() => orgId,\n\t\t() => {\n\t\t\tvoid refresh()\n\t\t},\n\t\t{ immediate: true },\n\t)\n\n\tconst actions = createOrgMembersActions(client, orgId, (message) => {\n\t\terror.value = message\n\t})\n\n\tconst invite = async (email: string, role: string): Promise<ClientInvitation> => {\n\t\tconst result = await actions.invite(email, role)\n\t\tawait refresh()\n\t\treturn result\n\t}\n\n\tconst removeMember = async (userId: string): Promise<void> => {\n\t\tawait actions.removeMember(userId)\n\t\tawait refresh()\n\t}\n\n\tconst updateRole = async (userId: string, role: string): Promise<void> => {\n\t\tawait actions.updateRole(userId, role)\n\t\tawait refresh()\n\t}\n\n\treturn {\n\t\tget members() {\n\t\t\treturn members.value\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn isLoading.value\n\t\t},\n\t\trefresh,\n\t\tinvite,\n\t\tremoveMember,\n\t\tupdateRole,\n\t\tget error() {\n\t\t\treturn error.value\n\t\t},\n\t}\n}\n\nexport function usePermission(requiredRole: string): Readonly<{ value: boolean }> {\n\tconst { session } = useOrgContext()\n\tconst allowed = ref(session.checkPermission(requiredRole))\n\n\tconst unsubscribe = session.subscribe(() => {\n\t\tallowed.value = session.checkPermission(requiredRole)\n\t})\n\n\tonScopeDispose(unsubscribe)\n\n\treturn readonly(allowed)\n}\n"],"mappings":"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","names":["buildSnapshot","import_vue","import_vue","import_vue"]}
|
package/dist/vue.js
CHANGED
package/dist/vue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vue/auth-provider.ts","../src/vue/auth-context.ts","../src/vue/use-auth.ts","../src/vue/org-provider.ts","../src/vue/org-hooks.ts"],"sourcesContent":["import type { PropType, VNode } from 'vue'\nimport { defineComponent, h, inject, onScopeDispose, provide, shallowRef } from 'vue'\nimport type { AuthClient } from '../client/auth-client'\nimport { createAuthSession, type AuthSessionSnapshot } from '../bindings/create-auth-session'\nimport { authContextKey, type AuthContextValue } from './auth-context'\n\nexport const AuthProvider = defineComponent({\n\tname: 'AuthProvider',\n\tprops: {\n\t\tclient: {\n\t\t\ttype: Object as PropType<AuthClient>,\n\t\t\trequired: true,\n\t\t},\n\t\tfallback: {\n\t\t\ttype: [Object, String] as PropType<VNode | string | null>,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\tconst session = createAuthSession(props.client)\n\t\tconst snapshot = shallowRef<AuthSessionSnapshot>(session.getSnapshot())\n\n\t\tconst unsubscribe = session.subscribe(() => {\n\t\t\tsnapshot.value = session.getSnapshot()\n\t\t})\n\n\t\tonScopeDispose(() => {\n\t\t\tunsubscribe()\n\t\t\tsession.destroy()\n\t\t})\n\n\t\tconst contextValue: AuthContextValue = {\n\t\t\tclient: props.client,\n\t\t\tget state() {\n\t\t\t\treturn snapshot.value.state\n\t\t\t},\n\t\t\tget isLoading() {\n\t\t\t\treturn snapshot.value.isLoading\n\t\t\t},\n\t\t\tsession,\n\t\t}\n\n\t\tprovide(authContextKey, contextValue)\n\n\t\treturn () => {\n\t\t\tconst current = snapshot.value\n\n\t\t\tif (current.initError) {\n\t\t\t\treturn h(\n\t\t\t\t\t'div',\n\t\t\t\t\t{\n\t\t\t\t\t\tstyle: { color: 'red', padding: '1rem', fontFamily: 'monospace' },\n\t\t\t\t\t\trole: 'alert',\n\t\t\t\t\t},\n\t\t\t\t\t[h('strong', null, 'Kora Auth initialization error: '), current.initError.message],\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (current.isLoading && props.fallback !== null) {\n\t\t\t\treturn props.fallback\n\t\t\t}\n\n\t\t\treturn slots.default?.()\n\t\t}\n\t},\n})\n\nexport function useAuthContext(): AuthContextValue {\n\tconst context = inject<AuthContextValue | undefined>(authContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'useAuth must be used within <AuthProvider>. Wrap your app with <AuthProvider client={authClient}>.',\n\t\t)\n\t}\n\treturn context\n}\n","import type { AuthClient, AuthState } from '../client/auth-client'\n\nexport interface AuthContextValue {\n\tclient: AuthClient\n\tstate: AuthState\n\tisLoading: boolean\n\tsession: import('../bindings/create-auth-session').AuthSession\n}\n\nexport const authContextKey = Symbol('korajs-auth-context')\n","import { computed, onScopeDispose, reactive } from 'vue'\nimport type {\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\nimport { useAuthContext } from './auth-provider'\n\nexport interface UseAuthResult {\n\tuser: AuthUser | null\n\tisAuthenticated: boolean\n\tisLoading: boolean\n\tsignUp: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignIn: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignInWithOAuth: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn: (provider: string, params: OAuthCallbackParams) => Promise<void>\n\tgetOAuthAuthorizationUrl: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tlinkOAuth: (provider: string, params: OAuthCallbackParams) => Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts: () => Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth: (provider: string) => Promise<void>\n\tsignOut: () => Promise<void>\n\terror: string | null\n}\n\nexport interface AuthStatus {\n\tstate: import('../client/auth-client').AuthState\n\tisAuthenticated: boolean\n\tisLoading: boolean\n}\n\nexport function useAuth(): UseAuthResult {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({ ...session.getSnapshot() })\n\n\tconst sync = (): void => {\n\t\tObject.assign(state, session.getSnapshot())\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\n\tonScopeDispose(unsubscribe)\n\n\treturn {\n\t\tget user() {\n\t\t\treturn state.user\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn state.isAuthenticated\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn state.isLoading\n\t\t},\n\t\tget error() {\n\t\t\treturn state.error\n\t\t},\n\t\tsignUp: (params) => session.signUp(params).then(sync),\n\t\tsignIn: (params) => session.signIn(params).then(sync),\n\t\tsignInWithOAuth: (provider, options) => session.signInWithOAuth(provider, options).then((result) => {\n\t\t\tsync()\n\t\t\treturn result\n\t\t}),\n\t\tcompleteOAuthSignIn: (provider, params) =>\n\t\t\tsession.completeOAuthSignIn(provider, params).then(sync),\n\t\tgetOAuthAuthorizationUrl: (provider, options) =>\n\t\t\tsession.getOAuthAuthorizationUrl(provider, options).then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tlinkOAuth: (provider, params) => session.linkOAuth(provider, params).then((result) => {\n\t\t\tsync()\n\t\t\treturn result\n\t\t}),\n\t\tlistLinkedAccounts: () =>\n\t\t\tsession.listLinkedAccounts().then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tunlinkOAuth: (provider) => session.unlinkOAuth(provider).then(sync),\n\t\tsignOut: () => session.signOut().then(sync),\n\t}\n}\n\nexport function useCurrentUser() {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({ user: session.getSnapshot().user })\n\n\tconst sync = (): void => {\n\t\tstate.user = session.getSnapshot().user\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tonScopeDispose(unsubscribe)\n\n\treturn computed(() => state.user)\n}\n\nexport function useAuthStatus(): AuthStatus {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({\n\t\tstate: session.getSnapshot().state,\n\t\tisAuthenticated: session.getSnapshot().isAuthenticated,\n\t\tisLoading: session.getSnapshot().isLoading,\n\t})\n\n\tconst sync = (): void => {\n\t\tconst snapshot = session.getSnapshot()\n\t\tstate.state = snapshot.state\n\t\tstate.isAuthenticated = snapshot.isAuthenticated\n\t\tstate.isLoading = snapshot.isLoading\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\tonScopeDispose(unsubscribe)\n\n\treturn state\n}\n","import type { InjectionKey } from 'vue'\nimport type { PropType } from 'vue'\nimport { defineComponent, inject, onScopeDispose, provide } from 'vue'\nimport type { OrgClient } from '../client/org-client'\nimport { createOrgSession, type OrgSession } from '../bindings/create-org-session'\n\nexport interface OrgContextValue {\n\tclient: OrgClient\n\tsession: OrgSession\n}\n\nexport const orgContextKey: InjectionKey<OrgContextValue> = Symbol('korajs-org-context')\n\nexport const OrgProvider = defineComponent({\n\tname: 'OrgProvider',\n\tprops: {\n\t\tclient: {\n\t\t\ttype: Object as PropType<OrgClient>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\tconst session = createOrgSession(props.client)\n\n\t\tonScopeDispose(() => {\n\t\t\tsession.destroy()\n\t\t})\n\n\t\tconst contextValue: OrgContextValue = {\n\t\t\tclient: props.client,\n\t\t\tsession,\n\t\t}\n\n\t\tprovide(orgContextKey, contextValue)\n\n\t\treturn () => slots.default?.()\n\t},\n})\n\nexport function useOrgContext(): OrgContextValue {\n\tconst context = inject(orgContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'useOrg / useOrgMembers / usePermission must be used within an <OrgProvider>. ' +\n\t\t\t\t'Wrap your component tree with <OrgProvider :client=\"orgClient\">.',\n\t\t)\n\t}\n\treturn context\n}\n","import { onScopeDispose, reactive, readonly, ref, watch } from 'vue'\nimport type {\n\tClientInvitation,\n\tClientMembership,\n\tClientOrganization,\n} from '../client/org-client'\nimport {\n\tcreateOrgMembersActions,\n\tloadOrgMembers,\n\ttype OrgSnapshot,\n} from '../bindings/create-org-session'\nimport { useOrgContext } from './org-provider'\n\nexport interface UseOrgResult {\n\torg: ClientOrganization | null\n\trole: string | null\n\torgId: string | null\n\tswitchOrg: (orgId: string) => Promise<void>\n\tcreateOrg: (params: { name: string; slug?: string }) => Promise<ClientOrganization>\n\tleaveOrg: () => Promise<void>\n\tclearOrg: () => void\n\tlistOrgs: () => Promise<ClientOrganization[]>\n\terror: string | null\n}\n\nexport interface UseOrgMembersResult {\n\tmembers: ClientMembership[]\n\tisLoading: boolean\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n\terror: string | null\n}\n\nfunction useOrgSnapshot(session: ReturnType<typeof useOrgContext>['session']): OrgSnapshot {\n\tconst state = reactive({ ...session.getSnapshot() })\n\n\tconst sync = (): void => {\n\t\tObject.assign(state, session.getSnapshot())\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\n\tonScopeDispose(unsubscribe)\n\n\treturn state\n}\n\nexport function useOrg(): UseOrgResult {\n\tconst { client, session } = useOrgContext()\n\tconst snapshot = useOrgSnapshot(session)\n\tconst error = ref<string | null>(null)\n\n\tconst switchOrg = async (orgId: string): Promise<void> => {\n\t\terror.value = null\n\t\ttry {\n\t\t\tawait client.switchOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t}\n\t}\n\n\tconst createOrg = async (params: {\n\t\tname: string\n\t\tslug?: string\n\t}): Promise<ClientOrganization> => {\n\t\terror.value = null\n\t\ttry {\n\t\t\treturn await client.createOrg(params)\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\terror.value = message\n\t\t\tthrow err\n\t\t}\n\t}\n\n\tconst leaveOrg = async (): Promise<void> => {\n\t\tif (!snapshot.orgId) return\n\t\terror.value = null\n\t\ttry {\n\t\t\tawait client.leaveOrg(snapshot.orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t}\n\t}\n\n\tconst clearOrg = (): void => {\n\t\tclient.clearActiveOrg()\n\t}\n\n\tconst listOrgs = async (): Promise<ClientOrganization[]> => {\n\t\ttry {\n\t\t\treturn await client.listOrgs()\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t\treturn []\n\t\t}\n\t}\n\n\treturn {\n\t\tget org() {\n\t\t\treturn snapshot.org\n\t\t},\n\t\tget role() {\n\t\t\treturn snapshot.role\n\t\t},\n\t\tget orgId() {\n\t\t\treturn snapshot.orgId\n\t\t},\n\t\tswitchOrg,\n\t\tcreateOrg,\n\t\tleaveOrg,\n\t\tclearOrg,\n\t\tlistOrgs,\n\t\tget error() {\n\t\t\treturn error.value\n\t\t},\n\t}\n}\n\nexport function useOrgMembers(orgId: string): UseOrgMembersResult {\n\tconst { client } = useOrgContext()\n\tconst members = ref<ClientMembership[]>([])\n\tconst isLoading = ref(true)\n\tconst error = ref<string | null>(null)\n\n\tconst refresh = async (): Promise<void> => {\n\t\tisLoading.value = true\n\t\terror.value = null\n\t\ttry {\n\t\t\tmembers.value = await loadOrgMembers(client, orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t} finally {\n\t\t\tisLoading.value = false\n\t\t}\n\t}\n\n\twatch(\n\t\t() => orgId,\n\t\t() => {\n\t\t\tvoid refresh()\n\t\t},\n\t\t{ immediate: true },\n\t)\n\n\tconst actions = createOrgMembersActions(client, orgId, (message) => {\n\t\terror.value = message\n\t})\n\n\tconst invite = async (email: string, role: string): Promise<ClientInvitation> => {\n\t\tconst result = await actions.invite(email, role)\n\t\tawait refresh()\n\t\treturn result\n\t}\n\n\tconst removeMember = async (userId: string): Promise<void> => {\n\t\tawait actions.removeMember(userId)\n\t\tawait refresh()\n\t}\n\n\tconst updateRole = async (userId: string, role: string): Promise<void> => {\n\t\tawait actions.updateRole(userId, role)\n\t\tawait refresh()\n\t}\n\n\treturn {\n\t\tget members() {\n\t\t\treturn members.value\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn isLoading.value\n\t\t},\n\t\trefresh,\n\t\tinvite,\n\t\tremoveMember,\n\t\tupdateRole,\n\t\tget error() {\n\t\t\treturn error.value\n\t\t},\n\t}\n}\n\nexport function usePermission(requiredRole: string): Readonly<{ value: boolean }> {\n\tconst { session } = useOrgContext()\n\tconst allowed = ref(session.checkPermission(requiredRole))\n\n\tconst unsubscribe = session.subscribe(() => {\n\t\tallowed.value = session.checkPermission(requiredRole)\n\t})\n\n\tonScopeDispose(unsubscribe)\n\n\treturn readonly(allowed)\n}\n"],"mappings":"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","names":["onScopeDispose","onScopeDispose","defineComponent","inject","onScopeDispose","provide","defineComponent","onScopeDispose","provide","inject","onScopeDispose","reactive","reactive","onScopeDispose"]}
|
|
1
|
+
{"version":3,"sources":["../src/vue/auth-provider.ts","../src/vue/auth-context.ts","../src/vue/use-auth.ts","../src/vue/org-provider.ts","../src/vue/org-hooks.ts"],"sourcesContent":["import type { PropType, VNode } from 'vue'\nimport { defineComponent, h, inject, onScopeDispose, provide, shallowRef } from 'vue'\nimport { type AuthSessionSnapshot, createAuthSession } from '../bindings/create-auth-session'\nimport type { AuthClient } from '../client/auth-client'\nimport { type AuthContextValue, authContextKey } from './auth-context'\n\nexport const AuthProvider = defineComponent({\n\tname: 'AuthProvider',\n\tprops: {\n\t\tclient: {\n\t\t\ttype: Object as PropType<AuthClient>,\n\t\t\trequired: true,\n\t\t},\n\t\tfallback: {\n\t\t\ttype: [Object, String] as PropType<VNode | string | null>,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\tconst session = createAuthSession(props.client)\n\t\tconst snapshot = shallowRef<AuthSessionSnapshot>(session.getSnapshot())\n\n\t\tconst unsubscribe = session.subscribe(() => {\n\t\t\tsnapshot.value = session.getSnapshot()\n\t\t})\n\n\t\tonScopeDispose(() => {\n\t\t\tunsubscribe()\n\t\t\tsession.destroy()\n\t\t})\n\n\t\tconst contextValue: AuthContextValue = {\n\t\t\tclient: props.client,\n\t\t\tget state() {\n\t\t\t\treturn snapshot.value.state\n\t\t\t},\n\t\t\tget isLoading() {\n\t\t\t\treturn snapshot.value.isLoading\n\t\t\t},\n\t\t\tsession,\n\t\t}\n\n\t\tprovide(authContextKey, contextValue)\n\n\t\treturn () => {\n\t\t\tconst current = snapshot.value\n\n\t\t\tif (current.initError) {\n\t\t\t\treturn h(\n\t\t\t\t\t'div',\n\t\t\t\t\t{\n\t\t\t\t\t\tstyle: { color: 'red', padding: '1rem', fontFamily: 'monospace' },\n\t\t\t\t\t\trole: 'alert',\n\t\t\t\t\t},\n\t\t\t\t\t[h('strong', null, 'Kora Auth initialization error: '), current.initError.message],\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (current.isLoading && props.fallback !== null) {\n\t\t\t\treturn props.fallback\n\t\t\t}\n\n\t\t\treturn slots.default?.()\n\t\t}\n\t},\n})\n\nexport function useAuthContext(): AuthContextValue {\n\tconst context = inject<AuthContextValue | undefined>(authContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'useAuth must be used within <AuthProvider>. Wrap your app with <AuthProvider client={authClient}>.',\n\t\t)\n\t}\n\treturn context\n}\n","import type { AuthClient, AuthState } from '../client/auth-client'\n\nexport interface AuthContextValue {\n\tclient: AuthClient\n\tstate: AuthState\n\tisLoading: boolean\n\tsession: import('../bindings/create-auth-session').AuthSession\n}\n\nexport const authContextKey = Symbol('korajs-auth-context')\n","import { computed, onScopeDispose, reactive } from 'vue'\nimport type {\n\tAuthUser,\n\tLinkedOAuthAccount,\n\tOAuthAuthorizationOptions,\n\tOAuthAuthorizationResult,\n\tOAuthCallbackParams,\n} from '../client/auth-client'\nimport { useAuthContext } from './auth-provider'\n\nexport interface UseAuthResult {\n\tuser: AuthUser | null\n\tisAuthenticated: boolean\n\tisLoading: boolean\n\tsignUp: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tname?: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignIn: (params: {\n\t\temail: string\n\t\tpassword: string\n\t\tdeviceId?: string\n\t\tdevicePublicKey?: string\n\t}) => Promise<void>\n\tsignInWithOAuth: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tcompleteOAuthSignIn: (provider: string, params: OAuthCallbackParams) => Promise<void>\n\tgetOAuthAuthorizationUrl: (\n\t\tprovider: string,\n\t\toptions?: OAuthAuthorizationOptions,\n\t) => Promise<OAuthAuthorizationResult>\n\tlinkOAuth: (provider: string, params: OAuthCallbackParams) => Promise<LinkedOAuthAccount | null>\n\tlistLinkedAccounts: () => Promise<LinkedOAuthAccount[]>\n\tunlinkOAuth: (provider: string) => Promise<void>\n\tsignOut: () => Promise<void>\n\terror: string | null\n}\n\nexport interface AuthStatus {\n\tstate: import('../client/auth-client').AuthState\n\tisAuthenticated: boolean\n\tisLoading: boolean\n}\n\nexport function useAuth(): UseAuthResult {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({ ...session.getSnapshot() })\n\n\tconst sync = (): void => {\n\t\tObject.assign(state, session.getSnapshot())\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\n\tonScopeDispose(unsubscribe)\n\n\treturn {\n\t\tget user() {\n\t\t\treturn state.user\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn state.isAuthenticated\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn state.isLoading\n\t\t},\n\t\tget error() {\n\t\t\treturn state.error\n\t\t},\n\t\tsignUp: (params) => session.signUp(params).then(sync),\n\t\tsignIn: (params) => session.signIn(params).then(sync),\n\t\tsignInWithOAuth: (provider, options) =>\n\t\t\tsession.signInWithOAuth(provider, options).then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tcompleteOAuthSignIn: (provider, params) =>\n\t\t\tsession.completeOAuthSignIn(provider, params).then(sync),\n\t\tgetOAuthAuthorizationUrl: (provider, options) =>\n\t\t\tsession.getOAuthAuthorizationUrl(provider, options).then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tlinkOAuth: (provider, params) =>\n\t\t\tsession.linkOAuth(provider, params).then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tlistLinkedAccounts: () =>\n\t\t\tsession.listLinkedAccounts().then((result) => {\n\t\t\t\tsync()\n\t\t\t\treturn result\n\t\t\t}),\n\t\tunlinkOAuth: (provider) => session.unlinkOAuth(provider).then(sync),\n\t\tsignOut: () => session.signOut().then(sync),\n\t}\n}\n\nexport function useCurrentUser() {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({ user: session.getSnapshot().user })\n\n\tconst sync = (): void => {\n\t\tstate.user = session.getSnapshot().user\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tonScopeDispose(unsubscribe)\n\n\treturn computed(() => state.user)\n}\n\nexport function useAuthStatus(): AuthStatus {\n\tconst { session } = useAuthContext()\n\tconst state = reactive({\n\t\tstate: session.getSnapshot().state,\n\t\tisAuthenticated: session.getSnapshot().isAuthenticated,\n\t\tisLoading: session.getSnapshot().isLoading,\n\t})\n\n\tconst sync = (): void => {\n\t\tconst snapshot = session.getSnapshot()\n\t\tstate.state = snapshot.state\n\t\tstate.isAuthenticated = snapshot.isAuthenticated\n\t\tstate.isLoading = snapshot.isLoading\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\tonScopeDispose(unsubscribe)\n\n\treturn state\n}\n","import type { InjectionKey } from 'vue'\nimport type { PropType } from 'vue'\nimport { defineComponent, inject, onScopeDispose, provide } from 'vue'\nimport { type OrgSession, createOrgSession } from '../bindings/create-org-session'\nimport type { OrgClient } from '../client/org-client'\n\nexport interface OrgContextValue {\n\tclient: OrgClient\n\tsession: OrgSession\n}\n\nexport const orgContextKey: InjectionKey<OrgContextValue> = Symbol('korajs-org-context')\n\nexport const OrgProvider = defineComponent({\n\tname: 'OrgProvider',\n\tprops: {\n\t\tclient: {\n\t\t\ttype: Object as PropType<OrgClient>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\tconst session = createOrgSession(props.client)\n\n\t\tonScopeDispose(() => {\n\t\t\tsession.destroy()\n\t\t})\n\n\t\tconst contextValue: OrgContextValue = {\n\t\t\tclient: props.client,\n\t\t\tsession,\n\t\t}\n\n\t\tprovide(orgContextKey, contextValue)\n\n\t\treturn () => slots.default?.()\n\t},\n})\n\nexport function useOrgContext(): OrgContextValue {\n\tconst context = inject(orgContextKey)\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t'useOrg / useOrgMembers / usePermission must be used within an <OrgProvider>. ' +\n\t\t\t\t'Wrap your component tree with <OrgProvider :client=\"orgClient\">.',\n\t\t)\n\t}\n\treturn context\n}\n","import { onScopeDispose, reactive, readonly, ref, watch } from 'vue'\nimport {\n\ttype OrgSnapshot,\n\tcreateOrgMembersActions,\n\tloadOrgMembers,\n} from '../bindings/create-org-session'\nimport type { ClientInvitation, ClientMembership, ClientOrganization } from '../client/org-client'\nimport { useOrgContext } from './org-provider'\n\nexport interface UseOrgResult {\n\torg: ClientOrganization | null\n\trole: string | null\n\torgId: string | null\n\tswitchOrg: (orgId: string) => Promise<void>\n\tcreateOrg: (params: { name: string; slug?: string }) => Promise<ClientOrganization>\n\tleaveOrg: () => Promise<void>\n\tclearOrg: () => void\n\tlistOrgs: () => Promise<ClientOrganization[]>\n\terror: string | null\n}\n\nexport interface UseOrgMembersResult {\n\tmembers: ClientMembership[]\n\tisLoading: boolean\n\trefresh: () => Promise<void>\n\tinvite: (email: string, role: string) => Promise<ClientInvitation>\n\tremoveMember: (userId: string) => Promise<void>\n\tupdateRole: (userId: string, role: string) => Promise<void>\n\terror: string | null\n}\n\nfunction useOrgSnapshot(session: ReturnType<typeof useOrgContext>['session']): OrgSnapshot {\n\tconst state = reactive({ ...session.getSnapshot() })\n\n\tconst sync = (): void => {\n\t\tObject.assign(state, session.getSnapshot())\n\t}\n\n\tconst unsubscribe = session.subscribe(sync)\n\tsync()\n\n\tonScopeDispose(unsubscribe)\n\n\treturn state\n}\n\nexport function useOrg(): UseOrgResult {\n\tconst { client, session } = useOrgContext()\n\tconst snapshot = useOrgSnapshot(session)\n\tconst error = ref<string | null>(null)\n\n\tconst switchOrg = async (orgId: string): Promise<void> => {\n\t\terror.value = null\n\t\ttry {\n\t\t\tawait client.switchOrg(orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t}\n\t}\n\n\tconst createOrg = async (params: {\n\t\tname: string\n\t\tslug?: string\n\t}): Promise<ClientOrganization> => {\n\t\terror.value = null\n\t\ttry {\n\t\t\treturn await client.createOrg(params)\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err)\n\t\t\terror.value = message\n\t\t\tthrow err\n\t\t}\n\t}\n\n\tconst leaveOrg = async (): Promise<void> => {\n\t\tif (!snapshot.orgId) return\n\t\terror.value = null\n\t\ttry {\n\t\t\tawait client.leaveOrg(snapshot.orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t}\n\t}\n\n\tconst clearOrg = (): void => {\n\t\tclient.clearActiveOrg()\n\t}\n\n\tconst listOrgs = async (): Promise<ClientOrganization[]> => {\n\t\ttry {\n\t\t\treturn await client.listOrgs()\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t\treturn []\n\t\t}\n\t}\n\n\treturn {\n\t\tget org() {\n\t\t\treturn snapshot.org\n\t\t},\n\t\tget role() {\n\t\t\treturn snapshot.role\n\t\t},\n\t\tget orgId() {\n\t\t\treturn snapshot.orgId\n\t\t},\n\t\tswitchOrg,\n\t\tcreateOrg,\n\t\tleaveOrg,\n\t\tclearOrg,\n\t\tlistOrgs,\n\t\tget error() {\n\t\t\treturn error.value\n\t\t},\n\t}\n}\n\nexport function useOrgMembers(orgId: string): UseOrgMembersResult {\n\tconst { client } = useOrgContext()\n\tconst members = ref<ClientMembership[]>([])\n\tconst isLoading = ref(true)\n\tconst error = ref<string | null>(null)\n\n\tconst refresh = async (): Promise<void> => {\n\t\tisLoading.value = true\n\t\terror.value = null\n\t\ttry {\n\t\t\tmembers.value = await loadOrgMembers(client, orgId)\n\t\t} catch (err) {\n\t\t\terror.value = err instanceof Error ? err.message : String(err)\n\t\t} finally {\n\t\t\tisLoading.value = false\n\t\t}\n\t}\n\n\twatch(\n\t\t() => orgId,\n\t\t() => {\n\t\t\tvoid refresh()\n\t\t},\n\t\t{ immediate: true },\n\t)\n\n\tconst actions = createOrgMembersActions(client, orgId, (message) => {\n\t\terror.value = message\n\t})\n\n\tconst invite = async (email: string, role: string): Promise<ClientInvitation> => {\n\t\tconst result = await actions.invite(email, role)\n\t\tawait refresh()\n\t\treturn result\n\t}\n\n\tconst removeMember = async (userId: string): Promise<void> => {\n\t\tawait actions.removeMember(userId)\n\t\tawait refresh()\n\t}\n\n\tconst updateRole = async (userId: string, role: string): Promise<void> => {\n\t\tawait actions.updateRole(userId, role)\n\t\tawait refresh()\n\t}\n\n\treturn {\n\t\tget members() {\n\t\t\treturn members.value\n\t\t},\n\t\tget isLoading() {\n\t\t\treturn isLoading.value\n\t\t},\n\t\trefresh,\n\t\tinvite,\n\t\tremoveMember,\n\t\tupdateRole,\n\t\tget error() {\n\t\t\treturn error.value\n\t\t},\n\t}\n}\n\nexport function usePermission(requiredRole: string): Readonly<{ value: boolean }> {\n\tconst { session } = useOrgContext()\n\tconst allowed = ref(session.checkPermission(requiredRole))\n\n\tconst unsubscribe = session.subscribe(() => {\n\t\tallowed.value = session.checkPermission(requiredRole)\n\t})\n\n\tonScopeDispose(unsubscribe)\n\n\treturn readonly(allowed)\n}\n"],"mappings":"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","names":["onScopeDispose","onScopeDispose","defineComponent","inject","onScopeDispose","provide","defineComponent","onScopeDispose","provide","inject","onScopeDispose","reactive","reactive","onScopeDispose"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@korajs/auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-beta.0",
|
|
4
4
|
"description": "Offline-first authentication for Kora.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"src/svelte/OrgProvider.svelte"
|
|
67
67
|
],
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@korajs/core": "0.
|
|
69
|
+
"@korajs/core": "1.0.0-beta.0"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@types/better-sqlite3": "^7.6.13",
|
|
@@ -77,9 +77,9 @@
|
|
|
77
77
|
"typescript": "^5.7.0",
|
|
78
78
|
"vitest": "^3.0.0",
|
|
79
79
|
"vue": "^3.5.0",
|
|
80
|
-
"@korajs/
|
|
81
|
-
"@korajs/server": "0.
|
|
82
|
-
"@korajs/
|
|
80
|
+
"@korajs/sync": "1.0.0-beta.0",
|
|
81
|
+
"@korajs/server": "1.0.0-beta.0",
|
|
82
|
+
"@korajs/store": "1.0.0-beta.0"
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|
|
85
85
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { onDestroy } from 'svelte'
|
|
3
|
+
import type { AuthSessionSnapshot } from '../bindings/create-auth-session'
|
|
4
|
+
import type { AuthClient } from '../client/auth-client'
|
|
5
|
+
import { destroyAuthProvider, initAuthProvider } from './auth-context'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
interface Props {
|
|
8
|
+
client: AuthClient
|
|
9
|
+
fallback?: import('svelte').Snippet
|
|
10
|
+
children?: import('svelte').Snippet
|
|
11
|
+
}
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
const { client, fallback, children }: Props = $props()
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
const authContext = initAuthProvider(client)
|
|
16
|
+
let snapshot = $state<AuthSessionSnapshot>(authContext.session.getSnapshot())
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
})
|
|
18
|
+
$effect(() => {
|
|
19
|
+
return authContext.session.subscribe(() => {
|
|
20
|
+
snapshot = authContext.session.getSnapshot()
|
|
22
21
|
})
|
|
22
|
+
})
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
onDestroy(() => {
|
|
25
|
+
destroyAuthProvider(authContext)
|
|
26
|
+
})
|
|
27
27
|
</script>
|
|
28
28
|
|
|
29
29
|
{#if snapshot.initError}
|