@esri/hub-common 9.13.1 → 9.15.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 (335) hide show
  1. package/dist/es2017/ArcGISContext.js +202 -120
  2. package/dist/es2017/ArcGISContext.js.map +1 -1
  3. package/dist/es2017/ArcGISContextManager.js +171 -0
  4. package/dist/es2017/ArcGISContextManager.js.map +1 -0
  5. package/dist/es2017/Hub.js +70 -0
  6. package/dist/es2017/Hub.js.map +1 -0
  7. package/dist/es2017/HubError.js +34 -0
  8. package/dist/es2017/HubError.js.map +1 -0
  9. package/dist/es2017/collections.js +23 -0
  10. package/dist/es2017/collections.js.map +1 -1
  11. package/dist/es2017/content/_internal.js.map +1 -1
  12. package/dist/es2017/content/index.js +25 -17
  13. package/dist/es2017/content/index.js.map +1 -1
  14. package/dist/es2017/core/helpers/PropertyMapper.js +95 -0
  15. package/dist/es2017/core/helpers/PropertyMapper.js.map +1 -0
  16. package/dist/es2017/core/index.js +3 -0
  17. package/dist/es2017/core/index.js.map +1 -0
  18. package/dist/es2017/core/traits/WithBannerImage.js +1 -0
  19. package/dist/es2017/core/traits/WithBannerImage.js.map +1 -0
  20. package/dist/es2017/core/traits/WithLayout.js +1 -0
  21. package/dist/es2017/core/traits/WithLayout.js.map +1 -0
  22. package/dist/es2017/core/traits/WithSlug.js +1 -0
  23. package/dist/es2017/core/traits/WithSlug.js.map +1 -0
  24. package/dist/es2017/core/traits/index.js +4 -0
  25. package/dist/es2017/core/traits/index.js.map +1 -0
  26. package/dist/es2017/core/types/IContentEnrichments.js +1 -0
  27. package/dist/es2017/core/types/IContentEnrichments.js.map +1 -0
  28. package/dist/es2017/core/types/IHubContent.js +1 -0
  29. package/dist/es2017/core/types/IHubContent.js.map +1 -0
  30. package/dist/es2017/core/types/IHubEntityBase.js +1 -0
  31. package/dist/es2017/core/types/IHubEntityBase.js.map +1 -0
  32. package/dist/es2017/core/types/IHubEntityManager.js +1 -0
  33. package/dist/es2017/core/types/IHubEntityManager.js.map +1 -0
  34. package/dist/es2017/core/types/IHubEvent.js +1 -0
  35. package/dist/es2017/core/types/IHubEvent.js.map +1 -0
  36. package/dist/es2017/core/types/IHubImage.js +1 -0
  37. package/dist/es2017/core/types/IHubImage.js.map +1 -0
  38. package/dist/es2017/core/types/IHubInitiative.js +1 -0
  39. package/dist/es2017/core/types/IHubInitiative.js.map +1 -0
  40. package/dist/es2017/core/types/IHubItemEntity.js +1 -0
  41. package/dist/es2017/core/types/IHubItemEntity.js.map +1 -0
  42. package/dist/es2017/core/types/IHubLayout.js +1 -0
  43. package/dist/es2017/core/types/IHubLayout.js.map +1 -0
  44. package/dist/es2017/core/types/IHubPage.js +1 -0
  45. package/dist/es2017/core/types/IHubPage.js.map +1 -0
  46. package/dist/es2017/core/types/IHubProject.js +1 -0
  47. package/dist/es2017/core/types/IHubProject.js.map +1 -0
  48. package/dist/es2017/core/types/IHubSite.js +1 -0
  49. package/dist/es2017/core/types/IHubSite.js.map +1 -0
  50. package/dist/es2017/core/types/IHubTimeline.js +1 -0
  51. package/dist/es2017/core/types/IHubTimeline.js.map +1 -0
  52. package/dist/es2017/core/types/IItemEnrichments.js +1 -0
  53. package/dist/es2017/core/types/IItemEnrichments.js.map +1 -0
  54. package/dist/es2017/core/types/index.js +15 -0
  55. package/dist/es2017/core/types/index.js.map +1 -0
  56. package/dist/es2017/index.js +11 -5
  57. package/dist/es2017/index.js.map +1 -1
  58. package/dist/es2017/items/fail-safe-update.js +2 -2
  59. package/dist/es2017/items/fail-safe-update.js.map +1 -1
  60. package/dist/es2017/items/get-model-from-options.js +2 -2
  61. package/dist/es2017/items/get-model-from-options.js.map +1 -1
  62. package/dist/es2017/items/index.js +2 -3
  63. package/dist/es2017/items/index.js.map +1 -1
  64. package/dist/es2017/items/slugs.js +92 -0
  65. package/dist/es2017/items/slugs.js.map +1 -0
  66. package/dist/es2017/models/index.js +98 -0
  67. package/dist/es2017/models/index.js.map +1 -0
  68. package/dist/es2017/{items/serialize-model.js → models/serializeModel.js} +1 -1
  69. package/dist/es2017/models/serializeModel.js.map +1 -0
  70. package/dist/es2017/projects/HubProjectManager.js +115 -0
  71. package/dist/es2017/projects/HubProjectManager.js.map +1 -0
  72. package/dist/es2017/projects/HubProjects.js +194 -0
  73. package/dist/es2017/projects/HubProjects.js.map +1 -0
  74. package/dist/es2017/projects/index.js +3 -0
  75. package/dist/es2017/projects/index.js.map +1 -0
  76. package/dist/es2017/search/_searchContent.js +18 -7
  77. package/dist/es2017/search/_searchContent.js.map +1 -1
  78. package/dist/es2017/search/_searchGroups.js +1 -11
  79. package/dist/es2017/search/_searchGroups.js.map +1 -1
  80. package/dist/es2017/search/utils.js +1 -1
  81. package/dist/es2017/urls/getHubApiFromPortalUrl.js +21 -0
  82. package/dist/es2017/urls/getHubApiFromPortalUrl.js.map +1 -0
  83. package/dist/es2017/urls/getPortalBaseFromOrgUrl.js +25 -0
  84. package/dist/es2017/urls/getPortalBaseFromOrgUrl.js.map +1 -0
  85. package/dist/es2017/urls/index.js +2 -0
  86. package/dist/es2017/urls/index.js.map +1 -1
  87. package/dist/es2017/utils/dasherize.js +25 -0
  88. package/dist/es2017/utils/dasherize.js.map +1 -0
  89. package/dist/es2017/utils/index.js +1 -0
  90. package/dist/es2017/utils/index.js.map +1 -1
  91. package/dist/esm/ArcGISContext.js +308 -180
  92. package/dist/esm/ArcGISContext.js.map +1 -1
  93. package/dist/esm/ArcGISContextManager.js +215 -0
  94. package/dist/esm/ArcGISContextManager.js.map +1 -0
  95. package/dist/esm/Hub.js +89 -0
  96. package/dist/esm/Hub.js.map +1 -0
  97. package/dist/esm/HubError.js +40 -0
  98. package/dist/esm/HubError.js.map +1 -0
  99. package/dist/esm/collections.js +23 -0
  100. package/dist/esm/collections.js.map +1 -1
  101. package/dist/esm/content/_internal.js.map +1 -1
  102. package/dist/esm/content/index.js +25 -17
  103. package/dist/esm/content/index.js.map +1 -1
  104. package/dist/esm/core/helpers/PropertyMapper.js +97 -0
  105. package/dist/esm/core/helpers/PropertyMapper.js.map +1 -0
  106. package/dist/esm/core/index.js +3 -0
  107. package/dist/esm/core/index.js.map +1 -0
  108. package/dist/esm/core/traits/WithBannerImage.js +1 -0
  109. package/dist/esm/core/traits/WithBannerImage.js.map +1 -0
  110. package/dist/esm/core/traits/WithLayout.js +1 -0
  111. package/dist/esm/core/traits/WithLayout.js.map +1 -0
  112. package/dist/esm/core/traits/WithSlug.js +1 -0
  113. package/dist/esm/core/traits/WithSlug.js.map +1 -0
  114. package/dist/esm/core/traits/index.js +4 -0
  115. package/dist/esm/core/traits/index.js.map +1 -0
  116. package/dist/esm/core/types/IContentEnrichments.js +1 -0
  117. package/dist/esm/core/types/IContentEnrichments.js.map +1 -0
  118. package/dist/esm/core/types/IHubContent.js +1 -0
  119. package/dist/esm/core/types/IHubContent.js.map +1 -0
  120. package/dist/esm/core/types/IHubEntityBase.js +1 -0
  121. package/dist/esm/core/types/IHubEntityBase.js.map +1 -0
  122. package/dist/esm/core/types/IHubEntityManager.js +1 -0
  123. package/dist/esm/core/types/IHubEntityManager.js.map +1 -0
  124. package/dist/esm/core/types/IHubEvent.js +1 -0
  125. package/dist/esm/core/types/IHubEvent.js.map +1 -0
  126. package/dist/esm/core/types/IHubImage.js +1 -0
  127. package/dist/esm/core/types/IHubImage.js.map +1 -0
  128. package/dist/esm/core/types/IHubInitiative.js +1 -0
  129. package/dist/esm/core/types/IHubInitiative.js.map +1 -0
  130. package/dist/esm/core/types/IHubItemEntity.js +1 -0
  131. package/dist/esm/core/types/IHubItemEntity.js.map +1 -0
  132. package/dist/esm/core/types/IHubLayout.js +1 -0
  133. package/dist/esm/core/types/IHubLayout.js.map +1 -0
  134. package/dist/esm/core/types/IHubPage.js +1 -0
  135. package/dist/esm/core/types/IHubPage.js.map +1 -0
  136. package/dist/esm/core/types/IHubProject.js +1 -0
  137. package/dist/esm/core/types/IHubProject.js.map +1 -0
  138. package/dist/esm/core/types/IHubSite.js +1 -0
  139. package/dist/esm/core/types/IHubSite.js.map +1 -0
  140. package/dist/esm/core/types/IHubTimeline.js +1 -0
  141. package/dist/esm/core/types/IHubTimeline.js.map +1 -0
  142. package/dist/esm/core/types/IItemEnrichments.js +1 -0
  143. package/dist/esm/core/types/IItemEnrichments.js.map +1 -0
  144. package/dist/esm/core/types/index.js +15 -0
  145. package/dist/esm/core/types/index.js.map +1 -0
  146. package/dist/esm/index.js +11 -5
  147. package/dist/esm/index.js.map +1 -1
  148. package/dist/esm/items/fail-safe-update.js +2 -2
  149. package/dist/esm/items/fail-safe-update.js.map +1 -1
  150. package/dist/esm/items/get-model-from-options.js +2 -2
  151. package/dist/esm/items/get-model-from-options.js.map +1 -1
  152. package/dist/esm/items/index.js +2 -3
  153. package/dist/esm/items/index.js.map +1 -1
  154. package/dist/esm/items/slugs.js +93 -0
  155. package/dist/esm/items/slugs.js.map +1 -0
  156. package/dist/esm/models/index.js +99 -0
  157. package/dist/esm/models/index.js.map +1 -0
  158. package/dist/esm/{items/serialize-model.js → models/serializeModel.js} +1 -1
  159. package/dist/esm/models/serializeModel.js.map +1 -0
  160. package/dist/esm/projects/HubProjectManager.js +142 -0
  161. package/dist/esm/projects/HubProjectManager.js.map +1 -0
  162. package/dist/esm/projects/HubProjects.js +225 -0
  163. package/dist/esm/projects/HubProjects.js.map +1 -0
  164. package/dist/esm/projects/index.js +3 -0
  165. package/dist/esm/projects/index.js.map +1 -0
  166. package/dist/esm/search/_searchContent.js +18 -7
  167. package/dist/esm/search/_searchContent.js.map +1 -1
  168. package/dist/esm/search/_searchGroups.js +3 -13
  169. package/dist/esm/search/_searchGroups.js.map +1 -1
  170. package/dist/esm/search/utils.js +1 -1
  171. package/dist/esm/urls/getHubApiFromPortalUrl.js +21 -0
  172. package/dist/esm/urls/getHubApiFromPortalUrl.js.map +1 -0
  173. package/dist/esm/urls/getPortalBaseFromOrgUrl.js +25 -0
  174. package/dist/esm/urls/getPortalBaseFromOrgUrl.js.map +1 -0
  175. package/dist/esm/urls/index.js +2 -0
  176. package/dist/esm/urls/index.js.map +1 -1
  177. package/dist/esm/utils/dasherize.js +25 -0
  178. package/dist/esm/utils/dasherize.js.map +1 -0
  179. package/dist/esm/utils/index.js +1 -0
  180. package/dist/esm/utils/index.js.map +1 -1
  181. package/dist/node/ArcGISContext.js +203 -121
  182. package/dist/node/ArcGISContext.js.map +1 -1
  183. package/dist/node/ArcGISContextManager.js +175 -0
  184. package/dist/node/ArcGISContextManager.js.map +1 -0
  185. package/dist/node/Hub.js +74 -0
  186. package/dist/node/Hub.js.map +1 -0
  187. package/dist/node/HubError.js +37 -0
  188. package/dist/node/HubError.js.map +1 -0
  189. package/dist/node/collections.js +24 -1
  190. package/dist/node/collections.js.map +1 -1
  191. package/dist/node/content/_internal.js.map +1 -1
  192. package/dist/node/content/index.js +25 -17
  193. package/dist/node/content/index.js.map +1 -1
  194. package/dist/node/core/helpers/PropertyMapper.js +101 -0
  195. package/dist/node/core/helpers/PropertyMapper.js.map +1 -0
  196. package/dist/node/core/index.js +6 -0
  197. package/dist/node/core/index.js.map +1 -0
  198. package/dist/node/core/traits/WithBannerImage.js +3 -0
  199. package/dist/node/core/traits/WithBannerImage.js.map +1 -0
  200. package/dist/node/core/traits/WithLayout.js +3 -0
  201. package/dist/node/core/traits/WithLayout.js.map +1 -0
  202. package/dist/node/core/traits/WithSlug.js +3 -0
  203. package/dist/node/core/traits/WithSlug.js.map +1 -0
  204. package/dist/node/core/traits/index.js +7 -0
  205. package/dist/node/core/traits/index.js.map +1 -0
  206. package/dist/node/core/types/IContentEnrichments.js +3 -0
  207. package/dist/node/core/types/IContentEnrichments.js.map +1 -0
  208. package/dist/node/core/types/IHubContent.js +3 -0
  209. package/dist/node/core/types/IHubContent.js.map +1 -0
  210. package/dist/node/core/types/IHubEntityBase.js +3 -0
  211. package/dist/node/core/types/IHubEntityBase.js.map +1 -0
  212. package/dist/node/core/types/IHubEntityManager.js +3 -0
  213. package/dist/node/core/types/IHubEntityManager.js.map +1 -0
  214. package/dist/node/core/types/IHubEvent.js +3 -0
  215. package/dist/node/core/types/IHubEvent.js.map +1 -0
  216. package/dist/node/core/types/IHubImage.js +3 -0
  217. package/dist/node/core/types/IHubImage.js.map +1 -0
  218. package/dist/node/core/types/IHubInitiative.js +3 -0
  219. package/dist/node/core/types/IHubInitiative.js.map +1 -0
  220. package/dist/node/core/types/IHubItemEntity.js +3 -0
  221. package/dist/node/core/types/IHubItemEntity.js.map +1 -0
  222. package/dist/node/core/types/IHubLayout.js +3 -0
  223. package/dist/node/core/types/IHubLayout.js.map +1 -0
  224. package/dist/node/core/types/IHubPage.js +3 -0
  225. package/dist/node/core/types/IHubPage.js.map +1 -0
  226. package/dist/node/core/types/IHubProject.js +3 -0
  227. package/dist/node/core/types/IHubProject.js.map +1 -0
  228. package/dist/node/core/types/IHubSite.js +3 -0
  229. package/dist/node/core/types/IHubSite.js.map +1 -0
  230. package/dist/node/core/types/IHubTimeline.js +3 -0
  231. package/dist/node/core/types/IHubTimeline.js.map +1 -0
  232. package/dist/node/core/types/IItemEnrichments.js +3 -0
  233. package/dist/node/core/types/IItemEnrichments.js.map +1 -0
  234. package/dist/node/core/types/index.js +18 -0
  235. package/dist/node/core/types/index.js.map +1 -0
  236. package/dist/node/index.js +12 -5
  237. package/dist/node/index.js.map +1 -1
  238. package/dist/node/items/fail-safe-update.js +3 -3
  239. package/dist/node/items/fail-safe-update.js.map +1 -1
  240. package/dist/node/items/get-model-from-options.js +3 -3
  241. package/dist/node/items/get-model-from-options.js.map +1 -1
  242. package/dist/node/items/index.js +2 -3
  243. package/dist/node/items/index.js.map +1 -1
  244. package/dist/node/items/slugs.js +99 -0
  245. package/dist/node/items/slugs.js.map +1 -0
  246. package/dist/node/models/index.js +106 -0
  247. package/dist/node/models/index.js.map +1 -0
  248. package/dist/node/{items/serialize-model.js → models/serializeModel.js} +1 -1
  249. package/dist/node/models/serializeModel.js.map +1 -0
  250. package/dist/node/projects/HubProjectManager.js +119 -0
  251. package/dist/node/projects/HubProjectManager.js.map +1 -0
  252. package/dist/node/projects/HubProjects.js +201 -0
  253. package/dist/node/projects/HubProjects.js.map +1 -0
  254. package/dist/node/projects/index.js +6 -0
  255. package/dist/node/projects/index.js.map +1 -0
  256. package/dist/node/search/_searchContent.js +17 -6
  257. package/dist/node/search/_searchContent.js.map +1 -1
  258. package/dist/node/search/_searchGroups.js +1 -11
  259. package/dist/node/search/_searchGroups.js.map +1 -1
  260. package/dist/node/search/utils.js +1 -1
  261. package/dist/node/urls/getHubApiFromPortalUrl.js +25 -0
  262. package/dist/node/urls/getHubApiFromPortalUrl.js.map +1 -0
  263. package/dist/node/urls/getPortalBaseFromOrgUrl.js +29 -0
  264. package/dist/node/urls/getPortalBaseFromOrgUrl.js.map +1 -0
  265. package/dist/node/urls/index.js +2 -0
  266. package/dist/node/urls/index.js.map +1 -1
  267. package/dist/node/utils/dasherize.js +29 -0
  268. package/dist/node/utils/dasherize.js.map +1 -0
  269. package/dist/node/utils/index.js +1 -0
  270. package/dist/node/utils/index.js.map +1 -1
  271. package/dist/types/ArcGISContext.d.ts +280 -58
  272. package/dist/types/ArcGISContextManager.d.ts +130 -0
  273. package/dist/types/Hub.d.ts +72 -0
  274. package/dist/types/HubError.d.ts +17 -0
  275. package/dist/types/collections.d.ts +12 -0
  276. package/dist/types/content/_internal.d.ts +57 -38
  277. package/dist/types/content/index.d.ts +8 -8
  278. package/dist/types/core/helpers/PropertyMapper.d.ts +69 -0
  279. package/dist/types/core/index.d.ts +2 -0
  280. package/dist/types/core/traits/WithBannerImage.d.ts +30 -0
  281. package/dist/types/core/traits/WithLayout.d.ts +54 -0
  282. package/dist/types/core/traits/WithSlug.d.ts +15 -0
  283. package/dist/types/core/traits/index.d.ts +3 -0
  284. package/dist/types/core/types/IContentEnrichments.d.ts +10 -0
  285. package/dist/types/core/types/IHubContent.d.ts +77 -0
  286. package/dist/types/core/types/IHubEntityBase.d.ts +41 -0
  287. package/dist/types/core/types/IHubEntityManager.d.ts +33 -0
  288. package/dist/types/core/types/IHubEvent.d.ts +10 -0
  289. package/dist/types/core/types/IHubImage.d.ts +25 -0
  290. package/dist/types/core/types/IHubInitiative.d.ts +8 -0
  291. package/dist/types/core/types/IHubItemEntity.d.ts +42 -0
  292. package/dist/types/core/types/IHubLayout.d.ts +20 -0
  293. package/dist/types/core/types/IHubPage.d.ts +8 -0
  294. package/dist/types/core/types/IHubProject.d.ts +15 -0
  295. package/dist/types/core/types/IHubSite.d.ts +11 -0
  296. package/dist/types/core/types/IHubTimeline.d.ts +41 -0
  297. package/dist/types/core/types/IItemEnrichments.d.ts +23 -0
  298. package/dist/types/core/types/index.d.ts +14 -0
  299. package/dist/types/index.d.ts +11 -5
  300. package/dist/types/items/index.d.ts +2 -3
  301. package/dist/types/items/slugs.d.ts +43 -0
  302. package/dist/types/models/index.d.ts +42 -0
  303. package/dist/types/{items/serialize-model.d.ts → models/serializeModel.d.ts} +0 -0
  304. package/dist/types/projects/HubProjectManager.d.ts +81 -0
  305. package/dist/types/projects/HubProjects.d.ts +31 -0
  306. package/dist/types/projects/index.d.ts +2 -0
  307. package/dist/types/search/utils.d.ts +1 -1
  308. package/dist/types/types.d.ts +2 -92
  309. package/dist/types/urls/getHubApiFromPortalUrl.d.ts +8 -0
  310. package/dist/types/urls/getPortalBaseFromOrgUrl.d.ts +9 -0
  311. package/dist/types/urls/index.d.ts +2 -0
  312. package/dist/types/utils/dasherize.d.ts +17 -0
  313. package/dist/types/utils/index.d.ts +1 -0
  314. package/dist/umd/common.umd.js +4632 -3668
  315. package/dist/umd/common.umd.js.map +1 -1
  316. package/dist/umd/common.umd.min.js +1 -1
  317. package/dist/umd/common.umd.min.js.map +1 -1
  318. package/package.json +1 -1
  319. package/dist/es2017/ArcGISContextState.js +0 -203
  320. package/dist/es2017/ArcGISContextState.js.map +0 -1
  321. package/dist/es2017/items/get-model.js +0 -19
  322. package/dist/es2017/items/get-model.js.map +0 -1
  323. package/dist/es2017/items/serialize-model.js.map +0 -1
  324. package/dist/esm/ArcGISContextState.js +0 -285
  325. package/dist/esm/ArcGISContextState.js.map +0 -1
  326. package/dist/esm/items/get-model.js +0 -19
  327. package/dist/esm/items/get-model.js.map +0 -1
  328. package/dist/esm/items/serialize-model.js.map +0 -1
  329. package/dist/node/ArcGISContextState.js +0 -207
  330. package/dist/node/ArcGISContextState.js.map +0 -1
  331. package/dist/node/items/get-model.js +0 -23
  332. package/dist/node/items/get-model.js.map +0 -1
  333. package/dist/node/items/serialize-model.js.map +0 -1
  334. package/dist/types/ArcGISContextState.d.ts +0 -129
  335. package/dist/types/items/get-model.d.ts +0 -8
@@ -1,169 +1,251 @@
1
- import { getSelf } from "@esri/arcgis-rest-portal";
2
- import { ArcGISContextState, } from "./ArcGISContextState";
1
+ import { getProp, getWithDefault } from ".";
3
2
  /**
4
- * Application Context Object
5
- *
6
- * Abstraction that combines a `UserSession` with
7
- * the `portal/self` and `user/self` responses to
8
- * provide a central lookup of platform information.
3
+ * Hash of Hub API end points so updates
4
+ * are centralized
5
+ */
6
+ const hubApiEndpoints = {
7
+ domains: "/api/v3/domains",
8
+ search: "/api/v3/datasets",
9
+ discussions: "/api/discussions/v1",
10
+ };
11
+ /**
12
+ * Abstraction that holds a `UserSession`, along with
13
+ * getters to streamline access to various platform
14
+ * urls, and common constructs like `IRequestOptions`,
15
+ * `IUserRequestOptions` etc.
9
16
  *
10
- * This is a work-in-progress, and will likely expand over time.
17
+ * Instances are intended to be immutable, but this is not directly enforced.
11
18
  *
12
- * `ArcGISContext` is used in conjuction with the `arcgis-app-identity`
13
- * component to orchestrate oAuth.
19
+ * In most circumstances, this class should be created by
20
+ * the ArcGISContextManager class.
14
21
  */
15
22
  export class ArcGISContext {
16
23
  /**
17
- * Private constructor. Use `ArcGISContext.create(...)` to
18
- * instantiate an instance
24
+ * Create a new instance of `ArcGISContext`.
25
+ *
19
26
  * @param opts
20
27
  */
21
28
  constructor(opts) {
22
29
  this._portalUrl = "https://www.arcgis.com";
23
- this._debug = false;
24
- // Having a unique id makes debugging easier
25
- this.id = new Date().getTime();
26
- if (opts.debug) {
27
- this._debug = opts.debug;
28
- }
29
- this.log(`ArcGISContext:ctor: Creating ${this.id}`);
30
+ this.id = opts.id;
31
+ this._portalUrl = opts.portalUrl;
32
+ this._hubUrl = opts.hubUrl;
30
33
  if (opts.authentication) {
31
34
  this._authentication = opts.authentication;
32
- this._portalUrl = this._authentication.portal.replace("/sharing/rest", "");
33
- this._hubUrl = getHubApiFromPortalUrl(this._portalUrl);
34
35
  }
35
- else if (opts.portalUrl) {
36
- this._portalUrl = opts.portalUrl;
37
- this._hubUrl = getHubApiFromPortalUrl(this._portalUrl);
36
+ if (opts.portalSelf) {
37
+ this._portalSelf = opts.portalSelf;
38
38
  }
39
- else {
40
- this._hubUrl = getHubApiFromPortalUrl(this._portalUrl);
39
+ if (opts.currentUser) {
40
+ this._currentUser = opts.currentUser;
41
+ }
42
+ if (opts.properties) {
43
+ this._properties = opts.properties;
41
44
  }
42
45
  }
43
46
  /**
44
- * Static async Factory
45
- * @param opts
46
- * @returns
47
+ * Return the UserSession if authenticated
48
+ */
49
+ get session() {
50
+ return this._authentication;
51
+ }
52
+ /**
53
+ * Return boolean indicating if authenticatio is present
54
+ */
55
+ get isAuthenticated() {
56
+ return !!this._authentication;
57
+ }
58
+ /**
59
+ * Return `IUserRequestOptions`, which is used for REST-JS
60
+ * functions which require authentication information.
61
+ *
62
+ * If context is not authenticated, this function will throw
47
63
  */
48
- static async create(opts = {}) {
49
- const ctx = new ArcGISContext(opts);
50
- await ctx.initialize();
51
- return ctx;
64
+ get userRequestOptions() {
65
+ if (this.isAuthenticated) {
66
+ return {
67
+ authentication: this._authentication,
68
+ portal: this.sharingApiUrl,
69
+ };
70
+ }
52
71
  }
53
72
  /**
54
- * If we have a UserSession, fetch portal/self and
55
- * store that along with current user
73
+ * Return `IRequestOptions`, which is used by REST-JS functions
74
+ * which *may* use authentication information if provided.
75
+ *
76
+ * If context is not authenticated, this function just returns
77
+ * the `portal` property, which informs REST-JS what Sharing API
78
+ * instance to use (i.e. AGO, Enterprise etc)
56
79
  */
57
- async initialize() {
58
- let stateOpts = {
59
- id: this.id,
60
- portalUrl: this._portalUrl,
61
- hubUrl: this._hubUrl,
80
+ get requestOptions() {
81
+ let ro = {
82
+ portal: this.sharingApiUrl,
62
83
  };
63
- if (this._authentication) {
64
- this.log(`ArcGISContext-${this.id}: Initializing`);
65
- const ps = await getSelf({ authentication: this._authentication });
66
- this._portalSelf = ps;
67
- this._currentUser = ps.user;
68
- stateOpts = {
69
- id: this.id,
70
- portalUrl: this._portalUrl,
71
- hubUrl: this._hubUrl,
72
- portalSelf: this._portalSelf,
73
- currentUser: this._currentUser,
84
+ if (this.isAuthenticated) {
85
+ ro = {
74
86
  authentication: this._authentication,
87
+ portal: this.sharingApiUrl,
75
88
  };
76
89
  }
77
- // update the state
78
- this._state = new ArcGISContextState(stateOpts);
90
+ return ro;
79
91
  }
80
92
  /**
81
- * Set the Authentication (UserSession) for the context.
82
- * This should be called when a user signs into a running
83
- * application.
84
- * @param auth
93
+ * Return a `IHubRequestOptions` object
85
94
  */
86
- async setAuthentication(auth) {
87
- this._authentication = auth;
88
- this._portalUrl = auth.portal.replace("/sharing/rest", "");
89
- await this.initialize();
95
+ get hubRequestOptions() {
96
+ // We may add more logic around what is returned in some corner cases
97
+ if (this.isAuthenticated) {
98
+ return {
99
+ authentication: this.session,
100
+ isPortal: this.isPortal,
101
+ portalSelf: this.portal,
102
+ hubApiUrl: this.hubUrl,
103
+ };
104
+ }
90
105
  }
91
106
  /**
92
- * Clear the Authentication (UserSession). This should be
93
- * called when a user signs out of an application, but
94
- * the application continues running
107
+ * Return the portal url i.e. https://www.arcgis.com
108
+ *
109
+ * If authenticated @ ArcGIS Online, it will return
110
+ * the https://org.env.arcgis.com
111
+ *
112
+ * If authenticated @ ArcGIS Enterprise, it will return
113
+ * https://{portalHostname}/{webadaptor}
95
114
  */
96
- clearAuthentication() {
97
- // Reset the portalUrl from the org url to the base url
98
- // for ArcGIS Enterprise, we just leave the _portalUrl as-is
99
- if (!this._state.isPortal) {
100
- this._portalUrl = getPortalBaseFromOrgUrl(this._portalUrl);
115
+ get portalUrl() {
116
+ if (this.isAuthenticated) {
117
+ if (this.isPortal) {
118
+ return `https://${this._portalSelf.portalHostname}`;
119
+ }
120
+ else {
121
+ return `https://${this._portalSelf.urlKey}.${this._portalSelf.customBaseUrl}`;
122
+ }
123
+ }
124
+ else {
125
+ return this._portalUrl;
101
126
  }
102
- // Clear the auth, portalSelf and currentUser props
103
- this._authentication = null;
104
- this._portalSelf = null;
105
- this._currentUser = null;
106
- this._state = new ArcGISContextState({
107
- id: this.id,
108
- portalUrl: this._portalUrl,
109
- hubUrl: this._hubUrl,
110
- });
111
127
  }
112
128
  /**
113
- * Return a reference to the current state.
114
- * When `.setAuthentication()` or `.clearAuthenentication()` are
115
- * called, the state will be re-created. This is done so frameworks
116
- * like React or Ember can detect changes.
129
+ * Returns the url to the sharing api composed from portalUrl
130
+ * i.e. https://myorg.maps.arcgis.com/sharing/rest
131
+ */
132
+ get sharingApiUrl() {
133
+ return `${this.portalUrl}/sharing/rest`;
134
+ }
135
+ /**
136
+ * Returns the Hub url, based on the portalUrl
137
+ *
138
+ * For ArcGIS Enterprise this will return `undefined`
139
+ */
140
+ get hubUrl() {
141
+ return this._hubUrl;
142
+ }
143
+ /**
144
+ * Returns boolean indicating if the backing system
145
+ * is ArcGIS Enterprise (formerly ArcGIS Portal) or not
117
146
  */
118
- get state() {
119
- return this._state;
147
+ get isPortal() {
148
+ return this._portalSelf
149
+ ? this._portalSelf.isPortal
150
+ : this._portalUrl.indexOf("arcgis.com") === -1;
120
151
  }
121
152
  /**
122
- * @internal
123
- * Log debugging messages to the console
124
- * @param message
153
+ * Returns the discussions API URL
125
154
  */
126
- log(message) {
127
- if (this._debug) {
128
- // tslint:disable-next-line:no-console
129
- console.info(message);
155
+ get discussionsServiceUrl() {
156
+ if (this._hubUrl) {
157
+ return `${this._hubUrl}${hubApiEndpoints.discussions}`;
130
158
  }
131
159
  }
132
- }
133
- /**
134
- * Cross-walk from a portalUrl to the corresponding Hub.
135
- *
136
- * If the passed url is not recognized, then this will return `undefined`
137
- * @param portalUrl
138
- * @returns
139
- */
140
- function getHubApiFromPortalUrl(portalUrl) {
141
- let result;
142
- if (portalUrl.match(/(qaext|\.mapsqa)\.arcgis.com/)) {
143
- result = "https://hubqa.arcgis.com";
160
+ /**
161
+ * Returns the Hub Search API URL
162
+ */
163
+ get hubSearchServiceUrl() {
164
+ if (this._hubUrl) {
165
+ return `${this._hubUrl}${hubApiEndpoints.search}`;
166
+ }
144
167
  }
145
- else if (portalUrl.match(/(devext|\.mapsdevext)\.arcgis.com/)) {
146
- result = "https://hubdev.arcgis.com";
168
+ /**
169
+ * Returns Hub Domain Service URL
170
+ */
171
+ get domainServiceUrl() {
172
+ if (this._hubUrl) {
173
+ return `${this._hubUrl}${hubApiEndpoints.domains}`;
174
+ }
147
175
  }
148
- else if (portalUrl.match(/(www|\.maps)\.arcgis.com/)) {
149
- result = "https://hub.arcgis.com";
176
+ /**
177
+ * Returns the Events configuration object from portal/self
178
+ *
179
+ * `{serviceId: '3ef..', publicViewId: 'bc3...'}`
180
+ */
181
+ get eventsConfig() {
182
+ if (this._portalSelf) {
183
+ return getProp(this._portalSelf, "portalProperties.hub.settings.events");
184
+ }
150
185
  }
151
- return result;
152
- }
153
- function getPortalBaseFromOrgUrl(orgUrl) {
154
- let result;
155
- if (orgUrl.match(/(qaext|\.mapsqa)\.arcgis.com/)) {
156
- result = "https://qaext.arcgis.com";
186
+ /**
187
+ * Returns boolean indicating if the current user
188
+ * belongs to an organization that has licensed
189
+ * ArcGIS Hub
190
+ */
191
+ get hubEnabled() {
192
+ return getWithDefault(this._portalSelf, "portalProperties.hub.enabled", false);
193
+ }
194
+ /**
195
+ * Return the Hub Community Org Id, if defined
196
+ */
197
+ get communityOrgId() {
198
+ if (this._portalSelf) {
199
+ return getProp(this._portalSelf, "portalProperties.hub.settings.communityOrg.orgId");
200
+ }
201
+ }
202
+ /**
203
+ * Returns the Hub Community Org Hostname, if defined
204
+ *
205
+ * i.e. c-org.maps.arcgis.com
206
+ */
207
+ get communityOrgHostname() {
208
+ if (this._portalSelf) {
209
+ return getProp(this._portalSelf, "portalProperties.hub.settings.communityOrg.portalHostname");
210
+ }
157
211
  }
158
- else if (orgUrl.match(/(devext|\.mapsdevext)\.arcgis.com/)) {
159
- result = "https://devext.arcgis.com";
212
+ /**
213
+ * Returns the Hub Community Org url
214
+ *
215
+ * i.e. https://c-org.maps.arcgis.com
216
+ */
217
+ get communityOrgUrl() {
218
+ if (this.communityOrgHostname) {
219
+ return `https://${this.communityOrgHostname}`;
220
+ }
160
221
  }
161
- else {
162
- /* istanbul ignore else */
163
- if (orgUrl.match(/(www|\.maps)\.arcgis.com/)) {
164
- result = "https://www.arcgis.com";
222
+ /**
223
+ * Returns the hash of helper services from portal self
224
+ */
225
+ get helperServices() {
226
+ if (this._portalSelf) {
227
+ return this._portalSelf.helperServices;
165
228
  }
166
229
  }
167
- return result;
230
+ /**
231
+ * Returns the current user as IUser
232
+ */
233
+ get currentUser() {
234
+ return this._currentUser;
235
+ }
236
+ /**
237
+ * Returns the portal object as IPortal
238
+ */
239
+ get portal() {
240
+ return this._portalSelf;
241
+ }
242
+ /**
243
+ * Return the properties hash that was passed in.
244
+ * Useful for app-specific context such as the active
245
+ * Site for ArcGIS Hub
246
+ */
247
+ get properties() {
248
+ return this._properties;
249
+ }
168
250
  }
169
251
  //# sourceMappingURL=ArcGISContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISContext.js","sourceRoot":"","sources":["../../src/ArcGISContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ArcGISContext.js","sourceRoot":"","sources":["../../src/ArcGISContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ import { getSelf, getUser } from "@esri/arcgis-rest-portal";
2
+ import { ArcGISContext, } from "./ArcGISContext";
3
+ import { cloneObject, Logger, Level } from ".";
4
+ import { getHubApiFromPortalUrl } from "./urls/getHubApiFromPortalUrl";
5
+ import { getPortalBaseFromOrgUrl } from "./urls/getPortalBaseFromOrgUrl";
6
+ /**
7
+ * The manager exposes context (`IArcGISContext`), which combines a `UserSession` with
8
+ * the `portal/self` and `user/self` responses to provide a central lookup for platform
9
+ * information, api urls, and other useful properties for developers such as IRequestOptions
10
+ * IUserRequestOptions, IHubRequestOptions etc.
11
+ *
12
+ * The context is exposed on gthe `.context` property, and as the authentication changes
13
+ * the `.context` is re-created. This is done to allow web frameworks to watch for
14
+ * changes on that single property, instead of having to leverage observers or events
15
+ * for change detection.
16
+ *
17
+ * Please see the [ArcGISContext Guide](/hub.js/guides/context) for additional information.
18
+ *
19
+ */
20
+ export class ArcGISContextManager {
21
+ /**
22
+ * Private constructor. Use `ArcGISContextManager.create(...)` to
23
+ * instantiate an instance
24
+ * @param opts
25
+ */
26
+ constructor(opts) {
27
+ this._portalUrl = "https://www.arcgis.com";
28
+ this._logLevel = Level.error;
29
+ // Having a unique id makes debugging easier
30
+ this.id = new Date().getTime();
31
+ if (opts.logLevel) {
32
+ this._logLevel = opts.logLevel;
33
+ }
34
+ Logger.setLogLevel(this._logLevel);
35
+ Logger.debug(`ArcGISContextManager:ctor: Creating ${this.id}`);
36
+ if (opts.properties) {
37
+ this._properties = opts.properties;
38
+ }
39
+ if (opts.authentication) {
40
+ this._authentication = opts.authentication;
41
+ this._portalUrl = this._authentication.portal.replace("/sharing/rest", "");
42
+ this._hubUrl = getHubApiFromPortalUrl(this._portalUrl);
43
+ }
44
+ else if (opts.portalUrl) {
45
+ this._portalUrl = opts.portalUrl;
46
+ this._hubUrl = getHubApiFromPortalUrl(this._portalUrl);
47
+ }
48
+ else {
49
+ this._hubUrl = getHubApiFromPortalUrl(this._portalUrl);
50
+ }
51
+ if (opts.portal) {
52
+ this._portalSelf = cloneObject(opts.portal);
53
+ }
54
+ if (opts.currentUser) {
55
+ this._currentUser = cloneObject(opts.currentUser);
56
+ }
57
+ }
58
+ /**
59
+ * Used to create a new instance of the ArcGISContext class.
60
+ *
61
+ * ```js
62
+ * const ctxMgr = await ArcGISContextManager.create();
63
+ * ```
64
+ *
65
+ * @param opts
66
+ * @returns
67
+ */
68
+ static async create(opts = {}) {
69
+ const ctx = new ArcGISContextManager(opts);
70
+ await ctx.initialize();
71
+ return ctx;
72
+ }
73
+ /**
74
+ * Set the Authentication (UserSession) for the context.
75
+ * This should be called when a user signs into a running
76
+ * application.
77
+ * @param auth
78
+ */
79
+ async setAuthentication(auth) {
80
+ this._authentication = auth;
81
+ this._portalUrl = auth.portal.replace("/sharing/rest", "");
82
+ await this.initialize();
83
+ }
84
+ /**
85
+ * Set the properties hash and re-create the context
86
+ * @param properties
87
+ */
88
+ setProperties(properties) {
89
+ this._properties = properties;
90
+ this._context = new ArcGISContext(this.contextOpts);
91
+ }
92
+ /**
93
+ * Clear the Authentication (UserSession). This should be
94
+ * called when a user signs out of an application, but
95
+ * the application continues running
96
+ */
97
+ clearAuthentication() {
98
+ // Reset the portalUrl from the org url to the base url
99
+ // for ArcGIS Enterprise, we just leave the _portalUrl as-is
100
+ if (!this._context.isPortal) {
101
+ this._portalUrl = getPortalBaseFromOrgUrl(this._portalUrl);
102
+ }
103
+ // Clear the auth, portalSelf and currentUser props
104
+ this._authentication = null;
105
+ this._portalSelf = null;
106
+ this._currentUser = null;
107
+ this._context = new ArcGISContext(this.contextOpts);
108
+ }
109
+ /**
110
+ * Return a reference to the current state.
111
+ * When `.setAuthentication()` or `.clearAuthenentication()` are
112
+ * called, the state will be re-created. This is done so frameworks
113
+ * like React or Ember can detect changes.
114
+ */
115
+ get context() {
116
+ return this._context;
117
+ }
118
+ /**
119
+ * If we have a UserSession, fetch portal/self and
120
+ * store that along with current user
121
+ */
122
+ async initialize() {
123
+ // if we have auth, and don't have portalSelf or currentUser, fetch them
124
+ if (this._authentication && (!this._portalSelf || !this._currentUser)) {
125
+ Logger.debug(`ArcGISContextManager-${this.id}: Initializing`);
126
+ const username = this._authentication.username;
127
+ const requests = [
128
+ getSelf({ authentication: this._authentication }),
129
+ getUser({ username, authentication: this._authentication }),
130
+ ];
131
+ try {
132
+ const [portal, user] = await Promise.all(requests);
133
+ this._portalSelf = portal;
134
+ this._currentUser = user;
135
+ Logger.debug(`ArcGISContextManager-${this.id}: received portalSelf and currentUser`);
136
+ }
137
+ catch (ex) {
138
+ const msg = `ArcGISContextManager could not fetch portal & user for "${this._authentication.username}" using ${this._authentication.portal}.`;
139
+ Logger.error(msg);
140
+ // tslint:disable-next-line:no-console
141
+ console.error(msg);
142
+ throw ex;
143
+ }
144
+ }
145
+ Logger.debug(`ArcGISContextManager-${this.id}: updating context`);
146
+ // update the context
147
+ this._context = new ArcGISContext(this.contextOpts);
148
+ }
149
+ /**
150
+ * Getter to streamline the creation of updated Context instances
151
+ */
152
+ get contextOpts() {
153
+ const contextOpts = {
154
+ id: this.id,
155
+ portalUrl: this._portalUrl,
156
+ hubUrl: this._hubUrl,
157
+ properties: this._properties,
158
+ };
159
+ if (this._authentication) {
160
+ contextOpts.authentication = this._authentication;
161
+ }
162
+ if (this._portalSelf) {
163
+ contextOpts.portalSelf = this._portalSelf;
164
+ }
165
+ if (this._currentUser) {
166
+ contextOpts.currentUser = this._currentUser;
167
+ }
168
+ return contextOpts;
169
+ }
170
+ }
171
+ //# sourceMappingURL=ArcGISContextManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArcGISContextManager.js","sourceRoot":"","sources":["../../src/ArcGISContextManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { ArcGISContextManager, } from "./ArcGISContextManager";
2
+ import { HubProjectManager } from "./projects/HubProjectManager";
3
+ /**
4
+ * Hub class can be used as an entry point to managing
5
+ * content, teams, sites, projects etc, in an organization's Hub.
6
+ *
7
+ * ```js
8
+ * import {Hub} from '@esri/hub-common';
9
+ * // create a Hub instance, authenticating as a specific user
10
+ * // working against arcgis online
11
+ * const myHub = await Hub.create({authOptions: {username: "casey", password: "jones"}});
12
+ *
13
+ * myHub.context.currentUser //=> {username: "casey", ...} as IUser
14
+ *
15
+ * const projectStore = await myHub.getProjectStore();
16
+ *
17
+ * const pavingProject = await projectStore.create({name: "12th Street Paving"});
18
+ * pavingProject.summary = "This is the 2024 planned paving of 12th Street, between 8th and 11th Ave";
19
+ * await projectStore.update(pavingProject);
20
+ * ```
21
+ *
22
+ * This is a convenience class. Hub Stores can be created
23
+ * directly, or the underlying functions can be imported an used
24
+ * as need for scenarios where these class structures introduce
25
+ * unwanted complexity
26
+ */
27
+ export class Hub {
28
+ /**
29
+ * Private so we can employ a factory function should we need
30
+ * async work during creation
31
+ * @param contextManager
32
+ */
33
+ constructor(contextManager) {
34
+ this._contextManager = contextManager;
35
+ }
36
+ /**
37
+ * Factory function to construct a new HubProjectStore instance.
38
+ *
39
+ * Note: Used so that we could do async actions in the ctor.
40
+ * @param contextManager
41
+ * @returns
42
+ */
43
+ static async create(options) {
44
+ if (options.contextManager) {
45
+ return new Hub(options.contextManager);
46
+ }
47
+ else {
48
+ const opts = options.managerOptions || {};
49
+ const mgr = await ArcGISContextManager.create(opts);
50
+ return new Hub(mgr);
51
+ }
52
+ }
53
+ /**
54
+ * Getter to abstract the context manager
55
+ */
56
+ get context() {
57
+ return this._contextManager.context;
58
+ }
59
+ /**
60
+ * Create a Project Store connected to the current Hub
61
+ * @returns
62
+ */
63
+ get projects() {
64
+ if (!this._projectManager) {
65
+ this._projectManager = HubProjectManager.init(this._contextManager);
66
+ }
67
+ return this._projectManager;
68
+ }
69
+ }
70
+ //# sourceMappingURL=Hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hub.js","sourceRoot":"","sources":["../../src/Hub.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAWjE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,GAAG;IAYd;;;;OAIG;IACH,YAAoB,cAAoC;QACtD,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAoB;QACtC,IAAI,OAAO,CAAC,cAAc,EAAE;YAC1B,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;SACxC;aAAM;YACL,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;SACrB;IACH,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACrE;QAED,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;CACF"}