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,131 @@
|
|
1
|
+
/* Copyright (c) 2018-2020 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
import { IRequestOptions, request } from "@esri/arcgis-rest-request";
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Request app-specific token, passing in the token for the current app.
|
8
|
+
*
|
9
|
+
* This call returns a token after performing the same checks made by validateAppAccess.
|
10
|
+
* It returns an app-specific token of the signed-in user only if the user has access
|
11
|
+
* to the app and the encrypted platform cookie is valid.
|
12
|
+
*
|
13
|
+
* A scenario where an app would use this is if it is iframed into another platform app
|
14
|
+
* and receives credentials via postMessage. Those credentials contain a token that is
|
15
|
+
* specific to the host app, so the embedded app would use `exchangeToken` to get one
|
16
|
+
* that is specific to itself.
|
17
|
+
*
|
18
|
+
* Note: This is only usable by Esri applications hosted on *arcgis.com, *esri.com or within
|
19
|
+
* an ArcGIS Enterprise installation. Custom applications can not use this.
|
20
|
+
*
|
21
|
+
* @param token
|
22
|
+
* @param clientId application
|
23
|
+
* @param portal
|
24
|
+
*/
|
25
|
+
export function exchangeToken(
|
26
|
+
token: string,
|
27
|
+
clientId: string,
|
28
|
+
portal = "https://www.arcgis.com/sharing/rest"
|
29
|
+
): Promise<string> {
|
30
|
+
const url = `${portal}/oauth2/exchangeToken`;
|
31
|
+
const ro = {
|
32
|
+
method: "POST",
|
33
|
+
params: {
|
34
|
+
f: "json",
|
35
|
+
client_id: clientId,
|
36
|
+
token,
|
37
|
+
},
|
38
|
+
} as IRequestOptions;
|
39
|
+
// make the request and return the token
|
40
|
+
return request(url, ro).then((response) => response.token);
|
41
|
+
}
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Response from the `platformSelf(...)` function.
|
45
|
+
*/
|
46
|
+
export interface IPlatformSelfResponse {
|
47
|
+
/**
|
48
|
+
* Username of the user the encrypted cookie was issued for
|
49
|
+
*/
|
50
|
+
username: string;
|
51
|
+
/**
|
52
|
+
* Token the consuming application can use, It is tied to the
|
53
|
+
* clientId used in the `platformSelf` call
|
54
|
+
*/
|
55
|
+
token: string;
|
56
|
+
/**
|
57
|
+
* Token expiration, in seconds-from-now
|
58
|
+
*/
|
59
|
+
expires_in: number;
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Request a token for a specific application using the esri_aopc encrypted cookie
|
64
|
+
*
|
65
|
+
* When a client app boots up, it will know its clientId and the redirectUri for use
|
66
|
+
* in the normal /oauth/authorize pop-out oAuth flow.
|
67
|
+
*
|
68
|
+
* If the app sees an `esri_aopc` cookie (only set if the app is hosted on *.arcgis.com),
|
69
|
+
* it can call the /oauth2/platformSelf end-point passing in the clientId and redirectUri
|
70
|
+
* in headers, and it will receive back an app-specific token, assuming the user has
|
71
|
+
* access to the app.
|
72
|
+
*
|
73
|
+
* Since there are scenarios where an app can boot using credentials/token from localstorage
|
74
|
+
* but those credentials are not for the same user as the esri_aopc cookie, it is recommended that
|
75
|
+
* an app check the returned username against any existing identity they may have loaded.
|
76
|
+
*
|
77
|
+
* Note: This is only usable by Esri applications hosted on *arcgis.com, *esri.com or within
|
78
|
+
* an ArcGIS Enterprise installation. Custom applications can not use this.
|
79
|
+
*
|
80
|
+
* ```js
|
81
|
+
* // convert the encrypted platform cookie into a UserSession
|
82
|
+
* import { platformSelf, UserSession } from '@esri/arcgis-rest-auth';
|
83
|
+
*
|
84
|
+
* const portal = 'https://www.arcgis.com/sharing/rest';
|
85
|
+
* const clientId = 'YOURAPPCLIENTID';
|
86
|
+
*
|
87
|
+
* // exchange esri_aopc cookie
|
88
|
+
* return platformSelf(clientId, 'https://your-app-redirect-uri', portal)
|
89
|
+
* .then((response) => {
|
90
|
+
* const currentTimestamp = new Date().getTime();
|
91
|
+
* const tokenExpiresTimestamp = currentTimestamp + (response.expires_in * 1000);
|
92
|
+
* // Construct the session and return it
|
93
|
+
* return new UserSession({
|
94
|
+
* portal,
|
95
|
+
* clientId,
|
96
|
+
* username: response.username,
|
97
|
+
* token: response.token,
|
98
|
+
* tokenExpires: new Date(tokenExpiresTimestamp),
|
99
|
+
* ssl: true
|
100
|
+
* });
|
101
|
+
* })
|
102
|
+
*
|
103
|
+
* ```
|
104
|
+
*
|
105
|
+
*
|
106
|
+
* @param clientId
|
107
|
+
* @param redirectUri
|
108
|
+
* @param portal
|
109
|
+
*/
|
110
|
+
export function platformSelf(
|
111
|
+
clientId: string,
|
112
|
+
redirectUri: string,
|
113
|
+
portal = "https://www.arcgis.com/sharing/rest"
|
114
|
+
): Promise<IPlatformSelfResponse> {
|
115
|
+
// TEMPORARY: the f=json should not be needed, but currently is
|
116
|
+
const url = `${portal}/oauth2/platformSelf?f=json`;
|
117
|
+
const ro = {
|
118
|
+
method: "POST",
|
119
|
+
headers: {
|
120
|
+
"X-Esri-Auth-Client-Id": clientId,
|
121
|
+
"X-Esri-Auth-Redirect-Uri": redirectUri,
|
122
|
+
},
|
123
|
+
// Note: request has logic to include the cookie
|
124
|
+
// for platformSelf calls w/ the X-Esri-Auth-Client-Id header
|
125
|
+
params: {
|
126
|
+
f: "json",
|
127
|
+
},
|
128
|
+
} as IRequestOptions;
|
129
|
+
// make the request and return the token
|
130
|
+
return request(url, ro);
|
131
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
/* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
import { ApplicationSession } from "./ApplicationSession";
|
5
|
+
import { UserSession } from "./UserSession";
|
6
|
+
|
7
|
+
import { IRequestOptions } from "@esri/arcgis-rest-request";
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Used internally by packages for requests that require user authentication.
|
11
|
+
*/
|
12
|
+
export interface IAuthenticatedRequestOptions extends IRequestOptions {
|
13
|
+
authentication: UserSession | ApplicationSession;
|
14
|
+
}
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Used internally by packages for requests that require authentication.
|
18
|
+
*/
|
19
|
+
export interface IUserRequestOptions extends IRequestOptions {
|
20
|
+
/**
|
21
|
+
* A session representing a logged in user.
|
22
|
+
*/
|
23
|
+
authentication: UserSession;
|
24
|
+
}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
import { cleanUrl } from "@esri/arcgis-rest-request";
|
2
|
+
/**
|
3
|
+
* Used to test if a URL is an ArcGIS Online URL
|
4
|
+
*/
|
5
|
+
const arcgisOnlineUrlRegex = /^https?:\/\/(\S+)\.arcgis\.com.+/;
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Used to test if a URL is production ArcGIS Online Portal
|
9
|
+
*/
|
10
|
+
const arcgisOnlinePortalRegex = /^https?:\/\/(dev|devext|qa|qaext|www)\.arcgis\.com\/sharing\/rest+/;
|
11
|
+
|
12
|
+
/**
|
13
|
+
* Used to test if a URL is an ArcGIS Online Organization Portal
|
14
|
+
*/
|
15
|
+
const arcgisOnlineOrgPortalRegex = /^https?:\/\/(?:[a-z0-9-]+\.maps(dev|devext|qa|qaext)?)?.arcgis\.com\/sharing\/rest/;
|
16
|
+
|
17
|
+
export function isOnline(url: string): boolean {
|
18
|
+
return arcgisOnlineUrlRegex.test(url);
|
19
|
+
}
|
20
|
+
|
21
|
+
export function normalizeOnlinePortalUrl(portalUrl: string): string {
|
22
|
+
if (!arcgisOnlineUrlRegex.test(portalUrl)) {
|
23
|
+
return portalUrl;
|
24
|
+
}
|
25
|
+
|
26
|
+
switch (getOnlineEnvironment(portalUrl)) {
|
27
|
+
case "dev":
|
28
|
+
return "https://devext.arcgis.com/sharing/rest";
|
29
|
+
case "qa":
|
30
|
+
return "https://qaext.arcgis.com/sharing/rest";
|
31
|
+
default:
|
32
|
+
return "https://www.arcgis.com/sharing/rest";
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
export function getOnlineEnvironment(url: string): string {
|
37
|
+
if (!arcgisOnlineUrlRegex.test(url)) {
|
38
|
+
return null;
|
39
|
+
}
|
40
|
+
|
41
|
+
const match = url.match(arcgisOnlineUrlRegex);
|
42
|
+
const subdomain = match[1].split(".").pop();
|
43
|
+
|
44
|
+
if (subdomain.includes("dev")) {
|
45
|
+
return "dev";
|
46
|
+
}
|
47
|
+
|
48
|
+
if (subdomain.includes("qa")) {
|
49
|
+
return "qa";
|
50
|
+
}
|
51
|
+
|
52
|
+
return "production";
|
53
|
+
}
|
54
|
+
|
55
|
+
export function isFederated(
|
56
|
+
owningSystemUrl: string,
|
57
|
+
portalUrl: string
|
58
|
+
): boolean {
|
59
|
+
const normalizedPortalUrl = cleanUrl(
|
60
|
+
normalizeOnlinePortalUrl(portalUrl)
|
61
|
+
).replace(/https?:\/\//, "");
|
62
|
+
|
63
|
+
const normalizedOwningSystemUrl = cleanUrl(owningSystemUrl).replace(
|
64
|
+
/https?:\/\//,
|
65
|
+
""
|
66
|
+
);
|
67
|
+
|
68
|
+
return new RegExp(normalizedOwningSystemUrl, "i").test(normalizedPortalUrl);
|
69
|
+
}
|
70
|
+
|
71
|
+
export function canUseOnlineToken(
|
72
|
+
portalUrl: string,
|
73
|
+
requestUrl: string
|
74
|
+
): boolean {
|
75
|
+
const portalIsOnline = isOnline(portalUrl);
|
76
|
+
const requestIsOnline = isOnline(requestUrl);
|
77
|
+
const portalEnv = getOnlineEnvironment(portalUrl);
|
78
|
+
const requestEnv = getOnlineEnvironment(requestUrl);
|
79
|
+
|
80
|
+
if (portalIsOnline && requestIsOnline && portalEnv === requestEnv) {
|
81
|
+
return true;
|
82
|
+
}
|
83
|
+
|
84
|
+
return false;
|
85
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
import {
|
5
|
+
request,
|
6
|
+
IRequestOptions,
|
7
|
+
ITokenRequestOptions
|
8
|
+
} from "@esri/arcgis-rest-request";
|
9
|
+
|
10
|
+
interface IFetchTokenRawResponse {
|
11
|
+
access_token: string;
|
12
|
+
expires_in: number;
|
13
|
+
username: string;
|
14
|
+
ssl?: boolean;
|
15
|
+
refresh_token?: string;
|
16
|
+
}
|
17
|
+
|
18
|
+
export interface IFetchTokenResponse {
|
19
|
+
token: string;
|
20
|
+
expires: Date;
|
21
|
+
username: string;
|
22
|
+
ssl: boolean;
|
23
|
+
refreshToken?: string;
|
24
|
+
}
|
25
|
+
|
26
|
+
export function fetchToken(
|
27
|
+
url: string,
|
28
|
+
requestOptions: ITokenRequestOptions
|
29
|
+
): Promise<IFetchTokenResponse> {
|
30
|
+
const options: IRequestOptions = requestOptions;
|
31
|
+
// we generate a response, so we can't return the raw response
|
32
|
+
options.rawResponse = false;
|
33
|
+
|
34
|
+
return request(url, options).then((response: IFetchTokenRawResponse) => {
|
35
|
+
const r: IFetchTokenResponse = {
|
36
|
+
token: response.access_token,
|
37
|
+
username: response.username,
|
38
|
+
expires: new Date(
|
39
|
+
// convert seconds in response to milliseconds and add the value to the current time to calculate a static expiration timestamp
|
40
|
+
Date.now() + (response.expires_in * 1000 - 1000)
|
41
|
+
),
|
42
|
+
ssl: response.ssl === true
|
43
|
+
};
|
44
|
+
if (response.refresh_token) {
|
45
|
+
r.refreshToken = response.refresh_token;
|
46
|
+
}
|
47
|
+
|
48
|
+
return r;
|
49
|
+
});
|
50
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
/* Copyright (c) 2017-2018 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
import {
|
5
|
+
request,
|
6
|
+
IRequestOptions,
|
7
|
+
ITokenRequestOptions,
|
8
|
+
NODEJS_DEFAULT_REFERER_HEADER,
|
9
|
+
} from "@esri/arcgis-rest-request";
|
10
|
+
|
11
|
+
export interface IGenerateTokenResponse {
|
12
|
+
token: string;
|
13
|
+
expires: number;
|
14
|
+
ssl: boolean;
|
15
|
+
}
|
16
|
+
|
17
|
+
export function generateToken(
|
18
|
+
url: string,
|
19
|
+
requestOptions: ITokenRequestOptions
|
20
|
+
): Promise<IGenerateTokenResponse> {
|
21
|
+
const options: IRequestOptions = requestOptions;
|
22
|
+
|
23
|
+
/* istanbul ignore else */
|
24
|
+
if (
|
25
|
+
typeof window !== "undefined" &&
|
26
|
+
window.location &&
|
27
|
+
window.location.host
|
28
|
+
) {
|
29
|
+
options.params.referer = window.location.host;
|
30
|
+
} else {
|
31
|
+
options.params.referer = NODEJS_DEFAULT_REFERER_HEADER;
|
32
|
+
}
|
33
|
+
|
34
|
+
return request(url, options);
|
35
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
export * from "./ApplicationSession";
|
5
|
+
export * from "./ApiKey";
|
6
|
+
export * from "./UserSession";
|
7
|
+
export * from "./fetch-token";
|
8
|
+
export * from "./generate-token";
|
9
|
+
export * from "./authenticated-request-options";
|
10
|
+
export { IUser } from "@esri/arcgis-rest-types";
|
11
|
+
export * from "./app-tokens";
|
12
|
+
|
13
|
+
export * from "./validate-app-access";
|
@@ -0,0 +1,68 @@
|
|
1
|
+
/* Copyright (c) 2018-2020 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
import { IRequestOptions, request } from "@esri/arcgis-rest-request";
|
5
|
+
|
6
|
+
export interface IAppAccess {
|
7
|
+
/**
|
8
|
+
* Verifies that the token is valid and the user has access to
|
9
|
+
* the specified app (clientId)
|
10
|
+
*/
|
11
|
+
valid: boolean;
|
12
|
+
/**
|
13
|
+
* Should the app present the current user with a "View Only" mode
|
14
|
+
*/
|
15
|
+
viewOnlyUserTypeApp: boolean;
|
16
|
+
}
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Validates that the user has access to the application
|
20
|
+
* and if they user should be presented a "View Only" mode
|
21
|
+
*
|
22
|
+
* This is only needed/valid for Esri applications that are "licensed"
|
23
|
+
* and shipped in ArcGIS Online or ArcGIS Enterprise. Most custom applications
|
24
|
+
* should not need or use this.
|
25
|
+
*
|
26
|
+
* ```js
|
27
|
+
* import { validateAppAccess } from '@esri/arcgis-rest-auth';
|
28
|
+
*
|
29
|
+
* return validateAppAccess('your-token', 'theClientId')
|
30
|
+
* .then((result) => {
|
31
|
+
* if (!result.value) {
|
32
|
+
* // redirect or show some other ui
|
33
|
+
* } else {
|
34
|
+
* if (result.viewOnlyUserTypeApp) {
|
35
|
+
* // use this to inform your app to show a "View Only" mode
|
36
|
+
* }
|
37
|
+
* }
|
38
|
+
* })
|
39
|
+
* .catch((err) => {
|
40
|
+
* // two possible errors
|
41
|
+
* // invalid clientId: {"error":{"code":400,"messageCode":"GWM_0007","message":"Invalid request","details":[]}}
|
42
|
+
* // invalid token: {"error":{"code":498,"message":"Invalid token.","details":[]}}
|
43
|
+
* })
|
44
|
+
* ```
|
45
|
+
*
|
46
|
+
* Note: This is only usable by Esri applications hosted on *arcgis.com, *esri.com or within
|
47
|
+
* an ArcGIS Enterprise installation. Custom applications can not use this.
|
48
|
+
*
|
49
|
+
* @param token platform token
|
50
|
+
* @param clientId application client id
|
51
|
+
* @param portal Optional
|
52
|
+
*/
|
53
|
+
export function validateAppAccess(
|
54
|
+
token: string,
|
55
|
+
clientId: string,
|
56
|
+
portal = "https://www.arcgis.com/sharing/rest"
|
57
|
+
): Promise<IAppAccess> {
|
58
|
+
const url = `${portal}/oauth2/validateAppAccess`;
|
59
|
+
const ro = {
|
60
|
+
method: "POST",
|
61
|
+
params: {
|
62
|
+
f: "json",
|
63
|
+
client_id: clientId,
|
64
|
+
token,
|
65
|
+
},
|
66
|
+
} as IRequestOptions;
|
67
|
+
return request(url, ro);
|
68
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
/* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
import { ApiKey } from "../src/index";
|
5
|
+
// import { ICredential } from "../src/UserSession";
|
6
|
+
|
7
|
+
|
8
|
+
import * as fetchMock from "fetch-mock";
|
9
|
+
|
10
|
+
describe("ApiKey", () => {
|
11
|
+
afterEach(fetchMock.restore);
|
12
|
+
|
13
|
+
describe(".getToken()", () => {
|
14
|
+
it("should return the ApiKey", done => {
|
15
|
+
const session = new ApiKey({
|
16
|
+
key: "123456"
|
17
|
+
});
|
18
|
+
|
19
|
+
Promise.all([
|
20
|
+
session.getToken("https://www.arcgis.com/sharing/rest/portals/self"),
|
21
|
+
session.getToken(
|
22
|
+
"https://services1.arcgis.com/MOCK_ORG/arcgis/rest/services/Private_Service/FeatureServer"
|
23
|
+
)
|
24
|
+
])
|
25
|
+
.then(([token1, token2]) => {
|
26
|
+
expect(token1).toBe("123456");
|
27
|
+
expect(token2).toBe("123456");
|
28
|
+
done();
|
29
|
+
})
|
30
|
+
.catch(e => {
|
31
|
+
fail(e);
|
32
|
+
});
|
33
|
+
});
|
34
|
+
});
|
35
|
+
});
|
@@ -0,0 +1,124 @@
|
|
1
|
+
/* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
|
2
|
+
* Apache-2.0 */
|
3
|
+
|
4
|
+
import { ApplicationSession } from "../src/index";
|
5
|
+
import * as fetchMock from "fetch-mock";
|
6
|
+
import { YESTERDAY, TOMORROW } from "./utils";
|
7
|
+
|
8
|
+
describe("ApplicationSession", () => {
|
9
|
+
afterEach(fetchMock.restore);
|
10
|
+
|
11
|
+
describe(".getToken()", () => {
|
12
|
+
it("should return the cached token if it is not expired", done => {
|
13
|
+
const session = new ApplicationSession({
|
14
|
+
clientId: "id",
|
15
|
+
clientSecret: "secret",
|
16
|
+
token: "token",
|
17
|
+
expires: TOMORROW
|
18
|
+
});
|
19
|
+
|
20
|
+
Promise.all([
|
21
|
+
session.getToken("https://www.arcgis.com/sharing/rest/portals/self"),
|
22
|
+
session.getToken(
|
23
|
+
"https://services1.arcgis.com/MOCK_ORG/arcgis/rest/services/Private_Service/FeatureServer"
|
24
|
+
)
|
25
|
+
])
|
26
|
+
.then(([token1, token2]) => {
|
27
|
+
expect(token1).toBe("token");
|
28
|
+
expect(token2).toBe("token");
|
29
|
+
done();
|
30
|
+
})
|
31
|
+
.catch(e => {
|
32
|
+
fail(e);
|
33
|
+
});
|
34
|
+
});
|
35
|
+
|
36
|
+
it("should fetch a new token if the cached one is expired", done => {
|
37
|
+
const session = new ApplicationSession({
|
38
|
+
clientId: "id",
|
39
|
+
clientSecret: "secret",
|
40
|
+
token: "token",
|
41
|
+
expires: YESTERDAY
|
42
|
+
});
|
43
|
+
|
44
|
+
fetchMock.post("https://www.arcgis.com/sharing/rest/oauth2/token/", {
|
45
|
+
access_token: "new",
|
46
|
+
expires_in: 1800
|
47
|
+
});
|
48
|
+
|
49
|
+
Promise.all([
|
50
|
+
session.getToken("https://www.arcgis.com/sharing/rest/portals/self"),
|
51
|
+
session.getToken(
|
52
|
+
"https://services1.arcgis.com/MOCK_ORG/arcgis/rest/services/Private_Service/FeatureServer"
|
53
|
+
)
|
54
|
+
])
|
55
|
+
.then(([token1, token2]) => {
|
56
|
+
expect(token1).toBe("new");
|
57
|
+
expect(token2).toBe("new");
|
58
|
+
done();
|
59
|
+
})
|
60
|
+
.catch(e => {
|
61
|
+
fail(e);
|
62
|
+
});
|
63
|
+
});
|
64
|
+
|
65
|
+
it("should not make multiple refresh requests while a refresh is pending", done => {
|
66
|
+
const session = new ApplicationSession({
|
67
|
+
clientId: "id",
|
68
|
+
clientSecret: "secret",
|
69
|
+
token: "token",
|
70
|
+
expires: YESTERDAY
|
71
|
+
});
|
72
|
+
|
73
|
+
fetchMock.mock(
|
74
|
+
"https://www.arcgis.com/sharing/rest/oauth2/token/",
|
75
|
+
{
|
76
|
+
access_token: "new",
|
77
|
+
expires_in: 1800
|
78
|
+
},
|
79
|
+
{ method: "POST", repeat: 1 }
|
80
|
+
);
|
81
|
+
|
82
|
+
Promise.all([
|
83
|
+
session.getToken("https://www.arcgis.com/sharing/rest/portals/self"),
|
84
|
+
session.getToken("https://www.arcgis.com/sharing/rest/portals/self")
|
85
|
+
])
|
86
|
+
.then(([token1, token2]) => {
|
87
|
+
expect(token1).toBe("new");
|
88
|
+
expect(token2).toBe("new");
|
89
|
+
expect(
|
90
|
+
fetchMock.calls("https://www.arcgis.com/sharing/rest/oauth2/token/")
|
91
|
+
.length
|
92
|
+
).toBe(1);
|
93
|
+
done();
|
94
|
+
})
|
95
|
+
.catch(e => {
|
96
|
+
fail(e);
|
97
|
+
});
|
98
|
+
});
|
99
|
+
});
|
100
|
+
|
101
|
+
it("should provide a method to refresh a session", done => {
|
102
|
+
const session = new ApplicationSession({
|
103
|
+
clientId: "id",
|
104
|
+
clientSecret: "secret",
|
105
|
+
token: "token",
|
106
|
+
expires: YESTERDAY
|
107
|
+
});
|
108
|
+
|
109
|
+
fetchMock.post("https://www.arcgis.com/sharing/rest/oauth2/token/", {
|
110
|
+
access_token: "new",
|
111
|
+
expires_in: 1800
|
112
|
+
});
|
113
|
+
|
114
|
+
session
|
115
|
+
.refreshSession()
|
116
|
+
.then(s => {
|
117
|
+
expect(s).toBe(session);
|
118
|
+
done();
|
119
|
+
})
|
120
|
+
.catch(e => {
|
121
|
+
fail(e);
|
122
|
+
});
|
123
|
+
});
|
124
|
+
});
|