mailwoman 5.10.0 → 6.0.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.
Files changed (41) hide show
  1. package/out/api-engine.d.ts.map +1 -0
  2. package/out/api-engine.js +282 -0
  3. package/out/api-engine.js.map +1 -0
  4. package/out/commands/clients/generate.d.ts.map +1 -0
  5. package/out/commands/clients/generate.js +45 -0
  6. package/out/commands/clients/generate.js.map +1 -0
  7. package/out/commands/geocode.d.ts.map +1 -1
  8. package/out/commands/geocode.js +35 -3
  9. package/out/commands/geocode.js.map +1 -1
  10. package/out/commands/openapi.d.ts.map +1 -0
  11. package/out/commands/openapi.js +37 -0
  12. package/out/commands/openapi.js.map +1 -0
  13. package/out/commands/serve.d.ts.map +1 -1
  14. package/out/commands/serve.js +98 -23
  15. package/out/commands/serve.js.map +1 -1
  16. package/out/eval-harness/gauntlet/cases/regression.d.ts.map +1 -1
  17. package/out/eval-harness/gauntlet/cases/regression.js +63 -0
  18. package/out/eval-harness/gauntlet/cases/regression.js.map +1 -1
  19. package/out/geocode-core.js +3 -3
  20. package/out/tools/generate-clients.d.ts.map +1 -0
  21. package/out/tools/generate-clients.js +802 -0
  22. package/out/tools/generate-clients.js.map +1 -0
  23. package/package.json +22 -28
  24. package/out/server/AddressRouter.d.ts.map +0 -1
  25. package/out/server/AddressRouter.js +0 -37
  26. package/out/server/AddressRouter.js.map +0 -1
  27. package/out/server/GeocodeRouter.d.ts.map +0 -1
  28. package/out/server/GeocodeRouter.js +0 -226
  29. package/out/server/GeocodeRouter.js.map +0 -1
  30. package/out/server/HealthRouter.d.ts.map +0 -1
  31. package/out/server/HealthRouter.js +0 -97
  32. package/out/server/HealthRouter.js.map +0 -1
  33. package/out/server/ResolveRouter.d.ts.map +0 -1
  34. package/out/server/ResolveRouter.js +0 -147
  35. package/out/server/ResolveRouter.js.map +0 -1
  36. package/out/server/index.d.ts.map +0 -1
  37. package/out/server/index.js +0 -10
  38. package/out/server/index.js.map +0 -1
  39. package/out/server/metrics.d.ts.map +0 -1
  40. package/out/server/metrics.js +0 -75
  41. package/out/server/metrics.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-engine.d.ts","sourceRoot":"","sources":["../api-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,KAAK,EAIX,kBAAkB,EAGlB,MAAM,gBAAgB,CAAA;AAgLvB,gDAAgD;AAChD,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,kBAAkB,CAAA;IAC1B,SAAS,EAAE;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CACxD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAsI9D"}
@@ -0,0 +1,282 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * The wired {@link MailwomanAPIEngine} for `mailwoman serve` (Phase 4b, the Hono cutover). Ports the
7
+ * former express `server/`'s handler bodies — `GeocodeRouter.getDeps` + its `/api/geocode`,
8
+ * `/api/batch`, `/api/resolve-tree`, `/api/reload` handlers, `AddressRouter`'s `/parse` handler, and
9
+ * `HealthRouter`'s `/health` data block — onto the engine-agnostic `@mailwoman/api` contract
10
+ * (`/v1/parse`, `/v1/geocode`, `/v1/batch`, `/v1/resolve`, `/v1/reload`). `mailwoman/server/` is
11
+ * deleted (Task 2) — this file is its sole successor, a fresh port rather than a thin wrapper.
12
+ *
13
+ * `createServeEngine` builds the shared stack ONCE, at boot, instead of express's lazy
14
+ * first-request memoized promise — the CLI's `serve` command awaits it before listening, so a
15
+ * misconfigured deployment fails FRIENDLY at boot (the #1009 pattern the drop-ins already use)
16
+ * instead of a runtime 503 on the first request. When the classifier/resolver stack can't be built
17
+ * (missing WOF data, or `@mailwoman/neural` / `@mailwoman/resolver-wof-sqlite` unresolvable), the
18
+ * returned engine still carries `parse` (the rule-based parser needs no gazetteer) and `health`
19
+ * (must answer even when broken) — `geocode`/`batch`/`resolveTree`/`reload` are simply absent, and
20
+ * `@mailwoman/api`'s routes answer 501/503 for those on their own.
21
+ */
22
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
23
+ import { createRequire } from "node:module";
24
+ import { join } from "node:path";
25
+ import { recordTimed } from "@mailwoman/api-kit";
26
+ import { $public } from "@mailwoman/core/env";
27
+ import { createWOFResolver } from "@mailwoman/resolver";
28
+ import { readReleaseManifest } from "./data-release.js";
29
+ import { geocodeAddress, regionSlugFromTree, ShardProvider, } from "./geocode-core.js";
30
+ import { INTERP_RADIUS_CALIBRATION, interpCalibrationForRegion } from "./interp-calibration.js";
31
+ import { createResolverBackend, mailwomanDataRoot, resolveCandidateDBPath, wofShardPaths } from "./resolver-backend.js";
32
+ import { createDiagnosticReport } from "./utils/DebugOutputBuilder.js";
33
+ import { createAddressParser } from "./utils/parser.js";
34
+ /** Default per-state shard root + interp calibration — mirrors the express server's defaults (`GeocodeRouter.ts`). */
35
+ const DATA_ROOT = mailwomanDataRoot();
36
+ /** Bounded concurrency for `batch()`. Override with `MAILWOMAN_BATCH_CONCURRENCY`. */
37
+ const BATCH_CONCURRENCY = Math.max(1, $public.MAILWOMAN_BATCH_CONCURRENCY);
38
+ /** Same WOF-path resolution as the express `GeocodeRouter`/`HealthRouter` (env override, else the conventional shards). */
39
+ function wofPaths() {
40
+ const env = $public.MAILWOMAN_WOF_DB;
41
+ if (env)
42
+ return env
43
+ .split(",")
44
+ .map((p) => p.trim())
45
+ .filter(Boolean);
46
+ return wofShardPaths().filter((p) => existsSync(p));
47
+ }
48
+ /**
49
+ * #1009-style boot preflight message. Same shape as the drop-ins' (`photon/cli.ts`, `nominatim/cli.ts`) — a stranger's
50
+ * first `mailwoman serve` must say exactly what data is missing and the one command that fixes it — adapted to this
51
+ * package's own override (`MAILWOMAN_WOF_DB`, a comma-separated FTS shard list) alongside the shared
52
+ * candidate-gazetteer fast path (`MAILWOMAN_CANDIDATE_DB`).
53
+ */
54
+ function buildPreflightMessage() {
55
+ const conventionCandidate = join(DATA_ROOT, "wof", "candidate.db");
56
+ return [
57
+ "✗ no gazetteer data found — `mailwoman serve` needs a WOF SQLite distribution to geocode/resolve.",
58
+ "",
59
+ " Fastest path (worldwide resolution, ~1.4 GB, byte-range friendly):",
60
+ ` mkdir -p ${join(DATA_ROOT, "wof")}`,
61
+ ` curl -fSL https://public.sister.software/mailwoman/gazetteer/2026-07-07a/candidate.db \\`,
62
+ ` -o ${conventionCandidate}`,
63
+ "",
64
+ " Then re-run `serve` (the file is auto-detected at that path), or point at your own:",
65
+ " $MAILWOMAN_WOF_DB=<path1,path2,...> (admin WOF SQLite shard(s) — the FTS backend)",
66
+ " $MAILWOMAN_CANDIDATE_DB=<path> (candidate-table gazetteer — population-first, demo-parity)",
67
+ "",
68
+ " Docs: https://mailwoman.sister.software/docs",
69
+ ].join("\n");
70
+ }
71
+ /**
72
+ * Best-effort model-card read: env override → installed weights package → dev-tree fallback. Ported from
73
+ * `HealthRouter`.
74
+ */
75
+ function readModelCard() {
76
+ const candidates = [];
77
+ if ($public.MAILWOMAN_MODEL_CARD) {
78
+ candidates.push($public.MAILWOMAN_MODEL_CARD);
79
+ }
80
+ try {
81
+ candidates.push(createRequire(import.meta.url).resolve("@mailwoman/neural-weights-en-us/model-card.json"));
82
+ }
83
+ catch {
84
+ /* package not resolvable from here — fall through */
85
+ }
86
+ candidates.push("neural-weights-en-us/model-card.json");
87
+ for (const p of candidates) {
88
+ try {
89
+ if (existsSync(p))
90
+ return JSON.parse(readFileSync(p, "utf8"));
91
+ }
92
+ catch {
93
+ /* unreadable / malformed — try the next candidate */
94
+ }
95
+ }
96
+ return null;
97
+ }
98
+ /**
99
+ * Count canonical per-state shards (`<prefix>-us-<2-letter>.db`) in a data subdir; 0 if absent. Ported from
100
+ * `HealthRouter`.
101
+ */
102
+ function countShards(subdir, prefix) {
103
+ try {
104
+ const re = new RegExp(`^${prefix}-us-[a-z]{2}\\.db$`);
105
+ return readdirSync(`${DATA_ROOT}/${subdir}`).filter((f) => re.test(f)).length;
106
+ }
107
+ catch {
108
+ return 0;
109
+ }
110
+ }
111
+ /**
112
+ * The `/health` data block: model card + data-root inventory. Ported from `HealthRouter`'s `healthHandler`. Always
113
+ * available — reads files best-effort and never throws, regardless of preflight status.
114
+ */
115
+ function buildHealthData() {
116
+ const card = readModelCard();
117
+ return {
118
+ model: card
119
+ ? {
120
+ name: card["name"],
121
+ version: card["version"],
122
+ locale: card["locale"],
123
+ labels: Array.isArray(card["labels"]) ? card["labels"].length : undefined,
124
+ format: card["format"],
125
+ }
126
+ : null,
127
+ data: {
128
+ data_root: DATA_ROOT,
129
+ // Versioned-switchover provenance (#485): the releases.json pin, or null in legacy mode.
130
+ versions: readReleaseManifest(DATA_ROOT),
131
+ // The express HealthRouter existsSync-filtered here where GeocodeRouter's wofPaths() didn't;
132
+ // this diagnostic field keeps the health-side behavior (no phantom env paths in "what's deployed").
133
+ wof_dbs: wofPaths().filter((p) => existsSync(p)),
134
+ situs_states: countShards("address-points", "address-points"),
135
+ interpolation_states: countShards("interpolation", "interpolation"),
136
+ },
137
+ };
138
+ }
139
+ /** One geocode call over the shared deps. Ported from `GeocodeRouter`'s `oneGeocode`. */
140
+ function oneGeocode(deps, address) {
141
+ return geocodeAddress(address, {
142
+ classifier: deps.classifier,
143
+ resolver: deps.resolver,
144
+ shards: deps.shards.for,
145
+ defaultCountry: deps.defaultCountry,
146
+ interpCalibration: INTERP_RADIUS_CALIBRATION,
147
+ });
148
+ }
149
+ /** Pull the street node's resolution tier (if any) for the metric. Ported verbatim from `GeocodeRouter`. */
150
+ function collectStreetTier(node) {
151
+ const out = [];
152
+ if (node.tag === "street") {
153
+ const tier = node.metadata?.["resolution_tier"];
154
+ if (tier === "address_point" || tier === "interpolated" || tier === "street") {
155
+ out.push(tier);
156
+ }
157
+ }
158
+ for (const child of node.children) {
159
+ out.push(...collectStreetTier(child));
160
+ }
161
+ return out;
162
+ }
163
+ /**
164
+ * Build the wired `mailwoman serve` engine. Awaited ONCE at boot (unlike express's lazy per-request `getDeps()`), so a
165
+ * misconfigured deployment reports its preflight failure before the process starts listening — the caller (the `serve`
166
+ * command) decides whether to boot degraded (parse+health only) or exit friendly.
167
+ */
168
+ export async function createServeEngine() {
169
+ // The rule-based parser needs no gazetteer — always available, even when the geocode/resolve stack below fails to
170
+ // build. Ported from `AddressRouter`'s handler.
171
+ const parser = createAddressParser();
172
+ const parse = async (address, opts) => {
173
+ const result = await parser.parse(address, { verbose: true });
174
+ const { solutions, context } = result;
175
+ const outcome = {
176
+ input: { body: context.span.body, start: context.span.start, end: context.span.end },
177
+ solutions: solutions.map((solution) => solution.toJSON()),
178
+ debug: opts.debug ? createDiagnosticReport(result) : undefined,
179
+ };
180
+ return outcome;
181
+ };
182
+ // `health` reads files best-effort and never throws — wired unconditionally, matching `HealthRouter`'s "answers even
183
+ // when broken" contract.
184
+ const health = () => buildHealthData();
185
+ let neuralMod;
186
+ let resolverMod;
187
+ try {
188
+ neuralMod = await import("@mailwoman/neural");
189
+ resolverMod = await import("@mailwoman/resolver-wof-sqlite");
190
+ }
191
+ catch {
192
+ console.error("createServeEngine: @mailwoman/neural + @mailwoman/resolver-wof-sqlite are required");
193
+ return { engine: { parse, health }, preflight: { ok: false, message: buildPreflightMessage() } };
194
+ }
195
+ const paths = wofPaths();
196
+ // Candidate backend → country-agnostic default (demo's global, population-first behavior); a per-request `country`
197
+ // still scopes. FTS backend keeps the US default. (#170) A candidate DB alone (no WOF admin shard) is a valid boot
198
+ // configuration — `createResolverBackend` prefers it over `wofPaths` — so the preflight gate below checks BOTH,
199
+ // mirroring the drop-ins' `!candidateDb && wofPaths.length === 0` gate rather than `GeocodeRouter`'s WOF-only check.
200
+ const candidateDb = resolveCandidateDBPath();
201
+ if (paths.length === 0 && !candidateDb) {
202
+ console.error("createServeEngine: no WOF DBs found — set MAILWOMAN_WOF_DB or MAILWOMAN_CANDIDATE_DB");
203
+ return { engine: { parse, health }, preflight: { ok: false, message: buildPreflightMessage() } };
204
+ }
205
+ const classifier = await neuralMod.NeuralAddressClassifier.loadFromWeights({ locale: "en-US" });
206
+ const backend = createResolverBackend(resolverMod, { wofPaths: paths });
207
+ const resolver = createWOFResolver(backend);
208
+ const shards = new ShardProvider(resolverMod, DATA_ROOT);
209
+ const deps = { classifier, resolver, shards, defaultCountry: candidateDb ? undefined : "US" };
210
+ // Route records the whole-call metric already (`@mailwoman/api`'s `routes.ts`) — the engine records nothing extra
211
+ // here. Ported from `GeocodeRouter`'s `singleHandler`. The cast mirrors `@mailwoman/api/routes.ts`'s established
212
+ // "documented wire shape looser than the domain type" idiom — `GeocodeOutcome` is a deliberately loose passthrough.
213
+ const geocode = async (address) => (await oneGeocode(deps, address));
214
+ // Bounded-concurrency worker pool over a shared cursor — results land in input order; a thrown row is isolated to
215
+ // its own `{ input, error }` slot. Rows are trimmed here (the route passes the raw validated array through). Ported
216
+ // from `GeocodeRouter`'s `batchHandler`.
217
+ const batch = async (addresses) => {
218
+ const inputs = addresses.map((a) => a.trim());
219
+ const results = new Array(inputs.length);
220
+ let cursor = 0;
221
+ const worker = async () => {
222
+ for (let i = cursor++; i < inputs.length; i = cursor++) {
223
+ const input = inputs[i];
224
+ const t0 = performance.now();
225
+ try {
226
+ const result = await oneGeocode(deps, input);
227
+ recordTimed(performance.now() - t0, result.resolution_tier);
228
+ results[i] = result;
229
+ }
230
+ catch (err) {
231
+ recordTimed(performance.now() - t0, "error");
232
+ results[i] = { input, error: err instanceof Error ? err.message : String(err) };
233
+ }
234
+ }
235
+ };
236
+ await Promise.all(Array.from({ length: Math.min(BATCH_CONCURRENCY, inputs.length) }, worker));
237
+ return { results };
238
+ };
239
+ // Metrics are the engine's own responsibility here — unlike `/v1/geocode`, the route wraps no try/catch around
240
+ // `resolveTree` (it lets a fault fall through to the app's 500 safety net), so the tier metric AND the rethrow both
241
+ // happen here. Ported from `GeocodeRouter`'s `resolveTreeHandler`.
242
+ const resolveTree = async (tree, rawOpts) => {
243
+ const incomingOpts = (rawOpts ?? {});
244
+ const t0 = performance.now();
245
+ try {
246
+ const slug = regionSlugFromTree(tree);
247
+ const { addressPoints, interpolation } = deps.shards.for(slug);
248
+ const opts = {
249
+ ...incomingOpts,
250
+ defaultCountry: incomingOpts.defaultCountry ?? deps.defaultCountry,
251
+ ...(addressPoints ? { addressPoints } : {}),
252
+ ...(interpolation
253
+ ? {
254
+ interpolation,
255
+ interpolationRadiusCalibration: incomingOpts.interpolationRadiusCalibration ??
256
+ interpCalibrationForRegion(INTERP_RADIUS_CALIBRATION, slug),
257
+ }
258
+ : {}),
259
+ };
260
+ const resolved = await deps.resolver.resolveTree(tree, opts);
261
+ // Best-effort tier metric: read the street node's stamped tier (matches the geocode path).
262
+ const street = resolved.roots.flatMap((r) => collectStreetTier(r)).find(Boolean);
263
+ recordTimed(performance.now() - t0, street ?? "admin");
264
+ const outcome = { tree: resolved };
265
+ return outcome;
266
+ }
267
+ catch (err) {
268
+ recordTimed(performance.now() - t0, "error");
269
+ throw err;
270
+ }
271
+ };
272
+ // Ported from `GeocodeRouter`'s `reloadHandler`.
273
+ const reload = async () => {
274
+ const versions = deps.shards.reload();
275
+ return { reloaded: true, versions };
276
+ };
277
+ return {
278
+ engine: { parse, geocode, batch, resolveTree, reload, health },
279
+ preflight: { ok: true },
280
+ };
281
+ }
282
+ //# sourceMappingURL=api-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-engine.js","sourceRoot":"","sources":["../api-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../commands/clients/generate.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAa,KAAK,gBAAgB,EAAkB,MAAM,wBAAwB,CAAA;AAGzF,eAAO,MAAM,WAAW,qFAAqF,CAAA;AAE7G,QAAA,MAAM,aAAa;;;qBAQjB,CAAA;AAEF,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAEnC,QAAA,MAAM,eAAe,EAAE,gBAAgB,CAAC,OAAO,aAAa,CAoC3D,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @copyright Sister Software
4
+ * @license AGPL-3.0
5
+ * @author Teffen Ellis, et al.
6
+ *
7
+ * `mailwoman clients generate` — the client-generation pipeline: emit all four surfaces' OpenAPI
8
+ * documents (mailwoman/photon/nominatim/libpostal — 3.1 + the progenitor-diet 3.0), generate a
9
+ * Python package (openapi-python-client, the salvaged `mailwoman_client` layout from the retired
10
+ * `feat/api-clients` branch) and a Rust crate (progenitor `generate_api!`, the salvaged Cargo.toml
11
+ * / lib.rs pattern), then VERIFY both actually build (`uv build` + a wheel import-check, `cargo
12
+ * check --examples`). Output lands under the gitignored `clients-build/` — nothing generated here
13
+ * is committed. This is the local, receipt-verified proof the gated CI job (Phase 5 Task 4)
14
+ * replays on dispatch. See `docs/articles/api.mdx` "Client libraries" for install/usage snippets
15
+ * and the not-yet-published status.
16
+ */
17
+ import { Box, Text } from "ink";
18
+ import zod from "zod";
19
+ import { CheckList, useCommandTask } from "../../cli-kit/index.js";
20
+ import { generateClients } from "../../tools/generate-clients.js";
21
+ export const description = "Generate + verify the Python and Rust API clients from the emitted OpenAPI specs";
22
+ const OptionsSchema = zod.object({
23
+ outDir: zod.string().optional().describe("Output root. Default <repo>/clients-build (gitignored)"),
24
+ skipVerify: zod
25
+ .boolean()
26
+ .default(false)
27
+ .describe("Skip `uv build`/import-check + `cargo check --examples` (dev only — an unverified pipeline must never stand in as a release proof)"),
28
+ });
29
+ export { OptionsSchema as options };
30
+ const ClientsGenerate = ({ options }) => {
31
+ const state = useCommandTask(() => generateClients({
32
+ outDir: options.outDir,
33
+ skipVerify: options.skipVerify,
34
+ onPhase: (phase, detail) => console.error(` [${phase}]${detail ? ` ${detail}` : ""}`),
35
+ }), (result) => (result.ok ? 0 : 1));
36
+ if (state.status === "error")
37
+ return _jsxs(Text, { color: "red", children: ["\u2717 ", state.message] });
38
+ if (state.status === "done") {
39
+ const { ok, checks, receipt } = state.result;
40
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(CheckList, { checks: checks, verdict: ok }), ok && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { children: ["version: ", receipt.version] }), _jsxs(Text, { children: ["specs: ", receipt.specsDir] }), _jsxs(Text, { children: ["python: ", receipt.pythonDir, receipt.pythonWheel ? ` (${receipt.pythonWheel})` : ""] }), _jsxs(Text, { children: ["rust: ", receipt.rustDir] }), _jsxs(Text, { children: ["elapsed: ", receipt.elapsedSeconds.toFixed(1), "s"] })] }))] }));
41
+ }
42
+ return null; // progress streams to stderr until the summary lands
43
+ };
44
+ export default ClientsGenerate;
45
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../commands/clients/generate.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,SAAS,EAAyB,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,MAAM,CAAC,MAAM,WAAW,GAAG,kFAAkF,CAAA;AAE7G,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;IAClG,UAAU,EAAE,GAAG;SACb,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACR,oIAAoI,CACpI;CACF,CAAC,CAAA;AAEF,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAEnC,MAAM,eAAe,GAA2C,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IAC/E,MAAM,KAAK,GAAG,cAAc,CAC3B,GAAG,EAAE,CACJ,eAAe,CAAC;QACf,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KACtF,CAAC,EACH,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/B,CAAA;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wBAAI,KAAK,CAAC,OAAO,IAAQ,CAAA;IAE/E,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAA;QAE5C,OAAO,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAC1B,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,GAAI,EACzC,EAAE,IAAI,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACvC,MAAC,IAAI,4BAAW,OAAO,CAAC,OAAO,IAAQ,EACvC,MAAC,IAAI,0BAAS,OAAO,CAAC,QAAQ,IAAQ,EACtC,MAAC,IAAI,2BACK,OAAO,CAAC,SAAS,EACzB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,IACjD,EACP,MAAC,IAAI,yBAAQ,OAAO,CAAC,OAAO,IAAQ,EACpC,MAAC,IAAI,4BAAW,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IACrD,CACN,IACI,CACN,CAAA;IACF,CAAC;IAED,OAAO,IAAI,CAAA,CAAC,qDAAqD;AAClE,CAAC,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"geocode.d.ts","sourceRoot":"","sources":["../../commands/geocode.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAWH,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,KAAK,gBAAgB,EAAgC,MAAM,qBAAqB,CAAA;AAiBzF,QAAA,MAAM,eAAe,6BAA4E,CAAA;AACjG,OAAO,EAAE,eAAe,IAAI,IAAI,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAE5D,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;qBAuFjB,CAAA;AA0MF,QAAA,MAAM,cAAc,EAAE,gBAAgB,CAAC,OAAO,aAAa,EAAE,OAAO,eAAe,CAsBlF,CAAA;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"geocode.d.ts","sourceRoot":"","sources":["../../commands/geocode.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAaH,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,KAAK,gBAAgB,EAAgC,MAAM,qBAAqB,CAAA;AAiBzF,QAAA,MAAM,eAAe,6BAA4E,CAAA;AACjG,OAAO,EAAE,eAAe,IAAI,IAAI,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAE5D,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;qBA0FjB,CAAA;AA8OF,QAAA,MAAM,cAAc,EAAE,gBAAgB,CAAC,OAAO,aAAa,EAAE,OAAO,eAAe,CAsBlF,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -28,9 +28,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
28
28
  */
29
29
  import { existsSync } from "node:fs";
30
30
  import { Spinner } from "@inkjs/ui";
31
+ import { toSchemaOrg } from "@mailwoman/annotations";
31
32
  import { CoarsePlacer } from "@mailwoman/core/coarse-placer";
32
33
  import { $public } from "@mailwoman/core/env";
33
34
  import { isBareLocalityTree } from "@mailwoman/core/pipeline";
35
+ import { formatAddress } from "@mailwoman/formatter";
34
36
  import { NeuralAddressClassifier } from "@mailwoman/neural";
35
37
  import { createWOFResolver } from "@mailwoman/resolver";
36
38
  import { Text } from "ink";
@@ -110,10 +112,11 @@ const OptionsSchema = zod.object({
110
112
  .default(0.9)
111
113
  .describe("Abstention threshold for --place-country: below this calibrated confidence the prior is skipped. Default 0.9."),
112
114
  format: zod
113
- .enum(["json", "text"])
115
+ .enum(["json", "text", "jsonld"])
114
116
  .optional()
115
117
  .default("json")
116
- .describe('Output format. "json" (default) emits a machine-readable object; "text" prints a human summary.'),
118
+ .describe('Output format. "json" (default) emits the native machine-readable result; "text" prints a human summary; ' +
119
+ '"jsonld" emits a schema.org Place/PostalAddress/GeoCoordinates JSON-LD object (the web\'s native address format).'),
117
120
  });
118
121
  // ---------------------------------------------------------------------------
119
122
  // Path helpers
@@ -235,7 +238,11 @@ async function runGeocode(input, options) {
235
238
  // Enabled → our threshold-honoring placer; --no-place-country → `false` (disable the default-on prior).
236
239
  placeCountry: placer ? (t) => placer.predict(t) : false,
237
240
  });
238
- return options.format === "text" ? formatText(result) : JSON.stringify(result, null, 2);
241
+ if (options.format === "text")
242
+ return formatText(result);
243
+ if (options.format === "jsonld")
244
+ return JSON.stringify(geocodeToSchemaOrg(result), null, 2);
245
+ return JSON.stringify(result, null, 2);
239
246
  }
240
247
  finally {
241
248
  explicitAp?.close();
@@ -245,6 +252,31 @@ async function runGeocode(input, options) {
245
252
  }
246
253
  }
247
254
  // ---------------------------------------------------------------------------
255
+ // schema.org JSON-LD projection (#1052)
256
+ // ---------------------------------------------------------------------------
257
+ /**
258
+ * Project a {@link GeocodeResult} into a schema.org `Place` JSON-LD object (`--format jsonld`, #1052). `streetAddress`
259
+ * is rendered locale-aware by `@mailwoman/formatter` (house number placement follows the resolved country); the rest of
260
+ * the mapping (locality/region/postcode/ISO country → PostalAddress; coordinate → GeoCoordinates) lives in
261
+ * `@mailwoman/annotations`' {@link toSchemaOrg}. Lossy by design: tiers/uncertainty/candidates don't fit the vocabulary
262
+ * and are dropped.
263
+ */
264
+ function geocodeToSchemaOrg(result) {
265
+ const streetAddress = formatAddress({
266
+ ...(result.house_number ? { house_number: result.house_number } : {}),
267
+ ...(result.street ? { street: result.street } : {}),
268
+ }, result.countryCode ?? "US", { separator: " " });
269
+ return toSchemaOrg({
270
+ lat: result.lat,
271
+ lon: result.lon,
272
+ streetAddress: streetAddress || undefined,
273
+ locality: result.locality ?? undefined,
274
+ region: result.region ?? undefined,
275
+ postalCode: result.postcode ?? undefined,
276
+ countryCode: result.countryCode ?? undefined,
277
+ });
278
+ }
279
+ // ---------------------------------------------------------------------------
248
280
  // Text formatter
249
281
  // ---------------------------------------------------------------------------
250
282
  function formatText(result) {
@@ -1 +1 @@
1
- {"version":3,"file":"geocode.js","sourceRoot":"","sources":["../../commands/geocode.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geocode.js","sourceRoot":"","sources":["../../commands/geocode.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../commands/openapi.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,KAAK,gBAAgB,EAAkB,MAAM,qBAAqB,CAAA;AAE3E,eAAO,MAAM,WAAW,oDAAoD,CAAA;AAE5E,QAAA,MAAM,aAAa;;;;;;qBAGjB,CAAA;AAEF,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAEnC,QAAA,MAAM,OAAO,EAAE,gBAAgB,CAAC,OAAO,aAAa,CAWnD,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1,37 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * @copyright Sister Software
4
+ * @license AGPL-3.0
5
+ * @author Teffen Ellis, et al.
6
+ *
7
+ * `mailwoman openapi` — print (or `--out`-write) the emitted OpenAPI document for the native
8
+ * `@mailwoman/api` `/v1/*` surface, mirroring the `openapi` subcommand every drop-in CLI carries
9
+ * (`mailwoman-libpostal openapi`, `mailwoman-photon openapi`, `mailwoman-nominatim openapi`).
10
+ * Builds the app around a stub engine (`{}` — every `MailwomanAPIEngine` method is optional) so
11
+ * this NEVER boots the real parser/resolver stack: pure route-table introspection, fast regardless
12
+ * of data-root state. `--flavor 3.0` prints the 3.0.3 diet (client generators that lag, e.g.
13
+ * progenitor) instead of the default 3.1.0.
14
+ */
15
+ import { createMailwomanAPI, MAILWOMAN_API_DOC_INFO } from "@mailwoman/api";
16
+ import { printOpenAPIDocument } from "@mailwoman/api-kit";
17
+ import { Text } from "ink";
18
+ import zod from "zod";
19
+ import { useCommandTask } from "../cli-kit/index.js";
20
+ export const description = "Emit the native @mailwoman/api OpenAPI document";
21
+ const OptionsSchema = zod.object({
22
+ flavor: zod.enum(["3.1", "3.0"]).default("3.1").describe("OpenAPI flavor: 3.1.0 (default) or the 3.0.3 diet"),
23
+ out: zod.string().optional().describe("Write to this path instead of stdout"),
24
+ });
25
+ export { OptionsSchema as options };
26
+ const Openapi = ({ options }) => {
27
+ const state = useCommandTask(async () => {
28
+ const app = createMailwomanAPI({});
29
+ printOpenAPIDocument(app, MAILWOMAN_API_DOC_INFO, options);
30
+ });
31
+ if (state.status === "error")
32
+ return _jsxs(Text, { color: "red", children: ["\u2717 ", state.message] });
33
+ // printOpenAPIDocument itself writes to stdout or the --out path.
34
+ return null;
35
+ };
36
+ export default Openapi;
37
+ //# sourceMappingURL=openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../commands/openapi.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAyB,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAE3E,MAAM,CAAC,MAAM,WAAW,GAAG,iDAAiD,CAAA;AAE5E,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAC7G,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CAC7E,CAAC,CAAA;AAEF,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAEnC,MAAM,OAAO,GAA2C,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IACvE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,IAAI,EAAE;QACvC,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAElC,oBAAoB,CAAC,GAAG,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wBAAI,KAAK,CAAC,OAAO,IAAQ,CAAA;IAE/E,kEAAkE;IAClE,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../commands/serve.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAkI3D,eAAO,MAAM,OAAO;;;;qBAAqB,CAAA;AAEzC,QAAA,MAAM,YAAY;;;;sBAAmD,CAAA;AAErE,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../commands/serve.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,GAAG,MAAM,KAAK,CAAA;AAGrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAoN3D,eAAO,MAAM,OAAO;;;;qBAAqB,CAAA;AAEzC,QAAA,MAAM,YAAY;;;;sBAAmD,CAAA;AAErE,eAAe,YAAY,CAAA"}