@cirrobio/sdk 0.13.37 → 0.13.39
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.esm.js +28 -3
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -1
- package/dist/types/api/error.d.ts +2 -1
- package/dist/types/data/data.service.d.ts +13 -1
- package/package.json +1 -1
- package/src/api/error-handler.ts +1 -1
- package/src/api/error.ts +3 -1
- package/src/data/data.service.ts +36 -0
package/dist/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ProjectAccessType, Configuration, AuditApi, BillingApi, ComputeEnvironmentApi, DatasetsApi, ExecutionApi, FileApi, GovernanceApi, MetadataApi, ProcessesApi, ProjectRequestsApi, ProjectsApi, ReferencesApi, SharingApi, SystemApi, ToolsApi, UsersApi, WorkspacesApi } from '@cirrobio/api-client';
|
|
1
|
+
import { ProjectAccessType, Configuration, AppRegistrationsApi, AuditApi, BillingApi, ComputeEnvironmentApi, DashboardsApi, DatasetsApi, ExecutionApi, FeedApi, FileApi, GovernanceApi, MetadataApi, MetricsApi, ProcessesApi, ProjectRequestsApi, ProjectsApi, ReferencesApi, SharedFilesystemsApi, SharingApi, SheetsApi, SystemApi, ToolsApi, UsersApi, WorkspacesApi } from '@cirrobio/api-client';
|
|
2
2
|
import { S3Client, GetObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3';
|
|
3
3
|
import { getSignedUrl as getSignedUrl$1 } from '@aws-sdk/s3-request-presigner';
|
|
4
4
|
import { Upload } from '@aws-sdk/lib-storage';
|
|
@@ -620,9 +620,10 @@ function getParentPath(path) {
|
|
|
620
620
|
}
|
|
621
621
|
|
|
622
622
|
class ApiError extends Error {
|
|
623
|
-
constructor(message, errors) {
|
|
623
|
+
constructor(message, errors, errorCode) {
|
|
624
624
|
super(message);
|
|
625
625
|
this.errors = errors;
|
|
626
|
+
this.errorCode = errorCode;
|
|
626
627
|
}
|
|
627
628
|
}
|
|
628
629
|
|
|
@@ -649,7 +650,7 @@ class PortalErrorHandler {
|
|
|
649
650
|
catch (ignore) {
|
|
650
651
|
errorMessage = "Unknown Error";
|
|
651
652
|
}
|
|
652
|
-
throw new ApiError(errorMessage, errors);
|
|
653
|
+
throw new ApiError(errorMessage, errors, response.status);
|
|
653
654
|
}
|
|
654
655
|
}
|
|
655
656
|
|
|
@@ -698,24 +699,33 @@ class StaticTokenAuthProvider {
|
|
|
698
699
|
class DataService {
|
|
699
700
|
constructor({ tokenGetter, basePath = "/api" }) {
|
|
700
701
|
this.apiConfig = generateApiConfig({ basePath, tokenGetter });
|
|
702
|
+
this._appRegistrationsApi = new AppRegistrationsApi(this.apiConfig);
|
|
701
703
|
this._auditApi = new AuditApi(this.apiConfig);
|
|
702
704
|
this._billingApi = new BillingApi(this.apiConfig);
|
|
703
705
|
this._computeEnvironmentApi = new ComputeEnvironmentApi(this.apiConfig);
|
|
706
|
+
this._dashboardsApi = new DashboardsApi(this.apiConfig);
|
|
704
707
|
this._datasetsApi = new DatasetsApi(this.apiConfig);
|
|
705
708
|
this._executionApi = new ExecutionApi(this.apiConfig);
|
|
709
|
+
this._feedApi = new FeedApi(this.apiConfig);
|
|
706
710
|
this._fileApi = new FileApi(this.apiConfig);
|
|
707
711
|
this._governanceApi = new GovernanceApi(this.apiConfig);
|
|
708
712
|
this._metadataApi = new MetadataApi(this.apiConfig);
|
|
713
|
+
this._metricsApi = new MetricsApi(this.apiConfig);
|
|
709
714
|
this._processesApi = new ProcessesApi(this.apiConfig);
|
|
710
715
|
this._projectRequestsApi = new ProjectRequestsApi(this.apiConfig);
|
|
711
716
|
this._projectsApi = new ProjectsApi(this.apiConfig);
|
|
712
717
|
this._referencesApi = new ReferencesApi(this.apiConfig);
|
|
718
|
+
this._sharedFilesystemsApi = new SharedFilesystemsApi(this.apiConfig);
|
|
713
719
|
this._sharingApi = new SharingApi(this.apiConfig);
|
|
720
|
+
this._sheetsApi = new SheetsApi(this.apiConfig);
|
|
714
721
|
this._systemApi = new SystemApi(this.apiConfig);
|
|
715
722
|
this._toolsApi = new ToolsApi(this.apiConfig);
|
|
716
723
|
this._usersApi = new UsersApi(this.apiConfig);
|
|
717
724
|
this._workspacesApi = new WorkspacesApi(this.apiConfig);
|
|
718
725
|
}
|
|
726
|
+
get appRegistrations() {
|
|
727
|
+
return this._appRegistrationsApi;
|
|
728
|
+
}
|
|
719
729
|
get audit() {
|
|
720
730
|
return this._auditApi;
|
|
721
731
|
}
|
|
@@ -725,12 +735,18 @@ class DataService {
|
|
|
725
735
|
get computeEnvironments() {
|
|
726
736
|
return this._computeEnvironmentApi;
|
|
727
737
|
}
|
|
738
|
+
get dashboards() {
|
|
739
|
+
return this._dashboardsApi;
|
|
740
|
+
}
|
|
728
741
|
get datasets() {
|
|
729
742
|
return this._datasetsApi;
|
|
730
743
|
}
|
|
731
744
|
get execution() {
|
|
732
745
|
return this._executionApi;
|
|
733
746
|
}
|
|
747
|
+
get feed() {
|
|
748
|
+
return this._feedApi;
|
|
749
|
+
}
|
|
734
750
|
get file() {
|
|
735
751
|
return this._fileApi;
|
|
736
752
|
}
|
|
@@ -740,6 +756,9 @@ class DataService {
|
|
|
740
756
|
get metadata() {
|
|
741
757
|
return this._metadataApi;
|
|
742
758
|
}
|
|
759
|
+
get metrics() {
|
|
760
|
+
return this._metricsApi;
|
|
761
|
+
}
|
|
743
762
|
get processes() {
|
|
744
763
|
return this._processesApi;
|
|
745
764
|
}
|
|
@@ -752,9 +771,15 @@ class DataService {
|
|
|
752
771
|
get references() {
|
|
753
772
|
return this._referencesApi;
|
|
754
773
|
}
|
|
774
|
+
get sharedFilesystems() {
|
|
775
|
+
return this._sharedFilesystemsApi;
|
|
776
|
+
}
|
|
755
777
|
get sharing() {
|
|
756
778
|
return this._sharingApi;
|
|
757
779
|
}
|
|
780
|
+
get sheets() {
|
|
781
|
+
return this._sheetsApi;
|
|
782
|
+
}
|
|
758
783
|
get system() {
|
|
759
784
|
return this._systemApi;
|
|
760
785
|
}
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/file/extensions.fn.ts","../src/file/util/credentials-mutex.so.ts","../src/file/util/s3-client.ts","../src/file/util/s3-utils.ts","../src/file/actions/sign-url.fn.ts","../src/util/get-resource-name.ts","../src/file/shared.ts","../src/file/file.service.ts","../src/file/actions/delete.fn.ts","../src/file/actions/upload.fn.ts","../src/file/project-access-context.ts","../src/file/models/file-object.model.ts","../src/file/calculate-size.ts","../src/formatters/json-pretty-print.ts","../src/formatters/bytes-to-string.ts","../src/formatters/normalize-date.ts","../src/formatters/normalize-string.ts","../src/formatters/slash.ts","../src/formatters/to-date-format.ts","../src/formatters/to-title-case.ts","../src/formatters/to-friendly-name.ts","../src/formatters/to-money.ts","../src/formatters/to-pascal-case.ts","../src/file/models/assets.ts","../src/file/util/get-display.fn.ts","../src/file/models/folder.ts","../src/file/models/file.ts","../src/file/manifest-parser.ts","../src/file/util/get-parent.fn.ts","../src/api/error.ts","../src/api/error-handler.ts","../src/api/config.ts","../src/auth/current-user.ts","../src/auth/static-token-auth.ts","../src/data/data.service.ts","../src/util/extract-from-object.ts","../src/util/handle-promise.ts","../src/util/download.ts"],"sourcesContent":["\n/**\n * An array of file extensions that can be rendered in a genome viewer\n */\nexport const FILE_TRACK_ANNOTATION = ['bed', 'bed.gz', 'gtf', 'gtf.gz'];\nexport const FILE_TRACK_ALIGNMENTS = ['cram', 'cram.gz']; // TODO: put back bam\nexport const FILE_TRACK_VARIANT = ['vcf', 'vcf.gz'];\nexport const FILE_TRACK_WIG = ['wig', 'wig.gz', 'bw', 'bw.gz', 'bigwig', 'bigwig.gz'];\nexport const FILE_TRACK_SEG = ['seg', 'seg.gz'];\nexport const FILE_TRACK_INDEX_EXTENSIONS = ['tbi', 'bai', 'crai', 'csi'];\nexport const FILE_VITESSCE_EXTENSIONS = ['hdf5', 'h5ad', 'loom'];\nexport const FILE_TRACK_EXTENSIONS_NO_INDEX = [\n ...FILE_TRACK_ANNOTATION,\n ...FILE_TRACK_ALIGNMENTS,\n ...FILE_TRACK_VARIANT,\n ...FILE_TRACK_WIG,\n ...FILE_TRACK_SEG\n];\nexport const FILE_TRACK_EXTENSIONS = [\n ...FILE_TRACK_EXTENSIONS_NO_INDEX,\n ...FILE_TRACK_INDEX_EXTENSIONS\n]\n\n\nexport const FILE_BROWSER_EXTENSIONS = ['html', 'pdf'];\n\n\n/**\n * An array of file extensions that are protein structure files.\n */\nexport const FILE_PROTEIN_STRUCTURE_EXTENSIONS = ['pdb', 'pdb.gz', 'cif', 'cif.gz', 'ent', 'ent.gz', 'mmtf', 'mmtf.gz'];\n/**\n * An array of file extensions that are considered tabular files.\n */\nexport const FILE_DSV_EXTENSIONS = ['tab', 'csv', 'tsv', 'dsv'];\n/**\n * An array of file extensions that contain genomic sequence content.\n */\nexport const FILE_TXT_GENOMICS_EXTENSIONS = ['fasta', 'fna', 'fsa', 'fa', 'fastp', 'fastq', 'faa', 'gbk', 'gff', 'vcf', 'seq'];\n\n/**\n * An array of file extensions that are considered TXT files.\n */\nexport const FILE_TXT_EXTENSIONS = ['txt', 'log', 'yml', 'cfg', 'config', 'xml', 'yaml', ...FILE_DSV_EXTENSIONS, ...FILE_TXT_GENOMICS_EXTENSIONS];\n\n\n/**\n * An array of file extensions that are considered image files.\n */\nexport const FILE_IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'svg'];\n\n/**\n * An array of file extensions that are considered OME (Open Microscopy Environment) files.\n */\nexport const FILE_OME_EXTENSIONS = ['tif', 'ome.tif', 'ome.tiff', 'ome.tif.gz', 'ome.tiff.gz'];\n\n/**\n * An array of file extensions that are rendered as formatted Markdown.\n */\nexport const FILE_MARKDOWN_EXTENSIONS = ['md', 'markdown'];\n\n/**\n * An array of file extensions that can be opened in the browser.\n * Includes common document formats such as HTML, PDF, and JSON, as well as image, DSV, TXT, and OME file formats.\n */\nexport const FILE_EXTENSIONS_TO_OPEN = ['html', 'pdf', 'json', 'fcs',\n ...FILE_IMAGE_EXTENSIONS,\n ...FILE_TXT_EXTENSIONS,\n ...FILE_TRACK_EXTENSIONS,\n ...FILE_PROTEIN_STRUCTURE_EXTENSIONS,\n ...FILE_MARKDOWN_EXTENSIONS\n];\n\n\n/**\n * Checks if a file has an extension that matches one in the provided list.\n * @param filePath The file to check the extension of.\n * @param extensions A list of file endings to check the file against.\n * @returns True or false if the file has an ending in the extensions list.\n */\nexport function matchesExtension(filePath: string, extensions: string[]): boolean {\n filePath = filePath.toLowerCase();\n\n // Decompress the filePath if it ends with .gz\n if (filePath.endsWith('.gz')) {\n filePath = filePath.slice(0, -3); // remove the .gz extension\n }\n\n // Now, get the extension of the file\n const fileExtension = filePath.slice(filePath.lastIndexOf('.') + 1);\n\n // Check if the fileExtension is in the list of extensions\n return extensions.includes(fileExtension);\n}\n","import { AWSCredentials } from '@cirrobio/api-client';\n\nexport class Mutex<T> {\n private mutex = Promise.resolve();\n\n lock(): PromiseLike<() => void> {\n let begin: (unlock: () => void) => void = () => { /* Do nothing */ };\n\n this.mutex = this.mutex.then(() => new Promise(begin));\n\n return new Promise((res) => {\n begin = res;\n });\n }\n\n async dispatch(fn: (() => T) | (() => PromiseLike<T>)): Promise<T> {\n const unlock = await this.lock();\n try {\n return await Promise.resolve(fn());\n } finally {\n unlock();\n }\n }\n}\n\n/**\n * A mutex to ensure that only one request for credentials is made at a time.\n */\nexport const credentialsMutex = new Mutex<AWSCredentials>();\n/**\n * A cache of credentials to avoid making multiple requests for the same credentials.\n */\nexport const credentialsCache: Map<string, AWSCredentials> = new Map<string, AWSCredentials>();\n","import { S3Client } from \"@aws-sdk/client-s3\";\nimport { AWSCredentials } from \"@cirrobio/api-client\";\nimport { S3ClientConfigType } from \"@aws-sdk/client-s3/dist-types/S3Client\";\n\nconst clientCache = new Map<string, S3Client>();\n\nconst clientDefaults: S3ClientConfigType = {\n // Support ipv6 endpoints\n useDualstackEndpoint: true,\n // Protection against not having the correct region (does not work for signed url fn)\n followRegionRedirects: true,\n}\n\nfunction createS3ClientInternal(credentials: AWSCredentials, clientOverrides: S3ClientConfigType): S3Client {\n return new S3Client({\n credentials: {\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n },\n region: credentials.region,\n ...clientDefaults,\n ...clientOverrides\n });\n}\n\n/**\n * Creates an S3 client using the provided credentials.\n */\nexport function createS3Client(credentials: AWSCredentials, clientOverrides: S3ClientConfigType = {}): S3Client {\n // Bypass cache when creating s3 client with overrides, since these values may be changed.\n if (clientOverrides && Object.keys(clientOverrides).length > 0) {\n return createS3ClientInternal(credentials, clientOverrides);\n }\n const cacheKey = `${credentials.accessKeyId}-${credentials.region}`;\n const cachedClient = clientCache.get(cacheKey);\n if (cachedClient) {\n return cachedClient;\n }\n const newClient = createS3ClientInternal(credentials, clientOverrides)\n clientCache.set(cacheKey, newClient);\n return newClient;\n}\n","/**\n * Converts an S3 URI to a bucket and key\n */\nexport function s3UriToParams(uri: string): { Bucket: string, Key: string } {\n const matches = /^s3:\\/\\/([^/]+)\\/(.+)$/.exec(uri);\n if (!matches) {\n throw new Error(`Received invalid uri: '${uri}'`);\n }\n return {\n Bucket: matches[1],\n Key: matches[2],\n };\n}\n\n","import { AWSCredentials } from \"@cirrobio/api-client\";\nimport { GetObjectCommand, GetObjectCommandInput } from \"@aws-sdk/client-s3\";\nimport { getSignedUrl as getSignedUrlInternal } from \"@aws-sdk/s3-request-presigner\";\nimport { createS3Client } from \"../util/s3-client\";\nimport { s3UriToParams } from \"../util/s3-utils\";\nimport { S3ClientConfigType } from \"@aws-sdk/client-s3/dist-types/S3Client\";\n\nexport interface GetFileUrlParams extends GetSignedUrlOptions {\n url: string;\n credentials?: AWSCredentials;\n}\n\nexport interface GetSignedUrlOptions {\n /**\n * Whether to signal the browser to download this file on access\n * (sets content disposition)\n */\n download?: boolean;\n /**\n * Whether to signal the browser to request gzipped content\n */\n gzip?: boolean;\n /**\n * Signed URL expiry timeout\n * Defaults to 5 minutes\n */\n timeout?: number;\n /**\n * Override file name to download (when using download = true)\n */\n filename?: string;\n /**\n * Override the region of the bucket\n */\n region?: string;\n}\n\n/**\n * Get a signed URL for a file in S3 given its S3 URI.\n */\nexport function getSignedUrl({ url, credentials, ...params }: GetFileUrlParams): Promise<string> {\n const clientParams: S3ClientConfigType = {};\n if (params.region) {\n clientParams.region = params.region;\n }\n const client = createS3Client(credentials, clientParams);\n const { Bucket, Key } = s3UriToParams(url);\n const args: GetObjectCommandInput = { Bucket, Key };\n if (params?.download) {\n const fileName = params.filename ?? Key.split('/').pop();\n args.ResponseContentDisposition = `attachment; filename=\"${fileName}\"`\n }\n if (params?.gzip) {\n args.ResponseContentEncoding = 'gzip'\n }\n const command = new GetObjectCommand(args);\n return getSignedUrlInternal(client, command, { expiresIn: 60 * (params?.timeout ?? 5) });\n}\n","\nconst resourcePrefix = 'project-';\n\nexport function getResourceName(projectId: string): string {\n return `${resourcePrefix}${projectId}`;\n}\n\n","import { getResourceName } from \"../util/get-resource-name\";\n\n/**\n * Get the S3 bucket name for a project.\n * Will be deprecated in the future, use domain from manifest instead.\n */\nexport function getProjectS3Bucket(projectId: string): string {\n return getResourceName(projectId)\n}\n","import { AWSCredentials, GenerateProjectFileAccessTokenRequest, ProjectAccessType } from \"@cirrobio/api-client\";\nimport { ProjectFileAccessContext } from \"./project-access-context\";\nimport { credentialsCache, credentialsMutex } from \"./util/credentials-mutex.so\";\nimport { GetFileUrlParams, getSignedUrl, GetSignedUrlOptions } from \"./actions/sign-url.fn\";\nimport { getProjectS3Bucket } from \"./shared\";\nimport { DownloadableFile } from \"./models/file-object.model\";\n\nexport interface IFileCredentialsApi {\n generateProjectFileAccessToken: (params: GenerateProjectFileAccessTokenRequest) => Promise<AWSCredentials>;\n}\n\n/**\n * Service for viewing files in Cirro\n * currently this only operates on files within a project\n */\nexport class FileService {\n constructor(\n private readonly fileCredsApi: IFileCredentialsApi\n ) {}\n\n /**\n * Get contents of a file\n */\n async getProjectFile(file: DownloadableFile, params?: GetSignedUrlOptions): Promise<Response> {\n const url = await this.getSignedUrlFromProjectFile(file, params);\n return fetch(url);\n }\n\n /**\n * Get a signed URL for a file\n */\n async getSignedUrlFromProjectFile(file: DownloadableFile, params?: GetSignedUrlOptions): Promise<string> {\n const credentials = await this.getProjectAccessCredentials(file.fileAccessContext);\n const _params: GetFileUrlParams = {\n ...params,\n filename: file.name,\n url: file.url,\n credentials,\n };\n return getSignedUrl(_params);\n }\n\n /**\n * Get a signed URL for a file given a path\n */\n async getSignedUrlFromProjectPath(fileAccessContext: ProjectFileAccessContext, path: string, params?: GetSignedUrlOptions): Promise<string> {\n const credentials = await this.getProjectAccessCredentials(fileAccessContext);\n const _params: GetFileUrlParams = {\n ...params,\n filename: path.split('/').pop(),\n url: `s3://${getProjectS3Bucket(fileAccessContext.project.id)}/${path}`,\n credentials,\n };\n return getSignedUrl(_params);\n }\n\n /**\n * Get credentials for accessing a project file\n */\n async getProjectAccessCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {\n const accessType = fileAccessContext.fileAccessRequest.accessType;\n // Special case for project download, since we can cache the credentials\n if (accessType === ProjectAccessType.ProjectDownload || accessType === ProjectAccessType.SharedDatasetDownload) {\n return this.getProjectReadCredentials(fileAccessContext);\n }\n return this.fileCredsApi.generateProjectFileAccessToken({ projectId: fileAccessContext.project.id, projectFileAccessRequest: fileAccessContext.fileAccessRequest });\n }\n\n private async getProjectReadCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {\n const projectId = fileAccessContext.project.id;\n // Append datasetId to cache key for shared dataset downloads since we need to generate a new token for each dataset\n let cacheKey = projectId;\n if (fileAccessContext.fileAccessRequest.accessType === ProjectAccessType.SharedDatasetDownload) {\n cacheKey = `${projectId}-${fileAccessContext.fileAccessRequest.datasetId}`;\n }\n\n return credentialsMutex.dispatch(async () => {\n const cachedCredentials = credentialsCache.get(cacheKey);\n const expirationTime = cachedCredentials ? cachedCredentials?.expiration : null;\n const fetchNewCredentials = !expirationTime || expirationTime < new Date();\n if (fetchNewCredentials) {\n const projectFileAccessRequest = fileAccessContext.fileAccessRequest;\n const credentials = await this.fileCredsApi.generateProjectFileAccessToken({ projectId, projectFileAccessRequest });\n credentialsCache.set(cacheKey, credentials);\n return credentials;\n }\n return cachedCredentials;\n });\n }\n}\n","import { AWSCredentials } from \"@cirrobio/api-client\";\nimport { DeleteObjectCommand } from \"@aws-sdk/client-s3\";\nimport { s3UriToParams } from \"../util/s3-utils\";\nimport { createS3Client } from \"../util/s3-client\";\n\nexport interface DeleteFileParams {\n url: string;\n credentials: AWSCredentials;\n}\n\n/**\n * Delete a file from S3 given its URL and credentials.\n */\nexport async function deleteFile({ url, credentials }: DeleteFileParams): Promise<void> {\n const { Bucket, Key } = s3UriToParams(url);\n const cmd = new DeleteObjectCommand({ Bucket, Key });\n await createS3Client(credentials).send(cmd);\n}\n","import { Upload } from \"@aws-sdk/lib-storage\";\nimport { AWSCredentials } from '@cirrobio/api-client';\nimport { createS3Client } from \"../util/s3-client\";\nimport { PutObjectCommandInput } from \"@aws-sdk/client-s3\";\nimport { CreateMultipartUploadRequest } from \"@aws-sdk/client-s3/dist-types/models/models_0\";\n\nexport interface UploadFileParams {\n bucket: string;\n path: string;\n file: File;\n credentials: AWSCredentials;\n metadata?: Record<string, string>;\n}\n\n/**\n * Upload a file to S3\n */\nexport function uploadFile({ bucket, path, file, credentials, metadata }: UploadFileParams): Upload {\n const params: PutObjectCommandInput & CreateMultipartUploadRequest = {\n Bucket: bucket,\n Key: path,\n Body: file,\n ContentType: file.type,\n Metadata: metadata,\n ChecksumType: \"FULL_OBJECT\"\n };\n return new Upload({\n client: createS3Client(credentials),\n queueSize: 4,\n params,\n });\n}\n\n","import { ProjectAccessType, DatasetDetail, ProjectFileAccessRequest, Project } from \"@cirrobio/api-client\";\n\ntype ProjectIdentifiable = Pick<Project, 'id'>;\n\n/**\n * Helper class to encapsulate the file access for a project.\n */\nexport class ProjectFileAccessContext {\n constructor(\n readonly project: ProjectIdentifiable,\n readonly dataset: DatasetDetail,\n readonly fileAccessRequest: ProjectFileAccessRequest\n ) {\n }\n\n static projectDownload(project: ProjectIdentifiable): ProjectFileAccessContext {\n const request: ProjectFileAccessRequest = { accessType: ProjectAccessType.ProjectDownload };\n return new ProjectFileAccessContext(project, null, request);\n }\n\n static datasetDownload(project: ProjectIdentifiable, dataset: DatasetDetail): ProjectFileAccessContext {\n const accessType = dataset.share ? ProjectAccessType.SharedDatasetDownload : ProjectAccessType.ProjectDownload;\n const request: ProjectFileAccessRequest = { accessType, datasetId: dataset.id };\n return new ProjectFileAccessContext(project, dataset, request);\n }\n}\n","import { ProjectFileAccessContext } from \"../project-access-context\";\n\nexport enum FileSystemObjectType {\n FILE = 'file',\n FOLDER = 'folder'\n}\n\n/**\n * Represents a file that can be downloaded\n */\nexport interface DownloadableFile {\n url: string;\n name?: string;\n fileAccessContext: ProjectFileAccessContext;\n}\n\n/**\n * Represents a file in Cirro\n */\nexport interface FileSystemObject extends DownloadableFile {\n /**\n * Unique Id For Object\n */\n id: string;\n /**\n * Object S3 Url\n */\n url: string;\n /**\n * Object Path\n */\n path: string;\n /**\n * Object Display Path\n */\n displayPath: string;\n /**\n * Object Relative Path to base\n */\n relativePath: string;\n /**\n * Object Name\n */\n name: string;\n /**\n * Object Size\n */\n size: number;\n /**\n * Object Kind (PNG, TXT)\n */\n kind: string;\n /**\n * Object Type (File or Folder)\n */\n type: FileSystemObjectType;\n /**\n * Metadata\n */\n metadata?: Record<string, any>;\n /**\n * Access context\n */\n fileAccessContext: ProjectFileAccessContext;\n}\n","import { FileSystemObject } from \"./models/file-object.model\";\n\n/**\n * Calculate the total size of all files in a directory.\n * @param files - An array of FileSystemObject representing the files in the directory.\n * @return The total size of all files in bytes.\n */\nexport function calculateTotalSize(files: Array<FileSystemObject>): number {\n let totalSize = 0;\n for (const file of files) {\n totalSize += file.size;\n }\n return totalSize;\n}\n","/**\n * Pretty prints a JSON object with the specified indentation level.\n * @param obj JSON object to be pretty printed.\n * @param indentLevel Number of spaces to use for indentation.\n */\nexport function jsonPrettyPrint(obj: object, indentLevel=2): string {\n return JSON.stringify(obj, null, indentLevel);\n}\n","/**\n * Format bytes as human-readable text.\n * @param bytes Number of bytes.\n * @param si True to use metric(SI) units, aka powers of 1000. False to use\n * binary(IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\nexport function bytesToString(bytes: number, si = false, dp = 1): string {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return `${bytes} B`;\n }\n\n const units = si\n ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh\n && u < units.length - 1\n );\n\n return `${bytes.toFixed(dp)} ${units[u]}`;\n}\n","/**\n * Normalizes a date to UTC by adjusting for the timezone offset.\n * Useful when you are working with dates that may not include time information.\n * @param date\n */\nexport function normalizeDate(date: Date | string | undefined | null): Date {\n if (!date) throw new Error(\"Attempt to normalize undefined\");\n if (!(date instanceof Date)) date = new Date(date);\n return new Date(date.getTime() - date.getTimezoneOffset() * -60000);\n}\n","/**\n * Normalize a string by trimming it and returning null if it is empty.\n * @param input The string to normalize.\n */\nexport function normalizeString(input: string): string {\n if (!input?.trim()) return null;\n return input.trim();\n}\n","/**\n * Removes the starting slash from a path.\n * @param path Input path\n */\nexport function removeStartingSlash(path: string): string {\n if (!path) return path;\n if (path.startsWith('./')) return path.substring(2);\n if (path.startsWith('/')) return path.substring(1);\n return path;\n}\n\n/**\n * Removes the ending slash from a path.\n * @param path Input path\n */\nexport function removeEndingSlash(path: string): string {\n return path?.endsWith('/') ? path.slice(0, -1) : path;\n}\n","const dateFormat = new Intl.DateTimeFormat('en-US', { month: '2-digit', day: '2-digit', year: '2-digit' });\n\n/**\n * Converts a date string or Date object to MM/DD/YY date string.\n * Ex., \"2023-10-01\" -> \"10/01/23\"\n * @param date Input date string or Date object.\n */\nexport function toDateFormat(date: string | Date): string {\n if (!date) return null;\n const d: Date = (typeof date === 'string') ? new Date(date) : date\n return dateFormat.format(d);\n}\n","/**\n * Converts a string to Title case.\n * Ex., \"hello world\" -> \"Hello world\"\n * @param value\n */\nexport function toTitleCase(value: string): string {\n if (!value) return null;\n return value[0].toUpperCase() + value.slice(1).toLowerCase();\n}\n","import { toTitleCase } from './to-title-case';\n\n/**\n * Converts a field name to a more human-readable format.\n * Ex., \"helloWorld\" -> \"Hello World\"\n * @param value The value to convert.\n */\nexport function toFriendlyName(value: string): string {\n let _value = value.split(/(?=[A-Z])/).join(' ');\n _value = _value.split('_').join(' ');\n _value = _value.split('|').join(' ');\n _value = _value.replace(/ +/g, ' ');\n return toTitleCase(_value);\n}\n","const money = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n});\n\n/**\n * Converts a number or bigint to a formatted money string.\n * Ex., 1234.56 -> $1,234.56\n * @param value Input number or bigint value.\n */\nexport function toMoney(value: number | bigint): string {\n return money.format(value as number);\n}\n","/**\n * Converts a string to PascalCase.\n * Ex., \"hello world\" -> \"HelloWorld\"\n * @param value The string to convert.\n */\nexport function toPascalCase(value: string): string {\n return value\n // Split on non-alphanumeric characters and spaces\n .split(/[^a-zA-Z0-9]+/)\n // Filter out empty strings\n .filter(word => word.length > 0)\n // Capitalize first letter and lowercase the rest\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n // Join all words together\n .join('');\n}\n","import { calculateTotalSize } from \"../calculate-size\";\nimport { bytesToString } from \"../../formatters\";\nimport { FileSystemObject } from \"./file-object.model\";\n\nexport class Assets extends Array<FileSystemObject> {\n private _totalSize: string;\n private _totalSizeBytes: number;\n\n // Total size of all files in human-readable format\n get totalSize(): string {\n if (!this._totalSize) {\n this.calculateSize();\n }\n return this._totalSize;\n }\n\n get totalSizeBytes(): number {\n if (!this._totalSizeBytes) {\n this.calculateSize();\n }\n return this._totalSizeBytes;\n }\n private calculateSize(): void {\n this._totalSizeBytes = calculateTotalSize(this);\n this._totalSize = bytesToString(this._totalSizeBytes)\n }\n}\n","import { removeStartingSlash } from \"../../formatters/slash\";\nimport { FileSystemObject } from \"../models/file-object.model\";\n\nexport function getDisplayPath(file: FileSystemObject, dataPrefix: string = \"data/\") {\n return removeStartingSlash(`${file.path}/${file.name}`.replace(dataPrefix, ''));\n}\n","import { v4 as uuidv4 } from 'uuid';\nimport { FileSystemObject, FileSystemObjectType } from \"./file-object.model\";\nimport { getDisplayPath } from \"../util/get-display.fn\";\nimport { removeStartingSlash } from \"../../formatters/slash\";\n\nexport class Folder implements FileSystemObject {\n readonly id: string;\n readonly url: string;\n readonly path: string;\n readonly name: string;\n readonly domain: string;\n readonly kind = 'Folder';\n readonly fileAccessContext = null;\n readonly size = 0;\n readonly type = FileSystemObjectType.FOLDER;\n\n get displayPath() {\n return getDisplayPath(this);\n }\n\n get relativePath() {\n return removeStartingSlash(`${this.path}/${this.name}`);\n }\n\n constructor(url: string, name: string, path: string, domain: string) {\n this.id = uuidv4();\n this.url = url;\n this.name = name;\n this.path = path;\n this.domain = domain;\n }\n}\n","import { FileSystemObject, FileSystemObjectType } from \"./file-object.model\";\nimport { ProjectFileAccessContext } from \"../project-access-context\";\nimport { v4 as uuidv4 } from 'uuid';\nimport { getDisplayPath } from \"../util/get-display.fn\";\nimport { removeStartingSlash } from \"../../formatters/slash\";\n\nexport class File implements FileSystemObject {\n readonly id: string;\n readonly url: string\n readonly size: number;\n readonly path: string;\n readonly name: string;\n readonly metadata: Record<string, any>;\n readonly fileAccessContext: ProjectFileAccessContext;\n\n get type() {\n return FileSystemObjectType.FILE;\n }\n\n get kind() {\n return this.name.slice(this.name.lastIndexOf('.') + 1);\n }\n\n get displayPath() {\n return getDisplayPath(this);\n }\n\n get relativePath() {\n return removeStartingSlash(`${this.path}/${this.name}`);\n }\n\n constructor(domain: string, file: string, size: number, metadata: Record<string, any>, accessContext: ProjectFileAccessContext) {\n this.id = uuidv4();\n this.url = `${domain}/${file}`;\n this.size = size;\n this.metadata = metadata;\n this.fileAccessContext = accessContext;\n\n const fileFolderIdx = file.lastIndexOf('/');\n if (fileFolderIdx === -1) {\n this.path = '';\n this.name = file;\n } else {\n this.path = file.substring(0, fileFolderIdx);\n this.name = file.substring(fileFolderIdx + 1);\n }\n }\n}\n","import { DatasetAssetsManifest, FileEntry } from '@cirrobio/api-client';\nimport { Assets } from \"./models/assets\";\nimport { Folder } from \"./models/folder\";\nimport { File } from \"./models/file\";\nimport { ProjectFileAccessContext } from \"./project-access-context\";\nimport { removeEndingSlash } from \"../formatters\";\n\n\nexport class ManifestParser {\n private readonly manifest: DatasetAssetsManifest;\n private readonly accessContext: ProjectFileAccessContext;\n\n constructor(manifest: DatasetAssetsManifest, accessContext?: ProjectFileAccessContext) {\n this.manifest = manifest;\n this.accessContext = accessContext;\n }\n\n private get files(): Array<FileEntry> {\n return this.manifest?.files ?? [];\n }\n\n /**\n * Generates asset objects from the manifest, optionally including folder entries.\n */\n public generateAssets(generateFolders = false): Assets {\n const domain = removeEndingSlash(this.manifest?.domain);\n const assets = new Assets();\n\n for (const file of this.files) {\n assets.push(new File(domain, file.path, file.size, file.metadata, this.accessContext));\n }\n\n // Optionally add folder entries\n if (generateFolders) {\n assets.push(...this.generateFolderAssets(assets, domain));\n }\n\n return assets;\n }\n\n // Create folder entries, useful for visualizing folders as items in a file browser\n private generateFolderAssets(assets: Assets, domain: string): Folder[] {\n const folderSet = new Set<string>();\n\n // Collect all unique folder paths\n for (const asset of assets) {\n const parts = asset.path.split('/').filter(p => p.length > 0);\n let currentPath = '';\n for (const part of parts) {\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n folderSet.add(currentPath);\n }\n }\n\n // Create Folder objects from unique paths\n return Array.from(folderSet)\n .map(folderPath => {\n const name = folderPath.substring(folderPath.lastIndexOf('/') + 1);\n const parentPath = folderPath.includes('/') ? folderPath.substring(0, folderPath.lastIndexOf('/')) : '';\n return new Folder(folderPath, name, parentPath, domain);\n });\n }\n}\n","\n/**\n * Returns the parent directory of a given file path.\n */\nexport function getParentPath(path: string): string {\n return path.split(\"/\").slice(0, -1).join(\"/\") ?? \"\"\n}\n","export class ApiError extends Error {\n errors: string[];\n\n constructor(message: string, errors: string[]) {\n super(message);\n this.errors = errors;\n }\n}\n","import { Middleware, ResponseContext } from \"@cirrobio/api-client\";\nimport { ApiError } from \"./error\";\n\nexport class PortalErrorHandler implements Middleware {\n async post(context: ResponseContext): Promise<Response | void> {\n const { response } = context;\n if (response && (response.status >= 200 && response.status < 300)) {\n return response;\n }\n\n // Handle Error\n let errorMessage: string;\n const errors = [];\n try {\n const err = await response.json();\n console.warn(err);\n if ('errorDetail' in err) {\n errorMessage = err.errorDetail;\n errors.push(err.errors.map((e: any) => e.message));\n } else {\n errorMessage = err.message;\n }\n } catch (ignore) {\n errorMessage = \"Unknown Error\";\n }\n throw new ApiError(errorMessage, errors);\n }\n}\n","import { PortalErrorHandler } from \"./error-handler\";\nimport { Configuration } from \"@cirrobio/api-client\";\n\ninterface GetConfigParams {\n tokenGetter: () => Promise<string>;\n basePath?: string;\n}\n\nexport const generateApiConfig = ({ basePath = \"/api\", tokenGetter}: GetConfigParams) => {\n return new Configuration({\n basePath,\n accessToken: tokenGetter,\n middleware: [\n new PortalErrorHandler()\n ],\n });\n}\n","export class CurrentUser {\n username: string;\n /**\n * The unique identifier for the user\n */\n sub: string\n\n /**\n * The time the user authenticated\n */\n authTime: Date;\n\n /**\n * The groups the user belongs to\n */\n groups: string[];\n\n static fromCognitoUser(idTokenPayload: Record<string, any>): CurrentUser {\n return {\n username: idTokenPayload[\"cognito:username\"] ?? idTokenPayload.username,\n sub: idTokenPayload.sub,\n authTime: new Date(idTokenPayload.auth_time * 1000),\n groups: idTokenPayload[\"cognito:groups\"] ?? [],\n };\n }\n}\n","import { SystemInfoResponse } from \"@cirrobio/api-client\";\nimport { AuthenticationProvider } from \"./authentication-provider\";\nimport { CurrentUser } from \"./current-user\";\n\n\nexport class StaticTokenAuthProvider implements AuthenticationProvider {\n constructor(\n readonly token: string\n ) {\n }\n\n public configure(_ignore: SystemInfoResponse): void {\n console.log('StaticTokenAuthProvider loaded');\n }\n\n public async getAccessToken() {\n return this.token;\n }\n\n public async getCurrentUser() {\n const accessToken = await this.getAccessToken();\n const parsedToken = JSON.parse(atob(accessToken.split('.')[1]));\n return CurrentUser.fromCognitoUser(parsedToken);\n }\n\n public forceRefresh(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import {\n AuditApi,\n BillingApi,\n ComputeEnvironmentApi,\n Configuration,\n DatasetsApi,\n ExecutionApi,\n FileApi,\n GovernanceApi,\n MetadataApi,\n ProcessesApi,\n ProjectRequestsApi,\n ProjectsApi,\n ReferencesApi,\n SharingApi,\n SystemApi,\n ToolsApi,\n UsersApi,\n WorkspacesApi\n} from \"@cirrobio/api-client\";\nimport { generateApiConfig } from \"../api/config\";\n\ninterface DataServiceParams {\n tokenGetter: () => Promise<string>;\n basePath?: string;\n}\n\nexport class DataService {\n private readonly apiConfig: Configuration;\n\n private readonly _auditApi: AuditApi;\n private readonly _billingApi: BillingApi;\n private readonly _computeEnvironmentApi: ComputeEnvironmentApi;\n private readonly _datasetsApi: DatasetsApi;\n private readonly _executionApi: ExecutionApi;\n private readonly _fileApi: FileApi;\n private readonly _governanceApi: GovernanceApi;\n private readonly _metadataApi: MetadataApi;\n private readonly _processesApi: ProcessesApi;\n private readonly _projectRequestsApi: ProjectRequestsApi;\n private readonly _projectsApi: ProjectsApi;\n private readonly _referencesApi: ReferencesApi;\n private readonly _sharingApi: SharingApi;\n private readonly _systemApi: SystemApi;\n private readonly _toolsApi: ToolsApi;\n private readonly _usersApi: UsersApi;\n private readonly _workspacesApi: WorkspacesApi;\n\n constructor({ tokenGetter, basePath = \"/api\" }: DataServiceParams) {\n this.apiConfig = generateApiConfig({ basePath, tokenGetter });\n\n this._auditApi = new AuditApi(this.apiConfig);\n this._billingApi = new BillingApi(this.apiConfig);\n this._computeEnvironmentApi = new ComputeEnvironmentApi(this.apiConfig);\n this._datasetsApi = new DatasetsApi(this.apiConfig);\n this._executionApi = new ExecutionApi(this.apiConfig);\n this._fileApi = new FileApi(this.apiConfig);\n this._governanceApi = new GovernanceApi(this.apiConfig);\n this._metadataApi = new MetadataApi(this.apiConfig);\n this._processesApi = new ProcessesApi(this.apiConfig);\n this._projectRequestsApi = new ProjectRequestsApi(this.apiConfig);\n this._projectsApi = new ProjectsApi(this.apiConfig);\n this._referencesApi = new ReferencesApi(this.apiConfig);\n this._sharingApi = new SharingApi(this.apiConfig);\n this._systemApi = new SystemApi(this.apiConfig);\n this._toolsApi = new ToolsApi(this.apiConfig);\n this._usersApi = new UsersApi(this.apiConfig);\n this._workspacesApi = new WorkspacesApi(this.apiConfig);\n }\n\n get audit(): AuditApi {\n return this._auditApi;\n }\n get billing(): BillingApi {\n return this._billingApi;\n }\n get computeEnvironments(): ComputeEnvironmentApi {\n return this._computeEnvironmentApi;\n }\n get datasets(): DatasetsApi {\n return this._datasetsApi;\n }\n get execution(): ExecutionApi {\n return this._executionApi;\n }\n get file(): FileApi {\n return this._fileApi;\n }\n get governance(): GovernanceApi {\n return this._governanceApi;\n }\n get metadata(): MetadataApi {\n return this._metadataApi;\n }\n get processes(): ProcessesApi {\n return this._processesApi;\n }\n get projectRequests(): ProjectRequestsApi {\n return this._projectRequestsApi;\n }\n get projects(): ProjectsApi {\n return this._projectsApi;\n }\n get references(): ReferencesApi {\n return this._referencesApi;\n }\n get sharing(): SharingApi {\n return this._sharingApi;\n }\n get system(): SystemApi {\n return this._systemApi;\n }\n get tools(): ToolsApi {\n return this._toolsApi;\n }\n get users(): UsersApi {\n return this._usersApi;\n }\n get workspaces(): WorkspacesApi {\n return this._workspacesApi;\n }\n}\n","/**\n * Extracts a value from an object using the json path notation, i.e. $.test.id\n * @param path JSON path to the value\n * @param obj Object to extract the value from\n */\nexport function extractFromObject(path: string, obj: object): any {\n const pathParts = path.slice(2).split('.')\n return pathParts.reduce(function(o, k) {\n return o && o[k];\n }, obj);\n}\n","/**\n * Ignores dangling promise rejections.\n * @param err The error to ignore.\n */\nexport function handlePromiseError(err): void {\n console.warn(err);\n}\n","/**\n * Download a blob as a file with the specified file name.\n */\nexport function downloadBlob(blob: Blob, fileName: string): void {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n}\n\n/**\n * Downloads the specified content as a file with the specified file name and type.\n */\nexport function downloadContent(content: any, fileName: string, fileType = 'text/plain'): void {\n const blob = new Blob([content], { type: fileType });\n downloadBlob(blob, fileName);\n}\n"],"names":["getSignedUrlInternal","uuidv4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/file/extensions.fn.ts","../src/file/util/credentials-mutex.so.ts","../src/file/util/s3-client.ts","../src/file/util/s3-utils.ts","../src/file/actions/sign-url.fn.ts","../src/util/get-resource-name.ts","../src/file/shared.ts","../src/file/file.service.ts","../src/file/actions/delete.fn.ts","../src/file/actions/upload.fn.ts","../src/file/project-access-context.ts","../src/file/models/file-object.model.ts","../src/file/calculate-size.ts","../src/formatters/json-pretty-print.ts","../src/formatters/bytes-to-string.ts","../src/formatters/normalize-date.ts","../src/formatters/normalize-string.ts","../src/formatters/slash.ts","../src/formatters/to-date-format.ts","../src/formatters/to-title-case.ts","../src/formatters/to-friendly-name.ts","../src/formatters/to-money.ts","../src/formatters/to-pascal-case.ts","../src/file/models/assets.ts","../src/file/util/get-display.fn.ts","../src/file/models/folder.ts","../src/file/models/file.ts","../src/file/manifest-parser.ts","../src/file/util/get-parent.fn.ts","../src/api/error.ts","../src/api/error-handler.ts","../src/api/config.ts","../src/auth/current-user.ts","../src/auth/static-token-auth.ts","../src/data/data.service.ts","../src/util/extract-from-object.ts","../src/util/handle-promise.ts","../src/util/download.ts"],"sourcesContent":["\n/**\n * An array of file extensions that can be rendered in a genome viewer\n */\nexport const FILE_TRACK_ANNOTATION = ['bed', 'bed.gz', 'gtf', 'gtf.gz'];\nexport const FILE_TRACK_ALIGNMENTS = ['cram', 'cram.gz']; // TODO: put back bam\nexport const FILE_TRACK_VARIANT = ['vcf', 'vcf.gz'];\nexport const FILE_TRACK_WIG = ['wig', 'wig.gz', 'bw', 'bw.gz', 'bigwig', 'bigwig.gz'];\nexport const FILE_TRACK_SEG = ['seg', 'seg.gz'];\nexport const FILE_TRACK_INDEX_EXTENSIONS = ['tbi', 'bai', 'crai', 'csi'];\nexport const FILE_VITESSCE_EXTENSIONS = ['hdf5', 'h5ad', 'loom'];\nexport const FILE_TRACK_EXTENSIONS_NO_INDEX = [\n ...FILE_TRACK_ANNOTATION,\n ...FILE_TRACK_ALIGNMENTS,\n ...FILE_TRACK_VARIANT,\n ...FILE_TRACK_WIG,\n ...FILE_TRACK_SEG\n];\nexport const FILE_TRACK_EXTENSIONS = [\n ...FILE_TRACK_EXTENSIONS_NO_INDEX,\n ...FILE_TRACK_INDEX_EXTENSIONS\n]\n\n\nexport const FILE_BROWSER_EXTENSIONS = ['html', 'pdf'];\n\n\n/**\n * An array of file extensions that are protein structure files.\n */\nexport const FILE_PROTEIN_STRUCTURE_EXTENSIONS = ['pdb', 'pdb.gz', 'cif', 'cif.gz', 'ent', 'ent.gz', 'mmtf', 'mmtf.gz'];\n/**\n * An array of file extensions that are considered tabular files.\n */\nexport const FILE_DSV_EXTENSIONS = ['tab', 'csv', 'tsv', 'dsv'];\n/**\n * An array of file extensions that contain genomic sequence content.\n */\nexport const FILE_TXT_GENOMICS_EXTENSIONS = ['fasta', 'fna', 'fsa', 'fa', 'fastp', 'fastq', 'faa', 'gbk', 'gff', 'vcf', 'seq'];\n\n/**\n * An array of file extensions that are considered TXT files.\n */\nexport const FILE_TXT_EXTENSIONS = ['txt', 'log', 'yml', 'cfg', 'config', 'xml', 'yaml', ...FILE_DSV_EXTENSIONS, ...FILE_TXT_GENOMICS_EXTENSIONS];\n\n\n/**\n * An array of file extensions that are considered image files.\n */\nexport const FILE_IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'svg'];\n\n/**\n * An array of file extensions that are considered OME (Open Microscopy Environment) files.\n */\nexport const FILE_OME_EXTENSIONS = ['tif', 'ome.tif', 'ome.tiff', 'ome.tif.gz', 'ome.tiff.gz'];\n\n/**\n * An array of file extensions that are rendered as formatted Markdown.\n */\nexport const FILE_MARKDOWN_EXTENSIONS = ['md', 'markdown'];\n\n/**\n * An array of file extensions that can be opened in the browser.\n * Includes common document formats such as HTML, PDF, and JSON, as well as image, DSV, TXT, and OME file formats.\n */\nexport const FILE_EXTENSIONS_TO_OPEN = ['html', 'pdf', 'json', 'fcs',\n ...FILE_IMAGE_EXTENSIONS,\n ...FILE_TXT_EXTENSIONS,\n ...FILE_TRACK_EXTENSIONS,\n ...FILE_PROTEIN_STRUCTURE_EXTENSIONS,\n ...FILE_MARKDOWN_EXTENSIONS\n];\n\n\n/**\n * Checks if a file has an extension that matches one in the provided list.\n * @param filePath The file to check the extension of.\n * @param extensions A list of file endings to check the file against.\n * @returns True or false if the file has an ending in the extensions list.\n */\nexport function matchesExtension(filePath: string, extensions: string[]): boolean {\n filePath = filePath.toLowerCase();\n\n // Decompress the filePath if it ends with .gz\n if (filePath.endsWith('.gz')) {\n filePath = filePath.slice(0, -3); // remove the .gz extension\n }\n\n // Now, get the extension of the file\n const fileExtension = filePath.slice(filePath.lastIndexOf('.') + 1);\n\n // Check if the fileExtension is in the list of extensions\n return extensions.includes(fileExtension);\n}\n","import { AWSCredentials } from '@cirrobio/api-client';\n\nexport class Mutex<T> {\n private mutex = Promise.resolve();\n\n lock(): PromiseLike<() => void> {\n let begin: (unlock: () => void) => void = () => { /* Do nothing */ };\n\n this.mutex = this.mutex.then(() => new Promise(begin));\n\n return new Promise((res) => {\n begin = res;\n });\n }\n\n async dispatch(fn: (() => T) | (() => PromiseLike<T>)): Promise<T> {\n const unlock = await this.lock();\n try {\n return await Promise.resolve(fn());\n } finally {\n unlock();\n }\n }\n}\n\n/**\n * A mutex to ensure that only one request for credentials is made at a time.\n */\nexport const credentialsMutex = new Mutex<AWSCredentials>();\n/**\n * A cache of credentials to avoid making multiple requests for the same credentials.\n */\nexport const credentialsCache: Map<string, AWSCredentials> = new Map<string, AWSCredentials>();\n","import { S3Client } from \"@aws-sdk/client-s3\";\nimport { AWSCredentials } from \"@cirrobio/api-client\";\nimport { S3ClientConfigType } from \"@aws-sdk/client-s3/dist-types/S3Client\";\n\nconst clientCache = new Map<string, S3Client>();\n\nconst clientDefaults: S3ClientConfigType = {\n // Support ipv6 endpoints\n useDualstackEndpoint: true,\n // Protection against not having the correct region (does not work for signed url fn)\n followRegionRedirects: true,\n}\n\nfunction createS3ClientInternal(credentials: AWSCredentials, clientOverrides: S3ClientConfigType): S3Client {\n return new S3Client({\n credentials: {\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n },\n region: credentials.region,\n ...clientDefaults,\n ...clientOverrides\n });\n}\n\n/**\n * Creates an S3 client using the provided credentials.\n */\nexport function createS3Client(credentials: AWSCredentials, clientOverrides: S3ClientConfigType = {}): S3Client {\n // Bypass cache when creating s3 client with overrides, since these values may be changed.\n if (clientOverrides && Object.keys(clientOverrides).length > 0) {\n return createS3ClientInternal(credentials, clientOverrides);\n }\n const cacheKey = `${credentials.accessKeyId}-${credentials.region}`;\n const cachedClient = clientCache.get(cacheKey);\n if (cachedClient) {\n return cachedClient;\n }\n const newClient = createS3ClientInternal(credentials, clientOverrides)\n clientCache.set(cacheKey, newClient);\n return newClient;\n}\n","/**\n * Converts an S3 URI to a bucket and key\n */\nexport function s3UriToParams(uri: string): { Bucket: string, Key: string } {\n const matches = /^s3:\\/\\/([^/]+)\\/(.+)$/.exec(uri);\n if (!matches) {\n throw new Error(`Received invalid uri: '${uri}'`);\n }\n return {\n Bucket: matches[1],\n Key: matches[2],\n };\n}\n\n","import { AWSCredentials } from \"@cirrobio/api-client\";\nimport { GetObjectCommand, GetObjectCommandInput } from \"@aws-sdk/client-s3\";\nimport { getSignedUrl as getSignedUrlInternal } from \"@aws-sdk/s3-request-presigner\";\nimport { createS3Client } from \"../util/s3-client\";\nimport { s3UriToParams } from \"../util/s3-utils\";\nimport { S3ClientConfigType } from \"@aws-sdk/client-s3/dist-types/S3Client\";\n\nexport interface GetFileUrlParams extends GetSignedUrlOptions {\n url: string;\n credentials?: AWSCredentials;\n}\n\nexport interface GetSignedUrlOptions {\n /**\n * Whether to signal the browser to download this file on access\n * (sets content disposition)\n */\n download?: boolean;\n /**\n * Whether to signal the browser to request gzipped content\n */\n gzip?: boolean;\n /**\n * Signed URL expiry timeout\n * Defaults to 5 minutes\n */\n timeout?: number;\n /**\n * Override file name to download (when using download = true)\n */\n filename?: string;\n /**\n * Override the region of the bucket\n */\n region?: string;\n}\n\n/**\n * Get a signed URL for a file in S3 given its S3 URI.\n */\nexport function getSignedUrl({ url, credentials, ...params }: GetFileUrlParams): Promise<string> {\n const clientParams: S3ClientConfigType = {};\n if (params.region) {\n clientParams.region = params.region;\n }\n const client = createS3Client(credentials, clientParams);\n const { Bucket, Key } = s3UriToParams(url);\n const args: GetObjectCommandInput = { Bucket, Key };\n if (params?.download) {\n const fileName = params.filename ?? Key.split('/').pop();\n args.ResponseContentDisposition = `attachment; filename=\"${fileName}\"`\n }\n if (params?.gzip) {\n args.ResponseContentEncoding = 'gzip'\n }\n const command = new GetObjectCommand(args);\n return getSignedUrlInternal(client, command, { expiresIn: 60 * (params?.timeout ?? 5) });\n}\n","\nconst resourcePrefix = 'project-';\n\nexport function getResourceName(projectId: string): string {\n return `${resourcePrefix}${projectId}`;\n}\n\n","import { getResourceName } from \"../util/get-resource-name\";\n\n/**\n * Get the S3 bucket name for a project.\n * Will be deprecated in the future, use domain from manifest instead.\n */\nexport function getProjectS3Bucket(projectId: string): string {\n return getResourceName(projectId)\n}\n","import { AWSCredentials, GenerateProjectFileAccessTokenRequest, ProjectAccessType } from \"@cirrobio/api-client\";\nimport { ProjectFileAccessContext } from \"./project-access-context\";\nimport { credentialsCache, credentialsMutex } from \"./util/credentials-mutex.so\";\nimport { GetFileUrlParams, getSignedUrl, GetSignedUrlOptions } from \"./actions/sign-url.fn\";\nimport { getProjectS3Bucket } from \"./shared\";\nimport { DownloadableFile } from \"./models/file-object.model\";\n\nexport interface IFileCredentialsApi {\n generateProjectFileAccessToken: (params: GenerateProjectFileAccessTokenRequest) => Promise<AWSCredentials>;\n}\n\n/**\n * Service for viewing files in Cirro\n * currently this only operates on files within a project\n */\nexport class FileService {\n constructor(\n private readonly fileCredsApi: IFileCredentialsApi\n ) {}\n\n /**\n * Get contents of a file\n */\n async getProjectFile(file: DownloadableFile, params?: GetSignedUrlOptions): Promise<Response> {\n const url = await this.getSignedUrlFromProjectFile(file, params);\n return fetch(url);\n }\n\n /**\n * Get a signed URL for a file\n */\n async getSignedUrlFromProjectFile(file: DownloadableFile, params?: GetSignedUrlOptions): Promise<string> {\n const credentials = await this.getProjectAccessCredentials(file.fileAccessContext);\n const _params: GetFileUrlParams = {\n ...params,\n filename: file.name,\n url: file.url,\n credentials,\n };\n return getSignedUrl(_params);\n }\n\n /**\n * Get a signed URL for a file given a path\n */\n async getSignedUrlFromProjectPath(fileAccessContext: ProjectFileAccessContext, path: string, params?: GetSignedUrlOptions): Promise<string> {\n const credentials = await this.getProjectAccessCredentials(fileAccessContext);\n const _params: GetFileUrlParams = {\n ...params,\n filename: path.split('/').pop(),\n url: `s3://${getProjectS3Bucket(fileAccessContext.project.id)}/${path}`,\n credentials,\n };\n return getSignedUrl(_params);\n }\n\n /**\n * Get credentials for accessing a project file\n */\n async getProjectAccessCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {\n const accessType = fileAccessContext.fileAccessRequest.accessType;\n // Special case for project download, since we can cache the credentials\n if (accessType === ProjectAccessType.ProjectDownload || accessType === ProjectAccessType.SharedDatasetDownload) {\n return this.getProjectReadCredentials(fileAccessContext);\n }\n return this.fileCredsApi.generateProjectFileAccessToken({ projectId: fileAccessContext.project.id, projectFileAccessRequest: fileAccessContext.fileAccessRequest });\n }\n\n private async getProjectReadCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {\n const projectId = fileAccessContext.project.id;\n // Append datasetId to cache key for shared dataset downloads since we need to generate a new token for each dataset\n let cacheKey = projectId;\n if (fileAccessContext.fileAccessRequest.accessType === ProjectAccessType.SharedDatasetDownload) {\n cacheKey = `${projectId}-${fileAccessContext.fileAccessRequest.datasetId}`;\n }\n\n return credentialsMutex.dispatch(async () => {\n const cachedCredentials = credentialsCache.get(cacheKey);\n const expirationTime = cachedCredentials ? cachedCredentials?.expiration : null;\n const fetchNewCredentials = !expirationTime || expirationTime < new Date();\n if (fetchNewCredentials) {\n const projectFileAccessRequest = fileAccessContext.fileAccessRequest;\n const credentials = await this.fileCredsApi.generateProjectFileAccessToken({ projectId, projectFileAccessRequest });\n credentialsCache.set(cacheKey, credentials);\n return credentials;\n }\n return cachedCredentials;\n });\n }\n}\n","import { AWSCredentials } from \"@cirrobio/api-client\";\nimport { DeleteObjectCommand } from \"@aws-sdk/client-s3\";\nimport { s3UriToParams } from \"../util/s3-utils\";\nimport { createS3Client } from \"../util/s3-client\";\n\nexport interface DeleteFileParams {\n url: string;\n credentials: AWSCredentials;\n}\n\n/**\n * Delete a file from S3 given its URL and credentials.\n */\nexport async function deleteFile({ url, credentials }: DeleteFileParams): Promise<void> {\n const { Bucket, Key } = s3UriToParams(url);\n const cmd = new DeleteObjectCommand({ Bucket, Key });\n await createS3Client(credentials).send(cmd);\n}\n","import { Upload } from \"@aws-sdk/lib-storage\";\nimport { AWSCredentials } from '@cirrobio/api-client';\nimport { createS3Client } from \"../util/s3-client\";\nimport { PutObjectCommandInput } from \"@aws-sdk/client-s3\";\nimport { CreateMultipartUploadRequest } from \"@aws-sdk/client-s3/dist-types/models/models_0\";\n\nexport interface UploadFileParams {\n bucket: string;\n path: string;\n file: File;\n credentials: AWSCredentials;\n metadata?: Record<string, string>;\n}\n\n/**\n * Upload a file to S3\n */\nexport function uploadFile({ bucket, path, file, credentials, metadata }: UploadFileParams): Upload {\n const params: PutObjectCommandInput & CreateMultipartUploadRequest = {\n Bucket: bucket,\n Key: path,\n Body: file,\n ContentType: file.type,\n Metadata: metadata,\n ChecksumType: \"FULL_OBJECT\"\n };\n return new Upload({\n client: createS3Client(credentials),\n queueSize: 4,\n params,\n });\n}\n\n","import { ProjectAccessType, DatasetDetail, ProjectFileAccessRequest, Project } from \"@cirrobio/api-client\";\n\ntype ProjectIdentifiable = Pick<Project, 'id'>;\n\n/**\n * Helper class to encapsulate the file access for a project.\n */\nexport class ProjectFileAccessContext {\n constructor(\n readonly project: ProjectIdentifiable,\n readonly dataset: DatasetDetail,\n readonly fileAccessRequest: ProjectFileAccessRequest\n ) {\n }\n\n static projectDownload(project: ProjectIdentifiable): ProjectFileAccessContext {\n const request: ProjectFileAccessRequest = { accessType: ProjectAccessType.ProjectDownload };\n return new ProjectFileAccessContext(project, null, request);\n }\n\n static datasetDownload(project: ProjectIdentifiable, dataset: DatasetDetail): ProjectFileAccessContext {\n const accessType = dataset.share ? ProjectAccessType.SharedDatasetDownload : ProjectAccessType.ProjectDownload;\n const request: ProjectFileAccessRequest = { accessType, datasetId: dataset.id };\n return new ProjectFileAccessContext(project, dataset, request);\n }\n}\n","import { ProjectFileAccessContext } from \"../project-access-context\";\n\nexport enum FileSystemObjectType {\n FILE = 'file',\n FOLDER = 'folder'\n}\n\n/**\n * Represents a file that can be downloaded\n */\nexport interface DownloadableFile {\n url: string;\n name?: string;\n fileAccessContext: ProjectFileAccessContext;\n}\n\n/**\n * Represents a file in Cirro\n */\nexport interface FileSystemObject extends DownloadableFile {\n /**\n * Unique Id For Object\n */\n id: string;\n /**\n * Object S3 Url\n */\n url: string;\n /**\n * Object Path\n */\n path: string;\n /**\n * Object Display Path\n */\n displayPath: string;\n /**\n * Object Relative Path to base\n */\n relativePath: string;\n /**\n * Object Name\n */\n name: string;\n /**\n * Object Size\n */\n size: number;\n /**\n * Object Kind (PNG, TXT)\n */\n kind: string;\n /**\n * Object Type (File or Folder)\n */\n type: FileSystemObjectType;\n /**\n * Metadata\n */\n metadata?: Record<string, any>;\n /**\n * Access context\n */\n fileAccessContext: ProjectFileAccessContext;\n}\n","import { FileSystemObject } from \"./models/file-object.model\";\n\n/**\n * Calculate the total size of all files in a directory.\n * @param files - An array of FileSystemObject representing the files in the directory.\n * @return The total size of all files in bytes.\n */\nexport function calculateTotalSize(files: Array<FileSystemObject>): number {\n let totalSize = 0;\n for (const file of files) {\n totalSize += file.size;\n }\n return totalSize;\n}\n","/**\n * Pretty prints a JSON object with the specified indentation level.\n * @param obj JSON object to be pretty printed.\n * @param indentLevel Number of spaces to use for indentation.\n */\nexport function jsonPrettyPrint(obj: object, indentLevel=2): string {\n return JSON.stringify(obj, null, indentLevel);\n}\n","/**\n * Format bytes as human-readable text.\n * @param bytes Number of bytes.\n * @param si True to use metric(SI) units, aka powers of 1000. False to use\n * binary(IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\nexport function bytesToString(bytes: number, si = false, dp = 1): string {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return `${bytes} B`;\n }\n\n const units = si\n ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh\n && u < units.length - 1\n );\n\n return `${bytes.toFixed(dp)} ${units[u]}`;\n}\n","/**\n * Normalizes a date to UTC by adjusting for the timezone offset.\n * Useful when you are working with dates that may not include time information.\n * @param date\n */\nexport function normalizeDate(date: Date | string | undefined | null): Date {\n if (!date) throw new Error(\"Attempt to normalize undefined\");\n if (!(date instanceof Date)) date = new Date(date);\n return new Date(date.getTime() - date.getTimezoneOffset() * -60000);\n}\n","/**\n * Normalize a string by trimming it and returning null if it is empty.\n * @param input The string to normalize.\n */\nexport function normalizeString(input: string): string {\n if (!input?.trim()) return null;\n return input.trim();\n}\n","/**\n * Removes the starting slash from a path.\n * @param path Input path\n */\nexport function removeStartingSlash(path: string): string {\n if (!path) return path;\n if (path.startsWith('./')) return path.substring(2);\n if (path.startsWith('/')) return path.substring(1);\n return path;\n}\n\n/**\n * Removes the ending slash from a path.\n * @param path Input path\n */\nexport function removeEndingSlash(path: string): string {\n return path?.endsWith('/') ? path.slice(0, -1) : path;\n}\n","const dateFormat = new Intl.DateTimeFormat('en-US', { month: '2-digit', day: '2-digit', year: '2-digit' });\n\n/**\n * Converts a date string or Date object to MM/DD/YY date string.\n * Ex., \"2023-10-01\" -> \"10/01/23\"\n * @param date Input date string or Date object.\n */\nexport function toDateFormat(date: string | Date): string {\n if (!date) return null;\n const d: Date = (typeof date === 'string') ? new Date(date) : date\n return dateFormat.format(d);\n}\n","/**\n * Converts a string to Title case.\n * Ex., \"hello world\" -> \"Hello world\"\n * @param value\n */\nexport function toTitleCase(value: string): string {\n if (!value) return null;\n return value[0].toUpperCase() + value.slice(1).toLowerCase();\n}\n","import { toTitleCase } from './to-title-case';\n\n/**\n * Converts a field name to a more human-readable format.\n * Ex., \"helloWorld\" -> \"Hello World\"\n * @param value The value to convert.\n */\nexport function toFriendlyName(value: string): string {\n let _value = value.split(/(?=[A-Z])/).join(' ');\n _value = _value.split('_').join(' ');\n _value = _value.split('|').join(' ');\n _value = _value.replace(/ +/g, ' ');\n return toTitleCase(_value);\n}\n","const money = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n});\n\n/**\n * Converts a number or bigint to a formatted money string.\n * Ex., 1234.56 -> $1,234.56\n * @param value Input number or bigint value.\n */\nexport function toMoney(value: number | bigint): string {\n return money.format(value as number);\n}\n","/**\n * Converts a string to PascalCase.\n * Ex., \"hello world\" -> \"HelloWorld\"\n * @param value The string to convert.\n */\nexport function toPascalCase(value: string): string {\n return value\n // Split on non-alphanumeric characters and spaces\n .split(/[^a-zA-Z0-9]+/)\n // Filter out empty strings\n .filter(word => word.length > 0)\n // Capitalize first letter and lowercase the rest\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n // Join all words together\n .join('');\n}\n","import { calculateTotalSize } from \"../calculate-size\";\nimport { bytesToString } from \"../../formatters\";\nimport { FileSystemObject } from \"./file-object.model\";\n\nexport class Assets extends Array<FileSystemObject> {\n private _totalSize: string;\n private _totalSizeBytes: number;\n\n // Total size of all files in human-readable format\n get totalSize(): string {\n if (!this._totalSize) {\n this.calculateSize();\n }\n return this._totalSize;\n }\n\n get totalSizeBytes(): number {\n if (!this._totalSizeBytes) {\n this.calculateSize();\n }\n return this._totalSizeBytes;\n }\n private calculateSize(): void {\n this._totalSizeBytes = calculateTotalSize(this);\n this._totalSize = bytesToString(this._totalSizeBytes)\n }\n}\n","import { removeStartingSlash } from \"../../formatters/slash\";\nimport { FileSystemObject } from \"../models/file-object.model\";\n\nexport function getDisplayPath(file: FileSystemObject, dataPrefix: string = \"data/\") {\n return removeStartingSlash(`${file.path}/${file.name}`.replace(dataPrefix, ''));\n}\n","import { v4 as uuidv4 } from 'uuid';\nimport { FileSystemObject, FileSystemObjectType } from \"./file-object.model\";\nimport { getDisplayPath } from \"../util/get-display.fn\";\nimport { removeStartingSlash } from \"../../formatters/slash\";\n\nexport class Folder implements FileSystemObject {\n readonly id: string;\n readonly url: string;\n readonly path: string;\n readonly name: string;\n readonly domain: string;\n readonly kind = 'Folder';\n readonly fileAccessContext = null;\n readonly size = 0;\n readonly type = FileSystemObjectType.FOLDER;\n\n get displayPath() {\n return getDisplayPath(this);\n }\n\n get relativePath() {\n return removeStartingSlash(`${this.path}/${this.name}`);\n }\n\n constructor(url: string, name: string, path: string, domain: string) {\n this.id = uuidv4();\n this.url = url;\n this.name = name;\n this.path = path;\n this.domain = domain;\n }\n}\n","import { FileSystemObject, FileSystemObjectType } from \"./file-object.model\";\nimport { ProjectFileAccessContext } from \"../project-access-context\";\nimport { v4 as uuidv4 } from 'uuid';\nimport { getDisplayPath } from \"../util/get-display.fn\";\nimport { removeStartingSlash } from \"../../formatters/slash\";\n\nexport class File implements FileSystemObject {\n readonly id: string;\n readonly url: string\n readonly size: number;\n readonly path: string;\n readonly name: string;\n readonly metadata: Record<string, any>;\n readonly fileAccessContext: ProjectFileAccessContext;\n\n get type() {\n return FileSystemObjectType.FILE;\n }\n\n get kind() {\n return this.name.slice(this.name.lastIndexOf('.') + 1);\n }\n\n get displayPath() {\n return getDisplayPath(this);\n }\n\n get relativePath() {\n return removeStartingSlash(`${this.path}/${this.name}`);\n }\n\n constructor(domain: string, file: string, size: number, metadata: Record<string, any>, accessContext: ProjectFileAccessContext) {\n this.id = uuidv4();\n this.url = `${domain}/${file}`;\n this.size = size;\n this.metadata = metadata;\n this.fileAccessContext = accessContext;\n\n const fileFolderIdx = file.lastIndexOf('/');\n if (fileFolderIdx === -1) {\n this.path = '';\n this.name = file;\n } else {\n this.path = file.substring(0, fileFolderIdx);\n this.name = file.substring(fileFolderIdx + 1);\n }\n }\n}\n","import { DatasetAssetsManifest, FileEntry } from '@cirrobio/api-client';\nimport { Assets } from \"./models/assets\";\nimport { Folder } from \"./models/folder\";\nimport { File } from \"./models/file\";\nimport { ProjectFileAccessContext } from \"./project-access-context\";\nimport { removeEndingSlash } from \"../formatters\";\n\n\nexport class ManifestParser {\n private readonly manifest: DatasetAssetsManifest;\n private readonly accessContext: ProjectFileAccessContext;\n\n constructor(manifest: DatasetAssetsManifest, accessContext?: ProjectFileAccessContext) {\n this.manifest = manifest;\n this.accessContext = accessContext;\n }\n\n private get files(): Array<FileEntry> {\n return this.manifest?.files ?? [];\n }\n\n /**\n * Generates asset objects from the manifest, optionally including folder entries.\n */\n public generateAssets(generateFolders = false): Assets {\n const domain = removeEndingSlash(this.manifest?.domain);\n const assets = new Assets();\n\n for (const file of this.files) {\n assets.push(new File(domain, file.path, file.size, file.metadata, this.accessContext));\n }\n\n // Optionally add folder entries\n if (generateFolders) {\n assets.push(...this.generateFolderAssets(assets, domain));\n }\n\n return assets;\n }\n\n // Create folder entries, useful for visualizing folders as items in a file browser\n private generateFolderAssets(assets: Assets, domain: string): Folder[] {\n const folderSet = new Set<string>();\n\n // Collect all unique folder paths\n for (const asset of assets) {\n const parts = asset.path.split('/').filter(p => p.length > 0);\n let currentPath = '';\n for (const part of parts) {\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n folderSet.add(currentPath);\n }\n }\n\n // Create Folder objects from unique paths\n return Array.from(folderSet)\n .map(folderPath => {\n const name = folderPath.substring(folderPath.lastIndexOf('/') + 1);\n const parentPath = folderPath.includes('/') ? folderPath.substring(0, folderPath.lastIndexOf('/')) : '';\n return new Folder(folderPath, name, parentPath, domain);\n });\n }\n}\n","\n/**\n * Returns the parent directory of a given file path.\n */\nexport function getParentPath(path: string): string {\n return path.split(\"/\").slice(0, -1).join(\"/\") ?? \"\"\n}\n","export class ApiError extends Error {\n errors: string[];\n errorCode: number;\n\n constructor(message: string, errors: string[], errorCode: number) {\n super(message);\n this.errors = errors;\n this.errorCode = errorCode;\n }\n}\n","import { Middleware, ResponseContext } from \"@cirrobio/api-client\";\nimport { ApiError } from \"./error\";\n\nexport class PortalErrorHandler implements Middleware {\n async post(context: ResponseContext): Promise<Response | void> {\n const { response } = context;\n if (response && (response.status >= 200 && response.status < 300)) {\n return response;\n }\n\n // Handle Error\n let errorMessage: string;\n const errors = [];\n try {\n const err = await response.json();\n console.warn(err);\n if ('errorDetail' in err) {\n errorMessage = err.errorDetail;\n errors.push(err.errors.map((e: any) => e.message));\n } else {\n errorMessage = err.message;\n }\n } catch (ignore) {\n errorMessage = \"Unknown Error\";\n }\n throw new ApiError(errorMessage, errors, response.status);\n }\n}\n","import { PortalErrorHandler } from \"./error-handler\";\nimport { Configuration } from \"@cirrobio/api-client\";\n\ninterface GetConfigParams {\n tokenGetter: () => Promise<string>;\n basePath?: string;\n}\n\nexport const generateApiConfig = ({ basePath = \"/api\", tokenGetter}: GetConfigParams) => {\n return new Configuration({\n basePath,\n accessToken: tokenGetter,\n middleware: [\n new PortalErrorHandler()\n ],\n });\n}\n","export class CurrentUser {\n username: string;\n /**\n * The unique identifier for the user\n */\n sub: string\n\n /**\n * The time the user authenticated\n */\n authTime: Date;\n\n /**\n * The groups the user belongs to\n */\n groups: string[];\n\n static fromCognitoUser(idTokenPayload: Record<string, any>): CurrentUser {\n return {\n username: idTokenPayload[\"cognito:username\"] ?? idTokenPayload.username,\n sub: idTokenPayload.sub,\n authTime: new Date(idTokenPayload.auth_time * 1000),\n groups: idTokenPayload[\"cognito:groups\"] ?? [],\n };\n }\n}\n","import { SystemInfoResponse } from \"@cirrobio/api-client\";\nimport { AuthenticationProvider } from \"./authentication-provider\";\nimport { CurrentUser } from \"./current-user\";\n\n\nexport class StaticTokenAuthProvider implements AuthenticationProvider {\n constructor(\n readonly token: string\n ) {\n }\n\n public configure(_ignore: SystemInfoResponse): void {\n console.log('StaticTokenAuthProvider loaded');\n }\n\n public async getAccessToken() {\n return this.token;\n }\n\n public async getCurrentUser() {\n const accessToken = await this.getAccessToken();\n const parsedToken = JSON.parse(atob(accessToken.split('.')[1]));\n return CurrentUser.fromCognitoUser(parsedToken);\n }\n\n public forceRefresh(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import {\n AppRegistrationsApi,\n AuditApi,\n BillingApi,\n ComputeEnvironmentApi,\n Configuration,\n DashboardsApi,\n DatasetsApi,\n ExecutionApi,\n FeedApi,\n FileApi,\n GovernanceApi,\n MetadataApi,\n MetricsApi,\n ProcessesApi,\n ProjectRequestsApi,\n ProjectsApi,\n ReferencesApi,\n SharedFilesystemsApi,\n SharingApi,\n SheetsApi,\n SystemApi,\n ToolsApi,\n UsersApi,\n WorkspacesApi\n} from \"@cirrobio/api-client\";\nimport { generateApiConfig } from \"../api/config\";\n\ninterface DataServiceParams {\n tokenGetter: () => Promise<string>;\n basePath?: string;\n}\n\nexport class DataService {\n private readonly apiConfig: Configuration;\n\n private readonly _appRegistrationsApi: AppRegistrationsApi;\n private readonly _auditApi: AuditApi;\n private readonly _billingApi: BillingApi;\n private readonly _computeEnvironmentApi: ComputeEnvironmentApi;\n private readonly _dashboardsApi: DashboardsApi;\n private readonly _datasetsApi: DatasetsApi;\n private readonly _executionApi: ExecutionApi;\n private readonly _feedApi: FeedApi;\n private readonly _fileApi: FileApi;\n private readonly _governanceApi: GovernanceApi;\n private readonly _metadataApi: MetadataApi;\n private readonly _metricsApi: MetricsApi;\n private readonly _processesApi: ProcessesApi;\n private readonly _projectRequestsApi: ProjectRequestsApi;\n private readonly _projectsApi: ProjectsApi;\n private readonly _referencesApi: ReferencesApi;\n private readonly _sharedFilesystemsApi: SharedFilesystemsApi;\n private readonly _sharingApi: SharingApi;\n private readonly _sheetsApi: SheetsApi;\n private readonly _systemApi: SystemApi;\n private readonly _toolsApi: ToolsApi;\n private readonly _usersApi: UsersApi;\n private readonly _workspacesApi: WorkspacesApi;\n\n constructor({ tokenGetter, basePath = \"/api\" }: DataServiceParams) {\n this.apiConfig = generateApiConfig({ basePath, tokenGetter });\n\n this._appRegistrationsApi = new AppRegistrationsApi(this.apiConfig);\n this._auditApi = new AuditApi(this.apiConfig);\n this._billingApi = new BillingApi(this.apiConfig);\n this._computeEnvironmentApi = new ComputeEnvironmentApi(this.apiConfig);\n this._dashboardsApi = new DashboardsApi(this.apiConfig);\n this._datasetsApi = new DatasetsApi(this.apiConfig);\n this._executionApi = new ExecutionApi(this.apiConfig);\n this._feedApi = new FeedApi(this.apiConfig);\n this._fileApi = new FileApi(this.apiConfig);\n this._governanceApi = new GovernanceApi(this.apiConfig);\n this._metadataApi = new MetadataApi(this.apiConfig);\n this._metricsApi = new MetricsApi(this.apiConfig);\n this._processesApi = new ProcessesApi(this.apiConfig);\n this._projectRequestsApi = new ProjectRequestsApi(this.apiConfig);\n this._projectsApi = new ProjectsApi(this.apiConfig);\n this._referencesApi = new ReferencesApi(this.apiConfig);\n this._sharedFilesystemsApi = new SharedFilesystemsApi(this.apiConfig);\n this._sharingApi = new SharingApi(this.apiConfig);\n this._sheetsApi = new SheetsApi(this.apiConfig);\n this._systemApi = new SystemApi(this.apiConfig);\n this._toolsApi = new ToolsApi(this.apiConfig);\n this._usersApi = new UsersApi(this.apiConfig);\n this._workspacesApi = new WorkspacesApi(this.apiConfig);\n }\n\n get appRegistrations(): AppRegistrationsApi {\n return this._appRegistrationsApi;\n }\n get audit(): AuditApi {\n return this._auditApi;\n }\n get billing(): BillingApi {\n return this._billingApi;\n }\n get computeEnvironments(): ComputeEnvironmentApi {\n return this._computeEnvironmentApi;\n }\n get dashboards(): DashboardsApi {\n return this._dashboardsApi;\n }\n get datasets(): DatasetsApi {\n return this._datasetsApi;\n }\n get execution(): ExecutionApi {\n return this._executionApi;\n }\n get feed(): FeedApi {\n return this._feedApi;\n }\n get file(): FileApi {\n return this._fileApi;\n }\n get governance(): GovernanceApi {\n return this._governanceApi;\n }\n get metadata(): MetadataApi {\n return this._metadataApi;\n }\n get metrics(): MetricsApi {\n return this._metricsApi;\n }\n get processes(): ProcessesApi {\n return this._processesApi;\n }\n get projectRequests(): ProjectRequestsApi {\n return this._projectRequestsApi;\n }\n get projects(): ProjectsApi {\n return this._projectsApi;\n }\n get references(): ReferencesApi {\n return this._referencesApi;\n }\n get sharedFilesystems(): SharedFilesystemsApi {\n return this._sharedFilesystemsApi;\n }\n get sharing(): SharingApi {\n return this._sharingApi;\n }\n get sheets(): SheetsApi {\n return this._sheetsApi;\n }\n get system(): SystemApi {\n return this._systemApi;\n }\n get tools(): ToolsApi {\n return this._toolsApi;\n }\n get users(): UsersApi {\n return this._usersApi;\n }\n get workspaces(): WorkspacesApi {\n return this._workspacesApi;\n }\n}\n","/**\n * Extracts a value from an object using the json path notation, i.e. $.test.id\n * @param path JSON path to the value\n * @param obj Object to extract the value from\n */\nexport function extractFromObject(path: string, obj: object): any {\n const pathParts = path.slice(2).split('.')\n return pathParts.reduce(function(o, k) {\n return o && o[k];\n }, obj);\n}\n","/**\n * Ignores dangling promise rejections.\n * @param err The error to ignore.\n */\nexport function handlePromiseError(err): void {\n console.warn(err);\n}\n","/**\n * Download a blob as a file with the specified file name.\n */\nexport function downloadBlob(blob: Blob, fileName: string): void {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n}\n\n/**\n * Downloads the specified content as a file with the specified file name and type.\n */\nexport function downloadContent(content: any, fileName: string, fileType = 'text/plain'): void {\n const blob = new Blob([content], { type: fileType });\n downloadBlob(blob, fileName);\n}\n"],"names":["getSignedUrlInternal","uuidv4"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -621,9 +621,10 @@ function getParentPath(path) {
|
|
|
621
621
|
}
|
|
622
622
|
|
|
623
623
|
class ApiError extends Error {
|
|
624
|
-
constructor(message, errors) {
|
|
624
|
+
constructor(message, errors, errorCode) {
|
|
625
625
|
super(message);
|
|
626
626
|
this.errors = errors;
|
|
627
|
+
this.errorCode = errorCode;
|
|
627
628
|
}
|
|
628
629
|
}
|
|
629
630
|
|
|
@@ -650,7 +651,7 @@ class PortalErrorHandler {
|
|
|
650
651
|
catch (ignore) {
|
|
651
652
|
errorMessage = "Unknown Error";
|
|
652
653
|
}
|
|
653
|
-
throw new ApiError(errorMessage, errors);
|
|
654
|
+
throw new ApiError(errorMessage, errors, response.status);
|
|
654
655
|
}
|
|
655
656
|
}
|
|
656
657
|
|
|
@@ -699,24 +700,33 @@ class StaticTokenAuthProvider {
|
|
|
699
700
|
class DataService {
|
|
700
701
|
constructor({ tokenGetter, basePath = "/api" }) {
|
|
701
702
|
this.apiConfig = generateApiConfig({ basePath, tokenGetter });
|
|
703
|
+
this._appRegistrationsApi = new apiClient.AppRegistrationsApi(this.apiConfig);
|
|
702
704
|
this._auditApi = new apiClient.AuditApi(this.apiConfig);
|
|
703
705
|
this._billingApi = new apiClient.BillingApi(this.apiConfig);
|
|
704
706
|
this._computeEnvironmentApi = new apiClient.ComputeEnvironmentApi(this.apiConfig);
|
|
707
|
+
this._dashboardsApi = new apiClient.DashboardsApi(this.apiConfig);
|
|
705
708
|
this._datasetsApi = new apiClient.DatasetsApi(this.apiConfig);
|
|
706
709
|
this._executionApi = new apiClient.ExecutionApi(this.apiConfig);
|
|
710
|
+
this._feedApi = new apiClient.FeedApi(this.apiConfig);
|
|
707
711
|
this._fileApi = new apiClient.FileApi(this.apiConfig);
|
|
708
712
|
this._governanceApi = new apiClient.GovernanceApi(this.apiConfig);
|
|
709
713
|
this._metadataApi = new apiClient.MetadataApi(this.apiConfig);
|
|
714
|
+
this._metricsApi = new apiClient.MetricsApi(this.apiConfig);
|
|
710
715
|
this._processesApi = new apiClient.ProcessesApi(this.apiConfig);
|
|
711
716
|
this._projectRequestsApi = new apiClient.ProjectRequestsApi(this.apiConfig);
|
|
712
717
|
this._projectsApi = new apiClient.ProjectsApi(this.apiConfig);
|
|
713
718
|
this._referencesApi = new apiClient.ReferencesApi(this.apiConfig);
|
|
719
|
+
this._sharedFilesystemsApi = new apiClient.SharedFilesystemsApi(this.apiConfig);
|
|
714
720
|
this._sharingApi = new apiClient.SharingApi(this.apiConfig);
|
|
721
|
+
this._sheetsApi = new apiClient.SheetsApi(this.apiConfig);
|
|
715
722
|
this._systemApi = new apiClient.SystemApi(this.apiConfig);
|
|
716
723
|
this._toolsApi = new apiClient.ToolsApi(this.apiConfig);
|
|
717
724
|
this._usersApi = new apiClient.UsersApi(this.apiConfig);
|
|
718
725
|
this._workspacesApi = new apiClient.WorkspacesApi(this.apiConfig);
|
|
719
726
|
}
|
|
727
|
+
get appRegistrations() {
|
|
728
|
+
return this._appRegistrationsApi;
|
|
729
|
+
}
|
|
720
730
|
get audit() {
|
|
721
731
|
return this._auditApi;
|
|
722
732
|
}
|
|
@@ -726,12 +736,18 @@ class DataService {
|
|
|
726
736
|
get computeEnvironments() {
|
|
727
737
|
return this._computeEnvironmentApi;
|
|
728
738
|
}
|
|
739
|
+
get dashboards() {
|
|
740
|
+
return this._dashboardsApi;
|
|
741
|
+
}
|
|
729
742
|
get datasets() {
|
|
730
743
|
return this._datasetsApi;
|
|
731
744
|
}
|
|
732
745
|
get execution() {
|
|
733
746
|
return this._executionApi;
|
|
734
747
|
}
|
|
748
|
+
get feed() {
|
|
749
|
+
return this._feedApi;
|
|
750
|
+
}
|
|
735
751
|
get file() {
|
|
736
752
|
return this._fileApi;
|
|
737
753
|
}
|
|
@@ -741,6 +757,9 @@ class DataService {
|
|
|
741
757
|
get metadata() {
|
|
742
758
|
return this._metadataApi;
|
|
743
759
|
}
|
|
760
|
+
get metrics() {
|
|
761
|
+
return this._metricsApi;
|
|
762
|
+
}
|
|
744
763
|
get processes() {
|
|
745
764
|
return this._processesApi;
|
|
746
765
|
}
|
|
@@ -753,9 +772,15 @@ class DataService {
|
|
|
753
772
|
get references() {
|
|
754
773
|
return this._referencesApi;
|
|
755
774
|
}
|
|
775
|
+
get sharedFilesystems() {
|
|
776
|
+
return this._sharedFilesystemsApi;
|
|
777
|
+
}
|
|
756
778
|
get sharing() {
|
|
757
779
|
return this._sharingApi;
|
|
758
780
|
}
|
|
781
|
+
get sheets() {
|
|
782
|
+
return this._sheetsApi;
|
|
783
|
+
}
|
|
759
784
|
get system() {
|
|
760
785
|
return this._systemApi;
|
|
761
786
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/file/extensions.fn.ts","../src/file/util/credentials-mutex.so.ts","../src/file/util/s3-client.ts","../src/file/util/s3-utils.ts","../src/file/actions/sign-url.fn.ts","../src/util/get-resource-name.ts","../src/file/shared.ts","../src/file/file.service.ts","../src/file/actions/delete.fn.ts","../src/file/actions/upload.fn.ts","../src/file/project-access-context.ts","../src/file/models/file-object.model.ts","../src/file/calculate-size.ts","../src/formatters/json-pretty-print.ts","../src/formatters/bytes-to-string.ts","../src/formatters/normalize-date.ts","../src/formatters/normalize-string.ts","../src/formatters/slash.ts","../src/formatters/to-date-format.ts","../src/formatters/to-title-case.ts","../src/formatters/to-friendly-name.ts","../src/formatters/to-money.ts","../src/formatters/to-pascal-case.ts","../src/file/models/assets.ts","../src/file/util/get-display.fn.ts","../src/file/models/folder.ts","../src/file/models/file.ts","../src/file/manifest-parser.ts","../src/file/util/get-parent.fn.ts","../src/api/error.ts","../src/api/error-handler.ts","../src/api/config.ts","../src/auth/current-user.ts","../src/auth/static-token-auth.ts","../src/data/data.service.ts","../src/util/extract-from-object.ts","../src/util/handle-promise.ts","../src/util/download.ts"],"sourcesContent":["\n/**\n * An array of file extensions that can be rendered in a genome viewer\n */\nexport const FILE_TRACK_ANNOTATION = ['bed', 'bed.gz', 'gtf', 'gtf.gz'];\nexport const FILE_TRACK_ALIGNMENTS = ['cram', 'cram.gz']; // TODO: put back bam\nexport const FILE_TRACK_VARIANT = ['vcf', 'vcf.gz'];\nexport const FILE_TRACK_WIG = ['wig', 'wig.gz', 'bw', 'bw.gz', 'bigwig', 'bigwig.gz'];\nexport const FILE_TRACK_SEG = ['seg', 'seg.gz'];\nexport const FILE_TRACK_INDEX_EXTENSIONS = ['tbi', 'bai', 'crai', 'csi'];\nexport const FILE_VITESSCE_EXTENSIONS = ['hdf5', 'h5ad', 'loom'];\nexport const FILE_TRACK_EXTENSIONS_NO_INDEX = [\n ...FILE_TRACK_ANNOTATION,\n ...FILE_TRACK_ALIGNMENTS,\n ...FILE_TRACK_VARIANT,\n ...FILE_TRACK_WIG,\n ...FILE_TRACK_SEG\n];\nexport const FILE_TRACK_EXTENSIONS = [\n ...FILE_TRACK_EXTENSIONS_NO_INDEX,\n ...FILE_TRACK_INDEX_EXTENSIONS\n]\n\n\nexport const FILE_BROWSER_EXTENSIONS = ['html', 'pdf'];\n\n\n/**\n * An array of file extensions that are protein structure files.\n */\nexport const FILE_PROTEIN_STRUCTURE_EXTENSIONS = ['pdb', 'pdb.gz', 'cif', 'cif.gz', 'ent', 'ent.gz', 'mmtf', 'mmtf.gz'];\n/**\n * An array of file extensions that are considered tabular files.\n */\nexport const FILE_DSV_EXTENSIONS = ['tab', 'csv', 'tsv', 'dsv'];\n/**\n * An array of file extensions that contain genomic sequence content.\n */\nexport const FILE_TXT_GENOMICS_EXTENSIONS = ['fasta', 'fna', 'fsa', 'fa', 'fastp', 'fastq', 'faa', 'gbk', 'gff', 'vcf', 'seq'];\n\n/**\n * An array of file extensions that are considered TXT files.\n */\nexport const FILE_TXT_EXTENSIONS = ['txt', 'log', 'yml', 'cfg', 'config', 'xml', 'yaml', ...FILE_DSV_EXTENSIONS, ...FILE_TXT_GENOMICS_EXTENSIONS];\n\n\n/**\n * An array of file extensions that are considered image files.\n */\nexport const FILE_IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'svg'];\n\n/**\n * An array of file extensions that are considered OME (Open Microscopy Environment) files.\n */\nexport const FILE_OME_EXTENSIONS = ['tif', 'ome.tif', 'ome.tiff', 'ome.tif.gz', 'ome.tiff.gz'];\n\n/**\n * An array of file extensions that are rendered as formatted Markdown.\n */\nexport const FILE_MARKDOWN_EXTENSIONS = ['md', 'markdown'];\n\n/**\n * An array of file extensions that can be opened in the browser.\n * Includes common document formats such as HTML, PDF, and JSON, as well as image, DSV, TXT, and OME file formats.\n */\nexport const FILE_EXTENSIONS_TO_OPEN = ['html', 'pdf', 'json', 'fcs',\n ...FILE_IMAGE_EXTENSIONS,\n ...FILE_TXT_EXTENSIONS,\n ...FILE_TRACK_EXTENSIONS,\n ...FILE_PROTEIN_STRUCTURE_EXTENSIONS,\n ...FILE_MARKDOWN_EXTENSIONS\n];\n\n\n/**\n * Checks if a file has an extension that matches one in the provided list.\n * @param filePath The file to check the extension of.\n * @param extensions A list of file endings to check the file against.\n * @returns True or false if the file has an ending in the extensions list.\n */\nexport function matchesExtension(filePath: string, extensions: string[]): boolean {\n filePath = filePath.toLowerCase();\n\n // Decompress the filePath if it ends with .gz\n if (filePath.endsWith('.gz')) {\n filePath = filePath.slice(0, -3); // remove the .gz extension\n }\n\n // Now, get the extension of the file\n const fileExtension = filePath.slice(filePath.lastIndexOf('.') + 1);\n\n // Check if the fileExtension is in the list of extensions\n return extensions.includes(fileExtension);\n}\n","import { AWSCredentials } from '@cirrobio/api-client';\n\nexport class Mutex<T> {\n private mutex = Promise.resolve();\n\n lock(): PromiseLike<() => void> {\n let begin: (unlock: () => void) => void = () => { /* Do nothing */ };\n\n this.mutex = this.mutex.then(() => new Promise(begin));\n\n return new Promise((res) => {\n begin = res;\n });\n }\n\n async dispatch(fn: (() => T) | (() => PromiseLike<T>)): Promise<T> {\n const unlock = await this.lock();\n try {\n return await Promise.resolve(fn());\n } finally {\n unlock();\n }\n }\n}\n\n/**\n * A mutex to ensure that only one request for credentials is made at a time.\n */\nexport const credentialsMutex = new Mutex<AWSCredentials>();\n/**\n * A cache of credentials to avoid making multiple requests for the same credentials.\n */\nexport const credentialsCache: Map<string, AWSCredentials> = new Map<string, AWSCredentials>();\n","import { S3Client } from \"@aws-sdk/client-s3\";\nimport { AWSCredentials } from \"@cirrobio/api-client\";\nimport { S3ClientConfigType } from \"@aws-sdk/client-s3/dist-types/S3Client\";\n\nconst clientCache = new Map<string, S3Client>();\n\nconst clientDefaults: S3ClientConfigType = {\n // Support ipv6 endpoints\n useDualstackEndpoint: true,\n // Protection against not having the correct region (does not work for signed url fn)\n followRegionRedirects: true,\n}\n\nfunction createS3ClientInternal(credentials: AWSCredentials, clientOverrides: S3ClientConfigType): S3Client {\n return new S3Client({\n credentials: {\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n },\n region: credentials.region,\n ...clientDefaults,\n ...clientOverrides\n });\n}\n\n/**\n * Creates an S3 client using the provided credentials.\n */\nexport function createS3Client(credentials: AWSCredentials, clientOverrides: S3ClientConfigType = {}): S3Client {\n // Bypass cache when creating s3 client with overrides, since these values may be changed.\n if (clientOverrides && Object.keys(clientOverrides).length > 0) {\n return createS3ClientInternal(credentials, clientOverrides);\n }\n const cacheKey = `${credentials.accessKeyId}-${credentials.region}`;\n const cachedClient = clientCache.get(cacheKey);\n if (cachedClient) {\n return cachedClient;\n }\n const newClient = createS3ClientInternal(credentials, clientOverrides)\n clientCache.set(cacheKey, newClient);\n return newClient;\n}\n","/**\n * Converts an S3 URI to a bucket and key\n */\nexport function s3UriToParams(uri: string): { Bucket: string, Key: string } {\n const matches = /^s3:\\/\\/([^/]+)\\/(.+)$/.exec(uri);\n if (!matches) {\n throw new Error(`Received invalid uri: '${uri}'`);\n }\n return {\n Bucket: matches[1],\n Key: matches[2],\n };\n}\n\n","import { AWSCredentials } from \"@cirrobio/api-client\";\nimport { GetObjectCommand, GetObjectCommandInput } from \"@aws-sdk/client-s3\";\nimport { getSignedUrl as getSignedUrlInternal } from \"@aws-sdk/s3-request-presigner\";\nimport { createS3Client } from \"../util/s3-client\";\nimport { s3UriToParams } from \"../util/s3-utils\";\nimport { S3ClientConfigType } from \"@aws-sdk/client-s3/dist-types/S3Client\";\n\nexport interface GetFileUrlParams extends GetSignedUrlOptions {\n url: string;\n credentials?: AWSCredentials;\n}\n\nexport interface GetSignedUrlOptions {\n /**\n * Whether to signal the browser to download this file on access\n * (sets content disposition)\n */\n download?: boolean;\n /**\n * Whether to signal the browser to request gzipped content\n */\n gzip?: boolean;\n /**\n * Signed URL expiry timeout\n * Defaults to 5 minutes\n */\n timeout?: number;\n /**\n * Override file name to download (when using download = true)\n */\n filename?: string;\n /**\n * Override the region of the bucket\n */\n region?: string;\n}\n\n/**\n * Get a signed URL for a file in S3 given its S3 URI.\n */\nexport function getSignedUrl({ url, credentials, ...params }: GetFileUrlParams): Promise<string> {\n const clientParams: S3ClientConfigType = {};\n if (params.region) {\n clientParams.region = params.region;\n }\n const client = createS3Client(credentials, clientParams);\n const { Bucket, Key } = s3UriToParams(url);\n const args: GetObjectCommandInput = { Bucket, Key };\n if (params?.download) {\n const fileName = params.filename ?? Key.split('/').pop();\n args.ResponseContentDisposition = `attachment; filename=\"${fileName}\"`\n }\n if (params?.gzip) {\n args.ResponseContentEncoding = 'gzip'\n }\n const command = new GetObjectCommand(args);\n return getSignedUrlInternal(client, command, { expiresIn: 60 * (params?.timeout ?? 5) });\n}\n","\nconst resourcePrefix = 'project-';\n\nexport function getResourceName(projectId: string): string {\n return `${resourcePrefix}${projectId}`;\n}\n\n","import { getResourceName } from \"../util/get-resource-name\";\n\n/**\n * Get the S3 bucket name for a project.\n * Will be deprecated in the future, use domain from manifest instead.\n */\nexport function getProjectS3Bucket(projectId: string): string {\n return getResourceName(projectId)\n}\n","import { AWSCredentials, GenerateProjectFileAccessTokenRequest, ProjectAccessType } from \"@cirrobio/api-client\";\nimport { ProjectFileAccessContext } from \"./project-access-context\";\nimport { credentialsCache, credentialsMutex } from \"./util/credentials-mutex.so\";\nimport { GetFileUrlParams, getSignedUrl, GetSignedUrlOptions } from \"./actions/sign-url.fn\";\nimport { getProjectS3Bucket } from \"./shared\";\nimport { DownloadableFile } from \"./models/file-object.model\";\n\nexport interface IFileCredentialsApi {\n generateProjectFileAccessToken: (params: GenerateProjectFileAccessTokenRequest) => Promise<AWSCredentials>;\n}\n\n/**\n * Service for viewing files in Cirro\n * currently this only operates on files within a project\n */\nexport class FileService {\n constructor(\n private readonly fileCredsApi: IFileCredentialsApi\n ) {}\n\n /**\n * Get contents of a file\n */\n async getProjectFile(file: DownloadableFile, params?: GetSignedUrlOptions): Promise<Response> {\n const url = await this.getSignedUrlFromProjectFile(file, params);\n return fetch(url);\n }\n\n /**\n * Get a signed URL for a file\n */\n async getSignedUrlFromProjectFile(file: DownloadableFile, params?: GetSignedUrlOptions): Promise<string> {\n const credentials = await this.getProjectAccessCredentials(file.fileAccessContext);\n const _params: GetFileUrlParams = {\n ...params,\n filename: file.name,\n url: file.url,\n credentials,\n };\n return getSignedUrl(_params);\n }\n\n /**\n * Get a signed URL for a file given a path\n */\n async getSignedUrlFromProjectPath(fileAccessContext: ProjectFileAccessContext, path: string, params?: GetSignedUrlOptions): Promise<string> {\n const credentials = await this.getProjectAccessCredentials(fileAccessContext);\n const _params: GetFileUrlParams = {\n ...params,\n filename: path.split('/').pop(),\n url: `s3://${getProjectS3Bucket(fileAccessContext.project.id)}/${path}`,\n credentials,\n };\n return getSignedUrl(_params);\n }\n\n /**\n * Get credentials for accessing a project file\n */\n async getProjectAccessCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {\n const accessType = fileAccessContext.fileAccessRequest.accessType;\n // Special case for project download, since we can cache the credentials\n if (accessType === ProjectAccessType.ProjectDownload || accessType === ProjectAccessType.SharedDatasetDownload) {\n return this.getProjectReadCredentials(fileAccessContext);\n }\n return this.fileCredsApi.generateProjectFileAccessToken({ projectId: fileAccessContext.project.id, projectFileAccessRequest: fileAccessContext.fileAccessRequest });\n }\n\n private async getProjectReadCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {\n const projectId = fileAccessContext.project.id;\n // Append datasetId to cache key for shared dataset downloads since we need to generate a new token for each dataset\n let cacheKey = projectId;\n if (fileAccessContext.fileAccessRequest.accessType === ProjectAccessType.SharedDatasetDownload) {\n cacheKey = `${projectId}-${fileAccessContext.fileAccessRequest.datasetId}`;\n }\n\n return credentialsMutex.dispatch(async () => {\n const cachedCredentials = credentialsCache.get(cacheKey);\n const expirationTime = cachedCredentials ? cachedCredentials?.expiration : null;\n const fetchNewCredentials = !expirationTime || expirationTime < new Date();\n if (fetchNewCredentials) {\n const projectFileAccessRequest = fileAccessContext.fileAccessRequest;\n const credentials = await this.fileCredsApi.generateProjectFileAccessToken({ projectId, projectFileAccessRequest });\n credentialsCache.set(cacheKey, credentials);\n return credentials;\n }\n return cachedCredentials;\n });\n }\n}\n","import { AWSCredentials } from \"@cirrobio/api-client\";\nimport { DeleteObjectCommand } from \"@aws-sdk/client-s3\";\nimport { s3UriToParams } from \"../util/s3-utils\";\nimport { createS3Client } from \"../util/s3-client\";\n\nexport interface DeleteFileParams {\n url: string;\n credentials: AWSCredentials;\n}\n\n/**\n * Delete a file from S3 given its URL and credentials.\n */\nexport async function deleteFile({ url, credentials }: DeleteFileParams): Promise<void> {\n const { Bucket, Key } = s3UriToParams(url);\n const cmd = new DeleteObjectCommand({ Bucket, Key });\n await createS3Client(credentials).send(cmd);\n}\n","import { Upload } from \"@aws-sdk/lib-storage\";\nimport { AWSCredentials } from '@cirrobio/api-client';\nimport { createS3Client } from \"../util/s3-client\";\nimport { PutObjectCommandInput } from \"@aws-sdk/client-s3\";\nimport { CreateMultipartUploadRequest } from \"@aws-sdk/client-s3/dist-types/models/models_0\";\n\nexport interface UploadFileParams {\n bucket: string;\n path: string;\n file: File;\n credentials: AWSCredentials;\n metadata?: Record<string, string>;\n}\n\n/**\n * Upload a file to S3\n */\nexport function uploadFile({ bucket, path, file, credentials, metadata }: UploadFileParams): Upload {\n const params: PutObjectCommandInput & CreateMultipartUploadRequest = {\n Bucket: bucket,\n Key: path,\n Body: file,\n ContentType: file.type,\n Metadata: metadata,\n ChecksumType: \"FULL_OBJECT\"\n };\n return new Upload({\n client: createS3Client(credentials),\n queueSize: 4,\n params,\n });\n}\n\n","import { ProjectAccessType, DatasetDetail, ProjectFileAccessRequest, Project } from \"@cirrobio/api-client\";\n\ntype ProjectIdentifiable = Pick<Project, 'id'>;\n\n/**\n * Helper class to encapsulate the file access for a project.\n */\nexport class ProjectFileAccessContext {\n constructor(\n readonly project: ProjectIdentifiable,\n readonly dataset: DatasetDetail,\n readonly fileAccessRequest: ProjectFileAccessRequest\n ) {\n }\n\n static projectDownload(project: ProjectIdentifiable): ProjectFileAccessContext {\n const request: ProjectFileAccessRequest = { accessType: ProjectAccessType.ProjectDownload };\n return new ProjectFileAccessContext(project, null, request);\n }\n\n static datasetDownload(project: ProjectIdentifiable, dataset: DatasetDetail): ProjectFileAccessContext {\n const accessType = dataset.share ? ProjectAccessType.SharedDatasetDownload : ProjectAccessType.ProjectDownload;\n const request: ProjectFileAccessRequest = { accessType, datasetId: dataset.id };\n return new ProjectFileAccessContext(project, dataset, request);\n }\n}\n","import { ProjectFileAccessContext } from \"../project-access-context\";\n\nexport enum FileSystemObjectType {\n FILE = 'file',\n FOLDER = 'folder'\n}\n\n/**\n * Represents a file that can be downloaded\n */\nexport interface DownloadableFile {\n url: string;\n name?: string;\n fileAccessContext: ProjectFileAccessContext;\n}\n\n/**\n * Represents a file in Cirro\n */\nexport interface FileSystemObject extends DownloadableFile {\n /**\n * Unique Id For Object\n */\n id: string;\n /**\n * Object S3 Url\n */\n url: string;\n /**\n * Object Path\n */\n path: string;\n /**\n * Object Display Path\n */\n displayPath: string;\n /**\n * Object Relative Path to base\n */\n relativePath: string;\n /**\n * Object Name\n */\n name: string;\n /**\n * Object Size\n */\n size: number;\n /**\n * Object Kind (PNG, TXT)\n */\n kind: string;\n /**\n * Object Type (File or Folder)\n */\n type: FileSystemObjectType;\n /**\n * Metadata\n */\n metadata?: Record<string, any>;\n /**\n * Access context\n */\n fileAccessContext: ProjectFileAccessContext;\n}\n","import { FileSystemObject } from \"./models/file-object.model\";\n\n/**\n * Calculate the total size of all files in a directory.\n * @param files - An array of FileSystemObject representing the files in the directory.\n * @return The total size of all files in bytes.\n */\nexport function calculateTotalSize(files: Array<FileSystemObject>): number {\n let totalSize = 0;\n for (const file of files) {\n totalSize += file.size;\n }\n return totalSize;\n}\n","/**\n * Pretty prints a JSON object with the specified indentation level.\n * @param obj JSON object to be pretty printed.\n * @param indentLevel Number of spaces to use for indentation.\n */\nexport function jsonPrettyPrint(obj: object, indentLevel=2): string {\n return JSON.stringify(obj, null, indentLevel);\n}\n","/**\n * Format bytes as human-readable text.\n * @param bytes Number of bytes.\n * @param si True to use metric(SI) units, aka powers of 1000. False to use\n * binary(IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\nexport function bytesToString(bytes: number, si = false, dp = 1): string {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return `${bytes} B`;\n }\n\n const units = si\n ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh\n && u < units.length - 1\n );\n\n return `${bytes.toFixed(dp)} ${units[u]}`;\n}\n","/**\n * Normalizes a date to UTC by adjusting for the timezone offset.\n * Useful when you are working with dates that may not include time information.\n * @param date\n */\nexport function normalizeDate(date: Date | string | undefined | null): Date {\n if (!date) throw new Error(\"Attempt to normalize undefined\");\n if (!(date instanceof Date)) date = new Date(date);\n return new Date(date.getTime() - date.getTimezoneOffset() * -60000);\n}\n","/**\n * Normalize a string by trimming it and returning null if it is empty.\n * @param input The string to normalize.\n */\nexport function normalizeString(input: string): string {\n if (!input?.trim()) return null;\n return input.trim();\n}\n","/**\n * Removes the starting slash from a path.\n * @param path Input path\n */\nexport function removeStartingSlash(path: string): string {\n if (!path) return path;\n if (path.startsWith('./')) return path.substring(2);\n if (path.startsWith('/')) return path.substring(1);\n return path;\n}\n\n/**\n * Removes the ending slash from a path.\n * @param path Input path\n */\nexport function removeEndingSlash(path: string): string {\n return path?.endsWith('/') ? path.slice(0, -1) : path;\n}\n","const dateFormat = new Intl.DateTimeFormat('en-US', { month: '2-digit', day: '2-digit', year: '2-digit' });\n\n/**\n * Converts a date string or Date object to MM/DD/YY date string.\n * Ex., \"2023-10-01\" -> \"10/01/23\"\n * @param date Input date string or Date object.\n */\nexport function toDateFormat(date: string | Date): string {\n if (!date) return null;\n const d: Date = (typeof date === 'string') ? new Date(date) : date\n return dateFormat.format(d);\n}\n","/**\n * Converts a string to Title case.\n * Ex., \"hello world\" -> \"Hello world\"\n * @param value\n */\nexport function toTitleCase(value: string): string {\n if (!value) return null;\n return value[0].toUpperCase() + value.slice(1).toLowerCase();\n}\n","import { toTitleCase } from './to-title-case';\n\n/**\n * Converts a field name to a more human-readable format.\n * Ex., \"helloWorld\" -> \"Hello World\"\n * @param value The value to convert.\n */\nexport function toFriendlyName(value: string): string {\n let _value = value.split(/(?=[A-Z])/).join(' ');\n _value = _value.split('_').join(' ');\n _value = _value.split('|').join(' ');\n _value = _value.replace(/ +/g, ' ');\n return toTitleCase(_value);\n}\n","const money = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n});\n\n/**\n * Converts a number or bigint to a formatted money string.\n * Ex., 1234.56 -> $1,234.56\n * @param value Input number or bigint value.\n */\nexport function toMoney(value: number | bigint): string {\n return money.format(value as number);\n}\n","/**\n * Converts a string to PascalCase.\n * Ex., \"hello world\" -> \"HelloWorld\"\n * @param value The string to convert.\n */\nexport function toPascalCase(value: string): string {\n return value\n // Split on non-alphanumeric characters and spaces\n .split(/[^a-zA-Z0-9]+/)\n // Filter out empty strings\n .filter(word => word.length > 0)\n // Capitalize first letter and lowercase the rest\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n // Join all words together\n .join('');\n}\n","import { calculateTotalSize } from \"../calculate-size\";\nimport { bytesToString } from \"../../formatters\";\nimport { FileSystemObject } from \"./file-object.model\";\n\nexport class Assets extends Array<FileSystemObject> {\n private _totalSize: string;\n private _totalSizeBytes: number;\n\n // Total size of all files in human-readable format\n get totalSize(): string {\n if (!this._totalSize) {\n this.calculateSize();\n }\n return this._totalSize;\n }\n\n get totalSizeBytes(): number {\n if (!this._totalSizeBytes) {\n this.calculateSize();\n }\n return this._totalSizeBytes;\n }\n private calculateSize(): void {\n this._totalSizeBytes = calculateTotalSize(this);\n this._totalSize = bytesToString(this._totalSizeBytes)\n }\n}\n","import { removeStartingSlash } from \"../../formatters/slash\";\nimport { FileSystemObject } from \"../models/file-object.model\";\n\nexport function getDisplayPath(file: FileSystemObject, dataPrefix: string = \"data/\") {\n return removeStartingSlash(`${file.path}/${file.name}`.replace(dataPrefix, ''));\n}\n","import { v4 as uuidv4 } from 'uuid';\nimport { FileSystemObject, FileSystemObjectType } from \"./file-object.model\";\nimport { getDisplayPath } from \"../util/get-display.fn\";\nimport { removeStartingSlash } from \"../../formatters/slash\";\n\nexport class Folder implements FileSystemObject {\n readonly id: string;\n readonly url: string;\n readonly path: string;\n readonly name: string;\n readonly domain: string;\n readonly kind = 'Folder';\n readonly fileAccessContext = null;\n readonly size = 0;\n readonly type = FileSystemObjectType.FOLDER;\n\n get displayPath() {\n return getDisplayPath(this);\n }\n\n get relativePath() {\n return removeStartingSlash(`${this.path}/${this.name}`);\n }\n\n constructor(url: string, name: string, path: string, domain: string) {\n this.id = uuidv4();\n this.url = url;\n this.name = name;\n this.path = path;\n this.domain = domain;\n }\n}\n","import { FileSystemObject, FileSystemObjectType } from \"./file-object.model\";\nimport { ProjectFileAccessContext } from \"../project-access-context\";\nimport { v4 as uuidv4 } from 'uuid';\nimport { getDisplayPath } from \"../util/get-display.fn\";\nimport { removeStartingSlash } from \"../../formatters/slash\";\n\nexport class File implements FileSystemObject {\n readonly id: string;\n readonly url: string\n readonly size: number;\n readonly path: string;\n readonly name: string;\n readonly metadata: Record<string, any>;\n readonly fileAccessContext: ProjectFileAccessContext;\n\n get type() {\n return FileSystemObjectType.FILE;\n }\n\n get kind() {\n return this.name.slice(this.name.lastIndexOf('.') + 1);\n }\n\n get displayPath() {\n return getDisplayPath(this);\n }\n\n get relativePath() {\n return removeStartingSlash(`${this.path}/${this.name}`);\n }\n\n constructor(domain: string, file: string, size: number, metadata: Record<string, any>, accessContext: ProjectFileAccessContext) {\n this.id = uuidv4();\n this.url = `${domain}/${file}`;\n this.size = size;\n this.metadata = metadata;\n this.fileAccessContext = accessContext;\n\n const fileFolderIdx = file.lastIndexOf('/');\n if (fileFolderIdx === -1) {\n this.path = '';\n this.name = file;\n } else {\n this.path = file.substring(0, fileFolderIdx);\n this.name = file.substring(fileFolderIdx + 1);\n }\n }\n}\n","import { DatasetAssetsManifest, FileEntry } from '@cirrobio/api-client';\nimport { Assets } from \"./models/assets\";\nimport { Folder } from \"./models/folder\";\nimport { File } from \"./models/file\";\nimport { ProjectFileAccessContext } from \"./project-access-context\";\nimport { removeEndingSlash } from \"../formatters\";\n\n\nexport class ManifestParser {\n private readonly manifest: DatasetAssetsManifest;\n private readonly accessContext: ProjectFileAccessContext;\n\n constructor(manifest: DatasetAssetsManifest, accessContext?: ProjectFileAccessContext) {\n this.manifest = manifest;\n this.accessContext = accessContext;\n }\n\n private get files(): Array<FileEntry> {\n return this.manifest?.files ?? [];\n }\n\n /**\n * Generates asset objects from the manifest, optionally including folder entries.\n */\n public generateAssets(generateFolders = false): Assets {\n const domain = removeEndingSlash(this.manifest?.domain);\n const assets = new Assets();\n\n for (const file of this.files) {\n assets.push(new File(domain, file.path, file.size, file.metadata, this.accessContext));\n }\n\n // Optionally add folder entries\n if (generateFolders) {\n assets.push(...this.generateFolderAssets(assets, domain));\n }\n\n return assets;\n }\n\n // Create folder entries, useful for visualizing folders as items in a file browser\n private generateFolderAssets(assets: Assets, domain: string): Folder[] {\n const folderSet = new Set<string>();\n\n // Collect all unique folder paths\n for (const asset of assets) {\n const parts = asset.path.split('/').filter(p => p.length > 0);\n let currentPath = '';\n for (const part of parts) {\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n folderSet.add(currentPath);\n }\n }\n\n // Create Folder objects from unique paths\n return Array.from(folderSet)\n .map(folderPath => {\n const name = folderPath.substring(folderPath.lastIndexOf('/') + 1);\n const parentPath = folderPath.includes('/') ? folderPath.substring(0, folderPath.lastIndexOf('/')) : '';\n return new Folder(folderPath, name, parentPath, domain);\n });\n }\n}\n","\n/**\n * Returns the parent directory of a given file path.\n */\nexport function getParentPath(path: string): string {\n return path.split(\"/\").slice(0, -1).join(\"/\") ?? \"\"\n}\n","export class ApiError extends Error {\n errors: string[];\n\n constructor(message: string, errors: string[]) {\n super(message);\n this.errors = errors;\n }\n}\n","import { Middleware, ResponseContext } from \"@cirrobio/api-client\";\nimport { ApiError } from \"./error\";\n\nexport class PortalErrorHandler implements Middleware {\n async post(context: ResponseContext): Promise<Response | void> {\n const { response } = context;\n if (response && (response.status >= 200 && response.status < 300)) {\n return response;\n }\n\n // Handle Error\n let errorMessage: string;\n const errors = [];\n try {\n const err = await response.json();\n console.warn(err);\n if ('errorDetail' in err) {\n errorMessage = err.errorDetail;\n errors.push(err.errors.map((e: any) => e.message));\n } else {\n errorMessage = err.message;\n }\n } catch (ignore) {\n errorMessage = \"Unknown Error\";\n }\n throw new ApiError(errorMessage, errors);\n }\n}\n","import { PortalErrorHandler } from \"./error-handler\";\nimport { Configuration } from \"@cirrobio/api-client\";\n\ninterface GetConfigParams {\n tokenGetter: () => Promise<string>;\n basePath?: string;\n}\n\nexport const generateApiConfig = ({ basePath = \"/api\", tokenGetter}: GetConfigParams) => {\n return new Configuration({\n basePath,\n accessToken: tokenGetter,\n middleware: [\n new PortalErrorHandler()\n ],\n });\n}\n","export class CurrentUser {\n username: string;\n /**\n * The unique identifier for the user\n */\n sub: string\n\n /**\n * The time the user authenticated\n */\n authTime: Date;\n\n /**\n * The groups the user belongs to\n */\n groups: string[];\n\n static fromCognitoUser(idTokenPayload: Record<string, any>): CurrentUser {\n return {\n username: idTokenPayload[\"cognito:username\"] ?? idTokenPayload.username,\n sub: idTokenPayload.sub,\n authTime: new Date(idTokenPayload.auth_time * 1000),\n groups: idTokenPayload[\"cognito:groups\"] ?? [],\n };\n }\n}\n","import { SystemInfoResponse } from \"@cirrobio/api-client\";\nimport { AuthenticationProvider } from \"./authentication-provider\";\nimport { CurrentUser } from \"./current-user\";\n\n\nexport class StaticTokenAuthProvider implements AuthenticationProvider {\n constructor(\n readonly token: string\n ) {\n }\n\n public configure(_ignore: SystemInfoResponse): void {\n console.log('StaticTokenAuthProvider loaded');\n }\n\n public async getAccessToken() {\n return this.token;\n }\n\n public async getCurrentUser() {\n const accessToken = await this.getAccessToken();\n const parsedToken = JSON.parse(atob(accessToken.split('.')[1]));\n return CurrentUser.fromCognitoUser(parsedToken);\n }\n\n public forceRefresh(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import {\n AuditApi,\n BillingApi,\n ComputeEnvironmentApi,\n Configuration,\n DatasetsApi,\n ExecutionApi,\n FileApi,\n GovernanceApi,\n MetadataApi,\n ProcessesApi,\n ProjectRequestsApi,\n ProjectsApi,\n ReferencesApi,\n SharingApi,\n SystemApi,\n ToolsApi,\n UsersApi,\n WorkspacesApi\n} from \"@cirrobio/api-client\";\nimport { generateApiConfig } from \"../api/config\";\n\ninterface DataServiceParams {\n tokenGetter: () => Promise<string>;\n basePath?: string;\n}\n\nexport class DataService {\n private readonly apiConfig: Configuration;\n\n private readonly _auditApi: AuditApi;\n private readonly _billingApi: BillingApi;\n private readonly _computeEnvironmentApi: ComputeEnvironmentApi;\n private readonly _datasetsApi: DatasetsApi;\n private readonly _executionApi: ExecutionApi;\n private readonly _fileApi: FileApi;\n private readonly _governanceApi: GovernanceApi;\n private readonly _metadataApi: MetadataApi;\n private readonly _processesApi: ProcessesApi;\n private readonly _projectRequestsApi: ProjectRequestsApi;\n private readonly _projectsApi: ProjectsApi;\n private readonly _referencesApi: ReferencesApi;\n private readonly _sharingApi: SharingApi;\n private readonly _systemApi: SystemApi;\n private readonly _toolsApi: ToolsApi;\n private readonly _usersApi: UsersApi;\n private readonly _workspacesApi: WorkspacesApi;\n\n constructor({ tokenGetter, basePath = \"/api\" }: DataServiceParams) {\n this.apiConfig = generateApiConfig({ basePath, tokenGetter });\n\n this._auditApi = new AuditApi(this.apiConfig);\n this._billingApi = new BillingApi(this.apiConfig);\n this._computeEnvironmentApi = new ComputeEnvironmentApi(this.apiConfig);\n this._datasetsApi = new DatasetsApi(this.apiConfig);\n this._executionApi = new ExecutionApi(this.apiConfig);\n this._fileApi = new FileApi(this.apiConfig);\n this._governanceApi = new GovernanceApi(this.apiConfig);\n this._metadataApi = new MetadataApi(this.apiConfig);\n this._processesApi = new ProcessesApi(this.apiConfig);\n this._projectRequestsApi = new ProjectRequestsApi(this.apiConfig);\n this._projectsApi = new ProjectsApi(this.apiConfig);\n this._referencesApi = new ReferencesApi(this.apiConfig);\n this._sharingApi = new SharingApi(this.apiConfig);\n this._systemApi = new SystemApi(this.apiConfig);\n this._toolsApi = new ToolsApi(this.apiConfig);\n this._usersApi = new UsersApi(this.apiConfig);\n this._workspacesApi = new WorkspacesApi(this.apiConfig);\n }\n\n get audit(): AuditApi {\n return this._auditApi;\n }\n get billing(): BillingApi {\n return this._billingApi;\n }\n get computeEnvironments(): ComputeEnvironmentApi {\n return this._computeEnvironmentApi;\n }\n get datasets(): DatasetsApi {\n return this._datasetsApi;\n }\n get execution(): ExecutionApi {\n return this._executionApi;\n }\n get file(): FileApi {\n return this._fileApi;\n }\n get governance(): GovernanceApi {\n return this._governanceApi;\n }\n get metadata(): MetadataApi {\n return this._metadataApi;\n }\n get processes(): ProcessesApi {\n return this._processesApi;\n }\n get projectRequests(): ProjectRequestsApi {\n return this._projectRequestsApi;\n }\n get projects(): ProjectsApi {\n return this._projectsApi;\n }\n get references(): ReferencesApi {\n return this._referencesApi;\n }\n get sharing(): SharingApi {\n return this._sharingApi;\n }\n get system(): SystemApi {\n return this._systemApi;\n }\n get tools(): ToolsApi {\n return this._toolsApi;\n }\n get users(): UsersApi {\n return this._usersApi;\n }\n get workspaces(): WorkspacesApi {\n return this._workspacesApi;\n }\n}\n","/**\n * Extracts a value from an object using the json path notation, i.e. $.test.id\n * @param path JSON path to the value\n * @param obj Object to extract the value from\n */\nexport function extractFromObject(path: string, obj: object): any {\n const pathParts = path.slice(2).split('.')\n return pathParts.reduce(function(o, k) {\n return o && o[k];\n }, obj);\n}\n","/**\n * Ignores dangling promise rejections.\n * @param err The error to ignore.\n */\nexport function handlePromiseError(err): void {\n console.warn(err);\n}\n","/**\n * Download a blob as a file with the specified file name.\n */\nexport function downloadBlob(blob: Blob, fileName: string): void {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n}\n\n/**\n * Downloads the specified content as a file with the specified file name and type.\n */\nexport function downloadContent(content: any, fileName: string, fileType = 'text/plain'): void {\n const blob = new Blob([content], { type: fileType });\n downloadBlob(blob, fileName);\n}\n"],"names":["S3Client","GetObjectCommand","getSignedUrlInternal","ProjectAccessType","DeleteObjectCommand","Upload","FileSystemObjectType","uuidv4","Configuration","AuditApi","BillingApi","ComputeEnvironmentApi","DatasetsApi","ExecutionApi","FileApi","GovernanceApi","MetadataApi","ProcessesApi","ProjectRequestsApi","ProjectsApi","ReferencesApi","SharingApi","SystemApi","ToolsApi","UsersApi","WorkspacesApi"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/file/extensions.fn.ts","../src/file/util/credentials-mutex.so.ts","../src/file/util/s3-client.ts","../src/file/util/s3-utils.ts","../src/file/actions/sign-url.fn.ts","../src/util/get-resource-name.ts","../src/file/shared.ts","../src/file/file.service.ts","../src/file/actions/delete.fn.ts","../src/file/actions/upload.fn.ts","../src/file/project-access-context.ts","../src/file/models/file-object.model.ts","../src/file/calculate-size.ts","../src/formatters/json-pretty-print.ts","../src/formatters/bytes-to-string.ts","../src/formatters/normalize-date.ts","../src/formatters/normalize-string.ts","../src/formatters/slash.ts","../src/formatters/to-date-format.ts","../src/formatters/to-title-case.ts","../src/formatters/to-friendly-name.ts","../src/formatters/to-money.ts","../src/formatters/to-pascal-case.ts","../src/file/models/assets.ts","../src/file/util/get-display.fn.ts","../src/file/models/folder.ts","../src/file/models/file.ts","../src/file/manifest-parser.ts","../src/file/util/get-parent.fn.ts","../src/api/error.ts","../src/api/error-handler.ts","../src/api/config.ts","../src/auth/current-user.ts","../src/auth/static-token-auth.ts","../src/data/data.service.ts","../src/util/extract-from-object.ts","../src/util/handle-promise.ts","../src/util/download.ts"],"sourcesContent":["\n/**\n * An array of file extensions that can be rendered in a genome viewer\n */\nexport const FILE_TRACK_ANNOTATION = ['bed', 'bed.gz', 'gtf', 'gtf.gz'];\nexport const FILE_TRACK_ALIGNMENTS = ['cram', 'cram.gz']; // TODO: put back bam\nexport const FILE_TRACK_VARIANT = ['vcf', 'vcf.gz'];\nexport const FILE_TRACK_WIG = ['wig', 'wig.gz', 'bw', 'bw.gz', 'bigwig', 'bigwig.gz'];\nexport const FILE_TRACK_SEG = ['seg', 'seg.gz'];\nexport const FILE_TRACK_INDEX_EXTENSIONS = ['tbi', 'bai', 'crai', 'csi'];\nexport const FILE_VITESSCE_EXTENSIONS = ['hdf5', 'h5ad', 'loom'];\nexport const FILE_TRACK_EXTENSIONS_NO_INDEX = [\n ...FILE_TRACK_ANNOTATION,\n ...FILE_TRACK_ALIGNMENTS,\n ...FILE_TRACK_VARIANT,\n ...FILE_TRACK_WIG,\n ...FILE_TRACK_SEG\n];\nexport const FILE_TRACK_EXTENSIONS = [\n ...FILE_TRACK_EXTENSIONS_NO_INDEX,\n ...FILE_TRACK_INDEX_EXTENSIONS\n]\n\n\nexport const FILE_BROWSER_EXTENSIONS = ['html', 'pdf'];\n\n\n/**\n * An array of file extensions that are protein structure files.\n */\nexport const FILE_PROTEIN_STRUCTURE_EXTENSIONS = ['pdb', 'pdb.gz', 'cif', 'cif.gz', 'ent', 'ent.gz', 'mmtf', 'mmtf.gz'];\n/**\n * An array of file extensions that are considered tabular files.\n */\nexport const FILE_DSV_EXTENSIONS = ['tab', 'csv', 'tsv', 'dsv'];\n/**\n * An array of file extensions that contain genomic sequence content.\n */\nexport const FILE_TXT_GENOMICS_EXTENSIONS = ['fasta', 'fna', 'fsa', 'fa', 'fastp', 'fastq', 'faa', 'gbk', 'gff', 'vcf', 'seq'];\n\n/**\n * An array of file extensions that are considered TXT files.\n */\nexport const FILE_TXT_EXTENSIONS = ['txt', 'log', 'yml', 'cfg', 'config', 'xml', 'yaml', ...FILE_DSV_EXTENSIONS, ...FILE_TXT_GENOMICS_EXTENSIONS];\n\n\n/**\n * An array of file extensions that are considered image files.\n */\nexport const FILE_IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'svg'];\n\n/**\n * An array of file extensions that are considered OME (Open Microscopy Environment) files.\n */\nexport const FILE_OME_EXTENSIONS = ['tif', 'ome.tif', 'ome.tiff', 'ome.tif.gz', 'ome.tiff.gz'];\n\n/**\n * An array of file extensions that are rendered as formatted Markdown.\n */\nexport const FILE_MARKDOWN_EXTENSIONS = ['md', 'markdown'];\n\n/**\n * An array of file extensions that can be opened in the browser.\n * Includes common document formats such as HTML, PDF, and JSON, as well as image, DSV, TXT, and OME file formats.\n */\nexport const FILE_EXTENSIONS_TO_OPEN = ['html', 'pdf', 'json', 'fcs',\n ...FILE_IMAGE_EXTENSIONS,\n ...FILE_TXT_EXTENSIONS,\n ...FILE_TRACK_EXTENSIONS,\n ...FILE_PROTEIN_STRUCTURE_EXTENSIONS,\n ...FILE_MARKDOWN_EXTENSIONS\n];\n\n\n/**\n * Checks if a file has an extension that matches one in the provided list.\n * @param filePath The file to check the extension of.\n * @param extensions A list of file endings to check the file against.\n * @returns True or false if the file has an ending in the extensions list.\n */\nexport function matchesExtension(filePath: string, extensions: string[]): boolean {\n filePath = filePath.toLowerCase();\n\n // Decompress the filePath if it ends with .gz\n if (filePath.endsWith('.gz')) {\n filePath = filePath.slice(0, -3); // remove the .gz extension\n }\n\n // Now, get the extension of the file\n const fileExtension = filePath.slice(filePath.lastIndexOf('.') + 1);\n\n // Check if the fileExtension is in the list of extensions\n return extensions.includes(fileExtension);\n}\n","import { AWSCredentials } from '@cirrobio/api-client';\n\nexport class Mutex<T> {\n private mutex = Promise.resolve();\n\n lock(): PromiseLike<() => void> {\n let begin: (unlock: () => void) => void = () => { /* Do nothing */ };\n\n this.mutex = this.mutex.then(() => new Promise(begin));\n\n return new Promise((res) => {\n begin = res;\n });\n }\n\n async dispatch(fn: (() => T) | (() => PromiseLike<T>)): Promise<T> {\n const unlock = await this.lock();\n try {\n return await Promise.resolve(fn());\n } finally {\n unlock();\n }\n }\n}\n\n/**\n * A mutex to ensure that only one request for credentials is made at a time.\n */\nexport const credentialsMutex = new Mutex<AWSCredentials>();\n/**\n * A cache of credentials to avoid making multiple requests for the same credentials.\n */\nexport const credentialsCache: Map<string, AWSCredentials> = new Map<string, AWSCredentials>();\n","import { S3Client } from \"@aws-sdk/client-s3\";\nimport { AWSCredentials } from \"@cirrobio/api-client\";\nimport { S3ClientConfigType } from \"@aws-sdk/client-s3/dist-types/S3Client\";\n\nconst clientCache = new Map<string, S3Client>();\n\nconst clientDefaults: S3ClientConfigType = {\n // Support ipv6 endpoints\n useDualstackEndpoint: true,\n // Protection against not having the correct region (does not work for signed url fn)\n followRegionRedirects: true,\n}\n\nfunction createS3ClientInternal(credentials: AWSCredentials, clientOverrides: S3ClientConfigType): S3Client {\n return new S3Client({\n credentials: {\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n },\n region: credentials.region,\n ...clientDefaults,\n ...clientOverrides\n });\n}\n\n/**\n * Creates an S3 client using the provided credentials.\n */\nexport function createS3Client(credentials: AWSCredentials, clientOverrides: S3ClientConfigType = {}): S3Client {\n // Bypass cache when creating s3 client with overrides, since these values may be changed.\n if (clientOverrides && Object.keys(clientOverrides).length > 0) {\n return createS3ClientInternal(credentials, clientOverrides);\n }\n const cacheKey = `${credentials.accessKeyId}-${credentials.region}`;\n const cachedClient = clientCache.get(cacheKey);\n if (cachedClient) {\n return cachedClient;\n }\n const newClient = createS3ClientInternal(credentials, clientOverrides)\n clientCache.set(cacheKey, newClient);\n return newClient;\n}\n","/**\n * Converts an S3 URI to a bucket and key\n */\nexport function s3UriToParams(uri: string): { Bucket: string, Key: string } {\n const matches = /^s3:\\/\\/([^/]+)\\/(.+)$/.exec(uri);\n if (!matches) {\n throw new Error(`Received invalid uri: '${uri}'`);\n }\n return {\n Bucket: matches[1],\n Key: matches[2],\n };\n}\n\n","import { AWSCredentials } from \"@cirrobio/api-client\";\nimport { GetObjectCommand, GetObjectCommandInput } from \"@aws-sdk/client-s3\";\nimport { getSignedUrl as getSignedUrlInternal } from \"@aws-sdk/s3-request-presigner\";\nimport { createS3Client } from \"../util/s3-client\";\nimport { s3UriToParams } from \"../util/s3-utils\";\nimport { S3ClientConfigType } from \"@aws-sdk/client-s3/dist-types/S3Client\";\n\nexport interface GetFileUrlParams extends GetSignedUrlOptions {\n url: string;\n credentials?: AWSCredentials;\n}\n\nexport interface GetSignedUrlOptions {\n /**\n * Whether to signal the browser to download this file on access\n * (sets content disposition)\n */\n download?: boolean;\n /**\n * Whether to signal the browser to request gzipped content\n */\n gzip?: boolean;\n /**\n * Signed URL expiry timeout\n * Defaults to 5 minutes\n */\n timeout?: number;\n /**\n * Override file name to download (when using download = true)\n */\n filename?: string;\n /**\n * Override the region of the bucket\n */\n region?: string;\n}\n\n/**\n * Get a signed URL for a file in S3 given its S3 URI.\n */\nexport function getSignedUrl({ url, credentials, ...params }: GetFileUrlParams): Promise<string> {\n const clientParams: S3ClientConfigType = {};\n if (params.region) {\n clientParams.region = params.region;\n }\n const client = createS3Client(credentials, clientParams);\n const { Bucket, Key } = s3UriToParams(url);\n const args: GetObjectCommandInput = { Bucket, Key };\n if (params?.download) {\n const fileName = params.filename ?? Key.split('/').pop();\n args.ResponseContentDisposition = `attachment; filename=\"${fileName}\"`\n }\n if (params?.gzip) {\n args.ResponseContentEncoding = 'gzip'\n }\n const command = new GetObjectCommand(args);\n return getSignedUrlInternal(client, command, { expiresIn: 60 * (params?.timeout ?? 5) });\n}\n","\nconst resourcePrefix = 'project-';\n\nexport function getResourceName(projectId: string): string {\n return `${resourcePrefix}${projectId}`;\n}\n\n","import { getResourceName } from \"../util/get-resource-name\";\n\n/**\n * Get the S3 bucket name for a project.\n * Will be deprecated in the future, use domain from manifest instead.\n */\nexport function getProjectS3Bucket(projectId: string): string {\n return getResourceName(projectId)\n}\n","import { AWSCredentials, GenerateProjectFileAccessTokenRequest, ProjectAccessType } from \"@cirrobio/api-client\";\nimport { ProjectFileAccessContext } from \"./project-access-context\";\nimport { credentialsCache, credentialsMutex } from \"./util/credentials-mutex.so\";\nimport { GetFileUrlParams, getSignedUrl, GetSignedUrlOptions } from \"./actions/sign-url.fn\";\nimport { getProjectS3Bucket } from \"./shared\";\nimport { DownloadableFile } from \"./models/file-object.model\";\n\nexport interface IFileCredentialsApi {\n generateProjectFileAccessToken: (params: GenerateProjectFileAccessTokenRequest) => Promise<AWSCredentials>;\n}\n\n/**\n * Service for viewing files in Cirro\n * currently this only operates on files within a project\n */\nexport class FileService {\n constructor(\n private readonly fileCredsApi: IFileCredentialsApi\n ) {}\n\n /**\n * Get contents of a file\n */\n async getProjectFile(file: DownloadableFile, params?: GetSignedUrlOptions): Promise<Response> {\n const url = await this.getSignedUrlFromProjectFile(file, params);\n return fetch(url);\n }\n\n /**\n * Get a signed URL for a file\n */\n async getSignedUrlFromProjectFile(file: DownloadableFile, params?: GetSignedUrlOptions): Promise<string> {\n const credentials = await this.getProjectAccessCredentials(file.fileAccessContext);\n const _params: GetFileUrlParams = {\n ...params,\n filename: file.name,\n url: file.url,\n credentials,\n };\n return getSignedUrl(_params);\n }\n\n /**\n * Get a signed URL for a file given a path\n */\n async getSignedUrlFromProjectPath(fileAccessContext: ProjectFileAccessContext, path: string, params?: GetSignedUrlOptions): Promise<string> {\n const credentials = await this.getProjectAccessCredentials(fileAccessContext);\n const _params: GetFileUrlParams = {\n ...params,\n filename: path.split('/').pop(),\n url: `s3://${getProjectS3Bucket(fileAccessContext.project.id)}/${path}`,\n credentials,\n };\n return getSignedUrl(_params);\n }\n\n /**\n * Get credentials for accessing a project file\n */\n async getProjectAccessCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {\n const accessType = fileAccessContext.fileAccessRequest.accessType;\n // Special case for project download, since we can cache the credentials\n if (accessType === ProjectAccessType.ProjectDownload || accessType === ProjectAccessType.SharedDatasetDownload) {\n return this.getProjectReadCredentials(fileAccessContext);\n }\n return this.fileCredsApi.generateProjectFileAccessToken({ projectId: fileAccessContext.project.id, projectFileAccessRequest: fileAccessContext.fileAccessRequest });\n }\n\n private async getProjectReadCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {\n const projectId = fileAccessContext.project.id;\n // Append datasetId to cache key for shared dataset downloads since we need to generate a new token for each dataset\n let cacheKey = projectId;\n if (fileAccessContext.fileAccessRequest.accessType === ProjectAccessType.SharedDatasetDownload) {\n cacheKey = `${projectId}-${fileAccessContext.fileAccessRequest.datasetId}`;\n }\n\n return credentialsMutex.dispatch(async () => {\n const cachedCredentials = credentialsCache.get(cacheKey);\n const expirationTime = cachedCredentials ? cachedCredentials?.expiration : null;\n const fetchNewCredentials = !expirationTime || expirationTime < new Date();\n if (fetchNewCredentials) {\n const projectFileAccessRequest = fileAccessContext.fileAccessRequest;\n const credentials = await this.fileCredsApi.generateProjectFileAccessToken({ projectId, projectFileAccessRequest });\n credentialsCache.set(cacheKey, credentials);\n return credentials;\n }\n return cachedCredentials;\n });\n }\n}\n","import { AWSCredentials } from \"@cirrobio/api-client\";\nimport { DeleteObjectCommand } from \"@aws-sdk/client-s3\";\nimport { s3UriToParams } from \"../util/s3-utils\";\nimport { createS3Client } from \"../util/s3-client\";\n\nexport interface DeleteFileParams {\n url: string;\n credentials: AWSCredentials;\n}\n\n/**\n * Delete a file from S3 given its URL and credentials.\n */\nexport async function deleteFile({ url, credentials }: DeleteFileParams): Promise<void> {\n const { Bucket, Key } = s3UriToParams(url);\n const cmd = new DeleteObjectCommand({ Bucket, Key });\n await createS3Client(credentials).send(cmd);\n}\n","import { Upload } from \"@aws-sdk/lib-storage\";\nimport { AWSCredentials } from '@cirrobio/api-client';\nimport { createS3Client } from \"../util/s3-client\";\nimport { PutObjectCommandInput } from \"@aws-sdk/client-s3\";\nimport { CreateMultipartUploadRequest } from \"@aws-sdk/client-s3/dist-types/models/models_0\";\n\nexport interface UploadFileParams {\n bucket: string;\n path: string;\n file: File;\n credentials: AWSCredentials;\n metadata?: Record<string, string>;\n}\n\n/**\n * Upload a file to S3\n */\nexport function uploadFile({ bucket, path, file, credentials, metadata }: UploadFileParams): Upload {\n const params: PutObjectCommandInput & CreateMultipartUploadRequest = {\n Bucket: bucket,\n Key: path,\n Body: file,\n ContentType: file.type,\n Metadata: metadata,\n ChecksumType: \"FULL_OBJECT\"\n };\n return new Upload({\n client: createS3Client(credentials),\n queueSize: 4,\n params,\n });\n}\n\n","import { ProjectAccessType, DatasetDetail, ProjectFileAccessRequest, Project } from \"@cirrobio/api-client\";\n\ntype ProjectIdentifiable = Pick<Project, 'id'>;\n\n/**\n * Helper class to encapsulate the file access for a project.\n */\nexport class ProjectFileAccessContext {\n constructor(\n readonly project: ProjectIdentifiable,\n readonly dataset: DatasetDetail,\n readonly fileAccessRequest: ProjectFileAccessRequest\n ) {\n }\n\n static projectDownload(project: ProjectIdentifiable): ProjectFileAccessContext {\n const request: ProjectFileAccessRequest = { accessType: ProjectAccessType.ProjectDownload };\n return new ProjectFileAccessContext(project, null, request);\n }\n\n static datasetDownload(project: ProjectIdentifiable, dataset: DatasetDetail): ProjectFileAccessContext {\n const accessType = dataset.share ? ProjectAccessType.SharedDatasetDownload : ProjectAccessType.ProjectDownload;\n const request: ProjectFileAccessRequest = { accessType, datasetId: dataset.id };\n return new ProjectFileAccessContext(project, dataset, request);\n }\n}\n","import { ProjectFileAccessContext } from \"../project-access-context\";\n\nexport enum FileSystemObjectType {\n FILE = 'file',\n FOLDER = 'folder'\n}\n\n/**\n * Represents a file that can be downloaded\n */\nexport interface DownloadableFile {\n url: string;\n name?: string;\n fileAccessContext: ProjectFileAccessContext;\n}\n\n/**\n * Represents a file in Cirro\n */\nexport interface FileSystemObject extends DownloadableFile {\n /**\n * Unique Id For Object\n */\n id: string;\n /**\n * Object S3 Url\n */\n url: string;\n /**\n * Object Path\n */\n path: string;\n /**\n * Object Display Path\n */\n displayPath: string;\n /**\n * Object Relative Path to base\n */\n relativePath: string;\n /**\n * Object Name\n */\n name: string;\n /**\n * Object Size\n */\n size: number;\n /**\n * Object Kind (PNG, TXT)\n */\n kind: string;\n /**\n * Object Type (File or Folder)\n */\n type: FileSystemObjectType;\n /**\n * Metadata\n */\n metadata?: Record<string, any>;\n /**\n * Access context\n */\n fileAccessContext: ProjectFileAccessContext;\n}\n","import { FileSystemObject } from \"./models/file-object.model\";\n\n/**\n * Calculate the total size of all files in a directory.\n * @param files - An array of FileSystemObject representing the files in the directory.\n * @return The total size of all files in bytes.\n */\nexport function calculateTotalSize(files: Array<FileSystemObject>): number {\n let totalSize = 0;\n for (const file of files) {\n totalSize += file.size;\n }\n return totalSize;\n}\n","/**\n * Pretty prints a JSON object with the specified indentation level.\n * @param obj JSON object to be pretty printed.\n * @param indentLevel Number of spaces to use for indentation.\n */\nexport function jsonPrettyPrint(obj: object, indentLevel=2): string {\n return JSON.stringify(obj, null, indentLevel);\n}\n","/**\n * Format bytes as human-readable text.\n * @param bytes Number of bytes.\n * @param si True to use metric(SI) units, aka powers of 1000. False to use\n * binary(IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\nexport function bytesToString(bytes: number, si = false, dp = 1): string {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return `${bytes} B`;\n }\n\n const units = si\n ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh\n && u < units.length - 1\n );\n\n return `${bytes.toFixed(dp)} ${units[u]}`;\n}\n","/**\n * Normalizes a date to UTC by adjusting for the timezone offset.\n * Useful when you are working with dates that may not include time information.\n * @param date\n */\nexport function normalizeDate(date: Date | string | undefined | null): Date {\n if (!date) throw new Error(\"Attempt to normalize undefined\");\n if (!(date instanceof Date)) date = new Date(date);\n return new Date(date.getTime() - date.getTimezoneOffset() * -60000);\n}\n","/**\n * Normalize a string by trimming it and returning null if it is empty.\n * @param input The string to normalize.\n */\nexport function normalizeString(input: string): string {\n if (!input?.trim()) return null;\n return input.trim();\n}\n","/**\n * Removes the starting slash from a path.\n * @param path Input path\n */\nexport function removeStartingSlash(path: string): string {\n if (!path) return path;\n if (path.startsWith('./')) return path.substring(2);\n if (path.startsWith('/')) return path.substring(1);\n return path;\n}\n\n/**\n * Removes the ending slash from a path.\n * @param path Input path\n */\nexport function removeEndingSlash(path: string): string {\n return path?.endsWith('/') ? path.slice(0, -1) : path;\n}\n","const dateFormat = new Intl.DateTimeFormat('en-US', { month: '2-digit', day: '2-digit', year: '2-digit' });\n\n/**\n * Converts a date string or Date object to MM/DD/YY date string.\n * Ex., \"2023-10-01\" -> \"10/01/23\"\n * @param date Input date string or Date object.\n */\nexport function toDateFormat(date: string | Date): string {\n if (!date) return null;\n const d: Date = (typeof date === 'string') ? new Date(date) : date\n return dateFormat.format(d);\n}\n","/**\n * Converts a string to Title case.\n * Ex., \"hello world\" -> \"Hello world\"\n * @param value\n */\nexport function toTitleCase(value: string): string {\n if (!value) return null;\n return value[0].toUpperCase() + value.slice(1).toLowerCase();\n}\n","import { toTitleCase } from './to-title-case';\n\n/**\n * Converts a field name to a more human-readable format.\n * Ex., \"helloWorld\" -> \"Hello World\"\n * @param value The value to convert.\n */\nexport function toFriendlyName(value: string): string {\n let _value = value.split(/(?=[A-Z])/).join(' ');\n _value = _value.split('_').join(' ');\n _value = _value.split('|').join(' ');\n _value = _value.replace(/ +/g, ' ');\n return toTitleCase(_value);\n}\n","const money = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n});\n\n/**\n * Converts a number or bigint to a formatted money string.\n * Ex., 1234.56 -> $1,234.56\n * @param value Input number or bigint value.\n */\nexport function toMoney(value: number | bigint): string {\n return money.format(value as number);\n}\n","/**\n * Converts a string to PascalCase.\n * Ex., \"hello world\" -> \"HelloWorld\"\n * @param value The string to convert.\n */\nexport function toPascalCase(value: string): string {\n return value\n // Split on non-alphanumeric characters and spaces\n .split(/[^a-zA-Z0-9]+/)\n // Filter out empty strings\n .filter(word => word.length > 0)\n // Capitalize first letter and lowercase the rest\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n // Join all words together\n .join('');\n}\n","import { calculateTotalSize } from \"../calculate-size\";\nimport { bytesToString } from \"../../formatters\";\nimport { FileSystemObject } from \"./file-object.model\";\n\nexport class Assets extends Array<FileSystemObject> {\n private _totalSize: string;\n private _totalSizeBytes: number;\n\n // Total size of all files in human-readable format\n get totalSize(): string {\n if (!this._totalSize) {\n this.calculateSize();\n }\n return this._totalSize;\n }\n\n get totalSizeBytes(): number {\n if (!this._totalSizeBytes) {\n this.calculateSize();\n }\n return this._totalSizeBytes;\n }\n private calculateSize(): void {\n this._totalSizeBytes = calculateTotalSize(this);\n this._totalSize = bytesToString(this._totalSizeBytes)\n }\n}\n","import { removeStartingSlash } from \"../../formatters/slash\";\nimport { FileSystemObject } from \"../models/file-object.model\";\n\nexport function getDisplayPath(file: FileSystemObject, dataPrefix: string = \"data/\") {\n return removeStartingSlash(`${file.path}/${file.name}`.replace(dataPrefix, ''));\n}\n","import { v4 as uuidv4 } from 'uuid';\nimport { FileSystemObject, FileSystemObjectType } from \"./file-object.model\";\nimport { getDisplayPath } from \"../util/get-display.fn\";\nimport { removeStartingSlash } from \"../../formatters/slash\";\n\nexport class Folder implements FileSystemObject {\n readonly id: string;\n readonly url: string;\n readonly path: string;\n readonly name: string;\n readonly domain: string;\n readonly kind = 'Folder';\n readonly fileAccessContext = null;\n readonly size = 0;\n readonly type = FileSystemObjectType.FOLDER;\n\n get displayPath() {\n return getDisplayPath(this);\n }\n\n get relativePath() {\n return removeStartingSlash(`${this.path}/${this.name}`);\n }\n\n constructor(url: string, name: string, path: string, domain: string) {\n this.id = uuidv4();\n this.url = url;\n this.name = name;\n this.path = path;\n this.domain = domain;\n }\n}\n","import { FileSystemObject, FileSystemObjectType } from \"./file-object.model\";\nimport { ProjectFileAccessContext } from \"../project-access-context\";\nimport { v4 as uuidv4 } from 'uuid';\nimport { getDisplayPath } from \"../util/get-display.fn\";\nimport { removeStartingSlash } from \"../../formatters/slash\";\n\nexport class File implements FileSystemObject {\n readonly id: string;\n readonly url: string\n readonly size: number;\n readonly path: string;\n readonly name: string;\n readonly metadata: Record<string, any>;\n readonly fileAccessContext: ProjectFileAccessContext;\n\n get type() {\n return FileSystemObjectType.FILE;\n }\n\n get kind() {\n return this.name.slice(this.name.lastIndexOf('.') + 1);\n }\n\n get displayPath() {\n return getDisplayPath(this);\n }\n\n get relativePath() {\n return removeStartingSlash(`${this.path}/${this.name}`);\n }\n\n constructor(domain: string, file: string, size: number, metadata: Record<string, any>, accessContext: ProjectFileAccessContext) {\n this.id = uuidv4();\n this.url = `${domain}/${file}`;\n this.size = size;\n this.metadata = metadata;\n this.fileAccessContext = accessContext;\n\n const fileFolderIdx = file.lastIndexOf('/');\n if (fileFolderIdx === -1) {\n this.path = '';\n this.name = file;\n } else {\n this.path = file.substring(0, fileFolderIdx);\n this.name = file.substring(fileFolderIdx + 1);\n }\n }\n}\n","import { DatasetAssetsManifest, FileEntry } from '@cirrobio/api-client';\nimport { Assets } from \"./models/assets\";\nimport { Folder } from \"./models/folder\";\nimport { File } from \"./models/file\";\nimport { ProjectFileAccessContext } from \"./project-access-context\";\nimport { removeEndingSlash } from \"../formatters\";\n\n\nexport class ManifestParser {\n private readonly manifest: DatasetAssetsManifest;\n private readonly accessContext: ProjectFileAccessContext;\n\n constructor(manifest: DatasetAssetsManifest, accessContext?: ProjectFileAccessContext) {\n this.manifest = manifest;\n this.accessContext = accessContext;\n }\n\n private get files(): Array<FileEntry> {\n return this.manifest?.files ?? [];\n }\n\n /**\n * Generates asset objects from the manifest, optionally including folder entries.\n */\n public generateAssets(generateFolders = false): Assets {\n const domain = removeEndingSlash(this.manifest?.domain);\n const assets = new Assets();\n\n for (const file of this.files) {\n assets.push(new File(domain, file.path, file.size, file.metadata, this.accessContext));\n }\n\n // Optionally add folder entries\n if (generateFolders) {\n assets.push(...this.generateFolderAssets(assets, domain));\n }\n\n return assets;\n }\n\n // Create folder entries, useful for visualizing folders as items in a file browser\n private generateFolderAssets(assets: Assets, domain: string): Folder[] {\n const folderSet = new Set<string>();\n\n // Collect all unique folder paths\n for (const asset of assets) {\n const parts = asset.path.split('/').filter(p => p.length > 0);\n let currentPath = '';\n for (const part of parts) {\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n folderSet.add(currentPath);\n }\n }\n\n // Create Folder objects from unique paths\n return Array.from(folderSet)\n .map(folderPath => {\n const name = folderPath.substring(folderPath.lastIndexOf('/') + 1);\n const parentPath = folderPath.includes('/') ? folderPath.substring(0, folderPath.lastIndexOf('/')) : '';\n return new Folder(folderPath, name, parentPath, domain);\n });\n }\n}\n","\n/**\n * Returns the parent directory of a given file path.\n */\nexport function getParentPath(path: string): string {\n return path.split(\"/\").slice(0, -1).join(\"/\") ?? \"\"\n}\n","export class ApiError extends Error {\n errors: string[];\n errorCode: number;\n\n constructor(message: string, errors: string[], errorCode: number) {\n super(message);\n this.errors = errors;\n this.errorCode = errorCode;\n }\n}\n","import { Middleware, ResponseContext } from \"@cirrobio/api-client\";\nimport { ApiError } from \"./error\";\n\nexport class PortalErrorHandler implements Middleware {\n async post(context: ResponseContext): Promise<Response | void> {\n const { response } = context;\n if (response && (response.status >= 200 && response.status < 300)) {\n return response;\n }\n\n // Handle Error\n let errorMessage: string;\n const errors = [];\n try {\n const err = await response.json();\n console.warn(err);\n if ('errorDetail' in err) {\n errorMessage = err.errorDetail;\n errors.push(err.errors.map((e: any) => e.message));\n } else {\n errorMessage = err.message;\n }\n } catch (ignore) {\n errorMessage = \"Unknown Error\";\n }\n throw new ApiError(errorMessage, errors, response.status);\n }\n}\n","import { PortalErrorHandler } from \"./error-handler\";\nimport { Configuration } from \"@cirrobio/api-client\";\n\ninterface GetConfigParams {\n tokenGetter: () => Promise<string>;\n basePath?: string;\n}\n\nexport const generateApiConfig = ({ basePath = \"/api\", tokenGetter}: GetConfigParams) => {\n return new Configuration({\n basePath,\n accessToken: tokenGetter,\n middleware: [\n new PortalErrorHandler()\n ],\n });\n}\n","export class CurrentUser {\n username: string;\n /**\n * The unique identifier for the user\n */\n sub: string\n\n /**\n * The time the user authenticated\n */\n authTime: Date;\n\n /**\n * The groups the user belongs to\n */\n groups: string[];\n\n static fromCognitoUser(idTokenPayload: Record<string, any>): CurrentUser {\n return {\n username: idTokenPayload[\"cognito:username\"] ?? idTokenPayload.username,\n sub: idTokenPayload.sub,\n authTime: new Date(idTokenPayload.auth_time * 1000),\n groups: idTokenPayload[\"cognito:groups\"] ?? [],\n };\n }\n}\n","import { SystemInfoResponse } from \"@cirrobio/api-client\";\nimport { AuthenticationProvider } from \"./authentication-provider\";\nimport { CurrentUser } from \"./current-user\";\n\n\nexport class StaticTokenAuthProvider implements AuthenticationProvider {\n constructor(\n readonly token: string\n ) {\n }\n\n public configure(_ignore: SystemInfoResponse): void {\n console.log('StaticTokenAuthProvider loaded');\n }\n\n public async getAccessToken() {\n return this.token;\n }\n\n public async getCurrentUser() {\n const accessToken = await this.getAccessToken();\n const parsedToken = JSON.parse(atob(accessToken.split('.')[1]));\n return CurrentUser.fromCognitoUser(parsedToken);\n }\n\n public forceRefresh(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import {\n AppRegistrationsApi,\n AuditApi,\n BillingApi,\n ComputeEnvironmentApi,\n Configuration,\n DashboardsApi,\n DatasetsApi,\n ExecutionApi,\n FeedApi,\n FileApi,\n GovernanceApi,\n MetadataApi,\n MetricsApi,\n ProcessesApi,\n ProjectRequestsApi,\n ProjectsApi,\n ReferencesApi,\n SharedFilesystemsApi,\n SharingApi,\n SheetsApi,\n SystemApi,\n ToolsApi,\n UsersApi,\n WorkspacesApi\n} from \"@cirrobio/api-client\";\nimport { generateApiConfig } from \"../api/config\";\n\ninterface DataServiceParams {\n tokenGetter: () => Promise<string>;\n basePath?: string;\n}\n\nexport class DataService {\n private readonly apiConfig: Configuration;\n\n private readonly _appRegistrationsApi: AppRegistrationsApi;\n private readonly _auditApi: AuditApi;\n private readonly _billingApi: BillingApi;\n private readonly _computeEnvironmentApi: ComputeEnvironmentApi;\n private readonly _dashboardsApi: DashboardsApi;\n private readonly _datasetsApi: DatasetsApi;\n private readonly _executionApi: ExecutionApi;\n private readonly _feedApi: FeedApi;\n private readonly _fileApi: FileApi;\n private readonly _governanceApi: GovernanceApi;\n private readonly _metadataApi: MetadataApi;\n private readonly _metricsApi: MetricsApi;\n private readonly _processesApi: ProcessesApi;\n private readonly _projectRequestsApi: ProjectRequestsApi;\n private readonly _projectsApi: ProjectsApi;\n private readonly _referencesApi: ReferencesApi;\n private readonly _sharedFilesystemsApi: SharedFilesystemsApi;\n private readonly _sharingApi: SharingApi;\n private readonly _sheetsApi: SheetsApi;\n private readonly _systemApi: SystemApi;\n private readonly _toolsApi: ToolsApi;\n private readonly _usersApi: UsersApi;\n private readonly _workspacesApi: WorkspacesApi;\n\n constructor({ tokenGetter, basePath = \"/api\" }: DataServiceParams) {\n this.apiConfig = generateApiConfig({ basePath, tokenGetter });\n\n this._appRegistrationsApi = new AppRegistrationsApi(this.apiConfig);\n this._auditApi = new AuditApi(this.apiConfig);\n this._billingApi = new BillingApi(this.apiConfig);\n this._computeEnvironmentApi = new ComputeEnvironmentApi(this.apiConfig);\n this._dashboardsApi = new DashboardsApi(this.apiConfig);\n this._datasetsApi = new DatasetsApi(this.apiConfig);\n this._executionApi = new ExecutionApi(this.apiConfig);\n this._feedApi = new FeedApi(this.apiConfig);\n this._fileApi = new FileApi(this.apiConfig);\n this._governanceApi = new GovernanceApi(this.apiConfig);\n this._metadataApi = new MetadataApi(this.apiConfig);\n this._metricsApi = new MetricsApi(this.apiConfig);\n this._processesApi = new ProcessesApi(this.apiConfig);\n this._projectRequestsApi = new ProjectRequestsApi(this.apiConfig);\n this._projectsApi = new ProjectsApi(this.apiConfig);\n this._referencesApi = new ReferencesApi(this.apiConfig);\n this._sharedFilesystemsApi = new SharedFilesystemsApi(this.apiConfig);\n this._sharingApi = new SharingApi(this.apiConfig);\n this._sheetsApi = new SheetsApi(this.apiConfig);\n this._systemApi = new SystemApi(this.apiConfig);\n this._toolsApi = new ToolsApi(this.apiConfig);\n this._usersApi = new UsersApi(this.apiConfig);\n this._workspacesApi = new WorkspacesApi(this.apiConfig);\n }\n\n get appRegistrations(): AppRegistrationsApi {\n return this._appRegistrationsApi;\n }\n get audit(): AuditApi {\n return this._auditApi;\n }\n get billing(): BillingApi {\n return this._billingApi;\n }\n get computeEnvironments(): ComputeEnvironmentApi {\n return this._computeEnvironmentApi;\n }\n get dashboards(): DashboardsApi {\n return this._dashboardsApi;\n }\n get datasets(): DatasetsApi {\n return this._datasetsApi;\n }\n get execution(): ExecutionApi {\n return this._executionApi;\n }\n get feed(): FeedApi {\n return this._feedApi;\n }\n get file(): FileApi {\n return this._fileApi;\n }\n get governance(): GovernanceApi {\n return this._governanceApi;\n }\n get metadata(): MetadataApi {\n return this._metadataApi;\n }\n get metrics(): MetricsApi {\n return this._metricsApi;\n }\n get processes(): ProcessesApi {\n return this._processesApi;\n }\n get projectRequests(): ProjectRequestsApi {\n return this._projectRequestsApi;\n }\n get projects(): ProjectsApi {\n return this._projectsApi;\n }\n get references(): ReferencesApi {\n return this._referencesApi;\n }\n get sharedFilesystems(): SharedFilesystemsApi {\n return this._sharedFilesystemsApi;\n }\n get sharing(): SharingApi {\n return this._sharingApi;\n }\n get sheets(): SheetsApi {\n return this._sheetsApi;\n }\n get system(): SystemApi {\n return this._systemApi;\n }\n get tools(): ToolsApi {\n return this._toolsApi;\n }\n get users(): UsersApi {\n return this._usersApi;\n }\n get workspaces(): WorkspacesApi {\n return this._workspacesApi;\n }\n}\n","/**\n * Extracts a value from an object using the json path notation, i.e. $.test.id\n * @param path JSON path to the value\n * @param obj Object to extract the value from\n */\nexport function extractFromObject(path: string, obj: object): any {\n const pathParts = path.slice(2).split('.')\n return pathParts.reduce(function(o, k) {\n return o && o[k];\n }, obj);\n}\n","/**\n * Ignores dangling promise rejections.\n * @param err The error to ignore.\n */\nexport function handlePromiseError(err): void {\n console.warn(err);\n}\n","/**\n * Download a blob as a file with the specified file name.\n */\nexport function downloadBlob(blob: Blob, fileName: string): void {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n}\n\n/**\n * Downloads the specified content as a file with the specified file name and type.\n */\nexport function downloadContent(content: any, fileName: string, fileType = 'text/plain'): void {\n const blob = new Blob([content], { type: fileType });\n downloadBlob(blob, fileName);\n}\n"],"names":["S3Client","GetObjectCommand","getSignedUrlInternal","ProjectAccessType","DeleteObjectCommand","Upload","FileSystemObjectType","uuidv4","Configuration","AppRegistrationsApi","AuditApi","BillingApi","ComputeEnvironmentApi","DashboardsApi","DatasetsApi","ExecutionApi","FeedApi","FileApi","GovernanceApi","MetadataApi","MetricsApi","ProcessesApi","ProjectRequestsApi","ProjectsApi","ReferencesApi","SharedFilesystemsApi","SharingApi","SheetsApi","SystemApi","ToolsApi","UsersApi","WorkspacesApi"],"mappings":";;;;;;;;AACA;;AAEG;AACI,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;AAC/D,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE;MAC5C,kBAAkB,GAAG,CAAC,KAAK,EAAE,QAAQ;AAC3C,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW;MACvE,cAAc,GAAG,CAAC,KAAK,EAAE,QAAQ;AACvC,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;AAChE,MAAM,wBAAwB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM;AACxD,MAAM,8BAA8B,GAAG;AAC1C,IAAA,GAAG,qBAAqB;AACxB,IAAA,GAAG,qBAAqB;AACxB,IAAA,GAAG,kBAAkB;AACrB,IAAA,GAAG,cAAc;AACjB,IAAA,GAAG;;AAEA,MAAM,qBAAqB,GAAG;AACjC,IAAA,GAAG,8BAA8B;AACjC,IAAA,GAAG;;MAIM,uBAAuB,GAAG,CAAC,MAAM,EAAE,KAAK;AAGrD;;AAEG;MACU,iCAAiC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS;AACtH;;AAEG;AACI,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9D;;AAEG;AACI,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAE7H;;AAEG;AACI,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,GAAG,4BAA4B;AAGhJ;;AAEG;AACI,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;AAEjE;;AAEG;AACI,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa;AAE7F;;AAEG;MACU,wBAAwB,GAAG,CAAC,IAAI,EAAE,UAAU;AAEzD;;;AAGG;AACI,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;AAChE,IAAA,GAAG,qBAAqB;AACxB,IAAA,GAAG,mBAAmB;AACtB,IAAA,GAAG,qBAAqB;AACxB,IAAA,GAAG,iCAAiC;AACpC,IAAA,GAAG;;AAIP;;;;;AAKG;AACG,SAAU,gBAAgB,CAAC,QAAgB,EAAE,UAAoB,EAAA;AACnE,IAAA,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE;;AAGjC,IAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1B,QAAA,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC;;AAGA,IAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;AAGnE,IAAA,OAAO,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC7C;;MC3Fa,KAAK,CAAA;AAAlB,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE;IAoBnC;IAlBE,IAAI,GAAA;AACF,QAAA,IAAI,KAAK,GAAiC,MAAK,EAAoB,CAAC;AAEpE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAEtD,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,KAAI;YACzB,KAAK,GAAG,GAAG;AACb,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,QAAQ,CAAC,EAAsC,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;AAChC,QAAA,IAAI;YACF,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QACpC;gBAAU;AACR,YAAA,MAAM,EAAE;QACV;IACF;AACD;AAED;;AAEG;AACI,MAAM,gBAAgB,GAAG,IAAI,KAAK;AACzC;;AAEG;AACI,MAAM,gBAAgB,GAAgC,IAAI,GAAG;;AC5BpE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB;AAE/C,MAAM,cAAc,GAAuB;;AAEzC,IAAA,oBAAoB,EAAE,IAAI;;AAE1B,IAAA,qBAAqB,EAAE,IAAI;CAC5B;AAED,SAAS,sBAAsB,CAAC,WAA2B,EAAE,eAAmC,EAAA;IAC9F,OAAO,IAAIA,iBAAQ,CAAC;AAClB,QAAA,WAAW,EAAE;YACX,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,YAAY,EAAE,WAAW,CAAC,YAAY;AACvC,SAAA;QACD,MAAM,EAAE,WAAW,CAAC,MAAM;AAC1B,QAAA,GAAG,cAAc;AACjB,QAAA,GAAG;AACJ,KAAA,CAAC;AACJ;AAEA;;AAEG;SACa,cAAc,CAAC,WAA2B,EAAE,kBAAsC,EAAE,EAAA;;AAElG,IAAA,IAAI,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9D,QAAA,OAAO,sBAAsB,CAAC,WAAW,EAAE,eAAe,CAAC;IAC7D;IACA,MAAM,QAAQ,GAAG,CAAA,EAAG,WAAW,CAAC,WAAW,CAAA,CAAA,EAAI,WAAW,CAAC,MAAM,CAAA,CAAE;IACnE,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9C,IAAI,YAAY,EAAE;AAChB,QAAA,OAAO,YAAY;IACrB;IACA,MAAM,SAAS,GAAG,sBAAsB,CAAC,WAAW,EAAE,eAAe,CAAC;AACtE,IAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;AACpC,IAAA,OAAO,SAAS;AAClB;;AC1CA;;AAEG;AACG,SAAU,aAAa,CAAC,GAAW,EAAA;IACvC,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAA,CAAA,CAAG,CAAC;IACnD;IACA,OAAO;AACL,QAAA,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAClB,QAAA,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;KAChB;AACH;;ACyBA;;AAEG;AACG,SAAU,YAAY,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,MAAM,EAAoB,EAAA;;IAC5E,MAAM,YAAY,GAAuB,EAAE;AAC3C,IAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,QAAA,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;IACrC;IACA,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC;IACxD,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC;AAC1C,IAAA,MAAM,IAAI,GAA0B,EAAE,MAAM,EAAE,GAAG,EAAE;IACnD,IAAI,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,QAAQ,EAAE;AACpB,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;AACxD,QAAA,IAAI,CAAC,0BAA0B,GAAG,CAAA,sBAAA,EAAyB,QAAQ,GAAG;IACxE;IACA,IAAI,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,IAAI,EAAE;AAChB,QAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM;IACvC;AACA,IAAA,MAAM,OAAO,GAAG,IAAIC,yBAAgB,CAAC,IAAI,CAAC;IAC1C,OAAOC,+BAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,MAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,EAAE,CAAC;AAC1F;;ACxDA,MAAM,cAAc,GAAG,UAAU;AAE3B,SAAU,eAAe,CAAC,SAAiB,EAAA;AAC/C,IAAA,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,SAAS,EAAE;AACxC;;ACHA;;;AAGG;AACG,SAAU,kBAAkB,CAAC,SAAiB,EAAA;AAClD,IAAA,OAAO,eAAe,CAAC,SAAS,CAAC;AACnC;;ACGA;;;AAGG;MACU,WAAW,CAAA;AACtB,IAAA,WAAA,CACmB,YAAiC,EAAA;QAAjC,IAAA,CAAA,YAAY,GAAZ,YAAY;IAC5B;AAEH;;AAEG;AACH,IAAA,MAAM,cAAc,CAAC,IAAsB,EAAE,MAA4B,EAAA;QACvE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC;AAChE,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB;AAEA;;AAEG;AACH,IAAA,MAAM,2BAA2B,CAAC,IAAsB,EAAE,MAA4B,EAAA;QACpF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAClF,QAAA,MAAM,OAAO,GAAqB;AAChC,YAAA,GAAG,MAAM;YACT,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW;SACZ;AACD,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC;IAC9B;AAEA;;AAEG;AACH,IAAA,MAAM,2BAA2B,CAAC,iBAA2C,EAAE,IAAY,EAAE,MAA4B,EAAA;QACvH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,iBAAiB,CAAC;AAC7E,QAAA,MAAM,OAAO,GAAqB;AAChC,YAAA,GAAG,MAAM;YACT,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;AAC/B,YAAA,GAAG,EAAE,CAAA,KAAA,EAAQ,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;YACvE,WAAW;SACZ;AACD,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC;IAC9B;AAEA;;AAEG;IACH,MAAM,2BAA2B,CAAC,iBAA2C,EAAA;AAC3E,QAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,UAAU;;AAEjE,QAAA,IAAI,UAAU,KAAKC,2BAAiB,CAAC,eAAe,IAAI,UAAU,KAAKA,2BAAiB,CAAC,qBAAqB,EAAE;AAC9G,YAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC;QAC1D;QACA,OAAO,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,EAAE,SAAS,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,wBAAwB,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;IACrK;IAEQ,MAAM,yBAAyB,CAAC,iBAA2C,EAAA;AACjF,QAAA,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAAE;;QAE9C,IAAI,QAAQ,GAAG,SAAS;QACxB,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,KAAKA,2BAAiB,CAAC,qBAAqB,EAAE;YAC9F,QAAQ,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAA,CAAE;QAC5E;AAEA,QAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,YAAW;YAC1C,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxD,YAAA,MAAM,cAAc,GAAG,iBAAiB,GAAG,iBAAiB,KAAA,IAAA,IAAjB,iBAAiB,KAAA,MAAA,GAAA,MAAA,GAAjB,iBAAiB,CAAE,UAAU,GAAG,IAAI;YAC/E,MAAM,mBAAmB,GAAG,CAAC,cAAc,IAAI,cAAc,GAAG,IAAI,IAAI,EAAE;YAC1E,IAAI,mBAAmB,EAAE;AACvB,gBAAA,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,iBAAiB;AACpE,gBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC;AACnH,gBAAA,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC;AAC3C,gBAAA,OAAO,WAAW;YACpB;AACA,YAAA,OAAO,iBAAiB;AAC1B,QAAA,CAAC,CAAC;IACJ;AACD;;AC/ED;;AAEG;AACI,eAAe,UAAU,CAAC,EAAE,GAAG,EAAE,WAAW,EAAoB,EAAA;IACrE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAIC,4BAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACpD,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7C;;ACHA;;AAEG;AACG,SAAU,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAoB,EAAA;AACxF,IAAA,MAAM,MAAM,GAAyD;AACnE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,GAAG,EAAE,IAAI;AACT,QAAA,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,IAAI,CAAC,IAAI;AACtB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE;KACf;IACD,OAAO,IAAIC,iBAAM,CAAC;AAChB,QAAA,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC;AACnC,QAAA,SAAS,EAAE,CAAC;QACZ,MAAM;AACP,KAAA,CAAC;AACJ;;AC3BA;;AAEG;MACU,wBAAwB,CAAA;AACnC,IAAA,WAAA,CACW,OAA4B,EAC5B,OAAsB,EACtB,iBAA2C,EAAA;QAF3C,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;IAE5B;IAEA,OAAO,eAAe,CAAC,OAA4B,EAAA;QACjD,MAAM,OAAO,GAA6B,EAAE,UAAU,EAAEF,2BAAiB,CAAC,eAAe,EAAE;QAC3F,OAAO,IAAI,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;IAC7D;AAEA,IAAA,OAAO,eAAe,CAAC,OAA4B,EAAE,OAAsB,EAAA;AACzE,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,GAAGA,2BAAiB,CAAC,qBAAqB,GAAGA,2BAAiB,CAAC,eAAe;QAC9G,MAAM,OAAO,GAA6B,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE;QAC/E,OAAO,IAAI,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAChE;AACD;;ACvBWG;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAHWA,4BAAoB,KAApBA,4BAAoB,GAAA,EAAA,CAAA,CAAA;;ACAhC;;;;AAIG;AACG,SAAU,kBAAkB,CAAC,KAA8B,EAAA;IAC/D,IAAI,SAAS,GAAG,CAAC;AACjB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,SAAS,IAAI,IAAI,CAAC,IAAI;IACxB;AACA,IAAA,OAAO,SAAS;AAClB;;ACbA;;;;AAIG;SACa,eAAe,CAAC,GAAW,EAAE,WAAW,GAAC,CAAC,EAAA;IACxD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC;AAC/C;;ACPA;;;;;;;;AAQG;AACG,SAAU,aAAa,CAAC,KAAa,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,CAAC,EAAA;IAC7D,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;IAE/B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;QAC5B,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;IACrB;IAEA,MAAM,KAAK,GAAG;AACZ,UAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACjD,UAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAC5D,IAAA,IAAI,CAAC,GAAG,EAAE;AACV,IAAA,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE;AAElB,IAAA,GAAG;QACD,KAAK,IAAI,MAAM;AACf,QAAA,EAAE,CAAC;AACL,IAAA,CAAC,QACC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI;AACpC,WAAA,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;AAGzB,IAAA,OAAO,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AAC3C;;AC/BA;;;;AAIG;AACG,SAAU,aAAa,CAAC,IAAsC,EAAA;AAClE,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;AAC5D,IAAA,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC;AAAE,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AAClD,IAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAM,CAAC;AACrE;;ACTA;;;AAGG;AACG,SAAU,eAAe,CAAC,KAAa,EAAA;IAC3C,IAAI,EAAC,KAAK,KAAA,IAAA,IAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,CAAA;AAAE,QAAA,OAAO,IAAI;AAC/B,IAAA,OAAO,KAAK,CAAC,IAAI,EAAE;AACrB;;ACPA;;;AAGG;AACG,SAAU,mBAAmB,CAAC,IAAY,EAAA;AAC9C,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;AACtB,IAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACnD,IAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAClD,IAAA,OAAO,IAAI;AACb;AAEA;;;AAGG;AACG,SAAU,iBAAiB,CAAC,IAAY,EAAA;IAC5C,OAAO,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,QAAQ,CAAC,GAAG,CAAC,IAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI;AACvD;;ACjBA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAE1G;;;;AAIG;AACG,SAAU,YAAY,CAAC,IAAmB,EAAA;AAC9C,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;IACtB,MAAM,CAAC,GAAS,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAClE,IAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7B;;ACXA;;;;AAIG;AACG,SAAU,WAAW,CAAC,KAAa,EAAA;AACvC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AACvB,IAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAC9D;;ACNA;;;;AAIG;AACG,SAAU,cAAc,CAAC,KAAa,EAAA;AAC1C,IAAA,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/C,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACpC,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACpC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACnC,IAAA,OAAO,WAAW,CAAC,MAAM,CAAC;AAC5B;;ACbA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3C,IAAA,KAAK,EAAE,UAAU;AACjB,IAAA,QAAQ,EAAE,KAAK;AAChB,CAAA,CAAC;AAEF;;;;AAIG;AACG,SAAU,OAAO,CAAC,KAAsB,EAAA;AAC5C,IAAA,OAAO,KAAK,CAAC,MAAM,CAAC,KAAe,CAAC;AACtC;;ACZA;;;;AAIG;AACG,SAAU,YAAY,CAAC,KAAa,EAAA;AACxC,IAAA,OAAO;;SAEJ,KAAK,CAAC,eAAe;;SAErB,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;;SAE9B,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;;SAEtE,IAAI,CAAC,EAAE,CAAC;AACb;;ACXM,MAAO,MAAO,SAAQ,KAAuB,CAAA;;AAKjD,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE;QACtB;QACA,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,aAAa,EAAE;QACtB;QACA,OAAO,IAAI,CAAC,eAAe;IAC7B;IACQ,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;IACvD;AACD;;SCvBe,cAAc,CAAC,IAAsB,EAAE,aAAqB,OAAO,EAAA;AACjF,IAAA,OAAO,mBAAmB,CAAC,CAAA,EAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACjF;;MCAa,MAAM,CAAA;AAWjB,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,mBAAmB,CAAC,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;IACzD;AAEA,IAAA,WAAA,CAAY,GAAW,EAAE,IAAY,EAAE,IAAY,EAAE,MAAc,EAAA;QAb1D,IAAA,CAAA,IAAI,GAAG,QAAQ;QACf,IAAA,CAAA,iBAAiB,GAAG,IAAI;QACxB,IAAA,CAAA,IAAI,GAAG,CAAC;AACR,QAAA,IAAA,CAAA,IAAI,GAAGA,4BAAoB,CAAC,MAAM;AAWzC,QAAA,IAAI,CAAC,EAAE,GAAGC,OAAM,EAAE;AAClB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AACD;;MCzBY,IAAI,CAAA;AASf,IAAA,IAAI,IAAI,GAAA;QACN,OAAOD,4BAAoB,CAAC,IAAI;IAClC;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxD;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,mBAAmB,CAAC,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;IACzD;IAEA,WAAA,CAAY,MAAc,EAAE,IAAY,EAAE,IAAY,EAAE,QAA6B,EAAE,aAAuC,EAAA;AAC5H,QAAA,IAAI,CAAC,EAAE,GAAGC,OAAM,EAAE;QAClB,IAAI,CAAC,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,EAAE;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,aAAa;QAEtC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,aAAa,KAAK,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAClB;aAAO;YACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC;YAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC;QAC/C;IACF;AACD;;MCvCY,cAAc,CAAA;IAIzB,WAAA,CAAY,QAA+B,EAAE,aAAwC,EAAA;AACnF,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;IACpC;AAEA,IAAA,IAAY,KAAK,GAAA;;QACf,OAAO,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;IACnC;AAEA;;AAEG;IACI,cAAc,CAAC,eAAe,GAAG,KAAK,EAAA;;QAC3C,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE;AAE3B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACxF;;QAGA,IAAI,eAAe,EAAE;AACnB,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D;AAEA,QAAA,OAAO,MAAM;IACf;;IAGQ,oBAAoB,CAAC,MAAc,EAAE,MAAc,EAAA;AACzD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU;;AAGnC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7D,IAAI,WAAW,GAAG,EAAE;AACpB,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,WAAW,GAAG,WAAW,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,GAAG,IAAI;AAC3D,gBAAA,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YAC5B;QACF;;AAGA,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS;aACxB,GAAG,CAAC,UAAU,IAAG;AAChB,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClE,YAAA,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;YACvG,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC;AACzD,QAAA,CAAC,CAAC;IACN;AACD;;AC7DD;;AAEG;AACG,SAAU,aAAa,CAAC,IAAY,EAAA;;IACxC,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;AACrD;;ACNM,MAAO,QAAS,SAAQ,KAAK,CAAA;AAIjC,IAAA,WAAA,CAAY,OAAe,EAAE,MAAgB,EAAE,SAAiB,EAAA;QAC9D,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;AACD;;MCNY,kBAAkB,CAAA;IAC7B,MAAM,IAAI,CAAC,OAAwB,EAAA;AACjC,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO;AAC5B,QAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;AACjE,YAAA,OAAO,QAAQ;QACjB;;AAGA,QAAA,IAAI,YAAoB;QACxB,MAAM,MAAM,GAAG,EAAE;AACjB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AACjC,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACjB,YAAA,IAAI,aAAa,IAAI,GAAG,EAAE;AACxB,gBAAA,YAAY,GAAG,GAAG,CAAC,WAAW;AAC9B,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;YACpD;iBAAO;AACL,gBAAA,YAAY,GAAG,GAAG,CAAC,OAAO;YAC5B;QACF;QAAE,OAAO,MAAM,EAAE;YACf,YAAY,GAAG,eAAe;QAChC;QACA,MAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IAC3D;AACD;;ACnBM,MAAM,iBAAiB,GAAG,CAAC,EAAE,QAAQ,GAAG,MAAM,EAAE,WAAW,EAAkB,KAAI;IACtF,OAAO,IAAIC,uBAAa,CAAC;QACvB,QAAQ;AACR,QAAA,WAAW,EAAE,WAAW;AACxB,QAAA,UAAU,EAAE;AACV,YAAA,IAAI,kBAAkB;AACvB,SAAA;AACF,KAAA,CAAC;AACJ;;MChBa,WAAW,CAAA;IAiBtB,OAAO,eAAe,CAAC,cAAmC,EAAA;;QACxD,OAAO;YACL,QAAQ,EAAE,MAAA,cAAc,CAAC,kBAAkB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,cAAc,CAAC,QAAQ;YACvE,GAAG,EAAE,cAAc,CAAC,GAAG;YACvB,QAAQ,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC;AACnD,YAAA,MAAM,EAAE,CAAA,EAAA,GAAA,cAAc,CAAC,gBAAgB,CAAC,mCAAI,EAAE;SAC/C;IACH;AACD;;MCpBY,uBAAuB,CAAA;AAClC,IAAA,WAAA,CACW,KAAa,EAAA;QAAb,IAAA,CAAA,KAAK,GAAL,KAAK;IAEhB;AAEO,IAAA,SAAS,CAAC,OAA2B,EAAA;AAC1C,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;IAC/C;AAEO,IAAA,MAAM,cAAc,GAAA;QACzB,OAAO,IAAI,CAAC,KAAK;IACnB;AAEO,IAAA,MAAM,cAAc,GAAA;AACzB,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;AAC/C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAA,OAAO,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC;IACjD;IAEO,YAAY,GAAA;AACjB,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;IAC1B;AACD;;MCKY,WAAW,CAAA;AA2BtB,IAAA,WAAA,CAAY,EAAE,WAAW,EAAE,QAAQ,GAAG,MAAM,EAAqB,EAAA;QAC/D,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QAE7D,IAAI,CAAC,oBAAoB,GAAG,IAAIC,6BAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;QACnE,IAAI,CAAC,SAAS,GAAG,IAAIC,kBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAIC,oBAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC,sBAAsB,GAAG,IAAIC,+BAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;QACvE,IAAI,CAAC,cAAc,GAAG,IAAIC,uBAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,IAAIC,qBAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAIC,sBAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAIC,iBAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAIC,iBAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,IAAIC,uBAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,IAAIC,qBAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,IAAIC,oBAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,IAAIC,sBAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAIC,4BAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;QACjE,IAAI,CAAC,YAAY,GAAG,IAAIC,qBAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QACnD,IAAI,CAAC,cAAc,GAAG,IAAIC,uBAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QACvD,IAAI,CAAC,qBAAqB,GAAG,IAAIC,8BAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;QACrE,IAAI,CAAC,WAAW,GAAG,IAAIC,oBAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,IAAIC,mBAAS,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,IAAIC,mBAAS,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAIC,kBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAIC,kBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,IAAIC,uBAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IACzD;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,oBAAoB;IAClC;AACA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,SAAS;IACvB;AACA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,WAAW;IACzB;AACA,IAAA,IAAI,mBAAmB,GAAA;QACrB,OAAO,IAAI,CAAC,sBAAsB;IACpC;AACA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,cAAc;IAC5B;AACA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,YAAY;IAC1B;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,aAAa;IAC3B;AACA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,QAAQ;IACtB;AACA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,QAAQ;IACtB;AACA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,cAAc;IAC5B;AACA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,YAAY;IAC1B;AACA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,WAAW;IACzB;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,aAAa;IAC3B;AACA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,mBAAmB;IACjC;AACA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,YAAY;IAC1B;AACA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,cAAc;IAC5B;AACA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,qBAAqB;IACnC;AACA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,WAAW;IACzB;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,UAAU;IACxB;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,UAAU;IACxB;AACA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,SAAS;IACvB;AACA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,SAAS;IACvB;AACA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,cAAc;IAC5B;AACD;;AC7JD;;;;AAIG;AACG,SAAU,iBAAiB,CAAC,IAAY,EAAE,GAAW,EAAA;AACzD,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,IAAA,OAAO,SAAS,CAAC,MAAM,CAAC,UAAS,CAAC,EAAE,CAAC,EAAA;AACnC,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,EAAE,GAAG,CAAC;AACT;;ACVA;;;AAGG;AACG,SAAU,kBAAkB,CAAC,GAAG,EAAA;AACpC,IAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB;;ACNA;;AAEG;AACG,SAAU,YAAY,CAAC,IAAU,EAAE,QAAgB,EAAA;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;IACrB,CAAC,CAAC,KAAK,EAAE;AACX;AAEA;;AAEG;AACG,SAAU,eAAe,CAAC,OAAY,EAAE,QAAgB,EAAE,QAAQ,GAAG,YAAY,EAAA;AACrF,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACpD,IAAA,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,41 +1,53 @@
|
|
|
1
|
-
import { AuditApi, BillingApi, ComputeEnvironmentApi, DatasetsApi, ExecutionApi, FileApi, GovernanceApi, MetadataApi, ProcessesApi, ProjectRequestsApi, ProjectsApi, ReferencesApi, SharingApi, SystemApi, ToolsApi, UsersApi, WorkspacesApi } from "@cirrobio/api-client";
|
|
1
|
+
import { AppRegistrationsApi, AuditApi, BillingApi, ComputeEnvironmentApi, DashboardsApi, DatasetsApi, ExecutionApi, FeedApi, FileApi, GovernanceApi, MetadataApi, MetricsApi, ProcessesApi, ProjectRequestsApi, ProjectsApi, ReferencesApi, SharedFilesystemsApi, SharingApi, SheetsApi, SystemApi, ToolsApi, UsersApi, WorkspacesApi } from "@cirrobio/api-client";
|
|
2
2
|
interface DataServiceParams {
|
|
3
3
|
tokenGetter: () => Promise<string>;
|
|
4
4
|
basePath?: string;
|
|
5
5
|
}
|
|
6
6
|
export declare class DataService {
|
|
7
7
|
private readonly apiConfig;
|
|
8
|
+
private readonly _appRegistrationsApi;
|
|
8
9
|
private readonly _auditApi;
|
|
9
10
|
private readonly _billingApi;
|
|
10
11
|
private readonly _computeEnvironmentApi;
|
|
12
|
+
private readonly _dashboardsApi;
|
|
11
13
|
private readonly _datasetsApi;
|
|
12
14
|
private readonly _executionApi;
|
|
15
|
+
private readonly _feedApi;
|
|
13
16
|
private readonly _fileApi;
|
|
14
17
|
private readonly _governanceApi;
|
|
15
18
|
private readonly _metadataApi;
|
|
19
|
+
private readonly _metricsApi;
|
|
16
20
|
private readonly _processesApi;
|
|
17
21
|
private readonly _projectRequestsApi;
|
|
18
22
|
private readonly _projectsApi;
|
|
19
23
|
private readonly _referencesApi;
|
|
24
|
+
private readonly _sharedFilesystemsApi;
|
|
20
25
|
private readonly _sharingApi;
|
|
26
|
+
private readonly _sheetsApi;
|
|
21
27
|
private readonly _systemApi;
|
|
22
28
|
private readonly _toolsApi;
|
|
23
29
|
private readonly _usersApi;
|
|
24
30
|
private readonly _workspacesApi;
|
|
25
31
|
constructor({ tokenGetter, basePath }: DataServiceParams);
|
|
32
|
+
get appRegistrations(): AppRegistrationsApi;
|
|
26
33
|
get audit(): AuditApi;
|
|
27
34
|
get billing(): BillingApi;
|
|
28
35
|
get computeEnvironments(): ComputeEnvironmentApi;
|
|
36
|
+
get dashboards(): DashboardsApi;
|
|
29
37
|
get datasets(): DatasetsApi;
|
|
30
38
|
get execution(): ExecutionApi;
|
|
39
|
+
get feed(): FeedApi;
|
|
31
40
|
get file(): FileApi;
|
|
32
41
|
get governance(): GovernanceApi;
|
|
33
42
|
get metadata(): MetadataApi;
|
|
43
|
+
get metrics(): MetricsApi;
|
|
34
44
|
get processes(): ProcessesApi;
|
|
35
45
|
get projectRequests(): ProjectRequestsApi;
|
|
36
46
|
get projects(): ProjectsApi;
|
|
37
47
|
get references(): ReferencesApi;
|
|
48
|
+
get sharedFilesystems(): SharedFilesystemsApi;
|
|
38
49
|
get sharing(): SharingApi;
|
|
50
|
+
get sheets(): SheetsApi;
|
|
39
51
|
get system(): SystemApi;
|
|
40
52
|
get tools(): ToolsApi;
|
|
41
53
|
get users(): UsersApi;
|
package/package.json
CHANGED
package/src/api/error-handler.ts
CHANGED
package/src/api/error.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export class ApiError extends Error {
|
|
2
2
|
errors: string[];
|
|
3
|
+
errorCode: number;
|
|
3
4
|
|
|
4
|
-
constructor(message: string, errors: string[]) {
|
|
5
|
+
constructor(message: string, errors: string[], errorCode: number) {
|
|
5
6
|
super(message);
|
|
6
7
|
this.errors = errors;
|
|
8
|
+
this.errorCode = errorCode;
|
|
7
9
|
}
|
|
8
10
|
}
|
package/src/data/data.service.ts
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
|
+
AppRegistrationsApi,
|
|
2
3
|
AuditApi,
|
|
3
4
|
BillingApi,
|
|
4
5
|
ComputeEnvironmentApi,
|
|
5
6
|
Configuration,
|
|
7
|
+
DashboardsApi,
|
|
6
8
|
DatasetsApi,
|
|
7
9
|
ExecutionApi,
|
|
10
|
+
FeedApi,
|
|
8
11
|
FileApi,
|
|
9
12
|
GovernanceApi,
|
|
10
13
|
MetadataApi,
|
|
14
|
+
MetricsApi,
|
|
11
15
|
ProcessesApi,
|
|
12
16
|
ProjectRequestsApi,
|
|
13
17
|
ProjectsApi,
|
|
14
18
|
ReferencesApi,
|
|
19
|
+
SharedFilesystemsApi,
|
|
15
20
|
SharingApi,
|
|
21
|
+
SheetsApi,
|
|
16
22
|
SystemApi,
|
|
17
23
|
ToolsApi,
|
|
18
24
|
UsersApi,
|
|
@@ -28,19 +34,25 @@ interface DataServiceParams {
|
|
|
28
34
|
export class DataService {
|
|
29
35
|
private readonly apiConfig: Configuration;
|
|
30
36
|
|
|
37
|
+
private readonly _appRegistrationsApi: AppRegistrationsApi;
|
|
31
38
|
private readonly _auditApi: AuditApi;
|
|
32
39
|
private readonly _billingApi: BillingApi;
|
|
33
40
|
private readonly _computeEnvironmentApi: ComputeEnvironmentApi;
|
|
41
|
+
private readonly _dashboardsApi: DashboardsApi;
|
|
34
42
|
private readonly _datasetsApi: DatasetsApi;
|
|
35
43
|
private readonly _executionApi: ExecutionApi;
|
|
44
|
+
private readonly _feedApi: FeedApi;
|
|
36
45
|
private readonly _fileApi: FileApi;
|
|
37
46
|
private readonly _governanceApi: GovernanceApi;
|
|
38
47
|
private readonly _metadataApi: MetadataApi;
|
|
48
|
+
private readonly _metricsApi: MetricsApi;
|
|
39
49
|
private readonly _processesApi: ProcessesApi;
|
|
40
50
|
private readonly _projectRequestsApi: ProjectRequestsApi;
|
|
41
51
|
private readonly _projectsApi: ProjectsApi;
|
|
42
52
|
private readonly _referencesApi: ReferencesApi;
|
|
53
|
+
private readonly _sharedFilesystemsApi: SharedFilesystemsApi;
|
|
43
54
|
private readonly _sharingApi: SharingApi;
|
|
55
|
+
private readonly _sheetsApi: SheetsApi;
|
|
44
56
|
private readonly _systemApi: SystemApi;
|
|
45
57
|
private readonly _toolsApi: ToolsApi;
|
|
46
58
|
private readonly _usersApi: UsersApi;
|
|
@@ -49,25 +61,34 @@ export class DataService {
|
|
|
49
61
|
constructor({ tokenGetter, basePath = "/api" }: DataServiceParams) {
|
|
50
62
|
this.apiConfig = generateApiConfig({ basePath, tokenGetter });
|
|
51
63
|
|
|
64
|
+
this._appRegistrationsApi = new AppRegistrationsApi(this.apiConfig);
|
|
52
65
|
this._auditApi = new AuditApi(this.apiConfig);
|
|
53
66
|
this._billingApi = new BillingApi(this.apiConfig);
|
|
54
67
|
this._computeEnvironmentApi = new ComputeEnvironmentApi(this.apiConfig);
|
|
68
|
+
this._dashboardsApi = new DashboardsApi(this.apiConfig);
|
|
55
69
|
this._datasetsApi = new DatasetsApi(this.apiConfig);
|
|
56
70
|
this._executionApi = new ExecutionApi(this.apiConfig);
|
|
71
|
+
this._feedApi = new FeedApi(this.apiConfig);
|
|
57
72
|
this._fileApi = new FileApi(this.apiConfig);
|
|
58
73
|
this._governanceApi = new GovernanceApi(this.apiConfig);
|
|
59
74
|
this._metadataApi = new MetadataApi(this.apiConfig);
|
|
75
|
+
this._metricsApi = new MetricsApi(this.apiConfig);
|
|
60
76
|
this._processesApi = new ProcessesApi(this.apiConfig);
|
|
61
77
|
this._projectRequestsApi = new ProjectRequestsApi(this.apiConfig);
|
|
62
78
|
this._projectsApi = new ProjectsApi(this.apiConfig);
|
|
63
79
|
this._referencesApi = new ReferencesApi(this.apiConfig);
|
|
80
|
+
this._sharedFilesystemsApi = new SharedFilesystemsApi(this.apiConfig);
|
|
64
81
|
this._sharingApi = new SharingApi(this.apiConfig);
|
|
82
|
+
this._sheetsApi = new SheetsApi(this.apiConfig);
|
|
65
83
|
this._systemApi = new SystemApi(this.apiConfig);
|
|
66
84
|
this._toolsApi = new ToolsApi(this.apiConfig);
|
|
67
85
|
this._usersApi = new UsersApi(this.apiConfig);
|
|
68
86
|
this._workspacesApi = new WorkspacesApi(this.apiConfig);
|
|
69
87
|
}
|
|
70
88
|
|
|
89
|
+
get appRegistrations(): AppRegistrationsApi {
|
|
90
|
+
return this._appRegistrationsApi;
|
|
91
|
+
}
|
|
71
92
|
get audit(): AuditApi {
|
|
72
93
|
return this._auditApi;
|
|
73
94
|
}
|
|
@@ -77,12 +98,18 @@ export class DataService {
|
|
|
77
98
|
get computeEnvironments(): ComputeEnvironmentApi {
|
|
78
99
|
return this._computeEnvironmentApi;
|
|
79
100
|
}
|
|
101
|
+
get dashboards(): DashboardsApi {
|
|
102
|
+
return this._dashboardsApi;
|
|
103
|
+
}
|
|
80
104
|
get datasets(): DatasetsApi {
|
|
81
105
|
return this._datasetsApi;
|
|
82
106
|
}
|
|
83
107
|
get execution(): ExecutionApi {
|
|
84
108
|
return this._executionApi;
|
|
85
109
|
}
|
|
110
|
+
get feed(): FeedApi {
|
|
111
|
+
return this._feedApi;
|
|
112
|
+
}
|
|
86
113
|
get file(): FileApi {
|
|
87
114
|
return this._fileApi;
|
|
88
115
|
}
|
|
@@ -92,6 +119,9 @@ export class DataService {
|
|
|
92
119
|
get metadata(): MetadataApi {
|
|
93
120
|
return this._metadataApi;
|
|
94
121
|
}
|
|
122
|
+
get metrics(): MetricsApi {
|
|
123
|
+
return this._metricsApi;
|
|
124
|
+
}
|
|
95
125
|
get processes(): ProcessesApi {
|
|
96
126
|
return this._processesApi;
|
|
97
127
|
}
|
|
@@ -104,9 +134,15 @@ export class DataService {
|
|
|
104
134
|
get references(): ReferencesApi {
|
|
105
135
|
return this._referencesApi;
|
|
106
136
|
}
|
|
137
|
+
get sharedFilesystems(): SharedFilesystemsApi {
|
|
138
|
+
return this._sharedFilesystemsApi;
|
|
139
|
+
}
|
|
107
140
|
get sharing(): SharingApi {
|
|
108
141
|
return this._sharingApi;
|
|
109
142
|
}
|
|
143
|
+
get sheets(): SheetsApi {
|
|
144
|
+
return this._sheetsApi;
|
|
145
|
+
}
|
|
110
146
|
get system(): SystemApi {
|
|
111
147
|
return this._systemApi;
|
|
112
148
|
}
|