import z from 'zod';
import { StixTypesWithAttackIds } from './attack-id.js';
import 'zod/v4';
import './stix-type.js';

/**
 * Schema for validating a single external reference object.
 *
 * External references link STIX objects to external information sources such as
 * reports, websites, or databases. For ATT&CK objects, the first external reference
 * typically contains the ATT&CK ID.
 *
 * @example
 * ```typescript
 * externalReferenceSchema.parse({
 *   source_name: 'mitre-attack',
 *   external_id: 'T1059',
 *   url: 'https://attack.mitre.org/techniques/T1059'
 * }); // Valid
 *
 * externalReferenceSchema.parse({
 *   source_name: 'ACME Research',
 *   description: 'Analysis of APT activity',
 *   url: 'https://example.com/report'
 * }); // Valid - external_id is optional
 * ```
 */
declare const externalReferenceSchema: z.ZodObject<{
    source_name: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    url: z.ZodOptional<z.ZodURL>;
    external_id: z.ZodOptional<z.ZodString>;
}, z.z.core.$strip>;
/**
 * Type representing a single external reference.
 */
type ExternalReference = z.infer<typeof externalReferenceSchema>;
/**
 * Schema for validating a list of external references.
 *
 * An array of external reference objects that link to non-STIX information sources.
 * When present, at least one external reference must be provided.
 *
 * @example
 * ```typescript
 * externalReferencesSchema.parse([
 *   { source_name: 'mitre-attack', external_id: 'T1059' },
 *   { source_name: 'Research Paper', url: 'https://example.com/paper.pdf' }
 * ]); // Valid
 *
 * externalReferencesSchema.parse([]); // Invalid - at least one required
 * ```
 */
declare const externalReferencesSchema: z.ZodArray<z.ZodObject<{
    source_name: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    url: z.ZodOptional<z.ZodURL>;
    external_id: z.ZodOptional<z.ZodString>;
}, z.z.core.$strip>>;
/**
 * Type representing a list of external references.
 */
type ExternalReferences = z.infer<typeof externalReferencesSchema>;
/**
 * Creates a specialized schema for validating ATT&CK external references.
 *
 * This factory function generates schemas that validate external reference arrays for
 * ATT&CK objects. The schema ensures that:
 * 1. At least one external reference is present
 * 2. The first external reference contains an `external_id` field
 * 3. The `external_id` matches the appropriate ATT&CK ID format for the STIX type
 *
 * @param stixType - The STIX type to create the schema for
 * @returns A Zod schema configured to validate ATT&CK external references for the given type
 *
 * @example
 * ```typescript
 * const techniqueRefsSchema = createAttackExternalReferencesSchema('attack-pattern');
 * techniqueRefsSchema.parse([
 *   { source_name: 'mitre-attack', external_id: 'T1059' }
 * ]); // Valid
 *
 * const tacticRefsSchema = createAttackExternalReferencesSchema('x-mitre-tactic');
 * tacticRefsSchema.parse([
 *   { source_name: 'mitre-attack', external_id: 'TA0001' }
 * ]); // Valid
 * ```
 */
declare const createAttackExternalReferencesSchema: (stixType: StixTypesWithAttackIds) => z.ZodArray<z.ZodObject<{
    source_name: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    url: z.ZodOptional<z.ZodURL>;
    external_id: z.ZodOptional<z.ZodString>;
}, z.z.core.$strip>>;

export { type ExternalReference, type ExternalReferences, createAttackExternalReferencesSchema, externalReferenceSchema, externalReferencesSchema };
