@sierragridteam/sdk 0.0.0-stage → 0.1.1
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/README.md +49 -2
- package/dist/fixtures-data.d.ts +609 -0
- package/dist/fixtures-data.js +2676 -0
- package/dist/fixtures.d.ts +12 -0
- package/dist/fixtures.js +139 -0
- package/dist/generated/client/client.gen.d.ts +2 -0
- package/dist/generated/client/client.gen.js +216 -0
- package/dist/generated/client/index.d.ts +10 -0
- package/dist/generated/client/index.js +6 -0
- package/dist/generated/client/types.gen.d.ts +120 -0
- package/dist/generated/client/types.gen.js +2 -0
- package/dist/generated/client/utils.gen.d.ts +37 -0
- package/dist/generated/client/utils.gen.js +228 -0
- package/dist/generated/client.gen.d.ts +12 -0
- package/dist/generated/client.gen.js +3 -0
- package/dist/generated/core/auth.gen.d.ts +25 -0
- package/dist/generated/core/auth.gen.js +14 -0
- package/dist/generated/core/bodySerializer.gen.d.ts +25 -0
- package/dist/generated/core/bodySerializer.gen.js +57 -0
- package/dist/generated/core/params.gen.d.ts +43 -0
- package/dist/generated/core/params.gen.js +109 -0
- package/dist/generated/core/pathSerializer.gen.d.ts +33 -0
- package/dist/generated/core/pathSerializer.gen.js +106 -0
- package/dist/generated/core/queryKeySerializer.gen.d.ts +18 -0
- package/dist/generated/core/queryKeySerializer.gen.js +92 -0
- package/dist/generated/core/serverSentEvents.gen.d.ts +71 -0
- package/dist/generated/core/serverSentEvents.gen.js +132 -0
- package/dist/generated/core/types.gen.d.ts +83 -0
- package/dist/generated/core/types.gen.js +2 -0
- package/dist/generated/core/utils.gen.d.ts +19 -0
- package/dist/generated/core/utils.gen.js +87 -0
- package/dist/generated/index.d.ts +2 -0
- package/dist/generated/index.js +2 -0
- package/dist/generated/sdk.gen.d.ts +210 -0
- package/dist/generated/sdk.gen.js +336 -0
- package/dist/generated/types.gen.d.ts +3474 -0
- package/dist/generated/types.gen.js +2 -0
- package/dist/generated/zod.gen.d.ts +6537 -0
- package/dist/generated/zod.gen.js +1849 -0
- package/dist/index.d.ts +1287 -0
- package/dist/index.js +99 -0
- package/package.json +42 -4
package/dist/index.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as schemas from './generated/zod.gen.js';
|
|
2
|
+
export class SierraApiError extends Error {
|
|
3
|
+
status;
|
|
4
|
+
codeName;
|
|
5
|
+
retryAfter;
|
|
6
|
+
body;
|
|
7
|
+
constructor(message, status, codeName, retryAfter, body) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.status = status;
|
|
10
|
+
this.codeName = codeName;
|
|
11
|
+
this.retryAfter = retryAfter;
|
|
12
|
+
this.body = body;
|
|
13
|
+
this.name = 'SierraApiError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Public read-only client. All returned JSON is validated against generated Zod schemas. */
|
|
17
|
+
export function createSierraClient(config = {}) {
|
|
18
|
+
const base = (config.baseUrl ?? 'https://data.sierragridteam.org').replace(/\/$/, '');
|
|
19
|
+
const fetcher = config.fetch ?? globalThis.fetch;
|
|
20
|
+
async function request(path, schema, query = {}, options = {}) {
|
|
21
|
+
const url = new URL(base + path);
|
|
22
|
+
for (const [key, value] of Object.entries(query)) {
|
|
23
|
+
if (value === undefined || value === null)
|
|
24
|
+
continue;
|
|
25
|
+
for (const item of Array.isArray(value) ? value : [value])
|
|
26
|
+
url.searchParams.append(key, String(item));
|
|
27
|
+
}
|
|
28
|
+
const timeout = options.timeoutMs ?? config.timeoutMs ?? 20_000;
|
|
29
|
+
if (!Number.isFinite(timeout) || timeout <= 0)
|
|
30
|
+
throw new RangeError('timeoutMs must be positive');
|
|
31
|
+
const controller = new AbortController();
|
|
32
|
+
const timer = setTimeout(() => controller.abort(new DOMException('Request deadline exceeded', 'TimeoutError')), timeout);
|
|
33
|
+
const signal = options.signal ? AbortSignal.any([options.signal, controller.signal]) : controller.signal;
|
|
34
|
+
try {
|
|
35
|
+
const response = await fetcher(url, { method: 'GET', signal, headers: options.etag ? { 'If-None-Match': options.etag } : {} });
|
|
36
|
+
const etag = response.headers.get('ETag');
|
|
37
|
+
if (response.status === 304)
|
|
38
|
+
return { data: undefined, status: 304, etag, notModified: true };
|
|
39
|
+
const text = await response.text();
|
|
40
|
+
let body;
|
|
41
|
+
try {
|
|
42
|
+
body = text ? JSON.parse(text) : null;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
body = text;
|
|
46
|
+
}
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
const error = schemas.zRpcStatus.safeParse(body);
|
|
49
|
+
throw new SierraApiError(error.success ? (error.data.message ?? 'Grid error') : `Grid request failed (${response.status})`, response.status, error.success ? (error.data.codeName ?? 'UNKNOWN') : 'HTTP_ERROR', response.headers.get('Retry-After'), body);
|
|
50
|
+
}
|
|
51
|
+
return { data: schema.parse(body), status: response.status, etag, notModified: false };
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
clearTimeout(timer);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const geometry = (query = {}) => ({ geometryFormat: 'OBJECT', ...query });
|
|
58
|
+
const api = {
|
|
59
|
+
listEvents: (query = {}, options = {}) => request(`/api/v1/events`, schemas.zGridServiceListEventsResponse, geometry(query), options),
|
|
60
|
+
getEvent: (id, query = {}, options = {}) => request(`/api/v1/events/${encodeURIComponent(id)}`, schemas.zGridServiceGetEventResponse, geometry(query), options),
|
|
61
|
+
getEventHistory: (id, query = {}, options = {}) => request(`/api/v1/events/${encodeURIComponent(id)}/history`, schemas.zGridServiceGetEventHistoryResponse, geometry(query), options),
|
|
62
|
+
listPlaces: (query = {}, options = {}) => request(`/api/v1/places`, schemas.zGridServiceListPlacesResponse, geometry(query), options),
|
|
63
|
+
getPlace: (place, options = {}) => request(`/api/v1/places/${encodeURIComponent(place)}`, schemas.zGridServiceGetPlaceResponse, geometry(), options),
|
|
64
|
+
resolvePlace: (query, options = {}) => request(`/api/v1/places:resolve`, schemas.zGridServiceResolvePlaceResponse, geometry(query), options),
|
|
65
|
+
getPlaceSummary: (place, options = {}) => request(`/api/v1/places/${encodeURIComponent(place)}/summary`, schemas.zGridServiceGetPlaceSummaryResponse, {}, options),
|
|
66
|
+
getConditions: (query = {}, options = {}) => request(`/api/v1/conditions`, schemas.zGridServiceGetConditionsResponse, query, options),
|
|
67
|
+
listCameras: (query = {}, options = {}) => request(`/api/v1/cameras`, schemas.zGridServiceListCamerasResponse, query, options),
|
|
68
|
+
listScanners: (query = {}, options = {}) => request(`/api/v1/scanners`, schemas.zGridServiceListScannersResponse, query, options),
|
|
69
|
+
listSources: (options = {}) => request(`/api/v1/sources`, schemas.zGridServiceListSourcesResponse, {}, options),
|
|
70
|
+
getMapLayer: (place, layer, query = {}, options = {}) => request(`/api/v1/places/${encodeURIComponent(place)}/map/${layer}.geojson`, schemas.zGetMapLayerResponse, query, options),
|
|
71
|
+
listMeshLinks: (query = {}, options = {}) => request(`/api/v1/mesh/links`, schemas.zListMeshLinksResponse, query, options),
|
|
72
|
+
getMeshTelemetry: (query, options = {}) => request(`/api/v1/mesh/telemetry`, schemas.zGridServiceGetMeshTelemetryResponse, query, options),
|
|
73
|
+
listHistory: (query, options = {}) => {
|
|
74
|
+
if (!Number.isFinite(Date.parse(query.from)) || !Number.isFinite(Date.parse(query.to)) || Date.parse(query.from) >= Date.parse(query.to))
|
|
75
|
+
throw new RangeError('History requires a valid explicit from < to window');
|
|
76
|
+
return request('/api/v1/history', schemas.zGridServiceListHistoryResponse, geometry(query), options);
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
return api;
|
|
80
|
+
}
|
|
81
|
+
/** Yields pages, including continuation tokens. A caller stopping early owns that incompleteness. */
|
|
82
|
+
export async function* paginate(load, maxPages = 100) {
|
|
83
|
+
if (!Number.isInteger(maxPages) || maxPages < 1)
|
|
84
|
+
throw new RangeError('maxPages must be a positive integer');
|
|
85
|
+
let token;
|
|
86
|
+
const seen = new Set();
|
|
87
|
+
for (let page = 0; page < maxPages; page++) {
|
|
88
|
+
const result = await load(token);
|
|
89
|
+
if (result.notModified)
|
|
90
|
+
throw new Error('Pagination cannot advance from a 304; do not pass an ETag');
|
|
91
|
+
yield result.data;
|
|
92
|
+
token = result.data.nextPageToken;
|
|
93
|
+
if (!token)
|
|
94
|
+
return;
|
|
95
|
+
if (seen.has(token))
|
|
96
|
+
throw new Error('API returned a repeated pagination token');
|
|
97
|
+
seen.add(token);
|
|
98
|
+
}
|
|
99
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,44 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sierragridteam/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Generated, runtime-validated public SIERRA Grid API client",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "UNLICENSED",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/sierragridteam/sierra-sdk.git",
|
|
10
|
+
"directory": "packages/typescript"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./generated": {
|
|
21
|
+
"types": "./dist/generated/index.d.ts",
|
|
22
|
+
"import": "./dist/generated/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./schemas": {
|
|
25
|
+
"types": "./dist/generated/zod.gen.d.ts",
|
|
26
|
+
"import": "./dist/generated/zod.gen.js"
|
|
27
|
+
},
|
|
28
|
+
"./fixtures": {
|
|
29
|
+
"types": "./dist/fixtures.d.ts",
|
|
30
|
+
"import": "./dist/fixtures.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"check": "tsc --noEmit",
|
|
35
|
+
"build": "tsc",
|
|
36
|
+
"test": "pnpm build && node --experimental-strip-types --test test/*.test.ts"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"zod": "4.6.7"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=22"
|
|
43
|
+
}
|
|
44
|
+
}
|