@google/genai 1.23.0 → 1.24.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/dist/genai.d.ts CHANGED
@@ -3423,6 +3423,8 @@ export declare interface GoogleGenAIOptions {
3423
3423
  export declare interface GoogleMaps {
3424
3424
  /** Optional. Auth config for the Google Maps tool. */
3425
3425
  authConfig?: AuthConfig;
3426
+ /** Optional. If true, include the widget context token in the response. */
3427
+ enableWidget?: boolean;
3426
3428
  }
3427
3429
 
3428
3430
  /** The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). */
@@ -3516,6 +3518,10 @@ export declare interface GroundingChunkMapsPlaceAnswerSourcesReviewSnippet {
3516
3518
  relativePublishTimeDescription?: string;
3517
3519
  /** A reference representing this place review which may be used to look up this place review again. */
3518
3520
  review?: string;
3521
+ /** Id of the review referencing the place. */
3522
+ reviewId?: string;
3523
+ /** Title of the review. */
3524
+ title?: string;
3519
3525
  }
3520
3526
 
3521
3527
  /** Chunk from context retrieved by the retrieval tools. */
@@ -3556,10 +3562,20 @@ export declare interface GroundingMetadata {
3556
3562
  retrievalQueries?: string[];
3557
3563
  /** Optional. Google search entry for the following-up web searches. */
3558
3564
  searchEntryPoint?: SearchEntryPoint;
3565
+ /** Optional. Output only. List of source flagging uris. This is currently populated only for Google Maps grounding. */
3566
+ sourceFlaggingUris?: GroundingMetadataSourceFlaggingUri[];
3559
3567
  /** Optional. Web search queries for the following-up web search. */
3560
3568
  webSearchQueries?: string[];
3561
3569
  }
3562
3570
 
3571
+ /** Source content flagging uri for a place or review. This is currently populated only for Google Maps grounding. */
3572
+ export declare interface GroundingMetadataSourceFlaggingUri {
3573
+ /** A link where users can flag a problem with the source (place or review). */
3574
+ flagContentUri?: string;
3575
+ /** Id of the place or review. */
3576
+ sourceId?: string;
3577
+ }
3578
+
3563
3579
  /** Grounding support. */
3564
3580
  export declare interface GroundingSupport {
3565
3581
  /** Confidence score of the support references. Ranges from 0 to 1. 1 is the most confident. For Gemini 2.0 and before, this list must have the same size as the grounding_chunk_indices. For Gemini 2.5 and after, this list will be empty and should be ignored. */
@@ -3859,6 +3875,8 @@ export declare interface InlinedRequest {
3859
3875
  /** Content of the request.
3860
3876
  */
3861
3877
  contents?: ContentListUnion;
3878
+ /** The metadata to be associated with the request. */
3879
+ metadata?: Record<string, string>;
3862
3880
  /** Configuration that contains optional model parameters.
3863
3881
  */
3864
3882
  config?: GenerateContentConfig;
@@ -7329,6 +7347,7 @@ declare namespace types {
7329
7347
  GroundingSupport,
7330
7348
  RetrievalMetadata,
7331
7349
  SearchEntryPoint,
7350
+ GroundingMetadataSourceFlaggingUri,
7332
7351
  GroundingMetadata,
7333
7352
  LogprobsResultCandidate,
7334
7353
  LogprobsResultTopCandidates,
package/dist/index.cjs CHANGED
@@ -3748,6 +3748,17 @@ function getBatchJobParametersToVertex(apiClient, fromObject) {
3748
3748
  }
3749
3749
  return toObject;
3750
3750
  }
3751
+ function googleMapsToMldev$4(fromObject) {
3752
+ const toObject = {};
3753
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
3754
+ throw new Error('authConfig parameter is not supported in Gemini API.');
3755
+ }
3756
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
3757
+ if (fromEnableWidget != null) {
3758
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
3759
+ }
3760
+ return toObject;
3761
+ }
3751
3762
  function googleSearchToMldev$4(fromObject) {
3752
3763
  const toObject = {};
3753
3764
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -3777,6 +3788,10 @@ function inlinedRequestToMldev(apiClient, fromObject) {
3777
3788
  }
3778
3789
  setValueByPath(toObject, ['request', 'contents'], transformedList);
3779
3790
  }
3791
+ const fromMetadata = getValueByPath(fromObject, ['metadata']);
3792
+ if (fromMetadata != null) {
3793
+ setValueByPath(toObject, ['metadata'], fromMetadata);
3794
+ }
3780
3795
  const fromConfig = getValueByPath(fromObject, ['config']);
3781
3796
  if (fromConfig != null) {
3782
3797
  setValueByPath(toObject, ['request', 'generationConfig'], generateContentConfigToMldev$1(apiClient, fromConfig, getValueByPath(toObject, ['request'], {})));
@@ -3995,8 +4010,9 @@ function toolToMldev$4(fromObject) {
3995
4010
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
3996
4011
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
3997
4012
  }
3998
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
3999
- throw new Error('googleMaps parameter is not supported in Gemini API.');
4013
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
4014
+ if (fromGoogleMaps != null) {
4015
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev$4(fromGoogleMaps));
4000
4016
  }
4001
4017
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
4002
4018
  if (fromUrlContext != null) {
@@ -5019,6 +5035,17 @@ function getCachedContentParametersToVertex(apiClient, fromObject) {
5019
5035
  }
5020
5036
  return toObject;
5021
5037
  }
5038
+ function googleMapsToMldev$3(fromObject) {
5039
+ const toObject = {};
5040
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
5041
+ throw new Error('authConfig parameter is not supported in Gemini API.');
5042
+ }
5043
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
5044
+ if (fromEnableWidget != null) {
5045
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
5046
+ }
5047
+ return toObject;
5048
+ }
5022
5049
  function googleSearchToMldev$3(fromObject) {
5023
5050
  const toObject = {};
5024
5051
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -5212,8 +5239,9 @@ function toolToMldev$3(fromObject) {
5212
5239
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
5213
5240
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
5214
5241
  }
5215
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
5216
- throw new Error('googleMaps parameter is not supported in Gemini API.');
5242
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
5243
+ if (fromGoogleMaps != null) {
5244
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev$3(fromGoogleMaps));
5217
5245
  }
5218
5246
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
5219
5247
  if (fromUrlContext != null) {
@@ -6119,7 +6147,7 @@ const CONTENT_TYPE_HEADER = 'Content-Type';
6119
6147
  const SERVER_TIMEOUT_HEADER = 'X-Server-Timeout';
6120
6148
  const USER_AGENT_HEADER = 'User-Agent';
6121
6149
  const GOOGLE_API_CLIENT_HEADER = 'x-goog-api-client';
6122
- const SDK_VERSION = '1.23.0'; // x-release-please-version
6150
+ const SDK_VERSION = '1.24.0'; // x-release-please-version
6123
6151
  const LIBRARY_LABEL = `google-genai-sdk/${SDK_VERSION}`;
6124
6152
  const VERTEX_AI_API_DEFAULT_VERSION = 'v1beta1';
6125
6153
  const GOOGLE_AI_API_DEFAULT_VERSION = 'v1beta';
@@ -7393,6 +7421,17 @@ function generationConfigToVertex$1(fromObject) {
7393
7421
  }
7394
7422
  return toObject;
7395
7423
  }
7424
+ function googleMapsToMldev$2(fromObject) {
7425
+ const toObject = {};
7426
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
7427
+ throw new Error('authConfig parameter is not supported in Gemini API.');
7428
+ }
7429
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
7430
+ if (fromEnableWidget != null) {
7431
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
7432
+ }
7433
+ return toObject;
7434
+ }
7396
7435
  function googleSearchToMldev$2(fromObject) {
7397
7436
  const toObject = {};
7398
7437
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -7912,8 +7951,9 @@ function toolToMldev$2(fromObject) {
7912
7951
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
7913
7952
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
7914
7953
  }
7915
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
7916
- throw new Error('googleMaps parameter is not supported in Gemini API.');
7954
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
7955
+ if (fromGoogleMaps != null) {
7956
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev$2(fromGoogleMaps));
7917
7957
  }
7918
7958
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
7919
7959
  if (fromUrlContext != null) {
@@ -10056,6 +10096,17 @@ function getModelParametersToVertex(apiClient, fromObject) {
10056
10096
  }
10057
10097
  return toObject;
10058
10098
  }
10099
+ function googleMapsToMldev$1(fromObject) {
10100
+ const toObject = {};
10101
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
10102
+ throw new Error('authConfig parameter is not supported in Gemini API.');
10103
+ }
10104
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
10105
+ if (fromEnableWidget != null) {
10106
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
10107
+ }
10108
+ return toObject;
10109
+ }
10059
10110
  function googleSearchToMldev$1(fromObject) {
10060
10111
  const toObject = {};
10061
10112
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -10770,8 +10821,9 @@ function toolToMldev$1(fromObject) {
10770
10821
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
10771
10822
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
10772
10823
  }
10773
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
10774
- throw new Error('googleMaps parameter is not supported in Gemini API.');
10824
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
10825
+ if (fromGoogleMaps != null) {
10826
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev$1(fromGoogleMaps));
10775
10827
  }
10776
10828
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
10777
10829
  if (fromUrlContext != null) {
@@ -13785,6 +13837,17 @@ function fileDataToMldev(fromObject) {
13785
13837
  }
13786
13838
  return toObject;
13787
13839
  }
13840
+ function googleMapsToMldev(fromObject) {
13841
+ const toObject = {};
13842
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
13843
+ throw new Error('authConfig parameter is not supported in Gemini API.');
13844
+ }
13845
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
13846
+ if (fromEnableWidget != null) {
13847
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
13848
+ }
13849
+ return toObject;
13850
+ }
13788
13851
  function googleSearchToMldev(fromObject) {
13789
13852
  const toObject = {};
13790
13853
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -14015,8 +14078,9 @@ function toolToMldev(fromObject) {
14015
14078
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
14016
14079
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
14017
14080
  }
14018
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
14019
- throw new Error('googleMaps parameter is not supported in Gemini API.');
14081
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
14082
+ if (fromGoogleMaps != null) {
14083
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev(fromGoogleMaps));
14020
14084
  }
14021
14085
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
14022
14086
  if (fromUrlContext != null) {
package/dist/index.mjs CHANGED
@@ -3746,6 +3746,17 @@ function getBatchJobParametersToVertex(apiClient, fromObject) {
3746
3746
  }
3747
3747
  return toObject;
3748
3748
  }
3749
+ function googleMapsToMldev$4(fromObject) {
3750
+ const toObject = {};
3751
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
3752
+ throw new Error('authConfig parameter is not supported in Gemini API.');
3753
+ }
3754
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
3755
+ if (fromEnableWidget != null) {
3756
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
3757
+ }
3758
+ return toObject;
3759
+ }
3749
3760
  function googleSearchToMldev$4(fromObject) {
3750
3761
  const toObject = {};
3751
3762
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -3775,6 +3786,10 @@ function inlinedRequestToMldev(apiClient, fromObject) {
3775
3786
  }
3776
3787
  setValueByPath(toObject, ['request', 'contents'], transformedList);
3777
3788
  }
3789
+ const fromMetadata = getValueByPath(fromObject, ['metadata']);
3790
+ if (fromMetadata != null) {
3791
+ setValueByPath(toObject, ['metadata'], fromMetadata);
3792
+ }
3778
3793
  const fromConfig = getValueByPath(fromObject, ['config']);
3779
3794
  if (fromConfig != null) {
3780
3795
  setValueByPath(toObject, ['request', 'generationConfig'], generateContentConfigToMldev$1(apiClient, fromConfig, getValueByPath(toObject, ['request'], {})));
@@ -3993,8 +4008,9 @@ function toolToMldev$4(fromObject) {
3993
4008
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
3994
4009
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
3995
4010
  }
3996
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
3997
- throw new Error('googleMaps parameter is not supported in Gemini API.');
4011
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
4012
+ if (fromGoogleMaps != null) {
4013
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev$4(fromGoogleMaps));
3998
4014
  }
3999
4015
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
4000
4016
  if (fromUrlContext != null) {
@@ -5017,6 +5033,17 @@ function getCachedContentParametersToVertex(apiClient, fromObject) {
5017
5033
  }
5018
5034
  return toObject;
5019
5035
  }
5036
+ function googleMapsToMldev$3(fromObject) {
5037
+ const toObject = {};
5038
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
5039
+ throw new Error('authConfig parameter is not supported in Gemini API.');
5040
+ }
5041
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
5042
+ if (fromEnableWidget != null) {
5043
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
5044
+ }
5045
+ return toObject;
5046
+ }
5020
5047
  function googleSearchToMldev$3(fromObject) {
5021
5048
  const toObject = {};
5022
5049
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -5210,8 +5237,9 @@ function toolToMldev$3(fromObject) {
5210
5237
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
5211
5238
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
5212
5239
  }
5213
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
5214
- throw new Error('googleMaps parameter is not supported in Gemini API.');
5240
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
5241
+ if (fromGoogleMaps != null) {
5242
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev$3(fromGoogleMaps));
5215
5243
  }
5216
5244
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
5217
5245
  if (fromUrlContext != null) {
@@ -6117,7 +6145,7 @@ const CONTENT_TYPE_HEADER = 'Content-Type';
6117
6145
  const SERVER_TIMEOUT_HEADER = 'X-Server-Timeout';
6118
6146
  const USER_AGENT_HEADER = 'User-Agent';
6119
6147
  const GOOGLE_API_CLIENT_HEADER = 'x-goog-api-client';
6120
- const SDK_VERSION = '1.23.0'; // x-release-please-version
6148
+ const SDK_VERSION = '1.24.0'; // x-release-please-version
6121
6149
  const LIBRARY_LABEL = `google-genai-sdk/${SDK_VERSION}`;
6122
6150
  const VERTEX_AI_API_DEFAULT_VERSION = 'v1beta1';
6123
6151
  const GOOGLE_AI_API_DEFAULT_VERSION = 'v1beta';
@@ -7391,6 +7419,17 @@ function generationConfigToVertex$1(fromObject) {
7391
7419
  }
7392
7420
  return toObject;
7393
7421
  }
7422
+ function googleMapsToMldev$2(fromObject) {
7423
+ const toObject = {};
7424
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
7425
+ throw new Error('authConfig parameter is not supported in Gemini API.');
7426
+ }
7427
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
7428
+ if (fromEnableWidget != null) {
7429
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
7430
+ }
7431
+ return toObject;
7432
+ }
7394
7433
  function googleSearchToMldev$2(fromObject) {
7395
7434
  const toObject = {};
7396
7435
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -7910,8 +7949,9 @@ function toolToMldev$2(fromObject) {
7910
7949
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
7911
7950
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
7912
7951
  }
7913
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
7914
- throw new Error('googleMaps parameter is not supported in Gemini API.');
7952
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
7953
+ if (fromGoogleMaps != null) {
7954
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev$2(fromGoogleMaps));
7915
7955
  }
7916
7956
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
7917
7957
  if (fromUrlContext != null) {
@@ -10054,6 +10094,17 @@ function getModelParametersToVertex(apiClient, fromObject) {
10054
10094
  }
10055
10095
  return toObject;
10056
10096
  }
10097
+ function googleMapsToMldev$1(fromObject) {
10098
+ const toObject = {};
10099
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
10100
+ throw new Error('authConfig parameter is not supported in Gemini API.');
10101
+ }
10102
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
10103
+ if (fromEnableWidget != null) {
10104
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
10105
+ }
10106
+ return toObject;
10107
+ }
10057
10108
  function googleSearchToMldev$1(fromObject) {
10058
10109
  const toObject = {};
10059
10110
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -10768,8 +10819,9 @@ function toolToMldev$1(fromObject) {
10768
10819
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
10769
10820
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
10770
10821
  }
10771
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
10772
- throw new Error('googleMaps parameter is not supported in Gemini API.');
10822
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
10823
+ if (fromGoogleMaps != null) {
10824
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev$1(fromGoogleMaps));
10773
10825
  }
10774
10826
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
10775
10827
  if (fromUrlContext != null) {
@@ -13783,6 +13835,17 @@ function fileDataToMldev(fromObject) {
13783
13835
  }
13784
13836
  return toObject;
13785
13837
  }
13838
+ function googleMapsToMldev(fromObject) {
13839
+ const toObject = {};
13840
+ if (getValueByPath(fromObject, ['authConfig']) !== undefined) {
13841
+ throw new Error('authConfig parameter is not supported in Gemini API.');
13842
+ }
13843
+ const fromEnableWidget = getValueByPath(fromObject, ['enableWidget']);
13844
+ if (fromEnableWidget != null) {
13845
+ setValueByPath(toObject, ['enableWidget'], fromEnableWidget);
13846
+ }
13847
+ return toObject;
13848
+ }
13786
13849
  function googleSearchToMldev(fromObject) {
13787
13850
  const toObject = {};
13788
13851
  const fromTimeRangeFilter = getValueByPath(fromObject, [
@@ -14013,8 +14076,9 @@ function toolToMldev(fromObject) {
14013
14076
  if (getValueByPath(fromObject, ['enterpriseWebSearch']) !== undefined) {
14014
14077
  throw new Error('enterpriseWebSearch parameter is not supported in Gemini API.');
14015
14078
  }
14016
- if (getValueByPath(fromObject, ['googleMaps']) !== undefined) {
14017
- throw new Error('googleMaps parameter is not supported in Gemini API.');
14079
+ const fromGoogleMaps = getValueByPath(fromObject, ['googleMaps']);
14080
+ if (fromGoogleMaps != null) {
14081
+ setValueByPath(toObject, ['googleMaps'], googleMapsToMldev(fromGoogleMaps));
14018
14082
  }
14019
14083
  const fromUrlContext = getValueByPath(fromObject, ['urlContext']);
14020
14084
  if (fromUrlContext != null) {