/** * Copyright (c) 2020-present, Goldman Sachs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { type V1_ContractUserMembership, type V1_ConsumerEntitlementResource, type V1_OrganizationalScope, type V1_PaginationMetadataRecord, type V1_User, type V1_UserApprovalStatus, } from './V1_CoreEntitlements.js'; import type { V1_DataSubscription } from '../subscriptions/V1_ConsumerSubscriptions.js'; // ------------------------------------------- Data Contracts ------------------------------------------- export enum V1_ContractState { DRAFT = 'DRAFT', PENDING_DATA_OWNER_APPROVAL = 'PENDING_DATA_OWNER_APPROVAL', OPEN_FOR_PRIVILEGE_MANAGER_APPROVAL = 'OPEN_FOR_PRIVILEGE_MANAGER_APPROVAL', COMPLETED = 'COMPLETED', REJECTED = 'REJECTED', CLOSED = 'CLOSED', } export class V1_DataContract { description!: string; guid!: string; version!: number; state!: V1_ContractState; resource!: V1_ConsumerEntitlementResource; members: V1_ContractUserMembership[] = []; consumer!: V1_OrganizationalScope; createdBy!: string; createdAt!: string; } export class V1_DataContractSubscriptions { dataContract!: V1_DataContract; subscriptions?: V1_DataSubscription[]; } export class V1_DataContractsResponse { dataContracts?: V1_DataContractSubscriptions[]; } export class V1_InvalidateDataContractResponse { contractId!: string; invalidated!: boolean; requestId!: string; } // -------------------------------------- Lite Access Requests (base) ---------------------------------- /** * Base class for lightweight access request representations (contracts and data requests) * used in the pending tasks grid. */ export class V1_LiteAccessRequest { guid!: string; description!: string; members: V1_ContractUserMembership[] = []; consumer!: V1_OrganizationalScope; createdBy!: string; createdAt!: string; resourceId!: string; resourceType!: V1_ResourceType; deploymentId!: number; accessPointGroup?: string; } // -------------------------------------- Lite Data Contracts ------------------------------------------ export class V1_LiteDataContract extends V1_LiteAccessRequest { version!: number; state!: V1_ContractState; } // -------------------------------------- Lite Data Access Requests ------------------------------------ export class V1_LiteDataAccessRequest extends V1_LiteAccessRequest { state!: string; } export class V1_LiteDataContractsResponse { dataContracts?: V1_LiteDataContract[]; } export class V1_LiteDataContractsPaginatedResponse { liteDataContractsResponse!: V1_LiteDataContractsResponse; paginationMetadataRecord!: V1_PaginationMetadataRecord; } export class V1_LiteDataContractWithUserStatus { contractResultLite!: V1_LiteDataContract; status!: V1_EnrichedUserApprovalStatus; pendingTaskWithAssignees!: V1_PendingTaskWithAssignees | null; user!: string; } // -------------------------------------- Data Contract Approval --------------------------------------- export enum V1_EnrichedUserApprovalStatus { UNKNOWN = 'UNKNOWN', SUBMITTED_FOR_APPROVALS = 'SUBMITTED_FOR_APPROVALS', PENDING_CONSUMER_PRIVILEGE_MANAGER_APPROVAL = 'PENDING_CONSUMER_PRIVILEGE_MANAGER_APPROVAL', PENDING_DATA_OWNER_APPROVAL = 'PENDING_DATA_OWNER_APPROVAL', APPROVED = 'APPROVED', DENIED = 'DENIED', REVOKED = 'REVOKED', CLOSED = 'CLOSED', NO_ACCESS = 'NO_ACCESS', ENTERPRISE = 'ENTERPRISE', } export class V1_DataContractApprovedUsersResponse { approvedUsers?: V1_User[]; } export enum V1_ResourceType { ACCESS_POINT_GROUP = 'ACCESS_POINT_GROUP', DATA_PRODUCT = 'DATA_PRODUCT', DATA_BUNDLE = 'DATA_BUNDLE', UNKNOWN = 'UNKNOWN', } export enum V1_ApprovalType { DATA_OWNER_APPROVAL = 'DATA_OWNER_APPROVAL', CONSUMER_PRIVILEGE_MANAGER_APPROVAL = 'CONSUMER_PRIVILEGE_MANAGER_APPROVAL', } export class V1_ContractUserStatusResponse { status!: V1_EnrichedUserApprovalStatus; } // ---------------------------------------- Data Contract Tasks ---------------------------------------- export enum V1_ContractEventPayloadType { CLOSED = 'Closed', DATA_PRODUCER_APPROVED = 'DataProducerApproved', DATA_PRODUCER_REJECTED = 'DataProducerRejected', PRIVILEGE_MANAGER_APPROVED = 'PrivilegeManagerApproved', PRIVILEGE_MANAGER_REJECTED = 'PrivilegeManagerRejected', SUBMITTED = 'Submitted', SUBMITTED_FOR_AUTO_APPROVAL = 'SubmittedForAutoApproval', } export class V1_TaskStatus { status!: V1_UserApprovalStatus; errorType: string | undefined; errorMessage: string | undefined; } export class V1_CreateContractPayload { description!: string; resourceId!: string; resourceType!: V1_ResourceType; deploymentId!: number; accessPointGroup?: string | undefined; consumer!: V1_OrganizationalScope; } export abstract class V1_ContractUserEventPayload { type!: V1_ContractEventPayloadType; eventTimestamp!: string; } export class V1_TerminalOrderItem { providerName!: string; productName!: string; category!: string; price!: number; id!: number; perm_id?: number; } export class V1_TerminalProvisionPayload { ordered_by!: string; kerberos!: string; order_items!: Record; business_justification!: string; } export class V1_ContractUserEventPrivilegeManagerPayload extends V1_ContractUserEventPayload { candidateIdentity!: string; managerIdentity!: string; taskId!: string; } export class V1_ContractUserEventDataProducerPayload extends V1_ContractUserEventPayload { candidateIdentity!: string; dataProducerIdentity!: string; taskId!: string; } export abstract class V1_PendingTaskRecord { taskId!: string; status!: V1_UserApprovalStatus; consumer!: string; type!: V1_ApprovalType; abstract get accessRequestId(): string; } export class V1_ContractUserEventRecord extends V1_PendingTaskRecord { dataContractId!: string; eventPayload!: V1_ContractUserEventPayload | undefined; effectiveFrom!: string; effectiveTo!: string; isEscalated!: boolean; override get accessRequestId(): string { return this.dataContractId; } } export class V1_DataRequestUserEventRecord extends V1_PendingTaskRecord { dataRequestId!: string; override get accessRequestId(): string { return this.dataRequestId; } } export class V1_PendingTasksResponse { privilegeManager: V1_ContractUserEventRecord[] = []; dataOwner: V1_ContractUserEventRecord[] = []; } export class V1_TaskStatusChangeResponse { status!: V1_UserApprovalStatus; errorType: string | undefined; errorMessage: string | undefined; } export class V1_TaskMetadata { rec!: V1_ContractUserEventRecord; assignees: string[] = []; } export class V1_TaskResponse { tasks: V1_TaskMetadata[] | undefined; } // ---------------------------------------- Pending Data Contracts ---------------------------------------- export type V1_PendingTaskWithAssignees = { taskId: string; assignees: string[]; }; export type V1_UserPendingContractsRecord = { contractId: string; contractDescription: string; pendingTaskWithAssignees: V1_PendingTaskWithAssignees; }; export type V1_UserPendingContractsResponse = { records: V1_UserPendingContractsRecord[] | undefined; };