@wecode-team/cms-supabase-api 0.1.34 → 0.1.35
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 +77 -1
- package/USAGE_EXAMPLE.md +70 -3
- package/dist/handlers/upload.d.ts +25 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.esm.js +707 -56
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +712 -55
- package/dist/index.js.map +1 -1
- package/dist/services/oss-upload.service.d.ts +13 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/upload.d.ts +47 -0
- package/dist/utils/route-helpers.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -94,7 +94,9 @@ import { cors } from 'hono/cors'
|
|
|
94
94
|
import {
|
|
95
95
|
initializeSupabase,
|
|
96
96
|
initializeCmsSystem,
|
|
97
|
-
|
|
97
|
+
initializeOssUpload,
|
|
98
|
+
createCmsRoutes,
|
|
99
|
+
createOssUploadRoute,
|
|
98
100
|
} from '@wecode-team/cms-supabase-api'
|
|
99
101
|
|
|
100
102
|
const app = new Hono()
|
|
@@ -111,9 +113,23 @@ initializeSupabase({
|
|
|
111
113
|
// 初始化 CMS 系统表
|
|
112
114
|
await initializeCmsSystem()
|
|
113
115
|
|
|
116
|
+
// 初始化 OSS 上传
|
|
117
|
+
initializeOssUpload({
|
|
118
|
+
bucket: process.env.OSS_BUCKET!,
|
|
119
|
+
endpoint: process.env.OSS_ENDPOINT!,
|
|
120
|
+
accessKeyId: process.env.OSS_ACCESS_KEY_ID!,
|
|
121
|
+
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET!,
|
|
122
|
+
publicBaseUrl: process.env.OSS_PUBLIC_BASE_URL,
|
|
123
|
+
prefix: 'cms-assets',
|
|
124
|
+
returnMode: 'both',
|
|
125
|
+
})
|
|
126
|
+
|
|
114
127
|
// 一键创建所有 CMS 路由
|
|
115
128
|
createCmsRoutes(app)
|
|
116
129
|
|
|
130
|
+
// 创建上传路由
|
|
131
|
+
createOssUploadRoute(app)
|
|
132
|
+
|
|
117
133
|
export default app
|
|
118
134
|
```
|
|
119
135
|
|
|
@@ -191,6 +207,12 @@ export default app
|
|
|
191
207
|
|------|------|------|
|
|
192
208
|
| GET | `/relation/:tableName/options` | 获取关联表选项(用于下拉选择) |
|
|
193
209
|
|
|
210
|
+
### 资源上传
|
|
211
|
+
|
|
212
|
+
| 方法 | 路径 | 描述 |
|
|
213
|
+
|------|------|------|
|
|
214
|
+
| POST | `/upload` | 上传单个文件到阿里云 OSS,默认需要管理员登录 |
|
|
215
|
+
|
|
194
216
|
### 认证
|
|
195
217
|
|
|
196
218
|
| 方法 | 路径 | 描述 |
|
|
@@ -205,6 +227,60 @@ export default app
|
|
|
205
227
|
|
|
206
228
|
> 提示:后台管理接口(`/models`、`/data/*` 等)建议携带请求头 `X-Session-Id`,用于按 `session_id` 维度校验管理员权限。
|
|
207
229
|
|
|
230
|
+
## ☁️ OSS 上传
|
|
231
|
+
|
|
232
|
+
宿主项目只需要两步:
|
|
233
|
+
|
|
234
|
+
1. 调用 `initializeOssUpload(config)`
|
|
235
|
+
2. 调用 `createOssUploadRoute(app)`
|
|
236
|
+
|
|
237
|
+
最小示例:
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
initializeOssUpload({
|
|
241
|
+
bucket: process.env.OSS_BUCKET!,
|
|
242
|
+
endpoint: process.env.OSS_ENDPOINT!,
|
|
243
|
+
accessKeyId: process.env.OSS_ACCESS_KEY_ID!,
|
|
244
|
+
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET!,
|
|
245
|
+
publicBaseUrl: process.env.OSS_PUBLIC_BASE_URL,
|
|
246
|
+
prefix: "cms-assets",
|
|
247
|
+
maxSize: 2 * 1024 * 1024,
|
|
248
|
+
returnMode: "both",
|
|
249
|
+
signedUrlExpiresIn: 60 * 60,
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
createOssUploadRoute(app)
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
上传请求要求:
|
|
256
|
+
|
|
257
|
+
- `POST /upload`
|
|
258
|
+
- `multipart/form-data`
|
|
259
|
+
- 文件字段名固定为 `file`
|
|
260
|
+
- 可选文本字段:`directory`、`fieldName`、`tableName`
|
|
261
|
+
- 默认要求 `Authorization` 和 `X-Session-Id`,并通过现有 admin 鉴权
|
|
262
|
+
|
|
263
|
+
上传成功返回:
|
|
264
|
+
|
|
265
|
+
```json
|
|
266
|
+
{
|
|
267
|
+
"success": true,
|
|
268
|
+
"url": "https://bucket.endpoint/path/to/object.png",
|
|
269
|
+
"signedUrl": "https://bucket.endpoint/path/to/object.png?...",
|
|
270
|
+
"objectKey": "cms-assets/logos/20260316120000-abcdef.png",
|
|
271
|
+
"fieldName": "logo",
|
|
272
|
+
"tableName": "site_config"
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
`returnMode` 说明:
|
|
277
|
+
|
|
278
|
+
- `public-url`: 返回公开 URL
|
|
279
|
+
- `signed-url`: 返回签名 URL,并将 `url` 也设置为该签名地址
|
|
280
|
+
- `both`: 同时返回 `url` 和 `signedUrl`
|
|
281
|
+
|
|
282
|
+
如果 bucket 是私有读,推荐使用 `signed-url` 或 `both`。
|
|
283
|
+
|
|
208
284
|
## 🏗️ 字段类型
|
|
209
285
|
|
|
210
286
|
| 类型 | PostgreSQL 类型 | 说明 |
|
package/USAGE_EXAMPLE.md
CHANGED
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
import { Hono } from 'hono'
|
|
10
10
|
import {
|
|
11
11
|
initializeSupabase,
|
|
12
|
+
initializeOssUpload,
|
|
12
13
|
createCmsRoutes,
|
|
14
|
+
createOssUploadRoute,
|
|
13
15
|
testConnection
|
|
14
16
|
} from '@wecode-team/cms-supabase-api'
|
|
15
17
|
|
|
@@ -24,8 +26,18 @@ initializeSupabase({
|
|
|
24
26
|
// 测试连接
|
|
25
27
|
await testConnection()
|
|
26
28
|
|
|
29
|
+
initializeOssUpload({
|
|
30
|
+
bucket: 'your-bucket',
|
|
31
|
+
endpoint: 'oss-cn-beijing.aliyuncs.com',
|
|
32
|
+
accessKeyId: 'your-access-key-id',
|
|
33
|
+
accessKeySecret: 'your-access-key-secret',
|
|
34
|
+
publicBaseUrl: 'https://your-bucket.oss-cn-beijing.aliyuncs.com',
|
|
35
|
+
returnMode: 'both',
|
|
36
|
+
})
|
|
37
|
+
|
|
27
38
|
// 创建所有 CMS 路由
|
|
28
39
|
createCmsRoutes(app)
|
|
40
|
+
createOssUploadRoute(app)
|
|
29
41
|
|
|
30
42
|
// 添加自定义路由
|
|
31
43
|
app.get('/', (c) => {
|
|
@@ -45,7 +57,9 @@ import { serve } from '@hono/node-server'
|
|
|
45
57
|
import { Hono } from 'hono'
|
|
46
58
|
import {
|
|
47
59
|
initializeSupabase,
|
|
48
|
-
|
|
60
|
+
initializeOssUpload,
|
|
61
|
+
createCmsRoutes,
|
|
62
|
+
createOssUploadRoute,
|
|
49
63
|
} from '@wecode-team/cms-supabase-api'
|
|
50
64
|
|
|
51
65
|
const app = new Hono()
|
|
@@ -56,8 +70,18 @@ initializeSupabase({
|
|
|
56
70
|
key: process.env.SUPABASE_ANON_KEY!
|
|
57
71
|
})
|
|
58
72
|
|
|
73
|
+
initializeOssUpload({
|
|
74
|
+
bucket: process.env.OSS_BUCKET!,
|
|
75
|
+
endpoint: process.env.OSS_ENDPOINT!,
|
|
76
|
+
accessKeyId: process.env.OSS_ACCESS_KEY_ID!,
|
|
77
|
+
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET!,
|
|
78
|
+
publicBaseUrl: process.env.OSS_PUBLIC_BASE_URL,
|
|
79
|
+
returnMode: 'both',
|
|
80
|
+
})
|
|
81
|
+
|
|
59
82
|
// 添加路由
|
|
60
83
|
createCmsRoutes(app)
|
|
84
|
+
createOssUploadRoute(app)
|
|
61
85
|
|
|
62
86
|
// 启动服务器
|
|
63
87
|
const port = 3000
|
|
@@ -76,7 +100,9 @@ serve({
|
|
|
76
100
|
import { Hono } from 'hono'
|
|
77
101
|
import {
|
|
78
102
|
initializeSupabase,
|
|
79
|
-
|
|
103
|
+
initializeOssUpload,
|
|
104
|
+
createCmsRoutes,
|
|
105
|
+
createOssUploadRoute,
|
|
80
106
|
} from '@wecode-team/cms-supabase-api'
|
|
81
107
|
|
|
82
108
|
const app = new Hono()
|
|
@@ -86,7 +112,17 @@ initializeSupabase({
|
|
|
86
112
|
key: Bun.env.SUPABASE_ANON_KEY!
|
|
87
113
|
})
|
|
88
114
|
|
|
115
|
+
initializeOssUpload({
|
|
116
|
+
bucket: Bun.env.OSS_BUCKET!,
|
|
117
|
+
endpoint: Bun.env.OSS_ENDPOINT!,
|
|
118
|
+
accessKeyId: Bun.env.OSS_ACCESS_KEY_ID!,
|
|
119
|
+
accessKeySecret: Bun.env.OSS_ACCESS_KEY_SECRET!,
|
|
120
|
+
publicBaseUrl: Bun.env.OSS_PUBLIC_BASE_URL,
|
|
121
|
+
returnMode: 'both',
|
|
122
|
+
})
|
|
123
|
+
|
|
89
124
|
createCmsRoutes(app)
|
|
125
|
+
createOssUploadRoute(app)
|
|
90
126
|
|
|
91
127
|
export default {
|
|
92
128
|
port: 3000,
|
|
@@ -139,6 +175,38 @@ app.get('/health', (c) => {
|
|
|
139
175
|
export default app
|
|
140
176
|
```
|
|
141
177
|
|
|
178
|
+
### 资源上传路由
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
import { Hono } from 'hono'
|
|
182
|
+
import {
|
|
183
|
+
initializeSupabase,
|
|
184
|
+
initializeOssUpload,
|
|
185
|
+
createOssUploadRoute,
|
|
186
|
+
} from '@wecode-team/cms-supabase-api'
|
|
187
|
+
|
|
188
|
+
const app = new Hono()
|
|
189
|
+
|
|
190
|
+
initializeSupabase({
|
|
191
|
+
url: process.env.SUPABASE_URL!,
|
|
192
|
+
key: process.env.SUPABASE_ANON_KEY!,
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
initializeOssUpload({
|
|
196
|
+
bucket: process.env.OSS_BUCKET!,
|
|
197
|
+
endpoint: process.env.OSS_ENDPOINT!,
|
|
198
|
+
accessKeyId: process.env.OSS_ACCESS_KEY_ID!,
|
|
199
|
+
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET!,
|
|
200
|
+
publicBaseUrl: process.env.OSS_PUBLIC_BASE_URL,
|
|
201
|
+
prefix: 'cms-assets',
|
|
202
|
+
returnMode: 'both',
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
createOssUploadRoute(app)
|
|
206
|
+
|
|
207
|
+
export default app
|
|
208
|
+
```
|
|
209
|
+
|
|
142
210
|
### 使用固定表名的认证
|
|
143
211
|
|
|
144
212
|
```typescript
|
|
@@ -264,4 +332,3 @@ curl http://localhost:3000/auth/cms_users/current \
|
|
|
264
332
|
-H "Authorization: Bearer YOUR_JWT_TOKEN"
|
|
265
333
|
```
|
|
266
334
|
|
|
267
|
-
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Context } from "hono";
|
|
2
|
+
export declare function uploadToOss(c: Context): Promise<(Response & import("hono").TypedResponse<{
|
|
3
|
+
success: boolean;
|
|
4
|
+
url?: string | undefined;
|
|
5
|
+
signedUrl?: string | undefined;
|
|
6
|
+
objectKey?: string | undefined;
|
|
7
|
+
fieldName?: string | undefined;
|
|
8
|
+
tableName?: string | undefined;
|
|
9
|
+
message?: string | undefined;
|
|
10
|
+
error?: string | undefined;
|
|
11
|
+
}, 200, "json">) | (Response & import("hono").TypedResponse<{
|
|
12
|
+
success: boolean;
|
|
13
|
+
message?: string | undefined;
|
|
14
|
+
data?: {
|
|
15
|
+
success: boolean;
|
|
16
|
+
url?: string | undefined;
|
|
17
|
+
signedUrl?: string | undefined;
|
|
18
|
+
objectKey?: string | undefined;
|
|
19
|
+
fieldName?: string | undefined;
|
|
20
|
+
tableName?: string | undefined;
|
|
21
|
+
message?: string | undefined;
|
|
22
|
+
error?: string | undefined;
|
|
23
|
+
} | undefined;
|
|
24
|
+
error?: string | undefined;
|
|
25
|
+
}, 400 | 500 | 403 | 502, "json">)>;
|
package/dist/index.d.ts
CHANGED
|
@@ -3,9 +3,12 @@ export { default as CmsModelService, getCmsModelService, initializeCmsModel, } f
|
|
|
3
3
|
export { getCmsModelService as CmsModel } from "./models/cms-model";
|
|
4
4
|
export { DynamicTableService, getDynamicTableService, } from "./services/dynamic-table.service";
|
|
5
5
|
export { AuthService, getAuthService, } from "./services/auth.service";
|
|
6
|
+
export { OssUploadService, OssUploadError, initializeOssUpload, getOssUploadService, } from "./services/oss-upload.service";
|
|
6
7
|
export { getModels, createModel, updateModel, deleteModel, } from "./handlers/models";
|
|
7
8
|
export { getTableData, createTableData, updateTableData, deleteTableData, getRelationOptions, getTableDataWithRelations, dropForeignKeys, } from "./handlers/data";
|
|
8
9
|
export { login, signup, signupStatus, verifyAuth, getCurrentUser, requireAuth, } from "./handlers/auth";
|
|
10
|
+
export { uploadToOss, } from "./handlers/upload";
|
|
9
11
|
export type { SchemaField, JsonSchema, CmsModelAttributes, CmsModelCreationAttributes, ApiResponse, PaginatedResponse, SupabaseConfig, DatabaseConfig, TableDataOptions, SupabaseFilter, FieldTypeMapping, RelationType, RelationConfig, RelationOption, GetRelationOptionsParams, } from "./types";
|
|
10
12
|
export type { User, UserInfo, LoginRequest, LoginResponse, } from "./handlers/auth";
|
|
11
|
-
export { createCmsRoutes, createModelRoute, createDynamicDataRoute, createDynamicAuthRoute, createDataRoute, createAuthRoute, } from "./utils/route-helpers";
|
|
13
|
+
export { createCmsRoutes, createModelRoute, createDynamicDataRoute, createDynamicAuthRoute, createDataRoute, createAuthRoute, createOssUploadRoute, } from "./utils/route-helpers";
|
|
14
|
+
export type { OssUploadProvider, OssUploadReturnMode, OssUploadConfig, NormalizedOssUploadConfig, OssUploadInput, OssUploadResult, UploadRouteResponse, } from "./types/upload";
|