@mapcreator/api 0.0.0-saga.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/LICENSE +29 -0
- package/README.md +86 -0
- package/cjs/api/apiCommon.d.ts +7 -0
- package/cjs/api/apiCommon.d.ts.map +1 -0
- package/cjs/api/apiCommon.js +31 -0
- package/cjs/api/apiCommon.js.map +1 -0
- package/cjs/api/choropleth.d.ts +41 -0
- package/cjs/api/choropleth.d.ts.map +1 -0
- package/cjs/api/choropleth.js +15 -0
- package/cjs/api/choropleth.js.map +1 -0
- package/cjs/api/color.d.ts +16 -0
- package/cjs/api/color.d.ts.map +1 -0
- package/cjs/api/color.js +8 -0
- package/cjs/api/color.js.map +1 -0
- package/cjs/api/dimension.d.ts +25 -0
- package/cjs/api/dimension.d.ts.map +1 -0
- package/cjs/api/dimension.js +14 -0
- package/cjs/api/dimension.js.map +1 -0
- package/cjs/api/dimensionSet.d.ts +15 -0
- package/cjs/api/dimensionSet.d.ts.map +1 -0
- package/cjs/api/dimensionSet.js +7 -0
- package/cjs/api/dimensionSet.js.map +1 -0
- package/cjs/api/feature.d.ts +16 -0
- package/cjs/api/feature.d.ts.map +1 -0
- package/cjs/api/feature.js +8 -0
- package/cjs/api/feature.js.map +1 -0
- package/cjs/api/font.d.ts +29 -0
- package/cjs/api/font.d.ts.map +1 -0
- package/cjs/api/font.js +18 -0
- package/cjs/api/font.js.map +1 -0
- package/cjs/api/fontFamily.d.ts +17 -0
- package/cjs/api/fontFamily.d.ts.map +1 -0
- package/cjs/api/fontFamily.js +17 -0
- package/cjs/api/fontFamily.js.map +1 -0
- package/cjs/api/highlight.d.ts +41 -0
- package/cjs/api/highlight.d.ts.map +1 -0
- package/cjs/api/highlight.js +25 -0
- package/cjs/api/highlight.js.map +1 -0
- package/cjs/api/job.d.ts +41 -0
- package/cjs/api/job.d.ts.map +1 -0
- package/cjs/api/job.js +71 -0
- package/cjs/api/job.js.map +1 -0
- package/cjs/api/jobResult.d.ts +40 -0
- package/cjs/api/jobResult.d.ts.map +1 -0
- package/cjs/api/jobResult.js +35 -0
- package/cjs/api/jobResult.js.map +1 -0
- package/cjs/api/jobRevision.d.ts +76 -0
- package/cjs/api/jobRevision.d.ts.map +1 -0
- package/cjs/api/jobRevision.js +132 -0
- package/cjs/api/jobRevision.js.map +1 -0
- package/cjs/api/jobShare.d.ts +26 -0
- package/cjs/api/jobShare.d.ts.map +1 -0
- package/cjs/api/jobShare.js +9 -0
- package/cjs/api/jobShare.js.map +1 -0
- package/cjs/api/jobType.d.ts +17 -0
- package/cjs/api/jobType.d.ts.map +1 -0
- package/cjs/api/jobType.js +11 -0
- package/cjs/api/jobType.js.map +1 -0
- package/cjs/api/language.d.ts +17 -0
- package/cjs/api/language.d.ts.map +1 -0
- package/cjs/api/language.js +3 -0
- package/cjs/api/language.js.map +1 -0
- package/cjs/api/layer.d.ts +26 -0
- package/cjs/api/layer.d.ts.map +1 -0
- package/cjs/api/layer.js +14 -0
- package/cjs/api/layer.js.map +1 -0
- package/cjs/api/layerFaq.d.ts +27 -0
- package/cjs/api/layerFaq.d.ts.map +1 -0
- package/cjs/api/layerFaq.js +16 -0
- package/cjs/api/layerFaq.js.map +1 -0
- package/cjs/api/layerGroup.d.ts +16 -0
- package/cjs/api/layerGroup.d.ts.map +1 -0
- package/cjs/api/layerGroup.js +36 -0
- package/cjs/api/layerGroup.js.map +1 -0
- package/cjs/api/mapstyleSet.d.ts +31 -0
- package/cjs/api/mapstyleSet.d.ts.map +1 -0
- package/cjs/api/mapstyleSet.js +19 -0
- package/cjs/api/mapstyleSet.js.map +1 -0
- package/cjs/api/message.d.ts +32 -0
- package/cjs/api/message.d.ts.map +1 -0
- package/cjs/api/message.js +37 -0
- package/cjs/api/message.js.map +1 -0
- package/cjs/api/organisation.d.ts +40 -0
- package/cjs/api/organisation.d.ts.map +1 -0
- package/cjs/api/organisation.js +42 -0
- package/cjs/api/organisation.js.map +1 -0
- package/cjs/api/resources.d.ts +59 -0
- package/cjs/api/resources.d.ts.map +1 -0
- package/cjs/api/resources.js +57 -0
- package/cjs/api/resources.js.map +1 -0
- package/cjs/api/svg.d.ts +21 -0
- package/cjs/api/svg.d.ts.map +1 -0
- package/cjs/api/svg.js +15 -0
- package/cjs/api/svg.js.map +1 -0
- package/cjs/api/svgSet.d.ts +22 -0
- package/cjs/api/svgSet.d.ts.map +1 -0
- package/cjs/api/svgSet.js +25 -0
- package/cjs/api/svgSet.js.map +1 -0
- package/cjs/api/user.d.ts +128 -0
- package/cjs/api/user.d.ts.map +1 -0
- package/cjs/api/user.js +146 -0
- package/cjs/api/user.js.map +1 -0
- package/cjs/index.d.ts +26 -0
- package/cjs/index.d.ts.map +1 -0
- package/cjs/index.js +51 -0
- package/cjs/index.js.map +1 -0
- package/cjs/oauth.d.ts +27 -0
- package/cjs/oauth.d.ts.map +1 -0
- package/cjs/oauth.js +245 -0
- package/cjs/oauth.js.map +1 -0
- package/cjs/utils.d.ts +72 -0
- package/cjs/utils.d.ts.map +1 -0
- package/cjs/utils.js +220 -0
- package/cjs/utils.js.map +1 -0
- package/esm/api/apiCommon.d.ts +7 -0
- package/esm/api/apiCommon.d.ts.map +1 -0
- package/esm/api/apiCommon.js +28 -0
- package/esm/api/apiCommon.js.map +1 -0
- package/esm/api/choropleth.d.ts +41 -0
- package/esm/api/choropleth.d.ts.map +1 -0
- package/esm/api/choropleth.js +11 -0
- package/esm/api/choropleth.js.map +1 -0
- package/esm/api/color.d.ts +16 -0
- package/esm/api/color.d.ts.map +1 -0
- package/esm/api/color.js +5 -0
- package/esm/api/color.js.map +1 -0
- package/esm/api/dimension.d.ts +25 -0
- package/esm/api/dimension.d.ts.map +1 -0
- package/esm/api/dimension.js +11 -0
- package/esm/api/dimension.js.map +1 -0
- package/esm/api/dimensionSet.d.ts +15 -0
- package/esm/api/dimensionSet.d.ts.map +1 -0
- package/esm/api/dimensionSet.js +4 -0
- package/esm/api/dimensionSet.js.map +1 -0
- package/esm/api/feature.d.ts +16 -0
- package/esm/api/feature.d.ts.map +1 -0
- package/esm/api/feature.js +5 -0
- package/esm/api/feature.js.map +1 -0
- package/esm/api/font.d.ts +29 -0
- package/esm/api/font.d.ts.map +1 -0
- package/esm/api/font.js +14 -0
- package/esm/api/font.js.map +1 -0
- package/esm/api/fontFamily.d.ts +17 -0
- package/esm/api/fontFamily.d.ts.map +1 -0
- package/esm/api/fontFamily.js +13 -0
- package/esm/api/fontFamily.js.map +1 -0
- package/esm/api/highlight.d.ts +41 -0
- package/esm/api/highlight.d.ts.map +1 -0
- package/esm/api/highlight.js +21 -0
- package/esm/api/highlight.js.map +1 -0
- package/esm/api/job.d.ts +41 -0
- package/esm/api/job.d.ts.map +1 -0
- package/esm/api/job.js +59 -0
- package/esm/api/job.js.map +1 -0
- package/esm/api/jobResult.d.ts +40 -0
- package/esm/api/jobResult.d.ts.map +1 -0
- package/esm/api/jobResult.js +30 -0
- package/esm/api/jobResult.js.map +1 -0
- package/esm/api/jobRevision.d.ts +76 -0
- package/esm/api/jobRevision.d.ts.map +1 -0
- package/esm/api/jobRevision.js +120 -0
- package/esm/api/jobRevision.js.map +1 -0
- package/esm/api/jobShare.d.ts +26 -0
- package/esm/api/jobShare.d.ts.map +1 -0
- package/esm/api/jobShare.js +6 -0
- package/esm/api/jobShare.js.map +1 -0
- package/esm/api/jobType.d.ts +17 -0
- package/esm/api/jobType.d.ts.map +1 -0
- package/esm/api/jobType.js +8 -0
- package/esm/api/jobType.js.map +1 -0
- package/esm/api/language.d.ts +17 -0
- package/esm/api/language.d.ts.map +1 -0
- package/esm/api/language.js +2 -0
- package/esm/api/language.js.map +1 -0
- package/esm/api/layer.d.ts +26 -0
- package/esm/api/layer.d.ts.map +1 -0
- package/esm/api/layer.js +11 -0
- package/esm/api/layer.js.map +1 -0
- package/esm/api/layerFaq.d.ts +27 -0
- package/esm/api/layerFaq.d.ts.map +1 -0
- package/esm/api/layerFaq.js +12 -0
- package/esm/api/layerFaq.js.map +1 -0
- package/esm/api/layerGroup.d.ts +16 -0
- package/esm/api/layerGroup.d.ts.map +1 -0
- package/esm/api/layerGroup.js +33 -0
- package/esm/api/layerGroup.js.map +1 -0
- package/esm/api/mapstyleSet.d.ts +31 -0
- package/esm/api/mapstyleSet.d.ts.map +1 -0
- package/esm/api/mapstyleSet.js +16 -0
- package/esm/api/mapstyleSet.js.map +1 -0
- package/esm/api/message.d.ts +32 -0
- package/esm/api/message.d.ts.map +1 -0
- package/esm/api/message.js +32 -0
- package/esm/api/message.js.map +1 -0
- package/esm/api/organisation.d.ts +40 -0
- package/esm/api/organisation.d.ts.map +1 -0
- package/esm/api/organisation.js +36 -0
- package/esm/api/organisation.js.map +1 -0
- package/esm/api/resources.d.ts +59 -0
- package/esm/api/resources.d.ts.map +1 -0
- package/esm/api/resources.js +51 -0
- package/esm/api/resources.js.map +1 -0
- package/esm/api/svg.d.ts +21 -0
- package/esm/api/svg.d.ts.map +1 -0
- package/esm/api/svg.js +11 -0
- package/esm/api/svg.js.map +1 -0
- package/esm/api/svgSet.d.ts +22 -0
- package/esm/api/svgSet.d.ts.map +1 -0
- package/esm/api/svgSet.js +21 -0
- package/esm/api/svgSet.js.map +1 -0
- package/esm/api/user.d.ts +128 -0
- package/esm/api/user.d.ts.map +1 -0
- package/esm/api/user.js +127 -0
- package/esm/api/user.js.map +1 -0
- package/esm/index.d.ts +26 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +26 -0
- package/esm/index.js.map +1 -0
- package/esm/oauth.d.ts +27 -0
- package/esm/oauth.d.ts.map +1 -0
- package/esm/oauth.js +237 -0
- package/esm/oauth.js.map +1 -0
- package/esm/utils.d.ts +72 -0
- package/esm/utils.d.ts.map +1 -0
- package/esm/utils.js +206 -0
- package/esm/utils.js.map +1 -0
- package/package.json +80 -0
- package/src/README.md +126 -0
- package/src/api/apiCommon.ts +70 -0
- package/src/api/choropleth.ts +105 -0
- package/src/api/color.ts +22 -0
- package/src/api/dimension.ts +44 -0
- package/src/api/dimensionSet.ts +20 -0
- package/src/api/feature.ts +22 -0
- package/src/api/font.ts +49 -0
- package/src/api/fontFamily.ts +43 -0
- package/src/api/highlight.ts +87 -0
- package/src/api/job.ts +129 -0
- package/src/api/jobResult.ts +95 -0
- package/src/api/jobRevision.ts +278 -0
- package/src/api/jobShare.ts +35 -0
- package/src/api/jobType.ts +26 -0
- package/src/api/language.ts +19 -0
- package/src/api/layer.ts +38 -0
- package/src/api/layerFaq.ts +53 -0
- package/src/api/layerGroup.ts +69 -0
- package/src/api/mapstyleSet.ts +48 -0
- package/src/api/message.ts +80 -0
- package/src/api/organisation.ts +95 -0
- package/src/api/resources.ts +143 -0
- package/src/api/svg.ts +33 -0
- package/src/api/svgSet.ts +56 -0
- package/src/api/user.ts +327 -0
- package/src/index.ts +42 -0
- package/src/oauth.ts +314 -0
- package/src/utils.ts +342 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { type ApiError, type ApiSuccess, getSearchParams, request } from '../utils.js';
|
|
2
|
+
import type { Polygon } from 'geojson';
|
|
3
|
+
|
|
4
|
+
export type SearchPoint = {
|
|
5
|
+
lat: number;
|
|
6
|
+
lng: number;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export type SearchBounds = {
|
|
10
|
+
min_lat: number;
|
|
11
|
+
min_lng: number;
|
|
12
|
+
max_lat: number;
|
|
13
|
+
max_lng: number;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
type ApiAreaArray =
|
|
17
|
+
| ({ data: ApiArea[] } & Omit<ApiSuccess, 'data'>)
|
|
18
|
+
| ApiError;
|
|
19
|
+
|
|
20
|
+
type ApiArea = {
|
|
21
|
+
id: number;
|
|
22
|
+
title: string;
|
|
23
|
+
subtitle: string;
|
|
24
|
+
svg_preview: string;
|
|
25
|
+
bounding_box: string;
|
|
26
|
+
is_group: boolean;
|
|
27
|
+
vector_source: string | null;
|
|
28
|
+
source_layer: string | null;
|
|
29
|
+
feature_id: number | null;
|
|
30
|
+
properties: Record<string, string> | null;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
type AreaBase = {
|
|
34
|
+
id: number;
|
|
35
|
+
title: string;
|
|
36
|
+
subtitle: string;
|
|
37
|
+
svgPreview: string;
|
|
38
|
+
boundingBox: Polygon;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
type GroupArea = AreaBase & {
|
|
42
|
+
isGroup: true;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
type SingleArea = AreaBase & {
|
|
46
|
+
isGroup: false;
|
|
47
|
+
vectorSource: string;
|
|
48
|
+
sourceLayer: string;
|
|
49
|
+
featureId: number;
|
|
50
|
+
properties: Record<string, string>;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export type Area = SingleArea | GroupArea;
|
|
54
|
+
|
|
55
|
+
export async function search(
|
|
56
|
+
language: string,
|
|
57
|
+
searchBounds: SearchBounds,
|
|
58
|
+
query?: string,
|
|
59
|
+
searchPoint?: SearchPoint,
|
|
60
|
+
): Promise<Area[]> {
|
|
61
|
+
return request<ApiAreaArray, Area>(
|
|
62
|
+
`/v1/choropleth/polygons/search?${getSearchParams({
|
|
63
|
+
language,
|
|
64
|
+
...searchBounds,
|
|
65
|
+
...(query !== '' && { query }),
|
|
66
|
+
...(searchPoint && { point: searchPoint }),
|
|
67
|
+
})}`,
|
|
68
|
+
).then(result => {
|
|
69
|
+
result.forEach(
|
|
70
|
+
elem => (elem.boundingBox = JSON.parse(elem.boundingBox as unknown as string) as Polygon),
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
return result;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
type ApiChildArray =
|
|
78
|
+
| ({
|
|
79
|
+
data: ApiChild[];
|
|
80
|
+
} & Omit<ApiSuccess, 'data'>)
|
|
81
|
+
| ApiError;
|
|
82
|
+
|
|
83
|
+
type ApiChild = {
|
|
84
|
+
id: number;
|
|
85
|
+
title: string;
|
|
86
|
+
vector_source: string;
|
|
87
|
+
source_layer: string;
|
|
88
|
+
feature_id: number;
|
|
89
|
+
properties: Record<string, string>;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export type AreaChild = {
|
|
93
|
+
id: number;
|
|
94
|
+
title: string;
|
|
95
|
+
vectorSource: string;
|
|
96
|
+
sourceLayer: string;
|
|
97
|
+
featureId: number;
|
|
98
|
+
properties: Record<string, string>;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export async function children(groupId: number, language: string): Promise<AreaChild[]> {
|
|
102
|
+
return request<ApiChildArray, AreaChild>(
|
|
103
|
+
`/v1/choropleth/groups/${groupId}/children-optimized?${getSearchParams({ language })}`,
|
|
104
|
+
);
|
|
105
|
+
}
|
package/src/api/color.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ApiCommonData, ApiError, ApiSuccess, Flatten, Revivers } from '../utils.js';
|
|
2
|
+
|
|
3
|
+
export type Color = {
|
|
4
|
+
id: number;
|
|
5
|
+
hex: string;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type ApiColor = {
|
|
9
|
+
data: {
|
|
10
|
+
id: number; // The color id (sortable)
|
|
11
|
+
name: string; // The name of the color (searchable, sortable)
|
|
12
|
+
hex: string; // The hex value of the color (searchable, sortable)
|
|
13
|
+
order?: number; // TODO: not present in API specification!
|
|
14
|
+
} & ApiCommonData;
|
|
15
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
16
|
+
|
|
17
|
+
export type ApiColorData = Flatten<Exclude<ApiColor, ApiError>['data']>;
|
|
18
|
+
|
|
19
|
+
export const colorRevivers: Revivers<ApiColor, Color> = {
|
|
20
|
+
name: undefined,
|
|
21
|
+
order: undefined,
|
|
22
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ApiCommonData, ApiError, ApiSuccess, Flatten, Revivers } from '../utils.js';
|
|
2
|
+
|
|
3
|
+
export type OutputUnit =
|
|
4
|
+
| 'millimeter'
|
|
5
|
+
| 'centimeter'
|
|
6
|
+
| 'inch'
|
|
7
|
+
| 'pixel'
|
|
8
|
+
| 'pica';
|
|
9
|
+
|
|
10
|
+
export type Dimension = {
|
|
11
|
+
id: number;
|
|
12
|
+
dimensionSetId: number;
|
|
13
|
+
name: string;
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
dpi: number;
|
|
17
|
+
unit: OutputUnit;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type ApiDimension = {
|
|
21
|
+
data: {
|
|
22
|
+
id: number; // The dimension id (sortable)
|
|
23
|
+
dimension_set_id: number; // The id of the dimension set
|
|
24
|
+
name: string; // The name of dimension (searchable, sortable)
|
|
25
|
+
width: number; // The width of the dimension (searchable, sortable)
|
|
26
|
+
height: number; // The height of the dimension (searchable, sortable)
|
|
27
|
+
dpi: number; // The dpi of the dimension
|
|
28
|
+
unit: string; // The unit of this dimension
|
|
29
|
+
} & ApiCommonData;
|
|
30
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
31
|
+
|
|
32
|
+
export type ApiDimensionData = Flatten<Exclude<ApiDimension, ApiError>['data']>;
|
|
33
|
+
|
|
34
|
+
const keyToUnit: { [key: string]: OutputUnit } = {
|
|
35
|
+
MM: 'millimeter',
|
|
36
|
+
CM: 'centimeter',
|
|
37
|
+
IN: 'inch',
|
|
38
|
+
PX: 'pixel',
|
|
39
|
+
PICA: 'pica',
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const dimensionRevivers: Revivers<ApiDimension, Dimension> = {
|
|
43
|
+
unit: (data: ApiDimensionData) => keyToUnit[data.unit],
|
|
44
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ApiCommonData, ApiError, ApiSuccess, Flatten, Revivers } from '../utils.js';
|
|
2
|
+
|
|
3
|
+
export type DimensionSet = {
|
|
4
|
+
id: number;
|
|
5
|
+
name: string;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type ApiDimensionSet = {
|
|
9
|
+
data: {
|
|
10
|
+
id: number; // The dimension set id (sortable)
|
|
11
|
+
name: string; // The dimension set name (searchable, sortable)
|
|
12
|
+
order?: number; // TODO: not present in API specification!
|
|
13
|
+
} & ApiCommonData;
|
|
14
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
15
|
+
|
|
16
|
+
export type ApiDimensionSetData = Flatten<Exclude<ApiDimensionSet, ApiError>['data']>;
|
|
17
|
+
|
|
18
|
+
export const dimensionSetRevivers: Revivers<ApiDimensionSet, DimensionSet> = {
|
|
19
|
+
order: undefined,
|
|
20
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ApiCommonData, ApiError, ApiSuccess, Flatten, Revivers } from '../utils.js';
|
|
2
|
+
|
|
3
|
+
export type Feature = {
|
|
4
|
+
id: number;
|
|
5
|
+
name: string;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type ApiFeature = {
|
|
9
|
+
data: {
|
|
10
|
+
id: number; // The feature id
|
|
11
|
+
name: string; // The feature name (searchable, sortable)
|
|
12
|
+
description: string; // The description of the feature (searchable, sortable)
|
|
13
|
+
order?: number; // TODO: not present in API specification!
|
|
14
|
+
} & ApiCommonData;
|
|
15
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
16
|
+
|
|
17
|
+
export type ApiFeatureData = Flatten<Exclude<ApiFeature, ApiError>['data']>;
|
|
18
|
+
|
|
19
|
+
export const featureRevivers: Revivers<ApiFeature, Feature> = {
|
|
20
|
+
description: undefined,
|
|
21
|
+
order: undefined,
|
|
22
|
+
};
|
package/src/api/font.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type ApiCommonData, type ApiError, type ApiSuccess, type Flatten, type Revivers, getSearchParams, request } from '../utils.js';
|
|
2
|
+
|
|
3
|
+
export type Font = {
|
|
4
|
+
id: number;
|
|
5
|
+
fontFamilyId: number;
|
|
6
|
+
name: string;
|
|
7
|
+
label: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type ApiFont = {
|
|
11
|
+
data: {
|
|
12
|
+
id: number; // The id of the font (sortable)
|
|
13
|
+
font_family_id: number; // The id of the font family
|
|
14
|
+
name: string; // The name of the font (searchable, sortable)
|
|
15
|
+
style: string; // The font style (searchable, sortable)
|
|
16
|
+
stretch: string; // The font stretch (searchable, sortable)
|
|
17
|
+
weight: number; // The font weight (searchable, sortable)
|
|
18
|
+
label: string; // The label of the font (searchable, sortable)
|
|
19
|
+
order?: number; // TODO: not present in API specification!
|
|
20
|
+
} & ApiCommonData;
|
|
21
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
22
|
+
|
|
23
|
+
export type ApiFontData = Flatten<Exclude<ApiFont, ApiError>['data']>;
|
|
24
|
+
|
|
25
|
+
type FontSearchOptions = {
|
|
26
|
+
family?: string;
|
|
27
|
+
style?: string;
|
|
28
|
+
weight?: string;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const fontRevivers: Revivers<ApiFont, Font> = {
|
|
32
|
+
style: undefined,
|
|
33
|
+
stretch: undefined,
|
|
34
|
+
weight: undefined,
|
|
35
|
+
order: undefined,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export async function getFonts(searchOptions: FontSearchOptions): Promise<Font[] | Font> {
|
|
39
|
+
const pathname = `/v1/fonts/search`;
|
|
40
|
+
const query = getSearchParams(searchOptions);
|
|
41
|
+
|
|
42
|
+
const path = `${pathname}?${query}`;
|
|
43
|
+
|
|
44
|
+
type ApiFontArray = {
|
|
45
|
+
data: ApiFontData[];
|
|
46
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
47
|
+
|
|
48
|
+
return request<ApiFontArray, Font>(path);
|
|
49
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type ApiFontData, type Font, fontRevivers } from './font.js';
|
|
2
|
+
import {
|
|
3
|
+
type ApiCommonData,
|
|
4
|
+
type ApiError,
|
|
5
|
+
type ApiSuccess,
|
|
6
|
+
type Flatten,
|
|
7
|
+
type Revivers,
|
|
8
|
+
defaultListHeader,
|
|
9
|
+
getSearchParams,
|
|
10
|
+
request,
|
|
11
|
+
} from '../utils.js';
|
|
12
|
+
|
|
13
|
+
export type FontFamily = {
|
|
14
|
+
id: number;
|
|
15
|
+
name: string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type ApiFontFamily = {
|
|
19
|
+
data: {
|
|
20
|
+
id: number; // The id of the font family (sortable)
|
|
21
|
+
name: string; // The name of the font family (searchable, sortable)
|
|
22
|
+
order?: number; // TODO: not present in API specification!
|
|
23
|
+
} & ApiCommonData;
|
|
24
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
25
|
+
|
|
26
|
+
export type ApiFontFamilyData = Flatten<Exclude<ApiFontFamily, ApiError>['data']>;
|
|
27
|
+
|
|
28
|
+
export const fontFamilyRevivers: Revivers<ApiFontFamily, FontFamily> = {
|
|
29
|
+
order: undefined,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export async function listFontFamilyFonts(fontFamilyId: number): Promise<Font[]> {
|
|
33
|
+
const pathname = `/v1/fonts/families/${fontFamilyId}/items`;
|
|
34
|
+
const query = getSearchParams({ sort: 'order' });
|
|
35
|
+
const path = `${pathname}?${query}`;
|
|
36
|
+
const options = { revivers: fontRevivers };
|
|
37
|
+
|
|
38
|
+
type ApiFontArray = {
|
|
39
|
+
data: ApiFontData[];
|
|
40
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
41
|
+
|
|
42
|
+
return request<ApiFontArray, Font>(path, null, defaultListHeader, options);
|
|
43
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { FeatureCollection } from 'geojson';
|
|
2
|
+
import type { SnakeCase } from 'type-fest';
|
|
3
|
+
import {
|
|
4
|
+
APIMeta,
|
|
5
|
+
type ApiCommonData,
|
|
6
|
+
type ApiError,
|
|
7
|
+
type ApiSuccess,
|
|
8
|
+
type Flatten,
|
|
9
|
+
defaultListHeader,
|
|
10
|
+
getSearchParams,
|
|
11
|
+
request,
|
|
12
|
+
} from '../utils.js';
|
|
13
|
+
|
|
14
|
+
type FieldName = 'id' | 'name' | 'description' | 'previewPath' | 'previewJson';
|
|
15
|
+
|
|
16
|
+
export type PartialVectorHighlight = Pick<VectorHighlight, FieldName>;
|
|
17
|
+
|
|
18
|
+
export type VectorHighlight = {
|
|
19
|
+
id: number;
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
previewPath: string | null;
|
|
23
|
+
previewJson: FeatureCollection | null;
|
|
24
|
+
|
|
25
|
+
vectorSetUrl: string;
|
|
26
|
+
sourceLayerName: string;
|
|
27
|
+
|
|
28
|
+
lngMin: number;
|
|
29
|
+
lngMax: number;
|
|
30
|
+
latMin: number;
|
|
31
|
+
latMax: number;
|
|
32
|
+
|
|
33
|
+
keys: string[];
|
|
34
|
+
properties: Record<string, unknown>;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export type ApiVectorHighlight = {
|
|
38
|
+
data: {
|
|
39
|
+
id: number;
|
|
40
|
+
name: string;
|
|
41
|
+
description: string;
|
|
42
|
+
preview_path: string | null;
|
|
43
|
+
preview_json: FeatureCollection | null;
|
|
44
|
+
|
|
45
|
+
vector_set_url: string;
|
|
46
|
+
source_layer_name: string;
|
|
47
|
+
|
|
48
|
+
lng_min: number;
|
|
49
|
+
lng_max: number;
|
|
50
|
+
lat_min: number;
|
|
51
|
+
lat_max: number;
|
|
52
|
+
|
|
53
|
+
keys: string[];
|
|
54
|
+
properties: Record<string, unknown>;
|
|
55
|
+
} & ApiCommonData;
|
|
56
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
57
|
+
|
|
58
|
+
export type ApiVectorHighlightData = Flatten<Exclude<ApiVectorHighlight, ApiError>['data']>;
|
|
59
|
+
|
|
60
|
+
export async function listVectorHighlights(name: string): Promise<PartialVectorHighlight[]> {
|
|
61
|
+
const pathname = `/v1/highlights/vector`;
|
|
62
|
+
const query = getSearchParams({ search: { name } });
|
|
63
|
+
const path = `${pathname}?${query}`;
|
|
64
|
+
|
|
65
|
+
// Only request first 50 results
|
|
66
|
+
const headers = { ...defaultListHeader };
|
|
67
|
+
const options = { withMeta: true };
|
|
68
|
+
|
|
69
|
+
type ApiVectorHighlightArray = {
|
|
70
|
+
data: Array<Pick<ApiVectorHighlightData, SnakeCase<FieldName>>>;
|
|
71
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
72
|
+
|
|
73
|
+
return request<ApiVectorHighlightArray, PartialVectorHighlight>(path, null, headers, options)
|
|
74
|
+
.catch((error: Error) => {
|
|
75
|
+
if (error instanceof APIMeta) {
|
|
76
|
+
return (error as APIMeta<ApiVectorHighlightArray, PartialVectorHighlight>).data;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
throw error;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export async function getVectorHighlight(highlightId: number): Promise<VectorHighlight> {
|
|
84
|
+
const path = `/v1/highlights/vector/${highlightId}`;
|
|
85
|
+
|
|
86
|
+
return request<ApiVectorHighlight, VectorHighlight>(path);
|
|
87
|
+
}
|
package/src/api/job.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { ApiJobShare, JobShare, JobShareVisibility } from './jobShare.js';
|
|
2
|
+
import { type JobSearchResult, listJobs } from './apiCommon.js';
|
|
3
|
+
import {
|
|
4
|
+
type ApiCommon,
|
|
5
|
+
type ApiCommonData,
|
|
6
|
+
type ApiError,
|
|
7
|
+
type ApiSuccess,
|
|
8
|
+
type Flatten,
|
|
9
|
+
type Revivers,
|
|
10
|
+
deletedNoneParam,
|
|
11
|
+
request,
|
|
12
|
+
} from '../utils.js';
|
|
13
|
+
|
|
14
|
+
export type Job = {
|
|
15
|
+
id: number;
|
|
16
|
+
jobTypeId: number;
|
|
17
|
+
title: string;
|
|
18
|
+
previewPath: string | undefined;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
star: boolean;
|
|
21
|
+
jobFolderId: number | null;
|
|
22
|
+
userEmail: string | undefined;
|
|
23
|
+
jobFolderName: string | null;
|
|
24
|
+
userId: number;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type ApiJob = {
|
|
28
|
+
data: {
|
|
29
|
+
id: number; // The job id (sortable)
|
|
30
|
+
job_type_id: number; // The id of the job type (searchable)
|
|
31
|
+
user_id: number; // The user id (searchable)
|
|
32
|
+
title: string; // The title of the job (searchable, sortable)
|
|
33
|
+
description: string | null; // The description of the job (searchable, sortable)
|
|
34
|
+
share_token: string | null; // The token used for sharing this job
|
|
35
|
+
autosave_preview_path: string | null; // The preview path of the Job
|
|
36
|
+
job_folder_id: number | null; // TODO: not present in API specification!
|
|
37
|
+
job_folder_name?: string | null; // TODO: not present in API specification!
|
|
38
|
+
star: boolean; // TODO: not present in API specification!
|
|
39
|
+
} & ApiCommonData;
|
|
40
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
41
|
+
|
|
42
|
+
export type ApiJobData = Flatten<Exclude<ApiJob, ApiError>['data']>;
|
|
43
|
+
|
|
44
|
+
export const jobRevivers: Revivers<ApiJob, Job> = {
|
|
45
|
+
description: undefined,
|
|
46
|
+
share_token: undefined,
|
|
47
|
+
autosave_preview_path: undefined,
|
|
48
|
+
|
|
49
|
+
jobTypeId: () => 9,
|
|
50
|
+
jobFolderName: (data: ApiJobData) => data.job_folder_name ?? null,
|
|
51
|
+
createdAt: (data: ApiJobData) => data.created_at as string,
|
|
52
|
+
previewPath: (data: ApiJobData) => data.autosave_preview_path ?? undefined,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export async function createJob(title: string): Promise<Job> {
|
|
56
|
+
const path = `/v1/jobs`;
|
|
57
|
+
const body = { title, job_type_id: 9 };
|
|
58
|
+
const options = { revivers: jobRevivers };
|
|
59
|
+
|
|
60
|
+
// Technically, the returning `data` will contain only the following fields:
|
|
61
|
+
// Pick<ApiJobData, 'id' | 'job_type_id' | 'user_id' | 'title' | 'created_at' | 'updated_at'>
|
|
62
|
+
|
|
63
|
+
return request<ApiJob, Job>(path, body, null, options);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export async function getJob(jobId: number): Promise<Job> {
|
|
67
|
+
const path = `/v1/jobs/${jobId}`;
|
|
68
|
+
const options = { revivers: jobRevivers };
|
|
69
|
+
|
|
70
|
+
return request<ApiJob, Job>(path, null, null, options);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export async function deleteJob(jobId: number): Promise<Record<string, never>> {
|
|
74
|
+
const path = `/v1/jobs/${jobId}`;
|
|
75
|
+
|
|
76
|
+
return request<ApiCommon, Record<string, never>>(path, null, null, { method: 'DELETE' });
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export async function updateJob(jobId: number, newTitle: string): Promise<Record<string, never>> {
|
|
80
|
+
const path = `/v1/jobs/${jobId}`;
|
|
81
|
+
const body = { title: newTitle };
|
|
82
|
+
|
|
83
|
+
return request<ApiCommon, Record<string, never>>(path, body, null, { method: 'PATCH' });
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export async function updateJobFolder(jobId: number, folderId: number | null): Promise<Record<string, never>> {
|
|
87
|
+
const path = `/v1/jobs/${jobId}`;
|
|
88
|
+
const body = { job_folder_id: folderId };
|
|
89
|
+
|
|
90
|
+
return request<ApiCommon, Record<string, never>>(path, body, null, { method: 'PATCH' });
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export async function starJob(jobId: number, star: boolean): Promise<Record<string, never>> {
|
|
94
|
+
const path = `/v1/jobs/${jobId}`;
|
|
95
|
+
const body = { star };
|
|
96
|
+
|
|
97
|
+
return request<ApiCommon, Record<string, never>>(path, body, null, { method: 'PATCH' });
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export async function generateJobShare(
|
|
101
|
+
jobId: number,
|
|
102
|
+
visibility: JobShareVisibility,
|
|
103
|
+
): Promise<JobShare> {
|
|
104
|
+
const path = `/v1/jobs/${jobId}/share`;
|
|
105
|
+
const body = { visibility };
|
|
106
|
+
|
|
107
|
+
return request<ApiJobShare, JobShare>(path, body);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export async function uploadJobPreview(
|
|
111
|
+
jobId: number,
|
|
112
|
+
preview: Blob,
|
|
113
|
+
): Promise<Record<string, never>> {
|
|
114
|
+
const pathname = `/v1/jobs/${jobId}/preview`;
|
|
115
|
+
const path = `${pathname}?${deletedNoneParam}`;
|
|
116
|
+
const body = new FormData();
|
|
117
|
+
|
|
118
|
+
body.append('preview', preview);
|
|
119
|
+
|
|
120
|
+
return request<ApiCommon, Record<string, never>>(path, body);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export async function listFeaturedJobs(
|
|
124
|
+
title: string,
|
|
125
|
+
page: number,
|
|
126
|
+
options?: Record<string, unknown>,
|
|
127
|
+
): Promise<JobSearchResult> {
|
|
128
|
+
return listJobs(`/v1/jobs/featured`, title, page, options);
|
|
129
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ApiCommon,
|
|
3
|
+
type ApiCommonData,
|
|
4
|
+
type ApiError,
|
|
5
|
+
type ApiSuccess,
|
|
6
|
+
type Flatten,
|
|
7
|
+
type Revivers,
|
|
8
|
+
deletedNoneParam,
|
|
9
|
+
lastJobRevision,
|
|
10
|
+
request,
|
|
11
|
+
} from '../utils.js';
|
|
12
|
+
|
|
13
|
+
export type JobResult = {
|
|
14
|
+
jobRevisionId: number;
|
|
15
|
+
revision: number;
|
|
16
|
+
status: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type ApiJobResult = {
|
|
20
|
+
data: {
|
|
21
|
+
job_revision_id: number; // The id of the job revision
|
|
22
|
+
revision: number; // The revision number of the job revision
|
|
23
|
+
mapstyle_id: number; // The id of the map style
|
|
24
|
+
interface_version: string; // The version of the interface (searchable, sortable)
|
|
25
|
+
fix: string; //
|
|
26
|
+
status: string; // The status of the job result (searchable, sortable)
|
|
27
|
+
fail_reason: string; // A human-readable reason of why the map failed to process
|
|
28
|
+
process_start: string; // The datetime when the job process started (searchable, sortable)
|
|
29
|
+
process_end: string; // The datetime when the job process ended (searchable, sortable)
|
|
30
|
+
dealt_with: boolean; // Checks if the Support fixed an issue (searchable, sortable)
|
|
31
|
+
bought: boolean; // Checks if the result is bought or not (searchable, sortable)
|
|
32
|
+
contract_id: number; // The id of the contract that was active when the map was created
|
|
33
|
+
callback: string; // URL to another API which can finish a map (searchable, sortable)
|
|
34
|
+
last_downloaded: string; // The last time the archive was downloaded (searchable, sortable)
|
|
35
|
+
} & ApiCommonData;
|
|
36
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
37
|
+
|
|
38
|
+
export type ApiJobResultData = Flatten<Exclude<ApiJobResult, ApiError>['data']>;
|
|
39
|
+
|
|
40
|
+
export const jobResultRevivers: Revivers<ApiJobResult, JobResult> = {
|
|
41
|
+
mapstyle_id: undefined,
|
|
42
|
+
interface_version: undefined,
|
|
43
|
+
fix: undefined,
|
|
44
|
+
fail_reason: undefined,
|
|
45
|
+
process_start: undefined,
|
|
46
|
+
process_end: undefined,
|
|
47
|
+
dealt_with: undefined,
|
|
48
|
+
bought: undefined,
|
|
49
|
+
contract_id: undefined,
|
|
50
|
+
callback: undefined,
|
|
51
|
+
last_downloaded: undefined,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export async function uploadJobResultPreview(
|
|
55
|
+
jobId: number,
|
|
56
|
+
blob: Blob,
|
|
57
|
+
): Promise<Record<string, never>> {
|
|
58
|
+
const pathname = `/v1/jobs/${jobId}/revisions/${lastJobRevision}/result/preview`;
|
|
59
|
+
const path = `${pathname}?${deletedNoneParam}`;
|
|
60
|
+
const body = new FormData();
|
|
61
|
+
|
|
62
|
+
body.append('preview', blob);
|
|
63
|
+
|
|
64
|
+
return request<ApiCommon, Record<string, never>>(path, body);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type JobResultHostedImage = {
|
|
68
|
+
url: string;
|
|
69
|
+
message: string;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export type ApiJobResultHostedImage = {
|
|
73
|
+
data: {
|
|
74
|
+
url: string;
|
|
75
|
+
message: string;
|
|
76
|
+
} & ApiCommonData;
|
|
77
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
78
|
+
|
|
79
|
+
export type ApiJobResultHostedImageData = Flatten<Exclude<ApiJobResultHostedImage, ApiError>['data']>;
|
|
80
|
+
|
|
81
|
+
export async function uploadJobResultHostedImage(
|
|
82
|
+
jobId: number,
|
|
83
|
+
blob: Blob,
|
|
84
|
+
fileName: string,
|
|
85
|
+
fileType: 'jpg' | 'png' | 'svg',
|
|
86
|
+
): Promise<JobResultHostedImage> {
|
|
87
|
+
const pathname = `/v1/jobs/${jobId}/revisions/${lastJobRevision}/result/hosted-${fileType}`;
|
|
88
|
+
const path = `${pathname}?${deletedNoneParam}`;
|
|
89
|
+
const body = new FormData();
|
|
90
|
+
|
|
91
|
+
body.append(fileType, blob);
|
|
92
|
+
body.append('filename', fileName);
|
|
93
|
+
|
|
94
|
+
return request<ApiJobResultHostedImage, JobResultHostedImage>(path, body);
|
|
95
|
+
}
|