@solvice/routing 0.19.2-beta.0 → 0.19.3-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.
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
@@ -1129,7 +1129,7 @@ export interface components {
1129
1129
  */
1130
1130
  id: string;
1131
1131
  /**
1132
- * Format: int32
1132
+ * Format: uint32
1133
1133
  * @description The cap on counted stops; a job counts as one stop.
1134
1134
  * Start, end, break and reload stops in `routes[].stops` do not count; a
1135
1135
  * shipment counts as two stops.
@@ -1173,8 +1173,10 @@ export interface components {
1173
1173
  * its pickup. A shipment's own id in `stops`, or a shipment carrying the
1174
1174
  * `tag` of a `same_vehicle` or `same_day` relation, is rejected with HTTP 400
1175
1175
  * `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.
1176
+ * `time_lag`, `compatible_vehicles` and `tag_order` reject a shipment with
1177
+ * HTTP 400 as well. `all_or_none` alone takes a shipment's own id, naming both
1178
+ * legs, in a group that is exactly one `consecutive` chain; such a chain may
1179
+ * also be jobs only.
1178
1180
  * @example {
1179
1181
  * "stops": [
1180
1182
  * "job-1",
@@ -1187,20 +1189,25 @@ export interface components {
1187
1189
  /**
1188
1190
  * All or none
1189
1191
  * @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
1192
+ * Sets no timing; a coupled group takes its timing from the
1193
+ * `synchronized` or `time_lag` relation that names its members. Hard.
1194
+ * Overlapping `all_or_none` relations chain: one on A and B plus
1192
1195
  * one on B and C serve all three together or none of them. A group with
1193
1196
  * a task in a vehicle's locked prefix (`plan.routes[].locked_count`) is
1194
1197
  * exempt. A member that could be served but is held back because
1195
1198
  * another cannot reports `all_or_none` in `unassigned[].reasons`.
1196
1199
  *
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.
1200
+ * A member may be a shipment id (both legs). Members are coupled by
1201
+ * `synchronized`/`time_lag`, or the group's stops (a shipment as its two
1202
+ * legs) are exactly one `consecutive` chain with no member coupled by
1203
+ * `synchronized` or `time_lag`, directly or through a `sequence` or
1204
+ * `consecutive` relation. A task named by neither is rejected with HTTP 400, as is a
1205
+ * shipment-leg id: name the shipment.
1199
1206
  */
1200
1207
  RelationAllOrNone: {
1201
1208
  /**
1202
- * @description Job ids, at least two. A shipment's own id or a shipment-leg stop id
1203
- * is rejected with HTTP 400.
1209
+ * @description Job ids or shipment ids, at least two. A shipment-leg stop id is
1210
+ * rejected with HTTP 400.
1204
1211
  * @example [
1205
1212
  * "job-1",
1206
1213
  * "job-2"
@@ -1248,6 +1255,7 @@ export interface components {
1248
1255
  * route. A member that is unassigned is skipped, so only listed
1249
1256
  * neighbours that are both served are adjacent. Members on different
1250
1257
  * routes are unconstrained; add `same_route` to keep them together.
1258
+ * Put a chain in an `all_or_none` to serve it whole or not at all.
1251
1259
  */
1252
1260
  RelationConsecutive: {
1253
1261
  /**
@@ -1504,14 +1512,14 @@ export interface components {
1504
1512
  /** @description One problem in a request. */
1505
1513
  RequestIssue: {
1506
1514
  /**
1507
- * Format: int64
1515
+ * Format: uint64
1508
1516
  * @description `limit_exceeded` only: the count this request has.
1509
1517
  */
1510
1518
  actual?: number | null;
1511
1519
  /** @description What is wrong. */
1512
1520
  code: components["schemas"]["ErrorItemCode"];
1513
1521
  /**
1514
- * Format: int64
1522
+ * Format: uint64
1515
1523
  * @description `limit_exceeded` only: the published cap.
1516
1524
  */
1517
1525
  limit?: number | null;
@@ -1998,7 +2006,7 @@ export interface components {
1998
2006
  */
1999
2007
  polyline?: null | components["schemas"]["PolylineDetail"];
2000
2008
  /**
2001
- * Format: int64
2009
+ * Format: uint64
2002
2010
  * @description Random seed for the search. Default `42`: omitting it is the same as
2003
2011
  * sending `42`, so send different values to explore different plans.
2004
2012
  * Repeated runs on one machine usually return an identical plan; a
@@ -2260,7 +2268,7 @@ export interface components {
2260
2268
  */
2261
2269
  unassigned_priority: number;
2262
2270
  /**
2263
- * Format: int32
2271
+ * Format: uint32
2264
2272
  * @description How many hard-constraint violations the plan has (the `violations`
2265
2273
  * arrays on routes and stops list them). Always `0` on a solve result.
2266
2274
  * @example 0
@@ -2400,7 +2408,7 @@ export interface components {
2400
2408
  /** @description How the search behind a plan ended. */
2401
2409
  SearchInfo: {
2402
2410
  /**
2403
- * Format: int64
2411
+ * Format: uint64
2404
2412
  * @description Search iterations performed. `0` when nothing was searched.
2405
2413
  * @example 48210
2406
2414
  */
@@ -2426,7 +2434,7 @@ export interface components {
2426
2434
  */
2427
2435
  cost: number;
2428
2436
  /**
2429
- * Format: int64
2437
+ * Format: uint64
2430
2438
  * @description Milliseconds since the search started (the clock of
2431
2439
  * `summary.timings.search_ms`).
2432
2440
  */
@@ -2728,7 +2736,7 @@ export interface components {
2728
2736
  */
2729
2737
  max_route_duration_s?: number | null;
2730
2738
  /**
2731
- * Format: int32
2739
+ * Format: uint32
2732
2740
  * @description Maximum stops served in this shift; a job counts as one stop.
2733
2741
  * Start, end, break and reload stops in `routes[].stops` do not count; a
2734
2742
  * shipment counts as two stops.
@@ -2857,10 +2865,10 @@ export interface components {
2857
2865
  */
2858
2866
  preferences?: components["schemas"]["VehiclePreference"][] | null;
2859
2867
  /**
2860
- * Format: int32
2868
+ * Format: uint32
2861
2869
  * @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
2870
+ * maximises the summed `priority` of served tasks before any cost. `1` to
2871
+ * `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
2864
2872
  * task droppable; use `drop_cost` for that. Both set is a 400.
2865
2873
  * @example 3
2866
2874
  */
@@ -3264,7 +3272,7 @@ export interface components {
3264
3272
  /** @description How the search ended. */
3265
3273
  search: components["schemas"]["SearchInfo"];
3266
3274
  /**
3267
- * Format: int32
3275
+ * Format: uint32
3268
3276
  * @description Routes with at least one task stop: one per used shift.
3269
3277
  * @example 1
3270
3278
  */
@@ -3288,7 +3296,7 @@ export interface components {
3288
3296
  */
3289
3297
  travel_estimated?: boolean;
3290
3298
  /**
3291
- * Format: int32
3299
+ * Format: uint32
3292
3300
  * @description Distinct vehicles with at least one route.
3293
3301
  * @example 1
3294
3302
  */
@@ -3367,17 +3375,17 @@ export interface components {
3367
3375
  */
3368
3376
  TaskCounts: {
3369
3377
  /**
3370
- * Format: int32
3378
+ * Format: uint32
3371
3379
  * @description Tasks on a route.
3372
3380
  */
3373
3381
  served: number;
3374
3382
  /**
3375
- * Format: int32
3383
+ * Format: uint32
3376
3384
  * @description Tasks on no route: the length of `unassigned`.
3377
3385
  */
3378
3386
  unassigned: number;
3379
3387
  /**
3380
- * Format: int32
3388
+ * Format: uint32
3381
3389
  * @description The unassigned tasks that carry no `drop_cost`: tasks the plan was
3382
3390
  * required to serve and did not.
3383
3391
  */
@@ -3536,13 +3544,13 @@ export interface components {
3536
3544
  */
3537
3545
  Timings: {
3538
3546
  /**
3539
- * Format: int64
3547
+ * Format: uint64
3540
3548
  * @description Time spent in the search. Absent on `/evaluate`, which runs none, and
3541
3549
  * on `/suggest`, which has no separate search figure.
3542
3550
  */
3543
3551
  search_ms?: number | null;
3544
3552
  /**
3545
- * Format: int64
3553
+ * Format: uint64
3546
3554
  * @description From the request's arrival to the end of the search (of the scoring,
3547
3555
  * on `/evaluate`; of the suggestion search, on `/suggest`): fetching
3548
3556
  * travel times and waiting for capacity included, building the response
@@ -3889,7 +3897,7 @@ export interface components {
3889
3897
  */
3890
3898
  max_route_duration_s?: number | null;
3891
3899
  /**
3892
- * Format: int32
3900
+ * Format: uint32
3893
3901
  * @description Maximum stops served per shift; a job counts as one stop.
3894
3902
  * Start, end, break and reload stops in `routes[].stops` do not count; a
3895
3903
  * 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
@@ -1377,7 +1377,7 @@ export interface components {
1377
1377
  */
1378
1378
  id: string;
1379
1379
  /**
1380
- * Format: int32
1380
+ * Format: uint32
1381
1381
  * @description The cap on counted stops; a job counts as one stop.
1382
1382
  * Start, end, break and reload stops in `routes[].stops` do not count; a
1383
1383
  * shipment counts as two stops.
@@ -1421,8 +1421,10 @@ export interface components {
1421
1421
  * its pickup. A shipment's own id in `stops`, or a shipment carrying the
1422
1422
  * `tag` of a `same_vehicle` or `same_day` relation, is rejected with HTTP 400
1423
1423
  * `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.
1424
+ * `time_lag`, `compatible_vehicles` and `tag_order` reject a shipment with
1425
+ * HTTP 400 as well. `all_or_none` alone takes a shipment's own id, naming both
1426
+ * legs, in a group that is exactly one `consecutive` chain; such a chain may
1427
+ * also be jobs only.
1426
1428
  * @example {
1427
1429
  * "stops": [
1428
1430
  * "job-1",
@@ -1435,20 +1437,25 @@ export interface components {
1435
1437
  /**
1436
1438
  * All or none
1437
1439
  * @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
1440
+ * Sets no timing; a coupled group takes its timing from the
1441
+ * `synchronized` or `time_lag` relation that names its members. Hard.
1442
+ * Overlapping `all_or_none` relations chain: one on A and B plus
1440
1443
  * one on B and C serve all three together or none of them. A group with
1441
1444
  * a task in a vehicle's locked prefix (`plan.routes[].locked_count`) is
1442
1445
  * exempt. A member that could be served but is held back because
1443
1446
  * another cannot reports `all_or_none` in `unassigned[].reasons`.
1444
1447
  *
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.
1448
+ * A member may be a shipment id (both legs). Members are coupled by
1449
+ * `synchronized`/`time_lag`, or the group's stops (a shipment as its two
1450
+ * legs) are exactly one `consecutive` chain with no member coupled by
1451
+ * `synchronized` or `time_lag`, directly or through a `sequence` or
1452
+ * `consecutive` relation. A task named by neither is rejected with HTTP 400, as is a
1453
+ * shipment-leg id: name the shipment.
1447
1454
  */
1448
1455
  RelationAllOrNone: {
1449
1456
  /**
1450
- * @description Job ids, at least two. A shipment's own id or a shipment-leg stop id
1451
- * is rejected with HTTP 400.
1457
+ * @description Job ids or shipment ids, at least two. A shipment-leg stop id is
1458
+ * rejected with HTTP 400.
1452
1459
  * @example [
1453
1460
  * "job-1",
1454
1461
  * "job-2"
@@ -1496,6 +1503,7 @@ export interface components {
1496
1503
  * route. A member that is unassigned is skipped, so only listed
1497
1504
  * neighbours that are both served are adjacent. Members on different
1498
1505
  * routes are unconstrained; add `same_route` to keep them together.
1506
+ * Put a chain in an `all_or_none` to serve it whole or not at all.
1499
1507
  */
1500
1508
  RelationConsecutive: {
1501
1509
  /**
@@ -1752,14 +1760,14 @@ export interface components {
1752
1760
  /** @description One problem in a request. */
1753
1761
  RequestIssue: {
1754
1762
  /**
1755
- * Format: int64
1763
+ * Format: uint64
1756
1764
  * @description `limit_exceeded` only: the count this request has.
1757
1765
  */
1758
1766
  actual?: number | null;
1759
1767
  /** @description What is wrong. */
1760
1768
  code: components["schemas"]["ErrorItemCode"];
1761
1769
  /**
1762
- * Format: int64
1770
+ * Format: uint64
1763
1771
  * @description `limit_exceeded` only: the published cap.
1764
1772
  */
1765
1773
  limit?: number | null;
@@ -2176,7 +2184,7 @@ export interface components {
2176
2184
  */
2177
2185
  unassigned_priority: number;
2178
2186
  /**
2179
- * Format: int32
2187
+ * Format: uint32
2180
2188
  * @description How many hard-constraint violations the plan has (the `violations`
2181
2189
  * arrays on routes and stops list them). Always `0` on a solve result.
2182
2190
  * @example 0
@@ -2316,7 +2324,7 @@ export interface components {
2316
2324
  /** @description How the search behind a plan ended. */
2317
2325
  SearchInfo: {
2318
2326
  /**
2319
- * Format: int64
2327
+ * Format: uint64
2320
2328
  * @description Search iterations performed. `0` when nothing was searched.
2321
2329
  * @example 48210
2322
2330
  */
@@ -2342,7 +2350,7 @@ export interface components {
2342
2350
  */
2343
2351
  cost: number;
2344
2352
  /**
2345
- * Format: int64
2353
+ * Format: uint64
2346
2354
  * @description Milliseconds since the search started (the clock of
2347
2355
  * `summary.timings.search_ms`).
2348
2356
  */
@@ -2644,7 +2652,7 @@ export interface components {
2644
2652
  */
2645
2653
  max_route_duration_s?: number | null;
2646
2654
  /**
2647
- * Format: int32
2655
+ * Format: uint32
2648
2656
  * @description Maximum stops served in this shift; a job counts as one stop.
2649
2657
  * Start, end, break and reload stops in `routes[].stops` do not count; a
2650
2658
  * shipment counts as two stops.
@@ -2786,10 +2794,10 @@ export interface components {
2786
2794
  */
2787
2795
  preferences?: components["schemas"]["VehiclePreference"][] | null;
2788
2796
  /**
2789
- * Format: int32
2797
+ * Format: uint32
2790
2798
  * @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
2799
+ * maximises the summed `priority` of served tasks before any cost. `1` to
2800
+ * `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
2793
2801
  * task droppable; use `drop_cost` for that. Both set is a 400.
2794
2802
  * @example 3
2795
2803
  */
@@ -2931,7 +2939,7 @@ export interface components {
2931
2939
  */
2932
2940
  polyline?: null | components["schemas"]["PolylineDetail"];
2933
2941
  /**
2934
- * Format: int64
2942
+ * Format: uint64
2935
2943
  * @description Random seed for the search. Default `42`: omitting it is the same as
2936
2944
  * sending `42`, so send different values to explore different plans.
2937
2945
  * Repeated runs on one machine usually return an identical plan; a
@@ -3285,7 +3293,7 @@ export interface components {
3285
3293
  */
3286
3294
  SuggestOptions: {
3287
3295
  /**
3288
- * Format: int32
3296
+ * Format: uint32
3289
3297
  * @description Max ranked `insertions` in each `suggestions[]` entry, `1` to `10`;
3290
3298
  * default 5. It caps the insertions per entry, not the number of
3291
3299
  * entries: every task outside `plan` still gets its entry. Values outside
@@ -3293,7 +3301,7 @@ export interface components {
3293
3301
  * several stops is searched (such a unit is never searched exhaustively):
3294
3302
  * each stop after the unit's first keeps at most
3295
3303
  * `max(8, 4 × max_insertions)` partial placements. A `synchronized` or
3296
- * `time_lag` group is the exception: every start slot of one member is
3304
+ * `time_lag` group is the exception: every start slot of each member is
3297
3305
  * tried, each other member at its cheapest slot, whatever this value. A
3298
3306
  * single-stop task has every feasible position considered unless
3299
3307
  * `time_limit_s` runs out first.
@@ -3501,11 +3509,12 @@ export interface components {
3501
3509
  */
3502
3510
  timings: components["schemas"]["Timings"];
3503
3511
  /**
3504
- * @description `true` when `options.time_limit_s` cut the search short, or a
3512
+ * @description `true` when `options.time_limit_s` cut the search short, a
3505
3513
  * multi-member unit came back empty after the search had discarded
3506
3514
  * 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
3515
+ * `candidates_exhausted`), or a crew lists fewer than `max_insertions`
3516
+ * after a member's cheapest slot was refused and its other slots went
3517
+ * untried. Lists may then be incomplete or missing the best insertion. A single visit's only level is never pruned, so its
3509
3518
  * empty list is proof of infeasibility unless the budget cut it, and its
3510
3519
  * `reason.code` is then `time_limit`.
3511
3520
  */
@@ -3587,7 +3596,7 @@ export interface components {
3587
3596
  /** @description How the search ended. */
3588
3597
  search: components["schemas"]["SearchInfo"];
3589
3598
  /**
3590
- * Format: int32
3599
+ * Format: uint32
3591
3600
  * @description Routes with at least one task stop: one per used shift.
3592
3601
  * @example 1
3593
3602
  */
@@ -3611,7 +3620,7 @@ export interface components {
3611
3620
  */
3612
3621
  travel_estimated?: boolean;
3613
3622
  /**
3614
- * Format: int32
3623
+ * Format: uint32
3615
3624
  * @description Distinct vehicles with at least one route.
3616
3625
  * @example 1
3617
3626
  */
@@ -3690,17 +3699,17 @@ export interface components {
3690
3699
  */
3691
3700
  TaskCounts: {
3692
3701
  /**
3693
- * Format: int32
3702
+ * Format: uint32
3694
3703
  * @description Tasks on a route.
3695
3704
  */
3696
3705
  served: number;
3697
3706
  /**
3698
- * Format: int32
3707
+ * Format: uint32
3699
3708
  * @description Tasks on no route: the length of `unassigned`.
3700
3709
  */
3701
3710
  unassigned: number;
3702
3711
  /**
3703
- * Format: int32
3712
+ * Format: uint32
3704
3713
  * @description The unassigned tasks that carry no `drop_cost`: tasks the plan was
3705
3714
  * required to serve and did not.
3706
3715
  */
@@ -3918,13 +3927,13 @@ export interface components {
3918
3927
  */
3919
3928
  Timings: {
3920
3929
  /**
3921
- * Format: int64
3930
+ * Format: uint64
3922
3931
  * @description Time spent in the search. Absent on `/evaluate`, which runs none, and
3923
3932
  * on `/suggest`, which has no separate search figure.
3924
3933
  */
3925
3934
  search_ms?: number | null;
3926
3935
  /**
3927
- * Format: int64
3936
+ * Format: uint64
3928
3937
  * @description From the request's arrival to the end of the search (of the scoring,
3929
3938
  * on `/evaluate`; of the suggestion search, on `/suggest`): fetching
3930
3939
  * travel times and waiting for capacity included, building the response
@@ -4285,7 +4294,7 @@ export interface components {
4285
4294
  */
4286
4295
  max_route_duration_s?: number | null;
4287
4296
  /**
4288
- * Format: int32
4297
+ * Format: uint32
4289
4298
  * @description Maximum stops served per shift; a job counts as one stop.
4290
4299
  * Start, end, break and reload stops in `routes[].stops` do not count; a
4291
4300
  * shipment counts as two stops.
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.3-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",