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,498 @@
1
+ /* Copyright (c) 2017-2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import {
5
+ request,
6
+ IRequestOptions,
7
+ getPortalUrl
8
+ } from "@esri/arcgis-rest-request";
9
+
10
+ import {
11
+ IItemAdd,
12
+ IItemUpdate,
13
+ IItem,
14
+ IPagingParams
15
+ } from "@esri/arcgis-rest-common-types";
16
+ import { IUserRequestOptions } from "@esri/arcgis-rest-auth";
17
+
18
+ export interface IItemRequestOptions extends IUserRequestOptions {
19
+ item: IItem;
20
+ }
21
+
22
+ export interface IItemIdRequestOptions extends IUserRequestOptions {
23
+ /**
24
+ * Unique identifier of the item.
25
+ */
26
+ id: string;
27
+ /**
28
+ * Item owner username. If not present, `authentication.username` is utilized.
29
+ */
30
+ owner?: string;
31
+ }
32
+
33
+ export interface IItemDataAddRequestOptions extends IItemIdRequestOptions {
34
+ /**
35
+ * Object to store
36
+ */
37
+ data: any;
38
+ }
39
+
40
+ export interface IItemResourceRequestOptions extends IItemIdRequestOptions {
41
+ /**
42
+ * New resource filename.
43
+ */
44
+ name?: string;
45
+ /**
46
+ * Text input to be added as a file resource.
47
+ */
48
+ content?: string;
49
+ resource?: string;
50
+ }
51
+
52
+ export interface IItemCrudRequestOptions extends IUserRequestOptions {
53
+ /**
54
+ * The owner of the item. If this property is not present, `item.owner` will be passed, or lastly `authentication.username`.
55
+ */
56
+ owner?: string;
57
+ /**
58
+ * Id of the folder to house the item.
59
+ */
60
+ folder?: string;
61
+ }
62
+
63
+ export interface IItemAddRequestOptions extends IItemCrudRequestOptions {
64
+ item: IItemAdd;
65
+ }
66
+
67
+ export interface IItemUpdateRequestOptions extends IItemCrudRequestOptions {
68
+ item: IItemUpdate;
69
+ }
70
+
71
+ // this interface still needs to be docced
72
+ export interface ISearchRequest extends IPagingParams {
73
+ q: string;
74
+ [key: string]: any;
75
+ }
76
+
77
+ export interface ISearchRequestOptions extends IRequestOptions {
78
+ searchForm?: ISearchRequest;
79
+ }
80
+
81
+ export interface IItemDataRequestOptions extends IRequestOptions {
82
+ /**
83
+ * Used to request binary data.
84
+ */
85
+ file?: boolean;
86
+ }
87
+
88
+ /**
89
+ * Options to pass through when searching for items.
90
+ */
91
+ export interface ISearchResult {
92
+ query: string; // matches the api's form param
93
+ total: number;
94
+ start: number;
95
+ num: number;
96
+ nextStart: number;
97
+ results: IItem[];
98
+ }
99
+
100
+ export interface IItemUpdateResponse {
101
+ success: boolean;
102
+ id: string;
103
+ }
104
+
105
+ export interface IItemAddResponse extends IItemUpdateResponse {
106
+ folder: string;
107
+ }
108
+
109
+ /**
110
+ * Search for items via the portal api
111
+ *
112
+ * ```js
113
+ * import { searchItems } from '@esri/arcgis-rest-items';
114
+ *
115
+ * searchItems('water')
116
+ * .then((results) => {
117
+ * console.log(results.total); // 355
118
+ * })
119
+ * ```
120
+ *
121
+ * @param search - A string or RequestOptions object to pass through to the endpoint.
122
+ * @returns A Promise that will resolve with the data from the response.
123
+ */
124
+ export function searchItems(
125
+ search: string | ISearchRequestOptions
126
+ ): Promise<ISearchResult> {
127
+ let options: ISearchRequestOptions = {
128
+ httpMethod: "GET",
129
+ params: {}
130
+ };
131
+
132
+ if (typeof search === "string") {
133
+ options.params.q = search;
134
+ } else {
135
+ options.params = search.searchForm;
136
+ // mixin, giving user supplied requestOptions precedence
137
+ options = {
138
+ ...options,
139
+ ...search
140
+ };
141
+ }
142
+
143
+ // construct the search url
144
+ const url = `${getPortalUrl(options)}/search`;
145
+
146
+ // send the request
147
+ return request(url, options);
148
+ }
149
+
150
+ /**
151
+ * Create an item in a folder
152
+ *
153
+ * @param requestOptions = Options for the request
154
+ */
155
+ export function createItemInFolder(
156
+ requestOptions: IItemAddRequestOptions
157
+ ): Promise<IItemAddResponse> {
158
+ const owner = determineOwner(requestOptions);
159
+
160
+ const baseUrl = `${getPortalUrl(requestOptions)}/content/users/${owner}`;
161
+ let url = `${baseUrl}/addItem`;
162
+
163
+ if (requestOptions.folder) {
164
+ url = `${baseUrl}/${requestOptions.folder}/addItem`;
165
+ }
166
+
167
+ // serialize the item into something Portal will accept
168
+ requestOptions.params = {
169
+ ...requestOptions.params,
170
+ ...serializeItem(requestOptions.item)
171
+ };
172
+
173
+ return request(url, requestOptions);
174
+ }
175
+
176
+ /**
177
+ * Create an Item in the user's root folder
178
+ *
179
+ * ```js
180
+ * import { createItem } from '@esri/arcgis-rest-items';
181
+ *
182
+ * createItem({
183
+ * authentication: userSession,
184
+ * item: {
185
+ * title: "The Amazing Voyage",
186
+ * type: "Webmap"
187
+ * }
188
+ * })
189
+ * ```
190
+ *
191
+ * @param requestOptions - Options for the request
192
+ */
193
+ export function createItem(
194
+ requestOptions: IItemAddRequestOptions
195
+ ): Promise<IItemAddResponse> {
196
+ // delegate to createItemInFolder placing in the root of the filestore
197
+ const options = {
198
+ folder: null,
199
+ ...requestOptions
200
+ } as IItemAddRequestOptions;
201
+ return createItemInFolder(options);
202
+ }
203
+
204
+ /**
205
+ * Send json to an item to be stored as the `/data` resource
206
+ *
207
+ * @param requestOptions - Options for the request
208
+ * @returns A Promise that will resolve with an object reporting
209
+ * success/failure and echoing the item id.
210
+ */
211
+ export function addItemJsonData(
212
+ requestOptions: IItemDataAddRequestOptions
213
+ ): Promise<IItemUpdateResponse> {
214
+ const owner = determineOwner(requestOptions);
215
+ const url = `${getPortalUrl(requestOptions)}/content/users/${owner}/items/${
216
+ requestOptions.id
217
+ }/update`;
218
+
219
+ // Portal API requires that the 'data' be stringified and POSTed in
220
+ // a `text` form field. It can also be sent with the `.create` call by sending
221
+ // a `.data` property.
222
+ requestOptions.params = {
223
+ text: JSON.stringify(requestOptions.data),
224
+ ...requestOptions.params
225
+ };
226
+
227
+ return request(url, requestOptions);
228
+ }
229
+ /**
230
+ * Send a file or blob to an item to be stored as the `/data` resource
231
+ *
232
+ * @param requestOptions - Options for the request
233
+ * @returns A Promise that will resolve with an object reporting
234
+ * success/failure and echoing the item id.
235
+ */
236
+ export function addItemData(
237
+ requestOptions: IItemDataAddRequestOptions
238
+ ): Promise<IItemUpdateResponse> {
239
+ const owner = determineOwner(requestOptions);
240
+
241
+ const url = `${getPortalUrl(requestOptions)}/content/users/${owner}/items/${
242
+ requestOptions.id
243
+ }/update`;
244
+
245
+ // Portal API requires that the 'data' be POSTed in a `file` form field.
246
+ requestOptions.params = {
247
+ file: requestOptions.data,
248
+ ...requestOptions.params
249
+ };
250
+
251
+ return request(url, requestOptions);
252
+ }
253
+ /**
254
+ * Get an item by id
255
+ *
256
+ * @param id - Item Id
257
+ * @param requestOptions - Options for the request
258
+ * @returns A Promise that will resolve with the data from the response.
259
+ */
260
+ export function getItem(
261
+ id: string,
262
+ requestOptions?: IRequestOptions
263
+ ): Promise<IItem> {
264
+ const url = `${getPortalUrl(requestOptions)}/content/items/${id}`;
265
+
266
+ // default to a GET request
267
+ const options: IRequestOptions = {
268
+ ...{ httpMethod: "GET" },
269
+ ...requestOptions
270
+ };
271
+ return request(url, options);
272
+ }
273
+
274
+ /**
275
+ * Get the /data for an item.
276
+ * @param id - Item Id
277
+ * @param requestOptions - Options for the request
278
+ * @returns A Promise that will resolve with the json data for the item.
279
+ */
280
+ export function getItemData(
281
+ id: string,
282
+ requestOptions?: IItemDataRequestOptions
283
+ ): Promise<any> {
284
+ const url = `${getPortalUrl(requestOptions)}/content/items/${id}/data`;
285
+ // default to a GET request
286
+ const options: IItemDataRequestOptions = {
287
+ ...{ httpMethod: "GET", params: {} },
288
+ ...requestOptions
289
+ };
290
+
291
+ if (options.file) {
292
+ options.params.f = null;
293
+ }
294
+
295
+ return request(url, options);
296
+ }
297
+
298
+ /**
299
+ * Update an Item
300
+ *
301
+ * * ```js
302
+ * import { updateItem } from '@esri/arcgis-rest-items';
303
+ *
304
+ * updateItem({
305
+ * authentication: userSession,
306
+ * item: {
307
+ * id: "3ef",
308
+ * description: "A three hour tour"
309
+ * }
310
+ * })
311
+ * ```
312
+ *
313
+ * @param item - The item to update.
314
+ * @param requestOptions - Options for the request.
315
+ * @returns A Promise that resolves with the status of the operation.
316
+ */
317
+ export function updateItem(
318
+ requestOptions: IItemUpdateRequestOptions
319
+ ): Promise<any> {
320
+ const owner = determineOwner(requestOptions);
321
+ const url = `${getPortalUrl(requestOptions)}/content/users/${owner}/items/${
322
+ requestOptions.item.id
323
+ }/update`;
324
+
325
+ // serialize the item into something Portal will accept
326
+ requestOptions.params = {
327
+ ...requestOptions.params,
328
+ ...serializeItem(requestOptions.item)
329
+ };
330
+
331
+ return request(url, requestOptions);
332
+ }
333
+
334
+ /**
335
+ * Remove an item from the portal
336
+ *
337
+ * *
338
+ * ```js
339
+ * import { removeItem } from '@esri/arcgis-rest-items';
340
+ *
341
+ * removeItem({
342
+ * authentication: userSession,
343
+ * id: "3ef"
344
+ * })
345
+ * ```
346
+ *
347
+ * @param requestOptions - Options for the request
348
+ * @returns A Promise that deletes an item.
349
+ */
350
+ export function removeItem(
351
+ requestOptions: IItemIdRequestOptions
352
+ ): Promise<any> {
353
+ const owner = determineOwner(requestOptions);
354
+ const url = `${getPortalUrl(requestOptions)}/content/users/${owner}/items/${
355
+ requestOptions.id
356
+ }/delete`;
357
+ return request(url, requestOptions);
358
+ }
359
+
360
+ /**
361
+ * Protect an item
362
+ *
363
+ * @param requestOptions - Options for the request
364
+ * @returns A Promise to protect an item.
365
+ */
366
+ export function protectItem(
367
+ requestOptions: IItemIdRequestOptions
368
+ ): Promise<any> {
369
+ const owner = determineOwner(requestOptions);
370
+ const url = `${getPortalUrl(requestOptions)}/content/users/${owner}/items/${
371
+ requestOptions.id
372
+ }/protect`;
373
+ return request(url, requestOptions);
374
+ }
375
+
376
+ /**
377
+ * Unprotect an item
378
+ *
379
+ * @param requestOptions - Options for the request
380
+ * @returns A Promise to unprotect an item.
381
+ */
382
+ export function unprotectItem(
383
+ requestOptions: IItemIdRequestOptions
384
+ ): Promise<any> {
385
+ const owner = determineOwner(requestOptions);
386
+ const url = `${getPortalUrl(requestOptions)}/content/users/${owner}/items/${
387
+ requestOptions.id
388
+ }/unprotect`;
389
+ return request(url, requestOptions);
390
+ }
391
+
392
+ /**
393
+ * Get the resources associated with an item
394
+ *
395
+ * @param requestOptions - Options for the request
396
+ * @returns A Promise to get some item resources.
397
+ */
398
+ export function getItemResources(
399
+ requestOptions: IItemIdRequestOptions
400
+ ): Promise<any> {
401
+ const url = `${getPortalUrl(requestOptions)}/content/items/${
402
+ requestOptions.id
403
+ }/resources`;
404
+
405
+ // mix in user supplied params
406
+ requestOptions.params = {
407
+ ...requestOptions.params,
408
+ num: 1000
409
+ };
410
+
411
+ return request(url, requestOptions);
412
+ }
413
+
414
+ /**
415
+ * Update a resource associated with an item
416
+ *
417
+ * @param requestOptions - Options for the request
418
+ * @returns A Promise to unprotect an item.
419
+ */
420
+ export function updateItemResource(
421
+ requestOptions: IItemResourceRequestOptions
422
+ ): Promise<any> {
423
+ const owner = determineOwner(requestOptions);
424
+ const url = `${getPortalUrl(requestOptions)}/content/users/${owner}/items/${
425
+ requestOptions.id
426
+ }/updateResources`;
427
+
428
+ // mix in user supplied params
429
+ requestOptions.params = {
430
+ ...requestOptions.params,
431
+ fileName: requestOptions.name,
432
+ text: requestOptions.content
433
+ };
434
+
435
+ return request(url, requestOptions);
436
+ }
437
+
438
+ /**
439
+ * Remove a resource associated with an item
440
+ *
441
+ * @param requestOptions - Options for the request
442
+ * @returns A Promise to unprotect an item.
443
+ */
444
+ export function removeItemResource(
445
+ requestOptions: IItemResourceRequestOptions
446
+ ): Promise<any> {
447
+ const owner = determineOwner(requestOptions);
448
+ const url = `${getPortalUrl(requestOptions)}/content/users/${owner}/items/${
449
+ requestOptions.id
450
+ }/removeResources`;
451
+
452
+ // mix in user supplied params
453
+ requestOptions.params = {
454
+ ...requestOptions.params,
455
+ resource: requestOptions.resource
456
+ };
457
+ return request(url, requestOptions);
458
+ }
459
+
460
+ /**
461
+ * Serialize an item into a json format accepted by the Portal API
462
+ * for create and update operations
463
+ *
464
+ * @param item Item to be serialized
465
+ * @returns a formatted json object to be sent to Portal
466
+ */
467
+ function serializeItem(item: IItemAdd | IItemUpdate | IItem): any {
468
+ // create a clone so we're not messing with the original
469
+ const clone = JSON.parse(JSON.stringify(item));
470
+ // join keywords and tags...
471
+ const { typeKeywords = [], tags = [] } = item;
472
+ clone.typeKeywords = typeKeywords.join(", ");
473
+ clone.tags = tags.join(", ");
474
+ // convert .data to .text
475
+ if (clone.data) {
476
+ clone.text = JSON.stringify(clone.data);
477
+ delete clone.data;
478
+ }
479
+ // Convert properties to a string
480
+ if (clone.properties) {
481
+ clone.properties = JSON.stringify(clone.properties);
482
+ }
483
+ return clone;
484
+ }
485
+
486
+ /**
487
+ * requestOptions.owner is given priority, requestOptions.item.owner will be checked next. If neither are present, authentication.username will be assumed.
488
+ */
489
+ function determineOwner(requestOptions: any): string {
490
+ if (requestOptions.owner) {
491
+ return requestOptions.owner;
492
+ }
493
+ if (requestOptions.item && requestOptions.item.owner) {
494
+ return requestOptions.item.owner;
495
+ } else {
496
+ return requestOptions.authentication.username;
497
+ }
498
+ }