ducimusipsa 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/.prettierignore +2 -0
- package/.travis.yml +34 -0
- package/.vscode/launch.json +24 -0
- package/.vscode/settings.json +3 -0
- package/demos/ago-node-cli/README.md +29 -0
- package/demos/ago-node-cli/ago.js +32 -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 +180 -0
- package/demos/ago-node-cli/package.json +30 -0
- package/demos/attachments/README.md +5 -0
- package/demos/attachments/index.html +164 -0
- package/demos/attachments/package-lock.json +182 -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 +109 -0
- package/demos/batch-geocoder-node/package.json +38 -0
- package/demos/express/README.md +15 -0
- package/demos/express/config.json.template +3 -0
- package/demos/express/package-lock.json +428 -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 +182 -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 +182 -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 +85 -0
- package/demos/jsapi-integration/package-lock.json +184 -0
- package/demos/jsapi-integration/package.json +19 -0
- package/demos/oauth2-browser/README.md +14 -0
- package/demos/oauth2-browser/authenticate.html +32 -0
- package/demos/oauth2-browser/config.js.template +6 -0
- package/demos/oauth2-browser/index.html +202 -0
- package/demos/oauth2-browser/logo.svg +4 -0
- package/demos/oauth2-browser/package-lock.json +163 -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 +21 -0
- package/demos/oauth2-browser-retry/index.html +116 -0
- package/demos/oauth2-browser-retry/logo.svg +4 -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 +11323 -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 +308 -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/docs/FAQ.md +28 -0
- package/docs/HISTORY.md +62 -0
- package/docs/acetate.config.js +223 -0
- package/docs/build-typedoc.js +303 -0
- package/docs/src/_layout.html +82 -0
- package/docs/src/api/_declaration.html +496 -0
- package/docs/src/api/_layout.html +127 -0
- package/docs/src/api/_package.html +13 -0
- package/docs/src/api/index.html +23 -0
- package/docs/src/guides/_layout.html +24 -0
- package/docs/src/guides/amd-requirejs-dojo.md +40 -0
- package/docs/src/guides/babel-and-rollup.md +30 -0
- package/docs/src/guides/babel-and-webpack.md +30 -0
- package/docs/src/guides/browser-authentication.md +41 -0
- package/docs/src/guides/browserify.md +9 -0
- package/docs/src/guides/cli-authentication.md +9 -0
- package/docs/src/guides/client-server-authentication.md +9 -0
- package/docs/src/guides/from-a-cdn.md +36 -0
- package/docs/src/guides/index.md +52 -0
- package/docs/src/guides/node.md +70 -0
- package/docs/src/guides/package-overview.md +8 -0
- package/docs/src/guides/server-authentication.md +9 -0
- package/docs/src/guides/typescript-and-webpack.md +9 -0
- package/docs/src/img/icons.png +0 -0
- package/docs/src/img/icons@2x.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 +169 -0
- package/jasmine.json +7 -0
- package/karma.conf.js +100 -0
- package/lerna.json +8 -0
- package/notes/README.md +88 -0
- package/package.json +129 -0
- package/packages/arcgis-rest-auth/README.md +67 -0
- package/packages/arcgis-rest-auth/package-lock.json +11 -0
- package/packages/arcgis-rest-auth/package.json +53 -0
- package/packages/arcgis-rest-auth/src/ApplicationSession.ts +108 -0
- package/packages/arcgis-rest-auth/src/UserSession.ts +880 -0
- package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +24 -0
- package/packages/arcgis-rest-auth/src/fetch-token.ts +52 -0
- package/packages/arcgis-rest-auth/src/generate-token.ts +39 -0
- package/packages/arcgis-rest-auth/src/index.ts +8 -0
- package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +124 -0
- package/packages/arcgis-rest-auth/test/UserSession.test.ts +1005 -0
- package/packages/arcgis-rest-auth/test/fetchToken.test.ts +112 -0
- package/packages/arcgis-rest-auth/test/generateToken.test.ts +130 -0
- package/packages/arcgis-rest-auth/test/utils.ts +14 -0
- package/packages/arcgis-rest-auth/tsconfig.json +6 -0
- package/packages/arcgis-rest-common/README.md +57 -0
- package/packages/arcgis-rest-common/package-lock.json +11 -0
- package/packages/arcgis-rest-common/package.json +41 -0
- package/packages/arcgis-rest-common/src/index.ts +10 -0
- package/packages/arcgis-rest-common/src/types/feature.ts +14 -0
- package/packages/arcgis-rest-common/src/types/geometry.ts +47 -0
- package/packages/arcgis-rest-common/src/types/symbol.ts +21 -0
- package/packages/arcgis-rest-common/src/util/location.ts +19 -0
- package/packages/arcgis-rest-common/test/location.test.ts +73 -0
- package/packages/arcgis-rest-common/tsconfig.json +6 -0
- package/packages/arcgis-rest-common-types/README.md +64 -0
- package/packages/arcgis-rest-common-types/package.json +40 -0
- package/packages/arcgis-rest-common-types/src/group.ts +54 -0
- package/packages/arcgis-rest-common-types/src/index.ts +469 -0
- package/packages/arcgis-rest-common-types/src/item.ts +47 -0
- package/packages/arcgis-rest-common-types/src/webmap.ts +1267 -0
- package/packages/arcgis-rest-common-types/tsconfig.json +11 -0
- package/packages/arcgis-rest-feature-service/README.md +73 -0
- package/packages/arcgis-rest-feature-service/package-lock.json +11 -0
- package/packages/arcgis-rest-feature-service/package.json +53 -0
- package/packages/arcgis-rest-feature-service/src/add.ts +90 -0
- package/packages/arcgis-rest-feature-service/src/addAttachment.ts +64 -0
- package/packages/arcgis-rest-feature-service/src/decodeValues.ts +129 -0
- package/packages/arcgis-rest-feature-service/src/delete.ts +97 -0
- package/packages/arcgis-rest-feature-service/src/deleteAttachments.ts +67 -0
- package/packages/arcgis-rest-feature-service/src/getAttachments.ts +64 -0
- package/packages/arcgis-rest-feature-service/src/getLayer.ts +27 -0
- package/packages/arcgis-rest-feature-service/src/helpers.ts +50 -0
- package/packages/arcgis-rest-feature-service/src/index.ts +14 -0
- package/packages/arcgis-rest-feature-service/src/query.ts +183 -0
- package/packages/arcgis-rest-feature-service/src/queryRelated.ts +94 -0
- package/packages/arcgis-rest-feature-service/src/update.ts +90 -0
- package/packages/arcgis-rest-feature-service/src/updateAttachment.ts +73 -0
- package/packages/arcgis-rest-feature-service/test/attachments.test.ts +203 -0
- package/packages/arcgis-rest-feature-service/test/crud.test.ts +263 -0
- package/packages/arcgis-rest-feature-service/test/decodeValues.test.ts +67 -0
- package/packages/arcgis-rest-feature-service/test/getLayer.test.ts +31 -0
- package/packages/arcgis-rest-feature-service/test/mocks/cvdQueryResponse.ts +225 -0
- package/packages/arcgis-rest-feature-service/test/mocks/feature.ts +281 -0
- package/packages/arcgis-rest-feature-service/test/mocks/fields.ts +779 -0
- package/packages/arcgis-rest-feature-service/test/mocks/foo.txt +1 -0
- package/packages/arcgis-rest-feature-service/test/mocks/service.ts +259 -0
- package/packages/arcgis-rest-feature-service/test/query.test.ts +140 -0
- package/packages/arcgis-rest-feature-service/tsconfig.json +6 -0
- package/packages/arcgis-rest-feature-service-admin/README.md +69 -0
- package/packages/arcgis-rest-feature-service-admin/package-lock.json +11 -0
- package/packages/arcgis-rest-feature-service-admin/package.json +56 -0
- package/packages/arcgis-rest-feature-service-admin/src/addTo.ts +74 -0
- package/packages/arcgis-rest-feature-service-admin/src/create.ts +207 -0
- package/packages/arcgis-rest-feature-service-admin/src/index.ts +2 -0
- package/packages/arcgis-rest-feature-service-admin/test/addTo.test.ts +353 -0
- package/packages/arcgis-rest-feature-service-admin/test/create.test.ts +412 -0
- package/packages/arcgis-rest-feature-service-admin/test/mocks/layerDefinition.ts +79 -0
- package/packages/arcgis-rest-feature-service-admin/test/mocks/move.ts +14 -0
- package/packages/arcgis-rest-feature-service-admin/test/mocks/service.ts +72 -0
- package/packages/arcgis-rest-feature-service-admin/tsconfig.json +6 -0
- package/packages/arcgis-rest-geocoder/README.md +83 -0
- package/packages/arcgis-rest-geocoder/package-lock.json +11 -0
- package/packages/arcgis-rest-geocoder/package.json +55 -0
- package/packages/arcgis-rest-geocoder/src/bulk.ts +102 -0
- package/packages/arcgis-rest-geocoder/src/geocode.ts +130 -0
- package/packages/arcgis-rest-geocoder/src/helpers.ts +80 -0
- package/packages/arcgis-rest-geocoder/src/index.ts +8 -0
- package/packages/arcgis-rest-geocoder/src/reverse.ts +83 -0
- package/packages/arcgis-rest-geocoder/src/suggest.ts +69 -0
- package/packages/arcgis-rest-geocoder/test/bulk.test.ts +113 -0
- package/packages/arcgis-rest-geocoder/test/geocode.test.ts +176 -0
- package/packages/arcgis-rest-geocoder/test/helpers.test.ts +111 -0
- package/packages/arcgis-rest-geocoder/test/mocks/responses.ts +629 -0
- package/packages/arcgis-rest-geocoder/test/reverse.test.ts +126 -0
- package/packages/arcgis-rest-geocoder/test/suggest.test.ts +98 -0
- package/packages/arcgis-rest-geocoder/tsconfig.json +6 -0
- package/packages/arcgis-rest-groups/README.md +67 -0
- package/packages/arcgis-rest-groups/package-lock.json +11 -0
- package/packages/arcgis-rest-groups/package.json +55 -0
- package/packages/arcgis-rest-groups/src/create.ts +34 -0
- package/packages/arcgis-rest-groups/src/get.ts +95 -0
- package/packages/arcgis-rest-groups/src/helpers.ts +27 -0
- package/packages/arcgis-rest-groups/src/index.ts +11 -0
- package/packages/arcgis-rest-groups/src/notification.ts +77 -0
- package/packages/arcgis-rest-groups/src/protect.ts +40 -0
- package/packages/arcgis-rest-groups/src/remove.ts +23 -0
- package/packages/arcgis-rest-groups/src/search.ts +64 -0
- package/packages/arcgis-rest-groups/src/update.ts +36 -0
- package/packages/arcgis-rest-groups/test/crud.test.ts +134 -0
- package/packages/arcgis-rest-groups/test/get.test.ts +101 -0
- package/packages/arcgis-rest-groups/test/mocks/responses.ts +141 -0
- package/packages/arcgis-rest-groups/test/notification.test.ts +102 -0
- package/packages/arcgis-rest-groups/test/protect.test.ts +64 -0
- package/packages/arcgis-rest-groups/test/search.test.ts +85 -0
- package/packages/arcgis-rest-groups/tsconfig.json +6 -0
- package/packages/arcgis-rest-items/README.md +69 -0
- package/packages/arcgis-rest-items/package-lock.json +11 -0
- package/packages/arcgis-rest-items/package.json +55 -0
- package/packages/arcgis-rest-items/src/add.ts +103 -0
- package/packages/arcgis-rest-items/src/create.ts +110 -0
- package/packages/arcgis-rest-items/src/get.ts +79 -0
- package/packages/arcgis-rest-items/src/helpers.ts +147 -0
- package/packages/arcgis-rest-items/src/index.ts +11 -0
- package/packages/arcgis-rest-items/src/protect.ts +38 -0
- package/packages/arcgis-rest-items/src/remove.ts +58 -0
- package/packages/arcgis-rest-items/src/search.ts +78 -0
- package/packages/arcgis-rest-items/src/update.ts +134 -0
- package/packages/arcgis-rest-items/test/add.test.ts +256 -0
- package/packages/arcgis-rest-items/test/create.test.ts +371 -0
- package/packages/arcgis-rest-items/test/get.test.ts +181 -0
- package/packages/arcgis-rest-items/test/mocks/foo.zip +0 -0
- package/packages/arcgis-rest-items/test/mocks/item.ts +35 -0
- package/packages/arcgis-rest-items/test/mocks/resources.ts +31 -0
- package/packages/arcgis-rest-items/test/mocks/search.ts +62 -0
- package/packages/arcgis-rest-items/test/protect.test.ts +122 -0
- package/packages/arcgis-rest-items/test/remove.test.ts +161 -0
- package/packages/arcgis-rest-items/test/search.test.ts +159 -0
- package/packages/arcgis-rest-items/test/update.test.ts +450 -0
- package/packages/arcgis-rest-items/tsconfig.json +6 -0
- package/packages/arcgis-rest-request/README.md +68 -0
- package/packages/arcgis-rest-request/package-lock.json +11 -0
- package/packages/arcgis-rest-request/package.json +45 -0
- package/packages/arcgis-rest-request/src/index.ts +15 -0
- package/packages/arcgis-rest-request/src/request.ts +358 -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/append-custom-params.ts +29 -0
- package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +34 -0
- package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +23 -0
- package/packages/arcgis-rest-request/src/utils/get-portal-url.ts +25 -0
- package/packages/arcgis-rest-request/src/utils/get-portal.ts +45 -0
- package/packages/arcgis-rest-request/src/utils/params.ts +52 -0
- package/packages/arcgis-rest-request/src/utils/process-params.ts +99 -0
- package/packages/arcgis-rest-request/src/utils/retryAuthError.ts +9 -0
- package/packages/arcgis-rest-request/src/utils/warn.ts +11 -0
- package/packages/arcgis-rest-request/test/mocks/errors.ts +68 -0
- package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
- package/packages/arcgis-rest-request/test/mocks/portal.ts +112 -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 +323 -0
- package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +170 -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/encode-form-data.test.ts +133 -0
- package/packages/arcgis-rest-request/test/utils/get-portal-url.test.ts +37 -0
- package/packages/arcgis-rest-request/test/utils/portal.test.ts +97 -0
- package/packages/arcgis-rest-request/test/utils/process-params.test.ts +193 -0
- package/packages/arcgis-rest-request/tsconfig.json +6 -0
- package/packages/arcgis-rest-routing/README.md +71 -0
- package/packages/arcgis-rest-routing/package-lock.json +11 -0
- package/packages/arcgis-rest-routing/package.json +54 -0
- package/packages/arcgis-rest-routing/src/helpers.ts +16 -0
- package/packages/arcgis-rest-routing/src/index.ts +4 -0
- package/packages/arcgis-rest-routing/src/solveRoute.ts +102 -0
- package/packages/arcgis-rest-routing/test/mocks/responses.ts +825 -0
- package/packages/arcgis-rest-routing/test/solveRoute.test.ts +267 -0
- package/packages/arcgis-rest-routing/tsconfig.json +6 -0
- package/packages/arcgis-rest-sharing/README.md +70 -0
- package/packages/arcgis-rest-sharing/package-lock.json +11 -0
- package/packages/arcgis-rest-sharing/package.json +60 -0
- package/packages/arcgis-rest-sharing/src/access.ts +85 -0
- package/packages/arcgis-rest-sharing/src/group-sharing.ts +211 -0
- package/packages/arcgis-rest-sharing/src/helpers.ts +82 -0
- package/packages/arcgis-rest-sharing/src/index.ts +5 -0
- package/packages/arcgis-rest-sharing/test/access.test.ts +154 -0
- package/packages/arcgis-rest-sharing/test/group-sharing.test.ts +566 -0
- package/packages/arcgis-rest-sharing/test/helpers.test.ts +55 -0
- package/packages/arcgis-rest-sharing/test/mocks/sharing.ts +18 -0
- package/packages/arcgis-rest-sharing/tsconfig.json +6 -0
- package/packages/arcgis-rest-users/README.md +74 -0
- package/packages/arcgis-rest-users/package-lock.json +11 -0
- package/packages/arcgis-rest-users/package.json +54 -0
- package/packages/arcgis-rest-users/src/get.ts +69 -0
- package/packages/arcgis-rest-users/src/index.ts +6 -0
- package/packages/arcgis-rest-users/src/invitation.ts +166 -0
- package/packages/arcgis-rest-users/src/notification.ts +73 -0
- package/packages/arcgis-rest-users/test/get.test.ts +99 -0
- package/packages/arcgis-rest-users/test/invitation.test.ts +169 -0
- package/packages/arcgis-rest-users/test/mocks/invitation.ts +70 -0
- package/packages/arcgis-rest-users/test/mocks/notification.ts +34 -0
- package/packages/arcgis-rest-users/test/mocks/user.ts +173 -0
- package/packages/arcgis-rest-users/test/notification.test.ts +83 -0
- package/packages/arcgis-rest-users/tsconfig.json +6 -0
- package/support/changelog.js +394 -0
- package/support/deploy-doc-site.js +16 -0
- package/support/dev.sh +6 -0
- package/support/publish.sh +43 -0
- package/support/test-helpers.js +8 -0
- package/tsconfig.json +69 -0
- package/tslint.json +16 -0
- package/umd-base-profile.js +82 -0
- package/umd-production-profile.js +13 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
|
|
2
|
+
* Apache-2.0 */
|
|
3
|
+
|
|
4
|
+
import { request, getPortalUrl } from "@esri/arcgis-rest-request";
|
|
5
|
+
import { IItem } from "@esri/arcgis-rest-common-types";
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
ISharingRequestOptions,
|
|
9
|
+
ISharingResponse,
|
|
10
|
+
isOrgAdmin,
|
|
11
|
+
getUserMembership
|
|
12
|
+
} from "./helpers";
|
|
13
|
+
|
|
14
|
+
export interface IGroupSharingRequestOptions extends ISharingRequestOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Group identifier
|
|
17
|
+
*/
|
|
18
|
+
groupId: string;
|
|
19
|
+
confirmItemControl?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface IGroupSharingUnsharingRequestOptions
|
|
23
|
+
extends IGroupSharingRequestOptions {
|
|
24
|
+
action: "share" | "unshare";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Share an item with a group.
|
|
29
|
+
*
|
|
30
|
+
* ```js
|
|
31
|
+
* import { shareItemWithGroup } from '@esri/arcgis-rest-sharing';
|
|
32
|
+
*
|
|
33
|
+
* shareItemWithGroup({
|
|
34
|
+
* id: "abc123",
|
|
35
|
+
* groupId: "xyz987",
|
|
36
|
+
* authentication: session
|
|
37
|
+
* })
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @param requestOptions - Options for the request.
|
|
41
|
+
* @returns A Promise that will resolve with the data from the response.
|
|
42
|
+
*/
|
|
43
|
+
export function shareItemWithGroup(
|
|
44
|
+
requestOptions: IGroupSharingRequestOptions
|
|
45
|
+
): Promise<ISharingResponse> {
|
|
46
|
+
return changeGroupSharing({ action: "share", ...requestOptions });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Stop sharing an item with a group.
|
|
51
|
+
*
|
|
52
|
+
* ```js
|
|
53
|
+
* import { unshareItemWithGroup } from '@esri/arcgis-rest-sharing';
|
|
54
|
+
*
|
|
55
|
+
* unshareItemWithGroup({
|
|
56
|
+
* id: "abc123",
|
|
57
|
+
* groupId: "xyz987",
|
|
58
|
+
* authentication: session
|
|
59
|
+
* })
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @param requestOptions - Options for the request.
|
|
63
|
+
* @returns A Promise that will resolve with the data from the response.
|
|
64
|
+
*/
|
|
65
|
+
export function unshareItemWithGroup(
|
|
66
|
+
requestOptions: IGroupSharingRequestOptions
|
|
67
|
+
): Promise<ISharingResponse> {
|
|
68
|
+
return changeGroupSharing({ action: "unshare", ...requestOptions });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @param requestOptions - Options for the request.
|
|
73
|
+
* @returns A Promise that will resolve with the data from the response.
|
|
74
|
+
*/
|
|
75
|
+
function changeGroupSharing(
|
|
76
|
+
requestOptions: IGroupSharingUnsharingRequestOptions
|
|
77
|
+
): Promise<ISharingResponse> {
|
|
78
|
+
const username = requestOptions.authentication.username;
|
|
79
|
+
const owner = requestOptions.owner || username;
|
|
80
|
+
|
|
81
|
+
return isOrgAdmin(requestOptions).then(admin => {
|
|
82
|
+
const resultProp =
|
|
83
|
+
requestOptions.action === "share" ? "notSharedWith" : "notUnsharedFrom";
|
|
84
|
+
// check if the item has already been shared with the group...
|
|
85
|
+
return isItemSharedWithGroup(requestOptions).then(result => {
|
|
86
|
+
// console.log(admin);
|
|
87
|
+
// if we are sharing and result is true OR we are unsharing and result is false... short circuit
|
|
88
|
+
if (
|
|
89
|
+
(requestOptions.action === "share" && result === true) ||
|
|
90
|
+
(requestOptions.action === "unshare" && result === false)
|
|
91
|
+
) {
|
|
92
|
+
// and send back the same response structure ArcGIS Online would
|
|
93
|
+
const response = { itemId: requestOptions.id, shortcut: true } as any;
|
|
94
|
+
response[resultProp] = [];
|
|
95
|
+
return response;
|
|
96
|
+
} else {
|
|
97
|
+
// next check to ensure the user is a member of the group
|
|
98
|
+
return getUserMembership(requestOptions)
|
|
99
|
+
.then(membership => {
|
|
100
|
+
if (membership === "nonmember") {
|
|
101
|
+
// abort and reject promise
|
|
102
|
+
throw Error(
|
|
103
|
+
`This item can not be ${
|
|
104
|
+
requestOptions.action
|
|
105
|
+
}d by ${username} as they are not a member of the specified group ${
|
|
106
|
+
requestOptions.groupId
|
|
107
|
+
}.`
|
|
108
|
+
);
|
|
109
|
+
} else {
|
|
110
|
+
// if orgAdmin or owner (and member of group) share using the owner url
|
|
111
|
+
if (owner === username || admin) {
|
|
112
|
+
return `${getPortalUrl(
|
|
113
|
+
requestOptions
|
|
114
|
+
)}/content/users/${owner}/items/${requestOptions.id}/${
|
|
115
|
+
requestOptions.action
|
|
116
|
+
}`;
|
|
117
|
+
} else {
|
|
118
|
+
// if they are a group admin/owner, use the bare item url
|
|
119
|
+
if (membership === "admin" || membership === "owner") {
|
|
120
|
+
return `${getPortalUrl(requestOptions)}/content/items/${
|
|
121
|
+
requestOptions.id
|
|
122
|
+
}/${requestOptions.action}`;
|
|
123
|
+
} else {
|
|
124
|
+
// otherwise abort
|
|
125
|
+
throw Error(
|
|
126
|
+
`This item can not be ${
|
|
127
|
+
requestOptions.action
|
|
128
|
+
}d by ${username} as they are neither the owner, a groupAdmin of ${
|
|
129
|
+
requestOptions.groupId
|
|
130
|
+
}, nor an org_admin.`
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
})
|
|
136
|
+
.then(url => {
|
|
137
|
+
// now its finally time to do the sharing
|
|
138
|
+
requestOptions.params = {
|
|
139
|
+
groups: requestOptions.groupId,
|
|
140
|
+
confirmItemControl: requestOptions.confirmItemControl
|
|
141
|
+
};
|
|
142
|
+
// dont mixin to ensure that old query parameters from the search request arent included
|
|
143
|
+
return request(url, requestOptions);
|
|
144
|
+
})
|
|
145
|
+
.then(sharingResponse => {
|
|
146
|
+
if (sharingResponse[resultProp].length) {
|
|
147
|
+
throw Error(
|
|
148
|
+
`Item ${requestOptions.id} could not be ${
|
|
149
|
+
requestOptions.action
|
|
150
|
+
}d to group ${requestOptions.groupId}.`
|
|
151
|
+
);
|
|
152
|
+
} else {
|
|
153
|
+
// all is well
|
|
154
|
+
return sharingResponse;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
} // else
|
|
158
|
+
}); // then
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Find out whether or not an item is already shared with a group.
|
|
164
|
+
*
|
|
165
|
+
* @param requestOptions - Options for the request.
|
|
166
|
+
* @returns A Promise that will resolve with the data from the response.
|
|
167
|
+
*/
|
|
168
|
+
function isItemSharedWithGroup(
|
|
169
|
+
requestOptions: IGroupSharingRequestOptions
|
|
170
|
+
): Promise<boolean> {
|
|
171
|
+
const query = {
|
|
172
|
+
q: `id: ${requestOptions.id} AND group: ${requestOptions.groupId}`,
|
|
173
|
+
start: 1,
|
|
174
|
+
num: 10,
|
|
175
|
+
sortField: "title"
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// we need to append some params into requestOptions, so make a clone
|
|
179
|
+
// instead of mutating the params on the inbound requestOptions object
|
|
180
|
+
const options = { ...requestOptions };
|
|
181
|
+
// instead of calling out to "@esri/arcgis-rest-items, make the request manually to forgoe another dependency
|
|
182
|
+
options.params = {
|
|
183
|
+
...query,
|
|
184
|
+
...requestOptions.params
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
const url = `${getPortalUrl(options)}/search`;
|
|
188
|
+
|
|
189
|
+
return request(url, options).then(searchResponse => {
|
|
190
|
+
// if there are no search results at all, we know the item hasnt already been shared with the group
|
|
191
|
+
if (searchResponse.total === 0) {
|
|
192
|
+
return false;
|
|
193
|
+
} else {
|
|
194
|
+
let sharedItem: IItem;
|
|
195
|
+
// otherwise loop through and search for the id
|
|
196
|
+
searchResponse.results.some((item: IItem) => {
|
|
197
|
+
const matchedItem = item.id === requestOptions.id;
|
|
198
|
+
if (matchedItem) {
|
|
199
|
+
sharedItem = item;
|
|
200
|
+
}
|
|
201
|
+
return matchedItem;
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
if (sharedItem) {
|
|
205
|
+
return true;
|
|
206
|
+
} else {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
|
|
2
|
+
* Apache-2.0 */
|
|
3
|
+
|
|
4
|
+
import { IRequestOptions, getPortalUrl } from "@esri/arcgis-rest-request";
|
|
5
|
+
import { UserSession } from "@esri/arcgis-rest-auth";
|
|
6
|
+
import { IGroup, IUser, GroupMembership } from "@esri/arcgis-rest-common-types";
|
|
7
|
+
import { getGroup } from "@esri/arcgis-rest-groups";
|
|
8
|
+
import { IGroupSharingRequestOptions } from "./group-sharing";
|
|
9
|
+
|
|
10
|
+
export interface ISharingRequestOptions extends IRequestOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Unique identifier for the item.
|
|
13
|
+
*/
|
|
14
|
+
id: string;
|
|
15
|
+
/**
|
|
16
|
+
* Represents a user with privileges to update item sharing.
|
|
17
|
+
*/
|
|
18
|
+
authentication: UserSession;
|
|
19
|
+
/**
|
|
20
|
+
* Item owner, if different from the authenticated user.
|
|
21
|
+
*/
|
|
22
|
+
owner?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface ISharingResponse {
|
|
26
|
+
notSharedWith?: string[];
|
|
27
|
+
notUnsharedFrom?: string[];
|
|
28
|
+
itemId: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function getSharingUrl(requestOptions: ISharingRequestOptions): string {
|
|
32
|
+
const username = requestOptions.authentication.username;
|
|
33
|
+
const owner = requestOptions.owner || username;
|
|
34
|
+
return `${getPortalUrl(requestOptions)}/content/users/${encodeURIComponent(
|
|
35
|
+
owner
|
|
36
|
+
)}/items/${requestOptions.id}/share`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function isItemOwner(requestOptions: ISharingRequestOptions): boolean {
|
|
40
|
+
const username = requestOptions.authentication.username;
|
|
41
|
+
const owner = requestOptions.owner || username;
|
|
42
|
+
return owner === username;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Check it the user is a full org_admin
|
|
47
|
+
* @param requestOptions
|
|
48
|
+
* @returns Promise resolving in a boolean indicating if the user is an ArcGIS Organization administrator
|
|
49
|
+
*/
|
|
50
|
+
export function isOrgAdmin(
|
|
51
|
+
requestOptions: ISharingRequestOptions
|
|
52
|
+
): Promise<boolean> {
|
|
53
|
+
const session = requestOptions.authentication as UserSession;
|
|
54
|
+
|
|
55
|
+
return session.getUser(requestOptions).then((user: IUser) => {
|
|
56
|
+
if (!user || user.role !== "org_admin") {
|
|
57
|
+
return false;
|
|
58
|
+
} else {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Get the User Membership for a particular group. Use this if all you have is the groupId.
|
|
66
|
+
* If you have the group object, check the `userMembership.memberType` property instead of calling this method.
|
|
67
|
+
*
|
|
68
|
+
* @param IGroupIdRequestOptions options to pass through in the request
|
|
69
|
+
* @returns A Promise that resolves with "owner" | "admin" | "member" | "nonmember"
|
|
70
|
+
*/
|
|
71
|
+
export function getUserMembership(
|
|
72
|
+
requestOptions: IGroupSharingRequestOptions
|
|
73
|
+
): Promise<GroupMembership> {
|
|
74
|
+
// fetch the group...
|
|
75
|
+
return getGroup(requestOptions.groupId, requestOptions)
|
|
76
|
+
.then((group: IGroup) => {
|
|
77
|
+
return group.userMembership.memberType;
|
|
78
|
+
})
|
|
79
|
+
.catch(() => {
|
|
80
|
+
return "nonmember" as GroupMembership;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
|
|
2
|
+
* Apache-2.0 */
|
|
3
|
+
|
|
4
|
+
import { setItemAccess } from "../src/index";
|
|
5
|
+
import * as fetchMock from "fetch-mock";
|
|
6
|
+
import { MOCK_USER_SESSION } from "./mocks/sharing";
|
|
7
|
+
import {
|
|
8
|
+
AnonUserResponse,
|
|
9
|
+
OrgAdminUserResponse
|
|
10
|
+
} from "../../arcgis-rest-users/test/mocks/user";
|
|
11
|
+
|
|
12
|
+
const SharingResponse = {
|
|
13
|
+
notSharedWith: [] as any,
|
|
14
|
+
itemId: "abc123"
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
describe("setItemAccess()", () => {
|
|
18
|
+
// make sure session doesnt cache metadata
|
|
19
|
+
beforeEach(function() {
|
|
20
|
+
MOCK_USER_SESSION._user = null;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
afterEach(fetchMock.restore);
|
|
24
|
+
|
|
25
|
+
it("should share an item with everyone", done => {
|
|
26
|
+
fetchMock.once("*", SharingResponse);
|
|
27
|
+
|
|
28
|
+
setItemAccess({
|
|
29
|
+
authentication: MOCK_USER_SESSION,
|
|
30
|
+
id: "abc123",
|
|
31
|
+
access: "public"
|
|
32
|
+
})
|
|
33
|
+
.then(response => {
|
|
34
|
+
const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
|
|
35
|
+
expect(url).toEqual(
|
|
36
|
+
"https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/abc123/share"
|
|
37
|
+
);
|
|
38
|
+
expect(options.method).toBe("POST");
|
|
39
|
+
expect(response).toEqual(SharingResponse);
|
|
40
|
+
expect(options.body).toContain("f=json");
|
|
41
|
+
expect(options.body).toContain("everyone=true");
|
|
42
|
+
expect(options.body).toContain("org=true");
|
|
43
|
+
done();
|
|
44
|
+
})
|
|
45
|
+
.catch(e => {
|
|
46
|
+
fail(e);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("should share an item with an organization", done => {
|
|
51
|
+
fetchMock.once("*", SharingResponse);
|
|
52
|
+
|
|
53
|
+
setItemAccess({
|
|
54
|
+
authentication: MOCK_USER_SESSION,
|
|
55
|
+
id: "abc123",
|
|
56
|
+
access: "org"
|
|
57
|
+
})
|
|
58
|
+
.then(response => {
|
|
59
|
+
const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
|
|
60
|
+
expect(url).toEqual(
|
|
61
|
+
"https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/abc123/share"
|
|
62
|
+
);
|
|
63
|
+
expect(options.method).toBe("POST");
|
|
64
|
+
expect(response).toEqual(SharingResponse);
|
|
65
|
+
expect(options.body).toContain("f=json");
|
|
66
|
+
expect(options.body).toContain("everyone=false");
|
|
67
|
+
expect(options.body).toContain("org=true");
|
|
68
|
+
done();
|
|
69
|
+
})
|
|
70
|
+
.catch(e => {
|
|
71
|
+
fail(e);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("should stop sharing an item entirely", done => {
|
|
76
|
+
fetchMock.once("*", SharingResponse);
|
|
77
|
+
|
|
78
|
+
setItemAccess({
|
|
79
|
+
authentication: MOCK_USER_SESSION,
|
|
80
|
+
id: "abc123",
|
|
81
|
+
access: "private"
|
|
82
|
+
})
|
|
83
|
+
.then(response => {
|
|
84
|
+
const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
|
|
85
|
+
expect(url).toEqual(
|
|
86
|
+
"https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/abc123/share"
|
|
87
|
+
);
|
|
88
|
+
expect(options.method).toBe("POST");
|
|
89
|
+
expect(response).toEqual(SharingResponse);
|
|
90
|
+
expect(options.body).toContain("f=json");
|
|
91
|
+
expect(options.body).toContain("everyone=false");
|
|
92
|
+
expect(options.body).toContain("org=false");
|
|
93
|
+
expect(options.body).toContain("groups=");
|
|
94
|
+
done();
|
|
95
|
+
})
|
|
96
|
+
.catch(e => {
|
|
97
|
+
fail(e);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it("should share another persons item if an org admin makes the request", done => {
|
|
102
|
+
fetchMock.once(
|
|
103
|
+
"https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
|
|
104
|
+
OrgAdminUserResponse
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
fetchMock.once(
|
|
108
|
+
"begin:https://myorg.maps.arcgis.com/sharing/rest/content/users/casey/items/abc123/share",
|
|
109
|
+
SharingResponse
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
setItemAccess({
|
|
113
|
+
authentication: MOCK_USER_SESSION,
|
|
114
|
+
id: "abc123",
|
|
115
|
+
access: "private",
|
|
116
|
+
owner: "casey"
|
|
117
|
+
})
|
|
118
|
+
.then(response => {
|
|
119
|
+
const [url, options]: [string, RequestInit] = fetchMock.lastCall();
|
|
120
|
+
expect(url).toEqual(
|
|
121
|
+
"https://myorg.maps.arcgis.com/sharing/rest/content/users/casey/items/abc123/share"
|
|
122
|
+
);
|
|
123
|
+
expect(options.method).toBe("POST");
|
|
124
|
+
expect(response).toEqual(SharingResponse);
|
|
125
|
+
expect(options.body).toContain("f=json");
|
|
126
|
+
expect(options.body).toContain("everyone=false");
|
|
127
|
+
expect(options.body).toContain("org=false");
|
|
128
|
+
expect(options.body).toContain("groups=");
|
|
129
|
+
done();
|
|
130
|
+
})
|
|
131
|
+
.catch(e => {
|
|
132
|
+
fail(e);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("should throw if the person trying to share doesnt own the item and is not an admin", done => {
|
|
137
|
+
fetchMock.once(
|
|
138
|
+
"https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
|
|
139
|
+
AnonUserResponse
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
setItemAccess({
|
|
143
|
+
authentication: MOCK_USER_SESSION,
|
|
144
|
+
id: "abc123",
|
|
145
|
+
access: "private",
|
|
146
|
+
owner: "casey"
|
|
147
|
+
}).catch(e => {
|
|
148
|
+
expect(e.message).toEqual(
|
|
149
|
+
"This item can not be shared by jsmith. They are neither the item owner nor an organization admin."
|
|
150
|
+
);
|
|
151
|
+
done();
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|