bunderstack 0.17.0-beta.2 → 0.17.0-beta.3

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 (336) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/README.md +11 -1
  3. package/dist/access.d.ts +116 -0
  4. package/dist/access.d.ts.map +1 -0
  5. package/dist/access.js +325 -0
  6. package/dist/access.js.map +1 -0
  7. package/dist/api/builder.d.ts +145 -0
  8. package/dist/api/builder.d.ts.map +1 -0
  9. package/dist/api/builder.js +28 -0
  10. package/dist/api/builder.js.map +1 -0
  11. package/dist/api/context.d.ts +34 -0
  12. package/dist/api/context.d.ts.map +1 -0
  13. package/dist/api/context.js +32 -0
  14. package/dist/api/context.js.map +1 -0
  15. package/dist/api/crud-router.d.ts +290 -0
  16. package/dist/api/crud-router.d.ts.map +1 -0
  17. package/dist/api/crud-router.js +249 -0
  18. package/dist/api/crud-router.js.map +1 -0
  19. package/dist/api/openapi.d.ts +6 -0
  20. package/dist/api/openapi.d.ts.map +1 -0
  21. package/dist/api/openapi.js +146 -0
  22. package/dist/api/openapi.js.map +1 -0
  23. package/dist/api/realtime-router.d.ts +76 -0
  24. package/dist/api/realtime-router.d.ts.map +1 -0
  25. package/dist/api/realtime-router.js +41 -0
  26. package/dist/api/realtime-router.js.map +1 -0
  27. package/dist/api/registry.d.ts +30 -0
  28. package/dist/api/registry.d.ts.map +1 -0
  29. package/dist/api/registry.js +239 -0
  30. package/dist/api/registry.js.map +1 -0
  31. package/dist/api/router.d.ts +9 -0
  32. package/dist/api/router.d.ts.map +1 -0
  33. package/dist/api/router.js +19 -0
  34. package/dist/api/router.js.map +1 -0
  35. package/dist/api/storage-router.d.ts +279 -0
  36. package/dist/api/storage-router.d.ts.map +1 -0
  37. package/dist/api/storage-router.js +155 -0
  38. package/dist/api/storage-router.js.map +1 -0
  39. package/dist/api/types.d.ts +55 -0
  40. package/dist/api/types.d.ts.map +1 -0
  41. package/dist/api/types.js +2 -0
  42. package/dist/api/types.js.map +1 -0
  43. package/dist/auth.d.ts +31 -0
  44. package/dist/auth.d.ts.map +1 -0
  45. package/dist/auth.js +102 -0
  46. package/dist/auth.js.map +1 -0
  47. package/dist/blueprint-generator.d.ts +18 -0
  48. package/dist/blueprint-generator.d.ts.map +1 -0
  49. package/dist/blueprint-generator.js +125 -0
  50. package/dist/blueprint-generator.js.map +1 -0
  51. package/dist/blueprint.d.ts +46 -0
  52. package/dist/blueprint.d.ts.map +1 -0
  53. package/dist/blueprint.js +162 -0
  54. package/dist/blueprint.js.map +1 -0
  55. package/dist/cli.d.ts +8 -0
  56. package/dist/cli.d.ts.map +1 -0
  57. package/dist/cli.js +68 -0
  58. package/dist/cli.js.map +1 -0
  59. package/dist/config.d.ts +76 -0
  60. package/dist/config.d.ts.map +1 -0
  61. package/dist/config.js +81 -0
  62. package/dist/config.js.map +1 -0
  63. package/dist/cron.d.ts +4 -0
  64. package/dist/cron.d.ts.map +1 -0
  65. package/dist/cron.js +3 -0
  66. package/dist/cron.js.map +1 -0
  67. package/dist/crud-operations.d.ts +43 -0
  68. package/dist/crud-operations.d.ts.map +1 -0
  69. package/dist/crud-operations.js +238 -0
  70. package/dist/crud-operations.js.map +1 -0
  71. package/dist/database/adapter.d.ts +20 -0
  72. package/dist/database/adapter.d.ts.map +1 -0
  73. package/dist/database/adapter.js +2 -0
  74. package/dist/database/adapter.js.map +1 -0
  75. package/dist/database/bun-sql.d.ts +3 -0
  76. package/dist/database/bun-sql.d.ts.map +1 -0
  77. package/dist/database/bun-sql.js +21 -0
  78. package/dist/database/bun-sql.js.map +1 -0
  79. package/dist/database/libsql.d.ts +3 -0
  80. package/dist/database/libsql.d.ts.map +1 -0
  81. package/dist/database/libsql.js +22 -0
  82. package/dist/database/libsql.js.map +1 -0
  83. package/dist/database/pglite.d.ts +3 -0
  84. package/dist/database/pglite.d.ts.map +1 -0
  85. package/dist/database/pglite.js +27 -0
  86. package/dist/database/pglite.js.map +1 -0
  87. package/dist/database/postgres-js.d.ts +3 -0
  88. package/dist/database/postgres-js.d.ts.map +1 -0
  89. package/dist/database/postgres-js.js +21 -0
  90. package/dist/database/postgres-js.js.map +1 -0
  91. package/dist/db.d.ts +18 -0
  92. package/dist/db.d.ts.map +1 -0
  93. package/dist/db.js +26 -0
  94. package/dist/db.js.map +1 -0
  95. package/dist/dialect.d.ts +17 -0
  96. package/dist/dialect.d.ts.map +1 -0
  97. package/dist/dialect.js +22 -0
  98. package/dist/dialect.js.map +1 -0
  99. package/dist/email/smtp.d.ts +14 -0
  100. package/dist/email/smtp.d.ts.map +1 -0
  101. package/dist/email/smtp.js +27 -0
  102. package/dist/email/smtp.js.map +1 -0
  103. package/dist/email.d.ts +39 -0
  104. package/dist/email.d.ts.map +1 -0
  105. package/dist/email.js +97 -0
  106. package/dist/email.js.map +1 -0
  107. package/dist/env.d.ts +47 -0
  108. package/dist/env.d.ts.map +1 -0
  109. package/dist/env.js +99 -0
  110. package/dist/env.js.map +1 -0
  111. package/dist/errors.d.ts +125 -0
  112. package/dist/errors.d.ts.map +1 -0
  113. package/dist/errors.js +92 -0
  114. package/dist/errors.js.map +1 -0
  115. package/dist/handler.d.ts +9 -0
  116. package/dist/handler.d.ts.map +1 -0
  117. package/dist/handler.js +22 -0
  118. package/dist/handler.js.map +1 -0
  119. package/dist/idempotency.d.ts +17 -0
  120. package/dist/idempotency.d.ts.map +1 -0
  121. package/dist/idempotency.js +65 -0
  122. package/dist/idempotency.js.map +1 -0
  123. package/dist/index.d.ts +134 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +477 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/internal-tables-pg.d.ts +481 -0
  128. package/dist/internal-tables-pg.d.ts.map +1 -0
  129. package/{src/internal-tables-pg.ts → dist/internal-tables-pg.js} +10 -34
  130. package/dist/internal-tables-pg.js.map +1 -0
  131. package/dist/internal-tables.d.ts +2509 -0
  132. package/dist/internal-tables.d.ts.map +1 -0
  133. package/dist/internal-tables.js +108 -0
  134. package/dist/internal-tables.js.map +1 -0
  135. package/dist/jobs/cron.d.ts +15 -0
  136. package/dist/jobs/cron.d.ts.map +1 -0
  137. package/dist/jobs/cron.js +74 -0
  138. package/dist/jobs/cron.js.map +1 -0
  139. package/dist/jobs/define.d.ts +133 -0
  140. package/dist/jobs/define.d.ts.map +1 -0
  141. package/dist/jobs/define.js +74 -0
  142. package/dist/jobs/define.js.map +1 -0
  143. package/dist/jobs/index.d.ts +11 -0
  144. package/dist/jobs/index.d.ts.map +1 -0
  145. package/dist/jobs/index.js +8 -0
  146. package/dist/jobs/index.js.map +1 -0
  147. package/dist/jobs/queue.d.ts +6 -0
  148. package/dist/jobs/queue.d.ts.map +1 -0
  149. package/dist/jobs/queue.js +55 -0
  150. package/dist/jobs/queue.js.map +1 -0
  151. package/dist/jobs/runtime.d.ts +13 -0
  152. package/dist/jobs/runtime.d.ts.map +1 -0
  153. package/dist/jobs/runtime.js +46 -0
  154. package/dist/jobs/runtime.js.map +1 -0
  155. package/dist/jobs/slots.d.ts +25 -0
  156. package/dist/jobs/slots.d.ts.map +1 -0
  157. package/dist/jobs/slots.js +41 -0
  158. package/dist/jobs/slots.js.map +1 -0
  159. package/dist/jobs/worker.d.ts +12 -0
  160. package/dist/jobs/worker.d.ts.map +1 -0
  161. package/dist/jobs/worker.js +311 -0
  162. package/dist/jobs/worker.js.map +1 -0
  163. package/dist/lifecycle.d.ts +10 -0
  164. package/dist/lifecycle.d.ts.map +1 -0
  165. package/dist/lifecycle.js +37 -0
  166. package/dist/lifecycle.js.map +1 -0
  167. package/dist/list-query.d.ts +62 -0
  168. package/dist/list-query.d.ts.map +1 -0
  169. package/dist/list-query.js +194 -0
  170. package/dist/list-query.js.map +1 -0
  171. package/dist/manifest.d.ts +59 -0
  172. package/dist/manifest.d.ts.map +1 -0
  173. package/dist/manifest.js +167 -0
  174. package/dist/manifest.js.map +1 -0
  175. package/dist/provision-internals.d.ts +24 -0
  176. package/dist/provision-internals.d.ts.map +1 -0
  177. package/dist/provision-internals.js +7 -0
  178. package/dist/provision-internals.js.map +1 -0
  179. package/dist/provision.d.ts +23 -0
  180. package/dist/provision.d.ts.map +1 -0
  181. package/dist/provision.js +96 -0
  182. package/dist/provision.js.map +1 -0
  183. package/dist/rate-limit.d.ts +7 -0
  184. package/dist/rate-limit.d.ts.map +1 -0
  185. package/dist/rate-limit.js +49 -0
  186. package/dist/rate-limit.js.map +1 -0
  187. package/dist/realtime/facade.d.ts +18 -0
  188. package/dist/realtime/facade.d.ts.map +1 -0
  189. package/dist/realtime/facade.js +36 -0
  190. package/dist/realtime/facade.js.map +1 -0
  191. package/dist/realtime/filter.d.ts +13 -0
  192. package/dist/realtime/filter.d.ts.map +1 -0
  193. package/dist/realtime/filter.js +48 -0
  194. package/dist/realtime/filter.js.map +1 -0
  195. package/dist/realtime/heartbeat.d.ts +14 -0
  196. package/dist/realtime/heartbeat.d.ts.map +1 -0
  197. package/dist/realtime/heartbeat.js +64 -0
  198. package/dist/realtime/heartbeat.js.map +1 -0
  199. package/dist/realtime/publisher.d.ts +21 -0
  200. package/dist/realtime/publisher.d.ts.map +1 -0
  201. package/dist/realtime/publisher.js +17 -0
  202. package/dist/realtime/publisher.js.map +1 -0
  203. package/dist/schema-export-pg.d.ts +2 -0
  204. package/dist/schema-export-pg.d.ts.map +1 -0
  205. package/dist/schema-export-pg.js +4 -0
  206. package/dist/schema-export-pg.js.map +1 -0
  207. package/dist/schema-export.d.ts +2 -0
  208. package/dist/schema-export.d.ts.map +1 -0
  209. package/dist/schema-export.js +2 -0
  210. package/dist/schema-export.js.map +1 -0
  211. package/dist/scope.d.ts +4 -0
  212. package/dist/scope.d.ts.map +1 -0
  213. package/dist/scope.js +13 -0
  214. package/dist/scope.js.map +1 -0
  215. package/dist/standard-schema.d.ts +13 -0
  216. package/dist/standard-schema.d.ts.map +1 -0
  217. package/dist/standard-schema.js +34 -0
  218. package/dist/standard-schema.js.map +1 -0
  219. package/dist/storage/buckets.d.ts +80 -0
  220. package/dist/storage/buckets.d.ts.map +1 -0
  221. package/dist/storage/buckets.js +178 -0
  222. package/dist/storage/buckets.js.map +1 -0
  223. package/dist/storage/delete.d.ts +11 -0
  224. package/dist/storage/delete.d.ts.map +1 -0
  225. package/dist/storage/delete.js +18 -0
  226. package/dist/storage/delete.js.map +1 -0
  227. package/dist/storage/file-meta.d.ts +37 -0
  228. package/dist/storage/file-meta.d.ts.map +1 -0
  229. package/dist/storage/file-meta.js +166 -0
  230. package/dist/storage/file-meta.js.map +1 -0
  231. package/dist/storage/index.d.ts +28 -0
  232. package/dist/storage/index.d.ts.map +1 -0
  233. package/dist/storage/index.js +5 -0
  234. package/dist/storage/index.js.map +1 -0
  235. package/dist/storage/local.d.ts +15 -0
  236. package/dist/storage/local.d.ts.map +1 -0
  237. package/dist/storage/local.js +56 -0
  238. package/dist/storage/local.js.map +1 -0
  239. package/dist/storage/operations.d.ts +54 -0
  240. package/dist/storage/operations.d.ts.map +1 -0
  241. package/dist/storage/operations.js +250 -0
  242. package/dist/storage/operations.js.map +1 -0
  243. package/dist/storage/registry.d.ts +10 -0
  244. package/dist/storage/registry.d.ts.map +1 -0
  245. package/dist/storage/registry.js +23 -0
  246. package/dist/storage/registry.js.map +1 -0
  247. package/dist/storage/s3.d.ts +28 -0
  248. package/dist/storage/s3.d.ts.map +1 -0
  249. package/dist/storage/s3.js +71 -0
  250. package/dist/storage/s3.js.map +1 -0
  251. package/dist/storage/sweep.d.ts +9 -0
  252. package/dist/storage/sweep.d.ts.map +1 -0
  253. package/dist/storage/sweep.js +17 -0
  254. package/dist/storage/sweep.js.map +1 -0
  255. package/dist/storage/thumbnails.d.ts +11 -0
  256. package/dist/storage/thumbnails.d.ts.map +1 -0
  257. package/dist/storage/thumbnails.js +60 -0
  258. package/dist/storage/thumbnails.js.map +1 -0
  259. package/dist/testing.d.ts +27 -0
  260. package/dist/testing.d.ts.map +1 -0
  261. package/dist/testing.js +11 -0
  262. package/dist/testing.js.map +1 -0
  263. package/dist/typeid-pg.d.ts +19 -0
  264. package/dist/typeid-pg.d.ts.map +1 -0
  265. package/{src/typeid-pg.ts → dist/typeid-pg.js} +10 -13
  266. package/dist/typeid-pg.js.map +1 -0
  267. package/dist/typeid.d.ts +45 -0
  268. package/dist/typeid.d.ts.map +1 -0
  269. package/dist/typeid.js +100 -0
  270. package/dist/typeid.js.map +1 -0
  271. package/package.json +77 -28
  272. package/src/access.ts +0 -532
  273. package/src/api/builder.ts +0 -52
  274. package/src/api/context.ts +0 -83
  275. package/src/api/crud-router.ts +0 -386
  276. package/src/api/openapi.ts +0 -184
  277. package/src/api/realtime-router.ts +0 -75
  278. package/src/api/registry.ts +0 -338
  279. package/src/api/router.ts +0 -34
  280. package/src/api/storage-router.ts +0 -224
  281. package/src/api/types.ts +0 -105
  282. package/src/auth.ts +0 -117
  283. package/src/blueprint-generator.ts +0 -203
  284. package/src/blueprint.ts +0 -264
  285. package/src/cli.ts +0 -90
  286. package/src/config.ts +0 -215
  287. package/src/cron.ts +0 -3
  288. package/src/crud-operations.ts +0 -478
  289. package/src/database/adapter.ts +0 -26
  290. package/src/database/bun-sql.ts +0 -23
  291. package/src/database/libsql.ts +0 -28
  292. package/src/database/pglite.ts +0 -33
  293. package/src/database/postgres-js.ts +0 -33
  294. package/src/db.ts +0 -61
  295. package/src/dialect.ts +0 -38
  296. package/src/email/smtp.ts +0 -45
  297. package/src/email.ts +0 -154
  298. package/src/env.ts +0 -180
  299. package/src/errors.ts +0 -123
  300. package/src/handler.ts +0 -30
  301. package/src/idempotency.ts +0 -97
  302. package/src/index.ts +0 -834
  303. package/src/internal-tables.ts +0 -149
  304. package/src/jobs/cron.ts +0 -87
  305. package/src/jobs/define.ts +0 -283
  306. package/src/jobs/index.ts +0 -37
  307. package/src/jobs/queue.ts +0 -67
  308. package/src/jobs/runtime.ts +0 -58
  309. package/src/jobs/slots.ts +0 -52
  310. package/src/jobs/worker.ts +0 -369
  311. package/src/lifecycle.ts +0 -49
  312. package/src/list-query.ts +0 -333
  313. package/src/manifest.ts +0 -297
  314. package/src/provision-internals.ts +0 -29
  315. package/src/provision.ts +0 -128
  316. package/src/rate-limit.ts +0 -71
  317. package/src/realtime/facade.ts +0 -74
  318. package/src/realtime/filter.ts +0 -81
  319. package/src/realtime/heartbeat.ts +0 -80
  320. package/src/realtime/publisher.ts +0 -46
  321. package/src/schema-export-pg.ts +0 -7
  322. package/src/schema-export.ts +0 -5
  323. package/src/scope.ts +0 -17
  324. package/src/standard-schema.ts +0 -59
  325. package/src/storage/buckets.ts +0 -308
  326. package/src/storage/delete.ts +0 -26
  327. package/src/storage/file-meta.ts +0 -222
  328. package/src/storage/index.ts +0 -39
  329. package/src/storage/local.ts +0 -69
  330. package/src/storage/operations.ts +0 -398
  331. package/src/storage/registry.ts +0 -40
  332. package/src/storage/s3.ts +0 -99
  333. package/src/storage/sweep.ts +0 -25
  334. package/src/storage/thumbnails.ts +0 -65
  335. package/src/testing.ts +0 -31
  336. package/src/typeid.ts +0 -116
@@ -0,0 +1,279 @@
1
+ import '@orpc/openapi/extensions/route';
2
+ import * as v from 'valibot';
3
+ import type { StorageOperations } from '../storage/operations.js';
4
+ import type { BucketStorageRegistry } from '../storage/registry.js';
5
+ import type { ApiContext } from './context.js';
6
+ export declare function buildStorageApiRouter(registry: BucketStorageRegistry, operations: StorageOperations): {
7
+ files: {
8
+ [k: string]: {
9
+ prepareUpload: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>> & object, object, v.StrictObjectSchema<{
10
+ readonly filename: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
11
+ readonly contentType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
12
+ }, undefined>, v.VariantSchema<"mode", [v.StrictObjectSchema<{
13
+ readonly mode: v.LiteralSchema<"proxy", undefined>;
14
+ readonly uploadUrl: v.StringSchema<undefined>;
15
+ }, undefined>, v.StrictObjectSchema<{
16
+ readonly mode: v.LiteralSchema<"presign", undefined>;
17
+ readonly fileId: v.StringSchema<undefined>;
18
+ readonly uploadUrl: v.StringSchema<undefined>;
19
+ readonly method: v.LiteralSchema<"PUT", undefined>;
20
+ readonly confirmUrl: v.StringSchema<undefined>;
21
+ }, undefined>], undefined>, {
22
+ readonly BAD_REQUEST: {
23
+ readonly data: v.StrictObjectSchema<{
24
+ readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
25
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
26
+ }, undefined>;
27
+ };
28
+ readonly UNAUTHORIZED: {
29
+ readonly data: v.StrictObjectSchema<{
30
+ readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
31
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
32
+ }, undefined>;
33
+ };
34
+ readonly FORBIDDEN: {
35
+ readonly data: v.StrictObjectSchema<{
36
+ readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
37
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
38
+ }, undefined>;
39
+ };
40
+ readonly NOT_FOUND: {
41
+ readonly data: v.StrictObjectSchema<{
42
+ readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
43
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
44
+ }, undefined>;
45
+ };
46
+ readonly CONFLICT: {
47
+ readonly data: v.StrictObjectSchema<{
48
+ readonly code: v.LiteralSchema<"CONFLICT", undefined>;
49
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
50
+ }, undefined>;
51
+ };
52
+ readonly PAYLOAD_TOO_LARGE: {
53
+ readonly data: v.StrictObjectSchema<{
54
+ readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
55
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
56
+ }, undefined>;
57
+ };
58
+ readonly TOO_MANY_REQUESTS: {
59
+ readonly data: v.StrictObjectSchema<{
60
+ readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
61
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
62
+ }, undefined>;
63
+ };
64
+ }, never>;
65
+ upload: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>> & object, object, v.StrictObjectSchema<{
66
+ readonly params: v.OptionalSchema<v.StrictObjectSchema<{}, undefined>, {}>;
67
+ readonly query: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, {}>;
68
+ readonly headers: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, {}>;
69
+ readonly body: v.StrictObjectSchema<{
70
+ readonly file: v.FileSchema<undefined>;
71
+ }, undefined>;
72
+ }, undefined>, v.StrictObjectSchema<{
73
+ readonly status: v.LiteralSchema<201, undefined>;
74
+ readonly body: v.StrictObjectSchema<{
75
+ readonly fileId: v.StringSchema<undefined>;
76
+ readonly url: v.StringSchema<undefined>;
77
+ }, undefined>;
78
+ }, undefined>, {
79
+ readonly BAD_REQUEST: {
80
+ readonly data: v.StrictObjectSchema<{
81
+ readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
82
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
83
+ }, undefined>;
84
+ };
85
+ readonly UNAUTHORIZED: {
86
+ readonly data: v.StrictObjectSchema<{
87
+ readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
88
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
89
+ }, undefined>;
90
+ };
91
+ readonly FORBIDDEN: {
92
+ readonly data: v.StrictObjectSchema<{
93
+ readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
94
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
95
+ }, undefined>;
96
+ };
97
+ readonly NOT_FOUND: {
98
+ readonly data: v.StrictObjectSchema<{
99
+ readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
100
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
101
+ }, undefined>;
102
+ };
103
+ readonly CONFLICT: {
104
+ readonly data: v.StrictObjectSchema<{
105
+ readonly code: v.LiteralSchema<"CONFLICT", undefined>;
106
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
107
+ }, undefined>;
108
+ };
109
+ readonly PAYLOAD_TOO_LARGE: {
110
+ readonly data: v.StrictObjectSchema<{
111
+ readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
112
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
113
+ }, undefined>;
114
+ };
115
+ readonly TOO_MANY_REQUESTS: {
116
+ readonly data: v.StrictObjectSchema<{
117
+ readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
118
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
119
+ }, undefined>;
120
+ };
121
+ }, never>;
122
+ confirmUpload: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>> & object, object, v.StrictObjectSchema<{
123
+ readonly id: v.StringSchema<undefined>;
124
+ }, undefined>, v.StrictObjectSchema<{
125
+ readonly fileId: v.StringSchema<undefined>;
126
+ readonly url: v.StringSchema<undefined>;
127
+ }, undefined>, {
128
+ readonly BAD_REQUEST: {
129
+ readonly data: v.StrictObjectSchema<{
130
+ readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
131
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
132
+ }, undefined>;
133
+ };
134
+ readonly UNAUTHORIZED: {
135
+ readonly data: v.StrictObjectSchema<{
136
+ readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
137
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
138
+ }, undefined>;
139
+ };
140
+ readonly FORBIDDEN: {
141
+ readonly data: v.StrictObjectSchema<{
142
+ readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
143
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
144
+ }, undefined>;
145
+ };
146
+ readonly NOT_FOUND: {
147
+ readonly data: v.StrictObjectSchema<{
148
+ readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
149
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
150
+ }, undefined>;
151
+ };
152
+ readonly CONFLICT: {
153
+ readonly data: v.StrictObjectSchema<{
154
+ readonly code: v.LiteralSchema<"CONFLICT", undefined>;
155
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
156
+ }, undefined>;
157
+ };
158
+ readonly PAYLOAD_TOO_LARGE: {
159
+ readonly data: v.StrictObjectSchema<{
160
+ readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
161
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
162
+ }, undefined>;
163
+ };
164
+ readonly TOO_MANY_REQUESTS: {
165
+ readonly data: v.StrictObjectSchema<{
166
+ readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
167
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
168
+ }, undefined>;
169
+ };
170
+ }, never>;
171
+ download: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>> & object, object, v.StrictObjectSchema<{
172
+ readonly params: v.StrictObjectSchema<{
173
+ readonly path: v.StringSchema<undefined>;
174
+ }, undefined>;
175
+ readonly query: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, {}>;
176
+ readonly headers: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, {}>;
177
+ readonly body: v.OptionalSchema<v.UndefinedSchema<undefined>, undefined>;
178
+ }, undefined>, v.UnionSchema<[v.StrictObjectSchema<{
179
+ readonly status: v.LiteralSchema<200, undefined>;
180
+ readonly headers: v.RecordSchema<v.StringSchema<undefined>, v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>, v.UndefinedSchema<undefined>], undefined>, undefined>;
181
+ readonly body: v.UnknownSchema;
182
+ }, undefined>, v.StrictObjectSchema<{
183
+ readonly status: v.LiteralSchema<302, undefined>;
184
+ readonly headers: v.RecordSchema<v.StringSchema<undefined>, v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>, v.UndefinedSchema<undefined>], undefined>, undefined>;
185
+ readonly body: v.OptionalSchema<v.UndefinedSchema<undefined>, undefined>;
186
+ }, undefined>], undefined>, {
187
+ readonly BAD_REQUEST: {
188
+ readonly data: v.StrictObjectSchema<{
189
+ readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
190
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
191
+ }, undefined>;
192
+ };
193
+ readonly UNAUTHORIZED: {
194
+ readonly data: v.StrictObjectSchema<{
195
+ readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
196
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
197
+ }, undefined>;
198
+ };
199
+ readonly FORBIDDEN: {
200
+ readonly data: v.StrictObjectSchema<{
201
+ readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
202
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
203
+ }, undefined>;
204
+ };
205
+ readonly NOT_FOUND: {
206
+ readonly data: v.StrictObjectSchema<{
207
+ readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
208
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
209
+ }, undefined>;
210
+ };
211
+ readonly CONFLICT: {
212
+ readonly data: v.StrictObjectSchema<{
213
+ readonly code: v.LiteralSchema<"CONFLICT", undefined>;
214
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
215
+ }, undefined>;
216
+ };
217
+ readonly PAYLOAD_TOO_LARGE: {
218
+ readonly data: v.StrictObjectSchema<{
219
+ readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
220
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
221
+ }, undefined>;
222
+ };
223
+ readonly TOO_MANY_REQUESTS: {
224
+ readonly data: v.StrictObjectSchema<{
225
+ readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
226
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
227
+ }, undefined>;
228
+ };
229
+ }, never>;
230
+ delete: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>> & object, object, v.StrictObjectSchema<{
231
+ readonly path: v.StringSchema<undefined>;
232
+ }, undefined>, v.UndefinedSchema<undefined>, {
233
+ readonly BAD_REQUEST: {
234
+ readonly data: v.StrictObjectSchema<{
235
+ readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
236
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
237
+ }, undefined>;
238
+ };
239
+ readonly UNAUTHORIZED: {
240
+ readonly data: v.StrictObjectSchema<{
241
+ readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
242
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
243
+ }, undefined>;
244
+ };
245
+ readonly FORBIDDEN: {
246
+ readonly data: v.StrictObjectSchema<{
247
+ readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
248
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
249
+ }, undefined>;
250
+ };
251
+ readonly NOT_FOUND: {
252
+ readonly data: v.StrictObjectSchema<{
253
+ readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
254
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
255
+ }, undefined>;
256
+ };
257
+ readonly CONFLICT: {
258
+ readonly data: v.StrictObjectSchema<{
259
+ readonly code: v.LiteralSchema<"CONFLICT", undefined>;
260
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
261
+ }, undefined>;
262
+ };
263
+ readonly PAYLOAD_TOO_LARGE: {
264
+ readonly data: v.StrictObjectSchema<{
265
+ readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
266
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
267
+ }, undefined>;
268
+ };
269
+ readonly TOO_MANY_REQUESTS: {
270
+ readonly data: v.StrictObjectSchema<{
271
+ readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
272
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
273
+ }, undefined>;
274
+ };
275
+ }, never>;
276
+ };
277
+ };
278
+ };
279
+ //# sourceMappingURL=storage-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-router.d.ts","sourceRoot":"","sources":["../../src/api/storage-router.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAuM3C,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,qBAAqB,EAC/B,UAAU,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc9B"}
@@ -0,0 +1,155 @@
1
+ import '@orpc/openapi/extensions/route';
2
+ import * as v from 'valibot';
3
+ import { createApiBuilder } from './builder.js';
4
+ const uploadResultSchema = v.strictObject({
5
+ fileId: v.string(),
6
+ url: v.string(),
7
+ });
8
+ const prepareUploadSchema = v.variant('mode', [
9
+ v.strictObject({
10
+ mode: v.literal('proxy'),
11
+ uploadUrl: v.string(),
12
+ }),
13
+ v.strictObject({
14
+ mode: v.literal('presign'),
15
+ fileId: v.string(),
16
+ uploadUrl: v.string(),
17
+ method: v.literal('PUT'),
18
+ confirmUrl: v.string(),
19
+ }),
20
+ ]);
21
+ const responseHeadersSchema = v.record(v.string(), v.union([v.string(), v.array(v.string()), v.undefined()]));
22
+ async function executionContext(context) {
23
+ const session = await context.getSession();
24
+ return {
25
+ request: context.request,
26
+ user: session.user,
27
+ session: { activeOrganizationId: session.activeOrganizationId },
28
+ };
29
+ }
30
+ function headersRecord(headers) {
31
+ const result = {};
32
+ headers.forEach((value, key) => {
33
+ result[key] = value;
34
+ });
35
+ return result;
36
+ }
37
+ function buildBucketProcedures(name, operations, builder) {
38
+ const prepareUpload = builder.public
39
+ .route({
40
+ method: 'POST',
41
+ path: `/api/files/${name}/presign`,
42
+ summary: `Prepare upload to ${name}`,
43
+ tags: ['files'],
44
+ })
45
+ .input(v.strictObject({
46
+ filename: v.optional(v.string()),
47
+ contentType: v.optional(v.string()),
48
+ }))
49
+ .output(prepareUploadSchema)
50
+ .handler(({ input, context }) => executionContext(context).then((exec) => operations.prepareUpload(name, input, exec)));
51
+ const upload = builder.public
52
+ .route({
53
+ method: 'POST',
54
+ path: `/api/files/${name}`,
55
+ summary: `Upload to ${name}`,
56
+ tags: ['files'],
57
+ inputStructure: 'detailed',
58
+ outputStructure: 'detailed',
59
+ requestBodyHint: 'form-data',
60
+ })
61
+ .input(v.strictObject({
62
+ params: v.optional(v.strictObject({}), {}),
63
+ query: v.optional(v.record(v.string(), v.unknown()), {}),
64
+ headers: v.optional(v.record(v.string(), v.unknown()), {}),
65
+ body: v.strictObject({ file: v.file() }),
66
+ }))
67
+ .output(v.strictObject({
68
+ status: v.literal(201),
69
+ body: uploadResultSchema,
70
+ }))
71
+ .handler(async ({ input, context }) => {
72
+ const result = await operations.upload(name, input.body.file, await executionContext(context));
73
+ return {
74
+ status: result.status,
75
+ body: { fileId: result.fileId, url: result.url },
76
+ };
77
+ });
78
+ const confirmUpload = builder.public
79
+ .route({
80
+ method: 'POST',
81
+ path: `/api/files/${name}/{id}/confirm`,
82
+ summary: `Confirm upload to ${name}`,
83
+ tags: ['files'],
84
+ })
85
+ .input(v.strictObject({ id: v.string() }))
86
+ .output(uploadResultSchema)
87
+ .handler(({ input, context }) => executionContext(context).then((exec) => operations.confirmUpload(name, input.id, exec)));
88
+ const download = builder.public
89
+ .route({
90
+ method: 'GET',
91
+ path: `/api/files/${name}/{+path}`,
92
+ summary: `Download from ${name}`,
93
+ tags: ['files'],
94
+ inputStructure: 'detailed',
95
+ outputStructure: 'detailed',
96
+ })
97
+ .input(v.strictObject({
98
+ params: v.strictObject({ path: v.string() }),
99
+ query: v.optional(v.record(v.string(), v.string()), {}),
100
+ headers: v.optional(v.record(v.string(), v.unknown()), {}),
101
+ body: v.optional(v.undefined()),
102
+ }))
103
+ .output(v.union([
104
+ v.strictObject({
105
+ status: v.literal(200),
106
+ headers: responseHeadersSchema,
107
+ body: v.unknown(),
108
+ }),
109
+ v.strictObject({
110
+ status: v.literal(302),
111
+ headers: responseHeadersSchema,
112
+ body: v.optional(v.undefined()),
113
+ }),
114
+ ]))
115
+ .handler(async ({ input, context }) => {
116
+ const result = await operations.download(name, input.params.path, input.query, await executionContext(context));
117
+ if (result.kind === 'redirect') {
118
+ return {
119
+ status: 302,
120
+ headers: { Location: result.url },
121
+ body: undefined,
122
+ };
123
+ }
124
+ return {
125
+ status: 200,
126
+ headers: headersRecord(result.headers),
127
+ body: result.body,
128
+ };
129
+ });
130
+ const deleteFile = builder.public
131
+ .route({
132
+ method: 'DELETE',
133
+ path: `/api/files/${name}/{+path}`,
134
+ summary: `Delete from ${name}`,
135
+ tags: ['files'],
136
+ successStatus: 204,
137
+ })
138
+ .input(v.strictObject({ path: v.string() }))
139
+ .output(v.undefined())
140
+ .handler(async ({ input, context }) => {
141
+ await operations.delete(name, input.path, await executionContext(context));
142
+ return undefined;
143
+ });
144
+ return { prepareUpload, upload, confirmUpload, download, delete: deleteFile };
145
+ }
146
+ export function buildStorageApiRouter(registry, operations) {
147
+ const builder = createApiBuilder();
148
+ return {
149
+ files: Object.fromEntries([...registry.keys()].map((name) => [
150
+ name,
151
+ buildBucketProcedures(name, operations, builder),
152
+ ])),
153
+ };
154
+ }
155
+ //# sourceMappingURL=storage-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-router.js","sourceRoot":"","sources":["../../src/api/storage-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { AnyRouter } from '@orpc/server';
2
+ import type { Table } from 'drizzle-orm';
3
+ import type { AccessUser } from '../access.js';
4
+ import type { TableCrudProcedures } from './crud-router.js';
5
+ export interface ProtectedContextAdditions {
6
+ user: AccessUser;
7
+ session: {
8
+ activeOrganizationId: string | null;
9
+ };
10
+ }
11
+ type AuthTableName = 'user' | 'session' | 'account' | 'verification';
12
+ type InferSelect<T> = T extends {
13
+ $inferSelect: infer R;
14
+ } ? R : never;
15
+ type DisabledKeys<TAccess> = {
16
+ [K in keyof TAccess & string]: TAccess[K] extends {
17
+ crud: false;
18
+ } ? K : never;
19
+ }[keyof TAccess & string];
20
+ type ExplicitKeys<TSchema, TAccess> = {
21
+ [K in keyof TAccess & keyof TSchema & string]: TAccess[K] extends {
22
+ crud: false;
23
+ } ? never : K extends AuthTableName ? TAccess[K] extends {
24
+ exposeAuthTable: true;
25
+ } ? K extends 'user' ? K : never : never : K;
26
+ }[keyof TAccess & keyof TSchema & string];
27
+ type ConventionKeys<TSchema> = {
28
+ [K in keyof TSchema & string]: K extends AuthTableName ? never : InferSelect<TSchema[K]> extends {
29
+ userId: unknown;
30
+ } ? K : never;
31
+ }[keyof TSchema & string];
32
+ export type ExposedApiTables<TSchema, TAccess> = [TAccess] extends [undefined] ? ConventionKeys<TSchema> : ExplicitKeys<TSchema, TAccess> | Exclude<ConventionKeys<TSchema>, DisabledKeys<TAccess> | (keyof TAccess & string)>;
33
+ /**
34
+ * Column allowlists declared in `access` reach the client as literal unions, so
35
+ * `list` can type `filters` and `sort` per table. Tables that declare nothing
36
+ * get `never` filters and `'id'` sorting, matching the runtime defaults.
37
+ */
38
+ type FilterableOf<TAccess, K extends string> = K extends keyof TAccess ? TAccess[K] extends {
39
+ filterableColumns: readonly (infer F extends string)[];
40
+ } ? F : never : never;
41
+ type SortableOf<TAccess, K extends string> = K extends keyof TAccess ? TAccess[K] extends {
42
+ sortableColumns: readonly (infer S extends string)[];
43
+ } ? S : 'id' : 'id';
44
+ export type CrudApiRouterFor<TSchema extends Record<string, unknown>, TAccess = undefined> = {
45
+ [K in ExposedApiTables<TSchema, TAccess> as TSchema[K] extends Table ? K : never]: TableCrudProcedures<Extract<TSchema[K], Table>, FilterableOf<TAccess, K>, SortableOf<TAccess, K>>;
46
+ };
47
+ type IsProcedure<T> = T extends {
48
+ '~orpc': unknown;
49
+ } ? true : false;
50
+ export type MergeApiRouterTypes<A, B> = {
51
+ [K in keyof A | keyof B]: K extends keyof A ? K extends keyof B ? IsProcedure<A[K]> extends true ? never : IsProcedure<B[K]> extends true ? never : A[K] extends Record<string, unknown> ? B[K] extends Record<string, unknown> ? MergeApiRouterTypes<A[K], B[K]> : never : never : A[K] : K extends keyof B ? B[K] : never;
52
+ };
53
+ export type UnifiedApiRouter<TCrud extends AnyRouter, TCustom extends AnyRouter | undefined> = TCustom extends AnyRouter ? MergeApiRouterTypes<TCrud, TCustom> : TCrud;
54
+ export {};
55
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":""}
package/dist/auth.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import { type Auth } from 'better-auth';
2
+ import type { AuthSessionResolver } from './access.js';
3
+ import type { BetterAuthConfig } from './config.js';
4
+ import type { AnyDb, Dialect } from './dialect.js';
5
+ import type { EmailFacade } from './email.js';
6
+ /**
7
+ * Returns better-auth's plain `Auth`, not the plugin-parameterised type its
8
+ * builder infers: declaration emit would otherwise inline that whole inferred
9
+ * options object into the published `.d.ts`, where it no longer satisfies
10
+ * better-auth's own `BetterAuthOptions` constraint. Plugin-specific endpoints
11
+ * are reached through runtime checks (see the OpenAPI schema lookup in
12
+ * `index.ts`), so nothing depends on the wider type.
13
+ */
14
+ export declare function createAuth(db: AnyDb, cfg: BetterAuthConfig, dialect: Dialect, userSchema?: Record<string, unknown>): Auth;
15
+ /**
16
+ * Adapt the raw better-auth instance to our internal {@link AuthSessionResolver}
17
+ * contract. better-auth's `getSession` has a union return (a bare session, or a
18
+ * `{ headers, response }` wrapper when `returnHeaders` is set); we only ever
19
+ * call the bare form, so we narrow on `'user' in result` and map to our shape.
20
+ * Keeping this adapter here means internal modules never depend on better-auth's
21
+ * evolving types.
22
+ */
23
+ export declare function toAuthSessionResolver(auth: ReturnType<typeof createAuth>): AuthSessionResolver;
24
+ /**
25
+ * Fill better-auth's email hooks from the bunderstack email facade. Only fills
26
+ * gaps: user-supplied handlers always win, and nothing is injected when email
27
+ * isn't configured. emailAndPassword is only touched when the user enabled it
28
+ * (injecting it unasked would enable the feature).
29
+ */
30
+ export declare function withEmailAuthDefaults(cfg: BetterAuthConfig, email: EmailFacade, emailConfigured: boolean): BetterAuthConfig;
31
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,aAAa,CAAA;AAInD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,IAAI,CAcN;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAClC,mBAAmB,CA+BrB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,WAAW,EAClB,eAAe,EAAE,OAAO,GACvB,gBAAgB,CAkClB"}