/
uploadChangeset.ts
39 lines (33 loc) · 978 Bytes
/
uploadChangeset.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import type { OsmChange } from "../../types";
import { osmFetch } from "../_osmFetch";
import {
createChangesetMetaXml,
createOsmChangeXml,
} from "./_createOsmChangeXml";
/**
* uploads a changeset to the OSM API.
* @returns the changeset number
*/
export async function uploadChangeset(
tags: { [key: string]: string },
diff: OsmChange
): Promise<number> {
const changesetXml = createChangesetMetaXml(tags);
const csId = +(await osmFetch<string>("/0.6/changeset/create", undefined, {
method: "PUT",
body: changesetXml,
headers: {
"content-type": "application/xml; charset=utf-8",
},
}));
const osmChangeXml = createOsmChangeXml(csId, diff);
await osmFetch(`/0.6/changeset/${csId}/upload`, undefined, {
method: "POST",
body: osmChangeXml,
headers: {
"content-type": "application/xml; charset=utf-8",
},
});
await osmFetch(`/0.6/changeset/${csId}/close`, undefined, { method: "PUT" });
return +csId;
}