@mailwoman/api 9.0.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @mailwoman/api
2
2
 
3
- The **native [Mailwoman](https://mailwoman.sister.software) HTTP API** — an engine-agnostic `/v1` surface
3
+ The **native [Mailwoman](https://mailwoman.ai) HTTP API** — an engine-agnostic `/v1` surface
4
4
  (parse, geocode, batch, resolve, format) plus health, metrics, and an emitted OpenAPI document. Unlike its
5
5
  drop-in siblings ([`@mailwoman/nominatim`](../nominatim), [`@mailwoman/photon`](../photon),
6
6
  [`@mailwoman/libpostal`](../libpostal)), nothing here mimics a third-party API — this is Mailwoman's own
package/app.ts CHANGED
@@ -9,13 +9,15 @@
9
9
  */
10
10
 
11
11
  import { OpenAPIHono } from "@hono/zod-openapi"
12
- import { apiError, attachOpenAPIDocs, type OpenAPIDocInfo } from "@mailwoman/api-kit"
13
- import packageJson from "@mailwoman/api/package.json" with { type: "json" }
12
+ import { errorResponse, attachOpenAPIDocs, type OpenAPIDocInfo } from "@mailwoman/api-kit"
14
13
  import { bodyLimit } from "hono/body-limit"
15
14
  import { cors } from "hono/cors"
16
15
 
16
+ import packageJson from "#package.json" with { type: "json" }
17
+
17
18
  import type { MailwomanAPIEngine } from "./engine.ts"
18
19
  import { DEFAULT_BATCH_MAX, registerMailwomanAPIRoutes } from "./routes.ts"
20
+ import type { GeocodeOutcomeLike } from "./schema.ts"
19
21
 
20
22
  /**
21
23
  * 2 MiB — carried from the express server's `express.json({ limit: "2mb" })` (`mailwoman/server/index.ts`).
@@ -63,7 +65,7 @@ export const MAILWOMAN_API_DOC_INFO: OpenAPIDocInfo = {
63
65
  version: packageJson.version,
64
66
  description: packageJson.description,
65
67
  license: { name: "AGPL-3.0-only OR LicenseRef-Commercial", identifier: "AGPL-3.0-only" },
66
- contact: { name: "Sister Software", url: "https://mailwoman.sister.software" },
68
+ contact: { name: "Sister Software", url: "https://mailwoman.ai" },
67
69
  servers: [
68
70
  {
69
71
  url: "http://{host}:{port}",
@@ -83,7 +85,10 @@ export const MAILWOMAN_API_DOC_INFO: OpenAPIDocInfo = {
83
85
  /**
84
86
  * Build the native Mailwoman app around an injected {@link MailwomanAPIEngine}.
85
87
  */
86
- export function createMailwomanAPI(engine: MailwomanAPIEngine, options: MailwomanAPIOptions = {}): OpenAPIHono {
88
+ export function createMailwomanAPI<T extends Partial<GeocodeOutcomeLike> = GeocodeOutcomeLike>(
89
+ engine: MailwomanAPIEngine<T>,
90
+ options: MailwomanAPIOptions = {}
91
+ ): OpenAPIHono {
87
92
  const app = new OpenAPIHono({
88
93
  // This surface is ours (no vendor contract to preserve): every declared body/query schema is
89
94
  // validator-enforced, and a failure maps through the shared api-kit envelope — never the raw zod
@@ -92,7 +97,7 @@ export function createMailwomanAPI(engine: MailwomanAPIEngine, options: Mailwoma
92
97
  // just `/v1/format`).
93
98
  defaultHook: (result, c) => {
94
99
  if (!result.success) {
95
- return apiError(c, 400, "invalid request body", summarizeValidationError(result.error))
100
+ return errorResponse(c, 400, "invalid request body", summarizeValidationError(result.error))
96
101
  }
97
102
 
98
103
  return undefined
@@ -112,10 +117,10 @@ export function createMailwomanAPI(engine: MailwomanAPIEngine, options: Mailwoma
112
117
  // validator throws before a route's own hook ever sees the body, so it lands here instead of the
113
118
  // per-route 400s in routes.ts. Answer 400, not the 500 net (which stays reserved for engine faults).
114
119
  if (error instanceof Error && error.message.includes("Malformed JSON")) {
115
- return apiError(c, 400, "invalid request body", "malformed JSON")
120
+ return errorResponse(c, 400, "invalid request body", "malformed JSON")
116
121
  }
117
122
 
118
- return apiError(c, 500, "internal error", error instanceof Error ? error.message : String(error))
123
+ return errorResponse(c, 500, "internal error", error instanceof Error ? error.message : String(error))
119
124
  })
120
125
 
121
126
  // Ahead of the handlers (which buffer the body into memory) so an oversized POST is rejected before that
@@ -124,7 +129,7 @@ export function createMailwomanAPI(engine: MailwomanAPIEngine, options: Mailwoma
124
129
  "/v1/*",
125
130
  bodyLimit({
126
131
  maxSize: options.bodyLimitBytes ?? DEFAULT_BODY_LIMIT_BYTES,
127
- onError: (c) => apiError(c, 413, "request body too large"),
132
+ onError: (c) => errorResponse(c, 413, "request body too large"),
128
133
  })
129
134
  )
130
135
 
package/engine.ts CHANGED
@@ -10,6 +10,8 @@
10
10
 
11
11
  import type { AddressTree } from "@mailwoman/core"
12
12
 
13
+ import type { GeocodeOutcomeLike } from "./schema.ts"
14
+
13
15
  /**
14
16
  * One parsed component in reading order (a `ComponentTag` + the covered text).
15
17
  */
@@ -21,22 +23,22 @@ export interface ParseComponent {
21
23
  /**
22
24
  * One parse outcome: ordered components + the full decoded tree (the same language `/v1/resolve` speaks).
23
25
  */
24
- export interface ParseOutcome {
26
+ export interface ParsedAddressResult {
25
27
  input: string
26
28
  components: ParseComponent[]
27
29
  tree: AddressTree
28
30
  debug?: string
29
31
  }
30
32
 
31
- /**
32
- * A geocode outcome — the engine returns the geocode-core `GeocodeResult` shape verbatim (passthrough).
33
- */
34
- export type GeocodeOutcome = Record<string, unknown>
33
+ export interface BatchResultFailure {
34
+ input: string
35
+ error: string
36
+ }
35
37
 
36
38
  /**
37
- * A batch row: a GeocodeOutcome, or an `{ input, error }` slot (per-row isolation).
39
+ * A batch row slot (per-row isolation).
38
40
  */
39
- export type BatchRow = GeocodeOutcome | { input: string; error: string }
41
+ export type BatchResultEntry<T extends Partial<GeocodeOutcomeLike> = GeocodeOutcomeLike> = T | BatchResultFailure
40
42
 
41
43
  export interface ResolveTreeOutcome {
42
44
  tree: AddressTree
@@ -53,10 +55,20 @@ export type HealthData = Record<string, unknown>
53
55
  */
54
56
  export type WireInputMode = "fragmented" | "formatted"
55
57
 
56
- export interface MailwomanAPIEngine {
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[] }>
58
+ export interface ParseInit {
59
+ inputMode?: WireInputMode
60
+ debug?: boolean
61
+ }
62
+
63
+ export type GeocodeCallback<T extends Partial<GeocodeOutcomeLike> = GeocodeOutcomeLike> = (
64
+ address: string,
65
+ opts?: ParseInit
66
+ ) => Promise<T>
67
+
68
+ export interface MailwomanAPIEngine<T extends Partial<GeocodeOutcomeLike> = GeocodeOutcomeLike> {
69
+ parse?(address: string, opts: ParseInit): Promise<ParsedAddressResult>
70
+ geocode?: GeocodeCallback<T>
71
+ batch?(addresses: string[], opts?: ParseInit): Promise<{ results: BatchResultEntry<T>[] }>
60
72
  resolveTree?(tree: AddressTree, opts: Record<string, unknown>): Promise<ResolveTreeOutcome>
61
73
  reload?(): Promise<{ reloaded: boolean; versions: unknown }>
62
74
  health?(): HealthData
package/out/app.d.ts CHANGED
@@ -10,6 +10,7 @@
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
+ import type { GeocodeOutcomeLike } from "./schema.ts";
13
14
  /**
14
15
  * Options for {@link createMailwomanAPI}.
15
16
  */
@@ -39,5 +40,5 @@ export declare const MAILWOMAN_API_DOC_INFO: OpenAPIDocInfo;
39
40
  /**
40
41
  * Build the native Mailwoman app around an injected {@link MailwomanAPIEngine}.
41
42
  */
42
- export declare function createMailwomanAPI(engine: MailwomanAPIEngine, options?: MailwomanAPIOptions): OpenAPIHono;
43
+ export declare function createMailwomanAPI<T extends Partial<GeocodeOutcomeLike> = GeocodeOutcomeLike>(engine: MailwomanAPIEngine<T>, options?: MailwomanAPIOptions): OpenAPIHono;
43
44
  //# 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;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"}
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,EAAoC,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAM1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAOrD;;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,CAAC,SAAS,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,EAC5F,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC7B,OAAO,GAAE,mBAAwB,GAC/B,WAAW,CAkDb"}
package/out/app.js CHANGED
@@ -8,10 +8,10 @@
8
8
  * CLI wires the real parse/geocode/resolve stack (phase 4b); tests inject fixtures.
9
9
  */
10
10
  import { OpenAPIHono } from "@hono/zod-openapi";
11
- import { apiError, attachOpenAPIDocs } from "@mailwoman/api-kit";
12
- import packageJson from "@mailwoman/api/package.json" with { type: "json" };
11
+ import { errorResponse, attachOpenAPIDocs } from "@mailwoman/api-kit";
13
12
  import { bodyLimit } from "hono/body-limit";
14
13
  import { cors } from "hono/cors";
14
+ import packageJson from "#package.json" with { type: "json" };
15
15
  import { DEFAULT_BATCH_MAX, registerMailwomanAPIRoutes } from "./routes.js";
16
16
  /**
17
17
  * 2 MiB — carried from the express server's `express.json({ limit: "2mb" })` (`mailwoman/server/index.ts`).
@@ -34,7 +34,7 @@ export const MAILWOMAN_API_DOC_INFO = {
34
34
  version: packageJson.version,
35
35
  description: packageJson.description,
36
36
  license: { name: "AGPL-3.0-only OR LicenseRef-Commercial", identifier: "AGPL-3.0-only" },
37
- contact: { name: "Sister Software", url: "https://mailwoman.sister.software" },
37
+ contact: { name: "Sister Software", url: "https://mailwoman.ai" },
38
38
  servers: [
39
39
  {
40
40
  url: "http://{host}:{port}",
@@ -62,7 +62,7 @@ export function createMailwomanAPI(engine, options = {}) {
62
62
  // just `/v1/format`).
63
63
  defaultHook: (result, c) => {
64
64
  if (!result.success) {
65
- return apiError(c, 400, "invalid request body", summarizeValidationError(result.error));
65
+ return errorResponse(c, 400, "invalid request body", summarizeValidationError(result.error));
66
66
  }
67
67
  return undefined;
68
68
  },
@@ -79,15 +79,15 @@ export function createMailwomanAPI(engine, options = {}) {
79
79
  // validator throws before a route's own hook ever sees the body, so it lands here instead of the
80
80
  // per-route 400s in routes.ts. Answer 400, not the 500 net (which stays reserved for engine faults).
81
81
  if (error instanceof Error && error.message.includes("Malformed JSON")) {
82
- return apiError(c, 400, "invalid request body", "malformed JSON");
82
+ return errorResponse(c, 400, "invalid request body", "malformed JSON");
83
83
  }
84
- return apiError(c, 500, "internal error", error instanceof Error ? error.message : String(error));
84
+ return errorResponse(c, 500, "internal error", error instanceof Error ? error.message : String(error));
85
85
  });
86
86
  // Ahead of the handlers (which buffer the body into memory) so an oversized POST is rejected before that
87
87
  // buffering happens, not after — mirrors the libpostal precedent.
88
88
  app.use("/v1/*", bodyLimit({
89
89
  maxSize: options.bodyLimitBytes ?? DEFAULT_BODY_LIMIT_BYTES,
90
- onError: (c) => apiError(c, 413, "request body too large"),
90
+ onError: (c) => errorResponse(c, 413, "request body too large"),
91
91
  }));
92
92
  registerMailwomanAPIRoutes(app, engine, { batchMax: options.batchMax ?? DEFAULT_BATCH_MAX });
93
93
  attachOpenAPIDocs(app, MAILWOMAN_API_DOC_INFO);
package/out/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"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"}
package/out/engine.d.ts CHANGED
@@ -8,6 +8,7 @@
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
+ import type { GeocodeOutcomeLike } from "./schema.ts";
11
12
  /**
12
13
  * One parsed component in reading order (a `ComponentTag` + the covered text).
13
14
  */
@@ -18,23 +19,20 @@ export interface ParseComponent {
18
19
  /**
19
20
  * One parse outcome: ordered components + the full decoded tree (the same language `/v1/resolve` speaks).
20
21
  */
21
- export interface ParseOutcome {
22
+ export interface ParsedAddressResult {
22
23
  input: string;
23
24
  components: ParseComponent[];
24
25
  tree: AddressTree;
25
26
  debug?: string;
26
27
  }
27
- /**
28
- * A geocode outcome — the engine returns the geocode-core `GeocodeResult` shape verbatim (passthrough).
29
- */
30
- export type GeocodeOutcome = Record<string, unknown>;
31
- /**
32
- * A batch row: a GeocodeOutcome, or an `{ input, error }` slot (per-row isolation).
33
- */
34
- export type BatchRow = GeocodeOutcome | {
28
+ export interface BatchResultFailure {
35
29
  input: string;
36
30
  error: string;
37
- };
31
+ }
32
+ /**
33
+ * A batch row slot (per-row isolation).
34
+ */
35
+ export type BatchResultEntry<T extends Partial<GeocodeOutcomeLike> = GeocodeOutcomeLike> = T | BatchResultFailure;
38
36
  export interface ResolveTreeOutcome {
39
37
  tree: AddressTree;
40
38
  }
@@ -47,18 +45,16 @@ export type HealthData = Record<string, unknown>;
47
45
  * structurally so `@mailwoman/api` stays engine-agnostic). `formatted` runs the evidence-bundle channels off.
48
46
  */
49
47
  export type WireInputMode = "fragmented" | "formatted";
50
- export interface MailwomanAPIEngine {
51
- parse?(address: string, opts: {
52
- debug: boolean;
53
- inputMode?: WireInputMode;
54
- }): Promise<ParseOutcome>;
55
- geocode?(address: string, opts?: {
56
- inputMode?: WireInputMode;
57
- }): Promise<GeocodeOutcome>;
58
- batch?(addresses: string[], opts?: {
59
- inputMode?: WireInputMode;
60
- }): Promise<{
61
- results: BatchRow[];
48
+ export interface ParseInit {
49
+ inputMode?: WireInputMode;
50
+ debug?: boolean;
51
+ }
52
+ export type GeocodeCallback<T extends Partial<GeocodeOutcomeLike> = GeocodeOutcomeLike> = (address: string, opts?: ParseInit) => Promise<T>;
53
+ export interface MailwomanAPIEngine<T extends Partial<GeocodeOutcomeLike> = GeocodeOutcomeLike> {
54
+ parse?(address: string, opts: ParseInit): Promise<ParsedAddressResult>;
55
+ geocode?: GeocodeCallback<T>;
56
+ batch?(addresses: string[], opts?: ParseInit): Promise<{
57
+ results: BatchResultEntry<T>[];
62
58
  }>;
63
59
  resolveTree?(tree: AddressTree, opts: Record<string, unknown>): Promise<ResolveTreeOutcome>;
64
60
  reload?(): Promise<{
@@ -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;;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"}
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,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,IAAI,CAAC,GAAG,kBAAkB,CAAA;AAEjH,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,SAAS;IACzB,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,KAAK,CAAC,EAAE,OAAO,CAAA;CACf;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,IAAI,CACzF,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,SAAS,KACZ,OAAO,CAAC,CAAC,CAAC,CAAA;AAEf,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB;IAC7F,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACtE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;IAC5B,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;KAAE,CAAC,CAAA;IAC1F,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
@@ -20,6 +20,7 @@
20
20
  */
21
21
  import { type OpenAPIHono } from "@hono/zod-openapi";
22
22
  import type { MailwomanAPIEngine } from "./engine.ts";
23
+ import { type GeocodeOutcome } from "./schema.ts";
23
24
  /**
24
25
  * Default `POST /v1/batch` row cap when {@link RegisterMailwomanAPIRoutesOptions.batchMax} is omitted. This is the
25
26
  * standalone-engine default, not derived from env — `mailwoman serve` always passes the env-derived value explicitly
@@ -38,5 +39,5 @@ export interface RegisterMailwomanAPIRoutesOptions {
38
39
  /**
39
40
  * Register the native `/v1` routes + `/health` + `/metrics` against an injected engine.
40
41
  */
41
- export declare function registerMailwomanAPIRoutes(app: OpenAPIHono, engine: MailwomanAPIEngine, options?: RegisterMailwomanAPIRoutesOptions): void;
42
+ export declare function registerMailwomanAPIRoutes<T extends Partial<GeocodeOutcome> = GeocodeOutcome>(app: OpenAPIHono, engine: MailwomanAPIEngine<T>, options?: RegisterMailwomanAPIRoutesOptions): void;
42
43
  //# sourceMappingURL=routes.d.ts.map
@@ -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;;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"}
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;AACrD,OAAO,EAaN,KAAK,cAAc,EACnB,MAAM,aAAa,CAAA;AAEpB;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAIpC;;GAEG;AACH,MAAM,WAAW,iCAAiC;IACjD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AA+LD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,EAC5F,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC7B,OAAO,GAAE,iCAAsC,GAC7C,IAAI,CAuKN"}
package/out/routes.js CHANGED
@@ -19,7 +19,7 @@
19
19
  * `"invalid request body"`.
20
20
  */
21
21
  import { createRoute, z } from "@hono/zod-openapi";
22
- import { apiError, metricsSnapshot, recordTimed } from "@mailwoman/api-kit";
22
+ import { geocoderUnavailableError, metricsSnapshot, recordTimed } from "@mailwoman/api-kit";
23
23
  import { canonicalKey, formatAddress } from "@mailwoman/formatter";
24
24
  import { APIErrorSchema, BatchRequestSchema, BatchResponseSchema, FormatRequestSchema, FormatResponseSchema, GeocodeOutcomeSchema, GeocodeRequestSchema, HealthResponseSchema, ParseOutcomeSchema, ParseRequestSchema, ResolveRequestSchema, ResolveResponseSchema, } from "./schema.js";
25
25
  /**
@@ -29,13 +29,6 @@ import { APIErrorSchema, BatchRequestSchema, BatchResponseSchema, FormatRequestS
29
29
  */
30
30
  export const DEFAULT_BATCH_MAX = 500;
31
31
  const startedAt = Date.now();
32
- /**
33
- * `detail` text for every 503 "engine method absent" response (`/v1/geocode`, `/v1/batch`, `/v1/resolve`, `/v1/reload`)
34
- * — the express-era remediation carried forward: a stranger hitting a 503 must see the exact fix, not just "not
35
- * available". Matches `mailwoman/api-engine.ts`'s `buildPreflightMessage()` boot-time banner in spirit (same two
36
- * missing pieces — the packages, and the gazetteer data), condensed to one line for a JSON error body.
37
- */
38
- const GEOCODER_UNAVAILABLE_DETAIL = "install @mailwoman/neural + @mailwoman/resolver-wof-sqlite and provide gazetteer data (MAILWOMAN_WOF_DB / MAILWOMAN_CANDIDATE_DB)";
39
32
  const errorContent = (description) => ({
40
33
  description,
41
34
  content: { "application/json": { schema: APIErrorSchema } },
@@ -220,12 +213,14 @@ export function registerMailwomanAPIRoutes(app, engine, options = {}) {
220
213
  return c.json(outcome, 200);
221
214
  });
222
215
  app.openapi(parsePostRoute, async (c) => {
223
- if (!engine.parse)
216
+ if (!engine.parse) {
224
217
  return c.json({ error: "parse not implemented" }, 501);
218
+ }
225
219
  const { address, debug, input_mode } = c.req.valid("json");
226
220
  const trimmed = address.trim();
227
- if (!trimmed)
221
+ if (!trimmed) {
228
222
  return c.json({ error: "address is required" }, 400);
223
+ }
229
224
  const outcome = await engine.parse(trimmed, { debug: debug ?? false, inputMode: input_mode });
230
225
  return c.json(outcome, 200);
231
226
  }, (result, c) => {
@@ -234,29 +229,28 @@ export function registerMailwomanAPIRoutes(app, engine, options = {}) {
234
229
  return undefined;
235
230
  });
236
231
  app.openapi(geocodeRoute, async (c) => {
237
- if (!engine.geocode)
238
- return apiError(c, 503, "geocoder not available", GEOCODER_UNAVAILABLE_DETAIL);
232
+ if (!engine.geocode) {
233
+ return geocoderUnavailableError(c);
234
+ }
239
235
  const { address, input_mode } = c.req.valid("json");
240
236
  const trimmed = address.trim();
241
237
  if (!trimmed)
242
238
  return c.json({ error: "address is required" }, 400);
243
239
  const t0 = performance.now();
244
- try {
245
- const outcome = await engine.geocode(trimmed, { inputMode: input_mode });
246
- recordTimed(performance.now() - t0, String(outcome["resolution_tier"] ?? "admin"));
247
- // `GeocodeOutcome` (the engine contract) is a deliberate `Record<string, unknown>` passthrough
248
- // `GeocodeOutcomeSchema` is now a REAL typed shape (doc-accuracy only, per its own docstring), so a
249
- // local cast at this wire boundary is needed, matching the established idiom below (`/v1/resolve`'s
250
- // `tree as unknown as AddressTree`) for "documented wire shape looser than the domain type".
240
+ return engine
241
+ .geocode(trimmed, { inputMode: input_mode })
242
+ .then((outcome) => {
243
+ recordTimed(performance.now() - t0, String(outcome.resolution_tier ?? "admin"));
251
244
  return c.json(outcome, 200);
252
- }
253
- catch (error) {
245
+ })
246
+ .catch((error) => {
254
247
  recordTimed(performance.now() - t0, "error");
255
248
  throw error;
256
- }
249
+ });
257
250
  }, (result, c) => {
258
- if (!result.success)
251
+ if (!result.success) {
259
252
  return c.json({ error: "address is required" }, 400);
253
+ }
260
254
  return undefined;
261
255
  });
262
256
  app.openapi(batchRoute, async (c) => {
@@ -266,8 +260,9 @@ export function registerMailwomanAPIRoutes(app, engine, options = {}) {
266
260
  if (addresses.length > batchMax) {
267
261
  return c.json({ error: `batch too large: ${addresses.length} > ${batchMax}` }, 413);
268
262
  }
269
- if (!engine.batch)
270
- return apiError(c, 503, "geocoder not available", GEOCODER_UNAVAILABLE_DETAIL);
263
+ if (!engine.batch) {
264
+ return geocoderUnavailableError(c);
265
+ }
271
266
  // Whole-call latency, recorded under the "batch" tier. Per-row tier metrics are the ENGINE's
272
267
  // responsibility (phase 4b) — this app only times the call as a unit.
273
268
  const t0 = performance.now();
@@ -294,12 +289,12 @@ export function registerMailwomanAPIRoutes(app, engine, options = {}) {
294
289
  // street node's stamped resolution tier per call — the wired engine must carry that over, and
295
290
  // must trim batch rows the same way (the route passes raw input through).
296
291
  async (c) => {
297
- if (!engine.resolveTree)
298
- return apiError(c, 503, "resolver not available", GEOCODER_UNAVAILABLE_DETAIL);
292
+ // `resolver`, not `geocoder` — the missing method is `engine.resolveTree`, and the 503's `error`
293
+ // value is what a caller branches on.
294
+ if (!engine.resolveTree) {
295
+ return geocoderUnavailableError(c, "resolver");
296
+ }
299
297
  const { tree, opts } = c.req.valid("json");
300
- // The wire schema keeps `tree` loose (`{ roots: unknown[] }`, forward-compat) — a local cast at the
301
- // boundary onto the engine's `AddressTree` contract, matching the established idiom (api-kit's
302
- // `openapi.ts`, the drop-ins' response casts) for "documented wire shape looser than the domain type".
303
298
  const outcome = await engine.resolveTree(tree, opts ?? {});
304
299
  return c.json(outcome, 200);
305
300
  }, (result, c) => {
@@ -308,8 +303,9 @@ export function registerMailwomanAPIRoutes(app, engine, options = {}) {
308
303
  return undefined;
309
304
  });
310
305
  app.openapi(reloadRoute, async (c) => {
311
- if (!engine.reload)
312
- return apiError(c, 503, "geocoder not available", GEOCODER_UNAVAILABLE_DETAIL);
306
+ if (!engine.reload) {
307
+ return geocoderUnavailableError(c);
308
+ }
313
309
  const outcome = await engine.reload();
314
310
  return c.json(outcome, 200);
315
311
  });
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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"}