@itwin/core-frontend 3.5.0-dev.8 → 3.6.0-dev.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. package/CHANGELOG.md +75 -1
  2. package/lib/cjs/AccuSnap.d.ts +7 -1
  3. package/lib/cjs/AccuSnap.d.ts.map +1 -1
  4. package/lib/cjs/AccuSnap.js +26 -3
  5. package/lib/cjs/AccuSnap.js.map +1 -1
  6. package/lib/cjs/BriefcaseConnection.d.ts +28 -1
  7. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  8. package/lib/cjs/BriefcaseConnection.js +29 -8
  9. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  10. package/lib/cjs/BriefcaseTxns.js +9 -9
  11. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  12. package/lib/cjs/GraphicalEditingScope.d.ts.map +1 -1
  13. package/lib/cjs/GraphicalEditingScope.js +10 -4
  14. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  15. package/lib/cjs/IModelApp.d.ts +6 -0
  16. package/lib/cjs/IModelApp.d.ts.map +1 -1
  17. package/lib/cjs/IModelApp.js +6 -0
  18. package/lib/cjs/IModelApp.js.map +1 -1
  19. package/lib/cjs/IModelConnection.d.ts +32 -2
  20. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  21. package/lib/cjs/IModelConnection.js +44 -6
  22. package/lib/cjs/IModelConnection.js.map +1 -1
  23. package/lib/cjs/IpcApp.d.ts +14 -1
  24. package/lib/cjs/IpcApp.d.ts.map +1 -1
  25. package/lib/cjs/IpcApp.js +25 -0
  26. package/lib/cjs/IpcApp.js.map +1 -1
  27. package/lib/cjs/MarginPercent.d.ts +27 -2
  28. package/lib/cjs/MarginPercent.d.ts.map +1 -1
  29. package/lib/cjs/MarginPercent.js +8 -2
  30. package/lib/cjs/MarginPercent.js.map +1 -1
  31. package/lib/cjs/ModelState.d.ts +2 -1
  32. package/lib/cjs/ModelState.d.ts.map +1 -1
  33. package/lib/cjs/ModelState.js +5 -3
  34. package/lib/cjs/ModelState.js.map +1 -1
  35. package/lib/cjs/NativeApp.d.ts +5 -1
  36. package/lib/cjs/NativeApp.d.ts.map +1 -1
  37. package/lib/cjs/NativeApp.js +25 -20
  38. package/lib/cjs/NativeApp.js.map +1 -1
  39. package/lib/cjs/NativeAppLogger.js +1 -1
  40. package/lib/cjs/NativeAppLogger.js.map +1 -1
  41. package/lib/cjs/RealityDataSource.d.ts +44 -1
  42. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  43. package/lib/cjs/RealityDataSource.js +41 -14
  44. package/lib/cjs/RealityDataSource.js.map +1 -1
  45. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts +1 -0
  46. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
  47. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +3 -0
  48. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  49. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts +1 -0
  50. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -1
  51. package/lib/cjs/RealityDataSourceContextShareImpl.js +3 -0
  52. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  53. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +1 -0
  54. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  55. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +3 -0
  56. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  57. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  58. package/lib/cjs/SelectionSet.js +3 -1
  59. package/lib/cjs/SelectionSet.js.map +1 -1
  60. package/lib/cjs/ViewAnimation.d.ts +10 -2
  61. package/lib/cjs/ViewAnimation.d.ts.map +1 -1
  62. package/lib/cjs/ViewAnimation.js.map +1 -1
  63. package/lib/cjs/ViewCreator2d.js +3 -2
  64. package/lib/cjs/ViewCreator2d.js.map +1 -1
  65. package/lib/cjs/ViewPose.d.ts +62 -10
  66. package/lib/cjs/ViewPose.d.ts.map +1 -1
  67. package/lib/cjs/ViewPose.js +37 -8
  68. package/lib/cjs/ViewPose.js.map +1 -1
  69. package/lib/cjs/ViewState.d.ts +18 -10
  70. package/lib/cjs/ViewState.d.ts.map +1 -1
  71. package/lib/cjs/ViewState.js +39 -15
  72. package/lib/cjs/ViewState.js.map +1 -1
  73. package/lib/cjs/Viewport.d.ts.map +1 -1
  74. package/lib/cjs/Viewport.js +7 -2
  75. package/lib/cjs/Viewport.js.map +1 -1
  76. package/lib/cjs/extension/ExtensionRuntime.js +11 -0
  77. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  78. package/lib/cjs/render/RenderMaterial.d.ts +3 -1
  79. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
  80. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  81. package/lib/cjs/render/RenderTarget.d.ts +1 -0
  82. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  83. package/lib/cjs/render/RenderTarget.js.map +1 -1
  84. package/lib/cjs/render/primitives/SurfaceParams.d.ts +0 -1
  85. package/lib/cjs/render/primitives/SurfaceParams.d.ts.map +1 -1
  86. package/lib/cjs/render/primitives/SurfaceParams.js.map +1 -1
  87. package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
  88. package/lib/cjs/render/primitives/VertexTable.js +0 -1
  89. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  90. package/lib/cjs/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  91. package/lib/cjs/render/primitives/VertexTableSplitter.js +0 -1
  92. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  93. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +0 -1
  94. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  95. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +0 -1
  96. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  97. package/lib/cjs/render/webgl/FeatureOverrides.d.ts +0 -1
  98. package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
  99. package/lib/cjs/render/webgl/FeatureOverrides.js +16 -11
  100. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  101. package/lib/cjs/render/webgl/MeshData.d.ts +1 -1
  102. package/lib/cjs/render/webgl/MeshData.d.ts.map +1 -1
  103. package/lib/cjs/render/webgl/MeshData.js +13 -1
  104. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  105. package/lib/cjs/render/webgl/MeshGeometry.d.ts +1 -1
  106. package/lib/cjs/render/webgl/MeshGeometry.d.ts.map +1 -1
  107. package/lib/cjs/render/webgl/MeshGeometry.js +1 -1
  108. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -1
  109. package/lib/cjs/render/webgl/RenderFlags.d.ts +14 -4
  110. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  111. package/lib/cjs/render/webgl/RenderFlags.js +2 -0
  112. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  113. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +2 -1
  114. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  115. package/lib/cjs/render/webgl/ShaderBuilder.js +6 -1
  116. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  117. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts +3 -1
  118. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  119. package/lib/cjs/render/webgl/SurfaceGeometry.js +17 -6
  120. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  121. package/lib/cjs/render/webgl/System.d.ts +1 -1
  122. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  123. package/lib/cjs/render/webgl/System.js +1 -0
  124. package/lib/cjs/render/webgl/System.js.map +1 -1
  125. package/lib/cjs/render/webgl/Target.d.ts +1 -0
  126. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  127. package/lib/cjs/render/webgl/Target.js +1 -0
  128. package/lib/cjs/render/webgl/Target.js.map +1 -1
  129. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  130. package/lib/cjs/render/webgl/glsl/Animation.js +2 -1
  131. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  132. package/lib/cjs/render/webgl/glsl/Common.d.ts +3 -1
  133. package/lib/cjs/render/webgl/glsl/Common.d.ts.map +1 -1
  134. package/lib/cjs/render/webgl/glsl/Common.js +28 -33
  135. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  136. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +9 -1
  138. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  139. package/lib/cjs/render/webgl/glsl/Lighting.d.ts.map +1 -1
  140. package/lib/cjs/render/webgl/glsl/Lighting.js +6 -8
  141. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  142. package/lib/cjs/render/webgl/glsl/PointCloud.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/glsl/PointCloud.js +8 -3
  144. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  145. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts +1 -0
  146. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  147. package/lib/cjs/render/webgl/glsl/RealityMesh.js +6 -1
  148. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  149. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.d.ts.map +1 -1
  150. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -4
  151. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  152. package/lib/cjs/render/webgl/glsl/Surface.d.ts +1 -1
  153. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  154. package/lib/cjs/render/webgl/glsl/Surface.js +87 -15
  155. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  156. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  157. package/lib/cjs/render/webgl/glsl/Thematic.js +2 -6
  158. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  159. package/lib/cjs/tile/GltfReader.d.ts +13 -2
  160. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  161. package/lib/cjs/tile/GltfReader.js +66 -22
  162. package/lib/cjs/tile/GltfReader.js.map +1 -1
  163. package/lib/cjs/tile/IModelTileRequestChannels.js +1 -1
  164. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  165. package/lib/cjs/tile/ImdlReader.d.ts +5 -0
  166. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  167. package/lib/cjs/tile/ImdlReader.js +9 -2
  168. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  169. package/lib/cjs/tile/PrimaryTileTree.js +2 -2
  170. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  171. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  172. package/lib/cjs/tile/RealityModelTileTree.js +51 -20
  173. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  174. package/lib/cjs/tile/RealityTile.d.ts +2 -2
  175. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  176. package/lib/cjs/tile/RealityTile.js +11 -4
  177. package/lib/cjs/tile/RealityTile.js.map +1 -1
  178. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -0
  179. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  180. package/lib/cjs/tile/RealityTileLoader.js +13 -0
  181. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  182. package/lib/cjs/tile/RealityTileTree.js +1 -1
  183. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  184. package/lib/cjs/tile/Tile.d.ts +5 -0
  185. package/lib/cjs/tile/Tile.d.ts.map +1 -1
  186. package/lib/cjs/tile/Tile.js +5 -0
  187. package/lib/cjs/tile/Tile.js.map +1 -1
  188. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  189. package/lib/cjs/tile/TileAdmin.js +13 -6
  190. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  191. package/lib/cjs/tile/TileDrawArgs.d.ts +5 -1
  192. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  193. package/lib/cjs/tile/TileDrawArgs.js +2 -0
  194. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  195. package/lib/cjs/tile/TileRequestChannels.js +1 -1
  196. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  197. package/lib/cjs/tile/TileStorage.d.ts.map +1 -1
  198. package/lib/cjs/tile/TileStorage.js +12 -6
  199. package/lib/cjs/tile/TileStorage.js.map +1 -1
  200. package/lib/cjs/tile/internal.d.ts +1 -0
  201. package/lib/cjs/tile/internal.d.ts.map +1 -1
  202. package/lib/cjs/tile/internal.js +1 -0
  203. package/lib/cjs/tile/internal.js.map +1 -1
  204. package/lib/cjs/tile/map/ArcGISTileMap.d.ts +5 -2
  205. package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
  206. package/lib/cjs/tile/map/ArcGISTileMap.js +17 -2
  207. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  208. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +51 -5
  209. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  210. package/lib/cjs/tile/map/ArcGisUtilities.js +120 -48
  211. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  212. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +26 -0
  213. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -0
  214. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +97 -0
  215. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -0
  216. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -4
  217. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  218. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +11 -96
  219. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  220. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  221. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -1
  222. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  223. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -0
  224. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  225. package/lib/cjs/tile/map/ImageryTileTree.js +6 -4
  226. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  227. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +18 -4
  228. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  229. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +25 -5
  230. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  231. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +6 -4
  232. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  233. package/lib/cjs/tile/map/MapLayerImageryFormats.js +12 -16
  234. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  235. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +26 -5
  236. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  237. package/lib/cjs/tile/map/MapLayerImageryProvider.js +69 -48
  238. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  239. package/lib/cjs/tile/map/MapLayerSources.js +1 -1
  240. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  241. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  242. package/lib/cjs/tile/map/WmsCapabilities.js +4 -1
  243. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  244. package/lib/cjs/tools/EditManipulator.d.ts.map +1 -1
  245. package/lib/cjs/tools/EditManipulator.js +2 -1
  246. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  247. package/lib/cjs/tools/Tool.js +1 -1
  248. package/lib/cjs/tools/Tool.js.map +1 -1
  249. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  250. package/lib/cjs/tools/ToolAdmin.js +6 -4
  251. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  252. package/lib/esm/AccuSnap.d.ts +7 -1
  253. package/lib/esm/AccuSnap.d.ts.map +1 -1
  254. package/lib/esm/AccuSnap.js +27 -4
  255. package/lib/esm/AccuSnap.js.map +1 -1
  256. package/lib/esm/BriefcaseConnection.d.ts +28 -1
  257. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  258. package/lib/esm/BriefcaseConnection.js +30 -9
  259. package/lib/esm/BriefcaseConnection.js.map +1 -1
  260. package/lib/esm/BriefcaseTxns.js +9 -9
  261. package/lib/esm/BriefcaseTxns.js.map +1 -1
  262. package/lib/esm/GraphicalEditingScope.d.ts.map +1 -1
  263. package/lib/esm/GraphicalEditingScope.js +10 -4
  264. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  265. package/lib/esm/IModelApp.d.ts +6 -0
  266. package/lib/esm/IModelApp.d.ts.map +1 -1
  267. package/lib/esm/IModelApp.js +6 -0
  268. package/lib/esm/IModelApp.js.map +1 -1
  269. package/lib/esm/IModelConnection.d.ts +32 -2
  270. package/lib/esm/IModelConnection.d.ts.map +1 -1
  271. package/lib/esm/IModelConnection.js +44 -6
  272. package/lib/esm/IModelConnection.js.map +1 -1
  273. package/lib/esm/IpcApp.d.ts +14 -1
  274. package/lib/esm/IpcApp.d.ts.map +1 -1
  275. package/lib/esm/IpcApp.js +25 -0
  276. package/lib/esm/IpcApp.js.map +1 -1
  277. package/lib/esm/MarginPercent.d.ts +27 -2
  278. package/lib/esm/MarginPercent.d.ts.map +1 -1
  279. package/lib/esm/MarginPercent.js +8 -2
  280. package/lib/esm/MarginPercent.js.map +1 -1
  281. package/lib/esm/ModelState.d.ts +2 -1
  282. package/lib/esm/ModelState.d.ts.map +1 -1
  283. package/lib/esm/ModelState.js +5 -3
  284. package/lib/esm/ModelState.js.map +1 -1
  285. package/lib/esm/NativeApp.d.ts +5 -1
  286. package/lib/esm/NativeApp.d.ts.map +1 -1
  287. package/lib/esm/NativeApp.js +25 -20
  288. package/lib/esm/NativeApp.js.map +1 -1
  289. package/lib/esm/NativeAppLogger.js +1 -1
  290. package/lib/esm/NativeAppLogger.js.map +1 -1
  291. package/lib/esm/RealityDataSource.d.ts +44 -1
  292. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  293. package/lib/esm/RealityDataSource.js +39 -13
  294. package/lib/esm/RealityDataSource.js.map +1 -1
  295. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts +1 -0
  296. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
  297. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +3 -0
  298. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  299. package/lib/esm/RealityDataSourceContextShareImpl.d.ts +1 -0
  300. package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -1
  301. package/lib/esm/RealityDataSourceContextShareImpl.js +3 -0
  302. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  303. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +1 -0
  304. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  305. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +3 -0
  306. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  307. package/lib/esm/SelectionSet.d.ts.map +1 -1
  308. package/lib/esm/SelectionSet.js +3 -1
  309. package/lib/esm/SelectionSet.js.map +1 -1
  310. package/lib/esm/ViewAnimation.d.ts +10 -2
  311. package/lib/esm/ViewAnimation.d.ts.map +1 -1
  312. package/lib/esm/ViewAnimation.js.map +1 -1
  313. package/lib/esm/ViewCreator2d.js +3 -2
  314. package/lib/esm/ViewCreator2d.js.map +1 -1
  315. package/lib/esm/ViewPose.d.ts +62 -10
  316. package/lib/esm/ViewPose.d.ts.map +1 -1
  317. package/lib/esm/ViewPose.js +37 -8
  318. package/lib/esm/ViewPose.js.map +1 -1
  319. package/lib/esm/ViewState.d.ts +18 -10
  320. package/lib/esm/ViewState.d.ts.map +1 -1
  321. package/lib/esm/ViewState.js +39 -15
  322. package/lib/esm/ViewState.js.map +1 -1
  323. package/lib/esm/Viewport.d.ts.map +1 -1
  324. package/lib/esm/Viewport.js +7 -2
  325. package/lib/esm/Viewport.js.map +1 -1
  326. package/lib/esm/extension/ExtensionRuntime.js +12 -1
  327. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  328. package/lib/esm/render/RenderMaterial.d.ts +3 -1
  329. package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
  330. package/lib/esm/render/RenderMaterial.js.map +1 -1
  331. package/lib/esm/render/RenderTarget.d.ts +1 -0
  332. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  333. package/lib/esm/render/RenderTarget.js.map +1 -1
  334. package/lib/esm/render/primitives/SurfaceParams.d.ts +0 -1
  335. package/lib/esm/render/primitives/SurfaceParams.d.ts.map +1 -1
  336. package/lib/esm/render/primitives/SurfaceParams.js.map +1 -1
  337. package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
  338. package/lib/esm/render/primitives/VertexTable.js +0 -1
  339. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  340. package/lib/esm/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  341. package/lib/esm/render/primitives/VertexTableSplitter.js +0 -1
  342. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  343. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +0 -1
  344. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  345. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +0 -1
  346. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  347. package/lib/esm/render/webgl/FeatureOverrides.d.ts +0 -1
  348. package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
  349. package/lib/esm/render/webgl/FeatureOverrides.js +16 -11
  350. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  351. package/lib/esm/render/webgl/MeshData.d.ts +1 -1
  352. package/lib/esm/render/webgl/MeshData.d.ts.map +1 -1
  353. package/lib/esm/render/webgl/MeshData.js +13 -1
  354. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  355. package/lib/esm/render/webgl/MeshGeometry.d.ts +1 -1
  356. package/lib/esm/render/webgl/MeshGeometry.d.ts.map +1 -1
  357. package/lib/esm/render/webgl/MeshGeometry.js +1 -1
  358. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -1
  359. package/lib/esm/render/webgl/RenderFlags.d.ts +14 -4
  360. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  361. package/lib/esm/render/webgl/RenderFlags.js +2 -0
  362. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  363. package/lib/esm/render/webgl/ShaderBuilder.d.ts +2 -1
  364. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  365. package/lib/esm/render/webgl/ShaderBuilder.js +6 -1
  366. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  367. package/lib/esm/render/webgl/SurfaceGeometry.d.ts +3 -1
  368. package/lib/esm/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  369. package/lib/esm/render/webgl/SurfaceGeometry.js +17 -6
  370. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  371. package/lib/esm/render/webgl/System.d.ts +1 -1
  372. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  373. package/lib/esm/render/webgl/System.js +1 -0
  374. package/lib/esm/render/webgl/System.js.map +1 -1
  375. package/lib/esm/render/webgl/Target.d.ts +1 -0
  376. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/Target.js +1 -0
  378. package/lib/esm/render/webgl/Target.js.map +1 -1
  379. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  380. package/lib/esm/render/webgl/glsl/Animation.js +2 -1
  381. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  382. package/lib/esm/render/webgl/glsl/Common.d.ts +3 -1
  383. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  384. package/lib/esm/render/webgl/glsl/Common.js +25 -31
  385. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  386. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  387. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +9 -1
  388. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  389. package/lib/esm/render/webgl/glsl/Lighting.d.ts.map +1 -1
  390. package/lib/esm/render/webgl/glsl/Lighting.js +6 -8
  391. package/lib/esm/render/webgl/glsl/Lighting.js.map +1 -1
  392. package/lib/esm/render/webgl/glsl/PointCloud.d.ts.map +1 -1
  393. package/lib/esm/render/webgl/glsl/PointCloud.js +8 -3
  394. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  395. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts +1 -0
  396. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  397. package/lib/esm/render/webgl/glsl/RealityMesh.js +5 -0
  398. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  399. package/lib/esm/render/webgl/glsl/SolarShadowMapping.d.ts.map +1 -1
  400. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -4
  401. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  402. package/lib/esm/render/webgl/glsl/Surface.d.ts +1 -1
  403. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  404. package/lib/esm/render/webgl/glsl/Surface.js +88 -16
  405. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  406. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  407. package/lib/esm/render/webgl/glsl/Thematic.js +2 -6
  408. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  409. package/lib/esm/tile/GltfReader.d.ts +13 -2
  410. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  411. package/lib/esm/tile/GltfReader.js +66 -22
  412. package/lib/esm/tile/GltfReader.js.map +1 -1
  413. package/lib/esm/tile/IModelTileRequestChannels.js +1 -1
  414. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  415. package/lib/esm/tile/ImdlReader.d.ts +5 -0
  416. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  417. package/lib/esm/tile/ImdlReader.js +9 -2
  418. package/lib/esm/tile/ImdlReader.js.map +1 -1
  419. package/lib/esm/tile/PrimaryTileTree.js +2 -2
  420. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  421. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  422. package/lib/esm/tile/RealityModelTileTree.js +51 -20
  423. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  424. package/lib/esm/tile/RealityTile.d.ts +2 -2
  425. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  426. package/lib/esm/tile/RealityTile.js +11 -4
  427. package/lib/esm/tile/RealityTile.js.map +1 -1
  428. package/lib/esm/tile/RealityTileLoader.d.ts +1 -0
  429. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  430. package/lib/esm/tile/RealityTileLoader.js +14 -1
  431. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  432. package/lib/esm/tile/RealityTileTree.js +1 -1
  433. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  434. package/lib/esm/tile/Tile.d.ts +5 -0
  435. package/lib/esm/tile/Tile.d.ts.map +1 -1
  436. package/lib/esm/tile/Tile.js +5 -0
  437. package/lib/esm/tile/Tile.js.map +1 -1
  438. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  439. package/lib/esm/tile/TileAdmin.js +13 -6
  440. package/lib/esm/tile/TileAdmin.js.map +1 -1
  441. package/lib/esm/tile/TileDrawArgs.d.ts +5 -1
  442. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  443. package/lib/esm/tile/TileDrawArgs.js +2 -0
  444. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  445. package/lib/esm/tile/TileRequestChannels.js +1 -1
  446. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  447. package/lib/esm/tile/TileStorage.d.ts.map +1 -1
  448. package/lib/esm/tile/TileStorage.js +12 -6
  449. package/lib/esm/tile/TileStorage.js.map +1 -1
  450. package/lib/esm/tile/internal.d.ts +1 -0
  451. package/lib/esm/tile/internal.d.ts.map +1 -1
  452. package/lib/esm/tile/internal.js +1 -0
  453. package/lib/esm/tile/internal.js.map +1 -1
  454. package/lib/esm/tile/map/ArcGISTileMap.d.ts +5 -2
  455. package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
  456. package/lib/esm/tile/map/ArcGISTileMap.js +18 -3
  457. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  458. package/lib/esm/tile/map/ArcGisUtilities.d.ts +51 -5
  459. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  460. package/lib/esm/tile/map/ArcGisUtilities.js +121 -49
  461. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  462. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +26 -0
  463. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -0
  464. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +93 -0
  465. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -0
  466. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -4
  467. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  468. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +10 -95
  469. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  470. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  471. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -1
  472. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  473. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -0
  474. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  475. package/lib/esm/tile/map/ImageryTileTree.js +6 -4
  476. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  477. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +18 -4
  478. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  479. package/lib/esm/tile/map/MapLayerFormatRegistry.js +26 -6
  480. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  481. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +6 -4
  482. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  483. package/lib/esm/tile/map/MapLayerImageryFormats.js +12 -16
  484. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  485. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +26 -5
  486. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  487. package/lib/esm/tile/map/MapLayerImageryProvider.js +70 -49
  488. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  489. package/lib/esm/tile/map/MapLayerSources.js +1 -1
  490. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  491. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  492. package/lib/esm/tile/map/WmsCapabilities.js +4 -1
  493. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  494. package/lib/esm/tools/EditManipulator.d.ts.map +1 -1
  495. package/lib/esm/tools/EditManipulator.js +2 -1
  496. package/lib/esm/tools/EditManipulator.js.map +1 -1
  497. package/lib/esm/tools/Tool.js +1 -1
  498. package/lib/esm/tools/Tool.js.map +1 -1
  499. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  500. package/lib/esm/tools/ToolAdmin.js +6 -4
  501. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  502. package/package.json +23 -21
  503. package/lib/cjs/tile/object-storage-azure.js +0 -5
  504. package/lib/esm/tile/object-storage-azure.js +0 -5
@@ -2,8 +2,7 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import { Angle } from "@itwin/core-geometry";
6
- import { getJson, request } from "../../request/Request";
5
+ import { Angle, Constant } from "@itwin/core-geometry";
7
6
  import { MapCartoRectangle, MapLayerSource, MapLayerSourceStatus } from "../internal";
8
7
  import { IModelApp } from "../../IModelApp";
9
8
  /** @packageDocumentation
@@ -20,35 +19,15 @@ export var ArcGisErrorCode;
20
19
  })(ArcGisErrorCode || (ArcGisErrorCode = {}));
21
20
  /** @internal */
22
21
  export class ArcGisUtilities {
23
- static hasTokenError(response) {
24
- var _a, _b, _c;
25
- if (response.header && ((_a = response.header["content-type"]) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes("json"))) {
26
- try {
27
- // Tile response returns byte array, so we need to check the response data type and convert accordingly.
28
- const json = ((response.body instanceof ArrayBuffer) ? JSON.parse(Buffer.from(response.body).toString()) : response.body);
29
- return (((_b = json === null || json === void 0 ? void 0 : json.error) === null || _b === void 0 ? void 0 : _b.code) === ArcGisErrorCode.TokenRequired || ((_c = json === null || json === void 0 ? void 0 : json.error) === null || _c === void 0 ? void 0 : _c.code) === ArcGisErrorCode.InvalidToken);
30
- }
31
- catch (_err) {
32
- return false; // that probably means we failed to convert byte array to JSON
33
- }
34
- }
35
- return false;
36
- }
37
22
  static getBBoxString(range) {
38
23
  if (!range)
39
24
  range = MapCartoRectangle.createMaximum();
40
25
  return `${range.low.x * Angle.degreesPerRadian},${range.low.y * Angle.degreesPerRadian},${range.high.x * Angle.degreesPerRadian},${range.high.y * Angle.degreesPerRadian}`;
41
26
  }
42
- static async getEndpoint(url) {
43
- const capabilities = await request(`${url}?f=pjson`, {
44
- method: "GET",
45
- responseType: "json",
46
- });
47
- return capabilities.body;
48
- }
49
27
  static async getNationalMapSources() {
50
28
  const sources = new Array();
51
- const services = await getJson("https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList");
29
+ const response = await fetch("https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList", { method: "GET" });
30
+ const services = await response.json();
52
31
  if (!Array.isArray(services))
53
32
  return sources;
54
33
  for (const service of services) {
@@ -74,7 +53,8 @@ export class ArcGisUtilities {
74
53
  if (undefined === baseUrl)
75
54
  baseUrl = url;
76
55
  let sources = new Array();
77
- const json = await getJson(`${url}?f=json`);
56
+ const response = await fetch(`${url}?f=json`, { method: "GET" });
57
+ const json = await response.json();
78
58
  if (json !== undefined) {
79
59
  if (Array.isArray(json.folders)) {
80
60
  for (const folder of json.folders) {
@@ -98,7 +78,8 @@ export class ArcGisUtilities {
98
78
  static async getSourcesFromQuery(range, url = "https://usgs.maps.arcgis.com/sharing/rest/search") {
99
79
  const sources = new Array();
100
80
  for (let start = 1; start > 0;) {
101
- const json = await getJson(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:"Map Service")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`);
81
+ const response = await fetch(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:"Map Service")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`, { method: "GET" });
82
+ const json = await response.json();
102
83
  if (!json)
103
84
  break;
104
85
  start = json.nextStart ? json.nextStart : -1;
@@ -112,8 +93,19 @@ export class ArcGisUtilities {
112
93
  }
113
94
  return sources;
114
95
  }
115
- static async validateSource(url, credentials, ignoreCache) {
116
- const json = await this.getServiceJson(url, credentials, ignoreCache);
96
+ /**
97
+ * Attempt to access an ArcGIS service, and validate its service metadata.
98
+ * @param url URL of the source to validate.
99
+ * @param formatId Format Id of the source.
100
+ * @param capabilitiesFilter List of capabilities 'keyword' that needs to be advertised in the service's metadata
101
+ * in order to be valid. For example: 'Map', 'Query', etc
102
+ * @param userName Username to use for legacy token based security.
103
+ * @param password Username to use for legacy token based security.
104
+ * @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)
105
+ * @return Validation Status. If successful, a list of available sub-layers will also be returned.
106
+ */
107
+ static async validateSource(url, formatId, capabilitiesFilter, userName, password, ignoreCache) {
108
+ const json = await this.getServiceJson(url, formatId, userName, password, ignoreCache);
117
109
  if (json === undefined) {
118
110
  return { status: MapLayerSourceStatus.InvalidUrl };
119
111
  }
@@ -127,17 +119,18 @@ export class ArcGisUtilities {
127
119
  else if (json.error.code === ArcGisErrorCode.InvalidCredentials)
128
120
  return { status: MapLayerSourceStatus.InvalidCredentials };
129
121
  }
130
- // Check this service support map queries
131
- let hasMapCapability = false;
122
+ // Check this service support the expected queries
123
+ let hasCapabilities = false;
132
124
  try {
133
- if (json.capabilities
134
- && typeof json.capabilities === "string"
135
- && json.capabilities.toLowerCase().includes("map")) {
136
- hasMapCapability = true;
125
+ if (json.capabilities && typeof json.capabilities === "string") {
126
+ const capabilities = json.capabilities;
127
+ const capsArray = capabilities.split(",").map((entry) => entry.toLowerCase());
128
+ const filtered = capsArray.filter((element, _index, _array) => capabilitiesFilter.includes(element));
129
+ hasCapabilities = (filtered.length === capabilitiesFilter.length);
137
130
  }
138
131
  }
139
132
  catch { }
140
- if (!hasMapCapability) {
133
+ if (!hasCapabilities) {
141
134
  return { status: MapLayerSourceStatus.InvalidFormat };
142
135
  }
143
136
  let subLayers;
@@ -151,37 +144,61 @@ export class ArcGisUtilities {
151
144
  }
152
145
  return { status: MapLayerSourceStatus.Valid, subLayers };
153
146
  }
154
- static async getServiceJson(url, credentials, ignoreCache) {
155
- var _a;
147
+ /**
148
+ * Fetch an ArcGIS service metadata, and returns its JSON representation.
149
+ * If an access client has been configured for the specified formatId,
150
+ * it will be used to apply required security token.
151
+ * By default, response for each URL are cached.
152
+ */
153
+ static async getServiceJson(url, formatId, userName, password, ignoreCache) {
156
154
  if (!ignoreCache) {
157
155
  const cached = ArcGisUtilities._serviceCache.get(url);
158
156
  if (cached !== undefined)
159
157
  return cached;
160
158
  }
161
159
  try {
162
- const options = {
163
- method: "GET",
164
- responseType: "json",
165
- };
166
160
  const tmpUrl = new URL(url);
167
161
  tmpUrl.searchParams.append("f", "json");
168
- const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient("ArcGIS");
162
+ const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);
169
163
  if (accessClient) {
170
- await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, { mapLayerUrl: new URL(url), userName: credentials === null || credentials === void 0 ? void 0 : credentials.user, password: credentials === null || credentials === void 0 ? void 0 : credentials.password });
164
+ await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, { mapLayerUrl: new URL(url), userName, password });
165
+ }
166
+ const response = await fetch(tmpUrl.toString(), { method: "GET" });
167
+ const errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);
168
+ const json = await response.json();
169
+ if (errorCode === undefined) {
170
+ ArcGisUtilities._serviceCache.set(url, json); // Cache the response only if it doesn't contain a token error.
171
171
  }
172
- const data = await request(tmpUrl.toString(), options);
173
- const json = (_a = data.body) !== null && _a !== void 0 ? _a : undefined;
174
- // Cache the response only if it doesn't contain a token error.
175
- if (!ArcGisUtilities.hasTokenError(data)) {
176
- ArcGisUtilities._serviceCache.set(url, json);
172
+ else {
173
+ ArcGisUtilities._serviceCache.set(url, undefined);
177
174
  }
178
- return json;
175
+ return json; // Always return json, even though it contains an error code.
179
176
  }
180
177
  catch (_error) {
181
178
  ArcGisUtilities._serviceCache.set(url, undefined);
182
179
  return undefined;
183
180
  }
184
181
  }
182
+ /** Read a response from ArcGIS server and check for error code in the response.
183
+ */
184
+ static async checkForResponseErrorCode(response) {
185
+ var _a, _b, _c;
186
+ if (response.headers && ((_a = response.headers.get("content-type")) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes("json"))) {
187
+ try {
188
+ // Note:
189
+ // Since response stream can only be read once (i.e. calls to .json() method)
190
+ // we have to clone the response object in order to check for potential error code,
191
+ // but still keep the response stream as unread.
192
+ const clonedResponse = response.clone();
193
+ const json = await clonedResponse.json();
194
+ if (((_b = json === null || json === void 0 ? void 0 : json.error) === null || _b === void 0 ? void 0 : _b.code) !== undefined)
195
+ return (_c = json === null || json === void 0 ? void 0 : json.error) === null || _c === void 0 ? void 0 : _c.code;
196
+ }
197
+ catch {
198
+ }
199
+ }
200
+ return undefined;
201
+ }
185
202
  // return the appended access token if available.
186
203
  static async appendSecurityToken(url, accessClient, accessTokenParams) {
187
204
  // Append security token if available
@@ -196,6 +213,61 @@ export class ArcGisUtilities {
196
213
  }
197
214
  return undefined;
198
215
  }
216
+ /**
217
+ * Compute scale, resolution values for requested zoom levels (WSG 84)
218
+ * Use a scale of 96 dpi for Google Maps scales
219
+ * Based on this article: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Resolution_and_Scale
220
+ * @param startZoom Zoom level where scales begins to be computed
221
+ * @param endZoom Zoom level where scales ends to be computed
222
+ * @param latitude Latitude in degrees to use to compute scales (i.e 0 for Equator)
223
+ * @param tileSize Size of a tile in pixels (i.e 256)
224
+ * @param screenDpi Monitor resolution in dots per inch (i.e. typically 96dpi is used by Google Maps)
225
+ *
226
+ * @returns An array containing resolution and scale values for each requested zoom level
227
+ */
228
+ static computeZoomLevelsScales(startZoom = 0, endZoom = 20, latitude = 0, tileSize = 256, screenDpi = 96) {
229
+ // Note: There is probably a more direct way to compute this, but I prefer to go for a simple and well documented approach.
230
+ if (startZoom < 0 || endZoom < startZoom || tileSize < 0 || screenDpi < 1 || latitude < -90 || latitude > 90)
231
+ return [];
232
+ const inchPerMeter = 1 / 0.0254;
233
+ const results = [];
234
+ const equatorLength = Constant.earthRadiusWGS84.equator * 2 * Math.PI;
235
+ const zoom0Resolution = equatorLength / tileSize; // in meters per pixel
236
+ const cosLatitude = Math.cos(latitude);
237
+ for (let zoom = startZoom; zoom <= endZoom; zoom++) {
238
+ const resolution = zoom0Resolution * cosLatitude / Math.pow(2, zoom);
239
+ const scale = screenDpi * inchPerMeter * resolution;
240
+ results.push({ zoom, resolution, scale });
241
+ }
242
+ return results;
243
+ }
244
+ /**
245
+ * Match the provided minScale,maxScale values to corresponding wgs84 zoom levels
246
+ * @param defaultMaxLod Value of the last LOD (i.e 22)
247
+ * @param tileSize Size of a tile in pixels (i.e 256)
248
+ * @param minScale Minimum scale value that needs to be matched to a LOD level
249
+ * @param maxScale Maximum scale value that needs to be matched to a LOD level
250
+ * @returns minLod: LOD value matching minScale, maxLod: LOD value matching maxScale
251
+ */
252
+ static getZoomLevelsScales(defaultMaxLod, tileSize, minScale, maxScale, tolerance = 0) {
253
+ let minLod, maxLod;
254
+ const zoomScales = ArcGisUtilities.computeZoomLevelsScales(0, defaultMaxLod, 0 /* latitude 0 = Equator*/, tileSize);
255
+ if (zoomScales.length > 0) {
256
+ if (minScale) {
257
+ minLod = 0;
258
+ // We are looking for the largest scale value with a scale value smaller than minScale
259
+ for (; minLod < zoomScales.length && (zoomScales[minLod].scale > minScale && Math.abs(zoomScales[minLod].scale - minScale) > tolerance); minLod++)
260
+ ;
261
+ }
262
+ if (maxScale) {
263
+ maxLod = defaultMaxLod;
264
+ // We are looking for the smallest scale value with a value greater than maxScale
265
+ for (; maxLod >= 0 && zoomScales[maxLod].scale < maxScale && Math.abs(zoomScales[maxLod].scale - maxScale) > tolerance; maxLod--)
266
+ ;
267
+ }
268
+ }
269
+ return { minLod, maxLod };
270
+ }
199
271
  }
200
272
  ArcGisUtilities._serviceCache = new Map();
201
273
  //# sourceMappingURL=ArcGisUtilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisUtilities.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.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\nimport { Angle } from \"@itwin/core-geometry\";\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { getJson, request, RequestBasicCredentials, RequestOptions, Response } from \"../../request/Request\";\r\nimport { MapCartoRectangle, MapLayerAccessClient, MapLayerAccessToken, MapLayerAccessTokenParams, MapLayerSource, MapLayerSourceStatus, MapLayerSourceValidation} from \"../internal\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n/** @internal */\r\nexport enum ArcGisErrorCode {\r\n InvalidCredentials = 401,\r\n InvalidToken = 498,\r\n TokenRequired = 499,\r\n UnknownError = 1000,\r\n NoTokenService = 1001,\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisUtilities {\r\n\r\n public static hasTokenError(response: Response): boolean {\r\n if (response.header && (response.header[\"content-type\"] as string)?.toLowerCase().includes(\"json\")) {\r\n try {\r\n // Tile response returns byte array, so we need to check the response data type and convert accordingly.\r\n const json = ((response.body instanceof ArrayBuffer) ? JSON.parse(Buffer.from(response.body).toString()) : response.body);\r\n return (json?.error?.code === ArcGisErrorCode.TokenRequired || json?.error?.code === ArcGisErrorCode.InvalidToken);\r\n } catch (_err) {\r\n return false; // that probably means we failed to convert byte array to JSON\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private static getBBoxString(range?: MapCartoRectangle) {\r\n if (!range)\r\n range = MapCartoRectangle.createMaximum();\r\n\r\n return `${range.low.x * Angle.degreesPerRadian},${range.low.y * Angle.degreesPerRadian},${range.high.x * Angle.degreesPerRadian},${range.high.y * Angle.degreesPerRadian}`;\r\n }\r\n public static async getEndpoint(url: string): Promise<any | undefined> {\r\n const capabilities = await request(`${url}?f=pjson`, {\r\n method: \"GET\",\r\n responseType: \"json\",\r\n });\r\n return capabilities.body;\r\n }\r\n\r\n public static async getNationalMapSources(): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n const services = await getJson(\"https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList\");\r\n\r\n if (!Array.isArray(services))\r\n return sources;\r\n\r\n for (const service of services) {\r\n if (service.wmsUrl.length === 0) // Exclude Wfs..\r\n continue;\r\n switch (service.serviceType) {\r\n case \"ArcGIS\":\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url: service.serviceLink, formatId: \"ArcGIS\" })!);\r\n break;\r\n default: {\r\n const wmsIndex = service.wmsUrl.lastIndexOf(\"/wms\");\r\n if (wmsIndex > 0) {\r\n const url = service.wmsUrl.slice(0, wmsIndex + 4);\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url, formatId: \"WMS\" })!);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return sources;\r\n }\r\n public static async getServiceDirectorySources(url: string, baseUrl?: string): Promise<MapLayerSource[]> {\r\n if (undefined === baseUrl)\r\n baseUrl = url;\r\n let sources = new Array<MapLayerSource>();\r\n const json = await getJson(`${url}?f=json`);\r\n if (json !== undefined) {\r\n if (Array.isArray(json.folders)) {\r\n for (const folder of json.folders) {\r\n sources = sources.concat(await ArcGisUtilities.getServiceDirectorySources(`${url}/${folder}`, url));\r\n }\r\n }\r\n if (Array.isArray(json.services)) {\r\n for (const service of json.services) {\r\n let source;\r\n if (service.type === \"MapServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/MapServer`, formatId: \"ArcGIS\" });\r\n else if (service.type === \"ImageServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/ImageServer`, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n public static async getSourcesFromQuery(range?: MapCartoRectangle, url = \"https://usgs.maps.arcgis.com/sharing/rest/search\"): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n for (let start = 1; start > 0;) {\r\n const json = await getJson(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:\"Map Service\")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`);\r\n if (!json)\r\n break;\r\n\r\n start = json.nextStart ? json.nextStart : -1;\r\n if (json !== undefined && Array.isArray(json.results)) {\r\n for (const result of json.results) {\r\n const source = MapLayerSource.fromJSON({ name: result.name ? result.name : result.title, url: result.url, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n\r\n public static async validateSource(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const json = await this.getServiceJson(url, credentials, ignoreCache);\r\n if (json === undefined) {\r\n return { status: MapLayerSourceStatus.InvalidUrl };\r\n } else if (json.error !== undefined) {\r\n\r\n // If we got a 'Token Required' error, lets check what authentification methods this ESRI service offers\r\n // and return information needed to initiate the authentification process... the end-user\r\n // will have to provide his credentials before we can fully validate this source.\r\n if (json.error.code === ArcGisErrorCode.TokenRequired) {\r\n return { status: MapLayerSourceStatus.RequireAuth};\r\n } else if (json.error.code === ArcGisErrorCode.InvalidCredentials)\r\n return { status: MapLayerSourceStatus.InvalidCredentials};\r\n }\r\n\r\n // Check this service support map queries\r\n let hasMapCapability = false;\r\n try {\r\n if (json.capabilities\r\n && typeof json.capabilities === \"string\"\r\n && json.capabilities.toLowerCase().includes(\"map\")) {\r\n hasMapCapability = true;\r\n }\r\n } catch { }\r\n if (!hasMapCapability) {\r\n return { status: MapLayerSourceStatus.InvalidFormat};\r\n }\r\n\r\n let subLayers;\r\n if (json.layers) {\r\n\r\n subLayers = new Array<MapSubLayerProps>();\r\n\r\n for (const layer of json.layers) {\r\n const parent = layer.parentLayerId < 0 ? undefined : layer.parentLayerId;\r\n const children = Array.isArray(layer.subLayerIds) ? layer.subLayerIds : undefined;\r\n subLayers.push({ name: layer.name, visible: layer.defaultVisibility !== false, id: layer.id, parent, children });\r\n }\r\n }\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n }\r\n\r\n private static _serviceCache = new Map<string, any>();\r\n\r\n public static async getServiceJson(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<any> {\r\n if (!ignoreCache) {\r\n const cached = ArcGisUtilities._serviceCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n try {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"json\",\r\n };\r\n\r\n const tmpUrl = new URL(url);\r\n tmpUrl.searchParams.append(\"f\", \"json\");\r\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(\"ArcGIS\");\r\n if (accessClient) {\r\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName: credentials?.user, password: credentials?.password });\r\n }\r\n const data = await request(tmpUrl.toString(), options);\r\n const json = data.body ?? undefined;\r\n\r\n // Cache the response only if it doesn't contain a token error.\r\n if (!ArcGisUtilities.hasTokenError(data)) {\r\n ArcGisUtilities._serviceCache.set(url, json);\r\n }\r\n\r\n return json;\r\n } catch (_error) {\r\n ArcGisUtilities._serviceCache.set(url, undefined);\r\n return undefined;\r\n }\r\n }\r\n\r\n // return the appended access token if available.\r\n public static async appendSecurityToken(url: URL, accessClient: MapLayerAccessClient, accessTokenParams: MapLayerAccessTokenParams): Promise<MapLayerAccessToken|undefined> {\r\n\r\n // Append security token if available\r\n let accessToken: MapLayerAccessToken|undefined;\r\n try {\r\n accessToken = await accessClient.getAccessToken(accessTokenParams);\r\n } catch {}\r\n\r\n if (accessToken?.token) {\r\n url.searchParams.append(\"token\", accessToken.token);\r\n return accessToken;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGisUtilities.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.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\nimport { Angle, Constant } from \"@itwin/core-geometry\";\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { MapCartoRectangle, MapLayerAccessClient, MapLayerAccessToken, MapLayerAccessTokenParams, MapLayerSource, MapLayerSourceStatus, MapLayerSourceValidation} from \"../internal\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport _ from \"lodash\";\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n/** @internal */\r\nexport enum ArcGisErrorCode {\r\n InvalidCredentials = 401,\r\n InvalidToken = 498,\r\n TokenRequired = 499,\r\n UnknownError = 1000,\r\n NoTokenService = 1001,\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisUtilities {\r\n\r\n private static getBBoxString(range?: MapCartoRectangle) {\r\n if (!range)\r\n range = MapCartoRectangle.createMaximum();\r\n\r\n return `${range.low.x * Angle.degreesPerRadian},${range.low.y * Angle.degreesPerRadian},${range.high.x * Angle.degreesPerRadian},${range.high.y * Angle.degreesPerRadian}`;\r\n }\r\n\r\n public static async getNationalMapSources(): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n const response = await fetch(\"https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList\", { method: \"GET\" });\r\n const services = await response.json();\r\n\r\n if (!Array.isArray(services))\r\n return sources;\r\n\r\n for (const service of services) {\r\n if (service.wmsUrl.length === 0) // Exclude Wfs..\r\n continue;\r\n switch (service.serviceType) {\r\n case \"ArcGIS\":\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url: service.serviceLink, formatId: \"ArcGIS\" })!);\r\n break;\r\n default: {\r\n const wmsIndex = service.wmsUrl.lastIndexOf(\"/wms\");\r\n if (wmsIndex > 0) {\r\n const url = service.wmsUrl.slice(0, wmsIndex + 4);\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url, formatId: \"WMS\" })!);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return sources;\r\n }\r\n public static async getServiceDirectorySources(url: string, baseUrl?: string): Promise<MapLayerSource[]> {\r\n if (undefined === baseUrl)\r\n baseUrl = url;\r\n let sources = new Array<MapLayerSource>();\r\n const response = await fetch(`${url}?f=json`, { method: \"GET\" });\r\n const json = await response.json();\r\n if (json !== undefined) {\r\n if (Array.isArray(json.folders)) {\r\n for (const folder of json.folders) {\r\n sources = sources.concat(await ArcGisUtilities.getServiceDirectorySources(`${url}/${folder}`, url));\r\n }\r\n }\r\n if (Array.isArray(json.services)) {\r\n for (const service of json.services) {\r\n let source;\r\n if (service.type === \"MapServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/MapServer`, formatId: \"ArcGIS\" });\r\n else if (service.type === \"ImageServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/ImageServer`, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n public static async getSourcesFromQuery(range?: MapCartoRectangle, url = \"https://usgs.maps.arcgis.com/sharing/rest/search\"): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n for (let start = 1; start > 0;) {\r\n const response = await fetch(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:\"Map Service\")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`, { method: \"GET\" });\r\n const json = await response.json();\r\n if (!json)\r\n break;\r\n\r\n start = json.nextStart ? json.nextStart : -1;\r\n if (json !== undefined && Array.isArray(json.results)) {\r\n for (const result of json.results) {\r\n const source = MapLayerSource.fromJSON({ name: result.name ? result.name : result.title, url: result.url, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n\r\n /**\r\n * Attempt to access an ArcGIS service, and validate its service metadata.\r\n * @param url URL of the source to validate.\r\n * @param formatId Format Id of the source.\r\n * @param capabilitiesFilter List of capabilities 'keyword' that needs to be advertised in the service's metadata\r\n * in order to be valid. For example: 'Map', 'Query', etc\r\n * @param userName Username to use for legacy token based security.\r\n * @param password Username to use for legacy token based security.\r\n * @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)\r\n * @return Validation Status. If successful, a list of available sub-layers will also be returned.\r\n */\r\n public static async validateSource(url: string, formatId: string, capabilitiesFilter: string[], userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const json = await this.getServiceJson(url, formatId, userName, password, ignoreCache);\r\n if (json === undefined) {\r\n return { status: MapLayerSourceStatus.InvalidUrl };\r\n } else if (json.error !== undefined) {\r\n\r\n // If we got a 'Token Required' error, lets check what authentification methods this ESRI service offers\r\n // and return information needed to initiate the authentification process... the end-user\r\n // will have to provide his credentials before we can fully validate this source.\r\n if (json.error.code === ArcGisErrorCode.TokenRequired) {\r\n return { status: MapLayerSourceStatus.RequireAuth};\r\n } else if (json.error.code === ArcGisErrorCode.InvalidCredentials)\r\n return { status: MapLayerSourceStatus.InvalidCredentials};\r\n }\r\n\r\n // Check this service support the expected queries\r\n let hasCapabilities = false;\r\n try {\r\n if (json.capabilities && typeof json.capabilities === \"string\" ) {\r\n const capabilities: string = json.capabilities;\r\n const capsArray: string[] = capabilities.split(\",\").map((entry) => entry.toLowerCase());\r\n const filtered = capsArray.filter((element, _index, _array) => capabilitiesFilter.includes(element));\r\n hasCapabilities = (filtered.length === capabilitiesFilter.length);\r\n }\r\n }catch { }\r\n if (!hasCapabilities) {\r\n return { status: MapLayerSourceStatus.InvalidFormat};\r\n }\r\n\r\n let subLayers;\r\n if (json.layers) {\r\n\r\n subLayers = new Array<MapSubLayerProps>();\r\n\r\n for (const layer of json.layers) {\r\n const parent = layer.parentLayerId < 0 ? undefined : layer.parentLayerId;\r\n const children = Array.isArray(layer.subLayerIds) ? layer.subLayerIds : undefined;\r\n subLayers.push({ name: layer.name, visible: layer.defaultVisibility !== false, id: layer.id, parent, children });\r\n }\r\n }\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n }\r\n\r\n private static _serviceCache = new Map<string, any>();\r\n\r\n /**\r\n * Fetch an ArcGIS service metadata, and returns its JSON representation.\r\n * If an access client has been configured for the specified formatId,\r\n * it will be used to apply required security token.\r\n * By default, response for each URL are cached.\r\n */\r\n public static async getServiceJson(url: string, formatId: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<any> {\r\n if (!ignoreCache) {\r\n const cached = ArcGisUtilities._serviceCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n try {\r\n const tmpUrl = new URL(url);\r\n tmpUrl.searchParams.append(\"f\", \"json\");\r\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);\r\n if (accessClient) {\r\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName, password});\r\n }\r\n\r\n const response = await fetch(tmpUrl.toString(), { method: \"GET\" });\r\n\r\n const errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);\r\n const json = await response.json();\r\n if (errorCode === undefined) {\r\n ArcGisUtilities._serviceCache.set(url, json); // Cache the response only if it doesn't contain a token error.\r\n } else {\r\n ArcGisUtilities._serviceCache.set(url, undefined);\r\n }\r\n return json; // Always return json, even though it contains an error code.\r\n\r\n } catch (_error) {\r\n ArcGisUtilities._serviceCache.set(url, undefined);\r\n return undefined;\r\n }\r\n }\r\n\r\n /** Read a response from ArcGIS server and check for error code in the response.\r\n */\r\n public static async checkForResponseErrorCode(response: Response) {\r\n if (response.headers && response.headers.get(\"content-type\")?.toLowerCase().includes(\"json\")) {\r\n try {\r\n // Note:\r\n // Since response stream can only be read once (i.e. calls to .json() method)\r\n // we have to clone the response object in order to check for potential error code,\r\n // but still keep the response stream as unread.\r\n const clonedResponse = response.clone();\r\n const json = await clonedResponse.json();\r\n if (json?.error?.code !== undefined)\r\n return json?.error?.code as number;\r\n } catch {\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n // return the appended access token if available.\r\n public static async appendSecurityToken(url: URL, accessClient: MapLayerAccessClient, accessTokenParams: MapLayerAccessTokenParams): Promise<MapLayerAccessToken|undefined> {\r\n\r\n // Append security token if available\r\n let accessToken: MapLayerAccessToken|undefined;\r\n try {\r\n accessToken = await accessClient.getAccessToken(accessTokenParams);\r\n } catch {}\r\n\r\n if (accessToken?.token) {\r\n url.searchParams.append(\"token\", accessToken.token);\r\n return accessToken;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Compute scale, resolution values for requested zoom levels (WSG 84)\r\n * Use a scale of 96 dpi for Google Maps scales\r\n * Based on this article: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Resolution_and_Scale\r\n * @param startZoom Zoom level where scales begins to be computed\r\n * @param endZoom Zoom level where scales ends to be computed\r\n * @param latitude Latitude in degrees to use to compute scales (i.e 0 for Equator)\r\n * @param tileSize Size of a tile in pixels (i.e 256)\r\n * @param screenDpi Monitor resolution in dots per inch (i.e. typically 96dpi is used by Google Maps)\r\n *\r\n * @returns An array containing resolution and scale values for each requested zoom level\r\n */\r\n public static computeZoomLevelsScales(startZoom: number = 0, endZoom: number = 20, latitude: number = 0, tileSize: number = 256, screenDpi = 96): {zoom: number, resolution: number, scale: number}[] {\r\n // Note: There is probably a more direct way to compute this, but I prefer to go for a simple and well documented approach.\r\n if (startZoom <0 || endZoom < startZoom || tileSize < 0 || screenDpi < 1 || latitude < -90 || latitude > 90)\r\n return [];\r\n\r\n const inchPerMeter = 1 / 0.0254;\r\n const results: {zoom: number, resolution: number, scale: number}[] = [];\r\n const equatorLength = Constant.earthRadiusWGS84.equator * 2 * Math.PI;\r\n const zoom0Resolution = equatorLength / tileSize; // in meters per pixel\r\n\r\n const cosLatitude = Math.cos(latitude);\r\n for (let zoom = startZoom; zoom<= endZoom; zoom++) {\r\n const resolution = zoom0Resolution * cosLatitude / Math.pow(2, zoom);\r\n const scale = screenDpi * inchPerMeter * resolution;\r\n results.push({zoom, resolution, scale});\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Match the provided minScale,maxScale values to corresponding wgs84 zoom levels\r\n * @param defaultMaxLod Value of the last LOD (i.e 22)\r\n * @param tileSize Size of a tile in pixels (i.e 256)\r\n * @param minScale Minimum scale value that needs to be matched to a LOD level\r\n * @param maxScale Maximum scale value that needs to be matched to a LOD level\r\n * @returns minLod: LOD value matching minScale, maxLod: LOD value matching maxScale\r\n */\r\n public static getZoomLevelsScales( defaultMaxLod: number, tileSize: number, minScale?: number, maxScale?: number, tolerance: number = 0): {minLod?: number, maxLod?: number} {\r\n\r\n let minLod: number|undefined, maxLod: number|undefined;\r\n\r\n const zoomScales = ArcGisUtilities.computeZoomLevelsScales(0, defaultMaxLod, 0 /* latitude 0 = Equator*/, tileSize);\r\n\r\n if (zoomScales.length > 0) {\r\n\r\n if (minScale) {\r\n minLod = 0;\r\n // We are looking for the largest scale value with a scale value smaller than minScale\r\n for (; minLod < zoomScales.length && (zoomScales[minLod].scale > minScale && Math.abs(zoomScales[minLod].scale - minScale) > tolerance); minLod++)\r\n ;\r\n\r\n }\r\n\r\n if (maxScale) {\r\n maxLod = defaultMaxLod;\r\n // We are looking for the smallest scale value with a value greater than maxScale\r\n for (; maxLod >= 0 && zoomScales[maxLod].scale < maxScale && Math.abs(zoomScales[maxLod].scale - maxScale) > tolerance; maxLod--)\r\n ;\r\n }\r\n }\r\n return {minLod, maxLod};\r\n }\r\n\r\n}\r\n"]}
@@ -0,0 +1,26 @@
1
+ /** @packageDocumentation
2
+ * @module Tiles
3
+ */
4
+ import { ImageMapLayerSettings } from "@itwin/core-common";
5
+ import { MapLayerAccessClient, MapLayerAccessToken, MapLayerImageryProvider } from "../../internal";
6
+ /** Base class for ArcGIS map-layer imagery providers.
7
+ *
8
+ * The initial purpose of this class is to offer shared methods
9
+ * to query ArcGIS services and apply the appropriate security token.
10
+ * @see [[ArcGISMapLayerImageryProvider]]
11
+ * @internal
12
+ */
13
+ export declare abstract class ArcGISImageryProvider extends MapLayerImageryProvider {
14
+ protected _accessClient: MapLayerAccessClient | undefined;
15
+ protected _lastAccessToken: MapLayerAccessToken | undefined;
16
+ private static _serviceCache;
17
+ constructor(settings: ImageMapLayerSettings, usesCachedTiles: boolean);
18
+ /**
19
+ * Make a request to an ArcGIS service using the provided URL and init parameters.
20
+ * @param url URL to query
21
+ * @param options Custom settings to apply to the request.
22
+ * Refer to fetch API for more details (https://developer.mozilla.org/en-US/docs/Web/API/fetch)
23
+ */
24
+ protected fetch(url: URL, options?: RequestInit): Promise<Response>;
25
+ }
26
+ //# sourceMappingURL=ArcGISImageryProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArcGISImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAoC,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,EAAiC,MAAM,gBAAgB,CAAC;AAIrK;;;;;;GAMG;AACH,8BAAsB,qBAAsB,SAAQ,uBAAuB;IAEzE,SAAS,CAAC,aAAa,EAAE,oBAAoB,GAAC,SAAS,CAAC;IACxD,SAAS,CAAC,gBAAgB,EAAE,mBAAmB,GAAC,SAAS,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,aAAa,CAA0B;gBAE1C,QAAQ,EAAE,qBAAqB,EAAE,eAAe,EAAE,OAAO;IAKrE;;;;;OAKG;cACa,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW;CAkEtD"}
@@ -0,0 +1,93 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module Tiles
7
+ */
8
+ import { ArcGisErrorCode, ArcGisUtilities, MapLayerImageryProvider, MapLayerImageryProviderStatus } from "../../internal";
9
+ import { IModelApp } from "../../../IModelApp";
10
+ import { NotifyMessageDetails, OutputMessagePriority } from "../../../NotificationManager";
11
+ /** Base class for ArcGIS map-layer imagery providers.
12
+ *
13
+ * The initial purpose of this class is to offer shared methods
14
+ * to query ArcGIS services and apply the appropriate security token.
15
+ * @see [[ArcGISMapLayerImageryProvider]]
16
+ * @internal
17
+ */
18
+ export class ArcGISImageryProvider extends MapLayerImageryProvider {
19
+ constructor(settings, usesCachedTiles) {
20
+ var _a;
21
+ super(settings, usesCachedTiles);
22
+ this._accessClient = (_a = IModelApp.mapLayerFormatRegistry) === null || _a === void 0 ? void 0 : _a.getAccessClient(settings.formatId);
23
+ }
24
+ /**
25
+ * Make a request to an ArcGIS service using the provided URL and init parameters.
26
+ * @param url URL to query
27
+ * @param options Custom settings to apply to the request.
28
+ * Refer to fetch API for more details (https://developer.mozilla.org/en-US/docs/Web/API/fetch)
29
+ */
30
+ async fetch(url, options) {
31
+ var _a, _b;
32
+ const urlObj = new URL(url);
33
+ try {
34
+ if (this._accessClient) {
35
+ this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {
36
+ mapLayerUrl: new URL(this._settings.url),
37
+ userName: this._settings.userName,
38
+ password: this._settings.password
39
+ });
40
+ }
41
+ }
42
+ catch {
43
+ }
44
+ let response = await fetch(urlObj.toString(), options);
45
+ let errorCode = await ArcGisUtilities.checkForResponseErrorCode(response.clone());
46
+ if (errorCode !== undefined &&
47
+ (errorCode === ArcGisErrorCode.TokenRequired || errorCode === ArcGisErrorCode.InvalidToken)) {
48
+ let hasTokenError = true;
49
+ // **** Legacy token ONLY ***
50
+ // Token might have expired, make a second attempt by forcing new token.
51
+ if (this._settings.userName && this._settings.userName.length > 0 && this._lastAccessToken) {
52
+ // Invalidate previously used token to force token re-generation
53
+ if (((_a = this._accessClient) === null || _a === void 0 ? void 0 : _a.invalidateToken) !== undefined && this._lastAccessToken !== undefined)
54
+ this._accessClient.invalidateToken(this._lastAccessToken);
55
+ const urlObj2 = new URL(url);
56
+ if (this._accessClient) {
57
+ try {
58
+ this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, { mapLayerUrl: urlObj, userName: this._settings.userName, password: this._settings.password });
59
+ }
60
+ catch {
61
+ }
62
+ }
63
+ // Make a second attempt with refreshed token
64
+ response = await fetch(urlObj2.toString(), options);
65
+ errorCode = await ArcGisUtilities.checkForResponseErrorCode(response.clone());
66
+ if (errorCode !== undefined &&
67
+ (errorCode === ArcGisErrorCode.TokenRequired || errorCode === ArcGisErrorCode.InvalidToken)) {
68
+ // OK at this point, if response still contain a token error, we assume end-user will
69
+ // have to provide credentials again. Change the layer status so we
70
+ // don't make additional invalid requests..
71
+ if (((_b = this._accessClient) === null || _b === void 0 ? void 0 : _b.invalidateToken) !== undefined && this._lastAccessToken !== undefined) {
72
+ this._accessClient.invalidateToken(this._lastAccessToken);
73
+ this._lastAccessToken = undefined;
74
+ }
75
+ }
76
+ else {
77
+ hasTokenError = false;
78
+ }
79
+ }
80
+ if (hasTokenError
81
+ && this.status === MapLayerImageryProviderStatus.Valid) {
82
+ // Only report if status is currently valid (avoid reporting twice the same error)
83
+ this.status = MapLayerImageryProviderStatus.RequireAuth;
84
+ this.onStatusChanged.raiseEvent(this);
85
+ const msg = IModelApp.localization.getLocalizedString("iModelJs:MapLayers.Messages.FetchTooltipTokenError", { layerName: this._settings.name });
86
+ IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Warning, msg));
87
+ }
88
+ }
89
+ return response;
90
+ }
91
+ }
92
+ ArcGISImageryProvider._serviceCache = new Map();
93
+ //# sourceMappingURL=ArcGISImageryProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArcGISImageryProvider.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISImageryProvider.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,eAAe,EAA6C,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AACrK,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE3F;;;;;;GAMG;AACH,MAAM,OAAgB,qBAAsB,SAAQ,uBAAuB;IAMzE,YAAY,QAA+B,EAAE,eAAwB;;QACnE,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,MAAA,SAAS,CAAC,sBAAsB,0CAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5F,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,KAAK,CAAC,GAAQ,EAAE,OAAqB;;QAEnD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI;YACF,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,gBAAgB,GAAG,MAAM,eAAe,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE;oBAC5F,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;oBACxC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;oBACjC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;iBAAE,CAAC,CAAC;aACxC;SAEF;QAAC,MAAM;SACP;QAED,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,SAAS,GAAI,MAAM,eAAe,CAAC,yBAAyB,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAEnF,IAAI,SAAS,KAAK,SAAS;YACxB,CAAC,SAAS,KAAK,eAAe,CAAC,aAAa,IAAI,SAAS,KAAK,eAAe,CAAC,YAAY,CAAC,EAAG;YAC/F,IAAI,aAAa,GAAG,IAAI,CAAC;YAEzB,6BAA6B;YAC7B,wEAAwE;YACxE,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAG;gBAE3F,gEAAgE;gBAChE,IAAI,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,eAAe,MAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;oBAC1F,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAE5D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,IAAI,CAAC,aAAa,EAAE;oBACtB,IAAI;wBACF,IAAI,CAAC,gBAAgB,GAAG,MAAM,eAAe,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;qBAC7L;oBAAC,MAAM;qBACP;iBACF;gBAED,6CAA6C;gBAC7C,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;gBACpD,SAAS,GAAI,MAAM,eAAe,CAAC,yBAAyB,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/E,IAAI,SAAS,KAAK,SAAS;oBACvB,CAAC,SAAS,KAAK,eAAe,CAAC,aAAa,IAAI,SAAS,KAAK,eAAe,CAAC,YAAY,CAAC,EAAG;oBAClG,qFAAqF;oBACrF,oEAAoE;oBACpE,2CAA2C;oBACzC,IAAI,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,eAAe,MAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;wBAC5F,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;wBAC1D,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;qBACnC;iBACF;qBAAM;oBACL,aAAa,GAAG,KAAK,CAAC;iBACvB;aACF;YAED,IAAI,aAAa;mBACX,IAAI,CAAC,MAAM,KAAK,6BAA6B,CAAC,KAAK,EAAG;gBAC1D,kFAAkF;gBAClF,IAAI,CAAC,MAAM,GAAG,6BAA6B,CAAC,WAAW,CAAC;gBACxD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,oDAAoD,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChJ,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;aACrG;SAEF;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;;AA9Ec,mCAAa,GAAG,IAAI,GAAG,EAAe,CAAC","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 Tiles\r\n */\r\n\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\nimport { ArcGisErrorCode, ArcGisUtilities, MapLayerAccessClient, MapLayerAccessToken, MapLayerImageryProvider, MapLayerImageryProviderStatus } from \"../../internal\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\nimport { NotifyMessageDetails, OutputMessagePriority } from \"../../../NotificationManager\";\r\n\r\n/** Base class for ArcGIS map-layer imagery providers.\r\n *\r\n * The initial purpose of this class is to offer shared methods\r\n * to query ArcGIS services and apply the appropriate security token.\r\n * @see [[ArcGISMapLayerImageryProvider]]\r\n * @internal\r\n */\r\nexport abstract class ArcGISImageryProvider extends MapLayerImageryProvider {\r\n\r\n protected _accessClient: MapLayerAccessClient|undefined;\r\n protected _lastAccessToken: MapLayerAccessToken|undefined;\r\n private static _serviceCache = new Map<string, any>();\r\n\r\n constructor(settings: ImageMapLayerSettings, usesCachedTiles: boolean) {\r\n super(settings, usesCachedTiles);\r\n this._accessClient = IModelApp.mapLayerFormatRegistry?.getAccessClient(settings.formatId);\r\n }\r\n\r\n /**\r\n * Make a request to an ArcGIS service using the provided URL and init parameters.\r\n * @param url URL to query\r\n * @param options Custom settings to apply to the request.\r\n * Refer to fetch API for more details (https://developer.mozilla.org/en-US/docs/Web/API/fetch)\r\n */\r\n protected async fetch(url: URL, options?: RequestInit) {\r\n\r\n const urlObj = new URL(url);\r\n try {\r\n if (this._accessClient) {\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {\r\n mapLayerUrl: new URL(this._settings.url),\r\n userName: this._settings.userName,\r\n password: this._settings.password });\r\n }\r\n\r\n } catch {\r\n }\r\n\r\n let response = await fetch(urlObj.toString(), options);\r\n let errorCode = await ArcGisUtilities.checkForResponseErrorCode(response.clone());\r\n\r\n if (errorCode !== undefined &&\r\n (errorCode === ArcGisErrorCode.TokenRequired || errorCode === ArcGisErrorCode.InvalidToken) ) {\r\n let hasTokenError = true;\r\n\r\n // **** Legacy token ONLY ***\r\n // Token might have expired, make a second attempt by forcing new token.\r\n if (this._settings.userName && this._settings.userName.length > 0 && this._lastAccessToken ) {\r\n\r\n // Invalidate previously used token to force token re-generation\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined)\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n\r\n const urlObj2 = new URL(url);\r\n if (this._accessClient) {\r\n try {\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {mapLayerUrl: urlObj, userName: this._settings.userName, password: this._settings.password });\r\n } catch {\r\n }\r\n }\r\n\r\n // Make a second attempt with refreshed token\r\n response = await fetch(urlObj2.toString(), options);\r\n errorCode = await ArcGisUtilities.checkForResponseErrorCode(response.clone());\r\n if (errorCode !== undefined &&\r\n (errorCode === ArcGisErrorCode.TokenRequired || errorCode === ArcGisErrorCode.InvalidToken) ) {\r\n // OK at this point, if response still contain a token error, we assume end-user will\r\n // have to provide credentials again. Change the layer status so we\r\n // don't make additional invalid requests..\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined) {\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n this._lastAccessToken = undefined;\r\n }\r\n } else {\r\n hasTokenError = false;\r\n }\r\n }\r\n\r\n if (hasTokenError\r\n && this.status === MapLayerImageryProviderStatus.Valid ) {\r\n // Only report if status is currently valid (avoid reporting twice the same error)\r\n this.status = MapLayerImageryProviderStatus.RequireAuth;\r\n this.onStatusChanged.raiseEvent(this);\r\n const msg = IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Messages.FetchTooltipTokenError\", { layerName: this._settings.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Warning, msg));\r\n }\r\n\r\n }\r\n return response;\r\n }\r\n}\r\n"]}
@@ -2,17 +2,15 @@
2
2
  * @module Tiles
3
3
  */
4
4
  import { Cartographic, ImageMapLayerSettings, ImageSource } from "@itwin/core-common";
5
- import { ImageryMapTile, ImageryMapTileTree, MapLayerFeatureInfo, MapLayerImageryProvider, QuadId } from "../../internal";
5
+ import { ArcGISImageryProvider, ImageryMapTile, ImageryMapTileTree, MapLayerFeatureInfo, QuadId } from "../../internal";
6
6
  /** @internal */
7
- export declare class ArcGISMapLayerImageryProvider extends MapLayerImageryProvider {
7
+ export declare class ArcGISMapLayerImageryProvider extends ArcGISImageryProvider {
8
8
  private _maxDepthFromLod;
9
9
  private _minDepthFromLod;
10
10
  private _copyrightText;
11
11
  private _querySupported;
12
12
  private _tileMapSupported;
13
13
  private _tileMap;
14
- private _accessClient;
15
- private _lastAccessToken;
16
14
  serviceJson: any;
17
15
  constructor(settings: ImageMapLayerSettings);
18
16
  protected get _filterByCartoRange(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAA6B,MAAM,oBAAoB,CAAC;AAGjH,OAAO,EAEL,cAAc,EAAE,kBAAkB,EAAsF,mBAAmB,EAC3I,uBAAuB,EAAyD,MAAM,EACvF,MAAM,gBAAgB,CAAC;AAKxB,gBAAgB;AAChB,qBAAa,6BAA8B,SAAQ,uBAAuB;IACxE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,gBAAgB,CAAgC;IACjD,WAAW,EAAE,GAAG,CAAC;gBACZ,QAAQ,EAAE,qBAAqB;IAK3C,cAAuB,mBAAmB,YAAoB;IAE9D,IAAoB,gBAAgB,WAAsE;IAC1G,IAAoB,gBAAgB,WAAyF;IAEtH,YAAY,CAAC,SAAS,EAAE,GAAG;;;;YAKpB,SAAS;IAUD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;cAuD7F,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI;IAmCxG,OAAO,CAAC,oBAAoB;IAQN,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyEjC,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;YAS7C,eAAe;IAoDP,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1G,cAAc,CAAC,YAAY,EAAE,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzJ,SAAS,CAAC,cAAc,CAAC,MAAM,SAAS,GAAG,MAAM;IAWpC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAsB3F"}
1
+ {"version":3,"file":"ArcGISMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAA6B,MAAM,oBAAoB,CAAC;AAEjH,OAAO,EACY,qBAAqB,EACtC,cAAc,EAAE,kBAAkB,EAA2C,mBAAmB,EACzC,MAAM,EAC9D,MAAM,gBAAgB,CAAC;AAKxB,gBAAgB;AAChB,qBAAa,6BAA8B,SAAQ,qBAAqB;IACtE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAA0B;IAEnC,WAAW,EAAE,GAAG,CAAC;gBACZ,QAAQ,EAAE,qBAAqB;IAK3C,cAAuB,mBAAmB,YAAoB;IAE9D,IAAoB,gBAAgB,WAAsE;IAC1G,IAAoB,gBAAgB,WAAyF;IAEtH,YAAY,CAAC,SAAS,EAAE,GAAG;;;;YAKpB,SAAS;IAOD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;cAmB7F,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI;IAmCxG,OAAO,CAAC,oBAAoB;IAQN,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyEjC,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;YAS7C,eAAe;IAYP,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1G,cAAc,CAAC,YAAY,EAAE,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzJ,SAAS,CAAC,cAAc,CAAC,MAAM,SAAS,GAAG,MAAM;IAWpC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAU3F"}