import {z} from 'zod' export type ProjectCreateSchema = {name: string, paymentProviderPlanId?: string | undefined, businessDetails?: string | undefined, businessDetailsCountry?: string | undefined, financeAccountingEmail?: string | undefined, paymentProviderPromoCode?: string | undefined, isFeatureFlagMonitorGroupsEnabled?: boolean | undefined, activeMonitorsLimit?: number | undefined, seatLimit?: number | undefined, incidentNumberPrefix?: string | undefined, alertNumberPrefix?: string | undefined, scheduledMaintenanceNumberPrefix?: string | undefined, securityCaseNumberPrefix?: string | undefined, incidentEpisodeNumberPrefix?: string | undefined, alertEpisodeNumberPrefix?: string | undefined, incidentNumbersStartAt?: number | undefined, incidentEpisodeNumbersStartAt?: number | undefined, alertNumbersStartAt?: number | undefined, alertEpisodeNumbersStartAt?: number | undefined, scheduledMaintenanceNumbersStartAt?: number | undefined, securityCaseNumbersStartAt?: number | undefined, enableAutomaticIncidentInvestigation?: boolean | undefined, enableAutomaticAlertInvestigation?: boolean | undefined, enableAutomaticSecurityCaseTriage?: boolean | undefined, enableSecurityRiskCases?: boolean | undefined, securityRiskCaseThreshold?: number | undefined, enableAutomaticIncidentRemediation?: boolean | undefined, enableAutomaticAlertRemediation?: boolean | undefined, enableAutomaticPostmortemDraft?: boolean | undefined, enableAiInsights?: boolean | undefined, enableInsightFixTasks?: boolean | undefined, enableAutomaticProfileRemediation?: boolean | undefined, enableAutomaticTraceRemediation?: boolean | undefined, enableAutomaticExceptionRemediation?: boolean | undefined, enableAutomaticMetricRemediation?: boolean | undefined, enableAutomaticLogRemediation?: boolean | undefined, autoArchiveNonActionableExceptions?: boolean | undefined, sendInvoicesByEmail?: boolean | undefined, utmContent?: string | undefined, useGlobalRunners?: boolean | undefined, enableAuditLogs?: boolean | undefined, isSessionReplayAllowed?: boolean | undefined, auditLogsRetentionInDays?: number | undefined, storeSystemEventsInAuditLogs?: boolean | undefined, recordAndTranscribeIncidentCalls?: boolean | undefined}; export type CreateApiProjectArgs = {body: {data: ProjectCreateSchema}}; export type CreateApiProjectOptions = {baseUrl?: string | undefined, ApiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const projectReadSchema = z.object({_id: z.string().optional(), createdAt: z.object({}).optional(), updatedAt: z.object({}).optional(), deletedAt: z.object({}).optional(), name: z.string(), slug: z.string().optional(), paymentProviderPlanId: z.string().optional(), paymentProviderSubscriptionId: z.string().optional(), paymentProviderMeteredSubscriptionId: z.string().optional(), paymentProviderSubscriptionSeats: z.number().optional(), trialEndsAt: z.object({}).optional(), paymentProviderCustomerId: z.string().optional(), businessDetails: z.string().optional(), businessDetailsCountry: z.string().optional(), financeAccountingEmail: z.string().optional(), paymentProviderSubscriptionStatus: z.enum(["incomplete", "incomplete_expired", "trialing", "active", "past_due", "canceled", "unpaid", "expired", "paused"]).optional(), paymentProviderMeteredSubscriptionStatus: z.enum(["incomplete", "incomplete_expired", "trialing", "active", "past_due", "canceled", "unpaid", "expired", "paused"]).optional(), paymentProviderPromoCode: z.string().optional(), createdByUserId: z.string().optional(), deletedByUserId: z.string().optional(), isFeatureFlagMonitorGroupsEnabled: z.boolean().optional(), workflowRunsInLast30Days: z.number().optional(), requireSsoForLogin: z.boolean().optional(), requireSsoWithSsoProviderId: z.string().optional(), incidentNumberPrefix: z.string().optional(), alertNumberPrefix: z.string().optional(), scheduledMaintenanceNumberPrefix: z.string().optional(), securityCaseNumberPrefix: z.string().optional(), incidentEpisodeNumberPrefix: z.string().optional(), alertEpisodeNumberPrefix: z.string().optional(), incidentNumbersStartAt: z.number().optional(), incidentEpisodeNumbersStartAt: z.number().optional(), alertNumbersStartAt: z.number().optional(), alertEpisodeNumbersStartAt: z.number().optional(), scheduledMaintenanceNumbersStartAt: z.number().optional(), securityCaseNumbersStartAt: z.number().optional(), smsOrCallCurrentBalanceInUSDCents: z.number().optional(), autoRechargeSmsOrCallByBalanceInUSD: z.number().optional(), autoRechargeSmsOrCallWhenCurrentBalanceFallsInUSD: z.number().optional(), enableSmsNotifications: z.boolean().optional(), enableWhatsAppNotifications: z.boolean().optional(), enableTelegramNotifications: z.boolean().optional(), enableCallNotifications: z.boolean().optional(), disableOnCallNotificationFallback: z.boolean().optional(), enableAutoRechargeSmsOrCallBalance: z.boolean().optional(), aiCurrentBalanceInUSDCents: z.number().optional(), autoAiRechargeByBalanceInUSD: z.number().optional(), autoRechargeAiWhenCurrentBalanceFallsInUSD: z.number().optional(), enableAi: z.boolean().optional(), aiContext: z.string().optional(), aiDailyTokenLimit: z.number().optional(), aiDailySpendLimitInUSD: z.number().optional(), enableAutomaticIncidentInvestigation: z.boolean().optional(), enableAutomaticAlertInvestigation: z.boolean().optional(), enableAutomaticSecurityCaseTriage: z.boolean().optional(), enableSecurityRiskCases: z.boolean().optional(), securityRiskCaseThreshold: z.number().optional(), enableAutomaticIncidentRemediation: z.boolean().optional(), enableAutomaticAlertRemediation: z.boolean().optional(), enableAutomaticPostmortemDraft: z.boolean().optional(), acknowledgeLinkedAlertsWhenIncidentAcknowledged: z.boolean().optional(), resolveLinkedAlertsWhenIncidentResolved: z.boolean().optional(), limitIncidentsToOneEpisode: z.boolean().optional(), limitAlertsToOneEpisode: z.boolean().optional(), defaultNetworkTopologyLayout: z.enum(["force", "tiered", "radial", "star", "parentChild"]).optional(), enableAiInsights: z.boolean().optional(), enableInsightFixTasks: z.boolean().optional(), enableAutomaticProfileRemediation: z.boolean().optional(), enableAutomaticTraceRemediation: z.boolean().optional(), enableAutomaticExceptionRemediation: z.boolean().optional(), enableAutomaticMetricRemediation: z.boolean().optional(), enableAutomaticLogRemediation: z.boolean().optional(), autoArchiveNonActionableExceptions: z.boolean().optional(), alertInvestigationMinimumSeverityId: z.string().optional(), aiDailyAutonomousTokenLimit: z.number().optional(), incidentAiDailyAutonomousTokenLimit: z.number().optional(), alertAiDailyAutonomousTokenLimit: z.number().optional(), aiDailyFixTaskLimit: z.number().optional(), incidentAiDailyFixTaskLimit: z.number().optional(), alertAiDailyFixTaskLimit: z.number().optional(), alertInvestigationDedupeWindowMinutes: z.number().optional(), incidentInvestigationMinimumSeverityId: z.string().optional(), incidentInvestigationDedupeWindowMinutes: z.number().optional(), aiMaxConcurrentInvestigations: z.number().optional(), incidentAiMaxConcurrentInvestigations: z.number().optional(), alertAiMaxConcurrentInvestigations: z.number().optional(), incidentAiInvestigationTimeLimitInMinutes: z.number().optional(), alertAiInvestigationTimeLimitInMinutes: z.number().optional(), enableAutoRechargeAiBalance: z.boolean().optional(), sendInvoicesByEmail: z.boolean().optional(), doNotAddGlobalProbesByDefaultOnNewMonitors: z.boolean().optional(), useGlobalRunners: z.boolean().optional(), gitHubAppInstallationId: z.string().optional(), defaultMetricCardinalityBudget: z.number().optional(), defaultTelemetryRetentionInDays: z.number().optional(), telemetryRetentionConfig: z.object({}).optional(), defaultMetricDownsamplingRetentionDays: z.object({}).optional(), enableAuditLogs: z.boolean().optional(), isSessionReplayAllowed: z.boolean().optional(), auditLogsRetentionInDays: z.number().optional(), storeSystemEventsInAuditLogs: z.boolean().optional(), recordAndTranscribeIncidentCalls: z.boolean().optional()}); export const createApiProjectResponse = z.object({data: projectReadSchema.optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Create Project * * POST /project */ export const createApiProject = async (args: CreateApiProjectArgs, options?: CreateApiProjectOptions) => { const {baseUrl = "https://oneuptime.com/api", fetch: fetchFn = fetch, ApiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (ApiKey !== undefined) headers.set("APIKey", ApiKey) const url = `${baseUrl.replace(/\/+$/, '')}/project${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(createApiProjectResponse, await res.json()) };