devframe 0.9.0-beta.1 → 0.9.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/{_shared-DmpWW-HH.d.mts → _shared-BPmX9fqK.d.mts} +2 -4
  2. package/dist/{_shared-CttmCMBi.mjs → _shared-CbZ_yhbz.mjs} +2 -4
  3. package/dist/adapters/build.d.mts +10 -12
  4. package/dist/adapters/build.mjs +26 -30
  5. package/dist/adapters/cac.d.mts +1 -1
  6. package/dist/adapters/cac.mjs +6 -7
  7. package/dist/adapters/dev.d.mts +22 -8
  8. package/dist/adapters/dev.mjs +2 -2
  9. package/dist/adapters/embedded.d.mts +1 -1
  10. package/dist/adapters/initiate.d.mts +5 -4
  11. package/dist/adapters/initiate.mjs +1 -1
  12. package/dist/adapters/mcp.d.mts +1 -8
  13. package/dist/adapters/mcp.mjs +1 -1
  14. package/dist/{agent-tool-name-C3b5vEwJ.mjs → agent-tool-name-EgfoFO8C.mjs} +0 -3
  15. package/dist/cli/main.d.mts +0 -2
  16. package/dist/cli/main.mjs +4 -8
  17. package/dist/client/index.d.mts +5 -5
  18. package/dist/client/index.mjs +24 -1179
  19. package/dist/constants.d.mts +10 -2
  20. package/dist/constants.mjs +10 -2
  21. package/dist/{context-CSCwoABx.d.mts → context-B3YUu_95.d.mts} +19 -1
  22. package/dist/{context-Du11TLcO.mjs → context-CEe4PBz1.mjs} +23 -305
  23. package/dist/{context-C33rR7n0.mjs → context-xdynGSLP.mjs} +10 -1
  24. package/dist/{dev-BEveeA5H.mjs → dev--rAPzbvO.mjs} +16 -10
  25. package/dist/{devframe-Bdd9YXTy.d.mts → devframe-DJMg0WLe.d.mts} +97 -113
  26. package/dist/{diagnostics-hwjXp_UV.mjs → diagnostics-CD8nlgll.mjs} +1 -3
  27. package/dist/{diagnostics-DLYH5oD3.mjs → diagnostics-DOQPnQmX.mjs} +35 -5
  28. package/dist/{dist-D8jAMwxU.mjs → dist-eNI9qM_I.mjs} +1 -0
  29. package/dist/{host-agent-CpbAoqBx.mjs → host-agent-xLCSe65D.mjs} +41 -7
  30. package/dist/{host-h3-CzCZwtuV.mjs → host-h3-Crkzm42q.mjs} +2 -2
  31. package/dist/{http-DLr_cJZ7.mjs → http-DYpK0cUi.mjs} +5 -12
  32. package/dist/{index-CZRd2K1C.d.mts → index-CB-fSUyn.d.mts} +2 -2
  33. package/dist/{index-DSCq4M4q.d.mts → index-tdrk1bzV.d.mts} +1 -1
  34. package/dist/index.d.mts +7 -5
  35. package/dist/{instance-registry-BQqGoDO9.mjs → instance-registry-WvQkt42E.mjs} +1 -7
  36. package/dist/{instance-shell-KRdee1QF.mjs → instance-shell-CMFyszWJ.mjs} +9 -8
  37. package/dist/{instance-shell-DBTXTSjN.d.mts → instance-shell-CljiKq1c.d.mts} +3 -12
  38. package/dist/internal/index.d.mts +265 -18
  39. package/dist/internal/index.mjs +9 -7
  40. package/dist/node/auth.d.mts +2 -2
  41. package/dist/node/auth.mjs +1 -1
  42. package/dist/node/hub-internals.d.mts +2 -2
  43. package/dist/node/hub-internals.mjs +2 -2
  44. package/dist/node/index.d.mts +3 -3
  45. package/dist/node/index.mjs +2 -2
  46. package/dist/nostics-CzECRXpE.mjs +59 -0
  47. package/dist/nostics-SPGDgHEP.d.mts +33 -0
  48. package/dist/recipes/common-rpc-functions.d.mts +3 -3
  49. package/dist/recipes/interactive-auth.d.mts +2 -2
  50. package/dist/recipes/interactive-auth.mjs +3 -3
  51. package/dist/remote-assets-Bg4gCUZ_.d.mts +123 -0
  52. package/dist/remote-assets-nTTxY2MU.mjs +636 -0
  53. package/dist/rpc/dump.d.mts +1 -1
  54. package/dist/rpc/dump.mjs +1 -1
  55. package/dist/rpc/index.d.mts +2 -2
  56. package/dist/rpc/index.mjs +3 -3
  57. package/dist/rpc/transports/sse-client.d.mts +1 -1
  58. package/dist/rpc/transports/sse-client.mjs +1 -1
  59. package/dist/rpc/transports/sse-server.d.mts +2 -2
  60. package/dist/rpc/transports/sse-server.mjs +2 -2
  61. package/dist/rpc/transports/ws-bun.d.mts +2 -2
  62. package/dist/rpc/transports/ws-bun.mjs +1 -1
  63. package/dist/rpc/transports/ws-client.d.mts +1 -1
  64. package/dist/rpc/transports/ws-client.mjs +1 -1
  65. package/dist/rpc/transports/ws-server.d.mts +1 -1
  66. package/dist/rpc/transports/ws-server.mjs +1 -1
  67. package/dist/{rpc-core-CGctXToO.d.mts → rpc-core-Cc4lucI0.d.mts} +3 -3
  68. package/dist/{rpc-core-CqcJkAu9.mjs → rpc-core-DMTe-hLo.mjs} +1 -1
  69. package/dist/{serialization-BHY8M5NQ.mjs → serialization-BGzEwAdr.mjs} +1 -1
  70. package/dist/{sse-client-BsIK3hMD.d.mts → sse-client-CFBOIaUi.d.mts} +1 -1
  71. package/dist/state-Cc1IeSmQ.mjs +1291 -0
  72. package/dist/{static-CvjkO8QE.mjs → static-BPZ1_OPA.mjs} +2 -2
  73. package/dist/storage-CYye7P7L.mjs +137 -0
  74. package/dist/types/index.d.mts +6 -4
  75. package/dist/{types-CnJSgRVa.d.mts → types-Djq7CBXh.d.mts} +0 -7
  76. package/dist/utils/agent-tool-name.d.mts +0 -3
  77. package/dist/utils/agent-tool-name.mjs +0 -3
  78. package/dist/utils/events.d.mts +1 -1
  79. package/dist/utils/get-port.d.mts +17 -0
  80. package/dist/utils/get-port.mjs +2 -0
  81. package/dist/utils/nostics.d.mts +2 -0
  82. package/dist/utils/nostics.mjs +2 -0
  83. package/dist/utils/open.d.mts +2 -10
  84. package/dist/utils/open.mjs +56 -1
  85. package/dist/utils/remote-assets.d.mts +15 -0
  86. package/dist/utils/remote-assets.mjs +2 -0
  87. package/dist/utils/serve-static.d.mts +13 -5
  88. package/dist/utils/serve-static.mjs +119 -9
  89. package/dist/utils/shared-state.d.mts +1 -1
  90. package/dist/utils/streaming-channel.d.mts +1 -1
  91. package/dist/{validation-BiuDXTKW.mjs → validation-CpXFB6Dz.mjs} +1 -1
  92. package/dist/{wire-codec-9VhIKnyp.mjs → wire-codec-0K-o5MYW.mjs} +1 -3
  93. package/dist/{ws-client-CdNuATYa.d.mts → ws-client-DhjNyQo3.d.mts} +1 -1
  94. package/dist/{ws-server-Bk1hOG3X.mjs → ws-server-BdSLrhxE.mjs} +1 -1
  95. package/dist/{ws-server-Ces08fjP.d.mts → ws-server-D1d3QM9f.d.mts} +1 -1
  96. package/package.json +4 -4
  97. package/skills/devframe/SKILL.md +10 -11
  98. package/dist/diagnostics-reporter-CsIG85Q5.mjs +0 -38
  99. package/dist/helpers/vite.d.mts +0 -104
  100. package/dist/helpers/vite.mjs +0 -93
  101. package/dist/open-Dz4V4irZ.mjs +0 -547
  102. package/dist/state-BeUHDDjk.mjs +0 -108
  103. package/dist/storage-BcmVEJRc.mjs +0 -1122
  104. package/skills/devframe/templates/spa-devframe.ts +0 -38
@@ -87,16 +87,35 @@ var RpcCacheManager = class {
87
87
  }
88
88
  };
89
89
  //#endregion
90
- //#region src/utils/diagnostics-reporter.ts
90
+ //#region src/utils/nostics.ts
91
91
  const formatAnsi = ansiFormatter(colors);
92
+ /**
93
+ * The reporter every {@link defineDiagnostics} call below wires in ahead of
94
+ * any caller-supplied ones: prints the diagnostic through devframe's own
95
+ * ANSI colors via `console[method]` (default `'warn'`).
96
+ */
92
97
  function devframeReporter(d, { method = "warn" } = {}) {
93
98
  console[method](formatAnsi(d));
94
99
  }
100
+ /**
101
+ * Drop-in replacement for `nostics`'s `defineDiagnostics()` with devframe's
102
+ * ANSI console reporter pre-wired ahead of any `reporters` passed in. Every
103
+ * `diagnostics.ts` in devframe core, `@devframes/hub`, `@devframes/json-render`,
104
+ * and the built-in plugins defines its codes through this instead of
105
+ * `nostics`'s own `defineDiagnostics` — the reporter registration lives
106
+ * here, once, so none of them need to build their own reporter (`colors`,
107
+ * `ansiFormatter`) or take a direct dependency on `nostics` themselves.
108
+ */
109
+ function defineDiagnostics$1(options) {
110
+ return defineDiagnostics({
111
+ ...options,
112
+ reporters: [devframeReporter, ...options.reporters ?? []]
113
+ });
114
+ }
95
115
  //#endregion
96
116
  //#region src/rpc/diagnostics.ts
97
- const diagnostics = defineDiagnostics({
117
+ const diagnostics = defineDiagnostics$1({
98
118
  docsBase: "https://devfra.me/errors",
99
- reporters: [devframeReporter],
100
119
  codes: {
101
120
  DF0019: {
102
121
  why: (p) => `RPC function "${p.name}" has \`agent\` set but \`jsonSerializable\` is not \`true\` — MCP requires JSON-serializable data.`,
@@ -703,7 +722,6 @@ const EMPTY_WIRE_DEFS = /* @__PURE__ */ new Map();
703
722
  * don't collide across connections.
704
723
  *
705
724
  * @internal
706
- * implementations; not part of the stable public API.
707
725
  */
708
726
  function createRpcWireCodec(definitions = EMPTY_WIRE_DEFS) {
709
727
  const pendingRequestMethods = /* @__PURE__ */ new Map();
@@ -876,1168 +894,6 @@ function createRpcClient(functions, options) {
876
894
  });
877
895
  }
878
896
  //#endregion
879
- //#region ../../node_modules/.pnpm/ua-parser-modern@0.1.1/node_modules/ua-parser-modern/dist/index.mjs
880
- const EMPTY = "";
881
- const UNKNOWN = "?";
882
- const MAJOR = "major";
883
- const MODEL = "model";
884
- const NAME = "name";
885
- const TYPE = "type";
886
- const VENDOR = "vendor";
887
- const VERSION = "version";
888
- const ARCHITECTURE = "architecture";
889
- const CONSOLE = "console";
890
- const MOBILE = "mobile";
891
- const TABLET = "tablet";
892
- const SMARTTV = "smarttv";
893
- const WEARABLE = "wearable";
894
- const EMBEDDED = "embedded";
895
- const UA_MAX_LENGTH = 500;
896
- const AMAZON = "Amazon";
897
- const APPLE = "Apple";
898
- const ASUS = "ASUS";
899
- const BLACKBERRY = "BlackBerry";
900
- const BROWSER_LABEL = "Browser";
901
- const CHROME = "Chrome";
902
- const EDGE = "Edge";
903
- const FIREFOX = "Firefox";
904
- const GOOGLE = "Google";
905
- const HUAWEI = "Huawei";
906
- const LG = "LG";
907
- const MICROSOFT = "Microsoft";
908
- const MOTOROLA = "Motorola";
909
- const OPERA = "Opera";
910
- const SAMSUNG = "Samsung";
911
- const SHARP = "Sharp";
912
- const SONY = "Sony";
913
- const XIAOMI = "Xiaomi";
914
- const ZEBRA = "Zebra";
915
- const FACEBOOK = "Facebook";
916
- const CHROMIUM_OS = "Chromium OS";
917
- const MAC_OS = "Mac OS";
918
- function extend(regexes, extensions = {}) {
919
- const mergedRegexes = {};
920
- for (const key of Object.keys(regexes)) {
921
- const extension = extensions[key];
922
- if (extension && extension.length % 2 === 0) mergedRegexes[key] = [...extension, ...regexes[key]];
923
- else mergedRegexes[key] = regexes[key];
924
- }
925
- return mergedRegexes;
926
- }
927
- function enumerize(arr) {
928
- const enums = {};
929
- for (let i = 0; i < arr.length; i++) enums[arr[i].toUpperCase()] = arr[i];
930
- return enums;
931
- }
932
- function lowerize(str) {
933
- return str.toLowerCase();
934
- }
935
- function has(str1, str2) {
936
- return typeof str1 === "string" ? lowerize(str2).includes(lowerize(str1)) : false;
937
- }
938
- function majorize(version) {
939
- return typeof version === "string" ? version.replace(/[^\d.]/g, EMPTY).split(".")[0] : void 0;
940
- }
941
- function trim(str, len) {
942
- const result = str.replace(/^\s+/, EMPTY);
943
- return typeof len === "undefined" ? result : result.substring(0, len);
944
- }
945
- function rgxMapper(ua, arrays, augment) {
946
- const result = augment ?? {};
947
- for (let i = 0; i < arrays.length; i += 2) {
948
- const regex = arrays[i];
949
- const props = arrays[i + 1];
950
- for (let j = 0; j < regex.length; j++) {
951
- const matcher = regex[j];
952
- if (!matcher) break;
953
- const matches = matcher.exec(ua);
954
- if (!matches) continue;
955
- for (let p = 0; p < props.length; p++) {
956
- const match = matches[p + 1];
957
- const q = props[p];
958
- if (Array.isArray(q)) {
959
- const key = q[0];
960
- const length = q.length;
961
- if (length === 2) {
962
- const value = q[1];
963
- if (typeof value === "function") result[key] = value(match, void 0, result);
964
- else result[key] = value;
965
- } else if (length === 3) {
966
- const arg1 = q[1];
967
- const arg2 = q[2];
968
- if (typeof arg1 === "function" && !("exec" in arg1) && !("test" in arg1)) result[key] = match ? arg1(match, arg2, result) : void 0;
969
- else result[key] = match ? match.replace(arg1, arg2) : void 0;
970
- } else if (length === 4) result[key] = match ? q[3](match.replace(q[1], q[2]), void 0, result) : void 0;
971
- } else result[q] = match || void 0;
972
- }
973
- return result;
974
- }
975
- }
976
- return result;
977
- }
978
- function strMapper(str, map) {
979
- for (const i in map) {
980
- const value = map[i];
981
- if (Array.isArray(value) && value.length > 0) {
982
- for (let j = 0; j < value.length; j++) if (has(value[j], str)) return i === UNKNOWN ? void 0 : i;
983
- } else if (has(value, str)) return i === UNKNOWN ? void 0 : i;
984
- }
985
- return str;
986
- }
987
- const oldSafariMap = {
988
- "1.0": "/8",
989
- "1.2": "/1",
990
- "1.3": "/3",
991
- "2.0": "/412",
992
- "2.0.2": "/416",
993
- "2.0.3": "/417",
994
- "2.0.4": "/419",
995
- "?": "/"
996
- };
997
- const windowsVersionMap = {
998
- "ME": "4.90",
999
- "NT 3.11": "NT3.51",
1000
- "NT 4.0": "NT4.0",
1001
- "2000": "NT 5.0",
1002
- "XP": ["NT 5.1", "NT 5.2"],
1003
- "Vista": "NT 6.0",
1004
- "7": "NT 6.1",
1005
- "8": "NT 6.2",
1006
- "8.1": "NT 6.3",
1007
- "10": ["NT 6.4", "NT 10.0"],
1008
- "RT": "ARM"
1009
- };
1010
- const regexes = {
1011
- browser: [
1012
- [/\b(?:crmo|crios)\/([\w.]+)/i],
1013
- [VERSION, [NAME, "Chrome"]],
1014
- [/edg(?:e|ios|a)?\/([\w.]+)/i],
1015
- [VERSION, [NAME, "Edge"]],
1016
- [
1017
- /(opera mini)\/([-\w.]+)/i,
1018
- /(opera [mobileta]{3,6})\b.+version\/([-\w.]+)/i,
1019
- /(opera)(?:.+version\/|[/ ]+)([\w.]+)/i
1020
- ],
1021
- [NAME, VERSION],
1022
- [/opios[/ ]+([\w.]+)/i],
1023
- [VERSION, [NAME, `${OPERA} Mini`]],
1024
- [/\bop(?:rg)?x\/([\w.]+)/i],
1025
- [VERSION, [NAME, `${OPERA} GX`]],
1026
- [/\bopr\/([\w.]+)/i],
1027
- [VERSION, [NAME, OPERA]],
1028
- [/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[/ ]?([\w.]+)/i],
1029
- [VERSION, [NAME, "Baidu"]],
1030
- [
1031
- /(kindle)\/([\w.]+)/i,
1032
- /(lunascape|maxthon|netfront|jasmine|blazer)[/ ]?([\w.]*)/i,
1033
- /(avant|iemobile|slim)\s?(?:browser)?[/ ]?([\w.]*)/i,
1034
- /(?:ms|\()(ie) ([\w.]+)/i,
1035
- /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w.]+)/i,
1036
- /(heytap|ovi)browser\/([\d.]+)/i,
1037
- /(weibo)__([\d.]+)/i
1038
- ],
1039
- [NAME, VERSION],
1040
- [/\bddg\/([\w.]+)/i],
1041
- [VERSION, [NAME, "DuckDuckGo"]],
1042
- [/(?:\buc? ?browser|juc.+ucweb)[/ ]?([\w.]+)/i],
1043
- [VERSION, [NAME, `UC${BROWSER_LABEL}`]],
1044
- [
1045
- /microm.+\bqbcore\/([\w.]+)/i,
1046
- /\bqbcore\/([\w.]+).+microm/i,
1047
- /micromessenger\/([\w.]+)/i
1048
- ],
1049
- [VERSION, [NAME, "WeChat"]],
1050
- [/konqueror\/([\w.]+)/i],
1051
- [VERSION, [NAME, "Konqueror"]],
1052
- [/trident.+rv[: ]([\w.]{1,9})\b.+like gecko/i],
1053
- [VERSION, [NAME, "IE"]],
1054
- [/ya(?:search)?browser\/([\w.]+)/i],
1055
- [VERSION, [NAME, "Yandex"]],
1056
- [/slbrowser\/([\w.]+)/i],
1057
- [VERSION, [NAME, `Smart Lenovo ${BROWSER_LABEL}`]],
1058
- [/(avast|avg)\/([\w.]+)/i],
1059
- [[
1060
- NAME,
1061
- /(.+)/,
1062
- `$1 Secure ${BROWSER_LABEL}`
1063
- ], VERSION],
1064
- [/\bfocus\/([\w.]+)/i],
1065
- [VERSION, [NAME, `${FIREFOX} Focus`]],
1066
- [/\bopt\/([\w.]+)/i],
1067
- [VERSION, [NAME, `${OPERA} Touch`]],
1068
- [/coc_coc\w+\/([\w.]+)/i],
1069
- [VERSION, [NAME, "Coc Coc"]],
1070
- [/dolfin\/([\w.]+)/i],
1071
- [VERSION, [NAME, "Dolphin"]],
1072
- [/coast\/([\w.]+)/i],
1073
- [VERSION, [NAME, `${OPERA} Coast`]],
1074
- [/miuibrowser\/([\w.]+)/i],
1075
- [VERSION, [NAME, `MIUI ${BROWSER_LABEL}`]],
1076
- [/fxios\/([-\w.]+)/i],
1077
- [VERSION, [NAME, FIREFOX]],
1078
- [/\bqihu|(qi?ho{0,2}|360)browser/i],
1079
- [[NAME, `360 ${BROWSER_LABEL}`]],
1080
- [/(oculus|sailfish|huawei|vivo)browser\/([\w.]+)/i],
1081
- [[
1082
- NAME,
1083
- /(.+)/,
1084
- `$1 ${BROWSER_LABEL}`
1085
- ], VERSION],
1086
- [/samsungbrowser\/([\w.]+)/i],
1087
- [VERSION, [NAME, `${SAMSUNG} Internet`]],
1088
- [/(comodo_dragon)\/([\w.]+)/i],
1089
- [[
1090
- NAME,
1091
- /_/g,
1092
- " "
1093
- ], VERSION],
1094
- [/metasr[/ ]?([\d.]+)/i],
1095
- [VERSION, [NAME, "Sogou Explorer"]],
1096
- [/(sogou)mo\w+\/([\d.]+)/i],
1097
- [[NAME, "Sogou Mobile"], VERSION],
1098
- [
1099
- /(electron)\/([\w.]+) safari/i,
1100
- /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w.]+))/i,
1101
- /m?(qqbrowser|2345Explorer)[/ ]?([\w.]+)/i
1102
- ],
1103
- [NAME, VERSION],
1104
- [/(lbbrowser)/i, /\[(linkedin)app\]/i],
1105
- [NAME],
1106
- [/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w.]+);)/i],
1107
- [[NAME, FACEBOOK], VERSION],
1108
- [
1109
- /(Klarna)\/([\w.]+)/i,
1110
- /(kakao(?:talk|story))[/ ]([\w.]+)/i,
1111
- /(naver)\(.*?(\d+\.[\w.]+).*\)/i,
1112
- /safari (line)\/([\w.]+)/i,
1113
- /\b(line)\/([\w.]+)\/iab/i,
1114
- /(alipay)client\/([\w.]+)/i,
1115
- /(twitter)(?:and| f.+e\/([\w.]+))/i,
1116
- /(chromium|instagram|snapchat)[/ ]([-\w.]+)/i
1117
- ],
1118
- [NAME, VERSION],
1119
- [/\bgsa\/([\w.]+) .*safari\//i],
1120
- [VERSION, [NAME, "GSA"]],
1121
- [/musical_ly(?:.+app_?version\/|_)([\w.]+)/i],
1122
- [VERSION, [NAME, "TikTok"]],
1123
- [/headlesschrome(?:\/([\w.]+)| )/i],
1124
- [VERSION, [NAME, `${CHROME} Headless`]],
1125
- [/ wv\).+(chrome)\/([\w.]+)/i],
1126
- [[NAME, `${CHROME} WebView`], VERSION],
1127
- [/droid.+ version\/([\w.]+)\b.+(?:mobile safari|safari)/i],
1128
- [VERSION, [NAME, `Android ${BROWSER_LABEL}`]],
1129
- [/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w.]+)/i],
1130
- [NAME, VERSION],
1131
- [/version\/([\w.,]+) .*mobile\/\w+ (safari)/i],
1132
- [VERSION, [NAME, "Mobile Safari"]],
1133
- [/version\/([\w(.|,)]+) .*(mobile ?safari|safari)/i],
1134
- [VERSION, NAME],
1135
- [/webkit.+?(mobile ?safari|safari)(\/[\w.]+)/i],
1136
- [NAME, [
1137
- VERSION,
1138
- strMapper,
1139
- oldSafariMap
1140
- ]],
1141
- [/(webkit|khtml)\/([\w.]+)/i],
1142
- [NAME, VERSION],
1143
- [/(navigator|netscape\d?)\/([-\w.]+)/i],
1144
- [[NAME, "Netscape"], VERSION],
1145
- [/mobile vr; rv:([\w.]+)\).+firefox/i],
1146
- [VERSION, [NAME, `${FIREFOX} Reality`]],
1147
- [
1148
- /ekiohf.+(flow)\/([\w.]+)/i,
1149
- /(swiftfox)/i,
1150
- /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[/ ]?([\w.+]+)/i,
1151
- /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w.]+)$/i,
1152
- /(firefox)\/([\w.]+)/i,
1153
- /(mozilla)\/([\w.]+) .+rv:.+gecko\/\d+/i,
1154
- /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[. ]?browser)[-/ ]?v?([\w.]+)/i,
1155
- /(links) \(([\w.]+)/i,
1156
- /panasonic;(viera)/i
1157
- ],
1158
- [NAME, VERSION],
1159
- [/(cobalt)\/([\w.]+)/i],
1160
- [NAME, [
1161
- VERSION,
1162
- /master.|lts./,
1163
- ""
1164
- ]]
1165
- ],
1166
- cpu: [
1167
- [/(amd|x(?:(?:86|64)[-_])?|wow|win)64[;)]/i],
1168
- [[ARCHITECTURE, "amd64"]],
1169
- [/(ia32(?=;))/i],
1170
- [[ARCHITECTURE, lowerize]],
1171
- [/((?:i[346]|x)86)[;)]/i],
1172
- [[ARCHITECTURE, "ia32"]],
1173
- [/\b(aarch64|arm(v?8e?l?|_?64))\b/i],
1174
- [[ARCHITECTURE, "arm64"]],
1175
- [/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],
1176
- [[ARCHITECTURE, "armhf"]],
1177
- [/windows (ce|mobile); ppc;/i],
1178
- [[ARCHITECTURE, "arm"]],
1179
- [/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],
1180
- [[
1181
- ARCHITECTURE,
1182
- /ower/,
1183
- EMPTY,
1184
- lowerize
1185
- ]],
1186
- [/(sun4\w)[;)]/i],
1187
- [[ARCHITECTURE, "sparc"]],
1188
- [/(avr32|ia64(?=;)|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],
1189
- [[ARCHITECTURE, lowerize]]
1190
- ],
1191
- device: [
1192
- [/\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],
1193
- [
1194
- MODEL,
1195
- [VENDOR, SAMSUNG],
1196
- [TYPE, TABLET]
1197
- ],
1198
- [
1199
- /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?\d+a?|galaxy nexus)/i,
1200
- /samsung[- ]([-\w]+)/i,
1201
- /sec-(sgh\w+)/i
1202
- ],
1203
- [
1204
- MODEL,
1205
- [VENDOR, SAMSUNG],
1206
- [TYPE, MOBILE]
1207
- ],
1208
- [/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],
1209
- [
1210
- MODEL,
1211
- [VENDOR, APPLE],
1212
- [TYPE, MOBILE]
1213
- ],
1214
- [
1215
- /\((ipad);[-\w),; ]+apple/i,
1216
- /applecoremedia\/[\w.]+ \((ipad)/i,
1217
- /\b(ipad)\d\d?,\d\d?[;\]].+ios/i
1218
- ],
1219
- [
1220
- MODEL,
1221
- [VENDOR, APPLE],
1222
- [TYPE, TABLET]
1223
- ],
1224
- [/(macintosh);/i],
1225
- [MODEL, [VENDOR, APPLE]],
1226
- [/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],
1227
- [
1228
- MODEL,
1229
- [VENDOR, SHARP],
1230
- [TYPE, MOBILE]
1231
- ],
1232
- [/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],
1233
- [
1234
- MODEL,
1235
- [VENDOR, HUAWEI],
1236
- [TYPE, TABLET]
1237
- ],
1238
- [/(?:huawei|honor)([-\w ]+)[;)]/i, /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][0-359c][adn]?)\b(?!.+d\/s)/i],
1239
- [
1240
- MODEL,
1241
- [VENDOR, HUAWEI],
1242
- [TYPE, MOBILE]
1243
- ],
1244
- [
1245
- /\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,
1246
- /\b; (\w+) build\/hm\1/i,
1247
- /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
1248
- /\b(redmi[\-_ ]?[\w ]+)(?: bui|\))/i,
1249
- /oid[^)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,
1250
- /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?\d?\w?[_ ]?(?:plus|se|lite)?)(?: bui|\))/i
1251
- ],
1252
- [
1253
- [
1254
- MODEL,
1255
- /_/g,
1256
- " "
1257
- ],
1258
- [VENDOR, XIAOMI],
1259
- [TYPE, MOBILE]
1260
- ],
1261
- [/oid[^)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, /\b(mi[-_ ]?pad[\w ]+)(?: bui|\))/i],
1262
- [
1263
- [
1264
- MODEL,
1265
- /_/g,
1266
- " "
1267
- ],
1268
- [VENDOR, XIAOMI],
1269
- [TYPE, TABLET]
1270
- ],
1271
- [/; (\w+) bui.+ oppo/i, /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],
1272
- [
1273
- MODEL,
1274
- [VENDOR, "OPPO"],
1275
- [TYPE, MOBILE]
1276
- ],
1277
- [/\b(opd2\d{3}a?) bui/i],
1278
- [
1279
- MODEL,
1280
- [VENDOR, "OPPO"],
1281
- [TYPE, TABLET]
1282
- ],
1283
- [/vivo (\w+)(?: bui|\))/i, /\b(v[12]\d{3}\w?[at])(?: bui|;)/i],
1284
- [
1285
- MODEL,
1286
- [VENDOR, "Vivo"],
1287
- [TYPE, MOBILE]
1288
- ],
1289
- [/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],
1290
- [
1291
- MODEL,
1292
- [VENDOR, "Realme"],
1293
- [TYPE, MOBILE]
1294
- ],
1295
- [
1296
- /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
1297
- /\bmot(?:orola)?[- ](\w*)/i,
1298
- /((?:moto[\w() ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
1299
- ],
1300
- [
1301
- MODEL,
1302
- [VENDOR, MOTOROLA],
1303
- [TYPE, MOBILE]
1304
- ],
1305
- [/\b(mz60\d|xoom[2 ]{0,2}) build\//i],
1306
- [
1307
- MODEL,
1308
- [VENDOR, MOTOROLA],
1309
- [TYPE, TABLET]
1310
- ],
1311
- [/((?=lg)?[vl]k-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],
1312
- [
1313
- MODEL,
1314
- [VENDOR, LG],
1315
- [TYPE, TABLET]
1316
- ],
1317
- [
1318
- /(lm(?:-?f100[nv]?|-[\w.]+)(?= bui|\))|nexus [45])/i,
1319
- /\blg[-e;/ ]+((?!browser|netcast|android tv)\w+)/i,
1320
- /\blg-?(\w+) bui/i
1321
- ],
1322
- [
1323
- MODEL,
1324
- [VENDOR, LG],
1325
- [TYPE, MOBILE]
1326
- ],
1327
- [/(ideatab[-\w ]+)/i, /lenovo ?(s[56]000[-\w]+|tab[\w ]+|yt[-\w]{6}|tb[-\w]{6})/i],
1328
- [
1329
- MODEL,
1330
- [VENDOR, "Lenovo"],
1331
- [TYPE, TABLET]
1332
- ],
1333
- [/(?:maemo|nokia).*(n900|lumia \d+)/i, /nokia[-_ ]?([-\w.]*)/i],
1334
- [
1335
- [
1336
- MODEL,
1337
- /_/g,
1338
- " "
1339
- ],
1340
- [VENDOR, "Nokia"],
1341
- [TYPE, MOBILE]
1342
- ],
1343
- [/(pixel c)\b/i],
1344
- [
1345
- MODEL,
1346
- [VENDOR, GOOGLE],
1347
- [TYPE, TABLET]
1348
- ],
1349
- [/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],
1350
- [
1351
- MODEL,
1352
- [VENDOR, GOOGLE],
1353
- [TYPE, MOBILE]
1354
- ],
1355
- [/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]?\d\.))/i],
1356
- [
1357
- MODEL,
1358
- [VENDOR, SONY],
1359
- [TYPE, MOBILE]
1360
- ],
1361
- [/sony tablet [ps]/i, /\b(?:sony)?sgp\w+(?: bui|\))/i],
1362
- [
1363
- [MODEL, "Xperia Tablet"],
1364
- [VENDOR, SONY],
1365
- [TYPE, TABLET]
1366
- ],
1367
- [/ (kb2005|in20[12]5|be20[12][59])\b/i, /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],
1368
- [
1369
- MODEL,
1370
- [VENDOR, "OnePlus"],
1371
- [TYPE, MOBILE]
1372
- ],
1373
- [
1374
- /(alexa)webm/i,
1375
- /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,
1376
- /(kf[a-z]+)( bui|\)).+silk\//i
1377
- ],
1378
- [
1379
- MODEL,
1380
- [VENDOR, AMAZON],
1381
- [TYPE, TABLET]
1382
- ],
1383
- [/((?:sd|kf)[0349hijor-uw]+)( bui|\)).+silk\//i],
1384
- [
1385
- [
1386
- MODEL,
1387
- /(.+)/g,
1388
- "Fire Phone $1"
1389
- ],
1390
- [VENDOR, AMAZON],
1391
- [TYPE, MOBILE]
1392
- ],
1393
- [/(playbook);[-\w),; ]+(rim)/i],
1394
- [
1395
- MODEL,
1396
- VENDOR,
1397
- [TYPE, TABLET]
1398
- ],
1399
- [/\b((?:bb[a-f]|st[hv])100-\d)/i, /\(bb10; (\w+)/i],
1400
- [
1401
- MODEL,
1402
- [VENDOR, BLACKBERRY],
1403
- [TYPE, MOBILE]
1404
- ],
1405
- [/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],
1406
- [
1407
- MODEL,
1408
- [VENDOR, ASUS],
1409
- [TYPE, TABLET]
1410
- ],
1411
- [/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],
1412
- [
1413
- MODEL,
1414
- [VENDOR, ASUS],
1415
- [TYPE, MOBILE]
1416
- ],
1417
- [/(nexus 9)/i],
1418
- [
1419
- MODEL,
1420
- [VENDOR, "HTC"],
1421
- [TYPE, TABLET]
1422
- ],
1423
- [
1424
- /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
1425
- /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
1426
- /(alcatel|geeksphone|nexian|panasonic(?!;|\.)|sony(?!-bra))[-_ ]?([-\w]*)/i
1427
- ],
1428
- [
1429
- VENDOR,
1430
- [
1431
- MODEL,
1432
- /_/g,
1433
- " "
1434
- ],
1435
- [TYPE, MOBILE]
1436
- ],
1437
- [/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],
1438
- [
1439
- MODEL,
1440
- [VENDOR, "Acer"],
1441
- [TYPE, TABLET]
1442
- ],
1443
- [/droid.+; (m[1-5] note) bui/i, /\bmz-([-\w]{2,})/i],
1444
- [
1445
- MODEL,
1446
- [VENDOR, "Meizu"],
1447
- [TYPE, MOBILE]
1448
- ],
1449
- [/; ((?:power )?armor[\w ]{0,8})(?: bui|\))/i],
1450
- [
1451
- MODEL,
1452
- [VENDOR, "Ulefone"],
1453
- [TYPE, MOBILE]
1454
- ],
1455
- [
1456
- /(blackberry|benq|palm(?=-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,
1457
- /(hp) ([\w ]+\w)/i,
1458
- /(asus)-?(\w+)/i,
1459
- /(microsoft); (lumia[\w ]+)/i,
1460
- /(lenovo)[-_ ]?([-\w]+)/i,
1461
- /(jolla)/i,
1462
- /(oppo) ?([\w ]+) bui/i
1463
- ],
1464
- [
1465
- VENDOR,
1466
- MODEL,
1467
- [TYPE, MOBILE]
1468
- ],
1469
- [
1470
- /(kobo)\s(ereader|touch)/i,
1471
- /(archos) (gamepad2?)/i,
1472
- /(hp).+(touchpad(?!.+tablet)|tablet)/i,
1473
- /(kindle)\/([\w.]+)/i,
1474
- /(nook)[\w ]+build\/(\w+)/i,
1475
- /(dell) (strea[kpr\d ]*[\dko])/i,
1476
- /(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
1477
- /(trinity)[- ]*(t\d{3}) bui/i,
1478
- /(gigaset)[- ]+(q\w{1,9}) bui/i,
1479
- /(vodafone) ([\w ]+)(?:\)| bui)/i
1480
- ],
1481
- [
1482
- VENDOR,
1483
- MODEL,
1484
- [TYPE, TABLET]
1485
- ],
1486
- [/(surface duo)/i],
1487
- [
1488
- MODEL,
1489
- [VENDOR, MICROSOFT],
1490
- [TYPE, TABLET]
1491
- ],
1492
- [/droid [\d.]+; (fp\du?)(?: b|\))/i],
1493
- [
1494
- MODEL,
1495
- [VENDOR, "Fairphone"],
1496
- [TYPE, MOBILE]
1497
- ],
1498
- [/(u304aa)/i],
1499
- [
1500
- MODEL,
1501
- [VENDOR, "AT&T"],
1502
- [TYPE, MOBILE]
1503
- ],
1504
- [/\bsie-(\w*)/i],
1505
- [
1506
- MODEL,
1507
- [VENDOR, "Siemens"],
1508
- [TYPE, MOBILE]
1509
- ],
1510
- [/\b(rct\w+) b/i],
1511
- [
1512
- MODEL,
1513
- [VENDOR, "RCA"],
1514
- [TYPE, TABLET]
1515
- ],
1516
- [/\b(venue[\d ]{2,7}) b/i],
1517
- [
1518
- MODEL,
1519
- [VENDOR, "Dell"],
1520
- [TYPE, TABLET]
1521
- ],
1522
- [/\b(q(?:mv|ta)\w+) b/i],
1523
- [
1524
- MODEL,
1525
- [VENDOR, "Verizon"],
1526
- [TYPE, TABLET]
1527
- ],
1528
- [/\b(?:barnes[& ]+noble |bn[rt])([\w+ ]*) b/i],
1529
- [
1530
- MODEL,
1531
- [VENDOR, "Barnes & Noble"],
1532
- [TYPE, TABLET]
1533
- ],
1534
- [/\b(tm\d{3}\w+) b/i],
1535
- [
1536
- MODEL,
1537
- [VENDOR, "NuVision"],
1538
- [TYPE, TABLET]
1539
- ],
1540
- [/\b(k88) b/i],
1541
- [
1542
- MODEL,
1543
- [VENDOR, "ZTE"],
1544
- [TYPE, TABLET]
1545
- ],
1546
- [/\b(nx\d{3}j) b/i],
1547
- [
1548
- MODEL,
1549
- [VENDOR, "ZTE"],
1550
- [TYPE, MOBILE]
1551
- ],
1552
- [/\b(gen\d{3}) b.+49h/i],
1553
- [
1554
- MODEL,
1555
- [VENDOR, "Swiss"],
1556
- [TYPE, MOBILE]
1557
- ],
1558
- [/\b(zur\d{3}) b/i],
1559
- [
1560
- MODEL,
1561
- [VENDOR, "Swiss"],
1562
- [TYPE, TABLET]
1563
- ],
1564
- [/\b((zeki)?tb.*\b) b/i],
1565
- [
1566
- MODEL,
1567
- [VENDOR, "Zeki"],
1568
- [TYPE, TABLET]
1569
- ],
1570
- [/\b([yr]\d{2}) b/i, /\b(dragon[- ]+touch |dt)(\w{5}) b/i],
1571
- [
1572
- [VENDOR, "Dragon Touch"],
1573
- MODEL,
1574
- [TYPE, TABLET]
1575
- ],
1576
- [/\b(ns-?\w{0,9}) b/i],
1577
- [
1578
- MODEL,
1579
- [VENDOR, "Insignia"],
1580
- [TYPE, TABLET]
1581
- ],
1582
- [/\b((nxa|next)-?\w{0,9}) b/i],
1583
- [
1584
- MODEL,
1585
- [VENDOR, "NextBook"],
1586
- [TYPE, TABLET]
1587
- ],
1588
- [/\b(xtreme_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],
1589
- [
1590
- [VENDOR, "Voice"],
1591
- MODEL,
1592
- [TYPE, MOBILE]
1593
- ],
1594
- [/\b(lvtel-)?(v1[12]) b/i],
1595
- [
1596
- [VENDOR, "LvTel"],
1597
- MODEL,
1598
- [TYPE, MOBILE]
1599
- ],
1600
- [/\b(ph-1) /i],
1601
- [
1602
- MODEL,
1603
- [VENDOR, "Essential"],
1604
- [TYPE, MOBILE]
1605
- ],
1606
- [/\b(v(100md|700na|7011|917g).*\b) b/i],
1607
- [
1608
- MODEL,
1609
- [VENDOR, "Envizen"],
1610
- [TYPE, TABLET]
1611
- ],
1612
- [/\b(trio[-\w. ]+) b/i],
1613
- [
1614
- MODEL,
1615
- [VENDOR, "MachSpeed"],
1616
- [TYPE, TABLET]
1617
- ],
1618
- [/\btu_(1491) b/i],
1619
- [
1620
- MODEL,
1621
- [VENDOR, "Rotor"],
1622
- [TYPE, TABLET]
1623
- ],
1624
- [/(shield[\w ]+) b/i],
1625
- [
1626
- MODEL,
1627
- [VENDOR, "Nvidia"],
1628
- [TYPE, TABLET]
1629
- ],
1630
- [/(sprint) (\w+)/i],
1631
- [
1632
- VENDOR,
1633
- MODEL,
1634
- [TYPE, MOBILE]
1635
- ],
1636
- [/(kin\.[onetw]{3})/i],
1637
- [
1638
- [
1639
- MODEL,
1640
- /\./g,
1641
- " "
1642
- ],
1643
- [VENDOR, MICROSOFT],
1644
- [TYPE, MOBILE]
1645
- ],
1646
- [/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],
1647
- [
1648
- MODEL,
1649
- [VENDOR, ZEBRA],
1650
- [TYPE, TABLET]
1651
- ],
1652
- [/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],
1653
- [
1654
- MODEL,
1655
- [VENDOR, ZEBRA],
1656
- [TYPE, MOBILE]
1657
- ],
1658
- [/smart-tv.+(samsung)/i],
1659
- [VENDOR, [TYPE, SMARTTV]],
1660
- [/hbbtv.+maple;(\d+)/i],
1661
- [
1662
- [
1663
- MODEL,
1664
- /^/,
1665
- "SmartTV"
1666
- ],
1667
- [VENDOR, SAMSUNG],
1668
- [TYPE, SMARTTV]
1669
- ],
1670
- [/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],
1671
- [[VENDOR, LG], [TYPE, SMARTTV]],
1672
- [/(apple) ?tv/i],
1673
- [
1674
- VENDOR,
1675
- [MODEL, `${APPLE} TV`],
1676
- [TYPE, SMARTTV]
1677
- ],
1678
- [/crkey/i],
1679
- [
1680
- [MODEL, `${CHROME}cast`],
1681
- [VENDOR, GOOGLE],
1682
- [TYPE, SMARTTV]
1683
- ],
1684
- [/droid.+aft(\w+)( bui|\))/i],
1685
- [
1686
- MODEL,
1687
- [VENDOR, AMAZON],
1688
- [TYPE, SMARTTV]
1689
- ],
1690
- [/\(dtv[);].+(aquos)/i, /(aquos-tv[\w ]+)\)/i],
1691
- [
1692
- MODEL,
1693
- [VENDOR, SHARP],
1694
- [TYPE, SMARTTV]
1695
- ],
1696
- [/(bravia[\w ]+)( bui|\))/i],
1697
- [
1698
- MODEL,
1699
- [VENDOR, SONY],
1700
- [TYPE, SMARTTV]
1701
- ],
1702
- [/(mitv-\w{5}) bui/i],
1703
- [
1704
- MODEL,
1705
- [VENDOR, XIAOMI],
1706
- [TYPE, SMARTTV]
1707
- ],
1708
- [/Hbbtv.*(technisat) (.*);/i],
1709
- [
1710
- VENDOR,
1711
- MODEL,
1712
- [TYPE, SMARTTV]
1713
- ],
1714
- [/\b(roku)[\dx]*[)/]((?:dvp-)?[\d.]*)/i, /hbbtv\/\d+\.\d+\.\d+ +\([\w+ ]*; *(\w[^;]*);([^;]*)/i],
1715
- [
1716
- [VENDOR, trim],
1717
- [MODEL, trim],
1718
- [TYPE, SMARTTV]
1719
- ],
1720
- [/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],
1721
- [[TYPE, SMARTTV]],
1722
- [/(ouya)/i, /(nintendo) ([wids3utch]+)/i],
1723
- [
1724
- VENDOR,
1725
- MODEL,
1726
- [TYPE, CONSOLE]
1727
- ],
1728
- [/droid.+; (shield) bui/i],
1729
- [
1730
- MODEL,
1731
- [VENDOR, "Nvidia"],
1732
- [TYPE, CONSOLE]
1733
- ],
1734
- [/(playstation [345portablevi]+)/i],
1735
- [
1736
- MODEL,
1737
- [VENDOR, SONY],
1738
- [TYPE, CONSOLE]
1739
- ],
1740
- [/\b(xbox(?: one)?(?!; xbox))[); ]/i],
1741
- [
1742
- MODEL,
1743
- [VENDOR, MICROSOFT],
1744
- [TYPE, CONSOLE]
1745
- ],
1746
- [/((pebble))app/i],
1747
- [
1748
- VENDOR,
1749
- MODEL,
1750
- [TYPE, WEARABLE]
1751
- ],
1752
- [/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i],
1753
- [
1754
- MODEL,
1755
- [VENDOR, APPLE],
1756
- [TYPE, WEARABLE]
1757
- ],
1758
- [/droid.+; (glass) \d/i],
1759
- [
1760
- MODEL,
1761
- [VENDOR, GOOGLE],
1762
- [TYPE, WEARABLE]
1763
- ],
1764
- [/droid.+; (wt63?0{2,3})\)/i],
1765
- [
1766
- MODEL,
1767
- [VENDOR, ZEBRA],
1768
- [TYPE, WEARABLE]
1769
- ],
1770
- [/(quest( \d| pro)?)/i],
1771
- [
1772
- MODEL,
1773
- [VENDOR, FACEBOOK],
1774
- [TYPE, WEARABLE]
1775
- ],
1776
- [/(tesla)(?: qtcarbrowser|\/[-\w.]+)/i],
1777
- [VENDOR, [TYPE, EMBEDDED]],
1778
- [/(aeobc)\b/i],
1779
- [
1780
- MODEL,
1781
- [VENDOR, AMAZON],
1782
- [TYPE, EMBEDDED]
1783
- ],
1784
- [/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i],
1785
- [MODEL, [TYPE, MOBILE]],
1786
- [/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],
1787
- [MODEL, [TYPE, TABLET]],
1788
- [/\b((tablet|tab)[;/]|focus\/\d(?!.+mobile))/i],
1789
- [[TYPE, TABLET]],
1790
- [/(phone|mobile(?:[;/]| [ \w/.]*safari)|pda(?=.+windows ce))/i],
1791
- [[TYPE, MOBILE]],
1792
- [/(android[-\w. ]{0,9});.+buil/i],
1793
- [MODEL, [VENDOR, "Generic"]]
1794
- ],
1795
- engine: [
1796
- [/windows.+ edge\/([\w.]+)/i],
1797
- [VERSION, [NAME, `${EDGE}HTML`]],
1798
- [/webkit\/537\.36.+chrome\/(?!27)([\w.]+)/i],
1799
- [VERSION, [NAME, "Blink"]],
1800
- [
1801
- /(presto)\/([\w.]+)/i,
1802
- /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w.]+)/i,
1803
- /ekioh(flow)\/([\w.]+)/i,
1804
- /(khtml|tasman|links)[/ ]\(?([\w.]+)/i,
1805
- /(icab)[/ ]([23]\.[\d.]+)/i,
1806
- /\b(libweb)/i
1807
- ],
1808
- [NAME, VERSION],
1809
- [/rv:([\w.]{1,9})\b.+(gecko)/i],
1810
- [VERSION, NAME]
1811
- ],
1812
- os: [
1813
- [/microsoft (windows) (vista|xp)/i],
1814
- [NAME, VERSION],
1815
- [/(windows (?:phone(?: os)?|mobile))[/ ]?([.\w ]*)/i],
1816
- [NAME, [
1817
- VERSION,
1818
- strMapper,
1819
- windowsVersionMap
1820
- ]],
1821
- [
1822
- /windows nt 6\.2; (arm)/i,
1823
- /windows[/ ]?([ntce\d. ]+\w)(?!.+xbox)/i,
1824
- /(?:win(?=[39n])|win 9x )([nt\d.]+)/i
1825
- ],
1826
- [[
1827
- VERSION,
1828
- strMapper,
1829
- windowsVersionMap
1830
- ], [NAME, "Windows"]],
1831
- [
1832
- /ip[honead]{2,4}\b(?:.*os (\w+) like mac|; opera)/i,
1833
- /(?:ios;fbsv\/|iphone.+ios[/ ])([\d.]+)/i,
1834
- /cfnetwork\/.+darwin/i
1835
- ],
1836
- [[
1837
- VERSION,
1838
- /_/g,
1839
- "."
1840
- ], [NAME, "iOS"]],
1841
- [/(mac os x) ?([\w. ]*)/i, /(macintosh|mac_powerpc\b)(?!.+haiku)/i],
1842
- [[NAME, MAC_OS], [
1843
- VERSION,
1844
- /_/g,
1845
- "."
1846
- ]],
1847
- [/droid ([\w.]+)\b.+(android[- ]x86|harmonyos)/i],
1848
- [VERSION, NAME],
1849
- [
1850
- /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-/ ]?([\w.]*)/i,
1851
- /(blackberry)\w*\/([\w.]*)/i,
1852
- /(tizen|kaios)[/ ]([\w.]+)/i,
1853
- /\((series40);/i
1854
- ],
1855
- [NAME, VERSION],
1856
- [/\(bb(10);/i],
1857
- [VERSION, [NAME, BLACKBERRY]],
1858
- [/(?:symbian ?os|symbos|s60(?=;)|series60)[-/ ]?([\w.]*)/i],
1859
- [VERSION, [NAME, "Symbian"]],
1860
- [/mozilla\/[\d.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w.]+)/i],
1861
- [VERSION, [NAME, `${FIREFOX} OS`]],
1862
- [/web0s;.+rt(tv)/i, /\b(?:hp)?wos(?:browser)?\/([\w.]+)/i],
1863
- [VERSION, [NAME, "webOS"]],
1864
- [/watch(?: ?os[,/]|\d,\d\/)([\d.]+)/i],
1865
- [VERSION, [NAME, "watchOS"]],
1866
- [/crkey\/([\d.]+)/i],
1867
- [VERSION, [NAME, `${CHROME}cast`]],
1868
- [/(cros) \w+(?:\)| ([\w.]+)\b)/i],
1869
- [[NAME, CHROMIUM_OS], VERSION],
1870
- [
1871
- /panasonic;(viera)/i,
1872
- /(netrange)mmh/i,
1873
- /(nettv)\/(\d+\.[\w.]+)/i,
1874
- /(nintendo|playstation) ([wids345portablevuch]+)/i,
1875
- /(xbox); +xbox ([^);]+)/i,
1876
- /\b(joli|palm)\b ?(?:os)?\/?([\w.]*)/i,
1877
- /(mint)[/() ]?(\w*)/i,
1878
- /(mageia|vectorlinux)[; ]/i,
1879
- /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-/ ]?(?!chrom|package)([-\w.]*)/i,
1880
- /(hurd|linux) ?([\w.]*)/i,
1881
- /(gnu) ?([\w.]*)/i,
1882
- /\b([-e-hrntopcs]{0,5}bsd|dragonfly)[/ ]?(?!amd|[ix346]{1,2}86)([\w.]*)/i,
1883
- /(haiku) (\w+)/i
1884
- ],
1885
- [NAME, VERSION],
1886
- [/(sunos) ?([\w.]*)/i],
1887
- [[NAME, "Solaris"], VERSION],
1888
- [
1889
- /((?:open)?solaris)[-/ ]?([\w.]*)/i,
1890
- /(aix) ((\d)(?=[.) ])[\w.])*/i,
1891
- /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,
1892
- /(unix) ?([\w.]*)/i
1893
- ],
1894
- [NAME, VERSION]
1895
- ]
1896
- };
1897
- function isExtensionsInput(input) {
1898
- return typeof input === "object" && input !== null;
1899
- }
1900
- Object.freeze(enumerize([
1901
- NAME,
1902
- VERSION,
1903
- MAJOR
1904
- ]));
1905
- Object.freeze(enumerize([ARCHITECTURE]));
1906
- Object.freeze(enumerize([
1907
- MODEL,
1908
- VENDOR,
1909
- TYPE,
1910
- CONSOLE,
1911
- MOBILE,
1912
- SMARTTV,
1913
- TABLET,
1914
- WEARABLE,
1915
- EMBEDDED
1916
- ]));
1917
- Object.freeze(enumerize([NAME, VERSION]));
1918
- Object.freeze(enumerize([NAME, VERSION]));
1919
- function getRuntimeNavigator() {
1920
- if (typeof window === "undefined" || !window.navigator) return void 0;
1921
- return window.navigator;
1922
- }
1923
- function normalizeUA(ua) {
1924
- return ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;
1925
- }
1926
- function createDefaultParserContext(uastring) {
1927
- if (typeof uastring === "string") return {
1928
- ua: normalizeUA(uastring),
1929
- isSelfNavigator: false,
1930
- navigator: void 0,
1931
- userAgentData: void 0,
1932
- regexMap: regexes
1933
- };
1934
- const navigator = getRuntimeNavigator();
1935
- const ua = normalizeUA(navigator && navigator.userAgent ? navigator.userAgent : EMPTY);
1936
- return {
1937
- ua,
1938
- isSelfNavigator: Boolean(navigator && navigator.userAgent === ua),
1939
- navigator,
1940
- userAgentData: navigator?.userAgentData,
1941
- regexMap: regexes
1942
- };
1943
- }
1944
- function createParserContext(uastringOrExtensions, extensions) {
1945
- if (!extensions && !isExtensionsInput(uastringOrExtensions)) return createDefaultParserContext(uastringOrExtensions);
1946
- const navigator = getRuntimeNavigator();
1947
- const uastring = isExtensionsInput(uastringOrExtensions) ? void 0 : uastringOrExtensions;
1948
- const resolvedExtensions = isExtensionsInput(uastringOrExtensions) ? uastringOrExtensions : extensions;
1949
- const ua = normalizeUA(uastring || (navigator && navigator.userAgent ? navigator.userAgent : EMPTY));
1950
- const userAgentData = navigator?.userAgentData;
1951
- return {
1952
- ua,
1953
- isSelfNavigator: Boolean(navigator && navigator.userAgent === ua),
1954
- navigator,
1955
- userAgentData,
1956
- regexMap: resolvedExtensions ? extend(regexes, resolvedExtensions) : regexes
1957
- };
1958
- }
1959
- function parseBrowserFromContext(context) {
1960
- const browser = {
1961
- name: void 0,
1962
- version: void 0,
1963
- major: void 0
1964
- };
1965
- rgxMapper(context.ua, context.regexMap.browser, browser);
1966
- browser.major = majorize(browser.version);
1967
- if (context.isSelfNavigator && context.navigator?.brave && typeof context.navigator.brave.isBrave === "function") browser.name = "Brave";
1968
- return browser;
1969
- }
1970
- function parseCPUFromContext(context) {
1971
- const cpu = { architecture: void 0 };
1972
- rgxMapper(context.ua, context.regexMap.cpu, cpu);
1973
- return cpu;
1974
- }
1975
- function parseDeviceFromContext(context) {
1976
- const device = {
1977
- vendor: void 0,
1978
- model: void 0,
1979
- type: void 0
1980
- };
1981
- rgxMapper(context.ua, context.regexMap.device, device);
1982
- if (context.isSelfNavigator && !device.type && context.userAgentData?.mobile) device.type = MOBILE;
1983
- if (context.isSelfNavigator && device.model === "Macintosh" && context.navigator && typeof context.navigator.standalone !== "undefined" && context.navigator.maxTouchPoints && context.navigator.maxTouchPoints > 2) {
1984
- device.model = "iPad";
1985
- device.type = TABLET;
1986
- }
1987
- return device;
1988
- }
1989
- function parseEngineFromContext(context) {
1990
- const engine = {
1991
- name: void 0,
1992
- version: void 0
1993
- };
1994
- rgxMapper(context.ua, context.regexMap.engine, engine);
1995
- return engine;
1996
- }
1997
- function parseOSFromContext(context) {
1998
- const os = {
1999
- name: void 0,
2000
- version: void 0
2001
- };
2002
- rgxMapper(context.ua, context.regexMap.os, os);
2003
- if (context.isSelfNavigator && !os.name && context.userAgentData?.platform && context.userAgentData.platform !== "Unknown") os.name = context.userAgentData.platform.replace(/chrome os/i, CHROMIUM_OS).replace(/macos/i, MAC_OS);
2004
- return os;
2005
- }
2006
- function parseUA(uastringOrExtensions, extensions) {
2007
- let context;
2008
- let browserCache;
2009
- let engineCache;
2010
- let osCache;
2011
- let deviceCache;
2012
- let cpuCache;
2013
- const getContext = () => context ||= createParserContext(uastringOrExtensions, extensions);
2014
- return {
2015
- get ua() {
2016
- return getContext().ua;
2017
- },
2018
- get browser() {
2019
- browserCache ||= parseBrowserFromContext(getContext());
2020
- return browserCache;
2021
- },
2022
- get engine() {
2023
- engineCache ||= parseEngineFromContext(getContext());
2024
- return engineCache;
2025
- },
2026
- get os() {
2027
- osCache ||= parseOSFromContext(getContext());
2028
- return osCache;
2029
- },
2030
- get device() {
2031
- deviceCache ||= parseDeviceFromContext(getContext());
2032
- return deviceCache;
2033
- },
2034
- get cpu() {
2035
- cpuCache ||= parseCPUFromContext(getContext());
2036
- return cpuCache;
2037
- }
2038
- };
2039
- }
2040
- //#endregion
2041
897
  //#region src/utils/promise.ts
2042
898
  function promiseWithResolver() {
2043
899
  let resolve;
@@ -2148,22 +1004,11 @@ function createLiveRpcClientMode(options) {
2148
1004
  }
2149
1005
  });
2150
1006
  let currentAuthToken = authToken;
2151
- function describeUA() {
2152
- const info = parseUA(navigator.userAgent);
2153
- return [
2154
- info.browser.name,
2155
- info.browser.version,
2156
- "|",
2157
- info.os.name,
2158
- info.os.version,
2159
- info.device.type
2160
- ].filter((i) => i).join(" ");
2161
- }
2162
1007
  async function requestTrustWithToken(token) {
2163
1008
  currentAuthToken = token;
2164
1009
  const result = await serverRpc.$call("anonymous:devframe:auth", {
2165
1010
  authToken: token,
2166
- ua: describeUA(),
1011
+ ua: navigator.userAgent,
2167
1012
  origin: location.origin
2168
1013
  });
2169
1014
  isTrusted = result.isTrusted;
@@ -2181,7 +1026,7 @@ function createLiveRpcClientMode(options) {
2181
1026
  async function requestTrustWithCode(code) {
2182
1027
  const token = (await serverRpc.$call("anonymous:devframe:auth:exchange", {
2183
1028
  code,
2184
- ua: describeUA(),
1029
+ ua: navigator.userAgent,
2185
1030
  origin: location.origin
2186
1031
  }))?.authToken ?? null;
2187
1032
  if (token) {