@access-dlsu/leapify 0.260601.2 → 0.260602.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.
@@ -1,29 +1,29 @@
1
1
  'use strict';
2
2
 
3
- var chunkX4OB4DZ3_cjs = require('../../chunk-X4OB4DZ3.cjs');
3
+ var chunkZV4TIJXI_cjs = require('../../chunk-ZV4TIJXI.cjs');
4
4
  require('../../chunk-Q7SFCCGT.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "TURNSTILE_COOKIE_NAME", {
9
9
  enumerable: true,
10
- get: function () { return chunkX4OB4DZ3_cjs.TURNSTILE_COOKIE_NAME; }
10
+ get: function () { return chunkZV4TIJXI_cjs.TURNSTILE_COOKIE_NAME; }
11
11
  });
12
12
  Object.defineProperty(exports, "TURNSTILE_PATH", {
13
13
  enumerable: true,
14
- get: function () { return chunkX4OB4DZ3_cjs.TURNSTILE_PATH; }
14
+ get: function () { return chunkZV4TIJXI_cjs.TURNSTILE_PATH; }
15
15
  });
16
16
  Object.defineProperty(exports, "TURNSTILE_VERIFY_PATH", {
17
17
  enumerable: true,
18
- get: function () { return chunkX4OB4DZ3_cjs.TURNSTILE_VERIFY_PATH; }
18
+ get: function () { return chunkZV4TIJXI_cjs.TURNSTILE_VERIFY_PATH; }
19
19
  });
20
20
  Object.defineProperty(exports, "createTurnstileMiddleware", {
21
21
  enumerable: true,
22
- get: function () { return chunkX4OB4DZ3_cjs.createTurnstileMiddleware; }
22
+ get: function () { return chunkZV4TIJXI_cjs.createTurnstileMiddleware; }
23
23
  });
24
24
  Object.defineProperty(exports, "handleTurnstileVerify", {
25
25
  enumerable: true,
26
- get: function () { return chunkX4OB4DZ3_cjs.handleTurnstileVerify; }
26
+ get: function () { return chunkZV4TIJXI_cjs.handleTurnstileVerify; }
27
27
  });
28
28
  //# sourceMappingURL=turnstile-challenge.cjs.map
29
29
  //# sourceMappingURL=turnstile-challenge.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"turnstile-challenge.d.ts","sourceRoot":"","sources":["../../../src/lib/middleware/turnstile-challenge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,eAAO,MAAM,cAAc,mCAAmC,CAAA;AAE9D,eAAO,MAAM,qBAAqB,0CAA6B,CAAA;AAE/D,eAAO,MAAM,qBAAqB,sBAAsB,CAAA;AAyHxD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,CAAC,EAAE,OAAO,CAAC;IAAE,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC;;;;;;;;;;;;;;;;;;oEA6C1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB;cACH,eAAe;yBA2BpD"}
1
+ {"version":3,"file":"turnstile-challenge.d.ts","sourceRoot":"","sources":["../../../src/lib/middleware/turnstile-challenge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,eAAO,MAAM,cAAc,mCAAmC,CAAA;AAE9D,eAAO,MAAM,qBAAqB,0CAA6B,CAAA;AAE/D,eAAO,MAAM,qBAAqB,sBAAsB,CAAA;AA2HxD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,CAAC,EAAE,OAAO,CAAC;IAAE,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC;;;;;;;;;;;;;;;;;;oEA6C1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB;cACH,eAAe;yBA2BpD"}
@@ -1,4 +1,4 @@
1
- export { TURNSTILE_COOKIE_NAME, TURNSTILE_PATH, TURNSTILE_VERIFY_PATH, createTurnstileMiddleware, handleTurnstileVerify } from '../../chunk-2JEY6TSO.js';
1
+ export { TURNSTILE_COOKIE_NAME, TURNSTILE_PATH, TURNSTILE_VERIFY_PATH, createTurnstileMiddleware, handleTurnstileVerify } from '../../chunk-WTA2QGY5.js';
2
2
  import '../../chunk-PZ5AY32C.js';
3
3
  //# sourceMappingURL=turnstile-challenge.js.map
4
4
  //# sourceMappingURL=turnstile-challenge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/routes/themes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAW1C,eAAO,MAAM,WAAW,yDAAyB,CAAA"}
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/routes/themes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AA+B1C,eAAO,MAAM,WAAW,yDAAyB,CAAA"}
package/dist/worker.js CHANGED
@@ -2,7 +2,7 @@ import { Hono } from 'hono';
2
2
  import { cors } from 'hono/cors';
3
3
  import { drizzle } from 'drizzle-orm/d1';
4
4
  import { sqliteTable, integer, text, index, uniqueIndex } from 'drizzle-orm/sqlite-core';
5
- import { sql, relations, eq, and, count, isNotNull, lte } from 'drizzle-orm';
5
+ import { sql, relations, eq, and, asc, count, isNotNull, lte } from 'drizzle-orm';
6
6
  import { createMiddleware } from 'hono/factory';
7
7
  import { betterAuth } from 'better-auth';
8
8
  import { drizzleAdapter } from 'better-auth/adapters/drizzle';
@@ -24,8 +24,6 @@ var LeapifyError = class extends Error {
24
24
  this.code = code;
25
25
  this.name = "LeapifyError";
26
26
  }
27
- statusCode;
28
- code;
29
27
  };
30
28
  var unauthorized = (message = "Unauthorized") => new LeapifyError(401, "UNAUTHORIZED", message);
31
29
  var domainRestricted = () => new LeapifyError(
@@ -91,6 +89,10 @@ var themes = sqliteTable("themes", {
91
89
  name: text("name").notNull().unique(),
92
90
  path: text("path").notNull().unique(),
93
91
  // e.g. "/pirates-cove"
92
+ imageUrl: text("image_url"),
93
+ descriptionEn: text("description_en"),
94
+ descriptionFil: text("description_fil"),
95
+ sortOrder: integer("sort_order").notNull().default(0),
94
96
  createdAt: integer("created_at").notNull().$defaultFn(() => Math.floor(Date.now() / 1e3)),
95
97
  updatedAt: integer("updated_at").notNull().$defaultFn(() => Math.floor(Date.now() / 1e3))
96
98
  });
@@ -405,6 +407,8 @@ var EXEMPT_PATHS = [
405
407
  "/api/classes",
406
408
  "/api/faqs",
407
409
  "/api/config",
410
+ "/api/themes",
411
+ "/api/organizations",
408
412
  TURNSTILE_VERIFY_PATH
409
413
  ];
410
414
  function base64urlEncode(bytes) {
@@ -906,7 +910,6 @@ var CacheService = class {
906
910
  constructor(kv) {
907
911
  this.kv = kv;
908
912
  }
909
- kv;
910
913
  async get(key) {
911
914
  return this.kv.get(key, "json");
912
915
  }
@@ -952,8 +955,6 @@ var SlotsService = class {
952
955
  this.db = db;
953
956
  this.cache = cache;
954
957
  }
955
- db;
956
- cache;
957
958
  kvKey(slug) {
958
959
  return `${SLOT_KV_PREFIX}${slug}`;
959
960
  }
@@ -1611,7 +1612,7 @@ faqsRoute.get("/", async (c) => {
1611
1612
  const data = await cache.getOrSet(
1612
1613
  FAQS_KV_KEY,
1613
1614
  () => db.query.faqs.findMany({
1614
- orderBy: (t, { asc }) => [asc(t.sortOrder), asc(t.createdAt)]
1615
+ orderBy: (t, { asc: asc2 }) => [asc2(t.sortOrder), asc2(t.createdAt)]
1615
1616
  }),
1616
1617
  FAQS_TTL
1617
1618
  );
@@ -2002,14 +2003,27 @@ function extensionFromMime(mime) {
2002
2003
  };
2003
2004
  return map[mime] ?? "bin";
2004
2005
  }
2006
+ function generatePath(name) {
2007
+ return name.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
2008
+ }
2005
2009
  var createThemeSchema = z.object({
2006
2010
  name: z.string().min(1),
2007
- path: z.string().min(1)
2011
+ imageUrl: z.string().url().nullable().optional(),
2012
+ descriptionEn: z.string().nullable().optional(),
2013
+ descriptionFil: z.string().nullable().optional(),
2014
+ sortOrder: z.number().int().default(0)
2015
+ });
2016
+ z.object({
2017
+ name: z.string().min(1).optional(),
2018
+ imageUrl: z.string().url().nullable().optional(),
2019
+ descriptionEn: z.string().nullable().optional(),
2020
+ descriptionFil: z.string().nullable().optional(),
2021
+ sortOrder: z.number().int().optional()
2008
2022
  });
2009
2023
  var themesRoute = new Hono();
2010
2024
  themesRoute.get("/", async (c) => {
2011
2025
  const db = createDb(c.env.DB);
2012
- const data = await db.select().from(themes);
2026
+ const data = await db.select().from(themes).orderBy(asc(themes.sortOrder), asc(themes.createdAt));
2013
2027
  return c.json({ data });
2014
2028
  });
2015
2029
  themesRoute.post(
@@ -2020,8 +2034,9 @@ themesRoute.post(
2020
2034
  async (c) => {
2021
2035
  const body = c.req.valid("json");
2022
2036
  const db = createDb(c.env.DB);
2037
+ const path = generatePath(body.name);
2023
2038
  try {
2024
- const [created] = await db.insert(themes).values(body).returning();
2039
+ const [created] = await db.insert(themes).values({ ...body, path }).returning();
2025
2040
  return c.json({ data: created }, 201);
2026
2041
  } catch (err) {
2027
2042
  if (err.message && err.message.includes("UNIQUE constraint failed")) {
@@ -2039,8 +2054,12 @@ themesRoute.patch(
2039
2054
  const { id } = c.req.param();
2040
2055
  const body = await c.req.json();
2041
2056
  const db = createDb(c.env.DB);
2057
+ const update = { ...body };
2058
+ if (body.name) {
2059
+ update.path = generatePath(body.name);
2060
+ }
2042
2061
  try {
2043
- const [updated] = await db.update(themes).set(body).where(eq(themes.id, id)).returning();
2062
+ const [updated] = await db.update(themes).set(update).where(eq(themes.id, id)).returning();
2044
2063
  if (!updated) throw notFound("Theme");
2045
2064
  return c.json({ data: updated });
2046
2065
  } catch (err) {
@@ -2278,7 +2297,6 @@ var SesError = class extends Error {
2278
2297
  this.status = status;
2279
2298
  this.name = "SesError";
2280
2299
  }
2281
- status;
2282
2300
  /**
2283
2301
  * True for errors that are permanent (not worth retrying via SES again).
2284
2302
  * 400 BadRequest, 403 Forbidden, 404 NotFound → non-retryable.