@kywi-software/core 0.15.0 → 0.15.2

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 (265) hide show
  1. package/AGENT-PATTERNS.md +51 -1
  2. package/dist/admin/audience-editor.d.ts +2 -0
  3. package/dist/admin/audience-editor.d.ts.map +1 -1
  4. package/dist/admin/audience-editor.js +4 -2
  5. package/dist/admin/audience-editor.js.map +1 -1
  6. package/dist/admin/condition-builder.d.ts.map +1 -1
  7. package/dist/admin/condition-builder.js +16 -3
  8. package/dist/admin/condition-builder.js.map +1 -1
  9. package/dist/admin/rule-tester.d.ts +1 -0
  10. package/dist/admin/rule-tester.d.ts.map +1 -1
  11. package/dist/admin/rule-tester.js +7 -4
  12. package/dist/admin/rule-tester.js.map +1 -1
  13. package/dist/admin/signal-options.d.ts +17 -0
  14. package/dist/admin/signal-options.d.ts.map +1 -1
  15. package/dist/admin/signal-options.js +28 -0
  16. package/dist/admin/signal-options.js.map +1 -1
  17. package/dist/admin/surfaces/audiences/audiences-data.d.ts +5 -0
  18. package/dist/admin/surfaces/audiences/audiences-data.d.ts.map +1 -1
  19. package/dist/admin/surfaces/audiences/audiences-data.js +3 -0
  20. package/dist/admin/surfaces/audiences/audiences-data.js.map +1 -1
  21. package/dist/admin/surfaces/feeds/feeds-data.d.ts +8 -1
  22. package/dist/admin/surfaces/feeds/feeds-data.d.ts.map +1 -1
  23. package/dist/admin/surfaces/feeds/feeds-data.js +39 -22
  24. package/dist/admin/surfaces/feeds/feeds-data.js.map +1 -1
  25. package/dist/api/api-key-routes.js +2 -2
  26. package/dist/api/api-key-routes.js.map +1 -1
  27. package/dist/api/audience-routes.d.ts.map +1 -1
  28. package/dist/api/audience-routes.js +10 -4
  29. package/dist/api/audience-routes.js.map +1 -1
  30. package/dist/api/audience-runtime-routes.d.ts +17 -0
  31. package/dist/api/audience-runtime-routes.d.ts.map +1 -1
  32. package/dist/api/audience-runtime-routes.js +474 -23
  33. package/dist/api/audience-runtime-routes.js.map +1 -1
  34. package/dist/api/ax-routes.d.ts.map +1 -1
  35. package/dist/api/ax-routes.js +7 -3
  36. package/dist/api/ax-routes.js.map +1 -1
  37. package/dist/api/category-routes.js +3 -3
  38. package/dist/api/category-routes.js.map +1 -1
  39. package/dist/api/changeset-routes.js +2 -2
  40. package/dist/api/changeset-routes.js.map +1 -1
  41. package/dist/api/comment-routes.js +4 -4
  42. package/dist/api/comment-routes.js.map +1 -1
  43. package/dist/api/component-routes.js +3 -3
  44. package/dist/api/component-routes.js.map +1 -1
  45. package/dist/api/config-routes.js +4 -4
  46. package/dist/api/config-routes.js.map +1 -1
  47. package/dist/api/content-permission-routes.js +2 -2
  48. package/dist/api/content-permission-routes.js.map +1 -1
  49. package/dist/api/content-routes.d.ts.map +1 -1
  50. package/dist/api/content-routes.js +8 -3
  51. package/dist/api/content-routes.js.map +1 -1
  52. package/dist/api/content-type-routes.js +3 -3
  53. package/dist/api/content-type-routes.js.map +1 -1
  54. package/dist/api/experiment-routes.js +2 -2
  55. package/dist/api/experiment-routes.js.map +1 -1
  56. package/dist/api/extension-routes.js +4 -4
  57. package/dist/api/extension-routes.js.map +1 -1
  58. package/dist/api/feed-routes.d.ts.map +1 -1
  59. package/dist/api/feed-routes.js +51 -4
  60. package/dist/api/feed-routes.js.map +1 -1
  61. package/dist/api/form-routes.js +2 -2
  62. package/dist/api/form-routes.js.map +1 -1
  63. package/dist/api/group-routes.js +3 -3
  64. package/dist/api/group-routes.js.map +1 -1
  65. package/dist/api/index.d.ts.map +1 -1
  66. package/dist/api/index.js +15 -4
  67. package/dist/api/index.js.map +1 -1
  68. package/dist/api/layout-routes.d.ts +19 -1
  69. package/dist/api/layout-routes.d.ts.map +1 -1
  70. package/dist/api/layout-routes.js +65 -5
  71. package/dist/api/layout-routes.js.map +1 -1
  72. package/dist/api/layout-write-guard.d.ts +3 -2
  73. package/dist/api/layout-write-guard.d.ts.map +1 -1
  74. package/dist/api/layout-write-guard.js +12 -4
  75. package/dist/api/layout-write-guard.js.map +1 -1
  76. package/dist/api/media-routes.d.ts.map +1 -1
  77. package/dist/api/media-routes.js +50 -9
  78. package/dist/api/media-routes.js.map +1 -1
  79. package/dist/api/menu-routes.js +2 -2
  80. package/dist/api/menu-routes.js.map +1 -1
  81. package/dist/api/nav-routes.js +3 -3
  82. package/dist/api/nav-routes.js.map +1 -1
  83. package/dist/api/oauth-routes.js +2 -2
  84. package/dist/api/oauth-routes.js.map +1 -1
  85. package/dist/api/openapi.d.ts.map +1 -1
  86. package/dist/api/openapi.js +14 -1
  87. package/dist/api/openapi.js.map +1 -1
  88. package/dist/api/pagination.d.ts +10 -0
  89. package/dist/api/pagination.d.ts.map +1 -1
  90. package/dist/api/pagination.js +7 -1
  91. package/dist/api/pagination.js.map +1 -1
  92. package/dist/api/response.d.ts +29 -0
  93. package/dist/api/response.d.ts.map +1 -1
  94. package/dist/api/response.js +23 -3
  95. package/dist/api/response.js.map +1 -1
  96. package/dist/api/search-routes.d.ts.map +1 -1
  97. package/dist/api/search-routes.js +17 -3
  98. package/dist/api/search-routes.js.map +1 -1
  99. package/dist/api/section-template-routes.js +2 -2
  100. package/dist/api/section-template-routes.js.map +1 -1
  101. package/dist/api/site-routes.js +2 -2
  102. package/dist/api/site-routes.js.map +1 -1
  103. package/dist/api/tag-routes.d.ts.map +1 -1
  104. package/dist/api/tag-routes.js +2 -2
  105. package/dist/api/tag-routes.js.map +1 -1
  106. package/dist/api/user-routes.js +2 -2
  107. package/dist/api/user-routes.js.map +1 -1
  108. package/dist/api/version-routes.js +2 -2
  109. package/dist/api/version-routes.js.map +1 -1
  110. package/dist/api/webhook-routes.js +3 -3
  111. package/dist/api/webhook-routes.js.map +1 -1
  112. package/dist/api/workflow-routes.d.ts.map +1 -1
  113. package/dist/api/workflow-routes.js +15 -6
  114. package/dist/api/workflow-routes.js.map +1 -1
  115. package/dist/audiences/collectors/index.d.ts +8 -4
  116. package/dist/audiences/collectors/index.d.ts.map +1 -1
  117. package/dist/audiences/collectors/index.js +17 -4
  118. package/dist/audiences/collectors/index.js.map +1 -1
  119. package/dist/audiences/collectors/selfid.d.ts +25 -0
  120. package/dist/audiences/collectors/selfid.d.ts.map +1 -0
  121. package/dist/audiences/collectors/selfid.js +46 -0
  122. package/dist/audiences/collectors/selfid.js.map +1 -0
  123. package/dist/audiences/collectors/session.d.ts +41 -0
  124. package/dist/audiences/collectors/session.d.ts.map +1 -0
  125. package/dist/audiences/collectors/session.js +50 -0
  126. package/dist/audiences/collectors/session.js.map +1 -0
  127. package/dist/audiences/consent-config.d.ts +12 -0
  128. package/dist/audiences/consent-config.d.ts.map +1 -1
  129. package/dist/audiences/consent-config.js +16 -0
  130. package/dist/audiences/consent-config.js.map +1 -1
  131. package/dist/audiences/consent-startup.d.ts +7 -0
  132. package/dist/audiences/consent-startup.d.ts.map +1 -1
  133. package/dist/audiences/consent-startup.js +9 -2
  134. package/dist/audiences/consent-startup.js.map +1 -1
  135. package/dist/audiences/consent.d.ts +13 -0
  136. package/dist/audiences/consent.d.ts.map +1 -1
  137. package/dist/audiences/consent.js +13 -0
  138. package/dist/audiences/consent.js.map +1 -1
  139. package/dist/audiences/cookies.d.ts +21 -0
  140. package/dist/audiences/cookies.d.ts.map +1 -1
  141. package/dist/audiences/cookies.js +26 -0
  142. package/dist/audiences/cookies.js.map +1 -1
  143. package/dist/audiences/engine.d.ts.map +1 -1
  144. package/dist/audiences/engine.js +1 -0
  145. package/dist/audiences/engine.js.map +1 -1
  146. package/dist/audiences/entry-page.d.ts +89 -0
  147. package/dist/audiences/entry-page.d.ts.map +1 -0
  148. package/dist/audiences/entry-page.js +116 -0
  149. package/dist/audiences/entry-page.js.map +1 -0
  150. package/dist/audiences/evaluator/instant-match.d.ts.map +1 -1
  151. package/dist/audiences/evaluator/instant-match.js +7 -0
  152. package/dist/audiences/evaluator/instant-match.js.map +1 -1
  153. package/dist/audiences/index.d.ts +3 -2
  154. package/dist/audiences/index.d.ts.map +1 -1
  155. package/dist/audiences/index.js +6 -2
  156. package/dist/audiences/index.js.map +1 -1
  157. package/dist/audiences/queries.d.ts +16 -0
  158. package/dist/audiences/queries.d.ts.map +1 -1
  159. package/dist/audiences/queries.js +28 -1
  160. package/dist/audiences/queries.js.map +1 -1
  161. package/dist/audiences/schema.d.ts +17 -0
  162. package/dist/audiences/schema.d.ts.map +1 -1
  163. package/dist/audiences/schema.js +7 -0
  164. package/dist/audiences/schema.js.map +1 -1
  165. package/dist/audiences/server-eval.d.ts +19 -0
  166. package/dist/audiences/server-eval.d.ts.map +1 -1
  167. package/dist/audiences/server-eval.js +17 -1
  168. package/dist/audiences/server-eval.js.map +1 -1
  169. package/dist/audiences/types.d.ts +22 -1
  170. package/dist/audiences/types.d.ts.map +1 -1
  171. package/dist/audiences/types.js +1 -0
  172. package/dist/audiences/types.js.map +1 -1
  173. package/dist/ax/content-source.d.ts +10 -2
  174. package/dist/ax/content-source.d.ts.map +1 -1
  175. package/dist/ax/content-source.js +81 -5
  176. package/dist/ax/content-source.js.map +1 -1
  177. package/dist/ax/effective-body.d.ts +28 -0
  178. package/dist/ax/effective-body.d.ts.map +1 -0
  179. package/dist/ax/effective-body.js +47 -0
  180. package/dist/ax/effective-body.js.map +1 -0
  181. package/dist/ax/index.d.ts +3 -1
  182. package/dist/ax/index.d.ts.map +1 -1
  183. package/dist/ax/index.js +2 -0
  184. package/dist/ax/index.js.map +1 -1
  185. package/dist/ax/jsonld.d.ts +31 -1
  186. package/dist/ax/jsonld.d.ts.map +1 -1
  187. package/dist/ax/jsonld.js +35 -22
  188. package/dist/ax/jsonld.js.map +1 -1
  189. package/dist/ax/layout-to-html.d.ts +127 -0
  190. package/dist/ax/layout-to-html.d.ts.map +1 -0
  191. package/dist/ax/layout-to-html.js +545 -0
  192. package/dist/ax/layout-to-html.js.map +1 -0
  193. package/dist/ax/llms-full-txt.d.ts +3 -1
  194. package/dist/ax/llms-full-txt.d.ts.map +1 -1
  195. package/dist/ax/llms-full-txt.js +5 -2
  196. package/dist/ax/llms-full-txt.js.map +1 -1
  197. package/dist/ax/page-markdown.d.ts +10 -2
  198. package/dist/ax/page-markdown.d.ts.map +1 -1
  199. package/dist/ax/page-markdown.js +16 -3
  200. package/dist/ax/page-markdown.js.map +1 -1
  201. package/dist/ax/summary.d.ts +4 -0
  202. package/dist/ax/summary.d.ts.map +1 -1
  203. package/dist/ax/summary.js +6 -1
  204. package/dist/ax/summary.js.map +1 -1
  205. package/dist/ax/types.d.ts +24 -0
  206. package/dist/ax/types.d.ts.map +1 -1
  207. package/dist/cache/content-invalidation.d.ts.map +1 -1
  208. package/dist/cache/content-invalidation.js +11 -0
  209. package/dist/cache/content-invalidation.js.map +1 -1
  210. package/dist/config/types.d.ts +16 -0
  211. package/dist/config/types.d.ts.map +1 -1
  212. package/dist/config/types.js.map +1 -1
  213. package/dist/db/apply-snapshot.d.ts +7 -0
  214. package/dist/db/apply-snapshot.d.ts.map +1 -1
  215. package/dist/db/apply-snapshot.js +7 -0
  216. package/dist/db/apply-snapshot.js.map +1 -1
  217. package/dist/db/ax-queries.d.ts +6 -0
  218. package/dist/db/ax-queries.d.ts.map +1 -1
  219. package/dist/db/ax-queries.js +6 -0
  220. package/dist/db/ax-queries.js.map +1 -1
  221. package/dist/db/content-queries.d.ts.map +1 -1
  222. package/dist/db/content-queries.js +8 -0
  223. package/dist/db/content-queries.js.map +1 -1
  224. package/dist/db/layout-queries.d.ts +19 -2
  225. package/dist/db/layout-queries.d.ts.map +1 -1
  226. package/dist/db/layout-queries.js +11 -3
  227. package/dist/db/layout-queries.js.map +1 -1
  228. package/dist/db/search-queries.d.ts.map +1 -1
  229. package/dist/db/search-queries.js +24 -1
  230. package/dist/db/search-queries.js.map +1 -1
  231. package/dist/hooks/ax-invalidation.d.ts.map +1 -1
  232. package/dist/hooks/ax-invalidation.js +4 -0
  233. package/dist/hooks/ax-invalidation.js.map +1 -1
  234. package/dist/layout/index.d.ts +3 -1
  235. package/dist/layout/index.d.ts.map +1 -1
  236. package/dist/layout/index.js +3 -1
  237. package/dist/layout/index.js.map +1 -1
  238. package/dist/layout/module-permissions.d.ts.map +1 -1
  239. package/dist/layout/module-permissions.js +2 -38
  240. package/dist/layout/module-permissions.js.map +1 -1
  241. package/dist/layout/seed-defaults.d.ts +45 -0
  242. package/dist/layout/seed-defaults.d.ts.map +1 -0
  243. package/dist/layout/seed-defaults.js +75 -0
  244. package/dist/layout/seed-defaults.js.map +1 -0
  245. package/dist/layout/walk.d.ts +14 -0
  246. package/dist/layout/walk.d.ts.map +1 -0
  247. package/dist/layout/walk.js +49 -0
  248. package/dist/layout/walk.js.map +1 -0
  249. package/dist/media/index.d.ts +1 -1
  250. package/dist/media/index.d.ts.map +1 -1
  251. package/dist/media/index.js +1 -1
  252. package/dist/media/index.js.map +1 -1
  253. package/dist/media/upload-allowlist.d.ts +23 -0
  254. package/dist/media/upload-allowlist.d.ts.map +1 -1
  255. package/dist/media/upload-allowlist.js +29 -0
  256. package/dist/media/upload-allowlist.js.map +1 -1
  257. package/dist/schema/mysql-tables.d.ts +17 -0
  258. package/dist/schema/mysql-tables.d.ts.map +1 -1
  259. package/dist/schema/mysql-tables.js +2 -0
  260. package/dist/schema/mysql-tables.js.map +1 -1
  261. package/dist/scope/jsonld.d.ts +18 -3
  262. package/dist/scope/jsonld.d.ts.map +1 -1
  263. package/dist/scope/jsonld.js +6 -4
  264. package/dist/scope/jsonld.js.map +1 -1
  265. package/package.json +6 -1
@@ -1,45 +1,328 @@
1
- import { jsonOk, jsonError, unauthorized, forbidden } from './response.js';
2
- import { getAudienceById, upsertAdapterIdentity, deleteAdapterIdentity } from '../audiences/queries.js';
1
+ import { jsonOk, listOk, jsonError, unauthorized, forbidden } from './response.js';
2
+ import { getAudienceById, getActiveAudiences, listPublicAudiences, listSelfIdFields, upsertAdapterIdentity, deleteAdapterIdentity, } from '../audiences/queries.js';
3
3
  import { verifyHmacSignature } from '../audiences/hmac.js';
4
+ import { verifyCsrfToken } from '../forms/csrf.js';
4
5
  import { COOKIE_NAMES, COOKIE_MAX_AGE, buildSetCookieHeader } from '../audiences/cookies.js';
5
6
  import { cookieAllowedByHeader } from '../audiences/consent.js';
6
7
  import { buildAudiencePinValue } from '../audiences/collectors/pinned-audience.js';
8
+ import { runServerCollectors } from '../audiences/collectors/index.js';
9
+ import { resolveAudiences } from '../audiences/evaluator/resolver.js';
10
+ import { createEmptySignals } from '../audiences/types.js';
7
11
  /**
8
- * True unless the request carries an `Origin` from a different site. This route
9
- * is unauthenticated and now visitor-facing (the transparency panel's audience
10
- * switcher, #105), so a third-party page must not be able to pin a visitor's
11
- * audience from a cross-origin fetch. A missing `Origin` is allowed: browsers
12
- * omit it on same-origin GET-style navigations and on some same-site requests,
13
- * and non-browser clients never send it.
12
+ * Is `candidate` the same site as the request being served?
13
+ *
14
+ * Exact origin match first. Behind a proxy the request URL's authority can
15
+ * differ from what the browser saw, so the forwarded `Host` is a fallback — but
16
+ * only within the same scheme when the request is https, or an `http://` origin
17
+ * would be trusted on an https endpoint (a downgrade an active attacker can
18
+ * arrange).
14
19
  */
15
- function isSameOrigin(req) {
16
- const origin = req.headers.get('origin');
17
- if (!origin)
20
+ function isSameSiteUrl(candidate, req, requestUrl) {
21
+ if (candidate.origin === requestUrl.origin)
18
22
  return true;
19
- let originUrl;
23
+ const host = req.headers.get('host');
24
+ if (host === null || candidate.host !== host)
25
+ return false;
26
+ return requestUrl.protocol !== 'https:' || candidate.protocol === 'https:';
27
+ }
28
+ /**
29
+ * May this unauthenticated WRITE be trusted as coming from this site's own page?
30
+ *
31
+ * These routes are visitor-facing and cookie-authenticated by construction (the
32
+ * visitor IS the credential), and the self-ID form path posts
33
+ * `application/x-www-form-urlencoded` — a "simple request" that needs no
34
+ * preflight. So any page on the internet can submit it with the visitor's
35
+ * cookies attached, and the ONLY thing standing in the way is what the browser
36
+ * says about where the request came from.
37
+ *
38
+ * That is why a MISSING `Origin` is no longer treated as same-origin (it was,
39
+ * and it made the check decorative for exactly the request shape that needed
40
+ * it). A write must present positive evidence, in order:
41
+ *
42
+ * 1. `Origin` — must match. Present-but-different is a rejection, never a
43
+ * fall-through, and the opaque `null` origin a sandboxed iframe sends
44
+ * matches nothing.
45
+ * 2. `Sec-Fetch-Site` — `same-origin` / `same-site`, or `none` for a
46
+ * user-initiated navigation. Sent by every current browser.
47
+ * 3. A same-origin `Referer`.
48
+ *
49
+ * Nothing at all is a 403. Non-browser clients (curl, a server-side script)
50
+ * therefore have to say where they are posting from — which is the point: they
51
+ * are indistinguishable from a forged submit otherwise.
52
+ */
53
+ function isTrustedWrite(req) {
54
+ const requestUrl = new URL(req.url);
55
+ const origin = req.headers.get('origin');
56
+ if (origin !== null) {
57
+ if (origin === 'null')
58
+ return false;
59
+ let originUrl;
60
+ try {
61
+ originUrl = new URL(origin);
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ return isSameSiteUrl(originUrl, req, requestUrl);
67
+ }
68
+ const fetchSite = req.headers.get('sec-fetch-site');
69
+ if (fetchSite !== null) {
70
+ return fetchSite === 'same-origin' || fetchSite === 'same-site' || fetchSite === 'none';
71
+ }
72
+ return refererPage(req) !== null;
73
+ }
74
+ /**
75
+ * Double-submit CSRF, for a site that issues one.
76
+ *
77
+ * `@kywi-software/js` already sends `X-CSRF-Token` (from the
78
+ * `meta[name="kywi:csrf-token"]` a host may render) on every runtime write, and
79
+ * until now nothing read it. It is honoured here rather than dropped from the
80
+ * client: when the request carries a `kywi_csrf` cookie — i.e. the site has
81
+ * wired token issuance — a matching token is REQUIRED, header or `_csrf` form
82
+ * field. A site that issues no such cookie is exactly where it was, protected
83
+ * by the origin evidence above.
84
+ *
85
+ * Comparison is `verifyCsrfToken`'s constant-time one, shared with the form
86
+ * routes so there is a single notion of "matching token" in the codebase.
87
+ */
88
+ function csrfRejected(req, formToken) {
89
+ const cookieToken = req.headers.get('cookie')?.match(/(?:^|;\s*)kywi_csrf=([^;]*)/)?.[1] ?? '';
90
+ if (!cookieToken)
91
+ return false;
92
+ const submitted = req.headers.get('x-csrf-token') ?? formToken ?? '';
93
+ return !verifyCsrfToken(decodeURIComponent(cookieToken), submitted);
94
+ }
95
+ /**
96
+ * The page the visitor was on when they submitted, from the `Referer` — or null
97
+ * when there is none, it will not parse, or it belongs to somebody else.
98
+ */
99
+ function refererPage(req) {
100
+ const referer = req.headers.get('referer');
101
+ if (!referer)
102
+ return null;
20
103
  try {
21
- originUrl = new URL(origin);
104
+ const parsed = new URL(referer);
105
+ const sameOrigin = parsed.origin === new URL(req.url).origin || parsed.host === req.headers.get('host');
106
+ return sameOrigin ? parsed : null;
22
107
  }
23
108
  catch {
24
- return false;
109
+ return null;
25
110
  }
26
- const requestUrl = new URL(req.url);
27
- if (originUrl.origin === requestUrl.origin)
28
- return true;
29
- // Behind a proxy the request URL's authority can differ from what the browser
30
- // saw, so fall back to the forwarded Host header.
31
- const host = req.headers.get('host');
32
- return host !== null && originUrl.host === host;
111
+ }
112
+ /**
113
+ * Merge the self-ID answers a submit carries into the signals of the PAGE the
114
+ * visitor is on.
115
+ *
116
+ * The page matters: this route's own URL is `/api/v1/kywi/self-id`, so
117
+ * collecting signals off it would make `session.entryPage` the API path and
118
+ * `query.*` empty, and every rule combining a role with a campaign link would
119
+ * stop matching at the moment the visitor answers. The `Referer` is the page —
120
+ * accepted only when it is same-origin, and falling back to this request's URL
121
+ * when it is missing or foreign.
122
+ */
123
+ function pageSignals(req, fields, gate) {
124
+ const pageRequest = new Request(refererPage(req)?.href ?? req.url, { headers: req.headers });
125
+ const collected = runServerCollectors(pageRequest, gate);
126
+ const base = createEmptySignals();
127
+ return {
128
+ ...base,
129
+ ...collected,
130
+ // The submitted answers REPLACE any stored ones: this is the visitor telling
131
+ // us who they are now, not adding to a history.
132
+ selfId: fields,
133
+ };
134
+ }
135
+ /**
136
+ * Only same-origin, root-relative paths — never an open redirect.
137
+ *
138
+ * Three ways a "clearly relative" string is not:
139
+ *
140
+ * `//evil.example` protocol-relative.
141
+ * `/\evil.example` browsers normalise a backslash to a slash, so this is
142
+ * the same bypass wearing a hat.
143
+ * `/\t/evil.example` the URL parser STRIPS tab, CR and LF from ANYWHERE in a
144
+ * URL, so a shape check that runs before they are removed
145
+ * reads a different string than the browser will. `\n`
146
+ * additionally throws out of `Headers.set`, which would
147
+ * turn an anonymous POST into a 500.
148
+ *
149
+ * The whitespace test therefore runs FIRST, on the raw value, before any shape
150
+ * check can be fooled by characters that are about to disappear.
151
+ */
152
+ function safeReturnTo(raw, req) {
153
+ const value = typeof raw === 'string' ? raw.trim() : '';
154
+ if (/[\t\r\n]/.test(value))
155
+ return refererFallback(req);
156
+ if (/^\/[^/\\]/.test(value) || value === '/')
157
+ return value;
158
+ return refererFallback(req);
159
+ }
160
+ /** Where to send a visitor whose `returnTo` we refused: their own last page. */
161
+ function refererFallback(req) {
162
+ const page = refererPage(req);
163
+ return page ? `${page.pathname}${page.search}` : '/';
164
+ }
165
+ /**
166
+ * Cookie-size cap on the serialized answers, and the field-count / length caps
167
+ * that keep one submit from spending the whole budget on a single key.
168
+ *
169
+ * The answers live in a cookie, and a cookie the visitor's browser refuses to
170
+ * send back is worse than no answer at all: it would silently stop every later
171
+ * request resolving self-ID. So an oversized submit is REFUSED (413) rather
172
+ * than written and quietly ignored forever after.
173
+ *
174
+ * The measurement is of the ENCODED value, not the raw JSON — `buildSetCookieHeader`
175
+ * percent-encodes what it writes, and `{"role":"marketer"}` roughly doubles in
176
+ * the process, so measuring the JSON bytes would let through a cookie twice the
177
+ * size we thought we allowed.
178
+ */
179
+ const SELFID_MAX_BYTES = 2048;
180
+ const SELFID_MAX_FIELDS = 16;
181
+ const SELFID_MAX_KEY = 64;
182
+ const SELFID_MAX_VALUE = 256;
183
+ /**
184
+ * Read a self-ID submit off the request, from JSON or a plain HTML form.
185
+ *
186
+ * Form bodies are flat (`role=marketer&returnTo=/developers`), so every key
187
+ * except the three reserved ones (`returnTo`, `_csrf`, `audienceId`) is an
188
+ * answer — that is what lets the no-JS `<form>` post straight here with no
189
+ * wrapper. Values that arrive empty are DROPPED rather than stored blank, so
190
+ * `role=''` means "forget my role", which is exactly what a "Change" control
191
+ * submits.
192
+ */
193
+ async function readSelfIdSubmit(req) {
194
+ // Refuse before reading the body at all. Buffering a multi-megabyte form only
195
+ // to reject it afterwards is work an unauthenticated caller should not be
196
+ // able to make the server do. The bound is generous (percent-encoding and
197
+ // form syntax both inflate the wire form) — it is a bomb guard, not the real
198
+ // limit, which is applied to the parsed answers below.
199
+ const declared = Number(req.headers.get('content-length') ?? '0');
200
+ if (Number.isFinite(declared) && declared > SELFID_MAX_BYTES * 4) {
201
+ return { ok: false, reason: 'too_large' };
202
+ }
203
+ const contentType = req.headers.get('content-type') ?? '';
204
+ const isForm = contentType.includes('application/x-www-form-urlencoded') ||
205
+ contentType.includes('multipart/form-data');
206
+ const fields = {};
207
+ let audienceId = null;
208
+ if (isForm) {
209
+ let form;
210
+ try {
211
+ form = await req.formData();
212
+ }
213
+ catch {
214
+ return { ok: false, reason: 'invalid' };
215
+ }
216
+ let oversized = false;
217
+ // `forEach` rather than a for-of: the package's lib set is ES2022 + DOM
218
+ // without DOM.Iterable, so FormData is not typed as iterable here.
219
+ form.forEach((value, key) => {
220
+ if (typeof value !== 'string')
221
+ return;
222
+ if (key === 'returnTo' || key === '_csrf')
223
+ return;
224
+ if (key === 'audienceId') {
225
+ audienceId = value.trim() || null;
226
+ return;
227
+ }
228
+ const trimmed = value.trim();
229
+ if (trimmed === '')
230
+ return;
231
+ if (key.length > SELFID_MAX_KEY || trimmed.length > SELFID_MAX_VALUE) {
232
+ oversized = true;
233
+ return;
234
+ }
235
+ fields[key] = trimmed;
236
+ });
237
+ if (oversized || Object.keys(fields).length > SELFID_MAX_FIELDS) {
238
+ return { ok: false, reason: 'too_large' };
239
+ }
240
+ const formCsrf = form.get('_csrf');
241
+ return {
242
+ ok: true,
243
+ submit: {
244
+ fields,
245
+ audienceId,
246
+ isForm,
247
+ returnTo: safeReturnTo(form.get('returnTo'), req),
248
+ formCsrfToken: typeof formCsrf === 'string' ? formCsrf : undefined,
249
+ },
250
+ };
251
+ }
252
+ let body;
253
+ try {
254
+ body = await req.json();
255
+ }
256
+ catch {
257
+ return { ok: false, reason: 'invalid' };
258
+ }
259
+ if (typeof body !== 'object' || body === null)
260
+ return { ok: false, reason: 'invalid' };
261
+ const raw = body.fields;
262
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
263
+ return { ok: false, reason: 'invalid' };
264
+ const rawAudienceId = body.audienceId;
265
+ if (rawAudienceId !== undefined && typeof rawAudienceId !== 'string')
266
+ return { ok: false, reason: 'invalid' };
267
+ audienceId = typeof rawAudienceId === 'string' ? rawAudienceId.trim() || null : null;
268
+ for (const [key, value] of Object.entries(raw)) {
269
+ if (typeof value !== 'string')
270
+ return { ok: false, reason: 'invalid' };
271
+ const trimmed = value.trim();
272
+ if (trimmed === '')
273
+ continue;
274
+ if (key.length > SELFID_MAX_KEY || trimmed.length > SELFID_MAX_VALUE) {
275
+ return { ok: false, reason: 'too_large' };
276
+ }
277
+ fields[key] = trimmed;
278
+ }
279
+ if (Object.keys(fields).length > SELFID_MAX_FIELDS)
280
+ return { ok: false, reason: 'too_large' };
281
+ return { ok: true, submit: { fields, audienceId, isForm, returnTo: '/', formCsrfToken: undefined } };
282
+ }
283
+ /** Would these answers make a cookie the browser will refuse to carry? */
284
+ function tooLargeForCookie(fields) {
285
+ return encodeURIComponent(JSON.stringify(fields)).length > SELFID_MAX_BYTES;
286
+ }
287
+ /**
288
+ * Keep only the answers the site actually asked for.
289
+ *
290
+ * The self-ID fields an editor configured (`kywi_selfid_fields`) ARE the
291
+ * vocabulary of this endpoint: a page can only meaningfully submit what an
292
+ * audience rule can read back. Anything else is dropped rather than stored, so
293
+ * a stray hidden input — or a forged submit that got past the origin checks —
294
+ * cannot fill a visitor's cookie with keys nobody will ever match on.
295
+ *
296
+ * A site with no self-ID fields configured therefore stores no answers. That is
297
+ * the honest behaviour and it is visible: the response echoes the `fields` that
298
+ * survived, so a page submitting into a site that never declared the field sees
299
+ * an empty bag rather than silently accumulating dead data. Configure the field
300
+ * in Audiences → Self-ID Fields first.
301
+ */
302
+ function allowedFields(fields, declared) {
303
+ const out = {};
304
+ for (const [key, value] of Object.entries(fields)) {
305
+ if (declared.has(key))
306
+ out[key] = value;
307
+ }
308
+ return out;
309
+ }
310
+ /** Append `?selfid=error` to a same-origin return path (no-JS error signal). */
311
+ function withErrorFlag(returnTo) {
312
+ return `${returnTo}${returnTo.includes('?') ? '&' : '?'}selfid=error`;
33
313
  }
34
314
  export function registerAudienceRuntimeRoutes(router, ctx) {
35
315
  const { db, webhookSecret } = ctx;
316
+ const defaultSiteId = ctx.defaultSiteId ?? '';
36
317
  // Built conditionally: under `exactOptionalPropertyTypes` an explicit
37
318
  // `undefined` is not the same as an absent key.
38
319
  const gate = ctx.requireConsent === undefined ? {} : { requireConsent: ctx.requireConsent };
39
320
  // POST /kywi/audience — update kywi_audience cookie
40
321
  router.post('/kywi/audience', async (req) => {
41
- if (!isSameOrigin(req))
322
+ if (!isTrustedWrite(req))
42
323
  return forbidden('Cross-origin request rejected');
324
+ if (csrfRejected(req))
325
+ return forbidden('CSRF token missing or invalid');
43
326
  const body = await req.json();
44
327
  if (!body.audienceId)
45
328
  return jsonError('VALIDATION_ERROR', 'audienceId required', 400);
@@ -66,7 +349,7 @@ export function registerAudienceRuntimeRoutes(router, ctx) {
66
349
  // would make the panel lie about what its buttons do.
67
350
  //
68
351
  // `source` is client-supplied, but this route is same-origin-hardened
69
- // (isSameOrigin above), so only this site's own page can assert it — the
352
+ // (isTrustedWrite above), so only this site's own page can assert it — the
70
353
  // same trust model the client-supplied `audienceId` already relies on.
71
354
  //
72
355
  // Either way the pin is accepted and echoed back so the caller can act on it
@@ -85,6 +368,174 @@ export function registerAudienceRuntimeRoutes(router, ctx) {
85
368
  status: 200, headers,
86
369
  });
87
370
  });
371
+ // POST /kywi/self-id — record the visitor's self-identification
372
+ //
373
+ // The public half of self-ID (kywi-cms#200). Before this, a site that wanted
374
+ // its own "What brings you here?" control instead of the built-in hello-bar
375
+ // widget had nothing to call: the runtime's `storeSelfId` is module-private,
376
+ // `POST /kywi/audience` needs an audience UUID a public page cannot discover,
377
+ // and `GET /audiences` is admin-only. Sites wrote their own route; this is
378
+ // that route, made first-class.
379
+ //
380
+ // What it does, in order:
381
+ // 1. Store the answers in `kywi_selfid` so the SERVER can resolve
382
+ // `selfId.*` rules on later renders — gated on personalization consent,
383
+ // because a stored attribute bag is exactly the tracking the gate governs.
384
+ // 2. Re-resolve the site's active audiences with those answers merged into
385
+ // the signals of the page the visitor is on.
386
+ // 3. Pin the winner as a `switcher:` pin — an ESSENTIAL preference, stored
387
+ // whatever the consent decision, on the same argument as the transparency
388
+ // panel's switcher and `kywi_optout`: a control the visitor operated by
389
+ // hand must be honoured or the buttons lie about what they do.
390
+ //
391
+ // Step 3 is the one that makes the feature work at all. Since kywi-cms#167
392
+ // every variant arm is chosen AND PRUNED on the server, so the arms the
393
+ // visitor did not get are not in the DOM for any client-side re-evaluation to
394
+ // swap to. Only a fresh server render can show them, and the only thing that
395
+ // render reads is the pin.
396
+ //
397
+ // Deliberately NOT resolved through `createAudienceEngine`: the engine prefers
398
+ // an existing pin over the signal-derived winner, which is right for a page
399
+ // render and wrong here — the visitor is REPLACING their earlier answer, so
400
+ // the new signals must win.
401
+ router.post('/kywi/self-id', async (req) => {
402
+ if (!isTrustedWrite(req))
403
+ return forbidden('Cross-origin request rejected');
404
+ const read = await readSelfIdSubmit(req);
405
+ if (!read.ok) {
406
+ // Answered as JSON even for a form post: the body could not be read, so
407
+ // there is no `returnTo` to redirect back to. Errors raised AFTER the
408
+ // parse do bounce the form back with `?selfid=error`.
409
+ //
410
+ // 413 vs 400 is a real distinction for the caller: "what you sent is too
411
+ // big" is fixed by sending less, "that was not a self-ID submit" by
412
+ // sending something else.
413
+ return read.reason === 'too_large'
414
+ ? jsonError('PAYLOAD_TOO_LARGE', 'Self-ID answers are too large to store', 413)
415
+ : jsonError('VALIDATION_ERROR', 'fields object required', 400);
416
+ }
417
+ const { audienceId, isForm, returnTo, formCsrfToken } = read.submit;
418
+ // A security refusal, not a user error: it is answered the same way for
419
+ // both shapes rather than bounced back to the page, because nothing the
420
+ // visitor can do on that page fixes it and a forged submit deserves no
421
+ // redirect.
422
+ if (csrfRejected(req, formCsrfToken))
423
+ return forbidden('CSRF token missing or invalid');
424
+ const cookieHeader = req.headers.get('cookie');
425
+ const secure = new URL(req.url).protocol === 'https:';
426
+ // Only answers the site declared as self-ID fields are stored — see
427
+ // `allowedFields`. Loaded once per request and reused for the evaluation,
428
+ // so the signals and the cookie can never disagree about what was accepted.
429
+ const declared = await listSelfIdFields(db, defaultSiteId);
430
+ const fields = allowedFields(read.submit.fields, new Set(declared.map((f) => f.id)));
431
+ if (tooLargeForCookie(fields)) {
432
+ return isForm
433
+ ? new Response(null, { status: 303, headers: { Location: withErrorFlag(returnTo) } })
434
+ : jsonError('PAYLOAD_TOO_LARGE', 'Self-ID answers are too large to store', 413);
435
+ }
436
+ const signals = pageSignals(req, fields, gate);
437
+ // Opt-out beats a pin in the engine, so pinning a visitor who turned
438
+ // personalization off would write a cookie every render is under orders to
439
+ // ignore. Answer honestly instead of pretending it took.
440
+ const optedOut = signals.meta.isOptedOut;
441
+ // An explicit `audienceId` names one of the site's PUBLIC audiences — the
442
+ // ones `GET /kywi/audiences` lists — so a chooser rendered from that list
443
+ // can pin exactly what the visitor picked, without the site having to
444
+ // author a rule per option (kywi-cms#200). Validated against the same
445
+ // site-scoped list the listing route serves, so it can neither reach a
446
+ // private audience nor another site's.
447
+ let winner = null;
448
+ if (audienceId !== null) {
449
+ const offered = await listPublicAudiences(db, defaultSiteId);
450
+ const picked = offered.find((a) => a.id === audienceId);
451
+ if (!picked) {
452
+ return isForm
453
+ ? new Response(null, { status: 303, headers: { Location: withErrorFlag(returnTo) } })
454
+ : jsonError('INVALID_AUDIENCE', 'Audience not found, not active, or not public', 400);
455
+ }
456
+ if (!optedOut)
457
+ winner = { id: picked.id, name: picked.name };
458
+ }
459
+ else if (Object.keys(fields).length > 0 && !optedOut) {
460
+ const audiences = await getActiveAudiences(db, defaultSiteId);
461
+ const { winningAudienceId } = resolveAudiences(audiences, signals);
462
+ const match = winningAudienceId ? audiences.find((a) => a.id === winningAudienceId) : undefined;
463
+ winner = match ? { id: match.id, name: match.name } : null;
464
+ }
465
+ const headers = new Headers({ 'Content-Type': 'application/json' });
466
+ // The answers themselves: stored for a consenting visitor, cleared when the
467
+ // submit is empty ("forget what I told you"), otherwise left alone.
468
+ // Not HttpOnly, deliberately and for the same reason `kywi_audience` is not:
469
+ // `clearDeniedCookies` runs in the browser, and a Reject that cannot delete
470
+ // this cookie would be a revocation that does not revoke.
471
+ const mayStore = cookieAllowedByHeader(COOKIE_NAMES.SELFID, cookieHeader, gate);
472
+ const persisted = mayStore && Object.keys(fields).length > 0;
473
+ if (persisted) {
474
+ headers.append('Set-Cookie', buildSetCookieHeader(COOKIE_NAMES.SELFID, JSON.stringify(fields), COOKIE_MAX_AGE.SELFID, { httpOnly: false, secure }));
475
+ }
476
+ else if (Object.keys(fields).length === 0) {
477
+ headers.append('Set-Cookie', buildSetCookieHeader(COOKIE_NAMES.SELFID, '', 0, { httpOnly: false, secure }));
478
+ }
479
+ // The pin. A submit that resolves to nothing CLEARS it rather than leaving
480
+ // the visitor pinned to the answer they just replaced.
481
+ //
482
+ // Its LIFETIME depends on consent (owner ruling). The click is honoured
483
+ // either way — it is a preference the visitor operated by hand, so it is
484
+ // never withheld — but for a visitor who has not consented to
485
+ // personalization it is a SESSION cookie: it changes the pages they are
486
+ // reading right now and is forgotten when they close the browser, rather
487
+ // than becoming a 30-day record of a segment they never agreed to be filed
488
+ // under. Consent turns the same pin into the durable one.
489
+ if (!optedOut) {
490
+ const pinLifetime = mayStore ? COOKIE_MAX_AGE.AUDIENCE : COOKIE_MAX_AGE.SESSION;
491
+ headers.append('Set-Cookie', winner
492
+ ? buildSetCookieHeader(COOKIE_NAMES.AUDIENCE, buildAudiencePinValue(winner.id, true), pinLifetime, { httpOnly: false, secure })
493
+ : buildSetCookieHeader(COOKIE_NAMES.AUDIENCE, '', 0, { httpOnly: false, secure }));
494
+ }
495
+ if (isForm) {
496
+ // No-JS path: 303 back to the page so the browser re-requests it with the
497
+ // cookies above, and the server renders the arms this visitor now gets.
498
+ headers.set('Location', returnTo);
499
+ return new Response(null, { status: 303, headers });
500
+ }
501
+ return new Response(JSON.stringify({
502
+ data: {
503
+ audience: winner ? { id: winner.id, name: winner.name } : null,
504
+ fields,
505
+ persisted,
506
+ optedOut,
507
+ },
508
+ }), { status: 200, headers });
509
+ });
510
+ // GET /kywi/audiences — the audiences a page may offer BY NAME
511
+ //
512
+ // Public and consent-independent (kywi-cms#200). `GET /api/v1/audiences` is
513
+ // admin-only and returns whole audiences including their condition groups, so
514
+ // a page had no way to discover even the id of the audience it wanted to
515
+ // offer. THIS ENDPOINT PUBLISHES ONLY id/name, for audiences that are active
516
+ // AND flagged `public`, and an audience is not listed until an editor
517
+ // deliberately publishes its name.
518
+ //
519
+ // That is a statement about this endpoint, not a privacy guarantee about
520
+ // audience rules in general: the client runtime is handed the active
521
+ // audiences so it can re-evaluate on client signals, so how a visitor is
522
+ // classified is readable in the page either way (see kywi-cms#167 and
523
+ // AGENT-PATTERNS §8). Author rules accordingly.
524
+ //
525
+ // Consent does not gate it because nothing is stored and nothing about the
526
+ // visitor is read: offering a list of choices is not tracking, and a chooser
527
+ // that disappeared for a visitor who rejected cookies would be the worse
528
+ // outcome. It answers for ONE site — the configured one — so it cannot be
529
+ // used to enumerate another site's audiences.
530
+ router.get('/kywi/audiences', async () => {
531
+ const audiences = await listPublicAudiences(db, defaultSiteId);
532
+ // `label` is what to SHOW a visitor and `name` is what identifies the
533
+ // audience. They are the same string today; the field exists so a page's
534
+ // markup does not have to change when a separate visitor-facing label
535
+ // arrives. The description is deliberately not used: it is an editor's
536
+ // internal note and often describes the targeting.
537
+ return listOk(audiences.map((a) => ({ id: a.id, name: a.name, label: a.name })));
538
+ });
88
539
  // POST /kywi/identity/:visitorId — push adapter identity
89
540
  router.post('/kywi/identity/:visitorId', async (req, params) => {
90
541
  const bodyText = await req.text();
@@ -1 +1 @@
1
- {"version":3,"file":"audience-runtime-routes.js","sourceRoot":"","sources":["../../src/api/audience-runtime-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audience-runtime-routes.js","sourceRoot":"","sources":["../../src/api/audience-runtime-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ax-routes.d.ts","sourceRoot":"","sources":["../../src/api/ax-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,gBAAgB,CAAA;AAYtE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,iBAAiB,CAAA;IAChC,aAAa,EAAE,eAAe,CAAA;IAC9B,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACnC;AAID;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAoH1E"}
1
+ {"version":3,"file":"ax-routes.d.ts","sourceRoot":"","sources":["../../src/api/ax-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,gBAAgB,CAAA;AAYtE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,iBAAiB,CAAA;IAChC,aAAa,EAAE,eAAe,CAAA;IAC9B,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACnC;AAID;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAwH1E"}
@@ -62,9 +62,13 @@ export function registerAxRoutes(router, ctx) {
62
62
  if (!slug)
63
63
  return mdNotFound();
64
64
  const siteId = siteIdFor(req);
65
- const nodes = await contentSource.listForSite(siteId);
66
- const node = nodes.find((n) => n.slug === slug && n.excludeFromSearch !== true);
67
- if (!node)
65
+ // Prefer the per-node read: `listForSite` projects EVERY page's layout, and
66
+ // this route is uncached (kywi-cms#195). Sources that predate `getForSite`
67
+ // still work through the list path.
68
+ const node = contentSource.getForSite
69
+ ? await contentSource.getForSite(siteId, slug)
70
+ : (await contentSource.listForSite(siteId)).find((n) => n.slug === slug) ?? null;
71
+ if (!node || node.excludeFromSearch === true)
68
72
  return mdNotFound();
69
73
  const renderCtx = await buildRenderCtx(req, siteId);
70
74
  const md = generatePageMarkdown(node, renderCtx);
@@ -1 +1 @@
1
- {"version":3,"file":"ax-routes.js","sourceRoot":"","sources":["../../src/api/ax-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ax-routes.js","sourceRoot":"","sources":["../../src/api/ax-routes.ts"],"names":[],"mappings":"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"}