@turinhub/tale-js-sdk 1.3.0 → 2.1.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 +90 -13
- package/dist/acl/index.d.ts +62 -49
- package/dist/acl/index.js +262 -67
- package/dist/acl/types.d.ts +63 -98
- package/dist/app/index.d.ts +10 -0
- package/dist/app/index.js +198 -0
- package/dist/app/types.d.ts +101 -0
- package/dist/app/types.js +1 -0
- package/dist/app-token/index.d.ts +7 -0
- package/dist/app-token/index.js +58 -0
- package/dist/app-token/types.d.ts +25 -0
- package/dist/app-token/types.js +1 -0
- package/dist/attachment/index.d.ts +17 -0
- package/dist/attachment/index.js +247 -0
- package/dist/attachment/types.d.ts +82 -0
- package/dist/attachment/types.js +1 -0
- package/dist/attachment-type/index.d.ts +15 -0
- package/dist/attachment-type/index.js +203 -0
- package/dist/attachment-type/types.d.ts +60 -0
- package/dist/attachment-type/types.js +1 -0
- package/dist/auth/index.d.ts +21 -21
- package/dist/auth/index.js +66 -66
- package/dist/auth/types.d.ts +51 -51
- package/dist/cms/file.d.ts +88 -70
- package/dist/cms/file.js +228 -77
- package/dist/cms/folder.d.ts +9 -9
- package/dist/cms/folder.js +18 -18
- package/dist/cms/types.d.ts +58 -38
- package/dist/common/http.d.ts +17 -0
- package/dist/common/http.js +141 -0
- package/dist/common/types.d.ts +58 -63
- package/dist/index.d.ts +6 -1
- package/dist/index.js +4 -0
- package/dist/rbac/index.d.ts +37 -42
- package/dist/rbac/index.js +96 -98
- package/dist/rbac/types.d.ts +38 -40
- package/dist/status.d.ts +11 -11
- package/dist/status.js +30 -3
- package/dist/task/index.d.ts +15 -147
- package/dist/task/index.js +170 -161
- package/dist/task/types.d.ts +57 -81
- package/dist/task-type/index.d.ts +7 -7
- package/dist/task-type/index.js +12 -12
- package/dist/task-type/types.d.ts +18 -34
- package/dist/token.d.ts +3 -3
- package/dist/token.js +4 -4
- package/dist/user/index.d.ts +28 -29
- package/dist/user/index.js +69 -74
- package/dist/user/types.d.ts +32 -33
- package/dist/user-attribute/index.d.ts +4 -7
- package/dist/user-attribute/index.js +19 -22
- package/dist/user-attribute/types.d.ts +29 -29
- package/dist/user-group/index.d.ts +4 -223
- package/dist/user-group/index.js +61 -479
- package/dist/user-group/types.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @tale
|
|
1
|
+
# @turinhub/tale-js-sdk
|
|
2
2
|
|
|
3
3
|
官方 TypeScript SDK,用于与 Tale 后端服务集成与交互。
|
|
4
4
|
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
支持 npm、pnpm、yarn 安装:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
npm install @tale
|
|
14
|
+
npm install @turinhub/tale-js-sdk
|
|
15
15
|
# 或
|
|
16
|
-
pnpm add @tale
|
|
16
|
+
pnpm add @turinhub/tale-js-sdk
|
|
17
17
|
# 或
|
|
18
|
-
yarn add @tale
|
|
18
|
+
yarn add @turinhub/tale-js-sdk
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
## 快速开始
|
|
@@ -23,16 +23,90 @@ yarn add @tale/client
|
|
|
23
23
|
本 SDK 采用 ESM(`type: module`)。在 TypeScript 或现代 Node.js/前端环境中可直接导入:
|
|
24
24
|
|
|
25
25
|
```ts
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
import {
|
|
27
|
+
getAppToken,
|
|
28
|
+
getCurrentUser,
|
|
29
|
+
listAppsByOrg,
|
|
30
|
+
listFiles,
|
|
31
|
+
} from "@turinhub/tale-js-sdk";
|
|
32
|
+
|
|
33
|
+
const appToken = await getAppToken({
|
|
34
|
+
baseUrl: "https://api.tale.example",
|
|
35
|
+
appKey: process.env.TALE_APP_KEY,
|
|
36
|
+
appSecret: process.env.TALE_APP_SECRET,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const files = await listFiles({
|
|
40
|
+
baseUrl: "https://api.tale.example",
|
|
41
|
+
appToken,
|
|
42
|
+
folderId: "folder-id",
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
const currentUser = await getCurrentUser({
|
|
46
|
+
baseUrl: "https://api.tale.example",
|
|
47
|
+
taleToken: "tale-user-token",
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const apps = await listAppsByOrg(currentUser.app.orgId, {
|
|
51
|
+
baseUrl: "https://api.tale.example",
|
|
52
|
+
taleToken: "tale-user-token",
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 认证与 Token
|
|
57
|
+
|
|
58
|
+
SDK 中常见的鉴权选项都通过 `x-t-token` 发送到 Tale 后端:
|
|
59
|
+
|
|
60
|
+
- `appToken`:应用作用域 Token,适用于 CMS、RBAC、ACL、Task、Attachment 等应用内资源 API。
|
|
61
|
+
- `taleToken`:Tale 用户 Token,适用于平台级 App 管理 API,例如获取当前用户、应用列表、应用详情、App Secret,以及按 App Key 换发 App Token。
|
|
62
|
+
- `baseUrl`:Tale 后端服务基础 URL;未显式传入时会读取环境变量。
|
|
63
|
+
|
|
64
|
+
服务端可使用 `getAppToken()` 通过 `TALE_APP_KEY` 与 `TALE_APP_SECRET` 获取应用 Token。浏览器端的 Cookie、缓存、自动续期和多应用切换策略不由 SDK 核心管理,调用方可基于 `issueAppToken()` 自行封装。
|
|
65
|
+
|
|
66
|
+
## App 与 App Token API
|
|
28
67
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
68
|
+
AppTS 模块提供平台应用相关方法:
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import {
|
|
72
|
+
getCurrentUser,
|
|
73
|
+
listAppsByOrg,
|
|
74
|
+
createApp,
|
|
75
|
+
getAppDetail,
|
|
76
|
+
updateApp,
|
|
77
|
+
} from "@turinhub/tale-js-sdk";
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
AppTokenTS 模块提供 App Token 相关接口封装:
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
import {
|
|
84
|
+
listAppTokens,
|
|
85
|
+
getAppSecret,
|
|
86
|
+
issueAppToken,
|
|
87
|
+
} from "@turinhub/tale-js-sdk";
|
|
88
|
+
|
|
89
|
+
const page = await listAppTokens({
|
|
90
|
+
baseUrl: "https://api.tale.example",
|
|
91
|
+
appToken: "app-token",
|
|
92
|
+
page: 0,
|
|
93
|
+
size: 20,
|
|
94
|
+
isValid: true,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const secret = await getAppSecret("oa_xxx", {
|
|
98
|
+
baseUrl: "https://api.tale.example",
|
|
99
|
+
taleToken: "tale-user-token",
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const issued = await issueAppToken({
|
|
103
|
+
baseUrl: "https://api.tale.example",
|
|
104
|
+
taleToken: "tale-user-token",
|
|
105
|
+
appKey: "oa_xxx",
|
|
106
|
+
});
|
|
33
107
|
```
|
|
34
108
|
|
|
35
|
-
|
|
109
|
+
公开类型、入参和响应字段保持 camelCase。SDK 会处理 Java 后端可能返回的 `{ code, msg, data }` envelope 与直接 payload,但不再兼容历史 snake_case 响应字段。
|
|
36
110
|
|
|
37
111
|
## 开发与测试
|
|
38
112
|
|
|
@@ -40,7 +114,10 @@ import * as Tale from "@tale/client";
|
|
|
40
114
|
|
|
41
115
|
```bash
|
|
42
116
|
pnpm install # 或 npm install / yarn
|
|
43
|
-
pnpm
|
|
117
|
+
pnpm run typecheck
|
|
118
|
+
pnpm run build
|
|
119
|
+
pnpm run test:unit
|
|
120
|
+
pnpm test
|
|
44
121
|
```
|
|
45
122
|
|
|
46
123
|
## 更新日志与版本
|
|
@@ -49,7 +126,7 @@ pnpm test # 对应 package.json 中的 "test": "jest"
|
|
|
49
126
|
|
|
50
127
|
## TODO
|
|
51
128
|
|
|
52
|
-
- [
|
|
129
|
+
- [x] 修改 User Group 等分页格式,统一为 PageResponse。
|
|
53
130
|
|
|
54
131
|
## 许可证
|
|
55
132
|
|
package/dist/acl/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { AclRecord, CreateAclRecordRequest, UpdateAclRecordRequest, ListAclRecordsRequest, AclBatchCreateResponse, AclTemplate, CreateAclTemplateRequest, UpdateAclTemplateRequest, ListAclTemplatesRequest, AclOptions } from "./types.js";
|
|
1
|
+
import type { AclRecord, CreateAclRecordRequest, UpdateAclRecordRequest, ListAclRecordsRequest, AclBatchCreateResponse, AclBatchFailure, AclTemplate, CreateAclTemplateRequest, UpdateAclTemplateRequest, ListAclTemplatesRequest, AclOptions } from "./types.js";
|
|
2
2
|
import type { PageResponse } from "../common/types.js";
|
|
3
|
-
|
|
3
|
+
import type { Attachment } from "../attachment/types.js";
|
|
4
|
+
export type { AclRecord, CreateAclRecordRequest, UpdateAclRecordRequest, ListAclRecordsRequest, AclBatchCreateResponse, AclBatchFailure, AclTemplate, CreateAclTemplateRequest, UpdateAclTemplateRequest, ListAclTemplatesRequest, AclOptions, };
|
|
4
5
|
/**
|
|
5
6
|
* Gets an ACL record by ID.
|
|
6
7
|
*
|
|
@@ -13,11 +14,11 @@ export type { AclRecord, CreateAclRecordRequest, UpdateAclRecordRequest, ListAcl
|
|
|
13
14
|
*
|
|
14
15
|
* @example
|
|
15
16
|
* ```typescript
|
|
16
|
-
* import { getAclRecord } from '@tale
|
|
17
|
+
* import { getAclRecord } from '@turinhub/tale-js-sdk';
|
|
17
18
|
*
|
|
18
19
|
* try {
|
|
19
|
-
* const record = await getAclRecord('
|
|
20
|
-
* console.log('Record effect:', record.
|
|
20
|
+
* const record = await getAclRecord('recordId_here');
|
|
21
|
+
* console.log('Record effect:', record.effectType);
|
|
21
22
|
* } catch (error) {
|
|
22
23
|
* console.error('Failed to get ACL record:', error.message);
|
|
23
24
|
* }
|
|
@@ -35,13 +36,13 @@ export declare function getAclRecord(recordId: string, options?: AclOptions): Pr
|
|
|
35
36
|
*
|
|
36
37
|
* @example
|
|
37
38
|
* ```typescript
|
|
38
|
-
* import { listAclRecords } from '@tale
|
|
39
|
+
* import { listAclRecords } from '@turinhub/tale-js-sdk';
|
|
39
40
|
*
|
|
40
41
|
* try {
|
|
41
42
|
* const result = await listAclRecords({
|
|
42
43
|
* page: 0,
|
|
43
44
|
* size: 20,
|
|
44
|
-
*
|
|
45
|
+
* resourceType: 'document'
|
|
45
46
|
* });
|
|
46
47
|
* console.log(`Found ${result.total} records`);
|
|
47
48
|
* } catch (error) {
|
|
@@ -62,17 +63,17 @@ export declare function listAclRecords(options?: ListAclRecordsRequest & AclOpti
|
|
|
62
63
|
*
|
|
63
64
|
* @example
|
|
64
65
|
* ```typescript
|
|
65
|
-
* import { createAclRecord } from '@tale
|
|
66
|
+
* import { createAclRecord } from '@turinhub/tale-js-sdk';
|
|
66
67
|
*
|
|
67
68
|
* try {
|
|
68
69
|
* const record = await createAclRecord({
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
70
|
+
* subjectType: 'user',
|
|
71
|
+
* subjectId: 'user123',
|
|
72
|
+
* resourceType: 'document',
|
|
73
|
+
* resourceId: 'doc456',
|
|
74
|
+
* effectType: 'allow'
|
|
74
75
|
* });
|
|
75
|
-
* console.log('Record created:', record.
|
|
76
|
+
* console.log('Record created:', record.recordId);
|
|
76
77
|
* } catch (error) {
|
|
77
78
|
* console.error('Failed to create ACL record:', error.message);
|
|
78
79
|
* }
|
|
@@ -91,24 +92,24 @@ export declare function createAclRecord(request: CreateAclRecordRequest, options
|
|
|
91
92
|
*
|
|
92
93
|
* @example
|
|
93
94
|
* ```typescript
|
|
94
|
-
* import { batchCreateAclRecords } from '@tale
|
|
95
|
+
* import { batchCreateAclRecords } from '@turinhub/tale-js-sdk';
|
|
95
96
|
*
|
|
96
97
|
* try {
|
|
97
98
|
* const result = await batchCreateAclRecords([
|
|
98
99
|
* {
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
100
|
+
* subjectType: 'user',
|
|
101
|
+
* subjectId: 'user1',
|
|
102
|
+
* resourceType: 'document',
|
|
103
|
+
* effectType: 'allow'
|
|
103
104
|
* },
|
|
104
105
|
* {
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
106
|
+
* subjectType: 'user',
|
|
107
|
+
* subjectId: 'user2',
|
|
108
|
+
* resourceType: 'document',
|
|
109
|
+
* effectType: 'deny'
|
|
109
110
|
* }
|
|
110
111
|
* ]);
|
|
111
|
-
* console.log(`Created ${result.
|
|
112
|
+
* console.log(`Created ${result.successCount}, Failed ${result.failureCount}`);
|
|
112
113
|
* } catch (error) {
|
|
113
114
|
* console.error('Failed to batch create ACL records:', error.message);
|
|
114
115
|
* }
|
|
@@ -128,14 +129,14 @@ export declare function batchCreateAclRecords(requests: CreateAclRecordRequest[]
|
|
|
128
129
|
*
|
|
129
130
|
* @example
|
|
130
131
|
* ```typescript
|
|
131
|
-
* import { updateAclRecord } from '@tale
|
|
132
|
+
* import { updateAclRecord } from '@turinhub/tale-js-sdk';
|
|
132
133
|
*
|
|
133
134
|
* try {
|
|
134
|
-
* const record = await updateAclRecord('
|
|
135
|
-
*
|
|
135
|
+
* const record = await updateAclRecord('recordId_here', {
|
|
136
|
+
* effectType: 'deny',
|
|
136
137
|
* priority: 100
|
|
137
138
|
* });
|
|
138
|
-
* console.log('Record updated:', record.
|
|
139
|
+
* console.log('Record updated:', record.recordId);
|
|
139
140
|
* } catch (error) {
|
|
140
141
|
* console.error('Failed to update ACL record:', error.message);
|
|
141
142
|
* }
|
|
@@ -154,10 +155,10 @@ export declare function updateAclRecord(recordId: string, request: UpdateAclReco
|
|
|
154
155
|
*
|
|
155
156
|
* @example
|
|
156
157
|
* ```typescript
|
|
157
|
-
* import { deleteAclRecord } from '@tale
|
|
158
|
+
* import { deleteAclRecord } from '@turinhub/tale-js-sdk';
|
|
158
159
|
*
|
|
159
160
|
* try {
|
|
160
|
-
* await deleteAclRecord('
|
|
161
|
+
* await deleteAclRecord('recordId_here');
|
|
161
162
|
* console.log('ACL record deleted successfully');
|
|
162
163
|
* } catch (error) {
|
|
163
164
|
* console.error('Failed to delete ACL record:', error.message);
|
|
@@ -177,11 +178,11 @@ export declare function deleteAclRecord(recordId: string, options?: AclOptions):
|
|
|
177
178
|
*
|
|
178
179
|
* @example
|
|
179
180
|
* ```typescript
|
|
180
|
-
* import { getAclTemplate } from '@tale
|
|
181
|
+
* import { getAclTemplate } from '@turinhub/tale-js-sdk';
|
|
181
182
|
*
|
|
182
183
|
* try {
|
|
183
|
-
* const template = await getAclTemplate('
|
|
184
|
-
* console.log('Template name:', template.
|
|
184
|
+
* const template = await getAclTemplate('templateCode_here');
|
|
185
|
+
* console.log('Template name:', template.templateName);
|
|
185
186
|
* } catch (error) {
|
|
186
187
|
* console.error('Failed to get ACL template:', error.message);
|
|
187
188
|
* }
|
|
@@ -199,13 +200,13 @@ export declare function getAclTemplate(templateId: string, options?: AclOptions)
|
|
|
199
200
|
*
|
|
200
201
|
* @example
|
|
201
202
|
* ```typescript
|
|
202
|
-
* import { listAclTemplates } from '@tale
|
|
203
|
+
* import { listAclTemplates } from '@turinhub/tale-js-sdk';
|
|
203
204
|
*
|
|
204
205
|
* try {
|
|
205
206
|
* const result = await listAclTemplates({
|
|
206
207
|
* page: 0,
|
|
207
208
|
* size: 20,
|
|
208
|
-
*
|
|
209
|
+
* resourceType: 'document'
|
|
209
210
|
* });
|
|
210
211
|
* console.log(`Found ${result.total} templates`);
|
|
211
212
|
* } catch (error) {
|
|
@@ -226,17 +227,17 @@ export declare function listAclTemplates(options?: ListAclTemplatesRequest & Acl
|
|
|
226
227
|
*
|
|
227
228
|
* @example
|
|
228
229
|
* ```typescript
|
|
229
|
-
* import { createAclTemplate } from '@tale
|
|
230
|
+
* import { createAclTemplate } from '@turinhub/tale-js-sdk';
|
|
230
231
|
*
|
|
231
232
|
* try {
|
|
232
233
|
* const template = await createAclTemplate({
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
234
|
+
* templateName: 'Document Access',
|
|
235
|
+
* templateCode: 'doc_access',
|
|
236
|
+
* subjectType: 'user',
|
|
237
|
+
* resourceType: 'document',
|
|
238
|
+
* effectType: 'allow'
|
|
238
239
|
* });
|
|
239
|
-
* console.log('Template created:', template.
|
|
240
|
+
* console.log('Template created:', template.templateId);
|
|
240
241
|
* } catch (error) {
|
|
241
242
|
* console.error('Failed to create ACL template:', error.message);
|
|
242
243
|
* }
|
|
@@ -256,14 +257,14 @@ export declare function createAclTemplate(request: CreateAclTemplateRequest, opt
|
|
|
256
257
|
*
|
|
257
258
|
* @example
|
|
258
259
|
* ```typescript
|
|
259
|
-
* import { updateAclTemplate } from '@tale
|
|
260
|
+
* import { updateAclTemplate } from '@turinhub/tale-js-sdk';
|
|
260
261
|
*
|
|
261
262
|
* try {
|
|
262
|
-
* const template = await updateAclTemplate('
|
|
263
|
-
*
|
|
264
|
-
*
|
|
263
|
+
* const template = await updateAclTemplate('templateCode_here', {
|
|
264
|
+
* templateName: 'Updated Template Name',
|
|
265
|
+
* effectType: 'deny'
|
|
265
266
|
* });
|
|
266
|
-
* console.log('Template updated:', template.
|
|
267
|
+
* console.log('Template updated:', template.templateId);
|
|
267
268
|
* } catch (error) {
|
|
268
269
|
* console.error('Failed to update ACL template:', error.message);
|
|
269
270
|
* }
|
|
@@ -282,10 +283,10 @@ export declare function updateAclTemplate(templateId: string, request: UpdateAcl
|
|
|
282
283
|
*
|
|
283
284
|
* @example
|
|
284
285
|
* ```typescript
|
|
285
|
-
* import { deleteAclTemplate } from '@tale
|
|
286
|
+
* import { deleteAclTemplate } from '@turinhub/tale-js-sdk';
|
|
286
287
|
*
|
|
287
288
|
* try {
|
|
288
|
-
* await deleteAclTemplate('
|
|
289
|
+
* await deleteAclTemplate('templateCode_here');
|
|
289
290
|
* console.log('ACL template deleted successfully');
|
|
290
291
|
* } catch (error) {
|
|
291
292
|
* console.error('Failed to delete ACL template:', error.message);
|
|
@@ -293,3 +294,15 @@ export declare function updateAclTemplate(templateId: string, request: UpdateAcl
|
|
|
293
294
|
* ```
|
|
294
295
|
*/
|
|
295
296
|
export declare function deleteAclTemplate(templateId: string, options?: AclOptions): Promise<void>;
|
|
297
|
+
/** List attachments for an ACL record */
|
|
298
|
+
export declare function listAclRecordAttachments(recordId: string, options?: AclOptions & {
|
|
299
|
+
page?: number;
|
|
300
|
+
size?: number;
|
|
301
|
+
sort?: string;
|
|
302
|
+
}): Promise<PageResponse<Attachment>>;
|
|
303
|
+
/** Get a single attachment for an ACL record */
|
|
304
|
+
export declare function getAclRecordAttachment(recordId: string, attachmentId: string, options?: AclOptions): Promise<Attachment>;
|
|
305
|
+
/** Upload attachment for an ACL record */
|
|
306
|
+
export declare function uploadAclRecordAttachment(recordId: string, attachmentTypeId: string, file: File | Blob, remark?: string, options?: AclOptions): Promise<Attachment>;
|
|
307
|
+
/** Delete attachment from an ACL record */
|
|
308
|
+
export declare function deleteAclRecordAttachment(recordId: string, attachmentId: string, options?: AclOptions): Promise<void>;
|