postbasejs 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +389 -0
- package/dist/index.d.ts +389 -0
- package/dist/index.js +928 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +901 -0
- package/dist/index.mjs.map +1 -0
- package/dist/ssr/index.d.mts +60 -0
- package/dist/ssr/index.d.ts +60 -0
- package/dist/ssr/index.js +948 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/ssr/index.mjs +919 -0
- package/dist/ssr/index.mjs.map +1 -0
- package/package.json +31 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
type FilterOperator = "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "like" | "ilike" | "in" | "is" | "contains" | "overlaps" | "textSearch";
|
|
2
|
+
interface Filter {
|
|
3
|
+
column: string;
|
|
4
|
+
operator: FilterOperator;
|
|
5
|
+
value: unknown;
|
|
6
|
+
}
|
|
7
|
+
interface QueryResult<T = Record<string, unknown>> {
|
|
8
|
+
data: T[] | null;
|
|
9
|
+
count: number | null;
|
|
10
|
+
error: string | null;
|
|
11
|
+
}
|
|
12
|
+
interface SingleResult<T = Record<string, unknown>> {
|
|
13
|
+
data: T | null;
|
|
14
|
+
error: string | null;
|
|
15
|
+
}
|
|
16
|
+
interface AuthUser {
|
|
17
|
+
id: string;
|
|
18
|
+
email: string;
|
|
19
|
+
name?: string | null;
|
|
20
|
+
image?: string | null;
|
|
21
|
+
emailVerified?: boolean;
|
|
22
|
+
phone?: string | null;
|
|
23
|
+
role?: string;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
createdAt?: string;
|
|
26
|
+
updatedAt?: string;
|
|
27
|
+
}
|
|
28
|
+
interface Session {
|
|
29
|
+
accessToken: string;
|
|
30
|
+
refreshToken?: string;
|
|
31
|
+
expiresAt: number;
|
|
32
|
+
user: AuthUser;
|
|
33
|
+
}
|
|
34
|
+
interface AuthResponse {
|
|
35
|
+
data: {
|
|
36
|
+
user: AuthUser | null;
|
|
37
|
+
session: Session | null;
|
|
38
|
+
};
|
|
39
|
+
error: string | null;
|
|
40
|
+
}
|
|
41
|
+
interface AuthClient {
|
|
42
|
+
/** Sign up with email + password */
|
|
43
|
+
signUp(options: {
|
|
44
|
+
email: string;
|
|
45
|
+
password: string;
|
|
46
|
+
options?: {
|
|
47
|
+
data?: Record<string, unknown>;
|
|
48
|
+
};
|
|
49
|
+
}): Promise<AuthResponse>;
|
|
50
|
+
/** Sign in with email + password */
|
|
51
|
+
signInWithPassword(options: {
|
|
52
|
+
email: string;
|
|
53
|
+
password: string;
|
|
54
|
+
}): Promise<AuthResponse>;
|
|
55
|
+
/** Send magic link / OTP to email */
|
|
56
|
+
signInWithOtp(options: {
|
|
57
|
+
email: string;
|
|
58
|
+
options?: {
|
|
59
|
+
redirectTo?: string;
|
|
60
|
+
};
|
|
61
|
+
}): Promise<{
|
|
62
|
+
data: null;
|
|
63
|
+
error: string | null;
|
|
64
|
+
}>;
|
|
65
|
+
/** Sign in with OAuth provider (browser redirect) */
|
|
66
|
+
signInWithOAuth(options: {
|
|
67
|
+
provider: string;
|
|
68
|
+
options?: {
|
|
69
|
+
redirectTo?: string;
|
|
70
|
+
scopes?: string;
|
|
71
|
+
};
|
|
72
|
+
}): Promise<void>;
|
|
73
|
+
/** Sign out the current user */
|
|
74
|
+
signOut(): Promise<{
|
|
75
|
+
error: string | null;
|
|
76
|
+
}>;
|
|
77
|
+
/** Get the current session (from cookie / storage) */
|
|
78
|
+
getSession(): Promise<{
|
|
79
|
+
data: {
|
|
80
|
+
session: Session | null;
|
|
81
|
+
};
|
|
82
|
+
error: string | null;
|
|
83
|
+
}>;
|
|
84
|
+
/** Get the current user (server-verified) */
|
|
85
|
+
getUser(jwt?: string): Promise<{
|
|
86
|
+
data: {
|
|
87
|
+
user: AuthUser | null;
|
|
88
|
+
};
|
|
89
|
+
error: string | null;
|
|
90
|
+
}>;
|
|
91
|
+
/** Refresh the session using a refresh token */
|
|
92
|
+
refreshSession(refreshToken?: string): Promise<AuthResponse>;
|
|
93
|
+
/** Listen to auth state changes (browser only) */
|
|
94
|
+
onAuthStateChange(callback: (event: AuthChangeEvent, session: Session | null) => void): {
|
|
95
|
+
data: {
|
|
96
|
+
subscription: {
|
|
97
|
+
unsubscribe: () => void;
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
/** Admin methods — require service role key */
|
|
102
|
+
admin: AuthAdminClient;
|
|
103
|
+
}
|
|
104
|
+
type AuthChangeEvent = "SIGNED_IN" | "SIGNED_OUT" | "TOKEN_REFRESHED" | "USER_UPDATED";
|
|
105
|
+
interface AuthAdminClient {
|
|
106
|
+
/** List all users (service role only) */
|
|
107
|
+
listUsers(options?: {
|
|
108
|
+
page?: number;
|
|
109
|
+
perPage?: number;
|
|
110
|
+
}): Promise<{
|
|
111
|
+
data: {
|
|
112
|
+
users: AuthUser[];
|
|
113
|
+
total: number;
|
|
114
|
+
} | null;
|
|
115
|
+
error: string | null;
|
|
116
|
+
}>;
|
|
117
|
+
/** Get a user by id (service role only) */
|
|
118
|
+
getUserById(id: string): Promise<{
|
|
119
|
+
data: {
|
|
120
|
+
user: AuthUser | null;
|
|
121
|
+
};
|
|
122
|
+
error: string | null;
|
|
123
|
+
}>;
|
|
124
|
+
/** Create a user (service role only) */
|
|
125
|
+
createUser(options: {
|
|
126
|
+
email: string;
|
|
127
|
+
password?: string;
|
|
128
|
+
email_confirm?: boolean;
|
|
129
|
+
user_metadata?: Record<string, unknown>;
|
|
130
|
+
}): Promise<{
|
|
131
|
+
data: {
|
|
132
|
+
user: AuthUser | null;
|
|
133
|
+
};
|
|
134
|
+
error: string | null;
|
|
135
|
+
}>;
|
|
136
|
+
/** Update a user (service role only) */
|
|
137
|
+
updateUserById(id: string, attributes: {
|
|
138
|
+
email?: string;
|
|
139
|
+
password?: string;
|
|
140
|
+
user_metadata?: Record<string, unknown>;
|
|
141
|
+
}): Promise<{
|
|
142
|
+
data: {
|
|
143
|
+
user: AuthUser | null;
|
|
144
|
+
};
|
|
145
|
+
error: string | null;
|
|
146
|
+
}>;
|
|
147
|
+
/** Delete a user (service role only) */
|
|
148
|
+
deleteUser(id: string): Promise<{
|
|
149
|
+
data: null;
|
|
150
|
+
error: string | null;
|
|
151
|
+
}>;
|
|
152
|
+
}
|
|
153
|
+
interface SelectOptions {
|
|
154
|
+
count?: "exact" | "planned" | "estimated";
|
|
155
|
+
head?: boolean;
|
|
156
|
+
}
|
|
157
|
+
interface QueryBuilder<T = Record<string, unknown>> {
|
|
158
|
+
/** Select columns. Pass '*' for all. */
|
|
159
|
+
select(columns?: string, options?: SelectOptions): QueryBuilder<T>;
|
|
160
|
+
/** Filter: column = value */
|
|
161
|
+
eq(column: string, value: unknown): QueryBuilder<T>;
|
|
162
|
+
/** Filter: column != value */
|
|
163
|
+
neq(column: string, value: unknown): QueryBuilder<T>;
|
|
164
|
+
/** Filter: column > value */
|
|
165
|
+
gt(column: string, value: unknown): QueryBuilder<T>;
|
|
166
|
+
/** Filter: column >= value */
|
|
167
|
+
gte(column: string, value: unknown): QueryBuilder<T>;
|
|
168
|
+
/** Filter: column < value */
|
|
169
|
+
lt(column: string, value: unknown): QueryBuilder<T>;
|
|
170
|
+
/** Filter: column <= value */
|
|
171
|
+
lte(column: string, value: unknown): QueryBuilder<T>;
|
|
172
|
+
/** Filter: column LIKE pattern */
|
|
173
|
+
like(column: string, pattern: string): QueryBuilder<T>;
|
|
174
|
+
/** Filter: column ILIKE pattern (case-insensitive) */
|
|
175
|
+
ilike(column: string, pattern: string): QueryBuilder<T>;
|
|
176
|
+
/** Filter: column IN (values) */
|
|
177
|
+
in(column: string, values: unknown[]): QueryBuilder<T>;
|
|
178
|
+
/** Filter: column IS NULL or IS NOT NULL */
|
|
179
|
+
is(column: string, value: null | boolean): QueryBuilder<T>;
|
|
180
|
+
/** Filter: column @> value (array/jsonb contains) */
|
|
181
|
+
contains(column: string, value: unknown): QueryBuilder<T>;
|
|
182
|
+
/** Filter: column && value (array overlaps) */
|
|
183
|
+
overlaps(column: string, value: unknown[]): QueryBuilder<T>;
|
|
184
|
+
/** Full-text search */
|
|
185
|
+
textSearch(column: string, query: string, options?: {
|
|
186
|
+
config?: string;
|
|
187
|
+
}): QueryBuilder<T>;
|
|
188
|
+
/** Combine filters with OR */
|
|
189
|
+
or(filters: string): QueryBuilder<T>;
|
|
190
|
+
/** Negate the next filter */
|
|
191
|
+
not(column: string, operator: string, value: unknown): QueryBuilder<T>;
|
|
192
|
+
/** Order results */
|
|
193
|
+
order(column: string, options?: {
|
|
194
|
+
ascending?: boolean;
|
|
195
|
+
nullsFirst?: boolean;
|
|
196
|
+
}): QueryBuilder<T>;
|
|
197
|
+
/** Limit number of rows */
|
|
198
|
+
limit(count: number): QueryBuilder<T>;
|
|
199
|
+
/** Offset rows */
|
|
200
|
+
offset(count: number): QueryBuilder<T>;
|
|
201
|
+
/** Return a range of rows */
|
|
202
|
+
range(from: number, to: number): QueryBuilder<T>;
|
|
203
|
+
/** Execute and return a single row (error if not exactly one) */
|
|
204
|
+
single(): Promise<SingleResult<T>>;
|
|
205
|
+
/** Execute and return a single row or null */
|
|
206
|
+
maybeSingle(): Promise<SingleResult<T>>;
|
|
207
|
+
/** Execute as SELECT (thenable) */
|
|
208
|
+
then: Promise<QueryResult<T>>["then"];
|
|
209
|
+
/** Insert row(s) */
|
|
210
|
+
insert(data: Partial<T> | Partial<T>[], options?: {
|
|
211
|
+
returning?: string;
|
|
212
|
+
}): InsertBuilder<T>;
|
|
213
|
+
/** Upsert row(s) — insert or update on conflict */
|
|
214
|
+
upsert(data: Partial<T> | Partial<T>[], options?: {
|
|
215
|
+
onConflict?: string;
|
|
216
|
+
returning?: string;
|
|
217
|
+
}): InsertBuilder<T>;
|
|
218
|
+
/** Update rows */
|
|
219
|
+
update(data: Partial<T>): UpdateBuilder<T>;
|
|
220
|
+
/** Delete rows */
|
|
221
|
+
delete(): DeleteBuilder<T>;
|
|
222
|
+
}
|
|
223
|
+
interface InsertBuilder<T> {
|
|
224
|
+
select(columns?: string): InsertBuilder<T>;
|
|
225
|
+
single(): Promise<SingleResult<T>>;
|
|
226
|
+
then: Promise<QueryResult<T>>["then"];
|
|
227
|
+
}
|
|
228
|
+
interface UpdateBuilder<T> {
|
|
229
|
+
eq(column: string, value: unknown): UpdateBuilder<T>;
|
|
230
|
+
neq(column: string, value: unknown): UpdateBuilder<T>;
|
|
231
|
+
gt(column: string, value: unknown): UpdateBuilder<T>;
|
|
232
|
+
gte(column: string, value: unknown): UpdateBuilder<T>;
|
|
233
|
+
lt(column: string, value: unknown): UpdateBuilder<T>;
|
|
234
|
+
lte(column: string, value: unknown): UpdateBuilder<T>;
|
|
235
|
+
in(column: string, values: unknown[]): UpdateBuilder<T>;
|
|
236
|
+
select(columns?: string): UpdateBuilder<T>;
|
|
237
|
+
single(): Promise<SingleResult<T>>;
|
|
238
|
+
then: Promise<QueryResult<T>>["then"];
|
|
239
|
+
}
|
|
240
|
+
interface DeleteBuilder<T> {
|
|
241
|
+
eq(column: string, value: unknown): DeleteBuilder<T>;
|
|
242
|
+
neq(column: string, value: unknown): DeleteBuilder<T>;
|
|
243
|
+
gt(column: string, value: unknown): DeleteBuilder<T>;
|
|
244
|
+
gte(column: string, value: unknown): DeleteBuilder<T>;
|
|
245
|
+
lt(column: string, value: unknown): DeleteBuilder<T>;
|
|
246
|
+
lte(column: string, value: unknown): DeleteBuilder<T>;
|
|
247
|
+
in(column: string, values: unknown[]): DeleteBuilder<T>;
|
|
248
|
+
select(columns?: string): DeleteBuilder<T>;
|
|
249
|
+
single(): Promise<SingleResult<T>>;
|
|
250
|
+
then: Promise<QueryResult<T>>["then"];
|
|
251
|
+
}
|
|
252
|
+
interface StorageObject {
|
|
253
|
+
name: string;
|
|
254
|
+
size: number;
|
|
255
|
+
contentType: string;
|
|
256
|
+
updatedAt: string;
|
|
257
|
+
createdAt: string;
|
|
258
|
+
}
|
|
259
|
+
interface Bucket {
|
|
260
|
+
id: string;
|
|
261
|
+
name: string;
|
|
262
|
+
public: boolean;
|
|
263
|
+
fileSizeLimit?: number;
|
|
264
|
+
allowedMimeTypes?: string[];
|
|
265
|
+
createdAt: string;
|
|
266
|
+
updatedAt: string;
|
|
267
|
+
}
|
|
268
|
+
interface StorageBucketClient {
|
|
269
|
+
upload(path: string, file: File | Blob | Buffer | ArrayBuffer, options?: {
|
|
270
|
+
contentType?: string;
|
|
271
|
+
upsert?: boolean;
|
|
272
|
+
cacheControl?: string;
|
|
273
|
+
}): Promise<SingleResult<{
|
|
274
|
+
path: string;
|
|
275
|
+
fullPath: string;
|
|
276
|
+
}>>;
|
|
277
|
+
download(path: string): Promise<{
|
|
278
|
+
data: Blob | null;
|
|
279
|
+
error: string | null;
|
|
280
|
+
}>;
|
|
281
|
+
remove(paths: string[]): Promise<QueryResult<{
|
|
282
|
+
name: string;
|
|
283
|
+
}>>;
|
|
284
|
+
list(prefix?: string, options?: {
|
|
285
|
+
limit?: number;
|
|
286
|
+
offset?: number;
|
|
287
|
+
sortBy?: {
|
|
288
|
+
column: string;
|
|
289
|
+
order?: "asc" | "desc";
|
|
290
|
+
};
|
|
291
|
+
}): Promise<QueryResult<StorageObject>>;
|
|
292
|
+
getPublicUrl(path: string): {
|
|
293
|
+
data: {
|
|
294
|
+
publicUrl: string;
|
|
295
|
+
};
|
|
296
|
+
};
|
|
297
|
+
createSignedUrl(path: string, expiresIn: number): Promise<SingleResult<{
|
|
298
|
+
signedUrl: string;
|
|
299
|
+
}>>;
|
|
300
|
+
move(fromPath: string, toPath: string): Promise<{
|
|
301
|
+
error: string | null;
|
|
302
|
+
}>;
|
|
303
|
+
copy(fromPath: string, toPath: string): Promise<SingleResult<{
|
|
304
|
+
path: string;
|
|
305
|
+
}>>;
|
|
306
|
+
}
|
|
307
|
+
interface StorageClient {
|
|
308
|
+
from(bucket: string): StorageBucketClient;
|
|
309
|
+
createBucket(name: string, options?: {
|
|
310
|
+
public?: boolean;
|
|
311
|
+
fileSizeLimit?: number;
|
|
312
|
+
allowedMimeTypes?: string[];
|
|
313
|
+
}): Promise<SingleResult<Bucket>>;
|
|
314
|
+
getBucket(id: string): Promise<SingleResult<Bucket>>;
|
|
315
|
+
listBuckets(): Promise<QueryResult<Bucket>>;
|
|
316
|
+
updateBucket(id: string, options: {
|
|
317
|
+
public?: boolean;
|
|
318
|
+
fileSizeLimit?: number;
|
|
319
|
+
allowedMimeTypes?: string[];
|
|
320
|
+
}): Promise<SingleResult<Bucket>>;
|
|
321
|
+
deleteBucket(id: string): Promise<{
|
|
322
|
+
error: string | null;
|
|
323
|
+
}>;
|
|
324
|
+
emptyBucket(id: string): Promise<{
|
|
325
|
+
error: string | null;
|
|
326
|
+
}>;
|
|
327
|
+
}
|
|
328
|
+
interface RpcOptions {
|
|
329
|
+
head?: boolean;
|
|
330
|
+
count?: "exact" | "planned" | "estimated";
|
|
331
|
+
}
|
|
332
|
+
type RealtimeEvent = "INSERT" | "UPDATE" | "DELETE" | "*";
|
|
333
|
+
interface RealtimePayload<T = Record<string, unknown>> {
|
|
334
|
+
eventType: RealtimeEvent;
|
|
335
|
+
new: T | null;
|
|
336
|
+
old: T | null;
|
|
337
|
+
schema: string;
|
|
338
|
+
table: string;
|
|
339
|
+
commitTimestamp: string;
|
|
340
|
+
}
|
|
341
|
+
interface RealtimeChannel {
|
|
342
|
+
on<T = Record<string, unknown>>(event: RealtimeEvent, callback: (payload: RealtimePayload<T>) => void): RealtimeChannel;
|
|
343
|
+
subscribe(callback?: (status: "SUBSCRIBED" | "CLOSED" | "CHANNEL_ERROR") => void): RealtimeChannel;
|
|
344
|
+
unsubscribe(): void;
|
|
345
|
+
}
|
|
346
|
+
interface PostbaseClientOptions {
|
|
347
|
+
auth?: {
|
|
348
|
+
persistSession?: boolean;
|
|
349
|
+
autoRefreshToken?: boolean;
|
|
350
|
+
detectSessionInUrl?: boolean;
|
|
351
|
+
storageKey?: string;
|
|
352
|
+
};
|
|
353
|
+
global?: {
|
|
354
|
+
headers?: Record<string, string>;
|
|
355
|
+
fetch?: typeof fetch;
|
|
356
|
+
};
|
|
357
|
+
cookies?: CookieAdapter;
|
|
358
|
+
}
|
|
359
|
+
interface CookieAdapter {
|
|
360
|
+
getAll(): Array<{
|
|
361
|
+
name: string;
|
|
362
|
+
value: string;
|
|
363
|
+
}> | Promise<Array<{
|
|
364
|
+
name: string;
|
|
365
|
+
value: string;
|
|
366
|
+
}>>;
|
|
367
|
+
setAll(cookies: Array<{
|
|
368
|
+
name: string;
|
|
369
|
+
value: string;
|
|
370
|
+
options?: Record<string, unknown>;
|
|
371
|
+
}>): void | Promise<void>;
|
|
372
|
+
}
|
|
373
|
+
interface PostbaseClient {
|
|
374
|
+
auth: AuthClient;
|
|
375
|
+
from<T = Record<string, unknown>>(table: string): QueryBuilder<T>;
|
|
376
|
+
storage: StorageClient;
|
|
377
|
+
rpc<T = Record<string, unknown>>(fn: string, args?: Record<string, unknown>, options?: RpcOptions): Promise<QueryResult<T>>;
|
|
378
|
+
channel(name: string): RealtimeChannel;
|
|
379
|
+
removeChannel(channel: RealtimeChannel): void;
|
|
380
|
+
removeAllChannels(): void;
|
|
381
|
+
/** The raw base URL */
|
|
382
|
+
url: string;
|
|
383
|
+
/** The API key in use */
|
|
384
|
+
key: string;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
declare function createClient(url: string, key: string, options?: PostbaseClientOptions): PostbaseClient;
|
|
388
|
+
|
|
389
|
+
export { type AuthAdminClient, type AuthChangeEvent, type AuthClient, type AuthResponse, type AuthUser, type Bucket, type CookieAdapter, type Filter, type FilterOperator, type PostbaseClient, type PostbaseClientOptions, type QueryBuilder, type QueryResult, type RealtimeChannel, type RealtimeEvent, type RealtimePayload, type Session, type SingleResult, type StorageBucketClient, type StorageClient, type StorageObject, createClient };
|