etincidunt 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.
Files changed (226) hide show
  1. package/.prettierignore +2 -0
  2. package/.travis.yml +29 -0
  3. package/.vscode/launch.json +24 -0
  4. package/.vscode/settings.json +3 -0
  5. package/demos/ago-node-cli/README.md +29 -0
  6. package/demos/ago-node-cli/ago.js +32 -0
  7. package/demos/ago-node-cli/index.js +11 -0
  8. package/demos/ago-node-cli/lib/item-export-command.js +48 -0
  9. package/demos/ago-node-cli/lib/item-search-command.js +35 -0
  10. package/demos/ago-node-cli/package-lock.json +172 -0
  11. package/demos/ago-node-cli/package.json +30 -0
  12. package/demos/attachments/README.md +5 -0
  13. package/demos/attachments/index.html +164 -0
  14. package/demos/attachments/package-lock.json +182 -0
  15. package/demos/attachments/package.json +18 -0
  16. package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
  17. package/demos/batch-geocoder-node/README.md +14 -0
  18. package/demos/batch-geocoder-node/batch-geocode.js +112 -0
  19. package/demos/batch-geocoder-node/config-template.js +18 -0
  20. package/demos/batch-geocoder-node/package-lock.json +109 -0
  21. package/demos/batch-geocoder-node/package.json +37 -0
  22. package/demos/express/README.md +10 -0
  23. package/demos/express/config.json.template +3 -0
  24. package/demos/express/package-lock.json +388 -0
  25. package/demos/express/package.json +18 -0
  26. package/demos/express/server.js +28 -0
  27. package/demos/feature-service-browser/README.md +6 -0
  28. package/demos/feature-service-browser/index.html +122 -0
  29. package/demos/feature-service-browser/package-lock.json +182 -0
  30. package/demos/feature-service-browser/package.json +18 -0
  31. package/demos/geocoder-browser/README.md +10 -0
  32. package/demos/geocoder-browser/config.js.template +1 -0
  33. package/demos/geocoder-browser/index.html +131 -0
  34. package/demos/geocoder-browser/package-lock.json +163 -0
  35. package/demos/geocoder-browser/package.json +19 -0
  36. package/demos/geocoder-browser/post-sign-in.html +25 -0
  37. package/demos/jsapi-integration/README.md +8 -0
  38. package/demos/jsapi-integration/config.js +6 -0
  39. package/demos/jsapi-integration/index.html +79 -0
  40. package/demos/jsapi-integration/package-lock.json +184 -0
  41. package/demos/jsapi-integration/package.json +19 -0
  42. package/demos/oauth2-browser/README.md +12 -0
  43. package/demos/oauth2-browser/authenticate.html +32 -0
  44. package/demos/oauth2-browser/config.js.template +6 -0
  45. package/demos/oauth2-browser/index.html +202 -0
  46. package/demos/oauth2-browser/logo.svg +4 -0
  47. package/demos/oauth2-browser/package-lock.json +163 -0
  48. package/demos/oauth2-browser/package.json +18 -0
  49. package/demos/oauth2-browser/style.css +36 -0
  50. package/demos/vue/.babelrc +6 -0
  51. package/demos/vue/.env.example +8 -0
  52. package/demos/vue/README.md +17 -0
  53. package/demos/vue/index.html +21 -0
  54. package/demos/vue/package-lock.json +7236 -0
  55. package/demos/vue/package.json +39 -0
  56. package/demos/vue/src/assets/logo.svg +29 -0
  57. package/demos/vue/src/components/App.vue +302 -0
  58. package/demos/vue/src/components/Authenticate.vue +68 -0
  59. package/demos/vue/src/components/Loader.vue +216 -0
  60. package/demos/vue/src/main.js +75 -0
  61. package/demos/vue/webpack.config.js +84 -0
  62. package/docs/FAQ.md +28 -0
  63. package/docs/HISTORY.md +62 -0
  64. package/docs/acetate.config.js +214 -0
  65. package/docs/build-typedoc.js +301 -0
  66. package/docs/src/_layout.html +82 -0
  67. package/docs/src/api/_declaration.html +496 -0
  68. package/docs/src/api/_layout.html +127 -0
  69. package/docs/src/api/_package.html +13 -0
  70. package/docs/src/api/index.html +23 -0
  71. package/docs/src/guides/_layout.html +24 -0
  72. package/docs/src/guides/amd-requirejs-dojo.md +40 -0
  73. package/docs/src/guides/babel-and-rollup.md +30 -0
  74. package/docs/src/guides/babel-and-webpack.md +30 -0
  75. package/docs/src/guides/browser-authentication.md +9 -0
  76. package/docs/src/guides/browserify.md +9 -0
  77. package/docs/src/guides/cli-authentication.md +9 -0
  78. package/docs/src/guides/client-server-authentication.md +9 -0
  79. package/docs/src/guides/from-a-cdn.md +36 -0
  80. package/docs/src/guides/index.md +52 -0
  81. package/docs/src/guides/node.md +30 -0
  82. package/docs/src/guides/package-overview.md +8 -0
  83. package/docs/src/guides/server-authentication.md +9 -0
  84. package/docs/src/guides/typescript-and-webpack.md +9 -0
  85. package/docs/src/img/icons.png +0 -0
  86. package/docs/src/img/icons@2x.png +0 -0
  87. package/docs/src/index.html +12 -0
  88. package/docs/src/js/api-search.js +113 -0
  89. package/docs/src/js/index.js +1 -0
  90. package/docs/src/js/nav-toggle.js +41 -0
  91. package/docs/src/sass/_highlight.scss +96 -0
  92. package/docs/src/sass/_icons.scss +157 -0
  93. package/docs/src/sass/style.scss +169 -0
  94. package/jasmine.json +7 -0
  95. package/karma.conf.js +100 -0
  96. package/lerna.json +8 -0
  97. package/notes/README.md +88 -0
  98. package/package.json +91 -0
  99. package/packages/arcgis-rest-auth/README.md +64 -0
  100. package/packages/arcgis-rest-auth/package-lock.json +11 -0
  101. package/packages/arcgis-rest-auth/package.json +51 -0
  102. package/packages/arcgis-rest-auth/src/ApplicationSession.ts +91 -0
  103. package/packages/arcgis-rest-auth/src/UserSession.ts +829 -0
  104. package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +21 -0
  105. package/packages/arcgis-rest-auth/src/fetch-token.ts +55 -0
  106. package/packages/arcgis-rest-auth/src/generate-token.ts +36 -0
  107. package/packages/arcgis-rest-auth/src/index.ts +5 -0
  108. package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +121 -0
  109. package/packages/arcgis-rest-auth/test/UserSession.test.ts +883 -0
  110. package/packages/arcgis-rest-auth/test/fetchToken.test.ts +76 -0
  111. package/packages/arcgis-rest-auth/test/generateToken.test.ts +36 -0
  112. package/packages/arcgis-rest-auth/test/utils.ts +11 -0
  113. package/packages/arcgis-rest-auth/tsconfig.json +6 -0
  114. package/packages/arcgis-rest-common-types/README.md +61 -0
  115. package/packages/arcgis-rest-common-types/package.json +38 -0
  116. package/packages/arcgis-rest-common-types/src/group.ts +51 -0
  117. package/packages/arcgis-rest-common-types/src/index.ts +467 -0
  118. package/packages/arcgis-rest-common-types/src/item.ts +45 -0
  119. package/packages/arcgis-rest-common-types/src/webmap.ts +1225 -0
  120. package/packages/arcgis-rest-common-types/tsconfig.json +11 -0
  121. package/packages/arcgis-rest-feature-service/README.md +70 -0
  122. package/packages/arcgis-rest-feature-service/package-lock.json +11 -0
  123. package/packages/arcgis-rest-feature-service/package.json +50 -0
  124. package/packages/arcgis-rest-feature-service/src/add.ts +82 -0
  125. package/packages/arcgis-rest-feature-service/src/addAttachment.ts +65 -0
  126. package/packages/arcgis-rest-feature-service/src/delete.ts +85 -0
  127. package/packages/arcgis-rest-feature-service/src/deleteAttachments.ts +68 -0
  128. package/packages/arcgis-rest-feature-service/src/getAttachments.ts +64 -0
  129. package/packages/arcgis-rest-feature-service/src/helpers.ts +77 -0
  130. package/packages/arcgis-rest-feature-service/src/index.ts +8 -0
  131. package/packages/arcgis-rest-feature-service/src/query.ts +174 -0
  132. package/packages/arcgis-rest-feature-service/src/update.ts +81 -0
  133. package/packages/arcgis-rest-feature-service/src/updateAttachment.ts +74 -0
  134. package/packages/arcgis-rest-feature-service/test/attachments.test.ts +179 -0
  135. package/packages/arcgis-rest-feature-service/test/features.test.ts +172 -0
  136. package/packages/arcgis-rest-feature-service/test/mocks/feature.ts +220 -0
  137. package/packages/arcgis-rest-feature-service/test/mocks/foo.txt +1 -0
  138. package/packages/arcgis-rest-feature-service/tsconfig.json +6 -0
  139. package/packages/arcgis-rest-geocoder/README.md +73 -0
  140. package/packages/arcgis-rest-geocoder/package-lock.json +11 -0
  141. package/packages/arcgis-rest-geocoder/package.json +52 -0
  142. package/packages/arcgis-rest-geocoder/src/bulk.ts +102 -0
  143. package/packages/arcgis-rest-geocoder/src/geocode.ts +117 -0
  144. package/packages/arcgis-rest-geocoder/src/helpers.ts +81 -0
  145. package/packages/arcgis-rest-geocoder/src/index.ts +4 -0
  146. package/packages/arcgis-rest-geocoder/src/reverse.ts +84 -0
  147. package/packages/arcgis-rest-geocoder/src/suggest.ts +72 -0
  148. package/packages/arcgis-rest-geocoder/test/geocoder.test.ts +510 -0
  149. package/packages/arcgis-rest-geocoder/test/mocks/responses.ts +588 -0
  150. package/packages/arcgis-rest-geocoder/tsconfig.json +6 -0
  151. package/packages/arcgis-rest-groups/README.md +64 -0
  152. package/packages/arcgis-rest-groups/package-lock.json +11 -0
  153. package/packages/arcgis-rest-groups/package.json +52 -0
  154. package/packages/arcgis-rest-groups/src/groups.ts +272 -0
  155. package/packages/arcgis-rest-groups/src/index.ts +1 -0
  156. package/packages/arcgis-rest-groups/test/groups.test.ts +280 -0
  157. package/packages/arcgis-rest-groups/test/mocks/responses.ts +137 -0
  158. package/packages/arcgis-rest-groups/tsconfig.json +6 -0
  159. package/packages/arcgis-rest-items/README.md +66 -0
  160. package/packages/arcgis-rest-items/package-lock.json +11 -0
  161. package/packages/arcgis-rest-items/package.json +52 -0
  162. package/packages/arcgis-rest-items/src/index.ts +1 -0
  163. package/packages/arcgis-rest-items/src/items.ts +498 -0
  164. package/packages/arcgis-rest-items/test/items.test.ts +1153 -0
  165. package/packages/arcgis-rest-items/test/mocks/foo.zip +0 -0
  166. package/packages/arcgis-rest-items/test/mocks/item.ts +30 -0
  167. package/packages/arcgis-rest-items/test/mocks/resources.ts +28 -0
  168. package/packages/arcgis-rest-items/test/mocks/search.ts +60 -0
  169. package/packages/arcgis-rest-items/tsconfig.json +6 -0
  170. package/packages/arcgis-rest-request/README.md +65 -0
  171. package/packages/arcgis-rest-request/package-lock.json +11 -0
  172. package/packages/arcgis-rest-request/package.json +42 -0
  173. package/packages/arcgis-rest-request/src/index.ts +10 -0
  174. package/packages/arcgis-rest-request/src/request.ts +259 -0
  175. package/packages/arcgis-rest-request/src/utils/ArcGISAuthError.ts +67 -0
  176. package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +73 -0
  177. package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
  178. package/packages/arcgis-rest-request/src/utils/check-for-errors.ts +65 -0
  179. package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +29 -0
  180. package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +23 -0
  181. package/packages/arcgis-rest-request/src/utils/get-portal-url.ts +25 -0
  182. package/packages/arcgis-rest-request/src/utils/get-portal.ts +45 -0
  183. package/packages/arcgis-rest-request/src/utils/process-params.ts +99 -0
  184. package/packages/arcgis-rest-request/test/mocks/errors.ts +59 -0
  185. package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +10 -0
  186. package/packages/arcgis-rest-request/test/mocks/portal.ts +109 -0
  187. package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +38 -0
  188. package/packages/arcgis-rest-request/test/mocks/webmap.ts +38 -0
  189. package/packages/arcgis-rest-request/test/request.test.ts +296 -0
  190. package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +167 -0
  191. package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +40 -0
  192. package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +101 -0
  193. package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +112 -0
  194. package/packages/arcgis-rest-request/test/utils/get-portal-url.test.ts +34 -0
  195. package/packages/arcgis-rest-request/test/utils/portal.test.ts +94 -0
  196. package/packages/arcgis-rest-request/test/utils/process-params.test.ts +190 -0
  197. package/packages/arcgis-rest-request/tsconfig.json +6 -0
  198. package/packages/arcgis-rest-sharing/README.md +67 -0
  199. package/packages/arcgis-rest-sharing/package-lock.json +11 -0
  200. package/packages/arcgis-rest-sharing/package.json +55 -0
  201. package/packages/arcgis-rest-sharing/src/access.ts +91 -0
  202. package/packages/arcgis-rest-sharing/src/group-sharing.ts +212 -0
  203. package/packages/arcgis-rest-sharing/src/helpers.ts +92 -0
  204. package/packages/arcgis-rest-sharing/src/index.ts +2 -0
  205. package/packages/arcgis-rest-sharing/test/access.test.ts +153 -0
  206. package/packages/arcgis-rest-sharing/test/group-sharing.test.ts +436 -0
  207. package/packages/arcgis-rest-sharing/test/mocks/sharing.ts +15 -0
  208. package/packages/arcgis-rest-sharing/tsconfig.json +6 -0
  209. package/packages/arcgis-rest-users/README.md +71 -0
  210. package/packages/arcgis-rest-users/package-lock.json +11 -0
  211. package/packages/arcgis-rest-users/package.json +51 -0
  212. package/packages/arcgis-rest-users/src/index.ts +1 -0
  213. package/packages/arcgis-rest-users/src/users.ts +70 -0
  214. package/packages/arcgis-rest-users/test/mocks/responses.ts +170 -0
  215. package/packages/arcgis-rest-users/test/users.test.ts +97 -0
  216. package/packages/arcgis-rest-users/tsconfig.json +6 -0
  217. package/support/FormData.d.ts +1 -0
  218. package/support/changelog.js +388 -0
  219. package/support/commit-template.txt +19 -0
  220. package/support/deploy-doc-site.js +16 -0
  221. package/support/publish.sh +40 -0
  222. package/support/test-helpers.js +8 -0
  223. package/tsconfig.json +69 -0
  224. package/tslint.json +14 -0
  225. package/umd-base-profile.js +82 -0
  226. package/umd-production-profile.js +13 -0
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@esri/arcgis-rest-groups",
3
+ "version": "1.6.0",
4
+ "description": "Portal Group helpers for @esri/arcgis-rest-request",
5
+ "main": "dist/node/index.js",
6
+ "browser": "dist/umd/groups.umd.js",
7
+ "module": "dist/esm/index.js",
8
+ "js:next": "dist/esm/index.js",
9
+ "types": "dist/esm/index.d.ts",
10
+ "license": "Apache-2.0",
11
+ "files": [
12
+ "dist/**"
13
+ ],
14
+ "dependencies": {
15
+ "tslib": "^1.7.1"
16
+ },
17
+ "peerDependencies": {
18
+ "@esri/arcgis-rest-auth": "^1.5.1",
19
+ "@esri/arcgis-rest-common-types": "^1.5.1",
20
+ "@esri/arcgis-rest-request": "^1.5.1"
21
+ },
22
+ "devDependencies": {
23
+ "@esri/arcgis-rest-auth": "^1.6.0",
24
+ "@esri/arcgis-rest-common-types": "^1.6.0",
25
+ "@esri/arcgis-rest-request": "^1.6.0"
26
+ },
27
+ "scripts": {
28
+ "prepare": "npm run build",
29
+ "build": "npm run build:node && npm run build:umd && npm run build:esm",
30
+ "build:esm": "tsc -p ./tsconfig.json --module es2015 --outDir ./dist/esm --declaration",
31
+ "build:umd": "rollup -c ../../umd-base-profile.js && rollup -c ../../umd-production-profile.js",
32
+ "build:node": "tsc -p ./tsconfig.json --module commonjs --outDir ./dist/node"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/Esri/arcgis-rest-js.git"
40
+ },
41
+ "contributors": [
42
+ {
43
+ "name": "Dave Bouwman",
44
+ "email": "dbouwman@esri.com",
45
+ "url": "http://blog.davebouwman.com/"
46
+ }
47
+ ],
48
+ "bugs": {
49
+ "url": "https://github.com/Esri/arcgis-rest-js/issues"
50
+ },
51
+ "homepage": "https://github.com/Esri/arcgis-rest-js#readme"
52
+ }
@@ -0,0 +1,272 @@
1
+ /* Copyright (c) 2017-2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import {
5
+ request,
6
+ IRequestOptions,
7
+ // IParams,
8
+ getPortalUrl
9
+ } from "@esri/arcgis-rest-request";
10
+
11
+ import {
12
+ IPagingParams,
13
+ IItem,
14
+ IItemUpdate,
15
+ IGroupAdd,
16
+ IGroup
17
+ } from "@esri/arcgis-rest-common-types";
18
+
19
+ export interface IPagingParamsRequestOptions extends IRequestOptions {
20
+ paging: IPagingParams;
21
+ }
22
+
23
+ export interface IGroupIdRequestOptions extends IRequestOptions {
24
+ id: string;
25
+ }
26
+
27
+ export interface IGroupAddRequestOptions extends IRequestOptions {
28
+ group: IGroupAdd;
29
+ }
30
+
31
+ export interface IGroupUpdateRequestOptions extends IRequestOptions {
32
+ group: IItemUpdate;
33
+ }
34
+
35
+ export interface IGroupSearchRequest extends IPagingParams {
36
+ q: string;
37
+ sortField?: string;
38
+ sortOrder?: string;
39
+ [key: string]: any;
40
+ }
41
+
42
+ export interface IGroupSearchResult {
43
+ /**
44
+ * Matches the REST APIs form param
45
+ */
46
+ query: string;
47
+ total: number;
48
+ start: number;
49
+ num: number;
50
+ nextStart: number;
51
+ results: IGroup[];
52
+ }
53
+
54
+ export interface IGroupContentResult {
55
+ total: number;
56
+ start: number;
57
+ num: number;
58
+ nextStart: number;
59
+ items: IItem[];
60
+ }
61
+
62
+ export interface IGroupUsersResult {
63
+ owner: string;
64
+ admins: string[];
65
+ users: string[];
66
+ }
67
+
68
+ /**
69
+ * Search for groups via the portal api
70
+ *
71
+ * ```js
72
+ * import { searchGroups } from '@esri/arcgis-rest-groups';
73
+ *
74
+ * searchgroups({q:'water'})
75
+ * .then((results) => {
76
+ * console.log(response.results.total); // 355
77
+ * })
78
+ * ```
79
+ *
80
+ * @param searchForm - Search request
81
+ * @param requestOptions - Options for the request
82
+ * @returns A Promise that will resolve with the data from the response.
83
+ */
84
+ export function searchGroups(
85
+ searchForm: IGroupSearchRequest,
86
+ requestOptions?: IRequestOptions
87
+ ): Promise<IGroupSearchResult> {
88
+ // construct the search url
89
+ const url = `${getPortalUrl(requestOptions)}/community/groups`;
90
+
91
+ // default to a GET
92
+ const options: IRequestOptions = {
93
+ ...{ httpMethod: "GET" },
94
+ ...requestOptions
95
+ };
96
+
97
+ options.params = { ...searchForm };
98
+
99
+ // send the request
100
+ return request(url, options);
101
+ }
102
+
103
+ /**
104
+ *
105
+ * @param id - Group Id
106
+ * @param requestOptions - Options for the request
107
+ * @returns A Promise that will resolve with the data from the response.
108
+ */
109
+ export function getGroup(
110
+ id: string,
111
+ requestOptions?: IRequestOptions
112
+ ): Promise<IGroup> {
113
+ const url = `${getPortalUrl(requestOptions)}/community/groups/${id}`;
114
+ // default to a GET request
115
+ const options: IRequestOptions = {
116
+ ...{ httpMethod: "GET" },
117
+ ...requestOptions
118
+ };
119
+ return request(url, options);
120
+ }
121
+
122
+ /**
123
+ * Returns the content of a Group. Since the group may contain 1000s of items
124
+ * the requestParams allow for paging.
125
+ * @param id - Group Id
126
+ * @param requestOptions - Options for the request, including paging parameters.
127
+ * @returns A Promise that will resolve with the content of the group.
128
+ */
129
+ export function getGroupContent(
130
+ id: string,
131
+ requestOptions?: IPagingParamsRequestOptions
132
+ ): Promise<IGroup> {
133
+ const url = `${getPortalUrl(requestOptions)}/content/groups/${id}`;
134
+
135
+ // default to a GET request
136
+ const options: IRequestOptions = {
137
+ ...{ httpMethod: "GET" },
138
+ params: { start: 1, num: 100 },
139
+ ...requestOptions
140
+ } as IPagingParamsRequestOptions;
141
+
142
+ // is this the most concise way to mixin with the defaults above?
143
+ if (requestOptions && requestOptions.paging) {
144
+ options.params = { ...requestOptions.paging };
145
+ }
146
+
147
+ return request(url, options);
148
+ }
149
+
150
+ /**
151
+ * Get the usernames of the admins and members. Does not return actual 'User' objects. Those must be
152
+ * retrieved via separate calls to the User's API.
153
+ * @param id - Group Id
154
+ * @param requestOptions - Options for the request
155
+ * @returns A Promise that will resolve with arrays of the group admin usernames and the member usernames
156
+ */
157
+ export function getGroupUsers(
158
+ id: string,
159
+ requestOptions?: IRequestOptions
160
+ ): Promise<IGroupUsersResult> {
161
+ const url = `${getPortalUrl(requestOptions)}/community/groups/${id}/users`;
162
+ // default to a GET request
163
+ const options: IRequestOptions = {
164
+ ...{ httpMethod: "GET" },
165
+ ...requestOptions
166
+ };
167
+ return request(url, options);
168
+ }
169
+
170
+ /**
171
+ * Create a new Group.
172
+ * Note: The group name must be unique within the user's organization.
173
+ * @param requestOptions - Options for the request, including a group object
174
+ * @returns A Promise that will resolve with the success/failure status of the request
175
+ */
176
+ export function createGroup(
177
+ requestOptions: IGroupAddRequestOptions
178
+ ): Promise<any> {
179
+ const url = `${getPortalUrl(requestOptions)}/community/createGroup`;
180
+ const options: IGroupAddRequestOptions = {
181
+ ...requestOptions
182
+ };
183
+ // serialize the group into something Portal will accept
184
+ options.params = serializeGroup(requestOptions.group);
185
+ return request(url, options);
186
+ }
187
+
188
+ /**
189
+ * Update the properties of a group - title, tags etc.
190
+ * @param requestOptions - Options for the request, including the group
191
+ * @returns A Promise that will resolve with the success/failure status of the request
192
+ */
193
+ export function updateGroup(
194
+ requestOptions: IGroupUpdateRequestOptions
195
+ ): Promise<any> {
196
+ const url = `${getPortalUrl(requestOptions)}/community/groups/${
197
+ requestOptions.group.id
198
+ }/update`;
199
+
200
+ const options: IGroupUpdateRequestOptions = {
201
+ ...requestOptions
202
+ };
203
+ // serialize the group into something Portal will accept
204
+ options.params = serializeGroup(requestOptions.group);
205
+ return request(url, options);
206
+ }
207
+
208
+ /**
209
+ * Delete a group.
210
+ * @param requestOptions - Options for the request
211
+ * @returns A Promise that will resolve with the success/failure status of the request
212
+ */
213
+ export function removeGroup(
214
+ requestOptions: IGroupIdRequestOptions
215
+ ): Promise<any> {
216
+ const url = `${getPortalUrl(requestOptions)}/community/groups/${
217
+ requestOptions.id
218
+ }/delete`;
219
+ const options: IGroupIdRequestOptions = {
220
+ ...requestOptions
221
+ };
222
+ return request(url, options);
223
+ }
224
+
225
+ /**
226
+ * Protect a Group. This simply means a user must unprotect the group prior to deleting it
227
+ * @param requestOptions - Options for the request
228
+ * @returns A Promise that will resolve with the success/failure status of the request
229
+ */
230
+ export function protectGroup(
231
+ requestOptions: IGroupIdRequestOptions
232
+ ): Promise<any> {
233
+ const url = `${getPortalUrl(requestOptions)}/community/groups/${
234
+ requestOptions.id
235
+ }/protect`;
236
+ const options: IGroupIdRequestOptions = {
237
+ ...requestOptions
238
+ };
239
+ return request(url, options);
240
+ }
241
+
242
+ /**
243
+ * Unprotect a Group.
244
+ * @param requestOptions - Options for the request
245
+ * @returns A Promise that will resolve with the success/failure status of the request
246
+ */
247
+ export function unprotectGroup(
248
+ requestOptions: IGroupIdRequestOptions
249
+ ): Promise<any> {
250
+ const url = `${getPortalUrl(requestOptions)}/community/groups/${
251
+ requestOptions.id
252
+ }/unprotect`;
253
+ const options: IGroupIdRequestOptions = {
254
+ ...requestOptions
255
+ };
256
+ return request(url, options);
257
+ }
258
+
259
+ /**
260
+ * Serialize a group into a json format accepted by the Portal API
261
+ * for create and update operations
262
+ *
263
+ * @param group IGroup to be serialized
264
+ * @returns a formatted JSON object to be sent to Portal
265
+ */
266
+ function serializeGroup(group: IGroupAdd | IItemUpdate | IGroup): any {
267
+ // create a clone so we're not messing with the original
268
+ const clone = JSON.parse(JSON.stringify(group));
269
+ // join and tags...
270
+ clone.tags = clone.tags.join(", ");
271
+ return clone;
272
+ }
@@ -0,0 +1 @@
1
+ export * from "./groups";
@@ -0,0 +1,280 @@
1
+ import {
2
+ searchGroups,
3
+ getGroup,
4
+ getGroupContent,
5
+ getGroupUsers,
6
+ createGroup,
7
+ updateGroup,
8
+ removeGroup,
9
+ protectGroup,
10
+ unprotectGroup
11
+ } from "../src/index";
12
+
13
+ import {
14
+ GroupSearchResponse,
15
+ GroupEditResponse,
16
+ GroupResponse,
17
+ GroupContentResponse,
18
+ GroupUsersResponse
19
+ } from "./mocks/responses";
20
+ import { encodeParam } from "@esri/arcgis-rest-request";
21
+ import * as fetchMock from "fetch-mock";
22
+
23
+ describe("groups", () => {
24
+ afterEach(fetchMock.restore);
25
+
26
+ describe("searchGroups", () => {
27
+ it("should make a simple, unauthenticated group search request", done => {
28
+ fetchMock.once("*", GroupSearchResponse);
29
+
30
+ searchGroups({ q: "water" })
31
+ .then(response => {
32
+ expect(fetchMock.called()).toEqual(true);
33
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
34
+ expect(url).toEqual(
35
+ "https://www.arcgis.com/sharing/rest/community/groups?f=json&q=water"
36
+ );
37
+ expect(options.method).toBe("GET");
38
+ done();
39
+ })
40
+ .catch(e => {
41
+ fail(e);
42
+ });
43
+ });
44
+
45
+ it("should take num, start, sortField, sortOrder and construct the request", done => {
46
+ fetchMock.once("*", GroupSearchResponse);
47
+ searchGroups({
48
+ q: "water",
49
+ start: 4,
50
+ num: 7,
51
+ sortField: "owner",
52
+ sortOrder: "desc"
53
+ })
54
+ .then(response => {
55
+ expect(fetchMock.called()).toEqual(true);
56
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
57
+ expect(url).toEqual(
58
+ "https://www.arcgis.com/sharing/rest/community/groups?f=json&q=water&start=4&num=7&sortField=owner&sortOrder=desc"
59
+ );
60
+ expect(options.method).toBe("GET");
61
+ done();
62
+ })
63
+ .catch(e => {
64
+ fail(e);
65
+ });
66
+ });
67
+ });
68
+ describe("getGroup", () => {
69
+ it("should return a group", done => {
70
+ fetchMock.once("*", GroupResponse);
71
+ getGroup("3ef")
72
+ .then(response => {
73
+ expect(fetchMock.called()).toEqual(true);
74
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
75
+ expect(url).toEqual(
76
+ "https://www.arcgis.com/sharing/rest/community/groups/3ef?f=json"
77
+ );
78
+ expect(options.method).toBe("GET");
79
+ done();
80
+ })
81
+ .catch(e => {
82
+ fail(e);
83
+ });
84
+ });
85
+ });
86
+ describe("getGroupContent", () => {
87
+ it("should return group content", done => {
88
+ fetchMock.once("*", GroupContentResponse);
89
+ getGroupContent("3ef")
90
+ .then(response => {
91
+ expect(fetchMock.called()).toEqual(true);
92
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
93
+ expect(url).toEqual(
94
+ "https://www.arcgis.com/sharing/rest/content/groups/3ef?f=json&start=1&num=100"
95
+ );
96
+ expect(options.method).toBe("GET");
97
+ done();
98
+ })
99
+ .catch(e => {
100
+ fail(e);
101
+ });
102
+ });
103
+ it("should return group content, paged", done => {
104
+ fetchMock.once("*", GroupContentResponse);
105
+ getGroupContent("3ef", { paging: { start: 4, num: 7 } })
106
+ .then(response => {
107
+ expect(fetchMock.called()).toEqual(true);
108
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
109
+ expect(url).toEqual(
110
+ "https://www.arcgis.com/sharing/rest/content/groups/3ef?f=json&start=4&num=7"
111
+ );
112
+ expect(options.method).toBe("GET");
113
+ done();
114
+ })
115
+ .catch(e => {
116
+ fail(e);
117
+ });
118
+ });
119
+ });
120
+
121
+ describe("authenticted methods", () => {
122
+ const MOCK_AUTH = {
123
+ getToken() {
124
+ return Promise.resolve("fake-token");
125
+ },
126
+ portal: "https://myorg.maps.arcgis.com/sharing/rest"
127
+ };
128
+ const MOCK_REQOPTS = {
129
+ authentication: MOCK_AUTH
130
+ };
131
+
132
+ it("should make a simple, authenticated group search request", done => {
133
+ fetchMock.once("*", GroupSearchResponse);
134
+
135
+ searchGroups({ q: "water" }, MOCK_REQOPTS)
136
+ .then(response => {
137
+ expect(fetchMock.called()).toEqual(true);
138
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
139
+ expect(url).toEqual(
140
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups?f=json&q=water&token=fake-token"
141
+ );
142
+ expect(options.method).toBe("GET");
143
+ done();
144
+ })
145
+ .catch(e => {
146
+ fail(e);
147
+ });
148
+ });
149
+ it("should create a group", done => {
150
+ fetchMock.once("*", GroupEditResponse);
151
+ const fakeGroup = {
152
+ title: "fake group",
153
+ owner: "fakeUser",
154
+ tags: ["foo", "bar"],
155
+ description: "my fake group"
156
+ };
157
+ createGroup({ group: fakeGroup, ...MOCK_REQOPTS })
158
+ .then(response => {
159
+ expect(fetchMock.called()).toEqual(true);
160
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
161
+ expect(url).toEqual(
162
+ "https://myorg.maps.arcgis.com/sharing/rest/community/createGroup"
163
+ );
164
+ expect(options.method).toBe("POST");
165
+ expect(options.body).toContain(encodeParam("f", "json"));
166
+ expect(options.body).toContain(encodeParam("token", "fake-token"));
167
+ expect(options.body).toContain(encodeParam("owner", "fakeUser"));
168
+ // ensure the array props are serialized into strings
169
+ expect(options.body).toContain(encodeParam("tags", "foo, bar"));
170
+ done();
171
+ })
172
+ .catch(e => {
173
+ fail(e);
174
+ });
175
+ });
176
+ it("should update a group", done => {
177
+ fetchMock.once("*", GroupEditResponse);
178
+ const fakeGroup = {
179
+ id: "5bc",
180
+ title: "fake group",
181
+ owner: "fakeUser",
182
+ tags: ["foo", "bar"],
183
+ description: "my fake group"
184
+ };
185
+ updateGroup({ group: fakeGroup, ...MOCK_REQOPTS })
186
+ .then(response => {
187
+ expect(fetchMock.called()).toEqual(true);
188
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
189
+ expect(url).toEqual(
190
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/5bc/update"
191
+ );
192
+ expect(options.method).toBe("POST");
193
+ expect(options.body).toContain(encodeParam("f", "json"));
194
+ expect(options.body).toContain(encodeParam("token", "fake-token"));
195
+ expect(options.body).toContain(encodeParam("owner", "fakeUser"));
196
+ // ensure the array props are serialized into strings
197
+ expect(options.body).toContain(encodeParam("tags", "foo, bar"));
198
+ done();
199
+ })
200
+ .catch(e => {
201
+ fail(e);
202
+ });
203
+ });
204
+ it("should remove a group", done => {
205
+ fetchMock.once("*", GroupEditResponse);
206
+
207
+ removeGroup({ id: "5bc", ...MOCK_REQOPTS })
208
+ .then(response => {
209
+ expect(fetchMock.called()).toEqual(true);
210
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
211
+ expect(url).toEqual(
212
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/5bc/delete"
213
+ );
214
+ expect(options.method).toBe("POST");
215
+ expect(options.body).toContain(encodeParam("f", "json"));
216
+ expect(options.body).toContain(encodeParam("token", "fake-token"));
217
+ done();
218
+ })
219
+ .catch(e => {
220
+ fail(e);
221
+ });
222
+ });
223
+ it("should protect a group", done => {
224
+ fetchMock.once("*", GroupEditResponse);
225
+
226
+ protectGroup({ id: "5bc", ...MOCK_REQOPTS })
227
+ .then(response => {
228
+ expect(fetchMock.called()).toEqual(true);
229
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
230
+ expect(url).toEqual(
231
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/5bc/protect"
232
+ );
233
+ expect(options.method).toBe("POST");
234
+ expect(options.body).toContain(encodeParam("f", "json"));
235
+ expect(options.body).toContain(encodeParam("token", "fake-token"));
236
+ done();
237
+ })
238
+ .catch(e => {
239
+ fail(e);
240
+ });
241
+ });
242
+ it("should unprotect a group", done => {
243
+ fetchMock.once("*", GroupEditResponse);
244
+
245
+ unprotectGroup({ id: "5bc", ...MOCK_REQOPTS })
246
+ .then(response => {
247
+ expect(fetchMock.called()).toEqual(true);
248
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
249
+ expect(url).toEqual(
250
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/5bc/unprotect"
251
+ );
252
+ expect(options.method).toBe("POST");
253
+ expect(options.body).toContain(encodeParam("f", "json"));
254
+ expect(options.body).toContain(encodeParam("token", "fake-token"));
255
+ done();
256
+ })
257
+ .catch(e => {
258
+ fail(e);
259
+ });
260
+ });
261
+ it("should return group users", done => {
262
+ fetchMock.once("*", GroupUsersResponse);
263
+
264
+ getGroupUsers("5bc", MOCK_REQOPTS)
265
+ .then(response => {
266
+ expect(fetchMock.called()).toEqual(true);
267
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
268
+ expect(url).toEqual(
269
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/5bc/users?f=json&token=fake-token"
270
+ );
271
+ expect(options.method).toBe("GET");
272
+ done();
273
+ })
274
+ .catch(e => {
275
+ fail(e);
276
+ });
277
+ });
278
+ // it('should make authenticated call to get the group content', done => {})
279
+ });
280
+ });