deere-sdk 1.0.10 → 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 +139 -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 +95 -47
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +196 -105
- 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 +9 -0
- package/dist/hateoas-map.d.ts.map +1 -1
- package/dist/hateoas-map.js +84 -37
- package/dist/hateoas-map.js.map +1 -1
- package/package.json +3 -2
- 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,52 +2,64 @@
|
|
|
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
|
-
export class HateoasError extends Error {
|
|
34
|
-
path;
|
|
35
|
-
cause;
|
|
36
|
-
constructor(message, path, cause) {
|
|
37
|
-
super(message);
|
|
38
|
-
this.path = path;
|
|
39
|
-
this.cause = cause;
|
|
40
|
-
this.name = 'HateoasError';
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const ENVIRONMENT_URLS = {
|
|
44
|
-
production: 'https://api.deere.com/platform',
|
|
45
|
-
sandbox: 'https://sandboxapi.deere.com/platform',
|
|
46
|
-
partner: 'https://partnerapi.deere.com/platform',
|
|
47
|
-
cert: 'https://apicert.deere.com/platform',
|
|
48
|
-
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',
|
|
49
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 };
|
|
50
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;
|
|
51
63
|
/** HTTP status codes that are safe to retry */
|
|
52
64
|
const RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);
|
|
53
65
|
import { HATEOAS_MAP } from './hateoas-map.js';
|
|
@@ -76,11 +88,12 @@ class LinkCache {
|
|
|
76
88
|
* ```typescript
|
|
77
89
|
* const client = new DeereClient({
|
|
78
90
|
* accessToken: 'your-token',
|
|
79
|
-
* environment: 'sandbox'
|
|
91
|
+
* environment: 'sandboxapi', // v2: raw JD subdomain, not 'sandbox'
|
|
80
92
|
* maxRetries: 3, // Retries with exponential backoff (default: 3)
|
|
81
93
|
* });
|
|
82
94
|
*
|
|
83
|
-
*
|
|
95
|
+
* // v2: first arg is the spec name (generated classes do this for you)
|
|
96
|
+
* const orgs = await client.get('organizations', '/organizations');
|
|
84
97
|
* ```
|
|
85
98
|
*
|
|
86
99
|
* @remarks
|
|
@@ -90,7 +103,7 @@ class LinkCache {
|
|
|
90
103
|
* Set `maxRetries: 0` to disable automatic retries.
|
|
91
104
|
*/
|
|
92
105
|
export class DeereClient {
|
|
93
|
-
|
|
106
|
+
environment;
|
|
94
107
|
accessToken;
|
|
95
108
|
fetchFn;
|
|
96
109
|
defaultHeaders;
|
|
@@ -101,7 +114,7 @@ export class DeereClient {
|
|
|
101
114
|
linkCache = new LinkCache();
|
|
102
115
|
constructor(config) {
|
|
103
116
|
this.accessToken = config.accessToken;
|
|
104
|
-
this.
|
|
117
|
+
this.environment = this.validateEnvironment(config.environment);
|
|
105
118
|
this.fetchFn = config.fetch ?? fetch;
|
|
106
119
|
this.timeout = config.timeout ?? 30000;
|
|
107
120
|
this.hateoas = config.hateoas ?? false;
|
|
@@ -118,82 +131,127 @@ export class DeereClient {
|
|
|
118
131
|
};
|
|
119
132
|
}
|
|
120
133
|
/**
|
|
121
|
-
*
|
|
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.
|
|
137
|
+
*/
|
|
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);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
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.
|
|
122
154
|
*/
|
|
123
|
-
async get(path, options) {
|
|
124
|
-
return this.request('GET', path, undefined, options);
|
|
155
|
+
async get(specName, path, options) {
|
|
156
|
+
return this.request(specName, 'GET', path, undefined, options);
|
|
125
157
|
}
|
|
126
158
|
/**
|
|
127
|
-
*
|
|
159
|
+
* POST request, spec-aware.
|
|
128
160
|
*/
|
|
129
|
-
async post(path, body, options) {
|
|
130
|
-
return this.request('POST', path, body, options);
|
|
161
|
+
async post(specName, path, body, options) {
|
|
162
|
+
return this.request(specName, 'POST', path, body, options);
|
|
131
163
|
}
|
|
132
164
|
/**
|
|
133
|
-
*
|
|
165
|
+
* PUT request, spec-aware.
|
|
134
166
|
*/
|
|
135
|
-
async put(path, body, options) {
|
|
136
|
-
return this.request('PUT', path, body, options);
|
|
167
|
+
async put(specName, path, body, options) {
|
|
168
|
+
return this.request(specName, 'PUT', path, body, options);
|
|
137
169
|
}
|
|
138
170
|
/**
|
|
139
|
-
*
|
|
171
|
+
* DELETE request, spec-aware.
|
|
140
172
|
*/
|
|
141
|
-
async delete(path, options) {
|
|
142
|
-
return this.request('DELETE', path, undefined, options);
|
|
173
|
+
async delete(specName, path, options) {
|
|
174
|
+
return this.request(specName, 'DELETE', path, undefined, options);
|
|
143
175
|
}
|
|
144
176
|
/**
|
|
145
|
-
*
|
|
177
|
+
* PATCH request, spec-aware.
|
|
146
178
|
*/
|
|
147
|
-
async patch(path, body, options) {
|
|
148
|
-
return this.request('PATCH', path, body, options);
|
|
179
|
+
async patch(specName, path, body, options) {
|
|
180
|
+
return this.request(specName, 'PATCH', path, body, options);
|
|
149
181
|
}
|
|
150
182
|
/**
|
|
151
|
-
*
|
|
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.
|
|
152
209
|
*/
|
|
153
210
|
async followLink(link, options) {
|
|
154
211
|
const uri = typeof link === 'string' ? link : link.uri;
|
|
155
|
-
|
|
156
|
-
const url = uri.startsWith('http') ? uri : `${this.baseUrl}${uri}`;
|
|
157
|
-
return this.requestUrl('GET', url, undefined, options);
|
|
212
|
+
return this.fetchUrl('GET', uri, undefined, options);
|
|
158
213
|
}
|
|
159
214
|
/**
|
|
160
|
-
* 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`.
|
|
161
218
|
*/
|
|
162
|
-
async *paginate(path, options) {
|
|
219
|
+
async *paginate(specName, path, options) {
|
|
220
|
+
// First page: resolve via the spec (templated or static lookup).
|
|
163
221
|
let url = this.hateoas
|
|
164
|
-
? await this.resolveHateoasUrl(path)
|
|
165
|
-
:
|
|
222
|
+
? await this.resolveHateoasUrl(specName, path)
|
|
223
|
+
: resolveRequestUrl(specName, path, this.environment);
|
|
224
|
+
let isFirstPage = true;
|
|
166
225
|
while (url) {
|
|
167
|
-
|
|
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);
|
|
168
232
|
if (response.values && response.values.length > 0) {
|
|
169
233
|
yield response.values;
|
|
170
234
|
}
|
|
171
|
-
// Find nextPage link
|
|
235
|
+
// Find nextPage link — always absolute in JD's HAL responses.
|
|
172
236
|
const nextPageLink = response.links?.find((l) => l.rel === 'nextPage');
|
|
173
237
|
url = nextPageLink?.uri;
|
|
238
|
+
isFirstPage = false;
|
|
174
239
|
}
|
|
175
240
|
}
|
|
176
241
|
/**
|
|
177
|
-
* Get all items from a paginated endpoint
|
|
242
|
+
* Get all items from a paginated endpoint, spec-aware.
|
|
178
243
|
*/
|
|
179
|
-
async getAll(path, options) {
|
|
244
|
+
async getAll(specName, path, options) {
|
|
180
245
|
const items = [];
|
|
181
|
-
for await (const page of this.paginate(path, options)) {
|
|
246
|
+
for await (const page of this.paginate(specName, path, options)) {
|
|
182
247
|
items.push(...page);
|
|
183
248
|
}
|
|
184
249
|
return items;
|
|
185
250
|
}
|
|
186
|
-
async request(method, path, body, options) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
191
|
-
else if (this.hateoas) {
|
|
192
|
-
url = await this.resolveHateoasUrl(path);
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
url = `${this.baseUrl}${path}`;
|
|
196
|
-
}
|
|
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);
|
|
197
255
|
return this.requestUrl(method, url, body, options);
|
|
198
256
|
}
|
|
199
257
|
async requestUrl(method, url, body, options) {
|
|
@@ -204,13 +262,25 @@ export class DeereClient {
|
|
|
204
262
|
const controller = new AbortController();
|
|
205
263
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
206
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);
|
|
207
281
|
const response = await this.fetchFn(url, {
|
|
208
282
|
method,
|
|
209
|
-
headers
|
|
210
|
-
...this.defaultHeaders,
|
|
211
|
-
Authorization: `Bearer ${this.accessToken}`,
|
|
212
|
-
...options?.headers,
|
|
213
|
-
},
|
|
283
|
+
headers,
|
|
214
284
|
body: body ? JSON.stringify(body) : undefined,
|
|
215
285
|
signal: options?.signal ?? controller.signal,
|
|
216
286
|
});
|
|
@@ -290,12 +360,14 @@ export class DeereClient {
|
|
|
290
360
|
/**
|
|
291
361
|
* Pre-fetch parent resources to warm the HATEOAS link cache.
|
|
292
362
|
* Reduces latency for subsequent HATEOAS-resolved requests.
|
|
293
|
-
*
|
|
363
|
+
*
|
|
364
|
+
* @param specName - Spec that owns the paths (e.g. 'organizations')
|
|
365
|
+
* @param paths - Parent resource paths to pre-fetch (defaults to '/organizations')
|
|
294
366
|
*/
|
|
295
|
-
async warmLinkCache(paths = ['/organizations']) {
|
|
367
|
+
async warmLinkCache(specName, paths = ['/organizations']) {
|
|
296
368
|
for (const path of paths) {
|
|
297
369
|
try {
|
|
298
|
-
const url =
|
|
370
|
+
const url = resolveRequestUrl(specName, path, this.environment);
|
|
299
371
|
const response = await this.requestUrl('GET', url);
|
|
300
372
|
if (response?.links) {
|
|
301
373
|
this.linkCache.set(path, response.links);
|
|
@@ -308,7 +380,9 @@ export class DeereClient {
|
|
|
308
380
|
}
|
|
309
381
|
/**
|
|
310
382
|
* Match a concrete path against the HATEOAS route map.
|
|
311
|
-
* Returns the concrete parent path
|
|
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.
|
|
312
386
|
*/
|
|
313
387
|
matchHateoasPattern(concretePath) {
|
|
314
388
|
const concreteSegments = concretePath.split('/').filter(Boolean);
|
|
@@ -330,31 +404,48 @@ export class DeereClient {
|
|
|
330
404
|
const parentSegments = route.parentPath.split('/').filter(Boolean);
|
|
331
405
|
const concreteParentParts = parentSegments.map((seg, i) => seg.startsWith('{') ? concreteSegments[i] : seg);
|
|
332
406
|
const concreteParentPath = `/${concreteParentParts.join('/')}`;
|
|
333
|
-
|
|
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
|
+
};
|
|
334
416
|
}
|
|
335
417
|
}
|
|
336
418
|
return null;
|
|
337
419
|
}
|
|
338
420
|
/**
|
|
339
|
-
* Resolve a path via HATEOAS link traversal.
|
|
340
|
-
*
|
|
341
|
-
*
|
|
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.
|
|
342
429
|
*/
|
|
343
|
-
async resolveHateoasUrl(path) {
|
|
430
|
+
async resolveHateoasUrl(specName, path) {
|
|
344
431
|
// Strip query params for matching, reattach after
|
|
345
432
|
const [basePath, queryString] = path.split('?', 2);
|
|
346
433
|
const match = this.matchHateoasPattern(basePath);
|
|
347
434
|
if (!match) {
|
|
348
|
-
// No map entry —
|
|
349
|
-
return
|
|
435
|
+
// No map entry — resolve directly via the caller's spec.
|
|
436
|
+
return resolveRequestUrl(specName, path, this.environment);
|
|
350
437
|
}
|
|
351
|
-
const { concreteParentPath, rel } = match;
|
|
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;
|
|
352
443
|
// Check cache
|
|
353
444
|
let discoveredUrl = this.linkCache.findRel(concreteParentPath, rel);
|
|
354
445
|
if (!discoveredUrl) {
|
|
355
|
-
// Cache miss — fetch parent resource
|
|
446
|
+
// Cache miss — fetch parent resource via its OWN spec's host.
|
|
356
447
|
try {
|
|
357
|
-
const parentUrl =
|
|
448
|
+
const parentUrl = resolveRequestUrl(effectiveParentSpec, concreteParentPath, this.environment);
|
|
358
449
|
const parentResponse = await this.requestUrl('GET', parentUrl);
|
|
359
450
|
if (parentResponse?.links) {
|
|
360
451
|
this.linkCache.set(concreteParentPath, parentResponse.links);
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EACL,mBAAmB,EAEnB,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAK9D;;;;GAIG;AACH,MAAM,mBAAmB,GAAgC;IACvD,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,SAAS;IACf,EAAE,EAAE,WAAW;CAChB,CAAC;AA8EF,oEAAoE;AACpE,8EAA8E;AAC9E,4EAA4E;AAC5E,4CAA4C;AAC5C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/D,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,8BAA8B,CAAC;AAErD,+CAA+C;AAC/C,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,SAAS;IACL,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,GAAG,CAAC,UAAkB,EAAE,KAAa;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,UAAkB,EAAE,GAAW;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;IAC/C,CAAC;IAED,GAAG,CAAC,UAAkB;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,WAAW;IACL,WAAW,CAAc;IACzB,WAAW,CAAS;IACpB,OAAO,CAAe;IACtB,cAAc,CAAyB;IACvC,OAAO,CAAS;IAChB,WAAW,CAAc;IACzB,OAAO,CAAU;IACjB,YAAY,CAAU;IACtB,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAE7C,YAAY,MAAyB;QACnC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC;QACjD,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;;;;OAIG;IACK,mBAAmB,CAAC,GAAuB;QACjD,MAAM,GAAG,GAAG,GAAG,IAAI,mBAAmB,CAAC;QACvC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAkB,CAAC,EAAE,CAAC;YACpD,OAAO,GAAkB,CAAC;QAC5B,CAAC;QACD,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,aAAa;YACjC,CAAC,CAAC,0EAA0E;gBAC1E,QAAQ,aAAa,iBAAiB,GAAG,yCAAyC;YACpF,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,oBAAoB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAC7E,aAAa,CAChB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAc,QAAkB,EAAE,IAAY,EAAE,OAAwB;QAC/E,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CACR,QAAkB,EAClB,IAAY,EACZ,IAAc,EACd,OAAwB;QAExB,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,QAAkB,EAClB,IAAY,EACZ,IAAc,EACd,OAAwB;QAExB,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,QAAkB,EAClB,IAAY,EACZ,OAAwB;QAExB,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,QAAkB,EAClB,IAAY,EACZ,IAAc,EACd,OAAwB;QAExB,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAQ,CACZ,MAAc,EACd,GAAW,EACX,IAAc,EACd,OAAwB;QAExB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CACV,0BAA0B,QAAQ,uCAAuC;gBACvE,0EAA0E;gBAC1E,YAAY,CACf,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAA2B;YAC3C,GAAG,OAAO;YACV,OAAO,EAAE,CAAC,SAAS;SACpB,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAI,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;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,OAAO,IAAI,CAAC,QAAQ,CAAI,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,CAAC,QAAQ,CACb,QAAkB,EAClB,IAAY,EACZ,OAAwB;QAExB,iEAAiE;QACjE,IAAI,GAAG,GAAuB,IAAI,CAAC,OAAO;YACxC,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC9C,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,WAAW,GAAG,IAAI,CAAC;QAEvB,OAAO,GAAG,EAAE,CAAC;YACX,qEAAqE;YACrE,sEAAsE;YACtE,kDAAkD;YAClD,MAAM,QAAQ,GAAyB,WAAW;gBAChD,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAuB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC;gBAC7E,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAuB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAE9E,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxB,CAAC;YAED,8DAA8D;YAC9D,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;YACxB,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAI,QAAkB,EAAE,IAAY,EAAE,OAAwB;QACxE,MAAM,KAAK,GAAQ,EAAE,CAAC;QACtB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAI,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACnE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,QAAkB,EAClB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,OAAwB;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;YACtB,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC9C,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,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,gEAAgE;gBAChE,kEAAkE;gBAClE,kEAAkE;gBAClE,mEAAmE;gBACnE,0BAA0B;gBAC1B,MAAM,WAAW,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;gBAC3C,MAAM,OAAO,GAA2B;oBACtC,GAAG,IAAI,CAAC,cAAc;iBACvB,CAAC;gBACF,IACE,CAAE,OAA8C,EAAE,OAAO;oBACzD,WAAW,CAAC,aAAa,KAAK,SAAS,EACvC,CAAC;oBACD,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvD,CAAC;gBACD,mEAAmE;gBACnE,gDAAgD;gBAChD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;oBACvC,MAAM;oBACN,OAAO;oBACP,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;IACH,cAAc;QACZ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CAAC,QAAkB,EAAE,QAAkB,CAAC,gBAAgB,CAAC;QAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAqB,KAAK,EAAE,GAAG,CAAC,CAAC;gBACvE,IAAI,QAAQ,EAAE,KAAK,EAAE,CAAC;oBACpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,mBAAmB,CACzB,YAAoB;QAEpB,MAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEjE,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE3D,IAAI,gBAAgB,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM;gBAAE,SAAS;YAEjE,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChD,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS,CAAC,WAAW;gBAC7D,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/C,OAAO,GAAG,KAAK,CAAC;oBAChB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,+DAA+D;gBAC/D,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnE,MAAM,mBAAmB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACxD,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAChD,CAAC;gBACF,MAAM,kBAAkB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAE/D,iEAAiE;gBACjE,kEAAkE;gBAClE,oDAAoD;gBACpD,MAAM,mBAAmB,GAAG,KAAiD,CAAC;gBAC9E,OAAO;oBACL,kBAAkB;oBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,UAAU,EAAE,mBAAmB,CAAC,UAAU;iBAC3C,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;OASG;IACK,KAAK,CAAC,iBAAiB,CAAC,QAAkB,EAAE,IAAY;QAC9D,kDAAkD;QAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAEjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,yDAAyD;YACzD,OAAO,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QACtD,wEAAwE;QACxE,0EAA0E;QAC1E,yDAAyD;QACzD,MAAM,mBAAmB,GAAa,UAAU,IAAI,QAAQ,CAAC;QAE7D,cAAc;QACd,IAAI,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAEpE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,8DAA8D;YAC9D,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,iBAAiB,CACjC,mBAAmB,EACnB,kBAAkB,EAClB,IAAI,CAAC,WAAW,CACjB,CAAC;gBACF,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAqB,KAAK,EAAE,SAAS,CAAC,CAAC;gBAEnF,IAAI,cAAc,EAAE,KAAK,EAAE,CAAC;oBAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC7D,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,YAAY,CACpB,+DAA+D,kBAAkB,GAAG,EACpF,IAAI,EACJ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC3D,MAAM,IAAI,YAAY,CACpB,sCAAsC,kBAAkB,2BAA2B,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,6BAA6B,EAAE,EAC5I,IAAI,CACL,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QAEpF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CACT,aAAa,IAAI,cAAc,kBAAkB,UAAU,GAAG,MAAM,WAAW,EAAE,CAClF,CAAC;QACJ,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,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"}
|
|
@@ -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"}
|