@timeback/sdk 0.2.5-beta.20260424210132 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{z as Y}from"zod/v4";import{z as D}from"zod/v4";import{z as A}from"zod/v4";import{z as X}from"zod/v4";import{z as U}from"zod/v4";import{z as $}from"zod/v4";import{z as J}from"zod/v4";import{z as M}from"zod/v4";import{z as E}from"zod/v4";import{z as H}from"zod/v4";import{z}from"zod/v4";import{z as h}from"zod/v4";var Lq=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/,B=Y.string().min(1).regex(Lq,"must be a valid ISO 8601 datetime"),R=Y.string().min(1).regex(/^\d{4}-\d{2}-\d{2}$/,"must be a valid ISO 8601 date (YYYY-MM-DD)"),q=Y.string().trim().min(1),L=Y.enum(["Reading","Language","Vocabulary","Social Studies","Writing","Science","FastMath","Math","None","Other"]).meta({id:"TimebackSubject",description:"Subject area"}),Pq=Y.union([Y.literal(-1),Y.literal(0),Y.literal(1),Y.literal(2),Y.literal(3),Y.literal(4),Y.literal(5),Y.literal(6),Y.literal(7),Y.literal(8),Y.literal(9),Y.literal(10),Y.literal(11),Y.literal(12),Y.literal(13)]),Tq=Y.string().transform((V,F)=>{let Z=V.toLowerCase().trim().replaceAll("_"," ");if(Z==="")return F.addIssue({code:"custom",message:"must be a valid Timeback grade"}),Y.NEVER;let N=Z.replace(/\bgrade\b/g,"").replace(/(\d+)(st|nd|rd|th)\b/g,"$1").trim();if(N==="")return F.addIssue({code:"custom",message:"must be a valid Timeback grade"}),Y.NEVER;if(N==="pre-k"||N==="pk")return-1;if(N==="k")return 0;if(N==="middle school")return 7;let I=N.replace(/\s+/g,"").replace(/^0+/,"")||"0",k=Number(I);if(!Number.isInteger(k))return F.addIssue({code:"custom",message:"must be a valid Timeback grade"}),Y.NEVER;return k}),j=Y.union([Y.number(),Tq]).pipe(Pq).meta({id:"TimebackGrade",description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}),Sq=Y.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),Qq=Y.enum(["department","school","district","local","state","national"]),u=Y.enum(["administrator","aide","guardian","parent","proctor","relative","student","teacher"]),Rq=Y.enum(["administrator","proctor","student","teacher"]),hq=Y.enum(["qti","text","audio","video","interactive","visual","course-material","assessment-bank"]),Iq=Y.enum(["qti-test","qti-question","qti-stimulus","qti-test-bank"]),kq=Y.enum(["unit","course","resource-collection"]),yq=Y.enum(["choice","order","associate","match","hotspot","hottext","select-point","graphic-order","graphic-associate","graphic-gap-match","text-entry","extended-text","inline-choice","upload","slider","drawing","media","custom"]),bq=Y.enum(["easy","medium","hard"]),s=Y.array(Y.object({source:Y.string(),learningObjectiveIds:Y.array(Y.string())})),r=Y.object({consecutive_failures:Y.number().int().min(1).optional(),stagnation_limit:Y.number().int().min(1).optional()}).optional(),fq=Y.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]).nullable(),az=Y.object({imsx_codeMajor:Y.enum(["failure","success"]),imsx_severity:Y.enum(["error","warning","status"]),imsx_description:Y.string(),imsx_CodeMinor:Y.object({imsx_codeMinorField:Y.array(Y.object({imsx_codeMinorFieldName:Y.string(),imsx_codeMinorFieldValue:Y.string()}))}).optional()}),gq=D.union([D.url(),D.string().regex(/^urn:/,"Must be a URL or URN")]),S=D.object({id:D.url(),type:D.literal("TimebackUser"),email:D.string()}),f=D.object({id:D.url(),type:D.literal("TimebackActivityContext"),subject:L,app:D.object({name:D.string()}),activity:D.object({id:D.url().optional(),name:D.string()}).strict().optional(),course:D.object({id:D.url().optional(),name:D.string().optional()}).strict(),process:D.boolean().optional()}),c=D.object({"@context":D.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),id:D.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:D.string(),eventTime:B,profile:D.literal("TimebackProfile"),actor:S,action:D.string(),object:f,edApp:D.object({id:D.string(),name:D.string().optional()}).optional()}),t=D.object({type:D.enum(["totalQuestions","correctQuestions","xpEarned","masteredUnits"]),value:D.number()}),mq=D.object({id:D.url(),type:D.literal("TimebackActivityMetricsCollection"),attempt:D.number().optional(),items:D.array(t),extensions:D.record(D.string(),D.unknown()).optional()}),xq=c.extend({type:D.literal("ActivityEvent"),action:D.literal("Completed"),generated:mq}),a=D.object({type:D.enum(["active","inactive","waste","unknown","anti-pattern"]),value:D.number(),subType:D.string().optional()}),pq=D.object({id:D.url(),type:D.literal("TimebackTimeSpentMetricsCollection"),items:D.array(a)}),vq=c.extend({type:D.literal("TimeSpentEvent"),action:D.literal("SpentTime"),generated:pq}),qD=D.object({actor:S,object:f,metrics:D.array(t).min(1,"metrics must contain at least one metric"),eventTime:B.optional(),metricsId:D.string().optional(),id:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional(),edApp:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),session:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),attempt:D.number().int().min(1).optional(),generatedExtensions:D.object({pctCompleteApp:D.number().optional()}).loose().optional()}).strict(),zD=D.object({actor:S,object:f,metrics:D.array(a).min(1,"metrics must contain at least one metric"),eventTime:B.optional(),metricsId:D.string().optional(),id:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional(),edApp:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),session:D.union([D.string(),D.record(D.string(),D.unknown())]).optional()}).strict(),lq=D.union([xq,vq]),DD=D.object({sensor:D.string(),sendTime:B,dataVersion:D.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:D.array(lq)}),oq=D.enum(["AnnotationProfile","AssessmentProfile","ToolUseProfile","GeneralProfile","FeedbackProfile","MediaProfile","SurveyProfile","ResourceManagementProfile","ForumProfile","AssignableProfile","GradingProfile","ReadingProfile","SessionProfile","SearchProfile","ToolLaunchProfile","TimebackProfile"]),W=D.union([D.string(),D.record(D.string(),D.unknown())]),y=D.object({id:gq,type:D.string(),name:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),e=D.object({"@context":D.string().optional(),id:D.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:D.string(),actor:D.union([D.string(),y,S]),action:D.string(),object:W,eventTime:B,profile:oq,edApp:W.optional(),generated:W.optional(),target:W.optional(),referrer:W.optional(),group:W.optional(),membership:W.optional(),session:W.optional(),federatedSession:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),ED=D.object({sensor:q,sendTime:B,dataVersion:D.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:D.array(e).min(1,"data must contain at least one event")}),HD=D.object({sensor:q,events:D.array(e).min(1,"events must contain at least one event")}),JD=D.object({limit:D.number().int().positive().optional(),offset:D.number().int().min(0).optional(),sensor:q.optional(),startDate:B.optional(),endDate:B.optional(),actorId:q.optional(),actorEmail:D.email().optional()}).strict(),qq=D.object({id:D.string(),name:D.string().optional(),isPartOf:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}),dq=D.object({id:D.string(),attempt:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),startedAtTime:B.optional(),endedAtTime:B.optional(),duration:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional()}),nq=D.object({id:D.string().optional(),scoreGiven:D.number(),maxScore:D.number().optional(),attempt:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),comment:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional()}),UD=D.object({actor:D.union([D.string(),y,S]),object:qq,edApp:W,id:D.string().optional(),eventTime:B.optional(),session:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),VD=D.object({actor:D.union([D.string(),y,S]),object:qq,edApp:W,generated:dq.optional(),id:D.string().optional(),eventTime:B.optional(),session:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),XD=D.object({actor:D.union([D.string(),y,S]),object:D.string(),generated:nq,edApp:W,id:D.string().optional(),eventTime:B.optional(),session:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),_D=A.object({name:q,targetUrl:A.url("targetUrl must be a valid URL"),secret:q,active:A.boolean(),sensor:A.string().nullable().optional(),description:A.string().nullable().optional()}).strict();var iq=A.enum(["string","number","boolean"]),uq=A.enum(["eq","neq","gt","gte","lt","lte","contains","notContains","in","notIn","startsWith","endsWith","regexp"]),$D=A.object({webhookId:q,filterKey:q,filterValue:q,filterType:iq,filterOperator:uq,active:A.boolean()}).strict();var b=X.string().uuid(),o=X.object({title:q,identifier:b,uri:q}),sq=X.object({identifier:b,uri:q,lastChangeDateTime:q,title:q,creator:q,officialSourceURL:X.string().optional(),publisher:X.string().optional(),description:X.string().optional(),language:X.string().optional(),version:X.string().optional(),caseVersion:X.string().optional(),adoptionStatus:X.string().optional(),statusStartDate:X.string().optional(),statusEndDate:X.string().optional(),licenseUri:X.string().optional(),notes:X.string().optional(),subject:X.array(X.string()).optional(),extensions:X.unknown().optional()}),rq=X.object({identifier:b,uri:q,lastChangeDateTime:q,fullStatement:q,alternativeLabel:X.string().optional(),CFItemType:X.string().optional(),cfItemType:X.string().optional(),humanCodingScheme:X.string().optional(),listEnumeration:X.string().optional(),abbreviatedStatement:X.string().optional(),conceptKeywords:X.array(X.string()).optional(),notes:X.string().optional(),subject:X.array(X.string()).optional(),language:X.string().optional(),educationLevel:X.array(X.string()).optional(),CFItemTypeURI:X.unknown().optional(),licenseURI:X.unknown().optional(),statusStartDate:X.string().optional(),statusEndDate:X.string().optional(),extensions:X.unknown().optional()}),cq=X.object({identifier:b,uri:q,lastChangeDateTime:q,associationType:q,originNodeURI:o,destinationNodeURI:o,sequenceNumber:X.number().optional(),extensions:X.unknown().optional()}),tq=X.object({CFItemTypes:X.array(X.unknown()).optional(),CFSubjects:X.array(X.unknown()).optional(),CFConcepts:X.array(X.unknown()).optional(),CFLicenses:X.array(X.unknown()).optional(),CFAssociationGroupings:X.array(X.unknown()).optional(),extensions:X.unknown().optional()}),ND=X.object({CFDocument:sq,CFItems:X.array(rq),CFAssociations:X.array(cq),CFDefinitions:tq.optional(),extensions:X.unknown().optional()}),d="https://www.w3.org/ns/credentials/v2",aq=U.array(U.url()).min(3,"@context must include W3C, CLR, and OB context URLs").refine((V)=>V[0]===d,`First @context entry must be "${d}"`),zq=U.object({id:U.url(),type:U.literal("Image"),caption:U.string().optional()}),g=U.object({id:U.url(),type:U.array(U.string()).min(1).refine((V)=>V.includes("Profile"),'type must include "Profile"'),name:U.string().optional(),url:U.string().url().optional(),phone:U.string().optional(),description:U.string().optional(),image:zq.optional(),email:U.string().email().optional()}),Dq=U.object({type:q,proofPurpose:q,verificationMethod:q,created:U.iso.datetime(),proofValue:q,cryptosuite:U.string().optional()}),eq=U.object({id:q,type:U.literal("1EdTechJsonSchemaValidator2019")}),qz=U.object({id:U.string().url().optional(),narrative:U.string().optional()}),zz=U.object({id:U.url(),type:U.array(U.string()).min(1).refine((V)=>V.includes("Achievement"),'type must include "Achievement"'),name:q,description:q,criteria:qz,image:zq.optional(),achievementType:U.string().optional(),creator:g.optional()}),Dz=U.object({type:U.literal("IdentityObject"),identityHash:q,identityType:q,hashed:U.boolean(),salt:U.string().optional()}),Ez=U.enum(["exactMatchOf","isChildOf","isParentOf","isPartOf","isPeerOf","isRelatedTo","precedes","replacedBy"]),Hz=U.object({type:U.literal("Association"),associationType:Ez,sourceId:U.url(),targetId:U.url()}),Jz=U.object({"@context":U.array(U.string()).min(1),id:U.url(),type:U.array(U.string()).min(1).refine((V)=>V.includes("VerifiableCredential"),'type must include "VerifiableCredential"'),issuer:g,validFrom:U.iso.datetime(),validUntil:U.string().datetime().optional(),credentialSubject:U.object({id:U.string().optional()}),proof:U.array(Dq).optional()}),Uz=U.object({id:U.string().url().optional(),type:U.array(U.string()).min(1).refine((V)=>V.includes("ClrSubject"),'type must include "ClrSubject"'),identifier:U.array(Dz).optional(),achievement:U.array(zz).optional(),verifiableCredential:U.array(Jz).min(1),association:U.array(Hz).optional()}),ZD=U.object({"@context":aq,id:U.url(),type:U.array(U.string()).min(1).refine((V)=>V.includes("VerifiableCredential")&&V.includes("ClrCredential"),'type must include "VerifiableCredential" and "ClrCredential"'),issuer:g,name:q,description:U.string().optional(),validFrom:U.iso.datetime(),validUntil:U.iso.datetime().optional(),credentialSubject:Uz,proof:U.array(Dq).optional(),credentialSchema:U.array(eq).optional()}),Vz=$.object({staging:$.string().meta({description:"Course ID in staging environment"}).optional(),production:$.string().meta({description:"Course ID in production environment"}).optional()}).meta({id:"CourseIds",description:"Environment-specific course IDs (populated by sync)"}),Xz=$.enum(["base","hole-filling","optional"]).meta({id:"CourseType",description:"Course classification type"}),Yz=$.enum(["draft","testing","published","deactivated"]).meta({id:"PublishStatus",description:"Course publication status"}),_z=$.object({dailyXp:$.number().int().positive().meta({description:"Target XP to earn per day"}).optional(),dailyLessons:$.number().int().positive().meta({description:"Target lessons to complete per day"}).optional(),dailyActiveMinutes:$.number().int().positive().meta({description:"Target active learning minutes per day"}).optional(),dailyAccuracy:$.number().int().min(0).max(100).meta({description:"Target accuracy percentage (0-100)"}).optional(),dailyMasteredUnits:$.number().int().positive().meta({description:"Target units to master per day"}).optional()}).meta({id:"CourseGoals",description:"Daily learning goals for a course"}),$z=$.object({totalXp:$.number().int().positive().meta({description:"Total XP available in the course"}).optional(),totalLessons:$.number().int().positive().meta({description:"Total number of lessons/activities"}).optional(),totalGrades:$.number().int().positive().meta({description:"Total grade levels covered"}).optional()}).meta({id:"CourseMetrics",description:"Aggregate metrics for a course"}),Eq=$.object({courseType:Xz.optional(),isSupplemental:$.boolean().meta({description:"Whether this is supplemental to a base course"}).optional(),isCustom:$.boolean().meta({description:"Whether this is a custom course for an individual student"}).optional(),publishStatus:Yz.optional(),contactEmail:$.email().meta({description:"Contact email for course issues"}).optional(),primaryApp:$.string().meta({description:"Primary application identifier"}).optional(),goals:_z.optional(),metrics:$z.optional()}).meta({id:"CourseMetadata",description:"Course metadata (matches API metadata object)"}),Hq=$.object({courseCode:$.string().meta({description:"Course code (e.g., 'MATH101')"}).optional(),level:$.string().meta({description:"Course level (e.g., 'AP', 'Honors')"}).optional(),metadata:Eq.optional()}).meta({id:"CourseDefaults",description:"Default properties that apply to all courses unless overridden"}),n=$.object({level:$.string().meta({description:"Course level for this environment"}).optional(),sensor:$.url().meta({description:"Caliper sensor endpoint URL for this environment"}).optional(),launchUrl:$.url().meta({description:"LTI launch URL for this environment"}).optional(),metadata:Eq.optional()}).meta({id:"CourseEnvOverrides",description:"Environment-specific course overrides (non-identity fields)"}),Fz=$.object({staging:n.meta({description:"Overrides for staging environment"}).optional(),production:n.meta({description:"Overrides for production environment"}).optional()}).meta({id:"CourseOverrides",description:"Per-environment course overrides"}),Nz=Hq.extend({subject:L.meta({description:"Subject area for this course"}),grade:j.meta({description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}).optional(),ids:Vz.nullable().optional(),sensor:$.url().meta({description:"Caliper sensor endpoint URL for this course"}).optional(),launchUrl:$.url().meta({description:"LTI launch URL for this course"}).optional(),overrides:Fz.optional()}).meta({id:"CourseConfig",description:"Configuration for a single course. Must have either grade or courseCode (or both)."}),KD=$.object({$schema:$.string().meta({description:"JSON Schema reference for editor support"}).optional(),name:$.string().min(1,"App name is required").meta({description:"Display name for your app"}),defaults:Hq.meta({description:"Default properties applied to all courses"}).optional(),courses:$.array(Nz).min(1,"At least one course is required").meta({description:"Courses available in this app"}),sensor:$.url().meta({description:"Default Caliper sensor endpoint URL for all courses"}).optional(),launchUrl:$.url().meta({description:"Default LTI launch URL for all courses"}).optional(),studio:$.object({telemetry:$.boolean().meta({description:"Enable anonymous usage telemetry for Studio (default: true)"}).optional().default(!0)}).meta({description:"Studio-specific configuration"}).optional()}).meta({id:"TimebackConfig",title:"Timeback Config",description:"Configuration schema for timeback.config.json files"}).refine((V)=>{return V.courses.every((F)=>F.grade!==void 0||F.courseCode!==void 0)},{message:"Each course must have either a grade or a courseCode",path:["courses"]}).refine((V)=>{let Z=V.courses.filter((N)=>N.grade!==void 0).map((N)=>`${N.subject}:${N.grade}`);return new Set(Z).size===Z.length},{message:"Duplicate (subject, grade) pair found; each must be unique",path:["courses"]}).refine((V)=>{let Z=V.courses.filter((N)=>N.courseCode!==void 0).map((N)=>N.courseCode);return new Set(Z).size===Z.length},{message:"Duplicate courseCode found; each must be unique",path:["courses"]}).refine((V)=>{return V.courses.every((F)=>{if(F.sensor!==void 0||V.sensor!==void 0)return!0;return[F.launchUrl,V.launchUrl,F.overrides?.staging?.launchUrl,F.overrides?.production?.launchUrl].filter(Boolean).length>0})},{message:"Each course must have an effective sensor. Either set `sensor` explicitly (top-level or per-course), or provide a `launchUrl` so sensor can be derived from its origin.",path:["courses"]}),C=J.union([B,R]),WD=J.object({id:J.string(),role:J.string(),beginDate:C.nullable(),endDate:C.nullable(),metadata:J.object({goals:J.object({dailyXp:J.number().optional()}).optional(),metrics:J.object({totalXp:J.number().optional(),totalLessons:J.number().optional()}).optional()}).optional(),course:J.object({id:J.string(),title:J.string(),subjects:J.array(J.string()).nullable(),grades:J.array(J.string()).nullable()}),school:J.object({id:J.string(),name:J.string()}),testOutSupported:J.boolean(),testOutEligible:J.boolean()}),Oz=J.object({activityMetrics:J.object({xpEarned:J.number(),totalQuestions:J.number(),correctQuestions:J.number(),masteredUnits:J.number()}),timeSpentMetrics:J.object({activeSeconds:J.number(),inactiveSeconds:J.number(),wasteSeconds:J.number()}),apps:J.array(J.string())}),Zz=J.record(J.string(),J.record(J.string(),Oz)),jD=J.object({message:J.string(),enrollmentId:J.string(),startDate:C,endDate:C,facts:Zz,factsByApp:J.unknown()}),Jq=J.object({email:J.email().optional(),studentId:q.optional()}).superRefine((V,F)=>{if(!V.email&&!V.studentId)F.addIssue({code:J.ZodIssueCode.custom,message:"must provide either email or studentId",path:["email"]}),F.addIssue({code:J.ZodIssueCode.custom,message:"must provide either email or studentId",path:["studentId"]})}),wD=J.object({subject:q,grade:q,courseId:q,orgSourcedId:q.optional()});var AD=J.object({userId:q}),CD=J.object({sourcedId:q.optional(),role:Rq.optional(),beginDate:B.optional(),metadata:J.record(J.string(),J.unknown()).optional()}),GD=J.object({fields:J.string().optional(),limit:J.number().int().positive().optional(),offset:J.number().int().nonnegative().optional(),sort:J.string().optional(),orderBy:J.enum(["asc","desc"]).optional(),filter:J.string().optional(),search:J.string().optional(),roles:J.array(u).min(1),orgSourcedIds:J.array(q).optional()}),LD=Jq.extend({startDate:C,endDate:C,timezone:J.string().optional()}),PD=Jq.extend({weekDate:C,timezone:J.string().optional()}),TD=J.object({enrollmentId:q,startDate:C.optional(),endDate:C.optional(),timezone:J.string().optional()}),QD=M.object({email:M.email()}),RD=M.object({name:q.optional(),timeback_id:q.optional(),grade:q.optional(),subject:q.optional(),all:M.boolean().optional()}),hD=M.object({student_email:M.email(),timeback_id:q.optional(),subject:q.optional(),grade_rank:M.number().int().min(0).max(12).optional(),assessment_line_item_sourced_id:q.optional(),assessment_result_sourced_id:q.optional()}).superRefine((V,F)=>{let Z=!!V.timeback_id,N=!!V.subject,T=V.grade_rank!==void 0;if(!Z&&!N)F.addIssue({code:M.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["timeback_id"]}),F.addIssue({code:M.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["subject"]});if(T&&!N)F.addIssue({code:M.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]});let I=!!V.assessment_line_item_sourced_id,k=!!V.assessment_result_sourced_id;if(I!==k)F.addIssue({code:M.ZodIssueCode.custom,message:"assessment_line_item_sourced_id and assessment_result_sourced_id must be provided together",path:I?["assessment_result_sourced_id"]:["assessment_line_item_sourced_id"]})}),ID=M.object({student_email:M.email(),assignment_id:M.number().int().positive().optional(),timeback_id:q.optional(),subject:q.optional(),grade_rank:M.number().int().min(0).max(12).optional()}).superRefine((V,F)=>{let Z=V.assignment_id!==void 0,N=!!V.timeback_id,T=!!V.subject&&V.grade_rank!==void 0;if(!Z&&!N&&!T)F.addIssue({code:M.ZodIssueCode.custom,message:"Either assignment_id, timeback_id, or (subject and grade_rank) is required",path:["assignment_id"]});if(V.grade_rank!==void 0&&!V.subject)F.addIssue({code:M.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]})}),K=E.enum(["active","tobedeleted"]),O=E.record(E.string(),E.unknown()).nullable().optional(),_=E.object({sourcedId:q,type:E.string().optional(),href:E.string().optional()}).strict(),Bz=E.enum(["academicSession","assessmentLineItem","category","class","course","demographics","enrollment","gradingPeriod","lineItem","org","resource","result","scoreScale","student","teacher","term","user","componentResource","courseComponent"]),Kz=E.object({sourcedId:q,type:Bz,href:E.url()}).strict(),G=E.union([R,B]).transform((V)=>V.includes("T")?V:`${V}T00:00:00Z`),Mz=E.object({learningObjectiveId:E.string(),score:E.number().optional(),textScore:E.string().optional()}),Uq=E.array(E.object({source:E.string(),learningObjectiveResults:E.array(Mz)})),Wz=E.object({roleType:E.enum(["primary","secondary"]),role:u,org:_,userProfile:E.string().optional(),metadata:O,beginDate:G.optional(),endDate:G.optional()}).strict(),yD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string"),status:K.optional(),enabledUser:E.union([E.boolean(),E.enum(["true","false"]).transform((V)=>V==="true")]),givenName:q.describe("givenName must be a non-empty string"),familyName:q.describe("familyName must be a non-empty string"),middleName:q.nullable().optional(),preferredFirstName:q.nullable().optional(),preferredMiddleName:q.nullable().optional(),preferredLastName:q.nullable().optional(),username:q.nullable().optional(),email:E.email(),userMasterIdentifier:E.string().nullable().optional(),roles:E.array(Wz).min(1,"roles must include at least one role"),userIds:E.array(E.object({type:q,identifier:q}).strict()).optional(),agents:E.array(_).optional(),primaryOrg:_.optional(),grades:E.array(j).optional(),sms:q.nullable().optional(),phone:q.nullable().optional(),pronouns:q.nullable().optional(),password:q.nullable().optional(),metadata:O}).strict(),bD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string").optional(),status:K,title:q.describe("title must be a non-empty string"),org:_,courseCode:q.nullable().optional(),subjects:E.array(L).nullable().optional(),subjectCodes:E.array(E.string()).nullable().optional(),grades:E.array(j).nullable().optional(),level:q.nullable().optional(),academicSession:_.nullable().optional(),schoolYear:Kz.nullable().optional(),gradingScheme:q.nullable().optional(),metadata:O}).strict(),fD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string").optional(),status:K.optional(),title:q.describe("title must be a non-empty string"),terms:E.array(_).min(1,"terms must have at least one item"),course:_,org:_,classCode:q.nullable().optional(),classType:E.enum(["homeroom","scheduled"]).optional(),location:q.nullable().optional(),grades:E.array(j).optional(),subjects:E.array(L).optional(),subjectCodes:E.array(q).optional(),periods:E.array(q).optional(),metadata:O}).strict(),w=E.enum(["true","false"]),gD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string").optional(),status:K.optional(),user:_,class:_,school:_.optional(),role:E.enum(["administrator","proctor","student","teacher"]),primary:w.optional(),beginDate:R.optional(),endDate:R.optional(),metadata:O}).strict(),mD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),status:K,weight:E.number().nullable().optional(),metadata:O}).strict(),xD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),class:_,school:_,category:_,assignDate:G,dueDate:G,status:K.optional(),description:E.string().nullable().optional(),resultValueMin:E.number().nullable().optional(),resultValueMax:E.number().nullable().optional(),gradingPeriod:_.nullable().optional(),academicSession:_.nullable().optional(),scoreScale:_.nullable().optional(),learningObjectiveSet:s.nullable().optional(),metadata:O}).strict(),pD=E.object({sourcedId:q.optional(),lineItem:_,student:_,class:_.nullable().optional(),scoreDate:G,scoreStatus:E.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),score:E.number().nullable().optional(),textScore:E.string().nullable().optional(),status:K,scoreScale:_.nullable().optional(),comment:E.string().nullable().optional(),learningObjectiveSet:Uq.nullable().optional(),inProgress:E.string().optional(),incomplete:E.string().optional(),late:E.string().optional(),missing:E.string().optional(),metadata:O}).strict(),vD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),status:K,type:q,class:_,course:_.nullable().optional(),scoreScaleValue:E.array(E.object({itemValueLHS:q,itemValueRHS:q,value:E.string().optional(),description:E.string().optional()}).strict()),metadata:O}).strict(),lD=E.object({sourcedId:q.optional(),status:K,dateLastModified:B.optional(),title:q.describe("title must be a non-empty string"),description:E.string().nullable().optional(),class:_.nullable().optional(),parentAssessmentLineItem:_.nullable().optional(),scoreScale:_.nullable().optional(),resultValueMin:E.number().nullable().optional(),resultValueMax:E.number().nullable().optional(),component:_.nullable().optional(),componentResource:_.nullable().optional(),learningObjectiveSet:E.array(E.object({source:E.string(),learningObjectiveIds:E.array(E.string())})).optional().nullable(),course:_.nullable().optional(),metadata:O}).strict(),oD=E.object({sourcedId:q.optional(),status:K,dateLastModified:B.optional(),metadata:O,assessmentLineItem:_,student:_,score:E.number().nullable().optional(),textScore:E.string().nullable().optional(),scoreDate:G,scoreScale:_.nullable().optional(),scorePercentile:E.number().nullable().optional(),scoreStatus:E.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),comment:E.string().nullable().optional(),learningObjectiveSet:Uq.nullable().optional(),inProgress:E.string().nullable().optional(),incomplete:E.string().nullable().optional(),late:E.string().nullable().optional(),missing:E.string().nullable().optional()}).strict(),dD=E.object({sourcedId:q.optional(),status:K.optional(),name:q.describe("name must be a non-empty string"),type:Qq,identifier:E.string().nullish(),parent:_.optional(),metadata:O}).strict(),nD=E.object({sourcedId:q.optional(),status:K.optional(),name:q.describe("name must be a non-empty string"),type:E.literal("school").default("school"),identifier:E.string().nullish(),parent:_.optional(),metadata:O}).strict(),iD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string"),status:K,title:q.describe("title must be a non-empty string"),startDate:G,endDate:G,type:E.enum(["gradingPeriod","semester","schoolYear","term"]),schoolYear:q.describe("schoolYear must be a non-empty string"),org:_,parent:_.optional(),children:E.array(_).optional(),metadata:O}).strict(),uD=E.object({sourcedId:q,title:q.describe("title must be a non-empty string"),courseComponent:_,resource:_,status:K,sortOrder:E.number().optional(),lessonType:fq.optional(),metadata:O}).strict(),sD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),course:_,status:K,sortOrder:E.number().optional(),parent:_.nullable().optional(),courseComponent:_.nullable().optional(),prerequisites:E.array(E.string()).nullable().optional(),prerequisiteCriteria:E.string().nullable().optional(),unlockDate:G.nullable().optional(),metadata:O}).strict().transform(({courseComponent:V,parent:F,...Z})=>({...Z,parent:F===void 0?V??void 0:F})),rD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string"),role:E.enum(["student","teacher"]),primary:w.optional(),beginDate:R.optional(),endDate:R.optional(),metadata:O}).strict(),cD=E.object({agentSourcedId:q.describe("agentSourcedId must be a non-empty string")}).strict(),tD=E.object({applicationName:q.describe("applicationName must be a non-empty string"),credentials:E.object({username:q.describe("username must be a non-empty string"),password:q.describe("password must be a non-empty string")})}).strict(),aD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string"),status:K.optional(),metadata:O,birthDate:E.string().regex(/^\d{4}-\d{2}-\d{2}$/).nullable().optional(),sex:E.enum(["male","female"]).nullable().optional(),americanIndianOrAlaskaNative:w.nullable().optional(),asian:w.nullable().optional(),blackOrAfricanAmerican:w.nullable().optional(),nativeHawaiianOrOtherPacificIslander:w.nullable().optional(),white:w.nullable().optional(),demographicRaceTwoOrMoreRaces:w.nullable().optional(),hispanicOrLatinoEthnicity:w.nullable().optional(),countryOfBirthCode:E.string().nullable().optional(),stateOfBirthAbbreviation:E.string().nullable().optional(),cityOfBirth:E.string().nullable().optional(),publicSchoolResidenceStatus:E.string().nullable().optional()}).strict(),P=E.object({type:hq,subject:L.nullish(),grades:E.array(j).nullish(),language:E.string().nullish(),xp:E.number().nullish(),url:E.url().nullish(),keywords:E.array(E.string()).nullish(),learningObjectiveSet:s.nullish(),lessonType:E.string().nullish()}).passthrough(),jz=P.extend({type:E.literal("qti"),subType:Iq,questionType:yq.optional(),difficulty:bq.optional()}),wz=P.extend({type:E.literal("text"),format:E.string(),author:E.string().optional(),pageCount:E.number().optional()}),Az=P.extend({type:E.literal("audio"),duration:E.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),format:E.string(),speaker:E.string().optional()}),Cz=P.extend({type:E.literal("video"),duration:E.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),captionsAvailable:E.boolean().optional(),format:E.string()}),Gz=P.extend({type:E.literal("interactive"),launchUrl:E.url().optional(),toolProvider:E.string().optional(),instructionalMethod:E.string().optional(),courseIdOnFail:E.string().nullable().optional(),fail_fast:r}),Lz=P.extend({type:E.literal("visual"),format:E.string(),resolution:E.string().optional()}),Pz=P.extend({type:E.literal("course-material"),subType:kq,author:E.string().optional(),format:E.string(),instructionalMethod:E.string().optional()}),Tz=P.extend({type:E.literal("assessment-bank"),resources:E.array(E.string())}),Sz=E.discriminatedUnion("type",[jz,wz,Az,Cz,Gz,Lz,Pz,Tz]),Qz=new Set(["type","subject","grades","language","xp","url","keywords","learningObjectiveSet","lessonType","subType","questionType","difficulty","format","author","pageCount","duration","speaker","captionsAvailable","launchUrl","toolProvider","instructionalMethod","courseIdOnFail","resolution","resources"]),Rz=E.record(E.string(),E.unknown()).superRefine((V,F)=>{if("fail_fast"in V){let N=r.safeParse(V.fail_fast);if(!N.success)for(let T of N.error.issues)F.addIssue({...T,path:["fail_fast",...T.path]})}let Z=Object.keys(V).filter((N)=>Qz.has(N));if(Z.length===0)return;F.addIssue({code:"custom",message:`metadata keys ${Z.map((N)=>`\`${N}\``).join(", ")} require a valid \`type\` discriminator`})}),eD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),vendorResourceId:q.describe("vendorResourceId must be a non-empty string"),roles:E.array(E.enum(["primary","secondary"])).optional(),importance:E.enum(["primary","secondary"]).optional(),vendorId:q.nullable().optional(),applicationId:q.nullable().optional(),status:K.optional(),metadata:E.union([Sz,Rz]).nullable().optional()}).strict(),hz=E.object({url:q.describe("courseStructure.url must be a non-empty string"),skillCode:q.describe("courseStructure.skillCode must be a non-empty string"),lessonCode:q.describe("courseStructure.lessonCode must be a non-empty string"),title:q.describe("courseStructure.title must be a non-empty string"),"unit-title":q.describe("courseStructure.unit-title must be a non-empty string"),status:q.describe("courseStructure.status must be a non-empty string"),xp:E.number()}).loose(),qE=E.object({course:E.object({sourcedId:q.describe("course.sourcedId must be a non-empty string").optional(),title:q.describe("course.title must be a non-empty string"),org:_,status:K,metadata:O}).strict(),courseStructure:E.record(E.string(),hz)}).strict(),Iz=E.object({student:_}).loose(),zE=E.array(Iz).min(1,"results must have at least one item"),kz=H.enum(["edulastic","mastery-track"]),yz=H.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]),Vq=H.array(j),Xq=H.record(H.string(),H.unknown()).optional(),Yq=H.object({courseId:q,lessonTitle:q.optional(),launchUrl:q.optional(),toolProvider:kz,unitTitle:q.optional(),courseComponentSourcedId:q.optional(),vendorId:q.optional(),description:q.optional(),resourceMetadata:Xq.nullable().optional(),grades:Vq}),EE=Yq.extend({lessonType:H.literal("test-out"),xp:H.number()}),HE=Yq.extend({lessonType:H.literal("placement"),courseIdOnFail:q.nullable().optional(),xp:H.number().optional()});var i=H.object({courseId:q,lessonType:yz,lessonTitle:q.optional(),unitTitle:q.optional(),courseComponentSourcedId:q.optional(),resourceMetadata:Xq.nullable().optional(),xp:H.number().optional(),grades:Vq.optional(),courseIdOnFail:q.nullable().optional()}),JE=H.discriminatedUnion("testType",[i.extend({testType:H.literal("qti"),qti:H.object({url:H.url(),title:q.optional(),metadata:H.record(H.string(),H.unknown()).optional()})}),i.extend({testType:H.literal("assessment-bank"),assessmentBank:H.object({resources:H.array(H.object({url:H.url(),title:q.optional(),metadata:H.record(H.string(),H.unknown()).optional()})).min(1)})})]),UE=H.object({student:q,lesson:q}),VE=H.object({student:q,lesson:q}),XE=H.object({courseId:q,userId:q,classId:q.optional()}),Q=H.object({type:H.enum(["component","resource"]),id:q}),bz=H.union([H.object({type:H.literal("set-skipped"),payload:H.object({target:Q,value:H.boolean()})}),H.object({type:H.literal("add-custom-resource"),payload:H.object({resource_id:q,parent_component_id:q,skipped:H.boolean().optional()})}),H.object({type:H.literal("move-item-before"),payload:H.object({target:Q,reference_id:q})}),H.object({type:H.literal("move-item-after"),payload:H.object({target:Q,reference_id:q})}),H.object({type:H.literal("move-item-to-start"),payload:H.object({target:Q})}),H.object({type:H.literal("move-item-to-end"),payload:H.object({target:Q})}),H.object({type:H.literal("change-item-parent"),payload:H.object({target:Q,new_parent_id:q,position:H.enum(["start","end"]).optional()})})]),YE=H.object({operation:bz,reason:q.optional()}),_E=H.object({studentId:q,componentResourceId:q,result:H.object({status:H.enum(["active","tobedeleted"]),metadata:H.record(H.string(),H.unknown()).optional(),score:H.number().optional(),textScore:q.optional(),scoreDate:H.string().datetime(),scorePercentile:H.number().optional(),scoreStatus:Sq,comment:q.optional(),learningObjectiveSet:H.array(H.object({source:q,learningObjectiveResults:H.array(H.object({learningObjectiveId:q,score:H.number().optional(),textScore:q.optional()}))})).optional(),inProgress:q.optional(),incomplete:q.optional(),late:q.optional(),missing:q.optional()})}),$E=H.object({student:q,lesson:q,applicationName:q.optional(),testId:q.optional(),skipCourseEnrollment:H.boolean().optional()}),FE=H.object({student:q,subject:L}),NE=H.object({student:q,lesson:q}),OE=H.object({userId:q}),ZE=H.object({userId:q,subject:H.enum(["Math","Reading","Language","Science"])}),BE=H.object({student:q,subject:L,grade:j,testName:q.optional()}),KE=H.object({testName:q}),fz=H.object({student:q,subject:L,grade:j,testName:q.optional()}),ME=H.object({items:H.array(fz)}),WE=H.object({spreadsheetUrl:H.url(),sheet:q}),jE=H.object({student:q,status:H.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:q.optional(),grade:j.optional(),limit:H.number().int().positive().max(3000).optional(),offset:H.number().int().nonnegative().optional()}),wE=H.object({student:q.optional(),status:H.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:q.optional(),grade:j.optional(),limit:H.number().int().positive().max(3000).optional(),offset:H.number().int().nonnegative().optional()}),AE=H.object({student:q,question:q,response:H.union([q,H.array(q)]).optional(),responses:H.record(H.string(),H.union([q,H.array(q)])).optional(),lesson:q,rendererOutcomes:H.object({score:H.number(),maxScore:H.number().min(0),isCorrect:H.boolean()}).optional(),playerState:H.string().optional()}).refine((V)=>V.response!==void 0||V.responses!==void 0,{message:"Either 'response' or 'responses' must be provided",path:["response","responses"]}).transform((V)=>{if(V.response!==void 0&&V.responses===void 0)return{...V,responses:{RESPONSE:V.response}};return V}),CE=H.object({student:q,lesson:q,attempt:H.number().int().positive().optional()}),GE=H.object({student:q,lesson:q}),LE=H.object({student:q,lesson:q}),PE=H.object({student:q,course:q}),TE=H.object({student:q,lesson:q,applicationName:q.optional()}),SE=H.object({student:q,subject:L}),QE=H.object({oneRosterSourcedId:q,subject:q}),RE=H.object({courseIds:H.array(q).min(1),rendererId:q,rendererUrl:H.url(),rendererVersion:q.optional(),suppressFeedback:H.boolean().optional(),suppressCorrectResponse:H.boolean().optional()}),hE=H.object({status:H.enum(["active","tobedeleted"]).optional()}),m=z.enum(["choice","text-entry","extended-text","inline-choice","match","order","associate","select-point","graphic-order","graphic-associate","graphic-gap-match","hotspot","hottext","slider","drawing","media","upload"]),x=z.enum(["single","multiple","ordered","record"]),p=z.enum(["identifier","boolean","integer","float","string","point","pair","directedPair","duration","file","uri"]),gz=z.enum(["easy","medium","hard"]),mz=z.enum(["linear","nonlinear"]),xz=z.enum(["individual","simultaneous"]),v=z.enum(["show","hide"]),_q=z.enum(["test","item","stimulus"]),kE=z.enum(["QUESTION","LESSON"]),pz=z.object({value:z.array(z.string())}).strict(),$q=z.object({identifier:q,cardinality:x,baseType:p.optional(),correctResponse:pz}).strict(),Fq=z.object({identifier:q,cardinality:x,baseType:p.optional()}).strict(),Nq=z.object({identifier:q,cardinality:x.optional(),baseType:p,normalMaximum:z.number().optional(),normalMinimum:z.number().optional(),defaultValue:z.object({value:z.unknown().optional()}).strict().optional()}).strict(),vz=z.object({outcomeIdentifier:q,variableIdentifier:q}).strict(),Oq=z.object({templateType:z.enum(["match_correct","map_response"]),responseDeclarationIdentifier:q,outcomeIdentifier:q,correctResponseIdentifier:q,incorrectResponseIdentifier:q,inlineFeedback:vz.optional()}).strict(),lz=z.object({source:q,learningObjectiveIds:z.array(z.string())}).strict(),l=z.object({subject:z.string().optional(),grade:j.optional(),difficulty:gz.optional(),learningObjectiveSet:z.array(lz).optional()}).loose(),Zq=z.object({outcomeIdentifier:q,identifier:q,showHide:v,content:z.string(),title:z.string()}).strict(),Bq=z.object({outcomeIdentifier:q,identifier:q,showHide:v,content:z.string(),class:z.array(z.string()).optional()}).strict(),Kq=z.object({outcomeIdentifier:q,identifier:q,showHide:v,content:z.string(),class:z.array(z.string()).optional()}).strict(),oz=z.object({identifier:q,content:z.string(),feedbackInline:z.string().nullable().optional(),feedbackOutcomeIdentifier:q.optional()}).loose(),dz=z.object({prompt:z.string().optional(),choices:z.array(oz).optional()}).loose(),nz=z.object({"expected-length":z.number().int().nonnegative().optional(),"pattern-mask":z.string().optional(),placeholder:z.string().optional()}).loose(),Mq=z.object({type:m,responseIdentifier:q,shuffle:z.boolean().optional(),maxChoices:z.number().int().nonnegative().optional(),attributes:nz.optional(),questionStructure:dz}).loose(),Wq=z.object({use:q,view:q,body:z.string()}).loose(),jq=z.object({identifier:q,href:q.optional(),title:z.string().optional()}).loose(),wq=z.object({href:q,type:q}).strict(),Aq=z.object({id:q,support:z.string(),content:z.string()}).strict(),yE=z.object({query:z.string().optional(),page:z.number().int().positive().optional(),limit:z.number().int().positive().optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).optional()}).strict(),iz=z.object({format:z.string().pipe(z.literal("xml")),xml:q,metadata:l.optional()}).strict(),uz=z.object({format:z.literal("json").optional(),identifier:q,title:q,type:m,qtiVersion:z.string().optional(),timeDependent:z.boolean().optional(),adaptive:z.boolean().optional(),preInteraction:z.string().optional(),interaction:Mq.optional(),postInteraction:z.string().optional(),responseDeclarations:z.array($q).optional(),outcomeDeclarations:z.array(Fq).optional(),responseProcessing:Oq.optional(),metadata:l.optional(),modalFeedback:z.array(Zq).optional(),feedbackInline:z.array(Bq).optional(),feedbackBlock:z.array(Kq).optional(),rubrics:z.array(Wq).optional(),stimulus:jq.optional()}).strict(),bE=z.union([iz,uz]),fE=z.object({format:z.literal("json").optional(),identifier:q.optional(),title:q,type:m,qtiVersion:z.string().optional(),timeDependent:z.boolean().optional(),adaptive:z.boolean().optional(),preInteraction:z.string().optional(),interaction:Mq.optional(),postInteraction:z.string().optional(),responseDeclarations:z.array($q).optional(),outcomeDeclarations:z.array(Fq).optional(),responseProcessing:Oq.optional(),metadata:l.optional(),modalFeedback:z.array(Zq).optional(),feedbackInline:z.array(Bq).optional(),feedbackBlock:z.array(Kq).optional(),rubrics:z.array(Wq).optional(),stimulus:jq.optional(),rawXml:z.string(),content:z.record(z.string(),z.unknown())}).strict(),gE=z.object({identifier:q,response:z.union([z.string(),z.array(z.string())])}).strict(),Cq=z.object({identifier:q,href:q,sequence:z.number().int().positive().optional()}).strict(),sz=z.object({identifier:q,title:q,visible:z.boolean(),required:z.boolean().optional(),fixed:z.boolean().optional(),sequence:z.number().int().positive(),"qti-assessment-item-ref":z.array(Cq).optional()}).strict(),Gq=z.object({identifier:q,navigationMode:z.string().pipe(mz),submissionMode:z.string().pipe(xz),"qti-assessment-section":z.array(sz)}).strict(),mE=z.object({items:z.array(Cq).min(1)}).strict(),xE=z.object({metadata:z.record(z.string(),z.unknown()).optional()}).strict(),pE=z.object({identifier:q,title:q,qtiVersion:z.string().optional(),toolName:z.string().optional(),toolVersion:z.string().optional(),timeLimit:z.number().optional(),maxAttempts:z.number().optional(),toolsEnabled:z.record(z.string(),z.boolean()).optional(),metadata:z.record(z.string(),z.unknown()).optional(),"qti-test-part":z.array(Gq),"qti-outcome-declaration":z.array(Nq).optional()}).strict(),vE=z.object({identifier:q.optional(),title:q,qtiVersion:z.string().optional(),toolName:z.string().optional(),toolVersion:z.string().optional(),timeLimit:z.number().optional(),maxAttempts:z.number().optional(),toolsEnabled:z.record(z.string(),z.boolean()).optional(),metadata:z.record(z.string(),z.unknown()).optional(),"qti-test-part":z.array(Gq),"qti-outcome-declaration":z.array(Nq).optional()}).strict(),lE=z.object({identifier:q,title:q,label:z.string().optional(),language:z.string().optional(),stylesheet:wq.optional(),content:z.string(),catalogInfo:z.array(Aq).optional(),toolName:z.string().optional(),toolVersion:z.string().optional(),metadata:z.record(z.string(),z.unknown()).optional()}).strict(),oE=z.object({identifier:q.optional(),title:q,label:z.string().optional(),language:z.string().optional(),stylesheet:wq.optional(),content:z.string(),catalogInfo:z.array(Aq).optional(),toolName:z.string().optional(),toolVersion:z.string().optional(),metadata:z.record(z.string(),z.unknown()).optional()}).strict(),dE=z.object({xml:z.string().optional(),schema:_q,entityId:z.string().optional()}).strict(),nE=z.object({xml:z.array(z.string()),schema:_q,entityIds:z.array(z.string())}).strict(),iE=z.object({questionId:z.string().optional(),userId:q,feedback:q,lessonId:q,humanApproved:z.boolean().optional()}).strict(),rz=h.enum(["creator_only","same_org","all_orgs"]),cz=h.string().uuid(),sE=h.email(),rE=h.object({sql:q}),cE=h.object({endpointName:q,sql:q,authMode:rz,description:q.optional()}),tE=h.object({endpointId:cz});
|
|
1
|
+
import{z as Y}from"zod/v4";import{z as D}from"zod/v4";import{z as A}from"zod/v4";import{z as X}from"zod/v4";import{z as U}from"zod/v4";import{z as $}from"zod/v4";import{z as J}from"zod/v4";import{z as M}from"zod/v4";import{z as E}from"zod/v4";import{z as H}from"zod/v4";import{z}from"zod/v4";import{z as h}from"zod/v4";var Lq=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/,B=Y.string().min(1).regex(Lq,"must be a valid ISO 8601 datetime"),R=Y.string().min(1).regex(/^\d{4}-\d{2}-\d{2}$/,"must be a valid ISO 8601 date (YYYY-MM-DD)"),q=Y.string().trim().min(1),L=Y.enum(["Reading","Language","Vocabulary","Social Studies","Writing","Science","FastMath","Math","None","Other"]).meta({id:"TimebackSubject",description:"Subject area"}),Pq=Y.union([Y.literal(-1),Y.literal(0),Y.literal(1),Y.literal(2),Y.literal(3),Y.literal(4),Y.literal(5),Y.literal(6),Y.literal(7),Y.literal(8),Y.literal(9),Y.literal(10),Y.literal(11),Y.literal(12),Y.literal(13)]),Tq=Y.string().transform((V,F)=>{let Z=V.toLowerCase().trim().replaceAll("_"," ");if(Z==="")return F.addIssue({code:"custom",message:"must be a valid Timeback grade"}),Y.NEVER;let N=Z.replace(/\bgrade\b/g,"").replace(/(\d+)(st|nd|rd|th)\b/g,"$1").trim();if(N==="")return F.addIssue({code:"custom",message:"must be a valid Timeback grade"}),Y.NEVER;if(N==="pre-k"||N==="pk")return-1;if(N==="k")return 0;if(N==="middle school")return 7;let I=N.replace(/\s+/g,"").replace(/^0+/,"")||"0",k=Number(I);if(!Number.isInteger(k))return F.addIssue({code:"custom",message:"must be a valid Timeback grade"}),Y.NEVER;return k}),j=Y.union([Y.number(),Tq]).pipe(Pq).meta({id:"TimebackGrade",description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}),Sq=Y.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),Qq=Y.enum(["department","school","district","local","state","national"]),u=Y.enum(["administrator","aide","guardian","parent","proctor","relative","student","teacher"]),Rq=Y.enum(["administrator","proctor","student","teacher"]),hq=Y.enum(["qti","text","audio","video","interactive","visual","course-material","assessment-bank"]),Iq=Y.enum(["qti-test","qti-question","qti-stimulus","qti-test-bank"]),kq=Y.enum(["unit","course","resource-collection"]),yq=Y.enum(["choice","order","associate","match","hotspot","hottext","select-point","graphic-order","graphic-associate","graphic-gap-match","text-entry","extended-text","inline-choice","upload","slider","drawing","media","custom"]),bq=Y.enum(["easy","medium","hard"]),s=Y.array(Y.object({source:Y.string(),learningObjectiveIds:Y.array(Y.string())})),r=Y.object({consecutive_failures:Y.number().int().min(1).optional(),stagnation_limit:Y.number().int().min(1).optional()}).optional(),fq=Y.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]).nullable(),az=Y.object({imsx_codeMajor:Y.enum(["failure","success"]),imsx_severity:Y.enum(["error","warning","status"]),imsx_description:Y.string(),imsx_CodeMinor:Y.object({imsx_codeMinorField:Y.array(Y.object({imsx_codeMinorFieldName:Y.string(),imsx_codeMinorFieldValue:Y.string()}))}).optional()}),gq=D.union([D.url(),D.string().regex(/^urn:/,"Must be a URL or URN")]),S=D.object({id:D.url(),type:D.literal("TimebackUser"),email:D.string()}),f=D.object({id:D.url(),type:D.literal("TimebackActivityContext"),subject:L,app:D.object({name:D.string()}),activity:D.object({id:D.url().optional(),name:D.string()}).strict().optional(),course:D.object({id:D.url().optional(),name:D.string().optional()}).strict(),process:D.boolean().optional()}),c=D.object({"@context":D.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),id:D.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:D.string(),eventTime:B,profile:D.literal("TimebackProfile"),actor:S,action:D.string(),object:f,edApp:D.object({id:D.string(),name:D.string().optional()}).optional()}),t=D.object({type:D.enum(["totalQuestions","correctQuestions","xpEarned","masteredUnits"]),value:D.number()}),mq=D.object({id:D.url(),type:D.literal("TimebackActivityMetricsCollection"),attempt:D.number().optional(),items:D.array(t),extensions:D.record(D.string(),D.unknown()).optional()}),xq=c.extend({type:D.literal("ActivityEvent"),action:D.literal("Completed"),generated:mq}),a=D.object({type:D.enum(["active","inactive","waste","unknown","anti-pattern"]),value:D.number(),subType:D.string().optional()}),pq=D.object({id:D.url(),type:D.literal("TimebackTimeSpentMetricsCollection"),items:D.array(a)}),vq=c.extend({type:D.literal("TimeSpentEvent"),action:D.literal("SpentTime"),generated:pq}),qD=D.object({actor:S,object:f,metrics:D.array(t).min(1,"metrics must contain at least one metric"),eventTime:B.optional(),metricsId:D.string().optional(),id:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional(),edApp:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),session:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),attempt:D.number().int().min(1).optional(),generatedExtensions:D.object({pctCompleteApp:D.number().optional()}).loose().optional()}).strict(),zD=D.object({actor:S,object:f,metrics:D.array(a).min(1,"metrics must contain at least one metric"),eventTime:B.optional(),metricsId:D.string().optional(),id:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional(),edApp:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),session:D.union([D.string(),D.record(D.string(),D.unknown())]).optional()}).strict(),lq=D.union([xq,vq]),DD=D.object({sensor:D.string(),sendTime:B,dataVersion:D.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:D.array(lq)}),oq=D.enum(["AnnotationProfile","AssessmentProfile","ToolUseProfile","GeneralProfile","FeedbackProfile","MediaProfile","SurveyProfile","ResourceManagementProfile","ForumProfile","AssignableProfile","GradingProfile","ReadingProfile","SessionProfile","SearchProfile","ToolLaunchProfile","TimebackProfile"]),W=D.union([D.string(),D.record(D.string(),D.unknown())]),y=D.object({id:gq,type:D.string(),name:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),e=D.object({"@context":D.string().optional(),id:D.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:D.string(),actor:D.union([D.string(),y,S]),action:D.string(),object:W,eventTime:B,profile:oq,edApp:W.optional(),generated:W.optional(),target:W.optional(),referrer:W.optional(),group:W.optional(),membership:W.optional(),session:W.optional(),federatedSession:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),ED=D.object({sensor:q,sendTime:B,dataVersion:D.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:D.array(e).min(1,"data must contain at least one event")}),HD=D.object({sensor:q,events:D.array(e).min(1,"events must contain at least one event")}),JD=D.object({limit:D.number().int().positive().optional(),offset:D.number().int().min(0).optional(),sensor:q.optional(),startDate:B.optional(),endDate:B.optional(),actorId:q.optional(),actorEmail:D.email().optional()}).strict(),qq=D.object({id:D.string(),name:D.string().optional(),isPartOf:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}),dq=D.object({id:D.string(),attempt:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),startedAtTime:B.optional(),endedAtTime:B.optional(),duration:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional()}),nq=D.object({id:D.string().optional(),scoreGiven:D.number(),maxScore:D.number().optional(),attempt:D.union([D.string(),D.record(D.string(),D.unknown())]).optional(),comment:D.string().optional(),extensions:D.record(D.string(),D.unknown()).optional()}),UD=D.object({actor:D.union([D.string(),y,S]),object:qq,edApp:W,id:D.string().optional(),eventTime:B.optional(),session:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),VD=D.object({actor:D.union([D.string(),y,S]),object:qq,edApp:W,generated:dq.optional(),id:D.string().optional(),eventTime:B.optional(),session:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),XD=D.object({actor:D.union([D.string(),y,S]),object:D.string(),generated:nq,edApp:W,id:D.string().optional(),eventTime:B.optional(),session:W.optional(),extensions:D.record(D.string(),D.unknown()).optional()}).strict(),_D=A.object({name:q,targetUrl:A.url("targetUrl must be a valid URL"),secret:q,active:A.boolean(),sensor:A.string().nullable().optional(),description:A.string().nullable().optional()}).strict();var iq=A.enum(["string","number","boolean"]),uq=A.enum(["eq","neq","gt","gte","lt","lte","contains","notContains","in","notIn","startsWith","endsWith","regexp"]),$D=A.object({webhookId:q,filterKey:q,filterValue:q,filterType:iq,filterOperator:uq,active:A.boolean()}).strict();var b=X.string().uuid(),o=X.object({title:q,identifier:b,uri:q}),sq=X.object({identifier:b,uri:q,lastChangeDateTime:q,title:q,creator:q,officialSourceURL:X.string().optional(),publisher:X.string().optional(),description:X.string().optional(),language:X.string().optional(),version:X.string().optional(),caseVersion:X.string().optional(),adoptionStatus:X.string().optional(),statusStartDate:X.string().optional(),statusEndDate:X.string().optional(),licenseUri:X.string().optional(),notes:X.string().optional(),subject:X.array(X.string()).optional(),extensions:X.unknown().optional()}),rq=X.object({identifier:b,uri:q,lastChangeDateTime:q,fullStatement:q,alternativeLabel:X.string().optional(),CFItemType:X.string().optional(),cfItemType:X.string().optional(),humanCodingScheme:X.string().optional(),listEnumeration:X.string().optional(),abbreviatedStatement:X.string().optional(),conceptKeywords:X.array(X.string()).optional(),notes:X.string().optional(),subject:X.array(X.string()).optional(),language:X.string().optional(),educationLevel:X.array(X.string()).optional(),CFItemTypeURI:X.unknown().optional(),licenseURI:X.unknown().optional(),statusStartDate:X.string().optional(),statusEndDate:X.string().optional(),extensions:X.unknown().optional()}),cq=X.object({identifier:b,uri:q,lastChangeDateTime:q,associationType:q,originNodeURI:o,destinationNodeURI:o,sequenceNumber:X.number().optional(),extensions:X.unknown().optional()}),tq=X.object({CFItemTypes:X.array(X.unknown()).optional(),CFSubjects:X.array(X.unknown()).optional(),CFConcepts:X.array(X.unknown()).optional(),CFLicenses:X.array(X.unknown()).optional(),CFAssociationGroupings:X.array(X.unknown()).optional(),extensions:X.unknown().optional()}),ND=X.object({CFDocument:sq,CFItems:X.array(rq),CFAssociations:X.array(cq),CFDefinitions:tq.optional(),extensions:X.unknown().optional()}),d="https://www.w3.org/ns/credentials/v2",aq=U.array(U.url()).min(3,"@context must include W3C, CLR, and OB context URLs").refine((V)=>V[0]===d,`First @context entry must be "${d}"`),zq=U.object({id:U.url(),type:U.literal("Image"),caption:U.string().optional()}),g=U.object({id:U.url(),type:U.array(U.string()).min(1).refine((V)=>V.includes("Profile"),'type must include "Profile"'),name:U.string().optional(),url:U.string().url().optional(),phone:U.string().optional(),description:U.string().optional(),image:zq.optional(),email:U.string().email().optional()}),Dq=U.object({type:q,proofPurpose:q,verificationMethod:q,created:U.iso.datetime(),proofValue:q,cryptosuite:U.string().optional()}),eq=U.object({id:q,type:U.literal("1EdTechJsonSchemaValidator2019")}),qz=U.object({id:U.string().url().optional(),narrative:U.string().optional()}),zz=U.object({id:U.url(),type:U.array(U.string()).min(1).refine((V)=>V.includes("Achievement"),'type must include "Achievement"'),name:q,description:q,criteria:qz,image:zq.optional(),achievementType:U.string().optional(),creator:g.optional()}),Dz=U.object({type:U.literal("IdentityObject"),identityHash:q,identityType:q,hashed:U.boolean(),salt:U.string().optional()}),Ez=U.enum(["exactMatchOf","isChildOf","isParentOf","isPartOf","isPeerOf","isRelatedTo","precedes","replacedBy"]),Hz=U.object({type:U.literal("Association"),associationType:Ez,sourceId:U.url(),targetId:U.url()}),Jz=U.object({"@context":U.array(U.string()).min(1),id:U.url(),type:U.array(U.string()).min(1).refine((V)=>V.includes("VerifiableCredential"),'type must include "VerifiableCredential"'),issuer:g,validFrom:U.iso.datetime(),validUntil:U.string().datetime().optional(),credentialSubject:U.object({id:U.string().optional()}),proof:U.array(Dq).optional()}),Uz=U.object({id:U.string().url().optional(),type:U.array(U.string()).min(1).refine((V)=>V.includes("ClrSubject"),'type must include "ClrSubject"'),identifier:U.array(Dz).optional(),achievement:U.array(zz).optional(),verifiableCredential:U.array(Jz).min(1),association:U.array(Hz).optional()}),ZD=U.object({"@context":aq,id:U.url(),type:U.array(U.string()).min(1).refine((V)=>V.includes("VerifiableCredential")&&V.includes("ClrCredential"),'type must include "VerifiableCredential" and "ClrCredential"'),issuer:g,name:q,description:U.string().optional(),validFrom:U.iso.datetime(),validUntil:U.iso.datetime().optional(),credentialSubject:Uz,proof:U.array(Dq).optional(),credentialSchema:U.array(eq).optional()}),Vz=$.object({staging:$.string().meta({description:"Course ID in staging environment"}).optional(),production:$.string().meta({description:"Course ID in production environment"}).optional()}).meta({id:"CourseIds",description:"Environment-specific course IDs (populated by sync)"}),Xz=$.enum(["base","hole-filling","optional"]).meta({id:"CourseType",description:"Course classification type"}),Yz=$.enum(["draft","testing","published","deactivated"]).meta({id:"PublishStatus",description:"Course publication status"}),_z=$.object({dailyXp:$.number().int().positive().meta({description:"Target XP to earn per day"}).optional(),dailyLessons:$.number().int().positive().meta({description:"Target lessons to complete per day"}).optional(),dailyActiveMinutes:$.number().int().positive().meta({description:"Target active learning minutes per day"}).optional(),dailyAccuracy:$.number().int().min(0).max(100).meta({description:"Target accuracy percentage (0-100)"}).optional(),dailyMasteredUnits:$.number().int().positive().meta({description:"Target units to master per day"}).optional()}).meta({id:"CourseGoals",description:"Daily learning goals for a course"}),$z=$.object({totalXp:$.number().int().positive().meta({description:"Total XP available in the course"}).optional(),totalLessons:$.number().int().positive().meta({description:"Total number of lessons/activities"}).optional(),totalGrades:$.number().int().positive().meta({description:"Total grade levels covered"}).optional()}).meta({id:"CourseMetrics",description:"Aggregate metrics for a course"}),Eq=$.object({courseType:Xz.optional(),isSupplemental:$.boolean().meta({description:"Whether this is supplemental to a base course"}).optional(),isCustom:$.boolean().meta({description:"Whether this is a custom course for an individual student"}).optional(),publishStatus:Yz.optional(),contactEmail:$.email().meta({description:"Contact email for course issues"}).optional(),primaryApp:$.string().meta({description:"Primary application identifier"}).optional(),goals:_z.optional(),metrics:$z.optional()}).meta({id:"CourseMetadata",description:"Course metadata (matches API metadata object)"}),Hq=$.object({courseCode:$.string().meta({description:"Course code (e.g., 'MATH101')"}).optional(),level:$.string().meta({description:"Course level (e.g., 'AP', 'Honors')"}).optional(),metadata:Eq.optional()}).meta({id:"CourseDefaults",description:"Default properties that apply to all courses unless overridden"}),n=$.object({level:$.string().meta({description:"Course level for this environment"}).optional(),sensor:$.url().meta({description:"Caliper sensor endpoint URL for this environment"}).optional(),launchUrl:$.url().meta({description:"LTI launch URL for this environment"}).optional(),metadata:Eq.optional()}).meta({id:"CourseEnvOverrides",description:"Environment-specific course overrides (non-identity fields)"}),Fz=$.object({staging:n.meta({description:"Overrides for staging environment"}).optional(),production:n.meta({description:"Overrides for production environment"}).optional()}).meta({id:"CourseOverrides",description:"Per-environment course overrides"}),Nz=Hq.extend({subject:L.meta({description:"Subject area for this course"}),grade:j.meta({description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}).optional(),ids:Vz.nullable().optional(),sensor:$.url().meta({description:"Caliper sensor endpoint URL for this course"}).optional(),launchUrl:$.url().meta({description:"LTI launch URL for this course"}).optional(),overrides:Fz.optional()}).meta({id:"CourseConfig",description:"Configuration for a single course. Must have either grade or courseCode (or both)."}),KD=$.object({$schema:$.string().meta({description:"JSON Schema reference for editor support"}).optional(),name:$.string().min(1,"App name is required").meta({description:"Display name for your app"}),defaults:Hq.meta({description:"Default properties applied to all courses"}).optional(),courses:$.array(Nz).min(1,"At least one course is required").meta({description:"Courses available in this app"}),sensor:$.url().meta({description:"Default Caliper sensor endpoint URL for all courses"}).optional(),launchUrl:$.url().meta({description:"Default LTI launch URL for all courses"}).optional(),studio:$.object({telemetry:$.boolean().meta({description:"Enable anonymous usage telemetry for Studio (default: true)"}).optional().default(!0)}).meta({description:"Studio-specific configuration"}).optional()}).meta({id:"TimebackConfig",title:"Timeback Config",description:"Configuration schema for timeback.config.json files"}).refine((V)=>{return V.courses.every((F)=>F.grade!==void 0||F.courseCode!==void 0)},{message:"Each course must have either a grade or a courseCode",path:["courses"]}).refine((V)=>{let Z=V.courses.filter((N)=>N.grade!==void 0).map((N)=>`${N.subject}:${N.grade}`);return new Set(Z).size===Z.length},{message:"Duplicate (subject, grade) pair found; each must be unique",path:["courses"]}).refine((V)=>{let Z=V.courses.filter((N)=>N.courseCode!==void 0).map((N)=>N.courseCode);return new Set(Z).size===Z.length},{message:"Duplicate courseCode found; each must be unique",path:["courses"]}).refine((V)=>{return V.courses.every((F)=>{if(F.sensor!==void 0||V.sensor!==void 0)return!0;return[F.launchUrl,V.launchUrl,F.overrides?.staging?.launchUrl,F.overrides?.production?.launchUrl].filter(Boolean).length>0})},{message:"Each course must have an effective sensor. Either set `sensor` explicitly (top-level or per-course), or provide a `launchUrl` so sensor can be derived from its origin.",path:["courses"]}),C=J.union([B,R]),WD=J.object({id:J.string(),role:J.string(),beginDate:C.nullable(),endDate:C.nullable(),metadata:J.object({goals:J.object({dailyXp:J.number().optional()}).optional(),metrics:J.object({totalXp:J.number().optional(),totalLessons:J.number().optional()}).optional()}).optional(),course:J.object({id:J.string(),title:J.string(),subjects:J.array(J.string()).nullable(),grades:J.array(J.string()).nullable()}),school:J.object({id:J.string(),name:J.string()}),testOutSupported:J.boolean(),testOutEligible:J.boolean()}),Oz=J.object({activityMetrics:J.object({xpEarned:J.number(),totalQuestions:J.number(),correctQuestions:J.number(),masteredUnits:J.number()}),timeSpentMetrics:J.object({activeSeconds:J.number(),inactiveSeconds:J.number(),wasteSeconds:J.number()}),apps:J.array(J.string())}),Zz=J.record(J.string(),J.record(J.string(),Oz)),jD=J.object({message:J.string(),enrollmentId:J.string(),startDate:C,endDate:C,facts:Zz,factsByApp:J.unknown()}),Jq=J.object({email:J.email().optional(),studentId:q.optional()}).superRefine((V,F)=>{if(!V.email&&!V.studentId)F.addIssue({code:J.ZodIssueCode.custom,message:"must provide either email or studentId",path:["email"]}),F.addIssue({code:J.ZodIssueCode.custom,message:"must provide either email or studentId",path:["studentId"]})}),wD=J.object({subject:q,grade:q,courseId:q,orgSourcedId:q.optional()});var AD=J.object({userId:q}),CD=J.object({sourcedId:q.optional(),role:Rq.optional(),beginDate:B.optional(),metadata:J.record(J.string(),J.unknown()).optional()}),GD=J.object({fields:J.string().optional(),limit:J.number().int().positive().optional(),offset:J.number().int().nonnegative().optional(),sort:J.string().optional(),orderBy:J.enum(["asc","desc"]).optional(),filter:J.string().optional(),search:J.string().optional(),roles:J.array(u).min(1),orgSourcedIds:J.array(q).optional()}),LD=Jq.extend({startDate:C,endDate:C,timezone:J.string().optional()}),PD=Jq.extend({weekDate:C,timezone:J.string().optional()}),TD=J.object({enrollmentId:q,startDate:C.optional(),endDate:C.optional(),timezone:J.string().optional()}),QD=M.object({email:M.email()}),RD=M.object({name:q.optional(),timeback_id:q.optional(),grade:q.optional(),subject:q.optional(),all:M.boolean().optional()}),hD=M.object({student_email:M.email(),timeback_id:q.optional(),subject:q.optional(),grade_rank:M.number().int().min(0).max(12).optional(),assessment_line_item_sourced_id:q.optional(),assessment_result_sourced_id:q.optional()}).superRefine((V,F)=>{let Z=!!V.timeback_id,N=!!V.subject,T=V.grade_rank!==void 0;if(!Z&&!N)F.addIssue({code:M.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["timeback_id"]}),F.addIssue({code:M.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["subject"]});if(T&&!N)F.addIssue({code:M.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]});let I=!!V.assessment_line_item_sourced_id,k=!!V.assessment_result_sourced_id;if(I!==k)F.addIssue({code:M.ZodIssueCode.custom,message:"assessment_line_item_sourced_id and assessment_result_sourced_id must be provided together",path:I?["assessment_result_sourced_id"]:["assessment_line_item_sourced_id"]})}),ID=M.object({student_email:M.email(),assignment_id:M.number().int().positive().optional(),timeback_id:q.optional(),subject:q.optional(),grade_rank:M.number().int().min(0).max(12).optional()}).superRefine((V,F)=>{let Z=V.assignment_id!==void 0,N=!!V.timeback_id,T=!!V.subject&&V.grade_rank!==void 0;if(!Z&&!N&&!T)F.addIssue({code:M.ZodIssueCode.custom,message:"Either assignment_id, timeback_id, or (subject and grade_rank) is required",path:["assignment_id"]});if(V.grade_rank!==void 0&&!V.subject)F.addIssue({code:M.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]})}),K=E.enum(["active","tobedeleted"]),O=E.record(E.string(),E.unknown()).nullable().optional(),_=E.object({sourcedId:q,type:E.string().optional(),href:E.string().optional()}).strict(),Bz=E.enum(["academicSession","assessmentLineItem","category","class","course","demographics","enrollment","gradingPeriod","lineItem","org","resource","result","scoreScale","student","teacher","term","user","componentResource","courseComponent"]),Kz=E.object({sourcedId:q,type:Bz,href:E.url()}).strict(),G=E.union([R,B]).transform((V)=>V.includes("T")?V:`${V}T00:00:00Z`),Mz=E.object({learningObjectiveId:E.string(),score:E.number().optional(),textScore:E.string().optional()}),Uq=E.array(E.object({source:E.string(),learningObjectiveResults:E.array(Mz)})),Wz=E.object({roleType:E.enum(["primary","secondary"]),role:u,org:_,userProfile:E.string().optional(),metadata:O,beginDate:G.optional(),endDate:G.optional()}).strict(),yD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string"),status:K.optional(),enabledUser:E.union([E.boolean(),E.enum(["true","false"]).transform((V)=>V==="true")]),givenName:q.describe("givenName must be a non-empty string"),familyName:q.describe("familyName must be a non-empty string"),middleName:q.nullable().optional(),preferredFirstName:q.nullable().optional(),preferredMiddleName:q.nullable().optional(),preferredLastName:q.nullable().optional(),username:q.nullable().optional(),email:E.email(),userMasterIdentifier:E.string().nullable().optional(),roles:E.array(Wz).min(1,"roles must include at least one role"),userIds:E.array(E.object({type:q,identifier:q}).strict()).optional(),agents:E.array(_).optional(),primaryOrg:_.optional(),grades:E.array(j).optional(),sms:q.nullable().optional(),phone:q.nullable().optional(),pronouns:q.nullable().optional(),password:q.nullable().optional(),metadata:O}).strict(),bD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string").optional(),status:K,title:q.describe("title must be a non-empty string"),org:_,courseCode:q.nullable().optional(),subjects:E.array(L).nullable().optional(),subjectCodes:E.array(E.string()).nullable().optional(),grades:E.array(j).nullable().optional(),level:q.nullable().optional(),academicSession:_.nullable().optional(),schoolYear:Kz.nullable().optional(),gradingScheme:q.nullable().optional(),metadata:O}).strict(),fD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string").optional(),status:K.optional(),title:q.describe("title must be a non-empty string"),terms:E.array(_).min(1,"terms must have at least one item"),course:_,org:_,classCode:q.nullable().optional(),classType:E.enum(["homeroom","scheduled"]).optional(),location:q.nullable().optional(),grades:E.array(j).optional(),subjects:E.array(L).optional(),subjectCodes:E.array(q).optional(),periods:E.array(q).optional(),metadata:O}).strict(),w=E.enum(["true","false"]),gD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string").optional(),status:K.optional(),user:_,class:_,school:_.optional(),role:E.enum(["administrator","proctor","student","teacher"]),primary:w.optional(),beginDate:R.optional(),endDate:R.optional(),metadata:O}).strict(),mD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),status:K,weight:E.number().nullable().optional(),metadata:O}).strict(),xD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),class:_,school:_,category:_,assignDate:G,dueDate:G,status:K.optional(),description:E.string().nullable().optional(),resultValueMin:E.number().nullable().optional(),resultValueMax:E.number().nullable().optional(),gradingPeriod:_.nullable().optional(),academicSession:_.nullable().optional(),scoreScale:_.nullable().optional(),learningObjectiveSet:s.nullable().optional(),metadata:O}).strict(),pD=E.object({sourcedId:q.optional(),lineItem:_,student:_,class:_.nullable().optional(),scoreDate:G,scoreStatus:E.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),score:E.number().nullable().optional(),textScore:E.string().nullable().optional(),status:K,scoreScale:_.nullable().optional(),comment:E.string().nullable().optional(),learningObjectiveSet:Uq.nullable().optional(),inProgress:E.string().optional(),incomplete:E.string().optional(),late:E.string().optional(),missing:E.string().optional(),metadata:O}).strict(),vD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),status:K,type:q,class:_,course:_.nullable().optional(),scoreScaleValue:E.array(E.object({itemValueLHS:q,itemValueRHS:q,value:E.string().optional(),description:E.string().optional()}).strict()),metadata:O}).strict(),lD=E.object({sourcedId:q.optional(),status:K,dateLastModified:B.optional(),title:q.describe("title must be a non-empty string"),description:E.string().nullable().optional(),class:_.nullable().optional(),parentAssessmentLineItem:_.nullable().optional(),scoreScale:_.nullable().optional(),resultValueMin:E.number().nullable().optional(),resultValueMax:E.number().nullable().optional(),component:_.nullable().optional(),componentResource:_.nullable().optional(),learningObjectiveSet:E.array(E.object({source:E.string(),learningObjectiveIds:E.array(E.string())})).optional().nullable(),course:_.nullable().optional(),metadata:O}).strict(),oD=E.object({sourcedId:q.optional(),status:K,dateLastModified:B.optional(),metadata:O,assessmentLineItem:_,student:_,score:E.number().nullable().optional(),textScore:E.string().nullable().optional(),scoreDate:G,scoreScale:_.nullable().optional(),scorePercentile:E.number().nullable().optional(),scoreStatus:E.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),comment:E.string().nullable().optional(),learningObjectiveSet:Uq.nullable().optional(),inProgress:E.string().nullable().optional(),incomplete:E.string().nullable().optional(),late:E.string().nullable().optional(),missing:E.string().nullable().optional()}).strict(),dD=E.object({sourcedId:q.optional(),status:K.optional(),name:q.describe("name must be a non-empty string"),type:Qq,identifier:E.string().nullish(),parent:_.optional(),metadata:O}).strict(),nD=E.object({sourcedId:q.optional(),status:K.optional(),name:q.describe("name must be a non-empty string"),type:E.literal("school").default("school"),identifier:E.string().nullish(),parent:_.optional(),metadata:O}).strict(),iD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string"),status:K,title:q.describe("title must be a non-empty string"),startDate:G,endDate:G,type:E.enum(["gradingPeriod","semester","schoolYear","term"]),schoolYear:q.describe("schoolYear must be a non-empty string"),org:_,parent:_.optional(),children:E.array(_).optional(),metadata:O}).strict(),uD=E.object({sourcedId:q,title:q.describe("title must be a non-empty string"),courseComponent:_,resource:_,status:K,sortOrder:E.number().optional(),lessonType:fq.optional(),metadata:O}).strict(),sD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),course:_,status:K,sortOrder:E.number().optional(),parent:_.nullable().optional(),courseComponent:_.nullable().optional(),prerequisites:E.array(E.string()).nullable().optional(),prerequisiteCriteria:E.string().nullable().optional(),unlockDate:G.nullable().optional(),metadata:O}).strict().transform(({courseComponent:V,parent:F,...Z})=>({...Z,parent:F===void 0?V??void 0:F})),rD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string"),role:E.enum(["student","teacher"]),primary:w.optional(),beginDate:R.optional(),endDate:R.optional(),metadata:O}).strict(),cD=E.object({agentSourcedId:q.describe("agentSourcedId must be a non-empty string")}).strict(),tD=E.object({applicationName:q.describe("applicationName must be a non-empty string"),credentials:E.object({username:q.describe("username must be a non-empty string"),password:q.describe("password must be a non-empty string")})}).strict(),aD=E.object({sourcedId:q.describe("sourcedId must be a non-empty string"),status:K.optional(),metadata:O,birthDate:E.string().regex(/^\d{4}-\d{2}-\d{2}$/).nullable().optional(),sex:E.enum(["male","female"]).nullable().optional(),americanIndianOrAlaskaNative:w.nullable().optional(),asian:w.nullable().optional(),blackOrAfricanAmerican:w.nullable().optional(),nativeHawaiianOrOtherPacificIslander:w.nullable().optional(),white:w.nullable().optional(),demographicRaceTwoOrMoreRaces:w.nullable().optional(),hispanicOrLatinoEthnicity:w.nullable().optional(),countryOfBirthCode:E.string().nullable().optional(),stateOfBirthAbbreviation:E.string().nullable().optional(),cityOfBirth:E.string().nullable().optional(),publicSchoolResidenceStatus:E.string().nullable().optional()}).strict(),P=E.object({type:hq,subject:L.nullish(),grades:E.array(j).nullish(),language:E.string().nullish(),xp:E.number().nullish(),url:E.url().nullish(),keywords:E.array(E.string()).nullish(),learningObjectiveSet:s.nullish(),lessonType:E.string().nullish()}).passthrough(),jz=P.extend({type:E.literal("qti"),subType:Iq,questionType:yq.optional(),difficulty:bq.optional()}),wz=P.extend({type:E.literal("text"),format:E.string(),author:E.string().optional(),pageCount:E.number().optional()}),Az=P.extend({type:E.literal("audio"),duration:E.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),format:E.string(),speaker:E.string().optional()}),Cz=P.extend({type:E.literal("video"),duration:E.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),captionsAvailable:E.boolean().optional(),format:E.string()}),Gz=P.extend({type:E.literal("interactive"),launchUrl:E.url().optional(),toolProvider:E.string().optional(),instructionalMethod:E.string().optional(),courseIdOnFail:E.string().nullable().optional(),fail_fast:r}),Lz=P.extend({type:E.literal("visual"),format:E.string(),resolution:E.string().optional()}),Pz=P.extend({type:E.literal("course-material"),subType:kq,author:E.string().optional(),format:E.string(),instructionalMethod:E.string().optional()}),Tz=P.extend({type:E.literal("assessment-bank"),resources:E.array(E.string())}),Sz=E.discriminatedUnion("type",[jz,wz,Az,Cz,Gz,Lz,Pz,Tz]),Qz=new Set(["type","subject","grades","language","xp","url","keywords","learningObjectiveSet","lessonType","subType","questionType","difficulty","format","author","pageCount","duration","speaker","captionsAvailable","launchUrl","toolProvider","instructionalMethod","courseIdOnFail","resolution","resources"]),Rz=E.record(E.string(),E.unknown()).superRefine((V,F)=>{if("fail_fast"in V){let N=r.safeParse(V.fail_fast);if(!N.success)for(let T of N.error.issues)F.addIssue({...T,path:["fail_fast",...T.path]})}let Z=Object.keys(V).filter((N)=>Qz.has(N));if(Z.length===0)return;F.addIssue({code:"custom",message:`metadata keys ${Z.map((N)=>`\`${N}\``).join(", ")} require a valid \`type\` discriminator`})}),eD=E.object({sourcedId:q.optional(),title:q.describe("title must be a non-empty string"),vendorResourceId:q.describe("vendorResourceId must be a non-empty string"),roles:E.array(E.enum(["primary","secondary"])).optional(),importance:E.enum(["primary","secondary"]).optional(),vendorId:q.nullable().optional(),applicationId:q.nullable().optional(),status:K.optional(),metadata:E.union([Sz,Rz]).nullable().optional()}).strict(),hz=E.object({url:q.describe("courseStructure.url must be a non-empty string"),skillCode:q.describe("courseStructure.skillCode must be a non-empty string"),lessonCode:q.describe("courseStructure.lessonCode must be a non-empty string"),title:q.describe("courseStructure.title must be a non-empty string"),"unit-title":q.describe("courseStructure.unit-title must be a non-empty string"),status:q.describe("courseStructure.status must be a non-empty string"),xp:E.number()}).loose(),qE=E.object({course:E.object({sourcedId:q.describe("course.sourcedId must be a non-empty string").optional(),title:q.describe("course.title must be a non-empty string"),org:_,status:K,metadata:O}).strict(),courseStructure:E.record(E.string(),hz)}).strict(),Iz=E.object({student:_}).loose(),zE=E.array(Iz).min(1,"results must have at least one item"),kz=H.enum(["edulastic","mastery-track"]),yz=H.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]),Vq=H.array(j),Xq=H.record(H.string(),H.unknown()).optional(),Yq=H.object({courseId:q,lessonTitle:q.optional(),launchUrl:q.optional(),toolProvider:kz,unitTitle:q.optional(),courseComponentSourcedId:q.optional(),vendorId:q.optional(),description:q.optional(),resourceMetadata:Xq.nullable().optional(),grades:Vq}),EE=Yq.extend({lessonType:H.literal("test-out"),xp:H.number()}),HE=Yq.extend({lessonType:H.literal("placement"),courseIdOnFail:q.nullable().optional(),xp:H.number().optional()});var i=H.object({courseId:q,lessonType:yz,lessonTitle:q.optional(),unitTitle:q.optional(),courseComponentSourcedId:q.optional(),resourceMetadata:Xq.nullable().optional(),xp:H.number().optional(),grades:Vq.optional(),courseIdOnFail:q.nullable().optional()}),JE=H.discriminatedUnion("testType",[i.extend({testType:H.literal("qti"),qti:H.object({url:H.url(),title:q.optional(),metadata:H.record(H.string(),H.unknown()).optional()})}),i.extend({testType:H.literal("assessment-bank"),assessmentBank:H.object({resources:H.array(H.object({url:H.url(),title:q.optional(),metadata:H.record(H.string(),H.unknown()).optional()})).min(1)})})]),UE=H.object({student:q,lesson:q}),VE=H.object({student:q,lesson:q}),XE=H.object({courseId:q,userId:q,classId:q.optional()}),Q=H.object({type:H.enum(["component","resource"]),id:q}),bz=H.union([H.object({type:H.literal("set-skipped"),payload:H.object({target:Q,value:H.boolean()})}),H.object({type:H.literal("add-custom-resource"),payload:H.object({resource_id:q,parent_component_id:q,skipped:H.boolean().optional()})}),H.object({type:H.literal("move-item-before"),payload:H.object({target:Q,reference_id:q})}),H.object({type:H.literal("move-item-after"),payload:H.object({target:Q,reference_id:q})}),H.object({type:H.literal("move-item-to-start"),payload:H.object({target:Q})}),H.object({type:H.literal("move-item-to-end"),payload:H.object({target:Q})}),H.object({type:H.literal("change-item-parent"),payload:H.object({target:Q,new_parent_id:q,position:H.enum(["start","end"]).optional()})})]),YE=H.object({operation:bz,reason:q.optional()}),_E=H.object({studentId:q,componentResourceId:q,result:H.object({status:H.enum(["active","tobedeleted"]),metadata:H.record(H.string(),H.unknown()).optional(),score:H.number().optional(),textScore:q.optional(),scoreDate:H.string().datetime(),scorePercentile:H.number().optional(),scoreStatus:Sq,comment:q.optional(),learningObjectiveSet:H.array(H.object({source:q,learningObjectiveResults:H.array(H.object({learningObjectiveId:q,score:H.number().optional(),textScore:q.optional()}))})).optional(),inProgress:q.optional(),incomplete:q.optional(),late:q.optional(),missing:q.optional()})}),$E=H.object({student:q,lesson:q,applicationName:q.optional(),testId:q.optional(),skipCourseEnrollment:H.boolean().optional()}),FE=H.object({student:q,subject:L}),NE=H.object({student:q,lesson:q}),OE=H.object({userId:q}),ZE=H.object({userId:q,subject:H.enum(["Math","Reading","Language","Science"])}),BE=H.object({student:q,subject:L,grade:j,testName:q.optional()}),KE=H.object({testName:q}),fz=H.object({student:q,subject:L,grade:j,testName:q.optional()}),ME=H.object({items:H.array(fz)}),WE=H.object({spreadsheetUrl:H.url(),sheet:q}),jE=H.object({student:q,status:H.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:q.optional(),grade:j.optional(),limit:H.number().int().positive().max(3000).optional(),offset:H.number().int().nonnegative().optional()}),wE=H.object({student:q.optional(),status:H.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:q.optional(),grade:j.optional(),limit:H.number().int().positive().max(3000).optional(),offset:H.number().int().nonnegative().optional()}),AE=H.object({student:q,question:q,response:H.union([q,H.array(q)]).optional(),responses:H.record(H.string(),H.union([q,H.array(q)])).optional(),lesson:q,rendererOutcomes:H.object({score:H.number(),maxScore:H.number().min(0),isCorrect:H.boolean()}).optional(),playerState:H.string().optional()}).refine((V)=>V.response!==void 0||V.responses!==void 0,{message:"Either 'response' or 'responses' must be provided",path:["response","responses"]}).transform((V)=>{if(V.response!==void 0&&V.responses===void 0)return{...V,responses:{RESPONSE:V.response}};return V}),CE=H.object({student:q,lesson:q,attempt:H.number().int().positive().optional()}),GE=H.object({student:q,lesson:q}),LE=H.object({student:q,lesson:q}),PE=H.object({student:q,course:q}),TE=H.object({student:q,lesson:q,applicationName:q.optional()}),SE=H.object({student:q,subject:L}),QE=H.object({oneRosterSourcedId:q,subject:q}),RE=H.object({courseIds:H.array(q).min(1),rendererId:q,rendererUrl:H.url(),rendererVersion:q.optional(),suppressFeedback:H.boolean().optional(),suppressCorrectResponse:H.boolean().optional()}),hE=H.object({status:H.enum(["active","tobedeleted"]).optional()}),m=z.enum(["choice","text-entry","extended-text","inline-choice","match","order","associate","select-point","graphic-order","graphic-associate","graphic-gap-match","hotspot","hottext","slider","drawing","media","upload"]),x=z.enum(["single","multiple","ordered","record"]),p=z.enum(["identifier","boolean","integer","float","string","point","pair","directedPair","duration","file","uri"]),gz=z.enum(["easy","medium","hard"]),mz=z.enum(["linear","nonlinear"]),xz=z.enum(["individual","simultaneous"]),v=z.enum(["show","hide"]),_q=z.enum(["test","item","stimulus"]),kE=z.enum(["QUESTION","LESSON"]),pz=z.object({value:z.array(z.string())}).strict(),$q=z.object({identifier:q,cardinality:x,baseType:p.optional(),correctResponse:pz}).strict(),Fq=z.object({identifier:q,cardinality:x,baseType:p.optional()}).strict(),Nq=z.object({identifier:q,cardinality:x.optional(),baseType:p,normalMaximum:z.number().optional(),normalMinimum:z.number().optional(),defaultValue:z.object({value:z.unknown().optional()}).strict().optional()}).strict(),vz=z.object({outcomeIdentifier:q,variableIdentifier:q}).strict(),Oq=z.object({templateType:z.enum(["match_correct","map_response"]),responseDeclarationIdentifier:q,outcomeIdentifier:q,correctResponseIdentifier:q,incorrectResponseIdentifier:q,inlineFeedback:vz.optional()}).strict(),lz=z.object({source:q,learningObjectiveIds:z.array(z.string())}).strict(),l=z.object({subject:z.string().optional(),grade:j.optional(),difficulty:gz.optional(),learningObjectiveSet:z.array(lz).optional()}).loose(),Zq=z.object({outcomeIdentifier:q,identifier:q,showHide:v,content:z.string(),title:z.string()}).strict(),Bq=z.object({outcomeIdentifier:q,identifier:q,showHide:v,content:z.string(),class:z.array(z.string()).optional()}).strict(),Kq=z.object({outcomeIdentifier:q,identifier:q,showHide:v,content:z.string(),class:z.array(z.string()).optional()}).strict(),oz=z.object({identifier:q,content:z.string(),feedbackInline:z.string().nullable().optional(),feedbackOutcomeIdentifier:q.optional()}).loose(),dz=z.object({prompt:z.string().optional(),choices:z.array(oz).optional()}).loose(),nz=z.object({"expected-length":z.number().int().nonnegative().optional(),"pattern-mask":z.string().optional(),placeholder:z.string().optional()}).loose(),Mq=z.object({type:m,responseIdentifier:q,shuffle:z.boolean().optional(),maxChoices:z.number().int().nonnegative().optional(),attributes:nz.optional(),questionStructure:dz}).loose(),Wq=z.object({use:q,view:q,body:z.string()}).loose(),jq=z.object({identifier:q,href:q.optional(),title:z.string().optional()}).loose(),wq=z.object({href:q,type:q}).strict(),Aq=z.object({id:q,support:z.string(),content:z.string()}).strict(),yE=z.object({query:z.string().optional(),page:z.number().int().positive().optional(),limit:z.number().int().positive().optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).optional()}).strict(),iz=z.object({format:z.string().pipe(z.literal("xml")),xml:q,metadata:l.optional()}).strict(),uz=z.object({format:z.literal("json").optional(),identifier:q,title:q,type:m,qtiVersion:z.string().optional(),timeDependent:z.boolean().optional(),adaptive:z.boolean().optional(),preInteraction:z.string().optional(),interaction:Mq.optional(),postInteraction:z.string().optional(),responseDeclarations:z.array($q).optional(),outcomeDeclarations:z.array(Fq).optional(),responseProcessing:Oq.optional(),metadata:l.optional(),modalFeedback:z.array(Zq).optional(),feedbackInline:z.array(Bq).optional(),feedbackBlock:z.array(Kq).optional(),rubrics:z.array(Wq).optional(),stimulus:jq.optional()}).strict(),bE=z.union([iz,uz]),fE=z.object({format:z.literal("json").optional(),identifier:q.optional(),title:q,type:m,qtiVersion:z.string().optional(),timeDependent:z.boolean().optional(),adaptive:z.boolean().optional(),preInteraction:z.string().optional(),interaction:Mq.optional(),postInteraction:z.string().optional(),responseDeclarations:z.array($q).optional(),outcomeDeclarations:z.array(Fq).optional(),responseProcessing:Oq.optional(),metadata:l.optional(),modalFeedback:z.array(Zq).optional(),feedbackInline:z.array(Bq).optional(),feedbackBlock:z.array(Kq).optional(),rubrics:z.array(Wq).optional(),stimulus:jq.optional(),rawXml:z.string().optional(),content:z.record(z.string(),z.unknown()).optional()}).strict(),gE=z.object({identifier:q,response:z.union([z.string(),z.array(z.string())])}).strict(),Cq=z.object({identifier:q,href:q,sequence:z.number().int().positive().optional()}).strict(),sz=z.object({identifier:q,title:q,visible:z.boolean(),required:z.boolean().optional(),fixed:z.boolean().optional(),sequence:z.number().int().positive(),"qti-assessment-item-ref":z.array(Cq).optional()}).strict(),Gq=z.object({identifier:q,navigationMode:z.string().pipe(mz),submissionMode:z.string().pipe(xz),"qti-assessment-section":z.array(sz)}).strict(),mE=z.object({items:z.array(Cq).min(1)}).strict(),xE=z.object({metadata:z.record(z.string(),z.unknown()).optional()}).strict(),pE=z.object({identifier:q,title:q,qtiVersion:z.string().optional(),toolName:z.string().optional(),toolVersion:z.string().optional(),timeLimit:z.number().optional(),maxAttempts:z.number().optional(),toolsEnabled:z.record(z.string(),z.boolean()).optional(),metadata:z.record(z.string(),z.unknown()).optional(),"qti-test-part":z.array(Gq),"qti-outcome-declaration":z.array(Nq).optional()}).strict(),vE=z.object({identifier:q.optional(),title:q,qtiVersion:z.string().optional(),toolName:z.string().optional(),toolVersion:z.string().optional(),timeLimit:z.number().optional(),maxAttempts:z.number().optional(),toolsEnabled:z.record(z.string(),z.boolean()).optional(),metadata:z.record(z.string(),z.unknown()).optional(),"qti-test-part":z.array(Gq),"qti-outcome-declaration":z.array(Nq).optional()}).strict(),lE=z.object({identifier:q,title:q,label:z.string().optional(),language:z.string().optional(),stylesheet:wq.optional(),content:z.string(),catalogInfo:z.array(Aq).optional(),toolName:z.string().optional(),toolVersion:z.string().optional(),metadata:z.record(z.string(),z.unknown()).optional()}).strict(),oE=z.object({identifier:q.optional(),title:q,label:z.string().optional(),language:z.string().optional(),stylesheet:wq.optional(),content:z.string(),catalogInfo:z.array(Aq).optional(),toolName:z.string().optional(),toolVersion:z.string().optional(),metadata:z.record(z.string(),z.unknown()).optional()}).strict(),dE=z.object({xml:z.string().optional(),schema:_q,entityId:z.string().optional()}).strict(),nE=z.object({xml:z.array(z.string()),schema:_q,entityIds:z.array(z.string())}).strict(),iE=z.object({questionId:z.string().optional(),userId:q,feedback:q,lessonId:q,humanApproved:z.boolean().optional()}).strict(),rz=h.enum(["creator_only","same_org","all_orgs"]),cz=h.string().uuid(),sE=h.email(),rE=h.object({sql:q}),cE=h.object({endpointName:q,sql:q,authMode:rz,description:q.optional()}),tE=h.object({endpointId:cz});
|
|
2
2
|
export{q as a,L as b,j as c,KD as d};
|