@tagadapay/plugin-sdk 3.1.22 → 3.1.24

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.
Files changed (76) hide show
  1. package/build-cdn.js +274 -6
  2. package/dist/external-tracker.js +236 -3906
  3. package/dist/external-tracker.min.js +2 -25
  4. package/dist/external-tracker.min.js.map +4 -4
  5. package/dist/react/config/payment.d.ts +14 -4
  6. package/dist/react/config/payment.js +47 -9
  7. package/dist/react/hooks/useCheckout.d.ts +3 -0
  8. package/dist/react/hooks/useCheckout.js +4 -1
  9. package/dist/react/hooks/usePluginConfig.js +9 -10
  10. package/dist/react/providers/TagadaProvider.js +1 -1
  11. package/dist/tagada-react-sdk-minimal.min.js +36 -0
  12. package/dist/tagada-react-sdk-minimal.min.js.map +7 -0
  13. package/dist/tagada-react-sdk.js +37821 -0
  14. package/dist/tagada-react-sdk.min.js +78 -0
  15. package/dist/tagada-react-sdk.min.js.map +7 -0
  16. package/dist/tagada-sdk.js +10309 -6331
  17. package/dist/tagada-sdk.min.js +4 -22
  18. package/dist/tagada-sdk.min.js.map +4 -4
  19. package/dist/v2/cdn-react-minimal.d.ts +23 -0
  20. package/dist/v2/cdn-react-minimal.js +26 -0
  21. package/dist/v2/core/client.js +1 -1
  22. package/dist/v2/core/config/environment.js +2 -1
  23. package/dist/v2/core/funnelClient.d.ts +98 -10
  24. package/dist/v2/core/funnelClient.js +121 -27
  25. package/dist/v2/core/index.d.ts +0 -1
  26. package/dist/v2/core/index.js +0 -2
  27. package/dist/v2/core/isoData.d.ts +4 -4
  28. package/dist/v2/core/isoData.js +7 -7
  29. package/dist/v2/core/pixelMapping.js +64 -26
  30. package/dist/v2/core/resources/checkout.d.ts +10 -0
  31. package/dist/v2/core/resources/checkout.js +6 -0
  32. package/dist/v2/core/resources/expressPaymentMethods.d.ts +1 -0
  33. package/dist/v2/core/resources/payments.d.ts +7 -2
  34. package/dist/v2/core/resources/payments.js +1 -0
  35. package/dist/v2/core/resources/postPurchases.d.ts +17 -0
  36. package/dist/v2/core/resources/postPurchases.js +20 -0
  37. package/dist/v2/core/utils/deviceInfo.d.ts +0 -10
  38. package/dist/v2/core/utils/deviceInfo.js +152 -76
  39. package/dist/v2/core/utils/order.d.ts +2 -0
  40. package/dist/v2/core/utils/pluginConfig.js +18 -22
  41. package/dist/v2/index.d.ts +4 -3
  42. package/dist/v2/index.js +4 -2
  43. package/dist/v2/react/components/FunnelScriptInjector.js +145 -77
  44. package/dist/v2/react/components/StripeExpressButton.d.ts +13 -0
  45. package/dist/v2/react/components/StripeExpressButton.js +171 -0
  46. package/dist/v2/react/components/WhopCheckout.js +7 -1
  47. package/dist/v2/react/hooks/payment-actions/useProcessorAuthAction.js +21 -3
  48. package/dist/v2/react/hooks/useApplePayCheckout.js +8 -8
  49. package/dist/v2/react/hooks/useCheckoutQuery.d.ts +10 -0
  50. package/dist/v2/react/hooks/useCheckoutQuery.js +21 -13
  51. package/dist/v2/react/hooks/useFunnel.d.ts +15 -4
  52. package/dist/v2/react/hooks/useFunnel.js +8 -4
  53. package/dist/v2/react/hooks/useGoogleAutocomplete.d.ts +2 -0
  54. package/dist/v2/react/hooks/useGoogleAutocomplete.js +29 -15
  55. package/dist/v2/react/hooks/useISOData.d.ts +2 -5
  56. package/dist/v2/react/hooks/useISOData.js +25 -26
  57. package/dist/v2/react/hooks/usePaymentPolling.d.ts +2 -2
  58. package/dist/v2/react/hooks/usePixelTracking.js +151 -70
  59. package/dist/v2/react/hooks/usePostPurchasesQuery.js +34 -2
  60. package/dist/v2/react/hooks/useRemappableParams.d.ts +2 -6
  61. package/dist/v2/react/hooks/useRemappableParams.js +23 -23
  62. package/dist/v2/react/hooks/useSetPaymentMethod.d.ts +16 -0
  63. package/dist/v2/react/hooks/useSetPaymentMethod.js +33 -0
  64. package/dist/v2/react/hooks/useStepConfig.d.ts +23 -6
  65. package/dist/v2/react/hooks/useStepConfig.js +14 -7
  66. package/dist/v2/react/hooks/useTranslation.js +23 -8
  67. package/dist/v2/react/index.d.ts +8 -1
  68. package/dist/v2/react/index.js +3 -0
  69. package/dist/v2/react/providers/ExpressPaymentMethodsProvider.d.ts +1 -0
  70. package/dist/v2/react/providers/ExpressPaymentMethodsProvider.js +9 -1
  71. package/dist/v2/react/providers/TagadaProvider.js +4 -4
  72. package/dist/v2/standalone/index.d.ts +21 -3
  73. package/dist/v2/standalone/index.js +25 -3
  74. package/dist/v2/standalone/payment-service.d.ts +134 -0
  75. package/dist/v2/standalone/payment-service.js +928 -0
  76. package/package.json +4 -2
@@ -1,18 +1,16 @@
1
1
  /**
2
- * TagadaPay External Tracker v3.1.22
2
+ * TagadaPay External Tracker v3.1.24
3
3
  * CDN Bundle - Standalone tracking for external pages (Debug Build)
4
4
  * @license MIT
5
5
  */
6
6
  "use strict";
7
7
  var TagadaTrackerBundle = (() => {
8
- var __create = Object.create;
9
8
  var __defProp = Object.defineProperty;
10
9
  var __defProps = Object.defineProperties;
11
10
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
11
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
13
12
  var __getOwnPropNames = Object.getOwnPropertyNames;
14
13
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
15
- var __getProtoOf = Object.getPrototypeOf;
16
14
  var __hasOwnProp = Object.prototype.hasOwnProperty;
17
15
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
18
16
  var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
@@ -35,9 +33,6 @@ var TagadaTrackerBundle = (() => {
35
33
  var __esm = (fn, res) => function __init() {
36
34
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
37
35
  };
38
- var __commonJS = (cb, mod) => function __require() {
39
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
40
- };
41
36
  var __export = (target, all3) => {
42
37
  for (var name in all3)
43
38
  __defProp(target, name, { get: all3[name], enumerable: true });
@@ -50,14 +45,6 @@ var TagadaTrackerBundle = (() => {
50
45
  }
51
46
  return to;
52
47
  };
53
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
54
- // If the importer is in node compatibility mode or this is not an ESM
55
- // file that has been converted to a CommonJS file using a Babel-
56
- // compatible transform (i.e. "__esModule" has not been set), then set
57
- // "default" to the CommonJS "module.exports" for node compatibility.
58
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
59
- mod
60
- ));
61
48
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
62
49
  var __await = function(promise, isYieldStar) {
63
50
  this[0] = promise;
@@ -170,7 +157,7 @@ var TagadaTrackerBundle = (() => {
170
157
  const hostname = window.location.hostname;
171
158
  const href = window.location.href;
172
159
  console.log('[SDK] detectEnvironment() - hostname: "'.concat(hostname, '"'));
173
- if (hostname === "localhost" || hostname.startsWith("127.") || hostname.startsWith("192.168.") || hostname.startsWith("10.") || hostname.includes(".local") || hostname === "" || hostname === "0.0.0.0" || hostname.includes("ngrok-free.dev") || hostname.includes("ngrok-free.app") || hostname.includes("ngrok.io") || hostname.includes("ngrok.app")) {
160
+ if (hostname === "localhost" || hostname.startsWith("127.") || hostname.startsWith("192.168.") || hostname.startsWith("10.") || hostname.includes(".local") || hostname === "" || hostname === "0.0.0.0" || hostname.includes("ngrok-free.dev") || hostname.includes("ngrok-free.app") || hostname.includes("ngrok.io") || hostname.includes("ngrok.app") || hostname.includes(".loclx.io")) {
174
161
  console.log("[SDK] detectEnvironment() - returning LOCAL");
175
162
  if (typeof window !== "undefined" && ((_a = window == null ? void 0 : window.__TAGADA_ENV__) == null ? void 0 : _a.TAGADA_ENVIRONMENT)) {
176
163
  const override = window.__TAGADA_ENV__.TAGADA_ENVIRONMENT.toLowerCase();
@@ -687,6 +674,12 @@ var TagadaTrackerBundle = (() => {
687
674
  });
688
675
 
689
676
  // src/v2/core/utils/previewModeIndicator.ts
677
+ var previewModeIndicator_exports = {};
678
+ __export(previewModeIndicator_exports, {
679
+ injectPreviewModeIndicator: () => injectPreviewModeIndicator,
680
+ isIndicatorInjected: () => isIndicatorInjected,
681
+ removePreviewModeIndicator: () => removePreviewModeIndicator
682
+ });
690
683
  function clearSpecificCookie(cookieName) {
691
684
  if (typeof window === "undefined" || typeof document === "undefined") return;
692
685
  const hostname = window.location.hostname;
@@ -942,6 +935,16 @@ var TagadaTrackerBundle = (() => {
942
935
  indicatorElement = container;
943
936
  isInjected = true;
944
937
  }
938
+ function removePreviewModeIndicator() {
939
+ if (indicatorElement && indicatorElement.parentNode) {
940
+ indicatorElement.parentNode.removeChild(indicatorElement);
941
+ indicatorElement = null;
942
+ isInjected = false;
943
+ }
944
+ }
945
+ function isIndicatorInjected() {
946
+ return isInjected;
947
+ }
945
948
  var indicatorElement, isInjected;
946
949
  var init_previewModeIndicator = __esm({
947
950
  "src/v2/core/utils/previewModeIndicator.ts"() {
@@ -959,14 +962,48 @@ var TagadaTrackerBundle = (() => {
959
962
  __export(funnelClient_exports, {
960
963
  FunnelClient: () => FunnelClient,
961
964
  TrackingProvider: () => TrackingProvider,
965
+ findMethod: () => findMethod,
966
+ getAssignedOrderBumpOfferIds: () => getAssignedOrderBumpOfferIds,
962
967
  getAssignedPaymentFlowId: () => getAssignedPaymentFlowId,
963
968
  getAssignedPixels: () => getAssignedPixels,
969
+ getAssignedResources: () => getAssignedResources,
964
970
  getAssignedScripts: () => getAssignedScripts,
965
971
  getAssignedStaticResources: () => getAssignedStaticResources,
966
972
  getAssignedStepConfig: () => getAssignedStepConfig,
973
+ getAssignedUpsellOfferIds: () => getAssignedUpsellOfferIds,
974
+ getEnabledMethods: () => getEnabledMethods,
975
+ getExpressMethods: () => getExpressMethods,
976
+ getExpressMethodsByProcessor: () => getExpressMethodsByProcessor,
967
977
  getLocalFunnelConfig: () => getLocalFunnelConfig,
978
+ isMethodEnabled: () => isMethodEnabled,
968
979
  loadLocalFunnelConfig: () => loadLocalFunnelConfig
969
980
  });
981
+ function getEnabledMethods(config) {
982
+ if (!config) return [];
983
+ return Object.values(config).filter((m) => m.enabled);
984
+ }
985
+ function getExpressMethods(config) {
986
+ return getEnabledMethods(config).filter((m) => m.express);
987
+ }
988
+ function getExpressMethodsByProcessor(config) {
989
+ const groups = {};
990
+ for (const m of getExpressMethods(config)) {
991
+ const key = m.processorId || m.integrationId || m.provider;
992
+ if (!groups[key]) groups[key] = [];
993
+ groups[key].push(m);
994
+ }
995
+ return groups;
996
+ }
997
+ function findMethod(config, method) {
998
+ if (!config) return void 0;
999
+ for (const entry of Object.values(config)) {
1000
+ if (entry.method === method && entry.enabled) return entry;
1001
+ }
1002
+ return void 0;
1003
+ }
1004
+ function isMethodEnabled(config, method) {
1005
+ return !!findMethod(config, method);
1006
+ }
970
1007
  function getAssignedFunnelId() {
971
1008
  if (typeof window === "undefined") return void 0;
972
1009
  if (window.__TGD_FUNNEL_ID__) {
@@ -1065,11 +1102,14 @@ var TagadaTrackerBundle = (() => {
1065
1102
  return localFunnelConfigCache != null ? localFunnelConfigCache : null;
1066
1103
  }
1067
1104
  function localConfigToStepConfig(local) {
1105
+ const merged = __spreadValues(__spreadValues({}, local.staticResources), local.resources);
1068
1106
  return {
1069
1107
  payment: local.paymentFlowId ? { paymentFlowId: local.paymentFlowId } : void 0,
1070
- staticResources: local.staticResources,
1108
+ resources: Object.keys(merged).length > 0 ? merged : void 0,
1071
1109
  scripts: local.scripts,
1072
- pixels: local.pixels
1110
+ pixels: local.pixels,
1111
+ orderBumps: local.orderBumps,
1112
+ upsellOffers: local.upsellOffers
1073
1113
  };
1074
1114
  }
1075
1115
  function getAssignedStepConfig() {
@@ -1095,9 +1135,13 @@ var TagadaTrackerBundle = (() => {
1095
1135
  return void 0;
1096
1136
  }
1097
1137
  function getAssignedPaymentFlowId() {
1098
- var _a;
1138
+ var _a, _b;
1099
1139
  const stepConfig = getAssignedStepConfig();
1100
- if ((_a = stepConfig == null ? void 0 : stepConfig.payment) == null ? void 0 : _a.paymentFlowId) {
1140
+ const cardConfig = (_a = stepConfig == null ? void 0 : stepConfig.paymentSetupConfig) == null ? void 0 : _a.card;
1141
+ if (cardConfig == null ? void 0 : cardConfig.paymentFlowId) {
1142
+ return cardConfig.paymentFlowId;
1143
+ }
1144
+ if ((_b = stepConfig == null ? void 0 : stepConfig.payment) == null ? void 0 : _b.paymentFlowId) {
1101
1145
  return stepConfig.payment.paymentFlowId;
1102
1146
  }
1103
1147
  if (typeof window !== "undefined") {
@@ -1111,9 +1155,15 @@ var TagadaTrackerBundle = (() => {
1111
1155
  }
1112
1156
  return void 0;
1113
1157
  }
1114
- function getAssignedStaticResources() {
1158
+ function getAssignedResources() {
1115
1159
  const stepConfig = getAssignedStepConfig();
1116
- return stepConfig == null ? void 0 : stepConfig.staticResources;
1160
+ const legacy = stepConfig == null ? void 0 : stepConfig.staticResources;
1161
+ const current = stepConfig == null ? void 0 : stepConfig.resources;
1162
+ if (!legacy && !current) return void 0;
1163
+ return __spreadValues(__spreadValues({}, legacy), current);
1164
+ }
1165
+ function getAssignedStaticResources() {
1166
+ return getAssignedResources();
1117
1167
  }
1118
1168
  function getAssignedScripts(position) {
1119
1169
  const stepConfig = getAssignedStepConfig();
@@ -1124,6 +1174,14 @@ var TagadaTrackerBundle = (() => {
1124
1174
  }
1125
1175
  return scripts.length > 0 ? scripts : void 0;
1126
1176
  }
1177
+ function splitPixelConfig(px) {
1178
+ const idField = "containerId" in px ? "containerId" : "pixelId";
1179
+ const rawId = px[idField];
1180
+ if (!rawId || !rawId.includes(";") && !rawId.includes(",")) return [px];
1181
+ const ids = rawId.split(/[;,]/).map((id) => id.trim()).filter((id) => id.length > 0);
1182
+ if (ids.length <= 1) return [px];
1183
+ return ids.map((id) => __spreadProps(__spreadValues({}, px), { [idField]: id }));
1184
+ }
1127
1185
  function getAssignedPixels() {
1128
1186
  const stepConfig = getAssignedStepConfig();
1129
1187
  const rawPixels = stepConfig == null ? void 0 : stepConfig.pixels;
@@ -1132,14 +1190,26 @@ var TagadaTrackerBundle = (() => {
1132
1190
  for (const [key, value] of Object.entries(rawPixels)) {
1133
1191
  if (!value) continue;
1134
1192
  if (Array.isArray(value)) {
1135
- normalized[key] = value;
1193
+ normalized[key] = value.flatMap((px) => splitPixelConfig(px));
1136
1194
  } else if (typeof value === "object") {
1137
- normalized[key] = [value];
1195
+ normalized[key] = splitPixelConfig(value);
1138
1196
  }
1139
1197
  }
1140
1198
  return Object.keys(normalized).length > 0 ? normalized : void 0;
1141
1199
  }
1142
- var TrackingProvider, localFunnelConfigCache, localFunnelConfigLoading, FunnelClient;
1200
+ function getAssignedOrderBumpOfferIds() {
1201
+ const stepConfig = getAssignedStepConfig();
1202
+ if (!(stepConfig == null ? void 0 : stepConfig.orderBumps)) return void 0;
1203
+ if (stepConfig.orderBumps.mode !== "custom") return void 0;
1204
+ return stepConfig.orderBumps.enabledOfferIds;
1205
+ }
1206
+ function getAssignedUpsellOfferIds() {
1207
+ const stepConfig = getAssignedStepConfig();
1208
+ if (!(stepConfig == null ? void 0 : stepConfig.upsellOffers)) return void 0;
1209
+ if (stepConfig.upsellOffers.mode !== "custom") return void 0;
1210
+ return stepConfig.upsellOffers.enabledUpsellIds;
1211
+ }
1212
+ var lazyInjectPreviewIndicator, TrackingProvider, localFunnelConfigCache, localFunnelConfigLoading, FunnelClient;
1143
1213
  var init_funnelClient = __esm({
1144
1214
  "src/v2/core/funnelClient.ts"() {
1145
1215
  "use strict";
@@ -1147,8 +1217,8 @@ var TagadaTrackerBundle = (() => {
1147
1217
  init_funnel();
1148
1218
  init_eventDispatcher();
1149
1219
  init_previewMode();
1150
- init_previewModeIndicator();
1151
1220
  init_sessionStorage();
1221
+ lazyInjectPreviewIndicator = () => Promise.resolve().then(() => (init_previewModeIndicator(), previewModeIndicator_exports)).then((m) => m.injectPreviewModeIndicator());
1152
1222
  TrackingProvider = /* @__PURE__ */ ((TrackingProvider2) => {
1153
1223
  TrackingProvider2["FACEBOOK"] = "facebook";
1154
1224
  TrackingProvider2["TIKTOK"] = "tiktok";
@@ -1299,7 +1369,7 @@ var TagadaTrackerBundle = (() => {
1299
1369
  if (response.success && response.context) {
1300
1370
  const enriched = this.enrichContext(response.context);
1301
1371
  this.handleSessionSuccess(enriched);
1302
- injectPreviewModeIndicator();
1372
+ lazyInjectPreviewIndicator();
1303
1373
  return enriched;
1304
1374
  } else {
1305
1375
  throw new Error(response.error || "Failed to initialize funnel session");
@@ -1345,7 +1415,7 @@ var TagadaTrackerBundle = (() => {
1345
1415
  if (response.success && response.context) {
1346
1416
  const enriched = this.enrichContext(response.context);
1347
1417
  this.handleSessionSuccess(enriched);
1348
- injectPreviewModeIndicator();
1418
+ lazyInjectPreviewIndicator();
1349
1419
  return enriched;
1350
1420
  } else {
1351
1421
  throw new Error(response.error || "Failed to initialize");
@@ -1442,12 +1512,6 @@ var TagadaTrackerBundle = (() => {
1442
1512
  return result;
1443
1513
  }
1444
1514
  const shouldAutoRedirect = (options == null ? void 0 : options.autoRedirect) !== void 0 ? options.autoRedirect : this.config.autoRedirect !== false;
1445
- if (!shouldAutoRedirect) {
1446
- if (this.config.debugMode) {
1447
- console.log("\u{1F504} [FunnelClient] Refreshing session (no auto-redirect)");
1448
- }
1449
- await this.refreshSession();
1450
- }
1451
1515
  this.updateState({ isNavigating: false, isLoading: false });
1452
1516
  if (shouldAutoRedirect && (result == null ? void 0 : result.url) && typeof window !== "undefined") {
1453
1517
  if (this.config.debugMode) {
@@ -1562,361 +1626,6 @@ var TagadaTrackerBundle = (() => {
1562
1626
  }
1563
1627
  });
1564
1628
 
1565
- // ../../node_modules/.pnpm/path-to-regexp@8.3.0/node_modules/path-to-regexp/dist/index.js
1566
- var require_dist = __commonJS({
1567
- "../../node_modules/.pnpm/path-to-regexp@8.3.0/node_modules/path-to-regexp/dist/index.js"(exports) {
1568
- "use strict";
1569
- Object.defineProperty(exports, "__esModule", { value: true });
1570
- exports.PathError = exports.TokenData = void 0;
1571
- exports.parse = parse;
1572
- exports.compile = compile;
1573
- exports.match = match2;
1574
- exports.pathToRegexp = pathToRegexp;
1575
- exports.stringify = stringify;
1576
- var DEFAULT_DELIMITER = "/";
1577
- var NOOP_VALUE = (value) => value;
1578
- var ID_START = new RegExp("^[$_\\p{ID_Start}]$", "u");
1579
- var ID_CONTINUE = new RegExp("^[$\\u200c\\u200d\\p{ID_Continue}]$", "u");
1580
- var SIMPLE_TOKENS = {
1581
- // Groups.
1582
- "{": "{",
1583
- "}": "}",
1584
- // Reserved.
1585
- "(": "(",
1586
- ")": ")",
1587
- "[": "[",
1588
- "]": "]",
1589
- "+": "+",
1590
- "?": "?",
1591
- "!": "!"
1592
- };
1593
- function escapeText(str) {
1594
- return str.replace(/[{}()\[\]+?!:*\\]/g, "\\$&");
1595
- }
1596
- function escape(str) {
1597
- return str.replace(/[.+*?^${}()[\]|/\\]/g, "\\$&");
1598
- }
1599
- var TokenData = class {
1600
- constructor(tokens, originalPath) {
1601
- this.tokens = tokens;
1602
- this.originalPath = originalPath;
1603
- }
1604
- };
1605
- exports.TokenData = TokenData;
1606
- var PathError = class extends TypeError {
1607
- constructor(message, originalPath) {
1608
- let text = message;
1609
- if (originalPath)
1610
- text += ": ".concat(originalPath);
1611
- text += "; visit https://git.new/pathToRegexpError for info";
1612
- super(text);
1613
- this.originalPath = originalPath;
1614
- }
1615
- };
1616
- exports.PathError = PathError;
1617
- function parse(str, options = {}) {
1618
- const { encodePath = NOOP_VALUE } = options;
1619
- const chars = [...str];
1620
- const tokens = [];
1621
- let index = 0;
1622
- let pos = 0;
1623
- function name() {
1624
- let value = "";
1625
- if (ID_START.test(chars[index])) {
1626
- do {
1627
- value += chars[index++];
1628
- } while (ID_CONTINUE.test(chars[index]));
1629
- } else if (chars[index] === '"') {
1630
- let quoteStart = index;
1631
- while (index++ < chars.length) {
1632
- if (chars[index] === '"') {
1633
- index++;
1634
- quoteStart = 0;
1635
- break;
1636
- }
1637
- if (chars[index] === "\\")
1638
- index++;
1639
- value += chars[index];
1640
- }
1641
- if (quoteStart) {
1642
- throw new PathError("Unterminated quote at index ".concat(quoteStart), str);
1643
- }
1644
- }
1645
- if (!value) {
1646
- throw new PathError("Missing parameter name at index ".concat(index), str);
1647
- }
1648
- return value;
1649
- }
1650
- while (index < chars.length) {
1651
- const value = chars[index];
1652
- const type = SIMPLE_TOKENS[value];
1653
- if (type) {
1654
- tokens.push({ type, index: index++, value });
1655
- } else if (value === "\\") {
1656
- tokens.push({ type: "escape", index: index++, value: chars[index++] });
1657
- } else if (value === ":") {
1658
- tokens.push({ type: "param", index: index++, value: name() });
1659
- } else if (value === "*") {
1660
- tokens.push({ type: "wildcard", index: index++, value: name() });
1661
- } else {
1662
- tokens.push({ type: "char", index: index++, value });
1663
- }
1664
- }
1665
- tokens.push({ type: "end", index, value: "" });
1666
- function consumeUntil(endType) {
1667
- const output = [];
1668
- while (true) {
1669
- const token = tokens[pos++];
1670
- if (token.type === endType)
1671
- break;
1672
- if (token.type === "char" || token.type === "escape") {
1673
- let path = token.value;
1674
- let cur = tokens[pos];
1675
- while (cur.type === "char" || cur.type === "escape") {
1676
- path += cur.value;
1677
- cur = tokens[++pos];
1678
- }
1679
- output.push({
1680
- type: "text",
1681
- value: encodePath(path)
1682
- });
1683
- continue;
1684
- }
1685
- if (token.type === "param" || token.type === "wildcard") {
1686
- output.push({
1687
- type: token.type,
1688
- name: token.value
1689
- });
1690
- continue;
1691
- }
1692
- if (token.type === "{") {
1693
- output.push({
1694
- type: "group",
1695
- tokens: consumeUntil("}")
1696
- });
1697
- continue;
1698
- }
1699
- throw new PathError("Unexpected ".concat(token.type, " at index ").concat(token.index, ", expected ").concat(endType), str);
1700
- }
1701
- return output;
1702
- }
1703
- return new TokenData(consumeUntil("end"), str);
1704
- }
1705
- function compile(path, options = {}) {
1706
- const { encode: encode3 = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;
1707
- const data = typeof path === "object" ? path : parse(path, options);
1708
- const fn = tokensToFunction(data.tokens, delimiter, encode3);
1709
- return function path2(params = {}) {
1710
- const [path3, ...missing] = fn(params);
1711
- if (missing.length) {
1712
- throw new TypeError("Missing parameters: ".concat(missing.join(", ")));
1713
- }
1714
- return path3;
1715
- };
1716
- }
1717
- function tokensToFunction(tokens, delimiter, encode3) {
1718
- const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode3));
1719
- return (data) => {
1720
- const result = [""];
1721
- for (const encoder of encoders) {
1722
- const [value, ...extras] = encoder(data);
1723
- result[0] += value;
1724
- result.push(...extras);
1725
- }
1726
- return result;
1727
- };
1728
- }
1729
- function tokenToFunction(token, delimiter, encode3) {
1730
- if (token.type === "text")
1731
- return () => [token.value];
1732
- if (token.type === "group") {
1733
- const fn = tokensToFunction(token.tokens, delimiter, encode3);
1734
- return (data) => {
1735
- const [value, ...missing] = fn(data);
1736
- if (!missing.length)
1737
- return [value];
1738
- return [""];
1739
- };
1740
- }
1741
- const encodeValue = encode3 || NOOP_VALUE;
1742
- if (token.type === "wildcard" && encode3 !== false) {
1743
- return (data) => {
1744
- const value = data[token.name];
1745
- if (value == null)
1746
- return ["", token.name];
1747
- if (!Array.isArray(value) || value.length === 0) {
1748
- throw new TypeError('Expected "'.concat(token.name, '" to be a non-empty array'));
1749
- }
1750
- return [
1751
- value.map((value2, index) => {
1752
- if (typeof value2 !== "string") {
1753
- throw new TypeError('Expected "'.concat(token.name, "/").concat(index, '" to be a string'));
1754
- }
1755
- return encodeValue(value2);
1756
- }).join(delimiter)
1757
- ];
1758
- };
1759
- }
1760
- return (data) => {
1761
- const value = data[token.name];
1762
- if (value == null)
1763
- return ["", token.name];
1764
- if (typeof value !== "string") {
1765
- throw new TypeError('Expected "'.concat(token.name, '" to be a string'));
1766
- }
1767
- return [encodeValue(value)];
1768
- };
1769
- }
1770
- function match2(path, options = {}) {
1771
- const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;
1772
- const { regexp, keys } = pathToRegexp(path, options);
1773
- const decoders = keys.map((key) => {
1774
- if (decode === false)
1775
- return NOOP_VALUE;
1776
- if (key.type === "param")
1777
- return decode;
1778
- return (value) => value.split(delimiter).map(decode);
1779
- });
1780
- return function match3(input) {
1781
- const m = regexp.exec(input);
1782
- if (!m)
1783
- return false;
1784
- const path2 = m[0];
1785
- const params = /* @__PURE__ */ Object.create(null);
1786
- for (let i = 1; i < m.length; i++) {
1787
- if (m[i] === void 0)
1788
- continue;
1789
- const key = keys[i - 1];
1790
- const decoder = decoders[i - 1];
1791
- params[key.name] = decoder(m[i]);
1792
- }
1793
- return { path: path2, params };
1794
- };
1795
- }
1796
- function pathToRegexp(path, options = {}) {
1797
- const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true } = options;
1798
- const keys = [];
1799
- const flags = sensitive ? "" : "i";
1800
- const sources = [];
1801
- for (const input of pathsToArray(path, [])) {
1802
- const data = typeof input === "object" ? input : parse(input, options);
1803
- for (const tokens of flatten(data.tokens, 0, [])) {
1804
- sources.push(toRegExpSource(tokens, delimiter, keys, data.originalPath));
1805
- }
1806
- }
1807
- let pattern = "^(?:".concat(sources.join("|"), ")");
1808
- if (trailing)
1809
- pattern += "(?:".concat(escape(delimiter), "$)?");
1810
- pattern += end ? "$" : "(?=".concat(escape(delimiter), "|$)");
1811
- const regexp = new RegExp(pattern, flags);
1812
- return { regexp, keys };
1813
- }
1814
- function pathsToArray(paths, init) {
1815
- if (Array.isArray(paths)) {
1816
- for (const p of paths)
1817
- pathsToArray(p, init);
1818
- } else {
1819
- init.push(paths);
1820
- }
1821
- return init;
1822
- }
1823
- function* flatten(tokens, index, init) {
1824
- if (index === tokens.length) {
1825
- return yield init;
1826
- }
1827
- const token = tokens[index];
1828
- if (token.type === "group") {
1829
- for (const seq of flatten(token.tokens, 0, init.slice())) {
1830
- yield* __yieldStar(flatten(tokens, index + 1, seq));
1831
- }
1832
- } else {
1833
- init.push(token);
1834
- }
1835
- yield* __yieldStar(flatten(tokens, index + 1, init));
1836
- }
1837
- function toRegExpSource(tokens, delimiter, keys, originalPath) {
1838
- let result = "";
1839
- let backtrack = "";
1840
- let isSafeSegmentParam = true;
1841
- for (const token of tokens) {
1842
- if (token.type === "text") {
1843
- result += escape(token.value);
1844
- backtrack += token.value;
1845
- isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter));
1846
- continue;
1847
- }
1848
- if (token.type === "param" || token.type === "wildcard") {
1849
- if (!isSafeSegmentParam && !backtrack) {
1850
- throw new PathError('Missing text before "'.concat(token.name, '" ').concat(token.type), originalPath);
1851
- }
1852
- if (token.type === "param") {
1853
- result += "(".concat(negate(delimiter, isSafeSegmentParam ? "" : backtrack), "+)");
1854
- } else {
1855
- result += "([\\s\\S]+)";
1856
- }
1857
- keys.push(token);
1858
- backtrack = "";
1859
- isSafeSegmentParam = false;
1860
- continue;
1861
- }
1862
- }
1863
- return result;
1864
- }
1865
- function negate(delimiter, backtrack) {
1866
- if (backtrack.length < 2) {
1867
- if (delimiter.length < 2)
1868
- return "[^".concat(escape(delimiter + backtrack), "]");
1869
- return "(?:(?!".concat(escape(delimiter), ")[^").concat(escape(backtrack), "])");
1870
- }
1871
- if (delimiter.length < 2) {
1872
- return "(?:(?!".concat(escape(backtrack), ")[^").concat(escape(delimiter), "])");
1873
- }
1874
- return "(?:(?!".concat(escape(backtrack), "|").concat(escape(delimiter), ")[\\s\\S])");
1875
- }
1876
- function stringifyTokens(tokens) {
1877
- let value = "";
1878
- let i = 0;
1879
- function name(value2) {
1880
- const isSafe = isNameSafe(value2) && isNextNameSafe(tokens[i]);
1881
- return isSafe ? value2 : JSON.stringify(value2);
1882
- }
1883
- while (i < tokens.length) {
1884
- const token = tokens[i++];
1885
- if (token.type === "text") {
1886
- value += escapeText(token.value);
1887
- continue;
1888
- }
1889
- if (token.type === "group") {
1890
- value += "{".concat(stringifyTokens(token.tokens), "}");
1891
- continue;
1892
- }
1893
- if (token.type === "param") {
1894
- value += ":".concat(name(token.name));
1895
- continue;
1896
- }
1897
- if (token.type === "wildcard") {
1898
- value += "*".concat(name(token.name));
1899
- continue;
1900
- }
1901
- throw new TypeError("Unknown token type: ".concat(token.type));
1902
- }
1903
- return value;
1904
- }
1905
- function stringify(data) {
1906
- return stringifyTokens(data.tokens);
1907
- }
1908
- function isNameSafe(name) {
1909
- const [first, ...rest] = name;
1910
- return ID_START.test(first) && rest.every((char) => ID_CONTINUE.test(char));
1911
- }
1912
- function isNextNameSafe(token) {
1913
- if (token && token.type === "text")
1914
- return !ID_CONTINUE.test(token.value[0]);
1915
- return true;
1916
- }
1917
- }
1918
- });
1919
-
1920
1629
  // src/v2/standalone/external-tracker.ts
1921
1630
  var external_tracker_exports = {};
1922
1631
  __export(external_tracker_exports, {
@@ -4749,26 +4458,26 @@ var TagadaTrackerBundle = (() => {
4749
4458
  // Circuit Breaker Implementation
4750
4459
  checkRequestLimit(key) {
4751
4460
  const now = Date.now();
4752
- const history2 = this.requestHistory.get(key);
4753
- if (!history2) {
4461
+ const history = this.requestHistory.get(key);
4462
+ if (!history) {
4754
4463
  this.requestHistory.set(key, { count: 1, firstRequestTime: now });
4755
4464
  return;
4756
4465
  }
4757
- if (now - history2.firstRequestTime > this.WINDOW_MS) {
4466
+ if (now - history.firstRequestTime > this.WINDOW_MS) {
4758
4467
  this.requestHistory.set(key, { count: 1, firstRequestTime: now });
4759
4468
  return;
4760
4469
  }
4761
- history2.count++;
4762
- if (history2.count > this.MAX_REQUESTS) {
4470
+ history.count++;
4471
+ if (history.count > this.MAX_REQUESTS) {
4763
4472
  throw new TagadaCircuitBreakerError(
4764
- "Circuit Breaker: Too many requests to ".concat(key, " (").concat(history2.count, " in ").concat(this.WINDOW_MS, "ms)")
4473
+ "Circuit Breaker: Too many requests to ".concat(key, " (").concat(history.count, " in ").concat(this.WINDOW_MS, "ms)")
4765
4474
  );
4766
4475
  }
4767
4476
  }
4768
4477
  cleanupHistory() {
4769
4478
  const now = Date.now();
4770
- for (const [key, history2] of this.requestHistory.entries()) {
4771
- if (now - history2.firstRequestTime > this.WINDOW_MS) {
4479
+ for (const [key, history] of this.requestHistory.entries()) {
4480
+ if (now - history.firstRequestTime > this.WINDOW_MS) {
4772
4481
  this.requestHistory.delete(key);
4773
4482
  }
4774
4483
  }
@@ -4811,3262 +4520,125 @@ var TagadaTrackerBundle = (() => {
4811
4520
  }
4812
4521
  };
4813
4522
 
4814
- // ../../node_modules/.pnpm/@ua-parser-js+pro-enterprise@2.0.6/node_modules/@ua-parser-js/pro-enterprise/src/main/ua-parser.mjs
4815
- var LIBVERSION = "2.0.6";
4816
- var UA_MAX_LENGTH = 500;
4817
- var USER_AGENT = "user-agent";
4818
- var EMPTY = "";
4819
- var UNKNOWN = "?";
4820
- var TYPEOF = {
4821
- FUNCTION: "function",
4822
- OBJECT: "object",
4823
- STRING: "string",
4824
- UNDEFINED: "undefined"
4825
- };
4826
- var BROWSER = "browser";
4827
- var CPU = "cpu";
4828
- var DEVICE = "device";
4829
- var ENGINE = "engine";
4830
- var OS = "os";
4831
- var RESULT = "result";
4832
- var NAME = "name";
4833
- var TYPE = "type";
4834
- var VENDOR = "vendor";
4835
- var VERSION3 = "version";
4836
- var ARCHITECTURE = "architecture";
4837
- var MAJOR = "major";
4838
- var MODEL = "model";
4839
- var CONSOLE = "console";
4840
- var MOBILE = "mobile";
4841
- var TABLET = "tablet";
4842
- var SMARTTV = "smarttv";
4843
- var WEARABLE = "wearable";
4844
- var XR = "xr";
4845
- var EMBEDDED = "embedded";
4846
- var INAPP = "inapp";
4847
- var BRANDS = "brands";
4848
- var FORMFACTORS = "formFactors";
4849
- var FULLVERLIST = "fullVersionList";
4850
- var PLATFORM = "platform";
4851
- var PLATFORMVER = "platformVersion";
4852
- var BITNESS = "bitness";
4853
- var CH = "sec-ch-ua";
4854
- var CH_FULL_VER_LIST = CH + "-full-version-list";
4855
- var CH_ARCH = CH + "-arch";
4856
- var CH_BITNESS = CH + "-" + BITNESS;
4857
- var CH_FORM_FACTORS = CH + "-form-factors";
4858
- var CH_MOBILE = CH + "-" + MOBILE;
4859
- var CH_MODEL = CH + "-" + MODEL;
4860
- var CH_PLATFORM = CH + "-" + PLATFORM;
4861
- var CH_PLATFORM_VER = CH_PLATFORM + "-version";
4862
- var CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS];
4863
- var AMAZON = "Amazon";
4864
- var APPLE = "Apple";
4865
- var ASUS = "ASUS";
4866
- var BLACKBERRY = "BlackBerry";
4867
- var GOOGLE = "Google";
4868
- var HUAWEI = "Huawei";
4869
- var LENOVO = "Lenovo";
4870
- var HONOR = "Honor";
4871
- var LG = "LG";
4872
- var MICROSOFT = "Microsoft";
4873
- var MOTOROLA = "Motorola";
4874
- var NVIDIA = "Nvidia";
4875
- var ONEPLUS = "OnePlus";
4876
- var OPPO = "OPPO";
4877
- var SAMSUNG = "Samsung";
4878
- var SHARP = "Sharp";
4879
- var SONY = "Sony";
4880
- var XIAOMI = "Xiaomi";
4881
- var ZEBRA = "Zebra";
4882
- var CHROME = "Chrome";
4883
- var CHROMIUM = "Chromium";
4884
- var CHROMECAST = "Chromecast";
4885
- var EDGE = "Edge";
4886
- var FIREFOX = "Firefox";
4887
- var OPERA = "Opera";
4888
- var FACEBOOK = "Facebook";
4889
- var SOGOU = "Sogou";
4890
- var PREFIX_MOBILE = "Mobile ";
4891
- var SUFFIX_BROWSER = " Browser";
4892
- var WINDOWS = "Windows";
4893
- var isWindow = typeof window !== TYPEOF.UNDEFINED;
4894
- var NAVIGATOR = isWindow && window.navigator ? window.navigator : void 0;
4895
- var NAVIGATOR_UADATA = NAVIGATOR && NAVIGATOR.userAgentData ? NAVIGATOR.userAgentData : void 0;
4896
- var extend2 = function(defaultRgx, extensions) {
4897
- var mergedRgx = {};
4898
- var extraRgx = extensions;
4899
- if (!isExtensions(extensions)) {
4900
- extraRgx = {};
4901
- for (var i in extensions) {
4902
- for (var j in extensions[i]) {
4903
- extraRgx[j] = extensions[i][j].concat(extraRgx[j] ? extraRgx[j] : []);
4904
- }
4905
- }
4906
- }
4907
- for (var k in defaultRgx) {
4908
- mergedRgx[k] = extraRgx[k] && extraRgx[k].length % 2 === 0 ? extraRgx[k].concat(defaultRgx[k]) : defaultRgx[k];
4909
- }
4910
- return mergedRgx;
4911
- };
4912
- var enumerize = function(arr) {
4913
- var enums = {};
4914
- for (var i = 0; i < arr.length; i++) {
4915
- enums[arr[i].toUpperCase()] = arr[i];
4916
- }
4917
- return enums;
4918
- };
4919
- var has = function(str1, str2) {
4920
- if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {
4921
- for (var i in str1) {
4922
- if (lowerize(str2) == lowerize(str1[i])) return true;
4923
- }
4924
- return false;
4925
- }
4926
- return isString2(str1) ? lowerize(str2) == lowerize(str1) : false;
4927
- };
4928
- var isExtensions = function(obj, deep) {
4929
- for (var prop in obj) {
4930
- return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);
4931
- }
4932
- };
4933
- var isString2 = function(val) {
4934
- return typeof val === TYPEOF.STRING;
4935
- };
4936
- var itemListToArray = function(header) {
4937
- if (!header) return void 0;
4938
- var arr = [];
4939
- var tokens = strip(/\\?\"/g, header).split(",");
4940
- for (var i = 0; i < tokens.length; i++) {
4941
- if (tokens[i].indexOf(";") > -1) {
4942
- var token = trim2(tokens[i]).split(";v=");
4943
- arr[i] = { brand: token[0], version: token[1] };
4944
- } else {
4945
- arr[i] = trim2(tokens[i]);
4946
- }
4947
- }
4948
- return arr;
4949
- };
4950
- var lowerize = function(str) {
4951
- return isString2(str) ? str.toLowerCase() : str;
4952
- };
4953
- var majorize = function(version) {
4954
- return isString2(version) ? strip(/[^\d\.]/g, version).split(".")[0] : void 0;
4955
- };
4956
- var setProps = function(arr) {
4957
- for (var i in arr) {
4958
- if (!arr.hasOwnProperty(i)) continue;
4959
- var propName = arr[i];
4960
- if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {
4961
- this[propName[0]] = propName[1];
4962
- } else {
4963
- this[propName] = void 0;
4964
- }
4965
- }
4966
- return this;
4967
- };
4968
- var strip = function(pattern, str) {
4969
- return isString2(str) ? str.replace(pattern, EMPTY) : str;
4970
- };
4971
- var stripQuotes = function(str) {
4972
- return strip(/\\?\"/g, str);
4973
- };
4974
- var trim2 = function(str, len) {
4975
- str = strip(/^\s\s*/, String(str));
4976
- return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);
4977
- };
4978
- var rgxMapper = function(ua, arrays) {
4979
- if (!ua || !arrays) return;
4980
- var i = 0, j, k, p, q, matches, match2;
4981
- while (i < arrays.length && !matches) {
4982
- var regex = arrays[i], props = arrays[i + 1];
4983
- j = k = 0;
4984
- while (j < regex.length && !matches) {
4985
- if (!regex[j]) {
4986
- break;
4987
- }
4988
- matches = regex[j++].exec(ua);
4989
- if (!!matches) {
4990
- for (p = 0; p < props.length; p++) {
4991
- match2 = matches[++k];
4992
- q = props[p];
4993
- if (typeof q === TYPEOF.OBJECT && q.length > 0) {
4994
- if (q.length === 2) {
4995
- if (typeof q[1] == TYPEOF.FUNCTION) {
4996
- this[q[0]] = q[1].call(this, match2);
4997
- } else {
4998
- this[q[0]] = q[1];
4999
- }
5000
- } else if (q.length >= 3) {
5001
- if (typeof q[1] === TYPEOF.FUNCTION && !(q[1].exec && q[1].test)) {
5002
- if (q.length > 3) {
5003
- this[q[0]] = match2 ? q[1].apply(this, q.slice(2)) : void 0;
5004
- } else {
5005
- this[q[0]] = match2 ? q[1].call(this, match2, q[2]) : void 0;
5006
- }
5007
- } else {
5008
- if (q.length == 3) {
5009
- this[q[0]] = match2 ? match2.replace(q[1], q[2]) : void 0;
5010
- } else if (q.length == 4) {
5011
- this[q[0]] = match2 ? q[3].call(this, match2.replace(q[1], q[2])) : void 0;
5012
- } else if (q.length > 4) {
5013
- this[q[0]] = match2 ? q[3].apply(this, [match2.replace(q[1], q[2])].concat(q.slice(4))) : void 0;
5014
- }
5015
- }
5016
- }
5017
- } else {
5018
- this[q] = match2 ? match2 : void 0;
5019
- }
5020
- }
5021
- }
5022
- }
5023
- i += 2;
5024
- }
5025
- };
5026
- var strMapper = function(str, map) {
5027
- for (var i in map) {
5028
- if (typeof map[i] === TYPEOF.OBJECT && map[i].length > 0) {
5029
- for (var j = 0; j < map[i].length; j++) {
5030
- if (has(map[i][j], str)) {
5031
- return i === UNKNOWN ? void 0 : i;
5032
- }
5033
- }
5034
- } else if (has(map[i], str)) {
5035
- return i === UNKNOWN ? void 0 : i;
5036
- }
5037
- }
5038
- return map.hasOwnProperty("*") ? map["*"] : str;
5039
- };
5040
- var windowsVersionMap = {
5041
- "ME": "4.90",
5042
- "NT 3.51": "3.51",
5043
- "NT 4.0": "4.0",
5044
- "2000": ["5.0", "5.01"],
5045
- "XP": ["5.1", "5.2"],
5046
- "Vista": "6.0",
5047
- "7": "6.1",
5048
- "8": "6.2",
5049
- "8.1": "6.3",
5050
- "10": ["6.4", "10.0"],
5051
- "NT": ""
5052
- };
5053
- var formFactorsMap = {
5054
- "embedded": "Automotive",
5055
- "mobile": "Mobile",
5056
- "tablet": ["Tablet", "EInk"],
5057
- "smarttv": "TV",
5058
- "wearable": "Watch",
5059
- "xr": ["VR", "XR"],
5060
- "?": ["Desktop", "Unknown"],
5061
- "*": void 0
5062
- };
5063
- var browserHintsMap = {
5064
- "Chrome": "Google Chrome",
5065
- "Edge": "Microsoft Edge",
5066
- "Edge WebView2": "Microsoft Edge WebView2",
5067
- "Chrome WebView": "Android WebView",
5068
- "Chrome Headless": "HeadlessChrome",
5069
- "Huawei Browser": "HuaweiBrowser",
5070
- "MIUI Browser": "Miui Browser",
5071
- "Opera Mobi": "OperaMobile",
5072
- "Yandex": "YaBrowser"
5073
- };
5074
- var defaultRegexes = {
5075
- browser: [
5076
- [
5077
- // Most common regardless engine
5078
- /\b(?:crmo|crios)\/([\w\.]+)/i
5079
- // Chrome for Android/iOS
5080
- ],
5081
- [VERSION3, [NAME, PREFIX_MOBILE + "Chrome"]],
5082
- [
5083
- /webview.+edge\/([\w\.]+)/i
5084
- // Microsoft Edge
5085
- ],
5086
- [VERSION3, [NAME, EDGE + " WebView"]],
5087
- [
5088
- /edg(?:e|ios|a)?\/([\w\.]+)/i
5089
- ],
5090
- [VERSION3, [NAME, "Edge"]],
5091
- [
5092
- // Presto based
5093
- /(opera mini)\/([-\w\.]+)/i,
5094
- // Opera Mini
5095
- /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
5096
- // Opera Mobi/Tablet
5097
- /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
5098
- // Opera
5099
- ],
5100
- [NAME, VERSION3],
5101
- [
5102
- /opios[\/ ]+([\w\.]+)/i
5103
- // Opera mini on iphone >= 8.0
5104
- ],
5105
- [VERSION3, [NAME, OPERA + " Mini"]],
5106
- [
5107
- /\bop(?:rg)?x\/([\w\.]+)/i
5108
- // Opera GX
5109
- ],
5110
- [VERSION3, [NAME, OPERA + " GX"]],
5111
- [
5112
- /\bopr\/([\w\.]+)/i
5113
- // Opera Webkit
5114
- ],
5115
- [VERSION3, [NAME, OPERA]],
5116
- [
5117
- // Mixed
5118
- /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i
5119
- // Baidu
5120
- ],
5121
- [VERSION3, [NAME, "Baidu"]],
5122
- [
5123
- /\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i
5124
- // Maxthon
5125
- ],
5126
- [VERSION3, [NAME, "Maxthon"]],
5127
- [
5128
- /(kindle)\/([\w\.]+)/i,
5129
- // Kindle
5130
- /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
5131
- // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
5132
- // Trident based
5133
- /(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,
5134
- // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
5135
- /(?:ms|\()(ie) ([\w\.]+)/i,
5136
- // Internet Explorer
5137
- // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon
5138
- /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser|palemoon)\/([-\w\.]+)/i,
5139
- // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
5140
- /(heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i,
5141
- // HeyTap/Ovi/115/Surf
5142
- /(qwant)(?:ios|mobile)\/([\d\.]+)/i,
5143
- // Qwant
5144
- /(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i
5145
- // Ecosia/Weibo
5146
- ],
5147
- [NAME, VERSION3],
5148
- [
5149
- /quark(?:pc)?\/([-\w\.]+)/i
5150
- // Quark
5151
- ],
5152
- [VERSION3, [NAME, "Quark"]],
5153
- [
5154
- /\bddg\/([\w\.]+)/i
5155
- // DuckDuckGo
5156
- ],
5157
- [VERSION3, [NAME, "DuckDuckGo"]],
5158
- [
5159
- /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
5160
- // UCBrowser
5161
- ],
5162
- [VERSION3, [NAME, "UCBrowser"]],
5163
- [
5164
- /microm.+\bqbcore\/([\w\.]+)/i,
5165
- // WeChat Desktop for Windows Built-in Browser
5166
- /\bqbcore\/([\w\.]+).+microm/i,
5167
- /micromessenger\/([\w\.]+)/i
5168
- // WeChat
5169
- ],
5170
- [VERSION3, [NAME, "WeChat"]],
5171
- [
5172
- /konqueror\/([\w\.]+)/i
5173
- // Konqueror
5174
- ],
5175
- [VERSION3, [NAME, "Konqueror"]],
5176
- [
5177
- /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
5178
- // IE11
5179
- ],
5180
- [VERSION3, [NAME, "IE"]],
5181
- [
5182
- /ya(?:search)?browser\/([\w\.]+)/i
5183
- // Yandex
5184
- ],
5185
- [VERSION3, [NAME, "Yandex"]],
5186
- [
5187
- /slbrowser\/([\w\.]+)/i
5188
- // Smart Lenovo Browser
5189
- ],
5190
- [VERSION3, [NAME, "Smart " + LENOVO + SUFFIX_BROWSER]],
5191
- [
5192
- /(avast|avg)\/([\w\.]+)/i
5193
- // Avast/AVG Secure Browser
5194
- ],
5195
- [[NAME, /(.+)/, "$1 Secure" + SUFFIX_BROWSER], VERSION3],
5196
- [
5197
- /\bfocus\/([\w\.]+)/i
5198
- // Firefox Focus
5199
- ],
5200
- [VERSION3, [NAME, FIREFOX + " Focus"]],
5201
- [
5202
- /\bopt\/([\w\.]+)/i
5203
- // Opera Touch
5204
- ],
5205
- [VERSION3, [NAME, OPERA + " Touch"]],
5206
- [
5207
- /coc_coc\w+\/([\w\.]+)/i
5208
- // Coc Coc Browser
5209
- ],
5210
- [VERSION3, [NAME, "Coc Coc"]],
5211
- [
5212
- /dolfin\/([\w\.]+)/i
5213
- // Dolphin
5214
- ],
5215
- [VERSION3, [NAME, "Dolphin"]],
5216
- [
5217
- /coast\/([\w\.]+)/i
5218
- // Opera Coast
5219
- ],
5220
- [VERSION3, [NAME, OPERA + " Coast"]],
5221
- [
5222
- /miuibrowser\/([\w\.]+)/i
5223
- // MIUI Browser
5224
- ],
5225
- [VERSION3, [NAME, "MIUI" + SUFFIX_BROWSER]],
5226
- [
5227
- /fxios\/([\w\.-]+)/i
5228
- // Firefox for iOS
5229
- ],
5230
- [VERSION3, [NAME, PREFIX_MOBILE + FIREFOX]],
5231
- [
5232
- /\bqihoobrowser\/?([\w\.]*)/i
5233
- // 360
5234
- ],
5235
- [VERSION3, [NAME, "360"]],
5236
- [
5237
- /\b(qq)\/([\w\.]+)/i
5238
- // QQ
5239
- ],
5240
- [[NAME, /(.+)/, "$1Browser"], VERSION3],
5241
- [
5242
- /(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
5243
- ],
5244
- [[NAME, /(.+)/, "$1" + SUFFIX_BROWSER], VERSION3],
5245
- [
5246
- // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
5247
- /samsungbrowser\/([\w\.]+)/i
5248
- // Samsung Internet
5249
- ],
5250
- [VERSION3, [NAME, SAMSUNG + " Internet"]],
5251
- [
5252
- /metasr[\/ ]?([\d\.]+)/i
5253
- // Sogou Explorer
5254
- ],
5255
- [VERSION3, [NAME, SOGOU + " Explorer"]],
5256
- [
5257
- /(sogou)mo\w+\/([\d\.]+)/i
5258
- // Sogou Mobile
5259
- ],
5260
- [[NAME, SOGOU + " Mobile"], VERSION3],
5261
- [
5262
- /(electron)\/([\w\.]+) safari/i,
5263
- // Electron-based App
5264
- /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
5265
- // Tesla
5266
- /m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i
5267
- // QQ/2345
5268
- ],
5269
- [NAME, VERSION3],
5270
- [
5271
- /(lbbrowser|rekonq)/i
5272
- // LieBao Browser/Rekonq
5273
- ],
5274
- [NAME],
5275
- [
5276
- /ome\/([\w\.]+) \w* ?(iron) saf/i,
5277
- // Iron
5278
- /ome\/([\w\.]+).+qihu (360)[es]e/i
5279
- // 360
5280
- ],
5281
- [VERSION3, NAME],
5282
- [
5283
- // WebView
5284
- /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
5285
- // Facebook App for iOS & Android
5286
- ],
5287
- [[NAME, FACEBOOK], VERSION3, [TYPE, INAPP]],
5288
- [
5289
- /(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
5290
- // Kakao App
5291
- /(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
5292
- // Naver InApp
5293
- /(daum)apps[\/ ]([\w\.]+)/i,
5294
- // Daum App
5295
- /safari (line)\/([\w\.]+)/i,
5296
- // Line App for iOS
5297
- /\b(line)\/([\w\.]+)\/iab/i,
5298
- // Line App for Android
5299
- /(alipay)client\/([\w\.]+)/i,
5300
- // Alipay
5301
- /(twitter)(?:and| f.+e\/([\w\.]+))/i,
5302
- // Twitter
5303
- /(bing)(?:web|sapphire)\/([\w\.]+)/i,
5304
- // Bing
5305
- /(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i
5306
- // Instagram/Snapchat/Klarna
5307
- ],
5308
- [NAME, VERSION3, [TYPE, INAPP]],
5309
- [
5310
- /\bgsa\/([\w\.]+) .*safari\//i
5311
- // Google Search Appliance on iOS
5312
- ],
5313
- [VERSION3, [NAME, "GSA"], [TYPE, INAPP]],
5314
- [
5315
- /musical_ly(?:.+app_?version\/|_)([\w\.]+)/i
5316
- // TikTok
5317
- ],
5318
- [VERSION3, [NAME, "TikTok"], [TYPE, INAPP]],
5319
- [
5320
- /\[(linkedin)app\]/i
5321
- // LinkedIn App for iOS & Android
5322
- ],
5323
- [NAME, [TYPE, INAPP]],
5324
- [
5325
- /(zalo(?:app)?)[\/\sa-z]*([\w\.-]+)/i
5326
- // Zalo
5327
- ],
5328
- [[NAME, /(.+)/, "Zalo"], VERSION3, [TYPE, INAPP]],
5329
- [
5330
- /(chromium)[\/ ]([-\w\.]+)/i
5331
- // Chromium
5332
- ],
5333
- [NAME, VERSION3],
5334
- [
5335
- /headlesschrome(?:\/([\w\.]+)| )/i
5336
- // Chrome Headless
5337
- ],
5338
- [VERSION3, [NAME, CHROME + " Headless"]],
5339
- [
5340
- /wv\).+chrome\/([\w\.]+).+edgw\//i
5341
- // Edge WebView2
5342
- ],
5343
- [VERSION3, [NAME, EDGE + " WebView2"]],
5344
- [
5345
- / wv\).+(chrome)\/([\w\.]+)/i
5346
- // Chrome WebView
5347
- ],
5348
- [[NAME, CHROME + " WebView"], VERSION3],
5349
- [
5350
- /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
5351
- // Android Browser
5352
- ],
5353
- [VERSION3, [NAME, "Android" + SUFFIX_BROWSER]],
5354
- [
5355
- /chrome\/([\w\.]+) mobile/i
5356
- // Chrome Mobile
5357
- ],
5358
- [VERSION3, [NAME, PREFIX_MOBILE + "Chrome"]],
5359
- [
5360
- /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
5361
- // Chrome/OmniWeb/Arora/Tizen/Nokia
5362
- ],
5363
- [NAME, VERSION3],
5364
- [
5365
- /version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i
5366
- // Safari Mobile
5367
- ],
5368
- [VERSION3, [NAME, PREFIX_MOBILE + "Safari"]],
5369
- [
5370
- /iphone .*mobile(?:\/\w+ | ?)safari/i
5371
- ],
5372
- [[NAME, PREFIX_MOBILE + "Safari"]],
5373
- [
5374
- /version\/([\w\.\,]+) .*(safari)/i
5375
- // Safari
5376
- ],
5377
- [VERSION3, NAME],
5378
- [
5379
- /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
5380
- // Safari < 3.0
5381
- ],
5382
- [NAME, [VERSION3, "1"]],
5383
- [
5384
- /(webkit|khtml)\/([\w\.]+)/i
5385
- ],
5386
- [NAME, VERSION3],
5387
- [
5388
- // Gecko based
5389
- /(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i
5390
- // Firefox Mobile
5391
- ],
5392
- [[NAME, PREFIX_MOBILE + FIREFOX], VERSION3],
5393
- [
5394
- /(navigator|netscape\d?)\/([-\w\.]+)/i
5395
- // Netscape
5396
- ],
5397
- [[NAME, "Netscape"], VERSION3],
5398
- [
5399
- /(wolvic|librewolf)\/([\w\.]+)/i
5400
- // Wolvic/LibreWolf
5401
- ],
5402
- [NAME, VERSION3],
5403
- [
5404
- /mobile vr; rv:([\w\.]+)\).+firefox/i
5405
- // Firefox Reality
5406
- ],
5407
- [VERSION3, [NAME, FIREFOX + " Reality"]],
5408
- [
5409
- /ekiohf.+(flow)\/([\w\.]+)/i,
5410
- // Flow
5411
- /(swiftfox)/i,
5412
- // Swiftfox
5413
- /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
5414
- // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
5415
- /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\/([-\w\.]+)$/i,
5416
- // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
5417
- /(firefox)\/([\w\.]+)/i,
5418
- // Other Firefox-based
5419
- /(mozilla)\/([\w\.]+(?= .+rv\:.+gecko\/\d+)|[0-4][\w\.]+(?!.+compatible))/i,
5420
- // Mozilla
5421
- // Other
5422
- /(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
5423
- // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
5424
- /\b(links) \(([\w\.]+)/i
5425
- // Links
5426
- ],
5427
- [NAME, [VERSION3, /_/g, "."]],
5428
- [
5429
- /(cobalt)\/([\w\.]+)/i
5430
- // Cobalt
5431
- ],
5432
- [NAME, [VERSION3, /[^\d\.]+./, EMPTY]]
5433
- ],
5434
- cpu: [
5435
- [
5436
- /\b((amd|x|x86[-_]?|wow|win)64)\b/i
5437
- // AMD64 (x64)
5438
- ],
5439
- [[ARCHITECTURE, "amd64"]],
5440
- [
5441
- /(ia32(?=;))/i,
5442
- // IA32 (quicktime)
5443
- /\b((i[346]|x)86)(pc)?\b/i
5444
- // IA32 (x86)
5445
- ],
5446
- [[ARCHITECTURE, "ia32"]],
5447
- [
5448
- /\b(aarch64|arm(v?[89]e?l?|_?64))\b/i
5449
- // ARM64
5450
- ],
5451
- [[ARCHITECTURE, "arm64"]],
5452
- [
5453
- /\b(arm(v[67])?ht?n?[fl]p?)\b/i
5454
- // ARMHF
5455
- ],
5456
- [[ARCHITECTURE, "armhf"]],
5457
- [
5458
- // PocketPC mistakenly identified as PowerPC
5459
- /( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
5460
- ],
5461
- [[ARCHITECTURE, "arm"]],
5462
- [
5463
- / sun4\w[;\)]/i
5464
- // SPARC
5465
- ],
5466
- [[ARCHITECTURE, "sparc"]],
5467
- [
5468
- // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
5469
- /\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i,
5470
- /((ppc|powerpc)(64)?)( mac|;|\))/i,
5471
- // PowerPC
5472
- /(?:osf1|[freopnt]{3,4}bsd) (alpha)/i
5473
- // Alpha
5474
- ],
5475
- [[ARCHITECTURE, /ower/, EMPTY, lowerize]],
5476
- [
5477
- /mc680.0/i
5478
- ],
5479
- [[ARCHITECTURE, "68k"]],
5480
- [
5481
- /winnt.+\[axp/i
5482
- ],
5483
- [[ARCHITECTURE, "alpha"]]
5484
- ],
5485
- device: [
5486
- [
5487
- //////////////////////////
5488
- // MOBILES & TABLETS
5489
- /////////////////////////
5490
- // Samsung
5491
- /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
5492
- ],
5493
- [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]],
5494
- [
5495
- /\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
5496
- /samsung[- ]((?!sm-[lr]|browser)[-\w]+)/i,
5497
- /sec-(sgh\w+)/i
5498
- ],
5499
- [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]],
5500
- [
5501
- // Apple
5502
- /(?:\/|\()(ip(?:hone|od)[\w, ]*)[\/\);]/i
5503
- // iPod/iPhone
5504
- ],
5505
- [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],
5506
- [
5507
- /\b(?:ios|apple\w+)\/.+[\(\/](ipad)/i,
5508
- // iPad
5509
- /\b(ipad)[\d,]*[;\] ].+(mac |i(pad)?)os/i
5510
- ],
5511
- [MODEL, [VENDOR, APPLE], [TYPE, TABLET]],
5512
- [
5513
- /(macintosh);/i
5514
- ],
5515
- [MODEL, [VENDOR, APPLE]],
5516
- [
5517
- // Sharp
5518
- /\b(sh-?[altvz]?\d\d[a-ekm]?)/i
5519
- ],
5520
- [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]],
5521
- [
5522
- // Honor
5523
- /\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
5524
- ],
5525
- [MODEL, [VENDOR, HONOR], [TYPE, TABLET]],
5526
- [
5527
- /honor([-\w ]+)[;\)]/i
5528
- ],
5529
- [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]],
5530
- [
5531
- // Huawei
5532
- /\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
5533
- ],
5534
- [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]],
5535
- [
5536
- /(?:huawei) ?([-\w ]+)[;\)]/i,
5537
- /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][\dc][adnt]?)\b(?!.+d\/s)/i
5538
- ],
5539
- [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]],
5540
- [
5541
- // Xiaomi
5542
- /oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
5543
- /\b(?:xiao)?((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i
5544
- // Mi Pad tablets
5545
- ],
5546
- [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, TABLET]],
5547
- [
5548
- /\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,
5549
- // Xiaomi POCO
5550
- /\b; (\w+) build\/hm\1/i,
5551
- // Xiaomi Hongmi 'numeric' models
5552
- /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
5553
- // Xiaomi Hongmi
5554
- /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
5555
- // Xiaomi Redmi
5556
- /oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,
5557
- // Xiaomi Redmi 'numeric' models
5558
- /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\d{0,2}\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\))/i,
5559
- // Xiaomi Mi
5560
- / ([\w ]+) miui\/v?\d/i
5561
- ],
5562
- [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, MOBILE]],
5563
- [
5564
- // OnePlus
5565
- /droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-k]\w[1m]10)\b/i,
5566
- /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
5567
- ],
5568
- [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]],
5569
- [
5570
- // OPPO
5571
- /; (\w+) bui.+ oppo/i,
5572
- /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
5573
- ],
5574
- [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]],
5575
- [
5576
- /\b(opd2(\d{3}a?))(?: bui|\))/i
5577
- ],
5578
- [MODEL, [VENDOR, strMapper, { "OnePlus": ["203", "304", "403", "404", "413", "415"], "*": OPPO }], [TYPE, TABLET]],
5579
- [
5580
- // BLU
5581
- /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i
5582
- // Vivo series
5583
- ],
5584
- [MODEL, [VENDOR, "BLU"], [TYPE, MOBILE]],
5585
- [
5586
- // Vivo
5587
- /; vivo (\w+)(?: bui|\))/i,
5588
- /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
5589
- ],
5590
- [MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]],
5591
- [
5592
- // Realme
5593
- /\b(rmx[1-3]\d{3})(?: bui|;|\))/i
5594
- ],
5595
- [MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]],
5596
- [
5597
- // Lenovo
5598
- /(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
5599
- /lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
5600
- ],
5601
- [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]],
5602
- [
5603
- /lenovo[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i
5604
- ],
5605
- [MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]],
5606
- [
5607
- // Motorola
5608
- /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
5609
- /\bmot(?:orola)?[- ]([\w\s]+)(\)| bui)/i,
5610
- /((?:moto(?! 360)[-\w\(\) ]+|xt\d{3,4}[cgkosw\+]?[-\d]*|nexus 6)(?= bui|\)))/i
5611
- ],
5612
- [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]],
5613
- [
5614
- /\b(mz60\d|xoom[2 ]{0,2}) build\//i
5615
- ],
5616
- [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]],
5617
- [
5618
- // LG
5619
- /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
5620
- ],
5621
- [MODEL, [VENDOR, LG], [TYPE, TABLET]],
5622
- [
5623
- /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
5624
- /\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,
5625
- /\blg-?([\d\w]+) bui/i
5626
- ],
5627
- [MODEL, [VENDOR, LG], [TYPE, MOBILE]],
5628
- [
5629
- // Nokia
5630
- /(nokia) (t[12][01])/i
5631
- ],
5632
- [VENDOR, MODEL, [TYPE, TABLET]],
5633
- [
5634
- /(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
5635
- /nokia[-_ ]?(([-\w\. ]*?))( bui|\)|;|\/)/i
5636
- ],
5637
- [[MODEL, /_/g, " "], [TYPE, MOBILE], [VENDOR, "Nokia"]],
5638
- [
5639
- // Google
5640
- /(pixel (c|tablet))\b/i
5641
- // Google Pixel C/Tablet
5642
- ],
5643
- [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]],
5644
- [
5645
- // Google Pixel
5646
- /droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\d ]*a?( pro)?( xl)?( fold)?( \(5g\))?)( bui|\))/i
5647
- ],
5648
- [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]],
5649
- [
5650
- /(google) (pixelbook( go)?)/i
5651
- ],
5652
- [VENDOR, MODEL],
5653
- [
5654
- // Sony
5655
- /droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-\w\w\d\d)(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
5656
- ],
5657
- [MODEL, [VENDOR, SONY], [TYPE, MOBILE]],
5658
- [
5659
- /sony tablet [ps]/i,
5660
- /\b(?:sony)?sgp\w+(?: bui|\))/i
5661
- ],
5662
- [[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE, TABLET]],
5663
- [
5664
- // Amazon
5665
- /(alexa)webm/i,
5666
- /(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,
5667
- // Kindle Fire without Silk / Echo Show
5668
- /(kf[a-z]+)( bui|\)).+silk\//i
5669
- // Kindle Fire HD
5670
- ],
5671
- [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]],
5672
- [
5673
- /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
5674
- // Fire Phone
5675
- ],
5676
- [[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE, MOBILE]],
5677
- [
5678
- // BlackBerry
5679
- /(playbook);[-\w\),; ]+(rim)/i
5680
- // BlackBerry PlayBook
5681
- ],
5682
- [MODEL, VENDOR, [TYPE, TABLET]],
5683
- [
5684
- /\b((?:bb[a-f]|st[hv])100-\d)/i,
5685
- /(?:blackberry|\(bb10;) (\w+)/i
5686
- ],
5687
- [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]],
5688
- [
5689
- // Asus
5690
- /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
5691
- ],
5692
- [MODEL, [VENDOR, ASUS], [TYPE, TABLET]],
5693
- [
5694
- / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
5695
- ],
5696
- [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]],
5697
- [
5698
- // HTC
5699
- /(nexus 9)/i
5700
- // HTC Nexus 9
5701
- ],
5702
- [MODEL, [VENDOR, "HTC"], [TYPE, TABLET]],
5703
- [
5704
- /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
5705
- // HTC
5706
- // ZTE
5707
- /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
5708
- /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
5709
- // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
5710
- ],
5711
- [VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]],
5712
- [
5713
- // TCL
5714
- /tcl (xess p17aa)/i,
5715
- /droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i
5716
- ],
5717
- [MODEL, [VENDOR, "TCL"], [TYPE, TABLET]],
5718
- [
5719
- /droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i
5720
- ],
5721
- [MODEL, [VENDOR, "TCL"], [TYPE, MOBILE]],
5722
- [
5723
- // itel
5724
- /(itel) ((\w+))/i
5725
- ],
5726
- [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { "tablet": ["p10001l", "w7001"], "*": "mobile" }]],
5727
- [
5728
- // Acer
5729
- /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
5730
- ],
5731
- [MODEL, [VENDOR, "Acer"], [TYPE, TABLET]],
5732
- [
5733
- // Meizu
5734
- /droid.+; (m[1-5] note) bui/i,
5735
- /\bmz-([-\w]{2,})/i
5736
- ],
5737
- [MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]],
5738
- [
5739
- // Ulefone
5740
- /; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
5741
- ],
5742
- [MODEL, [VENDOR, "Ulefone"], [TYPE, MOBILE]],
5743
- [
5744
- // Energizer
5745
- /; (energy ?\w+)(?: bui|\))/i,
5746
- /; energizer ([\w ]+)(?: bui|\))/i
5747
- ],
5748
- [MODEL, [VENDOR, "Energizer"], [TYPE, MOBILE]],
5749
- [
5750
- // Cat
5751
- /; cat (b35);/i,
5752
- /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i
5753
- ],
5754
- [MODEL, [VENDOR, "Cat"], [TYPE, MOBILE]],
5755
- [
5756
- // Smartfren
5757
- /((?:new )?andromax[\w- ]+)(?: bui|\))/i
5758
- ],
5759
- [MODEL, [VENDOR, "Smartfren"], [TYPE, MOBILE]],
5760
- [
5761
- // Nothing
5762
- /droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i
5763
- ],
5764
- [MODEL, [VENDOR, "Nothing"], [TYPE, MOBILE]],
5765
- [
5766
- // Archos
5767
- /; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
5768
- /archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
5769
- ],
5770
- [MODEL, [VENDOR, "Archos"], [TYPE, TABLET]],
5771
- [
5772
- /archos ([\w ]+)( b|\))/i,
5773
- /; (ac[3-6]\d\w{2,8})( b|\))/i
5774
- ],
5775
- [MODEL, [VENDOR, "Archos"], [TYPE, MOBILE]],
5776
- [
5777
- // HMD
5778
- /; (n159v)/i
5779
- ],
5780
- [MODEL, [VENDOR, "HMD"], [TYPE, MOBILE]],
5781
- [
5782
- // MIXED
5783
- /(imo) (tab \w+)/i,
5784
- // IMO
5785
- /(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i
5786
- // Infinix XPad / Tecno
5787
- ],
5788
- [VENDOR, MODEL, [TYPE, TABLET]],
5789
- [
5790
- /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
5791
- // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan
5792
- // BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko
5793
- /; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i,
5794
- /(hp) ([\w ]+\w)/i,
5795
- // HP iPAQ
5796
- /(microsoft); (lumia[\w ]+)/i,
5797
- // Microsoft Lumia
5798
- /(oppo) ?([\w ]+) bui/i,
5799
- // OPPO
5800
- /(hisense) ([ehv][\w ]+)\)/i,
5801
- // Hisense
5802
- /droid[^;]+; (philips)[_ ]([sv-x][\d]{3,4}[xz]?)/i
5803
- // Philips
5804
- ],
5805
- [VENDOR, MODEL, [TYPE, MOBILE]],
5806
- [
5807
- /(kobo)\s(ereader|touch)/i,
5808
- // Kobo
5809
- /(hp).+(touchpad(?!.+tablet)|tablet)/i,
5810
- // HP TouchPad
5811
- /(kindle)\/([\w\.]+)/i
5812
- // Kindle
5813
- ],
5814
- [VENDOR, MODEL, [TYPE, TABLET]],
5815
- [
5816
- /(surface duo)/i
5817
- // Surface Duo
5818
- ],
5819
- [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]],
5820
- [
5821
- /droid [\d\.]+; (fp\du?)(?: b|\))/i
5822
- // Fairphone
5823
- ],
5824
- [MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]],
5825
- [
5826
- /((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i
5827
- // Nvidia Tablets
5828
- ],
5829
- [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]],
5830
- [
5831
- /(sprint) (\w+)/i
5832
- // Sprint Phones
5833
- ],
5834
- [VENDOR, MODEL, [TYPE, MOBILE]],
5835
- [
5836
- /(kin\.[onetw]{3})/i
5837
- // Microsoft Kin
5838
- ],
5839
- [[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE, MOBILE]],
5840
- [
5841
- /droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
5842
- // Zebra
5843
- ],
5844
- [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]],
5845
- [
5846
- /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
5847
- ],
5848
- [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]],
5849
- [
5850
- ///////////////////
5851
- // SMARTTVS
5852
- ///////////////////
5853
- /(philips)[\w ]+tv/i,
5854
- // Philips
5855
- /smart-tv.+(samsung)/i
5856
- // Samsung
5857
- ],
5858
- [VENDOR, [TYPE, SMARTTV]],
5859
- [
5860
- /hbbtv.+maple;(\d+)/i
5861
- ],
5862
- [[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]],
5863
- [
5864
- /(vizio)(?: |.+model\/)(\w+-\w+)/i,
5865
- // Vizio
5866
- /tcast.+(lg)e?. ([-\w]+)/i
5867
- // LG SmartTV
5868
- ],
5869
- [VENDOR, MODEL, [TYPE, SMARTTV]],
5870
- [
5871
- /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
5872
- ],
5873
- [[VENDOR, LG], [TYPE, SMARTTV]],
5874
- [
5875
- /(apple) ?tv/i
5876
- // Apple TV
5877
- ],
5878
- [VENDOR, [MODEL, APPLE + " TV"], [TYPE, SMARTTV]],
5879
- [
5880
- /crkey.*devicetype\/chromecast/i
5881
- // Google Chromecast Third Generation
5882
- ],
5883
- [[MODEL, CHROMECAST + " Third Generation"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
5884
- [
5885
- /crkey.*devicetype\/([^/]*)/i
5886
- // Google Chromecast with specific device type
5887
- ],
5888
- [[MODEL, /^/, "Chromecast "], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
5889
- [
5890
- /fuchsia.*crkey/i
5891
- // Google Chromecast Nest Hub
5892
- ],
5893
- [[MODEL, CHROMECAST + " Nest Hub"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
5894
- [
5895
- /crkey/i
5896
- // Google Chromecast, Linux-based or unknown
5897
- ],
5898
- [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
5899
- [
5900
- /(portaltv)/i
5901
- // Facebook Portal TV
5902
- ],
5903
- [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]],
5904
- [
5905
- /droid.+aft(\w+)( bui|\))/i
5906
- // Fire TV
5907
- ],
5908
- [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]],
5909
- [
5910
- /(shield \w+ tv)/i
5911
- // Nvidia Shield TV
5912
- ],
5913
- [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]],
5914
- [
5915
- /\(dtv[\);].+(aquos)/i,
5916
- /(aquos-tv[\w ]+)\)/i
5917
- // Sharp
5918
- ],
5919
- [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],
5920
- [
5921
- /(bravia[\w ]+)( bui|\))/i
5922
- // Sony
5923
- ],
5924
- [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]],
5925
- [
5926
- /(mi(tv|box)-?\w+) bui/i
5927
- // Xiaomi
5928
- ],
5929
- [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]],
5930
- [
5931
- /Hbbtv.*(technisat) (.*);/i
5932
- // TechniSAT
5933
- ],
5934
- [VENDOR, MODEL, [TYPE, SMARTTV]],
5935
- [
5936
- /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
5937
- // Roku
5938
- /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
5939
- // HbbTV devices
5940
- ],
5941
- [[VENDOR, /.+\/(\w+)/, "$1", strMapper, { "LG": "lge" }], [MODEL, trim2], [TYPE, SMARTTV]],
5942
- [
5943
- ///////////////////
5944
- // CONSOLES
5945
- ///////////////////
5946
- /(playstation \w+)/i
5947
- // Playstation
5948
- ],
5949
- [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]],
5950
- [
5951
- /\b(xbox(?: one)?(?!; xbox))[\); ]/i
5952
- // Microsoft Xbox
5953
- ],
5954
- [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]],
5955
- [
5956
- /(ouya)/i,
5957
- // Ouya
5958
- /(nintendo) (\w+)/i,
5959
- // Nintendo
5960
- /(retroid) (pocket ([^\)]+))/i
5961
- // Retroid Pocket
5962
- ],
5963
- [VENDOR, MODEL, [TYPE, CONSOLE]],
5964
- [
5965
- /droid.+; (shield)( bui|\))/i
5966
- // Nvidia Portable
5967
- ],
5968
- [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]],
5969
- [
5970
- ///////////////////
5971
- // WEARABLES
5972
- ///////////////////
5973
- /\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i
5974
- // Samsung Galaxy Watch
5975
- ],
5976
- [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]],
5977
- [
5978
- /((pebble))app/i,
5979
- // Pebble
5980
- /(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i
5981
- // Asus ZenWatch / LG Watch / Pixel Watch
5982
- ],
5983
- [VENDOR, MODEL, [TYPE, WEARABLE]],
5984
- [
5985
- /(ow(?:19|20)?we?[1-3]{1,3})/i
5986
- // Oppo Watch
5987
- ],
5988
- [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]],
5989
- [
5990
- /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
5991
- // Apple Watch
5992
- ],
5993
- [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]],
5994
- [
5995
- /(opwwe\d{3})/i
5996
- // OnePlus Watch
5997
- ],
5998
- [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]],
5999
- [
6000
- /(moto 360)/i
6001
- // Motorola 360
6002
- ],
6003
- [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]],
6004
- [
6005
- /(smartwatch 3)/i
6006
- // Sony SmartWatch
6007
- ],
6008
- [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]],
6009
- [
6010
- /(g watch r)/i
6011
- // LG G Watch R
6012
- ],
6013
- [MODEL, [VENDOR, LG], [TYPE, WEARABLE]],
6014
- [
6015
- /droid.+; (wt63?0{2,3})\)/i
6016
- ],
6017
- [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]],
6018
- [
6019
- ///////////////////
6020
- // XR
6021
- ///////////////////
6022
- /droid.+; (glass) \d/i
6023
- // Google Glass
6024
- ],
6025
- [MODEL, [VENDOR, GOOGLE], [TYPE, XR]],
6026
- [
6027
- /(pico) ([\w ]+) os\d/i
6028
- // Pico
6029
- ],
6030
- [VENDOR, MODEL, [TYPE, XR]],
6031
- [
6032
- /(quest( \d| pro)?s?).+vr/i
6033
- // Meta Quest
6034
- ],
6035
- [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]],
6036
- [
6037
- /mobile vr; rv.+firefox/i
6038
- // Unidentifiable VR device using Firefox Reality / Wolvic
6039
- ],
6040
- [[TYPE, XR]],
6041
- [
6042
- ///////////////////
6043
- // EMBEDDED
6044
- ///////////////////
6045
- /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
6046
- // Tesla
6047
- ],
6048
- [VENDOR, [TYPE, EMBEDDED]],
6049
- [
6050
- /(aeobc)\b/i
6051
- // Echo Dot
6052
- ],
6053
- [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]],
6054
- [
6055
- /(homepod).+mac os/i
6056
- // Apple HomePod
6057
- ],
6058
- [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]],
6059
- [
6060
- /windows iot/i
6061
- // Unidentifiable embedded device using Windows IoT
6062
- ],
6063
- [[TYPE, EMBEDDED]],
6064
- [
6065
- ////////////////////
6066
- // MIXED (GENERIC)
6067
- ///////////////////
6068
- /droid.+; ([\w- ]+) (4k|android|smart|google)[- ]?tv/i
6069
- // Unidentifiable SmartTV
6070
- ],
6071
- [MODEL, [TYPE, SMARTTV]],
6072
- [
6073
- /\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\w ]+safari)\b/i
6074
- ],
6075
- [[TYPE, SMARTTV]],
6076
- [
6077
- /droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew|; hmsc).+?(mobile|vr|\d) safari/i
6078
- ],
6079
- [MODEL, [TYPE, strMapper, { "mobile": "Mobile", "xr": "VR", "*": TABLET }]],
6080
- [
6081
- /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
6082
- // Unidentifiable Tablet
6083
- ],
6084
- [[TYPE, TABLET]],
6085
- [
6086
- /(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
6087
- // Unidentifiable Mobile
6088
- ],
6089
- [[TYPE, MOBILE]],
6090
- [
6091
- /droid .+?; ([\w\. -]+)( bui|\))/i
6092
- // Generic Android Device
6093
- ],
6094
- [MODEL, [VENDOR, "Generic"]]
6095
- ],
6096
- engine: [
6097
- [
6098
- /windows.+ edge\/([\w\.]+)/i
6099
- // EdgeHTML
6100
- ],
6101
- [VERSION3, [NAME, EDGE + "HTML"]],
6102
- [
6103
- /(arkweb)\/([\w\.]+)/i
6104
- // ArkWeb
6105
- ],
6106
- [NAME, VERSION3],
6107
- [
6108
- /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
6109
- // Blink
6110
- ],
6111
- [VERSION3, [NAME, "Blink"]],
6112
- [
6113
- /(presto)\/([\w\.]+)/i,
6114
- // Presto
6115
- /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,
6116
- // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo
6117
- /ekioh(flow)\/([\w\.]+)/i,
6118
- // Flow
6119
- /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
6120
- // KHTML/Tasman/Links
6121
- /(icab)[\/ ]([23]\.[\d\.]+)/i,
6122
- // iCab
6123
- /\b(libweb)/i
6124
- // LibWeb
6125
- ],
6126
- [NAME, VERSION3],
6127
- [
6128
- /ladybird\//i
6129
- ],
6130
- [[NAME, "LibWeb"]],
6131
- [
6132
- /rv\:([\w\.]{1,9})\b.+(gecko)/i
6133
- // Gecko
6134
- ],
6135
- [VERSION3, NAME]
6136
- ],
6137
- os: [
6138
- [
6139
- // Windows
6140
- /(windows nt) (6\.[23]); arm/i
6141
- // Windows RT
6142
- ],
6143
- [[NAME, /N/, "R"], [VERSION3, strMapper, windowsVersionMap]],
6144
- [
6145
- /(windows (?:phone|mobile|iot))(?: os)?[\/ ]?([\d\.]*( se)?)/i,
6146
- // Windows IoT/Mobile/Phone
6147
- // Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11
6148
- /(windows)[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i
6149
- ],
6150
- [NAME, VERSION3],
6151
- [
6152
- /windows nt ?([\d\.\)]*)(?!.+xbox)/i,
6153
- /\bwin(?=3| ?9|n)(?:nt| 9x )?([\d\.;]*)/i
6154
- ],
6155
- [[VERSION3, /(;|\))/g, "", strMapper, windowsVersionMap], [NAME, WINDOWS]],
6156
- [
6157
- /(windows ce)\/?([\d\.]*)/i
6158
- // Windows CE
6159
- ],
6160
- [NAME, VERSION3],
6161
- [
6162
- // iOS/macOS
6163
- /[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,
6164
- // iOS
6165
- /(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\/ ]([\w\.]+)/i,
6166
- /cfnetwork\/.+darwin/i
6167
- ],
6168
- [[VERSION3, /_/g, "."], [NAME, "iOS"]],
6169
- [
6170
- /(mac os x) ?([\w\. ]*)/i,
6171
- /(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i
6172
- // Mac OS
6173
- ],
6174
- [[NAME, "macOS"], [VERSION3, /_/g, "."]],
6175
- [
6176
- // Google Chromecast
6177
- /android ([\d\.]+).*crkey/i
6178
- // Google Chromecast, Android-based
6179
- ],
6180
- [VERSION3, [NAME, CHROMECAST + " Android"]],
6181
- [
6182
- /fuchsia.*crkey\/([\d\.]+)/i
6183
- // Google Chromecast, Fuchsia-based
6184
- ],
6185
- [VERSION3, [NAME, CHROMECAST + " Fuchsia"]],
6186
- [
6187
- /crkey\/([\d\.]+).*devicetype\/smartspeaker/i
6188
- // Google Chromecast, Linux-based Smart Speaker
6189
- ],
6190
- [VERSION3, [NAME, CHROMECAST + " SmartSpeaker"]],
6191
- [
6192
- /linux.*crkey\/([\d\.]+)/i
6193
- // Google Chromecast, Legacy Linux-based
6194
- ],
6195
- [VERSION3, [NAME, CHROMECAST + " Linux"]],
6196
- [
6197
- /crkey\/([\d\.]+)/i
6198
- // Google Chromecast, unknown
6199
- ],
6200
- [VERSION3, [NAME, CHROMECAST]],
6201
- [
6202
- // Mobile OSes
6203
- /droid ([\w\.]+)\b.+(android[- ]x86)/i
6204
- // Android-x86
6205
- ],
6206
- [VERSION3, NAME],
6207
- [
6208
- /(ubuntu) ([\w\.]+) like android/i
6209
- // Ubuntu Touch
6210
- ],
6211
- [[NAME, /(.+)/, "$1 Touch"], VERSION3],
6212
- [
6213
- /(harmonyos)[\/ ]?([\d\.]*)/i,
6214
- // HarmonyOS
6215
- // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
6216
- /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\w*[-\/\.; ]?([\d\.]*)/i
6217
- ],
6218
- [NAME, VERSION3],
6219
- [
6220
- /\(bb(10);/i
6221
- // BlackBerry 10
6222
- ],
6223
- [VERSION3, [NAME, BLACKBERRY]],
6224
- [
6225
- /(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i
6226
- // Symbian
6227
- ],
6228
- [VERSION3, [NAME, "Symbian"]],
6229
- [
6230
- /mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i
6231
- // Firefox OS
6232
- ],
6233
- [VERSION3, [NAME, FIREFOX + " OS"]],
6234
- [
6235
- /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i,
6236
- // WebOS
6237
- /webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i
6238
- ],
6239
- [VERSION3, [NAME, "webOS"]],
6240
- [
6241
- /web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i
6242
- // https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine
6243
- ],
6244
- [[VERSION3, strMapper, { "25": "120", "24": "108", "23": "94", "22": "87", "6": "79", "5": "68", "4": "53", "3": "38", "2": "538", "1": "537", "*": "TV" }], [NAME, "webOS"]],
6245
- [
6246
- /watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i
6247
- // watchOS
6248
- ],
6249
- [VERSION3, [NAME, "watchOS"]],
6250
- [
6251
- // Google ChromeOS
6252
- /(cros) [\w]+(?:\)| ([\w\.]+)\b)/i
6253
- // Chromium OS
6254
- ],
6255
- [[NAME, "Chrome OS"], VERSION3],
6256
- [
6257
- // Smart TVs
6258
- /panasonic;(viera)/i,
6259
- // Panasonic Viera
6260
- /(netrange)mmh/i,
6261
- // Netrange
6262
- /(nettv)\/(\d+\.[\w\.]+)/i,
6263
- // NetTV
6264
- // Console
6265
- /(nintendo|playstation) (\w+)/i,
6266
- // Nintendo/Playstation
6267
- /(xbox); +xbox ([^\);]+)/i,
6268
- // Microsoft Xbox (360, One, X, S, Series X, Series S)
6269
- /(pico) .+os([\w\.]+)/i,
6270
- // Pico
6271
- // Other
6272
- /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
6273
- // Joli/Palm
6274
- /linux.+(mint)[\/\(\) ]?([\w\.]*)/i,
6275
- // Mint
6276
- /(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\d\.]*)/i,
6277
- // Mageia/VectorLinux/Fuchsia/ArcaOS/Arch
6278
- /([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
6279
- // Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix
6280
- /((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
6281
- // Solaris
6282
- /\b(aix)[; ]([1-9\.]{0,4})/i,
6283
- // AIX
6284
- /(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i,
6285
- // Hurd/Linux/MorphOS
6286
- /(gnu) ?([\w\.]*)/i,
6287
- // GNU
6288
- /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
6289
- // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
6290
- /(haiku) ?(r\d)?/i
6291
- // Haiku
6292
- ],
6293
- [NAME, VERSION3],
6294
- [
6295
- /(sunos) ?([\d\.]*)/i
6296
- // Solaris
6297
- ],
6298
- [[NAME, "Solaris"], VERSION3],
6299
- [
6300
- /\b(beos|os\/2|amigaos|openvms|hp-ux|serenityos)/i,
6301
- // BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS
6302
- /(unix) ?([\w\.]*)/i
6303
- // UNIX
6304
- ],
6305
- [NAME, VERSION3]
6306
- ]
6307
- };
6308
- var defaultProps = function() {
6309
- var props = { init: {}, isIgnore: {}, isIgnoreRgx: {}, toString: {} };
6310
- setProps.call(props.init, [
6311
- [BROWSER, [NAME, VERSION3, MAJOR, TYPE]],
6312
- [CPU, [ARCHITECTURE]],
6313
- [DEVICE, [TYPE, MODEL, VENDOR]],
6314
- [ENGINE, [NAME, VERSION3]],
6315
- [OS, [NAME, VERSION3]]
6316
- ]);
6317
- setProps.call(props.isIgnore, [
6318
- [BROWSER, [VERSION3, MAJOR]],
6319
- [ENGINE, [VERSION3]],
6320
- [OS, [VERSION3]]
6321
- ]);
6322
- setProps.call(props.isIgnoreRgx, [
6323
- [BROWSER, / ?browser$/i],
6324
- [OS, / ?os$/i]
6325
- ]);
6326
- setProps.call(props.toString, [
6327
- [BROWSER, [NAME, VERSION3]],
6328
- [CPU, [ARCHITECTURE]],
6329
- [DEVICE, [VENDOR, MODEL]],
6330
- [ENGINE, [NAME, VERSION3]],
6331
- [OS, [NAME, VERSION3]]
6332
- ]);
6333
- return props;
6334
- }();
6335
- var createIData = function(item, itemType) {
6336
- var init_props = defaultProps.init[itemType], is_ignoreProps = defaultProps.isIgnore[itemType] || 0, is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0, toString_props = defaultProps.toString[itemType] || 0;
6337
- function IData() {
6338
- setProps.call(this, init_props);
6339
- }
6340
- IData.prototype.getItem = function() {
6341
- return item;
6342
- };
6343
- IData.prototype.withClientHints = function() {
6344
- if (!NAVIGATOR_UADATA) {
6345
- return item.parseCH().get();
6346
- }
6347
- return NAVIGATOR_UADATA.getHighEntropyValues(CH_ALL_VALUES).then(function(res) {
6348
- return item.setCH(new UACHData(res, false)).parseCH().get();
6349
- });
6350
- };
6351
- IData.prototype.withFeatureCheck = function() {
6352
- return item.detectFeature().get();
6353
- };
6354
- if (itemType != RESULT) {
6355
- IData.prototype.is = function(strToCheck) {
6356
- var is = false;
6357
- for (var i in this) {
6358
- if (this.hasOwnProperty(i) && !has(is_ignoreProps, i) && lowerize(is_ignoreRgx ? strip(is_ignoreRgx, this[i]) : this[i]) == lowerize(is_ignoreRgx ? strip(is_ignoreRgx, strToCheck) : strToCheck)) {
6359
- is = true;
6360
- if (strToCheck != TYPEOF.UNDEFINED) break;
6361
- } else if (strToCheck == TYPEOF.UNDEFINED && is) {
6362
- is = !is;
6363
- break;
6364
- }
6365
- }
6366
- return is;
6367
- };
6368
- IData.prototype.toString = function() {
6369
- var str = EMPTY;
6370
- for (var i in toString_props) {
6371
- if (typeof this[toString_props[i]] !== TYPEOF.UNDEFINED) {
6372
- str += (str ? " " : EMPTY) + this[toString_props[i]];
6373
- }
6374
- }
6375
- return str || TYPEOF.UNDEFINED;
6376
- };
6377
- }
6378
- if (!NAVIGATOR_UADATA) {
6379
- IData.prototype.then = function(cb) {
6380
- var that = this;
6381
- var IDataResolve = function() {
6382
- for (var prop in that) {
6383
- if (that.hasOwnProperty(prop)) {
6384
- this[prop] = that[prop];
6385
- }
6386
- }
6387
- };
6388
- IDataResolve.prototype = {
6389
- is: IData.prototype.is,
6390
- toString: IData.prototype.toString
6391
- };
6392
- var resolveData = new IDataResolve();
6393
- cb(resolveData);
6394
- return resolveData;
6395
- };
6396
- }
6397
- return new IData();
6398
- };
6399
- function UACHData(uach, isHttpUACH) {
6400
- uach = uach || {};
6401
- setProps.call(this, CH_ALL_VALUES);
6402
- if (isHttpUACH) {
6403
- setProps.call(this, [
6404
- [BRANDS, itemListToArray(uach[CH])],
6405
- [FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],
6406
- [MOBILE, /\?1/.test(uach[CH_MOBILE])],
6407
- [MODEL, stripQuotes(uach[CH_MODEL])],
6408
- [PLATFORM, stripQuotes(uach[CH_PLATFORM])],
6409
- [PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],
6410
- [ARCHITECTURE, stripQuotes(uach[CH_ARCH])],
6411
- [FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],
6412
- [BITNESS, stripQuotes(uach[CH_BITNESS])]
6413
- ]);
6414
- } else {
6415
- for (var prop in uach) {
6416
- if (this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];
6417
- }
6418
- }
6419
- }
6420
- function UAItem(itemType, ua, rgxMap, uaCH) {
6421
- this.get = function(prop) {
6422
- if (!prop) return this.data;
6423
- return this.data.hasOwnProperty(prop) ? this.data[prop] : void 0;
6424
- };
6425
- this.set = function(prop, val) {
6426
- this.data[prop] = val;
6427
- return this;
6428
- };
6429
- this.setCH = function(ch) {
6430
- this.uaCH = ch;
6431
- return this;
6432
- };
6433
- this.detectFeature = function() {
6434
- if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {
6435
- switch (this.itemType) {
6436
- case BROWSER:
6437
- if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {
6438
- this.set(NAME, "Brave");
6439
- }
6440
- break;
6441
- case DEVICE:
6442
- if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {
6443
- this.set(TYPE, MOBILE);
6444
- }
6445
- if (this.get(MODEL) == "Macintosh" && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {
6446
- this.set(MODEL, "iPad").set(TYPE, TABLET);
6447
- }
6448
- break;
6449
- case OS:
6450
- if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {
6451
- this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);
6452
- }
6453
- break;
6454
- case RESULT:
6455
- var data = this.data;
6456
- var detect = function(itemType2) {
6457
- return data[itemType2].getItem().detectFeature().get();
6458
- };
6459
- this.set(BROWSER, detect(BROWSER)).set(CPU, detect(CPU)).set(DEVICE, detect(DEVICE)).set(ENGINE, detect(ENGINE)).set(OS, detect(OS));
6460
- }
6461
- }
6462
- return this;
6463
- };
6464
- this.parseUA = function() {
6465
- if (this.itemType != RESULT) {
6466
- rgxMapper.call(this.data, this.ua, this.rgxMap);
6467
- }
6468
- switch (this.itemType) {
6469
- case BROWSER:
6470
- this.set(MAJOR, majorize(this.get(VERSION3)));
6471
- break;
6472
- case OS:
6473
- if (this.get(NAME) == "iOS" && this.get(VERSION3) == "18.6") {
6474
- var realVersion = /\) Version\/([\d\.]+)/.exec(this.ua);
6475
- if (realVersion && parseInt(realVersion[1].substring(0, 2), 10) >= 26) {
6476
- this.set(VERSION3, realVersion[1]);
6477
- }
6478
- }
6479
- break;
6480
- }
6481
- return this;
6482
- };
6483
- this.parseCH = function() {
6484
- var uaCH2 = this.uaCH, rgxMap2 = this.rgxMap;
6485
- switch (this.itemType) {
6486
- case BROWSER:
6487
- case ENGINE:
6488
- var brands = uaCH2[FULLVERLIST] || uaCH2[BRANDS], prevName;
6489
- if (brands) {
6490
- for (var i = 0; i < brands.length; i++) {
6491
- var brandName = brands[i].brand || brands[i], brandVersion = brands[i].version;
6492
- if (this.itemType == BROWSER && !/not.a.brand/i.test(brandName) && (!prevName || /Chrom/.test(prevName) && brandName != CHROMIUM || prevName == EDGE && /WebView2/.test(brandName))) {
6493
- brandName = strMapper(brandName, browserHintsMap);
6494
- prevName = this.get(NAME);
6495
- if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {
6496
- this.set(NAME, brandName).set(VERSION3, brandVersion).set(MAJOR, majorize(brandVersion));
6497
- }
6498
- prevName = brandName;
6499
- }
6500
- if (this.itemType == ENGINE && brandName == CHROMIUM) {
6501
- this.set(VERSION3, brandVersion);
6502
- }
6503
- }
6504
- }
6505
- break;
6506
- case CPU:
6507
- var archName = uaCH2[ARCHITECTURE];
6508
- if (archName) {
6509
- if (archName && uaCH2[BITNESS] == "64") archName += "64";
6510
- rgxMapper.call(this.data, archName + ";", rgxMap2);
6511
- }
6512
- break;
6513
- case DEVICE:
6514
- if (uaCH2[MOBILE]) {
6515
- this.set(TYPE, MOBILE);
6516
- }
6517
- if (uaCH2[MODEL]) {
6518
- this.set(MODEL, uaCH2[MODEL]);
6519
- if (!this.get(TYPE) || !this.get(VENDOR)) {
6520
- var reParse = {};
6521
- rgxMapper.call(reParse, "droid 9; " + uaCH2[MODEL] + ")", rgxMap2);
6522
- if (!this.get(TYPE) && !!reParse.type) {
6523
- this.set(TYPE, reParse.type);
6524
- }
6525
- if (!this.get(VENDOR) && !!reParse.vendor) {
6526
- this.set(VENDOR, reParse.vendor);
6527
- }
6528
- }
6529
- }
6530
- if (uaCH2[FORMFACTORS]) {
6531
- var ff;
6532
- if (typeof uaCH2[FORMFACTORS] !== "string") {
6533
- var idx = 0;
6534
- while (!ff && idx < uaCH2[FORMFACTORS].length) {
6535
- ff = strMapper(uaCH2[FORMFACTORS][idx++], formFactorsMap);
6536
- }
6537
- } else {
6538
- ff = strMapper(uaCH2[FORMFACTORS], formFactorsMap);
6539
- }
6540
- this.set(TYPE, ff);
6541
- }
6542
- break;
6543
- case OS:
6544
- var osName = uaCH2[PLATFORM];
6545
- if (osName) {
6546
- var osVersion = uaCH2[PLATFORMVER];
6547
- if (osName == WINDOWS) osVersion = parseInt(majorize(osVersion), 10) >= 13 ? "11" : "10";
6548
- this.set(NAME, osName).set(VERSION3, osVersion);
6549
- }
6550
- if (this.get(NAME) == WINDOWS && uaCH2[MODEL] == "Xbox") {
6551
- this.set(NAME, "Xbox").set(VERSION3, void 0);
6552
- }
6553
- break;
6554
- case RESULT:
6555
- var data = this.data;
6556
- var parse = function(itemType2) {
6557
- return data[itemType2].getItem().setCH(uaCH2).parseCH().get();
6558
- };
6559
- this.set(BROWSER, parse(BROWSER)).set(CPU, parse(CPU)).set(DEVICE, parse(DEVICE)).set(ENGINE, parse(ENGINE)).set(OS, parse(OS));
6560
- }
6561
- return this;
6562
- };
6563
- setProps.call(this, [
6564
- ["itemType", itemType],
6565
- ["ua", ua],
6566
- ["uaCH", uaCH],
6567
- ["rgxMap", rgxMap],
6568
- ["data", createIData(this, itemType)]
6569
- ]);
6570
- return this;
6571
- }
6572
- function UAParser(ua, extensions, headers) {
6573
- if (typeof ua === TYPEOF.OBJECT) {
6574
- if (isExtensions(ua, true)) {
6575
- if (typeof extensions === TYPEOF.OBJECT) {
6576
- headers = extensions;
6577
- }
6578
- extensions = ua;
6579
- } else {
6580
- headers = ua;
6581
- extensions = void 0;
6582
- }
6583
- ua = void 0;
6584
- } else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {
6585
- headers = extensions;
6586
- extensions = void 0;
6587
- }
6588
- if (headers) {
6589
- if (typeof headers.append === TYPEOF.FUNCTION) {
6590
- var kv = {};
6591
- headers.forEach(function(v, k) {
6592
- kv[String(k).toLowerCase()] = v;
6593
- });
6594
- headers = kv;
6595
- } else {
6596
- var normalized = {};
6597
- for (var header in headers) {
6598
- if (headers.hasOwnProperty(header)) {
6599
- normalized[String(header).toLowerCase()] = headers[header];
6600
- }
6601
- }
6602
- headers = normalized;
6603
- }
6604
- }
6605
- if (!(this instanceof UAParser)) {
6606
- return new UAParser(ua, extensions, headers).getResult();
6607
- }
6608
- var userAgent = typeof ua === TYPEOF.STRING ? ua : (
6609
- // Passed user-agent string
6610
- headers && headers[USER_AGENT] ? headers[USER_AGENT] : (
6611
- // User-Agent from passed headers
6612
- NAVIGATOR && NAVIGATOR.userAgent ? NAVIGATOR.userAgent : (
6613
- // navigator.userAgent
6614
- EMPTY
6615
- )
6616
- )
6617
- ), httpUACH = new UACHData(headers, true), regexMap = extensions ? extend2(defaultRegexes, extensions) : defaultRegexes, createItemFunc = function(itemType) {
6618
- if (itemType == RESULT) {
6619
- return function() {
6620
- return new UAItem(itemType, userAgent, regexMap, httpUACH).set("ua", userAgent).set(BROWSER, this.getBrowser()).set(CPU, this.getCPU()).set(DEVICE, this.getDevice()).set(ENGINE, this.getEngine()).set(OS, this.getOS()).get();
6621
- };
6622
- } else {
6623
- return function() {
6624
- return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH).parseUA().get();
6625
- };
6626
- }
6627
- };
6628
- setProps.call(this, [
6629
- ["getBrowser", createItemFunc(BROWSER)],
6630
- ["getCPU", createItemFunc(CPU)],
6631
- ["getDevice", createItemFunc(DEVICE)],
6632
- ["getEngine", createItemFunc(ENGINE)],
6633
- ["getOS", createItemFunc(OS)],
6634
- ["getResult", createItemFunc(RESULT)],
6635
- ["getUA", function() {
6636
- return userAgent;
6637
- }],
6638
- ["setUA", function(ua2) {
6639
- if (isString2(ua2)) userAgent = trim2(ua2, UA_MAX_LENGTH);
6640
- return this;
6641
- }]
6642
- ]).setUA(userAgent);
6643
- return this;
6644
- }
6645
- UAParser.VERSION = LIBVERSION;
6646
- UAParser.BROWSER = enumerize([NAME, VERSION3, MAJOR, TYPE]);
6647
- UAParser.CPU = enumerize([ARCHITECTURE]);
6648
- UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
6649
- UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION3]);
6650
-
6651
- // ../../node_modules/.pnpm/@ua-parser-js+pro-enterprise@2.0.6/node_modules/@ua-parser-js/pro-enterprise/src/enums/ua-parser-enums.mjs
6652
- var BrowserName = Object.freeze({
6653
- "115": "115",
6654
- "2345": "2345",
6655
- "360": "360",
6656
- ALIPAY: "Alipay",
6657
- AMAYA: "Amaya",
6658
- ANDROID: "Android Browser",
6659
- ARORA: "Arora",
6660
- AVANT: "Avant",
6661
- AVAST: "Avast Secure Browser",
6662
- AVG: "AVG Secure Browser",
6663
- BAIDU: "Baidu Browser",
6664
- BASILISK: "Basilisk",
6665
- BING: "Bing",
6666
- BLAZER: "Blazer",
6667
- BOLT: "Bolt",
6668
- BOWSER: "Bowser",
6669
- BRAVE: "Brave",
6670
- CAMINO: "Camino",
6671
- CHIMERA: "Chimera",
6672
- CHROME: "Chrome",
6673
- CHROME_HEADLESS: "Chrome Headless",
6674
- CHROME_MOBILE: "Mobile Chrome",
6675
- CHROME_WEBVIEW: "Chrome WebView",
6676
- CHROMIUM: "Chromium",
6677
- COBALT: "Cobalt",
6678
- COC_COC: "Coc Coc",
6679
- CONKEROR: "Conkeror",
6680
- DAUM: "Daum",
6681
- DILLO: "Dillo",
6682
- DOLPHIN: "Dolphin",
6683
- DOOBLE: "Dooble",
6684
- DORIS: "Doris",
6685
- DRAGON: "Dragon",
6686
- DUCKDUCKGO: "DuckDuckGo",
6687
- ECOSIA: "Ecosia",
6688
- EDGE: "Edge",
6689
- EDGE_WEBVIEW: "Edge WebView",
6690
- EDGE_WEBVIEW2: "Edge WebView2",
6691
- EPIPHANY: "Epiphany",
6692
- FACEBOOK: "Facebook",
6693
- FALKON: "Falkon",
6694
- FIREBIRD: "Firebird",
6695
- FIREFOX: "Firefox",
6696
- FIREFOX_FOCUS: "Firefox Focus",
6697
- FIREFOX_MOBILE: "Mobile Firefox",
6698
- FIREFOX_REALITY: "Firefox Reality",
6699
- FENNEC: "Fennec",
6700
- FLOCK: "Flock",
6701
- FLOW: "Flow",
6702
- GO: "GoBrowser",
6703
- GOOGLE_SEARCH: "GSA",
6704
- HELIO: "Helio",
6705
- HEYTAP: "HeyTap",
6706
- HONOR: "Honor",
6707
- HUAWEI: "Huawei Browser",
6708
- ICAB: "iCab",
6709
- ICE: "ICE Browser",
6710
- ICEAPE: "IceApe",
6711
- ICECAT: "IceCat",
6712
- ICEDRAGON: "IceDragon",
6713
- ICEWEASEL: "IceWeasel",
6714
- IE: "IE",
6715
- INSTAGRAM: "Instagram",
6716
- IRIDIUM: "Iridium",
6717
- IRON: "Iron",
6718
- JASMINE: "Jasmine",
6719
- KONQUEROR: "Konqueror",
6720
- KAKAO: "KakaoTalk",
6721
- KHTML: "KHTML",
6722
- K_MELEON: "K-Meleon",
6723
- KLAR: "Klar",
6724
- KLARNA: "Klarna",
6725
- KINDLE: "Kindle",
6726
- LENOVO: "Smart Lenovo Browser",
6727
- LADYBIRD: "Ladybird",
6728
- LG: "LG Browser",
6729
- LIBREWOLF: "LibreWolf",
6730
- LIEBAO: "LBBROWSER",
6731
- LINE: "Line",
6732
- LINKEDIN: "LinkedIn",
6733
- LINKS: "Links",
6734
- LUNASCAPE: "Lunascape",
6735
- LYNX: "Lynx",
6736
- MAEMO: "Maemo Browser",
6737
- MAXTHON: "Maxthon",
6738
- MIDORI: "Midori",
6739
- MINIMO: "Minimo",
6740
- MIUI: "MIUI Browser",
6741
- MOZILLA: "Mozilla",
6742
- MOSAIC: "Mosaic",
6743
- NAVER: "Naver",
6744
- NETFRONT: "NetFront",
6745
- NETSCAPE: "Netscape",
6746
- NETSURF: "Netsurf",
6747
- NOKIA: "Nokia Browser",
6748
- OBIGO: "Obigo",
6749
- OCULUS: "Oculus Browser",
6750
- OMNIWEB: "OmniWeb",
6751
- OPERA: "Opera",
6752
- OPERA_COAST: "Opera Coast",
6753
- OPERA_GX: "Opera GX",
6754
- OPERA_MINI: "Opera Mini",
6755
- OPERA_MOBI: "Opera Mobi",
6756
- OPERA_TABLET: "Opera Tablet",
6757
- OPERA_TOUCH: "Opera Touch",
6758
- OTTER: "Otter",
6759
- OVI: "OviBrowser",
6760
- PALEMOON: "PaleMoon",
6761
- PHANTOMJS: "PhantomJS",
6762
- PHOENIX: "Phoenix",
6763
- PICOBROWSER: "Pico Browser",
6764
- POLARIS: "Polaris",
6765
- PUFFIN: "Puffin",
6766
- QQ: "QQBrowser",
6767
- QQ_LITE: "QQBrowserLite",
6768
- QUARK: "Quark",
6769
- QUPZILLA: "QupZilla",
6770
- QUTEBROWSER: "qutebrowser",
6771
- QWANT: "Qwant",
6772
- REKONQ: "rekonq",
6773
- ROCKMELT: "Rockmelt",
6774
- SAFARI: "Safari",
6775
- SAFARI_MOBILE: "Mobile Safari",
6776
- SAILFISH: "Sailfish Browser",
6777
- SAMSUNG: "Samsung Internet",
6778
- SEAMONKEY: "SeaMonkey",
6779
- SILK: "Silk",
6780
- SKYFIRE: "Skyfire",
6781
- SLEIPNIR: "Sleipnir",
6782
- SLIMBOAT: "SlimBoat",
6783
- SLIMBROWSER: "SlimBrowser",
6784
- SLIMJET: "Slimjet",
6785
- SNAPCHAT: "Snapchat",
6786
- SOGOU_EXPLORER: "Sogou Explorer",
6787
- SOGOU_MOBILE: "Sogou Mobile",
6788
- SURF: "Surf",
6789
- SWIFTFOX: "Swiftfox",
6790
- TESLA: "Tesla",
6791
- TIKTOK: "TikTok",
6792
- TIZEN: "Tizen Browser",
6793
- TWITTER: "Twitter",
6794
- UC: "UCBrowser",
6795
- UP: "UP.Browser",
6796
- VIVALDI: "Vivaldi",
6797
- VIVO: "Vivo Browser",
6798
- W3M: "w3m",
6799
- WATERFOX: "Waterfox",
6800
- WEBKIT: "WebKit",
6801
- WECHAT: "WeChat",
6802
- WEIBO: "Weibo",
6803
- WHALE: "Whale",
6804
- WOLVIC: "Wolvic",
6805
- YANDEX: "Yandex",
6806
- ZALO: "Zalo"
6807
- // TODO : test!
6808
- });
6809
- var BrowserType = Object.freeze({
6810
- CRAWLER: "crawler",
6811
- CLI: "cli",
6812
- EMAIL: "email",
6813
- FETCHER: "fetcher",
6814
- INAPP: "inapp",
6815
- MEDIAPLAYER: "mediaplayer",
6816
- LIBRARY: "library"
6817
- });
6818
- var CPUArch = Object.freeze({
6819
- "68K": "68k",
6820
- ALPHA: "alpha",
6821
- ARM: "arm",
6822
- ARM_64: "arm64",
6823
- ARM_HF: "armhf",
6824
- AVR: "avr",
6825
- AVR_32: "avr32",
6826
- IA64: "ia64",
6827
- IRIX: "irix",
6828
- IRIX_64: "irix64",
6829
- MIPS: "mips",
6830
- MIPS_64: "mips64",
6831
- PA_RISC: "pa-risc",
6832
- PPC: "ppc",
6833
- SPARC: "sparc",
6834
- SPARC_64: "sparc64",
6835
- X86: "ia32",
6836
- X86_64: "amd64"
6837
- });
6838
- var DeviceType = Object.freeze({
6839
- CONSOLE: "console",
6840
- DESKTOP: "desktop",
6841
- EMBEDDED: "embedded",
6842
- MOBILE: "mobile",
6843
- SMARTTV: "smarttv",
6844
- TABLET: "tablet",
6845
- WEARABLE: "wearable",
6846
- XR: "xr"
6847
- });
6848
- var DeviceVendor = Object.freeze({
6849
- ACER: "Acer",
6850
- ADVAN: "Advan",
6851
- ALCATEL: "Alcatel",
6852
- APPLE: "Apple",
6853
- AMAZON: "Amazon",
6854
- ARCHOS: "Archos",
6855
- ASUS: "ASUS",
6856
- ATT: "AT&T",
6857
- BENQ: "BenQ",
6858
- BLACKBERRY: "BlackBerry",
6859
- BLU: "BLU",
6860
- CAT: "Cat",
6861
- DELL: "Dell",
6862
- ENERGIZER: "Energizer",
6863
- ESSENTIAL: "Essential",
6864
- FACEBOOK: "Facebook",
6865
- FAIRPHONE: "Fairphone",
6866
- GEEKSPHONE: "GeeksPhone",
6867
- GENERIC: "Generic",
6868
- GOOGLE: "Google",
6869
- HISENSE: "Hisense",
6870
- HMD: "HMD",
6871
- HP: "HP",
6872
- HTC: "HTC",
6873
- HUAWEI: "Huawei",
6874
- IMO: "IMO",
6875
- INFINIX: "Infinix",
6876
- ITEL: "itel",
6877
- JOLLA: "Jolla",
6878
- KOBO: "Kobo",
6879
- LAVA: "Lava",
6880
- LENOVO: "Lenovo",
6881
- LG: "LG",
6882
- MEIZU: "Meizu",
6883
- MICROMAX: "Micromax",
6884
- MICROSOFT: "Microsoft",
6885
- MOTOROLA: "Motorola",
6886
- NEXIAN: "Nexian",
6887
- NINTENDO: "Nintendo",
6888
- NOKIA: "Nokia",
6889
- NOTHING: "Nothing",
6890
- NVIDIA: "Nvidia",
6891
- ONEPLUS: "OnePlus",
6892
- OPPO: "OPPO",
6893
- OUYA: "Ouya",
6894
- PALM: "Palm",
6895
- PANASONIC: "Panasonic",
6896
- PEBBLE: "Pebble",
6897
- PHILIPS: "Philips",
6898
- PICO: "Pico",
6899
- POLYTRON: "Polytron",
6900
- REALME: "Realme",
6901
- RETROID: "Retroid",
6902
- RIM: "RIM",
6903
- ROKU: "Roku",
6904
- SAMSUNG: "Samsung",
6905
- SHARP: "Sharp",
6906
- SIEMENS: "Siemens",
6907
- SMARTFREN: "Smartfren",
6908
- SONY: "Sony",
6909
- SPRINT: "Sprint",
6910
- TCL: "TCL",
6911
- TECHNISAT: "TechniSAT",
6912
- TECNO: "TECNO",
6913
- TESLA: "Tesla",
6914
- ULEFONE: "Ulefone",
6915
- VIVO: "Vivo",
6916
- VIZIO: "Vizio",
6917
- VODAFONE: "Vodafone",
6918
- WIKO: "Wiko",
6919
- XBOX: "Xbox",
6920
- XIAOMI: "Xiaomi",
6921
- ZEBRA: "Zebra",
6922
- ZTE: "ZTE"
6923
- // TODO : test!
6924
- });
6925
- var EngineName = Object.freeze({
6926
- AMAYA: "Amaya",
6927
- ARKWEB: "ArkWeb",
6928
- BLINK: "Blink",
6929
- EDGEHTML: "EdgeHTML",
6930
- FLOW: "Flow",
6931
- GECKO: "Gecko",
6932
- GOANNA: "Goanna",
6933
- ICAB: "iCab",
6934
- KHTML: "KHTML",
6935
- LIBWEB: "LibWeb",
6936
- LINKS: "Links",
6937
- LYNX: "Lynx",
6938
- NETFRONT: "NetFront",
6939
- NETSURF: "NetSurf",
6940
- PRESTO: "Presto",
6941
- SERVO: "Servo",
6942
- TASMAN: "Tasman",
6943
- TRIDENT: "Trident",
6944
- W3M: "w3m",
6945
- WEBKIT: "WebKit"
6946
- });
6947
- var OSName = Object.freeze({
6948
- AIX: "AIX",
6949
- AMIGA_OS: "Amiga OS",
6950
- ANDROID: "Android",
6951
- ANDROID_X86: "Android-x86",
6952
- ARCAOS: "ArcaOS",
6953
- ARCH: "Arch",
6954
- BADA: "Bada",
6955
- BEOS: "BeOS",
6956
- BLACKBERRY: "BlackBerry",
6957
- CENTOS: "CentOS",
6958
- CHROME_OS: "Chrome OS",
6959
- CHROMECAST: "Chromecast",
6960
- CHROMECAST_ANDROID: "Chromecast Android",
6961
- CHROMECAST_FUCHSIA: "Chromecast Fuchsia",
6962
- CHROMECAST_LINUX: "Chromecast Linux",
6963
- CHROMECAST_SMARTSPEAKER: "Chromecast SmartSpeaker",
6964
- CONTIKI: "Contiki",
6965
- DEBIAN: "Debian",
6966
- DEEPIN: "Deepin",
6967
- DRAGONFLY: "DragonFly",
6968
- ELEMENTARY_OS: "elementary OS",
6969
- FEDORA: "Fedora",
6970
- FIREFOX_OS: "Firefox OS",
6971
- FREEBSD: "FreeBSD",
6972
- FUCHSIA: "Fuchsia",
6973
- GENTOO: "Gentoo",
6974
- GHOSTBSD: "GhostBSD",
6975
- GNU: "GNU",
6976
- HAIKU: "Haiku",
6977
- HARMONYOS: "HarmonyOS",
6978
- HP_UX: "HP-UX",
6979
- HURD: "Hurd",
6980
- IOS: "iOS",
6981
- JOLI: "Joli",
6982
- KAIOS: "KaiOS",
6983
- KNOPPIX: "Knoppix",
6984
- KUBUNTU: "Kubuntu",
6985
- LINPUS: "Linpus",
6986
- LINSPIRE: "Linspire",
6987
- LINUX: "Linux",
6988
- MACOS: "macOS",
6989
- MAEMO: "Maemo",
6990
- MAGEIA: "Mageia",
6991
- MANDRIVA: "Mandriva",
6992
- MANJARO: "Manjaro",
6993
- MEEGO: "MeeGo",
6994
- MINIX: "Minix",
6995
- MINT: "Mint",
6996
- MORPH_OS: "Morph OS",
6997
- NETBSD: "NetBSD",
6998
- NETRANGE: "NetRange",
6999
- NETTV: "NetTV",
7000
- NINTENDO: "Nintendo",
7001
- OPENHARMONY: "OpenHarmony",
7002
- OPENBSD: "OpenBSD",
7003
- OPENVMS: "OpenVMS",
7004
- OS2: "OS/2",
7005
- PALM: "Palm",
7006
- PC_BSD: "PC-BSD",
7007
- PCLINUXOS: "PCLinuxOS",
7008
- PICO: "Pico",
7009
- PLAN9: "Plan9",
7010
- PLAYSTATION: "PlayStation",
7011
- QNX: "QNX",
7012
- RASPBIAN: "Raspbian",
7013
- REDHAT: "RedHat",
7014
- RIM_TABLET_OS: "RIM Tablet OS",
7015
- RISC_OS: "RISC OS",
7016
- SABAYON: "Sabayon",
7017
- SAILFISH: "Sailfish",
7018
- SERENITYOS: "SerenityOS",
7019
- SERIES40: "Series40",
7020
- SLACKWARE: "Slackware",
7021
- SOLARIS: "Solaris",
7022
- SUSE: "SUSE",
7023
- SYMBIAN: "Symbian",
7024
- TIZEN: "Tizen",
7025
- UBUNTU: "Ubuntu",
7026
- UBUNTU_TOUCH: "Ubuntu Touch",
7027
- UNIX: "Unix",
7028
- VECTORLINUX: "VectorLinux",
7029
- WATCHOS: "watchOS",
7030
- WEBOS: "WebOS",
7031
- WINDOWS: "Windows",
7032
- WINDOWS_CE: "Windows CE",
7033
- WINDOWS_IOT: "Windows IoT",
7034
- WINDOWS_MOBILE: "Windows Mobile",
7035
- WINDOWS_PHONE: "Windows Phone",
7036
- WINDOWS_RT: "Windows RT",
7037
- XBOX: "Xbox",
7038
- XUBUNTU: "Xubuntu",
7039
- ZENWALK: "Zenwalk"
7040
- // TODO : test!
7041
- });
7042
- var Extension = Object.freeze({
7043
- BrowserName: {
7044
- CLI: {
7045
- CURL: "curl",
7046
- ELINKS: "ELinks",
7047
- HTTPIE: "HTTPie",
7048
- LYNX: "Lynx",
7049
- WGET: "Wget"
7050
- },
7051
- Crawler: {
7052
- AHREFS_BOT: "AhrefsBot",
7053
- AI2_BOT: "AI2Bot",
7054
- AIHIT_BOT: "aiHitBot",
7055
- ALGOLIA_CRAWLER: "Algolia Crawler",
7056
- APPLE_BOT: "Applebot",
7057
- APPLE_BOT_EXTENDED: "Applebot-Extended",
7058
- ASK_TEOMA: "Teoma",
7059
- AMAZON_BOT: "Amazonbot",
7060
- AMAZON_CONTXBOT: "contxbot",
7061
- ANTHROPIC_AI: "anthropic-ai",
7062
- ANTHROPIC_CLAUDE_BOT: "ClaudeBot",
7063
- ANTHROPIC_CLAUDE_SEARCHBOT: "Claude-SearchBot",
7064
- ANTHROPIC_CLAUDE_WEB: "Claude-Web",
7065
- ARCHIVEORG_BOT: "archive.org_bot",
7066
- BAIDU_ADS: "Baidu-ADS",
7067
- BAIDU_SPIDER: "Baiduspider",
7068
- BAIDU_SPIDER_ADS: "Baiduspider-ads",
7069
- BAIDU_SPIDER_CPRO: "Baiduspider-cpro",
7070
- BAIDU_SPIDER_FAVO: "Baiduspider-favo",
7071
- BAIDU_SPIDER_IMAGE: "Baiduspider-image",
7072
- BAIDU_SPIDER_NEWS: "Baiduspider-news",
7073
- BAIDU_SPIDER_RENDER: "Baiduspider-render",
7074
- BAIDU_SPIDER_VIDEO: "Baiduspider-video",
7075
- BLEX_BOT: "BLEXBot",
7076
- BOTIFY: "botify",
7077
- BRAVE_BOT: "Bravebot",
7078
- BYTEDANCE_BYTESPIDER: "Bytespider",
7079
- BYTEDANCE_TIKTOKSPIDER: "TikTokSpider",
7080
- COMMON_CRAWL_CCBOT: "CCBot",
7081
- COCCOC_BOT_WEB: "coccocbot-web",
7082
- COCCOC_BOT_IMAGE: "coccocbot-image",
7083
- COHERE_TRAINING_DATA_CRAWLER: "cohere-training-data-crawler",
7084
- COTOYOGI: "Cotoyogi",
7085
- COVEO_BOT: "Coveobot",
7086
- CRITEO_BOT: "CriteoBot",
7087
- DATAFORSEO_BOT: "DataForSeoBot",
7088
- DAUM: "Daum",
7089
- DAUM_DAUMOA: "Daumoa",
7090
- DAUM_DAUMOA_IMAGE: "Daumoa-image",
7091
- DEEPSEEK_BOT: "DeepSeekBot",
7092
- DIFFBOT: "Diffbot",
7093
- DUCKDUCKGO_BOT: "DuckDuckBot",
7094
- DUCKDUCKGO_FAVICONS_BOT: "DuckDuckGo-Favicons-Bot",
7095
- ELASTIC: "Elastic",
7096
- ELASTIC_SWIFTYPE_BOT: "Swiftbot",
7097
- EXALEAD_EXABOT: "Exabot",
7098
- FIRECRAWL_AGENT: "FirecrawlAgent",
7099
- FREESPOKE: "Freespoke",
7100
- GOOGLE_ADSBOT: "AdsBot-Google",
7101
- GOOGLE_ADSBOT_MOBILE: "Adsbot-Google-Mobile",
7102
- GOOGLE_ADSENSE: "AdSense",
7103
- GOOGLE_APIS: "APIs-Google",
7104
- GOOGLE_BOT: "Googlebot",
7105
- GOOGLE_BOT_IMAGE: "Googlebot-Image",
7106
- GOOGLE_BOT_NEWS: "Googlebot-News",
7107
- GOOGLE_BOT_VIDEO: "Googlebot-Video",
7108
- GOOGLE_CLOUDVERTEXBOT: "Google-CloudVertexBot",
7109
- GOOGLE_EXTENDED: "Google-Extended",
7110
- GOOGLE_INSPECTIONTOOL: "Google-InspectionTool",
7111
- GOOGLE_OTHER: "GoogleOther",
7112
- GOOGLE_OTHER_IMAGE: "GoogleOther-Image",
7113
- GOOGLE_OTHER_VIDEO: "GoogleOther-Video",
7114
- GOOGLE_SAFETY: "Google-Safety",
7115
- GOOGLE_STOREBOT: "Storebot-Google",
7116
- HIVE_IMAGESIFTBOT: "ImagesiftBot",
7117
- HUAWEI_PANGUBOT: "PanguBot",
7118
- HUAWEI_PETALBOT: "PetalBot",
7119
- HUGGINGFACE_BOT: "HuggingFace-Bot",
7120
- HUNTER_VELENPUBLICWEBCRAWLER: "VelenPublicWebCrawler",
7121
- IA_ARCHIVER: "ia_archiver",
7122
- IASK_BOT: "iAskBot",
7123
- KAGI_BOT: "Kagibot",
7124
- KANGAROO_BOT: "Kangaroo Bot",
7125
- LINE_SPIDER: "Linespider",
7126
- LINKEDIN_BOT: "LinkedInBot",
7127
- MAGPIE_CRAWLER: "magpie-crawler",
7128
- MARGINALIA: "marginalia",
7129
- META_EXTERNALAGENT: "meta-externalagent",
7130
- META_FACEBOOKBOT: "FacebookBot",
7131
- META_FACEBOOKCATALOG: "facebookcatalog",
7132
- META_FACEBOOKEXTERNALHIT: "facebookexternalhit",
7133
- MAJESTIC_MJ12BOT: "MJ12bot",
7134
- MICROSOFT_BINGBOT: "Bingbot",
7135
- MICROSOFT_MSNBOT: "msnbot",
7136
- MICROSOFT_ADIDXBOT: "adidxbot",
7137
- MOJEEK_BOT: "MojeekBot",
7138
- MOZ_DOTBOT: "DotBot",
7139
- ONCRAWL: "OnCrawl",
7140
- ONESPOT_SCRAPERBOT: "Onespot-ScraperBot",
7141
- OPENAI_GPTBOT: "GPTBot",
7142
- OPENAI_SEARCH_BOT: "OAI-SearchBot",
7143
- PERPLEXITY_BOT: "PerplexityBot",
7144
- QIHOO_360_SPIDER: "360Spider",
7145
- QWANT_BOT: "Qwantbot",
7146
- QWANT_BOT_NEWS: "Qwantbot-news",
7147
- REPLICATE_BOT: "Replicate-Bot",
7148
- RUNPOD_BOT: "RunPod-Bot",
7149
- SB_INTUITIONS_BOT: "SBIntuitionsBot",
7150
- SEEKPORT_BOT: "SeekportBot",
7151
- SEMRUSH_BOT: "SemrushBot",
7152
- SEMRUSH_BOT_BACKLINK: "SemrushBot-BA",
7153
- SEMRUSH_BOT_CONTENTSHAKE: "SemrushBot-OCOB",
7154
- SEMRUSH_BOT_SEO_CHECKER: "SemrushBot-SI",
7155
- SEZNAM_BOT: "SeznamBot",
7156
- SITEIMPROVE: "Siteimprove",
7157
- SOGOU_PIC_SPIDER: "Sogou Pic Spider",
7158
- SOGOU_WEB_SPIDER: "Sogou web spider",
7159
- STARTPAGE: "Startpage",
7160
- SURLY_BOT: "SurdotlyBot",
7161
- TIMPI_BOT: "Timpibot",
7162
- TOGETHER_BOT: "Together-Bot",
7163
- TURNITIN_BOT: "TurnitinBot",
7164
- TWIN_AGENT: "TwinAgent",
7165
- VERCEL_V0BOT: "v0bot",
7166
- WEBZIO: "webzio",
7167
- WEBZIO_EXTENDED: "Webzio-Extended",
7168
- WEBZIO_OMGILI: "omgili",
7169
- WEBZIO_OMGILI_BOT: "omgilibot",
7170
- XAI_BOT: "xAI-Bot",
7171
- YAHOO_JAPAN: "Y!J-BRW",
7172
- YAHOO_SLURP: "Yahoo! Slurp",
7173
- YANDEX_ACCESSIBILITY_BOT: "YandexAccessibilityBot",
7174
- YANDEX_ADDITIONAL_BOT: "YandexAdditionalBot",
7175
- YANDEX_ADNET: "YandexAdNet",
7176
- YANDEX_BLOGS: "YandexBlogs",
7177
- YANDEX_BOT: "YandexBot",
7178
- YANDEX_BOT_MIRRORDETECTOR: "YandexBot MirrorDetector",
7179
- YANDEX_COMBOT: "YandexComBot",
7180
- YANDEX_FAVICONS: "YandexFavicons",
7181
- YANDEX_IMAGE_RESIZER: "YandexImageResizer",
7182
- YANDEX_IMAGES: "YandexImages",
7183
- YANDEX_MARKET: "YandexMarket",
7184
- YANDEX_MEDIA: "YandexMedia",
7185
- YANDEX_METRIKA: "YandexMetrika",
7186
- YANDEX_MOBILE_BOT: "YandexMobileBot",
7187
- YANDEX_MOBILE_SCREENSHOT_BOT: "YandexMobileScreenShotBot",
7188
- YANDEX_NEWS: "YandexNews",
7189
- YANDEX_ONTODB: "YandexOntoDB",
7190
- YANDEX_ONTODB_API: "YandexOntoDBAPI",
7191
- YANDEX_PARTNER: "YandexPartner",
7192
- YANDEX_RCA: "YandexRCA",
7193
- YANDEX_RENDERRESOURCES_BOT: "YandexRenderResourcesBot",
7194
- YANDEX_SCREENSHOT_BOT: "YandexScreenshotBot",
7195
- YANDEX_SPRAV_BOT: "YandexSpravBot",
7196
- YANDEX_TRACKER: "YandexTracker",
7197
- YANDEX_VERTICALS: "YandexVerticals",
7198
- YANDEX_VERTIS: "YandexVertis",
7199
- YANDEX_VIDEO: "YandexVideo",
7200
- YANDEX_VIDEO_PARSER: "YandexVideoParser",
7201
- YANDEX_WEBMASTER: "YandexWebmaster",
7202
- YEP_BOT: "YepBot",
7203
- YETI: "Yeti",
7204
- YISOU_SPIDER: "YisouSpider",
7205
- YOU_BOT: "YouBot",
7206
- ZHIPU_CHATGLM_SPIDER: "ChatGLM-Spider",
7207
- ZUM_BOT: "ZumBot"
7208
- },
7209
- Email: {
7210
- AIRMAIL: "Airmail",
7211
- APPLE_MAIL: "Mail",
7212
- BLUEMAIL: "BlueMail",
7213
- DAUM_MAIL: "DaumMail",
7214
- EVOLUTION: "Evolution",
7215
- EM_CLIENT: "eM Client",
7216
- FOXMAIL: "Foxmail",
7217
- KMAIL: "KMail",
7218
- KMAIL2: "kmail2",
7219
- KONTACT: "Kontact",
7220
- MICROSOFT_OUTLOOK: "Microsoft Outlook",
7221
- MICROSOFT_OUTLOOK_MAC: "MacOutlook",
7222
- NAVER_MAILAPP: "NaverMailApp",
7223
- POLYMAIL: "Polymail",
7224
- PROTON_MAIL: "ProtonMail",
7225
- SPARK_MAIL: "SparkDesktop",
7226
- SPARROW: "Sparrow",
7227
- THUNDERBIRD: "Thunderbird",
7228
- YAHOO_MAIL: "Yahoo",
7229
- ZIMBRA: "Zimbra",
7230
- ZOHO_MAIL: "ZohoMail-Desktop"
7231
- },
7232
- Fetcher: {
7233
- AHREFS_SITEAUDIT: "AhrefsSiteAudit",
7234
- ANTHROPIC_CLAUDE_USER: "Claude-User",
7235
- ASANA: "Asana",
7236
- BETTER_UPTIME_BOT: "Better Uptime Bot",
7237
- BITLY_BOT: "bitlybot",
7238
- BLUESKY: "Bluesky",
7239
- BUFFER_LINKPREVIEWBOT: "BufferLinkPreviewBot",
7240
- COHERE_AI: "Cohere-AI",
7241
- DISCORD_BOT: "Discordbot",
7242
- DUCKDUCKGO_ASSISTBOT: "DuckAssistBot",
7243
- GOOGLE_CHROME_LIGHTHOUSE: "Chrome-Lighthouse",
7244
- GOOGLE_FEEDFETCHER: "FeedFetcher-Google",
7245
- GOOGLE_GEMINI_DEEP_RESEARCH: "Gemini-Deep-Research",
7246
- GOOGLE_IMAGEPROXY: "GoogleImageProxy",
7247
- GOOGLE_PAGERENDERER: "Google-PageRenderer",
7248
- GOOGLE_READ_ALOUD: "Google-Read-Aloud",
7249
- GOOGLE_PRODUCER: "GoogleProducer",
7250
- GOOGLE_SITE_VERIFICATION: "Google-Site-Verification",
7251
- HUBSPOT_PAGE_FETCHER: "HubSpot Page Fetcher",
7252
- IFRAMELY: "Iframely",
7253
- KAKAOTALK_SCRAP: "kakaotalk-scrap",
7254
- KEYBASE_BOT: "KeybaseBot",
7255
- META_EXTERNALFETCHER: "meta-externalfetcher",
7256
- META_WHATSAPP: "WhatsApp",
7257
- MICROSOFT_BINGPREVIEW: "BingPreview",
7258
- MICROSOFT_PREVIEW: "MicrosoftPreview",
7259
- MISTRALAI_USER: "MistralAI-User",
7260
- NAVER_BLUENO: "Blueno",
7261
- ONCRAWL_ROGERBOT: "rogerbot",
7262
- OPENAI_CHATGPT_USER: "ChatGPT-User",
7263
- PERPLEXITY_USER: "Perplexity-User",
7264
- PINTEREST_BOT: "Pinterestbot",
7265
- SEMRUSH_SITEAUDITBOT: "SiteAuditBot",
7266
- SLACK_BOT: "Slackbot",
7267
- SLACK_BOT_LINKEXPANDING: "Slackbot-LinkExpanding",
7268
- SLACK_IMGPROXY: "Slack-ImgProxy",
7269
- SNAP_URL_PREVIEW: "Snap URL Preview",
7270
- SKYPE_URIPREVIEW: "SkypeUriPreview",
7271
- TELEGRAM_BOT: "TelegramBot",
7272
- UPTIMEROBOT: "UptimeRobot",
7273
- VERCEL_FAVICON_BOT: "vercel-favicon-bot",
7274
- VERCEL_SCREENSHOT_BOT: "vercel-screenshot-bot",
7275
- VERCEL_BOT: "Vercelbot",
7276
- VERCEL_FLAGS: "vercelflags",
7277
- VERCEL_TRACING: "verceltracing",
7278
- X_TWITTERBOT: "Twitterbot",
7279
- YANDEX_CALENDAR: "YandexCalendar",
7280
- YANDEX_DIRECT: "YandexDirect",
7281
- YANDEX_DIRECTDYN: "YandexDirectDyn",
7282
- YANDEX_DIRECTFETCHER: "YaDirectFetcher",
7283
- YANDEX_FORDOMAIN: "YandexForDomain",
7284
- YANDEX_PAGECHECKER: "YandexPagechecker",
7285
- YANDEX_SEARCHSHOP: "YandexSearchShop",
7286
- YANDEX_SITELINKS: "YandexSitelinks",
7287
- YANDEX_USERPROXY: "YandexUserproxy",
7288
- ZOOMINFO_BOT: "Zoombot"
7289
- },
7290
- InApp: {
7291
- DISCORD: "Discord",
7292
- EVERNOTE: "Evernote",
7293
- FIGMA: "Figma",
7294
- FLIPBOARD: "Flipboard",
7295
- MATTERMOST: "Mattermost",
7296
- TEAMS: "Teams",
7297
- NOTION: "Notion",
7298
- POSTMAN: "Postman",
7299
- RAMBOX: "Rambox",
7300
- ROCKETCHAT: "Rocket.Chat",
7301
- SLACK: "Slack",
7302
- TIKTOK_LITE: "TikTok Lite",
7303
- VSCODE: "VS Code",
7304
- YAHOO_JAPAN: "Yahoo! Japan"
7305
- },
7306
- Library: {
7307
- ADOBE_AIR: "AdobeAIR",
7308
- AIOHTTP: "aiohttp",
7309
- APACHE_HTTPCLIENT: "Apache-HttpClient",
7310
- AXIOS: "axios",
7311
- GO_HTTP_CLIENT: "go-http-client",
7312
- GOT: "got",
7313
- GUZZLEHTTP: "GuzzleHttp",
7314
- JAVA: "Java",
7315
- JAVA_HTTPCLIENT: "Java-http-client",
7316
- JSDOM: "jsdom",
7317
- LIBWWW_PERL: "libwww-perl",
7318
- LUA_RESTY_HTTP: "lua-resty-http",
7319
- NEEDLE: "Needle",
7320
- NUTCH: "Nutch",
7321
- OKHTTP: "OkHttp",
7322
- NODE_FETCH: "node-fetch",
7323
- NODE_SUPERAGENT: "node-superagent",
7324
- PHP_SOAP: "PHP-SOAP",
7325
- POSTMAN_RUNTIME: "PostmanRuntime",
7326
- PYTHON_HTTPX: "python-httpx",
7327
- PYTHON_URLLIB: "python-urllib",
7328
- PYTHON_URLLIB3: "python-urllib3",
7329
- PYTHON_REQUESTS: "python-requests",
7330
- SCRAPY: "Scrapy"
7331
- }
7332
- },
7333
- DeviceVendor: {
7334
- Vehicle: {
7335
- BMW: "BMW",
7336
- BYD: "BYD",
7337
- JEEP: "Jeep",
7338
- RIVIAN: "Rivian",
7339
- TESLA: "Tesla",
7340
- VOLVO: "Volvo"
7341
- }
7342
- }
7343
- });
7344
-
7345
- // ../../node_modules/.pnpm/@ua-parser-js+pro-enterprise@2.0.6/node_modules/@ua-parser-js/pro-enterprise/src/extensions/ua-parser-extensions.mjs
7346
- var MODEL2 = "model";
7347
- var NAME2 = "name";
7348
- var TYPE2 = "type";
7349
- var VENDOR2 = "vendor";
7350
- var VERSION4 = "version";
7351
- var MOBILE2 = "mobile";
7352
- var TABLET2 = "tablet";
7353
- var CRAWLER = "crawler";
7354
- var CLI = "cli";
7355
- var EMAIL = "email";
7356
- var FETCHER = "fetcher";
7357
- var INAPP2 = "inapp";
7358
- var MEDIAPLAYER = "mediaplayer";
7359
- var LIBRARY = "library";
7360
- var CLIs = Object.freeze({
7361
- browser: [
7362
- // wget / curl / Lynx / ELinks / HTTPie
7363
- [/(wget|curl|lynx|elinks|httpie)[\/ ]\(?([\w\.-]+)/i],
7364
- [NAME2, VERSION4, [TYPE2, CLI]]
7365
- ]
7366
- });
7367
- var Crawlers = Object.freeze({
7368
- browser: [
7369
- [
7370
- // AhrefsBot - https://ahrefs.com/robot
7371
- // Amazonbot - https://developer.amazon.com/amazonbot
7372
- // Bingbot / AdIdxBot - https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0
7373
- // Bravebot - https://search.brave.com/help/brave-search-crawler
7374
- // CCBot - https://commoncrawl.org/faq
7375
- // contxbot - https://affiliate-program.amazon.com/help/node/topic/GT98G5PPRERNVZ2C
7376
- // Coveobot - https://connect.coveo.com/s/article/19648
7377
- // CriteoBot - https://www.criteo.com/criteo-crawler/
7378
- // Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
7379
- // DuckDuckBot - http://duckduckgo.com/duckduckbot.html
7380
- // FacebookBot - https://developers.facebook.com/docs/sharing/bot/
7381
- // GPTBot - https://platform.openai.com/docs/gptbot
7382
- // iAskBot - https://iask.ai
7383
- // Kagibot - https://kagi.com/bot
7384
- // Kangaroo Bot - https://kangaroollm.com.au/kangaroo-bot/
7385
- // LinkedInBot - http://www.linkedin.com
7386
- // MJ12bot - https://mj12bot.com/
7387
- // MojeekBot - https://www.mojeek.com/bot.html
7388
- // Onespot - https://www.onespot.com/identifying-traffic.html
7389
- // OpenAI's SearchGPT - https://platform.openai.com/docs/bots
7390
- // PerplexityBot - https://perplexity.ai/perplexitybot
7391
- // SBIntuitionsBot - https://www.sbintuitions.co.jp/bot/
7392
- // SeznamBot - http://napoveda.seznam.cz/seznambot-intro
7393
- // SurdotlyBot - http://sur.ly/bot.html
7394
- // Swiftbot - https://swiftype.com/swiftbot
7395
- // YepBot - https://yep.com/yepbot/
7396
- /((?:adidx|ahrefs|amazon|bing|brave|cc|contx|coveo|criteo|dot|duckduck(?:go-favicons-)?|exa|facebook|gpt|iask|kagi|kangaroo |linkedin|mj12|mojeek|oai-search|onespot-scraper|perplexity|sbintuitions|semrush|seznam|surdotly|swift|yep)bot)\/([\w\.-]+)/i,
7397
- // Algolia Crawler
7398
- /(algolia crawler(?: renderscript)?)\/?([\w\.]*)/i,
7399
- // Applebot - http://apple.com/go/applebot
7400
- /(applebot(?:-extended)?)\/?([\w\.]*)/i,
7401
- // Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
7402
- /(baiduspider[-imagevdonwsfcpr]{0,7})\/?([\w\.]*)/i,
7403
- // ClaudeBot (Anthropic)
7404
- /(claude(?:bot|-searchbot|-web)|anthropic-ai)\/?([\w\.]*)/i,
7405
- // Coc Coc Bot - https://help.coccoc.com/en/search-engine
7406
- /(coccocbot-(?:image|web))\/([\w\.]+)/i,
7407
- // Daum
7408
- /(daum(?:oa)?(?:-image)?)[ \/]([\w\.]+)/i,
7409
- // Facebook / Meta
7410
- // https://developers.facebook.com/docs/sharing/webmasters/web-crawlers
7411
- /(facebook(?:externalhit|catalog)|meta-externalagent)\/([\w\.]+)/i,
7412
- // Googlebot - http://www.google.com/bot.html
7413
- /(google(?:bot|other|-inspectiontool)(?:-image|-video|-news)?|storebot-google)\/?([\w\.]*)/i,
7414
- // Internet Archive (archive.org)
7415
- /(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
7416
- // OnCrawl
7417
- /(oncrawl) mobile\/([\w\.]+)/i,
7418
- // Qwantbot - https://help.qwant.com/bot
7419
- /(qwantbot(?:-news)?)[-\w]*\/?([\w\.]*)/i,
7420
- // SemrushBot - http://www.semrush.com/bot.html
7421
- /((?:semrush|splitsignal)bot[-abcfimostw]*)\/?([\w\.-]*)/i,
7422
- // Sogou Spider
7423
- /(sogou (?:pic|head|web|orion|news) spider)\/([\w\.]+)/i,
7424
- // Yahoo! Japan - https://support.yahoo-net.jp/PccSearch/s/article/H000007955
7425
- /(y!?j-(?:asr|br[uw]|dscv|mmp|vsidx|wsc))\/([\w\.]+)/i,
7426
- // Yandex Bots - https://yandex.com/bots
7427
- /(yandex(?:(?:mobile)?(?:accessibility|additional|com|renderresources|screenshot|sprav)?bot(?!.+mirror)|image(?:s|resizer)|adnet|blogs|favicons|market|media|metrika|news|ontodb(?:api)?|partner|rca|tracker|turbo|verti(?:cal)?s|webmaster|video(?:parser)?))\/([\w\.]+)/i,
7428
- // Yeti (Naver)
7429
- /(yeti)\/([\w\.]+)/i,
7430
- // aiHitBot / Algolia Crawler / BLEXBot / Diffbot / FirecrawlAgent / HuggingFace-Bot / Linespider / MSNBot / Magpie-Crawler / Omgilibot / OpenAI Image Downloader / PanguBot / Replicate-Bot / RunPod-Bot / Webzio-Extended / Screaming Frog SEO Spider / Startpage / Timpibot / Together-Bot / VelenPublicWebCrawler / xAI-Bot / YisouSpider / YouBot / ZumBot
7431
- // Cotoyogi - https://ds.rois.ac.jp/en_center8/en_crawler/
7432
- // Freespoke - https://docs.freespoke.com/search/bot/
7433
- /((?:aihit|blex|diff|huggingface-|msn|pangu|replicate-|runpod-|timpi|together-|xai-|you|zum)bot|(?:magpie-|velenpublicweb)crawler|(?:chatglm-|line|screaming frog seo |yisou)spider|cotoyogi|firecrawlagent|freespoke|omgili(?:bot)?|openai image downloader|startpageprivateimageproxy|twinagent|webzio-extended)\/?([\w\.]*)/i
7434
- ],
7435
- [NAME2, VERSION4, [TYPE2, CRAWLER]],
7436
- [
7437
- // YandexBot MirrorDetector
7438
- /(yandexbot\/([\w\.]+); mirrordetector)/i
7439
- ],
7440
- [[NAME2, /\/.+;/ig, ""], VERSION4, [TYPE2, CRAWLER]],
7441
- [
7442
- // Google Bots
7443
- /((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
7444
- // AI2Bot - https://allenai.org/crawler
7445
- // DataForSeoBot - https://dataforseo.com/dataforseo-bot
7446
- // Huawei AspiegelBot / PetalBot https://aspiegel.com/petalbot
7447
- // ImagesiftBot - https://imagesift.com/about
7448
- // Siteimprove - https://help.siteimprove.com/support/solutions/articles/80000448553
7449
- // TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
7450
- // v0bot - https://vercel.com/docs/bot-management
7451
- // Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
7452
- // Botify / Bytespider / DeepSeekBot / Qihoo 360Spider / SeekportBot / TikTokSpider
7453
- /\b((ai2|aspiegel|dataforseo|deepseek|imagesift|petal|seekport|turnitin|v0)bot|360spider-?(image|video)?|baidu-ads|botify|(byte|tiktok)spider|cohere-training-data-crawler|elastic(?=\/s)|marginalia|siteimprove(?=bot|\.com)|teoma|webzio|yahoo! slurp)/i
7454
- ],
7455
- [NAME2, [TYPE2, CRAWLER]]
7456
- ]
7457
- });
7458
- var ExtraDevices = Object.freeze({
7459
- device: [
7460
- [
7461
- /(nook)[\w ]+build\/(\w+)/i,
7462
- // Nook
7463
- /(dell) (strea[kpr\d ]*[\dko])/i,
7464
- // Dell Streak
7465
- /(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
7466
- // Le Pan Tablets
7467
- /(trinity)[- ]*(t\d{3}) bui/i,
7468
- // Trinity Tablets
7469
- /(gigaset)[- ]+(q\w{1,9}) bui/i,
7470
- // Gigaset Tablets
7471
- /(vodafone) ([\w ]+)(?:\)| bui)/i
7472
- // Vodafone
7473
- ],
7474
- [VENDOR2, MODEL2, [TYPE2, TABLET2]],
7475
- [
7476
- /(u304aa)/i
7477
- // AT&T
7478
- ],
7479
- [MODEL2, [VENDOR2, "AT&T"], [TYPE2, MOBILE2]],
7480
- [
7481
- /\bsie-(\w*)/i
7482
- // Siemens
7483
- ],
7484
- [MODEL2, [VENDOR2, "Siemens"], [TYPE2, MOBILE2]],
7485
- [
7486
- /\b(rct\w+) b/i
7487
- // RCA Tablets
7488
- ],
7489
- [MODEL2, [VENDOR2, "RCA"], [TYPE2, TABLET2]],
7490
- [
7491
- /\b(venue[\d ]{2,7}) b/i
7492
- // Dell Venue Tablets
7493
- ],
7494
- [MODEL2, [VENDOR2, "Dell"], [TYPE2, TABLET2]],
7495
- [
7496
- /\b(q(?:mv|ta)\w+) b/i
7497
- // Verizon Tablet
7498
- ],
7499
- [MODEL2, [VENDOR2, "Verizon"], [TYPE2, TABLET2]],
7500
- [
7501
- /\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i
7502
- // Barnes & Noble Tablet
7503
- ],
7504
- [MODEL2, [VENDOR2, "Barnes & Noble"], [TYPE2, TABLET2]],
7505
- [
7506
- /\b(tm\d{3}\w+) b/i
7507
- ],
7508
- [MODEL2, [VENDOR2, "NuVision"], [TYPE2, TABLET2]],
7509
- [
7510
- /\b(k88) b/i
7511
- // ZTE K Series Tablet
7512
- ],
7513
- [MODEL2, [VENDOR2, "ZTE"], [TYPE2, TABLET2]],
7514
- [
7515
- /\b(nx\d{3}j) b/i
7516
- // ZTE Nubia
7517
- ],
7518
- [MODEL2, [VENDOR2, "ZTE"], [TYPE2, MOBILE2]],
7519
- [
7520
- /\b(gen\d{3}) b.+49h/i
7521
- // Swiss GEN Mobile
7522
- ],
7523
- [MODEL2, [VENDOR2, "Swiss"], [TYPE2, MOBILE2]],
7524
- [
7525
- /\b(zur\d{3}) b/i
7526
- // Swiss ZUR Tablet
7527
- ],
7528
- [MODEL2, [VENDOR2, "Swiss"], [TYPE2, TABLET2]],
7529
- [
7530
- /^((zeki)?tb.*\b) b/i
7531
- // Zeki Tablets
7532
- ],
7533
- [MODEL2, [VENDOR2, "Zeki"], [TYPE2, TABLET2]],
7534
- [
7535
- /\b([yr]\d{2}) b/i,
7536
- /\b(?:dragon[- ]+touch |dt)(\w{5}) b/i
7537
- // Dragon Touch Tablet
7538
- ],
7539
- [MODEL2, [VENDOR2, "Dragon Touch"], [TYPE2, TABLET2]],
7540
- [
7541
- /\b(ns-?\w{0,9}) b/i
7542
- // Insignia Tablets
7543
- ],
7544
- [MODEL2, [VENDOR2, "Insignia"], [TYPE2, TABLET2]],
7545
- [
7546
- /\b((nxa|next)-?\w{0,9}) b/i
7547
- // NextBook Tablets
7548
- ],
7549
- [MODEL2, [VENDOR2, "NextBook"], [TYPE2, TABLET2]],
7550
- [
7551
- /\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i
7552
- // Voice Xtreme Phones
7553
- ],
7554
- [[VENDOR2, "Voice"], MODEL2, [TYPE2, MOBILE2]],
7555
- [
7556
- /\b(lvtel\-)?(v1[12]) b/i
7557
- // LvTel Phones
7558
- ],
7559
- [[VENDOR2, "LvTel"], MODEL2, [TYPE2, MOBILE2]],
7560
- [
7561
- /\b(ph-1) /i
7562
- // Essential PH-1
7563
- ],
7564
- [MODEL2, [VENDOR2, "Essential"], [TYPE2, MOBILE2]],
7565
- [
7566
- /\b(v(100md|700na|7011|917g).*\b) b/i
7567
- // Envizen Tablets
7568
- ],
7569
- [MODEL2, [VENDOR2, "Envizen"], [TYPE2, TABLET2]],
7570
- [
7571
- /\b(trio[-\w\. ]+) b/i
7572
- // MachSpeed Tablets
7573
- ],
7574
- [MODEL2, [VENDOR2, "MachSpeed"], [TYPE2, TABLET2]],
7575
- [
7576
- /\btu_(1491) b/i
7577
- // Rotor Tablets
7578
- ],
7579
- [MODEL2, [VENDOR2, "Rotor"], [TYPE2, TABLET2]]
7580
- ]
7581
- });
7582
- var Emails = Object.freeze({
7583
- browser: [
7584
- [
7585
- // Evolution / Kontact/KMail[2] / [Microsoft/Mac] Outlook / Thunderbird
7586
- // Airmail / BlueMail / DaumMail / eMClient / Foxmail / NaverMailApp / Polymail
7587
- // ProtonMail / SparkDesktop / Sparrow / Yahoo! Mail / Zimbra / ZohoMail-Desktop
7588
- /((?:air|blue|daum|fox|poly|proton)mail|emclient|evolution|kmail2?|kontact|(?:microsoft |mac)?outlook(?:-express)?|navermailapp|(?!chrom.+)sparrow|sparkdesktop|thunderbird|yahoo|zohomail-desktop)(?:m.+ail; |[\/ ])([\w\.]+)/i,
7589
- // Apple's Mail
7590
- /(mail)\/([\w\.]+) cf/i
7591
- ],
7592
- [NAME2, VERSION4, [TYPE2, EMAIL]],
7593
- [
7594
- // Zimbra
7595
- /zdesktop\/([\w\.]+)/i
7596
- ],
7597
- [VERSION4, [NAME2, "Zimbra"], [TYPE2, EMAIL]]
7598
- ]
7599
- });
7600
- var Fetchers = Object.freeze({
7601
- browser: [
7602
- [
7603
- // Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
7604
- // AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
7605
- // Buffer Link Preview Bot - https://scraper.buffer.com/about/bots/link-preview-bot
7606
- // ChatGPT-User - https://platform.openai.com/docs/plugins/bot
7607
- // DuckAssistBot - https://duckduckgo.com/duckassistbot/
7608
- // Google Site Verifier / Meta / Yahoo! Japan
7609
- // Iframely - https://iframely.com/docs/about
7610
- // Perplexity-User - https://docs.perplexity.ai/guides/bots
7611
- // MistralAI-User - https://docs.mistral.ai/robots/
7612
- // Yandex Bots - https://yandex.com/bots
7613
- /(asana|ahrefssiteaudit|(?:bing|microsoft)preview|blueno|(?:chatgpt|claude|mistralai|perplexity)-user|cohere-ai|hubspot page fetcher|mastodon|(?:bitly|bufferlinkpreview|discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|twitter|uptimero|zoom)bot|google-site-verification|iframely|kakaotalk-scrap|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|fordomain|pagechecker|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
7614
- // Bluesky
7615
- /(bluesky) cardyb\/([\w\.]+)/i,
7616
- // Skype
7617
- /(skypeuripreview) preview\/([\w\.]+)/i,
7618
- // Slackbot - https://api.slack.com/robots
7619
- /(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
7620
- // WhatsApp
7621
- /(whatsapp)\/([\w\.]+)/i
7622
- ],
7623
- [NAME2, VERSION4, [TYPE2, FETCHER]],
7624
- [
7625
- // Google Bots / Chrome-Lighthouse / Gemini-Deep-Research / KeybaseBot / Snapchat / Vercelbot / Yandex Bots
7626
- /((?:better uptime |keybase|telegram|vercel)bot|chrome-lighthouse|feedfetcher-google|gemini-deep-research|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|vercel(flags|tracing|-(favicon|screenshot)-bot)|yandex(?:sitelinks|userproxy))/i
7627
- ],
7628
- [NAME2, [TYPE2, FETCHER]]
7629
- ],
7630
- os: [
7631
- [/whatsapp\/[\d\.]+ (a|i)/i],
7632
- [[NAME2, (os) => os == "A" ? "Android" : "iOS"]]
7633
- ]
7634
- });
7635
- var InApps = Object.freeze({
7636
- browser: [
7637
- [
7638
- // Discord/Figma/Flipboard/Mattermost/Notion/Postman/Rambox/Rocket.Chat/Slack/Teams
7639
- /\b(discord|figma|mattermost|notion|postman|rambox|rocket.chat|slack|teams)\/([\w\.]+).+(electron\/|; ios)/i,
7640
- /(flipboard)\/([\w\.]+)/i
7641
- ],
7642
- [NAME2, VERSION4, [TYPE2, INAPP2]],
7643
- [
7644
- // Evernote/Teams on mobile
7645
- /(evernote) win/i,
7646
- /(teams)mobile-(ios|and)/i
7647
- ],
7648
- [NAME2, [TYPE2, INAPP2]],
7649
- [
7650
- // Slack
7651
- /chatlyio\/([\d\.]+)/i
7652
- ],
7653
- [VERSION4, [NAME2, "Slack"], [TYPE2, INAPP2]],
7654
- [
7655
- // TikTok Lite
7656
- /ultralite app_version\/([\w\.]+)/i
7657
- ],
7658
- [VERSION4, [NAME2, "TikTok Lite"], [TYPE2, INAPP2]],
7659
- [
7660
- // VS Code
7661
- /\) code\/([\d\.]+).+electron\//i
7662
- ],
7663
- [VERSION4, [NAME2, "VS Code"], [TYPE2, INAPP2]],
7664
- [
7665
- // Yahoo! Japan
7666
- /jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i
7667
- ],
7668
- [VERSION4, [NAME2, "Yahoo! Japan"], [TYPE2, INAPP2]]
7669
- ]
7670
- });
7671
- var MediaPlayers = Object.freeze({
7672
- browser: [
7673
- [
7674
- /(apple(?:coremedia|tv))\/([\w\._]+)/i,
7675
- // Generic Apple CoreMedia
7676
- /(coremedia) v([\w\._]+)/i,
7677
- // Ares/Nexplayer/OSSProxy
7678
- /(ares|clementine|music player daemon|nexplayer|ossproxy) ([\w\.-]+)/i,
7679
- // Aqualung/Lyssna/BSPlayer/Clementine/MPD
7680
- // Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/GnomeMplayer/MoC
7681
- // NSPlayer/PSP-InternetRadioPlayer/Videos
7682
- // Nero Home/Nero Scout/Nokia
7683
- // QuickTime/RealMedia/RadioApp/RadioClientApplication/
7684
- // SoundTap/Totem/Stagefright/Streamium
7685
- // XBMC/gvfs/Xine/XMMS/irapp
7686
- /^(aqualung|audacious|audimusicstream|amarok|bass|bsplayer|core|gnomemplayer|gvfs|irapp|lyssna|music on console|nero (?:home|scout)|nokia\d+|nsplayer|psp-internetradioplayer|quicktime|rma|radioapp|radioclientapplication|soundtap|stagefright|streamium|totem|videos|xbmc|xine|xmms)\/([\w\.-]+)/i,
7687
- /(lg player|nexplayer) ([\d\.]+)/i,
7688
- /player\/(nexplayer|lg player) ([\w\.-]+)/i,
7689
- // NexPlayer/LG Player
7690
- /(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i,
7691
- // Gstreamer
7692
- /(htc streaming player) [\w_]+ \/ ([\d\.]+)/i,
7693
- // HTC Streaming Player
7694
- /(lavf)([\d\.]+)/i,
7695
- // Lavf (FFMPEG)
7696
- // MPlayer SVN
7697
- /(mplayer)(?: |\/)(?:(?:sherpya-){0,1}svn)(?:-| )(r\d+(?:-\d+[\w\.-]+))/i,
7698
- / (songbird)\/([\w\.-]+)/i,
7699
- // Songbird/Philips-Songbird
7700
- /(winamp)(?:3 version|mpeg| ) ([\w\.-]+)/i,
7701
- // Winamp
7702
- /(vlc)(?:\/| media player - version )([\w\.-]+)/i,
7703
- // VLC Videolan
7704
- /^(foobar2000|itunes|smp)\/([\d\.]+)/i,
7705
- // Foobar2000/iTunes/SMP
7706
- /com\.(riseupradioalarm)\/([\d\.]*)/i,
7707
- // RiseUP Radio Alarm
7708
- /(mplayer)(?:\s|\/| unknown-)([\w\.\-]+)/i,
7709
- // MPlayer
7710
- // Windows Media Server
7711
- /(windows)\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ home media server/i
7712
- ],
7713
- [NAME2, VERSION4, [TYPE2, MEDIAPLAYER]],
7714
- [
7715
- /(flrp)\/([\w\.-]+)/i
7716
- // Flip Player
7717
- ],
7718
- [[NAME2, "Flip Player"], VERSION4, [TYPE2, MEDIAPLAYER]],
7719
- [
7720
- // FStream/NativeHost/QuerySeekSpider
7721
- // MPlayer (no other info)/Media Player Classic/Nero ShowTime
7722
- // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
7723
- // inlight radio / YourMuze
7724
- /(fstream|media player classic|inlight radio|mplayer|nativehost|nero showtime|ocms-bot|queryseekspider|tapinradio|tunein radio|winamp|yourmuze)/i
7725
- ],
7726
- [NAME2, [TYPE2, MEDIAPLAYER]],
7727
- [
7728
- /(htc_one_s|windows-media-player|wmplayer)\/([\w\.-]+)/i
7729
- // HTC One S / Windows Media Player
7730
- ],
7731
- [[NAME2, /[_-]/g, " "], VERSION4, [TYPE2, MEDIAPLAYER]],
7732
- [
7733
- /(rad.io|radio.(?:de|at|fr)) ([\d\.]+)/i
7734
- // Rad.io
7735
- ],
7736
- [[NAME2, "rad.io"], VERSION4, [TYPE2, MEDIAPLAYER]]
7737
- ]
7738
- });
7739
- var Libraries = Object.freeze({
7740
- browser: [
7741
- // Apache-HttpClient/Axios/go-http-client/got/GuzzleHttp/Java[-HttpClient]/jsdom/libwww-perl/lua-resty-http/Needle/node-fetch/OkHttp/PHP-SOAP/PostmanRuntime/python-urllib/python-requests/Scrapy/superagent
7742
- [
7743
- /^(apache-httpclient|axios|(?:go|java)-http-client|got|guzzlehttp|java|libwww-perl|lua-resty-http|needle|node-(?:fetch|superagent)|okhttp|php-soap|postmanruntime|python-(?:httpx|urllib[23]?|requests)|scrapy)\/([\w\.]+)/i,
7744
- /(adobeair|aiohttp|jsdom)\/([\w\.]+)/i,
7745
- /(nutch)-([\w\.-]+)(\(|$)/i,
7746
- /\((java)\/([\w\.]+)/i
7747
- ],
7748
- [NAME2, VERSION4, [TYPE2, LIBRARY]]
7749
- ]
7750
- });
7751
- var Vehicles = Object.freeze({
7752
- device: [
7753
- [/aftlbt962e2/i],
7754
- // BMW
7755
- [[VENDOR2, "BMW"]],
7756
- [/dilink.+(byd) auto/i],
7757
- // BYD
7758
- [VENDOR2],
7759
- [/aftlft962x3/i],
7760
- // Jeep
7761
- [[VENDOR2, "Jeep"], [MODEL2, "Wagooner"]],
7762
- [/(rivian) (r1t)/i],
7763
- // Rivian
7764
- [VENDOR2, MODEL2],
7765
- [/vcc.+netfront/i],
7766
- // Volvo
7767
- [[VENDOR2, "Volvo"]]
7768
- ]
7769
- });
7770
- var Bots = Object.freeze({
7771
- browser: [
7772
- ...CLIs.browser,
7773
- ...Fetchers.browser,
7774
- ...Crawlers.browser,
7775
- ...Libraries.browser
7776
- ],
7777
- os: [
7778
- ...Fetchers.os
7779
- ]
7780
- });
7781
-
7782
- // ../../node_modules/.pnpm/detect-europe-js@0.1.2/node_modules/detect-europe-js/dist/esm/index.js
7783
- var TIMEZONE = {
7784
- ANDORRA: {
7785
- ANDORRA: "Europe/Andorra"
7786
- },
7787
- AUSTRIA: {
7788
- VIENNA: "Europe/Vienna"
7789
- },
7790
- BELGIUM: {
7791
- BRUSSELS: "Europe/Brussels"
7792
- },
7793
- BULGARIA: {
7794
- SOFIA: "Europe/Sofia"
7795
- },
7796
- CROATIA: {
7797
- ZAGREB: "Europe/Zagreb"
7798
- },
7799
- CYPRUS: {
7800
- NICOSIA_EUROPE: "Europe/Nicosia",
7801
- NICOSIA_ASIA: "Asia/Nicosia",
7802
- FAMAGUSTA: "Asia/Famagusta"
7803
- },
7804
- CZECHIA: {
7805
- PRAGUE: "Europe/Prague"
7806
- },
7807
- DENMARK: {
7808
- COPENHAGEN: "Europe/Copenhagen",
7809
- FAROE: "Atlantic/Faroe"
7810
- },
7811
- ESTONIA: {
7812
- TALLINN: "Europe/Tallinn"
7813
- },
7814
- FINLAND: {
7815
- HELSINKI: "Europe/Helsinki",
7816
- MARIEHAMN: "Europe/Mariehamn"
7817
- },
7818
- FRANCE: {
7819
- PARIS: "Europe/Paris",
7820
- CAYENNE: "America/Cayenne",
7821
- GUADELOUPE: "America/Guadeloupe",
7822
- MARIGOT: "America/Marigot",
7823
- MARTINIQUE: "America/Martinique",
7824
- MAYOTTE: "Indian/Mayotte",
7825
- REUNION: "Indian/Reunion"
7826
- },
7827
- GERMANY: {
7828
- BERLIN: "Europe/Berlin",
7829
- BUSINGEN: "Europe/Busingen"
7830
- },
7831
- GREECE: {
7832
- ATHENS: "Europe/Athens"
7833
- },
7834
- HUNGARY: {
7835
- BUDAPEST: "Europe/Budapest"
7836
- },
7837
- ICELAND: {
7838
- REYKJAVIK: "Atlantic/Reykjavik"
7839
- },
7840
- IRELAND: {
7841
- DUBLIN: "Europe/Dublin"
7842
- },
7843
- ITALY: {
7844
- ROME: "Europe/Rome"
7845
- },
7846
- LATVIA: {
7847
- RIGA: "Europe/Riga"
7848
- },
7849
- LIECHTENSTEIN: {
7850
- VADUZ: "Europe/Vaduz"
7851
- },
7852
- LITHUANIA: {
7853
- VILNIUS: "Europe/Vilnius"
7854
- },
7855
- LUXEMBOURG: {
7856
- LUXEMBOURG: "Europe/Luxembourg"
7857
- },
7858
- MALTA: {
7859
- MALTA: "Europe/Malta"
7860
- },
7861
- MONACO: {
7862
- MONACO: "Europe/Monaco"
7863
- },
7864
- NETHERLANDS: {
7865
- AMSTERDAM: "Europe/Amsterdam",
7866
- ARUBA: "America/Aruba",
7867
- CURACAO: "America/Curacao",
7868
- KRALENDIJK: "America/Kralendijk",
7869
- LOWER_PRINCES: "America/Lower_Princes"
7870
- },
7871
- NORWAY: {
7872
- OSLO: "Europe/Oslo",
7873
- JAN_MAYEN: "Atlantic/Jan_Mayen",
7874
- LONGYEARBYEN: "Arctic/Longyearbyen"
7875
- },
7876
- POLAND: {
7877
- WARSAW: "Europe/Warsaw"
7878
- },
7879
- PORTUGAL: {
7880
- LISBON: "Europe/Lisbon",
7881
- AZORES: "Atlantic/Azores",
7882
- MADEIRA: "Atlantic/Madeira"
7883
- },
7884
- ROMANIA: {
7885
- BUCHAREST: "Europe/Bucharest"
7886
- },
7887
- SAN_MARINO: {
7888
- SAN_MARINO: "Europe/San_Marino"
7889
- },
7890
- SLOVAKIA: {
7891
- BRATISLAVA: "Europe/Bratislava"
7892
- },
7893
- SLOVENIA: {
7894
- LJUBLJANA: "Europe/Ljubljana"
7895
- },
7896
- SPAIN: {
7897
- MADRID: "Europe/Madrid",
7898
- CANARY: "Atlantic/Canary",
7899
- CEUTA: "Africa/Ceuta"
7900
- },
7901
- SWEDEN: {
7902
- STOCKHOLM: "Europe/Stockholm"
7903
- },
7904
- SWITZERLAND: {
7905
- ZURICH: "Europe/Zurich"
7906
- },
7907
- VATICAN: {
7908
- VATICAN: "Europe/Vatican"
7909
- }
7910
- };
7911
- var EU_TIMEZONE = [
7912
- TIMEZONE.AUSTRIA.VIENNA,
7913
- TIMEZONE.BELGIUM.BRUSSELS,
7914
- TIMEZONE.BULGARIA.SOFIA,
7915
- TIMEZONE.CROATIA.ZAGREB,
7916
- TIMEZONE.CYPRUS.NICOSIA_EUROPE,
7917
- TIMEZONE.CYPRUS.NICOSIA_ASIA,
7918
- TIMEZONE.CYPRUS.FAMAGUSTA,
7919
- TIMEZONE.CZECHIA.PRAGUE,
7920
- TIMEZONE.DENMARK.COPENHAGEN,
7921
- TIMEZONE.ESTONIA.TALLINN,
7922
- TIMEZONE.FINLAND.HELSINKI,
7923
- TIMEZONE.FINLAND.MARIEHAMN,
7924
- TIMEZONE.FRANCE.PARIS,
7925
- TIMEZONE.GERMANY.BERLIN,
7926
- TIMEZONE.GREECE.ATHENS,
7927
- TIMEZONE.HUNGARY.BUDAPEST,
7928
- TIMEZONE.IRELAND.DUBLIN,
7929
- TIMEZONE.ITALY.ROME,
7930
- TIMEZONE.LATVIA.RIGA,
7931
- TIMEZONE.LITHUANIA.VILNIUS,
7932
- TIMEZONE.LUXEMBOURG.LUXEMBOURG,
7933
- TIMEZONE.MALTA.MALTA,
7934
- TIMEZONE.NETHERLANDS.AMSTERDAM,
7935
- TIMEZONE.POLAND.WARSAW,
7936
- TIMEZONE.PORTUGAL.LISBON,
7937
- TIMEZONE.ROMANIA.BUCHAREST,
7938
- TIMEZONE.SLOVAKIA.BRATISLAVA,
7939
- TIMEZONE.SLOVENIA.LJUBLJANA,
7940
- TIMEZONE.SPAIN.MADRID,
7941
- TIMEZONE.SWEDEN.STOCKHOLM,
7942
- TIMEZONE.FRANCE.CAYENNE,
7943
- TIMEZONE.FRANCE.GUADELOUPE,
7944
- TIMEZONE.FRANCE.MARIGOT,
7945
- TIMEZONE.FRANCE.MARTINIQUE,
7946
- TIMEZONE.FRANCE.MAYOTTE,
7947
- TIMEZONE.FRANCE.REUNION,
7948
- TIMEZONE.PORTUGAL.AZORES,
7949
- TIMEZONE.PORTUGAL.MADEIRA,
7950
- TIMEZONE.SPAIN.CANARY
7951
- ];
7952
- var EEA_EFTA_TIMEZONE = [
7953
- TIMEZONE.ICELAND.REYKJAVIK,
7954
- TIMEZONE.LIECHTENSTEIN.VADUZ,
7955
- TIMEZONE.NORWAY.OSLO,
7956
- TIMEZONE.NORWAY.JAN_MAYEN
7957
- ];
7958
- var EEA_TIMEZONE = [
7959
- ...EU_TIMEZONE,
7960
- ...EEA_EFTA_TIMEZONE
7961
- ];
7962
- var EFTA_TIMEZONE = [
7963
- TIMEZONE.SWITZERLAND.ZURICH,
7964
- ...EEA_EFTA_TIMEZONE
7965
- ];
7966
- var SCHENGEN_TIMEZONE = [
7967
- TIMEZONE.AUSTRIA.VIENNA,
7968
- TIMEZONE.BELGIUM.BRUSSELS,
7969
- TIMEZONE.BULGARIA.SOFIA,
7970
- TIMEZONE.CROATIA.ZAGREB,
7971
- TIMEZONE.CZECHIA.PRAGUE,
7972
- TIMEZONE.DENMARK.COPENHAGEN,
7973
- TIMEZONE.ESTONIA.TALLINN,
7974
- TIMEZONE.FINLAND.HELSINKI,
7975
- TIMEZONE.FINLAND.MARIEHAMN,
7976
- TIMEZONE.FRANCE.PARIS,
7977
- TIMEZONE.GERMANY.BERLIN,
7978
- TIMEZONE.GREECE.ATHENS,
7979
- TIMEZONE.HUNGARY.BUDAPEST,
7980
- TIMEZONE.ITALY.ROME,
7981
- TIMEZONE.LATVIA.RIGA,
7982
- TIMEZONE.LITHUANIA.VILNIUS,
7983
- TIMEZONE.LUXEMBOURG.LUXEMBOURG,
7984
- TIMEZONE.MALTA.MALTA,
7985
- TIMEZONE.NETHERLANDS.AMSTERDAM,
7986
- TIMEZONE.POLAND.WARSAW,
7987
- TIMEZONE.PORTUGAL.LISBON,
7988
- TIMEZONE.PORTUGAL.AZORES,
7989
- TIMEZONE.PORTUGAL.MADEIRA,
7990
- TIMEZONE.ROMANIA.BUCHAREST,
7991
- TIMEZONE.SLOVAKIA.BRATISLAVA,
7992
- TIMEZONE.SLOVENIA.LJUBLJANA,
7993
- TIMEZONE.SPAIN.MADRID,
7994
- TIMEZONE.SPAIN.CANARY,
7995
- TIMEZONE.SWEDEN.STOCKHOLM,
7996
- TIMEZONE.ANDORRA.ANDORRA,
7997
- TIMEZONE.GERMANY.BUSINGEN,
7998
- TIMEZONE.ICELAND.REYKJAVIK,
7999
- TIMEZONE.LIECHTENSTEIN.VADUZ,
8000
- TIMEZONE.MONACO.MONACO,
8001
- TIMEZONE.NORWAY.OSLO,
8002
- TIMEZONE.SAN_MARINO.SAN_MARINO,
8003
- TIMEZONE.SPAIN.CEUTA,
8004
- TIMEZONE.SWITZERLAND.ZURICH,
8005
- TIMEZONE.VATICAN.VATICAN
8006
- ];
8007
-
8008
- // ../../node_modules/.pnpm/is-standalone-pwa@0.1.1/node_modules/is-standalone-pwa/dist/esm/index.js
8009
- function isStandalonePWA() {
8010
- var _a;
8011
- return typeof window !== "undefined" && ((window === null || window === void 0 ? void 0 : window.matchMedia("(display-mode: standalone)").matches) || ((_a = window.navigator) === null || _a === void 0 ? void 0 : _a.standalone) || document.referrer.startsWith("android-app://") || (window === null || window === void 0 ? void 0 : window.Windows) || /trident.+(msapphost|webview)\//i.test(navigator.userAgent) || document.referrer.startsWith("app-info://platform/microsoft-store"));
8012
- }
8013
-
8014
- // ../../node_modules/.pnpm/@ua-parser-js+pro-enterprise@2.0.6/node_modules/@ua-parser-js/pro-enterprise/src/helpers/ua-parser-helpers.mjs
8015
- var { Crawler } = Extension.BrowserName;
8016
- var toResult = (value, head, ext) => typeof value === "string" ? UAParser(value, head, ext) : value;
8017
- var isAppleSilicon = (resultOrUA) => {
8018
- const res = toResult(resultOrUA);
8019
- if (res.os.is(OSName.MACOS)) {
8020
- if (res.cpu.is(CPUArch.ARM)) {
8021
- return true;
8022
- }
8023
- if (typeof resultOrUA !== "string" && typeof window !== "undefined") {
8024
- try {
8025
- const canvas = document.createElement("canvas");
8026
- const webgl = canvas.getContext("webgl2") || canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
8027
- const debug = webgl.getExtension("WEBGL_debug_renderer_info");
8028
- const renderer = webgl.getParameter(debug.UNMASKED_RENDERER_WEBGL);
8029
- if (renderer.match(/apple m\d/i)) {
8030
- return true;
8031
- }
8032
- } catch (e) {
8033
- return false;
8034
- }
8035
- }
8036
- }
8037
- return false;
8038
- };
8039
- var isBot = (resultOrUA) => [
8040
- BrowserType.CLI,
8041
- BrowserType.CRAWLER,
8042
- BrowserType.FETCHER,
8043
- BrowserType.LIBRARY
8044
- ].includes(toResult(resultOrUA, Bots).browser.type);
8045
- var isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(EngineName.BLINK);
8046
-
8047
4523
  // src/v2/core/utils/deviceInfo.ts
8048
4524
  function getScreenResolution() {
8049
- return {
8050
- width: window.screen.width,
8051
- height: window.screen.height
8052
- };
4525
+ return { width: window.screen.width, height: window.screen.height };
8053
4526
  }
8054
4527
  function getTimeZone() {
8055
4528
  try {
8056
4529
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
8057
- } catch (error) {
8058
- console.error("Failed to get timezone:", error);
4530
+ } catch (e) {
8059
4531
  return "UTC";
8060
4532
  }
8061
4533
  }
8062
4534
  function getBrowserLocale() {
8063
4535
  try {
8064
4536
  return navigator.language || "en-US";
8065
- } catch (error) {
8066
- console.error("Failed to get browser locale:", error);
4537
+ } catch (e) {
8067
4538
  return "en-US";
8068
4539
  }
8069
4540
  }
4541
+ var UA = typeof navigator !== "undefined" ? navigator.userAgent : "";
4542
+ function match(ua, ...patterns) {
4543
+ for (const p of patterns) {
4544
+ const m = ua.match(p);
4545
+ if (m) return m;
4546
+ }
4547
+ return null;
4548
+ }
4549
+ function parseBrowser(ua) {
4550
+ const tests = [
4551
+ [/EdgA?\/([\d.]+)/i, "Edge"],
4552
+ [/OPR\/([\d.]+)/i, "Opera"],
4553
+ [/Brave\/([\d.]+)/i, "Brave"],
4554
+ [/Vivaldi\/([\d.]+)/i, "Vivaldi"],
4555
+ [/SamsungBrowser\/([\d.]+)/i, "Samsung Internet"],
4556
+ [/UCBrowser\/([\d.]+)/i, "UC Browser"],
4557
+ [/Firefox\/([\d.]+)/i, "Firefox"],
4558
+ [/CriOS\/([\d.]+)/i, "Chrome"],
4559
+ // Chrome on iOS
4560
+ [/FxiOS\/([\d.]+)/i, "Firefox"],
4561
+ // Firefox on iOS
4562
+ [/Chrome\/([\d.]+)/i, "Chrome"],
4563
+ [/Version\/([\d.]+).*Safari/i, "Safari"],
4564
+ [/Safari\/([\d.]+)/i, "Safari"]
4565
+ ];
4566
+ for (const [re, name] of tests) {
4567
+ const m = ua.match(re);
4568
+ if (m) {
4569
+ const version = m[1] || "";
4570
+ return { name, version, major: version.split(".")[0] || "" };
4571
+ }
4572
+ }
4573
+ return { name: "", version: "", major: "" };
4574
+ }
4575
+ function parseOS(ua) {
4576
+ const m = match(ua, /Windows NT ([\d.]+)/i) || match(ua, /Mac OS X ([\d_.]+)/i) || match(ua, /Android ([\d.]+)/i) || match(ua, /iPhone OS ([\d_]+)/i) || match(ua, /iPad.*OS ([\d_]+)/i) || match(ua, /CrOS[\w ]*\/([\d.]+)/i) || match(ua, /Linux/i);
4577
+ if (!m) return { name: "", version: "" };
4578
+ const raw = m[0];
4579
+ const version = (m[1] || "").replace(/_/g, ".");
4580
+ if (/Windows/i.test(raw)) {
4581
+ const ntMap = {
4582
+ "10.0": "10",
4583
+ "6.3": "8.1",
4584
+ "6.2": "8",
4585
+ "6.1": "7",
4586
+ "6.0": "Vista",
4587
+ "5.1": "XP"
4588
+ };
4589
+ return { name: "Windows", version: ntMap[version] || version };
4590
+ }
4591
+ if (/Mac OS X/i.test(raw)) return { name: "macOS", version };
4592
+ if (/Android/i.test(raw)) return { name: "Android", version };
4593
+ if (/iPhone|iPad/i.test(raw)) return { name: "iOS", version };
4594
+ if (/CrOS/i.test(raw)) return { name: "Chrome OS", version };
4595
+ if (/Linux/i.test(raw)) return { name: "Linux", version: "" };
4596
+ return { name: "", version: "" };
4597
+ }
4598
+ function parseDevice(ua) {
4599
+ var _a;
4600
+ if (/iPad/i.test(ua)) return { type: "tablet", vendor: "Apple", model: "iPad" };
4601
+ if (/iPhone/i.test(ua)) return { type: "mobile", vendor: "Apple", model: "iPhone" };
4602
+ if (/iPod/i.test(ua)) return { type: "mobile", vendor: "Apple", model: "iPod" };
4603
+ if (/Android/i.test(ua)) {
4604
+ const m = ua.match(/Android[\s\d.]+;\s*([^)]+?)(?:\s+Build)/i);
4605
+ const mobile = /Mobile/i.test(ua);
4606
+ return { type: mobile ? "mobile" : "tablet", model: (_a = m == null ? void 0 : m[1]) == null ? void 0 : _a.trim() };
4607
+ }
4608
+ return void 0;
4609
+ }
4610
+ function parseEngine(ua) {
4611
+ const m = match(ua, /AppleWebKit\/([\d.]+)/i) || match(ua, /Gecko\/([\d.]+)/i) || match(ua, /Trident\/([\d.]+)/i) || match(ua, /Presto\/([\d.]+)/i);
4612
+ if (!m) return { name: "", version: "" };
4613
+ const raw = m[0];
4614
+ const version = m[1] || "";
4615
+ if (/AppleWebKit/i.test(raw)) return { name: "WebKit", version };
4616
+ if (/Gecko/i.test(raw)) return { name: "Gecko", version };
4617
+ if (/Trident/i.test(raw)) return { name: "Trident", version };
4618
+ if (/Presto/i.test(raw)) return { name: "Presto", version };
4619
+ return { name: "", version: "" };
4620
+ }
4621
+ function parseCPU(ua) {
4622
+ if (/x86_64|x64|amd64|Win64/i.test(ua)) return { architecture: "amd64" };
4623
+ if (/ia32|x86/i.test(ua)) return { architecture: "ia32" };
4624
+ if (/aarch64|arm64/i.test(ua)) return { architecture: "arm64" };
4625
+ if (/arm/i.test(ua)) return { architecture: "arm" };
4626
+ return { architecture: "" };
4627
+ }
4628
+ function detectIsBot() {
4629
+ if (navigator.webdriver) return true;
4630
+ return /bot|crawl|spider|slurp|Googlebot|bingbot|yandex|baidu|duckduck|facebookexternalhit|Twitterbot|linkedinbot|embedly|quora|pinterest|redditbot|Slackbot|Discordbot|WhatsApp|TelegramBot|Applebot/i.test(UA);
4631
+ }
4632
+ function detectIsChromeFamily(browserName) {
4633
+ return /Chrome|Chromium|Edge|Brave|Opera|Vivaldi|Arc/i.test(browserName);
4634
+ }
4635
+ function detectIsStandalonePWA() {
4636
+ return window.matchMedia("(display-mode: standalone)").matches || navigator.standalone === true;
4637
+ }
4638
+ function detectIsAppleSilicon(osName) {
4639
+ if (!/mac/i.test(osName)) return false;
4640
+ return navigator.maxTouchPoints > 0;
4641
+ }
8070
4642
  function collectDeviceInfo() {
8071
4643
  if (typeof window === "undefined") {
8072
4644
  return {
@@ -8080,68 +4652,34 @@ var TagadaTrackerBundle = (() => {
8080
4652
  },
8081
4653
  screenResolution: { width: 0, height: 0 },
8082
4654
  timeZone: "UTC",
8083
- flags: {
8084
- isBot: false,
8085
- isChromeFamily: false,
8086
- isStandalonePWA: false,
8087
- isAppleSilicon: false
8088
- }
4655
+ flags: { isBot: false, isChromeFamily: false, isStandalonePWA: false, isAppleSilicon: false }
8089
4656
  };
8090
4657
  }
8091
- const parser = new UAParser();
8092
- const result = parser.getResult();
4658
+ const browser = parseBrowser(UA);
4659
+ const os = parseOS(UA);
4660
+ const device = parseDevice(UA);
4661
+ const engine = parseEngine(UA);
4662
+ const cpu = parseCPU(UA);
8093
4663
  let flags;
8094
4664
  try {
8095
4665
  flags = {
8096
- isBot: isBot(result),
8097
- isChromeFamily: isChromeFamily(result),
8098
- isStandalonePWA: isStandalonePWA(),
8099
- isAppleSilicon: isAppleSilicon(result)
8100
- };
8101
- } catch (error) {
8102
- console.error("Failed to compute device flags:", error);
8103
- flags = {
8104
- isBot: false,
8105
- isChromeFamily: false,
8106
- isStandalonePWA: false,
8107
- isAppleSilicon: false
4666
+ isBot: detectIsBot(),
4667
+ isChromeFamily: detectIsChromeFamily(browser.name),
4668
+ isStandalonePWA: detectIsStandalonePWA(),
4669
+ isAppleSilicon: detectIsAppleSilicon(os.name)
8108
4670
  };
4671
+ } catch (e) {
4672
+ flags = { isBot: false, isChromeFamily: false, isStandalonePWA: false, isAppleSilicon: false };
8109
4673
  }
8110
4674
  return {
8111
- userAgent: {
8112
- name: result.ua,
8113
- browser: {
8114
- major: result.browser.major || "",
8115
- name: result.browser.name || "",
8116
- version: result.browser.version || "",
8117
- type: result.browser.type
8118
- },
8119
- os: {
8120
- name: result.os.name || "",
8121
- version: result.os.version || ""
8122
- },
8123
- device: result.device.model || result.device.type || result.device.vendor ? {
8124
- model: result.device.model,
8125
- type: result.device.type,
8126
- vendor: result.device.vendor
8127
- } : void 0,
8128
- engine: {
8129
- name: result.engine.name || "",
8130
- version: result.engine.version || ""
8131
- },
8132
- cpu: {
8133
- architecture: result.cpu.architecture || ""
8134
- }
8135
- },
4675
+ userAgent: { name: UA, browser, os, device, engine, cpu },
8136
4676
  screenResolution: getScreenResolution(),
8137
4677
  timeZone: getTimeZone(),
8138
4678
  flags
8139
4679
  };
8140
4680
  }
8141
4681
  function getUrlParams() {
8142
- if (typeof window === "undefined") {
8143
- return {};
8144
- }
4682
+ if (typeof window === "undefined") return {};
8145
4683
  const params = new URLSearchParams(window.location.search);
8146
4684
  return {
8147
4685
  locale: params.get("locale") || void 0,
@@ -8374,6 +4912,17 @@ var TagadaTrackerBundle = (() => {
8374
4912
  const metaTag = document.querySelector('meta[name="'.concat(name, '"]'));
8375
4913
  return (metaTag == null ? void 0 : metaTag.getAttribute("content")) || void 0;
8376
4914
  };
4915
+ var readWindowConfig = () => {
4916
+ if (typeof window !== "undefined" && window.__TAGADA_PLUGIN_CONFIG__) {
4917
+ return window.__TAGADA_PLUGIN_CONFIG__;
4918
+ }
4919
+ try {
4920
+ const encoded = getMetaContent("x-plugin-config");
4921
+ if (encoded) return JSON.parse(decodeURIComponent(encoded));
4922
+ } catch (e) {
4923
+ }
4924
+ return {};
4925
+ };
8377
4926
  var loadProductionConfig = async () => {
8378
4927
  try {
8379
4928
  if (typeof document === "undefined") {
@@ -8385,16 +4934,7 @@ var TagadaTrackerBundle = (() => {
8385
4934
  return null;
8386
4935
  }
8387
4936
  const basePath = getMetaContent("x-plugin-base-path") || "/";
8388
- let config = {};
8389
- try {
8390
- const encodedConfig = getMetaContent("x-plugin-config");
8391
- if (encodedConfig) {
8392
- const decodedConfig = decodeURIComponent(encodedConfig);
8393
- config = JSON.parse(decodedConfig);
8394
- }
8395
- } catch (error) {
8396
- console.warn("\u26A0\uFE0F Failed to parse plugin config from meta tag:", error);
8397
- }
4937
+ const config = readWindowConfig();
8398
4938
  if (!accountId) {
8399
4939
  console.warn("\u26A0\uFE0F Plugin config: Account ID not found in meta tags");
8400
4940
  }
@@ -9065,7 +5605,7 @@ var TagadaTrackerBundle = (() => {
9065
5605
  if (this.state.debugMode) {
9066
5606
  console.log("[TagadaClient ".concat(this.instanceId, "] Initializing session..."), { sessionId: sessionData.sessionId });
9067
5607
  }
9068
- const deviceInfo = collectDeviceInfo();
5608
+ const deviceInfo = await collectDeviceInfo();
9069
5609
  const urlParams = getUrlParams();
9070
5610
  const browserLocale = getBrowserLocale();
9071
5611
  const draft = isDraftMode();
@@ -9501,193 +6041,6 @@ var TagadaTrackerBundle = (() => {
9501
6041
 
9502
6042
  // src/v2/standalone/index.ts
9503
6043
  init_funnelClient();
9504
-
9505
- // src/data/iso3166.ts
9506
- var GEODATA_CDN_BASE = "https://cvwnizdbugpz6jwk.public.blob.vercel-storage.com/geodata/v1";
9507
- var countriesCache = /* @__PURE__ */ new Map();
9508
- var regionsCache = /* @__PURE__ */ new Map();
9509
- var inflightCountries = /* @__PURE__ */ new Map();
9510
- var inflightRegions = /* @__PURE__ */ new Map();
9511
- async function fetchCountriesRaw(language) {
9512
- const cached = countriesCache.get(language);
9513
- if (cached) return cached;
9514
- let inflight = inflightCountries.get(language);
9515
- if (inflight) return inflight;
9516
- inflight = (async () => {
9517
- const url = "".concat(GEODATA_CDN_BASE, "/").concat(language, "/countries.json");
9518
- const res = await fetch(url);
9519
- if (!res.ok) throw new Error("Geodata fetch failed: ".concat(url, " (").concat(res.status, ")"));
9520
- const data = await res.json();
9521
- countriesCache.set(language, data);
9522
- inflightCountries.delete(language);
9523
- return data;
9524
- })();
9525
- inflightCountries.set(language, inflight);
9526
- return inflight;
9527
- }
9528
- async function fetchRegionsRaw(language) {
9529
- const cached = regionsCache.get(language);
9530
- if (cached) return cached;
9531
- let inflight = inflightRegions.get(language);
9532
- if (inflight) return inflight;
9533
- inflight = (async () => {
9534
- const url = "".concat(GEODATA_CDN_BASE, "/").concat(language, "/regions.json");
9535
- const res = await fetch(url);
9536
- if (!res.ok) throw new Error("Geodata fetch failed: ".concat(url, " (").concat(res.status, ")"));
9537
- const data = await res.json();
9538
- regionsCache.set(language, data);
9539
- inflightRegions.delete(language);
9540
- return data;
9541
- })();
9542
- inflightRegions.set(language, inflight);
9543
- return inflight;
9544
- }
9545
- async function ensureGeoDataLoaded(language = "en") {
9546
- await Promise.all([fetchCountriesRaw(language), fetchRegionsRaw(language)]);
9547
- }
9548
- if (typeof globalThis !== "undefined" && typeof fetch !== "undefined") {
9549
- ensureGeoDataLoaded("en").catch(() => {
9550
- });
9551
- }
9552
-
9553
- // src/v2/core/googleAutocomplete.ts
9554
- var GoogleAutocompleteCore = class {
9555
- /**
9556
- * Initialize Google Places API
9557
- */
9558
- static initialize(apiKey) {
9559
- var _a, _b;
9560
- this.apiKey = apiKey;
9561
- if (typeof window !== "undefined" && ((_b = (_a = window.google) == null ? void 0 : _a.maps) == null ? void 0 : _b.places)) {
9562
- this.service = new window.google.maps.places.AutocompleteService();
9563
- }
9564
- }
9565
- /**
9566
- * Search for places
9567
- */
9568
- static async searchPlaces(input, options = {}) {
9569
- if (!this.service || !input.trim()) {
9570
- return [];
9571
- }
9572
- return new Promise((resolve, reject) => {
9573
- this.service.getPlacePredictions(
9574
- {
9575
- input,
9576
- types: options.types || ["address"],
9577
- componentRestrictions: options.componentRestrictions
9578
- },
9579
- (predictions, status) => {
9580
- var _a, _b, _c;
9581
- if (status === ((_c = (_b = (_a = window.google) == null ? void 0 : _a.maps) == null ? void 0 : _b.places) == null ? void 0 : _c.PlacesServiceStatus.OK) && predictions) {
9582
- resolve(predictions);
9583
- } else {
9584
- resolve([]);
9585
- }
9586
- }
9587
- );
9588
- });
9589
- }
9590
- /**
9591
- * Get place details
9592
- */
9593
- static async getPlaceDetails(placeId) {
9594
- var _a, _b;
9595
- if (typeof window === "undefined" || !((_b = (_a = window.google) == null ? void 0 : _a.maps) == null ? void 0 : _b.places)) {
9596
- return null;
9597
- }
9598
- return new Promise((resolve, reject) => {
9599
- const service = new window.google.maps.places.PlacesService(
9600
- document.createElement("div")
9601
- );
9602
- service.getDetails(
9603
- {
9604
- placeId,
9605
- fields: ["place_id", "formatted_address", "address_components", "geometry"]
9606
- },
9607
- (place, status) => {
9608
- var _a2, _b2, _c;
9609
- if (status === ((_c = (_b2 = (_a2 = window.google) == null ? void 0 : _a2.maps) == null ? void 0 : _b2.places) == null ? void 0 : _c.PlacesServiceStatus.OK) && place) {
9610
- resolve(place);
9611
- } else {
9612
- resolve(null);
9613
- }
9614
- }
9615
- );
9616
- });
9617
- }
9618
- /**
9619
- * Extract address components from place details
9620
- */
9621
- static extractAddressComponents(placeDetails) {
9622
- const components = {};
9623
- for (const component of placeDetails.address_components) {
9624
- const types = component.types;
9625
- if (types.includes("street_number")) {
9626
- components.streetNumber = component.long_name;
9627
- } else if (types.includes("route")) {
9628
- components.route = component.long_name;
9629
- } else if (types.includes("locality")) {
9630
- components.city = component.long_name;
9631
- components.locality = component.long_name;
9632
- } else if (types.includes("administrative_area_level_2")) {
9633
- components.administrativeAreaLevel2 = component.short_name;
9634
- components.administrativeAreaLevel2Long = component.long_name;
9635
- if (!components.city) {
9636
- components.city = component.long_name;
9637
- components.locality = component.long_name;
9638
- }
9639
- } else if (types.includes("administrative_area_level_1")) {
9640
- components.state = component.long_name;
9641
- components.administrativeAreaLevel1 = component.short_name;
9642
- components.administrativeAreaLevel1Long = component.long_name;
9643
- } else if (types.includes("postal_code")) {
9644
- components.postalCode = component.long_name;
9645
- } else if (types.includes("country")) {
9646
- components.country = component.long_name;
9647
- components.countryCode = component.short_name;
9648
- components.iso = component.short_name;
9649
- }
9650
- }
9651
- if (!components.administrativeAreaLevel1 && components.administrativeAreaLevel2) {
9652
- components.state = components.administrativeAreaLevel2Long || components.administrativeAreaLevel2;
9653
- components.administrativeAreaLevel1 = components.administrativeAreaLevel2;
9654
- components.administrativeAreaLevel1Long = components.administrativeAreaLevel2Long;
9655
- }
9656
- return components;
9657
- }
9658
- };
9659
- GoogleAutocompleteCore.apiKey = null;
9660
- GoogleAutocompleteCore.service = null;
9661
-
9662
- // src/v2/standalone/index.ts
9663
- init_funnel();
9664
-
9665
- // src/v2/core/utils/index.ts
9666
- init_sessionStorage();
9667
-
9668
- // src/v2/core/pathRemapping.ts
9669
- var import_path_to_regexp = __toESM(require_dist());
9670
- var internalPathCache = void 0;
9671
- var isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
9672
- var originalPushState = isBrowser ? history.pushState.bind(history) : null;
9673
- var originalReplaceState = isBrowser ? history.replaceState.bind(history) : null;
9674
- function clearCache() {
9675
- internalPathCache = void 0;
9676
- }
9677
- if (isBrowser) {
9678
- window.addEventListener("popstate", clearCache);
9679
- window.addEventListener("hashchange", clearCache);
9680
- history.pushState = function(...args) {
9681
- clearCache();
9682
- return originalPushState.apply(this, args);
9683
- };
9684
- history.replaceState = function(...args) {
9685
- clearCache();
9686
- return originalReplaceState.apply(this, args);
9687
- };
9688
- }
9689
-
9690
- // src/v2/standalone/index.ts
9691
6044
  function parseStepConfigScripts() {
9692
6045
  if (typeof window === "undefined" || typeof document === "undefined") {
9693
6046
  return [];
@@ -10106,29 +6459,6 @@ var TagadaTrackerBundle = (() => {
10106
6459
  }
10107
6460
  return __toCommonJS(external_tracker_exports);
10108
6461
  })();
10109
- /*! Bundled license information:
10110
-
10111
- detect-europe-js/dist/esm/index.js:
10112
- (*! detectEurope.js v0.1.2
10113
- Determine whether a user is from the European Union (EU) area
10114
- https://github.com/faisalman/detect-europe-js
10115
- Author: Faisal Salman <f@faisalman.com>
10116
- MIT License *)
10117
-
10118
- ua-is-frozen/dist/esm/index.js:
10119
- (*! isFrozenUA
10120
- A freeze-test for your user-agent string
10121
- https://github.com/faisalman/ua-is-frozen
10122
- Author: Faisal Salman <f@faisalman.com>
10123
- MIT License *)
10124
-
10125
- is-standalone-pwa/dist/esm/index.js:
10126
- (*! isStandalonePWA 0.1.1
10127
- Detect if PWA is running in standalone mode
10128
- https://github.com/faisalman/is-standalone-pwa
10129
- Author: Faisal Salman <f@faisalman.com>
10130
- MIT License *)
10131
- */
10132
6462
  // Expose TagadaTracker globally
10133
6463
  if (typeof window !== 'undefined' && TagadaTrackerBundle && TagadaTrackerBundle.TagadaTracker) {
10134
6464
  window.TagadaTracker = TagadaTrackerBundle.TagadaTracker;