chrome-devtools-mcp-for-extension 0.19.2 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +13 -9
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +9 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +1 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +9 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +5 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +10 -20
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +0 -11
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +6 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +1 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +110 -99
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +1 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +1 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +21 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js +66 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +102 -86
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +32 -450
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +32 -29
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +430 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +5 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +10 -22
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +26 -15
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/HostRuntime.js +19 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +34 -32
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/HostRuntime.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/api.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/HostRuntime.js +63 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/browser.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/HostRuntime.js +72 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/node.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +17 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/ConnectionTransport.js +12 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.js +138 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +49 -312
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +4 -9
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/DevToolsContext.js +54 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +2 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +0 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +51 -17
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +21 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +11 -5
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +4 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +11 -9
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +34 -24
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +52 -10
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +4 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +39 -35
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +10 -47
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +29 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +5 -20
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +17 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +1 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +428 -121
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +8 -22
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +44 -34
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +64 -19
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +139 -12
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +5 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +3 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScopeTreeCache.js +36 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +20 -18
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +26 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +3 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +54 -14
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +16 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +19 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +240 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +12 -17
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +38 -29
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +11 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +80 -31
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1301 -174
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +67 -22
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +62 -91
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +188 -100
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +30 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +50 -34
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +152 -101
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +11 -6
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +25 -26
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +46 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +10 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +82 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +33 -15
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +105 -14
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +38 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +5 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +9 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +6 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +6 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +16 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +6 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/FunctionCodeResolver.js +192 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +12 -16
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +8 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +1 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +6 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +4 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +11 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +7 -5
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +8 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +4 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +29 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +59 -6
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +26 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +18 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +12 -11
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +3 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +14 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +13 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +4 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +9 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +25 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +41 -48
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +38 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +5 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace-meta.js +34 -0
- package/build/src/McpContext.js +8 -1
- package/build/src/tools/bookmarks.js +0 -1
- package/build/src/tools/gemini-web.js +17 -25
- package/build/src/tools/snapshot.js +9 -2
- package/package.json +3 -3
|
@@ -14,13 +14,11 @@ import * as EventTarget from './EventTarget.js';
|
|
|
14
14
|
import * as Gzip from './Gzip.js';
|
|
15
15
|
import * as JavaScriptMetaData from './JavaScriptMetaData.js';
|
|
16
16
|
import * as Lazy from './Lazy.js';
|
|
17
|
-
import * as Linkifier from './Linkifier.js';
|
|
18
17
|
import * as MapWithDefault from './MapWithDefault.js';
|
|
19
18
|
import * as Mutex from './Mutex.js';
|
|
20
19
|
import * as ObjectWrapper from './Object.js';
|
|
21
20
|
import * as ParsedURL from './ParsedURL.js';
|
|
22
21
|
import * as Progress from './Progress.js';
|
|
23
|
-
import * as QueryParamHandler from './QueryParamHandler.js';
|
|
24
22
|
import * as ResolverBase from './ResolverBase.js';
|
|
25
23
|
import * as ResourceType from './ResourceType.js';
|
|
26
24
|
import * as ReturnToPanel from './ReturnToPanel.js';
|
|
@@ -34,11 +32,10 @@ import * as StringOutputStream from './StringOutputStream.js';
|
|
|
34
32
|
import * as TextDictionary from './TextDictionary.js';
|
|
35
33
|
import * as Throttler from './Throttler.js';
|
|
36
34
|
import * as Trie from './Trie.js';
|
|
37
|
-
import * as Worker from './Worker.js';
|
|
38
35
|
/*
|
|
39
36
|
* This is re-exported here because we moved UIString into platform from
|
|
40
37
|
* common and wanted to avoid a huge rename of imports. A future CL will
|
|
41
38
|
* update all references to `Common.UIString` to `Platform.UIString`.
|
|
42
39
|
*/
|
|
43
40
|
export { UIString } from '../platform/platform.js';
|
|
44
|
-
export { App, AppProvider, Base64, CharacterIdMap, Color, ColorConverter, ColorUtils, Console, Debouncer, EventTarget, Gzip, JavaScriptMetaData, Lazy,
|
|
41
|
+
export { App, AppProvider, Base64, CharacterIdMap, Color, ColorConverter, ColorUtils, Console, Debouncer, EventTarget, Gzip, JavaScriptMetaData, Lazy, MapWithDefault, Mutex, ObjectWrapper, ParsedURL, Progress, ResolverBase, ResourceType, ReturnToPanel, Revealer, Runnable, SegmentedRange, SettingRegistration, Settings, SimpleHistoryManager, StringOutputStream, TextDictionary, Throttler, Trie, };
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
import * as Common from '../common/common.js';
|
|
5
5
|
import * as Root from '../root/root.js';
|
|
6
|
+
import * as DispatchHttpRequestClient from './DispatchHttpRequestClient.js';
|
|
6
7
|
import { InspectorFrontendHostInstance } from './InspectorFrontendHost.js';
|
|
7
8
|
import { bindOutputStream } from './ResourceLoader.js';
|
|
8
9
|
export var Role;
|
|
@@ -24,7 +25,7 @@ export var FunctionalityType;
|
|
|
24
25
|
FunctionalityType[FunctionalityType["EXPLAIN_ERROR"] = 2] = "EXPLAIN_ERROR";
|
|
25
26
|
FunctionalityType[FunctionalityType["AGENTIC_CHAT"] = 5] = "AGENTIC_CHAT";
|
|
26
27
|
})(FunctionalityType || (FunctionalityType = {}));
|
|
27
|
-
|
|
28
|
+
/** See: cs/aida.proto (google3). **/
|
|
28
29
|
export var ClientFeature;
|
|
29
30
|
(function (ClientFeature) {
|
|
30
31
|
// Unspecified client feature.
|
|
@@ -95,6 +96,14 @@ export var Reason;
|
|
|
95
96
|
Reason[Reason["RELATED_FILE"] = 5] = "RELATED_FILE";
|
|
96
97
|
})(Reason || (Reason = {}));
|
|
97
98
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
99
|
+
export var UseCase;
|
|
100
|
+
(function (UseCase) {
|
|
101
|
+
// Unspecified usecase.
|
|
102
|
+
UseCase[UseCase["USE_CASE_UNSPECIFIED"] = 0] = "USE_CASE_UNSPECIFIED";
|
|
103
|
+
// Code generation use case is expected to generate code from scratch
|
|
104
|
+
UseCase[UseCase["CODE_GENERATION"] = 1] = "CODE_GENERATION";
|
|
105
|
+
})(UseCase || (UseCase = {}));
|
|
106
|
+
/* eslint-enable @typescript-eslint/naming-convention */
|
|
98
107
|
export var RecitationAction;
|
|
99
108
|
(function (RecitationAction) {
|
|
100
109
|
RecitationAction["ACTION_UNSPECIFIED"] = "ACTION_UNSPECIFIED";
|
|
@@ -129,6 +138,7 @@ const AidaLanguageToMarkdown = {
|
|
|
129
138
|
XML: 'xml',
|
|
130
139
|
};
|
|
131
140
|
export const CLIENT_NAME = 'CHROME_DEVTOOLS';
|
|
141
|
+
export const SERVICE_NAME = 'aidaService';
|
|
132
142
|
const CODE_CHUNK_SEPARATOR = (lang = '') => ('\n`````' + lang + '\n');
|
|
133
143
|
export class AidaAbortError extends Error {
|
|
134
144
|
}
|
|
@@ -358,6 +368,15 @@ export class AidaClient {
|
|
|
358
368
|
}
|
|
359
369
|
return { generatedSamples, metadata };
|
|
360
370
|
}
|
|
371
|
+
async generateCode(request, options) {
|
|
372
|
+
const response = await DispatchHttpRequestClient.makeHttpRequest({
|
|
373
|
+
service: SERVICE_NAME,
|
|
374
|
+
path: '/v1/aida:generateCode',
|
|
375
|
+
method: 'POST',
|
|
376
|
+
body: JSON.stringify(request),
|
|
377
|
+
}, options);
|
|
378
|
+
return response;
|
|
379
|
+
}
|
|
361
380
|
}
|
|
362
381
|
export function convertToUserTierEnum(userTier) {
|
|
363
382
|
if (userTier) {
|
|
@@ -370,7 +389,7 @@ export function convertToUserTierEnum(userTier) {
|
|
|
370
389
|
return UserTier.PUBLIC;
|
|
371
390
|
}
|
|
372
391
|
}
|
|
373
|
-
return UserTier.
|
|
392
|
+
return UserTier.PUBLIC;
|
|
374
393
|
}
|
|
375
394
|
let hostConfigTrackerInstance;
|
|
376
395
|
export class HostConfigTracker extends Common.ObjectWrapper.ObjectWrapper {
|
package/build/node_modules/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Copyright 2025 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
import { InspectorFrontendHostInstance } from './InspectorFrontendHost.js';
|
|
5
|
+
export var ErrorType;
|
|
6
|
+
(function (ErrorType) {
|
|
7
|
+
ErrorType["HTTP_RESPONSE_UNAVAILABLE"] = "HTTP_RESPONSE_UNAVAILABLE";
|
|
8
|
+
ErrorType["NOT_FOUND"] = "NOT_FOUND";
|
|
9
|
+
ErrorType["ABORT"] = "ABORT";
|
|
10
|
+
})(ErrorType || (ErrorType = {}));
|
|
11
|
+
export class DispatchHttpRequestError extends Error {
|
|
12
|
+
type;
|
|
13
|
+
constructor(type, options) {
|
|
14
|
+
super(undefined, options);
|
|
15
|
+
this.type = type;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function makeHttpRequest(request, options) {
|
|
19
|
+
const signal = options?.signal;
|
|
20
|
+
if (signal?.aborted) {
|
|
21
|
+
throw new DispatchHttpRequestError(ErrorType.ABORT);
|
|
22
|
+
}
|
|
23
|
+
const response = await new Promise((resolve, reject) => {
|
|
24
|
+
const onAbort = () => {
|
|
25
|
+
reject(new DispatchHttpRequestError(ErrorType.ABORT));
|
|
26
|
+
};
|
|
27
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
28
|
+
InspectorFrontendHostInstance.dispatchHttpRequest(request, result => {
|
|
29
|
+
signal?.removeEventListener('abort', onAbort);
|
|
30
|
+
resolve(result);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
debugLog({ request, response });
|
|
34
|
+
if (response.statusCode === 404) {
|
|
35
|
+
throw new DispatchHttpRequestError(ErrorType.NOT_FOUND);
|
|
36
|
+
}
|
|
37
|
+
if ('response' in response && response.statusCode === 200) {
|
|
38
|
+
try {
|
|
39
|
+
return JSON.parse(response.response);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
throw new DispatchHttpRequestError(ErrorType.HTTP_RESPONSE_UNAVAILABLE, { cause: err });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
throw new DispatchHttpRequestError(ErrorType.HTTP_RESPONSE_UNAVAILABLE);
|
|
46
|
+
}
|
|
47
|
+
function isDebugMode() {
|
|
48
|
+
return Boolean(localStorage.getItem('debugDispatchHttpRequestEnabled'));
|
|
49
|
+
}
|
|
50
|
+
function debugLog(...log) {
|
|
51
|
+
if (!isDebugMode()) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// eslint-disable-next-line no-console
|
|
55
|
+
console.log('debugLog', ...log);
|
|
56
|
+
}
|
|
57
|
+
function setDebugDispatchHttpRequestEnabled(enabled) {
|
|
58
|
+
if (enabled) {
|
|
59
|
+
localStorage.setItem('debugDispatchHttpRequestEnabled', 'true');
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
localStorage.removeItem('debugDispatchHttpRequestEnabled');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// @ts-expect-error
|
|
66
|
+
globalThis.setDebugDispatchHttpRequestEnabled = setDebugDispatchHttpRequestEnabled;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
import * as Root from '../root/root.js';
|
|
5
|
-
import
|
|
5
|
+
import * as DispatchHttpRequestClient from './DispatchHttpRequestClient.js';
|
|
6
6
|
export var SubscriptionStatus;
|
|
7
7
|
(function (SubscriptionStatus) {
|
|
8
8
|
SubscriptionStatus["ENABLED"] = "SUBSCRIPTION_STATE_ENABLED";
|
|
@@ -29,27 +29,24 @@ export var EmailPreference;
|
|
|
29
29
|
EmailPreference["ENABLED"] = "ENABLED";
|
|
30
30
|
EmailPreference["DISABLED"] = "DISABLED";
|
|
31
31
|
})(EmailPreference || (EmailPreference = {}));
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
/**
|
|
33
|
+
* The `batchGet` awards endpoint returns badge names with an
|
|
34
|
+
* obfuscated user ID (e.g., `profiles/12345/awards/badge-name`).
|
|
35
|
+
* This function normalizes them to use `me` instead of the ID
|
|
36
|
+
* (e.g., `profiles/me/awards/badge-path`) to match the format
|
|
37
|
+
* used for client-side requests.
|
|
38
|
+
**/
|
|
37
39
|
function normalizeBadgeName(name) {
|
|
38
40
|
return name.replace(/profiles\/[^/]+\/awards\//, 'profiles/me/awards/');
|
|
39
41
|
}
|
|
40
42
|
export const GOOGLE_DEVELOPER_PROGRAM_PROFILE_LINK = 'https://developers.google.com/profile/u/me';
|
|
43
|
+
const ORIGIN_APPLICATION_NAME = 'APPLICATION_CHROME_DEVTOOLS';
|
|
41
44
|
async function makeHttpRequest(request) {
|
|
42
45
|
if (!isGdpProfilesAvailable()) {
|
|
43
|
-
|
|
46
|
+
throw new DispatchHttpRequestClient.DispatchHttpRequestError(DispatchHttpRequestClient.ErrorType.HTTP_RESPONSE_UNAVAILABLE);
|
|
44
47
|
}
|
|
45
|
-
const response = await
|
|
46
|
-
|
|
47
|
-
});
|
|
48
|
-
debugLog({ request, response });
|
|
49
|
-
if ('response' in response && response.statusCode === 200) {
|
|
50
|
-
return JSON.parse(response.response);
|
|
51
|
-
}
|
|
52
|
-
return null;
|
|
48
|
+
const response = await DispatchHttpRequestClient.makeHttpRequest(request);
|
|
49
|
+
return response;
|
|
53
50
|
}
|
|
54
51
|
const SERVICE_NAME = 'gdpService';
|
|
55
52
|
let gdpClientInstance = null;
|
|
@@ -64,21 +61,42 @@ export class GdpClient {
|
|
|
64
61
|
}
|
|
65
62
|
return gdpClientInstance;
|
|
66
63
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Fetches the user's GDP profile and eligibility status.
|
|
66
|
+
*
|
|
67
|
+
* It first attempts to fetch the profile. If the profile is not found
|
|
68
|
+
* (a `NOT_FOUND` error), this is handled gracefully by treating the profile
|
|
69
|
+
* as `null` and then proceeding to check for eligibility.
|
|
70
|
+
*
|
|
71
|
+
* @returns A promise that resolves with an object containing the `profile`
|
|
72
|
+
* and `isEligible` status, or `null` if an unexpected error occurs.
|
|
73
|
+
*/
|
|
74
|
+
async getProfile() {
|
|
75
|
+
try {
|
|
76
|
+
const profile = await this.#getProfile();
|
|
70
77
|
return {
|
|
71
|
-
|
|
78
|
+
profile,
|
|
72
79
|
isEligible: true,
|
|
73
80
|
};
|
|
74
81
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
82
|
+
catch (err) {
|
|
83
|
+
if (err instanceof DispatchHttpRequestClient.DispatchHttpRequestError &&
|
|
84
|
+
err.type === DispatchHttpRequestClient.ErrorType.HTTP_RESPONSE_UNAVAILABLE) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const checkEligibilityResponse = await this.#checkEligibility();
|
|
90
|
+
return {
|
|
91
|
+
profile: null,
|
|
92
|
+
isEligible: checkEligibilityResponse.createProfile === EligibilityStatus.ELIGIBLE,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
80
98
|
}
|
|
81
|
-
async getProfile() {
|
|
99
|
+
async #getProfile() {
|
|
82
100
|
if (this.#cachedProfilePromise) {
|
|
83
101
|
return await this.#cachedProfilePromise;
|
|
84
102
|
}
|
|
@@ -86,14 +104,13 @@ export class GdpClient {
|
|
|
86
104
|
service: SERVICE_NAME,
|
|
87
105
|
path: '/v1beta1/profile:get',
|
|
88
106
|
method: 'GET',
|
|
89
|
-
})
|
|
90
|
-
const profile = await this.#cachedProfilePromise;
|
|
91
|
-
if (profile) {
|
|
107
|
+
}).then(profile => {
|
|
92
108
|
this.#cachedEligibilityPromise = Promise.resolve({ createProfile: EligibilityStatus.ELIGIBLE });
|
|
93
|
-
|
|
94
|
-
|
|
109
|
+
return profile;
|
|
110
|
+
});
|
|
111
|
+
return await this.#cachedProfilePromise;
|
|
95
112
|
}
|
|
96
|
-
async checkEligibility() {
|
|
113
|
+
async #checkEligibility() {
|
|
97
114
|
if (this.#cachedEligibilityPromise) {
|
|
98
115
|
return await this.#cachedEligibilityPromise;
|
|
99
116
|
}
|
|
@@ -105,70 +122,63 @@ export class GdpClient {
|
|
|
105
122
|
* @returns null if the request fails, the awarded badge names otherwise.
|
|
106
123
|
*/
|
|
107
124
|
async getAwardedBadgeNames({ names }) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
125
|
+
try {
|
|
126
|
+
const response = await makeHttpRequest({
|
|
127
|
+
service: SERVICE_NAME,
|
|
128
|
+
path: '/v1beta1/profiles/me/awards:batchGet',
|
|
129
|
+
method: 'GET',
|
|
130
|
+
queryParams: {
|
|
131
|
+
allowMissing: 'true',
|
|
132
|
+
names,
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
return new Set(response.awards?.map(award => normalizeBadgeName(award.name)) ?? []);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
118
138
|
return null;
|
|
119
139
|
}
|
|
120
|
-
return new Set(result.awards?.map(award => normalizeBadgeName(award.name)) ?? []);
|
|
121
|
-
}
|
|
122
|
-
async isEligibleToCreateProfile() {
|
|
123
|
-
return (await this.checkEligibility())?.createProfile === EligibilityStatus.ELIGIBLE;
|
|
124
140
|
}
|
|
125
141
|
async createProfile({ user, emailPreference }) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
142
|
+
try {
|
|
143
|
+
const response = await makeHttpRequest({
|
|
144
|
+
service: SERVICE_NAME,
|
|
145
|
+
path: '/v1beta1/profiles',
|
|
146
|
+
method: 'POST',
|
|
147
|
+
body: JSON.stringify({
|
|
148
|
+
user,
|
|
149
|
+
newsletter_email: emailPreference,
|
|
150
|
+
creation_origin: {
|
|
151
|
+
origin_application: ORIGIN_APPLICATION_NAME,
|
|
152
|
+
}
|
|
153
|
+
}),
|
|
154
|
+
});
|
|
136
155
|
this.#clearCache();
|
|
156
|
+
return response;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return null;
|
|
137
160
|
}
|
|
138
|
-
return result;
|
|
139
161
|
}
|
|
140
162
|
#clearCache() {
|
|
141
163
|
this.#cachedProfilePromise = undefined;
|
|
142
164
|
this.#cachedEligibilityPromise = undefined;
|
|
143
165
|
}
|
|
144
|
-
createAward({ name }) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (!isDebugMode()) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
// eslint-disable-next-line no-console
|
|
164
|
-
console.log('debugLog', ...log);
|
|
165
|
-
}
|
|
166
|
-
function setDebugGdpIntegrationEnabled(enabled) {
|
|
167
|
-
if (enabled) {
|
|
168
|
-
localStorage.setItem('debugGdpIntegrationEnabled', 'true');
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
localStorage.removeItem('debugGdpIntegrationEnabled');
|
|
166
|
+
async createAward({ name }) {
|
|
167
|
+
try {
|
|
168
|
+
const response = await makeHttpRequest({
|
|
169
|
+
service: SERVICE_NAME,
|
|
170
|
+
path: '/v1beta1/profiles/me/awards',
|
|
171
|
+
method: 'POST',
|
|
172
|
+
body: JSON.stringify({
|
|
173
|
+
awardingUri: 'devtools://devtools',
|
|
174
|
+
name,
|
|
175
|
+
})
|
|
176
|
+
});
|
|
177
|
+
return response;
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
172
182
|
}
|
|
173
183
|
}
|
|
174
184
|
export function isGdpProfilesAvailable() {
|
|
@@ -182,5 +192,11 @@ export function getGdpProfilesEnterprisePolicy() {
|
|
|
182
192
|
return (Root.Runtime.hostConfig.devToolsGdpProfilesAvailability?.enterprisePolicyValue ??
|
|
183
193
|
Root.Runtime.GdpProfilesEnterprisePolicyValue.DISABLED);
|
|
184
194
|
}
|
|
185
|
-
|
|
186
|
-
|
|
195
|
+
export function isBadgesEnabled() {
|
|
196
|
+
const isBadgesEnabledByEnterprisePolicy = getGdpProfilesEnterprisePolicy() === Root.Runtime.GdpProfilesEnterprisePolicyValue.ENABLED;
|
|
197
|
+
const isBadgesEnabledByFeatureFlag = Boolean(Root.Runtime.hostConfig.devToolsGdpProfiles?.badgesEnabled);
|
|
198
|
+
return isBadgesEnabledByEnterprisePolicy && isBadgesEnabledByFeatureFlag;
|
|
199
|
+
}
|
|
200
|
+
export function isStarterBadgeEnabled() {
|
|
201
|
+
return Boolean(Root.Runtime.hostConfig.devToolsGdpProfiles?.starterBadgeEnabled);
|
|
202
|
+
}
|