tapimo 0.2.0 → 0.3.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 (313) hide show
  1. package/README.md +31 -3
  2. package/dist/ApiKey.d.ts +1 -0
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +5 -2
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +28 -1
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +34 -1
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +7167 -4507
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +8 -0
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +11 -2
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +14 -3
  17. package/dist/Scope.js.map +1 -1
  18. package/dist/admin/App.d.ts +128 -118
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/apps/api-keys.d.ts +7 -0
  21. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  22. package/dist/admin/apps/scopes.d.ts +8 -0
  23. package/dist/admin/apps/scopes.d.ts.map +1 -1
  24. package/dist/admin/apps/scopes.js +3 -0
  25. package/dist/admin/apps/scopes.js.map +1 -1
  26. package/dist/admin/apps/verified-tokens.d.ts +57 -57
  27. package/dist/admin/ui.generated.d.ts +1 -1
  28. package/dist/admin/ui.generated.js +13 -13
  29. package/dist/admin/ui.generated.js.map +1 -1
  30. package/dist/analytics/Analytics.d.ts +151 -0
  31. package/dist/analytics/Analytics.d.ts.map +1 -0
  32. package/dist/analytics/Analytics.js +212 -0
  33. package/dist/analytics/Analytics.js.map +1 -0
  34. package/dist/analytics/tables/requestEvents.d.ts +215 -0
  35. package/dist/analytics/tables/requestEvents.d.ts.map +1 -0
  36. package/dist/analytics/tables/requestEvents.js +264 -0
  37. package/dist/analytics/tables/requestEvents.js.map +1 -0
  38. package/dist/apps/data/App.d.ts +1024 -624
  39. package/dist/apps/data/App.d.ts.map +1 -1
  40. package/dist/apps/data/App.js +36 -0
  41. package/dist/apps/data/App.js.map +1 -1
  42. package/dist/apps/data/routes/balances.d.ts +45 -45
  43. package/dist/apps/data/routes/coingecko.d.ts +176 -176
  44. package/dist/apps/data/routes/exchanges.d.ts +455 -455
  45. package/dist/apps/data/routes/fee-amm.d.ts +101 -101
  46. package/dist/apps/data/routes/funding.d.ts +765 -0
  47. package/dist/apps/data/routes/funding.d.ts.map +1 -0
  48. package/dist/apps/data/routes/funding.js +383 -0
  49. package/dist/apps/data/routes/funding.js.map +1 -0
  50. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  51. package/dist/apps/data/routes/receipts.js +2 -8
  52. package/dist/apps/data/routes/receipts.js.map +1 -1
  53. package/dist/apps/data/routes/rpc.d.ts +29 -36
  54. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  55. package/dist/apps/data/routes/rpc.js +29 -1
  56. package/dist/apps/data/routes/rpc.js.map +1 -1
  57. package/dist/apps/data/routes/tokenlist.d.ts +36 -36
  58. package/dist/apps/data/routes/transfers.d.ts +56 -56
  59. package/dist/apps/data/routes/verified-tokens.d.ts +36 -36
  60. package/dist/apps/data/routes/webhooks.d.ts +45 -45
  61. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  62. package/dist/apps/data/routes/webhooks.js +8 -8
  63. package/dist/apps/data/routes/webhooks.js.map +1 -1
  64. package/dist/apps/docs/App.d.ts +4 -2
  65. package/dist/apps/docs/App.d.ts.map +1 -1
  66. package/dist/apps/docs/App.js +27 -95
  67. package/dist/apps/docs/App.js.map +1 -1
  68. package/dist/apps/docs/reference.d.ts +21 -0
  69. package/dist/apps/docs/reference.d.ts.map +1 -0
  70. package/dist/apps/docs/reference.js +112 -0
  71. package/dist/apps/docs/reference.js.map +1 -0
  72. package/dist/apps/index.d.ts +1 -0
  73. package/dist/apps/index.d.ts.map +1 -1
  74. package/dist/apps/index.js +1 -0
  75. package/dist/apps/index.js.map +1 -1
  76. package/dist/apps/mcp.d.ts +76 -0
  77. package/dist/apps/mcp.d.ts.map +1 -0
  78. package/dist/apps/mcp.js +188 -0
  79. package/dist/apps/mcp.js.map +1 -0
  80. package/dist/apps/platform/App.d.ts +3005 -728
  81. package/dist/apps/platform/App.d.ts.map +1 -1
  82. package/dist/apps/platform/App.js +13 -3
  83. package/dist/apps/platform/App.js.map +1 -1
  84. package/dist/apps/platform/Billing.d.ts +279 -0
  85. package/dist/apps/platform/Billing.d.ts.map +1 -0
  86. package/dist/apps/platform/Billing.js +477 -0
  87. package/dist/apps/platform/Billing.js.map +1 -0
  88. package/dist/apps/platform/index.d.ts +1 -0
  89. package/dist/apps/platform/index.d.ts.map +1 -1
  90. package/dist/apps/platform/index.js +1 -0
  91. package/dist/apps/platform/index.js.map +1 -1
  92. package/dist/apps/platform/routes/api-keys.d.ts +341 -49
  93. package/dist/apps/platform/routes/api-keys.d.ts.map +1 -1
  94. package/dist/apps/platform/routes/api-keys.js +115 -13
  95. package/dist/apps/platform/routes/api-keys.js.map +1 -1
  96. package/dist/apps/platform/routes/billing.d.ts +1520 -0
  97. package/dist/apps/platform/routes/billing.d.ts.map +1 -0
  98. package/dist/apps/platform/routes/billing.js +795 -0
  99. package/dist/apps/platform/routes/billing.js.map +1 -0
  100. package/dist/apps/platform/routes/invitations.d.ts +201 -83
  101. package/dist/apps/platform/routes/invitations.d.ts.map +1 -1
  102. package/dist/apps/platform/routes/invitations.js +58 -0
  103. package/dist/apps/platform/routes/invitations.js.map +1 -1
  104. package/dist/apps/platform/routes/me.d.ts +17 -17
  105. package/dist/apps/platform/routes/orgs.d.ts +50 -36
  106. package/dist/apps/platform/routes/orgs.d.ts.map +1 -1
  107. package/dist/apps/platform/routes/orgs.js +14 -3
  108. package/dist/apps/platform/routes/orgs.js.map +1 -1
  109. package/dist/apps/platform/routes/projects.d.ts +97 -97
  110. package/dist/apps/platform/routes/scopes.d.ts +107 -0
  111. package/dist/apps/platform/routes/scopes.d.ts.map +1 -0
  112. package/dist/apps/platform/routes/scopes.js +66 -0
  113. package/dist/apps/platform/routes/scopes.js.map +1 -0
  114. package/dist/apps/platform/routes/usage.d.ts +588 -0
  115. package/dist/apps/platform/routes/usage.d.ts.map +1 -0
  116. package/dist/apps/platform/routes/usage.js +391 -0
  117. package/dist/apps/platform/routes/usage.js.map +1 -0
  118. package/dist/apps/relay/App.d.ts +4 -1
  119. package/dist/apps/relay/App.d.ts.map +1 -1
  120. package/dist/apps/relay/App.js +118 -10
  121. package/dist/apps/relay/App.js.map +1 -1
  122. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  123. package/dist/apps/relay/Sponsorships.js +2 -1
  124. package/dist/apps/relay/Sponsorships.js.map +1 -1
  125. package/dist/cli/Cli.d.ts +8 -1
  126. package/dist/cli/Cli.d.ts.map +1 -1
  127. package/dist/cli/Cli.js +11 -3
  128. package/dist/cli/Cli.js.map +1 -1
  129. package/dist/cli/commands/admin.d.ts +4 -0
  130. package/dist/cli/commands/admin.d.ts.map +1 -1
  131. package/dist/cli/commands/admin.js +80 -1
  132. package/dist/cli/commands/admin.js.map +1 -1
  133. package/dist/db/Db.d.ts +7 -0
  134. package/dist/db/Db.d.ts.map +1 -1
  135. package/dist/db/Db.js +126 -0
  136. package/dist/db/Db.js.map +1 -1
  137. package/dist/db/Schema.d.ts +79 -0
  138. package/dist/db/Schema.d.ts.map +1 -1
  139. package/dist/db/Schema.js +88 -2
  140. package/dist/db/Schema.js.map +1 -1
  141. package/dist/db/tables/billingSettings.d.ts +55 -0
  142. package/dist/db/tables/billingSettings.d.ts.map +1 -0
  143. package/dist/db/tables/billingSettings.js +70 -0
  144. package/dist/db/tables/billingSettings.js.map +1 -0
  145. package/dist/db/tables/invitations.js +2 -2
  146. package/dist/db/tables/invitations.js.map +1 -1
  147. package/dist/db/tables/organizations.d.ts +6 -2
  148. package/dist/db/tables/organizations.d.ts.map +1 -1
  149. package/dist/db/tables/organizations.js +10 -4
  150. package/dist/db/tables/organizations.js.map +1 -1
  151. package/dist/db/tables/projects.js +2 -2
  152. package/dist/db/tables/projects.js.map +1 -1
  153. package/dist/db/tables/requestUsage.d.ts +121 -0
  154. package/dist/db/tables/requestUsage.d.ts.map +1 -0
  155. package/dist/db/tables/requestUsage.js +150 -0
  156. package/dist/db/tables/requestUsage.js.map +1 -0
  157. package/dist/db/tables/sponsoredTransactions.d.ts +119 -0
  158. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  159. package/dist/db/tables/sponsoredTransactions.js +155 -2
  160. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  161. package/dist/db/tables/stripeCustomers.d.ts +81 -0
  162. package/dist/db/tables/stripeCustomers.d.ts.map +1 -0
  163. package/dist/db/tables/stripeCustomers.js +120 -0
  164. package/dist/db/tables/stripeCustomers.js.map +1 -0
  165. package/dist/db/tables/users.js +2 -2
  166. package/dist/db/tables/users.js.map +1 -1
  167. package/dist/handlers/internal/sponsorship.d.ts +5 -2
  168. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  169. package/dist/handlers/internal/sponsorship.js +19 -5
  170. package/dist/handlers/internal/sponsorship.js.map +1 -1
  171. package/dist/handlers/internal/utils.d.ts +10 -3
  172. package/dist/handlers/internal/utils.d.ts.map +1 -1
  173. package/dist/handlers/internal/utils.js +14 -6
  174. package/dist/handlers/internal/utils.js.map +1 -1
  175. package/dist/index.d.ts +1 -0
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +1 -0
  178. package/dist/index.js.map +1 -1
  179. package/dist/internal/Auth.d.ts +18 -4
  180. package/dist/internal/Auth.d.ts.map +1 -1
  181. package/dist/internal/Auth.js +148 -76
  182. package/dist/internal/Auth.js.map +1 -1
  183. package/dist/internal/Cache.d.ts.map +1 -1
  184. package/dist/internal/Cache.js +4 -1
  185. package/dist/internal/Cache.js.map +1 -1
  186. package/dist/internal/EdgeCache.d.ts +10 -0
  187. package/dist/internal/EdgeCache.d.ts.map +1 -1
  188. package/dist/internal/EdgeCache.js +39 -8
  189. package/dist/internal/EdgeCache.js.map +1 -1
  190. package/dist/internal/Fees.d.ts +27 -0
  191. package/dist/internal/Fees.d.ts.map +1 -0
  192. package/dist/internal/Fees.js +48 -0
  193. package/dist/internal/Fees.js.map +1 -0
  194. package/dist/internal/FundingRoutes.d.ts +183 -0
  195. package/dist/internal/FundingRoutes.d.ts.map +1 -0
  196. package/dist/internal/FundingRoutes.js +490 -0
  197. package/dist/internal/FundingRoutes.js.map +1 -0
  198. package/dist/internal/Id.d.ts +15 -0
  199. package/dist/internal/Id.d.ts.map +1 -0
  200. package/dist/internal/Id.js +22 -0
  201. package/dist/internal/Id.js.map +1 -0
  202. package/dist/internal/Log.d.ts +2 -0
  203. package/dist/internal/Log.d.ts.map +1 -1
  204. package/dist/internal/Log.js +3 -0
  205. package/dist/internal/Log.js.map +1 -1
  206. package/dist/internal/OpenApi.d.ts +10 -1
  207. package/dist/internal/OpenApi.d.ts.map +1 -1
  208. package/dist/internal/OpenApi.js +8 -1
  209. package/dist/internal/OpenApi.js.map +1 -1
  210. package/dist/internal/RateLimit.d.ts +25 -0
  211. package/dist/internal/RateLimit.d.ts.map +1 -1
  212. package/dist/internal/RateLimit.js +51 -0
  213. package/dist/internal/RateLimit.js.map +1 -1
  214. package/dist/internal/Response.d.ts +1 -1
  215. package/dist/internal/Response.d.ts.map +1 -1
  216. package/dist/internal/Schema.d.ts +8 -0
  217. package/dist/internal/Schema.d.ts.map +1 -1
  218. package/dist/internal/Schema.js +7 -0
  219. package/dist/internal/Schema.js.map +1 -1
  220. package/dist/internal/Webhooks.d.ts.map +1 -1
  221. package/dist/internal/Webhooks.js +3 -3
  222. package/dist/internal/Webhooks.js.map +1 -1
  223. package/package.json +4 -3
  224. package/src/ApiKey.ts +9 -2
  225. package/src/ApiKeys.test.ts +51 -0
  226. package/src/ApiKeys.ts +50 -1
  227. package/src/App.test.ts +33 -86718
  228. package/src/App.ts +18 -0
  229. package/src/Client.test-d.ts +351 -0
  230. package/src/Scope.ts +16 -3
  231. package/src/admin/apps/scopes.test.ts +6 -0
  232. package/src/admin/apps/scopes.ts +3 -0
  233. package/src/admin/ui/src/components/Page.tsx +2 -3
  234. package/src/admin/ui/src/routes/__root.tsx +2 -2
  235. package/src/admin/ui/src/routes/api-keys.tsx +2 -2
  236. package/src/admin/ui.generated.ts +13 -13
  237. package/src/analytics/Analytics.test.ts +527 -0
  238. package/src/analytics/Analytics.ts +318 -0
  239. package/src/analytics/tables/requestEvents.ts +523 -0
  240. package/src/apps/data/App.test.ts +72 -0
  241. package/src/apps/data/App.ts +35 -0
  242. package/src/apps/data/routes/funding.test.ts +214 -0
  243. package/src/apps/data/routes/funding.ts +584 -0
  244. package/src/apps/data/routes/receipts.ts +2 -9
  245. package/src/apps/data/routes/rpc.test.ts +78 -2
  246. package/src/apps/data/routes/rpc.ts +31 -1
  247. package/src/apps/data/routes/webhooks.test.ts +1 -1
  248. package/src/apps/data/routes/webhooks.ts +11 -8
  249. package/src/apps/docs/App.ts +29 -100
  250. package/src/apps/docs/reference.ts +132 -0
  251. package/src/apps/index.ts +1 -0
  252. package/src/apps/mcp.test.ts +206 -0
  253. package/src/apps/mcp.ts +250 -0
  254. package/src/apps/platform/App.ts +43 -4
  255. package/src/apps/platform/Billing.test.ts +530 -0
  256. package/src/apps/platform/Billing.ts +682 -0
  257. package/src/apps/platform/index.ts +1 -0
  258. package/src/apps/platform/routes/api-keys.test.ts +172 -9
  259. package/src/apps/platform/routes/api-keys.ts +136 -20
  260. package/src/apps/platform/routes/billing.test.ts +1100 -0
  261. package/src/apps/platform/routes/billing.ts +966 -0
  262. package/src/apps/platform/routes/invitations.test.ts +55 -7
  263. package/src/apps/platform/routes/invitations.ts +68 -0
  264. package/src/apps/platform/routes/me.test.ts +230 -0
  265. package/src/apps/platform/routes/orgs.ts +26 -4
  266. package/src/apps/platform/routes/scopes.test.ts +29 -0
  267. package/src/apps/platform/routes/scopes.ts +85 -0
  268. package/src/apps/platform/routes/usage.test.ts +422 -0
  269. package/src/apps/platform/routes/usage.ts +527 -0
  270. package/src/apps/relay/App.test.ts +457 -8
  271. package/src/apps/relay/App.ts +120 -12
  272. package/src/apps/relay/Sponsorships.test.ts +1 -1
  273. package/src/apps/relay/Sponsorships.ts +2 -1
  274. package/src/cli/Cli.test.ts +25 -2
  275. package/src/cli/Cli.ts +17 -2
  276. package/src/cli/commands/admin.test.ts +83 -0
  277. package/src/cli/commands/admin.ts +89 -1
  278. package/src/db/Db.ts +137 -0
  279. package/src/db/Schema.ts +104 -2
  280. package/src/db/tables/billingSettings.test.ts +87 -0
  281. package/src/db/tables/billingSettings.ts +108 -0
  282. package/src/db/tables/invitations.ts +2 -2
  283. package/src/db/tables/organizations.test.ts +1 -1
  284. package/src/db/tables/organizations.ts +15 -5
  285. package/src/db/tables/projects.ts +2 -2
  286. package/src/db/tables/requestUsage.ts +231 -0
  287. package/src/db/tables/sponsoredTransactions.test.ts +108 -1
  288. package/src/db/tables/sponsoredTransactions.ts +230 -2
  289. package/src/db/tables/stripeCustomers.test.ts +109 -0
  290. package/src/db/tables/stripeCustomers.ts +162 -0
  291. package/src/db/tables/users.ts +2 -2
  292. package/src/handlers/internal/sponsorship.ts +34 -7
  293. package/src/handlers/internal/utils.ts +19 -7
  294. package/src/index.ts +1 -0
  295. package/src/internal/Auth.test.ts +175 -25
  296. package/src/internal/Auth.ts +175 -86
  297. package/src/internal/Cache.ts +5 -1
  298. package/src/internal/EdgeCache.test.ts +27 -4
  299. package/src/internal/EdgeCache.ts +47 -9
  300. package/src/internal/Fees.test.ts +32 -0
  301. package/src/internal/Fees.ts +51 -0
  302. package/src/internal/FundingRoutes.ts +583 -0
  303. package/src/internal/Id.test.ts +17 -0
  304. package/src/internal/Id.ts +24 -0
  305. package/src/internal/Log.test.ts +1 -0
  306. package/src/internal/Log.ts +5 -0
  307. package/src/internal/OpenApi.ts +12 -1
  308. package/src/internal/RateLimit.test.ts +84 -0
  309. package/src/internal/RateLimit.ts +70 -0
  310. package/src/internal/Response.ts +1 -1
  311. package/src/internal/Schema.ts +8 -0
  312. package/src/internal/Webhooks.test.ts +3 -3
  313. package/src/internal/Webhooks.ts +3 -3
@@ -0,0 +1,112 @@
1
+ import { Hono } from 'hono';
2
+ import { Handler as vocs_Handler } from 'vocs/server';
3
+ import openrpcSpec from '../../openrpc.json' with { type: 'json' };
4
+ import { pilatFontFaces } from './fonts.js';
5
+ import { logoUrl } from './logo.js';
6
+ /**
7
+ * Builds the Vocs reference handler. Loaded via dynamic import on the first
8
+ * docs request (see `docs()` in `App.ts`), keeping the multi-MB renderer off
9
+ * isolate startup.
10
+ */
11
+ export function create(options) {
12
+ const { mount, spec, vocs } = options;
13
+ const handler = vocs_Handler.openApi({
14
+ // Inline the OpenRPC doc so vocs expands it without a self-subrequest
15
+ // (see `inlineOpenrpc`); the public `/openapi.json` keeps the URL ref.
16
+ spec: () => spec().then(inlineOpenrpc),
17
+ sidebar: { collapsed: true },
18
+ vocs: { logoUrl, title: 'Tempo API Reference', ...vocs },
19
+ }, { css, fallback: 'next' });
20
+ if (!mount)
21
+ return handler;
22
+ // Re-mount under the host prefix so the handler's `routePath`-derived mount
23
+ // (asset link bases, known-route checks) matches a direct `.route()` mount.
24
+ return new Hono().route(mount, handler);
25
+ }
26
+ /**
27
+ * Custom CSS injected into the standalone reference's shell `<head>` (via
28
+ * `Handler.openApi(_, { css })`), after the Vocs design-system styles so it
29
+ * overrides them:
30
+ *
31
+ * - Page/surface backgrounds use Tempo's near-black dark palette and pure-white
32
+ * light palette via `light-dark(<light>, <dark>)`.
33
+ * - The dark border color is darkened (the light theme keeps its default).
34
+ * - Every corner is squared. The universal `!important` rule beats hard-coded
35
+ * `border-radius` values and inline styles (e.g. the Scalar playground), which
36
+ * overriding the radius scale variables alone would miss.
37
+ * - The default sans/body font is Pilat (Vocs reads `--vocs-font-family`); the
38
+ * webfont is embedded via {@link pilatFontFaces}. Body stays at the default
39
+ * weight (400); headings are pinned to 500, which renders Pilat Demi (the
40
+ * family has no 500 cut, so Demi covers the 500-600 range — see
41
+ * {@link pilatFontFaces}).
42
+ */
43
+ const css = `${pilatFontFaces}
44
+
45
+ :root {
46
+ --vocs-font-family: "Pilat", Arial, Helvetica, sans-serif;
47
+ --vocs-background-color-primary: light-dark(#fafafa, #0a0a0a);
48
+ --vocs-background-color-surface: light-dark(#fff, #121212);
49
+ }
50
+
51
+ :is(h1, h2, h3, h4, h5, h6)[data-v] {
52
+ font-weight: 500;
53
+ }
54
+
55
+ /* Nudge the header logo a touch larger than the default max-h-7 (1.75rem). */
56
+ [data-v-logo-image] {
57
+ max-height: 2rem;
58
+ }
59
+
60
+ /* Sidebar leaf items render Regular (the nav's 450 default otherwise resolves to
61
+ * Demi via the 500-600 range). Group labels ([data-v-sidebar-section-header])
62
+ * keep their heavier weight. */
63
+ [data-v-sidebar-item] {
64
+ font-weight: 400;
65
+ }
66
+
67
+ [data-vocs-theme='dark'] {
68
+ --vocs-color-gray4: oklch(20% 0 0);
69
+ --vocs-color-gray5: oklch(0.23 0 0);
70
+ --vocs-border-color-primary: oklch(0.25 0 0);
71
+ --vocs-border-color-secondary: oklch(0.25 0 0);
72
+ }
73
+
74
+ *,
75
+ *::before,
76
+ *::after {
77
+ border-radius: 0 !important;
78
+ }`;
79
+ /**
80
+ * Returns a shallow copy of `spec` with the JSON-RPC passthrough operation's
81
+ * `x-openrpc` replaced by the inline OpenRPC document, for the docs handler.
82
+ *
83
+ * Vocs expands `x-openrpc` at request time. A URL reference (as kept in the
84
+ * public `/openapi.json` by `App.create`'s `applyOpenrpcLink`) would make the
85
+ * docs worker fetch its own `/openrpc.json` — a self-subrequest that is
86
+ * unreliable on Cloudflare Workers and silently falls back to a single,
87
+ * unexpanded operation. Inlining the committed artifact keeps expansion
88
+ * deterministic across local and deployed environments, without bloating the
89
+ * public spec. Only the affected path/op are cloned; the rest of the (large)
90
+ * document is shared by reference.
91
+ */
92
+ function inlineOpenrpc(spec) {
93
+ const paths = {};
94
+ for (const [pathname, item] of Object.entries(spec.paths)) {
95
+ let next = item;
96
+ if (isRecord(item))
97
+ for (const [method, op] of Object.entries(item))
98
+ if (isRpcOperation(op))
99
+ next = { ...item, [method]: { ...op, 'x-openrpc': openrpcSpec } };
100
+ paths[pathname] = next;
101
+ }
102
+ return { ...spec, paths };
103
+ }
104
+ // The JSON-RPC passthrough's operation id, set by its route definition and
105
+ // targeted by `App.create`'s `applyOpenrpcLink`.
106
+ function isRpcOperation(op) {
107
+ return isRecord(op) && op['operationId'] === 'rpcRequest';
108
+ }
109
+ function isRecord(value) {
110
+ return !!value && typeof value === 'object' && !Array.isArray(value);
111
+ }
112
+ //# sourceMappingURL=reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../../src/apps/docs/reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAGrD,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACrC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAClC;QACE,sEAAsE;QACtE,uEAAuE;QACvE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;QACtC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,IAAI,EAAE;KACzD,EACD,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAC1B,CAAA;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAA;IAC1B,4EAA4E;IAC5E,4EAA4E;IAC5E,OAAO,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,GAAG,GAAG,GAAG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmC3B,CAAA;AAEF;;;;;;;;;;;;GAYG;AACH,SAAS,aAAa,CAAkD,IAAU;IAChF,MAAM,KAAK,GAA4B,EAAE,CAAA;IACzC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,IAAI,IAAI,GAAG,IAAI,CAAA;QACf,IAAI,QAAQ,CAAC,IAAI,CAAC;YAChB,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC7C,IAAI,cAAc,CAAC,EAAE,CAAC;oBAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,CAAA;QAC7F,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;IACxB,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAA;AAC3B,CAAC;AAED,2EAA2E;AAC3E,iDAAiD;AACjD,SAAS,cAAc,CAAC,EAAW;IACjC,OAAO,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,YAAY,CAAA;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACtE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { data } from './data/index.js';
2
+ export { mcp } from './mcp.js';
2
3
  export { platform } from './platform/index.js';
3
4
  export { relay } from './relay/index.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  export { data } from './data/index.js';
2
+ export { mcp } from './mcp.js';
2
3
  export { platform } from './platform/index.js';
3
4
  export { relay } from './relay/index.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,76 @@
1
+ import * as z from 'zod/mini';
2
+ import type * as App from '../App.js';
3
+ /** Zod schemas owned by the MCP endpoint's OpenAPI description. */
4
+ export declare namespace schema {
5
+ /** JSON-RPC request identifier. */
6
+ const Id: z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniNumber<number>, z.ZodMiniNull]>;
7
+ /** JSON-RPC error payload. */
8
+ const Error: z.ZodMiniObject<{
9
+ code: z.ZodMiniNumber<number>;
10
+ data: z.ZodMiniOptional<z.ZodMiniUnknown>;
11
+ message: z.ZodMiniString<string>;
12
+ }, z.core.$strip>;
13
+ /** MCP JSON-RPC response payload. */
14
+ const Response: z.ZodMiniObject<{
15
+ error: z.ZodMiniOptional<z.ZodMiniObject<{
16
+ code: z.ZodMiniNumber<number>;
17
+ data: z.ZodMiniOptional<z.ZodMiniUnknown>;
18
+ message: z.ZodMiniString<string>;
19
+ }, z.core.$strip>>;
20
+ id: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniNumber<number>, z.ZodMiniNull]>>;
21
+ jsonrpc: z.ZodMiniLiteral<"2.0">;
22
+ result: z.ZodMiniOptional<z.ZodMiniUnknown>;
23
+ }, z.core.$strip>;
24
+ }
25
+ /**
26
+ * The MCP route group: a stateless streamable-HTTP MCP server at `/mcp` whose
27
+ * tools mirror the API's data domain (scoped via the OpenAPI document's
28
+ * `Data API` tag group), plus the remote Tempo docs tools. Mount alongside
29
+ * the other route groups:
30
+ *
31
+ * ```ts
32
+ * App.create(options).route('/', mcp({ fetch: (request) => getApp().fetch(request) }))
33
+ * ```
34
+ */
35
+ export declare function mcp(options: mcp.Options): import("hono/hono-base").HonoBase<App.Environment, {
36
+ "/mcp": {
37
+ $post: {
38
+ output: {};
39
+ outputFormat: string;
40
+ status: import("hono/utils/http-status").StatusCode;
41
+ input: {};
42
+ };
43
+ };
44
+ } & {
45
+ "/mcp": {
46
+ $all: {
47
+ output: {};
48
+ outputFormat: string;
49
+ status: import("hono/utils/http-status").StatusCode;
50
+ input: {};
51
+ };
52
+ };
53
+ }, "/", "/mcp">;
54
+ export declare namespace mcp {
55
+ /** Options for the MCP route group. */
56
+ type Options = {
57
+ /** Remote docs MCP source mounted as the `docs` tool group, or `false` to omit it. @default 'https://mcp.tempo.xyz/mcp' */
58
+ docs?: Source | false | undefined;
59
+ /** In-process fetch handler for the composed app (e.g. `(request) => app.fetch(request)`). */
60
+ fetch: (request: Request) => Response | Promise<Response>;
61
+ /** MCP server name. @default 'tapimo' */
62
+ name?: string | undefined;
63
+ /** MCP server version. @default '0.0.0' */
64
+ version?: string | undefined;
65
+ };
66
+ /** A remote streamable-HTTP MCP server endpoint. */
67
+ type Source = string | URL | {
68
+ /** Fetch handler used for MCP requests. Defaults to `globalThis.fetch`. */
69
+ fetch?: ((request: Request) => Response | Promise<Response>) | undefined;
70
+ /** Headers merged into every MCP request. */
71
+ headers?: Record<string, string> | undefined;
72
+ /** Streamable-HTTP MCP endpoint URL. */
73
+ url: string | URL;
74
+ };
75
+ }
76
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/apps/mcp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAA;AAerC,mEAAmE;AACnE,yBAAiB,MAAM,CAAC;IACtB,mCAAmC;IAC5B,MAAM,EAAE,4FAEiF,CAAA;IAEhG,8BAA8B;IACvB,MAAM,KAAK;;;;qBAU0D,CAAA;IAE5E,qCAAqC;IAC9B,MAAM,QAAQ;;;;;;;;;qBAaoD,CAAA;CAC1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO;;;;;;;;;;;;;;;;;;gBAgHvC;AA8CD,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,uCAAuC;IACvC,KAAK,OAAO,GAAG;QACb,2HAA2H;QAC3H,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;QACjC,8FAA8F;QAC9F,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QACzD,yCAAyC;QACzC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,2CAA2C;QAC3C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;IAED,oDAAoD;IACpD,KAAK,MAAM,GACP,MAAM,GACN,GAAG,GACH;QACE,2EAA2E;QAC3E,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAA;QACxE,6CAA6C;QAC7C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;QAC5C,wCAAwC;QACxC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAClB,CAAA;CACN"}
@@ -0,0 +1,188 @@
1
+ import { Hono } from 'hono';
2
+ import { Cli as incur_Cli } from 'incur';
3
+ import * as z from 'zod/mini';
4
+ import * as Auth from '../internal/Auth.js';
5
+ import * as OpenApi from '../internal/OpenApi.js';
6
+ import * as Metadata from './metadata.js';
7
+ /** Document tag group whose operations surface as MCP tools (the data domain). */
8
+ const tagGroup = 'Data API';
9
+ /** Tags inside the group hidden from MCP: partner-shaped CoinGecko mirrors and the MCP endpoint itself. */
10
+ const excludedTags = ['CoinGecko', 'MCP'];
11
+ /** Usage guidance surfaced to MCP clients on initialize. */
12
+ const instructions = "Tools mirror the Tempo API's data domain. Authenticated tools accept a Tempo API key: send it as an `Authorization: Bearer` header on the HTTP request, or pass the `authorization` tool input per call. List endpoints paginate via `cursor`/`nextCursor`. `docs_*` tools search the Tempo documentation.";
13
+ /** Zod schemas owned by the MCP endpoint's OpenAPI description. */
14
+ export var schema;
15
+ (function (schema) {
16
+ /** JSON-RPC request identifier. */
17
+ schema.Id = z
18
+ .union([z.string(), z.number(), z.null()])
19
+ .check(z.describe('Client-supplied JSON-RPC request id used to match responses to requests.'));
20
+ /** JSON-RPC error payload. */
21
+ schema.Error = z
22
+ .object({
23
+ code: z
24
+ .number()
25
+ .check(z.int(), z.describe('Numeric JSON-RPC error code returned by the MCP server.')),
26
+ data: z
27
+ .optional(z.unknown())
28
+ .check(z.describe('Optional extra error details returned by the MCP server.')),
29
+ message: z.string().check(z.describe('Human-readable JSON-RPC error message.')),
30
+ })
31
+ .check(z.describe('JSON-RPC error object returned when a message fails.'));
32
+ /** MCP JSON-RPC response payload. */
33
+ schema.Response = z
34
+ .object({
35
+ error: z
36
+ .optional(schema.Error)
37
+ .check(z.describe('JSON-RPC error object returned when a message fails.')),
38
+ id: z
39
+ .optional(schema.Id)
40
+ .check(z.describe('Client-supplied JSON-RPC request id used to match responses to requests.')),
41
+ jsonrpc: z.literal('2.0').check(z.describe('JSON-RPC protocol version; MCP uses `2.0`.')),
42
+ result: z.optional(z.unknown()).check(z.describe('Result returned by the MCP method.')),
43
+ })
44
+ .check(z.describe('One MCP JSON-RPC response returned by the server.'));
45
+ })(schema || (schema = {}));
46
+ /**
47
+ * The MCP route group: a stateless streamable-HTTP MCP server at `/mcp` whose
48
+ * tools mirror the API's data domain (scoped via the OpenAPI document's
49
+ * `Data API` tag group), plus the remote Tempo docs tools. Mount alongside
50
+ * the other route groups:
51
+ *
52
+ * ```ts
53
+ * App.create(options).route('/', mcp({ fetch: (request) => getApp().fetch(request) }))
54
+ * ```
55
+ */
56
+ export function mcp(options) {
57
+ const { docs = 'https://mcp.tempo.xyz/mcp', fetch, name = 'tapimo', version = '0.0.0' } = options;
58
+ // One incur instance per caller origin: the OpenAPI document is parsed once,
59
+ // and generated commands rebase onto the origin so tool results embed real
60
+ // absolute URLs (e.g. token asset URIs).
61
+ const clis = new Map();
62
+ function resolve(origin) {
63
+ let cli = clis.get(origin);
64
+ if (!cli) {
65
+ cli = build(origin);
66
+ clis.set(origin, cli);
67
+ // A failed build (spec fetch or docs resolution) retries next request.
68
+ cli.catch(() => clis.delete(origin));
69
+ }
70
+ return cli;
71
+ }
72
+ async function build(origin) {
73
+ const response = await fetch(new Request(new URL('/openapi.json', origin)));
74
+ if (!response.ok)
75
+ throw new Error(`openapi.json request failed: ${response.status}`);
76
+ const document = (await response.json());
77
+ const cli = incur_Cli.create(name, {
78
+ description: 'Tempo API',
79
+ // Generated commands build requests against `http://localhost`; rebase
80
+ // them onto the caller origin and dispatch in-process.
81
+ fetch: (request) => {
82
+ const url = new URL(request.url);
83
+ return fetch(new Request(new URL(url.pathname + url.search, origin), request));
84
+ },
85
+ mcp: { instructions },
86
+ openapi: scope(document),
87
+ openapiConfig: { forwardHeaders: ['authorization'], mode: 'namespace' },
88
+ version,
89
+ });
90
+ if (docs !== false)
91
+ cli.command('docs', { description: 'Search the Tempo documentation.', mcp: docs });
92
+ return cli;
93
+ }
94
+ async function handler(c) {
95
+ const cli = await resolve(new URL(c.req.url).origin);
96
+ // incur routes on the first path segment; pin the path to `/mcp` so a
97
+ // mount prefix never leaks into its router.
98
+ return cli.fetch(new Request(new URL('/mcp', c.req.url), c.req.raw));
99
+ }
100
+ // The documented POST carries the auth policy (described routes are
101
+ // default-closed); other methods fall through to the bare route and incur's 405.
102
+ const app = new Hono()
103
+ .post('/mcp', Auth.policy({ apiKey: { scopes: [] }, public: true }), OpenApi.describeRoute({
104
+ description: "A stateless streamable-HTTP MCP server: send JSON-RPC 2.0 messages as `POST` with `Accept: application/json, text/event-stream`. Tools mirror the API's data domain, plus `docs_*` documentation search. Anonymous requests use the public quota; send `Authorization: Bearer <api key>` for protected tools.",
105
+ operationId: 'mcpRequest',
106
+ // The JSON-RPC request envelope is protocol-owned (like `/rpc`), so the
107
+ // body documents an example rather than a schema.
108
+ requestBody: {
109
+ content: {
110
+ 'application/json': {
111
+ example: { jsonrpc: '2.0', id: 1, method: 'tools/list', params: {} },
112
+ },
113
+ },
114
+ required: true,
115
+ },
116
+ responses: {
117
+ 200: {
118
+ content: {
119
+ 'application/json': {
120
+ example: {
121
+ jsonrpc: '2.0',
122
+ id: 1,
123
+ result: { tools: [{ name: 'v1_tokens_get', description: 'List tokens' }] },
124
+ },
125
+ schema: OpenApi.resolver(schema.Response),
126
+ },
127
+ },
128
+ description: 'JSON-RPC response returned by the MCP server.',
129
+ headers: { ...OpenApi.successHeaders },
130
+ },
131
+ 202: {
132
+ description: 'The message was a notification or client response; there is nothing to return.',
133
+ },
134
+ 400: {
135
+ content: { 'application/json': { schema: OpenApi.resolver(schema.Response) } },
136
+ description: 'Malformed or invalid MCP message, returned as a JSON-RPC error response rather than the standard error envelope. A malformed API key returns the standard `400` envelope instead.',
137
+ },
138
+ 401: OpenApi.standardError(401, 'The presented API key is invalid. Anonymous requests are allowed under the public quota.', ['api_key_invalid']),
139
+ 406: {
140
+ content: { 'application/json': { schema: OpenApi.resolver(schema.Response) } },
141
+ description: 'The `Accept` header must include both `application/json` and `text/event-stream`. Returned as a JSON-RPC error response.',
142
+ },
143
+ 429: OpenApi.standardError(429, 'Rate limit exceeded.'),
144
+ 500: OpenApi.standardError(500, 'Internal server error.'),
145
+ },
146
+ summary: 'Call MCP',
147
+ tags: ['MCP'],
148
+ }), handler)
149
+ .all('/mcp', handler);
150
+ return Metadata.attach(app, openapi);
151
+ }
152
+ /** The OpenAPI metadata this group owns: the MCP endpoint's tag, surfaced under the `Data API` group. */
153
+ const openapi = {
154
+ tags: [
155
+ {
156
+ name: 'MCP',
157
+ description: 'A hosted Model Context Protocol server: the data domain and Tempo docs exposed as tools.',
158
+ },
159
+ ],
160
+ 'x-tagGroups': [{ name: tagGroup, tags: ['MCP'] }],
161
+ };
162
+ /** HTTP methods that carry operations in an OpenAPI path item. */
163
+ const methods = ['delete', 'get', 'head', 'options', 'patch', 'post', 'put', 'trace']; // prettier-ignore
164
+ /**
165
+ * Narrows the document to the data domain: operations tagged inside the
166
+ * `Data API` tag group, minus excluded tags. Platform, relay, and session
167
+ * operations never surface as tools.
168
+ */
169
+ function scope(document) {
170
+ const group = document['x-tagGroups']?.find((entry) => entry.name === tagGroup);
171
+ if (!group)
172
+ throw new Error(`openapi.json is missing the "${tagGroup}" tag group`);
173
+ const tags = new Set(group.tags.filter((tag) => !excludedTags.includes(tag)));
174
+ const paths = {};
175
+ for (const [path, item] of Object.entries(document.paths)) {
176
+ // Keep in-domain operations; non-method keys (parameters, summary) ride along.
177
+ const entries = Object.entries(item).filter(([method, operation]) => {
178
+ if (!methods.includes(method))
179
+ return true;
180
+ const tags_operation = operation.tags;
181
+ return tags_operation?.some((tag) => tags.has(tag)) ?? false;
182
+ });
183
+ if (entries.some(([method]) => methods.includes(method)))
184
+ paths[path] = Object.fromEntries(entries);
185
+ }
186
+ return { ...document, paths };
187
+ }
188
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/apps/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,IAAI,EAAE,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,GAAG,IAAI,SAAS,EAAgB,MAAM,OAAO,CAAA;AACtD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAG7B,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,kFAAkF;AAClF,MAAM,QAAQ,GAAG,UAAU,CAAA;AAE3B,2GAA2G;AAC3G,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AAEzC,4DAA4D;AAC5D,MAAM,YAAY,GAChB,4SAA4S,CAAA;AAE9S,mEAAmE;AACnE,MAAM,KAAW,MAAM,CAkCtB;AAlCD,WAAiB,MAAM;IACrB,mCAAmC;IACtB,SAAE,GAAG,CAAC;SAChB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACzC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,0EAA0E,CAAC,CAAC,CAAA;IAEhG,8BAA8B;IACjB,YAAK,GAAG,CAAC;SACnB,MAAM,CAAC;QACN,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC,CAAC;QACxF,IAAI,EAAE,CAAC;aACJ,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,0DAA0D,CAAC,CAAC;QAChF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC;KAChF,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC,CAAC,CAAA;IAE5E,qCAAqC;IACxB,eAAQ,GAAG,CAAC;SACtB,MAAM,CAAC;QACN,KAAK,EAAE,CAAC;aACL,QAAQ,CAAC,YAAK,CAAC;aACf,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC,CAAC;QAC5E,EAAE,EAAE,CAAC;aACF,QAAQ,CAAC,SAAE,CAAC;aACZ,KAAK,CACJ,CAAC,CAAC,QAAQ,CAAC,0EAA0E,CAAC,CACvF;QACH,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC;QACzF,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;KACxF,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC,CAAC,CAAA;AAC3E,CAAC,EAlCgB,MAAM,KAAN,MAAM,QAkCtB;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,GAAG,CAAC,OAAoB;IACtC,MAAM,EAAE,IAAI,GAAG,2BAA2B,EAAE,KAAK,EAAE,IAAI,GAAG,QAAQ,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,OAAO,CAAA;IAEjG,6EAA6E;IAC7E,2EAA2E;IAC3E,yCAAyC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoC,CAAA;IAExD,SAAS,OAAO,CAAC,MAAc;QAC7B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YACnB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;YACrB,uEAAuE;YACvE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QACtC,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK,UAAU,KAAK,CAAC,MAAc;QACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QAC3E,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACpF,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAa,CAAA;QACpD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;YACjC,WAAW,EAAE,WAAW;YACxB,uEAAuE;YACvE,uDAAuD;YACvD,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;gBACjB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAChC,OAAO,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;YAChF,CAAC;YACD,GAAG,EAAE,EAAE,YAAY,EAAE;YACrB,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;YACxB,aAAa,EAAE,EAAE,cAAc,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;YACvE,OAAO;SACR,CAAC,CAAA;QACF,IAAI,IAAI,KAAK,KAAK;YAChB,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;QACpF,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,CAA2B;QAChD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;QACpD,sEAAsE;QACtE,4CAA4C;QAC5C,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACtE,CAAC;IAED,oEAAoE;IACpE,iFAAiF;IACjF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAmB;SACpC,IAAI,CACH,MAAM,EACN,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EACrD,OAAO,CAAC,aAAa,CAAC;QACpB,WAAW,EACT,+SAA+S;QACjT,WAAW,EAAE,YAAY;QACzB,wEAAwE;QACxE,kDAAkD;QAClD,WAAW,EAAE;YACX,OAAO,EAAE;gBACP,kBAAkB,EAAE;oBAClB,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE;iBACrE;aACF;YACD,QAAQ,EAAE,IAAI;SACf;QACD,SAAS,EAAE;YACT,GAAG,EAAE;gBACH,OAAO,EAAE;oBACP,kBAAkB,EAAE;wBAClB,OAAO,EAAE;4BACP,OAAO,EAAE,KAAK;4BACd,EAAE,EAAE,CAAC;4BACL,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,EAAE;yBAC3E;wBACD,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC1C;iBACF;gBACD,WAAW,EAAE,+CAA+C;gBAC5D,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE;aACvC;YACD,GAAG,EAAE;gBACH,WAAW,EACT,gFAAgF;aACnF;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAC9E,WAAW,EACT,mLAAmL;aACtL;YACD,GAAG,EAAE,OAAO,CAAC,aAAa,CACxB,GAAG,EACH,0FAA0F,EAC1F,CAAC,iBAAiB,CAAC,CACpB;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAC9E,WAAW,EACT,0HAA0H;aAC7H;YACD,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACvD,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,wBAAwB,CAAC;SAC1D;QACD,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,CAAC,KAAK,CAAC;KACd,CAAC,EACF,OAAO,CACR;SACA,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvB,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACtC,CAAC;AAED,yGAAyG;AACzG,MAAM,OAAO,GAAG;IACd,IAAI,EAAE;QACJ;YACE,IAAI,EAAE,KAAK;YACX,WAAW,EACT,0FAA0F;SAC7F;KACF;IACD,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;CACrB,CAAA;AAQ/B,kEAAkE;AAClE,MAAM,OAAO,GAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA,CAAC,kBAAkB;AAE3H;;;;GAIG;AACH,SAAS,KAAK,CAAC,QAAkB;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;IAC/E,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,aAAa,CAAC,CAAA;IAClF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC7E,MAAM,KAAK,GAAsB,EAAE,CAAA;IACnC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,+EAA+E;QAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE;YAClE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC1C,MAAM,cAAc,GAAI,SAAsD,CAAC,IAAI,CAAA;YACnF,OAAO,cAAc,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA;QAC9D,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAA;AAC/B,CAAC"}