import {z} from 'zod' export type ProtosIssuesV1IssuesFilter = {ids?: Array | undefined, since?: string | undefined, until?: string | undefined, repositoryNames?: Array | undefined, repositoryIds?: Array | undefined, repositoryTags?: Array | undefined, refs?: Array | undefined, repositoryRefIds?: Array | undefined, aiVerdicts?: (Array<'VERDICT_UNSPECIFIED' | 'VERDICT_TRUE_POSITIVE' | 'VERDICT_FALSE_POSITIVE' | 'VERDICT_NO_VERDICT'>) | undefined, aiSensitivities?: Array | undefined, status?: (Array<'ISSUE_STATUS_UNSPECIFIED' | 'ISSUE_STATUS_FIXED' | 'ISSUE_STATUS_MUTED' | 'ISSUE_STATUS_REMOVED' | 'ISSUE_STATUS_UNRESOLVED'>) | undefined, tab?: ('ISSUE_TAB_OPEN' | 'ISSUE_TAB_IGNORED' | 'ISSUE_TAB_CLOSED' | 'ISSUE_TAB_REVIEWING' | 'ISSUE_TAB_FIXING' | 'ISSUE_TAB_PROVISIONALLY_IGNORED') | undefined, teamNames?: Array | undefined, actions?: (Array<'MODE_UNSPECIFIED' | 'MODE_MONITOR' | 'MODE_COMMENT' | 'MODE_BLOCK' | 'MODE_DISABLED'>) | undefined, policySlugs?: Array | undefined, rules?: Array | undefined, ruleIds?: Array | undefined, rulesets?: Array | undefined, categories?: Array | undefined, confidences?: (Array<'CONFIDENCE_UNSPECIFIED' | 'CONFIDENCE_HIGH' | 'CONFIDENCE_MEDIUM' | 'CONFIDENCE_LOW'>) | undefined, severities?: (Array<'SEVERITY_UNSPECIFIED' | 'SEVERITY_HIGH' | 'SEVERITY_MEDIUM' | 'SEVERITY_LOW' | 'SEVERITY_CRITICAL'>) | undefined, transitivities?: (Array<'UNKNOWN_TRANSITIVITY' | 'TRANSITIVE' | 'DIRECT'>) | undefined, exposures?: (Array<'UNKNOWN_EXPOSURE' | 'UNREACHABLE' | 'REACHABLE'>) | undefined, dependencies?: Array | undefined, cves?: Array | undefined, source?: (Array<'SOURCE_UNSPECIFIED' | 'SOURCE_PRO' | 'SOURCE_COMMUNITY' | 'SOURCE_CUSTOM'>) | undefined, reachabilities?: (Array<'REACHABILITY_UNSPECIFIED' | 'REACHABILITY_CONDITIONALLY_REACHABLE' | 'REACHABILITY_ALWAYS_REACHABLE' | 'REACHABILITY_REACHABLE' | 'REACHABILITY_UNREACHABLE' | 'REACHABILITY_UNKNOWN'>) | undefined, issueParentIds?: Array | undefined, validationStates?: (Array<'VALIDATION_STATE_UNSPECIFIED' | 'VALIDATION_STATE_CONFIRMED_VALID' | 'VALIDATION_STATE_CONFIRMED_INVALID' | 'VALIDATION_STATE_VALIDATION_ERROR' | 'VALIDATION_STATE_NO_VALIDATOR'>) | undefined, secretTypes?: Array | undefined, repoVisibilities?: (Array<'REPOSITORY_VISIBILITY_UNSPECIFIED' | 'REPOSITORY_VISIBILITY_PUBLIC' | 'REPOSITORY_VISIBILITY_PRIVATE' | 'REPOSITORY_VISIBILITY_UNKNOWN'>) | undefined, excludeHistorical?: boolean | undefined, onPrimaryBranch?: boolean | undefined, epssProbabilities?: (Array<'EPSS_PROBABILITY_UNSPECIFIED' | 'EPSS_PROBABILITY_LOW' | 'EPSS_PROBABILITY_MEDIUM' | 'EPSS_PROBABILITY_HIGH' | 'EPSS_PROBABILITY_NONE'>) | undefined, triageReasons?: (Array<'FINDING_TRIAGE_REASON_UNSPECIFIED' | 'FINDING_TRIAGE_REASON_FALSE_POSITIVE' | 'FINDING_TRIAGE_REASON_NO_TIME' | 'FINDING_TRIAGE_REASON_ACCEPTABLE_RISK' | 'FINDING_TRIAGE_REASON_NO_TRIAGE_REASON' | 'FINDING_TRIAGE_REASON_UNKNOWN' | 'FINDING_TRIAGE_REASON_DUPLICATE'>) | undefined, timeFilter?: ('TIME_FILTER_RELEVANT_SINCE' | 'TIME_FILTER_TRIAGED_AT' | 'TIME_FILTER_FIXED_AT') | undefined, includeTicketed?: boolean | undefined, backlogType?: ('ISSUE_BACKLOG_TYPE_PROD' | 'ISSUE_BACKLOG_TYPE_PREPROD') | undefined, scaRuleKind?: (Array<'SCA_RULE_KIND_UNSPECIFIED' | 'SCA_RULE_KIND_REACHABLE' | 'SCA_RULE_KIND_UPGRADE_ONLY' | 'SCA_RULE_KIND_MALICIOUS_DEPENDENCY' | 'SCA_RULE_KIND_LEGACY'>) | undefined, aiMemoryWillFlipVerdict?: string | undefined, aiMemoryReferenced?: string | undefined, includeAiMemoryRendered?: boolean | undefined, aiMemoryRendered?: string | undefined, memoryIdInScope?: string | undefined, relativeSince?: ('RELATIVE_SINCE_ONE_DAY' | 'RELATIVE_SINCE_ONE_WEEK' | 'RELATIVE_SINCE_ONE_MONTH' | 'RELATIVE_SINCE_THREE_MONTHS' | 'RELATIVE_SINCE_SIX_MONTHS' | 'RELATIVE_SINCE_ONE_YEAR' | 'RELATIVE_SINCE_ALL_TIME' | 'RELATIVE_SINCE_ONE_MINUTE') | undefined, repositoryDeploymentStatuses?: (Array<'DEPLOYMENT_STATUS_UNSPECIFIED' | 'DEPLOYMENT_STATUS_UNKNOWN' | 'DEPLOYMENT_STATUS_DEPLOYED' | 'DEPLOYMENT_STATUS_NOT_DEPLOYED'>) | undefined, upgradeGuidance?: (Array<'BREAKING_CHANGE_TYPE_UNSPECIFIED' | 'BREAKING_CHANGE_TYPE_PARAMETER_CHANGE' | 'BREAKING_CHANGE_TYPE_FUNCTION_OR_CLASS_REMOVAL' | 'BREAKING_CHANGE_TYPE_FUNCTION_RENAME' | 'BREAKING_CHANGE_TYPE_LOGIC_CHANGE' | 'BREAKING_CHANGE_TYPE_NOT_BREAKING'>) | undefined, repositoryPublicExposures?: (Array<'PUBLIC_EXPOSURE_UNSPECIFIED' | 'PUBLIC_EXPOSURE_UNKNOWN' | 'PUBLIC_EXPOSURE_PUBLIC' | 'PUBLIC_EXPOSURE_NOT_PUBLIC'>) | undefined, clickToFixPrStates?: (Array<'CLICK_TO_FIX_PR_STATE_UNSPECIFIED' | 'CLICK_TO_FIX_PR_STATE_OPEN' | 'CLICK_TO_FIX_PR_STATE_MERGED' | 'CLICK_TO_FIX_PR_STATE_NO_PR'>) | undefined, advisoryIds?: Array | undefined, aggregateIssueStates?: (Array<'AGGREGATE_ISSUE_STATE_UNSPECIFIED' | 'AGGREGATE_ISSUE_STATE_OPEN' | 'AGGREGATE_ISSUE_STATE_FIXED' | 'AGGREGATE_ISSUE_STATE_REMOVED' | 'AGGREGATE_ISSUE_STATE_IGNORED_APP' | 'AGGREGATE_ISSUE_STATE_IGNORED_CODE' | 'AGGREGATE_ISSUE_STATE_UNKNOWN' | 'AGGREGATE_ISSUE_STATE_REVIEWING' | 'AGGREGATE_ISSUE_STATE_FIXING' | 'AGGREGATE_ISSUE_STATE_PROVISIONALLY_IGNORED_APP'>) | undefined, upgradeGuidanceFilters?: (Array<'UPGRADE_GUIDANCE_SELECTION_UNSPECIFIED' | 'UPGRADE_GUIDANCE_SELECTION_SAFE' | 'UPGRADE_GUIDANCE_SELECTION_BREAKING'>) | undefined, filterIssueTypes?: (Array<'ISSUE_TYPE_UNSPECIFIED' | 'ISSUE_TYPE_SAST' | 'ISSUE_TYPE_SCA' | 'ISSUE_TYPE_SECRETS' | 'ISSUE_TYPE_RESEARCH' | 'ISSUE_TYPE_AI_SAST'>) | undefined, filePaths?: Array | undefined, includeArchived?: boolean | undefined}; export type ProtosTicketingV2NangoCreateTicketsRequest = {groupIssues?: boolean | undefined, projectId?: string | undefined, issueIds?: Array | undefined, issueType?: ('ISSUE_TYPE_SAST' | 'ISSUE_TYPE_SCA' | 'ISSUE_TYPE_SECRETS' | 'ISSUE_TYPE_RESEARCH' | 'ISSUE_TYPE_AI_SAST') | undefined, issueFilters?: ProtosIssuesV1IssuesFilter | undefined}; export type CreateApiApiNotificationsDeploymentsDeploymentIdTicketingV2TicketingInstanceIdCreateTicketsArgs = {deploymentId: number, ticketingInstanceId: number, body: ProtosTicketingV2NangoCreateTicketsRequest}; export type CreateApiApiNotificationsDeploymentsDeploymentIdTicketingV2TicketingInstanceIdCreateTicketsOptions = {baseUrl: string, SemgrepWebToken?: string | undefined, fetch?: typeof fetch | undefined}; export const protosTicketingV2NangoCreateTicketsResponseTicketSucceededResult = z.object({issueIds: z.array(z.number().int()).optional(), ticketId: z.number().int().optional(), ticketUrl: z.string().optional(), externalSlug: z.string().optional()}); export const protosTicketingV2NangoCreateTicketsResponseTicketFailedResult = z.object({issueIds: z.array(z.number().int()).optional(), error: z.string().optional()}); export const protosTicketingV2NangoCreateTicketsResponseTicketSkippedResult = z.object({issueIds: z.array(z.number().int()).optional(), reason: z.string().optional()}); export const protosTicketingV2NangoCreateTicketsResponse = z.object({succeeded: z.array(protosTicketingV2NangoCreateTicketsResponseTicketSucceededResult).optional(), failed: z.array(protosTicketingV2NangoCreateTicketsResponseTicketFailedResult).optional(), skipped: z.array(protosTicketingV2NangoCreateTicketsResponseTicketSkippedResult).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 External Tickets * * POST /api/notifications/deployments/{deploymentId}/ticketing/v2/{ticketingInstanceId}/create_tickets * * Also accepts auth: SemgrepJWT */ export const createApiApiNotificationsDeploymentsDeploymentIdTicketingV2TicketingInstanceIdCreateTickets = async (args: CreateApiApiNotificationsDeploymentsDeploymentIdTicketingV2TicketingInstanceIdCreateTicketsArgs, options: CreateApiApiNotificationsDeploymentsDeploymentIdTicketingV2TicketingInstanceIdCreateTicketsOptions) => { const {baseUrl, fetch: fetchFn = fetch, SemgrepWebToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (SemgrepWebToken !== undefined) headers.set('authorization', `Bearer ${SemgrepWebToken}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/notifications/deployments/${encodeURIComponent(String(args.deploymentId))}/ticketing/v2/${encodeURIComponent(String(args.ticketingInstanceId))}/create_tickets${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(protosTicketingV2NangoCreateTicketsResponse, await res.json()) };