@nvwa-app/sdk-core 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +726 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +217 -0
- package/dist/index.d.mts +217 -0
- package/dist/index.d.ts +217 -0
- package/dist/index.mjs +705 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/auth.ts","../src/functions.ts","../src/http.ts","../src/file-storage.ts","../src/entities.ts","../src/fetch/common.ts","../src/fetch/request.ts","../src/fetch/response.ts","../src/fetch/abort.ts","../src/fetch/polyfill.ts"],"sourcesContent":["import { NvwaLocalStorage } from \"./local-storage\";\nimport { NvwaFetch } from \"./fetch\";\nimport type { BetterAuthClientOptions } from \"better-auth\";\nimport { createAuthClient } from \"better-auth/client\";\nimport { usernameClient } from \"better-auth/client/plugins\";\n\nexport const AUTH_BASE_PATH = \"/auth\";\nexport const LOGIN_TOKEN_KEY = \"nvwa_login_token\";\nexport const LOGIN_USER_PROFILE_KEY = \"nvwa_user_profile\";\n\nexport type AuthClient = ReturnType<\n typeof createAuthClient<BetterAuthClientOptions>\n>;\n\ntype SignInResult = ReturnType<\n ReturnType<\n typeof createAuthClient\n >[\"signIn\"][\"email\"]\n>;\n\nexport abstract class NvwaAuthClient {\n protected storage: NvwaLocalStorage;\n protected authClient: AuthClient;\n\n constructor(\n baseUrl: string,\n fetch: NvwaFetch,\n storage: NvwaLocalStorage,\n ) {\n this.storage = storage;\n this.authClient = createAuthClient({\n baseUrl,\n fetchOptions: {\n // @ts-ignore\n customFetchImpl: fetch,\n auth: {\n type: \"Bearer\",\n token: () => storage.get(LOGIN_TOKEN_KEY),\n },\n onSuccess: (ctx) => {\n const authToken = ctx.response.headers.get(\n \"set-auth-token\",\n );\n if (authToken) {\n storage.set(LOGIN_TOKEN_KEY, authToken);\n }\n },\n },\n plugins: [\n usernameClient(),\n ],\n });\n }\n\n async signInWithUsername(\n username: string,\n password: string,\n ): Promise<void> {\n const result = await (this.authClient.signIn as any).username({\n username,\n password,\n });\n this.saveSession(result);\n }\n\n saveSession(result: SignInResult) {\n if (result.error) {\n throw new Error(result.error.message);\n }\n this.storage.set(LOGIN_TOKEN_KEY, result.data?.token);\n this.storage.set(LOGIN_USER_PROFILE_KEY, result.data?.user);\n }\n\n async signOut() {\n await this.storage.remove(LOGIN_TOKEN_KEY);\n await this.storage.remove(LOGIN_USER_PROFILE_KEY);\n }\n\n async updateUserPassword(\n oldPassword: string,\n newPassword: string,\n revokeOtherSessions: boolean = false,\n ) {\n const result = await this.authClient.changePassword({\n currentPassword: oldPassword,\n newPassword,\n revokeOtherSessions,\n });\n this.saveSession(result);\n }\n}\n","import { NvwaHttpClient } from \"./http\";\n\nexport type FunctionInvokeOptions = {\n headers?: { [key: string]: string }\n method?: 'POST' | 'GET' | 'PUT' | 'PATCH' | 'DELETE'\n body?:\n | File\n | Blob\n | ArrayBuffer\n | FormData\n | ReadableStream<Uint8Array>\n | Record<string, any>\n | string\n}\n\nexport class NvwaEdgeFunctions {\n protected http: NvwaHttpClient;\n\n constructor(http: NvwaHttpClient) {\n this.http = http;\n }\n\n async invoke<T = any>(\n name: string,\n options: FunctionInvokeOptions,\n ) {\n const response = await this.http.request<T>(\n \"/functions/\" + name,\n {\n method: options.method || \"POST\",\n data: options.body,\n headers: options.headers,\n },\n );\n return response.body\n }\n}\n","export type HttpMethod =\n | \"GET\"\n | \"POST\"\n | \"PUT\"\n | \"DELETE\"\n | \"PATCH\"\n | \"OPTIONS\"\n | \"HEAD\";\n\nexport type HttpRequest = {\n method: string;\n data?: any;\n headers?: Record<string, string>;\n};\n\nexport type HttpResponse<T> = {\n status: number;\n body: T;\n headers: {\n [key: string]: string;\n };\n};\n\n// 兼容微信小程序环境的 Response 类\nexport class FetchResponse {\n public ok: boolean;\n public status: number;\n public statusText: string;\n public headers: Record<string, string>;\n public body: any;\n\n constructor(\n ok: boolean,\n status: number,\n statusText: string,\n headers: Record<string, string>,\n body: any\n ) {\n this.ok = ok;\n this.status = status;\n this.statusText = statusText;\n this.headers = headers;\n this.body = body;\n }\n\n async text(): Promise<string> {\n if (typeof this.body === 'string') {\n return this.body;\n }\n return JSON.stringify(this.body);\n }\n\n async json(): Promise<any> {\n if (typeof this.body === 'string') {\n try {\n return JSON.parse(this.body);\n } catch {\n return this.body;\n }\n }\n return this.body;\n }\n\n async arrayBuffer(): Promise<ArrayBuffer> {\n if (this.body instanceof ArrayBuffer) {\n return this.body;\n }\n if (typeof this.body === 'string') {\n const encoder = new TextEncoder();\n return encoder.encode(this.body).buffer as ArrayBuffer;\n }\n throw new Error('Cannot convert body to ArrayBuffer');\n }\n\n async blob(): Promise<Blob> {\n if (this.body instanceof Blob) {\n return this.body;\n }\n if (typeof this.body === 'string') {\n return new Blob([this.body], { type: this.headers['content-type'] || 'text/plain' });\n }\n throw new Error('Cannot convert body to Blob');\n }\n}\n\nexport abstract class NvwaHttpClient {\n abstract request<T>(\n url: string | URL,\n request: HttpRequest,\n ): Promise<HttpResponse<T>>;\n\n abstract requestWithAuth<T>(\n url: string | URL,\n request: HttpRequest,\n handleUnauthorized: () => void,\n ): Promise<HttpResponse<T>>;\n\n // 便捷方法:发送 JSON 请求\n async jsonRequest<T>(\n url: string | URL,\n request: HttpRequest,\n ): Promise<HttpResponse<T>> {\n const jsonRequest: HttpRequest = {\n ...request,\n headers: {\n 'Content-Type': 'application/json',\n ...request.headers,\n },\n data: typeof request.data === 'object' ? JSON.stringify(request.data) : request.data,\n };\n return this.request<T>(url, jsonRequest);\n }\n\n // 便捷方法:发送带认证的 JSON 请求\n async jsonRequestWithAuth<T>(\n url: string | URL,\n request: HttpRequest,\n handleUnauthorized: () => void,\n ): Promise<HttpResponse<T>> {\n const jsonRequest: HttpRequest = {\n ...request,\n headers: {\n 'Content-Type': 'application/json',\n ...request.headers,\n },\n data: typeof request.data === 'object' ? JSON.stringify(request.data) : request.data,\n };\n return this.requestWithAuth<T>(url, jsonRequest, handleUnauthorized);\n }\n}\n","import { NvwaHttpClient } from \"./http\";\n\nexport type HttpUploadFileResponse = {\n url: string;\n};\n\nexport const FILE_STORAGE_BASE_PATH = \"/storage\";\nexport const GENERATE_UPLOAD_URL_PATH = FILE_STORAGE_BASE_PATH +\n \"/generateUploadUrl\";\n\nexport class NvwaFileStorage {\n private baseUrl: string;\n private http: NvwaHttpClient;\n\n constructor(baseUrl: string, http: NvwaHttpClient) {\n this.baseUrl = baseUrl;\n this.http = http;\n }\n\n async uploadFile(\n file: any,\n ): Promise<HttpUploadFileResponse> {\n const uploadUrlResponse = await this.http.request<\n HttpUploadFileResponse\n >(\n this.baseUrl + GENERATE_UPLOAD_URL_PATH,\n {\n method: \"POST\",\n data: {\n fileName: file.name || file.fileName,\n fileSize: file.size || file.fileSize,\n fileType: file.type || file.fileType,\n },\n },\n );\n\n const { url: uploadUrl } = uploadUrlResponse.body;\n\n if (!uploadUrl) {\n throw new Error(\"获取上传URL失败\");\n }\n\n const uploadResult = await this.http.request<\n HttpUploadFileResponse\n >(\n uploadUrl,\n {\n method: \"PUT\",\n data: file,\n headers: {\n \"Content-Type\": file.type || file.fileType ||\n \"application/octet-stream\",\n },\n },\n );\n const fileUrl = uploadResult.body.url.split(\"?\")[0]; // 去掉查询参数,返回文件路径\n return { url: fileUrl };\n }\n}\n","import {\n FetchResponse,\n PostgrestClient,\n PostgrestFetch,\n URL,\n} from \"@nvwa-app/postgrest-js\";\nimport { NvwaHttpClient } from \"./http\";\n\nexport const ENTITIES_BASE_PATH = \"/entities\";\n\nconst buildPostgrestFetch = (\n httpClient: NvwaHttpClient,\n handleUnauthorized: () => void,\n): PostgrestFetch => {\n const customFetch: PostgrestFetch = async (\n input: string | URL | Request,\n init?: RequestInit,\n ): Promise<FetchResponse> => {\n console.log(\"customFetch\", input, init);\n let url: string;\n\n if (typeof input === \"string\") {\n url = input;\n } else if (input && typeof input === \"object\") {\n if (typeof input.toString === \"function\" && !(input as any).url) {\n url = input.toString();\n } else if ((input as any).url) {\n url = (input as any).url;\n if (!init) {\n init = {};\n }\n init.method = (input as any).method;\n init.headers = (input as any).headers;\n init.body = (input as any).body;\n } else {\n throw new Error(\"Unsupported input type for fetch\");\n }\n } else {\n throw new Error(\"Unsupported input type for fetch\");\n }\n\n const method = (init?.method || \"GET\").toUpperCase();\n const headers: Record<string, string> = {};\n if (init?.headers) {\n // 检查是否是 Headers 对象(避免 instanceof 检查)\n if (init.headers && typeof init.headers.forEach === \"function\") {\n (init.headers as any).forEach((v: string, k: string) => {\n headers[k] = v;\n });\n } else if (Array.isArray(init.headers)) {\n for (const [k, v] of init.headers) headers[k] = v as string;\n } else {\n Object.assign(headers, init.headers);\n }\n }\n\n // body: 处理为合适的类型,Text/Blob/Buffer...\n let body: any = init?.body;\n\n // 处理 requestWithAuth,401 调 handleUnauthorized\n let response;\n try {\n response = await httpClient.requestWithAuth(url, {\n method,\n data: body,\n headers,\n }, handleUnauthorized);\n } catch (e: any) {\n // 返回一个 500 的 Response,兼容微信小程序环境\n return new FetchResponse(e?.message || \"Internal Error\", {\n status: 500,\n statusText: \"Internal Error\",\n });\n }\n\n // 封装成 fetch 的 Response 对象,兼容微信小程序环境\n let responseBody = response.body;\n let responseData: any = null;\n const contentType = response.headers[\"content-type\"] ||\n response.headers[\"Content-Type\"] || \"\";\n\n if (\n contentType.startsWith(\"application/json\") &&\n typeof responseBody !== \"string\"\n ) {\n responseData = JSON.stringify(responseBody);\n } else if (typeof responseBody === \"string\") {\n responseData = responseBody;\n } else if (\n responseBody &&\n (responseBody.constructor === Blob ||\n responseBody.constructor === ArrayBuffer ||\n (typeof (responseBody as any).getReader === \"function\")) // ReadableStream\n ) {\n responseData = responseBody;\n } else {\n // fallback\n responseData = JSON.stringify(responseBody);\n }\n\n return new FetchResponse(responseData, {\n status: response.status,\n headers: response.headers,\n });\n };\n return customFetch;\n};\n\nexport const createPostgrestClient = (\n baseUrl: string,\n httpClient: NvwaHttpClient,\n handleUnauthorized: () => void,\n) => {\n return new PostgrestClient(baseUrl + ENTITIES_BASE_PATH, {\n fetch: buildPostgrestFetch(httpClient, handleUnauthorized),\n });\n};\n","export class Headers {\n private readonly headerMap: Map<string, string> = new Map();\n\n constructor(init?: Headers | Record<string, string> | [string, string][]) {\n if (!init) return;\n if (init instanceof Headers) {\n init.forEach((v, k) => this.set(k, v));\n } else if (Array.isArray(init)) {\n for (const [k, v] of init) this.set(k, String(v));\n } else if (typeof init === \"object\") {\n for (const k of Object.keys(init)) this.set(k, String((init as any)[k]));\n }\n }\n\n append(name: string, value: string): void {\n const key = name.toLowerCase();\n const existing = this.headerMap.get(key);\n this.headerMap.set(key, existing ? `${existing}, ${value}` : value);\n }\n\n set(name: string, value: string): void {\n this.headerMap.set(name.toLowerCase(), String(value));\n }\n\n get(name: string): string | null {\n const v = this.headerMap.get(name.toLowerCase());\n return v == null ? null : v;\n }\n\n has(name: string): boolean {\n return this.headerMap.has(name.toLowerCase());\n }\n\n delete(name: string): void {\n this.headerMap.delete(name.toLowerCase());\n }\n\n forEach(callback: (value: string, key: string, parent: Headers) => void): void {\n for (const [k, v] of this.headerMap.entries()) callback(v, k, this);\n }\n\n entries(): IterableIterator<[string, string]> {\n return this.headerMap.entries();\n }\n\n keys(): IterableIterator<string> {\n return this.headerMap.keys();\n }\n\n values(): IterableIterator<string> {\n return this.headerMap.values();\n }\n\n [Symbol.iterator](): IterableIterator<[string, string]> {\n return this.entries();\n }\n}\n\nexport class URLSearchParams {\n private params = new Map<string, string[]>();\n\n constructor(\n init?:\n | string\n | URLSearchParams\n | Record<string, string>\n | [string, string][]\n | Iterable<[string, string]>,\n ) {\n if (init) {\n if (typeof init === \"string\") {\n this.parseString(init);\n } else if (init instanceof URLSearchParams) {\n this.params = new Map(init.params);\n } else if (Array.isArray(init)) {\n for (const [key, value] of init) {\n this.append(key, value);\n }\n } else if (init && typeof init === \"object\") {\n for (const [key, value] of Object.entries(init)) {\n this.set(key, value);\n }\n }\n }\n }\n\n private parseString(search: string): void {\n if (search.startsWith(\"?\")) {\n search = search.slice(1);\n }\n\n const pairs = search.split(\"&\");\n for (const pair of pairs) {\n if (pair) {\n const [key, value] = pair.split(\"=\");\n if (key) {\n this.append(\n decodeURIComponent(key),\n value ? decodeURIComponent(value) : \"\",\n );\n }\n }\n }\n }\n\n append(name: string, value: string): void {\n const existing = this.params.get(name) || [];\n existing.push(value);\n this.params.set(name, existing);\n }\n\n delete(name: string): void {\n this.params.delete(name);\n }\n\n get(name: string): string | null {\n const values = this.params.get(name);\n return values ? values[0] : null;\n }\n\n getAll(name: string): string[] {\n return this.params.get(name) || [];\n }\n\n has(name: string): boolean {\n return this.params.has(name);\n }\n\n set(name: string, value: string): void {\n this.params.set(name, [value]);\n }\n\n sort(): void {\n const sortedEntries = Array.from(this.params.entries()).sort((\n [a],\n [b],\n ) => a.localeCompare(b));\n this.params = new Map(sortedEntries);\n }\n\n toString(): string {\n const pairs: string[] = [];\n for (const [name, values] of this.params.entries()) {\n for (const value of values) {\n pairs.push(\n `${encodeURIComponent(name)}=${encodeURIComponent(value)}`,\n );\n }\n }\n return pairs.join(\"&\");\n }\n\n forEach(\n callback: (value: string, key: string, parent: URLSearchParams) => void,\n ): void {\n for (const [name, values] of this.params.entries()) {\n for (const value of values) {\n callback(value, name, this);\n }\n }\n }\n\n keys(): IterableIterator<string> {\n return this.params.keys();\n }\n\n values(): IterableIterator<string> {\n const allValues: string[] = [];\n for (const values of this.params.values()) {\n allValues.push(...values);\n }\n return allValues[Symbol.iterator]();\n }\n\n entries(): IterableIterator<[string, string]> {\n const allEntries: [string, string][] = [];\n for (const [name, values] of this.params.entries()) {\n for (const value of values) {\n allEntries.push([name, value]);\n }\n }\n return allEntries[Symbol.iterator]();\n }\n\n [Symbol.iterator](): IterableIterator<[string, string]> {\n return this.entries();\n }\n\n get size(): number {\n return this.params.size;\n }\n}\n\nexport class URL {\n public readonly href: string;\n public readonly origin: string;\n public readonly protocol: string;\n public readonly username: string;\n public readonly password: string;\n public readonly host: string;\n public readonly hostname: string;\n public readonly port: string;\n public readonly pathname: string;\n public readonly search: string;\n public readonly searchParams: URLSearchParams;\n public readonly hash: string;\n\n constructor(url: string | URL, base?: string | URL) {\n let urlString: string;\n\n if (url instanceof URL) {\n urlString = url.href;\n } else if (base) {\n const baseUrl = base instanceof URL ? base.href : base;\n urlString = this.resolve(baseUrl, url);\n } else {\n urlString = url;\n }\n\n const parsed = this.parseUrl(urlString);\n\n this.href = urlString;\n this.origin = `${parsed.protocol}//${parsed.host}`;\n this.protocol = parsed.protocol;\n this.username = parsed.username;\n this.password = parsed.password;\n this.host = parsed.host;\n this.hostname = parsed.hostname;\n this.port = parsed.port;\n this.pathname = parsed.pathname;\n this.search = parsed.search;\n this.searchParams = new URLSearchParams(parsed.search);\n this.hash = parsed.hash;\n }\n\n private resolve(base: string, relative: string): string {\n // 简化的 URL 解析逻辑\n if (relative.startsWith(\"http://\") || relative.startsWith(\"https://\")) {\n return relative;\n }\n\n if (relative.startsWith(\"//\")) {\n const baseParsed = this.parseUrl(base);\n return `${baseParsed.protocol}${relative}`;\n }\n\n if (relative.startsWith(\"/\")) {\n const baseParsed = this.parseUrl(base);\n return `${baseParsed.protocol}//${baseParsed.host}${relative}`;\n }\n\n // 相对路径处理\n const baseParsed = this.parseUrl(base);\n const basePath = baseParsed.pathname.endsWith(\"/\")\n ? baseParsed.pathname\n : baseParsed.pathname + \"/\";\n return `${baseParsed.protocol}//${baseParsed.host}${basePath}${relative}`;\n }\n\n private parseUrl(url: string): {\n protocol: string;\n username: string;\n password: string;\n host: string;\n hostname: string;\n port: string;\n pathname: string;\n search: string;\n hash: string;\n } {\n // 简化的 URL 解析\n const urlMatch = url.match(\n /^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/,\n );\n\n if (!urlMatch) {\n throw new TypeError(\"Invalid URL\");\n }\n\n const protocol = urlMatch[2] || \"\";\n const authority = urlMatch[4] || \"\";\n const pathname = urlMatch[5] || \"/\";\n const search = urlMatch[7] ? `?${urlMatch[7]}` : \"\";\n const hash = urlMatch[9] ? `#${urlMatch[9]}` : \"\";\n\n // 基本验证:如果 URL 看起来无效,抛出错误\n if (!protocol && !authority && !pathname.startsWith(\"/\")) {\n // 检查是否是相对路径(允许)\n if (!pathname.includes(\"/\") && !pathname.includes(\".\")) {\n // 这可能是无效的 URL\n throw new TypeError(\"Invalid URL\");\n }\n }\n\n // 解析 authority (host:port)\n const authMatch = authority.match(/^([^@]*)@(.+)$/);\n let username = \"\";\n let password = \"\";\n let host = authority;\n\n if (authMatch) {\n const userInfo = authMatch[1];\n host = authMatch[2];\n\n const userMatch = userInfo.match(/^([^:]*):?(.*)$/);\n if (userMatch) {\n username = userMatch[1] || \"\";\n password = userMatch[2] || \"\";\n }\n }\n\n // 解析 host:port\n const hostMatch = host.match(/^([^:]+):?(\\d*)$/);\n const hostname = hostMatch ? hostMatch[1] : host;\n const port = hostMatch && hostMatch[2] ? hostMatch[2] : \"\";\n\n return {\n protocol: protocol ? `${protocol}:` : \"\",\n username,\n password,\n host,\n hostname,\n port,\n pathname,\n search,\n hash,\n };\n }\n\n toString(): string {\n const searchString = this.searchParams.toString();\n const search = searchString ? `?${searchString}` : \"\";\n return `${this.protocol}//${this.host}${this.pathname}${search}${this.hash}`;\n }\n\n toJSON(): string {\n return this.toString();\n }\n}\n","import { Headers } from \"./common\";\n\nexport interface RequestInit {\n method?: string;\n headers?: Headers;\n body?: any;\n // 额外:在本库中使用的超时时间\n timeout?: number;\n // 兼容标准 fetch:中止信号(可选)\n signal?: { aborted: boolean; addEventListener: Function } | null;\n}\n\nexport type RequestInfo = string | { url?: string } | URL;\n\nexport class Request {\n readonly url: string;\n readonly method: string;\n readonly headers: Headers;\n readonly body?: any;\n readonly timeout?: number;\n readonly signal?: any;\n\n constructor(input: RequestInfo, init?: RequestInit) {\n if (typeof input === \"string\") {\n this.url = input;\n } else if ((input as any)?.url) {\n this.url = String((input as any).url);\n } else if (typeof (input as any)?.toString === \"function\") {\n this.url = String((input as any).toString());\n } else {\n throw new Error(\"Invalid input for Request\");\n }\n\n this.method = (init?.method || \"GET\").toUpperCase();\n this.headers = init?.headers instanceof Headers\n ? init.headers\n : new Headers(init?.headers as any);\n this.body = init?.body;\n this.timeout = init?.timeout;\n this.signal = (init as any)?.signal || undefined;\n }\n\n clone(): Request {\n return new Request(this.url, {\n method: this.method,\n headers: this.headers,\n body: this.body,\n timeout: this.timeout,\n });\n }\n\n toString(): string {\n return this.url;\n }\n}\n","import { Headers } from \"./common\";\n\nexport interface ResponseInit {\n status?: number;\n statusText?: string;\n headers?: Headers;\n}\n\nexport class Response {\n private readonly bodyData: any;\n readonly status: number;\n readonly statusText: string;\n readonly headers: Headers;\n readonly ok: boolean;\n\n constructor(body?: any, init?: ResponseInit) {\n this.bodyData = body;\n this.status = init?.status ?? 200;\n this.statusText = init?.statusText ?? \"\";\n this.headers = normalizeHeaders(init?.headers);\n this.ok = this.status >= 200 && this.status < 300;\n }\n\n async text(): Promise<string> {\n if (typeof this.bodyData === \"string\") return this.bodyData;\n if (this.bodyData == null) return \"\";\n if (typeof this.bodyData === \"object\") return JSON.stringify(this.bodyData);\n return String(this.bodyData);\n }\n\n async json<T = unknown>(): Promise<T> {\n if (typeof this.bodyData === \"string\") {\n try { return JSON.parse(this.bodyData) as T; } catch { /* ignore */ }\n }\n return this.bodyData as T;\n }\n\n async arrayBuffer(): Promise<ArrayBuffer> {\n const text = await this.text();\n const encoder = new TextEncoder();\n return encoder.encode(text).buffer;\n }\n}\n\nfunction normalizeHeaders(h?: Headers): Headers {\n if (!h) return new Headers();\n return new Headers(h);\n}\n\nexport default Response;\n","type AbortListener = () => void\n\nexport class AbortSignal {\n private _aborted = false\n private listeners: Set<AbortListener> = new Set()\n onabort: AbortListener | null = null\n\n get aborted(): boolean {\n return this._aborted\n }\n\n // 供控制器触发\n _trigger(): void {\n if (this._aborted) return\n this._aborted = true\n if (typeof this.onabort === \"function\") {\n try { this.onabort() } catch {}\n }\n // 按序调用监听器\n for (const l of Array.from(this.listeners)) {\n try { l() } catch {}\n }\n this.listeners.clear()\n }\n\n addEventListener(_: \"abort\", listener: AbortListener): void {\n if (this._aborted) {\n // 已中止则立即调用一次,兼容期望行为\n try { listener() } catch {}\n return\n }\n this.listeners.add(listener)\n }\n\n removeEventListener(_: \"abort\", listener: AbortListener): void {\n this.listeners.delete(listener)\n }\n\n toString(): string {\n return \"[object AbortSignal]\"\n }\n}\n\nexport class AbortController {\n private _signal: AbortSignal\n\n constructor() {\n this._signal = new AbortSignal()\n }\n\n get signal(): AbortSignal {\n return this._signal\n }\n\n abort(): void {\n this._signal._trigger()\n }\n\n toString(): string {\n return \"[object AbortController]\"\n }\n}","import { Headers, URL, URLSearchParams } from \"./common\";\nimport { Request } from \"./request\";\nimport { Response } from \"./response\";\nimport { AbortController, AbortSignal } from \"./abort\";\n\nexport function polyfill(_global: any) {\n _global.URL = URL;\n _global.URLSearchParams = URLSearchParams;\n _global.Headers = Headers;\n _global.Request = Request;\n _global.Response = Response;\n _global.AbortController = AbortController;\n _global.AbortSignal = AbortSignal;\n}\n"],"names":["__publicField","createAuthClient","usernameClient","FetchResponse","PostgrestClient","baseParsed"],"mappings":"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"}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import * as _nvwa_app_postgrest_js from '@nvwa-app/postgrest-js';
|
|
2
|
+
import { PostgrestClient } from '@nvwa-app/postgrest-js';
|
|
3
|
+
import { BetterAuthClientOptions } from 'better-auth';
|
|
4
|
+
import { createAuthClient } from 'better-auth/client';
|
|
5
|
+
|
|
6
|
+
interface NvwaLocalStorage {
|
|
7
|
+
get(key: string): Promise<any | null>;
|
|
8
|
+
/**
|
|
9
|
+
* @param expires 过期时间(秒),可选
|
|
10
|
+
*/
|
|
11
|
+
set(key: string, value: any, expires?: number): Promise<void>;
|
|
12
|
+
remove(key: string): Promise<void>;
|
|
13
|
+
clear(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
declare class Headers {
|
|
17
|
+
private readonly headerMap;
|
|
18
|
+
constructor(init?: Headers | Record<string, string> | [string, string][]);
|
|
19
|
+
append(name: string, value: string): void;
|
|
20
|
+
set(name: string, value: string): void;
|
|
21
|
+
get(name: string): string | null;
|
|
22
|
+
has(name: string): boolean;
|
|
23
|
+
delete(name: string): void;
|
|
24
|
+
forEach(callback: (value: string, key: string, parent: Headers) => void): void;
|
|
25
|
+
entries(): IterableIterator<[string, string]>;
|
|
26
|
+
keys(): IterableIterator<string>;
|
|
27
|
+
values(): IterableIterator<string>;
|
|
28
|
+
[Symbol.iterator](): IterableIterator<[string, string]>;
|
|
29
|
+
}
|
|
30
|
+
declare class URLSearchParams {
|
|
31
|
+
private params;
|
|
32
|
+
constructor(init?: string | URLSearchParams | Record<string, string> | [string, string][] | Iterable<[string, string]>);
|
|
33
|
+
private parseString;
|
|
34
|
+
append(name: string, value: string): void;
|
|
35
|
+
delete(name: string): void;
|
|
36
|
+
get(name: string): string | null;
|
|
37
|
+
getAll(name: string): string[];
|
|
38
|
+
has(name: string): boolean;
|
|
39
|
+
set(name: string, value: string): void;
|
|
40
|
+
sort(): void;
|
|
41
|
+
toString(): string;
|
|
42
|
+
forEach(callback: (value: string, key: string, parent: URLSearchParams) => void): void;
|
|
43
|
+
keys(): IterableIterator<string>;
|
|
44
|
+
values(): IterableIterator<string>;
|
|
45
|
+
entries(): IterableIterator<[string, string]>;
|
|
46
|
+
[Symbol.iterator](): IterableIterator<[string, string]>;
|
|
47
|
+
get size(): number;
|
|
48
|
+
}
|
|
49
|
+
declare class URL$1 {
|
|
50
|
+
readonly href: string;
|
|
51
|
+
readonly origin: string;
|
|
52
|
+
readonly protocol: string;
|
|
53
|
+
readonly username: string;
|
|
54
|
+
readonly password: string;
|
|
55
|
+
readonly host: string;
|
|
56
|
+
readonly hostname: string;
|
|
57
|
+
readonly port: string;
|
|
58
|
+
readonly pathname: string;
|
|
59
|
+
readonly search: string;
|
|
60
|
+
readonly searchParams: URLSearchParams;
|
|
61
|
+
readonly hash: string;
|
|
62
|
+
constructor(url: string | URL$1, base?: string | URL$1);
|
|
63
|
+
private resolve;
|
|
64
|
+
private parseUrl;
|
|
65
|
+
toString(): string;
|
|
66
|
+
toJSON(): string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
interface RequestInit {
|
|
70
|
+
method?: string;
|
|
71
|
+
headers?: Headers;
|
|
72
|
+
body?: any;
|
|
73
|
+
timeout?: number;
|
|
74
|
+
signal?: {
|
|
75
|
+
aborted: boolean;
|
|
76
|
+
addEventListener: Function;
|
|
77
|
+
} | null;
|
|
78
|
+
}
|
|
79
|
+
type RequestInfo = string | {
|
|
80
|
+
url?: string;
|
|
81
|
+
} | URL;
|
|
82
|
+
declare class Request {
|
|
83
|
+
readonly url: string;
|
|
84
|
+
readonly method: string;
|
|
85
|
+
readonly headers: Headers;
|
|
86
|
+
readonly body?: any;
|
|
87
|
+
readonly timeout?: number;
|
|
88
|
+
readonly signal?: any;
|
|
89
|
+
constructor(input: RequestInfo, init?: RequestInit);
|
|
90
|
+
clone(): Request;
|
|
91
|
+
toString(): string;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
interface ResponseInit {
|
|
95
|
+
status?: number;
|
|
96
|
+
statusText?: string;
|
|
97
|
+
headers?: Headers;
|
|
98
|
+
}
|
|
99
|
+
declare class Response {
|
|
100
|
+
private readonly bodyData;
|
|
101
|
+
readonly status: number;
|
|
102
|
+
readonly statusText: string;
|
|
103
|
+
readonly headers: Headers;
|
|
104
|
+
readonly ok: boolean;
|
|
105
|
+
constructor(body?: any, init?: ResponseInit);
|
|
106
|
+
text(): Promise<string>;
|
|
107
|
+
json<T = unknown>(): Promise<T>;
|
|
108
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
type AbortListener = () => void;
|
|
112
|
+
declare class AbortSignal {
|
|
113
|
+
private _aborted;
|
|
114
|
+
private listeners;
|
|
115
|
+
onabort: AbortListener | null;
|
|
116
|
+
get aborted(): boolean;
|
|
117
|
+
_trigger(): void;
|
|
118
|
+
addEventListener(_: "abort", listener: AbortListener): void;
|
|
119
|
+
removeEventListener(_: "abort", listener: AbortListener): void;
|
|
120
|
+
toString(): string;
|
|
121
|
+
}
|
|
122
|
+
declare class AbortController {
|
|
123
|
+
private _signal;
|
|
124
|
+
constructor();
|
|
125
|
+
get signal(): AbortSignal;
|
|
126
|
+
abort(): void;
|
|
127
|
+
toString(): string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
declare function polyfill(_global: any): void;
|
|
131
|
+
|
|
132
|
+
type NvwaFetch = (input: string | URL$1 | RequestInfo, init?: RequestInit) => Promise<Response>;
|
|
133
|
+
|
|
134
|
+
declare const AUTH_BASE_PATH = "/auth";
|
|
135
|
+
declare const LOGIN_TOKEN_KEY = "nvwa_login_token";
|
|
136
|
+
declare const LOGIN_USER_PROFILE_KEY = "nvwa_user_profile";
|
|
137
|
+
type AuthClient = ReturnType<typeof createAuthClient<BetterAuthClientOptions>>;
|
|
138
|
+
type SignInResult = ReturnType<ReturnType<typeof createAuthClient>["signIn"]["email"]>;
|
|
139
|
+
declare abstract class NvwaAuthClient {
|
|
140
|
+
protected storage: NvwaLocalStorage;
|
|
141
|
+
protected authClient: AuthClient;
|
|
142
|
+
constructor(baseUrl: string, fetch: NvwaFetch, storage: NvwaLocalStorage);
|
|
143
|
+
signInWithUsername(username: string, password: string): Promise<void>;
|
|
144
|
+
saveSession(result: SignInResult): void;
|
|
145
|
+
signOut(): Promise<void>;
|
|
146
|
+
updateUserPassword(oldPassword: string, newPassword: string, revokeOtherSessions?: boolean): Promise<void>;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD";
|
|
150
|
+
type HttpRequest = {
|
|
151
|
+
method: string;
|
|
152
|
+
data?: any;
|
|
153
|
+
headers?: Record<string, string>;
|
|
154
|
+
};
|
|
155
|
+
type HttpResponse<T> = {
|
|
156
|
+
status: number;
|
|
157
|
+
body: T;
|
|
158
|
+
headers: {
|
|
159
|
+
[key: string]: string;
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
declare class FetchResponse {
|
|
163
|
+
ok: boolean;
|
|
164
|
+
status: number;
|
|
165
|
+
statusText: string;
|
|
166
|
+
headers: Record<string, string>;
|
|
167
|
+
body: any;
|
|
168
|
+
constructor(ok: boolean, status: number, statusText: string, headers: Record<string, string>, body: any);
|
|
169
|
+
text(): Promise<string>;
|
|
170
|
+
json(): Promise<any>;
|
|
171
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
172
|
+
blob(): Promise<Blob>;
|
|
173
|
+
}
|
|
174
|
+
declare abstract class NvwaHttpClient {
|
|
175
|
+
abstract request<T>(url: string | URL, request: HttpRequest): Promise<HttpResponse<T>>;
|
|
176
|
+
abstract requestWithAuth<T>(url: string | URL, request: HttpRequest, handleUnauthorized: () => void): Promise<HttpResponse<T>>;
|
|
177
|
+
jsonRequest<T>(url: string | URL, request: HttpRequest): Promise<HttpResponse<T>>;
|
|
178
|
+
jsonRequestWithAuth<T>(url: string | URL, request: HttpRequest, handleUnauthorized: () => void): Promise<HttpResponse<T>>;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
type HttpUploadFileResponse = {
|
|
182
|
+
url: string;
|
|
183
|
+
};
|
|
184
|
+
declare const FILE_STORAGE_BASE_PATH = "/storage";
|
|
185
|
+
declare const GENERATE_UPLOAD_URL_PATH: string;
|
|
186
|
+
declare class NvwaFileStorage {
|
|
187
|
+
private baseUrl;
|
|
188
|
+
private http;
|
|
189
|
+
constructor(baseUrl: string, http: NvwaHttpClient);
|
|
190
|
+
uploadFile(file: any): Promise<HttpUploadFileResponse>;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
type FunctionInvokeOptions = {
|
|
194
|
+
headers?: {
|
|
195
|
+
[key: string]: string;
|
|
196
|
+
};
|
|
197
|
+
method?: 'POST' | 'GET' | 'PUT' | 'PATCH' | 'DELETE';
|
|
198
|
+
body?: File | Blob | ArrayBuffer | FormData | ReadableStream<Uint8Array> | Record<string, any> | string;
|
|
199
|
+
};
|
|
200
|
+
declare class NvwaEdgeFunctions {
|
|
201
|
+
protected http: NvwaHttpClient;
|
|
202
|
+
constructor(http: NvwaHttpClient);
|
|
203
|
+
invoke<T = any>(name: string, options: FunctionInvokeOptions): Promise<T>;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
declare const ENTITIES_BASE_PATH = "/entities";
|
|
207
|
+
declare const createPostgrestClient: (baseUrl: string, httpClient: NvwaHttpClient, handleUnauthorized: () => void) => PostgrestClient<any, {} | _nvwa_app_postgrest_js.PostgrestClientOptions, "public", any>;
|
|
208
|
+
|
|
209
|
+
interface INvwa {
|
|
210
|
+
entities: PostgrestClient;
|
|
211
|
+
auth: NvwaAuthClient;
|
|
212
|
+
functions: NvwaEdgeFunctions;
|
|
213
|
+
fileStorage: NvwaFileStorage;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export { AUTH_BASE_PATH, AbortController, AbortSignal, ENTITIES_BASE_PATH, FILE_STORAGE_BASE_PATH, FetchResponse, GENERATE_UPLOAD_URL_PATH, Headers, LOGIN_TOKEN_KEY, LOGIN_USER_PROFILE_KEY, NvwaAuthClient, NvwaEdgeFunctions, NvwaFileStorage, NvwaHttpClient, Request, Response, URL$1 as URL, URLSearchParams, createPostgrestClient, polyfill };
|
|
217
|
+
export type { AuthClient, FunctionInvokeOptions, HttpMethod, HttpRequest, HttpResponse, HttpUploadFileResponse, INvwa, NvwaFetch, NvwaLocalStorage, RequestInfo, RequestInit, ResponseInit };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import * as _nvwa_app_postgrest_js from '@nvwa-app/postgrest-js';
|
|
2
|
+
import { PostgrestClient } from '@nvwa-app/postgrest-js';
|
|
3
|
+
import { BetterAuthClientOptions } from 'better-auth';
|
|
4
|
+
import { createAuthClient } from 'better-auth/client';
|
|
5
|
+
|
|
6
|
+
interface NvwaLocalStorage {
|
|
7
|
+
get(key: string): Promise<any | null>;
|
|
8
|
+
/**
|
|
9
|
+
* @param expires 过期时间(秒),可选
|
|
10
|
+
*/
|
|
11
|
+
set(key: string, value: any, expires?: number): Promise<void>;
|
|
12
|
+
remove(key: string): Promise<void>;
|
|
13
|
+
clear(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
declare class Headers {
|
|
17
|
+
private readonly headerMap;
|
|
18
|
+
constructor(init?: Headers | Record<string, string> | [string, string][]);
|
|
19
|
+
append(name: string, value: string): void;
|
|
20
|
+
set(name: string, value: string): void;
|
|
21
|
+
get(name: string): string | null;
|
|
22
|
+
has(name: string): boolean;
|
|
23
|
+
delete(name: string): void;
|
|
24
|
+
forEach(callback: (value: string, key: string, parent: Headers) => void): void;
|
|
25
|
+
entries(): IterableIterator<[string, string]>;
|
|
26
|
+
keys(): IterableIterator<string>;
|
|
27
|
+
values(): IterableIterator<string>;
|
|
28
|
+
[Symbol.iterator](): IterableIterator<[string, string]>;
|
|
29
|
+
}
|
|
30
|
+
declare class URLSearchParams {
|
|
31
|
+
private params;
|
|
32
|
+
constructor(init?: string | URLSearchParams | Record<string, string> | [string, string][] | Iterable<[string, string]>);
|
|
33
|
+
private parseString;
|
|
34
|
+
append(name: string, value: string): void;
|
|
35
|
+
delete(name: string): void;
|
|
36
|
+
get(name: string): string | null;
|
|
37
|
+
getAll(name: string): string[];
|
|
38
|
+
has(name: string): boolean;
|
|
39
|
+
set(name: string, value: string): void;
|
|
40
|
+
sort(): void;
|
|
41
|
+
toString(): string;
|
|
42
|
+
forEach(callback: (value: string, key: string, parent: URLSearchParams) => void): void;
|
|
43
|
+
keys(): IterableIterator<string>;
|
|
44
|
+
values(): IterableIterator<string>;
|
|
45
|
+
entries(): IterableIterator<[string, string]>;
|
|
46
|
+
[Symbol.iterator](): IterableIterator<[string, string]>;
|
|
47
|
+
get size(): number;
|
|
48
|
+
}
|
|
49
|
+
declare class URL$1 {
|
|
50
|
+
readonly href: string;
|
|
51
|
+
readonly origin: string;
|
|
52
|
+
readonly protocol: string;
|
|
53
|
+
readonly username: string;
|
|
54
|
+
readonly password: string;
|
|
55
|
+
readonly host: string;
|
|
56
|
+
readonly hostname: string;
|
|
57
|
+
readonly port: string;
|
|
58
|
+
readonly pathname: string;
|
|
59
|
+
readonly search: string;
|
|
60
|
+
readonly searchParams: URLSearchParams;
|
|
61
|
+
readonly hash: string;
|
|
62
|
+
constructor(url: string | URL$1, base?: string | URL$1);
|
|
63
|
+
private resolve;
|
|
64
|
+
private parseUrl;
|
|
65
|
+
toString(): string;
|
|
66
|
+
toJSON(): string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
interface RequestInit {
|
|
70
|
+
method?: string;
|
|
71
|
+
headers?: Headers;
|
|
72
|
+
body?: any;
|
|
73
|
+
timeout?: number;
|
|
74
|
+
signal?: {
|
|
75
|
+
aborted: boolean;
|
|
76
|
+
addEventListener: Function;
|
|
77
|
+
} | null;
|
|
78
|
+
}
|
|
79
|
+
type RequestInfo = string | {
|
|
80
|
+
url?: string;
|
|
81
|
+
} | URL;
|
|
82
|
+
declare class Request {
|
|
83
|
+
readonly url: string;
|
|
84
|
+
readonly method: string;
|
|
85
|
+
readonly headers: Headers;
|
|
86
|
+
readonly body?: any;
|
|
87
|
+
readonly timeout?: number;
|
|
88
|
+
readonly signal?: any;
|
|
89
|
+
constructor(input: RequestInfo, init?: RequestInit);
|
|
90
|
+
clone(): Request;
|
|
91
|
+
toString(): string;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
interface ResponseInit {
|
|
95
|
+
status?: number;
|
|
96
|
+
statusText?: string;
|
|
97
|
+
headers?: Headers;
|
|
98
|
+
}
|
|
99
|
+
declare class Response {
|
|
100
|
+
private readonly bodyData;
|
|
101
|
+
readonly status: number;
|
|
102
|
+
readonly statusText: string;
|
|
103
|
+
readonly headers: Headers;
|
|
104
|
+
readonly ok: boolean;
|
|
105
|
+
constructor(body?: any, init?: ResponseInit);
|
|
106
|
+
text(): Promise<string>;
|
|
107
|
+
json<T = unknown>(): Promise<T>;
|
|
108
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
type AbortListener = () => void;
|
|
112
|
+
declare class AbortSignal {
|
|
113
|
+
private _aborted;
|
|
114
|
+
private listeners;
|
|
115
|
+
onabort: AbortListener | null;
|
|
116
|
+
get aborted(): boolean;
|
|
117
|
+
_trigger(): void;
|
|
118
|
+
addEventListener(_: "abort", listener: AbortListener): void;
|
|
119
|
+
removeEventListener(_: "abort", listener: AbortListener): void;
|
|
120
|
+
toString(): string;
|
|
121
|
+
}
|
|
122
|
+
declare class AbortController {
|
|
123
|
+
private _signal;
|
|
124
|
+
constructor();
|
|
125
|
+
get signal(): AbortSignal;
|
|
126
|
+
abort(): void;
|
|
127
|
+
toString(): string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
declare function polyfill(_global: any): void;
|
|
131
|
+
|
|
132
|
+
type NvwaFetch = (input: string | URL$1 | RequestInfo, init?: RequestInit) => Promise<Response>;
|
|
133
|
+
|
|
134
|
+
declare const AUTH_BASE_PATH = "/auth";
|
|
135
|
+
declare const LOGIN_TOKEN_KEY = "nvwa_login_token";
|
|
136
|
+
declare const LOGIN_USER_PROFILE_KEY = "nvwa_user_profile";
|
|
137
|
+
type AuthClient = ReturnType<typeof createAuthClient<BetterAuthClientOptions>>;
|
|
138
|
+
type SignInResult = ReturnType<ReturnType<typeof createAuthClient>["signIn"]["email"]>;
|
|
139
|
+
declare abstract class NvwaAuthClient {
|
|
140
|
+
protected storage: NvwaLocalStorage;
|
|
141
|
+
protected authClient: AuthClient;
|
|
142
|
+
constructor(baseUrl: string, fetch: NvwaFetch, storage: NvwaLocalStorage);
|
|
143
|
+
signInWithUsername(username: string, password: string): Promise<void>;
|
|
144
|
+
saveSession(result: SignInResult): void;
|
|
145
|
+
signOut(): Promise<void>;
|
|
146
|
+
updateUserPassword(oldPassword: string, newPassword: string, revokeOtherSessions?: boolean): Promise<void>;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD";
|
|
150
|
+
type HttpRequest = {
|
|
151
|
+
method: string;
|
|
152
|
+
data?: any;
|
|
153
|
+
headers?: Record<string, string>;
|
|
154
|
+
};
|
|
155
|
+
type HttpResponse<T> = {
|
|
156
|
+
status: number;
|
|
157
|
+
body: T;
|
|
158
|
+
headers: {
|
|
159
|
+
[key: string]: string;
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
declare class FetchResponse {
|
|
163
|
+
ok: boolean;
|
|
164
|
+
status: number;
|
|
165
|
+
statusText: string;
|
|
166
|
+
headers: Record<string, string>;
|
|
167
|
+
body: any;
|
|
168
|
+
constructor(ok: boolean, status: number, statusText: string, headers: Record<string, string>, body: any);
|
|
169
|
+
text(): Promise<string>;
|
|
170
|
+
json(): Promise<any>;
|
|
171
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
172
|
+
blob(): Promise<Blob>;
|
|
173
|
+
}
|
|
174
|
+
declare abstract class NvwaHttpClient {
|
|
175
|
+
abstract request<T>(url: string | URL, request: HttpRequest): Promise<HttpResponse<T>>;
|
|
176
|
+
abstract requestWithAuth<T>(url: string | URL, request: HttpRequest, handleUnauthorized: () => void): Promise<HttpResponse<T>>;
|
|
177
|
+
jsonRequest<T>(url: string | URL, request: HttpRequest): Promise<HttpResponse<T>>;
|
|
178
|
+
jsonRequestWithAuth<T>(url: string | URL, request: HttpRequest, handleUnauthorized: () => void): Promise<HttpResponse<T>>;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
type HttpUploadFileResponse = {
|
|
182
|
+
url: string;
|
|
183
|
+
};
|
|
184
|
+
declare const FILE_STORAGE_BASE_PATH = "/storage";
|
|
185
|
+
declare const GENERATE_UPLOAD_URL_PATH: string;
|
|
186
|
+
declare class NvwaFileStorage {
|
|
187
|
+
private baseUrl;
|
|
188
|
+
private http;
|
|
189
|
+
constructor(baseUrl: string, http: NvwaHttpClient);
|
|
190
|
+
uploadFile(file: any): Promise<HttpUploadFileResponse>;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
type FunctionInvokeOptions = {
|
|
194
|
+
headers?: {
|
|
195
|
+
[key: string]: string;
|
|
196
|
+
};
|
|
197
|
+
method?: 'POST' | 'GET' | 'PUT' | 'PATCH' | 'DELETE';
|
|
198
|
+
body?: File | Blob | ArrayBuffer | FormData | ReadableStream<Uint8Array> | Record<string, any> | string;
|
|
199
|
+
};
|
|
200
|
+
declare class NvwaEdgeFunctions {
|
|
201
|
+
protected http: NvwaHttpClient;
|
|
202
|
+
constructor(http: NvwaHttpClient);
|
|
203
|
+
invoke<T = any>(name: string, options: FunctionInvokeOptions): Promise<T>;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
declare const ENTITIES_BASE_PATH = "/entities";
|
|
207
|
+
declare const createPostgrestClient: (baseUrl: string, httpClient: NvwaHttpClient, handleUnauthorized: () => void) => PostgrestClient<any, {} | _nvwa_app_postgrest_js.PostgrestClientOptions, "public", any>;
|
|
208
|
+
|
|
209
|
+
interface INvwa {
|
|
210
|
+
entities: PostgrestClient;
|
|
211
|
+
auth: NvwaAuthClient;
|
|
212
|
+
functions: NvwaEdgeFunctions;
|
|
213
|
+
fileStorage: NvwaFileStorage;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export { AUTH_BASE_PATH, AbortController, AbortSignal, ENTITIES_BASE_PATH, FILE_STORAGE_BASE_PATH, FetchResponse, GENERATE_UPLOAD_URL_PATH, Headers, LOGIN_TOKEN_KEY, LOGIN_USER_PROFILE_KEY, NvwaAuthClient, NvwaEdgeFunctions, NvwaFileStorage, NvwaHttpClient, Request, Response, URL$1 as URL, URLSearchParams, createPostgrestClient, polyfill };
|
|
217
|
+
export type { AuthClient, FunctionInvokeOptions, HttpMethod, HttpRequest, HttpResponse, HttpUploadFileResponse, INvwa, NvwaFetch, NvwaLocalStorage, RequestInfo, RequestInit, ResponseInit };
|