autculpa 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (489) hide show
  1. package/.env.example +2 -0
  2. package/.eslintrc.json +37 -0
  3. package/.github/workflows/deploy-docs.yml +27 -0
  4. package/.github/workflows/pre-release-tests.yml +49 -0
  5. package/.github/workflows/pull-request-tests.yml +49 -0
  6. package/.github/workflows/release.yml +75 -0
  7. package/.prettierignore +2 -0
  8. package/.prettierrc +19 -0
  9. package/.vscode/launch.json +25 -0
  10. package/.vscode/settings.json +5 -0
  11. package/codecov.yml +7 -0
  12. package/commitlint.config.cjs +41 -0
  13. package/demos/.eslintrc.js +13 -0
  14. package/demos/ago-node-cli/README.md +30 -0
  15. package/demos/ago-node-cli/ago.js +31 -0
  16. package/demos/ago-node-cli/index.js +11 -0
  17. package/demos/ago-node-cli/lib/item-export-command.js +48 -0
  18. package/demos/ago-node-cli/lib/item-search-command.js +32 -0
  19. package/demos/ago-node-cli/package.json +29 -0
  20. package/demos/attachments-browser/README.md +7 -0
  21. package/demos/attachments-browser/index.html +165 -0
  22. package/demos/attachments-browser/package.json +15 -0
  23. package/demos/attachments-node/README.md +4 -0
  24. package/demos/attachments-node/image.jpg +0 -0
  25. package/demos/attachments-node/index.js +89 -0
  26. package/demos/attachments-node/package.json +19 -0
  27. package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
  28. package/demos/batch-geocoder-node/README.md +13 -0
  29. package/demos/batch-geocoder-node/batch-geocode.js +112 -0
  30. package/demos/batch-geocoder-node/config-template.js +18 -0
  31. package/demos/batch-geocoder-node/package.json +34 -0
  32. package/demos/browser-es-modules/README.md +7 -0
  33. package/demos/browser-es-modules/index.html +38 -0
  34. package/demos/browser-es-modules/package.json +15 -0
  35. package/demos/deno/README.md +1 -0
  36. package/demos/deno/import_map.json +8 -0
  37. package/demos/deno/index.js +5 -0
  38. package/demos/express/README.md +16 -0
  39. package/demos/express/config.json.template +3 -0
  40. package/demos/express/package.json +15 -0
  41. package/demos/express/server.js +37 -0
  42. package/demos/feature-service-browser/README.md +8 -0
  43. package/demos/feature-service-browser/index.html +122 -0
  44. package/demos/feature-service-browser/package.json +15 -0
  45. package/demos/geocoder-browser/README.md +12 -0
  46. package/demos/geocoder-browser/authenticate.html +29 -0
  47. package/demos/geocoder-browser/config.js.template +1 -0
  48. package/demos/geocoder-browser/index.html +139 -0
  49. package/demos/geocoder-browser/package.json +15 -0
  50. package/demos/jsapi-integration/README.md +26 -0
  51. package/demos/jsapi-integration/authenticate.html +29 -0
  52. package/demos/jsapi-integration/config.js +6 -0
  53. package/demos/jsapi-integration/index.html +91 -0
  54. package/demos/jsapi-integration/package.json +15 -0
  55. package/demos/node-cli-item-management/README.md +11 -0
  56. package/demos/node-cli-item-management/index.js +229 -0
  57. package/demos/node-cli-item-management/package.json +24 -0
  58. package/demos/node-cli-item-management/screenshot.png +0 -0
  59. package/demos/node-common-js/README.md +4 -0
  60. package/demos/node-common-js/index.js +5 -0
  61. package/demos/node-common-js/package.json +15 -0
  62. package/demos/node-es-modules/README.md +4 -0
  63. package/demos/node-es-modules/index.js +5 -0
  64. package/demos/node-es-modules/package.json +16 -0
  65. package/demos/oauth2-browser/README.md +17 -0
  66. package/demos/oauth2-browser/authenticate.html +29 -0
  67. package/demos/oauth2-browser/config.js.template +6 -0
  68. package/demos/oauth2-browser/index.html +223 -0
  69. package/demos/oauth2-browser/logo.svg +4 -0
  70. package/demos/oauth2-browser/package.json +15 -0
  71. package/demos/oauth2-browser/style.css +36 -0
  72. package/demos/oauth2-browser-retry/README.md +32 -0
  73. package/demos/oauth2-browser-retry/authenticate.html +21 -0
  74. package/demos/oauth2-browser-retry/index.html +114 -0
  75. package/demos/oauth2-browser-retry/logo.svg +4 -0
  76. package/demos/oauth2-browser-retry/package.json +15 -0
  77. package/demos/parcel/README.md +8 -0
  78. package/demos/parcel/index.html +16 -0
  79. package/demos/parcel/index.js +8 -0
  80. package/demos/parcel/package.json +20 -0
  81. package/demos/snowpack/README.md +8 -0
  82. package/demos/snowpack/index.html +16 -0
  83. package/demos/snowpack/index.js +8 -0
  84. package/demos/snowpack/package.json +20 -0
  85. package/demos/snowpack/snowpack.config.js +3 -0
  86. package/demos/stream-response-to-file/README.md +7 -0
  87. package/demos/stream-response-to-file/index.js +36 -0
  88. package/demos/stream-response-to-file/output/.gitkeep +0 -0
  89. package/demos/stream-response-to-file/package.json +31 -0
  90. package/demos/tree-shaking-rollup/.babelrc +3 -0
  91. package/demos/tree-shaking-rollup/README.md +9 -0
  92. package/demos/tree-shaking-rollup/index.html +11 -0
  93. package/demos/tree-shaking-rollup/package.json +22 -0
  94. package/demos/tree-shaking-rollup/rollup.config.js +13 -0
  95. package/demos/tree-shaking-rollup/src/index.js +8 -0
  96. package/demos/tree-shaking-webpack/README.md +9 -0
  97. package/demos/tree-shaking-webpack/index.html +11 -0
  98. package/demos/tree-shaking-webpack/package.json +26 -0
  99. package/demos/tree-shaking-webpack/src/index.js +8 -0
  100. package/demos/tree-shaking-webpack/webpack.config.js +29 -0
  101. package/demos/vite/README.md +6 -0
  102. package/demos/vite/favicon.svg +15 -0
  103. package/demos/vite/index.html +13 -0
  104. package/demos/vite/main.js +8 -0
  105. package/demos/vite/package.json +18 -0
  106. package/demos/vue/.env.example +11 -0
  107. package/demos/vue/.eslintrc.js +17 -0
  108. package/demos/vue/.postcssrc.js +5 -0
  109. package/demos/vue/README.md +17 -0
  110. package/demos/vue/babel.config.js +3 -0
  111. package/demos/vue/package.json +35 -0
  112. package/demos/vue/public/favicon.ico +0 -0
  113. package/demos/vue/public/index.html +24 -0
  114. package/demos/vue/src/assets/logo.svg +29 -0
  115. package/demos/vue/src/components/App.vue +303 -0
  116. package/demos/vue/src/components/Authenticate.vue +65 -0
  117. package/demos/vue/src/components/Loader.vue +230 -0
  118. package/demos/vue/src/main.js +92 -0
  119. package/demos/webmap-checker-sapper/.env.example +5 -0
  120. package/demos/webmap-checker-sapper/README.md +124 -0
  121. package/demos/webmap-checker-sapper/appveyor.yml +18 -0
  122. package/demos/webmap-checker-sapper/cypress/fixtures/example.json +5 -0
  123. package/demos/webmap-checker-sapper/cypress/integration/spec.js +19 -0
  124. package/demos/webmap-checker-sapper/cypress/plugins/index.js +17 -0
  125. package/demos/webmap-checker-sapper/cypress/support/commands.js +25 -0
  126. package/demos/webmap-checker-sapper/cypress/support/index.js +20 -0
  127. package/demos/webmap-checker-sapper/cypress.json +4 -0
  128. package/demos/webmap-checker-sapper/package.json +47 -0
  129. package/demos/webmap-checker-sapper/rollup.config.js +87 -0
  130. package/demos/webmap-checker-sapper/src/client.js +20 -0
  131. package/demos/webmap-checker-sapper/src/components/LayerStatus.html +108 -0
  132. package/demos/webmap-checker-sapper/src/components/Nav.html +21 -0
  133. package/demos/webmap-checker-sapper/src/components/WebMap.html +62 -0
  134. package/demos/webmap-checker-sapper/src/routes/_error.html +41 -0
  135. package/demos/webmap-checker-sapper/src/routes/_layout.html +21 -0
  136. package/demos/webmap-checker-sapper/src/routes/auth/authorize.js +18 -0
  137. package/demos/webmap-checker-sapper/src/routes/auth/exchange-token.js +20 -0
  138. package/demos/webmap-checker-sapper/src/routes/auth/post-sign-in.js +24 -0
  139. package/demos/webmap-checker-sapper/src/routes/auth/sign-out.js +10 -0
  140. package/demos/webmap-checker-sapper/src/routes/index.html +20 -0
  141. package/demos/webmap-checker-sapper/src/routes/webmaps/[webmapId].html +83 -0
  142. package/demos/webmap-checker-sapper/src/routes/webmaps/index.html +59 -0
  143. package/demos/webmap-checker-sapper/src/server.js +102 -0
  144. package/demos/webmap-checker-sapper/src/service-worker.js +82 -0
  145. package/demos/webmap-checker-sapper/src/template.html +33 -0
  146. package/demos/webmap-checker-sapper/src/userInfoMiddleware.js +21 -0
  147. package/demos/webmap-checker-sapper/src/utils.js +33 -0
  148. package/demos/webmap-checker-sapper/static/favicon.png +0 -0
  149. package/demos/webmap-checker-sapper/static/global.css +36 -0
  150. package/demos/webmap-checker-sapper/static/manifest.json +20 -0
  151. package/demos/webmap-checker-sapper/static/svelte-logo-192.png +0 -0
  152. package/demos/webmap-checker-sapper/static/svelte-logo-512.png +0 -0
  153. package/docs/.eslintrc.js +12 -0
  154. package/docs/FAQ.md +48 -0
  155. package/docs/HISTORY.md +62 -0
  156. package/docs/acetate.config.js +262 -0
  157. package/docs/build-typedoc.js +434 -0
  158. package/docs/generate-srihashes.js +61 -0
  159. package/docs/package.json +3 -0
  160. package/docs/src/_layout.html +86 -0
  161. package/docs/src/api/_declaration.html +600 -0
  162. package/docs/src/api/_layout.html +204 -0
  163. package/docs/src/api/_package.html +38 -0
  164. package/docs/src/api/index.html +16 -0
  165. package/docs/src/guides/_layout.html +24 -0
  166. package/docs/src/guides/amd-requirejs-dojo.md +40 -0
  167. package/docs/src/guides/browser-authentication.md +39 -0
  168. package/docs/src/guides/bundlers.md +52 -0
  169. package/docs/src/guides/cli-authentication.md +9 -0
  170. package/docs/src/guides/client-server-authentication.md +9 -0
  171. package/docs/src/guides/embedded-apps.md +106 -0
  172. package/docs/src/guides/from-a-cdn.md +38 -0
  173. package/docs/src/guides/index.md +59 -0
  174. package/docs/src/guides/node.md +84 -0
  175. package/docs/src/guides/package-overview.md +111 -0
  176. package/docs/src/guides/server-authentication.md +9 -0
  177. package/docs/src/guides/whats-new-v2-0.md +305 -0
  178. package/docs/src/img/icons.png +0 -0
  179. package/docs/src/img/icons@2x.png +0 -0
  180. package/docs/src/img/oauth-browser.png +0 -0
  181. package/docs/src/index.html +12 -0
  182. package/docs/src/js/api-search.js +112 -0
  183. package/docs/src/js/nav-toggle.js +41 -0
  184. package/docs/src/sass/_highlight.scss +96 -0
  185. package/docs/src/sass/_icons.scss +157 -0
  186. package/docs/src/sass/style.scss +242 -0
  187. package/jasmine.json +7 -0
  188. package/jasmine.live.json +7 -0
  189. package/karma.conf.cjs +128 -0
  190. package/package.json +140 -0
  191. package/packages/arcgis-rest-auth/CHANGELOG.md +80 -0
  192. package/packages/arcgis-rest-auth/README.md +71 -0
  193. package/packages/arcgis-rest-auth/package.json +66 -0
  194. package/packages/arcgis-rest-auth/src/index.ts +34 -0
  195. package/packages/arcgis-rest-auth/tsconfig.json +6 -0
  196. package/packages/arcgis-rest-demographics/CHANGELOG.md +14 -0
  197. package/packages/arcgis-rest-demographics/README.md +74 -0
  198. package/packages/arcgis-rest-demographics/package.json +69 -0
  199. package/packages/arcgis-rest-demographics/src/getAvailableCountries.ts +113 -0
  200. package/packages/arcgis-rest-demographics/src/getAvailableDataCollections.ts +161 -0
  201. package/packages/arcgis-rest-demographics/src/getAvailableGeographyLevels.ts +86 -0
  202. package/packages/arcgis-rest-demographics/src/getGeography.ts +152 -0
  203. package/packages/arcgis-rest-demographics/src/helpers.ts +27 -0
  204. package/packages/arcgis-rest-demographics/src/index.ts +16 -0
  205. package/packages/arcgis-rest-demographics/src/queryDemographicData.ts +108 -0
  206. package/packages/arcgis-rest-demographics/test/getAvailableCountries.test.ts +89 -0
  207. package/packages/arcgis-rest-demographics/test/getAvailableDataCollections.test.ts +114 -0
  208. package/packages/arcgis-rest-demographics/test/getAvailableGeographyLevels.test.ts +69 -0
  209. package/packages/arcgis-rest-demographics/test/getGeography.test.ts +150 -0
  210. package/packages/arcgis-rest-demographics/test/mocks/responses.ts +4 -0
  211. package/packages/arcgis-rest-demographics/test/queryDemographicData.test.live.ts +50 -0
  212. package/packages/arcgis-rest-demographics/test/queryDemographicData.test.ts +127 -0
  213. package/packages/arcgis-rest-demographics/tsconfig.json +6 -0
  214. package/packages/arcgis-rest-feature-service/CHANGELOG.md +44 -0
  215. package/packages/arcgis-rest-feature-service/README.md +75 -0
  216. package/packages/arcgis-rest-feature-service/package.json +70 -0
  217. package/packages/arcgis-rest-feature-service/src/add.ts +55 -0
  218. package/packages/arcgis-rest-feature-service/src/addAttachment.ts +53 -0
  219. package/packages/arcgis-rest-feature-service/src/addToServiceDefinition.ts +74 -0
  220. package/packages/arcgis-rest-feature-service/src/applyEdits.ts +94 -0
  221. package/packages/arcgis-rest-feature-service/src/createFeatureService.ts +191 -0
  222. package/packages/arcgis-rest-feature-service/src/decodeValues.ts +126 -0
  223. package/packages/arcgis-rest-feature-service/src/delete.ts +62 -0
  224. package/packages/arcgis-rest-feature-service/src/deleteAttachments.ts +52 -0
  225. package/packages/arcgis-rest-feature-service/src/getAllLayersAndTables.ts +30 -0
  226. package/packages/arcgis-rest-feature-service/src/getAttachments.ts +55 -0
  227. package/packages/arcgis-rest-feature-service/src/getLayer.ts +23 -0
  228. package/packages/arcgis-rest-feature-service/src/getService.ts +25 -0
  229. package/packages/arcgis-rest-feature-service/src/getServiceAdminInfo.ts +33 -0
  230. package/packages/arcgis-rest-feature-service/src/getViewSources.ts +19 -0
  231. package/packages/arcgis-rest-feature-service/src/helpers.ts +768 -0
  232. package/packages/arcgis-rest-feature-service/src/index.ts +37 -0
  233. package/packages/arcgis-rest-feature-service/src/query.ts +200 -0
  234. package/packages/arcgis-rest-feature-service/src/queryRelated.ts +86 -0
  235. package/packages/arcgis-rest-feature-service/src/update.ts +65 -0
  236. package/packages/arcgis-rest-feature-service/src/updateAttachment.ts +59 -0
  237. package/packages/arcgis-rest-feature-service/src/updateServiceDefinition.ts +53 -0
  238. package/packages/arcgis-rest-feature-service/test/addToServiceDefinition.test.ts +350 -0
  239. package/packages/arcgis-rest-feature-service/test/attachments.test.ts +188 -0
  240. package/packages/arcgis-rest-feature-service/test/createFeatureService.test.ts +279 -0
  241. package/packages/arcgis-rest-feature-service/test/crud.test.ts +196 -0
  242. package/packages/arcgis-rest-feature-service/test/decodeValues.test.ts +66 -0
  243. package/packages/arcgis-rest-feature-service/test/getAllLayersAndTables.test.ts +27 -0
  244. package/packages/arcgis-rest-feature-service/test/getLayer.test.ts +30 -0
  245. package/packages/arcgis-rest-feature-service/test/getService.test.ts +30 -0
  246. package/packages/arcgis-rest-feature-service/test/getServiceAdminInfo.test.ts +41 -0
  247. package/packages/arcgis-rest-feature-service/test/getViewSources.test.ts +45 -0
  248. package/packages/arcgis-rest-feature-service/test/helpers.test.ts +27 -0
  249. package/packages/arcgis-rest-feature-service/test/mocks/allLayersAndTablesResponse.ts +950 -0
  250. package/packages/arcgis-rest-feature-service/test/mocks/cvdQueryResponse.ts +225 -0
  251. package/packages/arcgis-rest-feature-service/test/mocks/feature.ts +302 -0
  252. package/packages/arcgis-rest-feature-service/test/mocks/fields.ts +779 -0
  253. package/packages/arcgis-rest-feature-service/test/mocks/foo.txt +1 -0
  254. package/packages/arcgis-rest-feature-service/test/mocks/layerDefinition.ts +80 -0
  255. package/packages/arcgis-rest-feature-service/test/mocks/service.ts +476 -0
  256. package/packages/arcgis-rest-feature-service/test/query.test.ts +166 -0
  257. package/packages/arcgis-rest-feature-service/test/updateServiceDefinition.test.ts +103 -0
  258. package/packages/arcgis-rest-feature-service/tsconfig.json +9 -0
  259. package/packages/arcgis-rest-fetch/README.md +17 -0
  260. package/packages/arcgis-rest-fetch/browser-ponyfill.js +8 -0
  261. package/packages/arcgis-rest-fetch/browser-ponyfill.mjs +8 -0
  262. package/packages/arcgis-rest-fetch/index.types.d.ts +8 -0
  263. package/packages/arcgis-rest-fetch/node-ponyfill.js +10 -0
  264. package/packages/arcgis-rest-fetch/node-ponyfill.mjs +10 -0
  265. package/packages/arcgis-rest-fetch/package.json +21 -0
  266. package/packages/arcgis-rest-form-data/README.md +15 -0
  267. package/packages/arcgis-rest-form-data/browser-ponyfill.js +5 -0
  268. package/packages/arcgis-rest-form-data/browser-ponyfill.mjs +3 -0
  269. package/packages/arcgis-rest-form-data/index.types.d.ts +9 -0
  270. package/packages/arcgis-rest-form-data/node-ponyfill.js +7 -0
  271. package/packages/arcgis-rest-form-data/node-ponyfill.mjs +5 -0
  272. package/packages/arcgis-rest-form-data/package.json +21 -0
  273. package/packages/arcgis-rest-geocoding/CHANGELOG.md +26 -0
  274. package/packages/arcgis-rest-geocoding/README.md +85 -0
  275. package/packages/arcgis-rest-geocoding/package.json +69 -0
  276. package/packages/arcgis-rest-geocoding/src/bulk.ts +106 -0
  277. package/packages/arcgis-rest-geocoding/src/geocode.ts +169 -0
  278. package/packages/arcgis-rest-geocoding/src/helpers.ts +56 -0
  279. package/packages/arcgis-rest-geocoding/src/index.ts +17 -0
  280. package/packages/arcgis-rest-geocoding/src/reverse.ts +82 -0
  281. package/packages/arcgis-rest-geocoding/src/suggest.ts +45 -0
  282. package/packages/arcgis-rest-geocoding/test/bulk.test.ts +193 -0
  283. package/packages/arcgis-rest-geocoding/test/geocode.test.ts +254 -0
  284. package/packages/arcgis-rest-geocoding/test/helpers.test.ts +85 -0
  285. package/packages/arcgis-rest-geocoding/test/mocks/responses.ts +1031 -0
  286. package/packages/arcgis-rest-geocoding/test/reverse.test.ts +124 -0
  287. package/packages/arcgis-rest-geocoding/test/suggest.test.ts +53 -0
  288. package/packages/arcgis-rest-geocoding/tsconfig.json +6 -0
  289. package/packages/arcgis-rest-portal/README.md +72 -0
  290. package/packages/arcgis-rest-portal/package.json +68 -0
  291. package/packages/arcgis-rest-portal/src/groups/add-users.ts +140 -0
  292. package/packages/arcgis-rest-portal/src/groups/create.ts +42 -0
  293. package/packages/arcgis-rest-portal/src/groups/get.ts +187 -0
  294. package/packages/arcgis-rest-portal/src/groups/helpers.ts +14 -0
  295. package/packages/arcgis-rest-portal/src/groups/invite-users.ts +141 -0
  296. package/packages/arcgis-rest-portal/src/groups/join.ts +57 -0
  297. package/packages/arcgis-rest-portal/src/groups/notification.ts +77 -0
  298. package/packages/arcgis-rest-portal/src/groups/protect.ts +56 -0
  299. package/packages/arcgis-rest-portal/src/groups/remove-users.ts +84 -0
  300. package/packages/arcgis-rest-portal/src/groups/remove.ts +32 -0
  301. package/packages/arcgis-rest-portal/src/groups/search.ts +48 -0
  302. package/packages/arcgis-rest-portal/src/groups/update-user-membership.ts +63 -0
  303. package/packages/arcgis-rest-portal/src/groups/update.ts +39 -0
  304. package/packages/arcgis-rest-portal/src/helpers.ts +83 -0
  305. package/packages/arcgis-rest-portal/src/index.ts +68 -0
  306. package/packages/arcgis-rest-portal/src/items/add.ts +145 -0
  307. package/packages/arcgis-rest-portal/src/items/content.ts +70 -0
  308. package/packages/arcgis-rest-portal/src/items/create.ts +149 -0
  309. package/packages/arcgis-rest-portal/src/items/export.ts +92 -0
  310. package/packages/arcgis-rest-portal/src/items/get.ts +444 -0
  311. package/packages/arcgis-rest-portal/src/items/helpers.ts +272 -0
  312. package/packages/arcgis-rest-portal/src/items/protect.ts +41 -0
  313. package/packages/arcgis-rest-portal/src/items/reassign.ts +59 -0
  314. package/packages/arcgis-rest-portal/src/items/remove.ts +139 -0
  315. package/packages/arcgis-rest-portal/src/items/search.ts +25 -0
  316. package/packages/arcgis-rest-portal/src/items/update.ts +188 -0
  317. package/packages/arcgis-rest-portal/src/items/upload.ts +124 -0
  318. package/packages/arcgis-rest-portal/src/orgs/notification.ts +148 -0
  319. package/packages/arcgis-rest-portal/src/services/get-unique-service-name.ts +35 -0
  320. package/packages/arcgis-rest-portal/src/services/is-service-name-available.ts +29 -0
  321. package/packages/arcgis-rest-portal/src/sharing/access.ts +84 -0
  322. package/packages/arcgis-rest-portal/src/sharing/helpers.ts +80 -0
  323. package/packages/arcgis-rest-portal/src/sharing/is-item-shared-with-group.ts +42 -0
  324. package/packages/arcgis-rest-portal/src/sharing/share-item-with-group.ts +335 -0
  325. package/packages/arcgis-rest-portal/src/sharing/unshare-item-with-group.ts +114 -0
  326. package/packages/arcgis-rest-portal/src/users/get-user-tags.ts +52 -0
  327. package/packages/arcgis-rest-portal/src/users/get-user-url.ts +18 -0
  328. package/packages/arcgis-rest-portal/src/users/get-user.ts +60 -0
  329. package/packages/arcgis-rest-portal/src/users/invitation.ts +157 -0
  330. package/packages/arcgis-rest-portal/src/users/notification.ts +67 -0
  331. package/packages/arcgis-rest-portal/src/users/search-users.ts +35 -0
  332. package/packages/arcgis-rest-portal/src/users/update.ts +63 -0
  333. package/packages/arcgis-rest-portal/src/util/SearchQueryBuilder.ts +391 -0
  334. package/packages/arcgis-rest-portal/src/util/array.ts +16 -0
  335. package/packages/arcgis-rest-portal/src/util/generic-search.ts +111 -0
  336. package/packages/arcgis-rest-portal/src/util/get-portal-settings.ts +44 -0
  337. package/packages/arcgis-rest-portal/src/util/get-portal-url.ts +32 -0
  338. package/packages/arcgis-rest-portal/src/util/get-portal.ts +53 -0
  339. package/packages/arcgis-rest-portal/src/util/get-subscription-info.ts +43 -0
  340. package/packages/arcgis-rest-portal/src/util/scrub-control-chars.ts +13 -0
  341. package/packages/arcgis-rest-portal/src/util/search.ts +48 -0
  342. package/packages/arcgis-rest-portal/test/groups/add-users.test.ts +238 -0
  343. package/packages/arcgis-rest-portal/test/groups/crud.test.ts +183 -0
  344. package/packages/arcgis-rest-portal/test/groups/get.test.ts +174 -0
  345. package/packages/arcgis-rest-portal/test/groups/invite-users.test.ts +146 -0
  346. package/packages/arcgis-rest-portal/test/groups/join.test.ts +71 -0
  347. package/packages/arcgis-rest-portal/test/groups/notification.test.ts +111 -0
  348. package/packages/arcgis-rest-portal/test/groups/protect.test.ts +71 -0
  349. package/packages/arcgis-rest-portal/test/groups/remove-users.test.ts +140 -0
  350. package/packages/arcgis-rest-portal/test/groups/search.test.ts +151 -0
  351. package/packages/arcgis-rest-portal/test/groups/update-user-membership.test.ts +64 -0
  352. package/packages/arcgis-rest-portal/test/items/add.test.ts +320 -0
  353. package/packages/arcgis-rest-portal/test/items/content.test.ts +161 -0
  354. package/packages/arcgis-rest-portal/test/items/create.test.ts +404 -0
  355. package/packages/arcgis-rest-portal/test/items/export.test.ts +115 -0
  356. package/packages/arcgis-rest-portal/test/items/get.test.ts +606 -0
  357. package/packages/arcgis-rest-portal/test/items/helpers.test.ts +60 -0
  358. package/packages/arcgis-rest-portal/test/items/protect.test.ts +120 -0
  359. package/packages/arcgis-rest-portal/test/items/reassign.test.ts +130 -0
  360. package/packages/arcgis-rest-portal/test/items/remove.test.ts +259 -0
  361. package/packages/arcgis-rest-portal/test/items/search.test.ts +274 -0
  362. package/packages/arcgis-rest-portal/test/items/update.test.ts +549 -0
  363. package/packages/arcgis-rest-portal/test/items/upload.test.ts +286 -0
  364. package/packages/arcgis-rest-portal/test/mocks/groups/responses.ts +208 -0
  365. package/packages/arcgis-rest-portal/test/mocks/items/foo.zip +0 -0
  366. package/packages/arcgis-rest-portal/test/mocks/items/item.ts +526 -0
  367. package/packages/arcgis-rest-portal/test/mocks/items/resources.ts +38 -0
  368. package/packages/arcgis-rest-portal/test/mocks/items/search.ts +121 -0
  369. package/packages/arcgis-rest-portal/test/mocks/portal/response.ts +126 -0
  370. package/packages/arcgis-rest-portal/test/mocks/portal/settings-response.ts +56 -0
  371. package/packages/arcgis-rest-portal/test/mocks/sharing/sharing.ts +18 -0
  372. package/packages/arcgis-rest-portal/test/mocks/users/invitation.ts +70 -0
  373. package/packages/arcgis-rest-portal/test/mocks/users/notification.ts +34 -0
  374. package/packages/arcgis-rest-portal/test/mocks/users/user-search.ts +388 -0
  375. package/packages/arcgis-rest-portal/test/mocks/users/user-tags.ts +5 -0
  376. package/packages/arcgis-rest-portal/test/mocks/users/user.ts +174 -0
  377. package/packages/arcgis-rest-portal/test/orgs/notification.test.ts +142 -0
  378. package/packages/arcgis-rest-portal/test/services/get-unique-service-name.test.ts +64 -0
  379. package/packages/arcgis-rest-portal/test/services/is-service-name-available.test.ts +41 -0
  380. package/packages/arcgis-rest-portal/test/sharing/access.test.ts +162 -0
  381. package/packages/arcgis-rest-portal/test/sharing/helpers.test.ts +55 -0
  382. package/packages/arcgis-rest-portal/test/sharing/share-item-with-group.test.ts +1328 -0
  383. package/packages/arcgis-rest-portal/test/sharing/unshare-item-with-group.test.ts +288 -0
  384. package/packages/arcgis-rest-portal/test/users/get-user-tags.test.ts +71 -0
  385. package/packages/arcgis-rest-portal/test/users/get-user-url.test.ts +40 -0
  386. package/packages/arcgis-rest-portal/test/users/get-user.test.ts +90 -0
  387. package/packages/arcgis-rest-portal/test/users/invitation.test.ts +126 -0
  388. package/packages/arcgis-rest-portal/test/users/notification.test.ts +76 -0
  389. package/packages/arcgis-rest-portal/test/users/search.test.ts +41 -0
  390. package/packages/arcgis-rest-portal/test/users/update.test.ts +150 -0
  391. package/packages/arcgis-rest-portal/test/util/SearchQueryBuilder.test.ts +295 -0
  392. package/packages/arcgis-rest-portal/test/util/array.test.ts +33 -0
  393. package/packages/arcgis-rest-portal/test/util/get-portal-settings.test.ts +57 -0
  394. package/packages/arcgis-rest-portal/test/util/get-portal-url.test.ts +37 -0
  395. package/packages/arcgis-rest-portal/test/util/portal.test.ts +137 -0
  396. package/packages/arcgis-rest-portal/test/util/scrub-control-chars.test.ts +25 -0
  397. package/packages/arcgis-rest-portal/tsconfig.json +6 -0
  398. package/packages/arcgis-rest-request/README.md +72 -0
  399. package/packages/arcgis-rest-request/package.json +69 -0
  400. package/packages/arcgis-rest-request/post-message-auth-spec.md +70 -0
  401. package/packages/arcgis-rest-request/src/ApiKeyManager.ts +60 -0
  402. package/packages/arcgis-rest-request/src/ApplicationCredentialsManager.ts +141 -0
  403. package/packages/arcgis-rest-request/src/ArcGISIdentityManager.ts +1470 -0
  404. package/packages/arcgis-rest-request/src/app-tokens.ts +132 -0
  405. package/packages/arcgis-rest-request/src/authenticated-request-options.ts +23 -0
  406. package/packages/arcgis-rest-request/src/federation-utils.ts +88 -0
  407. package/packages/arcgis-rest-request/src/fetch-token.ts +48 -0
  408. package/packages/arcgis-rest-request/src/generate-token.ts +32 -0
  409. package/packages/arcgis-rest-request/src/index.ts +45 -0
  410. package/packages/arcgis-rest-request/src/request.ts +446 -0
  411. package/packages/arcgis-rest-request/src/revoke-token.ts +73 -0
  412. package/packages/arcgis-rest-request/src/types/feature.ts +42 -0
  413. package/packages/arcgis-rest-request/src/types/geometry.ts +239 -0
  414. package/packages/arcgis-rest-request/src/types/group.ts +72 -0
  415. package/packages/arcgis-rest-request/src/types/service.ts +87 -0
  416. package/packages/arcgis-rest-request/src/types/symbol.ts +21 -0
  417. package/packages/arcgis-rest-request/src/types/user.ts +49 -0
  418. package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +82 -0
  419. package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
  420. package/packages/arcgis-rest-request/src/utils/GrantTypes.ts +5 -0
  421. package/packages/arcgis-rest-request/src/utils/HTTPMethods.ts +6 -0
  422. package/packages/arcgis-rest-request/src/utils/IAuthenticationManager.ts +22 -0
  423. package/packages/arcgis-rest-request/src/utils/IFetchTokenParams.ts +11 -0
  424. package/packages/arcgis-rest-request/src/utils/IGenerateTokenParams.ts +9 -0
  425. package/packages/arcgis-rest-request/src/utils/IParamBuilder.ts +3 -0
  426. package/packages/arcgis-rest-request/src/utils/IParams.ts +6 -0
  427. package/packages/arcgis-rest-request/src/utils/IParamsBuilder.ts +5 -0
  428. package/packages/arcgis-rest-request/src/utils/IRequestOptions.ts +59 -0
  429. package/packages/arcgis-rest-request/src/utils/ITokenRequestOptions.ts +9 -0
  430. package/packages/arcgis-rest-request/src/utils/ResponseFormats.ts +10 -0
  431. package/packages/arcgis-rest-request/src/utils/append-custom-params.ts +46 -0
  432. package/packages/arcgis-rest-request/src/utils/clean-url.ts +20 -0
  433. package/packages/arcgis-rest-request/src/utils/decode-query-string.ts +27 -0
  434. package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +41 -0
  435. package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +37 -0
  436. package/packages/arcgis-rest-request/src/utils/process-params.ts +109 -0
  437. package/packages/arcgis-rest-request/src/utils/retryAuthError.ts +10 -0
  438. package/packages/arcgis-rest-request/src/utils/warn.ts +11 -0
  439. package/packages/arcgis-rest-request/src/utils/with-options.ts +48 -0
  440. package/packages/arcgis-rest-request/src/validate-app-access.ts +69 -0
  441. package/packages/arcgis-rest-request/test/ApiKey.test.ts +53 -0
  442. package/packages/arcgis-rest-request/test/ApplicationSession.test.ts +148 -0
  443. package/packages/arcgis-rest-request/test/ArcGISIdentityManager.test.ts +2579 -0
  444. package/packages/arcgis-rest-request/test/app-tokens.test.ts +91 -0
  445. package/packages/arcgis-rest-request/test/federation-utils.test.ts +323 -0
  446. package/packages/arcgis-rest-request/test/fetchToken.test.ts +110 -0
  447. package/packages/arcgis-rest-request/test/generateToken.test.ts +40 -0
  448. package/packages/arcgis-rest-request/test/mocks/errors.ts +76 -0
  449. package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
  450. package/packages/arcgis-rest-request/test/mocks/param-builder.ts +7 -0
  451. package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +41 -0
  452. package/packages/arcgis-rest-request/test/mocks/webmap.ts +41 -0
  453. package/packages/arcgis-rest-request/test/request.test.ts +563 -0
  454. package/packages/arcgis-rest-request/test/revoke-token.test.ts +55 -0
  455. package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +196 -0
  456. package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +51 -0
  457. package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +111 -0
  458. package/packages/arcgis-rest-request/test/utils/clean-url.test.ts +50 -0
  459. package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +146 -0
  460. package/packages/arcgis-rest-request/test/utils/encode-query-string.test.ts +22 -0
  461. package/packages/arcgis-rest-request/test/utils/process-params.test.ts +205 -0
  462. package/packages/arcgis-rest-request/test/utils/with-options.test.ts +135 -0
  463. package/packages/arcgis-rest-request/test/validate-app-access.test.ts +44 -0
  464. package/packages/arcgis-rest-request/tsconfig.json +4 -0
  465. package/packages/arcgis-rest-routing/README.md +74 -0
  466. package/packages/arcgis-rest-routing/package.json +69 -0
  467. package/packages/arcgis-rest-routing/src/closestFacility.ts +223 -0
  468. package/packages/arcgis-rest-routing/src/helpers.ts +104 -0
  469. package/packages/arcgis-rest-routing/src/index.ts +20 -0
  470. package/packages/arcgis-rest-routing/src/originDestinationMatrix.ts +219 -0
  471. package/packages/arcgis-rest-routing/src/serviceArea.ts +169 -0
  472. package/packages/arcgis-rest-routing/src/solveRoute.ts +179 -0
  473. package/packages/arcgis-rest-routing/test/closestFacility.test.ts +686 -0
  474. package/packages/arcgis-rest-routing/test/mocks/inputs.ts +132 -0
  475. package/packages/arcgis-rest-routing/test/mocks/responses.ts +13316 -0
  476. package/packages/arcgis-rest-routing/test/originDestinationMatrix.test.ts +795 -0
  477. package/packages/arcgis-rest-routing/test/serviceArea.test.ts +601 -0
  478. package/packages/arcgis-rest-routing/test/solveRoute.test.ts +681 -0
  479. package/packages/arcgis-rest-routing/tsconfig.json +6 -0
  480. package/prettier-package-json.config.cjs +81 -0
  481. package/rollup.js +152 -0
  482. package/scripts/create-dist-package-jsons.js +17 -0
  483. package/scripts/deploy-doc-site.js +16 -0
  484. package/scripts/generate-sri-hashes.js +52 -0
  485. package/scripts/get-package-json.js +27 -0
  486. package/scripts/run-demo-server.js +21 -0
  487. package/scripts/test-helpers.ts +20 -0
  488. package/tsconfig.json +62 -0
  489. package/typedoc.json +14 -0
@@ -0,0 +1,18 @@
1
+ import { UserSession } from "@esri/arcgis-rest-request";
2
+
3
+ // setup config variables
4
+ require("dotenv").config();
5
+ const { CLIENT_ID, REDIRECT_URI } = process.env;
6
+
7
+ // when a user access /auth/authorize we will allow
8
+ // UserSession.authorize to handle the response and
9
+ // redirect a user to the oAuth sign in page.
10
+ export function get(request, response, next) {
11
+ UserSession.authorize(
12
+ {
13
+ clientId: CLIENT_ID,
14
+ redirectUri: REDIRECT_URI
15
+ },
16
+ response
17
+ );
18
+ }
@@ -0,0 +1,20 @@
1
+ // if a token expires on the client side we don't have to ask then to log in
2
+ // again. Instead we can maek a request to /auth/exchange-token. Since this
3
+ // request will be same-domain this request will get the session cookie and
4
+ // can hydrate request.session.userSession which we can then refresh getting a
5
+ // new token which can be used on the client.
6
+ export function get(request, response, next) {
7
+ request.session.userSession
8
+ .refreshSession()
9
+ .then(newSession => {
10
+ request.session.userSession = newSession;
11
+ const serializedSession = newSession.toJSON();
12
+ delete serializedSession.refreshToken;
13
+ delete serializedSession.refreshTokenExpires;
14
+ response.json(serializedSession);
15
+ })
16
+ .catch(error => {
17
+ console.error(error);
18
+ response.json(error);
19
+ });
20
+ }
@@ -0,0 +1,24 @@
1
+ import { UserSession } from "@esri/arcgis-rest-request";
2
+
3
+ // setup config variables
4
+ require("dotenv").config();
5
+ const { CLIENT_ID, REDIRECT_URI } = process.env;
6
+ debugger;
7
+ // a user will be redirected to /auth/post-sign-in after completing the sign in
8
+ // form in ArcGIS Online. We will allow UserSession.exchangeAuthorizationCode to
9
+ // trade the oAuth authorization code for a token and create a user session.
10
+ // We can then add that user session to the request.
11
+ export async function get(request, response, next) {
12
+ // exchange the auth token for a full `UserSession`
13
+ request.session.userSession = await UserSession.exchangeAuthorizationCode(
14
+ {
15
+ clientId: CLIENT_ID,
16
+ redirectUri: REDIRECT_URI
17
+ },
18
+ request.query.code
19
+ );
20
+
21
+ // once we have the session set redirect the user to the /webmaps
22
+ // route so they can use the app.
23
+ response.redirect("/webmaps");
24
+ }
@@ -0,0 +1,10 @@
1
+ // to sign a user out we have to destroy their session which will
2
+ // remove the encrypted file from disk and clear the session cookie
3
+ export function get(request, response, next) {
4
+ request.session.destroy(function(err) {
5
+ response.cookie("webmap-checker-session", { maxAge: 2592000000 });
6
+
7
+ // redirect user user to the homepag when we are done.
8
+ response.redirect("/");
9
+ });
10
+ }
@@ -0,0 +1,20 @@
1
+ <svelte:head>
2
+ <title>Web Map Dependency Checker</title>
3
+ </svelte:head>
4
+ <!-- The $ prefix tells sapper to load this from the global store-->
5
+ {#if $session}
6
+ <p>
7
+ Signed in as {$session.username}
8
+ <a
9
+ href="webmaps"
10
+ class="inline-block px-6 py-3 leading-none border rounded text-teal border-teal hover:border-dark-teal hover:text-dark-teal hover:bg-white mt-1"
11
+ >View web maps</a
12
+ >
13
+ </p>
14
+ {:else}
15
+ <a
16
+ href="/auth/authorize"
17
+ class="inline-block px-6 py-3 leading-none border rounded text-teal border-teal hover:border-dark-teal hover:text-dark-teal hover:bg-white mt-1"
18
+ >Sign in to get started</a
19
+ >
20
+ {/if}
@@ -0,0 +1,83 @@
1
+ <a href="./webmaps" class="text-blue">Back to list</a>
2
+
3
+ <h2>{item.title}</h2>
4
+ <p class="mb-4">Sharing Status: {item.access}</p>
5
+
6
+ <!-- show a preview of the webmap -->
7
+ {#if item}
8
+ <WebMap itemId="{item.id}" />
9
+ {/if}
10
+
11
+ <ul class="list-reset">
12
+ {#each layers as layer}
13
+ <li class="py-2">
14
+ <!-- show a list of layers and their statuses -->
15
+ <LayerStatus title="{layer.title}" itemId="{layer.itemId}" url="{layer.url}" serviceStatus="unknown" />
16
+ </li>
17
+ {/each}
18
+ </ul>
19
+
20
+ <pre class="max-w p-6 border border-grey-light rounded overflow-scroll shadow-lg">{webmapText}</pre>
21
+
22
+ <script>
23
+ import { UserSession } from "@esri/arcgis-rest-auth";
24
+ import { getItem, getItemData } from "@esri/arcgis-rest-portal";
25
+ import { retryWithNewSession } from "../../utils.js";
26
+ import LayerStatus from "../../components/LayerStatus.html";
27
+ import WebMap from "../../components/WebMap.html";
28
+
29
+ export default {
30
+ components: {
31
+ LayerStatus,
32
+ WebMap
33
+ },
34
+ // preload runs on the server to generate the inital state of the page and
35
+ // when a user navigates on the client to create the new view of the page.
36
+ // We can use arcgis-rest-js here to preload data.
37
+ preload({ params }) {
38
+ const { session } = this.store.get();
39
+
40
+ // redirect to the homepage unless the user is signed in
41
+ if (!session) {
42
+ this.redirect(302, "/");
43
+ return;
44
+ }
45
+
46
+ const { webmapId } = params;
47
+
48
+ // if we are on the server we won't have an actual UserSession just a
49
+ // JSON representation of one. So we need to hydrate a UserSession.
50
+ const userSession = process.browser ? session : new UserSession(session);
51
+
52
+ // next we can request both the webmap item and the webmap data (the JSON)
53
+ // and process the data to get a list of layers.
54
+ return Promise.all([
55
+ getItem(webmapId, {
56
+ authentication: userSession
57
+ }).catch(error => {
58
+ return retryWithNewSession(error, this.fetch);
59
+ }),
60
+ getItemData(webmapId, {
61
+ authentication: userSession
62
+ }).catch(error => {
63
+ return retryWithNewSession(error, this.fetch);
64
+ })
65
+ ]).then(([item, webmap]) => {
66
+ const layers = webmap.operationalLayers
67
+ .concat(webmap.baseMap.baseMapLayers)
68
+ .map(layer => {
69
+ return {
70
+ title: layer.title || layer.id,
71
+ url: layer.url,
72
+ itemId: layer.itemId
73
+ };
74
+ });
75
+ return {
76
+ item,
77
+ webmapText: JSON.stringify(webmap, null, 2),
78
+ layers: layers
79
+ };
80
+ });
81
+ }
82
+ };
83
+ </script>
@@ -0,0 +1,59 @@
1
+ <h1>Webmaps</h1>
2
+
3
+ <ul class="list-reset">
4
+ {#each webmaps as webmap}
5
+ <li class="py-2">
6
+ <a href="webmaps/{webmap.id}" class="text-blue">{webmap.title}</a>
7
+ </li>
8
+ {/each}
9
+ </ul>
10
+
11
+ <script>
12
+ import { UserSession } from "@esri/arcgis-rest-request";
13
+ import { searchItems } from "@esri/arcgis-rest-portal";
14
+ import { retryWithNewSession } from "../../utils.js";
15
+
16
+ export default {
17
+ // preload runs on the server to generate the inital state of the page and
18
+ // when a user navigates on the client to create the new view of the page.
19
+ // We can use arcgis-rest-js here to preload data.
20
+ preload() {
21
+ const { session } = this.store.get();
22
+
23
+ // redirect to the homepage unless the user is signed in
24
+ if (!session) {
25
+ this.redirect(302, "/");
26
+ return;
27
+ }
28
+
29
+ // if we are on the server we won't have an actuall UserSession just a
30
+ // JSON representation of one. So we need to hydrate a UserSession.
31
+ const userSession = process.browser ? session : new UserSession(session);
32
+
33
+ // now we can search for webmaps. Sapper will wait until this promise
34
+ // resolves before rendering the page.
35
+ return (
36
+ searchItems({
37
+ q: `owner:${session.username} type:"Web Map"`,
38
+ num: 100,
39
+ authentication: userSession
40
+ })
41
+ // if there is an error we can retry the request with a fresh session
42
+ // from /auth/exchange-token
43
+ .catch(error => {
44
+ return retryWithNewSession(error, this.fetch);
45
+ })
46
+ // then we can process out response.
47
+ .then(response => {
48
+ return {
49
+ webmaps: response.results
50
+ };
51
+ })
52
+
53
+ .catch(error => {
54
+ console.error(error);
55
+ })
56
+ );
57
+ }
58
+ };
59
+ </script>
@@ -0,0 +1,102 @@
1
+ import sirv from "sirv";
2
+ import express from "express";
3
+ import session from "express-session";
4
+ import compression from "compression";
5
+ import * as sapper from "../__sapper__/server.js";
6
+ import SessionFileStore from "session-file-store";
7
+
8
+ import { UserSession } from "@esri/arcgis-rest-request";
9
+ import { Store } from "svelte/store.js";
10
+ import { userInfoMiddleware } from "./userInfoMiddleware";
11
+
12
+ // setup file storeage for user sessions
13
+ const FileStore = SessionFileStore(session);
14
+
15
+ // load and setup our config variables from out .env file
16
+ require("dotenv").config();
17
+ const { PORT, NODE_ENV, ENCRYPTION_KEY, SESSION_SECRET } = process.env;
18
+ const dev = NODE_ENV === "development";
19
+
20
+ // start express
21
+ express()
22
+ // configure express middleware
23
+ .use(
24
+ // compress responses
25
+ compression({ threshold: 0 }),
26
+
27
+ // serve static assets like images, css ect...
28
+ sirv("static", { dev }),
29
+
30
+ // setup sessions, express will set a cookie on the client
31
+ // to keep track of a session id and rehydrate the
32
+ // correstponding session on the server.
33
+ session({
34
+ name: "webmap-checker-session",
35
+ secret: SESSION_SECRET,
36
+ resave: false,
37
+ saveUninitialized: false,
38
+ cookie: {
39
+ maxAge: 2592000000 // 30 days in milliseconds
40
+ },
41
+
42
+ // store session data in a secure, encrypted file
43
+ // sessions will be loaded from these files and decrypted
44
+ // at the end of every request the state of `request.session`
45
+ // will be saved back to disk.
46
+ store: new FileStore({
47
+ ttl: 2592000000 / 1000, // 30 days in seconds
48
+ retries: 1,
49
+ secret: ENCRYPTION_KEY,
50
+
51
+ // custom encoding and decoding for sessions means we can
52
+ // initalize a single `UserSession` object for use with rest js
53
+ encoder: (sessionObj) => {
54
+ sessionObj.userSession = sessionObj.userSession.serialize();
55
+ return JSON.stringify(sessionObj);
56
+ },
57
+ decoder: (sessionContents) => {
58
+ const sessionObj = JSON.parse(sessionContents);
59
+ if (sessionObj.userSession) {
60
+ sessionObj.userSession = UserSession.deserialize(
61
+ sessionObj.userSession
62
+ );
63
+ }
64
+
65
+ return sessionObj;
66
+ }
67
+ })
68
+ }),
69
+
70
+ // next check for a session and if we have one fetch additional information
71
+ // the rest api for use in our app.
72
+ userInfoMiddleware,
73
+
74
+ // finally we can setup sapper by creating a Store that will syncronize
75
+ // server side data with the client
76
+ sapper.middleware({
77
+ store: (request) => {
78
+ let userSession;
79
+
80
+ // since the store is shared between the client and server
81
+ // we dont want to put refresh tokens in it. The store also needs to be
82
+ // in a serializable format so sapper and send it to the client.
83
+ if (request.session && request.session.userSession) {
84
+ userSession = request.session.userSession.toJSON();
85
+ delete userSession.refreshToken;
86
+ delete userSession.refreshTokenExpires;
87
+ }
88
+
89
+ // now we can initalize the store with our session (from the encrypted
90
+ // file) and the org and user info which userInfoMiddleware attached to
91
+ // the request object.
92
+ return new Store({
93
+ session: userSession,
94
+ user: request.session ? request.session.userInfo : undefined,
95
+ org: request.session ? request.session.orgInfo : undefined
96
+ });
97
+ }
98
+ })
99
+ )
100
+ .listen(PORT, (err) => {
101
+ if (err) console.log("error", err);
102
+ });
@@ -0,0 +1,82 @@
1
+ import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
2
+
3
+ const ASSETS = `cache${timestamp}`;
4
+
5
+ // `shell` is an array of all the files generated by the bundler,
6
+ // `files` is an array of everything in the `static` directory
7
+ const to_cache = shell.concat(files);
8
+ const cached = new Set(to_cache);
9
+
10
+ self.addEventListener('install', event => {
11
+ event.waitUntil(
12
+ caches
13
+ .open(ASSETS)
14
+ .then(cache => cache.addAll(to_cache))
15
+ .then(() => {
16
+ self.skipWaiting();
17
+ })
18
+ );
19
+ });
20
+
21
+ self.addEventListener('activate', event => {
22
+ event.waitUntil(
23
+ caches.keys().then(async keys => {
24
+ // delete old caches
25
+ for (const key of keys) {
26
+ if (key !== ASSETS) await caches.delete(key);
27
+ }
28
+
29
+ self.clients.claim();
30
+ })
31
+ );
32
+ });
33
+
34
+ self.addEventListener('fetch', event => {
35
+ if (event.request.method !== 'GET' || event.request.headers.has('range')) return;
36
+
37
+ const url = new URL(event.request.url);
38
+
39
+ // don't try to handle e.g. data: URIs
40
+ if (!url.protocol.startsWith('http')) return;
41
+
42
+ // ignore dev server requests
43
+ if (url.hostname === self.location.hostname && url.port !== self.location.port) return;
44
+
45
+ // always serve static files and bundler-generated assets from cache
46
+ if (url.host === self.location.host && cached.has(url.pathname)) {
47
+ event.respondWith(caches.match(event.request));
48
+ return;
49
+ }
50
+
51
+ // for pages, you might want to serve a shell `index.html` file,
52
+ // which Sapper has generated for you. It's not right for every
53
+ // app, but if it's right for yours then uncomment this section
54
+ /*
55
+ if (url.origin === self.origin && routes.find(route => route.pattern.test(url.pathname))) {
56
+ event.respondWith(caches.match('/index.html'));
57
+ return;
58
+ }
59
+ */
60
+
61
+ if (event.request.cache === 'only-if-cached') return;
62
+
63
+ // for everything else, try the network first, falling back to
64
+ // cache if the user is offline. (If the pages never change, you
65
+ // might prefer a cache-first approach to a network-first one.)
66
+ event.respondWith(
67
+ caches
68
+ .open(`offline${timestamp}`)
69
+ .then(async cache => {
70
+ try {
71
+ const response = await fetch(event.request);
72
+ cache.put(event.request, response.clone());
73
+ return response;
74
+ } catch(err) {
75
+ const response = await cache.match(event.request);
76
+ if (response) return response;
77
+
78
+ throw err;
79
+ }
80
+ })
81
+ );
82
+ });
@@ -0,0 +1,33 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <meta charset='utf-8'>
5
+ <meta name='viewport' content='width=device-width'>
6
+ <meta name='theme-color' content='#aa1e1e'>
7
+
8
+ %sapper.base%
9
+
10
+ <link rel='stylesheet' href='global.css'>
11
+ <link rel='manifest' href='manifest.json'>
12
+ <link rel='icon' type='image/png' href='favicon.png'>
13
+
14
+ <!-- Sapper generates a <style> tag containing critical CSS
15
+ for the current page. CSS for the rest of the app is
16
+ lazily loaded when it precaches secondary pages -->
17
+ %sapper.styles%
18
+
19
+ <!-- This contains the contents of the <svelte:head> component, if
20
+ the current page has one -->
21
+ %sapper.head%
22
+ </head>
23
+ <body>
24
+ <!-- The application will be rendered inside this element,
25
+ because `app/client.js` references it -->
26
+ <div id='app'>%sapper.html%</div>
27
+
28
+ <!-- Sapper creates a <script> tag containing `app/client.js`
29
+ and anything else it needs to hydrate the app and
30
+ initialise the router -->
31
+ %sapper.scripts%
32
+ </body>
33
+ </html>
@@ -0,0 +1,21 @@
1
+ // we could use UserSession.getUser() instead
2
+ import { getSelf, getUser } from "@esri/arcgis-rest-portal";
3
+
4
+ // this middleware checks for a session and if we find a session add
5
+ // additional info to that session from the getUser and getSelf calls
6
+ // request here is the incoming request in express.
7
+ export function userInfoMiddleware(incomingRequest, outgoingResponse, next) {
8
+ if (incomingRequest.session && incomingRequest.session.userSession) {
9
+ Promise.all([
10
+ getUser({ authentication: incomingRequest.session.userSession }),
11
+ getSelf({ authentication: incomingRequest.session.userSession })
12
+ ]).then(([userInfo, orgInfo]) => {
13
+ // add information to the request so the next middleware can access it
14
+ incomingRequest.session.userInfo = userInfo;
15
+ incomingRequest.session.orgInfo = orgInfo;
16
+ next(); // run the next middleware
17
+ });
18
+ } else {
19
+ next(); // run the next middleware
20
+ }
21
+ }
@@ -0,0 +1,33 @@
1
+ import { UserSession } from "@esri/arcgis-rest-auth";
2
+ import { loadModules } from "esri-loader";
3
+
4
+ export function retryWithNewSession(error, fetch) {
5
+ if (error.name === "ArcGISAuthError") {
6
+ return fetch("/auth/exchange-token")
7
+ .then(exchangeTokenResponse => {
8
+ return exchangeTokenResponse.json();
9
+ })
10
+ .then(sessionInfo => {
11
+ console.log(sessionInfo);
12
+ const newSession = new UserSession(session);
13
+
14
+ // if we are in a browser (client side) we are working with an instance
15
+ // of `UserSession` otherwise (server side) we are working with a JSON
16
+ // representation of a session.
17
+ if (process.browser) {
18
+ this.store.set({ session: newSession });
19
+
20
+ // if we are in a browser we should also update IdentityManager
21
+ loadModules(["esri/identity/IdentityManager"]).then(([esriId]) => {
22
+ esriId.registerToken(session.toCredential());
23
+ });
24
+ } else {
25
+ this.store.set({ session: sessionInfo });
26
+ }
27
+
28
+ return error.retry(newSession, 1);
29
+ });
30
+ }
31
+
32
+ throw error;
33
+ }
@@ -0,0 +1,36 @@
1
+ body {
2
+ margin: 0;
3
+ font-family: Roboto, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
4
+ font-size: 14px;
5
+ line-height: 1.5;
6
+ color: #333;
7
+ }
8
+
9
+ h1, h2, h3, h4, h5, h6 {
10
+ margin: 0 0 0.5em 0;
11
+ font-weight: 400;
12
+ line-height: 1.2;
13
+ }
14
+
15
+ h1 {
16
+ font-size: 2em;
17
+ }
18
+
19
+ a {
20
+ color: inherit;
21
+ }
22
+
23
+ code {
24
+ font-family: menlo, inconsolata, monospace;
25
+ font-size: calc(1em - 2px);
26
+ color: #555;
27
+ background-color: #f0f0f0;
28
+ padding: 0.2em 0.4em;
29
+ border-radius: 2px;
30
+ }
31
+
32
+ @media (min-width: 400px) {
33
+ body {
34
+ font-size: 16px;
35
+ }
36
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "background_color": "#ffffff",
3
+ "theme_color": "#aa1e1e",
4
+ "name": "TODO",
5
+ "short_name": "TODO",
6
+ "display": "minimal-ui",
7
+ "start_url": "/",
8
+ "icons": [
9
+ {
10
+ "src": "svelte-logo-192.png",
11
+ "sizes": "192x192",
12
+ "type": "image/png"
13
+ },
14
+ {
15
+ "src": "svelte-logo-512.png",
16
+ "sizes": "512x512",
17
+ "type": "image/png"
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,12 @@
1
+ /* eslint-env node */
2
+ module.exports = {
3
+ root: true,
4
+ env: {
5
+ node: true,
6
+ es6: true
7
+ },
8
+ extends: [
9
+ 'eslint:recommended',
10
+ 'prettier',
11
+ ]
12
+ };
package/docs/FAQ.md ADDED
@@ -0,0 +1,48 @@
1
+ ## Is this a _supported_ Esri product?
2
+
3
+ With the release of ArcGIS Platform in January 2021, Esri is now officially supporting ArcGIS REST JS. Documentation is available on [ArcGIS Developer](https://developers.arcgis.com/arcgis-rest-js/) and [Esri Technical Support](https://support.esri.com/en/contact-tech-support) will respond to support incidents for developers with a technical support plan.
4
+
5
+ This project is still an open source collaboration between developers from a variety of teams at Esri that was initially developed to scratch an itch of our own. We welcome outside contributors and fully expect that the tools here will be useful to any developer looking to integrate ArcGIS Platform services into their apps.
6
+
7
+ ## Comparison with the ArcGIS API for JavaScript
8
+
9
+ The [ArcGIS API for JavaScript](https://developers.arcgis.com/javascript/) is Esri's flagship product for building web applications to visualize, edit, map and analyze geospatial data. It is a feature complete client side API for working with the REST services based on ArcGIS Platform.
10
+ The ArcGIS API for JavaScript includes significant client side functionality including smart mapping, 3D rendering, geometric analysis and feature editing as well as full support for working with web maps and web scenes.
11
+
12
+ The goal of this project on the other hand is to provide a convenient binding to the underlying REST APIs for those who need to work directly with it from JavaScript. This project includes functional equivalents of the low-level request methods and identity management in the ArcGIS API for JavaScript, along with additional thin wrappers to assist developers in scripting against the ArcGIS REST APIs directly in Node.js and browser applications that do _not_ render a map.
13
+
14
+ We aim to make interacting with the platform as intuitive as possible, but the surface area of the project currently does not nearly encompass the entirety of the ArcGIS REST APIs.
15
+
16
+ ## Comparison with the ArcGIS API for Python
17
+
18
+ This project is similar to the [ArcGIS API for Python](https://developers.arcgis.com/python/) in many ways. Like the ArcGIS API for Python, this library aims to be a scripting tool that simplifies interacting with the ArcGIS REST API, but where the ArcGIS API for Python highlights integration with dataframes and Jupyter Notebooks for visualization and sharing this project provides only generic tools for JavaScript applications running on a server, CLI, in a browser or as a script.
19
+
20
+ ## Who is using these packages?
21
+
22
+ REST JS is trusted in ArcGIS applications serving **many** thousands of users.
23
+
24
+ * ArcGIS [Hub](https://hub.arcgis.com)
25
+ * ArcGIS [Developer](https://developers.arcgis.com)
26
+ * ArcGIS [Storymaps](https://storymaps.arcgis.com/en/)
27
+ * ArcGIS [Solutions](https://solutions.arcgis.com/)
28
+ * ArcGIS Enterprise
29
+ * ArcGIS [Urban](https://www.esri.com/en-us/landing-page/product/2018/arcgis-urban)
30
+ * ArcGIS [Analytics for IoT](https://www.esri.com/en-us/landing-page/product/2018/arcgis-analytics-for-iot)
31
+
32
+ And since its on GitHub, Esri developers are _far_ from the only ones using ArcGIS REST JS. Besides the usual culprits, we've seen the library running in:
33
+
34
+ * [Chrome Extensions](https://chrome.google.com/webstore/detail/echo-for-arcgis/mkeckgendkgcofhhenfkknonnkoboobm?hl=en-US)
35
+ * [Lambda Functions](https://medium.com/@adamjpfister/know-your-apis-6dc6ea3d084c)
36
+ * [Web Components](https://github.com/esridc/hub-components)
37
+ * [React Components](https://twitter.com/oppoudel/status/1022209378378805249)
38
+ * [Observable](https://observablehq.com/@jgravois/introduction-to-esri-arcgis-rest-js)
39
+
40
+ ## Why TypeScript
41
+
42
+ Using TypeScript allows us to add type information to request params and response structures. This vastly simplifies development. TypeScript also has excellent support for newer `async`/`await` patterns and for generating API documentation with [TypeDoc](http://typedoc.org/).
43
+
44
+ TypeScript compiles to JavaScript so you can use @esri/arcgis-rest-js in any JavaScript project. However if you use TypeScript you will get the benefits of type checking for free.
45
+
46
+ We also _really_ like TypeScript because it supports exporting to both [ES 2015 modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import) (use `import`/`export`) and [UMD](http://davidbcalhoun.com/2014/what-is-amd-commonjs-and-umd/) modules. This allows us to support a wide variety of module loaders and bundlers, including Browserify, Webpack, RequireJS, and Dojo 1 and 2.
47
+
48
+ We include [`tslib`](https://www.npmjs.com/package/tslib) as a dependency of individual npm packages to make usage of `_extends` and `_assign` in our compiled code more concise.