@mailwoman/api 9.1.0 → 9.3.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/out/schema.d.ts CHANGED
@@ -7,7 +7,7 @@
7
7
  * libpostal), nothing here is a vendor contract — this surface is ours to design, so request
8
8
  * bodies are REQUIRED and validator-enforced (no legacy tolerance to preserve). A `defaultHook`
9
9
  * on the app maps validation failures through the shared `APIErrorSchema` envelope
10
- * (`apiError(c, 400, "invalid request body", <zod summary>)`) — the pattern boundary every
10
+ * (`errorResponse(c, 400, "invalid request body", <zod summary>)`) — the pattern boundary every
11
11
  * surface holds to: where no legacy contract exists, the validator MAY speak, but only in
12
12
  * our envelope.
13
13
  *
@@ -16,10 +16,16 @@
16
16
  * and error alike, from this one file.
17
17
  */
18
18
  import { z } from "@hono/zod-openapi";
19
+ import type { AddressNode } from "@mailwoman/core/decoder";
19
20
  export { APIErrorSchema } from "@mailwoman/api-kit";
20
21
  /**
21
22
  * `POST /v1/parse` request body.
22
23
  */
24
+ /**
25
+ * One node of the decoded address tree. The decoder's `AddressNode` is a recursive union the OpenAPI generator cannot
26
+ * derive a schema for on its own, so it is registered as an open object; the shape is documented by the type.
27
+ */
28
+ export declare const AddressNodeSchema: z.ZodCustom<AddressNode, AddressNode>;
23
29
  /**
24
30
  * The input register (Decision A / GTM B10): `fragmented` = the map-search register (evidence-bundle channels feed);
25
31
  * `formatted` = the validation/record register (channels off). Unset → the engine derives it from the input's shape.
@@ -73,7 +79,8 @@ export declare const ParseOutcomeSchema: z.ZodObject<{
73
79
  value: z.ZodString;
74
80
  }, z.core.$strip>>;
75
81
  tree: z.ZodObject<{
76
- roots: z.ZodArray<z.ZodUnknown>;
82
+ raw: z.ZodString;
83
+ roots: z.ZodArray<z.ZodCustom<AddressNode, AddressNode>>;
77
84
  }, z.core.$loose>;
78
85
  debug: z.ZodOptional<z.ZodString>;
79
86
  }, z.core.$strip>;
@@ -87,6 +94,307 @@ export declare const GeocodeRequestSchema: z.ZodObject<{
87
94
  formatted: "formatted";
88
95
  }>>;
89
96
  }, z.core.$strip>;
97
+ /**
98
+ * The derivation behind a geocode answer, present only when the engine was asked to trace — `@mailwoman/evidence`'s
99
+ * `DerivationProjection` on the wire.
100
+ */
101
+ export declare const DerivationProjectionSchema: z.ZodObject<{
102
+ status: z.ZodEnum<{
103
+ designated: "designated";
104
+ observed: "observed";
105
+ derived: "derived";
106
+ inferred: "inferred";
107
+ unresolved: "unresolved";
108
+ }>;
109
+ constraints: z.ZodReadonly<z.ZodArray<z.ZodObject<{
110
+ label: z.ZodString;
111
+ evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
112
+ kind: z.ZodLiteral<"observation">;
113
+ source: z.ZodString;
114
+ vintage: z.ZodNullable<z.ZodString>;
115
+ value: z.ZodUnknown;
116
+ }, z.core.$strip>, z.ZodObject<{
117
+ kind: z.ZodLiteral<"exclusion">;
118
+ source: z.ZodString;
119
+ vintage: z.ZodString;
120
+ scope: z.ZodObject<{
121
+ layer: z.ZodString;
122
+ h3Cell: z.ZodNumber;
123
+ basis: z.ZodEnum<{
124
+ designated: "designated";
125
+ surveyed: "surveyed";
126
+ source_present: "source_present";
127
+ }>;
128
+ fold: z.ZodString;
129
+ }, z.core.$strip>;
130
+ }, z.core.$strip>, z.ZodObject<{
131
+ kind: z.ZodLiteral<"relation">;
132
+ source: z.ZodString;
133
+ vintage: z.ZodString;
134
+ relationship: z.ZodString;
135
+ assertion: z.ZodEnum<{
136
+ inferred: "inferred";
137
+ authoritative: "authoritative";
138
+ }>;
139
+ score: z.ZodOptional<z.ZodNumber>;
140
+ }, z.core.$strip>, z.ZodObject<{
141
+ kind: z.ZodLiteral<"prior">;
142
+ source: z.ZodString;
143
+ label: z.ZodString;
144
+ weight: z.ZodNumber;
145
+ }, z.core.$strip>], "kind">;
146
+ contribution: z.ZodString;
147
+ }, z.core.$strip>>>;
148
+ uncertaintyM: z.ZodNullable<z.ZodNumber>;
149
+ }, z.core.$strip>;
150
+ /**
151
+ * `POST /v1/geocode` response — a hand-modeled mirror of `GeocodeResult`'s wire shape (`mailwoman/geocode-core.ts`),
152
+ * `.loose()` so a field the engine adds that this schema doesn't yet know about still rides through undocumented rather
153
+ * than being stripped or rejected. DOC-ACCURACY ONLY: the route passes `engine.geocode()`'s outcome through verbatim
154
+ * (`GeocodeOutcome = Record<string, unknown>`, `api/engine.ts`) — nothing here validates a real response, so a
155
+ * schema/engine mismatch can never reject or mutate a result at runtime. Deliberately carries NO import from
156
+ * `mailwoman` (the engine-agnosticism boundary — `mailwoman` is the one workspace allowed to depend on
157
+ * `@mailwoman/api`, never the reverse). `mailwoman/test/api-schema-drift.test.ts` is the compile-time regression check
158
+ * that catches this shape drifting from the real `GeocodeResult` interface.
159
+ */
160
+ export declare const GeocodeOutcomeLikeSchema: z.ZodObject<{
161
+ input: z.ZodString;
162
+ components: z.ZodRecord<z.ZodEnum<{
163
+ country: "country";
164
+ region: "region";
165
+ locality: "locality";
166
+ dependent_locality: "dependent_locality";
167
+ postcode: "postcode";
168
+ subregion: "subregion";
169
+ house_number: "house_number";
170
+ street: "street";
171
+ street_prefix: "street_prefix";
172
+ street_prefix_particle: "street_prefix_particle";
173
+ street_suffix: "street_suffix";
174
+ intersection_a: "intersection_a";
175
+ intersection_b: "intersection_b";
176
+ unit: "unit";
177
+ venue: "venue";
178
+ attention: "attention";
179
+ po_box: "po_box";
180
+ cedex: "cedex";
181
+ prefecture: "prefecture";
182
+ municipality: "municipality";
183
+ district: "district";
184
+ block: "block";
185
+ sub_block: "sub_block";
186
+ building_number: "building_number";
187
+ building_name: "building_name";
188
+ locality_unit: "locality_unit";
189
+ }> & z.core.$partial, z.ZodString>;
190
+ lat: z.ZodNullable<z.ZodNumber>;
191
+ lon: z.ZodNullable<z.ZodNumber>;
192
+ resolution_tier: z.ZodEnum<{
193
+ street: "street";
194
+ venue: "venue";
195
+ address_point: "address_point";
196
+ interpolated: "interpolated";
197
+ admin: "admin";
198
+ plus_code: "plus_code";
199
+ }>;
200
+ epistemic_status: z.ZodEnum<{
201
+ designated: "designated";
202
+ observed: "observed";
203
+ derived: "derived";
204
+ inferred: "inferred";
205
+ unresolved: "unresolved";
206
+ }>;
207
+ derivation: z.ZodOptional<z.ZodObject<{
208
+ status: z.ZodEnum<{
209
+ designated: "designated";
210
+ observed: "observed";
211
+ derived: "derived";
212
+ inferred: "inferred";
213
+ unresolved: "unresolved";
214
+ }>;
215
+ constraints: z.ZodReadonly<z.ZodArray<z.ZodObject<{
216
+ label: z.ZodString;
217
+ evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
218
+ kind: z.ZodLiteral<"observation">;
219
+ source: z.ZodString;
220
+ vintage: z.ZodNullable<z.ZodString>;
221
+ value: z.ZodUnknown;
222
+ }, z.core.$strip>, z.ZodObject<{
223
+ kind: z.ZodLiteral<"exclusion">;
224
+ source: z.ZodString;
225
+ vintage: z.ZodString;
226
+ scope: z.ZodObject<{
227
+ layer: z.ZodString;
228
+ h3Cell: z.ZodNumber;
229
+ basis: z.ZodEnum<{
230
+ designated: "designated";
231
+ surveyed: "surveyed";
232
+ source_present: "source_present";
233
+ }>;
234
+ fold: z.ZodString;
235
+ }, z.core.$strip>;
236
+ }, z.core.$strip>, z.ZodObject<{
237
+ kind: z.ZodLiteral<"relation">;
238
+ source: z.ZodString;
239
+ vintage: z.ZodString;
240
+ relationship: z.ZodString;
241
+ assertion: z.ZodEnum<{
242
+ inferred: "inferred";
243
+ authoritative: "authoritative";
244
+ }>;
245
+ score: z.ZodOptional<z.ZodNumber>;
246
+ }, z.core.$strip>, z.ZodObject<{
247
+ kind: z.ZodLiteral<"prior">;
248
+ source: z.ZodString;
249
+ label: z.ZodString;
250
+ weight: z.ZodNumber;
251
+ }, z.core.$strip>], "kind">;
252
+ contribution: z.ZodString;
253
+ }, z.core.$strip>>>;
254
+ uncertaintyM: z.ZodNullable<z.ZodNumber>;
255
+ }, z.core.$strip>>;
256
+ entity: z.ZodOptional<z.ZodObject<{
257
+ name: z.ZodString;
258
+ categoryID: z.ZodNullable<z.ZodString>;
259
+ confidence: z.ZodNumber;
260
+ country: z.ZodString;
261
+ }, z.core.$strip>>;
262
+ uncertainty_m: z.ZodNullable<z.ZodNumber>;
263
+ locality: z.ZodNullable<z.ZodString>;
264
+ region: z.ZodNullable<z.ZodString>;
265
+ postcode: z.ZodNullable<z.ZodString>;
266
+ house_number: z.ZodNullable<z.ZodString>;
267
+ street: z.ZodNullable<z.ZodString>;
268
+ venue: z.ZodNullable<z.ZodString>;
269
+ dependent_locality: z.ZodNullable<z.ZodString>;
270
+ unit: z.ZodNullable<z.ZodString>;
271
+ countryCode: z.ZodNullable<z.ZodString>;
272
+ hierarchy: z.ZodArray<z.ZodObject<{
273
+ tag: z.ZodString;
274
+ value: z.ZodString;
275
+ name: z.ZodString;
276
+ lat: z.ZodOptional<z.ZodNumber>;
277
+ lon: z.ZodOptional<z.ZodNumber>;
278
+ placeID: z.ZodOptional<z.ZodString>;
279
+ in_winner_lineage: z.ZodOptional<z.ZodBoolean>;
280
+ }, z.core.$strip>>;
281
+ candidates: z.ZodArray<z.ZodObject<{
282
+ name: z.ZodString;
283
+ tag: z.ZodString;
284
+ lat: z.ZodNumber;
285
+ lon: z.ZodNumber;
286
+ countryCode: z.ZodNullable<z.ZodString>;
287
+ placeID: z.ZodOptional<z.ZodString>;
288
+ }, z.core.$strip>>;
289
+ rooftop: z.ZodOptional<z.ZodObject<{
290
+ localityNorm: z.ZodOptional<z.ZodString>;
291
+ postcode: z.ZodOptional<z.ZodString>;
292
+ }, z.core.$strip>>;
293
+ postcode_country_scope: z.ZodNullable<z.ZodString>;
294
+ capital_promotion: z.ZodOptional<z.ZodString>;
295
+ variant_alias_exemption: z.ZodOptional<z.ZodLiteral<true>>;
296
+ intent_markers: z.ZodArray<z.ZodObject<{
297
+ kind: z.ZodEnum<{
298
+ intersection: "intersection";
299
+ po_box: "po_box";
300
+ postcode_only: "postcode_only";
301
+ locality_only: "locality_only";
302
+ structured_address: "structured_address";
303
+ landmark: "landmark";
304
+ poi_query: "poi_query";
305
+ vague: "vague";
306
+ bare_toponym: "bare_toponym";
307
+ route_pair: "route_pair";
308
+ near_me: "near_me";
309
+ poi_category: "poi_category";
310
+ }>;
311
+ code: z.ZodEnum<{
312
+ poi_category: "poi_category";
313
+ declared_ambiguity: "declared_ambiguity";
314
+ declared_fork: "declared_fork";
315
+ focus_point_required: "focus_point_required";
316
+ coverage_qualified_absence: "coverage_qualified_absence";
317
+ authority_designation: "authority_designation";
318
+ }>;
319
+ mechanism: z.ZodString;
320
+ message: z.ZodString;
321
+ evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
322
+ }, z.core.$strip>>;
323
+ admin_coherence: z.ZodOptional<z.ZodObject<{
324
+ region: z.ZodEnum<{
325
+ confirmed: "confirmed";
326
+ contradicted: "contradicted";
327
+ unstated: "unstated";
328
+ unverifiable: "unverifiable";
329
+ }>;
330
+ country: z.ZodEnum<{
331
+ confirmed: "confirmed";
332
+ contradicted: "contradicted";
333
+ unstated: "unstated";
334
+ unverifiable: "unverifiable";
335
+ }>;
336
+ }, z.core.$strip>>;
337
+ authoritative: z.ZodOptional<z.ZodObject<{
338
+ provider: z.ZodString;
339
+ status: z.ZodEnum<{
340
+ matched: "matched";
341
+ ambiguous: "ambiguous";
342
+ refused: "refused";
343
+ transport_error: "transport_error";
344
+ }>;
345
+ matches: z.ZodOptional<z.ZodArray<z.ZodObject<{
346
+ provider_place_id: z.ZodString;
347
+ object_ids: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
348
+ canonical_fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
349
+ lat: z.ZodOptional<z.ZodNumber>;
350
+ lon: z.ZodOptional<z.ZodNumber>;
351
+ precision: z.ZodOptional<z.ZodString>;
352
+ match_status: z.ZodEnum<{
353
+ exact: "exact";
354
+ approximate: "approximate";
355
+ }>;
356
+ provider_score: z.ZodOptional<z.ZodNumber>;
357
+ }, z.core.$strip>>>;
358
+ attribution: z.ZodOptional<z.ZodString>;
359
+ license: z.ZodOptional<z.ZodString>;
360
+ retrieved_at: z.ZodOptional<z.ZodString>;
361
+ dataset_version: z.ZodOptional<z.ZodString>;
362
+ error: z.ZodOptional<z.ZodString>;
363
+ }, z.core.$strip>>;
364
+ dropped_components: z.ZodOptional<z.ZodArray<z.ZodObject<{
365
+ tag: z.ZodEnum<{
366
+ country: "country";
367
+ region: "region";
368
+ locality: "locality";
369
+ dependent_locality: "dependent_locality";
370
+ postcode: "postcode";
371
+ subregion: "subregion";
372
+ house_number: "house_number";
373
+ street: "street";
374
+ street_prefix: "street_prefix";
375
+ street_prefix_particle: "street_prefix_particle";
376
+ street_suffix: "street_suffix";
377
+ intersection_a: "intersection_a";
378
+ intersection_b: "intersection_b";
379
+ unit: "unit";
380
+ venue: "venue";
381
+ attention: "attention";
382
+ po_box: "po_box";
383
+ cedex: "cedex";
384
+ prefecture: "prefecture";
385
+ municipality: "municipality";
386
+ district: "district";
387
+ block: "block";
388
+ sub_block: "sub_block";
389
+ building_number: "building_number";
390
+ building_name: "building_name";
391
+ locality_unit: "locality_unit";
392
+ }>;
393
+ value: z.ZodString;
394
+ kept: z.ZodString;
395
+ }, z.core.$strip>>>;
396
+ }, z.core.$strip>;
397
+ export type GeocodeOutcomeLike = z.infer<typeof GeocodeOutcomeLikeSchema>;
90
398
  /**
91
399
  * `POST /v1/geocode` response — a hand-modeled mirror of `GeocodeResult`'s wire shape (`mailwoman/geocode-core.ts`),
92
400
  * `.loose()` so a field the engine adds that this schema doesn't yet know about still rides through undocumented rather
@@ -94,8 +402,8 @@ export declare const GeocodeRequestSchema: z.ZodObject<{
94
402
  * (`GeocodeOutcome = Record<string, unknown>`, `api/engine.ts`) — nothing here validates a real response, so a
95
403
  * schema/engine mismatch can never reject or mutate a result at runtime. Deliberately carries NO import from
96
404
  * `mailwoman` (the engine-agnosticism boundary — `mailwoman` is the one workspace allowed to depend on
97
- * `@mailwoman/api`, never the reverse). `mailwoman/test/api-schema-drift.test.ts` is the compile-time tripwire that
98
- * catches this shape drifting from the real `GeocodeResult` interface.
405
+ * `@mailwoman/api`, never the reverse). `mailwoman/test/api-schema-drift.test.ts` is the compile-time regression check
406
+ * that catches this shape drifting from the real `GeocodeResult` interface.
99
407
  */
100
408
  export declare const GeocodeOutcomeSchema: z.ZodObject<{
101
409
  input: z.ZodString;
@@ -125,15 +433,80 @@ export declare const GeocodeOutcomeSchema: z.ZodObject<{
125
433
  sub_block: "sub_block";
126
434
  building_number: "building_number";
127
435
  building_name: "building_name";
436
+ locality_unit: "locality_unit";
128
437
  }> & z.core.$partial, z.ZodString>;
129
438
  lat: z.ZodNullable<z.ZodNumber>;
130
439
  lon: z.ZodNullable<z.ZodNumber>;
131
440
  resolution_tier: z.ZodEnum<{
132
441
  street: "street";
442
+ venue: "venue";
133
443
  address_point: "address_point";
134
444
  interpolated: "interpolated";
135
445
  admin: "admin";
446
+ plus_code: "plus_code";
136
447
  }>;
448
+ epistemic_status: z.ZodEnum<{
449
+ designated: "designated";
450
+ observed: "observed";
451
+ derived: "derived";
452
+ inferred: "inferred";
453
+ unresolved: "unresolved";
454
+ }>;
455
+ derivation: z.ZodOptional<z.ZodObject<{
456
+ status: z.ZodEnum<{
457
+ designated: "designated";
458
+ observed: "observed";
459
+ derived: "derived";
460
+ inferred: "inferred";
461
+ unresolved: "unresolved";
462
+ }>;
463
+ constraints: z.ZodReadonly<z.ZodArray<z.ZodObject<{
464
+ label: z.ZodString;
465
+ evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
466
+ kind: z.ZodLiteral<"observation">;
467
+ source: z.ZodString;
468
+ vintage: z.ZodNullable<z.ZodString>;
469
+ value: z.ZodUnknown;
470
+ }, z.core.$strip>, z.ZodObject<{
471
+ kind: z.ZodLiteral<"exclusion">;
472
+ source: z.ZodString;
473
+ vintage: z.ZodString;
474
+ scope: z.ZodObject<{
475
+ layer: z.ZodString;
476
+ h3Cell: z.ZodNumber;
477
+ basis: z.ZodEnum<{
478
+ designated: "designated";
479
+ surveyed: "surveyed";
480
+ source_present: "source_present";
481
+ }>;
482
+ fold: z.ZodString;
483
+ }, z.core.$strip>;
484
+ }, z.core.$strip>, z.ZodObject<{
485
+ kind: z.ZodLiteral<"relation">;
486
+ source: z.ZodString;
487
+ vintage: z.ZodString;
488
+ relationship: z.ZodString;
489
+ assertion: z.ZodEnum<{
490
+ inferred: "inferred";
491
+ authoritative: "authoritative";
492
+ }>;
493
+ score: z.ZodOptional<z.ZodNumber>;
494
+ }, z.core.$strip>, z.ZodObject<{
495
+ kind: z.ZodLiteral<"prior">;
496
+ source: z.ZodString;
497
+ label: z.ZodString;
498
+ weight: z.ZodNumber;
499
+ }, z.core.$strip>], "kind">;
500
+ contribution: z.ZodString;
501
+ }, z.core.$strip>>>;
502
+ uncertaintyM: z.ZodNullable<z.ZodNumber>;
503
+ }, z.core.$strip>>;
504
+ entity: z.ZodOptional<z.ZodObject<{
505
+ name: z.ZodString;
506
+ categoryID: z.ZodNullable<z.ZodString>;
507
+ confidence: z.ZodNumber;
508
+ country: z.ZodString;
509
+ }, z.core.$strip>>;
137
510
  uncertainty_m: z.ZodNullable<z.ZodNumber>;
138
511
  locality: z.ZodNullable<z.ZodString>;
139
512
  region: z.ZodNullable<z.ZodString>;
@@ -151,6 +524,7 @@ export declare const GeocodeOutcomeSchema: z.ZodObject<{
151
524
  lat: z.ZodOptional<z.ZodNumber>;
152
525
  lon: z.ZodOptional<z.ZodNumber>;
153
526
  placeID: z.ZodOptional<z.ZodString>;
527
+ in_winner_lineage: z.ZodOptional<z.ZodBoolean>;
154
528
  }, z.core.$strip>>;
155
529
  candidates: z.ZodArray<z.ZodObject<{
156
530
  name: z.ZodString;
@@ -160,7 +534,13 @@ export declare const GeocodeOutcomeSchema: z.ZodObject<{
160
534
  countryCode: z.ZodNullable<z.ZodString>;
161
535
  placeID: z.ZodOptional<z.ZodString>;
162
536
  }, z.core.$strip>>;
537
+ rooftop: z.ZodOptional<z.ZodObject<{
538
+ localityNorm: z.ZodOptional<z.ZodString>;
539
+ postcode: z.ZodOptional<z.ZodString>;
540
+ }, z.core.$strip>>;
163
541
  postcode_country_scope: z.ZodNullable<z.ZodString>;
542
+ capital_promotion: z.ZodOptional<z.ZodString>;
543
+ variant_alias_exemption: z.ZodOptional<z.ZodLiteral<true>>;
164
544
  intent_markers: z.ZodArray<z.ZodObject<{
165
545
  kind: z.ZodEnum<{
166
546
  intersection: "intersection";
@@ -181,12 +561,88 @@ export declare const GeocodeOutcomeSchema: z.ZodObject<{
181
561
  declared_ambiguity: "declared_ambiguity";
182
562
  declared_fork: "declared_fork";
183
563
  focus_point_required: "focus_point_required";
564
+ coverage_qualified_absence: "coverage_qualified_absence";
565
+ authority_designation: "authority_designation";
184
566
  }>;
185
567
  mechanism: z.ZodString;
186
568
  message: z.ZodString;
187
569
  evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
188
570
  }, z.core.$strip>>;
571
+ admin_coherence: z.ZodOptional<z.ZodObject<{
572
+ region: z.ZodEnum<{
573
+ confirmed: "confirmed";
574
+ contradicted: "contradicted";
575
+ unstated: "unstated";
576
+ unverifiable: "unverifiable";
577
+ }>;
578
+ country: z.ZodEnum<{
579
+ confirmed: "confirmed";
580
+ contradicted: "contradicted";
581
+ unstated: "unstated";
582
+ unverifiable: "unverifiable";
583
+ }>;
584
+ }, z.core.$strip>>;
585
+ authoritative: z.ZodOptional<z.ZodObject<{
586
+ provider: z.ZodString;
587
+ status: z.ZodEnum<{
588
+ matched: "matched";
589
+ ambiguous: "ambiguous";
590
+ refused: "refused";
591
+ transport_error: "transport_error";
592
+ }>;
593
+ matches: z.ZodOptional<z.ZodArray<z.ZodObject<{
594
+ provider_place_id: z.ZodString;
595
+ object_ids: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
596
+ canonical_fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
597
+ lat: z.ZodOptional<z.ZodNumber>;
598
+ lon: z.ZodOptional<z.ZodNumber>;
599
+ precision: z.ZodOptional<z.ZodString>;
600
+ match_status: z.ZodEnum<{
601
+ exact: "exact";
602
+ approximate: "approximate";
603
+ }>;
604
+ provider_score: z.ZodOptional<z.ZodNumber>;
605
+ }, z.core.$strip>>>;
606
+ attribution: z.ZodOptional<z.ZodString>;
607
+ license: z.ZodOptional<z.ZodString>;
608
+ retrieved_at: z.ZodOptional<z.ZodString>;
609
+ dataset_version: z.ZodOptional<z.ZodString>;
610
+ error: z.ZodOptional<z.ZodString>;
611
+ }, z.core.$strip>>;
612
+ dropped_components: z.ZodOptional<z.ZodArray<z.ZodObject<{
613
+ tag: z.ZodEnum<{
614
+ country: "country";
615
+ region: "region";
616
+ locality: "locality";
617
+ dependent_locality: "dependent_locality";
618
+ postcode: "postcode";
619
+ subregion: "subregion";
620
+ house_number: "house_number";
621
+ street: "street";
622
+ street_prefix: "street_prefix";
623
+ street_prefix_particle: "street_prefix_particle";
624
+ street_suffix: "street_suffix";
625
+ intersection_a: "intersection_a";
626
+ intersection_b: "intersection_b";
627
+ unit: "unit";
628
+ venue: "venue";
629
+ attention: "attention";
630
+ po_box: "po_box";
631
+ cedex: "cedex";
632
+ prefecture: "prefecture";
633
+ municipality: "municipality";
634
+ district: "district";
635
+ block: "block";
636
+ sub_block: "sub_block";
637
+ building_number: "building_number";
638
+ building_name: "building_name";
639
+ locality_unit: "locality_unit";
640
+ }>;
641
+ value: z.ZodString;
642
+ kept: z.ZodString;
643
+ }, z.core.$strip>>>;
189
644
  }, z.core.$loose>;
645
+ export type GeocodeOutcome = z.infer<typeof GeocodeOutcomeSchema>;
190
646
  /**
191
647
  * `POST /v1/batch` request body.
192
648
  */
@@ -229,15 +685,80 @@ export declare const BatchResponseSchema: z.ZodObject<{
229
685
  sub_block: "sub_block";
230
686
  building_number: "building_number";
231
687
  building_name: "building_name";
688
+ locality_unit: "locality_unit";
232
689
  }> & z.core.$partial, z.ZodString>;
233
690
  lat: z.ZodNullable<z.ZodNumber>;
234
691
  lon: z.ZodNullable<z.ZodNumber>;
235
692
  resolution_tier: z.ZodEnum<{
236
693
  street: "street";
694
+ venue: "venue";
237
695
  address_point: "address_point";
238
696
  interpolated: "interpolated";
239
697
  admin: "admin";
698
+ plus_code: "plus_code";
240
699
  }>;
700
+ epistemic_status: z.ZodEnum<{
701
+ designated: "designated";
702
+ observed: "observed";
703
+ derived: "derived";
704
+ inferred: "inferred";
705
+ unresolved: "unresolved";
706
+ }>;
707
+ derivation: z.ZodOptional<z.ZodObject<{
708
+ status: z.ZodEnum<{
709
+ designated: "designated";
710
+ observed: "observed";
711
+ derived: "derived";
712
+ inferred: "inferred";
713
+ unresolved: "unresolved";
714
+ }>;
715
+ constraints: z.ZodReadonly<z.ZodArray<z.ZodObject<{
716
+ label: z.ZodString;
717
+ evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
718
+ kind: z.ZodLiteral<"observation">;
719
+ source: z.ZodString;
720
+ vintage: z.ZodNullable<z.ZodString>;
721
+ value: z.ZodUnknown;
722
+ }, z.core.$strip>, z.ZodObject<{
723
+ kind: z.ZodLiteral<"exclusion">;
724
+ source: z.ZodString;
725
+ vintage: z.ZodString;
726
+ scope: z.ZodObject<{
727
+ layer: z.ZodString;
728
+ h3Cell: z.ZodNumber;
729
+ basis: z.ZodEnum<{
730
+ designated: "designated";
731
+ surveyed: "surveyed";
732
+ source_present: "source_present";
733
+ }>;
734
+ fold: z.ZodString;
735
+ }, z.core.$strip>;
736
+ }, z.core.$strip>, z.ZodObject<{
737
+ kind: z.ZodLiteral<"relation">;
738
+ source: z.ZodString;
739
+ vintage: z.ZodString;
740
+ relationship: z.ZodString;
741
+ assertion: z.ZodEnum<{
742
+ inferred: "inferred";
743
+ authoritative: "authoritative";
744
+ }>;
745
+ score: z.ZodOptional<z.ZodNumber>;
746
+ }, z.core.$strip>, z.ZodObject<{
747
+ kind: z.ZodLiteral<"prior">;
748
+ source: z.ZodString;
749
+ label: z.ZodString;
750
+ weight: z.ZodNumber;
751
+ }, z.core.$strip>], "kind">;
752
+ contribution: z.ZodString;
753
+ }, z.core.$strip>>>;
754
+ uncertaintyM: z.ZodNullable<z.ZodNumber>;
755
+ }, z.core.$strip>>;
756
+ entity: z.ZodOptional<z.ZodObject<{
757
+ name: z.ZodString;
758
+ categoryID: z.ZodNullable<z.ZodString>;
759
+ confidence: z.ZodNumber;
760
+ country: z.ZodString;
761
+ }, z.core.$strip>>;
241
762
  uncertainty_m: z.ZodNullable<z.ZodNumber>;
242
763
  locality: z.ZodNullable<z.ZodString>;
243
764
  region: z.ZodNullable<z.ZodString>;
@@ -255,6 +776,7 @@ export declare const BatchResponseSchema: z.ZodObject<{
255
776
  lat: z.ZodOptional<z.ZodNumber>;
256
777
  lon: z.ZodOptional<z.ZodNumber>;
257
778
  placeID: z.ZodOptional<z.ZodString>;
779
+ in_winner_lineage: z.ZodOptional<z.ZodBoolean>;
258
780
  }, z.core.$strip>>;
259
781
  candidates: z.ZodArray<z.ZodObject<{
260
782
  name: z.ZodString;
@@ -264,7 +786,13 @@ export declare const BatchResponseSchema: z.ZodObject<{
264
786
  countryCode: z.ZodNullable<z.ZodString>;
265
787
  placeID: z.ZodOptional<z.ZodString>;
266
788
  }, z.core.$strip>>;
789
+ rooftop: z.ZodOptional<z.ZodObject<{
790
+ localityNorm: z.ZodOptional<z.ZodString>;
791
+ postcode: z.ZodOptional<z.ZodString>;
792
+ }, z.core.$strip>>;
267
793
  postcode_country_scope: z.ZodNullable<z.ZodString>;
794
+ capital_promotion: z.ZodOptional<z.ZodString>;
795
+ variant_alias_exemption: z.ZodOptional<z.ZodLiteral<true>>;
268
796
  intent_markers: z.ZodArray<z.ZodObject<{
269
797
  kind: z.ZodEnum<{
270
798
  intersection: "intersection";
@@ -285,11 +813,86 @@ export declare const BatchResponseSchema: z.ZodObject<{
285
813
  declared_ambiguity: "declared_ambiguity";
286
814
  declared_fork: "declared_fork";
287
815
  focus_point_required: "focus_point_required";
816
+ coverage_qualified_absence: "coverage_qualified_absence";
817
+ authority_designation: "authority_designation";
288
818
  }>;
289
819
  mechanism: z.ZodString;
290
820
  message: z.ZodString;
291
821
  evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
292
822
  }, z.core.$strip>>;
823
+ admin_coherence: z.ZodOptional<z.ZodObject<{
824
+ region: z.ZodEnum<{
825
+ confirmed: "confirmed";
826
+ contradicted: "contradicted";
827
+ unstated: "unstated";
828
+ unverifiable: "unverifiable";
829
+ }>;
830
+ country: z.ZodEnum<{
831
+ confirmed: "confirmed";
832
+ contradicted: "contradicted";
833
+ unstated: "unstated";
834
+ unverifiable: "unverifiable";
835
+ }>;
836
+ }, z.core.$strip>>;
837
+ authoritative: z.ZodOptional<z.ZodObject<{
838
+ provider: z.ZodString;
839
+ status: z.ZodEnum<{
840
+ matched: "matched";
841
+ ambiguous: "ambiguous";
842
+ refused: "refused";
843
+ transport_error: "transport_error";
844
+ }>;
845
+ matches: z.ZodOptional<z.ZodArray<z.ZodObject<{
846
+ provider_place_id: z.ZodString;
847
+ object_ids: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
848
+ canonical_fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
849
+ lat: z.ZodOptional<z.ZodNumber>;
850
+ lon: z.ZodOptional<z.ZodNumber>;
851
+ precision: z.ZodOptional<z.ZodString>;
852
+ match_status: z.ZodEnum<{
853
+ exact: "exact";
854
+ approximate: "approximate";
855
+ }>;
856
+ provider_score: z.ZodOptional<z.ZodNumber>;
857
+ }, z.core.$strip>>>;
858
+ attribution: z.ZodOptional<z.ZodString>;
859
+ license: z.ZodOptional<z.ZodString>;
860
+ retrieved_at: z.ZodOptional<z.ZodString>;
861
+ dataset_version: z.ZodOptional<z.ZodString>;
862
+ error: z.ZodOptional<z.ZodString>;
863
+ }, z.core.$strip>>;
864
+ dropped_components: z.ZodOptional<z.ZodArray<z.ZodObject<{
865
+ tag: z.ZodEnum<{
866
+ country: "country";
867
+ region: "region";
868
+ locality: "locality";
869
+ dependent_locality: "dependent_locality";
870
+ postcode: "postcode";
871
+ subregion: "subregion";
872
+ house_number: "house_number";
873
+ street: "street";
874
+ street_prefix: "street_prefix";
875
+ street_prefix_particle: "street_prefix_particle";
876
+ street_suffix: "street_suffix";
877
+ intersection_a: "intersection_a";
878
+ intersection_b: "intersection_b";
879
+ unit: "unit";
880
+ venue: "venue";
881
+ attention: "attention";
882
+ po_box: "po_box";
883
+ cedex: "cedex";
884
+ prefecture: "prefecture";
885
+ municipality: "municipality";
886
+ district: "district";
887
+ block: "block";
888
+ sub_block: "sub_block";
889
+ building_number: "building_number";
890
+ building_name: "building_name";
891
+ locality_unit: "locality_unit";
892
+ }>;
893
+ value: z.ZodString;
894
+ kept: z.ZodString;
895
+ }, z.core.$strip>>>;
293
896
  }, z.core.$loose>, z.ZodObject<{
294
897
  input: z.ZodString;
295
898
  error: z.ZodString;
@@ -301,7 +904,8 @@ export declare const BatchResponseSchema: z.ZodObject<{
301
904
  */
302
905
  export declare const ResolveRequestSchema: z.ZodObject<{
303
906
  tree: z.ZodObject<{
304
- roots: z.ZodArray<z.ZodUnknown>;
907
+ raw: z.ZodString;
908
+ roots: z.ZodArray<z.ZodCustom<AddressNode, AddressNode>>;
305
909
  }, z.core.$loose>;
306
910
  opts: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
307
911
  }, z.core.$strip>;
@@ -310,7 +914,8 @@ export declare const ResolveRequestSchema: z.ZodObject<{
310
914
  */
311
915
  export declare const ResolveResponseSchema: z.ZodObject<{
312
916
  tree: z.ZodObject<{
313
- roots: z.ZodArray<z.ZodUnknown>;
917
+ raw: z.ZodString;
918
+ roots: z.ZodArray<z.ZodCustom<AddressNode, AddressNode>>;
314
919
  }, z.core.$loose>;
315
920
  }, z.core.$strip>;
316
921
  /**
@@ -333,9 +938,11 @@ export declare const FormatResponseSchema: z.ZodObject<{
333
938
  }, z.core.$strip>;
334
939
  /**
335
940
  * `GET /health` response — `status`/`uptime_s` are stamped by the ROUTE itself, unconditionally, regardless of engine
336
- * (`api/routes.ts`'s `healthRoute` handler: `{ status: "ok", uptime_s, ...engine.health?.() }`), so those two are cheap
337
- * + accurate to pin. Everything else is `HealthData` (`api/engine.ts`) — an engine-defined block (model card, data-root
338
- * inventory for `mailwoman serve`; something else entirely for another engine) — stays loose.
941
+ * (`api/routes.ts`'s `healthRoute` handler: `{ status: "ok", uptime_s, ...engine.health?.() }`), so those two are
942
+ * cheap
943
+ *
944
+ * - Accurate to pin. Everything else is `HealthData` (`api/engine.ts`) — an engine-defined block (model card, data-root
945
+ * inventory for `mailwoman serve`; something else entirely for another engine) — stays loose.
339
946
  */
340
947
  export declare const HealthResponseSchema: z.ZodObject<{
341
948
  status: z.ZodLiteral<"ok">;