@mailwoman/api 9.1.0 → 9.2.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
  *
@@ -87,6 +87,165 @@ export declare const GeocodeRequestSchema: z.ZodObject<{
87
87
  formatted: "formatted";
88
88
  }>>;
89
89
  }, z.core.$strip>;
90
+ /**
91
+ * `POST /v1/geocode` response — a hand-modeled mirror of `GeocodeResult`'s wire shape (`mailwoman/geocode-core.ts`),
92
+ * `.loose()` so a field the engine adds that this schema doesn't yet know about still rides through undocumented rather
93
+ * than being stripped or rejected. DOC-ACCURACY ONLY: the route passes `engine.geocode()`'s outcome through verbatim
94
+ * (`GeocodeOutcome = Record<string, unknown>`, `api/engine.ts`) — nothing here validates a real response, so a
95
+ * schema/engine mismatch can never reject or mutate a result at runtime. Deliberately carries NO import from
96
+ * `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.
99
+ */
100
+ export declare const GeocodeOutcomeLikeSchema: z.ZodObject<{
101
+ input: z.ZodString;
102
+ components: z.ZodRecord<z.ZodEnum<{
103
+ country: "country";
104
+ region: "region";
105
+ locality: "locality";
106
+ dependent_locality: "dependent_locality";
107
+ postcode: "postcode";
108
+ subregion: "subregion";
109
+ house_number: "house_number";
110
+ street: "street";
111
+ street_prefix: "street_prefix";
112
+ street_prefix_particle: "street_prefix_particle";
113
+ street_suffix: "street_suffix";
114
+ intersection_a: "intersection_a";
115
+ intersection_b: "intersection_b";
116
+ unit: "unit";
117
+ venue: "venue";
118
+ attention: "attention";
119
+ po_box: "po_box";
120
+ cedex: "cedex";
121
+ prefecture: "prefecture";
122
+ municipality: "municipality";
123
+ district: "district";
124
+ block: "block";
125
+ sub_block: "sub_block";
126
+ building_number: "building_number";
127
+ building_name: "building_name";
128
+ }> & z.core.$partial, z.ZodString>;
129
+ lat: z.ZodNullable<z.ZodNumber>;
130
+ lon: z.ZodNullable<z.ZodNumber>;
131
+ resolution_tier: z.ZodEnum<{
132
+ street: "street";
133
+ venue: "venue";
134
+ address_point: "address_point";
135
+ interpolated: "interpolated";
136
+ admin: "admin";
137
+ plus_code: "plus_code";
138
+ }>;
139
+ entity: z.ZodOptional<z.ZodObject<{
140
+ name: z.ZodString;
141
+ categoryID: z.ZodNullable<z.ZodString>;
142
+ confidence: z.ZodNumber;
143
+ country: z.ZodString;
144
+ }, z.core.$strip>>;
145
+ uncertainty_m: z.ZodNullable<z.ZodNumber>;
146
+ locality: z.ZodNullable<z.ZodString>;
147
+ region: z.ZodNullable<z.ZodString>;
148
+ postcode: z.ZodNullable<z.ZodString>;
149
+ house_number: z.ZodNullable<z.ZodString>;
150
+ street: z.ZodNullable<z.ZodString>;
151
+ venue: z.ZodNullable<z.ZodString>;
152
+ dependent_locality: z.ZodNullable<z.ZodString>;
153
+ unit: z.ZodNullable<z.ZodString>;
154
+ countryCode: z.ZodNullable<z.ZodString>;
155
+ hierarchy: z.ZodArray<z.ZodObject<{
156
+ tag: z.ZodString;
157
+ value: z.ZodString;
158
+ name: z.ZodString;
159
+ lat: z.ZodOptional<z.ZodNumber>;
160
+ lon: z.ZodOptional<z.ZodNumber>;
161
+ placeID: z.ZodOptional<z.ZodString>;
162
+ in_winner_lineage: z.ZodOptional<z.ZodBoolean>;
163
+ }, z.core.$strip>>;
164
+ candidates: z.ZodArray<z.ZodObject<{
165
+ name: z.ZodString;
166
+ tag: z.ZodString;
167
+ lat: z.ZodNumber;
168
+ lon: z.ZodNumber;
169
+ countryCode: z.ZodNullable<z.ZodString>;
170
+ placeID: z.ZodOptional<z.ZodString>;
171
+ }, z.core.$strip>>;
172
+ rooftop: z.ZodOptional<z.ZodObject<{
173
+ localityNorm: z.ZodOptional<z.ZodString>;
174
+ postcode: z.ZodOptional<z.ZodString>;
175
+ }, z.core.$strip>>;
176
+ postcode_country_scope: z.ZodNullable<z.ZodString>;
177
+ intent_markers: z.ZodArray<z.ZodObject<{
178
+ kind: z.ZodEnum<{
179
+ intersection: "intersection";
180
+ po_box: "po_box";
181
+ postcode_only: "postcode_only";
182
+ locality_only: "locality_only";
183
+ structured_address: "structured_address";
184
+ landmark: "landmark";
185
+ poi_query: "poi_query";
186
+ vague: "vague";
187
+ bare_toponym: "bare_toponym";
188
+ route_pair: "route_pair";
189
+ near_me: "near_me";
190
+ poi_category: "poi_category";
191
+ }>;
192
+ code: z.ZodEnum<{
193
+ poi_category: "poi_category";
194
+ declared_ambiguity: "declared_ambiguity";
195
+ declared_fork: "declared_fork";
196
+ focus_point_required: "focus_point_required";
197
+ }>;
198
+ mechanism: z.ZodString;
199
+ message: z.ZodString;
200
+ evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
201
+ }, z.core.$strip>>;
202
+ admin_coherence: z.ZodOptional<z.ZodObject<{
203
+ region: z.ZodEnum<{
204
+ confirmed: "confirmed";
205
+ contradicted: "contradicted";
206
+ unstated: "unstated";
207
+ unverifiable: "unverifiable";
208
+ }>;
209
+ country: z.ZodEnum<{
210
+ confirmed: "confirmed";
211
+ contradicted: "contradicted";
212
+ unstated: "unstated";
213
+ unverifiable: "unverifiable";
214
+ }>;
215
+ }, z.core.$strip>>;
216
+ dropped_components: z.ZodOptional<z.ZodArray<z.ZodObject<{
217
+ tag: z.ZodEnum<{
218
+ country: "country";
219
+ region: "region";
220
+ locality: "locality";
221
+ dependent_locality: "dependent_locality";
222
+ postcode: "postcode";
223
+ subregion: "subregion";
224
+ house_number: "house_number";
225
+ street: "street";
226
+ street_prefix: "street_prefix";
227
+ street_prefix_particle: "street_prefix_particle";
228
+ street_suffix: "street_suffix";
229
+ intersection_a: "intersection_a";
230
+ intersection_b: "intersection_b";
231
+ unit: "unit";
232
+ venue: "venue";
233
+ attention: "attention";
234
+ po_box: "po_box";
235
+ cedex: "cedex";
236
+ prefecture: "prefecture";
237
+ municipality: "municipality";
238
+ district: "district";
239
+ block: "block";
240
+ sub_block: "sub_block";
241
+ building_number: "building_number";
242
+ building_name: "building_name";
243
+ }>;
244
+ value: z.ZodString;
245
+ kept: z.ZodString;
246
+ }, z.core.$strip>>>;
247
+ }, z.core.$strip>;
248
+ export type GeocodeOutcomeLike = z.infer<typeof GeocodeOutcomeLikeSchema>;
90
249
  /**
91
250
  * `POST /v1/geocode` response — a hand-modeled mirror of `GeocodeResult`'s wire shape (`mailwoman/geocode-core.ts`),
92
251
  * `.loose()` so a field the engine adds that this schema doesn't yet know about still rides through undocumented rather
@@ -130,10 +289,18 @@ export declare const GeocodeOutcomeSchema: z.ZodObject<{
130
289
  lon: z.ZodNullable<z.ZodNumber>;
131
290
  resolution_tier: z.ZodEnum<{
132
291
  street: "street";
292
+ venue: "venue";
133
293
  address_point: "address_point";
134
294
  interpolated: "interpolated";
135
295
  admin: "admin";
296
+ plus_code: "plus_code";
136
297
  }>;
298
+ entity: z.ZodOptional<z.ZodObject<{
299
+ name: z.ZodString;
300
+ categoryID: z.ZodNullable<z.ZodString>;
301
+ confidence: z.ZodNumber;
302
+ country: z.ZodString;
303
+ }, z.core.$strip>>;
137
304
  uncertainty_m: z.ZodNullable<z.ZodNumber>;
138
305
  locality: z.ZodNullable<z.ZodString>;
139
306
  region: z.ZodNullable<z.ZodString>;
@@ -151,6 +318,7 @@ export declare const GeocodeOutcomeSchema: z.ZodObject<{
151
318
  lat: z.ZodOptional<z.ZodNumber>;
152
319
  lon: z.ZodOptional<z.ZodNumber>;
153
320
  placeID: z.ZodOptional<z.ZodString>;
321
+ in_winner_lineage: z.ZodOptional<z.ZodBoolean>;
154
322
  }, z.core.$strip>>;
155
323
  candidates: z.ZodArray<z.ZodObject<{
156
324
  name: z.ZodString;
@@ -160,6 +328,10 @@ export declare const GeocodeOutcomeSchema: z.ZodObject<{
160
328
  countryCode: z.ZodNullable<z.ZodString>;
161
329
  placeID: z.ZodOptional<z.ZodString>;
162
330
  }, z.core.$strip>>;
331
+ rooftop: z.ZodOptional<z.ZodObject<{
332
+ localityNorm: z.ZodOptional<z.ZodString>;
333
+ postcode: z.ZodOptional<z.ZodString>;
334
+ }, z.core.$strip>>;
163
335
  postcode_country_scope: z.ZodNullable<z.ZodString>;
164
336
  intent_markers: z.ZodArray<z.ZodObject<{
165
337
  kind: z.ZodEnum<{
@@ -186,7 +358,53 @@ export declare const GeocodeOutcomeSchema: z.ZodObject<{
186
358
  message: z.ZodString;
187
359
  evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
188
360
  }, z.core.$strip>>;
361
+ admin_coherence: z.ZodOptional<z.ZodObject<{
362
+ region: z.ZodEnum<{
363
+ confirmed: "confirmed";
364
+ contradicted: "contradicted";
365
+ unstated: "unstated";
366
+ unverifiable: "unverifiable";
367
+ }>;
368
+ country: z.ZodEnum<{
369
+ confirmed: "confirmed";
370
+ contradicted: "contradicted";
371
+ unstated: "unstated";
372
+ unverifiable: "unverifiable";
373
+ }>;
374
+ }, z.core.$strip>>;
375
+ dropped_components: z.ZodOptional<z.ZodArray<z.ZodObject<{
376
+ tag: z.ZodEnum<{
377
+ country: "country";
378
+ region: "region";
379
+ locality: "locality";
380
+ dependent_locality: "dependent_locality";
381
+ postcode: "postcode";
382
+ subregion: "subregion";
383
+ house_number: "house_number";
384
+ street: "street";
385
+ street_prefix: "street_prefix";
386
+ street_prefix_particle: "street_prefix_particle";
387
+ street_suffix: "street_suffix";
388
+ intersection_a: "intersection_a";
389
+ intersection_b: "intersection_b";
390
+ unit: "unit";
391
+ venue: "venue";
392
+ attention: "attention";
393
+ po_box: "po_box";
394
+ cedex: "cedex";
395
+ prefecture: "prefecture";
396
+ municipality: "municipality";
397
+ district: "district";
398
+ block: "block";
399
+ sub_block: "sub_block";
400
+ building_number: "building_number";
401
+ building_name: "building_name";
402
+ }>;
403
+ value: z.ZodString;
404
+ kept: z.ZodString;
405
+ }, z.core.$strip>>>;
189
406
  }, z.core.$loose>;
407
+ export type GeocodeOutcome = z.infer<typeof GeocodeOutcomeSchema>;
190
408
  /**
191
409
  * `POST /v1/batch` request body.
192
410
  */
@@ -234,10 +452,18 @@ export declare const BatchResponseSchema: z.ZodObject<{
234
452
  lon: z.ZodNullable<z.ZodNumber>;
235
453
  resolution_tier: z.ZodEnum<{
236
454
  street: "street";
455
+ venue: "venue";
237
456
  address_point: "address_point";
238
457
  interpolated: "interpolated";
239
458
  admin: "admin";
459
+ plus_code: "plus_code";
240
460
  }>;
461
+ entity: z.ZodOptional<z.ZodObject<{
462
+ name: z.ZodString;
463
+ categoryID: z.ZodNullable<z.ZodString>;
464
+ confidence: z.ZodNumber;
465
+ country: z.ZodString;
466
+ }, z.core.$strip>>;
241
467
  uncertainty_m: z.ZodNullable<z.ZodNumber>;
242
468
  locality: z.ZodNullable<z.ZodString>;
243
469
  region: z.ZodNullable<z.ZodString>;
@@ -255,6 +481,7 @@ export declare const BatchResponseSchema: z.ZodObject<{
255
481
  lat: z.ZodOptional<z.ZodNumber>;
256
482
  lon: z.ZodOptional<z.ZodNumber>;
257
483
  placeID: z.ZodOptional<z.ZodString>;
484
+ in_winner_lineage: z.ZodOptional<z.ZodBoolean>;
258
485
  }, z.core.$strip>>;
259
486
  candidates: z.ZodArray<z.ZodObject<{
260
487
  name: z.ZodString;
@@ -264,6 +491,10 @@ export declare const BatchResponseSchema: z.ZodObject<{
264
491
  countryCode: z.ZodNullable<z.ZodString>;
265
492
  placeID: z.ZodOptional<z.ZodString>;
266
493
  }, z.core.$strip>>;
494
+ rooftop: z.ZodOptional<z.ZodObject<{
495
+ localityNorm: z.ZodOptional<z.ZodString>;
496
+ postcode: z.ZodOptional<z.ZodString>;
497
+ }, z.core.$strip>>;
267
498
  postcode_country_scope: z.ZodNullable<z.ZodString>;
268
499
  intent_markers: z.ZodArray<z.ZodObject<{
269
500
  kind: z.ZodEnum<{
@@ -290,6 +521,51 @@ export declare const BatchResponseSchema: z.ZodObject<{
290
521
  message: z.ZodString;
291
522
  evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
292
523
  }, z.core.$strip>>;
524
+ admin_coherence: z.ZodOptional<z.ZodObject<{
525
+ region: z.ZodEnum<{
526
+ confirmed: "confirmed";
527
+ contradicted: "contradicted";
528
+ unstated: "unstated";
529
+ unverifiable: "unverifiable";
530
+ }>;
531
+ country: z.ZodEnum<{
532
+ confirmed: "confirmed";
533
+ contradicted: "contradicted";
534
+ unstated: "unstated";
535
+ unverifiable: "unverifiable";
536
+ }>;
537
+ }, z.core.$strip>>;
538
+ dropped_components: z.ZodOptional<z.ZodArray<z.ZodObject<{
539
+ tag: z.ZodEnum<{
540
+ country: "country";
541
+ region: "region";
542
+ locality: "locality";
543
+ dependent_locality: "dependent_locality";
544
+ postcode: "postcode";
545
+ subregion: "subregion";
546
+ house_number: "house_number";
547
+ street: "street";
548
+ street_prefix: "street_prefix";
549
+ street_prefix_particle: "street_prefix_particle";
550
+ street_suffix: "street_suffix";
551
+ intersection_a: "intersection_a";
552
+ intersection_b: "intersection_b";
553
+ unit: "unit";
554
+ venue: "venue";
555
+ attention: "attention";
556
+ po_box: "po_box";
557
+ cedex: "cedex";
558
+ prefecture: "prefecture";
559
+ municipality: "municipality";
560
+ district: "district";
561
+ block: "block";
562
+ sub_block: "sub_block";
563
+ building_number: "building_number";
564
+ building_name: "building_name";
565
+ }>;
566
+ value: z.ZodString;
567
+ kept: z.ZodString;
568
+ }, z.core.$strip>>>;
293
569
  }, z.core.$loose>, z.ZodObject<{
294
570
  input: z.ZodString;
295
571
  error: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;EAA2D,CAAA;AAEvF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAA;AAEtC;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;iBAMN,CAAA;AAEzB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;iBAA6E,CAAA;AAE9G;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAON,CAAA;AAEzB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;iBAKN,CAAA;AAuG3B;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+BN,CAAA;AAE3B;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;iBAUN,CAAA;AAYzB;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIN,CAAA;AAE1B;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;iBAKN,CAAA;AAE3B;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;iBAIN,CAAA;AAQ5B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;iBAMN,CAAA;AAE1B;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;iBAKN,CAAA;AAE3B;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;iBAMN,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;EAA2D,CAAA;AAEvF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAA;AAEtC;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;iBAMN,CAAA;AAEzB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;iBAA6E,CAAA;AAE9G;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAON,CAAA;AAEzB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;iBAKN,CAAA;AA8G3B;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsEnC,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA6D,CAAA;AAE9F,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;iBAUN,CAAA;AAYzB;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIN,CAAA;AAE1B;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;iBAKN,CAAA;AAE3B;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;iBAIN,CAAA;AAQ5B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;iBAMN,CAAA;AAE1B;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;iBAKN,CAAA;AAE3B;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;iBAMN,CAAA"}
package/out/schema.js 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
  *
@@ -89,6 +89,9 @@ const GeocodeHierarchyEntrySchema = z
89
89
  lat: z.number().optional(),
90
90
  lon: z.number().optional(),
91
91
  placeID: z.string().optional(),
92
+ // #1731 tri-state lineage provenance: true = the winner's ancestor chain vouches for this entry, false =
93
+ // resolved independently OUTSIDE the winner's lineage, absent = unverifiable. Absence is not false.
94
+ in_winner_lineage: z.boolean().optional(),
92
95
  })
93
96
  .openapi("GeocodeHierarchyEntry");
94
97
  /**
@@ -106,11 +109,11 @@ const GeocodeCandidateSchema = z
106
109
  })
107
110
  .openapi("GeocodeCandidate");
108
111
  /**
109
- * Canonical parsed-component map carried by `GeocodeResult.components`. Spelled out at this engine-agnostic API
110
- * boundary for the same reason the result schema is hand-modeled; the compile-time drift pin in
111
- * `mailwoman/test/api-schema-drift.test.ts` catches any mismatch with the real `ComponentTag`-keyed result type.
112
+ * The `ComponentTag` union at this engine-agnostic boundary, named once so every schema that speaks about a tag speaks
113
+ * about the SAME list. Two hand-copied enums would agree on the day they were written and diverge on the day a tag is
114
+ * added the shape of defect `feedback-parity-needs-shared-function-not-shared-constants` describes.
112
115
  */
113
- const GeocodeComponentsSchema = z.partialRecord(z.enum([
116
+ const ComponentTagSchema = z.enum([
114
117
  "country",
115
118
  "region",
116
119
  "locality",
@@ -136,7 +139,13 @@ const GeocodeComponentsSchema = z.partialRecord(z.enum([
136
139
  "sub_block",
137
140
  "building_number",
138
141
  "building_name",
139
- ]), z.string());
142
+ ]);
143
+ /**
144
+ * Canonical parsed-component map carried by `GeocodeResult.components`. Spelled out at this engine-agnostic API
145
+ * boundary for the same reason the result schema is hand-modeled; the compile-time drift pin in
146
+ * `mailwoman/test/api-schema-drift.test.ts` catches any mismatch with the real `ComponentTag`-keyed result type.
147
+ */
148
+ const GeocodeComponentsSchema = z.partialRecord(ComponentTagSchema, z.string());
140
149
  /**
141
150
  * One `GeocodeOutcome.intent_markers` entry — an advisory the ROAD_TO_V9 §4 intent vocabulary raised about the QUERY.
142
151
  * Mirrors `QueryIntentMarker` (`core/pipeline/types.ts`).
@@ -180,13 +189,22 @@ const QueryIntentMarkerSchema = z
180
189
  * `@mailwoman/api`, never the reverse). `mailwoman/test/api-schema-drift.test.ts` is the compile-time tripwire that
181
190
  * catches this shape drifting from the real `GeocodeResult` interface.
182
191
  */
183
- export const GeocodeOutcomeSchema = z
184
- .object({
192
+ export const GeocodeOutcomeLikeSchema = z.object({
185
193
  input: z.string(),
186
194
  components: GeocodeComponentsSchema,
187
195
  lat: z.number().nullable(),
188
196
  lon: z.number().nullable(),
189
- resolution_tier: z.enum(["address_point", "interpolated", "street", "admin"]),
197
+ resolution_tier: z.enum(["address_point", "interpolated", "street", "admin", "venue", "plus_code"]),
198
+ // The fork→entity probe's answer (#1585) — present only on the `venue` tier; see geocode-core's
199
+ // GeocodeResult.entity.
200
+ entity: z
201
+ .object({
202
+ name: z.string(),
203
+ categoryID: z.string().nullable(),
204
+ confidence: z.number(),
205
+ country: z.string(),
206
+ })
207
+ .optional(),
190
208
  uncertainty_m: z.number().nullable(),
191
209
  locality: z.string().nullable(),
192
210
  region: z.string().nullable(),
@@ -202,6 +220,14 @@ export const GeocodeOutcomeSchema = z
202
220
  countryCode: z.string().nullable(),
203
221
  hierarchy: z.array(GeocodeHierarchyEntrySchema),
204
222
  candidates: z.array(GeocodeCandidateSchema),
223
+ // The register row's OWN scope tags when the address_point tier answered and its shard carries
224
+ // them (normalized locality key + postcode of the ROOFTOP) — see geocode-core's GeocodeResult.rooftop.
225
+ rooftop: z
226
+ .object({
227
+ localityNorm: z.string().optional(),
228
+ postcode: z.string().optional(),
229
+ })
230
+ .optional(),
205
231
  // #42: the country the postcode-country coherence pass scoped the walk to, or null. Non-null ONLY when it
206
232
  // OVERRODE the request's country prior — so a caller who asked for US and got an FR answer can see which
207
233
  // evidence bought the change instead of reading it as a bug.
@@ -209,9 +235,40 @@ export const GeocodeOutcomeSchema = z
209
235
  // ROAD_TO_V9 §4: query-intent advisories. Always present; empty means the vocabulary looked and had nothing to
210
236
  // say. Advisory ONLY — no marker changed which answer won, and a client is free to ignore the array entirely.
211
237
  intent_markers: z.array(QueryIntentMarkerSchema),
212
- })
213
- .loose()
214
- .openapi("GeocodeOutcome");
238
+ // #1717 stage 1: flag-only admin-coherence verdicts — did the winning candidate's resolved ancestry confirm,
239
+ // contradict, or fail to speak to the PARSED region/country qualifiers? Nothing ranks or gates on these; present
240
+ // whenever a winner resolved (both members always populated — `unstated` is the explicit no-qualifier claim),
241
+ // absent when nothing resolved to check against. See mailwoman's `admin-coherence.ts` for the verdict contract.
242
+ admin_coherence: z
243
+ .object({
244
+ region: z.enum(["confirmed", "contradicted", "unstated", "unverifiable"]),
245
+ country: z.enum(["confirmed", "contradicted", "unstated", "unverifiable"]),
246
+ })
247
+ .optional(),
248
+ // #1755: spans the flat `components` map could not represent. `components` holds one value per tag, so a second
249
+ // `locality` span ceases to exist there — and without this line `region: null` means both "the input named no
250
+ // region" and "it named one and we deleted it". Absent when nothing was dropped; never an empty array on the wire,
251
+ // because the common case is nothing dropped and a client should not have to read a field to learn that.
252
+ dropped_components: z
253
+ .array(z.object({
254
+ tag: ComponentTagSchema,
255
+ value: z.string(),
256
+ // The value that held the slot, so a reader sees which of the two survived without re-deriving it.
257
+ kept: z.string(),
258
+ }))
259
+ .optional(),
260
+ });
261
+ /**
262
+ * `POST /v1/geocode` response — a hand-modeled mirror of `GeocodeResult`'s wire shape (`mailwoman/geocode-core.ts`),
263
+ * `.loose()` so a field the engine adds that this schema doesn't yet know about still rides through undocumented rather
264
+ * than being stripped or rejected. DOC-ACCURACY ONLY: the route passes `engine.geocode()`'s outcome through verbatim
265
+ * (`GeocodeOutcome = Record<string, unknown>`, `api/engine.ts`) — nothing here validates a real response, so a
266
+ * schema/engine mismatch can never reject or mutate a result at runtime. Deliberately carries NO import from
267
+ * `mailwoman` (the engine-agnosticism boundary — `mailwoman` is the one workspace allowed to depend on
268
+ * `@mailwoman/api`, never the reverse). `mailwoman/test/api-schema-drift.test.ts` is the compile-time tripwire that
269
+ * catches this shape drifting from the real `GeocodeResult` interface.
270
+ */
271
+ export const GeocodeOutcomeSchema = GeocodeOutcomeLikeSchema.loose().openapi("GeocodeOutcome");
215
272
  /**
216
273
  * `POST /v1/batch` request body.
217
274
  */
package/out/schema.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@mailwoman/api",
3
- "version": "9.1.0",
3
+ "version": "9.2.0",
4
4
  "description": "The native Mailwoman HTTP API — engine-agnostic /v1 surface (parse, geocode, batch, resolve, format) with health, metrics, and an emitted OpenAPI document.",
5
5
  "license": "AGPL-3.0-only OR LicenseRef-Commercial",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "https://github.com/sister-software/mailwoman.git",
9
- "directory": "api"
9
+ "directory": "packages/api"
10
10
  },
11
11
  "files": [
12
12
  "out/**/*.js",
@@ -21,14 +21,22 @@
21
21
  "!*.test.ts",
22
22
  "!*.test.tsx",
23
23
  "!**/*.test.ts",
24
- "!**/*.test.tsx"
24
+ "!**/*.test.tsx",
25
+ "!test/**"
25
26
  ],
26
27
  "type": "module",
28
+ "imports": {
29
+ "#package.json": "./package.json"
30
+ },
27
31
  "exports": {
28
32
  "./package.json": "./package.json",
29
33
  ".": {
30
34
  "types": "./out/index.d.ts",
31
35
  "default": "./out/index.js"
36
+ },
37
+ "./schema": {
38
+ "types": "./out/schema.d.ts",
39
+ "default": "./out/schema.js"
32
40
  }
33
41
  },
34
42
  "publishConfig": {
@@ -38,14 +46,21 @@
38
46
  ".": {
39
47
  "types": "./out/index.d.ts",
40
48
  "default": "./out/index.js"
49
+ },
50
+ "./schema": {
51
+ "types": "./out/schema.d.ts",
52
+ "default": "./out/schema.js"
41
53
  }
54
+ },
55
+ "imports": {
56
+ "#package.json": "./package.json"
42
57
  }
43
58
  },
44
59
  "dependencies": {
45
60
  "@hono/zod-openapi": "^1.5.1",
46
- "@mailwoman/api-kit": "9.1.0",
47
- "@mailwoman/core": "9.1.0",
48
- "@mailwoman/formatter": "9.1.0",
61
+ "@mailwoman/api-kit": "9.2.0",
62
+ "@mailwoman/core": "9.2.0",
63
+ "@mailwoman/formatter": "9.2.0",
49
64
  "hono": "^4.13.0",
50
65
  "zod": "^4.4.3"
51
66
  }