@mailwoman/api 8.1.0 → 8.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/app.ts +16 -6
- package/engine.ts +24 -8
- package/out/app.d.ts +12 -4
- package/out/app.d.ts.map +1 -1
- package/out/app.js +7 -3
- package/out/app.js.map +1 -1
- package/out/engine.d.ts +27 -7
- package/out/engine.d.ts.map +1 -1
- package/out/routes.d.ts +9 -3
- package/out/routes.d.ts.map +1 -1
- package/out/routes.js +18 -9
- package/out/routes.js.map +1 -1
- package/out/schema.d.ts +45 -7
- package/out/schema.d.ts.map +1 -1
- package/out/schema.js +51 -9
- package/out/schema.js.map +1 -1
- package/package.json +4 -4
- package/routes.ts +24 -11
- package/schema.ts +55 -9
package/app.ts
CHANGED
|
@@ -17,10 +17,14 @@ import { cors } from "hono/cors"
|
|
|
17
17
|
import type { MailwomanAPIEngine } from "./engine.ts"
|
|
18
18
|
import { DEFAULT_BATCH_MAX, registerMailwomanAPIRoutes } from "./routes.ts"
|
|
19
19
|
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* 2 MiB — carried from the express server's `express.json({ limit: "2mb" })` (`mailwoman/server/index.ts`).
|
|
22
|
+
*/
|
|
21
23
|
const DEFAULT_BODY_LIMIT_BYTES = 2 * 1024 * 1024
|
|
22
24
|
|
|
23
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Options for {@link createMailwomanAPI}.
|
|
27
|
+
*/
|
|
24
28
|
export interface MailwomanAPIOptions {
|
|
25
29
|
/**
|
|
26
30
|
* Emit permissive CORS headers (`Access-Control-Allow-Origin: *`) on every response and answer preflight `OPTIONS`
|
|
@@ -30,10 +34,14 @@ export interface MailwomanAPIOptions {
|
|
|
30
34
|
*/
|
|
31
35
|
cors?: boolean
|
|
32
36
|
|
|
33
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Max request body size in bytes, enforced ahead of every `/v1/*` handler. Default 2 MiB.
|
|
39
|
+
*/
|
|
34
40
|
bodyLimitBytes?: number
|
|
35
41
|
|
|
36
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Max `addresses` rows accepted by `POST /v1/batch`. Default 500 (see `routes.ts`'s `DEFAULT_BATCH_MAX`).
|
|
44
|
+
*/
|
|
37
45
|
batchMax?: number
|
|
38
46
|
}
|
|
39
47
|
|
|
@@ -72,7 +80,9 @@ export const MAILWOMAN_API_DOC_INFO: OpenAPIDocInfo = {
|
|
|
72
80
|
],
|
|
73
81
|
}
|
|
74
82
|
|
|
75
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* Build the native Mailwoman app around an injected {@link MailwomanAPIEngine}.
|
|
85
|
+
*/
|
|
76
86
|
export function createMailwomanAPI(engine: MailwomanAPIEngine, options: MailwomanAPIOptions = {}): OpenAPIHono {
|
|
77
87
|
const app = new OpenAPIHono({
|
|
78
88
|
// This surface is ours (no vendor contract to preserve): every declared body/query schema is
|
|
@@ -92,7 +102,7 @@ export function createMailwomanAPI(engine: MailwomanAPIEngine, options: Mailwoma
|
|
|
92
102
|
// Browser-embedded clients need CORS or their cross-origin XHR (including the mutating `/v1/*` preflight) is
|
|
93
103
|
// blocked before it completes (#1017). GET+POST, unlike the read-only drop-ins (photon, nominatim).
|
|
94
104
|
if (options.cors !== false) {
|
|
95
|
-
app.use(cors({ origin: "*", allowMethods: ["GET", "POST", "OPTIONS"], allowHeaders: ["*"], maxAge:
|
|
105
|
+
app.use(cors({ origin: "*", allowMethods: ["GET", "POST", "OPTIONS"], allowHeaders: ["*"], maxAge: 86_400 }))
|
|
96
106
|
}
|
|
97
107
|
|
|
98
108
|
// Safety net: an engine fault answers the native envelope, never a crash. `detail` carries the raw message —
|
package/engine.ts
CHANGED
|
@@ -10,13 +10,17 @@
|
|
|
10
10
|
|
|
11
11
|
import type { AddressTree } from "@mailwoman/core"
|
|
12
12
|
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* One parsed component in reading order (a `ComponentTag` + the covered text).
|
|
15
|
+
*/
|
|
14
16
|
export interface ParseComponent {
|
|
15
17
|
tag: string
|
|
16
18
|
value: string
|
|
17
19
|
}
|
|
18
20
|
|
|
19
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* One parse outcome: ordered components + the full decoded tree (the same language `/v1/resolve` speaks).
|
|
23
|
+
*/
|
|
20
24
|
export interface ParseOutcome {
|
|
21
25
|
input: string
|
|
22
26
|
components: ParseComponent[]
|
|
@@ -24,23 +28,35 @@ export interface ParseOutcome {
|
|
|
24
28
|
debug?: string
|
|
25
29
|
}
|
|
26
30
|
|
|
27
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* A geocode outcome — the engine returns the geocode-core `GeocodeResult` shape verbatim (passthrough).
|
|
33
|
+
*/
|
|
28
34
|
export type GeocodeOutcome = Record<string, unknown>
|
|
29
35
|
|
|
30
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* A batch row: a GeocodeOutcome, or an `{ input, error }` slot (per-row isolation).
|
|
38
|
+
*/
|
|
31
39
|
export type BatchRow = GeocodeOutcome | { input: string; error: string }
|
|
32
40
|
|
|
33
41
|
export interface ResolveTreeOutcome {
|
|
34
42
|
tree: AddressTree
|
|
35
43
|
}
|
|
36
44
|
|
|
37
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* The `/health` data block the engine contributes (model card, data-root inventory).
|
|
47
|
+
*/
|
|
38
48
|
export type HealthData = Record<string, unknown>
|
|
39
49
|
|
|
50
|
+
/**
|
|
51
|
+
* The input register (Decision A / GTM B10; canonical docs on `@mailwoman/core/pipeline`'s `InputMode` — duplicated
|
|
52
|
+
* structurally so `@mailwoman/api` stays engine-agnostic). `formatted` runs the evidence-bundle channels off.
|
|
53
|
+
*/
|
|
54
|
+
export type WireInputMode = "fragmented" | "formatted"
|
|
55
|
+
|
|
40
56
|
export interface MailwomanAPIEngine {
|
|
41
|
-
parse?(address: string, opts: { debug: boolean }): Promise<ParseOutcome>
|
|
42
|
-
geocode?(address: string): Promise<GeocodeOutcome>
|
|
43
|
-
batch?(addresses: string[]): Promise<{ results: BatchRow[] }>
|
|
57
|
+
parse?(address: string, opts: { debug: boolean; inputMode?: WireInputMode }): Promise<ParseOutcome>
|
|
58
|
+
geocode?(address: string, opts?: { inputMode?: WireInputMode }): Promise<GeocodeOutcome>
|
|
59
|
+
batch?(addresses: string[], opts?: { inputMode?: WireInputMode }): Promise<{ results: BatchRow[] }>
|
|
44
60
|
resolveTree?(tree: AddressTree, opts: Record<string, unknown>): Promise<ResolveTreeOutcome>
|
|
45
61
|
reload?(): Promise<{ reloaded: boolean; versions: unknown }>
|
|
46
62
|
health?(): HealthData
|
package/out/app.d.ts
CHANGED
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
import { OpenAPIHono } from "@hono/zod-openapi";
|
|
11
11
|
import { type OpenAPIDocInfo } from "@mailwoman/api-kit";
|
|
12
12
|
import type { MailwomanAPIEngine } from "./engine.ts";
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Options for {@link createMailwomanAPI}.
|
|
15
|
+
*/
|
|
14
16
|
export interface MailwomanAPIOptions {
|
|
15
17
|
/**
|
|
16
18
|
* Emit permissive CORS headers (`Access-Control-Allow-Origin: *`) on every response and answer preflight `OPTIONS`
|
|
@@ -19,9 +21,13 @@ export interface MailwomanAPIOptions {
|
|
|
19
21
|
* CORS headers.
|
|
20
22
|
*/
|
|
21
23
|
cors?: boolean;
|
|
22
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Max request body size in bytes, enforced ahead of every `/v1/*` handler. Default 2 MiB.
|
|
26
|
+
*/
|
|
23
27
|
bodyLimitBytes?: number;
|
|
24
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Max `addresses` rows accepted by `POST /v1/batch`. Default 500 (see `routes.ts`'s `DEFAULT_BATCH_MAX`).
|
|
30
|
+
*/
|
|
25
31
|
batchMax?: number;
|
|
26
32
|
}
|
|
27
33
|
/**
|
|
@@ -30,6 +36,8 @@ export interface MailwomanAPIOptions {
|
|
|
30
36
|
* {@link attachOpenAPIDocs}) uses — one source of truth, no risk of the two drifting.
|
|
31
37
|
*/
|
|
32
38
|
export declare const MAILWOMAN_API_DOC_INFO: OpenAPIDocInfo;
|
|
33
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Build the native Mailwoman app around an injected {@link MailwomanAPIEngine}.
|
|
41
|
+
*/
|
|
34
42
|
export declare function createMailwomanAPI(engine: MailwomanAPIEngine, options?: MailwomanAPIOptions): OpenAPIHono;
|
|
35
43
|
//# sourceMappingURL=app.d.ts.map
|
package/out/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAKrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAKrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAQrD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAUD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,cAoBpC,CAAA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAE,mBAAwB,GAAG,WAAW,CAkD7G"}
|
package/out/app.js
CHANGED
|
@@ -13,7 +13,9 @@ import packageJson from "@mailwoman/api/package.json" with { type: "json" };
|
|
|
13
13
|
import { bodyLimit } from "hono/body-limit";
|
|
14
14
|
import { cors } from "hono/cors";
|
|
15
15
|
import { DEFAULT_BATCH_MAX, registerMailwomanAPIRoutes } from "./routes.js";
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* 2 MiB — carried from the express server's `express.json({ limit: "2mb" })` (`mailwoman/server/index.ts`).
|
|
18
|
+
*/
|
|
17
19
|
const DEFAULT_BODY_LIMIT_BYTES = 2 * 1024 * 1024;
|
|
18
20
|
/**
|
|
19
21
|
* Short, single-line summary of a zod validation failure for the envelope's `detail` field — not the full `ZodError`,
|
|
@@ -48,7 +50,9 @@ export const MAILWOMAN_API_DOC_INFO = {
|
|
|
48
50
|
{ name: "meta", description: "Health, metrics, and deploy-time operations." },
|
|
49
51
|
],
|
|
50
52
|
};
|
|
51
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Build the native Mailwoman app around an injected {@link MailwomanAPIEngine}.
|
|
55
|
+
*/
|
|
52
56
|
export function createMailwomanAPI(engine, options = {}) {
|
|
53
57
|
const app = new OpenAPIHono({
|
|
54
58
|
// This surface is ours (no vendor contract to preserve): every declared body/query schema is
|
|
@@ -66,7 +70,7 @@ export function createMailwomanAPI(engine, options = {}) {
|
|
|
66
70
|
// Browser-embedded clients need CORS or their cross-origin XHR (including the mutating `/v1/*` preflight) is
|
|
67
71
|
// blocked before it completes (#1017). GET+POST, unlike the read-only drop-ins (photon, nominatim).
|
|
68
72
|
if (options.cors !== false) {
|
|
69
|
-
app.use(cors({ origin: "*", allowMethods: ["GET", "POST", "OPTIONS"], allowHeaders: ["*"], maxAge:
|
|
73
|
+
app.use(cors({ origin: "*", allowMethods: ["GET", "POST", "OPTIONS"], allowHeaders: ["*"], maxAge: 86_400 }));
|
|
70
74
|
}
|
|
71
75
|
// Safety net: an engine fault answers the native envelope, never a crash. `detail` carries the raw message —
|
|
72
76
|
// this surface is ours to design, so (unlike the vendor-constrained drop-in envelopes) we can be helpful.
|
package/out/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAuB,MAAM,oBAAoB,CAAA;AACrF,OAAO,WAAW,MAAM,6BAA6B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAE3E
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"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"}
|
package/out/engine.d.ts
CHANGED
|
@@ -8,21 +8,29 @@
|
|
|
8
8
|
* exception — it's wired in-package from `@mailwoman/formatter` (the surface exists to expose it).
|
|
9
9
|
*/
|
|
10
10
|
import type { AddressTree } from "@mailwoman/core";
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* One parsed component in reading order (a `ComponentTag` + the covered text).
|
|
13
|
+
*/
|
|
12
14
|
export interface ParseComponent {
|
|
13
15
|
tag: string;
|
|
14
16
|
value: string;
|
|
15
17
|
}
|
|
16
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* One parse outcome: ordered components + the full decoded tree (the same language `/v1/resolve` speaks).
|
|
20
|
+
*/
|
|
17
21
|
export interface ParseOutcome {
|
|
18
22
|
input: string;
|
|
19
23
|
components: ParseComponent[];
|
|
20
24
|
tree: AddressTree;
|
|
21
25
|
debug?: string;
|
|
22
26
|
}
|
|
23
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* A geocode outcome — the engine returns the geocode-core `GeocodeResult` shape verbatim (passthrough).
|
|
29
|
+
*/
|
|
24
30
|
export type GeocodeOutcome = Record<string, unknown>;
|
|
25
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* A batch row: a GeocodeOutcome, or an `{ input, error }` slot (per-row isolation).
|
|
33
|
+
*/
|
|
26
34
|
export type BatchRow = GeocodeOutcome | {
|
|
27
35
|
input: string;
|
|
28
36
|
error: string;
|
|
@@ -30,14 +38,26 @@ export type BatchRow = GeocodeOutcome | {
|
|
|
30
38
|
export interface ResolveTreeOutcome {
|
|
31
39
|
tree: AddressTree;
|
|
32
40
|
}
|
|
33
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* The `/health` data block the engine contributes (model card, data-root inventory).
|
|
43
|
+
*/
|
|
34
44
|
export type HealthData = Record<string, unknown>;
|
|
45
|
+
/**
|
|
46
|
+
* The input register (Decision A / GTM B10; canonical docs on `@mailwoman/core/pipeline`'s `InputMode` — duplicated
|
|
47
|
+
* structurally so `@mailwoman/api` stays engine-agnostic). `formatted` runs the evidence-bundle channels off.
|
|
48
|
+
*/
|
|
49
|
+
export type WireInputMode = "fragmented" | "formatted";
|
|
35
50
|
export interface MailwomanAPIEngine {
|
|
36
51
|
parse?(address: string, opts: {
|
|
37
52
|
debug: boolean;
|
|
53
|
+
inputMode?: WireInputMode;
|
|
38
54
|
}): Promise<ParseOutcome>;
|
|
39
|
-
geocode?(address: string
|
|
40
|
-
|
|
55
|
+
geocode?(address: string, opts?: {
|
|
56
|
+
inputMode?: WireInputMode;
|
|
57
|
+
}): Promise<GeocodeOutcome>;
|
|
58
|
+
batch?(addresses: string[], opts?: {
|
|
59
|
+
inputMode?: WireInputMode;
|
|
60
|
+
}): Promise<{
|
|
41
61
|
results: BatchRow[];
|
|
42
62
|
}>;
|
|
43
63
|
resolveTree?(tree: AddressTree, opts: Record<string, unknown>): Promise<ResolveTreeOutcome>;
|
package/out/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEpD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAExE,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,WAAW,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEhD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,WAAW,CAAA;AAEtD,MAAM,WAAW,kBAAkB;IAClC,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACnG,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACxF,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC,CAAA;IACnG,WAAW,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC3F,MAAM,CAAC,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAC5D,MAAM,CAAC,IAAI,UAAU,CAAA;CACrB"}
|
package/out/routes.d.ts
CHANGED
|
@@ -26,11 +26,17 @@ import type { MailwomanAPIEngine } from "./engine.ts";
|
|
|
26
26
|
* (`$public.MAILWOMAN_BATCH_MAX`, default 1000; see `core/env/schema.ts`).
|
|
27
27
|
*/
|
|
28
28
|
export declare const DEFAULT_BATCH_MAX = 500;
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Options for {@link registerMailwomanAPIRoutes}.
|
|
31
|
+
*/
|
|
30
32
|
export interface RegisterMailwomanAPIRoutesOptions {
|
|
31
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Max `addresses` rows accepted by `POST /v1/batch`. Default {@link DEFAULT_BATCH_MAX}.
|
|
35
|
+
*/
|
|
32
36
|
batchMax?: number;
|
|
33
37
|
}
|
|
34
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Register the native `/v1` routes + `/health` + `/metrics` against an injected engine.
|
|
40
|
+
*/
|
|
35
41
|
export declare function registerMailwomanAPIRoutes(app: OpenAPIHono, engine: MailwomanAPIEngine, options?: RegisterMailwomanAPIRoutesOptions): void;
|
|
36
42
|
//# sourceMappingURL=routes.d.ts.map
|
package/out/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAe,KAAK,WAAW,EAAK,MAAM,mBAAmB,CAAA;AAMpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAgBrD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAapC
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAe,KAAK,WAAW,EAAK,MAAM,mBAAmB,CAAA;AAMpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAgBrD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAapC;;GAEG;AACH,MAAM,WAAW,iCAAiC;IACjD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AA+LD;;GAEG;AACH,wBAAgB,0BAA0B,CACzC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,iCAAsC,GAC7C,IAAI,CAoJN"}
|
package/out/routes.js
CHANGED
|
@@ -43,6 +43,10 @@ const errorContent = (description) => ({
|
|
|
43
43
|
const parseQueryParams = z.object({
|
|
44
44
|
address: z.string().optional().openapi({ description: "The address to parse." }),
|
|
45
45
|
debug: z.string().optional().openapi({ description: '`"true"` to include a diagnostic report.' }),
|
|
46
|
+
input_mode: z
|
|
47
|
+
.enum(["fragmented", "formatted"])
|
|
48
|
+
.optional()
|
|
49
|
+
.openapi({ description: "Input register (Decision A): unset → derived from the input's shape." }),
|
|
46
50
|
});
|
|
47
51
|
const parseResponses = {
|
|
48
52
|
200: {
|
|
@@ -198,7 +202,9 @@ function toComponentDict(components) {
|
|
|
198
202
|
}
|
|
199
203
|
return out;
|
|
200
204
|
}
|
|
201
|
-
/**
|
|
205
|
+
/**
|
|
206
|
+
* Register the native `/v1` routes + `/health` + `/metrics` against an injected engine.
|
|
207
|
+
*/
|
|
202
208
|
export function registerMailwomanAPIRoutes(app, engine, options = {}) {
|
|
203
209
|
const batchMax = options.batchMax ?? DEFAULT_BATCH_MAX;
|
|
204
210
|
app.openapi(parseGetRoute, async (c) => {
|
|
@@ -208,17 +214,19 @@ export function registerMailwomanAPIRoutes(app, engine, options = {}) {
|
|
|
208
214
|
if (!address)
|
|
209
215
|
return c.json({ error: "address is required" }, 400);
|
|
210
216
|
const debug = c.req.query("debug") === "true";
|
|
211
|
-
const
|
|
217
|
+
const inputModeRaw = c.req.query("input_mode");
|
|
218
|
+
const inputMode = inputModeRaw === "fragmented" || inputModeRaw === "formatted" ? inputModeRaw : undefined;
|
|
219
|
+
const outcome = await engine.parse(address, { debug, inputMode });
|
|
212
220
|
return c.json(outcome, 200);
|
|
213
221
|
});
|
|
214
222
|
app.openapi(parsePostRoute, async (c) => {
|
|
215
223
|
if (!engine.parse)
|
|
216
224
|
return c.json({ error: "parse not implemented" }, 501);
|
|
217
|
-
const { address, debug } = c.req.valid("json");
|
|
225
|
+
const { address, debug, input_mode } = c.req.valid("json");
|
|
218
226
|
const trimmed = address.trim();
|
|
219
227
|
if (!trimmed)
|
|
220
228
|
return c.json({ error: "address is required" }, 400);
|
|
221
|
-
const outcome = await engine.parse(trimmed, { debug: debug ?? false });
|
|
229
|
+
const outcome = await engine.parse(trimmed, { debug: debug ?? false, inputMode: input_mode });
|
|
222
230
|
return c.json(outcome, 200);
|
|
223
231
|
}, (result, c) => {
|
|
224
232
|
if (!result.success)
|
|
@@ -228,13 +236,13 @@ export function registerMailwomanAPIRoutes(app, engine, options = {}) {
|
|
|
228
236
|
app.openapi(geocodeRoute, async (c) => {
|
|
229
237
|
if (!engine.geocode)
|
|
230
238
|
return apiError(c, 503, "geocoder not available", GEOCODER_UNAVAILABLE_DETAIL);
|
|
231
|
-
const { address } = c.req.valid("json");
|
|
239
|
+
const { address, input_mode } = c.req.valid("json");
|
|
232
240
|
const trimmed = address.trim();
|
|
233
241
|
if (!trimmed)
|
|
234
242
|
return c.json({ error: "address is required" }, 400);
|
|
235
243
|
const t0 = performance.now();
|
|
236
244
|
try {
|
|
237
|
-
const outcome = await engine.geocode(trimmed);
|
|
245
|
+
const outcome = await engine.geocode(trimmed, { inputMode: input_mode });
|
|
238
246
|
recordTimed(performance.now() - t0, String(outcome["resolution_tier"] ?? "admin"));
|
|
239
247
|
// `GeocodeOutcome` (the engine contract) is a deliberate `Record<string, unknown>` passthrough —
|
|
240
248
|
// `GeocodeOutcomeSchema` is now a REAL typed shape (doc-accuracy only, per its own docstring), so a
|
|
@@ -252,8 +260,8 @@ export function registerMailwomanAPIRoutes(app, engine, options = {}) {
|
|
|
252
260
|
return undefined;
|
|
253
261
|
});
|
|
254
262
|
app.openapi(batchRoute, async (c) => {
|
|
255
|
-
const { addresses } = c.req.valid("json");
|
|
256
|
-
if (addresses.length
|
|
263
|
+
const { addresses, input_mode } = c.req.valid("json");
|
|
264
|
+
if (!addresses.length)
|
|
257
265
|
return c.json({ results: [] }, 200);
|
|
258
266
|
if (addresses.length > batchMax) {
|
|
259
267
|
return c.json({ error: `batch too large: ${addresses.length} > ${batchMax}` }, 413);
|
|
@@ -264,7 +272,8 @@ export function registerMailwomanAPIRoutes(app, engine, options = {}) {
|
|
|
264
272
|
// responsibility (phase 4b) — this app only times the call as a unit.
|
|
265
273
|
const t0 = performance.now();
|
|
266
274
|
try {
|
|
267
|
-
|
|
275
|
+
// Decision A endpoint default: batch rows are the record register — formatted unless overridden.
|
|
276
|
+
const outcome = await engine.batch(addresses, { inputMode: input_mode ?? "formatted" });
|
|
268
277
|
recordTimed(performance.now() - t0, "batch");
|
|
269
278
|
// Same wire-vs-domain cast as `/v1/geocode` above — `BatchRow`'s `GeocodeOutcome` half is a
|
|
270
279
|
// `Record<string, unknown>` passthrough; `BatchResponseSchema` now types its `GeocodeOutcome` union
|
package/out/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../routes.ts"],"names":[],"mappings":"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"}
|
package/out/schema.d.ts
CHANGED
|
@@ -17,12 +17,32 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { z } from "@hono/zod-openapi";
|
|
19
19
|
export { APIErrorSchema } from "@mailwoman/api-kit";
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* `POST /v1/parse` request body.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* The input register (Decision A / GTM B10): `fragmented` = the map-search register (evidence-bundle channels feed);
|
|
25
|
+
* `formatted` = the validation/record register (channels off). Unset → the engine derives it from the input's shape.
|
|
26
|
+
* `/v1/batch` defaults to `formatted` (batch rows are the record register by nature).
|
|
27
|
+
*/
|
|
28
|
+
export declare const InputModeSchema: z.ZodEnum<{
|
|
29
|
+
fragmented: "fragmented";
|
|
30
|
+
formatted: "formatted";
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* `POST /v1/parse` request body.
|
|
34
|
+
*/
|
|
21
35
|
export declare const ParseRequestSchema: z.ZodObject<{
|
|
22
36
|
address: z.ZodString;
|
|
23
37
|
debug: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
+
input_mode: z.ZodOptional<z.ZodEnum<{
|
|
39
|
+
fragmented: "fragmented";
|
|
40
|
+
formatted: "formatted";
|
|
41
|
+
}>>;
|
|
24
42
|
}, z.core.$strip>;
|
|
25
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* One `ParseOutcome.components` entry — mirrors {@linkcode ParseComponent} (`engine.ts`).
|
|
45
|
+
*/
|
|
26
46
|
export declare const ParseComponentSchema: z.ZodObject<{
|
|
27
47
|
tag: z.ZodString;
|
|
28
48
|
value: z.ZodString;
|
|
@@ -43,9 +63,15 @@ export declare const ParseOutcomeSchema: z.ZodObject<{
|
|
|
43
63
|
}, z.core.$loose>;
|
|
44
64
|
debug: z.ZodOptional<z.ZodString>;
|
|
45
65
|
}, z.core.$strip>;
|
|
46
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
* `POST /v1/geocode` request body.
|
|
68
|
+
*/
|
|
47
69
|
export declare const GeocodeRequestSchema: z.ZodObject<{
|
|
48
70
|
address: z.ZodString;
|
|
71
|
+
input_mode: z.ZodOptional<z.ZodEnum<{
|
|
72
|
+
fragmented: "fragmented";
|
|
73
|
+
formatted: "formatted";
|
|
74
|
+
}>>;
|
|
49
75
|
}, z.core.$strip>;
|
|
50
76
|
/**
|
|
51
77
|
* `POST /v1/geocode` response — a hand-modeled mirror of `GeocodeResult`'s wire shape (`mailwoman/geocode-core.ts`),
|
|
@@ -91,11 +117,19 @@ export declare const GeocodeOutcomeSchema: z.ZodObject<{
|
|
|
91
117
|
placeID: z.ZodOptional<z.ZodString>;
|
|
92
118
|
}, z.core.$strip>>;
|
|
93
119
|
}, z.core.$loose>;
|
|
94
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* `POST /v1/batch` request body.
|
|
122
|
+
*/
|
|
95
123
|
export declare const BatchRequestSchema: z.ZodObject<{
|
|
96
124
|
addresses: z.ZodArray<z.ZodString>;
|
|
125
|
+
input_mode: z.ZodOptional<z.ZodEnum<{
|
|
126
|
+
fragmented: "fragmented";
|
|
127
|
+
formatted: "formatted";
|
|
128
|
+
}>>;
|
|
97
129
|
}, z.core.$strip>;
|
|
98
|
-
/**
|
|
130
|
+
/**
|
|
131
|
+
* `POST /v1/batch` response — one `GeocodeOutcome`, or an `{ input, error }` slot, per row (per-row isolation).
|
|
132
|
+
*/
|
|
99
133
|
export declare const BatchResponseSchema: z.ZodObject<{
|
|
100
134
|
results: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
101
135
|
input: z.ZodString;
|
|
@@ -145,7 +179,9 @@ export declare const ResolveRequestSchema: z.ZodObject<{
|
|
|
145
179
|
}, z.core.$loose>;
|
|
146
180
|
opts: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
147
181
|
}, z.core.$strip>;
|
|
148
|
-
/**
|
|
182
|
+
/**
|
|
183
|
+
* `POST /v1/resolve` response — the same tree, decorated in place with gazetteer coords + attribution.
|
|
184
|
+
*/
|
|
149
185
|
export declare const ResolveResponseSchema: z.ZodObject<{
|
|
150
186
|
tree: z.ZodObject<{
|
|
151
187
|
roots: z.ZodArray<z.ZodUnknown>;
|
|
@@ -162,7 +198,9 @@ export declare const FormatRequestSchema: z.ZodObject<{
|
|
|
162
198
|
country: z.ZodString;
|
|
163
199
|
options: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
164
200
|
}, z.core.$strip>;
|
|
165
|
-
/**
|
|
201
|
+
/**
|
|
202
|
+
* `POST /v1/format` response — the rendered string plus the deterministic canonical match key.
|
|
203
|
+
*/
|
|
166
204
|
export declare const FormatResponseSchema: z.ZodObject<{
|
|
167
205
|
formatted: z.ZodString;
|
|
168
206
|
canonicalKey: z.ZodString;
|
package/out/schema.d.ts.map
CHANGED
|
@@ -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,
|
|
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;;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;AAiC3B;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBN,CAAA;AAE3B;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;iBAQN,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
|
@@ -17,14 +17,28 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { z } from "@hono/zod-openapi";
|
|
19
19
|
export { APIErrorSchema } from "@mailwoman/api-kit";
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* `POST /v1/parse` request body.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* The input register (Decision A / GTM B10): `fragmented` = the map-search register (evidence-bundle channels feed);
|
|
25
|
+
* `formatted` = the validation/record register (channels off). Unset → the engine derives it from the input's shape.
|
|
26
|
+
* `/v1/batch` defaults to `formatted` (batch rows are the record register by nature).
|
|
27
|
+
*/
|
|
28
|
+
export const InputModeSchema = z.enum(["fragmented", "formatted"]).openapi("InputMode");
|
|
29
|
+
/**
|
|
30
|
+
* `POST /v1/parse` request body.
|
|
31
|
+
*/
|
|
21
32
|
export const ParseRequestSchema = z
|
|
22
33
|
.object({
|
|
23
34
|
address: z.string(),
|
|
24
35
|
debug: z.boolean().optional(),
|
|
36
|
+
input_mode: InputModeSchema.optional(),
|
|
25
37
|
})
|
|
26
38
|
.openapi("ParseRequest");
|
|
27
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* One `ParseOutcome.components` entry — mirrors {@linkcode ParseComponent} (`engine.ts`).
|
|
41
|
+
*/
|
|
28
42
|
export const ParseComponentSchema = z.object({ tag: z.string(), value: z.string() }).openapi("ParseComponent");
|
|
29
43
|
/**
|
|
30
44
|
* `POST /v1/parse` response — mirrors {@linkcode ParseOutcome} (`engine.ts`): the ordered components plus the full
|
|
@@ -39,10 +53,13 @@ export const ParseOutcomeSchema = z
|
|
|
39
53
|
debug: z.string().optional(),
|
|
40
54
|
})
|
|
41
55
|
.openapi("ParseOutcome");
|
|
42
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* `POST /v1/geocode` request body.
|
|
58
|
+
*/
|
|
43
59
|
export const GeocodeRequestSchema = z
|
|
44
60
|
.object({
|
|
45
61
|
address: z.string(),
|
|
62
|
+
input_mode: InputModeSchema.optional(),
|
|
46
63
|
})
|
|
47
64
|
.openapi("GeocodeRequest");
|
|
48
65
|
/**
|
|
@@ -102,16 +119,32 @@ export const GeocodeOutcomeSchema = z
|
|
|
102
119
|
})
|
|
103
120
|
.loose()
|
|
104
121
|
.openapi("GeocodeOutcome");
|
|
105
|
-
/**
|
|
122
|
+
/**
|
|
123
|
+
* `POST /v1/batch` request body.
|
|
124
|
+
*/
|
|
106
125
|
export const BatchRequestSchema = z
|
|
107
126
|
.object({
|
|
108
127
|
addresses: z.array(z.string()),
|
|
128
|
+
/**
|
|
129
|
+
* Register override for every row. DEFAULT `"formatted"` — batch rows are the record register by nature.
|
|
130
|
+
*/
|
|
131
|
+
input_mode: InputModeSchema.optional(),
|
|
109
132
|
})
|
|
110
133
|
.openapi("BatchRequest");
|
|
111
|
-
/**
|
|
134
|
+
/**
|
|
135
|
+
* The failure slot for one batch row. A row that throws does not fail its neighbours.
|
|
136
|
+
*/
|
|
137
|
+
const BatchRowErrorSchema = z.object({ input: z.string(), error: z.string() });
|
|
138
|
+
/**
|
|
139
|
+
* One batch row: the geocode outcome, or the failure slot that stands in for it.
|
|
140
|
+
*/
|
|
141
|
+
const BatchRowSchema = z.union([GeocodeOutcomeSchema, BatchRowErrorSchema]);
|
|
142
|
+
/**
|
|
143
|
+
* `POST /v1/batch` response — one `GeocodeOutcome`, or an `{ input, error }` slot, per row (per-row isolation).
|
|
144
|
+
*/
|
|
112
145
|
export const BatchResponseSchema = z
|
|
113
146
|
.object({
|
|
114
|
-
results: z.array(
|
|
147
|
+
results: z.array(BatchRowSchema),
|
|
115
148
|
})
|
|
116
149
|
.openapi("BatchResponse");
|
|
117
150
|
/**
|
|
@@ -124,12 +157,19 @@ export const ResolveRequestSchema = z
|
|
|
124
157
|
opts: z.looseObject({}).optional(),
|
|
125
158
|
})
|
|
126
159
|
.openapi("ResolveRequest");
|
|
127
|
-
/**
|
|
160
|
+
/**
|
|
161
|
+
* `POST /v1/resolve` response — the same tree, decorated in place with gazetteer coords + attribution.
|
|
162
|
+
*/
|
|
128
163
|
export const ResolveResponseSchema = z
|
|
129
164
|
.object({
|
|
130
165
|
tree: z.looseObject({ roots: z.array(z.unknown()) }),
|
|
131
166
|
})
|
|
132
167
|
.openapi("ResolveResponse");
|
|
168
|
+
/**
|
|
169
|
+
* One component's value. Repeatable tags (a street with two names, say) arrive as an array; the caller joins them
|
|
170
|
+
* before handing the dict to `formatAddress`, which takes single strings only.
|
|
171
|
+
*/
|
|
172
|
+
const ComponentValueSchema = z.union([z.string(), z.array(z.string())]);
|
|
133
173
|
/**
|
|
134
174
|
* `POST /v1/format` request body. `components` accepts `string | string[]` per key on the wire — a handler-side
|
|
135
175
|
* concern, not this schema's: `@mailwoman/formatter`'s `ComponentDict` (`format.ts`) is `Partial<Record<ComponentTag,
|
|
@@ -138,12 +178,14 @@ export const ResolveResponseSchema = z
|
|
|
138
178
|
*/
|
|
139
179
|
export const FormatRequestSchema = z
|
|
140
180
|
.object({
|
|
141
|
-
components: z.record(z.string(),
|
|
181
|
+
components: z.record(z.string(), ComponentValueSchema),
|
|
142
182
|
country: z.string(),
|
|
143
183
|
options: z.looseObject({}).optional(),
|
|
144
184
|
})
|
|
145
185
|
.openapi("FormatRequest");
|
|
146
|
-
/**
|
|
186
|
+
/**
|
|
187
|
+
* `POST /v1/format` response — the rendered string plus the deterministic canonical match key.
|
|
188
|
+
*/
|
|
147
189
|
export const FormatResponseSchema = z
|
|
148
190
|
.object({
|
|
149
191
|
formatted: z.string(),
|
package/out/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","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,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mailwoman/api",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.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": {
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@hono/zod-openapi": "^1.5.1",
|
|
46
|
-
"@mailwoman/api-kit": "8.
|
|
47
|
-
"@mailwoman/core": "8.
|
|
48
|
-
"@mailwoman/formatter": "8.
|
|
46
|
+
"@mailwoman/api-kit": "8.2.0",
|
|
47
|
+
"@mailwoman/core": "8.2.0",
|
|
48
|
+
"@mailwoman/formatter": "8.2.0",
|
|
49
49
|
"hono": "^4.12.32",
|
|
50
50
|
"zod": "^4.4.3"
|
|
51
51
|
}
|
package/routes.ts
CHANGED
|
@@ -59,9 +59,13 @@ const startedAt = Date.now()
|
|
|
59
59
|
const GEOCODER_UNAVAILABLE_DETAIL =
|
|
60
60
|
"install @mailwoman/neural + @mailwoman/resolver-wof-sqlite and provide gazetteer data (MAILWOMAN_WOF_DB / MAILWOMAN_CANDIDATE_DB)"
|
|
61
61
|
|
|
62
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Options for {@link registerMailwomanAPIRoutes}.
|
|
64
|
+
*/
|
|
63
65
|
export interface RegisterMailwomanAPIRoutesOptions {
|
|
64
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
* Max `addresses` rows accepted by `POST /v1/batch`. Default {@link DEFAULT_BATCH_MAX}.
|
|
68
|
+
*/
|
|
65
69
|
batchMax?: number
|
|
66
70
|
}
|
|
67
71
|
|
|
@@ -73,6 +77,10 @@ const errorContent = (description: string) => ({
|
|
|
73
77
|
const parseQueryParams = z.object({
|
|
74
78
|
address: z.string().optional().openapi({ description: "The address to parse." }),
|
|
75
79
|
debug: z.string().optional().openapi({ description: '`"true"` to include a diagnostic report.' }),
|
|
80
|
+
input_mode: z
|
|
81
|
+
.enum(["fragmented", "formatted"])
|
|
82
|
+
.optional()
|
|
83
|
+
.openapi({ description: "Input register (Decision A): unset → derived from the input's shape." }),
|
|
76
84
|
})
|
|
77
85
|
|
|
78
86
|
const parseResponses = {
|
|
@@ -250,7 +258,9 @@ function toComponentDict(components: Record<string, string | string[]>): Compone
|
|
|
250
258
|
return out
|
|
251
259
|
}
|
|
252
260
|
|
|
253
|
-
/**
|
|
261
|
+
/**
|
|
262
|
+
* Register the native `/v1` routes + `/health` + `/metrics` against an injected engine.
|
|
263
|
+
*/
|
|
254
264
|
export function registerMailwomanAPIRoutes(
|
|
255
265
|
app: OpenAPIHono,
|
|
256
266
|
engine: MailwomanAPIEngine,
|
|
@@ -264,7 +274,9 @@ export function registerMailwomanAPIRoutes(
|
|
|
264
274
|
|
|
265
275
|
if (!address) return c.json({ error: "address is required" }, 400)
|
|
266
276
|
const debug = c.req.query("debug") === "true"
|
|
267
|
-
const
|
|
277
|
+
const inputModeRaw = c.req.query("input_mode")
|
|
278
|
+
const inputMode = inputModeRaw === "fragmented" || inputModeRaw === "formatted" ? inputModeRaw : undefined
|
|
279
|
+
const outcome = await engine.parse(address, { debug, inputMode })
|
|
268
280
|
|
|
269
281
|
return c.json(outcome, 200)
|
|
270
282
|
})
|
|
@@ -273,11 +285,11 @@ export function registerMailwomanAPIRoutes(
|
|
|
273
285
|
parsePostRoute,
|
|
274
286
|
async (c) => {
|
|
275
287
|
if (!engine.parse) return c.json({ error: "parse not implemented" }, 501)
|
|
276
|
-
const { address, debug } = c.req.valid("json")
|
|
288
|
+
const { address, debug, input_mode } = c.req.valid("json")
|
|
277
289
|
const trimmed = address.trim()
|
|
278
290
|
|
|
279
291
|
if (!trimmed) return c.json({ error: "address is required" }, 400)
|
|
280
|
-
const outcome = await engine.parse(trimmed, { debug: debug ?? false })
|
|
292
|
+
const outcome = await engine.parse(trimmed, { debug: debug ?? false, inputMode: input_mode })
|
|
281
293
|
|
|
282
294
|
return c.json(outcome, 200)
|
|
283
295
|
},
|
|
@@ -292,14 +304,14 @@ export function registerMailwomanAPIRoutes(
|
|
|
292
304
|
geocodeRoute,
|
|
293
305
|
async (c) => {
|
|
294
306
|
if (!engine.geocode) return apiError(c, 503, "geocoder not available", GEOCODER_UNAVAILABLE_DETAIL)
|
|
295
|
-
const { address } = c.req.valid("json")
|
|
307
|
+
const { address, input_mode } = c.req.valid("json")
|
|
296
308
|
const trimmed = address.trim()
|
|
297
309
|
|
|
298
310
|
if (!trimmed) return c.json({ error: "address is required" }, 400)
|
|
299
311
|
const t0 = performance.now()
|
|
300
312
|
|
|
301
313
|
try {
|
|
302
|
-
const outcome = await engine.geocode(trimmed)
|
|
314
|
+
const outcome = await engine.geocode(trimmed, { inputMode: input_mode })
|
|
303
315
|
recordTimed(performance.now() - t0, String(outcome["resolution_tier"] ?? "admin"))
|
|
304
316
|
|
|
305
317
|
// `GeocodeOutcome` (the engine contract) is a deliberate `Record<string, unknown>` passthrough —
|
|
@@ -322,9 +334,9 @@ export function registerMailwomanAPIRoutes(
|
|
|
322
334
|
app.openapi(
|
|
323
335
|
batchRoute,
|
|
324
336
|
async (c) => {
|
|
325
|
-
const { addresses } = c.req.valid("json")
|
|
337
|
+
const { addresses, input_mode } = c.req.valid("json")
|
|
326
338
|
|
|
327
|
-
if (addresses.length
|
|
339
|
+
if (!addresses.length) return c.json({ results: [] }, 200)
|
|
328
340
|
|
|
329
341
|
if (addresses.length > batchMax) {
|
|
330
342
|
return c.json({ error: `batch too large: ${addresses.length} > ${batchMax}` }, 413)
|
|
@@ -337,7 +349,8 @@ export function registerMailwomanAPIRoutes(
|
|
|
337
349
|
const t0 = performance.now()
|
|
338
350
|
|
|
339
351
|
try {
|
|
340
|
-
|
|
352
|
+
// Decision A endpoint default: batch rows are the record register — formatted unless overridden.
|
|
353
|
+
const outcome = await engine.batch(addresses, { inputMode: input_mode ?? "formatted" })
|
|
341
354
|
recordTimed(performance.now() - t0, "batch")
|
|
342
355
|
|
|
343
356
|
// Same wire-vs-domain cast as `/v1/geocode` above — `BatchRow`'s `GeocodeOutcome` half is a
|
package/schema.ts
CHANGED
|
@@ -20,15 +20,30 @@ import { z } from "@hono/zod-openapi"
|
|
|
20
20
|
|
|
21
21
|
export { APIErrorSchema } from "@mailwoman/api-kit"
|
|
22
22
|
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* `POST /v1/parse` request body.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* The input register (Decision A / GTM B10): `fragmented` = the map-search register (evidence-bundle channels feed);
|
|
28
|
+
* `formatted` = the validation/record register (channels off). Unset → the engine derives it from the input's shape.
|
|
29
|
+
* `/v1/batch` defaults to `formatted` (batch rows are the record register by nature).
|
|
30
|
+
*/
|
|
31
|
+
export const InputModeSchema = z.enum(["fragmented", "formatted"]).openapi("InputMode")
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* `POST /v1/parse` request body.
|
|
35
|
+
*/
|
|
24
36
|
export const ParseRequestSchema = z
|
|
25
37
|
.object({
|
|
26
38
|
address: z.string(),
|
|
27
39
|
debug: z.boolean().optional(),
|
|
40
|
+
input_mode: InputModeSchema.optional(),
|
|
28
41
|
})
|
|
29
42
|
.openapi("ParseRequest")
|
|
30
43
|
|
|
31
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* One `ParseOutcome.components` entry — mirrors {@linkcode ParseComponent} (`engine.ts`).
|
|
46
|
+
*/
|
|
32
47
|
export const ParseComponentSchema = z.object({ tag: z.string(), value: z.string() }).openapi("ParseComponent")
|
|
33
48
|
|
|
34
49
|
/**
|
|
@@ -45,10 +60,13 @@ export const ParseOutcomeSchema = z
|
|
|
45
60
|
})
|
|
46
61
|
.openapi("ParseOutcome")
|
|
47
62
|
|
|
48
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* `POST /v1/geocode` request body.
|
|
65
|
+
*/
|
|
49
66
|
export const GeocodeRequestSchema = z
|
|
50
67
|
.object({
|
|
51
68
|
address: z.string(),
|
|
69
|
+
input_mode: InputModeSchema.optional(),
|
|
52
70
|
})
|
|
53
71
|
.openapi("GeocodeRequest")
|
|
54
72
|
|
|
@@ -112,17 +130,35 @@ export const GeocodeOutcomeSchema = z
|
|
|
112
130
|
.loose()
|
|
113
131
|
.openapi("GeocodeOutcome")
|
|
114
132
|
|
|
115
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* `POST /v1/batch` request body.
|
|
135
|
+
*/
|
|
116
136
|
export const BatchRequestSchema = z
|
|
117
137
|
.object({
|
|
118
138
|
addresses: z.array(z.string()),
|
|
139
|
+
/**
|
|
140
|
+
* Register override for every row. DEFAULT `"formatted"` — batch rows are the record register by nature.
|
|
141
|
+
*/
|
|
142
|
+
input_mode: InputModeSchema.optional(),
|
|
119
143
|
})
|
|
120
144
|
.openapi("BatchRequest")
|
|
121
145
|
|
|
122
|
-
/**
|
|
146
|
+
/**
|
|
147
|
+
* The failure slot for one batch row. A row that throws does not fail its neighbours.
|
|
148
|
+
*/
|
|
149
|
+
const BatchRowErrorSchema = z.object({ input: z.string(), error: z.string() })
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* One batch row: the geocode outcome, or the failure slot that stands in for it.
|
|
153
|
+
*/
|
|
154
|
+
const BatchRowSchema = z.union([GeocodeOutcomeSchema, BatchRowErrorSchema])
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* `POST /v1/batch` response — one `GeocodeOutcome`, or an `{ input, error }` slot, per row (per-row isolation).
|
|
158
|
+
*/
|
|
123
159
|
export const BatchResponseSchema = z
|
|
124
160
|
.object({
|
|
125
|
-
results: z.array(
|
|
161
|
+
results: z.array(BatchRowSchema),
|
|
126
162
|
})
|
|
127
163
|
.openapi("BatchResponse")
|
|
128
164
|
|
|
@@ -137,13 +173,21 @@ export const ResolveRequestSchema = z
|
|
|
137
173
|
})
|
|
138
174
|
.openapi("ResolveRequest")
|
|
139
175
|
|
|
140
|
-
/**
|
|
176
|
+
/**
|
|
177
|
+
* `POST /v1/resolve` response — the same tree, decorated in place with gazetteer coords + attribution.
|
|
178
|
+
*/
|
|
141
179
|
export const ResolveResponseSchema = z
|
|
142
180
|
.object({
|
|
143
181
|
tree: z.looseObject({ roots: z.array(z.unknown()) }),
|
|
144
182
|
})
|
|
145
183
|
.openapi("ResolveResponse")
|
|
146
184
|
|
|
185
|
+
/**
|
|
186
|
+
* One component's value. Repeatable tags (a street with two names, say) arrive as an array; the caller joins them
|
|
187
|
+
* before handing the dict to `formatAddress`, which takes single strings only.
|
|
188
|
+
*/
|
|
189
|
+
const ComponentValueSchema = z.union([z.string(), z.array(z.string())])
|
|
190
|
+
|
|
147
191
|
/**
|
|
148
192
|
* `POST /v1/format` request body. `components` accepts `string | string[]` per key on the wire — a handler-side
|
|
149
193
|
* concern, not this schema's: `@mailwoman/formatter`'s `ComponentDict` (`format.ts`) is `Partial<Record<ComponentTag,
|
|
@@ -152,13 +196,15 @@ export const ResolveResponseSchema = z
|
|
|
152
196
|
*/
|
|
153
197
|
export const FormatRequestSchema = z
|
|
154
198
|
.object({
|
|
155
|
-
components: z.record(z.string(),
|
|
199
|
+
components: z.record(z.string(), ComponentValueSchema),
|
|
156
200
|
country: z.string(),
|
|
157
201
|
options: z.looseObject({}).optional(),
|
|
158
202
|
})
|
|
159
203
|
.openapi("FormatRequest")
|
|
160
204
|
|
|
161
|
-
/**
|
|
205
|
+
/**
|
|
206
|
+
* `POST /v1/format` response — the rendered string plus the deterministic canonical match key.
|
|
207
|
+
*/
|
|
162
208
|
export const FormatResponseSchema = z
|
|
163
209
|
.object({
|
|
164
210
|
formatted: z.string(),
|