/**
 * Nominally-typed primitive types.
 *
 * See:
 * - https://basarat.gitbook.io/typescript/main-1/nominaltyping#using-interfaces
 * - https://github.com/Microsoft/TypeScript/blob/7b48a182c05ea4dea81bab73ecbbe9e013a79e99/src/compiler/types.ts#L693-L698
 */
import { Opaque } from "ts-essentials";
export declare type AscDesc = "asc" | "desc";
export declare function maybe<A, B>(box: (value: B) => A, value: B | undefined): A | undefined;
export declare type OriginRequestPath = Opaque<string, "OriginRequestPath">;
export declare function OriginRequestPath(value: string): OriginRequestPath;
export declare type OriginRequestTransformationHeaderValue = Opaque<string, "OriginRequestTransformationHeaderValue">;
export declare function OriginRequestTransformationHeaderValue(value: string): OriginRequestTransformationHeaderValue;
export declare type TransformationRootPath = Opaque<string, "TransformationRootPath">;
export declare function TransformationRootPath(value: string): TransformationRootPath;
export declare type OrganizationName = Opaque<string, "OrganizationName">;
export declare function OrganizationName(value: string): OrganizationName;
export declare type DepartmentName = Opaque<string, "DepartmentName">;
export declare function DepartmentName(value: string): DepartmentName;
export declare type AccountId = Opaque<string, "AccountId">;
export declare function AccountId(value: string): AccountId;
export declare type FileId = Opaque<string, "FileId">;
export declare function FileId(value: string): FileId;
export declare type UserId = Opaque<string, "UserId">;
export declare function UserId(value: string): UserId;
export declare type FileListShard = Opaque<number, "FileListShard">;
export declare function FileListShard(value: number): FileListShard;
export declare type FileListShardCount = Opaque<number, "FileListShardCount">;
export declare function FileListShardCount(value: number): FileListShardCount;
export declare type FileEventShard = Opaque<number, "FileEventShard">;
export declare function FileEventShard(value: number): FileEventShard;
export declare type FileEventShardCount = Opaque<number, "FileEventShardCount">;
export declare function FileEventShardCount(value: number): FileEventShardCount;
export declare type EventType = Opaque<string, "EventType">;
export declare function EventType(value: string): EventType;
export declare type UploadPartIndex = Opaque<number, "UploadPartIndex">;
export declare function UploadPartIndex(value: number): UploadPartIndex;
export declare type ArtifactPath = Opaque<string, "ArtifactPath">;
export declare function ArtifactPath(value: string): ArtifactPath;
export declare type RequestId = Opaque<string, "RequestId">;
export declare function RequestId(value: string): RequestId;
export declare type TransformationFunctionId = Opaque<string, "TransformationFunctionId">;
export declare function TransformationFunctionId(value: string): TransformationFunctionId;
export declare type TrustZoneId = Opaque<string, "TrustZoneId">;
export declare function TrustZoneId(value: string): TrustZoneId;
export declare type LambdaFunctionName = Opaque<string, "LambdaFunctionName">;
export declare function LambdaFunctionName(value: string): LambdaFunctionName;
export declare type NpmPackageName = Opaque<string, "NpmPackageName">;
export declare function NpmPackageName(value: string): NpmPackageName;
export declare type NpmPackageVersion = Opaque<string, "NpmPackageVersion">;
export declare function NpmPackageVersion(value: string): NpmPackageVersion;
export declare type NpmUsername = Opaque<string, "NpmUsername">;
export declare function NpmUsername(value: string): NpmUsername;
export declare type CacheKey = Opaque<string, "CacheKey">;
export declare function CacheKey(value: string): CacheKey;
export declare type Stage = Opaque<string, "Stage">;
export declare function Stage(value: string): Stage;
export declare type RoleArn = Opaque<string, "RoleArn">;
export declare function RoleArn(value: string): RoleArn;
export declare type DynamoDBTableName = Opaque<string, "DynamoDBTableName">;
export declare function DynamoDBTableName(value: string): DynamoDBTableName;
export declare type KinesisShardId = Opaque<string, "KinesisShardId">;
export declare function KinesisShardId(value: string): KinesisShardId;
export declare type KinesisPartitionKey = Opaque<string, "KinesisPartitionKey">;
export declare function KinesisPartitionKey(value: string): KinesisPartitionKey;
export declare type KinesisStreamName = Opaque<string, "KinesisStreamName">;
export declare function KinesisStreamName(value: string): KinesisStreamName;
export declare type AwsRegion = Opaque<string, "AwsRegion">;
export declare function AwsRegion(value: string): AwsRegion;
export declare type AwsAccessKey = Opaque<string, "AwsAccessKey">;
export declare function AwsAccessKey(value: string): AwsAccessKey;
export declare type AwsSecretKey = Opaque<string, "AwsSecretKey">;
export declare function AwsSecretKey(value: string): AwsSecretKey;
export declare type S3BucketName = Opaque<string, "S3BucketName">;
export declare function S3BucketName(value: string): S3BucketName;
export declare type CognitoUserPoolId = Opaque<string, "CognitoUserPoolId">;
export declare function CognitoUserPoolId(value: string): CognitoUserPoolId;
export declare type CognitoUserPoolClientId = Opaque<string, "CognitoUserPoolClientId">;
export declare function CognitoUserPoolClientId(value: string): CognitoUserPoolClientId;
export declare type EventId = Opaque<string, "EventId">;
export declare function EventId(value: string): EventId;
/**
 * Reflects the order in which an event was published onto a stream. Any two events can be causally ordered based on
 * this number (unlike the event ID, which is granular only down to millisecond-level, and may drift between servers).
 * We store as 'string' instead of 'BigInt' since the latter causes serialization issues in various libraries (e.g. Pino
 * and possibly DynamoDB)... **but for comparison between serial numbers you should first convert to BigInt**
 */
export declare type EventSequenceNumber = Opaque<string, "EventSequenceNumber">;
export declare function EventSequenceNumber(value: string): EventSequenceNumber;
export declare type UploadedFileName = Opaque<string, "UploadedFileName">;
export declare function UploadedFileName(value: string): UploadedFileName;
export declare type S3ObjectKey = Opaque<string, "S3ObjectKey">;
export declare function S3ObjectKey(value: string): S3ObjectKey;
export declare type S3MultipartUploadId = Opaque<string, "S3MultipartUploadId">;
export declare function S3MultipartUploadId(value: string): S3MultipartUploadId;
/**
 * ETags are always wrapped in quotes (https://tools.ietf.org/html/rfc2616#section-14.19). However, we don't enforce
 * this and we don't inspect this. In this codebase, ETags are always given to us by S3: we don't try to remove these
 * quotes to save 4 characters of storage per file (since in JSON this serializes to "\"xyz\"") because unwrapping and
 * then re-wrapping again (for the call back to S3) creates a larger surface area for bugs: we simply tunnel what S3
 * provides to the client, to our API, then to S3 again from the API's side, as a blackbox parameter.
 */
export declare type ETag = Opaque<string, "ETag">;
export declare function ETag(value: string): ETag;
export declare type Url = Opaque<string, "Url">;
export declare function Url(value: string): Url;
export declare type EmailAddress = Opaque<string, "EmailAddress">;
export declare function EmailAddress(value: string): EmailAddress;
export declare type FirstName = Opaque<string, "FirstName">;
export declare function FirstName(value: string): FirstName;
export declare type LastName = Opaque<string, "LastName">;
export declare function LastName(value: string): LastName;
export declare type FilePath = Opaque<string, "FilePath">;
export declare function FilePath(value: string): FilePath;
export declare type Seconds = Opaque<number, "Seconds">;
export declare function Seconds(value: number): Seconds;
export declare type Milliseconds = Opaque<number, "Milliseconds">;
export declare function Milliseconds(value: number): Milliseconds;
export declare type DistributedLockId = Opaque<string, "DistributedLockId">;
export declare function DistributedLockId(value: string): DistributedLockId;
export declare type DistributedLockOwner = Opaque<string, "DistributedLockOwner">;
export declare function DistributedLockOwner(value: string): DistributedLockOwner;
export declare type TransformationDefinitionId = Opaque<string, "TransformationDefinitionId">;
export declare function TransformationDefinitionId(value: string): TransformationDefinitionId;
export declare type TransformationDescription = Opaque<string, "TransformationDescription">;
export declare function TransformationDescription(value: string): TransformationDescription;
export declare type TransformationUrlSlug = Opaque<string, "TransformationUrlSlug">;
export declare function TransformationUrlSlug(value: string): TransformationUrlSlug;
export declare type TransformationMimeScope = Opaque<string, "TransformationMimeScope">;
export declare function TransformationMimeScope(value: string): TransformationMimeScope;
export declare type TransformationTagScope = Opaque<string, "TransformationTagScope">;
export declare function TransformationTagScope(value: string): TransformationTagScope;
export declare type MimeType = Opaque<string, "MimeType">;
export declare function MimeType(value: string): MimeType;
export declare type FileTag = Opaque<string, "FileTag">;
export declare function FileTag(value: string): FileTag;
export declare type SizeInBytes = Opaque<number, "SizeInBytes">;
export declare function SizeInBytes(value: number): SizeInBytes;
/**
 * An 'object author' is the name of the application that created/updated the object.
 */
export declare type ApplicationName = Opaque<string, "ApplicationName">;
export declare function ApplicationName(value: string): ApplicationName;
/**
 * An 'object author version' is the version the author application was at (see above) when it performed the create/update.
 */
export declare type ApplicationVersion = SemanticVersion;
export declare type SemanticVersion = Opaque<string, "SemanticVersion">;
export declare function SemanticVersion(value: string): SemanticVersion;
export declare type ObjectVersion = Opaque<number, "ObjectVersion">;
export declare function ObjectVersion(value: number): ObjectVersion;
export declare function ObjectVersionInc(value: ObjectVersion): ObjectVersion;
export declare type EpochMillis = Opaque<number, "EpochMillis">;
export declare function EpochMillis(value: number): EpochMillis;
export declare type EpochSeconds = Opaque<number, "EpochSeconds">;
export declare function EpochSeconds(value: number): EpochSeconds;
export declare type PageSize = Opaque<number, "PageSize">;
export declare function PageSize(value: number): PageSize;
export declare type ContinuationToken = Opaque<string, "ContinuationToken">;
export declare function ContinuationToken(value: string): ContinuationToken;
/**
 * This is typically a user ID in the user's system. We just store whatever they provide: it's for the user's
 * organisation of their files only. The uploader ID does not correspond to a user ID in our system.
 */
export declare type CustomUserId = Opaque<string, "CustomUserId">;
export declare function CustomUserId(value: string): CustomUserId;
export declare type ApiKeyDescription = Opaque<string, "ApiKeyDescription">;
export declare function ApiKeyDescription(value: string): ApiKeyDescription;
export declare type PublicApiKey = Opaque<string, "PublicApiKey">;
export declare function PublicApiKey(value: string): PublicApiKey;
export declare type SecretApiKey = Opaque<string, "SecretApiKey">;
export declare function SecretApiKey(value: string): SecretApiKey;
export declare type DomainName = Opaque<string, "DomainName">;
export declare function DomainName(value: string): DomainName;
export declare type PluginDescription = Opaque<string, "PluginDescription">;
export declare function PluginDescription(value: string): PluginDescription;
export declare type TemplateCategory = Opaque<string, "TemplateCategory">;
export declare function TemplateCategory(value: string): TemplateCategory;
export declare type TemplateDescription = Opaque<string, "TemplateDescription">;
export declare function TemplateDescription(value: string): TemplateDescription;
export declare type TemplateParamDefault = Opaque<string, "TemplateParamDefault">;
export declare function TemplateParamDefault(value: string): TemplateParamDefault;
export declare type TemplateParamDescription = Opaque<string, "TemplateParamDescription">;
export declare function TemplateParamDescription(value: string): TemplateParamDescription;
export declare type TemplateParamLabel = Opaque<string, "TemplateParamLabel">;
export declare function TemplateParamLabel(value: string): TemplateParamLabel;
export declare type TemplateParamPlaceholder = Opaque<string, "TemplateParamPlaceholder">;
export declare function TemplateParamPlaceholder(value: string): TemplateParamPlaceholder;
