@skrillex1224/playwright-toolkit 2.1.77 → 2.1.80

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/dist/browser.js CHANGED
@@ -1,9 +1,3 @@
1
- var __defProp = Object.defineProperty;
2
- var __export = (target, all) => {
3
- for (var name in all)
4
- __defProp(target, name, { get: all[name], enumerable: true });
5
- };
6
-
7
1
  // src/internals/logger.js
8
2
  var pad = (value, size = 2) => String(value).padStart(size, "0");
9
3
  var formatTimestamp = (date = /* @__PURE__ */ new Date()) => {
@@ -29,18 +23,18 @@ var fallbackLog = {
29
23
  error: (...args) => console.error(...args),
30
24
  debug: (...args) => console.debug ? console.debug(...args) : console.log(...args)
31
25
  };
32
- var resolveLogMethod = (logger2, name) => {
33
- if (logger2 && typeof logger2[name] === "function") {
34
- return logger2[name].bind(logger2);
26
+ var resolveLogMethod = (logger, name) => {
27
+ if (logger && typeof logger[name] === "function") {
28
+ return logger[name].bind(logger);
35
29
  }
36
- if (name === "warning" && logger2 && typeof logger2.warn === "function") {
37
- return logger2.warn.bind(logger2);
30
+ if (name === "warning" && logger && typeof logger.warn === "function") {
31
+ return logger.warn.bind(logger);
38
32
  }
39
33
  return fallbackLog[name];
40
34
  };
41
35
  var defaultLogger = null;
42
- var setDefaultLogger = (logger2) => {
43
- defaultLogger = logger2;
36
+ var setDefaultLogger = (logger) => {
37
+ defaultLogger = logger;
44
38
  };
45
39
  var resolveLogger = (explicitLogger) => {
46
40
  if (explicitLogger && typeof explicitLogger.info === "function") {
@@ -67,8 +61,8 @@ var colorize = (text, color) => {
67
61
  var createBaseLogger = (prefix = "", explicitLogger) => {
68
62
  const name = prefix ? String(prefix) : "";
69
63
  const dispatch = (methodName, icon, message, color) => {
70
- const logger2 = resolveLogger(explicitLogger);
71
- const logFn = resolveLogMethod(logger2, methodName);
64
+ const logger = resolveLogger(explicitLogger);
65
+ const logFn = resolveLogMethod(logger, methodName);
72
66
  const timestamp = colorize(`[${formatTimestamp()}]`, ANSI.gray);
73
67
  const line = formatLine(name, icon, message);
74
68
  const coloredLine = colorize(line, color);
@@ -84,35 +78,6 @@ var createBaseLogger = (prefix = "", explicitLogger) => {
84
78
  start: (message) => dispatch("info", "\u{1F537}", message, ANSI.blue)
85
79
  };
86
80
  };
87
- function createInternalLogger(moduleName, explicitLogger) {
88
- const baseLogger = createBaseLogger(moduleName, explicitLogger);
89
- return {
90
- start(methodName, params = "") {
91
- const paramStr = params ? ` (${params})` : "";
92
- baseLogger.start(`${methodName} \u5F00\u59CB${paramStr}`);
93
- },
94
- success(methodName, result = "") {
95
- const resultStr = result ? ` (${result})` : "";
96
- baseLogger.success(`${methodName} \u5B8C\u6210${resultStr}`);
97
- },
98
- fail(methodName, error) {
99
- const message = error instanceof Error ? error.message : error;
100
- baseLogger.error(`${methodName} \u5931\u8D25: ${message}`);
101
- },
102
- debug(message) {
103
- baseLogger.debug(message);
104
- },
105
- warn(message) {
106
- baseLogger.warning(message);
107
- },
108
- warning(message) {
109
- baseLogger.warning(message);
110
- },
111
- info(message) {
112
- baseLogger.info(message);
113
- }
114
- };
115
- }
116
81
 
117
82
  // src/logger.js
118
83
  var stripAnsi = (input) => {
@@ -815,7 +780,7 @@ var createTemplateLogger = (baseLogger = createBaseLogger()) => {
815
780
  };
816
781
  var getDefaultBaseLogger = () => createBaseLogger("");
817
782
  var Logger = {
818
- setLogger: (logger2) => setDefaultLogger(logger2),
783
+ setLogger: (logger) => setDefaultLogger(logger),
819
784
  info: (message) => getDefaultBaseLogger().info(message),
820
785
  success: (message) => getDefaultBaseLogger().success(message),
821
786
  warning: (message) => getDefaultBaseLogger().warning(message),
@@ -823,338 +788,76 @@ var Logger = {
823
788
  error: (message) => getDefaultBaseLogger().error(message),
824
789
  debug: (message) => getDefaultBaseLogger().debug(message),
825
790
  start: (message) => getDefaultBaseLogger().start(message),
826
- useTemplate: (logger2) => {
827
- if (logger2) return createTemplateLogger(createBaseLogger("", logger2));
791
+ useTemplate: (logger) => {
792
+ if (logger) return createTemplateLogger(createBaseLogger("", logger));
828
793
  return createTemplateLogger();
829
794
  }
830
795
  };
831
796
 
832
- // src/browser-onlys/index.js
833
- var browser_onlys_exports = {};
834
- __export(browser_onlys_exports, {
835
- AccountForm: () => AccountForm,
836
- ActorFeConfig: () => ActorFeConfig,
837
- PlatformSchema: () => PlatformSchema
838
- });
839
-
840
- // src/internals/utils.js
841
- var logger = createInternalLogger("InternalUtils");
842
- var parseCookies = (cookieString, domain) => {
843
- const cookies = [];
844
- const pairs = cookieString.split(";").map((c) => c.trim());
845
- for (const pair of pairs) {
846
- const [name, ...valueParts] = pair.split("=");
847
- if (name && valueParts.length > 0) {
848
- const cookie = {
849
- name: name.trim(),
850
- value: valueParts.join("=").trim(),
851
- path: "/"
852
- };
853
- if (domain) {
854
- cookie.domain = domain;
855
- }
856
- cookies.push(cookie);
797
+ // src/display.js
798
+ var Display = {
799
+ parseTokenDisplayName(value) {
800
+ if (!value) {
801
+ return { owner: "", accountType: "", note: "" };
857
802
  }
858
- }
859
- logger.success("parseCookies", `parsed ${cookies.length} cookies`);
860
- return cookies;
861
- };
862
-
863
- // src/browser-onlys/account-form.js
864
- var SharedFields = [
865
- { key: "account_id", label: "\u8D26\u53F7", type: "text", required: true, placeholder: "\u4F8B\u5982\uFF1A\u624B\u673A\u53F7 / \u90AE\u7BB1" },
866
- { type: "divider" },
867
- { key: "owner_name", label: "\u6240\u5C5E\u4EBA", type: "text", required: true, placeholder: "\u4F8B\u5982\uFF1A\u767D\u6CFD", col: 12 },
868
- { key: "account_type", label: "\u8D26\u53F7\u7C7B\u578B", type: "select", required: true, placeholder: "\u4F8B\u5982\uFF1AEmail", options: ["Phone", "Google", "Github", "Email", "WeChat", "Taobao", "ZhifuBao", "Other"], col: 12 },
869
- { key: "note", label: "\u5907\u6CE8", type: "textarea", required: false, placeholder: "\u5907\u6CE8" }
870
- ];
871
- var PlatformSchema = Object.fromEntries(
872
- Object.entries({
873
- moonshot: {
874
- name: "Kimi",
875
- domain: "www.kimi.ai",
876
- tokenNames: ["kimi_auth"],
877
- tokenSource: "Cookie",
878
- parse: (token) => {
879
- const val = token ? token.trim() : "";
880
- return val ? { kimi_auth: val } : {};
881
- },
882
- format: (values) => {
883
- const val = values.kimi_auth;
884
- return val === void 0 || val === null ? "" : String(val).trim();
885
- }
886
- },
887
- doubao: {
888
- name: "\u8C46\u5305",
889
- domain: "www.doubao.com",
890
- tokenNames: ["sessionid"],
891
- tokenSource: "Cookie",
892
- parse: (token) => {
893
- const val = token ? token.trim() : "";
894
- return val ? { sessionid: val } : {};
895
- },
896
- format: (values) => {
897
- const val = values.sessionid;
898
- return val === void 0 || val === null ? "" : String(val).trim();
899
- }
900
- },
901
- deepseek: {
902
- name: "DeepSeek",
903
- domain: "chat.deepseek.com",
904
- tokenNames: ["userToken"],
905
- tokenSource: "LocalStorage",
906
- guide: '\u8BF7\u8F93\u5165\u5B8C\u6574 JSON\uFF0C\u4F8B\u5982 {"value":"xxxxx"}\uFF0C\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u63D0\u53D6 value\u3002',
907
- parse: (token) => {
908
- const val = token ? token.trim() : "";
909
- return val ? { userToken: val } : {};
910
- },
911
- format: (values) => {
912
- const raw = values.userToken ? String(values.userToken).trim() : "";
913
- if (!raw) return "";
914
- if (raw.startsWith("{")) {
915
- try {
916
- const parsed = JSON.parse(raw);
917
- if (parsed && typeof parsed.value === "string") return parsed.value.trim();
918
- } catch (e) {
919
- return "";
920
- }
921
- return "";
922
- }
923
- return raw;
924
- }
925
- },
926
- yuanbao: {
927
- name: "\u5143\u5B9D",
928
- domain: "yuanbao.tencent.com",
929
- tokenNames: ["hy_user", "hy_token"],
930
- tokenSource: "Cookie",
931
- guide: "\u5206\u522B\u586B\u5165\u4ECE\u6D4F\u89C8\u5668\u83B7\u53D6\u7684 hy_user \u548C hy_token\uFF0C\u7CFB\u7EDF\u5C06\u81EA\u52A8\u62FC\u63A5\u3002",
932
- parse: (token) => {
933
- const cookieList = parseCookies(token || "");
934
- const pairs = {};
935
- cookieList.forEach((c) => {
936
- pairs[c.name] = c.value;
937
- });
938
- return {
939
- hy_user: pairs["hy_user"] || "",
940
- hy_token: pairs["hy_token"] || ""
941
- };
942
- },
943
- format: (values) => {
944
- const u = values.hy_user ? String(values.hy_user).trim() : "";
945
- const t = values.hy_token ? String(values.hy_token).trim() : "";
946
- if (!u || !t) return "";
947
- return `hy_user=${u}; hy_token=${t}`;
948
- }
949
- },
950
- qwen: {
951
- name: "\u901A\u4E49\u5343\u95EE",
952
- domain: "www.qianwen.com",
953
- tokenNames: ["tongyi_sso_ticket"],
954
- tokenSource: "Cookie",
955
- parse: (token) => {
956
- const val = token ? token.trim() : "";
957
- return val ? { tongyi_sso_ticket: val } : {};
958
- },
959
- format: (values) => {
960
- const val = values.tongyi_sso_ticket;
961
- return val === void 0 || val === null ? "" : String(val).trim();
962
- }
963
- },
964
- erine: {
965
- name: "\u6587\u5FC3\u4E00\u8A00 (Erine)",
966
- domain: "yiyan.baidu.com",
967
- tokenNames: ["BDUSS"],
968
- tokenSource: "Cookie",
969
- parse: (token) => {
970
- const val = token ? token.trim() : "";
971
- return val ? { BDUSS: val } : {};
972
- },
973
- format: (values) => {
974
- const val = values.BDUSS;
975
- return val === void 0 || val === null ? "" : String(val).trim();
976
- }
803
+ const parts = String(value).split(":");
804
+ const owner = (parts[0] || "").trim();
805
+ const accountType = (parts[1] || "").trim();
806
+ const note = parts.length > 2 ? parts.slice(2).join(":").trim() : "";
807
+ return { owner, accountType, note };
808
+ },
809
+ parseAccountDisplayName(value) {
810
+ if (!value) {
811
+ return { account: "", owner: "", accountType: "", note: "" };
977
812
  }
978
- }).map(([key, config]) => {
979
- config.key = key;
980
- return [key, config];
981
- })
982
- );
983
- function createAccountForm() {
984
- return {
985
- /**
986
- * 自动识别 URL 所属平台
987
- * @param {string} url
988
- * @returns {string|null} actor key
989
- */
990
- detectActor(url) {
991
- if (!url) return null;
992
- try {
993
- const hostname = new URL(url).hostname;
994
- for (const [key, config] of Object.entries(PlatformSchema)) {
995
- const domain = String(config.domain || "").trim().replace(/^https?:\/\//, "").replace(/\/.*$/, "");
996
- if (!domain) continue;
997
- if (hostname === domain || hostname.endsWith(`.${domain}`)) return key;
998
- }
999
- } catch (e) {
1000
- return null;
1001
- }
1002
- return null;
1003
- },
1004
- getSchema(key) {
1005
- if (!key) throw new Error("Actor parameter is required to get platform config");
1006
- const config = PlatformSchema[key];
1007
- if (!config) {
1008
- throw new Error(`\u672A\u627E\u5230\u5E73\u53F0\u914D\u7F6E: ${key}. \u8BF7\u786E\u4FDD playwright-toolkit/browser-onlys/account-form.js \u4E2D\u5DF2\u5B9A\u4E49\u8BE5\u5E73\u53F0\u3002`);
1009
- }
1010
- const schema = { ...config };
1011
- const fields = [...SharedFields];
1012
- const names = config.tokenNames || [];
1013
- if (names.length > 0) {
1014
- fields.push({ type: "divider" });
1015
- }
1016
- names.forEach((name) => {
1017
- fields.push({
1018
- key: name,
1019
- label: name,
1020
- type: "textarea",
1021
- required: true,
1022
- placeholder: `\u8BF7\u8F93\u5165 ${name} \u503C`
1023
- });
1024
- });
1025
- schema.fields = fields;
1026
- return schema;
1027
- },
1028
- parseToken(token, config) {
1029
- if (!config) return {};
1030
- return config.parse(token);
1031
- },
1032
- formatToken(values, config) {
1033
- if (!config) return "";
1034
- return config.format(values);
1035
- },
1036
- validate(values, config) {
1037
- if (!config || !config.fields) return { ok: false, message: "\u914D\u7F6E\u9519\u8BEF" };
1038
- for (const field of config.fields) {
1039
- if (field.required) {
1040
- const val = values[field.key];
1041
- if (val === void 0 || val === null || String(val).trim() === "") {
1042
- return { ok: false, message: `\u8BF7\u8F93\u5165${field.label}` };
1043
- }
1044
- }
1045
- }
1046
- const formatted = this.formatToken(values, config);
1047
- if (!formatted) {
1048
- return { ok: false, message: "\u51ED\u636E\u683C\u5F0F\u4E0D\u6B63\u786E\u6216\u4E0D\u5B8C\u6574" };
1049
- }
1050
- return { ok: true };
1051
- },
1052
- /**
1053
- * 获取 API 静态配置
1054
- * @returns {{ path: string, method: string, headers: object }}
1055
- */
1056
- getStaticConfig() {
1057
- return {
1058
- path: "/admin/accounts",
1059
- method: "POST",
1060
- headers: { "Content-Type": "application/json" }
1061
- };
1062
- },
1063
- /**
1064
- * 构建账号提交参数
1065
- * @param {object} values - 表单值
1066
- * @param {object} config - 平台配置 (来自 getSchema)
1067
- * @returns {{ ok: boolean, error?: string, params?: object }}
1068
- */
1069
- buildParams(values, config) {
1070
- const validation = this.validate(values, config);
1071
- if (!validation.ok) {
1072
- return { ok: false, error: validation.message };
1073
- }
1074
- const token = this.formatToken(values, config);
1075
- const account = values.account_id || "";
1076
- const owner = values.owner_name || "";
1077
- const type = values.account_type || "";
1078
- const note = values.note || "";
1079
- const displayParts = [account, owner, type, note].filter(Boolean);
1080
- const displayName = displayParts.join(":");
1081
- const actor = config.key || "";
1082
- const params = {
1083
- account_id: values.account_id,
1084
- token,
1085
- actor,
1086
- display_name: displayName,
1087
- status: "active",
1088
- ban_count: 0
1089
- };
1090
- return { ok: true, params };
813
+ const parts = String(value).split(":");
814
+ const account = (parts[0] || "").trim();
815
+ const owner = (parts[1] || "").trim();
816
+ const accountType = (parts[2] || "").trim();
817
+ const note = parts.length > 3 ? parts.slice(3).join(":").trim() : "";
818
+ return { account, owner, accountType, note };
819
+ },
820
+ buildTokenDisplayName({ owner, accountType, note } = {}) {
821
+ const trimmedOwner = (owner == null ? void 0 : owner.trim()) || "";
822
+ const trimmedType = (accountType == null ? void 0 : accountType.trim()) || "";
823
+ const trimmedNote = (note == null ? void 0 : note.trim()) || "";
824
+ const parts = [trimmedOwner, trimmedType];
825
+ if (trimmedNote) {
826
+ parts.push(trimmedNote);
1091
827
  }
1092
- };
1093
- }
1094
- var instance = null;
1095
- async function useAccountForm() {
1096
- if (!instance) {
1097
- instance = createAccountForm();
1098
- }
1099
- return instance;
1100
- }
1101
- var AccountForm = {
1102
- useAccountForm
1103
- };
1104
-
1105
- // src/browser-onlys/actor-fe-config.js
1106
- var ConfigMapping = Object.fromEntries(Object.entries(
1107
- {
1108
- doubao: {
1109
- icon: "https://heartbitai.com/geo-front/20251128/platform/icon_doubao.svg",
1110
- name: "\u8C46\u5305"
1111
- },
1112
- deepseek: {
1113
- icon: "https://heartbitai.com/geo-front/20251128/platform/icon_deepseek.svg",
1114
- name: "DeepSeek"
1115
- },
1116
- erine: {
1117
- icon: "https://heartbitai.com/geo-front/20251128/platform/icon_wenxin.png",
1118
- name: "\u6587\u5FC3\u4E00\u8A00"
1119
- },
1120
- yuanbao: {
1121
- icon: "https://heartbitai.com/geo-front/20251128/platform/icon_yuanbao.svg",
1122
- name: "\u817E\u8BAF\u5143\u5B9D"
1123
- },
1124
- moonshot: {
1125
- icon: "https://heartbitai.com/geo-front/20251128/platform/icon_kimi.svg",
1126
- name: "Kimi"
1127
- },
1128
- qwen: {
1129
- icon: "https://heartbitai.com/geo-front/20251128/platform/icon_qwen.png",
1130
- name: "\u5343\u95EE"
1131
- }
1132
- }
1133
- ).map(([key, value]) => [key, { ...value, key }]));
1134
- var getMapping = (key) => ConfigMapping[key];
1135
- var list = () => Object.values(ConfigMapping);
1136
- function createActorFeConfigInstance() {
1137
- return {
1138
- getMapping,
1139
- list
1140
- };
1141
- }
1142
- var actorFeConfigInstance = null;
1143
- async function useActorFeConfig() {
1144
- if (!actorFeConfigInstance) {
1145
- actorFeConfigInstance = createActorFeConfigInstance();
828
+ return parts.filter(Boolean).join(":");
829
+ },
830
+ shortId(value, max = 8) {
831
+ const clean = String(value || "").trim();
832
+ if (!clean) return "";
833
+ if (clean.length <= max) return clean;
834
+ return clean.slice(0, max);
835
+ },
836
+ resolveTokenIdentity(displayName, tokenId) {
837
+ const cleanName = String(displayName || "").trim();
838
+ const cleanId = String(tokenId || "").trim();
839
+ const short = this.shortId(cleanId, 8);
840
+ const hasName = cleanName !== "" && cleanName !== cleanId;
841
+ const primary = hasName ? cleanName : short || "-";
842
+ const secondary = hasName && short ? short : "";
843
+ return { primary, secondary, fullId: cleanId, shortId: short };
844
+ },
845
+ resolveAccountIdentity(displayName, accountId) {
846
+ const parts = this.parseAccountDisplayName(displayName);
847
+ const cleanId = String(accountId || "").trim();
848
+ const short = this.shortId(cleanId, 8);
849
+ const hasName = parts.account !== "" && parts.account !== cleanId;
850
+ const primary = hasName ? parts.account : short || "-";
851
+ const secondary = hasName && short ? short : "";
852
+ return { primary, secondary, parts, fullId: cleanId, shortId: short };
1146
853
  }
1147
- return actorFeConfigInstance;
1148
- }
1149
- var ActorFeConfig = {
1150
- useActorFeConfig
1151
854
  };
1152
855
 
1153
856
  // entrys/browser.js
1154
857
  var usePlaywrightToolKit = () => {
1155
858
  return {
1156
859
  Logger,
1157
- ...browser_onlys_exports,
860
+ Display,
1158
861
  $Internals: {
1159
862
  LOG_TEMPLATES,
1160
863
  stripAnsi
@@ -1162,6 +865,7 @@ var usePlaywrightToolKit = () => {
1162
865
  };
1163
866
  };
1164
867
  export {
868
+ Display,
1165
869
  usePlaywrightToolKit
1166
870
  };
1167
871
  //# sourceMappingURL=browser.js.map