@timeback/sdk 0.1.5 → 0.1.6
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.
- package/README.md +21 -22
- package/dist/edge.d.ts +1 -1
- package/dist/index.js +516 -347
- package/dist/server/adapters/express.js +320 -195
- package/dist/server/adapters/nuxt.js +320 -195
- package/dist/server/adapters/solid-start.js +320 -195
- package/dist/server/adapters/tanstack-start.js +320 -195
- package/dist/server/lib/resolve.d.ts +2 -2
- package/dist/server/timeback-identity.d.ts +2 -2
- package/dist/server/types.d.ts +3 -3
- package/dist/server/types.d.ts.map +1 -1
- package/dist/shared/types.d.ts +3 -3
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +2 -6
- package/dist/config.d.ts +0 -20
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -0
|
@@ -15391,7 +15391,7 @@ var TimebackSubject = exports_external.enum([
|
|
|
15391
15391
|
"Math",
|
|
15392
15392
|
"None",
|
|
15393
15393
|
"Other"
|
|
15394
|
-
]);
|
|
15394
|
+
]).meta({ id: "TimebackSubject", description: "Subject area" });
|
|
15395
15395
|
var TimebackGrade = exports_external.union([
|
|
15396
15396
|
exports_external.literal(-1),
|
|
15397
15397
|
exports_external.literal(0),
|
|
@@ -15408,7 +15408,10 @@ var TimebackGrade = exports_external.union([
|
|
|
15408
15408
|
exports_external.literal(11),
|
|
15409
15409
|
exports_external.literal(12),
|
|
15410
15410
|
exports_external.literal(13)
|
|
15411
|
-
])
|
|
15411
|
+
]).meta({
|
|
15412
|
+
id: "TimebackGrade",
|
|
15413
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
15414
|
+
});
|
|
15412
15415
|
var ScoreStatus = exports_external.enum([
|
|
15413
15416
|
"exempt",
|
|
15414
15417
|
"fully graded",
|
|
@@ -15638,62 +15641,84 @@ var CaliperListEventsParams = exports_external.object({
|
|
|
15638
15641
|
actorEmail: exports_external.email().optional()
|
|
15639
15642
|
}).strict();
|
|
15640
15643
|
var CourseIds = exports_external.object({
|
|
15641
|
-
staging: exports_external.string().optional(),
|
|
15642
|
-
production: exports_external.string().optional()
|
|
15643
|
-
});
|
|
15644
|
-
var CourseType = exports_external.enum(["base", "hole-filling", "optional"]);
|
|
15645
|
-
var PublishStatus = exports_external.enum(["draft", "testing", "published", "deactivated"]);
|
|
15644
|
+
staging: exports_external.string().meta({ description: "Course ID in staging environment" }).optional(),
|
|
15645
|
+
production: exports_external.string().meta({ description: "Course ID in production environment" }).optional()
|
|
15646
|
+
}).meta({ id: "CourseIds", description: "Environment-specific course IDs (populated by sync)" });
|
|
15647
|
+
var CourseType = exports_external.enum(["base", "hole-filling", "optional"]).meta({ id: "CourseType", description: "Course classification type" });
|
|
15648
|
+
var PublishStatus = exports_external.enum(["draft", "testing", "published", "deactivated"]).meta({ id: "PublishStatus", description: "Course publication status" });
|
|
15646
15649
|
var CourseGoals = exports_external.object({
|
|
15647
|
-
dailyXp: exports_external.number().int().positive().optional(),
|
|
15648
|
-
dailyLessons: exports_external.number().int().positive().optional(),
|
|
15649
|
-
dailyActiveMinutes: exports_external.number().int().positive().optional(),
|
|
15650
|
-
dailyAccuracy: exports_external.number().int().min(0).max(100).optional(),
|
|
15651
|
-
dailyMasteredUnits: exports_external.number().int().positive().optional()
|
|
15652
|
-
});
|
|
15650
|
+
dailyXp: exports_external.number().int().positive().meta({ description: "Target XP to earn per day" }).optional(),
|
|
15651
|
+
dailyLessons: exports_external.number().int().positive().meta({ description: "Target lessons to complete per day" }).optional(),
|
|
15652
|
+
dailyActiveMinutes: exports_external.number().int().positive().meta({ description: "Target active learning minutes per day" }).optional(),
|
|
15653
|
+
dailyAccuracy: exports_external.number().int().min(0).max(100).meta({ description: "Target accuracy percentage (0-100)" }).optional(),
|
|
15654
|
+
dailyMasteredUnits: exports_external.number().int().positive().meta({ description: "Target units to master per day" }).optional()
|
|
15655
|
+
}).meta({ id: "CourseGoals", description: "Daily learning goals for a course" });
|
|
15653
15656
|
var CourseMetrics = exports_external.object({
|
|
15654
|
-
totalXp: exports_external.number().int().positive().optional(),
|
|
15655
|
-
totalLessons: exports_external.number().int().positive().optional(),
|
|
15656
|
-
totalGrades: exports_external.number().int().positive().optional()
|
|
15657
|
-
});
|
|
15657
|
+
totalXp: exports_external.number().int().positive().meta({ description: "Total XP available in the course" }).optional(),
|
|
15658
|
+
totalLessons: exports_external.number().int().positive().meta({ description: "Total number of lessons/activities" }).optional(),
|
|
15659
|
+
totalGrades: exports_external.number().int().positive().meta({ description: "Total grade levels covered" }).optional()
|
|
15660
|
+
}).meta({ id: "CourseMetrics", description: "Aggregate metrics for a course" });
|
|
15658
15661
|
var CourseMetadata = exports_external.object({
|
|
15659
15662
|
courseType: CourseType.optional(),
|
|
15660
|
-
isSupplemental: exports_external.boolean().optional(),
|
|
15661
|
-
isCustom: exports_external.boolean().optional(),
|
|
15663
|
+
isSupplemental: exports_external.boolean().meta({ description: "Whether this is supplemental to a base course" }).optional(),
|
|
15664
|
+
isCustom: exports_external.boolean().meta({ description: "Whether this is a custom course for an individual student" }).optional(),
|
|
15662
15665
|
publishStatus: PublishStatus.optional(),
|
|
15663
|
-
contactEmail: exports_external.email().optional(),
|
|
15664
|
-
primaryApp: exports_external.string().optional(),
|
|
15666
|
+
contactEmail: exports_external.email().meta({ description: "Contact email for course issues" }).optional(),
|
|
15667
|
+
primaryApp: exports_external.string().meta({ description: "Primary application identifier" }).optional(),
|
|
15665
15668
|
goals: CourseGoals.optional(),
|
|
15666
15669
|
metrics: CourseMetrics.optional()
|
|
15667
|
-
});
|
|
15670
|
+
}).meta({ id: "CourseMetadata", description: "Course metadata (matches API metadata object)" });
|
|
15668
15671
|
var CourseDefaults = exports_external.object({
|
|
15669
|
-
courseCode: exports_external.string().optional(),
|
|
15670
|
-
level: exports_external.string().optional(),
|
|
15672
|
+
courseCode: exports_external.string().meta({ description: "Course code (e.g., 'MATH101')" }).optional(),
|
|
15673
|
+
level: exports_external.string().meta({ description: "Course level (e.g., 'AP', 'Honors')" }).optional(),
|
|
15671
15674
|
metadata: CourseMetadata.optional()
|
|
15675
|
+
}).meta({
|
|
15676
|
+
id: "CourseDefaults",
|
|
15677
|
+
description: "Default properties that apply to all courses unless overridden"
|
|
15672
15678
|
});
|
|
15673
15679
|
var CourseEnvOverrides = exports_external.object({
|
|
15674
|
-
level: exports_external.string().optional(),
|
|
15675
|
-
sensor: exports_external.
|
|
15676
|
-
launchUrl: exports_external.
|
|
15680
|
+
level: exports_external.string().meta({ description: "Course level for this environment" }).optional(),
|
|
15681
|
+
sensor: exports_external.url().meta({ description: "Caliper sensor endpoint URL for this environment" }).optional(),
|
|
15682
|
+
launchUrl: exports_external.url().meta({ description: "LTI launch URL for this environment" }).optional(),
|
|
15677
15683
|
metadata: CourseMetadata.optional()
|
|
15684
|
+
}).meta({
|
|
15685
|
+
id: "CourseEnvOverrides",
|
|
15686
|
+
description: "Environment-specific course overrides (non-identity fields)"
|
|
15678
15687
|
});
|
|
15679
15688
|
var CourseOverrides = exports_external.object({
|
|
15680
|
-
staging: CourseEnvOverrides.
|
|
15681
|
-
|
|
15682
|
-
})
|
|
15689
|
+
staging: CourseEnvOverrides.meta({
|
|
15690
|
+
description: "Overrides for staging environment"
|
|
15691
|
+
}).optional(),
|
|
15692
|
+
production: CourseEnvOverrides.meta({
|
|
15693
|
+
description: "Overrides for production environment"
|
|
15694
|
+
}).optional()
|
|
15695
|
+
}).meta({ id: "CourseOverrides", description: "Per-environment course overrides" });
|
|
15683
15696
|
var CourseConfig = CourseDefaults.extend({
|
|
15684
|
-
subject: TimebackSubject,
|
|
15685
|
-
grade: TimebackGrade.
|
|
15697
|
+
subject: TimebackSubject.meta({ description: "Subject area for this course" }),
|
|
15698
|
+
grade: TimebackGrade.meta({
|
|
15699
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
15700
|
+
}).optional(),
|
|
15686
15701
|
ids: CourseIds.nullable().optional(),
|
|
15687
|
-
sensor: exports_external.
|
|
15688
|
-
launchUrl: exports_external.
|
|
15702
|
+
sensor: exports_external.url().meta({ description: "Caliper sensor endpoint URL for this course" }).optional(),
|
|
15703
|
+
launchUrl: exports_external.url().meta({ description: "LTI launch URL for this course" }).optional(),
|
|
15689
15704
|
overrides: CourseOverrides.optional()
|
|
15705
|
+
}).meta({
|
|
15706
|
+
id: "CourseConfig",
|
|
15707
|
+
description: "Configuration for a single course. Must have either grade or courseCode (or both)."
|
|
15690
15708
|
});
|
|
15691
15709
|
var TimebackConfig = exports_external.object({
|
|
15692
|
-
|
|
15693
|
-
|
|
15694
|
-
|
|
15695
|
-
|
|
15696
|
-
|
|
15710
|
+
$schema: exports_external.string().meta({ description: "JSON Schema reference for editor support" }).optional(),
|
|
15711
|
+
name: exports_external.string().min(1, "App name is required").meta({ description: "Display name for your app" }),
|
|
15712
|
+
defaults: CourseDefaults.meta({
|
|
15713
|
+
description: "Default properties applied to all courses"
|
|
15714
|
+
}).optional(),
|
|
15715
|
+
courses: exports_external.array(CourseConfig).min(1, "At least one course is required").meta({ description: "Courses available in this app" }),
|
|
15716
|
+
sensor: exports_external.url().meta({ description: "Default Caliper sensor endpoint URL for all courses" }).optional(),
|
|
15717
|
+
launchUrl: exports_external.url().meta({ description: "Default LTI launch URL for all courses" }).optional()
|
|
15718
|
+
}).meta({
|
|
15719
|
+
id: "TimebackConfig",
|
|
15720
|
+
title: "Timeback Config",
|
|
15721
|
+
description: "Configuration schema for timeback.config.json files"
|
|
15697
15722
|
}).refine((config2) => {
|
|
15698
15723
|
return config2.courses.every((c) => c.grade !== undefined || c.courseCode !== undefined);
|
|
15699
15724
|
}, {
|
|
@@ -31769,7 +31794,7 @@ var TimebackSubject2 = exports_external2.enum([
|
|
|
31769
31794
|
"Math",
|
|
31770
31795
|
"None",
|
|
31771
31796
|
"Other"
|
|
31772
|
-
]);
|
|
31797
|
+
]).meta({ id: "TimebackSubject", description: "Subject area" });
|
|
31773
31798
|
var TimebackGrade2 = exports_external2.union([
|
|
31774
31799
|
exports_external2.literal(-1),
|
|
31775
31800
|
exports_external2.literal(0),
|
|
@@ -31786,7 +31811,10 @@ var TimebackGrade2 = exports_external2.union([
|
|
|
31786
31811
|
exports_external2.literal(11),
|
|
31787
31812
|
exports_external2.literal(12),
|
|
31788
31813
|
exports_external2.literal(13)
|
|
31789
|
-
])
|
|
31814
|
+
]).meta({
|
|
31815
|
+
id: "TimebackGrade",
|
|
31816
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
31817
|
+
});
|
|
31790
31818
|
var ScoreStatus2 = exports_external2.enum([
|
|
31791
31819
|
"exempt",
|
|
31792
31820
|
"fully graded",
|
|
@@ -32016,62 +32044,84 @@ var CaliperListEventsParams2 = exports_external2.object({
|
|
|
32016
32044
|
actorEmail: exports_external2.email().optional()
|
|
32017
32045
|
}).strict();
|
|
32018
32046
|
var CourseIds2 = exports_external2.object({
|
|
32019
|
-
staging: exports_external2.string().optional(),
|
|
32020
|
-
production: exports_external2.string().optional()
|
|
32021
|
-
});
|
|
32022
|
-
var CourseType2 = exports_external2.enum(["base", "hole-filling", "optional"]);
|
|
32023
|
-
var PublishStatus2 = exports_external2.enum(["draft", "testing", "published", "deactivated"]);
|
|
32047
|
+
staging: exports_external2.string().meta({ description: "Course ID in staging environment" }).optional(),
|
|
32048
|
+
production: exports_external2.string().meta({ description: "Course ID in production environment" }).optional()
|
|
32049
|
+
}).meta({ id: "CourseIds", description: "Environment-specific course IDs (populated by sync)" });
|
|
32050
|
+
var CourseType2 = exports_external2.enum(["base", "hole-filling", "optional"]).meta({ id: "CourseType", description: "Course classification type" });
|
|
32051
|
+
var PublishStatus2 = exports_external2.enum(["draft", "testing", "published", "deactivated"]).meta({ id: "PublishStatus", description: "Course publication status" });
|
|
32024
32052
|
var CourseGoals2 = exports_external2.object({
|
|
32025
|
-
dailyXp: exports_external2.number().int().positive().optional(),
|
|
32026
|
-
dailyLessons: exports_external2.number().int().positive().optional(),
|
|
32027
|
-
dailyActiveMinutes: exports_external2.number().int().positive().optional(),
|
|
32028
|
-
dailyAccuracy: exports_external2.number().int().min(0).max(100).optional(),
|
|
32029
|
-
dailyMasteredUnits: exports_external2.number().int().positive().optional()
|
|
32030
|
-
});
|
|
32053
|
+
dailyXp: exports_external2.number().int().positive().meta({ description: "Target XP to earn per day" }).optional(),
|
|
32054
|
+
dailyLessons: exports_external2.number().int().positive().meta({ description: "Target lessons to complete per day" }).optional(),
|
|
32055
|
+
dailyActiveMinutes: exports_external2.number().int().positive().meta({ description: "Target active learning minutes per day" }).optional(),
|
|
32056
|
+
dailyAccuracy: exports_external2.number().int().min(0).max(100).meta({ description: "Target accuracy percentage (0-100)" }).optional(),
|
|
32057
|
+
dailyMasteredUnits: exports_external2.number().int().positive().meta({ description: "Target units to master per day" }).optional()
|
|
32058
|
+
}).meta({ id: "CourseGoals", description: "Daily learning goals for a course" });
|
|
32031
32059
|
var CourseMetrics2 = exports_external2.object({
|
|
32032
|
-
totalXp: exports_external2.number().int().positive().optional(),
|
|
32033
|
-
totalLessons: exports_external2.number().int().positive().optional(),
|
|
32034
|
-
totalGrades: exports_external2.number().int().positive().optional()
|
|
32035
|
-
});
|
|
32060
|
+
totalXp: exports_external2.number().int().positive().meta({ description: "Total XP available in the course" }).optional(),
|
|
32061
|
+
totalLessons: exports_external2.number().int().positive().meta({ description: "Total number of lessons/activities" }).optional(),
|
|
32062
|
+
totalGrades: exports_external2.number().int().positive().meta({ description: "Total grade levels covered" }).optional()
|
|
32063
|
+
}).meta({ id: "CourseMetrics", description: "Aggregate metrics for a course" });
|
|
32036
32064
|
var CourseMetadata2 = exports_external2.object({
|
|
32037
32065
|
courseType: CourseType2.optional(),
|
|
32038
|
-
isSupplemental: exports_external2.boolean().optional(),
|
|
32039
|
-
isCustom: exports_external2.boolean().optional(),
|
|
32066
|
+
isSupplemental: exports_external2.boolean().meta({ description: "Whether this is supplemental to a base course" }).optional(),
|
|
32067
|
+
isCustom: exports_external2.boolean().meta({ description: "Whether this is a custom course for an individual student" }).optional(),
|
|
32040
32068
|
publishStatus: PublishStatus2.optional(),
|
|
32041
|
-
contactEmail: exports_external2.email().optional(),
|
|
32042
|
-
primaryApp: exports_external2.string().optional(),
|
|
32069
|
+
contactEmail: exports_external2.email().meta({ description: "Contact email for course issues" }).optional(),
|
|
32070
|
+
primaryApp: exports_external2.string().meta({ description: "Primary application identifier" }).optional(),
|
|
32043
32071
|
goals: CourseGoals2.optional(),
|
|
32044
32072
|
metrics: CourseMetrics2.optional()
|
|
32045
|
-
});
|
|
32073
|
+
}).meta({ id: "CourseMetadata", description: "Course metadata (matches API metadata object)" });
|
|
32046
32074
|
var CourseDefaults2 = exports_external2.object({
|
|
32047
|
-
courseCode: exports_external2.string().optional(),
|
|
32048
|
-
level: exports_external2.string().optional(),
|
|
32075
|
+
courseCode: exports_external2.string().meta({ description: "Course code (e.g., 'MATH101')" }).optional(),
|
|
32076
|
+
level: exports_external2.string().meta({ description: "Course level (e.g., 'AP', 'Honors')" }).optional(),
|
|
32049
32077
|
metadata: CourseMetadata2.optional()
|
|
32078
|
+
}).meta({
|
|
32079
|
+
id: "CourseDefaults",
|
|
32080
|
+
description: "Default properties that apply to all courses unless overridden"
|
|
32050
32081
|
});
|
|
32051
32082
|
var CourseEnvOverrides2 = exports_external2.object({
|
|
32052
|
-
level: exports_external2.string().optional(),
|
|
32053
|
-
sensor: exports_external2.
|
|
32054
|
-
launchUrl: exports_external2.
|
|
32083
|
+
level: exports_external2.string().meta({ description: "Course level for this environment" }).optional(),
|
|
32084
|
+
sensor: exports_external2.url().meta({ description: "Caliper sensor endpoint URL for this environment" }).optional(),
|
|
32085
|
+
launchUrl: exports_external2.url().meta({ description: "LTI launch URL for this environment" }).optional(),
|
|
32055
32086
|
metadata: CourseMetadata2.optional()
|
|
32087
|
+
}).meta({
|
|
32088
|
+
id: "CourseEnvOverrides",
|
|
32089
|
+
description: "Environment-specific course overrides (non-identity fields)"
|
|
32056
32090
|
});
|
|
32057
32091
|
var CourseOverrides2 = exports_external2.object({
|
|
32058
|
-
staging: CourseEnvOverrides2.
|
|
32059
|
-
|
|
32060
|
-
})
|
|
32092
|
+
staging: CourseEnvOverrides2.meta({
|
|
32093
|
+
description: "Overrides for staging environment"
|
|
32094
|
+
}).optional(),
|
|
32095
|
+
production: CourseEnvOverrides2.meta({
|
|
32096
|
+
description: "Overrides for production environment"
|
|
32097
|
+
}).optional()
|
|
32098
|
+
}).meta({ id: "CourseOverrides", description: "Per-environment course overrides" });
|
|
32061
32099
|
var CourseConfig2 = CourseDefaults2.extend({
|
|
32062
|
-
subject: TimebackSubject2,
|
|
32063
|
-
grade: TimebackGrade2.
|
|
32100
|
+
subject: TimebackSubject2.meta({ description: "Subject area for this course" }),
|
|
32101
|
+
grade: TimebackGrade2.meta({
|
|
32102
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
32103
|
+
}).optional(),
|
|
32064
32104
|
ids: CourseIds2.nullable().optional(),
|
|
32065
|
-
sensor: exports_external2.
|
|
32066
|
-
launchUrl: exports_external2.
|
|
32105
|
+
sensor: exports_external2.url().meta({ description: "Caliper sensor endpoint URL for this course" }).optional(),
|
|
32106
|
+
launchUrl: exports_external2.url().meta({ description: "LTI launch URL for this course" }).optional(),
|
|
32067
32107
|
overrides: CourseOverrides2.optional()
|
|
32108
|
+
}).meta({
|
|
32109
|
+
id: "CourseConfig",
|
|
32110
|
+
description: "Configuration for a single course. Must have either grade or courseCode (or both)."
|
|
32068
32111
|
});
|
|
32069
32112
|
var TimebackConfig2 = exports_external2.object({
|
|
32070
|
-
|
|
32071
|
-
|
|
32072
|
-
|
|
32073
|
-
|
|
32074
|
-
|
|
32113
|
+
$schema: exports_external2.string().meta({ description: "JSON Schema reference for editor support" }).optional(),
|
|
32114
|
+
name: exports_external2.string().min(1, "App name is required").meta({ description: "Display name for your app" }),
|
|
32115
|
+
defaults: CourseDefaults2.meta({
|
|
32116
|
+
description: "Default properties applied to all courses"
|
|
32117
|
+
}).optional(),
|
|
32118
|
+
courses: exports_external2.array(CourseConfig2).min(1, "At least one course is required").meta({ description: "Courses available in this app" }),
|
|
32119
|
+
sensor: exports_external2.url().meta({ description: "Default Caliper sensor endpoint URL for all courses" }).optional(),
|
|
32120
|
+
launchUrl: exports_external2.url().meta({ description: "Default LTI launch URL for all courses" }).optional()
|
|
32121
|
+
}).meta({
|
|
32122
|
+
id: "TimebackConfig",
|
|
32123
|
+
title: "Timeback Config",
|
|
32124
|
+
description: "Configuration schema for timeback.config.json files"
|
|
32075
32125
|
}).refine((config22) => {
|
|
32076
32126
|
return config22.courses.every((c) => c.grade !== undefined || c.courseCode !== undefined);
|
|
32077
32127
|
}, {
|
|
@@ -49177,7 +49227,7 @@ var TimebackSubject3 = exports_external3.enum([
|
|
|
49177
49227
|
"Math",
|
|
49178
49228
|
"None",
|
|
49179
49229
|
"Other"
|
|
49180
|
-
]);
|
|
49230
|
+
]).meta({ id: "TimebackSubject", description: "Subject area" });
|
|
49181
49231
|
var TimebackGrade3 = exports_external3.union([
|
|
49182
49232
|
exports_external3.literal(-1),
|
|
49183
49233
|
exports_external3.literal(0),
|
|
@@ -49194,7 +49244,10 @@ var TimebackGrade3 = exports_external3.union([
|
|
|
49194
49244
|
exports_external3.literal(11),
|
|
49195
49245
|
exports_external3.literal(12),
|
|
49196
49246
|
exports_external3.literal(13)
|
|
49197
|
-
])
|
|
49247
|
+
]).meta({
|
|
49248
|
+
id: "TimebackGrade",
|
|
49249
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
49250
|
+
});
|
|
49198
49251
|
var ScoreStatus3 = exports_external3.enum([
|
|
49199
49252
|
"exempt",
|
|
49200
49253
|
"fully graded",
|
|
@@ -49424,62 +49477,84 @@ var CaliperListEventsParams3 = exports_external3.object({
|
|
|
49424
49477
|
actorEmail: exports_external3.email().optional()
|
|
49425
49478
|
}).strict();
|
|
49426
49479
|
var CourseIds3 = exports_external3.object({
|
|
49427
|
-
staging: exports_external3.string().optional(),
|
|
49428
|
-
production: exports_external3.string().optional()
|
|
49429
|
-
});
|
|
49430
|
-
var CourseType3 = exports_external3.enum(["base", "hole-filling", "optional"]);
|
|
49431
|
-
var PublishStatus3 = exports_external3.enum(["draft", "testing", "published", "deactivated"]);
|
|
49480
|
+
staging: exports_external3.string().meta({ description: "Course ID in staging environment" }).optional(),
|
|
49481
|
+
production: exports_external3.string().meta({ description: "Course ID in production environment" }).optional()
|
|
49482
|
+
}).meta({ id: "CourseIds", description: "Environment-specific course IDs (populated by sync)" });
|
|
49483
|
+
var CourseType3 = exports_external3.enum(["base", "hole-filling", "optional"]).meta({ id: "CourseType", description: "Course classification type" });
|
|
49484
|
+
var PublishStatus3 = exports_external3.enum(["draft", "testing", "published", "deactivated"]).meta({ id: "PublishStatus", description: "Course publication status" });
|
|
49432
49485
|
var CourseGoals3 = exports_external3.object({
|
|
49433
|
-
dailyXp: exports_external3.number().int().positive().optional(),
|
|
49434
|
-
dailyLessons: exports_external3.number().int().positive().optional(),
|
|
49435
|
-
dailyActiveMinutes: exports_external3.number().int().positive().optional(),
|
|
49436
|
-
dailyAccuracy: exports_external3.number().int().min(0).max(100).optional(),
|
|
49437
|
-
dailyMasteredUnits: exports_external3.number().int().positive().optional()
|
|
49438
|
-
});
|
|
49486
|
+
dailyXp: exports_external3.number().int().positive().meta({ description: "Target XP to earn per day" }).optional(),
|
|
49487
|
+
dailyLessons: exports_external3.number().int().positive().meta({ description: "Target lessons to complete per day" }).optional(),
|
|
49488
|
+
dailyActiveMinutes: exports_external3.number().int().positive().meta({ description: "Target active learning minutes per day" }).optional(),
|
|
49489
|
+
dailyAccuracy: exports_external3.number().int().min(0).max(100).meta({ description: "Target accuracy percentage (0-100)" }).optional(),
|
|
49490
|
+
dailyMasteredUnits: exports_external3.number().int().positive().meta({ description: "Target units to master per day" }).optional()
|
|
49491
|
+
}).meta({ id: "CourseGoals", description: "Daily learning goals for a course" });
|
|
49439
49492
|
var CourseMetrics3 = exports_external3.object({
|
|
49440
|
-
totalXp: exports_external3.number().int().positive().optional(),
|
|
49441
|
-
totalLessons: exports_external3.number().int().positive().optional(),
|
|
49442
|
-
totalGrades: exports_external3.number().int().positive().optional()
|
|
49443
|
-
});
|
|
49493
|
+
totalXp: exports_external3.number().int().positive().meta({ description: "Total XP available in the course" }).optional(),
|
|
49494
|
+
totalLessons: exports_external3.number().int().positive().meta({ description: "Total number of lessons/activities" }).optional(),
|
|
49495
|
+
totalGrades: exports_external3.number().int().positive().meta({ description: "Total grade levels covered" }).optional()
|
|
49496
|
+
}).meta({ id: "CourseMetrics", description: "Aggregate metrics for a course" });
|
|
49444
49497
|
var CourseMetadata3 = exports_external3.object({
|
|
49445
49498
|
courseType: CourseType3.optional(),
|
|
49446
|
-
isSupplemental: exports_external3.boolean().optional(),
|
|
49447
|
-
isCustom: exports_external3.boolean().optional(),
|
|
49499
|
+
isSupplemental: exports_external3.boolean().meta({ description: "Whether this is supplemental to a base course" }).optional(),
|
|
49500
|
+
isCustom: exports_external3.boolean().meta({ description: "Whether this is a custom course for an individual student" }).optional(),
|
|
49448
49501
|
publishStatus: PublishStatus3.optional(),
|
|
49449
|
-
contactEmail: exports_external3.email().optional(),
|
|
49450
|
-
primaryApp: exports_external3.string().optional(),
|
|
49502
|
+
contactEmail: exports_external3.email().meta({ description: "Contact email for course issues" }).optional(),
|
|
49503
|
+
primaryApp: exports_external3.string().meta({ description: "Primary application identifier" }).optional(),
|
|
49451
49504
|
goals: CourseGoals3.optional(),
|
|
49452
49505
|
metrics: CourseMetrics3.optional()
|
|
49453
|
-
});
|
|
49506
|
+
}).meta({ id: "CourseMetadata", description: "Course metadata (matches API metadata object)" });
|
|
49454
49507
|
var CourseDefaults3 = exports_external3.object({
|
|
49455
|
-
courseCode: exports_external3.string().optional(),
|
|
49456
|
-
level: exports_external3.string().optional(),
|
|
49508
|
+
courseCode: exports_external3.string().meta({ description: "Course code (e.g., 'MATH101')" }).optional(),
|
|
49509
|
+
level: exports_external3.string().meta({ description: "Course level (e.g., 'AP', 'Honors')" }).optional(),
|
|
49457
49510
|
metadata: CourseMetadata3.optional()
|
|
49511
|
+
}).meta({
|
|
49512
|
+
id: "CourseDefaults",
|
|
49513
|
+
description: "Default properties that apply to all courses unless overridden"
|
|
49458
49514
|
});
|
|
49459
49515
|
var CourseEnvOverrides3 = exports_external3.object({
|
|
49460
|
-
level: exports_external3.string().optional(),
|
|
49461
|
-
sensor: exports_external3.
|
|
49462
|
-
launchUrl: exports_external3.
|
|
49516
|
+
level: exports_external3.string().meta({ description: "Course level for this environment" }).optional(),
|
|
49517
|
+
sensor: exports_external3.url().meta({ description: "Caliper sensor endpoint URL for this environment" }).optional(),
|
|
49518
|
+
launchUrl: exports_external3.url().meta({ description: "LTI launch URL for this environment" }).optional(),
|
|
49463
49519
|
metadata: CourseMetadata3.optional()
|
|
49520
|
+
}).meta({
|
|
49521
|
+
id: "CourseEnvOverrides",
|
|
49522
|
+
description: "Environment-specific course overrides (non-identity fields)"
|
|
49464
49523
|
});
|
|
49465
49524
|
var CourseOverrides3 = exports_external3.object({
|
|
49466
|
-
staging: CourseEnvOverrides3.
|
|
49467
|
-
|
|
49468
|
-
})
|
|
49525
|
+
staging: CourseEnvOverrides3.meta({
|
|
49526
|
+
description: "Overrides for staging environment"
|
|
49527
|
+
}).optional(),
|
|
49528
|
+
production: CourseEnvOverrides3.meta({
|
|
49529
|
+
description: "Overrides for production environment"
|
|
49530
|
+
}).optional()
|
|
49531
|
+
}).meta({ id: "CourseOverrides", description: "Per-environment course overrides" });
|
|
49469
49532
|
var CourseConfig3 = CourseDefaults3.extend({
|
|
49470
|
-
subject: TimebackSubject3,
|
|
49471
|
-
grade: TimebackGrade3.
|
|
49533
|
+
subject: TimebackSubject3.meta({ description: "Subject area for this course" }),
|
|
49534
|
+
grade: TimebackGrade3.meta({
|
|
49535
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
49536
|
+
}).optional(),
|
|
49472
49537
|
ids: CourseIds3.nullable().optional(),
|
|
49473
|
-
sensor: exports_external3.
|
|
49474
|
-
launchUrl: exports_external3.
|
|
49538
|
+
sensor: exports_external3.url().meta({ description: "Caliper sensor endpoint URL for this course" }).optional(),
|
|
49539
|
+
launchUrl: exports_external3.url().meta({ description: "LTI launch URL for this course" }).optional(),
|
|
49475
49540
|
overrides: CourseOverrides3.optional()
|
|
49541
|
+
}).meta({
|
|
49542
|
+
id: "CourseConfig",
|
|
49543
|
+
description: "Configuration for a single course. Must have either grade or courseCode (or both)."
|
|
49476
49544
|
});
|
|
49477
49545
|
var TimebackConfig3 = exports_external3.object({
|
|
49478
|
-
|
|
49479
|
-
|
|
49480
|
-
|
|
49481
|
-
|
|
49482
|
-
|
|
49546
|
+
$schema: exports_external3.string().meta({ description: "JSON Schema reference for editor support" }).optional(),
|
|
49547
|
+
name: exports_external3.string().min(1, "App name is required").meta({ description: "Display name for your app" }),
|
|
49548
|
+
defaults: CourseDefaults3.meta({
|
|
49549
|
+
description: "Default properties applied to all courses"
|
|
49550
|
+
}).optional(),
|
|
49551
|
+
courses: exports_external3.array(CourseConfig3).min(1, "At least one course is required").meta({ description: "Courses available in this app" }),
|
|
49552
|
+
sensor: exports_external3.url().meta({ description: "Default Caliper sensor endpoint URL for all courses" }).optional(),
|
|
49553
|
+
launchUrl: exports_external3.url().meta({ description: "Default LTI launch URL for all courses" }).optional()
|
|
49554
|
+
}).meta({
|
|
49555
|
+
id: "TimebackConfig",
|
|
49556
|
+
title: "Timeback Config",
|
|
49557
|
+
description: "Configuration schema for timeback.config.json files"
|
|
49483
49558
|
}).refine((config22) => {
|
|
49484
49559
|
return config22.courses.every((c) => c.grade !== undefined || c.courseCode !== undefined);
|
|
49485
49560
|
}, {
|
|
@@ -66784,7 +66859,7 @@ var TimebackSubject4 = exports_external4.enum([
|
|
|
66784
66859
|
"Math",
|
|
66785
66860
|
"None",
|
|
66786
66861
|
"Other"
|
|
66787
|
-
]);
|
|
66862
|
+
]).meta({ id: "TimebackSubject", description: "Subject area" });
|
|
66788
66863
|
var TimebackGrade4 = exports_external4.union([
|
|
66789
66864
|
exports_external4.literal(-1),
|
|
66790
66865
|
exports_external4.literal(0),
|
|
@@ -66801,7 +66876,10 @@ var TimebackGrade4 = exports_external4.union([
|
|
|
66801
66876
|
exports_external4.literal(11),
|
|
66802
66877
|
exports_external4.literal(12),
|
|
66803
66878
|
exports_external4.literal(13)
|
|
66804
|
-
])
|
|
66879
|
+
]).meta({
|
|
66880
|
+
id: "TimebackGrade",
|
|
66881
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
66882
|
+
});
|
|
66805
66883
|
var ScoreStatus4 = exports_external4.enum([
|
|
66806
66884
|
"exempt",
|
|
66807
66885
|
"fully graded",
|
|
@@ -67031,62 +67109,84 @@ var CaliperListEventsParams4 = exports_external4.object({
|
|
|
67031
67109
|
actorEmail: exports_external4.email().optional()
|
|
67032
67110
|
}).strict();
|
|
67033
67111
|
var CourseIds4 = exports_external4.object({
|
|
67034
|
-
staging: exports_external4.string().optional(),
|
|
67035
|
-
production: exports_external4.string().optional()
|
|
67036
|
-
});
|
|
67037
|
-
var CourseType4 = exports_external4.enum(["base", "hole-filling", "optional"]);
|
|
67038
|
-
var PublishStatus4 = exports_external4.enum(["draft", "testing", "published", "deactivated"]);
|
|
67112
|
+
staging: exports_external4.string().meta({ description: "Course ID in staging environment" }).optional(),
|
|
67113
|
+
production: exports_external4.string().meta({ description: "Course ID in production environment" }).optional()
|
|
67114
|
+
}).meta({ id: "CourseIds", description: "Environment-specific course IDs (populated by sync)" });
|
|
67115
|
+
var CourseType4 = exports_external4.enum(["base", "hole-filling", "optional"]).meta({ id: "CourseType", description: "Course classification type" });
|
|
67116
|
+
var PublishStatus4 = exports_external4.enum(["draft", "testing", "published", "deactivated"]).meta({ id: "PublishStatus", description: "Course publication status" });
|
|
67039
67117
|
var CourseGoals4 = exports_external4.object({
|
|
67040
|
-
dailyXp: exports_external4.number().int().positive().optional(),
|
|
67041
|
-
dailyLessons: exports_external4.number().int().positive().optional(),
|
|
67042
|
-
dailyActiveMinutes: exports_external4.number().int().positive().optional(),
|
|
67043
|
-
dailyAccuracy: exports_external4.number().int().min(0).max(100).optional(),
|
|
67044
|
-
dailyMasteredUnits: exports_external4.number().int().positive().optional()
|
|
67045
|
-
});
|
|
67118
|
+
dailyXp: exports_external4.number().int().positive().meta({ description: "Target XP to earn per day" }).optional(),
|
|
67119
|
+
dailyLessons: exports_external4.number().int().positive().meta({ description: "Target lessons to complete per day" }).optional(),
|
|
67120
|
+
dailyActiveMinutes: exports_external4.number().int().positive().meta({ description: "Target active learning minutes per day" }).optional(),
|
|
67121
|
+
dailyAccuracy: exports_external4.number().int().min(0).max(100).meta({ description: "Target accuracy percentage (0-100)" }).optional(),
|
|
67122
|
+
dailyMasteredUnits: exports_external4.number().int().positive().meta({ description: "Target units to master per day" }).optional()
|
|
67123
|
+
}).meta({ id: "CourseGoals", description: "Daily learning goals for a course" });
|
|
67046
67124
|
var CourseMetrics4 = exports_external4.object({
|
|
67047
|
-
totalXp: exports_external4.number().int().positive().optional(),
|
|
67048
|
-
totalLessons: exports_external4.number().int().positive().optional(),
|
|
67049
|
-
totalGrades: exports_external4.number().int().positive().optional()
|
|
67050
|
-
});
|
|
67125
|
+
totalXp: exports_external4.number().int().positive().meta({ description: "Total XP available in the course" }).optional(),
|
|
67126
|
+
totalLessons: exports_external4.number().int().positive().meta({ description: "Total number of lessons/activities" }).optional(),
|
|
67127
|
+
totalGrades: exports_external4.number().int().positive().meta({ description: "Total grade levels covered" }).optional()
|
|
67128
|
+
}).meta({ id: "CourseMetrics", description: "Aggregate metrics for a course" });
|
|
67051
67129
|
var CourseMetadata4 = exports_external4.object({
|
|
67052
67130
|
courseType: CourseType4.optional(),
|
|
67053
|
-
isSupplemental: exports_external4.boolean().optional(),
|
|
67054
|
-
isCustom: exports_external4.boolean().optional(),
|
|
67131
|
+
isSupplemental: exports_external4.boolean().meta({ description: "Whether this is supplemental to a base course" }).optional(),
|
|
67132
|
+
isCustom: exports_external4.boolean().meta({ description: "Whether this is a custom course for an individual student" }).optional(),
|
|
67055
67133
|
publishStatus: PublishStatus4.optional(),
|
|
67056
|
-
contactEmail: exports_external4.email().optional(),
|
|
67057
|
-
primaryApp: exports_external4.string().optional(),
|
|
67134
|
+
contactEmail: exports_external4.email().meta({ description: "Contact email for course issues" }).optional(),
|
|
67135
|
+
primaryApp: exports_external4.string().meta({ description: "Primary application identifier" }).optional(),
|
|
67058
67136
|
goals: CourseGoals4.optional(),
|
|
67059
67137
|
metrics: CourseMetrics4.optional()
|
|
67060
|
-
});
|
|
67138
|
+
}).meta({ id: "CourseMetadata", description: "Course metadata (matches API metadata object)" });
|
|
67061
67139
|
var CourseDefaults4 = exports_external4.object({
|
|
67062
|
-
courseCode: exports_external4.string().optional(),
|
|
67063
|
-
level: exports_external4.string().optional(),
|
|
67140
|
+
courseCode: exports_external4.string().meta({ description: "Course code (e.g., 'MATH101')" }).optional(),
|
|
67141
|
+
level: exports_external4.string().meta({ description: "Course level (e.g., 'AP', 'Honors')" }).optional(),
|
|
67064
67142
|
metadata: CourseMetadata4.optional()
|
|
67143
|
+
}).meta({
|
|
67144
|
+
id: "CourseDefaults",
|
|
67145
|
+
description: "Default properties that apply to all courses unless overridden"
|
|
67065
67146
|
});
|
|
67066
67147
|
var CourseEnvOverrides4 = exports_external4.object({
|
|
67067
|
-
level: exports_external4.string().optional(),
|
|
67068
|
-
sensor: exports_external4.
|
|
67069
|
-
launchUrl: exports_external4.
|
|
67148
|
+
level: exports_external4.string().meta({ description: "Course level for this environment" }).optional(),
|
|
67149
|
+
sensor: exports_external4.url().meta({ description: "Caliper sensor endpoint URL for this environment" }).optional(),
|
|
67150
|
+
launchUrl: exports_external4.url().meta({ description: "LTI launch URL for this environment" }).optional(),
|
|
67070
67151
|
metadata: CourseMetadata4.optional()
|
|
67152
|
+
}).meta({
|
|
67153
|
+
id: "CourseEnvOverrides",
|
|
67154
|
+
description: "Environment-specific course overrides (non-identity fields)"
|
|
67071
67155
|
});
|
|
67072
67156
|
var CourseOverrides4 = exports_external4.object({
|
|
67073
|
-
staging: CourseEnvOverrides4.
|
|
67074
|
-
|
|
67075
|
-
})
|
|
67157
|
+
staging: CourseEnvOverrides4.meta({
|
|
67158
|
+
description: "Overrides for staging environment"
|
|
67159
|
+
}).optional(),
|
|
67160
|
+
production: CourseEnvOverrides4.meta({
|
|
67161
|
+
description: "Overrides for production environment"
|
|
67162
|
+
}).optional()
|
|
67163
|
+
}).meta({ id: "CourseOverrides", description: "Per-environment course overrides" });
|
|
67076
67164
|
var CourseConfig4 = CourseDefaults4.extend({
|
|
67077
|
-
subject: TimebackSubject4,
|
|
67078
|
-
grade: TimebackGrade4.
|
|
67165
|
+
subject: TimebackSubject4.meta({ description: "Subject area for this course" }),
|
|
67166
|
+
grade: TimebackGrade4.meta({
|
|
67167
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
67168
|
+
}).optional(),
|
|
67079
67169
|
ids: CourseIds4.nullable().optional(),
|
|
67080
|
-
sensor: exports_external4.
|
|
67081
|
-
launchUrl: exports_external4.
|
|
67170
|
+
sensor: exports_external4.url().meta({ description: "Caliper sensor endpoint URL for this course" }).optional(),
|
|
67171
|
+
launchUrl: exports_external4.url().meta({ description: "LTI launch URL for this course" }).optional(),
|
|
67082
67172
|
overrides: CourseOverrides4.optional()
|
|
67173
|
+
}).meta({
|
|
67174
|
+
id: "CourseConfig",
|
|
67175
|
+
description: "Configuration for a single course. Must have either grade or courseCode (or both)."
|
|
67083
67176
|
});
|
|
67084
67177
|
var TimebackConfig4 = exports_external4.object({
|
|
67085
|
-
|
|
67086
|
-
|
|
67087
|
-
|
|
67088
|
-
|
|
67089
|
-
|
|
67178
|
+
$schema: exports_external4.string().meta({ description: "JSON Schema reference for editor support" }).optional(),
|
|
67179
|
+
name: exports_external4.string().min(1, "App name is required").meta({ description: "Display name for your app" }),
|
|
67180
|
+
defaults: CourseDefaults4.meta({
|
|
67181
|
+
description: "Default properties applied to all courses"
|
|
67182
|
+
}).optional(),
|
|
67183
|
+
courses: exports_external4.array(CourseConfig4).min(1, "At least one course is required").meta({ description: "Courses available in this app" }),
|
|
67184
|
+
sensor: exports_external4.url().meta({ description: "Default Caliper sensor endpoint URL for all courses" }).optional(),
|
|
67185
|
+
launchUrl: exports_external4.url().meta({ description: "Default LTI launch URL for all courses" }).optional()
|
|
67186
|
+
}).meta({
|
|
67187
|
+
id: "TimebackConfig",
|
|
67188
|
+
title: "Timeback Config",
|
|
67189
|
+
description: "Configuration schema for timeback.config.json files"
|
|
67090
67190
|
}).refine((config22) => {
|
|
67091
67191
|
return config22.courses.every((c) => c.grade !== undefined || c.courseCode !== undefined);
|
|
67092
67192
|
}, {
|
|
@@ -83421,7 +83521,7 @@ var TimebackSubject5 = exports_external5.enum([
|
|
|
83421
83521
|
"Math",
|
|
83422
83522
|
"None",
|
|
83423
83523
|
"Other"
|
|
83424
|
-
]);
|
|
83524
|
+
]).meta({ id: "TimebackSubject", description: "Subject area" });
|
|
83425
83525
|
var TimebackGrade5 = exports_external5.union([
|
|
83426
83526
|
exports_external5.literal(-1),
|
|
83427
83527
|
exports_external5.literal(0),
|
|
@@ -83438,7 +83538,10 @@ var TimebackGrade5 = exports_external5.union([
|
|
|
83438
83538
|
exports_external5.literal(11),
|
|
83439
83539
|
exports_external5.literal(12),
|
|
83440
83540
|
exports_external5.literal(13)
|
|
83441
|
-
])
|
|
83541
|
+
]).meta({
|
|
83542
|
+
id: "TimebackGrade",
|
|
83543
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
83544
|
+
});
|
|
83442
83545
|
var ScoreStatus5 = exports_external5.enum([
|
|
83443
83546
|
"exempt",
|
|
83444
83547
|
"fully graded",
|
|
@@ -83668,62 +83771,84 @@ var CaliperListEventsParams5 = exports_external5.object({
|
|
|
83668
83771
|
actorEmail: exports_external5.email().optional()
|
|
83669
83772
|
}).strict();
|
|
83670
83773
|
var CourseIds5 = exports_external5.object({
|
|
83671
|
-
staging: exports_external5.string().optional(),
|
|
83672
|
-
production: exports_external5.string().optional()
|
|
83673
|
-
});
|
|
83674
|
-
var CourseType5 = exports_external5.enum(["base", "hole-filling", "optional"]);
|
|
83675
|
-
var PublishStatus5 = exports_external5.enum(["draft", "testing", "published", "deactivated"]);
|
|
83774
|
+
staging: exports_external5.string().meta({ description: "Course ID in staging environment" }).optional(),
|
|
83775
|
+
production: exports_external5.string().meta({ description: "Course ID in production environment" }).optional()
|
|
83776
|
+
}).meta({ id: "CourseIds", description: "Environment-specific course IDs (populated by sync)" });
|
|
83777
|
+
var CourseType5 = exports_external5.enum(["base", "hole-filling", "optional"]).meta({ id: "CourseType", description: "Course classification type" });
|
|
83778
|
+
var PublishStatus5 = exports_external5.enum(["draft", "testing", "published", "deactivated"]).meta({ id: "PublishStatus", description: "Course publication status" });
|
|
83676
83779
|
var CourseGoals5 = exports_external5.object({
|
|
83677
|
-
dailyXp: exports_external5.number().int().positive().optional(),
|
|
83678
|
-
dailyLessons: exports_external5.number().int().positive().optional(),
|
|
83679
|
-
dailyActiveMinutes: exports_external5.number().int().positive().optional(),
|
|
83680
|
-
dailyAccuracy: exports_external5.number().int().min(0).max(100).optional(),
|
|
83681
|
-
dailyMasteredUnits: exports_external5.number().int().positive().optional()
|
|
83682
|
-
});
|
|
83780
|
+
dailyXp: exports_external5.number().int().positive().meta({ description: "Target XP to earn per day" }).optional(),
|
|
83781
|
+
dailyLessons: exports_external5.number().int().positive().meta({ description: "Target lessons to complete per day" }).optional(),
|
|
83782
|
+
dailyActiveMinutes: exports_external5.number().int().positive().meta({ description: "Target active learning minutes per day" }).optional(),
|
|
83783
|
+
dailyAccuracy: exports_external5.number().int().min(0).max(100).meta({ description: "Target accuracy percentage (0-100)" }).optional(),
|
|
83784
|
+
dailyMasteredUnits: exports_external5.number().int().positive().meta({ description: "Target units to master per day" }).optional()
|
|
83785
|
+
}).meta({ id: "CourseGoals", description: "Daily learning goals for a course" });
|
|
83683
83786
|
var CourseMetrics5 = exports_external5.object({
|
|
83684
|
-
totalXp: exports_external5.number().int().positive().optional(),
|
|
83685
|
-
totalLessons: exports_external5.number().int().positive().optional(),
|
|
83686
|
-
totalGrades: exports_external5.number().int().positive().optional()
|
|
83687
|
-
});
|
|
83787
|
+
totalXp: exports_external5.number().int().positive().meta({ description: "Total XP available in the course" }).optional(),
|
|
83788
|
+
totalLessons: exports_external5.number().int().positive().meta({ description: "Total number of lessons/activities" }).optional(),
|
|
83789
|
+
totalGrades: exports_external5.number().int().positive().meta({ description: "Total grade levels covered" }).optional()
|
|
83790
|
+
}).meta({ id: "CourseMetrics", description: "Aggregate metrics for a course" });
|
|
83688
83791
|
var CourseMetadata5 = exports_external5.object({
|
|
83689
83792
|
courseType: CourseType5.optional(),
|
|
83690
|
-
isSupplemental: exports_external5.boolean().optional(),
|
|
83691
|
-
isCustom: exports_external5.boolean().optional(),
|
|
83793
|
+
isSupplemental: exports_external5.boolean().meta({ description: "Whether this is supplemental to a base course" }).optional(),
|
|
83794
|
+
isCustom: exports_external5.boolean().meta({ description: "Whether this is a custom course for an individual student" }).optional(),
|
|
83692
83795
|
publishStatus: PublishStatus5.optional(),
|
|
83693
|
-
contactEmail: exports_external5.email().optional(),
|
|
83694
|
-
primaryApp: exports_external5.string().optional(),
|
|
83796
|
+
contactEmail: exports_external5.email().meta({ description: "Contact email for course issues" }).optional(),
|
|
83797
|
+
primaryApp: exports_external5.string().meta({ description: "Primary application identifier" }).optional(),
|
|
83695
83798
|
goals: CourseGoals5.optional(),
|
|
83696
83799
|
metrics: CourseMetrics5.optional()
|
|
83697
|
-
});
|
|
83800
|
+
}).meta({ id: "CourseMetadata", description: "Course metadata (matches API metadata object)" });
|
|
83698
83801
|
var CourseDefaults5 = exports_external5.object({
|
|
83699
|
-
courseCode: exports_external5.string().optional(),
|
|
83700
|
-
level: exports_external5.string().optional(),
|
|
83802
|
+
courseCode: exports_external5.string().meta({ description: "Course code (e.g., 'MATH101')" }).optional(),
|
|
83803
|
+
level: exports_external5.string().meta({ description: "Course level (e.g., 'AP', 'Honors')" }).optional(),
|
|
83701
83804
|
metadata: CourseMetadata5.optional()
|
|
83805
|
+
}).meta({
|
|
83806
|
+
id: "CourseDefaults",
|
|
83807
|
+
description: "Default properties that apply to all courses unless overridden"
|
|
83702
83808
|
});
|
|
83703
83809
|
var CourseEnvOverrides5 = exports_external5.object({
|
|
83704
|
-
level: exports_external5.string().optional(),
|
|
83705
|
-
sensor: exports_external5.
|
|
83706
|
-
launchUrl: exports_external5.
|
|
83810
|
+
level: exports_external5.string().meta({ description: "Course level for this environment" }).optional(),
|
|
83811
|
+
sensor: exports_external5.url().meta({ description: "Caliper sensor endpoint URL for this environment" }).optional(),
|
|
83812
|
+
launchUrl: exports_external5.url().meta({ description: "LTI launch URL for this environment" }).optional(),
|
|
83707
83813
|
metadata: CourseMetadata5.optional()
|
|
83814
|
+
}).meta({
|
|
83815
|
+
id: "CourseEnvOverrides",
|
|
83816
|
+
description: "Environment-specific course overrides (non-identity fields)"
|
|
83708
83817
|
});
|
|
83709
83818
|
var CourseOverrides5 = exports_external5.object({
|
|
83710
|
-
staging: CourseEnvOverrides5.
|
|
83711
|
-
|
|
83712
|
-
})
|
|
83819
|
+
staging: CourseEnvOverrides5.meta({
|
|
83820
|
+
description: "Overrides for staging environment"
|
|
83821
|
+
}).optional(),
|
|
83822
|
+
production: CourseEnvOverrides5.meta({
|
|
83823
|
+
description: "Overrides for production environment"
|
|
83824
|
+
}).optional()
|
|
83825
|
+
}).meta({ id: "CourseOverrides", description: "Per-environment course overrides" });
|
|
83713
83826
|
var CourseConfig5 = CourseDefaults5.extend({
|
|
83714
|
-
subject: TimebackSubject5,
|
|
83715
|
-
grade: TimebackGrade5.
|
|
83827
|
+
subject: TimebackSubject5.meta({ description: "Subject area for this course" }),
|
|
83828
|
+
grade: TimebackGrade5.meta({
|
|
83829
|
+
description: "Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"
|
|
83830
|
+
}).optional(),
|
|
83716
83831
|
ids: CourseIds5.nullable().optional(),
|
|
83717
|
-
sensor: exports_external5.
|
|
83718
|
-
launchUrl: exports_external5.
|
|
83832
|
+
sensor: exports_external5.url().meta({ description: "Caliper sensor endpoint URL for this course" }).optional(),
|
|
83833
|
+
launchUrl: exports_external5.url().meta({ description: "LTI launch URL for this course" }).optional(),
|
|
83719
83834
|
overrides: CourseOverrides5.optional()
|
|
83835
|
+
}).meta({
|
|
83836
|
+
id: "CourseConfig",
|
|
83837
|
+
description: "Configuration for a single course. Must have either grade or courseCode (or both)."
|
|
83720
83838
|
});
|
|
83721
83839
|
var TimebackConfig5 = exports_external5.object({
|
|
83722
|
-
|
|
83723
|
-
|
|
83724
|
-
|
|
83725
|
-
|
|
83726
|
-
|
|
83840
|
+
$schema: exports_external5.string().meta({ description: "JSON Schema reference for editor support" }).optional(),
|
|
83841
|
+
name: exports_external5.string().min(1, "App name is required").meta({ description: "Display name for your app" }),
|
|
83842
|
+
defaults: CourseDefaults5.meta({
|
|
83843
|
+
description: "Default properties applied to all courses"
|
|
83844
|
+
}).optional(),
|
|
83845
|
+
courses: exports_external5.array(CourseConfig5).min(1, "At least one course is required").meta({ description: "Courses available in this app" }),
|
|
83846
|
+
sensor: exports_external5.url().meta({ description: "Default Caliper sensor endpoint URL for all courses" }).optional(),
|
|
83847
|
+
launchUrl: exports_external5.url().meta({ description: "Default LTI launch URL for all courses" }).optional()
|
|
83848
|
+
}).meta({
|
|
83849
|
+
id: "TimebackConfig",
|
|
83850
|
+
title: "Timeback Config",
|
|
83851
|
+
description: "Configuration schema for timeback.config.json files"
|
|
83727
83852
|
}).refine((config22) => {
|
|
83728
83853
|
return config22.courses.every((c) => c.grade !== undefined || c.courseCode !== undefined);
|
|
83729
83854
|
}, {
|