@itwin/core-frontend 3.2.0-dev.69 → 3.2.0-dev.71

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 (181) hide show
  1. package/lib/cjs/render/GraphicBuilder.d.ts +25 -2
  2. package/lib/cjs/render/GraphicBuilder.d.ts.map +1 -1
  3. package/lib/cjs/render/GraphicBuilder.js +24 -0
  4. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  5. package/lib/cjs/render/RenderSystem.d.ts +3 -3
  6. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  7. package/lib/cjs/render/RenderSystem.js +3 -3
  8. package/lib/cjs/render/RenderSystem.js.map +1 -1
  9. package/lib/cjs/render/primitives/VertexKey.d.ts +4 -2
  10. package/lib/cjs/render/primitives/VertexKey.d.ts.map +1 -1
  11. package/lib/cjs/render/primitives/VertexKey.js +23 -12
  12. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  13. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts +12 -4
  14. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  15. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +13 -12
  16. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  17. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.d.ts +2 -1
  18. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
  19. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +6 -1
  20. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  21. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.d.ts +14 -12
  22. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.d.ts.map +1 -1
  23. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.js +26 -25
  24. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  25. package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts +8 -8
  26. package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
  27. package/lib/cjs/render/primitives/mesh/MeshBuilder.js +15 -15
  28. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  29. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.d.ts +11 -6
  30. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
  31. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +12 -15
  32. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  33. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +1 -1
  34. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  35. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +6 -2
  36. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  37. package/lib/cjs/render/webgl/RealityMesh.d.ts +10 -9
  38. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  39. package/lib/cjs/render/webgl/RealityMesh.js +20 -18
  40. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  41. package/lib/cjs/render/webgl/System.d.ts +3 -3
  42. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  43. package/lib/cjs/render/webgl/System.js +6 -6
  44. package/lib/cjs/render/webgl/System.js.map +1 -1
  45. package/lib/cjs/tile/GltfReader.d.ts +1 -4
  46. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  47. package/lib/cjs/tile/GltfReader.js +1 -1
  48. package/lib/cjs/tile/GltfReader.js.map +1 -1
  49. package/lib/cjs/tile/internal.d.ts +0 -2
  50. package/lib/cjs/tile/internal.d.ts.map +1 -1
  51. package/lib/cjs/tile/internal.js +0 -2
  52. package/lib/cjs/tile/internal.js.map +1 -1
  53. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +2 -1
  54. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  55. package/lib/cjs/tile/map/ArcGisUtilities.js +31 -20
  56. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  57. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  58. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  59. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +50 -27
  60. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  61. package/lib/cjs/tile/map/MapLayerAuthentication.d.ts +20 -9
  62. package/lib/cjs/tile/map/MapLayerAuthentication.d.ts.map +1 -1
  63. package/lib/cjs/tile/map/MapLayerAuthentication.js +0 -8
  64. package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -1
  65. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +19 -5
  66. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  67. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +28 -7
  68. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  69. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  70. package/lib/cjs/tile/map/MapLayerImageryFormats.js +1 -3
  71. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  72. package/lib/cjs/tile/map/MapLayerSources.d.ts +1 -1
  73. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  74. package/lib/cjs/tile/map/MapLayerSources.js +1 -1
  75. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  76. package/lib/cjs/tile/map/MapTile.js +2 -2
  77. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  78. package/lib/cjs/tile/map/MapTileLoader.js +1 -1
  79. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  80. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  81. package/lib/cjs/tools/ToolAdmin.js +5 -1
  82. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  83. package/lib/esm/render/GraphicBuilder.d.ts +25 -2
  84. package/lib/esm/render/GraphicBuilder.d.ts.map +1 -1
  85. package/lib/esm/render/GraphicBuilder.js +25 -1
  86. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  87. package/lib/esm/render/RenderSystem.d.ts +3 -3
  88. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  89. package/lib/esm/render/RenderSystem.js +3 -3
  90. package/lib/esm/render/RenderSystem.js.map +1 -1
  91. package/lib/esm/render/primitives/VertexKey.d.ts +4 -2
  92. package/lib/esm/render/primitives/VertexKey.d.ts.map +1 -1
  93. package/lib/esm/render/primitives/VertexKey.js +24 -13
  94. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  95. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts +12 -4
  96. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  97. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +13 -12
  98. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  99. package/lib/esm/render/primitives/geometry/GeometryListBuilder.d.ts +2 -1
  100. package/lib/esm/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
  101. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +7 -2
  102. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  103. package/lib/esm/render/primitives/geometry/GeometryPrimitives.d.ts +14 -12
  104. package/lib/esm/render/primitives/geometry/GeometryPrimitives.d.ts.map +1 -1
  105. package/lib/esm/render/primitives/geometry/GeometryPrimitives.js +26 -25
  106. package/lib/esm/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  107. package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts +8 -8
  108. package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
  109. package/lib/esm/render/primitives/mesh/MeshBuilder.js +15 -15
  110. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  111. package/lib/esm/render/primitives/mesh/MeshBuilderMap.d.ts +11 -6
  112. package/lib/esm/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
  113. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +13 -16
  114. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  115. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +1 -1
  116. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  117. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +6 -2
  118. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  119. package/lib/esm/render/webgl/RealityMesh.d.ts +10 -9
  120. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  121. package/lib/esm/render/webgl/RealityMesh.js +20 -18
  122. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  123. package/lib/esm/render/webgl/System.d.ts +3 -3
  124. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  125. package/lib/esm/render/webgl/System.js +6 -6
  126. package/lib/esm/render/webgl/System.js.map +1 -1
  127. package/lib/esm/tile/GltfReader.d.ts +1 -4
  128. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  129. package/lib/esm/tile/GltfReader.js +1 -1
  130. package/lib/esm/tile/GltfReader.js.map +1 -1
  131. package/lib/esm/tile/internal.d.ts +0 -2
  132. package/lib/esm/tile/internal.d.ts.map +1 -1
  133. package/lib/esm/tile/internal.js +0 -2
  134. package/lib/esm/tile/internal.js.map +1 -1
  135. package/lib/esm/tile/map/ArcGisUtilities.d.ts +2 -1
  136. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  137. package/lib/esm/tile/map/ArcGisUtilities.js +32 -21
  138. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  139. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  140. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  141. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +51 -28
  142. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  143. package/lib/esm/tile/map/MapLayerAuthentication.d.ts +20 -9
  144. package/lib/esm/tile/map/MapLayerAuthentication.d.ts.map +1 -1
  145. package/lib/esm/tile/map/MapLayerAuthentication.js +1 -7
  146. package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -1
  147. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +19 -5
  148. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  149. package/lib/esm/tile/map/MapLayerFormatRegistry.js +28 -7
  150. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  151. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  152. package/lib/esm/tile/map/MapLayerImageryFormats.js +2 -4
  153. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  154. package/lib/esm/tile/map/MapLayerSources.d.ts +1 -1
  155. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  156. package/lib/esm/tile/map/MapLayerSources.js +1 -1
  157. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  158. package/lib/esm/tile/map/MapTile.js +2 -2
  159. package/lib/esm/tile/map/MapTile.js.map +1 -1
  160. package/lib/esm/tile/map/MapTileLoader.js +1 -1
  161. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  162. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  163. package/lib/esm/tools/ToolAdmin.js +5 -1
  164. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  165. package/package.json +20 -20
  166. package/lib/cjs/tile/map/ArcGisTokenGenerator.d.ts +0 -35
  167. package/lib/cjs/tile/map/ArcGisTokenGenerator.d.ts.map +0 -1
  168. package/lib/cjs/tile/map/ArcGisTokenGenerator.js +0 -116
  169. package/lib/cjs/tile/map/ArcGisTokenGenerator.js.map +0 -1
  170. package/lib/cjs/tile/map/ArcGisTokenManager.d.ts +0 -13
  171. package/lib/cjs/tile/map/ArcGisTokenManager.d.ts.map +0 -1
  172. package/lib/cjs/tile/map/ArcGisTokenManager.js +0 -39
  173. package/lib/cjs/tile/map/ArcGisTokenManager.js.map +0 -1
  174. package/lib/esm/tile/map/ArcGisTokenGenerator.d.ts +0 -35
  175. package/lib/esm/tile/map/ArcGisTokenGenerator.d.ts.map +0 -1
  176. package/lib/esm/tile/map/ArcGisTokenGenerator.js +0 -112
  177. package/lib/esm/tile/map/ArcGisTokenGenerator.js.map +0 -1
  178. package/lib/esm/tile/map/ArcGisTokenManager.d.ts +0 -13
  179. package/lib/esm/tile/map/ArcGisTokenManager.d.ts.map +0 -1
  180. package/lib/esm/tile/map/ArcGisTokenManager.js +0 -35
  181. package/lib/esm/tile/map/ArcGisTokenManager.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-frontend",
3
- "version": "3.2.0-dev.69",
3
+ "version": "3.2.0-dev.71",
4
4
  "description": "iTwin.js frontend components",
5
5
  "main": "lib/cjs/core-frontend.js",
6
6
  "module": "lib/esm/core-frontend.js",
@@ -22,29 +22,29 @@
22
22
  "url": "http://www.bentley.com"
23
23
  },
24
24
  "peerDependencies": {
25
- "@itwin/appui-abstract": "^3.2.0-dev.69",
26
- "@itwin/core-bentley": "^3.2.0-dev.69",
27
- "@itwin/core-common": "^3.2.0-dev.69",
28
- "@itwin/core-geometry": "^3.2.0-dev.69",
29
- "@itwin/core-orbitgt": "^3.2.0-dev.69",
30
- "@itwin/core-quantity": "^3.2.0-dev.69",
31
- "@itwin/webgl-compatibility": "^3.2.0-dev.69"
25
+ "@itwin/appui-abstract": "^3.2.0-dev.71",
26
+ "@itwin/core-bentley": "^3.2.0-dev.71",
27
+ "@itwin/core-common": "^3.2.0-dev.71",
28
+ "@itwin/core-geometry": "^3.2.0-dev.71",
29
+ "@itwin/core-orbitgt": "^3.2.0-dev.71",
30
+ "@itwin/core-quantity": "^3.2.0-dev.71",
31
+ "@itwin/webgl-compatibility": "^3.2.0-dev.71"
32
32
  },
33
33
  "//devDependencies": [
34
34
  "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install",
35
35
  "NOTE: All tools used by scripts in this package must be listed as devDependencies"
36
36
  ],
37
37
  "devDependencies": {
38
- "@itwin/appui-abstract": "3.2.0-dev.69",
39
- "@itwin/build-tools": "3.2.0-dev.69",
40
- "@itwin/core-bentley": "3.2.0-dev.69",
41
- "@itwin/core-common": "3.2.0-dev.69",
42
- "@itwin/core-geometry": "3.2.0-dev.69",
43
- "@itwin/core-orbitgt": "3.2.0-dev.69",
44
- "@itwin/core-quantity": "3.2.0-dev.69",
45
- "@itwin/certa": "3.2.0-dev.69",
46
- "@itwin/eslint-plugin": "3.2.0-dev.69",
47
- "@itwin/webgl-compatibility": "3.2.0-dev.69",
38
+ "@itwin/appui-abstract": "3.2.0-dev.71",
39
+ "@itwin/build-tools": "3.2.0-dev.71",
40
+ "@itwin/core-bentley": "3.2.0-dev.71",
41
+ "@itwin/core-common": "3.2.0-dev.71",
42
+ "@itwin/core-geometry": "3.2.0-dev.71",
43
+ "@itwin/core-orbitgt": "3.2.0-dev.71",
44
+ "@itwin/core-quantity": "3.2.0-dev.71",
45
+ "@itwin/certa": "3.2.0-dev.71",
46
+ "@itwin/eslint-plugin": "3.2.0-dev.71",
47
+ "@itwin/webgl-compatibility": "3.2.0-dev.71",
48
48
  "@types/chai": "^4.1.4",
49
49
  "@types/chai-as-promised": "^7",
50
50
  "@types/deep-assign": "^0.1.0",
@@ -73,8 +73,8 @@
73
73
  "NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"
74
74
  ],
75
75
  "dependencies": {
76
- "@itwin/core-i18n": "3.2.0-dev.69",
77
- "@itwin/core-telemetry": "3.2.0-dev.69",
76
+ "@itwin/core-i18n": "3.2.0-dev.71",
77
+ "@itwin/core-telemetry": "3.2.0-dev.71",
78
78
  "@loaders.gl/core": "^3.1.6",
79
79
  "@loaders.gl/draco": "^3.1.6",
80
80
  "deep-assign": "^2.0.0",
@@ -1,35 +0,0 @@
1
- /** @packageDocumentation
2
- * @module Tiles
3
- */
4
- /** @internal */
5
- export interface ArcGisToken {
6
- token: string;
7
- expires: number;
8
- ssl: boolean;
9
- }
10
- /** @internal */
11
- export declare enum ArcGisTokenClientType {
12
- ip = 0,
13
- referer = 1,
14
- requestIp = 2
15
- }
16
- /** @internal */
17
- export interface ArcGisGenerateTokenOptions {
18
- client: ArcGisTokenClientType;
19
- ip?: string;
20
- referer?: string;
21
- expiration?: number;
22
- }
23
- /** @internal */
24
- export declare class ArcGisTokenGenerator {
25
- private static readonly restApiPath;
26
- private static readonly restApiInfoPath;
27
- private static _tokenServiceUrlCache;
28
- static fetchTokenServiceUrl(esriRestServiceUrl: string): Promise<string | undefined>;
29
- static getTokenServiceFromInfoJson(json: any): string | undefined;
30
- getTokenServiceUrl(baseUrl: string): Promise<string | undefined>;
31
- generate(esriRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<any>;
32
- static formEncode(str: string): string;
33
- static rfc1738Encode(str: string): string;
34
- }
35
- //# sourceMappingURL=ArcGisTokenGenerator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArcGisTokenGenerator.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisTokenGenerator.ts"],"names":[],"mappings":"AAMA;;GAEG;AAEH,gBAAgB;AAChB,MAAM,WAAW,WAAW;IAE1B,KAAK,EAAE,MAAM,CAAC;IAGd,OAAO,EAAE,MAAM,CAAC;IAGhB,GAAG,EAAE,OAAO,CAAC;CACd;AAGD,gBAAgB;AAChB,oBAAY,qBAAqB;IAC/B,EAAE,IAAA;IACF,OAAO,IAAA;IACP,SAAS,IAAA;CACV;AAED,gBAAgB;AAChB,MAAM,WAAW,0BAA0B;IAKzC,MAAM,EAAE,qBAAqB,CAAC;IAK9B,EAAE,CAAC,EAAE,MAAM,CAAC;IAOZ,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,gBAAgB;AAChB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAY;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAGzD,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA6B;WAE7C,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;WAgBnF,2BAA2B,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS;IAI3D,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAahE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC;WAsD1H,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;WAM/B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAQjD"}
@@ -1,116 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ArcGisTokenGenerator = exports.ArcGisTokenClientType = void 0;
4
- /*---------------------------------------------------------------------------------------------
5
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
- * See LICENSE.md in the project root for license terms and full copyright notice.
7
- *--------------------------------------------------------------------------------------------*/
8
- const Request_1 = require("../../request/Request");
9
- // client application's base URL, a user-specified IP address, or the IP address that is making the request.
10
- /** @internal */
11
- var ArcGisTokenClientType;
12
- (function (ArcGisTokenClientType) {
13
- ArcGisTokenClientType[ArcGisTokenClientType["ip"] = 0] = "ip";
14
- ArcGisTokenClientType[ArcGisTokenClientType["referer"] = 1] = "referer";
15
- ArcGisTokenClientType[ArcGisTokenClientType["requestIp"] = 2] = "requestIp";
16
- })(ArcGisTokenClientType = exports.ArcGisTokenClientType || (exports.ArcGisTokenClientType = {}));
17
- /** @internal */
18
- class ArcGisTokenGenerator {
19
- static async fetchTokenServiceUrl(esriRestServiceUrl) {
20
- const lowerUrl = esriRestServiceUrl.toLowerCase();
21
- const restApiIdx = lowerUrl.indexOf(ArcGisTokenGenerator.restApiPath);
22
- if (restApiIdx === -1)
23
- return undefined;
24
- const infoUrl = lowerUrl.substr(0, restApiIdx + ArcGisTokenGenerator.restApiPath.length) + ArcGisTokenGenerator.restApiInfoPath;
25
- let tokenServicesUrl;
26
- try {
27
- const response = await (0, Request_1.request)(infoUrl, { method: "GET", responseType: "json" });
28
- tokenServicesUrl = ArcGisTokenGenerator.getTokenServiceFromInfoJson(response === null || response === void 0 ? void 0 : response.body);
29
- }
30
- catch (_error) {
31
- }
32
- return tokenServicesUrl;
33
- }
34
- static getTokenServiceFromInfoJson(json) {
35
- var _a, _b;
36
- return ((_a = json.authInfo) === null || _a === void 0 ? void 0 : _a.isTokenBasedSecurity) ? (_b = json === null || json === void 0 ? void 0 : json.authInfo) === null || _b === void 0 ? void 0 : _b.tokenServicesUrl : undefined;
37
- }
38
- async getTokenServiceUrl(baseUrl) {
39
- const cached = ArcGisTokenGenerator._tokenServiceUrlCache.get(baseUrl);
40
- if (cached !== undefined)
41
- return cached;
42
- const tokenServiceUrl = await ArcGisTokenGenerator.fetchTokenServiceUrl(baseUrl);
43
- if (tokenServiceUrl !== undefined)
44
- ArcGisTokenGenerator._tokenServiceUrlCache.set(baseUrl, tokenServiceUrl);
45
- return tokenServiceUrl;
46
- }
47
- // base url: ArcGis REST service base URL (format must be "https://<host>/<instance>/rest/")
48
- async generate(esriRestServiceUrl, userName, password, options) {
49
- const tokenServiceUrl = await this.getTokenServiceUrl(esriRestServiceUrl);
50
- if (!tokenServiceUrl)
51
- return undefined;
52
- let token;
53
- try {
54
- const encodedUsername = encodeURIComponent(userName);
55
- const encodedPassword = encodeURIComponent(password);
56
- // Compose the expiration param
57
- let expirationStr = "";
58
- if (options.expiration) {
59
- expirationStr = `&expiration=${options.expiration}`;
60
- }
61
- // Compose the client param
62
- let clientStr = "";
63
- if (options.client === ArcGisTokenClientType.referer) {
64
- let refererStr = "";
65
- if (options.referer === undefined) {
66
- refererStr = encodeURIComponent(location.origin); // default to application origin
67
- }
68
- else {
69
- refererStr = encodeURIComponent(options.referer);
70
- }
71
- clientStr = `&client=referer&referer=${refererStr}`;
72
- }
73
- else if (options.client === ArcGisTokenClientType.ip) {
74
- if (options.ip === undefined)
75
- return token;
76
- clientStr = `&client=ip&ip=${options.ip}`;
77
- }
78
- else if (options.client === ArcGisTokenClientType.requestIp) {
79
- clientStr = `&client=requestip&ip=`;
80
- }
81
- const httpRequestOptions = {
82
- method: "POST",
83
- body: `username=${encodedUsername}&password=${encodedPassword}${clientStr}${expirationStr}&f=pjson`,
84
- headers: { "content-type": "application/x-www-form-urlencoded" },
85
- responseType: "json",
86
- };
87
- const response = await (0, Request_1.request)(tokenServiceUrl, httpRequestOptions);
88
- // Check a token was really generated (an error could be part of the body)
89
- token = response === null || response === void 0 ? void 0 : response.body;
90
- }
91
- catch (_error) {
92
- }
93
- return token;
94
- }
95
- // Encode following 'application/x-www-form-urlencoded' standard (https://www.w3.org/TR/html401/interact/forms.html#h-17.13.3.3)
96
- // Also mentioned here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
97
- static formEncode(str) {
98
- return ArcGisTokenGenerator.rfc1738Encode(str).replace(/%20/g, "+");
99
- }
100
- // Encode following RFC1738 standard (https://www.ietf.org/rfc/rfc1738.txt)
101
- // Code from https://locutus.io/php/url/rawurlencode/
102
- static rfc1738Encode(str) {
103
- return encodeURIComponent(str)
104
- .replace(/!/g, "%21")
105
- .replace(/'/g, "%27")
106
- .replace(/\(/g, "%28")
107
- .replace(/\)/g, "%29")
108
- .replace(/\*/g, "%2A");
109
- }
110
- }
111
- exports.ArcGisTokenGenerator = ArcGisTokenGenerator;
112
- ArcGisTokenGenerator.restApiPath = "/rest/";
113
- ArcGisTokenGenerator.restApiInfoPath = "info?f=pjson";
114
- // Cache info url to avoid fetching/parsing twice for the same base url.
115
- ArcGisTokenGenerator._tokenServiceUrlCache = new Map();
116
- //# sourceMappingURL=ArcGisTokenGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArcGisTokenGenerator.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisTokenGenerator.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 { request, RequestOptions } from \"../../request/Request\";\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\n/** @internal */\r\nexport interface ArcGisToken {\r\n // The generated token.\r\n token: string;\r\n\r\n // The expiration time of the token in milliseconds since January 1, 1970 (UTC).\r\n expires: number;\r\n\r\n // This property will show as true if the token must always pass over ssl.\r\n ssl: boolean;\r\n}\r\n\r\n// client application's base URL, a user-specified IP address, or the IP address that is making the request.\r\n/** @internal */\r\nexport enum ArcGisTokenClientType {\r\n ip,\r\n referer,\r\n requestIp,\r\n}\r\n\r\n/** @internal */\r\nexport interface ArcGisGenerateTokenOptions {\r\n\r\n // The client type that will be granted access to the token.\r\n // Users will be able to specify whether the token will be generated for a client application's base URL,\r\n // a user-specified IP address, or the IP address that is making the request.\r\n client: ArcGisTokenClientType;\r\n\r\n // The IP address that will be using the created token for access.\r\n // On the Generate Token page, the IP address is specified in the IP Address field. This is required when client has been set as ip.\r\n // Example ip=11.11.111.111\r\n ip?: string;\r\n\r\n // The base URL of the client application that will use the token.\r\n // On the Generate Token page, the referrer URL is specified in the Webapp URL field.\r\n // Defaults to location.origin if undefined and client = referer.\r\n // This is required when client has been set as referer.\r\n // Example : referer=https://myserver/mywebapp\r\n referer?: string;\r\n\r\n // The token expiration time in minutes. The default is 60 minutes (one hour).\r\n // The maximum expiration period is 15 days. The maximum value of the expiration time is controlled by the server.\r\n // Requests for tokens larger than this time will be rejected.\r\n // Applications are responsible for renewing expired tokens;\r\n // expired tokens will be rejected by the server on subsequent requests that use the token.\r\n expiration?: number; // in minutes, defaults to 60 minutes\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisTokenGenerator {\r\n private static readonly restApiPath = \"/rest/\";\r\n private static readonly restApiInfoPath = \"info?f=pjson\";\r\n\r\n // Cache info url to avoid fetching/parsing twice for the same base url.\r\n private static _tokenServiceUrlCache = new Map<string, string>();\r\n\r\n public static async fetchTokenServiceUrl(esriRestServiceUrl: string): Promise<string | undefined> {\r\n const lowerUrl = esriRestServiceUrl.toLowerCase();\r\n const restApiIdx = lowerUrl.indexOf(ArcGisTokenGenerator.restApiPath);\r\n if (restApiIdx === -1)\r\n return undefined;\r\n const infoUrl = lowerUrl.substr(0, restApiIdx + ArcGisTokenGenerator.restApiPath.length) + ArcGisTokenGenerator.restApiInfoPath;\r\n\r\n let tokenServicesUrl: string | undefined;\r\n try {\r\n const response = await request(infoUrl, { method: \"GET\", responseType: \"json\" });\r\n tokenServicesUrl = ArcGisTokenGenerator.getTokenServiceFromInfoJson(response?.body);\r\n } catch (_error) {\r\n }\r\n return tokenServicesUrl;\r\n }\r\n\r\n public static getTokenServiceFromInfoJson(json: any): string | undefined {\r\n return json.authInfo?.isTokenBasedSecurity ? json?.authInfo?.tokenServicesUrl : undefined;\r\n }\r\n\r\n public async getTokenServiceUrl(baseUrl: string): Promise<string | undefined> {\r\n const cached = ArcGisTokenGenerator._tokenServiceUrlCache.get(baseUrl);\r\n if (cached !== undefined)\r\n return cached;\r\n\r\n const tokenServiceUrl = await ArcGisTokenGenerator.fetchTokenServiceUrl(baseUrl);\r\n if (tokenServiceUrl !== undefined)\r\n ArcGisTokenGenerator._tokenServiceUrlCache.set(baseUrl, tokenServiceUrl);\r\n\r\n return tokenServiceUrl;\r\n }\r\n\r\n // base url: ArcGis REST service base URL (format must be \"https://<host>/<instance>/rest/\")\r\n public async generate(esriRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<any> {\r\n const tokenServiceUrl = await this.getTokenServiceUrl(esriRestServiceUrl);\r\n if (!tokenServiceUrl)\r\n return undefined;\r\n\r\n let token: undefined;\r\n try {\r\n const encodedUsername = encodeURIComponent(userName);\r\n const encodedPassword = encodeURIComponent(password);\r\n\r\n // Compose the expiration param\r\n let expirationStr = \"\";\r\n if (options.expiration) {\r\n expirationStr = `&expiration=${options.expiration}`;\r\n }\r\n\r\n // Compose the client param\r\n let clientStr = \"\";\r\n if (options.client === ArcGisTokenClientType.referer) {\r\n let refererStr = \"\";\r\n if (options.referer === undefined) {\r\n refererStr = encodeURIComponent(location.origin); // default to application origin\r\n } else {\r\n refererStr = encodeURIComponent(options.referer);\r\n }\r\n\r\n clientStr = `&client=referer&referer=${refererStr}`;\r\n } else if (options.client === ArcGisTokenClientType.ip) {\r\n if (options.ip === undefined)\r\n return token;\r\n clientStr = `&client=ip&ip=${options.ip}`;\r\n } else if (options.client === ArcGisTokenClientType.requestIp) {\r\n clientStr = `&client=requestip&ip=`;\r\n }\r\n\r\n const httpRequestOptions: RequestOptions = {\r\n method: \"POST\",\r\n body: `username=${encodedUsername}&password=${encodedPassword}${clientStr}${expirationStr}&f=pjson`,\r\n headers: { \"content-type\": \"application/x-www-form-urlencoded\" },\r\n responseType: \"json\",\r\n };\r\n\r\n const response = await request(tokenServiceUrl, httpRequestOptions);\r\n\r\n // Check a token was really generated (an error could be part of the body)\r\n token = response?.body;\r\n\r\n } catch (_error) {\r\n }\r\n return token;\r\n }\r\n\r\n // Encode following 'application/x-www-form-urlencoded' standard (https://www.w3.org/TR/html401/interact/forms.html#h-17.13.3.3)\r\n // Also mentioned here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\r\n public static formEncode(str: string): string {\r\n return ArcGisTokenGenerator.rfc1738Encode(str).replace(/%20/g, \"+\");\r\n }\r\n\r\n // Encode following RFC1738 standard (https://www.ietf.org/rfc/rfc1738.txt)\r\n // Code from https://locutus.io/php/url/rawurlencode/\r\n public static rfc1738Encode(str: string): string {\r\n return encodeURIComponent(str)\r\n .replace(/!/g, \"%21\")\r\n .replace(/'/g, \"%27\")\r\n .replace(/\\(/g, \"%28\")\r\n .replace(/\\)/g, \"%29\")\r\n .replace(/\\*/g, \"%2A\");\r\n }\r\n}\r\n"]}
@@ -1,13 +0,0 @@
1
- /** @packageDocumentation
2
- * @module Tiles
3
- */
4
- import { ArcGisGenerateTokenOptions } from "../internal";
5
- /** @internal */
6
- export declare class ArcGisTokenManager {
7
- private static readonly tokenExpiryThreshold;
8
- private static _cache;
9
- private static _generator;
10
- static getToken(esriRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<any>;
11
- static invalidateToken(esriRestServiceUrl: string, userName: string): boolean;
12
- }
13
- //# sourceMappingURL=ArcGisTokenManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArcGisTokenManager.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisTokenManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAqC,MAAM,aAAa,CAAC;AAE5F,gBAAgB;AAChB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IACtD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAkC;IACvD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAmC;WAExC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC;WAuBjI,eAAe,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;CAIrF"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- /** @packageDocumentation
7
- * @module Tiles
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ArcGisTokenManager = void 0;
11
- const internal_1 = require("../internal");
12
- /** @internal */
13
- class ArcGisTokenManager {
14
- static async getToken(esriRestServiceUrl, userName, password, options) {
15
- if (!ArcGisTokenManager._generator)
16
- ArcGisTokenManager._generator = new internal_1.ArcGisTokenGenerator();
17
- const tokenCacheKey = `${encodeURIComponent(userName)}@${esriRestServiceUrl}`;
18
- // First check in the session cache
19
- const cachedToken = ArcGisTokenManager._cache.get(tokenCacheKey);
20
- // Check if token is in cached and is valid within the threshold, if not, generate a new token immediately.
21
- if (cachedToken !== undefined && (cachedToken.expires - (+new Date()) > ArcGisTokenManager.tokenExpiryThreshold)) {
22
- return cachedToken;
23
- }
24
- // Nothing in cache, generate a new token
25
- const newToken = await ArcGisTokenManager._generator.generate(esriRestServiceUrl, userName, password, options);
26
- if (newToken.token) {
27
- ArcGisTokenManager._cache.set(tokenCacheKey, newToken);
28
- }
29
- return newToken;
30
- }
31
- static invalidateToken(esriRestServiceUrl, userName) {
32
- const tokenCacheKey = `${userName}@${esriRestServiceUrl}`;
33
- return ArcGisTokenManager._cache.delete(tokenCacheKey);
34
- }
35
- }
36
- exports.ArcGisTokenManager = ArcGisTokenManager;
37
- ArcGisTokenManager.tokenExpiryThreshold = 300000; // 5 minutes in milliseconds
38
- ArcGisTokenManager._cache = new Map();
39
- //# sourceMappingURL=ArcGisTokenManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArcGisTokenManager.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisTokenManager.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0CAA4F;AAE5F,gBAAgB;AAChB,MAAa,kBAAkB;IAKtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAA0B,EAAE,QAAgB,EAAE,QAAgB,EAAE,OAAmC;QAC9H,IAAI,CAAC,kBAAkB,CAAC,UAAU;YAChC,kBAAkB,CAAC,UAAU,GAAG,IAAI,+BAAoB,EAAE,CAAC;QAE7D,MAAM,aAAa,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,EAAE,CAAC;QAE9E,mCAAmC;QACnC,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEjE,2GAA2G;QAC3G,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,EAAE;YAChH,OAAO,WAAW,CAAC;SACpB;QAED,yCAAyC;QACzC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/G,IAAI,QAAQ,CAAC,KAAK,EAAE;YAClB,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,QAAuB,CAAC,CAAC;SACvE;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,kBAA0B,EAAE,QAAgB;QACxE,MAAM,aAAa,GAAG,GAAG,QAAQ,IAAI,kBAAkB,EAAE,CAAC;QAC1D,OAAO,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC;;AA/BH,gDAgCC;AA/ByB,uCAAoB,GAAG,MAAM,CAAC,CAAE,4BAA4B;AACrE,yBAAM,GAAG,IAAI,GAAG,EAAuB,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 { ArcGisGenerateTokenOptions, ArcGisToken, ArcGisTokenGenerator } from \"../internal\";\r\n\r\n/** @internal */\r\nexport class ArcGisTokenManager {\r\n private static readonly tokenExpiryThreshold = 300000; // 5 minutes in milliseconds\r\n private static _cache = new Map<string, ArcGisToken>();\r\n private static _generator: ArcGisTokenGenerator | undefined;\r\n\r\n public static async getToken(esriRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<any> {\r\n if (!ArcGisTokenManager._generator)\r\n ArcGisTokenManager._generator = new ArcGisTokenGenerator();\r\n\r\n const tokenCacheKey = `${encodeURIComponent(userName)}@${esriRestServiceUrl}`;\r\n\r\n // First check in the session cache\r\n const cachedToken = ArcGisTokenManager._cache.get(tokenCacheKey);\r\n\r\n // Check if token is in cached and is valid within the threshold, if not, generate a new token immediately.\r\n if (cachedToken !== undefined && (cachedToken.expires - (+new Date()) > ArcGisTokenManager.tokenExpiryThreshold)) {\r\n return cachedToken;\r\n }\r\n\r\n // Nothing in cache, generate a new token\r\n const newToken = await ArcGisTokenManager._generator.generate(esriRestServiceUrl, userName, password, options);\r\n if (newToken.token) {\r\n ArcGisTokenManager._cache.set(tokenCacheKey, newToken as ArcGisToken);\r\n }\r\n\r\n return newToken;\r\n }\r\n\r\n public static invalidateToken(esriRestServiceUrl: string, userName: string): boolean {\r\n const tokenCacheKey = `${userName}@${esriRestServiceUrl}`;\r\n return ArcGisTokenManager._cache.delete(tokenCacheKey);\r\n }\r\n}\r\n"]}
@@ -1,35 +0,0 @@
1
- /** @packageDocumentation
2
- * @module Tiles
3
- */
4
- /** @internal */
5
- export interface ArcGisToken {
6
- token: string;
7
- expires: number;
8
- ssl: boolean;
9
- }
10
- /** @internal */
11
- export declare enum ArcGisTokenClientType {
12
- ip = 0,
13
- referer = 1,
14
- requestIp = 2
15
- }
16
- /** @internal */
17
- export interface ArcGisGenerateTokenOptions {
18
- client: ArcGisTokenClientType;
19
- ip?: string;
20
- referer?: string;
21
- expiration?: number;
22
- }
23
- /** @internal */
24
- export declare class ArcGisTokenGenerator {
25
- private static readonly restApiPath;
26
- private static readonly restApiInfoPath;
27
- private static _tokenServiceUrlCache;
28
- static fetchTokenServiceUrl(esriRestServiceUrl: string): Promise<string | undefined>;
29
- static getTokenServiceFromInfoJson(json: any): string | undefined;
30
- getTokenServiceUrl(baseUrl: string): Promise<string | undefined>;
31
- generate(esriRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<any>;
32
- static formEncode(str: string): string;
33
- static rfc1738Encode(str: string): string;
34
- }
35
- //# sourceMappingURL=ArcGisTokenGenerator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArcGisTokenGenerator.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisTokenGenerator.ts"],"names":[],"mappings":"AAMA;;GAEG;AAEH,gBAAgB;AAChB,MAAM,WAAW,WAAW;IAE1B,KAAK,EAAE,MAAM,CAAC;IAGd,OAAO,EAAE,MAAM,CAAC;IAGhB,GAAG,EAAE,OAAO,CAAC;CACd;AAGD,gBAAgB;AAChB,oBAAY,qBAAqB;IAC/B,EAAE,IAAA;IACF,OAAO,IAAA;IACP,SAAS,IAAA;CACV;AAED,gBAAgB;AAChB,MAAM,WAAW,0BAA0B;IAKzC,MAAM,EAAE,qBAAqB,CAAC;IAK9B,EAAE,CAAC,EAAE,MAAM,CAAC;IAOZ,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,gBAAgB;AAChB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAY;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAGzD,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA6B;WAE7C,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;WAgBnF,2BAA2B,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS;IAI3D,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAahE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC;WAsD1H,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;WAM/B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAQjD"}
@@ -1,112 +0,0 @@
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
- import { request } from "../../request/Request";
6
- // client application's base URL, a user-specified IP address, or the IP address that is making the request.
7
- /** @internal */
8
- export var ArcGisTokenClientType;
9
- (function (ArcGisTokenClientType) {
10
- ArcGisTokenClientType[ArcGisTokenClientType["ip"] = 0] = "ip";
11
- ArcGisTokenClientType[ArcGisTokenClientType["referer"] = 1] = "referer";
12
- ArcGisTokenClientType[ArcGisTokenClientType["requestIp"] = 2] = "requestIp";
13
- })(ArcGisTokenClientType || (ArcGisTokenClientType = {}));
14
- /** @internal */
15
- export class ArcGisTokenGenerator {
16
- static async fetchTokenServiceUrl(esriRestServiceUrl) {
17
- const lowerUrl = esriRestServiceUrl.toLowerCase();
18
- const restApiIdx = lowerUrl.indexOf(ArcGisTokenGenerator.restApiPath);
19
- if (restApiIdx === -1)
20
- return undefined;
21
- const infoUrl = lowerUrl.substr(0, restApiIdx + ArcGisTokenGenerator.restApiPath.length) + ArcGisTokenGenerator.restApiInfoPath;
22
- let tokenServicesUrl;
23
- try {
24
- const response = await request(infoUrl, { method: "GET", responseType: "json" });
25
- tokenServicesUrl = ArcGisTokenGenerator.getTokenServiceFromInfoJson(response === null || response === void 0 ? void 0 : response.body);
26
- }
27
- catch (_error) {
28
- }
29
- return tokenServicesUrl;
30
- }
31
- static getTokenServiceFromInfoJson(json) {
32
- var _a, _b;
33
- return ((_a = json.authInfo) === null || _a === void 0 ? void 0 : _a.isTokenBasedSecurity) ? (_b = json === null || json === void 0 ? void 0 : json.authInfo) === null || _b === void 0 ? void 0 : _b.tokenServicesUrl : undefined;
34
- }
35
- async getTokenServiceUrl(baseUrl) {
36
- const cached = ArcGisTokenGenerator._tokenServiceUrlCache.get(baseUrl);
37
- if (cached !== undefined)
38
- return cached;
39
- const tokenServiceUrl = await ArcGisTokenGenerator.fetchTokenServiceUrl(baseUrl);
40
- if (tokenServiceUrl !== undefined)
41
- ArcGisTokenGenerator._tokenServiceUrlCache.set(baseUrl, tokenServiceUrl);
42
- return tokenServiceUrl;
43
- }
44
- // base url: ArcGis REST service base URL (format must be "https://<host>/<instance>/rest/")
45
- async generate(esriRestServiceUrl, userName, password, options) {
46
- const tokenServiceUrl = await this.getTokenServiceUrl(esriRestServiceUrl);
47
- if (!tokenServiceUrl)
48
- return undefined;
49
- let token;
50
- try {
51
- const encodedUsername = encodeURIComponent(userName);
52
- const encodedPassword = encodeURIComponent(password);
53
- // Compose the expiration param
54
- let expirationStr = "";
55
- if (options.expiration) {
56
- expirationStr = `&expiration=${options.expiration}`;
57
- }
58
- // Compose the client param
59
- let clientStr = "";
60
- if (options.client === ArcGisTokenClientType.referer) {
61
- let refererStr = "";
62
- if (options.referer === undefined) {
63
- refererStr = encodeURIComponent(location.origin); // default to application origin
64
- }
65
- else {
66
- refererStr = encodeURIComponent(options.referer);
67
- }
68
- clientStr = `&client=referer&referer=${refererStr}`;
69
- }
70
- else if (options.client === ArcGisTokenClientType.ip) {
71
- if (options.ip === undefined)
72
- return token;
73
- clientStr = `&client=ip&ip=${options.ip}`;
74
- }
75
- else if (options.client === ArcGisTokenClientType.requestIp) {
76
- clientStr = `&client=requestip&ip=`;
77
- }
78
- const httpRequestOptions = {
79
- method: "POST",
80
- body: `username=${encodedUsername}&password=${encodedPassword}${clientStr}${expirationStr}&f=pjson`,
81
- headers: { "content-type": "application/x-www-form-urlencoded" },
82
- responseType: "json",
83
- };
84
- const response = await request(tokenServiceUrl, httpRequestOptions);
85
- // Check a token was really generated (an error could be part of the body)
86
- token = response === null || response === void 0 ? void 0 : response.body;
87
- }
88
- catch (_error) {
89
- }
90
- return token;
91
- }
92
- // Encode following 'application/x-www-form-urlencoded' standard (https://www.w3.org/TR/html401/interact/forms.html#h-17.13.3.3)
93
- // Also mentioned here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
94
- static formEncode(str) {
95
- return ArcGisTokenGenerator.rfc1738Encode(str).replace(/%20/g, "+");
96
- }
97
- // Encode following RFC1738 standard (https://www.ietf.org/rfc/rfc1738.txt)
98
- // Code from https://locutus.io/php/url/rawurlencode/
99
- static rfc1738Encode(str) {
100
- return encodeURIComponent(str)
101
- .replace(/!/g, "%21")
102
- .replace(/'/g, "%27")
103
- .replace(/\(/g, "%28")
104
- .replace(/\)/g, "%29")
105
- .replace(/\*/g, "%2A");
106
- }
107
- }
108
- ArcGisTokenGenerator.restApiPath = "/rest/";
109
- ArcGisTokenGenerator.restApiInfoPath = "info?f=pjson";
110
- // Cache info url to avoid fetching/parsing twice for the same base url.
111
- ArcGisTokenGenerator._tokenServiceUrlCache = new Map();
112
- //# sourceMappingURL=ArcGisTokenGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArcGisTokenGenerator.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisTokenGenerator.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 { request, RequestOptions } from \"../../request/Request\";\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\n/** @internal */\r\nexport interface ArcGisToken {\r\n // The generated token.\r\n token: string;\r\n\r\n // The expiration time of the token in milliseconds since January 1, 1970 (UTC).\r\n expires: number;\r\n\r\n // This property will show as true if the token must always pass over ssl.\r\n ssl: boolean;\r\n}\r\n\r\n// client application's base URL, a user-specified IP address, or the IP address that is making the request.\r\n/** @internal */\r\nexport enum ArcGisTokenClientType {\r\n ip,\r\n referer,\r\n requestIp,\r\n}\r\n\r\n/** @internal */\r\nexport interface ArcGisGenerateTokenOptions {\r\n\r\n // The client type that will be granted access to the token.\r\n // Users will be able to specify whether the token will be generated for a client application's base URL,\r\n // a user-specified IP address, or the IP address that is making the request.\r\n client: ArcGisTokenClientType;\r\n\r\n // The IP address that will be using the created token for access.\r\n // On the Generate Token page, the IP address is specified in the IP Address field. This is required when client has been set as ip.\r\n // Example ip=11.11.111.111\r\n ip?: string;\r\n\r\n // The base URL of the client application that will use the token.\r\n // On the Generate Token page, the referrer URL is specified in the Webapp URL field.\r\n // Defaults to location.origin if undefined and client = referer.\r\n // This is required when client has been set as referer.\r\n // Example : referer=https://myserver/mywebapp\r\n referer?: string;\r\n\r\n // The token expiration time in minutes. The default is 60 minutes (one hour).\r\n // The maximum expiration period is 15 days. The maximum value of the expiration time is controlled by the server.\r\n // Requests for tokens larger than this time will be rejected.\r\n // Applications are responsible for renewing expired tokens;\r\n // expired tokens will be rejected by the server on subsequent requests that use the token.\r\n expiration?: number; // in minutes, defaults to 60 minutes\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisTokenGenerator {\r\n private static readonly restApiPath = \"/rest/\";\r\n private static readonly restApiInfoPath = \"info?f=pjson\";\r\n\r\n // Cache info url to avoid fetching/parsing twice for the same base url.\r\n private static _tokenServiceUrlCache = new Map<string, string>();\r\n\r\n public static async fetchTokenServiceUrl(esriRestServiceUrl: string): Promise<string | undefined> {\r\n const lowerUrl = esriRestServiceUrl.toLowerCase();\r\n const restApiIdx = lowerUrl.indexOf(ArcGisTokenGenerator.restApiPath);\r\n if (restApiIdx === -1)\r\n return undefined;\r\n const infoUrl = lowerUrl.substr(0, restApiIdx + ArcGisTokenGenerator.restApiPath.length) + ArcGisTokenGenerator.restApiInfoPath;\r\n\r\n let tokenServicesUrl: string | undefined;\r\n try {\r\n const response = await request(infoUrl, { method: \"GET\", responseType: \"json\" });\r\n tokenServicesUrl = ArcGisTokenGenerator.getTokenServiceFromInfoJson(response?.body);\r\n } catch (_error) {\r\n }\r\n return tokenServicesUrl;\r\n }\r\n\r\n public static getTokenServiceFromInfoJson(json: any): string | undefined {\r\n return json.authInfo?.isTokenBasedSecurity ? json?.authInfo?.tokenServicesUrl : undefined;\r\n }\r\n\r\n public async getTokenServiceUrl(baseUrl: string): Promise<string | undefined> {\r\n const cached = ArcGisTokenGenerator._tokenServiceUrlCache.get(baseUrl);\r\n if (cached !== undefined)\r\n return cached;\r\n\r\n const tokenServiceUrl = await ArcGisTokenGenerator.fetchTokenServiceUrl(baseUrl);\r\n if (tokenServiceUrl !== undefined)\r\n ArcGisTokenGenerator._tokenServiceUrlCache.set(baseUrl, tokenServiceUrl);\r\n\r\n return tokenServiceUrl;\r\n }\r\n\r\n // base url: ArcGis REST service base URL (format must be \"https://<host>/<instance>/rest/\")\r\n public async generate(esriRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<any> {\r\n const tokenServiceUrl = await this.getTokenServiceUrl(esriRestServiceUrl);\r\n if (!tokenServiceUrl)\r\n return undefined;\r\n\r\n let token: undefined;\r\n try {\r\n const encodedUsername = encodeURIComponent(userName);\r\n const encodedPassword = encodeURIComponent(password);\r\n\r\n // Compose the expiration param\r\n let expirationStr = \"\";\r\n if (options.expiration) {\r\n expirationStr = `&expiration=${options.expiration}`;\r\n }\r\n\r\n // Compose the client param\r\n let clientStr = \"\";\r\n if (options.client === ArcGisTokenClientType.referer) {\r\n let refererStr = \"\";\r\n if (options.referer === undefined) {\r\n refererStr = encodeURIComponent(location.origin); // default to application origin\r\n } else {\r\n refererStr = encodeURIComponent(options.referer);\r\n }\r\n\r\n clientStr = `&client=referer&referer=${refererStr}`;\r\n } else if (options.client === ArcGisTokenClientType.ip) {\r\n if (options.ip === undefined)\r\n return token;\r\n clientStr = `&client=ip&ip=${options.ip}`;\r\n } else if (options.client === ArcGisTokenClientType.requestIp) {\r\n clientStr = `&client=requestip&ip=`;\r\n }\r\n\r\n const httpRequestOptions: RequestOptions = {\r\n method: \"POST\",\r\n body: `username=${encodedUsername}&password=${encodedPassword}${clientStr}${expirationStr}&f=pjson`,\r\n headers: { \"content-type\": \"application/x-www-form-urlencoded\" },\r\n responseType: \"json\",\r\n };\r\n\r\n const response = await request(tokenServiceUrl, httpRequestOptions);\r\n\r\n // Check a token was really generated (an error could be part of the body)\r\n token = response?.body;\r\n\r\n } catch (_error) {\r\n }\r\n return token;\r\n }\r\n\r\n // Encode following 'application/x-www-form-urlencoded' standard (https://www.w3.org/TR/html401/interact/forms.html#h-17.13.3.3)\r\n // Also mentioned here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\r\n public static formEncode(str: string): string {\r\n return ArcGisTokenGenerator.rfc1738Encode(str).replace(/%20/g, \"+\");\r\n }\r\n\r\n // Encode following RFC1738 standard (https://www.ietf.org/rfc/rfc1738.txt)\r\n // Code from https://locutus.io/php/url/rawurlencode/\r\n public static rfc1738Encode(str: string): string {\r\n return encodeURIComponent(str)\r\n .replace(/!/g, \"%21\")\r\n .replace(/'/g, \"%27\")\r\n .replace(/\\(/g, \"%28\")\r\n .replace(/\\)/g, \"%29\")\r\n .replace(/\\*/g, \"%2A\");\r\n }\r\n}\r\n"]}
@@ -1,13 +0,0 @@
1
- /** @packageDocumentation
2
- * @module Tiles
3
- */
4
- import { ArcGisGenerateTokenOptions } from "../internal";
5
- /** @internal */
6
- export declare class ArcGisTokenManager {
7
- private static readonly tokenExpiryThreshold;
8
- private static _cache;
9
- private static _generator;
10
- static getToken(esriRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<any>;
11
- static invalidateToken(esriRestServiceUrl: string, userName: string): boolean;
12
- }
13
- //# sourceMappingURL=ArcGisTokenManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArcGisTokenManager.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisTokenManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAqC,MAAM,aAAa,CAAC;AAE5F,gBAAgB;AAChB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IACtD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAkC;IACvD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAmC;WAExC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC;WAuBjI,eAAe,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;CAIrF"}
@@ -1,35 +0,0 @@
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 { ArcGisTokenGenerator } from "../internal";
9
- /** @internal */
10
- export class ArcGisTokenManager {
11
- static async getToken(esriRestServiceUrl, userName, password, options) {
12
- if (!ArcGisTokenManager._generator)
13
- ArcGisTokenManager._generator = new ArcGisTokenGenerator();
14
- const tokenCacheKey = `${encodeURIComponent(userName)}@${esriRestServiceUrl}`;
15
- // First check in the session cache
16
- const cachedToken = ArcGisTokenManager._cache.get(tokenCacheKey);
17
- // Check if token is in cached and is valid within the threshold, if not, generate a new token immediately.
18
- if (cachedToken !== undefined && (cachedToken.expires - (+new Date()) > ArcGisTokenManager.tokenExpiryThreshold)) {
19
- return cachedToken;
20
- }
21
- // Nothing in cache, generate a new token
22
- const newToken = await ArcGisTokenManager._generator.generate(esriRestServiceUrl, userName, password, options);
23
- if (newToken.token) {
24
- ArcGisTokenManager._cache.set(tokenCacheKey, newToken);
25
- }
26
- return newToken;
27
- }
28
- static invalidateToken(esriRestServiceUrl, userName) {
29
- const tokenCacheKey = `${userName}@${esriRestServiceUrl}`;
30
- return ArcGisTokenManager._cache.delete(tokenCacheKey);
31
- }
32
- }
33
- ArcGisTokenManager.tokenExpiryThreshold = 300000; // 5 minutes in milliseconds
34
- ArcGisTokenManager._cache = new Map();
35
- //# sourceMappingURL=ArcGisTokenManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArcGisTokenManager.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisTokenManager.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAA2C,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE5F,gBAAgB;AAChB,MAAM,OAAO,kBAAkB;IAKtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAA0B,EAAE,QAAgB,EAAE,QAAgB,EAAE,OAAmC;QAC9H,IAAI,CAAC,kBAAkB,CAAC,UAAU;YAChC,kBAAkB,CAAC,UAAU,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAE7D,MAAM,aAAa,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,EAAE,CAAC;QAE9E,mCAAmC;QACnC,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEjE,2GAA2G;QAC3G,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,EAAE;YAChH,OAAO,WAAW,CAAC;SACpB;QAED,yCAAyC;QACzC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/G,IAAI,QAAQ,CAAC,KAAK,EAAE;YAClB,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,QAAuB,CAAC,CAAC;SACvE;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,kBAA0B,EAAE,QAAgB;QACxE,MAAM,aAAa,GAAG,GAAG,QAAQ,IAAI,kBAAkB,EAAE,CAAC;QAC1D,OAAO,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC;;AA9BuB,uCAAoB,GAAG,MAAM,CAAC,CAAE,4BAA4B;AACrE,yBAAM,GAAG,IAAI,GAAG,EAAuB,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 { ArcGisGenerateTokenOptions, ArcGisToken, ArcGisTokenGenerator } from \"../internal\";\r\n\r\n/** @internal */\r\nexport class ArcGisTokenManager {\r\n private static readonly tokenExpiryThreshold = 300000; // 5 minutes in milliseconds\r\n private static _cache = new Map<string, ArcGisToken>();\r\n private static _generator: ArcGisTokenGenerator | undefined;\r\n\r\n public static async getToken(esriRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<any> {\r\n if (!ArcGisTokenManager._generator)\r\n ArcGisTokenManager._generator = new ArcGisTokenGenerator();\r\n\r\n const tokenCacheKey = `${encodeURIComponent(userName)}@${esriRestServiceUrl}`;\r\n\r\n // First check in the session cache\r\n const cachedToken = ArcGisTokenManager._cache.get(tokenCacheKey);\r\n\r\n // Check if token is in cached and is valid within the threshold, if not, generate a new token immediately.\r\n if (cachedToken !== undefined && (cachedToken.expires - (+new Date()) > ArcGisTokenManager.tokenExpiryThreshold)) {\r\n return cachedToken;\r\n }\r\n\r\n // Nothing in cache, generate a new token\r\n const newToken = await ArcGisTokenManager._generator.generate(esriRestServiceUrl, userName, password, options);\r\n if (newToken.token) {\r\n ArcGisTokenManager._cache.set(tokenCacheKey, newToken as ArcGisToken);\r\n }\r\n\r\n return newToken;\r\n }\r\n\r\n public static invalidateToken(esriRestServiceUrl: string, userName: string): boolean {\r\n const tokenCacheKey = `${userName}@${esriRestServiceUrl}`;\r\n return ArcGisTokenManager._cache.delete(tokenCacheKey);\r\n }\r\n}\r\n"]}