@itwin/core-frontend 5.15.0 → 5.16.0-dev.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +5 -2
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +6 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +1 -1
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js +3 -2
- package/lib/cjs/core-frontend.js.map +1 -1
- package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.d.ts +2 -0
- package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.d.ts.map +1 -1
- package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.js +13 -4
- package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.js.map +1 -1
- package/lib/cjs/internal/cross-package.d.ts +1 -1
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +4 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.d.ts +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.js +5 -3
- package/lib/cjs/internal/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGisUtilities.d.ts +15 -2
- package/lib/cjs/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGisUtilities.js +54 -29
- package/lib/cjs/internal/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -0
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js +91 -45
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +5 -4
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +8 -2
- package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +8 -2
- package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/MapLayerFetch.d.ts +57 -0
- package/lib/cjs/internal/tile/map/MapLayerFetch.d.ts.map +1 -0
- package/lib/cjs/internal/tile/map/MapLayerFetch.js +95 -0
- package/lib/cjs/internal/tile/map/MapLayerFetch.js.map +1 -0
- package/lib/cjs/internal/tile/map/UrlUtils.js +1 -1
- package/lib/cjs/internal/tile/map/UrlUtils.js.map +1 -1
- package/lib/cjs/internal/tile/map/WmsCapabilities.d.ts +2 -5
- package/lib/cjs/internal/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/WmsCapabilities.js +16 -9
- package/lib/cjs/internal/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/internal/tile/map/WmsUtilities.d.ts +29 -1
- package/lib/cjs/internal/tile/map/WmsUtilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/WmsUtilities.js +43 -11
- package/lib/cjs/internal/tile/map/WmsUtilities.js.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts +2 -5
- package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js +16 -9
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +3 -1
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/internal.d.ts +2 -0
- package/lib/cjs/tile/internal.d.ts.map +1 -1
- package/lib/cjs/tile/internal.js +2 -0
- package/lib/cjs/tile/internal.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFetchHandler.d.ts +94 -0
- package/lib/cjs/tile/map/MapLayerFetchHandler.d.ts.map +1 -0
- package/lib/cjs/tile/map/MapLayerFetchHandler.js +10 -0
- package/lib/cjs/tile/map/MapLayerFetchHandler.js.map +1 -0
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +27 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +42 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +20 -4
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +28 -16
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +134 -66
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts +19 -4
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +28 -11
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts +11 -4
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +28 -3
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +5 -2
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js +6 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +1 -1
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js +1 -1
- package/lib/esm/core-frontend.js.map +1 -1
- package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.d.ts +2 -0
- package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.d.ts.map +1 -1
- package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.js +13 -4
- package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.js.map +1 -1
- package/lib/esm/internal/cross-package.d.ts +1 -1
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.d.ts +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.js +5 -3
- package/lib/esm/internal/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/internal/tile/map/ArcGisUtilities.d.ts +15 -2
- package/lib/esm/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ArcGisUtilities.js +55 -30
- package/lib/esm/internal/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -0
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js +92 -46
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +5 -4
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +9 -3
- package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +9 -3
- package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/MapLayerFetch.d.ts +57 -0
- package/lib/esm/internal/tile/map/MapLayerFetch.d.ts.map +1 -0
- package/lib/esm/internal/tile/map/MapLayerFetch.js +91 -0
- package/lib/esm/internal/tile/map/MapLayerFetch.js.map +1 -0
- package/lib/esm/internal/tile/map/UrlUtils.js +1 -1
- package/lib/esm/internal/tile/map/UrlUtils.js.map +1 -1
- package/lib/esm/internal/tile/map/WmsCapabilities.d.ts +2 -5
- package/lib/esm/internal/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/WmsCapabilities.js +16 -9
- package/lib/esm/internal/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/internal/tile/map/WmsUtilities.d.ts +29 -1
- package/lib/esm/internal/tile/map/WmsUtilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/WmsUtilities.js +44 -12
- package/lib/esm/internal/tile/map/WmsUtilities.js.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts +2 -5
- package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.js +16 -9
- package/lib/esm/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +3 -1
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/internal.d.ts +2 -0
- package/lib/esm/tile/internal.d.ts.map +1 -1
- package/lib/esm/tile/internal.js +2 -0
- package/lib/esm/tile/internal.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFetchHandler.d.ts +94 -0
- package/lib/esm/tile/map/MapLayerFetchHandler.d.ts.map +1 -0
- package/lib/esm/tile/map/MapLayerFetchHandler.js +9 -0
- package/lib/esm/tile/map/MapLayerFetchHandler.js.map +1 -0
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +27 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +40 -0
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js +21 -5
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +28 -16
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +136 -68
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts +19 -4
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +28 -11
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts +11 -4
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +30 -5
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/package.json +21 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerImageryFormats.js","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerImageryFormats.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module MapLayers\r\n */\r\nimport { ImageMapLayerSettings, MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport {\r\n ArcGISMapLayerImageryProvider,\r\n ArcGisUtilities,\r\n BingMapsImageryLayerProvider,\r\n ImageryMapLayerTreeReference,\r\n MapBoxLayerImageryProvider,\r\n MapLayerFormat,\r\n MapLayerImageryProvider,\r\n MapLayerSource,\r\n MapLayerSourceStatus,\r\n MapLayerSourceValidation,\r\n MapLayerTileTreeReference,\r\n MapLayerUntrustedOriginError,\r\n TileUrlImageryProvider,\r\n ValidateSourceArgs,\r\n WmsCapabilities,\r\n WmsMapLayerImageryProvider,\r\n WmtsCapabilities,\r\n WmtsCapability,\r\n WmtsMapLayerImageryProvider,\r\n} from \"../internal\";\r\n\r\n/** Base class imagery map layer formats.\r\n * Subclasses should override formatId and [[MapLayerFormat.createImageryProvider]].\r\n * @see [[MapLayerFormat]]\r\n * @beta\r\n */\r\nexport class ImageryMapLayerFormat extends MapLayerFormat {\r\n /** @internal */\r\n public static override createMapLayerTree(layerSettings: ImageMapLayerSettings, layerIndex: number, iModel: IModelConnection): MapLayerTileTreeReference | undefined {\r\n return new ImageryMapLayerTreeReference({ layerSettings, layerIndex, iModel });\r\n }\r\n}\r\n\r\nclass WmsMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"WMS\";\r\n\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n return new WmsMapLayerImageryProvider(settings);\r\n }\r\n public static override async validateSource(url: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const source = MapLayerSource.fromJSON({name: \"\", formatId: WmsMapLayerFormat.formatId, url});\r\n if (source === undefined)\r\n return { status: MapLayerSourceStatus.InvalidFormat };\r\n source.userName = userName;\r\n source.password = password;\r\n return WmsMapLayerFormat.validate({source, ignoreCache});\r\n }\r\n\r\n public static override async validate(args: ValidateSourceArgs): Promise<MapLayerSourceValidation> {\r\n const {source, ignoreCache} = args;\r\n const { url, userName, password } = source;\r\n\r\n try {\r\n let subLayers: MapSubLayerProps[] | undefined;\r\n const maxVisibleSubLayers = 50;\r\n const capabilities = await WmsCapabilities.create(url, (userName && password ? {user: userName, password} : undefined), ignoreCache, source.collectQueryParams());\r\n if (capabilities !== undefined) {\r\n subLayers = capabilities.getSubLayers(false);\r\n const rootsSubLayer = subLayers?.find((sublayer) => sublayer.parent === undefined);\r\n const hasTooManyLayers = subLayers && subLayers.length > maxVisibleSubLayers;\r\n\r\n if (!Array.isArray(subLayers))\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n\r\n for (const subLayer of subLayers) {\r\n // In general for WMS, we prefer to have the children of root node visible, but not the root itself.\r\n // Thats simply to give more flexibility in the UI.\r\n // Two exceptions to this rule: If there are too many layers or the root node is not named.\r\n if (subLayer.id && subLayer.id === rootsSubLayer?.id\r\n && (!(subLayer.name && subLayer.name.length > 0) || hasTooManyLayers)) {\r\n subLayer.visible = true;\r\n break; // if root node is visible, don't bother turning ON any other layers\r\n }\r\n\r\n // Make children of the root node visible.\r\n if (subLayer.parent && subLayer.parent === rootsSubLayer?.id && !hasTooManyLayers) {\r\n const isUnnamedGroup = (layer: MapSubLayerProps) => {\r\n return layer.children && layer.children.length > 0 && (!layer.name || layer.name.length === 0);\r\n };\r\n\r\n const makeChildrenVisible = (layers: MapSubLayerProps[] | undefined, layer: MapSubLayerProps) => {\r\n layer?.children?.forEach((childId) => {\r\n const childSubLayer = subLayers?.find((child) => child?.id === childId);\r\n if (childSubLayer) {\r\n childSubLayer.visible = true;\r\n if (isUnnamedGroup(childSubLayer))\r\n makeChildrenVisible(layers, childSubLayer);\r\n }\r\n });\r\n };\r\n\r\n subLayer.visible = true;\r\n\r\n // If we got a unnamed group, make children visible recursively until we have a leaf or named group\r\n if (isUnnamedGroup(subLayer))\r\n makeChildrenVisible(subLayers, subLayer);\r\n }\r\n }\r\n }\r\n\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n } catch (err: any) {\r\n if (err instanceof MapLayerUntrustedOriginError) {\r\n let blockedOrigin: string | undefined;\r\n try { blockedOrigin = new URL(err.url).origin; } catch { /* non-hierarchical URL */ }\r\n return { status: MapLayerSourceStatus.UntrustedOrigin, blockedOrigin };\r\n }\r\n let status = MapLayerSourceStatus.InvalidUrl;\r\n if (err?.status === 401) {\r\n status = ((userName && password) ? MapLayerSourceStatus.InvalidCredentials : MapLayerSourceStatus.RequireAuth);\r\n }\r\n return { status};\r\n }\r\n }\r\n\r\n}\r\n\r\nclass WmtsMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"WMTS\";\r\n\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n return new WmtsMapLayerImageryProvider(settings);\r\n }\r\n\r\n public static override async validateSource(url: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const source = MapLayerSource.fromJSON({name: \"\", formatId: WmtsMapLayerFormat.formatId, url});\r\n if (source === undefined)\r\n return { status: MapLayerSourceStatus.InvalidFormat };\r\n source.userName = userName;\r\n source.password = password;\r\n return WmtsMapLayerFormat.validate({source, ignoreCache});\r\n }\r\n\r\n public static override async validate(args: ValidateSourceArgs): Promise<MapLayerSourceValidation> {\r\n const {source, ignoreCache} = args;\r\n const { url, userName, password } = source;\r\n try {\r\n const subLayers: MapSubLayerProps[] = [];\r\n const capabilities = await WmtsCapabilities.create(url, (userName && password ? {user: userName, password} : undefined), ignoreCache, source.collectQueryParams());\r\n if (!capabilities)\r\n return { status: MapLayerSourceStatus.InvalidUrl };\r\n\r\n // Only returns layer that can be published in the Google maps or WGS84 aligned tile trees.\r\n let supportedTms: WmtsCapability.TileMatrixSet[] = [];\r\n const googleMapsTms = capabilities?.contents?.getGoogleMapsCompatibleTileMatrixSet();\r\n if (googleMapsTms) {\r\n supportedTms = googleMapsTms;\r\n }\r\n const wsg84Tms = capabilities?.contents?.getEpsg4326CompatibleTileMatrixSet();\r\n if (wsg84Tms) {\r\n supportedTms = supportedTms.concat(wsg84Tms);\r\n }\r\n\r\n if (supportedTms.length === 0) {\r\n // This WMTS server doesn't support either GoogleMaps or WSG84\r\n return { status: MapLayerSourceStatus.InvalidCoordinateSystem };\r\n }\r\n\r\n let subLayerId = 0;\r\n capabilities?.contents?.layers.forEach((layer) => {\r\n const hasSupportedTms = supportedTms?.some((tms) => {\r\n return layer.tileMatrixSetLinks.some((tmls) => tmls.tileMatrixSet === tms.identifier);\r\n });\r\n if (hasSupportedTms) {\r\n subLayers.push({\r\n name: layer.identifier,\r\n title: layer.title ?? layer.identifier,\r\n visible: (subLayers.length === 0), // Make the first layer visible.\r\n parent: undefined,\r\n children: undefined,\r\n id: subLayerId++,\r\n });\r\n }\r\n });\r\n\r\n // Return error if we could find a single compatible layer.\r\n if (subLayers.length === 0)\r\n return { status: MapLayerSourceStatus.InvalidTileTree };\r\n\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n } catch (err: any) {\r\n if (err instanceof MapLayerUntrustedOriginError) {\r\n let blockedOrigin: string | undefined;\r\n try { blockedOrigin = new URL(err.url).origin; } catch { /* non-hierarchical URL */ }\r\n return { status: MapLayerSourceStatus.UntrustedOrigin, blockedOrigin };\r\n }\r\n let status = MapLayerSourceStatus.InvalidUrl;\r\n if (err?.status === 401) {\r\n status = ((userName && password) ? MapLayerSourceStatus.InvalidCredentials : MapLayerSourceStatus.RequireAuth);\r\n }\r\n return { status};\r\n }\r\n }\r\n\r\n}\r\n\r\nclass ArcGISMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"ArcGIS\";\r\n public static override async validateSource(url: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const source = MapLayerSource.fromJSON({name: \"\", formatId: WmtsMapLayerFormat.formatId, url});\r\n if (source === undefined)\r\n return { status: MapLayerSourceStatus.InvalidFormat };\r\n source.userName = userName;\r\n source.password = password;\r\n return WmtsMapLayerFormat.validate({source, ignoreCache});\r\n }\r\n\r\n public static override async validate(args: ValidateSourceArgs): Promise<MapLayerSourceValidation> {\r\n const urlValidation = ArcGisUtilities.validateUrl(args.source.url, \"MapServer\");\r\n if (urlValidation !== MapLayerSourceStatus.Valid)\r\n return {status: urlValidation};\r\n\r\n // Some Map service supporting only tiles don't include the 'Map' capabilities, thus we can't make it mandatory.\r\n return ArcGisUtilities.validateSource({...args, capabilitiesFilter: []});\r\n }\r\n\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n return new ArcGISMapLayerImageryProvider(settings);\r\n }\r\n}\r\n\r\n/** @deprecated in 5.11.0 - will not be removed until after 2027-07-03. Bing Maps imagery is deprecated. For basemap imagery providers, see `@itwin/map-layers-formats`. */\r\nclass BingMapsMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"BingMaps\";\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return new BingMapsImageryLayerProvider(settings);\r\n }\r\n}\r\n\r\nclass MapBoxImageryMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"MapboxImagery\";\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n return new MapBoxLayerImageryProvider(settings);\r\n }\r\n}\r\nclass TileUrlMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"TileURL\";\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined { return new TileUrlImageryProvider(settings); }\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/no-deprecated -- BingMapsMapLayerFormat is deprecated but must remain registered for legacy persisted styles.\r\nexport const internalMapLayerImageryFormats = [WmsMapLayerFormat, WmtsMapLayerFormat, ArcGISMapLayerFormat, BingMapsMapLayerFormat, MapBoxImageryMapLayerFormat, TileUrlMapLayerFormat];\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapLayerImageryFormats.js","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerImageryFormats.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module MapLayers\r\n */\r\nimport { ImageMapLayerSettings, MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport {\r\n ArcGISMapLayerImageryProvider,\r\n ArcGisUtilities,\r\n BingMapsImageryLayerProvider,\r\n ImageryMapLayerTreeReference,\r\n MapBoxLayerImageryProvider,\r\n MapLayerAuthenticationFailedError,\r\n MapLayerFormat,\r\n MapLayerImageryProvider,\r\n MapLayerSource,\r\n MapLayerSourceStatus,\r\n MapLayerSourceValidation,\r\n MapLayerTileTreeReference,\r\n MapLayerUntrustedOriginError,\r\n TileUrlImageryProvider,\r\n ValidateSourceArgs,\r\n WmsCapabilities,\r\n WmsMapLayerImageryProvider,\r\n WmtsCapabilities,\r\n WmtsCapability,\r\n WmtsMapLayerImageryProvider,\r\n} from \"../internal\";\r\n\r\n/** Base class imagery map layer formats.\r\n * Subclasses should override formatId and [[MapLayerFormat.createImageryProvider]].\r\n * @see [[MapLayerFormat]]\r\n * @beta\r\n */\r\nexport class ImageryMapLayerFormat extends MapLayerFormat {\r\n /** @internal */\r\n public static override createMapLayerTree(layerSettings: ImageMapLayerSettings, layerIndex: number, iModel: IModelConnection): MapLayerTileTreeReference | undefined {\r\n return new ImageryMapLayerTreeReference({ layerSettings, layerIndex, iModel });\r\n }\r\n}\r\n\r\nclass WmsMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"WMS\";\r\n\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n return new WmsMapLayerImageryProvider(settings);\r\n }\r\n public static override async validateSource(url: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const source = MapLayerSource.fromJSON({name: \"\", formatId: WmsMapLayerFormat.formatId, url});\r\n if (source === undefined)\r\n return { status: MapLayerSourceStatus.InvalidFormat };\r\n source.userName = userName;\r\n source.password = password;\r\n return WmsMapLayerFormat.validate({source, ignoreCache});\r\n }\r\n\r\n public static override async validate(args: ValidateSourceArgs): Promise<MapLayerSourceValidation> {\r\n const {source, ignoreCache} = args;\r\n const { url, userName, password } = source;\r\n\r\n try {\r\n let subLayers: MapSubLayerProps[] | undefined;\r\n const maxVisibleSubLayers = 50;\r\n const capabilities = await WmsCapabilities.create(url, {\r\n credentials: (userName && password ? {user: userName, password} : undefined),\r\n ignoreCache,\r\n queryParams: source.collectQueryParams(),\r\n formatId: source.formatId,\r\n });\r\n if (capabilities !== undefined) {\r\n subLayers = capabilities.getSubLayers(false);\r\n const rootsSubLayer = subLayers?.find((sublayer) => sublayer.parent === undefined);\r\n const hasTooManyLayers = subLayers && subLayers.length > maxVisibleSubLayers;\r\n\r\n if (!Array.isArray(subLayers))\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n\r\n for (const subLayer of subLayers) {\r\n // In general for WMS, we prefer to have the children of root node visible, but not the root itself.\r\n // Thats simply to give more flexibility in the UI.\r\n // Two exceptions to this rule: If there are too many layers or the root node is not named.\r\n if (subLayer.id && subLayer.id === rootsSubLayer?.id\r\n && (!(subLayer.name && subLayer.name.length > 0) || hasTooManyLayers)) {\r\n subLayer.visible = true;\r\n break; // if root node is visible, don't bother turning ON any other layers\r\n }\r\n\r\n // Make children of the root node visible.\r\n if (subLayer.parent && subLayer.parent === rootsSubLayer?.id && !hasTooManyLayers) {\r\n const isUnnamedGroup = (layer: MapSubLayerProps) => {\r\n return layer.children && layer.children.length > 0 && (!layer.name || layer.name.length === 0);\r\n };\r\n\r\n const makeChildrenVisible = (layers: MapSubLayerProps[] | undefined, layer: MapSubLayerProps) => {\r\n layer?.children?.forEach((childId) => {\r\n const childSubLayer = subLayers?.find((child) => child?.id === childId);\r\n if (childSubLayer) {\r\n childSubLayer.visible = true;\r\n if (isUnnamedGroup(childSubLayer))\r\n makeChildrenVisible(layers, childSubLayer);\r\n }\r\n });\r\n };\r\n\r\n subLayer.visible = true;\r\n\r\n // If we got a unnamed group, make children visible recursively until we have a leaf or named group\r\n if (isUnnamedGroup(subLayer))\r\n makeChildrenVisible(subLayers, subLayer);\r\n }\r\n }\r\n }\r\n\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n } catch (err: any) {\r\n if (err instanceof MapLayerUntrustedOriginError) {\r\n let blockedOrigin: string | undefined;\r\n try { blockedOrigin = new URL(err.url).origin; } catch { /* non-hierarchical URL */ }\r\n return { status: MapLayerSourceStatus.UntrustedOrigin, blockedOrigin };\r\n }\r\n let status = MapLayerSourceStatus.InvalidUrl;\r\n if (err instanceof MapLayerAuthenticationFailedError) {\r\n status = MapLayerSourceStatus.RequireAuth;\r\n } else if (err?.status === 401) {\r\n status = ((userName && password) ? MapLayerSourceStatus.InvalidCredentials : MapLayerSourceStatus.RequireAuth);\r\n }\r\n return { status};\r\n }\r\n }\r\n\r\n}\r\n\r\nclass WmtsMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"WMTS\";\r\n\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n return new WmtsMapLayerImageryProvider(settings);\r\n }\r\n\r\n public static override async validateSource(url: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const source = MapLayerSource.fromJSON({name: \"\", formatId: WmtsMapLayerFormat.formatId, url});\r\n if (source === undefined)\r\n return { status: MapLayerSourceStatus.InvalidFormat };\r\n source.userName = userName;\r\n source.password = password;\r\n return WmtsMapLayerFormat.validate({source, ignoreCache});\r\n }\r\n\r\n public static override async validate(args: ValidateSourceArgs): Promise<MapLayerSourceValidation> {\r\n const {source, ignoreCache} = args;\r\n const { url, userName, password } = source;\r\n try {\r\n const subLayers: MapSubLayerProps[] = [];\r\n const capabilities = await WmtsCapabilities.create(url, {\r\n credentials: (userName && password ? {user: userName, password} : undefined),\r\n ignoreCache,\r\n queryParams: source.collectQueryParams(),\r\n formatId: source.formatId,\r\n });\r\n if (!capabilities)\r\n return { status: MapLayerSourceStatus.InvalidUrl };\r\n\r\n // Only returns layer that can be published in the Google maps or WGS84 aligned tile trees.\r\n let supportedTms: WmtsCapability.TileMatrixSet[] = [];\r\n const googleMapsTms = capabilities?.contents?.getGoogleMapsCompatibleTileMatrixSet();\r\n if (googleMapsTms) {\r\n supportedTms = googleMapsTms;\r\n }\r\n const wsg84Tms = capabilities?.contents?.getEpsg4326CompatibleTileMatrixSet();\r\n if (wsg84Tms) {\r\n supportedTms = supportedTms.concat(wsg84Tms);\r\n }\r\n\r\n if (supportedTms.length === 0) {\r\n // This WMTS server doesn't support either GoogleMaps or WSG84\r\n return { status: MapLayerSourceStatus.InvalidCoordinateSystem };\r\n }\r\n\r\n let subLayerId = 0;\r\n capabilities?.contents?.layers.forEach((layer) => {\r\n const hasSupportedTms = supportedTms?.some((tms) => {\r\n return layer.tileMatrixSetLinks.some((tmls) => tmls.tileMatrixSet === tms.identifier);\r\n });\r\n if (hasSupportedTms) {\r\n subLayers.push({\r\n name: layer.identifier,\r\n title: layer.title ?? layer.identifier,\r\n visible: (subLayers.length === 0), // Make the first layer visible.\r\n parent: undefined,\r\n children: undefined,\r\n id: subLayerId++,\r\n });\r\n }\r\n });\r\n\r\n // Return error if we could find a single compatible layer.\r\n if (subLayers.length === 0)\r\n return { status: MapLayerSourceStatus.InvalidTileTree };\r\n\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n } catch (err: any) {\r\n if (err instanceof MapLayerUntrustedOriginError) {\r\n let blockedOrigin: string | undefined;\r\n try { blockedOrigin = new URL(err.url).origin; } catch { /* non-hierarchical URL */ }\r\n return { status: MapLayerSourceStatus.UntrustedOrigin, blockedOrigin };\r\n }\r\n let status = MapLayerSourceStatus.InvalidUrl;\r\n if (err instanceof MapLayerAuthenticationFailedError) {\r\n status = MapLayerSourceStatus.RequireAuth;\r\n } else if (err?.status === 401) {\r\n status = ((userName && password) ? MapLayerSourceStatus.InvalidCredentials : MapLayerSourceStatus.RequireAuth);\r\n }\r\n return { status};\r\n }\r\n }\r\n\r\n}\r\n\r\nclass ArcGISMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"ArcGIS\";\r\n public static override async validateSource(url: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const source = MapLayerSource.fromJSON({name: \"\", formatId: WmtsMapLayerFormat.formatId, url});\r\n if (source === undefined)\r\n return { status: MapLayerSourceStatus.InvalidFormat };\r\n source.userName = userName;\r\n source.password = password;\r\n return WmtsMapLayerFormat.validate({source, ignoreCache});\r\n }\r\n\r\n public static override async validate(args: ValidateSourceArgs): Promise<MapLayerSourceValidation> {\r\n const urlValidation = ArcGisUtilities.validateUrl(args.source.url, \"MapServer\");\r\n if (urlValidation !== MapLayerSourceStatus.Valid)\r\n return {status: urlValidation};\r\n\r\n // Some Map service supporting only tiles don't include the 'Map' capabilities, thus we can't make it mandatory.\r\n return ArcGisUtilities.validateSource({...args, capabilitiesFilter: []});\r\n }\r\n\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n return new ArcGISMapLayerImageryProvider(settings);\r\n }\r\n}\r\n\r\n/** @deprecated in 5.11.0 - will not be removed until after 2027-07-03. Bing Maps imagery is deprecated. For basemap imagery providers, see `@itwin/map-layers-formats`. */\r\nclass BingMapsMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"BingMaps\";\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return new BingMapsImageryLayerProvider(settings);\r\n }\r\n}\r\n\r\nclass MapBoxImageryMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"MapboxImagery\";\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n return new MapBoxLayerImageryProvider(settings);\r\n }\r\n}\r\nclass TileUrlMapLayerFormat extends ImageryMapLayerFormat {\r\n public static override formatId = \"TileURL\";\r\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined { return new TileUrlImageryProvider(settings); }\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/no-deprecated -- BingMapsMapLayerFormat is deprecated but must remain registered for legacy persisted styles.\r\nexport const internalMapLayerImageryFormats = [WmsMapLayerFormat, WmtsMapLayerFormat, ArcGISMapLayerFormat, BingMapsMapLayerFormat, MapBoxImageryMapLayerFormat, TileUrlMapLayerFormat];\r\n"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { BeEvent } from "@itwin/core-bentley";
|
|
5
5
|
import { Cartographic, ImageMapLayerSettings, ImageSource } from "@itwin/core-common";
|
|
6
6
|
import { ScreenViewport } from "../../Viewport";
|
|
7
|
-
import { ImageryMapTile, ImageryMapTileTree, MapCartoRectangle, MapFeatureInfoOptions, MapLayerFeatureInfo, MapTilingScheme, QuadId } from "../internal";
|
|
7
|
+
import { ImageryMapTile, ImageryMapTileTree, MapCartoRectangle, MapFeatureInfoOptions, MapLayerAccessClient, MapLayerFeatureInfo, MapTilingScheme, QuadId } from "../internal";
|
|
8
8
|
import { HitDetail } from "../../HitDetail";
|
|
9
9
|
import { DecorateContext } from "../../ViewContext";
|
|
10
10
|
/** Escapes HTML metacharacters so the text renders literally when assigned to `innerHTML`.
|
|
@@ -207,8 +207,22 @@ export declare abstract class MapLayerImageryProvider {
|
|
|
207
207
|
* @internal
|
|
208
208
|
*/
|
|
209
209
|
protected onStatusUpdated(_newStatus: MapLayerImageryProviderStatus): void;
|
|
210
|
+
/** Transitions to [[MapLayerImageryProviderStatus.RequireAuth]] after a [[MapLayerFetchHandler]] reported an
|
|
211
|
+
* unrecoverable authentication failure. The user is notified once per transition, and only if tiles had
|
|
212
|
+
* loaded before: an initialization failure was already reported through source validation.
|
|
213
|
+
* @internal
|
|
214
|
+
*/
|
|
215
|
+
protected reportAuthenticationFailure(): void;
|
|
210
216
|
/** @internal */
|
|
211
217
|
protected setRequestAuthorization(headers: Headers): void;
|
|
218
|
+
/** The access client registered for this layer's format, if any.
|
|
219
|
+
* @internal
|
|
220
|
+
*/
|
|
221
|
+
protected get accessClient(): MapLayerAccessClient | undefined;
|
|
222
|
+
/** True while at least one [[MapLayerFetchHandler]] is registered via [[MapLayerFormatRegistry.addMapLayerFetchHandler]].
|
|
223
|
+
* @internal
|
|
224
|
+
*/
|
|
225
|
+
protected get hasFetchHandler(): boolean;
|
|
212
226
|
/** Returns true if the given URL has the same origin as this layer's settings URL.
|
|
213
227
|
* Used to avoid leaking credentials to third-party hosts.
|
|
214
228
|
* @internal
|
|
@@ -244,34 +258,32 @@ export declare abstract class MapLayerImageryProvider {
|
|
|
244
258
|
* @internal
|
|
245
259
|
*/
|
|
246
260
|
protected logUntrustedOriginUse(url: string): void;
|
|
247
|
-
/** The redirect policy to apply to a request that carries browser credentials (see [[includeUserCredentials]]).
|
|
248
|
-
*
|
|
249
|
-
* When [[MapLayerFormatRegistry.restrictCredentialsToTrustedOrigins]] is enabled, redirects are refused
|
|
250
|
-
* outright (`"error"`). `fetch` cannot be asked to follow only same-origin redirects, and by the time a
|
|
251
|
-
* followed redirect can be inspected the credentials have already been delivered to the destination — so
|
|
252
|
-
* refusing is the only way to honour the guarantee that credentials reach none but the origins listed in
|
|
253
|
-
* [[MapLayerFormatRegistry.trustedCredentialsOrigins]]. Legitimate same-origin redirects fail as a result;
|
|
254
|
-
* that is the cost of the opt-in restriction.
|
|
255
|
-
*
|
|
256
|
-
* When the restriction is disabled (the default), redirects are followed as before and
|
|
257
|
-
* [[checkCredentialedRedirect]] reports the destination after the fact.
|
|
258
|
-
* @internal
|
|
259
|
-
*/
|
|
260
|
-
protected get credentialedRedirect(): RequestRedirect | undefined;
|
|
261
261
|
/** Detects that a request carrying browser credentials (see [[includeUserCredentials]]) was transparently
|
|
262
262
|
* redirected to a different origin, and reports or logs that origin.
|
|
263
263
|
*
|
|
264
264
|
* This is a **best-effort, after-the-fact** signal used only while
|
|
265
265
|
* [[MapLayerFormatRegistry.restrictCredentialsToTrustedOrigins]] is disabled, where credentialed requests
|
|
266
|
-
* still follow redirects (see [[
|
|
266
|
+
* still follow redirects (see [[credentialedFetchRedirect]]). It cannot prevent the exposure — the credentials
|
|
267
267
|
* have already been sent — and it does not fire at all when the destination denies CORS, because `fetch`
|
|
268
268
|
* then rejects instead of returning a `Response`. The destination origin is never latched as SSO-succeeded,
|
|
269
269
|
* so credentials do not keep flowing to it.
|
|
270
270
|
* @internal
|
|
271
271
|
*/
|
|
272
272
|
protected checkCredentialedRedirect(requestedUrl: string, response: Response): void;
|
|
273
|
+
/** The default send for [[makeRequest]]: legacy redirect policy, NTLM/SSO handling and origin-trust
|
|
274
|
+
* checks for one request. The SSO retry never applies to sends a fetch handler modified.
|
|
275
|
+
*/
|
|
276
|
+
private sendDefaultRequest;
|
|
273
277
|
/** @internal */
|
|
274
278
|
makeRequest(url: string, timeoutMs?: number, authorization?: string): Promise<Response>;
|
|
279
|
+
/** Responses of [[makeRequest]] managed by a fetch handler (see [[MapLayerFetchResult.managedByHandler]]). */
|
|
280
|
+
private readonly _handlerManagedResponses;
|
|
281
|
+
/** Returns true if a fetch handler returned this [[makeRequest]] response as its own, in which case the
|
|
282
|
+
* provider applies none of its default response handling (status-code or protocol-error classification):
|
|
283
|
+
* the handler reports authentication failures by throwing [[MapLayerAuthenticationFailedError]] instead.
|
|
284
|
+
* @internal
|
|
285
|
+
*/
|
|
286
|
+
protected isManagedByHandler(response: Response): boolean;
|
|
275
287
|
/** Returns a map layer tile at the specified settings. */
|
|
276
288
|
loadTile(row: number, column: number, zoomLevel: number): Promise<ImageSource | undefined>;
|
|
277
289
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,OAAO,
|
|
1
|
+
{"version":3,"file":"MapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerImageryProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,17 +5,18 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module MapLayers
|
|
7
7
|
*/
|
|
8
|
-
import { assert, BeEvent } from "@itwin/core-bentley";
|
|
8
|
+
import { assert, BeEvent, BentleyError, Logger } from "@itwin/core-bentley";
|
|
9
9
|
import { ImageSource, ImageSourceFormat } from "@itwin/core-common";
|
|
10
10
|
import { Angle } from "@itwin/core-geometry";
|
|
11
11
|
import { IModelApp } from "../../IModelApp";
|
|
12
12
|
import { NotifyMessageDetails, OutputMessagePriority } from "../../NotificationManager";
|
|
13
|
-
import { appendQueryParams, GeographicTilingScheme, WebMercatorTilingScheme } from "../internal";
|
|
13
|
+
import { appendQueryParams, credentialedFetchRedirect, fetchMapLayerRequest, GeographicTilingScheme, MapLayerAuthenticationFailedError, WebMercatorTilingScheme } from "../internal";
|
|
14
14
|
import { headersIncludeAuthMethod, setBasicAuthorization, setRequestTimeout } from "../../request/utils";
|
|
15
15
|
/** @internal */
|
|
16
16
|
const tileImageSize = 256, untiledImageSize = 256;
|
|
17
17
|
const earthRadius = 6378137;
|
|
18
18
|
const doDebugToolTips = false;
|
|
19
|
+
const loggerCategory = "MapLayerImageryProvider";
|
|
19
20
|
/** Escapes HTML metacharacters so the text renders literally when assigned to `innerHTML`.
|
|
20
21
|
* Use for any server- or user-supplied string that ends up in the map tooltip, which is rendered
|
|
21
22
|
* as HTML by [[MapLayerTileTreeReference.getToolTip]].
|
|
@@ -302,12 +303,37 @@ export class MapLayerImageryProvider {
|
|
|
302
303
|
* @internal
|
|
303
304
|
*/
|
|
304
305
|
onStatusUpdated(_newStatus) { }
|
|
306
|
+
/** Transitions to [[MapLayerImageryProviderStatus.RequireAuth]] after a [[MapLayerFetchHandler]] reported an
|
|
307
|
+
* unrecoverable authentication failure. The user is notified once per transition, and only if tiles had
|
|
308
|
+
* loaded before: an initialization failure was already reported through source validation.
|
|
309
|
+
* @internal
|
|
310
|
+
*/
|
|
311
|
+
reportAuthenticationFailure() {
|
|
312
|
+
const alreadyReported = this._status === MapLayerImageryProviderStatus.RequireAuth;
|
|
313
|
+
this.setStatus(MapLayerImageryProviderStatus.RequireAuth);
|
|
314
|
+
if (alreadyReported || !this._hasSuccessfullyFetchedTile)
|
|
315
|
+
return;
|
|
316
|
+
const msg = IModelApp.localization.getLocalizedString("iModelJs:MapLayers.Messages.LoadTileTokenError", { layerName: this._settings.name });
|
|
317
|
+
IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Warning, msg));
|
|
318
|
+
}
|
|
305
319
|
/** @internal */
|
|
306
320
|
setRequestAuthorization(headers) {
|
|
307
321
|
if (this._settings.userName && this._settings.password) {
|
|
308
322
|
setBasicAuthorization(headers, this._settings.userName, this._settings.password);
|
|
309
323
|
}
|
|
310
324
|
}
|
|
325
|
+
/** The access client registered for this layer's format, if any.
|
|
326
|
+
* @internal
|
|
327
|
+
*/
|
|
328
|
+
get accessClient() {
|
|
329
|
+
return IModelApp.mapLayerFormatRegistry?.getAccessClient(this._settings.formatId);
|
|
330
|
+
}
|
|
331
|
+
/** True while at least one [[MapLayerFetchHandler]] is registered via [[MapLayerFormatRegistry.addMapLayerFetchHandler]].
|
|
332
|
+
* @internal
|
|
333
|
+
*/
|
|
334
|
+
get hasFetchHandler() {
|
|
335
|
+
return (IModelApp.mapLayerFormatRegistry?.mapLayerFetchHandlers.length ?? 0) > 0;
|
|
336
|
+
}
|
|
311
337
|
/** Returns true if the given URL has the same origin as this layer's settings URL.
|
|
312
338
|
* Used to avoid leaking credentials to third-party hosts.
|
|
313
339
|
* @internal
|
|
@@ -377,28 +403,12 @@ export class MapLayerImageryProvider {
|
|
|
377
403
|
logUntrustedOriginUse(url) {
|
|
378
404
|
IModelApp.mapLayerFormatRegistry.logUntrustedOriginUse(url);
|
|
379
405
|
}
|
|
380
|
-
/** The redirect policy to apply to a request that carries browser credentials (see [[includeUserCredentials]]).
|
|
381
|
-
*
|
|
382
|
-
* When [[MapLayerFormatRegistry.restrictCredentialsToTrustedOrigins]] is enabled, redirects are refused
|
|
383
|
-
* outright (`"error"`). `fetch` cannot be asked to follow only same-origin redirects, and by the time a
|
|
384
|
-
* followed redirect can be inspected the credentials have already been delivered to the destination — so
|
|
385
|
-
* refusing is the only way to honour the guarantee that credentials reach none but the origins listed in
|
|
386
|
-
* [[MapLayerFormatRegistry.trustedCredentialsOrigins]]. Legitimate same-origin redirects fail as a result;
|
|
387
|
-
* that is the cost of the opt-in restriction.
|
|
388
|
-
*
|
|
389
|
-
* When the restriction is disabled (the default), redirects are followed as before and
|
|
390
|
-
* [[checkCredentialedRedirect]] reports the destination after the fact.
|
|
391
|
-
* @internal
|
|
392
|
-
*/
|
|
393
|
-
get credentialedRedirect() {
|
|
394
|
-
return IModelApp.mapLayerFormatRegistry.restrictCredentialsToTrustedOrigins ? "error" : undefined;
|
|
395
|
-
}
|
|
396
406
|
/** Detects that a request carrying browser credentials (see [[includeUserCredentials]]) was transparently
|
|
397
407
|
* redirected to a different origin, and reports or logs that origin.
|
|
398
408
|
*
|
|
399
409
|
* This is a **best-effort, after-the-fact** signal used only while
|
|
400
410
|
* [[MapLayerFormatRegistry.restrictCredentialsToTrustedOrigins]] is disabled, where credentialed requests
|
|
401
|
-
* still follow redirects (see [[
|
|
411
|
+
* still follow redirects (see [[credentialedFetchRedirect]]). It cannot prevent the exposure — the credentials
|
|
402
412
|
* have already been sent — and it does not fire at all when the destination denies CORS, because `fetch`
|
|
403
413
|
* then rejects instead of returning a `Response`. The destination origin is never latched as SSO-succeeded,
|
|
404
414
|
* so credentials do not keep flowing to it.
|
|
@@ -413,46 +423,32 @@ export class MapLayerImageryProvider {
|
|
|
413
423
|
else
|
|
414
424
|
this.logUntrustedOriginUse(response.url); // no-op when the restriction is enabled
|
|
415
425
|
}
|
|
416
|
-
/**
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
// `authorization` are excluded: those bypass the origin policy entirely.
|
|
423
|
-
const hasSettingsCreds = !authorization && !!this._settings.userName && !!this._settings.password;
|
|
424
|
-
if (authorization) {
|
|
425
|
-
headers = new Headers();
|
|
426
|
-
headers.set("Authorization", authorization);
|
|
427
|
-
}
|
|
428
|
-
else if (hasSettingsCreds) {
|
|
429
|
-
if (this.isCredentialsSharingAllowed(url)) {
|
|
430
|
-
hasCreds = true;
|
|
431
|
-
headers = new Headers();
|
|
432
|
-
this.setRequestAuthorization(headers);
|
|
433
|
-
if (!this.matchesSettingsUrlOrigin(url))
|
|
434
|
-
this.logUntrustedOriginUse(url);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
const includeCredentials = this.includeUserCredentials(url);
|
|
426
|
+
/** The default send for [[makeRequest]]: legacy redirect policy, NTLM/SSO handling and origin-trust
|
|
427
|
+
* checks for one request. The SSO retry never applies to sends a fetch handler modified.
|
|
428
|
+
*/
|
|
429
|
+
async sendDefaultRequest(request, credentialed, hasCreds, hasSettingsCreds, timeoutMs) {
|
|
430
|
+
const requestUrl = request.url;
|
|
431
|
+
const includeCredentials = this.includeUserCredentials(requestUrl);
|
|
438
432
|
const opts = {
|
|
439
433
|
method: "GET",
|
|
440
|
-
headers,
|
|
434
|
+
headers: request.headers,
|
|
441
435
|
credentials: includeCredentials ? "include" : undefined,
|
|
442
|
-
|
|
436
|
+
// Sends the handler modified may carry injected secrets: same redirect policy as credentialed ones.
|
|
437
|
+
redirect: (includeCredentials || credentialed) ? credentialedFetchRedirect() : undefined,
|
|
443
438
|
};
|
|
444
439
|
if (timeoutMs !== undefined)
|
|
445
440
|
setRequestTimeout(opts, timeoutMs);
|
|
446
|
-
|
|
447
|
-
if (includeCredentials)
|
|
448
|
-
this.checkCredentialedRedirect(
|
|
441
|
+
let rsp = await fetch(requestUrl, opts);
|
|
442
|
+
if (includeCredentials || credentialed)
|
|
443
|
+
this.checkCredentialedRedirect(requestUrl, rsp);
|
|
449
444
|
// fetch follows redirects transparently, so all trust decisions below target the final
|
|
450
445
|
// (post-redirect) URL reported by the response, not the URL we asked for.
|
|
451
|
-
const challengedUrl =
|
|
452
|
-
if (
|
|
453
|
-
&& headersIncludeAuthMethod(
|
|
446
|
+
const challengedUrl = rsp.url || requestUrl;
|
|
447
|
+
if (rsp.status === 401
|
|
448
|
+
&& headersIncludeAuthMethod(rsp.headers, ["ntlm", "negotiate"])
|
|
454
449
|
&& !includeCredentials
|
|
455
|
-
&& !hasCreds
|
|
450
|
+
&& !hasCreds
|
|
451
|
+
&& !credentialed) {
|
|
456
452
|
if (this.isSsoAllowed(challengedUrl)) {
|
|
457
453
|
// Removed the previous headers and make sure "include" credentials is set
|
|
458
454
|
opts.headers = undefined;
|
|
@@ -462,8 +458,8 @@ export class MapLayerImageryProvider {
|
|
|
462
458
|
opts.redirect = IModelApp.mapLayerFormatRegistry.restrictCredentialsToTrustedOrigins ? "error" : undefined;
|
|
463
459
|
this.logUntrustedOriginUse(challengedUrl);
|
|
464
460
|
// We got a http 401 challenge, lets try again with SSO enabled (i.e. Windows Authentication)
|
|
465
|
-
|
|
466
|
-
if (
|
|
461
|
+
rsp = await fetch(challengedUrl, opts);
|
|
462
|
+
if (rsp.status === 200) {
|
|
467
463
|
this.recordSsoSucceeded(challengedUrl); // avoid going through 401 challenges over and over for this origin
|
|
468
464
|
}
|
|
469
465
|
}
|
|
@@ -471,16 +467,69 @@ export class MapLayerImageryProvider {
|
|
|
471
467
|
this.reportBlockedOrigin(challengedUrl);
|
|
472
468
|
}
|
|
473
469
|
}
|
|
474
|
-
else if ((
|
|
470
|
+
else if ((rsp.status === 401 || rsp.status === 403) && hasSettingsCreds && !credentialed && !this.isCredentialsSharingAllowed(challengedUrl)) {
|
|
475
471
|
// Some servers answer an unauthenticated request with 403 (Forbidden) rather than a 401 challenge;
|
|
476
472
|
// since this request could not present its credentials to the challenging origin, either status most
|
|
477
|
-
// likely results from that
|
|
473
|
+
// likely results from that (never on a send the handler modified: the handler classifies those).
|
|
474
|
+
// The permission is recomputed for the challenged URL rather than reusing the
|
|
478
475
|
// decision made for the requested one: `fetch` strips the Authorization header when it follows a
|
|
479
476
|
// cross-origin redirect, so a trusted request can still arrive unauthenticated at an untrusted origin,
|
|
480
477
|
// and conversely a request that started out untrusted may end up at an origin that is trusted.
|
|
481
478
|
this.reportBlockedOrigin(challengedUrl);
|
|
482
479
|
}
|
|
483
|
-
return
|
|
480
|
+
return rsp;
|
|
481
|
+
}
|
|
482
|
+
/** @internal */
|
|
483
|
+
async makeRequest(url, timeoutMs, authorization) {
|
|
484
|
+
let headers;
|
|
485
|
+
let hasCreds = false;
|
|
486
|
+
// Whether this request had basic-auth credentials of its own to offer. Requests carrying a caller-supplied
|
|
487
|
+
// `authorization` are excluded: those bypass the origin policy entirely.
|
|
488
|
+
const hasSettingsCreds = !authorization && !!this._settings.userName && !!this._settings.password;
|
|
489
|
+
if (authorization) {
|
|
490
|
+
headers = new Headers();
|
|
491
|
+
headers.set("Authorization", authorization);
|
|
492
|
+
}
|
|
493
|
+
else if (hasSettingsCreds) {
|
|
494
|
+
if (this.isCredentialsSharingAllowed(url)) {
|
|
495
|
+
hasCreds = true;
|
|
496
|
+
headers = new Headers();
|
|
497
|
+
this.setRequestAuthorization(headers);
|
|
498
|
+
if (!this.matchesSettingsUrlOrigin(url))
|
|
499
|
+
this.logUntrustedOriginUse(url);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
// Route the request through the registered fetch handler (if any), which has full control: it may
|
|
503
|
+
// send a copy with other query parameters and headers, retry, or short-circuit. Handler failures propagate: the
|
|
504
|
+
// request must never silently degrade to an unauthenticated one.
|
|
505
|
+
try {
|
|
506
|
+
const { response, managedByHandler } = await fetchMapLayerRequest({
|
|
507
|
+
url,
|
|
508
|
+
formatId: this._settings.formatId,
|
|
509
|
+
layerUrl: this._settings.url,
|
|
510
|
+
layerProperties: this._settings.properties,
|
|
511
|
+
headers,
|
|
512
|
+
send: async (request, credentialed) => this.sendDefaultRequest(request, credentialed, hasCreds, hasSettingsCreds, timeoutMs),
|
|
513
|
+
});
|
|
514
|
+
if (managedByHandler)
|
|
515
|
+
this._handlerManagedResponses.add(response);
|
|
516
|
+
return response;
|
|
517
|
+
}
|
|
518
|
+
catch (error) {
|
|
519
|
+
if (error instanceof MapLayerAuthenticationFailedError)
|
|
520
|
+
this.reportAuthenticationFailure();
|
|
521
|
+
throw error;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
/** Responses of [[makeRequest]] managed by a fetch handler (see [[MapLayerFetchResult.managedByHandler]]). */
|
|
525
|
+
_handlerManagedResponses = new WeakSet();
|
|
526
|
+
/** Returns true if a fetch handler returned this [[makeRequest]] response as its own, in which case the
|
|
527
|
+
* provider applies none of its default response handling (status-code or protocol-error classification):
|
|
528
|
+
* the handler reports authentication failures by throwing [[MapLayerAuthenticationFailedError]] instead.
|
|
529
|
+
* @internal
|
|
530
|
+
*/
|
|
531
|
+
isManagedByHandler(response) {
|
|
532
|
+
return this._handlerManagedResponses.has(response);
|
|
484
533
|
}
|
|
485
534
|
/** Returns a map layer tile at the specified settings. */
|
|
486
535
|
async loadTile(row, column, zoomLevel) {
|
|
@@ -515,16 +564,39 @@ export class MapLayerImageryProvider {
|
|
|
515
564
|
headers = new Headers();
|
|
516
565
|
this.setRequestAuthorization(headers);
|
|
517
566
|
}
|
|
567
|
+
let response;
|
|
518
568
|
try {
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
569
|
+
({ response } = await fetchMapLayerRequest({
|
|
570
|
+
url,
|
|
571
|
+
formatId: this._settings.formatId,
|
|
572
|
+
layerUrl: this._settings.url,
|
|
573
|
+
layerProperties: this._settings.properties,
|
|
522
574
|
headers,
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
575
|
+
send: async (request, credentialed) => {
|
|
576
|
+
const requestUrl = request.url;
|
|
577
|
+
const includeCredentials = this.includeUserCredentials(requestUrl);
|
|
578
|
+
const rsp = await fetch(requestUrl, {
|
|
579
|
+
method: "GET",
|
|
580
|
+
headers: request.headers,
|
|
581
|
+
credentials: includeCredentials ? "include" : undefined,
|
|
582
|
+
redirect: (includeCredentials || credentialed) ? credentialedFetchRedirect() : undefined,
|
|
583
|
+
});
|
|
584
|
+
if (includeCredentials || credentialed)
|
|
585
|
+
this.checkCredentialedRedirect(requestUrl, rsp);
|
|
586
|
+
return rsp;
|
|
587
|
+
},
|
|
588
|
+
}));
|
|
589
|
+
}
|
|
590
|
+
catch (error) {
|
|
591
|
+
// Never degrade to an unauthenticated request or reject (getToolTip callers do not catch); skip the tooltip.
|
|
592
|
+
// The status transition the handler asked for still applies.
|
|
593
|
+
if (error instanceof MapLayerAuthenticationFailedError)
|
|
594
|
+
this.reportAuthenticationFailure();
|
|
595
|
+
if (this.hasFetchHandler)
|
|
596
|
+
Logger.logWarning(loggerCategory, `Map-layer fetch handler failed for tooltip request: ${BentleyError.getErrorMessage(error)}`);
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
try {
|
|
528
600
|
let text = await response.text();
|
|
529
601
|
if (text) {
|
|
530
602
|
// Tooltip content (e.g. WMS GetFeatureInfo responses) is rendered as HTML downstream and may
|
|
@@ -646,11 +718,7 @@ export class MapLayerImageryProvider {
|
|
|
646
718
|
* @internal
|
|
647
719
|
*/
|
|
648
720
|
appendCustomParams(url) {
|
|
649
|
-
|
|
650
|
-
return url;
|
|
651
|
-
let tmpUrl = appendQueryParams(url, this._settings.savedQueryParams);
|
|
652
|
-
tmpUrl = appendQueryParams(tmpUrl, this._settings.unsavedQueryParams);
|
|
653
|
-
return tmpUrl;
|
|
721
|
+
return appendQueryParams(url, this._settings.collectQueryParams());
|
|
654
722
|
}
|
|
655
723
|
}
|
|
656
724
|
//# sourceMappingURL=MapLayerImageryProvider.js.map
|