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.
Files changed (307) hide show
  1. package/.prettierignore +2 -0
  2. package/.travis.yml +34 -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 +180 -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 +15 -0
  18. package/demos/batch-geocoder-node/batch-geocode.js +115 -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 +38 -0
  22. package/demos/express/README.md +15 -0
  23. package/demos/express/config.json.template +3 -0
  24. package/demos/express/package-lock.json +428 -0
  25. package/demos/express/package.json +18 -0
  26. package/demos/express/server.js +33 -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 +182 -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 +25 -0
  38. package/demos/jsapi-integration/config.js +6 -0
  39. package/demos/jsapi-integration/index.html +85 -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 +14 -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/oauth2-browser-retry/README.md +25 -0
  51. package/demos/oauth2-browser-retry/authenticate.html +21 -0
  52. package/demos/oauth2-browser-retry/index.html +116 -0
  53. package/demos/oauth2-browser-retry/logo.svg +4 -0
  54. package/demos/vue/.env.example +11 -0
  55. package/demos/vue/.eslintrc.js +17 -0
  56. package/demos/vue/.postcssrc.js +5 -0
  57. package/demos/vue/README.md +17 -0
  58. package/demos/vue/babel.config.js +3 -0
  59. package/demos/vue/package-lock.json +11323 -0
  60. package/demos/vue/package.json +33 -0
  61. package/demos/vue/public/favicon.ico +0 -0
  62. package/demos/vue/public/index.html +24 -0
  63. package/demos/vue/src/assets/logo.svg +29 -0
  64. package/demos/vue/src/components/App.vue +308 -0
  65. package/demos/vue/src/components/Authenticate.vue +65 -0
  66. package/demos/vue/src/components/Loader.vue +230 -0
  67. package/demos/vue/src/main.js +92 -0
  68. package/docs/FAQ.md +28 -0
  69. package/docs/HISTORY.md +62 -0
  70. package/docs/acetate.config.js +223 -0
  71. package/docs/build-typedoc.js +303 -0
  72. package/docs/src/_layout.html +82 -0
  73. package/docs/src/api/_declaration.html +496 -0
  74. package/docs/src/api/_layout.html +127 -0
  75. package/docs/src/api/_package.html +13 -0
  76. package/docs/src/api/index.html +23 -0
  77. package/docs/src/guides/_layout.html +24 -0
  78. package/docs/src/guides/amd-requirejs-dojo.md +40 -0
  79. package/docs/src/guides/babel-and-rollup.md +30 -0
  80. package/docs/src/guides/babel-and-webpack.md +30 -0
  81. package/docs/src/guides/browser-authentication.md +41 -0
  82. package/docs/src/guides/browserify.md +9 -0
  83. package/docs/src/guides/cli-authentication.md +9 -0
  84. package/docs/src/guides/client-server-authentication.md +9 -0
  85. package/docs/src/guides/from-a-cdn.md +36 -0
  86. package/docs/src/guides/index.md +52 -0
  87. package/docs/src/guides/node.md +70 -0
  88. package/docs/src/guides/package-overview.md +8 -0
  89. package/docs/src/guides/server-authentication.md +9 -0
  90. package/docs/src/guides/typescript-and-webpack.md +9 -0
  91. package/docs/src/img/icons.png +0 -0
  92. package/docs/src/img/icons@2x.png +0 -0
  93. package/docs/src/index.html +12 -0
  94. package/docs/src/js/api-search.js +112 -0
  95. package/docs/src/js/nav-toggle.js +41 -0
  96. package/docs/src/sass/_highlight.scss +96 -0
  97. package/docs/src/sass/_icons.scss +157 -0
  98. package/docs/src/sass/style.scss +169 -0
  99. package/jasmine.json +7 -0
  100. package/karma.conf.js +100 -0
  101. package/lerna.json +8 -0
  102. package/notes/README.md +88 -0
  103. package/package.json +129 -0
  104. package/packages/arcgis-rest-auth/README.md +67 -0
  105. package/packages/arcgis-rest-auth/package-lock.json +11 -0
  106. package/packages/arcgis-rest-auth/package.json +53 -0
  107. package/packages/arcgis-rest-auth/src/ApplicationSession.ts +108 -0
  108. package/packages/arcgis-rest-auth/src/UserSession.ts +880 -0
  109. package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +24 -0
  110. package/packages/arcgis-rest-auth/src/fetch-token.ts +52 -0
  111. package/packages/arcgis-rest-auth/src/generate-token.ts +39 -0
  112. package/packages/arcgis-rest-auth/src/index.ts +8 -0
  113. package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +124 -0
  114. package/packages/arcgis-rest-auth/test/UserSession.test.ts +1005 -0
  115. package/packages/arcgis-rest-auth/test/fetchToken.test.ts +112 -0
  116. package/packages/arcgis-rest-auth/test/generateToken.test.ts +130 -0
  117. package/packages/arcgis-rest-auth/test/utils.ts +14 -0
  118. package/packages/arcgis-rest-auth/tsconfig.json +6 -0
  119. package/packages/arcgis-rest-common/README.md +57 -0
  120. package/packages/arcgis-rest-common/package-lock.json +11 -0
  121. package/packages/arcgis-rest-common/package.json +41 -0
  122. package/packages/arcgis-rest-common/src/index.ts +10 -0
  123. package/packages/arcgis-rest-common/src/types/feature.ts +14 -0
  124. package/packages/arcgis-rest-common/src/types/geometry.ts +47 -0
  125. package/packages/arcgis-rest-common/src/types/symbol.ts +21 -0
  126. package/packages/arcgis-rest-common/src/util/location.ts +19 -0
  127. package/packages/arcgis-rest-common/test/location.test.ts +73 -0
  128. package/packages/arcgis-rest-common/tsconfig.json +6 -0
  129. package/packages/arcgis-rest-common-types/README.md +64 -0
  130. package/packages/arcgis-rest-common-types/package.json +40 -0
  131. package/packages/arcgis-rest-common-types/src/group.ts +54 -0
  132. package/packages/arcgis-rest-common-types/src/index.ts +469 -0
  133. package/packages/arcgis-rest-common-types/src/item.ts +47 -0
  134. package/packages/arcgis-rest-common-types/src/webmap.ts +1267 -0
  135. package/packages/arcgis-rest-common-types/tsconfig.json +11 -0
  136. package/packages/arcgis-rest-feature-service/README.md +73 -0
  137. package/packages/arcgis-rest-feature-service/package-lock.json +11 -0
  138. package/packages/arcgis-rest-feature-service/package.json +53 -0
  139. package/packages/arcgis-rest-feature-service/src/add.ts +90 -0
  140. package/packages/arcgis-rest-feature-service/src/addAttachment.ts +64 -0
  141. package/packages/arcgis-rest-feature-service/src/decodeValues.ts +129 -0
  142. package/packages/arcgis-rest-feature-service/src/delete.ts +97 -0
  143. package/packages/arcgis-rest-feature-service/src/deleteAttachments.ts +67 -0
  144. package/packages/arcgis-rest-feature-service/src/getAttachments.ts +64 -0
  145. package/packages/arcgis-rest-feature-service/src/getLayer.ts +27 -0
  146. package/packages/arcgis-rest-feature-service/src/helpers.ts +50 -0
  147. package/packages/arcgis-rest-feature-service/src/index.ts +14 -0
  148. package/packages/arcgis-rest-feature-service/src/query.ts +183 -0
  149. package/packages/arcgis-rest-feature-service/src/queryRelated.ts +94 -0
  150. package/packages/arcgis-rest-feature-service/src/update.ts +90 -0
  151. package/packages/arcgis-rest-feature-service/src/updateAttachment.ts +73 -0
  152. package/packages/arcgis-rest-feature-service/test/attachments.test.ts +203 -0
  153. package/packages/arcgis-rest-feature-service/test/crud.test.ts +263 -0
  154. package/packages/arcgis-rest-feature-service/test/decodeValues.test.ts +67 -0
  155. package/packages/arcgis-rest-feature-service/test/getLayer.test.ts +31 -0
  156. package/packages/arcgis-rest-feature-service/test/mocks/cvdQueryResponse.ts +225 -0
  157. package/packages/arcgis-rest-feature-service/test/mocks/feature.ts +281 -0
  158. package/packages/arcgis-rest-feature-service/test/mocks/fields.ts +779 -0
  159. package/packages/arcgis-rest-feature-service/test/mocks/foo.txt +1 -0
  160. package/packages/arcgis-rest-feature-service/test/mocks/service.ts +259 -0
  161. package/packages/arcgis-rest-feature-service/test/query.test.ts +140 -0
  162. package/packages/arcgis-rest-feature-service/tsconfig.json +6 -0
  163. package/packages/arcgis-rest-feature-service-admin/README.md +69 -0
  164. package/packages/arcgis-rest-feature-service-admin/package-lock.json +11 -0
  165. package/packages/arcgis-rest-feature-service-admin/package.json +56 -0
  166. package/packages/arcgis-rest-feature-service-admin/src/addTo.ts +74 -0
  167. package/packages/arcgis-rest-feature-service-admin/src/create.ts +207 -0
  168. package/packages/arcgis-rest-feature-service-admin/src/index.ts +2 -0
  169. package/packages/arcgis-rest-feature-service-admin/test/addTo.test.ts +353 -0
  170. package/packages/arcgis-rest-feature-service-admin/test/create.test.ts +412 -0
  171. package/packages/arcgis-rest-feature-service-admin/test/mocks/layerDefinition.ts +79 -0
  172. package/packages/arcgis-rest-feature-service-admin/test/mocks/move.ts +14 -0
  173. package/packages/arcgis-rest-feature-service-admin/test/mocks/service.ts +72 -0
  174. package/packages/arcgis-rest-feature-service-admin/tsconfig.json +6 -0
  175. package/packages/arcgis-rest-geocoder/README.md +83 -0
  176. package/packages/arcgis-rest-geocoder/package-lock.json +11 -0
  177. package/packages/arcgis-rest-geocoder/package.json +55 -0
  178. package/packages/arcgis-rest-geocoder/src/bulk.ts +102 -0
  179. package/packages/arcgis-rest-geocoder/src/geocode.ts +130 -0
  180. package/packages/arcgis-rest-geocoder/src/helpers.ts +80 -0
  181. package/packages/arcgis-rest-geocoder/src/index.ts +8 -0
  182. package/packages/arcgis-rest-geocoder/src/reverse.ts +83 -0
  183. package/packages/arcgis-rest-geocoder/src/suggest.ts +69 -0
  184. package/packages/arcgis-rest-geocoder/test/bulk.test.ts +113 -0
  185. package/packages/arcgis-rest-geocoder/test/geocode.test.ts +176 -0
  186. package/packages/arcgis-rest-geocoder/test/helpers.test.ts +111 -0
  187. package/packages/arcgis-rest-geocoder/test/mocks/responses.ts +629 -0
  188. package/packages/arcgis-rest-geocoder/test/reverse.test.ts +126 -0
  189. package/packages/arcgis-rest-geocoder/test/suggest.test.ts +98 -0
  190. package/packages/arcgis-rest-geocoder/tsconfig.json +6 -0
  191. package/packages/arcgis-rest-groups/README.md +67 -0
  192. package/packages/arcgis-rest-groups/package-lock.json +11 -0
  193. package/packages/arcgis-rest-groups/package.json +55 -0
  194. package/packages/arcgis-rest-groups/src/create.ts +34 -0
  195. package/packages/arcgis-rest-groups/src/get.ts +95 -0
  196. package/packages/arcgis-rest-groups/src/helpers.ts +27 -0
  197. package/packages/arcgis-rest-groups/src/index.ts +11 -0
  198. package/packages/arcgis-rest-groups/src/notification.ts +77 -0
  199. package/packages/arcgis-rest-groups/src/protect.ts +40 -0
  200. package/packages/arcgis-rest-groups/src/remove.ts +23 -0
  201. package/packages/arcgis-rest-groups/src/search.ts +64 -0
  202. package/packages/arcgis-rest-groups/src/update.ts +36 -0
  203. package/packages/arcgis-rest-groups/test/crud.test.ts +134 -0
  204. package/packages/arcgis-rest-groups/test/get.test.ts +101 -0
  205. package/packages/arcgis-rest-groups/test/mocks/responses.ts +141 -0
  206. package/packages/arcgis-rest-groups/test/notification.test.ts +102 -0
  207. package/packages/arcgis-rest-groups/test/protect.test.ts +64 -0
  208. package/packages/arcgis-rest-groups/test/search.test.ts +85 -0
  209. package/packages/arcgis-rest-groups/tsconfig.json +6 -0
  210. package/packages/arcgis-rest-items/README.md +69 -0
  211. package/packages/arcgis-rest-items/package-lock.json +11 -0
  212. package/packages/arcgis-rest-items/package.json +55 -0
  213. package/packages/arcgis-rest-items/src/add.ts +103 -0
  214. package/packages/arcgis-rest-items/src/create.ts +110 -0
  215. package/packages/arcgis-rest-items/src/get.ts +79 -0
  216. package/packages/arcgis-rest-items/src/helpers.ts +147 -0
  217. package/packages/arcgis-rest-items/src/index.ts +11 -0
  218. package/packages/arcgis-rest-items/src/protect.ts +38 -0
  219. package/packages/arcgis-rest-items/src/remove.ts +58 -0
  220. package/packages/arcgis-rest-items/src/search.ts +78 -0
  221. package/packages/arcgis-rest-items/src/update.ts +134 -0
  222. package/packages/arcgis-rest-items/test/add.test.ts +256 -0
  223. package/packages/arcgis-rest-items/test/create.test.ts +371 -0
  224. package/packages/arcgis-rest-items/test/get.test.ts +181 -0
  225. package/packages/arcgis-rest-items/test/mocks/foo.zip +0 -0
  226. package/packages/arcgis-rest-items/test/mocks/item.ts +35 -0
  227. package/packages/arcgis-rest-items/test/mocks/resources.ts +31 -0
  228. package/packages/arcgis-rest-items/test/mocks/search.ts +62 -0
  229. package/packages/arcgis-rest-items/test/protect.test.ts +122 -0
  230. package/packages/arcgis-rest-items/test/remove.test.ts +161 -0
  231. package/packages/arcgis-rest-items/test/search.test.ts +159 -0
  232. package/packages/arcgis-rest-items/test/update.test.ts +450 -0
  233. package/packages/arcgis-rest-items/tsconfig.json +6 -0
  234. package/packages/arcgis-rest-request/README.md +68 -0
  235. package/packages/arcgis-rest-request/package-lock.json +11 -0
  236. package/packages/arcgis-rest-request/package.json +45 -0
  237. package/packages/arcgis-rest-request/src/index.ts +15 -0
  238. package/packages/arcgis-rest-request/src/request.ts +358 -0
  239. package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +76 -0
  240. package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
  241. package/packages/arcgis-rest-request/src/utils/append-custom-params.ts +29 -0
  242. package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +34 -0
  243. package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +23 -0
  244. package/packages/arcgis-rest-request/src/utils/get-portal-url.ts +25 -0
  245. package/packages/arcgis-rest-request/src/utils/get-portal.ts +45 -0
  246. package/packages/arcgis-rest-request/src/utils/params.ts +52 -0
  247. package/packages/arcgis-rest-request/src/utils/process-params.ts +99 -0
  248. package/packages/arcgis-rest-request/src/utils/retryAuthError.ts +9 -0
  249. package/packages/arcgis-rest-request/src/utils/warn.ts +11 -0
  250. package/packages/arcgis-rest-request/test/mocks/errors.ts +68 -0
  251. package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
  252. package/packages/arcgis-rest-request/test/mocks/portal.ts +112 -0
  253. package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +41 -0
  254. package/packages/arcgis-rest-request/test/mocks/webmap.ts +41 -0
  255. package/packages/arcgis-rest-request/test/request.test.ts +323 -0
  256. package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +170 -0
  257. package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +51 -0
  258. package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +111 -0
  259. package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +133 -0
  260. package/packages/arcgis-rest-request/test/utils/get-portal-url.test.ts +37 -0
  261. package/packages/arcgis-rest-request/test/utils/portal.test.ts +97 -0
  262. package/packages/arcgis-rest-request/test/utils/process-params.test.ts +193 -0
  263. package/packages/arcgis-rest-request/tsconfig.json +6 -0
  264. package/packages/arcgis-rest-routing/README.md +71 -0
  265. package/packages/arcgis-rest-routing/package-lock.json +11 -0
  266. package/packages/arcgis-rest-routing/package.json +54 -0
  267. package/packages/arcgis-rest-routing/src/helpers.ts +16 -0
  268. package/packages/arcgis-rest-routing/src/index.ts +4 -0
  269. package/packages/arcgis-rest-routing/src/solveRoute.ts +102 -0
  270. package/packages/arcgis-rest-routing/test/mocks/responses.ts +825 -0
  271. package/packages/arcgis-rest-routing/test/solveRoute.test.ts +267 -0
  272. package/packages/arcgis-rest-routing/tsconfig.json +6 -0
  273. package/packages/arcgis-rest-sharing/README.md +70 -0
  274. package/packages/arcgis-rest-sharing/package-lock.json +11 -0
  275. package/packages/arcgis-rest-sharing/package.json +60 -0
  276. package/packages/arcgis-rest-sharing/src/access.ts +85 -0
  277. package/packages/arcgis-rest-sharing/src/group-sharing.ts +211 -0
  278. package/packages/arcgis-rest-sharing/src/helpers.ts +82 -0
  279. package/packages/arcgis-rest-sharing/src/index.ts +5 -0
  280. package/packages/arcgis-rest-sharing/test/access.test.ts +154 -0
  281. package/packages/arcgis-rest-sharing/test/group-sharing.test.ts +566 -0
  282. package/packages/arcgis-rest-sharing/test/helpers.test.ts +55 -0
  283. package/packages/arcgis-rest-sharing/test/mocks/sharing.ts +18 -0
  284. package/packages/arcgis-rest-sharing/tsconfig.json +6 -0
  285. package/packages/arcgis-rest-users/README.md +74 -0
  286. package/packages/arcgis-rest-users/package-lock.json +11 -0
  287. package/packages/arcgis-rest-users/package.json +54 -0
  288. package/packages/arcgis-rest-users/src/get.ts +69 -0
  289. package/packages/arcgis-rest-users/src/index.ts +6 -0
  290. package/packages/arcgis-rest-users/src/invitation.ts +166 -0
  291. package/packages/arcgis-rest-users/src/notification.ts +73 -0
  292. package/packages/arcgis-rest-users/test/get.test.ts +99 -0
  293. package/packages/arcgis-rest-users/test/invitation.test.ts +169 -0
  294. package/packages/arcgis-rest-users/test/mocks/invitation.ts +70 -0
  295. package/packages/arcgis-rest-users/test/mocks/notification.ts +34 -0
  296. package/packages/arcgis-rest-users/test/mocks/user.ts +173 -0
  297. package/packages/arcgis-rest-users/test/notification.test.ts +83 -0
  298. package/packages/arcgis-rest-users/tsconfig.json +6 -0
  299. package/support/changelog.js +394 -0
  300. package/support/deploy-doc-site.js +16 -0
  301. package/support/dev.sh +6 -0
  302. package/support/publish.sh +43 -0
  303. package/support/test-helpers.js +8 -0
  304. package/tsconfig.json +69 -0
  305. package/tslint.json +16 -0
  306. package/umd-base-profile.js +82 -0
  307. package/umd-production-profile.js +13 -0
@@ -0,0 +1,358 @@
1
+ /* Copyright (c) 2017-2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { encodeFormData } from "./utils/encode-form-data";
5
+ import { encodeQueryString } from "./utils/encode-query-string";
6
+ import { requiresFormData } from "./utils/process-params";
7
+ import { ArcGISRequestError } from "./utils/ArcGISRequestError";
8
+ import { IRetryAuthError } from "./utils/retryAuthError";
9
+ import { HTTPMethods, IParams, ITokenRequestOptions } from "./utils/params";
10
+
11
+ /**
12
+ * Authentication can be supplied to `request` via [`UserSession`](../../auth/UserSession/) or [`ApplicationSession`](../../auth/ApplicationSession/). Both classes extend `IAuthenticationManager`.
13
+ * ```js
14
+ * const session = new UserSession({
15
+ * username: "jsmith",
16
+ * password: "123456",
17
+ * // optional
18
+ * portal: "https://[yourserver]/arcgis/sharing/rest"
19
+ * })
20
+ *
21
+ * request(url, { authentication: session })
22
+ * ```
23
+ */
24
+ export interface IAuthenticationManager {
25
+ /**
26
+ * Defaults to 'https://www.arcgis.com/sharing/rest'.
27
+ */
28
+ portal: string;
29
+ getToken(url: string, requestOptions?: ITokenRequestOptions): Promise<string>;
30
+ }
31
+
32
+ /**
33
+ * Options for the `request()` method.
34
+ */
35
+ export interface IRequestOptions {
36
+ /**
37
+ * Additional parameters to pass in the request.
38
+ */
39
+ params?: IParams;
40
+
41
+ /**
42
+ * The HTTP method to send the request with.
43
+ */
44
+ httpMethod?: HTTPMethods;
45
+
46
+ /**
47
+ * The instance of `IAuthenticationManager` to use to authenticate this request.
48
+ */
49
+ authentication?: IAuthenticationManager;
50
+
51
+ /**
52
+ * Base url for the portal you want to make the request to. Defaults to 'https://www.arcgis.com/sharing/rest'.
53
+ */
54
+ portal?: string;
55
+
56
+ /**
57
+ * The implementation of `fetch` to use. Defaults to a global `fetch`.
58
+ */
59
+ fetch?: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
60
+
61
+ /**
62
+ * If the length of a GET request's URL exceeds `maxUrlLength` the request will use POST instead.
63
+ */
64
+ maxUrlLength?: number;
65
+ }
66
+
67
+ /**
68
+ * Generic method for making HTTP requests to ArcGIS REST API endpoints.
69
+ *
70
+ * ```js
71
+ * import { request } from '@esri/arcgis-rest-request';
72
+ *
73
+ * request('https://www.arcgis.com/sharing/rest')
74
+ * .then((response) => {
75
+ * console.log(response.currentVersion); // => 5.2
76
+ * });
77
+ * ```
78
+ *
79
+ * ```js
80
+ * import { request, HTTPMethods } from '@esri/arcgis-rest-request';
81
+ *
82
+ * request('https://www.arcgis.com/sharing/rest', {
83
+ * httpMethod: "GET"
84
+ * }).then((response) => {
85
+ * console.log(response.currentVersion); // => 5.2
86
+ * });
87
+ * ```
88
+ *
89
+ * ```js
90
+ * import { request, HTTPMethods } from '@esri/arcgis-rest-request';
91
+ *
92
+ * request('https://www.arcgis.com/sharing/rest/search', {
93
+ * params: { q: 'parks' }
94
+ * }).then((response) => {
95
+ * console.log(response.total); // => 78379
96
+ * });
97
+ * ```
98
+ *
99
+ * @param url - The URL of the ArcGIS REST API endpoint.
100
+ * @param requestOptions - Options for the request, including parameters relevant to the endpoint.
101
+ * @returns A Promise that will resolve with the data from the response.
102
+ */
103
+ export function request(
104
+ url: string,
105
+ requestOptions: IRequestOptions = { params: { f: "json" } }
106
+ ): Promise<any> {
107
+ const options: IRequestOptions = {
108
+ httpMethod: "POST",
109
+ ...requestOptions
110
+ };
111
+
112
+ const missingGlobals: string[] = [];
113
+ const recommendedPackages: string[] = [];
114
+
115
+ // don't check for a global fetch if a custom implementation was passed through
116
+ if (!options.fetch && typeof fetch !== "undefined") {
117
+ options.fetch = fetch.bind(Function("return this")());
118
+ } else {
119
+ missingGlobals.push("`fetch`");
120
+ recommendedPackages.push("`isomorphic-fetch`");
121
+ }
122
+
123
+ if (typeof Promise === "undefined") {
124
+ missingGlobals.push("`Promise`");
125
+ recommendedPackages.push("`es6-promise`");
126
+ }
127
+
128
+ if (typeof FormData === "undefined") {
129
+ missingGlobals.push("`FormData`");
130
+ recommendedPackages.push("`isomorphic-form-data`");
131
+ }
132
+
133
+ if (
134
+ !options.fetch ||
135
+ typeof Promise === "undefined" ||
136
+ typeof FormData === "undefined"
137
+ ) {
138
+ throw new Error(
139
+ `\`arcgis-rest-request\` requires global variables for \`fetch\`, \`Promise\` and \`FormData\` to be present in the global scope. You are missing ${missingGlobals.join(
140
+ ", "
141
+ )}. We recommend installing the ${recommendedPackages.join(
142
+ ", "
143
+ )} modules at the root of your application to add these to the global scope. See https://bit.ly/2KNwWaJ for more info.`
144
+ );
145
+ }
146
+
147
+ const { httpMethod, authentication } = options;
148
+
149
+ const params: IParams = {
150
+ ...{ f: "json" },
151
+ ...requestOptions.params
152
+ };
153
+
154
+ const fetchOptions: RequestInit = {
155
+ method: httpMethod,
156
+ // ensures behavior mimics XMLHttpRequest. needed to support sending IWA cookies
157
+ credentials: "same-origin"
158
+ };
159
+
160
+ return (authentication
161
+ ? authentication.getToken(url, {
162
+ fetch: options.fetch
163
+ })
164
+ : Promise.resolve("")
165
+ )
166
+ .then(token => {
167
+ if (token.length) {
168
+ params.token = token;
169
+ }
170
+
171
+ if (fetchOptions.method === "GET") {
172
+ // encode the parameters into the query string
173
+ const queryParams = encodeQueryString(params);
174
+ // dont append a '?' unless parameters are actually present
175
+ const urlWithQueryString =
176
+ queryParams === "" ? url : url + "?" + encodeQueryString(params);
177
+
178
+ if (
179
+ options.maxUrlLength &&
180
+ urlWithQueryString.length > options.maxUrlLength
181
+ ) {
182
+ // the consumer specified a maximum length for URLs
183
+ // and this would exceed it, so use post instead
184
+ fetchOptions.method = "POST";
185
+ } else {
186
+ // just use GET
187
+ url = urlWithQueryString;
188
+ }
189
+ }
190
+
191
+ if (fetchOptions.method === "POST") {
192
+ fetchOptions.body = encodeFormData(params);
193
+ }
194
+
195
+ fetchOptions.headers = {};
196
+
197
+ /* istanbul ignore next - karma reports coverage on browser tests only */
198
+ if (typeof window === "undefined") {
199
+ fetchOptions.headers["referer"] = "@esri/arcgis-rest";
200
+ }
201
+
202
+ /* istanbul ignore else blob responses are difficult to make cross platform we will just have to trust the isomorphic fetch will do its job */
203
+ if (!requiresFormData(params)) {
204
+ fetchOptions.headers["Content-Type"] =
205
+ "application/x-www-form-urlencoded";
206
+ }
207
+
208
+ return options.fetch(url, fetchOptions);
209
+ })
210
+ .then(response => {
211
+ if (!response.ok) {
212
+ // server responded w/ an actual error (404, 500, etc)
213
+ const { status, statusText } = response;
214
+ throw new ArcGISRequestError(
215
+ statusText,
216
+ `HTTP ${status}`,
217
+ response,
218
+ url,
219
+ options
220
+ );
221
+ }
222
+ switch (params.f) {
223
+ case "json":
224
+ return response.json();
225
+ case "geojson":
226
+ return response.json();
227
+ case "html":
228
+ return response.text();
229
+ case "text":
230
+ return response.text();
231
+ /* istanbul ignore next blob responses are difficult to make cross platform we will just have to trust that isomorphic fetch will do its job */
232
+ case "image":
233
+ return response.blob();
234
+ /* istanbul ignore next */
235
+ case "zip":
236
+ return response.blob();
237
+ /* istanbul ignore next */
238
+ default:
239
+ // hopefully we never need to handle JSON payloads when no f= parameter is set
240
+ return response.blob();
241
+ }
242
+ })
243
+ .then(data => {
244
+ if (params.f === "json" || params.f === "geojson") {
245
+ return checkForErrors(data, url, params, options);
246
+ } else {
247
+ return data;
248
+ }
249
+ });
250
+ }
251
+
252
+ export class ArcGISAuthError extends ArcGISRequestError {
253
+ /**
254
+ * Create a new `ArcGISAuthError` object.
255
+ *
256
+ * @param message - The error message from the API
257
+ * @param code - The error code from the API
258
+ * @param response - The original response from the API that caused the error
259
+ * @param url - The original url of the request
260
+ * @param options - The original options of the request
261
+ */
262
+ constructor(
263
+ message = "AUTHENTICATION_ERROR",
264
+ code: string | number = "AUTHENTICATION_ERROR_CODE",
265
+ response?: any,
266
+ url?: string,
267
+ options?: IRequestOptions
268
+ ) {
269
+ super(message, code, response, url, options);
270
+ this.name = "ArcGISAuthError";
271
+ this.message =
272
+ code === "AUTHENTICATION_ERROR_CODE" ? message : `${code}: ${message}`;
273
+ }
274
+
275
+ retry(getSession: IRetryAuthError, retryLimit = 3) {
276
+ let tries = 0;
277
+
278
+ const retryRequest = (resolve: any, reject: any) => {
279
+ getSession(this.url, this.options)
280
+ .then(session => {
281
+ const newOptions = {
282
+ ...this.options,
283
+ ...{ authentication: session }
284
+ };
285
+
286
+ tries = tries + 1;
287
+ return request(this.url, newOptions);
288
+ })
289
+ .then(response => {
290
+ resolve(response);
291
+ })
292
+ .catch(e => {
293
+ if (e.name === "ArcGISAuthError" && tries < retryLimit) {
294
+ retryRequest(resolve, reject);
295
+ } else if (e.name === "ArcGISAuthError" && tries >= retryLimit) {
296
+ reject(this);
297
+ } else {
298
+ reject(e);
299
+ }
300
+ });
301
+ };
302
+
303
+ return new Promise((resolve, reject) => {
304
+ retryRequest(resolve, reject);
305
+ });
306
+ }
307
+ }
308
+
309
+ /**
310
+ * Checks for errors in a JSON response from the ArcGIS REST API. If there are no errors, it will return the `data` passed in. If there is an error, it will throw an `ArcGISRequestError` or `ArcGISAuthError`.
311
+ *
312
+ * @param data The response JSON to check for errors.
313
+ * @param url The url of the original request
314
+ * @param params The parameters of the original request
315
+ * @param options The options of the original request
316
+ * @returns The data that was passed in the `data` parameter
317
+ */
318
+ export function checkForErrors(
319
+ response: any,
320
+ url?: string,
321
+ params?: IParams,
322
+ options?: IRequestOptions
323
+ ): any {
324
+ // this is an error message from billing.arcgis.com backend
325
+ if (response.code >= 400) {
326
+ const { message, code } = response;
327
+ throw new ArcGISRequestError(message, code, response, url, options);
328
+ }
329
+
330
+ // error from ArcGIS Online or an ArcGIS Portal or server instance.
331
+ if (response.error) {
332
+ const { message, code, messageCode } = response.error;
333
+ const errorCode = messageCode || code || "UNKNOWN_ERROR_CODE";
334
+
335
+ if (code === 498 || code === 499 || messageCode === "GWM_0003") {
336
+ throw new ArcGISAuthError(message, errorCode, response, url, options);
337
+ }
338
+
339
+ throw new ArcGISRequestError(message, errorCode, response, url, options);
340
+ }
341
+
342
+ // error from a status check
343
+ if (response.status === "failed" || response.status === "failure") {
344
+ let message: string;
345
+ let code: string = "UNKNOWN_ERROR_CODE";
346
+
347
+ try {
348
+ message = JSON.parse(response.statusMessage).message;
349
+ code = JSON.parse(response.statusMessage).code;
350
+ } catch (e) {
351
+ message = response.statusMessage || response.message;
352
+ }
353
+
354
+ throw new ArcGISRequestError(message, code, response, url, options);
355
+ }
356
+
357
+ return response;
358
+ }
@@ -0,0 +1,76 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { IRequestOptions } from "../request";
5
+
6
+ // TypeScript 2.1 no longer allows you to extend built in types. See https://github.com/Microsoft/TypeScript/issues/12790#issuecomment-265981442
7
+ // and https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
8
+ //
9
+ // This code is from MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types.
10
+ export class ArcGISRequestError {
11
+ /**
12
+ * The name of this error. Will always be `"ArcGISRequestError"` to conform with the [`Error`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) class.
13
+ */
14
+ name: string;
15
+
16
+ /**
17
+ * Formatted error message. See the [`Error`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) class for more details.
18
+ */
19
+ message: string;
20
+
21
+ /**
22
+ * The errror message return from the request.
23
+ */
24
+ originalMessage: string;
25
+
26
+ /**
27
+ * The error code returned from the request.
28
+ */
29
+ code: string | number;
30
+
31
+ /**
32
+ * The original JSON response the caused the error.
33
+ */
34
+ response: any;
35
+
36
+ /**
37
+ * The URL of the original request that caused the error
38
+ */
39
+ url: string;
40
+
41
+ /**
42
+ * The options of the original request that caused the error
43
+ */
44
+ options: IRequestOptions;
45
+
46
+ /**
47
+ * Create a new `ArcGISRequestError` object.
48
+ *
49
+ * @param message - The error message from the API
50
+ * @param code - The error code from the API
51
+ * @param response - The original response from the API that caused the error
52
+ * @param url - The original url of the request
53
+ * @param options - The original options and parameters of the request
54
+ */
55
+ constructor(
56
+ message?: string,
57
+ code?: string | number,
58
+ response?: any,
59
+ url?: string,
60
+ options?: IRequestOptions
61
+ ) {
62
+ message = message || "UNKNOWN_ERROR";
63
+ code = code || "UNKNOWN_ERROR_CODE";
64
+
65
+ this.name = "ArcGISRequestError";
66
+ this.message =
67
+ code === "UNKNOWN_ERROR_CODE" ? message : `${code}: ${message}`;
68
+ this.originalMessage = message;
69
+ this.code = code;
70
+ this.response = response;
71
+ this.url = url;
72
+ this.options = options;
73
+ }
74
+ }
75
+ ArcGISRequestError.prototype = Object.create(Error.prototype);
76
+ ArcGISRequestError.prototype.constructor = ArcGISRequestError;
@@ -0,0 +1,29 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ /**
5
+ * Enum describing the different errors that might be thrown by a request.
6
+ *
7
+ * ```ts
8
+ * import { request, ErrorTypes } from '@esri/arcgis-rest-request';
9
+ *
10
+ * request("...").catch((e) => {
11
+ * switch(e.name) {
12
+ * case ErrorType.ArcGISRequestError:
13
+ * // handle a general error from the API
14
+ * break;
15
+ *
16
+ * case ErrorType.ArcGISAuthError:
17
+ * // handle an authentication error
18
+ * break;
19
+ *
20
+ * default:
21
+ * // handle some other error (usually a network error)
22
+ * }
23
+ * });
24
+ * ```
25
+ */
26
+ export enum ErrorTypes {
27
+ ArcGISRequestError = "ArcGISRequestError",
28
+ ArcGISAuthError = "ArcGISAuthError"
29
+ }
@@ -0,0 +1,29 @@
1
+ /* Copyright (c) 2017-2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { IRequestOptions } from "../request";
5
+
6
+ /**
7
+ * Helper for methods with lots of first order request options to pass them through as request parameters.
8
+ */
9
+ export function appendCustomParams(
10
+ oldOptions: IRequestOptions,
11
+ newOptions: IRequestOptions
12
+ ) {
13
+ // only pass query parameters through in the request, not generic IRequestOptions props
14
+ Object.keys(oldOptions).forEach(function(key: string) {
15
+ if (
16
+ key !== "url" &&
17
+ key !== "params" &&
18
+ key !== "authentication" &&
19
+ key !== "httpMethod" &&
20
+ key !== "fetch" &&
21
+ key !== "portal" &&
22
+ key !== "maxUrlLength" &&
23
+ key !== "endpoint" &&
24
+ key !== "decodeValues"
25
+ ) {
26
+ newOptions.params[key] = (oldOptions as { [key: string]: any })[key];
27
+ }
28
+ });
29
+ }
@@ -0,0 +1,34 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { processParams, requiresFormData } from "./process-params";
5
+ import { encodeQueryString } from "./encode-query-string";
6
+ /**
7
+ * Encodes parameters in a [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) object in browsers or in a [FormData](https://github.com/form-data/form-data) in Node.js
8
+ *
9
+ * @param params An object to be encoded.
10
+ * @returns The complete [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) object.
11
+ */
12
+ export function encodeFormData(params: any): FormData | string {
13
+ const useFormData = requiresFormData(params);
14
+ const newParams = processParams(params);
15
+ if (useFormData) {
16
+ const formData = new FormData();
17
+ Object.keys(newParams).forEach((key: any) => {
18
+ if (typeof Blob !== "undefined" && newParams[key] instanceof Blob) {
19
+ /* To name the Blob:
20
+ 1. look to an alternate request parameter called 'fileName'
21
+ 2. see if 'name' has been tacked onto the Blob manually
22
+ 3. if all else fails, use the request parameter
23
+ */
24
+ const filename = newParams["fileName"] || newParams[key].name || key;
25
+ formData.append(key, newParams[key], filename);
26
+ } else {
27
+ formData.append(key, newParams[key]);
28
+ }
29
+ });
30
+ return formData;
31
+ } else {
32
+ return encodeQueryString(params);
33
+ }
34
+ }
@@ -0,0 +1,23 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { processParams } from "./process-params";
5
+
6
+ export function encodeParam(key: string, value: any) {
7
+ return encodeURIComponent(key) + "=" + encodeURIComponent(value);
8
+ }
9
+
10
+ /**
11
+ * Encodes the passed object as a query string.
12
+ *
13
+ * @param params An object to be encoded.
14
+ * @returns An encoded query string.
15
+ */
16
+ export function encodeQueryString(params: any): string {
17
+ const newParams = processParams(params);
18
+ return Object.keys(newParams)
19
+ .map((key: any) => {
20
+ return encodeParam(key, newParams[key]);
21
+ })
22
+ .join("&");
23
+ }
@@ -0,0 +1,25 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+ import { IRequestOptions } from "../request";
4
+
5
+ /**
6
+ * Helper that returns the appropriate portal url for a given request. `requestOptions.portal` is given
7
+ * precedence over `authentication.portal`. If neither are present, `www.arcgis.com/sharing/rest` is returned.
8
+ *
9
+ * @param requestOptions - Request options that may have authentication manager
10
+ * @returns Portal url to be used in API requests
11
+ */
12
+ export function getPortalUrl(requestOptions: IRequestOptions = {}): string {
13
+ // use portal in options if specified
14
+ if (requestOptions.portal) {
15
+ return requestOptions.portal;
16
+ }
17
+
18
+ // if auth was passed, use that portal
19
+ if (requestOptions.authentication) {
20
+ return requestOptions.authentication.portal;
21
+ }
22
+
23
+ // default to arcgis.com
24
+ return "https://www.arcgis.com/sharing/rest";
25
+ }
@@ -0,0 +1,45 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { request, IRequestOptions } from "../request";
5
+
6
+ import { getPortalUrl } from "./get-portal-url";
7
+
8
+ export interface IPortal {
9
+ id: string;
10
+ isPortal: boolean;
11
+ name: string;
12
+ [key: string]: any;
13
+ }
14
+
15
+ /**
16
+ * Get the portal
17
+ * @param requestOptions
18
+ */
19
+ export function getSelf(requestOptions?: IRequestOptions): Promise<IPortal> {
20
+ // just delegate to getPortal w/o an id
21
+ return getPortal(null, requestOptions);
22
+ }
23
+
24
+ /**
25
+ * Get a portal by id. If no id is passed, it will call portals/self
26
+ * @param id
27
+ * @param requestOptions
28
+ */
29
+ export function getPortal(
30
+ id?: string,
31
+ requestOptions?: IRequestOptions
32
+ ): Promise<IPortal> {
33
+ // construct the search url
34
+ const idOrSelf = id ? id : "self";
35
+ const url = `${getPortalUrl(requestOptions)}/portals/${idOrSelf}`;
36
+
37
+ // default to a GET request
38
+ const options: IRequestOptions = {
39
+ ...{ httpMethod: "GET" },
40
+ ...requestOptions
41
+ };
42
+
43
+ // send the request
44
+ return request(url, options);
45
+ }
@@ -0,0 +1,52 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ /**
5
+ * HTTP methods used by the ArcGIS REST API.
6
+ */
7
+ export type HTTPMethods = "GET" | "POST";
8
+
9
+ /**
10
+ * Valid response formats for the `f` parameter.
11
+ */
12
+ export type ResponseFormats =
13
+ | "json"
14
+ | "geojson"
15
+ | "text"
16
+ | "html"
17
+ | "image"
18
+ | "zip";
19
+
20
+ export type GrantTypes =
21
+ | "authorization_code"
22
+ | "refresh_token"
23
+ | "client_credentials"
24
+ | "exchange_refresh_token";
25
+
26
+ export interface IParams {
27
+ f?: ResponseFormats;
28
+ [key: string]: any;
29
+ }
30
+
31
+ export interface IGenerateTokenParams extends IParams {
32
+ username?: string;
33
+ password?: string;
34
+ expiration?: number;
35
+ token?: string;
36
+ serverUrl?: string;
37
+ }
38
+
39
+ export interface IFetchTokenParams extends IParams {
40
+ client_id: string;
41
+ client_secret?: string;
42
+ grant_type: GrantTypes;
43
+ redirect_uri?: string;
44
+ refresh_token?: string;
45
+ code?: string;
46
+ }
47
+
48
+ export interface ITokenRequestOptions {
49
+ params?: IGenerateTokenParams | IFetchTokenParams;
50
+ httpMethod?: HTTPMethods;
51
+ fetch?: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
52
+ }