@myco-dev/sdk 0.1.13 → 0.1.14
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/dist/auth/index.d.ts +1 -1
- package/dist/chat/components/index.d.ts +1 -1
- package/dist/data/index.d.ts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/{manager-D_VR6Nd3.d.ts → manager-CUSXPgeG.d.ts} +2 -2
- package/dist/{manager-D_VR6Nd3.d.ts.map → manager-CUSXPgeG.d.ts.map} +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +7 -9
- package/dist/server.js.map +1 -1
- package/dist/{types-CV6TFukn.d.ts → types-pNWKJX38.d.ts} +4 -1
- package/dist/{types-CV6TFukn.d.ts.map → types-pNWKJX38.d.ts.map} +1 -1
- package/dist/{use-subscription-BUFAoTSc.d.ts → use-subscription-CQavQhR8.d.ts} +5 -4
- package/dist/{use-subscription-BUFAoTSc.d.ts.map → use-subscription-CQavQhR8.d.ts.map} +1 -1
- package/dist/workspace/index.d.ts +1 -1
- package/package.json +1 -1
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as Chat, s as ChatMessage } from "../../use-subscription-
|
|
1
|
+
import { o as Chat, s as ChatMessage } from "../../use-subscription-CQavQhR8.js";
|
|
2
2
|
import { MycoSDK } from "../../index.js";
|
|
3
3
|
import { ComponentType } from "react";
|
|
4
4
|
import { ChatStatus, UIMessage } from "ai";
|
package/dist/data/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { c as PaginatedResponse, i as GetRecordsOptions, l as RecordEntry, n as EntityField, t as Entity } from "../types-
|
|
2
|
-
import { i as UseRecordsResult, n as UseRecordResult, r as UseRecordsOptions } from "../manager-
|
|
1
|
+
import { c as PaginatedResponse, i as GetRecordsOptions, l as RecordEntry, n as EntityField, t as Entity } from "../types-pNWKJX38.js";
|
|
2
|
+
import { i as UseRecordsResult, n as UseRecordResult, r as UseRecordsOptions } from "../manager-CUSXPgeG.js";
|
|
3
3
|
export { type Entity, type EntityField, type GetRecordsOptions, type PaginatedResponse, type RecordEntry, type UseRecordResult, type UseRecordsOptions, type UseRecordsResult };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as AuthManager, i as WorkspaceManager, n as FilesManager, r as ChatManager, t as useSubscription } from "./use-subscription-
|
|
2
|
-
import { t as DataManager } from "./manager-
|
|
1
|
+
import { a as AuthManager, i as WorkspaceManager, n as FilesManager, r as ChatManager, t as useSubscription } from "./use-subscription-CQavQhR8.js";
|
|
2
|
+
import { t as DataManager } from "./manager-CUSXPgeG.js";
|
|
3
3
|
import { ReactNode } from "react";
|
|
4
4
|
import { QueryClient } from "@tanstack/react-query";
|
|
5
5
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
package/dist/index.js
CHANGED
|
@@ -14,15 +14,14 @@ import { jsx } from "react/jsx-runtime";
|
|
|
14
14
|
*/
|
|
15
15
|
function getBaseUrl(config) {
|
|
16
16
|
if (config.baseUrl) return config.baseUrl;
|
|
17
|
-
|
|
18
|
-
return window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1" ? "http://localhost:6926" : "https://api.myco.com";
|
|
17
|
+
return "https://api.myco.com";
|
|
19
18
|
}
|
|
20
19
|
/**
|
|
21
20
|
* Get the auth portal URL for federated login.
|
|
22
21
|
*/
|
|
23
|
-
function getAuthPortalUrl() {
|
|
24
|
-
if (
|
|
25
|
-
return
|
|
22
|
+
function getAuthPortalUrl(config) {
|
|
23
|
+
if (config.authUrl) return config.authUrl;
|
|
24
|
+
return "https://myco.com";
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
//#endregion
|
|
@@ -70,6 +69,7 @@ const jwtCapturePlugin = {
|
|
|
70
69
|
var AuthManager = class {
|
|
71
70
|
authClient;
|
|
72
71
|
constructor(config) {
|
|
72
|
+
this.config = config;
|
|
73
73
|
this.authClient = createAuthClient({
|
|
74
74
|
baseURL: getBaseUrl(config),
|
|
75
75
|
basePath: "/auth",
|
|
@@ -79,7 +79,7 @@ var AuthManager = class {
|
|
|
79
79
|
}
|
|
80
80
|
login(returnTo) {
|
|
81
81
|
if (typeof window === "undefined") return;
|
|
82
|
-
const authPortalUrl = getAuthPortalUrl();
|
|
82
|
+
const authPortalUrl = getAuthPortalUrl(this.config);
|
|
83
83
|
const returnUrl = encodeURIComponent(returnTo || getCurrentUrl());
|
|
84
84
|
window.location.href = `${authPortalUrl}/federated/login?return_to=${returnUrl}`;
|
|
85
85
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/config.ts","../src/auth/manager.ts","../src/workspace/manager.ts","../src/data/manager.ts","../src/chat/namespace.ts","../src/files.ts","../src/api-client.ts","../src/context.ts","../src/index.tsx"],"sourcesContent":["import type { MycoSDKConfig } from \"./types\";\n\n/**\n * Get the base URL for API calls.\n * Auto-detects based on current environment.\n */\nexport function getBaseUrl(config: MycoSDKConfig): string {\n if (config.baseUrl) {\n return config.baseUrl;\n }\n\n if (typeof window === \"undefined\") {\n return \"http://localhost:6926\";\n }\n\n const isLocal =\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\";\n\n return isLocal ? \"http://localhost:6926\" : \"https://api.myco.com\";\n}\n\n/**\n * Get the auth portal URL for federated login.\n */\nexport function getAuthPortalUrl(): string {\n if (typeof window === \"undefined\") {\n return \"http://localhost:5173\";\n }\n\n const isLocal =\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\";\n\n return isLocal ? \"http://localhost:5173\" : \"https://myco.com\";\n}\n","import { createAuthClient } from \"better-auth/react\";\nimport { jwtClient } from \"better-auth/client/plugins\";\nimport type { BetterAuthClientPlugin } from \"better-auth/client\";\nimport type { MycoSDKConfig, MycoSession, UseSessionResult } from \"../types\";\nimport { getBaseUrl, getAuthPortalUrl } from \"../config\";\n\nconst JWT_COOKIE_NAME = \"app_jwt\";\n\n/**\n * Store JWT in cookie for server-side access by loaders.\n */\nfunction storeJwtCookie(jwt: string) {\n if (typeof document === \"undefined\") return;\n const maxAge = 60 * 60 * 24 * 7; // 7 days\n document.cookie = `${JWT_COOKIE_NAME}=${jwt}; path=/; max-age=${maxAge}; samesite=lax`;\n}\n\n/**\n * Clear JWT cookie on sign out.\n */\nfunction clearJwtCookie() {\n if (typeof document === \"undefined\") return;\n document.cookie = `${JWT_COOKIE_NAME}=; path=/; max-age=0`;\n}\n\n/**\n * Get the current URL for return_to param\n */\nfunction getCurrentUrl(): string {\n if (typeof window === \"undefined\") return \"\";\n return window.location.href;\n}\n\n/**\n * Client plugin that captures JWT from set-auth-jwt header and stores it in a cookie.\n */\nconst jwtCapturePlugin: BetterAuthClientPlugin = {\n id: \"jwt-capture\",\n fetchPlugins: [\n {\n id: \"jwt-capture-fetch\",\n name: \"JWT Capture\",\n hooks: {\n onSuccess: (context) => {\n const jwt = context.response.headers.get(\"set-auth-jwt\");\n if (jwt) {\n storeJwtCookie(jwt);\n }\n },\n },\n },\n ],\n};\n\n/**\n * Auth namespace — federated login, logout, session management.\n */\nexport class AuthManager {\n private authClient: ReturnType<typeof createAuthClient>;\n\n constructor(config: MycoSDKConfig) {\n this.authClient = createAuthClient({\n baseURL: getBaseUrl(config),\n basePath: \"/auth\",\n fetchOptions: {\n credentials: \"include\",\n },\n plugins: [jwtClient(), jwtCapturePlugin],\n });\n }\n\n login(returnTo?: string): void {\n if (typeof window === \"undefined\") return;\n const authPortalUrl = getAuthPortalUrl();\n const returnUrl = encodeURIComponent(returnTo || getCurrentUrl());\n window.location.href = `${authPortalUrl}/federated/login?return_to=${returnUrl}`;\n }\n\n async logout(): Promise<void> {\n await this.authClient.signOut();\n clearJwtCookie();\n }\n\n useSession(): UseSessionResult {\n const { data, isPending, error, refetch } = this.authClient.useSession();\n return {\n data: data as MycoSession | null,\n isPending,\n error: error as Error | null,\n refetch,\n };\n }\n\n async getSession(): Promise<MycoSession | null> {\n const result = await this.authClient.getSession();\n if (result.error || !result.data) return null;\n return result.data as MycoSession;\n }\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { getBaseUrl } from \"../config\";\nimport type { MycoSDKConfig, JoinResponse, Workspace, WorkspaceMember } from \"../types\";\n\ntype ApiRequest = <T>(path: string, options?: RequestInit) => Promise<T>;\n\nconst WORKSPACE_STORAGE_KEY = \"myco_workspace_id\";\n\nfunction storeWorkspaceId(workspaceId: string): void {\n if (typeof localStorage === \"undefined\") return;\n try {\n localStorage.setItem(WORKSPACE_STORAGE_KEY, workspaceId);\n } catch {\n // localStorage not available\n }\n}\n\nfunction clearStoredWorkspaceId(): void {\n if (typeof localStorage === \"undefined\") return;\n try {\n localStorage.removeItem(WORKSPACE_STORAGE_KEY);\n } catch {\n // localStorage not available\n }\n}\n\nexport interface UseWorkspaceResult {\n data: Workspace | null;\n isPending: boolean;\n error: Error | null;\n}\n\n/**\n * Manages workspace members for the current workspace.\n */\nexport class WorkspaceMembersManager {\n constructor(\n private requireWorkspaceId: () => string,\n private apiRequest: ApiRequest\n ) {}\n\n async get(): Promise<WorkspaceMember[]> {\n const id = this.requireWorkspaceId();\n return this.apiRequest<WorkspaceMember[]>(`/api/workspaces/${id}/members`);\n }\n\n async add(userId: string, role: \"admin\" | \"member\" = \"member\"): Promise<WorkspaceMember> {\n const id = this.requireWorkspaceId();\n return this.apiRequest<WorkspaceMember>(`/api/workspaces/${id}/members`, {\n method: \"POST\",\n body: JSON.stringify({ userId, role }),\n });\n }\n\n async remove(userId: string): Promise<void> {\n const id = this.requireWorkspaceId();\n await this.apiRequest<void>(`/api/workspaces/${id}/members/${userId}`, {\n method: \"DELETE\",\n });\n }\n}\n\n/**\n * Manages workspaces — owns initialization logic, provides CRUD + React hook.\n */\nexport class WorkspaceManager {\n readonly ready: Promise<void>;\n readonly members: WorkspaceMembersManager;\n\n private readyResolve!: () => void;\n private readyReject!: (error: Error) => void;\n\n constructor(\n private appKey: string,\n private getConfig: () => MycoSDKConfig,\n private setWorkspaceId: (id: string) => void,\n private apiRequest: ApiRequest,\n private auth: { login: () => void },\n private redirectOnUnauth: boolean\n ) {\n this.ready = new Promise<void>((resolve, reject) => {\n this.readyResolve = resolve;\n this.readyReject = reject;\n });\n\n this.members = new WorkspaceMembersManager(() => this.requireWorkspaceId(), apiRequest);\n this.init();\n }\n\n private requireWorkspaceId(): string {\n const id = this.getConfig().workspaceId;\n if (!id) throw new Error(\"No workspace configured.\");\n return id;\n }\n\n private async init(): Promise<void> {\n try {\n await this.ensure();\n this.readyResolve();\n } catch (error) {\n if (error instanceof Error && error.message === \"UNAUTHENTICATED\") {\n if (this.redirectOnUnauth) {\n this.auth.login();\n // Don't resolve — we're redirecting\n return;\n }\n // Not redirecting — resolve anyway (app handles auth state)\n this.readyResolve();\n return;\n }\n this.readyReject(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n private async joinApp(): Promise<JoinResponse> {\n const baseUrl = getBaseUrl(this.getConfig());\n const response = await fetch(`${baseUrl}/api/app/join`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Myco-App-Key\": this.appKey,\n },\n credentials: \"include\",\n });\n\n if (response.status === 401) {\n throw new Error(\"UNAUTHENTICATED\");\n }\n\n if (!response.ok) {\n throw new Error(`Join failed: ${response.status}`);\n }\n\n return response.json();\n }\n\n private async ensure(): Promise<void> {\n try {\n const response = await this.joinApp();\n if (response.success && response.workspaceId) {\n this.setWorkspaceId(response.workspaceId);\n storeWorkspaceId(response.workspaceId);\n }\n } catch (error) {\n clearStoredWorkspaceId();\n throw error;\n }\n }\n\n // ---------------------------------------------------------------------------\n // Public API\n // ---------------------------------------------------------------------------\n\n async list(): Promise<Workspace[]> {\n return this.apiRequest<Workspace[]>(\"/api/workspaces\");\n }\n\n async current(): Promise<Workspace> {\n return this.apiRequest<Workspace>(`/api/workspaces/${this.requireWorkspaceId()}`);\n }\n\n switch(workspaceId: string): void {\n this.setWorkspaceId(workspaceId);\n storeWorkspaceId(workspaceId);\n }\n\n async update(data: { name?: string }): Promise<Workspace> {\n return this.apiRequest<Workspace>(`/api/workspaces/${this.requireWorkspaceId()}`, {\n method: \"PATCH\",\n body: JSON.stringify(data),\n });\n }\n\n useWorkspace(): UseWorkspaceResult {\n const queryResult = useQuery<Workspace>({\n queryKey: [\"myco\", \"workspace\", \"current\"],\n queryFn: () => this.current(),\n });\n\n return {\n data: queryResult.data ?? null,\n isPending: queryResult.isPending,\n error: queryResult.error,\n };\n }\n}\n","import { useState, useCallback } from \"react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type {\n Entity,\n EntityRecord,\n RecordEntry,\n GetRecordsOptions,\n PaginatedResponse,\n} from \"../types\";\n\ntype ApiRequest = <T>(path: string, options?: RequestInit) => Promise<T>;\n\n/**\n * Transform raw API record to include metadata at top level.\n */\nfunction transformRecord<T>(raw: EntityRecord): RecordEntry<T> {\n const record = raw.data as RecordEntry<T>;\n record._id = raw.id;\n record._createdAt = raw.createdAt;\n record._updatedAt = raw.updatedAt;\n return record;\n}\n\nexport interface UseRecordsOptions extends Omit<GetRecordsOptions, \"page\"> {\n initialPage?: number;\n onPageChange?: (page: number) => void;\n}\n\nexport interface UseRecordsResult<T> {\n data: T[] | undefined;\n status: \"error\" | \"success\" | \"pending\";\n isFetching: boolean;\n error: Error | null;\n\n // Pagination\n page: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n nextPage: () => void;\n previousPage: () => void;\n setPage: (page: number) => void;\n\n // Direct cache mutation (like SWR's mutate)\n mutate: (\n data: T[] | ((current: T[] | undefined) => T[] | undefined),\n options?: { revalidate?: boolean }\n ) => void;\n\n // Optimistic updates with automatic rollback\n mutateOptimistic: <R>(\n optimisticData: T[] | ((current: T[] | undefined) => T[]),\n mutation: () => Promise<R>\n ) => Promise<R>;\n}\n\nexport interface UseRecordResult<T> {\n data: T | undefined;\n status: \"error\" | \"success\" | \"pending\";\n isFetching: boolean;\n error: Error | null;\n\n mutate: (\n data: T | ((current: T | undefined) => T | undefined),\n options?: { revalidate?: boolean }\n ) => void;\n\n mutateOptimistic: <R>(\n optimisticData: T | ((current: T | undefined) => T),\n mutation: () => Promise<R>\n ) => Promise<R>;\n}\n\n/**\n * Data namespace — entity and record CRUD + React Query hooks.\n */\nexport class DataManager<TEntities extends Record<string, unknown>> {\n constructor(private apiRequest: ApiRequest) {}\n\n async getEntities(): Promise<Entity[]> {\n return this.apiRequest<Entity[]>(\"/api/entities\");\n }\n\n async getEntity<K extends keyof TEntities & string>(entitySlug: K): Promise<Entity> {\n return this.apiRequest<Entity>(`/api/entities/${entitySlug}`);\n }\n\n async getRecords<K extends keyof TEntities & string>(\n entitySlug: K,\n options?: GetRecordsOptions\n ): Promise<PaginatedResponse<RecordEntry<TEntities[K]>>> {\n const params = new URLSearchParams();\n\n if (options?.page !== undefined) {\n params.set(\"page\", String(options.page));\n }\n if (options?.pageSize !== undefined) {\n params.set(\"pageSize\", String(options.pageSize));\n }\n if (options?.sort) {\n params.set(\"sort\", options.sort);\n }\n if (options?.order) {\n params.set(\"order\", options.order);\n }\n if (options?.filter) {\n params.set(\"filter\", JSON.stringify(options.filter));\n }\n\n const queryString = params.toString();\n const path = `/api/entities/${entitySlug}/records${queryString ? `?${queryString}` : \"\"}`;\n\n const response = await this.apiRequest<PaginatedResponse<EntityRecord>>(path);\n return {\n ...response,\n records: response.records.map<RecordEntry<TEntities[K]>>(transformRecord),\n };\n }\n\n async getRecord<K extends keyof TEntities & string>(\n entitySlug: K,\n recordId: string\n ): Promise<RecordEntry<TEntities[K]>> {\n const response = await this.apiRequest<{ record: EntityRecord }>(`/api/entities/${entitySlug}/records/${recordId}`);\n return transformRecord<TEntities[K]>(response.record);\n }\n\n async createRecord<K extends keyof TEntities & string>(\n entitySlug: K,\n data: TEntities[K]\n ): Promise<RecordEntry<TEntities[K]>> {\n const response = await this.apiRequest<{ record: EntityRecord }>(`/api/entities/${entitySlug}/records`, {\n method: \"POST\",\n body: JSON.stringify({ data }),\n });\n return transformRecord<TEntities[K]>(response.record);\n }\n\n async updateRecord<K extends keyof TEntities & string>(\n entitySlug: K,\n recordId: string,\n data: Partial<TEntities[K]>\n ): Promise<RecordEntry<TEntities[K]>> {\n const response = await this.apiRequest<{ record: EntityRecord }>(`/api/entities/${entitySlug}/records/${recordId}`, {\n method: \"PATCH\",\n body: JSON.stringify({ data }),\n });\n return transformRecord<TEntities[K]>(response.record);\n }\n\n async deleteRecord<K extends keyof TEntities & string>(\n entitySlug: K,\n recordId: string\n ): Promise<void> {\n await this.apiRequest<void>(`/api/entities/${entitySlug}/records/${recordId}`, {\n method: \"DELETE\",\n });\n }\n\n async batchGetRecords<K extends keyof TEntities & string>(\n entitySlug: K,\n ids: string[]\n ): Promise<RecordEntry<TEntities[K]>[]> {\n const response = await this.apiRequest<{ records: EntityRecord[] }>(\n `/api/entities/${entitySlug}/records/batch`,\n {\n method: \"POST\",\n body: JSON.stringify({ ids }),\n }\n );\n return response.records.map<RecordEntry<TEntities[K]>>(transformRecord);\n }\n\n useRecords<K extends keyof TEntities & string>(\n entitySlug: K | null | undefined,\n options?: UseRecordsOptions\n ): UseRecordsResult<RecordEntry<TEntities[K]>> {\n const queryClient = useQueryClient();\n const { initialPage = 1, onPageChange, ...queryOptions } = options ?? {};\n const [page, setPageState] = useState(initialPage);\n const [hasNextPage, setHasNextPage] = useState(false);\n\n const setPage = useCallback(\n (newPage: number) => {\n if (newPage < 1) return;\n setPageState(newPage);\n onPageChange?.(newPage);\n },\n [onPageChange]\n );\n\n const nextPage = useCallback(() => {\n if (hasNextPage) {\n setPage(page + 1);\n }\n }, [hasNextPage, page, setPage]);\n\n const previousPage = useCallback(() => {\n if (page > 1) {\n setPage(page - 1);\n }\n }, [page, setPage]);\n\n // Query key for this hook instance\n const queryKey = entitySlug\n ? ([\"records\", entitySlug, page, queryOptions] as const)\n : [];\n\n const queryResult = useQuery({\n queryKey,\n queryFn: async () => {\n const response = await this.getRecords(entitySlug!, { ...queryOptions, page });\n setHasNextPage(response.pagination.hasMore);\n return response.records;\n },\n enabled: !!entitySlug,\n });\n\n // SWR-like mutate function\n const mutate = useCallback(\n (\n data:\n | RecordEntry<TEntities[K]>[]\n | ((current: RecordEntry<TEntities[K]>[] | undefined) => RecordEntry<TEntities[K]>[] | undefined),\n mutateOptions?: { revalidate?: boolean }\n ) => {\n if (!entitySlug) return;\n\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n\n if (mutateOptions?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient, queryKey, entitySlug]\n );\n\n // Optimistic mutation with rollback\n const mutateOptimistic = useCallback(\n async <R>(\n optimisticData:\n | RecordEntry<TEntities[K]>[]\n | ((current: RecordEntry<TEntities[K]>[] | undefined) => RecordEntry<TEntities[K]>[]),\n mutation: () => Promise<R>\n ): Promise<R> => {\n if (!entitySlug) throw new Error(\"Cannot mutate without entitySlug\");\n\n const previousData = queryClient.getQueryData<RecordEntry<TEntities[K]>[]>(queryKey);\n\n try {\n // Apply optimistic update immediately\n mutate(optimisticData, { revalidate: false });\n\n // Execute the actual mutation\n const result = await mutation();\n return result;\n } catch (error) {\n // Rollback on error\n queryClient.setQueryData(queryKey, previousData);\n throw error;\n }\n },\n [queryClient, queryKey, entitySlug, mutate]\n );\n\n return {\n data: queryResult.data,\n status: queryResult.status,\n isFetching: queryResult.isFetching,\n error: queryResult.error,\n page,\n hasNextPage,\n hasPreviousPage: page > 1,\n nextPage,\n previousPage,\n setPage,\n mutate,\n mutateOptimistic,\n };\n }\n\n useRecord<K extends keyof TEntities & string>(\n entitySlug: K | null | undefined,\n recordId: string | null | undefined\n ): UseRecordResult<RecordEntry<TEntities[K]>> {\n const queryClient = useQueryClient();\n\n const queryKey =\n entitySlug && recordId ? ([\"record\", entitySlug, recordId] as const) : [];\n\n const queryResult = useQuery({\n queryKey,\n queryFn: () => this.getRecord(entitySlug!, recordId!),\n enabled: !!entitySlug && !!recordId,\n });\n\n const mutate = useCallback(\n (\n data:\n | RecordEntry<TEntities[K]>\n | ((current: RecordEntry<TEntities[K]> | undefined) => RecordEntry<TEntities[K]> | undefined),\n mutateOptions?: { revalidate?: boolean }\n ) => {\n if (!entitySlug || !recordId) return;\n\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n\n if (mutateOptions?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient, queryKey, entitySlug, recordId]\n );\n\n const mutateOptimistic = useCallback(\n async <R>(\n optimisticData:\n | RecordEntry<TEntities[K]>\n | ((current: RecordEntry<TEntities[K]> | undefined) => RecordEntry<TEntities[K]>),\n mutation: () => Promise<R>\n ): Promise<R> => {\n if (!entitySlug || !recordId) throw new Error(\"Cannot mutate without entitySlug and recordId\");\n\n const previousData = queryClient.getQueryData<RecordEntry<TEntities[K]>>(queryKey);\n\n try {\n mutate(optimisticData, { revalidate: false });\n const result = await mutation();\n return result;\n } catch (error) {\n queryClient.setQueryData(queryKey, previousData);\n throw error;\n }\n },\n [queryClient, queryKey, entitySlug, recordId, mutate]\n );\n\n return {\n data: queryResult.data,\n status: queryResult.status,\n isFetching: queryResult.isFetching,\n error: queryResult.error,\n mutate,\n mutateOptimistic,\n };\n }\n}\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { DefaultChatTransport } from \"ai\";\nimport type { UIMessage } from \"ai\";\nimport { getBaseUrl } from \"../config\";\nimport type { MycoSDKConfig, Chat, ChatMessage } from \"../types\";\n\ntype ApiRequest = <T>(path: string, options?: RequestInit) => Promise<T>;\n\n/**\n * Chat namespace — chat CRUD, transport factory, React Query hooks.\n */\nexport class ChatManager {\n constructor(\n private apiRequest: ApiRequest,\n private getConfig: () => MycoSDKConfig,\n ) {}\n\n async getChats(): Promise<Chat[]> {\n const data = await this.apiRequest<Chat[]>(\"/api/chat/list\");\n return Array.isArray(data) ? data : [];\n }\n\n async getChat(chatId: string): Promise<Chat | null> {\n try {\n return await this.apiRequest<Chat>(`/api/chat/${chatId}`);\n } catch (error: unknown) {\n if (error && typeof error === \"object\" && \"status\" in error && (error as { status: number }).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n async getChatMessages(chatId: string): Promise<ChatMessage[]> {\n try {\n const data = await this.apiRequest<ChatMessage[]>(`/api/chat/${chatId}/messages`);\n return Array.isArray(data) ? data : [];\n } catch (error: unknown) {\n if (error && typeof error === \"object\" && \"status\" in error && (error as { status: number }).status === 404) {\n return [];\n }\n throw error;\n }\n }\n\n async updateChat(chatId: string, data: { title?: string; isPinned?: boolean }): Promise<Chat> {\n return this.apiRequest<Chat>(`/api/chat/${chatId}`, {\n method: \"PATCH\",\n body: JSON.stringify(data),\n });\n }\n\n async deleteChat(chatId: string): Promise<void> {\n await this.apiRequest<void>(`/api/chat/${chatId}`, {\n method: \"DELETE\",\n });\n }\n\n createTransport() {\n const config = this.getConfig();\n const baseUrl = getBaseUrl(config);\n\n return new DefaultChatTransport({\n api: `${baseUrl}/api/chat`,\n credentials: \"include\",\n headers: () => {\n const currentConfig = this.getConfig();\n const h: Record<string, string> = {\n \"Myco-App-Key\": currentConfig.appKey,\n };\n if (currentConfig.workspaceId) {\n h[\"Myco-Workspace-Id\"] = currentConfig.workspaceId;\n }\n return h;\n },\n fetch: async (input, init) => {\n const response = await globalThis.fetch(input, init);\n\n if (typeof window === \"undefined\") return response;\n\n // Cache invalidation header\n const cacheHeader = response.headers.get(\"X-Cache-Invalidate\");\n if (cacheHeader) {\n try {\n const invalidations = JSON.parse(cacheHeader);\n window.dispatchEvent(\n new CustomEvent(\"cache-invalidate\", { detail: invalidations })\n );\n } catch {\n // ignore parse errors\n }\n }\n\n // Loaded skills header — absent header means no skills loaded\n const skillsHeader = response.headers.get(\"X-Loaded-Skills\");\n try {\n const skills = skillsHeader ? JSON.parse(skillsHeader) : [];\n window.dispatchEvent(\n new CustomEvent(\"skills-loaded\", { detail: skills })\n );\n } catch {\n // ignore parse errors\n }\n\n return response;\n },\n });\n }\n\n // ---------------------------------------------------------------------------\n // React Query hooks\n // ---------------------------------------------------------------------------\n\n useChats() {\n const queryClient = useQueryClient();\n\n const queryKey = [\"chats\"] as const;\n\n const queryResult = useQuery({\n queryKey,\n queryFn: () => this.getChats(),\n staleTime: 30_000,\n refetchOnWindowFocus: false,\n refetchOnReconnect: true,\n });\n\n // Auto-invalidate when cache-invalidate events fire for \"chats\"\n useEffect(() => {\n const handler = (e: Event) => {\n const events = (e as CustomEvent).detail as Array<{ resource: string }>;\n if (events?.some((ev) => ev.resource === \"chats\")) {\n queryClient.invalidateQueries({ queryKey });\n }\n };\n window.addEventListener(\"cache-invalidate\", handler);\n return () => window.removeEventListener(\"cache-invalidate\", handler);\n }, [queryClient]);\n\n const mutate = useCallback(\n (\n data:\n | Chat[]\n | ((current: Chat[] | undefined) => Chat[] | undefined),\n options?: { revalidate?: boolean }\n ) => {\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n if (options?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient]\n );\n\n return {\n chats: queryResult.data ?? [],\n isLoading: queryResult.isLoading,\n error: queryResult.error,\n mutate,\n };\n }\n\n useChat(chatId: string | null | undefined) {\n const queryClient = useQueryClient();\n\n const queryKey = chatId ? ([\"chat\", chatId] as const) : ([] as const);\n\n const queryResult = useQuery({\n queryKey,\n queryFn: () => this.getChat(chatId!),\n enabled: !!chatId,\n staleTime: 30_000,\n refetchOnWindowFocus: false,\n refetchOnReconnect: true,\n retry: (failureCount, error) => {\n if (error && typeof error === \"object\" && \"status\" in error && (error as { status: number }).status === 404) {\n return false;\n }\n return failureCount < 3;\n },\n });\n\n const mutate = useCallback(\n (\n data:\n | Chat\n | null\n | ((current: Chat | null | undefined) => Chat | null | undefined),\n options?: { revalidate?: boolean }\n ) => {\n if (!chatId) return;\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n if (options?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient, chatId]\n );\n\n return {\n chat: queryResult.data ?? null,\n isLoading: queryResult.isLoading,\n error: queryResult.error,\n mutate,\n };\n }\n\n private static emptyUIMessages: UIMessage[] = [];\n\n useChatMessages(chatId: string | null | undefined) {\n const queryClient = useQueryClient();\n\n const queryKey = chatId\n ? ([\"chatMessages\", chatId] as const)\n : ([] as const);\n\n const queryResult = useQuery({\n queryKey,\n queryFn: () => this.getChatMessages(chatId!),\n enabled: !!chatId,\n staleTime: 30_000,\n refetchOnWindowFocus: false,\n refetchOnReconnect: true,\n retry: (failureCount, error) => {\n if (error && typeof error === \"object\" && \"status\" in error && (error as { status: number }).status === 404) {\n return false;\n }\n return failureCount < 3;\n },\n });\n\n // Transform raw messages to UIMessage format\n const messages = useMemo<UIMessage[]>(\n () =>\n queryResult.data?.map((msg) => ({\n id: msg.id,\n parts: (msg.parts as UIMessage[\"parts\"]) || [],\n role: msg.role as \"user\" | \"assistant\" | \"system\",\n createdAt: new Date(msg.createdAt),\n experimental_attachments:\n (msg.attachments as Array<{\n url: string;\n contentType?: string;\n name?: string;\n }>) || [],\n metadata: msg.metadata,\n })) ?? [],\n [queryResult.data]\n );\n\n // Track whether we've already invalidated the chats list for this chat session\n const hasInvalidatedChatsRef = { current: false };\n\n // Sync streaming updates into React Query cache (replaces SWR mutate)\n const onChange = useCallback(\n (newMessages: UIMessage[]) => {\n if (!chatId) return;\n\n const cachedData = queryClient.getQueryData<ChatMessage[]>(queryKey);\n\n if (!cachedData) {\n // New chat — no cached messages yet. Invalidate chats list so sidebar updates.\n if (!hasInvalidatedChatsRef.current) {\n hasInvalidatedChatsRef.current = true;\n queryClient.invalidateQueries({ queryKey: [\"chats\"] });\n }\n return;\n }\n\n queryClient.setQueryData<ChatMessage[]>(queryKey, () => {\n const updatedCache = cachedData.map((cached) => {\n const updated = newMessages.find((m) => m.id === cached.id);\n if (updated) {\n return { ...cached, metadata: updated.metadata as Record<string, unknown> };\n }\n return cached;\n });\n\n // Add any new messages that aren't in cache\n const existingIds = new Set(updatedCache.map((m) => m.id));\n const messagesToAdd: ChatMessage[] = newMessages\n .filter((m) => !existingIds.has(m.id))\n .map((uiMsg) => {\n const textParts = (uiMsg.parts || []).filter(\n (p): p is { type: \"text\"; text: string } => p.type === \"text\"\n );\n const content = textParts.map((p) => p.text).join(\"\") || \"\";\n return {\n id: uiMsg.id,\n chatId,\n role: uiMsg.role,\n content,\n parts: uiMsg.parts || [],\n attachments:\n (uiMsg as UIMessage & { experimental_attachments?: unknown[] })\n .experimental_attachments || null,\n metadata: (uiMsg.metadata as Record<string, unknown>) || null,\n createdAt:\n (uiMsg as UIMessage & { createdAt?: Date }).createdAt instanceof Date\n ? (uiMsg as UIMessage & { createdAt: Date }).createdAt.toISOString()\n : new Date().toISOString(),\n completedAt: null,\n } as ChatMessage;\n });\n\n // Invalidate chats list when new messages appear (new chat created or updated)\n if (messagesToAdd.length > 0 && !hasInvalidatedChatsRef.current) {\n hasInvalidatedChatsRef.current = true;\n queryClient.invalidateQueries({ queryKey: [\"chats\"] });\n }\n\n return [...updatedCache, ...messagesToAdd];\n });\n },\n [queryClient, chatId]\n );\n\n const mutate = useCallback(\n (\n data:\n | ChatMessage[]\n | null\n | ((current: ChatMessage[] | null | undefined) => ChatMessage[] | null | undefined),\n options?: { revalidate?: boolean }\n ) => {\n if (!chatId) return;\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n if (options?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient, chatId]\n );\n\n return {\n messages: messages || ChatManager.emptyUIMessages,\n isLoading: queryResult.isLoading,\n error: queryResult.error,\n mutate,\n onChange,\n };\n }\n}\n\n","type AuthenticatedFetch = (path: string, options?: RequestInit) => Promise<Response>;\n\n/**\n * Files namespace — file uploads.\n */\nexport class FilesManager {\n constructor(private authenticatedFetch: AuthenticatedFetch) {}\n\n async upload(file: File): Promise<string> {\n const formData = new FormData();\n formData.append(\"file\", file);\n const response = await this.authenticatedFetch(\"/api/files/upload\", {\n method: \"POST\",\n body: formData,\n });\n if (!response.ok) {\n const errorData = (await response.json()) as { error?: string };\n throw new Error(errorData.error || \"Upload failed\");\n }\n const data = (await response.json()) as { url: string };\n return data.url;\n }\n}\n","import type { MycoSDKConfig } from \"./types\";\nimport { getBaseUrl } from \"./config\";\n\n/**\n * Custom error class for API errors.\n */\nexport class ApiError extends Error {\n constructor(\n public status: number,\n public body: string,\n public path: string\n ) {\n super(`API Error ${status} on ${path}: ${body}`);\n this.name = \"ApiError\";\n }\n}\n\n/**\n * Create an API request function bound to the given config.\n * Waits for the ready promise before making requests.\n *\n * @param getConfig - Function that returns the current SDK config\n * @param ready - Promise that resolves when SDK is initialized (workspace ready)\n */\nexport function createApiClient(\n getConfig: () => MycoSDKConfig,\n ready?: Promise<void>\n) {\n return async function apiRequest<T>(\n path: string,\n options: RequestInit = {}\n ): Promise<T> {\n await ready;\n\n const config = getConfig();\n const baseUrl = getBaseUrl(config);\n\n const headers = new Headers(options.headers);\n\n // Always set content type for JSON requests\n if (!headers.has(\"Content-Type\") && options.body) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n\n // Inject app key header\n headers.set(\"Myco-App-Key\", config.appKey);\n\n // Inject workspace ID if configured\n if (config.workspaceId) {\n headers.set(\"Myco-Workspace-Id\", config.workspaceId);\n }\n\n const response = await fetch(`${baseUrl}${path}`, {\n ...options,\n headers,\n credentials: \"include\",\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new ApiError(response.status, errorText, path);\n }\n\n // Handle empty responses\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType?.includes(\"application/json\")) {\n return undefined as T;\n }\n\n return response.json();\n };\n}\n","import { createContext } from \"react\";\nimport type { MycoSDK } from \"./index\";\n\nexport const MycoContext = createContext<MycoSDK<any> | null>(null);\n","import { useContext, type ReactNode } from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { getBaseUrl } from \"./config\";\nimport { AuthManager } from \"./auth/manager\";\nimport { WorkspaceManager } from \"./workspace/manager\";\nimport { DataManager } from \"./data/manager\";\nimport { ChatManager } from \"./chat/namespace\";\nimport { FilesManager } from \"./files\";\nimport { createApiClient } from \"./api-client\";\nimport type { MycoSDKConfig } from \"./types\";\nimport { AuthContext, type AuthContextValue } from \"./auth/context\";\nimport { MycoContext } from \"./context\";\n\n/**\n * Additional options for MycoSDK.\n */\nexport interface MycoSDKOptions {\n /** Base URL override (optional) */\n baseUrl?: string;\n /** If true, redirect to login when not authenticated (default: true) */\n redirectOnUnauth?: boolean;\n}\n\n/**\n * Myco SDK instance.\n *\n * @example\n * ```typescript\n * import { MycoSDK } from '@myco/sdk';\n * import type { EntityTypes } from './types/myco.generated';\n *\n * const myco = new MycoSDK<EntityTypes>(\"realestate\");\n *\n * // All API calls automatically wait for SDK to be ready\n * const records = await myco.data.getRecords('property');\n * ```\n */\nexport class MycoSDK<\n TEntities extends Record<string, unknown> = Record<string, unknown>,\n> {\n /** Promise that resolves when the SDK is fully initialized (workspace ready) */\n readonly ready: Promise<void>;\n /** Auth namespace - login, logout, session management */\n readonly auth: AuthManager;\n /** Workspace namespace - manage the current workspace */\n readonly workspace: WorkspaceManager;\n /** Data namespace - entity records CRUD */\n readonly data: DataManager<TEntities>;\n /** Chat namespace - chat CRUD, transport factory, React Query hooks */\n readonly chat: ChatManager;\n /** Files namespace — upload files */\n readonly files: FilesManager;\n /** Authenticated fetch — adds auth headers, waits for SDK ready, returns raw Response */\n readonly fetch: (path: string, options?: RequestInit) => Promise<Response>;\n /** React Query client — shared across the SDK and consumer app */\n readonly queryClient: QueryClient;\n\n constructor(appKey: string, options: MycoSDKOptions = {}) {\n const { redirectOnUnauth = true } = options;\n\n const initialConfig: MycoSDKConfig = {\n appKey,\n workspaceId: undefined,\n baseUrl: options.baseUrl,\n };\n\n let config = { ...initialConfig };\n const getConfig = () => config;\n const setWorkspaceId = (workspaceId: string) => {\n config = { ...config, workspaceId };\n };\n\n this.queryClient = new QueryClient();\n this.auth = new AuthManager(config);\n\n this.workspace = new WorkspaceManager(\n appKey,\n getConfig,\n setWorkspaceId,\n // An apiRequest that does NOT wait for `ready` (would deadlock).\n createApiClient(getConfig),\n this.auth,\n redirectOnUnauth,\n );\n\n // SDK-level ready is just the workspace's ready\n this.ready = this.workspace.ready;\n\n // apiRequest used by all other namespaces — waits for ready\n const apiRequest = createApiClient(getConfig, this.ready);\n\n this.data = new DataManager<TEntities>(apiRequest);\n this.chat = new ChatManager(apiRequest, getConfig);\n\n const ready = this.ready;\n async function authenticatedFetch(\n path: string,\n init: RequestInit = {},\n ): Promise<Response> {\n await ready;\n const config = getConfig();\n\n const headers = new Headers(init.headers);\n headers.set(\"Myco-App-Key\", config.appKey);\n if (config.workspaceId)\n headers.set(\"Myco-Workspace-Id\", config.workspaceId);\n\n return fetch(`${getBaseUrl(config)}${path}`, {\n ...init,\n headers,\n credentials: \"include\",\n });\n }\n\n this.files = new FilesManager(authenticatedFetch);\n this.fetch = authenticatedFetch;\n }\n}\n\n/**\n * Provider that wraps the Myco SDK for React components.\n * Must be placed near the root of your React app.\n *\n * @example\n * ```tsx\n * import { MycoProvider } from \"@myco-dev/sdk\";\n * import { myco } from \"./lib/myco\";\n *\n * function App() {\n * return (\n * <MycoProvider myco={myco}>\n * <YourRoutes />\n * </MycoProvider>\n * );\n * }\n * ```\n */\nexport function MycoProvider({\n myco,\n children,\n}: {\n myco: MycoSDK<any>;\n children: ReactNode;\n}) {\n const { data: session, isPending, refetch } = myco.auth.useSession();\n\n const value: AuthContextValue = {\n isLoading: isPending,\n isLoggedIn: !!session?.user,\n userId: session?.user?.id,\n user: session?.user,\n login: (returnTo) => myco.auth.login(returnTo),\n logout: () => myco.auth.logout(),\n refresh: refetch,\n };\n\n return (\n <QueryClientProvider client={myco.queryClient}>\n <MycoContext.Provider value={myco}>\n <AuthContext.Provider value={value}>{children}</AuthContext.Provider>\n </MycoContext.Provider>\n </QueryClientProvider>\n );\n}\n\n/**\n * Hook to access the Myco SDK instance.\n * Must be used within a MycoProvider.\n */\nexport function useMyco<\n T extends Record<string, unknown>\n>(): MycoSDK<T> {\n const context = useContext(MycoContext);\n if (!context) {\n throw new Error(\"useMyco must be used within a MycoProvider\");\n }\n return context as MycoSDK<T>;\n}\n\n/** @internal — will be fleshed out later. Always keep exported. */\nexport { useSubscription } from \"./use-subscription\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/config.ts","../src/auth/manager.ts","../src/workspace/manager.ts","../src/data/manager.ts","../src/chat/namespace.ts","../src/files.ts","../src/api-client.ts","../src/context.ts","../src/index.tsx"],"sourcesContent":["import type { MycoSDKConfig } from \"./types\";\n\n/**\n * Get the base URL for API calls.\n * Auto-detects based on current environment.\n */\nexport function getBaseUrl(config: MycoSDKConfig): string {\n if (config.baseUrl) {\n return config.baseUrl;\n }\n\n return \"https://api.myco.com\";\n}\n\n/**\n * Get the auth portal URL for federated login.\n */\nexport function getAuthPortalUrl(config: MycoSDKConfig): string {\n if (config.authUrl) {\n return config.authUrl;\n }\n\n return \"https://myco.com\";\n}\n","import { createAuthClient } from \"better-auth/react\";\nimport { jwtClient } from \"better-auth/client/plugins\";\nimport type { BetterAuthClientPlugin } from \"better-auth/client\";\nimport type { MycoSDKConfig, MycoSession, UseSessionResult } from \"../types\";\nimport { getBaseUrl, getAuthPortalUrl } from \"../config\";\n\nconst JWT_COOKIE_NAME = \"app_jwt\";\n\n/**\n * Store JWT in cookie for server-side access by loaders.\n */\nfunction storeJwtCookie(jwt: string) {\n if (typeof document === \"undefined\") return;\n const maxAge = 60 * 60 * 24 * 7; // 7 days\n document.cookie = `${JWT_COOKIE_NAME}=${jwt}; path=/; max-age=${maxAge}; samesite=lax`;\n}\n\n/**\n * Clear JWT cookie on sign out.\n */\nfunction clearJwtCookie() {\n if (typeof document === \"undefined\") return;\n document.cookie = `${JWT_COOKIE_NAME}=; path=/; max-age=0`;\n}\n\n/**\n * Get the current URL for return_to param\n */\nfunction getCurrentUrl(): string {\n if (typeof window === \"undefined\") return \"\";\n return window.location.href;\n}\n\n/**\n * Client plugin that captures JWT from set-auth-jwt header and stores it in a cookie.\n */\nconst jwtCapturePlugin: BetterAuthClientPlugin = {\n id: \"jwt-capture\",\n fetchPlugins: [\n {\n id: \"jwt-capture-fetch\",\n name: \"JWT Capture\",\n hooks: {\n onSuccess: (context) => {\n const jwt = context.response.headers.get(\"set-auth-jwt\");\n if (jwt) {\n storeJwtCookie(jwt);\n }\n },\n },\n },\n ],\n};\n\n/**\n * Auth namespace — federated login, logout, session management.\n */\nexport class AuthManager {\n private authClient: ReturnType<typeof createAuthClient>;\n\n constructor(private config: MycoSDKConfig) {\n this.authClient = createAuthClient({\n baseURL: getBaseUrl(config),\n basePath: \"/auth\",\n fetchOptions: {\n credentials: \"include\",\n },\n plugins: [jwtClient(), jwtCapturePlugin],\n });\n }\n\n login(returnTo?: string): void {\n if (typeof window === \"undefined\") return;\n const authPortalUrl = getAuthPortalUrl(this.config);\n const returnUrl = encodeURIComponent(returnTo || getCurrentUrl());\n window.location.href = `${authPortalUrl}/federated/login?return_to=${returnUrl}`;\n }\n\n async logout(): Promise<void> {\n await this.authClient.signOut();\n clearJwtCookie();\n }\n\n useSession(): UseSessionResult {\n const { data, isPending, error, refetch } = this.authClient.useSession();\n return {\n data: data as MycoSession | null,\n isPending,\n error: error as Error | null,\n refetch,\n };\n }\n\n async getSession(): Promise<MycoSession | null> {\n const result = await this.authClient.getSession();\n if (result.error || !result.data) return null;\n return result.data as MycoSession;\n }\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { getBaseUrl } from \"../config\";\nimport type { MycoSDKConfig, JoinResponse, Workspace, WorkspaceMember } from \"../types\";\n\ntype ApiRequest = <T>(path: string, options?: RequestInit) => Promise<T>;\n\nconst WORKSPACE_STORAGE_KEY = \"myco_workspace_id\";\n\nfunction storeWorkspaceId(workspaceId: string): void {\n if (typeof localStorage === \"undefined\") return;\n try {\n localStorage.setItem(WORKSPACE_STORAGE_KEY, workspaceId);\n } catch {\n // localStorage not available\n }\n}\n\nfunction clearStoredWorkspaceId(): void {\n if (typeof localStorage === \"undefined\") return;\n try {\n localStorage.removeItem(WORKSPACE_STORAGE_KEY);\n } catch {\n // localStorage not available\n }\n}\n\nexport interface UseWorkspaceResult {\n data: Workspace | null;\n isPending: boolean;\n error: Error | null;\n}\n\n/**\n * Manages workspace members for the current workspace.\n */\nexport class WorkspaceMembersManager {\n constructor(\n private requireWorkspaceId: () => string,\n private apiRequest: ApiRequest\n ) {}\n\n async get(): Promise<WorkspaceMember[]> {\n const id = this.requireWorkspaceId();\n return this.apiRequest<WorkspaceMember[]>(`/api/workspaces/${id}/members`);\n }\n\n async add(userId: string, role: \"admin\" | \"member\" = \"member\"): Promise<WorkspaceMember> {\n const id = this.requireWorkspaceId();\n return this.apiRequest<WorkspaceMember>(`/api/workspaces/${id}/members`, {\n method: \"POST\",\n body: JSON.stringify({ userId, role }),\n });\n }\n\n async remove(userId: string): Promise<void> {\n const id = this.requireWorkspaceId();\n await this.apiRequest<void>(`/api/workspaces/${id}/members/${userId}`, {\n method: \"DELETE\",\n });\n }\n}\n\n/**\n * Manages workspaces — owns initialization logic, provides CRUD + React hook.\n */\nexport class WorkspaceManager {\n readonly ready: Promise<void>;\n readonly members: WorkspaceMembersManager;\n\n private readyResolve!: () => void;\n private readyReject!: (error: Error) => void;\n\n constructor(\n private appKey: string,\n private getConfig: () => MycoSDKConfig,\n private setWorkspaceId: (id: string) => void,\n private apiRequest: ApiRequest,\n private auth: { login: () => void },\n private redirectOnUnauth: boolean\n ) {\n this.ready = new Promise<void>((resolve, reject) => {\n this.readyResolve = resolve;\n this.readyReject = reject;\n });\n\n this.members = new WorkspaceMembersManager(() => this.requireWorkspaceId(), apiRequest);\n this.init();\n }\n\n private requireWorkspaceId(): string {\n const id = this.getConfig().workspaceId;\n if (!id) throw new Error(\"No workspace configured.\");\n return id;\n }\n\n private async init(): Promise<void> {\n try {\n await this.ensure();\n this.readyResolve();\n } catch (error) {\n if (error instanceof Error && error.message === \"UNAUTHENTICATED\") {\n if (this.redirectOnUnauth) {\n this.auth.login();\n // Don't resolve — we're redirecting\n return;\n }\n // Not redirecting — resolve anyway (app handles auth state)\n this.readyResolve();\n return;\n }\n this.readyReject(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n private async joinApp(): Promise<JoinResponse> {\n const baseUrl = getBaseUrl(this.getConfig());\n const response = await fetch(`${baseUrl}/api/app/join`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Myco-App-Key\": this.appKey,\n },\n credentials: \"include\",\n });\n\n if (response.status === 401) {\n throw new Error(\"UNAUTHENTICATED\");\n }\n\n if (!response.ok) {\n throw new Error(`Join failed: ${response.status}`);\n }\n\n return response.json();\n }\n\n private async ensure(): Promise<void> {\n try {\n const response = await this.joinApp();\n if (response.success && response.workspaceId) {\n this.setWorkspaceId(response.workspaceId);\n storeWorkspaceId(response.workspaceId);\n }\n } catch (error) {\n clearStoredWorkspaceId();\n throw error;\n }\n }\n\n // ---------------------------------------------------------------------------\n // Public API\n // ---------------------------------------------------------------------------\n\n async list(): Promise<Workspace[]> {\n return this.apiRequest<Workspace[]>(\"/api/workspaces\");\n }\n\n async current(): Promise<Workspace> {\n return this.apiRequest<Workspace>(`/api/workspaces/${this.requireWorkspaceId()}`);\n }\n\n switch(workspaceId: string): void {\n this.setWorkspaceId(workspaceId);\n storeWorkspaceId(workspaceId);\n }\n\n async update(data: { name?: string }): Promise<Workspace> {\n return this.apiRequest<Workspace>(`/api/workspaces/${this.requireWorkspaceId()}`, {\n method: \"PATCH\",\n body: JSON.stringify(data),\n });\n }\n\n useWorkspace(): UseWorkspaceResult {\n const queryResult = useQuery<Workspace>({\n queryKey: [\"myco\", \"workspace\", \"current\"],\n queryFn: () => this.current(),\n });\n\n return {\n data: queryResult.data ?? null,\n isPending: queryResult.isPending,\n error: queryResult.error,\n };\n }\n}\n","import { useState, useCallback } from \"react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type {\n Entity,\n EntityRecord,\n RecordEntry,\n GetRecordsOptions,\n PaginatedResponse,\n} from \"../types\";\n\ntype ApiRequest = <T>(path: string, options?: RequestInit) => Promise<T>;\n\n/**\n * Transform raw API record to include metadata at top level.\n */\nfunction transformRecord<T>(raw: EntityRecord): RecordEntry<T> {\n const record = raw.data as RecordEntry<T>;\n record._id = raw.id;\n record._createdAt = raw.createdAt;\n record._updatedAt = raw.updatedAt;\n return record;\n}\n\nexport interface UseRecordsOptions extends Omit<GetRecordsOptions, \"page\"> {\n initialPage?: number;\n onPageChange?: (page: number) => void;\n}\n\nexport interface UseRecordsResult<T> {\n data: T[] | undefined;\n status: \"error\" | \"success\" | \"pending\";\n isFetching: boolean;\n error: Error | null;\n\n // Pagination\n page: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n nextPage: () => void;\n previousPage: () => void;\n setPage: (page: number) => void;\n\n // Direct cache mutation (like SWR's mutate)\n mutate: (\n data: T[] | ((current: T[] | undefined) => T[] | undefined),\n options?: { revalidate?: boolean }\n ) => void;\n\n // Optimistic updates with automatic rollback\n mutateOptimistic: <R>(\n optimisticData: T[] | ((current: T[] | undefined) => T[]),\n mutation: () => Promise<R>\n ) => Promise<R>;\n}\n\nexport interface UseRecordResult<T> {\n data: T | undefined;\n status: \"error\" | \"success\" | \"pending\";\n isFetching: boolean;\n error: Error | null;\n\n mutate: (\n data: T | ((current: T | undefined) => T | undefined),\n options?: { revalidate?: boolean }\n ) => void;\n\n mutateOptimistic: <R>(\n optimisticData: T | ((current: T | undefined) => T),\n mutation: () => Promise<R>\n ) => Promise<R>;\n}\n\n/**\n * Data namespace — entity and record CRUD + React Query hooks.\n */\nexport class DataManager<TEntities extends Record<string, unknown>> {\n constructor(private apiRequest: ApiRequest) {}\n\n async getEntities(): Promise<Entity[]> {\n return this.apiRequest<Entity[]>(\"/api/entities\");\n }\n\n async getEntity<K extends keyof TEntities & string>(entitySlug: K): Promise<Entity> {\n return this.apiRequest<Entity>(`/api/entities/${entitySlug}`);\n }\n\n async getRecords<K extends keyof TEntities & string>(\n entitySlug: K,\n options?: GetRecordsOptions\n ): Promise<PaginatedResponse<RecordEntry<TEntities[K]>>> {\n const params = new URLSearchParams();\n\n if (options?.page !== undefined) {\n params.set(\"page\", String(options.page));\n }\n if (options?.pageSize !== undefined) {\n params.set(\"pageSize\", String(options.pageSize));\n }\n if (options?.sort) {\n params.set(\"sort\", options.sort);\n }\n if (options?.order) {\n params.set(\"order\", options.order);\n }\n if (options?.filter) {\n params.set(\"filter\", JSON.stringify(options.filter));\n }\n\n const queryString = params.toString();\n const path = `/api/entities/${entitySlug}/records${queryString ? `?${queryString}` : \"\"}`;\n\n const response = await this.apiRequest<PaginatedResponse<EntityRecord>>(path);\n return {\n ...response,\n records: response.records.map<RecordEntry<TEntities[K]>>(transformRecord),\n };\n }\n\n async getRecord<K extends keyof TEntities & string>(\n entitySlug: K,\n recordId: string\n ): Promise<RecordEntry<TEntities[K]>> {\n const response = await this.apiRequest<{ record: EntityRecord }>(`/api/entities/${entitySlug}/records/${recordId}`);\n return transformRecord<TEntities[K]>(response.record);\n }\n\n async createRecord<K extends keyof TEntities & string>(\n entitySlug: K,\n data: TEntities[K]\n ): Promise<RecordEntry<TEntities[K]>> {\n const response = await this.apiRequest<{ record: EntityRecord }>(`/api/entities/${entitySlug}/records`, {\n method: \"POST\",\n body: JSON.stringify({ data }),\n });\n return transformRecord<TEntities[K]>(response.record);\n }\n\n async updateRecord<K extends keyof TEntities & string>(\n entitySlug: K,\n recordId: string,\n data: Partial<TEntities[K]>\n ): Promise<RecordEntry<TEntities[K]>> {\n const response = await this.apiRequest<{ record: EntityRecord }>(`/api/entities/${entitySlug}/records/${recordId}`, {\n method: \"PATCH\",\n body: JSON.stringify({ data }),\n });\n return transformRecord<TEntities[K]>(response.record);\n }\n\n async deleteRecord<K extends keyof TEntities & string>(\n entitySlug: K,\n recordId: string\n ): Promise<void> {\n await this.apiRequest<void>(`/api/entities/${entitySlug}/records/${recordId}`, {\n method: \"DELETE\",\n });\n }\n\n async batchGetRecords<K extends keyof TEntities & string>(\n entitySlug: K,\n ids: string[]\n ): Promise<RecordEntry<TEntities[K]>[]> {\n const response = await this.apiRequest<{ records: EntityRecord[] }>(\n `/api/entities/${entitySlug}/records/batch`,\n {\n method: \"POST\",\n body: JSON.stringify({ ids }),\n }\n );\n return response.records.map<RecordEntry<TEntities[K]>>(transformRecord);\n }\n\n useRecords<K extends keyof TEntities & string>(\n entitySlug: K | null | undefined,\n options?: UseRecordsOptions\n ): UseRecordsResult<RecordEntry<TEntities[K]>> {\n const queryClient = useQueryClient();\n const { initialPage = 1, onPageChange, ...queryOptions } = options ?? {};\n const [page, setPageState] = useState(initialPage);\n const [hasNextPage, setHasNextPage] = useState(false);\n\n const setPage = useCallback(\n (newPage: number) => {\n if (newPage < 1) return;\n setPageState(newPage);\n onPageChange?.(newPage);\n },\n [onPageChange]\n );\n\n const nextPage = useCallback(() => {\n if (hasNextPage) {\n setPage(page + 1);\n }\n }, [hasNextPage, page, setPage]);\n\n const previousPage = useCallback(() => {\n if (page > 1) {\n setPage(page - 1);\n }\n }, [page, setPage]);\n\n // Query key for this hook instance\n const queryKey = entitySlug\n ? ([\"records\", entitySlug, page, queryOptions] as const)\n : [];\n\n const queryResult = useQuery({\n queryKey,\n queryFn: async () => {\n const response = await this.getRecords(entitySlug!, { ...queryOptions, page });\n setHasNextPage(response.pagination.hasMore);\n return response.records;\n },\n enabled: !!entitySlug,\n });\n\n // SWR-like mutate function\n const mutate = useCallback(\n (\n data:\n | RecordEntry<TEntities[K]>[]\n | ((current: RecordEntry<TEntities[K]>[] | undefined) => RecordEntry<TEntities[K]>[] | undefined),\n mutateOptions?: { revalidate?: boolean }\n ) => {\n if (!entitySlug) return;\n\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n\n if (mutateOptions?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient, queryKey, entitySlug]\n );\n\n // Optimistic mutation with rollback\n const mutateOptimistic = useCallback(\n async <R>(\n optimisticData:\n | RecordEntry<TEntities[K]>[]\n | ((current: RecordEntry<TEntities[K]>[] | undefined) => RecordEntry<TEntities[K]>[]),\n mutation: () => Promise<R>\n ): Promise<R> => {\n if (!entitySlug) throw new Error(\"Cannot mutate without entitySlug\");\n\n const previousData = queryClient.getQueryData<RecordEntry<TEntities[K]>[]>(queryKey);\n\n try {\n // Apply optimistic update immediately\n mutate(optimisticData, { revalidate: false });\n\n // Execute the actual mutation\n const result = await mutation();\n return result;\n } catch (error) {\n // Rollback on error\n queryClient.setQueryData(queryKey, previousData);\n throw error;\n }\n },\n [queryClient, queryKey, entitySlug, mutate]\n );\n\n return {\n data: queryResult.data,\n status: queryResult.status,\n isFetching: queryResult.isFetching,\n error: queryResult.error,\n page,\n hasNextPage,\n hasPreviousPage: page > 1,\n nextPage,\n previousPage,\n setPage,\n mutate,\n mutateOptimistic,\n };\n }\n\n useRecord<K extends keyof TEntities & string>(\n entitySlug: K | null | undefined,\n recordId: string | null | undefined\n ): UseRecordResult<RecordEntry<TEntities[K]>> {\n const queryClient = useQueryClient();\n\n const queryKey =\n entitySlug && recordId ? ([\"record\", entitySlug, recordId] as const) : [];\n\n const queryResult = useQuery({\n queryKey,\n queryFn: () => this.getRecord(entitySlug!, recordId!),\n enabled: !!entitySlug && !!recordId,\n });\n\n const mutate = useCallback(\n (\n data:\n | RecordEntry<TEntities[K]>\n | ((current: RecordEntry<TEntities[K]> | undefined) => RecordEntry<TEntities[K]> | undefined),\n mutateOptions?: { revalidate?: boolean }\n ) => {\n if (!entitySlug || !recordId) return;\n\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n\n if (mutateOptions?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient, queryKey, entitySlug, recordId]\n );\n\n const mutateOptimistic = useCallback(\n async <R>(\n optimisticData:\n | RecordEntry<TEntities[K]>\n | ((current: RecordEntry<TEntities[K]> | undefined) => RecordEntry<TEntities[K]>),\n mutation: () => Promise<R>\n ): Promise<R> => {\n if (!entitySlug || !recordId) throw new Error(\"Cannot mutate without entitySlug and recordId\");\n\n const previousData = queryClient.getQueryData<RecordEntry<TEntities[K]>>(queryKey);\n\n try {\n mutate(optimisticData, { revalidate: false });\n const result = await mutation();\n return result;\n } catch (error) {\n queryClient.setQueryData(queryKey, previousData);\n throw error;\n }\n },\n [queryClient, queryKey, entitySlug, recordId, mutate]\n );\n\n return {\n data: queryResult.data,\n status: queryResult.status,\n isFetching: queryResult.isFetching,\n error: queryResult.error,\n mutate,\n mutateOptimistic,\n };\n }\n}\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { DefaultChatTransport } from \"ai\";\nimport type { UIMessage } from \"ai\";\nimport { getBaseUrl } from \"../config\";\nimport type { MycoSDKConfig, Chat, ChatMessage } from \"../types\";\n\ntype ApiRequest = <T>(path: string, options?: RequestInit) => Promise<T>;\n\n/**\n * Chat namespace — chat CRUD, transport factory, React Query hooks.\n */\nexport class ChatManager {\n constructor(\n private apiRequest: ApiRequest,\n private getConfig: () => MycoSDKConfig,\n ) {}\n\n async getChats(): Promise<Chat[]> {\n const data = await this.apiRequest<Chat[]>(\"/api/chat/list\");\n return Array.isArray(data) ? data : [];\n }\n\n async getChat(chatId: string): Promise<Chat | null> {\n try {\n return await this.apiRequest<Chat>(`/api/chat/${chatId}`);\n } catch (error: unknown) {\n if (error && typeof error === \"object\" && \"status\" in error && (error as { status: number }).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n async getChatMessages(chatId: string): Promise<ChatMessage[]> {\n try {\n const data = await this.apiRequest<ChatMessage[]>(`/api/chat/${chatId}/messages`);\n return Array.isArray(data) ? data : [];\n } catch (error: unknown) {\n if (error && typeof error === \"object\" && \"status\" in error && (error as { status: number }).status === 404) {\n return [];\n }\n throw error;\n }\n }\n\n async updateChat(chatId: string, data: { title?: string; isPinned?: boolean }): Promise<Chat> {\n return this.apiRequest<Chat>(`/api/chat/${chatId}`, {\n method: \"PATCH\",\n body: JSON.stringify(data),\n });\n }\n\n async deleteChat(chatId: string): Promise<void> {\n await this.apiRequest<void>(`/api/chat/${chatId}`, {\n method: \"DELETE\",\n });\n }\n\n createTransport() {\n const config = this.getConfig();\n const baseUrl = getBaseUrl(config);\n\n return new DefaultChatTransport({\n api: `${baseUrl}/api/chat`,\n credentials: \"include\",\n headers: () => {\n const currentConfig = this.getConfig();\n const h: Record<string, string> = {\n \"Myco-App-Key\": currentConfig.appKey,\n };\n if (currentConfig.workspaceId) {\n h[\"Myco-Workspace-Id\"] = currentConfig.workspaceId;\n }\n return h;\n },\n fetch: async (input, init) => {\n const response = await globalThis.fetch(input, init);\n\n if (typeof window === \"undefined\") return response;\n\n // Cache invalidation header\n const cacheHeader = response.headers.get(\"X-Cache-Invalidate\");\n if (cacheHeader) {\n try {\n const invalidations = JSON.parse(cacheHeader);\n window.dispatchEvent(\n new CustomEvent(\"cache-invalidate\", { detail: invalidations })\n );\n } catch {\n // ignore parse errors\n }\n }\n\n // Loaded skills header — absent header means no skills loaded\n const skillsHeader = response.headers.get(\"X-Loaded-Skills\");\n try {\n const skills = skillsHeader ? JSON.parse(skillsHeader) : [];\n window.dispatchEvent(\n new CustomEvent(\"skills-loaded\", { detail: skills })\n );\n } catch {\n // ignore parse errors\n }\n\n return response;\n },\n });\n }\n\n // ---------------------------------------------------------------------------\n // React Query hooks\n // ---------------------------------------------------------------------------\n\n useChats() {\n const queryClient = useQueryClient();\n\n const queryKey = [\"chats\"] as const;\n\n const queryResult = useQuery({\n queryKey,\n queryFn: () => this.getChats(),\n staleTime: 30_000,\n refetchOnWindowFocus: false,\n refetchOnReconnect: true,\n });\n\n // Auto-invalidate when cache-invalidate events fire for \"chats\"\n useEffect(() => {\n const handler = (e: Event) => {\n const events = (e as CustomEvent).detail as Array<{ resource: string }>;\n if (events?.some((ev) => ev.resource === \"chats\")) {\n queryClient.invalidateQueries({ queryKey });\n }\n };\n window.addEventListener(\"cache-invalidate\", handler);\n return () => window.removeEventListener(\"cache-invalidate\", handler);\n }, [queryClient]);\n\n const mutate = useCallback(\n (\n data:\n | Chat[]\n | ((current: Chat[] | undefined) => Chat[] | undefined),\n options?: { revalidate?: boolean }\n ) => {\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n if (options?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient]\n );\n\n return {\n chats: queryResult.data ?? [],\n isLoading: queryResult.isLoading,\n error: queryResult.error,\n mutate,\n };\n }\n\n useChat(chatId: string | null | undefined) {\n const queryClient = useQueryClient();\n\n const queryKey = chatId ? ([\"chat\", chatId] as const) : ([] as const);\n\n const queryResult = useQuery({\n queryKey,\n queryFn: () => this.getChat(chatId!),\n enabled: !!chatId,\n staleTime: 30_000,\n refetchOnWindowFocus: false,\n refetchOnReconnect: true,\n retry: (failureCount, error) => {\n if (error && typeof error === \"object\" && \"status\" in error && (error as { status: number }).status === 404) {\n return false;\n }\n return failureCount < 3;\n },\n });\n\n const mutate = useCallback(\n (\n data:\n | Chat\n | null\n | ((current: Chat | null | undefined) => Chat | null | undefined),\n options?: { revalidate?: boolean }\n ) => {\n if (!chatId) return;\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n if (options?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient, chatId]\n );\n\n return {\n chat: queryResult.data ?? null,\n isLoading: queryResult.isLoading,\n error: queryResult.error,\n mutate,\n };\n }\n\n private static emptyUIMessages: UIMessage[] = [];\n\n useChatMessages(chatId: string | null | undefined) {\n const queryClient = useQueryClient();\n\n const queryKey = chatId\n ? ([\"chatMessages\", chatId] as const)\n : ([] as const);\n\n const queryResult = useQuery({\n queryKey,\n queryFn: () => this.getChatMessages(chatId!),\n enabled: !!chatId,\n staleTime: 30_000,\n refetchOnWindowFocus: false,\n refetchOnReconnect: true,\n retry: (failureCount, error) => {\n if (error && typeof error === \"object\" && \"status\" in error && (error as { status: number }).status === 404) {\n return false;\n }\n return failureCount < 3;\n },\n });\n\n // Transform raw messages to UIMessage format\n const messages = useMemo<UIMessage[]>(\n () =>\n queryResult.data?.map((msg) => ({\n id: msg.id,\n parts: (msg.parts as UIMessage[\"parts\"]) || [],\n role: msg.role as \"user\" | \"assistant\" | \"system\",\n createdAt: new Date(msg.createdAt),\n experimental_attachments:\n (msg.attachments as Array<{\n url: string;\n contentType?: string;\n name?: string;\n }>) || [],\n metadata: msg.metadata,\n })) ?? [],\n [queryResult.data]\n );\n\n // Track whether we've already invalidated the chats list for this chat session\n const hasInvalidatedChatsRef = { current: false };\n\n // Sync streaming updates into React Query cache (replaces SWR mutate)\n const onChange = useCallback(\n (newMessages: UIMessage[]) => {\n if (!chatId) return;\n\n const cachedData = queryClient.getQueryData<ChatMessage[]>(queryKey);\n\n if (!cachedData) {\n // New chat — no cached messages yet. Invalidate chats list so sidebar updates.\n if (!hasInvalidatedChatsRef.current) {\n hasInvalidatedChatsRef.current = true;\n queryClient.invalidateQueries({ queryKey: [\"chats\"] });\n }\n return;\n }\n\n queryClient.setQueryData<ChatMessage[]>(queryKey, () => {\n const updatedCache = cachedData.map((cached) => {\n const updated = newMessages.find((m) => m.id === cached.id);\n if (updated) {\n return { ...cached, metadata: updated.metadata as Record<string, unknown> };\n }\n return cached;\n });\n\n // Add any new messages that aren't in cache\n const existingIds = new Set(updatedCache.map((m) => m.id));\n const messagesToAdd: ChatMessage[] = newMessages\n .filter((m) => !existingIds.has(m.id))\n .map((uiMsg) => {\n const textParts = (uiMsg.parts || []).filter(\n (p): p is { type: \"text\"; text: string } => p.type === \"text\"\n );\n const content = textParts.map((p) => p.text).join(\"\") || \"\";\n return {\n id: uiMsg.id,\n chatId,\n role: uiMsg.role,\n content,\n parts: uiMsg.parts || [],\n attachments:\n (uiMsg as UIMessage & { experimental_attachments?: unknown[] })\n .experimental_attachments || null,\n metadata: (uiMsg.metadata as Record<string, unknown>) || null,\n createdAt:\n (uiMsg as UIMessage & { createdAt?: Date }).createdAt instanceof Date\n ? (uiMsg as UIMessage & { createdAt: Date }).createdAt.toISOString()\n : new Date().toISOString(),\n completedAt: null,\n } as ChatMessage;\n });\n\n // Invalidate chats list when new messages appear (new chat created or updated)\n if (messagesToAdd.length > 0 && !hasInvalidatedChatsRef.current) {\n hasInvalidatedChatsRef.current = true;\n queryClient.invalidateQueries({ queryKey: [\"chats\"] });\n }\n\n return [...updatedCache, ...messagesToAdd];\n });\n },\n [queryClient, chatId]\n );\n\n const mutate = useCallback(\n (\n data:\n | ChatMessage[]\n | null\n | ((current: ChatMessage[] | null | undefined) => ChatMessage[] | null | undefined),\n options?: { revalidate?: boolean }\n ) => {\n if (!chatId) return;\n queryClient.setQueryData(\n queryKey,\n typeof data === \"function\"\n ? data(queryClient.getQueryData(queryKey))\n : data\n );\n if (options?.revalidate !== false) {\n queryClient.invalidateQueries({ queryKey });\n }\n },\n [queryClient, chatId]\n );\n\n return {\n messages: messages || ChatManager.emptyUIMessages,\n isLoading: queryResult.isLoading,\n error: queryResult.error,\n mutate,\n onChange,\n };\n }\n}\n\n","type AuthenticatedFetch = (path: string, options?: RequestInit) => Promise<Response>;\n\n/**\n * Files namespace — file uploads.\n */\nexport class FilesManager {\n constructor(private authenticatedFetch: AuthenticatedFetch) {}\n\n async upload(file: File): Promise<string> {\n const formData = new FormData();\n formData.append(\"file\", file);\n const response = await this.authenticatedFetch(\"/api/files/upload\", {\n method: \"POST\",\n body: formData,\n });\n if (!response.ok) {\n const errorData = (await response.json()) as { error?: string };\n throw new Error(errorData.error || \"Upload failed\");\n }\n const data = (await response.json()) as { url: string };\n return data.url;\n }\n}\n","import type { MycoSDKConfig } from \"./types\";\nimport { getBaseUrl } from \"./config\";\n\n/**\n * Custom error class for API errors.\n */\nexport class ApiError extends Error {\n constructor(\n public status: number,\n public body: string,\n public path: string\n ) {\n super(`API Error ${status} on ${path}: ${body}`);\n this.name = \"ApiError\";\n }\n}\n\n/**\n * Create an API request function bound to the given config.\n * Waits for the ready promise before making requests.\n *\n * @param getConfig - Function that returns the current SDK config\n * @param ready - Promise that resolves when SDK is initialized (workspace ready)\n */\nexport function createApiClient(\n getConfig: () => MycoSDKConfig,\n ready?: Promise<void>\n) {\n return async function apiRequest<T>(\n path: string,\n options: RequestInit = {}\n ): Promise<T> {\n await ready;\n\n const config = getConfig();\n const baseUrl = getBaseUrl(config);\n\n const headers = new Headers(options.headers);\n\n // Always set content type for JSON requests\n if (!headers.has(\"Content-Type\") && options.body) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n\n // Inject app key header\n headers.set(\"Myco-App-Key\", config.appKey);\n\n // Inject workspace ID if configured\n if (config.workspaceId) {\n headers.set(\"Myco-Workspace-Id\", config.workspaceId);\n }\n\n const response = await fetch(`${baseUrl}${path}`, {\n ...options,\n headers,\n credentials: \"include\",\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new ApiError(response.status, errorText, path);\n }\n\n // Handle empty responses\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType?.includes(\"application/json\")) {\n return undefined as T;\n }\n\n return response.json();\n };\n}\n","import { createContext } from \"react\";\nimport type { MycoSDK } from \"./index\";\n\nexport const MycoContext = createContext<MycoSDK<any> | null>(null);\n","import { useContext, type ReactNode } from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { getBaseUrl } from \"./config\";\nimport { AuthManager } from \"./auth/manager\";\nimport { WorkspaceManager } from \"./workspace/manager\";\nimport { DataManager } from \"./data/manager\";\nimport { ChatManager } from \"./chat/namespace\";\nimport { FilesManager } from \"./files\";\nimport { createApiClient } from \"./api-client\";\nimport type { MycoSDKConfig } from \"./types\";\nimport { AuthContext, type AuthContextValue } from \"./auth/context\";\nimport { MycoContext } from \"./context\";\n\n/**\n * Additional options for MycoSDK.\n */\nexport interface MycoSDKOptions {\n /** Base URL override (optional) */\n baseUrl?: string;\n /** If true, redirect to login when not authenticated (default: true) */\n redirectOnUnauth?: boolean;\n}\n\n/**\n * Myco SDK instance.\n *\n * @example\n * ```typescript\n * import { MycoSDK } from '@myco/sdk';\n * import type { EntityTypes } from './types/myco.generated';\n *\n * const myco = new MycoSDK<EntityTypes>(\"realestate\");\n *\n * // All API calls automatically wait for SDK to be ready\n * const records = await myco.data.getRecords('property');\n * ```\n */\nexport class MycoSDK<\n TEntities extends Record<string, unknown> = Record<string, unknown>,\n> {\n /** Promise that resolves when the SDK is fully initialized (workspace ready) */\n readonly ready: Promise<void>;\n /** Auth namespace - login, logout, session management */\n readonly auth: AuthManager;\n /** Workspace namespace - manage the current workspace */\n readonly workspace: WorkspaceManager;\n /** Data namespace - entity records CRUD */\n readonly data: DataManager<TEntities>;\n /** Chat namespace - chat CRUD, transport factory, React Query hooks */\n readonly chat: ChatManager;\n /** Files namespace — upload files */\n readonly files: FilesManager;\n /** Authenticated fetch — adds auth headers, waits for SDK ready, returns raw Response */\n readonly fetch: (path: string, options?: RequestInit) => Promise<Response>;\n /** React Query client — shared across the SDK and consumer app */\n readonly queryClient: QueryClient;\n\n constructor(appKey: string, options: MycoSDKOptions = {}) {\n const { redirectOnUnauth = true } = options;\n\n const initialConfig: MycoSDKConfig = {\n appKey,\n workspaceId: undefined,\n baseUrl: options.baseUrl,\n };\n\n let config = { ...initialConfig };\n const getConfig = () => config;\n const setWorkspaceId = (workspaceId: string) => {\n config = { ...config, workspaceId };\n };\n\n this.queryClient = new QueryClient();\n this.auth = new AuthManager(config);\n\n this.workspace = new WorkspaceManager(\n appKey,\n getConfig,\n setWorkspaceId,\n // An apiRequest that does NOT wait for `ready` (would deadlock).\n createApiClient(getConfig),\n this.auth,\n redirectOnUnauth,\n );\n\n // SDK-level ready is just the workspace's ready\n this.ready = this.workspace.ready;\n\n // apiRequest used by all other namespaces — waits for ready\n const apiRequest = createApiClient(getConfig, this.ready);\n\n this.data = new DataManager<TEntities>(apiRequest);\n this.chat = new ChatManager(apiRequest, getConfig);\n\n const ready = this.ready;\n async function authenticatedFetch(\n path: string,\n init: RequestInit = {},\n ): Promise<Response> {\n await ready;\n const config = getConfig();\n\n const headers = new Headers(init.headers);\n headers.set(\"Myco-App-Key\", config.appKey);\n if (config.workspaceId)\n headers.set(\"Myco-Workspace-Id\", config.workspaceId);\n\n return fetch(`${getBaseUrl(config)}${path}`, {\n ...init,\n headers,\n credentials: \"include\",\n });\n }\n\n this.files = new FilesManager(authenticatedFetch);\n this.fetch = authenticatedFetch;\n }\n}\n\n/**\n * Provider that wraps the Myco SDK for React components.\n * Must be placed near the root of your React app.\n *\n * @example\n * ```tsx\n * import { MycoProvider } from \"@myco-dev/sdk\";\n * import { myco } from \"./lib/myco\";\n *\n * function App() {\n * return (\n * <MycoProvider myco={myco}>\n * <YourRoutes />\n * </MycoProvider>\n * );\n * }\n * ```\n */\nexport function MycoProvider({\n myco,\n children,\n}: {\n myco: MycoSDK<any>;\n children: ReactNode;\n}) {\n const { data: session, isPending, refetch } = myco.auth.useSession();\n\n const value: AuthContextValue = {\n isLoading: isPending,\n isLoggedIn: !!session?.user,\n userId: session?.user?.id,\n user: session?.user,\n login: (returnTo) => myco.auth.login(returnTo),\n logout: () => myco.auth.logout(),\n refresh: refetch,\n };\n\n return (\n <QueryClientProvider client={myco.queryClient}>\n <MycoContext.Provider value={myco}>\n <AuthContext.Provider value={value}>{children}</AuthContext.Provider>\n </MycoContext.Provider>\n </QueryClientProvider>\n );\n}\n\n/**\n * Hook to access the Myco SDK instance.\n * Must be used within a MycoProvider.\n */\nexport function useMyco<\n T extends Record<string, unknown>\n>(): MycoSDK<T> {\n const context = useContext(MycoContext);\n if (!context) {\n throw new Error(\"useMyco must be used within a MycoProvider\");\n }\n return context as MycoSDK<T>;\n}\n\n/** @internal — will be fleshed out later. Always keep exported. */\nexport { useSubscription } from \"./use-subscription\";\n"],"mappings":";;;;;;;;;;;;;;AAMA,SAAgB,WAAW,QAA+B;AACxD,KAAI,OAAO,QACT,QAAO,OAAO;AAGhB,QAAO;;;;;AAMT,SAAgB,iBAAiB,QAA+B;AAC9D,KAAI,OAAO,QACT,QAAO,OAAO;AAGhB,QAAO;;;;;AChBT,MAAM,kBAAkB;;;;AAKxB,SAAS,eAAe,KAAa;AACnC,KAAI,OAAO,aAAa,YAAa;CACrC,MAAM,SAAS,OAAU,KAAK;AAC9B,UAAS,SAAS,GAAG,gBAAgB,GAAG,IAAI,oBAAoB,OAAO;;;;;AAMzE,SAAS,iBAAiB;AACxB,KAAI,OAAO,aAAa,YAAa;AACrC,UAAS,SAAS,GAAG,gBAAgB;;;;;AAMvC,SAAS,gBAAwB;AAC/B,KAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAO,OAAO,SAAS;;;;;AAMzB,MAAM,mBAA2C;CAC/C,IAAI;CACJ,cAAc,CACZ;EACE,IAAI;EACJ,MAAM;EACN,OAAO,EACL,YAAY,YAAY;GACtB,MAAM,MAAM,QAAQ,SAAS,QAAQ,IAAI,eAAe;AACxD,OAAI,IACF,gBAAe,IAAI;KAGxB;EACF,CACF;CACF;;;;AAKD,IAAa,cAAb,MAAyB;CACvB,AAAQ;CAER,YAAY,AAAQ,QAAuB;EAAvB;AAClB,OAAK,aAAa,iBAAiB;GACjC,SAAS,WAAW,OAAO;GAC3B,UAAU;GACV,cAAc,EACZ,aAAa,WACd;GACD,SAAS,CAAC,WAAW,EAAE,iBAAiB;GACzC,CAAC;;CAGJ,MAAM,UAAyB;AAC7B,MAAI,OAAO,WAAW,YAAa;EACnC,MAAM,gBAAgB,iBAAiB,KAAK,OAAO;EACnD,MAAM,YAAY,mBAAmB,YAAY,eAAe,CAAC;AACjE,SAAO,SAAS,OAAO,GAAG,cAAc,6BAA6B;;CAGvE,MAAM,SAAwB;AAC5B,QAAM,KAAK,WAAW,SAAS;AAC/B,kBAAgB;;CAGlB,aAA+B;EAC7B,MAAM,EAAE,MAAM,WAAW,OAAO,YAAY,KAAK,WAAW,YAAY;AACxE,SAAO;GACC;GACN;GACO;GACP;GACD;;CAGH,MAAM,aAA0C;EAC9C,MAAM,SAAS,MAAM,KAAK,WAAW,YAAY;AACjD,MAAI,OAAO,SAAS,CAAC,OAAO,KAAM,QAAO;AACzC,SAAO,OAAO;;;;;;AC1FlB,MAAM,wBAAwB;AAE9B,SAAS,iBAAiB,aAA2B;AACnD,KAAI,OAAO,iBAAiB,YAAa;AACzC,KAAI;AACF,eAAa,QAAQ,uBAAuB,YAAY;SAClD;;AAKV,SAAS,yBAA+B;AACtC,KAAI,OAAO,iBAAiB,YAAa;AACzC,KAAI;AACF,eAAa,WAAW,sBAAsB;SACxC;;;;;AAcV,IAAa,0BAAb,MAAqC;CACnC,YACE,AAAQ,oBACR,AAAQ,YACR;EAFQ;EACA;;CAGV,MAAM,MAAkC;EACtC,MAAM,KAAK,KAAK,oBAAoB;AACpC,SAAO,KAAK,WAA8B,mBAAmB,GAAG,UAAU;;CAG5E,MAAM,IAAI,QAAgB,OAA2B,UAAoC;EACvF,MAAM,KAAK,KAAK,oBAAoB;AACpC,SAAO,KAAK,WAA4B,mBAAmB,GAAG,WAAW;GACvE,QAAQ;GACR,MAAM,KAAK,UAAU;IAAE;IAAQ;IAAM,CAAC;GACvC,CAAC;;CAGJ,MAAM,OAAO,QAA+B;EAC1C,MAAM,KAAK,KAAK,oBAAoB;AACpC,QAAM,KAAK,WAAiB,mBAAmB,GAAG,WAAW,UAAU,EACrE,QAAQ,UACT,CAAC;;;;;;AAON,IAAa,mBAAb,MAA8B;CAC5B,AAAS;CACT,AAAS;CAET,AAAQ;CACR,AAAQ;CAER,YACE,AAAQ,QACR,AAAQ,WACR,AAAQ,gBACR,AAAQ,YACR,AAAQ,MACR,AAAQ,kBACR;EANQ;EACA;EACA;EACA;EACA;EACA;AAER,OAAK,QAAQ,IAAI,SAAe,SAAS,WAAW;AAClD,QAAK,eAAe;AACpB,QAAK,cAAc;IACnB;AAEF,OAAK,UAAU,IAAI,8BAA8B,KAAK,oBAAoB,EAAE,WAAW;AACvF,OAAK,MAAM;;CAGb,AAAQ,qBAA6B;EACnC,MAAM,KAAK,KAAK,WAAW,CAAC;AAC5B,MAAI,CAAC,GAAI,OAAM,IAAI,MAAM,2BAA2B;AACpD,SAAO;;CAGT,MAAc,OAAsB;AAClC,MAAI;AACF,SAAM,KAAK,QAAQ;AACnB,QAAK,cAAc;WACZ,OAAO;AACd,OAAI,iBAAiB,SAAS,MAAM,YAAY,mBAAmB;AACjE,QAAI,KAAK,kBAAkB;AACzB,UAAK,KAAK,OAAO;AAEjB;;AAGF,SAAK,cAAc;AACnB;;AAEF,QAAK,YAAY,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC,CAAC;;;CAI/E,MAAc,UAAiC;EAC7C,MAAM,UAAU,WAAW,KAAK,WAAW,CAAC;EAC5C,MAAM,WAAW,MAAM,MAAM,GAAG,QAAQ,gBAAgB;GACtD,QAAQ;GACR,SAAS;IACP,gBAAgB;IAChB,gBAAgB,KAAK;IACtB;GACD,aAAa;GACd,CAAC;AAEF,MAAI,SAAS,WAAW,IACtB,OAAM,IAAI,MAAM,kBAAkB;AAGpC,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,gBAAgB,SAAS,SAAS;AAGpD,SAAO,SAAS,MAAM;;CAGxB,MAAc,SAAwB;AACpC,MAAI;GACF,MAAM,WAAW,MAAM,KAAK,SAAS;AACrC,OAAI,SAAS,WAAW,SAAS,aAAa;AAC5C,SAAK,eAAe,SAAS,YAAY;AACzC,qBAAiB,SAAS,YAAY;;WAEjC,OAAO;AACd,2BAAwB;AACxB,SAAM;;;CAQV,MAAM,OAA6B;AACjC,SAAO,KAAK,WAAwB,kBAAkB;;CAGxD,MAAM,UAA8B;AAClC,SAAO,KAAK,WAAsB,mBAAmB,KAAK,oBAAoB,GAAG;;CAGnF,OAAO,aAA2B;AAChC,OAAK,eAAe,YAAY;AAChC,mBAAiB,YAAY;;CAG/B,MAAM,OAAO,MAA6C;AACxD,SAAO,KAAK,WAAsB,mBAAmB,KAAK,oBAAoB,IAAI;GAChF,QAAQ;GACR,MAAM,KAAK,UAAU,KAAK;GAC3B,CAAC;;CAGJ,eAAmC;EACjC,MAAM,cAAc,SAAoB;GACtC,UAAU;IAAC;IAAQ;IAAa;IAAU;GAC1C,eAAe,KAAK,SAAS;GAC9B,CAAC;AAEF,SAAO;GACL,MAAM,YAAY,QAAQ;GAC1B,WAAW,YAAY;GACvB,OAAO,YAAY;GACpB;;;;;;;;;ACxKL,SAAS,gBAAmB,KAAmC;CAC7D,MAAM,SAAS,IAAI;AACnB,QAAO,MAAM,IAAI;AACjB,QAAO,aAAa,IAAI;AACxB,QAAO,aAAa,IAAI;AACxB,QAAO;;;;;AAuDT,IAAa,cAAb,MAAoE;CAClE,YAAY,AAAQ,YAAwB;EAAxB;;CAEpB,MAAM,cAAiC;AACrC,SAAO,KAAK,WAAqB,gBAAgB;;CAGnD,MAAM,UAA8C,YAAgC;AAClF,SAAO,KAAK,WAAmB,iBAAiB,aAAa;;CAG/D,MAAM,WACJ,YACA,SACuD;EACvD,MAAM,SAAS,IAAI,iBAAiB;AAEpC,MAAI,SAAS,SAAS,OACpB,QAAO,IAAI,QAAQ,OAAO,QAAQ,KAAK,CAAC;AAE1C,MAAI,SAAS,aAAa,OACxB,QAAO,IAAI,YAAY,OAAO,QAAQ,SAAS,CAAC;AAElD,MAAI,SAAS,KACX,QAAO,IAAI,QAAQ,QAAQ,KAAK;AAElC,MAAI,SAAS,MACX,QAAO,IAAI,SAAS,QAAQ,MAAM;AAEpC,MAAI,SAAS,OACX,QAAO,IAAI,UAAU,KAAK,UAAU,QAAQ,OAAO,CAAC;EAGtD,MAAM,cAAc,OAAO,UAAU;EACrC,MAAM,OAAO,iBAAiB,WAAW,UAAU,cAAc,IAAI,gBAAgB;EAErF,MAAM,WAAW,MAAM,KAAK,WAA4C,KAAK;AAC7E,SAAO;GACL,GAAG;GACH,SAAS,SAAS,QAAQ,IAA+B,gBAAgB;GAC1E;;CAGH,MAAM,UACJ,YACA,UACoC;AAEpC,SAAO,iBADU,MAAM,KAAK,WAAqC,iBAAiB,WAAW,WAAW,WAAW,EACrE,OAAO;;CAGvD,MAAM,aACJ,YACA,MACoC;AAKpC,SAAO,iBAJU,MAAM,KAAK,WAAqC,iBAAiB,WAAW,WAAW;GACtG,QAAQ;GACR,MAAM,KAAK,UAAU,EAAE,MAAM,CAAC;GAC/B,CAAC,EAC4C,OAAO;;CAGvD,MAAM,aACJ,YACA,UACA,MACoC;AAKpC,SAAO,iBAJU,MAAM,KAAK,WAAqC,iBAAiB,WAAW,WAAW,YAAY;GAClH,QAAQ;GACR,MAAM,KAAK,UAAU,EAAE,MAAM,CAAC;GAC/B,CAAC,EAC4C,OAAO;;CAGvD,MAAM,aACJ,YACA,UACe;AACf,QAAM,KAAK,WAAiB,iBAAiB,WAAW,WAAW,YAAY,EAC7E,QAAQ,UACT,CAAC;;CAGJ,MAAM,gBACJ,YACA,KACsC;AAQtC,UAPiB,MAAM,KAAK,WAC1B,iBAAiB,WAAW,iBAC5B;GACE,QAAQ;GACR,MAAM,KAAK,UAAU,EAAE,KAAK,CAAC;GAC9B,CACF,EACe,QAAQ,IAA+B,gBAAgB;;CAGzE,WACE,YACA,SAC6C;EAC7C,MAAM,cAAc,gBAAgB;EACpC,MAAM,EAAE,cAAc,GAAG,cAAc,GAAG,iBAAiB,WAAW,EAAE;EACxE,MAAM,CAAC,MAAM,gBAAgB,SAAS,YAAY;EAClD,MAAM,CAAC,aAAa,kBAAkB,SAAS,MAAM;EAErD,MAAM,UAAU,aACb,YAAoB;AACnB,OAAI,UAAU,EAAG;AACjB,gBAAa,QAAQ;AACrB,kBAAe,QAAQ;KAEzB,CAAC,aAAa,CACf;EAED,MAAM,WAAW,kBAAkB;AACjC,OAAI,YACF,SAAQ,OAAO,EAAE;KAElB;GAAC;GAAa;GAAM;GAAQ,CAAC;EAEhC,MAAM,eAAe,kBAAkB;AACrC,OAAI,OAAO,EACT,SAAQ,OAAO,EAAE;KAElB,CAAC,MAAM,QAAQ,CAAC;EAGnB,MAAM,WAAW,aACZ;GAAC;GAAW;GAAY;GAAM;GAAa,GAC5C,EAAE;EAEN,MAAM,cAAc,SAAS;GAC3B;GACA,SAAS,YAAY;IACnB,MAAM,WAAW,MAAM,KAAK,WAAW,YAAa;KAAE,GAAG;KAAc;KAAM,CAAC;AAC9E,mBAAe,SAAS,WAAW,QAAQ;AAC3C,WAAO,SAAS;;GAElB,SAAS,CAAC,CAAC;GACZ,CAAC;EAGF,MAAM,SAAS,aAEX,MAGA,kBACG;AACH,OAAI,CAAC,WAAY;AAEjB,eAAY,aACV,UACA,OAAO,SAAS,aACZ,KAAK,YAAY,aAAa,SAAS,CAAC,GACxC,KACL;AAED,OAAI,eAAe,eAAe,MAChC,aAAY,kBAAkB,EAAE,UAAU,CAAC;KAG/C;GAAC;GAAa;GAAU;GAAW,CACpC;EAGD,MAAM,mBAAmB,YACvB,OACE,gBAGA,aACe;AACf,OAAI,CAAC,WAAY,OAAM,IAAI,MAAM,mCAAmC;GAEpE,MAAM,eAAe,YAAY,aAA0C,SAAS;AAEpF,OAAI;AAEF,WAAO,gBAAgB,EAAE,YAAY,OAAO,CAAC;AAI7C,WADe,MAAM,UAAU;YAExB,OAAO;AAEd,gBAAY,aAAa,UAAU,aAAa;AAChD,UAAM;;KAGV;GAAC;GAAa;GAAU;GAAY;GAAO,CAC5C;AAED,SAAO;GACL,MAAM,YAAY;GAClB,QAAQ,YAAY;GACpB,YAAY,YAAY;GACxB,OAAO,YAAY;GACnB;GACA;GACA,iBAAiB,OAAO;GACxB;GACA;GACA;GACA;GACA;GACD;;CAGH,UACE,YACA,UAC4C;EAC5C,MAAM,cAAc,gBAAgB;EAEpC,MAAM,WACJ,cAAc,WAAY;GAAC;GAAU;GAAY;GAAS,GAAa,EAAE;EAE3E,MAAM,cAAc,SAAS;GAC3B;GACA,eAAe,KAAK,UAAU,YAAa,SAAU;GACrD,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC;GAC5B,CAAC;EAEF,MAAM,SAAS,aAEX,MAGA,kBACG;AACH,OAAI,CAAC,cAAc,CAAC,SAAU;AAE9B,eAAY,aACV,UACA,OAAO,SAAS,aACZ,KAAK,YAAY,aAAa,SAAS,CAAC,GACxC,KACL;AAED,OAAI,eAAe,eAAe,MAChC,aAAY,kBAAkB,EAAE,UAAU,CAAC;KAG/C;GAAC;GAAa;GAAU;GAAY;GAAS,CAC9C;EAED,MAAM,mBAAmB,YACvB,OACE,gBAGA,aACe;AACf,OAAI,CAAC,cAAc,CAAC,SAAU,OAAM,IAAI,MAAM,gDAAgD;GAE9F,MAAM,eAAe,YAAY,aAAwC,SAAS;AAElF,OAAI;AACF,WAAO,gBAAgB,EAAE,YAAY,OAAO,CAAC;AAE7C,WADe,MAAM,UAAU;YAExB,OAAO;AACd,gBAAY,aAAa,UAAU,aAAa;AAChD,UAAM;;KAGV;GAAC;GAAa;GAAU;GAAY;GAAU;GAAO,CACtD;AAED,SAAO;GACL,MAAM,YAAY;GAClB,QAAQ,YAAY;GACpB,YAAY,YAAY;GACxB,OAAO,YAAY;GACnB;GACA;GACD;;;;;;;;;ACrVL,IAAa,cAAb,MAAa,YAAY;CACvB,YACE,AAAQ,YACR,AAAQ,WACR;EAFQ;EACA;;CAGV,MAAM,WAA4B;EAChC,MAAM,OAAO,MAAM,KAAK,WAAmB,iBAAiB;AAC5D,SAAO,MAAM,QAAQ,KAAK,GAAG,OAAO,EAAE;;CAGxC,MAAM,QAAQ,QAAsC;AAClD,MAAI;AACF,UAAO,MAAM,KAAK,WAAiB,aAAa,SAAS;WAClD,OAAgB;AACvB,OAAI,SAAS,OAAO,UAAU,YAAY,YAAY,SAAU,MAA6B,WAAW,IACtG,QAAO;AAET,SAAM;;;CAIV,MAAM,gBAAgB,QAAwC;AAC5D,MAAI;GACF,MAAM,OAAO,MAAM,KAAK,WAA0B,aAAa,OAAO,WAAW;AACjF,UAAO,MAAM,QAAQ,KAAK,GAAG,OAAO,EAAE;WAC/B,OAAgB;AACvB,OAAI,SAAS,OAAO,UAAU,YAAY,YAAY,SAAU,MAA6B,WAAW,IACtG,QAAO,EAAE;AAEX,SAAM;;;CAIV,MAAM,WAAW,QAAgB,MAA6D;AAC5F,SAAO,KAAK,WAAiB,aAAa,UAAU;GAClD,QAAQ;GACR,MAAM,KAAK,UAAU,KAAK;GAC3B,CAAC;;CAGJ,MAAM,WAAW,QAA+B;AAC9C,QAAM,KAAK,WAAiB,aAAa,UAAU,EACjD,QAAQ,UACT,CAAC;;CAGJ,kBAAkB;AAIhB,SAAO,IAAI,qBAAqB;GAC9B,KAAK,GAHS,WADD,KAAK,WAAW,CACG,CAGhB;GAChB,aAAa;GACb,eAAe;IACb,MAAM,gBAAgB,KAAK,WAAW;IACtC,MAAM,IAA4B,EAChC,gBAAgB,cAAc,QAC/B;AACD,QAAI,cAAc,YAChB,GAAE,uBAAuB,cAAc;AAEzC,WAAO;;GAET,OAAO,OAAO,OAAO,SAAS;IAC5B,MAAM,WAAW,MAAM,WAAW,MAAM,OAAO,KAAK;AAEpD,QAAI,OAAO,WAAW,YAAa,QAAO;IAG1C,MAAM,cAAc,SAAS,QAAQ,IAAI,qBAAqB;AAC9D,QAAI,YACF,KAAI;KACF,MAAM,gBAAgB,KAAK,MAAM,YAAY;AAC7C,YAAO,cACL,IAAI,YAAY,oBAAoB,EAAE,QAAQ,eAAe,CAAC,CAC/D;YACK;IAMV,MAAM,eAAe,SAAS,QAAQ,IAAI,kBAAkB;AAC5D,QAAI;KACF,MAAM,SAAS,eAAe,KAAK,MAAM,aAAa,GAAG,EAAE;AAC3D,YAAO,cACL,IAAI,YAAY,iBAAiB,EAAE,QAAQ,QAAQ,CAAC,CACrD;YACK;AAIR,WAAO;;GAEV,CAAC;;CAOJ,WAAW;EACT,MAAM,cAAc,gBAAgB;EAEpC,MAAM,WAAW,CAAC,QAAQ;EAE1B,MAAM,cAAc,SAAS;GAC3B;GACA,eAAe,KAAK,UAAU;GAC9B,WAAW;GACX,sBAAsB;GACtB,oBAAoB;GACrB,CAAC;AAGF,kBAAgB;GACd,MAAM,WAAW,MAAa;AAE5B,QADgB,EAAkB,QACtB,MAAM,OAAO,GAAG,aAAa,QAAQ,CAC/C,aAAY,kBAAkB,EAAE,UAAU,CAAC;;AAG/C,UAAO,iBAAiB,oBAAoB,QAAQ;AACpD,gBAAa,OAAO,oBAAoB,oBAAoB,QAAQ;KACnE,CAAC,YAAY,CAAC;EAEjB,MAAM,SAAS,aAEX,MAGA,YACG;AACH,eAAY,aACV,UACA,OAAO,SAAS,aACZ,KAAK,YAAY,aAAa,SAAS,CAAC,GACxC,KACL;AACD,OAAI,SAAS,eAAe,MAC1B,aAAY,kBAAkB,EAAE,UAAU,CAAC;KAG/C,CAAC,YAAY,CACd;AAED,SAAO;GACL,OAAO,YAAY,QAAQ,EAAE;GAC7B,WAAW,YAAY;GACvB,OAAO,YAAY;GACnB;GACD;;CAGH,QAAQ,QAAmC;EACzC,MAAM,cAAc,gBAAgB;EAEpC,MAAM,WAAW,SAAU,CAAC,QAAQ,OAAO,GAAc,EAAE;EAE3D,MAAM,cAAc,SAAS;GAC3B;GACA,eAAe,KAAK,QAAQ,OAAQ;GACpC,SAAS,CAAC,CAAC;GACX,WAAW;GACX,sBAAsB;GACtB,oBAAoB;GACpB,QAAQ,cAAc,UAAU;AAC9B,QAAI,SAAS,OAAO,UAAU,YAAY,YAAY,SAAU,MAA6B,WAAW,IACtG,QAAO;AAET,WAAO,eAAe;;GAEzB,CAAC;EAEF,MAAM,SAAS,aAEX,MAIA,YACG;AACH,OAAI,CAAC,OAAQ;AACb,eAAY,aACV,UACA,OAAO,SAAS,aACZ,KAAK,YAAY,aAAa,SAAS,CAAC,GACxC,KACL;AACD,OAAI,SAAS,eAAe,MAC1B,aAAY,kBAAkB,EAAE,UAAU,CAAC;KAG/C,CAAC,aAAa,OAAO,CACtB;AAED,SAAO;GACL,MAAM,YAAY,QAAQ;GAC1B,WAAW,YAAY;GACvB,OAAO,YAAY;GACnB;GACD;;CAGH,OAAe,kBAA+B,EAAE;CAEhD,gBAAgB,QAAmC;EACjD,MAAM,cAAc,gBAAgB;EAEpC,MAAM,WAAW,SACZ,CAAC,gBAAgB,OAAO,GACxB,EAAE;EAEP,MAAM,cAAc,SAAS;GAC3B;GACA,eAAe,KAAK,gBAAgB,OAAQ;GAC5C,SAAS,CAAC,CAAC;GACX,WAAW;GACX,sBAAsB;GACtB,oBAAoB;GACpB,QAAQ,cAAc,UAAU;AAC9B,QAAI,SAAS,OAAO,UAAU,YAAY,YAAY,SAAU,MAA6B,WAAW,IACtG,QAAO;AAET,WAAO,eAAe;;GAEzB,CAAC;EAGF,MAAM,WAAW,cAEb,YAAY,MAAM,KAAK,SAAS;GAC9B,IAAI,IAAI;GACR,OAAQ,IAAI,SAAgC,EAAE;GAC9C,MAAM,IAAI;GACV,WAAW,IAAI,KAAK,IAAI,UAAU;GAClC,0BACG,IAAI,eAIE,EAAE;GACX,UAAU,IAAI;GACf,EAAE,IAAI,EAAE,EACX,CAAC,YAAY,KAAK,CACnB;EAGD,MAAM,yBAAyB,EAAE,SAAS,OAAO;EAGjD,MAAM,WAAW,aACd,gBAA6B;AAC5B,OAAI,CAAC,OAAQ;GAEb,MAAM,aAAa,YAAY,aAA4B,SAAS;AAEpE,OAAI,CAAC,YAAY;AAEf,QAAI,CAAC,uBAAuB,SAAS;AACnC,4BAAuB,UAAU;AACjC,iBAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;;AAExD;;AAGF,eAAY,aAA4B,gBAAgB;IACtD,MAAM,eAAe,WAAW,KAAK,WAAW;KAC9C,MAAM,UAAU,YAAY,MAAM,MAAM,EAAE,OAAO,OAAO,GAAG;AAC3D,SAAI,QACF,QAAO;MAAE,GAAG;MAAQ,UAAU,QAAQ;MAAqC;AAE7E,YAAO;MACP;IAGF,MAAM,cAAc,IAAI,IAAI,aAAa,KAAK,MAAM,EAAE,GAAG,CAAC;IAC1D,MAAM,gBAA+B,YAClC,QAAQ,MAAM,CAAC,YAAY,IAAI,EAAE,GAAG,CAAC,CACrC,KAAK,UAAU;KAId,MAAM,WAHa,MAAM,SAAS,EAAE,EAAE,QACnC,MAA2C,EAAE,SAAS,OACxD,CACyB,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI;AACzD,YAAO;MACL,IAAI,MAAM;MACV;MACA,MAAM,MAAM;MACZ;MACA,OAAO,MAAM,SAAS,EAAE;MACxB,aACG,MACE,4BAA4B;MACjC,UAAW,MAAM,YAAwC;MACzD,WACG,MAA2C,qBAAqB,OAC5D,MAA0C,UAAU,aAAa,oBAClE,IAAI,MAAM,EAAC,aAAa;MAC9B,aAAa;MACd;MACD;AAGJ,QAAI,cAAc,SAAS,KAAK,CAAC,uBAAuB,SAAS;AAC/D,4BAAuB,UAAU;AACjC,iBAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;;AAGxD,WAAO,CAAC,GAAG,cAAc,GAAG,cAAc;KAC1C;KAEJ,CAAC,aAAa,OAAO,CACtB;EAED,MAAM,SAAS,aAEX,MAIA,YACG;AACH,OAAI,CAAC,OAAQ;AACb,eAAY,aACV,UACA,OAAO,SAAS,aACZ,KAAK,YAAY,aAAa,SAAS,CAAC,GACxC,KACL;AACD,OAAI,SAAS,eAAe,MAC1B,aAAY,kBAAkB,EAAE,UAAU,CAAC;KAG/C,CAAC,aAAa,OAAO,CACtB;AAED,SAAO;GACL,UAAU,YAAY,YAAY;GAClC,WAAW,YAAY;GACvB,OAAO,YAAY;GACnB;GACA;GACD;;;;;;;;;AC9VL,IAAa,eAAb,MAA0B;CACxB,YAAY,AAAQ,oBAAwC;EAAxC;;CAEpB,MAAM,OAAO,MAA6B;EACxC,MAAM,WAAW,IAAI,UAAU;AAC/B,WAAS,OAAO,QAAQ,KAAK;EAC7B,MAAM,WAAW,MAAM,KAAK,mBAAmB,qBAAqB;GAClE,QAAQ;GACR,MAAM;GACP,CAAC;AACF,MAAI,CAAC,SAAS,IAAI;GAChB,MAAM,YAAa,MAAM,SAAS,MAAM;AACxC,SAAM,IAAI,MAAM,UAAU,SAAS,gBAAgB;;AAGrD,UADc,MAAM,SAAS,MAAM,EACvB;;;;;;;;;ACdhB,IAAa,WAAb,cAA8B,MAAM;CAClC,YACE,AAAO,QACP,AAAO,MACP,AAAO,MACP;AACA,QAAM,aAAa,OAAO,MAAM,KAAK,IAAI,OAAO;EAJzC;EACA;EACA;AAGP,OAAK,OAAO;;;;;;;;;;AAWhB,SAAgB,gBACd,WACA,OACA;AACA,QAAO,eAAe,WACpB,MACA,UAAuB,EAAE,EACb;AACZ,QAAM;EAEN,MAAM,SAAS,WAAW;EAC1B,MAAM,UAAU,WAAW,OAAO;EAElC,MAAM,UAAU,IAAI,QAAQ,QAAQ,QAAQ;AAG5C,MAAI,CAAC,QAAQ,IAAI,eAAe,IAAI,QAAQ,KAC1C,SAAQ,IAAI,gBAAgB,mBAAmB;AAIjD,UAAQ,IAAI,gBAAgB,OAAO,OAAO;AAG1C,MAAI,OAAO,YACT,SAAQ,IAAI,qBAAqB,OAAO,YAAY;EAGtD,MAAM,WAAW,MAAM,MAAM,GAAG,UAAU,QAAQ;GAChD,GAAG;GACH;GACA,aAAa;GACd,CAAC;AAEF,MAAI,CAAC,SAAS,IAAI;GAChB,MAAM,YAAY,MAAM,SAAS,MAAM;AACvC,SAAM,IAAI,SAAS,SAAS,QAAQ,WAAW,KAAK;;AAKtD,MAAI,CADgB,SAAS,QAAQ,IAAI,eAAe,EACtC,SAAS,mBAAmB,CAC5C;AAGF,SAAO,SAAS,MAAM;;;;;;AClE1B,MAAa,cAAc,cAAmC,KAAK;;;;;;;;;;;;;;;;;;ACkCnE,IAAa,UAAb,MAEE;;CAEA,AAAS;;CAET,AAAS;;CAET,AAAS;;CAET,AAAS;;CAET,AAAS;;CAET,AAAS;;CAET,AAAS;;CAET,AAAS;CAET,YAAY,QAAgB,UAA0B,EAAE,EAAE;EACxD,MAAM,EAAE,mBAAmB,SAAS;EAQpC,IAAI,SAAS;GALX;GACA,aAAa;GACb,SAAS,QAAQ;GAGc;EACjC,MAAM,kBAAkB;EACxB,MAAM,kBAAkB,gBAAwB;AAC9C,YAAS;IAAE,GAAG;IAAQ;IAAa;;AAGrC,OAAK,cAAc,IAAI,aAAa;AACpC,OAAK,OAAO,IAAI,YAAY,OAAO;AAEnC,OAAK,YAAY,IAAI,iBACnB,QACA,WACA,gBAEA,gBAAgB,UAAU,EAC1B,KAAK,MACL,iBACD;AAGD,OAAK,QAAQ,KAAK,UAAU;EAG5B,MAAM,aAAa,gBAAgB,WAAW,KAAK,MAAM;AAEzD,OAAK,OAAO,IAAI,YAAuB,WAAW;AAClD,OAAK,OAAO,IAAI,YAAY,YAAY,UAAU;EAElD,MAAM,QAAQ,KAAK;EACnB,eAAe,mBACb,MACA,OAAoB,EAAE,EACH;AACnB,SAAM;GACN,MAAM,SAAS,WAAW;GAE1B,MAAM,UAAU,IAAI,QAAQ,KAAK,QAAQ;AACzC,WAAQ,IAAI,gBAAgB,OAAO,OAAO;AAC1C,OAAI,OAAO,YACT,SAAQ,IAAI,qBAAqB,OAAO,YAAY;AAEtD,UAAO,MAAM,GAAG,WAAW,OAAO,GAAG,QAAQ;IAC3C,GAAG;IACH;IACA,aAAa;IACd,CAAC;;AAGJ,OAAK,QAAQ,IAAI,aAAa,mBAAmB;AACjD,OAAK,QAAQ;;;;;;;;;;;;;;;;;;;;;AAsBjB,SAAgB,aAAa,EAC3B,MACA,YAIC;CACD,MAAM,EAAE,MAAM,SAAS,WAAW,YAAY,KAAK,KAAK,YAAY;CAEpE,MAAM,QAA0B;EAC9B,WAAW;EACX,YAAY,CAAC,CAAC,SAAS;EACvB,QAAQ,SAAS,MAAM;EACvB,MAAM,SAAS;EACf,QAAQ,aAAa,KAAK,KAAK,MAAM,SAAS;EAC9C,cAAc,KAAK,KAAK,QAAQ;EAChC,SAAS;EACV;AAED,QACE,oBAAC;EAAoB,QAAQ,KAAK;YAChC,oBAAC,YAAY;GAAS,OAAO;aAC3B,oBAAC,YAAY;IAAgB;IAAQ;KAAgC;IAChD;GACH;;;;;;AAQ1B,SAAgB,UAEA;CACd,MAAM,UAAU,WAAW,YAAY;AACvC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,6CAA6C;AAE/D,QAAO"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as PaginatedResponse, i as GetRecordsOptions, l as RecordEntry, t as Entity } from "./types-
|
|
1
|
+
import { c as PaginatedResponse, i as GetRecordsOptions, l as RecordEntry, t as Entity } from "./types-pNWKJX38.js";
|
|
2
2
|
|
|
3
3
|
//#region src/data/manager.d.ts
|
|
4
4
|
type ApiRequest = <T>(path: string, options?: RequestInit) => Promise<T>;
|
|
@@ -51,4 +51,4 @@ declare class DataManager<TEntities extends Record<string, unknown>> {
|
|
|
51
51
|
}
|
|
52
52
|
//#endregion
|
|
53
53
|
export { UseRecordsResult as i, UseRecordResult as n, UseRecordsOptions as r, DataManager as t };
|
|
54
|
-
//# sourceMappingURL=manager-
|
|
54
|
+
//# sourceMappingURL=manager-CUSXPgeG.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager-
|
|
1
|
+
{"version":3,"file":"manager-CUSXPgeG.d.ts","names":[],"sources":["../src/data/manager.ts"],"mappings":";;;KAUK,UAAA,OAAiB,IAAA,UAAc,OAAA,GAAU,WAAA,KAAgB,OAAA,CAAQ,CAAA;AAAA,UAarD,iBAAA,SAA0B,IAAA,CAAK,iBAAA;EAC9C,WAAA;EACA,YAAA,IAAgB,IAAA;AAAA;AAAA,UAGD,gBAAA;EACf,IAAA,EAAM,CAAA;EACN,MAAA;EACA,UAAA;EACA,KAAA,EAAO,KAAA;EAGP,IAAA;EACA,WAAA;EACA,eAAA;EACA,QAAA;EACA,YAAA;EACA,OAAA,GAAU,IAAA;EAGV,MAAA,GACE,IAAA,EAAM,CAAA,OAAQ,OAAA,EAAS,CAAA,mBAAoB,CAAA,iBAC3C,OAAA;IAAY,UAAA;EAAA;EAId,gBAAA,MACE,cAAA,EAAgB,CAAA,OAAQ,OAAA,EAAS,CAAA,mBAAoB,CAAA,KACrD,QAAA,QAAgB,OAAA,CAAQ,CAAA,MACrB,OAAA,CAAQ,CAAA;AAAA;AAAA,UAGE,eAAA;EACf,IAAA,EAAM,CAAA;EACN,MAAA;EACA,UAAA;EACA,KAAA,EAAO,KAAA;EAEP,MAAA,GACE,IAAA,EAAM,CAAA,KAAM,OAAA,EAAS,CAAA,iBAAkB,CAAA,eACvC,OAAA;IAAY,UAAA;EAAA;EAGd,gBAAA,MACE,cAAA,EAAgB,CAAA,KAAM,OAAA,EAAS,CAAA,iBAAkB,CAAA,GACjD,QAAA,QAAgB,OAAA,CAAQ,CAAA,MACrB,OAAA,CAAQ,CAAA;AAAA;;;;cAMF,WAAA,mBAA8B,MAAA;EAAA,QACrB,UAAA;cAAA,UAAA,EAAY,UAAA;EAE1B,WAAA,CAAA,GAAe,OAAA,CAAQ,MAAA;EAIvB,SAAA,iBAA0B,SAAA,UAAA,CAAoB,UAAA,EAAY,CAAA,GAAI,OAAA,CAAQ,MAAA;EAItE,UAAA,iBAA2B,SAAA,UAAA,CAC/B,UAAA,EAAY,CAAA,EACZ,OAAA,GAAU,iBAAA,GACT,OAAA,CAAQ,iBAAA,CAAkB,WAAA,CAAY,SAAA,CAAU,CAAA;EA6B7C,SAAA,iBAA0B,SAAA,UAAA,CAC9B,UAAA,EAAY,CAAA,EACZ,QAAA,WACC,OAAA,CAAQ,WAAA,CAAY,SAAA,CAAU,CAAA;EAK3B,YAAA,iBAA6B,SAAA,UAAA,CACjC,UAAA,EAAY,CAAA,EACZ,IAAA,EAAM,SAAA,CAAU,CAAA,IACf,OAAA,CAAQ,WAAA,CAAY,SAAA,CAAU,CAAA;EAQ3B,YAAA,iBAA6B,SAAA,UAAA,CACjC,UAAA,EAAY,CAAA,EACZ,QAAA,UACA,IAAA,EAAM,OAAA,CAAQ,SAAA,CAAU,CAAA,KACvB,OAAA,CAAQ,WAAA,CAAY,SAAA,CAAU,CAAA;EAQ3B,YAAA,iBAA6B,SAAA,UAAA,CACjC,UAAA,EAAY,CAAA,EACZ,QAAA,WACC,OAAA;EAMG,eAAA,iBAAgC,SAAA,UAAA,CACpC,UAAA,EAAY,CAAA,EACZ,GAAA,aACC,OAAA,CAAQ,WAAA,CAAY,SAAA,CAAU,CAAA;EAWjC,UAAA,iBAA2B,SAAA,UAAA,CACzB,UAAA,EAAY,CAAA,qBACZ,OAAA,GAAU,iBAAA,GACT,gBAAA,CAAiB,WAAA,CAAY,SAAA,CAAU,CAAA;EA8G1C,SAAA,iBAA0B,SAAA,UAAA,CACxB,UAAA,EAAY,CAAA,qBACZ,QAAA,8BACC,eAAA,CAAgB,WAAA,CAAY,SAAA,CAAU,CAAA;AAAA"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as PaginatedResponse, f as VerifiedUser, i as GetRecordsOptions, m as WorkspaceMember, p as Workspace, r as EntityRecord, t as Entity, u as ServerEnv } from "./types-
|
|
1
|
+
import { c as PaginatedResponse, f as VerifiedUser, i as GetRecordsOptions, m as WorkspaceMember, p as Workspace, r as EntityRecord, t as Entity, u as ServerEnv } from "./types-pNWKJX38.js";
|
|
2
2
|
|
|
3
3
|
//#region src/server.d.ts
|
|
4
4
|
/**
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","names":[],"sources":["../src/server.ts"],"mappings":";;;;;AAUiB;
|
|
1
|
+
{"version":3,"file":"server.d.ts","names":[],"sources":["../src/server.ts"],"mappings":";;;;;AAUiB;UA6EP,SAAA;EAAS;;;;EAKjB,KAAA,IAAS,IAAA,UAAc,OAAA,GAAU,WAAA,GAAc,OAAA,CAAQ,CAAA;EAEvD,IAAA;IACE,eAAA,QAAuB,OAAA;MACrB,IAAA,EAAM,YAAA;MACN,GAAA;IAAA;IAEF,WAAA,GAAc,QAAA;EAAA;EAGhB,SAAA;IACE,IAAA,QAAY,OAAA,CAAQ,SAAA;IACpB,OAAA,QAAe,OAAA,CAAQ,SAAA;IACvB,MAAA,GAAS,IAAA;MAAQ,IAAA;IAAA,MAAoB,OAAA,CAAQ,SAAA;IAC7C,OAAA;MACE,GAAA,QAAW,OAAA,CAAQ,eAAA;MACnB,GAAA,GAAM,MAAA,UAAgB,IAAA,0BAA8B,OAAA,CAAQ,eAAA;MAC5D,MAAA,GAAS,MAAA,aAAmB,OAAA;IAAA;EAAA;EAIhC,IAAA;IACE,WAAA,QAAmB,OAAA,CAAQ,MAAA;IAC3B,SAAA,GAAY,UAAA,aAAuB,OAAA,CAAQ,MAAA;IAC3C,UAAA,GACE,UAAA,UACA,OAAA,GAAU,iBAAA,KACP,OAAA,CAAQ,iBAAA,CAAkB,YAAA;IAC/B,SAAA,GAAY,UAAA,UAAoB,QAAA,aAAqB,OAAA,CAAQ,YAAA;IAC7D,YAAA,GAAe,UAAA,UAAoB,IAAA,EAAM,MAAA,sBAA4B,OAAA,CAAQ,YAAA;IAC7E,YAAA,GACE,UAAA,UACA,QAAA,UACA,IAAA,EAAM,MAAA,sBACH,OAAA,CAAQ,YAAA;IACb,YAAA,GAAe,UAAA,UAAoB,QAAA,aAAqB,OAAA;IACxD,eAAA,GAAkB,SAAA,eAAwB,OAAA,CAAQ,YAAA;EAAA;AAAA;;;;;iBAQtC,eAAA,CAAgB,GAAA,EAAK,SAAA,EAAW,OAAA,EAAS,OAAA,GAAU,SAAA"}
|
package/dist/server.js
CHANGED
|
@@ -10,16 +10,14 @@ function getJwks(baseUrl) {
|
|
|
10
10
|
/**
|
|
11
11
|
* Get the shared backend URL based on request URL.
|
|
12
12
|
*/
|
|
13
|
-
function getSharedBackendUrl(
|
|
14
|
-
|
|
15
|
-
return url.hostname === "localhost" || url.hostname === "127.0.0.1" ? "http://localhost:6926" : "https://api.myco.com";
|
|
13
|
+
function getSharedBackendUrl() {
|
|
14
|
+
return "https://api.myco.com";
|
|
16
15
|
}
|
|
17
16
|
/**
|
|
18
17
|
* Get the auth portal URL for federated login.
|
|
19
18
|
*/
|
|
20
|
-
function getAuthPortalUrl(
|
|
21
|
-
|
|
22
|
-
return url.hostname === "localhost" || url.hostname === "127.0.0.1" ? "http://localhost:5173" : "https://myco.com";
|
|
19
|
+
function getAuthPortalUrl() {
|
|
20
|
+
return "https://myco.com";
|
|
23
21
|
}
|
|
24
22
|
/**
|
|
25
23
|
* Extract JWT from the app_jwt cookie.
|
|
@@ -39,7 +37,7 @@ function getJwtFromCookie(request) {
|
|
|
39
37
|
* Verify a JWT using JWKS and return the user info.
|
|
40
38
|
*/
|
|
41
39
|
async function verifyJwt(jwt, requestUrl) {
|
|
42
|
-
const jwks = getJwks(getSharedBackendUrl(
|
|
40
|
+
const jwks = getJwks(getSharedBackendUrl());
|
|
43
41
|
try {
|
|
44
42
|
const { payload } = await jwtVerify(jwt, jwks);
|
|
45
43
|
if (!payload.sub) return {
|
|
@@ -63,7 +61,7 @@ async function verifyJwt(jwt, requestUrl) {
|
|
|
63
61
|
* Use this in loaders and actions.
|
|
64
62
|
*/
|
|
65
63
|
function createServerSDK(env, request) {
|
|
66
|
-
const baseUrl = getSharedBackendUrl(
|
|
64
|
+
const baseUrl = env.VITE_MYCO_API_URL || getSharedBackendUrl();
|
|
67
65
|
/**
|
|
68
66
|
* Make an authenticated server-side API request.
|
|
69
67
|
*/
|
|
@@ -102,7 +100,7 @@ function createServerSDK(env, request) {
|
|
|
102
100
|
};
|
|
103
101
|
},
|
|
104
102
|
getLoginUrl(returnTo) {
|
|
105
|
-
return `${getAuthPortalUrl(
|
|
103
|
+
return `${env.VITE_MYCO_AUTH_URL || getAuthPortalUrl()}/federated/login?return_to=${encodeURIComponent(returnTo)}`;
|
|
106
104
|
}
|
|
107
105
|
},
|
|
108
106
|
workspace: {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","names":[],"sources":["../src/server.ts"],"sourcesContent":["import { createRemoteJWKSet, jwtVerify } from \"jose\";\nimport type {\n Entity,\n EntityRecord,\n GetRecordsOptions,\n PaginatedResponse,\n ServerEnv,\n VerifiedUser,\n Workspace,\n WorkspaceMember,\n} from \"./types\";\n\nconst JWT_COOKIE_NAME = \"app_jwt\";\n\n// Cache the JWKS function\nlet jwksCache: ReturnType<typeof createRemoteJWKSet> | null = null;\n\nfunction getJwks(baseUrl: string) {\n if (!jwksCache) {\n jwksCache = createRemoteJWKSet(new URL(`${baseUrl}/auth/jwks`));\n }\n return jwksCache;\n}\n\n/**\n * Get the shared backend URL based on request URL.\n */\nfunction getSharedBackendUrl(requestUrl: string): string {\n const url = new URL(requestUrl);\n const isLocal = url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\";\n return isLocal ? \"http://localhost:6926\" : \"https://api.myco.com\";\n}\n\n/**\n * Get the auth portal URL for federated login.\n */\nfunction getAuthPortalUrl(requestUrl: string): string {\n const url = new URL(requestUrl);\n const isLocal = url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\";\n return isLocal ? \"http://localhost:5173\" : \"https://myco.com\";\n}\n\n/**\n * Extract JWT from the app_jwt cookie.\n */\nfunction getJwtFromCookie(request: Request): string | null {\n const cookieHeader = request.headers.get(\"Cookie\");\n if (!cookieHeader) return null;\n\n const cookies = cookieHeader.split(\";\").map((c) => c.trim());\n // Find the LAST app_jwt cookie (most recent)\n let jwt: string | null = null;\n for (const cookie of cookies) {\n const [name, ...valueParts] = cookie.split(\"=\");\n if (name === JWT_COOKIE_NAME) {\n jwt = valueParts.join(\"=\");\n }\n }\n return jwt;\n}\n\n/**\n * Verify a JWT using JWKS and return the user info.\n */\nasync function verifyJwt(\n jwt: string,\n requestUrl: string\n): Promise<{ user: VerifiedUser | null; error?: string }> {\n const baseUrl = getSharedBackendUrl(requestUrl);\n const jwks = getJwks(baseUrl);\n\n try {\n const { payload } = await jwtVerify(jwt, jwks);\n\n if (!payload.sub) return { user: null, error: \"No sub claim in JWT\" };\n\n return {\n user: {\n userId: payload.sub,\n email: payload.email as string | undefined,\n name: payload.name as string | undefined,\n },\n };\n } catch (err) {\n return { user: null, error: err instanceof Error ? err.message : String(err) };\n }\n}\n\n/**\n * Server-side SDK instance\n */\ninterface ServerSDK {\n /**\n * Make an authenticated API request to the backend.\n * Automatically includes JWT from cookie and app headers.\n */\n fetch<T>(path: string, options?: RequestInit): Promise<T>;\n\n auth: {\n getVerifiedUser: () => Promise<{\n user: VerifiedUser | null;\n jwt: string | null;\n }>;\n getLoginUrl: (returnTo: string) => string;\n };\n\n workspace: {\n list: () => Promise<Workspace[]>;\n current: () => Promise<Workspace>;\n update: (data: { name?: string }) => Promise<Workspace>;\n members: {\n get: () => Promise<WorkspaceMember[]>;\n add: (userId: string, role?: \"admin\" | \"member\") => Promise<WorkspaceMember>;\n remove: (userId: string) => Promise<void>;\n };\n };\n\n data: {\n getEntities: () => Promise<Entity[]>;\n getEntity: (entitySlug: string) => Promise<Entity>;\n getRecords: (\n entitySlug: string,\n options?: GetRecordsOptions\n ) => Promise<PaginatedResponse<EntityRecord>>;\n getRecord: (entitySlug: string, recordId: string) => Promise<EntityRecord>;\n createRecord: (entitySlug: string, data: Record<string, unknown>) => Promise<EntityRecord>;\n updateRecord: (\n entitySlug: string,\n recordId: string,\n data: Record<string, unknown>\n ) => Promise<EntityRecord>;\n deleteRecord: (entitySlug: string, recordId: string) => Promise<void>;\n batchGetRecords: (recordIds: string[]) => Promise<EntityRecord[]>;\n };\n}\n\n/**\n * Create a server-side SDK instance.\n * Use this in loaders and actions.\n */\nexport function createServerSDK(env: ServerEnv, request: Request): ServerSDK {\n const baseUrl = getSharedBackendUrl(request.url);\n\n /**\n * Make an authenticated server-side API request.\n */\n async function apiFetch<T>(path: string, options: RequestInit = {}): Promise<T> {\n const jwt = getJwtFromCookie(request);\n\n const headers = new Headers(options.headers);\n\n if (!headers.has(\"Content-Type\") && options.body) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n\n headers.set(\"Myco-App-Key\", env.MYCO_APP_KEY);\n\n if (jwt) {\n headers.set(\"Authorization\", `Bearer ${jwt}`);\n }\n\n // Get workspace ID from request header if present\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (workspaceId) {\n headers.set(\"Myco-Workspace-Id\", workspaceId);\n }\n\n const response = await fetch(`${baseUrl}${path}`, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`API Error ${response.status} on ${path}: ${errorText}`);\n }\n\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType?.includes(\"application/json\")) {\n return undefined as T;\n }\n\n return response.json();\n }\n\n return {\n fetch: apiFetch,\n\n auth: {\n async getVerifiedUser() {\n const jwt = getJwtFromCookie(request);\n\n if (!jwt) {\n return { user: null, jwt: null };\n }\n\n const { user } = await verifyJwt(jwt, request.url);\n return { user, jwt };\n },\n\n getLoginUrl(returnTo: string) {\n const authBaseUrl = getAuthPortalUrl(request.url);\n const encodedReturnTo = encodeURIComponent(returnTo);\n return `${authBaseUrl}/federated/login?return_to=${encodedReturnTo}`;\n },\n },\n\n workspace: {\n async list() {\n return apiFetch<Workspace[]>(\"/api/workspaces\");\n },\n\n async current() {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n return apiFetch<Workspace>(`/api/workspaces/${workspaceId}`);\n },\n\n async update(data: { name?: string }) {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n return apiFetch<Workspace>(`/api/workspaces/${workspaceId}`, {\n method: \"PATCH\",\n body: JSON.stringify(data),\n });\n },\n\n members: {\n async get() {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n return apiFetch<WorkspaceMember[]>(`/api/workspaces/${workspaceId}/members`);\n },\n\n async add(userId: string, role: \"admin\" | \"member\" = \"member\") {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n return apiFetch<WorkspaceMember>(`/api/workspaces/${workspaceId}/members`, {\n method: \"POST\",\n body: JSON.stringify({ userId, role }),\n });\n },\n\n async remove(userId: string) {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n await apiFetch<void>(`/api/workspaces/${workspaceId}/members/${userId}`, {\n method: \"DELETE\",\n });\n },\n },\n },\n\n data: {\n async getEntities() {\n return apiFetch<Entity[]>(\"/api/entities\");\n },\n\n async getEntity(entitySlug: string) {\n return apiFetch<Entity>(`/api/entities/${entitySlug}`);\n },\n\n async getRecords(entitySlug: string, options?: GetRecordsOptions) {\n const params = new URLSearchParams();\n\n if (options?.page !== undefined) {\n params.set(\"page\", String(options.page));\n }\n if (options?.pageSize !== undefined) {\n params.set(\"pageSize\", String(options.pageSize));\n }\n if (options?.sort) {\n params.set(\"sort\", options.sort);\n }\n if (options?.order) {\n params.set(\"order\", options.order);\n }\n if (options?.filter) {\n params.set(\"filter\", JSON.stringify(options.filter));\n }\n\n const queryString = params.toString();\n const path = `/api/entities/${entitySlug}/records${queryString ? `?${queryString}` : \"\"}`;\n\n return apiFetch<PaginatedResponse<EntityRecord>>(path);\n },\n\n async getRecord(entitySlug: string, recordId: string) {\n return apiFetch<EntityRecord>(`/api/entities/${entitySlug}/records/${recordId}`);\n },\n\n async createRecord(entitySlug: string, data: Record<string, unknown>) {\n return apiFetch<EntityRecord>(`/api/entities/${entitySlug}/records`, {\n method: \"POST\",\n body: JSON.stringify({ data }),\n });\n },\n\n async updateRecord(entitySlug: string, recordId: string, data: Record<string, unknown>) {\n return apiFetch<EntityRecord>(`/api/entities/${entitySlug}/records/${recordId}`, {\n method: \"PATCH\",\n body: JSON.stringify({ data }),\n });\n },\n\n async deleteRecord(entitySlug: string, recordId: string) {\n await apiFetch<void>(`/api/entities/${entitySlug}/records/${recordId}`, {\n method: \"DELETE\",\n });\n },\n\n async batchGetRecords(recordIds: string[]) {\n return apiFetch<EntityRecord[]>(\"/api/records/batch\", {\n method: \"POST\",\n body: JSON.stringify({ recordIds }),\n });\n },\n },\n };\n}\n\n// Re-export types for server usage\nexport type { ServerSDK, ServerEnv, VerifiedUser };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","names":[],"sources":["../src/server.ts"],"sourcesContent":["import { createRemoteJWKSet, jwtVerify } from \"jose\";\nimport type {\n Entity,\n EntityRecord,\n GetRecordsOptions,\n PaginatedResponse,\n ServerEnv,\n VerifiedUser,\n Workspace,\n WorkspaceMember,\n} from \"./types\";\n\nconst JWT_COOKIE_NAME = \"app_jwt\";\n\n// Cache the JWKS function\nlet jwksCache: ReturnType<typeof createRemoteJWKSet> | null = null;\n\nfunction getJwks(baseUrl: string) {\n if (!jwksCache) {\n jwksCache = createRemoteJWKSet(new URL(`${baseUrl}/auth/jwks`));\n }\n return jwksCache;\n}\n\n/**\n * Get the shared backend URL based on request URL.\n */\nfunction getSharedBackendUrl(): string {\n return \"https://api.myco.com\";\n}\n\n/**\n * Get the auth portal URL for federated login.\n */\nfunction getAuthPortalUrl(): string {\n return \"https://myco.com\";\n}\n\n/**\n * Extract JWT from the app_jwt cookie.\n */\nfunction getJwtFromCookie(request: Request): string | null {\n const cookieHeader = request.headers.get(\"Cookie\");\n if (!cookieHeader) return null;\n\n const cookies = cookieHeader.split(\";\").map((c) => c.trim());\n // Find the LAST app_jwt cookie (most recent)\n let jwt: string | null = null;\n for (const cookie of cookies) {\n const [name, ...valueParts] = cookie.split(\"=\");\n if (name === JWT_COOKIE_NAME) {\n jwt = valueParts.join(\"=\");\n }\n }\n return jwt;\n}\n\n/**\n * Verify a JWT using JWKS and return the user info.\n */\nasync function verifyJwt(\n jwt: string,\n requestUrl: string\n): Promise<{ user: VerifiedUser | null; error?: string }> {\n const baseUrl = getSharedBackendUrl();\n const jwks = getJwks(baseUrl);\n\n try {\n const { payload } = await jwtVerify(jwt, jwks);\n\n if (!payload.sub) return { user: null, error: \"No sub claim in JWT\" };\n\n return {\n user: {\n userId: payload.sub,\n email: payload.email as string | undefined,\n name: payload.name as string | undefined,\n },\n };\n } catch (err) {\n return { user: null, error: err instanceof Error ? err.message : String(err) };\n }\n}\n\n/**\n * Server-side SDK instance\n */\ninterface ServerSDK {\n /**\n * Make an authenticated API request to the backend.\n * Automatically includes JWT from cookie and app headers.\n */\n fetch<T>(path: string, options?: RequestInit): Promise<T>;\n\n auth: {\n getVerifiedUser: () => Promise<{\n user: VerifiedUser | null;\n jwt: string | null;\n }>;\n getLoginUrl: (returnTo: string) => string;\n };\n\n workspace: {\n list: () => Promise<Workspace[]>;\n current: () => Promise<Workspace>;\n update: (data: { name?: string }) => Promise<Workspace>;\n members: {\n get: () => Promise<WorkspaceMember[]>;\n add: (userId: string, role?: \"admin\" | \"member\") => Promise<WorkspaceMember>;\n remove: (userId: string) => Promise<void>;\n };\n };\n\n data: {\n getEntities: () => Promise<Entity[]>;\n getEntity: (entitySlug: string) => Promise<Entity>;\n getRecords: (\n entitySlug: string,\n options?: GetRecordsOptions\n ) => Promise<PaginatedResponse<EntityRecord>>;\n getRecord: (entitySlug: string, recordId: string) => Promise<EntityRecord>;\n createRecord: (entitySlug: string, data: Record<string, unknown>) => Promise<EntityRecord>;\n updateRecord: (\n entitySlug: string,\n recordId: string,\n data: Record<string, unknown>\n ) => Promise<EntityRecord>;\n deleteRecord: (entitySlug: string, recordId: string) => Promise<void>;\n batchGetRecords: (recordIds: string[]) => Promise<EntityRecord[]>;\n };\n}\n\n/**\n * Create a server-side SDK instance.\n * Use this in loaders and actions.\n */\nexport function createServerSDK(env: ServerEnv, request: Request): ServerSDK {\n const baseUrl = env.VITE_MYCO_API_URL || getSharedBackendUrl();\n\n /**\n * Make an authenticated server-side API request.\n */\n async function apiFetch<T>(path: string, options: RequestInit = {}): Promise<T> {\n const jwt = getJwtFromCookie(request);\n\n const headers = new Headers(options.headers);\n\n if (!headers.has(\"Content-Type\") && options.body) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n\n headers.set(\"Myco-App-Key\", env.MYCO_APP_KEY);\n\n if (jwt) {\n headers.set(\"Authorization\", `Bearer ${jwt}`);\n }\n\n // Get workspace ID from request header if present\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (workspaceId) {\n headers.set(\"Myco-Workspace-Id\", workspaceId);\n }\n\n const response = await fetch(`${baseUrl}${path}`, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`API Error ${response.status} on ${path}: ${errorText}`);\n }\n\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType?.includes(\"application/json\")) {\n return undefined as T;\n }\n\n return response.json();\n }\n\n return {\n fetch: apiFetch,\n\n auth: {\n async getVerifiedUser() {\n const jwt = getJwtFromCookie(request);\n\n if (!jwt) {\n return { user: null, jwt: null };\n }\n\n const { user } = await verifyJwt(jwt, request.url);\n return { user, jwt };\n },\n\n getLoginUrl(returnTo: string) {\n const authBaseUrl = env.VITE_MYCO_AUTH_URL || getAuthPortalUrl();\n const encodedReturnTo = encodeURIComponent(returnTo);\n return `${authBaseUrl}/federated/login?return_to=${encodedReturnTo}`;\n },\n },\n\n workspace: {\n async list() {\n return apiFetch<Workspace[]>(\"/api/workspaces\");\n },\n\n async current() {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n return apiFetch<Workspace>(`/api/workspaces/${workspaceId}`);\n },\n\n async update(data: { name?: string }) {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n return apiFetch<Workspace>(`/api/workspaces/${workspaceId}`, {\n method: \"PATCH\",\n body: JSON.stringify(data),\n });\n },\n\n members: {\n async get() {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n return apiFetch<WorkspaceMember[]>(`/api/workspaces/${workspaceId}/members`);\n },\n\n async add(userId: string, role: \"admin\" | \"member\" = \"member\") {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n return apiFetch<WorkspaceMember>(`/api/workspaces/${workspaceId}/members`, {\n method: \"POST\",\n body: JSON.stringify({ userId, role }),\n });\n },\n\n async remove(userId: string) {\n const workspaceId = request.headers.get(\"Myco-Workspace-Id\");\n if (!workspaceId) {\n throw new Error(\"No workspace ID in request headers\");\n }\n await apiFetch<void>(`/api/workspaces/${workspaceId}/members/${userId}`, {\n method: \"DELETE\",\n });\n },\n },\n },\n\n data: {\n async getEntities() {\n return apiFetch<Entity[]>(\"/api/entities\");\n },\n\n async getEntity(entitySlug: string) {\n return apiFetch<Entity>(`/api/entities/${entitySlug}`);\n },\n\n async getRecords(entitySlug: string, options?: GetRecordsOptions) {\n const params = new URLSearchParams();\n\n if (options?.page !== undefined) {\n params.set(\"page\", String(options.page));\n }\n if (options?.pageSize !== undefined) {\n params.set(\"pageSize\", String(options.pageSize));\n }\n if (options?.sort) {\n params.set(\"sort\", options.sort);\n }\n if (options?.order) {\n params.set(\"order\", options.order);\n }\n if (options?.filter) {\n params.set(\"filter\", JSON.stringify(options.filter));\n }\n\n const queryString = params.toString();\n const path = `/api/entities/${entitySlug}/records${queryString ? `?${queryString}` : \"\"}`;\n\n return apiFetch<PaginatedResponse<EntityRecord>>(path);\n },\n\n async getRecord(entitySlug: string, recordId: string) {\n return apiFetch<EntityRecord>(`/api/entities/${entitySlug}/records/${recordId}`);\n },\n\n async createRecord(entitySlug: string, data: Record<string, unknown>) {\n return apiFetch<EntityRecord>(`/api/entities/${entitySlug}/records`, {\n method: \"POST\",\n body: JSON.stringify({ data }),\n });\n },\n\n async updateRecord(entitySlug: string, recordId: string, data: Record<string, unknown>) {\n return apiFetch<EntityRecord>(`/api/entities/${entitySlug}/records/${recordId}`, {\n method: \"PATCH\",\n body: JSON.stringify({ data }),\n });\n },\n\n async deleteRecord(entitySlug: string, recordId: string) {\n await apiFetch<void>(`/api/entities/${entitySlug}/records/${recordId}`, {\n method: \"DELETE\",\n });\n },\n\n async batchGetRecords(recordIds: string[]) {\n return apiFetch<EntityRecord[]>(\"/api/records/batch\", {\n method: \"POST\",\n body: JSON.stringify({ recordIds }),\n });\n },\n },\n };\n}\n\n// Re-export types for server usage\nexport type { ServerSDK, ServerEnv, VerifiedUser };\n"],"mappings":"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"}
|
|
@@ -99,10 +99,13 @@ interface MycoSDKConfig {
|
|
|
99
99
|
appKey: string;
|
|
100
100
|
workspaceId?: string;
|
|
101
101
|
baseUrl?: string;
|
|
102
|
+
authUrl?: string;
|
|
102
103
|
}
|
|
103
104
|
interface ServerEnv {
|
|
104
105
|
MYCO_APP_KEY: string;
|
|
106
|
+
VITE_MYCO_API_URL?: string;
|
|
107
|
+
VITE_MYCO_AUTH_URL?: string;
|
|
105
108
|
}
|
|
106
109
|
//#endregion
|
|
107
110
|
export { MycoSDKConfig as a, PaginatedResponse as c, UseSessionResult as d, VerifiedUser as f, GetRecordsOptions as i, RecordEntry as l, WorkspaceMember as m, EntityField as n, MycoSession as o, Workspace as p, EntityRecord as r, MycoUser as s, Entity as t, ServerEnv as u };
|
|
108
|
-
//# sourceMappingURL=types-
|
|
111
|
+
//# sourceMappingURL=types-pNWKJX38.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-pNWKJX38.d.ts","names":[],"sources":["../src/types.ts"],"mappings":";UACiB,QAAA;EACf,EAAA;EACA,IAAA;EACA,KAAA;EACA,aAAA;EACA,KAAA;EACA,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;AAAA;AAAA,UAGI,WAAA;EACf,IAAA,EAAM,QAAA;EACN,OAAA;IACE,EAAA;IACA,MAAA;IACA,SAAA,EAAW,IAAA;IACX,KAAA;EAAA;AAAA;AAAA,UAIa,gBAAA;EACf,IAAA,EAAM,WAAA;EACN,SAAA;EACA,KAAA,EAAO,KAAA;EACP,OAAA,QAAe,OAAA;AAAA;AAAA,UASA,YAAA;EACf,MAAA;EACA,KAAA;EACA,IAAA;AAAA;AAAA,UAIe,SAAA;EACf,EAAA;EACA,IAAA;EACA,IAAA;EACA,SAAA;EACA,SAAA;AAAA;AAAA,UAGe,eAAA;EACf,EAAA;EACA,MAAA;EACA,WAAA;EACA,IAAA;EACA,IAAA;IACE,EAAA;IACA,KAAA;IACA,IAAA;EAAA;EAEF,SAAA;AAAA;AAAA,UAIe,MAAA;EACf,EAAA;EACA,IAAA;EACA,IAAA;EACA,WAAA;EACA,MAAA,EAAQ,WAAA;AAAA;AAAA,UAGO,WAAA;EACf,EAAA;EACA,IAAA;EACA,IAAA;EACA,IAAA;EACA,QAAA;EACA,OAAA,GAAU,MAAA;AAAA;AAAA,UAGK,YAAA;EACf,EAAA;EACA,QAAA;EACA,WAAA;EACA,IAAA,EAAM,MAAA;EACN,SAAA;EACA,SAAA;AAAA;;;;;KAOU,WAAA,MAAiB,CAAA;EAC3B,GAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,UAGe,iBAAA;EACf,OAAA,EAAS,CAAA;EACT,UAAA;IACE,KAAA;IACA,KAAA;IACA,MAAA;IACA,OAAA;EAAA;AAAA;AAAA,UAIa,iBAAA;EACf,IAAA;EACA,QAAA;EACA,IAAA;EACA,KAAA;EACA,MAAA,GAAS,MAAA;AAAA;AAAA,UAUM,aAAA;EACf,MAAA;EACA,WAAA;EACA,OAAA;EACA,OAAA;AAAA;AAAA,UAIe,SAAA;EACf,YAAA;EACA,iBAAA;EACA,kBAAA;AAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as MycoSDKConfig, d as UseSessionResult, m as WorkspaceMember, o as MycoSession, p as Workspace } from "./types-
|
|
1
|
+
import { a as MycoSDKConfig, d as UseSessionResult, m as WorkspaceMember, o as MycoSession, p as Workspace } from "./types-pNWKJX38.js";
|
|
2
2
|
import * as ai from "ai";
|
|
3
3
|
import { DefaultChatTransport, UIMessage } from "ai";
|
|
4
4
|
|
|
@@ -843,6 +843,7 @@ type ChatMessage = Serialized<typeof messages.$inferSelect>;
|
|
|
843
843
|
* Auth namespace — federated login, logout, session management.
|
|
844
844
|
*/
|
|
845
845
|
declare class AuthManager {
|
|
846
|
+
private config;
|
|
846
847
|
private authClient;
|
|
847
848
|
constructor(config: MycoSDKConfig);
|
|
848
849
|
login(returnTo?: string): void;
|
|
@@ -919,8 +920,8 @@ declare class ChatManager {
|
|
|
919
920
|
createTransport(): DefaultChatTransport<UIMessage<unknown, ai.UIDataTypes, ai.UITools>>;
|
|
920
921
|
useChats(): {
|
|
921
922
|
chats: {
|
|
922
|
-
title: string | null;
|
|
923
923
|
id: string;
|
|
924
|
+
title: string | null;
|
|
924
925
|
createdAt: string;
|
|
925
926
|
updatedAt: string;
|
|
926
927
|
userId: string;
|
|
@@ -940,8 +941,8 @@ declare class ChatManager {
|
|
|
940
941
|
};
|
|
941
942
|
useChat(chatId: string | null | undefined): {
|
|
942
943
|
chat: {
|
|
943
|
-
title: string | null;
|
|
944
944
|
id: string;
|
|
945
|
+
title: string | null;
|
|
945
946
|
createdAt: string;
|
|
946
947
|
updatedAt: string;
|
|
947
948
|
userId: string;
|
|
@@ -999,4 +1000,4 @@ declare function useSubscription(): {
|
|
|
999
1000
|
};
|
|
1000
1001
|
//#endregion
|
|
1001
1002
|
export { AuthManager as a, WorkspaceManager as i, FilesManager as n, Chat as o, ChatManager as r, ChatMessage as s, useSubscription as t };
|
|
1002
|
-
//# sourceMappingURL=use-subscription-
|
|
1003
|
+
//# sourceMappingURL=use-subscription-CQavQhR8.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-subscription-BUFAoTSc.d.ts","names":["entityKind","hasOwnEntityKind","DrizzleEntity","DrizzleEntityClass","T","args","is","InstanceType","value","type","Column","entityKind","Casing","toSnakeCase","input","toCamelCase","CasingCache","cachedTables","convert","constructor","casing","getColumnCasing","column","cacheTable","clearCache","entityKind","SQL","SQLWrapper","Subquery","TAlias","TSelectedFields","Record","_","brand","sql","selectedFields","alias","isWith","constructor","selection","WithSubquery","TSelection","WithSubqueryWithoutSelection","Column","GetColumnData","entityKind","OptionalKeyOnly","RequiredKeyOnly","SQLWrapper","Simplify","Update","TableConfig","TColumn","Record","name","schema","columns","dialect","UpdateTableConfig","T","TUpdate","Partial","Required","Table","InferSelectModel","InferInsertModel","_","brand","config","inferSelect","inferInsert","$inferSelect","$inferInsert","constructor","baseName","isTable","table","AnyTable","TPartial","getTableName","getTableUniqueName","MapColumnName","TName","TDBColumNames","InferModelFromColumns","TColumns","TInferMode","TConfig","Key","dbColumnNames","override","InferModel","TTable","ChangeColumnTableName","ColumnDataType","Dialect","AnyColumn","Column","ColumnBaseConfig","GetColumnData","UpdateColConfig","SelectedFields","ColumnsSelection","SQL","View","Subquery","Table","Assume","DrizzleTypeError","Equal","IsAny","Simplify","JoinType","JoinNullability","ApplyNullability","T","TNullability","ApplyNullabilityToColumn","TColumn","notNull","ApplyNotNullMapToJoins","TResult","TNullabilityMap","Record","TTableName","SelectMode","SelectResult","TSelectMode","SelectPartialResult","SelectResultFields","IsUnion","U","Not","TFields","Key","TField","SelectResultField","Aliased","tableName","MapColumnsToTableAlias","TColumns","TAlias","TDialect","AddAliasToSelection","TSelection","AppendToResult","TJoinedName","TSelectedFields","TOldSelectMode","BuildSubquerySelection","SetJoinsNullability","TValue","AppendToNullabilityMap","TJoinsNotNull","TJoinType","name","TableLike","GetSelectTableName","TTable","GetSelectTableSelection","TDeep","SetOperator","CasingCache","entityKind","SelectResult","Subquery","Assume","Equal","AnyColumn","Column","Table","FakePrimitiveParam","Chunk","View","Name","Param","Placeholder","SQL","BuildQueryConfig","DriverValueEncoder","QueryTypingsValue","casing","escapeName","name","escapeParam","num","value","escapeString","str","prepareTyping","encoder","paramStartIndex","inlineParams","invokeSource","Query","sql","params","QueryWithTypings","typings","SQLWrapper","getSQL","shouldOmitSQLParens","isSQLWrapper","StringChunk","constructor","TData","TDecoder","T","SQLChunk","Aliased","DriverValueDecoder","GetDecoderResult","queryChunks","_","brand","type","shouldInlineParams","append","query","toQuery","config","buildQueryFromSourceParams","chunks","_config","mapInlineParam","as","alias","mapWith","decoder","if","condition","TDriverParam","mapFromDriverValue","mapToDriverValue","isDriverValueEncoder","noopDecoder","noopEncoder","DriverValueMapper","noopMapper","TDataType","TDriverParamType","param","TDriver","TemplateStringsArray","strings","TName","empty","fromList","list","raw","join","separator","identifier","placeholder","fieldAlias","TValue","protected","fillPlaceholders","Record","values","ColumnsSelection","TExisting","TSelection","InferSelectViewModel","schema","selectedFields","viewBrand","existing","$inferSelect","isView","view","getViewName","TView","x","AnyColumn","Logger","Param","SQL","View","Table","haveSameKeys","Record","left","right","UpdateSet","OneOrMany","T","Update","TUpdate","Exclude","K","Simplify","SimplifyMappedType","ShallowRecord","P","Assume","U","Equal","X","Y","DrizzleTypeError","$drizzleTypeError","ValueOrArray","Or","T1","T2","IfThenElse","If","Then","Else","PromiseOf","Promise","Writable","getTableColumns","table","getViewSelectedFields","view","ColumnsWithTable","TTableName","TForeignTableName","TColumns","tableName","Key","Casing","DrizzleConfig","TSchema","logger","schema","casing","ValidateShape","ValidShape","TResult","KnownKeysOnly","IsAny","IfNotImported","N","ImportTypeError","TPackageName","RequireAtLeastOne","Keys","Pick","Required","Omit","Partial","isConfig","data","NeonAuthToken","entityKind","Column","GelColumn","GelExtraConfigColumn","MySqlColumn","ExtraConfigColumn","PgColumn","PgSequenceOptions","SingleStoreColumn","SQL","SQLiteColumn","Assume","Simplify","ColumnDataType","Dialect","GeneratedStorageMode","GeneratedType","GeneratedColumnConfig","TDataType","as","type","mode","GeneratedIdentityConfig","sequenceName","sequenceOptions","ColumnBuilderBaseConfig","TColumnType","name","dataType","columnType","data","driverParam","enumValues","MakeColumnConfig","T","TTableName","TData","ColumnBuilderBase","U","BuildColumn","$type","tableName","notNull","hasDefault","isPrimaryKey","isAutoincrement","hasRuntimeDefault","baseColumn","baseBuilder","identity","generated","G","ColumnBuilderTypeConfig","TTypeConfig","brand","ColumnBuilderRuntimeConfig","TRuntimeConfig","keyAsName","default","defaultFn","onUpdateFn","primaryKey","isUnique","uniqueName","uniqueType","generatedIdentity","ColumnBuilderExtraConfig","primaryKeyHasDefault","NotNull","_","HasDefault","IsPrimaryKey","IsAutoincrement","HasRuntimeDefault","$Type","TType","HasGenerated","TGenerated","IsIdentity","ColumnBuilder","TExtraConfig","Partial","config","constructor","value","$defaultFn","fn","$default","$onUpdateFn","$onUpdate","generatedAlwaysAs","TBuilder","TDialect","Omit","BuildIndexColumn","BuildColumns","TConfigMap","Record","Key","BuildExtraConfigColumns","_TTableName","ChangeColumnTableName","TColumn","TAlias","ColumnBuilderBaseConfig","ColumnBuilderRuntimeConfig","ColumnDataType","GeneratedColumnConfig","GeneratedIdentityConfig","entityKind","DriverValueMapper","SQL","SQLWrapper","Table","Update","ColumnBaseConfig","TDataType","TColumnType","tableName","notNull","hasDefault","isPrimaryKey","isAutoincrement","hasRuntimeDefault","ColumnTypeConfig","T","TTypeConfig","brand","name","dataType","columnType","data","driverParam","enumValues","baseColumn","U","generated","identity","ColumnRuntimeConfig","TData","TRuntimeConfig","Column","table","_","keyAsName","primary","default","defaultFn","onUpdateFn","isUnique","uniqueName","uniqueType","generatedIdentity","config","constructor","getSQLType","mapFromDriverValue","value","mapToDriverValue","UpdateColConfig","TUpdate","Partial","AnyColumn","TPartial","Required","GetColumnData","TColumn","TInferMode","InferColumnsDataTypes","TColumns","Record","Key","AnyColumn","Column","SQL","Table","RequiredKeyOnly","TKey","T","notNull","hasDefault","OptionalKeyOnly","OverrideT","_","generated","SelectedFieldsFlat","TColumn","Aliased","Record","SelectedFieldsFlatFull","SelectedFields","TTable","SelectedFieldsOrdered","path","field","entityKind","PgSequenceOptions","increment","minValue","maxValue","startWith","cache","cycle","PgSequence","seqName","seqOptions","schema","constructor","pgSequence","name","options","isPgSequence","obj","BuildColumns","BuildExtraConfigColumns","entityKind","Table","TableConfig","TableConfigBase","UpdateTableConfig","CheckBuilder","PgColumnsBuilders","PgColumn","PgColumnBuilderBase","ForeignKeyBuilder","AnyIndexBuilder","PgPolicy","PrimaryKeyBuilder","UniqueConstraintBuilder","PgTableExtraConfigValue","PgTableExtraConfig","Record","PgTable","T","AnyPgTable","TPartial","Partial","PgTableWithColumns","Key","Omit","enableRLS","PgTableFn","TTableName","TColumnsMap","TSchema","name","columns","self","extraConfig","schema","dialect","columnTypes","pgTable","pgTableCreator","customizeTableName","ColumnBuilderBase","ColumnBuilderBaseConfig","ColumnBuilderExtraConfig","ColumnBuilderRuntimeConfig","ColumnDataType","HasGenerated","ColumnBuilder","ColumnBaseConfig","Column","entityKind","Simplify","Update","UpdateDeleteAction","AnyPgTable","PgTable","SQL","PgIndexOpClass","ReferenceConfig","PgColumn","ref","actions","onUpdate","onDelete","PgColumnBuilderBase","T","TTypeConfig","dialect","PgColumnBuilder","TSize","TRuntimeConfig","TExtraConfig","PgArrayBuilder","foreignKeyConfigs","array","size","name","dataType","columnType","data","driverParam","enumValues","baseBuilder","notNull","hasDefault","references","unique","nulls","config","generatedAlwaysAs","as","type","table","constructor","IndexedExtraConfigType","order","opClass","ExtraConfigColumn","Omit","getSQLType","indexConfig","defaultConfig","asc","desc","nullsFirst","nullsLast","op","IndexedColumn","keyAsName","AnyPgColumn","TPartial","Partial","Required","PgArrayColumnBuilderBaseConfig","TBase","TBaseBuilder","PgArray","baseColumn","range","mapFromDriverValue","value","mapToDriverValue","isNestedArray"],"sources":["../../../node_modules/drizzle-orm/entity.d.ts","../../../node_modules/drizzle-orm/casing.d.ts","../../../node_modules/drizzle-orm/subquery.d.ts","../../../node_modules/drizzle-orm/table.d.ts","../../../node_modules/drizzle-orm/query-builders/select.types.d.ts","../../../node_modules/drizzle-orm/sql/sql.d.ts","../../../node_modules/drizzle-orm/utils.d.ts","../../../node_modules/drizzle-orm/column-builder.d.ts","../../../node_modules/drizzle-orm/column.d.ts","../../../node_modules/drizzle-orm/operations.d.ts","../../../node_modules/drizzle-orm/pg-core/sequence.d.ts","../../../node_modules/drizzle-orm/pg-core/table.d.ts","../../../node_modules/drizzle-orm/pg-core/columns/common.d.ts","../../db/src/schema.ts","../../types/src/chat.ts","../src/auth/manager.ts","../src/workspace/manager.ts","../src/chat/namespace.ts","../src/files.ts","../src/use-subscription.ts"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-subscription-CQavQhR8.d.ts","names":["entityKind","hasOwnEntityKind","DrizzleEntity","DrizzleEntityClass","T","args","is","InstanceType","value","type","Column","entityKind","Casing","toSnakeCase","input","toCamelCase","CasingCache","cachedTables","convert","constructor","casing","getColumnCasing","column","cacheTable","clearCache","entityKind","SQL","SQLWrapper","Subquery","TAlias","TSelectedFields","Record","_","brand","sql","selectedFields","alias","isWith","constructor","selection","WithSubquery","TSelection","WithSubqueryWithoutSelection","Column","GetColumnData","entityKind","OptionalKeyOnly","RequiredKeyOnly","SQLWrapper","Simplify","Update","TableConfig","TColumn","Record","name","schema","columns","dialect","UpdateTableConfig","T","TUpdate","Partial","Required","Table","InferSelectModel","InferInsertModel","_","brand","config","inferSelect","inferInsert","$inferSelect","$inferInsert","constructor","baseName","isTable","table","AnyTable","TPartial","getTableName","getTableUniqueName","MapColumnName","TName","TDBColumNames","InferModelFromColumns","TColumns","TInferMode","TConfig","Key","dbColumnNames","override","InferModel","TTable","ChangeColumnTableName","ColumnDataType","Dialect","AnyColumn","Column","ColumnBaseConfig","GetColumnData","UpdateColConfig","SelectedFields","ColumnsSelection","SQL","View","Subquery","Table","Assume","DrizzleTypeError","Equal","IsAny","Simplify","JoinType","JoinNullability","ApplyNullability","T","TNullability","ApplyNullabilityToColumn","TColumn","notNull","ApplyNotNullMapToJoins","TResult","TNullabilityMap","Record","TTableName","SelectMode","SelectResult","TSelectMode","SelectPartialResult","SelectResultFields","IsUnion","U","Not","TFields","Key","TField","SelectResultField","Aliased","tableName","MapColumnsToTableAlias","TColumns","TAlias","TDialect","AddAliasToSelection","TSelection","AppendToResult","TJoinedName","TSelectedFields","TOldSelectMode","BuildSubquerySelection","SetJoinsNullability","TValue","AppendToNullabilityMap","TJoinsNotNull","TJoinType","name","TableLike","GetSelectTableName","TTable","GetSelectTableSelection","TDeep","SetOperator","CasingCache","entityKind","SelectResult","Subquery","Assume","Equal","AnyColumn","Column","Table","FakePrimitiveParam","Chunk","View","Name","Param","Placeholder","SQL","BuildQueryConfig","DriverValueEncoder","QueryTypingsValue","casing","escapeName","name","escapeParam","num","value","escapeString","str","prepareTyping","encoder","paramStartIndex","inlineParams","invokeSource","Query","sql","params","QueryWithTypings","typings","SQLWrapper","getSQL","shouldOmitSQLParens","isSQLWrapper","StringChunk","constructor","TData","TDecoder","T","SQLChunk","Aliased","DriverValueDecoder","GetDecoderResult","queryChunks","_","brand","type","shouldInlineParams","append","query","toQuery","config","buildQueryFromSourceParams","chunks","_config","mapInlineParam","as","alias","mapWith","decoder","if","condition","TDriverParam","mapFromDriverValue","mapToDriverValue","isDriverValueEncoder","noopDecoder","noopEncoder","DriverValueMapper","noopMapper","TDataType","TDriverParamType","param","TDriver","TemplateStringsArray","strings","TName","empty","fromList","list","raw","join","separator","identifier","placeholder","fieldAlias","TValue","protected","fillPlaceholders","Record","values","ColumnsSelection","TExisting","TSelection","InferSelectViewModel","schema","selectedFields","viewBrand","existing","$inferSelect","isView","view","getViewName","TView","x","AnyColumn","Logger","Param","SQL","View","Table","haveSameKeys","Record","left","right","UpdateSet","OneOrMany","T","Update","TUpdate","Exclude","K","Simplify","SimplifyMappedType","ShallowRecord","P","Assume","U","Equal","X","Y","DrizzleTypeError","$drizzleTypeError","ValueOrArray","Or","T1","T2","IfThenElse","If","Then","Else","PromiseOf","Promise","Writable","getTableColumns","table","getViewSelectedFields","view","ColumnsWithTable","TTableName","TForeignTableName","TColumns","tableName","Key","Casing","DrizzleConfig","TSchema","logger","schema","casing","ValidateShape","ValidShape","TResult","KnownKeysOnly","IsAny","IfNotImported","N","ImportTypeError","TPackageName","RequireAtLeastOne","Keys","Pick","Required","Omit","Partial","isConfig","data","NeonAuthToken","entityKind","Column","GelColumn","GelExtraConfigColumn","MySqlColumn","ExtraConfigColumn","PgColumn","PgSequenceOptions","SingleStoreColumn","SQL","SQLiteColumn","Assume","Simplify","ColumnDataType","Dialect","GeneratedStorageMode","GeneratedType","GeneratedColumnConfig","TDataType","as","type","mode","GeneratedIdentityConfig","sequenceName","sequenceOptions","ColumnBuilderBaseConfig","TColumnType","name","dataType","columnType","data","driverParam","enumValues","MakeColumnConfig","T","TTableName","TData","ColumnBuilderBase","U","BuildColumn","$type","tableName","notNull","hasDefault","isPrimaryKey","isAutoincrement","hasRuntimeDefault","baseColumn","baseBuilder","identity","generated","G","ColumnBuilderTypeConfig","TTypeConfig","brand","ColumnBuilderRuntimeConfig","TRuntimeConfig","keyAsName","default","defaultFn","onUpdateFn","primaryKey","isUnique","uniqueName","uniqueType","generatedIdentity","ColumnBuilderExtraConfig","primaryKeyHasDefault","NotNull","_","HasDefault","IsPrimaryKey","IsAutoincrement","HasRuntimeDefault","$Type","TType","HasGenerated","TGenerated","IsIdentity","ColumnBuilder","TExtraConfig","Partial","config","constructor","value","$defaultFn","fn","$default","$onUpdateFn","$onUpdate","generatedAlwaysAs","TBuilder","TDialect","Omit","BuildIndexColumn","BuildColumns","TConfigMap","Record","Key","BuildExtraConfigColumns","_TTableName","ChangeColumnTableName","TColumn","TAlias","ColumnBuilderBaseConfig","ColumnBuilderRuntimeConfig","ColumnDataType","GeneratedColumnConfig","GeneratedIdentityConfig","entityKind","DriverValueMapper","SQL","SQLWrapper","Table","Update","ColumnBaseConfig","TDataType","TColumnType","tableName","notNull","hasDefault","isPrimaryKey","isAutoincrement","hasRuntimeDefault","ColumnTypeConfig","T","TTypeConfig","brand","name","dataType","columnType","data","driverParam","enumValues","baseColumn","U","generated","identity","ColumnRuntimeConfig","TData","TRuntimeConfig","Column","table","_","keyAsName","primary","default","defaultFn","onUpdateFn","isUnique","uniqueName","uniqueType","generatedIdentity","config","constructor","getSQLType","mapFromDriverValue","value","mapToDriverValue","UpdateColConfig","TUpdate","Partial","AnyColumn","TPartial","Required","GetColumnData","TColumn","TInferMode","InferColumnsDataTypes","TColumns","Record","Key","AnyColumn","Column","SQL","Table","RequiredKeyOnly","TKey","T","notNull","hasDefault","OptionalKeyOnly","OverrideT","_","generated","SelectedFieldsFlat","TColumn","Aliased","Record","SelectedFieldsFlatFull","SelectedFields","TTable","SelectedFieldsOrdered","path","field","entityKind","PgSequenceOptions","increment","minValue","maxValue","startWith","cache","cycle","PgSequence","seqName","seqOptions","schema","constructor","pgSequence","name","options","isPgSequence","obj","BuildColumns","BuildExtraConfigColumns","entityKind","Table","TableConfig","TableConfigBase","UpdateTableConfig","CheckBuilder","PgColumnsBuilders","PgColumn","PgColumnBuilderBase","ForeignKeyBuilder","AnyIndexBuilder","PgPolicy","PrimaryKeyBuilder","UniqueConstraintBuilder","PgTableExtraConfigValue","PgTableExtraConfig","Record","PgTable","T","AnyPgTable","TPartial","Partial","PgTableWithColumns","Key","Omit","enableRLS","PgTableFn","TTableName","TColumnsMap","TSchema","name","columns","self","extraConfig","schema","dialect","columnTypes","pgTable","pgTableCreator","customizeTableName","ColumnBuilderBase","ColumnBuilderBaseConfig","ColumnBuilderExtraConfig","ColumnBuilderRuntimeConfig","ColumnDataType","HasGenerated","ColumnBuilder","ColumnBaseConfig","Column","entityKind","Simplify","Update","UpdateDeleteAction","AnyPgTable","PgTable","SQL","PgIndexOpClass","ReferenceConfig","PgColumn","ref","actions","onUpdate","onDelete","PgColumnBuilderBase","T","TTypeConfig","dialect","PgColumnBuilder","TSize","TRuntimeConfig","TExtraConfig","PgArrayBuilder","foreignKeyConfigs","array","size","name","dataType","columnType","data","driverParam","enumValues","baseBuilder","notNull","hasDefault","references","unique","nulls","config","generatedAlwaysAs","as","type","table","constructor","IndexedExtraConfigType","order","opClass","ExtraConfigColumn","Omit","getSQLType","indexConfig","defaultConfig","asc","desc","nullsFirst","nullsLast","op","IndexedColumn","keyAsName","AnyPgColumn","TPartial","Partial","Required","PgArrayColumnBuilderBaseConfig","TBase","TBaseBuilder","PgArray","baseColumn","range","mapFromDriverValue","value","mapToDriverValue","isNestedArray"],"sources":["../../../node_modules/drizzle-orm/entity.d.ts","../../../node_modules/drizzle-orm/casing.d.ts","../../../node_modules/drizzle-orm/subquery.d.ts","../../../node_modules/drizzle-orm/table.d.ts","../../../node_modules/drizzle-orm/query-builders/select.types.d.ts","../../../node_modules/drizzle-orm/sql/sql.d.ts","../../../node_modules/drizzle-orm/utils.d.ts","../../../node_modules/drizzle-orm/column-builder.d.ts","../../../node_modules/drizzle-orm/column.d.ts","../../../node_modules/drizzle-orm/operations.d.ts","../../../node_modules/drizzle-orm/pg-core/sequence.d.ts","../../../node_modules/drizzle-orm/pg-core/table.d.ts","../../../node_modules/drizzle-orm/pg-core/columns/common.d.ts","../../db/src/schema.ts","../../types/src/chat.ts","../src/auth/manager.ts","../src/workspace/manager.ts","../src/chat/namespace.ts","../src/files.ts","../src/use-subscription.ts"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { m as WorkspaceMember, p as Workspace } from "../types-
|
|
1
|
+
import { m as WorkspaceMember, p as Workspace } from "../types-pNWKJX38.js";
|
|
2
2
|
export { type Workspace, type WorkspaceMember };
|