sintfacilis 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +2 -0
- package/.eslintrc.js +20 -0
- package/.github/workflows/deploy-docs.yml +27 -0
- package/.github/workflows/pre-release-tests.yml +45 -0
- package/.github/workflows/pull-request-tests.yml +45 -0
- package/.prettierignore +2 -0
- package/.prettierrc +19 -0
- package/.vscode/launch.json +24 -0
- package/.vscode/settings.json +3 -0
- package/codecov.yml +7 -0
- package/demos/.eslintrc.js +13 -0
- package/demos/ago-node-cli/README.md +29 -0
- package/demos/ago-node-cli/ago.js +33 -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 +35 -0
- package/demos/ago-node-cli/package-lock.json +430 -0
- package/demos/ago-node-cli/package.json +30 -0
- package/demos/attachments/README.md +5 -0
- package/demos/attachments/index.html +165 -0
- package/demos/attachments/package-lock.json +543 -0
- package/demos/attachments/package.json +18 -0
- package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
- package/demos/batch-geocoder-node/README.md +15 -0
- package/demos/batch-geocoder-node/batch-geocode.js +115 -0
- package/demos/batch-geocoder-node/config-template.js +18 -0
- package/demos/batch-geocoder-node/package-lock.json +336 -0
- package/demos/batch-geocoder-node/package.json +37 -0
- package/demos/express/README.md +15 -0
- package/demos/express/config.json.template +3 -0
- package/demos/express/package-lock.json +1008 -0
- package/demos/express/package.json +18 -0
- package/demos/express/server.js +33 -0
- package/demos/feature-service-browser/README.md +6 -0
- package/demos/feature-service-browser/index.html +122 -0
- package/demos/feature-service-browser/package-lock.json +543 -0
- package/demos/feature-service-browser/package.json +18 -0
- package/demos/geocoder-browser/README.md +10 -0
- package/demos/geocoder-browser/config.js.template +1 -0
- package/demos/geocoder-browser/index.html +131 -0
- package/demos/geocoder-browser/package-lock.json +610 -0
- package/demos/geocoder-browser/package.json +19 -0
- package/demos/geocoder-browser/post-sign-in.html +25 -0
- package/demos/jsapi-integration/README.md +25 -0
- package/demos/jsapi-integration/config.js +6 -0
- package/demos/jsapi-integration/index.html +93 -0
- package/demos/jsapi-integration/package-lock.json +247 -0
- package/demos/jsapi-integration/package.json +19 -0
- package/demos/node-cli-item-management/README.md +10 -0
- package/demos/node-cli-item-management/index.js +238 -0
- package/demos/node-cli-item-management/package-lock.json +432 -0
- package/demos/node-cli-item-management/package.json +27 -0
- package/demos/node-cli-item-management/screenshot.png +0 -0
- package/demos/oauth2-browser/README.md +14 -0
- package/demos/oauth2-browser/authenticate.html +30 -0
- package/demos/oauth2-browser/config.js.template +6 -0
- package/demos/oauth2-browser/index.html +211 -0
- package/demos/oauth2-browser/logo.svg +4 -0
- package/demos/oauth2-browser/package-lock.json +474 -0
- package/demos/oauth2-browser/package.json +18 -0
- package/demos/oauth2-browser/style.css +36 -0
- package/demos/oauth2-browser-retry/README.md +25 -0
- package/demos/oauth2-browser-retry/authenticate.html +22 -0
- package/demos/oauth2-browser-retry/index.html +116 -0
- package/demos/oauth2-browser-retry/logo.svg +4 -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-lock.json +227 -0
- package/demos/stream-response-to-file/package.json +33 -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-lock.json +5646 -0
- package/demos/tree-shaking-rollup/package.json +25 -0
- package/demos/tree-shaking-rollup/rollup.config.js +17 -0
- package/demos/tree-shaking-rollup/src/index.js +8 -0
- package/demos/tree-shaking-webpack/README.md +8 -0
- package/demos/tree-shaking-webpack/index.html +11 -0
- package/demos/tree-shaking-webpack/package-lock.json +11455 -0
- package/demos/tree-shaking-webpack/package.json +24 -0
- package/demos/tree-shaking-webpack/src/index.js +10 -0
- package/demos/tree-shaking-webpack/webpack.config.js +27 -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-lock.json +28044 -0
- package/demos/vue/package.json +33 -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 +305 -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 +123 -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-lock.json +9622 -0
- package/demos/webmap-checker-sapper/package.json +50 -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 +101 -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 +53 -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 +104 -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/docs/src/srihashes.json +12 -0
- package/jasmine.json +7 -0
- package/jasmine.live.json +7 -0
- package/karma.conf.js +107 -0
- package/lerna.json +8 -0
- package/notes/README.md +68 -0
- package/package.json +141 -0
- package/packages/arcgis-rest-auth/README.md +71 -0
- package/packages/arcgis-rest-auth/package.json +69 -0
- package/packages/arcgis-rest-auth/post-message-auth-spec.md +70 -0
- package/packages/arcgis-rest-auth/src/ApiKey.ts +41 -0
- package/packages/arcgis-rest-auth/src/ApplicationSession.ts +122 -0
- package/packages/arcgis-rest-auth/src/UserSession.ts +1355 -0
- package/packages/arcgis-rest-auth/src/app-tokens.ts +131 -0
- package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +24 -0
- package/packages/arcgis-rest-auth/src/federation-utils.ts +85 -0
- package/packages/arcgis-rest-auth/src/fetch-token.ts +50 -0
- package/packages/arcgis-rest-auth/src/generate-token.ts +35 -0
- package/packages/arcgis-rest-auth/src/index.ts +13 -0
- package/packages/arcgis-rest-auth/src/validate-app-access.ts +68 -0
- package/packages/arcgis-rest-auth/test/ApiKey.test.ts +35 -0
- package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +124 -0
- package/packages/arcgis-rest-auth/test/UserSession.test.ts +2377 -0
- package/packages/arcgis-rest-auth/test/app-tokens.test.ts +95 -0
- package/packages/arcgis-rest-auth/test/federation-utils.test.ts +323 -0
- package/packages/arcgis-rest-auth/test/fetchToken.test.ts +112 -0
- package/packages/arcgis-rest-auth/test/generateToken.test.ts +102 -0
- package/packages/arcgis-rest-auth/test/utils.ts +14 -0
- package/packages/arcgis-rest-auth/test/validate-app-access.test.ts +46 -0
- package/packages/arcgis-rest-auth/tsconfig.json +6 -0
- package/packages/arcgis-rest-demographics/README.md +75 -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 +166 -0
- package/packages/arcgis-rest-demographics/src/getAvailableGeographyLevels.ts +88 -0
- package/packages/arcgis-rest-demographics/src/getGeography.ts +152 -0
- package/packages/arcgis-rest-demographics/src/helpers.ts +28 -0
- package/packages/arcgis-rest-demographics/src/index.ts +8 -0
- package/packages/arcgis-rest-demographics/src/queryDemographicData.ts +106 -0
- package/packages/arcgis-rest-demographics/test/getAvailableCountries.test.ts +92 -0
- package/packages/arcgis-rest-demographics/test/getAvailableDataCollections.test.ts +115 -0
- package/packages/arcgis-rest-demographics/test/getAvailableGeographyLevels.test.ts +72 -0
- package/packages/arcgis-rest-demographics/test/getGeography.test.ts +141 -0
- package/packages/arcgis-rest-demographics/test/mocks/responses.ts +4 -0
- package/packages/arcgis-rest-demographics/test/queryDemographicData.test.live.ts +42 -0
- package/packages/arcgis-rest-demographics/test/queryDemographicData.test.ts +113 -0
- package/packages/arcgis-rest-demographics/tsconfig.json +6 -0
- package/packages/arcgis-rest-feature-layer/README.md +77 -0
- package/packages/arcgis-rest-feature-layer/package.json +64 -0
- package/packages/arcgis-rest-feature-layer/src/add.ts +56 -0
- package/packages/arcgis-rest-feature-layer/src/addAttachment.ts +53 -0
- package/packages/arcgis-rest-feature-layer/src/applyEdits.ts +95 -0
- package/packages/arcgis-rest-feature-layer/src/decodeValues.ts +122 -0
- package/packages/arcgis-rest-feature-layer/src/delete.ts +61 -0
- package/packages/arcgis-rest-feature-layer/src/deleteAttachments.ts +52 -0
- package/packages/arcgis-rest-feature-layer/src/getAllLayersAndTables.ts +30 -0
- package/packages/arcgis-rest-feature-layer/src/getAttachments.ts +55 -0
- package/packages/arcgis-rest-feature-layer/src/getLayer.ts +24 -0
- package/packages/arcgis-rest-feature-layer/src/getService.ts +26 -0
- package/packages/arcgis-rest-feature-layer/src/helpers.ts +97 -0
- package/packages/arcgis-rest-feature-layer/src/index.ts +32 -0
- package/packages/arcgis-rest-feature-layer/src/query.ts +204 -0
- package/packages/arcgis-rest-feature-layer/src/queryRelated.ts +89 -0
- package/packages/arcgis-rest-feature-layer/src/update.ts +60 -0
- package/packages/arcgis-rest-feature-layer/src/updateAttachment.ts +59 -0
- package/packages/arcgis-rest-feature-layer/test/attachments.test.ts +200 -0
- package/packages/arcgis-rest-feature-layer/test/crud.test.ts +197 -0
- package/packages/arcgis-rest-feature-layer/test/decodeValues.test.ts +67 -0
- package/packages/arcgis-rest-feature-layer/test/getAllLayersAndTables.test.ts +28 -0
- package/packages/arcgis-rest-feature-layer/test/getLayer.test.ts +31 -0
- package/packages/arcgis-rest-feature-layer/test/getService.test.ts +31 -0
- package/packages/arcgis-rest-feature-layer/test/helpers.test.ts +25 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/allLayersAndTablesResponse.ts +906 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/cvdQueryResponse.ts +225 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/feature.ts +302 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/fields.ts +779 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/foo.txt +1 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/service.ts +398 -0
- package/packages/arcgis-rest-feature-layer/test/query.test.ts +167 -0
- package/packages/arcgis-rest-feature-layer/tsconfig.json +6 -0
- package/packages/arcgis-rest-geocoding/README.md +86 -0
- package/packages/arcgis-rest-geocoding/package.json +66 -0
- package/packages/arcgis-rest-geocoding/src/bulk.ts +104 -0
- package/packages/arcgis-rest-geocoding/src/geocode.ts +166 -0
- package/packages/arcgis-rest-geocoding/src/helpers.ts +56 -0
- package/packages/arcgis-rest-geocoding/src/index.ts +15 -0
- package/packages/arcgis-rest-geocoding/src/reverse.ts +84 -0
- package/packages/arcgis-rest-geocoding/src/suggest.ts +45 -0
- package/packages/arcgis-rest-geocoding/test/bulk.test.ts +194 -0
- package/packages/arcgis-rest-geocoding/test/geocode.test.ts +253 -0
- package/packages/arcgis-rest-geocoding/test/helpers.test.ts +85 -0
- package/packages/arcgis-rest-geocoding/test/mocks/responses.ts +591 -0
- package/packages/arcgis-rest-geocoding/test/reverse.test.ts +126 -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 +73 -0
- package/packages/arcgis-rest-portal/package.json +64 -0
- package/packages/arcgis-rest-portal/src/groups/add-users.ts +140 -0
- package/packages/arcgis-rest-portal/src/groups/create.ts +43 -0
- package/packages/arcgis-rest-portal/src/groups/get.ts +184 -0
- package/packages/arcgis-rest-portal/src/groups/helpers.ts +14 -0
- package/packages/arcgis-rest-portal/src/groups/invite-users.ts +127 -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 +76 -0
- package/packages/arcgis-rest-portal/src/groups/remove.ts +32 -0
- package/packages/arcgis-rest-portal/src/groups/search.ts +47 -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/index.ts +69 -0
- package/packages/arcgis-rest-portal/src/items/add.ts +138 -0
- package/packages/arcgis-rest-portal/src/items/content.ts +67 -0
- package/packages/arcgis-rest-portal/src/items/create.ts +150 -0
- package/packages/arcgis-rest-portal/src/items/export.ts +80 -0
- package/packages/arcgis-rest-portal/src/items/get.ts +437 -0
- package/packages/arcgis-rest-portal/src/items/helpers.ts +292 -0
- package/packages/arcgis-rest-portal/src/items/protect.ts +41 -0
- package/packages/arcgis-rest-portal/src/items/reassign.ts +61 -0
- package/packages/arcgis-rest-portal/src/items/remove.ts +141 -0
- package/packages/arcgis-rest-portal/src/items/search.ts +25 -0
- package/packages/arcgis-rest-portal/src/items/update.ts +185 -0
- package/packages/arcgis-rest-portal/src/items/upload.ts +125 -0
- package/packages/arcgis-rest-portal/src/orgs/notification.ts +131 -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 +30 -0
- package/packages/arcgis-rest-portal/src/sharing/access.ts +84 -0
- package/packages/arcgis-rest-portal/src/sharing/helpers.ts +81 -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 +336 -0
- package/packages/arcgis-rest-portal/src/sharing/unshare-item-with-group.ts +105 -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 +58 -0
- package/packages/arcgis-rest-portal/src/users/invitation.ts +156 -0
- package/packages/arcgis-rest-portal/src/users/notification.ts +68 -0
- package/packages/arcgis-rest-portal/src/users/search-users.ts +37 -0
- package/packages/arcgis-rest-portal/src/users/update.ts +66 -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 +99 -0
- package/packages/arcgis-rest-portal/src/util/get-portal-settings.ts +45 -0
- package/packages/arcgis-rest-portal/src/util/get-portal-url.ts +28 -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 +42 -0
- package/packages/arcgis-rest-portal/test/groups/add-users.test.ts +239 -0
- package/packages/arcgis-rest-portal/test/groups/crud.test.ts +180 -0
- package/packages/arcgis-rest-portal/test/groups/get.test.ts +176 -0
- package/packages/arcgis-rest-portal/test/groups/invite-users.test.ts +146 -0
- package/packages/arcgis-rest-portal/test/groups/join.test.ts +72 -0
- package/packages/arcgis-rest-portal/test/groups/notification.test.ts +112 -0
- package/packages/arcgis-rest-portal/test/groups/protect.test.ts +72 -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 +62 -0
- package/packages/arcgis-rest-portal/test/items/add.test.ts +323 -0
- package/packages/arcgis-rest-portal/test/items/content.test.ts +156 -0
- package/packages/arcgis-rest-portal/test/items/create.test.ts +400 -0
- package/packages/arcgis-rest-portal/test/items/export.test.ts +122 -0
- package/packages/arcgis-rest-portal/test/items/get.test.ts +583 -0
- package/packages/arcgis-rest-portal/test/items/helpers.test.ts +60 -0
- package/packages/arcgis-rest-portal/test/items/protect.test.ts +122 -0
- package/packages/arcgis-rest-portal/test/items/reassign.test.ts +131 -0
- package/packages/arcgis-rest-portal/test/items/remove.test.ts +261 -0
- package/packages/arcgis-rest-portal/test/items/search.test.ts +275 -0
- package/packages/arcgis-rest-portal/test/items/update.test.ts +556 -0
- package/packages/arcgis-rest-portal/test/items/upload.test.ts +282 -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 +144 -0
- package/packages/arcgis-rest-portal/test/services/get-unique-service-name.test.ts +59 -0
- package/packages/arcgis-rest-portal/test/services/is-service-name-available.test.ts +46 -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 +127 -0
- package/packages/arcgis-rest-portal/test/users/notification.test.ts +77 -0
- package/packages/arcgis-rest-portal/test/users/search.test.ts +42 -0
- package/packages/arcgis-rest-portal/test/users/update.test.ts +151 -0
- package/packages/arcgis-rest-portal/test/util/SearchQueryBuilder.test.ts +340 -0
- package/packages/arcgis-rest-portal/test/util/array.test.ts +30 -0
- package/packages/arcgis-rest-portal/test/util/get-portal-settings.test.ts +68 -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 +148 -0
- package/packages/arcgis-rest-portal/test/util/scrub-control-chars.test.ts +22 -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 +60 -0
- package/packages/arcgis-rest-request/src/index.ts +25 -0
- package/packages/arcgis-rest-request/src/request.ts +433 -0
- package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +76 -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 +54 -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 +49 -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 +38 -0
- package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +35 -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/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 +621 -0
- package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +191 -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 +133 -0
- package/packages/arcgis-rest-request/test/utils/encode-query-string.test.ts +18 -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 +133 -0
- package/packages/arcgis-rest-request/tsconfig.json +4 -0
- package/packages/arcgis-rest-routing/README.md +75 -0
- package/packages/arcgis-rest-routing/package.json +65 -0
- package/packages/arcgis-rest-routing/src/closestFacility.ts +225 -0
- package/packages/arcgis-rest-routing/src/helpers.ts +104 -0
- package/packages/arcgis-rest-routing/src/index.ts +14 -0
- package/packages/arcgis-rest-routing/src/originDestinationMatrix.ts +223 -0
- package/packages/arcgis-rest-routing/src/serviceArea.ts +173 -0
- package/packages/arcgis-rest-routing/src/solveRoute.ts +180 -0
- package/packages/arcgis-rest-routing/test/closestFacility.test.ts +683 -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 +677 -0
- package/packages/arcgis-rest-routing/tsconfig.json +6 -0
- package/packages/arcgis-rest-service-admin/README.md +73 -0
- package/packages/arcgis-rest-service-admin/package.json +65 -0
- package/packages/arcgis-rest-service-admin/src/addTo.ts +70 -0
- package/packages/arcgis-rest-service-admin/src/create.ts +189 -0
- package/packages/arcgis-rest-service-admin/src/get-service-admin-info.ts +34 -0
- package/packages/arcgis-rest-service-admin/src/get-view-sources.ts +20 -0
- package/packages/arcgis-rest-service-admin/src/index.ts +14 -0
- package/packages/arcgis-rest-service-admin/src/update.ts +50 -0
- package/packages/arcgis-rest-service-admin/test/addTo.test.ts +350 -0
- package/packages/arcgis-rest-service-admin/test/create.test.ts +294 -0
- package/packages/arcgis-rest-service-admin/test/get-service-admin-info.test.ts +37 -0
- package/packages/arcgis-rest-service-admin/test/get-view-sources.test.ts +40 -0
- package/packages/arcgis-rest-service-admin/test/mocks/layerDefinition.ts +79 -0
- package/packages/arcgis-rest-service-admin/test/mocks/service.ts +81 -0
- package/packages/arcgis-rest-service-admin/test/update.test.ts +115 -0
- package/packages/arcgis-rest-service-admin/tsconfig.json +5 -0
- package/packages/arcgis-rest-types/README.md +66 -0
- package/packages/arcgis-rest-types/package.json +54 -0
- package/packages/arcgis-rest-types/src/feature.ts +42 -0
- package/packages/arcgis-rest-types/src/geometry.ts +272 -0
- package/packages/arcgis-rest-types/src/group.ts +72 -0
- package/packages/arcgis-rest-types/src/index.ts +9 -0
- package/packages/arcgis-rest-types/src/item.ts +81 -0
- package/packages/arcgis-rest-types/src/service.ts +156 -0
- package/packages/arcgis-rest-types/src/statisticDefinition.ts +33 -0
- package/packages/arcgis-rest-types/src/symbol.ts +170 -0
- package/packages/arcgis-rest-types/src/user.ts +49 -0
- package/packages/arcgis-rest-types/src/webmap.ts +1405 -0
- package/packages/arcgis-rest-types/tsconfig.json +10 -0
- package/support/changelog.js +393 -0
- package/support/deploy-doc-site.js +16 -0
- package/support/dev.sh +6 -0
- package/support/publish.sh +47 -0
- package/support/test-helpers.js +9 -0
- package/tsconfig.json +63 -0
- package/umd-base-profile.js +81 -0
- package/umd-production-profile.js +13 -0
@@ -0,0 +1,433 @@
|
|
1
|
+
/* Copyright (c) 2017-2018 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
import { encodeFormData } from "./utils/encode-form-data";
|
5
|
+
import { encodeQueryString } from "./utils/encode-query-string";
|
6
|
+
import { requiresFormData } from "./utils/process-params";
|
7
|
+
import { ArcGISRequestError } from "./utils/ArcGISRequestError";
|
8
|
+
import { IRequestOptions } from "./utils/IRequestOptions";
|
9
|
+
import { IParams } from "./utils/IParams";
|
10
|
+
import { warn } from "./utils/warn";
|
11
|
+
import { IRetryAuthError } from "./utils/retryAuthError";
|
12
|
+
|
13
|
+
export const NODEJS_DEFAULT_REFERER_HEADER = `@esri/arcgis-rest-js`;
|
14
|
+
|
15
|
+
let DEFAULT_ARCGIS_REQUEST_OPTIONS: IRequestOptions = {
|
16
|
+
httpMethod: "POST",
|
17
|
+
params: {
|
18
|
+
f: "json",
|
19
|
+
},
|
20
|
+
};
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Sets the default options that will be passed in **all requests across all `@esri/arcgis-rest-js` modules**.
|
24
|
+
*
|
25
|
+
*
|
26
|
+
* ```js
|
27
|
+
* import { setDefaultRequestOptions } from "@esri/arcgis-rest-request";
|
28
|
+
* setDefaultRequestOptions({
|
29
|
+
* authentication: userSession // all requests will use this session by default
|
30
|
+
* })
|
31
|
+
* ```
|
32
|
+
* You should **never** set a default `authentication` when you are in a server side environment where you may be handling requests for many different authenticated users.
|
33
|
+
*
|
34
|
+
* @param options The default options to pass with every request. Existing default will be overwritten.
|
35
|
+
* @param hideWarnings Silence warnings about setting default `authentication` in shared environments.
|
36
|
+
*/
|
37
|
+
export function setDefaultRequestOptions(
|
38
|
+
options: typeof DEFAULT_ARCGIS_REQUEST_OPTIONS,
|
39
|
+
hideWarnings?: boolean
|
40
|
+
) {
|
41
|
+
if (options.authentication && !hideWarnings) {
|
42
|
+
warn(
|
43
|
+
"You should not set `authentication` as a default in a shared environment such as a web server which will process multiple users requests. You can call `setDefaultRequestOptions` with `true` as a second argument to disable this warning."
|
44
|
+
);
|
45
|
+
}
|
46
|
+
DEFAULT_ARCGIS_REQUEST_OPTIONS = options;
|
47
|
+
}
|
48
|
+
|
49
|
+
export class ArcGISAuthError extends ArcGISRequestError {
|
50
|
+
/**
|
51
|
+
* Create a new `ArcGISAuthError` object.
|
52
|
+
*
|
53
|
+
* @param message - The error message from the API
|
54
|
+
* @param code - The error code from the API
|
55
|
+
* @param response - The original response from the API that caused the error
|
56
|
+
* @param url - The original url of the request
|
57
|
+
* @param options - The original options of the request
|
58
|
+
*/
|
59
|
+
constructor(
|
60
|
+
message = "AUTHENTICATION_ERROR",
|
61
|
+
code: string | number = "AUTHENTICATION_ERROR_CODE",
|
62
|
+
response?: any,
|
63
|
+
url?: string,
|
64
|
+
options?: IRequestOptions
|
65
|
+
) {
|
66
|
+
super(message, code, response, url, options);
|
67
|
+
this.name = "ArcGISAuthError";
|
68
|
+
this.message =
|
69
|
+
code === "AUTHENTICATION_ERROR_CODE" ? message : `${code}: ${message}`;
|
70
|
+
}
|
71
|
+
|
72
|
+
public retry(getSession: IRetryAuthError, retryLimit = 3) {
|
73
|
+
let tries = 0;
|
74
|
+
|
75
|
+
const retryRequest = (resolve: any, reject: any) => {
|
76
|
+
getSession(this.url, this.options)
|
77
|
+
.then((session) => {
|
78
|
+
const newOptions = {
|
79
|
+
...this.options,
|
80
|
+
...{ authentication: session },
|
81
|
+
};
|
82
|
+
|
83
|
+
tries = tries + 1;
|
84
|
+
return request(this.url, newOptions);
|
85
|
+
})
|
86
|
+
.then((response) => {
|
87
|
+
resolve(response);
|
88
|
+
})
|
89
|
+
.catch((e) => {
|
90
|
+
if (e.name === "ArcGISAuthError" && tries < retryLimit) {
|
91
|
+
retryRequest(resolve, reject);
|
92
|
+
} else if (e.name === "ArcGISAuthError" && tries >= retryLimit) {
|
93
|
+
reject(this);
|
94
|
+
} else {
|
95
|
+
reject(e);
|
96
|
+
}
|
97
|
+
});
|
98
|
+
};
|
99
|
+
|
100
|
+
return new Promise((resolve, reject) => {
|
101
|
+
retryRequest(resolve, reject);
|
102
|
+
});
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
/**
|
107
|
+
* Checks for errors in a JSON response from the ArcGIS REST API. If there are no errors, it will return the `data` passed in. If there is an error, it will throw an `ArcGISRequestError` or `ArcGISAuthError`.
|
108
|
+
*
|
109
|
+
* @param data The response JSON to check for errors.
|
110
|
+
* @param url The url of the original request
|
111
|
+
* @param params The parameters of the original request
|
112
|
+
* @param options The options of the original request
|
113
|
+
* @returns The data that was passed in the `data` parameter
|
114
|
+
*/
|
115
|
+
export function checkForErrors(
|
116
|
+
response: any,
|
117
|
+
url?: string,
|
118
|
+
params?: IParams,
|
119
|
+
options?: IRequestOptions,
|
120
|
+
originalAuthError?: ArcGISAuthError
|
121
|
+
): any {
|
122
|
+
// this is an error message from billing.arcgis.com backend
|
123
|
+
if (response.code >= 400) {
|
124
|
+
const { message, code } = response;
|
125
|
+
throw new ArcGISRequestError(message, code, response, url, options);
|
126
|
+
}
|
127
|
+
|
128
|
+
// error from ArcGIS Online or an ArcGIS Portal or server instance.
|
129
|
+
if (response.error) {
|
130
|
+
const { message, code, messageCode } = response.error;
|
131
|
+
const errorCode = messageCode || code || "UNKNOWN_ERROR_CODE";
|
132
|
+
|
133
|
+
if (
|
134
|
+
code === 498 ||
|
135
|
+
code === 499 ||
|
136
|
+
messageCode === "GWM_0003" ||
|
137
|
+
(code === 400 && message === "Unable to generate token.")
|
138
|
+
) {
|
139
|
+
if (originalAuthError) {
|
140
|
+
throw originalAuthError;
|
141
|
+
} else {
|
142
|
+
throw new ArcGISAuthError(message, errorCode, response, url, options);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
throw new ArcGISRequestError(message, errorCode, response, url, options);
|
147
|
+
}
|
148
|
+
|
149
|
+
// error from a status check
|
150
|
+
if (response.status === "failed" || response.status === "failure") {
|
151
|
+
let message: string;
|
152
|
+
let code = "UNKNOWN_ERROR_CODE";
|
153
|
+
|
154
|
+
try {
|
155
|
+
message = JSON.parse(response.statusMessage).message;
|
156
|
+
code = JSON.parse(response.statusMessage).code;
|
157
|
+
} catch (e) {
|
158
|
+
message = response.statusMessage || response.message;
|
159
|
+
}
|
160
|
+
|
161
|
+
throw new ArcGISRequestError(message, code, response, url, options);
|
162
|
+
}
|
163
|
+
|
164
|
+
return response;
|
165
|
+
}
|
166
|
+
|
167
|
+
/**
|
168
|
+
* ```js
|
169
|
+
* import { request } from '@esri/arcgis-rest-request';
|
170
|
+
* //
|
171
|
+
* request('https://www.arcgis.com/sharing/rest')
|
172
|
+
* .then(response) // response.currentVersion === 5.2
|
173
|
+
* //
|
174
|
+
* request('https://www.arcgis.com/sharing/rest', {
|
175
|
+
* httpMethod: "GET"
|
176
|
+
* })
|
177
|
+
* //
|
178
|
+
* request('https://www.arcgis.com/sharing/rest/search', {
|
179
|
+
* params: { q: 'parks' }
|
180
|
+
* })
|
181
|
+
* .then(response) // response.total => 78379
|
182
|
+
* ```
|
183
|
+
* Generic method for making HTTP requests to ArcGIS REST API endpoints.
|
184
|
+
*
|
185
|
+
* @param url - The URL of the ArcGIS REST API endpoint.
|
186
|
+
* @param requestOptions - Options for the request, including parameters relevant to the endpoint.
|
187
|
+
* @returns A Promise that will resolve with the data from the response.
|
188
|
+
*/
|
189
|
+
export function request(
|
190
|
+
url: string,
|
191
|
+
requestOptions: IRequestOptions = { params: { f: "json" } }
|
192
|
+
): Promise<any> {
|
193
|
+
const options: IRequestOptions = {
|
194
|
+
...{ httpMethod: "POST" },
|
195
|
+
...DEFAULT_ARCGIS_REQUEST_OPTIONS,
|
196
|
+
...requestOptions,
|
197
|
+
...{
|
198
|
+
params: {
|
199
|
+
...DEFAULT_ARCGIS_REQUEST_OPTIONS.params,
|
200
|
+
...requestOptions.params,
|
201
|
+
},
|
202
|
+
headers: {
|
203
|
+
...DEFAULT_ARCGIS_REQUEST_OPTIONS.headers,
|
204
|
+
...requestOptions.headers,
|
205
|
+
},
|
206
|
+
},
|
207
|
+
};
|
208
|
+
|
209
|
+
const missingGlobals: string[] = [];
|
210
|
+
const recommendedPackages: string[] = [];
|
211
|
+
|
212
|
+
// don't check for a global fetch if a custom implementation was passed through
|
213
|
+
if (!options.fetch && typeof fetch !== "undefined") {
|
214
|
+
options.fetch = fetch.bind(Function("return this")());
|
215
|
+
} else {
|
216
|
+
missingGlobals.push("`fetch`");
|
217
|
+
recommendedPackages.push("`node-fetch`");
|
218
|
+
}
|
219
|
+
|
220
|
+
if (typeof Promise === "undefined") {
|
221
|
+
missingGlobals.push("`Promise`");
|
222
|
+
recommendedPackages.push("`es6-promise`");
|
223
|
+
}
|
224
|
+
|
225
|
+
if (typeof FormData === "undefined") {
|
226
|
+
missingGlobals.push("`FormData`");
|
227
|
+
recommendedPackages.push("`isomorphic-form-data`");
|
228
|
+
}
|
229
|
+
|
230
|
+
if (
|
231
|
+
!options.fetch ||
|
232
|
+
typeof Promise === "undefined" ||
|
233
|
+
typeof FormData === "undefined"
|
234
|
+
) {
|
235
|
+
throw new Error(
|
236
|
+
`\`arcgis-rest-request\` requires a \`fetch\` implementation and global variables for \`Promise\` and \`FormData\` to be present in the global scope. You are missing ${missingGlobals.join(
|
237
|
+
", "
|
238
|
+
)}. We recommend installing the ${recommendedPackages.join(
|
239
|
+
", "
|
240
|
+
)} modules at the root of your application to add these to the global scope. See https://bit.ly/2KNwWaJ for more info.`
|
241
|
+
);
|
242
|
+
}
|
243
|
+
|
244
|
+
const { httpMethod, authentication, rawResponse } = options;
|
245
|
+
|
246
|
+
const params: IParams = {
|
247
|
+
...{ f: "json" },
|
248
|
+
...options.params,
|
249
|
+
};
|
250
|
+
|
251
|
+
let originalAuthError: ArcGISAuthError = null;
|
252
|
+
|
253
|
+
const fetchOptions: RequestInit = {
|
254
|
+
method: httpMethod,
|
255
|
+
/* ensures behavior mimics XMLHttpRequest.
|
256
|
+
needed to support sending IWA cookies */
|
257
|
+
credentials: options.credentials || "same-origin",
|
258
|
+
};
|
259
|
+
|
260
|
+
// the /oauth2/platformSelf route will add X-Esri-Auth-Client-Id header
|
261
|
+
// and that request needs to send cookies cross domain
|
262
|
+
// so we need to set the credentials to "include"
|
263
|
+
if (
|
264
|
+
options.headers &&
|
265
|
+
options.headers["X-Esri-Auth-Client-Id"] &&
|
266
|
+
url.indexOf("/oauth2/platformSelf") > -1
|
267
|
+
) {
|
268
|
+
fetchOptions.credentials = "include";
|
269
|
+
}
|
270
|
+
|
271
|
+
return (authentication
|
272
|
+
? authentication.getToken(url, { fetch: options.fetch }).catch((err) => {
|
273
|
+
/**
|
274
|
+
* append original request url and requestOptions
|
275
|
+
* to the error thrown by getToken()
|
276
|
+
* to assist with retrying
|
277
|
+
*/
|
278
|
+
err.url = url;
|
279
|
+
err.options = options;
|
280
|
+
/**
|
281
|
+
* if an attempt is made to talk to an unfederated server
|
282
|
+
* first try the request anonymously. if a 'token required'
|
283
|
+
* error is thrown, throw the UNFEDERATED error then.
|
284
|
+
*/
|
285
|
+
originalAuthError = err;
|
286
|
+
return Promise.resolve("");
|
287
|
+
})
|
288
|
+
: Promise.resolve("")
|
289
|
+
)
|
290
|
+
.then((token) => {
|
291
|
+
if (token.length) {
|
292
|
+
params.token = token;
|
293
|
+
}
|
294
|
+
|
295
|
+
if (authentication && authentication.getDomainCredentials) {
|
296
|
+
fetchOptions.credentials = authentication.getDomainCredentials(url);
|
297
|
+
}
|
298
|
+
|
299
|
+
// Custom headers to add to request. IRequestOptions.headers with merge over requestHeaders.
|
300
|
+
const requestHeaders: {
|
301
|
+
[key: string]: any;
|
302
|
+
} = {};
|
303
|
+
|
304
|
+
if (fetchOptions.method === "GET") {
|
305
|
+
// Prevents token from being passed in query params when hideToken option is used.
|
306
|
+
/* istanbul ignore if - window is always defined in a browser. Test case is covered by Jasmine in node test */
|
307
|
+
if (
|
308
|
+
params.token &&
|
309
|
+
options.hideToken &&
|
310
|
+
// Sharing API does not support preflight check required by modern browsers https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request
|
311
|
+
typeof window === "undefined"
|
312
|
+
) {
|
313
|
+
requestHeaders["X-Esri-Authorization"] = `Bearer ${params.token}`;
|
314
|
+
delete params.token;
|
315
|
+
}
|
316
|
+
// encode the parameters into the query string
|
317
|
+
const queryParams = encodeQueryString(params);
|
318
|
+
// dont append a '?' unless parameters are actually present
|
319
|
+
const urlWithQueryString =
|
320
|
+
queryParams === "" ? url : url + "?" + encodeQueryString(params);
|
321
|
+
|
322
|
+
if (
|
323
|
+
// This would exceed the maximum length for URLs specified by the consumer and requires POST
|
324
|
+
(options.maxUrlLength &&
|
325
|
+
urlWithQueryString.length > options.maxUrlLength) ||
|
326
|
+
// Or if the customer requires the token to be hidden and it has not already been hidden in the header (for browsers)
|
327
|
+
(params.token && options.hideToken)
|
328
|
+
) {
|
329
|
+
// the consumer specified a maximum length for URLs
|
330
|
+
// and this would exceed it, so use post instead
|
331
|
+
fetchOptions.method = "POST";
|
332
|
+
|
333
|
+
// If the token was already added as a Auth header, add the token back to body with other params instead of header
|
334
|
+
if (token.length && options.hideToken) {
|
335
|
+
params.token = token;
|
336
|
+
// Remove existing header that was added before url query length was checked
|
337
|
+
delete requestHeaders["X-Esri-Authorization"];
|
338
|
+
}
|
339
|
+
} else {
|
340
|
+
// just use GET
|
341
|
+
url = urlWithQueryString;
|
342
|
+
}
|
343
|
+
}
|
344
|
+
|
345
|
+
/* updateResources currently requires FormData even when the input parameters dont warrant it.
|
346
|
+
https://developers.arcgis.com/rest/users-groups-and-items/update-resources.htm
|
347
|
+
see https://github.com/Esri/arcgis-rest-js/pull/500 for more info. */
|
348
|
+
const forceFormData = new RegExp("/items/.+/updateResources").test(url);
|
349
|
+
|
350
|
+
if (fetchOptions.method === "POST") {
|
351
|
+
fetchOptions.body = encodeFormData(params, forceFormData);
|
352
|
+
}
|
353
|
+
|
354
|
+
// Mixin headers from request options
|
355
|
+
fetchOptions.headers = {
|
356
|
+
...requestHeaders,
|
357
|
+
...options.headers,
|
358
|
+
};
|
359
|
+
|
360
|
+
/* istanbul ignore next - karma reports coverage on browser tests only */
|
361
|
+
if (typeof window === "undefined" && !fetchOptions.headers.referer) {
|
362
|
+
fetchOptions.headers.referer = NODEJS_DEFAULT_REFERER_HEADER;
|
363
|
+
}
|
364
|
+
|
365
|
+
/* istanbul ignore else blob responses are difficult to make cross platform we will just have to trust the isomorphic fetch will do its job */
|
366
|
+
if (!requiresFormData(params) && !forceFormData) {
|
367
|
+
fetchOptions.headers["Content-Type"] =
|
368
|
+
"application/x-www-form-urlencoded";
|
369
|
+
}
|
370
|
+
|
371
|
+
return options.fetch(url, fetchOptions);
|
372
|
+
})
|
373
|
+
.then((response) => {
|
374
|
+
if (!response.ok) {
|
375
|
+
// server responded w/ an actual error (404, 500, etc)
|
376
|
+
const { status, statusText } = response;
|
377
|
+
throw new ArcGISRequestError(
|
378
|
+
statusText,
|
379
|
+
`HTTP ${status}`,
|
380
|
+
response,
|
381
|
+
url,
|
382
|
+
options
|
383
|
+
);
|
384
|
+
}
|
385
|
+
if (rawResponse) {
|
386
|
+
return response;
|
387
|
+
}
|
388
|
+
switch (params.f) {
|
389
|
+
case "json":
|
390
|
+
return response.json();
|
391
|
+
case "geojson":
|
392
|
+
return response.json();
|
393
|
+
case "html":
|
394
|
+
return response.text();
|
395
|
+
case "text":
|
396
|
+
return response.text();
|
397
|
+
/* istanbul ignore next blob responses are difficult to make cross platform we will just have to trust that isomorphic fetch will do its job */
|
398
|
+
default:
|
399
|
+
return response.blob();
|
400
|
+
}
|
401
|
+
})
|
402
|
+
.then((data) => {
|
403
|
+
if ((params.f === "json" || params.f === "geojson") && !rawResponse) {
|
404
|
+
const response = checkForErrors(
|
405
|
+
data,
|
406
|
+
url,
|
407
|
+
params,
|
408
|
+
options,
|
409
|
+
originalAuthError
|
410
|
+
);
|
411
|
+
|
412
|
+
if (originalAuthError) {
|
413
|
+
/* If the request was made to an unfederated service that
|
414
|
+
didn't require authentication, add the base url and a dummy token
|
415
|
+
to the list of trusted servers to avoid another federation check
|
416
|
+
in the event of a repeat request */
|
417
|
+
const truncatedUrl: string = url
|
418
|
+
.toLowerCase()
|
419
|
+
.split(/\/rest(\/admin)?\/services\//)[0];
|
420
|
+
|
421
|
+
(options.authentication as any).federatedServers[truncatedUrl] = {
|
422
|
+
token: [],
|
423
|
+
// default to 24 hours
|
424
|
+
expires: new Date(Date.now() + 86400 * 1000),
|
425
|
+
};
|
426
|
+
originalAuthError = null;
|
427
|
+
}
|
428
|
+
return response;
|
429
|
+
} else {
|
430
|
+
return data;
|
431
|
+
}
|
432
|
+
});
|
433
|
+
}
|
@@ -0,0 +1,76 @@
|
|
1
|
+
/* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
import { IRequestOptions } from "./IRequestOptions";
|
5
|
+
|
6
|
+
// TypeScript 2.1 no longer allows you to extend built in types. See https://github.com/Microsoft/TypeScript/issues/12790#issuecomment-265981442
|
7
|
+
// and https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
|
8
|
+
//
|
9
|
+
// This code is from MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types.
|
10
|
+
export class ArcGISRequestError {
|
11
|
+
/**
|
12
|
+
* The name of this error. Will always be `"ArcGISRequestError"` to conform with the [`Error`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) class.
|
13
|
+
*/
|
14
|
+
public name: string;
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Formatted error message. See the [`Error`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) class for more details.
|
18
|
+
*/
|
19
|
+
public message: string;
|
20
|
+
|
21
|
+
/**
|
22
|
+
* The errror message return from the request.
|
23
|
+
*/
|
24
|
+
public originalMessage: string;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* The error code returned from the request.
|
28
|
+
*/
|
29
|
+
public code: string | number;
|
30
|
+
|
31
|
+
/**
|
32
|
+
* The original JSON response the caused the error.
|
33
|
+
*/
|
34
|
+
public response: any;
|
35
|
+
|
36
|
+
/**
|
37
|
+
* The URL of the original request that caused the error
|
38
|
+
*/
|
39
|
+
public url: string;
|
40
|
+
|
41
|
+
/**
|
42
|
+
* The options of the original request that caused the error
|
43
|
+
*/
|
44
|
+
public options: IRequestOptions;
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Create a new `ArcGISRequestError` object.
|
48
|
+
*
|
49
|
+
* @param message - The error message from the API
|
50
|
+
* @param code - The error code from the API
|
51
|
+
* @param response - The original response from the API that caused the error
|
52
|
+
* @param url - The original url of the request
|
53
|
+
* @param options - The original options and parameters of the request
|
54
|
+
*/
|
55
|
+
constructor(
|
56
|
+
message?: string,
|
57
|
+
code?: string | number,
|
58
|
+
response?: any,
|
59
|
+
url?: string,
|
60
|
+
options?: IRequestOptions
|
61
|
+
) {
|
62
|
+
message = message || "UNKNOWN_ERROR";
|
63
|
+
code = code || "UNKNOWN_ERROR_CODE";
|
64
|
+
|
65
|
+
this.name = "ArcGISRequestError";
|
66
|
+
this.message =
|
67
|
+
code === "UNKNOWN_ERROR_CODE" ? message : `${code}: ${message}`;
|
68
|
+
this.originalMessage = message;
|
69
|
+
this.code = code;
|
70
|
+
this.response = response;
|
71
|
+
this.url = url;
|
72
|
+
this.options = options;
|
73
|
+
}
|
74
|
+
}
|
75
|
+
ArcGISRequestError.prototype = Object.create(Error.prototype);
|
76
|
+
ArcGISRequestError.prototype.constructor = ArcGISRequestError;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
/* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Enum describing the different errors that might be thrown by a request.
|
6
|
+
*
|
7
|
+
* ```ts
|
8
|
+
* import { request, ErrorTypes } from '@esri/arcgis-rest-request';
|
9
|
+
*
|
10
|
+
* request("...").catch((e) => {
|
11
|
+
* switch(e.name) {
|
12
|
+
* case ErrorType.ArcGISRequestError:
|
13
|
+
* // handle a general error from the API
|
14
|
+
* break;
|
15
|
+
*
|
16
|
+
* case ErrorType.ArcGISAuthError:
|
17
|
+
* // handle an authentication error
|
18
|
+
* break;
|
19
|
+
*
|
20
|
+
* default:
|
21
|
+
* // handle some other error (usually a network error)
|
22
|
+
* }
|
23
|
+
* });
|
24
|
+
* ```
|
25
|
+
*/
|
26
|
+
export enum ErrorTypes {
|
27
|
+
ArcGISRequestError = "ArcGISRequestError",
|
28
|
+
ArcGISAuthError = "ArcGISAuthError"
|
29
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { ITokenRequestOptions } from "./ITokenRequestOptions";
|
2
|
+
/**
|
3
|
+
* Authentication can be supplied to `request` via [`UserSession`](../../auth/UserSession/) or [`ApplicationSession`](../../auth/ApplicationSession/). Both classes extend `IAuthenticationManager`.
|
4
|
+
* ```js
|
5
|
+
* const session = new UserSession({
|
6
|
+
* username: "jsmith",
|
7
|
+
* password: "123456",
|
8
|
+
* // optional
|
9
|
+
* portal: "https://[yourserver]/arcgis/sharing/rest"
|
10
|
+
* })
|
11
|
+
*
|
12
|
+
* request(url, { authentication: session })
|
13
|
+
* ```
|
14
|
+
*/
|
15
|
+
export interface IAuthenticationManager {
|
16
|
+
/**
|
17
|
+
* Defaults to 'https://www.arcgis.com/sharing/rest'.
|
18
|
+
*/
|
19
|
+
portal: string;
|
20
|
+
getToken(url: string, requestOptions?: ITokenRequestOptions): Promise<string>;
|
21
|
+
getDomainCredentials?(url: string): RequestCredentials;
|
22
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { GrantTypes } from "./GrantTypes";
|
2
|
+
import { IParams } from "./IParams";
|
3
|
+
|
4
|
+
export interface IFetchTokenParams extends IParams {
|
5
|
+
client_id: string;
|
6
|
+
client_secret?: string;
|
7
|
+
grant_type: GrantTypes;
|
8
|
+
redirect_uri?: string;
|
9
|
+
refresh_token?: string;
|
10
|
+
code?: string;
|
11
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { HTTPMethods } from "./HTTPMethods";
|
2
|
+
import { IParams } from "./IParams";
|
3
|
+
import { IAuthenticationManager } from "./IAuthenticationManager";
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Options for the `request()` method.
|
7
|
+
*/
|
8
|
+
export interface IRequestOptions {
|
9
|
+
/**
|
10
|
+
* Additional parameters to pass in the request.
|
11
|
+
*/
|
12
|
+
params?: IParams;
|
13
|
+
/**
|
14
|
+
* The HTTP method to send the request with.
|
15
|
+
*/
|
16
|
+
httpMethod?: HTTPMethods;
|
17
|
+
/**
|
18
|
+
* Return the raw [response](https://developer.mozilla.org/en-US/docs/Web/API/Response)
|
19
|
+
*/
|
20
|
+
rawResponse?: boolean;
|
21
|
+
/**
|
22
|
+
* The instance of `IAuthenticationManager` to use to authenticate this request.
|
23
|
+
*/
|
24
|
+
authentication?: IAuthenticationManager;
|
25
|
+
/**
|
26
|
+
* Prevents the token from being passed in a URL Query param that is saved in browser history.
|
27
|
+
* Instead, the token will be passed in POST request body or through X-Esri-Authorization header.
|
28
|
+
* NOTE: This will force POST requests in browsers since auth header is not yet supported by preflight OPTIONS check with CORS.
|
29
|
+
*/
|
30
|
+
hideToken?: boolean;
|
31
|
+
/**
|
32
|
+
* Base url for the portal you want to make the request to. Defaults to authentication.portal if authentication
|
33
|
+
* exists, otherwise to 'https://www.arcgis.com/sharing/rest'.
|
34
|
+
*/
|
35
|
+
portal?: string;
|
36
|
+
/**
|
37
|
+
* The implementation of `fetch` to use. Defaults to a global `fetch`.
|
38
|
+
*/
|
39
|
+
fetch?: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
|
40
|
+
/**
|
41
|
+
* A string indicating whether credentials (cookies) will be sent with the request. Used internally for authentication workflows.
|
42
|
+
*/
|
43
|
+
credentials?: RequestCredentials;
|
44
|
+
/**
|
45
|
+
* If the length of a GET request's URL exceeds `maxUrlLength` the request will use POST instead.
|
46
|
+
*/
|
47
|
+
maxUrlLength?: number;
|
48
|
+
/**
|
49
|
+
* Additional [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers) to pass into the request.
|
50
|
+
*/
|
51
|
+
headers?: {
|
52
|
+
[key: string]: any;
|
53
|
+
};
|
54
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { HTTPMethods } from "./HTTPMethods";
|
2
|
+
import { IGenerateTokenParams } from "./IGenerateTokenParams";
|
3
|
+
import { IFetchTokenParams } from "./IFetchTokenParams";
|
4
|
+
|
5
|
+
export interface ITokenRequestOptions {
|
6
|
+
params?: IGenerateTokenParams | IFetchTokenParams;
|
7
|
+
httpMethod?: HTTPMethods;
|
8
|
+
fetch?: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
|
9
|
+
}
|