@fine-dev/fine-js
Version:
Javascript client for Fine BaaS
53 lines (41 loc) • 1.99 kB
text/typescript
import FineAIClient from "./ai"
import D1RestClient, { GenericSchema } from "./d1"
import { createAuthClient } from "better-auth/react"
import FineStorageClient from "./storage"
import { FineTranscriber } from "./transcribe"
import { createOAuthApprovalHook } from "./oauth"
export type { EntityReference } from "./storage"
type FineConfig = {
restUrl: string
authUrl: string
aiUrl: string
storageUrl: string
transcribeUrl: string
mcpUrl: string
}
export class FineClient<Database extends GenericSchema = GenericSchema> extends D1RestClient<Database> {
auth: ReturnType<typeof createAuthClient>
useOAuthApproval: ReturnType<typeof createOAuthApprovalHook>
ai: FineAIClient
storage: FineStorageClient
/**
* @param config Path to the Fine API or a FineConfig object. Pass a string beginning with `/` to use the current origin with a path relative to it.
*/
constructor(private config: string | FineConfig) {
if (typeof config === "string" && config.startsWith("/")) config = location.origin + config
const d1RestUrl = typeof config === "string" ? config + "/db" : config.restUrl
super({ baseUrl: d1RestUrl })
const authUrl = typeof config === "string" ? config + "/auth" : config.authUrl
this.auth = createAuthClient({ baseURL: authUrl })
const mcpUrl = typeof config === "string" ? config + "/mcp" : config.mcpUrl
this.useOAuthApproval = createOAuthApprovalHook(mcpUrl)
const aiUrl = typeof config === "string" ? config + "/ai" : config.aiUrl
this.ai = new FineAIClient({ baseUrl: aiUrl })
const storageUrl = typeof config === "string" ? config + "/storage" : config.storageUrl
this.storage = new FineStorageClient({ baseUrl: storageUrl })
}
transcriber() {
const baseUrl = typeof this.config === "string" ? this.config + "/transcribe" : this.config.transcribeUrl
return new FineTranscriber({ baseUrl })
}
}