@moogodev/client 0.0.0-stage → 0.1.1
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 +53 -2
- package/dist/client.d.ts +155 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +546 -0
- package/dist/errors.d.ts +84 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +246 -0
- package/dist/esm/client.d.ts +155 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +541 -0
- package/dist/esm/errors.d.ts +84 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +220 -0
- package/dist/esm/index.d.ts +35 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/types.d.ts +183 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +5 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.mjs +35 -0
- package/dist/types.d.ts +183 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/package.json +44 -4
- package/src/client.ts +720 -0
- package/src/errors.ts +259 -0
- package/src/index.test.ts +277 -0
- package/src/index.ts +91 -0
- package/src/types.ts +206 -0
- package/tsconfig.json +23 -0
- package/vitest.config.ts +9 -0
package/src/types.ts
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for Moogo object storage API.
|
|
3
|
+
* Matches the API responses from https://moogo.dev
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/** Standard API error envelope */
|
|
7
|
+
export interface ApiError {
|
|
8
|
+
code: string;
|
|
9
|
+
message: string;
|
|
10
|
+
detail?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ApiErrorResponse {
|
|
14
|
+
error: ApiError;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Successful response wrapper */
|
|
18
|
+
export interface ApiSuccessResponse {
|
|
19
|
+
success: true;
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Project/bucket identifiers */
|
|
24
|
+
export type ProjectId = string;
|
|
25
|
+
export type BucketId = string;
|
|
26
|
+
export type ObjectKey = string;
|
|
27
|
+
|
|
28
|
+
/** Base object fields present in all object responses */
|
|
29
|
+
export interface ObjectBase {
|
|
30
|
+
id: string;
|
|
31
|
+
bucket_id: string;
|
|
32
|
+
bucket: string;
|
|
33
|
+
key: string;
|
|
34
|
+
size_bytes: number;
|
|
35
|
+
content_type: string;
|
|
36
|
+
is_public: boolean;
|
|
37
|
+
etag: string;
|
|
38
|
+
url: string;
|
|
39
|
+
preview_url: string;
|
|
40
|
+
public_url: string;
|
|
41
|
+
public_url_base: string;
|
|
42
|
+
url_base: string;
|
|
43
|
+
created_at: string;
|
|
44
|
+
updated_at: string;
|
|
45
|
+
last_modified: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Object as returned by upload/list endpoints */
|
|
49
|
+
export interface ObjectResponse extends ObjectBase {}
|
|
50
|
+
|
|
51
|
+
/** Bucket configuration */
|
|
52
|
+
export interface Bucket {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
object_count: number;
|
|
56
|
+
size_bytes: number;
|
|
57
|
+
created_at: string;
|
|
58
|
+
is_public: boolean;
|
|
59
|
+
allowed_types: string[];
|
|
60
|
+
max_object_size_bytes: number;
|
|
61
|
+
quota_bytes: number;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Bucket creation request */
|
|
65
|
+
export interface CreateBucketRequest {
|
|
66
|
+
name: string;
|
|
67
|
+
allowed_types?: string[];
|
|
68
|
+
max_object_size_bytes?: number;
|
|
69
|
+
quota_bytes?: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Bucket update request */
|
|
73
|
+
export interface UpdateBucketRequest {
|
|
74
|
+
is_public?: boolean;
|
|
75
|
+
allowed_types?: string[];
|
|
76
|
+
max_object_size_bytes?: number;
|
|
77
|
+
quota_bytes?: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Bucket info response (GET /buckets/{project_id}/{bucket_id}) */
|
|
81
|
+
export interface BucketInfoResponse {
|
|
82
|
+
success: true;
|
|
83
|
+
bucket: Bucket;
|
|
84
|
+
storage_used_bytes: number;
|
|
85
|
+
quota_bytes: number;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** List buckets response */
|
|
89
|
+
export interface ListBucketsResponse {
|
|
90
|
+
success: true;
|
|
91
|
+
buckets: Bucket[];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Object upload response */
|
|
95
|
+
export interface UploadResponse {
|
|
96
|
+
success: true;
|
|
97
|
+
object: ObjectResponse;
|
|
98
|
+
storage_used_bytes: number;
|
|
99
|
+
quota_bytes: number;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** List objects query parameters */
|
|
103
|
+
export interface ListObjectsQuery {
|
|
104
|
+
bucket?: string;
|
|
105
|
+
prefix?: string;
|
|
106
|
+
search?: string;
|
|
107
|
+
order_by?: 'key' | 'size' | 'created' | 'updated' | 'contenttype';
|
|
108
|
+
order_dir?: 'asc' | 'desc';
|
|
109
|
+
limit?: number;
|
|
110
|
+
cursor?: string;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Paginated object list response */
|
|
114
|
+
export interface ListObjectsResponse {
|
|
115
|
+
success: true;
|
|
116
|
+
objects: ObjectResponse[];
|
|
117
|
+
next_cursor: string | null;
|
|
118
|
+
total: number;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** Presigned URL request */
|
|
122
|
+
export interface PresignedUrlRequest {
|
|
123
|
+
method: 'GET' | 'PUT';
|
|
124
|
+
expires_in: number; // 60 - 604800 seconds
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Presigned URL response */
|
|
128
|
+
export interface PresignedUrlResponse {
|
|
129
|
+
success: true;
|
|
130
|
+
url: string;
|
|
131
|
+
expires_at: string;
|
|
132
|
+
method: 'GET' | 'PUT';
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Signed upload response (POST /bucket/{project_id}/sign-upload) */
|
|
136
|
+
export interface SignedUploadResponse {
|
|
137
|
+
success: true;
|
|
138
|
+
upload_url: string;
|
|
139
|
+
object: ObjectResponse;
|
|
140
|
+
expires_at: string;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** Storage credential */
|
|
144
|
+
export interface StorageCredential {
|
|
145
|
+
id: string;
|
|
146
|
+
access_key_id: string;
|
|
147
|
+
secret_key_preview: string;
|
|
148
|
+
label: string;
|
|
149
|
+
created_at: string;
|
|
150
|
+
rotated_at: string | null;
|
|
151
|
+
revoked_at: string | null;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** List credentials response */
|
|
155
|
+
export interface ListCredentialsResponse {
|
|
156
|
+
success: true;
|
|
157
|
+
credentials: StorageCredential[];
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Create credential request */
|
|
161
|
+
export interface CreateCredentialRequest {
|
|
162
|
+
label: string;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** Create credential response (includes secret once) */
|
|
166
|
+
export interface CreateCredentialResponse {
|
|
167
|
+
success: true;
|
|
168
|
+
credential: StorageCredential;
|
|
169
|
+
secret_key: string; // Only returned once!
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** Rotate credential response */
|
|
173
|
+
export interface RotateCredentialResponse {
|
|
174
|
+
success: true;
|
|
175
|
+
credential: StorageCredential;
|
|
176
|
+
secret_key: string; // Only returned once!
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** Generic success response for deletions */
|
|
180
|
+
export interface DeleteResponse {
|
|
181
|
+
success: true;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** Configuration for the client */
|
|
185
|
+
export interface ClientConfig {
|
|
186
|
+
/** Base URL of the Moogo API (e.g., "https://api.moogo.dev") */
|
|
187
|
+
baseUrl: string;
|
|
188
|
+
/** Project ID */
|
|
189
|
+
projectId: string;
|
|
190
|
+
/** Access Key ID */
|
|
191
|
+
accessKeyId: string;
|
|
192
|
+
/** Secret Key */
|
|
193
|
+
secretKey: string;
|
|
194
|
+
/** Optional: custom fetch implementation */
|
|
195
|
+
fetch?: typeof fetch;
|
|
196
|
+
/** Optional: default timeout in ms */
|
|
197
|
+
timeout?: number;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Internal: parsed auth header */
|
|
201
|
+
export interface ParsedAuth {
|
|
202
|
+
accessKeyId: string;
|
|
203
|
+
signature: string;
|
|
204
|
+
timestamp: string;
|
|
205
|
+
signedHeaders: string;
|
|
206
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
5
|
+
"module": "CommonJS",
|
|
6
|
+
"moduleResolution": "node",
|
|
7
|
+
"declaration": true,
|
|
8
|
+
"declarationMap": true,
|
|
9
|
+
"outDir": "./dist",
|
|
10
|
+
"rootDir": "./src",
|
|
11
|
+
"strict": true,
|
|
12
|
+
"esModuleInterop": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"forceConsistentCasingInFileNames": true,
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"noUnusedLocals": true,
|
|
17
|
+
"noUnusedParameters": true,
|
|
18
|
+
"noImplicitReturns": true,
|
|
19
|
+
"noFallthroughCasesInSwitch": true
|
|
20
|
+
},
|
|
21
|
+
"include": ["src/**/*"],
|
|
22
|
+
"exclude": ["node_modules", "dist", "**/*.test.ts"]
|
|
23
|
+
}
|