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,112 @@
1
+ import { encodeFormData } from "../../src/utils/encode-form-data";
2
+ import {
3
+ requiresFormData,
4
+ processParams
5
+ } from "../../src/utils/process-params";
6
+ import { attachmentFile } from "../../../arcgis-rest-feature-service/test/attachments.test";
7
+
8
+ describe("encodeFormData", () => {
9
+ it("should encode in form data for multipart requests", () => {
10
+ const binaryObj =
11
+ typeof File !== "undefined"
12
+ ? new File(["foo"], "foo.txt", {
13
+ type: "text/plain"
14
+ })
15
+ : new Buffer("");
16
+
17
+ const formData = encodeFormData({ binary: binaryObj });
18
+
19
+ expect(formData instanceof FormData).toBeTruthy();
20
+ });
21
+
22
+ it("should encode as query string for basic types", () => {
23
+ const dateValue = 1471417200000;
24
+
25
+ // null, undefined, function are excluded. If you want to send an empty key you need to send an empty string "".
26
+ // See https://github.com/Esri/arcgis-rest-js/issues/18
27
+ const params = {
28
+ myArray1: new Array(8),
29
+ myArray2: [1, 2, 4, 16],
30
+ myArray3: [{ a: 1, b: 2 }, { c: "abc" }],
31
+ myDate: new Date(dateValue),
32
+ myFunction: () => {
33
+ return 3.1415;
34
+ },
35
+ myBoolean: true,
36
+ myString: "Hello, world!",
37
+ myEmptyString: "",
38
+ myNumber: 380
39
+ };
40
+
41
+ expect(requiresFormData(params)).toBeFalsy();
42
+
43
+ const formData = processParams(params);
44
+ expect(typeof formData).toBe("object");
45
+ expect(formData.myArray1).toBe(",,,,,,,");
46
+ expect(formData.myArray2).toBe("1,2,4,16");
47
+ expect(formData.myArray3).toBe('[{"a":1,"b":2},{"c":"abc"}]');
48
+ expect(formData.myDate).toBe(dateValue);
49
+ expect(formData.myBoolean).toBeTruthy();
50
+ expect(formData.myString).toBe("Hello, world!");
51
+ expect(formData.myEmptyString).toBe("");
52
+ expect(formData.myNumber).toBe(380);
53
+
54
+ const encodedFormData = encodeFormData(params);
55
+ expect(typeof encodedFormData).toBe("string");
56
+ expect(encodedFormData).toBe(
57
+ "myArray1=%2C%2C%2C%2C%2C%2C%2C&" +
58
+ "myArray2=1%2C2%2C4%2C16&" +
59
+ "myArray3=%5B%7B%22a%22%3A1%2C%22b%22%3A2%7D%2C%7B%22c%22%3A%22abc%22%7D%5D&" +
60
+ "myDate=1471417200000&" +
61
+ "myBoolean=true&" +
62
+ "myString=Hello%2C%20world!&" +
63
+ "myEmptyString=&" +
64
+ "myNumber=380"
65
+ );
66
+ });
67
+
68
+ it("should switch to form data if any item is not a basic type", () => {
69
+ const dateValue = 1471417200000;
70
+ const file = attachmentFile();
71
+ if (!file.name) {
72
+ // The file's name is used for adding files to a form, so supply a name when we're in a testing
73
+ // environment that doesn't support File (attachmentFile creates a File with the name "foo.txt"
74
+ // if File is supported and a file stream otherwise)
75
+ file.name = "foo.txt";
76
+ }
77
+
78
+ // null, undefined, function are excluded. If you want to send an empty key you need to send an empty string "".
79
+ // See https://github.com/Esri/arcgis-rest-js/issues/18
80
+ const params = {
81
+ myArray1: new Array(8),
82
+ myArray2: [1, 2, 4, 16],
83
+ myArray3: [{ a: 1, b: 2 }, { c: "abc" }],
84
+ myDate: new Date(dateValue),
85
+ myFunction: () => {
86
+ return 3.1415;
87
+ },
88
+ myBoolean: true,
89
+ myString: "Hello, world!",
90
+ myEmptyString: "",
91
+ myNumber: 380,
92
+ file
93
+ };
94
+
95
+ expect(requiresFormData(params)).toBeTruthy();
96
+
97
+ const formData = processParams(params);
98
+ expect(typeof formData).toBe("object");
99
+ expect(formData.myArray1).toBe(",,,,,,,");
100
+ expect(formData.myArray2).toBe("1,2,4,16");
101
+ expect(formData.myArray3).toBe('[{"a":1,"b":2},{"c":"abc"}]');
102
+ expect(formData.myDate).toBe(dateValue);
103
+ expect(formData.myBoolean).toBeTruthy();
104
+ expect(formData.myString).toBe("Hello, world!");
105
+ expect(formData.myEmptyString).toBe("");
106
+ expect(formData.myNumber).toBe(380);
107
+ expect(typeof formData.file).toBe("object");
108
+
109
+ const encodedFormData = encodeFormData(params);
110
+ expect(encodedFormData instanceof FormData).toBeTruthy();
111
+ });
112
+ });
@@ -0,0 +1,34 @@
1
+ import { getPortalUrl } from "../../src/index";
2
+
3
+ describe("getPortalUrl", () => {
4
+ it("should default to arcgis.com", () => {
5
+ const url = getPortalUrl();
6
+ expect(url).toEqual("https://www.arcgis.com/sharing/rest");
7
+ });
8
+ it("should use the portal from authorization if passed", () => {
9
+ const requestOptions = {
10
+ authentication: {
11
+ portal: "https://foo.com/arcgis/sharing/rest",
12
+ getToken() {
13
+ return Promise.resolve("fake");
14
+ }
15
+ }
16
+ };
17
+ const url = getPortalUrl(requestOptions);
18
+ expect(url).toEqual("https://foo.com/arcgis/sharing/rest");
19
+ });
20
+
21
+ it("should use the portal in the requestOptions if passed", () => {
22
+ const requestOptions = {
23
+ authentication: {
24
+ portal: "https://foo.com/arcgis/sharing/rest",
25
+ getToken() {
26
+ return Promise.resolve("fake");
27
+ }
28
+ },
29
+ portal: "https://bar.com/arcgis/sharing/rest"
30
+ };
31
+ const url = getPortalUrl(requestOptions);
32
+ expect(url).toEqual("https://bar.com/arcgis/sharing/rest");
33
+ });
34
+ });
@@ -0,0 +1,94 @@
1
+ import { getSelf, getPortal } from "../../src/index";
2
+
3
+ import { PortalResponse } from "./../mocks/portal";
4
+
5
+ import * as fetchMock from "fetch-mock";
6
+
7
+ describe("portal", () => {
8
+ let paramsSpy: jasmine.Spy;
9
+
10
+ beforeEach(() => {
11
+ paramsSpy = spyOn(FormData.prototype, "append").and.callThrough();
12
+ });
13
+
14
+ afterAll(() => {
15
+ paramsSpy.calls.reset();
16
+ });
17
+
18
+ afterEach(fetchMock.restore);
19
+
20
+ describe("getPortal", () => {
21
+ // setup an authmgr to use in all these tests
22
+ const MOCK_AUTH = {
23
+ getToken() {
24
+ return Promise.resolve("fake-token");
25
+ },
26
+ portal: "https://myorg.maps.arcgis.com/sharing/rest"
27
+ };
28
+ const MOCK_REQOPTS = {
29
+ authentication: MOCK_AUTH
30
+ };
31
+
32
+ it("should get the portal by id", done => {
33
+ fetchMock.once("*", PortalResponse);
34
+ getPortal("5BZFaKe", MOCK_REQOPTS)
35
+ .then(response => {
36
+ expect(fetchMock.called()).toEqual(true);
37
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
38
+ expect(url).toEqual(
39
+ "https://myorg.maps.arcgis.com/sharing/rest/portals/5BZFaKe?f=json&token=fake-token"
40
+ );
41
+ expect(options.method).toBe("GET");
42
+ done();
43
+ })
44
+ .catch(e => {
45
+ fail(e);
46
+ });
47
+ });
48
+ it("should get the portal self if no id", done => {
49
+ fetchMock.once("*", PortalResponse);
50
+ getPortal(null, MOCK_REQOPTS)
51
+ .then(response => {
52
+ expect(fetchMock.called()).toEqual(true);
53
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
54
+ expect(url).toEqual(
55
+ "https://myorg.maps.arcgis.com/sharing/rest/portals/self?f=json&token=fake-token"
56
+ );
57
+ expect(options.method).toBe("GET");
58
+ done();
59
+ })
60
+ .catch(e => {
61
+ fail(e);
62
+ });
63
+ });
64
+ });
65
+ describe("getSelf", () => {
66
+ // setup an authmgr to use in all these tests
67
+ const MOCK_AUTH = {
68
+ getToken() {
69
+ return Promise.resolve("fake-token");
70
+ },
71
+ portal: "https://myorg.maps.arcgis.com/sharing/rest"
72
+ };
73
+ const MOCK_REQOPTS = {
74
+ authentication: MOCK_AUTH
75
+ };
76
+
77
+ it("should get the portal by id", done => {
78
+ fetchMock.once("*", PortalResponse);
79
+ getSelf(MOCK_REQOPTS)
80
+ .then(response => {
81
+ expect(fetchMock.called()).toEqual(true);
82
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
83
+ expect(url).toEqual(
84
+ "https://myorg.maps.arcgis.com/sharing/rest/portals/self?f=json&token=fake-token"
85
+ );
86
+ expect(options.method).toBe("GET");
87
+ done();
88
+ })
89
+ .catch(e => {
90
+ fail(e);
91
+ });
92
+ });
93
+ });
94
+ });
@@ -0,0 +1,190 @@
1
+ import { processParams, requiresFormData } from "../../src/index";
2
+
3
+ describe("processParams", () => {
4
+ it("should pass non Date, Function, Array and Object params through", () => {
5
+ const params = {
6
+ foo: "foo",
7
+ bar: 1
8
+ };
9
+
10
+ const expected = {
11
+ foo: "foo",
12
+ bar: 1
13
+ };
14
+ expect(processParams(params)).toEqual(expected);
15
+ });
16
+
17
+ it("should encode Dates as timestamps", () => {
18
+ const date = new Date();
19
+
20
+ const params = {
21
+ foo: date
22
+ };
23
+
24
+ const expected = {
25
+ foo: date.getTime()
26
+ };
27
+ expect(processParams(params)).toEqual(expected);
28
+ });
29
+
30
+ it("should not encode a function", () => {
31
+ const params = {
32
+ foo() {} // tslint:disable-line no-empty
33
+ };
34
+
35
+ expect(processParams(params)).toEqual({});
36
+ });
37
+
38
+ it("should stringify objects", () => {
39
+ const params = {
40
+ foo: {
41
+ bar: "bar"
42
+ }
43
+ };
44
+
45
+ const expected = {
46
+ foo: '{"bar":"bar"}'
47
+ };
48
+
49
+ expect(processParams(params)).toEqual(expected);
50
+ });
51
+
52
+ it("should stringify arrays of objects", () => {
53
+ const params = {
54
+ foo: [
55
+ {
56
+ bar: "bar"
57
+ }
58
+ ]
59
+ };
60
+
61
+ const expected = {
62
+ foo: '[{"bar":"bar"}]'
63
+ };
64
+
65
+ expect(processParams(params)).toEqual(expected);
66
+ });
67
+
68
+ it("should comma seperate arrays of non objects", () => {
69
+ const params = {
70
+ foo: ["bar", "baz"]
71
+ };
72
+
73
+ const expected = {
74
+ foo: "bar,baz"
75
+ };
76
+
77
+ expect(processParams(params)).toEqual(expected);
78
+ });
79
+
80
+ it("should stringify booleans", () => {
81
+ const params = {
82
+ foo: true,
83
+ bar: false
84
+ };
85
+
86
+ const expected = {
87
+ foo: "true",
88
+ bar: "false"
89
+ };
90
+
91
+ expect(processParams(params)).toEqual(expected);
92
+ });
93
+
94
+ it("should exclude null and undefined, but not a zero", () => {
95
+ const params: any = {
96
+ foo: null,
97
+ bar: undefined,
98
+ baz: 0
99
+ };
100
+
101
+ const expected = {
102
+ baz: 0
103
+ };
104
+
105
+ expect(processParams(params)).toEqual(expected);
106
+ });
107
+
108
+ it("should not require form data for simple requests", () => {
109
+ expect(
110
+ requiresFormData({
111
+ string: "string"
112
+ })
113
+ ).toBeFalsy();
114
+
115
+ expect(
116
+ requiresFormData({
117
+ number: 123
118
+ })
119
+ ).toBeFalsy();
120
+
121
+ expect(
122
+ requiresFormData({
123
+ date: new Date()
124
+ })
125
+ ).toBeFalsy();
126
+
127
+ expect(
128
+ requiresFormData({
129
+ boolean: true
130
+ })
131
+ ).toBeFalsy();
132
+
133
+ expect(
134
+ requiresFormData({
135
+ array: []
136
+ })
137
+ ).toBeFalsy();
138
+
139
+ expect(
140
+ requiresFormData({
141
+ object: {}
142
+ })
143
+ ).toBeFalsy();
144
+
145
+ expect(
146
+ requiresFormData({
147
+ fn: () => {
148
+ return;
149
+ }
150
+ })
151
+ ).toBeFalsy();
152
+
153
+ expect(
154
+ requiresFormData({
155
+ falsy: null
156
+ })
157
+ ).toBeFalsy();
158
+ });
159
+
160
+ it("should require form data for multipart requests", () => {
161
+ const binaryObj =
162
+ typeof File !== "undefined"
163
+ ? new File(["foo"], "foo.txt", {
164
+ type: "text/plain"
165
+ })
166
+ : new Buffer("");
167
+
168
+ expect(
169
+ requiresFormData({
170
+ binary: binaryObj
171
+ })
172
+ ).toBeTruthy();
173
+ });
174
+
175
+ it("should require form data for mixed multipart requests", () => {
176
+ const binaryObj =
177
+ typeof File !== "undefined"
178
+ ? new File(["foo"], "foo.txt", {
179
+ type: "text/plain"
180
+ })
181
+ : new Buffer("");
182
+
183
+ expect(
184
+ requiresFormData({
185
+ string: "string",
186
+ binary: binaryObj
187
+ })
188
+ ).toBeTruthy();
189
+ });
190
+ });
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "include": [
4
+ "src/**/*.ts"
5
+ ]
6
+ }
@@ -0,0 +1,67 @@
1
+ [![npm version][npm-img]][npm-url]
2
+ [![build status][travis-img]][travis-url]
3
+ [![apache licensed](https://img.shields.io/badge/license-Apache-green.svg?style=flat-square)](https://raw.githubusercontent.com/Esri/arcgis-rest-js/master/LICENSE)
4
+
5
+ [npm-img]: https://img.shields.io/npm/v/@esri/arcgis-rest-sharing.svg?style=flat-square
6
+ [npm-url]: https://www.npmjs.com/package/@esri/arcgis-rest-sharing
7
+ [travis-img]: https://img.shields.io/travis/Esri/arcgis-rest-js/master.svg?style=flat-square
8
+ [travis-url]: https://travis-ci.org/Esri/arcgis-rest-js
9
+
10
+ # @esri/arcgis-rest-sharing
11
+
12
+ > Helper utilities for managing access to ArcGIS content in Node.js and modern browsers.
13
+
14
+ ### Example
15
+
16
+ ```bash
17
+ npm install @esri/arcgis-rest-request
18
+ npm install @esri/arcgis-rest-sharing
19
+ ```
20
+
21
+ ```js
22
+ import { setItemAccess } from '@esri/arcgis-rest-sharing';
23
+
24
+ const itemId = "abc123";
25
+
26
+ setItemAccess({
27
+ id: itemId,
28
+ access: "public",
29
+ authentication: session
30
+ })
31
+ ```
32
+
33
+ ### [API Reference](https://esri.github.io/arcgis-rest-js/api/sharing/)
34
+
35
+ ### Issues
36
+
37
+ If something isn't working the way you expected, please take a look at [previously logged issues](https://github.com/Esri/arcgis-rest-js/issues) first. Have you found a new bug? Want to request a new feature? We'd [**love**](https://github.com/Esri/arcgis-rest-js/issues/new) to hear from you.
38
+
39
+ If you're looking for help you can also post issues on [GIS Stackexchange](http://gis.stackexchange.com/questions/ask?tags=esri-oss).
40
+
41
+ ### Versioning
42
+
43
+ For transparency into the release cycle and in striving to maintain backward compatibility, @esri/arcgis-rest-js is maintained under Semantic Versioning guidelines and will adhere to these rules whenever possible.
44
+
45
+ For more information on SemVer, please visit <http://semver.org/>.
46
+
47
+ ### Contributing
48
+
49
+ Esri welcomes contributions from anyone and everyone. Please see our [guidelines for contributing](CONTRIBUTING.md).
50
+
51
+ ### License
52
+
53
+ Copyright &copy; 2018 Esri
54
+
55
+ Licensed under the Apache License, Version 2.0 (the "License");
56
+ you may not use this file except in compliance with the License.
57
+ You may obtain a copy of the License at
58
+
59
+ > http://www.apache.org/licenses/LICENSE-2.0
60
+
61
+ Unless required by applicable law or agreed to in writing, software
62
+ distributed under the License is distributed on an "AS IS" BASIS,
63
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
64
+ See the License for the specific language governing permissions and
65
+ limitations under the License.
66
+
67
+ A copy of the license is available in the repository's [LICENSE](../../LICENSE) file.
@@ -0,0 +1,11 @@
1
+ {
2
+ "requires": true,
3
+ "lockfileVersion": 1,
4
+ "dependencies": {
5
+ "tslib": {
6
+ "version": "1.9.1",
7
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.1.tgz",
8
+ "integrity": "sha512-avfPS28HmGLLc2o4elcc2EIq2FcH++Yo5YxpBZi9Yw93BCTGFthI4HPE4Rpep6vSYQaK8e69PelM44tPj+RaQg=="
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@esri/arcgis-rest-sharing",
3
+ "version": "1.6.0",
4
+ "description": "Helper utilities for managing access to ArcGIS content in Node.js and modern browsers.",
5
+ "main": "dist/node/index.js",
6
+ "browser": "dist/umd/sharing.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
+ "dependencies": {
12
+ "tslib": "^1.7.1"
13
+ },
14
+ "peerDependencies": {
15
+ "@esri/arcgis-rest-auth": "^1.5.1",
16
+ "@esri/arcgis-rest-common-types": "^1.5.1",
17
+ "@esri/arcgis-rest-request": "^1.5.1"
18
+ },
19
+ "devDependencies": {
20
+ "@esri/arcgis-rest-auth": "^1.6.0",
21
+ "@esri/arcgis-rest-common-types": "^1.6.0",
22
+ "@esri/arcgis-rest-request": "^1.6.0"
23
+ },
24
+ "files": [
25
+ "dist/**"
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 --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 --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": "John Gravois",
44
+ "email": "john@esri.com"
45
+ },
46
+ {
47
+ "name": "Tom Wayson",
48
+ "email": "tom@tomwayson.com"
49
+ }
50
+ ],
51
+ "bugs": {
52
+ "url": "https://github.com/Esri/arcgis-rest-js/issues"
53
+ },
54
+ "homepage": "https://github.com/Esri/arcgis-rest-js#readme"
55
+ }
@@ -0,0 +1,91 @@
1
+ /* Copyright (c) 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 { UserSession } from "@esri/arcgis-rest-auth";
11
+
12
+ import {
13
+ ISharingRequestOptions,
14
+ ISharingResponse,
15
+ isItemOwner,
16
+ getSharingUrl,
17
+ isOrgAdmin
18
+ } from "./helpers";
19
+
20
+ export interface ISetAccessRequestOptions extends ISharingRequestOptions {
21
+ /**
22
+ * "private" indicates that the item can only be accessed by the user. "public" means accessible to anyone. An item shared to the organization has an access level of "org".
23
+ */
24
+ access: "private" | "org" | "public";
25
+ }
26
+
27
+ /**
28
+ * Set access level of an item to 'public', 'org', or 'private'.
29
+ *
30
+ * ```js
31
+ * import { setItemAccess } from '@esri/arcgis-rest-sharing';
32
+ *
33
+ * setItemAccess({
34
+ * id: "abc123",
35
+ * access: "public",
36
+ * authentication: session
37
+ * })
38
+ * ```
39
+ *
40
+ * @param requestOptions - Options for the request.
41
+ * @returns A Promise that will resolve with the data from the response.
42
+ */
43
+ export function setItemAccess(
44
+ requestOptions: ISetAccessRequestOptions
45
+ ): Promise<ISharingResponse> {
46
+ const url = getSharingUrl(requestOptions);
47
+
48
+ if (isItemOwner(requestOptions)) {
49
+ // if the user owns the item, proceed
50
+ return updateItemAccess(url, requestOptions);
51
+ } else {
52
+ // otherwise we need to check to see if they are an organization admin
53
+ return isOrgAdmin(requestOptions).then(admin => {
54
+ if (admin) {
55
+ return updateItemAccess(url, requestOptions);
56
+ } else {
57
+ // if neither, updating the sharing isnt possible
58
+ throw Error(
59
+ `This item can not be shared by ${
60
+ requestOptions.authentication.username
61
+ }. They are neither the item owner nor an organization admin.`
62
+ );
63
+ }
64
+ });
65
+ }
66
+ }
67
+
68
+ function updateItemAccess(
69
+ url: string,
70
+ requestOptions: ISetAccessRequestOptions
71
+ ): Promise<any> {
72
+ requestOptions.params = {
73
+ org: false,
74
+ everyone: false,
75
+ ...requestOptions.params
76
+ };
77
+
78
+ // if the user wants to make the item private, it needs to be unshared from any/all groups as well
79
+ if (requestOptions.access === "private") {
80
+ requestOptions.params.groups = " ";
81
+ }
82
+ if (requestOptions.access === "org") {
83
+ requestOptions.params.org = true;
84
+ }
85
+ // if sharing with everyone, share with the entire organization as well.
86
+ if (requestOptions.access === "public") {
87
+ requestOptions.params.org = true;
88
+ requestOptions.params.everyone = true;
89
+ }
90
+ return request(url, requestOptions);
91
+ }