sintfacilis 1.0.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 (461) hide show
  1. package/.env.example +2 -0
  2. package/.eslintrc.js +20 -0
  3. package/.github/workflows/deploy-docs.yml +27 -0
  4. package/.github/workflows/pre-release-tests.yml +45 -0
  5. package/.github/workflows/pull-request-tests.yml +45 -0
  6. package/.prettierignore +2 -0
  7. package/.prettierrc +19 -0
  8. package/.vscode/launch.json +24 -0
  9. package/.vscode/settings.json +3 -0
  10. package/codecov.yml +7 -0
  11. package/demos/.eslintrc.js +13 -0
  12. package/demos/ago-node-cli/README.md +29 -0
  13. package/demos/ago-node-cli/ago.js +33 -0
  14. package/demos/ago-node-cli/index.js +11 -0
  15. package/demos/ago-node-cli/lib/item-export-command.js +48 -0
  16. package/demos/ago-node-cli/lib/item-search-command.js +35 -0
  17. package/demos/ago-node-cli/package-lock.json +430 -0
  18. package/demos/ago-node-cli/package.json +30 -0
  19. package/demos/attachments/README.md +5 -0
  20. package/demos/attachments/index.html +165 -0
  21. package/demos/attachments/package-lock.json +543 -0
  22. package/demos/attachments/package.json +18 -0
  23. package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
  24. package/demos/batch-geocoder-node/README.md +15 -0
  25. package/demos/batch-geocoder-node/batch-geocode.js +115 -0
  26. package/demos/batch-geocoder-node/config-template.js +18 -0
  27. package/demos/batch-geocoder-node/package-lock.json +336 -0
  28. package/demos/batch-geocoder-node/package.json +37 -0
  29. package/demos/express/README.md +15 -0
  30. package/demos/express/config.json.template +3 -0
  31. package/demos/express/package-lock.json +1008 -0
  32. package/demos/express/package.json +18 -0
  33. package/demos/express/server.js +33 -0
  34. package/demos/feature-service-browser/README.md +6 -0
  35. package/demos/feature-service-browser/index.html +122 -0
  36. package/demos/feature-service-browser/package-lock.json +543 -0
  37. package/demos/feature-service-browser/package.json +18 -0
  38. package/demos/geocoder-browser/README.md +10 -0
  39. package/demos/geocoder-browser/config.js.template +1 -0
  40. package/demos/geocoder-browser/index.html +131 -0
  41. package/demos/geocoder-browser/package-lock.json +610 -0
  42. package/demos/geocoder-browser/package.json +19 -0
  43. package/demos/geocoder-browser/post-sign-in.html +25 -0
  44. package/demos/jsapi-integration/README.md +25 -0
  45. package/demos/jsapi-integration/config.js +6 -0
  46. package/demos/jsapi-integration/index.html +93 -0
  47. package/demos/jsapi-integration/package-lock.json +247 -0
  48. package/demos/jsapi-integration/package.json +19 -0
  49. package/demos/node-cli-item-management/README.md +10 -0
  50. package/demos/node-cli-item-management/index.js +238 -0
  51. package/demos/node-cli-item-management/package-lock.json +432 -0
  52. package/demos/node-cli-item-management/package.json +27 -0
  53. package/demos/node-cli-item-management/screenshot.png +0 -0
  54. package/demos/oauth2-browser/README.md +14 -0
  55. package/demos/oauth2-browser/authenticate.html +30 -0
  56. package/demos/oauth2-browser/config.js.template +6 -0
  57. package/demos/oauth2-browser/index.html +211 -0
  58. package/demos/oauth2-browser/logo.svg +4 -0
  59. package/demos/oauth2-browser/package-lock.json +474 -0
  60. package/demos/oauth2-browser/package.json +18 -0
  61. package/demos/oauth2-browser/style.css +36 -0
  62. package/demos/oauth2-browser-retry/README.md +25 -0
  63. package/demos/oauth2-browser-retry/authenticate.html +22 -0
  64. package/demos/oauth2-browser-retry/index.html +116 -0
  65. package/demos/oauth2-browser-retry/logo.svg +4 -0
  66. package/demos/stream-response-to-file/README.md +7 -0
  67. package/demos/stream-response-to-file/index.js +36 -0
  68. package/demos/stream-response-to-file/output/.gitkeep +0 -0
  69. package/demos/stream-response-to-file/package-lock.json +227 -0
  70. package/demos/stream-response-to-file/package.json +33 -0
  71. package/demos/tree-shaking-rollup/.babelrc +3 -0
  72. package/demos/tree-shaking-rollup/README.md +9 -0
  73. package/demos/tree-shaking-rollup/index.html +11 -0
  74. package/demos/tree-shaking-rollup/package-lock.json +5646 -0
  75. package/demos/tree-shaking-rollup/package.json +25 -0
  76. package/demos/tree-shaking-rollup/rollup.config.js +17 -0
  77. package/demos/tree-shaking-rollup/src/index.js +8 -0
  78. package/demos/tree-shaking-webpack/README.md +8 -0
  79. package/demos/tree-shaking-webpack/index.html +11 -0
  80. package/demos/tree-shaking-webpack/package-lock.json +11455 -0
  81. package/demos/tree-shaking-webpack/package.json +24 -0
  82. package/demos/tree-shaking-webpack/src/index.js +10 -0
  83. package/demos/tree-shaking-webpack/webpack.config.js +27 -0
  84. package/demos/vue/.env.example +11 -0
  85. package/demos/vue/.eslintrc.js +17 -0
  86. package/demos/vue/.postcssrc.js +5 -0
  87. package/demos/vue/README.md +17 -0
  88. package/demos/vue/babel.config.js +3 -0
  89. package/demos/vue/package-lock.json +28044 -0
  90. package/demos/vue/package.json +33 -0
  91. package/demos/vue/public/favicon.ico +0 -0
  92. package/demos/vue/public/index.html +24 -0
  93. package/demos/vue/src/assets/logo.svg +29 -0
  94. package/demos/vue/src/components/App.vue +305 -0
  95. package/demos/vue/src/components/Authenticate.vue +65 -0
  96. package/demos/vue/src/components/Loader.vue +230 -0
  97. package/demos/vue/src/main.js +92 -0
  98. package/demos/webmap-checker-sapper/.env.example +5 -0
  99. package/demos/webmap-checker-sapper/README.md +123 -0
  100. package/demos/webmap-checker-sapper/appveyor.yml +18 -0
  101. package/demos/webmap-checker-sapper/cypress/fixtures/example.json +5 -0
  102. package/demos/webmap-checker-sapper/cypress/integration/spec.js +19 -0
  103. package/demos/webmap-checker-sapper/cypress/plugins/index.js +17 -0
  104. package/demos/webmap-checker-sapper/cypress/support/commands.js +25 -0
  105. package/demos/webmap-checker-sapper/cypress/support/index.js +20 -0
  106. package/demos/webmap-checker-sapper/cypress.json +4 -0
  107. package/demos/webmap-checker-sapper/package-lock.json +9622 -0
  108. package/demos/webmap-checker-sapper/package.json +50 -0
  109. package/demos/webmap-checker-sapper/rollup.config.js +87 -0
  110. package/demos/webmap-checker-sapper/src/client.js +20 -0
  111. package/demos/webmap-checker-sapper/src/components/LayerStatus.html +108 -0
  112. package/demos/webmap-checker-sapper/src/components/Nav.html +21 -0
  113. package/demos/webmap-checker-sapper/src/components/WebMap.html +62 -0
  114. package/demos/webmap-checker-sapper/src/routes/_error.html +41 -0
  115. package/demos/webmap-checker-sapper/src/routes/_layout.html +21 -0
  116. package/demos/webmap-checker-sapper/src/routes/auth/authorize.js +18 -0
  117. package/demos/webmap-checker-sapper/src/routes/auth/exchange-token.js +20 -0
  118. package/demos/webmap-checker-sapper/src/routes/auth/post-sign-in.js +24 -0
  119. package/demos/webmap-checker-sapper/src/routes/auth/sign-out.js +10 -0
  120. package/demos/webmap-checker-sapper/src/routes/index.html +20 -0
  121. package/demos/webmap-checker-sapper/src/routes/webmaps/[webmapId].html +83 -0
  122. package/demos/webmap-checker-sapper/src/routes/webmaps/index.html +59 -0
  123. package/demos/webmap-checker-sapper/src/server.js +101 -0
  124. package/demos/webmap-checker-sapper/src/service-worker.js +82 -0
  125. package/demos/webmap-checker-sapper/src/template.html +33 -0
  126. package/demos/webmap-checker-sapper/src/userInfoMiddleware.js +21 -0
  127. package/demos/webmap-checker-sapper/src/utils.js +33 -0
  128. package/demos/webmap-checker-sapper/static/favicon.png +0 -0
  129. package/demos/webmap-checker-sapper/static/global.css +36 -0
  130. package/demos/webmap-checker-sapper/static/manifest.json +20 -0
  131. package/demos/webmap-checker-sapper/static/svelte-logo-192.png +0 -0
  132. package/demos/webmap-checker-sapper/static/svelte-logo-512.png +0 -0
  133. package/docs/.eslintrc.js +12 -0
  134. package/docs/FAQ.md +48 -0
  135. package/docs/HISTORY.md +62 -0
  136. package/docs/acetate.config.js +262 -0
  137. package/docs/build-typedoc.js +434 -0
  138. package/docs/generate-srihashes.js +53 -0
  139. package/docs/src/_layout.html +86 -0
  140. package/docs/src/api/_declaration.html +600 -0
  141. package/docs/src/api/_layout.html +204 -0
  142. package/docs/src/api/_package.html +38 -0
  143. package/docs/src/api/index.html +16 -0
  144. package/docs/src/guides/_layout.html +24 -0
  145. package/docs/src/guides/amd-requirejs-dojo.md +40 -0
  146. package/docs/src/guides/browser-authentication.md +39 -0
  147. package/docs/src/guides/bundlers.md +52 -0
  148. package/docs/src/guides/cli-authentication.md +9 -0
  149. package/docs/src/guides/client-server-authentication.md +9 -0
  150. package/docs/src/guides/embedded-apps.md +106 -0
  151. package/docs/src/guides/from-a-cdn.md +38 -0
  152. package/docs/src/guides/index.md +59 -0
  153. package/docs/src/guides/node.md +104 -0
  154. package/docs/src/guides/package-overview.md +111 -0
  155. package/docs/src/guides/server-authentication.md +9 -0
  156. package/docs/src/guides/whats-new-v2-0.md +305 -0
  157. package/docs/src/img/icons.png +0 -0
  158. package/docs/src/img/icons@2x.png +0 -0
  159. package/docs/src/img/oauth-browser.png +0 -0
  160. package/docs/src/index.html +12 -0
  161. package/docs/src/js/api-search.js +112 -0
  162. package/docs/src/js/nav-toggle.js +41 -0
  163. package/docs/src/sass/_highlight.scss +96 -0
  164. package/docs/src/sass/_icons.scss +157 -0
  165. package/docs/src/sass/style.scss +242 -0
  166. package/docs/src/srihashes.json +12 -0
  167. package/jasmine.json +7 -0
  168. package/jasmine.live.json +7 -0
  169. package/karma.conf.js +107 -0
  170. package/lerna.json +8 -0
  171. package/notes/README.md +68 -0
  172. package/package.json +141 -0
  173. package/packages/arcgis-rest-auth/README.md +71 -0
  174. package/packages/arcgis-rest-auth/package.json +69 -0
  175. package/packages/arcgis-rest-auth/post-message-auth-spec.md +70 -0
  176. package/packages/arcgis-rest-auth/src/ApiKey.ts +41 -0
  177. package/packages/arcgis-rest-auth/src/ApplicationSession.ts +122 -0
  178. package/packages/arcgis-rest-auth/src/UserSession.ts +1355 -0
  179. package/packages/arcgis-rest-auth/src/app-tokens.ts +131 -0
  180. package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +24 -0
  181. package/packages/arcgis-rest-auth/src/federation-utils.ts +85 -0
  182. package/packages/arcgis-rest-auth/src/fetch-token.ts +50 -0
  183. package/packages/arcgis-rest-auth/src/generate-token.ts +35 -0
  184. package/packages/arcgis-rest-auth/src/index.ts +13 -0
  185. package/packages/arcgis-rest-auth/src/validate-app-access.ts +68 -0
  186. package/packages/arcgis-rest-auth/test/ApiKey.test.ts +35 -0
  187. package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +124 -0
  188. package/packages/arcgis-rest-auth/test/UserSession.test.ts +2377 -0
  189. package/packages/arcgis-rest-auth/test/app-tokens.test.ts +95 -0
  190. package/packages/arcgis-rest-auth/test/federation-utils.test.ts +323 -0
  191. package/packages/arcgis-rest-auth/test/fetchToken.test.ts +112 -0
  192. package/packages/arcgis-rest-auth/test/generateToken.test.ts +102 -0
  193. package/packages/arcgis-rest-auth/test/utils.ts +14 -0
  194. package/packages/arcgis-rest-auth/test/validate-app-access.test.ts +46 -0
  195. package/packages/arcgis-rest-auth/tsconfig.json +6 -0
  196. package/packages/arcgis-rest-demographics/README.md +75 -0
  197. package/packages/arcgis-rest-demographics/package.json +69 -0
  198. package/packages/arcgis-rest-demographics/src/getAvailableCountries.ts +113 -0
  199. package/packages/arcgis-rest-demographics/src/getAvailableDataCollections.ts +166 -0
  200. package/packages/arcgis-rest-demographics/src/getAvailableGeographyLevels.ts +88 -0
  201. package/packages/arcgis-rest-demographics/src/getGeography.ts +152 -0
  202. package/packages/arcgis-rest-demographics/src/helpers.ts +28 -0
  203. package/packages/arcgis-rest-demographics/src/index.ts +8 -0
  204. package/packages/arcgis-rest-demographics/src/queryDemographicData.ts +106 -0
  205. package/packages/arcgis-rest-demographics/test/getAvailableCountries.test.ts +92 -0
  206. package/packages/arcgis-rest-demographics/test/getAvailableDataCollections.test.ts +115 -0
  207. package/packages/arcgis-rest-demographics/test/getAvailableGeographyLevels.test.ts +72 -0
  208. package/packages/arcgis-rest-demographics/test/getGeography.test.ts +141 -0
  209. package/packages/arcgis-rest-demographics/test/mocks/responses.ts +4 -0
  210. package/packages/arcgis-rest-demographics/test/queryDemographicData.test.live.ts +42 -0
  211. package/packages/arcgis-rest-demographics/test/queryDemographicData.test.ts +113 -0
  212. package/packages/arcgis-rest-demographics/tsconfig.json +6 -0
  213. package/packages/arcgis-rest-feature-layer/README.md +77 -0
  214. package/packages/arcgis-rest-feature-layer/package.json +64 -0
  215. package/packages/arcgis-rest-feature-layer/src/add.ts +56 -0
  216. package/packages/arcgis-rest-feature-layer/src/addAttachment.ts +53 -0
  217. package/packages/arcgis-rest-feature-layer/src/applyEdits.ts +95 -0
  218. package/packages/arcgis-rest-feature-layer/src/decodeValues.ts +122 -0
  219. package/packages/arcgis-rest-feature-layer/src/delete.ts +61 -0
  220. package/packages/arcgis-rest-feature-layer/src/deleteAttachments.ts +52 -0
  221. package/packages/arcgis-rest-feature-layer/src/getAllLayersAndTables.ts +30 -0
  222. package/packages/arcgis-rest-feature-layer/src/getAttachments.ts +55 -0
  223. package/packages/arcgis-rest-feature-layer/src/getLayer.ts +24 -0
  224. package/packages/arcgis-rest-feature-layer/src/getService.ts +26 -0
  225. package/packages/arcgis-rest-feature-layer/src/helpers.ts +97 -0
  226. package/packages/arcgis-rest-feature-layer/src/index.ts +32 -0
  227. package/packages/arcgis-rest-feature-layer/src/query.ts +204 -0
  228. package/packages/arcgis-rest-feature-layer/src/queryRelated.ts +89 -0
  229. package/packages/arcgis-rest-feature-layer/src/update.ts +60 -0
  230. package/packages/arcgis-rest-feature-layer/src/updateAttachment.ts +59 -0
  231. package/packages/arcgis-rest-feature-layer/test/attachments.test.ts +200 -0
  232. package/packages/arcgis-rest-feature-layer/test/crud.test.ts +197 -0
  233. package/packages/arcgis-rest-feature-layer/test/decodeValues.test.ts +67 -0
  234. package/packages/arcgis-rest-feature-layer/test/getAllLayersAndTables.test.ts +28 -0
  235. package/packages/arcgis-rest-feature-layer/test/getLayer.test.ts +31 -0
  236. package/packages/arcgis-rest-feature-layer/test/getService.test.ts +31 -0
  237. package/packages/arcgis-rest-feature-layer/test/helpers.test.ts +25 -0
  238. package/packages/arcgis-rest-feature-layer/test/mocks/allLayersAndTablesResponse.ts +906 -0
  239. package/packages/arcgis-rest-feature-layer/test/mocks/cvdQueryResponse.ts +225 -0
  240. package/packages/arcgis-rest-feature-layer/test/mocks/feature.ts +302 -0
  241. package/packages/arcgis-rest-feature-layer/test/mocks/fields.ts +779 -0
  242. package/packages/arcgis-rest-feature-layer/test/mocks/foo.txt +1 -0
  243. package/packages/arcgis-rest-feature-layer/test/mocks/service.ts +398 -0
  244. package/packages/arcgis-rest-feature-layer/test/query.test.ts +167 -0
  245. package/packages/arcgis-rest-feature-layer/tsconfig.json +6 -0
  246. package/packages/arcgis-rest-geocoding/README.md +86 -0
  247. package/packages/arcgis-rest-geocoding/package.json +66 -0
  248. package/packages/arcgis-rest-geocoding/src/bulk.ts +104 -0
  249. package/packages/arcgis-rest-geocoding/src/geocode.ts +166 -0
  250. package/packages/arcgis-rest-geocoding/src/helpers.ts +56 -0
  251. package/packages/arcgis-rest-geocoding/src/index.ts +15 -0
  252. package/packages/arcgis-rest-geocoding/src/reverse.ts +84 -0
  253. package/packages/arcgis-rest-geocoding/src/suggest.ts +45 -0
  254. package/packages/arcgis-rest-geocoding/test/bulk.test.ts +194 -0
  255. package/packages/arcgis-rest-geocoding/test/geocode.test.ts +253 -0
  256. package/packages/arcgis-rest-geocoding/test/helpers.test.ts +85 -0
  257. package/packages/arcgis-rest-geocoding/test/mocks/responses.ts +591 -0
  258. package/packages/arcgis-rest-geocoding/test/reverse.test.ts +126 -0
  259. package/packages/arcgis-rest-geocoding/test/suggest.test.ts +53 -0
  260. package/packages/arcgis-rest-geocoding/tsconfig.json +6 -0
  261. package/packages/arcgis-rest-portal/README.md +73 -0
  262. package/packages/arcgis-rest-portal/package.json +64 -0
  263. package/packages/arcgis-rest-portal/src/groups/add-users.ts +140 -0
  264. package/packages/arcgis-rest-portal/src/groups/create.ts +43 -0
  265. package/packages/arcgis-rest-portal/src/groups/get.ts +184 -0
  266. package/packages/arcgis-rest-portal/src/groups/helpers.ts +14 -0
  267. package/packages/arcgis-rest-portal/src/groups/invite-users.ts +127 -0
  268. package/packages/arcgis-rest-portal/src/groups/join.ts +57 -0
  269. package/packages/arcgis-rest-portal/src/groups/notification.ts +77 -0
  270. package/packages/arcgis-rest-portal/src/groups/protect.ts +56 -0
  271. package/packages/arcgis-rest-portal/src/groups/remove-users.ts +76 -0
  272. package/packages/arcgis-rest-portal/src/groups/remove.ts +32 -0
  273. package/packages/arcgis-rest-portal/src/groups/search.ts +47 -0
  274. package/packages/arcgis-rest-portal/src/groups/update-user-membership.ts +63 -0
  275. package/packages/arcgis-rest-portal/src/groups/update.ts +39 -0
  276. package/packages/arcgis-rest-portal/src/index.ts +69 -0
  277. package/packages/arcgis-rest-portal/src/items/add.ts +138 -0
  278. package/packages/arcgis-rest-portal/src/items/content.ts +67 -0
  279. package/packages/arcgis-rest-portal/src/items/create.ts +150 -0
  280. package/packages/arcgis-rest-portal/src/items/export.ts +80 -0
  281. package/packages/arcgis-rest-portal/src/items/get.ts +437 -0
  282. package/packages/arcgis-rest-portal/src/items/helpers.ts +292 -0
  283. package/packages/arcgis-rest-portal/src/items/protect.ts +41 -0
  284. package/packages/arcgis-rest-portal/src/items/reassign.ts +61 -0
  285. package/packages/arcgis-rest-portal/src/items/remove.ts +141 -0
  286. package/packages/arcgis-rest-portal/src/items/search.ts +25 -0
  287. package/packages/arcgis-rest-portal/src/items/update.ts +185 -0
  288. package/packages/arcgis-rest-portal/src/items/upload.ts +125 -0
  289. package/packages/arcgis-rest-portal/src/orgs/notification.ts +131 -0
  290. package/packages/arcgis-rest-portal/src/services/get-unique-service-name.ts +35 -0
  291. package/packages/arcgis-rest-portal/src/services/is-service-name-available.ts +30 -0
  292. package/packages/arcgis-rest-portal/src/sharing/access.ts +84 -0
  293. package/packages/arcgis-rest-portal/src/sharing/helpers.ts +81 -0
  294. package/packages/arcgis-rest-portal/src/sharing/is-item-shared-with-group.ts +42 -0
  295. package/packages/arcgis-rest-portal/src/sharing/share-item-with-group.ts +336 -0
  296. package/packages/arcgis-rest-portal/src/sharing/unshare-item-with-group.ts +105 -0
  297. package/packages/arcgis-rest-portal/src/users/get-user-tags.ts +52 -0
  298. package/packages/arcgis-rest-portal/src/users/get-user-url.ts +18 -0
  299. package/packages/arcgis-rest-portal/src/users/get-user.ts +58 -0
  300. package/packages/arcgis-rest-portal/src/users/invitation.ts +156 -0
  301. package/packages/arcgis-rest-portal/src/users/notification.ts +68 -0
  302. package/packages/arcgis-rest-portal/src/users/search-users.ts +37 -0
  303. package/packages/arcgis-rest-portal/src/users/update.ts +66 -0
  304. package/packages/arcgis-rest-portal/src/util/SearchQueryBuilder.ts +391 -0
  305. package/packages/arcgis-rest-portal/src/util/array.ts +16 -0
  306. package/packages/arcgis-rest-portal/src/util/generic-search.ts +99 -0
  307. package/packages/arcgis-rest-portal/src/util/get-portal-settings.ts +45 -0
  308. package/packages/arcgis-rest-portal/src/util/get-portal-url.ts +28 -0
  309. package/packages/arcgis-rest-portal/src/util/get-portal.ts +53 -0
  310. package/packages/arcgis-rest-portal/src/util/get-subscription-info.ts +43 -0
  311. package/packages/arcgis-rest-portal/src/util/scrub-control-chars.ts +13 -0
  312. package/packages/arcgis-rest-portal/src/util/search.ts +42 -0
  313. package/packages/arcgis-rest-portal/test/groups/add-users.test.ts +239 -0
  314. package/packages/arcgis-rest-portal/test/groups/crud.test.ts +180 -0
  315. package/packages/arcgis-rest-portal/test/groups/get.test.ts +176 -0
  316. package/packages/arcgis-rest-portal/test/groups/invite-users.test.ts +146 -0
  317. package/packages/arcgis-rest-portal/test/groups/join.test.ts +72 -0
  318. package/packages/arcgis-rest-portal/test/groups/notification.test.ts +112 -0
  319. package/packages/arcgis-rest-portal/test/groups/protect.test.ts +72 -0
  320. package/packages/arcgis-rest-portal/test/groups/remove-users.test.ts +140 -0
  321. package/packages/arcgis-rest-portal/test/groups/search.test.ts +151 -0
  322. package/packages/arcgis-rest-portal/test/groups/update-user-membership.test.ts +62 -0
  323. package/packages/arcgis-rest-portal/test/items/add.test.ts +323 -0
  324. package/packages/arcgis-rest-portal/test/items/content.test.ts +156 -0
  325. package/packages/arcgis-rest-portal/test/items/create.test.ts +400 -0
  326. package/packages/arcgis-rest-portal/test/items/export.test.ts +122 -0
  327. package/packages/arcgis-rest-portal/test/items/get.test.ts +583 -0
  328. package/packages/arcgis-rest-portal/test/items/helpers.test.ts +60 -0
  329. package/packages/arcgis-rest-portal/test/items/protect.test.ts +122 -0
  330. package/packages/arcgis-rest-portal/test/items/reassign.test.ts +131 -0
  331. package/packages/arcgis-rest-portal/test/items/remove.test.ts +261 -0
  332. package/packages/arcgis-rest-portal/test/items/search.test.ts +275 -0
  333. package/packages/arcgis-rest-portal/test/items/update.test.ts +556 -0
  334. package/packages/arcgis-rest-portal/test/items/upload.test.ts +282 -0
  335. package/packages/arcgis-rest-portal/test/mocks/groups/responses.ts +208 -0
  336. package/packages/arcgis-rest-portal/test/mocks/items/foo.zip +0 -0
  337. package/packages/arcgis-rest-portal/test/mocks/items/item.ts +526 -0
  338. package/packages/arcgis-rest-portal/test/mocks/items/resources.ts +38 -0
  339. package/packages/arcgis-rest-portal/test/mocks/items/search.ts +121 -0
  340. package/packages/arcgis-rest-portal/test/mocks/portal/response.ts +126 -0
  341. package/packages/arcgis-rest-portal/test/mocks/portal/settings-response.ts +56 -0
  342. package/packages/arcgis-rest-portal/test/mocks/sharing/sharing.ts +18 -0
  343. package/packages/arcgis-rest-portal/test/mocks/users/invitation.ts +70 -0
  344. package/packages/arcgis-rest-portal/test/mocks/users/notification.ts +34 -0
  345. package/packages/arcgis-rest-portal/test/mocks/users/user-search.ts +388 -0
  346. package/packages/arcgis-rest-portal/test/mocks/users/user-tags.ts +5 -0
  347. package/packages/arcgis-rest-portal/test/mocks/users/user.ts +174 -0
  348. package/packages/arcgis-rest-portal/test/orgs/notification.test.ts +144 -0
  349. package/packages/arcgis-rest-portal/test/services/get-unique-service-name.test.ts +59 -0
  350. package/packages/arcgis-rest-portal/test/services/is-service-name-available.test.ts +46 -0
  351. package/packages/arcgis-rest-portal/test/sharing/access.test.ts +162 -0
  352. package/packages/arcgis-rest-portal/test/sharing/helpers.test.ts +55 -0
  353. package/packages/arcgis-rest-portal/test/sharing/share-item-with-group.test.ts +1328 -0
  354. package/packages/arcgis-rest-portal/test/sharing/unshare-item-with-group.test.ts +288 -0
  355. package/packages/arcgis-rest-portal/test/users/get-user-tags.test.ts +71 -0
  356. package/packages/arcgis-rest-portal/test/users/get-user-url.test.ts +40 -0
  357. package/packages/arcgis-rest-portal/test/users/get-user.test.ts +90 -0
  358. package/packages/arcgis-rest-portal/test/users/invitation.test.ts +127 -0
  359. package/packages/arcgis-rest-portal/test/users/notification.test.ts +77 -0
  360. package/packages/arcgis-rest-portal/test/users/search.test.ts +42 -0
  361. package/packages/arcgis-rest-portal/test/users/update.test.ts +151 -0
  362. package/packages/arcgis-rest-portal/test/util/SearchQueryBuilder.test.ts +340 -0
  363. package/packages/arcgis-rest-portal/test/util/array.test.ts +30 -0
  364. package/packages/arcgis-rest-portal/test/util/get-portal-settings.test.ts +68 -0
  365. package/packages/arcgis-rest-portal/test/util/get-portal-url.test.ts +37 -0
  366. package/packages/arcgis-rest-portal/test/util/portal.test.ts +148 -0
  367. package/packages/arcgis-rest-portal/test/util/scrub-control-chars.test.ts +22 -0
  368. package/packages/arcgis-rest-portal/tsconfig.json +6 -0
  369. package/packages/arcgis-rest-request/README.md +72 -0
  370. package/packages/arcgis-rest-request/package.json +60 -0
  371. package/packages/arcgis-rest-request/src/index.ts +25 -0
  372. package/packages/arcgis-rest-request/src/request.ts +433 -0
  373. package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +76 -0
  374. package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
  375. package/packages/arcgis-rest-request/src/utils/GrantTypes.ts +5 -0
  376. package/packages/arcgis-rest-request/src/utils/HTTPMethods.ts +6 -0
  377. package/packages/arcgis-rest-request/src/utils/IAuthenticationManager.ts +22 -0
  378. package/packages/arcgis-rest-request/src/utils/IFetchTokenParams.ts +11 -0
  379. package/packages/arcgis-rest-request/src/utils/IGenerateTokenParams.ts +9 -0
  380. package/packages/arcgis-rest-request/src/utils/IParamBuilder.ts +3 -0
  381. package/packages/arcgis-rest-request/src/utils/IParams.ts +6 -0
  382. package/packages/arcgis-rest-request/src/utils/IParamsBuilder.ts +5 -0
  383. package/packages/arcgis-rest-request/src/utils/IRequestOptions.ts +54 -0
  384. package/packages/arcgis-rest-request/src/utils/ITokenRequestOptions.ts +9 -0
  385. package/packages/arcgis-rest-request/src/utils/ResponseFormats.ts +10 -0
  386. package/packages/arcgis-rest-request/src/utils/append-custom-params.ts +49 -0
  387. package/packages/arcgis-rest-request/src/utils/clean-url.ts +20 -0
  388. package/packages/arcgis-rest-request/src/utils/decode-query-string.ts +27 -0
  389. package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +38 -0
  390. package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +35 -0
  391. package/packages/arcgis-rest-request/src/utils/process-params.ts +109 -0
  392. package/packages/arcgis-rest-request/src/utils/retryAuthError.ts +10 -0
  393. package/packages/arcgis-rest-request/src/utils/warn.ts +11 -0
  394. package/packages/arcgis-rest-request/src/utils/with-options.ts +48 -0
  395. package/packages/arcgis-rest-request/test/mocks/errors.ts +76 -0
  396. package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
  397. package/packages/arcgis-rest-request/test/mocks/param-builder.ts +7 -0
  398. package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +41 -0
  399. package/packages/arcgis-rest-request/test/mocks/webmap.ts +41 -0
  400. package/packages/arcgis-rest-request/test/request.test.ts +621 -0
  401. package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +191 -0
  402. package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +51 -0
  403. package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +111 -0
  404. package/packages/arcgis-rest-request/test/utils/clean-url.test.ts +50 -0
  405. package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +133 -0
  406. package/packages/arcgis-rest-request/test/utils/encode-query-string.test.ts +18 -0
  407. package/packages/arcgis-rest-request/test/utils/process-params.test.ts +205 -0
  408. package/packages/arcgis-rest-request/test/utils/with-options.test.ts +133 -0
  409. package/packages/arcgis-rest-request/tsconfig.json +4 -0
  410. package/packages/arcgis-rest-routing/README.md +75 -0
  411. package/packages/arcgis-rest-routing/package.json +65 -0
  412. package/packages/arcgis-rest-routing/src/closestFacility.ts +225 -0
  413. package/packages/arcgis-rest-routing/src/helpers.ts +104 -0
  414. package/packages/arcgis-rest-routing/src/index.ts +14 -0
  415. package/packages/arcgis-rest-routing/src/originDestinationMatrix.ts +223 -0
  416. package/packages/arcgis-rest-routing/src/serviceArea.ts +173 -0
  417. package/packages/arcgis-rest-routing/src/solveRoute.ts +180 -0
  418. package/packages/arcgis-rest-routing/test/closestFacility.test.ts +683 -0
  419. package/packages/arcgis-rest-routing/test/mocks/inputs.ts +132 -0
  420. package/packages/arcgis-rest-routing/test/mocks/responses.ts +13316 -0
  421. package/packages/arcgis-rest-routing/test/originDestinationMatrix.test.ts +795 -0
  422. package/packages/arcgis-rest-routing/test/serviceArea.test.ts +601 -0
  423. package/packages/arcgis-rest-routing/test/solveRoute.test.ts +677 -0
  424. package/packages/arcgis-rest-routing/tsconfig.json +6 -0
  425. package/packages/arcgis-rest-service-admin/README.md +73 -0
  426. package/packages/arcgis-rest-service-admin/package.json +65 -0
  427. package/packages/arcgis-rest-service-admin/src/addTo.ts +70 -0
  428. package/packages/arcgis-rest-service-admin/src/create.ts +189 -0
  429. package/packages/arcgis-rest-service-admin/src/get-service-admin-info.ts +34 -0
  430. package/packages/arcgis-rest-service-admin/src/get-view-sources.ts +20 -0
  431. package/packages/arcgis-rest-service-admin/src/index.ts +14 -0
  432. package/packages/arcgis-rest-service-admin/src/update.ts +50 -0
  433. package/packages/arcgis-rest-service-admin/test/addTo.test.ts +350 -0
  434. package/packages/arcgis-rest-service-admin/test/create.test.ts +294 -0
  435. package/packages/arcgis-rest-service-admin/test/get-service-admin-info.test.ts +37 -0
  436. package/packages/arcgis-rest-service-admin/test/get-view-sources.test.ts +40 -0
  437. package/packages/arcgis-rest-service-admin/test/mocks/layerDefinition.ts +79 -0
  438. package/packages/arcgis-rest-service-admin/test/mocks/service.ts +81 -0
  439. package/packages/arcgis-rest-service-admin/test/update.test.ts +115 -0
  440. package/packages/arcgis-rest-service-admin/tsconfig.json +5 -0
  441. package/packages/arcgis-rest-types/README.md +66 -0
  442. package/packages/arcgis-rest-types/package.json +54 -0
  443. package/packages/arcgis-rest-types/src/feature.ts +42 -0
  444. package/packages/arcgis-rest-types/src/geometry.ts +272 -0
  445. package/packages/arcgis-rest-types/src/group.ts +72 -0
  446. package/packages/arcgis-rest-types/src/index.ts +9 -0
  447. package/packages/arcgis-rest-types/src/item.ts +81 -0
  448. package/packages/arcgis-rest-types/src/service.ts +156 -0
  449. package/packages/arcgis-rest-types/src/statisticDefinition.ts +33 -0
  450. package/packages/arcgis-rest-types/src/symbol.ts +170 -0
  451. package/packages/arcgis-rest-types/src/user.ts +49 -0
  452. package/packages/arcgis-rest-types/src/webmap.ts +1405 -0
  453. package/packages/arcgis-rest-types/tsconfig.json +10 -0
  454. package/support/changelog.js +393 -0
  455. package/support/deploy-doc-site.js +16 -0
  456. package/support/dev.sh +6 -0
  457. package/support/publish.sh +47 -0
  458. package/support/test-helpers.js +9 -0
  459. package/tsconfig.json +63 -0
  460. package/umd-base-profile.js +81 -0
  461. package/umd-production-profile.js +13 -0
@@ -0,0 +1,131 @@
1
+ /* Copyright (c) 2018-2020 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { IRequestOptions, request } from "@esri/arcgis-rest-request";
5
+
6
+ /**
7
+ * Request app-specific token, passing in the token for the current app.
8
+ *
9
+ * This call returns a token after performing the same checks made by validateAppAccess.
10
+ * It returns an app-specific token of the signed-in user only if the user has access
11
+ * to the app and the encrypted platform cookie is valid.
12
+ *
13
+ * A scenario where an app would use this is if it is iframed into another platform app
14
+ * and receives credentials via postMessage. Those credentials contain a token that is
15
+ * specific to the host app, so the embedded app would use `exchangeToken` to get one
16
+ * that is specific to itself.
17
+ *
18
+ * Note: This is only usable by Esri applications hosted on *arcgis.com, *esri.com or within
19
+ * an ArcGIS Enterprise installation. Custom applications can not use this.
20
+ *
21
+ * @param token
22
+ * @param clientId application
23
+ * @param portal
24
+ */
25
+ export function exchangeToken(
26
+ token: string,
27
+ clientId: string,
28
+ portal = "https://www.arcgis.com/sharing/rest"
29
+ ): Promise<string> {
30
+ const url = `${portal}/oauth2/exchangeToken`;
31
+ const ro = {
32
+ method: "POST",
33
+ params: {
34
+ f: "json",
35
+ client_id: clientId,
36
+ token,
37
+ },
38
+ } as IRequestOptions;
39
+ // make the request and return the token
40
+ return request(url, ro).then((response) => response.token);
41
+ }
42
+
43
+ /**
44
+ * Response from the `platformSelf(...)` function.
45
+ */
46
+ export interface IPlatformSelfResponse {
47
+ /**
48
+ * Username of the user the encrypted cookie was issued for
49
+ */
50
+ username: string;
51
+ /**
52
+ * Token the consuming application can use, It is tied to the
53
+ * clientId used in the `platformSelf` call
54
+ */
55
+ token: string;
56
+ /**
57
+ * Token expiration, in seconds-from-now
58
+ */
59
+ expires_in: number;
60
+ }
61
+
62
+ /**
63
+ * Request a token for a specific application using the esri_aopc encrypted cookie
64
+ *
65
+ * When a client app boots up, it will know its clientId and the redirectUri for use
66
+ * in the normal /oauth/authorize pop-out oAuth flow.
67
+ *
68
+ * If the app sees an `esri_aopc` cookie (only set if the app is hosted on *.arcgis.com),
69
+ * it can call the /oauth2/platformSelf end-point passing in the clientId and redirectUri
70
+ * in headers, and it will receive back an app-specific token, assuming the user has
71
+ * access to the app.
72
+ *
73
+ * Since there are scenarios where an app can boot using credentials/token from localstorage
74
+ * but those credentials are not for the same user as the esri_aopc cookie, it is recommended that
75
+ * an app check the returned username against any existing identity they may have loaded.
76
+ *
77
+ * Note: This is only usable by Esri applications hosted on *arcgis.com, *esri.com or within
78
+ * an ArcGIS Enterprise installation. Custom applications can not use this.
79
+ *
80
+ * ```js
81
+ * // convert the encrypted platform cookie into a UserSession
82
+ * import { platformSelf, UserSession } from '@esri/arcgis-rest-auth';
83
+ *
84
+ * const portal = 'https://www.arcgis.com/sharing/rest';
85
+ * const clientId = 'YOURAPPCLIENTID';
86
+ *
87
+ * // exchange esri_aopc cookie
88
+ * return platformSelf(clientId, 'https://your-app-redirect-uri', portal)
89
+ * .then((response) => {
90
+ * const currentTimestamp = new Date().getTime();
91
+ * const tokenExpiresTimestamp = currentTimestamp + (response.expires_in * 1000);
92
+ * // Construct the session and return it
93
+ * return new UserSession({
94
+ * portal,
95
+ * clientId,
96
+ * username: response.username,
97
+ * token: response.token,
98
+ * tokenExpires: new Date(tokenExpiresTimestamp),
99
+ * ssl: true
100
+ * });
101
+ * })
102
+ *
103
+ * ```
104
+ *
105
+ *
106
+ * @param clientId
107
+ * @param redirectUri
108
+ * @param portal
109
+ */
110
+ export function platformSelf(
111
+ clientId: string,
112
+ redirectUri: string,
113
+ portal = "https://www.arcgis.com/sharing/rest"
114
+ ): Promise<IPlatformSelfResponse> {
115
+ // TEMPORARY: the f=json should not be needed, but currently is
116
+ const url = `${portal}/oauth2/platformSelf?f=json`;
117
+ const ro = {
118
+ method: "POST",
119
+ headers: {
120
+ "X-Esri-Auth-Client-Id": clientId,
121
+ "X-Esri-Auth-Redirect-Uri": redirectUri,
122
+ },
123
+ // Note: request has logic to include the cookie
124
+ // for platformSelf calls w/ the X-Esri-Auth-Client-Id header
125
+ params: {
126
+ f: "json",
127
+ },
128
+ } as IRequestOptions;
129
+ // make the request and return the token
130
+ return request(url, ro);
131
+ }
@@ -0,0 +1,24 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { ApplicationSession } from "./ApplicationSession";
5
+ import { UserSession } from "./UserSession";
6
+
7
+ import { IRequestOptions } from "@esri/arcgis-rest-request";
8
+
9
+ /**
10
+ * Used internally by packages for requests that require user authentication.
11
+ */
12
+ export interface IAuthenticatedRequestOptions extends IRequestOptions {
13
+ authentication: UserSession | ApplicationSession;
14
+ }
15
+
16
+ /**
17
+ * Used internally by packages for requests that require authentication.
18
+ */
19
+ export interface IUserRequestOptions extends IRequestOptions {
20
+ /**
21
+ * A session representing a logged in user.
22
+ */
23
+ authentication: UserSession;
24
+ }
@@ -0,0 +1,85 @@
1
+ import { cleanUrl } from "@esri/arcgis-rest-request";
2
+ /**
3
+ * Used to test if a URL is an ArcGIS Online URL
4
+ */
5
+ const arcgisOnlineUrlRegex = /^https?:\/\/(\S+)\.arcgis\.com.+/;
6
+
7
+ /**
8
+ * Used to test if a URL is production ArcGIS Online Portal
9
+ */
10
+ const arcgisOnlinePortalRegex = /^https?:\/\/(dev|devext|qa|qaext|www)\.arcgis\.com\/sharing\/rest+/;
11
+
12
+ /**
13
+ * Used to test if a URL is an ArcGIS Online Organization Portal
14
+ */
15
+ const arcgisOnlineOrgPortalRegex = /^https?:\/\/(?:[a-z0-9-]+\.maps(dev|devext|qa|qaext)?)?.arcgis\.com\/sharing\/rest/;
16
+
17
+ export function isOnline(url: string): boolean {
18
+ return arcgisOnlineUrlRegex.test(url);
19
+ }
20
+
21
+ export function normalizeOnlinePortalUrl(portalUrl: string): string {
22
+ if (!arcgisOnlineUrlRegex.test(portalUrl)) {
23
+ return portalUrl;
24
+ }
25
+
26
+ switch (getOnlineEnvironment(portalUrl)) {
27
+ case "dev":
28
+ return "https://devext.arcgis.com/sharing/rest";
29
+ case "qa":
30
+ return "https://qaext.arcgis.com/sharing/rest";
31
+ default:
32
+ return "https://www.arcgis.com/sharing/rest";
33
+ }
34
+ }
35
+
36
+ export function getOnlineEnvironment(url: string): string {
37
+ if (!arcgisOnlineUrlRegex.test(url)) {
38
+ return null;
39
+ }
40
+
41
+ const match = url.match(arcgisOnlineUrlRegex);
42
+ const subdomain = match[1].split(".").pop();
43
+
44
+ if (subdomain.includes("dev")) {
45
+ return "dev";
46
+ }
47
+
48
+ if (subdomain.includes("qa")) {
49
+ return "qa";
50
+ }
51
+
52
+ return "production";
53
+ }
54
+
55
+ export function isFederated(
56
+ owningSystemUrl: string,
57
+ portalUrl: string
58
+ ): boolean {
59
+ const normalizedPortalUrl = cleanUrl(
60
+ normalizeOnlinePortalUrl(portalUrl)
61
+ ).replace(/https?:\/\//, "");
62
+
63
+ const normalizedOwningSystemUrl = cleanUrl(owningSystemUrl).replace(
64
+ /https?:\/\//,
65
+ ""
66
+ );
67
+
68
+ return new RegExp(normalizedOwningSystemUrl, "i").test(normalizedPortalUrl);
69
+ }
70
+
71
+ export function canUseOnlineToken(
72
+ portalUrl: string,
73
+ requestUrl: string
74
+ ): boolean {
75
+ const portalIsOnline = isOnline(portalUrl);
76
+ const requestIsOnline = isOnline(requestUrl);
77
+ const portalEnv = getOnlineEnvironment(portalUrl);
78
+ const requestEnv = getOnlineEnvironment(requestUrl);
79
+
80
+ if (portalIsOnline && requestIsOnline && portalEnv === requestEnv) {
81
+ return true;
82
+ }
83
+
84
+ return false;
85
+ }
@@ -0,0 +1,50 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import {
5
+ request,
6
+ IRequestOptions,
7
+ ITokenRequestOptions
8
+ } from "@esri/arcgis-rest-request";
9
+
10
+ interface IFetchTokenRawResponse {
11
+ access_token: string;
12
+ expires_in: number;
13
+ username: string;
14
+ ssl?: boolean;
15
+ refresh_token?: string;
16
+ }
17
+
18
+ export interface IFetchTokenResponse {
19
+ token: string;
20
+ expires: Date;
21
+ username: string;
22
+ ssl: boolean;
23
+ refreshToken?: string;
24
+ }
25
+
26
+ export function fetchToken(
27
+ url: string,
28
+ requestOptions: ITokenRequestOptions
29
+ ): Promise<IFetchTokenResponse> {
30
+ const options: IRequestOptions = requestOptions;
31
+ // we generate a response, so we can't return the raw response
32
+ options.rawResponse = false;
33
+
34
+ return request(url, options).then((response: IFetchTokenRawResponse) => {
35
+ const r: IFetchTokenResponse = {
36
+ token: response.access_token,
37
+ username: response.username,
38
+ expires: new Date(
39
+ // convert seconds in response to milliseconds and add the value to the current time to calculate a static expiration timestamp
40
+ Date.now() + (response.expires_in * 1000 - 1000)
41
+ ),
42
+ ssl: response.ssl === true
43
+ };
44
+ if (response.refresh_token) {
45
+ r.refreshToken = response.refresh_token;
46
+ }
47
+
48
+ return r;
49
+ });
50
+ }
@@ -0,0 +1,35 @@
1
+ /* Copyright (c) 2017-2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import {
5
+ request,
6
+ IRequestOptions,
7
+ ITokenRequestOptions,
8
+ NODEJS_DEFAULT_REFERER_HEADER,
9
+ } from "@esri/arcgis-rest-request";
10
+
11
+ export interface IGenerateTokenResponse {
12
+ token: string;
13
+ expires: number;
14
+ ssl: boolean;
15
+ }
16
+
17
+ export function generateToken(
18
+ url: string,
19
+ requestOptions: ITokenRequestOptions
20
+ ): Promise<IGenerateTokenResponse> {
21
+ const options: IRequestOptions = requestOptions;
22
+
23
+ /* istanbul ignore else */
24
+ if (
25
+ typeof window !== "undefined" &&
26
+ window.location &&
27
+ window.location.host
28
+ ) {
29
+ options.params.referer = window.location.host;
30
+ } else {
31
+ options.params.referer = NODEJS_DEFAULT_REFERER_HEADER;
32
+ }
33
+
34
+ return request(url, options);
35
+ }
@@ -0,0 +1,13 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ export * from "./ApplicationSession";
5
+ export * from "./ApiKey";
6
+ export * from "./UserSession";
7
+ export * from "./fetch-token";
8
+ export * from "./generate-token";
9
+ export * from "./authenticated-request-options";
10
+ export { IUser } from "@esri/arcgis-rest-types";
11
+ export * from "./app-tokens";
12
+
13
+ export * from "./validate-app-access";
@@ -0,0 +1,68 @@
1
+ /* Copyright (c) 2018-2020 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { IRequestOptions, request } from "@esri/arcgis-rest-request";
5
+
6
+ export interface IAppAccess {
7
+ /**
8
+ * Verifies that the token is valid and the user has access to
9
+ * the specified app (clientId)
10
+ */
11
+ valid: boolean;
12
+ /**
13
+ * Should the app present the current user with a "View Only" mode
14
+ */
15
+ viewOnlyUserTypeApp: boolean;
16
+ }
17
+
18
+ /**
19
+ * Validates that the user has access to the application
20
+ * and if they user should be presented a "View Only" mode
21
+ *
22
+ * This is only needed/valid for Esri applications that are "licensed"
23
+ * and shipped in ArcGIS Online or ArcGIS Enterprise. Most custom applications
24
+ * should not need or use this.
25
+ *
26
+ * ```js
27
+ * import { validateAppAccess } from '@esri/arcgis-rest-auth';
28
+ *
29
+ * return validateAppAccess('your-token', 'theClientId')
30
+ * .then((result) => {
31
+ * if (!result.value) {
32
+ * // redirect or show some other ui
33
+ * } else {
34
+ * if (result.viewOnlyUserTypeApp) {
35
+ * // use this to inform your app to show a "View Only" mode
36
+ * }
37
+ * }
38
+ * })
39
+ * .catch((err) => {
40
+ * // two possible errors
41
+ * // invalid clientId: {"error":{"code":400,"messageCode":"GWM_0007","message":"Invalid request","details":[]}}
42
+ * // invalid token: {"error":{"code":498,"message":"Invalid token.","details":[]}}
43
+ * })
44
+ * ```
45
+ *
46
+ * Note: This is only usable by Esri applications hosted on *arcgis.com, *esri.com or within
47
+ * an ArcGIS Enterprise installation. Custom applications can not use this.
48
+ *
49
+ * @param token platform token
50
+ * @param clientId application client id
51
+ * @param portal Optional
52
+ */
53
+ export function validateAppAccess(
54
+ token: string,
55
+ clientId: string,
56
+ portal = "https://www.arcgis.com/sharing/rest"
57
+ ): Promise<IAppAccess> {
58
+ const url = `${portal}/oauth2/validateAppAccess`;
59
+ const ro = {
60
+ method: "POST",
61
+ params: {
62
+ f: "json",
63
+ client_id: clientId,
64
+ token,
65
+ },
66
+ } as IRequestOptions;
67
+ return request(url, ro);
68
+ }
@@ -0,0 +1,35 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { ApiKey } from "../src/index";
5
+ // import { ICredential } from "../src/UserSession";
6
+
7
+
8
+ import * as fetchMock from "fetch-mock";
9
+
10
+ describe("ApiKey", () => {
11
+ afterEach(fetchMock.restore);
12
+
13
+ describe(".getToken()", () => {
14
+ it("should return the ApiKey", done => {
15
+ const session = new ApiKey({
16
+ key: "123456"
17
+ });
18
+
19
+ Promise.all([
20
+ session.getToken("https://www.arcgis.com/sharing/rest/portals/self"),
21
+ session.getToken(
22
+ "https://services1.arcgis.com/MOCK_ORG/arcgis/rest/services/Private_Service/FeatureServer"
23
+ )
24
+ ])
25
+ .then(([token1, token2]) => {
26
+ expect(token1).toBe("123456");
27
+ expect(token2).toBe("123456");
28
+ done();
29
+ })
30
+ .catch(e => {
31
+ fail(e);
32
+ });
33
+ });
34
+ });
35
+ });
@@ -0,0 +1,124 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { ApplicationSession } from "../src/index";
5
+ import * as fetchMock from "fetch-mock";
6
+ import { YESTERDAY, TOMORROW } from "./utils";
7
+
8
+ describe("ApplicationSession", () => {
9
+ afterEach(fetchMock.restore);
10
+
11
+ describe(".getToken()", () => {
12
+ it("should return the cached token if it is not expired", done => {
13
+ const session = new ApplicationSession({
14
+ clientId: "id",
15
+ clientSecret: "secret",
16
+ token: "token",
17
+ expires: TOMORROW
18
+ });
19
+
20
+ Promise.all([
21
+ session.getToken("https://www.arcgis.com/sharing/rest/portals/self"),
22
+ session.getToken(
23
+ "https://services1.arcgis.com/MOCK_ORG/arcgis/rest/services/Private_Service/FeatureServer"
24
+ )
25
+ ])
26
+ .then(([token1, token2]) => {
27
+ expect(token1).toBe("token");
28
+ expect(token2).toBe("token");
29
+ done();
30
+ })
31
+ .catch(e => {
32
+ fail(e);
33
+ });
34
+ });
35
+
36
+ it("should fetch a new token if the cached one is expired", done => {
37
+ const session = new ApplicationSession({
38
+ clientId: "id",
39
+ clientSecret: "secret",
40
+ token: "token",
41
+ expires: YESTERDAY
42
+ });
43
+
44
+ fetchMock.post("https://www.arcgis.com/sharing/rest/oauth2/token/", {
45
+ access_token: "new",
46
+ expires_in: 1800
47
+ });
48
+
49
+ Promise.all([
50
+ session.getToken("https://www.arcgis.com/sharing/rest/portals/self"),
51
+ session.getToken(
52
+ "https://services1.arcgis.com/MOCK_ORG/arcgis/rest/services/Private_Service/FeatureServer"
53
+ )
54
+ ])
55
+ .then(([token1, token2]) => {
56
+ expect(token1).toBe("new");
57
+ expect(token2).toBe("new");
58
+ done();
59
+ })
60
+ .catch(e => {
61
+ fail(e);
62
+ });
63
+ });
64
+
65
+ it("should not make multiple refresh requests while a refresh is pending", done => {
66
+ const session = new ApplicationSession({
67
+ clientId: "id",
68
+ clientSecret: "secret",
69
+ token: "token",
70
+ expires: YESTERDAY
71
+ });
72
+
73
+ fetchMock.mock(
74
+ "https://www.arcgis.com/sharing/rest/oauth2/token/",
75
+ {
76
+ access_token: "new",
77
+ expires_in: 1800
78
+ },
79
+ { method: "POST", repeat: 1 }
80
+ );
81
+
82
+ Promise.all([
83
+ session.getToken("https://www.arcgis.com/sharing/rest/portals/self"),
84
+ session.getToken("https://www.arcgis.com/sharing/rest/portals/self")
85
+ ])
86
+ .then(([token1, token2]) => {
87
+ expect(token1).toBe("new");
88
+ expect(token2).toBe("new");
89
+ expect(
90
+ fetchMock.calls("https://www.arcgis.com/sharing/rest/oauth2/token/")
91
+ .length
92
+ ).toBe(1);
93
+ done();
94
+ })
95
+ .catch(e => {
96
+ fail(e);
97
+ });
98
+ });
99
+ });
100
+
101
+ it("should provide a method to refresh a session", done => {
102
+ const session = new ApplicationSession({
103
+ clientId: "id",
104
+ clientSecret: "secret",
105
+ token: "token",
106
+ expires: YESTERDAY
107
+ });
108
+
109
+ fetchMock.post("https://www.arcgis.com/sharing/rest/oauth2/token/", {
110
+ access_token: "new",
111
+ expires_in: 1800
112
+ });
113
+
114
+ session
115
+ .refreshSession()
116
+ .then(s => {
117
+ expect(s).toBe(session);
118
+ done();
119
+ })
120
+ .catch(e => {
121
+ fail(e);
122
+ });
123
+ });
124
+ });