import {z} from 'zod' export type GetApiEntitiesByFolderFolderIdArgs = {folderId: number, depth: number, with_rule?: boolean | undefined}; export type GetApiEntitiesByFolderFolderIdOptions = {baseUrl?: string | undefined, TdApikeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const folderPermissions = z.object({view: z.boolean().optional(), edit: z.boolean().optional()}); export const relationshipsFolderNullableJsonApiResource = z.object({data: z.object({id: z.string(), type: z.literal("folder-segment")}).nullable().optional()}); export const relationshipsUserJsonApiResource = z.object({data: z.object({id: z.string(), type: z.literal("user")}).nullable().optional()}); export const folderJsonApiResource = z.object({id: z.string(), type: z.literal("folder-segment"), attributes: z.object({audienceId: z.string(), name: z.string(), description: z.string().nullable(), createdAt: z.string(), updatedAt: z.string(), enrichments: z.object({}).nullable().optional(), rule: z.object({}).nullable().optional(), permissions: folderPermissions}), relationships: z.object({children: z.object({data: z.array(z.object({data: z.object({id: z.string(), type: z.enum(["folder-segment", "segment-batch", "segment-realtime", "composable-segment", "funnel", "predictive-segment", "token", "journey"])}).optional()})).optional()}).optional(), parentFolder: relationshipsFolderNullableJsonApiResource.optional(), createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()})}); export const partialV5RuleYamlV5IonRuleLocalDuration = z.object({day: z.number().optional(), hour: z.number().optional(), minute: z.number().optional(), month: z.number().optional(), quarter: z.number().optional(), second: z.number().optional(), week: z.number().optional(), year: z.number().optional()}); export const partialV5RuleYamlV5IonRuleUnit = z.enum(["year", "quarter", "month", "week", "day", "hour", "minute", "second"]); export const partialV5RuleYamlV5IonRuleDuration = z.union([z.object({year: z.number()}), z.object({quarter: z.number()}), z.object({month: z.number()}), z.object({week: z.number()}), z.object({day: z.number()}), z.object({hour: z.number()}), z.object({minute: z.number()}), z.object({second: z.number()})]); export const partialV5RuleYamlV5IonRuleValueOperator = z.union([z.object({not: z.boolean(), rightValue: z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit}), type: z.literal("GreaterEqual")}), z.union([z.object({duration: partialV5RuleYamlV5IonRuleDuration, from: z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit}), not: z.boolean(), reverse: z.boolean(), type: z.literal("TimeRange")}), z.object({from: z.object({unit: partialV5RuleYamlV5IonRuleUnit}), not: z.literal(false), type: z.literal("TimeRange")}), z.object({type: z.literal("TimeToday")}), z.object({from: z.object({unit: partialV5RuleYamlV5IonRuleUnit}), type: z.literal("TimeThis")}), z.object({from: z.object({unit: partialV5RuleYamlV5IonRuleUnit}), type: z.literal("TimeNext")}), z.object({type: z.literal("TimeWithinNext"), unit: partialV5RuleYamlV5IonRuleUnit, value: z.string()}), z.object({type: z.literal("TimeWithinPast"), unit: partialV5RuleYamlV5IonRuleUnit, value: z.string()}), z.object({from: z.object({next: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit}), not: z.literal(false), to: z.object({next: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit}), type: z.literal("TimeInBetweenNext")})]), z.object({not: z.boolean(), rightValue: z.object({timestamp: z.string()}), type: z.literal("Equal")}), z.object({not: z.literal(false), rightValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), type: z.literal("Greater")}), z.object({not: z.literal(false), rightValue: z.object({timestamp: z.string()}), type: z.literal("GreaterEqual")}), z.object({not: z.literal(false), rightValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), type: z.literal("Less")}), z.object({not: z.literal(false), rightValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), type: z.literal("LessEqual")}), z.object({maxValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), minValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), not: z.boolean(), type: z.literal("Between")}), z.object({not: z.boolean(), rightValue: z.union([z.number(), z.string(), z.boolean()]), type: z.literal("Equal")}), z.object({not: z.boolean(), rightValue: z.union([z.number(), z.string(), z.boolean()]), type: z.literal("IsNull")}), z.object({not: z.boolean(), rightValues: z.array(z.union([z.number(), z.string()])), type: z.literal("In")}), z.object({not: z.boolean(), rightValue: z.union([z.number(), z.string(), z.boolean()]), type: z.literal("Greater")}), z.object({not: z.boolean(), rightValue: z.union([z.number(), z.string(), z.boolean()]), type: z.literal("Less")}), z.object({not: z.boolean(), rightValue: z.union([z.number(), z.string(), z.boolean()]), type: z.literal("GreaterEqual")}), z.object({not: z.boolean(), rightValue: z.union([z.number(), z.string(), z.boolean()]), type: z.literal("LessEqual")}), z.object({maxValue: z.union([z.number(), z.string()]), minValue: z.union([z.number(), z.string()]), not: z.boolean(), rightValue: z.number(), type: z.literal("Between")}), z.object({not: z.boolean(), rightValues: z.array(z.string()), type: z.literal("Contain")}), z.object({not: z.boolean(), rightValues: z.array(z.string()), type: z.literal("StartWith")}), z.object({not: z.boolean(), rightValues: z.array(z.string()), type: z.literal("EndWith")}), z.object({not: z.boolean(), rightValue: z.string(), type: z.literal("Regexp")})]); export const partialV5RuleYamlV5IonRuleReferenceCondition = z.union([z.object({exclude: z.boolean(), id: z.string(), type: z.enum(["FunnelStageReference", "Reference", "AbTestVariantReference"])}), z.object({id: z.string(), includeConvertedCustomers: z.boolean(), maxGrade: z.number(), minGrade: z.number(), type: z.literal("PredictiveScoreReference")}), z.object({id: z.string(), leftValue: z.object({attribute: z.enum(["r_quartile", "f_quartile", "m_quartile", "rfm_segment", "rfm_score", "rfm_cluster_rank", "rfm_quartile"])}), operator: partialV5RuleYamlV5IonRuleValueOperator, solutionType: z.literal("rfm"), type: z.literal("MlAttributeReference")}), z.object({id: z.string(), leftValue: z.object({attribute: z.enum(["cltv_1m", "cltv_1m_pctile", "cltv_3m", "cltv_3m_pctile", "cltv_6m", "cltv_6m_pctile", "cltv_12m", "cltv_12m_pctile", "cltv_24m", "cltv_24m_pctile", "alive_prob", "cltv_segment"])}), operator: partialV5RuleYamlV5IonRuleValueOperator, solutionType: z.literal("cltv"), type: z.literal("MlAttributeReference")})]); export const partialV5RuleYamlV5IonRuleValueArrayMatching = z.union([z.unknown(), z.enum(["all", "any"]), z.object({atLeast: z.number()}), z.object({atMost: z.number()}), z.object({exactly: z.number()})]); export const partialV5RuleYamlV5IonRuleAttributeNameValue = z.object({name: z.string()}); export const partialV5RuleYamlV5IonRuleCustomerGroupAttributeValue = z.object({customerGroup: z.string(), name: z.string()}); export const partialV5RuleYamlV5IonRuleTimeframeOperator = z.union([z.object({not: z.boolean(), rightValue: z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit}), type: z.literal("GreaterEqual")}), z.union([z.object({duration: partialV5RuleYamlV5IonRuleDuration, from: z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit}), not: z.boolean(), reverse: z.boolean(), type: z.literal("TimeRange")}), z.object({from: z.object({unit: partialV5RuleYamlV5IonRuleUnit}), not: z.literal(false), type: z.literal("TimeRange")}), z.object({type: z.literal("TimeToday")}), z.object({from: z.object({unit: partialV5RuleYamlV5IonRuleUnit}), type: z.literal("TimeThis")}), z.object({from: z.object({unit: partialV5RuleYamlV5IonRuleUnit}), type: z.literal("TimeNext")}), z.object({type: z.literal("TimeWithinNext"), unit: partialV5RuleYamlV5IonRuleUnit, value: z.string()}), z.object({type: z.literal("TimeWithinPast"), unit: partialV5RuleYamlV5IonRuleUnit, value: z.string()}), z.object({from: z.object({next: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit}), not: z.literal(false), to: z.object({next: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit}), type: z.literal("TimeInBetweenNext")})]), z.object({not: z.boolean(), rightValue: z.object({timestamp: z.string()}), type: z.literal("Equal")}), z.object({not: z.literal(false), rightValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), type: z.literal("Greater")}), z.object({not: z.literal(false), rightValue: z.object({timestamp: z.string()}), type: z.literal("GreaterEqual")}), z.object({not: z.literal(false), rightValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), type: z.literal("Less")}), z.object({not: z.literal(false), rightValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), type: z.literal("LessEqual")}), z.object({maxValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), minValue: z.union([z.object({timestamp: z.string()}), z.object({last: z.union([z.number(), partialV5RuleYamlV5IonRuleLocalDuration]), unit: partialV5RuleYamlV5IonRuleUnit})]), not: z.boolean(), type: z.literal("Between")})]); export const partialV5RuleYamlV5IonRuleColumnFilter = z.union([z.object({arrayMatching: partialV5RuleYamlV5IonRuleValueArrayMatching, column: z.string(), operator: partialV5RuleYamlV5IonRuleValueOperator, type: z.literal("Column")}), z.object({arrayMatching: partialV5RuleYamlV5IonRuleValueArrayMatching, column: z.literal("timestamp"), operator: partialV5RuleYamlV5IonRuleTimeframeOperator, type: z.literal("Column")})]); export const partialV5RuleYamlV5IonRuleOrFilter: z.ZodType = z.object({conditions: z.array(z.union([z.lazy(() => partialV5RuleYamlV5IonRuleAndFilter), z.lazy(() => partialV5RuleYamlV5IonRuleOrFilter), partialV5RuleYamlV5IonRuleColumnFilter])), type: z.literal("Or")}); export const partialV5RuleYamlV5IonRuleAndFilter: z.ZodType = z.object({conditions: z.array(z.union([z.lazy(() => partialV5RuleYamlV5IonRuleAndFilter), partialV5RuleYamlV5IonRuleOrFilter, partialV5RuleYamlV5IonRuleColumnFilter])), type: z.literal("And")}); export const partialV5RuleYamlV5IonRuleFilter = z.union([z.object({}).nullable(), partialV5RuleYamlV5IonRuleAndFilter, partialV5RuleYamlV5IonRuleOrFilter]); export const partialV5RuleYamlV5IonRuleAggregationValue = z.object({aggregation: z.union([z.object({column: z.string(), groupingColumns: z.array(z.string()).optional(), type: z.enum(["Sum", "Min", "Max", "Average"])}), z.object({groupingColumns: z.array(z.string()), type: z.literal("Count")}), z.object({columns: z.array(z.string()), type: z.literal("CountDistinct")}), z.object({column: z.string(), groupingColumns: z.array(z.string()).optional(), orderColumn: z.string(), type: z.enum(["First", "Last"])})]), filter: partialV5RuleYamlV5IonRuleFilter, source: z.object({name: z.string()}), window: z.object({duration: z.object({day: z.number().optional(), hour: z.number().optional(), minute: z.number().optional(), second: z.number().optional()}), type: z.literal("TimeSliding")}).optional()}); export const partialV5RuleYamlV5IonRuleValueLeftValue = z.union([partialV5RuleYamlV5IonRuleAttributeNameValue, partialV5RuleYamlV5IonRuleCustomerGroupAttributeValue, partialV5RuleYamlV5IonRuleAggregationValue]); export const partialV5RuleYamlV5IonRuleValueLimit = z.object({number: z.number(), orderColumns: z.array(z.union([z.object({column: z.string(), order: z.enum(["ascending", "descending"]), type: z.literal("Column")}), z.object({order: z.enum(["ascending", "descending"]), type: z.literal("Aggregation")})])).optional(), type: z.enum(["Count", "Percent"])}); export const partialV5RuleYamlV5IonRuleValueCondition = z.object({arrayMatching: partialV5RuleYamlV5IonRuleValueArrayMatching, exclude: z.boolean(), leftValue: partialV5RuleYamlV5IonRuleValueLeftValue, limit: partialV5RuleYamlV5IonRuleValueLimit.optional(), operator: partialV5RuleYamlV5IonRuleValueOperator, type: z.literal("Value")}); export const partialV5RuleYamlV5IonRuleValueConditionSet = z.object({conditions: z.array(z.union([partialV5RuleYamlV5IonRuleReferenceCondition, partialV5RuleYamlV5IonRuleValueCondition])), description: z.string().optional(), expr: z.string().optional(), type: z.enum(["Or", "And", "Composite"])}); export const partialV5RuleYamlV5IonRuleIonRule = z.object({conditions: z.array(partialV5RuleYamlV5IonRuleValueConditionSet), expr: z.string().optional(), limit: partialV5RuleYamlV5IonRuleValueLimit.optional(), type: z.enum(["Or", "And", "Composite"])}); export const partialV5RuleYamlV5IonRule = z.union([partialV5RuleYamlV5IonRuleIonRule, z.object({}).nullable()]); export const relationshipsFolderJsonApiResource = z.object({data: z.object({id: z.string(), type: z.literal("folder-segment")}).optional()}); export const batchSegmentJsonApiResource = z.object({id: z.string(), type: z.literal("segment-batch"), attributes: z.object({audienceId: z.string(), name: z.string(), description: z.string().nullable(), population: z.number().nullable(), numSyndications: z.number().int().optional(), rule: partialV5RuleYamlV5IonRule, createdAt: z.string(), updatedAt: z.string(), countPopulation: z.boolean().optional(), segmentInsightDashboardId: z.number().int().nullable().optional(), isEmptyRule: z.boolean().optional()}), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource.optional(), createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()})}); export const realtimeSegmentJsonApiResource = z.object({id: z.string(), type: z.literal("segment-realtime"), attributes: z.object({audienceId: z.string(), name: z.string(), description: z.string().nullable(), population: z.number().nullable(), numSyndications: z.number().int().nullable().optional(), rule: partialV5RuleYamlV5IonRule, createdAt: z.string(), updatedAt: z.string(), countPopulation: z.boolean().optional()}), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource.optional(), createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()})}); export const composableSegmentJsonApiResource = z.object({id: z.string(), type: z.literal("composable-segment"), attributes: z.object({composableAudienceId: z.string(), name: z.string(), description: z.string().nullable(), rule: partialV5RuleYamlV5IonRule, isEmptyRule: z.boolean(), population: z.number().nullable(), numSyndications: z.number().int(), createdAt: z.string(), updatedAt: z.string()}), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource.optional(), createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()})}); export const funnelStageJsonApiResource = z.object({id: z.string().optional(), segmentId: z.string().optional(), name: z.string(), numSyndications: z.number().int().optional()}); export const funnelJsonApiResource = z.object({id: z.string(), type: z.literal("funnel"), attributes: z.object({audienceId: z.string(), name: z.string(), description: z.string().nullable(), population: z.number().nullable(), numSyndications: z.number().int(), createdAt: z.string(), updatedAt: z.string(), countPopulation: z.boolean().optional(), stages: z.array(funnelStageJsonApiResource).optional()}), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource.optional(), createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()})}); export const predictiveSegmentAccuracy = z.number().gte(0).lte(100).nullable(); export const predictiveSegmentAreaUnderRocCurve = z.number().gte(0).lte(1).nullable(); export const predictiveSegmentGradeThresholds = z.array(z.number().gte(0).lte(100)); export const predictiveSegmentJsonApiResourceAttr = z.object({audienceId: z.string().optional(), baseSegmentId: z.string().nullable().optional(), segmentId: z.string().optional(), scoredSegmentId: z.string().nullable().optional(), name: z.string().optional(), description: z.string().nullable().optional(), categoricalAsColumnNames: z.array(z.string()).optional(), categoricalArrayAsColumnNames: z.array(z.string()).optional(), quantitativeAsColumnNames: z.array(z.string()).optional(), accuracy: predictiveSegmentAccuracy.optional(), areaUnderRocCurve: predictiveSegmentAreaUnderRocCurve.optional(), gradeThresholds: predictiveSegmentGradeThresholds.optional(), createdAt: z.string().optional(), updatedAt: z.string().optional(), modelUpdatedAt: z.string().optional()}); export const predictiveSegmentJsonApiResource = z.object({id: z.string(), type: z.literal("predictive-segment"), attributes: predictiveSegmentJsonApiResourceAttr, relationships: z.object({createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()})}); export const relationshipsBatchSegmentJsonApiResource = z.object({data: z.object({id: z.string(), type: z.literal("segment-batch")}).optional()}); export const relationshipsRealtimeSegmentJsonApiResource = z.object({data: z.object({id: z.string(), type: z.literal("segment-realtime")}).optional()}); export const relationshipsSegmentJsonApiResource = z.object({data: z.array(z.union([relationshipsBatchSegmentJsonApiResource, relationshipsRealtimeSegmentJsonApiResource])).optional()}); export const tokenJsonApiResource = z.object({id: z.string(), type: z.literal("token"), attributes: z.object({audienceId: z.string().optional(), name: z.string(), token: z.string().optional(), description: z.string().optional(), keyColumn: z.string().optional(), attributeColumns: z.array(z.string()), createdAt: z.string().optional(), updatedAt: z.string().optional()}), relationships: z.object({segments: relationshipsSegmentJsonApiResource.optional(), parentFolder: relationshipsFolderJsonApiResource.optional(), createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()})}); export const journeyJumpTarget = z.object({journeyId: z.string(), journeyStageId: z.string(), journeyBundleId: z.string().nullable().optional(), stageOrderIndex: z.number().int().nullable().optional(), jumpReferenceId: z.string().nullable().optional()}); export const journeyCriteria = z.object({name: z.string(), description: z.string().optional(), segmentId: z.string(), target: journeyJumpTarget.optional()}).nullable(); export const journeyWaitStepConditionPath = z.object({id: z.string(), name: z.string().optional(), segmentId: z.string().nullable().optional(), timedOutPath: z.boolean().optional(), moveAfter: z.number().int().gte(1).optional(), unit: z.enum(["day", "week"]).optional(), next: z.string().optional()}); export const journeyWaitStep = z.union([z.object({type: z.literal("WaitStep"), name: z.string(), waitStepType: z.literal("Duration"), waitStep: z.number().int(), waitStepUnit: z.enum(["day", "week"]), next: z.string().optional()}), z.object({type: z.literal("WaitStep"), name: z.string(), waitStepType: z.literal("Date"), waitUntilDate: z.string(), timezone: z.string(), next: z.string().optional()}), z.object({type: z.literal("WaitStep"), name: z.string(), waitStepType: z.literal("DaysOfTheWeek"), waitUntilDaysOfTheWeek: z.array(z.number().int().gte(1).lte(7)), timezone: z.string(), next: z.string().optional()}), z.object({type: z.literal("WaitStep"), waitStepType: z.literal("Condition"), conditions: z.array(journeyWaitStepConditionPath), description: z.string().nullable().optional()})]); export const journeyActivationStep = z.object({type: z.literal("Activation"), name: z.string(), journeyActivationStepId: z.string(), next: z.string().optional()}); export const journeyDecisionPointBranch = z.object({name: z.string(), segmentId: z.string(), excludedPath: z.boolean().optional(), next: z.string().optional()}); export const journeyDecisionPointStep = z.object({type: z.literal("DecisionPoint"), name: z.string(), branches: z.array(journeyDecisionPointBranch)}); export const journeyMergeStep = z.object({type: z.literal("Merge"), name: z.string().optional(), next: z.string().optional()}); export const journeyJumpStep = z.object({type: z.literal("Jump"), name: z.string(), target: journeyJumpTarget}); export const journeyEndStep = z.object({type: z.literal("End").optional(), name: z.string().optional()}).nullable(); export const journeyAbTestVariant = z.object({id: z.string(), name: z.string(), percentage: z.number(), next: z.string().optional(), isControlGroup: z.boolean().optional(), cappingAt: z.number().int().gte(1).lte(1000000).optional()}); export const journeyAbTestStep = z.object({type: z.literal("AbTest"), name: z.string(), customizedSplit: z.boolean(), uniqueId: z.string().optional(), randomizationMode: z.enum(["sticky", "reentry", "periodic"]).nullable().optional(), periodicCadence: z.enum(["weekly", "monthly", "yearly"]).optional(), periodicBoundaryMonth: z.number().int().gte(1).lte(12).optional(), periodicBoundaryDay: z.number().int().gte(1).lte(31).optional(), periodicBoundaryDayOfWeek: z.number().int().gte(1).lte(7).optional(), enabledCapping: z.boolean().optional(), winnerVariantId: z.string().nullable().optional(), variants: z.array(journeyAbTestVariant)}); export const journeyStep = z.object({uuid: z.union([journeyWaitStep, journeyActivationStep, journeyDecisionPointStep, journeyMergeStep, journeyJumpStep, journeyEndStep, journeyAbTestStep]).optional()}).nullable(); export const journeyStageJsonApiResource = z.object({id: z.string().optional(), name: z.string(), description: z.string().optional(), steps: journeyStep.optional(), rootStep: z.string().optional(), entryCriteria: journeyCriteria.optional(), milestone: journeyCriteria.optional(), exitCriterias: z.array(journeyCriteria).optional()}); export const execution = z.object({workflowId: z.string(), workflowSessionId: z.string(), createdAt: z.string(), finishedAt: z.string().nullable(), status: z.enum(["success", "canceled", "error", "canceling", "blocked", "queued", "running"]), workflowAttemptId: z.string()}); export const journeyJsonApiResource = z.object({id: z.string(), type: z.literal("journey"), attributes: z.object({audienceId: z.string(), name: z.string(), description: z.string().nullable(), state: z.enum(["draft", "simulation", "launched"]), goal: journeyCriteria, createdAt: z.string(), updatedAt: z.string(), launchedAt: z.string().nullable(), journeyStages: z.array(journeyStageJsonApiResource), paused: z.boolean(), pausedAt: z.string().nullable(), allowReentry: z.boolean(), reentryMode: z.enum(["no_reentry", "reentry_unless_goal_achieved", "reentry_always"]).optional(), journeyBundleId: z.string().nullable().optional(), journeyBundleName: z.string().nullable().optional(), versionNumber: z.number().int().optional(), journeyBundleDescription: z.string().nullable().optional(), latestExecution: execution.nullable().optional()}), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource.optional(), createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()})}); export const functionExpression = z.union([z.object({function: z.enum(["+", "-", "*", "/"]), arg: z.number().optional()}), z.object({function: z.literal("replace"), search: z.string().optional(), replacement: z.string().nullable().optional()}), z.object({function: z.literal("substr"), start: z.number().optional(), length: z.number().optional()}), z.object({function: z.literal("regexp_extract"), pattern: z.string().optional(), group: z.number().optional()}), z.object({function: z.enum(["day_of_week", "from_iso8601_timestamp", "ln", "elapsed_days", "td_ip_to_least_specific_subdivision_name", "td_ip_to_country_name", "td_ip_to_city_name", "td_ip_to_connection_type", "td_ip_to_domain"])}), z.object({function: z.literal("cast_as_quantitative"), default: z.number()}), z.object({function: z.literal("cast_as_categorical"), default: z.string()}), z.object({function: z.literal("cast_as_categorical_array")}), z.object({function: z.literal("if"), op: z.enum([">", "<", "<=", ">=", "=", "!=", "is", "is\", "not"]).optional(), right_value: z.number().nullable().optional(), then: z.number().optional(), else: z.number().optional()})]); export const columnExpression = z.object({column: z.string(), customerGroup: z.string().nullable().optional(), functions: z.array(functionExpression).nullable().optional()}); export const stringExpression = z.object({string: z.string(), parameters: z.array(z.union([z.object({type: z.literal("String").optional(), string: z.string().optional()}), z.object({type: z.literal("Timestamp").optional(), format: z.string().optional()}), z.object({type: z.enum(["SegmentName", "SegmentId", "AudienceId", "FunnelName", "StageName"]).optional()})])).optional()}); export const columns = z.array(z.object({id: z.string().optional(), column: z.string(), source: z.union([columnExpression, stringExpression])})); export const nullValue = z.object({thisKeyNeverHit: z.string().optional()}).nullable(); export const deprecatedScheduleType = z.enum(["cron", "daily", "hourly", "minutes_interval", "monthly", "none", "weekly"]); export const startAt = z.string().nullable(); export const repeatUnit = z.enum(["none", "minute", "hour", "day", "week", "month", "once"]); export const repeatFrequency = z.number().int(); export const repeatSubFrequency = z.array(z.number().int()); export const activationTemplateSyndicationBehaviorProperties = z.object({columns: columns.optional(), behaviorTableName: z.string().optional(), joinRow: z.number().int().nullable().optional(), joinStrategy: z.enum(["All", "First", "Last", "Top-N"]).optional(), formatting: z.enum(["rows", "cols"]).optional(), orderBy: z.array(z.object({key: z.string().optional(), order: z.enum(["ascending", "descending"]).optional()})).optional()}); export const activationTemplateFieldPropertiesLocked = z.object({allColumns: z.boolean().optional(), columns: z.object({}).optional(), connectionId: z.boolean().optional(), connectorConfig: z.object({}).nullable().optional(), activationActionsEnabled: z.boolean().optional(), syndicationBehavior: z.object({tableName: z.string().optional(), columns: z.object({}).optional(), lockAddColumn: z.boolean().optional(), lockDeleteBehaviorTable: z.boolean().optional(), lockEditBehaviorTable: z.boolean().optional(), lockEditJoinRow: z.boolean().optional(), lockEditJoinStrategy: z.boolean().optional(), lockEditFormatting: z.boolean().optional(), lockEditOrderBy: z.boolean().optional()}).nullable().optional(), lockAddColumn: z.boolean().optional(), lockAddString: z.boolean().optional(), lockAddBehavior: z.boolean().optional(), lockEditSchedule: z.boolean().optional(), lockEditNotification: z.boolean().optional(), lockEditWorkflowExecution: z.boolean().optional(), lockEditSequentialActivation: z.boolean().optional()}); export const activationTemplateFieldProperties = z.object({locked: activationTemplateFieldPropertiesLocked}); export const activationTemplateJsonApiResource = z.object({id: z.string().optional(), type: z.literal("activation-template").optional(), attributes: z.object({audienceId: z.string(), name: z.string(), description: z.string().nullable(), kind: z.number().int().optional(), allColumns: z.boolean().optional(), columns: z.union([columns, nullValue]).optional(), scheduleType: deprecatedScheduleType.optional(), scheduleOption: z.string().nullable().optional(), timezone: z.string().nullable().optional(), startAt: startAt.optional(), endOn: z.string().nullable().optional(), repeatUnit: repeatUnit.optional(), repeatFrequency: repeatFrequency.optional(), repeatSubFrequency: repeatSubFrequency.optional(), connectionId: z.string().nullable().optional(), connectorConfig: z.object({}).nullable().optional(), notifyOn: z.array(z.enum(["onSuccess", "onFailure"])).optional(), emailRecipients: z.array(z.number().int()).optional(), createdAt: z.string(), updatedAt: z.string(), state: z.enum(["draft", "published"]).optional(), nestedWorkflowProjectName: z.string().nullable().optional(), nestedWorkflowName: z.string().nullable().optional(), activationActionsEnabled: z.boolean().optional(), lockEnabled: z.boolean().optional(), runAfterJourneyRefresh: z.boolean().nullable().optional(), syndicationBehavior: activationTemplateSyndicationBehaviorProperties.nullable().optional(), fieldProperties: activationTemplateFieldProperties.optional(), activationCount: z.number().int().optional(), journeyCount: z.number().int().optional(), available: z.boolean().optional()}).optional(), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource.optional(), createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()}).optional()}); export const partialRealtimeJourneyYamlRealtimeJourneyState = z.enum(["draft", "launched"]); export const partialRealtimeJourneyYamlRealtimeJourneyByFolderResource = z.object({id: z.string().optional(), type: z.literal("realtime-journey").optional(), attributes: z.object({name: z.string(), description: z.string(), state: partialRealtimeJourneyYamlRealtimeJourneyState, paused: z.boolean(), realtimeJourneyStages: z.array(z.object({id: z.string().optional(), name: z.string()}))}).optional(), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource}).optional()}); export const partialRealtimeJourneyYamlRealtimePersonalizationByFolderResource = z.object({id: z.string().optional(), type: z.literal("realtime-personalization").optional(), attributes: z.object({name: z.string(), description: z.string(), sections: z.array(z.object({id: z.string().optional(), name: z.string()}))}).optional(), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource}).optional()}); export const partialRealtimeJourneyYamlRealtimeProfileRulesetByFolderResource = z.object({id: z.string().optional(), type: z.literal("realtime-profile-ruleset").optional(), attributes: z.object({name: z.string(), description: z.string().nullable()}).optional(), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource}).optional()}); export const mlSolutionJsonApiResource = z.object({id: z.string(), type: z.literal("mlSolution"), attributes: z.union([z.object({name: z.string(), audienceId: z.string(), description: z.string().nullable(), targetColumn: z.string(), state: z.enum(["draft", "published"]), solutionType: z.literal("rfm"), behaviorName: z.string(), timestampColumn: z.string().optional(), minClusters: z.number().int().gte(1).nullable().optional(), maxClusters: z.number().int().gte(1).nullable().optional(), numClusters: z.number().int().gte(1).nullable().optional(), createdAt: z.string(), updatedAt: z.string(), lastPublishedAt: z.string().nullable()}), z.object({name: z.string(), audienceId: z.string(), description: z.string().nullable(), targetColumn: z.string(), state: z.enum(["draft", "published"]), solutionType: z.literal("cltv"), behaviorName: z.string(), timestampColumn: z.string().optional(), discountRate: z.number().nullable().optional(), segmentTimeHorizon: z.string().nullable().optional(), createdAt: z.string(), updatedAt: z.string(), lastPublishedAt: z.string().nullable()})]), relationships: z.object({parentFolder: relationshipsFolderJsonApiResource.optional(), outputFolder: relationshipsFolderJsonApiResource.optional(), createdBy: relationshipsUserJsonApiResource.optional(), updatedBy: relationshipsUserJsonApiResource.optional()})}); export const userJsonApiResource = z.object({id: z.string(), type: z.literal("user"), attributes: z.object({tdUserId: z.string(), name: z.string()})}); export const entitiesGetByFolderJsonApiResponse = z.object({data: z.array(z.union([folderJsonApiResource, batchSegmentJsonApiResource, realtimeSegmentJsonApiResource, composableSegmentJsonApiResource, funnelJsonApiResource, predictiveSegmentJsonApiResource, tokenJsonApiResource, journeyJsonApiResource, activationTemplateJsonApiResource, partialRealtimeJourneyYamlRealtimeJourneyByFolderResource, partialRealtimeJourneyYamlRealtimePersonalizationByFolderResource, partialRealtimeJourneyYamlRealtimeProfileRulesetByFolderResource, mlSolutionJsonApiResource])), included: z.array(userJsonApiResource)}); 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 }; /** * Retrieve list of objects under specified folder * * GET /entities/by-folder/{folderId} */ export const getApiEntitiesByFolderFolderId = async (args: GetApiEntitiesByFolderFolderIdArgs, options?: GetApiEntitiesByFolderFolderIdOptions) => { const {baseUrl = "https://api-cdp.treasuredata.com", fetch: fetchFn = fetch, TdApikeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.depth != null) query.append("depth", String(args.depth)) if (args.with_rule != null) query.append("with_rule", String(args.with_rule)) if (TdApikeyAuth !== undefined) headers.set("Authorization", TdApikeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/entities/by-folder/${encodeURIComponent(String(args.folderId))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(entitiesGetByFolderJsonApiResponse, await res.json()) };