@butterbase/sdk 1.0.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.
@@ -0,0 +1,53 @@
1
+ import type { ButterbaseClient } from './butterbase-client.js';
2
+ import type { ButterbaseResponse } from '../types/index.js';
3
+ /**
4
+ * Builder for INSERT operations
5
+ */
6
+ export declare class InsertBuilder<T = any> {
7
+ private table;
8
+ private client;
9
+ private values;
10
+ constructor(table: string, client: ButterbaseClient, values: Partial<T> | Partial<T>[]);
11
+ execute(): Promise<ButterbaseResponse<T | T[]>>;
12
+ then<TResult1 = ButterbaseResponse<T | T[]>, TResult2 = never>(onfulfilled?: ((value: ButterbaseResponse<T | T[]>) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
13
+ }
14
+ /**
15
+ * Builder for UPDATE operations
16
+ */
17
+ export declare class UpdateBuilder<T = any> {
18
+ private table;
19
+ private client;
20
+ private values;
21
+ private filters;
22
+ constructor(table: string, client: ButterbaseClient, values: Partial<T>, filters: Array<{
23
+ column: string;
24
+ op: string;
25
+ value: any;
26
+ }>);
27
+ /**
28
+ * Add filter condition
29
+ */
30
+ eq(column: string, value: any): this;
31
+ execute(): Promise<ButterbaseResponse<T>>;
32
+ then<TResult1 = ButterbaseResponse<T>, TResult2 = never>(onfulfilled?: ((value: ButterbaseResponse<T>) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
33
+ }
34
+ /**
35
+ * Builder for DELETE operations
36
+ */
37
+ export declare class DeleteBuilder<T = any> {
38
+ private table;
39
+ private client;
40
+ private filters;
41
+ constructor(table: string, client: ButterbaseClient, filters: Array<{
42
+ column: string;
43
+ op: string;
44
+ value: any;
45
+ }>);
46
+ /**
47
+ * Add filter condition
48
+ */
49
+ eq(column: string, value: any): this;
50
+ execute(): Promise<ButterbaseResponse<void>>;
51
+ then<TResult1 = ButterbaseResponse<void>, TResult2 = never>(onfulfilled?: ((value: ButterbaseResponse<void>) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
52
+ }
53
+ //# sourceMappingURL=mutation-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-builders.d.ts","sourceRoot":"","sources":["../../src/lib/mutation-builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Builder for INSERT operations
3
+ */
4
+ export class InsertBuilder {
5
+ table;
6
+ client;
7
+ values;
8
+ constructor(table, client, values) {
9
+ this.table = table;
10
+ this.client = client;
11
+ this.values = values;
12
+ }
13
+ async execute() {
14
+ try {
15
+ const path = `/v1/${this.client.appId}/${this.table}`;
16
+ const data = await this.client.request('POST', path, this.values);
17
+ return { data, error: null };
18
+ }
19
+ catch (error) {
20
+ return { data: null, error: error };
21
+ }
22
+ }
23
+ then(onfulfilled, onrejected) {
24
+ return this.execute().then(onfulfilled, onrejected);
25
+ }
26
+ }
27
+ /**
28
+ * Builder for UPDATE operations
29
+ */
30
+ export class UpdateBuilder {
31
+ table;
32
+ client;
33
+ values;
34
+ filters;
35
+ constructor(table, client, values, filters) {
36
+ this.table = table;
37
+ this.client = client;
38
+ this.values = values;
39
+ this.filters = filters;
40
+ }
41
+ /**
42
+ * Add filter condition
43
+ */
44
+ eq(column, value) {
45
+ this.filters.push({ column, op: 'eq', value });
46
+ return this;
47
+ }
48
+ async execute() {
49
+ try {
50
+ // Detect single id filter for path param usage
51
+ const idFilter = this.filters.find(f => f.column === 'id' && f.op === 'eq');
52
+ let path;
53
+ if (idFilter && this.filters.length === 1) {
54
+ // Use path param for single id: PATCH /v1/:app/:table/:id
55
+ path = `/v1/${this.client.appId}/${this.table}/${idFilter.value}`;
56
+ }
57
+ else {
58
+ // Use query string for complex filters
59
+ const params = new URLSearchParams();
60
+ for (const filter of this.filters) {
61
+ params.set(filter.column, `${filter.op}.${filter.value}`);
62
+ }
63
+ const queryString = params.toString();
64
+ path = `/v1/${this.client.appId}/${this.table}${queryString ? `?${queryString}` : ''}`;
65
+ }
66
+ const data = await this.client.request('PATCH', path, this.values);
67
+ return { data, error: null };
68
+ }
69
+ catch (error) {
70
+ return { data: null, error: error };
71
+ }
72
+ }
73
+ then(onfulfilled, onrejected) {
74
+ return this.execute().then(onfulfilled, onrejected);
75
+ }
76
+ }
77
+ /**
78
+ * Builder for DELETE operations
79
+ */
80
+ export class DeleteBuilder {
81
+ table;
82
+ client;
83
+ filters;
84
+ constructor(table, client, filters) {
85
+ this.table = table;
86
+ this.client = client;
87
+ this.filters = filters;
88
+ }
89
+ /**
90
+ * Add filter condition
91
+ */
92
+ eq(column, value) {
93
+ this.filters.push({ column, op: 'eq', value });
94
+ return this;
95
+ }
96
+ async execute() {
97
+ try {
98
+ // Detect single id filter for path param usage
99
+ const idFilter = this.filters.find(f => f.column === 'id' && f.op === 'eq');
100
+ let path;
101
+ if (idFilter && this.filters.length === 1) {
102
+ // Use path param for single id: DELETE /v1/:app/:table/:id
103
+ path = `/v1/${this.client.appId}/${this.table}/${idFilter.value}`;
104
+ }
105
+ else {
106
+ // Use query string for complex filters
107
+ const params = new URLSearchParams();
108
+ for (const filter of this.filters) {
109
+ params.set(filter.column, `${filter.op}.${filter.value}`);
110
+ }
111
+ const queryString = params.toString();
112
+ path = `/v1/${this.client.appId}/${this.table}${queryString ? `?${queryString}` : ''}`;
113
+ }
114
+ await this.client.request('DELETE', path);
115
+ return { data: null, error: null };
116
+ }
117
+ catch (error) {
118
+ return { data: null, error: error };
119
+ }
120
+ }
121
+ then(onfulfilled, onrejected) {
122
+ return this.execute().then(onfulfilled, onrejected);
123
+ }
124
+ }
125
+ //# sourceMappingURL=mutation-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-builders.js","sourceRoot":"","sources":["../../src/lib/mutation-builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import type { ButterbaseClient } from './butterbase-client.js';
2
+ import type { ButterbaseResponse, OrderByOptions } from '../types/index.js';
3
+ import { InsertBuilder, UpdateBuilder, DeleteBuilder } from './mutation-builders.js';
4
+ export declare class QueryBuilder<T = any> {
5
+ private table;
6
+ private selectCols;
7
+ private filters;
8
+ private orderByList;
9
+ private limitValue?;
10
+ private offsetValue?;
11
+ private client;
12
+ constructor(table: string, client: ButterbaseClient);
13
+ /**
14
+ * Select specific columns
15
+ */
16
+ select(columns?: string): this;
17
+ /**
18
+ * Equal to
19
+ */
20
+ eq(column: string, value: any): this;
21
+ /**
22
+ * Not equal to
23
+ */
24
+ neq(column: string, value: any): this;
25
+ /**
26
+ * Greater than
27
+ */
28
+ gt(column: string, value: any): this;
29
+ /**
30
+ * Greater than or equal to
31
+ */
32
+ gte(column: string, value: any): this;
33
+ /**
34
+ * Less than
35
+ */
36
+ lt(column: string, value: any): this;
37
+ /**
38
+ * Less than or equal to
39
+ */
40
+ lte(column: string, value: any): this;
41
+ /**
42
+ * Pattern matching (case-sensitive)
43
+ */
44
+ like(column: string, pattern: string): this;
45
+ /**
46
+ * Pattern matching (case-insensitive)
47
+ */
48
+ ilike(column: string, pattern: string): this;
49
+ /**
50
+ * Value is in array
51
+ */
52
+ in(column: string, values: any[]): this;
53
+ /**
54
+ * Value is null, true, or false
55
+ */
56
+ is(column: string, value: null | boolean): this;
57
+ /**
58
+ * Order results by column
59
+ */
60
+ order(column: string, options?: OrderByOptions): this;
61
+ /**
62
+ * Limit number of results
63
+ */
64
+ limit(count: number): this;
65
+ /**
66
+ * Skip number of results
67
+ */
68
+ offset(count: number): this;
69
+ /**
70
+ * Execute the query
71
+ */
72
+ execute(): Promise<ButterbaseResponse<T[]>>;
73
+ /**
74
+ * Make the query builder thenable for await syntax
75
+ */
76
+ then<TResult1 = ButterbaseResponse<T[]>, TResult2 = never>(onfulfilled?: ((value: ButterbaseResponse<T[]>) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
77
+ /**
78
+ * Insert new records
79
+ */
80
+ insert(values: Partial<T> | Partial<T>[]): InsertBuilder<T>;
81
+ /**
82
+ * Update records matching filters
83
+ */
84
+ update(values: Partial<T>): UpdateBuilder<T>;
85
+ /**
86
+ * Delete records matching filters
87
+ */
88
+ delete(): DeleteBuilder<T>;
89
+ }
90
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/lib/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,173 @@
1
+ import { InsertBuilder, UpdateBuilder, DeleteBuilder } from './mutation-builders.js';
2
+ export class QueryBuilder {
3
+ table;
4
+ selectCols = '*';
5
+ filters = [];
6
+ orderByList = [];
7
+ limitValue;
8
+ offsetValue;
9
+ client;
10
+ constructor(table, client) {
11
+ this.table = table;
12
+ this.client = client;
13
+ }
14
+ /**
15
+ * Select specific columns
16
+ */
17
+ select(columns = '*') {
18
+ this.selectCols = columns;
19
+ return this;
20
+ }
21
+ /**
22
+ * Equal to
23
+ */
24
+ eq(column, value) {
25
+ this.filters.push({ column, op: 'eq', value });
26
+ return this;
27
+ }
28
+ /**
29
+ * Not equal to
30
+ */
31
+ neq(column, value) {
32
+ this.filters.push({ column, op: 'neq', value });
33
+ return this;
34
+ }
35
+ /**
36
+ * Greater than
37
+ */
38
+ gt(column, value) {
39
+ this.filters.push({ column, op: 'gt', value });
40
+ return this;
41
+ }
42
+ /**
43
+ * Greater than or equal to
44
+ */
45
+ gte(column, value) {
46
+ this.filters.push({ column, op: 'gte', value });
47
+ return this;
48
+ }
49
+ /**
50
+ * Less than
51
+ */
52
+ lt(column, value) {
53
+ this.filters.push({ column, op: 'lt', value });
54
+ return this;
55
+ }
56
+ /**
57
+ * Less than or equal to
58
+ */
59
+ lte(column, value) {
60
+ this.filters.push({ column, op: 'lte', value });
61
+ return this;
62
+ }
63
+ /**
64
+ * Pattern matching (case-sensitive)
65
+ */
66
+ like(column, pattern) {
67
+ this.filters.push({ column, op: 'like', value: pattern });
68
+ return this;
69
+ }
70
+ /**
71
+ * Pattern matching (case-insensitive)
72
+ */
73
+ ilike(column, pattern) {
74
+ this.filters.push({ column, op: 'ilike', value: pattern });
75
+ return this;
76
+ }
77
+ /**
78
+ * Value is in array
79
+ */
80
+ in(column, values) {
81
+ this.filters.push({ column, op: 'in', value: `(${values.join(',')})` });
82
+ return this;
83
+ }
84
+ /**
85
+ * Value is null, true, or false
86
+ */
87
+ is(column, value) {
88
+ this.filters.push({ column, op: 'is', value });
89
+ return this;
90
+ }
91
+ /**
92
+ * Order results by column
93
+ */
94
+ order(column, options) {
95
+ this.orderByList.push({
96
+ column,
97
+ ascending: options?.ascending ?? true,
98
+ });
99
+ return this;
100
+ }
101
+ /**
102
+ * Limit number of results
103
+ */
104
+ limit(count) {
105
+ this.limitValue = count;
106
+ return this;
107
+ }
108
+ /**
109
+ * Skip number of results
110
+ */
111
+ offset(count) {
112
+ this.offsetValue = count;
113
+ return this;
114
+ }
115
+ /**
116
+ * Execute the query
117
+ */
118
+ async execute() {
119
+ try {
120
+ const params = new URLSearchParams();
121
+ if (this.selectCols !== '*') {
122
+ params.set('select', this.selectCols);
123
+ }
124
+ for (const filter of this.filters) {
125
+ params.set(filter.column, `${filter.op}.${filter.value}`);
126
+ }
127
+ if (this.orderByList.length > 0) {
128
+ const orderStr = this.orderByList
129
+ .map((o) => `${o.column}.${o.ascending ? 'asc' : 'desc'}`)
130
+ .join(',');
131
+ params.set('order', orderStr);
132
+ }
133
+ if (this.limitValue !== undefined) {
134
+ params.set('limit', String(this.limitValue));
135
+ }
136
+ if (this.offsetValue !== undefined) {
137
+ params.set('offset', String(this.offsetValue));
138
+ }
139
+ const queryString = params.toString();
140
+ const path = `/v1/${this.client.appId}/${this.table}${queryString ? `?${queryString}` : ''}`;
141
+ const data = await this.client.request('GET', path);
142
+ return { data, error: null };
143
+ }
144
+ catch (error) {
145
+ return { data: null, error: error };
146
+ }
147
+ }
148
+ /**
149
+ * Make the query builder thenable for await syntax
150
+ */
151
+ then(onfulfilled, onrejected) {
152
+ return this.execute().then(onfulfilled, onrejected);
153
+ }
154
+ /**
155
+ * Insert new records
156
+ */
157
+ insert(values) {
158
+ return new InsertBuilder(this.table, this.client, values);
159
+ }
160
+ /**
161
+ * Update records matching filters
162
+ */
163
+ update(values) {
164
+ return new UpdateBuilder(this.table, this.client, values, this.filters);
165
+ }
166
+ /**
167
+ * Delete records matching filters
168
+ */
169
+ delete() {
170
+ return new DeleteBuilder(this.table, this.client, this.filters);
171
+ }
172
+ }
173
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/lib/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ButterbaseClient } from '../lib/butterbase-client.js';
2
+ import type { ButterbaseResponse, StorageObject, UploadResponse, DownloadUrlResponse } from '../types/index.js';
3
+ export declare class StorageClient {
4
+ private client;
5
+ constructor(client: ButterbaseClient);
6
+ /**
7
+ * Upload a file to storage
8
+ * Uses presigned URL flow for direct S3 upload
9
+ */
10
+ upload(file: File | Blob, filename?: string): Promise<ButterbaseResponse<UploadResponse>>;
11
+ /**
12
+ * Get a presigned download URL for a file
13
+ */
14
+ getDownloadUrl(objectId: string): Promise<ButterbaseResponse<DownloadUrlResponse>>;
15
+ /**
16
+ * Delete a file from storage
17
+ */
18
+ delete(objectId: string): Promise<ButterbaseResponse<void>>;
19
+ /**
20
+ * List all files in storage
21
+ */
22
+ list(): Promise<ButterbaseResponse<StorageObject[]>>;
23
+ }
24
+ //# sourceMappingURL=storage-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-client.d.ts","sourceRoot":"","sources":["../../src/storage/storage-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAE5C;;;OAGG;IACG,MAAM,CACV,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IA2C9C;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IAoBxF;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAajE;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC,CAAC;CAY3D"}
@@ -0,0 +1,84 @@
1
+ export class StorageClient {
2
+ client;
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ /**
7
+ * Upload a file to storage
8
+ * Uses presigned URL flow for direct S3 upload
9
+ */
10
+ async upload(file, filename) {
11
+ try {
12
+ // Get presigned upload URL
13
+ const uploadData = await this.client.request('POST', `/storage/${this.client.appId}/upload`, {
14
+ filename: filename || file.name || 'file',
15
+ contentType: file.type,
16
+ sizeBytes: file.size,
17
+ });
18
+ // Upload to S3 using presigned URL
19
+ const uploadResponse = await fetch(uploadData.uploadUrl, {
20
+ method: 'PUT',
21
+ headers: {
22
+ 'Content-Type': file.type,
23
+ },
24
+ body: file,
25
+ });
26
+ if (!uploadResponse.ok) {
27
+ throw new Error('Failed to upload file to storage');
28
+ }
29
+ return {
30
+ data: {
31
+ objectId: uploadData.objectId,
32
+ objectKey: uploadData.objectKey,
33
+ },
34
+ error: null,
35
+ };
36
+ }
37
+ catch (error) {
38
+ return { data: null, error: error };
39
+ }
40
+ }
41
+ /**
42
+ * Get a presigned download URL for a file
43
+ */
44
+ async getDownloadUrl(objectId) {
45
+ try {
46
+ const response = await this.client.request('GET', `/storage/${this.client.appId}/download/${objectId}`);
47
+ return {
48
+ data: {
49
+ url: response.downloadUrl,
50
+ filename: response.filename,
51
+ },
52
+ error: null,
53
+ };
54
+ }
55
+ catch (error) {
56
+ return { data: null, error: error };
57
+ }
58
+ }
59
+ /**
60
+ * Delete a file from storage
61
+ */
62
+ async delete(objectId) {
63
+ try {
64
+ await this.client.request('DELETE', `/storage/${this.client.appId}/${objectId}`);
65
+ return { data: null, error: null };
66
+ }
67
+ catch (error) {
68
+ return { data: null, error: error };
69
+ }
70
+ }
71
+ /**
72
+ * List all files in storage
73
+ */
74
+ async list() {
75
+ try {
76
+ const response = await this.client.request('GET', `/storage/${this.client.appId}/objects`);
77
+ return { data: response.objects, error: null };
78
+ }
79
+ catch (error) {
80
+ return { data: null, error: error };
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=storage-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-client.js","sourceRoot":"","sources":["../../src/storage/storage-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ export interface ButterbaseClientOptions {
2
+ appId: string;
3
+ apiUrl: string;
4
+ anonKey?: string;
5
+ onUnauthorized?: () => void;
6
+ }
7
+ export interface ButterbaseResponse<T> {
8
+ data: T | null;
9
+ error: Error | null;
10
+ }
11
+ export interface User {
12
+ id: string;
13
+ email: string;
14
+ email_verified: boolean;
15
+ display_name?: string;
16
+ avatar_url?: string;
17
+ provider?: string;
18
+ created_at: string;
19
+ last_sign_in_at?: string;
20
+ metadata?: Record<string, any>;
21
+ }
22
+ export interface Session {
23
+ accessToken: string;
24
+ refreshToken: string;
25
+ expiresAt: number;
26
+ user: User;
27
+ }
28
+ export interface SignUpParams {
29
+ email: string;
30
+ password: string;
31
+ metadata?: Record<string, any>;
32
+ }
33
+ export interface SignInParams {
34
+ email: string;
35
+ password: string;
36
+ }
37
+ export interface AuthResponse {
38
+ user: User;
39
+ session: Session;
40
+ }
41
+ export interface LoginResponse {
42
+ access_token: string;
43
+ refresh_token: string;
44
+ expires_in: number;
45
+ token_type: string;
46
+ user: User;
47
+ }
48
+ export interface SignupResponse {
49
+ user: User;
50
+ message: string;
51
+ }
52
+ export interface OAuthParams {
53
+ provider: string;
54
+ redirectTo: string;
55
+ }
56
+ export interface StorageObject {
57
+ id: string;
58
+ object_key: string;
59
+ filename: string;
60
+ content_type: string;
61
+ size_bytes: number;
62
+ created_at: string;
63
+ }
64
+ export interface UploadResponse {
65
+ objectId: string;
66
+ objectKey: string;
67
+ }
68
+ export interface DownloadUrlResponse {
69
+ url: string;
70
+ filename: string;
71
+ }
72
+ export type QueryOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'ilike' | 'in' | 'is';
73
+ export interface QueryFilter {
74
+ column: string;
75
+ operator: QueryOperator;
76
+ value: any;
77
+ }
78
+ export interface OrderByOptions {
79
+ ascending?: boolean;
80
+ }
81
+ export interface InvokeFunctionOptions {
82
+ body?: any;
83
+ headers?: Record<string, string>;
84
+ method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
85
+ }
86
+ //# sourceMappingURL=index.d.ts.map