@xezzon/zeroweb-sdk 0.8.5-beta.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 +91 -0
- package/dist/cjs/admin/app.js +22 -0
- package/dist/cjs/admin/authn.js +25 -0
- package/dist/cjs/admin/authz.js +41 -0
- package/dist/cjs/admin/crypto.js +9 -0
- package/dist/cjs/admin/dict.js +36 -0
- package/dist/cjs/admin/index.js +55 -0
- package/dist/cjs/admin/role.js +21 -0
- package/dist/cjs/admin/setting.js +31 -0
- package/dist/cjs/admin/user.js +9 -0
- package/dist/cjs/dev/index.js +20 -0
- package/dist/cjs/dev/locale.js +58 -0
- package/dist/cjs/file/attachment.js +69 -0
- package/dist/cjs/file/index.js +37 -0
- package/dist/cjs/file/upload.js +111 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/metadata/index.js +80 -0
- package/dist/cjs/open/index.js +35 -0
- package/dist/cjs/open/openapi.js +38 -0
- package/dist/cjs/open/subscription.js +39 -0
- package/dist/cjs/open/third_party_app.js +49 -0
- package/dist/cjs/types.js +2 -0
- package/dist/esm/admin/app.js +20 -0
- package/dist/esm/admin/authn.js +23 -0
- package/dist/esm/admin/authz.js +39 -0
- package/dist/esm/admin/crypto.js +7 -0
- package/dist/esm/admin/dict.js +34 -0
- package/dist/esm/admin/index.js +50 -0
- package/dist/esm/admin/role.js +19 -0
- package/dist/esm/admin/setting.js +29 -0
- package/dist/esm/admin/user.js +7 -0
- package/dist/esm/dev/index.js +15 -0
- package/dist/esm/dev/locale.js +56 -0
- package/dist/esm/file/attachment.js +66 -0
- package/dist/esm/file/index.js +30 -0
- package/dist/esm/file/upload.js +104 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/metadata/index.js +74 -0
- package/dist/esm/open/index.js +27 -0
- package/dist/esm/open/openapi.js +35 -0
- package/dist/esm/open/subscription.js +36 -0
- package/dist/esm/open/third_party_app.js +46 -0
- package/dist/esm/types.js +1 -0
- package/dist/typings/admin/app.d.ts +50 -0
- package/dist/typings/admin/authn.d.ts +76 -0
- package/dist/typings/admin/authz.d.ts +79 -0
- package/dist/typings/admin/crypto.d.ts +26 -0
- package/dist/typings/admin/dict.d.ts +86 -0
- package/dist/typings/admin/index.d.ts +51 -0
- package/dist/typings/admin/role.d.ts +60 -0
- package/dist/typings/admin/setting.d.ts +66 -0
- package/dist/typings/admin/user.d.ts +29 -0
- package/dist/typings/dev/index.d.ts +16 -0
- package/dist/typings/dev/locale.d.ts +142 -0
- package/dist/typings/file/attachment.d.ts +149 -0
- package/dist/typings/file/index.d.ts +28 -0
- package/dist/typings/file/upload.d.ts +15 -0
- package/dist/typings/index.d.ts +10 -0
- package/dist/typings/metadata/index.d.ts +124 -0
- package/dist/typings/open/index.d.ts +28 -0
- package/dist/typings/open/openapi.d.ts +67 -0
- package/dist/typings/open/subscription.d.ts +63 -0
- package/dist/typings/open/third_party_app.d.ts +120 -0
- package/dist/typings/types.d.ts +52 -0
- package/package.json +34 -0
package/README.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# ZeroWeb SDK
|
|
2
|
+
|
|
3
|
+
ZeroWeb SDK 是一个用于与 ZeroWeb 微服务进行交互的 TypeScript 客户端库,提供了完整的 API 封装和类型支持。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- **🔧 模块化设计**: 支持按需使用不同功能模块
|
|
8
|
+
- **📝 完整类型支持**: 基于 TypeScript 的强类型定义
|
|
9
|
+
- **🔄 拦截器支持**: 提供请求/响应拦截器功能
|
|
10
|
+
- **📦 多种模块格式**: 支持 CommonJS 和 ES Module
|
|
11
|
+
- **🛡️ 类型安全**: 完整的类型定义和接口约束
|
|
12
|
+
|
|
13
|
+
## 安装
|
|
14
|
+
|
|
15
|
+
### npm
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install @xezzon/zeroweb-sdk
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### pnpm
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pnpm add @xezzon/zeroweb-sdk
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### yarn
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
yarn add @xezzon/zeroweb-sdk
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 快速开始
|
|
34
|
+
|
|
35
|
+
### 基础配置
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import {
|
|
39
|
+
ZerowebAdminClient,
|
|
40
|
+
ZerowebMetadataClient,
|
|
41
|
+
ZerowebOpenClient,
|
|
42
|
+
ZerowebFileClient,
|
|
43
|
+
ZerowebDevClient
|
|
44
|
+
} from '@xezzon/zeroweb-sdk';
|
|
45
|
+
|
|
46
|
+
// 基础配置
|
|
47
|
+
const config = {
|
|
48
|
+
baseURL: 'https://your-api-domain.com',
|
|
49
|
+
timeout: 10000,
|
|
50
|
+
headers: {
|
|
51
|
+
'Content-Type': 'application/json'
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// 创建客户端实例
|
|
56
|
+
const adminClient = ZerowebAdminClient(config);
|
|
57
|
+
const metadataClient = ZerowebMetadataClient(config);
|
|
58
|
+
const openClient = ZerowebOpenClient(config);
|
|
59
|
+
const fileClient = ZerowebFileClient(config);
|
|
60
|
+
const devClient = ZerowebDevClient(config);
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 添加请求拦截器
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
// 添加请求拦截器
|
|
67
|
+
adminClient.interceptors.request.use((config) => {
|
|
68
|
+
// 添加认证 token
|
|
69
|
+
const token = localStorage.getItem('auth_token');
|
|
70
|
+
if (token) {
|
|
71
|
+
config.headers.Authorization = `Bearer ${token}`;
|
|
72
|
+
}
|
|
73
|
+
return config;
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// 添加响应拦截器
|
|
77
|
+
adminClient.interceptors.response.use(
|
|
78
|
+
(response) => response,
|
|
79
|
+
(error) => {
|
|
80
|
+
if (error.response?.status === 401) {
|
|
81
|
+
// 处理未授权错误
|
|
82
|
+
window.location.href = '/login';
|
|
83
|
+
}
|
|
84
|
+
return Promise.reject(error);
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 许可证
|
|
90
|
+
|
|
91
|
+
SDK 部分采用 [LGPL-2.1 license](https://www.gnu.org/licenses/lgpl-3.0.html)。
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = (client) => ({
|
|
4
|
+
addApp: (app) => client.request({
|
|
5
|
+
url: '/app',
|
|
6
|
+
method: 'POST',
|
|
7
|
+
data: app,
|
|
8
|
+
}),
|
|
9
|
+
listApp: () => client.request({
|
|
10
|
+
url: '/app',
|
|
11
|
+
method: 'GET',
|
|
12
|
+
}),
|
|
13
|
+
updateApp: (app) => client.request({
|
|
14
|
+
url: '/app',
|
|
15
|
+
method: 'PUT',
|
|
16
|
+
data: app,
|
|
17
|
+
}),
|
|
18
|
+
deleteApp: (id) => client.request({
|
|
19
|
+
url: `/app/${id}`,
|
|
20
|
+
method: 'DELETE',
|
|
21
|
+
}),
|
|
22
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = (client) => ({
|
|
4
|
+
basicLogin: (user) => client.request({
|
|
5
|
+
url: '/auth/login/basic',
|
|
6
|
+
method: 'POST',
|
|
7
|
+
auth: {
|
|
8
|
+
username: user.username,
|
|
9
|
+
password: user.password,
|
|
10
|
+
},
|
|
11
|
+
data: user,
|
|
12
|
+
}),
|
|
13
|
+
self: () => client.request({
|
|
14
|
+
url: '/auth/self',
|
|
15
|
+
method: 'GET',
|
|
16
|
+
}),
|
|
17
|
+
token: () => client.request({
|
|
18
|
+
url: '/auth/token',
|
|
19
|
+
method: 'GET',
|
|
20
|
+
}),
|
|
21
|
+
logout: () => client.request({
|
|
22
|
+
url: '/auth/logout',
|
|
23
|
+
method: 'PUT',
|
|
24
|
+
}),
|
|
25
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = (client) => ({
|
|
4
|
+
queryUserByRole: (roleId) => client.request({
|
|
5
|
+
url: `/auth/role/${roleId}/user`,
|
|
6
|
+
method: 'GET',
|
|
7
|
+
}),
|
|
8
|
+
bindUserToRole: (roleUsers) => client.request({
|
|
9
|
+
url: '/auth/role/-/user',
|
|
10
|
+
method: 'PUT',
|
|
11
|
+
data: roleUsers,
|
|
12
|
+
}),
|
|
13
|
+
releaseRoleUser: (roleUsers) => client.request({
|
|
14
|
+
url: '/auth/role/-/user',
|
|
15
|
+
method: 'DELETE',
|
|
16
|
+
data: roleUsers,
|
|
17
|
+
}),
|
|
18
|
+
queryPermissionByRole: (roleId) => client.request({
|
|
19
|
+
url: `/auth/role/${roleId}/permission`,
|
|
20
|
+
method: 'GET',
|
|
21
|
+
}),
|
|
22
|
+
bindPermissionToRole: (rolePermissions) => client.request({
|
|
23
|
+
url: '/auth/role/-/permission',
|
|
24
|
+
method: 'PUT',
|
|
25
|
+
data: rolePermissions,
|
|
26
|
+
}),
|
|
27
|
+
releaseRolePermission: (rolePermissions) => client.request({
|
|
28
|
+
url: '/auth/role/-/permission',
|
|
29
|
+
method: 'DELETE',
|
|
30
|
+
data: rolePermissions,
|
|
31
|
+
}),
|
|
32
|
+
queryRoleByUser: (userId) => client.request({
|
|
33
|
+
url: `/auth/user/${userId}/role`,
|
|
34
|
+
method: 'GET',
|
|
35
|
+
}),
|
|
36
|
+
queryRoleByPermission: (permission) => client.request({
|
|
37
|
+
url: '/auth/permission/-/role',
|
|
38
|
+
method: 'GET',
|
|
39
|
+
params: { permission },
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = ({ request }) => ({
|
|
4
|
+
passwordStrength: (password, { username }) => request({
|
|
5
|
+
url: '/password-strength',
|
|
6
|
+
method: 'GET',
|
|
7
|
+
params: { password, username, },
|
|
8
|
+
}),
|
|
9
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = (client) => ({
|
|
4
|
+
addDict: (dict) => client.request({
|
|
5
|
+
url: '/dict',
|
|
6
|
+
method: 'POST',
|
|
7
|
+
data: dict,
|
|
8
|
+
}),
|
|
9
|
+
getDictTagList: (odata) => client.request({
|
|
10
|
+
url: '/dict',
|
|
11
|
+
method: 'GET',
|
|
12
|
+
params: odata,
|
|
13
|
+
}),
|
|
14
|
+
getDictTreeByTag: (tag) => client.request({
|
|
15
|
+
url: `/dict/tag/${tag}`,
|
|
16
|
+
method: 'GET',
|
|
17
|
+
}),
|
|
18
|
+
modifyDict: (dict) => client.request({
|
|
19
|
+
url: '/dict',
|
|
20
|
+
method: 'PUT',
|
|
21
|
+
data: dict,
|
|
22
|
+
}),
|
|
23
|
+
updateDictStatus: (ids, enabled) => client.request({
|
|
24
|
+
url: '/dict/update-status',
|
|
25
|
+
method: 'PUT',
|
|
26
|
+
params: {
|
|
27
|
+
enabled,
|
|
28
|
+
},
|
|
29
|
+
data: ids,
|
|
30
|
+
}),
|
|
31
|
+
removeDict: (ids) => client.request({
|
|
32
|
+
url: '/dict',
|
|
33
|
+
method: 'DELETE',
|
|
34
|
+
data: ids,
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const axios_1 = __importDefault(require("axios"));
|
|
7
|
+
const app_1 = __importDefault(require("./app"));
|
|
8
|
+
const authn_1 = __importDefault(require("./authn"));
|
|
9
|
+
const authz_1 = __importDefault(require("./authz"));
|
|
10
|
+
const crypto_1 = __importDefault(require("./crypto"));
|
|
11
|
+
const dict_1 = __importDefault(require("./dict"));
|
|
12
|
+
const role_1 = __importDefault(require("./role"));
|
|
13
|
+
const setting_1 = __importDefault(require("./setting"));
|
|
14
|
+
const user_1 = __importDefault(require("./user"));
|
|
15
|
+
exports.default = (config) => {
|
|
16
|
+
const instance = axios_1.default.create(config);
|
|
17
|
+
return {
|
|
18
|
+
/**
|
|
19
|
+
* 拦截器方法
|
|
20
|
+
*/
|
|
21
|
+
interceptors: instance.interceptors,
|
|
22
|
+
/**
|
|
23
|
+
* 应用管理相关接口
|
|
24
|
+
*/
|
|
25
|
+
app: (0, app_1.default)(instance),
|
|
26
|
+
/**
|
|
27
|
+
* 认证相关接口
|
|
28
|
+
*/
|
|
29
|
+
authn: (0, authn_1.default)(instance),
|
|
30
|
+
/**
|
|
31
|
+
* 授权相关接口
|
|
32
|
+
*/
|
|
33
|
+
authz: (0, authz_1.default)(instance),
|
|
34
|
+
/**
|
|
35
|
+
* 加密相关接口
|
|
36
|
+
*/
|
|
37
|
+
crypto: (0, crypto_1.default)(instance),
|
|
38
|
+
/**
|
|
39
|
+
* 字典相关接口
|
|
40
|
+
*/
|
|
41
|
+
dict: (0, dict_1.default)(instance),
|
|
42
|
+
/**
|
|
43
|
+
* 角色管理接口
|
|
44
|
+
*/
|
|
45
|
+
role: (0, role_1.default)(instance),
|
|
46
|
+
/**
|
|
47
|
+
* 业务参数管理接口
|
|
48
|
+
*/
|
|
49
|
+
setting: (0, setting_1.default)(instance),
|
|
50
|
+
/**
|
|
51
|
+
* 用户相关接口
|
|
52
|
+
*/
|
|
53
|
+
user: (0, user_1.default)(instance),
|
|
54
|
+
};
|
|
55
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = (client) => ({
|
|
4
|
+
addRole: (role) => client.request({
|
|
5
|
+
url: '/role',
|
|
6
|
+
method: 'POST',
|
|
7
|
+
data: role,
|
|
8
|
+
}),
|
|
9
|
+
listAllRole: () => client.request({
|
|
10
|
+
url: '/role',
|
|
11
|
+
method: 'GET',
|
|
12
|
+
}),
|
|
13
|
+
deleteRole: (id) => client.request({
|
|
14
|
+
url: `/role/${id}`,
|
|
15
|
+
method: 'DELETE',
|
|
16
|
+
}),
|
|
17
|
+
listMyRole: () => client.request({
|
|
18
|
+
url: '/role/mine',
|
|
19
|
+
method: 'GET',
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = (client) => ({
|
|
4
|
+
addSetting: (setting) => client.request({
|
|
5
|
+
url: '/setting',
|
|
6
|
+
method: 'POST',
|
|
7
|
+
data: setting,
|
|
8
|
+
}),
|
|
9
|
+
listSetting: () => client.request({
|
|
10
|
+
url: '/setting',
|
|
11
|
+
method: 'GET',
|
|
12
|
+
}),
|
|
13
|
+
querySettingByCode: (code) => client.request({
|
|
14
|
+
url: `/setting/${code}`,
|
|
15
|
+
method: 'GET',
|
|
16
|
+
}),
|
|
17
|
+
updateSchema: (setting) => client.request({
|
|
18
|
+
url: '/setting/schema',
|
|
19
|
+
method: 'PUT',
|
|
20
|
+
data: setting,
|
|
21
|
+
}),
|
|
22
|
+
updateValue: (setting) => client.request({
|
|
23
|
+
url: '/setting/value',
|
|
24
|
+
method: 'PUT',
|
|
25
|
+
data: setting,
|
|
26
|
+
}),
|
|
27
|
+
deleteSetting: (id) => client.request({
|
|
28
|
+
url: `/setting/${id}`,
|
|
29
|
+
method: 'DELETE',
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const axios_1 = __importDefault(require("axios"));
|
|
7
|
+
const locale_1 = __importDefault(require("./locale"));
|
|
8
|
+
exports.default = (config) => {
|
|
9
|
+
const instance = axios_1.default.create(config);
|
|
10
|
+
return {
|
|
11
|
+
/**
|
|
12
|
+
* 拦截器方法
|
|
13
|
+
*/
|
|
14
|
+
interceptors: instance.interceptors,
|
|
15
|
+
/**
|
|
16
|
+
* 国际化相关接口
|
|
17
|
+
*/
|
|
18
|
+
locale: (0, locale_1.default)(instance),
|
|
19
|
+
};
|
|
20
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = (client) => ({
|
|
4
|
+
addLanguage: (language) => client.request({
|
|
5
|
+
url: '/language',
|
|
6
|
+
method: 'POST',
|
|
7
|
+
data: language,
|
|
8
|
+
}),
|
|
9
|
+
queryLanguageList: () => client.request({
|
|
10
|
+
url: '/language',
|
|
11
|
+
method: 'GET',
|
|
12
|
+
}),
|
|
13
|
+
updateLanguage: (language) => client.request({
|
|
14
|
+
url: '/language',
|
|
15
|
+
method: 'PUT',
|
|
16
|
+
data: language,
|
|
17
|
+
}),
|
|
18
|
+
deleteLanguage: (id) => client.request({
|
|
19
|
+
url: `/language/${id}`,
|
|
20
|
+
method: 'DELETE',
|
|
21
|
+
}),
|
|
22
|
+
addI18nMessage: (i18nMessage) => client.request({
|
|
23
|
+
url: '/i18n',
|
|
24
|
+
method: 'POST',
|
|
25
|
+
data: i18nMessage,
|
|
26
|
+
}),
|
|
27
|
+
listI18nNamespace: () => client.request({
|
|
28
|
+
url: '/i18n',
|
|
29
|
+
method: 'GET',
|
|
30
|
+
}),
|
|
31
|
+
queryI18nMessageList: (namespace, odata) => client.request({
|
|
32
|
+
url: `/i18n/${namespace}`,
|
|
33
|
+
method: 'GET',
|
|
34
|
+
params: odata,
|
|
35
|
+
}),
|
|
36
|
+
updateI18nMessage: (i18nMessage) => client.request({
|
|
37
|
+
url: '/i18n',
|
|
38
|
+
method: 'PUT',
|
|
39
|
+
data: i18nMessage,
|
|
40
|
+
}),
|
|
41
|
+
deleteI18nMessage: (id) => client.request({
|
|
42
|
+
url: `/i18n/${id}`,
|
|
43
|
+
method: 'DELETE',
|
|
44
|
+
}),
|
|
45
|
+
queryTranslation: (namespace, messageKey) => client.request({
|
|
46
|
+
url: `/i18n/${namespace}/${messageKey}`,
|
|
47
|
+
method: 'GET',
|
|
48
|
+
}),
|
|
49
|
+
upsertTranslation: (translation) => client.request({
|
|
50
|
+
url: '/locale',
|
|
51
|
+
method: 'PUT',
|
|
52
|
+
data: translation,
|
|
53
|
+
}),
|
|
54
|
+
loadTranslation: (language, namespace) => client.request({
|
|
55
|
+
url: `/locale/${language}/${namespace}`,
|
|
56
|
+
method: 'GET',
|
|
57
|
+
})
|
|
58
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AttachmentStatus = void 0;
|
|
13
|
+
const upload_1 = require("./upload");
|
|
14
|
+
var AttachmentStatus;
|
|
15
|
+
(function (AttachmentStatus) {
|
|
16
|
+
AttachmentStatus["UPLOADING"] = "UPLOADING";
|
|
17
|
+
AttachmentStatus["DONE"] = "DONE";
|
|
18
|
+
})(AttachmentStatus || (exports.AttachmentStatus = AttachmentStatus = {}));
|
|
19
|
+
exports.default = (client) => ({
|
|
20
|
+
addAttachment: (file, bizType, bizId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
yield (0, upload_1.checksum)(file);
|
|
22
|
+
const req = {
|
|
23
|
+
name: file.name,
|
|
24
|
+
checksum: file.checksum,
|
|
25
|
+
size: file.size,
|
|
26
|
+
type: file.type,
|
|
27
|
+
bizType,
|
|
28
|
+
bizId,
|
|
29
|
+
};
|
|
30
|
+
return client.request({
|
|
31
|
+
url: '/attachment',
|
|
32
|
+
method: 'POST',
|
|
33
|
+
data: req,
|
|
34
|
+
params: { crc: file.crc },
|
|
35
|
+
});
|
|
36
|
+
}),
|
|
37
|
+
getUploadInfo: (id, checksum, fileSize) => client.request({
|
|
38
|
+
url: `/attachment/${id}/resume`,
|
|
39
|
+
method: 'GET',
|
|
40
|
+
params: { checksum, fileSize },
|
|
41
|
+
}),
|
|
42
|
+
getUploadEndpoint: (id) => client.request({
|
|
43
|
+
url: `/attachment/${id}/endpoint/upload`,
|
|
44
|
+
method: 'GET',
|
|
45
|
+
params: { partNumber: 0 },
|
|
46
|
+
}),
|
|
47
|
+
getMultipartUploadEndpoint: (id, partNumber, crc) => client.request({
|
|
48
|
+
url: `/attachment/${id}/endpoint/upload`,
|
|
49
|
+
method: 'GET',
|
|
50
|
+
params: { partNumber, crc },
|
|
51
|
+
}),
|
|
52
|
+
finishUpload: (id) => client.request({
|
|
53
|
+
url: `/attachment/${id}/status/done`,
|
|
54
|
+
method: 'PUT',
|
|
55
|
+
}),
|
|
56
|
+
queryAttachmentByBiz: (bizType, bizId) => client.request({
|
|
57
|
+
url: `/attachment/list`,
|
|
58
|
+
method: 'GET',
|
|
59
|
+
params: { bizType, bizId, },
|
|
60
|
+
}),
|
|
61
|
+
getDownloadEndpoint: (id) => client.request({
|
|
62
|
+
url: `/attachment/${id}/endpoint/download`,
|
|
63
|
+
method: 'GET',
|
|
64
|
+
}),
|
|
65
|
+
deleteAttachment: (id) => client.request({
|
|
66
|
+
url: `/attachment/${id}`,
|
|
67
|
+
method: 'DELETE',
|
|
68
|
+
}),
|
|
69
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AttachmentStatus = exports.FileProvider = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const attachment_1 = __importDefault(require("./attachment"));
|
|
9
|
+
const upload_1 = require("./upload");
|
|
10
|
+
exports.default = (config) => {
|
|
11
|
+
const instance = axios_1.default.create(config);
|
|
12
|
+
const attachmentApi = (0, attachment_1.default)(instance);
|
|
13
|
+
return {
|
|
14
|
+
/**
|
|
15
|
+
* 拦截器方法
|
|
16
|
+
*/
|
|
17
|
+
interceptors: instance.interceptors,
|
|
18
|
+
/**
|
|
19
|
+
* 附件管理接口
|
|
20
|
+
*/
|
|
21
|
+
attachment: attachmentApi,
|
|
22
|
+
/**
|
|
23
|
+
* 文件上传
|
|
24
|
+
* @param file 文件
|
|
25
|
+
* @param bizType 业务类型
|
|
26
|
+
* @param bizId 业务编码
|
|
27
|
+
*/
|
|
28
|
+
upload: (0, upload_1.upload)(instance, attachmentApi),
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
var FileProvider;
|
|
32
|
+
(function (FileProvider) {
|
|
33
|
+
FileProvider["FS"] = "FS";
|
|
34
|
+
FileProvider["S3"] = "S3";
|
|
35
|
+
})(FileProvider || (exports.FileProvider = FileProvider = {}));
|
|
36
|
+
var attachment_2 = require("./attachment");
|
|
37
|
+
Object.defineProperty(exports, "AttachmentStatus", { enumerable: true, get: function () { return attachment_2.AttachmentStatus; } });
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.checksum = checksum;
|
|
16
|
+
exports.upload = upload;
|
|
17
|
+
const crypto_js_1 = __importDefault(require("crypto-js"));
|
|
18
|
+
const js_crc_1 = require("js-crc");
|
|
19
|
+
/**
|
|
20
|
+
* 计算文件的校验和
|
|
21
|
+
* @param file 文件
|
|
22
|
+
* @returns 文件的SHA256值
|
|
23
|
+
*/
|
|
24
|
+
function checksum(file) {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
if (file.checksum && file.crc) {
|
|
27
|
+
return file;
|
|
28
|
+
}
|
|
29
|
+
return file.arrayBuffer()
|
|
30
|
+
.then(arrayBuffer => Promise.all([
|
|
31
|
+
Promise.resolve()
|
|
32
|
+
.then(() => crypto_js_1.default
|
|
33
|
+
.SHA256(crypto_js_1.default.lib.WordArray.create(arrayBuffer))
|
|
34
|
+
.toString(crypto_js_1.default.enc.Base64))
|
|
35
|
+
.then(checksum => {
|
|
36
|
+
file.checksum = checksum;
|
|
37
|
+
}),
|
|
38
|
+
Promise.resolve()
|
|
39
|
+
.then(() => crypto_js_1.default.enc.Base64.stringify(crypto_js_1.default.enc.Hex.parse(js_crc_1.crc32.hex(arrayBuffer))))
|
|
40
|
+
.then(crc => {
|
|
41
|
+
file.crc = crc;
|
|
42
|
+
}),
|
|
43
|
+
]))
|
|
44
|
+
.then(() => file);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function upload(client, attachmentApi) {
|
|
48
|
+
return (file, uploadInfo) => __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
return file.arrayBuffer()
|
|
50
|
+
.then(arrayBuffer => {
|
|
51
|
+
const partCount = uploadInfo.partCount;
|
|
52
|
+
const partSize = uploadInfo.partSize;
|
|
53
|
+
const parts = [];
|
|
54
|
+
for (let index = 0; index < partCount - 1; index++) {
|
|
55
|
+
const content = arrayBuffer.slice(index * partSize, (index + 1) * partSize);
|
|
56
|
+
const crc = crypto_js_1.default.enc.Base64.stringify(crypto_js_1.default.enc.Hex.parse(js_crc_1.crc32.hex(content)));
|
|
57
|
+
parts.push({ content, crc });
|
|
58
|
+
}
|
|
59
|
+
const content = arrayBuffer.slice((partCount - 1) * partSize, file.size);
|
|
60
|
+
const crc = crypto_js_1.default.enc.Base64.stringify(crypto_js_1.default.enc.Hex.parse(js_crc_1.crc32.hex(content)));
|
|
61
|
+
parts.push({ content, crc });
|
|
62
|
+
return parts;
|
|
63
|
+
})
|
|
64
|
+
.then(parts => Promise.all(parts
|
|
65
|
+
.map((part, index) => __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
return Promise.resolve()
|
|
67
|
+
.then(() => {
|
|
68
|
+
if (uploadInfo.partCount > 1) {
|
|
69
|
+
return attachmentApi.getMultipartUploadEndpoint(uploadInfo.id, index + 1, part.crc);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return attachmentApi.getUploadEndpoint(uploadInfo.id);
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
.then(response => response.data)
|
|
76
|
+
.then((_a) => __awaiter(this, [_a], void 0, function* ({ endpoint }) {
|
|
77
|
+
if (!endpoint) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const partChecksum = crypto_js_1.default
|
|
81
|
+
.SHA256(crypto_js_1.default.lib.WordArray.create(part.content))
|
|
82
|
+
.toString(crypto_js_1.default.enc.Base64);
|
|
83
|
+
let headers;
|
|
84
|
+
if (uploadInfo.partCount > 1) {
|
|
85
|
+
// 分片上传的请求头
|
|
86
|
+
headers = {
|
|
87
|
+
'x-amz-sdk-checksum-algorithm': 'CRC32',
|
|
88
|
+
'x-amz-checksum-crc32': part.crc,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
headers = {
|
|
93
|
+
'x-amz-sdk-checksum-algorithm': 'SHA256',
|
|
94
|
+
'x-amz-checksum-sha256': partChecksum,
|
|
95
|
+
'x-amz-meta-id': uploadInfo.id,
|
|
96
|
+
'x-amz-meta-filename': file.name,
|
|
97
|
+
'Content-Type': file.type,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return client
|
|
101
|
+
.request({
|
|
102
|
+
url: endpoint,
|
|
103
|
+
method: 'PUT',
|
|
104
|
+
data: part.content,
|
|
105
|
+
headers: headers,
|
|
106
|
+
});
|
|
107
|
+
}));
|
|
108
|
+
}))))
|
|
109
|
+
.then(() => attachmentApi.finishUpload(uploadInfo.id));
|
|
110
|
+
});
|
|
111
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ZerowebDevClient = exports.AttachmentStatus = exports.FileProvider = exports.ZerowebFileClient = exports.SubscriptionStatus = exports.OpenapiStatus = exports.ZerowebOpenClient = exports.ZerowebAdminClient = exports.ServiceType = exports.MenuType = exports.ZerowebMetadataClient = void 0;
|
|
7
|
+
var metadata_1 = require("./metadata");
|
|
8
|
+
Object.defineProperty(exports, "ZerowebMetadataClient", { enumerable: true, get: function () { return __importDefault(metadata_1).default; } });
|
|
9
|
+
Object.defineProperty(exports, "MenuType", { enumerable: true, get: function () { return metadata_1.MenuType; } });
|
|
10
|
+
Object.defineProperty(exports, "ServiceType", { enumerable: true, get: function () { return metadata_1.ServiceType; } });
|
|
11
|
+
var admin_1 = require("./admin");
|
|
12
|
+
Object.defineProperty(exports, "ZerowebAdminClient", { enumerable: true, get: function () { return __importDefault(admin_1).default; } });
|
|
13
|
+
var open_1 = require("./open");
|
|
14
|
+
Object.defineProperty(exports, "ZerowebOpenClient", { enumerable: true, get: function () { return __importDefault(open_1).default; } });
|
|
15
|
+
Object.defineProperty(exports, "OpenapiStatus", { enumerable: true, get: function () { return open_1.OpenapiStatus; } });
|
|
16
|
+
Object.defineProperty(exports, "SubscriptionStatus", { enumerable: true, get: function () { return open_1.SubscriptionStatus; } });
|
|
17
|
+
var file_1 = require("./file");
|
|
18
|
+
Object.defineProperty(exports, "ZerowebFileClient", { enumerable: true, get: function () { return __importDefault(file_1).default; } });
|
|
19
|
+
Object.defineProperty(exports, "FileProvider", { enumerable: true, get: function () { return file_1.FileProvider; } });
|
|
20
|
+
Object.defineProperty(exports, "AttachmentStatus", { enumerable: true, get: function () { return file_1.AttachmentStatus; } });
|
|
21
|
+
var dev_1 = require("./dev");
|
|
22
|
+
Object.defineProperty(exports, "ZerowebDevClient", { enumerable: true, get: function () { return __importDefault(dev_1).default; } });
|