@palbase/backend 8.1.0 → 8.3.0

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.cts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { C as CacheClient, b as PalbaseDocsClient, c as PalbaseFlagsClient, L as Logger, d as PalbaseNotificationsClient, Q as QueueClient, e as PalbaseRealtimeClient, D as DBClient, f as PalbaseStorageClient, A as AuthSpec, R as RateLimitConfig, H as HttpError, U as User$1 } from './endpoint-fW9yWla0.cjs';
2
2
  export { g as AuthConfig, B as BadRequest, h as ClientInfo, i as Conflict, j as DBOps, E as ErrorDef, k as ErrorMap, l as ErrorThrowers, F as FileContext, m as Forbidden, n as HttpMethod, M as Middleware, o as MiddlewareContext, p as MiddlewareHandler, N as NotFound, P as PBRequest, q as PalError, r as PalbaseAnalyticsClient, s as PalbaseAnalyticsManagementNamespace, t as PalbaseAnalyticsProperties, u as PalbaseAnalyticsQueryNamespace, v as PalbaseAttestAndroidParams, w as PalbaseAttestAndroidResult, x as PalbaseAttestiOSParams, y as PalbaseAttestiOSResult, z as PalbaseAuthClient, G as PalbaseBatchOverrideOperation, I as PalbaseBatchSetOverridesResult, J as PalbaseBindDeviceParams, K as PalbaseBucketClient, O as PalbaseClearAllOverridesResult, S as PalbaseClearOverrideResult, T as PalbaseCohortQueryInput, V as PalbaseCohortResult, W as PalbaseCollectionRef, X as PalbaseCountQueryInput, Y as PalbaseCountResult, Z as PalbaseCreateLinkParams, _ as PalbaseDeviceInfo, $ as PalbaseDeviceTokenView, a0 as PalbaseDocumentRef, a1 as PalbaseDocumentSnapshot, a2 as PalbaseEmailClient, a3 as PalbaseEmailSendParams, a4 as PalbaseEmailSendResponse, a5 as PalbaseEventNamesResult, a6 as PalbaseEventsQueryInput, a7 as PalbaseEventsResult, a8 as PalbaseFileObject, a9 as PalbaseFlag, aa as PalbaseFlagContext, ab as PalbaseFlagSource, ac as PalbaseFlagValue, ad as PalbaseFlagVariant, ae as PalbaseFlagsServiceClient, af as PalbaseFunctionsClient, ag as PalbaseFunnelQueryInput, ah as PalbaseFunnelResult, ai as PalbaseIdentifyTraits, aj as PalbaseInboxClient, ak as PalbaseInboxListOptions, al as PalbaseInboxListResult, am as PalbaseInboxMessage, an as PalbaseInboxSendParams, ao as PalbaseInboxSendResponse, ap as PalbaseInitialLink, aq as PalbaseInvokeOptions, ar as PalbaseLink, as as PalbaseLinkAnalytics, at as PalbaseLinkDetails, au as PalbaseLinksClient, av as PalbaseListLinksOptions, aw as PalbaseListLinksResult, ax as PalbaseListOptions, ay as PalbaseMatchParams, az as PalbaseMultiChannelResponse, aA as PalbaseOverviewResult, aB as PalbasePreferences, aC as PalbasePreferencesClient, aD as PalbasePublicUrlResponse, aE as PalbasePushClient, aF as PalbasePushSendParams, aG as PalbasePushSendResponse, aH as PalbaseQrCodeOptions, aI as PalbaseQuerySnapshot, aJ as PalbaseRegisterDeviceParams, aK as PalbaseResult, aL as PalbaseRetentionQueryInput, aM as PalbaseRetentionResult, aN as PalbaseSession, aO as PalbaseSetOverrideResult, aP as PalbaseSetOverridesResult, aQ as PalbaseSignedUrlResponse, aR as PalbaseSmsClient, aS as PalbaseSmsSendParams, aT as PalbaseSmsSendResponse, aU as PalbaseTransformOptions, aV as PalbaseUpdateLinkParams, aW as PalbaseUploadOptions, aX as PalbaseUser, aY as PalbaseUserDetailResult, aZ as PalbaseUsersQueryInput, a_ as PalbaseUsersResult, a$ as PalbaseVerifyRequestSignatureParams, b0 as PalbaseWhereOperator, b1 as TooManyRequests, b2 as TxClient, b3 as Unauthorized, b4 as defineMiddleware } from './endpoint-fW9yWla0.cjs';
3
3
  import { AsyncLocalStorage } from 'node:async_hooks';
4
- import { E as EnvTypedDatabase, S as SchemaDef } from './index-BZdDJJIy.cjs';
5
- export { C as ColumnBuilder, a as ColumnDef, b as ColumnMap, c as ColumnType, d as EXTENSION_DEPENDENCIES, e as EnvServiceDatabase, f as EnvTables, g as EnvTypedTable, h as EnvTypedTx, I as InsertShape, O as OnDeleteAction, P as PALBASE_EXTENSIONS, i as PalbaseExtension, j as PolicyBuilder, k as PolicyCommand, l as PolicyDef, m as PolicyMode, R as RowShape, n as SchemaInput, T as TableDef, o as TableInput, p as TypedDB, q as TypedTable, r as TypedTx, s as boolean, t as defineSchema, u as enumType, v as integer, w as isPalbaseExtension, x as jsonb, y as makeTypedDB, z as policy, A as text, B as timestamp, D as uuid } from './index-BZdDJJIy.cjs';
4
+ import { E as EnvTypedDatabase, S as SchemaDef } from './index-CC0LdYkQ.cjs';
5
+ export { C as ColumnBuilder, a as ColumnDef, b as ColumnMap, c as ColumnType, d as EXTENSION_DEPENDENCIES, e as EnvServiceDatabase, f as EnvTables, g as EnvTypedTable, h as EnvTypedTx, I as InsertShape, O as OnDeleteAction, P as PALBASE_EXTENSIONS, i as PalbaseExtension, j as PolicyBuilder, k as PolicyCommand, l as PolicyDef, m as PolicyMode, R as RawConstraintDef, n as RowShape, o as SchemaInput, T as TableDef, p as TableInput, q as TypedDB, r as TypedTable, s as TypedTx, t as boolean, u as defineSchema, v as enumType, w as integer, x as isPalbaseExtension, y as jsonb, z as makeTypedDB, A as policy, B as raw, D as text, F as timestamp, G as uuid } from './index-CC0LdYkQ.cjs';
6
6
  export { TableTypes, Tables } from './db/env.cjs';
7
7
  import { ZodTypeAny, z } from 'zod';
8
8
  export { z } from 'zod';
@@ -714,20 +714,18 @@ type ParameterDecorator$1 = (target: object, propertyKey: string | symbol, param
714
714
  * — the client cannot exceed what it declared.
715
715
  */
716
716
  interface UploadConfig {
717
- /** Target bucket NAME. MUST exist in `config/storage.ts` `defineStorage(...)`. */
718
- bucket: string;
719
- /**
720
- * Max object size in BYTES. Enforced twice: the authorize pre-flight rejects a
721
- * larger declared size, and the signed URL pins it so storage rejects a larger
722
- * PUT. When omitted, the bucket's own `fileSizeLimit` applies.
723
- */
724
- maxSize?: number;
725
717
  /**
726
- * MIME allowlist for the object. The authorize pre-flight rejects a
727
- * non-matching declared content-type, and the signed URL pins the exact type.
728
- * When omitted, the bucket's own `allowedMimeTypes` applies (or any type).
718
+ * Target bucket NAME. MUST exist in `config/storage.ts` `defineStorage(...)`.
719
+ *
720
+ * The bucket is the SINGLE SOURCE OF TRUTH for the size limit + MIME allowlist:
721
+ * `bucket({ fileSizeLimit, allowedMimeTypes })`. Storage enforces those at the
722
+ * actual PUT (the only guard a client cannot skip), so `@Upload` deliberately
723
+ * does NOT take its own `maxSize`/`allowedTypes` — duplicating them here would
724
+ * let a route declare a tighter limit than its bucket that storage would not
725
+ * enforce (a real bypass: declare 10 bytes at authorize, then PUT up to the
726
+ * bucket ceiling straight at the signed URL). One bucket, one limit, enforced.
729
727
  */
730
- allowedTypes?: string[];
728
+ bucket: string;
731
729
  /**
732
730
  * SERVER-side object key template. The client NEVER chooses the path. Tokens:
733
731
  * `{userId}` (authenticated user id), `{uploadId}` (server-minted), and
@@ -742,9 +740,10 @@ interface UploadConfig {
742
740
  * guard + signed-URL pinning.
743
741
  *
744
742
  * @example
745
- * @Upload("/", { bucket: "docs", maxSize: 25 * 1024 * 1024,
746
- * allowedTypes: ["application/pdf"], pathTemplate: "{userId}/{uploadId}-{filename}" })
743
+ * @Upload("/", { bucket: "docs", pathTemplate: "{userId}/{uploadId}-{filename}" })
747
744
  * async upload(@UploadedObject() obj: UploadedObject, @User() user): Promise<DocResult> { ... }
745
+ * // The size limit + MIME allowlist come from the "docs" bucket in
746
+ * // config/storage.ts — storage enforces them at the PUT.
748
747
  */
749
748
  declare function Upload(subpath: string, config: UploadConfig & Pick<RouteOptions, "auth" | "rateLimit">): MethodDecorator$1;
750
749
  /**
@@ -777,10 +776,13 @@ interface UploadedObject {
777
776
  declare function UploadedObject(): ParameterDecorator$1;
778
777
  /**
779
778
  * Cross-check one `@Upload` route's uploadConfig against the project's
780
- * {@link StorageConfig}: the bucket must exist, the upload's `maxSize` must not
781
- * exceed the bucket's `fileSizeLimit`, and the upload's `allowedTypes` must be a
782
- * subset of the bucket's `allowedMimeTypes`. Throws a precise error so a
783
- * mismatch fails at deploy, not at the first user upload.
779
+ * {@link StorageConfig}: the named bucket MUST exist in `defineStorage(...)`.
780
+ * Throws a precise error so a typo fails at deploy, not at the first user upload.
781
+ *
782
+ * That is the ONLY cross-check: the size limit + MIME allowlist live on the
783
+ * bucket (`bucket({ fileSizeLimit, allowedMimeTypes })`) and are enforced by
784
+ * storage at the PUT. `@Upload` carries no `maxSize`/`allowedTypes` of its own,
785
+ * so there is nothing to compare — one bucket, one limit, no drift.
784
786
  *
785
787
  * `routeLabel` is used only for error messages (e.g. `docs.upload`).
786
788
  */
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { C as CacheClient, b as PalbaseDocsClient, c as PalbaseFlagsClient, L as Logger, d as PalbaseNotificationsClient, Q as QueueClient, e as PalbaseRealtimeClient, D as DBClient, f as PalbaseStorageClient, A as AuthSpec, R as RateLimitConfig, H as HttpError, U as User$1 } from './endpoint-fW9yWla0.js';
2
2
  export { g as AuthConfig, B as BadRequest, h as ClientInfo, i as Conflict, j as DBOps, E as ErrorDef, k as ErrorMap, l as ErrorThrowers, F as FileContext, m as Forbidden, n as HttpMethod, M as Middleware, o as MiddlewareContext, p as MiddlewareHandler, N as NotFound, P as PBRequest, q as PalError, r as PalbaseAnalyticsClient, s as PalbaseAnalyticsManagementNamespace, t as PalbaseAnalyticsProperties, u as PalbaseAnalyticsQueryNamespace, v as PalbaseAttestAndroidParams, w as PalbaseAttestAndroidResult, x as PalbaseAttestiOSParams, y as PalbaseAttestiOSResult, z as PalbaseAuthClient, G as PalbaseBatchOverrideOperation, I as PalbaseBatchSetOverridesResult, J as PalbaseBindDeviceParams, K as PalbaseBucketClient, O as PalbaseClearAllOverridesResult, S as PalbaseClearOverrideResult, T as PalbaseCohortQueryInput, V as PalbaseCohortResult, W as PalbaseCollectionRef, X as PalbaseCountQueryInput, Y as PalbaseCountResult, Z as PalbaseCreateLinkParams, _ as PalbaseDeviceInfo, $ as PalbaseDeviceTokenView, a0 as PalbaseDocumentRef, a1 as PalbaseDocumentSnapshot, a2 as PalbaseEmailClient, a3 as PalbaseEmailSendParams, a4 as PalbaseEmailSendResponse, a5 as PalbaseEventNamesResult, a6 as PalbaseEventsQueryInput, a7 as PalbaseEventsResult, a8 as PalbaseFileObject, a9 as PalbaseFlag, aa as PalbaseFlagContext, ab as PalbaseFlagSource, ac as PalbaseFlagValue, ad as PalbaseFlagVariant, ae as PalbaseFlagsServiceClient, af as PalbaseFunctionsClient, ag as PalbaseFunnelQueryInput, ah as PalbaseFunnelResult, ai as PalbaseIdentifyTraits, aj as PalbaseInboxClient, ak as PalbaseInboxListOptions, al as PalbaseInboxListResult, am as PalbaseInboxMessage, an as PalbaseInboxSendParams, ao as PalbaseInboxSendResponse, ap as PalbaseInitialLink, aq as PalbaseInvokeOptions, ar as PalbaseLink, as as PalbaseLinkAnalytics, at as PalbaseLinkDetails, au as PalbaseLinksClient, av as PalbaseListLinksOptions, aw as PalbaseListLinksResult, ax as PalbaseListOptions, ay as PalbaseMatchParams, az as PalbaseMultiChannelResponse, aA as PalbaseOverviewResult, aB as PalbasePreferences, aC as PalbasePreferencesClient, aD as PalbasePublicUrlResponse, aE as PalbasePushClient, aF as PalbasePushSendParams, aG as PalbasePushSendResponse, aH as PalbaseQrCodeOptions, aI as PalbaseQuerySnapshot, aJ as PalbaseRegisterDeviceParams, aK as PalbaseResult, aL as PalbaseRetentionQueryInput, aM as PalbaseRetentionResult, aN as PalbaseSession, aO as PalbaseSetOverrideResult, aP as PalbaseSetOverridesResult, aQ as PalbaseSignedUrlResponse, aR as PalbaseSmsClient, aS as PalbaseSmsSendParams, aT as PalbaseSmsSendResponse, aU as PalbaseTransformOptions, aV as PalbaseUpdateLinkParams, aW as PalbaseUploadOptions, aX as PalbaseUser, aY as PalbaseUserDetailResult, aZ as PalbaseUsersQueryInput, a_ as PalbaseUsersResult, a$ as PalbaseVerifyRequestSignatureParams, b0 as PalbaseWhereOperator, b1 as TooManyRequests, b2 as TxClient, b3 as Unauthorized, b4 as defineMiddleware } from './endpoint-fW9yWla0.js';
3
3
  import { AsyncLocalStorage } from 'node:async_hooks';
4
- import { E as EnvTypedDatabase, S as SchemaDef } from './index-CArW1VMq.js';
5
- export { C as ColumnBuilder, a as ColumnDef, b as ColumnMap, c as ColumnType, d as EXTENSION_DEPENDENCIES, e as EnvServiceDatabase, f as EnvTables, g as EnvTypedTable, h as EnvTypedTx, I as InsertShape, O as OnDeleteAction, P as PALBASE_EXTENSIONS, i as PalbaseExtension, j as PolicyBuilder, k as PolicyCommand, l as PolicyDef, m as PolicyMode, R as RowShape, n as SchemaInput, T as TableDef, o as TableInput, p as TypedDB, q as TypedTable, r as TypedTx, s as boolean, t as defineSchema, u as enumType, v as integer, w as isPalbaseExtension, x as jsonb, y as makeTypedDB, z as policy, A as text, B as timestamp, D as uuid } from './index-CArW1VMq.js';
4
+ import { E as EnvTypedDatabase, S as SchemaDef } from './index-tudF0wAM.js';
5
+ export { C as ColumnBuilder, a as ColumnDef, b as ColumnMap, c as ColumnType, d as EXTENSION_DEPENDENCIES, e as EnvServiceDatabase, f as EnvTables, g as EnvTypedTable, h as EnvTypedTx, I as InsertShape, O as OnDeleteAction, P as PALBASE_EXTENSIONS, i as PalbaseExtension, j as PolicyBuilder, k as PolicyCommand, l as PolicyDef, m as PolicyMode, R as RawConstraintDef, n as RowShape, o as SchemaInput, T as TableDef, p as TableInput, q as TypedDB, r as TypedTable, s as TypedTx, t as boolean, u as defineSchema, v as enumType, w as integer, x as isPalbaseExtension, y as jsonb, z as makeTypedDB, A as policy, B as raw, D as text, F as timestamp, G as uuid } from './index-tudF0wAM.js';
6
6
  export { TableTypes, Tables } from './db/env.js';
7
7
  import { ZodTypeAny, z } from 'zod';
8
8
  export { z } from 'zod';
@@ -714,20 +714,18 @@ type ParameterDecorator$1 = (target: object, propertyKey: string | symbol, param
714
714
  * — the client cannot exceed what it declared.
715
715
  */
716
716
  interface UploadConfig {
717
- /** Target bucket NAME. MUST exist in `config/storage.ts` `defineStorage(...)`. */
718
- bucket: string;
719
- /**
720
- * Max object size in BYTES. Enforced twice: the authorize pre-flight rejects a
721
- * larger declared size, and the signed URL pins it so storage rejects a larger
722
- * PUT. When omitted, the bucket's own `fileSizeLimit` applies.
723
- */
724
- maxSize?: number;
725
717
  /**
726
- * MIME allowlist for the object. The authorize pre-flight rejects a
727
- * non-matching declared content-type, and the signed URL pins the exact type.
728
- * When omitted, the bucket's own `allowedMimeTypes` applies (or any type).
718
+ * Target bucket NAME. MUST exist in `config/storage.ts` `defineStorage(...)`.
719
+ *
720
+ * The bucket is the SINGLE SOURCE OF TRUTH for the size limit + MIME allowlist:
721
+ * `bucket({ fileSizeLimit, allowedMimeTypes })`. Storage enforces those at the
722
+ * actual PUT (the only guard a client cannot skip), so `@Upload` deliberately
723
+ * does NOT take its own `maxSize`/`allowedTypes` — duplicating them here would
724
+ * let a route declare a tighter limit than its bucket that storage would not
725
+ * enforce (a real bypass: declare 10 bytes at authorize, then PUT up to the
726
+ * bucket ceiling straight at the signed URL). One bucket, one limit, enforced.
729
727
  */
730
- allowedTypes?: string[];
728
+ bucket: string;
731
729
  /**
732
730
  * SERVER-side object key template. The client NEVER chooses the path. Tokens:
733
731
  * `{userId}` (authenticated user id), `{uploadId}` (server-minted), and
@@ -742,9 +740,10 @@ interface UploadConfig {
742
740
  * guard + signed-URL pinning.
743
741
  *
744
742
  * @example
745
- * @Upload("/", { bucket: "docs", maxSize: 25 * 1024 * 1024,
746
- * allowedTypes: ["application/pdf"], pathTemplate: "{userId}/{uploadId}-{filename}" })
743
+ * @Upload("/", { bucket: "docs", pathTemplate: "{userId}/{uploadId}-{filename}" })
747
744
  * async upload(@UploadedObject() obj: UploadedObject, @User() user): Promise<DocResult> { ... }
745
+ * // The size limit + MIME allowlist come from the "docs" bucket in
746
+ * // config/storage.ts — storage enforces them at the PUT.
748
747
  */
749
748
  declare function Upload(subpath: string, config: UploadConfig & Pick<RouteOptions, "auth" | "rateLimit">): MethodDecorator$1;
750
749
  /**
@@ -777,10 +776,13 @@ interface UploadedObject {
777
776
  declare function UploadedObject(): ParameterDecorator$1;
778
777
  /**
779
778
  * Cross-check one `@Upload` route's uploadConfig against the project's
780
- * {@link StorageConfig}: the bucket must exist, the upload's `maxSize` must not
781
- * exceed the bucket's `fileSizeLimit`, and the upload's `allowedTypes` must be a
782
- * subset of the bucket's `allowedMimeTypes`. Throws a precise error so a
783
- * mismatch fails at deploy, not at the first user upload.
779
+ * {@link StorageConfig}: the named bucket MUST exist in `defineStorage(...)`.
780
+ * Throws a precise error so a typo fails at deploy, not at the first user upload.
781
+ *
782
+ * That is the ONLY cross-check: the size limit + MIME allowlist live on the
783
+ * bucket (`bucket({ fileSizeLimit, allowedMimeTypes })`) and are enforced by
784
+ * storage at the PUT. `@Upload` carries no `maxSize`/`allowedTypes` of its own,
785
+ * so there is nothing to compare — one bucket, one limit, no drift.
784
786
  *
785
787
  * `routeLabel` is used only for error messages (e.g. `docs.upload`).
786
788
  */
package/dist/index.js CHANGED
@@ -25,10 +25,11 @@ import {
25
25
  jsonb,
26
26
  makeTypedDB,
27
27
  policy,
28
+ raw,
28
29
  text,
29
30
  timestamp,
30
31
  uuid
31
- } from "./chunk-2N4YNN6F.js";
32
+ } from "./chunk-FIB3SBVQ.js";
32
33
 
33
34
  // src/db/env-gen.ts
34
35
  function baseTsType(def) {
@@ -476,7 +477,6 @@ var Patch = makeMethodDecorator("PATCH");
476
477
  var Delete = makeMethodDecorator("DELETE");
477
478
 
478
479
  // src/decorators/upload.ts
479
- var MIME_RE2 = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*\/[A-Za-z0-9*][A-Za-z0-9!#$&^_.+-]*$/;
480
480
  function Upload(subpath, config) {
481
481
  const { auth: auth2, rateLimit, ...uploadConfig } = config;
482
482
  validateUploadConfigShape(uploadConfig);
@@ -507,21 +507,6 @@ function validateUploadConfigShape(c) {
507
507
  if (typeof c.pathTemplate !== "string" || c.pathTemplate.length === 0) {
508
508
  throw new Error("@Upload config.pathTemplate must be a non-empty key template");
509
509
  }
510
- if (c.maxSize !== void 0) {
511
- if (!Number.isInteger(c.maxSize) || c.maxSize <= 0) {
512
- throw new Error(`@Upload config.maxSize must be a positive integer byte count, got ${c.maxSize}`);
513
- }
514
- }
515
- if (c.allowedTypes !== void 0) {
516
- if (!Array.isArray(c.allowedTypes) || c.allowedTypes.length === 0) {
517
- throw new Error("@Upload config.allowedTypes must be a non-empty array of MIME types when present");
518
- }
519
- for (const t of c.allowedTypes) {
520
- if (typeof t !== "string" || !MIME_RE2.test(t.trim())) {
521
- throw new Error(`@Upload config.allowedTypes entry "${t}" is not a valid MIME type (e.g. "image/png")`);
522
- }
523
- }
524
- }
525
510
  }
526
511
  function validateUploadAgainstStorage(uploadConfig, storage2, routeLabel) {
527
512
  const def = storage2.buckets[uploadConfig.bucket];
@@ -531,28 +516,6 @@ function validateUploadAgainstStorage(uploadConfig, storage2, routeLabel) {
531
516
  `@Upload route ${routeLabel} targets bucket "${uploadConfig.bucket}" which is not declared in defineStorage(...). ` + (known.length ? `Known buckets: ${known.join(", ")}.` : "No buckets are declared.")
532
517
  );
533
518
  }
534
- if (uploadConfig.maxSize !== void 0 && def.fileSizeLimit !== null && uploadConfig.maxSize > def.fileSizeLimit) {
535
- throw new Error(
536
- `@Upload route ${routeLabel} maxSize (${uploadConfig.maxSize} bytes) exceeds bucket "${uploadConfig.bucket}" fileSizeLimit (${def.fileSizeLimit} bytes)`
537
- );
538
- }
539
- if (uploadConfig.allowedTypes !== void 0 && def.allowedMimeTypes !== null) {
540
- const bucketAllows = (mime) => def.allowedMimeTypes.some((b) => {
541
- if (b === mime) return true;
542
- const slash = b.indexOf("/");
543
- if (slash > 0 && b.slice(slash + 1) === "*") {
544
- return mime.startsWith(b.slice(0, slash + 1));
545
- }
546
- return false;
547
- });
548
- for (const t of uploadConfig.allowedTypes) {
549
- if (!bucketAllows(t)) {
550
- throw new Error(
551
- `@Upload route ${routeLabel} allows MIME "${t}" which bucket "${uploadConfig.bucket}" does not (bucket allows: ${def.allowedMimeTypes.join(", ")})`
552
- );
553
- }
554
- }
555
- }
556
519
  }
557
520
 
558
521
  // src/decorators/params.ts
@@ -1169,6 +1132,7 @@ export {
1169
1132
  makeTypedDB,
1170
1133
  parseFileSizeLimit,
1171
1134
  policy,
1135
+ raw,
1172
1136
  recordThrows,
1173
1137
  reservedSecretKey,
1174
1138
  storage,