bunderstack 0.17.0-beta.0 → 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 (337) 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 +81 -29
  272. package/src/access.ts +0 -552
  273. package/src/api/api-types.types.ts +0 -106
  274. package/src/api/builder.ts +0 -52
  275. package/src/api/context.ts +0 -83
  276. package/src/api/crud-router.ts +0 -321
  277. package/src/api/openapi.ts +0 -184
  278. package/src/api/realtime-router.ts +0 -75
  279. package/src/api/registry.ts +0 -338
  280. package/src/api/router.ts +0 -34
  281. package/src/api/storage-router.ts +0 -224
  282. package/src/api/types.ts +0 -84
  283. package/src/auth.ts +0 -117
  284. package/src/blueprint-generator.ts +0 -203
  285. package/src/blueprint.ts +0 -264
  286. package/src/cli.ts +0 -90
  287. package/src/config.ts +0 -215
  288. package/src/cron.ts +0 -3
  289. package/src/crud-operations.ts +0 -488
  290. package/src/database/adapter.ts +0 -26
  291. package/src/database/bun-sql.ts +0 -23
  292. package/src/database/libsql.ts +0 -28
  293. package/src/database/pglite.ts +0 -33
  294. package/src/database/postgres-js.ts +0 -33
  295. package/src/db.ts +0 -61
  296. package/src/dialect.ts +0 -38
  297. package/src/email/smtp.ts +0 -45
  298. package/src/email.ts +0 -154
  299. package/src/env.ts +0 -180
  300. package/src/errors.ts +0 -118
  301. package/src/handler.ts +0 -30
  302. package/src/idempotency.ts +0 -97
  303. package/src/index.ts +0 -822
  304. package/src/internal-tables.ts +0 -149
  305. package/src/jobs/cron.ts +0 -87
  306. package/src/jobs/define.ts +0 -283
  307. package/src/jobs/index.ts +0 -37
  308. package/src/jobs/queue.ts +0 -67
  309. package/src/jobs/runtime.ts +0 -58
  310. package/src/jobs/slots.ts +0 -52
  311. package/src/jobs/worker.ts +0 -369
  312. package/src/lifecycle.ts +0 -49
  313. package/src/list-query.ts +0 -416
  314. package/src/manifest.ts +0 -297
  315. package/src/provision-internals.ts +0 -29
  316. package/src/provision.ts +0 -128
  317. package/src/rate-limit.ts +0 -71
  318. package/src/realtime/facade.ts +0 -55
  319. package/src/realtime/filter.ts +0 -77
  320. package/src/realtime/heartbeat.ts +0 -80
  321. package/src/realtime/publisher.ts +0 -46
  322. package/src/schema-export-pg.ts +0 -7
  323. package/src/schema-export.ts +0 -5
  324. package/src/scope.ts +0 -17
  325. package/src/standard-schema.ts +0 -59
  326. package/src/storage/buckets.ts +0 -308
  327. package/src/storage/delete.ts +0 -26
  328. package/src/storage/file-meta.ts +0 -222
  329. package/src/storage/index.ts +0 -39
  330. package/src/storage/local.ts +0 -69
  331. package/src/storage/operations.ts +0 -398
  332. package/src/storage/registry.ts +0 -40
  333. package/src/storage/s3.ts +0 -99
  334. package/src/storage/sweep.ts +0 -25
  335. package/src/storage/thumbnails.ts +0 -65
  336. package/src/testing.ts +0 -31
  337. 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"}