timeback-studio 0.1.1 → 0.1.2

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
@@ -16931,6 +16931,9 @@ import { readFile as readFile2 } from "node:fs/promises";
16931
16931
  import { basename, relative, resolve } from "node:path";
16932
16932
  import { createJiti } from "jiti";
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),
@@ -17007,16 +17011,16 @@ var TimebackActivityContext = exports_external.object({
17007
17011
  id: exports_external.string(),
17008
17012
  type: exports_external.literal("TimebackActivityContext"),
17009
17013
  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() }),
17014
+ app: exports_external.object({ name: exports_external.string() }),
17015
+ activity: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string() }).strict().optional(),
17016
+ course: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string() }).strict().optional(),
17013
17017
  process: exports_external.boolean().optional()
17014
17018
  });
17015
17019
  var CaliperEventBase = exports_external.object({
17016
17020
  "@context": exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
17017
17021
  id: exports_external.string(),
17018
17022
  type: exports_external.string(),
17019
- eventTime: exports_external.string(),
17023
+ eventTime: IsoDateTimeString,
17020
17024
  profile: exports_external.literal("TimebackProfile"),
17021
17025
  actor: TimebackUser,
17022
17026
  action: exports_external.string(),
@@ -17054,13 +17058,95 @@ var TimebackTimeSpentEvent = CaliperEventBase.extend({
17054
17058
  action: exports_external.literal("SpentTime"),
17055
17059
  generated: TimebackTimeSpentMetricsCollection
17056
17060
  });
17061
+ var ActivityCompletedInput = exports_external.object({
17062
+ actor: TimebackUser,
17063
+ object: TimebackActivityContext,
17064
+ metrics: exports_external.array(TimebackActivityMetric).min(1, "metrics must contain at least one metric"),
17065
+ eventTime: IsoDateTimeString.optional(),
17066
+ metricsId: exports_external.string().optional(),
17067
+ id: exports_external.string().optional(),
17068
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17069
+ }).strict();
17070
+ var TimeSpentInput = exports_external.object({
17071
+ actor: TimebackUser,
17072
+ object: TimebackActivityContext,
17073
+ metrics: exports_external.array(TimebackTimeMetric).min(1, "metrics must contain at least one metric"),
17074
+ eventTime: IsoDateTimeString.optional(),
17075
+ metricsId: exports_external.string().optional(),
17076
+ id: exports_external.string().optional(),
17077
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17078
+ }).strict();
17057
17079
  var TimebackEvent = exports_external.union([TimebackActivityEvent, TimebackTimeSpentEvent]);
17058
17080
  var CaliperEnvelope = exports_external.object({
17059
17081
  sensor: exports_external.string(),
17060
- sendTime: exports_external.string(),
17082
+ sendTime: IsoDateTimeString,
17061
17083
  dataVersion: exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
17062
17084
  data: exports_external.array(TimebackEvent)
17063
17085
  });
17086
+ var CaliperProfile = exports_external.enum([
17087
+ "AnnotationProfile",
17088
+ "AssessmentProfile",
17089
+ "ToolUseProfile",
17090
+ "GeneralProfile",
17091
+ "FeedbackProfile",
17092
+ "MediaProfile",
17093
+ "SurveyProfile",
17094
+ "ResourceManagementProfile",
17095
+ "ForumProfile",
17096
+ "AssignableProfile",
17097
+ "GradingProfile",
17098
+ "ReadingProfile",
17099
+ "SessionProfile",
17100
+ "SearchProfile",
17101
+ "ToolLaunchProfile",
17102
+ "TimebackProfile"
17103
+ ]);
17104
+ var CaliperEntity = exports_external.union([exports_external.string(), exports_external.record(exports_external.string(), exports_external.unknown())]);
17105
+ var CaliperActor = exports_external.object({
17106
+ id: exports_external.string(),
17107
+ type: exports_external.string(),
17108
+ extensions: exports_external.object({
17109
+ email: exports_external.email()
17110
+ }).loose()
17111
+ }).strict();
17112
+ var CaliperEvent = exports_external.object({
17113
+ "@context": exports_external.string().optional(),
17114
+ id: exports_external.string(),
17115
+ type: exports_external.string(),
17116
+ actor: exports_external.union([exports_external.string(), CaliperActor, TimebackUser]),
17117
+ action: exports_external.string(),
17118
+ object: CaliperEntity,
17119
+ eventTime: IsoDateTimeString,
17120
+ profile: CaliperProfile,
17121
+ edApp: CaliperEntity.optional(),
17122
+ generated: CaliperEntity.optional(),
17123
+ target: CaliperEntity.optional(),
17124
+ referrer: CaliperEntity.optional(),
17125
+ group: CaliperEntity.optional(),
17126
+ membership: CaliperEntity.optional(),
17127
+ session: CaliperEntity.optional(),
17128
+ federatedSession: CaliperEntity.optional(),
17129
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17130
+ }).strict();
17131
+ var CaliperEnvelopeInput = exports_external.object({
17132
+ sensor: exports_external.string().min(1, "sensor must be a non-empty string"),
17133
+ sendTime: IsoDateTimeString,
17134
+ dataVersion: exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
17135
+ data: exports_external.array(CaliperEvent).min(1, "data must contain at least one event")
17136
+ });
17137
+ var CaliperSendEventsInput = exports_external.object({
17138
+ sensor: exports_external.string().min(1, "sensor must be a non-empty string"),
17139
+ events: exports_external.array(CaliperEvent).min(1, "events must contain at least one event")
17140
+ });
17141
+ var CaliperListEventsParams = exports_external.object({
17142
+ limit: exports_external.number().int().positive().optional(),
17143
+ offset: exports_external.number().int().min(0).optional(),
17144
+ sensor: exports_external.string().min(1).optional(),
17145
+ startDate: IsoDateTimeString.optional(),
17146
+ endDate: IsoDateTimeString.optional(),
17147
+ actorId: exports_external.string().min(1).optional(),
17148
+ actorEmail: exports_external.email().optional()
17149
+ }).strict();
17064
17150
  // ../types/src/zod/config.ts
17065
17151
  var CourseIds = exports_external.object({
17066
17152
  staging: exports_external.string().optional(),
@@ -17107,11 +17193,12 @@ var TimebackConfig = exports_external.object({
17107
17193
  sensors: exports_external.array(exports_external.string().url()).optional()
17108
17194
  });
17109
17195
  // ../types/src/zod/edubridge.ts
17196
+ var EdubridgeDateString = exports_external.union([IsoDateString, IsoDateTimeString]);
17110
17197
  var EduBridgeEnrollment = exports_external.object({
17111
17198
  id: exports_external.string(),
17112
17199
  role: exports_external.string(),
17113
- beginDate: exports_external.string().nullable(),
17114
- endDate: exports_external.string().nullable(),
17200
+ beginDate: EdubridgeDateString.nullable(),
17201
+ endDate: EdubridgeDateString.nullable(),
17115
17202
  metadata: exports_external.object({
17116
17203
  goals: exports_external.object({ dailyXp: exports_external.number().optional() }).optional(),
17117
17204
  metrics: exports_external.object({ totalXp: exports_external.number().optional(), totalLessons: exports_external.number().optional() }).optional()
@@ -17145,17 +17232,340 @@ var EduBridgeAnalyticsFacts = exports_external.record(exports_external.string(),
17145
17232
  var EduBridgeEnrollmentAnalyticsResponse = exports_external.object({
17146
17233
  message: exports_external.string(),
17147
17234
  enrollmentId: exports_external.string(),
17148
- startDate: exports_external.string(),
17149
- endDate: exports_external.string(),
17235
+ startDate: EdubridgeDateString,
17236
+ endDate: EdubridgeDateString,
17150
17237
  facts: EduBridgeAnalyticsFacts,
17151
17238
  factsByApp: exports_external.unknown()
17152
17239
  });
17240
+ var NonEmptyString = exports_external.string().trim().min(1);
17241
+ var EmailOrStudentId = exports_external.object({
17242
+ email: exports_external.email().optional(),
17243
+ studentId: NonEmptyString.optional()
17244
+ }).superRefine((value, ctx) => {
17245
+ if (!value.email && !value.studentId) {
17246
+ ctx.addIssue({
17247
+ code: exports_external.ZodIssueCode.custom,
17248
+ message: "must provide either email or studentId",
17249
+ path: ["email"]
17250
+ });
17251
+ ctx.addIssue({
17252
+ code: exports_external.ZodIssueCode.custom,
17253
+ message: "must provide either email or studentId",
17254
+ path: ["studentId"]
17255
+ });
17256
+ }
17257
+ });
17153
17258
  var SubjectTrackInput = exports_external.object({
17154
- subject: exports_external.string(),
17155
- gradeLevel: exports_external.string(),
17156
- targetCourseId: exports_external.string(),
17259
+ subject: NonEmptyString,
17260
+ gradeLevel: NonEmptyString,
17261
+ targetCourseId: NonEmptyString,
17157
17262
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17158
17263
  });
17264
+ var SubjectTrackUpsertInput = SubjectTrackInput.extend({
17265
+ id: NonEmptyString
17266
+ });
17267
+ var EdubridgeListEnrollmentsParams = exports_external.object({
17268
+ userId: NonEmptyString
17269
+ });
17270
+ var EdubridgeEnrollOptions = exports_external.object({
17271
+ sourcedId: NonEmptyString.optional(),
17272
+ role: EnrollmentRole.optional(),
17273
+ beginDate: EdubridgeDateString.optional(),
17274
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17275
+ });
17276
+ var EdubridgeUsersListParams = exports_external.object({
17277
+ fields: exports_external.string().optional(),
17278
+ limit: exports_external.number().int().positive().optional(),
17279
+ offset: exports_external.number().int().nonnegative().optional(),
17280
+ sort: exports_external.string().optional(),
17281
+ orderBy: exports_external.enum(["asc", "desc"]).optional(),
17282
+ filter: exports_external.string().optional(),
17283
+ search: exports_external.string().optional(),
17284
+ roles: exports_external.array(OneRosterUserRole).min(1),
17285
+ orgSourcedIds: exports_external.array(NonEmptyString).optional()
17286
+ });
17287
+ var EdubridgeActivityParams = EmailOrStudentId.extend({
17288
+ startDate: EdubridgeDateString,
17289
+ endDate: EdubridgeDateString,
17290
+ timezone: exports_external.string().optional()
17291
+ });
17292
+ var EdubridgeWeeklyFactsParams = EmailOrStudentId.extend({
17293
+ weekDate: EdubridgeDateString,
17294
+ timezone: exports_external.string().optional()
17295
+ });
17296
+ var EdubridgeEnrollmentFactsParams = exports_external.object({
17297
+ enrollmentId: NonEmptyString,
17298
+ startDate: EdubridgeDateString.optional(),
17299
+ endDate: EdubridgeDateString.optional(),
17300
+ timezone: exports_external.string().optional()
17301
+ });
17302
+ // ../types/src/zod/oneroster.ts
17303
+ var NonEmptyString2 = exports_external.string().min(1);
17304
+ var Status = exports_external.enum(["active", "tobedeleted"]);
17305
+ var Metadata = exports_external.record(exports_external.string(), exports_external.unknown()).nullable().optional();
17306
+ var Ref = exports_external.object({
17307
+ sourcedId: NonEmptyString2,
17308
+ type: exports_external.string().optional(),
17309
+ href: exports_external.string().optional()
17310
+ }).strict();
17311
+ var OneRosterDateString = exports_external.union([IsoDateString, IsoDateTimeString]);
17312
+ var OneRosterUserRoleInput = exports_external.object({
17313
+ roleType: exports_external.enum(["primary", "secondary"]),
17314
+ role: OneRosterUserRole,
17315
+ org: Ref,
17316
+ userProfile: exports_external.string().optional(),
17317
+ metadata: Metadata,
17318
+ beginDate: OneRosterDateString.optional(),
17319
+ endDate: OneRosterDateString.optional()
17320
+ }).strict();
17321
+ var OneRosterUserCreateInput = exports_external.object({
17322
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
17323
+ status: Status.optional(),
17324
+ enabledUser: exports_external.boolean(),
17325
+ givenName: NonEmptyString2.describe("givenName must be a non-empty string"),
17326
+ familyName: NonEmptyString2.describe("familyName must be a non-empty string"),
17327
+ middleName: NonEmptyString2.optional(),
17328
+ username: NonEmptyString2.optional(),
17329
+ email: exports_external.email().optional(),
17330
+ roles: exports_external.array(OneRosterUserRoleInput).min(1, "roles must include at least one role"),
17331
+ userIds: exports_external.array(exports_external.object({
17332
+ type: NonEmptyString2,
17333
+ identifier: NonEmptyString2
17334
+ }).strict()).optional(),
17335
+ agents: exports_external.array(Ref).optional(),
17336
+ grades: exports_external.array(TimebackGrade).optional(),
17337
+ identifier: NonEmptyString2.optional(),
17338
+ sms: NonEmptyString2.optional(),
17339
+ phone: NonEmptyString2.optional(),
17340
+ pronouns: NonEmptyString2.optional(),
17341
+ password: NonEmptyString2.optional(),
17342
+ metadata: Metadata
17343
+ }).strict();
17344
+ var OneRosterCourseCreateInput = exports_external.object({
17345
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
17346
+ status: Status.optional(),
17347
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17348
+ org: Ref,
17349
+ courseCode: NonEmptyString2.optional(),
17350
+ subjects: exports_external.array(TimebackSubject).optional(),
17351
+ grades: exports_external.array(TimebackGrade).optional(),
17352
+ level: NonEmptyString2.optional(),
17353
+ metadata: Metadata
17354
+ }).strict();
17355
+ var OneRosterClassCreateInput = exports_external.object({
17356
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
17357
+ status: Status.optional(),
17358
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17359
+ terms: exports_external.array(Ref).min(1, "terms must have at least one item"),
17360
+ course: Ref,
17361
+ org: Ref,
17362
+ classCode: NonEmptyString2.optional(),
17363
+ classType: exports_external.enum(["homeroom", "scheduled"]).optional(),
17364
+ location: NonEmptyString2.optional(),
17365
+ grades: exports_external.array(TimebackGrade).optional(),
17366
+ subjects: exports_external.array(TimebackSubject).optional(),
17367
+ subjectCodes: exports_external.array(NonEmptyString2).optional(),
17368
+ periods: exports_external.array(NonEmptyString2).optional(),
17369
+ metadata: Metadata
17370
+ }).strict();
17371
+ var StringBoolean = exports_external.enum(["true", "false"]);
17372
+ var OneRosterEnrollmentCreateInput = exports_external.object({
17373
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
17374
+ status: Status.optional(),
17375
+ user: Ref,
17376
+ class: Ref,
17377
+ school: Ref.optional(),
17378
+ role: OneRosterUserRole,
17379
+ primary: StringBoolean.optional(),
17380
+ beginDate: OneRosterDateString.optional(),
17381
+ endDate: OneRosterDateString.optional(),
17382
+ metadata: Metadata
17383
+ }).strict();
17384
+ var OneRosterCategoryCreateInput = exports_external.object({
17385
+ sourcedId: NonEmptyString2.optional(),
17386
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17387
+ status: Status,
17388
+ weight: exports_external.number().nullable().optional(),
17389
+ metadata: Metadata
17390
+ }).strict();
17391
+ var OneRosterLineItemCreateInput = exports_external.object({
17392
+ sourcedId: NonEmptyString2.optional(),
17393
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17394
+ class: Ref,
17395
+ school: Ref,
17396
+ category: Ref,
17397
+ assignDate: OneRosterDateString,
17398
+ dueDate: OneRosterDateString,
17399
+ status: Status,
17400
+ description: exports_external.string().optional(),
17401
+ resultValueMin: exports_external.number().nullable().optional(),
17402
+ resultValueMax: exports_external.number().nullable().optional(),
17403
+ scoreScale: Ref.optional(),
17404
+ metadata: Metadata
17405
+ }).strict();
17406
+ var OneRosterResultCreateInput = exports_external.object({
17407
+ sourcedId: NonEmptyString2.optional(),
17408
+ lineItem: Ref,
17409
+ student: Ref,
17410
+ class: Ref.optional(),
17411
+ scoreDate: OneRosterDateString,
17412
+ scoreStatus: exports_external.enum([
17413
+ "exempt",
17414
+ "fully graded",
17415
+ "not submitted",
17416
+ "partially graded",
17417
+ "submitted"
17418
+ ]),
17419
+ score: exports_external.number().nullable().optional(),
17420
+ textScore: exports_external.string().nullable().optional(),
17421
+ status: Status,
17422
+ comment: exports_external.string().nullable().optional(),
17423
+ metadata: Metadata
17424
+ }).strict();
17425
+ var OneRosterScoreScaleCreateInput = exports_external.object({
17426
+ sourcedId: NonEmptyString2.optional(),
17427
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17428
+ status: Status.optional(),
17429
+ type: exports_external.string().optional(),
17430
+ class: Ref.optional(),
17431
+ course: Ref.nullable().optional(),
17432
+ scoreScaleValue: exports_external.array(exports_external.object({
17433
+ itemValueLHS: NonEmptyString2,
17434
+ itemValueRHS: NonEmptyString2,
17435
+ value: exports_external.string().optional(),
17436
+ description: exports_external.string().optional()
17437
+ }).strict()).optional(),
17438
+ minScore: exports_external.number().optional(),
17439
+ maxScore: exports_external.number().optional(),
17440
+ metadata: Metadata
17441
+ }).strict();
17442
+ var OneRosterAssessmentLineItemCreateInput = exports_external.object({
17443
+ sourcedId: NonEmptyString2.optional(),
17444
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17445
+ class: Ref,
17446
+ school: Ref,
17447
+ category: Ref,
17448
+ assignDate: OneRosterDateString,
17449
+ dueDate: OneRosterDateString,
17450
+ status: Status,
17451
+ metadata: Metadata
17452
+ }).strict();
17453
+ var OneRosterAssessmentResultCreateInput = exports_external.object({
17454
+ sourcedId: NonEmptyString2.optional(),
17455
+ lineItem: Ref,
17456
+ student: Ref,
17457
+ scoreDate: OneRosterDateString,
17458
+ scoreStatus: exports_external.enum([
17459
+ "exempt",
17460
+ "fully graded",
17461
+ "not submitted",
17462
+ "partially graded",
17463
+ "submitted"
17464
+ ]),
17465
+ score: exports_external.string().optional(),
17466
+ status: Status,
17467
+ metadata: Metadata
17468
+ }).strict();
17469
+ var OneRosterOrgCreateInput = exports_external.object({
17470
+ sourcedId: NonEmptyString2.optional(),
17471
+ status: Status.optional(),
17472
+ name: NonEmptyString2.describe("name must be a non-empty string"),
17473
+ type: OrganizationType,
17474
+ identifier: NonEmptyString2.optional(),
17475
+ parent: Ref.optional(),
17476
+ metadata: Metadata
17477
+ }).strict();
17478
+ var OneRosterSchoolCreateInput = exports_external.object({
17479
+ sourcedId: NonEmptyString2.optional(),
17480
+ status: Status.optional(),
17481
+ name: NonEmptyString2.describe("name must be a non-empty string"),
17482
+ type: exports_external.literal("school").optional(),
17483
+ identifier: NonEmptyString2.optional(),
17484
+ parent: Ref.optional(),
17485
+ metadata: Metadata
17486
+ }).strict();
17487
+ var OneRosterAcademicSessionCreateInput = exports_external.object({
17488
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
17489
+ status: Status,
17490
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17491
+ startDate: OneRosterDateString,
17492
+ endDate: OneRosterDateString,
17493
+ type: exports_external.enum(["gradingPeriod", "semester", "schoolYear", "term"]),
17494
+ schoolYear: NonEmptyString2.describe("schoolYear must be a non-empty string"),
17495
+ org: Ref,
17496
+ parent: Ref.optional(),
17497
+ children: exports_external.array(Ref).optional(),
17498
+ metadata: Metadata
17499
+ }).strict();
17500
+ var OneRosterComponentResourceCreateInput = exports_external.object({
17501
+ sourcedId: NonEmptyString2.optional(),
17502
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17503
+ courseComponent: Ref,
17504
+ resource: Ref,
17505
+ status: Status,
17506
+ metadata: Metadata
17507
+ }).strict();
17508
+ var OneRosterCourseComponentCreateInput = exports_external.object({
17509
+ sourcedId: NonEmptyString2.optional(),
17510
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17511
+ course: Ref,
17512
+ status: Status,
17513
+ metadata: Metadata
17514
+ }).strict();
17515
+ var OneRosterEnrollInput = exports_external.object({
17516
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
17517
+ role: exports_external.enum(["student", "teacher"]),
17518
+ primary: StringBoolean.optional(),
17519
+ beginDate: OneRosterDateString.optional(),
17520
+ endDate: OneRosterDateString.optional(),
17521
+ metadata: Metadata
17522
+ }).strict();
17523
+ var OneRosterAgentInput = exports_external.object({
17524
+ agentSourcedId: NonEmptyString2.describe("agentSourcedId must be a non-empty string")
17525
+ }).strict();
17526
+ var OneRosterCredentialInput = exports_external.object({
17527
+ type: NonEmptyString2.describe("type must be a non-empty string"),
17528
+ username: NonEmptyString2.describe("username must be a non-empty string"),
17529
+ password: exports_external.string().optional(),
17530
+ metadata: Metadata
17531
+ }).strict();
17532
+ var OneRosterDemographicsCreateInput = exports_external.object({
17533
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string")
17534
+ }).loose();
17535
+ var OneRosterResourceCreateInput = exports_external.object({
17536
+ sourcedId: NonEmptyString2.optional(),
17537
+ title: NonEmptyString2.describe("title must be a non-empty string"),
17538
+ vendorResourceId: NonEmptyString2.describe("vendorResourceId must be a non-empty string"),
17539
+ roles: exports_external.array(exports_external.enum(["primary", "secondary"])).optional(),
17540
+ importance: exports_external.enum(["primary", "secondary"]).optional(),
17541
+ vendorId: exports_external.string().optional(),
17542
+ applicationId: exports_external.string().optional(),
17543
+ status: Status.optional(),
17544
+ metadata: Metadata
17545
+ }).strict();
17546
+ var CourseStructureItem = exports_external.object({
17547
+ url: NonEmptyString2.describe("courseStructure.url must be a non-empty string"),
17548
+ skillCode: NonEmptyString2.describe("courseStructure.skillCode must be a non-empty string"),
17549
+ lessonCode: NonEmptyString2.describe("courseStructure.lessonCode must be a non-empty string"),
17550
+ title: NonEmptyString2.describe("courseStructure.title must be a non-empty string"),
17551
+ "unit-title": NonEmptyString2.describe("courseStructure.unit-title must be a non-empty string"),
17552
+ status: NonEmptyString2.describe("courseStructure.status must be a non-empty string"),
17553
+ xp: exports_external.number()
17554
+ }).loose();
17555
+ var OneRosterCourseStructureInput = exports_external.object({
17556
+ course: exports_external.object({
17557
+ sourcedId: NonEmptyString2.describe("course.sourcedId must be a non-empty string").optional(),
17558
+ title: NonEmptyString2.describe("course.title must be a non-empty string"),
17559
+ org: Ref,
17560
+ status: Status,
17561
+ metadata: Metadata
17562
+ }).strict(),
17563
+ courseStructure: exports_external.record(exports_external.string(), CourseStructureItem)
17564
+ }).strict();
17565
+ var OneRosterBulkResultItem = exports_external.object({
17566
+ student: Ref
17567
+ }).loose();
17568
+ var OneRosterBulkResultsInput = exports_external.array(OneRosterBulkResultItem).min(1, "results must have at least one item");
17159
17569
  // ../types/src/zod/qti.ts
17160
17570
  var QtiAssessmentItemType = exports_external.enum([
17161
17571
  "choice",
@@ -17272,6 +17682,12 @@ var QtiCatalogInfo = exports_external.object({
17272
17682
  support: exports_external.string(),
17273
17683
  content: exports_external.string()
17274
17684
  }).strict();
17685
+ var QtiPaginationParams = exports_external.object({
17686
+ page: exports_external.number().int().positive().optional(),
17687
+ limit: exports_external.number().int().positive().optional(),
17688
+ sort: exports_external.string().optional(),
17689
+ order: exports_external.enum(["asc", "desc"]).optional()
17690
+ }).strict();
17275
17691
  var QtiAssessmentItemCreateInput = exports_external.object({
17276
17692
  identifier: exports_external.string().min(1),
17277
17693
  title: exports_external.string().min(1),
@@ -17288,6 +17704,7 @@ var QtiAssessmentItemCreateInput = exports_external.object({
17288
17704
  feedbackBlock: exports_external.array(QtiFeedbackBlock).optional()
17289
17705
  }).strict();
17290
17706
  var QtiAssessmentItemUpdateInput = exports_external.object({
17707
+ identifier: exports_external.string().min(1).optional(),
17291
17708
  title: exports_external.string().min(1),
17292
17709
  type: QtiAssessmentItemType,
17293
17710
  qtiVersion: exports_external.string().optional(),
@@ -17326,6 +17743,12 @@ var QtiTestPart = exports_external.object({
17326
17743
  submissionMode: QtiSubmissionMode,
17327
17744
  "qti-assessment-section": exports_external.union([QtiAssessmentSection, exports_external.array(QtiAssessmentSection)])
17328
17745
  }).strict();
17746
+ var QtiReorderItemsInput = exports_external.object({
17747
+ items: exports_external.array(QtiAssessmentItemRef).min(1)
17748
+ }).strict();
17749
+ var QtiAssessmentTestMetadataUpdateInput = exports_external.object({
17750
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17751
+ }).strict();
17329
17752
  var QtiAssessmentTestCreateInput = exports_external.object({
17330
17753
  identifier: exports_external.string().min(1),
17331
17754
  title: exports_external.string().min(1),
@@ -17340,6 +17763,7 @@ var QtiAssessmentTestCreateInput = exports_external.object({
17340
17763
  "qti-outcome-declaration": exports_external.array(QtiTestOutcomeDeclaration).optional()
17341
17764
  }).strict();
17342
17765
  var QtiAssessmentTestUpdateInput = exports_external.object({
17766
+ identifier: exports_external.string().min(1).optional(),
17343
17767
  title: exports_external.string().min(1),
17344
17768
  qtiVersion: exports_external.string().optional(),
17345
17769
  toolName: exports_external.string().optional(),
@@ -17364,6 +17788,7 @@ var QtiStimulusCreateInput = exports_external.object({
17364
17788
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17365
17789
  }).strict();
17366
17790
  var QtiStimulusUpdateInput = exports_external.object({
17791
+ identifier: exports_external.string().min(1).optional(),
17367
17792
  title: exports_external.string().min(1),
17368
17793
  label: exports_external.string().optional(),
17369
17794
  language: exports_external.string().optional(),
@@ -18442,7 +18867,7 @@ async function resolveConfig(courseIds, opts, credentials, configuredEnvs, defau
18442
18867
  return resolved;
18443
18868
  }
18444
18869
 
18445
- // ../../node_modules/.bun/@hono+node-server@1.19.8+fd698e00a3b2abce/node_modules/@hono/node-server/dist/index.mjs
18870
+ // ../../node_modules/.bun/@hono+node-server@1.19.9+fd698e00a3b2abce/node_modules/@hono/node-server/dist/index.mjs
18446
18871
  import { createServer as createServerHTTP } from "http";
18447
18872
  import { Http2ServerRequest as Http2ServerRequest2 } from "http2";
18448
18873
  import { Http2ServerRequest } from "http2";
@@ -18751,17 +19176,9 @@ var buildOutgoingHttpHeaders = (headers) => {
18751
19176
  return res;
18752
19177
  };
18753
19178
  var X_ALREADY_SENT = "x-hono-already-sent";
18754
- var webFetch = global.fetch;
18755
19179
  if (typeof global.crypto === "undefined") {
18756
19180
  global.crypto = crypto;
18757
19181
  }
18758
- global.fetch = (info, init2) => {
18759
- init2 = {
18760
- compress: false,
18761
- ...init2
18762
- };
18763
- return webFetch(info, init2);
18764
- };
18765
19182
  var outgoingEnded = Symbol("outgoingEnded");
18766
19183
  var handleRequestError = () => new Response(null, {
18767
19184
  status: 400
package/dist/index.js CHANGED
@@ -14821,6 +14821,9 @@ import { readFile as readFile2 } from "node:fs/promises";
14821
14821
  import { basename, relative, resolve } from "node:path";
14822
14822
  import { createJiti } from "jiti";
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),
@@ -14897,16 +14901,16 @@ var TimebackActivityContext = exports_external.object({
14897
14901
  id: exports_external.string(),
14898
14902
  type: exports_external.literal("TimebackActivityContext"),
14899
14903
  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() }),
14904
+ app: exports_external.object({ name: exports_external.string() }),
14905
+ activity: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string() }).strict().optional(),
14906
+ course: exports_external.object({ id: exports_external.string().optional(), name: exports_external.string() }).strict().optional(),
14903
14907
  process: exports_external.boolean().optional()
14904
14908
  });
14905
14909
  var CaliperEventBase = exports_external.object({
14906
14910
  "@context": exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
14907
14911
  id: exports_external.string(),
14908
14912
  type: exports_external.string(),
14909
- eventTime: exports_external.string(),
14913
+ eventTime: IsoDateTimeString,
14910
14914
  profile: exports_external.literal("TimebackProfile"),
14911
14915
  actor: TimebackUser,
14912
14916
  action: exports_external.string(),
@@ -14944,13 +14948,95 @@ var TimebackTimeSpentEvent = CaliperEventBase.extend({
14944
14948
  action: exports_external.literal("SpentTime"),
14945
14949
  generated: TimebackTimeSpentMetricsCollection
14946
14950
  });
14951
+ var ActivityCompletedInput = exports_external.object({
14952
+ actor: TimebackUser,
14953
+ object: TimebackActivityContext,
14954
+ metrics: exports_external.array(TimebackActivityMetric).min(1, "metrics must contain at least one metric"),
14955
+ eventTime: IsoDateTimeString.optional(),
14956
+ metricsId: exports_external.string().optional(),
14957
+ id: exports_external.string().optional(),
14958
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
14959
+ }).strict();
14960
+ var TimeSpentInput = exports_external.object({
14961
+ actor: TimebackUser,
14962
+ object: TimebackActivityContext,
14963
+ metrics: exports_external.array(TimebackTimeMetric).min(1, "metrics must contain at least one metric"),
14964
+ eventTime: IsoDateTimeString.optional(),
14965
+ metricsId: exports_external.string().optional(),
14966
+ id: exports_external.string().optional(),
14967
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
14968
+ }).strict();
14947
14969
  var TimebackEvent = exports_external.union([TimebackActivityEvent, TimebackTimeSpentEvent]);
14948
14970
  var CaliperEnvelope = exports_external.object({
14949
14971
  sensor: exports_external.string(),
14950
- sendTime: exports_external.string(),
14972
+ sendTime: IsoDateTimeString,
14951
14973
  dataVersion: exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
14952
14974
  data: exports_external.array(TimebackEvent)
14953
14975
  });
14976
+ var CaliperProfile = exports_external.enum([
14977
+ "AnnotationProfile",
14978
+ "AssessmentProfile",
14979
+ "ToolUseProfile",
14980
+ "GeneralProfile",
14981
+ "FeedbackProfile",
14982
+ "MediaProfile",
14983
+ "SurveyProfile",
14984
+ "ResourceManagementProfile",
14985
+ "ForumProfile",
14986
+ "AssignableProfile",
14987
+ "GradingProfile",
14988
+ "ReadingProfile",
14989
+ "SessionProfile",
14990
+ "SearchProfile",
14991
+ "ToolLaunchProfile",
14992
+ "TimebackProfile"
14993
+ ]);
14994
+ var CaliperEntity = exports_external.union([exports_external.string(), exports_external.record(exports_external.string(), exports_external.unknown())]);
14995
+ var CaliperActor = exports_external.object({
14996
+ id: exports_external.string(),
14997
+ type: exports_external.string(),
14998
+ extensions: exports_external.object({
14999
+ email: exports_external.email()
15000
+ }).loose()
15001
+ }).strict();
15002
+ var CaliperEvent = exports_external.object({
15003
+ "@context": exports_external.string().optional(),
15004
+ id: exports_external.string(),
15005
+ type: exports_external.string(),
15006
+ actor: exports_external.union([exports_external.string(), CaliperActor, TimebackUser]),
15007
+ action: exports_external.string(),
15008
+ object: CaliperEntity,
15009
+ eventTime: IsoDateTimeString,
15010
+ profile: CaliperProfile,
15011
+ edApp: CaliperEntity.optional(),
15012
+ generated: CaliperEntity.optional(),
15013
+ target: CaliperEntity.optional(),
15014
+ referrer: CaliperEntity.optional(),
15015
+ group: CaliperEntity.optional(),
15016
+ membership: CaliperEntity.optional(),
15017
+ session: CaliperEntity.optional(),
15018
+ federatedSession: CaliperEntity.optional(),
15019
+ extensions: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15020
+ }).strict();
15021
+ var CaliperEnvelopeInput = exports_external.object({
15022
+ sensor: exports_external.string().min(1, "sensor must be a non-empty string"),
15023
+ sendTime: IsoDateTimeString,
15024
+ dataVersion: exports_external.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),
15025
+ data: exports_external.array(CaliperEvent).min(1, "data must contain at least one event")
15026
+ });
15027
+ var CaliperSendEventsInput = exports_external.object({
15028
+ sensor: exports_external.string().min(1, "sensor must be a non-empty string"),
15029
+ events: exports_external.array(CaliperEvent).min(1, "events must contain at least one event")
15030
+ });
15031
+ var CaliperListEventsParams = exports_external.object({
15032
+ limit: exports_external.number().int().positive().optional(),
15033
+ offset: exports_external.number().int().min(0).optional(),
15034
+ sensor: exports_external.string().min(1).optional(),
15035
+ startDate: IsoDateTimeString.optional(),
15036
+ endDate: IsoDateTimeString.optional(),
15037
+ actorId: exports_external.string().min(1).optional(),
15038
+ actorEmail: exports_external.email().optional()
15039
+ }).strict();
14954
15040
  // ../types/src/zod/config.ts
14955
15041
  var CourseIds = exports_external.object({
14956
15042
  staging: exports_external.string().optional(),
@@ -14997,11 +15083,12 @@ var TimebackConfig = exports_external.object({
14997
15083
  sensors: exports_external.array(exports_external.string().url()).optional()
14998
15084
  });
14999
15085
  // ../types/src/zod/edubridge.ts
15086
+ var EdubridgeDateString = exports_external.union([IsoDateString, IsoDateTimeString]);
15000
15087
  var EduBridgeEnrollment = exports_external.object({
15001
15088
  id: exports_external.string(),
15002
15089
  role: exports_external.string(),
15003
- beginDate: exports_external.string().nullable(),
15004
- endDate: exports_external.string().nullable(),
15090
+ beginDate: EdubridgeDateString.nullable(),
15091
+ endDate: EdubridgeDateString.nullable(),
15005
15092
  metadata: exports_external.object({
15006
15093
  goals: exports_external.object({ dailyXp: exports_external.number().optional() }).optional(),
15007
15094
  metrics: exports_external.object({ totalXp: exports_external.number().optional(), totalLessons: exports_external.number().optional() }).optional()
@@ -15035,17 +15122,340 @@ var EduBridgeAnalyticsFacts = exports_external.record(exports_external.string(),
15035
15122
  var EduBridgeEnrollmentAnalyticsResponse = exports_external.object({
15036
15123
  message: exports_external.string(),
15037
15124
  enrollmentId: exports_external.string(),
15038
- startDate: exports_external.string(),
15039
- endDate: exports_external.string(),
15125
+ startDate: EdubridgeDateString,
15126
+ endDate: EdubridgeDateString,
15040
15127
  facts: EduBridgeAnalyticsFacts,
15041
15128
  factsByApp: exports_external.unknown()
15042
15129
  });
15130
+ var NonEmptyString = exports_external.string().trim().min(1);
15131
+ var EmailOrStudentId = exports_external.object({
15132
+ email: exports_external.email().optional(),
15133
+ studentId: NonEmptyString.optional()
15134
+ }).superRefine((value, ctx) => {
15135
+ if (!value.email && !value.studentId) {
15136
+ ctx.addIssue({
15137
+ code: exports_external.ZodIssueCode.custom,
15138
+ message: "must provide either email or studentId",
15139
+ path: ["email"]
15140
+ });
15141
+ ctx.addIssue({
15142
+ code: exports_external.ZodIssueCode.custom,
15143
+ message: "must provide either email or studentId",
15144
+ path: ["studentId"]
15145
+ });
15146
+ }
15147
+ });
15043
15148
  var SubjectTrackInput = exports_external.object({
15044
- subject: exports_external.string(),
15045
- gradeLevel: exports_external.string(),
15046
- targetCourseId: exports_external.string(),
15149
+ subject: NonEmptyString,
15150
+ gradeLevel: NonEmptyString,
15151
+ targetCourseId: NonEmptyString,
15047
15152
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15048
15153
  });
15154
+ var SubjectTrackUpsertInput = SubjectTrackInput.extend({
15155
+ id: NonEmptyString
15156
+ });
15157
+ var EdubridgeListEnrollmentsParams = exports_external.object({
15158
+ userId: NonEmptyString
15159
+ });
15160
+ var EdubridgeEnrollOptions = exports_external.object({
15161
+ sourcedId: NonEmptyString.optional(),
15162
+ role: EnrollmentRole.optional(),
15163
+ beginDate: EdubridgeDateString.optional(),
15164
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15165
+ });
15166
+ var EdubridgeUsersListParams = exports_external.object({
15167
+ fields: exports_external.string().optional(),
15168
+ limit: exports_external.number().int().positive().optional(),
15169
+ offset: exports_external.number().int().nonnegative().optional(),
15170
+ sort: exports_external.string().optional(),
15171
+ orderBy: exports_external.enum(["asc", "desc"]).optional(),
15172
+ filter: exports_external.string().optional(),
15173
+ search: exports_external.string().optional(),
15174
+ roles: exports_external.array(OneRosterUserRole).min(1),
15175
+ orgSourcedIds: exports_external.array(NonEmptyString).optional()
15176
+ });
15177
+ var EdubridgeActivityParams = EmailOrStudentId.extend({
15178
+ startDate: EdubridgeDateString,
15179
+ endDate: EdubridgeDateString,
15180
+ timezone: exports_external.string().optional()
15181
+ });
15182
+ var EdubridgeWeeklyFactsParams = EmailOrStudentId.extend({
15183
+ weekDate: EdubridgeDateString,
15184
+ timezone: exports_external.string().optional()
15185
+ });
15186
+ var EdubridgeEnrollmentFactsParams = exports_external.object({
15187
+ enrollmentId: NonEmptyString,
15188
+ startDate: EdubridgeDateString.optional(),
15189
+ endDate: EdubridgeDateString.optional(),
15190
+ timezone: exports_external.string().optional()
15191
+ });
15192
+ // ../types/src/zod/oneroster.ts
15193
+ var NonEmptyString2 = exports_external.string().min(1);
15194
+ var Status = exports_external.enum(["active", "tobedeleted"]);
15195
+ var Metadata = exports_external.record(exports_external.string(), exports_external.unknown()).nullable().optional();
15196
+ var Ref = exports_external.object({
15197
+ sourcedId: NonEmptyString2,
15198
+ type: exports_external.string().optional(),
15199
+ href: exports_external.string().optional()
15200
+ }).strict();
15201
+ var OneRosterDateString = exports_external.union([IsoDateString, IsoDateTimeString]);
15202
+ var OneRosterUserRoleInput = exports_external.object({
15203
+ roleType: exports_external.enum(["primary", "secondary"]),
15204
+ role: OneRosterUserRole,
15205
+ org: Ref,
15206
+ userProfile: exports_external.string().optional(),
15207
+ metadata: Metadata,
15208
+ beginDate: OneRosterDateString.optional(),
15209
+ endDate: OneRosterDateString.optional()
15210
+ }).strict();
15211
+ var OneRosterUserCreateInput = exports_external.object({
15212
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
15213
+ status: Status.optional(),
15214
+ enabledUser: exports_external.boolean(),
15215
+ givenName: NonEmptyString2.describe("givenName must be a non-empty string"),
15216
+ familyName: NonEmptyString2.describe("familyName must be a non-empty string"),
15217
+ middleName: NonEmptyString2.optional(),
15218
+ username: NonEmptyString2.optional(),
15219
+ email: exports_external.email().optional(),
15220
+ roles: exports_external.array(OneRosterUserRoleInput).min(1, "roles must include at least one role"),
15221
+ userIds: exports_external.array(exports_external.object({
15222
+ type: NonEmptyString2,
15223
+ identifier: NonEmptyString2
15224
+ }).strict()).optional(),
15225
+ agents: exports_external.array(Ref).optional(),
15226
+ grades: exports_external.array(TimebackGrade).optional(),
15227
+ identifier: NonEmptyString2.optional(),
15228
+ sms: NonEmptyString2.optional(),
15229
+ phone: NonEmptyString2.optional(),
15230
+ pronouns: NonEmptyString2.optional(),
15231
+ password: NonEmptyString2.optional(),
15232
+ metadata: Metadata
15233
+ }).strict();
15234
+ var OneRosterCourseCreateInput = exports_external.object({
15235
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
15236
+ status: Status.optional(),
15237
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15238
+ org: Ref,
15239
+ courseCode: NonEmptyString2.optional(),
15240
+ subjects: exports_external.array(TimebackSubject).optional(),
15241
+ grades: exports_external.array(TimebackGrade).optional(),
15242
+ level: NonEmptyString2.optional(),
15243
+ metadata: Metadata
15244
+ }).strict();
15245
+ var OneRosterClassCreateInput = exports_external.object({
15246
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
15247
+ status: Status.optional(),
15248
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15249
+ terms: exports_external.array(Ref).min(1, "terms must have at least one item"),
15250
+ course: Ref,
15251
+ org: Ref,
15252
+ classCode: NonEmptyString2.optional(),
15253
+ classType: exports_external.enum(["homeroom", "scheduled"]).optional(),
15254
+ location: NonEmptyString2.optional(),
15255
+ grades: exports_external.array(TimebackGrade).optional(),
15256
+ subjects: exports_external.array(TimebackSubject).optional(),
15257
+ subjectCodes: exports_external.array(NonEmptyString2).optional(),
15258
+ periods: exports_external.array(NonEmptyString2).optional(),
15259
+ metadata: Metadata
15260
+ }).strict();
15261
+ var StringBoolean = exports_external.enum(["true", "false"]);
15262
+ var OneRosterEnrollmentCreateInput = exports_external.object({
15263
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
15264
+ status: Status.optional(),
15265
+ user: Ref,
15266
+ class: Ref,
15267
+ school: Ref.optional(),
15268
+ role: OneRosterUserRole,
15269
+ primary: StringBoolean.optional(),
15270
+ beginDate: OneRosterDateString.optional(),
15271
+ endDate: OneRosterDateString.optional(),
15272
+ metadata: Metadata
15273
+ }).strict();
15274
+ var OneRosterCategoryCreateInput = exports_external.object({
15275
+ sourcedId: NonEmptyString2.optional(),
15276
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15277
+ status: Status,
15278
+ weight: exports_external.number().nullable().optional(),
15279
+ metadata: Metadata
15280
+ }).strict();
15281
+ var OneRosterLineItemCreateInput = exports_external.object({
15282
+ sourcedId: NonEmptyString2.optional(),
15283
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15284
+ class: Ref,
15285
+ school: Ref,
15286
+ category: Ref,
15287
+ assignDate: OneRosterDateString,
15288
+ dueDate: OneRosterDateString,
15289
+ status: Status,
15290
+ description: exports_external.string().optional(),
15291
+ resultValueMin: exports_external.number().nullable().optional(),
15292
+ resultValueMax: exports_external.number().nullable().optional(),
15293
+ scoreScale: Ref.optional(),
15294
+ metadata: Metadata
15295
+ }).strict();
15296
+ var OneRosterResultCreateInput = exports_external.object({
15297
+ sourcedId: NonEmptyString2.optional(),
15298
+ lineItem: Ref,
15299
+ student: Ref,
15300
+ class: Ref.optional(),
15301
+ scoreDate: OneRosterDateString,
15302
+ scoreStatus: exports_external.enum([
15303
+ "exempt",
15304
+ "fully graded",
15305
+ "not submitted",
15306
+ "partially graded",
15307
+ "submitted"
15308
+ ]),
15309
+ score: exports_external.number().nullable().optional(),
15310
+ textScore: exports_external.string().nullable().optional(),
15311
+ status: Status,
15312
+ comment: exports_external.string().nullable().optional(),
15313
+ metadata: Metadata
15314
+ }).strict();
15315
+ var OneRosterScoreScaleCreateInput = exports_external.object({
15316
+ sourcedId: NonEmptyString2.optional(),
15317
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15318
+ status: Status.optional(),
15319
+ type: exports_external.string().optional(),
15320
+ class: Ref.optional(),
15321
+ course: Ref.nullable().optional(),
15322
+ scoreScaleValue: exports_external.array(exports_external.object({
15323
+ itemValueLHS: NonEmptyString2,
15324
+ itemValueRHS: NonEmptyString2,
15325
+ value: exports_external.string().optional(),
15326
+ description: exports_external.string().optional()
15327
+ }).strict()).optional(),
15328
+ minScore: exports_external.number().optional(),
15329
+ maxScore: exports_external.number().optional(),
15330
+ metadata: Metadata
15331
+ }).strict();
15332
+ var OneRosterAssessmentLineItemCreateInput = exports_external.object({
15333
+ sourcedId: NonEmptyString2.optional(),
15334
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15335
+ class: Ref,
15336
+ school: Ref,
15337
+ category: Ref,
15338
+ assignDate: OneRosterDateString,
15339
+ dueDate: OneRosterDateString,
15340
+ status: Status,
15341
+ metadata: Metadata
15342
+ }).strict();
15343
+ var OneRosterAssessmentResultCreateInput = exports_external.object({
15344
+ sourcedId: NonEmptyString2.optional(),
15345
+ lineItem: Ref,
15346
+ student: Ref,
15347
+ scoreDate: OneRosterDateString,
15348
+ scoreStatus: exports_external.enum([
15349
+ "exempt",
15350
+ "fully graded",
15351
+ "not submitted",
15352
+ "partially graded",
15353
+ "submitted"
15354
+ ]),
15355
+ score: exports_external.string().optional(),
15356
+ status: Status,
15357
+ metadata: Metadata
15358
+ }).strict();
15359
+ var OneRosterOrgCreateInput = exports_external.object({
15360
+ sourcedId: NonEmptyString2.optional(),
15361
+ status: Status.optional(),
15362
+ name: NonEmptyString2.describe("name must be a non-empty string"),
15363
+ type: OrganizationType,
15364
+ identifier: NonEmptyString2.optional(),
15365
+ parent: Ref.optional(),
15366
+ metadata: Metadata
15367
+ }).strict();
15368
+ var OneRosterSchoolCreateInput = exports_external.object({
15369
+ sourcedId: NonEmptyString2.optional(),
15370
+ status: Status.optional(),
15371
+ name: NonEmptyString2.describe("name must be a non-empty string"),
15372
+ type: exports_external.literal("school").optional(),
15373
+ identifier: NonEmptyString2.optional(),
15374
+ parent: Ref.optional(),
15375
+ metadata: Metadata
15376
+ }).strict();
15377
+ var OneRosterAcademicSessionCreateInput = exports_external.object({
15378
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
15379
+ status: Status,
15380
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15381
+ startDate: OneRosterDateString,
15382
+ endDate: OneRosterDateString,
15383
+ type: exports_external.enum(["gradingPeriod", "semester", "schoolYear", "term"]),
15384
+ schoolYear: NonEmptyString2.describe("schoolYear must be a non-empty string"),
15385
+ org: Ref,
15386
+ parent: Ref.optional(),
15387
+ children: exports_external.array(Ref).optional(),
15388
+ metadata: Metadata
15389
+ }).strict();
15390
+ var OneRosterComponentResourceCreateInput = exports_external.object({
15391
+ sourcedId: NonEmptyString2.optional(),
15392
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15393
+ courseComponent: Ref,
15394
+ resource: Ref,
15395
+ status: Status,
15396
+ metadata: Metadata
15397
+ }).strict();
15398
+ var OneRosterCourseComponentCreateInput = exports_external.object({
15399
+ sourcedId: NonEmptyString2.optional(),
15400
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15401
+ course: Ref,
15402
+ status: Status,
15403
+ metadata: Metadata
15404
+ }).strict();
15405
+ var OneRosterEnrollInput = exports_external.object({
15406
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
15407
+ role: exports_external.enum(["student", "teacher"]),
15408
+ primary: StringBoolean.optional(),
15409
+ beginDate: OneRosterDateString.optional(),
15410
+ endDate: OneRosterDateString.optional(),
15411
+ metadata: Metadata
15412
+ }).strict();
15413
+ var OneRosterAgentInput = exports_external.object({
15414
+ agentSourcedId: NonEmptyString2.describe("agentSourcedId must be a non-empty string")
15415
+ }).strict();
15416
+ var OneRosterCredentialInput = exports_external.object({
15417
+ type: NonEmptyString2.describe("type must be a non-empty string"),
15418
+ username: NonEmptyString2.describe("username must be a non-empty string"),
15419
+ password: exports_external.string().optional(),
15420
+ metadata: Metadata
15421
+ }).strict();
15422
+ var OneRosterDemographicsCreateInput = exports_external.object({
15423
+ sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string")
15424
+ }).loose();
15425
+ var OneRosterResourceCreateInput = exports_external.object({
15426
+ sourcedId: NonEmptyString2.optional(),
15427
+ title: NonEmptyString2.describe("title must be a non-empty string"),
15428
+ vendorResourceId: NonEmptyString2.describe("vendorResourceId must be a non-empty string"),
15429
+ roles: exports_external.array(exports_external.enum(["primary", "secondary"])).optional(),
15430
+ importance: exports_external.enum(["primary", "secondary"]).optional(),
15431
+ vendorId: exports_external.string().optional(),
15432
+ applicationId: exports_external.string().optional(),
15433
+ status: Status.optional(),
15434
+ metadata: Metadata
15435
+ }).strict();
15436
+ var CourseStructureItem = exports_external.object({
15437
+ url: NonEmptyString2.describe("courseStructure.url must be a non-empty string"),
15438
+ skillCode: NonEmptyString2.describe("courseStructure.skillCode must be a non-empty string"),
15439
+ lessonCode: NonEmptyString2.describe("courseStructure.lessonCode must be a non-empty string"),
15440
+ title: NonEmptyString2.describe("courseStructure.title must be a non-empty string"),
15441
+ "unit-title": NonEmptyString2.describe("courseStructure.unit-title must be a non-empty string"),
15442
+ status: NonEmptyString2.describe("courseStructure.status must be a non-empty string"),
15443
+ xp: exports_external.number()
15444
+ }).loose();
15445
+ var OneRosterCourseStructureInput = exports_external.object({
15446
+ course: exports_external.object({
15447
+ sourcedId: NonEmptyString2.describe("course.sourcedId must be a non-empty string").optional(),
15448
+ title: NonEmptyString2.describe("course.title must be a non-empty string"),
15449
+ org: Ref,
15450
+ status: Status,
15451
+ metadata: Metadata
15452
+ }).strict(),
15453
+ courseStructure: exports_external.record(exports_external.string(), CourseStructureItem)
15454
+ }).strict();
15455
+ var OneRosterBulkResultItem = exports_external.object({
15456
+ student: Ref
15457
+ }).loose();
15458
+ var OneRosterBulkResultsInput = exports_external.array(OneRosterBulkResultItem).min(1, "results must have at least one item");
15049
15459
  // ../types/src/zod/qti.ts
15050
15460
  var QtiAssessmentItemType = exports_external.enum([
15051
15461
  "choice",
@@ -15162,6 +15572,12 @@ var QtiCatalogInfo = exports_external.object({
15162
15572
  support: exports_external.string(),
15163
15573
  content: exports_external.string()
15164
15574
  }).strict();
15575
+ var QtiPaginationParams = exports_external.object({
15576
+ page: exports_external.number().int().positive().optional(),
15577
+ limit: exports_external.number().int().positive().optional(),
15578
+ sort: exports_external.string().optional(),
15579
+ order: exports_external.enum(["asc", "desc"]).optional()
15580
+ }).strict();
15165
15581
  var QtiAssessmentItemCreateInput = exports_external.object({
15166
15582
  identifier: exports_external.string().min(1),
15167
15583
  title: exports_external.string().min(1),
@@ -15178,6 +15594,7 @@ var QtiAssessmentItemCreateInput = exports_external.object({
15178
15594
  feedbackBlock: exports_external.array(QtiFeedbackBlock).optional()
15179
15595
  }).strict();
15180
15596
  var QtiAssessmentItemUpdateInput = exports_external.object({
15597
+ identifier: exports_external.string().min(1).optional(),
15181
15598
  title: exports_external.string().min(1),
15182
15599
  type: QtiAssessmentItemType,
15183
15600
  qtiVersion: exports_external.string().optional(),
@@ -15216,6 +15633,12 @@ var QtiTestPart = exports_external.object({
15216
15633
  submissionMode: QtiSubmissionMode,
15217
15634
  "qti-assessment-section": exports_external.union([QtiAssessmentSection, exports_external.array(QtiAssessmentSection)])
15218
15635
  }).strict();
15636
+ var QtiReorderItemsInput = exports_external.object({
15637
+ items: exports_external.array(QtiAssessmentItemRef).min(1)
15638
+ }).strict();
15639
+ var QtiAssessmentTestMetadataUpdateInput = exports_external.object({
15640
+ metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15641
+ }).strict();
15219
15642
  var QtiAssessmentTestCreateInput = exports_external.object({
15220
15643
  identifier: exports_external.string().min(1),
15221
15644
  title: exports_external.string().min(1),
@@ -15230,6 +15653,7 @@ var QtiAssessmentTestCreateInput = exports_external.object({
15230
15653
  "qti-outcome-declaration": exports_external.array(QtiTestOutcomeDeclaration).optional()
15231
15654
  }).strict();
15232
15655
  var QtiAssessmentTestUpdateInput = exports_external.object({
15656
+ identifier: exports_external.string().min(1).optional(),
15233
15657
  title: exports_external.string().min(1),
15234
15658
  qtiVersion: exports_external.string().optional(),
15235
15659
  toolName: exports_external.string().optional(),
@@ -15254,6 +15678,7 @@ var QtiStimulusCreateInput = exports_external.object({
15254
15678
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
15255
15679
  }).strict();
15256
15680
  var QtiStimulusUpdateInput = exports_external.object({
15681
+ identifier: exports_external.string().min(1).optional(),
15257
15682
  title: exports_external.string().min(1),
15258
15683
  label: exports_external.string().optional(),
15259
15684
  language: exports_external.string().optional(),
@@ -16332,7 +16757,7 @@ async function resolveConfig(courseIds, opts, credentials, configuredEnvs, defau
16332
16757
  return resolved;
16333
16758
  }
16334
16759
 
16335
- // ../../node_modules/.bun/@hono+node-server@1.19.8+fd698e00a3b2abce/node_modules/@hono/node-server/dist/index.mjs
16760
+ // ../../node_modules/.bun/@hono+node-server@1.19.9+fd698e00a3b2abce/node_modules/@hono/node-server/dist/index.mjs
16336
16761
  import { createServer as createServerHTTP } from "http";
16337
16762
  import { Http2ServerRequest as Http2ServerRequest2 } from "http2";
16338
16763
  import { Http2ServerRequest } from "http2";
@@ -16641,17 +17066,9 @@ var buildOutgoingHttpHeaders = (headers) => {
16641
17066
  return res;
16642
17067
  };
16643
17068
  var X_ALREADY_SENT = "x-hono-already-sent";
16644
- var webFetch = global.fetch;
16645
17069
  if (typeof global.crypto === "undefined") {
16646
17070
  global.crypto = crypto;
16647
17071
  }
16648
- global.fetch = (info, init2) => {
16649
- init2 = {
16650
- compress: false,
16651
- ...init2
16652
- };
16653
- return webFetch(info, init2);
16654
- };
16655
17072
  var outgoingEnded = Symbol("outgoingEnded");
16656
17073
  var handleRequestError = () => new Response(null, {
16657
17074
  status: 400
@@ -39,7 +39,7 @@ export declare function handleBootstrap(c: Context<{
39
39
  email?: string | undefined;
40
40
  roles: {
41
41
  roleType: "primary" | "secondary";
42
- role: import("@timeback/types").OneRosterUserRole;
42
+ role: import("@timeback/oneroster/types").OneRosterUserRole;
43
43
  org: {
44
44
  sourcedId: string;
45
45
  href: string;
@@ -145,7 +145,7 @@ export declare function handleBootstrap(c: Context<{
145
145
  title: string;
146
146
  courseCode?: string | undefined;
147
147
  grades?: import("@timeback/types").TimebackGrade[] | undefined;
148
- subjects?: import("@timeback/types").TimebackSubject[] | undefined;
148
+ subjects?: import("@timeback/caliper").TimebackSubject[] | undefined;
149
149
  subjectCodes?: string[] | undefined;
150
150
  org: {
151
151
  sourcedId: string;
@@ -203,7 +203,7 @@ export declare function handleBootstrap(c: Context<{
203
203
  sourcedId: string;
204
204
  };
205
205
  sortOrder?: number | undefined;
206
- lessonType?: import("@timeback/types").LessonType | undefined;
206
+ lessonType?: import("@timeback/oneroster/types").LessonType | undefined;
207
207
  resourceDetails?: {
208
208
  sourcedId?: string | undefined;
209
209
  status?: "active" | "tobedeleted" | undefined;
@@ -429,7 +429,7 @@ export declare function handleBootstrap(c: Context<{
429
429
  classType?: "homeroom" | "scheduled" | undefined;
430
430
  location?: string | null | undefined;
431
431
  grades?: import("@timeback/types").TimebackGrade[] | undefined;
432
- subjects?: import("@timeback/types").TimebackSubject[] | undefined;
432
+ subjects?: import("@timeback/caliper").TimebackSubject[] | undefined;
433
433
  subjectCodes?: string[] | undefined;
434
434
  periods?: string[] | undefined;
435
435
  terms?: {
@@ -498,7 +498,7 @@ export declare function handleBootstrap(c: Context<{
498
498
  type: string;
499
499
  name?: string | undefined;
500
500
  };
501
- role: import("@timeback/types").OneRosterUserRole;
501
+ role: import("@timeback/oneroster/types").OneRosterUserRole;
502
502
  primary?: string | null | undefined;
503
503
  beginDate?: string | null | undefined;
504
504
  endDate?: string | null | undefined;
@@ -523,7 +523,7 @@ export declare function handleBootstrap(c: Context<{
523
523
  email?: string | undefined;
524
524
  roles: {
525
525
  roleType: "primary" | "secondary";
526
- role: import("@timeback/types").OneRosterUserRole;
526
+ role: import("@timeback/oneroster/types").OneRosterUserRole;
527
527
  org: {
528
528
  sourcedId: string;
529
529
  href: string;
@@ -63,7 +63,7 @@ export declare function handleStatus(c: Context, ctx: AppContext): Promise<(Resp
63
63
  totalGrades?: number | undefined;
64
64
  } | undefined;
65
65
  } | undefined;
66
- subject: import("@timeback/types").TimebackSubject;
66
+ subject: import("@timeback/caliper").TimebackSubject;
67
67
  grade: import("@timeback/types").TimebackGrade;
68
68
  ids?: {
69
69
  staging?: string | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "timeback-studio",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -27,7 +27,7 @@
27
27
  "dependencies": {
28
28
  "@clack/prompts": "^0.11.0",
29
29
  "@hono/node-server": "^1.19.7",
30
- "@timeback/core": "0.1.1",
30
+ "@timeback/core": "0.1.2",
31
31
  "colorette": "^2.0.20",
32
32
  "commander": "^14.0.2",
33
33
  "hono": "^4.11.1",