deere-sdk 1.0.9 → 2.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/CHANGELOG.md +148 -0
- package/README.md +68 -0
- package/dist/api/aemp.d.ts +4 -0
- package/dist/api/aemp.d.ts.map +1 -1
- package/dist/api/aemp.js +5 -1
- package/dist/api/aemp.js.map +1 -1
- package/dist/api/assets.d.ts +4 -0
- package/dist/api/assets.d.ts.map +1 -1
- package/dist/api/assets.js +13 -9
- package/dist/api/assets.js.map +1 -1
- package/dist/api/boundaries.d.ts +4 -0
- package/dist/api/boundaries.d.ts.map +1 -1
- package/dist/api/boundaries.js +12 -8
- package/dist/api/boundaries.js.map +1 -1
- package/dist/api/clients.d.ts +4 -0
- package/dist/api/clients.d.ts.map +1 -1
- package/dist/api/clients.js +12 -8
- package/dist/api/clients.js.map +1 -1
- package/dist/api/connection-management.d.ts +4 -0
- package/dist/api/connection-management.d.ts.map +1 -1
- package/dist/api/connection-management.js +8 -4
- package/dist/api/connection-management.js.map +1 -1
- package/dist/api/crop-types.d.ts +4 -0
- package/dist/api/crop-types.d.ts.map +1 -1
- package/dist/api/crop-types.js +9 -5
- package/dist/api/crop-types.js.map +1 -1
- package/dist/api/equipment-measurement.d.ts +4 -0
- package/dist/api/equipment-measurement.d.ts.map +1 -1
- package/dist/api/equipment-measurement.js +5 -1
- package/dist/api/equipment-measurement.js.map +1 -1
- package/dist/api/equipment.d.ts +4 -0
- package/dist/api/equipment.d.ts.map +1 -1
- package/dist/api/equipment.js +20 -16
- package/dist/api/equipment.js.map +1 -1
- package/dist/api/farms.d.ts +4 -0
- package/dist/api/farms.d.ts.map +1 -1
- package/dist/api/farms.js +12 -8
- package/dist/api/farms.js.map +1 -1
- package/dist/api/field-operations-api.d.ts +4 -0
- package/dist/api/field-operations-api.d.ts.map +1 -1
- package/dist/api/field-operations-api.js +8 -4
- package/dist/api/field-operations-api.js.map +1 -1
- package/dist/api/fields.d.ts +4 -0
- package/dist/api/fields.d.ts.map +1 -1
- package/dist/api/fields.js +12 -8
- package/dist/api/fields.js.map +1 -1
- package/dist/api/files.d.ts +4 -0
- package/dist/api/files.d.ts.map +1 -1
- package/dist/api/files.js +10 -6
- package/dist/api/files.js.map +1 -1
- package/dist/api/flags.d.ts +4 -0
- package/dist/api/flags.d.ts.map +1 -1
- package/dist/api/flags.js +11 -7
- package/dist/api/flags.js.map +1 -1
- package/dist/api/guidance-lines.d.ts +4 -0
- package/dist/api/guidance-lines.d.ts.map +1 -1
- package/dist/api/guidance-lines.js +9 -5
- package/dist/api/guidance-lines.js.map +1 -1
- package/dist/api/harvest-id.d.ts +4 -0
- package/dist/api/harvest-id.d.ts.map +1 -1
- package/dist/api/harvest-id.js +7 -3
- package/dist/api/harvest-id.js.map +1 -1
- package/dist/api/machine-alerts.d.ts +4 -0
- package/dist/api/machine-alerts.d.ts.map +1 -1
- package/dist/api/machine-alerts.js +6 -2
- package/dist/api/machine-alerts.js.map +1 -1
- package/dist/api/machine-device-state-reports.d.ts +4 -0
- package/dist/api/machine-device-state-reports.d.ts.map +1 -1
- package/dist/api/machine-device-state-reports.js +5 -1
- package/dist/api/machine-device-state-reports.js.map +1 -1
- package/dist/api/machine-engine-hours.d.ts +4 -0
- package/dist/api/machine-engine-hours.d.ts.map +1 -1
- package/dist/api/machine-engine-hours.js +6 -2
- package/dist/api/machine-engine-hours.js.map +1 -1
- package/dist/api/machine-hours-of-operation.d.ts +4 -0
- package/dist/api/machine-hours-of-operation.d.ts.map +1 -1
- package/dist/api/machine-hours-of-operation.js +6 -2
- package/dist/api/machine-hours-of-operation.js.map +1 -1
- package/dist/api/machine-locations.d.ts +4 -0
- package/dist/api/machine-locations.d.ts.map +1 -1
- package/dist/api/machine-locations.js +5 -1
- package/dist/api/machine-locations.js.map +1 -1
- package/dist/api/map-layers.d.ts +4 -0
- package/dist/api/map-layers.d.ts.map +1 -1
- package/dist/api/map-layers.js +9 -5
- package/dist/api/map-layers.js.map +1 -1
- package/dist/api/notifications.d.ts +4 -0
- package/dist/api/notifications.d.ts.map +1 -1
- package/dist/api/notifications.js +9 -5
- package/dist/api/notifications.js.map +1 -1
- package/dist/api/operators.d.ts +4 -0
- package/dist/api/operators.d.ts.map +1 -1
- package/dist/api/operators.js +11 -7
- package/dist/api/operators.js.map +1 -1
- package/dist/api/organizations.d.ts +4 -0
- package/dist/api/organizations.d.ts.map +1 -1
- package/dist/api/organizations.js +9 -5
- package/dist/api/organizations.js.map +1 -1
- package/dist/api/partnerships.d.ts +4 -0
- package/dist/api/partnerships.d.ts.map +1 -1
- package/dist/api/partnerships.js +11 -7
- package/dist/api/partnerships.js.map +1 -1
- package/dist/api/products.d.ts +4 -0
- package/dist/api/products.d.ts.map +1 -1
- package/dist/api/products.js +14 -10
- package/dist/api/products.js.map +1 -1
- package/dist/api/users.d.ts +4 -0
- package/dist/api/users.d.ts.map +1 -1
- package/dist/api/users.js +5 -1
- package/dist/api/users.js.map +1 -1
- package/dist/api/webhook.d.ts +4 -0
- package/dist/api/webhook.d.ts.map +1 -1
- package/dist/api/webhook.js +9 -5
- package/dist/api/webhook.js.map +1 -1
- package/dist/api-servers.generated.d.ts +72 -0
- package/dist/api-servers.generated.d.ts.map +1 -0
- package/dist/api-servers.generated.js +344 -0
- package/dist/api-servers.generated.js.map +1 -0
- package/dist/client.d.ts +122 -36
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +302 -71
- package/dist/client.js.map +1 -1
- package/dist/environment-resolver.d.ts +40 -0
- package/dist/environment-resolver.d.ts.map +1 -0
- package/dist/environment-resolver.js +79 -0
- package/dist/environment-resolver.js.map +1 -0
- package/dist/errors.d.ts +36 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +54 -0
- package/dist/errors.js.map +1 -0
- package/dist/hateoas-map.d.ts +25 -0
- package/dist/hateoas-map.d.ts.map +1 -0
- package/dist/hateoas-map.js +176 -0
- package/dist/hateoas-map.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
- package/dist/api/field-operations.d.ts +0 -83
- package/dist/api/field-operations.d.ts.map +0 -1
- package/dist/api/field-operations.js +0 -134
- package/dist/api/field-operations.js.map +0 -1
package/dist/client.js
CHANGED
|
@@ -2,44 +2,85 @@
|
|
|
2
2
|
* John Deere API Client
|
|
3
3
|
*
|
|
4
4
|
* Unofficial TypeScript SDK for John Deere Operations Center API.
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
|
+
* URL resolution flow (v2.0):
|
|
7
|
+
*
|
|
8
|
+
* User code
|
|
9
|
+
* │
|
|
10
|
+
* ▼
|
|
11
|
+
* deere.equipmentMeasurement.post(params)
|
|
12
|
+
* │
|
|
13
|
+
* ▼
|
|
14
|
+
* this.client.post('equipment-measurement', '/orgs/.../measurements', data, options)
|
|
15
|
+
* │
|
|
16
|
+
* ▼
|
|
17
|
+
* DeereClient.post()
|
|
18
|
+
* ├─ resolveRequestUrl(spec, path, this.environment)
|
|
19
|
+
* │ ├─ API_SERVERS[spec] lookup
|
|
20
|
+
* │ ├─ templated → urlTemplate.replace('{environment}', env)
|
|
21
|
+
* │ ├─ static → urlByEnvironment[env] (throws UnsupportedEnvironmentError if missing)
|
|
22
|
+
* │ └─ unavailable → throws NoServerConfigError
|
|
23
|
+
* └─ requestUrl('POST', url, body, options)
|
|
24
|
+
* └─ fetch(url, ...) with retry + timeout
|
|
25
|
+
*
|
|
26
|
+
* Absolute URLs bypass the resolver via fetchUrl() — used for HATEOAS next-page
|
|
27
|
+
* links and power-user escape hatches. fetchUrl attaches the Bearer token ONLY
|
|
28
|
+
* to *.deere.com hosts; third-party URLs get no Authorization header.
|
|
29
|
+
*
|
|
30
|
+
* URL data lives in src/api-servers.generated.ts, built from OpenAPI specs at
|
|
31
|
+
* build time by scripts/generate-api-servers.ts. Never hand-edit that file.
|
|
6
32
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
retryAfter;
|
|
21
|
-
constructor(message, status, statusText, retryAfter, body) {
|
|
22
|
-
super(message, status, statusText, body);
|
|
23
|
-
this.retryAfter = retryAfter;
|
|
24
|
-
this.name = 'RateLimitError';
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
export class AuthError extends DeereError {
|
|
28
|
-
constructor(message, status, statusText, body) {
|
|
29
|
-
super(message, status, statusText, body);
|
|
30
|
-
this.name = 'AuthError';
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
const ENVIRONMENT_URLS = {
|
|
34
|
-
production: 'https://api.deere.com/platform',
|
|
35
|
-
sandbox: 'https://sandboxapi.deere.com/platform',
|
|
36
|
-
partner: 'https://partnerapi.deere.com/platform',
|
|
37
|
-
cert: 'https://apicert.deere.com/platform',
|
|
38
|
-
qa: 'https://apiqa.tal.deere.com/platform',
|
|
33
|
+
import { DEFAULT_ENVIRONMENT, KNOWN_ENVIRONMENTS, } from './api-servers.generated.js';
|
|
34
|
+
import { resolveRequestUrl } from './environment-resolver.js';
|
|
35
|
+
/**
|
|
36
|
+
* Legacy v1 environment names (kept for error-message migration hints only).
|
|
37
|
+
* v1 consumers passing 'production'/'sandbox'/etc. get a thrown error at
|
|
38
|
+
* construction time pointing them at the v2 raw subdomain name.
|
|
39
|
+
*/
|
|
40
|
+
const V1_LEGACY_ENV_NAMES = {
|
|
41
|
+
production: 'api',
|
|
42
|
+
sandbox: 'sandboxapi',
|
|
43
|
+
partner: 'partnerapi',
|
|
44
|
+
cert: 'apicert',
|
|
45
|
+
qa: 'apiqa.tal',
|
|
39
46
|
};
|
|
47
|
+
// Error classes live in ./errors.ts to avoid a circular import with
|
|
48
|
+
// environment-resolver.ts. Imported here for internal use (throws, instanceof
|
|
49
|
+
// checks) and re-exported for backward compatibility with any consumer that
|
|
50
|
+
// imports them from 'deere-sdk' main entry.
|
|
51
|
+
import { AuthError, DeereError, HateoasError, RateLimitError } from './errors.js';
|
|
52
|
+
export { AuthError, DeereError, HateoasError, RateLimitError };
|
|
40
53
|
const DEERE_ACCEPT_HEADER = 'application/vnd.deere.axiom.v3+json';
|
|
54
|
+
/**
|
|
55
|
+
* Hostnames where fetchUrl() will attach the Bearer token. Any URL whose
|
|
56
|
+
* hostname does NOT match this pattern has Authorization suppressed to
|
|
57
|
+
* prevent accidental token leakage to third-party services.
|
|
58
|
+
*
|
|
59
|
+
* Matches: deere.com, api.deere.com, foo.bar.deere.com, etc.
|
|
60
|
+
* Does not match: untrusted.example, deere.com.untrusted.example, localhost.
|
|
61
|
+
*/
|
|
62
|
+
const TRUSTED_HOSTS = /^([a-z0-9-]+\.)*deere\.com$/i;
|
|
41
63
|
/** HTTP status codes that are safe to retry */
|
|
42
64
|
const RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);
|
|
65
|
+
import { HATEOAS_MAP } from './hateoas-map.js';
|
|
66
|
+
class LinkCache {
|
|
67
|
+
cache = new Map();
|
|
68
|
+
set(parentPath, links) {
|
|
69
|
+
this.cache.set(parentPath, links);
|
|
70
|
+
}
|
|
71
|
+
findRel(parentPath, rel) {
|
|
72
|
+
const links = this.cache.get(parentPath);
|
|
73
|
+
if (!links)
|
|
74
|
+
return undefined;
|
|
75
|
+
return links.find((l) => l.rel === rel)?.uri;
|
|
76
|
+
}
|
|
77
|
+
has(parentPath) {
|
|
78
|
+
return this.cache.has(parentPath);
|
|
79
|
+
}
|
|
80
|
+
clear() {
|
|
81
|
+
this.cache.clear();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
43
84
|
/**
|
|
44
85
|
* John Deere API Client
|
|
45
86
|
*
|
|
@@ -47,11 +88,12 @@ const RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);
|
|
|
47
88
|
* ```typescript
|
|
48
89
|
* const client = new DeereClient({
|
|
49
90
|
* accessToken: 'your-token',
|
|
50
|
-
* environment: 'sandbox'
|
|
91
|
+
* environment: 'sandboxapi', // v2: raw JD subdomain, not 'sandbox'
|
|
51
92
|
* maxRetries: 3, // Retries with exponential backoff (default: 3)
|
|
52
93
|
* });
|
|
53
94
|
*
|
|
54
|
-
*
|
|
95
|
+
* // v2: first arg is the spec name (generated classes do this for you)
|
|
96
|
+
* const orgs = await client.get('organizations', '/organizations');
|
|
55
97
|
* ```
|
|
56
98
|
*
|
|
57
99
|
* @remarks
|
|
@@ -61,17 +103,22 @@ const RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);
|
|
|
61
103
|
* Set `maxRetries: 0` to disable automatic retries.
|
|
62
104
|
*/
|
|
63
105
|
export class DeereClient {
|
|
64
|
-
|
|
106
|
+
environment;
|
|
65
107
|
accessToken;
|
|
66
108
|
fetchFn;
|
|
67
109
|
defaultHeaders;
|
|
68
110
|
timeout;
|
|
69
111
|
retryConfig;
|
|
112
|
+
hateoas;
|
|
113
|
+
hateoasDebug;
|
|
114
|
+
linkCache = new LinkCache();
|
|
70
115
|
constructor(config) {
|
|
71
116
|
this.accessToken = config.accessToken;
|
|
72
|
-
this.
|
|
117
|
+
this.environment = this.validateEnvironment(config.environment);
|
|
73
118
|
this.fetchFn = config.fetch ?? fetch;
|
|
74
119
|
this.timeout = config.timeout ?? 30000;
|
|
120
|
+
this.hateoas = config.hateoas ?? false;
|
|
121
|
+
this.hateoasDebug = config.hateoasDebug ?? false;
|
|
75
122
|
this.defaultHeaders = {
|
|
76
123
|
Accept: DEERE_ACCEPT_HEADER,
|
|
77
124
|
'Content-Type': DEERE_ACCEPT_HEADER,
|
|
@@ -84,71 +131,127 @@ export class DeereClient {
|
|
|
84
131
|
};
|
|
85
132
|
}
|
|
86
133
|
/**
|
|
87
|
-
*
|
|
134
|
+
* Validates the environment string from config. Throws at construction
|
|
135
|
+
* time with a migration hint if the user passed a v1 friendly name or an
|
|
136
|
+
* unknown string — catches errors immediately instead of at first request.
|
|
88
137
|
*/
|
|
89
|
-
|
|
90
|
-
|
|
138
|
+
validateEnvironment(raw) {
|
|
139
|
+
const env = raw ?? DEFAULT_ENVIRONMENT;
|
|
140
|
+
if (KNOWN_ENVIRONMENTS.includes(env)) {
|
|
141
|
+
return env;
|
|
142
|
+
}
|
|
143
|
+
const v2Replacement = V1_LEGACY_ENV_NAMES[env];
|
|
144
|
+
const migrationHint = v2Replacement
|
|
145
|
+
? `\n\nv2.0 replaced v1 friendly environment names with raw JD subdomains. ` +
|
|
146
|
+
`Use '${v2Replacement}' instead of '${env}'. See CHANGELOG.md for the full table.`
|
|
147
|
+
: '';
|
|
148
|
+
throw new Error(`Invalid environment '${env}'. Valid values: ${KNOWN_ENVIRONMENTS.join(', ')}.` +
|
|
149
|
+
migrationHint);
|
|
91
150
|
}
|
|
92
151
|
/**
|
|
93
|
-
*
|
|
152
|
+
* GET request, spec-aware. Generated API classes call this with their own
|
|
153
|
+
* `spec` as the first argument — consumers don't normally call it directly.
|
|
94
154
|
*/
|
|
95
|
-
async
|
|
96
|
-
return this.request('
|
|
155
|
+
async get(specName, path, options) {
|
|
156
|
+
return this.request(specName, 'GET', path, undefined, options);
|
|
97
157
|
}
|
|
98
158
|
/**
|
|
99
|
-
*
|
|
159
|
+
* POST request, spec-aware.
|
|
100
160
|
*/
|
|
101
|
-
async
|
|
102
|
-
return this.request('
|
|
161
|
+
async post(specName, path, body, options) {
|
|
162
|
+
return this.request(specName, 'POST', path, body, options);
|
|
103
163
|
}
|
|
104
164
|
/**
|
|
105
|
-
*
|
|
165
|
+
* PUT request, spec-aware.
|
|
106
166
|
*/
|
|
107
|
-
async
|
|
108
|
-
return this.request('
|
|
167
|
+
async put(specName, path, body, options) {
|
|
168
|
+
return this.request(specName, 'PUT', path, body, options);
|
|
109
169
|
}
|
|
110
170
|
/**
|
|
111
|
-
*
|
|
171
|
+
* DELETE request, spec-aware.
|
|
112
172
|
*/
|
|
113
|
-
async
|
|
114
|
-
return this.request('
|
|
173
|
+
async delete(specName, path, options) {
|
|
174
|
+
return this.request(specName, 'DELETE', path, undefined, options);
|
|
115
175
|
}
|
|
116
176
|
/**
|
|
117
|
-
*
|
|
177
|
+
* PATCH request, spec-aware.
|
|
178
|
+
*/
|
|
179
|
+
async patch(specName, path, body, options) {
|
|
180
|
+
return this.request(specName, 'PATCH', path, body, options);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Fetch an absolute URL directly. Escape hatch for HATEOAS next-page links,
|
|
184
|
+
* HAL link traversal, and power users with pre-resolved URLs.
|
|
185
|
+
*
|
|
186
|
+
* **Security**: Attaches the Bearer token ONLY when the target hostname
|
|
187
|
+
* matches a trusted `*.deere.com` origin. Third-party URLs get NO
|
|
188
|
+
* Authorization header — prevents accidental token leakage to tracking or
|
|
189
|
+
* proxy services. If you need to send auth to a non-JD host, set
|
|
190
|
+
* `Authorization` explicitly via `options.headers`.
|
|
191
|
+
*/
|
|
192
|
+
async fetchUrl(method, url, body, options) {
|
|
193
|
+
const { hostname } = new URL(url);
|
|
194
|
+
const isTrusted = TRUSTED_HOSTS.test(hostname);
|
|
195
|
+
if (!isTrusted && this.hateoasDebug) {
|
|
196
|
+
console.warn(`[deere-sdk] fetchUrl: '${hostname}' is not a trusted *.deere.com host. ` +
|
|
197
|
+
`Bearer token suppressed. Set Authorization manually via options.headers ` +
|
|
198
|
+
`if needed.`);
|
|
199
|
+
}
|
|
200
|
+
const internalOpts = {
|
|
201
|
+
...options,
|
|
202
|
+
_noAuth: !isTrusted,
|
|
203
|
+
};
|
|
204
|
+
return this.requestUrl(method, url, body, internalOpts);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Follow a HAL link from a response. Accepts a Link object or a raw URL
|
|
208
|
+
* string. Delegates to fetchUrl() so the trusted-host check applies.
|
|
118
209
|
*/
|
|
119
210
|
async followLink(link, options) {
|
|
120
211
|
const uri = typeof link === 'string' ? link : link.uri;
|
|
121
|
-
|
|
122
|
-
const url = uri.startsWith('http') ? uri : `${this.baseUrl}${uri}`;
|
|
123
|
-
return this.requestUrl('GET', url, undefined, options);
|
|
212
|
+
return this.fetchUrl('GET', uri, undefined, options);
|
|
124
213
|
}
|
|
125
214
|
/**
|
|
126
|
-
* Paginate through all results following nextPage links
|
|
215
|
+
* Paginate through all results following nextPage links. First page is
|
|
216
|
+
* resolved via the spec's URL config; subsequent pages use the absolute
|
|
217
|
+
* URLs returned by the API in `response.links`.
|
|
127
218
|
*/
|
|
128
|
-
async *paginate(path, options) {
|
|
129
|
-
|
|
219
|
+
async *paginate(specName, path, options) {
|
|
220
|
+
// First page: resolve via the spec (templated or static lookup).
|
|
221
|
+
let url = this.hateoas
|
|
222
|
+
? await this.resolveHateoasUrl(specName, path)
|
|
223
|
+
: resolveRequestUrl(specName, path, this.environment);
|
|
224
|
+
let isFirstPage = true;
|
|
130
225
|
while (url) {
|
|
131
|
-
|
|
226
|
+
// First page uses the normal auth path; subsequent nextPage URLs are
|
|
227
|
+
// absolute and routed through fetchUrl which applies the trusted-host
|
|
228
|
+
// check (they're always *.deere.com in practice).
|
|
229
|
+
const response = isFirstPage
|
|
230
|
+
? await this.requestUrl('GET', url, undefined, options)
|
|
231
|
+
: await this.fetchUrl('GET', url, undefined, options);
|
|
132
232
|
if (response.values && response.values.length > 0) {
|
|
133
233
|
yield response.values;
|
|
134
234
|
}
|
|
135
|
-
// Find nextPage link
|
|
235
|
+
// Find nextPage link — always absolute in JD's HAL responses.
|
|
136
236
|
const nextPageLink = response.links?.find((l) => l.rel === 'nextPage');
|
|
137
237
|
url = nextPageLink?.uri;
|
|
238
|
+
isFirstPage = false;
|
|
138
239
|
}
|
|
139
240
|
}
|
|
140
241
|
/**
|
|
141
|
-
* Get all items from a paginated endpoint
|
|
242
|
+
* Get all items from a paginated endpoint, spec-aware.
|
|
142
243
|
*/
|
|
143
|
-
async getAll(path, options) {
|
|
244
|
+
async getAll(specName, path, options) {
|
|
144
245
|
const items = [];
|
|
145
|
-
for await (const page of this.paginate(path, options)) {
|
|
246
|
+
for await (const page of this.paginate(specName, path, options)) {
|
|
146
247
|
items.push(...page);
|
|
147
248
|
}
|
|
148
249
|
return items;
|
|
149
250
|
}
|
|
150
|
-
async request(method, path, body, options) {
|
|
151
|
-
const url =
|
|
251
|
+
async request(specName, method, path, body, options) {
|
|
252
|
+
const url = this.hateoas
|
|
253
|
+
? await this.resolveHateoasUrl(specName, path)
|
|
254
|
+
: resolveRequestUrl(specName, path, this.environment);
|
|
152
255
|
return this.requestUrl(method, url, body, options);
|
|
153
256
|
}
|
|
154
257
|
async requestUrl(method, url, body, options) {
|
|
@@ -159,13 +262,25 @@ export class DeereClient {
|
|
|
159
262
|
const controller = new AbortController();
|
|
160
263
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
161
264
|
try {
|
|
265
|
+
// Build headers: defaultHeaders → auto Bearer → user overrides.
|
|
266
|
+
// The auto-Bearer is attached ONLY when the internal _noAuth flag
|
|
267
|
+
// is unset (fetchUrl suppresses for untrusted hosts) AND when the
|
|
268
|
+
// user hasn't explicitly set Authorization themselves (user opt-in
|
|
269
|
+
// wins over our default).
|
|
270
|
+
const userHeaders = options?.headers ?? {};
|
|
271
|
+
const headers = {
|
|
272
|
+
...this.defaultHeaders,
|
|
273
|
+
};
|
|
274
|
+
if (!options?._noAuth &&
|
|
275
|
+
userHeaders.Authorization === undefined) {
|
|
276
|
+
headers.Authorization = `Bearer ${this.accessToken}`;
|
|
277
|
+
}
|
|
278
|
+
// Apply user headers LAST so they override both defaultHeaders and
|
|
279
|
+
// the auto-attached Bearer when explicitly set.
|
|
280
|
+
Object.assign(headers, userHeaders);
|
|
162
281
|
const response = await this.fetchFn(url, {
|
|
163
282
|
method,
|
|
164
|
-
headers
|
|
165
|
-
...this.defaultHeaders,
|
|
166
|
-
Authorization: `Bearer ${this.accessToken}`,
|
|
167
|
-
...options?.headers,
|
|
168
|
-
},
|
|
283
|
+
headers,
|
|
169
284
|
body: body ? JSON.stringify(body) : undefined,
|
|
170
285
|
signal: options?.signal ?? controller.signal,
|
|
171
286
|
});
|
|
@@ -236,6 +351,122 @@ export class DeereClient {
|
|
|
236
351
|
// Should not reach here, but just in case
|
|
237
352
|
throw lastError ?? new DeereError('Request failed after retries', 0, 'RetryExhausted');
|
|
238
353
|
}
|
|
354
|
+
/**
|
|
355
|
+
* Clear the HATEOAS link cache. Useful for long-lived clients or testing.
|
|
356
|
+
*/
|
|
357
|
+
clearLinkCache() {
|
|
358
|
+
this.linkCache.clear();
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Pre-fetch parent resources to warm the HATEOAS link cache.
|
|
362
|
+
* Reduces latency for subsequent HATEOAS-resolved requests.
|
|
363
|
+
*
|
|
364
|
+
* @param specName - Spec that owns the paths (e.g. 'organizations')
|
|
365
|
+
* @param paths - Parent resource paths to pre-fetch (defaults to '/organizations')
|
|
366
|
+
*/
|
|
367
|
+
async warmLinkCache(specName, paths = ['/organizations']) {
|
|
368
|
+
for (const path of paths) {
|
|
369
|
+
try {
|
|
370
|
+
const url = resolveRequestUrl(specName, path, this.environment);
|
|
371
|
+
const response = await this.requestUrl('GET', url);
|
|
372
|
+
if (response?.links) {
|
|
373
|
+
this.linkCache.set(path, response.links);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
catch {
|
|
377
|
+
// Best-effort — skip paths that fail
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Match a concrete path against the HATEOAS route map.
|
|
383
|
+
* Returns the concrete parent path, rel name, and optional parentSpec
|
|
384
|
+
* (which spec owns the parent resource — used for cross-spec HATEOAS).
|
|
385
|
+
* Returns null if no map entry matches.
|
|
386
|
+
*/
|
|
387
|
+
matchHateoasPattern(concretePath) {
|
|
388
|
+
const concreteSegments = concretePath.split('/').filter(Boolean);
|
|
389
|
+
for (const [pattern, route] of Object.entries(HATEOAS_MAP)) {
|
|
390
|
+
const patternSegments = pattern.split('/').filter(Boolean);
|
|
391
|
+
if (concreteSegments.length !== patternSegments.length)
|
|
392
|
+
continue;
|
|
393
|
+
let matches = true;
|
|
394
|
+
for (let i = 0; i < patternSegments.length; i++) {
|
|
395
|
+
if (patternSegments[i].startsWith('{'))
|
|
396
|
+
continue; // wildcard
|
|
397
|
+
if (patternSegments[i] !== concreteSegments[i]) {
|
|
398
|
+
matches = false;
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
if (matches) {
|
|
403
|
+
// Build the concrete parent path by substituting actual values
|
|
404
|
+
const parentSegments = route.parentPath.split('/').filter(Boolean);
|
|
405
|
+
const concreteParentParts = parentSegments.map((seg, i) => seg.startsWith('{') ? concreteSegments[i] : seg);
|
|
406
|
+
const concreteParentPath = `/${concreteParentParts.join('/')}`;
|
|
407
|
+
// parentSpec is optional on the route interface to allow gradual
|
|
408
|
+
// rollout — Phase 6 populates it. Falls back to the caller's spec
|
|
409
|
+
// when absent (same-spec HATEOAS, the common case).
|
|
410
|
+
const routeWithParentSpec = route;
|
|
411
|
+
return {
|
|
412
|
+
concreteParentPath,
|
|
413
|
+
rel: route.rel,
|
|
414
|
+
parentSpec: routeWithParentSpec.parentSpec,
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return null;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Resolve a path via HATEOAS link traversal, spec-aware.
|
|
422
|
+
*
|
|
423
|
+
* Fetches the parent resource (via the parent's own spec host, not the
|
|
424
|
+
* child's — critical for cross-spec flows like equipment.yaml's org-scoped
|
|
425
|
+
* endpoints whose parent `/organizations/{orgId}` lives on the platform
|
|
426
|
+
* host, not equipmentapi.deere.com/isg).
|
|
427
|
+
*
|
|
428
|
+
* Throws HateoasError if resolution fails.
|
|
429
|
+
*/
|
|
430
|
+
async resolveHateoasUrl(specName, path) {
|
|
431
|
+
// Strip query params for matching, reattach after
|
|
432
|
+
const [basePath, queryString] = path.split('?', 2);
|
|
433
|
+
const match = this.matchHateoasPattern(basePath);
|
|
434
|
+
if (!match) {
|
|
435
|
+
// No map entry — resolve directly via the caller's spec.
|
|
436
|
+
return resolveRequestUrl(specName, path, this.environment);
|
|
437
|
+
}
|
|
438
|
+
const { concreteParentPath, rel, parentSpec } = match;
|
|
439
|
+
// parentSpec is optional; fall back to the caller's spec if the HATEOAS
|
|
440
|
+
// map doesn't record which spec owns the parent (Phase 5 compat — Phase 6
|
|
441
|
+
// regenerates hateoas-map.ts with parentSpec populated).
|
|
442
|
+
const effectiveParentSpec = parentSpec ?? specName;
|
|
443
|
+
// Check cache
|
|
444
|
+
let discoveredUrl = this.linkCache.findRel(concreteParentPath, rel);
|
|
445
|
+
if (!discoveredUrl) {
|
|
446
|
+
// Cache miss — fetch parent resource via its OWN spec's host.
|
|
447
|
+
try {
|
|
448
|
+
const parentUrl = resolveRequestUrl(effectiveParentSpec, concreteParentPath, this.environment);
|
|
449
|
+
const parentResponse = await this.requestUrl('GET', parentUrl);
|
|
450
|
+
if (parentResponse?.links) {
|
|
451
|
+
this.linkCache.set(concreteParentPath, parentResponse.links);
|
|
452
|
+
discoveredUrl = this.linkCache.findRel(concreteParentPath, rel);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
catch (error) {
|
|
456
|
+
throw new HateoasError(`HATEOAS resolution failed: could not fetch parent resource "${concreteParentPath}"`, path, error instanceof Error ? error : undefined);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
if (!discoveredUrl) {
|
|
460
|
+
const cachedLinks = this.linkCache.has(concreteParentPath);
|
|
461
|
+
throw new HateoasError(`HATEOAS resolution failed: parent "${concreteParentPath}" has no link with rel "${rel}"${cachedLinks ? '' : ' (parent returned no links)'}`, path);
|
|
462
|
+
}
|
|
463
|
+
// Reattach query params
|
|
464
|
+
const resolvedUrl = queryString ? `${discoveredUrl}?${queryString}` : discoveredUrl;
|
|
465
|
+
if (this.hateoasDebug) {
|
|
466
|
+
console.log(`[HATEOAS] ${path} → parent: ${concreteParentPath}, rel: ${rel} → ${resolvedUrl}`);
|
|
467
|
+
}
|
|
468
|
+
return resolvedUrl;
|
|
469
|
+
}
|
|
239
470
|
/**
|
|
240
471
|
* Check if an error/status code is retryable
|
|
241
472
|
*/
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmDH,MAAM,OAAO,UAAW,SAAQ,KAAK;IAGjB;IACA;IACA;IAJlB,YACE,OAAe,EACC,MAAc,EACd,UAAkB,EAClB,IAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAU;QAG9B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAK1B;IAJlB,YACE,OAAe,EACf,MAAc,EACd,UAAkB,EACF,UAAmB,EACnC,IAAc;QAEd,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAHzB,eAAU,GAAV,UAAU,CAAS;QAInC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,UAAU;IACvC,YAAY,OAAe,EAAE,MAAc,EAAE,UAAkB,EAAE,IAAc;QAC7E,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,gBAAgB,GAAgC;IACpD,UAAU,EAAE,gCAAgC;IAC5C,OAAO,EAAE,uCAAuC;IAChD,OAAO,EAAE,uCAAuC;IAChD,IAAI,EAAE,oCAAoC;IAC1C,EAAE,EAAE,sCAAsC;CAC3C,CAAC;AAEF,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAElE,+CAA+C;AAC/C,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAElE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,WAAW;IACL,OAAO,CAAS;IAChB,WAAW,CAAS;IACpB,OAAO,CAAe;IACtB,cAAc,CAAyB;IACvC,OAAO,CAAS;IAChB,WAAW,CAAc;IAE1C,YAAY,MAAyB;QACnC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG;YACpB,MAAM,EAAE,mBAAmB;YAC3B,cAAc,EAAE,mBAAmB;YACnC,GAAG,MAAM,CAAC,cAAc;SACzB,CAAC;QACF,IAAI,CAAC,WAAW,GAAG;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;YAClC,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAc,IAAY,EAAE,OAAwB;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAc,IAAY,EAAE,IAAc,EAAE,OAAwB;QAC5E,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAc,IAAY,EAAE,IAAc,EAAE,OAAwB;QAC3E,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAc,IAAY,EAAE,OAAwB;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAc,IAAY,EAAE,IAAc,EAAE,OAAwB;QAC7E,OAAO,IAAI,CAAC,OAAO,CAAI,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAc,IAAmB,EAAE,OAAwB;QACzE,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvD,+DAA+D;QAC/D,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC,UAAU,CAAI,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,QAAQ,CAAI,IAAY,EAAE,OAAwB;QACvD,IAAI,GAAG,GAAuB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAEvD,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,QAAQ,GAAyB,MAAM,IAAI,CAAC,UAAU,CAC1D,KAAK,EACL,GAAG,EACH,SAAS,EACT,OAAO,CACR,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxB,CAAC;YAED,qBAAqB;YACrB,MAAM,YAAY,GAAqB,QAAQ,CAAC,KAAK,EAAE,IAAI,CACzD,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAClC,CAAC;YACF,GAAG,GAAG,YAAY,EAAE,GAAG,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAI,IAAY,EAAE,OAAwB;QACpD,MAAM,KAAK,GAAQ,EAAE,CAAC;QACtB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAI,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,OAAwB;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC,UAAU,CAAI,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,MAAc,EACd,GAAW,EACX,IAAc,EACd,OAAwB;QAExB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,yBAAyB;QAC9E,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;YACjD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;YAEhE,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;oBACvC,MAAM;oBACN,OAAO,EAAE;wBACP,GAAG,IAAI,CAAC,cAAc;wBACtB,aAAa,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE;wBAC3C,GAAG,OAAO,EAAE,OAAO;qBACpB;oBACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC7C,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,UAAU,CAAC,MAAM;iBAC7C,CAAC,CAAC;gBAEH,YAAY,CAAC,SAAS,CAAC,CAAC;gBAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,2CAA2C;oBAC3C,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;wBACnE,sCAAsC;wBACtC,MAAM,UAAU,GACd,QAAQ,CAAC,MAAM,KAAK,GAAG;4BACrB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;4BAChE,CAAC,CAAC,SAAS,CAAC;wBAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CACpC,OAAO,EACP,MAAM,CAAC,KAAK,CAAC,UAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAC5D,CAAC;wBACF,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACxB,SAAS;oBACX,CAAC;oBAED,oDAAoD;oBACpD,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACnC,CAAC;gBAED,yBAAyB;gBACzB,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC7D,IAAI,aAAa,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBACrD,OAAO,SAAc,CAAC;gBACxB,CAAC;gBAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACzD,IACE,WAAW,EAAE,QAAQ,CAAC,kBAAkB,CAAC;oBACzC,WAAW,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EAC9C,CAAC;oBACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;gBACtC,CAAC;gBAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;YACjD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,YAAY,CAAC,SAAS,CAAC,CAAC;gBAExB,2DAA2D;gBAC3D,gDAAgD;gBAChD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;oBAChC,+BAA+B;oBAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;wBACzD,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;4BAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;4BAChD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4BACxB,SAAS,GAAG,KAAK,CAAC;4BAClB,SAAS;wBACX,CAAC;oBACH,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,yBAAyB;gBACzB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC1D,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBACrE,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;wBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;wBAChD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACxB,SAAS,GAAG,YAAY,CAAC;wBACzB,SAAS;oBACX,CAAC;oBACD,MAAM,YAAY,CAAC;gBACrB,CAAC;gBAED,+BAA+B;gBAC/B,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;oBAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;oBAChD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACxB,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtE,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,MAAM,SAAS,IAAI,IAAI,UAAU,CAAC,8BAA8B,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACzF,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAAc;QAChC,OAAO,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAc;QACnC,OAAO,CACL,KAAK,YAAY,SAAS,IAAI,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAC1F,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAe,EAAE,UAAmB;QAC9D,oEAAoE;QACpE,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChE,CAAC;QAED,6CAA6C;QAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,IAAI,OAAO,CAAC;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE1E,2DAA2D;QAC3D,2DAA2D;QAC3D,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,QAAkB;QAC1C,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC;QAEtE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAClF,MAAM,IAAI,cAAc,CACtB,OAAO,EACP,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,EACnB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EACjD,IAAI,CACL,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5E,CAAC;IAEO,mBAAmB,CAAC,IAAa;QACvC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAExD,MAAM,GAAG,GAAG,IAA+B,CAAC;QAE5C,kCAAkC;QAClC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC;QACxD,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC;QACpD,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,iBAAiB,CAAC;QAE5E,0BAA0B;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAA4B,CAAC;YACvD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC,OAAO,CAAC;QAC9D,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAyB;IACpD,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime URL resolver for spec-aware requests.
|
|
3
|
+
*
|
|
4
|
+
* Pure, deterministic, and side-effect-free. Every DeereClient request goes
|
|
5
|
+
* through `resolveRequestUrl` to turn a (spec, path, environment) tuple into
|
|
6
|
+
* a full URL — or throw a clear, actionable error before any HTTP call.
|
|
7
|
+
*
|
|
8
|
+
* Design note: no heuristics, no silent fallbacks. If the spec's static map
|
|
9
|
+
* doesn't cover the current environment, we throw. Sandbox vs prod is a
|
|
10
|
+
* trust boundary — falling back silently could delete customer data.
|
|
11
|
+
*/
|
|
12
|
+
import { type Environment, type SpecName } from './api-servers.generated.js';
|
|
13
|
+
import { DeereError } from './errors.js';
|
|
14
|
+
/**
|
|
15
|
+
* Thrown when a spec has no server configuration (missing/malformed
|
|
16
|
+
* servers block, or generator classified it as 'unavailable').
|
|
17
|
+
*/
|
|
18
|
+
export declare class NoServerConfigError extends DeereError {
|
|
19
|
+
constructor(specName: string, reason?: string);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Thrown when a spec is available but does not support the requested
|
|
23
|
+
* environment. The error message lists supported envs + concrete alternatives.
|
|
24
|
+
*/
|
|
25
|
+
export declare class UnsupportedEnvironmentError extends DeereError {
|
|
26
|
+
constructor(specName: string, environment: string, supported: readonly string[]);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolves a request URL for the given spec and environment.
|
|
30
|
+
*
|
|
31
|
+
* @param specName Name of the OpenAPI spec (e.g. 'equipment', 'organizations').
|
|
32
|
+
* @param path Relative path starting with '/' or '?' (generated code always emits this).
|
|
33
|
+
* @param environment Environment from the DeereClient config.
|
|
34
|
+
* @returns The full URL ready for `fetch`.
|
|
35
|
+
* @throws NoServerConfigError if the spec isn't in API_SERVERS or is unavailable.
|
|
36
|
+
* @throws UnsupportedEnvironmentError if the spec is static and the env isn't in its map.
|
|
37
|
+
* @throws Error if the path doesn't start with '/' or '?' (developer error guard).
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveRequestUrl(specName: SpecName | string, path: string, environment: Environment): string;
|
|
40
|
+
//# sourceMappingURL=environment-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-resolver.d.ts","sourceRoot":"","sources":["../src/environment-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAuB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9D;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;gBACrC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAY9C;AAED;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,UAAU;gBAC7C,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE;CAchF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAC3B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,GACvB,MAAM,CAmCR"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime URL resolver for spec-aware requests.
|
|
3
|
+
*
|
|
4
|
+
* Pure, deterministic, and side-effect-free. Every DeereClient request goes
|
|
5
|
+
* through `resolveRequestUrl` to turn a (spec, path, environment) tuple into
|
|
6
|
+
* a full URL — or throw a clear, actionable error before any HTTP call.
|
|
7
|
+
*
|
|
8
|
+
* Design note: no heuristics, no silent fallbacks. If the spec's static map
|
|
9
|
+
* doesn't cover the current environment, we throw. Sandbox vs prod is a
|
|
10
|
+
* trust boundary — falling back silently could delete customer data.
|
|
11
|
+
*/
|
|
12
|
+
import { API_SERVERS } from './api-servers.generated.js';
|
|
13
|
+
import { CLIENT_ERROR_STATUS, DeereError } from './errors.js';
|
|
14
|
+
/**
|
|
15
|
+
* Thrown when a spec has no server configuration (missing/malformed
|
|
16
|
+
* servers block, or generator classified it as 'unavailable').
|
|
17
|
+
*/
|
|
18
|
+
export class NoServerConfigError extends DeereError {
|
|
19
|
+
constructor(specName, reason) {
|
|
20
|
+
super(`Spec '${specName}' has no server configuration.${reason
|
|
21
|
+
? ` ${reason}`
|
|
22
|
+
: " Its OpenAPI file is missing a 'servers' block or has a malformed URL."}`, CLIENT_ERROR_STATUS, 'NoServerConfig');
|
|
23
|
+
this.name = 'NoServerConfigError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Thrown when a spec is available but does not support the requested
|
|
28
|
+
* environment. The error message lists supported envs + concrete alternatives.
|
|
29
|
+
*/
|
|
30
|
+
export class UnsupportedEnvironmentError extends DeereError {
|
|
31
|
+
constructor(specName, environment, supported) {
|
|
32
|
+
const supportedList = supported.length > 0 ? supported.join(', ') : '(none)';
|
|
33
|
+
super(`The '${specName}' API does not support environment '${environment}'.\n\n` +
|
|
34
|
+
`Supported environments for this spec: ${supportedList}.\n\n` +
|
|
35
|
+
`This usually means the underlying JD backend has a different tier ` +
|
|
36
|
+
`structure than the platform APIs (the ISG proxy uses qual/cert/prod ` +
|
|
37
|
+
`tiers, with no sandbox or dev tier). For testing, try environment ` +
|
|
38
|
+
`'apiqa.tal' (qual tier). For production, use 'api' (prod tier).`, CLIENT_ERROR_STATUS, 'UnsupportedEnvironment');
|
|
39
|
+
this.name = 'UnsupportedEnvironmentError';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolves a request URL for the given spec and environment.
|
|
44
|
+
*
|
|
45
|
+
* @param specName Name of the OpenAPI spec (e.g. 'equipment', 'organizations').
|
|
46
|
+
* @param path Relative path starting with '/' or '?' (generated code always emits this).
|
|
47
|
+
* @param environment Environment from the DeereClient config.
|
|
48
|
+
* @returns The full URL ready for `fetch`.
|
|
49
|
+
* @throws NoServerConfigError if the spec isn't in API_SERVERS or is unavailable.
|
|
50
|
+
* @throws UnsupportedEnvironmentError if the spec is static and the env isn't in its map.
|
|
51
|
+
* @throws Error if the path doesn't start with '/' or '?' (developer error guard).
|
|
52
|
+
*/
|
|
53
|
+
export function resolveRequestUrl(specName, path, environment) {
|
|
54
|
+
// Defensive invariant: generated code always emits paths with a leading '/'.
|
|
55
|
+
// This guard catches manual callers passing `client.get('spec', 'relative')`
|
|
56
|
+
// by mistake, turning a silent 404 on `host+relative` into a clear error.
|
|
57
|
+
if (path && !path.startsWith('/') && !path.startsWith('?')) {
|
|
58
|
+
throw new Error(`Invalid path '${path}': must start with '/' (e.g., '/organizations') ` +
|
|
59
|
+
`or '?' for query-only paths.`);
|
|
60
|
+
}
|
|
61
|
+
const config = API_SERVERS[specName];
|
|
62
|
+
if (!config) {
|
|
63
|
+
throw new NoServerConfigError(specName);
|
|
64
|
+
}
|
|
65
|
+
if (config.kind === 'unavailable') {
|
|
66
|
+
throw new NoServerConfigError(specName, config.reason);
|
|
67
|
+
}
|
|
68
|
+
if (config.kind === 'templated') {
|
|
69
|
+
const baseUrl = config.urlTemplate.replace('{environment}', environment);
|
|
70
|
+
return `${baseUrl}${path}`;
|
|
71
|
+
}
|
|
72
|
+
// kind === 'static' — partial map, throw on unsupported env
|
|
73
|
+
const baseUrl = config.urlByEnvironment[environment];
|
|
74
|
+
if (!baseUrl) {
|
|
75
|
+
throw new UnsupportedEnvironmentError(specName, environment, Object.keys(config.urlByEnvironment));
|
|
76
|
+
}
|
|
77
|
+
return `${baseUrl}${path}`;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=environment-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-resolver.js","sourceRoot":"","sources":["../src/environment-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAmC,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9D;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,UAAU;IACjD,YAAY,QAAgB,EAAE,MAAe;QAC3C,KAAK,CACH,SAAS,QAAQ,iCACf,MAAM;YACJ,CAAC,CAAC,IAAI,MAAM,EAAE;YACd,CAAC,CAAC,wEACN,EAAE,EACF,mBAAmB,EACnB,gBAAgB,CACjB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,2BAA4B,SAAQ,UAAU;IACzD,YAAY,QAAgB,EAAE,WAAmB,EAAE,SAA4B;QAC7E,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7E,KAAK,CACH,QAAQ,QAAQ,uCAAuC,WAAW,QAAQ;YACxE,yCAAyC,aAAa,OAAO;YAC7D,oEAAoE;YACpE,sEAAsE;YACtE,oEAAoE;YACpE,iEAAiE,EACnE,mBAAmB,EACnB,wBAAwB,CACzB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA2B,EAC3B,IAAY,EACZ,WAAwB;IAExB,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,iBAAiB,IAAI,kDAAkD;YACrE,8BAA8B,CACjC,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,QAAoB,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QACzE,OAAO,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,4DAA4D;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,2BAA2B,CACnC,QAAQ,EACR,WAAW,EACX,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACrC,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;AAC7B,CAAC"}
|