adspower-browser 2.1.2 → 2.1.4-beta

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 CHANGED
@@ -142,6 +142,8 @@ ads close-browser <profile_id> # Or JSON: profile_id? | profil
142
142
  ads create-browser '{"group_id":"0","user_proxy_config":{"proxy_soft":"no_proxy"},...}' # group_id + account field required; proxy optional (defaults to no_proxy; proxyid takes priority over user_proxy_config when both given)
143
143
  ads update-browser '{"profile_id":"...",...}' # profile_id required
144
144
  ads delete-browser '{"profile_id":["..."]}' # profile_id required
145
+ ads get-recycle-bin-list '{}' # page?, limit? (1-100). Omit either to use the Local API backend default. Last 30 days only
146
+ ads restore-recycle-bin '{"profile_id":["id1","id2"],"group_id":"123"}' # profile_id[] or profile_no[], group_id required
145
147
  ads get-browser-list '{}' # CLI defaults to page=1,limit=200. Or group_id?, limit?, page?, profile_id[]?, profile_no[]?, sort_type?, sort_order?, tag_ids?, tags_filter?, name?, name_filter?
146
148
  ads get-opened-browser # No params
147
149
  ```
@@ -171,12 +173,12 @@ ads get-group-list '{}' # group_name?, page_size?, page?
171
173
  ### Member
172
174
 
173
175
  ```bash
174
- ads create-member '{"user_group_id":"...","email":"alice@example.com","password":"password1","identity":4}' # identity: 2 admin, 3 manager, 4 staff
175
- ads update-member '{"user_id":"...","name":"Alice"}' # omit authorized_group to keep groups; [] + group_update_type 1 clears
176
+ ads create-member '{"user_group_id":"...","email":"alice@example.com","password":"password1","identity":4}' # identity: 2 admin, 3 manager, 4 staff; manager optional; member only for identity 3
177
+ ads update-member '{"user_id":"...","name":"Alice"}' # omit to keep; empty name/manager/remark/member/authorized_group can clear; do not empty email or identity
176
178
  ads reset-member-password '{"user_id":"..."}' # unbind_phone?: 0|1; new_password is in the response
177
- ads delete-member '{"user_id":"..."}'
178
- ads get-member-list '{}' # user_group_id?, user_id[]?, email[]?, page?, limit? (default 1)
179
- ads get-member-group-list '{}' # page?, limit? (default 1)
179
+ ads delete-member '{"user_id":"..."}' # permanent, not recoverable
180
+ ads get-member-list '{}' # user_group_id?, user_id[]?, email[]?, page?, limit? (default 50, max 200)
181
+ ads get-member-group-list '{}' # page?, limit? (default 50, max 200)
180
182
  ```
181
183
 
182
184
  ### Application (categories)
package/cli/index.js CHANGED
@@ -610,6 +610,23 @@ var LOCAL_API_CONTRACTS = {
610
610
  profile_id: { apiName: "profile_id", location: "body" }
611
611
  }
612
612
  },
613
+ "get-recycle-bin-list": {
614
+ method: "POST",
615
+ path: "/api/v2/browser-profile/recycle-bin/list",
616
+ params: {
617
+ page: { apiName: "page", location: "body" },
618
+ limit: { apiName: "limit", location: "body" }
619
+ }
620
+ },
621
+ "restore-recycle-bin": {
622
+ method: "POST",
623
+ path: "/api/v2/browser-profile/recycle-bin/restore",
624
+ params: {
625
+ profile_id: { apiName: "profile_id", location: "body" },
626
+ profile_no: { apiName: "profile_no", location: "body" },
627
+ group_id: { apiName: "group_id", location: "body" }
628
+ }
629
+ },
613
630
  "get-browser-list": {
614
631
  method: "POST",
615
632
  path: "/api/v2/browser-profile/list",
@@ -816,6 +833,14 @@ var LOCAL_API_CONTRACTS = {
816
833
  ipchecker: { apiName: "ipchecker", location: "body" }
817
834
  }
818
835
  },
836
+ "get-dynamic-proxy-traffic": {
837
+ method: "POST",
838
+ path: "/api/v2/proxy/dynamic-proxy-traffic",
839
+ params: {
840
+ start_date: { apiName: "start_date", location: "body" },
841
+ end_date: { apiName: "end_date", location: "body" }
842
+ }
843
+ },
819
844
  "get-proxy-list": {
820
845
  method: "POST",
821
846
  path: "/api/v2/proxy-list/list",
@@ -948,6 +973,8 @@ var API_ENDPOINTS = {
948
973
  GET_BROWSER_LIST: LOCAL_API_CONTRACTS["get-browser-list"].path,
949
974
  UPDATE_BROWSER: LOCAL_API_CONTRACTS["update-browser"].path,
950
975
  DELETE_BROWSER: LOCAL_API_CONTRACTS["delete-browser"].path,
976
+ GET_RECYCLE_BIN_LIST: LOCAL_API_CONTRACTS["get-recycle-bin-list"].path,
977
+ RESTORE_RECYCLE_BIN: LOCAL_API_CONTRACTS["restore-recycle-bin"].path,
951
978
  GET_PROFILE_COOKIES: LOCAL_API_CONTRACTS["get-profile-cookies"].path,
952
979
  GET_PROFILE_UA: LOCAL_API_CONTRACTS["get-profile-ua"].path,
953
980
  CLOSE_ALL_PROFILES: LOCAL_API_CONTRACTS["close-all-profiles"].path,
@@ -957,6 +984,7 @@ var API_ENDPOINTS = {
957
984
  GET_BROWSER_ACTIVE: LOCAL_API_CONTRACTS["get-browser-active"].path,
958
985
  CREATE_PROXY: LOCAL_API_CONTRACTS["create-proxy"].path,
959
986
  UPDATE_PROXY: LOCAL_API_CONTRACTS["update-proxy"].path,
987
+ GET_DYNAMIC_PROXY_TRAFFIC: LOCAL_API_CONTRACTS["get-dynamic-proxy-traffic"].path,
960
988
  GET_PROXY_LIST: LOCAL_API_CONTRACTS["get-proxy-list"].path,
961
989
  DELETE_PROXY: LOCAL_API_CONTRACTS["delete-proxy"].path,
962
990
  GET_OPENED_BROWSER: LOCAL_API_CONTRACTS["get-opened-browser"].path,
@@ -1032,6 +1060,18 @@ var TOOL_INTENT_BY_NAME = {
1032
1060
  triggersEn: "remove profile, delete account, trash browser",
1033
1061
  triggersZh: "\u5220\u9664\u73AF\u5883,\u79FB\u9664profile,\u5220\u6389\u6D4F\u89C8\u5668\u8D26\u53F7"
1034
1062
  },
1063
+ "get-recycle-bin-list": {
1064
+ intentEn: "List browser profiles in the recycle bin from the last 30 days.",
1065
+ intentZh: "\u67E5\u8BE2\u8FD1 30 \u5929\u56DE\u6536\u7AD9\u4E2D\u7684\u6D4F\u89C8\u5668\u73AF\u5883\u3002",
1066
+ triggersEn: "recycle bin, deleted profiles, trash list, recently deleted",
1067
+ triggersZh: "\u56DE\u6536\u7AD9,\u5DF2\u5220\u9664\u73AF\u5883,\u6700\u8FD1\u5220\u9664,\u5783\u573E\u6876\u5217\u8868"
1068
+ },
1069
+ "restore-recycle-bin": {
1070
+ intentEn: "Restore one or more deleted browser profiles from the recycle bin into a target group.",
1071
+ intentZh: "\u628A\u56DE\u6536\u7AD9\u91CC\u7684\u4E00\u4E2A\u6216\u591A\u4E2A\u73AF\u5883\u6062\u590D\u5230\u6307\u5B9A\u5206\u7EC4\u3002",
1072
+ triggersEn: "restore profile, recover deleted browser, undelete environment",
1073
+ triggersZh: "\u6062\u590D\u73AF\u5883,\u8FD8\u539F\u56DE\u6536\u7AD9,\u627E\u56DE\u5DF2\u5220\u9664\u73AF\u5883"
1074
+ },
1035
1075
  "get-browser-list": {
1036
1076
  intentEn: "List or search browser profiles (pagination, filters).",
1037
1077
  intentZh: "\u5206\u9875/\u6761\u4EF6\u67E5\u8BE2\u6D4F\u89C8\u5668 profile \u5217\u8868\u3002",
@@ -1135,10 +1175,10 @@ var TOOL_INTENT_BY_NAME = {
1135
1175
  triggersZh: "\u91CD\u7F6E\u5BC6\u7801,\u6539\u5BC6\u7801,\u89E3\u7ED1\u624B\u673A"
1136
1176
  },
1137
1177
  "delete-member": {
1138
- intentEn: "Delete a team member by user_id.",
1139
- intentZh: "\u6309 user_id \u5220\u9664\u56E2\u961F\u6210\u5458\u3002",
1140
- triggersEn: "remove member, delete user, delete staff",
1141
- triggersZh: "\u5220\u9664\u6210\u5458,\u79FB\u9664\u7528\u6237,\u5220\u5458\u5DE5"
1178
+ intentEn: "Permanently delete a team member by user_id. Hard delete, not recoverable.",
1179
+ intentZh: "\u6309 user_id \u5F7B\u5E95\u5220\u9664\u56E2\u961F\u6210\u5458\uFF0C\u4E0D\u53EF\u6062\u590D\u3002",
1180
+ triggersEn: "remove member, delete user, delete staff, hard delete",
1181
+ triggersZh: "\u5220\u9664\u6210\u5458,\u79FB\u9664\u7528\u6237,\u5220\u5458\u5DE5,\u5F7B\u5E95\u5220\u9664"
1142
1182
  },
1143
1183
  "get-member-list": {
1144
1184
  intentEn: "List or search team members (pagination, user_id, email).",
@@ -1176,6 +1216,12 @@ var TOOL_INTENT_BY_NAME = {
1176
1216
  triggersEn: "edit proxy, change proxy host",
1177
1217
  triggersZh: "\u4FEE\u6539\u4EE3\u7406,\u66F4\u65B0\u4EE3\u7406"
1178
1218
  },
1219
+ "get-dynamic-proxy-traffic": {
1220
+ intentEn: "Query and return dynamic proxy traffic for the current team, including available traffic, traffic package expiration dates, and daily traffic consumption for the current month or a specified date range.",
1221
+ intentZh: "\u67E5\u8BE2\u5E76\u8FD4\u56DE\u5F53\u524D\u56E2\u961F\u52A8\u6001\u4EE3\u7406\u7684\u6D41\u91CF\u4FE1\u606F\uFF0C\u5305\u62EC\u53EF\u7528\u6D41\u91CF\u3001\u6D41\u91CF\u5305\u5230\u671F\u65E5\u671F\uFF0C\u4EE5\u53CA\u672C\u6708\u6216\u6307\u5B9A\u65E5\u671F\u8303\u56F4\u5185\u7684\u6BCF\u65E5\u6D41\u91CF\u6D88\u8017\u60C5\u51B5\u3002",
1222
+ triggersEn: "dynamic proxy traffic, available traffic, traffic package expiration, daily traffic consumption",
1223
+ triggersZh: "\u52A8\u6001\u4EE3\u7406\u6D41\u91CF,\u53EF\u7528\u6D41\u91CF,\u6D41\u91CF\u5305\u5230\u671F\u65E5\u671F,\u6BCF\u65E5\u6D41\u91CF\u6D88\u8017"
1224
+ },
1179
1225
  "get-proxy-list": {
1180
1226
  intentEn: "List proxies with filters/pagination.",
1181
1227
  intentZh: "\u5206\u9875/\u6761\u4EF6\u67E5\u8BE2\u4EE3\u7406\u5217\u8868\u3002",
@@ -1357,7 +1403,7 @@ function buildRequestBodyFor(command, params) {
1357
1403
  }
1358
1404
  const value = withContractDefault(params[inputName], config2.default);
1359
1405
  if (value !== void 0) {
1360
- requestBody[config2.apiName] = toContractValue(value);
1406
+ requestBody[config2.apiName] = command === "restore-recycle-bin" && (inputName === "profile_id" || inputName === "profile_no") && Array.isArray(value) ? value.join(",") : toContractValue(value);
1361
1407
  }
1362
1408
  });
1363
1409
  return requestBody;
@@ -1535,6 +1581,34 @@ var browserHandlers = {
1535
1581
  }
1536
1582
  throw new Error(response.data.msg);
1537
1583
  },
1584
+ async getRecycleBinList(params) {
1585
+ const response = await getApiClient().post(
1586
+ `${getLocalApiBase()}${API_ENDPOINTS.GET_RECYCLE_BIN_LIST}`,
1587
+ buildRequestBodyFor("get-recycle-bin-list", params)
1588
+ );
1589
+ if (response.data.code === 0) {
1590
+ return JSON.stringify(response.data.data, null, 2);
1591
+ }
1592
+ throw new Error(response.data.msg);
1593
+ },
1594
+ async restoreRecycleBin(params) {
1595
+ const _p = params;
1596
+ if (_p.profile_id && Array.isArray(_p.profile_id)) {
1597
+ _p.profile_id = _p.profile_id.join(",");
1598
+ }
1599
+ if (_p.profile_no && Array.isArray(_p.profile_no)) {
1600
+ _p.profile_no = _p.profile_no.join(",");
1601
+ }
1602
+ console.log(_p);
1603
+ const response = await getApiClient().post(
1604
+ `${getLocalApiBase()}${API_ENDPOINTS.RESTORE_RECYCLE_BIN}`,
1605
+ buildRequestBodyFor("restore-recycle-bin", _p)
1606
+ );
1607
+ if (response.data.code === 0) {
1608
+ return JSON.stringify(response.data.data, null, 2);
1609
+ }
1610
+ throw new Error(response.data.msg);
1611
+ },
1538
1612
  async getBrowserList(params) {
1539
1613
  const requestBody = buildRequestBodyFor("get-browser-list", params);
1540
1614
  const response = await getApiClient().post(`${getLocalApiBase()}${API_ENDPOINTS.GET_BROWSER_LIST}`, requestBody);
@@ -1773,6 +1847,14 @@ var proxyHandlers = {
1773
1847
  }
1774
1848
  throw new Error(response.data.msg);
1775
1849
  },
1850
+ async getDynamicProxyTraffic(params = {}) {
1851
+ const requestBody = buildRequestBodyFor("get-dynamic-proxy-traffic", params);
1852
+ const response = await getApiClient().post(`${getLocalApiBase()}${API_ENDPOINTS.GET_DYNAMIC_PROXY_TRAFFIC}`, requestBody);
1853
+ if (response.data.code === 0) {
1854
+ return JSON.stringify(response.data.data, null, 2);
1855
+ }
1856
+ throw new Error(response.data.msg);
1857
+ },
1776
1858
  async getProxyList(params) {
1777
1859
  const requestBody = buildRequestBodyFor("get-proxy-list", params);
1778
1860
  const response = await getApiClient().post(`${getLocalApiBase()}${API_ENDPOINTS.GET_PROXY_LIST}`, requestBody);
@@ -2514,6 +2596,17 @@ var schemas = {
2514
2596
  deleteBrowserSchema: import_zod.z.object({
2515
2597
  profile_id: import_zod.z.array(import_zod.z.string()).describe("The profile ids of the browsers to delete, it is required when you want to delete the browser")
2516
2598
  }).strict(),
2599
+ getRecycleBinListSchema: import_zod.z.object({
2600
+ page: import_zod.z.number().int().min(1).optional().describe("Page number. Omit to use the Local API backend default. Only profiles deleted in the last 30 days and visible to the caller are returned."),
2601
+ limit: import_zod.z.number().int().min(1).max(100).optional().describe("Profiles per page, range 1-100. Omit to use the Local API backend default.")
2602
+ }).strict(),
2603
+ restoreRecycleBinSchema: import_zod.z.object({
2604
+ profile_id: nonEmptyStringArraySchema.optional().describe("Array of one or more profile IDs in the recycle bin. Either profile_id or profile_no is required. If both are provided, profile_id takes priority."),
2605
+ profile_no: import_zod.z.array(import_zod.z.string().regex(/^\d+$/, "Profile number must be a numeric string")).min(1).optional().describe("Array of one or more profile serial numbers in the recycle bin. Either profile_id or profile_no is required. If both are provided, profile_id takes priority."),
2606
+ group_id: import_zod.z.string().regex(/^\d+$/, "Group ID must be a numeric string").describe('Target group ID after restore. Use get-group-list to find a group the caller can use. "0" is ungrouped.')
2607
+ }).strict().refine((data) => data.profile_id || data.profile_no, {
2608
+ message: "Either profile_id or profile_no must be provided"
2609
+ }),
2517
2610
  getBrowserListSchema: import_zod.z.object({
2518
2611
  group_id: import_zod.z.string().regex(/^\d+$/, "Group ID must be a numeric string").optional().describe("Query by group ID; searches all groups if empty"),
2519
2612
  limit: import_zod.z.number().min(1).max(200).optional().describe("Profiles per page, range 1 ~ 200. If omitted the CLI sends limit=200; the Local API itself defaults to only 1, so always rely on this CLI default or pass an explicit value"),
@@ -2580,8 +2673,8 @@ var schemas = {
2580
2673
  email: import_zod.z.string().max(70).describe("Member email, max 70 characters"),
2581
2674
  password: import_zod.z.string().min(8).max(50).describe("Login password in plaintext, 8 to 50 characters. The Local API hashes it before storing"),
2582
2675
  identity: import_zod.z.union([import_zod.z.literal(2), import_zod.z.literal(3), import_zod.z.literal(4)]).describe("Role type: 2 admin, 3 manager, 4 staff"),
2583
- manager: import_zod.z.string().max(15).optional().describe("Direct manager user_id. Required when identity is 4 (staff)"),
2584
- member: import_zod.z.array(import_zod.z.string()).max(300).optional().describe("Direct subordinate user_id list, max 300. Used when identity is 2 or 3"),
2676
+ manager: import_zod.z.string().max(15).optional().describe("Direct manager user_id. Optional even when identity is 4 (staff); omit for no manager. Only staff may send this field"),
2677
+ member: import_zod.z.array(import_zod.z.string()).max(300).optional().describe("Direct subordinate user_id list, max 300. Only for identity 3 (manager). Do not send for admin (2); the Local API will reject it"),
2585
2678
  authorized_group: import_zod.z.array(import_zod.z.string()).max(1500).optional().describe("Authorized browser group ids, max 1500. Empty array means no groups"),
2586
2679
  profile_limit: import_zod.z.number().optional().describe("Profile quota for this member"),
2587
2680
  remark: import_zod.z.string().max(100).optional().describe("Remark, max 100 characters")
@@ -2589,33 +2682,33 @@ var schemas = {
2589
2682
  updateMemberSchema: import_zod.z.object({
2590
2683
  user_id: import_zod.z.string().max(50).describe("Member user_id to update"),
2591
2684
  user_group_id: import_zod.z.string().max(50).optional().describe("Member group / role id"),
2592
- name: import_zod.z.string().max(50).optional().describe("Member display name, max 50 characters. Empty string clears the name"),
2593
- email: import_zod.z.string().max(70).optional().describe("Member email, max 70 characters"),
2594
- identity: import_zod.z.union([import_zod.z.literal(2), import_zod.z.literal(3), import_zod.z.literal(4)]).optional().describe("Role type: 2 admin, 3 manager, 4 staff"),
2595
- manager: import_zod.z.string().max(15).optional().describe("Direct manager user_id. Empty string clears the manager"),
2596
- member: import_zod.z.array(import_zod.z.string()).max(300).optional().describe("Direct subordinate user_id list, max 300. Empty array clears subordinates"),
2685
+ name: import_zod.z.string().max(50).optional().describe("Member display name, max 50 characters. Empty string clears the name. Omit to keep unchanged"),
2686
+ email: import_zod.z.string().max(70).optional().describe("Member email, max 70 characters. Omit to keep unchanged. Do not send empty string; it will fail validation"),
2687
+ identity: import_zod.z.union([import_zod.z.literal(2), import_zod.z.literal(3), import_zod.z.literal(4)]).optional().describe("Role type: 2 admin, 3 manager, 4 staff. Omit to keep unchanged. Do not send empty; it will fail validation"),
2688
+ manager: import_zod.z.string().max(15).optional().describe("Direct manager user_id. Empty string clears the manager. Omit to keep unchanged. Only staff may send this field"),
2689
+ member: import_zod.z.array(import_zod.z.string()).max(300).optional().describe("Direct subordinate user_id list, max 300. Only for identity 3 (manager). Empty array clears subordinates. Do not send for admin (2)"),
2597
2690
  authorized_group: import_zod.z.array(import_zod.z.string()).max(1500).optional().describe("Authorized browser group ids, max 1500. Omit to keep current groups. Empty array plus group_update_type 1 (default) replaces/clears; 2 appends/keeps"),
2598
2691
  group_update_type: import_zod.z.union([import_zod.z.literal(1), import_zod.z.literal(2)]).optional().describe("How authorized_group is applied: 1 replace (default), 2 append"),
2599
2692
  profile_limit: import_zod.z.number().optional().describe("Profile quota for this member"),
2600
- remark: import_zod.z.string().max(100).optional().describe("Remark, max 100 characters. Empty string clears the remark")
2693
+ remark: import_zod.z.string().max(100).optional().describe("Remark, max 100 characters. Empty string clears the remark. Omit to keep unchanged")
2601
2694
  }).strict(),
2602
2695
  resetMemberPasswordSchema: import_zod.z.object({
2603
2696
  user_id: import_zod.z.string().max(50).describe("Member user_id whose password will be reset"),
2604
2697
  unbind_phone: import_zod.z.union([import_zod.z.literal(0), import_zod.z.literal(1)]).optional().describe("Whether to unbind the member phone: 1 unbind, 0 keep. Default 0")
2605
2698
  }).strict(),
2606
2699
  deleteMemberSchema: import_zod.z.object({
2607
- user_id: import_zod.z.string().max(50).describe("Member user_id to delete")
2700
+ user_id: import_zod.z.string().max(50).describe("Member user_id to permanently delete. Hard delete, not recoverable, does not go to recycle bin")
2608
2701
  }).strict(),
2609
2702
  getMemberListSchema: import_zod.z.object({
2610
2703
  user_group_id: import_zod.z.string().max(50).optional().describe("Filter by member group / role id"),
2611
2704
  user_id: import_zod.z.array(import_zod.z.string()).max(50).optional().describe('Filter by member user_id list, max 50. Example: ["1001","1002"]'),
2612
2705
  email: import_zod.z.array(import_zod.z.string()).max(50).optional().describe('Filter by member email list, max 50. Example: ["a@b.com"]'),
2613
- page: import_zod.z.number().int().min(1).max(1e7).optional().describe("Page number, default 1"),
2614
- limit: import_zod.z.number().int().min(1).max(2e3).optional().describe("Page size, default 1, max 2000")
2706
+ page: import_zod.z.number().int().min(1).max(2e4).optional().describe("Page number, default 1, max 20000"),
2707
+ limit: import_zod.z.number().int().min(1).max(200).optional().describe("Page size, default 50, max 200. Omitting limit returns 50 rows")
2615
2708
  }).strict(),
2616
2709
  getMemberGroupListSchema: import_zod.z.object({
2617
- page: import_zod.z.number().int().min(1).max(1e7).optional().describe("Page number, default 1"),
2618
- limit: import_zod.z.number().int().min(1).max(2e3).optional().describe("Page size, default 1, max 2000")
2710
+ page: import_zod.z.number().int().min(1).max(2e4).optional().describe("Page number, default 1, max 20000"),
2711
+ limit: import_zod.z.number().int().min(1).max(200).optional().describe("Page size, default 50, max 200. Omitting limit returns 50 rows")
2619
2712
  }).strict(),
2620
2713
  getApplicationListSchema: import_zod.z.object({
2621
2714
  category_id: import_zod.z.string().optional().describe("Extension category_id"),
@@ -2648,6 +2741,10 @@ var schemas = {
2648
2741
  remark: import_zod.z.string().optional().describe("Remark/description for the proxy"),
2649
2742
  ipchecker: import_zod.z.enum(["ip2location", "ipapi", "ipfoxy"]).optional().describe("IP checker.")
2650
2743
  }).strict(),
2744
+ getDynamicProxyTrafficSchema: import_zod.z.object({
2745
+ start_date: import_zod.z.iso.date().optional().describe("Query start date in YYYY-MM-DD format. Defaults to the first day of the current month in the Local API when omitted"),
2746
+ end_date: import_zod.z.iso.date().optional().describe("Query end date in YYYY-MM-DD format. Defaults to the current date in the Local API when omitted")
2747
+ }).strict(),
2651
2748
  getProxyListSchema: import_zod.z.object({
2652
2749
  limit: import_zod.z.number().optional().describe("Profiles per page. Number of proxies returned per page, range 1 ~ 200, default is 50"),
2653
2750
  page: import_zod.z.number().optional().describe("Page number for results, default is 1"),
@@ -2826,6 +2923,16 @@ var STATELESS_HANDLERS = {
2826
2923
  description: buildCliCommandDescription("delete-browser", "Delete the browser"),
2827
2924
  paramsDescription: schemaParamsDescription(schemas.deleteBrowserSchema, "delete-browser")
2828
2925
  },
2926
+ "get-recycle-bin-list": {
2927
+ fn: browserHandlers.getRecycleBinList,
2928
+ description: buildCliCommandDescription("get-recycle-bin-list", "List browser profiles in the recycle bin from the last 30 days"),
2929
+ paramsDescription: schemaParamsDescription(schemas.getRecycleBinListSchema, "get-recycle-bin-list")
2930
+ },
2931
+ "restore-recycle-bin": {
2932
+ fn: browserHandlers.restoreRecycleBin,
2933
+ description: buildCliCommandDescription("restore-recycle-bin", "Restore one or more deleted browser profiles from the recycle bin into a group"),
2934
+ paramsDescription: schemaParamsDescription(schemas.restoreRecycleBinSchema, "restore-recycle-bin")
2935
+ },
2829
2936
  "get-browser-list": {
2830
2937
  fn: browserHandlers.getBrowserList,
2831
2938
  description: buildCliCommandDescription("get-browser-list", "Get the list of browsers"),
@@ -2934,7 +3041,7 @@ var STATELESS_HANDLERS = {
2934
3041
  },
2935
3042
  "delete-member": {
2936
3043
  fn: memberHandlers.deleteMember,
2937
- description: buildCliCommandDescription("delete-member", "Delete a team member"),
3044
+ description: buildCliCommandDescription("delete-member", "Permanently delete a team member"),
2938
3045
  paramsDescription: schemaParamsDescription(schemas.deleteMemberSchema, "delete-member")
2939
3046
  },
2940
3047
  "get-member-list": {
@@ -2973,6 +3080,11 @@ var STATELESS_HANDLERS = {
2973
3080
  description: buildCliCommandDescription("update-proxy", "Update the proxy"),
2974
3081
  paramsDescription: schemaParamsDescription(schemas.updateProxySchema, "update-proxy")
2975
3082
  },
3083
+ "get-dynamic-proxy-traffic": {
3084
+ fn: proxyHandlers.getDynamicProxyTraffic,
3085
+ description: buildCliCommandDescription("get-dynamic-proxy-traffic", "Query and return dynamic proxy traffic for the current team, including available traffic, traffic package expiration dates, and daily traffic consumption for the current month or a specified date range."),
3086
+ paramsDescription: schemaParamsDescription(schemas.getDynamicProxyTrafficSchema, "get-dynamic-proxy-traffic")
3087
+ },
2976
3088
  "get-proxy-list": {
2977
3089
  fn: proxyHandlers.getProxyList,
2978
3090
  description: buildCliCommandDescription("get-proxy-list", "Get the list of proxies"),