timeback-studio 0.1.2 → 0.1.3
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/dist/bin.js +522 -52
- package/dist/cli/commands/serve/config.d.ts +9 -3
- package/dist/cli/commands/serve/config.d.ts.map +1 -1
- package/dist/cli/commands/serve/index.d.ts.map +1 -1
- package/dist/cli/lib/onboarding/import.d.ts.map +1 -1
- package/dist/cli/lib/onboarding/types.d.ts +1 -1
- package/dist/cli/lib/onboarding/types.d.ts.map +1 -1
- package/dist/config/types.d.ts +1 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/index.js +522 -52
- package/dist/server/controllers/status.d.ts +57 -2
- package/dist/server/controllers/status.d.ts.map +1 -1
- package/dist/server/lib/middleware.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/bin.js
CHANGED
|
@@ -16886,7 +16886,7 @@ async function loadCredentials(environment) {
|
|
|
16886
16886
|
}
|
|
16887
16887
|
// ../internal/cli-infra/src/ui.ts
|
|
16888
16888
|
function intro(title) {
|
|
16889
|
-
console.log();
|
|
16889
|
+
console.log("");
|
|
16890
16890
|
Ie(bgCyan(black(` ${title} `)));
|
|
16891
16891
|
}
|
|
16892
16892
|
var outro = {
|
|
@@ -16929,7 +16929,7 @@ var playcademyParser = {
|
|
|
16929
16929
|
import { existsSync } from "node:fs";
|
|
16930
16930
|
import { readFile as readFile2 } from "node:fs/promises";
|
|
16931
16931
|
import { basename, relative, resolve } from "node:path";
|
|
16932
|
-
import {
|
|
16932
|
+
import { pathToFileURL } from "node:url";
|
|
16933
16933
|
// ../types/src/zod/primitives.ts
|
|
16934
16934
|
var IsoDateTimeRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/;
|
|
16935
16935
|
var IsoDateTimeString = exports_external.string().min(1).regex(IsoDateTimeRegex, "must be a valid ISO 8601 datetime");
|
|
@@ -16989,6 +16989,47 @@ var OneRosterUserRole = exports_external.enum([
|
|
|
16989
16989
|
"teacher"
|
|
16990
16990
|
]);
|
|
16991
16991
|
var EnrollmentRole = exports_external.enum(["administrator", "proctor", "student", "teacher"]);
|
|
16992
|
+
var ResourceType = exports_external.enum([
|
|
16993
|
+
"qti",
|
|
16994
|
+
"text",
|
|
16995
|
+
"audio",
|
|
16996
|
+
"video",
|
|
16997
|
+
"interactive",
|
|
16998
|
+
"visual",
|
|
16999
|
+
"course-material",
|
|
17000
|
+
"assessment-bank"
|
|
17001
|
+
]);
|
|
17002
|
+
var QtiSubType = exports_external.enum(["qti-test", "qti-question", "qti-stimulus", "qti-test-bank"]);
|
|
17003
|
+
var CourseMaterialSubType = exports_external.enum(["unit", "course", "resource-collection"]);
|
|
17004
|
+
var QuestionType = exports_external.enum([
|
|
17005
|
+
"choice",
|
|
17006
|
+
"order",
|
|
17007
|
+
"associate",
|
|
17008
|
+
"match",
|
|
17009
|
+
"hotspot",
|
|
17010
|
+
"hottext",
|
|
17011
|
+
"select-point",
|
|
17012
|
+
"graphic-order",
|
|
17013
|
+
"graphic-associate",
|
|
17014
|
+
"graphic-gap-match",
|
|
17015
|
+
"text-entry",
|
|
17016
|
+
"extended-text",
|
|
17017
|
+
"inline-choice",
|
|
17018
|
+
"upload",
|
|
17019
|
+
"slider",
|
|
17020
|
+
"drawing",
|
|
17021
|
+
"media",
|
|
17022
|
+
"custom"
|
|
17023
|
+
]);
|
|
17024
|
+
var Difficulty = exports_external.enum(["easy", "medium", "hard"]);
|
|
17025
|
+
var LearningObjectiveSetSchema = exports_external.array(exports_external.object({
|
|
17026
|
+
source: exports_external.string(),
|
|
17027
|
+
learningObjectiveIds: exports_external.array(exports_external.string())
|
|
17028
|
+
}));
|
|
17029
|
+
var FastFailConfigSchema = exports_external.object({
|
|
17030
|
+
consecutive_failures: exports_external.number().int().min(1).optional(),
|
|
17031
|
+
stagnation_limit: exports_external.number().int().min(1).optional()
|
|
17032
|
+
}).optional();
|
|
16992
17033
|
var LessonType = exports_external.enum(["powerpath-100", "quiz", "test-out", "placement", "unit-test", "alpha-read-article"]).nullable();
|
|
16993
17034
|
var IMSErrorResponse = exports_external.object({
|
|
16994
17035
|
imsx_codeMajor: exports_external.enum(["failure", "success"]),
|
|
@@ -17065,7 +17106,11 @@ var ActivityCompletedInput = exports_external.object({
|
|
|
17065
17106
|
eventTime: IsoDateTimeString.optional(),
|
|
17066
17107
|
metricsId: exports_external.string().optional(),
|
|
17067
17108
|
id: exports_external.string().optional(),
|
|
17068
|
-
extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
|
|
17109
|
+
extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
|
|
17110
|
+
attempt: exports_external.number().int().min(1).optional(),
|
|
17111
|
+
generatedExtensions: exports_external.object({
|
|
17112
|
+
pctCompleteApp: exports_external.number().optional()
|
|
17113
|
+
}).loose().optional()
|
|
17069
17114
|
}).strict();
|
|
17070
17115
|
var TimeSpentInput = exports_external.object({
|
|
17071
17116
|
actor: TimebackUser,
|
|
@@ -17181,16 +17226,59 @@ var CourseDefaults = exports_external.object({
|
|
|
17181
17226
|
level: exports_external.string().optional(),
|
|
17182
17227
|
metadata: CourseMetadata.optional()
|
|
17183
17228
|
});
|
|
17229
|
+
var CourseEnvOverrides = exports_external.object({
|
|
17230
|
+
level: exports_external.string().optional(),
|
|
17231
|
+
sensor: exports_external.string().url().optional(),
|
|
17232
|
+
launchUrl: exports_external.string().url().optional(),
|
|
17233
|
+
metadata: CourseMetadata.optional()
|
|
17234
|
+
});
|
|
17235
|
+
var CourseOverrides = exports_external.object({
|
|
17236
|
+
staging: CourseEnvOverrides.optional(),
|
|
17237
|
+
production: CourseEnvOverrides.optional()
|
|
17238
|
+
});
|
|
17184
17239
|
var CourseConfig = CourseDefaults.extend({
|
|
17185
17240
|
subject: TimebackSubject,
|
|
17186
|
-
grade: TimebackGrade,
|
|
17187
|
-
ids: CourseIds.nullable().optional()
|
|
17241
|
+
grade: TimebackGrade.optional(),
|
|
17242
|
+
ids: CourseIds.nullable().optional(),
|
|
17243
|
+
sensor: exports_external.string().url().optional(),
|
|
17244
|
+
launchUrl: exports_external.string().url().optional(),
|
|
17245
|
+
overrides: CourseOverrides.optional()
|
|
17188
17246
|
});
|
|
17189
17247
|
var TimebackConfig = exports_external.object({
|
|
17190
17248
|
name: exports_external.string().min(1, "App name is required"),
|
|
17191
17249
|
defaults: CourseDefaults.optional(),
|
|
17192
17250
|
courses: exports_external.array(CourseConfig).min(1, "At least one course is required"),
|
|
17193
|
-
|
|
17251
|
+
sensor: exports_external.string().url().optional(),
|
|
17252
|
+
launchUrl: exports_external.string().url().optional()
|
|
17253
|
+
}).refine((config2) => {
|
|
17254
|
+
return config2.courses.every((c) => c.grade !== undefined || c.courseCode !== undefined);
|
|
17255
|
+
}, {
|
|
17256
|
+
message: "Each course must have either a grade or a courseCode",
|
|
17257
|
+
path: ["courses"]
|
|
17258
|
+
}).refine((config2) => {
|
|
17259
|
+
const withGrade = config2.courses.filter((c) => c.grade !== undefined);
|
|
17260
|
+
const keys = withGrade.map((c) => `${c.subject}:${c.grade}`);
|
|
17261
|
+
return new Set(keys).size === keys.length;
|
|
17262
|
+
}, {
|
|
17263
|
+
message: "Duplicate (subject, grade) pair found; each must be unique",
|
|
17264
|
+
path: ["courses"]
|
|
17265
|
+
}).refine((config2) => {
|
|
17266
|
+
const withCode = config2.courses.filter((c) => c.courseCode !== undefined);
|
|
17267
|
+
const codes = withCode.map((c) => c.courseCode);
|
|
17268
|
+
return new Set(codes).size === codes.length;
|
|
17269
|
+
}, {
|
|
17270
|
+
message: "Duplicate courseCode found; each must be unique",
|
|
17271
|
+
path: ["courses"]
|
|
17272
|
+
}).refine((config2) => {
|
|
17273
|
+
return config2.courses.every((c) => c.sensor !== undefined || config2.sensor !== undefined);
|
|
17274
|
+
}, {
|
|
17275
|
+
message: "Each course must have an effective sensor; set a top-level `sensor` or per-course `sensor`",
|
|
17276
|
+
path: ["courses"]
|
|
17277
|
+
}).refine((config2) => {
|
|
17278
|
+
return config2.courses.every((c) => c.launchUrl !== undefined || config2.launchUrl !== undefined);
|
|
17279
|
+
}, {
|
|
17280
|
+
message: "Each course must have an effective launchUrl; set a top-level `launchUrl` or per-course `launchUrl`",
|
|
17281
|
+
path: ["courses"]
|
|
17194
17282
|
});
|
|
17195
17283
|
// ../types/src/zod/edubridge.ts
|
|
17196
17284
|
var EdubridgeDateString = exports_external.union([IsoDateString, IsoDateTimeString]);
|
|
@@ -17441,20 +17529,45 @@ var OneRosterScoreScaleCreateInput = exports_external.object({
|
|
|
17441
17529
|
}).strict();
|
|
17442
17530
|
var OneRosterAssessmentLineItemCreateInput = exports_external.object({
|
|
17443
17531
|
sourcedId: NonEmptyString2.optional(),
|
|
17532
|
+
status: Status.optional(),
|
|
17533
|
+
dateLastModified: IsoDateTimeString.optional(),
|
|
17444
17534
|
title: NonEmptyString2.describe("title must be a non-empty string"),
|
|
17445
|
-
|
|
17446
|
-
|
|
17447
|
-
|
|
17448
|
-
|
|
17449
|
-
|
|
17450
|
-
|
|
17535
|
+
description: exports_external.string().nullable().optional(),
|
|
17536
|
+
class: Ref.nullable().optional(),
|
|
17537
|
+
parentAssessmentLineItem: Ref.nullable().optional(),
|
|
17538
|
+
scoreScale: Ref.nullable().optional(),
|
|
17539
|
+
resultValueMin: exports_external.number().nullable().optional(),
|
|
17540
|
+
resultValueMax: exports_external.number().nullable().optional(),
|
|
17541
|
+
component: Ref.nullable().optional(),
|
|
17542
|
+
componentResource: Ref.nullable().optional(),
|
|
17543
|
+
learningObjectiveSet: exports_external.array(exports_external.object({
|
|
17544
|
+
source: exports_external.string(),
|
|
17545
|
+
learningObjectiveIds: exports_external.array(exports_external.string())
|
|
17546
|
+
})).optional().nullable(),
|
|
17547
|
+
course: Ref.nullable().optional(),
|
|
17451
17548
|
metadata: Metadata
|
|
17452
17549
|
}).strict();
|
|
17550
|
+
var LearningObjectiveResult = exports_external.object({
|
|
17551
|
+
learningObjectiveId: exports_external.string(),
|
|
17552
|
+
score: exports_external.number().optional(),
|
|
17553
|
+
textScore: exports_external.string().optional()
|
|
17554
|
+
});
|
|
17555
|
+
var LearningObjectiveScoreSetSchema = exports_external.array(exports_external.object({
|
|
17556
|
+
source: exports_external.string(),
|
|
17557
|
+
learningObjectiveResults: exports_external.array(LearningObjectiveResult)
|
|
17558
|
+
}));
|
|
17453
17559
|
var OneRosterAssessmentResultCreateInput = exports_external.object({
|
|
17454
17560
|
sourcedId: NonEmptyString2.optional(),
|
|
17455
|
-
|
|
17561
|
+
status: Status.optional(),
|
|
17562
|
+
dateLastModified: IsoDateTimeString.optional(),
|
|
17563
|
+
metadata: Metadata,
|
|
17564
|
+
assessmentLineItem: Ref,
|
|
17456
17565
|
student: Ref,
|
|
17457
|
-
|
|
17566
|
+
score: exports_external.number().nullable().optional(),
|
|
17567
|
+
textScore: exports_external.string().nullable().optional(),
|
|
17568
|
+
scoreDate: exports_external.string().datetime(),
|
|
17569
|
+
scoreScale: Ref.nullable().optional(),
|
|
17570
|
+
scorePercentile: exports_external.number().nullable().optional(),
|
|
17458
17571
|
scoreStatus: exports_external.enum([
|
|
17459
17572
|
"exempt",
|
|
17460
17573
|
"fully graded",
|
|
@@ -17462,9 +17575,12 @@ var OneRosterAssessmentResultCreateInput = exports_external.object({
|
|
|
17462
17575
|
"partially graded",
|
|
17463
17576
|
"submitted"
|
|
17464
17577
|
]),
|
|
17465
|
-
|
|
17466
|
-
|
|
17467
|
-
|
|
17578
|
+
comment: exports_external.string().nullable().optional(),
|
|
17579
|
+
learningObjectiveSet: LearningObjectiveScoreSetSchema.nullable().optional(),
|
|
17580
|
+
inProgress: exports_external.string().nullable().optional(),
|
|
17581
|
+
incomplete: exports_external.string().nullable().optional(),
|
|
17582
|
+
late: exports_external.string().nullable().optional(),
|
|
17583
|
+
missing: exports_external.string().nullable().optional()
|
|
17468
17584
|
}).strict();
|
|
17469
17585
|
var OneRosterOrgCreateInput = exports_external.object({
|
|
17470
17586
|
sourcedId: NonEmptyString2.optional(),
|
|
@@ -17532,6 +17648,75 @@ var OneRosterCredentialInput = exports_external.object({
|
|
|
17532
17648
|
var OneRosterDemographicsCreateInput = exports_external.object({
|
|
17533
17649
|
sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string")
|
|
17534
17650
|
}).loose();
|
|
17651
|
+
var CommonResourceMetadataSchema = exports_external.object({
|
|
17652
|
+
type: ResourceType,
|
|
17653
|
+
subject: TimebackSubject.nullish(),
|
|
17654
|
+
grades: exports_external.array(TimebackGrade).nullish(),
|
|
17655
|
+
language: exports_external.string().nullish(),
|
|
17656
|
+
xp: exports_external.number().nullish(),
|
|
17657
|
+
url: exports_external.url().nullish(),
|
|
17658
|
+
keywords: exports_external.array(exports_external.string()).nullish(),
|
|
17659
|
+
learningObjectiveSet: LearningObjectiveSetSchema.nullish(),
|
|
17660
|
+
lessonType: exports_external.string().nullish()
|
|
17661
|
+
}).passthrough();
|
|
17662
|
+
var QtiMetadataSchema = CommonResourceMetadataSchema.extend({
|
|
17663
|
+
type: exports_external.literal("qti"),
|
|
17664
|
+
subType: QtiSubType,
|
|
17665
|
+
questionType: QuestionType.optional(),
|
|
17666
|
+
difficulty: Difficulty.optional()
|
|
17667
|
+
});
|
|
17668
|
+
var TextMetadataSchema = CommonResourceMetadataSchema.extend({
|
|
17669
|
+
type: exports_external.literal("text"),
|
|
17670
|
+
format: exports_external.string(),
|
|
17671
|
+
author: exports_external.string().optional(),
|
|
17672
|
+
pageCount: exports_external.number().optional()
|
|
17673
|
+
});
|
|
17674
|
+
var AudioMetadataSchema = CommonResourceMetadataSchema.extend({
|
|
17675
|
+
type: exports_external.literal("audio"),
|
|
17676
|
+
duration: exports_external.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),
|
|
17677
|
+
format: exports_external.string(),
|
|
17678
|
+
speaker: exports_external.string().optional()
|
|
17679
|
+
});
|
|
17680
|
+
var VideoMetadataSchema = CommonResourceMetadataSchema.extend({
|
|
17681
|
+
type: exports_external.literal("video"),
|
|
17682
|
+
duration: exports_external.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),
|
|
17683
|
+
captionsAvailable: exports_external.boolean().optional(),
|
|
17684
|
+
format: exports_external.string()
|
|
17685
|
+
});
|
|
17686
|
+
var InteractiveMetadataSchema = CommonResourceMetadataSchema.extend({
|
|
17687
|
+
type: exports_external.literal("interactive"),
|
|
17688
|
+
launchUrl: exports_external.url().optional(),
|
|
17689
|
+
toolProvider: exports_external.string().optional(),
|
|
17690
|
+
instructionalMethod: exports_external.string().optional(),
|
|
17691
|
+
courseIdOnFail: exports_external.string().nullable().optional(),
|
|
17692
|
+
fail_fast: FastFailConfigSchema
|
|
17693
|
+
});
|
|
17694
|
+
var VisualMetadataSchema = CommonResourceMetadataSchema.extend({
|
|
17695
|
+
type: exports_external.literal("visual"),
|
|
17696
|
+
format: exports_external.string(),
|
|
17697
|
+
resolution: exports_external.string().optional()
|
|
17698
|
+
});
|
|
17699
|
+
var CourseMaterialMetadataSchema = CommonResourceMetadataSchema.extend({
|
|
17700
|
+
type: exports_external.literal("course-material"),
|
|
17701
|
+
subType: CourseMaterialSubType,
|
|
17702
|
+
author: exports_external.string().optional(),
|
|
17703
|
+
format: exports_external.string(),
|
|
17704
|
+
instructionalMethod: exports_external.string().optional()
|
|
17705
|
+
});
|
|
17706
|
+
var AssessmentBankMetadataSchema = CommonResourceMetadataSchema.extend({
|
|
17707
|
+
type: exports_external.literal("assessment-bank"),
|
|
17708
|
+
resources: exports_external.array(exports_external.string())
|
|
17709
|
+
});
|
|
17710
|
+
var ResourceMetadataSchema = exports_external.discriminatedUnion("type", [
|
|
17711
|
+
QtiMetadataSchema,
|
|
17712
|
+
TextMetadataSchema,
|
|
17713
|
+
AudioMetadataSchema,
|
|
17714
|
+
VideoMetadataSchema,
|
|
17715
|
+
InteractiveMetadataSchema,
|
|
17716
|
+
VisualMetadataSchema,
|
|
17717
|
+
CourseMaterialMetadataSchema,
|
|
17718
|
+
AssessmentBankMetadataSchema
|
|
17719
|
+
]);
|
|
17535
17720
|
var OneRosterResourceCreateInput = exports_external.object({
|
|
17536
17721
|
sourcedId: NonEmptyString2.optional(),
|
|
17537
17722
|
title: NonEmptyString2.describe("title must be a non-empty string"),
|
|
@@ -17541,7 +17726,7 @@ var OneRosterResourceCreateInput = exports_external.object({
|
|
|
17541
17726
|
vendorId: exports_external.string().optional(),
|
|
17542
17727
|
applicationId: exports_external.string().optional(),
|
|
17543
17728
|
status: Status.optional(),
|
|
17544
|
-
metadata:
|
|
17729
|
+
metadata: ResourceMetadataSchema.nullable().optional()
|
|
17545
17730
|
}).strict();
|
|
17546
17731
|
var CourseStructureItem = exports_external.object({
|
|
17547
17732
|
url: NonEmptyString2.describe("courseStructure.url must be a non-empty string"),
|
|
@@ -17566,6 +17751,268 @@ var OneRosterBulkResultItem = exports_external.object({
|
|
|
17566
17751
|
student: Ref
|
|
17567
17752
|
}).loose();
|
|
17568
17753
|
var OneRosterBulkResultsInput = exports_external.array(OneRosterBulkResultItem).min(1, "results must have at least one item");
|
|
17754
|
+
// ../types/src/zod/powerpath.ts
|
|
17755
|
+
var NonEmptyString3 = exports_external.string().trim().min(1);
|
|
17756
|
+
var ToolProvider = exports_external.enum(["edulastic", "mastery-track"]);
|
|
17757
|
+
var LessonTypeRequired = exports_external.enum([
|
|
17758
|
+
"powerpath-100",
|
|
17759
|
+
"quiz",
|
|
17760
|
+
"test-out",
|
|
17761
|
+
"placement",
|
|
17762
|
+
"unit-test",
|
|
17763
|
+
"alpha-read-article"
|
|
17764
|
+
]);
|
|
17765
|
+
var GradeArray = exports_external.array(TimebackGrade);
|
|
17766
|
+
var ResourceMetadata = exports_external.record(exports_external.string(), exports_external.unknown()).optional();
|
|
17767
|
+
var ExternalTestBase = exports_external.object({
|
|
17768
|
+
courseId: NonEmptyString3,
|
|
17769
|
+
lessonTitle: NonEmptyString3.optional(),
|
|
17770
|
+
launchUrl: exports_external.url().optional(),
|
|
17771
|
+
toolProvider: ToolProvider,
|
|
17772
|
+
unitTitle: NonEmptyString3.optional(),
|
|
17773
|
+
courseComponentSourcedId: NonEmptyString3.optional(),
|
|
17774
|
+
vendorId: NonEmptyString3.optional(),
|
|
17775
|
+
description: NonEmptyString3.optional(),
|
|
17776
|
+
resourceMetadata: ResourceMetadata.nullable().optional(),
|
|
17777
|
+
grades: GradeArray
|
|
17778
|
+
});
|
|
17779
|
+
var ExternalTestOut = ExternalTestBase.extend({
|
|
17780
|
+
lessonType: exports_external.literal("test-out"),
|
|
17781
|
+
xp: exports_external.number()
|
|
17782
|
+
});
|
|
17783
|
+
var ExternalPlacement = ExternalTestBase.extend({
|
|
17784
|
+
lessonType: exports_external.literal("placement"),
|
|
17785
|
+
courseIdOnFail: NonEmptyString3.optional(),
|
|
17786
|
+
xp: exports_external.number().optional()
|
|
17787
|
+
});
|
|
17788
|
+
var InternalTestBase = exports_external.object({
|
|
17789
|
+
courseId: NonEmptyString3,
|
|
17790
|
+
lessonType: LessonTypeRequired,
|
|
17791
|
+
lessonTitle: NonEmptyString3.optional(),
|
|
17792
|
+
unitTitle: NonEmptyString3.optional(),
|
|
17793
|
+
courseComponentSourcedId: NonEmptyString3.optional(),
|
|
17794
|
+
resourceMetadata: ResourceMetadata.nullable().optional(),
|
|
17795
|
+
xp: exports_external.number().optional(),
|
|
17796
|
+
grades: GradeArray.optional(),
|
|
17797
|
+
courseIdOnFail: NonEmptyString3.optional()
|
|
17798
|
+
});
|
|
17799
|
+
var PowerPathCreateInternalTestInput = exports_external.union([
|
|
17800
|
+
InternalTestBase.extend({
|
|
17801
|
+
testType: exports_external.literal("qti"),
|
|
17802
|
+
qti: exports_external.object({
|
|
17803
|
+
url: exports_external.url(),
|
|
17804
|
+
title: NonEmptyString3.optional(),
|
|
17805
|
+
metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
|
|
17806
|
+
})
|
|
17807
|
+
}),
|
|
17808
|
+
InternalTestBase.extend({
|
|
17809
|
+
testType: exports_external.literal("assessment-bank"),
|
|
17810
|
+
assessmentBank: exports_external.object({
|
|
17811
|
+
resources: exports_external.array(exports_external.object({
|
|
17812
|
+
url: exports_external.url(),
|
|
17813
|
+
title: NonEmptyString3.optional(),
|
|
17814
|
+
metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
|
|
17815
|
+
}))
|
|
17816
|
+
})
|
|
17817
|
+
})
|
|
17818
|
+
]);
|
|
17819
|
+
var PowerPathCreateNewAttemptInput = exports_external.object({
|
|
17820
|
+
student: NonEmptyString3,
|
|
17821
|
+
lesson: NonEmptyString3
|
|
17822
|
+
});
|
|
17823
|
+
var PowerPathFinalStudentAssessmentResponseInput = exports_external.object({
|
|
17824
|
+
student: NonEmptyString3,
|
|
17825
|
+
lesson: NonEmptyString3
|
|
17826
|
+
});
|
|
17827
|
+
var PowerPathLessonPlansCreateInput = exports_external.object({
|
|
17828
|
+
courseId: NonEmptyString3,
|
|
17829
|
+
userId: NonEmptyString3,
|
|
17830
|
+
classId: NonEmptyString3.optional()
|
|
17831
|
+
});
|
|
17832
|
+
var LessonPlanTarget = exports_external.object({
|
|
17833
|
+
type: exports_external.enum(["component", "resource"]),
|
|
17834
|
+
id: NonEmptyString3
|
|
17835
|
+
});
|
|
17836
|
+
var PowerPathLessonPlanOperationInput = exports_external.union([
|
|
17837
|
+
exports_external.object({
|
|
17838
|
+
type: exports_external.literal("set-skipped"),
|
|
17839
|
+
payload: exports_external.object({
|
|
17840
|
+
target: LessonPlanTarget,
|
|
17841
|
+
value: exports_external.boolean()
|
|
17842
|
+
})
|
|
17843
|
+
}),
|
|
17844
|
+
exports_external.object({
|
|
17845
|
+
type: exports_external.literal("add-custom-resource"),
|
|
17846
|
+
payload: exports_external.object({
|
|
17847
|
+
resource_id: NonEmptyString3,
|
|
17848
|
+
parent_component_id: NonEmptyString3,
|
|
17849
|
+
skipped: exports_external.boolean().optional()
|
|
17850
|
+
})
|
|
17851
|
+
}),
|
|
17852
|
+
exports_external.object({
|
|
17853
|
+
type: exports_external.literal("move-item-before"),
|
|
17854
|
+
payload: exports_external.object({
|
|
17855
|
+
target: LessonPlanTarget,
|
|
17856
|
+
reference_id: NonEmptyString3
|
|
17857
|
+
})
|
|
17858
|
+
}),
|
|
17859
|
+
exports_external.object({
|
|
17860
|
+
type: exports_external.literal("move-item-after"),
|
|
17861
|
+
payload: exports_external.object({
|
|
17862
|
+
target: LessonPlanTarget,
|
|
17863
|
+
reference_id: NonEmptyString3
|
|
17864
|
+
})
|
|
17865
|
+
}),
|
|
17866
|
+
exports_external.object({
|
|
17867
|
+
type: exports_external.literal("move-item-to-start"),
|
|
17868
|
+
payload: exports_external.object({
|
|
17869
|
+
target: LessonPlanTarget
|
|
17870
|
+
})
|
|
17871
|
+
}),
|
|
17872
|
+
exports_external.object({
|
|
17873
|
+
type: exports_external.literal("move-item-to-end"),
|
|
17874
|
+
payload: exports_external.object({
|
|
17875
|
+
target: LessonPlanTarget
|
|
17876
|
+
})
|
|
17877
|
+
}),
|
|
17878
|
+
exports_external.object({
|
|
17879
|
+
type: exports_external.literal("change-item-parent"),
|
|
17880
|
+
payload: exports_external.object({
|
|
17881
|
+
target: LessonPlanTarget,
|
|
17882
|
+
new_parent_id: NonEmptyString3,
|
|
17883
|
+
position: exports_external.enum(["start", "end"]).optional()
|
|
17884
|
+
})
|
|
17885
|
+
})
|
|
17886
|
+
]);
|
|
17887
|
+
var PowerPathLessonPlanOperationsInput = exports_external.object({
|
|
17888
|
+
operation: exports_external.array(PowerPathLessonPlanOperationInput),
|
|
17889
|
+
reason: NonEmptyString3.optional()
|
|
17890
|
+
});
|
|
17891
|
+
var PowerPathLessonPlanUpdateStudentItemResponseInput = exports_external.object({
|
|
17892
|
+
studentId: NonEmptyString3,
|
|
17893
|
+
componentResourceId: NonEmptyString3,
|
|
17894
|
+
result: exports_external.object({
|
|
17895
|
+
status: exports_external.enum(["active", "tobedeleted"]),
|
|
17896
|
+
metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
|
|
17897
|
+
score: exports_external.number().optional(),
|
|
17898
|
+
textScore: NonEmptyString3.optional(),
|
|
17899
|
+
scoreDate: NonEmptyString3,
|
|
17900
|
+
scorePercentile: exports_external.number().optional(),
|
|
17901
|
+
scoreStatus: ScoreStatus,
|
|
17902
|
+
comment: NonEmptyString3.optional(),
|
|
17903
|
+
learningObjectiveSet: exports_external.array(exports_external.object({
|
|
17904
|
+
source: NonEmptyString3,
|
|
17905
|
+
learningObjectiveResults: exports_external.array(exports_external.object({
|
|
17906
|
+
learningObjectiveId: NonEmptyString3,
|
|
17907
|
+
score: exports_external.number().optional(),
|
|
17908
|
+
textScore: NonEmptyString3.optional()
|
|
17909
|
+
}))
|
|
17910
|
+
})).optional(),
|
|
17911
|
+
inProgress: NonEmptyString3.optional(),
|
|
17912
|
+
incomplete: NonEmptyString3.optional(),
|
|
17913
|
+
late: NonEmptyString3.optional(),
|
|
17914
|
+
missing: NonEmptyString3.optional()
|
|
17915
|
+
})
|
|
17916
|
+
});
|
|
17917
|
+
var PowerPathMakeExternalTestAssignmentInput = exports_external.object({
|
|
17918
|
+
student: NonEmptyString3,
|
|
17919
|
+
lesson: NonEmptyString3,
|
|
17920
|
+
applicationName: NonEmptyString3.optional(),
|
|
17921
|
+
testId: NonEmptyString3.optional(),
|
|
17922
|
+
skipCourseEnrollment: exports_external.boolean().optional()
|
|
17923
|
+
});
|
|
17924
|
+
var PowerPathPlacementResetUserPlacementInput = exports_external.object({
|
|
17925
|
+
student: NonEmptyString3,
|
|
17926
|
+
subject: TimebackSubject
|
|
17927
|
+
});
|
|
17928
|
+
var PowerPathResetAttemptInput = exports_external.object({
|
|
17929
|
+
student: NonEmptyString3,
|
|
17930
|
+
lesson: NonEmptyString3
|
|
17931
|
+
});
|
|
17932
|
+
var PowerPathScreeningResetSessionInput = exports_external.object({
|
|
17933
|
+
userId: NonEmptyString3
|
|
17934
|
+
});
|
|
17935
|
+
var PowerPathScreeningAssignTestInput = exports_external.object({
|
|
17936
|
+
userId: NonEmptyString3,
|
|
17937
|
+
subject: exports_external.enum(["Math", "Reading", "Language", "Science"])
|
|
17938
|
+
});
|
|
17939
|
+
var PowerPathTestAssignmentsCreateInput = exports_external.object({
|
|
17940
|
+
student: NonEmptyString3,
|
|
17941
|
+
subject: TimebackSubject,
|
|
17942
|
+
grade: TimebackGrade,
|
|
17943
|
+
testName: NonEmptyString3.optional()
|
|
17944
|
+
});
|
|
17945
|
+
var PowerPathTestAssignmentsUpdateInput = exports_external.object({
|
|
17946
|
+
testName: NonEmptyString3
|
|
17947
|
+
});
|
|
17948
|
+
var PowerPathTestAssignmentItemInput = exports_external.object({
|
|
17949
|
+
student: NonEmptyString3,
|
|
17950
|
+
subject: TimebackSubject,
|
|
17951
|
+
grade: TimebackGrade,
|
|
17952
|
+
testName: NonEmptyString3.optional()
|
|
17953
|
+
});
|
|
17954
|
+
var PowerPathTestAssignmentsBulkInput = exports_external.object({
|
|
17955
|
+
items: exports_external.array(PowerPathTestAssignmentItemInput)
|
|
17956
|
+
});
|
|
17957
|
+
var PowerPathTestAssignmentsImportInput = exports_external.object({
|
|
17958
|
+
spreadsheetUrl: exports_external.url(),
|
|
17959
|
+
sheet: NonEmptyString3
|
|
17960
|
+
});
|
|
17961
|
+
var PowerPathTestAssignmentsListParams = exports_external.object({
|
|
17962
|
+
student: NonEmptyString3,
|
|
17963
|
+
status: exports_external.enum(["assigned", "in_progress", "completed", "failed", "expired", "cancelled"]).optional(),
|
|
17964
|
+
subject: NonEmptyString3.optional(),
|
|
17965
|
+
grade: TimebackGrade.optional(),
|
|
17966
|
+
limit: exports_external.number().int().positive().max(3000).optional(),
|
|
17967
|
+
offset: exports_external.number().int().nonnegative().optional()
|
|
17968
|
+
});
|
|
17969
|
+
var PowerPathTestAssignmentsAdminParams = exports_external.object({
|
|
17970
|
+
student: NonEmptyString3.optional(),
|
|
17971
|
+
status: exports_external.enum(["assigned", "in_progress", "completed", "failed", "expired", "cancelled"]).optional(),
|
|
17972
|
+
subject: NonEmptyString3.optional(),
|
|
17973
|
+
grade: TimebackGrade.optional(),
|
|
17974
|
+
limit: exports_external.number().int().positive().max(3000).optional(),
|
|
17975
|
+
offset: exports_external.number().int().nonnegative().optional()
|
|
17976
|
+
});
|
|
17977
|
+
var PowerPathUpdateStudentQuestionResponseInput = exports_external.object({
|
|
17978
|
+
student: NonEmptyString3,
|
|
17979
|
+
question: NonEmptyString3,
|
|
17980
|
+
response: exports_external.union([NonEmptyString3, exports_external.array(NonEmptyString3)]).optional(),
|
|
17981
|
+
responses: exports_external.record(exports_external.string(), exports_external.union([NonEmptyString3, exports_external.array(NonEmptyString3)])).optional(),
|
|
17982
|
+
lesson: NonEmptyString3
|
|
17983
|
+
});
|
|
17984
|
+
var PowerPathGetAssessmentProgressParams = exports_external.object({
|
|
17985
|
+
student: NonEmptyString3,
|
|
17986
|
+
lesson: NonEmptyString3,
|
|
17987
|
+
attempt: exports_external.number().int().positive().optional()
|
|
17988
|
+
});
|
|
17989
|
+
var PowerPathGetNextQuestionParams = exports_external.object({
|
|
17990
|
+
student: NonEmptyString3,
|
|
17991
|
+
lesson: NonEmptyString3
|
|
17992
|
+
});
|
|
17993
|
+
var PowerPathGetAttemptsParams = exports_external.object({
|
|
17994
|
+
student: NonEmptyString3,
|
|
17995
|
+
lesson: NonEmptyString3
|
|
17996
|
+
});
|
|
17997
|
+
var PowerPathTestOutParams = exports_external.object({
|
|
17998
|
+
student: NonEmptyString3,
|
|
17999
|
+
lesson: NonEmptyString3.optional(),
|
|
18000
|
+
finalized: exports_external.boolean().optional(),
|
|
18001
|
+
toolProvider: NonEmptyString3.optional(),
|
|
18002
|
+
attempt: exports_external.number().int().positive().optional()
|
|
18003
|
+
});
|
|
18004
|
+
var PowerPathImportExternalTestAssignmentResultsParams = exports_external.object({
|
|
18005
|
+
student: NonEmptyString3,
|
|
18006
|
+
lesson: NonEmptyString3,
|
|
18007
|
+
applicationName: NonEmptyString3.optional()
|
|
18008
|
+
});
|
|
18009
|
+
var PowerPathPlacementQueryParams = exports_external.object({
|
|
18010
|
+
student: NonEmptyString3,
|
|
18011
|
+
subject: TimebackSubject
|
|
18012
|
+
});
|
|
18013
|
+
var PowerPathSyllabusQueryParams = exports_external.object({
|
|
18014
|
+
status: exports_external.enum(["active", "tobedeleted"]).optional()
|
|
18015
|
+
});
|
|
17569
18016
|
// ../types/src/zod/qti.ts
|
|
17570
18017
|
var QtiAssessmentItemType = exports_external.enum([
|
|
17571
18018
|
"choice",
|
|
@@ -17818,9 +18265,24 @@ var QtiLessonFeedbackInput = exports_external.object({
|
|
|
17818
18265
|
}).strict();
|
|
17819
18266
|
// ../internal/cli-infra/src/config/timeback.ts
|
|
17820
18267
|
var FILE_PATTERNS2 = ["timeback.config.ts", "timeback.config.js", "timeback.config.mjs"];
|
|
17821
|
-
var
|
|
18268
|
+
var isBun = typeof globalThis.Bun !== "undefined";
|
|
18269
|
+
var jitiInstance = null;
|
|
18270
|
+
async function getJiti() {
|
|
18271
|
+
if (jitiInstance)
|
|
18272
|
+
return jitiInstance;
|
|
18273
|
+
const { createJiti } = await import("jiti");
|
|
18274
|
+
jitiInstance = createJiti(import.meta.url, { fsCache: false });
|
|
18275
|
+
return jitiInstance;
|
|
18276
|
+
}
|
|
17822
18277
|
async function importModule(fullPath) {
|
|
17823
|
-
|
|
18278
|
+
let module;
|
|
18279
|
+
if (isBun) {
|
|
18280
|
+
const fileUrl = pathToFileURL(fullPath).href;
|
|
18281
|
+
module = await import(fileUrl);
|
|
18282
|
+
} else {
|
|
18283
|
+
const jiti = await getJiti();
|
|
18284
|
+
module = await jiti.import(fullPath);
|
|
18285
|
+
}
|
|
17824
18286
|
return module.default ?? module;
|
|
17825
18287
|
}
|
|
17826
18288
|
function deriveCourseIds(config3) {
|
|
@@ -18132,29 +18594,18 @@ function isValidUrl(url2) {
|
|
|
18132
18594
|
return false;
|
|
18133
18595
|
}
|
|
18134
18596
|
}
|
|
18135
|
-
async function
|
|
18136
|
-
const
|
|
18137
|
-
message: "Add Caliper sensor URLs for event filtering?",
|
|
18138
|
-
initialValue: false
|
|
18139
|
-
});
|
|
18140
|
-
if (isCancelled(wantSensors)) {
|
|
18141
|
-
return;
|
|
18142
|
-
}
|
|
18143
|
-
if (!wantSensors) {
|
|
18144
|
-
return [];
|
|
18145
|
-
}
|
|
18597
|
+
async function promptSensor(options) {
|
|
18598
|
+
const { defaultValue } = options ?? {};
|
|
18146
18599
|
const input = await he({
|
|
18147
|
-
message: "Sensor
|
|
18148
|
-
placeholder: "https://myapp.example.com
|
|
18600
|
+
message: "Sensor URL (your app origin, used for activity tracking)",
|
|
18601
|
+
placeholder: "https://myapp.example.com",
|
|
18602
|
+
defaultValue,
|
|
18149
18603
|
validate: (value) => {
|
|
18150
18604
|
if (!value.trim()) {
|
|
18151
|
-
return "
|
|
18605
|
+
return "Sensor URL is required for activity tracking";
|
|
18152
18606
|
}
|
|
18153
|
-
|
|
18154
|
-
|
|
18155
|
-
if (!isValidUrl(url2)) {
|
|
18156
|
-
return `Invalid URL: ${url2}`;
|
|
18157
|
-
}
|
|
18607
|
+
if (!isValidUrl(value.trim())) {
|
|
18608
|
+
return "Invalid URL format";
|
|
18158
18609
|
}
|
|
18159
18610
|
return;
|
|
18160
18611
|
}
|
|
@@ -18162,7 +18613,26 @@ async function promptSensors() {
|
|
|
18162
18613
|
if (isCancelled(input)) {
|
|
18163
18614
|
return;
|
|
18164
18615
|
}
|
|
18165
|
-
return input.
|
|
18616
|
+
return input.trim();
|
|
18617
|
+
}
|
|
18618
|
+
// ../internal/cli-infra/src/sensors/utils.ts
|
|
18619
|
+
function deriveSensorsFromConfig(config3) {
|
|
18620
|
+
const sensors = new Set;
|
|
18621
|
+
if (config3.sensor) {
|
|
18622
|
+
sensors.add(config3.sensor);
|
|
18623
|
+
}
|
|
18624
|
+
for (const course of config3.courses) {
|
|
18625
|
+
if (course.sensor) {
|
|
18626
|
+
sensors.add(course.sensor);
|
|
18627
|
+
}
|
|
18628
|
+
if (course.overrides?.staging?.sensor) {
|
|
18629
|
+
sensors.add(course.overrides.staging.sensor);
|
|
18630
|
+
}
|
|
18631
|
+
if (course.overrides?.production?.sensor) {
|
|
18632
|
+
sensors.add(course.overrides.production.sensor);
|
|
18633
|
+
}
|
|
18634
|
+
}
|
|
18635
|
+
return Array.from(sensors);
|
|
18166
18636
|
}
|
|
18167
18637
|
// src/cli/commands/credentials/add.ts
|
|
18168
18638
|
async function addCredentials(options = {}) {
|
|
@@ -18726,8 +19196,8 @@ async function promptImportApp(credentials, configuredEnvs) {
|
|
|
18726
19196
|
if (!result.success) {
|
|
18727
19197
|
return result;
|
|
18728
19198
|
}
|
|
18729
|
-
const
|
|
18730
|
-
if (
|
|
19199
|
+
const sensor = await promptSensor();
|
|
19200
|
+
if (sensor === undefined) {
|
|
18731
19201
|
return { success: false, cancelled: true };
|
|
18732
19202
|
}
|
|
18733
19203
|
return {
|
|
@@ -18735,7 +19205,7 @@ async function promptImportApp(credentials, configuredEnvs) {
|
|
|
18735
19205
|
name: result.appName,
|
|
18736
19206
|
courses: result.courses,
|
|
18737
19207
|
environment: result.environment,
|
|
18738
|
-
|
|
19208
|
+
sensor
|
|
18739
19209
|
};
|
|
18740
19210
|
} catch (error48) {
|
|
18741
19211
|
const message = error48 instanceof Error ? error48.message : "Unknown error";
|
|
@@ -18765,7 +19235,7 @@ async function promptNoConfig(credentials, configuredEnvs, opts = {}) {
|
|
|
18765
19235
|
// src/cli/commands/serve/config.ts
|
|
18766
19236
|
import { basename as basename2 } from "node:path";
|
|
18767
19237
|
function buildUserConfigFromImport(result) {
|
|
18768
|
-
const { name, courses,
|
|
19238
|
+
const { name, courses, sensor } = result;
|
|
18769
19239
|
const courseIds = {
|
|
18770
19240
|
staging: [],
|
|
18771
19241
|
production: []
|
|
@@ -18778,8 +19248,8 @@ function buildUserConfigFromImport(result) {
|
|
|
18778
19248
|
}
|
|
18779
19249
|
return {
|
|
18780
19250
|
name,
|
|
19251
|
+
sensor,
|
|
18781
19252
|
courses,
|
|
18782
|
-
sensors,
|
|
18783
19253
|
version: "0.0.0",
|
|
18784
19254
|
path: "",
|
|
18785
19255
|
courseIds
|
|
@@ -18853,17 +19323,16 @@ async function resolveFromConfigOrImport(credentials, configuredEnvs, defaultEnv
|
|
|
18853
19323
|
function parseSensors(sensors) {
|
|
18854
19324
|
return sensors.split(",").map((s) => s.trim()).filter(Boolean);
|
|
18855
19325
|
}
|
|
18856
|
-
function
|
|
19326
|
+
function getEffectiveSensors(config3, opts) {
|
|
18857
19327
|
if (opts.sensors) {
|
|
18858
|
-
|
|
19328
|
+
return parseSensors(opts.sensors);
|
|
18859
19329
|
}
|
|
19330
|
+
const derived = deriveSensorsFromConfig(config3);
|
|
19331
|
+
return derived.length > 0 ? derived : undefined;
|
|
18860
19332
|
}
|
|
18861
19333
|
async function resolveConfig(courseIds, opts, credentials, configuredEnvs, defaultEnv) {
|
|
18862
19334
|
const parserOpts = { playcademy: opts.playcademy };
|
|
18863
19335
|
const resolved = courseIds.length > 0 ? await resolveFromCourseIds(courseIds, defaultEnv, credentials, configuredEnvs) : await resolveFromConfigOrImport(credentials, configuredEnvs, defaultEnv, parserOpts);
|
|
18864
|
-
if (!resolved)
|
|
18865
|
-
return null;
|
|
18866
|
-
applyCliOverrides(resolved.userConfig, opts);
|
|
18867
19336
|
return resolved;
|
|
18868
19337
|
}
|
|
18869
19338
|
|
|
@@ -22001,7 +22470,7 @@ function createEnvMiddleware(ctx, manager) {
|
|
|
22001
22470
|
}, 400);
|
|
22002
22471
|
}
|
|
22003
22472
|
const client = manager.get(env2);
|
|
22004
|
-
const sensors = ctx.
|
|
22473
|
+
const sensors = ctx.derivedSensors;
|
|
22005
22474
|
c.set("env", env2);
|
|
22006
22475
|
c.set("client", client);
|
|
22007
22476
|
c.set("sensors", sensors);
|
|
@@ -22540,7 +23009,8 @@ async function serveCommand(courseIds, opts) {
|
|
|
22540
23009
|
serverConfig,
|
|
22541
23010
|
userConfig: resolved.userConfig,
|
|
22542
23011
|
credentials,
|
|
22543
|
-
defaultEnvironment: resolved.environment
|
|
23012
|
+
defaultEnvironment: resolved.environment,
|
|
23013
|
+
derivedSensors: getEffectiveSensors(resolved.userConfig, opts)
|
|
22544
23014
|
};
|
|
22545
23015
|
startServer(ctx, serverConfig, resolved.configFile);
|
|
22546
23016
|
}
|