hydrousdb 2.0.1 → 2.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/errors.ts","../src/utils/http.ts","../src/auth/client.ts","../src/utils/query.ts","../src/records/client.ts","../src/analytics/client.ts","../src/storage/client.ts","../src/client.ts","../src/index.ts"],"names":["_a","_b"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { HydrousError } from '../types/index.js';\n\nexport class HydrousSDKError extends Error {\n readonly code: string;\n readonly status: number | undefined;\n\n constructor(message: string, code = 'SDK_ERROR', status?: number) {\n super(message);\n this.name = 'HydrousSDKError';\n this.code = code;\n this.status = status;\n }\n}\n\nexport function toHydrousError(err: unknown): HydrousError {\n if (err instanceof HydrousSDKError) {\n return { message: err.message, code: err.code, status: err.status };\n }\n if (err instanceof Error) {\n return { message: err.message, code: 'UNKNOWN_ERROR' };\n }\n return { message: String(err), code: 'UNKNOWN_ERROR' };\n}\n\nexport function isHydrousError(err: unknown): err is HydrousSDKError {\n return err instanceof HydrousSDKError;\n}\n","import { HydrousSDKError } from './errors.js';\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n body?: BodyInit | null;\n headers?: Record<string, string>;\n timeout?: number;\n}\n\n/** Parse a JSON response, throwing HydrousSDKError on HTTP errors */\nexport async function parseResponse<T>(res: Response): Promise<T> {\n let body: unknown;\n try {\n body = await res.json();\n } catch {\n if (!res.ok) {\n throw new HydrousSDKError(`HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n return undefined as T;\n }\n\n if (!res.ok) {\n const err = body as { error?: string; message?: string; code?: string };\n throw new HydrousSDKError(\n err.error || err.message || `HTTP ${res.status}`,\n err.code || 'HTTP_ERROR',\n res.status,\n );\n }\n\n return body as T;\n}\n\n/** Build full URL from base + path + optional query params */\nexport function buildUrl(\n base: string,\n path: string,\n params?: Record<string, string | number | boolean | undefined>,\n): string {\n const url = new URL(path, base.endsWith('/') ? base : base + '/');\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined && v !== null) {\n url.searchParams.set(k, String(v));\n }\n }\n }\n return url.toString();\n}\n\n/** Merge default headers with per-request headers */\nexport function mergeHeaders(\n defaults: Record<string, string>,\n overrides?: Record<string, string>,\n): Record<string, string> {\n return { ...defaults, ...overrides };\n}\n\n/**\n * Parse a Server-Sent Events stream and invoke `onEvent` for every\n * complete event block. Returns a promise that resolves when the\n * stream ends (or the connection is closed).\n *\n * @param response - A streaming fetch Response (`res.body` must be non-null)\n * @param onEvent - Called once per complete SSE event with (eventType, parsedData)\n */\nexport async function readSSEStream(\n response: Response,\n onEvent: (eventType: string, data: unknown) => void,\n): Promise<void> {\n if (!response.body) return;\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buf = '';\n\n const flush = (chunk: string) => {\n buf += chunk;\n const blocks = buf.split('\\n\\n');\n buf = blocks.pop() ?? '';\n\n for (const block of blocks) {\n if (!block.trim()) continue;\n let eventType = 'message';\n let dataLine: string | null = null;\n\n for (const line of block.split('\\n')) {\n if (line.startsWith('event:')) eventType = line.slice(6).trim();\n if (line.startsWith('data:')) dataLine = line.slice(5).trim();\n }\n\n if (dataLine === null) continue;\n\n try {\n onEvent(eventType, JSON.parse(dataLine));\n } catch {\n // skip heartbeats and malformed lines\n }\n }\n };\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n flush(decoder.decode(value, { stream: true }));\n }\n\n if (buf.trim()) flush('');\n}\n\n/**\n * XHR-based upload that fires real browser-side upload progress events.\n * Returns the raw response text (which may be an SSE stream body).\n *\n * Use this instead of fetch() for uploads — fetch() buffers the entire\n * request body before sending, giving you 0%→100% with no ticks in between.\n */\nexport function xhrUpload(\n url: string,\n body: FormData | Blob | BufferSource,\n headers: Record<string, string>,\n onXhrProgress?: (loaded: number, total: number) => void,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', url);\n\n for (const [key, val] of Object.entries(headers)) {\n xhr.setRequestHeader(key, val);\n }\n\n xhr.responseType = 'text';\n\n if (onXhrProgress) {\n xhr.upload.onprogress = (e) => {\n if (e.lengthComputable) onXhrProgress(e.loaded, e.total);\n };\n }\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText);\n } else {\n try {\n const d = JSON.parse(xhr.responseText) as { error?: string };\n reject(new HydrousSDKError(d.error ?? `HTTP ${xhr.status}`, 'HTTP_ERROR', xhr.status));\n } catch {\n reject(new HydrousSDKError(`HTTP ${xhr.status}`, 'HTTP_ERROR', xhr.status));\n }\n }\n };\n\n xhr.onerror = () => reject(new HydrousSDKError('Network error', 'NETWORK_ERROR'));\n xhr.onabort = () => reject(new HydrousSDKError('Upload aborted', 'UPLOAD_ABORTED'));\n xhr.ontimeout = () => reject(new HydrousSDKError('Upload timed out', 'UPLOAD_TIMEOUT'));\n\n xhr.send(body);\n });\n}\n\n/** Parse a text body that contains SSE blocks */\nexport function parseSSEText(\n text: string,\n onEvent: (eventType: string, data: unknown) => void,\n): void {\n const blocks = text.split('\\n\\n');\n for (const block of blocks) {\n if (!block.trim()) continue;\n let eventType = 'message';\n let dataLine: string | null = null;\n for (const line of block.split('\\n')) {\n if (line.startsWith('event:')) eventType = line.slice(6).trim();\n if (line.startsWith('data:')) dataLine = line.slice(5).trim();\n }\n if (dataLine === null) continue;\n try { onEvent(eventType, JSON.parse(dataLine)); } catch { /* skip */ }\n }\n}\n","import type {\n HydrousConfig,\n AuthSession,\n AuthUser,\n SignUpOptions,\n SignInOptions,\n HydrousResponse,\n} from '../types/index.js';\nimport { toHydrousError } from '../utils/errors.js';\nimport { buildUrl, mergeHeaders, parseResponse } from '../utils/http.js';\n\nexport class AuthClient {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n private session: AuthSession | null = null;\n\n constructor(config: HydrousConfig) {\n this.baseUrl = config.url;\n this.headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.apiKey}`,\n };\n }\n\n // ─── SIGN UP ───────────────────────────────────────────────────────────────\n\n /**\n * Create a new user account and return a session.\n *\n * @example\n * const { data, error } = await hydrous.auth.signUp({\n * email: 'user@example.com',\n * password: 'supersecret',\n * });\n */\n async signUp(options: SignUpOptions): Promise<HydrousResponse<AuthSession>> {\n try {\n const url = buildUrl(this.baseUrl, 'auth/signup');\n const res = await fetch(url, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(options),\n });\n const json = await parseResponse<{ data: AuthSession }>(res);\n this.session = json.data;\n return { data: json.data, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ─── SIGN IN ───────────────────────────────────────────────────────────────\n\n /**\n * Sign in with email and password.\n *\n * @example\n * const { data, error } = await hydrous.auth.signIn({\n * email: 'user@example.com',\n * password: 'supersecret',\n * });\n * if (data) console.log('Signed in as', data.user.email);\n */\n async signIn(options: SignInOptions): Promise<HydrousResponse<AuthSession>> {\n try {\n const url = buildUrl(this.baseUrl, 'auth/signin');\n const res = await fetch(url, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(options),\n });\n const json = await parseResponse<{ data: AuthSession }>(res);\n this.session = json.data;\n return { data: json.data, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ─── SIGN OUT ──────────────────────────────────────────────────────────────\n\n /**\n * Sign out the current user and invalidate their session.\n */\n async signOut(): Promise<HydrousResponse<void>> {\n try {\n const url = buildUrl(this.baseUrl, 'auth/signout');\n const res = await fetch(url, {\n method: 'POST',\n headers: mergeHeaders(this.headers, this._sessionHeader()),\n });\n await parseResponse<void>(res);\n this.session = null;\n return { data: undefined, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ─── GET USER ──────────────────────────────────────────────────────────────\n\n /** Return the currently authenticated user, or null if not signed in. */\n async getUser(): Promise<HydrousResponse<AuthUser>> {\n try {\n const url = buildUrl(this.baseUrl, 'auth/user');\n const res = await fetch(url, {\n headers: mergeHeaders(this.headers, this._sessionHeader()),\n });\n const json = await parseResponse<{ data: AuthUser }>(res);\n return { data: json.data, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ─── REFRESH TOKEN ────────────────────────────────────────────────────────\n\n /**\n * Refresh the access token using the stored refresh token.\n * Called automatically by the SDK when a 401 is received.\n */\n async refreshSession(): Promise<HydrousResponse<AuthSession>> {\n if (!this.session?.refreshToken) {\n return { data: null, error: { message: 'No session', code: 'NO_SESSION' } };\n }\n try {\n const url = buildUrl(this.baseUrl, 'auth/refresh');\n const res = await fetch(url, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify({ refreshToken: this.session.refreshToken }),\n });\n const json = await parseResponse<{ data: AuthSession }>(res);\n this.session = json.data;\n return { data: json.data, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n /** Return the current in-memory session (may be null). */\n getSession(): AuthSession | null {\n return this.session;\n }\n\n private _sessionHeader(): Record<string, string> {\n return this.session?.accessToken\n ? { 'X-Session-Token': this.session.accessToken }\n : {};\n }\n}\n","import type { Filter, FilterOperator, QueryOptions } from '../types/index.js';\n\n/**\n * Serialise a QueryOptions object into URL search-parameter-safe strings\n * for transmission to the Hydrous REST API.\n */\nexport function serialiseQuery(\n opts: QueryOptions = {},\n): Record<string, string> {\n const params: Record<string, string> = {};\n\n if (opts.limit !== undefined) params['limit'] = String(opts.limit);\n if (opts.offset !== undefined) params['offset'] = String(opts.offset);\n if (opts.select && opts.select.length > 0) {\n params['select'] = opts.select.join(',');\n }\n\n if (opts.orderBy) {\n params['orderBy'] = opts.orderBy.field;\n params['direction'] = opts.orderBy.direction ?? 'asc';\n }\n\n const filters = opts.where\n ? Array.isArray(opts.where) ? opts.where : [opts.where]\n : [];\n\n if (filters.length > 0) {\n params['where'] = JSON.stringify(filters);\n }\n\n return params;\n}\n\n/** Shorthand helper: creates a simple equality filter */\nexport function eq(field: string, value: unknown): Filter {\n return { field, operator: 'eq' as FilterOperator, value };\n}\n\n/** Shorthand helper: creates a \"not equal\" filter */\nexport function neq(field: string, value: unknown): Filter {\n return { field, operator: 'neq' as FilterOperator, value };\n}\n\n/** Shorthand helper: creates a \"greater than\" filter */\nexport function gt(field: string, value: unknown): Filter {\n return { field, operator: 'gt' as FilterOperator, value };\n}\n\n/** Shorthand helper: creates a \"less than\" filter */\nexport function lt(field: string, value: unknown): Filter {\n return { field, operator: 'lt' as FilterOperator, value };\n}\n\n/** Shorthand helper: creates an \"in array\" filter */\nexport function inArray(field: string, value: unknown[]): Filter {\n return { field, operator: 'in' as FilterOperator, value };\n}\n","import type {\n HydrousConfig,\n QueryOptions,\n RecordResponse,\n SingleRecordResponse,\n} from '../types/index.js';\nimport { HydrousSDKError, toHydrousError } from '../utils/errors.js';\nimport { buildUrl, mergeHeaders, parseResponse } from '../utils/http.js';\nimport { serialiseQuery } from '../utils/query.js';\n\nexport class RecordsClient {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n\n constructor(config: HydrousConfig) {\n this.baseUrl = config.url;\n this.headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.apiKey}`,\n };\n }\n\n // ─── SELECT ────────────────────────────────────────────────────────────────\n\n /**\n * Query records from a collection.\n *\n * @param collection - Collection name (e.g. \"users\")\n * @param options - Filters, ordering, pagination\n *\n * @example\n * const { data, error } = await hydrous.records.select('users', {\n * where: { field: 'role', operator: 'eq', value: 'admin' },\n * orderBy: { field: 'createdAt', direction: 'desc' },\n * limit: 20,\n * });\n */\n async select<T = Record<string, unknown>>(\n collection: string,\n options: QueryOptions = {},\n ): Promise<RecordResponse<T>> {\n try {\n const params = serialiseQuery(options);\n const url = buildUrl(this.baseUrl, `records/${collection}`, params);\n const res = await fetch(url, { headers: this.headers });\n const json = await parseResponse<{ data: T[]; count: number }>(res);\n return { data: json.data, count: json.count, error: null };\n } catch (err) {\n return { data: [], count: 0, error: toHydrousError(err) };\n }\n }\n\n // ─── GET ONE ───────────────────────────────────────────────────────────────\n\n /**\n * Fetch a single record by its ID.\n *\n * @example\n * const { data, error } = await hydrous.records.get('users', 'user_abc123');\n */\n async get<T = Record<string, unknown>>(\n collection: string,\n id: string,\n ): Promise<SingleRecordResponse<T>> {\n try {\n const url = buildUrl(this.baseUrl, `records/${collection}/${id}`);\n const res = await fetch(url, { headers: this.headers });\n const json = await parseResponse<{ data: T }>(res);\n return { data: json.data, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ─── INSERT ────────────────────────────────────────────────────────────────\n\n /**\n * Insert one or more records into a collection.\n *\n * @param collection - Collection name\n * @param payload - A single record object or an array of record objects\n *\n * @example\n * // Single insert\n * const { data, error } = await hydrous.records.insert('users', {\n * name: 'Alice', email: 'alice@example.com'\n * });\n *\n * // Bulk insert\n * const { data, error } = await hydrous.records.insert('users', [\n * { name: 'Alice' }, { name: 'Bob' }\n * ]);\n */\n async insert<T = Record<string, unknown>>(\n collection: string,\n payload: Partial<T> | Partial<T>[],\n ): Promise<RecordResponse<T>> {\n try {\n const url = buildUrl(this.baseUrl, `records/${collection}`);\n const res = await fetch(url, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(payload),\n });\n const json = await parseResponse<{ data: T[]; count: number }>(res);\n return { data: json.data, count: json.count, error: null };\n } catch (err) {\n return { data: [], count: 0, error: toHydrousError(err) };\n }\n }\n\n // ─── UPDATE ────────────────────────────────────────────────────────────────\n\n /**\n * Update a record by ID.\n *\n * @example\n * const { data, error } = await hydrous.records.update('users', 'user_abc123', {\n * name: 'Alice Smith'\n * });\n */\n async update<T = Record<string, unknown>>(\n collection: string,\n id: string,\n payload: Partial<T>,\n ): Promise<SingleRecordResponse<T>> {\n try {\n const url = buildUrl(this.baseUrl, `records/${collection}/${id}`);\n const res = await fetch(url, {\n method: 'PATCH',\n headers: this.headers,\n body: JSON.stringify(payload),\n });\n const json = await parseResponse<{ data: T }>(res);\n return { data: json.data, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ─── DELETE ────────────────────────────────────────────────────────────────\n\n /**\n * Delete a record by ID.\n *\n * @example\n * const { error } = await hydrous.records.delete('users', 'user_abc123');\n */\n async delete(\n collection: string,\n id: string,\n ): Promise<SingleRecordResponse<void>> {\n try {\n const url = buildUrl(this.baseUrl, `records/${collection}/${id}`);\n const res = await fetch(url, { method: 'DELETE', headers: this.headers });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n}\n","import type {\n HydrousConfig,\n TrackEventOptions,\n AnalyticsQueryOptions,\n AnalyticsEvent,\n HydrousResponse,\n RecordResponse,\n} from '../types/index.js';\nimport { toHydrousError } from '../utils/errors.js';\nimport { buildUrl, mergeHeaders, parseResponse } from '../utils/http.js';\n\nexport class AnalyticsClient {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n\n constructor(config: HydrousConfig) {\n this.baseUrl = config.url;\n this.headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.apiKey}`,\n };\n }\n\n // ─── TRACK ────────────────────────────────────────────────────────────────\n\n /**\n * Track an analytics event.\n *\n * @example\n * await hydrous.analytics.track({\n * event: 'page_view',\n * properties: { page: '/home', referrer: 'google.com' },\n * userId: 'user_abc123',\n * });\n */\n async track(options: TrackEventOptions): Promise<HydrousResponse<void>> {\n try {\n const url = buildUrl(this.baseUrl, 'analytics/track');\n const res = await fetch(url, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify({\n ...options,\n timestamp: options.timestamp ?? Date.now(),\n }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ─── QUERY ────────────────────────────────────────────────────────────────\n\n /**\n * Query recorded analytics events.\n *\n * @example\n * const { data } = await hydrous.analytics.query({\n * event: 'page_view',\n * from: '2024-01-01',\n * to: '2024-01-31',\n * limit: 100,\n * });\n */\n async query(\n options: AnalyticsQueryOptions = {},\n ): Promise<RecordResponse<AnalyticsEvent>> {\n try {\n const params: Record<string, string> = {};\n if (options.event) params['event'] = options.event;\n if (options.from) params['from'] = options.from;\n if (options.to) params['to'] = options.to;\n if (options.limit) params['limit'] = String(options.limit);\n if (options.groupBy) params['groupBy'] = options.groupBy;\n\n const url = buildUrl(this.baseUrl, 'analytics/events', params);\n const res = await fetch(url, { headers: this.headers });\n const json = await parseResponse<{ data: AnalyticsEvent[]; count: number }>(res);\n return { data: json.data, count: json.count, error: null };\n } catch (err) {\n return { data: [], count: 0, error: toHydrousError(err) };\n }\n }\n\n // ─── BATCH TRACK ─────────────────────────────────────────────────────────\n\n /**\n * Track multiple events in a single request (more efficient than\n * calling `track` in a loop).\n *\n * @example\n * await hydrous.analytics.trackBatch([\n * { event: 'signup', userId: 'u1' },\n * { event: 'onboarded', userId: 'u1' },\n * ]);\n */\n async trackBatch(\n events: TrackEventOptions[],\n ): Promise<HydrousResponse<void>> {\n try {\n const url = buildUrl(this.baseUrl, 'analytics/track/batch');\n const stamped = events.map((e) => ({\n ...e,\n timestamp: e.timestamp ?? Date.now(),\n }));\n const res = await fetch(url, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify({ events: stamped }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n}\n","import type {\n HydrousConfig,\n BucketKey,\n UploadOptions,\n BatchUploadOptions,\n BatchDownloadOptions,\n ListOptions,\n SignedUrlOptions,\n UploadProgress,\n UploadResult,\n BatchUploadResult,\n BatchDownloadFile,\n FileMetadata,\n ListResult,\n SignedUrlResult,\n StorageStats,\n HydrousResponse,\n DownloadProgress,\n} from '../types/index.js';\nimport { HydrousSDKError, toHydrousError } from '../utils/errors.js';\nimport { buildUrl, parseResponse, readSSEStream, parseSSEText, xhrUpload } from '../utils/http.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** True when running inside a browser (not Node/Edge/Deno) */\nconst isBrowser = typeof window !== 'undefined' && typeof XMLHttpRequest !== 'undefined';\n\n/** Extract the bucket name segment from an ssk_ key */\nfunction bucketFromKey(key: BucketKey): string {\n // Keys are in the form: ssk_<bucketName>_<secret>\n // The route uses /:bucket/ so we pass the whole key and let the server parse it.\n // For URL construction we use the key directly as the bucket identifier.\n return encodeURIComponent(key);\n}\n\n/** Build the base storage URL for a given bucket key */\nfunction storageUrl(base: string, bucketKey: BucketKey, path: string): string {\n const bucket = bucketFromKey(bucketKey);\n return `${base.replace(/\\/$/, '')}/storage/${bucket}/${path.replace(/^\\//, '')}`;\n}\n\n/** Shared storage request headers (no Content-Type — caller sets it) */\nfunction storageHeaders(bucketKey: BucketKey): Record<string, string> {\n return { 'X-Storage-Key': bucketKey };\n}\n\n/**\n * Collect all SSE progress events emitted by the Hydrous upload endpoint\n * from a text body that was already fully received (XHR flow).\n */\nfunction drainSSEProgress(\n rawText: string,\n onProgress: ((p: UploadProgress) => void) | undefined,\n): { results: UploadResult[]; errors: Array<{ path: string; error: string; code: string }> } {\n const results: UploadResult[] = [];\n const errors: Array<{ path: string; error: string; code: string }> = [];\n\n parseSSEText(rawText, (eventType, data) => {\n const d = data as Record<string, unknown>;\n if (eventType === 'progress' && onProgress) {\n onProgress({\n index: (d['index'] as number) ?? 0,\n total: (d['total'] as number) ?? 1,\n path: (d['path'] as string) ?? '',\n stage: (d['stage'] as UploadProgress['stage']) ?? 'uploading',\n bytesUploaded: (d['bytesUploaded'] as number) ?? 0,\n totalBytes: (d['totalBytes'] as number) ?? 0,\n percent: (d['percent'] as number) ?? 0,\n bytesPerSecond: (d['bytesPerSecond'] as number | null) ?? null,\n eta: (d['eta'] as number | null) ?? null,\n result: d['result'] as UploadResult | undefined,\n error: d['error'] as string | undefined,\n code: d['code'] as string | undefined,\n });\n }\n if (eventType === 'done') {\n if (d['path']) {\n // single-file done\n results.push(d as unknown as UploadResult);\n } else if (Array.isArray(d['errors'])) {\n // batch done — collect\n const succeeded = (d['succeeded'] as UploadResult[]) ?? [];\n const errs = d['errors'] as Array<{ path: string; error: string; code: string }>;\n results.push(...succeeded);\n errors.push(...errs);\n }\n }\n if (eventType === 'error') {\n errors.push({\n path: '',\n error: (d['error'] as string) ?? 'Unknown error',\n code: (d['code'] as string) ?? 'UNKNOWN',\n });\n }\n });\n\n return { results, errors };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// StorageClient\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport class StorageClient {\n private readonly baseUrl: string;\n\n constructor(config: HydrousConfig) {\n this.baseUrl = config.url;\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // UPLOAD\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Upload a single file to a bucket.\n *\n * The bucket key **always comes first**.\n * Supply an `onProgress` callback to receive live upload progress including\n * bytes transferred, speed (bytes/sec), ETA, and lifecycle stage.\n *\n * ### Stages fired via `onProgress`\n * | Stage | Meaning |\n * |-------------|------------------------------------------|\n * | `pending` | Queued, not yet started |\n * | `compressing` | Server is compressing the file |\n * | `uploading` | Bytes flowing to cloud storage |\n * | `done` | Confirmed written to cloud storage |\n * | `error` | Something went wrong |\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param file A `File`, `Blob`, or `Buffer` (Node)\n * @param options Path, overwrite flag, progress callback\n *\n * @example\n * const { data, error } = await hydrous.storage.upload(\n * 'ssk_my_bucket_key',\n * file,\n * {\n * path: 'avatars/alice.jpg',\n * overwrite: true,\n * onProgress: (p) => {\n * console.log(`${p.stage} — ${p.percent}% ${p.bytesPerSecond} B/s ETA ${p.eta}s`);\n * },\n * }\n * );\n */\n async upload(\n bucketKey: BucketKey,\n file: File | Blob | Uint8Array | ArrayBuffer,\n options: UploadOptions = {},\n ): Promise<HydrousResponse<UploadResult>> {\n const { path, overwrite = false, onProgress } = options;\n\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'upload');\n const form = new FormData();\n\n if (file instanceof Uint8Array) {\n form.append('file', new Blob([file.buffer as ArrayBuffer]), path ?? 'file');\n } else if (file instanceof ArrayBuffer) {\n form.append('file', new Blob([file]), path ?? 'file');\n } else {\n form.append('file', file, path ?? (file instanceof File ? file.name : 'file'));\n }\n\n if (path) form.append('path', path);\n if (overwrite) form.append('overwrite', 'true');\n\n const headers = storageHeaders(bucketKey);\n\n // ── Browser path: XHR for real upload-progress ticks ─────────────────\n if (isBrowser) {\n const totalBytes = file instanceof Blob\n ? file.size\n : file instanceof Uint8Array\n ? file.byteLength\n : (file as ArrayBuffer).byteLength;\n\n // Phase 1 — XHR upload with byte-level progress\n const rawBody = await xhrUpload(url, form, headers, (loaded, total) => {\n if (onProgress) {\n onProgress({\n index: 0,\n total: 1,\n path: path ?? '',\n stage: 'uploading',\n bytesUploaded: loaded,\n totalBytes: total || totalBytes,\n percent: Math.min(99, Math.round((loaded / (total || totalBytes)) * 100)),\n bytesPerSecond: null,\n eta: null,\n });\n }\n });\n\n // Phase 2 — parse SSE response for stage transitions + final 100%\n const { results, errors } = drainSSEProgress(rawBody, onProgress);\n\n if (errors.length > 0 && results.length === 0) {\n return { data: null, error: { message: errors[0].error, code: errors[0].code } };\n }\n\n const result = results[0] ?? null;\n if (result && onProgress) {\n onProgress({ index: 0, total: 1, path: result.path, stage: 'done',\n bytesUploaded: totalBytes, totalBytes, percent: 100,\n bytesPerSecond: null, eta: 0, result });\n }\n\n return { data: result, error: null };\n }\n\n // ── Node path: fetch + SSE stream ──────────────────────────────────────\n const res = await fetch(url, { method: 'POST', headers, body: form });\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousSDKError(err.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n\n let finalResult: UploadResult | null = null;\n await readSSEStream(res, (eventType, data) => {\n const d = data as Record<string, unknown>;\n if (eventType === 'progress' && onProgress) {\n onProgress({\n index: (d['index'] as number) ?? 0,\n total: (d['total'] as number) ?? 1,\n path: (d['path'] as string) ?? path ?? '',\n stage: (d['stage'] as UploadProgress['stage']) ?? 'uploading',\n bytesUploaded: (d['bytesUploaded'] as number) ?? 0,\n totalBytes: (d['totalBytes'] as number) ?? 0,\n percent: (d['percent'] as number) ?? 0,\n bytesPerSecond: (d['bytesPerSecond'] as number | null) ?? null,\n eta: (d['eta'] as number | null) ?? null,\n result: d['result'] as UploadResult | undefined,\n error: d['error'] as string | undefined,\n });\n }\n if (eventType === 'done') finalResult = data as UploadResult;\n if (eventType === 'error') {\n throw new HydrousSDKError(\n (d['error'] as string) ?? 'Upload failed',\n (d['code'] as string) ?? 'UPLOAD_ERROR',\n );\n }\n });\n\n return { data: finalResult, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // UPLOAD RAW (text / JSON / binary from string)\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Upload raw text or JSON content directly — no `File` object needed.\n * Great for saving generated content, config files, or JSON records.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param path Destination path (e.g. `\"configs/settings.json\"`)\n * @param content String content to store\n * @param options `mimeType`, `overwrite`, `onProgress`\n *\n * @example\n * await hydrous.storage.uploadText(\n * 'ssk_my_bucket_key',\n * 'reports/summary.txt',\n * 'Hello from Hydrous!',\n * { mimeType: 'text/plain' }\n * );\n */\n async uploadText(\n bucketKey: BucketKey,\n path: string,\n content: string,\n options: { mimeType?: string; overwrite?: boolean; onProgress?: UploadOptions['onProgress'] } = {},\n ): Promise<HydrousResponse<UploadResult>> {\n const { mimeType = 'text/plain', overwrite = false, onProgress } = options;\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'upload-raw');\n const headers = { ...storageHeaders(bucketKey), 'Content-Type': 'application/json' };\n const res = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ path, content, mimeType, overwrite }),\n });\n\n if (!res.ok) {\n const e = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousSDKError(e.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n\n let finalResult: UploadResult | null = null;\n await readSSEStream(res, (eventType, data) => {\n const d = data as Record<string, unknown>;\n if (eventType === 'progress' && onProgress) {\n onProgress({\n index: 0, total: 1, path,\n stage: (d['stage'] as UploadProgress['stage']) ?? 'uploading',\n bytesUploaded: (d['bytesUploaded'] as number) ?? 0,\n totalBytes: (d['totalBytes'] as number) ?? 0,\n percent: (d['percent'] as number) ?? 0,\n bytesPerSecond: (d['bytesPerSecond'] as number | null) ?? null,\n eta: (d['eta'] as number | null) ?? null,\n });\n }\n if (eventType === 'done') finalResult = data as UploadResult;\n });\n\n return { data: finalResult, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // BATCH UPLOAD\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Upload multiple files in one request.\n *\n * `onProgress` fires for **every file individually** — the `index` field\n * tells you which file the event belongs to (0-based, same order as `files`).\n * All files receive a `pending` event upfront before any uploads start,\n * so you can render all progress bars immediately.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param files Array of `File` objects (browser) or `{ name, data }` objects (Node)\n * @param options Prefix, per-file paths, overwrite, concurrency, onProgress\n *\n * @example\n * await hydrous.storage.batchUpload(\n * 'ssk_my_bucket_key',\n * fileArray,\n * {\n * prefix: 'uploads/2024/',\n * onProgress: (p) => {\n * console.log(`File ${p.index}: ${p.stage} ${p.percent}%`);\n * },\n * }\n * );\n */\n async batchUpload(\n bucketKey: BucketKey,\n files: File[],\n options: BatchUploadOptions = {},\n ): Promise<HydrousResponse<BatchUploadResult>> {\n const { prefix = '', paths, overwrite = false, onProgress } = options;\n\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'batch-upload');\n const form = new FormData();\n\n const resolvedPaths = files.map((f, i) =>\n paths?.[i] ?? `${prefix}${f.name}`,\n );\n\n files.forEach((f) => form.append('files', f, f.name));\n form.append('paths', JSON.stringify(resolvedPaths));\n if (overwrite) form.append('overwrite', 'true');\n\n const headers = storageHeaders(bucketKey);\n\n if (isBrowser) {\n const totalBytes = files.reduce((s, f) => s + f.size, 0);\n\n const rawBody = await xhrUpload(url, form, headers, (loaded, total) => {\n if (onProgress) {\n // Distribute overall XHR progress proportionally across files by size\n let cursor = 0;\n for (let i = 0; i < files.length; i++) {\n const share = files[i].size / (totalBytes || 1);\n const myStart = cursor;\n const myEnd = cursor + share;\n const fileLoaded = Math.max(0, Math.min(\n files[i].size,\n ((loaded / (total || totalBytes)) - myStart) / share * files[i].size,\n ));\n onProgress({\n index: i, total: files.length, path: resolvedPaths[i],\n stage: 'uploading',\n bytesUploaded: Math.round(fileLoaded),\n totalBytes: files[i].size,\n percent: Math.min(99, Math.round((fileLoaded / files[i].size) * 100)),\n bytesPerSecond: null,\n eta: null,\n });\n cursor = myEnd;\n }\n }\n });\n\n const { results, errors } = drainSSEProgress(rawBody, onProgress);\n return {\n data: {\n succeeded: results,\n failed: errors,\n },\n error: null,\n };\n }\n\n // Node\n const res = await fetch(url, { method: 'POST', headers, body: form });\n if (!res.ok) {\n const e = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousSDKError(e.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n\n const succeeded: UploadResult[] = [];\n const failed: Array<{ path: string; error: string; code: string }> = [];\n\n await readSSEStream(res, (eventType, data) => {\n const d = data as Record<string, unknown>;\n if (eventType === 'progress' && onProgress) {\n onProgress({\n index: (d['index'] as number) ?? 0,\n total: (d['total'] as number) ?? files.length,\n path: (d['path'] as string) ?? '',\n stage: (d['stage'] as UploadProgress['stage']) ?? 'uploading',\n bytesUploaded: (d['bytesUploaded'] as number) ?? 0,\n totalBytes: (d['totalBytes'] as number) ?? 0,\n percent: (d['percent'] as number) ?? 0,\n bytesPerSecond: (d['bytesPerSecond'] as number | null) ?? null,\n eta: (d['eta'] as number | null) ?? null,\n result: d['result'] as UploadResult | undefined,\n error: d['error'] as string | undefined,\n code: d['code'] as string | undefined,\n });\n }\n if (eventType === 'done' && d['succeeded']) {\n succeeded.push(...(d['succeeded'] as UploadResult[]));\n failed.push(...(d['errors'] as Array<{ path: string; error: string; code: string }> ?? []));\n }\n });\n\n return { data: { succeeded, failed }, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // DOWNLOAD\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Download a single file and return its content as an `ArrayBuffer`.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param filePath Path of the file within your bucket\n *\n * @example\n * const { data, error } = await hydrous.storage.download(\n * 'ssk_my_bucket_key',\n * 'avatars/alice.jpg'\n * );\n * if (data) {\n * const blob = new Blob([data]);\n * const url = URL.createObjectURL(blob);\n * }\n */\n async download(\n bucketKey: BucketKey,\n filePath: string,\n ): Promise<HydrousResponse<ArrayBuffer>> {\n try {\n const url = storageUrl(this.baseUrl, bucketKey, `download/${filePath}`);\n const res = await fetch(url, { headers: storageHeaders(bucketKey) });\n if (!res.ok) {\n const e = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousSDKError(e.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n const buffer = await res.arrayBuffer();\n return { data: buffer, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // BATCH DOWNLOAD\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Download multiple files in one request.\n *\n * When `autoSave: true` (browser only) each file is automatically saved\n * to the user's Downloads folder as it arrives.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param filePaths Array of file paths within your bucket\n * @param options Concurrency, onProgress, autoSave\n *\n * @example\n * const { data } = await hydrous.storage.batchDownload(\n * 'ssk_my_bucket_key',\n * ['reports/jan.pdf', 'reports/feb.pdf'],\n * {\n * onProgress: (p) => console.log(p.path, p.status),\n * autoSave: true, // triggers browser file-save dialog per file\n * }\n * );\n */\n async batchDownload(\n bucketKey: BucketKey,\n filePaths: string[],\n options: BatchDownloadOptions = {},\n ): Promise<HydrousResponse<BatchDownloadFile[]>> {\n const { concurrency = 5, onProgress, autoSave = false } = options;\n\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'batch-download');\n const res = await fetch(url, {\n method: 'POST',\n headers: { ...storageHeaders(bucketKey), 'Content-Type': 'application/json' },\n body: JSON.stringify({ paths: filePaths, concurrency }),\n });\n\n if (!res.ok) {\n const e = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousSDKError(e.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n\n const downloadedFiles: BatchDownloadFile[] = [];\n\n await readSSEStream(res, (eventType, data) => {\n const d = data as Record<string, unknown>;\n\n if (eventType === 'file') {\n const base64 = d['content'] as string;\n const mimeType = (d['mimeType'] as string) ?? 'application/octet-stream';\n const path = (d['path'] as string) ?? '';\n const size = (d['size'] as number) ?? 0;\n const index = (d['index'] as number) ?? 0;\n\n // Decode base64 → ArrayBuffer\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n const content = bytes.buffer;\n\n downloadedFiles.push({ path, content, mimeType, size });\n\n if (onProgress) {\n onProgress({\n index,\n total: filePaths.length,\n path,\n status: 'success',\n size,\n mimeType,\n });\n }\n\n // Auto-save in browser\n if (autoSave && isBrowser) {\n const blob = new Blob([content], { type: mimeType });\n const blobUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = blobUrl;\n a.download = path.split('/').pop() ?? 'download';\n a.click();\n setTimeout(() => URL.revokeObjectURL(blobUrl), 5000);\n }\n }\n\n if (eventType === 'error' && onProgress) {\n const index = (d['index'] as number) ?? 0;\n onProgress({\n index,\n total: filePaths.length,\n path: filePaths[index] ?? '',\n status: 'error',\n error: (d['error'] as string) ?? 'Download failed',\n });\n }\n });\n\n return { data: downloadedFiles, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // LIST\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * List files and folders inside a bucket (or a folder within it).\n *\n * Results are paginated — use `pagination.nextCursor` to fetch the next page.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param options `prefix`, `limit`, `cursor`\n *\n * @example\n * const { data } = await hydrous.storage.list('ssk_my_bucket_key', {\n * prefix: 'avatars/',\n * limit: 50,\n * });\n * for (const item of data.items) {\n * console.log(item.type, item.path);\n * }\n */\n async list(\n bucketKey: BucketKey,\n options: ListOptions = {},\n ): Promise<HydrousResponse<ListResult>> {\n const { prefix = '', limit = 50, cursor } = options;\n try {\n const params: Record<string, string | number | boolean | undefined> = {\n prefix: prefix || undefined,\n limit,\n cursor: cursor || undefined,\n };\n const url = buildUrl(\n this.baseUrl,\n `storage/${bucketFromKey(bucketKey)}/list`,\n params,\n );\n const res = await fetch(url, { headers: storageHeaders(bucketKey) });\n const json = await parseResponse<ListResult>(res);\n return { data: json, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // METADATA\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Get metadata for a specific file (size, MIME type, compression info, etc.)\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param filePath Path of the file within your bucket\n *\n * @example\n * const { data } = await hydrous.storage.metadata(\n * 'ssk_my_bucket_key',\n * 'avatars/alice.jpg'\n * );\n * console.log(data.size, data.mimeType);\n */\n async metadata(\n bucketKey: BucketKey,\n filePath: string,\n ): Promise<HydrousResponse<FileMetadata>> {\n try {\n const url = storageUrl(this.baseUrl, bucketKey, `metadata/${filePath}`);\n const res = await fetch(url, { headers: storageHeaders(bucketKey) });\n const json = await parseResponse<{ data: FileMetadata }>(res);\n return { data: json.data, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // DELETE FILE\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Delete a single file.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param filePath Path of the file to delete\n *\n * @example\n * await hydrous.storage.deleteFile('ssk_my_bucket_key', 'avatars/old.jpg');\n */\n async deleteFile(\n bucketKey: BucketKey,\n filePath: string,\n ): Promise<HydrousResponse<void>> {\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'file');\n const res = await fetch(url, {\n method: 'DELETE',\n headers: { ...storageHeaders(bucketKey), 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: filePath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // DELETE FOLDER\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Recursively delete a folder and all of its contents.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param folderPath Folder path to delete (e.g. `\"old-uploads/\"`)\n *\n * @example\n * await hydrous.storage.deleteFolder('ssk_my_bucket_key', 'temp/');\n */\n async deleteFolder(\n bucketKey: BucketKey,\n folderPath: string,\n ): Promise<HydrousResponse<void>> {\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'folder');\n const res = await fetch(url, {\n method: 'DELETE',\n headers: { ...storageHeaders(bucketKey), 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: folderPath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // CREATE FOLDER\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Create an empty folder.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param folderPath Path for the new folder (e.g. `\"avatars/2024/\"`)\n *\n * @example\n * await hydrous.storage.createFolder('ssk_my_bucket_key', 'avatars/2024/');\n */\n async createFolder(\n bucketKey: BucketKey,\n folderPath: string,\n ): Promise<HydrousResponse<void>> {\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'folder');\n const res = await fetch(url, {\n method: 'POST',\n headers: { ...storageHeaders(bucketKey), 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: folderPath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // MOVE\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Move (rename) a file to a new path.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param fromPath Current path of the file\n * @param toPath New path for the file\n *\n * @example\n * await hydrous.storage.move(\n * 'ssk_my_bucket_key',\n * 'drafts/report.pdf',\n * 'published/report.pdf'\n * );\n */\n async move(\n bucketKey: BucketKey,\n fromPath: string,\n toPath: string,\n ): Promise<HydrousResponse<void>> {\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'move');\n const res = await fetch(url, {\n method: 'POST',\n headers: { ...storageHeaders(bucketKey), 'Content-Type': 'application/json' },\n body: JSON.stringify({ from: fromPath, to: toPath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // COPY\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Copy a file to a new path (original is kept).\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param fromPath Source path\n * @param toPath Destination path\n *\n * @example\n * await hydrous.storage.copy(\n * 'ssk_my_bucket_key',\n * 'templates/invoice.pdf',\n * 'invoices/invoice-001.pdf'\n * );\n */\n async copy(\n bucketKey: BucketKey,\n fromPath: string,\n toPath: string,\n ): Promise<HydrousResponse<void>> {\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'copy');\n const res = await fetch(url, {\n method: 'POST',\n headers: { ...storageHeaders(bucketKey), 'Content-Type': 'application/json' },\n body: JSON.stringify({ from: fromPath, to: toPath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // SIGNED URL\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Generate a time-limited public URL for a private file.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n * @param filePath Path of the file\n * @param options `expiresIn` seconds (default: 3600)\n *\n * @example\n * const { data } = await hydrous.storage.signedUrl(\n * 'ssk_my_bucket_key',\n * 'private/contract.pdf',\n * { expiresIn: 300 } // 5 minutes\n * );\n * console.log(data.signedUrl); // share this URL\n */\n async signedUrl(\n bucketKey: BucketKey,\n filePath: string,\n options: SignedUrlOptions = {},\n ): Promise<HydrousResponse<SignedUrlResult>> {\n const { expiresIn = 3600 } = options;\n try {\n const url = storageUrl(this.baseUrl, bucketKey, 'signed-url');\n const res = await fetch(url, {\n method: 'POST',\n headers: { ...storageHeaders(bucketKey), 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: filePath, expiresInSeconds: expiresIn }),\n });\n const json = await parseResponse<SignedUrlResult>(res);\n return { data: json, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // STATS\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Get usage and billing statistics for this bucket key.\n *\n * @param bucketKey Your storage bucket key (`ssk_…`)\n *\n * @example\n * const { data } = await hydrous.storage.stats('ssk_my_bucket_key');\n * console.log(`${data.totalFiles} files, ${data.totalSizeBytes} bytes stored`);\n */\n async stats(\n bucketKey: BucketKey,\n ): Promise<HydrousResponse<StorageStats>> {\n try {\n const url = buildUrl(this.baseUrl, `storage/${bucketFromKey(bucketKey)}/stats`);\n const res = await fetch(url, { headers: storageHeaders(bucketKey) });\n const json = await parseResponse<{ data: StorageStats }>(res);\n return { data: json.data, error: null };\n } catch (err) {\n return { data: null, error: toHydrousError(err) };\n }\n }\n}\n","import type { HydrousConfig } from './types/index.js';\nimport { AuthClient } from './auth/client.js';\nimport { RecordsClient } from './records/client.js';\nimport { AnalyticsClient } from './analytics/client.js';\nimport { StorageClient } from './storage/client.js';\n\n/**\n * The root Hydrous client.\n *\n * Instantiate once and reuse throughout your app.\n *\n * @example\n * import { HydrousClient } from 'hydrous';\n *\n * const hydrous = new HydrousClient({\n * url: 'https://api.myapp.hydrous.app',\n * apiKey: 'hk_live_…',\n * });\n */\nexport class HydrousClient {\n /** Authentication — sign up, sign in, sign out, session management */\n public readonly auth: AuthClient;\n /** Records — insert, select, update, delete structured data */\n public readonly records: RecordsClient;\n /** Analytics — track events, query event history */\n public readonly analytics: AnalyticsClient;\n /**\n * Storage — upload, download, list, move, delete files.\n *\n * Every method takes a **bucket key** (`ssk_…`) as its **first argument**.\n */\n public readonly storage: StorageClient;\n\n constructor(config: HydrousConfig) {\n if (!config.url) throw new Error('[Hydrous] config.url is required');\n if (!config.apiKey) throw new Error('[Hydrous] config.apiKey is required');\n\n this.auth = new AuthClient(config);\n this.records = new RecordsClient(config);\n this.analytics = new AnalyticsClient(config);\n this.storage = new StorageClient(config);\n }\n}\n","// ─── Main client ─────────────────────────────────────────────────────────────\nexport { HydrousClient } from './client.js';\n\n// ─── Sub-clients (for direct instantiation or testing) ───────────────────────\nexport { AuthClient } from './auth/index.js';\nexport { RecordsClient } from './records/index.js';\nexport { AnalyticsClient } from './analytics/index.js';\nexport { StorageClient } from './storage/index.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\nexport type {\n // Core\n HydrousConfig,\n HydrousResponse,\n HydrousError,\n // Records\n Filter,\n FilterOperator,\n QueryOptions,\n RecordResponse,\n SingleRecordResponse,\n // Auth\n AuthUser,\n AuthSession,\n SignUpOptions,\n SignInOptions,\n // Analytics\n TrackEventOptions,\n AnalyticsQueryOptions,\n AnalyticsEvent,\n // Storage\n BucketKey,\n UploadStage,\n UploadProgress,\n DownloadProgress,\n UploadResult,\n UploadOptions,\n BatchUploadOptions,\n BatchUploadResult,\n BatchDownloadFile,\n BatchDownloadOptions,\n FileMetadata,\n StorageItem,\n ListResult,\n ListOptions,\n SignedUrlResult,\n SignedUrlOptions,\n StorageStats,\n} from './types/index.js';\n\n// ─── Query helpers ────────────────────────────────────────────────────────────\nexport { eq, neq, gt, lt, inArray } from './utils/query.js';\n\n// ─── Error utilities ─────────────────────────────────────────────────────────\nexport { HydrousSDKError, isHydrousError } from './utils/errors.js';\n\n// ─── Convenience factory ─────────────────────────────────────────────────────\nimport { HydrousClient } from './client.js';\nimport type { HydrousConfig } from './types/index.js';\n\n/**\n * Create and return a `HydrousClient` instance.\n *\n * @example\n * import { createClient } from 'hydrous';\n *\n * const hydrous = createClient({\n * url: 'https://api.myapp.hydrous.app',\n * apiKey: 'hk_live_…',\n * });\n */\nexport function createClient(config: HydrousConfig): HydrousClient {\n return new HydrousClient(config);\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/errors.ts","../src/utils/http.ts","../src/auth/client.ts","../src/utils/query.ts","../src/records/client.ts","../src/analytics/client.ts","../src/storage/scoped.ts","../src/storage/manager.ts","../src/client.ts","../src/index.ts"],"names":["_a","_b"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { HydrousError } from '../types/index.js';\n\nexport class HydrousDBError extends Error {\n readonly code: string;\n readonly status: number | undefined;\n\n constructor(message: string, code = 'SDK_ERROR', status?: number) {\n super(message);\n this.name = 'HydrousDBError';\n this.code = code;\n this.status = status;\n }\n}\n\nexport function toHydrousError(err: unknown): HydrousError {\n if (err instanceof HydrousDBError) {\n return { message: err.message, code: err.code, status: err.status };\n }\n if (err instanceof Error) {\n return { message: err.message, code: 'UNKNOWN_ERROR' };\n }\n return { message: String(err), code: 'UNKNOWN_ERROR' };\n}\n\nexport function isHydrousError(err: unknown): err is HydrousDBError {\n return err instanceof HydrousDBError;\n}\n","import { HydrousDBError } from './errors.js';\n\nexport async function parseResponse<T>(res: Response): Promise<T> {\n let body: unknown;\n try {\n body = await res.json();\n } catch {\n if (!res.ok) throw new HydrousDBError(`HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n return undefined as T;\n }\n if (!res.ok) {\n const e = body as { error?: string; message?: string; code?: string };\n throw new HydrousDBError(\n e.error || e.message || `HTTP ${res.status}`,\n e.code || 'HTTP_ERROR',\n res.status,\n );\n }\n return body as T;\n}\n\nexport function buildUrl(\n base: string,\n path: string,\n params?: Record<string, string | number | boolean | undefined>,\n): string {\n const url = new URL(path, base.endsWith('/') ? base : base + '/');\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined && v !== null) url.searchParams.set(k, String(v));\n }\n }\n return url.toString();\n}\n\nexport function mergeHeaders(\n a: Record<string, string>,\n b?: Record<string, string>,\n): Record<string, string> {\n return { ...a, ...b };\n}\n\n/**\n * Parse a streaming Server-Sent Events response.\n * Resolves when the stream ends.\n */\nexport async function readSSEStream(\n response: Response,\n onEvent: (eventType: string, data: unknown) => void,\n): Promise<void> {\n if (!response.body) return;\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buf = '';\n\n const flush = (chunk: string) => {\n buf += chunk;\n const blocks = buf.split('\\n\\n');\n buf = blocks.pop() ?? '';\n for (const block of blocks) {\n if (!block.trim()) continue;\n let eventType = 'message';\n let dataLine: string | null = null;\n for (const line of block.split('\\n')) {\n if (line.startsWith('event:')) eventType = line.slice(6).trim();\n if (line.startsWith('data:')) dataLine = line.slice(5).trim();\n }\n if (dataLine === null) continue;\n try { onEvent(eventType, JSON.parse(dataLine)); } catch { /* skip heartbeats */ }\n }\n };\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n flush(decoder.decode(value, { stream: true }));\n }\n if (buf.trim()) flush('');\n}\n\n/** Parse an already-complete SSE text body (XHR response flow) */\nexport function parseSSEText(\n text: string,\n onEvent: (eventType: string, data: unknown) => void,\n): void {\n const blocks = text.split('\\n\\n');\n for (const block of blocks) {\n if (!block.trim()) continue;\n let eventType = 'message';\n let dataLine: string | null = null;\n for (const line of block.split('\\n')) {\n if (line.startsWith('event:')) eventType = line.slice(6).trim();\n if (line.startsWith('data:')) dataLine = line.slice(5).trim();\n }\n if (dataLine === null) continue;\n try { onEvent(eventType, JSON.parse(dataLine)); } catch { /* skip */ }\n }\n}\n\n/**\n * XHR-based upload — gives real byte-level progress during the outbound\n * request body transfer. `fetch()` cannot do this because it buffers the\n * entire body before sending.\n */\nexport function xhrUpload(\n url: string,\n body: FormData | Blob | BufferSource,\n headers: Record<string, string>,\n onProgress?: (loaded: number, total: number) => void,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', url);\n for (const [k, v] of Object.entries(headers)) xhr.setRequestHeader(k, v);\n xhr.responseType = 'text';\n\n if (onProgress) {\n xhr.upload.onprogress = (e) => {\n if (e.lengthComputable) onProgress(e.loaded, e.total);\n };\n }\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText);\n } else {\n try {\n const d = JSON.parse(xhr.responseText) as { error?: string };\n reject(new HydrousDBError(d.error ?? `HTTP ${xhr.status}`, 'HTTP_ERROR', xhr.status));\n } catch {\n reject(new HydrousDBError(`HTTP ${xhr.status}`, 'HTTP_ERROR', xhr.status));\n }\n }\n };\n\n xhr.onerror = () => reject(new HydrousDBError('Network error', 'NETWORK_ERROR'));\n xhr.onabort = () => reject(new HydrousDBError('Upload aborted', 'UPLOAD_ABORTED'));\n xhr.ontimeout = () => reject(new HydrousDBError('Upload timed out', 'UPLOAD_TIMEOUT'));\n xhr.send(body);\n });\n}\n","import type {\n HydrousConfig, HydrousResponse,\n AuthUser, AuthSession, SignUpOptions, SignInOptions,\n} from '../types/index.js';\nimport { toHydrousError } from '../utils/errors.js';\nimport { buildUrl, mergeHeaders, parseResponse } from '../utils/http.js';\n\nexport class AuthClient {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n private session: AuthSession | null = null;\n\n constructor(config: HydrousConfig) {\n this.baseUrl = config.url;\n this.headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.authKey}`,\n };\n }\n\n /** Create a new user account */\n async signUp(options: SignUpOptions): Promise<HydrousResponse<AuthSession>> {\n try {\n const res = await fetch(buildUrl(this.baseUrl, 'auth/signup'), {\n method: 'POST', headers: this.headers, body: JSON.stringify(options),\n });\n const json = await parseResponse<{ data: AuthSession }>(res);\n this.session = json.data;\n return { data: json.data, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Sign in with email and password */\n async signIn(options: SignInOptions): Promise<HydrousResponse<AuthSession>> {\n try {\n const res = await fetch(buildUrl(this.baseUrl, 'auth/signin'), {\n method: 'POST', headers: this.headers, body: JSON.stringify(options),\n });\n const json = await parseResponse<{ data: AuthSession }>(res);\n this.session = json.data;\n return { data: json.data, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Sign out and invalidate the current session */\n async signOut(): Promise<HydrousResponse<void>> {\n try {\n const res = await fetch(buildUrl(this.baseUrl, 'auth/signout'), {\n method: 'POST',\n headers: mergeHeaders(this.headers, this._sessionHeader()),\n });\n await parseResponse<void>(res);\n this.session = null;\n return { data: undefined, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Get the currently authenticated user */\n async getUser(): Promise<HydrousResponse<AuthUser>> {\n try {\n const res = await fetch(buildUrl(this.baseUrl, 'auth/user'), {\n headers: mergeHeaders(this.headers, this._sessionHeader()),\n });\n const json = await parseResponse<{ data: AuthUser }>(res);\n return { data: json.data, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Refresh the access token using the stored refresh token */\n async refreshSession(): Promise<HydrousResponse<AuthSession>> {\n if (!this.session?.refreshToken) {\n return { data: null, error: { message: 'No active session', code: 'NO_SESSION' } };\n }\n try {\n const res = await fetch(buildUrl(this.baseUrl, 'auth/refresh'), {\n method: 'POST', headers: this.headers,\n body: JSON.stringify({ refreshToken: this.session.refreshToken }),\n });\n const json = await parseResponse<{ data: AuthSession }>(res);\n this.session = json.data;\n return { data: json.data, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Return the current in-memory session (may be null) */\n getSession(): AuthSession | null { return this.session; }\n\n private _sessionHeader(): Record<string, string> {\n return this.session?.accessToken\n ? { 'X-Session-Token': this.session.accessToken }\n : {};\n }\n}\n","import type { Filter, FilterOperator, QueryOptions } from '../types/index.js';\n\nexport function serialiseQuery(opts: QueryOptions = {}): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts.limit !== undefined) params['limit'] = String(opts.limit);\n if (opts.offset !== undefined) params['offset'] = String(opts.offset);\n if (opts.select && opts.select.length > 0) params['select'] = opts.select.join(',');\n if (opts.orderBy) {\n params['orderBy'] = opts.orderBy.field;\n params['direction'] = opts.orderBy.direction ?? 'asc';\n }\n const filters = opts.where\n ? Array.isArray(opts.where) ? opts.where : [opts.where]\n : [];\n if (filters.length > 0) params['where'] = JSON.stringify(filters);\n return params;\n}\n\nexport const eq = (field: string, value: unknown): Filter => ({ field, operator: 'eq' as FilterOperator, value });\nexport const neq = (field: string, value: unknown): Filter => ({ field, operator: 'neq' as FilterOperator, value });\nexport const gt = (field: string, value: unknown): Filter => ({ field, operator: 'gt' as FilterOperator, value });\nexport const lt = (field: string, value: unknown): Filter => ({ field, operator: 'lt' as FilterOperator, value });\nexport const gte = (field: string, value: unknown): Filter => ({ field, operator: 'gte' as FilterOperator, value });\nexport const lte = (field: string, value: unknown): Filter => ({ field, operator: 'lte' as FilterOperator, value });\nexport const inArray = (field: string, value: unknown[]): Filter => ({ field, operator: 'in' as FilterOperator, value });\n","import type {\n HydrousConfig, QueryOptions,\n RecordResponse, SingleRecordResponse,\n} from '../types/index.js';\nimport { toHydrousError } from '../utils/errors.js';\nimport { buildUrl, parseResponse } from '../utils/http.js';\nimport { serialiseQuery } from '../utils/query.js';\n\nexport class RecordsClient {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n\n constructor(config: HydrousConfig) {\n this.baseUrl = config.url;\n this.headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.bucketSecurityKey}`,\n };\n }\n\n /** Query records from a collection */\n async select<T = Record<string, unknown>>(\n collection: string,\n options: QueryOptions = {},\n ): Promise<RecordResponse<T>> {\n try {\n const url = buildUrl(this.baseUrl, `records/${collection}`, serialiseQuery(options));\n const res = await fetch(url, { headers: this.headers });\n const json = await parseResponse<{ data: T[]; count: number }>(res);\n return { data: json.data, count: json.count, error: null };\n } catch (err) { return { data: [], count: 0, error: toHydrousError(err) }; }\n }\n\n /** Fetch a single record by ID */\n async get<T = Record<string, unknown>>(\n collection: string,\n id: string,\n ): Promise<SingleRecordResponse<T>> {\n try {\n const res = await fetch(buildUrl(this.baseUrl, `records/${collection}/${id}`), { headers: this.headers });\n const json = await parseResponse<{ data: T }>(res);\n return { data: json.data, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Insert one or more records */\n async insert<T = Record<string, unknown>>(\n collection: string,\n payload: Partial<T> | Partial<T>[],\n ): Promise<RecordResponse<T>> {\n try {\n const res = await fetch(buildUrl(this.baseUrl, `records/${collection}`), {\n method: 'POST', headers: this.headers, body: JSON.stringify(payload),\n });\n const json = await parseResponse<{ data: T[]; count: number }>(res);\n return { data: json.data, count: json.count, error: null };\n } catch (err) { return { data: [], count: 0, error: toHydrousError(err) }; }\n }\n\n /** Update a record by ID */\n async update<T = Record<string, unknown>>(\n collection: string,\n id: string,\n payload: Partial<T>,\n ): Promise<SingleRecordResponse<T>> {\n try {\n const res = await fetch(buildUrl(this.baseUrl, `records/${collection}/${id}`), {\n method: 'PATCH', headers: this.headers, body: JSON.stringify(payload),\n });\n const json = await parseResponse<{ data: T }>(res);\n return { data: json.data, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Delete a record by ID */\n async delete(collection: string, id: string): Promise<SingleRecordResponse<void>> {\n try {\n const res = await fetch(buildUrl(this.baseUrl, `records/${collection}/${id}`), {\n method: 'DELETE', headers: this.headers,\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n}\n","import type {\n HydrousConfig, HydrousResponse,\n TrackEventOptions, AnalyticsQueryOptions,\n AnalyticsEvent, RecordResponse,\n} from '../types/index.js';\nimport { toHydrousError } from '../utils/errors.js';\nimport { buildUrl, parseResponse } from '../utils/http.js';\n\nexport class AnalyticsClient {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n\n constructor(config: HydrousConfig) {\n this.baseUrl = config.url;\n this.headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.bucketSecurityKey}`,\n };\n }\n\n /** Track a single analytics event */\n async track(options: TrackEventOptions): Promise<HydrousResponse<void>> {\n try {\n const res = await fetch(buildUrl(this.baseUrl, 'analytics/track'), {\n method: 'POST', headers: this.headers,\n body: JSON.stringify({ ...options, timestamp: options.timestamp ?? Date.now() }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Track many events in one request */\n async trackBatch(events: TrackEventOptions[]): Promise<HydrousResponse<void>> {\n try {\n const stamped = events.map(e => ({ ...e, timestamp: e.timestamp ?? Date.now() }));\n const res = await fetch(buildUrl(this.baseUrl, 'analytics/track/batch'), {\n method: 'POST', headers: this.headers,\n body: JSON.stringify({ events: stamped }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Query recorded analytics events */\n async query(options: AnalyticsQueryOptions = {}): Promise<RecordResponse<AnalyticsEvent>> {\n try {\n const params: Record<string, string> = {};\n if (options.event) params['event'] = options.event;\n if (options.from) params['from'] = options.from;\n if (options.to) params['to'] = options.to;\n if (options.limit) params['limit'] = String(options.limit);\n if (options.groupBy) params['groupBy'] = options.groupBy;\n const url = buildUrl(this.baseUrl, 'analytics/events', params);\n const res = await fetch(url, { headers: this.headers });\n const json = await parseResponse<{ data: AnalyticsEvent[]; count: number }>(res);\n return { data: json.data, count: json.count, error: null };\n } catch (err) { return { data: [], count: 0, error: toHydrousError(err) }; }\n }\n}\n","import type {\n HydrousResponse,\n UploadOptions, UploadResult,\n BatchUploadOptions, BatchUploadResult,\n BatchDownloadOptions, BatchDownloadFile,\n ListOptions, ListResult,\n SignedUrlOptions, SignedUrlResult,\n FileMetadata, StorageStats, StorageItem,\n UploadProgress, DownloadProgress,\n} from '../types/index.js';\nimport { HydrousDBError, toHydrousError } from '../utils/errors.js';\nimport {\n buildUrl, parseResponse,\n readSSEStream, parseSSEText, xhrUpload,\n} from '../utils/http.js';\n\n// ── env detect ────────────────────────────────────────────────────────────────\nconst isBrowser =\n typeof window !== 'undefined' && typeof XMLHttpRequest !== 'undefined';\n\n// ── internal helpers ──────────────────────────────────────────────────────────\nfunction storageBase(url: string, bucketKey: string): string {\n return `${url.replace(/\\/$/, '')}/storage/${encodeURIComponent(bucketKey)}`;\n}\n\nfunction storageHeaders(bucketKey: string): Record<string, string> {\n return { 'X-Storage-Key': bucketKey };\n}\n\nfunction jsonHeaders(bucketKey: string): Record<string, string> {\n return { 'X-Storage-Key': bucketKey, 'Content-Type': 'application/json' };\n}\n\n/** Pull progress events + final results out of a completed SSE text body */\nfunction drainSSE(\n raw: string,\n onProgress: ((p: UploadProgress) => void) | undefined,\n): { results: UploadResult[]; errors: Array<{ path: string; error: string; code: string }> } {\n const results: UploadResult[] = [];\n const errors: Array<{ path: string; error: string; code: string }> = [];\n\n parseSSEText(raw, (eventType, data) => {\n const d = data as Record<string, unknown>;\n\n if (eventType === 'progress' && onProgress) {\n onProgress({\n index: (d['index'] as number) ?? 0,\n total: (d['total'] as number) ?? 1,\n path: (d['path'] as string) ?? '',\n stage: (d['stage'] as UploadProgress['stage']) ?? 'uploading',\n bytesUploaded: (d['bytesUploaded'] as number) ?? 0,\n totalBytes: (d['totalBytes'] as number) ?? 0,\n percent: (d['percent'] as number) ?? 0,\n bytesPerSecond: (d['bytesPerSecond'] as number | null) ?? null,\n eta: (d['eta'] as number | null) ?? null,\n result: d['result'] as UploadResult | undefined,\n error: d['error'] as string | undefined,\n code: d['code'] as string | undefined,\n });\n }\n\n if (eventType === 'done') {\n if ((d as { path?: string })['path']) {\n results.push(d as unknown as UploadResult);\n } else if (Array.isArray(d['succeeded'])) {\n results.push(...(d['succeeded'] as UploadResult[]));\n errors.push(...(d['errors'] as Array<{ path: string; error: string; code: string }> ?? []));\n }\n }\n\n if (eventType === 'error') {\n errors.push({\n path: '',\n error: (d['error'] as string) ?? 'Unknown error',\n code: (d['code'] as string) ?? 'UNKNOWN',\n });\n }\n });\n\n return { results, errors };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// ScopedStorageClient\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * A storage client that is already bound to a specific storage key.\n * You get one of these by calling `db.storage('keyName')`.\n *\n * None of the methods on this class require you to pass a bucket key —\n * it's already baked in.\n */\nexport class ScopedStorageClient {\n private readonly base: string;\n private readonly key: string;\n readonly keyName: string;\n\n constructor(baseUrl: string, keyName: string, bucketKey: string) {\n this.base = storageBase(baseUrl, bucketKey);\n this.key = bucketKey;\n this.keyName = keyName;\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // UPLOAD — single file\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Upload a single file.\n *\n * Supply `onProgress` to receive live upload ticks including bytes\n * transferred, speed (bytes/sec), ETA, and lifecycle stage.\n *\n * **Stage sequence:**\n * `pending → compressing → uploading → done | error`\n *\n * In browsers the progress is tracked at the network level via XHR, so\n * `percent` reflects actual bytes leaving the device. `done` only fires\n * after the server confirms the write to cloud storage, so 100% is real.\n *\n * @example\n * const { data, error } = await db.storage('avatars').upload(file, {\n * path: 'users/alice.jpg',\n * overwrite: true,\n * onProgress: (p) => {\n * setProgress(p.percent); // e.g. drive a <progress> bar\n * setSpeed(`${p.bytesPerSecond} B/s`);\n * setEta(`${p.eta}s remaining`);\n * },\n * });\n */\n async upload(\n file: File | Blob | Uint8Array | ArrayBuffer,\n options: UploadOptions = {},\n ): Promise<HydrousResponse<UploadResult>> {\n const { path, overwrite = false, onProgress } = options;\n\n try {\n const url = `${this.base}/upload`;\n const form = new FormData();\n\n if (file instanceof Uint8Array) {\n form.append('file', new Blob([file.buffer as ArrayBuffer]), path ?? 'file');\n } else if (file instanceof ArrayBuffer) {\n form.append('file', new Blob([file]), path ?? 'file');\n } else {\n form.append('file', file, path ?? (file instanceof File ? file.name : 'file'));\n }\n\n if (path) form.append('path', path);\n if (overwrite) form.append('overwrite', 'true');\n\n const headers = storageHeaders(this.key);\n\n // ── browser: XHR (real progress) + SSE parse ──────────────────────────\n if (isBrowser) {\n const totalBytes =\n file instanceof Blob ? file.size :\n file instanceof Uint8Array ? file.byteLength :\n (file as ArrayBuffer).byteLength;\n\n const rawBody = await xhrUpload(url, form, headers, (loaded, total) => {\n onProgress?.({\n index: 0, total: 1, path: path ?? '',\n stage: 'uploading',\n bytesUploaded: loaded,\n totalBytes: total || totalBytes,\n percent: Math.min(99, Math.round((loaded / (total || totalBytes)) * 100)),\n bytesPerSecond: null,\n eta: null,\n });\n });\n\n const { results, errors } = drainSSE(rawBody, onProgress);\n\n if (errors.length > 0 && results.length === 0) {\n return { data: null, error: { message: errors[0].error, code: errors[0].code } };\n }\n\n const result = results[0] ?? null;\n if (result && onProgress) {\n onProgress({ index: 0, total: 1, path: result.path, stage: 'done',\n bytesUploaded: totalBytes, totalBytes, percent: 100,\n bytesPerSecond: null, eta: 0, result });\n }\n return { data: result, error: null };\n }\n\n // ── Node / Edge: fetch + streaming SSE ────────────────────────────────\n const res = await fetch(url, { method: 'POST', headers, body: form });\n if (!res.ok) {\n const e = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousDBError(e.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n\n let finalResult: UploadResult | null = null;\n await readSSEStream(res, (eventType, data) => {\n const d = data as Record<string, unknown>;\n if (eventType === 'progress' && onProgress) {\n onProgress({\n index: 0, total: 1, path: path ?? '',\n stage: (d['stage'] as UploadProgress['stage']) ?? 'uploading',\n bytesUploaded: (d['bytesUploaded'] as number) ?? 0,\n totalBytes: (d['totalBytes'] as number) ?? 0,\n percent: (d['percent'] as number) ?? 0,\n bytesPerSecond: (d['bytesPerSecond'] as number | null) ?? null,\n eta: (d['eta'] as number | null) ?? null,\n result: d['result'] as UploadResult | undefined,\n });\n }\n if (eventType === 'done') finalResult = data as UploadResult;\n if (eventType === 'error') {\n throw new HydrousDBError(\n (d['error'] as string) ?? 'Upload failed',\n (d['code'] as string) ?? 'UPLOAD_ERROR',\n );\n }\n });\n\n return { data: finalResult, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // UPLOAD TEXT / JSON\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Upload raw text or JSON content directly — no File object needed.\n *\n * @example\n * // Save a JSON config\n * await db.storage('configs').uploadText(\n * 'settings/app.json',\n * JSON.stringify({ theme: 'dark' }),\n * { mimeType: 'application/json' }\n * );\n */\n async uploadText(\n path: string,\n content: string,\n options: { mimeType?: string; overwrite?: boolean; onProgress?: UploadOptions['onProgress'] } = {},\n ): Promise<HydrousResponse<UploadResult>> {\n const { mimeType = 'text/plain', overwrite = false, onProgress } = options;\n try {\n const res = await fetch(`${this.base}/upload-raw`, {\n method: 'POST', headers: jsonHeaders(this.key),\n body: JSON.stringify({ path, content, mimeType, overwrite }),\n });\n if (!res.ok) {\n const e = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousDBError(e.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n let finalResult: UploadResult | null = null;\n await readSSEStream(res, (eventType, data) => {\n const d = data as Record<string, unknown>;\n if (eventType === 'progress' && onProgress) {\n onProgress({\n index: 0, total: 1, path,\n stage: (d['stage'] as UploadProgress['stage']) ?? 'uploading',\n bytesUploaded: (d['bytesUploaded'] as number) ?? 0,\n totalBytes: (d['totalBytes'] as number) ?? 0,\n percent: (d['percent'] as number) ?? 0,\n bytesPerSecond: (d['bytesPerSecond'] as number | null) ?? null,\n eta: (d['eta'] as number | null) ?? null,\n });\n }\n if (eventType === 'done') finalResult = data as UploadResult;\n });\n return { data: finalResult, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // BATCH UPLOAD\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Upload multiple files in one request.\n *\n * `onProgress` fires per file — use `p.index` to identify which file.\n * All files receive a `pending` event upfront so you can render progress\n * bars immediately before any data is sent.\n *\n * @example\n * await db.storage('documents').batchUpload(files, {\n * prefix: 'reports/2024/',\n * onProgress: (p) => updateBar(p.index, p.percent),\n * });\n */\n async batchUpload(\n files: File[],\n options: BatchUploadOptions = {},\n ): Promise<HydrousResponse<BatchUploadResult>> {\n const { prefix = '', paths, overwrite = false, onProgress } = options;\n try {\n const url = `${this.base}/batch-upload`;\n const resolvedPaths = files.map((f, i) => paths?.[i] ?? `${prefix}${f.name}`);\n const form = new FormData();\n\n files.forEach(f => form.append('files', f, f.name));\n form.append('paths', JSON.stringify(resolvedPaths));\n if (overwrite) form.append('overwrite', 'true');\n\n const headers = storageHeaders(this.key);\n\n if (isBrowser) {\n const totalBytes = files.reduce((s, f) => s + f.size, 0);\n const rawBody = await xhrUpload(url, form, headers, (loaded, total) => {\n if (!onProgress) return;\n let cursor = 0;\n for (let i = 0; i < files.length; i++) {\n const share = files[i].size / (totalBytes || 1);\n const fileLoaded = Math.max(0, Math.min(\n files[i].size,\n ((loaded / (total || totalBytes)) - cursor) / share * files[i].size,\n ));\n onProgress({\n index: i, total: files.length, path: resolvedPaths[i],\n stage: 'uploading',\n bytesUploaded: Math.round(fileLoaded),\n totalBytes: files[i].size,\n percent: Math.min(99, Math.round((fileLoaded / files[i].size) * 100)),\n bytesPerSecond: null, eta: null,\n });\n cursor += share;\n }\n });\n const { results, errors } = drainSSE(rawBody, onProgress);\n return { data: { succeeded: results, failed: errors }, error: null };\n }\n\n const res = await fetch(url, { method: 'POST', headers, body: form });\n if (!res.ok) {\n const e = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousDBError(e.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n\n const succeeded: UploadResult[] = [];\n const failed: Array<{ path: string; error: string; code: string }> = [];\n await readSSEStream(res, (eventType, data) => {\n const d = data as Record<string, unknown>;\n if (eventType === 'progress' && onProgress) {\n onProgress({\n index: (d['index'] as number) ?? 0,\n total: (d['total'] as number) ?? files.length,\n path: (d['path'] as string) ?? '',\n stage: (d['stage'] as UploadProgress['stage']) ?? 'uploading',\n bytesUploaded: (d['bytesUploaded'] as number) ?? 0,\n totalBytes: (d['totalBytes'] as number) ?? 0,\n percent: (d['percent'] as number) ?? 0,\n bytesPerSecond: (d['bytesPerSecond'] as number | null) ?? null,\n eta: (d['eta'] as number | null) ?? null,\n });\n }\n if (eventType === 'done' && d['succeeded']) {\n succeeded.push(...(d['succeeded'] as UploadResult[]));\n failed.push(...(d['errors'] as Array<{ path: string; error: string; code: string }> ?? []));\n }\n });\n return { data: { succeeded, failed }, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // DOWNLOAD\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Download a single file and return its content as an `ArrayBuffer`.\n *\n * @example\n * const { data } = await db.storage('avatars').download('users/alice.jpg');\n * const blob = new Blob([data!]);\n * img.src = URL.createObjectURL(blob);\n */\n async download(filePath: string): Promise<HydrousResponse<ArrayBuffer>> {\n try {\n const res = await fetch(`${this.base}/download/${filePath}`, {\n headers: storageHeaders(this.key),\n });\n if (!res.ok) {\n const e = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousDBError(e.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n return { data: await res.arrayBuffer(), error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // BATCH DOWNLOAD\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Download multiple files in one request.\n *\n * Set `autoSave: true` (browser only) to trigger a Save dialog per file.\n *\n * @example\n * const { data } = await db.storage('reports').batchDownload(\n * ['jan.pdf', 'feb.pdf'],\n * { autoSave: true, onProgress: (p) => console.log(p.path, p.status) }\n * );\n */\n async batchDownload(\n filePaths: string[],\n options: BatchDownloadOptions = {},\n ): Promise<HydrousResponse<BatchDownloadFile[]>> {\n const { concurrency = 5, onProgress, autoSave = false } = options;\n try {\n const res = await fetch(`${this.base}/batch-download`, {\n method: 'POST', headers: jsonHeaders(this.key),\n body: JSON.stringify({ paths: filePaths, concurrency }),\n });\n if (!res.ok) {\n const e = await res.json().catch(() => ({})) as { error?: string };\n throw new HydrousDBError(e.error ?? `HTTP ${res.status}`, 'HTTP_ERROR', res.status);\n }\n\n const downloadedFiles: BatchDownloadFile[] = [];\n await readSSEStream(res, (eventType, data) => {\n const d = data as Record<string, unknown>;\n if (eventType === 'file') {\n const base64 = d['content'] as string;\n const mimeType = (d['mimeType'] as string) ?? 'application/octet-stream';\n const path = (d['path'] as string) ?? '';\n const size = (d['size'] as number) ?? 0;\n const index = (d['index'] as number) ?? 0;\n\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n\n downloadedFiles.push({ path, content: bytes.buffer, mimeType, size });\n\n onProgress?.({ index, total: filePaths.length, path, status: 'success', size, mimeType });\n\n if (autoSave && isBrowser) {\n const blob = new Blob([bytes.buffer], { type: mimeType });\n const blobUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = blobUrl; a.download = path.split('/').pop() ?? 'download'; a.click();\n setTimeout(() => URL.revokeObjectURL(blobUrl), 5000);\n }\n }\n if (eventType === 'error' && onProgress) {\n const index = (d['index'] as number) ?? 0;\n onProgress({ index, total: filePaths.length, path: filePaths[index] ?? '', status: 'error',\n error: (d['error'] as string) ?? 'Download failed' });\n }\n });\n return { data: downloadedFiles, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // LIST\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * List files and folders (paginated).\n *\n * @example\n * const { data } = await db.storage('avatars').list({ prefix: 'users/' });\n * for (const item of data!.items) {\n * console.log(item.type, item.path, item.size);\n * }\n */\n async list(options: ListOptions = {}): Promise<HydrousResponse<ListResult>> {\n const { prefix = '', limit = 50, cursor } = options;\n try {\n const url = buildUrl(this.base, 'list', {\n prefix: prefix || undefined, limit, cursor: cursor || undefined,\n });\n const res = await fetch(url.replace(this.base + '/list', `${this.base}/list`), {\n headers: storageHeaders(this.key),\n });\n // buildUrl prepends a second base — use direct construction instead\n const u = `${this.base}/list?${new URLSearchParams(\n Object.entries({ prefix: prefix || '', limit: String(limit), ...(cursor ? { cursor } : {}) })\n .filter(([, v]) => v !== '')\n ).toString()}`;\n const r = await fetch(u, { headers: storageHeaders(this.key) });\n const json = await parseResponse<ListResult>(r);\n return { data: json, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // METADATA\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Get metadata for a file (size, MIME type, compression, etc.)\n *\n * @example\n * const { data: meta } = await db.storage('docs').metadata('report.pdf');\n * console.log(meta!.size, meta!.mimeType, meta!.isCompressed);\n */\n async metadata(filePath: string): Promise<HydrousResponse<FileMetadata>> {\n try {\n const res = await fetch(`${this.base}/metadata/${filePath}`, {\n headers: storageHeaders(this.key),\n });\n const json = await parseResponse<{ data: FileMetadata }>(res);\n return { data: json.data, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // DELETE\n // ══════════════════════════════════════════════════════════════════════════\n\n /** Delete a single file */\n async deleteFile(filePath: string): Promise<HydrousResponse<void>> {\n try {\n const res = await fetch(`${this.base}/file`, {\n method: 'DELETE', headers: jsonHeaders(this.key),\n body: JSON.stringify({ path: filePath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Recursively delete a folder and all its contents */\n async deleteFolder(folderPath: string): Promise<HydrousResponse<void>> {\n try {\n const res = await fetch(`${this.base}/folder`, {\n method: 'DELETE', headers: jsonHeaders(this.key),\n body: JSON.stringify({ path: folderPath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Create an empty folder */\n async createFolder(folderPath: string): Promise<HydrousResponse<void>> {\n try {\n const res = await fetch(`${this.base}/folder`, {\n method: 'POST', headers: jsonHeaders(this.key),\n body: JSON.stringify({ path: folderPath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // MOVE & COPY\n // ══════════════════════════════════════════════════════════════════════════\n\n /** Move (rename) a file */\n async move(fromPath: string, toPath: string): Promise<HydrousResponse<void>> {\n try {\n const res = await fetch(`${this.base}/move`, {\n method: 'POST', headers: jsonHeaders(this.key),\n body: JSON.stringify({ from: fromPath, to: toPath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n /** Copy a file (original is kept) */\n async copy(fromPath: string, toPath: string): Promise<HydrousResponse<void>> {\n try {\n const res = await fetch(`${this.base}/copy`, {\n method: 'POST', headers: jsonHeaders(this.key),\n body: JSON.stringify({ from: fromPath, to: toPath }),\n });\n await parseResponse<void>(res);\n return { data: undefined, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // SIGNED URL\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Generate a time-limited public URL for a private file.\n *\n * @example\n * const { data } = await db.storage('contracts').signedUrl('nda.pdf', { expiresIn: 300 });\n * console.log(data!.signedUrl); // share this\n */\n async signedUrl(\n filePath: string,\n options: SignedUrlOptions = {},\n ): Promise<HydrousResponse<SignedUrlResult>> {\n const { expiresIn = 3600 } = options;\n try {\n const res = await fetch(`${this.base}/signed-url`, {\n method: 'POST', headers: jsonHeaders(this.key),\n body: JSON.stringify({ path: filePath, expiresInSeconds: expiresIn }),\n });\n const json = await parseResponse<SignedUrlResult>(res);\n return { data: json, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // STATS\n // ══════════════════════════════════════════════════════════════════════════\n\n /**\n * Get usage and billing stats for this storage key.\n *\n * @example\n * const { data } = await db.storage('main').stats();\n * console.log(data!.totalFiles, data!.totalSizeBytes);\n */\n async stats(): Promise<HydrousResponse<StorageStats>> {\n try {\n const res = await fetch(`${this.base}/stats`, {\n headers: storageHeaders(this.key),\n });\n const json = await parseResponse<{ data: StorageStats }>(res);\n return { data: json.data, error: null };\n } catch (err) { return { data: null, error: toHydrousError(err) }; }\n }\n}\n","import type { HydrousConfig, StorageKeys } from '../types/index.js';\nimport { HydrousDBError } from '../utils/errors.js';\nimport { ScopedStorageClient } from './scoped.js';\n\n/**\n * StorageManager is the object exposed as `db.storage`.\n *\n * Call `.use(keyName)` — or use the shorthand `db.storage('keyName')` which\n * the main HydrousClient wires up as a Proxy — to get a scoped storage client\n * bound to that key.\n *\n * ```ts\n * db.storage('main').upload(file)\n * db.storage('avatars').list()\n * db.storage('documents').download('report.pdf')\n * ```\n */\nexport class StorageManager {\n private readonly baseUrl: string;\n private readonly _keys: StorageKeys;\n private readonly cache: Map<string, ScopedStorageClient> = new Map();\n\n constructor(config: HydrousConfig) {\n this.baseUrl = config.url;\n this._keys = config.storageKeys;\n }\n\n /**\n * Get a storage client scoped to a named key.\n *\n * @param keyName - Must match a property you declared in `storageKeys`\n *\n * @example\n * const avatarStore = db.storage('avatars');\n * const documentStore = db.storage('documents');\n *\n * await avatarStore.upload(file, { path: 'users/alice.jpg' });\n * const list = await documentStore.list({ prefix: 'invoices/' });\n */\n use(keyName: string): ScopedStorageClient {\n const bucketKey = this._keys[keyName];\n if (!bucketKey) {\n const available = Object.keys(this._keys).join(', ');\n throw new HydrousDBError(\n `Storage key \"${keyName}\" is not defined.\\nAvailable: ${available || '(none)'}`,\n 'UNKNOWN_STORAGE_KEY',\n );\n }\n if (!this.cache.has(keyName)) {\n this.cache.set(keyName, new ScopedStorageClient(this.baseUrl, keyName, bucketKey));\n }\n return this.cache.get(keyName)!;\n }\n\n /** Return the names of all configured storage keys */\n keyNames(): string[] {\n return Object.keys(this._keys);\n }\n}\n","import type { HydrousConfig } from './types/index.js';\nimport { AuthClient } from './auth/client.js';\nimport { RecordsClient } from './records/client.js';\nimport { AnalyticsClient } from './analytics/client.js';\nimport { StorageManager } from './storage/manager.js';\nimport { ScopedStorageClient } from './storage/scoped.js';\n\n// ── callable storage interface ────────────────────────────────────────────────\n// We want db.storage('avatars').upload(...)\n// So storage must be callable AND have the manager methods on it.\n\nexport interface CallableStorage {\n /** Get a scoped storage client by key name */\n (keyName: string): ScopedStorageClient;\n /** Same as calling db.storage(keyName) — more explicit */\n use(keyName: string): ScopedStorageClient;\n /** Return names of all configured storage keys */\n keyNames(): string[];\n}\n\n/**\n * The HydrousDB root client.\n *\n * Create once and reuse across your app:\n *\n * ```ts\n * import { createClient } from 'hydrousdb';\n *\n * const db = createClient({\n * url: 'https://api.myapp.hydrous.app',\n * authKey: 'hk_auth_…',\n * bucketSecurityKey: 'hk_bucket_…',\n * storageKeys: {\n * main: 'ssk_main_…',\n * avatars: 'ssk_avatars_…',\n * documents: 'ssk_docs_…',\n * },\n * });\n * ```\n */\nexport class HydrousClient {\n /** Auth — sign up, sign in, sign out, session management */\n public readonly auth: AuthClient;\n /** Records — insert, select, update, delete structured data */\n public readonly records: RecordsClient;\n /** Analytics — track events and query history */\n public readonly analytics: AnalyticsClient;\n /**\n * Storage — call with the name of the key you want.\n *\n * ```ts\n * db.storage('avatars').upload(file, { path: 'user.jpg' })\n * db.storage('documents').list({ prefix: 'invoices/' })\n * db.storage('main').stats()\n * ```\n */\n public readonly storage: CallableStorage;\n\n constructor(config: HydrousConfig) {\n if (!config.url) throw new Error('[HydrousDB] config.url is required');\n if (!config.authKey) throw new Error('[HydrousDB] config.authKey is required');\n if (!config.bucketSecurityKey) throw new Error('[HydrousDB] config.bucketSecurityKey is required');\n if (!config.storageKeys || typeof config.storageKeys !== 'object') {\n throw new Error('[HydrousDB] config.storageKeys must be an object of named keys');\n }\n\n this.auth = new AuthClient(config);\n this.records = new RecordsClient(config);\n this.analytics = new AnalyticsClient(config);\n\n // Build the manager then wrap it in a Proxy so db.storage('name') works\n const manager = new StorageManager(config);\n\n const fn = (keyName: string) => manager.use(keyName);\n fn.use = (keyName: string) => manager.use(keyName);\n fn.keyNames = () => manager.keyNames();\n\n this.storage = fn as CallableStorage;\n }\n}\n","// ─── Main client & factory ────────────────────────────────────────────────────\nexport { HydrousClient } from './client.js';\nexport type { CallableStorage } from './client.js';\n\nimport { HydrousClient } from './client.js';\nimport type { HydrousConfig } from './types/index.js';\n\n/**\n * Create a HydrousDB client.\n *\n * @example\n * import { createClient } from 'hydrousdb';\n *\n * const db = createClient({\n * url: 'https://api.myapp.hydrous.app',\n * authKey: 'hk_auth_…',\n * bucketSecurityKey: 'hk_bucket_…',\n * storageKeys: {\n * main: 'ssk_main_…',\n * avatars: 'ssk_avatars_…',\n * documents: 'ssk_docs_…',\n * },\n * });\n */\nexport function createClient(config: HydrousConfig): HydrousClient {\n return new HydrousClient(config);\n}\n\n// ─── Sub-clients ──────────────────────────────────────────────────────────────\nexport { AuthClient } from './auth/index.js';\nexport { RecordsClient } from './records/index.js';\nexport { AnalyticsClient } from './analytics/index.js';\nexport { StorageManager, ScopedStorageClient } from './storage/index.js';\n\n// ─── All types ────────────────────────────────────────────────────────────────\nexport type {\n HydrousConfig, StorageKeys,\n HydrousResponse, HydrousError,\n Filter, FilterOperator, QueryOptions,\n RecordResponse, SingleRecordResponse,\n AuthUser, AuthSession, SignUpOptions, SignInOptions,\n TrackEventOptions, AnalyticsQueryOptions, AnalyticsEvent,\n UploadStage, UploadProgress, DownloadProgress,\n UploadResult, UploadOptions,\n BatchUploadOptions, BatchUploadResult,\n BatchDownloadOptions, BatchDownloadFile,\n FileMetadata, StorageItem, ListResult, ListOptions,\n SignedUrlResult, SignedUrlOptions,\n StorageStats,\n} from './types/index.js';\n\n// ─── Query helpers ────────────────────────────────────────────────────────────\nexport { eq, neq, gt, lt, gte, lte, inArray } from './utils/query.js';\n\n// ─── Error utilities ─────────────────────────────────────────────────────────\nexport { HydrousDBError, isHydrousError } from './utils/errors.js';\n"]}
package/package.json CHANGED
@@ -1,45 +1,33 @@
1
1
  {
2
2
  "name": "hydrousdb",
3
- "version": "2.0.1",
4
- "description": "Official JavaScript/TypeScript SDK for the Hydrous platform — auth, records, analytics, and storage",
3
+ "version": "2.0.3",
4
+ "description": "Official JavaScript/TypeScript SDK for HydrousDB — auth, records, analytics, and storage",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.mjs",
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
12
  "require": "./dist/index.js"
13
13
  }
14
14
  },
15
- "files": [
16
- "dist"
17
- ],
15
+ "files": ["dist"],
18
16
  "scripts": {
19
- "build": "tsup",
20
- "dev": "tsup --watch",
21
- "test": "vitest run",
22
- "test:watch": "vitest",
23
- "lint": "tsc --noEmit",
17
+ "build": "tsup",
18
+ "dev": "tsup --watch",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest",
21
+ "lint": "tsc --noEmit",
24
22
  "prepublishOnly": "npm run build"
25
23
  },
26
- "keywords": [
27
- "hydrous",
28
- "baas",
29
- "storage",
30
- "auth",
31
- "analytics",
32
- "database",
33
- "sdk"
34
- ],
35
- "author": "Hydrous",
24
+ "keywords": ["hydrousdb", "hydrous", "baas", "storage", "auth", "analytics", "database", "sdk"],
25
+ "author": "HydrousDB",
36
26
  "license": "MIT",
37
27
  "devDependencies": {
38
- "tsup": "^8.0.0",
28
+ "tsup": "^8.0.0",
39
29
  "typescript": "^5.0.0",
40
- "vitest": "^1.0.0"
30
+ "vitest": "^1.0.0"
41
31
  },
42
- "engines": {
43
- "node": ">=16.0.0"
44
- }
32
+ "engines": { "node": ">=16.0.0" }
45
33
  }