timeback-studio 0.1.1 → 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 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,8 +16929,11 @@ 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 { createJiti } from "jiti";
16932
+ import { pathToFileURL } from "node:url";
16933
16933
  // ../types/src/zod/primitives.ts
16934
+ var IsoDateTimeRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/;
16935
+ var IsoDateTimeString = exports_external.string().min(1).regex(IsoDateTimeRegex, "must be a valid ISO 8601 datetime");
16936
+ var IsoDateString = exports_external.string().min(1).regex(/^\d{4}-\d{2}-\d{2}$/, "must be a valid ISO 8601 date (YYYY-MM-DD)");
16934
16937
  var TimebackSubject = exports_external.enum([
16935
16938
  "Reading",
16936
16939
  "Language",
@@ -16940,7 +16943,8 @@ var TimebackSubject = exports_external.enum([
16940
16943
  "Science",
16941
16944
  "FastMath",
16942
16945
  "Math",
16943
- "None"
16946
+ "None",
16947
+ "Other"
16944
16948
  ]);
16945
16949
  var TimebackGrade = exports_external.union([
16946
16950
  exports_external.literal(-1),
@@ -16985,6 +16989,47 @@ var OneRosterUserRole = exports_external.enum([
16985
16989
  "teacher"
16986
16990
  ]);
16987
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();
16988
17033
  var LessonType = exports_external.enum(["powerpath-100", "quiz", "test-out", "placement", "unit-test", "alpha-read-article"]).nullable();
16989
17034
  var IMSErrorResponse = exports_external.object({
16990
17035
  imsx_codeMajor: exports_external.enum(["failure", "success"]),
@@ -17007,16 +17052,16 @@ var TimebackActivityContext = exports_external.object({
17007
17052
  id: exports_external.string(),
17008
17053
  type: exports_external.literal("TimebackActivityContext"),
17009
17054
  subject: TimebackSubject,
17010
- app: exports_external.object({ name: exports_external.string() }).optional(),
17011
- activity: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string().optional() }).optional(),
17012
- course: exports_external.object({ id: exports_external.string(), name: exports_external.string() }),
17055
+ app: exports_external.object({ name: exports_external.string() }),
17056
+ activity: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string() }).strict().optional(),
17057
+ course: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string() }).strict().optional(),
17013
17058
  process: exports_external.boolean().optional()
17014
17059
  });
17015
17060
  var CaliperEventBase = exports_external.object({
17016
17061
  "@context": exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
17017
17062
  id: exports_external.string(),
17018
17063
  type: exports_external.string(),
17019
- eventTime: exports_external.string(),
17064
+ eventTime: IsoDateTimeString,
17020
17065
  profile: exports_external.literal("TimebackProfile"),
17021
17066
  actor: TimebackUser,
17022
17067
  action: exports_external.string(),
@@ -17054,13 +17099,99 @@ var TimebackTimeSpentEvent = CaliperEventBase.extend({
17054
17099
  action: exports_external.literal("SpentTime"),
17055
17100
  generated: TimebackTimeSpentMetricsCollection
17056
17101
  });
17102
+ var ActivityCompletedInput = exports_external.object({
17103
+ actor: TimebackUser,
17104
+ object: TimebackActivityContext,
17105
+ metrics: exports_external.array(TimebackActivityMetric).min(1, "metrics must contain at least one metric"),
17106
+ eventTime: IsoDateTimeString.optional(),
17107
+ metricsId: exports_external.string().optional(),
17108
+ id: exports_external.string().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()
17114
+ }).strict();
17115
+ var TimeSpentInput = exports_external.object({
17116
+ actor: TimebackUser,
17117
+ object: TimebackActivityContext,
17118
+ metrics: exports_external.array(TimebackTimeMetric).min(1, "metrics must contain at least one metric"),
17119
+ eventTime: IsoDateTimeString.optional(),
17120
+ metricsId: exports_external.string().optional(),
17121
+ id: exports_external.string().optional(),
17122
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17123
+ }).strict();
17057
17124
  var TimebackEvent = exports_external.union([TimebackActivityEvent, TimebackTimeSpentEvent]);
17058
17125
  var CaliperEnvelope = exports_external.object({
17059
17126
  sensor: exports_external.string(),
17060
- sendTime: exports_external.string(),
17127
+ sendTime: IsoDateTimeString,
17061
17128
  dataVersion: exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
17062
17129
  data: exports_external.array(TimebackEvent)
17063
17130
  });
17131
+ var CaliperProfile = exports_external.enum([
17132
+ "AnnotationProfile",
17133
+ "AssessmentProfile",
17134
+ "ToolUseProfile",
17135
+ "GeneralProfile",
17136
+ "FeedbackProfile",
17137
+ "MediaProfile",
17138
+ "SurveyProfile",
17139
+ "ResourceManagementProfile",
17140
+ "ForumProfile",
17141
+ "AssignableProfile",
17142
+ "GradingProfile",
17143
+ "ReadingProfile",
17144
+ "SessionProfile",
17145
+ "SearchProfile",
17146
+ "ToolLaunchProfile",
17147
+ "TimebackProfile"
17148
+ ]);
17149
+ var CaliperEntity = exports_external.union([exports_external.string(), exports_external.record(exports_external.string(), exports_external.unknown())]);
17150
+ var CaliperActor = exports_external.object({
17151
+ id: exports_external.string(),
17152
+ type: exports_external.string(),
17153
+ extensions: exports_external.object({
17154
+ email: exports_external.email()
17155
+ }).loose()
17156
+ }).strict();
17157
+ var CaliperEvent = exports_external.object({
17158
+ "@context": exports_external.string().optional(),
17159
+ id: exports_external.string(),
17160
+ type: exports_external.string(),
17161
+ actor: exports_external.union([exports_external.string(), CaliperActor, TimebackUser]),
17162
+ action: exports_external.string(),
17163
+ object: CaliperEntity,
17164
+ eventTime: IsoDateTimeString,
17165
+ profile: CaliperProfile,
17166
+ edApp: CaliperEntity.optional(),
17167
+ generated: CaliperEntity.optional(),
17168
+ target: CaliperEntity.optional(),
17169
+ referrer: CaliperEntity.optional(),
17170
+ group: CaliperEntity.optional(),
17171
+ membership: CaliperEntity.optional(),
17172
+ session: CaliperEntity.optional(),
17173
+ federatedSession: CaliperEntity.optional(),
17174
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17175
+ }).strict();
17176
+ var CaliperEnvelopeInput = exports_external.object({
17177
+ sensor: exports_external.string().min(1, "sensor must be a non-empty string"),
17178
+ sendTime: IsoDateTimeString,
17179
+ dataVersion: exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
17180
+ data: exports_external.array(CaliperEvent).min(1, "data must contain at least one event")
17181
+ });
17182
+ var CaliperSendEventsInput = exports_external.object({
17183
+ sensor: exports_external.string().min(1, "sensor must be a non-empty string"),
17184
+ events: exports_external.array(CaliperEvent).min(1, "events must contain at least one event")
17185
+ });
17186
+ var CaliperListEventsParams = exports_external.object({
17187
+ limit: exports_external.number().int().positive().optional(),
17188
+ offset: exports_external.number().int().min(0).optional(),
17189
+ sensor: exports_external.string().min(1).optional(),
17190
+ startDate: IsoDateTimeString.optional(),
17191
+ endDate: IsoDateTimeString.optional(),
17192
+ actorId: exports_external.string().min(1).optional(),
17193
+ actorEmail: exports_external.email().optional()
17194
+ }).strict();
17064
17195
  // ../types/src/zod/config.ts
17065
17196
  var CourseIds = exports_external.object({
17066
17197
  staging: exports_external.string().optional(),
@@ -17095,23 +17226,67 @@ var CourseDefaults = exports_external.object({
17095
17226
  level: exports_external.string().optional(),
17096
17227
  metadata: CourseMetadata.optional()
17097
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
+ });
17098
17239
  var CourseConfig = CourseDefaults.extend({
17099
17240
  subject: TimebackSubject,
17100
- grade: TimebackGrade,
17101
- 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()
17102
17246
  });
17103
17247
  var TimebackConfig = exports_external.object({
17104
17248
  name: exports_external.string().min(1, "App name is required"),
17105
17249
  defaults: CourseDefaults.optional(),
17106
17250
  courses: exports_external.array(CourseConfig).min(1, "At least one course is required"),
17107
- sensors: exports_external.array(exports_external.string().url()).optional()
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"]
17108
17282
  });
17109
17283
  // ../types/src/zod/edubridge.ts
17284
+ var EdubridgeDateString = exports_external.union([IsoDateString, IsoDateTimeString]);
17110
17285
  var EduBridgeEnrollment = exports_external.object({
17111
17286
  id: exports_external.string(),
17112
17287
  role: exports_external.string(),
17113
- beginDate: exports_external.string().nullable(),
17114
- endDate: exports_external.string().nullable(),
17288
+ beginDate: EdubridgeDateString.nullable(),
17289
+ endDate: EdubridgeDateString.nullable(),
17115
17290
  metadata: exports_external.object({
17116
17291
  goals: exports_external.object({ dailyXp: exports_external.number().optional() }).optional(),
17117
17292
  metrics: exports_external.object({ totalXp: exports_external.number().optional(), totalLessons: exports_external.number().optional() }).optional()
@@ -17145,17 +17320,699 @@ var EduBridgeAnalyticsFacts = exports_external.record(exports_external.string(),
17145
17320
  var EduBridgeEnrollmentAnalyticsResponse = exports_external.object({
17146
17321
  message: exports_external.string(),
17147
17322
  enrollmentId: exports_external.string(),
17148
- startDate: exports_external.string(),
17149
- endDate: exports_external.string(),
17323
+ startDate: EdubridgeDateString,
17324
+ endDate: EdubridgeDateString,
17150
17325
  facts: EduBridgeAnalyticsFacts,
17151
17326
  factsByApp: exports_external.unknown()
17152
17327
  });
17328
+ var NonEmptyString = exports_external.string().trim().min(1);
17329
+ var EmailOrStudentId = exports_external.object({
17330
+ email: exports_external.email().optional(),
17331
+ studentId: NonEmptyString.optional()
17332
+ }).superRefine((value, ctx) => {
17333
+ if (!value.email && !value.studentId) {
17334
+ ctx.addIssue({
17335
+ code: exports_external.ZodIssueCode.custom,
17336
+ message: "must provide either email or studentId",
17337
+ path: ["email"]
17338
+ });
17339
+ ctx.addIssue({
17340
+ code: exports_external.ZodIssueCode.custom,
17341
+ message: "must provide either email or studentId",
17342
+ path: ["studentId"]
17343
+ });
17344
+ }
17345
+ });
17153
17346
  var SubjectTrackInput = exports_external.object({
17154
- subject: exports_external.string(),
17155
- gradeLevel: exports_external.string(),
17156
- targetCourseId: exports_external.string(),
17347
+ subject: NonEmptyString,
17348
+ gradeLevel: NonEmptyString,
17349
+ targetCourseId: NonEmptyString,
17157
17350
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17158
17351
  });
17352
+ var SubjectTrackUpsertInput = SubjectTrackInput.extend({
17353
+ id: NonEmptyString
17354
+ });
17355
+ var EdubridgeListEnrollmentsParams = exports_external.object({
17356
+ userId: NonEmptyString
17357
+ });
17358
+ var EdubridgeEnrollOptions = exports_external.object({
17359
+ sourcedId: NonEmptyString.optional(),
17360
+ role: EnrollmentRole.optional(),
17361
+ beginDate: EdubridgeDateString.optional(),
17362
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17363
+ });
17364
+ var EdubridgeUsersListParams = exports_external.object({
17365
+ fields: exports_external.string().optional(),
17366
+ limit: exports_external.number().int().positive().optional(),
17367
+ offset: exports_external.number().int().nonnegative().optional(),
17368
+ sort: exports_external.string().optional(),
17369
+ orderBy: exports_external.enum(["asc", "desc"]).optional(),
17370
+ filter: exports_external.string().optional(),
17371
+ search: exports_external.string().optional(),
17372
+ roles: exports_external.array(OneRosterUserRole).min(1),
17373
+ orgSourcedIds: exports_external.array(NonEmptyString).optional()
17374
+ });
17375
+ var EdubridgeActivityParams = EmailOrStudentId.extend({
17376
+ startDate: EdubridgeDateString,
17377
+ endDate: EdubridgeDateString,
17378
+ timezone: exports_external.string().optional()
17379
+ });
17380
+ var EdubridgeWeeklyFactsParams = EmailOrStudentId.extend({
17381
+ weekDate: EdubridgeDateString,
17382
+ timezone: exports_external.string().optional()
17383
+ });
17384
+ var EdubridgeEnrollmentFactsParams = exports_external.object({
17385
+ enrollmentId: NonEmptyString,
17386
+ startDate: EdubridgeDateString.optional(),
17387
+ endDate: EdubridgeDateString.optional(),
17388
+ timezone: exports_external.string().optional()
17389
+ });
17390
+ // ../types/src/zod/oneroster.ts
17391
+ var NonEmptyString2 = exports_external.string().min(1);
17392
+ var Status = exports_external.enum(["active", "tobedeleted"]);
17393
+ var Metadata = exports_external.record(exports_external.string(), exports_external.unknown()).nullable().optional();
17394
+ var Ref = exports_external.object({
17395
+ sourcedId: NonEmptyString2,
17396
+ type: exports_external.string().optional(),
17397
+ href: exports_external.string().optional()
17398
+ }).strict();
17399
+ var OneRosterDateString = exports_external.union([IsoDateString, IsoDateTimeString]);
17400
+ var OneRosterUserRoleInput = exports_external.object({
17401
+ roleType: exports_external.enum(["primary", "secondary"]),
17402
+ role: OneRosterUserRole,
17403
+ org: Ref,
17404
+ userProfile: exports_external.string().optional(),
17405
+ metadata: Metadata,
17406
+ beginDate: OneRosterDateString.optional(),
17407
+ endDate: OneRosterDateString.optional()
17408
+ }).strict();
17409
+ var OneRosterUserCreateInput = exports_external.object({
17410
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
17411
+ status: Status.optional(),
17412
+ enabledUser: exports_external.boolean(),
17413
+ givenName: NonEmptyString2.describe("givenName must be a non-empty string"),
17414
+ familyName: NonEmptyString2.describe("familyName must be a non-empty string"),
17415
+ middleName: NonEmptyString2.optional(),
17416
+ username: NonEmptyString2.optional(),
17417
+ email: exports_external.email().optional(),
17418
+ roles: exports_external.array(OneRosterUserRoleInput).min(1, "roles must include at least one role"),
17419
+ userIds: exports_external.array(exports_external.object({
17420
+ type: NonEmptyString2,
17421
+ identifier: NonEmptyString2
17422
+ }).strict()).optional(),
17423
+ agents: exports_external.array(Ref).optional(),
17424
+ grades: exports_external.array(TimebackGrade).optional(),
17425
+ identifier: NonEmptyString2.optional(),
17426
+ sms: NonEmptyString2.optional(),
17427
+ phone: NonEmptyString2.optional(),
17428
+ pronouns: NonEmptyString2.optional(),
17429
+ password: NonEmptyString2.optional(),
17430
+ metadata: Metadata
17431
+ }).strict();
17432
+ var OneRosterCourseCreateInput = exports_external.object({
17433
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
17434
+ status: Status.optional(),
17435
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17436
+ org: Ref,
17437
+ courseCode: NonEmptyString2.optional(),
17438
+ subjects: exports_external.array(TimebackSubject).optional(),
17439
+ grades: exports_external.array(TimebackGrade).optional(),
17440
+ level: NonEmptyString2.optional(),
17441
+ metadata: Metadata
17442
+ }).strict();
17443
+ var OneRosterClassCreateInput = exports_external.object({
17444
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
17445
+ status: Status.optional(),
17446
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17447
+ terms: exports_external.array(Ref).min(1, "terms must have at least one item"),
17448
+ course: Ref,
17449
+ org: Ref,
17450
+ classCode: NonEmptyString2.optional(),
17451
+ classType: exports_external.enum(["homeroom", "scheduled"]).optional(),
17452
+ location: NonEmptyString2.optional(),
17453
+ grades: exports_external.array(TimebackGrade).optional(),
17454
+ subjects: exports_external.array(TimebackSubject).optional(),
17455
+ subjectCodes: exports_external.array(NonEmptyString2).optional(),
17456
+ periods: exports_external.array(NonEmptyString2).optional(),
17457
+ metadata: Metadata
17458
+ }).strict();
17459
+ var StringBoolean = exports_external.enum(["true", "false"]);
17460
+ var OneRosterEnrollmentCreateInput = exports_external.object({
17461
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
17462
+ status: Status.optional(),
17463
+ user: Ref,
17464
+ class: Ref,
17465
+ school: Ref.optional(),
17466
+ role: OneRosterUserRole,
17467
+ primary: StringBoolean.optional(),
17468
+ beginDate: OneRosterDateString.optional(),
17469
+ endDate: OneRosterDateString.optional(),
17470
+ metadata: Metadata
17471
+ }).strict();
17472
+ var OneRosterCategoryCreateInput = exports_external.object({
17473
+ sourcedId: NonEmptyString2.optional(),
17474
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17475
+ status: Status,
17476
+ weight: exports_external.number().nullable().optional(),
17477
+ metadata: Metadata
17478
+ }).strict();
17479
+ var OneRosterLineItemCreateInput = exports_external.object({
17480
+ sourcedId: NonEmptyString2.optional(),
17481
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17482
+ class: Ref,
17483
+ school: Ref,
17484
+ category: Ref,
17485
+ assignDate: OneRosterDateString,
17486
+ dueDate: OneRosterDateString,
17487
+ status: Status,
17488
+ description: exports_external.string().optional(),
17489
+ resultValueMin: exports_external.number().nullable().optional(),
17490
+ resultValueMax: exports_external.number().nullable().optional(),
17491
+ scoreScale: Ref.optional(),
17492
+ metadata: Metadata
17493
+ }).strict();
17494
+ var OneRosterResultCreateInput = exports_external.object({
17495
+ sourcedId: NonEmptyString2.optional(),
17496
+ lineItem: Ref,
17497
+ student: Ref,
17498
+ class: Ref.optional(),
17499
+ scoreDate: OneRosterDateString,
17500
+ scoreStatus: exports_external.enum([
17501
+ "exempt",
17502
+ "fully graded",
17503
+ "not submitted",
17504
+ "partially graded",
17505
+ "submitted"
17506
+ ]),
17507
+ score: exports_external.number().nullable().optional(),
17508
+ textScore: exports_external.string().nullable().optional(),
17509
+ status: Status,
17510
+ comment: exports_external.string().nullable().optional(),
17511
+ metadata: Metadata
17512
+ }).strict();
17513
+ var OneRosterScoreScaleCreateInput = exports_external.object({
17514
+ sourcedId: NonEmptyString2.optional(),
17515
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17516
+ status: Status.optional(),
17517
+ type: exports_external.string().optional(),
17518
+ class: Ref.optional(),
17519
+ course: Ref.nullable().optional(),
17520
+ scoreScaleValue: exports_external.array(exports_external.object({
17521
+ itemValueLHS: NonEmptyString2,
17522
+ itemValueRHS: NonEmptyString2,
17523
+ value: exports_external.string().optional(),
17524
+ description: exports_external.string().optional()
17525
+ }).strict()).optional(),
17526
+ minScore: exports_external.number().optional(),
17527
+ maxScore: exports_external.number().optional(),
17528
+ metadata: Metadata
17529
+ }).strict();
17530
+ var OneRosterAssessmentLineItemCreateInput = exports_external.object({
17531
+ sourcedId: NonEmptyString2.optional(),
17532
+ status: Status.optional(),
17533
+ dateLastModified: IsoDateTimeString.optional(),
17534
+ title: NonEmptyString2.describe("title must be a non-empty string"),
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(),
17548
+ metadata: Metadata
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
+ }));
17559
+ var OneRosterAssessmentResultCreateInput = exports_external.object({
17560
+ sourcedId: NonEmptyString2.optional(),
17561
+ status: Status.optional(),
17562
+ dateLastModified: IsoDateTimeString.optional(),
17563
+ metadata: Metadata,
17564
+ assessmentLineItem: Ref,
17565
+ student: Ref,
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(),
17571
+ scoreStatus: exports_external.enum([
17572
+ "exempt",
17573
+ "fully graded",
17574
+ "not submitted",
17575
+ "partially graded",
17576
+ "submitted"
17577
+ ]),
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()
17584
+ }).strict();
17585
+ var OneRosterOrgCreateInput = exports_external.object({
17586
+ sourcedId: NonEmptyString2.optional(),
17587
+ status: Status.optional(),
17588
+ name: NonEmptyString2.describe("name must be a non-empty string"),
17589
+ type: OrganizationType,
17590
+ identifier: NonEmptyString2.optional(),
17591
+ parent: Ref.optional(),
17592
+ metadata: Metadata
17593
+ }).strict();
17594
+ var OneRosterSchoolCreateInput = exports_external.object({
17595
+ sourcedId: NonEmptyString2.optional(),
17596
+ status: Status.optional(),
17597
+ name: NonEmptyString2.describe("name must be a non-empty string"),
17598
+ type: exports_external.literal("school").optional(),
17599
+ identifier: NonEmptyString2.optional(),
17600
+ parent: Ref.optional(),
17601
+ metadata: Metadata
17602
+ }).strict();
17603
+ var OneRosterAcademicSessionCreateInput = exports_external.object({
17604
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
17605
+ status: Status,
17606
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17607
+ startDate: OneRosterDateString,
17608
+ endDate: OneRosterDateString,
17609
+ type: exports_external.enum(["gradingPeriod", "semester", "schoolYear", "term"]),
17610
+ schoolYear: NonEmptyString2.describe("schoolYear must be a non-empty string"),
17611
+ org: Ref,
17612
+ parent: Ref.optional(),
17613
+ children: exports_external.array(Ref).optional(),
17614
+ metadata: Metadata
17615
+ }).strict();
17616
+ var OneRosterComponentResourceCreateInput = exports_external.object({
17617
+ sourcedId: NonEmptyString2.optional(),
17618
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17619
+ courseComponent: Ref,
17620
+ resource: Ref,
17621
+ status: Status,
17622
+ metadata: Metadata
17623
+ }).strict();
17624
+ var OneRosterCourseComponentCreateInput = exports_external.object({
17625
+ sourcedId: NonEmptyString2.optional(),
17626
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17627
+ course: Ref,
17628
+ status: Status,
17629
+ metadata: Metadata
17630
+ }).strict();
17631
+ var OneRosterEnrollInput = exports_external.object({
17632
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
17633
+ role: exports_external.enum(["student", "teacher"]),
17634
+ primary: StringBoolean.optional(),
17635
+ beginDate: OneRosterDateString.optional(),
17636
+ endDate: OneRosterDateString.optional(),
17637
+ metadata: Metadata
17638
+ }).strict();
17639
+ var OneRosterAgentInput = exports_external.object({
17640
+ agentSourcedId: NonEmptyString2.describe("agentSourcedId must be a non-empty string")
17641
+ }).strict();
17642
+ var OneRosterCredentialInput = exports_external.object({
17643
+ type: NonEmptyString2.describe("type must be a non-empty string"),
17644
+ username: NonEmptyString2.describe("username must be a non-empty string"),
17645
+ password: exports_external.string().optional(),
17646
+ metadata: Metadata
17647
+ }).strict();
17648
+ var OneRosterDemographicsCreateInput = exports_external.object({
17649
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string")
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
+ ]);
17720
+ var OneRosterResourceCreateInput = exports_external.object({
17721
+ sourcedId: NonEmptyString2.optional(),
17722
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17723
+ vendorResourceId: NonEmptyString2.describe("vendorResourceId must be a non-empty string"),
17724
+ roles: exports_external.array(exports_external.enum(["primary", "secondary"])).optional(),
17725
+ importance: exports_external.enum(["primary", "secondary"]).optional(),
17726
+ vendorId: exports_external.string().optional(),
17727
+ applicationId: exports_external.string().optional(),
17728
+ status: Status.optional(),
17729
+ metadata: ResourceMetadataSchema.nullable().optional()
17730
+ }).strict();
17731
+ var CourseStructureItem = exports_external.object({
17732
+ url: NonEmptyString2.describe("courseStructure.url must be a non-empty string"),
17733
+ skillCode: NonEmptyString2.describe("courseStructure.skillCode must be a non-empty string"),
17734
+ lessonCode: NonEmptyString2.describe("courseStructure.lessonCode must be a non-empty string"),
17735
+ title: NonEmptyString2.describe("courseStructure.title must be a non-empty string"),
17736
+ "unit-title": NonEmptyString2.describe("courseStructure.unit-title must be a non-empty string"),
17737
+ status: NonEmptyString2.describe("courseStructure.status must be a non-empty string"),
17738
+ xp: exports_external.number()
17739
+ }).loose();
17740
+ var OneRosterCourseStructureInput = exports_external.object({
17741
+ course: exports_external.object({
17742
+ sourcedId: NonEmptyString2.describe("course.sourcedId must be a non-empty string").optional(),
17743
+ title: NonEmptyString2.describe("course.title must be a non-empty string"),
17744
+ org: Ref,
17745
+ status: Status,
17746
+ metadata: Metadata
17747
+ }).strict(),
17748
+ courseStructure: exports_external.record(exports_external.string(), CourseStructureItem)
17749
+ }).strict();
17750
+ var OneRosterBulkResultItem = exports_external.object({
17751
+ student: Ref
17752
+ }).loose();
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
+ });
17159
18016
  // ../types/src/zod/qti.ts
17160
18017
  var QtiAssessmentItemType = exports_external.enum([
17161
18018
  "choice",
@@ -17272,6 +18129,12 @@ var QtiCatalogInfo = exports_external.object({
17272
18129
  support: exports_external.string(),
17273
18130
  content: exports_external.string()
17274
18131
  }).strict();
18132
+ var QtiPaginationParams = exports_external.object({
18133
+ page: exports_external.number().int().positive().optional(),
18134
+ limit: exports_external.number().int().positive().optional(),
18135
+ sort: exports_external.string().optional(),
18136
+ order: exports_external.enum(["asc", "desc"]).optional()
18137
+ }).strict();
17275
18138
  var QtiAssessmentItemCreateInput = exports_external.object({
17276
18139
  identifier: exports_external.string().min(1),
17277
18140
  title: exports_external.string().min(1),
@@ -17288,6 +18151,7 @@ var QtiAssessmentItemCreateInput = exports_external.object({
17288
18151
  feedbackBlock: exports_external.array(QtiFeedbackBlock).optional()
17289
18152
  }).strict();
17290
18153
  var QtiAssessmentItemUpdateInput = exports_external.object({
18154
+ identifier: exports_external.string().min(1).optional(),
17291
18155
  title: exports_external.string().min(1),
17292
18156
  type: QtiAssessmentItemType,
17293
18157
  qtiVersion: exports_external.string().optional(),
@@ -17326,6 +18190,12 @@ var QtiTestPart = exports_external.object({
17326
18190
  submissionMode: QtiSubmissionMode,
17327
18191
  "qti-assessment-section": exports_external.union([QtiAssessmentSection, exports_external.array(QtiAssessmentSection)])
17328
18192
  }).strict();
18193
+ var QtiReorderItemsInput = exports_external.object({
18194
+ items: exports_external.array(QtiAssessmentItemRef).min(1)
18195
+ }).strict();
18196
+ var QtiAssessmentTestMetadataUpdateInput = exports_external.object({
18197
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
18198
+ }).strict();
17329
18199
  var QtiAssessmentTestCreateInput = exports_external.object({
17330
18200
  identifier: exports_external.string().min(1),
17331
18201
  title: exports_external.string().min(1),
@@ -17340,6 +18210,7 @@ var QtiAssessmentTestCreateInput = exports_external.object({
17340
18210
  "qti-outcome-declaration": exports_external.array(QtiTestOutcomeDeclaration).optional()
17341
18211
  }).strict();
17342
18212
  var QtiAssessmentTestUpdateInput = exports_external.object({
18213
+ identifier: exports_external.string().min(1).optional(),
17343
18214
  title: exports_external.string().min(1),
17344
18215
  qtiVersion: exports_external.string().optional(),
17345
18216
  toolName: exports_external.string().optional(),
@@ -17364,6 +18235,7 @@ var QtiStimulusCreateInput = exports_external.object({
17364
18235
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17365
18236
  }).strict();
17366
18237
  var QtiStimulusUpdateInput = exports_external.object({
18238
+ identifier: exports_external.string().min(1).optional(),
17367
18239
  title: exports_external.string().min(1),
17368
18240
  label: exports_external.string().optional(),
17369
18241
  language: exports_external.string().optional(),
@@ -17393,9 +18265,24 @@ var QtiLessonFeedbackInput = exports_external.object({
17393
18265
  }).strict();
17394
18266
  // ../internal/cli-infra/src/config/timeback.ts
17395
18267
  var FILE_PATTERNS2 = ["timeback.config.ts", "timeback.config.js", "timeback.config.mjs"];
17396
- var jiti = createJiti(import.meta.url, { fsCache: false });
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
+ }
17397
18277
  async function importModule(fullPath) {
17398
- const module = await jiti.import(fullPath);
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
+ }
17399
18286
  return module.default ?? module;
17400
18287
  }
17401
18288
  function deriveCourseIds(config3) {
@@ -17707,29 +18594,18 @@ function isValidUrl(url2) {
17707
18594
  return false;
17708
18595
  }
17709
18596
  }
17710
- async function promptSensors() {
17711
- const wantSensors = await ye({
17712
- message: "Add Caliper sensor URLs for event filtering?",
17713
- initialValue: false
17714
- });
17715
- if (isCancelled(wantSensors)) {
17716
- return;
17717
- }
17718
- if (!wantSensors) {
17719
- return [];
17720
- }
18597
+ async function promptSensor(options) {
18598
+ const { defaultValue } = options ?? {};
17721
18599
  const input = await he({
17722
- message: "Sensor URLs (comma-separated)",
17723
- placeholder: "https://myapp.example.com/caliper/sensors/activity",
18600
+ message: "Sensor URL (your app origin, used for activity tracking)",
18601
+ placeholder: "https://myapp.example.com",
18602
+ defaultValue,
17724
18603
  validate: (value) => {
17725
18604
  if (!value.trim()) {
17726
- return "Enter at least one sensor URL";
18605
+ return "Sensor URL is required for activity tracking";
17727
18606
  }
17728
- const urls = value.split(",").map((s) => s.trim());
17729
- for (const url2 of urls) {
17730
- if (!isValidUrl(url2)) {
17731
- return `Invalid URL: ${url2}`;
17732
- }
18607
+ if (!isValidUrl(value.trim())) {
18608
+ return "Invalid URL format";
17733
18609
  }
17734
18610
  return;
17735
18611
  }
@@ -17737,7 +18613,26 @@ async function promptSensors() {
17737
18613
  if (isCancelled(input)) {
17738
18614
  return;
17739
18615
  }
17740
- return input.split(",").map((s) => s.trim()).filter(Boolean);
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);
17741
18636
  }
17742
18637
  // src/cli/commands/credentials/add.ts
17743
18638
  async function addCredentials(options = {}) {
@@ -18301,8 +19196,8 @@ async function promptImportApp(credentials, configuredEnvs) {
18301
19196
  if (!result.success) {
18302
19197
  return result;
18303
19198
  }
18304
- const sensors = await promptSensors();
18305
- if (sensors === undefined) {
19199
+ const sensor = await promptSensor();
19200
+ if (sensor === undefined) {
18306
19201
  return { success: false, cancelled: true };
18307
19202
  }
18308
19203
  return {
@@ -18310,7 +19205,7 @@ async function promptImportApp(credentials, configuredEnvs) {
18310
19205
  name: result.appName,
18311
19206
  courses: result.courses,
18312
19207
  environment: result.environment,
18313
- sensors: sensors.length > 0 ? sensors : undefined
19208
+ sensor
18314
19209
  };
18315
19210
  } catch (error48) {
18316
19211
  const message = error48 instanceof Error ? error48.message : "Unknown error";
@@ -18340,7 +19235,7 @@ async function promptNoConfig(credentials, configuredEnvs, opts = {}) {
18340
19235
  // src/cli/commands/serve/config.ts
18341
19236
  import { basename as basename2 } from "node:path";
18342
19237
  function buildUserConfigFromImport(result) {
18343
- const { name, courses, sensors } = result;
19238
+ const { name, courses, sensor } = result;
18344
19239
  const courseIds = {
18345
19240
  staging: [],
18346
19241
  production: []
@@ -18353,8 +19248,8 @@ function buildUserConfigFromImport(result) {
18353
19248
  }
18354
19249
  return {
18355
19250
  name,
19251
+ sensor,
18356
19252
  courses,
18357
- sensors,
18358
19253
  version: "0.0.0",
18359
19254
  path: "",
18360
19255
  courseIds
@@ -18428,21 +19323,20 @@ async function resolveFromConfigOrImport(credentials, configuredEnvs, defaultEnv
18428
19323
  function parseSensors(sensors) {
18429
19324
  return sensors.split(",").map((s) => s.trim()).filter(Boolean);
18430
19325
  }
18431
- function applyCliOverrides(config3, opts) {
19326
+ function getEffectiveSensors(config3, opts) {
18432
19327
  if (opts.sensors) {
18433
- config3.sensors = parseSensors(opts.sensors);
19328
+ return parseSensors(opts.sensors);
18434
19329
  }
19330
+ const derived = deriveSensorsFromConfig(config3);
19331
+ return derived.length > 0 ? derived : undefined;
18435
19332
  }
18436
19333
  async function resolveConfig(courseIds, opts, credentials, configuredEnvs, defaultEnv) {
18437
19334
  const parserOpts = { playcademy: opts.playcademy };
18438
19335
  const resolved = courseIds.length > 0 ? await resolveFromCourseIds(courseIds, defaultEnv, credentials, configuredEnvs) : await resolveFromConfigOrImport(credentials, configuredEnvs, defaultEnv, parserOpts);
18439
- if (!resolved)
18440
- return null;
18441
- applyCliOverrides(resolved.userConfig, opts);
18442
19336
  return resolved;
18443
19337
  }
18444
19338
 
18445
- // ../../node_modules/.bun/@hono+node-server@1.19.8+fd698e00a3b2abce/node_modules/@hono/node-server/dist/index.mjs
19339
+ // ../../node_modules/.bun/@hono+node-server@1.19.9+fd698e00a3b2abce/node_modules/@hono/node-server/dist/index.mjs
18446
19340
  import { createServer as createServerHTTP } from "http";
18447
19341
  import { Http2ServerRequest as Http2ServerRequest2 } from "http2";
18448
19342
  import { Http2ServerRequest } from "http2";
@@ -18751,17 +19645,9 @@ var buildOutgoingHttpHeaders = (headers) => {
18751
19645
  return res;
18752
19646
  };
18753
19647
  var X_ALREADY_SENT = "x-hono-already-sent";
18754
- var webFetch = global.fetch;
18755
19648
  if (typeof global.crypto === "undefined") {
18756
19649
  global.crypto = crypto;
18757
19650
  }
18758
- global.fetch = (info, init2) => {
18759
- init2 = {
18760
- compress: false,
18761
- ...init2
18762
- };
18763
- return webFetch(info, init2);
18764
- };
18765
19651
  var outgoingEnded = Symbol("outgoingEnded");
18766
19652
  var handleRequestError = () => new Response(null, {
18767
19653
  status: 400
@@ -21584,7 +22470,7 @@ function createEnvMiddleware(ctx, manager) {
21584
22470
  }, 400);
21585
22471
  }
21586
22472
  const client = manager.get(env2);
21587
- const sensors = ctx.userConfig.sensors;
22473
+ const sensors = ctx.derivedSensors;
21588
22474
  c.set("env", env2);
21589
22475
  c.set("client", client);
21590
22476
  c.set("sensors", sensors);
@@ -22123,7 +23009,8 @@ async function serveCommand(courseIds, opts) {
22123
23009
  serverConfig,
22124
23010
  userConfig: resolved.userConfig,
22125
23011
  credentials,
22126
- defaultEnvironment: resolved.environment
23012
+ defaultEnvironment: resolved.environment,
23013
+ derivedSensors: getEffectiveSensors(resolved.userConfig, opts)
22127
23014
  };
22128
23015
  startServer(ctx, serverConfig, resolved.configFile);
22129
23016
  }