@edgespark/server-types 0.0.1-alpha.1 → 0.0.1-alpha.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.
- package/dist/index.d.ts +146 -19
- package/dist/index.d.ts.map +1 -1
- package/package.json +7 -8
package/dist/index.d.ts
CHANGED
|
@@ -8,11 +8,13 @@ import type { MiddlewareHandler } from "hono";
|
|
|
8
8
|
* EdgeSpark Client - main SDK entry point
|
|
9
9
|
* @template TSchema - Database schema from @generated
|
|
10
10
|
* @example
|
|
11
|
-
* export async function
|
|
12
|
-
* app
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* export async function createApp(edgespark: Client<typeof tables>): Promise<Hono> {
|
|
12
|
+
* const app = new Hono();
|
|
13
|
+
* app.get('/api/posts', async (c) => {
|
|
14
|
+
* const posts = await edgespark.db.select().from(tables.posts);
|
|
15
|
+
* return c.json({ posts });
|
|
15
16
|
* });
|
|
17
|
+
* return app;
|
|
16
18
|
* }
|
|
17
19
|
*/
|
|
18
20
|
export interface Client<TSchema extends Record<string, unknown> = Record<string, never>> {
|
|
@@ -62,7 +64,7 @@ export interface SecretClient {
|
|
|
62
64
|
*/
|
|
63
65
|
get(name: string): string | null;
|
|
64
66
|
}
|
|
65
|
-
/** Bucket definition from @generated
|
|
67
|
+
/** Bucket definition from @generated */
|
|
66
68
|
export interface BucketDef {
|
|
67
69
|
readonly bucket_name: string;
|
|
68
70
|
readonly description: string;
|
|
@@ -87,42 +89,130 @@ export interface StorageClient {
|
|
|
87
89
|
*/
|
|
88
90
|
from(bucket: BucketDef): BucketClient;
|
|
89
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Options for listing files in a bucket
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* // Setup: import buckets from @generated, get BucketClient via from()
|
|
97
|
+
* import { buckets } from '@generated';
|
|
98
|
+
* const bucket = edgespark.storage.from(buckets.files); // BucketDef, not string!
|
|
99
|
+
*
|
|
100
|
+
* // List all files
|
|
101
|
+
* await bucket.list()
|
|
102
|
+
*
|
|
103
|
+
* // Filter by prefix (e.g., get all files for a user)
|
|
104
|
+
* await bucket.list({ prefix: 'user-123/' })
|
|
105
|
+
*
|
|
106
|
+
* // Pagination
|
|
107
|
+
* const page1 = await bucket.list({ limit: 100 })
|
|
108
|
+
* if (page1.hasMore) {
|
|
109
|
+
* const page2 = await bucket.list({ limit: 100, cursor: page1.cursor })
|
|
110
|
+
* }
|
|
111
|
+
*
|
|
112
|
+
* // Folder-like listing with delimiter
|
|
113
|
+
* // Use delimiter: '/' to group files into "folders"
|
|
114
|
+
* const { objects, delimitedPrefixes } = await bucket.list({
|
|
115
|
+
* prefix: 'documents/',
|
|
116
|
+
* delimiter: '/'
|
|
117
|
+
* })
|
|
118
|
+
* // objects = files directly in documents/ (e.g., 'documents/readme.txt')
|
|
119
|
+
* // delimitedPrefixes = subfolders (e.g., ['documents/api/', 'documents/guides/'])
|
|
120
|
+
*/
|
|
121
|
+
export interface StorageListOptions {
|
|
122
|
+
/** Maximum number of files to return (default: 1000, max: 1000) */
|
|
123
|
+
limit?: number;
|
|
124
|
+
/** Only return files whose keys start with this prefix (e.g., 'user-123/' or 'images/') */
|
|
125
|
+
prefix?: string;
|
|
126
|
+
/** Pagination token from previous result.cursor. Use to get next page of results */
|
|
127
|
+
cursor?: string;
|
|
128
|
+
/**
|
|
129
|
+
* Character to group keys by (usually '/'). When set, keys containing the delimiter
|
|
130
|
+
* after the prefix are grouped and returned in result.delimitedPrefixes instead of result.objects.
|
|
131
|
+
* This enables folder-like browsing of storage.
|
|
132
|
+
*/
|
|
133
|
+
delimiter?: string;
|
|
134
|
+
}
|
|
90
135
|
export interface BucketClient {
|
|
91
136
|
/**
|
|
92
137
|
* Upload file (<100MB). Use createPresignedPutUrl for large files.
|
|
93
|
-
* @example
|
|
138
|
+
* @example
|
|
139
|
+
* import { buckets } from '@generated';
|
|
140
|
+
* const bucket = edgespark.storage.from(buckets.avatars);
|
|
141
|
+
* await bucket.put('photo.jpg', buffer, { contentType: 'image/jpeg' });
|
|
94
142
|
*/
|
|
95
143
|
put(path: string, file: ArrayBuffer, options?: StorageHttpMetadata): Promise<{
|
|
96
144
|
success: boolean;
|
|
97
145
|
}>;
|
|
98
146
|
/**
|
|
99
147
|
* Download file. Returns null if not found.
|
|
100
|
-
* @example
|
|
148
|
+
* @example
|
|
149
|
+
* import { buckets } from '@generated';
|
|
150
|
+
* const bucket = edgespark.storage.from(buckets.documents);
|
|
151
|
+
* const file = await bucket.get('doc.pdf');
|
|
152
|
+
* if (file) {
|
|
153
|
+
* // file.body is ArrayBuffer, file.metadata has size and httpMetadata
|
|
154
|
+
* }
|
|
101
155
|
*/
|
|
102
156
|
get(path: string): Promise<StorageObject | null>;
|
|
103
157
|
/**
|
|
104
158
|
* Get metadata only (no body). Faster than get() for existence checks.
|
|
105
|
-
* @example
|
|
159
|
+
* @example
|
|
160
|
+
* import { buckets } from '@generated';
|
|
161
|
+
* const bucket = edgespark.storage.from(buckets.uploads);
|
|
162
|
+
* const meta = await bucket.head('file.txt');
|
|
163
|
+
* if (meta) {
|
|
164
|
+
* console.log(meta.size, meta.httpMetadata.contentType);
|
|
165
|
+
* }
|
|
106
166
|
*/
|
|
107
167
|
head(path: string): Promise<StorageObjectMetadata | null>;
|
|
108
168
|
/**
|
|
109
|
-
* List files with optional
|
|
110
|
-
*
|
|
169
|
+
* List files with optional filtering and pagination
|
|
170
|
+
*
|
|
171
|
+
* @param options - See {@link StorageListOptions} for all options
|
|
172
|
+
* @returns {@link StorageListResult} with objects, hasMore, cursor, delimitedPrefixes
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* // First: get BucketClient from BucketDef (not string!)
|
|
176
|
+
* import { buckets } from '@generated';
|
|
177
|
+
* const bucket = edgespark.storage.from(buckets.uploads);
|
|
178
|
+
*
|
|
179
|
+
* // List user's files
|
|
180
|
+
* const { objects } = await bucket.list({ prefix: 'user-123/' })
|
|
181
|
+
*
|
|
182
|
+
* // Paginated listing
|
|
183
|
+
* let cursor: string | undefined
|
|
184
|
+
* do {
|
|
185
|
+
* const result = await bucket.list({ limit: 100, cursor })
|
|
186
|
+
* cursor = result.hasMore ? result.cursor : undefined
|
|
187
|
+
* } while (cursor)
|
|
188
|
+
*
|
|
189
|
+
* // Folder browser (delimiter returns subfolders in delimitedPrefixes)
|
|
190
|
+
* const { objects, delimitedPrefixes } = await bucket.list({
|
|
191
|
+
* prefix: 'photos/',
|
|
192
|
+
* delimiter: '/'
|
|
193
|
+
* })
|
|
111
194
|
*/
|
|
112
|
-
list(
|
|
113
|
-
limit?: number;
|
|
114
|
-
cursor?: string;
|
|
115
|
-
}): Promise<StorageListResult>;
|
|
195
|
+
list(options?: StorageListOptions): Promise<StorageListResult>;
|
|
116
196
|
/**
|
|
117
197
|
* Delete file(s). Supports bulk delete up to 1000 paths.
|
|
118
|
-
* @example
|
|
198
|
+
* @example
|
|
199
|
+
* import { buckets } from '@generated';
|
|
200
|
+
* const bucket = edgespark.storage.from(buckets.temp);
|
|
201
|
+
* // Single file
|
|
202
|
+
* await bucket.delete('old-file.txt');
|
|
203
|
+
* // Bulk delete
|
|
204
|
+
* await bucket.delete(['file1.jpg', 'file2.jpg', 'file3.jpg']);
|
|
119
205
|
*/
|
|
120
206
|
delete(paths: string | string[]): Promise<{
|
|
121
207
|
success: boolean;
|
|
122
208
|
}>;
|
|
123
209
|
/**
|
|
124
|
-
* Generate presigned upload URL for direct client uploads
|
|
125
|
-
* @example
|
|
210
|
+
* Generate presigned upload URL for direct client uploads (bypasses worker, uploads directly to R2)
|
|
211
|
+
* @example
|
|
212
|
+
* import { buckets } from '@generated';
|
|
213
|
+
* const bucket = edgespark.storage.from(buckets.videos);
|
|
214
|
+
* const { uploadUrl, expiresAt } = await bucket.createPresignedPutUrl('video.mp4', 3600);
|
|
215
|
+
* // Return uploadUrl to client, client uploads directly via PUT request
|
|
126
216
|
*/
|
|
127
217
|
createPresignedPutUrl(path: string, expiresInSecs?: number, options?: StorageHttpMetadata): Promise<{
|
|
128
218
|
uploadUrl: string;
|
|
@@ -130,8 +220,12 @@ export interface BucketClient {
|
|
|
130
220
|
expiresAt: Date;
|
|
131
221
|
}>;
|
|
132
222
|
/**
|
|
133
|
-
* Generate presigned download URL for direct client downloads
|
|
134
|
-
* @example
|
|
223
|
+
* Generate presigned download URL for direct client downloads (bypasses worker, downloads directly from R2)
|
|
224
|
+
* @example
|
|
225
|
+
* import { buckets } from '@generated';
|
|
226
|
+
* const bucket = edgespark.storage.from(buckets.videos);
|
|
227
|
+
* const { downloadUrl, expiresAt } = await bucket.createPresignedGetUrl('video.mp4', 3600);
|
|
228
|
+
* // Return downloadUrl to client for direct download
|
|
135
229
|
*/
|
|
136
230
|
createPresignedGetUrl(path: string, expiresInSecs?: number): Promise<{
|
|
137
231
|
downloadUrl: string;
|
|
@@ -153,14 +247,47 @@ export interface StorageObject {
|
|
|
153
247
|
body: ArrayBuffer;
|
|
154
248
|
metadata: StorageObjectMetadata;
|
|
155
249
|
}
|
|
250
|
+
/** File info returned in StorageListResult.objects */
|
|
156
251
|
export interface StorageFileInfo {
|
|
252
|
+
/** Full path of the file (e.g., 'user-123/photos/image.jpg') */
|
|
157
253
|
key: string;
|
|
254
|
+
/** File size in bytes */
|
|
158
255
|
size: number;
|
|
256
|
+
/** Upload timestamp */
|
|
159
257
|
uploaded: Date;
|
|
160
258
|
}
|
|
259
|
+
/**
|
|
260
|
+
* Result from bucket.list() operation
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* import { buckets } from '@generated';
|
|
264
|
+
* const bucket = edgespark.storage.from(buckets.files); // BucketDef, not string!
|
|
265
|
+
*
|
|
266
|
+
* const result = await bucket.list({ prefix: 'user-123/', delimiter: '/' })
|
|
267
|
+
*
|
|
268
|
+
* // Files matching the query
|
|
269
|
+
* result.objects.forEach(file => {
|
|
270
|
+
* console.log(file.key) // 'user-123/photo.jpg'
|
|
271
|
+
* console.log(file.size) // 1024 (bytes)
|
|
272
|
+
* console.log(file.uploaded) // Date object
|
|
273
|
+
* })
|
|
274
|
+
*
|
|
275
|
+
* // Pagination
|
|
276
|
+
* if (result.hasMore) {
|
|
277
|
+
* const nextPage = await bucket.list({ cursor: result.cursor })
|
|
278
|
+
* }
|
|
279
|
+
*
|
|
280
|
+
* // Subfolders (only when delimiter is used)
|
|
281
|
+
* result.delimitedPrefixes // ['user-123/photos/', 'user-123/documents/']
|
|
282
|
+
*/
|
|
161
283
|
export interface StorageListResult {
|
|
284
|
+
/** Array of file objects matching the query */
|
|
162
285
|
objects: StorageFileInfo[];
|
|
286
|
+
/** True if more results available. Use cursor to fetch next page */
|
|
163
287
|
hasMore: boolean;
|
|
288
|
+
/** Pagination token. Pass to next list() call to get more results. Only present when hasMore is true */
|
|
164
289
|
cursor?: string;
|
|
290
|
+
/** Common prefixes (subfolders) when delimiter option is used. Empty array if no delimiter specified */
|
|
291
|
+
delimitedPrefixes: string[];
|
|
165
292
|
}
|
|
166
293
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAM9C
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edgespark/server-types",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.3",
|
|
4
4
|
"description": "Type definitions for EdgeSpark server SDK",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"edgespark",
|
|
@@ -29,12 +29,6 @@
|
|
|
29
29
|
"engines": {
|
|
30
30
|
"node": ">=18.0.0"
|
|
31
31
|
},
|
|
32
|
-
"scripts": {
|
|
33
|
-
"build": "tsc",
|
|
34
|
-
"typecheck": "tsc --noEmit",
|
|
35
|
-
"lint": "tsc --noEmit",
|
|
36
|
-
"prepublishOnly": "pnpm build && pnpm typecheck"
|
|
37
|
-
},
|
|
38
32
|
"peerDependencies": {
|
|
39
33
|
"drizzle-orm": ">=0.30.0",
|
|
40
34
|
"hono": ">=4.0.0"
|
|
@@ -48,5 +42,10 @@
|
|
|
48
42
|
"license": "MIT",
|
|
49
43
|
"publishConfig": {
|
|
50
44
|
"access": "public"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "tsc",
|
|
48
|
+
"typecheck": "tsc --noEmit",
|
|
49
|
+
"lint": "tsc --noEmit"
|
|
51
50
|
}
|
|
52
|
-
}
|
|
51
|
+
}
|