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.
- package/.prettierignore +2 -0
- package/.travis.yml +29 -0
- package/.vscode/launch.json +24 -0
- package/.vscode/settings.json +3 -0
- package/demos/ago-node-cli/README.md +29 -0
- package/demos/ago-node-cli/ago.js +32 -0
- package/demos/ago-node-cli/index.js +11 -0
- package/demos/ago-node-cli/lib/item-export-command.js +48 -0
- package/demos/ago-node-cli/lib/item-search-command.js +35 -0
- package/demos/ago-node-cli/package-lock.json +172 -0
- package/demos/ago-node-cli/package.json +30 -0
- package/demos/attachments/README.md +5 -0
- package/demos/attachments/index.html +164 -0
- package/demos/attachments/package-lock.json +182 -0
- package/demos/attachments/package.json +18 -0
- package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
- package/demos/batch-geocoder-node/README.md +14 -0
- package/demos/batch-geocoder-node/batch-geocode.js +112 -0
- package/demos/batch-geocoder-node/config-template.js +18 -0
- package/demos/batch-geocoder-node/package-lock.json +109 -0
- package/demos/batch-geocoder-node/package.json +37 -0
- package/demos/express/README.md +10 -0
- package/demos/express/config.json.template +3 -0
- package/demos/express/package-lock.json +388 -0
- package/demos/express/package.json +18 -0
- package/demos/express/server.js +28 -0
- package/demos/feature-service-browser/README.md +6 -0
- package/demos/feature-service-browser/index.html +122 -0
- package/demos/feature-service-browser/package-lock.json +182 -0
- package/demos/feature-service-browser/package.json +18 -0
- package/demos/geocoder-browser/README.md +10 -0
- package/demos/geocoder-browser/config.js.template +1 -0
- package/demos/geocoder-browser/index.html +131 -0
- package/demos/geocoder-browser/package-lock.json +163 -0
- package/demos/geocoder-browser/package.json +19 -0
- package/demos/geocoder-browser/post-sign-in.html +25 -0
- package/demos/jsapi-integration/README.md +8 -0
- package/demos/jsapi-integration/config.js +6 -0
- package/demos/jsapi-integration/index.html +79 -0
- package/demos/jsapi-integration/package-lock.json +184 -0
- package/demos/jsapi-integration/package.json +19 -0
- package/demos/oauth2-browser/README.md +12 -0
- package/demos/oauth2-browser/authenticate.html +32 -0
- package/demos/oauth2-browser/config.js.template +6 -0
- package/demos/oauth2-browser/index.html +202 -0
- package/demos/oauth2-browser/logo.svg +4 -0
- package/demos/oauth2-browser/package-lock.json +163 -0
- package/demos/oauth2-browser/package.json +18 -0
- package/demos/oauth2-browser/style.css +36 -0
- package/demos/vue/.babelrc +6 -0
- package/demos/vue/.env.example +8 -0
- package/demos/vue/README.md +17 -0
- package/demos/vue/index.html +21 -0
- package/demos/vue/package-lock.json +7236 -0
- package/demos/vue/package.json +39 -0
- package/demos/vue/src/assets/logo.svg +29 -0
- package/demos/vue/src/components/App.vue +302 -0
- package/demos/vue/src/components/Authenticate.vue +68 -0
- package/demos/vue/src/components/Loader.vue +216 -0
- package/demos/vue/src/main.js +75 -0
- package/demos/vue/webpack.config.js +84 -0
- package/docs/FAQ.md +28 -0
- package/docs/HISTORY.md +62 -0
- package/docs/acetate.config.js +214 -0
- package/docs/build-typedoc.js +301 -0
- package/docs/src/_layout.html +82 -0
- package/docs/src/api/_declaration.html +496 -0
- package/docs/src/api/_layout.html +127 -0
- package/docs/src/api/_package.html +13 -0
- package/docs/src/api/index.html +23 -0
- package/docs/src/guides/_layout.html +24 -0
- package/docs/src/guides/amd-requirejs-dojo.md +40 -0
- package/docs/src/guides/babel-and-rollup.md +30 -0
- package/docs/src/guides/babel-and-webpack.md +30 -0
- package/docs/src/guides/browser-authentication.md +9 -0
- package/docs/src/guides/browserify.md +9 -0
- package/docs/src/guides/cli-authentication.md +9 -0
- package/docs/src/guides/client-server-authentication.md +9 -0
- package/docs/src/guides/from-a-cdn.md +36 -0
- package/docs/src/guides/index.md +52 -0
- package/docs/src/guides/node.md +30 -0
- package/docs/src/guides/package-overview.md +8 -0
- package/docs/src/guides/server-authentication.md +9 -0
- package/docs/src/guides/typescript-and-webpack.md +9 -0
- package/docs/src/img/icons.png +0 -0
- package/docs/src/img/icons@2x.png +0 -0
- package/docs/src/index.html +12 -0
- package/docs/src/js/api-search.js +113 -0
- package/docs/src/js/index.js +1 -0
- package/docs/src/js/nav-toggle.js +41 -0
- package/docs/src/sass/_highlight.scss +96 -0
- package/docs/src/sass/_icons.scss +157 -0
- package/docs/src/sass/style.scss +169 -0
- package/jasmine.json +7 -0
- package/karma.conf.js +100 -0
- package/lerna.json +8 -0
- package/notes/README.md +88 -0
- package/package.json +91 -0
- package/packages/arcgis-rest-auth/README.md +64 -0
- package/packages/arcgis-rest-auth/package-lock.json +11 -0
- package/packages/arcgis-rest-auth/package.json +51 -0
- package/packages/arcgis-rest-auth/src/ApplicationSession.ts +91 -0
- package/packages/arcgis-rest-auth/src/UserSession.ts +829 -0
- package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +21 -0
- package/packages/arcgis-rest-auth/src/fetch-token.ts +55 -0
- package/packages/arcgis-rest-auth/src/generate-token.ts +36 -0
- package/packages/arcgis-rest-auth/src/index.ts +5 -0
- package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +121 -0
- package/packages/arcgis-rest-auth/test/UserSession.test.ts +883 -0
- package/packages/arcgis-rest-auth/test/fetchToken.test.ts +76 -0
- package/packages/arcgis-rest-auth/test/generateToken.test.ts +36 -0
- package/packages/arcgis-rest-auth/test/utils.ts +11 -0
- package/packages/arcgis-rest-auth/tsconfig.json +6 -0
- package/packages/arcgis-rest-common-types/README.md +61 -0
- package/packages/arcgis-rest-common-types/package.json +38 -0
- package/packages/arcgis-rest-common-types/src/group.ts +51 -0
- package/packages/arcgis-rest-common-types/src/index.ts +467 -0
- package/packages/arcgis-rest-common-types/src/item.ts +45 -0
- package/packages/arcgis-rest-common-types/src/webmap.ts +1225 -0
- package/packages/arcgis-rest-common-types/tsconfig.json +11 -0
- package/packages/arcgis-rest-feature-service/README.md +70 -0
- package/packages/arcgis-rest-feature-service/package-lock.json +11 -0
- package/packages/arcgis-rest-feature-service/package.json +50 -0
- package/packages/arcgis-rest-feature-service/src/add.ts +82 -0
- package/packages/arcgis-rest-feature-service/src/addAttachment.ts +65 -0
- package/packages/arcgis-rest-feature-service/src/delete.ts +85 -0
- package/packages/arcgis-rest-feature-service/src/deleteAttachments.ts +68 -0
- package/packages/arcgis-rest-feature-service/src/getAttachments.ts +64 -0
- package/packages/arcgis-rest-feature-service/src/helpers.ts +77 -0
- package/packages/arcgis-rest-feature-service/src/index.ts +8 -0
- package/packages/arcgis-rest-feature-service/src/query.ts +174 -0
- package/packages/arcgis-rest-feature-service/src/update.ts +81 -0
- package/packages/arcgis-rest-feature-service/src/updateAttachment.ts +74 -0
- package/packages/arcgis-rest-feature-service/test/attachments.test.ts +179 -0
- package/packages/arcgis-rest-feature-service/test/features.test.ts +172 -0
- package/packages/arcgis-rest-feature-service/test/mocks/feature.ts +220 -0
- package/packages/arcgis-rest-feature-service/test/mocks/foo.txt +1 -0
- package/packages/arcgis-rest-feature-service/tsconfig.json +6 -0
- package/packages/arcgis-rest-geocoder/README.md +73 -0
- package/packages/arcgis-rest-geocoder/package-lock.json +11 -0
- package/packages/arcgis-rest-geocoder/package.json +52 -0
- package/packages/arcgis-rest-geocoder/src/bulk.ts +102 -0
- package/packages/arcgis-rest-geocoder/src/geocode.ts +117 -0
- package/packages/arcgis-rest-geocoder/src/helpers.ts +81 -0
- package/packages/arcgis-rest-geocoder/src/index.ts +4 -0
- package/packages/arcgis-rest-geocoder/src/reverse.ts +84 -0
- package/packages/arcgis-rest-geocoder/src/suggest.ts +72 -0
- package/packages/arcgis-rest-geocoder/test/geocoder.test.ts +510 -0
- package/packages/arcgis-rest-geocoder/test/mocks/responses.ts +588 -0
- package/packages/arcgis-rest-geocoder/tsconfig.json +6 -0
- package/packages/arcgis-rest-groups/README.md +64 -0
- package/packages/arcgis-rest-groups/package-lock.json +11 -0
- package/packages/arcgis-rest-groups/package.json +52 -0
- package/packages/arcgis-rest-groups/src/groups.ts +272 -0
- package/packages/arcgis-rest-groups/src/index.ts +1 -0
- package/packages/arcgis-rest-groups/test/groups.test.ts +280 -0
- package/packages/arcgis-rest-groups/test/mocks/responses.ts +137 -0
- package/packages/arcgis-rest-groups/tsconfig.json +6 -0
- package/packages/arcgis-rest-items/README.md +66 -0
- package/packages/arcgis-rest-items/package-lock.json +11 -0
- package/packages/arcgis-rest-items/package.json +52 -0
- package/packages/arcgis-rest-items/src/index.ts +1 -0
- package/packages/arcgis-rest-items/src/items.ts +498 -0
- package/packages/arcgis-rest-items/test/items.test.ts +1153 -0
- package/packages/arcgis-rest-items/test/mocks/foo.zip +0 -0
- package/packages/arcgis-rest-items/test/mocks/item.ts +30 -0
- package/packages/arcgis-rest-items/test/mocks/resources.ts +28 -0
- package/packages/arcgis-rest-items/test/mocks/search.ts +60 -0
- package/packages/arcgis-rest-items/tsconfig.json +6 -0
- package/packages/arcgis-rest-request/README.md +65 -0
- package/packages/arcgis-rest-request/package-lock.json +11 -0
- package/packages/arcgis-rest-request/package.json +42 -0
- package/packages/arcgis-rest-request/src/index.ts +10 -0
- package/packages/arcgis-rest-request/src/request.ts +259 -0
- package/packages/arcgis-rest-request/src/utils/ArcGISAuthError.ts +67 -0
- package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +73 -0
- package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
- package/packages/arcgis-rest-request/src/utils/check-for-errors.ts +65 -0
- package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +29 -0
- package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +23 -0
- package/packages/arcgis-rest-request/src/utils/get-portal-url.ts +25 -0
- package/packages/arcgis-rest-request/src/utils/get-portal.ts +45 -0
- package/packages/arcgis-rest-request/src/utils/process-params.ts +99 -0
- package/packages/arcgis-rest-request/test/mocks/errors.ts +59 -0
- package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +10 -0
- package/packages/arcgis-rest-request/test/mocks/portal.ts +109 -0
- package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +38 -0
- package/packages/arcgis-rest-request/test/mocks/webmap.ts +38 -0
- package/packages/arcgis-rest-request/test/request.test.ts +296 -0
- package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +167 -0
- package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +40 -0
- package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +101 -0
- package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +112 -0
- package/packages/arcgis-rest-request/test/utils/get-portal-url.test.ts +34 -0
- package/packages/arcgis-rest-request/test/utils/portal.test.ts +94 -0
- package/packages/arcgis-rest-request/test/utils/process-params.test.ts +190 -0
- package/packages/arcgis-rest-request/tsconfig.json +6 -0
- package/packages/arcgis-rest-sharing/README.md +67 -0
- package/packages/arcgis-rest-sharing/package-lock.json +11 -0
- package/packages/arcgis-rest-sharing/package.json +55 -0
- package/packages/arcgis-rest-sharing/src/access.ts +91 -0
- package/packages/arcgis-rest-sharing/src/group-sharing.ts +212 -0
- package/packages/arcgis-rest-sharing/src/helpers.ts +92 -0
- package/packages/arcgis-rest-sharing/src/index.ts +2 -0
- package/packages/arcgis-rest-sharing/test/access.test.ts +153 -0
- package/packages/arcgis-rest-sharing/test/group-sharing.test.ts +436 -0
- package/packages/arcgis-rest-sharing/test/mocks/sharing.ts +15 -0
- package/packages/arcgis-rest-sharing/tsconfig.json +6 -0
- package/packages/arcgis-rest-users/README.md +71 -0
- package/packages/arcgis-rest-users/package-lock.json +11 -0
- package/packages/arcgis-rest-users/package.json +51 -0
- package/packages/arcgis-rest-users/src/index.ts +1 -0
- package/packages/arcgis-rest-users/src/users.ts +70 -0
- package/packages/arcgis-rest-users/test/mocks/responses.ts +170 -0
- package/packages/arcgis-rest-users/test/users.test.ts +97 -0
- package/packages/arcgis-rest-users/tsconfig.json +6 -0
- package/support/FormData.d.ts +1 -0
- package/support/changelog.js +388 -0
- package/support/commit-template.txt +19 -0
- package/support/deploy-doc-site.js +16 -0
- package/support/publish.sh +40 -0
- package/support/test-helpers.js +8 -0
- package/tsconfig.json +69 -0
- package/tslint.json +14 -0
- package/umd-base-profile.js +82 -0
- 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
|
+
}
|