@tagadapay/plugin-sdk 3.1.12 → 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.
- package/build-cdn.js +397 -11
- package/dist/data/iso3166.d.ts +23 -33
- package/dist/data/iso3166.js +134 -198
- package/dist/data/languages.d.ts +5 -64
- package/dist/data/languages.js +23 -143
- package/dist/external-tracker.js +623 -3426
- package/dist/external-tracker.min.js +2 -25
- package/dist/external-tracker.min.js.map +4 -4
- package/dist/react/config/payment.d.ts +14 -4
- package/dist/react/config/payment.js +47 -9
- package/dist/react/hooks/useCheckout.d.ts +3 -0
- package/dist/react/hooks/useCheckout.js +4 -1
- package/dist/react/hooks/useISOData.js +1 -1
- package/dist/react/hooks/usePaymentPolling.d.ts +3 -3
- package/dist/react/hooks/usePluginConfig.js +9 -10
- package/dist/react/providers/TagadaProvider.js +1 -1
- package/dist/tagada-react-sdk-minimal.min.js +36 -0
- package/dist/tagada-react-sdk-minimal.min.js.map +7 -0
- package/dist/tagada-react-sdk.js +37821 -0
- package/dist/tagada-react-sdk.min.js +78 -0
- package/dist/tagada-react-sdk.min.js.map +7 -0
- package/dist/tagada-sdk.js +16044 -0
- package/dist/tagada-sdk.min.js +32 -0
- package/dist/tagada-sdk.min.js.map +7 -0
- package/dist/v2/cdn-react-minimal.d.ts +23 -0
- package/dist/v2/cdn-react-minimal.js +26 -0
- package/dist/v2/core/client.d.ts +4 -2
- package/dist/v2/core/client.js +5 -4
- package/dist/v2/core/config/environment.js +2 -1
- package/dist/v2/core/errors.d.ts +75 -0
- package/dist/v2/core/errors.js +104 -0
- package/dist/v2/core/funnelClient.d.ts +100 -10
- package/dist/v2/core/funnelClient.js +121 -27
- package/dist/v2/core/isoData.d.ts +4 -4
- package/dist/v2/core/isoData.js +7 -7
- package/dist/v2/core/pixelMapping.d.ts +49 -0
- package/dist/v2/core/pixelMapping.js +363 -0
- package/dist/v2/core/resources/apiClient.d.ts +2 -0
- package/dist/v2/core/resources/apiClient.js +52 -9
- package/dist/v2/core/resources/checkout.d.ts +99 -30
- package/dist/v2/core/resources/checkout.js +14 -0
- package/dist/v2/core/resources/customer.d.ts +20 -19
- package/dist/v2/core/resources/expressPaymentMethods.d.ts +1 -0
- package/dist/v2/core/resources/funnel.d.ts +17 -17
- package/dist/v2/core/resources/payments.d.ts +89 -13
- package/dist/v2/core/resources/payments.js +27 -9
- package/dist/v2/core/resources/postPurchases.d.ts +17 -0
- package/dist/v2/core/resources/postPurchases.js +20 -0
- package/dist/v2/core/types.d.ts +50 -12
- package/dist/v2/core/types.js +0 -3
- package/dist/v2/core/utils/checkout.d.ts +2 -2
- package/dist/v2/core/utils/checkout.js +7 -2
- package/dist/v2/core/utils/currency.d.ts +14 -0
- package/dist/v2/core/utils/currency.js +40 -0
- package/dist/v2/core/utils/deviceInfo.d.ts +0 -10
- package/dist/v2/core/utils/deviceInfo.js +152 -76
- package/dist/v2/core/utils/index.d.ts +1 -0
- package/dist/v2/core/utils/index.js +2 -0
- package/dist/v2/core/utils/order.d.ts +13 -9
- package/dist/v2/core/utils/pluginConfig.d.ts +8 -0
- package/dist/v2/core/utils/pluginConfig.js +36 -12
- package/dist/v2/index.d.ts +6 -3
- package/dist/v2/index.js +4 -2
- package/dist/v2/react/components/FunnelScriptInjector.js +166 -77
- package/dist/v2/react/components/StripeExpressButton.d.ts +13 -0
- package/dist/v2/react/components/StripeExpressButton.js +171 -0
- package/dist/v2/react/components/WhopCheckout.d.ts +24 -0
- package/dist/v2/react/components/WhopCheckout.js +237 -0
- package/dist/v2/react/hooks/__examples__/FunnelContextExample.js +1 -1
- package/dist/v2/react/hooks/payment-actions/useAirwallexRadarAction.d.ts +14 -0
- package/dist/v2/react/hooks/payment-actions/useAirwallexRadarAction.js +181 -0
- package/dist/v2/react/hooks/payment-actions/useErrorAction.d.ts +9 -0
- package/dist/v2/react/hooks/payment-actions/useErrorAction.js +21 -0
- package/dist/v2/react/hooks/payment-actions/useFinixRadarAction.d.ts +14 -0
- package/dist/v2/react/hooks/payment-actions/useFinixRadarAction.js +187 -0
- package/dist/v2/react/hooks/payment-actions/useKessPayAction.d.ts +11 -0
- package/dist/v2/react/hooks/payment-actions/useKessPayAction.js +91 -0
- package/dist/v2/react/hooks/payment-actions/useMasterCardAction.d.ts +24 -0
- package/dist/v2/react/hooks/payment-actions/useMasterCardAction.js +221 -0
- package/dist/v2/react/hooks/payment-actions/usePaymentActionHandler.d.ts +15 -0
- package/dist/v2/react/hooks/payment-actions/usePaymentActionHandler.js +142 -0
- package/dist/v2/react/hooks/payment-actions/useProcessorAuthAction.d.ts +3 -0
- package/dist/v2/react/hooks/payment-actions/useProcessorAuthAction.js +31 -0
- package/dist/v2/react/hooks/payment-actions/useRedirectAction.d.ts +10 -0
- package/dist/v2/react/hooks/payment-actions/useRedirectAction.js +35 -0
- package/dist/v2/react/hooks/payment-actions/useStripeRadarAction.d.ts +14 -0
- package/dist/v2/react/hooks/payment-actions/useStripeRadarAction.js +192 -0
- package/dist/v2/react/hooks/payment-actions/useThreedsAuthAction.d.ts +14 -0
- package/dist/v2/react/hooks/payment-actions/useThreedsAuthAction.js +81 -0
- package/dist/v2/react/hooks/payment-actions/useTrustFlowAction.d.ts +11 -0
- package/dist/v2/react/hooks/payment-actions/useTrustFlowAction.js +84 -0
- package/dist/v2/react/hooks/payment-processing/usePaymentInstruments.d.ts +14 -0
- package/dist/v2/react/hooks/payment-processing/usePaymentInstruments.js +36 -0
- package/dist/v2/react/hooks/payment-processing/usePaymentProcessors.d.ts +31 -0
- package/dist/v2/react/hooks/payment-processing/usePaymentProcessors.js +212 -0
- package/dist/v2/react/hooks/payment-redirect/useAirwallex3dsReturn.d.ts +14 -0
- package/dist/v2/react/hooks/payment-redirect/useAirwallex3dsReturn.js +207 -0
- package/dist/v2/react/hooks/payment-redirect/useGenericPaymentReturn.d.ts +12 -0
- package/dist/v2/react/hooks/payment-redirect/useGenericPaymentReturn.js +101 -0
- package/dist/v2/react/hooks/useApplePayCheckout.js +8 -8
- package/dist/v2/react/hooks/useCheckoutQuery.d.ts +16 -0
- package/dist/v2/react/hooks/useCheckoutQuery.js +63 -10
- package/dist/v2/react/hooks/useFunnel.d.ts +15 -4
- package/dist/v2/react/hooks/useFunnel.js +8 -4
- package/dist/v2/react/hooks/useGeoLocation.d.ts +2 -1
- package/dist/v2/react/hooks/useGeoLocation.js +4 -2
- package/dist/v2/react/hooks/useGoogleAutocomplete.d.ts +2 -0
- package/dist/v2/react/hooks/useGoogleAutocomplete.js +29 -15
- package/dist/v2/react/hooks/useISOData.d.ts +2 -5
- package/dist/v2/react/hooks/useISOData.js +26 -27
- package/dist/v2/react/hooks/usePaymentPolling.d.ts +3 -3
- package/dist/v2/react/hooks/usePaymentQuery.d.ts +18 -5
- package/dist/v2/react/hooks/usePaymentQuery.js +63 -1015
- package/dist/v2/react/hooks/usePaymentRetrieve.d.ts +3 -2
- package/dist/v2/react/hooks/usePaymentRetrieve.js +3 -1
- package/dist/v2/react/hooks/usePixelTracking.d.ts +5 -48
- package/dist/v2/react/hooks/usePixelTracking.js +283 -504
- package/dist/v2/react/hooks/usePostPurchasesQuery.js +34 -2
- package/dist/v2/react/hooks/useRemappableParams.d.ts +2 -6
- package/dist/v2/react/hooks/useRemappableParams.js +23 -23
- package/dist/v2/react/hooks/useSetPaymentMethod.d.ts +16 -0
- package/dist/v2/react/hooks/useSetPaymentMethod.js +33 -0
- package/dist/v2/react/hooks/useShippingRatesQuery.js +13 -5
- package/dist/v2/react/hooks/useStepConfig.d.ts +23 -6
- package/dist/v2/react/hooks/useStepConfig.js +14 -7
- package/dist/v2/react/hooks/useTranslation.js +23 -8
- package/dist/v2/react/hooks/useWhopPaymentPolling.d.ts +30 -0
- package/dist/v2/react/hooks/useWhopPaymentPolling.js +61 -0
- package/dist/v2/react/index.d.ts +15 -1
- package/dist/v2/react/index.js +7 -0
- package/dist/v2/react/providers/ExpressPaymentMethodsProvider.d.ts +3 -1
- package/dist/v2/react/providers/ExpressPaymentMethodsProvider.js +12 -2
- package/dist/v2/react/providers/TagadaProvider.js +74 -5
- package/dist/v2/standalone/external-tracker.d.ts +52 -46
- package/dist/v2/standalone/external-tracker.js +205 -98
- package/dist/v2/standalone/index.d.ts +40 -0
- package/dist/v2/standalone/index.js +148 -1
- package/dist/v2/standalone/payment-service.d.ts +134 -0
- package/dist/v2/standalone/payment-service.js +928 -0
- package/package.json +6 -4
- package/dist/react/utils/__tests__/urlUtils.test.d.ts +0 -1
- package/dist/react/utils/__tests__/urlUtils.test.js +0 -189
- package/dist/v2/core/__tests__/pathRemapping.test.d.ts +0 -11
- package/dist/v2/core/__tests__/pathRemapping.test.js +0 -776
package/dist/external-tracker.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TagadaPay External Tracker v3.1.
|
|
2
|
+
* TagadaPay External Tracker v3.1.24
|
|
3
3
|
* CDN Bundle - Standalone tracking for external pages (Debug Build)
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -157,7 +157,7 @@ var TagadaTrackerBundle = (() => {
|
|
|
157
157
|
const hostname = window.location.hostname;
|
|
158
158
|
const href = window.location.href;
|
|
159
159
|
console.log('[SDK] detectEnvironment() - hostname: "'.concat(hostname, '"'));
|
|
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")) {
|
|
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")) {
|
|
161
161
|
console.log("[SDK] detectEnvironment() - returning LOCAL");
|
|
162
162
|
if (typeof window !== "undefined" && ((_a = window == null ? void 0 : window.__TAGADA_ENV__) == null ? void 0 : _a.TAGADA_ENVIRONMENT)) {
|
|
163
163
|
const override = window.__TAGADA_ENV__.TAGADA_ENVIRONMENT.toLowerCase();
|
|
@@ -674,6 +674,12 @@ var TagadaTrackerBundle = (() => {
|
|
|
674
674
|
});
|
|
675
675
|
|
|
676
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
|
+
});
|
|
677
683
|
function clearSpecificCookie(cookieName) {
|
|
678
684
|
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
679
685
|
const hostname = window.location.hostname;
|
|
@@ -929,6 +935,16 @@ var TagadaTrackerBundle = (() => {
|
|
|
929
935
|
indicatorElement = container;
|
|
930
936
|
isInjected = true;
|
|
931
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
|
+
}
|
|
932
948
|
var indicatorElement, isInjected;
|
|
933
949
|
var init_previewModeIndicator = __esm({
|
|
934
950
|
"src/v2/core/utils/previewModeIndicator.ts"() {
|
|
@@ -946,14 +962,48 @@ var TagadaTrackerBundle = (() => {
|
|
|
946
962
|
__export(funnelClient_exports, {
|
|
947
963
|
FunnelClient: () => FunnelClient,
|
|
948
964
|
TrackingProvider: () => TrackingProvider,
|
|
965
|
+
findMethod: () => findMethod,
|
|
966
|
+
getAssignedOrderBumpOfferIds: () => getAssignedOrderBumpOfferIds,
|
|
949
967
|
getAssignedPaymentFlowId: () => getAssignedPaymentFlowId,
|
|
950
968
|
getAssignedPixels: () => getAssignedPixels,
|
|
969
|
+
getAssignedResources: () => getAssignedResources,
|
|
951
970
|
getAssignedScripts: () => getAssignedScripts,
|
|
952
971
|
getAssignedStaticResources: () => getAssignedStaticResources,
|
|
953
972
|
getAssignedStepConfig: () => getAssignedStepConfig,
|
|
973
|
+
getAssignedUpsellOfferIds: () => getAssignedUpsellOfferIds,
|
|
974
|
+
getEnabledMethods: () => getEnabledMethods,
|
|
975
|
+
getExpressMethods: () => getExpressMethods,
|
|
976
|
+
getExpressMethodsByProcessor: () => getExpressMethodsByProcessor,
|
|
954
977
|
getLocalFunnelConfig: () => getLocalFunnelConfig,
|
|
978
|
+
isMethodEnabled: () => isMethodEnabled,
|
|
955
979
|
loadLocalFunnelConfig: () => loadLocalFunnelConfig
|
|
956
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
|
+
}
|
|
957
1007
|
function getAssignedFunnelId() {
|
|
958
1008
|
if (typeof window === "undefined") return void 0;
|
|
959
1009
|
if (window.__TGD_FUNNEL_ID__) {
|
|
@@ -1052,11 +1102,14 @@ var TagadaTrackerBundle = (() => {
|
|
|
1052
1102
|
return localFunnelConfigCache != null ? localFunnelConfigCache : null;
|
|
1053
1103
|
}
|
|
1054
1104
|
function localConfigToStepConfig(local) {
|
|
1105
|
+
const merged = __spreadValues(__spreadValues({}, local.staticResources), local.resources);
|
|
1055
1106
|
return {
|
|
1056
1107
|
payment: local.paymentFlowId ? { paymentFlowId: local.paymentFlowId } : void 0,
|
|
1057
|
-
|
|
1108
|
+
resources: Object.keys(merged).length > 0 ? merged : void 0,
|
|
1058
1109
|
scripts: local.scripts,
|
|
1059
|
-
pixels: local.pixels
|
|
1110
|
+
pixels: local.pixels,
|
|
1111
|
+
orderBumps: local.orderBumps,
|
|
1112
|
+
upsellOffers: local.upsellOffers
|
|
1060
1113
|
};
|
|
1061
1114
|
}
|
|
1062
1115
|
function getAssignedStepConfig() {
|
|
@@ -1082,9 +1135,13 @@ var TagadaTrackerBundle = (() => {
|
|
|
1082
1135
|
return void 0;
|
|
1083
1136
|
}
|
|
1084
1137
|
function getAssignedPaymentFlowId() {
|
|
1085
|
-
var _a;
|
|
1138
|
+
var _a, _b;
|
|
1086
1139
|
const stepConfig = getAssignedStepConfig();
|
|
1087
|
-
|
|
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) {
|
|
1088
1145
|
return stepConfig.payment.paymentFlowId;
|
|
1089
1146
|
}
|
|
1090
1147
|
if (typeof window !== "undefined") {
|
|
@@ -1098,9 +1155,15 @@ var TagadaTrackerBundle = (() => {
|
|
|
1098
1155
|
}
|
|
1099
1156
|
return void 0;
|
|
1100
1157
|
}
|
|
1101
|
-
function
|
|
1158
|
+
function getAssignedResources() {
|
|
1102
1159
|
const stepConfig = getAssignedStepConfig();
|
|
1103
|
-
|
|
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();
|
|
1104
1167
|
}
|
|
1105
1168
|
function getAssignedScripts(position) {
|
|
1106
1169
|
const stepConfig = getAssignedStepConfig();
|
|
@@ -1111,6 +1174,14 @@ var TagadaTrackerBundle = (() => {
|
|
|
1111
1174
|
}
|
|
1112
1175
|
return scripts.length > 0 ? scripts : void 0;
|
|
1113
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
|
+
}
|
|
1114
1185
|
function getAssignedPixels() {
|
|
1115
1186
|
const stepConfig = getAssignedStepConfig();
|
|
1116
1187
|
const rawPixels = stepConfig == null ? void 0 : stepConfig.pixels;
|
|
@@ -1119,14 +1190,26 @@ var TagadaTrackerBundle = (() => {
|
|
|
1119
1190
|
for (const [key, value] of Object.entries(rawPixels)) {
|
|
1120
1191
|
if (!value) continue;
|
|
1121
1192
|
if (Array.isArray(value)) {
|
|
1122
|
-
normalized[key] = value;
|
|
1193
|
+
normalized[key] = value.flatMap((px) => splitPixelConfig(px));
|
|
1123
1194
|
} else if (typeof value === "object") {
|
|
1124
|
-
normalized[key] =
|
|
1195
|
+
normalized[key] = splitPixelConfig(value);
|
|
1125
1196
|
}
|
|
1126
1197
|
}
|
|
1127
1198
|
return Object.keys(normalized).length > 0 ? normalized : void 0;
|
|
1128
1199
|
}
|
|
1129
|
-
|
|
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;
|
|
1130
1213
|
var init_funnelClient = __esm({
|
|
1131
1214
|
"src/v2/core/funnelClient.ts"() {
|
|
1132
1215
|
"use strict";
|
|
@@ -1134,8 +1217,8 @@ var TagadaTrackerBundle = (() => {
|
|
|
1134
1217
|
init_funnel();
|
|
1135
1218
|
init_eventDispatcher();
|
|
1136
1219
|
init_previewMode();
|
|
1137
|
-
init_previewModeIndicator();
|
|
1138
1220
|
init_sessionStorage();
|
|
1221
|
+
lazyInjectPreviewIndicator = () => Promise.resolve().then(() => (init_previewModeIndicator(), previewModeIndicator_exports)).then((m) => m.injectPreviewModeIndicator());
|
|
1139
1222
|
TrackingProvider = /* @__PURE__ */ ((TrackingProvider2) => {
|
|
1140
1223
|
TrackingProvider2["FACEBOOK"] = "facebook";
|
|
1141
1224
|
TrackingProvider2["TIKTOK"] = "tiktok";
|
|
@@ -1286,7 +1369,7 @@ var TagadaTrackerBundle = (() => {
|
|
|
1286
1369
|
if (response.success && response.context) {
|
|
1287
1370
|
const enriched = this.enrichContext(response.context);
|
|
1288
1371
|
this.handleSessionSuccess(enriched);
|
|
1289
|
-
|
|
1372
|
+
lazyInjectPreviewIndicator();
|
|
1290
1373
|
return enriched;
|
|
1291
1374
|
} else {
|
|
1292
1375
|
throw new Error(response.error || "Failed to initialize funnel session");
|
|
@@ -1332,7 +1415,7 @@ var TagadaTrackerBundle = (() => {
|
|
|
1332
1415
|
if (response.success && response.context) {
|
|
1333
1416
|
const enriched = this.enrichContext(response.context);
|
|
1334
1417
|
this.handleSessionSuccess(enriched);
|
|
1335
|
-
|
|
1418
|
+
lazyInjectPreviewIndicator();
|
|
1336
1419
|
return enriched;
|
|
1337
1420
|
} else {
|
|
1338
1421
|
throw new Error(response.error || "Failed to initialize");
|
|
@@ -1429,12 +1512,6 @@ var TagadaTrackerBundle = (() => {
|
|
|
1429
1512
|
return result;
|
|
1430
1513
|
}
|
|
1431
1514
|
const shouldAutoRedirect = (options == null ? void 0 : options.autoRedirect) !== void 0 ? options.autoRedirect : this.config.autoRedirect !== false;
|
|
1432
|
-
if (!shouldAutoRedirect) {
|
|
1433
|
-
if (this.config.debugMode) {
|
|
1434
|
-
console.log("\u{1F504} [FunnelClient] Refreshing session (no auto-redirect)");
|
|
1435
|
-
}
|
|
1436
|
-
await this.refreshSession();
|
|
1437
|
-
}
|
|
1438
1515
|
this.updateState({ isNavigating: false, isLoading: false });
|
|
1439
1516
|
if (shouldAutoRedirect && (result == null ? void 0 : result.url) && typeof window !== "undefined") {
|
|
1440
1517
|
if (this.config.debugMode) {
|
|
@@ -1552,6 +1629,7 @@ var TagadaTrackerBundle = (() => {
|
|
|
1552
1629
|
// src/v2/standalone/external-tracker.ts
|
|
1553
1630
|
var external_tracker_exports = {};
|
|
1554
1631
|
__export(external_tracker_exports, {
|
|
1632
|
+
TRACKER_VERSION: () => TRACKER_VERSION,
|
|
1555
1633
|
TagadaExternalTracker: () => TagadaExternalTracker,
|
|
1556
1634
|
TagadaTracker: () => TagadaTracker
|
|
1557
1635
|
});
|
|
@@ -2160,8 +2238,8 @@ var TagadaTrackerBundle = (() => {
|
|
|
2160
2238
|
"%20": "+",
|
|
2161
2239
|
"%00": "\0"
|
|
2162
2240
|
};
|
|
2163
|
-
return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(
|
|
2164
|
-
return charMap[
|
|
2241
|
+
return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match2) {
|
|
2242
|
+
return charMap[match2];
|
|
2165
2243
|
});
|
|
2166
2244
|
}
|
|
2167
2245
|
function AxiosURLSearchParams(params, options) {
|
|
@@ -2340,8 +2418,8 @@ var TagadaTrackerBundle = (() => {
|
|
|
2340
2418
|
|
|
2341
2419
|
// ../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/formDataToJSON.js
|
|
2342
2420
|
function parsePropPath(name) {
|
|
2343
|
-
return utils_default.matchAll(/\w+|\[(\w*)]/g, name).map((
|
|
2344
|
-
return
|
|
2421
|
+
return utils_default.matchAll(/\w+|\[(\w*)]/g, name).map((match2) => {
|
|
2422
|
+
return match2[0] === "[]" ? "" : match2[1] || match2[0];
|
|
2345
2423
|
});
|
|
2346
2424
|
}
|
|
2347
2425
|
function arrayToObject(arr) {
|
|
@@ -2559,9 +2637,9 @@ var TagadaTrackerBundle = (() => {
|
|
|
2559
2637
|
function parseTokens(str) {
|
|
2560
2638
|
const tokens = /* @__PURE__ */ Object.create(null);
|
|
2561
2639
|
const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;
|
|
2562
|
-
let
|
|
2563
|
-
while (
|
|
2564
|
-
tokens[
|
|
2640
|
+
let match2;
|
|
2641
|
+
while (match2 = tokensRE.exec(str)) {
|
|
2642
|
+
tokens[match2[1]] = match2[2];
|
|
2565
2643
|
}
|
|
2566
2644
|
return tokens;
|
|
2567
2645
|
}
|
|
@@ -2820,8 +2898,8 @@ var TagadaTrackerBundle = (() => {
|
|
|
2820
2898
|
|
|
2821
2899
|
// ../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/parseProtocol.js
|
|
2822
2900
|
function parseProtocol(url) {
|
|
2823
|
-
const
|
|
2824
|
-
return
|
|
2901
|
+
const match2 = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
|
|
2902
|
+
return match2 && match2[1] || "";
|
|
2825
2903
|
}
|
|
2826
2904
|
|
|
2827
2905
|
// ../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/speedometer.js
|
|
@@ -2965,8 +3043,8 @@ var TagadaTrackerBundle = (() => {
|
|
|
2965
3043
|
},
|
|
2966
3044
|
read(name) {
|
|
2967
3045
|
if (typeof document === "undefined") return null;
|
|
2968
|
-
const
|
|
2969
|
-
return
|
|
3046
|
+
const match2 = document.cookie.match(new RegExp("(?:^|; )" + name + "=([^;]*)"));
|
|
3047
|
+
return match2 ? decodeURIComponent(match2[1]) : null;
|
|
2970
3048
|
},
|
|
2971
3049
|
remove(name) {
|
|
2972
3050
|
this.write(name, "", Date.now() - 864e5, "/");
|
|
@@ -4177,6 +4255,75 @@ var TagadaTrackerBundle = (() => {
|
|
|
4177
4255
|
mergeConfig: mergeConfig2
|
|
4178
4256
|
} = axios_default;
|
|
4179
4257
|
|
|
4258
|
+
// src/v2/core/errors.ts
|
|
4259
|
+
var TagadaErrorCode = {
|
|
4260
|
+
NETWORK_ERROR: "network_error",
|
|
4261
|
+
API_ERROR: "api_error",
|
|
4262
|
+
AUTH_REQUIRED: "auth_required",
|
|
4263
|
+
TOKEN_EXPIRED: "token_expired",
|
|
4264
|
+
NOT_FOUND: "not_found",
|
|
4265
|
+
VALIDATION_ERROR: "validation_error",
|
|
4266
|
+
CIRCUIT_BREAKER: "circuit_breaker",
|
|
4267
|
+
PAYMENT_FAILED: "payment_failed",
|
|
4268
|
+
CARD_DECLINED: "card_declined",
|
|
4269
|
+
SESSION_EXPIRED: "session_expired",
|
|
4270
|
+
RATE_LIMITED: "rate_limited",
|
|
4271
|
+
TIMEOUT: "timeout",
|
|
4272
|
+
UNKNOWN: "unknown"
|
|
4273
|
+
};
|
|
4274
|
+
var TagadaError = class extends Error {
|
|
4275
|
+
constructor(message, options) {
|
|
4276
|
+
var _a;
|
|
4277
|
+
super(message);
|
|
4278
|
+
this.name = "TagadaError";
|
|
4279
|
+
this.code = options.code;
|
|
4280
|
+
this.statusCode = options.statusCode;
|
|
4281
|
+
this.retryable = (_a = options.retryable) != null ? _a : false;
|
|
4282
|
+
this.details = options.details;
|
|
4283
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
4284
|
+
}
|
|
4285
|
+
};
|
|
4286
|
+
var TagadaApiError = class extends TagadaError {
|
|
4287
|
+
constructor(message, statusCode, options) {
|
|
4288
|
+
var _a, _b;
|
|
4289
|
+
super(message, {
|
|
4290
|
+
code: (_a = options == null ? void 0 : options.code) != null ? _a : TagadaErrorCode.API_ERROR,
|
|
4291
|
+
statusCode,
|
|
4292
|
+
retryable: (_b = options == null ? void 0 : options.retryable) != null ? _b : statusCode >= 500,
|
|
4293
|
+
details: options == null ? void 0 : options.details
|
|
4294
|
+
});
|
|
4295
|
+
this.name = "TagadaApiError";
|
|
4296
|
+
}
|
|
4297
|
+
};
|
|
4298
|
+
var TagadaNetworkError = class extends TagadaError {
|
|
4299
|
+
constructor(message = "Network request failed") {
|
|
4300
|
+
super(message, {
|
|
4301
|
+
code: TagadaErrorCode.NETWORK_ERROR,
|
|
4302
|
+
retryable: true
|
|
4303
|
+
});
|
|
4304
|
+
this.name = "TagadaNetworkError";
|
|
4305
|
+
}
|
|
4306
|
+
};
|
|
4307
|
+
var TagadaAuthError = class extends TagadaError {
|
|
4308
|
+
constructor(message = "Authentication required", statusCode = 401) {
|
|
4309
|
+
super(message, {
|
|
4310
|
+
code: TagadaErrorCode.AUTH_REQUIRED,
|
|
4311
|
+
statusCode,
|
|
4312
|
+
retryable: false
|
|
4313
|
+
});
|
|
4314
|
+
this.name = "TagadaAuthError";
|
|
4315
|
+
}
|
|
4316
|
+
};
|
|
4317
|
+
var TagadaCircuitBreakerError = class extends TagadaError {
|
|
4318
|
+
constructor(message) {
|
|
4319
|
+
super(message, {
|
|
4320
|
+
code: TagadaErrorCode.CIRCUIT_BREAKER,
|
|
4321
|
+
retryable: false
|
|
4322
|
+
});
|
|
4323
|
+
this.name = "TagadaCircuitBreakerError";
|
|
4324
|
+
}
|
|
4325
|
+
};
|
|
4326
|
+
|
|
4180
4327
|
// src/v2/core/resources/apiClient.ts
|
|
4181
4328
|
var ApiClient = class {
|
|
4182
4329
|
// Max 30 requests per endpoint in window
|
|
@@ -4234,12 +4381,18 @@ var TagadaTrackerBundle = (() => {
|
|
|
4234
4381
|
}
|
|
4235
4382
|
);
|
|
4236
4383
|
this.axios.interceptors.response.use(
|
|
4237
|
-
(response) =>
|
|
4238
|
-
return response;
|
|
4239
|
-
},
|
|
4384
|
+
(response) => response,
|
|
4240
4385
|
(error) => {
|
|
4241
4386
|
console.error("[SDK] Response error:", error.message);
|
|
4242
|
-
|
|
4387
|
+
if (error instanceof TagadaError) {
|
|
4388
|
+
return Promise.reject(error);
|
|
4389
|
+
}
|
|
4390
|
+
if (axios_default.isAxiosError(error)) {
|
|
4391
|
+
return Promise.reject(this.toTagadaError(error));
|
|
4392
|
+
}
|
|
4393
|
+
return Promise.reject(
|
|
4394
|
+
error instanceof Error ? error : new Error(String(error))
|
|
4395
|
+
);
|
|
4243
4396
|
}
|
|
4244
4397
|
);
|
|
4245
4398
|
}
|
|
@@ -4316,9 +4469,9 @@ var TagadaTrackerBundle = (() => {
|
|
|
4316
4469
|
}
|
|
4317
4470
|
history.count++;
|
|
4318
4471
|
if (history.count > this.MAX_REQUESTS) {
|
|
4319
|
-
|
|
4320
|
-
|
|
4321
|
-
|
|
4472
|
+
throw new TagadaCircuitBreakerError(
|
|
4473
|
+
"Circuit Breaker: Too many requests to ".concat(key, " (").concat(history.count, " in ").concat(this.WINDOW_MS, "ms)")
|
|
4474
|
+
);
|
|
4322
4475
|
}
|
|
4323
4476
|
}
|
|
4324
4477
|
cleanupHistory() {
|
|
@@ -4329,3264 +4482,163 @@ var TagadaTrackerBundle = (() => {
|
|
|
4329
4482
|
}
|
|
4330
4483
|
}
|
|
4331
4484
|
}
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
UNDEFINED: "undefined"
|
|
4345
|
-
};
|
|
4346
|
-
var BROWSER = "browser";
|
|
4347
|
-
var CPU = "cpu";
|
|
4348
|
-
var DEVICE = "device";
|
|
4349
|
-
var ENGINE = "engine";
|
|
4350
|
-
var OS = "os";
|
|
4351
|
-
var RESULT = "result";
|
|
4352
|
-
var NAME = "name";
|
|
4353
|
-
var TYPE = "type";
|
|
4354
|
-
var VENDOR = "vendor";
|
|
4355
|
-
var VERSION3 = "version";
|
|
4356
|
-
var ARCHITECTURE = "architecture";
|
|
4357
|
-
var MAJOR = "major";
|
|
4358
|
-
var MODEL = "model";
|
|
4359
|
-
var CONSOLE = "console";
|
|
4360
|
-
var MOBILE = "mobile";
|
|
4361
|
-
var TABLET = "tablet";
|
|
4362
|
-
var SMARTTV = "smarttv";
|
|
4363
|
-
var WEARABLE = "wearable";
|
|
4364
|
-
var XR = "xr";
|
|
4365
|
-
var EMBEDDED = "embedded";
|
|
4366
|
-
var INAPP = "inapp";
|
|
4367
|
-
var BRANDS = "brands";
|
|
4368
|
-
var FORMFACTORS = "formFactors";
|
|
4369
|
-
var FULLVERLIST = "fullVersionList";
|
|
4370
|
-
var PLATFORM = "platform";
|
|
4371
|
-
var PLATFORMVER = "platformVersion";
|
|
4372
|
-
var BITNESS = "bitness";
|
|
4373
|
-
var CH = "sec-ch-ua";
|
|
4374
|
-
var CH_FULL_VER_LIST = CH + "-full-version-list";
|
|
4375
|
-
var CH_ARCH = CH + "-arch";
|
|
4376
|
-
var CH_BITNESS = CH + "-" + BITNESS;
|
|
4377
|
-
var CH_FORM_FACTORS = CH + "-form-factors";
|
|
4378
|
-
var CH_MOBILE = CH + "-" + MOBILE;
|
|
4379
|
-
var CH_MODEL = CH + "-" + MODEL;
|
|
4380
|
-
var CH_PLATFORM = CH + "-" + PLATFORM;
|
|
4381
|
-
var CH_PLATFORM_VER = CH_PLATFORM + "-version";
|
|
4382
|
-
var CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS];
|
|
4383
|
-
var AMAZON = "Amazon";
|
|
4384
|
-
var APPLE = "Apple";
|
|
4385
|
-
var ASUS = "ASUS";
|
|
4386
|
-
var BLACKBERRY = "BlackBerry";
|
|
4387
|
-
var GOOGLE = "Google";
|
|
4388
|
-
var HUAWEI = "Huawei";
|
|
4389
|
-
var LENOVO = "Lenovo";
|
|
4390
|
-
var HONOR = "Honor";
|
|
4391
|
-
var LG = "LG";
|
|
4392
|
-
var MICROSOFT = "Microsoft";
|
|
4393
|
-
var MOTOROLA = "Motorola";
|
|
4394
|
-
var NVIDIA = "Nvidia";
|
|
4395
|
-
var ONEPLUS = "OnePlus";
|
|
4396
|
-
var OPPO = "OPPO";
|
|
4397
|
-
var SAMSUNG = "Samsung";
|
|
4398
|
-
var SHARP = "Sharp";
|
|
4399
|
-
var SONY = "Sony";
|
|
4400
|
-
var XIAOMI = "Xiaomi";
|
|
4401
|
-
var ZEBRA = "Zebra";
|
|
4402
|
-
var CHROME = "Chrome";
|
|
4403
|
-
var CHROMIUM = "Chromium";
|
|
4404
|
-
var CHROMECAST = "Chromecast";
|
|
4405
|
-
var EDGE = "Edge";
|
|
4406
|
-
var FIREFOX = "Firefox";
|
|
4407
|
-
var OPERA = "Opera";
|
|
4408
|
-
var FACEBOOK = "Facebook";
|
|
4409
|
-
var SOGOU = "Sogou";
|
|
4410
|
-
var PREFIX_MOBILE = "Mobile ";
|
|
4411
|
-
var SUFFIX_BROWSER = " Browser";
|
|
4412
|
-
var WINDOWS = "Windows";
|
|
4413
|
-
var isWindow = typeof window !== TYPEOF.UNDEFINED;
|
|
4414
|
-
var NAVIGATOR = isWindow && window.navigator ? window.navigator : void 0;
|
|
4415
|
-
var NAVIGATOR_UADATA = NAVIGATOR && NAVIGATOR.userAgentData ? NAVIGATOR.userAgentData : void 0;
|
|
4416
|
-
var extend2 = function(defaultRgx, extensions) {
|
|
4417
|
-
var mergedRgx = {};
|
|
4418
|
-
var extraRgx = extensions;
|
|
4419
|
-
if (!isExtensions(extensions)) {
|
|
4420
|
-
extraRgx = {};
|
|
4421
|
-
for (var i in extensions) {
|
|
4422
|
-
for (var j in extensions[i]) {
|
|
4423
|
-
extraRgx[j] = extensions[i][j].concat(extraRgx[j] ? extraRgx[j] : []);
|
|
4424
|
-
}
|
|
4425
|
-
}
|
|
4426
|
-
}
|
|
4427
|
-
for (var k in defaultRgx) {
|
|
4428
|
-
mergedRgx[k] = extraRgx[k] && extraRgx[k].length % 2 === 0 ? extraRgx[k].concat(defaultRgx[k]) : defaultRgx[k];
|
|
4429
|
-
}
|
|
4430
|
-
return mergedRgx;
|
|
4431
|
-
};
|
|
4432
|
-
var enumerize = function(arr) {
|
|
4433
|
-
var enums = {};
|
|
4434
|
-
for (var i = 0; i < arr.length; i++) {
|
|
4435
|
-
enums[arr[i].toUpperCase()] = arr[i];
|
|
4436
|
-
}
|
|
4437
|
-
return enums;
|
|
4438
|
-
};
|
|
4439
|
-
var has = function(str1, str2) {
|
|
4440
|
-
if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {
|
|
4441
|
-
for (var i in str1) {
|
|
4442
|
-
if (lowerize(str2) == lowerize(str1[i])) return true;
|
|
4443
|
-
}
|
|
4444
|
-
return false;
|
|
4445
|
-
}
|
|
4446
|
-
return isString2(str1) ? lowerize(str2) == lowerize(str1) : false;
|
|
4447
|
-
};
|
|
4448
|
-
var isExtensions = function(obj, deep) {
|
|
4449
|
-
for (var prop in obj) {
|
|
4450
|
-
return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);
|
|
4451
|
-
}
|
|
4452
|
-
};
|
|
4453
|
-
var isString2 = function(val) {
|
|
4454
|
-
return typeof val === TYPEOF.STRING;
|
|
4455
|
-
};
|
|
4456
|
-
var itemListToArray = function(header) {
|
|
4457
|
-
if (!header) return void 0;
|
|
4458
|
-
var arr = [];
|
|
4459
|
-
var tokens = strip(/\\?\"/g, header).split(",");
|
|
4460
|
-
for (var i = 0; i < tokens.length; i++) {
|
|
4461
|
-
if (tokens[i].indexOf(";") > -1) {
|
|
4462
|
-
var token = trim2(tokens[i]).split(";v=");
|
|
4463
|
-
arr[i] = { brand: token[0], version: token[1] };
|
|
4464
|
-
} else {
|
|
4465
|
-
arr[i] = trim2(tokens[i]);
|
|
4466
|
-
}
|
|
4467
|
-
}
|
|
4468
|
-
return arr;
|
|
4469
|
-
};
|
|
4470
|
-
var lowerize = function(str) {
|
|
4471
|
-
return isString2(str) ? str.toLowerCase() : str;
|
|
4472
|
-
};
|
|
4473
|
-
var majorize = function(version) {
|
|
4474
|
-
return isString2(version) ? strip(/[^\d\.]/g, version).split(".")[0] : void 0;
|
|
4475
|
-
};
|
|
4476
|
-
var setProps = function(arr) {
|
|
4477
|
-
for (var i in arr) {
|
|
4478
|
-
if (!arr.hasOwnProperty(i)) continue;
|
|
4479
|
-
var propName = arr[i];
|
|
4480
|
-
if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {
|
|
4481
|
-
this[propName[0]] = propName[1];
|
|
4482
|
-
} else {
|
|
4483
|
-
this[propName] = void 0;
|
|
4484
|
-
}
|
|
4485
|
-
}
|
|
4486
|
-
return this;
|
|
4487
|
-
};
|
|
4488
|
-
var strip = function(pattern, str) {
|
|
4489
|
-
return isString2(str) ? str.replace(pattern, EMPTY) : str;
|
|
4490
|
-
};
|
|
4491
|
-
var stripQuotes = function(str) {
|
|
4492
|
-
return strip(/\\?\"/g, str);
|
|
4493
|
-
};
|
|
4494
|
-
var trim2 = function(str, len) {
|
|
4495
|
-
str = strip(/^\s\s*/, String(str));
|
|
4496
|
-
return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);
|
|
4497
|
-
};
|
|
4498
|
-
var rgxMapper = function(ua, arrays) {
|
|
4499
|
-
if (!ua || !arrays) return;
|
|
4500
|
-
var i = 0, j, k, p, q, matches, match;
|
|
4501
|
-
while (i < arrays.length && !matches) {
|
|
4502
|
-
var regex = arrays[i], props = arrays[i + 1];
|
|
4503
|
-
j = k = 0;
|
|
4504
|
-
while (j < regex.length && !matches) {
|
|
4505
|
-
if (!regex[j]) {
|
|
4506
|
-
break;
|
|
4507
|
-
}
|
|
4508
|
-
matches = regex[j++].exec(ua);
|
|
4509
|
-
if (!!matches) {
|
|
4510
|
-
for (p = 0; p < props.length; p++) {
|
|
4511
|
-
match = matches[++k];
|
|
4512
|
-
q = props[p];
|
|
4513
|
-
if (typeof q === TYPEOF.OBJECT && q.length > 0) {
|
|
4514
|
-
if (q.length === 2) {
|
|
4515
|
-
if (typeof q[1] == TYPEOF.FUNCTION) {
|
|
4516
|
-
this[q[0]] = q[1].call(this, match);
|
|
4517
|
-
} else {
|
|
4518
|
-
this[q[0]] = q[1];
|
|
4519
|
-
}
|
|
4520
|
-
} else if (q.length >= 3) {
|
|
4521
|
-
if (typeof q[1] === TYPEOF.FUNCTION && !(q[1].exec && q[1].test)) {
|
|
4522
|
-
if (q.length > 3) {
|
|
4523
|
-
this[q[0]] = match ? q[1].apply(this, q.slice(2)) : void 0;
|
|
4524
|
-
} else {
|
|
4525
|
-
this[q[0]] = match ? q[1].call(this, match, q[2]) : void 0;
|
|
4526
|
-
}
|
|
4527
|
-
} else {
|
|
4528
|
-
if (q.length == 3) {
|
|
4529
|
-
this[q[0]] = match ? match.replace(q[1], q[2]) : void 0;
|
|
4530
|
-
} else if (q.length == 4) {
|
|
4531
|
-
this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : void 0;
|
|
4532
|
-
} else if (q.length > 4) {
|
|
4533
|
-
this[q[0]] = match ? q[3].apply(this, [match.replace(q[1], q[2])].concat(q.slice(4))) : void 0;
|
|
4534
|
-
}
|
|
4535
|
-
}
|
|
4536
|
-
}
|
|
4537
|
-
} else {
|
|
4538
|
-
this[q] = match ? match : void 0;
|
|
4539
|
-
}
|
|
4540
|
-
}
|
|
4541
|
-
}
|
|
4542
|
-
}
|
|
4543
|
-
i += 2;
|
|
4544
|
-
}
|
|
4545
|
-
};
|
|
4546
|
-
var strMapper = function(str, map) {
|
|
4547
|
-
for (var i in map) {
|
|
4548
|
-
if (typeof map[i] === TYPEOF.OBJECT && map[i].length > 0) {
|
|
4549
|
-
for (var j = 0; j < map[i].length; j++) {
|
|
4550
|
-
if (has(map[i][j], str)) {
|
|
4551
|
-
return i === UNKNOWN ? void 0 : i;
|
|
4552
|
-
}
|
|
4553
|
-
}
|
|
4554
|
-
} else if (has(map[i], str)) {
|
|
4555
|
-
return i === UNKNOWN ? void 0 : i;
|
|
4556
|
-
}
|
|
4557
|
-
}
|
|
4558
|
-
return map.hasOwnProperty("*") ? map["*"] : str;
|
|
4559
|
-
};
|
|
4560
|
-
var windowsVersionMap = {
|
|
4561
|
-
"ME": "4.90",
|
|
4562
|
-
"NT 3.51": "3.51",
|
|
4563
|
-
"NT 4.0": "4.0",
|
|
4564
|
-
"2000": ["5.0", "5.01"],
|
|
4565
|
-
"XP": ["5.1", "5.2"],
|
|
4566
|
-
"Vista": "6.0",
|
|
4567
|
-
"7": "6.1",
|
|
4568
|
-
"8": "6.2",
|
|
4569
|
-
"8.1": "6.3",
|
|
4570
|
-
"10": ["6.4", "10.0"],
|
|
4571
|
-
"NT": ""
|
|
4572
|
-
};
|
|
4573
|
-
var formFactorsMap = {
|
|
4574
|
-
"embedded": "Automotive",
|
|
4575
|
-
"mobile": "Mobile",
|
|
4576
|
-
"tablet": ["Tablet", "EInk"],
|
|
4577
|
-
"smarttv": "TV",
|
|
4578
|
-
"wearable": "Watch",
|
|
4579
|
-
"xr": ["VR", "XR"],
|
|
4580
|
-
"?": ["Desktop", "Unknown"],
|
|
4581
|
-
"*": void 0
|
|
4582
|
-
};
|
|
4583
|
-
var browserHintsMap = {
|
|
4584
|
-
"Chrome": "Google Chrome",
|
|
4585
|
-
"Edge": "Microsoft Edge",
|
|
4586
|
-
"Edge WebView2": "Microsoft Edge WebView2",
|
|
4587
|
-
"Chrome WebView": "Android WebView",
|
|
4588
|
-
"Chrome Headless": "HeadlessChrome",
|
|
4589
|
-
"Huawei Browser": "HuaweiBrowser",
|
|
4590
|
-
"MIUI Browser": "Miui Browser",
|
|
4591
|
-
"Opera Mobi": "OperaMobile",
|
|
4592
|
-
"Yandex": "YaBrowser"
|
|
4593
|
-
};
|
|
4594
|
-
var defaultRegexes = {
|
|
4595
|
-
browser: [
|
|
4596
|
-
[
|
|
4597
|
-
// Most common regardless engine
|
|
4598
|
-
/\b(?:crmo|crios)\/([\w\.]+)/i
|
|
4599
|
-
// Chrome for Android/iOS
|
|
4600
|
-
],
|
|
4601
|
-
[VERSION3, [NAME, PREFIX_MOBILE + "Chrome"]],
|
|
4602
|
-
[
|
|
4603
|
-
/webview.+edge\/([\w\.]+)/i
|
|
4604
|
-
// Microsoft Edge
|
|
4605
|
-
],
|
|
4606
|
-
[VERSION3, [NAME, EDGE + " WebView"]],
|
|
4607
|
-
[
|
|
4608
|
-
/edg(?:e|ios|a)?\/([\w\.]+)/i
|
|
4609
|
-
],
|
|
4610
|
-
[VERSION3, [NAME, "Edge"]],
|
|
4611
|
-
[
|
|
4612
|
-
// Presto based
|
|
4613
|
-
/(opera mini)\/([-\w\.]+)/i,
|
|
4614
|
-
// Opera Mini
|
|
4615
|
-
/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
|
|
4616
|
-
// Opera Mobi/Tablet
|
|
4617
|
-
/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
|
|
4618
|
-
// Opera
|
|
4619
|
-
],
|
|
4620
|
-
[NAME, VERSION3],
|
|
4621
|
-
[
|
|
4622
|
-
/opios[\/ ]+([\w\.]+)/i
|
|
4623
|
-
// Opera mini on iphone >= 8.0
|
|
4624
|
-
],
|
|
4625
|
-
[VERSION3, [NAME, OPERA + " Mini"]],
|
|
4626
|
-
[
|
|
4627
|
-
/\bop(?:rg)?x\/([\w\.]+)/i
|
|
4628
|
-
// Opera GX
|
|
4629
|
-
],
|
|
4630
|
-
[VERSION3, [NAME, OPERA + " GX"]],
|
|
4631
|
-
[
|
|
4632
|
-
/\bopr\/([\w\.]+)/i
|
|
4633
|
-
// Opera Webkit
|
|
4634
|
-
],
|
|
4635
|
-
[VERSION3, [NAME, OPERA]],
|
|
4636
|
-
[
|
|
4637
|
-
// Mixed
|
|
4638
|
-
/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i
|
|
4639
|
-
// Baidu
|
|
4640
|
-
],
|
|
4641
|
-
[VERSION3, [NAME, "Baidu"]],
|
|
4642
|
-
[
|
|
4643
|
-
/\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i
|
|
4644
|
-
// Maxthon
|
|
4645
|
-
],
|
|
4646
|
-
[VERSION3, [NAME, "Maxthon"]],
|
|
4647
|
-
[
|
|
4648
|
-
/(kindle)\/([\w\.]+)/i,
|
|
4649
|
-
// Kindle
|
|
4650
|
-
/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
|
|
4651
|
-
// Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
|
|
4652
|
-
// Trident based
|
|
4653
|
-
/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,
|
|
4654
|
-
// Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
|
|
4655
|
-
/(?:ms|\()(ie) ([\w\.]+)/i,
|
|
4656
|
-
// Internet Explorer
|
|
4657
|
-
// Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon
|
|
4658
|
-
/(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,
|
|
4659
|
-
// Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
|
|
4660
|
-
/(heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i,
|
|
4661
|
-
// HeyTap/Ovi/115/Surf
|
|
4662
|
-
/(qwant)(?:ios|mobile)\/([\d\.]+)/i,
|
|
4663
|
-
// Qwant
|
|
4664
|
-
/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i
|
|
4665
|
-
// Ecosia/Weibo
|
|
4666
|
-
],
|
|
4667
|
-
[NAME, VERSION3],
|
|
4668
|
-
[
|
|
4669
|
-
/quark(?:pc)?\/([-\w\.]+)/i
|
|
4670
|
-
// Quark
|
|
4671
|
-
],
|
|
4672
|
-
[VERSION3, [NAME, "Quark"]],
|
|
4673
|
-
[
|
|
4674
|
-
/\bddg\/([\w\.]+)/i
|
|
4675
|
-
// DuckDuckGo
|
|
4676
|
-
],
|
|
4677
|
-
[VERSION3, [NAME, "DuckDuckGo"]],
|
|
4678
|
-
[
|
|
4679
|
-
/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
|
|
4680
|
-
// UCBrowser
|
|
4681
|
-
],
|
|
4682
|
-
[VERSION3, [NAME, "UCBrowser"]],
|
|
4683
|
-
[
|
|
4684
|
-
/microm.+\bqbcore\/([\w\.]+)/i,
|
|
4685
|
-
// WeChat Desktop for Windows Built-in Browser
|
|
4686
|
-
/\bqbcore\/([\w\.]+).+microm/i,
|
|
4687
|
-
/micromessenger\/([\w\.]+)/i
|
|
4688
|
-
// WeChat
|
|
4689
|
-
],
|
|
4690
|
-
[VERSION3, [NAME, "WeChat"]],
|
|
4691
|
-
[
|
|
4692
|
-
/konqueror\/([\w\.]+)/i
|
|
4693
|
-
// Konqueror
|
|
4694
|
-
],
|
|
4695
|
-
[VERSION3, [NAME, "Konqueror"]],
|
|
4696
|
-
[
|
|
4697
|
-
/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
|
|
4698
|
-
// IE11
|
|
4699
|
-
],
|
|
4700
|
-
[VERSION3, [NAME, "IE"]],
|
|
4701
|
-
[
|
|
4702
|
-
/ya(?:search)?browser\/([\w\.]+)/i
|
|
4703
|
-
// Yandex
|
|
4704
|
-
],
|
|
4705
|
-
[VERSION3, [NAME, "Yandex"]],
|
|
4706
|
-
[
|
|
4707
|
-
/slbrowser\/([\w\.]+)/i
|
|
4708
|
-
// Smart Lenovo Browser
|
|
4709
|
-
],
|
|
4710
|
-
[VERSION3, [NAME, "Smart " + LENOVO + SUFFIX_BROWSER]],
|
|
4711
|
-
[
|
|
4712
|
-
/(avast|avg)\/([\w\.]+)/i
|
|
4713
|
-
// Avast/AVG Secure Browser
|
|
4714
|
-
],
|
|
4715
|
-
[[NAME, /(.+)/, "$1 Secure" + SUFFIX_BROWSER], VERSION3],
|
|
4716
|
-
[
|
|
4717
|
-
/\bfocus\/([\w\.]+)/i
|
|
4718
|
-
// Firefox Focus
|
|
4719
|
-
],
|
|
4720
|
-
[VERSION3, [NAME, FIREFOX + " Focus"]],
|
|
4721
|
-
[
|
|
4722
|
-
/\bopt\/([\w\.]+)/i
|
|
4723
|
-
// Opera Touch
|
|
4724
|
-
],
|
|
4725
|
-
[VERSION3, [NAME, OPERA + " Touch"]],
|
|
4726
|
-
[
|
|
4727
|
-
/coc_coc\w+\/([\w\.]+)/i
|
|
4728
|
-
// Coc Coc Browser
|
|
4729
|
-
],
|
|
4730
|
-
[VERSION3, [NAME, "Coc Coc"]],
|
|
4731
|
-
[
|
|
4732
|
-
/dolfin\/([\w\.]+)/i
|
|
4733
|
-
// Dolphin
|
|
4734
|
-
],
|
|
4735
|
-
[VERSION3, [NAME, "Dolphin"]],
|
|
4736
|
-
[
|
|
4737
|
-
/coast\/([\w\.]+)/i
|
|
4738
|
-
// Opera Coast
|
|
4739
|
-
],
|
|
4740
|
-
[VERSION3, [NAME, OPERA + " Coast"]],
|
|
4741
|
-
[
|
|
4742
|
-
/miuibrowser\/([\w\.]+)/i
|
|
4743
|
-
// MIUI Browser
|
|
4744
|
-
],
|
|
4745
|
-
[VERSION3, [NAME, "MIUI" + SUFFIX_BROWSER]],
|
|
4746
|
-
[
|
|
4747
|
-
/fxios\/([\w\.-]+)/i
|
|
4748
|
-
// Firefox for iOS
|
|
4749
|
-
],
|
|
4750
|
-
[VERSION3, [NAME, PREFIX_MOBILE + FIREFOX]],
|
|
4751
|
-
[
|
|
4752
|
-
/\bqihoobrowser\/?([\w\.]*)/i
|
|
4753
|
-
// 360
|
|
4754
|
-
],
|
|
4755
|
-
[VERSION3, [NAME, "360"]],
|
|
4756
|
-
[
|
|
4757
|
-
/\b(qq)\/([\w\.]+)/i
|
|
4758
|
-
// QQ
|
|
4759
|
-
],
|
|
4760
|
-
[[NAME, /(.+)/, "$1Browser"], VERSION3],
|
|
4761
|
-
[
|
|
4762
|
-
/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
|
|
4763
|
-
],
|
|
4764
|
-
[[NAME, /(.+)/, "$1" + SUFFIX_BROWSER], VERSION3],
|
|
4765
|
-
[
|
|
4766
|
-
// Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
|
|
4767
|
-
/samsungbrowser\/([\w\.]+)/i
|
|
4768
|
-
// Samsung Internet
|
|
4769
|
-
],
|
|
4770
|
-
[VERSION3, [NAME, SAMSUNG + " Internet"]],
|
|
4771
|
-
[
|
|
4772
|
-
/metasr[\/ ]?([\d\.]+)/i
|
|
4773
|
-
// Sogou Explorer
|
|
4774
|
-
],
|
|
4775
|
-
[VERSION3, [NAME, SOGOU + " Explorer"]],
|
|
4776
|
-
[
|
|
4777
|
-
/(sogou)mo\w+\/([\d\.]+)/i
|
|
4778
|
-
// Sogou Mobile
|
|
4779
|
-
],
|
|
4780
|
-
[[NAME, SOGOU + " Mobile"], VERSION3],
|
|
4781
|
-
[
|
|
4782
|
-
/(electron)\/([\w\.]+) safari/i,
|
|
4783
|
-
// Electron-based App
|
|
4784
|
-
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
|
|
4785
|
-
// Tesla
|
|
4786
|
-
/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i
|
|
4787
|
-
// QQ/2345
|
|
4788
|
-
],
|
|
4789
|
-
[NAME, VERSION3],
|
|
4790
|
-
[
|
|
4791
|
-
/(lbbrowser|rekonq)/i
|
|
4792
|
-
// LieBao Browser/Rekonq
|
|
4793
|
-
],
|
|
4794
|
-
[NAME],
|
|
4795
|
-
[
|
|
4796
|
-
/ome\/([\w\.]+) \w* ?(iron) saf/i,
|
|
4797
|
-
// Iron
|
|
4798
|
-
/ome\/([\w\.]+).+qihu (360)[es]e/i
|
|
4799
|
-
// 360
|
|
4800
|
-
],
|
|
4801
|
-
[VERSION3, NAME],
|
|
4802
|
-
[
|
|
4803
|
-
// WebView
|
|
4804
|
-
/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
|
|
4805
|
-
// Facebook App for iOS & Android
|
|
4806
|
-
],
|
|
4807
|
-
[[NAME, FACEBOOK], VERSION3, [TYPE, INAPP]],
|
|
4808
|
-
[
|
|
4809
|
-
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
|
|
4810
|
-
// Kakao App
|
|
4811
|
-
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
|
|
4812
|
-
// Naver InApp
|
|
4813
|
-
/(daum)apps[\/ ]([\w\.]+)/i,
|
|
4814
|
-
// Daum App
|
|
4815
|
-
/safari (line)\/([\w\.]+)/i,
|
|
4816
|
-
// Line App for iOS
|
|
4817
|
-
/\b(line)\/([\w\.]+)\/iab/i,
|
|
4818
|
-
// Line App for Android
|
|
4819
|
-
/(alipay)client\/([\w\.]+)/i,
|
|
4820
|
-
// Alipay
|
|
4821
|
-
/(twitter)(?:and| f.+e\/([\w\.]+))/i,
|
|
4822
|
-
// Twitter
|
|
4823
|
-
/(bing)(?:web|sapphire)\/([\w\.]+)/i,
|
|
4824
|
-
// Bing
|
|
4825
|
-
/(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i
|
|
4826
|
-
// Instagram/Snapchat/Klarna
|
|
4827
|
-
],
|
|
4828
|
-
[NAME, VERSION3, [TYPE, INAPP]],
|
|
4829
|
-
[
|
|
4830
|
-
/\bgsa\/([\w\.]+) .*safari\//i
|
|
4831
|
-
// Google Search Appliance on iOS
|
|
4832
|
-
],
|
|
4833
|
-
[VERSION3, [NAME, "GSA"], [TYPE, INAPP]],
|
|
4834
|
-
[
|
|
4835
|
-
/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i
|
|
4836
|
-
// TikTok
|
|
4837
|
-
],
|
|
4838
|
-
[VERSION3, [NAME, "TikTok"], [TYPE, INAPP]],
|
|
4839
|
-
[
|
|
4840
|
-
/\[(linkedin)app\]/i
|
|
4841
|
-
// LinkedIn App for iOS & Android
|
|
4842
|
-
],
|
|
4843
|
-
[NAME, [TYPE, INAPP]],
|
|
4844
|
-
[
|
|
4845
|
-
/(zalo(?:app)?)[\/\sa-z]*([\w\.-]+)/i
|
|
4846
|
-
// Zalo
|
|
4847
|
-
],
|
|
4848
|
-
[[NAME, /(.+)/, "Zalo"], VERSION3, [TYPE, INAPP]],
|
|
4849
|
-
[
|
|
4850
|
-
/(chromium)[\/ ]([-\w\.]+)/i
|
|
4851
|
-
// Chromium
|
|
4852
|
-
],
|
|
4853
|
-
[NAME, VERSION3],
|
|
4854
|
-
[
|
|
4855
|
-
/headlesschrome(?:\/([\w\.]+)| )/i
|
|
4856
|
-
// Chrome Headless
|
|
4857
|
-
],
|
|
4858
|
-
[VERSION3, [NAME, CHROME + " Headless"]],
|
|
4859
|
-
[
|
|
4860
|
-
/wv\).+chrome\/([\w\.]+).+edgw\//i
|
|
4861
|
-
// Edge WebView2
|
|
4862
|
-
],
|
|
4863
|
-
[VERSION3, [NAME, EDGE + " WebView2"]],
|
|
4864
|
-
[
|
|
4865
|
-
/ wv\).+(chrome)\/([\w\.]+)/i
|
|
4866
|
-
// Chrome WebView
|
|
4867
|
-
],
|
|
4868
|
-
[[NAME, CHROME + " WebView"], VERSION3],
|
|
4869
|
-
[
|
|
4870
|
-
/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
|
|
4871
|
-
// Android Browser
|
|
4872
|
-
],
|
|
4873
|
-
[VERSION3, [NAME, "Android" + SUFFIX_BROWSER]],
|
|
4874
|
-
[
|
|
4875
|
-
/chrome\/([\w\.]+) mobile/i
|
|
4876
|
-
// Chrome Mobile
|
|
4877
|
-
],
|
|
4878
|
-
[VERSION3, [NAME, PREFIX_MOBILE + "Chrome"]],
|
|
4879
|
-
[
|
|
4880
|
-
/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
|
|
4881
|
-
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
|
4882
|
-
],
|
|
4883
|
-
[NAME, VERSION3],
|
|
4884
|
-
[
|
|
4885
|
-
/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i
|
|
4886
|
-
// Safari Mobile
|
|
4887
|
-
],
|
|
4888
|
-
[VERSION3, [NAME, PREFIX_MOBILE + "Safari"]],
|
|
4889
|
-
[
|
|
4890
|
-
/iphone .*mobile(?:\/\w+ | ?)safari/i
|
|
4891
|
-
],
|
|
4892
|
-
[[NAME, PREFIX_MOBILE + "Safari"]],
|
|
4893
|
-
[
|
|
4894
|
-
/version\/([\w\.\,]+) .*(safari)/i
|
|
4895
|
-
// Safari
|
|
4896
|
-
],
|
|
4897
|
-
[VERSION3, NAME],
|
|
4898
|
-
[
|
|
4899
|
-
/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
|
|
4900
|
-
// Safari < 3.0
|
|
4901
|
-
],
|
|
4902
|
-
[NAME, [VERSION3, "1"]],
|
|
4903
|
-
[
|
|
4904
|
-
/(webkit|khtml)\/([\w\.]+)/i
|
|
4905
|
-
],
|
|
4906
|
-
[NAME, VERSION3],
|
|
4907
|
-
[
|
|
4908
|
-
// Gecko based
|
|
4909
|
-
/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i
|
|
4910
|
-
// Firefox Mobile
|
|
4911
|
-
],
|
|
4912
|
-
[[NAME, PREFIX_MOBILE + FIREFOX], VERSION3],
|
|
4913
|
-
[
|
|
4914
|
-
/(navigator|netscape\d?)\/([-\w\.]+)/i
|
|
4915
|
-
// Netscape
|
|
4916
|
-
],
|
|
4917
|
-
[[NAME, "Netscape"], VERSION3],
|
|
4918
|
-
[
|
|
4919
|
-
/(wolvic|librewolf)\/([\w\.]+)/i
|
|
4920
|
-
// Wolvic/LibreWolf
|
|
4921
|
-
],
|
|
4922
|
-
[NAME, VERSION3],
|
|
4923
|
-
[
|
|
4924
|
-
/mobile vr; rv:([\w\.]+)\).+firefox/i
|
|
4925
|
-
// Firefox Reality
|
|
4926
|
-
],
|
|
4927
|
-
[VERSION3, [NAME, FIREFOX + " Reality"]],
|
|
4928
|
-
[
|
|
4929
|
-
/ekiohf.+(flow)\/([\w\.]+)/i,
|
|
4930
|
-
// Flow
|
|
4931
|
-
/(swiftfox)/i,
|
|
4932
|
-
// Swiftfox
|
|
4933
|
-
/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
|
|
4934
|
-
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
|
4935
|
-
/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\/([-\w\.]+)$/i,
|
|
4936
|
-
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
|
4937
|
-
/(firefox)\/([\w\.]+)/i,
|
|
4938
|
-
// Other Firefox-based
|
|
4939
|
-
/(mozilla)\/([\w\.]+(?= .+rv\:.+gecko\/\d+)|[0-4][\w\.]+(?!.+compatible))/i,
|
|
4940
|
-
// Mozilla
|
|
4941
|
-
// Other
|
|
4942
|
-
/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
|
4943
|
-
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
|
|
4944
|
-
/\b(links) \(([\w\.]+)/i
|
|
4945
|
-
// Links
|
|
4946
|
-
],
|
|
4947
|
-
[NAME, [VERSION3, /_/g, "."]],
|
|
4948
|
-
[
|
|
4949
|
-
/(cobalt)\/([\w\.]+)/i
|
|
4950
|
-
// Cobalt
|
|
4951
|
-
],
|
|
4952
|
-
[NAME, [VERSION3, /[^\d\.]+./, EMPTY]]
|
|
4953
|
-
],
|
|
4954
|
-
cpu: [
|
|
4955
|
-
[
|
|
4956
|
-
/\b((amd|x|x86[-_]?|wow|win)64)\b/i
|
|
4957
|
-
// AMD64 (x64)
|
|
4958
|
-
],
|
|
4959
|
-
[[ARCHITECTURE, "amd64"]],
|
|
4960
|
-
[
|
|
4961
|
-
/(ia32(?=;))/i,
|
|
4962
|
-
// IA32 (quicktime)
|
|
4963
|
-
/\b((i[346]|x)86)(pc)?\b/i
|
|
4964
|
-
// IA32 (x86)
|
|
4965
|
-
],
|
|
4966
|
-
[[ARCHITECTURE, "ia32"]],
|
|
4967
|
-
[
|
|
4968
|
-
/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i
|
|
4969
|
-
// ARM64
|
|
4970
|
-
],
|
|
4971
|
-
[[ARCHITECTURE, "arm64"]],
|
|
4972
|
-
[
|
|
4973
|
-
/\b(arm(v[67])?ht?n?[fl]p?)\b/i
|
|
4974
|
-
// ARMHF
|
|
4975
|
-
],
|
|
4976
|
-
[[ARCHITECTURE, "armhf"]],
|
|
4977
|
-
[
|
|
4978
|
-
// PocketPC mistakenly identified as PowerPC
|
|
4979
|
-
/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
|
|
4980
|
-
],
|
|
4981
|
-
[[ARCHITECTURE, "arm"]],
|
|
4982
|
-
[
|
|
4983
|
-
/ sun4\w[;\)]/i
|
|
4984
|
-
// SPARC
|
|
4985
|
-
],
|
|
4986
|
-
[[ARCHITECTURE, "sparc"]],
|
|
4987
|
-
[
|
|
4988
|
-
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
|
4989
|
-
/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i,
|
|
4990
|
-
/((ppc|powerpc)(64)?)( mac|;|\))/i,
|
|
4991
|
-
// PowerPC
|
|
4992
|
-
/(?:osf1|[freopnt]{3,4}bsd) (alpha)/i
|
|
4993
|
-
// Alpha
|
|
4994
|
-
],
|
|
4995
|
-
[[ARCHITECTURE, /ower/, EMPTY, lowerize]],
|
|
4996
|
-
[
|
|
4997
|
-
/mc680.0/i
|
|
4998
|
-
],
|
|
4999
|
-
[[ARCHITECTURE, "68k"]],
|
|
5000
|
-
[
|
|
5001
|
-
/winnt.+\[axp/i
|
|
5002
|
-
],
|
|
5003
|
-
[[ARCHITECTURE, "alpha"]]
|
|
5004
|
-
],
|
|
5005
|
-
device: [
|
|
5006
|
-
[
|
|
5007
|
-
//////////////////////////
|
|
5008
|
-
// MOBILES & TABLETS
|
|
5009
|
-
/////////////////////////
|
|
5010
|
-
// Samsung
|
|
5011
|
-
/\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
|
|
5012
|
-
],
|
|
5013
|
-
[MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]],
|
|
5014
|
-
[
|
|
5015
|
-
/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
|
|
5016
|
-
/samsung[- ]((?!sm-[lr]|browser)[-\w]+)/i,
|
|
5017
|
-
/sec-(sgh\w+)/i
|
|
5018
|
-
],
|
|
5019
|
-
[MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]],
|
|
5020
|
-
[
|
|
5021
|
-
// Apple
|
|
5022
|
-
/(?:\/|\()(ip(?:hone|od)[\w, ]*)[\/\);]/i
|
|
5023
|
-
// iPod/iPhone
|
|
5024
|
-
],
|
|
5025
|
-
[MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],
|
|
5026
|
-
[
|
|
5027
|
-
/\b(?:ios|apple\w+)\/.+[\(\/](ipad)/i,
|
|
5028
|
-
// iPad
|
|
5029
|
-
/\b(ipad)[\d,]*[;\] ].+(mac |i(pad)?)os/i
|
|
5030
|
-
],
|
|
5031
|
-
[MODEL, [VENDOR, APPLE], [TYPE, TABLET]],
|
|
5032
|
-
[
|
|
5033
|
-
/(macintosh);/i
|
|
5034
|
-
],
|
|
5035
|
-
[MODEL, [VENDOR, APPLE]],
|
|
5036
|
-
[
|
|
5037
|
-
// Sharp
|
|
5038
|
-
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
|
|
5039
|
-
],
|
|
5040
|
-
[MODEL, [VENDOR, SHARP], [TYPE, MOBILE]],
|
|
5041
|
-
[
|
|
5042
|
-
// Honor
|
|
5043
|
-
/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
|
|
5044
|
-
],
|
|
5045
|
-
[MODEL, [VENDOR, HONOR], [TYPE, TABLET]],
|
|
5046
|
-
[
|
|
5047
|
-
/honor([-\w ]+)[;\)]/i
|
|
5048
|
-
],
|
|
5049
|
-
[MODEL, [VENDOR, HONOR], [TYPE, MOBILE]],
|
|
5050
|
-
[
|
|
5051
|
-
// Huawei
|
|
5052
|
-
/\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
|
|
5053
|
-
],
|
|
5054
|
-
[MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]],
|
|
5055
|
-
[
|
|
5056
|
-
/(?:huawei) ?([-\w ]+)[;\)]/i,
|
|
5057
|
-
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][\dc][adnt]?)\b(?!.+d\/s)/i
|
|
5058
|
-
],
|
|
5059
|
-
[MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]],
|
|
5060
|
-
[
|
|
5061
|
-
// Xiaomi
|
|
5062
|
-
/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
|
|
5063
|
-
/\b(?:xiao)?((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i
|
|
5064
|
-
// Mi Pad tablets
|
|
5065
|
-
],
|
|
5066
|
-
[[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, TABLET]],
|
|
5067
|
-
[
|
|
5068
|
-
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,
|
|
5069
|
-
// Xiaomi POCO
|
|
5070
|
-
/\b; (\w+) build\/hm\1/i,
|
|
5071
|
-
// Xiaomi Hongmi 'numeric' models
|
|
5072
|
-
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
|
|
5073
|
-
// Xiaomi Hongmi
|
|
5074
|
-
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
|
|
5075
|
-
// Xiaomi Redmi
|
|
5076
|
-
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,
|
|
5077
|
-
// Xiaomi Redmi 'numeric' models
|
|
5078
|
-
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\d{0,2}\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\))/i,
|
|
5079
|
-
// Xiaomi Mi
|
|
5080
|
-
/ ([\w ]+) miui\/v?\d/i
|
|
5081
|
-
],
|
|
5082
|
-
[[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, MOBILE]],
|
|
5083
|
-
[
|
|
5084
|
-
// OnePlus
|
|
5085
|
-
/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,
|
|
5086
|
-
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
|
5087
|
-
],
|
|
5088
|
-
[MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]],
|
|
5089
|
-
[
|
|
5090
|
-
// OPPO
|
|
5091
|
-
/; (\w+) bui.+ oppo/i,
|
|
5092
|
-
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
|
5093
|
-
],
|
|
5094
|
-
[MODEL, [VENDOR, OPPO], [TYPE, MOBILE]],
|
|
5095
|
-
[
|
|
5096
|
-
/\b(opd2(\d{3}a?))(?: bui|\))/i
|
|
5097
|
-
],
|
|
5098
|
-
[MODEL, [VENDOR, strMapper, { "OnePlus": ["203", "304", "403", "404", "413", "415"], "*": OPPO }], [TYPE, TABLET]],
|
|
5099
|
-
[
|
|
5100
|
-
// BLU
|
|
5101
|
-
/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i
|
|
5102
|
-
// Vivo series
|
|
5103
|
-
],
|
|
5104
|
-
[MODEL, [VENDOR, "BLU"], [TYPE, MOBILE]],
|
|
5105
|
-
[
|
|
5106
|
-
// Vivo
|
|
5107
|
-
/; vivo (\w+)(?: bui|\))/i,
|
|
5108
|
-
/\b(v[12]\d{3}\w?[at])(?: bui|;)/i
|
|
5109
|
-
],
|
|
5110
|
-
[MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]],
|
|
5111
|
-
[
|
|
5112
|
-
// Realme
|
|
5113
|
-
/\b(rmx[1-3]\d{3})(?: bui|;|\))/i
|
|
5114
|
-
],
|
|
5115
|
-
[MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]],
|
|
5116
|
-
[
|
|
5117
|
-
// Lenovo
|
|
5118
|
-
/(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,
|
|
5119
|
-
/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
|
|
5120
|
-
],
|
|
5121
|
-
[MODEL, [VENDOR, LENOVO], [TYPE, TABLET]],
|
|
5122
|
-
[
|
|
5123
|
-
/lenovo[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i
|
|
5124
|
-
],
|
|
5125
|
-
[MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]],
|
|
5126
|
-
[
|
|
5127
|
-
// Motorola
|
|
5128
|
-
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
|
5129
|
-
/\bmot(?:orola)?[- ]([\w\s]+)(\)| bui)/i,
|
|
5130
|
-
/((?:moto(?! 360)[-\w\(\) ]+|xt\d{3,4}[cgkosw\+]?[-\d]*|nexus 6)(?= bui|\)))/i
|
|
5131
|
-
],
|
|
5132
|
-
[MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]],
|
|
5133
|
-
[
|
|
5134
|
-
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
|
5135
|
-
],
|
|
5136
|
-
[MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]],
|
|
5137
|
-
[
|
|
5138
|
-
// LG
|
|
5139
|
-
/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
|
5140
|
-
],
|
|
5141
|
-
[MODEL, [VENDOR, LG], [TYPE, TABLET]],
|
|
5142
|
-
[
|
|
5143
|
-
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
|
5144
|
-
/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,
|
|
5145
|
-
/\blg-?([\d\w]+) bui/i
|
|
5146
|
-
],
|
|
5147
|
-
[MODEL, [VENDOR, LG], [TYPE, MOBILE]],
|
|
5148
|
-
[
|
|
5149
|
-
// Nokia
|
|
5150
|
-
/(nokia) (t[12][01])/i
|
|
5151
|
-
],
|
|
5152
|
-
[VENDOR, MODEL, [TYPE, TABLET]],
|
|
5153
|
-
[
|
|
5154
|
-
/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
|
|
5155
|
-
/nokia[-_ ]?(([-\w\. ]*?))( bui|\)|;|\/)/i
|
|
5156
|
-
],
|
|
5157
|
-
[[MODEL, /_/g, " "], [TYPE, MOBILE], [VENDOR, "Nokia"]],
|
|
5158
|
-
[
|
|
5159
|
-
// Google
|
|
5160
|
-
/(pixel (c|tablet))\b/i
|
|
5161
|
-
// Google Pixel C/Tablet
|
|
5162
|
-
],
|
|
5163
|
-
[MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]],
|
|
5164
|
-
[
|
|
5165
|
-
// Google Pixel
|
|
5166
|
-
/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
|
|
5167
|
-
],
|
|
5168
|
-
[MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]],
|
|
5169
|
-
[
|
|
5170
|
-
/(google) (pixelbook( go)?)/i
|
|
5171
|
-
],
|
|
5172
|
-
[VENDOR, MODEL],
|
|
5173
|
-
[
|
|
5174
|
-
// Sony
|
|
5175
|
-
/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
|
|
5176
|
-
],
|
|
5177
|
-
[MODEL, [VENDOR, SONY], [TYPE, MOBILE]],
|
|
5178
|
-
[
|
|
5179
|
-
/sony tablet [ps]/i,
|
|
5180
|
-
/\b(?:sony)?sgp\w+(?: bui|\))/i
|
|
5181
|
-
],
|
|
5182
|
-
[[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE, TABLET]],
|
|
5183
|
-
[
|
|
5184
|
-
// Amazon
|
|
5185
|
-
/(alexa)webm/i,
|
|
5186
|
-
/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,
|
|
5187
|
-
// Kindle Fire without Silk / Echo Show
|
|
5188
|
-
/(kf[a-z]+)( bui|\)).+silk\//i
|
|
5189
|
-
// Kindle Fire HD
|
|
5190
|
-
],
|
|
5191
|
-
[MODEL, [VENDOR, AMAZON], [TYPE, TABLET]],
|
|
5192
|
-
[
|
|
5193
|
-
/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
|
|
5194
|
-
// Fire Phone
|
|
5195
|
-
],
|
|
5196
|
-
[[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE, MOBILE]],
|
|
5197
|
-
[
|
|
5198
|
-
// BlackBerry
|
|
5199
|
-
/(playbook);[-\w\),; ]+(rim)/i
|
|
5200
|
-
// BlackBerry PlayBook
|
|
5201
|
-
],
|
|
5202
|
-
[MODEL, VENDOR, [TYPE, TABLET]],
|
|
5203
|
-
[
|
|
5204
|
-
/\b((?:bb[a-f]|st[hv])100-\d)/i,
|
|
5205
|
-
/(?:blackberry|\(bb10;) (\w+)/i
|
|
5206
|
-
],
|
|
5207
|
-
[MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]],
|
|
5208
|
-
[
|
|
5209
|
-
// Asus
|
|
5210
|
-
/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
|
|
5211
|
-
],
|
|
5212
|
-
[MODEL, [VENDOR, ASUS], [TYPE, TABLET]],
|
|
5213
|
-
[
|
|
5214
|
-
/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
|
|
5215
|
-
],
|
|
5216
|
-
[MODEL, [VENDOR, ASUS], [TYPE, MOBILE]],
|
|
5217
|
-
[
|
|
5218
|
-
// HTC
|
|
5219
|
-
/(nexus 9)/i
|
|
5220
|
-
// HTC Nexus 9
|
|
5221
|
-
],
|
|
5222
|
-
[MODEL, [VENDOR, "HTC"], [TYPE, TABLET]],
|
|
5223
|
-
[
|
|
5224
|
-
/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
|
|
5225
|
-
// HTC
|
|
5226
|
-
// ZTE
|
|
5227
|
-
/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
|
|
5228
|
-
/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
|
|
5229
|
-
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
|
5230
|
-
],
|
|
5231
|
-
[VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]],
|
|
5232
|
-
[
|
|
5233
|
-
// TCL
|
|
5234
|
-
/tcl (xess p17aa)/i,
|
|
5235
|
-
/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
|
|
5236
|
-
],
|
|
5237
|
-
[MODEL, [VENDOR, "TCL"], [TYPE, TABLET]],
|
|
5238
|
-
[
|
|
5239
|
-
/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
|
|
5240
|
-
],
|
|
5241
|
-
[MODEL, [VENDOR, "TCL"], [TYPE, MOBILE]],
|
|
5242
|
-
[
|
|
5243
|
-
// itel
|
|
5244
|
-
/(itel) ((\w+))/i
|
|
5245
|
-
],
|
|
5246
|
-
[[VENDOR, lowerize], MODEL, [TYPE, strMapper, { "tablet": ["p10001l", "w7001"], "*": "mobile" }]],
|
|
5247
|
-
[
|
|
5248
|
-
// Acer
|
|
5249
|
-
/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
|
|
5250
|
-
],
|
|
5251
|
-
[MODEL, [VENDOR, "Acer"], [TYPE, TABLET]],
|
|
5252
|
-
[
|
|
5253
|
-
// Meizu
|
|
5254
|
-
/droid.+; (m[1-5] note) bui/i,
|
|
5255
|
-
/\bmz-([-\w]{2,})/i
|
|
5256
|
-
],
|
|
5257
|
-
[MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]],
|
|
5258
|
-
[
|
|
5259
|
-
// Ulefone
|
|
5260
|
-
/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
|
|
5261
|
-
],
|
|
5262
|
-
[MODEL, [VENDOR, "Ulefone"], [TYPE, MOBILE]],
|
|
5263
|
-
[
|
|
5264
|
-
// Energizer
|
|
5265
|
-
/; (energy ?\w+)(?: bui|\))/i,
|
|
5266
|
-
/; energizer ([\w ]+)(?: bui|\))/i
|
|
5267
|
-
],
|
|
5268
|
-
[MODEL, [VENDOR, "Energizer"], [TYPE, MOBILE]],
|
|
5269
|
-
[
|
|
5270
|
-
// Cat
|
|
5271
|
-
/; cat (b35);/i,
|
|
5272
|
-
/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i
|
|
5273
|
-
],
|
|
5274
|
-
[MODEL, [VENDOR, "Cat"], [TYPE, MOBILE]],
|
|
5275
|
-
[
|
|
5276
|
-
// Smartfren
|
|
5277
|
-
/((?:new )?andromax[\w- ]+)(?: bui|\))/i
|
|
5278
|
-
],
|
|
5279
|
-
[MODEL, [VENDOR, "Smartfren"], [TYPE, MOBILE]],
|
|
5280
|
-
[
|
|
5281
|
-
// Nothing
|
|
5282
|
-
/droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i
|
|
5283
|
-
],
|
|
5284
|
-
[MODEL, [VENDOR, "Nothing"], [TYPE, MOBILE]],
|
|
5285
|
-
[
|
|
5286
|
-
// Archos
|
|
5287
|
-
/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
|
|
5288
|
-
/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
|
|
5289
|
-
],
|
|
5290
|
-
[MODEL, [VENDOR, "Archos"], [TYPE, TABLET]],
|
|
5291
|
-
[
|
|
5292
|
-
/archos ([\w ]+)( b|\))/i,
|
|
5293
|
-
/; (ac[3-6]\d\w{2,8})( b|\))/i
|
|
5294
|
-
],
|
|
5295
|
-
[MODEL, [VENDOR, "Archos"], [TYPE, MOBILE]],
|
|
5296
|
-
[
|
|
5297
|
-
// HMD
|
|
5298
|
-
/; (n159v)/i
|
|
5299
|
-
],
|
|
5300
|
-
[MODEL, [VENDOR, "HMD"], [TYPE, MOBILE]],
|
|
5301
|
-
[
|
|
5302
|
-
// MIXED
|
|
5303
|
-
/(imo) (tab \w+)/i,
|
|
5304
|
-
// IMO
|
|
5305
|
-
/(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i
|
|
5306
|
-
// Infinix XPad / Tecno
|
|
5307
|
-
],
|
|
5308
|
-
[VENDOR, MODEL, [TYPE, TABLET]],
|
|
5309
|
-
[
|
|
5310
|
-
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
|
5311
|
-
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan
|
|
5312
|
-
// BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko
|
|
5313
|
-
/; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i,
|
|
5314
|
-
/(hp) ([\w ]+\w)/i,
|
|
5315
|
-
// HP iPAQ
|
|
5316
|
-
/(microsoft); (lumia[\w ]+)/i,
|
|
5317
|
-
// Microsoft Lumia
|
|
5318
|
-
/(oppo) ?([\w ]+) bui/i,
|
|
5319
|
-
// OPPO
|
|
5320
|
-
/(hisense) ([ehv][\w ]+)\)/i,
|
|
5321
|
-
// Hisense
|
|
5322
|
-
/droid[^;]+; (philips)[_ ]([sv-x][\d]{3,4}[xz]?)/i
|
|
5323
|
-
// Philips
|
|
5324
|
-
],
|
|
5325
|
-
[VENDOR, MODEL, [TYPE, MOBILE]],
|
|
5326
|
-
[
|
|
5327
|
-
/(kobo)\s(ereader|touch)/i,
|
|
5328
|
-
// Kobo
|
|
5329
|
-
/(hp).+(touchpad(?!.+tablet)|tablet)/i,
|
|
5330
|
-
// HP TouchPad
|
|
5331
|
-
/(kindle)\/([\w\.]+)/i
|
|
5332
|
-
// Kindle
|
|
5333
|
-
],
|
|
5334
|
-
[VENDOR, MODEL, [TYPE, TABLET]],
|
|
5335
|
-
[
|
|
5336
|
-
/(surface duo)/i
|
|
5337
|
-
// Surface Duo
|
|
5338
|
-
],
|
|
5339
|
-
[MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]],
|
|
5340
|
-
[
|
|
5341
|
-
/droid [\d\.]+; (fp\du?)(?: b|\))/i
|
|
5342
|
-
// Fairphone
|
|
5343
|
-
],
|
|
5344
|
-
[MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]],
|
|
5345
|
-
[
|
|
5346
|
-
/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i
|
|
5347
|
-
// Nvidia Tablets
|
|
5348
|
-
],
|
|
5349
|
-
[MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]],
|
|
5350
|
-
[
|
|
5351
|
-
/(sprint) (\w+)/i
|
|
5352
|
-
// Sprint Phones
|
|
5353
|
-
],
|
|
5354
|
-
[VENDOR, MODEL, [TYPE, MOBILE]],
|
|
5355
|
-
[
|
|
5356
|
-
/(kin\.[onetw]{3})/i
|
|
5357
|
-
// Microsoft Kin
|
|
5358
|
-
],
|
|
5359
|
-
[[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE, MOBILE]],
|
|
5360
|
-
[
|
|
5361
|
-
/droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
|
|
5362
|
-
// Zebra
|
|
5363
|
-
],
|
|
5364
|
-
[MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]],
|
|
5365
|
-
[
|
|
5366
|
-
/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
|
|
5367
|
-
],
|
|
5368
|
-
[MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]],
|
|
5369
|
-
[
|
|
5370
|
-
///////////////////
|
|
5371
|
-
// SMARTTVS
|
|
5372
|
-
///////////////////
|
|
5373
|
-
/(philips)[\w ]+tv/i,
|
|
5374
|
-
// Philips
|
|
5375
|
-
/smart-tv.+(samsung)/i
|
|
5376
|
-
// Samsung
|
|
5377
|
-
],
|
|
5378
|
-
[VENDOR, [TYPE, SMARTTV]],
|
|
5379
|
-
[
|
|
5380
|
-
/hbbtv.+maple;(\d+)/i
|
|
5381
|
-
],
|
|
5382
|
-
[[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]],
|
|
5383
|
-
[
|
|
5384
|
-
/(vizio)(?: |.+model\/)(\w+-\w+)/i,
|
|
5385
|
-
// Vizio
|
|
5386
|
-
/tcast.+(lg)e?. ([-\w]+)/i
|
|
5387
|
-
// LG SmartTV
|
|
5388
|
-
],
|
|
5389
|
-
[VENDOR, MODEL, [TYPE, SMARTTV]],
|
|
5390
|
-
[
|
|
5391
|
-
/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
|
|
5392
|
-
],
|
|
5393
|
-
[[VENDOR, LG], [TYPE, SMARTTV]],
|
|
5394
|
-
[
|
|
5395
|
-
/(apple) ?tv/i
|
|
5396
|
-
// Apple TV
|
|
5397
|
-
],
|
|
5398
|
-
[VENDOR, [MODEL, APPLE + " TV"], [TYPE, SMARTTV]],
|
|
5399
|
-
[
|
|
5400
|
-
/crkey.*devicetype\/chromecast/i
|
|
5401
|
-
// Google Chromecast Third Generation
|
|
5402
|
-
],
|
|
5403
|
-
[[MODEL, CHROMECAST + " Third Generation"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
|
|
5404
|
-
[
|
|
5405
|
-
/crkey.*devicetype\/([^/]*)/i
|
|
5406
|
-
// Google Chromecast with specific device type
|
|
5407
|
-
],
|
|
5408
|
-
[[MODEL, /^/, "Chromecast "], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
|
|
5409
|
-
[
|
|
5410
|
-
/fuchsia.*crkey/i
|
|
5411
|
-
// Google Chromecast Nest Hub
|
|
5412
|
-
],
|
|
5413
|
-
[[MODEL, CHROMECAST + " Nest Hub"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
|
|
5414
|
-
[
|
|
5415
|
-
/crkey/i
|
|
5416
|
-
// Google Chromecast, Linux-based or unknown
|
|
5417
|
-
],
|
|
5418
|
-
[[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
|
|
5419
|
-
[
|
|
5420
|
-
/(portaltv)/i
|
|
5421
|
-
// Facebook Portal TV
|
|
5422
|
-
],
|
|
5423
|
-
[MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]],
|
|
5424
|
-
[
|
|
5425
|
-
/droid.+aft(\w+)( bui|\))/i
|
|
5426
|
-
// Fire TV
|
|
5427
|
-
],
|
|
5428
|
-
[MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]],
|
|
5429
|
-
[
|
|
5430
|
-
/(shield \w+ tv)/i
|
|
5431
|
-
// Nvidia Shield TV
|
|
5432
|
-
],
|
|
5433
|
-
[MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]],
|
|
5434
|
-
[
|
|
5435
|
-
/\(dtv[\);].+(aquos)/i,
|
|
5436
|
-
/(aquos-tv[\w ]+)\)/i
|
|
5437
|
-
// Sharp
|
|
5438
|
-
],
|
|
5439
|
-
[MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],
|
|
5440
|
-
[
|
|
5441
|
-
/(bravia[\w ]+)( bui|\))/i
|
|
5442
|
-
// Sony
|
|
5443
|
-
],
|
|
5444
|
-
[MODEL, [VENDOR, SONY], [TYPE, SMARTTV]],
|
|
5445
|
-
[
|
|
5446
|
-
/(mi(tv|box)-?\w+) bui/i
|
|
5447
|
-
// Xiaomi
|
|
5448
|
-
],
|
|
5449
|
-
[MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]],
|
|
5450
|
-
[
|
|
5451
|
-
/Hbbtv.*(technisat) (.*);/i
|
|
5452
|
-
// TechniSAT
|
|
5453
|
-
],
|
|
5454
|
-
[VENDOR, MODEL, [TYPE, SMARTTV]],
|
|
5455
|
-
[
|
|
5456
|
-
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
|
|
5457
|
-
// Roku
|
|
5458
|
-
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
|
|
5459
|
-
// HbbTV devices
|
|
5460
|
-
],
|
|
5461
|
-
[[VENDOR, /.+\/(\w+)/, "$1", strMapper, { "LG": "lge" }], [MODEL, trim2], [TYPE, SMARTTV]],
|
|
5462
|
-
[
|
|
5463
|
-
///////////////////
|
|
5464
|
-
// CONSOLES
|
|
5465
|
-
///////////////////
|
|
5466
|
-
/(playstation \w+)/i
|
|
5467
|
-
// Playstation
|
|
5468
|
-
],
|
|
5469
|
-
[MODEL, [VENDOR, SONY], [TYPE, CONSOLE]],
|
|
5470
|
-
[
|
|
5471
|
-
/\b(xbox(?: one)?(?!; xbox))[\); ]/i
|
|
5472
|
-
// Microsoft Xbox
|
|
5473
|
-
],
|
|
5474
|
-
[MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]],
|
|
5475
|
-
[
|
|
5476
|
-
/(ouya)/i,
|
|
5477
|
-
// Ouya
|
|
5478
|
-
/(nintendo) (\w+)/i,
|
|
5479
|
-
// Nintendo
|
|
5480
|
-
/(retroid) (pocket ([^\)]+))/i
|
|
5481
|
-
// Retroid Pocket
|
|
5482
|
-
],
|
|
5483
|
-
[VENDOR, MODEL, [TYPE, CONSOLE]],
|
|
5484
|
-
[
|
|
5485
|
-
/droid.+; (shield)( bui|\))/i
|
|
5486
|
-
// Nvidia Portable
|
|
5487
|
-
],
|
|
5488
|
-
[MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]],
|
|
5489
|
-
[
|
|
5490
|
-
///////////////////
|
|
5491
|
-
// WEARABLES
|
|
5492
|
-
///////////////////
|
|
5493
|
-
/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i
|
|
5494
|
-
// Samsung Galaxy Watch
|
|
5495
|
-
],
|
|
5496
|
-
[MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]],
|
|
5497
|
-
[
|
|
5498
|
-
/((pebble))app/i,
|
|
5499
|
-
// Pebble
|
|
5500
|
-
/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i
|
|
5501
|
-
// Asus ZenWatch / LG Watch / Pixel Watch
|
|
5502
|
-
],
|
|
5503
|
-
[VENDOR, MODEL, [TYPE, WEARABLE]],
|
|
5504
|
-
[
|
|
5505
|
-
/(ow(?:19|20)?we?[1-3]{1,3})/i
|
|
5506
|
-
// Oppo Watch
|
|
5507
|
-
],
|
|
5508
|
-
[MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]],
|
|
5509
|
-
[
|
|
5510
|
-
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
|
|
5511
|
-
// Apple Watch
|
|
5512
|
-
],
|
|
5513
|
-
[MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]],
|
|
5514
|
-
[
|
|
5515
|
-
/(opwwe\d{3})/i
|
|
5516
|
-
// OnePlus Watch
|
|
5517
|
-
],
|
|
5518
|
-
[MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]],
|
|
5519
|
-
[
|
|
5520
|
-
/(moto 360)/i
|
|
5521
|
-
// Motorola 360
|
|
5522
|
-
],
|
|
5523
|
-
[MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]],
|
|
5524
|
-
[
|
|
5525
|
-
/(smartwatch 3)/i
|
|
5526
|
-
// Sony SmartWatch
|
|
5527
|
-
],
|
|
5528
|
-
[MODEL, [VENDOR, SONY], [TYPE, WEARABLE]],
|
|
5529
|
-
[
|
|
5530
|
-
/(g watch r)/i
|
|
5531
|
-
// LG G Watch R
|
|
5532
|
-
],
|
|
5533
|
-
[MODEL, [VENDOR, LG], [TYPE, WEARABLE]],
|
|
5534
|
-
[
|
|
5535
|
-
/droid.+; (wt63?0{2,3})\)/i
|
|
5536
|
-
],
|
|
5537
|
-
[MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]],
|
|
5538
|
-
[
|
|
5539
|
-
///////////////////
|
|
5540
|
-
// XR
|
|
5541
|
-
///////////////////
|
|
5542
|
-
/droid.+; (glass) \d/i
|
|
5543
|
-
// Google Glass
|
|
5544
|
-
],
|
|
5545
|
-
[MODEL, [VENDOR, GOOGLE], [TYPE, XR]],
|
|
5546
|
-
[
|
|
5547
|
-
/(pico) ([\w ]+) os\d/i
|
|
5548
|
-
// Pico
|
|
5549
|
-
],
|
|
5550
|
-
[VENDOR, MODEL, [TYPE, XR]],
|
|
5551
|
-
[
|
|
5552
|
-
/(quest( \d| pro)?s?).+vr/i
|
|
5553
|
-
// Meta Quest
|
|
5554
|
-
],
|
|
5555
|
-
[MODEL, [VENDOR, FACEBOOK], [TYPE, XR]],
|
|
5556
|
-
[
|
|
5557
|
-
/mobile vr; rv.+firefox/i
|
|
5558
|
-
// Unidentifiable VR device using Firefox Reality / Wolvic
|
|
5559
|
-
],
|
|
5560
|
-
[[TYPE, XR]],
|
|
5561
|
-
[
|
|
5562
|
-
///////////////////
|
|
5563
|
-
// EMBEDDED
|
|
5564
|
-
///////////////////
|
|
5565
|
-
/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
|
|
5566
|
-
// Tesla
|
|
5567
|
-
],
|
|
5568
|
-
[VENDOR, [TYPE, EMBEDDED]],
|
|
5569
|
-
[
|
|
5570
|
-
/(aeobc)\b/i
|
|
5571
|
-
// Echo Dot
|
|
5572
|
-
],
|
|
5573
|
-
[MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]],
|
|
5574
|
-
[
|
|
5575
|
-
/(homepod).+mac os/i
|
|
5576
|
-
// Apple HomePod
|
|
5577
|
-
],
|
|
5578
|
-
[MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]],
|
|
5579
|
-
[
|
|
5580
|
-
/windows iot/i
|
|
5581
|
-
// Unidentifiable embedded device using Windows IoT
|
|
5582
|
-
],
|
|
5583
|
-
[[TYPE, EMBEDDED]],
|
|
5584
|
-
[
|
|
5585
|
-
////////////////////
|
|
5586
|
-
// MIXED (GENERIC)
|
|
5587
|
-
///////////////////
|
|
5588
|
-
/droid.+; ([\w- ]+) (4k|android|smart|google)[- ]?tv/i
|
|
5589
|
-
// Unidentifiable SmartTV
|
|
5590
|
-
],
|
|
5591
|
-
[MODEL, [TYPE, SMARTTV]],
|
|
5592
|
-
[
|
|
5593
|
-
/\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\w ]+safari)\b/i
|
|
5594
|
-
],
|
|
5595
|
-
[[TYPE, SMARTTV]],
|
|
5596
|
-
[
|
|
5597
|
-
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew|; hmsc).+?(mobile|vr|\d) safari/i
|
|
5598
|
-
],
|
|
5599
|
-
[MODEL, [TYPE, strMapper, { "mobile": "Mobile", "xr": "VR", "*": TABLET }]],
|
|
5600
|
-
[
|
|
5601
|
-
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
|
|
5602
|
-
// Unidentifiable Tablet
|
|
5603
|
-
],
|
|
5604
|
-
[[TYPE, TABLET]],
|
|
5605
|
-
[
|
|
5606
|
-
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
|
|
5607
|
-
// Unidentifiable Mobile
|
|
5608
|
-
],
|
|
5609
|
-
[[TYPE, MOBILE]],
|
|
5610
|
-
[
|
|
5611
|
-
/droid .+?; ([\w\. -]+)( bui|\))/i
|
|
5612
|
-
// Generic Android Device
|
|
5613
|
-
],
|
|
5614
|
-
[MODEL, [VENDOR, "Generic"]]
|
|
5615
|
-
],
|
|
5616
|
-
engine: [
|
|
5617
|
-
[
|
|
5618
|
-
/windows.+ edge\/([\w\.]+)/i
|
|
5619
|
-
// EdgeHTML
|
|
5620
|
-
],
|
|
5621
|
-
[VERSION3, [NAME, EDGE + "HTML"]],
|
|
5622
|
-
[
|
|
5623
|
-
/(arkweb)\/([\w\.]+)/i
|
|
5624
|
-
// ArkWeb
|
|
5625
|
-
],
|
|
5626
|
-
[NAME, VERSION3],
|
|
5627
|
-
[
|
|
5628
|
-
/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
|
|
5629
|
-
// Blink
|
|
5630
|
-
],
|
|
5631
|
-
[VERSION3, [NAME, "Blink"]],
|
|
5632
|
-
[
|
|
5633
|
-
/(presto)\/([\w\.]+)/i,
|
|
5634
|
-
// Presto
|
|
5635
|
-
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,
|
|
5636
|
-
// WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo
|
|
5637
|
-
/ekioh(flow)\/([\w\.]+)/i,
|
|
5638
|
-
// Flow
|
|
5639
|
-
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
|
|
5640
|
-
// KHTML/Tasman/Links
|
|
5641
|
-
/(icab)[\/ ]([23]\.[\d\.]+)/i,
|
|
5642
|
-
// iCab
|
|
5643
|
-
/\b(libweb)/i
|
|
5644
|
-
// LibWeb
|
|
5645
|
-
],
|
|
5646
|
-
[NAME, VERSION3],
|
|
5647
|
-
[
|
|
5648
|
-
/ladybird\//i
|
|
5649
|
-
],
|
|
5650
|
-
[[NAME, "LibWeb"]],
|
|
5651
|
-
[
|
|
5652
|
-
/rv\:([\w\.]{1,9})\b.+(gecko)/i
|
|
5653
|
-
// Gecko
|
|
5654
|
-
],
|
|
5655
|
-
[VERSION3, NAME]
|
|
5656
|
-
],
|
|
5657
|
-
os: [
|
|
5658
|
-
[
|
|
5659
|
-
// Windows
|
|
5660
|
-
/(windows nt) (6\.[23]); arm/i
|
|
5661
|
-
// Windows RT
|
|
5662
|
-
],
|
|
5663
|
-
[[NAME, /N/, "R"], [VERSION3, strMapper, windowsVersionMap]],
|
|
5664
|
-
[
|
|
5665
|
-
/(windows (?:phone|mobile|iot))(?: os)?[\/ ]?([\d\.]*( se)?)/i,
|
|
5666
|
-
// Windows IoT/Mobile/Phone
|
|
5667
|
-
// Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11
|
|
5668
|
-
/(windows)[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i
|
|
5669
|
-
],
|
|
5670
|
-
[NAME, VERSION3],
|
|
5671
|
-
[
|
|
5672
|
-
/windows nt ?([\d\.\)]*)(?!.+xbox)/i,
|
|
5673
|
-
/\bwin(?=3| ?9|n)(?:nt| 9x )?([\d\.;]*)/i
|
|
5674
|
-
],
|
|
5675
|
-
[[VERSION3, /(;|\))/g, "", strMapper, windowsVersionMap], [NAME, WINDOWS]],
|
|
5676
|
-
[
|
|
5677
|
-
/(windows ce)\/?([\d\.]*)/i
|
|
5678
|
-
// Windows CE
|
|
5679
|
-
],
|
|
5680
|
-
[NAME, VERSION3],
|
|
5681
|
-
[
|
|
5682
|
-
// iOS/macOS
|
|
5683
|
-
/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,
|
|
5684
|
-
// iOS
|
|
5685
|
-
/(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\/ ]([\w\.]+)/i,
|
|
5686
|
-
/cfnetwork\/.+darwin/i
|
|
5687
|
-
],
|
|
5688
|
-
[[VERSION3, /_/g, "."], [NAME, "iOS"]],
|
|
5689
|
-
[
|
|
5690
|
-
/(mac os x) ?([\w\. ]*)/i,
|
|
5691
|
-
/(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i
|
|
5692
|
-
// Mac OS
|
|
5693
|
-
],
|
|
5694
|
-
[[NAME, "macOS"], [VERSION3, /_/g, "."]],
|
|
5695
|
-
[
|
|
5696
|
-
// Google Chromecast
|
|
5697
|
-
/android ([\d\.]+).*crkey/i
|
|
5698
|
-
// Google Chromecast, Android-based
|
|
5699
|
-
],
|
|
5700
|
-
[VERSION3, [NAME, CHROMECAST + " Android"]],
|
|
5701
|
-
[
|
|
5702
|
-
/fuchsia.*crkey\/([\d\.]+)/i
|
|
5703
|
-
// Google Chromecast, Fuchsia-based
|
|
5704
|
-
],
|
|
5705
|
-
[VERSION3, [NAME, CHROMECAST + " Fuchsia"]],
|
|
5706
|
-
[
|
|
5707
|
-
/crkey\/([\d\.]+).*devicetype\/smartspeaker/i
|
|
5708
|
-
// Google Chromecast, Linux-based Smart Speaker
|
|
5709
|
-
],
|
|
5710
|
-
[VERSION3, [NAME, CHROMECAST + " SmartSpeaker"]],
|
|
5711
|
-
[
|
|
5712
|
-
/linux.*crkey\/([\d\.]+)/i
|
|
5713
|
-
// Google Chromecast, Legacy Linux-based
|
|
5714
|
-
],
|
|
5715
|
-
[VERSION3, [NAME, CHROMECAST + " Linux"]],
|
|
5716
|
-
[
|
|
5717
|
-
/crkey\/([\d\.]+)/i
|
|
5718
|
-
// Google Chromecast, unknown
|
|
5719
|
-
],
|
|
5720
|
-
[VERSION3, [NAME, CHROMECAST]],
|
|
5721
|
-
[
|
|
5722
|
-
// Mobile OSes
|
|
5723
|
-
/droid ([\w\.]+)\b.+(android[- ]x86)/i
|
|
5724
|
-
// Android-x86
|
|
5725
|
-
],
|
|
5726
|
-
[VERSION3, NAME],
|
|
5727
|
-
[
|
|
5728
|
-
/(ubuntu) ([\w\.]+) like android/i
|
|
5729
|
-
// Ubuntu Touch
|
|
5730
|
-
],
|
|
5731
|
-
[[NAME, /(.+)/, "$1 Touch"], VERSION3],
|
|
5732
|
-
[
|
|
5733
|
-
/(harmonyos)[\/ ]?([\d\.]*)/i,
|
|
5734
|
-
// HarmonyOS
|
|
5735
|
-
// Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
|
|
5736
|
-
/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\w*[-\/\.; ]?([\d\.]*)/i
|
|
5737
|
-
],
|
|
5738
|
-
[NAME, VERSION3],
|
|
5739
|
-
[
|
|
5740
|
-
/\(bb(10);/i
|
|
5741
|
-
// BlackBerry 10
|
|
5742
|
-
],
|
|
5743
|
-
[VERSION3, [NAME, BLACKBERRY]],
|
|
5744
|
-
[
|
|
5745
|
-
/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i
|
|
5746
|
-
// Symbian
|
|
5747
|
-
],
|
|
5748
|
-
[VERSION3, [NAME, "Symbian"]],
|
|
5749
|
-
[
|
|
5750
|
-
/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i
|
|
5751
|
-
// Firefox OS
|
|
5752
|
-
],
|
|
5753
|
-
[VERSION3, [NAME, FIREFOX + " OS"]],
|
|
5754
|
-
[
|
|
5755
|
-
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i,
|
|
5756
|
-
// WebOS
|
|
5757
|
-
/webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i
|
|
5758
|
-
],
|
|
5759
|
-
[VERSION3, [NAME, "webOS"]],
|
|
5760
|
-
[
|
|
5761
|
-
/web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i
|
|
5762
|
-
// https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine
|
|
5763
|
-
],
|
|
5764
|
-
[[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"]],
|
|
5765
|
-
[
|
|
5766
|
-
/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i
|
|
5767
|
-
// watchOS
|
|
5768
|
-
],
|
|
5769
|
-
[VERSION3, [NAME, "watchOS"]],
|
|
5770
|
-
[
|
|
5771
|
-
// Google ChromeOS
|
|
5772
|
-
/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i
|
|
5773
|
-
// Chromium OS
|
|
5774
|
-
],
|
|
5775
|
-
[[NAME, "Chrome OS"], VERSION3],
|
|
5776
|
-
[
|
|
5777
|
-
// Smart TVs
|
|
5778
|
-
/panasonic;(viera)/i,
|
|
5779
|
-
// Panasonic Viera
|
|
5780
|
-
/(netrange)mmh/i,
|
|
5781
|
-
// Netrange
|
|
5782
|
-
/(nettv)\/(\d+\.[\w\.]+)/i,
|
|
5783
|
-
// NetTV
|
|
5784
|
-
// Console
|
|
5785
|
-
/(nintendo|playstation) (\w+)/i,
|
|
5786
|
-
// Nintendo/Playstation
|
|
5787
|
-
/(xbox); +xbox ([^\);]+)/i,
|
|
5788
|
-
// Microsoft Xbox (360, One, X, S, Series X, Series S)
|
|
5789
|
-
/(pico) .+os([\w\.]+)/i,
|
|
5790
|
-
// Pico
|
|
5791
|
-
// Other
|
|
5792
|
-
/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
|
|
5793
|
-
// Joli/Palm
|
|
5794
|
-
/linux.+(mint)[\/\(\) ]?([\w\.]*)/i,
|
|
5795
|
-
// Mint
|
|
5796
|
-
/(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\d\.]*)/i,
|
|
5797
|
-
// Mageia/VectorLinux/Fuchsia/ArcaOS/Arch
|
|
5798
|
-
/([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,
|
|
5799
|
-
// Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix
|
|
5800
|
-
/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
|
|
5801
|
-
// Solaris
|
|
5802
|
-
/\b(aix)[; ]([1-9\.]{0,4})/i,
|
|
5803
|
-
// AIX
|
|
5804
|
-
/(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i,
|
|
5805
|
-
// Hurd/Linux/MorphOS
|
|
5806
|
-
/(gnu) ?([\w\.]*)/i,
|
|
5807
|
-
// GNU
|
|
5808
|
-
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
|
|
5809
|
-
// FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
|
|
5810
|
-
/(haiku) ?(r\d)?/i
|
|
5811
|
-
// Haiku
|
|
5812
|
-
],
|
|
5813
|
-
[NAME, VERSION3],
|
|
5814
|
-
[
|
|
5815
|
-
/(sunos) ?([\d\.]*)/i
|
|
5816
|
-
// Solaris
|
|
5817
|
-
],
|
|
5818
|
-
[[NAME, "Solaris"], VERSION3],
|
|
5819
|
-
[
|
|
5820
|
-
/\b(beos|os\/2|amigaos|openvms|hp-ux|serenityos)/i,
|
|
5821
|
-
// BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS
|
|
5822
|
-
/(unix) ?([\w\.]*)/i
|
|
5823
|
-
// UNIX
|
|
5824
|
-
],
|
|
5825
|
-
[NAME, VERSION3]
|
|
5826
|
-
]
|
|
5827
|
-
};
|
|
5828
|
-
var defaultProps = function() {
|
|
5829
|
-
var props = { init: {}, isIgnore: {}, isIgnoreRgx: {}, toString: {} };
|
|
5830
|
-
setProps.call(props.init, [
|
|
5831
|
-
[BROWSER, [NAME, VERSION3, MAJOR, TYPE]],
|
|
5832
|
-
[CPU, [ARCHITECTURE]],
|
|
5833
|
-
[DEVICE, [TYPE, MODEL, VENDOR]],
|
|
5834
|
-
[ENGINE, [NAME, VERSION3]],
|
|
5835
|
-
[OS, [NAME, VERSION3]]
|
|
5836
|
-
]);
|
|
5837
|
-
setProps.call(props.isIgnore, [
|
|
5838
|
-
[BROWSER, [VERSION3, MAJOR]],
|
|
5839
|
-
[ENGINE, [VERSION3]],
|
|
5840
|
-
[OS, [VERSION3]]
|
|
5841
|
-
]);
|
|
5842
|
-
setProps.call(props.isIgnoreRgx, [
|
|
5843
|
-
[BROWSER, / ?browser$/i],
|
|
5844
|
-
[OS, / ?os$/i]
|
|
5845
|
-
]);
|
|
5846
|
-
setProps.call(props.toString, [
|
|
5847
|
-
[BROWSER, [NAME, VERSION3]],
|
|
5848
|
-
[CPU, [ARCHITECTURE]],
|
|
5849
|
-
[DEVICE, [VENDOR, MODEL]],
|
|
5850
|
-
[ENGINE, [NAME, VERSION3]],
|
|
5851
|
-
[OS, [NAME, VERSION3]]
|
|
5852
|
-
]);
|
|
5853
|
-
return props;
|
|
5854
|
-
}();
|
|
5855
|
-
var createIData = function(item, itemType) {
|
|
5856
|
-
var init_props = defaultProps.init[itemType], is_ignoreProps = defaultProps.isIgnore[itemType] || 0, is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0, toString_props = defaultProps.toString[itemType] || 0;
|
|
5857
|
-
function IData() {
|
|
5858
|
-
setProps.call(this, init_props);
|
|
5859
|
-
}
|
|
5860
|
-
IData.prototype.getItem = function() {
|
|
5861
|
-
return item;
|
|
5862
|
-
};
|
|
5863
|
-
IData.prototype.withClientHints = function() {
|
|
5864
|
-
if (!NAVIGATOR_UADATA) {
|
|
5865
|
-
return item.parseCH().get();
|
|
5866
|
-
}
|
|
5867
|
-
return NAVIGATOR_UADATA.getHighEntropyValues(CH_ALL_VALUES).then(function(res) {
|
|
5868
|
-
return item.setCH(new UACHData(res, false)).parseCH().get();
|
|
5869
|
-
});
|
|
5870
|
-
};
|
|
5871
|
-
IData.prototype.withFeatureCheck = function() {
|
|
5872
|
-
return item.detectFeature().get();
|
|
5873
|
-
};
|
|
5874
|
-
if (itemType != RESULT) {
|
|
5875
|
-
IData.prototype.is = function(strToCheck) {
|
|
5876
|
-
var is = false;
|
|
5877
|
-
for (var i in this) {
|
|
5878
|
-
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)) {
|
|
5879
|
-
is = true;
|
|
5880
|
-
if (strToCheck != TYPEOF.UNDEFINED) break;
|
|
5881
|
-
} else if (strToCheck == TYPEOF.UNDEFINED && is) {
|
|
5882
|
-
is = !is;
|
|
5883
|
-
break;
|
|
5884
|
-
}
|
|
5885
|
-
}
|
|
5886
|
-
return is;
|
|
5887
|
-
};
|
|
5888
|
-
IData.prototype.toString = function() {
|
|
5889
|
-
var str = EMPTY;
|
|
5890
|
-
for (var i in toString_props) {
|
|
5891
|
-
if (typeof this[toString_props[i]] !== TYPEOF.UNDEFINED) {
|
|
5892
|
-
str += (str ? " " : EMPTY) + this[toString_props[i]];
|
|
5893
|
-
}
|
|
5894
|
-
}
|
|
5895
|
-
return str || TYPEOF.UNDEFINED;
|
|
5896
|
-
};
|
|
5897
|
-
}
|
|
5898
|
-
if (!NAVIGATOR_UADATA) {
|
|
5899
|
-
IData.prototype.then = function(cb) {
|
|
5900
|
-
var that = this;
|
|
5901
|
-
var IDataResolve = function() {
|
|
5902
|
-
for (var prop in that) {
|
|
5903
|
-
if (that.hasOwnProperty(prop)) {
|
|
5904
|
-
this[prop] = that[prop];
|
|
5905
|
-
}
|
|
5906
|
-
}
|
|
5907
|
-
};
|
|
5908
|
-
IDataResolve.prototype = {
|
|
5909
|
-
is: IData.prototype.is,
|
|
5910
|
-
toString: IData.prototype.toString
|
|
5911
|
-
};
|
|
5912
|
-
var resolveData = new IDataResolve();
|
|
5913
|
-
cb(resolveData);
|
|
5914
|
-
return resolveData;
|
|
5915
|
-
};
|
|
5916
|
-
}
|
|
5917
|
-
return new IData();
|
|
5918
|
-
};
|
|
5919
|
-
function UACHData(uach, isHttpUACH) {
|
|
5920
|
-
uach = uach || {};
|
|
5921
|
-
setProps.call(this, CH_ALL_VALUES);
|
|
5922
|
-
if (isHttpUACH) {
|
|
5923
|
-
setProps.call(this, [
|
|
5924
|
-
[BRANDS, itemListToArray(uach[CH])],
|
|
5925
|
-
[FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],
|
|
5926
|
-
[MOBILE, /\?1/.test(uach[CH_MOBILE])],
|
|
5927
|
-
[MODEL, stripQuotes(uach[CH_MODEL])],
|
|
5928
|
-
[PLATFORM, stripQuotes(uach[CH_PLATFORM])],
|
|
5929
|
-
[PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],
|
|
5930
|
-
[ARCHITECTURE, stripQuotes(uach[CH_ARCH])],
|
|
5931
|
-
[FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],
|
|
5932
|
-
[BITNESS, stripQuotes(uach[CH_BITNESS])]
|
|
5933
|
-
]);
|
|
5934
|
-
} else {
|
|
5935
|
-
for (var prop in uach) {
|
|
5936
|
-
if (this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];
|
|
5937
|
-
}
|
|
5938
|
-
}
|
|
5939
|
-
}
|
|
5940
|
-
function UAItem(itemType, ua, rgxMap, uaCH) {
|
|
5941
|
-
this.get = function(prop) {
|
|
5942
|
-
if (!prop) return this.data;
|
|
5943
|
-
return this.data.hasOwnProperty(prop) ? this.data[prop] : void 0;
|
|
5944
|
-
};
|
|
5945
|
-
this.set = function(prop, val) {
|
|
5946
|
-
this.data[prop] = val;
|
|
5947
|
-
return this;
|
|
5948
|
-
};
|
|
5949
|
-
this.setCH = function(ch) {
|
|
5950
|
-
this.uaCH = ch;
|
|
5951
|
-
return this;
|
|
5952
|
-
};
|
|
5953
|
-
this.detectFeature = function() {
|
|
5954
|
-
if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {
|
|
5955
|
-
switch (this.itemType) {
|
|
5956
|
-
case BROWSER:
|
|
5957
|
-
if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {
|
|
5958
|
-
this.set(NAME, "Brave");
|
|
5959
|
-
}
|
|
5960
|
-
break;
|
|
5961
|
-
case DEVICE:
|
|
5962
|
-
if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {
|
|
5963
|
-
this.set(TYPE, MOBILE);
|
|
5964
|
-
}
|
|
5965
|
-
if (this.get(MODEL) == "Macintosh" && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {
|
|
5966
|
-
this.set(MODEL, "iPad").set(TYPE, TABLET);
|
|
5967
|
-
}
|
|
5968
|
-
break;
|
|
5969
|
-
case OS:
|
|
5970
|
-
if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {
|
|
5971
|
-
this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);
|
|
5972
|
-
}
|
|
5973
|
-
break;
|
|
5974
|
-
case RESULT:
|
|
5975
|
-
var data = this.data;
|
|
5976
|
-
var detect = function(itemType2) {
|
|
5977
|
-
return data[itemType2].getItem().detectFeature().get();
|
|
5978
|
-
};
|
|
5979
|
-
this.set(BROWSER, detect(BROWSER)).set(CPU, detect(CPU)).set(DEVICE, detect(DEVICE)).set(ENGINE, detect(ENGINE)).set(OS, detect(OS));
|
|
4485
|
+
/** Convert an AxiosError into the appropriate TagadaError subclass. */
|
|
4486
|
+
toTagadaError(error) {
|
|
4487
|
+
var _a, _b, _c, _d, _e;
|
|
4488
|
+
const status = (_a = error.response) == null ? void 0 : _a.status;
|
|
4489
|
+
const data = (_b = error.response) == null ? void 0 : _b.data;
|
|
4490
|
+
const serverMessage = (_d = (_c = data == null ? void 0 : data.message) != null ? _c : data == null ? void 0 : data.error) != null ? _d : error.message;
|
|
4491
|
+
if (!error.response) {
|
|
4492
|
+
if (error.code === "ECONNABORTED") {
|
|
4493
|
+
return new TagadaApiError("Request timed out", 0, {
|
|
4494
|
+
code: TagadaErrorCode.TIMEOUT,
|
|
4495
|
+
retryable: true
|
|
4496
|
+
});
|
|
5980
4497
|
}
|
|
4498
|
+
return new TagadaNetworkError(serverMessage);
|
|
5981
4499
|
}
|
|
5982
|
-
|
|
5983
|
-
|
|
5984
|
-
this.parseUA = function() {
|
|
5985
|
-
if (this.itemType != RESULT) {
|
|
5986
|
-
rgxMapper.call(this.data, this.ua, this.rgxMap);
|
|
4500
|
+
if (status === 401 || status === 403) {
|
|
4501
|
+
return new TagadaAuthError(serverMessage, status);
|
|
5987
4502
|
}
|
|
5988
|
-
|
|
5989
|
-
|
|
5990
|
-
|
|
5991
|
-
|
|
5992
|
-
case OS:
|
|
5993
|
-
if (this.get(NAME) == "iOS" && this.get(VERSION3) == "18.6") {
|
|
5994
|
-
var realVersion = /\) Version\/([\d\.]+)/.exec(this.ua);
|
|
5995
|
-
if (realVersion && parseInt(realVersion[1].substring(0, 2), 10) >= 26) {
|
|
5996
|
-
this.set(VERSION3, realVersion[1]);
|
|
5997
|
-
}
|
|
5998
|
-
}
|
|
5999
|
-
break;
|
|
6000
|
-
}
|
|
6001
|
-
return this;
|
|
6002
|
-
};
|
|
6003
|
-
this.parseCH = function() {
|
|
6004
|
-
var uaCH2 = this.uaCH, rgxMap2 = this.rgxMap;
|
|
6005
|
-
switch (this.itemType) {
|
|
6006
|
-
case BROWSER:
|
|
6007
|
-
case ENGINE:
|
|
6008
|
-
var brands = uaCH2[FULLVERLIST] || uaCH2[BRANDS], prevName;
|
|
6009
|
-
if (brands) {
|
|
6010
|
-
for (var i = 0; i < brands.length; i++) {
|
|
6011
|
-
var brandName = brands[i].brand || brands[i], brandVersion = brands[i].version;
|
|
6012
|
-
if (this.itemType == BROWSER && !/not.a.brand/i.test(brandName) && (!prevName || /Chrom/.test(prevName) && brandName != CHROMIUM || prevName == EDGE && /WebView2/.test(brandName))) {
|
|
6013
|
-
brandName = strMapper(brandName, browserHintsMap);
|
|
6014
|
-
prevName = this.get(NAME);
|
|
6015
|
-
if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {
|
|
6016
|
-
this.set(NAME, brandName).set(VERSION3, brandVersion).set(MAJOR, majorize(brandVersion));
|
|
6017
|
-
}
|
|
6018
|
-
prevName = brandName;
|
|
6019
|
-
}
|
|
6020
|
-
if (this.itemType == ENGINE && brandName == CHROMIUM) {
|
|
6021
|
-
this.set(VERSION3, brandVersion);
|
|
6022
|
-
}
|
|
6023
|
-
}
|
|
6024
|
-
}
|
|
6025
|
-
break;
|
|
6026
|
-
case CPU:
|
|
6027
|
-
var archName = uaCH2[ARCHITECTURE];
|
|
6028
|
-
if (archName) {
|
|
6029
|
-
if (archName && uaCH2[BITNESS] == "64") archName += "64";
|
|
6030
|
-
rgxMapper.call(this.data, archName + ";", rgxMap2);
|
|
6031
|
-
}
|
|
6032
|
-
break;
|
|
6033
|
-
case DEVICE:
|
|
6034
|
-
if (uaCH2[MOBILE]) {
|
|
6035
|
-
this.set(TYPE, MOBILE);
|
|
6036
|
-
}
|
|
6037
|
-
if (uaCH2[MODEL]) {
|
|
6038
|
-
this.set(MODEL, uaCH2[MODEL]);
|
|
6039
|
-
if (!this.get(TYPE) || !this.get(VENDOR)) {
|
|
6040
|
-
var reParse = {};
|
|
6041
|
-
rgxMapper.call(reParse, "droid 9; " + uaCH2[MODEL] + ")", rgxMap2);
|
|
6042
|
-
if (!this.get(TYPE) && !!reParse.type) {
|
|
6043
|
-
this.set(TYPE, reParse.type);
|
|
6044
|
-
}
|
|
6045
|
-
if (!this.get(VENDOR) && !!reParse.vendor) {
|
|
6046
|
-
this.set(VENDOR, reParse.vendor);
|
|
6047
|
-
}
|
|
6048
|
-
}
|
|
6049
|
-
}
|
|
6050
|
-
if (uaCH2[FORMFACTORS]) {
|
|
6051
|
-
var ff;
|
|
6052
|
-
if (typeof uaCH2[FORMFACTORS] !== "string") {
|
|
6053
|
-
var idx = 0;
|
|
6054
|
-
while (!ff && idx < uaCH2[FORMFACTORS].length) {
|
|
6055
|
-
ff = strMapper(uaCH2[FORMFACTORS][idx++], formFactorsMap);
|
|
6056
|
-
}
|
|
6057
|
-
} else {
|
|
6058
|
-
ff = strMapper(uaCH2[FORMFACTORS], formFactorsMap);
|
|
6059
|
-
}
|
|
6060
|
-
this.set(TYPE, ff);
|
|
6061
|
-
}
|
|
6062
|
-
break;
|
|
6063
|
-
case OS:
|
|
6064
|
-
var osName = uaCH2[PLATFORM];
|
|
6065
|
-
if (osName) {
|
|
6066
|
-
var osVersion = uaCH2[PLATFORMVER];
|
|
6067
|
-
if (osName == WINDOWS) osVersion = parseInt(majorize(osVersion), 10) >= 13 ? "11" : "10";
|
|
6068
|
-
this.set(NAME, osName).set(VERSION3, osVersion);
|
|
6069
|
-
}
|
|
6070
|
-
if (this.get(NAME) == WINDOWS && uaCH2[MODEL] == "Xbox") {
|
|
6071
|
-
this.set(NAME, "Xbox").set(VERSION3, void 0);
|
|
6072
|
-
}
|
|
6073
|
-
break;
|
|
6074
|
-
case RESULT:
|
|
6075
|
-
var data = this.data;
|
|
6076
|
-
var parse = function(itemType2) {
|
|
6077
|
-
return data[itemType2].getItem().setCH(uaCH2).parseCH().get();
|
|
6078
|
-
};
|
|
6079
|
-
this.set(BROWSER, parse(BROWSER)).set(CPU, parse(CPU)).set(DEVICE, parse(DEVICE)).set(ENGINE, parse(ENGINE)).set(OS, parse(OS));
|
|
6080
|
-
}
|
|
6081
|
-
return this;
|
|
6082
|
-
};
|
|
6083
|
-
setProps.call(this, [
|
|
6084
|
-
["itemType", itemType],
|
|
6085
|
-
["ua", ua],
|
|
6086
|
-
["uaCH", uaCH],
|
|
6087
|
-
["rgxMap", rgxMap],
|
|
6088
|
-
["data", createIData(this, itemType)]
|
|
6089
|
-
]);
|
|
6090
|
-
return this;
|
|
6091
|
-
}
|
|
6092
|
-
function UAParser(ua, extensions, headers) {
|
|
6093
|
-
if (typeof ua === TYPEOF.OBJECT) {
|
|
6094
|
-
if (isExtensions(ua, true)) {
|
|
6095
|
-
if (typeof extensions === TYPEOF.OBJECT) {
|
|
6096
|
-
headers = extensions;
|
|
6097
|
-
}
|
|
6098
|
-
extensions = ua;
|
|
6099
|
-
} else {
|
|
6100
|
-
headers = ua;
|
|
6101
|
-
extensions = void 0;
|
|
6102
|
-
}
|
|
6103
|
-
ua = void 0;
|
|
6104
|
-
} else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {
|
|
6105
|
-
headers = extensions;
|
|
6106
|
-
extensions = void 0;
|
|
6107
|
-
}
|
|
6108
|
-
if (headers) {
|
|
6109
|
-
if (typeof headers.append === TYPEOF.FUNCTION) {
|
|
6110
|
-
var kv = {};
|
|
6111
|
-
headers.forEach(function(v, k) {
|
|
6112
|
-
kv[String(k).toLowerCase()] = v;
|
|
4503
|
+
if (status === 429) {
|
|
4504
|
+
return new TagadaApiError(serverMessage, 429, {
|
|
4505
|
+
code: TagadaErrorCode.RATE_LIMITED,
|
|
4506
|
+
retryable: true
|
|
6113
4507
|
});
|
|
6114
|
-
headers = kv;
|
|
6115
|
-
} else {
|
|
6116
|
-
var normalized = {};
|
|
6117
|
-
for (var header in headers) {
|
|
6118
|
-
if (headers.hasOwnProperty(header)) {
|
|
6119
|
-
normalized[String(header).toLowerCase()] = headers[header];
|
|
6120
|
-
}
|
|
6121
|
-
}
|
|
6122
|
-
headers = normalized;
|
|
6123
|
-
}
|
|
6124
|
-
}
|
|
6125
|
-
if (!(this instanceof UAParser)) {
|
|
6126
|
-
return new UAParser(ua, extensions, headers).getResult();
|
|
6127
|
-
}
|
|
6128
|
-
var userAgent = typeof ua === TYPEOF.STRING ? ua : (
|
|
6129
|
-
// Passed user-agent string
|
|
6130
|
-
headers && headers[USER_AGENT] ? headers[USER_AGENT] : (
|
|
6131
|
-
// User-Agent from passed headers
|
|
6132
|
-
NAVIGATOR && NAVIGATOR.userAgent ? NAVIGATOR.userAgent : (
|
|
6133
|
-
// navigator.userAgent
|
|
6134
|
-
EMPTY
|
|
6135
|
-
)
|
|
6136
|
-
)
|
|
6137
|
-
), httpUACH = new UACHData(headers, true), regexMap = extensions ? extend2(defaultRegexes, extensions) : defaultRegexes, createItemFunc = function(itemType) {
|
|
6138
|
-
if (itemType == RESULT) {
|
|
6139
|
-
return function() {
|
|
6140
|
-
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();
|
|
6141
|
-
};
|
|
6142
|
-
} else {
|
|
6143
|
-
return function() {
|
|
6144
|
-
return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH).parseUA().get();
|
|
6145
|
-
};
|
|
6146
|
-
}
|
|
6147
|
-
};
|
|
6148
|
-
setProps.call(this, [
|
|
6149
|
-
["getBrowser", createItemFunc(BROWSER)],
|
|
6150
|
-
["getCPU", createItemFunc(CPU)],
|
|
6151
|
-
["getDevice", createItemFunc(DEVICE)],
|
|
6152
|
-
["getEngine", createItemFunc(ENGINE)],
|
|
6153
|
-
["getOS", createItemFunc(OS)],
|
|
6154
|
-
["getResult", createItemFunc(RESULT)],
|
|
6155
|
-
["getUA", function() {
|
|
6156
|
-
return userAgent;
|
|
6157
|
-
}],
|
|
6158
|
-
["setUA", function(ua2) {
|
|
6159
|
-
if (isString2(ua2)) userAgent = trim2(ua2, UA_MAX_LENGTH);
|
|
6160
|
-
return this;
|
|
6161
|
-
}]
|
|
6162
|
-
]).setUA(userAgent);
|
|
6163
|
-
return this;
|
|
6164
|
-
}
|
|
6165
|
-
UAParser.VERSION = LIBVERSION;
|
|
6166
|
-
UAParser.BROWSER = enumerize([NAME, VERSION3, MAJOR, TYPE]);
|
|
6167
|
-
UAParser.CPU = enumerize([ARCHITECTURE]);
|
|
6168
|
-
UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
|
|
6169
|
-
UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION3]);
|
|
6170
|
-
|
|
6171
|
-
// ../../node_modules/.pnpm/@ua-parser-js+pro-enterprise@2.0.6/node_modules/@ua-parser-js/pro-enterprise/src/enums/ua-parser-enums.mjs
|
|
6172
|
-
var BrowserName = Object.freeze({
|
|
6173
|
-
"115": "115",
|
|
6174
|
-
"2345": "2345",
|
|
6175
|
-
"360": "360",
|
|
6176
|
-
ALIPAY: "Alipay",
|
|
6177
|
-
AMAYA: "Amaya",
|
|
6178
|
-
ANDROID: "Android Browser",
|
|
6179
|
-
ARORA: "Arora",
|
|
6180
|
-
AVANT: "Avant",
|
|
6181
|
-
AVAST: "Avast Secure Browser",
|
|
6182
|
-
AVG: "AVG Secure Browser",
|
|
6183
|
-
BAIDU: "Baidu Browser",
|
|
6184
|
-
BASILISK: "Basilisk",
|
|
6185
|
-
BING: "Bing",
|
|
6186
|
-
BLAZER: "Blazer",
|
|
6187
|
-
BOLT: "Bolt",
|
|
6188
|
-
BOWSER: "Bowser",
|
|
6189
|
-
BRAVE: "Brave",
|
|
6190
|
-
CAMINO: "Camino",
|
|
6191
|
-
CHIMERA: "Chimera",
|
|
6192
|
-
CHROME: "Chrome",
|
|
6193
|
-
CHROME_HEADLESS: "Chrome Headless",
|
|
6194
|
-
CHROME_MOBILE: "Mobile Chrome",
|
|
6195
|
-
CHROME_WEBVIEW: "Chrome WebView",
|
|
6196
|
-
CHROMIUM: "Chromium",
|
|
6197
|
-
COBALT: "Cobalt",
|
|
6198
|
-
COC_COC: "Coc Coc",
|
|
6199
|
-
CONKEROR: "Conkeror",
|
|
6200
|
-
DAUM: "Daum",
|
|
6201
|
-
DILLO: "Dillo",
|
|
6202
|
-
DOLPHIN: "Dolphin",
|
|
6203
|
-
DOOBLE: "Dooble",
|
|
6204
|
-
DORIS: "Doris",
|
|
6205
|
-
DRAGON: "Dragon",
|
|
6206
|
-
DUCKDUCKGO: "DuckDuckGo",
|
|
6207
|
-
ECOSIA: "Ecosia",
|
|
6208
|
-
EDGE: "Edge",
|
|
6209
|
-
EDGE_WEBVIEW: "Edge WebView",
|
|
6210
|
-
EDGE_WEBVIEW2: "Edge WebView2",
|
|
6211
|
-
EPIPHANY: "Epiphany",
|
|
6212
|
-
FACEBOOK: "Facebook",
|
|
6213
|
-
FALKON: "Falkon",
|
|
6214
|
-
FIREBIRD: "Firebird",
|
|
6215
|
-
FIREFOX: "Firefox",
|
|
6216
|
-
FIREFOX_FOCUS: "Firefox Focus",
|
|
6217
|
-
FIREFOX_MOBILE: "Mobile Firefox",
|
|
6218
|
-
FIREFOX_REALITY: "Firefox Reality",
|
|
6219
|
-
FENNEC: "Fennec",
|
|
6220
|
-
FLOCK: "Flock",
|
|
6221
|
-
FLOW: "Flow",
|
|
6222
|
-
GO: "GoBrowser",
|
|
6223
|
-
GOOGLE_SEARCH: "GSA",
|
|
6224
|
-
HELIO: "Helio",
|
|
6225
|
-
HEYTAP: "HeyTap",
|
|
6226
|
-
HONOR: "Honor",
|
|
6227
|
-
HUAWEI: "Huawei Browser",
|
|
6228
|
-
ICAB: "iCab",
|
|
6229
|
-
ICE: "ICE Browser",
|
|
6230
|
-
ICEAPE: "IceApe",
|
|
6231
|
-
ICECAT: "IceCat",
|
|
6232
|
-
ICEDRAGON: "IceDragon",
|
|
6233
|
-
ICEWEASEL: "IceWeasel",
|
|
6234
|
-
IE: "IE",
|
|
6235
|
-
INSTAGRAM: "Instagram",
|
|
6236
|
-
IRIDIUM: "Iridium",
|
|
6237
|
-
IRON: "Iron",
|
|
6238
|
-
JASMINE: "Jasmine",
|
|
6239
|
-
KONQUEROR: "Konqueror",
|
|
6240
|
-
KAKAO: "KakaoTalk",
|
|
6241
|
-
KHTML: "KHTML",
|
|
6242
|
-
K_MELEON: "K-Meleon",
|
|
6243
|
-
KLAR: "Klar",
|
|
6244
|
-
KLARNA: "Klarna",
|
|
6245
|
-
KINDLE: "Kindle",
|
|
6246
|
-
LENOVO: "Smart Lenovo Browser",
|
|
6247
|
-
LADYBIRD: "Ladybird",
|
|
6248
|
-
LG: "LG Browser",
|
|
6249
|
-
LIBREWOLF: "LibreWolf",
|
|
6250
|
-
LIEBAO: "LBBROWSER",
|
|
6251
|
-
LINE: "Line",
|
|
6252
|
-
LINKEDIN: "LinkedIn",
|
|
6253
|
-
LINKS: "Links",
|
|
6254
|
-
LUNASCAPE: "Lunascape",
|
|
6255
|
-
LYNX: "Lynx",
|
|
6256
|
-
MAEMO: "Maemo Browser",
|
|
6257
|
-
MAXTHON: "Maxthon",
|
|
6258
|
-
MIDORI: "Midori",
|
|
6259
|
-
MINIMO: "Minimo",
|
|
6260
|
-
MIUI: "MIUI Browser",
|
|
6261
|
-
MOZILLA: "Mozilla",
|
|
6262
|
-
MOSAIC: "Mosaic",
|
|
6263
|
-
NAVER: "Naver",
|
|
6264
|
-
NETFRONT: "NetFront",
|
|
6265
|
-
NETSCAPE: "Netscape",
|
|
6266
|
-
NETSURF: "Netsurf",
|
|
6267
|
-
NOKIA: "Nokia Browser",
|
|
6268
|
-
OBIGO: "Obigo",
|
|
6269
|
-
OCULUS: "Oculus Browser",
|
|
6270
|
-
OMNIWEB: "OmniWeb",
|
|
6271
|
-
OPERA: "Opera",
|
|
6272
|
-
OPERA_COAST: "Opera Coast",
|
|
6273
|
-
OPERA_GX: "Opera GX",
|
|
6274
|
-
OPERA_MINI: "Opera Mini",
|
|
6275
|
-
OPERA_MOBI: "Opera Mobi",
|
|
6276
|
-
OPERA_TABLET: "Opera Tablet",
|
|
6277
|
-
OPERA_TOUCH: "Opera Touch",
|
|
6278
|
-
OTTER: "Otter",
|
|
6279
|
-
OVI: "OviBrowser",
|
|
6280
|
-
PALEMOON: "PaleMoon",
|
|
6281
|
-
PHANTOMJS: "PhantomJS",
|
|
6282
|
-
PHOENIX: "Phoenix",
|
|
6283
|
-
PICOBROWSER: "Pico Browser",
|
|
6284
|
-
POLARIS: "Polaris",
|
|
6285
|
-
PUFFIN: "Puffin",
|
|
6286
|
-
QQ: "QQBrowser",
|
|
6287
|
-
QQ_LITE: "QQBrowserLite",
|
|
6288
|
-
QUARK: "Quark",
|
|
6289
|
-
QUPZILLA: "QupZilla",
|
|
6290
|
-
QUTEBROWSER: "qutebrowser",
|
|
6291
|
-
QWANT: "Qwant",
|
|
6292
|
-
REKONQ: "rekonq",
|
|
6293
|
-
ROCKMELT: "Rockmelt",
|
|
6294
|
-
SAFARI: "Safari",
|
|
6295
|
-
SAFARI_MOBILE: "Mobile Safari",
|
|
6296
|
-
SAILFISH: "Sailfish Browser",
|
|
6297
|
-
SAMSUNG: "Samsung Internet",
|
|
6298
|
-
SEAMONKEY: "SeaMonkey",
|
|
6299
|
-
SILK: "Silk",
|
|
6300
|
-
SKYFIRE: "Skyfire",
|
|
6301
|
-
SLEIPNIR: "Sleipnir",
|
|
6302
|
-
SLIMBOAT: "SlimBoat",
|
|
6303
|
-
SLIMBROWSER: "SlimBrowser",
|
|
6304
|
-
SLIMJET: "Slimjet",
|
|
6305
|
-
SNAPCHAT: "Snapchat",
|
|
6306
|
-
SOGOU_EXPLORER: "Sogou Explorer",
|
|
6307
|
-
SOGOU_MOBILE: "Sogou Mobile",
|
|
6308
|
-
SURF: "Surf",
|
|
6309
|
-
SWIFTFOX: "Swiftfox",
|
|
6310
|
-
TESLA: "Tesla",
|
|
6311
|
-
TIKTOK: "TikTok",
|
|
6312
|
-
TIZEN: "Tizen Browser",
|
|
6313
|
-
TWITTER: "Twitter",
|
|
6314
|
-
UC: "UCBrowser",
|
|
6315
|
-
UP: "UP.Browser",
|
|
6316
|
-
VIVALDI: "Vivaldi",
|
|
6317
|
-
VIVO: "Vivo Browser",
|
|
6318
|
-
W3M: "w3m",
|
|
6319
|
-
WATERFOX: "Waterfox",
|
|
6320
|
-
WEBKIT: "WebKit",
|
|
6321
|
-
WECHAT: "WeChat",
|
|
6322
|
-
WEIBO: "Weibo",
|
|
6323
|
-
WHALE: "Whale",
|
|
6324
|
-
WOLVIC: "Wolvic",
|
|
6325
|
-
YANDEX: "Yandex",
|
|
6326
|
-
ZALO: "Zalo"
|
|
6327
|
-
// TODO : test!
|
|
6328
|
-
});
|
|
6329
|
-
var BrowserType = Object.freeze({
|
|
6330
|
-
CRAWLER: "crawler",
|
|
6331
|
-
CLI: "cli",
|
|
6332
|
-
EMAIL: "email",
|
|
6333
|
-
FETCHER: "fetcher",
|
|
6334
|
-
INAPP: "inapp",
|
|
6335
|
-
MEDIAPLAYER: "mediaplayer",
|
|
6336
|
-
LIBRARY: "library"
|
|
6337
|
-
});
|
|
6338
|
-
var CPUArch = Object.freeze({
|
|
6339
|
-
"68K": "68k",
|
|
6340
|
-
ALPHA: "alpha",
|
|
6341
|
-
ARM: "arm",
|
|
6342
|
-
ARM_64: "arm64",
|
|
6343
|
-
ARM_HF: "armhf",
|
|
6344
|
-
AVR: "avr",
|
|
6345
|
-
AVR_32: "avr32",
|
|
6346
|
-
IA64: "ia64",
|
|
6347
|
-
IRIX: "irix",
|
|
6348
|
-
IRIX_64: "irix64",
|
|
6349
|
-
MIPS: "mips",
|
|
6350
|
-
MIPS_64: "mips64",
|
|
6351
|
-
PA_RISC: "pa-risc",
|
|
6352
|
-
PPC: "ppc",
|
|
6353
|
-
SPARC: "sparc",
|
|
6354
|
-
SPARC_64: "sparc64",
|
|
6355
|
-
X86: "ia32",
|
|
6356
|
-
X86_64: "amd64"
|
|
6357
|
-
});
|
|
6358
|
-
var DeviceType = Object.freeze({
|
|
6359
|
-
CONSOLE: "console",
|
|
6360
|
-
DESKTOP: "desktop",
|
|
6361
|
-
EMBEDDED: "embedded",
|
|
6362
|
-
MOBILE: "mobile",
|
|
6363
|
-
SMARTTV: "smarttv",
|
|
6364
|
-
TABLET: "tablet",
|
|
6365
|
-
WEARABLE: "wearable",
|
|
6366
|
-
XR: "xr"
|
|
6367
|
-
});
|
|
6368
|
-
var DeviceVendor = Object.freeze({
|
|
6369
|
-
ACER: "Acer",
|
|
6370
|
-
ADVAN: "Advan",
|
|
6371
|
-
ALCATEL: "Alcatel",
|
|
6372
|
-
APPLE: "Apple",
|
|
6373
|
-
AMAZON: "Amazon",
|
|
6374
|
-
ARCHOS: "Archos",
|
|
6375
|
-
ASUS: "ASUS",
|
|
6376
|
-
ATT: "AT&T",
|
|
6377
|
-
BENQ: "BenQ",
|
|
6378
|
-
BLACKBERRY: "BlackBerry",
|
|
6379
|
-
BLU: "BLU",
|
|
6380
|
-
CAT: "Cat",
|
|
6381
|
-
DELL: "Dell",
|
|
6382
|
-
ENERGIZER: "Energizer",
|
|
6383
|
-
ESSENTIAL: "Essential",
|
|
6384
|
-
FACEBOOK: "Facebook",
|
|
6385
|
-
FAIRPHONE: "Fairphone",
|
|
6386
|
-
GEEKSPHONE: "GeeksPhone",
|
|
6387
|
-
GENERIC: "Generic",
|
|
6388
|
-
GOOGLE: "Google",
|
|
6389
|
-
HISENSE: "Hisense",
|
|
6390
|
-
HMD: "HMD",
|
|
6391
|
-
HP: "HP",
|
|
6392
|
-
HTC: "HTC",
|
|
6393
|
-
HUAWEI: "Huawei",
|
|
6394
|
-
IMO: "IMO",
|
|
6395
|
-
INFINIX: "Infinix",
|
|
6396
|
-
ITEL: "itel",
|
|
6397
|
-
JOLLA: "Jolla",
|
|
6398
|
-
KOBO: "Kobo",
|
|
6399
|
-
LAVA: "Lava",
|
|
6400
|
-
LENOVO: "Lenovo",
|
|
6401
|
-
LG: "LG",
|
|
6402
|
-
MEIZU: "Meizu",
|
|
6403
|
-
MICROMAX: "Micromax",
|
|
6404
|
-
MICROSOFT: "Microsoft",
|
|
6405
|
-
MOTOROLA: "Motorola",
|
|
6406
|
-
NEXIAN: "Nexian",
|
|
6407
|
-
NINTENDO: "Nintendo",
|
|
6408
|
-
NOKIA: "Nokia",
|
|
6409
|
-
NOTHING: "Nothing",
|
|
6410
|
-
NVIDIA: "Nvidia",
|
|
6411
|
-
ONEPLUS: "OnePlus",
|
|
6412
|
-
OPPO: "OPPO",
|
|
6413
|
-
OUYA: "Ouya",
|
|
6414
|
-
PALM: "Palm",
|
|
6415
|
-
PANASONIC: "Panasonic",
|
|
6416
|
-
PEBBLE: "Pebble",
|
|
6417
|
-
PHILIPS: "Philips",
|
|
6418
|
-
PICO: "Pico",
|
|
6419
|
-
POLYTRON: "Polytron",
|
|
6420
|
-
REALME: "Realme",
|
|
6421
|
-
RETROID: "Retroid",
|
|
6422
|
-
RIM: "RIM",
|
|
6423
|
-
ROKU: "Roku",
|
|
6424
|
-
SAMSUNG: "Samsung",
|
|
6425
|
-
SHARP: "Sharp",
|
|
6426
|
-
SIEMENS: "Siemens",
|
|
6427
|
-
SMARTFREN: "Smartfren",
|
|
6428
|
-
SONY: "Sony",
|
|
6429
|
-
SPRINT: "Sprint",
|
|
6430
|
-
TCL: "TCL",
|
|
6431
|
-
TECHNISAT: "TechniSAT",
|
|
6432
|
-
TECNO: "TECNO",
|
|
6433
|
-
TESLA: "Tesla",
|
|
6434
|
-
ULEFONE: "Ulefone",
|
|
6435
|
-
VIVO: "Vivo",
|
|
6436
|
-
VIZIO: "Vizio",
|
|
6437
|
-
VODAFONE: "Vodafone",
|
|
6438
|
-
WIKO: "Wiko",
|
|
6439
|
-
XBOX: "Xbox",
|
|
6440
|
-
XIAOMI: "Xiaomi",
|
|
6441
|
-
ZEBRA: "Zebra",
|
|
6442
|
-
ZTE: "ZTE"
|
|
6443
|
-
// TODO : test!
|
|
6444
|
-
});
|
|
6445
|
-
var EngineName = Object.freeze({
|
|
6446
|
-
AMAYA: "Amaya",
|
|
6447
|
-
ARKWEB: "ArkWeb",
|
|
6448
|
-
BLINK: "Blink",
|
|
6449
|
-
EDGEHTML: "EdgeHTML",
|
|
6450
|
-
FLOW: "Flow",
|
|
6451
|
-
GECKO: "Gecko",
|
|
6452
|
-
GOANNA: "Goanna",
|
|
6453
|
-
ICAB: "iCab",
|
|
6454
|
-
KHTML: "KHTML",
|
|
6455
|
-
LIBWEB: "LibWeb",
|
|
6456
|
-
LINKS: "Links",
|
|
6457
|
-
LYNX: "Lynx",
|
|
6458
|
-
NETFRONT: "NetFront",
|
|
6459
|
-
NETSURF: "NetSurf",
|
|
6460
|
-
PRESTO: "Presto",
|
|
6461
|
-
SERVO: "Servo",
|
|
6462
|
-
TASMAN: "Tasman",
|
|
6463
|
-
TRIDENT: "Trident",
|
|
6464
|
-
W3M: "w3m",
|
|
6465
|
-
WEBKIT: "WebKit"
|
|
6466
|
-
});
|
|
6467
|
-
var OSName = Object.freeze({
|
|
6468
|
-
AIX: "AIX",
|
|
6469
|
-
AMIGA_OS: "Amiga OS",
|
|
6470
|
-
ANDROID: "Android",
|
|
6471
|
-
ANDROID_X86: "Android-x86",
|
|
6472
|
-
ARCAOS: "ArcaOS",
|
|
6473
|
-
ARCH: "Arch",
|
|
6474
|
-
BADA: "Bada",
|
|
6475
|
-
BEOS: "BeOS",
|
|
6476
|
-
BLACKBERRY: "BlackBerry",
|
|
6477
|
-
CENTOS: "CentOS",
|
|
6478
|
-
CHROME_OS: "Chrome OS",
|
|
6479
|
-
CHROMECAST: "Chromecast",
|
|
6480
|
-
CHROMECAST_ANDROID: "Chromecast Android",
|
|
6481
|
-
CHROMECAST_FUCHSIA: "Chromecast Fuchsia",
|
|
6482
|
-
CHROMECAST_LINUX: "Chromecast Linux",
|
|
6483
|
-
CHROMECAST_SMARTSPEAKER: "Chromecast SmartSpeaker",
|
|
6484
|
-
CONTIKI: "Contiki",
|
|
6485
|
-
DEBIAN: "Debian",
|
|
6486
|
-
DEEPIN: "Deepin",
|
|
6487
|
-
DRAGONFLY: "DragonFly",
|
|
6488
|
-
ELEMENTARY_OS: "elementary OS",
|
|
6489
|
-
FEDORA: "Fedora",
|
|
6490
|
-
FIREFOX_OS: "Firefox OS",
|
|
6491
|
-
FREEBSD: "FreeBSD",
|
|
6492
|
-
FUCHSIA: "Fuchsia",
|
|
6493
|
-
GENTOO: "Gentoo",
|
|
6494
|
-
GHOSTBSD: "GhostBSD",
|
|
6495
|
-
GNU: "GNU",
|
|
6496
|
-
HAIKU: "Haiku",
|
|
6497
|
-
HARMONYOS: "HarmonyOS",
|
|
6498
|
-
HP_UX: "HP-UX",
|
|
6499
|
-
HURD: "Hurd",
|
|
6500
|
-
IOS: "iOS",
|
|
6501
|
-
JOLI: "Joli",
|
|
6502
|
-
KAIOS: "KaiOS",
|
|
6503
|
-
KNOPPIX: "Knoppix",
|
|
6504
|
-
KUBUNTU: "Kubuntu",
|
|
6505
|
-
LINPUS: "Linpus",
|
|
6506
|
-
LINSPIRE: "Linspire",
|
|
6507
|
-
LINUX: "Linux",
|
|
6508
|
-
MACOS: "macOS",
|
|
6509
|
-
MAEMO: "Maemo",
|
|
6510
|
-
MAGEIA: "Mageia",
|
|
6511
|
-
MANDRIVA: "Mandriva",
|
|
6512
|
-
MANJARO: "Manjaro",
|
|
6513
|
-
MEEGO: "MeeGo",
|
|
6514
|
-
MINIX: "Minix",
|
|
6515
|
-
MINT: "Mint",
|
|
6516
|
-
MORPH_OS: "Morph OS",
|
|
6517
|
-
NETBSD: "NetBSD",
|
|
6518
|
-
NETRANGE: "NetRange",
|
|
6519
|
-
NETTV: "NetTV",
|
|
6520
|
-
NINTENDO: "Nintendo",
|
|
6521
|
-
OPENHARMONY: "OpenHarmony",
|
|
6522
|
-
OPENBSD: "OpenBSD",
|
|
6523
|
-
OPENVMS: "OpenVMS",
|
|
6524
|
-
OS2: "OS/2",
|
|
6525
|
-
PALM: "Palm",
|
|
6526
|
-
PC_BSD: "PC-BSD",
|
|
6527
|
-
PCLINUXOS: "PCLinuxOS",
|
|
6528
|
-
PICO: "Pico",
|
|
6529
|
-
PLAN9: "Plan9",
|
|
6530
|
-
PLAYSTATION: "PlayStation",
|
|
6531
|
-
QNX: "QNX",
|
|
6532
|
-
RASPBIAN: "Raspbian",
|
|
6533
|
-
REDHAT: "RedHat",
|
|
6534
|
-
RIM_TABLET_OS: "RIM Tablet OS",
|
|
6535
|
-
RISC_OS: "RISC OS",
|
|
6536
|
-
SABAYON: "Sabayon",
|
|
6537
|
-
SAILFISH: "Sailfish",
|
|
6538
|
-
SERENITYOS: "SerenityOS",
|
|
6539
|
-
SERIES40: "Series40",
|
|
6540
|
-
SLACKWARE: "Slackware",
|
|
6541
|
-
SOLARIS: "Solaris",
|
|
6542
|
-
SUSE: "SUSE",
|
|
6543
|
-
SYMBIAN: "Symbian",
|
|
6544
|
-
TIZEN: "Tizen",
|
|
6545
|
-
UBUNTU: "Ubuntu",
|
|
6546
|
-
UBUNTU_TOUCH: "Ubuntu Touch",
|
|
6547
|
-
UNIX: "Unix",
|
|
6548
|
-
VECTORLINUX: "VectorLinux",
|
|
6549
|
-
WATCHOS: "watchOS",
|
|
6550
|
-
WEBOS: "WebOS",
|
|
6551
|
-
WINDOWS: "Windows",
|
|
6552
|
-
WINDOWS_CE: "Windows CE",
|
|
6553
|
-
WINDOWS_IOT: "Windows IoT",
|
|
6554
|
-
WINDOWS_MOBILE: "Windows Mobile",
|
|
6555
|
-
WINDOWS_PHONE: "Windows Phone",
|
|
6556
|
-
WINDOWS_RT: "Windows RT",
|
|
6557
|
-
XBOX: "Xbox",
|
|
6558
|
-
XUBUNTU: "Xubuntu",
|
|
6559
|
-
ZENWALK: "Zenwalk"
|
|
6560
|
-
// TODO : test!
|
|
6561
|
-
});
|
|
6562
|
-
var Extension = Object.freeze({
|
|
6563
|
-
BrowserName: {
|
|
6564
|
-
CLI: {
|
|
6565
|
-
CURL: "curl",
|
|
6566
|
-
ELINKS: "ELinks",
|
|
6567
|
-
HTTPIE: "HTTPie",
|
|
6568
|
-
LYNX: "Lynx",
|
|
6569
|
-
WGET: "Wget"
|
|
6570
|
-
},
|
|
6571
|
-
Crawler: {
|
|
6572
|
-
AHREFS_BOT: "AhrefsBot",
|
|
6573
|
-
AI2_BOT: "AI2Bot",
|
|
6574
|
-
AIHIT_BOT: "aiHitBot",
|
|
6575
|
-
ALGOLIA_CRAWLER: "Algolia Crawler",
|
|
6576
|
-
APPLE_BOT: "Applebot",
|
|
6577
|
-
APPLE_BOT_EXTENDED: "Applebot-Extended",
|
|
6578
|
-
ASK_TEOMA: "Teoma",
|
|
6579
|
-
AMAZON_BOT: "Amazonbot",
|
|
6580
|
-
AMAZON_CONTXBOT: "contxbot",
|
|
6581
|
-
ANTHROPIC_AI: "anthropic-ai",
|
|
6582
|
-
ANTHROPIC_CLAUDE_BOT: "ClaudeBot",
|
|
6583
|
-
ANTHROPIC_CLAUDE_SEARCHBOT: "Claude-SearchBot",
|
|
6584
|
-
ANTHROPIC_CLAUDE_WEB: "Claude-Web",
|
|
6585
|
-
ARCHIVEORG_BOT: "archive.org_bot",
|
|
6586
|
-
BAIDU_ADS: "Baidu-ADS",
|
|
6587
|
-
BAIDU_SPIDER: "Baiduspider",
|
|
6588
|
-
BAIDU_SPIDER_ADS: "Baiduspider-ads",
|
|
6589
|
-
BAIDU_SPIDER_CPRO: "Baiduspider-cpro",
|
|
6590
|
-
BAIDU_SPIDER_FAVO: "Baiduspider-favo",
|
|
6591
|
-
BAIDU_SPIDER_IMAGE: "Baiduspider-image",
|
|
6592
|
-
BAIDU_SPIDER_NEWS: "Baiduspider-news",
|
|
6593
|
-
BAIDU_SPIDER_RENDER: "Baiduspider-render",
|
|
6594
|
-
BAIDU_SPIDER_VIDEO: "Baiduspider-video",
|
|
6595
|
-
BLEX_BOT: "BLEXBot",
|
|
6596
|
-
BOTIFY: "botify",
|
|
6597
|
-
BRAVE_BOT: "Bravebot",
|
|
6598
|
-
BYTEDANCE_BYTESPIDER: "Bytespider",
|
|
6599
|
-
BYTEDANCE_TIKTOKSPIDER: "TikTokSpider",
|
|
6600
|
-
COMMON_CRAWL_CCBOT: "CCBot",
|
|
6601
|
-
COCCOC_BOT_WEB: "coccocbot-web",
|
|
6602
|
-
COCCOC_BOT_IMAGE: "coccocbot-image",
|
|
6603
|
-
COHERE_TRAINING_DATA_CRAWLER: "cohere-training-data-crawler",
|
|
6604
|
-
COTOYOGI: "Cotoyogi",
|
|
6605
|
-
COVEO_BOT: "Coveobot",
|
|
6606
|
-
CRITEO_BOT: "CriteoBot",
|
|
6607
|
-
DATAFORSEO_BOT: "DataForSeoBot",
|
|
6608
|
-
DAUM: "Daum",
|
|
6609
|
-
DAUM_DAUMOA: "Daumoa",
|
|
6610
|
-
DAUM_DAUMOA_IMAGE: "Daumoa-image",
|
|
6611
|
-
DEEPSEEK_BOT: "DeepSeekBot",
|
|
6612
|
-
DIFFBOT: "Diffbot",
|
|
6613
|
-
DUCKDUCKGO_BOT: "DuckDuckBot",
|
|
6614
|
-
DUCKDUCKGO_FAVICONS_BOT: "DuckDuckGo-Favicons-Bot",
|
|
6615
|
-
ELASTIC: "Elastic",
|
|
6616
|
-
ELASTIC_SWIFTYPE_BOT: "Swiftbot",
|
|
6617
|
-
EXALEAD_EXABOT: "Exabot",
|
|
6618
|
-
FIRECRAWL_AGENT: "FirecrawlAgent",
|
|
6619
|
-
FREESPOKE: "Freespoke",
|
|
6620
|
-
GOOGLE_ADSBOT: "AdsBot-Google",
|
|
6621
|
-
GOOGLE_ADSBOT_MOBILE: "Adsbot-Google-Mobile",
|
|
6622
|
-
GOOGLE_ADSENSE: "AdSense",
|
|
6623
|
-
GOOGLE_APIS: "APIs-Google",
|
|
6624
|
-
GOOGLE_BOT: "Googlebot",
|
|
6625
|
-
GOOGLE_BOT_IMAGE: "Googlebot-Image",
|
|
6626
|
-
GOOGLE_BOT_NEWS: "Googlebot-News",
|
|
6627
|
-
GOOGLE_BOT_VIDEO: "Googlebot-Video",
|
|
6628
|
-
GOOGLE_CLOUDVERTEXBOT: "Google-CloudVertexBot",
|
|
6629
|
-
GOOGLE_EXTENDED: "Google-Extended",
|
|
6630
|
-
GOOGLE_INSPECTIONTOOL: "Google-InspectionTool",
|
|
6631
|
-
GOOGLE_OTHER: "GoogleOther",
|
|
6632
|
-
GOOGLE_OTHER_IMAGE: "GoogleOther-Image",
|
|
6633
|
-
GOOGLE_OTHER_VIDEO: "GoogleOther-Video",
|
|
6634
|
-
GOOGLE_SAFETY: "Google-Safety",
|
|
6635
|
-
GOOGLE_STOREBOT: "Storebot-Google",
|
|
6636
|
-
HIVE_IMAGESIFTBOT: "ImagesiftBot",
|
|
6637
|
-
HUAWEI_PANGUBOT: "PanguBot",
|
|
6638
|
-
HUAWEI_PETALBOT: "PetalBot",
|
|
6639
|
-
HUGGINGFACE_BOT: "HuggingFace-Bot",
|
|
6640
|
-
HUNTER_VELENPUBLICWEBCRAWLER: "VelenPublicWebCrawler",
|
|
6641
|
-
IA_ARCHIVER: "ia_archiver",
|
|
6642
|
-
IASK_BOT: "iAskBot",
|
|
6643
|
-
KAGI_BOT: "Kagibot",
|
|
6644
|
-
KANGAROO_BOT: "Kangaroo Bot",
|
|
6645
|
-
LINE_SPIDER: "Linespider",
|
|
6646
|
-
LINKEDIN_BOT: "LinkedInBot",
|
|
6647
|
-
MAGPIE_CRAWLER: "magpie-crawler",
|
|
6648
|
-
MARGINALIA: "marginalia",
|
|
6649
|
-
META_EXTERNALAGENT: "meta-externalagent",
|
|
6650
|
-
META_FACEBOOKBOT: "FacebookBot",
|
|
6651
|
-
META_FACEBOOKCATALOG: "facebookcatalog",
|
|
6652
|
-
META_FACEBOOKEXTERNALHIT: "facebookexternalhit",
|
|
6653
|
-
MAJESTIC_MJ12BOT: "MJ12bot",
|
|
6654
|
-
MICROSOFT_BINGBOT: "Bingbot",
|
|
6655
|
-
MICROSOFT_MSNBOT: "msnbot",
|
|
6656
|
-
MICROSOFT_ADIDXBOT: "adidxbot",
|
|
6657
|
-
MOJEEK_BOT: "MojeekBot",
|
|
6658
|
-
MOZ_DOTBOT: "DotBot",
|
|
6659
|
-
ONCRAWL: "OnCrawl",
|
|
6660
|
-
ONESPOT_SCRAPERBOT: "Onespot-ScraperBot",
|
|
6661
|
-
OPENAI_GPTBOT: "GPTBot",
|
|
6662
|
-
OPENAI_SEARCH_BOT: "OAI-SearchBot",
|
|
6663
|
-
PERPLEXITY_BOT: "PerplexityBot",
|
|
6664
|
-
QIHOO_360_SPIDER: "360Spider",
|
|
6665
|
-
QWANT_BOT: "Qwantbot",
|
|
6666
|
-
QWANT_BOT_NEWS: "Qwantbot-news",
|
|
6667
|
-
REPLICATE_BOT: "Replicate-Bot",
|
|
6668
|
-
RUNPOD_BOT: "RunPod-Bot",
|
|
6669
|
-
SB_INTUITIONS_BOT: "SBIntuitionsBot",
|
|
6670
|
-
SEEKPORT_BOT: "SeekportBot",
|
|
6671
|
-
SEMRUSH_BOT: "SemrushBot",
|
|
6672
|
-
SEMRUSH_BOT_BACKLINK: "SemrushBot-BA",
|
|
6673
|
-
SEMRUSH_BOT_CONTENTSHAKE: "SemrushBot-OCOB",
|
|
6674
|
-
SEMRUSH_BOT_SEO_CHECKER: "SemrushBot-SI",
|
|
6675
|
-
SEZNAM_BOT: "SeznamBot",
|
|
6676
|
-
SITEIMPROVE: "Siteimprove",
|
|
6677
|
-
SOGOU_PIC_SPIDER: "Sogou Pic Spider",
|
|
6678
|
-
SOGOU_WEB_SPIDER: "Sogou web spider",
|
|
6679
|
-
STARTPAGE: "Startpage",
|
|
6680
|
-
SURLY_BOT: "SurdotlyBot",
|
|
6681
|
-
TIMPI_BOT: "Timpibot",
|
|
6682
|
-
TOGETHER_BOT: "Together-Bot",
|
|
6683
|
-
TURNITIN_BOT: "TurnitinBot",
|
|
6684
|
-
TWIN_AGENT: "TwinAgent",
|
|
6685
|
-
VERCEL_V0BOT: "v0bot",
|
|
6686
|
-
WEBZIO: "webzio",
|
|
6687
|
-
WEBZIO_EXTENDED: "Webzio-Extended",
|
|
6688
|
-
WEBZIO_OMGILI: "omgili",
|
|
6689
|
-
WEBZIO_OMGILI_BOT: "omgilibot",
|
|
6690
|
-
XAI_BOT: "xAI-Bot",
|
|
6691
|
-
YAHOO_JAPAN: "Y!J-BRW",
|
|
6692
|
-
YAHOO_SLURP: "Yahoo! Slurp",
|
|
6693
|
-
YANDEX_ACCESSIBILITY_BOT: "YandexAccessibilityBot",
|
|
6694
|
-
YANDEX_ADDITIONAL_BOT: "YandexAdditionalBot",
|
|
6695
|
-
YANDEX_ADNET: "YandexAdNet",
|
|
6696
|
-
YANDEX_BLOGS: "YandexBlogs",
|
|
6697
|
-
YANDEX_BOT: "YandexBot",
|
|
6698
|
-
YANDEX_BOT_MIRRORDETECTOR: "YandexBot MirrorDetector",
|
|
6699
|
-
YANDEX_COMBOT: "YandexComBot",
|
|
6700
|
-
YANDEX_FAVICONS: "YandexFavicons",
|
|
6701
|
-
YANDEX_IMAGE_RESIZER: "YandexImageResizer",
|
|
6702
|
-
YANDEX_IMAGES: "YandexImages",
|
|
6703
|
-
YANDEX_MARKET: "YandexMarket",
|
|
6704
|
-
YANDEX_MEDIA: "YandexMedia",
|
|
6705
|
-
YANDEX_METRIKA: "YandexMetrika",
|
|
6706
|
-
YANDEX_MOBILE_BOT: "YandexMobileBot",
|
|
6707
|
-
YANDEX_MOBILE_SCREENSHOT_BOT: "YandexMobileScreenShotBot",
|
|
6708
|
-
YANDEX_NEWS: "YandexNews",
|
|
6709
|
-
YANDEX_ONTODB: "YandexOntoDB",
|
|
6710
|
-
YANDEX_ONTODB_API: "YandexOntoDBAPI",
|
|
6711
|
-
YANDEX_PARTNER: "YandexPartner",
|
|
6712
|
-
YANDEX_RCA: "YandexRCA",
|
|
6713
|
-
YANDEX_RENDERRESOURCES_BOT: "YandexRenderResourcesBot",
|
|
6714
|
-
YANDEX_SCREENSHOT_BOT: "YandexScreenshotBot",
|
|
6715
|
-
YANDEX_SPRAV_BOT: "YandexSpravBot",
|
|
6716
|
-
YANDEX_TRACKER: "YandexTracker",
|
|
6717
|
-
YANDEX_VERTICALS: "YandexVerticals",
|
|
6718
|
-
YANDEX_VERTIS: "YandexVertis",
|
|
6719
|
-
YANDEX_VIDEO: "YandexVideo",
|
|
6720
|
-
YANDEX_VIDEO_PARSER: "YandexVideoParser",
|
|
6721
|
-
YANDEX_WEBMASTER: "YandexWebmaster",
|
|
6722
|
-
YEP_BOT: "YepBot",
|
|
6723
|
-
YETI: "Yeti",
|
|
6724
|
-
YISOU_SPIDER: "YisouSpider",
|
|
6725
|
-
YOU_BOT: "YouBot",
|
|
6726
|
-
ZHIPU_CHATGLM_SPIDER: "ChatGLM-Spider",
|
|
6727
|
-
ZUM_BOT: "ZumBot"
|
|
6728
|
-
},
|
|
6729
|
-
Email: {
|
|
6730
|
-
AIRMAIL: "Airmail",
|
|
6731
|
-
APPLE_MAIL: "Mail",
|
|
6732
|
-
BLUEMAIL: "BlueMail",
|
|
6733
|
-
DAUM_MAIL: "DaumMail",
|
|
6734
|
-
EVOLUTION: "Evolution",
|
|
6735
|
-
EM_CLIENT: "eM Client",
|
|
6736
|
-
FOXMAIL: "Foxmail",
|
|
6737
|
-
KMAIL: "KMail",
|
|
6738
|
-
KMAIL2: "kmail2",
|
|
6739
|
-
KONTACT: "Kontact",
|
|
6740
|
-
MICROSOFT_OUTLOOK: "Microsoft Outlook",
|
|
6741
|
-
MICROSOFT_OUTLOOK_MAC: "MacOutlook",
|
|
6742
|
-
NAVER_MAILAPP: "NaverMailApp",
|
|
6743
|
-
POLYMAIL: "Polymail",
|
|
6744
|
-
PROTON_MAIL: "ProtonMail",
|
|
6745
|
-
SPARK_MAIL: "SparkDesktop",
|
|
6746
|
-
SPARROW: "Sparrow",
|
|
6747
|
-
THUNDERBIRD: "Thunderbird",
|
|
6748
|
-
YAHOO_MAIL: "Yahoo",
|
|
6749
|
-
ZIMBRA: "Zimbra",
|
|
6750
|
-
ZOHO_MAIL: "ZohoMail-Desktop"
|
|
6751
|
-
},
|
|
6752
|
-
Fetcher: {
|
|
6753
|
-
AHREFS_SITEAUDIT: "AhrefsSiteAudit",
|
|
6754
|
-
ANTHROPIC_CLAUDE_USER: "Claude-User",
|
|
6755
|
-
ASANA: "Asana",
|
|
6756
|
-
BETTER_UPTIME_BOT: "Better Uptime Bot",
|
|
6757
|
-
BITLY_BOT: "bitlybot",
|
|
6758
|
-
BLUESKY: "Bluesky",
|
|
6759
|
-
BUFFER_LINKPREVIEWBOT: "BufferLinkPreviewBot",
|
|
6760
|
-
COHERE_AI: "Cohere-AI",
|
|
6761
|
-
DISCORD_BOT: "Discordbot",
|
|
6762
|
-
DUCKDUCKGO_ASSISTBOT: "DuckAssistBot",
|
|
6763
|
-
GOOGLE_CHROME_LIGHTHOUSE: "Chrome-Lighthouse",
|
|
6764
|
-
GOOGLE_FEEDFETCHER: "FeedFetcher-Google",
|
|
6765
|
-
GOOGLE_GEMINI_DEEP_RESEARCH: "Gemini-Deep-Research",
|
|
6766
|
-
GOOGLE_IMAGEPROXY: "GoogleImageProxy",
|
|
6767
|
-
GOOGLE_PAGERENDERER: "Google-PageRenderer",
|
|
6768
|
-
GOOGLE_READ_ALOUD: "Google-Read-Aloud",
|
|
6769
|
-
GOOGLE_PRODUCER: "GoogleProducer",
|
|
6770
|
-
GOOGLE_SITE_VERIFICATION: "Google-Site-Verification",
|
|
6771
|
-
HUBSPOT_PAGE_FETCHER: "HubSpot Page Fetcher",
|
|
6772
|
-
IFRAMELY: "Iframely",
|
|
6773
|
-
KAKAOTALK_SCRAP: "kakaotalk-scrap",
|
|
6774
|
-
KEYBASE_BOT: "KeybaseBot",
|
|
6775
|
-
META_EXTERNALFETCHER: "meta-externalfetcher",
|
|
6776
|
-
META_WHATSAPP: "WhatsApp",
|
|
6777
|
-
MICROSOFT_BINGPREVIEW: "BingPreview",
|
|
6778
|
-
MICROSOFT_PREVIEW: "MicrosoftPreview",
|
|
6779
|
-
MISTRALAI_USER: "MistralAI-User",
|
|
6780
|
-
NAVER_BLUENO: "Blueno",
|
|
6781
|
-
ONCRAWL_ROGERBOT: "rogerbot",
|
|
6782
|
-
OPENAI_CHATGPT_USER: "ChatGPT-User",
|
|
6783
|
-
PERPLEXITY_USER: "Perplexity-User",
|
|
6784
|
-
PINTEREST_BOT: "Pinterestbot",
|
|
6785
|
-
SEMRUSH_SITEAUDITBOT: "SiteAuditBot",
|
|
6786
|
-
SLACK_BOT: "Slackbot",
|
|
6787
|
-
SLACK_BOT_LINKEXPANDING: "Slackbot-LinkExpanding",
|
|
6788
|
-
SLACK_IMGPROXY: "Slack-ImgProxy",
|
|
6789
|
-
SNAP_URL_PREVIEW: "Snap URL Preview",
|
|
6790
|
-
SKYPE_URIPREVIEW: "SkypeUriPreview",
|
|
6791
|
-
TELEGRAM_BOT: "TelegramBot",
|
|
6792
|
-
UPTIMEROBOT: "UptimeRobot",
|
|
6793
|
-
VERCEL_FAVICON_BOT: "vercel-favicon-bot",
|
|
6794
|
-
VERCEL_SCREENSHOT_BOT: "vercel-screenshot-bot",
|
|
6795
|
-
VERCEL_BOT: "Vercelbot",
|
|
6796
|
-
VERCEL_FLAGS: "vercelflags",
|
|
6797
|
-
VERCEL_TRACING: "verceltracing",
|
|
6798
|
-
X_TWITTERBOT: "Twitterbot",
|
|
6799
|
-
YANDEX_CALENDAR: "YandexCalendar",
|
|
6800
|
-
YANDEX_DIRECT: "YandexDirect",
|
|
6801
|
-
YANDEX_DIRECTDYN: "YandexDirectDyn",
|
|
6802
|
-
YANDEX_DIRECTFETCHER: "YaDirectFetcher",
|
|
6803
|
-
YANDEX_FORDOMAIN: "YandexForDomain",
|
|
6804
|
-
YANDEX_PAGECHECKER: "YandexPagechecker",
|
|
6805
|
-
YANDEX_SEARCHSHOP: "YandexSearchShop",
|
|
6806
|
-
YANDEX_SITELINKS: "YandexSitelinks",
|
|
6807
|
-
YANDEX_USERPROXY: "YandexUserproxy",
|
|
6808
|
-
ZOOMINFO_BOT: "Zoombot"
|
|
6809
|
-
},
|
|
6810
|
-
InApp: {
|
|
6811
|
-
DISCORD: "Discord",
|
|
6812
|
-
EVERNOTE: "Evernote",
|
|
6813
|
-
FIGMA: "Figma",
|
|
6814
|
-
FLIPBOARD: "Flipboard",
|
|
6815
|
-
MATTERMOST: "Mattermost",
|
|
6816
|
-
TEAMS: "Teams",
|
|
6817
|
-
NOTION: "Notion",
|
|
6818
|
-
POSTMAN: "Postman",
|
|
6819
|
-
RAMBOX: "Rambox",
|
|
6820
|
-
ROCKETCHAT: "Rocket.Chat",
|
|
6821
|
-
SLACK: "Slack",
|
|
6822
|
-
TIKTOK_LITE: "TikTok Lite",
|
|
6823
|
-
VSCODE: "VS Code",
|
|
6824
|
-
YAHOO_JAPAN: "Yahoo! Japan"
|
|
6825
|
-
},
|
|
6826
|
-
Library: {
|
|
6827
|
-
ADOBE_AIR: "AdobeAIR",
|
|
6828
|
-
AIOHTTP: "aiohttp",
|
|
6829
|
-
APACHE_HTTPCLIENT: "Apache-HttpClient",
|
|
6830
|
-
AXIOS: "axios",
|
|
6831
|
-
GO_HTTP_CLIENT: "go-http-client",
|
|
6832
|
-
GOT: "got",
|
|
6833
|
-
GUZZLEHTTP: "GuzzleHttp",
|
|
6834
|
-
JAVA: "Java",
|
|
6835
|
-
JAVA_HTTPCLIENT: "Java-http-client",
|
|
6836
|
-
JSDOM: "jsdom",
|
|
6837
|
-
LIBWWW_PERL: "libwww-perl",
|
|
6838
|
-
LUA_RESTY_HTTP: "lua-resty-http",
|
|
6839
|
-
NEEDLE: "Needle",
|
|
6840
|
-
NUTCH: "Nutch",
|
|
6841
|
-
OKHTTP: "OkHttp",
|
|
6842
|
-
NODE_FETCH: "node-fetch",
|
|
6843
|
-
NODE_SUPERAGENT: "node-superagent",
|
|
6844
|
-
PHP_SOAP: "PHP-SOAP",
|
|
6845
|
-
POSTMAN_RUNTIME: "PostmanRuntime",
|
|
6846
|
-
PYTHON_HTTPX: "python-httpx",
|
|
6847
|
-
PYTHON_URLLIB: "python-urllib",
|
|
6848
|
-
PYTHON_URLLIB3: "python-urllib3",
|
|
6849
|
-
PYTHON_REQUESTS: "python-requests",
|
|
6850
|
-
SCRAPY: "Scrapy"
|
|
6851
|
-
}
|
|
6852
|
-
},
|
|
6853
|
-
DeviceVendor: {
|
|
6854
|
-
Vehicle: {
|
|
6855
|
-
BMW: "BMW",
|
|
6856
|
-
BYD: "BYD",
|
|
6857
|
-
JEEP: "Jeep",
|
|
6858
|
-
RIVIAN: "Rivian",
|
|
6859
|
-
TESLA: "Tesla",
|
|
6860
|
-
VOLVO: "Volvo"
|
|
6861
|
-
}
|
|
6862
|
-
}
|
|
6863
|
-
});
|
|
6864
|
-
|
|
6865
|
-
// ../../node_modules/.pnpm/@ua-parser-js+pro-enterprise@2.0.6/node_modules/@ua-parser-js/pro-enterprise/src/extensions/ua-parser-extensions.mjs
|
|
6866
|
-
var MODEL2 = "model";
|
|
6867
|
-
var NAME2 = "name";
|
|
6868
|
-
var TYPE2 = "type";
|
|
6869
|
-
var VENDOR2 = "vendor";
|
|
6870
|
-
var VERSION4 = "version";
|
|
6871
|
-
var MOBILE2 = "mobile";
|
|
6872
|
-
var TABLET2 = "tablet";
|
|
6873
|
-
var CRAWLER = "crawler";
|
|
6874
|
-
var CLI = "cli";
|
|
6875
|
-
var EMAIL = "email";
|
|
6876
|
-
var FETCHER = "fetcher";
|
|
6877
|
-
var INAPP2 = "inapp";
|
|
6878
|
-
var MEDIAPLAYER = "mediaplayer";
|
|
6879
|
-
var LIBRARY = "library";
|
|
6880
|
-
var CLIs = Object.freeze({
|
|
6881
|
-
browser: [
|
|
6882
|
-
// wget / curl / Lynx / ELinks / HTTPie
|
|
6883
|
-
[/(wget|curl|lynx|elinks|httpie)[\/ ]\(?([\w\.-]+)/i],
|
|
6884
|
-
[NAME2, VERSION4, [TYPE2, CLI]]
|
|
6885
|
-
]
|
|
6886
|
-
});
|
|
6887
|
-
var Crawlers = Object.freeze({
|
|
6888
|
-
browser: [
|
|
6889
|
-
[
|
|
6890
|
-
// AhrefsBot - https://ahrefs.com/robot
|
|
6891
|
-
// Amazonbot - https://developer.amazon.com/amazonbot
|
|
6892
|
-
// Bingbot / AdIdxBot - https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0
|
|
6893
|
-
// Bravebot - https://search.brave.com/help/brave-search-crawler
|
|
6894
|
-
// CCBot - https://commoncrawl.org/faq
|
|
6895
|
-
// contxbot - https://affiliate-program.amazon.com/help/node/topic/GT98G5PPRERNVZ2C
|
|
6896
|
-
// Coveobot - https://connect.coveo.com/s/article/19648
|
|
6897
|
-
// CriteoBot - https://www.criteo.com/criteo-crawler/
|
|
6898
|
-
// Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
|
|
6899
|
-
// DuckDuckBot - http://duckduckgo.com/duckduckbot.html
|
|
6900
|
-
// FacebookBot - https://developers.facebook.com/docs/sharing/bot/
|
|
6901
|
-
// GPTBot - https://platform.openai.com/docs/gptbot
|
|
6902
|
-
// iAskBot - https://iask.ai
|
|
6903
|
-
// Kagibot - https://kagi.com/bot
|
|
6904
|
-
// Kangaroo Bot - https://kangaroollm.com.au/kangaroo-bot/
|
|
6905
|
-
// LinkedInBot - http://www.linkedin.com
|
|
6906
|
-
// MJ12bot - https://mj12bot.com/
|
|
6907
|
-
// MojeekBot - https://www.mojeek.com/bot.html
|
|
6908
|
-
// Onespot - https://www.onespot.com/identifying-traffic.html
|
|
6909
|
-
// OpenAI's SearchGPT - https://platform.openai.com/docs/bots
|
|
6910
|
-
// PerplexityBot - https://perplexity.ai/perplexitybot
|
|
6911
|
-
// SBIntuitionsBot - https://www.sbintuitions.co.jp/bot/
|
|
6912
|
-
// SeznamBot - http://napoveda.seznam.cz/seznambot-intro
|
|
6913
|
-
// SurdotlyBot - http://sur.ly/bot.html
|
|
6914
|
-
// Swiftbot - https://swiftype.com/swiftbot
|
|
6915
|
-
// YepBot - https://yep.com/yepbot/
|
|
6916
|
-
/((?: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,
|
|
6917
|
-
// Algolia Crawler
|
|
6918
|
-
/(algolia crawler(?: renderscript)?)\/?([\w\.]*)/i,
|
|
6919
|
-
// Applebot - http://apple.com/go/applebot
|
|
6920
|
-
/(applebot(?:-extended)?)\/?([\w\.]*)/i,
|
|
6921
|
-
// Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
|
|
6922
|
-
/(baiduspider[-imagevdonwsfcpr]{0,7})\/?([\w\.]*)/i,
|
|
6923
|
-
// ClaudeBot (Anthropic)
|
|
6924
|
-
/(claude(?:bot|-searchbot|-web)|anthropic-ai)\/?([\w\.]*)/i,
|
|
6925
|
-
// Coc Coc Bot - https://help.coccoc.com/en/search-engine
|
|
6926
|
-
/(coccocbot-(?:image|web))\/([\w\.]+)/i,
|
|
6927
|
-
// Daum
|
|
6928
|
-
/(daum(?:oa)?(?:-image)?)[ \/]([\w\.]+)/i,
|
|
6929
|
-
// Facebook / Meta
|
|
6930
|
-
// https://developers.facebook.com/docs/sharing/webmasters/web-crawlers
|
|
6931
|
-
/(facebook(?:externalhit|catalog)|meta-externalagent)\/([\w\.]+)/i,
|
|
6932
|
-
// Googlebot - http://www.google.com/bot.html
|
|
6933
|
-
/(google(?:bot|other|-inspectiontool)(?:-image|-video|-news)?|storebot-google)\/?([\w\.]*)/i,
|
|
6934
|
-
// Internet Archive (archive.org)
|
|
6935
|
-
/(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
|
|
6936
|
-
// OnCrawl
|
|
6937
|
-
/(oncrawl) mobile\/([\w\.]+)/i,
|
|
6938
|
-
// Qwantbot - https://help.qwant.com/bot
|
|
6939
|
-
/(qwantbot(?:-news)?)[-\w]*\/?([\w\.]*)/i,
|
|
6940
|
-
// SemrushBot - http://www.semrush.com/bot.html
|
|
6941
|
-
/((?:semrush|splitsignal)bot[-abcfimostw]*)\/?([\w\.-]*)/i,
|
|
6942
|
-
// Sogou Spider
|
|
6943
|
-
/(sogou (?:pic|head|web|orion|news) spider)\/([\w\.]+)/i,
|
|
6944
|
-
// Yahoo! Japan - https://support.yahoo-net.jp/PccSearch/s/article/H000007955
|
|
6945
|
-
/(y!?j-(?:asr|br[uw]|dscv|mmp|vsidx|wsc))\/([\w\.]+)/i,
|
|
6946
|
-
// Yandex Bots - https://yandex.com/bots
|
|
6947
|
-
/(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,
|
|
6948
|
-
// Yeti (Naver)
|
|
6949
|
-
/(yeti)\/([\w\.]+)/i,
|
|
6950
|
-
// 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
|
|
6951
|
-
// Cotoyogi - https://ds.rois.ac.jp/en_center8/en_crawler/
|
|
6952
|
-
// Freespoke - https://docs.freespoke.com/search/bot/
|
|
6953
|
-
/((?: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
|
|
6954
|
-
],
|
|
6955
|
-
[NAME2, VERSION4, [TYPE2, CRAWLER]],
|
|
6956
|
-
[
|
|
6957
|
-
// YandexBot MirrorDetector
|
|
6958
|
-
/(yandexbot\/([\w\.]+); mirrordetector)/i
|
|
6959
|
-
],
|
|
6960
|
-
[[NAME2, /\/.+;/ig, ""], VERSION4, [TYPE2, CRAWLER]],
|
|
6961
|
-
[
|
|
6962
|
-
// Google Bots
|
|
6963
|
-
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
|
|
6964
|
-
// AI2Bot - https://allenai.org/crawler
|
|
6965
|
-
// DataForSeoBot - https://dataforseo.com/dataforseo-bot
|
|
6966
|
-
// Huawei AspiegelBot / PetalBot https://aspiegel.com/petalbot
|
|
6967
|
-
// ImagesiftBot - https://imagesift.com/about
|
|
6968
|
-
// Siteimprove - https://help.siteimprove.com/support/solutions/articles/80000448553
|
|
6969
|
-
// TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
|
|
6970
|
-
// v0bot - https://vercel.com/docs/bot-management
|
|
6971
|
-
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
|
|
6972
|
-
// Botify / Bytespider / DeepSeekBot / Qihoo 360Spider / SeekportBot / TikTokSpider
|
|
6973
|
-
/\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
|
|
6974
|
-
],
|
|
6975
|
-
[NAME2, [TYPE2, CRAWLER]]
|
|
6976
|
-
]
|
|
6977
|
-
});
|
|
6978
|
-
var ExtraDevices = Object.freeze({
|
|
6979
|
-
device: [
|
|
6980
|
-
[
|
|
6981
|
-
/(nook)[\w ]+build\/(\w+)/i,
|
|
6982
|
-
// Nook
|
|
6983
|
-
/(dell) (strea[kpr\d ]*[\dko])/i,
|
|
6984
|
-
// Dell Streak
|
|
6985
|
-
/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
|
|
6986
|
-
// Le Pan Tablets
|
|
6987
|
-
/(trinity)[- ]*(t\d{3}) bui/i,
|
|
6988
|
-
// Trinity Tablets
|
|
6989
|
-
/(gigaset)[- ]+(q\w{1,9}) bui/i,
|
|
6990
|
-
// Gigaset Tablets
|
|
6991
|
-
/(vodafone) ([\w ]+)(?:\)| bui)/i
|
|
6992
|
-
// Vodafone
|
|
6993
|
-
],
|
|
6994
|
-
[VENDOR2, MODEL2, [TYPE2, TABLET2]],
|
|
6995
|
-
[
|
|
6996
|
-
/(u304aa)/i
|
|
6997
|
-
// AT&T
|
|
6998
|
-
],
|
|
6999
|
-
[MODEL2, [VENDOR2, "AT&T"], [TYPE2, MOBILE2]],
|
|
7000
|
-
[
|
|
7001
|
-
/\bsie-(\w*)/i
|
|
7002
|
-
// Siemens
|
|
7003
|
-
],
|
|
7004
|
-
[MODEL2, [VENDOR2, "Siemens"], [TYPE2, MOBILE2]],
|
|
7005
|
-
[
|
|
7006
|
-
/\b(rct\w+) b/i
|
|
7007
|
-
// RCA Tablets
|
|
7008
|
-
],
|
|
7009
|
-
[MODEL2, [VENDOR2, "RCA"], [TYPE2, TABLET2]],
|
|
7010
|
-
[
|
|
7011
|
-
/\b(venue[\d ]{2,7}) b/i
|
|
7012
|
-
// Dell Venue Tablets
|
|
7013
|
-
],
|
|
7014
|
-
[MODEL2, [VENDOR2, "Dell"], [TYPE2, TABLET2]],
|
|
7015
|
-
[
|
|
7016
|
-
/\b(q(?:mv|ta)\w+) b/i
|
|
7017
|
-
// Verizon Tablet
|
|
7018
|
-
],
|
|
7019
|
-
[MODEL2, [VENDOR2, "Verizon"], [TYPE2, TABLET2]],
|
|
7020
|
-
[
|
|
7021
|
-
/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i
|
|
7022
|
-
// Barnes & Noble Tablet
|
|
7023
|
-
],
|
|
7024
|
-
[MODEL2, [VENDOR2, "Barnes & Noble"], [TYPE2, TABLET2]],
|
|
7025
|
-
[
|
|
7026
|
-
/\b(tm\d{3}\w+) b/i
|
|
7027
|
-
],
|
|
7028
|
-
[MODEL2, [VENDOR2, "NuVision"], [TYPE2, TABLET2]],
|
|
7029
|
-
[
|
|
7030
|
-
/\b(k88) b/i
|
|
7031
|
-
// ZTE K Series Tablet
|
|
7032
|
-
],
|
|
7033
|
-
[MODEL2, [VENDOR2, "ZTE"], [TYPE2, TABLET2]],
|
|
7034
|
-
[
|
|
7035
|
-
/\b(nx\d{3}j) b/i
|
|
7036
|
-
// ZTE Nubia
|
|
7037
|
-
],
|
|
7038
|
-
[MODEL2, [VENDOR2, "ZTE"], [TYPE2, MOBILE2]],
|
|
7039
|
-
[
|
|
7040
|
-
/\b(gen\d{3}) b.+49h/i
|
|
7041
|
-
// Swiss GEN Mobile
|
|
7042
|
-
],
|
|
7043
|
-
[MODEL2, [VENDOR2, "Swiss"], [TYPE2, MOBILE2]],
|
|
7044
|
-
[
|
|
7045
|
-
/\b(zur\d{3}) b/i
|
|
7046
|
-
// Swiss ZUR Tablet
|
|
7047
|
-
],
|
|
7048
|
-
[MODEL2, [VENDOR2, "Swiss"], [TYPE2, TABLET2]],
|
|
7049
|
-
[
|
|
7050
|
-
/^((zeki)?tb.*\b) b/i
|
|
7051
|
-
// Zeki Tablets
|
|
7052
|
-
],
|
|
7053
|
-
[MODEL2, [VENDOR2, "Zeki"], [TYPE2, TABLET2]],
|
|
7054
|
-
[
|
|
7055
|
-
/\b([yr]\d{2}) b/i,
|
|
7056
|
-
/\b(?:dragon[- ]+touch |dt)(\w{5}) b/i
|
|
7057
|
-
// Dragon Touch Tablet
|
|
7058
|
-
],
|
|
7059
|
-
[MODEL2, [VENDOR2, "Dragon Touch"], [TYPE2, TABLET2]],
|
|
7060
|
-
[
|
|
7061
|
-
/\b(ns-?\w{0,9}) b/i
|
|
7062
|
-
// Insignia Tablets
|
|
7063
|
-
],
|
|
7064
|
-
[MODEL2, [VENDOR2, "Insignia"], [TYPE2, TABLET2]],
|
|
7065
|
-
[
|
|
7066
|
-
/\b((nxa|next)-?\w{0,9}) b/i
|
|
7067
|
-
// NextBook Tablets
|
|
7068
|
-
],
|
|
7069
|
-
[MODEL2, [VENDOR2, "NextBook"], [TYPE2, TABLET2]],
|
|
7070
|
-
[
|
|
7071
|
-
/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i
|
|
7072
|
-
// Voice Xtreme Phones
|
|
7073
|
-
],
|
|
7074
|
-
[[VENDOR2, "Voice"], MODEL2, [TYPE2, MOBILE2]],
|
|
7075
|
-
[
|
|
7076
|
-
/\b(lvtel\-)?(v1[12]) b/i
|
|
7077
|
-
// LvTel Phones
|
|
7078
|
-
],
|
|
7079
|
-
[[VENDOR2, "LvTel"], MODEL2, [TYPE2, MOBILE2]],
|
|
7080
|
-
[
|
|
7081
|
-
/\b(ph-1) /i
|
|
7082
|
-
// Essential PH-1
|
|
7083
|
-
],
|
|
7084
|
-
[MODEL2, [VENDOR2, "Essential"], [TYPE2, MOBILE2]],
|
|
7085
|
-
[
|
|
7086
|
-
/\b(v(100md|700na|7011|917g).*\b) b/i
|
|
7087
|
-
// Envizen Tablets
|
|
7088
|
-
],
|
|
7089
|
-
[MODEL2, [VENDOR2, "Envizen"], [TYPE2, TABLET2]],
|
|
7090
|
-
[
|
|
7091
|
-
/\b(trio[-\w\. ]+) b/i
|
|
7092
|
-
// MachSpeed Tablets
|
|
7093
|
-
],
|
|
7094
|
-
[MODEL2, [VENDOR2, "MachSpeed"], [TYPE2, TABLET2]],
|
|
7095
|
-
[
|
|
7096
|
-
/\btu_(1491) b/i
|
|
7097
|
-
// Rotor Tablets
|
|
7098
|
-
],
|
|
7099
|
-
[MODEL2, [VENDOR2, "Rotor"], [TYPE2, TABLET2]]
|
|
7100
|
-
]
|
|
7101
|
-
});
|
|
7102
|
-
var Emails = Object.freeze({
|
|
7103
|
-
browser: [
|
|
7104
|
-
[
|
|
7105
|
-
// Evolution / Kontact/KMail[2] / [Microsoft/Mac] Outlook / Thunderbird
|
|
7106
|
-
// Airmail / BlueMail / DaumMail / eMClient / Foxmail / NaverMailApp / Polymail
|
|
7107
|
-
// ProtonMail / SparkDesktop / Sparrow / Yahoo! Mail / Zimbra / ZohoMail-Desktop
|
|
7108
|
-
/((?: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,
|
|
7109
|
-
// Apple's Mail
|
|
7110
|
-
/(mail)\/([\w\.]+) cf/i
|
|
7111
|
-
],
|
|
7112
|
-
[NAME2, VERSION4, [TYPE2, EMAIL]],
|
|
7113
|
-
[
|
|
7114
|
-
// Zimbra
|
|
7115
|
-
/zdesktop\/([\w\.]+)/i
|
|
7116
|
-
],
|
|
7117
|
-
[VERSION4, [NAME2, "Zimbra"], [TYPE2, EMAIL]]
|
|
7118
|
-
]
|
|
7119
|
-
});
|
|
7120
|
-
var Fetchers = Object.freeze({
|
|
7121
|
-
browser: [
|
|
7122
|
-
[
|
|
7123
|
-
// Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
|
|
7124
|
-
// AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
|
|
7125
|
-
// Buffer Link Preview Bot - https://scraper.buffer.com/about/bots/link-preview-bot
|
|
7126
|
-
// ChatGPT-User - https://platform.openai.com/docs/plugins/bot
|
|
7127
|
-
// DuckAssistBot - https://duckduckgo.com/duckassistbot/
|
|
7128
|
-
// Google Site Verifier / Meta / Yahoo! Japan
|
|
7129
|
-
// Iframely - https://iframely.com/docs/about
|
|
7130
|
-
// Perplexity-User - https://docs.perplexity.ai/guides/bots
|
|
7131
|
-
// MistralAI-User - https://docs.mistral.ai/robots/
|
|
7132
|
-
// Yandex Bots - https://yandex.com/bots
|
|
7133
|
-
/(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,
|
|
7134
|
-
// Bluesky
|
|
7135
|
-
/(bluesky) cardyb\/([\w\.]+)/i,
|
|
7136
|
-
// Skype
|
|
7137
|
-
/(skypeuripreview) preview\/([\w\.]+)/i,
|
|
7138
|
-
// Slackbot - https://api.slack.com/robots
|
|
7139
|
-
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
|
|
7140
|
-
// WhatsApp
|
|
7141
|
-
/(whatsapp)\/([\w\.]+)/i
|
|
7142
|
-
],
|
|
7143
|
-
[NAME2, VERSION4, [TYPE2, FETCHER]],
|
|
7144
|
-
[
|
|
7145
|
-
// Google Bots / Chrome-Lighthouse / Gemini-Deep-Research / KeybaseBot / Snapchat / Vercelbot / Yandex Bots
|
|
7146
|
-
/((?: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
|
|
7147
|
-
],
|
|
7148
|
-
[NAME2, [TYPE2, FETCHER]]
|
|
7149
|
-
],
|
|
7150
|
-
os: [
|
|
7151
|
-
[/whatsapp\/[\d\.]+ (a|i)/i],
|
|
7152
|
-
[[NAME2, (os) => os == "A" ? "Android" : "iOS"]]
|
|
7153
|
-
]
|
|
7154
|
-
});
|
|
7155
|
-
var InApps = Object.freeze({
|
|
7156
|
-
browser: [
|
|
7157
|
-
[
|
|
7158
|
-
// Discord/Figma/Flipboard/Mattermost/Notion/Postman/Rambox/Rocket.Chat/Slack/Teams
|
|
7159
|
-
/\b(discord|figma|mattermost|notion|postman|rambox|rocket.chat|slack|teams)\/([\w\.]+).+(electron\/|; ios)/i,
|
|
7160
|
-
/(flipboard)\/([\w\.]+)/i
|
|
7161
|
-
],
|
|
7162
|
-
[NAME2, VERSION4, [TYPE2, INAPP2]],
|
|
7163
|
-
[
|
|
7164
|
-
// Evernote/Teams on mobile
|
|
7165
|
-
/(evernote) win/i,
|
|
7166
|
-
/(teams)mobile-(ios|and)/i
|
|
7167
|
-
],
|
|
7168
|
-
[NAME2, [TYPE2, INAPP2]],
|
|
7169
|
-
[
|
|
7170
|
-
// Slack
|
|
7171
|
-
/chatlyio\/([\d\.]+)/i
|
|
7172
|
-
],
|
|
7173
|
-
[VERSION4, [NAME2, "Slack"], [TYPE2, INAPP2]],
|
|
7174
|
-
[
|
|
7175
|
-
// TikTok Lite
|
|
7176
|
-
/ultralite app_version\/([\w\.]+)/i
|
|
7177
|
-
],
|
|
7178
|
-
[VERSION4, [NAME2, "TikTok Lite"], [TYPE2, INAPP2]],
|
|
7179
|
-
[
|
|
7180
|
-
// VS Code
|
|
7181
|
-
/\) code\/([\d\.]+).+electron\//i
|
|
7182
|
-
],
|
|
7183
|
-
[VERSION4, [NAME2, "VS Code"], [TYPE2, INAPP2]],
|
|
7184
|
-
[
|
|
7185
|
-
// Yahoo! Japan
|
|
7186
|
-
/jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i
|
|
7187
|
-
],
|
|
7188
|
-
[VERSION4, [NAME2, "Yahoo! Japan"], [TYPE2, INAPP2]]
|
|
7189
|
-
]
|
|
7190
|
-
});
|
|
7191
|
-
var MediaPlayers = Object.freeze({
|
|
7192
|
-
browser: [
|
|
7193
|
-
[
|
|
7194
|
-
/(apple(?:coremedia|tv))\/([\w\._]+)/i,
|
|
7195
|
-
// Generic Apple CoreMedia
|
|
7196
|
-
/(coremedia) v([\w\._]+)/i,
|
|
7197
|
-
// Ares/Nexplayer/OSSProxy
|
|
7198
|
-
/(ares|clementine|music player daemon|nexplayer|ossproxy) ([\w\.-]+)/i,
|
|
7199
|
-
// Aqualung/Lyssna/BSPlayer/Clementine/MPD
|
|
7200
|
-
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/GnomeMplayer/MoC
|
|
7201
|
-
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
|
7202
|
-
// Nero Home/Nero Scout/Nokia
|
|
7203
|
-
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
|
7204
|
-
// SoundTap/Totem/Stagefright/Streamium
|
|
7205
|
-
// XBMC/gvfs/Xine/XMMS/irapp
|
|
7206
|
-
/^(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,
|
|
7207
|
-
/(lg player|nexplayer) ([\d\.]+)/i,
|
|
7208
|
-
/player\/(nexplayer|lg player) ([\w\.-]+)/i,
|
|
7209
|
-
// NexPlayer/LG Player
|
|
7210
|
-
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i,
|
|
7211
|
-
// Gstreamer
|
|
7212
|
-
/(htc streaming player) [\w_]+ \/ ([\d\.]+)/i,
|
|
7213
|
-
// HTC Streaming Player
|
|
7214
|
-
/(lavf)([\d\.]+)/i,
|
|
7215
|
-
// Lavf (FFMPEG)
|
|
7216
|
-
// MPlayer SVN
|
|
7217
|
-
/(mplayer)(?: |\/)(?:(?:sherpya-){0,1}svn)(?:-| )(r\d+(?:-\d+[\w\.-]+))/i,
|
|
7218
|
-
/ (songbird)\/([\w\.-]+)/i,
|
|
7219
|
-
// Songbird/Philips-Songbird
|
|
7220
|
-
/(winamp)(?:3 version|mpeg| ) ([\w\.-]+)/i,
|
|
7221
|
-
// Winamp
|
|
7222
|
-
/(vlc)(?:\/| media player - version )([\w\.-]+)/i,
|
|
7223
|
-
// VLC Videolan
|
|
7224
|
-
/^(foobar2000|itunes|smp)\/([\d\.]+)/i,
|
|
7225
|
-
// Foobar2000/iTunes/SMP
|
|
7226
|
-
/com\.(riseupradioalarm)\/([\d\.]*)/i,
|
|
7227
|
-
// RiseUP Radio Alarm
|
|
7228
|
-
/(mplayer)(?:\s|\/| unknown-)([\w\.\-]+)/i,
|
|
7229
|
-
// MPlayer
|
|
7230
|
-
// Windows Media Server
|
|
7231
|
-
/(windows)\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ home media server/i
|
|
7232
|
-
],
|
|
7233
|
-
[NAME2, VERSION4, [TYPE2, MEDIAPLAYER]],
|
|
7234
|
-
[
|
|
7235
|
-
/(flrp)\/([\w\.-]+)/i
|
|
7236
|
-
// Flip Player
|
|
7237
|
-
],
|
|
7238
|
-
[[NAME2, "Flip Player"], VERSION4, [TYPE2, MEDIAPLAYER]],
|
|
7239
|
-
[
|
|
7240
|
-
// FStream/NativeHost/QuerySeekSpider
|
|
7241
|
-
// MPlayer (no other info)/Media Player Classic/Nero ShowTime
|
|
7242
|
-
// OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
|
7243
|
-
// inlight radio / YourMuze
|
|
7244
|
-
/(fstream|media player classic|inlight radio|mplayer|nativehost|nero showtime|ocms-bot|queryseekspider|tapinradio|tunein radio|winamp|yourmuze)/i
|
|
7245
|
-
],
|
|
7246
|
-
[NAME2, [TYPE2, MEDIAPLAYER]],
|
|
7247
|
-
[
|
|
7248
|
-
/(htc_one_s|windows-media-player|wmplayer)\/([\w\.-]+)/i
|
|
7249
|
-
// HTC One S / Windows Media Player
|
|
7250
|
-
],
|
|
7251
|
-
[[NAME2, /[_-]/g, " "], VERSION4, [TYPE2, MEDIAPLAYER]],
|
|
7252
|
-
[
|
|
7253
|
-
/(rad.io|radio.(?:de|at|fr)) ([\d\.]+)/i
|
|
7254
|
-
// Rad.io
|
|
7255
|
-
],
|
|
7256
|
-
[[NAME2, "rad.io"], VERSION4, [TYPE2, MEDIAPLAYER]]
|
|
7257
|
-
]
|
|
7258
|
-
});
|
|
7259
|
-
var Libraries = Object.freeze({
|
|
7260
|
-
browser: [
|
|
7261
|
-
// 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
|
|
7262
|
-
[
|
|
7263
|
-
/^(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,
|
|
7264
|
-
/(adobeair|aiohttp|jsdom)\/([\w\.]+)/i,
|
|
7265
|
-
/(nutch)-([\w\.-]+)(\(|$)/i,
|
|
7266
|
-
/\((java)\/([\w\.]+)/i
|
|
7267
|
-
],
|
|
7268
|
-
[NAME2, VERSION4, [TYPE2, LIBRARY]]
|
|
7269
|
-
]
|
|
7270
|
-
});
|
|
7271
|
-
var Vehicles = Object.freeze({
|
|
7272
|
-
device: [
|
|
7273
|
-
[/aftlbt962e2/i],
|
|
7274
|
-
// BMW
|
|
7275
|
-
[[VENDOR2, "BMW"]],
|
|
7276
|
-
[/dilink.+(byd) auto/i],
|
|
7277
|
-
// BYD
|
|
7278
|
-
[VENDOR2],
|
|
7279
|
-
[/aftlft962x3/i],
|
|
7280
|
-
// Jeep
|
|
7281
|
-
[[VENDOR2, "Jeep"], [MODEL2, "Wagooner"]],
|
|
7282
|
-
[/(rivian) (r1t)/i],
|
|
7283
|
-
// Rivian
|
|
7284
|
-
[VENDOR2, MODEL2],
|
|
7285
|
-
[/vcc.+netfront/i],
|
|
7286
|
-
// Volvo
|
|
7287
|
-
[[VENDOR2, "Volvo"]]
|
|
7288
|
-
]
|
|
7289
|
-
});
|
|
7290
|
-
var Bots = Object.freeze({
|
|
7291
|
-
browser: [
|
|
7292
|
-
...CLIs.browser,
|
|
7293
|
-
...Fetchers.browser,
|
|
7294
|
-
...Crawlers.browser,
|
|
7295
|
-
...Libraries.browser
|
|
7296
|
-
],
|
|
7297
|
-
os: [
|
|
7298
|
-
...Fetchers.os
|
|
7299
|
-
]
|
|
7300
|
-
});
|
|
7301
|
-
|
|
7302
|
-
// ../../node_modules/.pnpm/detect-europe-js@0.1.2/node_modules/detect-europe-js/dist/esm/index.js
|
|
7303
|
-
var TIMEZONE = {
|
|
7304
|
-
ANDORRA: {
|
|
7305
|
-
ANDORRA: "Europe/Andorra"
|
|
7306
|
-
},
|
|
7307
|
-
AUSTRIA: {
|
|
7308
|
-
VIENNA: "Europe/Vienna"
|
|
7309
|
-
},
|
|
7310
|
-
BELGIUM: {
|
|
7311
|
-
BRUSSELS: "Europe/Brussels"
|
|
7312
|
-
},
|
|
7313
|
-
BULGARIA: {
|
|
7314
|
-
SOFIA: "Europe/Sofia"
|
|
7315
|
-
},
|
|
7316
|
-
CROATIA: {
|
|
7317
|
-
ZAGREB: "Europe/Zagreb"
|
|
7318
|
-
},
|
|
7319
|
-
CYPRUS: {
|
|
7320
|
-
NICOSIA_EUROPE: "Europe/Nicosia",
|
|
7321
|
-
NICOSIA_ASIA: "Asia/Nicosia",
|
|
7322
|
-
FAMAGUSTA: "Asia/Famagusta"
|
|
7323
|
-
},
|
|
7324
|
-
CZECHIA: {
|
|
7325
|
-
PRAGUE: "Europe/Prague"
|
|
7326
|
-
},
|
|
7327
|
-
DENMARK: {
|
|
7328
|
-
COPENHAGEN: "Europe/Copenhagen",
|
|
7329
|
-
FAROE: "Atlantic/Faroe"
|
|
7330
|
-
},
|
|
7331
|
-
ESTONIA: {
|
|
7332
|
-
TALLINN: "Europe/Tallinn"
|
|
7333
|
-
},
|
|
7334
|
-
FINLAND: {
|
|
7335
|
-
HELSINKI: "Europe/Helsinki",
|
|
7336
|
-
MARIEHAMN: "Europe/Mariehamn"
|
|
7337
|
-
},
|
|
7338
|
-
FRANCE: {
|
|
7339
|
-
PARIS: "Europe/Paris",
|
|
7340
|
-
CAYENNE: "America/Cayenne",
|
|
7341
|
-
GUADELOUPE: "America/Guadeloupe",
|
|
7342
|
-
MARIGOT: "America/Marigot",
|
|
7343
|
-
MARTINIQUE: "America/Martinique",
|
|
7344
|
-
MAYOTTE: "Indian/Mayotte",
|
|
7345
|
-
REUNION: "Indian/Reunion"
|
|
7346
|
-
},
|
|
7347
|
-
GERMANY: {
|
|
7348
|
-
BERLIN: "Europe/Berlin",
|
|
7349
|
-
BUSINGEN: "Europe/Busingen"
|
|
7350
|
-
},
|
|
7351
|
-
GREECE: {
|
|
7352
|
-
ATHENS: "Europe/Athens"
|
|
7353
|
-
},
|
|
7354
|
-
HUNGARY: {
|
|
7355
|
-
BUDAPEST: "Europe/Budapest"
|
|
7356
|
-
},
|
|
7357
|
-
ICELAND: {
|
|
7358
|
-
REYKJAVIK: "Atlantic/Reykjavik"
|
|
7359
|
-
},
|
|
7360
|
-
IRELAND: {
|
|
7361
|
-
DUBLIN: "Europe/Dublin"
|
|
7362
|
-
},
|
|
7363
|
-
ITALY: {
|
|
7364
|
-
ROME: "Europe/Rome"
|
|
7365
|
-
},
|
|
7366
|
-
LATVIA: {
|
|
7367
|
-
RIGA: "Europe/Riga"
|
|
7368
|
-
},
|
|
7369
|
-
LIECHTENSTEIN: {
|
|
7370
|
-
VADUZ: "Europe/Vaduz"
|
|
7371
|
-
},
|
|
7372
|
-
LITHUANIA: {
|
|
7373
|
-
VILNIUS: "Europe/Vilnius"
|
|
7374
|
-
},
|
|
7375
|
-
LUXEMBOURG: {
|
|
7376
|
-
LUXEMBOURG: "Europe/Luxembourg"
|
|
7377
|
-
},
|
|
7378
|
-
MALTA: {
|
|
7379
|
-
MALTA: "Europe/Malta"
|
|
7380
|
-
},
|
|
7381
|
-
MONACO: {
|
|
7382
|
-
MONACO: "Europe/Monaco"
|
|
7383
|
-
},
|
|
7384
|
-
NETHERLANDS: {
|
|
7385
|
-
AMSTERDAM: "Europe/Amsterdam",
|
|
7386
|
-
ARUBA: "America/Aruba",
|
|
7387
|
-
CURACAO: "America/Curacao",
|
|
7388
|
-
KRALENDIJK: "America/Kralendijk",
|
|
7389
|
-
LOWER_PRINCES: "America/Lower_Princes"
|
|
7390
|
-
},
|
|
7391
|
-
NORWAY: {
|
|
7392
|
-
OSLO: "Europe/Oslo",
|
|
7393
|
-
JAN_MAYEN: "Atlantic/Jan_Mayen",
|
|
7394
|
-
LONGYEARBYEN: "Arctic/Longyearbyen"
|
|
7395
|
-
},
|
|
7396
|
-
POLAND: {
|
|
7397
|
-
WARSAW: "Europe/Warsaw"
|
|
7398
|
-
},
|
|
7399
|
-
PORTUGAL: {
|
|
7400
|
-
LISBON: "Europe/Lisbon",
|
|
7401
|
-
AZORES: "Atlantic/Azores",
|
|
7402
|
-
MADEIRA: "Atlantic/Madeira"
|
|
7403
|
-
},
|
|
7404
|
-
ROMANIA: {
|
|
7405
|
-
BUCHAREST: "Europe/Bucharest"
|
|
7406
|
-
},
|
|
7407
|
-
SAN_MARINO: {
|
|
7408
|
-
SAN_MARINO: "Europe/San_Marino"
|
|
7409
|
-
},
|
|
7410
|
-
SLOVAKIA: {
|
|
7411
|
-
BRATISLAVA: "Europe/Bratislava"
|
|
7412
|
-
},
|
|
7413
|
-
SLOVENIA: {
|
|
7414
|
-
LJUBLJANA: "Europe/Ljubljana"
|
|
7415
|
-
},
|
|
7416
|
-
SPAIN: {
|
|
7417
|
-
MADRID: "Europe/Madrid",
|
|
7418
|
-
CANARY: "Atlantic/Canary",
|
|
7419
|
-
CEUTA: "Africa/Ceuta"
|
|
7420
|
-
},
|
|
7421
|
-
SWEDEN: {
|
|
7422
|
-
STOCKHOLM: "Europe/Stockholm"
|
|
7423
|
-
},
|
|
7424
|
-
SWITZERLAND: {
|
|
7425
|
-
ZURICH: "Europe/Zurich"
|
|
7426
|
-
},
|
|
7427
|
-
VATICAN: {
|
|
7428
|
-
VATICAN: "Europe/Vatican"
|
|
7429
|
-
}
|
|
7430
|
-
};
|
|
7431
|
-
var EU_TIMEZONE = [
|
|
7432
|
-
TIMEZONE.AUSTRIA.VIENNA,
|
|
7433
|
-
TIMEZONE.BELGIUM.BRUSSELS,
|
|
7434
|
-
TIMEZONE.BULGARIA.SOFIA,
|
|
7435
|
-
TIMEZONE.CROATIA.ZAGREB,
|
|
7436
|
-
TIMEZONE.CYPRUS.NICOSIA_EUROPE,
|
|
7437
|
-
TIMEZONE.CYPRUS.NICOSIA_ASIA,
|
|
7438
|
-
TIMEZONE.CYPRUS.FAMAGUSTA,
|
|
7439
|
-
TIMEZONE.CZECHIA.PRAGUE,
|
|
7440
|
-
TIMEZONE.DENMARK.COPENHAGEN,
|
|
7441
|
-
TIMEZONE.ESTONIA.TALLINN,
|
|
7442
|
-
TIMEZONE.FINLAND.HELSINKI,
|
|
7443
|
-
TIMEZONE.FINLAND.MARIEHAMN,
|
|
7444
|
-
TIMEZONE.FRANCE.PARIS,
|
|
7445
|
-
TIMEZONE.GERMANY.BERLIN,
|
|
7446
|
-
TIMEZONE.GREECE.ATHENS,
|
|
7447
|
-
TIMEZONE.HUNGARY.BUDAPEST,
|
|
7448
|
-
TIMEZONE.IRELAND.DUBLIN,
|
|
7449
|
-
TIMEZONE.ITALY.ROME,
|
|
7450
|
-
TIMEZONE.LATVIA.RIGA,
|
|
7451
|
-
TIMEZONE.LITHUANIA.VILNIUS,
|
|
7452
|
-
TIMEZONE.LUXEMBOURG.LUXEMBOURG,
|
|
7453
|
-
TIMEZONE.MALTA.MALTA,
|
|
7454
|
-
TIMEZONE.NETHERLANDS.AMSTERDAM,
|
|
7455
|
-
TIMEZONE.POLAND.WARSAW,
|
|
7456
|
-
TIMEZONE.PORTUGAL.LISBON,
|
|
7457
|
-
TIMEZONE.ROMANIA.BUCHAREST,
|
|
7458
|
-
TIMEZONE.SLOVAKIA.BRATISLAVA,
|
|
7459
|
-
TIMEZONE.SLOVENIA.LJUBLJANA,
|
|
7460
|
-
TIMEZONE.SPAIN.MADRID,
|
|
7461
|
-
TIMEZONE.SWEDEN.STOCKHOLM,
|
|
7462
|
-
TIMEZONE.FRANCE.CAYENNE,
|
|
7463
|
-
TIMEZONE.FRANCE.GUADELOUPE,
|
|
7464
|
-
TIMEZONE.FRANCE.MARIGOT,
|
|
7465
|
-
TIMEZONE.FRANCE.MARTINIQUE,
|
|
7466
|
-
TIMEZONE.FRANCE.MAYOTTE,
|
|
7467
|
-
TIMEZONE.FRANCE.REUNION,
|
|
7468
|
-
TIMEZONE.PORTUGAL.AZORES,
|
|
7469
|
-
TIMEZONE.PORTUGAL.MADEIRA,
|
|
7470
|
-
TIMEZONE.SPAIN.CANARY
|
|
7471
|
-
];
|
|
7472
|
-
var EEA_EFTA_TIMEZONE = [
|
|
7473
|
-
TIMEZONE.ICELAND.REYKJAVIK,
|
|
7474
|
-
TIMEZONE.LIECHTENSTEIN.VADUZ,
|
|
7475
|
-
TIMEZONE.NORWAY.OSLO,
|
|
7476
|
-
TIMEZONE.NORWAY.JAN_MAYEN
|
|
7477
|
-
];
|
|
7478
|
-
var EEA_TIMEZONE = [
|
|
7479
|
-
...EU_TIMEZONE,
|
|
7480
|
-
...EEA_EFTA_TIMEZONE
|
|
7481
|
-
];
|
|
7482
|
-
var EFTA_TIMEZONE = [
|
|
7483
|
-
TIMEZONE.SWITZERLAND.ZURICH,
|
|
7484
|
-
...EEA_EFTA_TIMEZONE
|
|
7485
|
-
];
|
|
7486
|
-
var SCHENGEN_TIMEZONE = [
|
|
7487
|
-
TIMEZONE.AUSTRIA.VIENNA,
|
|
7488
|
-
TIMEZONE.BELGIUM.BRUSSELS,
|
|
7489
|
-
TIMEZONE.BULGARIA.SOFIA,
|
|
7490
|
-
TIMEZONE.CROATIA.ZAGREB,
|
|
7491
|
-
TIMEZONE.CZECHIA.PRAGUE,
|
|
7492
|
-
TIMEZONE.DENMARK.COPENHAGEN,
|
|
7493
|
-
TIMEZONE.ESTONIA.TALLINN,
|
|
7494
|
-
TIMEZONE.FINLAND.HELSINKI,
|
|
7495
|
-
TIMEZONE.FINLAND.MARIEHAMN,
|
|
7496
|
-
TIMEZONE.FRANCE.PARIS,
|
|
7497
|
-
TIMEZONE.GERMANY.BERLIN,
|
|
7498
|
-
TIMEZONE.GREECE.ATHENS,
|
|
7499
|
-
TIMEZONE.HUNGARY.BUDAPEST,
|
|
7500
|
-
TIMEZONE.ITALY.ROME,
|
|
7501
|
-
TIMEZONE.LATVIA.RIGA,
|
|
7502
|
-
TIMEZONE.LITHUANIA.VILNIUS,
|
|
7503
|
-
TIMEZONE.LUXEMBOURG.LUXEMBOURG,
|
|
7504
|
-
TIMEZONE.MALTA.MALTA,
|
|
7505
|
-
TIMEZONE.NETHERLANDS.AMSTERDAM,
|
|
7506
|
-
TIMEZONE.POLAND.WARSAW,
|
|
7507
|
-
TIMEZONE.PORTUGAL.LISBON,
|
|
7508
|
-
TIMEZONE.PORTUGAL.AZORES,
|
|
7509
|
-
TIMEZONE.PORTUGAL.MADEIRA,
|
|
7510
|
-
TIMEZONE.ROMANIA.BUCHAREST,
|
|
7511
|
-
TIMEZONE.SLOVAKIA.BRATISLAVA,
|
|
7512
|
-
TIMEZONE.SLOVENIA.LJUBLJANA,
|
|
7513
|
-
TIMEZONE.SPAIN.MADRID,
|
|
7514
|
-
TIMEZONE.SPAIN.CANARY,
|
|
7515
|
-
TIMEZONE.SWEDEN.STOCKHOLM,
|
|
7516
|
-
TIMEZONE.ANDORRA.ANDORRA,
|
|
7517
|
-
TIMEZONE.GERMANY.BUSINGEN,
|
|
7518
|
-
TIMEZONE.ICELAND.REYKJAVIK,
|
|
7519
|
-
TIMEZONE.LIECHTENSTEIN.VADUZ,
|
|
7520
|
-
TIMEZONE.MONACO.MONACO,
|
|
7521
|
-
TIMEZONE.NORWAY.OSLO,
|
|
7522
|
-
TIMEZONE.SAN_MARINO.SAN_MARINO,
|
|
7523
|
-
TIMEZONE.SPAIN.CEUTA,
|
|
7524
|
-
TIMEZONE.SWITZERLAND.ZURICH,
|
|
7525
|
-
TIMEZONE.VATICAN.VATICAN
|
|
7526
|
-
];
|
|
7527
|
-
|
|
7528
|
-
// ../../node_modules/.pnpm/is-standalone-pwa@0.1.1/node_modules/is-standalone-pwa/dist/esm/index.js
|
|
7529
|
-
function isStandalonePWA() {
|
|
7530
|
-
var _a;
|
|
7531
|
-
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"));
|
|
7532
|
-
}
|
|
7533
|
-
|
|
7534
|
-
// ../../node_modules/.pnpm/@ua-parser-js+pro-enterprise@2.0.6/node_modules/@ua-parser-js/pro-enterprise/src/helpers/ua-parser-helpers.mjs
|
|
7535
|
-
var { Crawler } = Extension.BrowserName;
|
|
7536
|
-
var toResult = (value, head, ext) => typeof value === "string" ? UAParser(value, head, ext) : value;
|
|
7537
|
-
var isAppleSilicon = (resultOrUA) => {
|
|
7538
|
-
const res = toResult(resultOrUA);
|
|
7539
|
-
if (res.os.is(OSName.MACOS)) {
|
|
7540
|
-
if (res.cpu.is(CPUArch.ARM)) {
|
|
7541
|
-
return true;
|
|
7542
4508
|
}
|
|
7543
|
-
if (
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
-
|
|
7547
|
-
|
|
7548
|
-
const renderer = webgl.getParameter(debug.UNMASKED_RENDERER_WEBGL);
|
|
7549
|
-
if (renderer.match(/apple m\d/i)) {
|
|
7550
|
-
return true;
|
|
7551
|
-
}
|
|
7552
|
-
} catch (e) {
|
|
7553
|
-
return false;
|
|
7554
|
-
}
|
|
4509
|
+
if (status === 404) {
|
|
4510
|
+
return new TagadaApiError(serverMessage, 404, {
|
|
4511
|
+
code: TagadaErrorCode.NOT_FOUND,
|
|
4512
|
+
retryable: false
|
|
4513
|
+
});
|
|
7555
4514
|
}
|
|
4515
|
+
return new TagadaApiError(serverMessage, status != null ? status : 0, {
|
|
4516
|
+
code: (_e = data == null ? void 0 : data.code) != null ? _e : TagadaErrorCode.API_ERROR,
|
|
4517
|
+
details: data,
|
|
4518
|
+
retryable: (status != null ? status : 0) >= 500
|
|
4519
|
+
});
|
|
7556
4520
|
}
|
|
7557
|
-
return false;
|
|
7558
4521
|
};
|
|
7559
|
-
var isBot = (resultOrUA) => [
|
|
7560
|
-
BrowserType.CLI,
|
|
7561
|
-
BrowserType.CRAWLER,
|
|
7562
|
-
BrowserType.FETCHER,
|
|
7563
|
-
BrowserType.LIBRARY
|
|
7564
|
-
].includes(toResult(resultOrUA, Bots).browser.type);
|
|
7565
|
-
var isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(EngineName.BLINK);
|
|
7566
4522
|
|
|
7567
4523
|
// src/v2/core/utils/deviceInfo.ts
|
|
7568
4524
|
function getScreenResolution() {
|
|
7569
|
-
return {
|
|
7570
|
-
width: window.screen.width,
|
|
7571
|
-
height: window.screen.height
|
|
7572
|
-
};
|
|
4525
|
+
return { width: window.screen.width, height: window.screen.height };
|
|
7573
4526
|
}
|
|
7574
4527
|
function getTimeZone() {
|
|
7575
4528
|
try {
|
|
7576
4529
|
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
7577
|
-
} catch (
|
|
7578
|
-
console.error("Failed to get timezone:", error);
|
|
4530
|
+
} catch (e) {
|
|
7579
4531
|
return "UTC";
|
|
7580
4532
|
}
|
|
7581
4533
|
}
|
|
7582
4534
|
function getBrowserLocale() {
|
|
7583
4535
|
try {
|
|
7584
4536
|
return navigator.language || "en-US";
|
|
7585
|
-
} catch (
|
|
7586
|
-
console.error("Failed to get browser locale:", error);
|
|
4537
|
+
} catch (e) {
|
|
7587
4538
|
return "en-US";
|
|
7588
4539
|
}
|
|
7589
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
|
+
}
|
|
7590
4642
|
function collectDeviceInfo() {
|
|
7591
4643
|
if (typeof window === "undefined") {
|
|
7592
4644
|
return {
|
|
@@ -7600,68 +4652,34 @@ var TagadaTrackerBundle = (() => {
|
|
|
7600
4652
|
},
|
|
7601
4653
|
screenResolution: { width: 0, height: 0 },
|
|
7602
4654
|
timeZone: "UTC",
|
|
7603
|
-
flags: {
|
|
7604
|
-
isBot: false,
|
|
7605
|
-
isChromeFamily: false,
|
|
7606
|
-
isStandalonePWA: false,
|
|
7607
|
-
isAppleSilicon: false
|
|
7608
|
-
}
|
|
4655
|
+
flags: { isBot: false, isChromeFamily: false, isStandalonePWA: false, isAppleSilicon: false }
|
|
7609
4656
|
};
|
|
7610
4657
|
}
|
|
7611
|
-
const
|
|
7612
|
-
const
|
|
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);
|
|
7613
4663
|
let flags;
|
|
7614
4664
|
try {
|
|
7615
4665
|
flags = {
|
|
7616
|
-
isBot:
|
|
7617
|
-
isChromeFamily:
|
|
7618
|
-
isStandalonePWA:
|
|
7619
|
-
isAppleSilicon:
|
|
7620
|
-
};
|
|
7621
|
-
} catch (error) {
|
|
7622
|
-
console.error("Failed to compute device flags:", error);
|
|
7623
|
-
flags = {
|
|
7624
|
-
isBot: false,
|
|
7625
|
-
isChromeFamily: false,
|
|
7626
|
-
isStandalonePWA: false,
|
|
7627
|
-
isAppleSilicon: false
|
|
4666
|
+
isBot: detectIsBot(),
|
|
4667
|
+
isChromeFamily: detectIsChromeFamily(browser.name),
|
|
4668
|
+
isStandalonePWA: detectIsStandalonePWA(),
|
|
4669
|
+
isAppleSilicon: detectIsAppleSilicon(os.name)
|
|
7628
4670
|
};
|
|
4671
|
+
} catch (e) {
|
|
4672
|
+
flags = { isBot: false, isChromeFamily: false, isStandalonePWA: false, isAppleSilicon: false };
|
|
7629
4673
|
}
|
|
7630
4674
|
return {
|
|
7631
|
-
userAgent: {
|
|
7632
|
-
name: result.ua,
|
|
7633
|
-
browser: {
|
|
7634
|
-
major: result.browser.major || "",
|
|
7635
|
-
name: result.browser.name || "",
|
|
7636
|
-
version: result.browser.version || "",
|
|
7637
|
-
type: result.browser.type
|
|
7638
|
-
},
|
|
7639
|
-
os: {
|
|
7640
|
-
name: result.os.name || "",
|
|
7641
|
-
version: result.os.version || ""
|
|
7642
|
-
},
|
|
7643
|
-
device: result.device.model || result.device.type || result.device.vendor ? {
|
|
7644
|
-
model: result.device.model,
|
|
7645
|
-
type: result.device.type,
|
|
7646
|
-
vendor: result.device.vendor
|
|
7647
|
-
} : void 0,
|
|
7648
|
-
engine: {
|
|
7649
|
-
name: result.engine.name || "",
|
|
7650
|
-
version: result.engine.version || ""
|
|
7651
|
-
},
|
|
7652
|
-
cpu: {
|
|
7653
|
-
architecture: result.cpu.architecture || ""
|
|
7654
|
-
}
|
|
7655
|
-
},
|
|
4675
|
+
userAgent: { name: UA, browser, os, device, engine, cpu },
|
|
7656
4676
|
screenResolution: getScreenResolution(),
|
|
7657
4677
|
timeZone: getTimeZone(),
|
|
7658
4678
|
flags
|
|
7659
4679
|
};
|
|
7660
4680
|
}
|
|
7661
4681
|
function getUrlParams() {
|
|
7662
|
-
if (typeof window === "undefined") {
|
|
7663
|
-
return {};
|
|
7664
|
-
}
|
|
4682
|
+
if (typeof window === "undefined") return {};
|
|
7665
4683
|
const params = new URLSearchParams(window.location.search);
|
|
7666
4684
|
return {
|
|
7667
4685
|
locale: params.get("locale") || void 0,
|
|
@@ -7890,9 +4908,21 @@ var TagadaTrackerBundle = (() => {
|
|
|
7890
4908
|
}
|
|
7891
4909
|
};
|
|
7892
4910
|
var getMetaContent = (name) => {
|
|
4911
|
+
if (typeof document === "undefined") return void 0;
|
|
7893
4912
|
const metaTag = document.querySelector('meta[name="'.concat(name, '"]'));
|
|
7894
4913
|
return (metaTag == null ? void 0 : metaTag.getAttribute("content")) || void 0;
|
|
7895
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
|
+
};
|
|
7896
4926
|
var loadProductionConfig = async () => {
|
|
7897
4927
|
try {
|
|
7898
4928
|
if (typeof document === "undefined") {
|
|
@@ -7904,16 +4934,7 @@ var TagadaTrackerBundle = (() => {
|
|
|
7904
4934
|
return null;
|
|
7905
4935
|
}
|
|
7906
4936
|
const basePath = getMetaContent("x-plugin-base-path") || "/";
|
|
7907
|
-
|
|
7908
|
-
try {
|
|
7909
|
-
const encodedConfig = getMetaContent("x-plugin-config");
|
|
7910
|
-
if (encodedConfig) {
|
|
7911
|
-
const decodedConfig = decodeURIComponent(encodedConfig);
|
|
7912
|
-
config = JSON.parse(decodedConfig);
|
|
7913
|
-
}
|
|
7914
|
-
} catch (error) {
|
|
7915
|
-
console.warn("\u26A0\uFE0F Failed to parse plugin config from meta tag:", error);
|
|
7916
|
-
}
|
|
4937
|
+
const config = readWindowConfig();
|
|
7917
4938
|
if (!accountId) {
|
|
7918
4939
|
console.warn("\u26A0\uFE0F Plugin config: Account ID not found in meta tags");
|
|
7919
4940
|
}
|
|
@@ -8584,7 +5605,7 @@ var TagadaTrackerBundle = (() => {
|
|
|
8584
5605
|
if (this.state.debugMode) {
|
|
8585
5606
|
console.log("[TagadaClient ".concat(this.instanceId, "] Initializing session..."), { sessionId: sessionData.sessionId });
|
|
8586
5607
|
}
|
|
8587
|
-
const deviceInfo = collectDeviceInfo();
|
|
5608
|
+
const deviceInfo = await collectDeviceInfo();
|
|
8588
5609
|
const urlParams = getUrlParams();
|
|
8589
5610
|
const browserLocale = getBrowserLocale();
|
|
8590
5611
|
const draft = isDraftMode();
|
|
@@ -8651,7 +5672,7 @@ var TagadaTrackerBundle = (() => {
|
|
|
8651
5672
|
}
|
|
8652
5673
|
}
|
|
8653
5674
|
updateSessionState(response, sessionData) {
|
|
8654
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
5675
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
8655
5676
|
if (response.store) {
|
|
8656
5677
|
const storeData = response.store;
|
|
8657
5678
|
const storeConfig = __spreadProps(__spreadValues({}, response.store), {
|
|
@@ -8689,8 +5710,10 @@ var TagadaTrackerBundle = (() => {
|
|
|
8689
5710
|
customer: (_g = response.customer) != null ? _g : null,
|
|
8690
5711
|
auth: authState
|
|
8691
5712
|
});
|
|
8692
|
-
|
|
8693
|
-
|
|
5713
|
+
const funnelFeature = (_h = this.config.features) == null ? void 0 : _h.funnel;
|
|
5714
|
+
const skipAutoInit = typeof funnelFeature === "object" && funnelFeature.skipAutoInit;
|
|
5715
|
+
if (this.funnel && !skipAutoInit && sessionData.customerId && ((_i = response.store) == null ? void 0 : _i.id)) {
|
|
5716
|
+
const accountId = response.store.accountId || ((_j = this.state.pluginConfig) == null ? void 0 : _j.accountId) || sessionData.accountId || "";
|
|
8694
5717
|
if (accountId) {
|
|
8695
5718
|
const urlParams = new URLSearchParams(typeof window !== "undefined" ? window.location.search : "");
|
|
8696
5719
|
const funnelId = urlParams.get("funnelId") || void 0;
|
|
@@ -9017,18 +6040,87 @@ var TagadaTrackerBundle = (() => {
|
|
|
9017
6040
|
};
|
|
9018
6041
|
|
|
9019
6042
|
// src/v2/standalone/index.ts
|
|
9020
|
-
|
|
9021
|
-
|
|
9022
|
-
|
|
9023
|
-
|
|
9024
|
-
|
|
9025
|
-
|
|
6043
|
+
init_funnelClient();
|
|
6044
|
+
function parseStepConfigScripts() {
|
|
6045
|
+
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
6046
|
+
return [];
|
|
6047
|
+
}
|
|
6048
|
+
const stepConfig = getAssignedStepConfig();
|
|
6049
|
+
if (stepConfig == null ? void 0 : stepConfig.scripts) {
|
|
6050
|
+
return stepConfig.scripts.filter((s) => s.enabled);
|
|
6051
|
+
}
|
|
6052
|
+
return [];
|
|
6053
|
+
}
|
|
6054
|
+
function injectScript(script, index) {
|
|
6055
|
+
const position = script.position || "body-end";
|
|
6056
|
+
const scriptId = "tagada-stepconfig-script-".concat(index);
|
|
6057
|
+
if (document.getElementById(scriptId)) {
|
|
6058
|
+
return;
|
|
6059
|
+
}
|
|
6060
|
+
let scriptBody = script.content.trim();
|
|
6061
|
+
const scriptTagMatch = scriptBody.match(/^<script[^>]*>([\s\S]*)<\/script>$/i);
|
|
6062
|
+
if (scriptTagMatch) {
|
|
6063
|
+
scriptBody = scriptTagMatch[1].trim();
|
|
6064
|
+
}
|
|
6065
|
+
if (!scriptBody) return;
|
|
6066
|
+
const wrappedScript = "(function() {\n try {\n // Script: " + script.name + "\n" + scriptBody + '\n } catch (error) {\n console.error("[TagadaPay] StepConfig script error:", error);\n }\n})();';
|
|
6067
|
+
const scriptElement = document.createElement("script");
|
|
6068
|
+
scriptElement.id = scriptId;
|
|
6069
|
+
scriptElement.setAttribute("data-tagada-stepconfig-script", "true");
|
|
6070
|
+
scriptElement.setAttribute("data-script-name", script.name);
|
|
6071
|
+
scriptElement.textContent = wrappedScript;
|
|
6072
|
+
switch (position) {
|
|
6073
|
+
case "head-start":
|
|
6074
|
+
if (document.head.firstChild) {
|
|
6075
|
+
document.head.insertBefore(scriptElement, document.head.firstChild);
|
|
6076
|
+
} else {
|
|
6077
|
+
document.head.appendChild(scriptElement);
|
|
6078
|
+
}
|
|
6079
|
+
break;
|
|
6080
|
+
case "head-end":
|
|
6081
|
+
document.head.appendChild(scriptElement);
|
|
6082
|
+
break;
|
|
6083
|
+
case "body-start":
|
|
6084
|
+
if (document.body.firstChild) {
|
|
6085
|
+
document.body.insertBefore(scriptElement, document.body.firstChild);
|
|
6086
|
+
} else {
|
|
6087
|
+
document.body.appendChild(scriptElement);
|
|
6088
|
+
}
|
|
6089
|
+
break;
|
|
6090
|
+
case "body-end":
|
|
6091
|
+
default:
|
|
6092
|
+
document.body.appendChild(scriptElement);
|
|
6093
|
+
break;
|
|
6094
|
+
}
|
|
6095
|
+
}
|
|
6096
|
+
function injectStepConfigScripts() {
|
|
6097
|
+
const scripts = parseStepConfigScripts();
|
|
6098
|
+
if (scripts.length === 0) return;
|
|
6099
|
+
scripts.forEach((script, index) => {
|
|
6100
|
+
injectScript(script, index);
|
|
6101
|
+
});
|
|
6102
|
+
}
|
|
6103
|
+
if (typeof window !== "undefined" && typeof document !== "undefined") {
|
|
6104
|
+
const runInjection = () => {
|
|
6105
|
+
if (document.body) {
|
|
6106
|
+
injectStepConfigScripts();
|
|
6107
|
+
} else {
|
|
6108
|
+
document.addEventListener("DOMContentLoaded", injectStepConfigScripts, { once: true });
|
|
6109
|
+
}
|
|
6110
|
+
};
|
|
6111
|
+
if ("requestIdleCallback" in window) {
|
|
6112
|
+
window.requestIdleCallback(runInjection, { timeout: 100 });
|
|
6113
|
+
} else {
|
|
6114
|
+
setTimeout(runInjection, 0);
|
|
6115
|
+
}
|
|
6116
|
+
}
|
|
9026
6117
|
function createTagadaClient(config = {}) {
|
|
9027
6118
|
return new TagadaClient(config);
|
|
9028
6119
|
}
|
|
9029
6120
|
|
|
9030
6121
|
// src/v2/standalone/external-tracker.ts
|
|
9031
6122
|
init_tokenStorage();
|
|
6123
|
+
var TRACKER_VERSION = "1.0.0";
|
|
9032
6124
|
function getUrlParam(name) {
|
|
9033
6125
|
if (typeof window === "undefined") return null;
|
|
9034
6126
|
const params = new URLSearchParams(window.location.search);
|
|
@@ -9039,58 +6131,133 @@ var TagadaTrackerBundle = (() => {
|
|
|
9039
6131
|
console.log("[TagadaTracker]", ...args);
|
|
9040
6132
|
}
|
|
9041
6133
|
}
|
|
6134
|
+
function warn(...args) {
|
|
6135
|
+
console.warn("[TagadaTracker]", ...args);
|
|
6136
|
+
}
|
|
6137
|
+
function validate(config) {
|
|
6138
|
+
if (!config.storeId || typeof config.storeId !== "string") {
|
|
6139
|
+
throw new Error("TagadaTracker: storeId is required and must be a non-empty string.");
|
|
6140
|
+
}
|
|
6141
|
+
if (!config.accountId || typeof config.accountId !== "string") {
|
|
6142
|
+
throw new Error("TagadaTracker: accountId is required and must be a non-empty string.");
|
|
6143
|
+
}
|
|
6144
|
+
if (!config.stepId || typeof config.stepId !== "string") {
|
|
6145
|
+
throw new Error("TagadaTracker: stepId is required and must be a non-empty string.");
|
|
6146
|
+
}
|
|
6147
|
+
if (config.apiBaseUrl) {
|
|
6148
|
+
try {
|
|
6149
|
+
new URL(config.apiBaseUrl);
|
|
6150
|
+
} catch (e) {
|
|
6151
|
+
throw new Error('TagadaTracker: apiBaseUrl is not a valid URL: "'.concat(config.apiBaseUrl, '"'));
|
|
6152
|
+
}
|
|
6153
|
+
}
|
|
6154
|
+
}
|
|
6155
|
+
async function retryWithBackoff(fn, maxRetries, debug) {
|
|
6156
|
+
let lastError;
|
|
6157
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
6158
|
+
try {
|
|
6159
|
+
return await fn();
|
|
6160
|
+
} catch (err) {
|
|
6161
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
6162
|
+
if (attempt < maxRetries) {
|
|
6163
|
+
const delay = Math.min(1e3 * 2 ** attempt, 8e3);
|
|
6164
|
+
log(debug, "Retry ".concat(attempt + 1, "/").concat(maxRetries, " in ").concat(delay, "ms..."));
|
|
6165
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
6166
|
+
}
|
|
6167
|
+
}
|
|
6168
|
+
}
|
|
6169
|
+
throw lastError;
|
|
6170
|
+
}
|
|
9042
6171
|
var TagadaExternalTracker = class {
|
|
9043
6172
|
constructor() {
|
|
9044
6173
|
this.config = null;
|
|
9045
6174
|
this.client = null;
|
|
9046
6175
|
this.initialized = false;
|
|
9047
6176
|
this.initializing = false;
|
|
6177
|
+
this.unsubscribe = null;
|
|
6178
|
+
/** Tracker version */
|
|
6179
|
+
this.version = TRACKER_VERSION;
|
|
9048
6180
|
}
|
|
9049
6181
|
/**
|
|
9050
|
-
* Initialize the tracker
|
|
6182
|
+
* Initialize the tracker.
|
|
6183
|
+
* When `onError` is provided, errors are passed to the callback and init()
|
|
6184
|
+
* resolves to `null` instead of throwing.
|
|
9051
6185
|
*/
|
|
9052
6186
|
async init(config) {
|
|
9053
|
-
var _a, _b
|
|
9054
|
-
if (this.initialized
|
|
9055
|
-
log(config.debug || false, "Already initialized
|
|
6187
|
+
var _a, _b;
|
|
6188
|
+
if (this.initialized) {
|
|
6189
|
+
log(config.debug || false, "Already initialized \u2014 returning existing session.");
|
|
9056
6190
|
return this.getSession();
|
|
9057
6191
|
}
|
|
6192
|
+
if (this.initializing) {
|
|
6193
|
+
log(config.debug || false, "Initialization in progress \u2014 skipping duplicate call.");
|
|
6194
|
+
return null;
|
|
6195
|
+
}
|
|
9058
6196
|
this.initializing = true;
|
|
9059
|
-
this.config = __spreadValues({
|
|
9060
|
-
|
|
9061
|
-
|
|
9062
|
-
|
|
6197
|
+
this.config = __spreadValues({ debug: false }, config);
|
|
6198
|
+
const debug = this.config.debug;
|
|
6199
|
+
try {
|
|
6200
|
+
validate(this.config);
|
|
6201
|
+
} catch (err) {
|
|
6202
|
+
this.initializing = false;
|
|
6203
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
6204
|
+
if (this.config.onError) {
|
|
6205
|
+
this.config.onError(error);
|
|
6206
|
+
return null;
|
|
6207
|
+
}
|
|
6208
|
+
throw error;
|
|
6209
|
+
}
|
|
6210
|
+
log(debug, "\u{1F680} Initializing external tracker v".concat(TRACKER_VERSION), {
|
|
6211
|
+
storeId: config.storeId,
|
|
6212
|
+
accountId: config.accountId,
|
|
6213
|
+
stepId: config.stepId,
|
|
6214
|
+
funnelId: config.funnelId
|
|
6215
|
+
});
|
|
9063
6216
|
try {
|
|
9064
6217
|
const urlToken = getUrlParam("token");
|
|
9065
6218
|
if (urlToken) {
|
|
9066
6219
|
setClientToken(urlToken);
|
|
9067
|
-
log(
|
|
6220
|
+
log(debug, "\u{1F511} Bootstrapped token from URL");
|
|
9068
6221
|
}
|
|
9069
6222
|
this.client = createTagadaClient({
|
|
9070
|
-
debugMode:
|
|
9071
|
-
features: { funnel: true }
|
|
6223
|
+
debugMode: debug,
|
|
6224
|
+
features: { funnel: { skipAutoInit: true } },
|
|
6225
|
+
rawPluginConfig: {
|
|
6226
|
+
storeId: this.config.storeId,
|
|
6227
|
+
accountId: this.config.accountId
|
|
6228
|
+
},
|
|
6229
|
+
customApiConfig: this.config.apiBaseUrl ? {
|
|
6230
|
+
apiConfig: {
|
|
6231
|
+
baseUrl: this.config.apiBaseUrl.trim()
|
|
6232
|
+
}
|
|
6233
|
+
} : void 0
|
|
9072
6234
|
});
|
|
9073
6235
|
await this.waitForClientReady();
|
|
9074
|
-
const funnelContext = await
|
|
9075
|
-
|
|
6236
|
+
const funnelContext = await retryWithBackoff(
|
|
6237
|
+
() => this.initializeFunnel(),
|
|
6238
|
+
2,
|
|
6239
|
+
debug
|
|
6240
|
+
);
|
|
6241
|
+
log(debug, "\u2705 Session initialized:", funnelContext);
|
|
9076
6242
|
this.initialized = true;
|
|
9077
6243
|
const session = this.getSession();
|
|
9078
6244
|
if (session) {
|
|
9079
6245
|
(_b = (_a = this.config).onReady) == null ? void 0 : _b.call(_a, session);
|
|
9080
6246
|
}
|
|
9081
6247
|
return session;
|
|
9082
|
-
} catch (
|
|
9083
|
-
const
|
|
9084
|
-
log(
|
|
9085
|
-
|
|
9086
|
-
|
|
6248
|
+
} catch (err) {
|
|
6249
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
6250
|
+
log(debug, "\u274C Initialization failed:", error);
|
|
6251
|
+
if (this.config.onError) {
|
|
6252
|
+
this.config.onError(error);
|
|
6253
|
+
return null;
|
|
6254
|
+
}
|
|
6255
|
+
throw error;
|
|
9087
6256
|
} finally {
|
|
9088
6257
|
this.initializing = false;
|
|
9089
6258
|
}
|
|
9090
6259
|
}
|
|
9091
|
-
/**
|
|
9092
|
-
* Get current session from SDK state
|
|
9093
|
-
*/
|
|
6260
|
+
/** Get current session data. */
|
|
9094
6261
|
getSession() {
|
|
9095
6262
|
var _a, _b;
|
|
9096
6263
|
if (!((_b = (_a = this.client) == null ? void 0 : _a.funnel) == null ? void 0 : _b.state.context)) return null;
|
|
@@ -9104,19 +6271,18 @@ var TagadaTrackerBundle = (() => {
|
|
|
9104
6271
|
cmsToken: this.client.state.token || void 0
|
|
9105
6272
|
};
|
|
9106
6273
|
}
|
|
9107
|
-
/**
|
|
9108
|
-
* Check if tracker is ready
|
|
9109
|
-
*/
|
|
6274
|
+
/** Whether the tracker is fully initialized and ready. */
|
|
9110
6275
|
isReady() {
|
|
9111
6276
|
var _a, _b;
|
|
9112
6277
|
return this.initialized && !!((_b = (_a = this.client) == null ? void 0 : _a.funnel) == null ? void 0 : _b.state.context);
|
|
9113
6278
|
}
|
|
9114
6279
|
/**
|
|
9115
|
-
* Navigate to next step in
|
|
6280
|
+
* Navigate to the next step in the funnel.
|
|
6281
|
+
* By default, auto-redirects the browser window.
|
|
9116
6282
|
*/
|
|
9117
6283
|
async navigate(options) {
|
|
9118
6284
|
if (!this.isReady()) {
|
|
9119
|
-
throw new Error("
|
|
6285
|
+
throw new Error("TagadaTracker: not initialized. Call init() first.");
|
|
9120
6286
|
}
|
|
9121
6287
|
log(this.config.debug, "\u{1F680} Navigating:", options);
|
|
9122
6288
|
const shouldAutoRedirect = options.autoRedirect !== false;
|
|
@@ -9127,7 +6293,6 @@ var TagadaTrackerBundle = (() => {
|
|
|
9127
6293
|
data: options.eventData || {}
|
|
9128
6294
|
},
|
|
9129
6295
|
{ autoRedirect: false }
|
|
9130
|
-
// Always disable SDK auto-redirect, we handle it here
|
|
9131
6296
|
);
|
|
9132
6297
|
if (result == null ? void 0 : result.url) {
|
|
9133
6298
|
log(this.config.debug, "\u2705 Navigation result:", result.url);
|
|
@@ -9143,36 +6308,48 @@ var TagadaTrackerBundle = (() => {
|
|
|
9143
6308
|
}
|
|
9144
6309
|
}
|
|
9145
6310
|
/**
|
|
9146
|
-
*
|
|
6311
|
+
* Track a custom event (e.g., button click, scroll depth, video play).
|
|
6312
|
+
* Events are sent through the funnel orchestrator for unified analytics.
|
|
9147
6313
|
*/
|
|
6314
|
+
async trackEvent(options) {
|
|
6315
|
+
if (!this.isReady()) {
|
|
6316
|
+
warn("trackEvent called before init \u2014 event dropped:", options.name);
|
|
6317
|
+
return;
|
|
6318
|
+
}
|
|
6319
|
+
log(this.config.debug, "\u{1F4CA} Tracking event:", options.name, options.data);
|
|
6320
|
+
try {
|
|
6321
|
+
await this.client.funnel.navigate(
|
|
6322
|
+
{
|
|
6323
|
+
type: options.name,
|
|
6324
|
+
data: options.data || {}
|
|
6325
|
+
},
|
|
6326
|
+
{ autoRedirect: false }
|
|
6327
|
+
);
|
|
6328
|
+
} catch (e) {
|
|
6329
|
+
log(this.config.debug, "\u26A0\uFE0F Event tracking failed (non-critical):", options.name);
|
|
6330
|
+
}
|
|
6331
|
+
}
|
|
6332
|
+
/** Get customer ID. */
|
|
9148
6333
|
getCustomerId() {
|
|
9149
6334
|
var _a, _b, _c, _d, _e;
|
|
9150
6335
|
return ((_b = (_a = this.client) == null ? void 0 : _a.state.auth.customer) == null ? void 0 : _b.id) || ((_e = (_d = (_c = this.client) == null ? void 0 : _c.funnel) == null ? void 0 : _d.state.context) == null ? void 0 : _e.customerId) || null;
|
|
9151
6336
|
}
|
|
9152
|
-
/**
|
|
9153
|
-
* Get funnel session ID
|
|
9154
|
-
*/
|
|
6337
|
+
/** Get funnel session ID. */
|
|
9155
6338
|
getFunnelSessionId() {
|
|
9156
6339
|
var _a, _b, _c;
|
|
9157
6340
|
return ((_c = (_b = (_a = this.client) == null ? void 0 : _a.funnel) == null ? void 0 : _b.state.context) == null ? void 0 : _c.sessionId) || null;
|
|
9158
6341
|
}
|
|
9159
6342
|
/**
|
|
9160
|
-
* Build a URL
|
|
9161
|
-
*
|
|
6343
|
+
* Build a URL that preserves funnel session context.
|
|
6344
|
+
* Use this to link to other external pages within the same funnel.
|
|
9162
6345
|
*/
|
|
9163
6346
|
buildUrl(baseUrl, additionalParams) {
|
|
9164
6347
|
const session = this.getSession();
|
|
9165
|
-
if (!session)
|
|
9166
|
-
return baseUrl;
|
|
9167
|
-
}
|
|
6348
|
+
if (!session) return baseUrl;
|
|
9168
6349
|
const url = new URL(baseUrl, typeof window !== "undefined" ? window.location.origin : void 0);
|
|
9169
6350
|
url.searchParams.set("funnelSessionId", session.sessionId);
|
|
9170
|
-
if (session.cmsToken)
|
|
9171
|
-
|
|
9172
|
-
}
|
|
9173
|
-
if (session.funnelId) {
|
|
9174
|
-
url.searchParams.set("funnelId", session.funnelId);
|
|
9175
|
-
}
|
|
6351
|
+
if (session.cmsToken) url.searchParams.set("token", session.cmsToken);
|
|
6352
|
+
if (session.funnelId) url.searchParams.set("funnelId", session.funnelId);
|
|
9176
6353
|
url.searchParams.set("storeId", session.storeId);
|
|
9177
6354
|
if (additionalParams) {
|
|
9178
6355
|
Object.entries(additionalParams).forEach(([key, value]) => {
|
|
@@ -9181,55 +6358,98 @@ var TagadaTrackerBundle = (() => {
|
|
|
9181
6358
|
}
|
|
9182
6359
|
return url.toString();
|
|
9183
6360
|
}
|
|
9184
|
-
/**
|
|
9185
|
-
* Get the underlying SDK client (for advanced usage)
|
|
9186
|
-
*/
|
|
6361
|
+
/** Get the underlying SDK client (advanced usage). */
|
|
9187
6362
|
getClient() {
|
|
9188
6363
|
return this.client;
|
|
9189
6364
|
}
|
|
6365
|
+
/**
|
|
6366
|
+
* Reset the tracker to a new step without re-creating the session.
|
|
6367
|
+
* Useful for SPAs that navigate between funnel steps client-side.
|
|
6368
|
+
*/
|
|
6369
|
+
async reset(newStepId) {
|
|
6370
|
+
var _a, _b;
|
|
6371
|
+
if (!this.client || !this.config) {
|
|
6372
|
+
throw new Error("TagadaTracker: not initialized. Call init() first.");
|
|
6373
|
+
}
|
|
6374
|
+
log(this.config.debug, "\u{1F504} Resetting to step:", newStepId);
|
|
6375
|
+
this.config.stepId = newStepId;
|
|
6376
|
+
const ctx = await this.initializeFunnel();
|
|
6377
|
+
const session = this.getSession();
|
|
6378
|
+
if (session) (_b = (_a = this.config).onReady) == null ? void 0 : _b.call(_a, session);
|
|
6379
|
+
return session;
|
|
6380
|
+
}
|
|
6381
|
+
/**
|
|
6382
|
+
* Destroy the tracker, clean up event listeners and state.
|
|
6383
|
+
* Call this when the tracker is no longer needed (e.g., SPA teardown).
|
|
6384
|
+
*/
|
|
6385
|
+
destroy() {
|
|
6386
|
+
var _a, _b;
|
|
6387
|
+
if (this.unsubscribe) {
|
|
6388
|
+
this.unsubscribe();
|
|
6389
|
+
this.unsubscribe = null;
|
|
6390
|
+
}
|
|
6391
|
+
if (this.client) {
|
|
6392
|
+
(_b = (_a = this.client).destroy) == null ? void 0 : _b.call(_a);
|
|
6393
|
+
}
|
|
6394
|
+
this.client = null;
|
|
6395
|
+
this.config = null;
|
|
6396
|
+
this.initialized = false;
|
|
6397
|
+
this.initializing = false;
|
|
6398
|
+
log(false, "\u{1F5D1}\uFE0F Tracker destroyed");
|
|
6399
|
+
}
|
|
9190
6400
|
// ========================================================================
|
|
9191
6401
|
// PRIVATE METHODS
|
|
9192
6402
|
// ========================================================================
|
|
9193
6403
|
async waitForClientReady() {
|
|
9194
6404
|
if (!this.client) return;
|
|
9195
6405
|
return new Promise((resolve) => {
|
|
9196
|
-
|
|
9197
|
-
|
|
9198
|
-
|
|
9199
|
-
|
|
6406
|
+
var _a;
|
|
6407
|
+
if ((_a = this.client) == null ? void 0 : _a.state.isInitialized) {
|
|
6408
|
+
resolve();
|
|
6409
|
+
return;
|
|
6410
|
+
}
|
|
6411
|
+
let resolved = false;
|
|
6412
|
+
const timeout = setTimeout(() => {
|
|
6413
|
+
var _a2;
|
|
6414
|
+
if (!resolved) {
|
|
6415
|
+
resolved = true;
|
|
6416
|
+
log(((_a2 = this.config) == null ? void 0 : _a2.debug) || false, "\u23F1\uFE0F Client ready timeout \u2014 proceeding");
|
|
9200
6417
|
resolve();
|
|
9201
|
-
}
|
|
6418
|
+
}
|
|
6419
|
+
}, 1e4);
|
|
6420
|
+
this.unsubscribe = this.client.subscribe(() => {
|
|
6421
|
+
var _a2;
|
|
6422
|
+
if (!resolved && ((_a2 = this.client) == null ? void 0 : _a2.state.isInitialized)) {
|
|
6423
|
+
resolved = true;
|
|
6424
|
+
clearTimeout(timeout);
|
|
9202
6425
|
resolve();
|
|
9203
|
-
} else {
|
|
9204
|
-
retries++;
|
|
9205
|
-
setTimeout(checkReady, 50);
|
|
9206
6426
|
}
|
|
9207
|
-
};
|
|
9208
|
-
checkReady();
|
|
6427
|
+
});
|
|
9209
6428
|
});
|
|
9210
6429
|
}
|
|
9211
6430
|
async initializeFunnel() {
|
|
9212
6431
|
var _a, _b, _c;
|
|
9213
6432
|
if (!((_a = this.client) == null ? void 0 : _a.funnel)) return null;
|
|
6433
|
+
const customerId = (_b = this.client.state.auth.customer) == null ? void 0 : _b.id;
|
|
6434
|
+
const sessionId = (_c = this.client.state.auth.session) == null ? void 0 : _c.sessionId;
|
|
6435
|
+
if (!customerId && !sessionId) {
|
|
6436
|
+
warn("No auth session available \u2014 funnel init may fail.");
|
|
6437
|
+
}
|
|
9214
6438
|
const authSession = {
|
|
9215
|
-
customerId:
|
|
9216
|
-
sessionId:
|
|
6439
|
+
customerId: customerId || "anon_placeholder",
|
|
6440
|
+
sessionId: sessionId || "sess_placeholder"
|
|
9217
6441
|
};
|
|
9218
6442
|
const store = {
|
|
9219
6443
|
id: this.config.storeId,
|
|
9220
|
-
accountId: this.config.accountId
|
|
6444
|
+
accountId: this.config.accountId
|
|
9221
6445
|
};
|
|
9222
6446
|
const entryStepId = this.config.stepId;
|
|
9223
|
-
|
|
9224
|
-
throw new Error("stepId is required for external page tracking (URL mapping does not work for external pages)");
|
|
9225
|
-
}
|
|
9226
|
-
log(this.config.debug, "\u{1F50D} Initializing external page at step:", entryStepId);
|
|
6447
|
+
log(this.config.debug, "\u{1F50D} Initializing funnel at step:", entryStepId);
|
|
9227
6448
|
return this.client.funnel.initialize(
|
|
9228
6449
|
authSession,
|
|
9229
6450
|
store,
|
|
9230
6451
|
this.config.funnelId || getUrlParam("funnelId") || void 0,
|
|
9231
6452
|
entryStepId
|
|
9232
|
-
// ✅ Explicitly tell orchestrator which step we're on
|
|
9233
6453
|
);
|
|
9234
6454
|
}
|
|
9235
6455
|
};
|
|
@@ -9239,29 +6459,6 @@ var TagadaTrackerBundle = (() => {
|
|
|
9239
6459
|
}
|
|
9240
6460
|
return __toCommonJS(external_tracker_exports);
|
|
9241
6461
|
})();
|
|
9242
|
-
/*! Bundled license information:
|
|
9243
|
-
|
|
9244
|
-
detect-europe-js/dist/esm/index.js:
|
|
9245
|
-
(*! detectEurope.js v0.1.2
|
|
9246
|
-
Determine whether a user is from the European Union (EU) area
|
|
9247
|
-
https://github.com/faisalman/detect-europe-js
|
|
9248
|
-
Author: Faisal Salman <f@faisalman.com>
|
|
9249
|
-
MIT License *)
|
|
9250
|
-
|
|
9251
|
-
ua-is-frozen/dist/esm/index.js:
|
|
9252
|
-
(*! isFrozenUA
|
|
9253
|
-
A freeze-test for your user-agent string
|
|
9254
|
-
https://github.com/faisalman/ua-is-frozen
|
|
9255
|
-
Author: Faisal Salman <f@faisalman.com>
|
|
9256
|
-
MIT License *)
|
|
9257
|
-
|
|
9258
|
-
is-standalone-pwa/dist/esm/index.js:
|
|
9259
|
-
(*! isStandalonePWA 0.1.1
|
|
9260
|
-
Detect if PWA is running in standalone mode
|
|
9261
|
-
https://github.com/faisalman/is-standalone-pwa
|
|
9262
|
-
Author: Faisal Salman <f@faisalman.com>
|
|
9263
|
-
MIT License *)
|
|
9264
|
-
*/
|
|
9265
6462
|
// Expose TagadaTracker globally
|
|
9266
6463
|
if (typeof window !== 'undefined' && TagadaTrackerBundle && TagadaTrackerBundle.TagadaTracker) {
|
|
9267
6464
|
window.TagadaTracker = TagadaTrackerBundle.TagadaTracker;
|