@esri/hub-common 14.30.1 → 14.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/esm/ArcGISContext.js +19 -0
  2. package/dist/esm/ArcGISContext.js.map +1 -1
  3. package/dist/esm/ArcGISContextManager.js +127 -30
  4. package/dist/esm/ArcGISContextManager.js.map +1 -1
  5. package/dist/esm/sites/feed-configuration.js +85 -0
  6. package/dist/esm/sites/feed-configuration.js.map +1 -0
  7. package/dist/esm/sites/index.js +1 -0
  8. package/dist/esm/sites/index.js.map +1 -1
  9. package/dist/esm/utils/getObjectSize.js +13 -0
  10. package/dist/esm/utils/getObjectSize.js.map +1 -0
  11. package/dist/esm/utils/hubUserAppResources.js +84 -0
  12. package/dist/esm/utils/hubUserAppResources.js.map +1 -0
  13. package/dist/esm/utils/index.js +2 -0
  14. package/dist/esm/utils/index.js.map +1 -1
  15. package/dist/esm/utils/internal/clearUserHubSettings.js +15 -0
  16. package/dist/esm/utils/internal/clearUserHubSettings.js.map +1 -0
  17. package/dist/esm/utils/internal/clearUserSiteSettings.js +15 -0
  18. package/dist/esm/utils/internal/clearUserSiteSettings.js.map +1 -0
  19. package/dist/esm/utils/internal/siteSettingsMigrations.js +20 -0
  20. package/dist/esm/utils/internal/siteSettingsMigrations.js.map +1 -0
  21. package/dist/esm/utils/internal/userAppResources.js +101 -0
  22. package/dist/esm/utils/internal/userAppResources.js.map +1 -0
  23. package/dist/esm/utils/poll.js +19 -6
  24. package/dist/esm/utils/poll.js.map +1 -1
  25. package/dist/node/ArcGISContext.js +19 -0
  26. package/dist/node/ArcGISContext.js.map +1 -1
  27. package/dist/node/ArcGISContextManager.js +127 -30
  28. package/dist/node/ArcGISContextManager.js.map +1 -1
  29. package/dist/node/sites/feed-configuration.js +90 -0
  30. package/dist/node/sites/feed-configuration.js.map +1 -0
  31. package/dist/node/sites/index.js +1 -0
  32. package/dist/node/sites/index.js.map +1 -1
  33. package/dist/node/utils/getObjectSize.js +17 -0
  34. package/dist/node/utils/getObjectSize.js.map +1 -0
  35. package/dist/node/utils/hubUserAppResources.js +91 -0
  36. package/dist/node/utils/hubUserAppResources.js.map +1 -0
  37. package/dist/node/utils/index.js +2 -0
  38. package/dist/node/utils/index.js.map +1 -1
  39. package/dist/node/utils/internal/clearUserHubSettings.js +19 -0
  40. package/dist/node/utils/internal/clearUserHubSettings.js.map +1 -0
  41. package/dist/node/utils/internal/clearUserSiteSettings.js +19 -0
  42. package/dist/node/utils/internal/clearUserSiteSettings.js.map +1 -0
  43. package/dist/node/utils/internal/siteSettingsMigrations.js +25 -0
  44. package/dist/node/utils/internal/siteSettingsMigrations.js.map +1 -0
  45. package/dist/node/utils/internal/userAppResources.js +108 -0
  46. package/dist/node/utils/internal/userAppResources.js.map +1 -0
  47. package/dist/node/utils/poll.js +19 -6
  48. package/dist/node/utils/poll.js.map +1 -1
  49. package/dist/types/ArcGISContext.d.ts +27 -0
  50. package/dist/types/ArcGISContextManager.d.ts +21 -0
  51. package/dist/types/sites/feed-configuration.d.ts +20 -0
  52. package/dist/types/sites/index.d.ts +1 -0
  53. package/dist/types/utils/getObjectSize.d.ts +6 -0
  54. package/dist/types/utils/hubUserAppResources.d.ts +45 -0
  55. package/dist/types/utils/index.d.ts +2 -0
  56. package/dist/types/utils/internal/clearUserHubSettings.d.ts +11 -0
  57. package/dist/types/utils/internal/clearUserSiteSettings.d.ts +11 -0
  58. package/dist/types/utils/internal/siteSettingsMigrations.d.ts +13 -0
  59. package/dist/types/utils/internal/userAppResources.d.ts +130 -0
  60. package/dist/types/utils/poll.d.ts +6 -0
  61. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getObjectSize.js","sourceRoot":"","sources":["../../../src/utils/getObjectSize.ts"],"names":[],"mappings":";;;AAKA,4DAA4D;AAC5D,SAAgB,aAAa,CAAC,MAA2B;IACvD,4DAA4D;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC;IAC/B,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;IACnC,OAAO;QACL,KAAK;QACL,SAAS;QACT,SAAS;KACV,CAAC;AACJ,CAAC;AAVD,sCAUC"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUserHubSettings = exports.setUserHubSettings = exports.getUserSiteSettings = exports.setUserSiteSettings = void 0;
4
+ const clearUserSiteSettings_1 = require("./internal/clearUserSiteSettings");
5
+ const clearUserHubSettings_1 = require("./internal/clearUserHubSettings");
6
+ const siteSettingsMigrations_1 = require("./internal/siteSettingsMigrations");
7
+ const userAppResources_1 = require("./internal/userAppResources");
8
+ /**
9
+ * Store User settings in the Site App's cache
10
+ * @param settings
11
+ * @param context
12
+ * @param replace
13
+ * @returns
14
+ */
15
+ async function setUserSiteSettings(settings, context, replace = false) {
16
+ const token = context.tokenFor(clearUserSiteSettings_1.USER_SITE_SETTINGS_APP);
17
+ if (token) {
18
+ // always stamp in the updated and username properties
19
+ settings.updated = new Date().getTime();
20
+ settings.username = context.currentUser.username;
21
+ const resource = {
22
+ key: clearUserSiteSettings_1.USER_SITE_SETTINGS_KEY,
23
+ data: settings,
24
+ access: "userappprivate",
25
+ };
26
+ return userAppResources_1.setUserResource(resource, context.currentUser.username, context.portalUrl, token, replace);
27
+ }
28
+ else {
29
+ throw new Error(`No user-app-resource token available to store Site Settings`);
30
+ }
31
+ }
32
+ exports.setUserSiteSettings = setUserSiteSettings;
33
+ /**
34
+ * Get the current user's settings for the current Site
35
+ * @param context
36
+ * @returns
37
+ */
38
+ async function getUserSiteSettings(context) {
39
+ const token = context.tokenFor(clearUserSiteSettings_1.USER_SITE_SETTINGS_APP);
40
+ if (token) {
41
+ const settings = (await userAppResources_1.getUserResource(context.currentUser.username, clearUserSiteSettings_1.USER_SITE_SETTINGS_KEY, context.portalUrl, token));
42
+ // run though schema upgrades
43
+ return siteSettingsMigrations_1.applySiteSettingsMigrations(settings);
44
+ }
45
+ else {
46
+ return Promise.resolve(null);
47
+ }
48
+ }
49
+ exports.getUserSiteSettings = getUserSiteSettings;
50
+ /**
51
+ * Store the current user's Hub settings
52
+ * @param settings
53
+ * @param context
54
+ * @param replace
55
+ * @returns
56
+ */
57
+ async function setUserHubSettings(settings, context, replace = false) {
58
+ const token = context.tokenFor(clearUserHubSettings_1.USER_HUB_SETTINGS_APP);
59
+ if (token) {
60
+ // always stamp in the updated and username properties
61
+ settings.updated = new Date().getTime();
62
+ settings.username = context.currentUser.username;
63
+ const resource = {
64
+ key: clearUserHubSettings_1.USER_HUB_SETTINGS_KEY,
65
+ data: settings,
66
+ access: "userappprivate",
67
+ };
68
+ return userAppResources_1.setUserResource(resource, context.currentUser.username, context.portalUrl, token, replace);
69
+ }
70
+ else {
71
+ throw new Error(`No user-app-resource token available to store Site Settings`);
72
+ }
73
+ }
74
+ exports.setUserHubSettings = setUserHubSettings;
75
+ /**
76
+ * Get the current user's settings for ArcGIS Hub
77
+ * @param context
78
+ * @returns
79
+ */
80
+ async function getUserHubSettings(context) {
81
+ const token = context.tokenFor(clearUserHubSettings_1.USER_HUB_SETTINGS_APP);
82
+ if (token) {
83
+ const settings = await userAppResources_1.getUserResource(context.currentUser.username, clearUserHubSettings_1.USER_HUB_SETTINGS_KEY, context.portalUrl, token);
84
+ return siteSettingsMigrations_1.applyHubSettingsMigrations(settings);
85
+ }
86
+ else {
87
+ return Promise.resolve(null);
88
+ }
89
+ }
90
+ exports.getUserHubSettings = getUserHubSettings;
91
+ //# sourceMappingURL=hubUserAppResources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubUserAppResources.js","sourceRoot":"","sources":["../../../src/utils/hubUserAppResources.ts"],"names":[],"mappings":";;;AACA,4EAG0C;AAC1C,0EAGyC;AACzC,8EAG2C;AAC3C,kEAIqC;AAoBrC;;;;;;GAMG;AACI,KAAK,UAAU,mBAAmB,CACvC,QAA2B,EAC3B,OAAuB,EACvB,UAAmB,KAAK;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,8CAAsB,CAAC,CAAC;IAEvD,IAAI,KAAK,EAAE;QACT,sDAAsD;QACtD,QAAQ,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACxC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;QAEjD,MAAM,QAAQ,GAAqB;YACjC,GAAG,EAAE,8CAAsB;YAC3B,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,gBAAgB;SACzB,CAAC;QACF,OAAO,kCAAe,CACpB,QAAQ,EACR,OAAO,CAAC,WAAW,CAAC,QAAQ,EAC5B,OAAO,CAAC,SAAS,EACjB,KAAK,EACL,OAAO,CACR,CAAC;KACH;SAAM;QACL,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;KACH;AACH,CAAC;AA7BD,kDA6BC;AAED;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CACvC,OAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,8CAAsB,CAAC,CAAC;IAEvD,IAAI,KAAK,EAAE;QACT,MAAM,QAAQ,GAAG,CAAC,MAAM,kCAAe,CACrC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAC5B,8CAAsB,EACtB,OAAO,CAAC,SAAS,EACjB,KAAK,CACN,CAA+B,CAAC;QACjC,6BAA6B;QAC7B,OAAO,oDAA2B,CAAC,QAAQ,CAAC,CAAC;KAC9C;SAAM;QACL,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9B;AACH,CAAC;AAjBD,kDAiBC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,kBAAkB,CACtC,QAA0B,EAC1B,OAAuB,EACvB,UAAmB,KAAK;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,4CAAqB,CAAC,CAAC;IAEtD,IAAI,KAAK,EAAE;QACT,sDAAsD;QACtD,QAAQ,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACxC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;QACjD,MAAM,QAAQ,GAAqB;YACjC,GAAG,EAAE,4CAAqB;YAC1B,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,gBAAgB;SACzB,CAAC;QACF,OAAO,kCAAe,CACpB,QAAQ,EACR,OAAO,CAAC,WAAW,CAAC,QAAQ,EAC5B,OAAO,CAAC,SAAS,EACjB,KAAK,EACL,OAAO,CACR,CAAC;KACH;SAAM;QACL,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;KACH;AACH,CAAC;AA5BD,gDA4BC;AAED;;;;GAIG;AACI,KAAK,UAAU,kBAAkB,CACtC,OAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,4CAAqB,CAAC,CAAC;IAEtD,IAAI,KAAK,EAAE;QACT,MAAM,QAAQ,GAAG,MAAM,kCAAe,CACpC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAC5B,4CAAqB,EACrB,OAAO,CAAC,SAAS,EACjB,KAAK,CACN,CAAC;QACF,OAAO,mDAA0B,CAAC,QAAQ,CAAC,CAAC;KAC7C;SAAM;QACL,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9B;AACH,CAAC;AAhBD,gDAgBC"}
@@ -26,4 +26,6 @@ tslib_1.__exportStar(require("./titleize"), exports);
26
26
  tslib_1.__exportStar(require("./memoize"), exports);
27
27
  tslib_1.__exportStar(require("./getEnvironmentFromPortalUrl"), exports);
28
28
  tslib_1.__exportStar(require("./poll"), exports);
29
+ tslib_1.__exportStar(require("./hubUserAppResources"), exports);
30
+ tslib_1.__exportStar(require("./getObjectSize"), exports);
29
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B;AAC/B,kDAAwB;AACxB,qDAA2B;AAC3B,iEAAuC;AACvC,sEAA4C;AAC5C,sDAA4B;AAC5B,mEAAyC;AACzC,4DAAkC;AAClC,kEAAwC;AACxC,qDAA2B;AAC3B,oDAA0B;AAC1B,mDAAyB;AACzB,oDAA0B;AAC1B,4DAAkC;AAClC,2DAAiC;AACjC,6DAAmC;AACnC,mDAAyB;AACzB,4DAAkC;AAClC,6DAAmC;AACnC,gEAAsC;AACtC,sDAA4B;AAC5B,qDAA2B;AAC3B,oDAA0B;AAC1B,wEAA8C;AAC9C,iDAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B;AAC/B,kDAAwB;AACxB,qDAA2B;AAC3B,iEAAuC;AACvC,sEAA4C;AAC5C,sDAA4B;AAC5B,mEAAyC;AACzC,4DAAkC;AAClC,kEAAwC;AACxC,qDAA2B;AAC3B,oDAA0B;AAC1B,mDAAyB;AACzB,oDAA0B;AAC1B,4DAAkC;AAClC,2DAAiC;AACjC,6DAAmC;AACnC,mDAAyB;AACzB,4DAAkC;AAClC,6DAAmC;AACnC,gEAAsC;AACtC,sDAA4B;AAC5B,qDAA2B;AAC3B,oDAA0B;AAC1B,wEAA8C;AAC9C,iDAAuB;AACvB,gEAAsC;AACtC,0DAAgC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clearUserHubSettings = exports.USER_HUB_SETTINGS_KEY = exports.USER_HUB_SETTINGS_APP = void 0;
4
+ const userAppResources_1 = require("./userAppResources");
5
+ exports.USER_HUB_SETTINGS_APP = "hubforarcgis";
6
+ exports.USER_HUB_SETTINGS_KEY = "hub-settings.json";
7
+ /**
8
+ * @private
9
+ * Internal use only; Clear User Hub Settings
10
+ * @param context
11
+ * @returns
12
+ */
13
+ function clearUserHubSettings(context) {
14
+ const token = context.tokenFor(exports.USER_HUB_SETTINGS_APP);
15
+ const key = exports.USER_HUB_SETTINGS_KEY;
16
+ return userAppResources_1.removeUserResource(context.currentUser.username, key, context.portalUrl, token);
17
+ }
18
+ exports.clearUserHubSettings = clearUserHubSettings;
19
+ //# sourceMappingURL=clearUserHubSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearUserHubSettings.js","sourceRoot":"","sources":["../../../../src/utils/internal/clearUserHubSettings.ts"],"names":[],"mappings":";;;AAEA,yDAAwD;AAE3C,QAAA,qBAAqB,GAAoB,cAAc,CAAC;AACxD,QAAA,qBAAqB,GAAG,mBAAmB,CAAC;AACzD;;;;;GAKG;AAEH,SAAgB,oBAAoB,CAClC,OAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,6BAAqB,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,6BAAqB,CAAC;IAClC,OAAO,qCAAkB,CACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,EAC5B,GAAG,EACH,OAAO,CAAC,SAAS,EACjB,KAAK,CACN,CAAC;AACJ,CAAC;AAXD,oDAWC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clearUserSiteSettings = exports.USER_SITE_SETTINGS_KEY = exports.USER_SITE_SETTINGS_APP = void 0;
4
+ const userAppResources_1 = require("./userAppResources");
5
+ exports.USER_SITE_SETTINGS_APP = "self";
6
+ exports.USER_SITE_SETTINGS_KEY = "hub-site-settings.json";
7
+ /**
8
+ * @private
9
+ * Internal use only; Clear User Site Settings
10
+ * @param context
11
+ * @returns
12
+ */
13
+ function clearUserSiteSettings(context) {
14
+ const token = context.tokenFor(exports.USER_SITE_SETTINGS_APP);
15
+ const key = exports.USER_SITE_SETTINGS_KEY;
16
+ return userAppResources_1.removeUserResource(context.currentUser.username, key, context.portalUrl, token);
17
+ }
18
+ exports.clearUserSiteSettings = clearUserSiteSettings;
19
+ //# sourceMappingURL=clearUserSiteSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearUserSiteSettings.js","sourceRoot":"","sources":["../../../../src/utils/internal/clearUserSiteSettings.ts"],"names":[],"mappings":";;;AAEA,yDAAwD;AAE3C,QAAA,sBAAsB,GAAoB,MAAM,CAAC;AACjD,QAAA,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D;;;;;GAKG;AACH,SAAgB,qBAAqB,CACnC,OAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,8BAAsB,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,8BAAsB,CAAC;IACnC,OAAO,qCAAkB,CACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,EAC5B,GAAG,EACH,OAAO,CAAC,SAAS,EACjB,KAAK,CACN,CAAC;AACJ,CAAC;AAXD,sDAWC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyHubSettingsMigrations = exports.applySiteSettingsMigrations = void 0;
4
+ const util_1 = require("../../util");
5
+ /**
6
+ * Apply migrations for Site Settings
7
+ * @param settings
8
+ * @returns
9
+ */
10
+ function applySiteSettingsMigrations(settings) {
11
+ // const currentSchema = 1;
12
+ return util_1.cloneObject(settings);
13
+ }
14
+ exports.applySiteSettingsMigrations = applySiteSettingsMigrations;
15
+ /**
16
+ * Apply migrations for Hub Settings
17
+ * @param settings
18
+ * @returns
19
+ */
20
+ function applyHubSettingsMigrations(settings) {
21
+ // const currentSchema = 1;
22
+ return util_1.cloneObject(settings);
23
+ }
24
+ exports.applyHubSettingsMigrations = applyHubSettingsMigrations;
25
+ //# sourceMappingURL=siteSettingsMigrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siteSettingsMigrations.js","sourceRoot":"","sources":["../../../../src/utils/internal/siteSettingsMigrations.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AAGzC;;;;GAIG;AACH,SAAgB,2BAA2B,CACzC,QAA6B;IAE7B,2BAA2B;IAE3B,OAAO,kBAAW,CAAC,QAAQ,CAAsB,CAAC;AACpD,CAAC;AAND,kEAMC;AAED;;;;GAIG;AACH,SAAgB,0BAA0B,CACxC,QAA6B;IAE7B,2BAA2B;IAE3B,OAAO,kBAAW,CAAC,QAAQ,CAAqB,CAAC;AACnD,CAAC;AAND,gEAMC"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ // These Types and Functions can land in rest-js
3
+ // a friendly name for the scope of the resource
4
+ // the API deals with clientIds, which are
5
+ // listed here https://confluencewikidev.esri.com/pages/viewpage.action?pageId=50561461
6
+ // Generally speaking, the UserResourceScope is a downcased version of the
7
+ // clientId. Hub is unique b/c Sites have their own clientId,
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.listUserResources = exports.removeUserResource = exports.getUserResource = exports.setUserResource = void 0;
10
+ const arcgis_rest_request_1 = require("@esri/arcgis-rest-request");
11
+ const fail_safe_1 = require("../fail-safe");
12
+ const getObjectSize_1 = require("../getObjectSize");
13
+ /**
14
+ * @private
15
+ * Set a User-App-Resource
16
+ * By default this will fetch and merge with an existing resource.
17
+ * Passing `true` as the last parameter,
18
+ * @param resource
19
+ * @param username
20
+ * @param portalUrl
21
+ * @param token
22
+ * @param replace
23
+ * @returns
24
+ */
25
+ async function setUserResource(resource, username, portalUrl, token, replace = false) {
26
+ // Ensure we are below 5MB max size
27
+ if (getObjectSize_1.getObjectSize(resource.data).megabytes > 4.95) {
28
+ throw new Error(`User Resource is too large to store. Please ensure it is less than 5MB in size`);
29
+ }
30
+ let payload = resource.data;
31
+ if (!replace) {
32
+ const fsGetResource = fail_safe_1.failSafe(getUserResource, {});
33
+ const currentResource = await fsGetResource(username, resource.key, portalUrl, token);
34
+ // extend current object witn updated object
35
+ payload = Object.assign(Object.assign({}, currentResource), resource.data);
36
+ }
37
+ const ro = {
38
+ portal: portalUrl,
39
+ httpMethod: "POST",
40
+ params: {
41
+ text: JSON.stringify(payload),
42
+ access: resource.access,
43
+ key: resource.key,
44
+ token,
45
+ },
46
+ };
47
+ // TODO Experiment w/ how we can make this call w/o creating a UserSession with the token
48
+ return arcgis_rest_request_1.request(`${portalUrl}/sharing/rest/community/users/${username}/addResource`, ro);
49
+ }
50
+ exports.setUserResource = setUserResource;
51
+ /**
52
+ * @private
53
+ * Gets a user app resource
54
+ * If the resource does not exist, this will throw. This can be wrapped in `failSafe`
55
+ * configured to return an empty object.
56
+ * @param username
57
+ * @param key
58
+ * @param portalUrl
59
+ * @param token
60
+ * @returns
61
+ */
62
+ function getUserResource(username, key, portalUrl, token) {
63
+ const ro = {
64
+ portal: portalUrl,
65
+ };
66
+ return arcgis_rest_request_1.request(`${portalUrl}/sharing/rest/community/users/${username}/resources/${key}?token=${token}`, ro);
67
+ }
68
+ exports.getUserResource = getUserResource;
69
+ /**
70
+ * @private
71
+ * Remove a resource
72
+ * Used primarily in tests, but can be useful if you need to clean up
73
+ * settings that are no longer used
74
+ * @param username
75
+ * @param key
76
+ * @param portalUrl
77
+ * @param token
78
+ * @returns
79
+ */
80
+ function removeUserResource(username, key, portalUrl, token) {
81
+ const ro = {
82
+ portal: portalUrl,
83
+ httpMethod: "POST",
84
+ params: {
85
+ key,
86
+ token,
87
+ },
88
+ };
89
+ return arcgis_rest_request_1.request(`${portalUrl}/sharing/rest/community/users/${username}/removeResource`, ro);
90
+ }
91
+ exports.removeUserResource = removeUserResource;
92
+ /**
93
+ * @private
94
+ * List user resources associated with the user/token.
95
+ * Defaults to listing only resources associated with the app the token is associated with
96
+ * @param username
97
+ * @param portalUrl
98
+ * @param token
99
+ * @returns
100
+ */
101
+ function listUserResources(username, portalUrl, token, returnAllApps = false) {
102
+ const ro = {
103
+ portal: portalUrl,
104
+ };
105
+ return arcgis_rest_request_1.request(`${portalUrl}/sharing/rest/community/users/${username}/resources?f=json&token=${token}&returnAllApps=${returnAllApps}`, ro);
106
+ }
107
+ exports.listUserResources = listUserResources;
108
+ //# sourceMappingURL=userAppResources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userAppResources.js","sourceRoot":"","sources":["../../../../src/utils/internal/userAppResources.ts"],"names":[],"mappings":";AAAA,gDAAgD;AAChD,gDAAgD;AAChD,0CAA0C;AAC1C,uFAAuF;AACvF,0EAA0E;AAC1E,6DAA6D;;;AAE7D,mEAAqE;AACrE,4CAAwC;AACxC,oDAAiD;AAiGjD;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,eAAe,CACnC,QAA0B,EAC1B,QAAgB,EAChB,SAAiB,EACjB,KAAa,EACb,UAAmB,KAAK;IAExB,mCAAmC;IACnC,IAAI,6BAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,EAAE;QACjD,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;KACH;IAED,IAAI,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,aAAa,GAAG,oBAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,MAAM,aAAa,CACzC,QAAQ,EACR,QAAQ,CAAC,GAAG,EACZ,SAAS,EACT,KAAK,CACN,CAAC;QACF,4CAA4C;QAC5C,OAAO,mCAAQ,eAAe,GAAK,QAAQ,CAAC,IAAI,CAAE,CAAC;KACpD;IACD,MAAM,EAAE,GAAoB;QAC1B,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,MAAM;QAClB,MAAM,EAAE;YACN,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK;SACN;KACF,CAAC;IACF,yFAAyF;IACzF,OAAO,6BAAO,CACZ,GAAG,SAAS,iCAAiC,QAAQ,cAAc,EACnE,EAAE,CACH,CAAC;AACJ,CAAC;AAzCD,0CAyCC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,eAAe,CAC7B,QAAgB,EAChB,GAAW,EACX,SAAiB,EACjB,KAAa;IAEb,MAAM,EAAE,GAAoB;QAC1B,MAAM,EAAE,SAAS;KAClB,CAAC;IACF,OAAO,6BAAO,CACZ,GAAG,SAAS,iCAAiC,QAAQ,cAAc,GAAG,UAAU,KAAK,EAAE,EACvF,EAAE,CACH,CAAC;AACJ,CAAC;AAbD,0CAaC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,kBAAkB,CAChC,QAAgB,EAChB,GAAW,EACX,SAAiB,EACjB,KAAa;IAEb,MAAM,EAAE,GAAoB;QAC1B,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,MAAM;QAClB,MAAM,EAAE;YACN,GAAG;YACH,KAAK;SACN;KACF,CAAC;IACF,OAAO,6BAAO,CACZ,GAAG,SAAS,iCAAiC,QAAQ,iBAAiB,EACtE,EAAE,CACH,CAAC;AACJ,CAAC;AAlBD,gDAkBC;AAED;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAC/B,QAAgB,EAChB,SAAiB,EACjB,KAAa,EACb,gBAAyB,KAAK;IAE9B,MAAM,EAAE,GAAoB;QAC1B,MAAM,EAAE,SAAS;KAClB,CAAC;IACF,OAAO,6BAAO,CACZ,GAAG,SAAS,iCAAiC,QAAQ,2BAA2B,KAAK,kBAAkB,aAAa,EAAE,EACtH,EAAE,CACmC,CAAC;AAC1C,CAAC;AAbD,8CAaC"}
@@ -4,26 +4,39 @@ exports.poll = void 0;
4
4
  /**
5
5
  * Function to poll a provided request until a validation
6
6
  * state or timeout is reached
7
+ *
8
+ * NOTE: we expose this as a public util, but should use this
9
+ * functionality sparingly when dealing with the Portal API.
10
+ * Best practice is to leverage this polling functionality
11
+ * internally on functions that we know incur a Portal delay.
12
+ *
7
13
  * @param requestFn
8
14
  * @param validationFn
9
15
  * @param opts
10
16
  */
11
17
  exports.poll = async (requestFn, validationFn, opts) => {
12
- const options = opts || /* istanbul ignore next - must pass in overrides for tests */ {};
13
- const timeout = options.timeout || 30000;
14
- const timeBetweenRequests = options.timeBetweenRequests ||
15
- /* istanbul ignore next - cannot delay by this much in tests */ 3000;
18
+ const options = opts || /* istanbul ignore next - we must pass in overrides for tests */ {};
19
+ const timeout = isNaN(options.timeout) ? 30000 : options.timeout;
20
+ /* istanbul ignore next - should not cover the 3000 case in tests */
21
+ const timeBetweenRequests = isNaN(options.timeBetweenRequests)
22
+ ? 3000
23
+ : options.timeBetweenRequests;
16
24
  let resp;
17
25
  let requestCount = 0;
26
+ let timeElapsed = 0;
18
27
  do {
19
28
  // On subsequent requests, check if the timeout has been reached
20
29
  // If YES: throw an error
21
30
  // If NO: delay before the next request
22
31
  if (requestCount > 0) {
23
- if (requestCount * timeBetweenRequests >= timeout) {
32
+ timeElapsed += requestCount * timeBetweenRequests;
33
+ if (timeElapsed >= timeout) {
24
34
  throw new Error("Polling timeout");
25
35
  }
26
- await delay(timeBetweenRequests);
36
+ // NOTE: we incrementally increase the time between requests
37
+ // so as not to hammer an API with subsequent calls.
38
+ // This was specifically requested by the Portal API team
39
+ await delay(requestCount * timeBetweenRequests);
27
40
  }
28
41
  resp = await requestFn();
29
42
  requestCount++;
@@ -1 +1 @@
1
- {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../../src/utils/poll.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACU,QAAA,IAAI,GAAG,KAAK,EACvB,SAAoB,EACpB,YAAoC,EACpC,IAGC,EACa,EAAE;IAChB,MAAM,OAAO,GACX,IAAI,IAAI,6DAA6D,CAAC,EAAE,CAAC;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,mBAAmB,GACvB,OAAO,CAAC,mBAAmB;QAC3B,+DAA+D,CAAC,IAAI,CAAC;IAEvE,IAAI,IAAS,CAAC;IACd,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,GAAG;QACD,gEAAgE;QAChE,yBAAyB;QACzB,uCAAuC;QACvC,IAAI,YAAY,GAAG,CAAC,EAAE;YACpB,IAAI,YAAY,GAAG,mBAAmB,IAAI,OAAO,EAAE;gBACjD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACpC;YACD,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAC;SAClC;QAED,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC;QACzB,YAAY,EAAE,CAAC;KAChB,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;IAE9B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,YAAoB,EAAE,EAAE;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC"}
1
+ {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../../src/utils/poll.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;GAYG;AACU,QAAA,IAAI,GAAG,KAAK,EACvB,SAAoB,EACpB,YAAoC,EACpC,IAGC,EACa,EAAE;IAChB,MAAM,OAAO,GACX,IAAI,IAAI,gEAAgE,CAAC,EAAE,CAAC;IAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACjE,oEAAoE;IACpE,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAC5D,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAEhC,IAAI,IAAS,CAAC;IACd,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,GAAG;QACD,gEAAgE;QAChE,yBAAyB;QACzB,uCAAuC;QACvC,IAAI,YAAY,GAAG,CAAC,EAAE;YACpB,WAAW,IAAI,YAAY,GAAG,mBAAmB,CAAC;YAClD,IAAI,WAAW,IAAI,OAAO,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACpC;YAED,4DAA4D;YAC5D,oDAAoD;YACpD,yDAAyD;YACzD,MAAM,KAAK,CAAC,YAAY,GAAG,mBAAmB,CAAC,CAAC;SACjD;QAED,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC;QACzB,YAAY,EAAE,CAAC;KAChB,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;IAE9B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,YAAoB,EAAE,EAAE;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC"}
@@ -4,6 +4,7 @@ import { IRequestOptions } from "@esri/arcgis-rest-request";
4
4
  import { HubServiceStatus } from "./core";
5
5
  import { HubEnvironment, HubLicense, IFeatureFlags } from "./permissions/types";
6
6
  import { IHubRequestOptions, IHubTrustedOrgsResponse } from "./types";
7
+ import { IUserResourceToken, UserResourceApp } from "./ArcGISContextManager";
7
8
  /**
8
9
  * Defines the properties of the ArcGISContext.
9
10
  * Typically components or functions will get an instance
@@ -170,6 +171,16 @@ export interface IArcGISContext {
170
171
  * Trusted orgs xhr response
171
172
  */
172
173
  trustedOrgs: IHubTrustedOrgsResponse[];
174
+ /**
175
+ * Array of exchanged tokens for use
176
+ * with user-app-resources
177
+ */
178
+ userResourceTokens?: IUserResourceToken[];
179
+ /**
180
+ * Return the token for a given app, if defined
181
+ * @param app
182
+ */
183
+ tokenFor(app: UserResourceApp): string;
173
184
  }
174
185
  /**
175
186
  * Options for the ArcGISContext constructor
@@ -230,6 +241,11 @@ export interface IArcGISContextOptions {
230
241
  * Trusted orgs xhr response
231
242
  */
232
243
  trustedOrgs?: IHubTrustedOrgsResponse[];
244
+ /**
245
+ * Array of exchanged tokens for use
246
+ * with user-app-resources
247
+ */
248
+ userResourceTokens?: IUserResourceToken[];
233
249
  }
234
250
  /**
235
251
  * Abstraction that holds a `UserSession`, along with
@@ -261,6 +277,7 @@ export declare class ArcGISContext implements IArcGISContext {
261
277
  private _featureFlags;
262
278
  private _trustedOrgIds;
263
279
  private _trustedOrgs;
280
+ private _userResourceTokens;
264
281
  /**
265
282
  * Create a new instance of `ArcGISContext`.
266
283
  *
@@ -419,4 +436,14 @@ export declare class ArcGISContext implements IArcGISContext {
419
436
  * Returns the array of Trusted Orgs
420
437
  */
421
438
  get trustedOrgs(): IHubTrustedOrgsResponse[];
439
+ /**
440
+ * Return the whole array of user resource tokens
441
+ */
442
+ get userResourceTokens(): IUserResourceToken[];
443
+ /**
444
+ * Return a token for a specific app
445
+ * @param app
446
+ * @returns
447
+ */
448
+ tokenFor(app: UserResourceApp): string;
422
449
  }
@@ -5,6 +5,14 @@ import { Level } from "./utils/logger";
5
5
  import { HubServiceStatus } from "./core";
6
6
  import { IFeatureFlags } from "./permissions";
7
7
  import { IHubTrustedOrgsResponse } from "./types";
8
+ export declare type UserResourceApp = "self" | "hubforarcgis" | "arcgisonline";
9
+ export interface IUserResourceConfig {
10
+ app: UserResourceApp;
11
+ clientId: string;
12
+ }
13
+ export interface IUserResourceToken extends IUserResourceConfig {
14
+ token: string;
15
+ }
8
16
  /**
9
17
  * Options that can be passed into `ArcGISContextManager.create`
10
18
  */
@@ -65,6 +73,16 @@ export interface IArcGISContextManagerOptions {
65
73
  * Trusted orgs xhr response
66
74
  */
67
75
  trustedOrgs?: IHubTrustedOrgsResponse[];
76
+ /**
77
+ * Array of app, clientId's that Context Manager should
78
+ * exchange tokens for
79
+ */
80
+ resourceConfigs?: IUserResourceConfig[];
81
+ /**
82
+ * Array of app, clientId, token objects which Context
83
+ * Manager has exchanged tokens for
84
+ */
85
+ resourceTokens?: IUserResourceToken[];
68
86
  }
69
87
  /**
70
88
  * The manager exposes context (`IArcGISContext`), which combines a `UserSession` with
@@ -99,6 +117,8 @@ export declare class ArcGISContextManager {
99
117
  private _featureFlags;
100
118
  private _trustedOrgIds;
101
119
  private _trustedOrgs;
120
+ private _resourceConfigs;
121
+ private _resourceTokens;
102
122
  /**
103
123
  * Private constructor. Use `ArcGISContextManager.create(...)` to
104
124
  * instantiate an instance
@@ -166,3 +186,4 @@ export declare class ArcGISContextManager {
166
186
  */
167
187
  private get contextOpts();
168
188
  }
189
+ export declare const ALPHA_ORGS: string[];
@@ -0,0 +1,20 @@
1
+ import { IModel } from "../types";
2
+ declare type FeedFormat = "dcat-us" | "dcat-ap" | "rss";
3
+ /**
4
+ * Returns feed configuration from a site model
5
+ *
6
+ * @param {IModel} site - site model
7
+ * @param {FeedFormat} format - feed format
8
+ * @param {string} version - semantic version
9
+ */
10
+ export declare function getFeedConfiguration(site: IModel, format: FeedFormat, version: string): any;
11
+ /**
12
+ * Returns feed configuration from a site model
13
+ *
14
+ * @param {IModel} site - site model
15
+ * @param {FeedFormat} format - feed format
16
+ * @param {string} version - semantic version
17
+ * @param {Record<string, any>} feedConfig - feed configuration
18
+ */
19
+ export declare function setFeedConfiguration(site: IModel, format: FeedFormat, version: string, feedConfig: Record<string, any>): void;
20
+ export {};
@@ -10,3 +10,4 @@ export * from "./HubSites";
10
10
  export * from "./site-schema-version";
11
11
  export * from "./themes";
12
12
  export * from "./upgrade-site-schema";
13
+ export * from "./feed-configuration";
@@ -0,0 +1,6 @@
1
+ export interface IObjectSize {
2
+ bytes: number;
3
+ kilobytes: number;
4
+ megabytes: number;
5
+ }
6
+ export declare function getObjectSize(object: Record<string, any>): IObjectSize;
@@ -0,0 +1,45 @@
1
+ import { IArcGISContext } from "../ArcGISContext";
2
+ /**
3
+ * Site Level Settings
4
+ */
5
+ export interface IUserSiteSettings {
6
+ schemaVersion: number;
7
+ username?: string;
8
+ updated?: number;
9
+ }
10
+ /**
11
+ * Hub Level Settings
12
+ */
13
+ export interface IUserHubSettings {
14
+ schemaVersion: number;
15
+ username?: string;
16
+ updated?: number;
17
+ }
18
+ /**
19
+ * Store User settings in the Site App's cache
20
+ * @param settings
21
+ * @param context
22
+ * @param replace
23
+ * @returns
24
+ */
25
+ export declare function setUserSiteSettings(settings: IUserSiteSettings, context: IArcGISContext, replace?: boolean): Promise<void>;
26
+ /**
27
+ * Get the current user's settings for the current Site
28
+ * @param context
29
+ * @returns
30
+ */
31
+ export declare function getUserSiteSettings(context: IArcGISContext): Promise<IUserSiteSettings>;
32
+ /**
33
+ * Store the current user's Hub settings
34
+ * @param settings
35
+ * @param context
36
+ * @param replace
37
+ * @returns
38
+ */
39
+ export declare function setUserHubSettings(settings: IUserHubSettings, context: IArcGISContext, replace?: boolean): Promise<void>;
40
+ /**
41
+ * Get the current user's settings for ArcGIS Hub
42
+ * @param context
43
+ * @returns
44
+ */
45
+ export declare function getUserHubSettings(context: IArcGISContext): Promise<IUserHubSettings>;
@@ -23,3 +23,5 @@ export * from "./titleize";
23
23
  export * from "./memoize";
24
24
  export * from "./getEnvironmentFromPortalUrl";
25
25
  export * from "./poll";
26
+ export * from "./hubUserAppResources";
27
+ export * from "./getObjectSize";
@@ -0,0 +1,11 @@
1
+ import { IArcGISContext } from "../../ArcGISContext";
2
+ import { UserResourceApp } from "../../ArcGISContextManager";
3
+ export declare const USER_HUB_SETTINGS_APP: UserResourceApp;
4
+ export declare const USER_HUB_SETTINGS_KEY = "hub-settings.json";
5
+ /**
6
+ * @private
7
+ * Internal use only; Clear User Hub Settings
8
+ * @param context
9
+ * @returns
10
+ */
11
+ export declare function clearUserHubSettings(context: IArcGISContext): Promise<Record<string, any>>;
@@ -0,0 +1,11 @@
1
+ import { IArcGISContext } from "../../ArcGISContext";
2
+ import { UserResourceApp } from "../../ArcGISContextManager";
3
+ export declare const USER_SITE_SETTINGS_APP: UserResourceApp;
4
+ export declare const USER_SITE_SETTINGS_KEY = "hub-site-settings.json";
5
+ /**
6
+ * @private
7
+ * Internal use only; Clear User Site Settings
8
+ * @param context
9
+ * @returns
10
+ */
11
+ export declare function clearUserSiteSettings(context: IArcGISContext): Promise<Record<string, any>>;
@@ -0,0 +1,13 @@
1
+ import { IUserHubSettings, IUserSiteSettings } from "../hubUserAppResources";
2
+ /**
3
+ * Apply migrations for Site Settings
4
+ * @param settings
5
+ * @returns
6
+ */
7
+ export declare function applySiteSettingsMigrations(settings: Record<string, any>): IUserSiteSettings;
8
+ /**
9
+ * Apply migrations for Hub Settings
10
+ * @param settings
11
+ * @returns
12
+ */
13
+ export declare function applyHubSettingsMigrations(settings: Record<string, any>): IUserHubSettings;