autculpa 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/.env.example +2 -0
- package/.eslintrc.json +37 -0
- package/.github/workflows/deploy-docs.yml +27 -0
- package/.github/workflows/pre-release-tests.yml +49 -0
- package/.github/workflows/pull-request-tests.yml +49 -0
- package/.github/workflows/release.yml +75 -0
- package/.prettierignore +2 -0
- package/.prettierrc +19 -0
- package/.vscode/launch.json +25 -0
- package/.vscode/settings.json +5 -0
- package/codecov.yml +7 -0
- package/commitlint.config.cjs +41 -0
- package/demos/.eslintrc.js +13 -0
- package/demos/ago-node-cli/README.md +30 -0
- package/demos/ago-node-cli/ago.js +31 -0
- package/demos/ago-node-cli/index.js +11 -0
- package/demos/ago-node-cli/lib/item-export-command.js +48 -0
- package/demos/ago-node-cli/lib/item-search-command.js +32 -0
- package/demos/ago-node-cli/package.json +29 -0
- package/demos/attachments-browser/README.md +7 -0
- package/demos/attachments-browser/index.html +165 -0
- package/demos/attachments-browser/package.json +15 -0
- package/demos/attachments-node/README.md +4 -0
- package/demos/attachments-node/image.jpg +0 -0
- package/demos/attachments-node/index.js +89 -0
- package/demos/attachments-node/package.json +19 -0
- package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
- package/demos/batch-geocoder-node/README.md +13 -0
- package/demos/batch-geocoder-node/batch-geocode.js +112 -0
- package/demos/batch-geocoder-node/config-template.js +18 -0
- package/demos/batch-geocoder-node/package.json +34 -0
- package/demos/browser-es-modules/README.md +7 -0
- package/demos/browser-es-modules/index.html +38 -0
- package/demos/browser-es-modules/package.json +15 -0
- package/demos/deno/README.md +1 -0
- package/demos/deno/import_map.json +8 -0
- package/demos/deno/index.js +5 -0
- package/demos/express/README.md +16 -0
- package/demos/express/config.json.template +3 -0
- package/demos/express/package.json +15 -0
- package/demos/express/server.js +37 -0
- package/demos/feature-service-browser/README.md +8 -0
- package/demos/feature-service-browser/index.html +122 -0
- package/demos/feature-service-browser/package.json +15 -0
- package/demos/geocoder-browser/README.md +12 -0
- package/demos/geocoder-browser/authenticate.html +29 -0
- package/demos/geocoder-browser/config.js.template +1 -0
- package/demos/geocoder-browser/index.html +139 -0
- package/demos/geocoder-browser/package.json +15 -0
- package/demos/jsapi-integration/README.md +26 -0
- package/demos/jsapi-integration/authenticate.html +29 -0
- package/demos/jsapi-integration/config.js +6 -0
- package/demos/jsapi-integration/index.html +91 -0
- package/demos/jsapi-integration/package.json +15 -0
- package/demos/node-cli-item-management/README.md +11 -0
- package/demos/node-cli-item-management/index.js +229 -0
- package/demos/node-cli-item-management/package.json +24 -0
- package/demos/node-cli-item-management/screenshot.png +0 -0
- package/demos/node-common-js/README.md +4 -0
- package/demos/node-common-js/index.js +5 -0
- package/demos/node-common-js/package.json +15 -0
- package/demos/node-es-modules/README.md +4 -0
- package/demos/node-es-modules/index.js +5 -0
- package/demos/node-es-modules/package.json +16 -0
- package/demos/oauth2-browser/README.md +17 -0
- package/demos/oauth2-browser/authenticate.html +29 -0
- package/demos/oauth2-browser/config.js.template +6 -0
- package/demos/oauth2-browser/index.html +223 -0
- package/demos/oauth2-browser/logo.svg +4 -0
- package/demos/oauth2-browser/package.json +15 -0
- package/demos/oauth2-browser/style.css +36 -0
- package/demos/oauth2-browser-retry/README.md +32 -0
- package/demos/oauth2-browser-retry/authenticate.html +21 -0
- package/demos/oauth2-browser-retry/index.html +114 -0
- package/demos/oauth2-browser-retry/logo.svg +4 -0
- package/demos/oauth2-browser-retry/package.json +15 -0
- package/demos/parcel/README.md +8 -0
- package/demos/parcel/index.html +16 -0
- package/demos/parcel/index.js +8 -0
- package/demos/parcel/package.json +20 -0
- package/demos/snowpack/README.md +8 -0
- package/demos/snowpack/index.html +16 -0
- package/demos/snowpack/index.js +8 -0
- package/demos/snowpack/package.json +20 -0
- package/demos/snowpack/snowpack.config.js +3 -0
- package/demos/stream-response-to-file/README.md +7 -0
- package/demos/stream-response-to-file/index.js +36 -0
- package/demos/stream-response-to-file/output/.gitkeep +0 -0
- package/demos/stream-response-to-file/package.json +31 -0
- package/demos/tree-shaking-rollup/.babelrc +3 -0
- package/demos/tree-shaking-rollup/README.md +9 -0
- package/demos/tree-shaking-rollup/index.html +11 -0
- package/demos/tree-shaking-rollup/package.json +22 -0
- package/demos/tree-shaking-rollup/rollup.config.js +13 -0
- package/demos/tree-shaking-rollup/src/index.js +8 -0
- package/demos/tree-shaking-webpack/README.md +9 -0
- package/demos/tree-shaking-webpack/index.html +11 -0
- package/demos/tree-shaking-webpack/package.json +26 -0
- package/demos/tree-shaking-webpack/src/index.js +8 -0
- package/demos/tree-shaking-webpack/webpack.config.js +29 -0
- package/demos/vite/README.md +6 -0
- package/demos/vite/favicon.svg +15 -0
- package/demos/vite/index.html +13 -0
- package/demos/vite/main.js +8 -0
- package/demos/vite/package.json +18 -0
- package/demos/vue/.env.example +11 -0
- package/demos/vue/.eslintrc.js +17 -0
- package/demos/vue/.postcssrc.js +5 -0
- package/demos/vue/README.md +17 -0
- package/demos/vue/babel.config.js +3 -0
- package/demos/vue/package.json +35 -0
- package/demos/vue/public/favicon.ico +0 -0
- package/demos/vue/public/index.html +24 -0
- package/demos/vue/src/assets/logo.svg +29 -0
- package/demos/vue/src/components/App.vue +303 -0
- package/demos/vue/src/components/Authenticate.vue +65 -0
- package/demos/vue/src/components/Loader.vue +230 -0
- package/demos/vue/src/main.js +92 -0
- package/demos/webmap-checker-sapper/.env.example +5 -0
- package/demos/webmap-checker-sapper/README.md +124 -0
- package/demos/webmap-checker-sapper/appveyor.yml +18 -0
- package/demos/webmap-checker-sapper/cypress/fixtures/example.json +5 -0
- package/demos/webmap-checker-sapper/cypress/integration/spec.js +19 -0
- package/demos/webmap-checker-sapper/cypress/plugins/index.js +17 -0
- package/demos/webmap-checker-sapper/cypress/support/commands.js +25 -0
- package/demos/webmap-checker-sapper/cypress/support/index.js +20 -0
- package/demos/webmap-checker-sapper/cypress.json +4 -0
- package/demos/webmap-checker-sapper/package.json +47 -0
- package/demos/webmap-checker-sapper/rollup.config.js +87 -0
- package/demos/webmap-checker-sapper/src/client.js +20 -0
- package/demos/webmap-checker-sapper/src/components/LayerStatus.html +108 -0
- package/demos/webmap-checker-sapper/src/components/Nav.html +21 -0
- package/demos/webmap-checker-sapper/src/components/WebMap.html +62 -0
- package/demos/webmap-checker-sapper/src/routes/_error.html +41 -0
- package/demos/webmap-checker-sapper/src/routes/_layout.html +21 -0
- package/demos/webmap-checker-sapper/src/routes/auth/authorize.js +18 -0
- package/demos/webmap-checker-sapper/src/routes/auth/exchange-token.js +20 -0
- package/demos/webmap-checker-sapper/src/routes/auth/post-sign-in.js +24 -0
- package/demos/webmap-checker-sapper/src/routes/auth/sign-out.js +10 -0
- package/demos/webmap-checker-sapper/src/routes/index.html +20 -0
- package/demos/webmap-checker-sapper/src/routes/webmaps/[webmapId].html +83 -0
- package/demos/webmap-checker-sapper/src/routes/webmaps/index.html +59 -0
- package/demos/webmap-checker-sapper/src/server.js +102 -0
- package/demos/webmap-checker-sapper/src/service-worker.js +82 -0
- package/demos/webmap-checker-sapper/src/template.html +33 -0
- package/demos/webmap-checker-sapper/src/userInfoMiddleware.js +21 -0
- package/demos/webmap-checker-sapper/src/utils.js +33 -0
- package/demos/webmap-checker-sapper/static/favicon.png +0 -0
- package/demos/webmap-checker-sapper/static/global.css +36 -0
- package/demos/webmap-checker-sapper/static/manifest.json +20 -0
- package/demos/webmap-checker-sapper/static/svelte-logo-192.png +0 -0
- package/demos/webmap-checker-sapper/static/svelte-logo-512.png +0 -0
- package/docs/.eslintrc.js +12 -0
- package/docs/FAQ.md +48 -0
- package/docs/HISTORY.md +62 -0
- package/docs/acetate.config.js +262 -0
- package/docs/build-typedoc.js +434 -0
- package/docs/generate-srihashes.js +61 -0
- package/docs/package.json +3 -0
- package/docs/src/_layout.html +86 -0
- package/docs/src/api/_declaration.html +600 -0
- package/docs/src/api/_layout.html +204 -0
- package/docs/src/api/_package.html +38 -0
- package/docs/src/api/index.html +16 -0
- package/docs/src/guides/_layout.html +24 -0
- package/docs/src/guides/amd-requirejs-dojo.md +40 -0
- package/docs/src/guides/browser-authentication.md +39 -0
- package/docs/src/guides/bundlers.md +52 -0
- package/docs/src/guides/cli-authentication.md +9 -0
- package/docs/src/guides/client-server-authentication.md +9 -0
- package/docs/src/guides/embedded-apps.md +106 -0
- package/docs/src/guides/from-a-cdn.md +38 -0
- package/docs/src/guides/index.md +59 -0
- package/docs/src/guides/node.md +84 -0
- package/docs/src/guides/package-overview.md +111 -0
- package/docs/src/guides/server-authentication.md +9 -0
- package/docs/src/guides/whats-new-v2-0.md +305 -0
- package/docs/src/img/icons.png +0 -0
- package/docs/src/img/icons@2x.png +0 -0
- package/docs/src/img/oauth-browser.png +0 -0
- package/docs/src/index.html +12 -0
- package/docs/src/js/api-search.js +112 -0
- package/docs/src/js/nav-toggle.js +41 -0
- package/docs/src/sass/_highlight.scss +96 -0
- package/docs/src/sass/_icons.scss +157 -0
- package/docs/src/sass/style.scss +242 -0
- package/jasmine.json +7 -0
- package/jasmine.live.json +7 -0
- package/karma.conf.cjs +128 -0
- package/package.json +140 -0
- package/packages/arcgis-rest-auth/CHANGELOG.md +80 -0
- package/packages/arcgis-rest-auth/README.md +71 -0
- package/packages/arcgis-rest-auth/package.json +66 -0
- package/packages/arcgis-rest-auth/src/index.ts +34 -0
- package/packages/arcgis-rest-auth/tsconfig.json +6 -0
- package/packages/arcgis-rest-demographics/CHANGELOG.md +14 -0
- package/packages/arcgis-rest-demographics/README.md +74 -0
- package/packages/arcgis-rest-demographics/package.json +69 -0
- package/packages/arcgis-rest-demographics/src/getAvailableCountries.ts +113 -0
- package/packages/arcgis-rest-demographics/src/getAvailableDataCollections.ts +161 -0
- package/packages/arcgis-rest-demographics/src/getAvailableGeographyLevels.ts +86 -0
- package/packages/arcgis-rest-demographics/src/getGeography.ts +152 -0
- package/packages/arcgis-rest-demographics/src/helpers.ts +27 -0
- package/packages/arcgis-rest-demographics/src/index.ts +16 -0
- package/packages/arcgis-rest-demographics/src/queryDemographicData.ts +108 -0
- package/packages/arcgis-rest-demographics/test/getAvailableCountries.test.ts +89 -0
- package/packages/arcgis-rest-demographics/test/getAvailableDataCollections.test.ts +114 -0
- package/packages/arcgis-rest-demographics/test/getAvailableGeographyLevels.test.ts +69 -0
- package/packages/arcgis-rest-demographics/test/getGeography.test.ts +150 -0
- package/packages/arcgis-rest-demographics/test/mocks/responses.ts +4 -0
- package/packages/arcgis-rest-demographics/test/queryDemographicData.test.live.ts +50 -0
- package/packages/arcgis-rest-demographics/test/queryDemographicData.test.ts +127 -0
- package/packages/arcgis-rest-demographics/tsconfig.json +6 -0
- package/packages/arcgis-rest-feature-service/CHANGELOG.md +44 -0
- package/packages/arcgis-rest-feature-service/README.md +75 -0
- package/packages/arcgis-rest-feature-service/package.json +70 -0
- package/packages/arcgis-rest-feature-service/src/add.ts +55 -0
- package/packages/arcgis-rest-feature-service/src/addAttachment.ts +53 -0
- package/packages/arcgis-rest-feature-service/src/addToServiceDefinition.ts +74 -0
- package/packages/arcgis-rest-feature-service/src/applyEdits.ts +94 -0
- package/packages/arcgis-rest-feature-service/src/createFeatureService.ts +191 -0
- package/packages/arcgis-rest-feature-service/src/decodeValues.ts +126 -0
- package/packages/arcgis-rest-feature-service/src/delete.ts +62 -0
- package/packages/arcgis-rest-feature-service/src/deleteAttachments.ts +52 -0
- package/packages/arcgis-rest-feature-service/src/getAllLayersAndTables.ts +30 -0
- package/packages/arcgis-rest-feature-service/src/getAttachments.ts +55 -0
- package/packages/arcgis-rest-feature-service/src/getLayer.ts +23 -0
- package/packages/arcgis-rest-feature-service/src/getService.ts +25 -0
- package/packages/arcgis-rest-feature-service/src/getServiceAdminInfo.ts +33 -0
- package/packages/arcgis-rest-feature-service/src/getViewSources.ts +19 -0
- package/packages/arcgis-rest-feature-service/src/helpers.ts +768 -0
- package/packages/arcgis-rest-feature-service/src/index.ts +37 -0
- package/packages/arcgis-rest-feature-service/src/query.ts +200 -0
- package/packages/arcgis-rest-feature-service/src/queryRelated.ts +86 -0
- package/packages/arcgis-rest-feature-service/src/update.ts +65 -0
- package/packages/arcgis-rest-feature-service/src/updateAttachment.ts +59 -0
- package/packages/arcgis-rest-feature-service/src/updateServiceDefinition.ts +53 -0
- package/packages/arcgis-rest-feature-service/test/addToServiceDefinition.test.ts +350 -0
- package/packages/arcgis-rest-feature-service/test/attachments.test.ts +188 -0
- package/packages/arcgis-rest-feature-service/test/createFeatureService.test.ts +279 -0
- package/packages/arcgis-rest-feature-service/test/crud.test.ts +196 -0
- package/packages/arcgis-rest-feature-service/test/decodeValues.test.ts +66 -0
- package/packages/arcgis-rest-feature-service/test/getAllLayersAndTables.test.ts +27 -0
- package/packages/arcgis-rest-feature-service/test/getLayer.test.ts +30 -0
- package/packages/arcgis-rest-feature-service/test/getService.test.ts +30 -0
- package/packages/arcgis-rest-feature-service/test/getServiceAdminInfo.test.ts +41 -0
- package/packages/arcgis-rest-feature-service/test/getViewSources.test.ts +45 -0
- package/packages/arcgis-rest-feature-service/test/helpers.test.ts +27 -0
- package/packages/arcgis-rest-feature-service/test/mocks/allLayersAndTablesResponse.ts +950 -0
- package/packages/arcgis-rest-feature-service/test/mocks/cvdQueryResponse.ts +225 -0
- package/packages/arcgis-rest-feature-service/test/mocks/feature.ts +302 -0
- package/packages/arcgis-rest-feature-service/test/mocks/fields.ts +779 -0
- package/packages/arcgis-rest-feature-service/test/mocks/foo.txt +1 -0
- package/packages/arcgis-rest-feature-service/test/mocks/layerDefinition.ts +80 -0
- package/packages/arcgis-rest-feature-service/test/mocks/service.ts +476 -0
- package/packages/arcgis-rest-feature-service/test/query.test.ts +166 -0
- package/packages/arcgis-rest-feature-service/test/updateServiceDefinition.test.ts +103 -0
- package/packages/arcgis-rest-feature-service/tsconfig.json +9 -0
- package/packages/arcgis-rest-fetch/README.md +17 -0
- package/packages/arcgis-rest-fetch/browser-ponyfill.js +8 -0
- package/packages/arcgis-rest-fetch/browser-ponyfill.mjs +8 -0
- package/packages/arcgis-rest-fetch/index.types.d.ts +8 -0
- package/packages/arcgis-rest-fetch/node-ponyfill.js +10 -0
- package/packages/arcgis-rest-fetch/node-ponyfill.mjs +10 -0
- package/packages/arcgis-rest-fetch/package.json +21 -0
- package/packages/arcgis-rest-form-data/README.md +15 -0
- package/packages/arcgis-rest-form-data/browser-ponyfill.js +5 -0
- package/packages/arcgis-rest-form-data/browser-ponyfill.mjs +3 -0
- package/packages/arcgis-rest-form-data/index.types.d.ts +9 -0
- package/packages/arcgis-rest-form-data/node-ponyfill.js +7 -0
- package/packages/arcgis-rest-form-data/node-ponyfill.mjs +5 -0
- package/packages/arcgis-rest-form-data/package.json +21 -0
- package/packages/arcgis-rest-geocoding/CHANGELOG.md +26 -0
- package/packages/arcgis-rest-geocoding/README.md +85 -0
- package/packages/arcgis-rest-geocoding/package.json +69 -0
- package/packages/arcgis-rest-geocoding/src/bulk.ts +106 -0
- package/packages/arcgis-rest-geocoding/src/geocode.ts +169 -0
- package/packages/arcgis-rest-geocoding/src/helpers.ts +56 -0
- package/packages/arcgis-rest-geocoding/src/index.ts +17 -0
- package/packages/arcgis-rest-geocoding/src/reverse.ts +82 -0
- package/packages/arcgis-rest-geocoding/src/suggest.ts +45 -0
- package/packages/arcgis-rest-geocoding/test/bulk.test.ts +193 -0
- package/packages/arcgis-rest-geocoding/test/geocode.test.ts +254 -0
- package/packages/arcgis-rest-geocoding/test/helpers.test.ts +85 -0
- package/packages/arcgis-rest-geocoding/test/mocks/responses.ts +1031 -0
- package/packages/arcgis-rest-geocoding/test/reverse.test.ts +124 -0
- package/packages/arcgis-rest-geocoding/test/suggest.test.ts +53 -0
- package/packages/arcgis-rest-geocoding/tsconfig.json +6 -0
- package/packages/arcgis-rest-portal/README.md +72 -0
- package/packages/arcgis-rest-portal/package.json +68 -0
- package/packages/arcgis-rest-portal/src/groups/add-users.ts +140 -0
- package/packages/arcgis-rest-portal/src/groups/create.ts +42 -0
- package/packages/arcgis-rest-portal/src/groups/get.ts +187 -0
- package/packages/arcgis-rest-portal/src/groups/helpers.ts +14 -0
- package/packages/arcgis-rest-portal/src/groups/invite-users.ts +141 -0
- package/packages/arcgis-rest-portal/src/groups/join.ts +57 -0
- package/packages/arcgis-rest-portal/src/groups/notification.ts +77 -0
- package/packages/arcgis-rest-portal/src/groups/protect.ts +56 -0
- package/packages/arcgis-rest-portal/src/groups/remove-users.ts +84 -0
- package/packages/arcgis-rest-portal/src/groups/remove.ts +32 -0
- package/packages/arcgis-rest-portal/src/groups/search.ts +48 -0
- package/packages/arcgis-rest-portal/src/groups/update-user-membership.ts +63 -0
- package/packages/arcgis-rest-portal/src/groups/update.ts +39 -0
- package/packages/arcgis-rest-portal/src/helpers.ts +83 -0
- package/packages/arcgis-rest-portal/src/index.ts +68 -0
- package/packages/arcgis-rest-portal/src/items/add.ts +145 -0
- package/packages/arcgis-rest-portal/src/items/content.ts +70 -0
- package/packages/arcgis-rest-portal/src/items/create.ts +149 -0
- package/packages/arcgis-rest-portal/src/items/export.ts +92 -0
- package/packages/arcgis-rest-portal/src/items/get.ts +444 -0
- package/packages/arcgis-rest-portal/src/items/helpers.ts +272 -0
- package/packages/arcgis-rest-portal/src/items/protect.ts +41 -0
- package/packages/arcgis-rest-portal/src/items/reassign.ts +59 -0
- package/packages/arcgis-rest-portal/src/items/remove.ts +139 -0
- package/packages/arcgis-rest-portal/src/items/search.ts +25 -0
- package/packages/arcgis-rest-portal/src/items/update.ts +188 -0
- package/packages/arcgis-rest-portal/src/items/upload.ts +124 -0
- package/packages/arcgis-rest-portal/src/orgs/notification.ts +148 -0
- package/packages/arcgis-rest-portal/src/services/get-unique-service-name.ts +35 -0
- package/packages/arcgis-rest-portal/src/services/is-service-name-available.ts +29 -0
- package/packages/arcgis-rest-portal/src/sharing/access.ts +84 -0
- package/packages/arcgis-rest-portal/src/sharing/helpers.ts +80 -0
- package/packages/arcgis-rest-portal/src/sharing/is-item-shared-with-group.ts +42 -0
- package/packages/arcgis-rest-portal/src/sharing/share-item-with-group.ts +335 -0
- package/packages/arcgis-rest-portal/src/sharing/unshare-item-with-group.ts +114 -0
- package/packages/arcgis-rest-portal/src/users/get-user-tags.ts +52 -0
- package/packages/arcgis-rest-portal/src/users/get-user-url.ts +18 -0
- package/packages/arcgis-rest-portal/src/users/get-user.ts +60 -0
- package/packages/arcgis-rest-portal/src/users/invitation.ts +157 -0
- package/packages/arcgis-rest-portal/src/users/notification.ts +67 -0
- package/packages/arcgis-rest-portal/src/users/search-users.ts +35 -0
- package/packages/arcgis-rest-portal/src/users/update.ts +63 -0
- package/packages/arcgis-rest-portal/src/util/SearchQueryBuilder.ts +391 -0
- package/packages/arcgis-rest-portal/src/util/array.ts +16 -0
- package/packages/arcgis-rest-portal/src/util/generic-search.ts +111 -0
- package/packages/arcgis-rest-portal/src/util/get-portal-settings.ts +44 -0
- package/packages/arcgis-rest-portal/src/util/get-portal-url.ts +32 -0
- package/packages/arcgis-rest-portal/src/util/get-portal.ts +53 -0
- package/packages/arcgis-rest-portal/src/util/get-subscription-info.ts +43 -0
- package/packages/arcgis-rest-portal/src/util/scrub-control-chars.ts +13 -0
- package/packages/arcgis-rest-portal/src/util/search.ts +48 -0
- package/packages/arcgis-rest-portal/test/groups/add-users.test.ts +238 -0
- package/packages/arcgis-rest-portal/test/groups/crud.test.ts +183 -0
- package/packages/arcgis-rest-portal/test/groups/get.test.ts +174 -0
- package/packages/arcgis-rest-portal/test/groups/invite-users.test.ts +146 -0
- package/packages/arcgis-rest-portal/test/groups/join.test.ts +71 -0
- package/packages/arcgis-rest-portal/test/groups/notification.test.ts +111 -0
- package/packages/arcgis-rest-portal/test/groups/protect.test.ts +71 -0
- package/packages/arcgis-rest-portal/test/groups/remove-users.test.ts +140 -0
- package/packages/arcgis-rest-portal/test/groups/search.test.ts +151 -0
- package/packages/arcgis-rest-portal/test/groups/update-user-membership.test.ts +64 -0
- package/packages/arcgis-rest-portal/test/items/add.test.ts +320 -0
- package/packages/arcgis-rest-portal/test/items/content.test.ts +161 -0
- package/packages/arcgis-rest-portal/test/items/create.test.ts +404 -0
- package/packages/arcgis-rest-portal/test/items/export.test.ts +115 -0
- package/packages/arcgis-rest-portal/test/items/get.test.ts +606 -0
- package/packages/arcgis-rest-portal/test/items/helpers.test.ts +60 -0
- package/packages/arcgis-rest-portal/test/items/protect.test.ts +120 -0
- package/packages/arcgis-rest-portal/test/items/reassign.test.ts +130 -0
- package/packages/arcgis-rest-portal/test/items/remove.test.ts +259 -0
- package/packages/arcgis-rest-portal/test/items/search.test.ts +274 -0
- package/packages/arcgis-rest-portal/test/items/update.test.ts +549 -0
- package/packages/arcgis-rest-portal/test/items/upload.test.ts +286 -0
- package/packages/arcgis-rest-portal/test/mocks/groups/responses.ts +208 -0
- package/packages/arcgis-rest-portal/test/mocks/items/foo.zip +0 -0
- package/packages/arcgis-rest-portal/test/mocks/items/item.ts +526 -0
- package/packages/arcgis-rest-portal/test/mocks/items/resources.ts +38 -0
- package/packages/arcgis-rest-portal/test/mocks/items/search.ts +121 -0
- package/packages/arcgis-rest-portal/test/mocks/portal/response.ts +126 -0
- package/packages/arcgis-rest-portal/test/mocks/portal/settings-response.ts +56 -0
- package/packages/arcgis-rest-portal/test/mocks/sharing/sharing.ts +18 -0
- package/packages/arcgis-rest-portal/test/mocks/users/invitation.ts +70 -0
- package/packages/arcgis-rest-portal/test/mocks/users/notification.ts +34 -0
- package/packages/arcgis-rest-portal/test/mocks/users/user-search.ts +388 -0
- package/packages/arcgis-rest-portal/test/mocks/users/user-tags.ts +5 -0
- package/packages/arcgis-rest-portal/test/mocks/users/user.ts +174 -0
- package/packages/arcgis-rest-portal/test/orgs/notification.test.ts +142 -0
- package/packages/arcgis-rest-portal/test/services/get-unique-service-name.test.ts +64 -0
- package/packages/arcgis-rest-portal/test/services/is-service-name-available.test.ts +41 -0
- package/packages/arcgis-rest-portal/test/sharing/access.test.ts +162 -0
- package/packages/arcgis-rest-portal/test/sharing/helpers.test.ts +55 -0
- package/packages/arcgis-rest-portal/test/sharing/share-item-with-group.test.ts +1328 -0
- package/packages/arcgis-rest-portal/test/sharing/unshare-item-with-group.test.ts +288 -0
- package/packages/arcgis-rest-portal/test/users/get-user-tags.test.ts +71 -0
- package/packages/arcgis-rest-portal/test/users/get-user-url.test.ts +40 -0
- package/packages/arcgis-rest-portal/test/users/get-user.test.ts +90 -0
- package/packages/arcgis-rest-portal/test/users/invitation.test.ts +126 -0
- package/packages/arcgis-rest-portal/test/users/notification.test.ts +76 -0
- package/packages/arcgis-rest-portal/test/users/search.test.ts +41 -0
- package/packages/arcgis-rest-portal/test/users/update.test.ts +150 -0
- package/packages/arcgis-rest-portal/test/util/SearchQueryBuilder.test.ts +295 -0
- package/packages/arcgis-rest-portal/test/util/array.test.ts +33 -0
- package/packages/arcgis-rest-portal/test/util/get-portal-settings.test.ts +57 -0
- package/packages/arcgis-rest-portal/test/util/get-portal-url.test.ts +37 -0
- package/packages/arcgis-rest-portal/test/util/portal.test.ts +137 -0
- package/packages/arcgis-rest-portal/test/util/scrub-control-chars.test.ts +25 -0
- package/packages/arcgis-rest-portal/tsconfig.json +6 -0
- package/packages/arcgis-rest-request/README.md +72 -0
- package/packages/arcgis-rest-request/package.json +69 -0
- package/packages/arcgis-rest-request/post-message-auth-spec.md +70 -0
- package/packages/arcgis-rest-request/src/ApiKeyManager.ts +60 -0
- package/packages/arcgis-rest-request/src/ApplicationCredentialsManager.ts +141 -0
- package/packages/arcgis-rest-request/src/ArcGISIdentityManager.ts +1470 -0
- package/packages/arcgis-rest-request/src/app-tokens.ts +132 -0
- package/packages/arcgis-rest-request/src/authenticated-request-options.ts +23 -0
- package/packages/arcgis-rest-request/src/federation-utils.ts +88 -0
- package/packages/arcgis-rest-request/src/fetch-token.ts +48 -0
- package/packages/arcgis-rest-request/src/generate-token.ts +32 -0
- package/packages/arcgis-rest-request/src/index.ts +45 -0
- package/packages/arcgis-rest-request/src/request.ts +446 -0
- package/packages/arcgis-rest-request/src/revoke-token.ts +73 -0
- package/packages/arcgis-rest-request/src/types/feature.ts +42 -0
- package/packages/arcgis-rest-request/src/types/geometry.ts +239 -0
- package/packages/arcgis-rest-request/src/types/group.ts +72 -0
- package/packages/arcgis-rest-request/src/types/service.ts +87 -0
- package/packages/arcgis-rest-request/src/types/symbol.ts +21 -0
- package/packages/arcgis-rest-request/src/types/user.ts +49 -0
- package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +82 -0
- package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
- package/packages/arcgis-rest-request/src/utils/GrantTypes.ts +5 -0
- package/packages/arcgis-rest-request/src/utils/HTTPMethods.ts +6 -0
- package/packages/arcgis-rest-request/src/utils/IAuthenticationManager.ts +22 -0
- package/packages/arcgis-rest-request/src/utils/IFetchTokenParams.ts +11 -0
- package/packages/arcgis-rest-request/src/utils/IGenerateTokenParams.ts +9 -0
- package/packages/arcgis-rest-request/src/utils/IParamBuilder.ts +3 -0
- package/packages/arcgis-rest-request/src/utils/IParams.ts +6 -0
- package/packages/arcgis-rest-request/src/utils/IParamsBuilder.ts +5 -0
- package/packages/arcgis-rest-request/src/utils/IRequestOptions.ts +59 -0
- package/packages/arcgis-rest-request/src/utils/ITokenRequestOptions.ts +9 -0
- package/packages/arcgis-rest-request/src/utils/ResponseFormats.ts +10 -0
- package/packages/arcgis-rest-request/src/utils/append-custom-params.ts +46 -0
- package/packages/arcgis-rest-request/src/utils/clean-url.ts +20 -0
- package/packages/arcgis-rest-request/src/utils/decode-query-string.ts +27 -0
- package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +41 -0
- package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +37 -0
- package/packages/arcgis-rest-request/src/utils/process-params.ts +109 -0
- package/packages/arcgis-rest-request/src/utils/retryAuthError.ts +10 -0
- package/packages/arcgis-rest-request/src/utils/warn.ts +11 -0
- package/packages/arcgis-rest-request/src/utils/with-options.ts +48 -0
- package/packages/arcgis-rest-request/src/validate-app-access.ts +69 -0
- package/packages/arcgis-rest-request/test/ApiKey.test.ts +53 -0
- package/packages/arcgis-rest-request/test/ApplicationSession.test.ts +148 -0
- package/packages/arcgis-rest-request/test/ArcGISIdentityManager.test.ts +2579 -0
- package/packages/arcgis-rest-request/test/app-tokens.test.ts +91 -0
- package/packages/arcgis-rest-request/test/federation-utils.test.ts +323 -0
- package/packages/arcgis-rest-request/test/fetchToken.test.ts +110 -0
- package/packages/arcgis-rest-request/test/generateToken.test.ts +40 -0
- package/packages/arcgis-rest-request/test/mocks/errors.ts +76 -0
- package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
- package/packages/arcgis-rest-request/test/mocks/param-builder.ts +7 -0
- package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +41 -0
- package/packages/arcgis-rest-request/test/mocks/webmap.ts +41 -0
- package/packages/arcgis-rest-request/test/request.test.ts +563 -0
- package/packages/arcgis-rest-request/test/revoke-token.test.ts +55 -0
- package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +196 -0
- package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +51 -0
- package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +111 -0
- package/packages/arcgis-rest-request/test/utils/clean-url.test.ts +50 -0
- package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +146 -0
- package/packages/arcgis-rest-request/test/utils/encode-query-string.test.ts +22 -0
- package/packages/arcgis-rest-request/test/utils/process-params.test.ts +205 -0
- package/packages/arcgis-rest-request/test/utils/with-options.test.ts +135 -0
- package/packages/arcgis-rest-request/test/validate-app-access.test.ts +44 -0
- package/packages/arcgis-rest-request/tsconfig.json +4 -0
- package/packages/arcgis-rest-routing/README.md +74 -0
- package/packages/arcgis-rest-routing/package.json +69 -0
- package/packages/arcgis-rest-routing/src/closestFacility.ts +223 -0
- package/packages/arcgis-rest-routing/src/helpers.ts +104 -0
- package/packages/arcgis-rest-routing/src/index.ts +20 -0
- package/packages/arcgis-rest-routing/src/originDestinationMatrix.ts +219 -0
- package/packages/arcgis-rest-routing/src/serviceArea.ts +169 -0
- package/packages/arcgis-rest-routing/src/solveRoute.ts +179 -0
- package/packages/arcgis-rest-routing/test/closestFacility.test.ts +686 -0
- package/packages/arcgis-rest-routing/test/mocks/inputs.ts +132 -0
- package/packages/arcgis-rest-routing/test/mocks/responses.ts +13316 -0
- package/packages/arcgis-rest-routing/test/originDestinationMatrix.test.ts +795 -0
- package/packages/arcgis-rest-routing/test/serviceArea.test.ts +601 -0
- package/packages/arcgis-rest-routing/test/solveRoute.test.ts +681 -0
- package/packages/arcgis-rest-routing/tsconfig.json +6 -0
- package/prettier-package-json.config.cjs +81 -0
- package/rollup.js +152 -0
- package/scripts/create-dist-package-jsons.js +17 -0
- package/scripts/deploy-doc-site.js +16 -0
- package/scripts/generate-sri-hashes.js +52 -0
- package/scripts/get-package-json.js +27 -0
- package/scripts/run-demo-server.js +21 -0
- package/scripts/test-helpers.ts +20 -0
- package/tsconfig.json +62 -0
- package/typedoc.json +14 -0
@@ -0,0 +1,124 @@
|
|
1
|
+
# Web map checker
|
2
|
+
|
3
|
+
This app demonstrates the use of ArcGIS REST JS with [sapper](https://sapper.svelte.technology/) a cutting edge web framework. [sapper is built on the [svelte](https://svelte.technology) component library and is a universal app framework that supports both client and server side rendering.
|
4
|
+
|
5
|
+
You may want to use a universal framework in your app for a few reasons:
|
6
|
+
|
7
|
+
1. Better SEO, because the app is rendered on the server search engines like Google can read the content and index your pages without using JavaScript.
|
8
|
+
2. Very fast performance. Because the app is rendered on the server browsers will render the initial HTML on the page providing a very fast experience, then JavaScript loads making the app interactive.
|
9
|
+
3. Server based sign in experiences can have longer sessions with less logins.
|
10
|
+
4. You might want access to a users token on the server side to perform background tasks like monitoring or data processing.
|
11
|
+
5. Increased security. In this example a users token is never stored on the client. Instead a a secure cookie is used on the client that pairs with an encrypted session store on the server. The client only gets short lived access tokens and is expected to frequently refresh them.
|
12
|
+
|
13
|
+
Since ArcGIS REST JS works on both the client and the server it is ideal for use in universal app frameworks.
|
14
|
+
|
15
|
+
Sapper is still in alpha and should not be used for production. However there are other universal app frameworks like [Nuxt](https://nuxtjs.org/) (Vue JS) and Next](https://nextjs.org/) (React)
|
16
|
+
|
17
|
+
## App Overview
|
18
|
+
|
19
|
+
Sapper works by starting up an [Express JS](https://expressjs.com/) web server and creating a route for each of the files in `src/routes`. Files ending in `.js` are API endpoints and files ending in `.html` are rendered as Svelte components.
|
20
|
+
|
21
|
+
The app has 4 API endpoints
|
22
|
+
|
23
|
+
- `src/routes/auth/authorize.js` - starts the oAuth 2.0 process to sign in a user.
|
24
|
+
- `src/routes/auth/post-sign-in.js` - completes the oAuth 2.0 process.
|
25
|
+
- `src/routes/auth/exchange-token.js` - provides a fresh token based on the secure session cookie when the current token expires.
|
26
|
+
- `src/routes/auth/sign-out.js` - signs the user out, destroying the saved session on the server and the session cookie on the client.
|
27
|
+
|
28
|
+
and 3 Svelte routes:
|
29
|
+
|
30
|
+
- `src/routes/index.html` - renders the main page for signed out users which shows a sign in buttons.
|
31
|
+
- `src/routes/webmaps/index.html` - renders a list of the users webmaps
|
32
|
+
- `src/routes/webmaps/[webmapId].html` - renders a detailed view for a webmap. The brackets indicate that will be replaced by an actual URL like `/webmaps/c7f2cdb8638147b0b5b792bcee800b48`
|
33
|
+
|
34
|
+
The `server.js` file defines the server and sets up [`express-session`](https://www.npmjs.com/package/express-session) with [`session-file-store`](https://www.npmjs.com/package/session-file-store) as well as defining the server side Svelte `Store` used to power the server side rendering.
|
35
|
+
|
36
|
+
`client.js` consumes the server side Svelte `Store` and uses it to hydrate the client side `Store`.
|
37
|
+
|
38
|
+
Once the app boots subsequent navigation by the user is handled client side by Svelte for better performance.
|
39
|
+
|
40
|
+
This app is based on https://github.com/sveltejs/sapper-template.
|
41
|
+
|
42
|
+
## Running this demo
|
43
|
+
|
44
|
+
1. Like all the other demo apps, run `npm run build` in the root directory.
|
45
|
+
1. `cd demos/webmap-checker-sapper`
|
46
|
+
1. Create a `.env` file at the root of the `webmap-checker-sapper` folder that contains the following:
|
47
|
+
```text
|
48
|
+
CLIENT_ID=YfFEWoHwtOY4KP1t
|
49
|
+
REDIRECT_URI=http://localhost:3000/auth/post-sign-in
|
50
|
+
ENCRYPTION_KEY=vf00tpMiGRSCO36yrbNm9jWyAStIJWJ5
|
51
|
+
SESSION_SECRET=Sb66uSlcA3RqyIXLOtwK5P1a37FvYqHD
|
52
|
+
PORT=3000
|
53
|
+
```
|
54
|
+
**Use these values only for development and testing out the demo.**
|
55
|
+
1. `npm run dev`
|
56
|
+
|
57
|
+
## Configuration
|
58
|
+
|
59
|
+
There are five config values stored in `.env`:
|
60
|
+
|
61
|
+
- `CLIENT_ID` - The client id from an app registered in ArcGIS Online. Directions for setting this up are part of the [named user login documentation](https://developers.arcgis.com/documentation/core-concepts/security-and-authentication/signing-in-arcgis-online-users/).
|
62
|
+
- `REDIRECT_URL` - A valid redirect URL from the app that owns the `CLIENT_ID`. Directions for setting this up are part of the [named user login documentation](https://developers.arcgis.com/documentation/core-concepts/security-and-authentication/signing-in-arcgis-online-users/).
|
63
|
+
- `ENCRYPTION_KEY` - Any string, but preferably a secure key from somewhere like https://randomkeygen.com/.
|
64
|
+
- `SESSION_SECRET` - Any string, but preferably a secure key from somewhere like https://randomkeygen.com/.
|
65
|
+
- `PORT` - The port to run the development server on.
|
66
|
+
|
67
|
+
## Authentication Workflow
|
68
|
+
|
69
|
+
This sample differs from other workflows in how authentication works but shows the flexibility of the ArcGIS REST JS library to perform server based authentication, store sessions on the server and seamlessly share sessions with the client and ArcGIS API for JavaScript
|
70
|
+
|
71
|
+
1. First a user sign in with OAuth 2.0. This starts by sending the user to `/auth/authorize`:
|
72
|
+
|
73
|
+
```html
|
74
|
+
<a href="/auth/authorize">Sign in to get stared</a>
|
75
|
+
```
|
76
|
+
|
77
|
+
2. Inside the `/auth/authorize` endpoint we call [`UserSession.authorize()`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/#authorize) to start the Oauth 2.0 login process. This redirects the user to the ArcGIS Online authorization page where they will sign in with their ArcGIS Online account.
|
78
|
+
3. After the user signs in with their ArcGIS Online account they are redirected back the app at the configured redirect URL which is `/auth/post-sign-in`. We then call [`UserSession.exchangeAuthorizationCode()`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/#exchangeAuthorizationCode) which finishes the authroization workflow and returns a [`UserSession`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/) that we can use to authenticate subsequent requests. In order to persist the session we assign it to `request.session.userSession` which triggers the [Express session middleware](https://github.com/expressjs/session). `/auth/post-sign-in` finishes by redirecting the user to `/webmaps` which is the main landing page of the app.
|
79
|
+
4. When `/auth/post-sign-in` finishes the session middleware saves the values assigned to `request.session` which includes our [`UserSession`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/). The session middleware uses a defined store (in this case [`session-file-store`](https://www.npmjs.com/package/session-file-store)) to serialize and encrypt the session to a file on disk. Then the session middleware sets a cookie on the client. On subsequent requests the session middleware will use the cookie to lookup the encrypted session and rehydrate our [`UserSession`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/).
|
80
|
+
5. Since we also need access ot our [`UserSession`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/) on the client we can use [`UserSession.toJSON()`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/#toJSON) method to convert it to a JSON object that can be serialized and sent to the client. Since our server-side session includes a refresh token we also need to delete the refresh token from the session before sending it to the client. The serialized session is sent to the client via sappers `Store` class.
|
81
|
+
6. On the client the serialized session is recreated and can now be used for requests on the client.
|
82
|
+
7. Since sessions on the client are short lived (they expire after a few hours) we need a mechanism to refresh the client side session with a new token if the old token expires. This needs to work seamlessly even in the middle of a series of requests. ArcGIS REST JS provides an easy mechanism to do this. Consider the following request:
|
83
|
+
|
84
|
+
```js
|
85
|
+
getItem(webmapId, {
|
86
|
+
authentication: userSession // userSession is expired
|
87
|
+
}).catch((error) => {
|
88
|
+
// handle the error
|
89
|
+
});
|
90
|
+
```
|
91
|
+
|
92
|
+
`error` will be an instance of either [`ArcGISRequestError`](https://esri.github.io/arcgis-rest-js/api/request/ArcGISRequestError/) or [`ArcGISAuthError`](https://esri.github.io/arcgis-rest-js/api/request/ArcGISAuthError/). `ArcGISAuthError` includes a special `retry()` method that can accept a new session and retry the request. You can them implement your logic to refresh a session and retry the request as in this example:
|
93
|
+
|
94
|
+
```js
|
95
|
+
getItem(webmapId, {
|
96
|
+
authentication: userSession // userSession is expired
|
97
|
+
})
|
98
|
+
.catch((error) => {
|
99
|
+
if (error.name === "ArcGISAuthError") {
|
100
|
+
return methodThatRefreshesSession(error).then((newSession) => {
|
101
|
+
return error.retry(newSession);
|
102
|
+
});
|
103
|
+
}
|
104
|
+
|
105
|
+
throw error; // otherwise rethrow the error so we can handle it in a later catch
|
106
|
+
})
|
107
|
+
.then((response) => {
|
108
|
+
// handle a successful response.
|
109
|
+
})
|
110
|
+
.catch((error) => {
|
111
|
+
// handle an actual request failure or error.
|
112
|
+
});
|
113
|
+
```
|
114
|
+
|
115
|
+
8. The retry workflow is handled entirely by a simple utility function called `retryWithNewSession()`. In order to get a new token a request is made to `/auth/exchange-token`. This request includes the session cookie so the server can find the instance of [`UserSession`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/) and call [`UserSession.refreshSession`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/#refreshSession) to refresh the session, strip out the refresh token and return the new session to the client which then retries the request with the new authentication.
|
116
|
+
9. In order to load the webmaps we also need to pass our [`UserSession`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/) to the ArcGIS API for JavaScript [`IdentityManager`](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html) to allow it load resources that require authentication. You can use [`UserSession.toCredential()`](https://esri.github.io/arcgis-rest-js/api/auth/UserSession/#toCredential-summary) to convert the session into a [`Credential`](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html) to pass to [`IdentityManager`](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html) as shown below:
|
117
|
+
|
118
|
+
```js
|
119
|
+
require(["esri/identity/IdentityManager"], function (esriId) {
|
120
|
+
esriId.registerToken(session.toCredential());
|
121
|
+
});
|
122
|
+
```
|
123
|
+
|
124
|
+
New credentials should also be registered with [`IdentityManager`](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html) when they are retrieved from the server as older sessions expire.
|
@@ -0,0 +1,18 @@
|
|
1
|
+
version: "{build}"
|
2
|
+
|
3
|
+
shallow_clone: true
|
4
|
+
|
5
|
+
init:
|
6
|
+
- git config --global core.autocrlf false
|
7
|
+
|
8
|
+
build: off
|
9
|
+
|
10
|
+
environment:
|
11
|
+
matrix:
|
12
|
+
# node.js
|
13
|
+
- nodejs_version: stable
|
14
|
+
|
15
|
+
install:
|
16
|
+
- ps: Install-Product node $env:nodejs_version
|
17
|
+
- npm install cypress
|
18
|
+
- npm install
|
@@ -0,0 +1,19 @@
|
|
1
|
+
describe('Sapper template app', () => {
|
2
|
+
beforeEach(() => {
|
3
|
+
cy.visit('/')
|
4
|
+
});
|
5
|
+
|
6
|
+
it('has the correct <h1>', () => {
|
7
|
+
cy.contains('h1', 'Great success!')
|
8
|
+
});
|
9
|
+
|
10
|
+
it('navigates to /about', () => {
|
11
|
+
cy.get('nav a').contains('about').click();
|
12
|
+
cy.url().should('include', '/about');
|
13
|
+
});
|
14
|
+
|
15
|
+
it('navigates to /blog', () => {
|
16
|
+
cy.get('nav a').contains('blog').click();
|
17
|
+
cy.url().should('include', '/blog');
|
18
|
+
});
|
19
|
+
});
|
@@ -0,0 +1,17 @@
|
|
1
|
+
// ***********************************************************
|
2
|
+
// This example plugins/index.js can be used to load plugins
|
3
|
+
//
|
4
|
+
// You can change the location of this file or turn off loading
|
5
|
+
// the plugins file with the 'pluginsFile' configuration option.
|
6
|
+
//
|
7
|
+
// You can read more here:
|
8
|
+
// https://on.cypress.io/plugins-guide
|
9
|
+
// ***********************************************************
|
10
|
+
|
11
|
+
// This function is called when a project is opened or re-opened (e.g. due to
|
12
|
+
// the project's config changing)
|
13
|
+
|
14
|
+
module.exports = (on, config) => {
|
15
|
+
// `on` is used to hook into various events Cypress emits
|
16
|
+
// `config` is the resolved Cypress config
|
17
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
// ***********************************************
|
2
|
+
// This example commands.js shows you how to
|
3
|
+
// create various custom commands and overwrite
|
4
|
+
// existing commands.
|
5
|
+
//
|
6
|
+
// For more comprehensive examples of custom
|
7
|
+
// commands please read more here:
|
8
|
+
// https://on.cypress.io/custom-commands
|
9
|
+
// ***********************************************
|
10
|
+
//
|
11
|
+
//
|
12
|
+
// -- This is a parent command --
|
13
|
+
// Cypress.Commands.add("login", (email, password) => { ... })
|
14
|
+
//
|
15
|
+
//
|
16
|
+
// -- This is a child command --
|
17
|
+
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
|
18
|
+
//
|
19
|
+
//
|
20
|
+
// -- This is a dual command --
|
21
|
+
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
|
22
|
+
//
|
23
|
+
//
|
24
|
+
// -- This is will overwrite an existing command --
|
25
|
+
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
|
@@ -0,0 +1,20 @@
|
|
1
|
+
// ***********************************************************
|
2
|
+
// This example support/index.js is processed and
|
3
|
+
// loaded automatically before your test files.
|
4
|
+
//
|
5
|
+
// This is a great place to put global configuration and
|
6
|
+
// behavior that modifies Cypress.
|
7
|
+
//
|
8
|
+
// You can change the location of this file or turn off
|
9
|
+
// automatically serving support files with the
|
10
|
+
// 'supportFile' configuration option.
|
11
|
+
//
|
12
|
+
// You can read more here:
|
13
|
+
// https://on.cypress.io/configuration
|
14
|
+
// ***********************************************************
|
15
|
+
|
16
|
+
// Import commands.js using ES2015 syntax:
|
17
|
+
import './commands'
|
18
|
+
|
19
|
+
// Alternatively you can use CommonJS syntax:
|
20
|
+
// require('./commands')
|
@@ -0,0 +1,47 @@
|
|
1
|
+
{
|
2
|
+
"private": true,
|
3
|
+
"name": "sapper-webmap-checker",
|
4
|
+
"version": "3.3.0",
|
5
|
+
"description": "this thing is cray cray",
|
6
|
+
"scripts": {
|
7
|
+
"build:legacy": "sapper build --legacy",
|
8
|
+
"cy:open": "cypress open",
|
9
|
+
"cy:run": "cypress run",
|
10
|
+
"dev": "sapper dev",
|
11
|
+
"export": "sapper export --legacy",
|
12
|
+
"start": "node __sapper__/build",
|
13
|
+
"test": "run-p --race dev cy:run"
|
14
|
+
},
|
15
|
+
"dependencies": {
|
16
|
+
"@esri/arcgis-rest-portal": "^3.3.0",
|
17
|
+
"@esri/arcgis-rest-request": "^3.3.0",
|
18
|
+
"compression": "^1.7.1",
|
19
|
+
"cookies": "^0.7.3",
|
20
|
+
"dotenv": "^6.2.0",
|
21
|
+
"esri-loader": "^2.6.0",
|
22
|
+
"express": "^4.16.4",
|
23
|
+
"express-session": "^1.15.6",
|
24
|
+
"fs-extra": "^7.0.1",
|
25
|
+
"polka": "^0.4.0",
|
26
|
+
"session-file-store": "^1.2.0",
|
27
|
+
"sirv": "^0.2.0"
|
28
|
+
},
|
29
|
+
"devDependencies": {
|
30
|
+
"@babel/core": "^7.0.0",
|
31
|
+
"@babel/plugin-syntax-dynamic-import": "^7.0.0",
|
32
|
+
"@babel/plugin-transform-runtime": "^7.0.0",
|
33
|
+
"@babel/preset-env": "^7.0.0",
|
34
|
+
"@babel/runtime": "^7.0.0",
|
35
|
+
"chokidar": "^2.1.0",
|
36
|
+
"npm-run-all": "^4.1.5",
|
37
|
+
"rollup": "^1.0.0",
|
38
|
+
"rollup-plugin-babel": "^4.0.2",
|
39
|
+
"rollup-plugin-commonjs": "^9.1.6",
|
40
|
+
"rollup-plugin-node-resolve": "^4.0.0",
|
41
|
+
"rollup-plugin-replace": "^2.0.0",
|
42
|
+
"rollup-plugin-svelte": "^5.0.1",
|
43
|
+
"rollup-plugin-terser": "^1.0.1",
|
44
|
+
"sapper": "^0.24.2",
|
45
|
+
"svelte": "^2.0.0"
|
46
|
+
}
|
47
|
+
}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
import resolve from 'rollup-plugin-node-resolve';
|
2
|
+
import replace from 'rollup-plugin-replace';
|
3
|
+
import commonjs from 'rollup-plugin-commonjs';
|
4
|
+
import svelte from 'rollup-plugin-svelte';
|
5
|
+
import babel from 'rollup-plugin-babel';
|
6
|
+
import { terser } from 'rollup-plugin-terser';
|
7
|
+
import config from 'sapper/config/rollup.js';
|
8
|
+
import pkg from './package.json';
|
9
|
+
|
10
|
+
const mode = process.env.NODE_ENV;
|
11
|
+
const dev = mode === 'development';
|
12
|
+
const legacy = !!process.env.SAPPER_LEGACY_BUILD;
|
13
|
+
|
14
|
+
export default {
|
15
|
+
client: {
|
16
|
+
input: config.client.input(),
|
17
|
+
output: config.client.output(),
|
18
|
+
plugins: [
|
19
|
+
replace({
|
20
|
+
'process.browser': true,
|
21
|
+
'process.env.NODE_ENV': JSON.stringify(mode)
|
22
|
+
}),
|
23
|
+
svelte({
|
24
|
+
dev,
|
25
|
+
hydratable: true,
|
26
|
+
emitCss: true
|
27
|
+
}),
|
28
|
+
resolve(),
|
29
|
+
commonjs(),
|
30
|
+
|
31
|
+
legacy && babel({
|
32
|
+
extensions: ['.js', '.html'],
|
33
|
+
runtimeHelpers: true,
|
34
|
+
exclude: ['node_modules/@babel/**'],
|
35
|
+
presets: [
|
36
|
+
['@babel/preset-env', {
|
37
|
+
targets: '> 0.25%, not dead'
|
38
|
+
}]
|
39
|
+
],
|
40
|
+
plugins: [
|
41
|
+
'@babel/plugin-syntax-dynamic-import',
|
42
|
+
['@babel/plugin-transform-runtime', {
|
43
|
+
useESModules: true
|
44
|
+
}]
|
45
|
+
]
|
46
|
+
}),
|
47
|
+
|
48
|
+
!dev && terser({
|
49
|
+
module: true
|
50
|
+
})
|
51
|
+
],
|
52
|
+
},
|
53
|
+
|
54
|
+
server: {
|
55
|
+
input: config.server.input(),
|
56
|
+
output: config.server.output(),
|
57
|
+
plugins: [
|
58
|
+
replace({
|
59
|
+
'process.browser': false,
|
60
|
+
'process.env.NODE_ENV': JSON.stringify(mode)
|
61
|
+
}),
|
62
|
+
svelte({
|
63
|
+
generate: 'ssr',
|
64
|
+
dev
|
65
|
+
}),
|
66
|
+
resolve(),
|
67
|
+
commonjs()
|
68
|
+
],
|
69
|
+
external: Object.keys(pkg.dependencies).concat(
|
70
|
+
require('module').builtinModules || Object.keys(process.binding('natives'))
|
71
|
+
),
|
72
|
+
},
|
73
|
+
|
74
|
+
serviceworker: {
|
75
|
+
input: config.serviceworker.input(),
|
76
|
+
output: config.serviceworker.output(),
|
77
|
+
plugins: [
|
78
|
+
resolve(),
|
79
|
+
replace({
|
80
|
+
'process.browser': true,
|
81
|
+
'process.env.NODE_ENV': JSON.stringify(mode)
|
82
|
+
}),
|
83
|
+
commonjs(),
|
84
|
+
!dev && terser()
|
85
|
+
]
|
86
|
+
}
|
87
|
+
};
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import * as sapper from "../__sapper__/client.js";
|
2
|
+
import { Store } from "svelte/store.js";
|
3
|
+
import { UserSession } from "@esri/arcgis-rest-request";
|
4
|
+
|
5
|
+
// sapper will have already rendered the HTML page in a specific state
|
6
|
+
// based on the Store we defined in server.js but we need to rehydrate that
|
7
|
+
// state on the client and start sapper.
|
8
|
+
sapper.start({
|
9
|
+
target: document.querySelector("#app"),
|
10
|
+
store: (data) => {
|
11
|
+
// `data` is whatever was in the Store on the server side.
|
12
|
+
// if we have a session we can create a new UserSession that we can
|
13
|
+
// use with ArcGIS REST JS on the client.
|
14
|
+
return new Store({
|
15
|
+
session: data && data.session ? new UserSession(data.session) : null,
|
16
|
+
user: data.user,
|
17
|
+
org: data.org
|
18
|
+
});
|
19
|
+
}
|
20
|
+
});
|
@@ -0,0 +1,108 @@
|
|
1
|
+
<h3>{title}</h3>
|
2
|
+
|
3
|
+
<!-- Render a link to ArcGIS Online -->
|
4
|
+
{#if itemId}
|
5
|
+
<p>
|
6
|
+
<a href="https://{$org.urlKey}.maps.arcgis.com/home/item.html?id={itemId}"
|
7
|
+
>View in ArcGIS Online</a
|
8
|
+
>
|
9
|
+
</p>
|
10
|
+
{/if}
|
11
|
+
|
12
|
+
<!-- Render a link to the service URL -->
|
13
|
+
{#if url || (item && item.url)}
|
14
|
+
<p>
|
15
|
+
<a href="{url || item.url}?token={$session.token}">
|
16
|
+
View Service URL
|
17
|
+
</a>
|
18
|
+
</p>
|
19
|
+
{/if}
|
20
|
+
|
21
|
+
<!-- Render this items sharing status-->
|
22
|
+
{#if itemId && item}
|
23
|
+
<p>Sharing Status: {item.access}</p>
|
24
|
+
{/if}
|
25
|
+
|
26
|
+
<!-- Render this items service status-->
|
27
|
+
{#if serviceHealth}
|
28
|
+
<p>Service Health: {serviceHealth}</p>
|
29
|
+
{/if}
|
30
|
+
|
31
|
+
<script>
|
32
|
+
import { getItem } from "@esri/arcgis-rest-portal";
|
33
|
+
import { request } from "@esri/arcgis-rest-request";
|
34
|
+
import { retryWithNewSession } from "../utils.js";
|
35
|
+
|
36
|
+
export default {
|
37
|
+
data: function() {
|
38
|
+
return {
|
39
|
+
serviceHealth: "unknown",
|
40
|
+
item: null
|
41
|
+
};
|
42
|
+
},
|
43
|
+
// runs every time the components state changes and only on the client
|
44
|
+
onstate({ changed, current, previous }) {
|
45
|
+
// this fires before oncreate, and on every state change.
|
46
|
+
// the first time it runs, `previous` is undefined
|
47
|
+
if (changed.url && current.url && !current.serviceHealthTimer) {
|
48
|
+
// check the service URL to see it is up
|
49
|
+
this.checkServiceStatus();
|
50
|
+
}
|
51
|
+
|
52
|
+
// load the item details async
|
53
|
+
if (changed.itemId && current.itemId) {
|
54
|
+
this.loadItemId();
|
55
|
+
}
|
56
|
+
},
|
57
|
+
// removes the setTimeout function when this component is destroyed
|
58
|
+
ondestroy() {
|
59
|
+
const { serviceHealthTimer } = this.get();
|
60
|
+
if (serviceHealthTimer) {
|
61
|
+
clearTimeout(serviceHealthTimer);
|
62
|
+
}
|
63
|
+
},
|
64
|
+
methods: {
|
65
|
+
// load more info about an item with ArcGIS REST JS
|
66
|
+
loadItemId() {
|
67
|
+
const { itemId, url } = this.get();
|
68
|
+
const { session } = this.store.get();
|
69
|
+
|
70
|
+
if (itemId) {
|
71
|
+
getItem(itemId, {
|
72
|
+
authentication: session
|
73
|
+
})
|
74
|
+
.catch(error => {
|
75
|
+
return retryWithNewSession(error, fetch);
|
76
|
+
})
|
77
|
+
.then(item => {
|
78
|
+
this.set({ item, url: url || item.url });
|
79
|
+
});
|
80
|
+
}
|
81
|
+
},
|
82
|
+
|
83
|
+
// Hit the service endpoint for a URL to see if the service is live
|
84
|
+
// Using the generic request method is useful for arbitrary methods
|
85
|
+
// or methods that aren't supported directly by ArcGIS Rest JS.
|
86
|
+
checkServiceStatus() {
|
87
|
+
const { url } = this.get();
|
88
|
+
const { session } = this.store.get();
|
89
|
+
if (url) {
|
90
|
+
request(url, { method: "get", authentication: session })
|
91
|
+
.then(response => {
|
92
|
+
this.set({ serviceHealth: "good" });
|
93
|
+
})
|
94
|
+
.catch(() => {
|
95
|
+
this.set({ serviceHealth: "bad" });
|
96
|
+
})
|
97
|
+
.finally(() => {
|
98
|
+
// setup a setTimeout so that this runs continuously
|
99
|
+
const serviceHealthTimer = setTimeout(() => {
|
100
|
+
this.checkServiceStatus();
|
101
|
+
}, 3000);
|
102
|
+
this.set({ serviceHealthTimer });
|
103
|
+
});
|
104
|
+
}
|
105
|
+
}
|
106
|
+
}
|
107
|
+
};
|
108
|
+
</script>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<nav class="flex items-center justify-between flex-wrap bg-teal p-6">
|
2
|
+
<div class="flex items-center flex-no-shrink text-white mr-6">
|
3
|
+
<span class="font-semibold text-4xl">Web Map Dependency Checker</span>
|
4
|
+
</div>
|
5
|
+
{#if $session}
|
6
|
+
<p class="text-white">
|
7
|
+
Signed in as {$session.username}
|
8
|
+
<a
|
9
|
+
href="/auth/sign-out"
|
10
|
+
class="inline-block px-6 py-3 leading-none border rounded text-white border-white hover:border-transparent hover:text-teal hover:bg-white mt-1"
|
11
|
+
>Sign out</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-white border-white hover:border-transparent hover:text-teal hover:bg-white mt-1"
|
18
|
+
>Sign in</a
|
19
|
+
>
|
20
|
+
{/if}
|
21
|
+
</nav>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<!-- We need to use a ref here so we can access this div inside out component -->
|
2
|
+
<div ref:mapContainer class="webmap-container"></div>
|
3
|
+
|
4
|
+
<style>
|
5
|
+
.webmap-container {
|
6
|
+
width: 100%;
|
7
|
+
height: 400px;
|
8
|
+
}
|
9
|
+
</style>
|
10
|
+
<script>
|
11
|
+
import { loadModules, loadCss } from "esri-loader";
|
12
|
+
|
13
|
+
export default {
|
14
|
+
// oncreate run only the client
|
15
|
+
oncreate() {
|
16
|
+
this.intializeWebMap();
|
17
|
+
},
|
18
|
+
methods: {
|
19
|
+
intializeWebMap() {
|
20
|
+
// get the id of the webmap from the component
|
21
|
+
const { itemId } = this.get();
|
22
|
+
|
23
|
+
// set the session from the global store
|
24
|
+
const { session } = this.store.get();
|
25
|
+
|
26
|
+
// load the CSS dynamically with Esri Loader
|
27
|
+
loadCss("https://js.arcgis.com/4.10/esri/css/main.css");
|
28
|
+
|
29
|
+
// load JS API modules with Esri Loader
|
30
|
+
loadModules([
|
31
|
+
"esri/views/MapView",
|
32
|
+
"esri/WebMap",
|
33
|
+
"esri/identity/IdentityManager"
|
34
|
+
])
|
35
|
+
.then(([MapView, WebMap, esriId]) => {
|
36
|
+
// since our webmap might be private we can pass teh credentials
|
37
|
+
// from the ArcGIS REST JS session to the JS API Identity Manager
|
38
|
+
// the JS API will then use these credentials for future requests
|
39
|
+
esriId.registerToken(session.toCredential());
|
40
|
+
|
41
|
+
// then we load a web map from an id
|
42
|
+
var webmap = new WebMap({
|
43
|
+
portalItem: {
|
44
|
+
// autocasts as new PortalItem()
|
45
|
+
id: itemId
|
46
|
+
}
|
47
|
+
});
|
48
|
+
|
49
|
+
// and we show that map in a container
|
50
|
+
var view = new MapView({
|
51
|
+
map: webmap,
|
52
|
+
container: this.refs.mapContainer
|
53
|
+
});
|
54
|
+
})
|
55
|
+
.catch(err => {
|
56
|
+
// handle any errors
|
57
|
+
console.error(err);
|
58
|
+
});
|
59
|
+
}
|
60
|
+
}
|
61
|
+
};
|
62
|
+
</script>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<svelte:head>
|
2
|
+
<title>{status}</title>
|
3
|
+
</svelte:head>
|
4
|
+
|
5
|
+
<h1>{status}</h1>
|
6
|
+
|
7
|
+
<p>{error.message}</p>
|
8
|
+
|
9
|
+
{#if dev && error.stack}
|
10
|
+
<pre>{error.stack}</pre>
|
11
|
+
{/if}
|
12
|
+
|
13
|
+
<style>
|
14
|
+
h1, p {
|
15
|
+
margin: 0 auto;
|
16
|
+
}
|
17
|
+
|
18
|
+
h1 {
|
19
|
+
font-size: 2.8em;
|
20
|
+
font-weight: 700;
|
21
|
+
margin: 0 0 0.5em 0;
|
22
|
+
}
|
23
|
+
|
24
|
+
p {
|
25
|
+
margin: 1em auto;
|
26
|
+
}
|
27
|
+
|
28
|
+
@media (min-width: 480px) {
|
29
|
+
h1 {
|
30
|
+
font-size: 4em;
|
31
|
+
}
|
32
|
+
}
|
33
|
+
</style>
|
34
|
+
|
35
|
+
<script>
|
36
|
+
export default {
|
37
|
+
helpers: {
|
38
|
+
dev: process.env.NODE_ENV === 'development'
|
39
|
+
}
|
40
|
+
};
|
41
|
+
</script>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<svelte:head>
|
2
|
+
<link
|
3
|
+
href="https://cdn.jsdelivr.net/npm/tailwindcss/dist/tailwind.min.css"
|
4
|
+
rel="stylesheet"
|
5
|
+
/>
|
6
|
+
</svelte:head>
|
7
|
+
|
8
|
+
<Nav/>
|
9
|
+
|
10
|
+
<main class="p-6">
|
11
|
+
<svelte:component this="{child.component}" {...child.props} />
|
12
|
+
</main>
|
13
|
+
|
14
|
+
<script>
|
15
|
+
import Nav from '../components/Nav.html';
|
16
|
+
export default {
|
17
|
+
components: {
|
18
|
+
Nav
|
19
|
+
}
|
20
|
+
};
|
21
|
+
</script>
|