@orieljs/framework 0.1.0-alpha.3 → 0.1.0-alpha.5

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/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { C as ClassRegistry$3, a as Class$j, S as ServiceProvider$u, A as Application$c, b as Abstract$j, c as ConfigRepository$3 } from './index.d-DOlTeG-8.js';
2
- import { Token as Token$j, ServiceProviderClass as ServiceProviderClass$a } from './contracts.js';
3
- export { RouteList, RouteName } from './contracts.js';
4
- import { T as Target, B as BusFake, E as EventFake, M as MailFake, N as NotificationFake, Q as QueueFake, F as FakeDisk } from './testing--F6FODc_.js';
5
- export { C as Component, a as ComponentResult, b as Computed, c as CorruptComponentPayloadError, d as ErrorBag, I as InvalidLiveRequestError, L as Live, e as LiveComponentManager, f as LiveComponentNotFoundError, g as LiveError, h as LiveProps, i as LiveServiceProvider, j as Locked, k as MethodNotCallableError, O as On, P as PendingEvent, l as PropertyNotUpdatableError, m as Testable, U as UPDATE_URI, n as componentName, o as live } from './testing--F6FODc_.js';
2
+ import { Token as Token$j, ServiceProviderClass as ServiceProviderClass$a, Notification as Notification$4 } from './contracts.js';
3
+ export { InertiaPage, RouteList, RouteName } from './contracts.js';
4
+ import { T as Target, B as BusFake, E as EventFake, M as MailFake, N as NotificationFake, Q as QueueFake, F as FakeDisk } from './testing-BErengYY.js';
5
+ export { C as Component, a as ComponentResult, b as Computed, c as CorruptComponentPayloadError, d as ErrorBag, I as InvalidLiveRequestError, L as Live, e as LiveComponentManager, f as LiveComponentNotFoundError, g as LiveError, h as LiveProps, i as LiveServiceProvider, j as Locked, k as MethodNotCallableError, O as On, P as PERSISTENT_MIDDLEWARE, l as Paginated, m as Pagination, n as PaginationProps, o as PaginationSource, p as PendingEvent, q as PersistentMiddleware, r as PropertyNotUpdatableError, s as TestRequestScope, t as Testable, U as UPDATE_URI, W as WithPagination, u as componentName, v as live, w as persistentMiddleware } from './testing-BErengYY.js';
6
6
  import { IncomingMessage, ServerResponse } from 'node:http';
7
7
  import { Kysely, RawBuilder, CompiledQuery, QueryResult, SqliteDatabase, SqliteStatement, Dialect } from 'kysely';
8
8
  import Redis$1, { Redis } from 'ioredis';
@@ -357,6 +357,13 @@ declare function tap<T>(target: T, callback: (target: T) => void): T;
357
357
  /** Calls fn up to `times` times (attempt numbers are 1-based). Rethrows the last error, or the first one `when` rejects. */
358
358
  declare function retry<T>(times: number, fn: (attempt: number) => T | Promise<T>, sleepMs?: number | ((attempt: number) => number), when?: (error: unknown) => boolean): Promise<T>;
359
359
 
360
+ /**
361
+ * Laravel's __(): the line for `key` with `:placeholders` filled (`:name`, `:Name` capitalized, `:NAME` upper-cased),
362
+ * longest placeholder first. A key with no line comes back as is, so a sentence can be its own key:
363
+ * __('auth.failed'), __('auth.throttle', { seconds: 30 }), __('A reset link will be sent if the account exists.').
364
+ */
365
+ declare function __(key: string, replace?: Record<string, string | number>): string;
366
+
360
367
  interface ConfigRepository$2 {
361
368
  has(key: string): boolean;
362
369
  /** Dot notation: get('database.connections.sqlite.database'). */
@@ -417,59 +424,6 @@ interface Container$i {
417
424
  }
418
425
  declare const Container$i: Token$h<Container$i>;
419
426
 
420
- interface ServiceProvider$s {
421
- /** Bind things into the container. Synchronous. Don't resolve other services here. */
422
- register?(): void;
423
- /** Runs after every provider is registered. May be async (e.g. importing route files). */
424
- boot?(): void | Promise<void>;
425
- }
426
- type ServiceProviderClass$9 = new (app: Application$b) => ServiceProvider$s;
427
- interface Application$b extends Container$i {
428
- readonly version: string;
429
- basePath(path?: string): string;
430
- appPath(path?: string): string;
431
- bootstrapPath(path?: string): string;
432
- configPath(path?: string): string;
433
- databasePath(path?: string): string;
434
- publicPath(path?: string): string;
435
- resourcePath(path?: string): string;
436
- storagePath(path?: string): string;
437
- /** With no args returns the environment name. With args returns whether it matches any of them. */
438
- environment(): string;
439
- environment(...environments: string[]): boolean;
440
- isProduction(): boolean;
441
- isLocal(): boolean;
442
- runningInConsole(): boolean;
443
- /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
444
- setRunningInConsole(value?: boolean): void;
445
- runningUnitTests(): boolean;
446
- /** Registers the provider. If the app is already booted, the provider is booted immediately. */
447
- register(provider: ServiceProvider$s | ServiceProviderClass$9): Promise<ServiceProvider$s>;
448
- getProviders(): ServiceProvider$s[];
449
- boot(): Promise<void>;
450
- isBooted(): boolean;
451
- booting(callback: (app: Application$b) => void | Promise<void>): void;
452
- booted(callback: (app: Application$b) => void | Promise<void>): void;
453
- /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
454
- handle(request: Request): Promise<Response>;
455
- /** Register a callback that terminate() runs, in registration order. */
456
- terminating(callback: () => void | Promise<void>): void;
457
- terminate(): Promise<void>;
458
- }
459
- declare const Application$b: Token$j<Application$b>;
460
- /** The object passed to Application.configure().withExceptions(e => …), like Laravel's Exceptions class. */
461
- interface ExceptionsConfigurator$1 {
462
- /** Custom reporting. Return false to stop the default logging. */
463
- report(callback: (error: unknown) => void | boolean | Promise<void | boolean>): this;
464
- /** Custom rendering. Return undefined to fall through to the default rendering. */
465
- render(callback: (error: unknown, request: unknown) => Response | undefined | Promise<Response | undefined>): this;
466
- /** Never report errors of these classes. */
467
- dontReport(...classes: Array<abstract new (...args: never[]) => Error>): this;
468
- }
469
- interface Htmlable$1 {
470
- toHtml(): string;
471
- }
472
-
473
427
  /** The session of the current request (scoped). Loaded and saved by the StartSession middleware. */
474
428
  interface Session$6 {
475
429
  getId(): string;
@@ -532,6 +486,8 @@ interface HttpRequest$6 {
532
486
  header(name: string, defaultValue: string): string;
533
487
  bearerToken(): string | undefined;
534
488
  ip(): string | undefined;
489
+ /** The raw body as text (Laravel's getContent()); '' when there is none. */
490
+ content(): string;
535
491
  expectsJson(): boolean;
536
492
  ajax(): boolean;
537
493
  query<T = unknown>(key?: string, defaultValue?: T): T;
@@ -591,6 +547,61 @@ interface HttpKernel$1 {
591
547
  }
592
548
  declare const HttpKernel$1: Token$j<HttpKernel$1>;
593
549
 
550
+ interface ServiceProvider$s {
551
+ /** Bind things into the container. Synchronous. Don't resolve other services here. */
552
+ register?(): void;
553
+ /** Runs after every provider is registered. May be async (e.g. importing route files). */
554
+ boot?(): void | Promise<void>;
555
+ }
556
+ type ServiceProviderClass$9 = new (app: Application$b) => ServiceProvider$s;
557
+ interface Application$b extends Container$i {
558
+ readonly version: string;
559
+ basePath(path?: string): string;
560
+ appPath(path?: string): string;
561
+ bootstrapPath(path?: string): string;
562
+ configPath(path?: string): string;
563
+ databasePath(path?: string): string;
564
+ publicPath(path?: string): string;
565
+ resourcePath(path?: string): string;
566
+ storagePath(path?: string): string;
567
+ /** With no args returns the environment name. With args returns whether it matches any of them. */
568
+ environment(): string;
569
+ environment(...environments: string[]): boolean;
570
+ isProduction(): boolean;
571
+ isLocal(): boolean;
572
+ runningInConsole(): boolean;
573
+ /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
574
+ setRunningInConsole(value?: boolean): void;
575
+ runningUnitTests(): boolean;
576
+ /** Registers the provider. If the app is already booted, the provider is booted immediately. */
577
+ register(provider: ServiceProvider$s | ServiceProviderClass$9): Promise<ServiceProvider$s>;
578
+ getProviders(): ServiceProvider$s[];
579
+ boot(): Promise<void>;
580
+ isBooted(): boolean;
581
+ booting(callback: (app: Application$b) => void | Promise<void>): void;
582
+ booted(callback: (app: Application$b) => void | Promise<void>): void;
583
+ /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
584
+ handle(request: Request): Promise<Response>;
585
+ /** Register a callback that terminate() runs, in registration order. */
586
+ terminating(callback: () => void | Promise<void>): void;
587
+ terminate(): Promise<void>;
588
+ }
589
+ declare const Application$b: Token$j<Application$b>;
590
+ /** The object passed to Application.configure().withExceptions(e => …), like Laravel's Exceptions class. */
591
+ interface ExceptionsConfigurator$1 {
592
+ /** Custom reporting. Return false to stop the default logging. */
593
+ report(callback: (error: unknown) => void | boolean | Promise<void | boolean>): this;
594
+ /** Custom rendering. Return undefined to fall through to the default rendering. */
595
+ render(callback: (error: unknown, request: unknown) => Response | undefined | Promise<Response | undefined>): this;
596
+ /** Never report errors of these classes. */
597
+ dontReport(...classes: Array<abstract new (...args: never[]) => Error>): this;
598
+ /** Render errors as JSON when the callback returns true, whatever the Accept header. */
599
+ shouldRenderJsonWhen(callback: (request: HttpRequest$6, error: unknown) => boolean): this;
600
+ }
601
+ interface Htmlable$1 {
602
+ toHtml(): string;
603
+ }
604
+
594
605
  type ErrorKind$j = 'Http' | 'Server' | 'ModelNotFound' | 'Validation' | 'Authentication' | 'Authorization' | 'TokenMismatch' | 'BindingResolution' | 'CircularDependency' | 'ContainerNotAvailable';
595
606
  /** Every error thrown by the framework implements this. The exception handler switches on `kind`. */
596
607
  interface OrielError$j extends Error {
@@ -640,8 +651,9 @@ declare class Container$h implements Container$k {
640
651
  }
641
652
 
642
653
  interface RoutingOptions {
643
- web?: string;
644
- api?: string;
654
+ /** One route file or several, loaded in order: web: ['routes/web.ts', 'routes/settings.ts', 'routes/auth.ts']. */
655
+ web?: string | string[];
656
+ api?: string | string[];
645
657
  console?: string;
646
658
  /** A URI such as '/up', not a file. */
647
659
  health?: string;
@@ -667,7 +679,7 @@ declare class ApplicationBuilder {
667
679
  type LifecycleCallback = (app: Application$b) => void | Promise<void>;
668
680
  declare class Application$a extends Container$h implements Application$b {
669
681
  private readonly base;
670
- readonly version = "0.1.0-alpha.3";
682
+ readonly version = "0.1.0-alpha.5";
671
683
  private readonly providers;
672
684
  private readonly bootingCallbacks;
673
685
  private readonly bootedCallbacks;
@@ -865,6 +877,11 @@ interface OrielError$i extends Error {
865
877
 
866
878
  /** Options a job class may declare as public fields. Their presence (or implementing ShouldQueue) makes things queueable. */
867
879
  interface ShouldQueue$5 {
880
+ /**
881
+ * Marks the class as queued at run time: `implements ShouldQueue` leaves no trace once compiled, so the interface
882
+ * asks for `readonly shouldQueue = true`. Jobs, listeners, mailables and notifications carrying it are queued.
883
+ */
884
+ readonly shouldQueue: true;
868
885
  connection?: string;
869
886
  queue?: string;
870
887
  /** Seconds. */
@@ -1000,7 +1017,8 @@ declare class MailMessage {
1000
1017
  introLines: string[];
1001
1018
  actionData?: MailMessageAction;
1002
1019
  outroLines: string[];
1003
- salutationLine: string;
1020
+ /** Unset: "Regards," and config('app.name'), as Laravel's template. */
1021
+ salutationLine?: string;
1004
1022
  toAddresses: MailRecipient$1[];
1005
1023
  ccAddresses: MailRecipient$1[];
1006
1024
  bccAddresses: MailRecipient$1[];
@@ -1042,18 +1060,11 @@ declare class MailNotificationChannel implements NotificationChannel {
1042
1060
  }
1043
1061
 
1044
1062
  declare const NOTIFICATIONS_TABLE = "notifications";
1045
- interface DatabaseNotificationRecord {
1046
- readonly id: string;
1047
- readonly type: string;
1048
- readonly data: Record<string, unknown>;
1049
- readonly createdAt: Date;
1050
- readonly updatedAt: Date;
1051
- readAt: Date | undefined;
1052
- markAsRead(): Promise<void>;
1053
- markAsUnread(): Promise<void>;
1054
- }
1055
- /** notifiable_type + notifiable_id together, never id alone. */
1056
- declare function fetchNotifications(notifiableType: string, notifiableId: unknown, filter?: 'all' | 'read' | 'unread'): Promise<DatabaseNotificationRecord[]>;
1063
+ /**
1064
+ * Laravel's DatabaseChannel: one row in `notifications` per notifiable, with what toDatabase() (or toArray())
1065
+ * returns as JSON. The row is keyed as `user.notifications()` reads it: `notifiable_type` is the model's morph class
1066
+ * (its morph map alias, else its class name) and it goes to the model's own connection.
1067
+ */
1057
1068
  declare class DatabaseNotificationChannel implements NotificationChannel {
1058
1069
  send(notifiable: Notifiable$2, notification: Notification$3): Promise<void>;
1059
1070
  }
@@ -1129,19 +1140,17 @@ declare class SendQueuedNotifications implements Job$5 {
1129
1140
 
1130
1141
  type NotifiableConstructor = new (...args: any[]) => object;
1131
1142
  /**
1132
- * Mirrors Laravel's Illuminate\Notifications\Notifiable trait: `class User extends Notifiable(Model) {}`. Custom
1133
- * routing per channel follows Laravel's own resolution order: a `routeNotificationFor<Channel>()` method (Studly
1134
- * name) wins if present, else 'mail' reads `email`/`getAttribute('email')`, 'database' returns the instance itself
1135
- * (the database channel derives the table row from it directly), and anything else is unrouted (`undefined`).
1143
+ * Laravel's RoutesNotifications trait: `notify()`, `notifyNow()` and `routeNotificationFor()`. Apps use
1144
+ * `Notifiable` from '@orieljs/framework', which adds the database notifications relations. Custom routing per
1145
+ * channel follows Laravel's order: a `routeNotificationFor<Channel>()` method (Studly name) wins if present, else
1146
+ * 'mail' reads `email`/`getAttribute('email')`, 'database' returns the instance itself (the database channel derives
1147
+ * the row from it), and anything else is unrouted (`undefined`).
1136
1148
  */
1137
- declare function Notifiable$1<TBase extends NotifiableConstructor>(Base: TBase): {
1149
+ declare function RoutesNotifications<TBase extends NotifiableConstructor>(Base: TBase): {
1138
1150
  new (...args: any[]): {
1139
1151
  routeNotificationFor(channel: string, notification: Notification$3): unknown;
1140
1152
  notify(notification: Notification$3): Promise<void>;
1141
1153
  notifyNow(notification: Notification$3, channels?: string[]): Promise<void>;
1142
- notifications(): Promise<DatabaseNotificationRecord[]>;
1143
- unreadNotifications(): Promise<DatabaseNotificationRecord[]>;
1144
- readNotifications(): Promise<DatabaseNotificationRecord[]>;
1145
1154
  };
1146
1155
  } & TBase;
1147
1156
 
@@ -1385,47 +1394,6 @@ interface Container$e {
1385
1394
  }
1386
1395
  declare const Container$e: Token$e<Container$e>;
1387
1396
 
1388
- interface ServiceProvider$p {
1389
- /** Bind things into the container. Synchronous. Don't resolve other services here. */
1390
- register?(): void;
1391
- /** Runs after every provider is registered. May be async (e.g. importing route files). */
1392
- boot?(): void | Promise<void>;
1393
- }
1394
- type ServiceProviderClass$7 = new (app: Application$7) => ServiceProvider$p;
1395
- interface Application$7 extends Container$e {
1396
- readonly version: string;
1397
- basePath(path?: string): string;
1398
- appPath(path?: string): string;
1399
- bootstrapPath(path?: string): string;
1400
- configPath(path?: string): string;
1401
- databasePath(path?: string): string;
1402
- publicPath(path?: string): string;
1403
- resourcePath(path?: string): string;
1404
- storagePath(path?: string): string;
1405
- /** With no args returns the environment name. With args returns whether it matches any of them. */
1406
- environment(): string;
1407
- environment(...environments: string[]): boolean;
1408
- isProduction(): boolean;
1409
- isLocal(): boolean;
1410
- runningInConsole(): boolean;
1411
- /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
1412
- setRunningInConsole(value?: boolean): void;
1413
- runningUnitTests(): boolean;
1414
- /** Registers the provider. If the app is already booted, the provider is booted immediately. */
1415
- register(provider: ServiceProvider$p | ServiceProviderClass$7): Promise<ServiceProvider$p>;
1416
- getProviders(): ServiceProvider$p[];
1417
- boot(): Promise<void>;
1418
- isBooted(): boolean;
1419
- booting(callback: (app: Application$7) => void | Promise<void>): void;
1420
- booted(callback: (app: Application$7) => void | Promise<void>): void;
1421
- /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
1422
- handle(request: Request): Promise<Response>;
1423
- /** Register a callback that terminate() runs, in registration order. */
1424
- terminating(callback: () => void | Promise<void>): void;
1425
- terminate(): Promise<void>;
1426
- }
1427
- declare const Application$7: Token$j<Application$7>;
1428
-
1429
1397
  /** The session of the current request (scoped). Loaded and saved by the StartSession middleware. */
1430
1398
  interface Session$5 {
1431
1399
  getId(): string;
@@ -1488,6 +1456,8 @@ interface HttpRequest$5 {
1488
1456
  header(name: string, defaultValue: string): string;
1489
1457
  bearerToken(): string | undefined;
1490
1458
  ip(): string | undefined;
1459
+ /** The raw body as text (Laravel's getContent()); '' when there is none. */
1460
+ content(): string;
1491
1461
  expectsJson(): boolean;
1492
1462
  ajax(): boolean;
1493
1463
  query<T = unknown>(key?: string, defaultValue?: T): T;
@@ -1521,6 +1491,47 @@ interface Middleware$5 {
1521
1491
  }
1522
1492
  type MiddlewareClass$1 = new (...args: any[]) => Middleware$5;
1523
1493
 
1494
+ interface ServiceProvider$p {
1495
+ /** Bind things into the container. Synchronous. Don't resolve other services here. */
1496
+ register?(): void;
1497
+ /** Runs after every provider is registered. May be async (e.g. importing route files). */
1498
+ boot?(): void | Promise<void>;
1499
+ }
1500
+ type ServiceProviderClass$7 = new (app: Application$7) => ServiceProvider$p;
1501
+ interface Application$7 extends Container$e {
1502
+ readonly version: string;
1503
+ basePath(path?: string): string;
1504
+ appPath(path?: string): string;
1505
+ bootstrapPath(path?: string): string;
1506
+ configPath(path?: string): string;
1507
+ databasePath(path?: string): string;
1508
+ publicPath(path?: string): string;
1509
+ resourcePath(path?: string): string;
1510
+ storagePath(path?: string): string;
1511
+ /** With no args returns the environment name. With args returns whether it matches any of them. */
1512
+ environment(): string;
1513
+ environment(...environments: string[]): boolean;
1514
+ isProduction(): boolean;
1515
+ isLocal(): boolean;
1516
+ runningInConsole(): boolean;
1517
+ /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
1518
+ setRunningInConsole(value?: boolean): void;
1519
+ runningUnitTests(): boolean;
1520
+ /** Registers the provider. If the app is already booted, the provider is booted immediately. */
1521
+ register(provider: ServiceProvider$p | ServiceProviderClass$7): Promise<ServiceProvider$p>;
1522
+ getProviders(): ServiceProvider$p[];
1523
+ boot(): Promise<void>;
1524
+ isBooted(): boolean;
1525
+ booting(callback: (app: Application$7) => void | Promise<void>): void;
1526
+ booted(callback: (app: Application$7) => void | Promise<void>): void;
1527
+ /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
1528
+ handle(request: Request): Promise<Response>;
1529
+ /** Register a callback that terminate() runs, in registration order. */
1530
+ terminating(callback: () => void | Promise<void>): void;
1531
+ terminate(): Promise<void>;
1532
+ }
1533
+ declare const Application$7: Token$j<Application$7>;
1534
+
1524
1535
  /** Public method names of a controller (excludes non-function members). */
1525
1536
  type ActionMethods$1<C> = {
1526
1537
  [K in keyof C]: C[K] extends (...args: any[]) => unknown ? K : never;
@@ -1538,7 +1549,7 @@ interface Route$2 {
1538
1549
  readonly uri: string;
1539
1550
  getName(): string | undefined;
1540
1551
  name(name: string): this;
1541
- middleware(...middleware: MiddlewareReference$1[]): this;
1552
+ middleware(...middleware: Array<MiddlewareReference$1 | readonly MiddlewareReference$1[]>): this;
1542
1553
  withoutMiddleware(...middleware: MiddlewareReference$1[]): this;
1543
1554
  where(parameter: string, pattern: string): this;
1544
1555
  where(patterns: Record<string, string>): this;
@@ -1546,7 +1557,7 @@ interface Route$2 {
1546
1557
  interface RouteRegistrar$1 {
1547
1558
  prefix(prefix: string): RouteRegistrar$1;
1548
1559
  name(prefix: string): RouteRegistrar$1;
1549
- middleware(...middleware: MiddlewareReference$1[]): RouteRegistrar$1;
1560
+ middleware(...middleware: Array<MiddlewareReference$1 | readonly MiddlewareReference$1[]>): RouteRegistrar$1;
1550
1561
  controller(controller: Class$e<unknown>): RouteRegistrar$1;
1551
1562
  group(routes: () => void | Promise<void>): Promise<void>;
1552
1563
  }
@@ -1574,7 +1585,7 @@ interface Router$1 {
1574
1585
  fallback(action: RouteAction$1): Route$2;
1575
1586
  prefix(prefix: string): RouteRegistrar$1;
1576
1587
  name(prefix: string): RouteRegistrar$1;
1577
- middleware(...middleware: MiddlewareReference$1[]): RouteRegistrar$1;
1588
+ middleware(...middleware: Array<MiddlewareReference$1 | readonly MiddlewareReference$1[]>): RouteRegistrar$1;
1578
1589
  controller(controller: Class$e<unknown>): RouteRegistrar$1;
1579
1590
  /** Explicit model binding: Route.model('author', User). */
1580
1591
  model(parameter: string, model: Class$e<unknown>): void;
@@ -1601,6 +1612,12 @@ interface UrlGenerator$1 {
1601
1612
  current(): string;
1602
1613
  previous(fallback?: string): string;
1603
1614
  hasRoute(name: string): boolean;
1615
+ /** A URL to a named route with a `signature` query (HMAC-SHA256 keyed by APP_KEY); `expiration` adds `expires`. */
1616
+ signedRoute(name: string, parameters?: unknown, expiration?: Date | number, absolute?: boolean): string;
1617
+ /** signedRoute() that expires: a Date, or seconds from now. */
1618
+ temporarySignedRoute(name: string, expiration: Date | number, parameters?: unknown, absolute?: boolean): string;
1619
+ /** Whether the request URL carries a valid, unexpired signature (`absolute: false` signs the path only). */
1620
+ hasValidSignature(request: HttpRequest$5, absolute?: boolean): boolean;
1604
1621
  }
1605
1622
  declare const UrlGenerator$1: Token$j<UrlGenerator$1>;
1606
1623
 
@@ -1670,7 +1687,8 @@ declare class RouteDefinition implements Route$2 {
1670
1687
  getName(): string | undefined;
1671
1688
  /** Appends, like Laravel's $action['as'] .= $name. */
1672
1689
  name(name: string): this;
1673
- middleware(...middleware: MiddlewareReference$1[]): this;
1690
+ /** middleware('auth', 'verified') or middleware(['auth', 'verified']). */
1691
+ middleware(...middleware: Array<MiddlewareReference$1 | readonly MiddlewareReference$1[]>): this;
1674
1692
  withoutMiddleware(...middleware: MiddlewareReference$1[]): this;
1675
1693
  where(parameter: string | Record<string, string>, pattern?: string): this;
1676
1694
  gatherMiddleware(): MiddlewareReference$1[];
@@ -1710,7 +1728,7 @@ declare class GroupRegistrar implements RouteRegistrar$1 {
1710
1728
  constructor(router: GroupHost);
1711
1729
  prefix(prefix: string): this;
1712
1730
  name(prefix: string): this;
1713
- middleware(...middleware: MiddlewareReference$1[]): this;
1731
+ middleware(...middleware: Array<MiddlewareReference$1 | readonly MiddlewareReference$1[]>): this;
1714
1732
  controller(controller: Class$e<unknown>): this;
1715
1733
  group(routes: () => void | Promise<void>): Promise<void>;
1716
1734
  get<C>(uri: string, action: ControllerAction$1<C> | RouteClosure$1 | InvokableClass$1 | string): RouteDefinition;
@@ -1760,7 +1778,7 @@ declare class BaseRouter implements Router$1 {
1760
1778
  fallback(action: RouteAction$1): RouteDefinition;
1761
1779
  prefix(prefix: string): GroupRegistrar;
1762
1780
  name(prefix: string): GroupRegistrar;
1763
- middleware(...middleware: MiddlewareReference$1[]): GroupRegistrar;
1781
+ middleware(...middleware: Array<MiddlewareReference$1 | readonly MiddlewareReference$1[]>): GroupRegistrar;
1764
1782
  controller(controller: Class$e<unknown>): GroupRegistrar;
1765
1783
  /**
1766
1784
  * Laravel's Route::group(attributes, callback). A synchronous callback's attributes are popped before this
@@ -1776,6 +1794,12 @@ declare class BaseRouter implements Router$1 {
1776
1794
  getPatternVersion(): number;
1777
1795
  getBinder(parameter: string): RouteBinder | undefined;
1778
1796
  getModel(parameter: string): Class$e<unknown> | undefined;
1797
+ /**
1798
+ * Binds a matched route's raw parameter values as a request to it would: Route.bind() callbacks, Route.model(),
1799
+ * then implicit binding through the RouteModelResolver of `container`. A missing model throws
1800
+ * RouteModelNotFoundError (404). Live uses it to check a page route's `can:` middleware again on each update.
1801
+ */
1802
+ substituteBindings(route: RouteDefinition, values: Readonly<Record<string, string | undefined>>, container: Container$e): Promise<Record<string, unknown>>;
1779
1803
  aliasMiddleware(name: string, middleware: MiddlewareClass$1): this;
1780
1804
  /** The middleware aliases (Laravel's Router::getMiddleware()). */
1781
1805
  getMiddleware(): Record<string, MiddlewareClass$1>;
@@ -1820,6 +1844,20 @@ declare class BaseUrlGenerator implements UrlGenerator$1 {
1820
1844
  /** The Referer header, then the session's previous URL, then `fallback`, then the root (Laravel's order). */
1821
1845
  previous(fallback?: string): string;
1822
1846
  hasRoute(name: string): boolean;
1847
+ /**
1848
+ * Laravel's URL::signedRoute(): the route URL with its parameters sorted by name, then a `signature` query (the
1849
+ * HMAC-SHA256 of that URL, keyed by APP_KEY). `expiration` (a Date, or seconds from now) adds `expires`.
1850
+ * `absolute: false` signs the path only (checked by `signed:relative`).
1851
+ */
1852
+ signedRoute(name: string, parameters?: unknown, expiration?: Date | number, absolute?: boolean): string;
1853
+ /** Laravel's URL::temporarySignedRoute(): a signed URL that expires at `expiration` (a Date, or seconds from now). */
1854
+ temporarySignedRoute(name: string, expiration: Date | number, parameters?: unknown, absolute?: boolean): string;
1855
+ /** The request URL carries a correct signature (current or previous APP_KEY) that hasn't expired. */
1856
+ hasValidSignature(request: HttpRequest$5, absolute?: boolean): boolean;
1857
+ /** The signature matches the URL without its `signature` query, in a constant-time comparison. */
1858
+ hasCorrectSignature(request: HttpRequest$5, absolute?: boolean): boolean;
1859
+ /** No `expires` query, or one that is still in the future. */
1860
+ signatureHasNotExpired(request: HttpRequest$5): boolean;
1823
1861
  }
1824
1862
 
1825
1863
  /** A middleware reference after alias and group expansion: 'throttle:60,1' → { cls: Throttle, parameters: ['60', '1'] }. */
@@ -1934,6 +1972,21 @@ declare class RoutingError extends Error implements OrielError$g {
1934
1972
  readonly status = 500;
1935
1973
  readonly name = "RoutingError";
1936
1974
  }
1975
+ /** A signed URL whose signature is missing, wrong or expired (Laravel's InvalidSignatureException). */
1976
+ declare class InvalidUrlSignatureError extends Error implements OrielError$g {
1977
+ readonly kind: "Http";
1978
+ readonly status = 403;
1979
+ readonly name = "InvalidUrlSignatureError";
1980
+ constructor();
1981
+ }
1982
+ /** Too many requests in the window (Laravel's ThrottleRequestsException): 429 with Retry-After and X-RateLimit-*. */
1983
+ declare class ThrottleRequestsError extends Error implements OrielError$g {
1984
+ readonly headers: Record<string, string>;
1985
+ readonly kind: "Http";
1986
+ readonly status = 429;
1987
+ readonly name = "ThrottleRequestsError";
1988
+ constructor(headers?: Record<string, string>);
1989
+ }
1937
1990
 
1938
1991
  type ResourceMethod = 'index' | 'create' | 'store' | 'show' | 'edit' | 'update' | 'destroy';
1939
1992
  interface ResourceRoute {
@@ -1957,6 +2010,29 @@ declare function toResponse(request: unknown, value: unknown): Promise<Response>
1957
2010
  */
1958
2011
  declare const Route$1: Facade$a<BaseRouter, object>;
1959
2012
 
2013
+ /**
2014
+ * Dispatched by the health route (`/up`) on every request (Laravel's DiagnosingHealth event). A listener checks
2015
+ * something the application needs, such as the database or the cache, and throws when it fails: `/up` then answers
2016
+ * 500 with "Application experiencing problems", and the exception is reported.
2017
+ *
2018
+ * Event.listen(DiagnosingHealth, async () => { await DB.select('select 1') })
2019
+ */
2020
+ declare class DiagnosingHealth {
2021
+ }
2022
+ interface HealthPage {
2023
+ /** False when a check failed: the page says so and the status is 500 (default true). */
2024
+ healthy?: boolean;
2025
+ /** How long the request took, shown when given. */
2026
+ milliseconds?: number;
2027
+ /** The page title (default "Oriel"). */
2028
+ appName?: string;
2029
+ }
2030
+ /**
2031
+ * The health route's page (Laravel's health-up view): "Application up", or "Application experiencing problems" with
2032
+ * status 500. Self-contained HTML with inline CSS: it loads nothing, so it answers even when the assets don't.
2033
+ */
2034
+ declare function healthResponse(page?: HealthPage): Response;
2035
+
1960
2036
  /** A route file may export a function instead of (or as well as) calling the Route facade at the top level. */
1961
2037
  type RouteFileCallback = (router: Router$1) => void | Promise<void>;
1962
2038
  /**
@@ -1965,15 +2041,15 @@ type RouteFileCallback = (router: Router$1) => void | Promise<void>;
1965
2041
  * A default export that is a function is called with the router.
1966
2042
  */
1967
2043
  declare function loadRoutesFrom(app: Application$7, router: Router$1, file: string): Promise<void>;
1968
- /** The health route's page (Laravel's `/up`): 200 as long as the application boots and handles requests. */
1969
- declare function healthResponse(): Response;
1970
2044
 
1971
2045
  /**
1972
- * Binds the Router and the UrlGenerator, and once the app has booted loads the files given to withRouting(): the health URI,
1973
- * then routes/web.ts in the `web` middleware group, then routes/api.ts under the api prefix in the `api` group
1974
- * (Laravel's ApplicationBuilder::withRouting).
2046
+ * Binds the Router and the UrlGenerator, registers the `signed` and `throttle` middleware, and once the app has booted
2047
+ * loads the files given to withRouting(): the health URI (which dispatches DiagnosingHealth), then the web files in the
2048
+ * `web` middleware group, then the api files under the api prefix in the `api` group (Laravel's
2049
+ * ApplicationBuilder::withRouting).
1975
2050
  */
1976
2051
  declare class RoutingServiceProvider extends ServiceProvider$o {
2052
+ #private;
1977
2053
  register(): void;
1978
2054
  /**
1979
2055
  * The files load in a booted() callback, after every provider's boot() (Laravel's withRouting does the same), so
@@ -1983,6 +2059,25 @@ declare class RoutingServiceProvider extends ServiceProvider$o {
1983
2059
  boot(): void;
1984
2060
  }
1985
2061
 
2062
+ /**
2063
+ * Laravel's ThrottleRequests (`throttle:<maxAttempts>,<decayMinutes>[,<prefix>]`): counts the client's requests
2064
+ * (the signed-in user, else the IP) in a window and answers 429 once there are too many. Responses carry
2065
+ * X-RateLimit-Limit and X-RateLimit-Remaining; the 429 adds Retry-After and X-RateLimit-Reset.
2066
+ */
2067
+ declare class ThrottleRequests implements Middleware$5 {
2068
+ handle(request: HttpRequest$5, next: Next$6, maxAttempts?: string, decayMinutes?: string, prefix?: string): Promise<Response>;
2069
+ /** The signed-in user's identifier, else the client IP, hashed (Laravel's resolveRequestSignature()). */
2070
+ protected resolveRequestSignature(request: HttpRequest$5): string;
2071
+ }
2072
+
2073
+ /**
2074
+ * Laravel's ValidateSignature (`signed`, `signed:relative`): the request URL must carry a valid, unexpired
2075
+ * signature from URL.signedRoute()/temporarySignedRoute(), else 403. `relative` checks a path-only signature.
2076
+ */
2077
+ declare class ValidateSignature implements Middleware$5 {
2078
+ handle(request: HttpRequest$5, next: Next$6, ...parameters: string[]): Promise<Response>;
2079
+ }
2080
+
1986
2081
  /** A typed, runtime-unique key for container bindings. */
1987
2082
  interface Token$d<T> {
1988
2083
  readonly id: symbol;
@@ -2019,78 +2114,6 @@ interface Container$d {
2019
2114
  }
2020
2115
  declare const Container$d: Token$d<Container$d>;
2021
2116
 
2022
- interface ServiceProvider$n {
2023
- /** Bind things into the container. Synchronous. Don't resolve other services here. */
2024
- register?(): void;
2025
- /** Runs after every provider is registered. May be async (e.g. importing route files). */
2026
- boot?(): void | Promise<void>;
2027
- }
2028
- type ServiceProviderClass$6 = new (app: Application$6) => ServiceProvider$n;
2029
- interface Application$6 extends Container$d {
2030
- readonly version: string;
2031
- basePath(path?: string): string;
2032
- appPath(path?: string): string;
2033
- bootstrapPath(path?: string): string;
2034
- configPath(path?: string): string;
2035
- databasePath(path?: string): string;
2036
- publicPath(path?: string): string;
2037
- resourcePath(path?: string): string;
2038
- storagePath(path?: string): string;
2039
- /** With no args returns the environment name. With args returns whether it matches any of them. */
2040
- environment(): string;
2041
- environment(...environments: string[]): boolean;
2042
- isProduction(): boolean;
2043
- isLocal(): boolean;
2044
- runningInConsole(): boolean;
2045
- /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
2046
- setRunningInConsole(value?: boolean): void;
2047
- runningUnitTests(): boolean;
2048
- /** Registers the provider. If the app is already booted, the provider is booted immediately. */
2049
- register(provider: ServiceProvider$n | ServiceProviderClass$6): Promise<ServiceProvider$n>;
2050
- getProviders(): ServiceProvider$n[];
2051
- boot(): Promise<void>;
2052
- isBooted(): boolean;
2053
- booting(callback: (app: Application$6) => void | Promise<void>): void;
2054
- booted(callback: (app: Application$6) => void | Promise<void>): void;
2055
- /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
2056
- handle(request: Request): Promise<Response>;
2057
- /** Register a callback that terminate() runs, in registration order. */
2058
- terminating(callback: () => void | Promise<void>): void;
2059
- terminate(): Promise<void>;
2060
- }
2061
- declare const Application$6: Token$j<Application$6>;
2062
- interface ExceptionHandler {
2063
- report(error: unknown): Promise<void>;
2064
- shouldReport(error: unknown): boolean;
2065
- /** `request` is the scoped HttpRequest (Contracts/Http) when available, else the raw Request. */
2066
- render(request: unknown, error: unknown): Promise<Response>;
2067
- }
2068
- declare const ExceptionHandler: Token$j<ExceptionHandler>;
2069
- /** The object passed to Application.configure().withExceptions(e => …), like Laravel's Exceptions class. */
2070
- interface ExceptionsConfigurator {
2071
- /** Custom reporting. Return false to stop the default logging. */
2072
- report(callback: (error: unknown) => void | boolean | Promise<void | boolean>): this;
2073
- /** Custom rendering. Return undefined to fall through to the default rendering. */
2074
- render(callback: (error: unknown, request: unknown) => Response | undefined | Promise<Response | undefined>): this;
2075
- /** Never report errors of these classes. */
2076
- dontReport(...classes: Array<abstract new (...args: never[]) => Error>): this;
2077
- }
2078
-
2079
- interface ConfigRepository$1 {
2080
- has(key: string): boolean;
2081
- /** Dot notation: get('database.connections.sqlite.database'). */
2082
- get<T = unknown>(key: string, defaultValue?: T): T;
2083
- set(key: string, value: unknown): void;
2084
- set(values: Record<string, unknown>): void;
2085
- push(key: string, value: unknown): void;
2086
- all(): Record<string, unknown>;
2087
- }
2088
- declare const ConfigRepository$1: Token$j<ConfigRepository$1>;
2089
- /** Anything a controller can return that knows how to become a Response. */
2090
- interface Responsable$1 {
2091
- toResponse(request: unknown): Response | Promise<Response>;
2092
- }
2093
-
2094
2117
  /** The session of the current request (scoped). Loaded and saved by the StartSession middleware. */
2095
2118
  interface Session$4 {
2096
2119
  getId(): string;
@@ -2157,6 +2180,8 @@ interface HttpRequest$4 {
2157
2180
  header(name: string, defaultValue: string): string;
2158
2181
  bearerToken(): string | undefined;
2159
2182
  ip(): string | undefined;
2183
+ /** The raw body as text (Laravel's getContent()); '' when there is none. */
2184
+ content(): string;
2160
2185
  expectsJson(): boolean;
2161
2186
  ajax(): boolean;
2162
2187
  query<T = unknown>(key?: string, defaultValue?: T): T;
@@ -2224,6 +2249,80 @@ interface ResponseFactory$1 {
2224
2249
  }
2225
2250
  declare const ResponseFactory$1: Token$j<ResponseFactory$1>;
2226
2251
 
2252
+ interface ServiceProvider$n {
2253
+ /** Bind things into the container. Synchronous. Don't resolve other services here. */
2254
+ register?(): void;
2255
+ /** Runs after every provider is registered. May be async (e.g. importing route files). */
2256
+ boot?(): void | Promise<void>;
2257
+ }
2258
+ type ServiceProviderClass$6 = new (app: Application$6) => ServiceProvider$n;
2259
+ interface Application$6 extends Container$d {
2260
+ readonly version: string;
2261
+ basePath(path?: string): string;
2262
+ appPath(path?: string): string;
2263
+ bootstrapPath(path?: string): string;
2264
+ configPath(path?: string): string;
2265
+ databasePath(path?: string): string;
2266
+ publicPath(path?: string): string;
2267
+ resourcePath(path?: string): string;
2268
+ storagePath(path?: string): string;
2269
+ /** With no args returns the environment name. With args returns whether it matches any of them. */
2270
+ environment(): string;
2271
+ environment(...environments: string[]): boolean;
2272
+ isProduction(): boolean;
2273
+ isLocal(): boolean;
2274
+ runningInConsole(): boolean;
2275
+ /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
2276
+ setRunningInConsole(value?: boolean): void;
2277
+ runningUnitTests(): boolean;
2278
+ /** Registers the provider. If the app is already booted, the provider is booted immediately. */
2279
+ register(provider: ServiceProvider$n | ServiceProviderClass$6): Promise<ServiceProvider$n>;
2280
+ getProviders(): ServiceProvider$n[];
2281
+ boot(): Promise<void>;
2282
+ isBooted(): boolean;
2283
+ booting(callback: (app: Application$6) => void | Promise<void>): void;
2284
+ booted(callback: (app: Application$6) => void | Promise<void>): void;
2285
+ /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
2286
+ handle(request: Request): Promise<Response>;
2287
+ /** Register a callback that terminate() runs, in registration order. */
2288
+ terminating(callback: () => void | Promise<void>): void;
2289
+ terminate(): Promise<void>;
2290
+ }
2291
+ declare const Application$6: Token$j<Application$6>;
2292
+ interface ExceptionHandler {
2293
+ report(error: unknown): Promise<void>;
2294
+ shouldReport(error: unknown): boolean;
2295
+ /** `request` is the scoped HttpRequest (Contracts/Http) when available, else the raw Request. */
2296
+ render(request: unknown, error: unknown): Promise<Response>;
2297
+ }
2298
+ declare const ExceptionHandler: Token$j<ExceptionHandler>;
2299
+ /** The object passed to Application.configure().withExceptions(e => …), like Laravel's Exceptions class. */
2300
+ interface ExceptionsConfigurator {
2301
+ /** Custom reporting. Return false to stop the default logging. */
2302
+ report(callback: (error: unknown) => void | boolean | Promise<void | boolean>): this;
2303
+ /** Custom rendering. Return undefined to fall through to the default rendering. */
2304
+ render(callback: (error: unknown, request: unknown) => Response | undefined | Promise<Response | undefined>): this;
2305
+ /** Never report errors of these classes. */
2306
+ dontReport(...classes: Array<abstract new (...args: never[]) => Error>): this;
2307
+ /** Render errors as JSON when the callback returns true, whatever the Accept header. */
2308
+ shouldRenderJsonWhen(callback: (request: HttpRequest$4, error: unknown) => boolean): this;
2309
+ }
2310
+
2311
+ interface ConfigRepository$1 {
2312
+ has(key: string): boolean;
2313
+ /** Dot notation: get('database.connections.sqlite.database'). */
2314
+ get<T = unknown>(key: string, defaultValue?: T): T;
2315
+ set(key: string, value: unknown): void;
2316
+ set(values: Record<string, unknown>): void;
2317
+ push(key: string, value: unknown): void;
2318
+ all(): Record<string, unknown>;
2319
+ }
2320
+ declare const ConfigRepository$1: Token$j<ConfigRepository$1>;
2321
+ /** Anything a controller can return that knows how to become a Response. */
2322
+ interface Responsable$1 {
2323
+ toResponse(request: unknown): Response | Promise<Response>;
2324
+ }
2325
+
2227
2326
  /** Public method names of a controller (excludes non-function members). */
2228
2327
  type ActionMethods<C> = {
2229
2328
  [K in keyof C]: C[K] extends (...args: any[]) => unknown ? K : never;
@@ -2241,7 +2340,7 @@ interface Route {
2241
2340
  readonly uri: string;
2242
2341
  getName(): string | undefined;
2243
2342
  name(name: string): this;
2244
- middleware(...middleware: MiddlewareReference[]): this;
2343
+ middleware(...middleware: Array<MiddlewareReference | readonly MiddlewareReference[]>): this;
2245
2344
  withoutMiddleware(...middleware: MiddlewareReference[]): this;
2246
2345
  where(parameter: string, pattern: string): this;
2247
2346
  where(patterns: Record<string, string>): this;
@@ -2249,7 +2348,7 @@ interface Route {
2249
2348
  interface RouteRegistrar {
2250
2349
  prefix(prefix: string): RouteRegistrar;
2251
2350
  name(prefix: string): RouteRegistrar;
2252
- middleware(...middleware: MiddlewareReference[]): RouteRegistrar;
2351
+ middleware(...middleware: Array<MiddlewareReference | readonly MiddlewareReference[]>): RouteRegistrar;
2253
2352
  controller(controller: Class$d<unknown>): RouteRegistrar;
2254
2353
  group(routes: () => void | Promise<void>): Promise<void>;
2255
2354
  }
@@ -2277,7 +2376,7 @@ interface Router {
2277
2376
  fallback(action: RouteAction): Route;
2278
2377
  prefix(prefix: string): RouteRegistrar;
2279
2378
  name(prefix: string): RouteRegistrar;
2280
- middleware(...middleware: MiddlewareReference[]): RouteRegistrar;
2379
+ middleware(...middleware: Array<MiddlewareReference | readonly MiddlewareReference[]>): RouteRegistrar;
2281
2380
  controller(controller: Class$d<unknown>): RouteRegistrar;
2282
2381
  /** Explicit model binding: Route.model('author', User). */
2283
2382
  model(parameter: string, model: Class$d<unknown>): void;
@@ -2313,6 +2412,12 @@ interface UrlGenerator {
2313
2412
  current(): string;
2314
2413
  previous(fallback?: string): string;
2315
2414
  hasRoute(name: string): boolean;
2415
+ /** A URL to a named route with a `signature` query (HMAC-SHA256 keyed by APP_KEY); `expiration` adds `expires`. */
2416
+ signedRoute(name: string, parameters?: unknown, expiration?: Date | number, absolute?: boolean): string;
2417
+ /** signedRoute() that expires: a Date, or seconds from now. */
2418
+ temporarySignedRoute(name: string, expiration: Date | number, parameters?: unknown, absolute?: boolean): string;
2419
+ /** Whether the request URL carries a valid, unexpired signature (`absolute: false` signs the path only). */
2420
+ hasValidSignature(request: HttpRequest$4, absolute?: boolean): boolean;
2316
2421
  }
2317
2422
  declare const UrlGenerator: Token$j<UrlGenerator>;
2318
2423
  interface RedirectResponse$1 extends Responsable$1 {
@@ -2413,6 +2518,70 @@ declare abstract class ServiceProvider$m implements ServiceProvider$u {
2413
2518
  protected mergeConfigFrom(defaults: Record<string, unknown>, key: string): void;
2414
2519
  }
2415
2520
 
2521
+ /**
2522
+ * What a file's bytes show it to be, read from its leading bytes the way PHP's finfo reads them for Laravel (the file
2523
+ * validation rules, and the extension a stored upload gets). The client's file name and MIME type are never consulted.
2524
+ */
2525
+ interface DetectedType {
2526
+ /** 'image/png', 'text/plain', …; 'application/octet-stream' when no format matches, 'application/x-empty' for no bytes. */
2527
+ readonly mime: string;
2528
+ /** The extensions that name the type, the usual one first. Empty when the bytes match no format. */
2529
+ readonly extensions: readonly string[];
2530
+ }
2531
+ declare const JPEG: DetectedType;
2532
+ declare const PNG: DetectedType;
2533
+ declare const GIF: DetectedType;
2534
+ declare const WEBP: DetectedType;
2535
+ declare const AVIF: DetectedType;
2536
+ declare const BMP: DetectedType;
2537
+ declare const SVG: DetectedType;
2538
+ declare const PDF: DetectedType;
2539
+ declare const HTML: DetectedType;
2540
+ declare const XML: DetectedType;
2541
+ declare const TEXT: DetectedType;
2542
+ declare const UNKNOWN: DetectedType;
2543
+ declare const EMPTY: DetectedType;
2544
+ /** The raster formats the image rule accepts: Laravel 12's jpg, jpeg, png, gif, bmp and webp, plus AVIF. */
2545
+ declare const RASTER_IMAGES: ReadonlySet<string>;
2546
+ /** Every format recognised by its bytes other than plain text. */
2547
+ declare const BINARY_AND_MARKUP_TYPES: readonly DetectedType[];
2548
+ /**
2549
+ * How much of a file is read to tell its type: the window checked for binary bytes (libmagic reads its first megabyte
2550
+ * too). Uploads read this much to be named, so naming and validation see the same bytes.
2551
+ */
2552
+ declare const SNIFF_BYTES: number;
2553
+ /** The type the bytes show. */
2554
+ declare function detectFileType(bytes: Uint8Array): DetectedType;
2555
+
2556
+ declare const fileType_AVIF: typeof AVIF;
2557
+ declare const fileType_BINARY_AND_MARKUP_TYPES: typeof BINARY_AND_MARKUP_TYPES;
2558
+ declare const fileType_BMP: typeof BMP;
2559
+ type fileType_DetectedType = DetectedType;
2560
+ declare const fileType_EMPTY: typeof EMPTY;
2561
+ declare const fileType_GIF: typeof GIF;
2562
+ declare const fileType_HTML: typeof HTML;
2563
+ declare const fileType_JPEG: typeof JPEG;
2564
+ declare const fileType_PDF: typeof PDF;
2565
+ declare const fileType_PNG: typeof PNG;
2566
+ declare const fileType_RASTER_IMAGES: typeof RASTER_IMAGES;
2567
+ declare const fileType_SNIFF_BYTES: typeof SNIFF_BYTES;
2568
+ declare const fileType_SVG: typeof SVG;
2569
+ declare const fileType_TEXT: typeof TEXT;
2570
+ declare const fileType_UNKNOWN: typeof UNKNOWN;
2571
+ declare const fileType_WEBP: typeof WEBP;
2572
+ declare const fileType_XML: typeof XML;
2573
+ declare const fileType_detectFileType: typeof detectFileType;
2574
+ declare namespace fileType {
2575
+ export { fileType_AVIF as AVIF, fileType_BINARY_AND_MARKUP_TYPES as BINARY_AND_MARKUP_TYPES, fileType_BMP as BMP, type fileType_DetectedType as DetectedType, fileType_EMPTY as EMPTY, fileType_GIF as GIF, fileType_HTML as HTML, fileType_JPEG as JPEG, fileType_PDF as PDF, fileType_PNG as PNG, fileType_RASTER_IMAGES as RASTER_IMAGES, fileType_SNIFF_BYTES as SNIFF_BYTES, fileType_SVG as SVG, fileType_TEXT as TEXT, fileType_UNKNOWN as UNKNOWN, fileType_WEBP as WEBP, fileType_XML as XML, fileType_detectFileType as detectFileType };
2576
+ }
2577
+
2578
+ /**
2579
+ * Whether a JSON text nests objects and arrays deeper than `maxDepth`, found by scanning (no parsing, no recursion):
2580
+ * brackets inside strings don't count. The kernel answers 400 for such bodies (http.max_json_depth) before the
2581
+ * recursive input handling (sanitizing, TrimStrings, validation) could overflow the stack.
2582
+ */
2583
+ declare function exceedsJsonDepth(text: string, maxDepth: number): boolean;
2584
+
2416
2585
  /** The current container, only when it is a request scope (the kernel binds HttpRequest there). */
2417
2586
  declare function requestScope(): Container$d | undefined;
2418
2587
  declare function currentRequest(): HttpRequest$4 | undefined;
@@ -2454,7 +2623,10 @@ declare class HttpRedirector implements Redirector {
2454
2623
  /** Pulls url.intended from the session (put there by guest()), else goes to `fallback`. */
2455
2624
  intended(fallback?: string, status?: number): HttpRedirectResponse;
2456
2625
  away(url: string, status?: number): HttpRedirectResponse;
2457
- /** Remembers where a guest was going (a GET page, else the previous URL), then redirects to `path`. */
2626
+ /**
2627
+ * Remembers where a guest was going (a GET page, else the previous URL), then redirects to `path`. Only the path
2628
+ * is stored, so intended() goes back on whichever host serves the app, and never to another site's Referer.
2629
+ */
2458
2630
  guest(path: string, status?: number): HttpRedirectResponse;
2459
2631
  setIntendedUrl(url: string): void;
2460
2632
  refresh(status?: number): HttpRedirectResponse;
@@ -2466,13 +2638,26 @@ declare function clientAddress(request: Request): string | undefined;
2466
2638
  /** An uploaded file from a multipart body. store()/storeAs() go through the FilesystemManager. */
2467
2639
  declare class FormUploadedFile implements UploadedFile$5 {
2468
2640
  private readonly file;
2641
+ private readonly detected?;
2469
2642
  readonly clientName: string;
2470
2643
  readonly mimeType: string;
2471
2644
  readonly size: number;
2645
+ /**
2646
+ * Reads the leading bytes first, so extension(), hashName() and store() name the file by its content. The request
2647
+ * builds its uploads this way.
2648
+ */
2649
+ static fromFile(file: Blob & {
2650
+ readonly name?: string;
2651
+ }): Promise<FormUploadedFile>;
2472
2652
  constructor(file: Blob & {
2473
2653
  readonly name?: string;
2474
- });
2475
- /** Guessed from the MIME type, falling back to the client's extension (Laravel's extension()). */
2654
+ }, detected?: fileType.DetectedType | undefined);
2655
+ /**
2656
+ * Laravel's extension(): the type the bytes show (guessExtension()), when they were read and match a known format.
2657
+ * Text and bytes no format matches keep the client's claim (its MIME type, else its file name) when it is a plain
2658
+ * extension, unless it names a format the bytes would have shown or one a browser renders or runs: otherwise 'txt'
2659
+ * for text, '' for the rest. Unread (built directly), the client's claim when it is a plain extension, else ''.
2660
+ */
2476
2661
  extension(): string;
2477
2662
  clientExtension(): string;
2478
2663
  /** A random 40-character name with the guessed extension. */
@@ -2489,6 +2674,8 @@ interface IncomingRequestOptions {
2489
2674
  trustedProxies?: readonly string[];
2490
2675
  /** Largest request body in bytes before a 413 (config http.max_body_size); null is unlimited. Default 8 MB. */
2491
2676
  maxBodySize?: number | null;
2677
+ /** Deepest nesting of objects and arrays in a JSON body before a 400 (config http.max_json_depth); null is unlimited. Default 512. */
2678
+ maxJsonDepth?: number | null;
2492
2679
  }
2493
2680
  /** Exact match, IPv4 CIDR ('10.0.0.0/8') or '*'. */
2494
2681
  declare function ipMatches(ip: string, patterns: readonly string[]): boolean;
@@ -2721,6 +2908,7 @@ declare function applyMiddlewareCallbacks(app: Application$6, kernel: Kernel$1):
2721
2908
  type ReportCallback = (error: unknown) => void | boolean | Promise<void | boolean>;
2722
2909
  type RenderCallback = (error: unknown, request: unknown) => Response | undefined | Promise<Response | undefined>;
2723
2910
  type ErrorClass = abstract new (...args: never[]) => Error;
2911
+ type JsonWhenCallback = (request: HttpRequest$4, error: unknown) => boolean;
2724
2912
  /** HTTP status for an error (spec §7). */
2725
2913
  declare function statusFor(error: unknown): number;
2726
2914
  /** "The title field is required. (and 2 more errors)" (Laravel's ValidationException::summarize). */
@@ -2735,6 +2923,10 @@ declare class ErrorHandler implements ExceptionHandler {
2735
2923
  reportUsing(callback: ReportCallback): void;
2736
2924
  renderUsing(callback: RenderCallback): void;
2737
2925
  ignore(...classes: ErrorClass[]): void;
2926
+ /** Laravel's shouldRenderJsonWhen(): the callback decides JSON or HTML instead of the Accept header. */
2927
+ shouldRenderJsonWhen(callback: JsonWhenCallback): void;
2928
+ /** Laravel's shouldReturnJson(): the shouldRenderJsonWhen() callback when set, else request.expectsJson(). */
2929
+ protected shouldReturnJson(request: HttpRequest$4, error: unknown): boolean;
2738
2930
  shouldReport(error: unknown): boolean;
2739
2931
  /** Report callbacks first (returning false stops the default log), then LogManager.error(), else console.error. Once per error. */
2740
2932
  report(error: unknown): Promise<void>;
@@ -2748,6 +2940,8 @@ declare class ExceptionsConfiguration implements ExceptionsConfigurator {
2748
2940
  report(callback: ReportCallback): this;
2749
2941
  render(callback: RenderCallback): this;
2750
2942
  dontReport(...classes: ErrorClass[]): this;
2943
+ /** shouldRenderJsonWhen((request) => request.is('api/*')): JSON errors for those requests, whatever they accept. */
2944
+ shouldRenderJsonWhen(callback: (request: HttpRequest$4, error: unknown) => boolean): this;
2751
2945
  }
2752
2946
  /** Runs the withExceptions() callbacks against a handler (the provider does this when the handler is built). */
2753
2947
  declare function applyExceptionCallbacks(app: Application$6, handler: ErrorHandler): void;
@@ -3001,6 +3195,11 @@ interface OrielError$e extends Error {
3001
3195
 
3002
3196
  /** Options a job class may declare as public fields. Their presence (or implementing ShouldQueue) makes things queueable. */
3003
3197
  interface ShouldQueue$4 {
3198
+ /**
3199
+ * Marks the class as queued at run time: `implements ShouldQueue` leaves no trace once compiled, so the interface
3200
+ * asks for `readonly shouldQueue = true`. Jobs, listeners, mailables and notifications carrying it are queued.
3201
+ */
3202
+ readonly shouldQueue: true;
3004
3203
  connection?: string;
3005
3204
  queue?: string;
3006
3205
  /** Seconds. */
@@ -3856,6 +4055,8 @@ interface ModelInstance$2 {
3856
4055
  getTable(): string;
3857
4056
  getRouteKey(): unknown;
3858
4057
  getRouteKeyName(): string;
4058
+ /** The value stored in a polymorphic `*_type` column for this model: its morph map alias, else its class name. */
4059
+ getMorphClass(): string;
3859
4060
  getAttribute<T = unknown>(key: string): T;
3860
4061
  setAttribute(key: string, value: unknown): this;
3861
4062
  fill(attributes: Row$4): this;
@@ -3908,6 +4109,28 @@ interface ConsoleKernel$3 {
3908
4109
  command(signature: string, handler: (this: CommandContext$3, ...args: unknown[]) => number | void | Promise<number | void>): ClosureCommand$3;
3909
4110
  }
3910
4111
  declare const ConsoleKernel$3: Token$j<ConsoleKernel$3>;
4112
+ /**
4113
+ * A stored database notification (Laravel's DatabaseNotification model): one row of the `notifications` table, with
4114
+ * its snake_case columns. `user.notifications()`, `unreadNotifications()` and `readNotifications()` query these,
4115
+ * newest first.
4116
+ */
4117
+ interface DatabaseNotification$1 extends ModelInstance$2 {
4118
+ /** A UUID. */
4119
+ readonly id: string;
4120
+ /** The notification's class name. */
4121
+ readonly type: string;
4122
+ /** What the notification's toDatabase() (or toArray()) returned. */
4123
+ readonly data: Record<string, unknown>;
4124
+ read_at: Date | null;
4125
+ readonly created_at: Date | null;
4126
+ readonly updated_at: Date | null;
4127
+ /** Sets read_at to now and saves, unless it is already read. */
4128
+ markAsRead(): Promise<void>;
4129
+ /** Clears read_at and saves, unless it is already unread. */
4130
+ markAsUnread(): Promise<void>;
4131
+ read(): boolean;
4132
+ unread(): boolean;
4133
+ }
3911
4134
 
3912
4135
  type Operator$4 = '=' | '==' | '===' | '!=' | '!==' | '<>' | '<' | '<=' | '>' | '>=';
3913
4136
 
@@ -4673,7 +4896,10 @@ declare class LengthAwarePaginator<T> extends AbstractPaginator<T> {
4673
4896
  hasMorePages(): boolean;
4674
4897
  onLastPage(): boolean;
4675
4898
  nextPageUrl(): string | null;
4676
- /** The page links Laravel renders: previous, the page window with '...' gaps, next. */
4899
+ /**
4900
+ * The page links Laravel renders: previous, the page window with '...' gaps, next. The labels are plain text
4901
+ * ("« Previous", "Next »"), not Laravel's `&laquo;` entities, so a page can print them as text.
4902
+ */
4677
4903
  linkCollection(): PaginationLink[];
4678
4904
  /** Laravel's UrlWindow: the first pages, the slider around the current page and the last pages, with '...' between. */
4679
4905
  protected elements(): Array<UrlRange | '...'>;
@@ -4720,6 +4946,13 @@ declare class Grammar {
4720
4946
  compileOrders(query: Builder$1<unknown>): Sql | undefined;
4721
4947
  compileWheres(wheres: readonly Where[], keyword?: 'where' | 'on'): Sql | undefined;
4722
4948
  compileWhere(where: Where): Sql;
4949
+ /**
4950
+ * whereLike() per driver, as Laravel 12's grammars: Postgres compares the column as text with ilike (like when
4951
+ * case-sensitive); MySQL uses like (like binary); SQLite uses like, or glob with the pattern translated.
4952
+ */
4953
+ compileWhereLike(where: Extract<Where, {
4954
+ type: 'like';
4955
+ }>): Sql;
4723
4956
  compileJoin(joinClause: JoinClause): Sql;
4724
4957
  compileHavings(havings: readonly Having[]): Sql | undefined;
4725
4958
  compileLimitOffset(limit: number | undefined, offset: number | undefined): Sql | undefined;
@@ -4767,6 +5000,13 @@ type Where = {
4767
5000
  values: readonly [unknown, unknown];
4768
5001
  not: boolean;
4769
5002
  boolean: WhereBoolean;
5003
+ } | {
5004
+ type: 'like';
5005
+ column: ColumnRef;
5006
+ value: string;
5007
+ caseSensitive: boolean;
5008
+ not: boolean;
5009
+ boolean: WhereBoolean;
4770
5010
  } | {
4771
5011
  type: 'column';
4772
5012
  first: ColumnRef;
@@ -4809,6 +5049,8 @@ type SelectColumn = ColumnRef | {
4809
5049
  as: string;
4810
5050
  };
4811
5051
  type NestedCallback<Q> = (query: Q) => unknown;
5052
+ /** The value when()'s callback receives: the condition's type without its falsy members. */
5053
+ type Truthy<V> = Exclude<V, false | 0 | 0n | '' | null | undefined>;
4812
5054
  /** The key a selected column comes back under: 'users.name' → 'name', 'name as n' → 'n'. */
4813
5055
  declare function columnKey(column: string): string;
4814
5056
  /**
@@ -4859,6 +5101,16 @@ declare class Builder$1<T = Row$4> implements QueryBuilder$4<T> {
4859
5101
  whereBetween(column: ColumnRef, values: readonly [unknown, unknown]): this;
4860
5102
  orWhereBetween(column: ColumnRef, values: readonly [unknown, unknown]): this;
4861
5103
  whereNotBetween(column: ColumnRef, values: readonly [unknown, unknown]): this;
5104
+ /**
5105
+ * Laravel's whereLike(): the value is the pattern, `%` and `_` included (`whereLike('title', `%${term}%`)`).
5106
+ * Case-insensitive unless caseSensitive: ilike on Postgres, like on MySQL and SQLite (their like already ignores
5107
+ * case: MySQL through the column's collation, SQLite for ASCII letters). Case-sensitive is like on Postgres,
5108
+ * like binary on MySQL and glob on SQLite.
5109
+ */
5110
+ whereLike(column: ColumnRef, value: string, caseSensitive?: boolean, boolean?: WhereBoolean, not?: boolean): this;
5111
+ orWhereLike(column: ColumnRef, value: string, caseSensitive?: boolean): this;
5112
+ whereNotLike(column: ColumnRef, value: string, caseSensitive?: boolean, boolean?: WhereBoolean): this;
5113
+ orWhereNotLike(column: ColumnRef, value: string, caseSensitive?: boolean): this;
4862
5114
  /** Compares two columns: whereColumn('updated_at', '>', 'created_at'). */
4863
5115
  whereColumn(first: ColumnRef, operatorOrSecond: string, second?: ColumnRef, boolean?: WhereBoolean): this;
4864
5116
  orWhereColumn(first: ColumnRef, operatorOrSecond: string, second?: ColumnRef): this;
@@ -4893,8 +5145,20 @@ declare class Builder$1<T = Row$4> implements QueryBuilder$4<T> {
4893
5145
  forPage(page: number, perPage?: number): this;
4894
5146
  lockForUpdate(): this;
4895
5147
  sharedLock(): this;
4896
- /** Calls callback(this, value) when value is truthy (or the default callback otherwise). */
4897
- when<V>(value: V, callback: (query: this, value: V) => unknown, otherwise?: (query: this, value: V) => unknown): this;
5148
+ /**
5149
+ * Laravel's when(): callback(query, value) runs when the value is truthy, otherwise(query, value) when it is falsy.
5150
+ * A function value is called with the query first and its result is the value. Truthiness is JavaScript's, so `'0'`
5151
+ * and `[]` are truthy: a `?active=0` filter applies, where Laravel would skip it. Returns the query; what the
5152
+ * callbacks return is ignored.
5153
+ *
5154
+ * @example
5155
+ * Post.query().when(request.query('q'), (query, q) => query.whereLike('title', `%${q}%`))
5156
+ */
5157
+ when<V>(value: (query: this) => V, callback: (query: this, value: Truthy<V>) => unknown, otherwise?: (query: this, value: V) => unknown): this;
5158
+ when<V>(value: V, callback: (query: this, value: Truthy<V>) => unknown, otherwise?: (query: this, value: V) => unknown): this;
5159
+ /** Laravel's unless(): when() with the condition reversed. callback(query, value) runs when the value is falsy. */
5160
+ unless<V>(value: (query: this) => V, callback: (query: this, value: V) => unknown, otherwise?: (query: this, value: Truthy<V>) => unknown): this;
5161
+ unless<V>(value: V, callback: (query: this, value: V) => unknown, otherwise?: (query: this, value: Truthy<V>) => unknown): this;
4898
5162
  tap(callback: (query: this) => unknown): this;
4899
5163
  get(): Promise<Collection<T>>;
4900
5164
  /** The raw rows, without a Collection around them. */
@@ -5215,6 +5479,10 @@ declare class Builder<M extends Model = Model> extends Builder$1<M> {
5215
5479
  whereNull(columns: Column<M> | Expression | Array<Column<M> | Expression>): this;
5216
5480
  whereNotNull(columns: Column<M> | Expression | Array<Column<M> | Expression>): this;
5217
5481
  whereBetween(column: Column<M> | Expression, values: readonly [unknown, unknown]): this;
5482
+ whereLike(column: Column<M> | Expression, value: string, caseSensitive?: boolean, boolean?: WhereBoolean, not?: boolean): this;
5483
+ orWhereLike(column: Column<M> | Expression, value: string, caseSensitive?: boolean): this;
5484
+ whereNotLike(column: Column<M> | Expression, value: string, caseSensitive?: boolean, boolean?: WhereBoolean): this;
5485
+ orWhereNotLike(column: Column<M> | Expression, value: string, caseSensitive?: boolean): this;
5218
5486
  orderBy(column: Column<M> | Expression, direction?: Direction | Uppercase<Direction>): this;
5219
5487
  /** Newest first by the model's created_at column (or the given one). */
5220
5488
  latest(column?: Column<M> | Expression): this;
@@ -5358,6 +5626,15 @@ interface StateContext {
5358
5626
  }
5359
5627
  type State = Row$4 | ((attributes: Row$4, context: StateContext) => Row$4);
5360
5628
  type AnyFactory = Factory$b<any>;
5629
+ /**
5630
+ * A model's factory() typed as its own factory class (Laravel's `@use HasFactory<UserFactory>`): declare it in the
5631
+ * model, `declare static factory: HasFactory<UserFactory>` (with `import type`), and User.factory().unverified()
5632
+ * type-checks. The factory is still found at run time by name (database/factories/UserFactory.ts).
5633
+ */
5634
+ type HasFactory<F> = {
5635
+ (): F;
5636
+ (count: number, state?: State): F & Many;
5637
+ } & (typeof Model)['factory'];
5361
5638
  interface HasRelationship {
5362
5639
  factory: AnyFactory;
5363
5640
  relationship: string;
@@ -5791,12 +6068,21 @@ declare class Model implements ModelInstance$2 {
5791
6068
  /** A new query of this model, with its global scopes. */
5792
6069
  static query<C extends typeof Model>(this: C): ModelBuilder<C>;
5793
6070
  static where<C extends typeof Model>(this: C, ...args: WhereArgs<Instance<C>, ModelBuilder<C>>): ModelBuilder<C>;
6071
+ /** Post.when(request.query('q'), (query, q) => query.whereLike('title', `%${q}%`)): a new query, then when(). */
6072
+ static when<C extends typeof Model, V>(this: C, value: (query: ModelBuilder<C>) => V, callback: (query: ModelBuilder<C>, value: Truthy<V>) => unknown, otherwise?: (query: ModelBuilder<C>, value: V) => unknown): ModelBuilder<C>;
6073
+ static when<C extends typeof Model, V>(this: C, value: V, callback: (query: ModelBuilder<C>, value: Truthy<V>) => unknown, otherwise?: (query: ModelBuilder<C>, value: V) => unknown): ModelBuilder<C>;
6074
+ /** A new query, then unless(): the callback runs when the value is falsy. */
6075
+ static unless<C extends typeof Model, V>(this: C, value: (query: ModelBuilder<C>) => V, callback: (query: ModelBuilder<C>, value: V) => unknown, otherwise?: (query: ModelBuilder<C>, value: Truthy<V>) => unknown): ModelBuilder<C>;
6076
+ static unless<C extends typeof Model, V>(this: C, value: V, callback: (query: ModelBuilder<C>, value: V) => unknown, otherwise?: (query: ModelBuilder<C>, value: Truthy<V>) => unknown): ModelBuilder<C>;
5794
6077
  static whereKey<C extends typeof Model>(this: C, id: unknown): ModelBuilder<C>;
5795
6078
  static whereIn<C extends typeof Model>(this: C, column: Column<Instance<C>> | Expression, values: readonly unknown[]): ModelBuilder<C>;
5796
6079
  static whereNotIn<C extends typeof Model>(this: C, column: Column<Instance<C>> | Expression, values: readonly unknown[]): ModelBuilder<C>;
5797
6080
  static whereNull<C extends typeof Model>(this: C, column: Column<Instance<C>> | Expression): ModelBuilder<C>;
5798
6081
  static whereNotNull<C extends typeof Model>(this: C, column: Column<Instance<C>> | Expression): ModelBuilder<C>;
5799
6082
  static whereBetween<C extends typeof Model>(this: C, column: Column<Instance<C>> | Expression, values: readonly [unknown, unknown]): ModelBuilder<C>;
6083
+ /** Post.whereLike('title', `%${term}%`): case-insensitive unless caseSensitive (see the query builder's whereLike()). */
6084
+ static whereLike<C extends typeof Model>(this: C, column: Column<Instance<C>> | Expression, value: string, caseSensitive?: boolean): ModelBuilder<C>;
6085
+ static whereNotLike<C extends typeof Model>(this: C, column: Column<Instance<C>> | Expression, value: string, caseSensitive?: boolean): ModelBuilder<C>;
5800
6086
  static whereColumn<C extends typeof Model>(this: C, first: Column<Instance<C>>, operatorOrSecond: string, second?: Column<Instance<C>>): ModelBuilder<C>;
5801
6087
  static whereRaw<C extends typeof Model>(this: C, sql: string, bindings?: readonly unknown[]): ModelBuilder<C>;
5802
6088
  static select<C extends typeof Model>(this: C, ...columns: Array<Column<Instance<C>> | Expression>): ModelBuilder<C>;
@@ -6109,6 +6395,82 @@ declare class Pivot extends Model {
6109
6395
  timestamps: boolean;
6110
6396
  }
6111
6397
 
6398
+ /**
6399
+ * Laravel's DatabaseNotification: one row of the `notifications` table, which the database channel writes. A UUID
6400
+ * string key, `data` as an array cast and `read_at` as a datetime. `user.notifications()` returns these, newest first.
6401
+ */
6402
+ declare class DatabaseNotification extends Model implements DatabaseNotification$1 {
6403
+ protected table: string | undefined;
6404
+ protected keyType: 'int' | 'string';
6405
+ incrementing: boolean;
6406
+ protected guarded: string[];
6407
+ protected casts: Readonly<Record<string, CastDefinition>>;
6408
+ $attributes?: {
6409
+ id: string;
6410
+ type: string;
6411
+ notifiable_type: string;
6412
+ notifiable_id: number | string;
6413
+ data: Record<string, unknown>;
6414
+ read_at: Date | null;
6415
+ created_at: Date | null;
6416
+ updated_at: Date | null;
6417
+ };
6418
+ readonly id: string;
6419
+ readonly type: string;
6420
+ readonly notifiable_type: string;
6421
+ readonly notifiable_id: number | string;
6422
+ readonly data: Record<string, unknown>;
6423
+ read_at: Date | null;
6424
+ readonly created_at: Date | null;
6425
+ readonly updated_at: Date | null;
6426
+ /** The model the notification was sent to. */
6427
+ notifiable<R extends Model = Model>(): MorphTo<R, this>;
6428
+ /** Sets read_at to now and saves, unless it is already read. */
6429
+ markAsRead(): Promise<void>;
6430
+ /** Clears read_at and saves, unless it is already unread. */
6431
+ markAsUnread(): Promise<void>;
6432
+ read(): boolean;
6433
+ unread(): boolean;
6434
+ /** `query.read()`: only read notifications. */
6435
+ static scopeRead(query: Builder<DatabaseNotification>): Builder<DatabaseNotification>;
6436
+ /** `query.unread()`: only unread notifications. */
6437
+ static scopeUnread(query: Builder<DatabaseNotification>): Builder<DatabaseNotification>;
6438
+ }
6439
+ /** Laravel's DatabaseNotificationCollection: what `await user.notifications().get()` returns. */
6440
+ declare class DatabaseNotificationCollection extends Collection<DatabaseNotification> {
6441
+ /** Marks every notification as read (one save each, as in Laravel). */
6442
+ markAsRead(): Promise<void>;
6443
+ /** Marks every notification as unread. */
6444
+ markAsUnread(): Promise<void>;
6445
+ }
6446
+ /**
6447
+ * The relation `notifications()`, `readNotifications()` and `unreadNotifications()` return: a morphMany over
6448
+ * DatabaseNotification whose results (get(), the loaded relation, eager loads) are DatabaseNotificationCollections.
6449
+ * Every builder method works on it: paginate(), count(), update({ read_at }), where(), …
6450
+ */
6451
+ declare class DatabaseNotificationsRelation<P extends Model = Model> extends MorphMany<DatabaseNotification, P> {
6452
+ get(): Promise<DatabaseNotificationCollection>;
6453
+ getResults(): Promise<DatabaseNotificationCollection>;
6454
+ initRelation(models: P[], relation: string): P[];
6455
+ match(models: P[], results: DatabaseNotification[], relation: string): P[];
6456
+ }
6457
+
6458
+ type ModelConstructor = new (...args: any[]) => Model;
6459
+ /** What HasDatabaseNotifications adds to a model. */
6460
+ interface HasDatabaseNotificationsModel extends Model {
6461
+ /** The model's notifications, newest first: morphMany(DatabaseNotification, 'notifiable').latest(). */
6462
+ notifications(): DatabaseNotificationsRelation<this>;
6463
+ /** The read ones (read_at set). */
6464
+ readNotifications(): DatabaseNotificationsRelation<this>;
6465
+ /** The unread ones (read_at null). */
6466
+ unreadNotifications(): DatabaseNotificationsRelation<this>;
6467
+ }
6468
+ /**
6469
+ * Laravel's HasDatabaseNotifications: the notifications the database channel stored for this model, as queries.
6470
+ * `class User extends HasDatabaseNotifications(Model) {}`; apps get it through `Notifiable`.
6471
+ */
6472
+ declare function HasDatabaseNotifications<TBase extends ModelConstructor>(Base: TBase): TBase & (new (...args: any[]) => HasDatabaseNotificationsModel);
6473
+
6112
6474
  /**
6113
6475
  * The morph map: the value stored in `*_type` columns for each model class (Laravel's Relation::morphMap()).
6114
6476
  * Without an entry the class name is stored ('Post'). Returns the current map.
@@ -6426,7 +6788,11 @@ declare class RouteModelResolverImpl implements RouteModelResolver {
6426
6788
 
6427
6789
  /** Laravel 11's config/database.php defaults (the app's config/database.ts wins, key by key). */
6428
6790
  declare function databaseConfigDefaults(app: Pick<Application$4, 'databasePath'>): DatabaseConfig & Record<string, unknown>;
6429
- /** Points the paginators at the current request: ?page=, ?cursor=, the URL and the query string (Laravel's resolvers). */
6791
+ /**
6792
+ * Points the paginators at the current request: ?page=, ?cursor=, the URL and the query string (Laravel's resolvers).
6793
+ * A bound PaginationState is asked first for the page and the path (Livewire's WithPagination replaces Laravel's
6794
+ * resolvers the same way); what it leaves undefined comes from the request.
6795
+ */
6430
6796
  declare function usePaginationResolvers(): void;
6431
6797
  /**
6432
6798
  * Binds the database layer: the DatabaseManager (a root singleton owning the pools) behind the DB facade, the
@@ -6514,6 +6880,16 @@ declare class ValidationErrorImpl extends Error implements ValidationError {
6514
6880
  readonly name = "ValidationError";
6515
6881
  constructor(errors: Record<string, string[]>, errorBag?: string, redirectTo?: string | undefined);
6516
6882
  }
6883
+ /**
6884
+ * Laravel's ValidationException, for failing a request by hand:
6885
+ * `throw ValidationException.withMessages({ email: __('auth.failed') })`. Rendered like any validation error: 422 JSON,
6886
+ * or a redirect back with the errors.
6887
+ */
6888
+ declare class ValidationException extends ValidationErrorImpl {
6889
+ /** Messages per field, each a string or a list. */
6890
+ static withMessages(messages: Record<string, string | readonly string[]>): ValidationException;
6891
+ constructor(errors: Record<string, string[]>, errorBag?: string, redirectTo?: string);
6892
+ }
6517
6893
  declare class AuthorizationErrorImpl extends Error implements OrielError$c {
6518
6894
  readonly kind: "Authorization";
6519
6895
  readonly status = 403;
@@ -6592,6 +6968,8 @@ interface BuiltinRule {
6592
6968
  replacements?(ctx: RuleContext): Record<string, string>;
6593
6969
  /** Used when messageKey() isn't in DEFAULT_MESSAGES (e.g. an extend()ed rule with a custom message). */
6594
6970
  defaultMessage?: string;
6971
+ /** An extend()ed rule's own message: it wins over the default lines, as Laravel's fallback messages do. */
6972
+ message?: string;
6595
6973
  /** Runs even when the value is missing, blank, or null under nullable (the required* family, and accepted); a failure stops the field. */
6596
6974
  implicit?: boolean;
6597
6975
  }
@@ -6626,6 +7004,36 @@ declare function expandWildcardKeys(pattern: string, data: Record<string, unknow
6626
7004
  /** Every built-in rule, merged. Later tasks (database rules) add their own spread here. */
6627
7005
  declare const builtinRules: Record<string, BuiltinRule>;
6628
7006
 
7007
+ /**
7008
+ * Laravel's Illuminate\Validation\Rules\Password: a string of at least `min` characters (8 by default), plus the
7009
+ * checks you add: letters(), mixedCase(), numbers(), symbols(), max(). Every failing check adds its own message.
7010
+ * Rule.password() returns the application default (PasswordRule.defaults()). (Laravel's uncompromised() is not
7011
+ * ported: it calls an outside service.)
7012
+ */
7013
+ declare class PasswordRule implements ValidationRule$4 {
7014
+ #private;
7015
+ constructor(min?: number);
7016
+ /** A password rule of at least `size` characters: PasswordRule.min(12).mixedCase(). */
7017
+ static min(size: number): PasswordRule;
7018
+ /**
7019
+ * With an argument, sets the default (Laravel's Password::defaults(fn () => ...), in a provider's boot());
7020
+ * `null` resets it. Without one, returns a copy of the default: PasswordRule.min(8) unless set.
7021
+ */
7022
+ static defaults(): PasswordRule;
7023
+ static defaults(rule: PasswordRule | (() => PasswordRule) | null): void;
7024
+ min(size: number): this;
7025
+ max(size: number): this;
7026
+ /** At least one letter. */
7027
+ letters(): this;
7028
+ /** At least one uppercase and one lowercase letter. */
7029
+ mixedCase(): this;
7030
+ /** At least one number. */
7031
+ numbers(): this;
7032
+ /** At least one symbol (punctuation, a symbol or a space). */
7033
+ symbols(): this;
7034
+ validate(attribute: string, value: unknown, fail: (message: string) => void): void;
7035
+ }
7036
+
6629
7037
  /**
6630
7038
  * Base for the fluent builders. Each one reports under a built-in rule name (`in`, `unique`, `exists`), so when it
6631
7039
  * runs inside a Validator its failure goes through exactly the same lookup as the string rule: custom messages
@@ -6672,6 +7080,8 @@ declare const Rule: {
6672
7080
  in: (values: readonly unknown[]) => InRule;
6673
7081
  unique: (table: string, column?: string) => UniqueRule;
6674
7082
  exists: (table: string, column?: string) => ExistsRule;
7083
+ /** Laravel's Password::defaults(): the application's password rule (at least 8 characters unless PasswordRule.defaults() changed it). */
7084
+ password: () => PasswordRule;
6675
7085
  };
6676
7086
 
6677
7087
  /** See Task 9's writeup in the plan for exactly what this does and doesn't infer. */
@@ -7167,6 +7577,8 @@ interface HttpRequest$3 {
7167
7577
  header(name: string, defaultValue: string): string;
7168
7578
  bearerToken(): string | undefined;
7169
7579
  ip(): string | undefined;
7580
+ /** The raw body as text (Laravel's getContent()); '' when there is none. */
7581
+ content(): string;
7170
7582
  expectsJson(): boolean;
7171
7583
  ajax(): boolean;
7172
7584
  query<T = unknown>(key?: string, defaultValue?: T): T;
@@ -7370,16 +7782,6 @@ interface Container$9 {
7370
7782
  }
7371
7783
  declare const Container$9: Token$9<Container$9>;
7372
7784
 
7373
- interface Arrayable$3<T = unknown> {
7374
- toArray(): T;
7375
- }
7376
- /** The minimal collection surface contracts rely on (implemented by @orieljs/collections). */
7377
- interface Enumerable$3<T> extends Iterable<T>, Arrayable$3<unknown[]> {
7378
- all(): T[];
7379
- count(): number;
7380
- isEmpty(): boolean;
7381
- }
7382
-
7383
7785
  /** The session of the current request (scoped). Loaded and saved by the StartSession middleware. */
7384
7786
  interface Session$2 {
7385
7787
  getId(): string;
@@ -7458,6 +7860,8 @@ interface HttpRequest$2 {
7458
7860
  header(name: string, defaultValue: string): string;
7459
7861
  bearerToken(): string | undefined;
7460
7862
  ip(): string | undefined;
7863
+ /** The raw body as text (Laravel's getContent()); '' when there is none. */
7864
+ content(): string;
7461
7865
  expectsJson(): boolean;
7462
7866
  ajax(): boolean;
7463
7867
  query<T = unknown>(key?: string, defaultValue?: T): T;
@@ -7490,6 +7894,16 @@ interface Middleware$2 {
7490
7894
  terminate?(request: HttpRequest$2, response: Response): Promise<void>;
7491
7895
  }
7492
7896
 
7897
+ interface Arrayable$3<T = unknown> {
7898
+ toArray(): T;
7899
+ }
7900
+ /** The minimal collection surface contracts rely on (implemented by @orieljs/collections). */
7901
+ interface Enumerable$3<T> extends Iterable<T>, Arrayable$3<unknown[]> {
7902
+ all(): T[];
7903
+ count(): number;
7904
+ isEmpty(): boolean;
7905
+ }
7906
+
7493
7907
  interface Cookie {
7494
7908
  name: string;
7495
7909
  value: string;
@@ -7914,27 +8328,6 @@ interface Container$8 {
7914
8328
  }
7915
8329
  declare const Container$8: Token$8<Container$8>;
7916
8330
 
7917
- interface ConfigRepository {
7918
- has(key: string): boolean;
7919
- /** Dot notation: get('database.connections.sqlite.database'). */
7920
- get<T = unknown>(key: string, defaultValue?: T): T;
7921
- set(key: string, value: unknown): void;
7922
- set(values: Record<string, unknown>): void;
7923
- push(key: string, value: unknown): void;
7924
- all(): Record<string, unknown>;
7925
- }
7926
- declare const ConfigRepository: Token$j<ConfigRepository>;
7927
-
7928
- interface Arrayable$2<T = unknown> {
7929
- toArray(): T;
7930
- }
7931
- /** The minimal collection surface contracts rely on (implemented by @orieljs/collections). */
7932
- interface Enumerable$2<T> extends Iterable<T>, Arrayable$2<unknown[]> {
7933
- all(): T[];
7934
- count(): number;
7935
- isEmpty(): boolean;
7936
- }
7937
-
7938
8331
  /** The session of the current request (scoped). Loaded and saved by the StartSession middleware. */
7939
8332
  interface Session$1 {
7940
8333
  getId(): string;
@@ -7997,6 +8390,8 @@ interface HttpRequest$1 {
7997
8390
  header(name: string, defaultValue: string): string;
7998
8391
  bearerToken(): string | undefined;
7999
8392
  ip(): string | undefined;
8393
+ /** The raw body as text (Laravel's getContent()); '' when there is none. */
8394
+ content(): string;
8000
8395
  expectsJson(): boolean;
8001
8396
  ajax(): boolean;
8002
8397
  query<T = unknown>(key?: string, defaultValue?: T): T;
@@ -8029,6 +8424,27 @@ interface Middleware$1 {
8029
8424
  terminate?(request: HttpRequest$1, response: Response): Promise<void>;
8030
8425
  }
8031
8426
 
8427
+ interface ConfigRepository {
8428
+ has(key: string): boolean;
8429
+ /** Dot notation: get('database.connections.sqlite.database'). */
8430
+ get<T = unknown>(key: string, defaultValue?: T): T;
8431
+ set(key: string, value: unknown): void;
8432
+ set(values: Record<string, unknown>): void;
8433
+ push(key: string, value: unknown): void;
8434
+ all(): Record<string, unknown>;
8435
+ }
8436
+ declare const ConfigRepository: Token$j<ConfigRepository>;
8437
+
8438
+ interface Arrayable$2<T = unknown> {
8439
+ toArray(): T;
8440
+ }
8441
+ /** The minimal collection surface contracts rely on (implemented by @orieljs/collections). */
8442
+ interface Enumerable$2<T> extends Iterable<T>, Arrayable$2<unknown[]> {
8443
+ all(): T[];
8444
+ count(): number;
8445
+ isEmpty(): boolean;
8446
+ }
8447
+
8032
8448
  interface Hasher {
8033
8449
  make(value: string): Promise<string>;
8034
8450
  check(value: string, hashed: string): Promise<boolean>;
@@ -8120,6 +8536,8 @@ interface ModelInstance$1 {
8120
8536
  getTable(): string;
8121
8537
  getRouteKey(): unknown;
8122
8538
  getRouteKeyName(): string;
8539
+ /** The value stored in a polymorphic `*_type` column for this model: its morph map alias, else its class name. */
8540
+ getMorphClass(): string;
8123
8541
  getAttribute<T = unknown>(key: string): T;
8124
8542
  setAttribute(key: string, value: unknown): this;
8125
8543
  fill(attributes: Row$2): this;
@@ -8201,18 +8619,18 @@ interface MustVerifyEmail {
8201
8619
  getEmailForVerification(): string;
8202
8620
  }
8203
8621
 
8204
- interface Notifiable {
8622
+ interface Notifiable$1 {
8205
8623
  /** e.g. 'mail' → email address, 'database' → the model itself. */
8206
8624
  routeNotificationFor(channel: string, notification: Notification): unknown;
8207
8625
  }
8208
8626
  interface Notification {
8209
8627
  /** Optional id; set by the dispatcher when missing. */
8210
8628
  id?: string;
8211
- via(notifiable: Notifiable): string[];
8629
+ via(notifiable: Notifiable$1): string[];
8212
8630
  /** Returns a Mailable (Contracts/Mail) or the Notifications MailMessage builder. */
8213
- toMail?(notifiable: Notifiable): unknown;
8214
- toDatabase?(notifiable: Notifiable): Record<string, unknown>;
8215
- toArray?(notifiable: Notifiable): Record<string, unknown>;
8631
+ toMail?(notifiable: Notifiable$1): unknown;
8632
+ toDatabase?(notifiable: Notifiable$1): Record<string, unknown>;
8633
+ toArray?(notifiable: Notifiable$1): Record<string, unknown>;
8216
8634
  }
8217
8635
 
8218
8636
  declare abstract class ServiceProvider$b implements ServiceProvider$u {
@@ -8287,6 +8705,21 @@ declare class PasswordReset {
8287
8705
  readonly user: Authenticatable;
8288
8706
  constructor(user: Authenticatable);
8289
8707
  }
8708
+ /** Fired by the registration action after a user signs up; the default listener sends the verification mail. */
8709
+ declare class Registered {
8710
+ readonly user: Authenticatable;
8711
+ constructor(user: Authenticatable);
8712
+ }
8713
+ /** Fired when a user verifies their email address. */
8714
+ declare class Verified {
8715
+ readonly user: Authenticatable & MustVerifyEmail;
8716
+ constructor(user: Authenticatable & MustVerifyEmail);
8717
+ }
8718
+ /** Fired when a login is refused for too many attempts (the starter kits' LoginRequest). */
8719
+ declare class Lockout {
8720
+ readonly request: HttpRequest$1;
8721
+ constructor(request: HttpRequest$1);
8722
+ }
8290
8723
 
8291
8724
  /** What the default toMail() returns: Laravel's reset mail, as plain data (see the plan's notes). */
8292
8725
  interface ResetPasswordMail {
@@ -8313,6 +8746,54 @@ declare class ResetPassword implements Notification {
8313
8746
  resetUrl(notifiable: CanResetPassword): string;
8314
8747
  }
8315
8748
 
8749
+ /** What the default toMail() returns: Laravel's verification mail, as plain data (the mail channel renders it). */
8750
+ interface VerifyEmailMail {
8751
+ subject: string;
8752
+ lines: string[];
8753
+ actionText: string;
8754
+ actionUrl: string;
8755
+ outroLines: string[];
8756
+ }
8757
+ /** The user the notification is for (AuthenticatableModel provides this). */
8758
+ type VerifiableUser = MustVerifyEmail & {
8759
+ getKey?(): unknown;
8760
+ getAuthIdentifier?(): unknown;
8761
+ };
8762
+ /**
8763
+ * Laravel's VerifyEmail notification: a link to the `verification.verify` route signed for
8764
+ * config('auth.verification.expire', 60) minutes, with the user's key as {id} and the sha1 of their email as {hash}.
8765
+ */
8766
+ declare class VerifyEmail implements Notification {
8767
+ /** Build the verification URL yourself (e.g. for a SPA front end). */
8768
+ static createUrlUsing(callback: ((notifiable: VerifiableUser) => string) | undefined): void;
8769
+ /** Build the mail yourself (e.g. a MailMessage from the Notifications component). */
8770
+ static toMailUsing(callback: ((notifiable: VerifiableUser, url: string) => unknown) | undefined): void;
8771
+ via(): string[];
8772
+ toMail(notifiable: object): unknown;
8773
+ verificationUrl(notifiable: VerifiableUser): string;
8774
+ }
8775
+
8776
+ /**
8777
+ * Laravel's SendEmailVerificationNotification, listening for Registered (AuthServiceProvider registers it): a new
8778
+ * user who must verify their email, and hasn't, gets the VerifyEmail mail.
8779
+ */
8780
+ declare class SendEmailVerificationNotification {
8781
+ handle(event: Registered): Promise<void>;
8782
+ }
8783
+
8784
+ /**
8785
+ * Laravel's EmailVerificationRequest, for the verification link's route (`auth` and `signed` middleware): the
8786
+ * signed-in user's key must equal the {id} parameter and the sha1 of their email the {hash} parameter, else 403.
8787
+ * `await EmailVerificationRequest.validate()` in the action, like a FormRequest.
8788
+ */
8789
+ declare class EmailVerificationRequest {
8790
+ static validate(): Promise<Record<string, never>>;
8791
+ authorize(): boolean;
8792
+ rules(): Record<string, never>;
8793
+ /** Marks the signed-in user's email as verified and fires Verified, unless it already was. */
8794
+ fulfill(): Promise<void>;
8795
+ }
8796
+
8316
8797
  /** The part of a model (Contracts/Database ModelInstance) the mixin needs. */
8317
8798
  interface AuthModelBase {
8318
8799
  getKey(): unknown;
@@ -8322,7 +8803,7 @@ interface AuthModelBase {
8322
8803
  save(): Promise<boolean>;
8323
8804
  }
8324
8805
  type AuthModelConstructor = new (...args: any[]) => AuthModelBase;
8325
- /** Configure how the email verification notification is sent (signed URLs are not in v1's UrlGenerator). */
8806
+ /** Send the email verification yourself instead of the VerifyEmail notification (undefined restores the default). */
8326
8807
  declare function sendEmailVerificationUsing(callback: ((user: MustVerifyEmail) => Promise<void>) | undefined): void;
8327
8808
  /** Sends a notification through user.notify() (the Notifications mixin), else the NotificationDispatcher token. */
8328
8809
  declare function sendNotification(user: unknown, notification: Notification): Promise<void>;
@@ -8345,6 +8826,7 @@ declare function AuthenticatableModel<TBase extends AuthModelConstructor>(Base:
8345
8826
  hasVerifiedEmail(): boolean;
8346
8827
  markEmailAsVerified(): Promise<boolean>;
8347
8828
  getEmailForVerification(): string;
8829
+ /** Sends the VerifyEmail notification (a signed link), or what sendEmailVerificationUsing() configured. */
8348
8830
  sendEmailVerificationNotification(): Promise<void>;
8349
8831
  getKey(): unknown;
8350
8832
  getKeyName(): string;
@@ -8630,6 +9112,42 @@ declare class AccessGate implements Gate$1 {
8630
9112
  getPolicyFor(target: unknown): PolicyClass | undefined;
8631
9113
  }
8632
9114
 
9115
+ type AuthorizableConstructor = new (...args: any[]) => Authenticatable;
9116
+ /**
9117
+ * Laravel's Authorizable trait: `user.can('update', post)` asks the Gate about this user (Gate.forUser), whoever is
9118
+ * signed in. `class User extends Authorizable(AuthenticatableModel(Model)) {}`.
9119
+ */
9120
+ declare function Authorizable<TBase extends AuthorizableConstructor>(Base: TBase): {
9121
+ new (...args: any[]): {
9122
+ /** Whether the user has the ability (every one, for a list); the arguments go to the policy or ability callback. */
9123
+ can(abilities: string | readonly string[], ...args: unknown[]): Promise<boolean>;
9124
+ /** Whether the user has any of the abilities. */
9125
+ canAny(abilities: string | readonly string[], ...args: unknown[]): Promise<boolean>;
9126
+ /** Whether the user lacks the ability (any one, for a list). */
9127
+ cant(abilities: string | readonly string[], ...args: unknown[]): Promise<boolean>;
9128
+ /** The same as cant(). */
9129
+ cannot(abilities: string | readonly string[], ...args: unknown[]): Promise<boolean>;
9130
+ getAuthIdentifierName(): string;
9131
+ getAuthIdentifier(): unknown;
9132
+ getAuthPassword(): string;
9133
+ getRememberToken(): string | undefined;
9134
+ setRememberToken(value: string): void;
9135
+ getRememberTokenName(): string;
9136
+ };
9137
+ } & TBase;
9138
+
9139
+ /**
9140
+ * The framework's base controller, with Laravel's AuthorizesRequests: `await this.authorize('update', post)` throws an
9141
+ * AuthorizationError (403, or the status the policy chose) unless the signed-in user may. The app's
9142
+ * `app/Http/Controllers/Controller.ts` extends it.
9143
+ */
9144
+ declare abstract class Controller {
9145
+ /** Authorizes the ability for the signed-in user (the Gate's authorize()). */
9146
+ protected authorize(ability: string, ...args: unknown[]): Promise<void>;
9147
+ /** Authorizes the ability for the given user (Gate.forUser(user).authorize()). */
9148
+ protected authorizeForUser(user: Authenticatable | undefined, ability: string, ...args: unknown[]): Promise<void>;
9149
+ }
9150
+
8633
9151
  /**
8634
9152
  * Laravel's Authorize middleware (`can:update,post`). Each extra parameter is a quoted literal ('"draft"'), else the
8635
9153
  * route parameter of that name (the bound model), else the name itself (a model name such as `Post`, which selects
@@ -9056,6 +9574,11 @@ interface OrielError$6 extends Error {
9056
9574
 
9057
9575
  /** Options a job class may declare as public fields. Their presence (or implementing ShouldQueue) makes things queueable. */
9058
9576
  interface ShouldQueue$3 {
9577
+ /**
9578
+ * Marks the class as queued at run time: `implements ShouldQueue` leaves no trace once compiled, so the interface
9579
+ * asks for `readonly shouldQueue = true`. Jobs, listeners, mailables and notifications carrying it are queued.
9580
+ */
9581
+ readonly shouldQueue: true;
9059
9582
  connection?: string;
9060
9583
  queue?: string;
9061
9584
  /** Seconds. */
@@ -9234,15 +9757,15 @@ declare class Dispatcher$1 implements EventDispatcher {
9234
9757
  declare const QUEUE_OPTION_KEYS: readonly ["connection", "queue", "delay", "tries", "backoff", "timeout"];
9235
9758
  type QueueOptionKey = (typeof QUEUE_OPTION_KEYS)[number];
9236
9759
  /**
9237
- * Whether a listener opts into queueing. `implements ShouldQueue` leaves no runtime trace, so this is structural,
9238
- * like the Queue/Bus protocol's own `isQueueable(job)`: the marker, or an option, or a `uniqueId`/`retryUntil`
9239
- * method. Unlike a job (already an instance by the time Bus sees it), a listener is a *class* registered with
9240
- * `listen()`, so Events must build it first — `this.container.make(cls)` is cheap and side-effect-free for listener
9241
- * classes, which have DI-only constructors — and then applies the protocol rule to that instance: the marker
9242
- * (readable off the instance through the prototype chain), an **instance** option field with a defined value, or an
9243
- * instance `uniqueId`/`retryUntil` method — the same fields Mail's and Notifications' `isQueueableMailable`/
9244
- * equivalent read. A **static** field or method on the class counts too, as an extra on top of the protocol rule
9245
- * (not instead of it), so an existing `static queue = '...'` listener still works.
9760
+ * Whether a listener opts into queueing, like the Queue/Bus protocol's own `isQueueable(job)`: ShouldQueue's
9761
+ * `shouldQueue: true`, the SHOULD_QUEUE symbol, an option, or a `uniqueId`/`retryUntil` method. Unlike a job (already
9762
+ * an instance by the time Bus sees it), a listener is a *class* registered with `listen()`, so Events must build it
9763
+ * first — `this.container.make(cls)` is cheap and side-effect-free for listener classes, which have DI-only
9764
+ * constructors — and then applies the protocol rule to that instance: the marker (readable off the instance through
9765
+ * the prototype chain), an **instance** option field with a defined value, or an instance `uniqueId`/`retryUntil`
9766
+ * method — the same fields Mail's and Notifications' `isQueueableMailable`/equivalent read. A **static** field or
9767
+ * method on the class (`shouldQueue`, an option, `uniqueId`/`retryUntil`) counts too, as an extra on top of the
9768
+ * protocol rule (not instead of it), so an existing `static queue = '...'` listener still works.
9246
9769
  */
9247
9770
  declare function isQueueableListener(cls: Class$6<unknown>, instance: object): boolean;
9248
9771
  /**
@@ -9405,6 +9928,18 @@ interface CacheManager$2 extends CacheRepository$1 {
9405
9928
  extend(driver: string, factory: (config: Record<string, unknown>) => CacheRepository$1): void;
9406
9929
  }
9407
9930
  declare const CacheManager$2: Token$j<CacheManager$2>;
9931
+ /** Laravel's RateLimiter: hits per key, kept in the default cache store. */
9932
+ interface RateLimiter$1 {
9933
+ tooManyAttempts(key: string, maxAttempts: number): Promise<boolean>;
9934
+ /** Adds a hit; the window starts at the first hit and lasts `decaySeconds` (default 60). Returns the hit count. */
9935
+ hit(key: string, decaySeconds?: number): Promise<number>;
9936
+ attempts(key: string): Promise<number>;
9937
+ remaining(key: string, maxAttempts: number): Promise<number>;
9938
+ /** Seconds until the key's window resets. */
9939
+ availableIn(key: string): Promise<number>;
9940
+ clear(key: string): Promise<void>;
9941
+ }
9942
+ declare const RateLimiter$1: Token$j<RateLimiter$1>;
9408
9943
 
9409
9944
  declare abstract class ServiceProvider$8 implements ServiceProvider$u {
9410
9945
  protected readonly app: Application$c;
@@ -9771,7 +10306,28 @@ declare class CacheManager$1 implements CacheManager$2 {
9771
10306
  tags(names: string | string[]): CacheRepository$1;
9772
10307
  }
9773
10308
 
10309
+ /**
10310
+ * Laravel's Illuminate\Cache\RateLimiter over a cache store: `<key>` holds the hit count and `<key>:timer` the unix
10311
+ * time the window ends, both expiring with the window. The store is resolved on every call, so a store swapped in
10312
+ * a test (or config changed at run time) is the one used.
10313
+ */
10314
+ declare class CacheRateLimiter implements RateLimiter$1 {
10315
+ #private;
10316
+ private readonly store;
10317
+ constructor(store: () => CacheRepository$1);
10318
+ tooManyAttempts(key: string, maxAttempts: number): Promise<boolean>;
10319
+ hit(key: string, decaySeconds?: number): Promise<number>;
10320
+ attempts(key: string): Promise<number>;
10321
+ remaining(key: string, maxAttempts: number): Promise<number>;
10322
+ availableIn(key: string): Promise<number>;
10323
+ clear(key: string): Promise<void>;
10324
+ /** Laravel's cleanRateLimiterKey(): accented letters become their plain letter ('zoë' and 'zoe' share a key). */
10325
+ protected cleanKey(key: string): string;
10326
+ }
10327
+
9774
10328
  declare const Cache: Facade<CacheManager$2, object>;
10329
+ /** The RateLimiter facade: RateLimiter.tooManyAttempts(key, 5), RateLimiter.hit(key), RateLimiter.clear(key). */
10330
+ declare const RateLimiter: Facade<RateLimiter$1, object>;
9775
10331
  declare function cache(): CacheManager$2;
9776
10332
  declare function cache(key: string): Promise<unknown>;
9777
10333
  declare function cache(values: Record<string, unknown>, ttlSeconds?: number): Promise<boolean>;
@@ -9815,6 +10371,16 @@ interface Container$4 {
9815
10371
  run<R>(fn: () => R): R;
9816
10372
  }
9817
10373
  declare const Container$4: Token$4<Container$4>;
10374
+ interface UploadedFile$1 {
10375
+ readonly clientName: string;
10376
+ readonly mimeType: string;
10377
+ readonly size: number;
10378
+ extension(): string;
10379
+ arrayBuffer(): Promise<ArrayBuffer>;
10380
+ /** Stores on a Filesystem disk. Returns the stored path. */
10381
+ store(directory: string, disk?: string): Promise<string>;
10382
+ storeAs(directory: string, name: string, disk?: string): Promise<string>;
10383
+ }
9818
10384
 
9819
10385
  interface ServiceProvider$7 {
9820
10386
  /** Bind things into the container. Synchronous. Don't resolve other services here. */
@@ -9856,16 +10422,6 @@ interface Application$2 extends Container$4 {
9856
10422
  terminate(): Promise<void>;
9857
10423
  }
9858
10424
  declare const Application$2: Token$j<Application$2>;
9859
- interface UploadedFile$1 {
9860
- readonly clientName: string;
9861
- readonly mimeType: string;
9862
- readonly size: number;
9863
- extension(): string;
9864
- arrayBuffer(): Promise<ArrayBuffer>;
9865
- /** Stores on a Filesystem disk. Returns the stored path. */
9866
- store(directory: string, disk?: string): Promise<string>;
9867
- storeAs(directory: string, name: string, disk?: string): Promise<string>;
9868
- }
9869
10425
 
9870
10426
  type ErrorKind$4 = 'Http' | 'Server' | 'ModelNotFound' | 'Validation' | 'Authentication' | 'Authorization' | 'TokenMismatch' | 'BindingResolution' | 'CircularDependency' | 'ContainerNotAvailable';
9871
10427
  /** Every error thrown by the framework implements this. The exception handler switches on `kind`. */
@@ -10123,9 +10679,17 @@ declare class S3Filesystem implements Filesystem {
10123
10679
  get(path: string): Promise<string>;
10124
10680
  getBytes(path: string): Promise<Uint8Array>;
10125
10681
  readStream(path: string): Promise<ReadableStream<Uint8Array>>;
10682
+ /** Sends the type of the path when the options name none (Laravel's S3 adapter detects one too). */
10126
10683
  put(path: string, contents: string | Uint8Array | ReadableStream<Uint8Array>, options?: PutOptions): Promise<boolean>;
10127
10684
  putFile(directory: string, file: UploadedFile$1, options?: PutOptions): Promise<string>;
10685
+ /**
10686
+ * Sends the upload's own type: its extension(), which follows what a request upload's bytes show (the client's claim
10687
+ * counts only where extension() keeps it). Never the MIME type the client sent as such, nor the name it is stored
10688
+ * under (an app may name it after the client's file name): S3, or a CDN in front of it, serves the object with this
10689
+ * type. An upload of no known type is sent with none (served as binary).
10690
+ */
10128
10691
  putFileAs(directory: string, file: UploadedFile$1, name: string, options?: PutOptions): Promise<string>;
10692
+ private putObject;
10129
10693
  delete(paths: string | string[]): Promise<boolean>;
10130
10694
  copy(from: string, to: string): Promise<boolean>;
10131
10695
  move(from: string, to: string): Promise<boolean>;
@@ -10322,6 +10886,8 @@ interface ModelInstance {
10322
10886
  getTable(): string;
10323
10887
  getRouteKey(): unknown;
10324
10888
  getRouteKeyName(): string;
10889
+ /** The value stored in a polymorphic `*_type` column for this model: its morph map alias, else its class name. */
10890
+ getMorphClass(): string;
10325
10891
  getAttribute<T = unknown>(key: string): T;
10326
10892
  setAttribute(key: string, value: unknown): this;
10327
10893
  fill(attributes: Row): this;
@@ -10334,6 +10900,11 @@ interface ModelInstance {
10334
10900
 
10335
10901
  /** Options a job class may declare as public fields. Their presence (or implementing ShouldQueue) makes things queueable. */
10336
10902
  interface ShouldQueue$2 {
10903
+ /**
10904
+ * Marks the class as queued at run time: `implements ShouldQueue` leaves no trace once compiled, so the interface
10905
+ * asks for `readonly shouldQueue = true`. Jobs, listeners, mailables and notifications carrying it are queued.
10906
+ */
10907
+ readonly shouldQueue: true;
10337
10908
  connection?: string;
10338
10909
  queue?: string;
10339
10910
  /** Seconds. */
@@ -11167,6 +11738,11 @@ interface OrielError$2 extends Error {
11167
11738
 
11168
11739
  /** Options a job class may declare as public fields. Their presence (or implementing ShouldQueue) makes things queueable. */
11169
11740
  interface ShouldQueue$1 {
11741
+ /**
11742
+ * Marks the class as queued at run time: `implements ShouldQueue` leaves no trace once compiled, so the interface
11743
+ * asks for `readonly shouldQueue = true`. Jobs, listeners, mailables and notifications carrying it are queued.
11744
+ */
11745
+ readonly shouldQueue: true;
11170
11746
  connection?: string;
11171
11747
  queue?: string;
11172
11748
  /** Seconds. */
@@ -11339,8 +11915,9 @@ interface UniqueLockSpec {
11339
11915
  untilProcessing: boolean;
11340
11916
  }
11341
11917
  /**
11342
- * Whether dispatch() queues the job: it carries the ShouldQueue marker (the Queueable base class), has a value for
11343
- * any ShouldQueue option, or defines uniqueId()/retryUntil(). `implements ShouldQueue` alone leaves no runtime trace.
11918
+ * Whether dispatch() queues the job: it carries ShouldQueue's `shouldQueue: true` (a `readonly shouldQueue = true`
11919
+ * field, or the Queueable base class's getter), the SHOULD_QUEUE symbol, a value for any ShouldQueue option, or
11920
+ * defines uniqueId()/retryUntil().
11344
11921
  */
11345
11922
  declare function isQueueable(job: unknown): boolean;
11346
11923
  /** Laravel's ShouldBeUnique: the job defines uniqueId(), uniqueFor, uniqueUntilProcessing or uniqueVia(). */
@@ -11497,7 +12074,9 @@ declare abstract class Dispatchable implements Job$1 {
11497
12074
  * A queued job: Laravel's `implements ShouldQueue` + `use Queueable`. `dispatch()` pushes it onto the queue.
11498
12075
  * The marker lives on the prototype, so it is never serialized.
11499
12076
  */
11500
- declare abstract class Queueable extends Dispatchable {
12077
+ declare abstract class Queueable extends Dispatchable implements ShouldQueue$1 {
12078
+ /** ShouldQueue's marker, so subclasses may write `implements ShouldQueue` without the field. */
12079
+ get shouldQueue(): true;
11501
12080
  }
11502
12081
 
11503
12082
  /** Laravel's dispatch() helper: queued when the job is queueable, else run now. Dispatched once, awaited or not. */
@@ -11558,6 +12137,11 @@ interface OrielError$1 extends Error {
11558
12137
 
11559
12138
  /** Options a job class may declare as public fields. Their presence (or implementing ShouldQueue) makes things queueable. */
11560
12139
  interface ShouldQueue {
12140
+ /**
12141
+ * Marks the class as queued at run time: `implements ShouldQueue` leaves no trace once compiled, so the interface
12142
+ * asks for `readonly shouldQueue = true`. Jobs, listeners, mailables and notifications carrying it are queued.
12143
+ */
12144
+ readonly shouldQueue: true;
11561
12145
  connection?: string;
11562
12146
  queue?: string;
11563
12147
  /** Seconds. */
@@ -11879,6 +12463,17 @@ declare class MailServiceProvider extends ServiceProvider$2 {
11879
12463
  register(): void;
11880
12464
  }
11881
12465
 
12466
+ /**
12467
+ * Laravel's Notifiable trait: RoutesNotifications (notify(), notifyNow(), routeNotificationFor()) and
12468
+ * HasDatabaseNotifications (notifications(), unreadNotifications(), readNotifications()).
12469
+ * `class User extends Notifiable(AuthenticatableModel(Model)) {}`.
12470
+ */
12471
+ declare function Notifiable<TBase extends ModelConstructor>(Base: TBase): (new (...args: any[]) => {
12472
+ routeNotificationFor(channel: string, notification: Notification$4): unknown;
12473
+ notify(notification: Notification$4): Promise<void>;
12474
+ notifyNow(notification: Notification$4, channels?: string[]): Promise<void>;
12475
+ }) & TBase & (new (...args: any[]) => HasDatabaseNotificationsModel);
12476
+
11882
12477
  /** A typed, runtime-unique key for container bindings. */
11883
12478
  interface Token<T> {
11884
12479
  readonly id: symbol;
@@ -11915,54 +12510,6 @@ interface Container {
11915
12510
  }
11916
12511
  declare const Container: Token<Container>;
11917
12512
 
11918
- interface ServiceProvider$1 {
11919
- /** Bind things into the container. Synchronous. Don't resolve other services here. */
11920
- register?(): void;
11921
- /** Runs after every provider is registered. May be async (e.g. importing route files). */
11922
- boot?(): void | Promise<void>;
11923
- }
11924
- type ServiceProviderClass = new (app: Application) => ServiceProvider$1;
11925
- interface Application extends Container {
11926
- readonly version: string;
11927
- basePath(path?: string): string;
11928
- appPath(path?: string): string;
11929
- bootstrapPath(path?: string): string;
11930
- configPath(path?: string): string;
11931
- databasePath(path?: string): string;
11932
- publicPath(path?: string): string;
11933
- resourcePath(path?: string): string;
11934
- storagePath(path?: string): string;
11935
- /** With no args returns the environment name. With args returns whether it matches any of them. */
11936
- environment(): string;
11937
- environment(...environments: string[]): boolean;
11938
- isProduction(): boolean;
11939
- isLocal(): boolean;
11940
- runningInConsole(): boolean;
11941
- /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
11942
- setRunningInConsole(value?: boolean): void;
11943
- runningUnitTests(): boolean;
11944
- /** Registers the provider. If the app is already booted, the provider is booted immediately. */
11945
- register(provider: ServiceProvider$1 | ServiceProviderClass): Promise<ServiceProvider$1>;
11946
- getProviders(): ServiceProvider$1[];
11947
- boot(): Promise<void>;
11948
- isBooted(): boolean;
11949
- booting(callback: (app: Application) => void | Promise<void>): void;
11950
- booted(callback: (app: Application) => void | Promise<void>): void;
11951
- /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
11952
- handle(request: Request): Promise<Response>;
11953
- /** Register a callback that terminate() runs, in registration order. */
11954
- terminating(callback: () => void | Promise<void>): void;
11955
- terminate(): Promise<void>;
11956
- }
11957
- declare const Application: Token$j<Application>;
11958
- interface Htmlable {
11959
- toHtml(): string;
11960
- }
11961
- /** Anything a controller can return that knows how to become a Response. */
11962
- interface Responsable {
11963
- toResponse(request: unknown): Response | Promise<Response>;
11964
- }
11965
-
11966
12513
  /** The session of the current request (scoped). Loaded and saved by the StartSession middleware. */
11967
12514
  interface Session {
11968
12515
  getId(): string;
@@ -12025,6 +12572,8 @@ interface HttpRequest {
12025
12572
  header(name: string, defaultValue: string): string;
12026
12573
  bearerToken(): string | undefined;
12027
12574
  ip(): string | undefined;
12575
+ /** The raw body as text (Laravel's getContent()); '' when there is none. */
12576
+ content(): string;
12028
12577
  expectsJson(): boolean;
12029
12578
  ajax(): boolean;
12030
12579
  query<T = unknown>(key?: string, defaultValue?: T): T;
@@ -12056,6 +12605,54 @@ interface Middleware {
12056
12605
  handle(request: HttpRequest, next: Next, ...parameters: string[]): Promise<Response>;
12057
12606
  terminate?(request: HttpRequest, response: Response): Promise<void>;
12058
12607
  }
12608
+
12609
+ interface ServiceProvider$1 {
12610
+ /** Bind things into the container. Synchronous. Don't resolve other services here. */
12611
+ register?(): void;
12612
+ /** Runs after every provider is registered. May be async (e.g. importing route files). */
12613
+ boot?(): void | Promise<void>;
12614
+ }
12615
+ type ServiceProviderClass = new (app: Application) => ServiceProvider$1;
12616
+ interface Application extends Container {
12617
+ readonly version: string;
12618
+ basePath(path?: string): string;
12619
+ appPath(path?: string): string;
12620
+ bootstrapPath(path?: string): string;
12621
+ configPath(path?: string): string;
12622
+ databasePath(path?: string): string;
12623
+ publicPath(path?: string): string;
12624
+ resourcePath(path?: string): string;
12625
+ storagePath(path?: string): string;
12626
+ /** With no args returns the environment name. With args returns whether it matches any of them. */
12627
+ environment(): string;
12628
+ environment(...environments: string[]): boolean;
12629
+ isProduction(): boolean;
12630
+ isLocal(): boolean;
12631
+ runningInConsole(): boolean;
12632
+ /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
12633
+ setRunningInConsole(value?: boolean): void;
12634
+ runningUnitTests(): boolean;
12635
+ /** Registers the provider. If the app is already booted, the provider is booted immediately. */
12636
+ register(provider: ServiceProvider$1 | ServiceProviderClass): Promise<ServiceProvider$1>;
12637
+ getProviders(): ServiceProvider$1[];
12638
+ boot(): Promise<void>;
12639
+ isBooted(): boolean;
12640
+ booting(callback: (app: Application) => void | Promise<void>): void;
12641
+ booted(callback: (app: Application) => void | Promise<void>): void;
12642
+ /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
12643
+ handle(request: Request): Promise<Response>;
12644
+ /** Register a callback that terminate() runs, in registration order. */
12645
+ terminating(callback: () => void | Promise<void>): void;
12646
+ terminate(): Promise<void>;
12647
+ }
12648
+ declare const Application: Token$j<Application>;
12649
+ interface Htmlable {
12650
+ toHtml(): string;
12651
+ }
12652
+ /** Anything a controller can return that knows how to become a Response. */
12653
+ interface Responsable {
12654
+ toResponse(request: unknown): Response | Promise<Response>;
12655
+ }
12059
12656
  interface RedirectResponse extends Responsable {
12060
12657
  readonly targetUrl: string;
12061
12658
  with(key: string | Record<string, unknown>, value?: unknown): this;
@@ -12663,4 +13260,4 @@ type SharedPropsFrom<M> = M extends {
12663
13260
  share(...args: never[]): infer R;
12664
13261
  } ? SerializedObject<Awaited<R>> : Record<never, never>;
12665
13262
 
12666
- export { API_ROUTES_STUB, AboutCommand, AbstractPaginator, AccessGate, AddQueuedCookiesToResponse, type AfterCallback, AllMailersFailedError, AlwaysProp, AnonymousNotifiable, Application$9 as Application, ApplicationBuilder, ArgonHasher, type ArgonOptions, type ArgumentDefinition, Arr, ArraySessionHandler, ArrayTransport, Artisan, Attempting, type Attributes$1 as Attributes, type AttributesResolver, Auth, AuthManager, type AuthModel, type AuthModelBase, type AuthModelConstructor, AuthServiceProvider, AuthenticatableModel, Authenticate, AuthenticationError, AuthorizationError, AuthorizationErrorImpl, Authorize, BaseJob, BaseLogger, BasePipeline, BaseRouter, BaseUrlGenerator, Batch$1 as Batch, type BatchAttributes, BatchingUnavailableError, BcryptHasher, type BcryptOptions, type BeforeCallback, BelongsTo, BelongsToMany, BindingResolutionError, Blueprint, type BlueprintCommand, BufferedConsoleOutput, Builder, type BuiltInCast, type BuiltinRule, BuiltinRuleObject, type BunDatabase, BunSqliteDatabase, type BunStatement, Bus, Dispatcher as BusDispatcherImpl, BusError, BusServiceProvider, CACHE_TABLE_MIGRATION, CHAIN, Cache, CacheManager$1 as CacheManager, Repository as CacheRepositoryImpl, CacheServiceProvider, type Store as CacheStore, CallQueuedHandler, CallQueuedListener, type CanResetPassword, type CanResetPasswordUser, type CastDefinition, type CastsAttributes, type ChainSpec, type CipherName, CircularDependencyError, ClassRegistry$2 as ClassRegistry, ClosureCommand$4 as ClosureCommand, ClosureKernel, Collection$2 as Collection, type Column, type ColumnAttributes, ColumnDefinition, type ColumnInfo, type ColumnRef, type ColumnType, Command$4 as Command, CommandNotFoundError, ComponentNotFoundError, Connection, type ConsoleInput, type ConsoleIo, Kernel as ConsoleKernelImpl, type ConsoleOutput, ConsoleServiceProvider, Container$j as Container, ContainerNotAvailableError, ControllerMethodNotFoundError, ConvertEmptyStringsToNull, Cookie$1 as Cookie, type CookieDefaults, CookieJar$1 as CookieJar, CookieServiceProvider, CookieSessionHandler, CookieValuePrefix, type CreateMigrationOptions, Crypt, Cursor, type CursorPage, CursorPaginator, type CursorPaginatorOptions, DB, DEFAULT_MESSAGES, DailyRotatingStream, DatabaseBatchRepository, type DatabaseCommandContext, type DatabaseConfig, DatabaseConfigError, DatabaseError, DatabaseFailedJobProvider, DatabaseJob, type DatabaseJobRecord, DatabaseLock, DatabaseManagerImpl, DatabaseNotificationChannel, type DatabaseNotificationRecord, DatabaseQueue, type DatabaseQueueOptions, DatabaseServiceProvider, DatabaseSessionHandler, DatabaseStore, DatabaseTokenRepository, DatabaseUnavailableError, DecryptError, DeferProp, type Direction, Dispatchable, type EagerLoadSpec, EloquentUserProvider, type Encoded, EncryptCookies, EncryptError, EncryptHistory, Encrypter$2 as Encrypter, EncryptionServiceProvider, EnsureEmailIsVerified, type EnumLike, type ErrorClass, ErrorHandler, Event, Dispatcher$1 as EventDispatcherImpl, type EventKey, type EventListenMap, EventServiceProvider, EventsNeedBusDispatcherError, EventsNeedClassRegistryError, ExceptionsConfiguration, Expression, type Facade$c as Facade, type FacadeStatics$c as FacadeStatics, Factory$b as Factory, type FactoryResult, Failed, FailoverTransport, Faker, FakerOverflowError, FileNotFoundError, FileSessionHandler, FileStore, FilesystemManager, FilesystemServiceProvider, ForeignIdColumnDefinition, ForeignKeyDefinition, FormRequest, FormUploadedFile, Gate, type GateAbility, GateResponse, GeneratorCommand, GenericLock, type GlobalScope, Grammar, type GroupAttributes, type GroupHost, GroupRegistrar, type GuardFactory, HasApiTokens, HasMany, HasManyThrough, HasOne, HasOneOrMany, Hash, HashAlgorithmError, type HashInfo, HashManager, type HasherFactory, type HashingConfig, HashingServiceProvider, type Having, HelpCommand, type HttpCommandOptions, HttpException, Kernel$1 as HttpKernelImpl, HttpRedirectResponse, HttpRedirector, HttpResponseException, HttpResponseFactory, HttpServerError, HttpServiceProvider, Hub, IncomingRequest, type IncomingRequestOptions, type IndexType, Inertia, InertiaError, InertiaHtml, InertiaMiddleware, Response$1 as InertiaPageResponse, ResponseFactory as InertiaResponseFactory, InertiaServiceProvider, type ValidationErrors as InertiaValidationErrors, type InferRuleType, type InferValidatedType, InvalidCacheConfigError, InvalidCastError, InvalidListenerError, InvalidLogLevelError, InvalidRuleParameterError, InvalidSignatureError, JOBS_TABLE_MIGRATION, JobClassNotFoundError, type JobContext, type JobMiddleware, JobSerializationError, JoinClause, type JoinType, KEY_GENERATE_SIGNATURE, type KernelApp, type KeyGenerateIO, LEVEL_SEVERITY, LazyCollection$1 as LazyCollection, type LengthAwarePage, LengthAwarePaginator, ListCommand, type ListenerTuple, type LocalDiskConfig, LocalFilesystem, type LockFactory, LockTimeoutError, Log, LogChannelCycleError, LogManager, LogServiceProvider, LogTransport, type LoggedQuery, LogicError, Login, Logout, MIGRATION_CREATE_STUB, MIGRATION_STUB, MIGRATION_UPDATE_STUB, MODEL_EVENTS, Mail, MailManager, MailMessage, type MailMessageAction, MailNotificationChannel, MailQueueUnavailableError, MailServiceProvider, type MailTransporter, MailUnavailableError, Mailable, MailerImpl, MakeCastCommand, MakeCommandCommand, MakeControllerCommand, MakeEventCommand, MakeFactoryCommand, MakeJobCommand, MakeListenerCommand, MakeMailCommand, MakeMiddlewareCommand, MakeModelCommand, MakeNotificationCommand, MakeObserverCommand, MakePolicyCommand, MakeProviderCommand, MakeRequestCommand, MakeResourceCommand, MakeRuleCommand, MakeSeederCommand, MakeTestCommand, type Manifest, type ManifestChunk, ManuallyFailedError, type Many, MassAssignmentError, MaxAttemptsExceededError, MemoryStore, MergeProp, MessageBagImpl, MethodNotAllowedHttpError, MiddlewareConfiguration, MiddlewareNotFoundError, Migration, MigrationCreator, type MigrationRecord, MigrationRepository, type MigrationStatus, Migrator, type MigratorOptions, MissingAppKeyError, MissingModelError, MissingRecipientError, Model, type ModelBuilder, type ModelClass, type ModelEvent, type ModelListener, ModelNotFoundError$1 as ModelNotFoundError, ModelRegistry, type MorphConstraint, MorphMany, MorphOne, MorphTo, MySqlSchemaGrammar, NOTIFICATIONS_TABLE, NOTIFICATIONS_TABLE_MIGRATION, type NewAccessToken, NodeConsoleInput, NodeConsoleOutput, NotDatabaseNotifiableError, NotFoundHttpError, Notifiable$1 as Notifiable, type NotifiableConstructor, Notification$1 as Notification, Dispatcher$2 as NotificationDispatcherImpl, NotificationDispatcherUnavailableError, NotificationFacade, NotificationQueueUnavailableError, NotificationsServiceProvider, NullFailedJobProvider, NullLogger, NullQueue, OPERATORS, OnceProp, type OptionDefinition, type OptionValue$4 as OptionValue, OptionalProp, type Order, PERSONAL_ACCESS_TOKENS_MIGRATION, type PagePropsFrom, type PaginationLink, Paginator, type PaginatorOptions, type ParsedInput, type ParsedRule, type ParsedSetCookie, type ParsedSignature, Password, PasswordBroker, PasswordBrokerManager, PasswordReset, PathTraversalError, PendingBatch, PendingChain, PendingDispatch, PersonalAccessToken, PinoLogger, PipelineError, PipelineServiceProvider, Pivot, type PivotIds, type PlainNotificationMail, type PolicyClass, PostgresSchemaGrammar, type PreloadAttributesResolver, PropsResolver, ProviderBootError, ProviderRegisterError, QUEUE_JOB, Builder$1 as QueryBuilder, QueryError, Queue$1 as Queue, QueueBase, type QueueCommandContext, QueueError, type QueueJobPayload, QueueManager, QueueServiceProvider, QueueUnavailableError, Queueable, QueuedConsoleInput, QueuedMailSender, type QueuedMailableFactory, RESTART_CACHE_KEY, type RawResult, type RecipientOverrides, RedirectIfAuthenticated, RedisJob, RedisLock, RedisQueue, type RedisQueueOptions, RedisRepository, type RedisSessionClient, RedisSessionHandler, RedisStore, RedisTaggedStore, type ReferentialAction, type RegisteredModel, Relation, type RelationConstraint, type RelationNames, RelationNotFoundError, RelationNotLoadedError, type RelationValue, type RenderCallback, type RenderedContent, type ReplStarter, type ReportCallback, Repository$1 as Repository, ResetPassword, type ResetPasswordMail, type ResolvedMiddleware, type ResolvedServeOptions, type ResourceMethod, type ResourceRoute, type RollbackOptions, Route$1 as Route, type RouteAttributes, type RouteBinder, RouteDefinition, type RouteFileCallback, type RouteHandler, type RouteListFilters, type RouteListRow, RouteModelNotFoundError, RouteModelResolverImpl, RouteNotDefinedError, type RouteStage, RoutingError, type RoutingOptions, RoutingServiceProvider, Rule, type RuleContext, type RunningServer, type Runtime, type S3ClientLike, type S3DiskConfig, S3Filesystem, SSR_RENDER_FAILED, STORAGE_LINK_SIGNATURE, Schedule, ScheduleImpl, ScheduleListCommand, ScheduleNameRequiredError, ScheduleRunCommand, ScheduleWorkCommand, type ScheduleWorkOptions, ScheduledEventImpl, Schema, SchemaBuilder, SchemaBuilderToken, SchemaGrammar, type Scope, type ScopeCallback, type ScopeStatic, type Scopes, type ScrollMetadata, ScrollProp, Seeder, type SeederClass, type SelectColumn, SendQueuedMailable, SendQueuedNotifications, type Serialized, type SerializedObject, type ServeOptions, ServiceProvider$t as ServiceProvider, SessionFacade as Session, type SessionConfig, SessionGuard, type SessionGuardOptions, type SessionHandlerFactory, SessionManager, SessionMessageBag, SessionServiceProvider, Store$1 as SessionStore, type SharedPropsFrom, type SimplePage, type SmtpConfig, SmtpTransport, SoftDeletingScope, type SpawnResult, type Spawner, SqliteSchemaGrammar, SsrError, type SsrFailure, HttpGateway as SsrHttpGateway, type StackFrame, StackLogger, StartSession, type State, type StateContext, Storage, type StoredBatchOptions, Str, type StringPipeResolver, type SyncChanges, SyncJob, SyncQueue, type TagAttributes, TagsNotSupportedError, TestCommand, TimeoutExceededError, TinkerCommand, type TinkerOptions, type TinkerRepl, TokenGuard, type TokenGuardOptions, TokenMismatchError, TokenRepository, type TransporterFactory, TrimStrings, TypeGenerator, type TypeGeneratorOptions, type TypedRedirector, UNIQUE_LOCK, USERS_TABLE_MIGRATION, UniqueJobsNeedCacheError, UniqueLock, type UniqueLockSpec, UnknownCacheDriverError, UnknownCacheStoreError, UnknownDiskError, UnknownFilesystemDriverError, UnknownLogChannelError, UnknownLogDriverError, UnknownMailTransportError, UnknownMailerError, UnknownNotificationChannelError, UnknownQueueConnectionError, UnknownQueueDriverError, UnknownValidationRuleError, UnrenderableNotificationDataError, UnrenderableNotificationMailError, UnsupportedCipherError, UnsupportedOperationError, type UriParameter, UrlGenerationError, type UrlResolver, type UserProviderFactory, Validated, ValidationErrorImpl, ValidationFactoryImpl, ValidationServiceProvider, Validator, ValidatorImpl, VerifyCsrfToken, ViewFactoryUnavailableError, Vite, ViteError, ViteHtml, WORKER_DISCOVERY_DIRECTORIES, type Where, type WhereArgs, type WhereBoolean, WithoutOverlapping, Worker, type WorkerListener, type WorkerOptions, abort, abortIf, abortUnless, addApiRouting, allowGuests, app, applyExceptionCallbacks, applyMiddlewareCallbacks, applyReplacements, auth, back, bcrypt, builtinRules, bunRuntime, cache, castGet, castSet, classNameOf, clientAddress, collect, columnKey, compareRoutes, config, contentDisposition, cookie, createDailyChannel, createDialect, createPayload, createSingleChannel, createStderrChannel, createToken, csrfToken, currentContainer, currentLogContext, currentRequest, currentVite, databaseConfigDefaults, debugPage, decodePayload, decrypt, defaultAttributeName, defaultLockFactory, defaultProviders, defaultWorkerOptions, delaySeconds, describeError, deserialize, detectRuntime, discoverClasses, discoverFactories, discoverJobs, discoverListeners, discoverPolicies, dispatch, dispatchRoute, dispatchSync, encodePayload, encrypt, enumValues, env, errorBagFrom, errors, escapeHtml, event, expandWildcardKeys, extensionFromMime, facade, fake, fetchNotifications, filterRouteList, formatAddress, formatDate, formatDateTime, formatRouteList, formatTimestamp, fromEntries, generateAppKey, generateModelTypes, getMorphAlias, getMorphedModel, guessTable, hashInfo, healthResponse, inertia, inertiaBody, inertiaHead, inject, ipMatches, isBlank, isBun, isDateCast, isEmptyValue, isEquivalent, isJsonCast, isListenerClass, isListenerTuple, isModel, isQueueable, isQueueableListener, isUnique, isUploadedFileLike, joinDiskPath, keyGenerateHandler, loadRelations, loadRoutesFrom, logger, makeFailedJobProvider, meetsLevel, mergeGroup, mergeLogContext, mergeRecursive, migrationDatePrefix, minimalPage, modelEventName, morphMap, normalizeAddress, normalizeAddresses, normalizeBackoff, normalizeLists, normalizePath, normalizeUri, now, old, openSqlite, optionalCookieJar, optionalSession, orderForBindings, parseArgv, parseBracketKey, parseCookieHeader, parseDateTime, parseKey, parseParameters, parseRuleSpec, parseSignature, passwordVerify, prepareValue, queueConfigDefaults, queueOptionsOf, raw as rawSql, rawWithBindings, redirect, registerHttpCommands, registerKeyGenerateCommand, registerMigrationCommands, registerModelTypesCommand, registerQueueCommands, registerStorageLinkCommand, renderContent, renderError, request, requestScope, resolveArguments, resolveDiskPath, resolveMiddleware, resolveMorphClass, resolveOptions, resourceRoutes, response, restoreJob, restoreValue, retry, roundTrip, route, routeListRows, runConsole, runConsoleAndExit, runMiddleware, runSeeder, sanitize, sendEmailVerificationUsing, sendNotification, serialize, serializeContext, serializeCookie, serializeDate, serializeValue, serve, serveBun, serveNode, servePublicFile, session, setClientAddress, stackFrames, statusFor, statusText, storageLinkHandler, substituteBindings, suggest, summarizeValidation, tap, toNotifiableList, toResponse, toWebRequest, tokenableType, transformLeaves, url, usePaginationResolvers, validateRequiredArguments, value, vite, viteReactRefresh, withHeaders, workerOptionsFrom, writeResponse };
13263
+ export { API_ROUTES_STUB, AboutCommand, AbstractPaginator, AccessGate, AddQueuedCookiesToResponse, type AfterCallback, AllMailersFailedError, AlwaysProp, AnonymousNotifiable, Application$9 as Application, ApplicationBuilder, ArgonHasher, type ArgonOptions, type ArgumentDefinition, Arr, ArraySessionHandler, ArrayTransport, Artisan, Attempting, type Attributes$1 as Attributes, type AttributesResolver, Auth, AuthManager, type AuthModel, type AuthModelBase, type AuthModelConstructor, AuthServiceProvider, AuthenticatableModel, Authenticate, AuthenticationError, Authorizable, type AuthorizableConstructor, AuthorizationError, AuthorizationErrorImpl, Authorize, BaseJob, BaseLogger, BasePipeline, BaseRouter, BaseUrlGenerator, Batch$1 as Batch, type BatchAttributes, BatchingUnavailableError, BcryptHasher, type BcryptOptions, type BeforeCallback, BelongsTo, BelongsToMany, BindingResolutionError, Blueprint, type BlueprintCommand, BufferedConsoleOutput, Builder, type BuiltInCast, type BuiltinRule, BuiltinRuleObject, type BunDatabase, BunSqliteDatabase, type BunStatement, Bus, Dispatcher as BusDispatcherImpl, BusError, BusServiceProvider, CACHE_TABLE_MIGRATION, CHAIN, Cache, CacheManager$1 as CacheManager, CacheRateLimiter, Repository as CacheRepositoryImpl, CacheServiceProvider, type Store as CacheStore, CallQueuedHandler, CallQueuedListener, type CanResetPassword, type CanResetPasswordUser, type CastDefinition, type CastsAttributes, type ChainSpec, type CipherName, CircularDependencyError, ClassRegistry$2 as ClassRegistry, ClosureCommand$4 as ClosureCommand, ClosureKernel, Collection$2 as Collection, type Column, type ColumnAttributes, ColumnDefinition, type ColumnInfo, type ColumnRef, type ColumnType, Command$4 as Command, CommandNotFoundError, ComponentNotFoundError, Connection, type ConsoleInput, type ConsoleIo, Kernel as ConsoleKernelImpl, type ConsoleOutput, ConsoleServiceProvider, Container$j as Container, ContainerNotAvailableError, Controller, ControllerMethodNotFoundError, ConvertEmptyStringsToNull, Cookie$1 as Cookie, type CookieDefaults, CookieJar$1 as CookieJar, CookieServiceProvider, CookieSessionHandler, CookieValuePrefix, type CreateMigrationOptions, Crypt, Cursor, type CursorPage, CursorPaginator, type CursorPaginatorOptions, DB, DEFAULT_MESSAGES, DailyRotatingStream, DatabaseBatchRepository, type DatabaseCommandContext, type DatabaseConfig, DatabaseConfigError, DatabaseError, DatabaseFailedJobProvider, DatabaseJob, type DatabaseJobRecord, DatabaseLock, DatabaseManagerImpl, DatabaseNotification, DatabaseNotificationChannel, DatabaseNotificationCollection, DatabaseNotificationsRelation, DatabaseQueue, type DatabaseQueueOptions, DatabaseServiceProvider, DatabaseSessionHandler, DatabaseStore, DatabaseTokenRepository, DatabaseUnavailableError, DecryptError, DeferProp, DiagnosingHealth, type Direction, Dispatchable, type EagerLoadSpec, EloquentUserProvider, EmailVerificationRequest, type Encoded, EncryptCookies, EncryptError, EncryptHistory, Encrypter$2 as Encrypter, EncryptionServiceProvider, EnsureEmailIsVerified, type EnumLike, type ErrorClass, ErrorHandler, Event, Dispatcher$1 as EventDispatcherImpl, type EventKey, type EventListenMap, EventServiceProvider, EventsNeedBusDispatcherError, EventsNeedClassRegistryError, ExceptionsConfiguration, Expression, type Facade$c as Facade, type FacadeStatics$c as FacadeStatics, Factory$b as Factory, type FactoryResult, Failed, FailoverTransport, Faker, FakerOverflowError, FileNotFoundError, FileSessionHandler, FileStore, FilesystemManager, FilesystemServiceProvider, ForeignIdColumnDefinition, ForeignKeyDefinition, FormRequest, FormUploadedFile, Gate, type GateAbility, GateResponse, GeneratorCommand, GenericLock, type GlobalScope, Grammar, type GroupAttributes, type GroupHost, GroupRegistrar, type GuardFactory, HasApiTokens, HasDatabaseNotifications, type HasDatabaseNotificationsModel, type HasFactory, HasMany, HasManyThrough, HasOne, HasOneOrMany, Hash, HashAlgorithmError, type HashInfo, HashManager, type HasherFactory, type HashingConfig, HashingServiceProvider, type Having, type HealthPage, HelpCommand, type HttpCommandOptions, HttpException, Kernel$1 as HttpKernelImpl, HttpRedirectResponse, HttpRedirector, HttpResponseException, HttpResponseFactory, HttpServerError, HttpServiceProvider, Hub, IncomingRequest, type IncomingRequestOptions, type IndexType, Inertia, InertiaError, InertiaHtml, InertiaMiddleware, Response$1 as InertiaPageResponse, ResponseFactory as InertiaResponseFactory, InertiaServiceProvider, type ValidationErrors as InertiaValidationErrors, type InferRuleType, type InferValidatedType, InvalidCacheConfigError, InvalidCastError, InvalidListenerError, InvalidLogLevelError, InvalidRuleParameterError, InvalidSignatureError, InvalidUrlSignatureError, JOBS_TABLE_MIGRATION, JobClassNotFoundError, type JobContext, type JobMiddleware, JobSerializationError, JoinClause, type JoinType, type JsonWhenCallback, KEY_GENERATE_SIGNATURE, type KernelApp, type KeyGenerateIO, LEVEL_SEVERITY, LazyCollection$1 as LazyCollection, type LengthAwarePage, LengthAwarePaginator, ListCommand, type ListenerTuple, type LocalDiskConfig, LocalFilesystem, type LockFactory, LockTimeoutError, Lockout, Log, LogChannelCycleError, LogManager, LogServiceProvider, LogTransport, type LoggedQuery, LogicError, Login, Logout, MIGRATION_CREATE_STUB, MIGRATION_STUB, MIGRATION_UPDATE_STUB, MODEL_EVENTS, Mail, MailManager, MailMessage, type MailMessageAction, MailNotificationChannel, MailQueueUnavailableError, MailServiceProvider, type MailTransporter, MailUnavailableError, Mailable, MailerImpl, MakeCastCommand, MakeCommandCommand, MakeControllerCommand, MakeEventCommand, MakeFactoryCommand, MakeJobCommand, MakeListenerCommand, MakeMailCommand, MakeMiddlewareCommand, MakeModelCommand, MakeNotificationCommand, MakeObserverCommand, MakePolicyCommand, MakeProviderCommand, MakeRequestCommand, MakeResourceCommand, MakeRuleCommand, MakeSeederCommand, MakeTestCommand, type Manifest, type ManifestChunk, ManuallyFailedError, type Many, MassAssignmentError, MaxAttemptsExceededError, MemoryStore, MergeProp, MessageBagImpl, MethodNotAllowedHttpError, MiddlewareConfiguration, MiddlewareNotFoundError, Migration, MigrationCreator, type MigrationRecord, MigrationRepository, type MigrationStatus, Migrator, type MigratorOptions, MissingAppKeyError, MissingModelError, MissingRecipientError, Model, type ModelBuilder, type ModelClass, type ModelConstructor, type ModelEvent, type ModelListener, ModelNotFoundError$1 as ModelNotFoundError, ModelRegistry, type MorphConstraint, MorphMany, MorphOne, MorphTo, MySqlSchemaGrammar, NOTIFICATIONS_TABLE, NOTIFICATIONS_TABLE_MIGRATION, type NewAccessToken, NodeConsoleInput, NodeConsoleOutput, NotDatabaseNotifiableError, NotFoundHttpError, Notifiable, type NotifiableConstructor, Notification$1 as Notification, Dispatcher$2 as NotificationDispatcherImpl, NotificationDispatcherUnavailableError, NotificationFacade, NotificationQueueUnavailableError, NotificationsServiceProvider, NullFailedJobProvider, NullLogger, NullQueue, OPERATORS, OnceProp, type OptionDefinition, type OptionValue$4 as OptionValue, OptionalProp, type Order, PERSONAL_ACCESS_TOKENS_MIGRATION, type PagePropsFrom, type PaginationLink, Paginator, type PaginatorOptions, type ParsedInput, type ParsedRule, type ParsedSetCookie, type ParsedSignature, Password, PasswordBroker, PasswordBrokerManager, PasswordReset, PasswordRule, PathTraversalError, PendingBatch, PendingChain, PendingDispatch, PersonalAccessToken, PinoLogger, PipelineError, PipelineServiceProvider, Pivot, type PivotIds, type PlainNotificationMail, type PolicyClass, PostgresSchemaGrammar, type PreloadAttributesResolver, PropsResolver, ProviderBootError, ProviderRegisterError, QUEUE_JOB, Builder$1 as QueryBuilder, QueryError, Queue$1 as Queue, QueueBase, type QueueCommandContext, QueueError, type QueueJobPayload, QueueManager, QueueServiceProvider, QueueUnavailableError, Queueable, QueuedConsoleInput, QueuedMailSender, type QueuedMailableFactory, RESTART_CACHE_KEY, RateLimiter, type RawResult, type RecipientOverrides, RedirectIfAuthenticated, RedisJob, RedisLock, RedisQueue, type RedisQueueOptions, RedisRepository, type RedisSessionClient, RedisSessionHandler, RedisStore, RedisTaggedStore, type ReferentialAction, Registered, type RegisteredModel, Relation, type RelationConstraint, type RelationNames, RelationNotFoundError, RelationNotLoadedError, type RelationValue, type RenderCallback, type RenderedContent, type ReplStarter, type ReportCallback, Repository$1 as Repository, ResetPassword, type ResetPasswordMail, type ResolvedMiddleware, type ResolvedServeOptions, type ResourceMethod, type ResourceRoute, type RollbackOptions, Route$1 as Route, type RouteAttributes, type RouteBinder, RouteDefinition, type RouteFileCallback, type RouteHandler, type RouteListFilters, type RouteListRow, RouteModelNotFoundError, RouteModelResolverImpl, RouteNotDefinedError, type RouteStage, RoutesNotifications, RoutingError, type RoutingOptions, RoutingServiceProvider, Rule, type RuleContext, type RunningServer, type Runtime, type S3ClientLike, type S3DiskConfig, S3Filesystem, SSR_RENDER_FAILED, STORAGE_LINK_SIGNATURE, Schedule, ScheduleImpl, ScheduleListCommand, ScheduleNameRequiredError, ScheduleRunCommand, ScheduleWorkCommand, type ScheduleWorkOptions, ScheduledEventImpl, Schema, SchemaBuilder, SchemaBuilderToken, SchemaGrammar, type Scope, type ScopeCallback, type ScopeStatic, type Scopes, type ScrollMetadata, ScrollProp, Seeder, type SeederClass, type SelectColumn, SendEmailVerificationNotification, SendQueuedMailable, SendQueuedNotifications, type Serialized, type SerializedObject, type ServeOptions, ServiceProvider$t as ServiceProvider, SessionFacade as Session, type SessionConfig, SessionGuard, type SessionGuardOptions, type SessionHandlerFactory, SessionManager, SessionMessageBag, SessionServiceProvider, Store$1 as SessionStore, type SharedPropsFrom, type SimplePage, type SmtpConfig, SmtpTransport, SoftDeletingScope, type SpawnResult, type Spawner, SqliteSchemaGrammar, SsrError, type SsrFailure, HttpGateway as SsrHttpGateway, type StackFrame, StackLogger, StartSession, type State, type StateContext, Storage, type StoredBatchOptions, Str, type StringPipeResolver, type SyncChanges, SyncJob, SyncQueue, type TagAttributes, TagsNotSupportedError, TestCommand, ThrottleRequests, ThrottleRequestsError, TimeoutExceededError, TinkerCommand, type TinkerOptions, type TinkerRepl, TokenGuard, type TokenGuardOptions, TokenMismatchError, TokenRepository, type TransporterFactory, TrimStrings, TypeGenerator, type TypeGeneratorOptions, type TypedRedirector, UNIQUE_LOCK, USERS_TABLE_MIGRATION, UniqueJobsNeedCacheError, UniqueLock, type UniqueLockSpec, UnknownCacheDriverError, UnknownCacheStoreError, UnknownDiskError, UnknownFilesystemDriverError, UnknownLogChannelError, UnknownLogDriverError, UnknownMailTransportError, UnknownMailerError, UnknownNotificationChannelError, UnknownQueueConnectionError, UnknownQueueDriverError, UnknownValidationRuleError, UnrenderableNotificationDataError, UnrenderableNotificationMailError, UnsupportedCipherError, UnsupportedOperationError, type UriParameter, UrlGenerationError, type UrlResolver, type UserProviderFactory, ValidateSignature, Validated, ValidationErrorImpl, ValidationException, ValidationFactoryImpl, ValidationServiceProvider, Validator, ValidatorImpl, type VerifiableUser, Verified, VerifyCsrfToken, VerifyEmail, type VerifyEmailMail, ViewFactoryUnavailableError, Vite, ViteError, ViteHtml, WORKER_DISCOVERY_DIRECTORIES, type Where, type WhereArgs, type WhereBoolean, WithoutOverlapping, Worker, type WorkerListener, type WorkerOptions, __, abort, abortIf, abortUnless, addApiRouting, allowGuests, app, applyExceptionCallbacks, applyMiddlewareCallbacks, applyReplacements, auth, back, bcrypt, builtinRules, bunRuntime, cache, castGet, castSet, classNameOf, clientAddress, collect, columnKey, compareRoutes, config, contentDisposition, cookie, createDailyChannel, createDialect, createPayload, createSingleChannel, createStderrChannel, createToken, csrfToken, currentContainer, currentLogContext, currentRequest, currentVite, databaseConfigDefaults, debugPage, decodePayload, decrypt, defaultAttributeName, defaultLockFactory, defaultProviders, defaultWorkerOptions, delaySeconds, describeError, deserialize, detectRuntime, discoverClasses, discoverFactories, discoverJobs, discoverListeners, discoverPolicies, dispatch, dispatchRoute, dispatchSync, encodePayload, encrypt, enumValues, env, errorBagFrom, errors, escapeHtml, event, exceedsJsonDepth, expandWildcardKeys, extensionFromMime, facade, fake, filterRouteList, formatAddress, formatDate, formatDateTime, formatRouteList, formatTimestamp, fromEntries, generateAppKey, generateModelTypes, getMorphAlias, getMorphedModel, guessTable, hashInfo, healthResponse, inertia, inertiaBody, inertiaHead, inject, ipMatches, isBlank, isBun, isDateCast, isEmptyValue, isEquivalent, isJsonCast, isListenerClass, isListenerTuple, isModel, isQueueable, isQueueableListener, isUnique, isUploadedFileLike, joinDiskPath, keyGenerateHandler, loadRelations, loadRoutesFrom, logger, makeFailedJobProvider, meetsLevel, mergeGroup, mergeLogContext, mergeRecursive, migrationDatePrefix, minimalPage, modelEventName, morphMap, normalizeAddress, normalizeAddresses, normalizeBackoff, normalizeLists, normalizePath, normalizeUri, now, old, openSqlite, optionalCookieJar, optionalSession, orderForBindings, parseArgv, parseBracketKey, parseCookieHeader, parseDateTime, parseKey, parseParameters, parseRuleSpec, parseSignature, passwordVerify, prepareValue, queueConfigDefaults, queueOptionsOf, raw as rawSql, rawWithBindings, redirect, registerHttpCommands, registerKeyGenerateCommand, registerMigrationCommands, registerModelTypesCommand, registerQueueCommands, registerStorageLinkCommand, renderContent, renderError, request, requestScope, resolveArguments, resolveDiskPath, resolveMiddleware, resolveMorphClass, resolveOptions, resourceRoutes, response, restoreJob, restoreValue, retry, roundTrip, route, routeListRows, runConsole, runConsoleAndExit, runMiddleware, runSeeder, sanitize, sendEmailVerificationUsing, sendNotification, serialize, serializeContext, serializeCookie, serializeDate, serializeValue, serve, serveBun, serveNode, servePublicFile, session, setClientAddress, stackFrames, statusFor, statusText, storageLinkHandler, substituteBindings, suggest, summarizeValidation, tap, toNotifiableList, toResponse, toWebRequest, tokenableType, transformLeaves, url, usePaginationResolvers, validateRequiredArguments, value, vite, viteReactRefresh, withHeaders, workerOptionsFrom, writeResponse };