@cronicorn/mcp-server 1.12.1 → 1.12.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.
@@ -14,159 +14,121 @@ mcp:
14
14
 
15
15
  # Self-Hosting Guide
16
16
 
17
- Run Cronicorn on your own infrastructure using Docker Compose.
17
+ Run Cronicorn on your own infrastructure using Docker Compose with built-in Traefik reverse proxy for automatic HTTPS.
18
18
 
19
19
  ## Quick Start
20
20
 
21
- Create a `docker-compose.yml` file with the following configuration:
22
-
23
- ```yaml
24
- services:
25
- db:
26
- image: postgres:17
27
- container_name: cronicorn-db
28
- restart: unless-stopped
29
- networks:
30
- - cronicorn
31
- ports:
32
- - "5432:5432"
33
- environment:
34
- POSTGRES_USER: cronicorn
35
- POSTGRES_PASSWORD: your_secure_password_here
36
- POSTGRES_DB: cronicorn
37
- healthcheck:
38
- test: ["CMD-SHELL", "pg_isready -U cronicorn"]
39
- interval: 10s
40
- timeout: 5s
41
- retries: 5
42
- volumes:
43
- - cronicorn-db:/var/lib/postgresql/data
44
-
45
- migrator:
46
- image: ghcr.io/weskerllc/cronicorn/migrator:latest
47
- container_name: cronicorn-migrator
48
- restart: no
49
- networks:
50
- - cronicorn
51
- depends_on:
52
- db:
53
- condition: service_healthy
54
- environment:
55
- DATABASE_URL: postgresql://cronicorn:your_secure_password_here@db:5432/cronicorn
56
-
57
- api:
58
- image: ghcr.io/weskerllc/cronicorn/api:latest
59
- container_name: cronicorn-api
60
- restart: unless-stopped
61
- networks:
62
- - cronicorn
63
- depends_on:
64
- db:
65
- condition: service_healthy
66
- migrator:
67
- condition: service_completed_successfully
68
- environment:
69
- DATABASE_URL: postgresql://cronicorn:your_secure_password_here@db:5432/cronicorn
70
- PORT: 3333
71
- BETTER_AUTH_SECRET: generate_random_secret_here
72
- BETTER_AUTH_URL: http://localhost:3333
73
- WEB_URL: http://localhost:5173
74
- API_URL: http://localhost:3333
75
- GITHUB_CLIENT_ID: your_github_client_id
76
- GITHUB_CLIENT_SECRET: your_github_client_secret
77
- NODE_ENV: production
78
- ports:
79
- - "3333:3333"
80
-
81
- scheduler:
82
- image: ghcr.io/weskerllc/cronicorn/scheduler:latest
83
- container_name: cronicorn-scheduler
84
- restart: unless-stopped
85
- networks:
86
- - cronicorn
87
- depends_on:
88
- db:
89
- condition: service_healthy
90
- migrator:
91
- condition: service_completed_successfully
92
- environment:
93
- DATABASE_URL: postgresql://cronicorn:your_secure_password_here@db:5432/cronicorn
94
- NODE_ENV: production
95
-
96
- ai-planner:
97
- image: ghcr.io/weskerllc/cronicorn/ai-planner:latest
98
- container_name: cronicorn-ai-planner
99
- restart: unless-stopped
100
- networks:
101
- - cronicorn
102
- depends_on:
103
- db:
104
- condition: service_healthy
105
- migrator:
106
- condition: service_completed_successfully
107
- environment:
108
- DATABASE_URL: postgresql://cronicorn:your_secure_password_here@db:5432/cronicorn
109
- OPENAI_API_KEY: your_openai_api_key # Optional - required for AI features
110
- AI_MODEL: gpt-4o-mini
111
- NODE_ENV: production
112
-
113
- web:
114
- image: ghcr.io/weskerllc/cronicorn/web:latest
115
- container_name: cronicorn-web
116
- restart: unless-stopped
117
- networks:
118
- - cronicorn
119
- depends_on:
120
- - api
121
- ports:
122
- - "5173:80"
123
-
124
- volumes:
125
- cronicorn-db:
126
-
127
- networks:
128
- cronicorn:
129
- driver: bridge
21
+ 1. **Download the compose file**
22
+
23
+ Get [`docker-compose.yml`](https://github.com/weskerllc/cronicorn/blob/main/docker-compose.yml) from the repo. This file pulls pre-built images from our registry—no building required. It includes Traefik for automatic HTTPS and routing.
24
+
25
+ 2. **Create environment file**
26
+
27
+ Create a `.env` file in the same directory. See [`.env.example`](https://github.com/weskerllc/cronicorn/blob/main/.env.example) for all options.
28
+
29
+ **For local development** (no domain needed):
30
+ ```bash
31
+ # Generate with: openssl rand -base64 32
32
+ BETTER_AUTH_SECRET=your-random-32-character-secret-here
33
+
34
+ # Optional: Use free .localhost domain (works without DNS)
35
+ DOMAIN=cronicorn.localhost
36
+ ```
37
+
38
+ **For production** (with your own domain):
39
+ ```bash
40
+ # Required
41
+ BETTER_AUTH_SECRET=your-random-32-character-secret-here
42
+ DOMAIN=yourdomain.com
43
+ LETSENCRYPT_EMAIL=admin@yourdomain.com
44
+
45
+ # Update URLs to use your domain
46
+ WEB_URL=https://yourdomain.com
47
+ API_URL=http://cronicorn-api:3333 # Keep internal
48
+ BETTER_AUTH_URL=https://yourdomain.com
49
+ BASE_URL=https://yourdomain.com
50
+ VITE_API_URL=https://yourdomain.com
51
+ ```
52
+
53
+ 3. **Point your domain to your server** (production only)
54
+
55
+ Add DNS A records:
56
+ - `yourdomain.com` → Your server IP
57
+ - `docs.yourdomain.com` → Your server IP
58
+
59
+ 4. **Start services**
60
+
61
+ ```bash
62
+ docker compose up -d
63
+ ```
64
+
65
+ 5. **Access the app**
66
+
67
+ - **Local**: http://localhost (or http://cronicorn.localhost if using DOMAIN)
68
+ - **Production**: https://yourdomain.com (Traefik handles HTTPS automatically)
69
+ - **Docs**: https://docs.yourdomain.com
70
+ - **API**: https://yourdomain.com/api/*
71
+ - **Login**: Use default admin credentials from `.env.example`
72
+
73
+ ## Optional Features
74
+
75
+ ### GitHub OAuth
76
+
77
+ Add to your `.env`:
78
+ ```bash
79
+ GITHUB_CLIENT_ID=your_github_client_id
80
+ GITHUB_CLIENT_SECRET=your_github_client_secret
130
81
  ```
131
82
 
132
- ## Start Cronicorn
83
+ Create an OAuth app at [github.com/settings/developers](https://github.com/settings/developers) with callback URL: `http://localhost:3333/api/auth/callback/github`
84
+
85
+ ### AI Scheduling
133
86
 
87
+ Add to your `.env`:
134
88
  ```bash
135
- # Start all services
136
- docker compose up -d
89
+ OPENAI_API_KEY=sk-your-key-here
90
+ AI_MODEL=gpt-4o-mini
91
+ ```
137
92
 
138
- # Check logs
139
- docker compose logs -f
93
+ ### Stripe Payments
140
94
 
141
- # Stop services
142
- docker compose down
143
- ```
95
+ See `.env.example` for required Stripe configuration.
144
96
 
145
- ## Access Points
97
+ ## How It Works
146
98
 
147
- - **Web Dashboard**: http://localhost:5173
148
- - **API Server**: http://localhost:3333
149
- - **API Documentation**: http://localhost:3333/reference
99
+ The included Traefik reverse proxy automatically:
100
+ - Routes `yourdomain.com/` to the web app
101
+ - Routes `yourdomain.com/api/*` to the API
102
+ - Routes `docs.yourdomain.com` to documentation
103
+ - Obtains and renews Let's Encrypt SSL certificates
104
+ - Redirects HTTP to HTTPS
150
105
 
151
- ## Required Configuration
106
+ **Architecture**:
107
+ - **Client-side requests** (browser): `https://yourdomain.com/api/*` → Traefik → API container
108
+ - **Server-side requests** (SSR): `http://cronicorn-api:3333` → Direct internal Docker network call
152
109
 
153
- Update these values in your `docker-compose.yml`:
110
+ No manual reverse proxy configuration needed!
154
111
 
155
- 1. **Database Password**: Replace `your_secure_password_here`
156
- 2. **Auth Secret**: Replace `generate_random_secret_here` with a random string
157
- 3. **GitHub OAuth**: Add your `GITHUB_CLIENT_ID` and `GITHUB_CLIENT_SECRET`
158
- 4. **OpenAI API Key**: Add `OPENAI_API_KEY` if using AI features
112
+ ## Useful Commands
159
113
 
160
- ## Optional: Custom Domain
114
+ ```bash
115
+ # View logs
116
+ docker compose logs -f
117
+
118
+ # Restart services
119
+ docker compose restart
161
120
 
162
- To use a custom domain, update these environment variables:
121
+ # Stop everything
122
+ docker compose down
163
123
 
164
- ```yaml
165
- BETTER_AUTH_URL: https://your-domain.com
166
- WEB_URL: https://your-domain.com
167
- API_URL: https://api.your-domain.com
124
+ # Update to latest version
125
+ docker compose pull
126
+ docker compose up -d
168
127
  ```
169
128
 
170
- ---
129
+ ## Troubleshooting
171
130
 
172
- **More detailed documentation coming soon**, including production deployment, scaling, and monitoring.
131
+ - **Connection refused**: Wait 30 seconds for all services to start
132
+ - **Auth errors**: Ensure `BETTER_AUTH_SECRET` is at least 32 characters
133
+ - **API not accessible**: Check that port 3333 isn't already in use
134
+ - **Database issues**: Check logs with `docker compose logs db`
package/dist/index.js CHANGED
@@ -2370,11 +2370,11 @@ var require_luxon = __commonJS({
2370
2370
  return [null, null];
2371
2371
  }
2372
2372
  function simpleParse(...keys) {
2373
- return (match2, cursor) => {
2373
+ return (match3, cursor) => {
2374
2374
  const ret = {};
2375
2375
  let i;
2376
2376
  for (i = 0; i < keys.length; i++) {
2377
- ret[keys[i]] = parseInteger(match2[cursor + i]);
2377
+ ret[keys[i]] = parseInteger(match3[cursor + i]);
2378
2378
  }
2379
2379
  return [ret, null, cursor + i];
2380
2380
  };
@@ -2392,39 +2392,39 @@ var require_luxon = __commonJS({
2392
2392
  var sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/;
2393
2393
  var sqlTimeRegex = RegExp(`${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`);
2394
2394
  var sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);
2395
- function int(match2, pos, fallback) {
2396
- const m = match2[pos];
2395
+ function int(match3, pos, fallback) {
2396
+ const m = match3[pos];
2397
2397
  return isUndefined(m) ? fallback : parseInteger(m);
2398
2398
  }
2399
- function extractISOYmd(match2, cursor) {
2399
+ function extractISOYmd(match3, cursor) {
2400
2400
  const item = {
2401
- year: int(match2, cursor),
2402
- month: int(match2, cursor + 1, 1),
2403
- day: int(match2, cursor + 2, 1)
2401
+ year: int(match3, cursor),
2402
+ month: int(match3, cursor + 1, 1),
2403
+ day: int(match3, cursor + 2, 1)
2404
2404
  };
2405
2405
  return [item, null, cursor + 3];
2406
2406
  }
2407
- function extractISOTime(match2, cursor) {
2407
+ function extractISOTime(match3, cursor) {
2408
2408
  const item = {
2409
- hours: int(match2, cursor, 0),
2410
- minutes: int(match2, cursor + 1, 0),
2411
- seconds: int(match2, cursor + 2, 0),
2412
- milliseconds: parseMillis(match2[cursor + 3])
2409
+ hours: int(match3, cursor, 0),
2410
+ minutes: int(match3, cursor + 1, 0),
2411
+ seconds: int(match3, cursor + 2, 0),
2412
+ milliseconds: parseMillis(match3[cursor + 3])
2413
2413
  };
2414
2414
  return [item, null, cursor + 4];
2415
2415
  }
2416
- function extractISOOffset(match2, cursor) {
2417
- const local = !match2[cursor] && !match2[cursor + 1], fullOffset = signedOffset(match2[cursor + 1], match2[cursor + 2]), zone = local ? null : FixedOffsetZone.instance(fullOffset);
2416
+ function extractISOOffset(match3, cursor) {
2417
+ const local = !match3[cursor] && !match3[cursor + 1], fullOffset = signedOffset(match3[cursor + 1], match3[cursor + 2]), zone = local ? null : FixedOffsetZone.instance(fullOffset);
2418
2418
  return [{}, zone, cursor + 3];
2419
2419
  }
2420
- function extractIANAZone(match2, cursor) {
2421
- const zone = match2[cursor] ? IANAZone.create(match2[cursor]) : null;
2420
+ function extractIANAZone(match3, cursor) {
2421
+ const zone = match3[cursor] ? IANAZone.create(match3[cursor]) : null;
2422
2422
  return [{}, zone, cursor + 1];
2423
2423
  }
2424
2424
  var isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);
2425
2425
  var isoDuration = /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/;
2426
- function extractISODuration(match2) {
2427
- const [s2, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] = match2;
2426
+ function extractISODuration(match3) {
2427
+ const [s2, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] = match3;
2428
2428
  const hasNegativePrefix = s2[0] === "-";
2429
2429
  const negativeSeconds = secondStr && secondStr[0] === "-";
2430
2430
  const maybeNegate = (num, force = false) => num !== void 0 && (force || num && hasNegativePrefix) ? -num : num;
@@ -2465,8 +2465,8 @@ var require_luxon = __commonJS({
2465
2465
  return result;
2466
2466
  }
2467
2467
  var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;
2468
- function extractRFC2822(match2) {
2469
- const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr, obsOffset, milOffset, offHourStr, offMinuteStr] = match2, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
2468
+ function extractRFC2822(match3) {
2469
+ const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr, obsOffset, milOffset, offHourStr, offMinuteStr] = match3, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
2470
2470
  let offset2;
2471
2471
  if (obsOffset) {
2472
2472
  offset2 = obsOffsets[obsOffset];
@@ -2483,12 +2483,12 @@ var require_luxon = __commonJS({
2483
2483
  var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/;
2484
2484
  var rfc850 = /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/;
2485
2485
  var ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;
2486
- function extractRFC1123Or850(match2) {
2487
- const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match2, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
2486
+ function extractRFC1123Or850(match3) {
2487
+ const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match3, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
2488
2488
  return [result, FixedOffsetZone.utcInstance];
2489
2489
  }
2490
- function extractASCII(match2) {
2491
- const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match2, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
2490
+ function extractASCII(match3) {
2491
+ const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match3, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
2492
2492
  return [result, FixedOffsetZone.utcInstance];
2493
2493
  }
2494
2494
  var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);
@@ -4461,7 +4461,7 @@ var require_luxon = __commonJS({
4461
4461
  const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, "");
4462
4462
  return [`^${re}$`, units];
4463
4463
  }
4464
- function match(input, regex, handlers) {
4464
+ function match2(input, regex, handlers) {
4465
4465
  const matches = input.match(regex);
4466
4466
  if (matches) {
4467
4467
  const all = {};
@@ -4592,7 +4592,7 @@ var require_luxon = __commonJS({
4592
4592
  invalidReason: this.invalidReason
4593
4593
  };
4594
4594
  } else {
4595
- const [rawMatches, matches] = match(input, this.regex, this.handlers), [result, zone, specificOffset] = matches ? dateTimeFromMatches(matches) : [null, null, void 0];
4595
+ const [rawMatches, matches] = match2(input, this.regex, this.handlers), [result, zone, specificOffset] = matches ? dateTimeFromMatches(matches) : [null, null, void 0];
4596
4596
  if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) {
4597
4597
  throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format");
4598
4598
  }
@@ -7222,12 +7222,12 @@ var require_expression = __commonJS({
7222
7222
  case "month":
7223
7223
  case "dayOfWeek":
7224
7224
  var aliases = CronExpression.aliases[field];
7225
- value = value.replace(/[a-z]{3}/gi, function(match) {
7226
- match = match.toLowerCase();
7227
- if (typeof aliases[match] !== "undefined") {
7228
- return aliases[match];
7225
+ value = value.replace(/[a-z]{3}/gi, function(match2) {
7226
+ match2 = match2.toLowerCase();
7227
+ if (typeof aliases[match2] !== "undefined") {
7228
+ return aliases[match2];
7229
7229
  } else {
7230
- throw new Error('Validation error, cannot resolve alias "' + match + '"');
7230
+ throw new Error('Validation error, cannot resolve alias "' + match2 + '"');
7231
7231
  }
7232
7232
  });
7233
7233
  break;
@@ -7999,8 +7999,8 @@ async function defaultBrowserId() {
7999
7999
  throw new Error("macOS only");
8000
8000
  }
8001
8001
  const { stdout } = await execFileAsync("defaults", ["read", "com.apple.LaunchServices/com.apple.launchservices.secure", "LSHandlers"]);
8002
- const match = /LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);
8003
- return match?.groups.id ?? "com.apple.Safari";
8002
+ const match2 = /LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);
8003
+ return match2?.groups.id ?? "com.apple.Safari";
8004
8004
  }
8005
8005
 
8006
8006
  // ../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js
@@ -8058,11 +8058,11 @@ async function defaultBrowser(_execFileAsync = execFileAsync3) {
8058
8058
  "/v",
8059
8059
  "ProgId"
8060
8060
  ]);
8061
- const match = /ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(stdout);
8062
- if (!match) {
8061
+ const match2 = /ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(stdout);
8062
+ if (!match2) {
8063
8063
  throw new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);
8064
8064
  }
8065
- const { id } = match.groups;
8065
+ const { id } = match2.groups;
8066
8066
  const browser = windowsBrowserProgIds[id];
8067
8067
  if (!browser) {
8068
8068
  throw new UnknownBrowserError(`Unknown browser ID: ${id}`);
@@ -13545,7 +13545,7 @@ var HealthSummaryResponseBaseSchema = external_exports.object({
13545
13545
  // ../../packages/api-contracts/dist/jobs/schemas.js
13546
13546
  init_esm_shims();
13547
13547
 
13548
- // ../../node_modules/.pnpm/@hono+zod-openapi@0.19.10_hono@4.8.5_zod@3.25.76/node_modules/@hono/zod-openapi/dist/index.js
13548
+ // ../../node_modules/.pnpm/@hono+zod-openapi@0.19.10_hono@4.10.6_zod@3.25.76/node_modules/@hono/zod-openapi/dist/index.js
13549
13549
  init_esm_shims();
13550
13550
 
13551
13551
  // ../../node_modules/.pnpm/@asteasolutions+zod-to-openapi@7.3.4_zod@3.25.76/node_modules/@asteasolutions/zod-to-openapi/dist/index.mjs
@@ -13633,32 +13633,32 @@ function extendZodWithOpenApi(zod) {
13633
13633
  };
13634
13634
  }
13635
13635
 
13636
- // ../../node_modules/.pnpm/@hono+zod-validator@0.7.4_hono@4.8.5_zod@3.25.76/node_modules/@hono/zod-validator/dist/index.js
13636
+ // ../../node_modules/.pnpm/@hono+zod-validator@0.7.4_hono@4.10.6_zod@3.25.76/node_modules/@hono/zod-validator/dist/index.js
13637
13637
  init_esm_shims();
13638
13638
 
13639
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/validator/index.js
13639
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/validator/index.js
13640
13640
  init_esm_shims();
13641
13641
 
13642
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/validator/validator.js
13642
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/validator/validator.js
13643
13643
  init_esm_shims();
13644
13644
 
13645
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/helper/cookie/index.js
13645
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/helper/cookie/index.js
13646
13646
  init_esm_shims();
13647
13647
 
13648
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/utils/cookie.js
13648
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/utils/cookie.js
13649
13649
  init_esm_shims();
13650
13650
 
13651
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/utils/url.js
13651
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/utils/url.js
13652
13652
  init_esm_shims();
13653
13653
  var tryDecode = (str, decoder) => {
13654
13654
  try {
13655
13655
  return decoder(str);
13656
13656
  } catch {
13657
- return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {
13657
+ return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match2) => {
13658
13658
  try {
13659
- return decoder(match);
13659
+ return decoder(match2);
13660
13660
  } catch {
13661
- return match;
13661
+ return match2;
13662
13662
  }
13663
13663
  });
13664
13664
  }
@@ -13675,9 +13675,12 @@ var _decodeURI = (value) => {
13675
13675
  var _getQueryParam = (url, key, multiple) => {
13676
13676
  let encoded;
13677
13677
  if (!multiple && key && !/[%+]/.test(key)) {
13678
- let keyIndex2 = url.indexOf(`?${key}`, 8);
13678
+ let keyIndex2 = url.indexOf("?", 8);
13679
13679
  if (keyIndex2 === -1) {
13680
- keyIndex2 = url.indexOf(`&${key}`, 8);
13680
+ return void 0;
13681
+ }
13682
+ if (!url.startsWith(key, keyIndex2 + 1)) {
13683
+ keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);
13681
13684
  }
13682
13685
  while (keyIndex2 !== -1) {
13683
13686
  const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);
@@ -13742,38 +13745,38 @@ var getQueryParams = (url, key) => {
13742
13745
  };
13743
13746
  var decodeURIComponent_ = decodeURIComponent;
13744
13747
 
13745
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/http-exception.js
13748
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/http-exception.js
13746
13749
  init_esm_shims();
13747
13750
 
13748
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/utils/buffer.js
13751
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/utils/buffer.js
13749
13752
  init_esm_shims();
13750
13753
 
13751
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/utils/crypto.js
13754
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/utils/crypto.js
13752
13755
  init_esm_shims();
13753
13756
 
13754
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/index.js
13757
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/index.js
13755
13758
  init_esm_shims();
13756
13759
 
13757
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/hono.js
13760
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/hono.js
13758
13761
  init_esm_shims();
13759
13762
 
13760
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/hono-base.js
13763
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/hono-base.js
13761
13764
  init_esm_shims();
13762
13765
 
13763
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/compose.js
13766
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/compose.js
13764
13767
  init_esm_shims();
13765
13768
 
13766
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/context.js
13769
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/context.js
13767
13770
  init_esm_shims();
13768
13771
 
13769
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/request.js
13772
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/request.js
13770
13773
  init_esm_shims();
13771
13774
 
13772
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/request/constants.js
13775
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/request/constants.js
13773
13776
  init_esm_shims();
13774
13777
  var GET_MATCH_RESULT = Symbol();
13775
13778
 
13776
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/utils/body.js
13779
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/utils/body.js
13777
13780
  init_esm_shims();
13778
13781
  var parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {
13779
13782
  const { all = false, dot = false } = options;
@@ -13843,7 +13846,7 @@ var handleParsingNestedValues = (form, key, value) => {
13843
13846
  });
13844
13847
  };
13845
13848
 
13846
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/request.js
13849
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/request.js
13847
13850
  var tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);
13848
13851
  var HonoRequest = class {
13849
13852
  raw;
@@ -13864,14 +13867,14 @@ var HonoRequest = class {
13864
13867
  #getDecodedParam(key) {
13865
13868
  const paramKey = this.#matchResult[0][this.routeIndex][1][key];
13866
13869
  const param = this.#getParamValue(paramKey);
13867
- return param ? /\%/.test(param) ? tryDecodeURIComponent(param) : param : void 0;
13870
+ return param && /\%/.test(param) ? tryDecodeURIComponent(param) : param;
13868
13871
  }
13869
13872
  #getAllDecodedParams() {
13870
13873
  const decoded = {};
13871
13874
  const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);
13872
13875
  for (const key of keys) {
13873
13876
  const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);
13874
- if (value && typeof value === "string") {
13877
+ if (value !== void 0) {
13875
13878
  decoded[key] = /\%/.test(value) ? tryDecodeURIComponent(value) : value;
13876
13879
  }
13877
13880
  }
@@ -13954,45 +13957,51 @@ var HonoRequest = class {
13954
13957
  }
13955
13958
  };
13956
13959
 
13957
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/utils/html.js
13960
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/utils/html.js
13958
13961
  init_esm_shims();
13959
13962
 
13960
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router.js
13963
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router.js
13961
13964
  init_esm_shims();
13962
13965
 
13963
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/utils/constants.js
13966
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/utils/constants.js
13964
13967
  init_esm_shims();
13965
13968
 
13966
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router/reg-exp-router/index.js
13969
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/reg-exp-router/index.js
13967
13970
  init_esm_shims();
13968
13971
 
13969
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router/reg-exp-router/router.js
13972
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/reg-exp-router/router.js
13970
13973
  init_esm_shims();
13971
13974
 
13972
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router/reg-exp-router/node.js
13975
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/reg-exp-router/matcher.js
13976
+ init_esm_shims();
13977
+
13978
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/reg-exp-router/node.js
13973
13979
  init_esm_shims();
13974
13980
  var PATH_ERROR = Symbol();
13975
13981
  var regExpMetaChars = new Set(".\\+*[^]$()");
13976
13982
 
13977
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router/reg-exp-router/trie.js
13983
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/reg-exp-router/trie.js
13984
+ init_esm_shims();
13985
+
13986
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/reg-exp-router/prepared-router.js
13978
13987
  init_esm_shims();
13979
13988
 
13980
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router/smart-router/index.js
13989
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/smart-router/index.js
13981
13990
  init_esm_shims();
13982
13991
 
13983
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router/smart-router/router.js
13992
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/smart-router/router.js
13984
13993
  init_esm_shims();
13985
13994
 
13986
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router/trie-router/index.js
13995
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/trie-router/index.js
13987
13996
  init_esm_shims();
13988
13997
 
13989
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router/trie-router/router.js
13998
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/trie-router/router.js
13990
13999
  init_esm_shims();
13991
14000
 
13992
- // ../../node_modules/.pnpm/hono@4.8.5/node_modules/hono/dist/router/trie-router/node.js
14001
+ // ../../node_modules/.pnpm/hono@4.10.6/node_modules/hono/dist/router/trie-router/node.js
13993
14002
  init_esm_shims();
13994
14003
 
13995
- // ../../node_modules/.pnpm/@hono+zod-openapi@0.19.10_hono@4.8.5_zod@3.25.76/node_modules/@hono/zod-openapi/dist/index.js
14004
+ // ../../node_modules/.pnpm/@hono+zod-openapi@0.19.10_hono@4.10.6_zod@3.25.76/node_modules/@hono/zod-openapi/dist/index.js
13996
14005
  extendZodWithOpenApi(external_exports);
13997
14006
 
13998
14007
  // ../../packages/api-contracts/dist/jobs/schemas.js