@be-link/ecommerce-client-backend-service-node-sdk 0.0.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 ADDED
@@ -0,0 +1,39 @@
1
+ # EcommerceClientBackendService SDK
2
+
3
+ EcommerceClientBackendService Node.js SDK - 敏感信息管理服务客户端
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install @be-link/ecommerce-client-backend-service-node-sdk
9
+ ```
10
+
11
+ ## 使用
12
+
13
+ ```typescript
14
+ import { demoService } from '@be-link/ecommerce-client-backend-service-node-sdk'
15
+
16
+ const result = await demoService.demoFunc({ /* 请求参数 */ })
17
+ ```
18
+
19
+ ## 开发
20
+
21
+ ```bash
22
+ # 构建
23
+ npm run build
24
+
25
+ # 生成 Swagger 文档
26
+ npm run swagger
27
+
28
+ # 构建并生成文档
29
+ npm run build:swagger
30
+ ```
31
+
32
+ ## Swagger 文档
33
+
34
+ 查看 [SWAGGER.md](./SWAGGER.md) 了解如何生成和使用 API 文档。
35
+
36
+ ## License
37
+
38
+ ISC
39
+
package/enum.d.ts ADDED
@@ -0,0 +1,175 @@
1
+ export declare namespace ENUM {
2
+ /**
3
+ * Room 表枚举
4
+ */
5
+ namespace ROOM {
6
+ /**
7
+ * 直播间状态
8
+ * 1:直播中;2:预告;3:回放;4:已结束
9
+ */
10
+ enum STATUS {
11
+ /** 直播中 */
12
+ LIVE = 1,
13
+ /** 预告 */
14
+ PREVIEW = 2,
15
+ /** 回放 */
16
+ REPLAY = 3,
17
+ /** 已结束 */
18
+ ENDED = 4
19
+ }
20
+ /**
21
+ * 是否锁定预告
22
+ * 0:否、1:是
23
+ */
24
+ enum IS_LOCK_PREVIEW {
25
+ /** 否 */
26
+ NO = 0,
27
+ /** 是 */
28
+ YES = 1
29
+ }
30
+ /**
31
+ * 复制直播间时,是否同时复制直播流
32
+ * 1:是;0:否
33
+ */
34
+ enum COPY_STREAM {
35
+ /** 否 */
36
+ NO = 0,
37
+ /** 是 */
38
+ YES = 1
39
+ }
40
+ /**
41
+ * 是否开启自动关播功能
42
+ * 0:关闭;1:开启
43
+ */
44
+ enum IS_AUTO_END_ENABLE {
45
+ /** 关闭 */
46
+ DISABLED = 0,
47
+ /** 开启 */
48
+ ENABLED = 1
49
+ }
50
+ /**
51
+ * 直播模式
52
+ * 0:视频直播;1:录播直播
53
+ */
54
+ enum ACTIVITY_TYPE {
55
+ /** 视频直播 */
56
+ VIDEO_LIVE = 0,
57
+ /** 录播直播 */
58
+ RECORDED_LIVE = 1
59
+ }
60
+ /**
61
+ * 直播延时类型
62
+ * 0:继承直播模板配置的直播延时类型;1:超低延时(延时小于 1 秒);2:普通延时(延时 5-10 秒)
63
+ */
64
+ enum LIVE_MODE {
65
+ /** 继承直播模板配置的直播延时类型 */
66
+ INHERIT = 0,
67
+ /** 超低延时(延时小于 1 秒) */
68
+ ULTRA_LOW_LATENCY = 1,
69
+ /** 普通延时(延时 5-10 秒) */
70
+ NORMAL_LATENCY = 2
71
+ }
72
+ /**
73
+ * 是否开启答题重现功能
74
+ * 0:不开启、1:开启
75
+ */
76
+ enum IS_ANSWER_REPETITION_ENABLE {
77
+ /** 不开启 */
78
+ DISABLED = 0,
79
+ /** 开启 */
80
+ ENABLED = 1
81
+ }
82
+ /**
83
+ * 视频布局
84
+ * 1:三分屏;2:纯视频
85
+ */
86
+ enum LIVE_LAYOUT {
87
+ /** 三分屏 */
88
+ THREE_SCREEN = 1,
89
+ /** 纯视频 */
90
+ PURE_VIDEO = 2
91
+ }
92
+ /**
93
+ * 是否开启自动开播功能
94
+ * 0:关闭、1:开启
95
+ */
96
+ enum IS_AUTO_START_ENABLE {
97
+ /** 关闭 */
98
+ DISABLED = 0,
99
+ /** 开启 */
100
+ ENABLED = 1
101
+ }
102
+ /**
103
+ * 是否开启回放自动上架
104
+ * 0:关闭、1:开启
105
+ */
106
+ enum IS_REPLAY_AUTO_ONLINE_ENABLE {
107
+ /** 关闭 */
108
+ DISABLED = 0,
109
+ /** 开启 */
110
+ ENABLED = 1
111
+ }
112
+ /**
113
+ * 审核状态
114
+ * 1:审核中、2:审核通过、3:审核驳回、4:审核归档、5:草稿、6:无需审核
115
+ */
116
+ enum LIVE_REVIEW_STATUS {
117
+ /** 审核中 */
118
+ REVIEWING = 1,
119
+ /** 审核通过 */
120
+ APPROVED = 2,
121
+ /** 审核驳回 */
122
+ REJECTED = 3,
123
+ /** 审核归档 */
124
+ ARCHIVED = 4,
125
+ /** 草稿 */
126
+ DRAFT = 5,
127
+ /** 无需审核 */
128
+ NO_REVIEW = 6
129
+ }
130
+ /**
131
+ * 直播关闭30分钟后数据结算状态
132
+ * 0-未结算、1-已结算
133
+ */
134
+ enum SETTLE_STATUS {
135
+ /** 未结算 */
136
+ UNSETTLED = 0,
137
+ /** 已结算 */
138
+ SETTLED = 1
139
+ }
140
+ }
141
+ /**
142
+ * RoomAutoStartConfig 表枚举
143
+ */
144
+ namespace ROOM_AUTO_START_CONFIG {
145
+ /**
146
+ * 开启自动开播后,重复开播的频率
147
+ * 0:不重复、1:每天、2:自定义
148
+ */
149
+ enum REPEAT_TYPE {
150
+ /** 不重复 */
151
+ NO_REPEAT = 0,
152
+ /** 每天 */
153
+ DAILY = 1,
154
+ /** 自定义 */
155
+ CUSTOM = 2
156
+ }
157
+ }
158
+ /**
159
+ * RoomTag 表枚举
160
+ */
161
+ namespace ROOM_TAG {
162
+ /**
163
+ * 类型
164
+ * 0-未知、1-标签分类、2-文本标签
165
+ */
166
+ enum TYPE {
167
+ /** 未知 */
168
+ UNKNOWN = 0,
169
+ /** 标签分类 */
170
+ CATEGORY = 1,
171
+ /** 文本标签 */
172
+ TEXT = 2
173
+ }
174
+ }
175
+ }
package/enum.js ADDED
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ENUM = void 0;
4
+ var ENUM;
5
+ (function (ENUM) {
6
+ /**
7
+ * Room 表枚举
8
+ */
9
+ let ROOM;
10
+ (function (ROOM) {
11
+ /**
12
+ * 直播间状态
13
+ * 1:直播中;2:预告;3:回放;4:已结束
14
+ */
15
+ let STATUS;
16
+ (function (STATUS) {
17
+ /** 直播中 */
18
+ STATUS[STATUS["LIVE"] = 1] = "LIVE";
19
+ /** 预告 */
20
+ STATUS[STATUS["PREVIEW"] = 2] = "PREVIEW";
21
+ /** 回放 */
22
+ STATUS[STATUS["REPLAY"] = 3] = "REPLAY";
23
+ /** 已结束 */
24
+ STATUS[STATUS["ENDED"] = 4] = "ENDED";
25
+ })(STATUS = ROOM.STATUS || (ROOM.STATUS = {}));
26
+ /**
27
+ * 是否锁定预告
28
+ * 0:否、1:是
29
+ */
30
+ let IS_LOCK_PREVIEW;
31
+ (function (IS_LOCK_PREVIEW) {
32
+ /** 否 */
33
+ IS_LOCK_PREVIEW[IS_LOCK_PREVIEW["NO"] = 0] = "NO";
34
+ /** 是 */
35
+ IS_LOCK_PREVIEW[IS_LOCK_PREVIEW["YES"] = 1] = "YES";
36
+ })(IS_LOCK_PREVIEW = ROOM.IS_LOCK_PREVIEW || (ROOM.IS_LOCK_PREVIEW = {}));
37
+ /**
38
+ * 复制直播间时,是否同时复制直播流
39
+ * 1:是;0:否
40
+ */
41
+ let COPY_STREAM;
42
+ (function (COPY_STREAM) {
43
+ /** 否 */
44
+ COPY_STREAM[COPY_STREAM["NO"] = 0] = "NO";
45
+ /** 是 */
46
+ COPY_STREAM[COPY_STREAM["YES"] = 1] = "YES";
47
+ })(COPY_STREAM = ROOM.COPY_STREAM || (ROOM.COPY_STREAM = {}));
48
+ /**
49
+ * 是否开启自动关播功能
50
+ * 0:关闭;1:开启
51
+ */
52
+ let IS_AUTO_END_ENABLE;
53
+ (function (IS_AUTO_END_ENABLE) {
54
+ /** 关闭 */
55
+ IS_AUTO_END_ENABLE[IS_AUTO_END_ENABLE["DISABLED"] = 0] = "DISABLED";
56
+ /** 开启 */
57
+ IS_AUTO_END_ENABLE[IS_AUTO_END_ENABLE["ENABLED"] = 1] = "ENABLED";
58
+ })(IS_AUTO_END_ENABLE = ROOM.IS_AUTO_END_ENABLE || (ROOM.IS_AUTO_END_ENABLE = {}));
59
+ /**
60
+ * 直播模式
61
+ * 0:视频直播;1:录播直播
62
+ */
63
+ let ACTIVITY_TYPE;
64
+ (function (ACTIVITY_TYPE) {
65
+ /** 视频直播 */
66
+ ACTIVITY_TYPE[ACTIVITY_TYPE["VIDEO_LIVE"] = 0] = "VIDEO_LIVE";
67
+ /** 录播直播 */
68
+ ACTIVITY_TYPE[ACTIVITY_TYPE["RECORDED_LIVE"] = 1] = "RECORDED_LIVE";
69
+ })(ACTIVITY_TYPE = ROOM.ACTIVITY_TYPE || (ROOM.ACTIVITY_TYPE = {}));
70
+ /**
71
+ * 直播延时类型
72
+ * 0:继承直播模板配置的直播延时类型;1:超低延时(延时小于 1 秒);2:普通延时(延时 5-10 秒)
73
+ */
74
+ let LIVE_MODE;
75
+ (function (LIVE_MODE) {
76
+ /** 继承直播模板配置的直播延时类型 */
77
+ LIVE_MODE[LIVE_MODE["INHERIT"] = 0] = "INHERIT";
78
+ /** 超低延时(延时小于 1 秒) */
79
+ LIVE_MODE[LIVE_MODE["ULTRA_LOW_LATENCY"] = 1] = "ULTRA_LOW_LATENCY";
80
+ /** 普通延时(延时 5-10 秒) */
81
+ LIVE_MODE[LIVE_MODE["NORMAL_LATENCY"] = 2] = "NORMAL_LATENCY";
82
+ })(LIVE_MODE = ROOM.LIVE_MODE || (ROOM.LIVE_MODE = {}));
83
+ /**
84
+ * 是否开启答题重现功能
85
+ * 0:不开启、1:开启
86
+ */
87
+ let IS_ANSWER_REPETITION_ENABLE;
88
+ (function (IS_ANSWER_REPETITION_ENABLE) {
89
+ /** 不开启 */
90
+ IS_ANSWER_REPETITION_ENABLE[IS_ANSWER_REPETITION_ENABLE["DISABLED"] = 0] = "DISABLED";
91
+ /** 开启 */
92
+ IS_ANSWER_REPETITION_ENABLE[IS_ANSWER_REPETITION_ENABLE["ENABLED"] = 1] = "ENABLED";
93
+ })(IS_ANSWER_REPETITION_ENABLE = ROOM.IS_ANSWER_REPETITION_ENABLE || (ROOM.IS_ANSWER_REPETITION_ENABLE = {}));
94
+ /**
95
+ * 视频布局
96
+ * 1:三分屏;2:纯视频
97
+ */
98
+ let LIVE_LAYOUT;
99
+ (function (LIVE_LAYOUT) {
100
+ /** 三分屏 */
101
+ LIVE_LAYOUT[LIVE_LAYOUT["THREE_SCREEN"] = 1] = "THREE_SCREEN";
102
+ /** 纯视频 */
103
+ LIVE_LAYOUT[LIVE_LAYOUT["PURE_VIDEO"] = 2] = "PURE_VIDEO";
104
+ })(LIVE_LAYOUT = ROOM.LIVE_LAYOUT || (ROOM.LIVE_LAYOUT = {}));
105
+ /**
106
+ * 是否开启自动开播功能
107
+ * 0:关闭、1:开启
108
+ */
109
+ let IS_AUTO_START_ENABLE;
110
+ (function (IS_AUTO_START_ENABLE) {
111
+ /** 关闭 */
112
+ IS_AUTO_START_ENABLE[IS_AUTO_START_ENABLE["DISABLED"] = 0] = "DISABLED";
113
+ /** 开启 */
114
+ IS_AUTO_START_ENABLE[IS_AUTO_START_ENABLE["ENABLED"] = 1] = "ENABLED";
115
+ })(IS_AUTO_START_ENABLE = ROOM.IS_AUTO_START_ENABLE || (ROOM.IS_AUTO_START_ENABLE = {}));
116
+ /**
117
+ * 是否开启回放自动上架
118
+ * 0:关闭、1:开启
119
+ */
120
+ let IS_REPLAY_AUTO_ONLINE_ENABLE;
121
+ (function (IS_REPLAY_AUTO_ONLINE_ENABLE) {
122
+ /** 关闭 */
123
+ IS_REPLAY_AUTO_ONLINE_ENABLE[IS_REPLAY_AUTO_ONLINE_ENABLE["DISABLED"] = 0] = "DISABLED";
124
+ /** 开启 */
125
+ IS_REPLAY_AUTO_ONLINE_ENABLE[IS_REPLAY_AUTO_ONLINE_ENABLE["ENABLED"] = 1] = "ENABLED";
126
+ })(IS_REPLAY_AUTO_ONLINE_ENABLE = ROOM.IS_REPLAY_AUTO_ONLINE_ENABLE || (ROOM.IS_REPLAY_AUTO_ONLINE_ENABLE = {}));
127
+ /**
128
+ * 审核状态
129
+ * 1:审核中、2:审核通过、3:审核驳回、4:审核归档、5:草稿、6:无需审核
130
+ */
131
+ let LIVE_REVIEW_STATUS;
132
+ (function (LIVE_REVIEW_STATUS) {
133
+ /** 审核中 */
134
+ LIVE_REVIEW_STATUS[LIVE_REVIEW_STATUS["REVIEWING"] = 1] = "REVIEWING";
135
+ /** 审核通过 */
136
+ LIVE_REVIEW_STATUS[LIVE_REVIEW_STATUS["APPROVED"] = 2] = "APPROVED";
137
+ /** 审核驳回 */
138
+ LIVE_REVIEW_STATUS[LIVE_REVIEW_STATUS["REJECTED"] = 3] = "REJECTED";
139
+ /** 审核归档 */
140
+ LIVE_REVIEW_STATUS[LIVE_REVIEW_STATUS["ARCHIVED"] = 4] = "ARCHIVED";
141
+ /** 草稿 */
142
+ LIVE_REVIEW_STATUS[LIVE_REVIEW_STATUS["DRAFT"] = 5] = "DRAFT";
143
+ /** 无需审核 */
144
+ LIVE_REVIEW_STATUS[LIVE_REVIEW_STATUS["NO_REVIEW"] = 6] = "NO_REVIEW";
145
+ })(LIVE_REVIEW_STATUS = ROOM.LIVE_REVIEW_STATUS || (ROOM.LIVE_REVIEW_STATUS = {}));
146
+ /**
147
+ * 直播关闭30分钟后数据结算状态
148
+ * 0-未结算、1-已结算
149
+ */
150
+ let SETTLE_STATUS;
151
+ (function (SETTLE_STATUS) {
152
+ /** 未结算 */
153
+ SETTLE_STATUS[SETTLE_STATUS["UNSETTLED"] = 0] = "UNSETTLED";
154
+ /** 已结算 */
155
+ SETTLE_STATUS[SETTLE_STATUS["SETTLED"] = 1] = "SETTLED";
156
+ })(SETTLE_STATUS = ROOM.SETTLE_STATUS || (ROOM.SETTLE_STATUS = {}));
157
+ })(ROOM = ENUM.ROOM || (ENUM.ROOM = {}));
158
+ /**
159
+ * RoomAutoStartConfig 表枚举
160
+ */
161
+ let ROOM_AUTO_START_CONFIG;
162
+ (function (ROOM_AUTO_START_CONFIG) {
163
+ /**
164
+ * 开启自动开播后,重复开播的频率
165
+ * 0:不重复、1:每天、2:自定义
166
+ */
167
+ let REPEAT_TYPE;
168
+ (function (REPEAT_TYPE) {
169
+ /** 不重复 */
170
+ REPEAT_TYPE[REPEAT_TYPE["NO_REPEAT"] = 0] = "NO_REPEAT";
171
+ /** 每天 */
172
+ REPEAT_TYPE[REPEAT_TYPE["DAILY"] = 1] = "DAILY";
173
+ /** 自定义 */
174
+ REPEAT_TYPE[REPEAT_TYPE["CUSTOM"] = 2] = "CUSTOM";
175
+ })(REPEAT_TYPE = ROOM_AUTO_START_CONFIG.REPEAT_TYPE || (ROOM_AUTO_START_CONFIG.REPEAT_TYPE = {}));
176
+ })(ROOM_AUTO_START_CONFIG = ENUM.ROOM_AUTO_START_CONFIG || (ENUM.ROOM_AUTO_START_CONFIG = {}));
177
+ /**
178
+ * RoomTag 表枚举
179
+ */
180
+ let ROOM_TAG;
181
+ (function (ROOM_TAG) {
182
+ /**
183
+ * 类型
184
+ * 0-未知、1-标签分类、2-文本标签
185
+ */
186
+ let TYPE;
187
+ (function (TYPE) {
188
+ /** 未知 */
189
+ TYPE[TYPE["UNKNOWN"] = 0] = "UNKNOWN";
190
+ /** 标签分类 */
191
+ TYPE[TYPE["CATEGORY"] = 1] = "CATEGORY";
192
+ /** 文本标签 */
193
+ TYPE[TYPE["TEXT"] = 2] = "TEXT";
194
+ })(TYPE = ROOM_TAG.TYPE || (ROOM_TAG.TYPE = {}));
195
+ })(ROOM_TAG = ENUM.ROOM_TAG || (ENUM.ROOM_TAG = {}));
196
+ })(ENUM || (exports.ENUM = ENUM = {}));
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export type { RoomService } from './modules/room/types';
2
+ export { ENUM as CLIENT_BACKEND_ENUM } from './enum';
package/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CLIENT_BACKEND_ENUM = void 0;
4
+ var enum_1 = require("./enum");
5
+ Object.defineProperty(exports, "CLIENT_BACKEND_ENUM", { enumerable: true, get: function () { return enum_1.ENUM; } });
6
+ // 服务.模块.枚举名称.枚举值 示例: DEMO_ENUM.ORDER_ENUM.STATUS.PENDING
@@ -0,0 +1,13 @@
1
+ /**
2
+ * BaseService 基类
3
+ * 所有服务类都应该继承此类
4
+ */
5
+ export default abstract class BaseService {
6
+ /** URL一级路径 */
7
+ protected abstract prefixUrl: string;
8
+ /** 子网域名 */
9
+ protected readonly natDevHost = "";
10
+ protected readonly natProdHost = "";
11
+ /** 获取API URL */
12
+ protected getApiUrl(func: Function): string;
13
+ }
@@ -0,0 +1,24 @@
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 env_1 = __importDefault(require("../utils/env"));
7
+ const string_1 = require("../utils/string");
8
+ /**
9
+ * BaseService 基类
10
+ * 所有服务类都应该继承此类
11
+ */
12
+ class BaseService {
13
+ constructor() {
14
+ /** 子网域名 */
15
+ this.natDevHost = '';
16
+ this.natProdHost = '';
17
+ }
18
+ /** 获取API URL */
19
+ getApiUrl(func) {
20
+ const host = env_1.default.isProduction() ? this.natProdHost : this.natDevHost;
21
+ return `${host}${this.prefixUrl}/${(0, string_1.camelToKebabCase)(func.name)}`;
22
+ }
23
+ }
24
+ exports.default = BaseService;
@@ -0,0 +1,88 @@
1
+ import { ListActivityAPIRequest, ListActivityAPIResponse } from '@be-link/ecommerce-volcengine-open-api-sdk';
2
+ import { FastifyRequest } from 'fastify';
3
+ import { ENUM } from '../../enum';
4
+ import { Room } from '../../types';
5
+ export declare namespace RoomService {
6
+ namespace Request {
7
+ /**
8
+ * 房间列表查询
9
+ */
10
+ interface List {
11
+ keywords?: string;
12
+ status?: ENUM.ROOM.STATUS;
13
+ startTime?: number;
14
+ endTime?: number;
15
+ pageIndex: number;
16
+ pageSize?: number;
17
+ }
18
+ /**
19
+ * 房间详情查询
20
+ */
21
+ interface Detail {
22
+ id: string;
23
+ }
24
+ /**
25
+ * 房间分享信息查询
26
+ */
27
+ interface Share {
28
+ id: string;
29
+ }
30
+ /**
31
+ * 上传分分享封面
32
+ */
33
+ interface UploadShareCover {
34
+ id: string;
35
+ shareCover: string;
36
+ }
37
+ /**
38
+ * 结算状态查询
39
+ */
40
+ interface settle {
41
+ id: string;
42
+ }
43
+ }
44
+ namespace Response {
45
+ /**
46
+ * 房间列表响应
47
+ */
48
+ interface List {
49
+ list: Room[];
50
+ total: number;
51
+ }
52
+ /**
53
+ * 房间详情响应
54
+ */
55
+ interface Detail {
56
+ info: Room;
57
+ }
58
+ /**
59
+ * 房间分享信息
60
+ */
61
+ interface Share {
62
+ id: string;
63
+ shareUrl: string;
64
+ }
65
+ /**
66
+ * 上传分分享封面响应
67
+ */
68
+ interface UploadShareCover {
69
+ id: string;
70
+ shareCover: string;
71
+ }
72
+ /**
73
+ * 结算状态响应
74
+ */
75
+ interface settle {
76
+ id: string;
77
+ settleStatus: number;
78
+ }
79
+ }
80
+ interface BaseController {
81
+ sync(request: ListActivityAPIRequest): Promise<ListActivityAPIResponse>;
82
+ list(request: Request.List, req?: FastifyRequest): Promise<Response.List>;
83
+ detail(request: Request.Detail, req?: FastifyRequest): Promise<Response.Detail>;
84
+ share(request: Request.Share, req?: FastifyRequest): Promise<Response.Share>;
85
+ uploadShareCover(request: Request.UploadShareCover, req?: FastifyRequest): Promise<Response.UploadShareCover>;
86
+ settle(request: Request.settle, req?: FastifyRequest): Promise<Response.settle>;
87
+ }
88
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@be-link/ecommerce-client-backend-service-node-sdk",
3
+ "version": "0.0.1",
4
+ "description": "EcommerceClientBackendService Node.js SDK",
5
+ "main": "index.js",
6
+ "types": "index.d.ts",
7
+ "author": "",
8
+ "license": "ISC",
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "dependencies": {
13
+ "@be-link/ecommerce-volcengine-open-api-sdk": "^1.0.11",
14
+ "@fastify/request-context": "6.2.1",
15
+ "axios": "1.13.2",
16
+ "axios-retry": "4.0.0",
17
+ "fastify": "5.6.2",
18
+ "uuid": "9.0.1"
19
+ },
20
+ "devDependencies": {
21
+ "tsoa": "^6.6.0"
22
+ },
23
+ "scripts": {
24
+ "build": "rm -rf ./dist && tsc && cp package.json README.md ./dist/ 2>/dev/null || true",
25
+ "test": "jest",
26
+ "swagger": "tsoa spec",
27
+ "build:swagger": "npm run swagger && npm run build && npm run swagger",
28
+ "auto-generate": "node scripts/auto-generate.js"
29
+ }
30
+ }
package/types.d.ts ADDED
@@ -0,0 +1,74 @@
1
+ /**
2
+ * 实体类型定义
3
+ * 从 packages/server/src/core/entity 自动生成
4
+ */
5
+ /**
6
+ * Room 实体接口
7
+ */
8
+ export interface Room {
9
+ id: number;
10
+ liveStreamRoomId: string;
11
+ name: string;
12
+ liveTime: number;
13
+ status: number;
14
+ isLockPreview: number;
15
+ oldId: number;
16
+ copyStream: number;
17
+ templateId: number;
18
+ isAutoEndEnable: number;
19
+ endTime: number;
20
+ activityType: number;
21
+ liveMode: number;
22
+ viewUrlPath: string;
23
+ coverImage: string;
24
+ shareCover: string;
25
+ shareUrl: string;
26
+ verticalCoverImage: string;
27
+ isAnswerRepetitionEnable: number;
28
+ liveLayout: number;
29
+ creatorName: string;
30
+ isAutoStartEnable: number;
31
+ isReplayAutoOnlineEnable: number;
32
+ vid: string;
33
+ createUserId: string;
34
+ duration: number;
35
+ liveReviewStatus: number;
36
+ settleStatus: number;
37
+ createdAt: number;
38
+ updatedAt: number;
39
+ deletedAt: number;
40
+ }
41
+ /**
42
+ * RoomAutoStartConfig 实体接口
43
+ */
44
+ export interface RoomAutoStartConfig {
45
+ id: number;
46
+ liveStreamRoomId: string;
47
+ repeatType: number;
48
+ recurrenceRule: string;
49
+ repeatDeadline: number;
50
+ createdAt: number;
51
+ }
52
+ /**
53
+ * RoomLoopVideo 实体接口
54
+ */
55
+ export interface RoomLoopVideo {
56
+ id: number;
57
+ liveStreamRoomId: string;
58
+ index: number;
59
+ videoName: string;
60
+ videoVid: string;
61
+ offset: number;
62
+ createdAt: number;
63
+ }
64
+ /**
65
+ * RoomTag 实体接口
66
+ */
67
+ export interface RoomTag {
68
+ id: number;
69
+ liveStreamRoomId: string;
70
+ type: number;
71
+ value: string;
72
+ index: number;
73
+ createdAt: number;
74
+ }
package/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * 实体类型定义
4
+ * 从 packages/server/src/core/entity 自动生成
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
package/utils/env.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ declare class EnvUtils {
2
+ /**
3
+ * 判断是否为生产环境
4
+ */
5
+ isProduction(): boolean;
6
+ /**
7
+ * 获取环境变量
8
+ */
9
+ getEnv(key: string, defaultValue?: string): string | undefined;
10
+ }
11
+ declare const envUtils: EnvUtils;
12
+ export default envUtils;
package/utils/env.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class EnvUtils {
4
+ /**
5
+ * 判断是否为生产环境
6
+ */
7
+ isProduction() {
8
+ return process.env.NODE_ENV === 'prod';
9
+ }
10
+ /**
11
+ * 获取环境变量
12
+ */
13
+ getEnv(key, defaultValue) {
14
+ return process.env[key] || defaultValue;
15
+ }
16
+ }
17
+ const envUtils = new EnvUtils();
18
+ exports.default = envUtils;
@@ -0,0 +1,7 @@
1
+ declare module '@fastify/request-context' {
2
+ interface RequestContextData {
3
+ requestId?: string;
4
+ traceMessageId?: string;
5
+ }
6
+ }
7
+ export declare function callApi<T extends (...args: any[]) => Promise<any>>(url: string, request?: Parameters<T>[0]): Promise<Awaited<ReturnType<T>>>;
package/utils/http.js ADDED
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.callApi = callApi;
40
+ const axios_1 = __importDefault(require("axios"));
41
+ const uuid_1 = require("uuid");
42
+ const axios_retry_1 = __importDefault(require("axios-retry"));
43
+ const request_context_1 = require("@fastify/request-context");
44
+ (0, axios_retry_1.default)(axios_1.default, {
45
+ retries: 1,
46
+ retryCondition(error) {
47
+ return error.response?.status === 502;
48
+ },
49
+ retryDelay: (retryCount) => {
50
+ console.info(`retryCount: ${retryCount}, retryDelay: ${retryCount * 500}`);
51
+ return retryCount * 500;
52
+ },
53
+ onRetry(retryCount, error, requestConfig) {
54
+ console.info(`retryCount: ${retryCount}, onRetry: ${error.message}, requestHeader: ${JSON.stringify(requestConfig.headers)}`);
55
+ },
56
+ });
57
+ async function callApi(url, request) {
58
+ const requestId = request_context_1.requestContext.get('requestId') || request_context_1.requestContext.get('traceMessageId') || (0, uuid_1.v4)();
59
+ try {
60
+ console.info(`准备发起ecommerce-client-backend-service请求[${requestId}]: ${url}, 参数: ${JSON.stringify(request)}`);
61
+ const response = await axios_1.default.post(url, request, { headers: { 'x-request-id': requestId } });
62
+ const responseData = response.data;
63
+ return responseData.data;
64
+ }
65
+ catch (error) {
66
+ const axiosError = error;
67
+ if (axiosError.response) {
68
+ const response = axiosError.response;
69
+ const data = response.data;
70
+ console.error(`ecommerce-client-backend-service 异常: ${axiosError.message},requestId: ${requestId}`);
71
+ console.info('响应信息', data.message);
72
+ console.error('异常堆栈', JSON.stringify(error.stack));
73
+ throw new Error(data.errorType + ' - ' + data.message);
74
+ }
75
+ // 调用dns模块解析url
76
+ const dns = await Promise.resolve().then(() => __importStar(require('dns')));
77
+ const dnsPromise = new Promise((resolve, reject) => {
78
+ const lookupRes = dns.lookup(url, (err, address) => {
79
+ if (err) {
80
+ console.error(err.message);
81
+ reject(err);
82
+ }
83
+ console.info(`lookup: ${JSON.stringify(lookupRes)}`);
84
+ resolve(address);
85
+ });
86
+ });
87
+ try {
88
+ const address = await dnsPromise;
89
+ console.info(`address: ${JSON.stringify(address)}`);
90
+ }
91
+ catch (error) {
92
+ console.info(`error: ${JSON.stringify(error)}`);
93
+ }
94
+ console.error(`ecommerce-client-backend-service 未知异常: ${axiosError.message}`, error.stack);
95
+ throw error;
96
+ }
97
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 将驼峰命名转换为短横线命名
3
+ * @param str 驼峰命名字符串
4
+ * @returns 短横线命名字符串
5
+ * @example
6
+ * camelToKebabCase('fetchConfig') // 'fetch-config'
7
+ * camelToKebabCase('getCosTempSecret') // 'get-cos-temp-secret'
8
+ */
9
+ export declare function camelToKebabCase(str: string): string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.camelToKebabCase = camelToKebabCase;
4
+ /**
5
+ * 将驼峰命名转换为短横线命名
6
+ * @param str 驼峰命名字符串
7
+ * @returns 短横线命名字符串
8
+ * @example
9
+ * camelToKebabCase('fetchConfig') // 'fetch-config'
10
+ * camelToKebabCase('getCosTempSecret') // 'get-cos-temp-secret'
11
+ */
12
+ function camelToKebabCase(str) {
13
+ return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
14
+ }