@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.
- package/README.md +187 -0
- package/dist/auth/auth-client.d.ts +47 -0
- package/dist/auth/auth-client.d.ts.map +1 -0
- package/dist/auth/auth-client.js +120 -0
- package/dist/auth/auth-client.js.map +1 -0
- package/dist/functions/functions-client.d.ts +16 -0
- package/dist/functions/functions-client.d.ts.map +1 -0
- package/dist/functions/functions-client.js +36 -0
- package/dist/functions/functions-client.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/butterbase-client.d.ts +41 -0
- package/dist/lib/butterbase-client.d.ts.map +1 -0
- package/dist/lib/butterbase-client.js +138 -0
- package/dist/lib/butterbase-client.js.map +1 -0
- package/dist/lib/mutation-builders.d.ts +53 -0
- package/dist/lib/mutation-builders.d.ts.map +1 -0
- package/dist/lib/mutation-builders.js +125 -0
- package/dist/lib/mutation-builders.js.map +1 -0
- package/dist/lib/query-builder.d.ts +90 -0
- package/dist/lib/query-builder.d.ts.map +1 -0
- package/dist/lib/query-builder.js +173 -0
- package/dist/lib/query-builder.js.map +1 -0
- package/dist/storage/storage-client.d.ts +24 -0
- package/dist/storage/storage-client.d.ts.map +1 -0
- package/dist/storage/storage-client.js +84 -0
- package/dist/storage/storage-client.js.map +1 -0
- package/dist/types/index.d.ts +86 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +39 -0
|
@@ -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":"AAEA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAErF,MAAM,OAAO,YAAY;IACf,KAAK,CAAS;IACd,UAAU,GAAW,GAAG,CAAC;IACzB,OAAO,GAAsD,EAAE,CAAC;IAChE,WAAW,GAAkD,EAAE,CAAC;IAChE,UAAU,CAAU;IACpB,WAAW,CAAU;IACrB,MAAM,CAAmB;IAEjC,YAAY,KAAa,EAAE,MAAwB;QACjD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAkB,GAAG;QAC1B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,MAAc,EAAE,KAAU;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,MAAc,EAAE,KAAU;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,MAAc,EAAE,KAAU;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,MAAc,EAAE,KAAU;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,MAAc,EAAE,KAAU;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,MAAc,EAAE,KAAU;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,MAAc,EAAE,OAAe;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAc,EAAE,OAAe;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,MAAc,EAAE,MAAa;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,MAAc,EAAE,KAAqB;QACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAc,EAAE,OAAwB;QAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,MAAM;YACN,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;SACtC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAErC,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW;qBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;qBACzD,IAAI,CAAC,GAAG,CAAC,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAE7F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAM,KAAK,EAAE,IAAI,CAAC,CAAC;YAEzD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CACF,WAA2F,EAC3F,UAAuE;QAEvE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAiC;QACtC,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAkB;QACvB,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -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
|