@cloudbase/manager-node 4.4.5-beta.0 → 4.4.6

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/lib/env/index.js CHANGED
@@ -21,6 +21,7 @@ class EnvService {
21
21
  this.envId = environment.getEnvId();
22
22
  this.envType = environment.getEnvType();
23
23
  this.cloudService = new utils_1.CloudService(environment.cloudBaseContext, 'tcb', '2018-06-08');
24
+ this.commonService = environment.getCommonService("lowcode", "2021-01-08");
24
25
  }
25
26
  /**
26
27
  * 列出所有环境
@@ -152,6 +153,7 @@ class EnvService {
152
153
  }
153
154
  /**
154
155
  * 拉取登录配置列表
156
+ * @deprecated 请使用 getLoginConfigListV2 代替
155
157
  * @returns {Promise<IEnvLoginConfigRes>}
156
158
  */
157
159
  async getLoginConfigList() {
@@ -159,6 +161,17 @@ class EnvService {
159
161
  EnvId: this.envId
160
162
  });
161
163
  }
164
+ /**
165
+ * 拉取登录配置列表
166
+ */
167
+ async getLoginConfigListV2() {
168
+ return this.commonService.call({
169
+ Action: 'DescribeLoginStrategy',
170
+ Param: {
171
+ EnvId: this.envId
172
+ }
173
+ });
174
+ }
162
175
  /**
163
176
  * 创建登录方式
164
177
  * 'WECHAT-OPEN':微信开放平台
@@ -189,6 +202,7 @@ class EnvService {
189
202
  * @param {string} [appId=''] 微信 appId,可选
190
203
  * @param {string} [appSecret=''] 微信 appSecret,可选
191
204
  * @returns {Promise<IResponseInfo>}
205
+ * @deprecated 请使用 updateLoginConfigV2 代替
192
206
  */
193
207
  /* eslint-disable-next-line */
194
208
  async updateLoginConfig(configId, status = 'ENABLE', appId = '', appSecret = '') {
@@ -209,6 +223,17 @@ class EnvService {
209
223
  finalAppSecret && (params.PlatformSecret = (0, utils_1.rsaEncrypt)(finalAppSecret));
210
224
  return this.cloudService.request('UpdateLoginConfig', params);
211
225
  }
226
+ /**
227
+ * 更新登录方式配置
228
+ * @param {IModifyLoginStrategy} options
229
+ * @returns {Promise<boolean>}
230
+ */
231
+ async updateLoginConfigV2(options) {
232
+ return this.commonService.call({
233
+ Action: 'ModifyLoginStrategy',
234
+ Param: options
235
+ });
236
+ }
212
237
  // 创建自定义登录私钥
213
238
  async createCustomLoginKeys() {
214
239
  return this.cloudService.request('CreateCustomLoginKeys', {
@@ -89,12 +89,14 @@ async function downloadAndExtractRemoteZip(downloadUrl, targetPath) {
89
89
  await fs_extra_1.default.ensureDir(dirPath);
90
90
  // 使用流式解压,避免大文件内存问题
91
91
  await new Promise((resolve, reject) => {
92
- let fileCount = 0;
93
- let extractedCount = 0;
92
+ let totalEntries = 0; // 总条目数(文件+目录)
93
+ let processedEntries = 0; // 已处理条目数
94
+ let streamEnded = false; // 流是否结束
94
95
  downloadResponse
95
96
  .body.pipe(unzipper_1.default.Parse())
96
97
  .on('error', reject)
97
98
  .on('entry', async (entry) => {
99
+ totalEntries++;
98
100
  const filePath = path_1.default.join(dirPath, entry.path);
99
101
  try {
100
102
  // 确保父目录存在(处理嵌套目录情况)
@@ -102,15 +104,15 @@ async function downloadAndExtractRemoteZip(downloadUrl, targetPath) {
102
104
  // 如果是目录则创建,否则写入文件
103
105
  if (entry.type === 'Directory') {
104
106
  await fs_extra_1.default.ensureDir(filePath);
105
- extractedCount++;
107
+ processedEntries++;
108
+ checkCompletion();
106
109
  }
107
110
  else {
108
- fileCount++;
109
111
  entry
110
112
  .pipe(fs_extra_1.default.createWriteStream(filePath))
111
113
  .on('error', reject)
112
114
  .on('finish', () => {
113
- extractedCount++;
115
+ processedEntries++;
114
116
  checkCompletion();
115
117
  });
116
118
  }
@@ -119,9 +121,12 @@ async function downloadAndExtractRemoteZip(downloadUrl, targetPath) {
119
121
  reject(err);
120
122
  }
121
123
  })
122
- .on('close', checkCompletion);
124
+ .on('close', () => {
125
+ streamEnded = true;
126
+ checkCompletion();
127
+ });
123
128
  function checkCompletion() {
124
- if (fileCount > 0 && fileCount === extractedCount) {
129
+ if (streamEnded && totalEntries === processedEntries) {
125
130
  resolve('');
126
131
  }
127
132
  }
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@cloudbase/manager-node",
3
- "version": "4.4.5-beta.0",
3
+ "version": "4.4.6",
4
4
  "description": "The node manage service api for cloudbase.",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
7
7
  "build": "rimraf lib types && npx tsc",
8
- "test:coverage": "jest --runInBand --detectOpenHandles --coverage --testTimeout=50000",
9
- "test": "jest --runInBand --detectOpenHandles --testTimeout=50000",
8
+ "test:coverage": "jest --runInBand --detectOpenHandles --coverage --testTimeout=100000",
9
+ "test": "jest --runInBand --detectOpenHandles --testTimeout=100000",
10
10
  "lint": "eslint \"./**/*.ts\"",
11
11
  "lint:fix": "eslint --fix \"./**/*.ts\"",
12
12
  "prepublishOnly": "npm run build",
@@ -17,6 +17,48 @@ interface IEnvLoginConfigRes {
17
17
  RequestId: string;
18
18
  ConfigList: LoginConfigItem[];
19
19
  }
20
+ interface VerificationConfig {
21
+ Type: string;
22
+ Name: string;
23
+ Method: string;
24
+ }
25
+ interface MFALoginConfig {
26
+ On: string;
27
+ Sms: string;
28
+ Email: string;
29
+ RequiredBindPhone: string;
30
+ Topt: string;
31
+ }
32
+ interface PasswordUpdateLoginConfig {
33
+ FirstLoginUpdate: boolean;
34
+ PeriodUpdate: boolean;
35
+ PeriodValue: number;
36
+ PeriodType: string;
37
+ }
38
+ interface ILoginStrategy {
39
+ Data: {
40
+ PhoneLogin: boolean;
41
+ EmailLogin: boolean;
42
+ AnonymousLogin: boolean;
43
+ UsernameLogin: boolean;
44
+ PhoneNumberLogin: boolean;
45
+ Mfa: boolean;
46
+ SmsVerificationConfig: VerificationConfig;
47
+ MfaConfig?: MFALoginConfig;
48
+ PwdUpdateStrategy?: PasswordUpdateLoginConfig;
49
+ };
50
+ }
51
+ interface IModifyLoginStrategy {
52
+ EnvId: string;
53
+ PhoneNumberLogin: boolean;
54
+ EmailLogin: boolean;
55
+ AnonymousLogin: boolean;
56
+ UserNameLogin: boolean;
57
+ SmsVerificationConfig?: VerificationConfig;
58
+ Mfa?: boolean;
59
+ MfaConfig?: MFALoginConfig;
60
+ PwdUpdateStrategy?: PasswordUpdateLoginConfig;
61
+ }
20
62
  interface IInitParam {
21
63
  Channel?: string;
22
64
  Source?: string;
@@ -26,6 +68,7 @@ export declare class EnvService {
26
68
  private envId;
27
69
  private cloudService;
28
70
  private envType?;
71
+ private commonService;
29
72
  constructor(environment: Environment);
30
73
  /**
31
74
  * 列出所有环境
@@ -92,9 +135,14 @@ export declare class EnvService {
92
135
  updateEnvInfo(alias: string): Promise<IResponseInfo>;
93
136
  /**
94
137
  * 拉取登录配置列表
138
+ * @deprecated 请使用 getLoginConfigListV2 代替
95
139
  * @returns {Promise<IEnvLoginConfigRes>}
96
140
  */
97
141
  getLoginConfigList(): Promise<IEnvLoginConfigRes>;
142
+ /**
143
+ * 拉取登录配置列表
144
+ */
145
+ getLoginConfigListV2(): Promise<ILoginStrategy>;
98
146
  /**
99
147
  * 创建登录方式
100
148
  * 'WECHAT-OPEN':微信开放平台
@@ -112,8 +160,15 @@ export declare class EnvService {
112
160
  * @param {string} [appId=''] 微信 appId,可选
113
161
  * @param {string} [appSecret=''] 微信 appSecret,可选
114
162
  * @returns {Promise<IResponseInfo>}
163
+ * @deprecated 请使用 updateLoginConfigV2 代替
115
164
  */
116
165
  updateLoginConfig(configId: string, status?: string, appId?: string, appSecret?: string): Promise<IResponseInfo>;
166
+ /**
167
+ * 更新登录方式配置
168
+ * @param {IModifyLoginStrategy} options
169
+ * @returns {Promise<boolean>}
170
+ */
171
+ updateLoginConfigV2(options: IModifyLoginStrategy): Promise<boolean>;
117
172
  createCustomLoginKeys(): Promise<{
118
173
  PrivateKey: string;
119
174
  KeyID: string;