@palbase/backend 8.0.0 → 8.2.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
- 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-cDQyI6jH.cjs';
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 PalbaseCmsClient, V as PalbaseCmsFindOneOptions, W as PalbaseCmsFindOptions, X as PalbaseCohortQueryInput, Y as PalbaseCohortResult, Z as PalbaseCollectionRef, _ as PalbaseCountQueryInput, $ as PalbaseCountResult, a0 as PalbaseCreateLinkParams, a1 as PalbaseDeviceInfo, a2 as PalbaseDeviceTokenView, a3 as PalbaseDocumentRef, a4 as PalbaseDocumentSnapshot, a5 as PalbaseEmailClient, a6 as PalbaseEmailSendParams, a7 as PalbaseEmailSendResponse, a8 as PalbaseEventNamesResult, a9 as PalbaseEventsQueryInput, aa as PalbaseEventsResult, ab as PalbaseFileObject, ac as PalbaseFlag, ad as PalbaseFlagContext, ae as PalbaseFlagSource, af as PalbaseFlagValue, ag as PalbaseFlagVariant, ah as PalbaseFlagsServiceClient, ai as PalbaseFunctionsClient, aj as PalbaseFunnelQueryInput, ak as PalbaseFunnelResult, al as PalbaseIdentifyTraits, am as PalbaseInboxClient, an as PalbaseInboxListOptions, ao as PalbaseInboxListResult, ap as PalbaseInboxMessage, aq as PalbaseInboxSendParams, ar as PalbaseInboxSendResponse, as as PalbaseInitialLink, at as PalbaseInvokeOptions, au as PalbaseLink, av as PalbaseLinkAnalytics, aw as PalbaseLinkDetails, ax as PalbaseLinksClient, ay as PalbaseListLinksOptions, az as PalbaseListLinksResult, aA as PalbaseListOptions, aB as PalbaseMatchParams, aC as PalbaseMultiChannelResponse, aD as PalbaseOverviewResult, aE as PalbasePreferences, aF as PalbasePreferencesClient, aG as PalbasePublicUrlResponse, aH as PalbasePushClient, aI as PalbasePushSendParams, aJ as PalbasePushSendResponse, aK as PalbaseQrCodeOptions, aL as PalbaseQuerySnapshot, aM as PalbaseRegisterDeviceParams, aN as PalbaseResult, aO as PalbaseRetentionQueryInput, aP as PalbaseRetentionResult, aQ as PalbaseSession, aR as PalbaseSetOverrideResult, aS as PalbaseSetOverridesResult, aT as PalbaseSignedUrlResponse, aU as PalbaseSmsClient, aV as PalbaseSmsSendParams, aW as PalbaseSmsSendResponse, aX as PalbaseTransformOptions, aY as PalbaseUpdateLinkParams, aZ as PalbaseUploadOptions, a_ as PalbaseUser, a$ as PalbaseUserDetailResult, b0 as PalbaseUsersQueryInput, b1 as PalbaseUsersResult, b2 as PalbaseVerifyRequestSignatureParams, b3 as PalbaseWhereOperator, b4 as TooManyRequests, b5 as TxClient, b6 as Unauthorized, b7 as defineMiddleware } from './endpoint-cDQyI6jH.cjs';
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
+ 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-B-FNCK84.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-B-FNCK84.cjs';
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';
6
6
  export { TableTypes, Tables } from './db/env.cjs';
7
7
  import { ZodTypeAny, z } from 'zod';
8
8
  export { z } from 'zod';
@@ -53,7 +53,7 @@ export { z } from 'zod';
53
53
  * Realtime is BROADCAST-ONLY here (a stateless handler can push an event but
54
54
  * cannot hold a subscription socket — `subscribe()` lives on the client SDK).
55
55
  *
56
- * EXCLUDED on purpose: Functions, CMS, Links, Analytics, Auth. They are not
56
+ * EXCLUDED on purpose: Functions, Links, Analytics, Auth. They are not
57
57
  * exposed as backend handler singletons (auth lives on the client SDK; the rest
58
58
  * are out of scope for backend endpoints). */
59
59
  interface RuntimeServices {
@@ -702,6 +702,92 @@ interface ControllerOptions {
702
702
  */
703
703
  declare function Controller(basePath: string, options?: ControllerOptions): <T extends abstract new (...args: never[]) => object>(ctor: T) => T;
704
704
 
705
+ /** A legacy method decorator (`experimentalDecorators`): `(prototype, name,
706
+ * descriptor)`. */
707
+ type MethodDecorator$1 = (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
708
+ /** A legacy parameter decorator: `(prototype, name, paramIndex)`. */
709
+ type ParameterDecorator$1 = (target: object, propertyKey: string | symbol, parameterIndex: number) => void;
710
+ /**
711
+ * Direct-storage upload settings for an `@Upload` route. The br-pod validates an
712
+ * authorize request against these (size/type), then mints a signed upload URL
713
+ * that PINS the limits so storage itself rejects an over-limit / wrong-type PUT
714
+ * — the client cannot exceed what it declared.
715
+ */
716
+ interface UploadConfig {
717
+ /**
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.
727
+ */
728
+ bucket: string;
729
+ /**
730
+ * SERVER-side object key template. The client NEVER chooses the path. Tokens:
731
+ * `{userId}` (authenticated user id), `{uploadId}` (server-minted), and
732
+ * `{filename}` (the client-declared filename, sanitized). e.g.
733
+ * `"{userId}/{uploadId}-{filename}"`.
734
+ */
735
+ pathTemplate: string;
736
+ }
737
+ /**
738
+ * `@Upload(subpath, config)` — declare a direct-storage upload route. The method
739
+ * body is the completion handler; `config.uploadConfig` drives the authorize
740
+ * guard + signed-URL pinning.
741
+ *
742
+ * @example
743
+ * @Upload("/", { bucket: "docs", pathTemplate: "{userId}/{uploadId}-{filename}" })
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.
747
+ */
748
+ declare function Upload(subpath: string, config: UploadConfig & Pick<RouteOptions, "auth" | "rateLimit">): MethodDecorator$1;
749
+ /**
750
+ * The uploaded object, injected into an `@Upload` method body by
751
+ * `@UploadedObject()` once storage confirms the upload. Bytes are NOT present
752
+ * (they went straight to storage) — this is the metadata the completion handler
753
+ * persists.
754
+ */
755
+ interface UploadedObject {
756
+ /** Server-minted id correlating authorize ↔ completion (idempotency key). */
757
+ uploadId: string;
758
+ /** Final object key in the bucket (rendered from `pathTemplate`). */
759
+ path: string;
760
+ /** Bucket the object landed in. */
761
+ bucket: string;
762
+ /** Object size in bytes, as reported by storage. */
763
+ size: number;
764
+ /** Object MIME type, as reported by storage. */
765
+ contentType: string;
766
+ }
767
+ /**
768
+ * `@UploadedObject()` — inject the uploaded object (`: UploadedObject`) into an
769
+ * `@Upload` method body (the completion input). Only valid on an `@Upload`
770
+ * route; the bytes are NOT present (they went directly to storage), this is the
771
+ * confirmed object's metadata.
772
+ *
773
+ * Co-located with the {@link UploadedObject} TYPE so a single exported name
774
+ * `UploadedObject` carries BOTH the decorator value and the type annotation.
775
+ */
776
+ declare function UploadedObject(): ParameterDecorator$1;
777
+ /**
778
+ * Cross-check one `@Upload` route's uploadConfig against the project's
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.
786
+ *
787
+ * `routeLabel` is used only for error messages (e.g. `docs.upload`).
788
+ */
789
+ declare function validateUploadAgainstStorage(uploadConfig: UploadConfig, storage: StorageConfig, routeLabel: string): void;
790
+
705
791
  /** The HTTP verbs a route may declare, upper-cased (the runtime router +
706
792
  * OpenAPI lower-case on their own). */
707
793
  type HttpMethodUpper = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
@@ -711,6 +797,12 @@ interface RouteOptions {
711
797
  auth?: AuthSpec;
712
798
  /** Per-route rate limit. */
713
799
  rateLimit?: RateLimitConfig;
800
+ /** Direct-storage upload config — present ONLY on `@Upload` routes (the
801
+ * `@Get`/`@Post`/… decorators never set it). Its presence is what MARKS a
802
+ * route as an upload route through the whole pipeline (registry → flatten →
803
+ * openapi → codegen). The bytes go client→storage directly; the method body
804
+ * runs as the completion handler. See {@link UploadConfig} (decorators/upload.ts). */
805
+ uploadConfig?: UploadConfig;
714
806
  }
715
807
  /** One inferred throw site: the error CLASS name (e.g. "TodoLocked") and its
716
808
  * wire code (e.g. "todo_locked"). `status`, `hasData`, and the data JSON schema
@@ -1260,4 +1352,4 @@ declare const documents: {
1260
1352
  onDocumentDeleted(handler: HookHandler<DocumentDeletedEvent>): ResolvedHook<DocumentDeletedEvent>;
1261
1353
  };
1262
1354
 
1263
- export { type AcsOptions, type ApnsOptions, type BackoffStrategy, Body, type BucketDef, type BucketOptions, Cache, CacheClient, Client, Controller, type ControllerOptions, type CustomWebhookConfig, DBClient, Database, type DefinedError, type DefinedErrorWithData, Delete, type DocumentCreatedEvent, type DocumentDeletedEvent, type DocumentUpdatedEvent, Documents, type EnvSecretRef, EnvTypedDatabase, FLAGS_CONFIG_KIND, type FcmOptions, type FileDeletedEvent, type FileUploadedEvent, type FlagDef, type FlagOptions, type FlagType, type FlagValue, Flags, type FlagsConfig, type FlagsInput, Get, Headers, type HookHandler, type HookMeta, HttpError, type HttpMethodUpper, type JobConfig, type JobMeta, Log, Logger, NOTIFICATIONS_CONFIG_KIND, Notifications, type NotificationsConfig, type NotificationsInput, OptionalUser, PROVIDER_CATALOG, PalbaseDocsClient, PalbaseFlagsClient, PalbaseNotificationsClient, PalbaseRealtimeClient, PalbaseStorageClient, Param, type PasswordResetEvent, Patch, Post, type ProviderCatalogEntry, type ProviderDef, type ProviderEventMap, type ProviderName, type ProviderOptions, type ProviderWebhookConfig, Put, Query, Queue, QueueClient, RESERVED_SECRET_PREFIX, RateLimitConfig, Realtime, type RegisteredError, Req, RequestId, type ResolvedCustomWebhook, type ResolvedHook, type ResolvedJobConfig, type ResolvedProviderWebhook, type ResolvedWebhookConfig, type ResolvedWorkerConfig, Resource, type ResourceEnv, type RouteOptions, type RuntimeServices, STORAGE_CONFIG_KIND, SchemaDef, type SendgridOptions, type SesOptions, type SignInEvent, type SignOutEvent, type SmtpOptions, Storage, type StorageConfig, type StorageInput, type ThrowDescriptor, TraceId, type TwilioOptions, User, type UserCreatedEvent, User$1 as UserT, type WebhookEventHandler, type WebhookMeta, type WebhookProvider, type WebhookRequest, type WorkerConfig, type WorkerMeta, __getRuntime, __registerResource, __requestALS, __runResourceBoot, __runWithRuntime, __setRuntime, __shutdownResources, auth, bucket, buildProvider, defineError, defineFlags, defineJob, defineNotifications, defineStorage, defineWebhook, defineWorker, documents, flag, getErrorRegistry, makeEnvDts, parseFileSizeLimit, recordThrows, reservedSecretKey, storage };
1355
+ export { type AcsOptions, type ApnsOptions, type BackoffStrategy, Body, type BucketDef, type BucketOptions, Cache, CacheClient, Client, Controller, type ControllerOptions, type CustomWebhookConfig, DBClient, Database, type DefinedError, type DefinedErrorWithData, Delete, type DocumentCreatedEvent, type DocumentDeletedEvent, type DocumentUpdatedEvent, Documents, type EnvSecretRef, EnvTypedDatabase, FLAGS_CONFIG_KIND, type FcmOptions, type FileDeletedEvent, type FileUploadedEvent, type FlagDef, type FlagOptions, type FlagType, type FlagValue, Flags, type FlagsConfig, type FlagsInput, Get, Headers, type HookHandler, type HookMeta, HttpError, type HttpMethodUpper, type JobConfig, type JobMeta, Log, Logger, NOTIFICATIONS_CONFIG_KIND, Notifications, type NotificationsConfig, type NotificationsInput, OptionalUser, PROVIDER_CATALOG, PalbaseDocsClient, PalbaseFlagsClient, PalbaseNotificationsClient, PalbaseRealtimeClient, PalbaseStorageClient, Param, type PasswordResetEvent, Patch, Post, type ProviderCatalogEntry, type ProviderDef, type ProviderEventMap, type ProviderName, type ProviderOptions, type ProviderWebhookConfig, Put, Query, Queue, QueueClient, RESERVED_SECRET_PREFIX, RateLimitConfig, Realtime, type RegisteredError, Req, RequestId, type ResolvedCustomWebhook, type ResolvedHook, type ResolvedJobConfig, type ResolvedProviderWebhook, type ResolvedWebhookConfig, type ResolvedWorkerConfig, Resource, type ResourceEnv, type RouteOptions, type RuntimeServices, STORAGE_CONFIG_KIND, SchemaDef, type SendgridOptions, type SesOptions, type SignInEvent, type SignOutEvent, type SmtpOptions, Storage, type StorageConfig, type StorageInput, type ThrowDescriptor, TraceId, type TwilioOptions, Upload, type UploadConfig, UploadedObject, User, type UserCreatedEvent, User$1 as UserT, type WebhookEventHandler, type WebhookMeta, type WebhookProvider, type WebhookRequest, type WorkerConfig, type WorkerMeta, __getRuntime, __registerResource, __requestALS, __runResourceBoot, __runWithRuntime, __setRuntime, __shutdownResources, auth, bucket, buildProvider, defineError, defineFlags, defineJob, defineNotifications, defineStorage, defineWebhook, defineWorker, documents, flag, getErrorRegistry, makeEnvDts, parseFileSizeLimit, recordThrows, reservedSecretKey, storage, validateUploadAgainstStorage };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
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-cDQyI6jH.js';
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 PalbaseCmsClient, V as PalbaseCmsFindOneOptions, W as PalbaseCmsFindOptions, X as PalbaseCohortQueryInput, Y as PalbaseCohortResult, Z as PalbaseCollectionRef, _ as PalbaseCountQueryInput, $ as PalbaseCountResult, a0 as PalbaseCreateLinkParams, a1 as PalbaseDeviceInfo, a2 as PalbaseDeviceTokenView, a3 as PalbaseDocumentRef, a4 as PalbaseDocumentSnapshot, a5 as PalbaseEmailClient, a6 as PalbaseEmailSendParams, a7 as PalbaseEmailSendResponse, a8 as PalbaseEventNamesResult, a9 as PalbaseEventsQueryInput, aa as PalbaseEventsResult, ab as PalbaseFileObject, ac as PalbaseFlag, ad as PalbaseFlagContext, ae as PalbaseFlagSource, af as PalbaseFlagValue, ag as PalbaseFlagVariant, ah as PalbaseFlagsServiceClient, ai as PalbaseFunctionsClient, aj as PalbaseFunnelQueryInput, ak as PalbaseFunnelResult, al as PalbaseIdentifyTraits, am as PalbaseInboxClient, an as PalbaseInboxListOptions, ao as PalbaseInboxListResult, ap as PalbaseInboxMessage, aq as PalbaseInboxSendParams, ar as PalbaseInboxSendResponse, as as PalbaseInitialLink, at as PalbaseInvokeOptions, au as PalbaseLink, av as PalbaseLinkAnalytics, aw as PalbaseLinkDetails, ax as PalbaseLinksClient, ay as PalbaseListLinksOptions, az as PalbaseListLinksResult, aA as PalbaseListOptions, aB as PalbaseMatchParams, aC as PalbaseMultiChannelResponse, aD as PalbaseOverviewResult, aE as PalbasePreferences, aF as PalbasePreferencesClient, aG as PalbasePublicUrlResponse, aH as PalbasePushClient, aI as PalbasePushSendParams, aJ as PalbasePushSendResponse, aK as PalbaseQrCodeOptions, aL as PalbaseQuerySnapshot, aM as PalbaseRegisterDeviceParams, aN as PalbaseResult, aO as PalbaseRetentionQueryInput, aP as PalbaseRetentionResult, aQ as PalbaseSession, aR as PalbaseSetOverrideResult, aS as PalbaseSetOverridesResult, aT as PalbaseSignedUrlResponse, aU as PalbaseSmsClient, aV as PalbaseSmsSendParams, aW as PalbaseSmsSendResponse, aX as PalbaseTransformOptions, aY as PalbaseUpdateLinkParams, aZ as PalbaseUploadOptions, a_ as PalbaseUser, a$ as PalbaseUserDetailResult, b0 as PalbaseUsersQueryInput, b1 as PalbaseUsersResult, b2 as PalbaseVerifyRequestSignatureParams, b3 as PalbaseWhereOperator, b4 as TooManyRequests, b5 as TxClient, b6 as Unauthorized, b7 as defineMiddleware } from './endpoint-cDQyI6jH.js';
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
+ 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-BfnIO5G-.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-BfnIO5G-.js';
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';
6
6
  export { TableTypes, Tables } from './db/env.js';
7
7
  import { ZodTypeAny, z } from 'zod';
8
8
  export { z } from 'zod';
@@ -53,7 +53,7 @@ export { z } from 'zod';
53
53
  * Realtime is BROADCAST-ONLY here (a stateless handler can push an event but
54
54
  * cannot hold a subscription socket — `subscribe()` lives on the client SDK).
55
55
  *
56
- * EXCLUDED on purpose: Functions, CMS, Links, Analytics, Auth. They are not
56
+ * EXCLUDED on purpose: Functions, Links, Analytics, Auth. They are not
57
57
  * exposed as backend handler singletons (auth lives on the client SDK; the rest
58
58
  * are out of scope for backend endpoints). */
59
59
  interface RuntimeServices {
@@ -702,6 +702,92 @@ interface ControllerOptions {
702
702
  */
703
703
  declare function Controller(basePath: string, options?: ControllerOptions): <T extends abstract new (...args: never[]) => object>(ctor: T) => T;
704
704
 
705
+ /** A legacy method decorator (`experimentalDecorators`): `(prototype, name,
706
+ * descriptor)`. */
707
+ type MethodDecorator$1 = (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
708
+ /** A legacy parameter decorator: `(prototype, name, paramIndex)`. */
709
+ type ParameterDecorator$1 = (target: object, propertyKey: string | symbol, parameterIndex: number) => void;
710
+ /**
711
+ * Direct-storage upload settings for an `@Upload` route. The br-pod validates an
712
+ * authorize request against these (size/type), then mints a signed upload URL
713
+ * that PINS the limits so storage itself rejects an over-limit / wrong-type PUT
714
+ * — the client cannot exceed what it declared.
715
+ */
716
+ interface UploadConfig {
717
+ /**
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.
727
+ */
728
+ bucket: string;
729
+ /**
730
+ * SERVER-side object key template. The client NEVER chooses the path. Tokens:
731
+ * `{userId}` (authenticated user id), `{uploadId}` (server-minted), and
732
+ * `{filename}` (the client-declared filename, sanitized). e.g.
733
+ * `"{userId}/{uploadId}-{filename}"`.
734
+ */
735
+ pathTemplate: string;
736
+ }
737
+ /**
738
+ * `@Upload(subpath, config)` — declare a direct-storage upload route. The method
739
+ * body is the completion handler; `config.uploadConfig` drives the authorize
740
+ * guard + signed-URL pinning.
741
+ *
742
+ * @example
743
+ * @Upload("/", { bucket: "docs", pathTemplate: "{userId}/{uploadId}-{filename}" })
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.
747
+ */
748
+ declare function Upload(subpath: string, config: UploadConfig & Pick<RouteOptions, "auth" | "rateLimit">): MethodDecorator$1;
749
+ /**
750
+ * The uploaded object, injected into an `@Upload` method body by
751
+ * `@UploadedObject()` once storage confirms the upload. Bytes are NOT present
752
+ * (they went straight to storage) — this is the metadata the completion handler
753
+ * persists.
754
+ */
755
+ interface UploadedObject {
756
+ /** Server-minted id correlating authorize ↔ completion (idempotency key). */
757
+ uploadId: string;
758
+ /** Final object key in the bucket (rendered from `pathTemplate`). */
759
+ path: string;
760
+ /** Bucket the object landed in. */
761
+ bucket: string;
762
+ /** Object size in bytes, as reported by storage. */
763
+ size: number;
764
+ /** Object MIME type, as reported by storage. */
765
+ contentType: string;
766
+ }
767
+ /**
768
+ * `@UploadedObject()` — inject the uploaded object (`: UploadedObject`) into an
769
+ * `@Upload` method body (the completion input). Only valid on an `@Upload`
770
+ * route; the bytes are NOT present (they went directly to storage), this is the
771
+ * confirmed object's metadata.
772
+ *
773
+ * Co-located with the {@link UploadedObject} TYPE so a single exported name
774
+ * `UploadedObject` carries BOTH the decorator value and the type annotation.
775
+ */
776
+ declare function UploadedObject(): ParameterDecorator$1;
777
+ /**
778
+ * Cross-check one `@Upload` route's uploadConfig against the project's
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.
786
+ *
787
+ * `routeLabel` is used only for error messages (e.g. `docs.upload`).
788
+ */
789
+ declare function validateUploadAgainstStorage(uploadConfig: UploadConfig, storage: StorageConfig, routeLabel: string): void;
790
+
705
791
  /** The HTTP verbs a route may declare, upper-cased (the runtime router +
706
792
  * OpenAPI lower-case on their own). */
707
793
  type HttpMethodUpper = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
@@ -711,6 +797,12 @@ interface RouteOptions {
711
797
  auth?: AuthSpec;
712
798
  /** Per-route rate limit. */
713
799
  rateLimit?: RateLimitConfig;
800
+ /** Direct-storage upload config — present ONLY on `@Upload` routes (the
801
+ * `@Get`/`@Post`/… decorators never set it). Its presence is what MARKS a
802
+ * route as an upload route through the whole pipeline (registry → flatten →
803
+ * openapi → codegen). The bytes go client→storage directly; the method body
804
+ * runs as the completion handler. See {@link UploadConfig} (decorators/upload.ts). */
805
+ uploadConfig?: UploadConfig;
714
806
  }
715
807
  /** One inferred throw site: the error CLASS name (e.g. "TodoLocked") and its
716
808
  * wire code (e.g. "todo_locked"). `status`, `hasData`, and the data JSON schema
@@ -1260,4 +1352,4 @@ declare const documents: {
1260
1352
  onDocumentDeleted(handler: HookHandler<DocumentDeletedEvent>): ResolvedHook<DocumentDeletedEvent>;
1261
1353
  };
1262
1354
 
1263
- export { type AcsOptions, type ApnsOptions, type BackoffStrategy, Body, type BucketDef, type BucketOptions, Cache, CacheClient, Client, Controller, type ControllerOptions, type CustomWebhookConfig, DBClient, Database, type DefinedError, type DefinedErrorWithData, Delete, type DocumentCreatedEvent, type DocumentDeletedEvent, type DocumentUpdatedEvent, Documents, type EnvSecretRef, EnvTypedDatabase, FLAGS_CONFIG_KIND, type FcmOptions, type FileDeletedEvent, type FileUploadedEvent, type FlagDef, type FlagOptions, type FlagType, type FlagValue, Flags, type FlagsConfig, type FlagsInput, Get, Headers, type HookHandler, type HookMeta, HttpError, type HttpMethodUpper, type JobConfig, type JobMeta, Log, Logger, NOTIFICATIONS_CONFIG_KIND, Notifications, type NotificationsConfig, type NotificationsInput, OptionalUser, PROVIDER_CATALOG, PalbaseDocsClient, PalbaseFlagsClient, PalbaseNotificationsClient, PalbaseRealtimeClient, PalbaseStorageClient, Param, type PasswordResetEvent, Patch, Post, type ProviderCatalogEntry, type ProviderDef, type ProviderEventMap, type ProviderName, type ProviderOptions, type ProviderWebhookConfig, Put, Query, Queue, QueueClient, RESERVED_SECRET_PREFIX, RateLimitConfig, Realtime, type RegisteredError, Req, RequestId, type ResolvedCustomWebhook, type ResolvedHook, type ResolvedJobConfig, type ResolvedProviderWebhook, type ResolvedWebhookConfig, type ResolvedWorkerConfig, Resource, type ResourceEnv, type RouteOptions, type RuntimeServices, STORAGE_CONFIG_KIND, SchemaDef, type SendgridOptions, type SesOptions, type SignInEvent, type SignOutEvent, type SmtpOptions, Storage, type StorageConfig, type StorageInput, type ThrowDescriptor, TraceId, type TwilioOptions, User, type UserCreatedEvent, User$1 as UserT, type WebhookEventHandler, type WebhookMeta, type WebhookProvider, type WebhookRequest, type WorkerConfig, type WorkerMeta, __getRuntime, __registerResource, __requestALS, __runResourceBoot, __runWithRuntime, __setRuntime, __shutdownResources, auth, bucket, buildProvider, defineError, defineFlags, defineJob, defineNotifications, defineStorage, defineWebhook, defineWorker, documents, flag, getErrorRegistry, makeEnvDts, parseFileSizeLimit, recordThrows, reservedSecretKey, storage };
1355
+ export { type AcsOptions, type ApnsOptions, type BackoffStrategy, Body, type BucketDef, type BucketOptions, Cache, CacheClient, Client, Controller, type ControllerOptions, type CustomWebhookConfig, DBClient, Database, type DefinedError, type DefinedErrorWithData, Delete, type DocumentCreatedEvent, type DocumentDeletedEvent, type DocumentUpdatedEvent, Documents, type EnvSecretRef, EnvTypedDatabase, FLAGS_CONFIG_KIND, type FcmOptions, type FileDeletedEvent, type FileUploadedEvent, type FlagDef, type FlagOptions, type FlagType, type FlagValue, Flags, type FlagsConfig, type FlagsInput, Get, Headers, type HookHandler, type HookMeta, HttpError, type HttpMethodUpper, type JobConfig, type JobMeta, Log, Logger, NOTIFICATIONS_CONFIG_KIND, Notifications, type NotificationsConfig, type NotificationsInput, OptionalUser, PROVIDER_CATALOG, PalbaseDocsClient, PalbaseFlagsClient, PalbaseNotificationsClient, PalbaseRealtimeClient, PalbaseStorageClient, Param, type PasswordResetEvent, Patch, Post, type ProviderCatalogEntry, type ProviderDef, type ProviderEventMap, type ProviderName, type ProviderOptions, type ProviderWebhookConfig, Put, Query, Queue, QueueClient, RESERVED_SECRET_PREFIX, RateLimitConfig, Realtime, type RegisteredError, Req, RequestId, type ResolvedCustomWebhook, type ResolvedHook, type ResolvedJobConfig, type ResolvedProviderWebhook, type ResolvedWebhookConfig, type ResolvedWorkerConfig, Resource, type ResourceEnv, type RouteOptions, type RuntimeServices, STORAGE_CONFIG_KIND, SchemaDef, type SendgridOptions, type SesOptions, type SignInEvent, type SignOutEvent, type SmtpOptions, Storage, type StorageConfig, type StorageInput, type ThrowDescriptor, TraceId, type TwilioOptions, Upload, type UploadConfig, UploadedObject, User, type UserCreatedEvent, User$1 as UserT, type WebhookEventHandler, type WebhookMeta, type WebhookProvider, type WebhookRequest, type WorkerConfig, type WorkerMeta, __getRuntime, __registerResource, __requestALS, __runResourceBoot, __runWithRuntime, __setRuntime, __shutdownResources, auth, bucket, buildProvider, defineError, defineFlags, defineJob, defineNotifications, defineStorage, defineWebhook, defineWorker, documents, flag, getErrorRegistry, makeEnvDts, parseFileSizeLimit, recordThrows, reservedSecretKey, storage, validateUploadAgainstStorage };
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@ import {
12
12
  __requestALS,
13
13
  __runWithRuntime,
14
14
  __setRuntime
15
- } from "./chunk-SWT2QR5F.js";
15
+ } from "./chunk-RGQUB66H.js";
16
16
  import {
17
17
  EXTENSION_DEPENDENCIES,
18
18
  PALBASE_EXTENSIONS,
@@ -475,6 +475,48 @@ var Put = makeMethodDecorator("PUT");
475
475
  var Patch = makeMethodDecorator("PATCH");
476
476
  var Delete = makeMethodDecorator("DELETE");
477
477
 
478
+ // src/decorators/upload.ts
479
+ function Upload(subpath, config) {
480
+ const { auth: auth2, rateLimit, ...uploadConfig } = config;
481
+ validateUploadConfigShape(uploadConfig);
482
+ const options = {
483
+ uploadConfig,
484
+ ...auth2 !== void 0 ? { auth: auth2 } : {},
485
+ ...rateLimit !== void 0 ? { rateLimit } : {}
486
+ };
487
+ return function(target, propertyKey) {
488
+ recordRoute(target, String(propertyKey), "POST", subpath, options);
489
+ };
490
+ }
491
+ function UploadedObject() {
492
+ return function(target, propertyKey, parameterIndex) {
493
+ recordParam(target, String(propertyKey), {
494
+ index: parameterIndex,
495
+ kind: "uploadedObject"
496
+ });
497
+ };
498
+ }
499
+ function validateUploadConfigShape(c) {
500
+ if (c === null || typeof c !== "object") {
501
+ throw new Error("@Upload config must be an object { bucket, pathTemplate, ... }");
502
+ }
503
+ if (typeof c.bucket !== "string" || c.bucket.length === 0) {
504
+ throw new Error("@Upload config.bucket must be a non-empty bucket name");
505
+ }
506
+ if (typeof c.pathTemplate !== "string" || c.pathTemplate.length === 0) {
507
+ throw new Error("@Upload config.pathTemplate must be a non-empty key template");
508
+ }
509
+ }
510
+ function validateUploadAgainstStorage(uploadConfig, storage2, routeLabel) {
511
+ const def = storage2.buckets[uploadConfig.bucket];
512
+ if (def === void 0) {
513
+ const known = Object.keys(storage2.buckets);
514
+ throw new Error(
515
+ `@Upload route ${routeLabel} targets bucket "${uploadConfig.bucket}" which is not declared in defineStorage(...). ` + (known.length ? `Known buckets: ${known.join(", ")}.` : "No buckets are declared.")
516
+ );
517
+ }
518
+ }
519
+
478
520
  // src/decorators/params.ts
479
521
  function makeParamDecorator(kind, extra) {
480
522
  return function(target, propertyKey, parameterIndex) {
@@ -1055,6 +1097,8 @@ export {
1055
1097
  TooManyRequests,
1056
1098
  TraceId,
1057
1099
  Unauthorized,
1100
+ Upload,
1101
+ UploadedObject,
1058
1102
  User,
1059
1103
  __getRuntime,
1060
1104
  __registerResource,
@@ -1093,6 +1137,7 @@ export {
1093
1137
  text,
1094
1138
  timestamp,
1095
1139
  uuid,
1140
+ validateUploadAgainstStorage,
1096
1141
  z2 as z
1097
1142
  };
1098
1143
  //# sourceMappingURL=index.js.map