@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.
- package/dist/app.d.ts +15 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/auth/auth.d.ts +99 -0
- package/dist/auth/auth.d.ts.map +1 -0
- package/dist/auth/middleware.d.ts +20 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/types.d.ts +17 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/bun-sqlite-dialect-na--YwnN-CVHVB5NF.js +160 -0
- package/dist/bun-sqlite-dialect-na--YwnN-CVHVB5NF.js.map +1 -0
- package/dist/bun-sqlite-dialect-na--YwnN-QDBSQQTR.cjs +162 -0
- package/dist/bun-sqlite-dialect-na--YwnN-QDBSQQTR.cjs.map +1 -0
- package/dist/chunk-4DPT2KQR.cjs +467 -0
- package/dist/chunk-4DPT2KQR.cjs.map +1 -0
- package/dist/chunk-57ANXUP7.cjs +6191 -0
- package/dist/chunk-57ANXUP7.cjs.map +1 -0
- package/dist/chunk-5JKLV7IE.cjs +2962 -0
- package/dist/chunk-5JKLV7IE.cjs.map +1 -0
- package/dist/{chunk-FLR7TNLN.js → chunk-63CUZGSZ.js} +4 -12
- package/dist/chunk-63CUZGSZ.js.map +1 -0
- package/dist/chunk-ANNHE3PZ.js +2285 -0
- package/dist/chunk-ANNHE3PZ.js.map +1 -0
- package/dist/chunk-DPPGYCX3.cjs +72 -0
- package/dist/chunk-DPPGYCX3.cjs.map +1 -0
- package/dist/chunk-EGRHWZRV.js +3 -0
- package/dist/chunk-EGRHWZRV.js.map +1 -0
- package/dist/chunk-EIF2O2BG.js +6187 -0
- package/dist/chunk-EIF2O2BG.js.map +1 -0
- package/dist/chunk-EMMSS5I5.cjs +37 -0
- package/dist/chunk-EMMSS5I5.cjs.map +1 -0
- package/dist/chunk-FTSMZYD7.js +3025 -0
- package/dist/chunk-FTSMZYD7.js.map +1 -0
- package/dist/chunk-G3PMV62Z.js +33 -0
- package/dist/chunk-G3PMV62Z.js.map +1 -0
- package/dist/chunk-GNRL67OU.js +2949 -0
- package/dist/chunk-GNRL67OU.js.map +1 -0
- package/dist/chunk-HHNEB7YR.js +8 -0
- package/dist/chunk-HHNEB7YR.js.map +1 -0
- package/dist/chunk-IQEWVHLM.js +889 -0
- package/dist/chunk-IQEWVHLM.js.map +1 -0
- package/dist/chunk-JPVIXCF5.cjs +10 -0
- package/dist/chunk-JPVIXCF5.cjs.map +1 -0
- package/dist/chunk-MNEW2V4T.js +447 -0
- package/dist/chunk-MNEW2V4T.js.map +1 -0
- package/dist/chunk-NKIQRCOM.cjs +4 -0
- package/dist/chunk-NKIQRCOM.cjs.map +1 -0
- package/dist/chunk-QARF2YFF.cjs +2296 -0
- package/dist/chunk-QARF2YFF.cjs.map +1 -0
- package/dist/chunk-RFP2X2FA.cjs +903 -0
- package/dist/chunk-RFP2X2FA.cjs.map +1 -0
- package/dist/chunk-SXBTHGIL.js +7138 -0
- package/dist/chunk-SXBTHGIL.js.map +1 -0
- package/dist/chunk-UWXYXU7J.cjs +7166 -0
- package/dist/chunk-UWXYXU7J.cjs.map +1 -0
- package/dist/chunk-XY4KBWXT.cjs +3066 -0
- package/dist/chunk-XY4KBWXT.cjs.map +1 -0
- package/dist/{chunk-3ZWIJNZG.cjs → chunk-YFJBE3AU.cjs} +4 -12
- package/dist/chunk-YFJBE3AU.cjs.map +1 -0
- package/dist/chunk-ZYHBHSSO.js +68 -0
- package/dist/chunk-ZYHBHSSO.js.map +1 -0
- package/dist/client/{index.d.cts → auth.d.ts} +140 -394
- package/dist/client/auth.d.ts.map +1 -0
- package/dist/client/index.cjs +840 -48
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.ts +34 -1134
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +839 -47
- package/dist/client/index.js.map +1 -1
- package/dist/client/pow.d.ts +28 -0
- package/dist/client/pow.d.ts.map +1 -0
- package/dist/client/session.d.ts +29 -0
- package/dist/client/session.d.ts.map +1 -0
- package/dist/client/types.d.ts +25 -23
- package/dist/client/types.d.ts.map +1 -0
- package/dist/cron/batch-release.d.ts +9 -0
- package/dist/cron/batch-release.d.ts.map +1 -0
- package/dist/cron/lifecycle-check.d.ts +10 -0
- package/dist/cron/lifecycle-check.d.ts.map +1 -0
- package/dist/cron/reconcile-slots.d.ts +10 -0
- package/dist/cron/reconcile-slots.d.ts.map +1 -0
- package/dist/cron/reminder-emails.d.ts +9 -0
- package/dist/cron/reminder-emails.d.ts.map +1 -0
- package/dist/cron/renew-watches.d.ts +9 -0
- package/dist/cron/renew-watches.d.ts.map +1 -0
- package/dist/d1-sqlite-dialect-C2B7YsIT-CEUMIZZI.js +122 -0
- package/dist/d1-sqlite-dialect-C2B7YsIT-CEUMIZZI.js.map +1 -0
- package/dist/d1-sqlite-dialect-C2B7YsIT-JUX3YYMX.cjs +124 -0
- package/dist/d1-sqlite-dialect-C2B7YsIT-JUX3YYMX.cjs.map +1 -0
- package/dist/db/index.d.ts +7 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/migrate.d.ts +23 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/schema/auth.d.ts +649 -0
- package/dist/db/schema/auth.d.ts.map +1 -0
- package/dist/db/schema/bookmarks.d.ts +88 -0
- package/dist/db/schema/bookmarks.d.ts.map +1 -0
- package/dist/db/schema/events.d.ts +539 -0
- package/dist/db/schema/events.d.ts.map +1 -0
- package/dist/db/schema/faqs.d.ts +154 -0
- package/dist/db/schema/faqs.d.ts.map +1 -0
- package/dist/db/schema/index.d.ts +8 -0
- package/dist/db/schema/index.d.ts.map +1 -0
- package/dist/db/schema/site-config.d.ts +64 -0
- package/dist/db/schema/site-config.d.ts.map +1 -0
- package/dist/db/schema/themes.d.ts +123 -0
- package/dist/db/schema/themes.d.ts.map +1 -0
- package/dist/{types-lTjxCp88.d.cts → db/schema/users.d.ts} +11 -96
- package/dist/db/schema/users.d.ts.map +1 -0
- package/dist/dist-DZHA5VYX.cjs +260 -0
- package/dist/dist-DZHA5VYX.cjs.map +1 -0
- package/dist/dist-RRQUBLLO.js +258 -0
- package/dist/dist-RRQUBLLO.js.map +1 -0
- package/dist/index.cjs +36987 -781
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +23 -1818
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36846 -642
- package/dist/index.js.map +1 -1
- package/dist/kysely-adapter-5ZCECLNV.cjs +27 -0
- package/dist/kysely-adapter-5ZCECLNV.cjs.map +1 -0
- package/dist/kysely-adapter-6CZEASJQ.js +10 -0
- package/dist/kysely-adapter-6CZEASJQ.js.map +1 -0
- package/dist/lib/errors.d.ts +15 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/middleware/cors.d.ts +3 -0
- package/dist/lib/middleware/cors.d.ts.map +1 -0
- package/dist/lib/middleware/error-handler.d.ts +3 -0
- package/dist/lib/middleware/error-handler.d.ts.map +1 -0
- package/dist/lib/middleware/pow-challenge.cjs +7 -7
- package/dist/lib/middleware/pow-challenge.d.ts +29 -18
- package/dist/lib/middleware/pow-challenge.d.ts.map +1 -0
- package/dist/lib/middleware/pow-challenge.js +2 -2
- package/dist/lib/middleware/rate-limit.d.ts +48 -0
- package/dist/lib/middleware/rate-limit.d.ts.map +1 -0
- package/dist/lib/middleware/referer-guard.d.ts +18 -0
- package/dist/lib/middleware/referer-guard.d.ts.map +1 -0
- package/dist/lib/retry.d.ts +12 -0
- package/dist/lib/retry.d.ts.map +1 -0
- package/dist/node-sqlite-dialect-HEMUZ4B2.js +160 -0
- package/dist/node-sqlite-dialect-HEMUZ4B2.js.map +1 -0
- package/dist/node-sqlite-dialect-QUBEEKKU.cjs +162 -0
- package/dist/node-sqlite-dialect-QUBEEKKU.cjs.map +1 -0
- package/dist/queues/handlers.d.ts +13 -0
- package/dist/queues/handlers.d.ts.map +1 -0
- package/dist/queues/jobs.d.ts +42 -0
- package/dist/queues/jobs.d.ts.map +1 -0
- package/dist/routes/events.d.ts +4 -0
- package/dist/routes/events.d.ts.map +1 -0
- package/dist/routes/faqs.d.ts +4 -0
- package/dist/routes/faqs.d.ts.map +1 -0
- package/dist/routes/health.d.ts +4 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/internal/gforms-webhook.d.ts +4 -0
- package/dist/routes/internal/gforms-webhook.d.ts.map +1 -0
- package/dist/routes/site-config.d.ts +4 -0
- package/dist/routes/site-config.d.ts.map +1 -0
- package/dist/routes/themes.d.ts +4 -0
- package/dist/routes/themes.d.ts.map +1 -0
- package/dist/routes/uploads.d.ts +4 -0
- package/dist/routes/uploads.d.ts.map +1 -0
- package/dist/routes/users.d.ts +4 -0
- package/dist/routes/users.d.ts.map +1 -0
- package/dist/services/cache.d.ts +22 -0
- package/dist/services/cache.d.ts.map +1 -0
- package/dist/services/contentful-management.d.ts +53 -0
- package/dist/services/contentful-management.d.ts.map +1 -0
- package/dist/services/contentful.d.ts +97 -0
- package/dist/services/contentful.d.ts.map +1 -0
- package/dist/services/email.d.ts +75 -0
- package/dist/services/email.d.ts.map +1 -0
- package/dist/services/gforms.d.ts +60 -0
- package/dist/services/gforms.d.ts.map +1 -0
- package/dist/services/resend.d.ts +34 -0
- package/dist/services/resend.d.ts.map +1 -0
- package/dist/services/ses.d.ts +58 -0
- package/dist/services/ses.d.ts.map +1 -0
- package/dist/services/slots.d.ts +48 -0
- package/dist/services/slots.d.ts.map +1 -0
- package/dist/services/snapshot.d.ts +90 -0
- package/dist/services/snapshot.d.ts.map +1 -0
- package/dist/types.d.ts +66 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/worker-handler.d.ts +64 -0
- package/dist/worker-handler.d.ts.map +1 -0
- package/dist/worker.d.ts +36 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +2195 -2553
- package/dist/worker.js.map +1 -1
- package/package.json +152 -152
- package/dist/chunk-3ZWIJNZG.cjs.map +0 -1
- package/dist/chunk-FLR7TNLN.js.map +0 -1
- package/dist/client/types.d.cts +0 -192
- package/dist/index.d.cts +0 -1879
- package/dist/lib/middleware/pow-challenge.d.cts +0 -47
- 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 @@
|
|
|
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 @@
|
|
|
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
|
|
4
|
-
require('../../chunk-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
22
|
+
get: function () { return chunkQARF2YFF_cjs.createPowChallengeMiddleware; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "handlePowVerify", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
},
|
|
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-
|
|
2
|
-
import '../../chunk-
|
|
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
|