devframe 0.1.18 → 0.1.20

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 (67) hide show
  1. package/README.md +2 -2
  2. package/dist/{_shared-Bxa2_kq7.mjs → _shared-S-Ujqz_L.mjs} +1 -1
  3. package/dist/adapters/build.d.mts +1 -1
  4. package/dist/adapters/build.mjs +9 -5
  5. package/dist/adapters/cli.d.mts +2 -2
  6. package/dist/adapters/cli.mjs +78 -292
  7. package/dist/adapters/dev.d.mts +83 -0
  8. package/dist/adapters/dev.mjs +2 -0
  9. package/dist/adapters/embedded.d.mts +1 -1
  10. package/dist/adapters/kit.d.mts +1 -1
  11. package/dist/adapters/mcp.d.mts +1 -1
  12. package/dist/adapters/mcp.mjs +6 -3
  13. package/dist/adapters/vite.d.mts +1 -1
  14. package/dist/adapters/vite.mjs +1 -1
  15. package/dist/client/index.d.mts +41 -5
  16. package/dist/client/index.mjs +1673 -2
  17. package/dist/constants.d.mts +1 -1
  18. package/dist/{context-xQo1FcxX.mjs → context-BfvbAyGk.mjs} +429 -41
  19. package/dist/dev-B8i_CBlQ.mjs +325 -0
  20. package/dist/{devtool-CHT-4_OU.d.mts → devtool-Bm6zZAw5.d.mts} +371 -28
  21. package/dist/host-h3-BMvrFzIJ.mjs +24 -0
  22. package/dist/{index-Cei8vVcd.d.mts → index-BCo03GEF.d.mts} +1 -1
  23. package/dist/index.d.mts +4 -4
  24. package/dist/index.mjs +11 -2
  25. package/dist/node/index.d.mts +41 -53
  26. package/dist/node/index.mjs +5 -4
  27. package/dist/recipes/open-helpers.d.mts +1 -1
  28. package/dist/recipes/open-helpers.mjs +4 -2
  29. package/dist/rpc/index.d.mts +2 -2
  30. package/dist/rpc/index.mjs +3 -3
  31. package/dist/rpc/transports/ws-client.d.mts +1 -1
  32. package/dist/rpc/transports/ws-client.mjs +1 -1
  33. package/dist/rpc/transports/ws-server.d.mts +1 -1
  34. package/dist/rpc/transports/ws-server.mjs +1 -1
  35. package/dist/{rpc-hbRk8qtt.mjs → rpc-INbWfHoX.mjs} +1 -1
  36. package/dist/{serialization-CWcWE7x7.mjs → serialization-DwKi05Pn.mjs} +1 -1
  37. package/dist/server-DksyT-um.d.mts +54 -0
  38. package/dist/{server-DkJ2-s0Y.mjs → server-qRRM8t3v.mjs} +27 -2
  39. package/dist/{static-dump-DwFfj4U_.mjs → static-dump-C1aVSwxY.mjs} +2 -19
  40. package/dist/types/index.d.mts +4 -4
  41. package/dist/{types-BkyzI9r4.d.mts → types-ag029cAe.d.mts} +1 -1
  42. package/dist/utils/events.d.mts +1 -1
  43. package/dist/utils/shared-state.d.mts +2 -2
  44. package/dist/utils/shared-state.mjs +1 -1
  45. package/dist/utils/state.d.mts +2 -1
  46. package/dist/utils/state.mjs +1 -1
  47. package/dist/utils/streaming-channel.d.mts +2 -0
  48. package/dist/utils/streaming-channel.mjs +255 -0
  49. package/dist/{ws-client-CDGmViwt.d.mts → ws-client-DQySVfF_.d.mts} +1 -1
  50. package/dist/{ws-server-Cu8tmZcF.d.mts → ws-server-VQqESKAs.d.mts} +13 -1
  51. package/package.json +10 -17
  52. package/skills/devframe/README.md +13 -0
  53. package/skills/devframe/SKILL.md +452 -0
  54. package/skills/devframe/templates/counter-devtool.ts +29 -0
  55. package/skills/devframe/templates/spa-devtool.ts +33 -0
  56. package/skills/devframe/templates/vite-client.ts +11 -0
  57. package/dist/client-CsR1_h3o.mjs +0 -1569
  58. package/dist/helpers/nuxt/index.d.mts +0 -46
  59. package/dist/helpers/nuxt/index.mjs +0 -58
  60. package/dist/helpers/nuxt/runtime/plugin.client.d.mts +0 -8
  61. package/dist/helpers/nuxt/runtime/plugin.client.mjs +0 -12
  62. package/dist/immer-DEqg5kOd.mjs +0 -894
  63. package/dist/src-DIKqQIjp.mjs +0 -85
  64. /package/dist/{define-CW9gLnyG.mjs → define-Bb4zh-Dc.mjs} +0 -0
  65. /package/dist/{main-BJD9t8dk.mjs → main-DpINGndA.mjs} +0 -0
  66. /package/dist/{open-BMO2_-wC.mjs → open-BtOOEldu.mjs} +0 -0
  67. /package/dist/{transports-4bqw6Fqg.mjs → transports-BPUzHhI2.mjs} +0 -0
@@ -1,1569 +0,0 @@
1
- import { t as import_dist } from "./human-id-CHS0s28X.mjs";
2
- import { l as RpcCacheManager, o as RpcFunctionsCollectorBase } from "./rpc-hbRk8qtt.mjs";
3
- import { r as structuredCloneDeserialize } from "./serialization-CWcWE7x7.mjs";
4
- import { createRpcClient } from "./rpc/client.mjs";
5
- import { createWsRpcChannel } from "./rpc/transports/ws-client.mjs";
6
- import { createEventEmitter } from "./utils/events.mjs";
7
- import { DEVTOOLS_CONNECTION_META_FILENAME, DEVTOOLS_RPC_DUMP_MANIFEST_FILENAME } from "./constants.mjs";
8
- import { createSharedState } from "./utils/shared-state.mjs";
9
- import { promiseWithResolver } from "./utils/promise.mjs";
10
- import { hash } from "ohash";
11
- //#region src/client/context.ts
12
- const CLIENT_CONTEXT_KEY = "__VITE_DEVTOOLS_CLIENT_CONTEXT__";
13
- /**
14
- * Get the global DevTools client context, or `undefined` if not yet initialized.
15
- */
16
- function getDevToolsClientContext() {
17
- return globalThis[CLIENT_CONTEXT_KEY];
18
- }
19
- //#endregion
20
- //#region src/client/rpc-shared-state.ts
21
- function createRpcSharedStateClientHost(rpc) {
22
- const sharedState = /* @__PURE__ */ new Map();
23
- const initialValues = /* @__PURE__ */ new Map();
24
- const keyAddedListeners = /* @__PURE__ */ new Set();
25
- const isStaticBackend = rpc.connectionMeta.backend === "static";
26
- function mergeWithInitialValue(key, serverState) {
27
- const initial = initialValues.get(key);
28
- if (initial && typeof initial === "object" && !Array.isArray(initial) && typeof serverState === "object" && !Array.isArray(serverState)) return {
29
- ...initial,
30
- ...serverState
31
- };
32
- return serverState;
33
- }
34
- rpc.client.register({
35
- name: "devtoolskit:internal:rpc:client-state:updated",
36
- type: "event",
37
- handler: (key, fullState, syncId) => {
38
- const state = sharedState.get(key);
39
- if (!state || state.syncIds.has(syncId)) return;
40
- state.mutate(() => mergeWithInitialValue(key, fullState), syncId);
41
- }
42
- });
43
- rpc.client.register({
44
- name: "devtoolskit:internal:rpc:client-state:patch",
45
- type: "event",
46
- handler: (key, patches, syncId) => {
47
- const state = sharedState.get(key);
48
- if (!state || state.syncIds.has(syncId)) return;
49
- state.patch(patches, syncId);
50
- }
51
- });
52
- function registerSharedState(key, state) {
53
- const offs = [];
54
- offs.push(state.on("updated", (fullState, patches, syncId) => {
55
- if (isStaticBackend) return;
56
- if (patches) rpc.callEvent("devtoolskit:internal:rpc:server-state:patch", key, patches, syncId);
57
- else rpc.callEvent("devtoolskit:internal:rpc:server-state:set", key, fullState, syncId);
58
- }));
59
- return () => {
60
- for (const off of offs) off();
61
- };
62
- }
63
- return {
64
- keys: () => Array.from(sharedState.keys()),
65
- onKeyAdded(fn) {
66
- keyAddedListeners.add(fn);
67
- return () => {
68
- keyAddedListeners.delete(fn);
69
- };
70
- },
71
- get: async (key, options) => {
72
- if (options?.initialValue !== void 0) initialValues.set(key, options.initialValue);
73
- if (sharedState.has(key)) return sharedState.get(key);
74
- const state = createSharedState({
75
- initialValue: options?.initialValue,
76
- enablePatches: false
77
- });
78
- async function initSharedState() {
79
- if (!isStaticBackend) rpc.callEvent("devtoolskit:internal:rpc:server-state:subscribe", key);
80
- if (options?.initialValue !== void 0) {
81
- sharedState.set(key, state);
82
- for (const fn of keyAddedListeners) fn(key);
83
- rpc.call("devtoolskit:internal:rpc:server-state:get", key).then((serverState) => {
84
- if (serverState !== void 0) state.mutate(() => mergeWithInitialValue(key, serverState));
85
- }).catch((error) => {
86
- console.error("Error getting server state", error);
87
- });
88
- registerSharedState(key, state);
89
- return state;
90
- } else {
91
- const serverValue = await rpc.call("devtoolskit:internal:rpc:server-state:get", key);
92
- state.mutate(() => mergeWithInitialValue(key, serverValue));
93
- sharedState.set(key, state);
94
- for (const fn of keyAddedListeners) fn(key);
95
- registerSharedState(key, state);
96
- return state;
97
- }
98
- }
99
- return new Promise((resolve) => {
100
- if (!rpc.isTrusted) {
101
- resolve(state);
102
- rpc.events.on("rpc:is-trusted:updated", (isTrusted) => {
103
- if (isTrusted) initSharedState();
104
- });
105
- } else initSharedState().then(resolve);
106
- });
107
- }
108
- };
109
- }
110
- //#endregion
111
- //#region src/client/static-rpc.ts
112
- function isStaticEntry(value) {
113
- return typeof value === "object" && value !== null && value.type === "static" && typeof value.path === "string";
114
- }
115
- function isQueryEntry(value) {
116
- return typeof value === "object" && value !== null && value.type === "query" && typeof value.records === "object" && value.records !== null;
117
- }
118
- function isRecord(value) {
119
- return typeof value === "object" && value !== null && ("output" in value || "error" in value);
120
- }
121
- function resolveRecordOutput(record) {
122
- if (record.error) {
123
- const error = new Error(record.error.message);
124
- error.name = record.error.name;
125
- throw error;
126
- }
127
- return record.output;
128
- }
129
- function createStaticRpcCaller(manifest, fetchJson) {
130
- const staticCache = /* @__PURE__ */ new Map();
131
- const queryRecordCache = /* @__PURE__ */ new Map();
132
- function reviveIfStructuredClone(value, serialization) {
133
- if (serialization === "structured-clone") return structuredCloneDeserialize(value);
134
- return value;
135
- }
136
- async function loadStatic(entry) {
137
- if (!staticCache.has(entry.path)) staticCache.set(entry.path, fetchJson(entry.path).then((raw) => reviveIfStructuredClone(raw, entry.serialization)));
138
- const data = await staticCache.get(entry.path);
139
- if (isRecord(data)) return resolveRecordOutput(data);
140
- return data;
141
- }
142
- async function loadQueryRecord(path, serialization) {
143
- if (!queryRecordCache.has(path)) queryRecordCache.set(path, fetchJson(path).then((raw) => reviveIfStructuredClone(raw, serialization)));
144
- return await queryRecordCache.get(path);
145
- }
146
- async function call(functionName, args) {
147
- if (!(functionName in manifest)) throw new Error(`[devtools-rpc] Function "${functionName}" not found in dump store`);
148
- const entry = manifest[functionName];
149
- if (isStaticEntry(entry)) {
150
- if (args.length > 0) throw new Error(`[devtools-rpc] No dump match for "${functionName}" with args: ${JSON.stringify(args)}`);
151
- return await loadStatic(entry);
152
- }
153
- if (isQueryEntry(entry)) {
154
- const argsHash = hash(args);
155
- const recordPath = entry.records[argsHash];
156
- if (recordPath) return resolveRecordOutput(await loadQueryRecord(recordPath, entry.serialization));
157
- if (entry.fallback) return resolveRecordOutput(await loadQueryRecord(entry.fallback, entry.serialization));
158
- throw new Error(`[devtools-rpc] No dump match for "${functionName}" with args: ${JSON.stringify(args)}`);
159
- }
160
- if (args.length === 0) return entry;
161
- throw new Error(`[devtools-rpc] No dump match for "${functionName}" with args: ${JSON.stringify(args)}`);
162
- }
163
- return {
164
- call: async (functionName, args) => await call(functionName, args),
165
- callOptional: async (functionName, args) => {
166
- if (!(functionName in manifest)) return void 0;
167
- return await call(functionName, args);
168
- },
169
- callEvent: async (_functionName, _args) => {}
170
- };
171
- }
172
- //#endregion
173
- //#region src/client/rpc-static.ts
174
- async function createStaticRpcClientMode(options) {
175
- const staticCaller = createStaticRpcCaller(await options.fetchJsonFromBases(DEVTOOLS_RPC_DUMP_MANIFEST_FILENAME), options.fetchJsonFromBases);
176
- return {
177
- isTrusted: true,
178
- requestTrust: async () => true,
179
- requestTrustWithToken: async () => true,
180
- ensureTrusted: async () => true,
181
- call: (...args) => staticCaller.call(args[0], args.slice(1)),
182
- callEvent: (...args) => staticCaller.callEvent(args[0], args.slice(1)),
183
- callOptional: (...args) => staticCaller.callOptional(args[0], args.slice(1))
184
- };
185
- }
186
- //#endregion
187
- //#region ../../../node_modules/.pnpm/ua-parser-modern@0.1.1/node_modules/ua-parser-modern/dist/index.mjs
188
- const EMPTY = "";
189
- const UNKNOWN = "?";
190
- const MAJOR = "major";
191
- const MODEL = "model";
192
- const NAME = "name";
193
- const TYPE = "type";
194
- const VENDOR = "vendor";
195
- const VERSION = "version";
196
- const ARCHITECTURE = "architecture";
197
- const CONSOLE = "console";
198
- const MOBILE = "mobile";
199
- const TABLET = "tablet";
200
- const SMARTTV = "smarttv";
201
- const WEARABLE = "wearable";
202
- const EMBEDDED = "embedded";
203
- const UA_MAX_LENGTH = 500;
204
- const AMAZON = "Amazon";
205
- const APPLE = "Apple";
206
- const ASUS = "ASUS";
207
- const BLACKBERRY = "BlackBerry";
208
- const BROWSER_LABEL = "Browser";
209
- const CHROME = "Chrome";
210
- const EDGE = "Edge";
211
- const FIREFOX = "Firefox";
212
- const GOOGLE = "Google";
213
- const HUAWEI = "Huawei";
214
- const LG = "LG";
215
- const MICROSOFT = "Microsoft";
216
- const MOTOROLA = "Motorola";
217
- const OPERA = "Opera";
218
- const SAMSUNG = "Samsung";
219
- const SHARP = "Sharp";
220
- const SONY = "Sony";
221
- const XIAOMI = "Xiaomi";
222
- const ZEBRA = "Zebra";
223
- const FACEBOOK = "Facebook";
224
- const CHROMIUM_OS = "Chromium OS";
225
- const MAC_OS = "Mac OS";
226
- function extend(regexes, extensions = {}) {
227
- const mergedRegexes = {};
228
- for (const key of Object.keys(regexes)) {
229
- const extension = extensions[key];
230
- if (extension && extension.length % 2 === 0) mergedRegexes[key] = [...extension, ...regexes[key]];
231
- else mergedRegexes[key] = regexes[key];
232
- }
233
- return mergedRegexes;
234
- }
235
- function enumerize(arr) {
236
- const enums = {};
237
- for (let i = 0; i < arr.length; i++) enums[arr[i].toUpperCase()] = arr[i];
238
- return enums;
239
- }
240
- function lowerize(str) {
241
- return str.toLowerCase();
242
- }
243
- function has(str1, str2) {
244
- return typeof str1 === "string" ? lowerize(str2).includes(lowerize(str1)) : false;
245
- }
246
- function majorize(version) {
247
- return typeof version === "string" ? version.replace(/[^\d.]/g, EMPTY).split(".")[0] : void 0;
248
- }
249
- function trim(str, len) {
250
- const result = str.replace(/^\s+/, EMPTY);
251
- return typeof len === "undefined" ? result : result.substring(0, len);
252
- }
253
- function rgxMapper(ua, arrays, augment) {
254
- const result = augment ?? {};
255
- for (let i = 0; i < arrays.length; i += 2) {
256
- const regex = arrays[i];
257
- const props = arrays[i + 1];
258
- for (let j = 0; j < regex.length; j++) {
259
- const matcher = regex[j];
260
- if (!matcher) break;
261
- const matches = matcher.exec(ua);
262
- if (!matches) continue;
263
- for (let p = 0; p < props.length; p++) {
264
- const match = matches[p + 1];
265
- const q = props[p];
266
- if (Array.isArray(q)) {
267
- const key = q[0];
268
- const length = q.length;
269
- if (length === 2) {
270
- const value = q[1];
271
- if (typeof value === "function") result[key] = value(match, void 0, result);
272
- else result[key] = value;
273
- } else if (length === 3) {
274
- const arg1 = q[1];
275
- const arg2 = q[2];
276
- if (typeof arg1 === "function" && !("exec" in arg1) && !("test" in arg1)) result[key] = match ? arg1(match, arg2, result) : void 0;
277
- else result[key] = match ? match.replace(arg1, arg2) : void 0;
278
- } else if (length === 4) result[key] = match ? q[3](match.replace(q[1], q[2]), void 0, result) : void 0;
279
- } else result[q] = match || void 0;
280
- }
281
- return result;
282
- }
283
- }
284
- return result;
285
- }
286
- function strMapper(str, map) {
287
- for (const i in map) {
288
- const value = map[i];
289
- if (Array.isArray(value) && value.length > 0) {
290
- for (let j = 0; j < value.length; j++) if (has(value[j], str)) return i === UNKNOWN ? void 0 : i;
291
- } else if (has(value, str)) return i === UNKNOWN ? void 0 : i;
292
- }
293
- return str;
294
- }
295
- const oldSafariMap = {
296
- "1.0": "/8",
297
- "1.2": "/1",
298
- "1.3": "/3",
299
- "2.0": "/412",
300
- "2.0.2": "/416",
301
- "2.0.3": "/417",
302
- "2.0.4": "/419",
303
- "?": "/"
304
- };
305
- const windowsVersionMap = {
306
- "ME": "4.90",
307
- "NT 3.11": "NT3.51",
308
- "NT 4.0": "NT4.0",
309
- "2000": "NT 5.0",
310
- "XP": ["NT 5.1", "NT 5.2"],
311
- "Vista": "NT 6.0",
312
- "7": "NT 6.1",
313
- "8": "NT 6.2",
314
- "8.1": "NT 6.3",
315
- "10": ["NT 6.4", "NT 10.0"],
316
- "RT": "ARM"
317
- };
318
- const regexes = {
319
- browser: [
320
- [/\b(?:crmo|crios)\/([\w.]+)/i],
321
- [VERSION, [NAME, "Chrome"]],
322
- [/edg(?:e|ios|a)?\/([\w.]+)/i],
323
- [VERSION, [NAME, "Edge"]],
324
- [
325
- /(opera mini)\/([-\w.]+)/i,
326
- /(opera [mobileta]{3,6})\b.+version\/([-\w.]+)/i,
327
- /(opera)(?:.+version\/|[/ ]+)([\w.]+)/i
328
- ],
329
- [NAME, VERSION],
330
- [/opios[/ ]+([\w.]+)/i],
331
- [VERSION, [NAME, `${OPERA} Mini`]],
332
- [/\bop(?:rg)?x\/([\w.]+)/i],
333
- [VERSION, [NAME, `${OPERA} GX`]],
334
- [/\bopr\/([\w.]+)/i],
335
- [VERSION, [NAME, OPERA]],
336
- [/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[/ ]?([\w.]+)/i],
337
- [VERSION, [NAME, "Baidu"]],
338
- [
339
- /(kindle)\/([\w.]+)/i,
340
- /(lunascape|maxthon|netfront|jasmine|blazer)[/ ]?([\w.]*)/i,
341
- /(avant|iemobile|slim)\s?(?:browser)?[/ ]?([\w.]*)/i,
342
- /(?:ms|\()(ie) ([\w.]+)/i,
343
- /(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,
344
- /(heytap|ovi)browser\/([\d.]+)/i,
345
- /(weibo)__([\d.]+)/i
346
- ],
347
- [NAME, VERSION],
348
- [/\bddg\/([\w.]+)/i],
349
- [VERSION, [NAME, "DuckDuckGo"]],
350
- [/(?:\buc? ?browser|juc.+ucweb)[/ ]?([\w.]+)/i],
351
- [VERSION, [NAME, `UC${BROWSER_LABEL}`]],
352
- [
353
- /microm.+\bqbcore\/([\w.]+)/i,
354
- /\bqbcore\/([\w.]+).+microm/i,
355
- /micromessenger\/([\w.]+)/i
356
- ],
357
- [VERSION, [NAME, "WeChat"]],
358
- [/konqueror\/([\w.]+)/i],
359
- [VERSION, [NAME, "Konqueror"]],
360
- [/trident.+rv[: ]([\w.]{1,9})\b.+like gecko/i],
361
- [VERSION, [NAME, "IE"]],
362
- [/ya(?:search)?browser\/([\w.]+)/i],
363
- [VERSION, [NAME, "Yandex"]],
364
- [/slbrowser\/([\w.]+)/i],
365
- [VERSION, [NAME, `Smart Lenovo ${BROWSER_LABEL}`]],
366
- [/(avast|avg)\/([\w.]+)/i],
367
- [[
368
- NAME,
369
- /(.+)/,
370
- `$1 Secure ${BROWSER_LABEL}`
371
- ], VERSION],
372
- [/\bfocus\/([\w.]+)/i],
373
- [VERSION, [NAME, `${FIREFOX} Focus`]],
374
- [/\bopt\/([\w.]+)/i],
375
- [VERSION, [NAME, `${OPERA} Touch`]],
376
- [/coc_coc\w+\/([\w.]+)/i],
377
- [VERSION, [NAME, "Coc Coc"]],
378
- [/dolfin\/([\w.]+)/i],
379
- [VERSION, [NAME, "Dolphin"]],
380
- [/coast\/([\w.]+)/i],
381
- [VERSION, [NAME, `${OPERA} Coast`]],
382
- [/miuibrowser\/([\w.]+)/i],
383
- [VERSION, [NAME, `MIUI ${BROWSER_LABEL}`]],
384
- [/fxios\/([-\w.]+)/i],
385
- [VERSION, [NAME, FIREFOX]],
386
- [/\bqihu|(qi?ho{0,2}|360)browser/i],
387
- [[NAME, `360 ${BROWSER_LABEL}`]],
388
- [/(oculus|sailfish|huawei|vivo)browser\/([\w.]+)/i],
389
- [[
390
- NAME,
391
- /(.+)/,
392
- `$1 ${BROWSER_LABEL}`
393
- ], VERSION],
394
- [/samsungbrowser\/([\w.]+)/i],
395
- [VERSION, [NAME, `${SAMSUNG} Internet`]],
396
- [/(comodo_dragon)\/([\w.]+)/i],
397
- [[
398
- NAME,
399
- /_/g,
400
- " "
401
- ], VERSION],
402
- [/metasr[/ ]?([\d.]+)/i],
403
- [VERSION, [NAME, "Sogou Explorer"]],
404
- [/(sogou)mo\w+\/([\d.]+)/i],
405
- [[NAME, "Sogou Mobile"], VERSION],
406
- [
407
- /(electron)\/([\w.]+) safari/i,
408
- /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w.]+))/i,
409
- /m?(qqbrowser|2345Explorer)[/ ]?([\w.]+)/i
410
- ],
411
- [NAME, VERSION],
412
- [/(lbbrowser)/i, /\[(linkedin)app\]/i],
413
- [NAME],
414
- [/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w.]+);)/i],
415
- [[NAME, FACEBOOK], VERSION],
416
- [
417
- /(Klarna)\/([\w.]+)/i,
418
- /(kakao(?:talk|story))[/ ]([\w.]+)/i,
419
- /(naver)\(.*?(\d+\.[\w.]+).*\)/i,
420
- /safari (line)\/([\w.]+)/i,
421
- /\b(line)\/([\w.]+)\/iab/i,
422
- /(alipay)client\/([\w.]+)/i,
423
- /(twitter)(?:and| f.+e\/([\w.]+))/i,
424
- /(chromium|instagram|snapchat)[/ ]([-\w.]+)/i
425
- ],
426
- [NAME, VERSION],
427
- [/\bgsa\/([\w.]+) .*safari\//i],
428
- [VERSION, [NAME, "GSA"]],
429
- [/musical_ly(?:.+app_?version\/|_)([\w.]+)/i],
430
- [VERSION, [NAME, "TikTok"]],
431
- [/headlesschrome(?:\/([\w.]+)| )/i],
432
- [VERSION, [NAME, `${CHROME} Headless`]],
433
- [/ wv\).+(chrome)\/([\w.]+)/i],
434
- [[NAME, `${CHROME} WebView`], VERSION],
435
- [/droid.+ version\/([\w.]+)\b.+(?:mobile safari|safari)/i],
436
- [VERSION, [NAME, `Android ${BROWSER_LABEL}`]],
437
- [/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w.]+)/i],
438
- [NAME, VERSION],
439
- [/version\/([\w.,]+) .*mobile\/\w+ (safari)/i],
440
- [VERSION, [NAME, "Mobile Safari"]],
441
- [/version\/([\w(.|,)]+) .*(mobile ?safari|safari)/i],
442
- [VERSION, NAME],
443
- [/webkit.+?(mobile ?safari|safari)(\/[\w.]+)/i],
444
- [NAME, [
445
- VERSION,
446
- strMapper,
447
- oldSafariMap
448
- ]],
449
- [/(webkit|khtml)\/([\w.]+)/i],
450
- [NAME, VERSION],
451
- [/(navigator|netscape\d?)\/([-\w.]+)/i],
452
- [[NAME, "Netscape"], VERSION],
453
- [/mobile vr; rv:([\w.]+)\).+firefox/i],
454
- [VERSION, [NAME, `${FIREFOX} Reality`]],
455
- [
456
- /ekiohf.+(flow)\/([\w.]+)/i,
457
- /(swiftfox)/i,
458
- /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[/ ]?([\w.+]+)/i,
459
- /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w.]+)$/i,
460
- /(firefox)\/([\w.]+)/i,
461
- /(mozilla)\/([\w.]+) .+rv:.+gecko\/\d+/i,
462
- /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[. ]?browser)[-/ ]?v?([\w.]+)/i,
463
- /(links) \(([\w.]+)/i,
464
- /panasonic;(viera)/i
465
- ],
466
- [NAME, VERSION],
467
- [/(cobalt)\/([\w.]+)/i],
468
- [NAME, [
469
- VERSION,
470
- /master.|lts./,
471
- ""
472
- ]]
473
- ],
474
- cpu: [
475
- [/(amd|x(?:(?:86|64)[-_])?|wow|win)64[;)]/i],
476
- [[ARCHITECTURE, "amd64"]],
477
- [/(ia32(?=;))/i],
478
- [[ARCHITECTURE, lowerize]],
479
- [/((?:i[346]|x)86)[;)]/i],
480
- [[ARCHITECTURE, "ia32"]],
481
- [/\b(aarch64|arm(v?8e?l?|_?64))\b/i],
482
- [[ARCHITECTURE, "arm64"]],
483
- [/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],
484
- [[ARCHITECTURE, "armhf"]],
485
- [/windows (ce|mobile); ppc;/i],
486
- [[ARCHITECTURE, "arm"]],
487
- [/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],
488
- [[
489
- ARCHITECTURE,
490
- /ower/,
491
- EMPTY,
492
- lowerize
493
- ]],
494
- [/(sun4\w)[;)]/i],
495
- [[ARCHITECTURE, "sparc"]],
496
- [/(avr32|ia64(?=;)|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],
497
- [[ARCHITECTURE, lowerize]]
498
- ],
499
- device: [
500
- [/\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],
501
- [
502
- MODEL,
503
- [VENDOR, SAMSUNG],
504
- [TYPE, TABLET]
505
- ],
506
- [
507
- /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?\d+a?|galaxy nexus)/i,
508
- /samsung[- ]([-\w]+)/i,
509
- /sec-(sgh\w+)/i
510
- ],
511
- [
512
- MODEL,
513
- [VENDOR, SAMSUNG],
514
- [TYPE, MOBILE]
515
- ],
516
- [/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],
517
- [
518
- MODEL,
519
- [VENDOR, APPLE],
520
- [TYPE, MOBILE]
521
- ],
522
- [
523
- /\((ipad);[-\w),; ]+apple/i,
524
- /applecoremedia\/[\w.]+ \((ipad)/i,
525
- /\b(ipad)\d\d?,\d\d?[;\]].+ios/i
526
- ],
527
- [
528
- MODEL,
529
- [VENDOR, APPLE],
530
- [TYPE, TABLET]
531
- ],
532
- [/(macintosh);/i],
533
- [MODEL, [VENDOR, APPLE]],
534
- [/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],
535
- [
536
- MODEL,
537
- [VENDOR, SHARP],
538
- [TYPE, MOBILE]
539
- ],
540
- [/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],
541
- [
542
- MODEL,
543
- [VENDOR, HUAWEI],
544
- [TYPE, TABLET]
545
- ],
546
- [/(?:huawei|honor)([-\w ]+)[;)]/i, /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][0-359c][adn]?)\b(?!.+d\/s)/i],
547
- [
548
- MODEL,
549
- [VENDOR, HUAWEI],
550
- [TYPE, MOBILE]
551
- ],
552
- [
553
- /\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,
554
- /\b; (\w+) build\/hm\1/i,
555
- /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
556
- /\b(redmi[\-_ ]?[\w ]+)(?: bui|\))/i,
557
- /oid[^)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,
558
- /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?\d?\w?[_ ]?(?:plus|se|lite)?)(?: bui|\))/i
559
- ],
560
- [
561
- [
562
- MODEL,
563
- /_/g,
564
- " "
565
- ],
566
- [VENDOR, XIAOMI],
567
- [TYPE, MOBILE]
568
- ],
569
- [/oid[^)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, /\b(mi[-_ ]?pad[\w ]+)(?: bui|\))/i],
570
- [
571
- [
572
- MODEL,
573
- /_/g,
574
- " "
575
- ],
576
- [VENDOR, XIAOMI],
577
- [TYPE, TABLET]
578
- ],
579
- [/; (\w+) bui.+ oppo/i, /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],
580
- [
581
- MODEL,
582
- [VENDOR, "OPPO"],
583
- [TYPE, MOBILE]
584
- ],
585
- [/\b(opd2\d{3}a?) bui/i],
586
- [
587
- MODEL,
588
- [VENDOR, "OPPO"],
589
- [TYPE, TABLET]
590
- ],
591
- [/vivo (\w+)(?: bui|\))/i, /\b(v[12]\d{3}\w?[at])(?: bui|;)/i],
592
- [
593
- MODEL,
594
- [VENDOR, "Vivo"],
595
- [TYPE, MOBILE]
596
- ],
597
- [/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],
598
- [
599
- MODEL,
600
- [VENDOR, "Realme"],
601
- [TYPE, MOBILE]
602
- ],
603
- [
604
- /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
605
- /\bmot(?:orola)?[- ](\w*)/i,
606
- /((?:moto[\w() ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
607
- ],
608
- [
609
- MODEL,
610
- [VENDOR, MOTOROLA],
611
- [TYPE, MOBILE]
612
- ],
613
- [/\b(mz60\d|xoom[2 ]{0,2}) build\//i],
614
- [
615
- MODEL,
616
- [VENDOR, MOTOROLA],
617
- [TYPE, TABLET]
618
- ],
619
- [/((?=lg)?[vl]k-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],
620
- [
621
- MODEL,
622
- [VENDOR, LG],
623
- [TYPE, TABLET]
624
- ],
625
- [
626
- /(lm(?:-?f100[nv]?|-[\w.]+)(?= bui|\))|nexus [45])/i,
627
- /\blg[-e;/ ]+((?!browser|netcast|android tv)\w+)/i,
628
- /\blg-?(\w+) bui/i
629
- ],
630
- [
631
- MODEL,
632
- [VENDOR, LG],
633
- [TYPE, MOBILE]
634
- ],
635
- [/(ideatab[-\w ]+)/i, /lenovo ?(s[56]000[-\w]+|tab[\w ]+|yt[-\w]{6}|tb[-\w]{6})/i],
636
- [
637
- MODEL,
638
- [VENDOR, "Lenovo"],
639
- [TYPE, TABLET]
640
- ],
641
- [/(?:maemo|nokia).*(n900|lumia \d+)/i, /nokia[-_ ]?([-\w.]*)/i],
642
- [
643
- [
644
- MODEL,
645
- /_/g,
646
- " "
647
- ],
648
- [VENDOR, "Nokia"],
649
- [TYPE, MOBILE]
650
- ],
651
- [/(pixel c)\b/i],
652
- [
653
- MODEL,
654
- [VENDOR, GOOGLE],
655
- [TYPE, TABLET]
656
- ],
657
- [/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],
658
- [
659
- MODEL,
660
- [VENDOR, GOOGLE],
661
- [TYPE, MOBILE]
662
- ],
663
- [/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],
664
- [
665
- MODEL,
666
- [VENDOR, SONY],
667
- [TYPE, MOBILE]
668
- ],
669
- [/sony tablet [ps]/i, /\b(?:sony)?sgp\w+(?: bui|\))/i],
670
- [
671
- [MODEL, "Xperia Tablet"],
672
- [VENDOR, SONY],
673
- [TYPE, TABLET]
674
- ],
675
- [/ (kb2005|in20[12]5|be20[12][59])\b/i, /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],
676
- [
677
- MODEL,
678
- [VENDOR, "OnePlus"],
679
- [TYPE, MOBILE]
680
- ],
681
- [
682
- /(alexa)webm/i,
683
- /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,
684
- /(kf[a-z]+)( bui|\)).+silk\//i
685
- ],
686
- [
687
- MODEL,
688
- [VENDOR, AMAZON],
689
- [TYPE, TABLET]
690
- ],
691
- [/((?:sd|kf)[0349hijor-uw]+)( bui|\)).+silk\//i],
692
- [
693
- [
694
- MODEL,
695
- /(.+)/g,
696
- "Fire Phone $1"
697
- ],
698
- [VENDOR, AMAZON],
699
- [TYPE, MOBILE]
700
- ],
701
- [/(playbook);[-\w),; ]+(rim)/i],
702
- [
703
- MODEL,
704
- VENDOR,
705
- [TYPE, TABLET]
706
- ],
707
- [/\b((?:bb[a-f]|st[hv])100-\d)/i, /\(bb10; (\w+)/i],
708
- [
709
- MODEL,
710
- [VENDOR, BLACKBERRY],
711
- [TYPE, MOBILE]
712
- ],
713
- [/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],
714
- [
715
- MODEL,
716
- [VENDOR, ASUS],
717
- [TYPE, TABLET]
718
- ],
719
- [/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],
720
- [
721
- MODEL,
722
- [VENDOR, ASUS],
723
- [TYPE, MOBILE]
724
- ],
725
- [/(nexus 9)/i],
726
- [
727
- MODEL,
728
- [VENDOR, "HTC"],
729
- [TYPE, TABLET]
730
- ],
731
- [
732
- /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
733
- /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
734
- /(alcatel|geeksphone|nexian|panasonic(?!;|\.)|sony(?!-bra))[-_ ]?([-\w]*)/i
735
- ],
736
- [
737
- VENDOR,
738
- [
739
- MODEL,
740
- /_/g,
741
- " "
742
- ],
743
- [TYPE, MOBILE]
744
- ],
745
- [/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],
746
- [
747
- MODEL,
748
- [VENDOR, "Acer"],
749
- [TYPE, TABLET]
750
- ],
751
- [/droid.+; (m[1-5] note) bui/i, /\bmz-([-\w]{2,})/i],
752
- [
753
- MODEL,
754
- [VENDOR, "Meizu"],
755
- [TYPE, MOBILE]
756
- ],
757
- [/; ((?:power )?armor[\w ]{0,8})(?: bui|\))/i],
758
- [
759
- MODEL,
760
- [VENDOR, "Ulefone"],
761
- [TYPE, MOBILE]
762
- ],
763
- [
764
- /(blackberry|benq|palm(?=-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,
765
- /(hp) ([\w ]+\w)/i,
766
- /(asus)-?(\w+)/i,
767
- /(microsoft); (lumia[\w ]+)/i,
768
- /(lenovo)[-_ ]?([-\w]+)/i,
769
- /(jolla)/i,
770
- /(oppo) ?([\w ]+) bui/i
771
- ],
772
- [
773
- VENDOR,
774
- MODEL,
775
- [TYPE, MOBILE]
776
- ],
777
- [
778
- /(kobo)\s(ereader|touch)/i,
779
- /(archos) (gamepad2?)/i,
780
- /(hp).+(touchpad(?!.+tablet)|tablet)/i,
781
- /(kindle)\/([\w.]+)/i,
782
- /(nook)[\w ]+build\/(\w+)/i,
783
- /(dell) (strea[kpr\d ]*[\dko])/i,
784
- /(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
785
- /(trinity)[- ]*(t\d{3}) bui/i,
786
- /(gigaset)[- ]+(q\w{1,9}) bui/i,
787
- /(vodafone) ([\w ]+)(?:\)| bui)/i
788
- ],
789
- [
790
- VENDOR,
791
- MODEL,
792
- [TYPE, TABLET]
793
- ],
794
- [/(surface duo)/i],
795
- [
796
- MODEL,
797
- [VENDOR, MICROSOFT],
798
- [TYPE, TABLET]
799
- ],
800
- [/droid [\d.]+; (fp\du?)(?: b|\))/i],
801
- [
802
- MODEL,
803
- [VENDOR, "Fairphone"],
804
- [TYPE, MOBILE]
805
- ],
806
- [/(u304aa)/i],
807
- [
808
- MODEL,
809
- [VENDOR, "AT&T"],
810
- [TYPE, MOBILE]
811
- ],
812
- [/\bsie-(\w*)/i],
813
- [
814
- MODEL,
815
- [VENDOR, "Siemens"],
816
- [TYPE, MOBILE]
817
- ],
818
- [/\b(rct\w+) b/i],
819
- [
820
- MODEL,
821
- [VENDOR, "RCA"],
822
- [TYPE, TABLET]
823
- ],
824
- [/\b(venue[\d ]{2,7}) b/i],
825
- [
826
- MODEL,
827
- [VENDOR, "Dell"],
828
- [TYPE, TABLET]
829
- ],
830
- [/\b(q(?:mv|ta)\w+) b/i],
831
- [
832
- MODEL,
833
- [VENDOR, "Verizon"],
834
- [TYPE, TABLET]
835
- ],
836
- [/\b(?:barnes[& ]+noble |bn[rt])([\w+ ]*) b/i],
837
- [
838
- MODEL,
839
- [VENDOR, "Barnes & Noble"],
840
- [TYPE, TABLET]
841
- ],
842
- [/\b(tm\d{3}\w+) b/i],
843
- [
844
- MODEL,
845
- [VENDOR, "NuVision"],
846
- [TYPE, TABLET]
847
- ],
848
- [/\b(k88) b/i],
849
- [
850
- MODEL,
851
- [VENDOR, "ZTE"],
852
- [TYPE, TABLET]
853
- ],
854
- [/\b(nx\d{3}j) b/i],
855
- [
856
- MODEL,
857
- [VENDOR, "ZTE"],
858
- [TYPE, MOBILE]
859
- ],
860
- [/\b(gen\d{3}) b.+49h/i],
861
- [
862
- MODEL,
863
- [VENDOR, "Swiss"],
864
- [TYPE, MOBILE]
865
- ],
866
- [/\b(zur\d{3}) b/i],
867
- [
868
- MODEL,
869
- [VENDOR, "Swiss"],
870
- [TYPE, TABLET]
871
- ],
872
- [/\b((zeki)?tb.*\b) b/i],
873
- [
874
- MODEL,
875
- [VENDOR, "Zeki"],
876
- [TYPE, TABLET]
877
- ],
878
- [/\b([yr]\d{2}) b/i, /\b(dragon[- ]+touch |dt)(\w{5}) b/i],
879
- [
880
- [VENDOR, "Dragon Touch"],
881
- MODEL,
882
- [TYPE, TABLET]
883
- ],
884
- [/\b(ns-?\w{0,9}) b/i],
885
- [
886
- MODEL,
887
- [VENDOR, "Insignia"],
888
- [TYPE, TABLET]
889
- ],
890
- [/\b((nxa|next)-?\w{0,9}) b/i],
891
- [
892
- MODEL,
893
- [VENDOR, "NextBook"],
894
- [TYPE, TABLET]
895
- ],
896
- [/\b(xtreme_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],
897
- [
898
- [VENDOR, "Voice"],
899
- MODEL,
900
- [TYPE, MOBILE]
901
- ],
902
- [/\b(lvtel-)?(v1[12]) b/i],
903
- [
904
- [VENDOR, "LvTel"],
905
- MODEL,
906
- [TYPE, MOBILE]
907
- ],
908
- [/\b(ph-1) /i],
909
- [
910
- MODEL,
911
- [VENDOR, "Essential"],
912
- [TYPE, MOBILE]
913
- ],
914
- [/\b(v(100md|700na|7011|917g).*\b) b/i],
915
- [
916
- MODEL,
917
- [VENDOR, "Envizen"],
918
- [TYPE, TABLET]
919
- ],
920
- [/\b(trio[-\w. ]+) b/i],
921
- [
922
- MODEL,
923
- [VENDOR, "MachSpeed"],
924
- [TYPE, TABLET]
925
- ],
926
- [/\btu_(1491) b/i],
927
- [
928
- MODEL,
929
- [VENDOR, "Rotor"],
930
- [TYPE, TABLET]
931
- ],
932
- [/(shield[\w ]+) b/i],
933
- [
934
- MODEL,
935
- [VENDOR, "Nvidia"],
936
- [TYPE, TABLET]
937
- ],
938
- [/(sprint) (\w+)/i],
939
- [
940
- VENDOR,
941
- MODEL,
942
- [TYPE, MOBILE]
943
- ],
944
- [/(kin\.[onetw]{3})/i],
945
- [
946
- [
947
- MODEL,
948
- /\./g,
949
- " "
950
- ],
951
- [VENDOR, MICROSOFT],
952
- [TYPE, MOBILE]
953
- ],
954
- [/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],
955
- [
956
- MODEL,
957
- [VENDOR, ZEBRA],
958
- [TYPE, TABLET]
959
- ],
960
- [/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],
961
- [
962
- MODEL,
963
- [VENDOR, ZEBRA],
964
- [TYPE, MOBILE]
965
- ],
966
- [/smart-tv.+(samsung)/i],
967
- [VENDOR, [TYPE, SMARTTV]],
968
- [/hbbtv.+maple;(\d+)/i],
969
- [
970
- [
971
- MODEL,
972
- /^/,
973
- "SmartTV"
974
- ],
975
- [VENDOR, SAMSUNG],
976
- [TYPE, SMARTTV]
977
- ],
978
- [/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],
979
- [[VENDOR, LG], [TYPE, SMARTTV]],
980
- [/(apple) ?tv/i],
981
- [
982
- VENDOR,
983
- [MODEL, `${APPLE} TV`],
984
- [TYPE, SMARTTV]
985
- ],
986
- [/crkey/i],
987
- [
988
- [MODEL, `${CHROME}cast`],
989
- [VENDOR, GOOGLE],
990
- [TYPE, SMARTTV]
991
- ],
992
- [/droid.+aft(\w+)( bui|\))/i],
993
- [
994
- MODEL,
995
- [VENDOR, AMAZON],
996
- [TYPE, SMARTTV]
997
- ],
998
- [/\(dtv[);].+(aquos)/i, /(aquos-tv[\w ]+)\)/i],
999
- [
1000
- MODEL,
1001
- [VENDOR, SHARP],
1002
- [TYPE, SMARTTV]
1003
- ],
1004
- [/(bravia[\w ]+)( bui|\))/i],
1005
- [
1006
- MODEL,
1007
- [VENDOR, SONY],
1008
- [TYPE, SMARTTV]
1009
- ],
1010
- [/(mitv-\w{5}) bui/i],
1011
- [
1012
- MODEL,
1013
- [VENDOR, XIAOMI],
1014
- [TYPE, SMARTTV]
1015
- ],
1016
- [/Hbbtv.*(technisat) (.*);/i],
1017
- [
1018
- VENDOR,
1019
- MODEL,
1020
- [TYPE, SMARTTV]
1021
- ],
1022
- [/\b(roku)[\dx]*[)/]((?:dvp-)?[\d.]*)/i, /hbbtv\/\d+\.\d+\.\d+ +\([\w+ ]*; *(\w[^;]*);([^;]*)/i],
1023
- [
1024
- [VENDOR, trim],
1025
- [MODEL, trim],
1026
- [TYPE, SMARTTV]
1027
- ],
1028
- [/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],
1029
- [[TYPE, SMARTTV]],
1030
- [/(ouya)/i, /(nintendo) ([wids3utch]+)/i],
1031
- [
1032
- VENDOR,
1033
- MODEL,
1034
- [TYPE, CONSOLE]
1035
- ],
1036
- [/droid.+; (shield) bui/i],
1037
- [
1038
- MODEL,
1039
- [VENDOR, "Nvidia"],
1040
- [TYPE, CONSOLE]
1041
- ],
1042
- [/(playstation [345portablevi]+)/i],
1043
- [
1044
- MODEL,
1045
- [VENDOR, SONY],
1046
- [TYPE, CONSOLE]
1047
- ],
1048
- [/\b(xbox(?: one)?(?!; xbox))[); ]/i],
1049
- [
1050
- MODEL,
1051
- [VENDOR, MICROSOFT],
1052
- [TYPE, CONSOLE]
1053
- ],
1054
- [/((pebble))app/i],
1055
- [
1056
- VENDOR,
1057
- MODEL,
1058
- [TYPE, WEARABLE]
1059
- ],
1060
- [/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i],
1061
- [
1062
- MODEL,
1063
- [VENDOR, APPLE],
1064
- [TYPE, WEARABLE]
1065
- ],
1066
- [/droid.+; (glass) \d/i],
1067
- [
1068
- MODEL,
1069
- [VENDOR, GOOGLE],
1070
- [TYPE, WEARABLE]
1071
- ],
1072
- [/droid.+; (wt63?0{2,3})\)/i],
1073
- [
1074
- MODEL,
1075
- [VENDOR, ZEBRA],
1076
- [TYPE, WEARABLE]
1077
- ],
1078
- [/(quest( \d| pro)?)/i],
1079
- [
1080
- MODEL,
1081
- [VENDOR, FACEBOOK],
1082
- [TYPE, WEARABLE]
1083
- ],
1084
- [/(tesla)(?: qtcarbrowser|\/[-\w.]+)/i],
1085
- [VENDOR, [TYPE, EMBEDDED]],
1086
- [/(aeobc)\b/i],
1087
- [
1088
- MODEL,
1089
- [VENDOR, AMAZON],
1090
- [TYPE, EMBEDDED]
1091
- ],
1092
- [/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i],
1093
- [MODEL, [TYPE, MOBILE]],
1094
- [/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],
1095
- [MODEL, [TYPE, TABLET]],
1096
- [/\b((tablet|tab)[;/]|focus\/\d(?!.+mobile))/i],
1097
- [[TYPE, TABLET]],
1098
- [/(phone|mobile(?:[;/]| [ \w/.]*safari)|pda(?=.+windows ce))/i],
1099
- [[TYPE, MOBILE]],
1100
- [/(android[-\w. ]{0,9});.+buil/i],
1101
- [MODEL, [VENDOR, "Generic"]]
1102
- ],
1103
- engine: [
1104
- [/windows.+ edge\/([\w.]+)/i],
1105
- [VERSION, [NAME, `${EDGE}HTML`]],
1106
- [/webkit\/537\.36.+chrome\/(?!27)([\w.]+)/i],
1107
- [VERSION, [NAME, "Blink"]],
1108
- [
1109
- /(presto)\/([\w.]+)/i,
1110
- /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w.]+)/i,
1111
- /ekioh(flow)\/([\w.]+)/i,
1112
- /(khtml|tasman|links)[/ ]\(?([\w.]+)/i,
1113
- /(icab)[/ ]([23]\.[\d.]+)/i,
1114
- /\b(libweb)/i
1115
- ],
1116
- [NAME, VERSION],
1117
- [/rv:([\w.]{1,9})\b.+(gecko)/i],
1118
- [VERSION, NAME]
1119
- ],
1120
- os: [
1121
- [/microsoft (windows) (vista|xp)/i],
1122
- [NAME, VERSION],
1123
- [/(windows (?:phone(?: os)?|mobile))[/ ]?([.\w ]*)/i],
1124
- [NAME, [
1125
- VERSION,
1126
- strMapper,
1127
- windowsVersionMap
1128
- ]],
1129
- [
1130
- /windows nt 6\.2; (arm)/i,
1131
- /windows[/ ]?([ntce\d. ]+\w)(?!.+xbox)/i,
1132
- /(?:win(?=[39n])|win 9x )([nt\d.]+)/i
1133
- ],
1134
- [[
1135
- VERSION,
1136
- strMapper,
1137
- windowsVersionMap
1138
- ], [NAME, "Windows"]],
1139
- [
1140
- /ip[honead]{2,4}\b(?:.*os (\w+) like mac|; opera)/i,
1141
- /(?:ios;fbsv\/|iphone.+ios[/ ])([\d.]+)/i,
1142
- /cfnetwork\/.+darwin/i
1143
- ],
1144
- [[
1145
- VERSION,
1146
- /_/g,
1147
- "."
1148
- ], [NAME, "iOS"]],
1149
- [/(mac os x) ?([\w. ]*)/i, /(macintosh|mac_powerpc\b)(?!.+haiku)/i],
1150
- [[NAME, MAC_OS], [
1151
- VERSION,
1152
- /_/g,
1153
- "."
1154
- ]],
1155
- [/droid ([\w.]+)\b.+(android[- ]x86|harmonyos)/i],
1156
- [VERSION, NAME],
1157
- [
1158
- /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-/ ]?([\w.]*)/i,
1159
- /(blackberry)\w*\/([\w.]*)/i,
1160
- /(tizen|kaios)[/ ]([\w.]+)/i,
1161
- /\((series40);/i
1162
- ],
1163
- [NAME, VERSION],
1164
- [/\(bb(10);/i],
1165
- [VERSION, [NAME, BLACKBERRY]],
1166
- [/(?:symbian ?os|symbos|s60(?=;)|series60)[-/ ]?([\w.]*)/i],
1167
- [VERSION, [NAME, "Symbian"]],
1168
- [/mozilla\/[\d.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w.]+)/i],
1169
- [VERSION, [NAME, `${FIREFOX} OS`]],
1170
- [/web0s;.+rt(tv)/i, /\b(?:hp)?wos(?:browser)?\/([\w.]+)/i],
1171
- [VERSION, [NAME, "webOS"]],
1172
- [/watch(?: ?os[,/]|\d,\d\/)([\d.]+)/i],
1173
- [VERSION, [NAME, "watchOS"]],
1174
- [/crkey\/([\d.]+)/i],
1175
- [VERSION, [NAME, `${CHROME}cast`]],
1176
- [/(cros) \w+(?:\)| ([\w.]+)\b)/i],
1177
- [[NAME, CHROMIUM_OS], VERSION],
1178
- [
1179
- /panasonic;(viera)/i,
1180
- /(netrange)mmh/i,
1181
- /(nettv)\/(\d+\.[\w.]+)/i,
1182
- /(nintendo|playstation) ([wids345portablevuch]+)/i,
1183
- /(xbox); +xbox ([^);]+)/i,
1184
- /\b(joli|palm)\b ?(?:os)?\/?([\w.]*)/i,
1185
- /(mint)[/() ]?(\w*)/i,
1186
- /(mageia|vectorlinux)[; ]/i,
1187
- /([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,
1188
- /(hurd|linux) ?([\w.]*)/i,
1189
- /(gnu) ?([\w.]*)/i,
1190
- /\b([-e-hrntopcs]{0,5}bsd|dragonfly)[/ ]?(?!amd|[ix346]{1,2}86)([\w.]*)/i,
1191
- /(haiku) (\w+)/i
1192
- ],
1193
- [NAME, VERSION],
1194
- [/(sunos) ?([\w.]*)/i],
1195
- [[NAME, "Solaris"], VERSION],
1196
- [
1197
- /((?:open)?solaris)[-/ ]?([\w.]*)/i,
1198
- /(aix) ((\d)(?=[.) ])[\w.])*/i,
1199
- /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,
1200
- /(unix) ?([\w.]*)/i
1201
- ],
1202
- [NAME, VERSION]
1203
- ]
1204
- };
1205
- function isExtensionsInput(input) {
1206
- return typeof input === "object" && input !== null;
1207
- }
1208
- Object.freeze(enumerize([
1209
- NAME,
1210
- VERSION,
1211
- MAJOR
1212
- ]));
1213
- Object.freeze(enumerize([ARCHITECTURE]));
1214
- Object.freeze(enumerize([
1215
- MODEL,
1216
- VENDOR,
1217
- TYPE,
1218
- CONSOLE,
1219
- MOBILE,
1220
- SMARTTV,
1221
- TABLET,
1222
- WEARABLE,
1223
- EMBEDDED
1224
- ]));
1225
- Object.freeze(enumerize([NAME, VERSION]));
1226
- Object.freeze(enumerize([NAME, VERSION]));
1227
- function getRuntimeNavigator() {
1228
- if (typeof window === "undefined" || !window.navigator) return void 0;
1229
- return window.navigator;
1230
- }
1231
- function normalizeUA(ua) {
1232
- return ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;
1233
- }
1234
- function createDefaultParserContext(uastring) {
1235
- if (typeof uastring === "string") return {
1236
- ua: normalizeUA(uastring),
1237
- isSelfNavigator: false,
1238
- navigator: void 0,
1239
- userAgentData: void 0,
1240
- regexMap: regexes
1241
- };
1242
- const navigator = getRuntimeNavigator();
1243
- const ua = normalizeUA(navigator && navigator.userAgent ? navigator.userAgent : EMPTY);
1244
- return {
1245
- ua,
1246
- isSelfNavigator: Boolean(navigator && navigator.userAgent === ua),
1247
- navigator,
1248
- userAgentData: navigator?.userAgentData,
1249
- regexMap: regexes
1250
- };
1251
- }
1252
- function createParserContext(uastringOrExtensions, extensions) {
1253
- if (!extensions && !isExtensionsInput(uastringOrExtensions)) return createDefaultParserContext(uastringOrExtensions);
1254
- const navigator = getRuntimeNavigator();
1255
- const uastring = isExtensionsInput(uastringOrExtensions) ? void 0 : uastringOrExtensions;
1256
- const resolvedExtensions = isExtensionsInput(uastringOrExtensions) ? uastringOrExtensions : extensions;
1257
- const ua = normalizeUA(uastring || (navigator && navigator.userAgent ? navigator.userAgent : EMPTY));
1258
- const userAgentData = navigator?.userAgentData;
1259
- return {
1260
- ua,
1261
- isSelfNavigator: Boolean(navigator && navigator.userAgent === ua),
1262
- navigator,
1263
- userAgentData,
1264
- regexMap: resolvedExtensions ? extend(regexes, resolvedExtensions) : regexes
1265
- };
1266
- }
1267
- function parseBrowserFromContext(context) {
1268
- const browser = {
1269
- name: void 0,
1270
- version: void 0,
1271
- major: void 0
1272
- };
1273
- rgxMapper(context.ua, context.regexMap.browser, browser);
1274
- browser.major = majorize(browser.version);
1275
- if (context.isSelfNavigator && context.navigator?.brave && typeof context.navigator.brave.isBrave === "function") browser.name = "Brave";
1276
- return browser;
1277
- }
1278
- function parseCPUFromContext(context) {
1279
- const cpu = { architecture: void 0 };
1280
- rgxMapper(context.ua, context.regexMap.cpu, cpu);
1281
- return cpu;
1282
- }
1283
- function parseDeviceFromContext(context) {
1284
- const device = {
1285
- vendor: void 0,
1286
- model: void 0,
1287
- type: void 0
1288
- };
1289
- rgxMapper(context.ua, context.regexMap.device, device);
1290
- if (context.isSelfNavigator && !device.type && context.userAgentData?.mobile) device.type = MOBILE;
1291
- if (context.isSelfNavigator && device.model === "Macintosh" && context.navigator && typeof context.navigator.standalone !== "undefined" && context.navigator.maxTouchPoints && context.navigator.maxTouchPoints > 2) {
1292
- device.model = "iPad";
1293
- device.type = TABLET;
1294
- }
1295
- return device;
1296
- }
1297
- function parseEngineFromContext(context) {
1298
- const engine = {
1299
- name: void 0,
1300
- version: void 0
1301
- };
1302
- rgxMapper(context.ua, context.regexMap.engine, engine);
1303
- return engine;
1304
- }
1305
- function parseOSFromContext(context) {
1306
- const os = {
1307
- name: void 0,
1308
- version: void 0
1309
- };
1310
- rgxMapper(context.ua, context.regexMap.os, os);
1311
- 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);
1312
- return os;
1313
- }
1314
- function parseUA(uastringOrExtensions, extensions) {
1315
- let context;
1316
- let browserCache;
1317
- let engineCache;
1318
- let osCache;
1319
- let deviceCache;
1320
- let cpuCache;
1321
- const getContext = () => context ||= createParserContext(uastringOrExtensions, extensions);
1322
- return {
1323
- get ua() {
1324
- return getContext().ua;
1325
- },
1326
- get browser() {
1327
- browserCache ||= parseBrowserFromContext(getContext());
1328
- return browserCache;
1329
- },
1330
- get engine() {
1331
- engineCache ||= parseEngineFromContext(getContext());
1332
- return engineCache;
1333
- },
1334
- get os() {
1335
- osCache ||= parseOSFromContext(getContext());
1336
- return osCache;
1337
- },
1338
- get device() {
1339
- deviceCache ||= parseDeviceFromContext(getContext());
1340
- return deviceCache;
1341
- },
1342
- get cpu() {
1343
- cpuCache ||= parseCPUFromContext(getContext());
1344
- return cpuCache;
1345
- }
1346
- };
1347
- }
1348
- //#endregion
1349
- //#region src/client/rpc-ws.ts
1350
- function isNumeric(str) {
1351
- if (str == null) return false;
1352
- return `${+str}` === `${str}`;
1353
- }
1354
- function createWsRpcClientMode(options) {
1355
- const { authToken, connectionMeta, events, clientRpc, rpcOptions = {}, wsOptions = {} } = options;
1356
- let isTrusted = false;
1357
- const trustedPromise = promiseWithResolver();
1358
- const url = isNumeric(connectionMeta.websocket) ? `${location.protocol.replace("http", "ws")}//${location.hostname}:${connectionMeta.websocket}` : connectionMeta.websocket;
1359
- const definitions = /* @__PURE__ */ new Map();
1360
- for (const name of connectionMeta.jsonSerializableMethods ?? []) definitions.set(name, { jsonSerializable: true });
1361
- const serverRpc = createRpcClient(clientRpc.functions, {
1362
- channel: createWsRpcChannel({
1363
- url,
1364
- authToken,
1365
- definitions,
1366
- ...wsOptions
1367
- }),
1368
- rpcOptions
1369
- });
1370
- clientRpc.register({
1371
- name: "devtoolskit:internal:auth:revoked",
1372
- type: "event",
1373
- handler: () => {
1374
- isTrusted = false;
1375
- events.emit("rpc:is-trusted:updated", false);
1376
- }
1377
- });
1378
- let currentAuthToken = authToken;
1379
- async function requestTrustWithToken(token) {
1380
- currentAuthToken = token;
1381
- const info = parseUA(navigator.userAgent);
1382
- const ua = [
1383
- info.browser.name,
1384
- info.browser.version,
1385
- "|",
1386
- info.os.name,
1387
- info.os.version,
1388
- info.device.type
1389
- ].filter((i) => i).join(" ");
1390
- const result = await serverRpc.$call("vite:anonymous:auth", {
1391
- authToken: token,
1392
- ua,
1393
- origin: location.origin
1394
- });
1395
- isTrusted = result.isTrusted;
1396
- trustedPromise.resolve(isTrusted);
1397
- events.emit("rpc:is-trusted:updated", isTrusted);
1398
- return result.isTrusted;
1399
- }
1400
- async function requestTrust() {
1401
- if (isTrusted) return true;
1402
- return requestTrustWithToken(currentAuthToken);
1403
- }
1404
- async function ensureTrusted(timeout = 6e4) {
1405
- if (isTrusted) trustedPromise.resolve(true);
1406
- if (timeout <= 0) return trustedPromise.promise;
1407
- let clear = () => {};
1408
- await Promise.race([trustedPromise.promise.then(clear), new Promise((resolve, reject) => {
1409
- const id = setTimeout(() => {
1410
- reject(/* @__PURE__ */ new Error("[Vite DevTools] Timeout waiting for rpc to be trusted"));
1411
- }, timeout);
1412
- clear = () => clearTimeout(id);
1413
- })]);
1414
- return isTrusted;
1415
- }
1416
- return {
1417
- get isTrusted() {
1418
- return isTrusted;
1419
- },
1420
- requestTrust,
1421
- requestTrustWithToken,
1422
- ensureTrusted,
1423
- call: (...args) => {
1424
- return serverRpc.$call(...args);
1425
- },
1426
- callEvent: (...args) => {
1427
- return serverRpc.$callEvent(...args);
1428
- },
1429
- callOptional: (...args) => {
1430
- return serverRpc.$callOptional(...args);
1431
- }
1432
- };
1433
- }
1434
- //#endregion
1435
- //#region src/client/rpc.ts
1436
- const CONNECTION_META_KEY = "__VITE_DEVTOOLS_CONNECTION_META__";
1437
- const CONNECTION_AUTH_TOKEN_KEY = "__VITE_DEVTOOLS_CONNECTION_AUTH_TOKEN__";
1438
- function getConnectionAuthTokenFromWindows(userAuthToken) {
1439
- const getters = [
1440
- () => userAuthToken,
1441
- () => localStorage.getItem(CONNECTION_AUTH_TOKEN_KEY),
1442
- () => window?.[CONNECTION_AUTH_TOKEN_KEY],
1443
- () => globalThis?.[CONNECTION_AUTH_TOKEN_KEY],
1444
- () => parent.window?.[CONNECTION_AUTH_TOKEN_KEY]
1445
- ];
1446
- let value;
1447
- for (const getter of getters) try {
1448
- value = getter();
1449
- if (value) break;
1450
- } catch {}
1451
- if (!value) value = (0, import_dist.humanId)({
1452
- separator: "-",
1453
- capitalize: false
1454
- });
1455
- localStorage.setItem(CONNECTION_AUTH_TOKEN_KEY, value);
1456
- globalThis[CONNECTION_AUTH_TOKEN_KEY] = value;
1457
- return value;
1458
- }
1459
- function findConnectionMetaFromWindows() {
1460
- const getters = [
1461
- () => window?.[CONNECTION_META_KEY],
1462
- () => globalThis?.[CONNECTION_META_KEY],
1463
- () => parent.window?.[CONNECTION_META_KEY]
1464
- ];
1465
- for (const getter of getters) try {
1466
- const value = getter();
1467
- if (value) return value;
1468
- } catch {}
1469
- }
1470
- async function getDevToolsRpcClient(options = {}) {
1471
- const { baseURL = "./", rpcOptions = {}, cacheOptions = false } = options;
1472
- const events = createEventEmitter();
1473
- const bases = Array.isArray(baseURL) ? baseURL : [baseURL];
1474
- let connectionMeta = options.connectionMeta || findConnectionMetaFromWindows();
1475
- let resolvedBaseURL = bases[0] ?? "./";
1476
- function normalizeBase(base) {
1477
- return base.endsWith("/") ? base : `${base}/`;
1478
- }
1479
- function resolveBasePath(base, path) {
1480
- if (/^https?:\/\//.test(path)) return path;
1481
- if (path.startsWith("/")) return path;
1482
- return `${normalizeBase(base)}${path}`;
1483
- }
1484
- if (!connectionMeta) {
1485
- const errors = [];
1486
- for (const base of bases) try {
1487
- connectionMeta = await fetch(resolveBasePath(base, DEVTOOLS_CONNECTION_META_FILENAME)).then((r) => r.json());
1488
- resolvedBaseURL = base;
1489
- globalThis[CONNECTION_META_KEY] = connectionMeta;
1490
- break;
1491
- } catch (e) {
1492
- errors.push(e);
1493
- }
1494
- if (!connectionMeta) throw new Error(`Failed to get connection meta from ${bases.join(", ")}`, { cause: errors });
1495
- }
1496
- const cacheManager = new RpcCacheManager({
1497
- functions: [],
1498
- ...typeof options.cacheOptions === "object" ? options.cacheOptions : {}
1499
- });
1500
- const context = { rpc: void 0 };
1501
- const authToken = getConnectionAuthTokenFromWindows(options.authToken);
1502
- const clientRpc = new RpcFunctionsCollectorBase(context);
1503
- async function fetchJsonFromBases(path) {
1504
- const candidates = [resolvedBaseURL, ...bases.filter((base) => base !== resolvedBaseURL)].filter((x) => x != null);
1505
- const errors = [];
1506
- for (const base of candidates) try {
1507
- return await fetch(resolveBasePath(base, path)).then((r) => {
1508
- if (!r.ok) throw new Error(`Failed to fetch ${path} from ${base}: ${r.status}`);
1509
- return r.json();
1510
- });
1511
- } catch (error) {
1512
- errors.push(error);
1513
- }
1514
- throw new Error(`Failed to load ${path} from ${candidates.join(", ")}`, { cause: errors });
1515
- }
1516
- const mode = connectionMeta.backend === "static" ? await createStaticRpcClientMode({ fetchJsonFromBases }) : createWsRpcClientMode({
1517
- authToken,
1518
- connectionMeta,
1519
- events,
1520
- clientRpc,
1521
- rpcOptions: {
1522
- ...rpcOptions,
1523
- async onRequest(req, next, resolve) {
1524
- await rpcOptions.onRequest?.call(this, req, next, resolve);
1525
- if (cacheOptions && cacheManager?.validate(req.m)) {
1526
- const cached = cacheManager.cached(req.m, req.a);
1527
- if (cached) return resolve(cached);
1528
- else {
1529
- const res = await next(req);
1530
- cacheManager?.apply(req, res);
1531
- }
1532
- } else await next(req);
1533
- }
1534
- },
1535
- wsOptions: options.wsOptions
1536
- });
1537
- const rpc = {
1538
- events,
1539
- get isTrusted() {
1540
- return mode.isTrusted;
1541
- },
1542
- connectionMeta,
1543
- ensureTrusted: mode.ensureTrusted,
1544
- requestTrust: mode.requestTrust,
1545
- requestTrustWithToken: async (token) => {
1546
- localStorage.setItem(CONNECTION_AUTH_TOKEN_KEY, token);
1547
- globalThis[CONNECTION_AUTH_TOKEN_KEY] = token;
1548
- return mode.requestTrustWithToken(token);
1549
- },
1550
- call: mode.call,
1551
- callEvent: mode.callEvent,
1552
- callOptional: mode.callOptional,
1553
- client: clientRpc,
1554
- sharedState: void 0,
1555
- cacheManager
1556
- };
1557
- rpc.sharedState = createRpcSharedStateClientHost(rpc);
1558
- context.rpc = rpc;
1559
- mode.requestTrust();
1560
- try {
1561
- const bc = new BroadcastChannel("vite-devtools-auth");
1562
- bc.onmessage = (event) => {
1563
- if (event.data?.type === "auth-update" && event.data.authToken) rpc.requestTrustWithToken(event.data.authToken);
1564
- };
1565
- } catch {}
1566
- return rpc;
1567
- }
1568
- //#endregion
1569
- export { CLIENT_CONTEXT_KEY as n, getDevToolsClientContext as r, getDevToolsRpcClient as t };