diff --git a/openapitools.json b/openapitools.json index 5db9013..39354d5 100644 --- a/openapitools.json +++ b/openapitools.json @@ -22,7 +22,7 @@ }, "additionalProperties": { "npmName": "@cirrobio/api-client", - "npmVersion": "0.13.27", + "npmVersion": "0.13.28", "author": "CirroBio", "stringEnums": true, "supportsES6": true diff --git a/packages/api-client/.openapi-generator/FILES b/packages/api-client/.openapi-generator/FILES index 59c80fb..a60abe5 100644 --- a/packages/api-client/.openapi-generator/FILES +++ b/packages/api-client/.openapi-generator/FILES @@ -81,6 +81,7 @@ src/models/DatasetAssetsManifest.ts src/models/DatasetCondition.ts src/models/DatasetConditionField.ts src/models/DatasetDetail.ts +src/models/DatasetSource.ts src/models/DatasetViz.ts src/models/DeleteRowsRequest.ts src/models/Discussion.ts @@ -123,6 +124,7 @@ src/models/GovernanceTrainingVerification.ts src/models/GovernanceType.ts src/models/GroupCost.ts src/models/ImportDataRequest.ts +src/models/IngestConflictMode.ts src/models/InsertRowsRequest.ts src/models/InviteUserRequest.ts src/models/InviteUserResponse.ts @@ -139,6 +141,7 @@ src/models/MountedDataset.ts src/models/MoveDatasetInput.ts src/models/MoveDatasetResponse.ts src/models/NamedItem.ts +src/models/NextflowVersion.ts src/models/PaginatedResponseAppRegistrationDto.ts src/models/PaginatedResponseAuditEventDto.ts src/models/PaginatedResponseDatasetListDto.ts @@ -168,7 +171,9 @@ src/models/ProjectAccessRequest.ts src/models/ProjectAccessType.ts src/models/ProjectCreateOptions.ts src/models/ProjectDetail.ts +src/models/ProjectFile.ts src/models/ProjectFileAccessRequest.ts +src/models/ProjectFileQueryResponse.ts src/models/ProjectInput.ts src/models/ProjectMetrics.ts src/models/ProjectPermissionSet.ts @@ -235,6 +240,7 @@ src/models/Task.ts src/models/TaskCost.ts src/models/TaskLogSource.ts src/models/TenantInfo.ts +src/models/TenantMetrics.ts src/models/UpdateDatasetRequest.ts src/models/UpdateRowsRequest.ts src/models/UpdateUserRequest.ts diff --git a/packages/api-client/README.md b/packages/api-client/README.md index f5041c5..908ae46 100644 --- a/packages/api-client/README.md +++ b/packages/api-client/README.md @@ -36,7 +36,7 @@ navigate to the folder of your consuming project and run one of the following co _published:_ ``` -npm install @cirrobio/api-client@0.13.27 --save +npm install @cirrobio/api-client@0.13.28 --save ``` _unPublished (not recommended):_ diff --git a/packages/api-client/package.json b/packages/api-client/package.json index c82168a..f130d46 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@cirrobio/api-client", - "version": "0.13.27", + "version": "0.13.28", "description": "API client for Cirro", "author": "CirroBio", "repository": { diff --git a/packages/api-client/src/apis/FileApi.ts b/packages/api-client/src/apis/FileApi.ts index 79b17e4..056f7e3 100644 --- a/packages/api-client/src/apis/FileApi.ts +++ b/packages/api-client/src/apis/FileApi.ts @@ -18,6 +18,11 @@ import { AWSCredentialsFromJSON, AWSCredentialsToJSON, } from '../models/AWSCredentials'; +import { + type DatasetSource, + DatasetSourceFromJSON, + DatasetSourceToJSON, +} from '../models/DatasetSource'; import { type GenerateSftpCredentialsRequest, GenerateSftpCredentialsRequestFromJSON, @@ -28,16 +33,31 @@ import { GovernanceFileAccessRequestFromJSON, GovernanceFileAccessRequestToJSON, } from '../models/GovernanceFileAccessRequest'; +import { + type ProjectFile, + ProjectFileFromJSON, + ProjectFileToJSON, +} from '../models/ProjectFile'; import { type ProjectFileAccessRequest, ProjectFileAccessRequestFromJSON, ProjectFileAccessRequestToJSON, } from '../models/ProjectFileAccessRequest'; +import { + type ProjectFileQueryResponse, + ProjectFileQueryResponseFromJSON, + ProjectFileQueryResponseToJSON, +} from '../models/ProjectFileQueryResponse'; import { type SftpCredentials, SftpCredentialsFromJSON, SftpCredentialsToJSON, } from '../models/SftpCredentials'; +import { + type SqlSortOrder, + SqlSortOrderFromJSON, + SqlSortOrderToJSON, +} from '../models/SqlSortOrder'; export interface GenerateGovernanceFileAccessTokenRequest { requirementId: string; @@ -54,6 +74,28 @@ export interface GenerateProjectSftpTokenRequest { generateSftpCredentialsRequest: GenerateSftpCredentialsRequest; } +export interface GetProjectFileRequest { + projectId: string; + datasetId: string; +} + +export interface QueryProjectFilesRequest { + projectId: string; + source?: DatasetSource | null; + fileType?: string | null; + datasetId?: string | null; + processId?: string | null; + createdBy?: string | null; + pathContains?: string | null; + minSize?: number | null; + maxSize?: number | null; + createdAfter?: Date | null; + createdBefore?: Date | null; + sortOrder?: SqlSortOrder | null; + limit?: number | null; + nextToken?: string | null; +} + /** * */ @@ -254,4 +296,174 @@ export class FileApi extends runtime.BaseAPI { return await response.value(); } + /** + * Creates request options for getProjectFile without sending the request + */ + async getProjectFileRequestOpts(requestParameters: GetProjectFileRequest): Promise { + if (requestParameters['projectId'] == null) { + throw new runtime.RequiredError( + 'projectId', + 'Required parameter "projectId" was null or undefined when calling getProjectFile().' + ); + } + + if (requestParameters['datasetId'] == null) { + throw new runtime.RequiredError( + 'datasetId', + 'Required parameter "datasetId" was null or undefined when calling getProjectFile().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + const token = this.configuration.accessToken; + const tokenString = await token("accessToken", []); + + if (tokenString) { + headerParameters["Authorization"] = `Bearer ${tokenString}`; + } + } + + let urlPath = `/projects/{projectId}/files/{datasetId}/path`; + urlPath = urlPath.replace('{projectId}', encodeURIComponent(String(requestParameters['projectId']))); + urlPath = urlPath.replace('{datasetId}', encodeURIComponent(String(requestParameters['datasetId']))); + + return { + path: urlPath, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }; + } + + /** + * Fetches details on a single file given its dataset ID and relative path. + * Get a project file + */ + async getProjectFileRaw(requestParameters: GetProjectFileRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const requestOptions = await this.getProjectFileRequestOpts(requestParameters); + const response = await this.request(requestOptions, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => ProjectFileFromJSON(jsonValue)); + } + + /** + * Fetches details on a single file given its dataset ID and relative path. + * Get a project file + */ + async getProjectFile(requestParameters: GetProjectFileRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.getProjectFileRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + * Creates request options for queryProjectFiles without sending the request + */ + async queryProjectFilesRequestOpts(requestParameters: QueryProjectFilesRequest): Promise { + if (requestParameters['projectId'] == null) { + throw new runtime.RequiredError( + 'projectId', + 'Required parameter "projectId" was null or undefined when calling queryProjectFiles().' + ); + } + + const queryParameters: any = {}; + + if (requestParameters['source'] != null) { + queryParameters['source'] = requestParameters['source']; + } + + if (requestParameters['fileType'] != null) { + queryParameters['fileType'] = requestParameters['fileType']; + } + + if (requestParameters['datasetId'] != null) { + queryParameters['datasetId'] = requestParameters['datasetId']; + } + + if (requestParameters['processId'] != null) { + queryParameters['processId'] = requestParameters['processId']; + } + + if (requestParameters['createdBy'] != null) { + queryParameters['createdBy'] = requestParameters['createdBy']; + } + + if (requestParameters['pathContains'] != null) { + queryParameters['pathContains'] = requestParameters['pathContains']; + } + + if (requestParameters['minSize'] != null) { + queryParameters['minSize'] = requestParameters['minSize']; + } + + if (requestParameters['maxSize'] != null) { + queryParameters['maxSize'] = requestParameters['maxSize']; + } + + if (requestParameters['createdAfter'] != null) { + queryParameters['createdAfter'] = (requestParameters['createdAfter'] as any).toISOString(); + } + + if (requestParameters['createdBefore'] != null) { + queryParameters['createdBefore'] = (requestParameters['createdBefore'] as any).toISOString(); + } + + if (requestParameters['sortOrder'] != null) { + queryParameters['sortOrder'] = requestParameters['sortOrder']; + } + + if (requestParameters['limit'] != null) { + queryParameters['limit'] = requestParameters['limit']; + } + + if (requestParameters['nextToken'] != null) { + queryParameters['nextToken'] = requestParameters['nextToken']; + } + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + const token = this.configuration.accessToken; + const tokenString = await token("accessToken", []); + + if (tokenString) { + headerParameters["Authorization"] = `Bearer ${tokenString}`; + } + } + + let urlPath = `/projects/{projectId}/files`; + urlPath = urlPath.replace('{projectId}', encodeURIComponent(String(requestParameters['projectId']))); + + return { + path: urlPath, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }; + } + + /** + * Queries the project for files, with optional filtering, sorting, and pagination. + * Search project files + */ + async queryProjectFilesRaw(requestParameters: QueryProjectFilesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const requestOptions = await this.queryProjectFilesRequestOpts(requestParameters); + const response = await this.request(requestOptions, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => ProjectFileQueryResponseFromJSON(jsonValue)); + } + + /** + * Queries the project for files, with optional filtering, sorting, and pagination. + * Search project files + */ + async queryProjectFiles(requestParameters: QueryProjectFilesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.queryProjectFilesRaw(requestParameters, initOverrides); + return await response.value(); + } + } diff --git a/packages/api-client/src/apis/MetricsApi.ts b/packages/api-client/src/apis/MetricsApi.ts index e274904..28c01ed 100644 --- a/packages/api-client/src/apis/MetricsApi.ts +++ b/packages/api-client/src/apis/MetricsApi.ts @@ -18,6 +18,11 @@ import { ProjectMetricsFromJSON, ProjectMetricsToJSON, } from '../models/ProjectMetrics'; +import { + type TenantMetrics, + TenantMetricsFromJSON, + TenantMetricsToJSON, +} from '../models/TenantMetrics'; export interface GetProjectMetricsRequest { projectId: string; @@ -75,6 +80,53 @@ export class MetricsApi extends runtime.BaseAPI { return await response.value(); } + /** + * Creates request options for getMetricsSummary without sending the request + */ + async getMetricsSummaryRequestOpts(): Promise { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + const token = this.configuration.accessToken; + const tokenString = await token("accessToken", []); + + if (tokenString) { + headerParameters["Authorization"] = `Bearer ${tokenString}`; + } + } + + let urlPath = `/metrics-summary`; + + return { + path: urlPath, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }; + } + + /** + * Retrieves summary of tenant (item counts) + * Get tenant metric summary + */ + async getMetricsSummaryRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const requestOptions = await this.getMetricsSummaryRequestOpts(); + const response = await this.request(requestOptions, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => TenantMetricsFromJSON(jsonValue)); + } + + /** + * Retrieves summary of tenant (item counts) + * Get tenant metric summary + */ + async getMetricsSummary(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.getMetricsSummaryRaw(initOverrides); + return await response.value(); + } + /** * Creates request options for getProjectMetrics without sending the request */ diff --git a/packages/api-client/src/models/ColumnDef.ts b/packages/api-client/src/models/ColumnDef.ts index 94d5e1f..dc3a56e 100644 --- a/packages/api-client/src/models/ColumnDef.ts +++ b/packages/api-client/src/models/ColumnDef.ts @@ -101,6 +101,12 @@ export interface ColumnDef { * @memberof ColumnDef */ required?: boolean; + /** + * Whether values in this column must be unique across the sheet (NULLs exempt). Set when the column is created; enforced at write time by the application. + * @type {boolean} + * @memberof ColumnDef + */ + unique?: boolean; } @@ -134,6 +140,7 @@ export function ColumnDefFromJSONTyped(json: any, ignoreDiscriminator: boolean): 'description': json['description'] == null ? undefined : json['description'], 'foreignKey': json['foreignKey'] == null ? undefined : ForeignKeyRefFromJSON(json['foreignKey']), 'required': json['required'] == null ? undefined : json['required'], + 'unique': json['unique'] == null ? undefined : json['unique'], }; } @@ -158,6 +165,7 @@ export function ColumnDefToJSONTyped(value?: ColumnDef | null, ignoreDiscriminat 'description': value['description'], 'foreignKey': ForeignKeyRefToJSON(value['foreignKey']), 'required': value['required'], + 'unique': value['unique'], }; } diff --git a/packages/api-client/src/models/DatasetSource.ts b/packages/api-client/src/models/DatasetSource.ts new file mode 100644 index 0000000..7edab23 --- /dev/null +++ b/packages/api-client/src/models/DatasetSource.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Cirro Data + * Cirro Data Platform service API + * + * The version of the OpenAPI document: latest + * Contact: support@cirro.bio + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * How the containing dataset was generated: INGESTED (uploaded) or DERIVED (produced by a pipeline) + * @export + * @enum {string} + */ +export enum DatasetSource { + Ingested = 'INGESTED', + Derived = 'DERIVED' +} + + +export function instanceOfDatasetSource(value: any): boolean { + for (const key in DatasetSource) { + if (Object.prototype.hasOwnProperty.call(DatasetSource, key)) { + if (DatasetSource[key as keyof typeof DatasetSource] === value) { + return true; + } + } + } + return false; +} + +export function DatasetSourceFromJSON(json: any): DatasetSource { + return DatasetSourceFromJSONTyped(json, false); +} + +export function DatasetSourceFromJSONTyped(json: any, ignoreDiscriminator: boolean): DatasetSource { + return json as DatasetSource; +} + +export function DatasetSourceToJSON(value?: DatasetSource | null): any { + return value as any; +} + +export function DatasetSourceToJSONTyped(value: any, ignoreDiscriminator: boolean): DatasetSource { + return value as DatasetSource; +} + diff --git a/packages/api-client/src/models/FilterValuesInner.ts b/packages/api-client/src/models/FilterValuesInner.ts index 87f612a..58d9fb0 100644 --- a/packages/api-client/src/models/FilterValuesInner.ts +++ b/packages/api-client/src/models/FilterValuesInner.ts @@ -27,16 +27,16 @@ export function FilterValuesInnerFromJSONTyped(json: any, ignoreDiscriminator: b if (json == null) { return json; } - if (typeof json === 'number') { + if (typeof json === 'string') { return json; } if (typeof json === 'number') { return json; } - if (typeof json === 'boolean') { + if (typeof json === 'number') { return json; } - if (typeof json === 'string') { + if (typeof json === 'boolean') { return json; } return {} as any; @@ -50,16 +50,16 @@ export function FilterValuesInnerToJSONTyped(value?: FilterValuesInner | null, i if (value == null) { return value; } - if (typeof value === 'number') { + if (typeof value === 'string') { return value; } if (typeof value === 'number') { return value; } - if (typeof value === 'boolean') { + if (typeof value === 'number') { return value; } - if (typeof value === 'string') { + if (typeof value === 'boolean') { return value; } return {}; diff --git a/packages/api-client/src/models/IngestConflictMode.ts b/packages/api-client/src/models/IngestConflictMode.ts new file mode 100644 index 0000000..1419712 --- /dev/null +++ b/packages/api-client/src/models/IngestConflictMode.ts @@ -0,0 +1,53 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Cirro Data + * Cirro Data Platform service API + * + * The version of the OpenAPI document: latest + * Contact: support@cirro.bio + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * How to handle incoming rows that collide with a unique column. + * @export + * @enum {string} + */ +export enum IngestConflictMode { + Error = 'ERROR', + Skip = 'SKIP', + Overwrite = 'OVERWRITE' +} + + +export function instanceOfIngestConflictMode(value: any): boolean { + for (const key in IngestConflictMode) { + if (Object.prototype.hasOwnProperty.call(IngestConflictMode, key)) { + if (IngestConflictMode[key as keyof typeof IngestConflictMode] === value) { + return true; + } + } + } + return false; +} + +export function IngestConflictModeFromJSON(json: any): IngestConflictMode { + return IngestConflictModeFromJSONTyped(json, false); +} + +export function IngestConflictModeFromJSONTyped(json: any, ignoreDiscriminator: boolean): IngestConflictMode { + return json as IngestConflictMode; +} + +export function IngestConflictModeToJSON(value?: IngestConflictMode | null): any { + return value as any; +} + +export function IngestConflictModeToJSONTyped(value: any, ignoreDiscriminator: boolean): IngestConflictMode { + return value as IngestConflictMode; +} + diff --git a/packages/api-client/src/models/NextflowVersion.ts b/packages/api-client/src/models/NextflowVersion.ts new file mode 100644 index 0000000..9b65f70 --- /dev/null +++ b/packages/api-client/src/models/NextflowVersion.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Cirro Data + * Cirro Data Platform service API + * + * The version of the OpenAPI document: latest + * Contact: support@cirro.bio + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A Nextflow version supported by Cirro + * @export + * @enum {string} + */ +export enum NextflowVersion { + V22_04_0 = '22.04.0', + V23_10_0 = '23.10.0', + V24_10_8 = '24.10.8', + V25_10_0 = '25.10.0', + V26_04_0 = '26.04.0' +} + + +export function instanceOfNextflowVersion(value: any): boolean { + for (const key in NextflowVersion) { + if (Object.prototype.hasOwnProperty.call(NextflowVersion, key)) { + if (NextflowVersion[key as keyof typeof NextflowVersion] === value) { + return true; + } + } + } + return false; +} + +export function NextflowVersionFromJSON(json: any): NextflowVersion { + return NextflowVersionFromJSONTyped(json, false); +} + +export function NextflowVersionFromJSONTyped(json: any, ignoreDiscriminator: boolean): NextflowVersion { + return json as NextflowVersion; +} + +export function NextflowVersionToJSON(value?: NextflowVersion | null): any { + return value as any; +} + +export function NextflowVersionToJSONTyped(value: any, ignoreDiscriminator: boolean): NextflowVersion { + return value as NextflowVersion; +} + diff --git a/packages/api-client/src/models/PipelineCode.ts b/packages/api-client/src/models/PipelineCode.ts index cc8de08..2ce547a 100644 --- a/packages/api-client/src/models/PipelineCode.ts +++ b/packages/api-client/src/models/PipelineCode.ts @@ -13,6 +13,13 @@ */ import { mapValues } from '../runtime'; +import type { NextflowVersion } from './NextflowVersion'; +import { + NextflowVersionFromJSON, + NextflowVersionFromJSONTyped, + NextflowVersionToJSON, + NextflowVersionToJSONTyped, +} from './NextflowVersion'; import type { RepositoryType } from './RepositoryType'; import { RepositoryTypeFromJSON, @@ -52,11 +59,11 @@ export interface PipelineCode { */ entryPoint: string; /** - * Version of the executor - * @type {string} + * Nextflow version used to run the pipeline; must be one of the supported versions + * @type {NextflowVersion} * @memberof PipelineCode */ - executorVersion?: string | null; + executorVersion?: NextflowVersion | null; } @@ -86,7 +93,7 @@ export function PipelineCodeFromJSONTyped(json: any, ignoreDiscriminator: boolea 'version': json['version'], 'repositoryType': RepositoryTypeFromJSON(json['repositoryType']), 'entryPoint': json['entryPoint'], - 'executorVersion': json['executorVersion'] == null ? undefined : json['executorVersion'], + 'executorVersion': json['executorVersion'] == null ? undefined : NextflowVersionFromJSON(json['executorVersion']), }; } @@ -105,7 +112,7 @@ export function PipelineCodeToJSONTyped(value?: PipelineCode | null, ignoreDiscr 'version': value['version'], 'repositoryType': RepositoryTypeToJSON(value['repositoryType']), 'entryPoint': value['entryPoint'], - 'executorVersion': value['executorVersion'], + 'executorVersion': NextflowVersionToJSON(value['executorVersion']), }; } diff --git a/packages/api-client/src/models/ProjectFile.ts b/packages/api-client/src/models/ProjectFile.ts new file mode 100644 index 0000000..878286f --- /dev/null +++ b/packages/api-client/src/models/ProjectFile.ts @@ -0,0 +1,139 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Cirro Data + * Cirro Data Platform service API + * + * The version of the OpenAPI document: latest + * Contact: support@cirro.bio + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { DatasetSource } from './DatasetSource'; +import { + DatasetSourceFromJSON, + DatasetSourceFromJSONTyped, + DatasetSourceToJSON, + DatasetSourceToJSONTyped, +} from './DatasetSource'; + +/** + * + * @export + * @interface ProjectFile + */ +export interface ProjectFile { + /** + * What dataset ID this file originated from + * @type {string} + * @memberof ProjectFile + */ + datasetId?: string; + /** + * Relative path to file + * @type {string} + * @memberof ProjectFile + */ + path?: string; + /** + * Absolute path to file + * @type {string} + * @memberof ProjectFile + */ + absolutePath?: string; + /** + * How the containing dataset was generated: INGESTED (uploaded) or DERIVED (produced by a pipeline) + * @type {DatasetSource} + * @memberof ProjectFile + */ + source?: DatasetSource; + /** + * What process created the containing dataset (pipeline or data type) + * @type {string} + * @memberof ProjectFile + */ + processId?: string; + /** + * File type derived from the extension, compression suffixes stripped; null when the file has no extension + * @type {string} + * @memberof ProjectFile + */ + fileType?: string; + /** + * File size (in bytes) + * @type {number} + * @memberof ProjectFile + */ + size?: number; + /** + * Who created the containing dataset + * @type {string} + * @memberof ProjectFile + */ + createdBy?: string; + /** + * When the file was created + * @type {Date} + * @memberof ProjectFile + */ + createdAt?: Date; +} + + + +/** + * Check if a given object implements the ProjectFile interface. + */ +export function instanceOfProjectFile(value: object): value is ProjectFile { + return true; +} + +export function ProjectFileFromJSON(json: any): ProjectFile { + return ProjectFileFromJSONTyped(json, false); +} + +export function ProjectFileFromJSONTyped(json: any, ignoreDiscriminator: boolean): ProjectFile { + if (json == null) { + return json; + } + return { + + 'datasetId': json['datasetId'] == null ? undefined : json['datasetId'], + 'path': json['path'] == null ? undefined : json['path'], + 'absolutePath': json['absolutePath'] == null ? undefined : json['absolutePath'], + 'source': json['source'] == null ? undefined : DatasetSourceFromJSON(json['source']), + 'processId': json['processId'] == null ? undefined : json['processId'], + 'fileType': json['fileType'] == null ? undefined : json['fileType'], + 'size': json['size'] == null ? undefined : json['size'], + 'createdBy': json['createdBy'] == null ? undefined : json['createdBy'], + 'createdAt': json['createdAt'] == null ? undefined : (new Date(json['createdAt'])), + }; +} + +export function ProjectFileToJSON(json: any): ProjectFile { + return ProjectFileToJSONTyped(json, false); +} + +export function ProjectFileToJSONTyped(value?: ProjectFile | null, ignoreDiscriminator: boolean = false): any { + if (value == null) { + return value; + } + + return { + + 'datasetId': value['datasetId'], + 'path': value['path'], + 'absolutePath': value['absolutePath'], + 'source': DatasetSourceToJSON(value['source']), + 'processId': value['processId'], + 'fileType': value['fileType'], + 'size': value['size'], + 'createdBy': value['createdBy'], + 'createdAt': value['createdAt'] == null ? value['createdAt'] : value['createdAt'].toISOString(), + }; +} + diff --git a/packages/api-client/src/models/ProjectFileQueryResponse.ts b/packages/api-client/src/models/ProjectFileQueryResponse.ts new file mode 100644 index 0000000..284f73c --- /dev/null +++ b/packages/api-client/src/models/ProjectFileQueryResponse.ts @@ -0,0 +1,90 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Cirro Data + * Cirro Data Platform service API + * + * The version of the OpenAPI document: latest + * Contact: support@cirro.bio + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { ProjectFile } from './ProjectFile'; +import { + ProjectFileFromJSON, + ProjectFileFromJSONTyped, + ProjectFileToJSON, + ProjectFileToJSONTyped, +} from './ProjectFile'; + +/** + * + * @export + * @interface ProjectFileQueryResponse + */ +export interface ProjectFileQueryResponse { + /** + * + * @type {Array} + * @memberof ProjectFileQueryResponse + */ + data: Array; + /** + * Token used to fetch the next page; null when there are no more results + * @type {string} + * @memberof ProjectFileQueryResponse + */ + nextToken?: string | null; + /** + * Total number of files matching the query; only populated on the first page + * @type {number} + * @memberof ProjectFileQueryResponse + */ + totalCount?: number | null; +} + +/** + * Check if a given object implements the ProjectFileQueryResponse interface. + */ +export function instanceOfProjectFileQueryResponse(value: object): value is ProjectFileQueryResponse { + if (!('data' in value) || value['data'] === undefined) return false; + return true; +} + +export function ProjectFileQueryResponseFromJSON(json: any): ProjectFileQueryResponse { + return ProjectFileQueryResponseFromJSONTyped(json, false); +} + +export function ProjectFileQueryResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): ProjectFileQueryResponse { + if (json == null) { + return json; + } + return { + + 'data': ((json['data'] as Array).map(ProjectFileFromJSON)), + 'nextToken': json['nextToken'] == null ? undefined : json['nextToken'], + 'totalCount': json['totalCount'] == null ? undefined : json['totalCount'], + }; +} + +export function ProjectFileQueryResponseToJSON(json: any): ProjectFileQueryResponse { + return ProjectFileQueryResponseToJSONTyped(json, false); +} + +export function ProjectFileQueryResponseToJSONTyped(value?: ProjectFileQueryResponse | null, ignoreDiscriminator: boolean = false): any { + if (value == null) { + return value; + } + + return { + + 'data': ((value['data'] as Array).map(ProjectFileToJSON)), + 'nextToken': value['nextToken'], + 'totalCount': value['totalCount'], + }; +} + diff --git a/packages/api-client/src/models/RowInsert.ts b/packages/api-client/src/models/RowInsert.ts index b908bc3..276cf21 100644 --- a/packages/api-client/src/models/RowInsert.ts +++ b/packages/api-client/src/models/RowInsert.ts @@ -20,7 +20,7 @@ import { mapValues } from '../runtime'; */ export interface RowInsert { /** - * Column name and value. Any missing columns will have a null value (will error if column is required). CIRRO_FILE column values are objects with datasetId and path (relative to the dataset's data directory). + * Column name and value. Any missing columns will have a null value (will error if column is required). CIRRO_FILE and CIRRO_FOLDER column values are objects with datasetId and path (relative to the dataset's data directory). * @type {{ [key: string]: object; }} * @memberof RowInsert */ diff --git a/packages/api-client/src/models/RowUpdate.ts b/packages/api-client/src/models/RowUpdate.ts index 922f5ee..2f0a1a8 100644 --- a/packages/api-client/src/models/RowUpdate.ts +++ b/packages/api-client/src/models/RowUpdate.ts @@ -26,7 +26,7 @@ export interface RowUpdate { */ rowId: number; /** - * Column name and new value. Only the columns included here are updated; all other columns on the row are left unchanged. At least one entry is required. CIRRO_FILE column values are objects with datasetId and path (relative to the dataset's data directory). + * Column name and new value. Only the columns included here are updated; all other columns on the row are left unchanged. At least one entry is required. CIRRO_FILE and CIRRO_FOLDER column values are objects with datasetId and path (relative to the dataset's data directory). * @type {{ [key: string]: object; }} * @memberof RowUpdate */ diff --git a/packages/api-client/src/models/SemanticColumnType.ts b/packages/api-client/src/models/SemanticColumnType.ts index 98c6ee8..3425c37 100644 --- a/packages/api-client/src/models/SemanticColumnType.ts +++ b/packages/api-client/src/models/SemanticColumnType.ts @@ -19,13 +19,11 @@ */ export enum SemanticColumnType { Standard = 'STANDARD', - EntityName = 'ENTITY_NAME', - EntityKey = 'ENTITY_KEY', EnumSingle = 'ENUM_SINGLE', EnumMulti = 'ENUM_MULTI', Url = 'URL', CirroFile = 'CIRRO_FILE', - DatasetLink = 'DATASET_LINK', + CirroFolder = 'CIRRO_FOLDER', ForeignKey = 'FOREIGN_KEY' } diff --git a/packages/api-client/src/models/SheetIngestRequest.ts b/packages/api-client/src/models/SheetIngestRequest.ts index 98d986a..65e5669 100644 --- a/packages/api-client/src/models/SheetIngestRequest.ts +++ b/packages/api-client/src/models/SheetIngestRequest.ts @@ -27,6 +27,13 @@ import { SourceColumnToJSON, SourceColumnToJSONTyped, } from './SourceColumn'; +import type { IngestConflictMode } from './IngestConflictMode'; +import { + IngestConflictModeFromJSON, + IngestConflictModeFromJSONTyped, + IngestConflictModeToJSON, + IngestConflictModeToJSONTyped, +} from './IngestConflictMode'; /** * @@ -46,8 +53,22 @@ export interface SheetIngestRequest { * @memberof SheetIngestRequest */ sourceColumns?: Array | null; + /** + * How to handle rows colliding with a unique column: fail the job (default), skip them, or overwrite the stored rows. SKIP and OVERWRITE require the sheet to have a unique column. + * @type {IngestConflictMode} + * @memberof SheetIngestRequest + */ + onConflict?: IngestConflictMode | null; + /** + * Unique column OVERWRITE replaces on. Required when the sheet has several unique columns; inferred when it has one. + * @type {string} + * @memberof SheetIngestRequest + */ + conflictColumn?: string | null; } + + /** * Check if a given object implements the SheetIngestRequest interface. */ @@ -68,6 +89,8 @@ export function SheetIngestRequestFromJSONTyped(json: any, ignoreDiscriminator: 'fileDef': FileDefFromJSON(json['fileDef']), 'sourceColumns': json['sourceColumns'] == null ? undefined : ((json['sourceColumns'] as Array).map(SourceColumnFromJSON)), + 'onConflict': json['onConflict'] == null ? undefined : IngestConflictModeFromJSON(json['onConflict']), + 'conflictColumn': json['conflictColumn'] == null ? undefined : json['conflictColumn'], }; } @@ -84,6 +107,8 @@ export function SheetIngestRequestToJSONTyped(value?: SheetIngestRequest | null, 'fileDef': FileDefToJSON(value['fileDef']), 'sourceColumns': value['sourceColumns'] == null ? undefined : ((value['sourceColumns'] as Array).map(SourceColumnToJSON)), + 'onConflict': IngestConflictModeToJSON(value['onConflict']), + 'conflictColumn': value['conflictColumn'], }; } diff --git a/packages/api-client/src/models/SourceColumn.ts b/packages/api-client/src/models/SourceColumn.ts index 35480ba..5fe996e 100644 --- a/packages/api-client/src/models/SourceColumn.ts +++ b/packages/api-client/src/models/SourceColumn.ts @@ -38,7 +38,7 @@ export interface SourceColumn { */ sheetColumn: string; /** - * Dataset holding the referenced files. Required when the target sheet column is CIRRO_FILE, forbidden otherwise; every path in the column must exist in this dataset. + * Dataset holding the referenced files or folders. Required when the target sheet column is CIRRO_FILE or CIRRO_FOLDER, forbidden otherwise. * @type {string} * @memberof SourceColumn */ diff --git a/packages/api-client/src/models/TenantMetrics.ts b/packages/api-client/src/models/TenantMetrics.ts new file mode 100644 index 0000000..4f078ad --- /dev/null +++ b/packages/api-client/src/models/TenantMetrics.ts @@ -0,0 +1,111 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Cirro Data + * Cirro Data Platform service API + * + * The version of the OpenAPI document: latest + * Contact: support@cirro.bio + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface TenantMetrics + */ +export interface TenantMetrics { + /** + * + * @type {number} + * @memberof TenantMetrics + */ + projectCount: number; + /** + * + * @type {number} + * @memberof TenantMetrics + */ + datasetCount: number; + /** + * + * @type {number} + * @memberof TenantMetrics + */ + pipelineCount: number; + /** + * + * @type {number} + * @memberof TenantMetrics + */ + workspaceCount: number; + /** + * + * @type {number} + * @memberof TenantMetrics + */ + userCount: number; + /** + * + * @type {number} + * @memberof TenantMetrics + */ + policyCount: number; +} + +/** + * Check if a given object implements the TenantMetrics interface. + */ +export function instanceOfTenantMetrics(value: object): value is TenantMetrics { + if (!('projectCount' in value) || value['projectCount'] === undefined) return false; + if (!('datasetCount' in value) || value['datasetCount'] === undefined) return false; + if (!('pipelineCount' in value) || value['pipelineCount'] === undefined) return false; + if (!('workspaceCount' in value) || value['workspaceCount'] === undefined) return false; + if (!('userCount' in value) || value['userCount'] === undefined) return false; + if (!('policyCount' in value) || value['policyCount'] === undefined) return false; + return true; +} + +export function TenantMetricsFromJSON(json: any): TenantMetrics { + return TenantMetricsFromJSONTyped(json, false); +} + +export function TenantMetricsFromJSONTyped(json: any, ignoreDiscriminator: boolean): TenantMetrics { + if (json == null) { + return json; + } + return { + + 'projectCount': json['projectCount'], + 'datasetCount': json['datasetCount'], + 'pipelineCount': json['pipelineCount'], + 'workspaceCount': json['workspaceCount'], + 'userCount': json['userCount'], + 'policyCount': json['policyCount'], + }; +} + +export function TenantMetricsToJSON(json: any): TenantMetrics { + return TenantMetricsToJSONTyped(json, false); +} + +export function TenantMetricsToJSONTyped(value?: TenantMetrics | null, ignoreDiscriminator: boolean = false): any { + if (value == null) { + return value; + } + + return { + + 'projectCount': value['projectCount'], + 'datasetCount': value['datasetCount'], + 'pipelineCount': value['pipelineCount'], + 'workspaceCount': value['workspaceCount'], + 'userCount': value['userCount'], + 'policyCount': value['policyCount'], + }; +} + diff --git a/packages/api-client/src/models/index.ts b/packages/api-client/src/models/index.ts index d89e656..11089a6 100644 --- a/packages/api-client/src/models/index.ts +++ b/packages/api-client/src/models/index.ts @@ -54,6 +54,7 @@ export * from './DatasetAssetsManifest'; export * from './DatasetCondition'; export * from './DatasetConditionField'; export * from './DatasetDetail'; +export * from './DatasetSource'; export * from './DatasetViz'; export * from './DeleteRowsRequest'; export * from './Discussion'; @@ -96,6 +97,7 @@ export * from './GovernanceTrainingVerification'; export * from './GovernanceType'; export * from './GroupCost'; export * from './ImportDataRequest'; +export * from './IngestConflictMode'; export * from './InsertRowsRequest'; export * from './InviteUserRequest'; export * from './InviteUserResponse'; @@ -112,6 +114,7 @@ export * from './MountedDataset'; export * from './MoveDatasetInput'; export * from './MoveDatasetResponse'; export * from './NamedItem'; +export * from './NextflowVersion'; export * from './PaginatedResponseAppRegistrationDto'; export * from './PaginatedResponseAuditEventDto'; export * from './PaginatedResponseDatasetListDto'; @@ -141,7 +144,9 @@ export * from './ProjectAccessRequest'; export * from './ProjectAccessType'; export * from './ProjectCreateOptions'; export * from './ProjectDetail'; +export * from './ProjectFile'; export * from './ProjectFileAccessRequest'; +export * from './ProjectFileQueryResponse'; export * from './ProjectInput'; export * from './ProjectMetrics'; export * from './ProjectPermissionSet'; @@ -208,6 +213,7 @@ export * from './Task'; export * from './TaskCost'; export * from './TaskLogSource'; export * from './TenantInfo'; +export * from './TenantMetrics'; export * from './UpdateDatasetRequest'; export * from './UpdateRowsRequest'; export * from './UpdateUserRequest'; diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 4a10e75..a18ffb7 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@cirrobio/sdk", - "version": "0.13.27", + "version": "0.13.28", "description": "SDK for Cirro", "author": "CirroBio", "repository": {