@xapp/stentor-service-fieldroutes 0.0.1 → 1.90.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -14
- package/lib/FieldRoutesService.d.ts +13 -4
- package/lib/FieldRoutesService.js +36 -16
- package/lib/FieldRoutesService.js.map +1 -1
- package/lib/util.d.ts +13 -1
- package/lib/util.js +35 -2
- package/lib/util.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -4,17 +4,22 @@ Implementation of `CrmService` for [FieldRoutes](https://api.fieldroutes.com/ind
|
|
|
4
4
|
|
|
5
5
|
### Status
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
Transport confirmed, write-side pending a live office. The `CrmService` surface (`send`,
|
|
8
|
+
`getAvailability`) is implemented, and the HTTP transport is verified against FieldRoutes' own
|
|
9
|
+
API-explorer client ([`APIModule.js`](https://api.fieldroutes.com/resources/APIModule.js)): every
|
|
10
|
+
call is `POST {base}/{entity}/{action}` with an `application/x-www-form-urlencoded` body carrying
|
|
11
|
+
`authenticationKey`/`authenticationToken`, and the response envelope is `{ success, errorMessage }`.
|
|
12
|
+
Still to confirm against a real office: the exact required fields for customer create/update and
|
|
13
|
+
appointment booking, and the API host (`fieldroutes.com` vs `pestroutes.com` — set `apiDomain`).
|
|
14
|
+
Everything HTTP flows through the single `request()` method in `FieldRoutesService`, so any remaining
|
|
15
|
+
adjustment is localized. See `FieldRoutesService.ftest.ts` for the live verification.
|
|
12
16
|
|
|
13
17
|
### Configuration
|
|
14
18
|
|
|
15
19
|
`FieldRoutesService` is constructed with:
|
|
16
20
|
|
|
17
21
|
- `subdomain` — the office subdomain, e.g. `acmepest` → `https://acmepest.fieldroutes.com/api`
|
|
22
|
+
- `apiDomain` (optional) — API host, defaults to `fieldroutes.com`; set to `pestroutes.com` for legacy offices
|
|
18
23
|
- `authenticate()` — returns `{ authenticationKey, authenticationToken }` (office-scoped credentials)
|
|
19
24
|
- `appId` — the Studio app id
|
|
20
25
|
- `sourceID` (optional) — FieldRoutes lead source id to stamp on created customers
|
|
@@ -28,18 +33,30 @@ the transport is a localized change. Search the source for `TODO` and `NOTE:`.
|
|
|
28
33
|
2. Updates the match or creates a new customer (`customer/update` / `customer/create`).
|
|
29
34
|
3. If the lead carries a `DATETIME`, books an appointment (`appointment/create`) — non-fatal on failure.
|
|
30
35
|
|
|
31
|
-
###
|
|
36
|
+
### Confirmed vs. still open
|
|
32
37
|
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
+
Confirmed from the API-explorer client + a live probe of the sandbox host:
|
|
39
|
+
|
|
40
|
+
- Auth: `authenticationKey`/`authenticationToken` are **form fields** in the POST body.
|
|
41
|
+
- Search: `customer/search` is **POST** and returns an **id list** (conventionally `customerIDs`),
|
|
42
|
+
not full records — resolve records with a follow-up `{entity}/get` if ever needed.
|
|
43
|
+
- Envelope: failure is signaled by `success: false` **or** a populated `errorMessage`.
|
|
44
|
+
|
|
45
|
+
Still needs a live office (tracked in stentor-core #5247):
|
|
46
|
+
|
|
47
|
+
- Create/update/appointment: the exact **required fields** to create a customer and book an appointment
|
|
48
|
+
(appointment type, subscription/service, route/spot, duration?).
|
|
49
|
+
- Host: whether production offices resolve on `fieldroutes.com` or `pestroutes.com` (`apiDomain`).
|
|
50
|
+
- Availability: whether `getAvailability` should be backed by route capacity / `appointment/search`
|
|
51
|
+
instead of the current always-open default.
|
|
38
52
|
|
|
39
53
|
### Testing
|
|
40
54
|
|
|
41
55
|
```bash
|
|
42
|
-
|
|
43
|
-
|
|
56
|
+
# Mocked unit tests (no credentials required)
|
|
57
|
+
yarn workspace @xapp/stentor-service-fieldroutes test
|
|
44
58
|
|
|
45
|
-
|
|
59
|
+
# Live smoke test against a real office (skipped unless FIELDROUTES_* env is set)
|
|
60
|
+
FIELDROUTES_SUBDOMAIN=acmepest FIELDROUTES_KEY=… FIELDROUTES_TOKEN=… \
|
|
61
|
+
yarn workspace @xapp/stentor-service-fieldroutes local
|
|
62
|
+
```
|
|
@@ -22,6 +22,12 @@ export interface FieldRoutesServiceProps extends BaseService, CrmServiceAvailabi
|
|
|
22
22
|
* The office subdomain, e.g. "acmepest" -> https://acmepest.fieldroutes.com/api
|
|
23
23
|
*/
|
|
24
24
|
subdomain: string;
|
|
25
|
+
/**
|
|
26
|
+
* API host domain. Defaults to "fieldroutes.com". Legacy/PestRoutes offices are served from
|
|
27
|
+
* "pestroutes.com" (the API explorer's sandbox is `stagingdemo.pestroutes.com`), so this is
|
|
28
|
+
* configurable per office until we confirm which host a given tenant resolves to.
|
|
29
|
+
*/
|
|
30
|
+
apiDomain?: string;
|
|
25
31
|
channel?: string;
|
|
26
32
|
authenticate: FieldRoutesAuthenticator;
|
|
27
33
|
openAI?: {
|
|
@@ -39,10 +45,13 @@ export interface FieldRoutesServiceProps extends BaseService, CrmServiceAvailabi
|
|
|
39
45
|
/**
|
|
40
46
|
* CrmService implementation for FieldRoutes.
|
|
41
47
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
48
|
+
* Transport is confirmed against FieldRoutes' own API-explorer client
|
|
49
|
+
* (https://api.fieldroutes.com/resources/APIModule.js): calls are `POST {base}/{entity}/{action}`
|
|
50
|
+
* with an `application/x-www-form-urlencoded` body carrying `authenticationKey`/`authenticationToken`,
|
|
51
|
+
* and the response envelope is `{ success, errorMessage }`. What still needs a live office to confirm:
|
|
52
|
+
* the exact write-side required fields (customer create/update, appointment booking) and the API host
|
|
53
|
+
* (fieldroutes.com vs pestroutes.com — see {@link FieldRoutesServiceProps.apiDomain}).
|
|
54
|
+
* All HTTP is centralized in {@link FieldRoutesService.request} to keep any remaining tweaks localized.
|
|
46
55
|
*/
|
|
47
56
|
export declare class FieldRoutesService extends FetchService implements CrmService {
|
|
48
57
|
private props;
|
|
@@ -19,14 +19,20 @@ const stentor_logger_1 = require("stentor-logger");
|
|
|
19
19
|
const axios_1 = __importDefault(require("axios"));
|
|
20
20
|
const addresser_1 = require("addresser");
|
|
21
21
|
const util_1 = require("./util");
|
|
22
|
+
// Form-encoded transport: FieldRoutes' own API-explorer client posts every call as
|
|
23
|
+
// application/x-www-form-urlencoded and expects a JSON response.
|
|
24
|
+
const FORM_HEADERS = { Accept: "application/json", "Content-Type": "application/x-www-form-urlencoded" };
|
|
22
25
|
const CRM_DEBUG = process.env.CRM_DEBUG === "true";
|
|
23
26
|
/**
|
|
24
27
|
* CrmService implementation for FieldRoutes.
|
|
25
28
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
29
|
+
* Transport is confirmed against FieldRoutes' own API-explorer client
|
|
30
|
+
* (https://api.fieldroutes.com/resources/APIModule.js): calls are `POST {base}/{entity}/{action}`
|
|
31
|
+
* with an `application/x-www-form-urlencoded` body carrying `authenticationKey`/`authenticationToken`,
|
|
32
|
+
* and the response envelope is `{ success, errorMessage }`. What still needs a live office to confirm:
|
|
33
|
+
* the exact write-side required fields (customer create/update, appointment booking) and the API host
|
|
34
|
+
* (fieldroutes.com vs pestroutes.com — see {@link FieldRoutesServiceProps.apiDomain}).
|
|
35
|
+
* All HTTP is centralized in {@link FieldRoutesService.request} to keep any remaining tweaks localized.
|
|
30
36
|
*/
|
|
31
37
|
class FieldRoutesService extends stentor_service_fetch_1.FetchService {
|
|
32
38
|
constructor(props) {
|
|
@@ -37,7 +43,7 @@ class FieldRoutesService extends stentor_service_fetch_1.FetchService {
|
|
|
37
43
|
}
|
|
38
44
|
}
|
|
39
45
|
get baseUrl() {
|
|
40
|
-
return `https://${this.props.subdomain}.fieldroutes.com/api`;
|
|
46
|
+
return `https://${this.props.subdomain}.${this.props.apiDomain || "fieldroutes.com"}/api`;
|
|
41
47
|
}
|
|
42
48
|
/**
|
|
43
49
|
* getAvailability is not yet wired to FieldRoutes; returns full availability so the scheduler
|
|
@@ -170,15 +176,27 @@ class FieldRoutesService extends stentor_service_fetch_1.FetchService {
|
|
|
170
176
|
params.phone = query.phone;
|
|
171
177
|
}
|
|
172
178
|
const config = {
|
|
173
|
-
method: "
|
|
179
|
+
method: "post",
|
|
174
180
|
url: `${this.baseUrl}/customer/search`,
|
|
175
|
-
|
|
181
|
+
headers: Object.assign({}, FORM_HEADERS),
|
|
182
|
+
data: (0, util_1.toFormBody)(params)
|
|
176
183
|
};
|
|
184
|
+
// search returns ID lists, not full records. The id array lives under a server-named
|
|
185
|
+
// `propertyName` (conventionally `customerIDs`); read that, falling back to the pointer.
|
|
177
186
|
const response = yield this.request(config, "customer/search");
|
|
178
187
|
if (response.status === "Failure") {
|
|
179
|
-
return response;
|
|
188
|
+
return { status: "Failure", error: response.error };
|
|
189
|
+
}
|
|
190
|
+
const body = response.data;
|
|
191
|
+
const idList = (_a = body === null || body === void 0 ? void 0 : body.customerIDs) !== null && _a !== void 0 ? _a : ((body === null || body === void 0 ? void 0 : body.propertyName) ? body[body.propertyName] : undefined);
|
|
192
|
+
// Guard: the server could name a propertyName that isn't array-valued. Treat anything
|
|
193
|
+
// non-array as "no matches" rather than throwing out of this public method — but a
|
|
194
|
+
// present-but-non-array value is an unexpected shape, not a genuine empty result, and
|
|
195
|
+
// silently degrading to "no match" would create a duplicate customer. Log so it's visible.
|
|
196
|
+
if (idList !== undefined && idList !== null && !Array.isArray(idList)) {
|
|
197
|
+
(0, stentor_logger_1.log)().warn(`FieldRoutes: customer/search id list was not an array; treating as no matches: ${JSON.stringify(idList)}`);
|
|
180
198
|
}
|
|
181
|
-
const ids = (
|
|
199
|
+
const ids = Array.isArray(idList) ? idList.map((id) => `${id}`) : [];
|
|
182
200
|
return { status: "Success", data: ids };
|
|
183
201
|
});
|
|
184
202
|
}
|
|
@@ -193,8 +211,8 @@ class FieldRoutesService extends stentor_service_fetch_1.FetchService {
|
|
|
193
211
|
const config = {
|
|
194
212
|
method: "post",
|
|
195
213
|
url: `${this.baseUrl}/customer/create`,
|
|
196
|
-
headers: {
|
|
197
|
-
data:
|
|
214
|
+
headers: Object.assign({}, FORM_HEADERS),
|
|
215
|
+
data: (0, util_1.toFormBody)(data)
|
|
198
216
|
};
|
|
199
217
|
const response = yield this.request(config, "customer/create");
|
|
200
218
|
if (response.status === "Failure") {
|
|
@@ -213,8 +231,8 @@ class FieldRoutesService extends stentor_service_fetch_1.FetchService {
|
|
|
213
231
|
const config = {
|
|
214
232
|
method: "post",
|
|
215
233
|
url: `${this.baseUrl}/customer/update`,
|
|
216
|
-
headers: {
|
|
217
|
-
data:
|
|
234
|
+
headers: Object.assign({}, FORM_HEADERS),
|
|
235
|
+
data: (0, util_1.toFormBody)(data)
|
|
218
236
|
};
|
|
219
237
|
const response = yield this.request(config, "customer/update");
|
|
220
238
|
if (response.status === "Failure") {
|
|
@@ -234,8 +252,8 @@ class FieldRoutesService extends stentor_service_fetch_1.FetchService {
|
|
|
234
252
|
const config = {
|
|
235
253
|
method: "post",
|
|
236
254
|
url: `${this.baseUrl}/appointment/create`,
|
|
237
|
-
headers: {
|
|
238
|
-
data:
|
|
255
|
+
headers: Object.assign({}, FORM_HEADERS),
|
|
256
|
+
data: (0, util_1.toFormBody)(data)
|
|
239
257
|
};
|
|
240
258
|
const response = yield this.request(config, "appointment/create");
|
|
241
259
|
if (response.status === "Failure") {
|
|
@@ -259,8 +277,10 @@ class FieldRoutesService extends stentor_service_fetch_1.FetchService {
|
|
|
259
277
|
if (CRM_DEBUG) {
|
|
260
278
|
(0, stentor_logger_1.log)().info(`[CRM_DEBUG] FieldRoutes ${apiCall} RESPONSE: ${JSON.stringify(response.data)}`);
|
|
261
279
|
}
|
|
280
|
+
// FieldRoutes signals failure with `success: false` OR a populated `errorMessage`
|
|
281
|
+
// (the API-explorer client rejects on either), so we honor both.
|
|
262
282
|
const body = response.data;
|
|
263
|
-
if (body && body.success === false) {
|
|
283
|
+
if (body && (body.success === false || body.errorMessage)) {
|
|
264
284
|
result.error = `[${apiCall}] ${body.errorMessage || (body.errors || []).join("; ") || "FieldRoutes API error"}`;
|
|
265
285
|
(0, stentor_logger_1.log)().error(`FieldRoutes API Error ${result.error}`);
|
|
266
286
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldRoutesService.js","sourceRoot":"","sources":["../src/FieldRoutesService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,iEAAqD;AAWrD,mDAAqC;AACrC,kDAAkD;AAClD,yCAAyD;
|
|
1
|
+
{"version":3,"file":"FieldRoutesService.js","sourceRoot":"","sources":["../src/FieldRoutesService.ts"],"names":[],"mappings":"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"}
|
package/lib/util.d.ts
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
/*! Copyright (c) 2025, XAPP AI */
|
|
2
2
|
import { AxiosRequestConfig } from "axios";
|
|
3
3
|
import { ExternalLead } from "stentor-models";
|
|
4
|
+
/**
|
|
5
|
+
* Serialize a params object into an `application/x-www-form-urlencoded` body.
|
|
6
|
+
*
|
|
7
|
+
* FieldRoutes (via the jQuery `$.post(...)` client its API explorer ships) expects form-encoded
|
|
8
|
+
* request bodies, not JSON. `undefined`/`null` values are dropped so we never send the literal
|
|
9
|
+
* strings "undefined"/"null".
|
|
10
|
+
*
|
|
11
|
+
* NOTE: values are expected to be flat scalars (every call site passes string fields). A non-primitive
|
|
12
|
+
* would coerce via `${value}` (e.g. an object → "[object Object]"); revisit with per-value handling
|
|
13
|
+
* (repeated fields / JSON) if FieldRoutes ever gains multi-value or nested custom fields.
|
|
14
|
+
*/
|
|
15
|
+
export declare function toFormBody(params: Record<string, unknown>): string;
|
|
4
16
|
/**
|
|
5
17
|
* Returns a shallow copy of an Axios config with FieldRoutes credentials masked, for safe logging.
|
|
6
18
|
*
|
|
7
|
-
* Credentials ride in
|
|
19
|
+
* Credentials ride in `params` (legacy) and the form-encoded `data` body (search/create/update),
|
|
8
20
|
* so both are scrubbed. Anything unparseable is dropped rather than logged raw.
|
|
9
21
|
*/
|
|
10
22
|
export declare function redactConfig(config: AxiosRequestConfig): Record<string, unknown>;
|
package/lib/util.js
CHANGED
|
@@ -1,13 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toFormBody = toFormBody;
|
|
3
4
|
exports.redactConfig = redactConfig;
|
|
4
5
|
exports.getName = getName;
|
|
5
6
|
exports.leadToTranscript = leadToTranscript;
|
|
6
7
|
const SECRET_KEYS = ["authenticationKey", "authenticationToken"];
|
|
8
|
+
/**
|
|
9
|
+
* Serialize a params object into an `application/x-www-form-urlencoded` body.
|
|
10
|
+
*
|
|
11
|
+
* FieldRoutes (via the jQuery `$.post(...)` client its API explorer ships) expects form-encoded
|
|
12
|
+
* request bodies, not JSON. `undefined`/`null` values are dropped so we never send the literal
|
|
13
|
+
* strings "undefined"/"null".
|
|
14
|
+
*
|
|
15
|
+
* NOTE: values are expected to be flat scalars (every call site passes string fields). A non-primitive
|
|
16
|
+
* would coerce via `${value}` (e.g. an object → "[object Object]"); revisit with per-value handling
|
|
17
|
+
* (repeated fields / JSON) if FieldRoutes ever gains multi-value or nested custom fields.
|
|
18
|
+
*/
|
|
19
|
+
function toFormBody(params) {
|
|
20
|
+
const search = new URLSearchParams();
|
|
21
|
+
for (const [key, value] of Object.entries(params)) {
|
|
22
|
+
if (value === undefined || value === null) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
search.append(key, typeof value === "string" ? value : `${value}`);
|
|
26
|
+
}
|
|
27
|
+
return search.toString();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Best-effort parse of a request body string into an object, for redacted logging only.
|
|
31
|
+
* Handles both form-encoded (our transport) and JSON payloads.
|
|
32
|
+
*/
|
|
33
|
+
function parseBody(data) {
|
|
34
|
+
const trimmed = data.trim();
|
|
35
|
+
if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
|
|
36
|
+
return JSON.parse(trimmed);
|
|
37
|
+
}
|
|
38
|
+
return Object.fromEntries(new URLSearchParams(data));
|
|
39
|
+
}
|
|
7
40
|
/**
|
|
8
41
|
* Returns a shallow copy of an Axios config with FieldRoutes credentials masked, for safe logging.
|
|
9
42
|
*
|
|
10
|
-
* Credentials ride in
|
|
43
|
+
* Credentials ride in `params` (legacy) and the form-encoded `data` body (search/create/update),
|
|
11
44
|
* so both are scrubbed. Anything unparseable is dropped rather than logged raw.
|
|
12
45
|
*/
|
|
13
46
|
function redactConfig(config) {
|
|
@@ -26,7 +59,7 @@ function redactConfig(config) {
|
|
|
26
59
|
}
|
|
27
60
|
if (typeof config.data === "string") {
|
|
28
61
|
try {
|
|
29
|
-
out.data = redact(
|
|
62
|
+
out.data = redact(parseBody(config.data));
|
|
30
63
|
}
|
|
31
64
|
catch (_a) {
|
|
32
65
|
out.data = "***unserializable***";
|
package/lib/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;AAiBA,gCASC;AAoBD,oCA4BC;AAYD,0BAwBC;AAKD,4CAYC;AA3HD,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CAAC,MAA+B;IACtD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACxC,SAAS;QACb,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,IAAY;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,MAA0B;IACnD,MAAM,MAAM,GAAG,CAAC,GAA4B,EAA2B,EAAE;QACrE,MAAM,IAAI,qBAAQ,GAAG,CAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,GAAG,GAA4B,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IAEhF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAiC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC;YACD,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,WAAM,CAAC;YACL,GAAG,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACtC,CAAC;IACL,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxD,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAA+B,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAOD;;;;GAIG;AACH,SAAgB,OAAO,CAAC,IAAkB;;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAEjC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAEzE,IAAI,cAAc,IAAI,aAAa,EAAE,CAAC;QAClC,OAAO;YACH,SAAS,EAAE,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,KAAK,mCAAI,EAAE;YACtC,QAAQ,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,mCAAI,EAAE;SACvC,CAAC;IACN,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACzE,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAA,KAAK,CAAC,GAAG,EAAE,mCAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO;YACH,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1B,QAAQ;SACX,CAAC;IACN,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,IAAkB,EAAE,KAAc;IAC/D,MAAM,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACpD,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;QAClC,MAAM,MAAM,GAAG,MAAA,CAAC,CAAC,IAAI,0CAAE,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,CAAC;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxD,UAAU,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "
|
|
7
|
+
"version": "1.90.1",
|
|
8
8
|
"description": "Service to integrate with FieldRoutes",
|
|
9
9
|
"types": "lib/index",
|
|
10
10
|
"main": "lib/index",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"axios-mock-adapter": "2.1.0",
|
|
22
22
|
"chai": "4.5.0",
|
|
23
23
|
"dotenv": "17.4.2",
|
|
24
|
-
"mocha": "11.7.
|
|
24
|
+
"mocha": "11.7.6",
|
|
25
25
|
"sinon": "21.0.0",
|
|
26
26
|
"stentor-logger": "1.74.0",
|
|
27
27
|
"stentor-models": "1.74.0",
|