@itwin/map-layers-auth 3.4.0-dev.8 → 3.5.0-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -1
- package/README.md +10 -10
- package/lib/cjs/ArcGis/ArcGisAccessClient.d.ts +66 -66
- package/lib/cjs/ArcGis/ArcGisAccessClient.js +294 -294
- package/lib/cjs/ArcGis/ArcGisAccessClient.js.map +1 -1
- package/lib/cjs/ArcGis/ArcGisOAuth2Endpoint.d.ts +22 -22
- package/lib/cjs/ArcGis/ArcGisOAuth2Endpoint.js +46 -46
- package/lib/cjs/ArcGis/ArcGisOAuth2Endpoint.js.map +1 -1
- package/lib/cjs/ArcGis/ArcGisTokenGenerator.d.ts +41 -41
- package/lib/cjs/ArcGis/ArcGisTokenGenerator.js +110 -110
- package/lib/cjs/ArcGis/ArcGisTokenGenerator.js.map +1 -1
- package/lib/cjs/ArcGis/ArcGisTokenManager.d.ts +20 -20
- package/lib/cjs/ArcGis/ArcGisTokenManager.js +109 -109
- package/lib/cjs/ArcGis/ArcGisTokenManager.js.map +1 -1
- package/lib/cjs/ArcGis/ArcGisUrl.d.ts +6 -6
- package/lib/cjs/ArcGis/ArcGisUrl.js +49 -49
- package/lib/cjs/ArcGis/ArcGisUrl.js.map +1 -1
- package/lib/cjs/map-layers-auth.d.ts +5 -5
- package/lib/cjs/map-layers-auth.js +21 -21
- package/lib/cjs/map-layers-auth.js.map +1 -1
- package/lib/esm/ArcGis/ArcGisAccessClient.d.ts +66 -66
- package/lib/esm/ArcGis/ArcGisAccessClient.js +290 -290
- package/lib/esm/ArcGis/ArcGisAccessClient.js.map +1 -1
- package/lib/esm/ArcGis/ArcGisOAuth2Endpoint.d.ts +22 -22
- package/lib/esm/ArcGis/ArcGisOAuth2Endpoint.js +42 -42
- package/lib/esm/ArcGis/ArcGisOAuth2Endpoint.js.map +1 -1
- package/lib/esm/ArcGis/ArcGisTokenGenerator.d.ts +41 -41
- package/lib/esm/ArcGis/ArcGisTokenGenerator.js +106 -106
- package/lib/esm/ArcGis/ArcGisTokenGenerator.js.map +1 -1
- package/lib/esm/ArcGis/ArcGisTokenManager.d.ts +20 -20
- package/lib/esm/ArcGis/ArcGisTokenManager.js +105 -105
- package/lib/esm/ArcGis/ArcGisTokenManager.js.map +1 -1
- package/lib/esm/ArcGis/ArcGisUrl.d.ts +6 -6
- package/lib/esm/ArcGis/ArcGisUrl.js +45 -45
- package/lib/esm/ArcGis/ArcGisUrl.js.map +1 -1
- package/lib/esm/map-layers-auth.d.ts +5 -5
- package/lib/esm/map-layers-auth.js +9 -9
- package/lib/esm/map-layers-auth.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
/** @packageDocumentation
|
|
2
|
-
* @module Tiles
|
|
3
|
-
*/
|
|
4
|
-
import { MapLayerAccessToken } from "@itwin/core-frontend";
|
|
5
|
-
import { ArcGisGenerateTokenOptions, ArcGisOAuth2Token, ArcGisToken } from "./ArcGisTokenGenerator";
|
|
6
|
-
/** @internal */
|
|
7
|
-
export declare class ArcGisTokenManager {
|
|
8
|
-
private static readonly tokenExpiryThreshold;
|
|
9
|
-
private static _cache;
|
|
10
|
-
private static _oauth2Cache;
|
|
11
|
-
private static _generator;
|
|
12
|
-
private static readonly _browserStorageKey;
|
|
13
|
-
static getToken(arcGisRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<ArcGisToken | undefined>;
|
|
14
|
-
static invalidateToken(token: MapLayerAccessToken): boolean;
|
|
15
|
-
static getOAuth2Token(key: string): ArcGisOAuth2Token | undefined;
|
|
16
|
-
static invalidateOAuth2Token(token: MapLayerAccessToken): boolean;
|
|
17
|
-
static setOAuth2Token(key: string, token: ArcGisOAuth2Token): void;
|
|
18
|
-
static loadFromBrowserStorage(): void;
|
|
19
|
-
static saveToBrowserStorage(): void;
|
|
20
|
-
}
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module Tiles
|
|
3
|
+
*/
|
|
4
|
+
import { MapLayerAccessToken } from "@itwin/core-frontend";
|
|
5
|
+
import { ArcGisGenerateTokenOptions, ArcGisOAuth2Token, ArcGisToken } from "./ArcGisTokenGenerator";
|
|
6
|
+
/** @internal */
|
|
7
|
+
export declare class ArcGisTokenManager {
|
|
8
|
+
private static readonly tokenExpiryThreshold;
|
|
9
|
+
private static _cache;
|
|
10
|
+
private static _oauth2Cache;
|
|
11
|
+
private static _generator;
|
|
12
|
+
private static readonly _browserStorageKey;
|
|
13
|
+
static getToken(arcGisRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<ArcGisToken | undefined>;
|
|
14
|
+
static invalidateToken(token: MapLayerAccessToken): boolean;
|
|
15
|
+
static getOAuth2Token(key: string): ArcGisOAuth2Token | undefined;
|
|
16
|
+
static invalidateOAuth2Token(token: MapLayerAccessToken): boolean;
|
|
17
|
+
static setOAuth2Token(key: string, token: ArcGisOAuth2Token): void;
|
|
18
|
+
static loadFromBrowserStorage(): void;
|
|
19
|
+
static saveToBrowserStorage(): void;
|
|
20
|
+
}
|
|
21
21
|
//# sourceMappingURL=ArcGisTokenManager.d.ts.map
|
|
@@ -1,106 +1,106 @@
|
|
|
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 "./ArcGisTokenGenerator";
|
|
9
|
-
/** @internal */
|
|
10
|
-
export class ArcGisTokenManager {
|
|
11
|
-
static async getToken(arcGisRestServiceUrl, userName, password, options) {
|
|
12
|
-
if (!ArcGisTokenManager._generator)
|
|
13
|
-
ArcGisTokenManager._generator = new ArcGisTokenGenerator();
|
|
14
|
-
const tokenCacheKey = `${encodeURIComponent(userName)}@${arcGisRestServiceUrl}`;
|
|
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(arcGisRestServiceUrl, userName, password, options);
|
|
23
|
-
if (newToken.token) {
|
|
24
|
-
const token = newToken;
|
|
25
|
-
ArcGisTokenManager._cache.set(tokenCacheKey, token);
|
|
26
|
-
return token;
|
|
27
|
-
}
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
static invalidateToken(token) {
|
|
31
|
-
for (const [key, value] of ArcGisTokenManager._cache) {
|
|
32
|
-
if (value.token === token.token)
|
|
33
|
-
return ArcGisTokenManager._cache.delete(key);
|
|
34
|
-
}
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
static getOAuth2Token(key) {
|
|
38
|
-
if (ArcGisTokenManager._oauth2Cache === undefined) {
|
|
39
|
-
ArcGisTokenManager._oauth2Cache = new Map();
|
|
40
|
-
ArcGisTokenManager.loadFromBrowserStorage();
|
|
41
|
-
}
|
|
42
|
-
const cachedToken = ArcGisTokenManager._oauth2Cache.get(key);
|
|
43
|
-
// If cached token has expired (or about to expire), invalidate don't return it.
|
|
44
|
-
if (cachedToken !== undefined && (cachedToken.expiresAt - (+new Date()) < ArcGisTokenManager.tokenExpiryThreshold)) {
|
|
45
|
-
ArcGisTokenManager._oauth2Cache.delete(key);
|
|
46
|
-
return undefined;
|
|
47
|
-
}
|
|
48
|
-
return cachedToken;
|
|
49
|
-
}
|
|
50
|
-
static invalidateOAuth2Token(token) {
|
|
51
|
-
if (ArcGisTokenManager._oauth2Cache) {
|
|
52
|
-
for (const [key, value] of ArcGisTokenManager._oauth2Cache) {
|
|
53
|
-
if (value.token === token.token)
|
|
54
|
-
return ArcGisTokenManager._cache.delete(key);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
static setOAuth2Token(key, token) {
|
|
60
|
-
if (ArcGisTokenManager._oauth2Cache === undefined) {
|
|
61
|
-
ArcGisTokenManager._oauth2Cache = new Map();
|
|
62
|
-
}
|
|
63
|
-
ArcGisTokenManager._oauth2Cache.set(key, token);
|
|
64
|
-
ArcGisTokenManager.saveToBrowserStorage();
|
|
65
|
-
}
|
|
66
|
-
static loadFromBrowserStorage() {
|
|
67
|
-
var _a, _b;
|
|
68
|
-
if (ArcGisTokenManager._oauth2Cache === undefined) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
const loadEntries = (json) => {
|
|
72
|
-
if (json && ArcGisTokenManager._oauth2Cache !== undefined) {
|
|
73
|
-
const tokens = JSON.parse(json);
|
|
74
|
-
if (tokens) {
|
|
75
|
-
for (const [key, value] of Object.entries(tokens)) {
|
|
76
|
-
ArcGisTokenManager._oauth2Cache.set(key, value);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
loadEntries((_a = window.sessionStorage.getItem(this._browserStorageKey)) !== null && _a !== void 0 ? _a : undefined);
|
|
82
|
-
loadEntries((_b = window.localStorage.getItem(this._browserStorageKey)) !== null && _b !== void 0 ? _b : undefined);
|
|
83
|
-
}
|
|
84
|
-
static saveToBrowserStorage() {
|
|
85
|
-
if (ArcGisTokenManager._oauth2Cache === undefined) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
const sessionTokens = {};
|
|
89
|
-
const storageTokens = {};
|
|
90
|
-
ArcGisTokenManager._oauth2Cache.forEach((value, key) => {
|
|
91
|
-
// ignore the persist flag for now, and only save to session storage
|
|
92
|
-
// if (value.persist === true) {
|
|
93
|
-
// storageTokens[key] = value;
|
|
94
|
-
// } else {
|
|
95
|
-
// sessionTokens[key] = value;
|
|
96
|
-
// }
|
|
97
|
-
sessionTokens[key] = value;
|
|
98
|
-
});
|
|
99
|
-
window.sessionStorage.setItem(this._browserStorageKey, JSON.stringify(sessionTokens));
|
|
100
|
-
window.localStorage.setItem(this._browserStorageKey, JSON.stringify(storageTokens));
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
ArcGisTokenManager.tokenExpiryThreshold = 300000; // 5 minutes in milliseconds
|
|
104
|
-
ArcGisTokenManager._cache = new Map();
|
|
105
|
-
ArcGisTokenManager._browserStorageKey = "arcGisOAuth";
|
|
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 "./ArcGisTokenGenerator";
|
|
9
|
+
/** @internal */
|
|
10
|
+
export class ArcGisTokenManager {
|
|
11
|
+
static async getToken(arcGisRestServiceUrl, userName, password, options) {
|
|
12
|
+
if (!ArcGisTokenManager._generator)
|
|
13
|
+
ArcGisTokenManager._generator = new ArcGisTokenGenerator();
|
|
14
|
+
const tokenCacheKey = `${encodeURIComponent(userName)}@${arcGisRestServiceUrl}`;
|
|
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(arcGisRestServiceUrl, userName, password, options);
|
|
23
|
+
if (newToken.token) {
|
|
24
|
+
const token = newToken;
|
|
25
|
+
ArcGisTokenManager._cache.set(tokenCacheKey, token);
|
|
26
|
+
return token;
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
static invalidateToken(token) {
|
|
31
|
+
for (const [key, value] of ArcGisTokenManager._cache) {
|
|
32
|
+
if (value.token === token.token)
|
|
33
|
+
return ArcGisTokenManager._cache.delete(key);
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
static getOAuth2Token(key) {
|
|
38
|
+
if (ArcGisTokenManager._oauth2Cache === undefined) {
|
|
39
|
+
ArcGisTokenManager._oauth2Cache = new Map();
|
|
40
|
+
ArcGisTokenManager.loadFromBrowserStorage();
|
|
41
|
+
}
|
|
42
|
+
const cachedToken = ArcGisTokenManager._oauth2Cache.get(key);
|
|
43
|
+
// If cached token has expired (or about to expire), invalidate don't return it.
|
|
44
|
+
if (cachedToken !== undefined && (cachedToken.expiresAt - (+new Date()) < ArcGisTokenManager.tokenExpiryThreshold)) {
|
|
45
|
+
ArcGisTokenManager._oauth2Cache.delete(key);
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
return cachedToken;
|
|
49
|
+
}
|
|
50
|
+
static invalidateOAuth2Token(token) {
|
|
51
|
+
if (ArcGisTokenManager._oauth2Cache) {
|
|
52
|
+
for (const [key, value] of ArcGisTokenManager._oauth2Cache) {
|
|
53
|
+
if (value.token === token.token)
|
|
54
|
+
return ArcGisTokenManager._cache.delete(key);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
static setOAuth2Token(key, token) {
|
|
60
|
+
if (ArcGisTokenManager._oauth2Cache === undefined) {
|
|
61
|
+
ArcGisTokenManager._oauth2Cache = new Map();
|
|
62
|
+
}
|
|
63
|
+
ArcGisTokenManager._oauth2Cache.set(key, token);
|
|
64
|
+
ArcGisTokenManager.saveToBrowserStorage();
|
|
65
|
+
}
|
|
66
|
+
static loadFromBrowserStorage() {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
if (ArcGisTokenManager._oauth2Cache === undefined) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const loadEntries = (json) => {
|
|
72
|
+
if (json && ArcGisTokenManager._oauth2Cache !== undefined) {
|
|
73
|
+
const tokens = JSON.parse(json);
|
|
74
|
+
if (tokens) {
|
|
75
|
+
for (const [key, value] of Object.entries(tokens)) {
|
|
76
|
+
ArcGisTokenManager._oauth2Cache.set(key, value);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
loadEntries((_a = window.sessionStorage.getItem(this._browserStorageKey)) !== null && _a !== void 0 ? _a : undefined);
|
|
82
|
+
loadEntries((_b = window.localStorage.getItem(this._browserStorageKey)) !== null && _b !== void 0 ? _b : undefined);
|
|
83
|
+
}
|
|
84
|
+
static saveToBrowserStorage() {
|
|
85
|
+
if (ArcGisTokenManager._oauth2Cache === undefined) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const sessionTokens = {};
|
|
89
|
+
const storageTokens = {};
|
|
90
|
+
ArcGisTokenManager._oauth2Cache.forEach((value, key) => {
|
|
91
|
+
// ignore the persist flag for now, and only save to session storage
|
|
92
|
+
// if (value.persist === true) {
|
|
93
|
+
// storageTokens[key] = value;
|
|
94
|
+
// } else {
|
|
95
|
+
// sessionTokens[key] = value;
|
|
96
|
+
// }
|
|
97
|
+
sessionTokens[key] = value;
|
|
98
|
+
});
|
|
99
|
+
window.sessionStorage.setItem(this._browserStorageKey, JSON.stringify(sessionTokens));
|
|
100
|
+
window.localStorage.setItem(this._browserStorageKey, JSON.stringify(storageTokens));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
ArcGisTokenManager.tokenExpiryThreshold = 300000; // 5 minutes in milliseconds
|
|
104
|
+
ArcGisTokenManager._cache = new Map();
|
|
105
|
+
ArcGisTokenManager._browserStorageKey = "arcGisOAuth";
|
|
106
106
|
//# sourceMappingURL=ArcGisTokenManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArcGisTokenManager.js","sourceRoot":"","sources":["../../../src/ArcGis/ArcGisTokenManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"ArcGisTokenManager.js","sourceRoot":"","sources":["../../../src/ArcGis/ArcGisTokenManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { MapLayerAccessToken } from \"@itwin/core-frontend\";\nimport { ArcGisGenerateTokenOptions, ArcGisOAuth2Token, ArcGisToken, ArcGisTokenGenerator } from \"./ArcGisTokenGenerator\";\n\n/** @internal */\ninterface ArcGisTokenProps {\n [hostname: string]: ArcGisOAuth2Token;\n}\n\n/** @internal */\nexport class ArcGisTokenManager {\n private static readonly tokenExpiryThreshold = 300000; // 5 minutes in milliseconds\n private static _cache = new Map<string, ArcGisToken>();\n private static _oauth2Cache: Map<string, ArcGisOAuth2Token> | undefined;\n private static _generator: ArcGisTokenGenerator | undefined;\n private static readonly _browserStorageKey = \"arcGisOAuth\";\n\n public static async getToken(arcGisRestServiceUrl: string, userName: string, password: string, options: ArcGisGenerateTokenOptions): Promise<ArcGisToken | undefined> {\n if (!ArcGisTokenManager._generator)\n ArcGisTokenManager._generator = new ArcGisTokenGenerator();\n\n const tokenCacheKey = `${encodeURIComponent(userName)}@${arcGisRestServiceUrl}`;\n\n // First check in the session cache\n const cachedToken = ArcGisTokenManager._cache.get(tokenCacheKey);\n\n // Check if token is in cached and is valid within the threshold, if not, generate a new token immediately.\n if (cachedToken !== undefined && (cachedToken.expires - (+new Date()) > ArcGisTokenManager.tokenExpiryThreshold)) {\n return cachedToken;\n }\n\n // Nothing in cache, generate a new token\n const newToken = await ArcGisTokenManager._generator.generate(arcGisRestServiceUrl, userName, password, options);\n if (newToken.token) {\n const token = newToken as ArcGisToken;\n ArcGisTokenManager._cache.set(tokenCacheKey, token);\n return token;\n }\n\n return undefined;\n }\n\n public static invalidateToken(token: MapLayerAccessToken): boolean {\n\n for (const [key, value] of ArcGisTokenManager._cache) {\n if (value.token === token.token)\n return ArcGisTokenManager._cache.delete(key);\n }\n\n return false;\n }\n\n public static getOAuth2Token(key: string): ArcGisOAuth2Token | undefined {\n if (ArcGisTokenManager._oauth2Cache === undefined) {\n ArcGisTokenManager._oauth2Cache = new Map<string, ArcGisOAuth2Token>();\n ArcGisTokenManager.loadFromBrowserStorage();\n }\n\n const cachedToken = ArcGisTokenManager._oauth2Cache.get(key);\n\n // If cached token has expired (or about to expire), invalidate don't return it.\n if (cachedToken !== undefined && (cachedToken.expiresAt - (+new Date()) < ArcGisTokenManager.tokenExpiryThreshold)) {\n ArcGisTokenManager._oauth2Cache.delete(key);\n return undefined;\n }\n\n return cachedToken;\n }\n\n public static invalidateOAuth2Token(token: MapLayerAccessToken) {\n\n if (ArcGisTokenManager._oauth2Cache) {\n for (const [key, value] of ArcGisTokenManager._oauth2Cache) {\n if (value.token === token.token)\n return ArcGisTokenManager._cache.delete(key);\n }\n }\n\n return false;\n }\n\n public static setOAuth2Token(key: string, token: ArcGisOAuth2Token) {\n\n if (ArcGisTokenManager._oauth2Cache === undefined) {\n ArcGisTokenManager._oauth2Cache = new Map<string, ArcGisOAuth2Token>();\n\n }\n ArcGisTokenManager._oauth2Cache.set(key, token);\n\n ArcGisTokenManager.saveToBrowserStorage();\n }\n\n public static loadFromBrowserStorage() {\n if (ArcGisTokenManager._oauth2Cache === undefined) {\n return;\n }\n\n const loadEntries = (json: string | undefined) => {\n if (json && ArcGisTokenManager._oauth2Cache !== undefined) {\n const tokens: ArcGisTokenProps | undefined = JSON.parse(json);\n if (tokens) {\n for (const [key, value] of Object.entries(tokens)) {\n ArcGisTokenManager._oauth2Cache.set(key, value);\n }\n }\n }\n };\n\n loadEntries(window.sessionStorage.getItem(this._browserStorageKey) ?? undefined);\n loadEntries(window.localStorage.getItem(this._browserStorageKey) ?? undefined);\n }\n\n public static saveToBrowserStorage() {\n\n if (ArcGisTokenManager._oauth2Cache === undefined) {\n return;\n }\n const sessionTokens: ArcGisTokenProps = {};\n const storageTokens: ArcGisTokenProps = {};\n\n ArcGisTokenManager._oauth2Cache.forEach((value: ArcGisOAuth2Token, key: string) => {\n // ignore the persist flag for now, and only save to session storage\n // if (value.persist === true) {\n // storageTokens[key] = value;\n // } else {\n // sessionTokens[key] = value;\n // }\n sessionTokens[key] = value;\n });\n window.sessionStorage.setItem(this._browserStorageKey, JSON.stringify(sessionTokens));\n window.localStorage.setItem(this._browserStorageKey, JSON.stringify(storageTokens));\n }\n\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/** @internal */
|
|
2
|
-
export declare class ArcGisUrl {
|
|
3
|
-
static extractRestBaseUrl(url: URL): URL | undefined;
|
|
4
|
-
static getRestUrlFromGenerateTokenUrl(url: URL): Promise<URL | undefined>;
|
|
5
|
-
private static fetchJson;
|
|
6
|
-
}
|
|
1
|
+
/** @internal */
|
|
2
|
+
export declare class ArcGisUrl {
|
|
3
|
+
static extractRestBaseUrl(url: URL): URL | undefined;
|
|
4
|
+
static getRestUrlFromGenerateTokenUrl(url: URL): Promise<URL | undefined>;
|
|
5
|
+
private static fetchJson;
|
|
6
|
+
}
|
|
7
7
|
//# sourceMappingURL=ArcGisUrl.d.ts.map
|
|
@@ -1,46 +1,46 @@
|
|
|
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
|
-
/** @internal */
|
|
6
|
-
export class ArcGisUrl {
|
|
7
|
-
// Extract the sub-url up to '/rest/'
|
|
8
|
-
static extractRestBaseUrl(url) {
|
|
9
|
-
const urlStr = url.toString();
|
|
10
|
-
const searchStr = "/rest/";
|
|
11
|
-
const restPos = urlStr.indexOf(searchStr);
|
|
12
|
-
return (restPos === -1 ? undefined : new URL(urlStr.substring(0, restPos + searchStr.length)));
|
|
13
|
-
}
|
|
14
|
-
static async getRestUrlFromGenerateTokenUrl(url) {
|
|
15
|
-
var _a;
|
|
16
|
-
const restUrl = ArcGisUrl.extractRestBaseUrl(url);
|
|
17
|
-
if (restUrl === undefined) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
// First attempt: derive the Oauth2 token URL from the 'tokenServicesUrl', exposed by the 'info request'
|
|
21
|
-
const infoUrl = new URL(`${restUrl.toString()}info`);
|
|
22
|
-
infoUrl.searchParams.append("f", "json");
|
|
23
|
-
let json;
|
|
24
|
-
try {
|
|
25
|
-
json = await ArcGisUrl.fetchJson(infoUrl);
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
}
|
|
29
|
-
const tokenServicesUrl = (_a = json === null || json === void 0 ? void 0 : json.authInfo) === null || _a === void 0 ? void 0 : _a.tokenServicesUrl;
|
|
30
|
-
if (tokenServicesUrl === undefined) {
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
return ArcGisUrl.extractRestBaseUrl(new URL(tokenServicesUrl));
|
|
34
|
-
}
|
|
35
|
-
static async fetchJson(url) {
|
|
36
|
-
let json;
|
|
37
|
-
try {
|
|
38
|
-
const response = await fetch(url.toString(), { method: "GET" });
|
|
39
|
-
json = await response.json();
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
}
|
|
43
|
-
return json;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
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
|
+
/** @internal */
|
|
6
|
+
export class ArcGisUrl {
|
|
7
|
+
// Extract the sub-url up to '/rest/'
|
|
8
|
+
static extractRestBaseUrl(url) {
|
|
9
|
+
const urlStr = url.toString();
|
|
10
|
+
const searchStr = "/rest/";
|
|
11
|
+
const restPos = urlStr.indexOf(searchStr);
|
|
12
|
+
return (restPos === -1 ? undefined : new URL(urlStr.substring(0, restPos + searchStr.length)));
|
|
13
|
+
}
|
|
14
|
+
static async getRestUrlFromGenerateTokenUrl(url) {
|
|
15
|
+
var _a;
|
|
16
|
+
const restUrl = ArcGisUrl.extractRestBaseUrl(url);
|
|
17
|
+
if (restUrl === undefined) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
// First attempt: derive the Oauth2 token URL from the 'tokenServicesUrl', exposed by the 'info request'
|
|
21
|
+
const infoUrl = new URL(`${restUrl.toString()}info`);
|
|
22
|
+
infoUrl.searchParams.append("f", "json");
|
|
23
|
+
let json;
|
|
24
|
+
try {
|
|
25
|
+
json = await ArcGisUrl.fetchJson(infoUrl);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
}
|
|
29
|
+
const tokenServicesUrl = (_a = json === null || json === void 0 ? void 0 : json.authInfo) === null || _a === void 0 ? void 0 : _a.tokenServicesUrl;
|
|
30
|
+
if (tokenServicesUrl === undefined) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return ArcGisUrl.extractRestBaseUrl(new URL(tokenServicesUrl));
|
|
34
|
+
}
|
|
35
|
+
static async fetchJson(url) {
|
|
36
|
+
let json;
|
|
37
|
+
try {
|
|
38
|
+
const response = await fetch(url.toString(), { method: "GET" });
|
|
39
|
+
json = await response.json();
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
}
|
|
43
|
+
return json;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
46
|
//# sourceMappingURL=ArcGisUrl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArcGisUrl.js","sourceRoot":"","sources":["../../../src/ArcGis/ArcGisUrl.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,gBAAgB;AAChB,MAAM,OAAO,SAAS;IAEpB,qCAAqC;IAC9B,MAAM,CAAC,kBAAkB,CAAC,GAAQ;QACvC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEjG,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,GAAQ;;QACzD,MAAM,OAAO,GAAG,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,SAAS,CAAC;SAClB;QAED,wGAAwG;QACxG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC;QACT,IAAI;YACF,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAC3C;QAAC,MAAM;SAEP;QAED,MAAM,gBAAgB,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,0CAAE,gBAAgB,CAAC;QAC1D,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAClC,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,SAAS,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAQ;QACrC,IAAI,IAAI,CAAC;QACT,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC9B;QAAC,MAAM;SACP;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"ArcGisUrl.js","sourceRoot":"","sources":["../../../src/ArcGis/ArcGisUrl.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,gBAAgB;AAChB,MAAM,OAAO,SAAS;IAEpB,qCAAqC;IAC9B,MAAM,CAAC,kBAAkB,CAAC,GAAQ;QACvC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEjG,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,GAAQ;;QACzD,MAAM,OAAO,GAAG,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,SAAS,CAAC;SAClB;QAED,wGAAwG;QACxG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC;QACT,IAAI;YACF,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAC3C;QAAC,MAAM;SAEP;QAED,MAAM,gBAAgB,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,0CAAE,gBAAgB,CAAC;QAC1D,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAClC,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,SAAS,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAQ;QACrC,IAAI,IAAI,CAAC;QACT,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC9B;QAAC,MAAM;SACP;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @internal */\nexport class ArcGisUrl {\n\n // Extract the sub-url up to '/rest/'\n public static extractRestBaseUrl(url: URL): URL | undefined {\n const urlStr = url.toString();\n const searchStr = \"/rest/\";\n const restPos = urlStr.indexOf(searchStr);\n return (restPos === -1 ? undefined : new URL(urlStr.substring(0, restPos + searchStr.length)));\n\n }\n\n public static async getRestUrlFromGenerateTokenUrl(url: URL): Promise<URL | undefined> {\n const restUrl = ArcGisUrl.extractRestBaseUrl(url);\n if (restUrl === undefined) {\n return undefined;\n }\n\n // First attempt: derive the Oauth2 token URL from the 'tokenServicesUrl', exposed by the 'info request'\n const infoUrl = new URL(`${restUrl.toString()}info`);\n infoUrl.searchParams.append(\"f\", \"json\");\n\n let json;\n try {\n json = await ArcGisUrl.fetchJson(infoUrl);\n } catch {\n\n }\n\n const tokenServicesUrl = json?.authInfo?.tokenServicesUrl;\n if (tokenServicesUrl === undefined) {\n return undefined;\n }\n return ArcGisUrl.extractRestBaseUrl(new URL(tokenServicesUrl));\n }\n\n private static async fetchJson(url: URL): Promise<any> {\n let json;\n try {\n const response = await fetch(url.toString(), { method: \"GET\" });\n json = await response.json();\n } catch {\n }\n return json;\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from "./ArcGis/ArcGisOAuth2Endpoint";
|
|
2
|
-
export * from "./ArcGis/ArcGisUrl";
|
|
3
|
-
export * from "./ArcGis/ArcGisAccessClient";
|
|
4
|
-
export * from "./ArcGis/ArcGisTokenGenerator";
|
|
5
|
-
export * from "./ArcGis/ArcGisTokenManager";
|
|
1
|
+
export * from "./ArcGis/ArcGisOAuth2Endpoint";
|
|
2
|
+
export * from "./ArcGis/ArcGisUrl";
|
|
3
|
+
export * from "./ArcGis/ArcGisAccessClient";
|
|
4
|
+
export * from "./ArcGis/ArcGisTokenGenerator";
|
|
5
|
+
export * from "./ArcGis/ArcGisTokenManager";
|
|
6
6
|
//# sourceMappingURL=map-layers-auth.d.ts.map
|
|
@@ -1,10 +1,10 @@
|
|
|
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
|
-
export * from "./ArcGis/ArcGisOAuth2Endpoint";
|
|
6
|
-
export * from "./ArcGis/ArcGisUrl";
|
|
7
|
-
export * from "./ArcGis/ArcGisAccessClient";
|
|
8
|
-
export * from "./ArcGis/ArcGisTokenGenerator";
|
|
9
|
-
export * from "./ArcGis/ArcGisTokenManager";
|
|
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
|
+
export * from "./ArcGis/ArcGisOAuth2Endpoint";
|
|
6
|
+
export * from "./ArcGis/ArcGisUrl";
|
|
7
|
+
export * from "./ArcGis/ArcGisAccessClient";
|
|
8
|
+
export * from "./ArcGis/ArcGisTokenGenerator";
|
|
9
|
+
export * from "./ArcGis/ArcGisTokenManager";
|
|
10
10
|
//# sourceMappingURL=map-layers-auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-layers-auth.js","sourceRoot":"","sources":["../../src/map-layers-auth.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"map-layers-auth.js","sourceRoot":"","sources":["../../src/map-layers-auth.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nexport * from \"./ArcGis/ArcGisOAuth2Endpoint\";\nexport * from \"./ArcGis/ArcGisUrl\";\nexport * from \"./ArcGis/ArcGisAccessClient\";\nexport * from \"./ArcGis/ArcGisTokenGenerator\";\nexport * from \"./ArcGis/ArcGisTokenManager\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/map-layers-auth",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0-dev.4",
|
|
4
4
|
"description": "Extension that adds a Map Layers Widget",
|
|
5
5
|
"main": "lib/cjs/map-layers-auth.js",
|
|
6
6
|
"module": "lib/esm/map-layers-auth.js",
|
|
@@ -21,11 +21,11 @@
|
|
|
21
21
|
"url": "http://www.bentley.com"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@itwin/build-tools": "3.
|
|
25
|
-
"@itwin/core-bentley": "3.
|
|
26
|
-
"@itwin/core-common": "3.
|
|
27
|
-
"@itwin/core-frontend": "3.
|
|
28
|
-
"@itwin/eslint-plugin": "3.
|
|
24
|
+
"@itwin/build-tools": "3.5.0-dev.4",
|
|
25
|
+
"@itwin/core-bentley": "3.5.0-dev.4",
|
|
26
|
+
"@itwin/core-common": "3.5.0-dev.4",
|
|
27
|
+
"@itwin/core-frontend": "3.5.0-dev.4",
|
|
28
|
+
"@itwin/eslint-plugin": "3.5.0-dev.4",
|
|
29
29
|
"@types/chai": "4.3.1",
|
|
30
30
|
"@types/mocha": "^8.2.2",
|
|
31
31
|
"@types/sinon": "^9.0.0",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"typescript": "~4.4.0"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
|
-
"@itwin/core-bentley": "3.
|
|
46
|
+
"@itwin/core-bentley": "3.5.0-dev.4"
|
|
47
47
|
},
|
|
48
48
|
"nyc": {
|
|
49
49
|
"extends": "./node_modules/@itwin/build-tools/.nycrc",
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"test": "mocha \"./lib/cjs/test/**/*.test.js\"",
|
|
89
89
|
"rebuild": "npm run -s clean && npm run -s build"
|
|
90
90
|
},
|
|
91
|
-
"readme": "# @itwin/map-layers-auth\r\n\r\nCopyright © Bentley Systems, Incorporated. All rights reserved. See LICENSE.md for license terms and full copyright notice.\r\n\r\n## Description\r\n\r\nThe __@itwin/map-layers-auth__ package contains classes for enabling various authentification methods, such as OAuth2.\r\n\r\n## ArcGIS OAuth2
|
|
91
|
+
"readme": "# @itwin/map-layers-auth\r\n\r\nCopyright © Bentley Systems, Incorporated. All rights reserved. See LICENSE.md for license terms and full copyright notice.\r\n\r\n## Description\r\n\r\nThe __@itwin/map-layers-auth__ package contains classes for enabling various authentification methods, such as OAuth2.\r\n\r\n## ArcGIS OAuth2 support\r\n\r\nTo enable the ArcGIS OAuth2 support, an 'ArcGisAccessClient' object needs to be created and registered in the MapLayerFormatRegistry from __@itwin/imodeljs-frontend__ for the 'ArcGIS' format.\r\n\r\nAlso the following configuration will be required:\r\n\r\n1. __Callback URL__\\\r\nHosting application needs to implement its own callback page, and sets its corresponding public URL on the `ArcGisAccessClient` object.\\\r\nFollowing code demonstrates how a callback page can be implemented as a simple React hook:\r\n\r\n```\r\nimport * as React from \"react\";\r\nexport function ArcGisOauthRedirect() {\r\n const completeLogin = () => {\r\n if (window.opener) {\r\n const opener = (window.opener);\r\n if (opener?.arcGisOAuth2Callback) {\r\n opener.arcGisOAuth2Callback(window.location);\r\n }\r\n }\r\n };\r\n React.useEffect(() => {\r\n completeLogin();\r\n }, []);\r\n}\r\n```\r\n\r\n1. __Client IDs__\\\r\nThe hosting application must be registered in either the ArcGIS Online server (cloud offering) or in ArcGIS enterprise server (on-premise). The registered application must then provide its associated clientID and redirectUri to the `ArcGisAccessClient` object. The ui-test-app application provides a complete sample configuration.\r\nThe map-layers widget has also been updated to support OAuth2: if needed, a popup window will be displayed to trigger the external OAuth process with the remote ArcGIS server. When the process completes, the focus returns to the map-layers widget and layer is ready to be added/displayed.\\\r\n\\\r\nMore details on how to configure the ArcGis Server can be found in the [ESRI documentation](https://developers.arcgis.com/documentation/mapping-apis-and-services/security/tutorials/register-your-application/)\\\r\n\\\r\n`ArcGisAccessClient` initialization example:\r\n\r\n```ts\r\n const enterpriseClientIds = [{\r\n serviceBaseUrl: SampleAppIModelApp.testAppConfiguration.arcGisEnterpriseBaseUrl,\r\n clientId: SampleAppIModelApp.testAppConfiguration?.arcGisEnterpriseClientId,\r\n }];\r\n const accessClient = new ArcGisAccessClient();\r\n const initStatus = accessClient.initialize({\r\n redirectUri: \"http://localhost:3000/esri-oauth2-callback\",\r\n clientIds: {\r\n arcgisOnlineClientId: SampleAppIModelApp?.testAppConfiguration?.arcGisOnlineClientId,\r\n enterpriseClientIds,\r\n }});\r\n IModelApp.mapLayerFormatRegistry.setAccessClient(\"ArcGIS\", accessClient);\r\n```\r\n"
|
|
92
92
|
}
|