@access-dlsu/leapify 0.260505.5 → 0.260506.1

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 (195) hide show
  1. package/dist/app.d.ts +15 -0
  2. package/dist/app.d.ts.map +1 -0
  3. package/dist/auth/auth.d.ts +99 -0
  4. package/dist/auth/auth.d.ts.map +1 -0
  5. package/dist/auth/middleware.d.ts +20 -0
  6. package/dist/auth/middleware.d.ts.map +1 -0
  7. package/dist/auth/types.d.ts +17 -0
  8. package/dist/auth/types.d.ts.map +1 -0
  9. package/dist/bun-sqlite-dialect-na--YwnN-CVHVB5NF.js +160 -0
  10. package/dist/bun-sqlite-dialect-na--YwnN-CVHVB5NF.js.map +1 -0
  11. package/dist/bun-sqlite-dialect-na--YwnN-QDBSQQTR.cjs +162 -0
  12. package/dist/bun-sqlite-dialect-na--YwnN-QDBSQQTR.cjs.map +1 -0
  13. package/dist/chunk-4DPT2KQR.cjs +467 -0
  14. package/dist/chunk-4DPT2KQR.cjs.map +1 -0
  15. package/dist/chunk-57ANXUP7.cjs +6191 -0
  16. package/dist/chunk-57ANXUP7.cjs.map +1 -0
  17. package/dist/chunk-5JKLV7IE.cjs +2962 -0
  18. package/dist/chunk-5JKLV7IE.cjs.map +1 -0
  19. package/dist/{chunk-FLR7TNLN.js → chunk-63CUZGSZ.js} +4 -12
  20. package/dist/chunk-63CUZGSZ.js.map +1 -0
  21. package/dist/chunk-ANNHE3PZ.js +2285 -0
  22. package/dist/chunk-ANNHE3PZ.js.map +1 -0
  23. package/dist/chunk-DPPGYCX3.cjs +72 -0
  24. package/dist/chunk-DPPGYCX3.cjs.map +1 -0
  25. package/dist/chunk-EGRHWZRV.js +3 -0
  26. package/dist/chunk-EGRHWZRV.js.map +1 -0
  27. package/dist/chunk-EIF2O2BG.js +6187 -0
  28. package/dist/chunk-EIF2O2BG.js.map +1 -0
  29. package/dist/chunk-EMMSS5I5.cjs +37 -0
  30. package/dist/chunk-EMMSS5I5.cjs.map +1 -0
  31. package/dist/chunk-FTSMZYD7.js +3025 -0
  32. package/dist/chunk-FTSMZYD7.js.map +1 -0
  33. package/dist/chunk-G3PMV62Z.js +33 -0
  34. package/dist/chunk-G3PMV62Z.js.map +1 -0
  35. package/dist/chunk-GNRL67OU.js +2949 -0
  36. package/dist/chunk-GNRL67OU.js.map +1 -0
  37. package/dist/chunk-HHNEB7YR.js +8 -0
  38. package/dist/chunk-HHNEB7YR.js.map +1 -0
  39. package/dist/chunk-IQEWVHLM.js +889 -0
  40. package/dist/chunk-IQEWVHLM.js.map +1 -0
  41. package/dist/chunk-JPVIXCF5.cjs +10 -0
  42. package/dist/chunk-JPVIXCF5.cjs.map +1 -0
  43. package/dist/chunk-MNEW2V4T.js +447 -0
  44. package/dist/chunk-MNEW2V4T.js.map +1 -0
  45. package/dist/chunk-NKIQRCOM.cjs +4 -0
  46. package/dist/chunk-NKIQRCOM.cjs.map +1 -0
  47. package/dist/chunk-QARF2YFF.cjs +2296 -0
  48. package/dist/chunk-QARF2YFF.cjs.map +1 -0
  49. package/dist/chunk-RFP2X2FA.cjs +903 -0
  50. package/dist/chunk-RFP2X2FA.cjs.map +1 -0
  51. package/dist/chunk-SXBTHGIL.js +7138 -0
  52. package/dist/chunk-SXBTHGIL.js.map +1 -0
  53. package/dist/chunk-UWXYXU7J.cjs +7166 -0
  54. package/dist/chunk-UWXYXU7J.cjs.map +1 -0
  55. package/dist/chunk-XY4KBWXT.cjs +3066 -0
  56. package/dist/chunk-XY4KBWXT.cjs.map +1 -0
  57. package/dist/{chunk-3ZWIJNZG.cjs → chunk-YFJBE3AU.cjs} +4 -12
  58. package/dist/chunk-YFJBE3AU.cjs.map +1 -0
  59. package/dist/chunk-ZYHBHSSO.js +68 -0
  60. package/dist/chunk-ZYHBHSSO.js.map +1 -0
  61. package/dist/client/{index.d.cts → auth.d.ts} +140 -394
  62. package/dist/client/auth.d.ts.map +1 -0
  63. package/dist/client/index.cjs +840 -48
  64. package/dist/client/index.cjs.map +1 -1
  65. package/dist/client/index.d.ts +34 -1134
  66. package/dist/client/index.d.ts.map +1 -0
  67. package/dist/client/index.js +839 -47
  68. package/dist/client/index.js.map +1 -1
  69. package/dist/client/pow.d.ts +28 -0
  70. package/dist/client/pow.d.ts.map +1 -0
  71. package/dist/client/session.d.ts +29 -0
  72. package/dist/client/session.d.ts.map +1 -0
  73. package/dist/client/types.d.ts +25 -23
  74. package/dist/client/types.d.ts.map +1 -0
  75. package/dist/cron/batch-release.d.ts +9 -0
  76. package/dist/cron/batch-release.d.ts.map +1 -0
  77. package/dist/cron/lifecycle-check.d.ts +10 -0
  78. package/dist/cron/lifecycle-check.d.ts.map +1 -0
  79. package/dist/cron/reconcile-slots.d.ts +10 -0
  80. package/dist/cron/reconcile-slots.d.ts.map +1 -0
  81. package/dist/cron/reminder-emails.d.ts +9 -0
  82. package/dist/cron/reminder-emails.d.ts.map +1 -0
  83. package/dist/cron/renew-watches.d.ts +9 -0
  84. package/dist/cron/renew-watches.d.ts.map +1 -0
  85. package/dist/d1-sqlite-dialect-C2B7YsIT-CEUMIZZI.js +122 -0
  86. package/dist/d1-sqlite-dialect-C2B7YsIT-CEUMIZZI.js.map +1 -0
  87. package/dist/d1-sqlite-dialect-C2B7YsIT-JUX3YYMX.cjs +124 -0
  88. package/dist/d1-sqlite-dialect-C2B7YsIT-JUX3YYMX.cjs.map +1 -0
  89. package/dist/db/index.d.ts +7 -0
  90. package/dist/db/index.d.ts.map +1 -0
  91. package/dist/db/migrate.d.ts +23 -0
  92. package/dist/db/migrate.d.ts.map +1 -0
  93. package/dist/db/schema/auth.d.ts +649 -0
  94. package/dist/db/schema/auth.d.ts.map +1 -0
  95. package/dist/db/schema/bookmarks.d.ts +88 -0
  96. package/dist/db/schema/bookmarks.d.ts.map +1 -0
  97. package/dist/db/schema/events.d.ts +539 -0
  98. package/dist/db/schema/events.d.ts.map +1 -0
  99. package/dist/db/schema/faqs.d.ts +154 -0
  100. package/dist/db/schema/faqs.d.ts.map +1 -0
  101. package/dist/db/schema/index.d.ts +8 -0
  102. package/dist/db/schema/index.d.ts.map +1 -0
  103. package/dist/db/schema/site-config.d.ts +64 -0
  104. package/dist/db/schema/site-config.d.ts.map +1 -0
  105. package/dist/db/schema/themes.d.ts +123 -0
  106. package/dist/db/schema/themes.d.ts.map +1 -0
  107. package/dist/{types-lTjxCp88.d.cts → db/schema/users.d.ts} +11 -96
  108. package/dist/db/schema/users.d.ts.map +1 -0
  109. package/dist/dist-DZHA5VYX.cjs +260 -0
  110. package/dist/dist-DZHA5VYX.cjs.map +1 -0
  111. package/dist/dist-RRQUBLLO.js +258 -0
  112. package/dist/dist-RRQUBLLO.js.map +1 -0
  113. package/dist/index.cjs +36987 -781
  114. package/dist/index.cjs.map +1 -1
  115. package/dist/index.d.ts +23 -1818
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +36846 -642
  118. package/dist/index.js.map +1 -1
  119. package/dist/kysely-adapter-5ZCECLNV.cjs +27 -0
  120. package/dist/kysely-adapter-5ZCECLNV.cjs.map +1 -0
  121. package/dist/kysely-adapter-6CZEASJQ.js +10 -0
  122. package/dist/kysely-adapter-6CZEASJQ.js.map +1 -0
  123. package/dist/lib/errors.d.ts +15 -0
  124. package/dist/lib/errors.d.ts.map +1 -0
  125. package/dist/lib/middleware/cors.d.ts +3 -0
  126. package/dist/lib/middleware/cors.d.ts.map +1 -0
  127. package/dist/lib/middleware/error-handler.d.ts +3 -0
  128. package/dist/lib/middleware/error-handler.d.ts.map +1 -0
  129. package/dist/lib/middleware/pow-challenge.cjs +7 -7
  130. package/dist/lib/middleware/pow-challenge.d.ts +29 -18
  131. package/dist/lib/middleware/pow-challenge.d.ts.map +1 -0
  132. package/dist/lib/middleware/pow-challenge.js +2 -2
  133. package/dist/lib/middleware/rate-limit.d.ts +48 -0
  134. package/dist/lib/middleware/rate-limit.d.ts.map +1 -0
  135. package/dist/lib/middleware/referer-guard.d.ts +18 -0
  136. package/dist/lib/middleware/referer-guard.d.ts.map +1 -0
  137. package/dist/lib/retry.d.ts +12 -0
  138. package/dist/lib/retry.d.ts.map +1 -0
  139. package/dist/node-sqlite-dialect-HEMUZ4B2.js +160 -0
  140. package/dist/node-sqlite-dialect-HEMUZ4B2.js.map +1 -0
  141. package/dist/node-sqlite-dialect-QUBEEKKU.cjs +162 -0
  142. package/dist/node-sqlite-dialect-QUBEEKKU.cjs.map +1 -0
  143. package/dist/queues/handlers.d.ts +13 -0
  144. package/dist/queues/handlers.d.ts.map +1 -0
  145. package/dist/queues/jobs.d.ts +42 -0
  146. package/dist/queues/jobs.d.ts.map +1 -0
  147. package/dist/routes/events.d.ts +4 -0
  148. package/dist/routes/events.d.ts.map +1 -0
  149. package/dist/routes/faqs.d.ts +4 -0
  150. package/dist/routes/faqs.d.ts.map +1 -0
  151. package/dist/routes/health.d.ts +4 -0
  152. package/dist/routes/health.d.ts.map +1 -0
  153. package/dist/routes/internal/gforms-webhook.d.ts +4 -0
  154. package/dist/routes/internal/gforms-webhook.d.ts.map +1 -0
  155. package/dist/routes/site-config.d.ts +4 -0
  156. package/dist/routes/site-config.d.ts.map +1 -0
  157. package/dist/routes/themes.d.ts +4 -0
  158. package/dist/routes/themes.d.ts.map +1 -0
  159. package/dist/routes/uploads.d.ts +4 -0
  160. package/dist/routes/uploads.d.ts.map +1 -0
  161. package/dist/routes/users.d.ts +4 -0
  162. package/dist/routes/users.d.ts.map +1 -0
  163. package/dist/services/cache.d.ts +22 -0
  164. package/dist/services/cache.d.ts.map +1 -0
  165. package/dist/services/contentful-management.d.ts +53 -0
  166. package/dist/services/contentful-management.d.ts.map +1 -0
  167. package/dist/services/contentful.d.ts +97 -0
  168. package/dist/services/contentful.d.ts.map +1 -0
  169. package/dist/services/email.d.ts +75 -0
  170. package/dist/services/email.d.ts.map +1 -0
  171. package/dist/services/gforms.d.ts +60 -0
  172. package/dist/services/gforms.d.ts.map +1 -0
  173. package/dist/services/resend.d.ts +34 -0
  174. package/dist/services/resend.d.ts.map +1 -0
  175. package/dist/services/ses.d.ts +58 -0
  176. package/dist/services/ses.d.ts.map +1 -0
  177. package/dist/services/slots.d.ts +48 -0
  178. package/dist/services/slots.d.ts.map +1 -0
  179. package/dist/services/snapshot.d.ts +90 -0
  180. package/dist/services/snapshot.d.ts.map +1 -0
  181. package/dist/types.d.ts +66 -0
  182. package/dist/types.d.ts.map +1 -0
  183. package/dist/worker-handler.d.ts +64 -0
  184. package/dist/worker-handler.d.ts.map +1 -0
  185. package/dist/worker.d.ts +36 -0
  186. package/dist/worker.d.ts.map +1 -0
  187. package/dist/worker.js +2195 -2553
  188. package/dist/worker.js.map +1 -1
  189. package/package.json +152 -152
  190. package/dist/chunk-3ZWIJNZG.cjs.map +0 -1
  191. package/dist/chunk-FLR7TNLN.js.map +0 -1
  192. package/dist/client/types.d.cts +0 -192
  193. package/dist/index.d.cts +0 -1879
  194. package/dist/lib/middleware/pow-challenge.d.cts +0 -47
  195. package/dist/types-lTjxCp88.d.ts +0 -208
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ var chunk57ANXUP7_cjs = require('./chunk-57ANXUP7.cjs');
4
+ require('./chunk-JPVIXCF5.cjs');
5
+ require('./chunk-5JKLV7IE.cjs');
6
+ require('./chunk-4DPT2KQR.cjs');
7
+ require('./chunk-UWXYXU7J.cjs');
8
+ require('./chunk-DPPGYCX3.cjs');
9
+ require('./chunk-XY4KBWXT.cjs');
10
+ require('./chunk-EMMSS5I5.cjs');
11
+
12
+
13
+
14
+ Object.defineProperty(exports, "createKyselyAdapter", {
15
+ enumerable: true,
16
+ get: function () { return chunk57ANXUP7_cjs.createKyselyAdapter; }
17
+ });
18
+ Object.defineProperty(exports, "getKyselyDatabaseType", {
19
+ enumerable: true,
20
+ get: function () { return chunk57ANXUP7_cjs.getKyselyDatabaseType; }
21
+ });
22
+ Object.defineProperty(exports, "kyselyAdapter", {
23
+ enumerable: true,
24
+ get: function () { return chunk57ANXUP7_cjs.kyselyAdapter; }
25
+ });
26
+ //# sourceMappingURL=kysely-adapter-5ZCECLNV.cjs.map
27
+ //# sourceMappingURL=kysely-adapter-5ZCECLNV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"kysely-adapter-5ZCECLNV.cjs"}
@@ -0,0 +1,10 @@
1
+ export { createKyselyAdapter, getKyselyDatabaseType, kyselyAdapter } from './chunk-EIF2O2BG.js';
2
+ import './chunk-HHNEB7YR.js';
3
+ import './chunk-GNRL67OU.js';
4
+ import './chunk-MNEW2V4T.js';
5
+ import './chunk-SXBTHGIL.js';
6
+ import './chunk-ZYHBHSSO.js';
7
+ import './chunk-FTSMZYD7.js';
8
+ import './chunk-G3PMV62Z.js';
9
+ //# sourceMappingURL=kysely-adapter-6CZEASJQ.js.map
10
+ //# sourceMappingURL=kysely-adapter-6CZEASJQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"kysely-adapter-6CZEASJQ.js"}
@@ -0,0 +1,15 @@
1
+ export declare class LeapifyError extends Error {
2
+ readonly statusCode: number;
3
+ readonly code: string;
4
+ constructor(statusCode: number, code: string, message: string);
5
+ }
6
+ export declare const unauthorized: (message?: string) => LeapifyError;
7
+ export declare const domainRestricted: () => LeapifyError;
8
+ export declare const forbidden: (message?: string) => LeapifyError;
9
+ export declare const notFound: (resource?: string) => LeapifyError;
10
+ export declare const badRequest: (message?: string) => LeapifyError;
11
+ export declare const conflict: (message?: string) => LeapifyError;
12
+ export declare const tooManyRequests: (message?: string) => LeapifyError;
13
+ export declare const serviceUnavailable: (message?: string) => LeapifyError;
14
+ export declare const internalError: (message?: string) => LeapifyError;
15
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;aAEnB,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,MAAM;gBADZ,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED,eAAO,MAAM,YAAY,GAAI,gBAAwB,iBACL,CAAA;AAEhD,eAAO,MAAM,gBAAgB,oBAK1B,CAAA;AAEH,eAAO,MAAM,SAAS,GAAI,gBAAqB,iBACF,CAAA;AAE7C,eAAO,MAAM,QAAQ,GAAI,iBAAqB,iBACe,CAAA;AAE7D,eAAO,MAAM,UAAU,GAAI,gBAAuB,iBACH,CAAA;AAE/C,eAAO,MAAM,QAAQ,GAAI,gBAAoB,iBACD,CAAA;AAE5C,eAAO,MAAM,eAAe,GAAI,gBAA6B,iBACR,CAAA;AAErD,eAAO,MAAM,kBAAkB,GAAI,gBAA2C,iBACvB,CAAA;AAEvD,eAAO,MAAM,aAAa,GAAI,gBAAiC,iBACb,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ export declare function createCorsMiddleware(allowedOrigins: string[]): MiddlewareHandler;
3
+ //# sourceMappingURL=cors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../src/lib/middleware/cors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AAE7C,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAgChF"}
@@ -0,0 +1,3 @@
1
+ import type { ErrorHandler } from 'hono';
2
+ export declare const errorHandler: ErrorHandler;
3
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/lib/middleware/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAGxC,eAAO,MAAM,YAAY,EAAE,YAc1B,CAAA"}
@@ -1,29 +1,29 @@
1
1
  'use strict';
2
2
 
3
- var chunk3ZWIJNZG_cjs = require('../../chunk-3ZWIJNZG.cjs');
4
- require('../../chunk-Q7SFCCGT.cjs');
3
+ var chunkQARF2YFF_cjs = require('../../chunk-QARF2YFF.cjs');
4
+ require('../../chunk-EMMSS5I5.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "POW_COOKIE_NAME", {
9
9
  enumerable: true,
10
- get: function () { return chunk3ZWIJNZG_cjs.POW_COOKIE_NAME; }
10
+ get: function () { return chunkQARF2YFF_cjs.POW_COOKIE_NAME; }
11
11
  });
12
12
  Object.defineProperty(exports, "POW_PATH", {
13
13
  enumerable: true,
14
- get: function () { return chunk3ZWIJNZG_cjs.POW_PATH; }
14
+ get: function () { return chunkQARF2YFF_cjs.POW_PATH; }
15
15
  });
16
16
  Object.defineProperty(exports, "POW_VERIFY_PATH", {
17
17
  enumerable: true,
18
- get: function () { return chunk3ZWIJNZG_cjs.POW_VERIFY_PATH; }
18
+ get: function () { return chunkQARF2YFF_cjs.POW_VERIFY_PATH; }
19
19
  });
20
20
  Object.defineProperty(exports, "createPowChallengeMiddleware", {
21
21
  enumerable: true,
22
- get: function () { return chunk3ZWIJNZG_cjs.createPowChallengeMiddleware; }
22
+ get: function () { return chunkQARF2YFF_cjs.createPowChallengeMiddleware; }
23
23
  });
24
24
  Object.defineProperty(exports, "handlePowVerify", {
25
25
  enumerable: true,
26
- get: function () { return chunk3ZWIJNZG_cjs.handlePowVerify; }
26
+ get: function () { return chunkQARF2YFF_cjs.handlePowVerify; }
27
27
  });
28
28
  //# sourceMappingURL=pow-challenge.cjs.map
29
29
  //# sourceMappingURL=pow-challenge.cjs.map
@@ -1,37 +1,49 @@
1
- import * as hono_utils_http_status from 'hono/utils/http-status';
2
- import * as hono from 'hono';
3
- import { Context } from 'hono';
4
- import { L as LeapifyBindings } from '../../types-lTjxCp88.js';
5
- import 'drizzle-orm/sqlite-core';
6
- import '@cloudflare/workers-types';
7
-
1
+ /**
2
+ * Proof-of-Work Challenge Middleware (ADR-006, Layer 7).
3
+ *
4
+ * Anubis-inspired PoW challenge, implemented natively as Hono middleware.
5
+ * Requires browsers to solve a SHA-256 PoW puzzle before accessing API endpoints.
6
+ * After solving, a signed cookie is issued so subsequent requests bypass the challenge.
7
+ *
8
+ * Flow:
9
+ * 1. Request arrives → no valid PoW cookie → serve challenge HTML page
10
+ * 2. Browser runs JS PoW (find nonce where SHA-256(challengeId:nonce) meets difficulty)
11
+ * 3. Client POSTs solution to /.well-known/leapify/pow/verify
12
+ * 4. Server validates → sets signed cookie → redirects back to original URL
13
+ * 5. Subsequent requests include cookie → pass through immediately
14
+ *
15
+ * Signing key: INTERNAL_API_SECRET (reused — same HMAC purpose as internal route auth)
16
+ * Difficulty: POW_DIFFICULTY env var or DEFAULT_POW_DIFFICULTY (leading zero bits)
17
+ */
18
+ import type { Context } from 'hono';
19
+ import type { LeapifyBindings } from '../../types';
8
20
  /** Base path for PoW challenge routes */
9
- declare const POW_PATH = "/.well-known/leapify/pow";
21
+ export declare const POW_PATH = "/.well-known/leapify/pow";
10
22
  /** Challenge verification endpoint */
11
- declare const POW_VERIFY_PATH = "/.well-known/leapify/pow/verify";
23
+ export declare const POW_VERIFY_PATH = "/.well-known/leapify/pow/verify";
12
24
  /** Cookie name for PoW auth token */
13
- declare const POW_COOKIE_NAME = "leapify-pow";
25
+ export declare const POW_COOKIE_NAME = "leapify-pow";
14
26
  /**
15
27
  * POST /.well-known/leapify/pow/verify
16
28
  *
17
29
  * Validates a completed PoW challenge and issues a signed cookie.
18
30
  * Exported for mounting in app.ts.
19
31
  */
20
- declare function handlePowVerify(c: Context<{
32
+ export declare function handlePowVerify(c: Context<{
21
33
  Bindings: LeapifyBindings;
22
- }>): Promise<(Response & hono.TypedResponse<{
34
+ }>): Promise<(Response & import("hono").TypedResponse<{
23
35
  error: {
24
36
  code: string;
25
37
  message: string;
26
38
  };
27
- }, 422, "json">) | (Response & hono.TypedResponse<{
39
+ }, 422, "json">) | (Response & import("hono").TypedResponse<{
28
40
  error: {
29
41
  code: string;
30
42
  message: string;
31
43
  };
32
- }, 404, "json">) | (Response & hono.TypedResponse<{
44
+ }, 404, "json">) | (Response & import("hono").TypedResponse<{
33
45
  redirect: string;
34
- }, hono_utils_http_status.ContentfulStatusCode, "json">)>;
46
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">)>;
35
47
  /**
36
48
  * PoW challenge middleware.
37
49
  *
@@ -40,8 +52,7 @@ declare function handlePowVerify(c: Context<{
40
52
  * app.use('*', createPowChallengeMiddleware()) ← here
41
53
  * app.use('*', createRefererGuard(...))
42
54
  */
43
- declare function createPowChallengeMiddleware(): hono.MiddlewareHandler<{
55
+ export declare function createPowChallengeMiddleware(): import("hono").MiddlewareHandler<{
44
56
  Bindings: LeapifyBindings;
45
57
  }, string, {}, Response>;
46
-
47
- export { POW_COOKIE_NAME, POW_PATH, POW_VERIFY_PATH, createPowChallengeMiddleware, handlePowVerify };
58
+ //# sourceMappingURL=pow-challenge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pow-challenge.d.ts","sourceRoot":"","sources":["../../../src/lib/middleware/pow-challenge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,yCAAyC;AACzC,eAAO,MAAM,QAAQ,6BAA6B,CAAA;AAElD,sCAAsC;AACtC,eAAO,MAAM,eAAe,oCAAuB,CAAA;AAEnD,qCAAqC;AACrC,eAAO,MAAM,eAAe,gBAAgB,CAAA;AA2L5C;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,CAAC,EAAE,OAAO,CAAC;IAAE,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC;;;;;;;;;;;;oEA+D1C;AAID;;;;;;;GAOG;AACH,wBAAgB,4BAA4B;cACN,eAAe;yBAwCpD"}
@@ -1,4 +1,4 @@
1
- export { POW_COOKIE_NAME, POW_PATH, POW_VERIFY_PATH, createPowChallengeMiddleware, handlePowVerify } from '../../chunk-FLR7TNLN.js';
2
- import '../../chunk-PZ5AY32C.js';
1
+ export { POW_COOKIE_NAME, POW_PATH, POW_VERIFY_PATH, createPowChallengeMiddleware, handlePowVerify } from '../../chunk-ANNHE3PZ.js';
2
+ import '../../chunk-G3PMV62Z.js';
3
3
  //# sourceMappingURL=pow-challenge.js.map
4
4
  //# sourceMappingURL=pow-challenge.js.map
@@ -0,0 +1,48 @@
1
+ import type { LeapifyBindings } from '../../types';
2
+ export interface RateLimitConfig {
3
+ /** KV key namespace segment — e.g. 'events' or 'bookmarks' */
4
+ endpoint: string;
5
+ /** Max requests allowed within the window */
6
+ limit: number;
7
+ /** Window size in seconds */
8
+ windowSec: number;
9
+ /**
10
+ * How to identify the requester.
11
+ * - 'ip' → CF-Connecting-IP (guests, public endpoints)
12
+ * - 'uid' → authenticated user ID from c.get('user') (must run after authMiddleware)
13
+ */
14
+ identifier: 'ip' | 'uid';
15
+ }
16
+ /**
17
+ * KV token-bucket rate limiter (ADR-006, Layer 3 & 5).
18
+ *
19
+ * Key schema: `rl:<endpoint>:<identifier>`
20
+ *
21
+ * Uses a simple counter with KV TTL as the window reset mechanism.
22
+ * On first request in a window, the key is created with expirationTtl = windowSec.
23
+ * Subsequent requests within the window increment the counter.
24
+ * When the key expires, the window resets automatically.
25
+ *
26
+ * Trade-off: this is eventually consistent under concurrent requests at window
27
+ * boundaries — acceptable given the ~5% over-limit tolerance for edge caches.
28
+ */
29
+ export declare function createRateLimitMiddleware(config: RateLimitConfig): import("hono").MiddlewareHandler<{
30
+ Bindings: LeapifyBindings;
31
+ }, string, {}, Response>;
32
+ /** GET /events — 60 req/60s per IP */
33
+ export declare const eventsListRateLimit: import("hono").MiddlewareHandler<{
34
+ Bindings: LeapifyBindings;
35
+ }, string, {}, Response>;
36
+ /** GET /events/:slug/slots — 120 req/60s per IP */
37
+ export declare const eventsSlotsRateLimit: import("hono").MiddlewareHandler<{
38
+ Bindings: LeapifyBindings;
39
+ }, string, {}, Response>;
40
+ /** POST /users/me/bookmarks — 10 req/60s per UID (must run after authMiddleware) */
41
+ export declare const bookmarksRateLimit: import("hono").MiddlewareHandler<{
42
+ Bindings: LeapifyBindings;
43
+ }, string, {}, Response>;
44
+ /** POST /events (admin) — 20 req/60s per UID (must run after authMiddleware) */
45
+ export declare const adminEventsRateLimit: import("hono").MiddlewareHandler<{
46
+ Bindings: LeapifyBindings;
47
+ }, string, {}, Response>;
48
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/lib/middleware/rate-limit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAGlD,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAA;IACb,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,UAAU,EAAE,IAAI,GAAG,KAAK,CAAA;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe;cAG3B,eAAe;yBAoCpD;AAID,sCAAsC;AACtC,eAAO,MAAM,mBAAmB;cAzCM,eAAe;wBA8CnD,CAAA;AAEF,mDAAmD;AACnD,eAAO,MAAM,oBAAoB;cAjDK,eAAe;wBAsDnD,CAAA;AAEF,oFAAoF;AACpF,eAAO,MAAM,kBAAkB;cAzDO,eAAe;wBA8DnD,CAAA;AAEF,gFAAgF;AAChF,eAAO,MAAM,oBAAoB;cAjEK,eAAe;wBAsEnD,CAAA"}
@@ -0,0 +1,18 @@
1
+ import type { LeapifyBindings } from '../../types';
2
+ /**
3
+ * Referer guard for mutation endpoints (ADR-006, Layer 6).
4
+ *
5
+ * Validates that the `Referer` header on state-mutating requests (POST, PATCH, PUT, DELETE)
6
+ * matches one of the configured allowed origins. Safe methods (GET, HEAD, OPTIONS) are
7
+ * always allowed through without a Referer check.
8
+ *
9
+ * This is a friction layer — it stops naive raw-HTTP clients that don't set Referer.
10
+ * Sophisticated clients can spoof it, so this must NOT be relied on as the sole control
11
+ * for authenticated mutation endpoints (Firebase JWT is the primary control there).
12
+ *
13
+ * Skipped entirely for /health and /internal routes.
14
+ */
15
+ export declare function createRefererGuard(allowedOrigins: string[]): import("hono").MiddlewareHandler<{
16
+ Bindings: LeapifyBindings;
17
+ }, string, {}, Response>;
18
+ //# sourceMappingURL=referer-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referer-guard.d.ts","sourceRoot":"","sources":["../../../src/lib/middleware/referer-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAGlD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE;cAIrB,eAAe;yBAmBpD"}
@@ -0,0 +1,12 @@
1
+ export interface RetryOptions {
2
+ maxAttempts?: number;
3
+ baseDelayMs?: number;
4
+ maxDelayMs?: number;
5
+ shouldRetry?: (error: unknown) => boolean;
6
+ }
7
+ /**
8
+ * Retry an async function with exponential backoff + jitter.
9
+ * Default: 3 attempts, 100ms base delay, 5s max delay.
10
+ */
11
+ export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
12
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/lib/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAA;CAC1C;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CA0BZ"}
@@ -0,0 +1,160 @@
1
+ import { CompiledQuery, sql } from './chunk-SXBTHGIL.js';
2
+ import { DefaultQueryCompiler, DEFAULT_MIGRATION_TABLE, DEFAULT_MIGRATION_LOCK_TABLE } from './chunk-FTSMZYD7.js';
3
+ import './chunk-G3PMV62Z.js';
4
+
5
+ // node_modules/@better-auth/kysely-adapter/dist/node-sqlite-dialect.mjs
6
+ var NodeSqliteAdapter = class {
7
+ get supportsCreateIfNotExists() {
8
+ return true;
9
+ }
10
+ get supportsTransactionalDdl() {
11
+ return false;
12
+ }
13
+ get supportsReturning() {
14
+ return true;
15
+ }
16
+ async acquireMigrationLock() {
17
+ }
18
+ async releaseMigrationLock() {
19
+ }
20
+ get supportsOutput() {
21
+ return true;
22
+ }
23
+ };
24
+ var NodeSqliteDriver = class {
25
+ #config;
26
+ #connectionMutex = new ConnectionMutex();
27
+ #db;
28
+ #connection;
29
+ constructor(config) {
30
+ this.#config = { ...config };
31
+ }
32
+ async init() {
33
+ this.#db = this.#config.database;
34
+ this.#connection = new NodeSqliteConnection(this.#db);
35
+ if (this.#config.onCreateConnection) await this.#config.onCreateConnection(this.#connection);
36
+ }
37
+ async acquireConnection() {
38
+ await this.#connectionMutex.lock();
39
+ return this.#connection;
40
+ }
41
+ async beginTransaction(connection) {
42
+ await connection.executeQuery(CompiledQuery.raw("begin"));
43
+ }
44
+ async commitTransaction(connection) {
45
+ await connection.executeQuery(CompiledQuery.raw("commit"));
46
+ }
47
+ async rollbackTransaction(connection) {
48
+ await connection.executeQuery(CompiledQuery.raw("rollback"));
49
+ }
50
+ async releaseConnection() {
51
+ this.#connectionMutex.unlock();
52
+ }
53
+ async destroy() {
54
+ this.#db?.close();
55
+ }
56
+ };
57
+ var NodeSqliteConnection = class {
58
+ #db;
59
+ constructor(db) {
60
+ this.#db = db;
61
+ }
62
+ executeQuery(compiledQuery) {
63
+ const { sql: sql2, parameters } = compiledQuery;
64
+ const rows = this.#db.prepare(sql2).all(...parameters);
65
+ return Promise.resolve({ rows });
66
+ }
67
+ async *streamQuery() {
68
+ throw new Error("Streaming query is not supported by SQLite driver.");
69
+ }
70
+ };
71
+ var ConnectionMutex = class {
72
+ #promise;
73
+ #resolve;
74
+ async lock() {
75
+ while (this.#promise !== void 0) await this.#promise;
76
+ this.#promise = new Promise((resolve) => {
77
+ this.#resolve = resolve;
78
+ });
79
+ }
80
+ unlock() {
81
+ const resolve = this.#resolve;
82
+ this.#promise = void 0;
83
+ this.#resolve = void 0;
84
+ resolve?.();
85
+ }
86
+ };
87
+ var NodeSqliteIntrospector = class {
88
+ #db;
89
+ constructor(db) {
90
+ this.#db = db;
91
+ }
92
+ async getSchemas() {
93
+ return [];
94
+ }
95
+ async getTables(options = { withInternalKyselyTables: false }) {
96
+ let query = this.#db.selectFrom("sqlite_schema").where("type", "=", "table").where("name", "not like", "sqlite_%").select("name").$castTo();
97
+ if (!options.withInternalKyselyTables) query = query.where("name", "!=", DEFAULT_MIGRATION_TABLE).where("name", "!=", DEFAULT_MIGRATION_LOCK_TABLE);
98
+ const tables = await query.execute();
99
+ return Promise.all(tables.map(({ name }) => this.#getTableMetadata(name)));
100
+ }
101
+ async getMetadata(options) {
102
+ return { tables: await this.getTables(options) };
103
+ }
104
+ async #getTableMetadata(table) {
105
+ const db = this.#db;
106
+ const autoIncrementCol = (await db.selectFrom("sqlite_master").where("name", "=", table).select("sql").$castTo().execute())[0]?.sql?.split(/[\(\),]/)?.find((it) => it.toLowerCase().includes("autoincrement"))?.split(/\s+/)?.[0]?.replace(/["`]/g, "");
107
+ return {
108
+ name: table,
109
+ columns: (await db.selectFrom(sql`pragma_table_info(${table})`.as("table_info")).select([
110
+ "name",
111
+ "type",
112
+ "notnull",
113
+ "dflt_value"
114
+ ]).execute()).map((col) => ({
115
+ name: col.name,
116
+ dataType: col.type,
117
+ isNullable: !col.notnull,
118
+ isAutoIncrementing: col.name === autoIncrementCol,
119
+ hasDefaultValue: col.dflt_value != null
120
+ })),
121
+ isView: true
122
+ };
123
+ }
124
+ };
125
+ var NodeSqliteQueryCompiler = class extends DefaultQueryCompiler {
126
+ getCurrentParameterPlaceholder() {
127
+ return "?";
128
+ }
129
+ getLeftIdentifierWrapper() {
130
+ return '"';
131
+ }
132
+ getRightIdentifierWrapper() {
133
+ return '"';
134
+ }
135
+ getAutoIncrement() {
136
+ return "autoincrement";
137
+ }
138
+ };
139
+ var NodeSqliteDialect = class {
140
+ #config;
141
+ constructor(config) {
142
+ this.#config = { ...config };
143
+ }
144
+ createDriver() {
145
+ return new NodeSqliteDriver(this.#config);
146
+ }
147
+ createQueryCompiler() {
148
+ return new NodeSqliteQueryCompiler();
149
+ }
150
+ createAdapter() {
151
+ return new NodeSqliteAdapter();
152
+ }
153
+ createIntrospector(db) {
154
+ return new NodeSqliteIntrospector(db);
155
+ }
156
+ };
157
+
158
+ export { NodeSqliteDialect };
159
+ //# sourceMappingURL=node-sqlite-dialect-HEMUZ4B2.js.map
160
+ //# sourceMappingURL=node-sqlite-dialect-HEMUZ4B2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/@better-auth/kysely-adapter/dist/node-sqlite-dialect.mjs"],"names":["sql"],"mappings":"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","file":"node-sqlite-dialect-HEMUZ4B2.js","sourcesContent":["import { CompiledQuery, DEFAULT_MIGRATION_LOCK_TABLE, DEFAULT_MIGRATION_TABLE, DefaultQueryCompiler, sql } from \"kysely\";\n//#region src/node-sqlite-dialect.ts\nvar NodeSqliteAdapter = class {\n\tget supportsCreateIfNotExists() {\n\t\treturn true;\n\t}\n\tget supportsTransactionalDdl() {\n\t\treturn false;\n\t}\n\tget supportsReturning() {\n\t\treturn true;\n\t}\n\tasync acquireMigrationLock() {}\n\tasync releaseMigrationLock() {}\n\tget supportsOutput() {\n\t\treturn true;\n\t}\n};\nvar NodeSqliteDriver = class {\n\t#config;\n\t#connectionMutex = new ConnectionMutex();\n\t#db;\n\t#connection;\n\tconstructor(config) {\n\t\tthis.#config = { ...config };\n\t}\n\tasync init() {\n\t\tthis.#db = this.#config.database;\n\t\tthis.#connection = new NodeSqliteConnection(this.#db);\n\t\tif (this.#config.onCreateConnection) await this.#config.onCreateConnection(this.#connection);\n\t}\n\tasync acquireConnection() {\n\t\tawait this.#connectionMutex.lock();\n\t\treturn this.#connection;\n\t}\n\tasync beginTransaction(connection) {\n\t\tawait connection.executeQuery(CompiledQuery.raw(\"begin\"));\n\t}\n\tasync commitTransaction(connection) {\n\t\tawait connection.executeQuery(CompiledQuery.raw(\"commit\"));\n\t}\n\tasync rollbackTransaction(connection) {\n\t\tawait connection.executeQuery(CompiledQuery.raw(\"rollback\"));\n\t}\n\tasync releaseConnection() {\n\t\tthis.#connectionMutex.unlock();\n\t}\n\tasync destroy() {\n\t\tthis.#db?.close();\n\t}\n};\nvar NodeSqliteConnection = class {\n\t#db;\n\tconstructor(db) {\n\t\tthis.#db = db;\n\t}\n\texecuteQuery(compiledQuery) {\n\t\tconst { sql, parameters } = compiledQuery;\n\t\tconst rows = this.#db.prepare(sql).all(...parameters);\n\t\treturn Promise.resolve({ rows });\n\t}\n\tasync *streamQuery() {\n\t\tthrow new Error(\"Streaming query is not supported by SQLite driver.\");\n\t}\n};\nvar ConnectionMutex = class {\n\t#promise;\n\t#resolve;\n\tasync lock() {\n\t\twhile (this.#promise !== void 0) await this.#promise;\n\t\tthis.#promise = new Promise((resolve) => {\n\t\t\tthis.#resolve = resolve;\n\t\t});\n\t}\n\tunlock() {\n\t\tconst resolve = this.#resolve;\n\t\tthis.#promise = void 0;\n\t\tthis.#resolve = void 0;\n\t\tresolve?.();\n\t}\n};\nvar NodeSqliteIntrospector = class {\n\t#db;\n\tconstructor(db) {\n\t\tthis.#db = db;\n\t}\n\tasync getSchemas() {\n\t\treturn [];\n\t}\n\tasync getTables(options = { withInternalKyselyTables: false }) {\n\t\tlet query = this.#db.selectFrom(\"sqlite_schema\").where(\"type\", \"=\", \"table\").where(\"name\", \"not like\", \"sqlite_%\").select(\"name\").$castTo();\n\t\tif (!options.withInternalKyselyTables) query = query.where(\"name\", \"!=\", DEFAULT_MIGRATION_TABLE).where(\"name\", \"!=\", DEFAULT_MIGRATION_LOCK_TABLE);\n\t\tconst tables = await query.execute();\n\t\treturn Promise.all(tables.map(({ name }) => this.#getTableMetadata(name)));\n\t}\n\tasync getMetadata(options) {\n\t\treturn { tables: await this.getTables(options) };\n\t}\n\tasync #getTableMetadata(table) {\n\t\tconst db = this.#db;\n\t\tconst autoIncrementCol = (await db.selectFrom(\"sqlite_master\").where(\"name\", \"=\", table).select(\"sql\").$castTo().execute())[0]?.sql?.split(/[\\(\\),]/)?.find((it) => it.toLowerCase().includes(\"autoincrement\"))?.split(/\\s+/)?.[0]?.replace(/[\"`]/g, \"\");\n\t\treturn {\n\t\t\tname: table,\n\t\t\tcolumns: (await db.selectFrom(sql`pragma_table_info(${table})`.as(\"table_info\")).select([\n\t\t\t\t\"name\",\n\t\t\t\t\"type\",\n\t\t\t\t\"notnull\",\n\t\t\t\t\"dflt_value\"\n\t\t\t]).execute()).map((col) => ({\n\t\t\t\tname: col.name,\n\t\t\t\tdataType: col.type,\n\t\t\t\tisNullable: !col.notnull,\n\t\t\t\tisAutoIncrementing: col.name === autoIncrementCol,\n\t\t\t\thasDefaultValue: col.dflt_value != null\n\t\t\t})),\n\t\t\tisView: true\n\t\t};\n\t}\n};\nvar NodeSqliteQueryCompiler = class extends DefaultQueryCompiler {\n\tgetCurrentParameterPlaceholder() {\n\t\treturn \"?\";\n\t}\n\tgetLeftIdentifierWrapper() {\n\t\treturn \"\\\"\";\n\t}\n\tgetRightIdentifierWrapper() {\n\t\treturn \"\\\"\";\n\t}\n\tgetAutoIncrement() {\n\t\treturn \"autoincrement\";\n\t}\n};\nvar NodeSqliteDialect = class {\n\t#config;\n\tconstructor(config) {\n\t\tthis.#config = { ...config };\n\t}\n\tcreateDriver() {\n\t\treturn new NodeSqliteDriver(this.#config);\n\t}\n\tcreateQueryCompiler() {\n\t\treturn new NodeSqliteQueryCompiler();\n\t}\n\tcreateAdapter() {\n\t\treturn new NodeSqliteAdapter();\n\t}\n\tcreateIntrospector(db) {\n\t\treturn new NodeSqliteIntrospector(db);\n\t}\n};\n//#endregion\nexport { NodeSqliteDialect };\n"]}
@@ -0,0 +1,162 @@
1
+ 'use strict';
2
+
3
+ var chunkUWXYXU7J_cjs = require('./chunk-UWXYXU7J.cjs');
4
+ var chunkXY4KBWXT_cjs = require('./chunk-XY4KBWXT.cjs');
5
+ require('./chunk-EMMSS5I5.cjs');
6
+
7
+ // node_modules/@better-auth/kysely-adapter/dist/node-sqlite-dialect.mjs
8
+ var NodeSqliteAdapter = class {
9
+ get supportsCreateIfNotExists() {
10
+ return true;
11
+ }
12
+ get supportsTransactionalDdl() {
13
+ return false;
14
+ }
15
+ get supportsReturning() {
16
+ return true;
17
+ }
18
+ async acquireMigrationLock() {
19
+ }
20
+ async releaseMigrationLock() {
21
+ }
22
+ get supportsOutput() {
23
+ return true;
24
+ }
25
+ };
26
+ var NodeSqliteDriver = class {
27
+ #config;
28
+ #connectionMutex = new ConnectionMutex();
29
+ #db;
30
+ #connection;
31
+ constructor(config) {
32
+ this.#config = { ...config };
33
+ }
34
+ async init() {
35
+ this.#db = this.#config.database;
36
+ this.#connection = new NodeSqliteConnection(this.#db);
37
+ if (this.#config.onCreateConnection) await this.#config.onCreateConnection(this.#connection);
38
+ }
39
+ async acquireConnection() {
40
+ await this.#connectionMutex.lock();
41
+ return this.#connection;
42
+ }
43
+ async beginTransaction(connection) {
44
+ await connection.executeQuery(chunkUWXYXU7J_cjs.CompiledQuery.raw("begin"));
45
+ }
46
+ async commitTransaction(connection) {
47
+ await connection.executeQuery(chunkUWXYXU7J_cjs.CompiledQuery.raw("commit"));
48
+ }
49
+ async rollbackTransaction(connection) {
50
+ await connection.executeQuery(chunkUWXYXU7J_cjs.CompiledQuery.raw("rollback"));
51
+ }
52
+ async releaseConnection() {
53
+ this.#connectionMutex.unlock();
54
+ }
55
+ async destroy() {
56
+ this.#db?.close();
57
+ }
58
+ };
59
+ var NodeSqliteConnection = class {
60
+ #db;
61
+ constructor(db) {
62
+ this.#db = db;
63
+ }
64
+ executeQuery(compiledQuery) {
65
+ const { sql: sql2, parameters } = compiledQuery;
66
+ const rows = this.#db.prepare(sql2).all(...parameters);
67
+ return Promise.resolve({ rows });
68
+ }
69
+ async *streamQuery() {
70
+ throw new Error("Streaming query is not supported by SQLite driver.");
71
+ }
72
+ };
73
+ var ConnectionMutex = class {
74
+ #promise;
75
+ #resolve;
76
+ async lock() {
77
+ while (this.#promise !== void 0) await this.#promise;
78
+ this.#promise = new Promise((resolve) => {
79
+ this.#resolve = resolve;
80
+ });
81
+ }
82
+ unlock() {
83
+ const resolve = this.#resolve;
84
+ this.#promise = void 0;
85
+ this.#resolve = void 0;
86
+ resolve?.();
87
+ }
88
+ };
89
+ var NodeSqliteIntrospector = class {
90
+ #db;
91
+ constructor(db) {
92
+ this.#db = db;
93
+ }
94
+ async getSchemas() {
95
+ return [];
96
+ }
97
+ async getTables(options = { withInternalKyselyTables: false }) {
98
+ let query = this.#db.selectFrom("sqlite_schema").where("type", "=", "table").where("name", "not like", "sqlite_%").select("name").$castTo();
99
+ if (!options.withInternalKyselyTables) query = query.where("name", "!=", chunkXY4KBWXT_cjs.DEFAULT_MIGRATION_TABLE).where("name", "!=", chunkXY4KBWXT_cjs.DEFAULT_MIGRATION_LOCK_TABLE);
100
+ const tables = await query.execute();
101
+ return Promise.all(tables.map(({ name }) => this.#getTableMetadata(name)));
102
+ }
103
+ async getMetadata(options) {
104
+ return { tables: await this.getTables(options) };
105
+ }
106
+ async #getTableMetadata(table) {
107
+ const db = this.#db;
108
+ const autoIncrementCol = (await db.selectFrom("sqlite_master").where("name", "=", table).select("sql").$castTo().execute())[0]?.sql?.split(/[\(\),]/)?.find((it) => it.toLowerCase().includes("autoincrement"))?.split(/\s+/)?.[0]?.replace(/["`]/g, "");
109
+ return {
110
+ name: table,
111
+ columns: (await db.selectFrom(chunkUWXYXU7J_cjs.sql`pragma_table_info(${table})`.as("table_info")).select([
112
+ "name",
113
+ "type",
114
+ "notnull",
115
+ "dflt_value"
116
+ ]).execute()).map((col) => ({
117
+ name: col.name,
118
+ dataType: col.type,
119
+ isNullable: !col.notnull,
120
+ isAutoIncrementing: col.name === autoIncrementCol,
121
+ hasDefaultValue: col.dflt_value != null
122
+ })),
123
+ isView: true
124
+ };
125
+ }
126
+ };
127
+ var NodeSqliteQueryCompiler = class extends chunkXY4KBWXT_cjs.DefaultQueryCompiler {
128
+ getCurrentParameterPlaceholder() {
129
+ return "?";
130
+ }
131
+ getLeftIdentifierWrapper() {
132
+ return '"';
133
+ }
134
+ getRightIdentifierWrapper() {
135
+ return '"';
136
+ }
137
+ getAutoIncrement() {
138
+ return "autoincrement";
139
+ }
140
+ };
141
+ var NodeSqliteDialect = class {
142
+ #config;
143
+ constructor(config) {
144
+ this.#config = { ...config };
145
+ }
146
+ createDriver() {
147
+ return new NodeSqliteDriver(this.#config);
148
+ }
149
+ createQueryCompiler() {
150
+ return new NodeSqliteQueryCompiler();
151
+ }
152
+ createAdapter() {
153
+ return new NodeSqliteAdapter();
154
+ }
155
+ createIntrospector(db) {
156
+ return new NodeSqliteIntrospector(db);
157
+ }
158
+ };
159
+
160
+ exports.NodeSqliteDialect = NodeSqliteDialect;
161
+ //# sourceMappingURL=node-sqlite-dialect-QUBEEKKU.cjs.map
162
+ //# sourceMappingURL=node-sqlite-dialect-QUBEEKKU.cjs.map