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/index.js CHANGED
@@ -14776,7 +14776,7 @@ async function loadCredentials(environment) {
14776
14776
  }
14777
14777
  // ../internal/cli-infra/src/ui.ts
14778
14778
  function intro(title) {
14779
- console.log();
14779
+ console.log("");
14780
14780
  Ie(bgCyan(black(` ${title} `)));
14781
14781
  }
14782
14782
  var outro = {
@@ -14819,8 +14819,11 @@ var playcademyParser = {
14819
14819
  import { existsSync } from "node:fs";
14820
14820
  import { readFile as readFile2 } from "node:fs/promises";
14821
14821
  import { basename, relative, resolve } from "node:path";
14822
- import { createJiti } from "jiti";
14822
+ import { pathToFileURL } from "node:url";
14823
14823
  // ../types/src/zod/primitives.ts
14824
+ var IsoDateTimeRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/;
14825
+ var IsoDateTimeString = exports_external.string().min(1).regex(IsoDateTimeRegex, "must be a valid ISO 8601 datetime");
14826
+ var IsoDateString = exports_external.string().min(1).regex(/^\d{4}-\d{2}-\d{2}$/, "must be a valid ISO 8601 date (YYYY-MM-DD)");
14824
14827
  var TimebackSubject = exports_external.enum([
14825
14828
  "Reading",
14826
14829
  "Language",
@@ -14830,7 +14833,8 @@ var TimebackSubject = exports_external.enum([
14830
14833
  "Science",
14831
14834
  "FastMath",
14832
14835
  "Math",
14833
- "None"
14836
+ "None",
14837
+ "Other"
14834
14838
  ]);
14835
14839
  var TimebackGrade = exports_external.union([
14836
14840
  exports_external.literal(-1),
@@ -14875,6 +14879,47 @@ var OneRosterUserRole = exports_external.enum([
14875
14879
  "teacher"
14876
14880
  ]);
14877
14881
  var EnrollmentRole = exports_external.enum(["administrator", "proctor", "student", "teacher"]);
14882
+ var ResourceType = exports_external.enum([
14883
+ "qti",
14884
+ "text",
14885
+ "audio",
14886
+ "video",
14887
+ "interactive",
14888
+ "visual",
14889
+ "course-material",
14890
+ "assessment-bank"
14891
+ ]);
14892
+ var QtiSubType = exports_external.enum(["qti-test", "qti-question", "qti-stimulus", "qti-test-bank"]);
14893
+ var CourseMaterialSubType = exports_external.enum(["unit", "course", "resource-collection"]);
14894
+ var QuestionType = exports_external.enum([
14895
+ "choice",
14896
+ "order",
14897
+ "associate",
14898
+ "match",
14899
+ "hotspot",
14900
+ "hottext",
14901
+ "select-point",
14902
+ "graphic-order",
14903
+ "graphic-associate",
14904
+ "graphic-gap-match",
14905
+ "text-entry",
14906
+ "extended-text",
14907
+ "inline-choice",
14908
+ "upload",
14909
+ "slider",
14910
+ "drawing",
14911
+ "media",
14912
+ "custom"
14913
+ ]);
14914
+ var Difficulty = exports_external.enum(["easy", "medium", "hard"]);
14915
+ var LearningObjectiveSetSchema = exports_external.array(exports_external.object({
14916
+ source: exports_external.string(),
14917
+ learningObjectiveIds: exports_external.array(exports_external.string())
14918
+ }));
14919
+ var FastFailConfigSchema = exports_external.object({
14920
+ consecutive_failures: exports_external.number().int().min(1).optional(),
14921
+ stagnation_limit: exports_external.number().int().min(1).optional()
14922
+ }).optional();
14878
14923
  var LessonType = exports_external.enum(["powerpath-100", "quiz", "test-out", "placement", "unit-test", "alpha-read-article"]).nullable();
14879
14924
  var IMSErrorResponse = exports_external.object({
14880
14925
  imsx_codeMajor: exports_external.enum(["failure", "success"]),
@@ -14897,16 +14942,16 @@ var TimebackActivityContext = exports_external.object({
14897
14942
  id: exports_external.string(),
14898
14943
  type: exports_external.literal("TimebackActivityContext"),
14899
14944
  subject: TimebackSubject,
14900
- app: exports_external.object({ name: exports_external.string() }).optional(),
14901
- activity: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string().optional() }).optional(),
14902
- course: exports_external.object({ id: exports_external.string(), name: exports_external.string() }),
14945
+ app: exports_external.object({ name: exports_external.string() }),
14946
+ activity: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string() }).strict().optional(),
14947
+ course: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string() }).strict().optional(),
14903
14948
  process: exports_external.boolean().optional()
14904
14949
  });
14905
14950
  var CaliperEventBase = exports_external.object({
14906
14951
  "@context": exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
14907
14952
  id: exports_external.string(),
14908
14953
  type: exports_external.string(),
14909
- eventTime: exports_external.string(),
14954
+ eventTime: IsoDateTimeString,
14910
14955
  profile: exports_external.literal("TimebackProfile"),
14911
14956
  actor: TimebackUser,
14912
14957
  action: exports_external.string(),
@@ -14944,13 +14989,99 @@ var TimebackTimeSpentEvent = CaliperEventBase.extend({
14944
14989
  action: exports_external.literal("SpentTime"),
14945
14990
  generated: TimebackTimeSpentMetricsCollection
14946
14991
  });
14992
+ var ActivityCompletedInput = exports_external.object({
14993
+ actor: TimebackUser,
14994
+ object: TimebackActivityContext,
14995
+ metrics: exports_external.array(TimebackActivityMetric).min(1, "metrics must contain at least one metric"),
14996
+ eventTime: IsoDateTimeString.optional(),
14997
+ metricsId: exports_external.string().optional(),
14998
+ id: exports_external.string().optional(),
14999
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
15000
+ attempt: exports_external.number().int().min(1).optional(),
15001
+ generatedExtensions: exports_external.object({
15002
+ pctCompleteApp: exports_external.number().optional()
15003
+ }).loose().optional()
15004
+ }).strict();
15005
+ var TimeSpentInput = exports_external.object({
15006
+ actor: TimebackUser,
15007
+ object: TimebackActivityContext,
15008
+ metrics: exports_external.array(TimebackTimeMetric).min(1, "metrics must contain at least one metric"),
15009
+ eventTime: IsoDateTimeString.optional(),
15010
+ metricsId: exports_external.string().optional(),
15011
+ id: exports_external.string().optional(),
15012
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15013
+ }).strict();
14947
15014
  var TimebackEvent = exports_external.union([TimebackActivityEvent, TimebackTimeSpentEvent]);
14948
15015
  var CaliperEnvelope = exports_external.object({
14949
15016
  sensor: exports_external.string(),
14950
- sendTime: exports_external.string(),
15017
+ sendTime: IsoDateTimeString,
14951
15018
  dataVersion: exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
14952
15019
  data: exports_external.array(TimebackEvent)
14953
15020
  });
15021
+ var CaliperProfile = exports_external.enum([
15022
+ "AnnotationProfile",
15023
+ "AssessmentProfile",
15024
+ "ToolUseProfile",
15025
+ "GeneralProfile",
15026
+ "FeedbackProfile",
15027
+ "MediaProfile",
15028
+ "SurveyProfile",
15029
+ "ResourceManagementProfile",
15030
+ "ForumProfile",
15031
+ "AssignableProfile",
15032
+ "GradingProfile",
15033
+ "ReadingProfile",
15034
+ "SessionProfile",
15035
+ "SearchProfile",
15036
+ "ToolLaunchProfile",
15037
+ "TimebackProfile"
15038
+ ]);
15039
+ var CaliperEntity = exports_external.union([exports_external.string(), exports_external.record(exports_external.string(), exports_external.unknown())]);
15040
+ var CaliperActor = exports_external.object({
15041
+ id: exports_external.string(),
15042
+ type: exports_external.string(),
15043
+ extensions: exports_external.object({
15044
+ email: exports_external.email()
15045
+ }).loose()
15046
+ }).strict();
15047
+ var CaliperEvent = exports_external.object({
15048
+ "@context": exports_external.string().optional(),
15049
+ id: exports_external.string(),
15050
+ type: exports_external.string(),
15051
+ actor: exports_external.union([exports_external.string(), CaliperActor, TimebackUser]),
15052
+ action: exports_external.string(),
15053
+ object: CaliperEntity,
15054
+ eventTime: IsoDateTimeString,
15055
+ profile: CaliperProfile,
15056
+ edApp: CaliperEntity.optional(),
15057
+ generated: CaliperEntity.optional(),
15058
+ target: CaliperEntity.optional(),
15059
+ referrer: CaliperEntity.optional(),
15060
+ group: CaliperEntity.optional(),
15061
+ membership: CaliperEntity.optional(),
15062
+ session: CaliperEntity.optional(),
15063
+ federatedSession: CaliperEntity.optional(),
15064
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15065
+ }).strict();
15066
+ var CaliperEnvelopeInput = exports_external.object({
15067
+ sensor: exports_external.string().min(1, "sensor must be a non-empty string"),
15068
+ sendTime: IsoDateTimeString,
15069
+ dataVersion: exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
15070
+ data: exports_external.array(CaliperEvent).min(1, "data must contain at least one event")
15071
+ });
15072
+ var CaliperSendEventsInput = exports_external.object({
15073
+ sensor: exports_external.string().min(1, "sensor must be a non-empty string"),
15074
+ events: exports_external.array(CaliperEvent).min(1, "events must contain at least one event")
15075
+ });
15076
+ var CaliperListEventsParams = exports_external.object({
15077
+ limit: exports_external.number().int().positive().optional(),
15078
+ offset: exports_external.number().int().min(0).optional(),
15079
+ sensor: exports_external.string().min(1).optional(),
15080
+ startDate: IsoDateTimeString.optional(),
15081
+ endDate: IsoDateTimeString.optional(),
15082
+ actorId: exports_external.string().min(1).optional(),
15083
+ actorEmail: exports_external.email().optional()
15084
+ }).strict();
14954
15085
  // ../types/src/zod/config.ts
14955
15086
  var CourseIds = exports_external.object({
14956
15087
  staging: exports_external.string().optional(),
@@ -14985,23 +15116,67 @@ var CourseDefaults = exports_external.object({
14985
15116
  level: exports_external.string().optional(),
14986
15117
  metadata: CourseMetadata.optional()
14987
15118
  });
15119
+ var CourseEnvOverrides = exports_external.object({
15120
+ level: exports_external.string().optional(),
15121
+ sensor: exports_external.string().url().optional(),
15122
+ launchUrl: exports_external.string().url().optional(),
15123
+ metadata: CourseMetadata.optional()
15124
+ });
15125
+ var CourseOverrides = exports_external.object({
15126
+ staging: CourseEnvOverrides.optional(),
15127
+ production: CourseEnvOverrides.optional()
15128
+ });
14988
15129
  var CourseConfig = CourseDefaults.extend({
14989
15130
  subject: TimebackSubject,
14990
- grade: TimebackGrade,
14991
- ids: CourseIds.nullable().optional()
15131
+ grade: TimebackGrade.optional(),
15132
+ ids: CourseIds.nullable().optional(),
15133
+ sensor: exports_external.string().url().optional(),
15134
+ launchUrl: exports_external.string().url().optional(),
15135
+ overrides: CourseOverrides.optional()
14992
15136
  });
14993
15137
  var TimebackConfig = exports_external.object({
14994
15138
  name: exports_external.string().min(1, "App name is required"),
14995
15139
  defaults: CourseDefaults.optional(),
14996
15140
  courses: exports_external.array(CourseConfig).min(1, "At least one course is required"),
14997
- sensors: exports_external.array(exports_external.string().url()).optional()
15141
+ sensor: exports_external.string().url().optional(),
15142
+ launchUrl: exports_external.string().url().optional()
15143
+ }).refine((config2) => {
15144
+ return config2.courses.every((c) => c.grade !== undefined || c.courseCode !== undefined);
15145
+ }, {
15146
+ message: "Each course must have either a grade or a courseCode",
15147
+ path: ["courses"]
15148
+ }).refine((config2) => {
15149
+ const withGrade = config2.courses.filter((c) => c.grade !== undefined);
15150
+ const keys = withGrade.map((c) => `${c.subject}:${c.grade}`);
15151
+ return new Set(keys).size === keys.length;
15152
+ }, {
15153
+ message: "Duplicate (subject, grade) pair found; each must be unique",
15154
+ path: ["courses"]
15155
+ }).refine((config2) => {
15156
+ const withCode = config2.courses.filter((c) => c.courseCode !== undefined);
15157
+ const codes = withCode.map((c) => c.courseCode);
15158
+ return new Set(codes).size === codes.length;
15159
+ }, {
15160
+ message: "Duplicate courseCode found; each must be unique",
15161
+ path: ["courses"]
15162
+ }).refine((config2) => {
15163
+ return config2.courses.every((c) => c.sensor !== undefined || config2.sensor !== undefined);
15164
+ }, {
15165
+ message: "Each course must have an effective sensor; set a top-level `sensor` or per-course `sensor`",
15166
+ path: ["courses"]
15167
+ }).refine((config2) => {
15168
+ return config2.courses.every((c) => c.launchUrl !== undefined || config2.launchUrl !== undefined);
15169
+ }, {
15170
+ message: "Each course must have an effective launchUrl; set a top-level `launchUrl` or per-course `launchUrl`",
15171
+ path: ["courses"]
14998
15172
  });
14999
15173
  // ../types/src/zod/edubridge.ts
15174
+ var EdubridgeDateString = exports_external.union([IsoDateString, IsoDateTimeString]);
15000
15175
  var EduBridgeEnrollment = exports_external.object({
15001
15176
  id: exports_external.string(),
15002
15177
  role: exports_external.string(),
15003
- beginDate: exports_external.string().nullable(),
15004
- endDate: exports_external.string().nullable(),
15178
+ beginDate: EdubridgeDateString.nullable(),
15179
+ endDate: EdubridgeDateString.nullable(),
15005
15180
  metadata: exports_external.object({
15006
15181
  goals: exports_external.object({ dailyXp: exports_external.number().optional() }).optional(),
15007
15182
  metrics: exports_external.object({ totalXp: exports_external.number().optional(), totalLessons: exports_external.number().optional() }).optional()
@@ -15035,17 +15210,699 @@ var EduBridgeAnalyticsFacts = exports_external.record(exports_external.string(),
15035
15210
  var EduBridgeEnrollmentAnalyticsResponse = exports_external.object({
15036
15211
  message: exports_external.string(),
15037
15212
  enrollmentId: exports_external.string(),
15038
- startDate: exports_external.string(),
15039
- endDate: exports_external.string(),
15213
+ startDate: EdubridgeDateString,
15214
+ endDate: EdubridgeDateString,
15040
15215
  facts: EduBridgeAnalyticsFacts,
15041
15216
  factsByApp: exports_external.unknown()
15042
15217
  });
15218
+ var NonEmptyString = exports_external.string().trim().min(1);
15219
+ var EmailOrStudentId = exports_external.object({
15220
+ email: exports_external.email().optional(),
15221
+ studentId: NonEmptyString.optional()
15222
+ }).superRefine((value, ctx) => {
15223
+ if (!value.email && !value.studentId) {
15224
+ ctx.addIssue({
15225
+ code: exports_external.ZodIssueCode.custom,
15226
+ message: "must provide either email or studentId",
15227
+ path: ["email"]
15228
+ });
15229
+ ctx.addIssue({
15230
+ code: exports_external.ZodIssueCode.custom,
15231
+ message: "must provide either email or studentId",
15232
+ path: ["studentId"]
15233
+ });
15234
+ }
15235
+ });
15043
15236
  var SubjectTrackInput = exports_external.object({
15044
- subject: exports_external.string(),
15045
- gradeLevel: exports_external.string(),
15046
- targetCourseId: exports_external.string(),
15237
+ subject: NonEmptyString,
15238
+ gradeLevel: NonEmptyString,
15239
+ targetCourseId: NonEmptyString,
15047
15240
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15048
15241
  });
15242
+ var SubjectTrackUpsertInput = SubjectTrackInput.extend({
15243
+ id: NonEmptyString
15244
+ });
15245
+ var EdubridgeListEnrollmentsParams = exports_external.object({
15246
+ userId: NonEmptyString
15247
+ });
15248
+ var EdubridgeEnrollOptions = exports_external.object({
15249
+ sourcedId: NonEmptyString.optional(),
15250
+ role: EnrollmentRole.optional(),
15251
+ beginDate: EdubridgeDateString.optional(),
15252
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15253
+ });
15254
+ var EdubridgeUsersListParams = exports_external.object({
15255
+ fields: exports_external.string().optional(),
15256
+ limit: exports_external.number().int().positive().optional(),
15257
+ offset: exports_external.number().int().nonnegative().optional(),
15258
+ sort: exports_external.string().optional(),
15259
+ orderBy: exports_external.enum(["asc", "desc"]).optional(),
15260
+ filter: exports_external.string().optional(),
15261
+ search: exports_external.string().optional(),
15262
+ roles: exports_external.array(OneRosterUserRole).min(1),
15263
+ orgSourcedIds: exports_external.array(NonEmptyString).optional()
15264
+ });
15265
+ var EdubridgeActivityParams = EmailOrStudentId.extend({
15266
+ startDate: EdubridgeDateString,
15267
+ endDate: EdubridgeDateString,
15268
+ timezone: exports_external.string().optional()
15269
+ });
15270
+ var EdubridgeWeeklyFactsParams = EmailOrStudentId.extend({
15271
+ weekDate: EdubridgeDateString,
15272
+ timezone: exports_external.string().optional()
15273
+ });
15274
+ var EdubridgeEnrollmentFactsParams = exports_external.object({
15275
+ enrollmentId: NonEmptyString,
15276
+ startDate: EdubridgeDateString.optional(),
15277
+ endDate: EdubridgeDateString.optional(),
15278
+ timezone: exports_external.string().optional()
15279
+ });
15280
+ // ../types/src/zod/oneroster.ts
15281
+ var NonEmptyString2 = exports_external.string().min(1);
15282
+ var Status = exports_external.enum(["active", "tobedeleted"]);
15283
+ var Metadata = exports_external.record(exports_external.string(), exports_external.unknown()).nullable().optional();
15284
+ var Ref = exports_external.object({
15285
+ sourcedId: NonEmptyString2,
15286
+ type: exports_external.string().optional(),
15287
+ href: exports_external.string().optional()
15288
+ }).strict();
15289
+ var OneRosterDateString = exports_external.union([IsoDateString, IsoDateTimeString]);
15290
+ var OneRosterUserRoleInput = exports_external.object({
15291
+ roleType: exports_external.enum(["primary", "secondary"]),
15292
+ role: OneRosterUserRole,
15293
+ org: Ref,
15294
+ userProfile: exports_external.string().optional(),
15295
+ metadata: Metadata,
15296
+ beginDate: OneRosterDateString.optional(),
15297
+ endDate: OneRosterDateString.optional()
15298
+ }).strict();
15299
+ var OneRosterUserCreateInput = exports_external.object({
15300
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
15301
+ status: Status.optional(),
15302
+ enabledUser: exports_external.boolean(),
15303
+ givenName: NonEmptyString2.describe("givenName must be a non-empty string"),
15304
+ familyName: NonEmptyString2.describe("familyName must be a non-empty string"),
15305
+ middleName: NonEmptyString2.optional(),
15306
+ username: NonEmptyString2.optional(),
15307
+ email: exports_external.email().optional(),
15308
+ roles: exports_external.array(OneRosterUserRoleInput).min(1, "roles must include at least one role"),
15309
+ userIds: exports_external.array(exports_external.object({
15310
+ type: NonEmptyString2,
15311
+ identifier: NonEmptyString2
15312
+ }).strict()).optional(),
15313
+ agents: exports_external.array(Ref).optional(),
15314
+ grades: exports_external.array(TimebackGrade).optional(),
15315
+ identifier: NonEmptyString2.optional(),
15316
+ sms: NonEmptyString2.optional(),
15317
+ phone: NonEmptyString2.optional(),
15318
+ pronouns: NonEmptyString2.optional(),
15319
+ password: NonEmptyString2.optional(),
15320
+ metadata: Metadata
15321
+ }).strict();
15322
+ var OneRosterCourseCreateInput = exports_external.object({
15323
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
15324
+ status: Status.optional(),
15325
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15326
+ org: Ref,
15327
+ courseCode: NonEmptyString2.optional(),
15328
+ subjects: exports_external.array(TimebackSubject).optional(),
15329
+ grades: exports_external.array(TimebackGrade).optional(),
15330
+ level: NonEmptyString2.optional(),
15331
+ metadata: Metadata
15332
+ }).strict();
15333
+ var OneRosterClassCreateInput = exports_external.object({
15334
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
15335
+ status: Status.optional(),
15336
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15337
+ terms: exports_external.array(Ref).min(1, "terms must have at least one item"),
15338
+ course: Ref,
15339
+ org: Ref,
15340
+ classCode: NonEmptyString2.optional(),
15341
+ classType: exports_external.enum(["homeroom", "scheduled"]).optional(),
15342
+ location: NonEmptyString2.optional(),
15343
+ grades: exports_external.array(TimebackGrade).optional(),
15344
+ subjects: exports_external.array(TimebackSubject).optional(),
15345
+ subjectCodes: exports_external.array(NonEmptyString2).optional(),
15346
+ periods: exports_external.array(NonEmptyString2).optional(),
15347
+ metadata: Metadata
15348
+ }).strict();
15349
+ var StringBoolean = exports_external.enum(["true", "false"]);
15350
+ var OneRosterEnrollmentCreateInput = exports_external.object({
15351
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
15352
+ status: Status.optional(),
15353
+ user: Ref,
15354
+ class: Ref,
15355
+ school: Ref.optional(),
15356
+ role: OneRosterUserRole,
15357
+ primary: StringBoolean.optional(),
15358
+ beginDate: OneRosterDateString.optional(),
15359
+ endDate: OneRosterDateString.optional(),
15360
+ metadata: Metadata
15361
+ }).strict();
15362
+ var OneRosterCategoryCreateInput = exports_external.object({
15363
+ sourcedId: NonEmptyString2.optional(),
15364
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15365
+ status: Status,
15366
+ weight: exports_external.number().nullable().optional(),
15367
+ metadata: Metadata
15368
+ }).strict();
15369
+ var OneRosterLineItemCreateInput = exports_external.object({
15370
+ sourcedId: NonEmptyString2.optional(),
15371
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15372
+ class: Ref,
15373
+ school: Ref,
15374
+ category: Ref,
15375
+ assignDate: OneRosterDateString,
15376
+ dueDate: OneRosterDateString,
15377
+ status: Status,
15378
+ description: exports_external.string().optional(),
15379
+ resultValueMin: exports_external.number().nullable().optional(),
15380
+ resultValueMax: exports_external.number().nullable().optional(),
15381
+ scoreScale: Ref.optional(),
15382
+ metadata: Metadata
15383
+ }).strict();
15384
+ var OneRosterResultCreateInput = exports_external.object({
15385
+ sourcedId: NonEmptyString2.optional(),
15386
+ lineItem: Ref,
15387
+ student: Ref,
15388
+ class: Ref.optional(),
15389
+ scoreDate: OneRosterDateString,
15390
+ scoreStatus: exports_external.enum([
15391
+ "exempt",
15392
+ "fully graded",
15393
+ "not submitted",
15394
+ "partially graded",
15395
+ "submitted"
15396
+ ]),
15397
+ score: exports_external.number().nullable().optional(),
15398
+ textScore: exports_external.string().nullable().optional(),
15399
+ status: Status,
15400
+ comment: exports_external.string().nullable().optional(),
15401
+ metadata: Metadata
15402
+ }).strict();
15403
+ var OneRosterScoreScaleCreateInput = exports_external.object({
15404
+ sourcedId: NonEmptyString2.optional(),
15405
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15406
+ status: Status.optional(),
15407
+ type: exports_external.string().optional(),
15408
+ class: Ref.optional(),
15409
+ course: Ref.nullable().optional(),
15410
+ scoreScaleValue: exports_external.array(exports_external.object({
15411
+ itemValueLHS: NonEmptyString2,
15412
+ itemValueRHS: NonEmptyString2,
15413
+ value: exports_external.string().optional(),
15414
+ description: exports_external.string().optional()
15415
+ }).strict()).optional(),
15416
+ minScore: exports_external.number().optional(),
15417
+ maxScore: exports_external.number().optional(),
15418
+ metadata: Metadata
15419
+ }).strict();
15420
+ var OneRosterAssessmentLineItemCreateInput = exports_external.object({
15421
+ sourcedId: NonEmptyString2.optional(),
15422
+ status: Status.optional(),
15423
+ dateLastModified: IsoDateTimeString.optional(),
15424
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15425
+ description: exports_external.string().nullable().optional(),
15426
+ class: Ref.nullable().optional(),
15427
+ parentAssessmentLineItem: Ref.nullable().optional(),
15428
+ scoreScale: Ref.nullable().optional(),
15429
+ resultValueMin: exports_external.number().nullable().optional(),
15430
+ resultValueMax: exports_external.number().nullable().optional(),
15431
+ component: Ref.nullable().optional(),
15432
+ componentResource: Ref.nullable().optional(),
15433
+ learningObjectiveSet: exports_external.array(exports_external.object({
15434
+ source: exports_external.string(),
15435
+ learningObjectiveIds: exports_external.array(exports_external.string())
15436
+ })).optional().nullable(),
15437
+ course: Ref.nullable().optional(),
15438
+ metadata: Metadata
15439
+ }).strict();
15440
+ var LearningObjectiveResult = exports_external.object({
15441
+ learningObjectiveId: exports_external.string(),
15442
+ score: exports_external.number().optional(),
15443
+ textScore: exports_external.string().optional()
15444
+ });
15445
+ var LearningObjectiveScoreSetSchema = exports_external.array(exports_external.object({
15446
+ source: exports_external.string(),
15447
+ learningObjectiveResults: exports_external.array(LearningObjectiveResult)
15448
+ }));
15449
+ var OneRosterAssessmentResultCreateInput = exports_external.object({
15450
+ sourcedId: NonEmptyString2.optional(),
15451
+ status: Status.optional(),
15452
+ dateLastModified: IsoDateTimeString.optional(),
15453
+ metadata: Metadata,
15454
+ assessmentLineItem: Ref,
15455
+ student: Ref,
15456
+ score: exports_external.number().nullable().optional(),
15457
+ textScore: exports_external.string().nullable().optional(),
15458
+ scoreDate: exports_external.string().datetime(),
15459
+ scoreScale: Ref.nullable().optional(),
15460
+ scorePercentile: exports_external.number().nullable().optional(),
15461
+ scoreStatus: exports_external.enum([
15462
+ "exempt",
15463
+ "fully graded",
15464
+ "not submitted",
15465
+ "partially graded",
15466
+ "submitted"
15467
+ ]),
15468
+ comment: exports_external.string().nullable().optional(),
15469
+ learningObjectiveSet: LearningObjectiveScoreSetSchema.nullable().optional(),
15470
+ inProgress: exports_external.string().nullable().optional(),
15471
+ incomplete: exports_external.string().nullable().optional(),
15472
+ late: exports_external.string().nullable().optional(),
15473
+ missing: exports_external.string().nullable().optional()
15474
+ }).strict();
15475
+ var OneRosterOrgCreateInput = exports_external.object({
15476
+ sourcedId: NonEmptyString2.optional(),
15477
+ status: Status.optional(),
15478
+ name: NonEmptyString2.describe("name must be a non-empty string"),
15479
+ type: OrganizationType,
15480
+ identifier: NonEmptyString2.optional(),
15481
+ parent: Ref.optional(),
15482
+ metadata: Metadata
15483
+ }).strict();
15484
+ var OneRosterSchoolCreateInput = exports_external.object({
15485
+ sourcedId: NonEmptyString2.optional(),
15486
+ status: Status.optional(),
15487
+ name: NonEmptyString2.describe("name must be a non-empty string"),
15488
+ type: exports_external.literal("school").optional(),
15489
+ identifier: NonEmptyString2.optional(),
15490
+ parent: Ref.optional(),
15491
+ metadata: Metadata
15492
+ }).strict();
15493
+ var OneRosterAcademicSessionCreateInput = exports_external.object({
15494
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
15495
+ status: Status,
15496
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15497
+ startDate: OneRosterDateString,
15498
+ endDate: OneRosterDateString,
15499
+ type: exports_external.enum(["gradingPeriod", "semester", "schoolYear", "term"]),
15500
+ schoolYear: NonEmptyString2.describe("schoolYear must be a non-empty string"),
15501
+ org: Ref,
15502
+ parent: Ref.optional(),
15503
+ children: exports_external.array(Ref).optional(),
15504
+ metadata: Metadata
15505
+ }).strict();
15506
+ var OneRosterComponentResourceCreateInput = exports_external.object({
15507
+ sourcedId: NonEmptyString2.optional(),
15508
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15509
+ courseComponent: Ref,
15510
+ resource: Ref,
15511
+ status: Status,
15512
+ metadata: Metadata
15513
+ }).strict();
15514
+ var OneRosterCourseComponentCreateInput = exports_external.object({
15515
+ sourcedId: NonEmptyString2.optional(),
15516
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15517
+ course: Ref,
15518
+ status: Status,
15519
+ metadata: Metadata
15520
+ }).strict();
15521
+ var OneRosterEnrollInput = exports_external.object({
15522
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
15523
+ role: exports_external.enum(["student", "teacher"]),
15524
+ primary: StringBoolean.optional(),
15525
+ beginDate: OneRosterDateString.optional(),
15526
+ endDate: OneRosterDateString.optional(),
15527
+ metadata: Metadata
15528
+ }).strict();
15529
+ var OneRosterAgentInput = exports_external.object({
15530
+ agentSourcedId: NonEmptyString2.describe("agentSourcedId must be a non-empty string")
15531
+ }).strict();
15532
+ var OneRosterCredentialInput = exports_external.object({
15533
+ type: NonEmptyString2.describe("type must be a non-empty string"),
15534
+ username: NonEmptyString2.describe("username must be a non-empty string"),
15535
+ password: exports_external.string().optional(),
15536
+ metadata: Metadata
15537
+ }).strict();
15538
+ var OneRosterDemographicsCreateInput = exports_external.object({
15539
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string")
15540
+ }).loose();
15541
+ var CommonResourceMetadataSchema = exports_external.object({
15542
+ type: ResourceType,
15543
+ subject: TimebackSubject.nullish(),
15544
+ grades: exports_external.array(TimebackGrade).nullish(),
15545
+ language: exports_external.string().nullish(),
15546
+ xp: exports_external.number().nullish(),
15547
+ url: exports_external.url().nullish(),
15548
+ keywords: exports_external.array(exports_external.string()).nullish(),
15549
+ learningObjectiveSet: LearningObjectiveSetSchema.nullish(),
15550
+ lessonType: exports_external.string().nullish()
15551
+ }).passthrough();
15552
+ var QtiMetadataSchema = CommonResourceMetadataSchema.extend({
15553
+ type: exports_external.literal("qti"),
15554
+ subType: QtiSubType,
15555
+ questionType: QuestionType.optional(),
15556
+ difficulty: Difficulty.optional()
15557
+ });
15558
+ var TextMetadataSchema = CommonResourceMetadataSchema.extend({
15559
+ type: exports_external.literal("text"),
15560
+ format: exports_external.string(),
15561
+ author: exports_external.string().optional(),
15562
+ pageCount: exports_external.number().optional()
15563
+ });
15564
+ var AudioMetadataSchema = CommonResourceMetadataSchema.extend({
15565
+ type: exports_external.literal("audio"),
15566
+ duration: exports_external.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),
15567
+ format: exports_external.string(),
15568
+ speaker: exports_external.string().optional()
15569
+ });
15570
+ var VideoMetadataSchema = CommonResourceMetadataSchema.extend({
15571
+ type: exports_external.literal("video"),
15572
+ duration: exports_external.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),
15573
+ captionsAvailable: exports_external.boolean().optional(),
15574
+ format: exports_external.string()
15575
+ });
15576
+ var InteractiveMetadataSchema = CommonResourceMetadataSchema.extend({
15577
+ type: exports_external.literal("interactive"),
15578
+ launchUrl: exports_external.url().optional(),
15579
+ toolProvider: exports_external.string().optional(),
15580
+ instructionalMethod: exports_external.string().optional(),
15581
+ courseIdOnFail: exports_external.string().nullable().optional(),
15582
+ fail_fast: FastFailConfigSchema
15583
+ });
15584
+ var VisualMetadataSchema = CommonResourceMetadataSchema.extend({
15585
+ type: exports_external.literal("visual"),
15586
+ format: exports_external.string(),
15587
+ resolution: exports_external.string().optional()
15588
+ });
15589
+ var CourseMaterialMetadataSchema = CommonResourceMetadataSchema.extend({
15590
+ type: exports_external.literal("course-material"),
15591
+ subType: CourseMaterialSubType,
15592
+ author: exports_external.string().optional(),
15593
+ format: exports_external.string(),
15594
+ instructionalMethod: exports_external.string().optional()
15595
+ });
15596
+ var AssessmentBankMetadataSchema = CommonResourceMetadataSchema.extend({
15597
+ type: exports_external.literal("assessment-bank"),
15598
+ resources: exports_external.array(exports_external.string())
15599
+ });
15600
+ var ResourceMetadataSchema = exports_external.discriminatedUnion("type", [
15601
+ QtiMetadataSchema,
15602
+ TextMetadataSchema,
15603
+ AudioMetadataSchema,
15604
+ VideoMetadataSchema,
15605
+ InteractiveMetadataSchema,
15606
+ VisualMetadataSchema,
15607
+ CourseMaterialMetadataSchema,
15608
+ AssessmentBankMetadataSchema
15609
+ ]);
15610
+ var OneRosterResourceCreateInput = exports_external.object({
15611
+ sourcedId: NonEmptyString2.optional(),
15612
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15613
+ vendorResourceId: NonEmptyString2.describe("vendorResourceId must be a non-empty string"),
15614
+ roles: exports_external.array(exports_external.enum(["primary", "secondary"])).optional(),
15615
+ importance: exports_external.enum(["primary", "secondary"]).optional(),
15616
+ vendorId: exports_external.string().optional(),
15617
+ applicationId: exports_external.string().optional(),
15618
+ status: Status.optional(),
15619
+ metadata: ResourceMetadataSchema.nullable().optional()
15620
+ }).strict();
15621
+ var CourseStructureItem = exports_external.object({
15622
+ url: NonEmptyString2.describe("courseStructure.url must be a non-empty string"),
15623
+ skillCode: NonEmptyString2.describe("courseStructure.skillCode must be a non-empty string"),
15624
+ lessonCode: NonEmptyString2.describe("courseStructure.lessonCode must be a non-empty string"),
15625
+ title: NonEmptyString2.describe("courseStructure.title must be a non-empty string"),
15626
+ "unit-title": NonEmptyString2.describe("courseStructure.unit-title must be a non-empty string"),
15627
+ status: NonEmptyString2.describe("courseStructure.status must be a non-empty string"),
15628
+ xp: exports_external.number()
15629
+ }).loose();
15630
+ var OneRosterCourseStructureInput = exports_external.object({
15631
+ course: exports_external.object({
15632
+ sourcedId: NonEmptyString2.describe("course.sourcedId must be a non-empty string").optional(),
15633
+ title: NonEmptyString2.describe("course.title must be a non-empty string"),
15634
+ org: Ref,
15635
+ status: Status,
15636
+ metadata: Metadata
15637
+ }).strict(),
15638
+ courseStructure: exports_external.record(exports_external.string(), CourseStructureItem)
15639
+ }).strict();
15640
+ var OneRosterBulkResultItem = exports_external.object({
15641
+ student: Ref
15642
+ }).loose();
15643
+ var OneRosterBulkResultsInput = exports_external.array(OneRosterBulkResultItem).min(1, "results must have at least one item");
15644
+ // ../types/src/zod/powerpath.ts
15645
+ var NonEmptyString3 = exports_external.string().trim().min(1);
15646
+ var ToolProvider = exports_external.enum(["edulastic", "mastery-track"]);
15647
+ var LessonTypeRequired = exports_external.enum([
15648
+ "powerpath-100",
15649
+ "quiz",
15650
+ "test-out",
15651
+ "placement",
15652
+ "unit-test",
15653
+ "alpha-read-article"
15654
+ ]);
15655
+ var GradeArray = exports_external.array(TimebackGrade);
15656
+ var ResourceMetadata = exports_external.record(exports_external.string(), exports_external.unknown()).optional();
15657
+ var ExternalTestBase = exports_external.object({
15658
+ courseId: NonEmptyString3,
15659
+ lessonTitle: NonEmptyString3.optional(),
15660
+ launchUrl: exports_external.url().optional(),
15661
+ toolProvider: ToolProvider,
15662
+ unitTitle: NonEmptyString3.optional(),
15663
+ courseComponentSourcedId: NonEmptyString3.optional(),
15664
+ vendorId: NonEmptyString3.optional(),
15665
+ description: NonEmptyString3.optional(),
15666
+ resourceMetadata: ResourceMetadata.nullable().optional(),
15667
+ grades: GradeArray
15668
+ });
15669
+ var ExternalTestOut = ExternalTestBase.extend({
15670
+ lessonType: exports_external.literal("test-out"),
15671
+ xp: exports_external.number()
15672
+ });
15673
+ var ExternalPlacement = ExternalTestBase.extend({
15674
+ lessonType: exports_external.literal("placement"),
15675
+ courseIdOnFail: NonEmptyString3.optional(),
15676
+ xp: exports_external.number().optional()
15677
+ });
15678
+ var InternalTestBase = exports_external.object({
15679
+ courseId: NonEmptyString3,
15680
+ lessonType: LessonTypeRequired,
15681
+ lessonTitle: NonEmptyString3.optional(),
15682
+ unitTitle: NonEmptyString3.optional(),
15683
+ courseComponentSourcedId: NonEmptyString3.optional(),
15684
+ resourceMetadata: ResourceMetadata.nullable().optional(),
15685
+ xp: exports_external.number().optional(),
15686
+ grades: GradeArray.optional(),
15687
+ courseIdOnFail: NonEmptyString3.optional()
15688
+ });
15689
+ var PowerPathCreateInternalTestInput = exports_external.union([
15690
+ InternalTestBase.extend({
15691
+ testType: exports_external.literal("qti"),
15692
+ qti: exports_external.object({
15693
+ url: exports_external.url(),
15694
+ title: NonEmptyString3.optional(),
15695
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15696
+ })
15697
+ }),
15698
+ InternalTestBase.extend({
15699
+ testType: exports_external.literal("assessment-bank"),
15700
+ assessmentBank: exports_external.object({
15701
+ resources: exports_external.array(exports_external.object({
15702
+ url: exports_external.url(),
15703
+ title: NonEmptyString3.optional(),
15704
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15705
+ }))
15706
+ })
15707
+ })
15708
+ ]);
15709
+ var PowerPathCreateNewAttemptInput = exports_external.object({
15710
+ student: NonEmptyString3,
15711
+ lesson: NonEmptyString3
15712
+ });
15713
+ var PowerPathFinalStudentAssessmentResponseInput = exports_external.object({
15714
+ student: NonEmptyString3,
15715
+ lesson: NonEmptyString3
15716
+ });
15717
+ var PowerPathLessonPlansCreateInput = exports_external.object({
15718
+ courseId: NonEmptyString3,
15719
+ userId: NonEmptyString3,
15720
+ classId: NonEmptyString3.optional()
15721
+ });
15722
+ var LessonPlanTarget = exports_external.object({
15723
+ type: exports_external.enum(["component", "resource"]),
15724
+ id: NonEmptyString3
15725
+ });
15726
+ var PowerPathLessonPlanOperationInput = exports_external.union([
15727
+ exports_external.object({
15728
+ type: exports_external.literal("set-skipped"),
15729
+ payload: exports_external.object({
15730
+ target: LessonPlanTarget,
15731
+ value: exports_external.boolean()
15732
+ })
15733
+ }),
15734
+ exports_external.object({
15735
+ type: exports_external.literal("add-custom-resource"),
15736
+ payload: exports_external.object({
15737
+ resource_id: NonEmptyString3,
15738
+ parent_component_id: NonEmptyString3,
15739
+ skipped: exports_external.boolean().optional()
15740
+ })
15741
+ }),
15742
+ exports_external.object({
15743
+ type: exports_external.literal("move-item-before"),
15744
+ payload: exports_external.object({
15745
+ target: LessonPlanTarget,
15746
+ reference_id: NonEmptyString3
15747
+ })
15748
+ }),
15749
+ exports_external.object({
15750
+ type: exports_external.literal("move-item-after"),
15751
+ payload: exports_external.object({
15752
+ target: LessonPlanTarget,
15753
+ reference_id: NonEmptyString3
15754
+ })
15755
+ }),
15756
+ exports_external.object({
15757
+ type: exports_external.literal("move-item-to-start"),
15758
+ payload: exports_external.object({
15759
+ target: LessonPlanTarget
15760
+ })
15761
+ }),
15762
+ exports_external.object({
15763
+ type: exports_external.literal("move-item-to-end"),
15764
+ payload: exports_external.object({
15765
+ target: LessonPlanTarget
15766
+ })
15767
+ }),
15768
+ exports_external.object({
15769
+ type: exports_external.literal("change-item-parent"),
15770
+ payload: exports_external.object({
15771
+ target: LessonPlanTarget,
15772
+ new_parent_id: NonEmptyString3,
15773
+ position: exports_external.enum(["start", "end"]).optional()
15774
+ })
15775
+ })
15776
+ ]);
15777
+ var PowerPathLessonPlanOperationsInput = exports_external.object({
15778
+ operation: exports_external.array(PowerPathLessonPlanOperationInput),
15779
+ reason: NonEmptyString3.optional()
15780
+ });
15781
+ var PowerPathLessonPlanUpdateStudentItemResponseInput = exports_external.object({
15782
+ studentId: NonEmptyString3,
15783
+ componentResourceId: NonEmptyString3,
15784
+ result: exports_external.object({
15785
+ status: exports_external.enum(["active", "tobedeleted"]),
15786
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
15787
+ score: exports_external.number().optional(),
15788
+ textScore: NonEmptyString3.optional(),
15789
+ scoreDate: NonEmptyString3,
15790
+ scorePercentile: exports_external.number().optional(),
15791
+ scoreStatus: ScoreStatus,
15792
+ comment: NonEmptyString3.optional(),
15793
+ learningObjectiveSet: exports_external.array(exports_external.object({
15794
+ source: NonEmptyString3,
15795
+ learningObjectiveResults: exports_external.array(exports_external.object({
15796
+ learningObjectiveId: NonEmptyString3,
15797
+ score: exports_external.number().optional(),
15798
+ textScore: NonEmptyString3.optional()
15799
+ }))
15800
+ })).optional(),
15801
+ inProgress: NonEmptyString3.optional(),
15802
+ incomplete: NonEmptyString3.optional(),
15803
+ late: NonEmptyString3.optional(),
15804
+ missing: NonEmptyString3.optional()
15805
+ })
15806
+ });
15807
+ var PowerPathMakeExternalTestAssignmentInput = exports_external.object({
15808
+ student: NonEmptyString3,
15809
+ lesson: NonEmptyString3,
15810
+ applicationName: NonEmptyString3.optional(),
15811
+ testId: NonEmptyString3.optional(),
15812
+ skipCourseEnrollment: exports_external.boolean().optional()
15813
+ });
15814
+ var PowerPathPlacementResetUserPlacementInput = exports_external.object({
15815
+ student: NonEmptyString3,
15816
+ subject: TimebackSubject
15817
+ });
15818
+ var PowerPathResetAttemptInput = exports_external.object({
15819
+ student: NonEmptyString3,
15820
+ lesson: NonEmptyString3
15821
+ });
15822
+ var PowerPathScreeningResetSessionInput = exports_external.object({
15823
+ userId: NonEmptyString3
15824
+ });
15825
+ var PowerPathScreeningAssignTestInput = exports_external.object({
15826
+ userId: NonEmptyString3,
15827
+ subject: exports_external.enum(["Math", "Reading", "Language", "Science"])
15828
+ });
15829
+ var PowerPathTestAssignmentsCreateInput = exports_external.object({
15830
+ student: NonEmptyString3,
15831
+ subject: TimebackSubject,
15832
+ grade: TimebackGrade,
15833
+ testName: NonEmptyString3.optional()
15834
+ });
15835
+ var PowerPathTestAssignmentsUpdateInput = exports_external.object({
15836
+ testName: NonEmptyString3
15837
+ });
15838
+ var PowerPathTestAssignmentItemInput = exports_external.object({
15839
+ student: NonEmptyString3,
15840
+ subject: TimebackSubject,
15841
+ grade: TimebackGrade,
15842
+ testName: NonEmptyString3.optional()
15843
+ });
15844
+ var PowerPathTestAssignmentsBulkInput = exports_external.object({
15845
+ items: exports_external.array(PowerPathTestAssignmentItemInput)
15846
+ });
15847
+ var PowerPathTestAssignmentsImportInput = exports_external.object({
15848
+ spreadsheetUrl: exports_external.url(),
15849
+ sheet: NonEmptyString3
15850
+ });
15851
+ var PowerPathTestAssignmentsListParams = exports_external.object({
15852
+ student: NonEmptyString3,
15853
+ status: exports_external.enum(["assigned", "in_progress", "completed", "failed", "expired", "cancelled"]).optional(),
15854
+ subject: NonEmptyString3.optional(),
15855
+ grade: TimebackGrade.optional(),
15856
+ limit: exports_external.number().int().positive().max(3000).optional(),
15857
+ offset: exports_external.number().int().nonnegative().optional()
15858
+ });
15859
+ var PowerPathTestAssignmentsAdminParams = exports_external.object({
15860
+ student: NonEmptyString3.optional(),
15861
+ status: exports_external.enum(["assigned", "in_progress", "completed", "failed", "expired", "cancelled"]).optional(),
15862
+ subject: NonEmptyString3.optional(),
15863
+ grade: TimebackGrade.optional(),
15864
+ limit: exports_external.number().int().positive().max(3000).optional(),
15865
+ offset: exports_external.number().int().nonnegative().optional()
15866
+ });
15867
+ var PowerPathUpdateStudentQuestionResponseInput = exports_external.object({
15868
+ student: NonEmptyString3,
15869
+ question: NonEmptyString3,
15870
+ response: exports_external.union([NonEmptyString3, exports_external.array(NonEmptyString3)]).optional(),
15871
+ responses: exports_external.record(exports_external.string(), exports_external.union([NonEmptyString3, exports_external.array(NonEmptyString3)])).optional(),
15872
+ lesson: NonEmptyString3
15873
+ });
15874
+ var PowerPathGetAssessmentProgressParams = exports_external.object({
15875
+ student: NonEmptyString3,
15876
+ lesson: NonEmptyString3,
15877
+ attempt: exports_external.number().int().positive().optional()
15878
+ });
15879
+ var PowerPathGetNextQuestionParams = exports_external.object({
15880
+ student: NonEmptyString3,
15881
+ lesson: NonEmptyString3
15882
+ });
15883
+ var PowerPathGetAttemptsParams = exports_external.object({
15884
+ student: NonEmptyString3,
15885
+ lesson: NonEmptyString3
15886
+ });
15887
+ var PowerPathTestOutParams = exports_external.object({
15888
+ student: NonEmptyString3,
15889
+ lesson: NonEmptyString3.optional(),
15890
+ finalized: exports_external.boolean().optional(),
15891
+ toolProvider: NonEmptyString3.optional(),
15892
+ attempt: exports_external.number().int().positive().optional()
15893
+ });
15894
+ var PowerPathImportExternalTestAssignmentResultsParams = exports_external.object({
15895
+ student: NonEmptyString3,
15896
+ lesson: NonEmptyString3,
15897
+ applicationName: NonEmptyString3.optional()
15898
+ });
15899
+ var PowerPathPlacementQueryParams = exports_external.object({
15900
+ student: NonEmptyString3,
15901
+ subject: TimebackSubject
15902
+ });
15903
+ var PowerPathSyllabusQueryParams = exports_external.object({
15904
+ status: exports_external.enum(["active", "tobedeleted"]).optional()
15905
+ });
15049
15906
  // ../types/src/zod/qti.ts
15050
15907
  var QtiAssessmentItemType = exports_external.enum([
15051
15908
  "choice",
@@ -15162,6 +16019,12 @@ var QtiCatalogInfo = exports_external.object({
15162
16019
  support: exports_external.string(),
15163
16020
  content: exports_external.string()
15164
16021
  }).strict();
16022
+ var QtiPaginationParams = exports_external.object({
16023
+ page: exports_external.number().int().positive().optional(),
16024
+ limit: exports_external.number().int().positive().optional(),
16025
+ sort: exports_external.string().optional(),
16026
+ order: exports_external.enum(["asc", "desc"]).optional()
16027
+ }).strict();
15165
16028
  var QtiAssessmentItemCreateInput = exports_external.object({
15166
16029
  identifier: exports_external.string().min(1),
15167
16030
  title: exports_external.string().min(1),
@@ -15178,6 +16041,7 @@ var QtiAssessmentItemCreateInput = exports_external.object({
15178
16041
  feedbackBlock: exports_external.array(QtiFeedbackBlock).optional()
15179
16042
  }).strict();
15180
16043
  var QtiAssessmentItemUpdateInput = exports_external.object({
16044
+ identifier: exports_external.string().min(1).optional(),
15181
16045
  title: exports_external.string().min(1),
15182
16046
  type: QtiAssessmentItemType,
15183
16047
  qtiVersion: exports_external.string().optional(),
@@ -15216,6 +16080,12 @@ var QtiTestPart = exports_external.object({
15216
16080
  submissionMode: QtiSubmissionMode,
15217
16081
  "qti-assessment-section": exports_external.union([QtiAssessmentSection, exports_external.array(QtiAssessmentSection)])
15218
16082
  }).strict();
16083
+ var QtiReorderItemsInput = exports_external.object({
16084
+ items: exports_external.array(QtiAssessmentItemRef).min(1)
16085
+ }).strict();
16086
+ var QtiAssessmentTestMetadataUpdateInput = exports_external.object({
16087
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
16088
+ }).strict();
15219
16089
  var QtiAssessmentTestCreateInput = exports_external.object({
15220
16090
  identifier: exports_external.string().min(1),
15221
16091
  title: exports_external.string().min(1),
@@ -15230,6 +16100,7 @@ var QtiAssessmentTestCreateInput = exports_external.object({
15230
16100
  "qti-outcome-declaration": exports_external.array(QtiTestOutcomeDeclaration).optional()
15231
16101
  }).strict();
15232
16102
  var QtiAssessmentTestUpdateInput = exports_external.object({
16103
+ identifier: exports_external.string().min(1).optional(),
15233
16104
  title: exports_external.string().min(1),
15234
16105
  qtiVersion: exports_external.string().optional(),
15235
16106
  toolName: exports_external.string().optional(),
@@ -15254,6 +16125,7 @@ var QtiStimulusCreateInput = exports_external.object({
15254
16125
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15255
16126
  }).strict();
15256
16127
  var QtiStimulusUpdateInput = exports_external.object({
16128
+ identifier: exports_external.string().min(1).optional(),
15257
16129
  title: exports_external.string().min(1),
15258
16130
  label: exports_external.string().optional(),
15259
16131
  language: exports_external.string().optional(),
@@ -15283,9 +16155,24 @@ var QtiLessonFeedbackInput = exports_external.object({
15283
16155
  }).strict();
15284
16156
  // ../internal/cli-infra/src/config/timeback.ts
15285
16157
  var FILE_PATTERNS2 = ["timeback.config.ts", "timeback.config.js", "timeback.config.mjs"];
15286
- var jiti = createJiti(import.meta.url, { fsCache: false });
16158
+ var isBun = typeof globalThis.Bun !== "undefined";
16159
+ var jitiInstance = null;
16160
+ async function getJiti() {
16161
+ if (jitiInstance)
16162
+ return jitiInstance;
16163
+ const { createJiti } = await import("jiti");
16164
+ jitiInstance = createJiti(import.meta.url, { fsCache: false });
16165
+ return jitiInstance;
16166
+ }
15287
16167
  async function importModule(fullPath) {
15288
- const module = await jiti.import(fullPath);
16168
+ let module;
16169
+ if (isBun) {
16170
+ const fileUrl = pathToFileURL(fullPath).href;
16171
+ module = await import(fileUrl);
16172
+ } else {
16173
+ const jiti = await getJiti();
16174
+ module = await jiti.import(fullPath);
16175
+ }
15289
16176
  return module.default ?? module;
15290
16177
  }
15291
16178
  function deriveCourseIds(config3) {
@@ -15597,29 +16484,18 @@ function isValidUrl(url2) {
15597
16484
  return false;
15598
16485
  }
15599
16486
  }
15600
- async function promptSensors() {
15601
- const wantSensors = await ye({
15602
- message: "Add Caliper sensor URLs for event filtering?",
15603
- initialValue: false
15604
- });
15605
- if (isCancelled(wantSensors)) {
15606
- return;
15607
- }
15608
- if (!wantSensors) {
15609
- return [];
15610
- }
16487
+ async function promptSensor(options) {
16488
+ const { defaultValue } = options ?? {};
15611
16489
  const input = await he({
15612
- message: "Sensor URLs (comma-separated)",
15613
- placeholder: "https://myapp.example.com/caliper/sensors/activity",
16490
+ message: "Sensor URL (your app origin, used for activity tracking)",
16491
+ placeholder: "https://myapp.example.com",
16492
+ defaultValue,
15614
16493
  validate: (value) => {
15615
16494
  if (!value.trim()) {
15616
- return "Enter at least one sensor URL";
16495
+ return "Sensor URL is required for activity tracking";
15617
16496
  }
15618
- const urls = value.split(",").map((s) => s.trim());
15619
- for (const url2 of urls) {
15620
- if (!isValidUrl(url2)) {
15621
- return `Invalid URL: ${url2}`;
15622
- }
16497
+ if (!isValidUrl(value.trim())) {
16498
+ return "Invalid URL format";
15623
16499
  }
15624
16500
  return;
15625
16501
  }
@@ -15627,7 +16503,26 @@ async function promptSensors() {
15627
16503
  if (isCancelled(input)) {
15628
16504
  return;
15629
16505
  }
15630
- return input.split(",").map((s) => s.trim()).filter(Boolean);
16506
+ return input.trim();
16507
+ }
16508
+ // ../internal/cli-infra/src/sensors/utils.ts
16509
+ function deriveSensorsFromConfig(config3) {
16510
+ const sensors = new Set;
16511
+ if (config3.sensor) {
16512
+ sensors.add(config3.sensor);
16513
+ }
16514
+ for (const course of config3.courses) {
16515
+ if (course.sensor) {
16516
+ sensors.add(course.sensor);
16517
+ }
16518
+ if (course.overrides?.staging?.sensor) {
16519
+ sensors.add(course.overrides.staging.sensor);
16520
+ }
16521
+ if (course.overrides?.production?.sensor) {
16522
+ sensors.add(course.overrides.production.sensor);
16523
+ }
16524
+ }
16525
+ return Array.from(sensors);
15631
16526
  }
15632
16527
  // src/config/constants.ts
15633
16528
  var configValues = {
@@ -16191,8 +17086,8 @@ async function promptImportApp(credentials, configuredEnvs) {
16191
17086
  if (!result.success) {
16192
17087
  return result;
16193
17088
  }
16194
- const sensors = await promptSensors();
16195
- if (sensors === undefined) {
17089
+ const sensor = await promptSensor();
17090
+ if (sensor === undefined) {
16196
17091
  return { success: false, cancelled: true };
16197
17092
  }
16198
17093
  return {
@@ -16200,7 +17095,7 @@ async function promptImportApp(credentials, configuredEnvs) {
16200
17095
  name: result.appName,
16201
17096
  courses: result.courses,
16202
17097
  environment: result.environment,
16203
- sensors: sensors.length > 0 ? sensors : undefined
17098
+ sensor
16204
17099
  };
16205
17100
  } catch (error48) {
16206
17101
  const message = error48 instanceof Error ? error48.message : "Unknown error";
@@ -16230,7 +17125,7 @@ async function promptNoConfig(credentials, configuredEnvs, opts = {}) {
16230
17125
  // src/cli/commands/serve/config.ts
16231
17126
  import { basename as basename2 } from "node:path";
16232
17127
  function buildUserConfigFromImport(result) {
16233
- const { name, courses, sensors } = result;
17128
+ const { name, courses, sensor } = result;
16234
17129
  const courseIds = {
16235
17130
  staging: [],
16236
17131
  production: []
@@ -16243,8 +17138,8 @@ function buildUserConfigFromImport(result) {
16243
17138
  }
16244
17139
  return {
16245
17140
  name,
17141
+ sensor,
16246
17142
  courses,
16247
- sensors,
16248
17143
  version: "0.0.0",
16249
17144
  path: "",
16250
17145
  courseIds
@@ -16318,21 +17213,20 @@ async function resolveFromConfigOrImport(credentials, configuredEnvs, defaultEnv
16318
17213
  function parseSensors(sensors) {
16319
17214
  return sensors.split(",").map((s) => s.trim()).filter(Boolean);
16320
17215
  }
16321
- function applyCliOverrides(config3, opts) {
17216
+ function getEffectiveSensors(config3, opts) {
16322
17217
  if (opts.sensors) {
16323
- config3.sensors = parseSensors(opts.sensors);
17218
+ return parseSensors(opts.sensors);
16324
17219
  }
17220
+ const derived = deriveSensorsFromConfig(config3);
17221
+ return derived.length > 0 ? derived : undefined;
16325
17222
  }
16326
17223
  async function resolveConfig(courseIds, opts, credentials, configuredEnvs, defaultEnv) {
16327
17224
  const parserOpts = { playcademy: opts.playcademy };
16328
17225
  const resolved = courseIds.length > 0 ? await resolveFromCourseIds(courseIds, defaultEnv, credentials, configuredEnvs) : await resolveFromConfigOrImport(credentials, configuredEnvs, defaultEnv, parserOpts);
16329
- if (!resolved)
16330
- return null;
16331
- applyCliOverrides(resolved.userConfig, opts);
16332
17226
  return resolved;
16333
17227
  }
16334
17228
 
16335
- // ../../node_modules/.bun/@hono+node-server@1.19.8+fd698e00a3b2abce/node_modules/@hono/node-server/dist/index.mjs
17229
+ // ../../node_modules/.bun/@hono+node-server@1.19.9+fd698e00a3b2abce/node_modules/@hono/node-server/dist/index.mjs
16336
17230
  import { createServer as createServerHTTP } from "http";
16337
17231
  import { Http2ServerRequest as Http2ServerRequest2 } from "http2";
16338
17232
  import { Http2ServerRequest } from "http2";
@@ -16641,17 +17535,9 @@ var buildOutgoingHttpHeaders = (headers) => {
16641
17535
  return res;
16642
17536
  };
16643
17537
  var X_ALREADY_SENT = "x-hono-already-sent";
16644
- var webFetch = global.fetch;
16645
17538
  if (typeof global.crypto === "undefined") {
16646
17539
  global.crypto = crypto;
16647
17540
  }
16648
- global.fetch = (info, init2) => {
16649
- init2 = {
16650
- compress: false,
16651
- ...init2
16652
- };
16653
- return webFetch(info, init2);
16654
- };
16655
17541
  var outgoingEnded = Symbol("outgoingEnded");
16656
17542
  var handleRequestError = () => new Response(null, {
16657
17543
  status: 400
@@ -19474,7 +20360,7 @@ function createEnvMiddleware(ctx, manager) {
19474
20360
  }, 400);
19475
20361
  }
19476
20362
  const client = manager.get(env2);
19477
- const sensors = ctx.userConfig.sensors;
20363
+ const sensors = ctx.derivedSensors;
19478
20364
  c.set("env", env2);
19479
20365
  c.set("client", client);
19480
20366
  c.set("sensors", sensors);
@@ -20013,7 +20899,8 @@ async function serveCommand(courseIds, opts) {
20013
20899
  serverConfig,
20014
20900
  userConfig: resolved.userConfig,
20015
20901
  credentials,
20016
- defaultEnvironment: resolved.environment
20902
+ defaultEnvironment: resolved.environment,
20903
+ derivedSensors: getEffectiveSensors(resolved.userConfig, opts)
20017
20904
  };
20018
20905
  startServer(ctx, serverConfig, resolved.configFile);
20019
20906
  }