teable-api-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/dist/index.js ADDED
@@ -0,0 +1,417 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var axios = require('axios');
6
+ var z = require('zod');
7
+
8
+ /**
9
+ * 创建记录请求验证模式
10
+ */
11
+ const RecordCreateSchema = z.object({
12
+ tableId: z.string().min(1, "表 ID 不能为空"),
13
+ records: z
14
+ .array(z.object({
15
+ fields: z.record(z.string(), z.any()),
16
+ }))
17
+ .min(1, "至少需要一条记录"),
18
+ fieldKeyType: z.enum(["name", "id", "dbFieldName"]).optional(),
19
+ typecast: z.boolean().optional(),
20
+ order: z
21
+ .object({
22
+ viewId: z.string().min(1),
23
+ anchorId: z.string().min(1),
24
+ position: z.enum(["before", "after"]),
25
+ })
26
+ .optional(),
27
+ });
28
+ /**
29
+ * 获取记录请求验证模式
30
+ */
31
+ const RecordGetSchema = z.object({
32
+ tableId: z.string().min(1, "表 ID 不能为空"),
33
+ viewId: z.string().optional(),
34
+ take: z.number().max(1000).optional(),
35
+ skip: z.number().optional(),
36
+ fieldKeyType: z.enum(["name", "id", "dbFieldName"]).optional(),
37
+ cellFormat: z.enum(["json", "text"]).optional(),
38
+ projection: z.array(z.string()).optional(),
39
+ orderBy: z
40
+ .array(z.object({
41
+ field: z.string(),
42
+ order: z.enum(["asc", "desc"]),
43
+ }))
44
+ .optional(),
45
+ filter: z.record(z.string(), z.any()).optional(),
46
+ search: z
47
+ .array(z.object({
48
+ field: z.string(),
49
+ value: z.string(),
50
+ }))
51
+ .optional(),
52
+ });
53
+ /**
54
+ * 获取单个记录请求验证模式
55
+ */
56
+ const RecordGetByIdSchema = z.object({
57
+ tableId: z.string().min(1, "表 ID 不能为空"),
58
+ recordId: z.string().min(1, "记录 ID 不能为空"),
59
+ projection: z.array(z.string()).optional(),
60
+ fieldKeyType: z.enum(["name", "id", "dbFieldName"]).optional(),
61
+ cellFormat: z.enum(["json", "text"]).optional(),
62
+ });
63
+ /**
64
+ * 更新记录请求验证模式
65
+ */
66
+ const RecordUpdateSchema = z.object({
67
+ tableId: z.string().min(1, "表 ID 不能为空"),
68
+ recordId: z.string().min(1, "记录 ID 不能为空"),
69
+ record: z.object({
70
+ fields: z.record(z.string(), z.any()),
71
+ }),
72
+ fieldKeyType: z.enum(["name", "id", "dbFieldName"]).optional(),
73
+ typecast: z.boolean().optional(),
74
+ order: z
75
+ .object({
76
+ viewId: z.string().min(1),
77
+ anchorId: z.string().min(1),
78
+ position: z.enum(["before", "after"]),
79
+ })
80
+ .optional(),
81
+ });
82
+ /**
83
+ * 删除记录请求验证模式
84
+ */
85
+ const RecordDeleteSchema = z.object({
86
+ tableId: z.string().min(1, "表 ID 不能为空"),
87
+ recordId: z.string().min(1, "记录 ID 不能为空"),
88
+ });
89
+ /**
90
+ * 上传附件请求验证模式
91
+ */
92
+ const RecordUploadAttachmentSchema = z.object({
93
+ tableId: z.string().min(1, "表 ID 不能为空"),
94
+ recordId: z.string().min(1, "记录 ID 不能为空"),
95
+ fieldId: z.string().min(1, "字段 ID 不能为空"),
96
+ file: z.instanceof(File, { message: "必须是一个 File 对象" }),
97
+ fileUrl: z.string().optional(),
98
+ });
99
+
100
+ function getRecordApis(client) {
101
+ return {
102
+ async create(options) {
103
+ try {
104
+ // 验证请求数据
105
+ const validatedData = RecordCreateSchema.parse(options);
106
+ // 构建请求体
107
+ const requestBody = {
108
+ records: validatedData.records,
109
+ };
110
+ // 添加可选参数
111
+ if (validatedData.fieldKeyType) {
112
+ requestBody.fieldKeyType = validatedData.fieldKeyType;
113
+ }
114
+ if (validatedData.typecast !== undefined) {
115
+ requestBody.typecast = validatedData.typecast;
116
+ }
117
+ if (validatedData.order) {
118
+ requestBody.order = validatedData.order;
119
+ }
120
+ // 发送 POST 请求
121
+ const response = await client.post(`/api/table/${validatedData.tableId}/record`, requestBody);
122
+ return {
123
+ success: true,
124
+ data: response.data,
125
+ };
126
+ }
127
+ catch (error) {
128
+ // 处理 Zod 验证错误
129
+ if (error instanceof z.ZodError) {
130
+ const errorMessages = error.issues
131
+ .map((e) => `${e.path.join(".")}: ${e.message}`)
132
+ .join("; ");
133
+ return {
134
+ success: false,
135
+ error: `数据验证失败: ${errorMessages}`,
136
+ };
137
+ }
138
+ // 处理其他错误
139
+ return {
140
+ success: false,
141
+ error: error instanceof Error ? error.message : "创建记录失败",
142
+ };
143
+ }
144
+ },
145
+ async get(options) {
146
+ try {
147
+ const validatedData = RecordGetSchema.parse(options);
148
+ const { tableId, ...queryParams } = validatedData;
149
+ // 构建查询参数
150
+ const params = {};
151
+ if (queryParams.viewId) {
152
+ params.viewId = queryParams.viewId;
153
+ }
154
+ if (queryParams.take !== undefined) {
155
+ params.take = String(queryParams.take);
156
+ }
157
+ if (queryParams.skip !== undefined) {
158
+ params.skip = String(queryParams.skip);
159
+ }
160
+ if (queryParams.fieldKeyType) {
161
+ params.fieldKeyType = queryParams.fieldKeyType;
162
+ }
163
+ if (queryParams.cellFormat) {
164
+ params.cellFormat = queryParams.cellFormat;
165
+ }
166
+ if (queryParams.projection && queryParams.projection.length > 0) {
167
+ params.projection = JSON.stringify(queryParams.projection);
168
+ }
169
+ if (queryParams.orderBy && queryParams.orderBy.length > 0) {
170
+ params.orderBy = JSON.stringify(queryParams.orderBy);
171
+ }
172
+ if (queryParams.filter) {
173
+ params.filter = JSON.stringify(queryParams.filter);
174
+ }
175
+ if (queryParams.search && queryParams.search.length > 0) {
176
+ params.search = JSON.stringify(queryParams.search);
177
+ }
178
+ // 发送 GET 请求
179
+ const response = await client.get(`/api/table/${tableId}/record`, { params });
180
+ return {
181
+ success: true,
182
+ data: response.data,
183
+ };
184
+ }
185
+ catch (error) {
186
+ // 处理 Zod 验证错误
187
+ if (error instanceof z.ZodError) {
188
+ const errorMessages = error.issues
189
+ .map((e) => `${e.path.join(".")}: ${e.message}`)
190
+ .join("; ");
191
+ return {
192
+ success: false,
193
+ error: `数据验证失败: ${errorMessages}`,
194
+ };
195
+ }
196
+ // 处理其他错误
197
+ return {
198
+ success: false,
199
+ error: error instanceof Error ? error.message : "获取记录失败",
200
+ };
201
+ }
202
+ },
203
+ async getById(options) {
204
+ try {
205
+ const validatedData = RecordGetByIdSchema.parse(options);
206
+ const { tableId, recordId, ...queryParams } = validatedData;
207
+ // 构建查询参数
208
+ const params = {};
209
+ if (queryParams.projection && queryParams.projection.length > 0) {
210
+ params.projection = JSON.stringify(queryParams.projection);
211
+ }
212
+ if (queryParams.fieldKeyType) {
213
+ params.fieldKeyType = queryParams.fieldKeyType;
214
+ }
215
+ if (queryParams.cellFormat) {
216
+ params.cellFormat = queryParams.cellFormat;
217
+ }
218
+ // 发送 GET 请求获取单个记录
219
+ const response = await client.get(`/api/table/${tableId}/record/${recordId}`, { params });
220
+ return {
221
+ success: true,
222
+ data: response.data,
223
+ };
224
+ }
225
+ catch (error) {
226
+ // 处理 Zod 验证错误
227
+ if (error instanceof z.ZodError) {
228
+ const errorMessages = error.issues
229
+ .map((e) => `${e.path.join(".")}: ${e.message}`)
230
+ .join("; ");
231
+ return {
232
+ success: false,
233
+ error: `数据验证失败: ${errorMessages}`,
234
+ };
235
+ }
236
+ // 处理其他错误
237
+ return {
238
+ success: false,
239
+ error: error instanceof Error ? error.message : "获取单个记录失败",
240
+ };
241
+ }
242
+ },
243
+ async update(options) {
244
+ try {
245
+ const validatedData = RecordUpdateSchema.parse(options);
246
+ const { tableId, recordId, record, ...queryParams } = validatedData;
247
+ // 构建请求体
248
+ const requestBody = {
249
+ record: record,
250
+ };
251
+ // 添加可选参数
252
+ if (queryParams.fieldKeyType) {
253
+ requestBody.fieldKeyType = queryParams.fieldKeyType;
254
+ }
255
+ if (queryParams.typecast !== undefined) {
256
+ requestBody.typecast = queryParams.typecast;
257
+ }
258
+ if (queryParams.order) {
259
+ requestBody.order = queryParams.order;
260
+ }
261
+ // 发送 PATCH 请求更新记录
262
+ const response = await client.patch(`/api/table/${tableId}/record/${recordId}`, requestBody);
263
+ return {
264
+ success: true,
265
+ data: response.data,
266
+ };
267
+ }
268
+ catch (error) {
269
+ // 处理 Zod 验证错误
270
+ if (error instanceof z.ZodError) {
271
+ const errorMessages = error.issues
272
+ .map((e) => `${e.path.join(".")}: ${e.message}`)
273
+ .join("; ");
274
+ return {
275
+ success: false,
276
+ error: `数据验证失败: ${errorMessages}`,
277
+ };
278
+ }
279
+ // 处理其他错误
280
+ return {
281
+ success: false,
282
+ error: error instanceof Error ? error.message : "更新记录失败",
283
+ };
284
+ }
285
+ },
286
+ async delete(options) {
287
+ try {
288
+ const validatedData = RecordDeleteSchema.parse(options);
289
+ const { tableId, recordId } = validatedData;
290
+ // 发送 DELETE 请求删除记录
291
+ await client.delete(`/api/table/${tableId}/record/${recordId}`);
292
+ return {
293
+ success: true,
294
+ data: { success: true },
295
+ };
296
+ }
297
+ catch (error) {
298
+ // 处理 Zod 验证错误
299
+ if (error instanceof z.ZodError) {
300
+ const errorMessages = error.issues
301
+ .map((e) => `${e.path.join(".")}: ${e.message}`)
302
+ .join("; ");
303
+ return {
304
+ success: false,
305
+ error: `数据验证失败: ${errorMessages}`,
306
+ };
307
+ }
308
+ // 处理其他错误
309
+ return {
310
+ success: false,
311
+ error: error instanceof Error ? error.message : "删除记录失败",
312
+ };
313
+ }
314
+ },
315
+ async uploadAttachment(options) {
316
+ try {
317
+ const validatedData = RecordUploadAttachmentSchema.parse(options);
318
+ const { tableId, recordId, fieldId, file, fileUrl } = validatedData;
319
+ // 构建 FormData
320
+ const formData = new FormData();
321
+ formData.append('file', file);
322
+ if (fileUrl) {
323
+ formData.append('fileUrl', fileUrl);
324
+ }
325
+ // 发送 POST 请求上传附件
326
+ const response = await client.post(`/api/table/${tableId}/record/${recordId}/${fieldId}/uploadAttachment`, formData, {
327
+ headers: {
328
+ 'Content-Type': 'multipart/form-data',
329
+ },
330
+ });
331
+ return {
332
+ success: true,
333
+ data: response.data,
334
+ };
335
+ }
336
+ catch (error) {
337
+ // 处理 Zod 验证错误
338
+ if (error instanceof z.ZodError) {
339
+ const errorMessages = error.issues
340
+ .map((e) => `${e.path.join(".")}: ${e.message}`)
341
+ .join("; ");
342
+ return {
343
+ success: false,
344
+ error: `数据验证失败: ${errorMessages}`,
345
+ };
346
+ }
347
+ // 处理其他错误
348
+ return {
349
+ success: false,
350
+ error: error instanceof Error ? error.message : "上传附件失败",
351
+ };
352
+ }
353
+ },
354
+ };
355
+ }
356
+
357
+ /**
358
+ * 创建 Teable 客户端
359
+ * @param config - Teable 配置
360
+ */
361
+ function createTeableClient(config) {
362
+ const client = axios.create({
363
+ baseURL: config.baseUrl,
364
+ headers: {
365
+ Authorization: `Bearer ${config.apiKey}`,
366
+ "Content-Type": "application/json",
367
+ },
368
+ timeout: 30000,
369
+ });
370
+ // 添加响应拦截器用于错误处理
371
+ client.interceptors.response.use((response) => response, (error) => {
372
+ if (error.response) {
373
+ const status = error.response.status;
374
+ const message = error.response.data?.message || error.message;
375
+ if (status === 401) {
376
+ throw new Error("API密钥无效或已过期");
377
+ }
378
+ else if (status === 403) {
379
+ throw new Error("权限不足,无法访问指定的资源");
380
+ }
381
+ else if (status === 404) {
382
+ throw new Error("请求的资源不存在");
383
+ }
384
+ else if (status >= 500) {
385
+ throw new Error(`服务器错误 (${status}): ${message}`);
386
+ }
387
+ else {
388
+ throw new Error(`请求失败 (${status}): ${message}`);
389
+ }
390
+ }
391
+ else if (error.request) {
392
+ throw new Error("无法连接到Teable服务器,请检查网络连接和服务器状态");
393
+ }
394
+ else {
395
+ throw new Error(`请求配置错误: ${error.message}`);
396
+ }
397
+ });
398
+ return {
399
+ record: getRecordApis(client),
400
+ /**
401
+ * 验证配置是否有效
402
+ */
403
+ validateConfig: () => !!(config.apiKey && config.baseUrl),
404
+ };
405
+ }
406
+ // 导出版本信息
407
+ const version = "1.0.0";
408
+ // 默认导出
409
+ var index = {
410
+ createTeableClient,
411
+ version,
412
+ };
413
+
414
+ exports.createTeableClient = createTeableClient;
415
+ exports.default = index;
416
+ exports.version = version;
417
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/record/schema.ts","../src/record/index.ts","../src/index.ts"],"sourcesContent":["import z from \"zod\";\n\n/**\n * 创建记录请求验证模式\n */\nexport const RecordCreateSchema = z.object({\n tableId: z.string().min(1, \"表 ID 不能为空\"),\n records: z\n .array(\n z.object({\n fields: z.record(z.string(), z.any()),\n })\n )\n .min(1, \"至少需要一条记录\"),\n fieldKeyType: z.enum([\"name\", \"id\", \"dbFieldName\"]).optional(),\n typecast: z.boolean().optional(),\n order: z\n .object({\n viewId: z.string().min(1),\n anchorId: z.string().min(1),\n position: z.enum([\"before\", \"after\"]),\n })\n .optional(),\n});\n\n/**\n * 获取记录请求验证模式\n */\nexport const RecordGetSchema = z.object({\n tableId: z.string().min(1, \"表 ID 不能为空\"),\n viewId: z.string().optional(),\n take: z.number().max(1000).optional(),\n skip: z.number().optional(),\n fieldKeyType: z.enum([\"name\", \"id\", \"dbFieldName\"]).optional(),\n cellFormat: z.enum([\"json\", \"text\"]).optional(),\n projection: z.array(z.string()).optional(),\n orderBy: z\n .array(\n z.object({\n field: z.string(),\n order: z.enum([\"asc\", \"desc\"]),\n })\n )\n .optional(),\n filter: z.record(z.string(), z.any()).optional(),\n search: z\n .array(\n z.object({\n field: z.string(),\n value: z.string(),\n })\n )\n .optional(),\n});\n\n/**\n * 获取单个记录请求验证模式\n */\nexport const RecordGetByIdSchema = z.object({\n tableId: z.string().min(1, \"表 ID 不能为空\"),\n recordId: z.string().min(1, \"记录 ID 不能为空\"),\n projection: z.array(z.string()).optional(),\n fieldKeyType: z.enum([\"name\", \"id\", \"dbFieldName\"]).optional(),\n cellFormat: z.enum([\"json\", \"text\"]).optional(),\n});\n\n/**\n * 更新记录请求验证模式\n */\nexport const RecordUpdateSchema = z.object({\n tableId: z.string().min(1, \"表 ID 不能为空\"),\n recordId: z.string().min(1, \"记录 ID 不能为空\"),\n record: z.object({\n fields: z.record(z.string(), z.any()),\n }),\n fieldKeyType: z.enum([\"name\", \"id\", \"dbFieldName\"]).optional(),\n typecast: z.boolean().optional(),\n order: z\n .object({\n viewId: z.string().min(1),\n anchorId: z.string().min(1),\n position: z.enum([\"before\", \"after\"]),\n })\n .optional(),\n});\n\n/**\n * 删除记录请求验证模式\n */\nexport const RecordDeleteSchema = z.object({\n tableId: z.string().min(1, \"表 ID 不能为空\"),\n recordId: z.string().min(1, \"记录 ID 不能为空\"),\n});\n\n/**\n * 上传附件请求验证模式\n */\nexport const RecordUploadAttachmentSchema = z.object({\n tableId: z.string().min(1, \"表 ID 不能为空\"),\n recordId: z.string().min(1, \"记录 ID 不能为空\"),\n fieldId: z.string().min(1, \"字段 ID 不能为空\"),\n file: z.instanceof(File, { message: \"必须是一个 File 对象\" }),\n fileUrl: z.string().optional(),\n});","import { AxiosInstance } from \"axios\";\nimport {\n FieldKeyType,\n RecordCreateOptions,\n RecordCreateResponse,\n RecordGetOptions,\n RecordGetResponse,\n RecordGetByIdOptions,\n RecordGetByIdResponse,\n RecordUpdateOptions,\n RecordUpdateResponse,\n RecordDeleteOptions,\n RecordDeleteResponse,\n RecordUploadAttachmentOptions,\n RecordUploadAttachmentResponse,\n RecordOrder,\n TeableResponse,\n} from \"./types\";\nimport {\n RecordCreateSchema,\n RecordGetSchema,\n RecordGetByIdSchema,\n RecordUpdateSchema,\n RecordDeleteSchema,\n RecordUploadAttachmentSchema\n} from \"./schema\";\nimport z from \"zod\";\n\nexport default function getRecordApis(client: AxiosInstance) {\n return {\n async create(\n options: RecordCreateOptions\n ): Promise<TeableResponse<RecordCreateResponse>> {\n try {\n // 验证请求数据\n const validatedData = RecordCreateSchema.parse(options);\n\n // 构建请求体\n const requestBody: {\n records: Array<{ fields: Record<string, any> }>;\n fieldKeyType?: FieldKeyType;\n typecast?: boolean;\n order?: RecordOrder;\n } = {\n records: validatedData.records,\n };\n\n // 添加可选参数\n if (validatedData.fieldKeyType) {\n requestBody.fieldKeyType = validatedData.fieldKeyType;\n }\n if (validatedData.typecast !== undefined) {\n requestBody.typecast = validatedData.typecast;\n }\n if (validatedData.order) {\n requestBody.order = validatedData.order;\n }\n\n // 发送 POST 请求\n const response = await client.post<RecordCreateResponse>(\n `/api/table/${validatedData.tableId}/record`,\n requestBody\n );\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error) {\n // 处理 Zod 验证错误\n if (error instanceof z.ZodError) {\n const errorMessages = error.issues\n .map((e) => `${e.path.join(\".\")}: ${e.message}`)\n .join(\"; \");\n return {\n success: false,\n error: `数据验证失败: ${errorMessages}`,\n };\n }\n\n // 处理其他错误\n return {\n success: false,\n error: error instanceof Error ? error.message : \"创建记录失败\",\n };\n }\n },\n\n async get(\n options: RecordGetOptions\n ): Promise<TeableResponse<RecordGetResponse>> {\n try {\n const validatedData = RecordGetSchema.parse(options);\n const { tableId, ...queryParams } = validatedData;\n\n // 构建查询参数\n const params: Record<string, string> = {};\n\n if (queryParams.viewId) {\n params.viewId = queryParams.viewId;\n }\n if (queryParams.take !== undefined) {\n params.take = String(queryParams.take);\n }\n if (queryParams.skip !== undefined) {\n params.skip = String(queryParams.skip);\n }\n if (queryParams.fieldKeyType) {\n params.fieldKeyType = queryParams.fieldKeyType;\n }\n if (queryParams.cellFormat) {\n params.cellFormat = queryParams.cellFormat;\n }\n if (queryParams.projection && queryParams.projection.length > 0) {\n params.projection = JSON.stringify(queryParams.projection);\n }\n if (queryParams.orderBy && queryParams.orderBy.length > 0) {\n params.orderBy = JSON.stringify(queryParams.orderBy);\n }\n if (queryParams.filter) {\n params.filter = JSON.stringify(queryParams.filter);\n }\n if (queryParams.search && queryParams.search.length > 0) {\n params.search = JSON.stringify(queryParams.search);\n }\n\n // 发送 GET 请求\n const response = await client.get<RecordGetResponse>(\n `/api/table/${tableId}/record`,\n { params }\n );\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error) {\n // 处理 Zod 验证错误\n if (error instanceof z.ZodError) {\n const errorMessages = error.issues\n .map((e) => `${e.path.join(\".\")}: ${e.message}`)\n .join(\"; \");\n return {\n success: false,\n error: `数据验证失败: ${errorMessages}`,\n };\n }\n\n // 处理其他错误\n return {\n success: false,\n error: error instanceof Error ? error.message : \"获取记录失败\",\n };\n }\n },\n\n async getById(\n options: RecordGetByIdOptions\n ): Promise<TeableResponse<RecordGetByIdResponse>> {\n try {\n const validatedData = RecordGetByIdSchema.parse(options);\n const { tableId, recordId, ...queryParams } = validatedData;\n\n // 构建查询参数\n const params: Record<string, string> = {};\n\n if (queryParams.projection && queryParams.projection.length > 0) {\n params.projection = JSON.stringify(queryParams.projection);\n }\n if (queryParams.fieldKeyType) {\n params.fieldKeyType = queryParams.fieldKeyType;\n }\n if (queryParams.cellFormat) {\n params.cellFormat = queryParams.cellFormat;\n }\n\n // 发送 GET 请求获取单个记录\n const response = await client.get<RecordGetByIdResponse>(\n `/api/table/${tableId}/record/${recordId}`,\n { params }\n );\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error) {\n // 处理 Zod 验证错误\n if (error instanceof z.ZodError) {\n const errorMessages = error.issues\n .map((e) => `${e.path.join(\".\")}: ${e.message}`)\n .join(\"; \");\n return {\n success: false,\n error: `数据验证失败: ${errorMessages}`,\n };\n }\n\n // 处理其他错误\n return {\n success: false,\n error: error instanceof Error ? error.message : \"获取单个记录失败\",\n };\n }\n },\n\n async update(\n options: RecordUpdateOptions\n ): Promise<TeableResponse<RecordUpdateResponse>> {\n try {\n const validatedData = RecordUpdateSchema.parse(options);\n const { tableId, recordId, record, ...queryParams } = validatedData;\n\n // 构建请求体\n const requestBody: {\n record: { fields: Record<string, any> };\n fieldKeyType?: FieldKeyType;\n typecast?: boolean;\n order?: RecordOrder;\n } = {\n record: record,\n };\n\n // 添加可选参数\n if (queryParams.fieldKeyType) {\n requestBody.fieldKeyType = queryParams.fieldKeyType;\n }\n if (queryParams.typecast !== undefined) {\n requestBody.typecast = queryParams.typecast;\n }\n if (queryParams.order) {\n requestBody.order = queryParams.order;\n }\n\n // 发送 PATCH 请求更新记录\n const response = await client.patch<RecordUpdateResponse>(\n `/api/table/${tableId}/record/${recordId}`,\n requestBody\n );\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error) {\n // 处理 Zod 验证错误\n if (error instanceof z.ZodError) {\n const errorMessages = error.issues\n .map((e) => `${e.path.join(\".\")}: ${e.message}`)\n .join(\"; \");\n return {\n success: false,\n error: `数据验证失败: ${errorMessages}`,\n };\n }\n\n // 处理其他错误\n return {\n success: false,\n error: error instanceof Error ? error.message : \"更新记录失败\",\n };\n }\n },\n\n async delete(\n options: RecordDeleteOptions\n ): Promise<TeableResponse<RecordDeleteResponse>> {\n try {\n const validatedData = RecordDeleteSchema.parse(options);\n const { tableId, recordId } = validatedData;\n\n // 发送 DELETE 请求删除记录\n await client.delete(`/api/table/${tableId}/record/${recordId}`);\n\n return {\n success: true,\n data: { success: true },\n };\n } catch (error) {\n // 处理 Zod 验证错误\n if (error instanceof z.ZodError) {\n const errorMessages = error.issues\n .map((e) => `${e.path.join(\".\")}: ${e.message}`)\n .join(\"; \");\n return {\n success: false,\n error: `数据验证失败: ${errorMessages}`,\n };\n }\n\n // 处理其他错误\n return {\n success: false,\n error: error instanceof Error ? error.message : \"删除记录失败\",\n };\n }\n },\n\n async uploadAttachment(\n options: RecordUploadAttachmentOptions\n ): Promise<TeableResponse<RecordUploadAttachmentResponse>> {\n try {\n const validatedData = RecordUploadAttachmentSchema.parse(options);\n const { tableId, recordId, fieldId, file, fileUrl } = validatedData;\n\n // 构建 FormData\n const formData = new FormData();\n formData.append('file', file);\n if (fileUrl) {\n formData.append('fileUrl', fileUrl);\n }\n\n // 发送 POST 请求上传附件\n const response = await client.post<RecordUploadAttachmentResponse>(\n `/api/table/${tableId}/record/${recordId}/${fieldId}/uploadAttachment`,\n formData,\n {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n }\n );\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error) {\n // 处理 Zod 验证错误\n if (error instanceof z.ZodError) {\n const errorMessages = error.issues\n .map((e) => `${e.path.join(\".\")}: ${e.message}`)\n .join(\"; \");\n return {\n success: false,\n error: `数据验证失败: ${errorMessages}`,\n };\n }\n\n // 处理其他错误\n return {\n success: false,\n error: error instanceof Error ? error.message : \"上传附件失败\",\n };\n }\n },\n };\n}","import axios from \"axios\";\nimport type {\n TeableConfig,\n TableRecord,\n TeableResponse,\n FieldKeyType,\n RecordOrder,\n RecordPosition,\n CellFormat,\n SortObject,\n SearchCondition,\n} from \"./types\";\nimport type {\n RecordCreateOptions,\n RecordCreateResponse,\n RecordGetOptions,\n RecordGetResponse,\n RecordGetByIdOptions,\n RecordGetByIdResponse,\n RecordUpdateOptions,\n RecordUpdateResponse,\n RecordDeleteOptions,\n RecordDeleteResponse,\n RecordUploadAttachmentOptions,\n RecordUploadAttachmentResponse,\n} from \"./record/types\";\nimport getRecordApis from \"./record\";\n\n/**\n * 创建 Teable 客户端\n * @param config - Teable 配置\n */\nexport function createTeableClient(config: TeableConfig) {\n const client = axios.create({\n baseURL: config.baseUrl,\n headers: {\n Authorization: `Bearer ${config.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n timeout: 30000,\n });\n\n // 添加响应拦截器用于错误处理\n client.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n const status = error.response.status;\n const message = error.response.data?.message || error.message;\n\n if (status === 401) {\n throw new Error(\"API密钥无效或已过期\");\n } else if (status === 403) {\n throw new Error(\"权限不足,无法访问指定的资源\");\n } else if (status === 404) {\n throw new Error(\"请求的资源不存在\");\n } else if (status >= 500) {\n throw new Error(`服务器错误 (${status}): ${message}`);\n } else {\n throw new Error(`请求失败 (${status}): ${message}`);\n }\n } else if (error.request) {\n throw new Error(\"无法连接到Teable服务器,请检查网络连接和服务器状态\");\n } else {\n throw new Error(`请求配置错误: ${error.message}`);\n }\n }\n );\n\n return {\n record: getRecordApis(client),\n /**\n * 验证配置是否有效\n */\n validateConfig: () => !!(config.apiKey && config.baseUrl),\n };\n}\n\nexport type TeableClient = {\n record: {\n create: (options: RecordCreateOptions) => Promise<TeableResponse<RecordCreateResponse>>;\n get: (options: RecordGetOptions) => Promise<TeableResponse<RecordGetResponse>>;\n getById: (options: RecordGetByIdOptions) => Promise<TeableResponse<RecordGetByIdResponse>>;\n update: (options: RecordUpdateOptions) => Promise<TeableResponse<RecordUpdateResponse>>;\n delete: (options: RecordDeleteOptions) => Promise<TeableResponse<RecordDeleteResponse>>;\n uploadAttachment: (options: RecordUploadAttachmentOptions) => Promise<TeableResponse<RecordUploadAttachmentResponse>>;\n };\n validateConfig: () => boolean;\n};\n\n// 导出类型\nexport type {\n TeableConfig,\n TableRecord,\n RecordCreateOptions,\n RecordCreateResponse,\n RecordGetOptions,\n RecordGetResponse,\n RecordGetByIdOptions,\n RecordGetByIdResponse,\n RecordUpdateOptions,\n RecordUpdateResponse,\n RecordDeleteOptions,\n RecordDeleteResponse,\n RecordUploadAttachmentOptions,\n RecordUploadAttachmentResponse,\n TeableResponse,\n FieldKeyType,\n RecordPosition,\n RecordOrder,\n CellFormat,\n SortObject,\n SearchCondition,\n};\n\n// 导出版本信息\nexport const version = \"1.0.0\";\n\n// 默认导出\nexport default {\n createTeableClient,\n version,\n};"],"names":[],"mappings":"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"}