@solvice/routing 0.19.2-beta.0 → 0.19.4-beta.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.
Files changed (3) hide show
  1. package/dist/runs.d.ts +67 -39
  2. package/dist/v3.d.ts +104 -45
  3. package/package.json +1 -1
package/dist/runs.d.ts CHANGED
@@ -646,10 +646,10 @@ export interface components {
646
646
  */
647
647
  preferences?: components["schemas"]["VehiclePreference"][] | null;
648
648
  /**
649
- * Format: int32
649
+ * Format: uint32
650
650
  * @description Importance of a must-serve task when not all of them fit: the solver
651
- * maximises the summed `priority` of served tasks before any cost. `>= 1`,
652
- * default `1` (maximise the count). A rank, not money — it never makes a
651
+ * maximises the summed `priority` of served tasks before any cost. `1` to
652
+ * `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
653
653
  * task droppable; use `drop_cost` for that. Both set is a 400.
654
654
  * @example 3
655
655
  */
@@ -840,7 +840,7 @@ export interface components {
840
840
  */
841
841
  max_route_duration_s?: number | null;
842
842
  /**
843
- * Format: int32
843
+ * Format: uint32
844
844
  * @description Hard cap on served stops across the period's shifts; a job counts as
845
845
  * one stop. Start, end, break and reload stops in `routes[].stops` do not
846
846
  * count; a shipment counts as two stops.
@@ -886,7 +886,7 @@ export interface components {
886
886
  */
887
887
  PlanRoute: {
888
888
  /**
889
- * Format: int32
889
+ * Format: uint32
890
890
  * @description On solve, the first `locked_count` stops stay where they are (already
891
891
  * dispatched). Counts every listed stop. Cannot be combined with a
892
892
  * `reload` stop, and must not exceed the route's stop count — both are
@@ -921,6 +921,8 @@ export interface components {
921
921
  * @example parts-9:delivery
922
922
  */
923
923
  id: string;
924
+ /** @description Pinned as on a job; pinning one leg pins both. */
925
+ pinned?: boolean;
924
926
  /**
925
927
  * @description Discriminator: always `delivery`. (enum property replaced by openapi-typescript)
926
928
  * @enum {string}
@@ -937,6 +939,19 @@ export interface components {
937
939
  * @example boiler-17
938
940
  */
939
941
  id: string;
942
+ /**
943
+ * @description On solve, pins the vehicle, not the position: the stop stays on the
944
+ * vehicle of the route it sits in (any shift of that vehicle, unless it
945
+ * belongs to a `same_day` or `same_route` group) and is never removed
946
+ * from the plan, but the search may still reorder it within the route.
947
+ * Works anywhere in a route, unlike the prefix `locked_count`. A stop
948
+ * that cannot be driven is a 400 on synchronous solve and stream, as is
949
+ * a pinned stop that shares a `same_vehicle`, `same_day` or `same_route`
950
+ * group with another pinned or locked stop the relation forbids.
951
+ * Accepted on evaluate and suggest, where it is inert. A result's `plan`
952
+ * never carries it.
953
+ */
954
+ pinned?: boolean;
940
955
  /**
941
956
  * @description Discriminator: always `job`. (enum property replaced by openapi-typescript)
942
957
  * @enum {string}
@@ -953,6 +968,8 @@ export interface components {
953
968
  * @example parts-9:pickup
954
969
  */
955
970
  id: string;
971
+ /** @description Pinned as on a job; pinning one leg pins both. */
972
+ pinned?: boolean;
956
973
  /**
957
974
  * @description Discriminator: always `pickup`. (enum property replaced by openapi-typescript)
958
975
  * @enum {string}
@@ -1129,7 +1146,7 @@ export interface components {
1129
1146
  */
1130
1147
  id: string;
1131
1148
  /**
1132
- * Format: int32
1149
+ * Format: uint32
1133
1150
  * @description The cap on counted stops; a job counts as one stop.
1134
1151
  * Start, end, break and reload stops in `routes[].stops` do not count; a
1135
1152
  * shipment counts as two stops.
@@ -1173,8 +1190,10 @@ export interface components {
1173
1190
  * its pickup. A shipment's own id in `stops`, or a shipment carrying the
1174
1191
  * `tag` of a `same_vehicle` or `same_day` relation, is rejected with HTTP 400
1175
1192
  * `not_supported`: relations never silently skip a member. `same_route`,
1176
- * `time_lag`, `compatible_vehicles`, `all_or_none` and `tag_order` reject a
1177
- * shipment with HTTP 400 as well.
1193
+ * `time_lag`, `compatible_vehicles` and `tag_order` reject a shipment with
1194
+ * HTTP 400 as well. `all_or_none` alone takes a shipment's own id, naming both
1195
+ * legs, in a group that is exactly one `consecutive` chain; such a chain may
1196
+ * also be jobs only.
1178
1197
  * @example {
1179
1198
  * "stops": [
1180
1199
  * "job-1",
@@ -1187,20 +1206,25 @@ export interface components {
1187
1206
  /**
1188
1207
  * All or none
1189
1208
  * @description All or none: either every member in `stops` is served, or none is.
1190
- * Sets no timing; combine with `synchronized` or `time_lag` for when.
1191
- * Hard. Overlapping `all_or_none` relations chain: one on A and B plus
1209
+ * Sets no timing; a coupled group takes its timing from the
1210
+ * `synchronized` or `time_lag` relation that names its members. Hard.
1211
+ * Overlapping `all_or_none` relations chain: one on A and B plus
1192
1212
  * one on B and C serve all three together or none of them. A group with
1193
- * a task in a vehicle's locked prefix (`plan.routes[].locked_count`) is
1194
- * exempt. A member that could be served but is held back because
1213
+ * a task in a vehicle's locked prefix (`plan.routes[].locked_count`) or, on solve, a
1214
+ * `pinned` plan stop is exempt. A member that could be served but is held back because
1195
1215
  * another cannot reports `all_or_none` in `unassigned[].reasons`.
1196
1216
  *
1197
- * Every task must also be named by a `synchronized` or `time_lag`
1198
- * relation; a task named by neither is rejected with HTTP 400.
1217
+ * A member may be a shipment id (both legs). Members are coupled by
1218
+ * `synchronized`/`time_lag`, or the group's stops (a shipment as its two
1219
+ * legs) are exactly one `consecutive` chain with no member coupled by
1220
+ * `synchronized` or `time_lag`, directly or through a `sequence` or
1221
+ * `consecutive` relation. A task named by neither is rejected with HTTP 400, as is a
1222
+ * shipment-leg id: name the shipment.
1199
1223
  */
1200
1224
  RelationAllOrNone: {
1201
1225
  /**
1202
- * @description Job ids, at least two. A shipment's own id or a shipment-leg stop id
1203
- * is rejected with HTTP 400.
1226
+ * @description Job ids or shipment ids, at least two. A shipment-leg stop id is
1227
+ * rejected with HTTP 400.
1204
1228
  * @example [
1205
1229
  * "job-1",
1206
1230
  * "job-2"
@@ -1248,6 +1272,7 @@ export interface components {
1248
1272
  * route. A member that is unassigned is skipped, so only listed
1249
1273
  * neighbours that are both served are adjacent. Members on different
1250
1274
  * routes are unconstrained; add `same_route` to keep them together.
1275
+ * Put a chain in an `all_or_none` to serve it whole or not at all.
1251
1276
  */
1252
1277
  RelationConsecutive: {
1253
1278
  /**
@@ -1504,14 +1529,14 @@ export interface components {
1504
1529
  /** @description One problem in a request. */
1505
1530
  RequestIssue: {
1506
1531
  /**
1507
- * Format: int64
1532
+ * Format: uint64
1508
1533
  * @description `limit_exceeded` only: the count this request has.
1509
1534
  */
1510
1535
  actual?: number | null;
1511
1536
  /** @description What is wrong. */
1512
1537
  code: components["schemas"]["ErrorItemCode"];
1513
1538
  /**
1514
- * Format: int64
1539
+ * Format: uint64
1515
1540
  * @description `limit_exceeded` only: the published cap.
1516
1541
  */
1517
1542
  limit?: number | null;
@@ -1998,7 +2023,7 @@ export interface components {
1998
2023
  */
1999
2024
  polyline?: null | components["schemas"]["PolylineDetail"];
2000
2025
  /**
2001
- * Format: int64
2026
+ * Format: uint64
2002
2027
  * @description Random seed for the search. Default `42`: omitting it is the same as
2003
2028
  * sending `42`, so send different values to explore different plans.
2004
2029
  * Repeated runs on one machine usually return an identical plan; a
@@ -2144,7 +2169,10 @@ export interface components {
2144
2169
  * constraint (e.g. capacity, skills, eligibility, `limits.*`, or a time
2145
2170
  * window with no `per_late_hour` set) is left unassigned and the
2146
2171
  * search reinserts it wherever it legitimately fits, or it surfaces in
2147
- * `unassigned[]` with a typed reason. An infeasible locked stop is a 400.
2172
+ * `unassigned[]` with a typed reason. On synchronous solve and stream, an
2173
+ * infeasible locked or pinned stop is a 400. `POST /v3/routing/runs` checks
2174
+ * the problem at submission, not the plan, so there the run ends `failed`
2175
+ * with `BAD_REQUEST` instead.
2148
2176
  */
2149
2177
  plan?: null | components["schemas"]["Plan"];
2150
2178
  /** @description The problem: tasks, fleet, depots, relations, objective, travel. */
@@ -2260,7 +2288,7 @@ export interface components {
2260
2288
  */
2261
2289
  unassigned_priority: number;
2262
2290
  /**
2263
- * Format: int32
2291
+ * Format: uint32
2264
2292
  * @description How many hard-constraint violations the plan has (the `violations`
2265
2293
  * arrays on routes and stops list them). Always `0` on a solve result.
2266
2294
  * @example 0
@@ -2400,7 +2428,7 @@ export interface components {
2400
2428
  /** @description How the search behind a plan ended. */
2401
2429
  SearchInfo: {
2402
2430
  /**
2403
- * Format: int64
2431
+ * Format: uint64
2404
2432
  * @description Search iterations performed. `0` when nothing was searched.
2405
2433
  * @example 48210
2406
2434
  */
@@ -2426,7 +2454,7 @@ export interface components {
2426
2454
  */
2427
2455
  cost: number;
2428
2456
  /**
2429
- * Format: int64
2457
+ * Format: uint64
2430
2458
  * @description Milliseconds since the search started (the clock of
2431
2459
  * `summary.timings.search_ms`).
2432
2460
  */
@@ -2728,7 +2756,7 @@ export interface components {
2728
2756
  */
2729
2757
  max_route_duration_s?: number | null;
2730
2758
  /**
2731
- * Format: int32
2759
+ * Format: uint32
2732
2760
  * @description Maximum stops served in this shift; a job counts as one stop.
2733
2761
  * Start, end, break and reload stops in `routes[].stops` do not count; a
2734
2762
  * shipment counts as two stops.
@@ -2857,10 +2885,10 @@ export interface components {
2857
2885
  */
2858
2886
  preferences?: components["schemas"]["VehiclePreference"][] | null;
2859
2887
  /**
2860
- * Format: int32
2888
+ * Format: uint32
2861
2889
  * @description Importance of a must-serve task when not all of them fit: the solver
2862
- * maximises the summed `priority` of served tasks before any cost. `>= 1`,
2863
- * default `1` (maximise the count). A rank, not money — it never makes a
2890
+ * maximises the summed `priority` of served tasks before any cost. `1` to
2891
+ * `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
2864
2892
  * task droppable; use `drop_cost` for that. Both set is a 400.
2865
2893
  * @example 3
2866
2894
  */
@@ -3264,7 +3292,7 @@ export interface components {
3264
3292
  /** @description How the search ended. */
3265
3293
  search: components["schemas"]["SearchInfo"];
3266
3294
  /**
3267
- * Format: int32
3295
+ * Format: uint32
3268
3296
  * @description Routes with at least one task stop: one per used shift.
3269
3297
  * @example 1
3270
3298
  */
@@ -3282,13 +3310,13 @@ export interface components {
3282
3310
  * can be tens of percent off: the plan, `unassigned[].reasons` and
3283
3311
  * `score.violation_count` hold only against it, and no `routes[].polyline`
3284
3312
  * is returned. Solve again once Maps is back if the plan must hold on the
3285
- * road; on a solve, `options.travel_fallback: "fail"` returns the error
3286
- * instead. Absent when travel came from the requested engine,
3313
+ * road; on a solve or suggest, `options.travel_fallback: "fail"` returns
3314
+ * the error instead. Absent when travel came from the requested engine,
3287
3315
  * `straight_line` included.
3288
3316
  */
3289
3317
  travel_estimated?: boolean;
3290
3318
  /**
3291
- * Format: int32
3319
+ * Format: uint32
3292
3320
  * @description Distinct vehicles with at least one route.
3293
3321
  * @example 1
3294
3322
  */
@@ -3367,17 +3395,17 @@ export interface components {
3367
3395
  */
3368
3396
  TaskCounts: {
3369
3397
  /**
3370
- * Format: int32
3398
+ * Format: uint32
3371
3399
  * @description Tasks on a route.
3372
3400
  */
3373
3401
  served: number;
3374
3402
  /**
3375
- * Format: int32
3403
+ * Format: uint32
3376
3404
  * @description Tasks on no route: the length of `unassigned`.
3377
3405
  */
3378
3406
  unassigned: number;
3379
3407
  /**
3380
- * Format: int32
3408
+ * Format: uint32
3381
3409
  * @description The unassigned tasks that carry no `drop_cost`: tasks the plan was
3382
3410
  * required to serve and did not.
3383
3411
  */
@@ -3536,13 +3564,13 @@ export interface components {
3536
3564
  */
3537
3565
  Timings: {
3538
3566
  /**
3539
- * Format: int64
3567
+ * Format: uint64
3540
3568
  * @description Time spent in the search. Absent on `/evaluate`, which runs none, and
3541
3569
  * on `/suggest`, which has no separate search figure.
3542
3570
  */
3543
3571
  search_ms?: number | null;
3544
3572
  /**
3545
- * Format: int64
3573
+ * Format: uint64
3546
3574
  * @description From the request's arrival to the end of the search (of the scoring,
3547
3575
  * on `/evaluate`; of the suggestion search, on `/suggest`): fetching
3548
3576
  * travel times and waiting for capacity included, building the response
@@ -3592,8 +3620,8 @@ export interface components {
3592
3620
  speed_kmh?: number | null;
3593
3621
  };
3594
3622
  /**
3595
- * @description `options.travel_fallback`: what a solve does when travel times cannot be
3596
- * fetched. `/evaluate` and `/suggest` always estimate.
3623
+ * @description `options.travel_fallback`: what a solve or suggest does when travel times
3624
+ * cannot be fetched. `/evaluate` always estimates.
3597
3625
  * @example estimate
3598
3626
  * @enum {string}
3599
3627
  */
@@ -3889,7 +3917,7 @@ export interface components {
3889
3917
  */
3890
3918
  max_route_duration_s?: number | null;
3891
3919
  /**
3892
- * Format: int32
3920
+ * Format: uint32
3893
3921
  * @description Maximum stops served per shift; a job counts as one stop.
3894
3922
  * Start, end, break and reload stops in `routes[].stops` do not count; a
3895
3923
  * shipment counts as two stops.
package/dist/v3.d.ts CHANGED
@@ -833,10 +833,10 @@ export interface components {
833
833
  */
834
834
  preferences?: components["schemas"]["VehiclePreference"][] | null;
835
835
  /**
836
- * Format: int32
836
+ * Format: uint32
837
837
  * @description Importance of a must-serve task when not all of them fit: the solver
838
- * maximises the summed `priority` of served tasks before any cost. `>= 1`,
839
- * default `1` (maximise the count). A rank, not money — it never makes a
838
+ * maximises the summed `priority` of served tasks before any cost. `1` to
839
+ * `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
840
840
  * task droppable; use `drop_cost` for that. Both set is a 400.
841
841
  * @example 3
842
842
  */
@@ -1027,7 +1027,7 @@ export interface components {
1027
1027
  */
1028
1028
  max_route_duration_s?: number | null;
1029
1029
  /**
1030
- * Format: int32
1030
+ * Format: uint32
1031
1031
  * @description Hard cap on served stops across the period's shifts; a job counts as
1032
1032
  * one stop. Start, end, break and reload stops in `routes[].stops` do not
1033
1033
  * count; a shipment counts as two stops.
@@ -1128,7 +1128,7 @@ export interface components {
1128
1128
  */
1129
1129
  PlanRoute: {
1130
1130
  /**
1131
- * Format: int32
1131
+ * Format: uint32
1132
1132
  * @description On solve, the first `locked_count` stops stay where they are (already
1133
1133
  * dispatched). Counts every listed stop. Cannot be combined with a
1134
1134
  * `reload` stop, and must not exceed the route's stop count — both are
@@ -1163,6 +1163,8 @@ export interface components {
1163
1163
  * @example parts-9:delivery
1164
1164
  */
1165
1165
  id: string;
1166
+ /** @description Pinned as on a job; pinning one leg pins both. */
1167
+ pinned?: boolean;
1166
1168
  /**
1167
1169
  * @description Discriminator: always `delivery`. (enum property replaced by openapi-typescript)
1168
1170
  * @enum {string}
@@ -1179,6 +1181,19 @@ export interface components {
1179
1181
  * @example boiler-17
1180
1182
  */
1181
1183
  id: string;
1184
+ /**
1185
+ * @description On solve, pins the vehicle, not the position: the stop stays on the
1186
+ * vehicle of the route it sits in (any shift of that vehicle, unless it
1187
+ * belongs to a `same_day` or `same_route` group) and is never removed
1188
+ * from the plan, but the search may still reorder it within the route.
1189
+ * Works anywhere in a route, unlike the prefix `locked_count`. A stop
1190
+ * that cannot be driven is a 400 on synchronous solve and stream, as is
1191
+ * a pinned stop that shares a `same_vehicle`, `same_day` or `same_route`
1192
+ * group with another pinned or locked stop the relation forbids.
1193
+ * Accepted on evaluate and suggest, where it is inert. A result's `plan`
1194
+ * never carries it.
1195
+ */
1196
+ pinned?: boolean;
1182
1197
  /**
1183
1198
  * @description Discriminator: always `job`. (enum property replaced by openapi-typescript)
1184
1199
  * @enum {string}
@@ -1195,6 +1210,8 @@ export interface components {
1195
1210
  * @example parts-9:pickup
1196
1211
  */
1197
1212
  id: string;
1213
+ /** @description Pinned as on a job; pinning one leg pins both. */
1214
+ pinned?: boolean;
1198
1215
  /**
1199
1216
  * @description Discriminator: always `pickup`. (enum property replaced by openapi-typescript)
1200
1217
  * @enum {string}
@@ -1377,7 +1394,7 @@ export interface components {
1377
1394
  */
1378
1395
  id: string;
1379
1396
  /**
1380
- * Format: int32
1397
+ * Format: uint32
1381
1398
  * @description The cap on counted stops; a job counts as one stop.
1382
1399
  * Start, end, break and reload stops in `routes[].stops` do not count; a
1383
1400
  * shipment counts as two stops.
@@ -1421,8 +1438,10 @@ export interface components {
1421
1438
  * its pickup. A shipment's own id in `stops`, or a shipment carrying the
1422
1439
  * `tag` of a `same_vehicle` or `same_day` relation, is rejected with HTTP 400
1423
1440
  * `not_supported`: relations never silently skip a member. `same_route`,
1424
- * `time_lag`, `compatible_vehicles`, `all_or_none` and `tag_order` reject a
1425
- * shipment with HTTP 400 as well.
1441
+ * `time_lag`, `compatible_vehicles` and `tag_order` reject a shipment with
1442
+ * HTTP 400 as well. `all_or_none` alone takes a shipment's own id, naming both
1443
+ * legs, in a group that is exactly one `consecutive` chain; such a chain may
1444
+ * also be jobs only.
1426
1445
  * @example {
1427
1446
  * "stops": [
1428
1447
  * "job-1",
@@ -1435,20 +1454,25 @@ export interface components {
1435
1454
  /**
1436
1455
  * All or none
1437
1456
  * @description All or none: either every member in `stops` is served, or none is.
1438
- * Sets no timing; combine with `synchronized` or `time_lag` for when.
1439
- * Hard. Overlapping `all_or_none` relations chain: one on A and B plus
1457
+ * Sets no timing; a coupled group takes its timing from the
1458
+ * `synchronized` or `time_lag` relation that names its members. Hard.
1459
+ * Overlapping `all_or_none` relations chain: one on A and B plus
1440
1460
  * one on B and C serve all three together or none of them. A group with
1441
- * a task in a vehicle's locked prefix (`plan.routes[].locked_count`) is
1442
- * exempt. A member that could be served but is held back because
1461
+ * a task in a vehicle's locked prefix (`plan.routes[].locked_count`) or, on solve, a
1462
+ * `pinned` plan stop is exempt. A member that could be served but is held back because
1443
1463
  * another cannot reports `all_or_none` in `unassigned[].reasons`.
1444
1464
  *
1445
- * Every task must also be named by a `synchronized` or `time_lag`
1446
- * relation; a task named by neither is rejected with HTTP 400.
1465
+ * A member may be a shipment id (both legs). Members are coupled by
1466
+ * `synchronized`/`time_lag`, or the group's stops (a shipment as its two
1467
+ * legs) are exactly one `consecutive` chain with no member coupled by
1468
+ * `synchronized` or `time_lag`, directly or through a `sequence` or
1469
+ * `consecutive` relation. A task named by neither is rejected with HTTP 400, as is a
1470
+ * shipment-leg id: name the shipment.
1447
1471
  */
1448
1472
  RelationAllOrNone: {
1449
1473
  /**
1450
- * @description Job ids, at least two. A shipment's own id or a shipment-leg stop id
1451
- * is rejected with HTTP 400.
1474
+ * @description Job ids or shipment ids, at least two. A shipment-leg stop id is
1475
+ * rejected with HTTP 400.
1452
1476
  * @example [
1453
1477
  * "job-1",
1454
1478
  * "job-2"
@@ -1496,6 +1520,7 @@ export interface components {
1496
1520
  * route. A member that is unassigned is skipped, so only listed
1497
1521
  * neighbours that are both served are adjacent. Members on different
1498
1522
  * routes are unconstrained; add `same_route` to keep them together.
1523
+ * Put a chain in an `all_or_none` to serve it whole or not at all.
1499
1524
  */
1500
1525
  RelationConsecutive: {
1501
1526
  /**
@@ -1752,14 +1777,14 @@ export interface components {
1752
1777
  /** @description One problem in a request. */
1753
1778
  RequestIssue: {
1754
1779
  /**
1755
- * Format: int64
1780
+ * Format: uint64
1756
1781
  * @description `limit_exceeded` only: the count this request has.
1757
1782
  */
1758
1783
  actual?: number | null;
1759
1784
  /** @description What is wrong. */
1760
1785
  code: components["schemas"]["ErrorItemCode"];
1761
1786
  /**
1762
- * Format: int64
1787
+ * Format: uint64
1763
1788
  * @description `limit_exceeded` only: the published cap.
1764
1789
  */
1765
1790
  limit?: number | null;
@@ -2176,7 +2201,7 @@ export interface components {
2176
2201
  */
2177
2202
  unassigned_priority: number;
2178
2203
  /**
2179
- * Format: int32
2204
+ * Format: uint32
2180
2205
  * @description How many hard-constraint violations the plan has (the `violations`
2181
2206
  * arrays on routes and stops list them). Always `0` on a solve result.
2182
2207
  * @example 0
@@ -2316,7 +2341,7 @@ export interface components {
2316
2341
  /** @description How the search behind a plan ended. */
2317
2342
  SearchInfo: {
2318
2343
  /**
2319
- * Format: int64
2344
+ * Format: uint64
2320
2345
  * @description Search iterations performed. `0` when nothing was searched.
2321
2346
  * @example 48210
2322
2347
  */
@@ -2342,7 +2367,7 @@ export interface components {
2342
2367
  */
2343
2368
  cost: number;
2344
2369
  /**
2345
- * Format: int64
2370
+ * Format: uint64
2346
2371
  * @description Milliseconds since the search started (the clock of
2347
2372
  * `summary.timings.search_ms`).
2348
2373
  */
@@ -2644,7 +2669,7 @@ export interface components {
2644
2669
  */
2645
2670
  max_route_duration_s?: number | null;
2646
2671
  /**
2647
- * Format: int32
2672
+ * Format: uint32
2648
2673
  * @description Maximum stops served in this shift; a job counts as one stop.
2649
2674
  * Start, end, break and reload stops in `routes[].stops` do not count; a
2650
2675
  * shipment counts as two stops.
@@ -2786,10 +2811,10 @@ export interface components {
2786
2811
  */
2787
2812
  preferences?: components["schemas"]["VehiclePreference"][] | null;
2788
2813
  /**
2789
- * Format: int32
2814
+ * Format: uint32
2790
2815
  * @description Importance of a must-serve task when not all of them fit: the solver
2791
- * maximises the summed `priority` of served tasks before any cost. `>= 1`,
2792
- * default `1` (maximise the count). A rank, not money — it never makes a
2816
+ * maximises the summed `priority` of served tasks before any cost. `1` to
2817
+ * `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
2793
2818
  * task droppable; use `drop_cost` for that. Both set is a 400.
2794
2819
  * @example 3
2795
2820
  */
@@ -2931,7 +2956,7 @@ export interface components {
2931
2956
  */
2932
2957
  polyline?: null | components["schemas"]["PolylineDetail"];
2933
2958
  /**
2934
- * Format: int64
2959
+ * Format: uint64
2935
2960
  * @description Random seed for the search. Default `42`: omitting it is the same as
2936
2961
  * sending `42`, so send different values to explore different plans.
2937
2962
  * Repeated runs on one machine usually return an identical plan; a
@@ -3062,7 +3087,10 @@ export interface components {
3062
3087
  * constraint (e.g. capacity, skills, eligibility, `limits.*`, or a time
3063
3088
  * window with no `per_late_hour` set) is left unassigned and the
3064
3089
  * search reinserts it wherever it legitimately fits, or it surfaces in
3065
- * `unassigned[]` with a typed reason. An infeasible locked stop is a 400.
3090
+ * `unassigned[]` with a typed reason. On synchronous solve and stream, an
3091
+ * infeasible locked or pinned stop is a 400. `POST /v3/routing/runs` checks
3092
+ * the problem at submission, not the plan, so there the run ends `failed`
3093
+ * with `BAD_REQUEST` instead.
3066
3094
  */
3067
3095
  plan?: null | components["schemas"]["Plan"];
3068
3096
  /** @description The problem: tasks, fleet, depots, relations, objective, travel. */
@@ -3285,7 +3313,7 @@ export interface components {
3285
3313
  */
3286
3314
  SuggestOptions: {
3287
3315
  /**
3288
- * Format: int32
3316
+ * Format: uint32
3289
3317
  * @description Max ranked `insertions` in each `suggestions[]` entry, `1` to `10`;
3290
3318
  * default 5. It caps the insertions per entry, not the number of
3291
3319
  * entries: every task outside `plan` still gets its entry. Values outside
@@ -3293,7 +3321,7 @@ export interface components {
3293
3321
  * several stops is searched (such a unit is never searched exhaustively):
3294
3322
  * each stop after the unit's first keeps at most
3295
3323
  * `max(8, 4 × max_insertions)` partial placements. A `synchronized` or
3296
- * `time_lag` group is the exception: every start slot of one member is
3324
+ * `time_lag` group is the exception: every start slot of each member is
3297
3325
  * tried, each other member at its cheapest slot, whatever this value. A
3298
3326
  * single-stop task has every feasible position considered unless
3299
3327
  * `time_limit_s` runs out first.
@@ -3313,6 +3341,15 @@ export interface components {
3313
3341
  * @example 2.5
3314
3342
  */
3315
3343
  time_limit_s?: number | null;
3344
+ /**
3345
+ * @description What to do when travel times cannot be fetched from Solvice Maps, as on
3346
+ * a solve: `estimate` (the default) ranks insertions on estimated travel
3347
+ * and sets the response's `travel_estimated`; `fail` returns the 502/503
3348
+ * instead. Locations that Maps rejects for spanning more than one region
3349
+ * are a 400. No effect with `travel.engine: "straight_line"`.
3350
+ * @default estimate
3351
+ */
3352
+ travel_fallback?: null | components["schemas"]["TravelFallback"];
3316
3353
  };
3317
3354
  /**
3318
3355
  * @description Why a unit came back with no insertions.
@@ -3501,11 +3538,22 @@ export interface components {
3501
3538
  */
3502
3539
  timings: components["schemas"]["Timings"];
3503
3540
  /**
3504
- * @description `true` when `options.time_limit_s` cut the search short, or a
3541
+ * @description `true` when travel times could not be fetched and the insertions were
3542
+ * ranked on estimated travel, as `summary.travel_estimated` on a solve:
3543
+ * straight-line distance × a detour factor, at a typical speed for the
3544
+ * profile. Every `delta`, arrival and feasibility verdict holds only
3545
+ * against it. Send `options.travel_fallback: "fail"` to get the error
3546
+ * instead. Absent when travel came from the requested engine,
3547
+ * `straight_line` included.
3548
+ */
3549
+ travel_estimated?: boolean;
3550
+ /**
3551
+ * @description `true` when `options.time_limit_s` cut the search short, a
3505
3552
  * multi-member unit came back empty after the search had discarded
3506
3553
  * candidates (an inconclusive "not found"; its `reason.code` is
3507
- * `candidates_exhausted`). Lists may then be incomplete or missing the
3508
- * best insertion. A single visit's only level is never pruned, so its
3554
+ * `candidates_exhausted`), or a crew lists fewer than `max_insertions`
3555
+ * after a member's cheapest slot was refused and its other slots went
3556
+ * untried. Lists may then be incomplete or missing the best insertion. A single visit's only level is never pruned, so its
3509
3557
  * empty list is proof of infeasibility unless the budget cut it, and its
3510
3558
  * `reason.code` is then `time_limit`.
3511
3559
  */
@@ -3587,7 +3635,7 @@ export interface components {
3587
3635
  /** @description How the search ended. */
3588
3636
  search: components["schemas"]["SearchInfo"];
3589
3637
  /**
3590
- * Format: int32
3638
+ * Format: uint32
3591
3639
  * @description Routes with at least one task stop: one per used shift.
3592
3640
  * @example 1
3593
3641
  */
@@ -3605,13 +3653,13 @@ export interface components {
3605
3653
  * can be tens of percent off: the plan, `unassigned[].reasons` and
3606
3654
  * `score.violation_count` hold only against it, and no `routes[].polyline`
3607
3655
  * is returned. Solve again once Maps is back if the plan must hold on the
3608
- * road; on a solve, `options.travel_fallback: "fail"` returns the error
3609
- * instead. Absent when travel came from the requested engine,
3656
+ * road; on a solve or suggest, `options.travel_fallback: "fail"` returns
3657
+ * the error instead. Absent when travel came from the requested engine,
3610
3658
  * `straight_line` included.
3611
3659
  */
3612
3660
  travel_estimated?: boolean;
3613
3661
  /**
3614
- * Format: int32
3662
+ * Format: uint32
3615
3663
  * @description Distinct vehicles with at least one route.
3616
3664
  * @example 1
3617
3665
  */
@@ -3690,17 +3738,17 @@ export interface components {
3690
3738
  */
3691
3739
  TaskCounts: {
3692
3740
  /**
3693
- * Format: int32
3741
+ * Format: uint32
3694
3742
  * @description Tasks on a route.
3695
3743
  */
3696
3744
  served: number;
3697
3745
  /**
3698
- * Format: int32
3746
+ * Format: uint32
3699
3747
  * @description Tasks on no route: the length of `unassigned`.
3700
3748
  */
3701
3749
  unassigned: number;
3702
3750
  /**
3703
- * Format: int32
3751
+ * Format: uint32
3704
3752
  * @description The unassigned tasks that carry no `drop_cost`: tasks the plan was
3705
3753
  * required to serve and did not.
3706
3754
  */
@@ -3918,13 +3966,13 @@ export interface components {
3918
3966
  */
3919
3967
  Timings: {
3920
3968
  /**
3921
- * Format: int64
3969
+ * Format: uint64
3922
3970
  * @description Time spent in the search. Absent on `/evaluate`, which runs none, and
3923
3971
  * on `/suggest`, which has no separate search figure.
3924
3972
  */
3925
3973
  search_ms?: number | null;
3926
3974
  /**
3927
- * Format: int64
3975
+ * Format: uint64
3928
3976
  * @description From the request's arrival to the end of the search (of the scoring,
3929
3977
  * on `/evaluate`; of the suggestion search, on `/suggest`): fetching
3930
3978
  * travel times and waiting for capacity included, building the response
@@ -3974,8 +4022,8 @@ export interface components {
3974
4022
  speed_kmh?: number | null;
3975
4023
  };
3976
4024
  /**
3977
- * @description `options.travel_fallback`: what a solve does when travel times cannot be
3978
- * fetched. `/evaluate` and `/suggest` always estimate.
4025
+ * @description `options.travel_fallback`: what a solve or suggest does when travel times
4026
+ * cannot be fetched. `/evaluate` always estimates.
3979
4027
  * @example estimate
3980
4028
  * @enum {string}
3981
4029
  */
@@ -4285,7 +4333,7 @@ export interface components {
4285
4333
  */
4286
4334
  max_route_duration_s?: number | null;
4287
4335
  /**
4288
- * Format: int32
4336
+ * Format: uint32
4289
4337
  * @description Maximum stops served per shift; a job counts as one stop.
4290
4338
  * Start, end, break and reload stops in `routes[].stops` do not count; a
4291
4339
  * shipment counts as two stops.
@@ -4827,7 +4875,18 @@ export interface operations {
4827
4875
  "application/json": components["schemas"]["ErrorBody"];
4828
4876
  };
4829
4877
  };
4830
- /** @description No capacity right now (`code: overloaded`): every solver slot is busy, or the wait for one timed out. Retry after the number of seconds in the `Retry-After` header. */
4878
+ /** @description Travel times and distances could not be fetched (`code: travel_provider_error`). The request can be retried. Only with `options.travel_fallback: "fail"`; by default the insertions are ranked on estimated travel and `travel_estimated` is set. */
4879
+ 502: {
4880
+ headers: {
4881
+ /** @description The request's `X-Request-Id`, echoed, or a generated `req_…` id. */
4882
+ "x-request-id"?: string;
4883
+ [name: string]: unknown;
4884
+ };
4885
+ content: {
4886
+ "application/json": components["schemas"]["ErrorBody"];
4887
+ };
4888
+ };
4889
+ /** @description No capacity right now (`code: overloaded`): every solver slot is busy, or the wait for one timed out. With `options.travel_fallback: "fail"`, also returned while Solvice Maps is temporarily refused after repeated failures. Retry after the number of seconds in the `Retry-After` header. */
4831
4890
  503: {
4832
4891
  headers: {
4833
4892
  /** @description Seconds to wait before retrying. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solvice/routing",
3
- "version": "0.19.2-beta.0",
3
+ "version": "0.19.4-beta.0",
4
4
  "description": "TypeScript client for the Solvice V3 routing API, generated from its OpenAPI spec.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://docs.solvice.io/guides/platform/sdks/typescript",