timeback-studio 0.1.8 → 0.1.10-beta.20260219190739

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
@@ -16691,8 +16691,12 @@ var CredentialsSchema = exports_external.object({
16691
16691
  clientSecret: exports_external.string().min(1, "Client secret is required"),
16692
16692
  email: exports_external.email("Valid email is required").optional()
16693
16693
  });
16694
- var ClientIdSchema = exports_external.string().min(1, "Client ID is required").regex(/^[a-z0-9]+$/, "Client ID must contain only lowercase letters and numbers").length(26, "Client ID must be exactly 26 characters");
16694
+ var ClientIdSchema = exports_external.string().min(1, "Client ID is required").regex(/^[a-z0-9]+$/, "Client ID must contain only lowercase letters and numbers");
16695
16695
  var ClientSecretSchema = exports_external.string().min(1, "Client secret is required").regex(/^[a-z0-9]+$/, "Client secret must contain only lowercase letters and numbers").max(53, "Client secret must be less than 53 characters");
16696
+ var MasteryTrackCredentialsSchema = exports_external.object({
16697
+ apiKey: exports_external.string().min(1, "API key is required"),
16698
+ email: exports_external.email("Valid email is required")
16699
+ });
16696
16700
  // ../internal/cli-infra/src/ui.ts
16697
16701
  function intro(title) {
16698
16702
  console.log("");
@@ -16708,9 +16712,11 @@ var outro = {
16708
16712
 
16709
16713
  // ../internal/cli-infra/src/credentials/store.ts
16710
16714
  import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
16715
+ import { join as join2 } from "node:path";
16716
+
16717
+ // ../internal/cli-infra/src/paths.ts
16711
16718
  import { homedir, platform as platform2 } from "node:os";
16712
16719
  import { join } from "node:path";
16713
- var ENVIRONMENTS = ["staging", "production"];
16714
16720
  function getConfigDir() {
16715
16721
  const home = homedir();
16716
16722
  switch (platform2()) {
@@ -16722,8 +16728,11 @@ function getConfigDir() {
16722
16728
  return join(process.env.XDG_CONFIG_HOME || join(home, ".config"), "timeback");
16723
16729
  }
16724
16730
  }
16731
+
16732
+ // ../internal/cli-infra/src/credentials/store.ts
16733
+ var ENVIRONMENTS = ["staging", "production"];
16725
16734
  var CREDENTIALS_DIR = getConfigDir();
16726
- var CREDENTIALS_FILE = join(CREDENTIALS_DIR, "credentials.json");
16735
+ var CREDENTIALS_FILE = join2(CREDENTIALS_DIR, "credentials.json");
16727
16736
  function getCredentialsPath() {
16728
16737
  return CREDENTIALS_FILE;
16729
16738
  }
@@ -16753,22 +16762,26 @@ async function readCredentialsStore() {
16753
16762
  }
16754
16763
  }
16755
16764
  async function writeCredentialsStore(store) {
16756
- if (!await ensureCredentialsDir())
16765
+ if (!await ensureCredentialsDir()) {
16757
16766
  return false;
16758
- const { staging, production } = store;
16759
- const cleaned = {};
16760
- if (staging)
16761
- cleaned.staging = staging;
16762
- if (production)
16763
- cleaned.production = production;
16767
+ }
16768
+ const cleaned = { ...store };
16769
+ delete cleaned.default;
16764
16770
  await writeFile(CREDENTIALS_FILE, JSON.stringify(cleaned, null, 2), { mode: 384 });
16765
16771
  return true;
16766
16772
  }
16767
16773
  async function getSavedCredentials(environment) {
16768
16774
  const store = await readCredentialsStore();
16769
- const creds = store[environment];
16770
- if (creds) {
16771
- const result = CredentialsSchema.safeParse(creds);
16775
+ const namespaced = store.timeback?.[environment];
16776
+ if (namespaced) {
16777
+ const result = CredentialsSchema.safeParse(namespaced);
16778
+ if (result.success) {
16779
+ return result.data;
16780
+ }
16781
+ }
16782
+ const legacy = store[environment];
16783
+ if (legacy) {
16784
+ const result = CredentialsSchema.safeParse(legacy);
16772
16785
  if (result.success) {
16773
16786
  return result.data;
16774
16787
  }
@@ -16777,23 +16790,38 @@ async function getSavedCredentials(environment) {
16777
16790
  }
16778
16791
  async function saveCredentials(environment, credentials) {
16779
16792
  const store = await readCredentialsStore();
16780
- store[environment] = credentials;
16793
+ store.timeback = store.timeback ?? {};
16794
+ store.timeback[environment] = credentials;
16795
+ delete store[environment];
16781
16796
  return writeCredentialsStore(store);
16782
16797
  }
16783
16798
  async function clearCredentials(environment) {
16799
+ const store = await readCredentialsStore();
16784
16800
  if (environment) {
16785
- const store = await readCredentialsStore();
16801
+ delete store.timeback?.[environment];
16802
+ if (store.timeback && Object.keys(store.timeback).length === 0) {
16803
+ delete store.timeback;
16804
+ }
16786
16805
  delete store[environment];
16787
16806
  await writeCredentialsStore(store);
16788
16807
  } else {
16789
- await writeCredentialsStore({});
16808
+ delete store.timeback;
16809
+ delete store["staging"];
16810
+ delete store["production"];
16811
+ await writeCredentialsStore(store);
16790
16812
  }
16791
16813
  }
16792
16814
  async function getConfiguredEnvironments() {
16793
16815
  const store = await readCredentialsStore();
16794
16816
  const configured = [];
16795
16817
  for (const env2 of ENVIRONMENTS) {
16796
- if (store[env2]) {
16818
+ const namespaced = store.timeback?.[env2];
16819
+ if (namespaced && CredentialsSchema.safeParse(namespaced).success) {
16820
+ configured.push(env2);
16821
+ continue;
16822
+ }
16823
+ const legacy = store[env2];
16824
+ if (legacy && CredentialsSchema.safeParse(legacy).success) {
16797
16825
  configured.push(env2);
16798
16826
  }
16799
16827
  }
@@ -17252,6 +17280,213 @@ var CaliperListEventsParams = exports_external.object({
17252
17280
  actorId: exports_external.string().min(1).optional(),
17253
17281
  actorEmail: exports_external.email().optional()
17254
17282
  }).strict();
17283
+ // ../types/src/zod/webhooks.ts
17284
+ var WebhookCreateInput = exports_external.object({
17285
+ name: exports_external.string().min(1, "name must be a non-empty string"),
17286
+ targetUrl: exports_external.url("targetUrl must be a valid URL"),
17287
+ secret: exports_external.string().min(1, "secret must be a non-empty string"),
17288
+ active: exports_external.boolean(),
17289
+ sensor: exports_external.string().nullable().optional(),
17290
+ description: exports_external.string().nullable().optional()
17291
+ }).strict();
17292
+ var WebhookFilterType = exports_external.enum(["string", "number", "boolean"]);
17293
+ var WebhookFilterOperation = exports_external.enum([
17294
+ "eq",
17295
+ "neq",
17296
+ "gt",
17297
+ "gte",
17298
+ "lt",
17299
+ "lte",
17300
+ "contains",
17301
+ "notContains",
17302
+ "in",
17303
+ "notIn",
17304
+ "startsWith",
17305
+ "endsWith",
17306
+ "regexp"
17307
+ ]);
17308
+ var WebhookFilterCreateInput = exports_external.object({
17309
+ webhookId: exports_external.string().min(1, "webhookId must be a non-empty string"),
17310
+ filterKey: exports_external.string().min(1, "filterKey must be a non-empty string"),
17311
+ filterValue: exports_external.string().min(1, "filterValue must be a non-empty string"),
17312
+ filterType: WebhookFilterType,
17313
+ filterOperator: WebhookFilterOperation,
17314
+ active: exports_external.boolean()
17315
+ }).strict();
17316
+ // ../types/src/zod/case.ts
17317
+ var NonEmptyString = exports_external.string().trim().min(1);
17318
+ var InputNodeURISchema = exports_external.object({
17319
+ title: NonEmptyString,
17320
+ identifier: NonEmptyString,
17321
+ uri: NonEmptyString
17322
+ });
17323
+ var CFDocumentInputSchema = exports_external.object({
17324
+ identifier: NonEmptyString,
17325
+ uri: NonEmptyString,
17326
+ lastChangeDateTime: NonEmptyString,
17327
+ title: NonEmptyString,
17328
+ creator: NonEmptyString,
17329
+ officialSourceURL: exports_external.string().optional(),
17330
+ publisher: exports_external.string().optional(),
17331
+ description: exports_external.string().optional(),
17332
+ language: exports_external.string().optional(),
17333
+ version: exports_external.string().optional(),
17334
+ caseVersion: exports_external.string().optional(),
17335
+ adoptionStatus: exports_external.string().optional(),
17336
+ statusStartDate: exports_external.string().optional(),
17337
+ statusEndDate: exports_external.string().optional(),
17338
+ licenseUri: exports_external.string().optional(),
17339
+ notes: exports_external.string().optional(),
17340
+ subject: exports_external.array(exports_external.string()).optional(),
17341
+ extensions: exports_external.unknown().optional()
17342
+ });
17343
+ var CFItemInputSchema = exports_external.object({
17344
+ identifier: NonEmptyString,
17345
+ uri: NonEmptyString,
17346
+ lastChangeDateTime: NonEmptyString,
17347
+ fullStatement: NonEmptyString,
17348
+ alternativeLabel: exports_external.string().optional(),
17349
+ CFItemType: exports_external.string().optional(),
17350
+ cfItemType: exports_external.string().optional(),
17351
+ humanCodingScheme: exports_external.string().optional(),
17352
+ listEnumeration: exports_external.string().optional(),
17353
+ abbreviatedStatement: exports_external.string().optional(),
17354
+ conceptKeywords: exports_external.array(exports_external.string()).optional(),
17355
+ notes: exports_external.string().optional(),
17356
+ subject: exports_external.array(exports_external.string()).optional(),
17357
+ language: exports_external.string().optional(),
17358
+ educationLevel: exports_external.array(exports_external.string()).optional(),
17359
+ CFItemTypeURI: exports_external.unknown().optional(),
17360
+ licenseURI: exports_external.unknown().optional(),
17361
+ statusStartDate: exports_external.string().optional(),
17362
+ statusEndDate: exports_external.string().optional(),
17363
+ extensions: exports_external.unknown().optional()
17364
+ });
17365
+ var CFAssociationInputSchema = exports_external.object({
17366
+ identifier: NonEmptyString,
17367
+ uri: NonEmptyString,
17368
+ lastChangeDateTime: NonEmptyString,
17369
+ associationType: NonEmptyString,
17370
+ originNodeURI: InputNodeURISchema,
17371
+ destinationNodeURI: InputNodeURISchema,
17372
+ sequenceNumber: exports_external.number().optional(),
17373
+ extensions: exports_external.unknown().optional()
17374
+ });
17375
+ var CFDefinitionsSchema = exports_external.object({
17376
+ CFItemTypes: exports_external.array(exports_external.unknown()).optional(),
17377
+ CFSubjects: exports_external.array(exports_external.unknown()).optional(),
17378
+ CFConcepts: exports_external.array(exports_external.unknown()).optional(),
17379
+ CFLicenses: exports_external.array(exports_external.unknown()).optional(),
17380
+ CFAssociationGroupings: exports_external.array(exports_external.unknown()).optional(),
17381
+ extensions: exports_external.unknown().optional()
17382
+ });
17383
+ var CasePackageInput = exports_external.object({
17384
+ CFDocument: CFDocumentInputSchema,
17385
+ CFItems: exports_external.array(CFItemInputSchema),
17386
+ CFAssociations: exports_external.array(CFAssociationInputSchema),
17387
+ CFDefinitions: CFDefinitionsSchema.optional(),
17388
+ extensions: exports_external.unknown().optional()
17389
+ });
17390
+ // ../types/src/zod/clr.ts
17391
+ var NonEmptyString2 = exports_external.string().trim().min(1);
17392
+ var NonEmptyStringArray = exports_external.array(exports_external.string()).min(1);
17393
+ var ClrImageSchema = exports_external.object({
17394
+ id: NonEmptyString2,
17395
+ type: exports_external.literal("Image"),
17396
+ caption: exports_external.string().optional()
17397
+ });
17398
+ var ClrProfileSchema = exports_external.object({
17399
+ id: NonEmptyString2,
17400
+ type: NonEmptyStringArray,
17401
+ name: exports_external.string().optional(),
17402
+ url: exports_external.string().optional(),
17403
+ phone: exports_external.string().optional(),
17404
+ description: exports_external.string().optional(),
17405
+ image: ClrImageSchema.optional(),
17406
+ email: exports_external.string().optional()
17407
+ });
17408
+ var ClrProofSchema = exports_external.object({
17409
+ type: NonEmptyString2,
17410
+ proofPurpose: NonEmptyString2,
17411
+ verificationMethod: NonEmptyString2,
17412
+ created: NonEmptyString2,
17413
+ proofValue: NonEmptyString2,
17414
+ cryptosuite: exports_external.string().optional()
17415
+ });
17416
+ var ClrCredentialSchemaSchema = exports_external.object({
17417
+ id: NonEmptyString2,
17418
+ type: exports_external.literal("1EdTechJsonSchemaValidator2019")
17419
+ });
17420
+ var AchievementCriteriaSchema = exports_external.object({
17421
+ id: exports_external.string().optional(),
17422
+ narrative: exports_external.string().optional()
17423
+ });
17424
+ var AchievementSchema = exports_external.object({
17425
+ id: NonEmptyString2,
17426
+ type: NonEmptyStringArray,
17427
+ name: NonEmptyString2,
17428
+ description: NonEmptyString2,
17429
+ criteria: AchievementCriteriaSchema,
17430
+ image: ClrImageSchema.optional(),
17431
+ achievementType: exports_external.string().optional(),
17432
+ creator: ClrProfileSchema.optional()
17433
+ });
17434
+ var IdentityObjectSchema = exports_external.object({
17435
+ type: exports_external.literal("IdentityObject"),
17436
+ identityHash: NonEmptyString2,
17437
+ identityType: NonEmptyString2,
17438
+ hashed: exports_external.boolean(),
17439
+ salt: exports_external.string().optional()
17440
+ });
17441
+ var AssociationTypeSchema = exports_external.enum([
17442
+ "exactMatchOf",
17443
+ "isChildOf",
17444
+ "isParentOf",
17445
+ "isPartOf",
17446
+ "isPeerOf",
17447
+ "isRelatedTo",
17448
+ "precedes",
17449
+ "replacedBy"
17450
+ ]);
17451
+ var AssociationSchema = exports_external.object({
17452
+ type: exports_external.literal("Association"),
17453
+ associationType: AssociationTypeSchema,
17454
+ sourceId: NonEmptyString2,
17455
+ targetId: NonEmptyString2
17456
+ });
17457
+ var VerifiableCredentialSchema = exports_external.object({
17458
+ "@context": NonEmptyStringArray,
17459
+ id: NonEmptyString2,
17460
+ type: NonEmptyStringArray,
17461
+ issuer: ClrProfileSchema,
17462
+ validFrom: NonEmptyString2,
17463
+ validUntil: exports_external.string().optional(),
17464
+ credentialSubject: exports_external.object({
17465
+ id: exports_external.string().optional()
17466
+ }),
17467
+ proof: exports_external.array(ClrProofSchema).optional()
17468
+ });
17469
+ var ClrCredentialSubjectSchema = exports_external.object({
17470
+ id: exports_external.string().optional(),
17471
+ type: NonEmptyStringArray,
17472
+ identifier: exports_external.array(IdentityObjectSchema).optional(),
17473
+ achievement: exports_external.array(AchievementSchema).optional(),
17474
+ verifiableCredential: exports_external.array(VerifiableCredentialSchema).min(1),
17475
+ association: exports_external.array(AssociationSchema).optional()
17476
+ });
17477
+ var ClrCredentialInput = exports_external.object({
17478
+ "@context": NonEmptyStringArray,
17479
+ id: NonEmptyString2,
17480
+ type: NonEmptyStringArray,
17481
+ issuer: ClrProfileSchema,
17482
+ name: NonEmptyString2,
17483
+ description: exports_external.string().optional(),
17484
+ validFrom: NonEmptyString2,
17485
+ validUntil: exports_external.string().optional(),
17486
+ credentialSubject: ClrCredentialSubjectSchema,
17487
+ proof: exports_external.array(ClrProofSchema).optional(),
17488
+ credentialSchema: exports_external.array(ClrCredentialSchemaSchema).optional()
17489
+ });
17255
17490
  // ../types/src/zod/config.ts
17256
17491
  var CourseIds = exports_external.object({
17257
17492
  staging: exports_external.string().meta({ description: "Course ID in staging environment" }).optional(),
@@ -17327,7 +17562,12 @@ var TimebackConfig = exports_external.object({
17327
17562
  }).optional(),
17328
17563
  courses: exports_external.array(CourseConfig).min(1, "At least one course is required").meta({ description: "Courses available in this app" }),
17329
17564
  sensor: exports_external.url().meta({ description: "Default Caliper sensor endpoint URL for all courses" }).optional(),
17330
- launchUrl: exports_external.url().meta({ description: "Default LTI launch URL for all courses" }).optional()
17565
+ launchUrl: exports_external.url().meta({ description: "Default LTI launch URL for all courses" }).optional(),
17566
+ studio: exports_external.object({
17567
+ telemetry: exports_external.boolean().meta({
17568
+ description: "Enable anonymous usage telemetry for Studio (default: true)"
17569
+ }).optional().default(true)
17570
+ }).meta({ description: "Studio-specific configuration" }).optional()
17331
17571
  }).meta({
17332
17572
  id: "TimebackConfig",
17333
17573
  title: "Timeback Config",
@@ -17413,10 +17653,10 @@ var EduBridgeEnrollmentAnalyticsResponse = exports_external.object({
17413
17653
  facts: EduBridgeAnalyticsFacts,
17414
17654
  factsByApp: exports_external.unknown()
17415
17655
  });
17416
- var NonEmptyString = exports_external.string().trim().min(1);
17656
+ var NonEmptyString3 = exports_external.string().trim().min(1);
17417
17657
  var EmailOrStudentId = exports_external.object({
17418
17658
  email: exports_external.email().optional(),
17419
- studentId: NonEmptyString.optional()
17659
+ studentId: NonEmptyString3.optional()
17420
17660
  }).superRefine((value, ctx) => {
17421
17661
  if (!value.email && !value.studentId) {
17422
17662
  ctx.addIssue({
@@ -17432,16 +17672,16 @@ var EmailOrStudentId = exports_external.object({
17432
17672
  }
17433
17673
  });
17434
17674
  var SubjectTrackInput = exports_external.object({
17435
- subject: NonEmptyString,
17436
- grade: NonEmptyString,
17437
- courseId: NonEmptyString,
17438
- orgSourcedId: NonEmptyString.optional()
17675
+ subject: NonEmptyString3,
17676
+ grade: NonEmptyString3,
17677
+ courseId: NonEmptyString3,
17678
+ orgSourcedId: NonEmptyString3.optional()
17439
17679
  });
17440
17680
  var EdubridgeListEnrollmentsParams = exports_external.object({
17441
- userId: NonEmptyString
17681
+ userId: NonEmptyString3
17442
17682
  });
17443
17683
  var EdubridgeEnrollOptions = exports_external.object({
17444
- sourcedId: NonEmptyString.optional(),
17684
+ sourcedId: NonEmptyString3.optional(),
17445
17685
  role: EnrollmentRole.optional(),
17446
17686
  beginDate: EdubridgeDateString.optional(),
17447
17687
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
@@ -17455,7 +17695,7 @@ var EdubridgeUsersListParams = exports_external.object({
17455
17695
  filter: exports_external.string().optional(),
17456
17696
  search: exports_external.string().optional(),
17457
17697
  roles: exports_external.array(OneRosterUserRole).min(1),
17458
- orgSourcedIds: exports_external.array(NonEmptyString).optional()
17698
+ orgSourcedIds: exports_external.array(NonEmptyString3).optional()
17459
17699
  });
17460
17700
  var EdubridgeActivityParams = EmailOrStudentId.extend({
17461
17701
  startDate: EdubridgeDateString,
@@ -17467,17 +17707,94 @@ var EdubridgeWeeklyFactsParams = EmailOrStudentId.extend({
17467
17707
  timezone: exports_external.string().optional()
17468
17708
  });
17469
17709
  var EdubridgeEnrollmentFactsParams = exports_external.object({
17470
- enrollmentId: NonEmptyString,
17710
+ enrollmentId: NonEmptyString3,
17471
17711
  startDate: EdubridgeDateString.optional(),
17472
17712
  endDate: EdubridgeDateString.optional(),
17473
17713
  timezone: exports_external.string().optional()
17474
17714
  });
17715
+ // ../types/src/zod/masterytrack.ts
17716
+ var NonEmptyString4 = exports_external.string().trim().min(1);
17717
+ var MasteryTrackAuthorizerInput = exports_external.object({
17718
+ email: exports_external.email()
17719
+ });
17720
+ var MasteryTrackInventorySearchParams = exports_external.object({
17721
+ name: NonEmptyString4.optional(),
17722
+ timeback_id: NonEmptyString4.optional(),
17723
+ grade: NonEmptyString4.optional(),
17724
+ subject: NonEmptyString4.optional(),
17725
+ all: exports_external.boolean().optional()
17726
+ });
17727
+ var MasteryTrackAssignmentInput = exports_external.object({
17728
+ student_email: exports_external.email(),
17729
+ timeback_id: NonEmptyString4.optional(),
17730
+ subject: NonEmptyString4.optional(),
17731
+ grade_rank: exports_external.number().int().min(0).max(12).optional(),
17732
+ assessment_line_item_sourced_id: NonEmptyString4.optional(),
17733
+ assessment_result_sourced_id: NonEmptyString4.optional()
17734
+ }).superRefine((value, ctx) => {
17735
+ const hasTimebackId = !!value.timeback_id;
17736
+ const hasSubject = !!value.subject;
17737
+ const hasGradeRank = value.grade_rank !== undefined;
17738
+ if (!hasTimebackId && !hasSubject) {
17739
+ ctx.addIssue({
17740
+ code: exports_external.ZodIssueCode.custom,
17741
+ message: "must provide either timeback_id or subject",
17742
+ path: ["timeback_id"]
17743
+ });
17744
+ ctx.addIssue({
17745
+ code: exports_external.ZodIssueCode.custom,
17746
+ message: "must provide either timeback_id or subject",
17747
+ path: ["subject"]
17748
+ });
17749
+ }
17750
+ if (hasGradeRank && !hasSubject) {
17751
+ ctx.addIssue({
17752
+ code: exports_external.ZodIssueCode.custom,
17753
+ message: "grade_rank requires subject",
17754
+ path: ["grade_rank"]
17755
+ });
17756
+ }
17757
+ const hasLineItem = !!value.assessment_line_item_sourced_id;
17758
+ const hasResultId = !!value.assessment_result_sourced_id;
17759
+ if (hasLineItem !== hasResultId) {
17760
+ ctx.addIssue({
17761
+ code: exports_external.ZodIssueCode.custom,
17762
+ message: "assessment_line_item_sourced_id and assessment_result_sourced_id must be provided together",
17763
+ path: hasLineItem ? ["assessment_result_sourced_id"] : ["assessment_line_item_sourced_id"]
17764
+ });
17765
+ }
17766
+ });
17767
+ var MasteryTrackInvalidateAssignmentInput = exports_external.object({
17768
+ student_email: exports_external.email(),
17769
+ assignment_id: exports_external.number().int().positive().optional(),
17770
+ timeback_id: NonEmptyString4.optional(),
17771
+ subject: NonEmptyString4.optional(),
17772
+ grade_rank: exports_external.number().int().min(0).max(12).optional()
17773
+ }).superRefine((value, ctx) => {
17774
+ const byAssignment = value.assignment_id !== undefined;
17775
+ const byTimeback = !!value.timeback_id;
17776
+ const bySubjectGrade = !!value.subject && value.grade_rank !== undefined;
17777
+ if (!byAssignment && !byTimeback && !bySubjectGrade) {
17778
+ ctx.addIssue({
17779
+ code: exports_external.ZodIssueCode.custom,
17780
+ message: "Either assignment_id, timeback_id, or (subject and grade_rank) is required",
17781
+ path: ["assignment_id"]
17782
+ });
17783
+ }
17784
+ if (value.grade_rank !== undefined && !value.subject) {
17785
+ ctx.addIssue({
17786
+ code: exports_external.ZodIssueCode.custom,
17787
+ message: "grade_rank requires subject",
17788
+ path: ["grade_rank"]
17789
+ });
17790
+ }
17791
+ });
17475
17792
  // ../types/src/zod/oneroster.ts
17476
- var NonEmptyString2 = exports_external.string().min(1);
17793
+ var NonEmptyString5 = exports_external.string().min(1);
17477
17794
  var Status = exports_external.enum(["active", "tobedeleted"]);
17478
17795
  var Metadata = exports_external.record(exports_external.string(), exports_external.unknown()).nullable().optional();
17479
17796
  var Ref = exports_external.object({
17480
- sourcedId: NonEmptyString2,
17797
+ sourcedId: NonEmptyString5,
17481
17798
  type: exports_external.string().optional(),
17482
17799
  href: exports_external.string().optional()
17483
17800
  }).strict();
@@ -17492,58 +17809,58 @@ var OneRosterUserRoleInput = exports_external.object({
17492
17809
  endDate: OneRosterDateString.optional()
17493
17810
  }).strict();
17494
17811
  var OneRosterUserCreateInput = exports_external.object({
17495
- sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
17812
+ sourcedId: NonEmptyString5.describe("sourcedId must be a non-empty string"),
17496
17813
  status: Status.optional(),
17497
17814
  enabledUser: exports_external.boolean(),
17498
- givenName: NonEmptyString2.describe("givenName must be a non-empty string"),
17499
- familyName: NonEmptyString2.describe("familyName must be a non-empty string"),
17500
- middleName: NonEmptyString2.optional(),
17501
- username: NonEmptyString2.optional(),
17815
+ givenName: NonEmptyString5.describe("givenName must be a non-empty string"),
17816
+ familyName: NonEmptyString5.describe("familyName must be a non-empty string"),
17817
+ middleName: NonEmptyString5.optional(),
17818
+ username: NonEmptyString5.optional(),
17502
17819
  email: exports_external.email().optional(),
17503
17820
  roles: exports_external.array(OneRosterUserRoleInput).min(1, "roles must include at least one role"),
17504
17821
  userIds: exports_external.array(exports_external.object({
17505
- type: NonEmptyString2,
17506
- identifier: NonEmptyString2
17822
+ type: NonEmptyString5,
17823
+ identifier: NonEmptyString5
17507
17824
  }).strict()).optional(),
17508
17825
  agents: exports_external.array(Ref).optional(),
17509
17826
  grades: exports_external.array(TimebackGrade).optional(),
17510
- identifier: NonEmptyString2.optional(),
17511
- sms: NonEmptyString2.optional(),
17512
- phone: NonEmptyString2.optional(),
17513
- pronouns: NonEmptyString2.optional(),
17514
- password: NonEmptyString2.optional(),
17827
+ identifier: NonEmptyString5.optional(),
17828
+ sms: NonEmptyString5.optional(),
17829
+ phone: NonEmptyString5.optional(),
17830
+ pronouns: NonEmptyString5.optional(),
17831
+ password: NonEmptyString5.optional(),
17515
17832
  metadata: Metadata
17516
17833
  }).strict();
17517
17834
  var OneRosterCourseCreateInput = exports_external.object({
17518
- sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
17835
+ sourcedId: NonEmptyString5.describe("sourcedId must be a non-empty string").optional(),
17519
17836
  status: Status.optional(),
17520
- title: NonEmptyString2.describe("title must be a non-empty string"),
17837
+ title: NonEmptyString5.describe("title must be a non-empty string"),
17521
17838
  org: Ref,
17522
- courseCode: NonEmptyString2.optional(),
17839
+ courseCode: NonEmptyString5.optional(),
17523
17840
  subjects: exports_external.array(TimebackSubject).optional(),
17524
17841
  grades: exports_external.array(TimebackGrade).optional(),
17525
- level: NonEmptyString2.optional(),
17842
+ level: NonEmptyString5.optional(),
17526
17843
  metadata: Metadata
17527
17844
  }).strict();
17528
17845
  var OneRosterClassCreateInput = exports_external.object({
17529
- sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
17846
+ sourcedId: NonEmptyString5.describe("sourcedId must be a non-empty string").optional(),
17530
17847
  status: Status.optional(),
17531
- title: NonEmptyString2.describe("title must be a non-empty string"),
17848
+ title: NonEmptyString5.describe("title must be a non-empty string"),
17532
17849
  terms: exports_external.array(Ref).min(1, "terms must have at least one item"),
17533
17850
  course: Ref,
17534
17851
  org: Ref,
17535
- classCode: NonEmptyString2.optional(),
17852
+ classCode: NonEmptyString5.optional(),
17536
17853
  classType: exports_external.enum(["homeroom", "scheduled"]).optional(),
17537
- location: NonEmptyString2.optional(),
17854
+ location: NonEmptyString5.optional(),
17538
17855
  grades: exports_external.array(TimebackGrade).optional(),
17539
17856
  subjects: exports_external.array(TimebackSubject).optional(),
17540
- subjectCodes: exports_external.array(NonEmptyString2).optional(),
17541
- periods: exports_external.array(NonEmptyString2).optional(),
17857
+ subjectCodes: exports_external.array(NonEmptyString5).optional(),
17858
+ periods: exports_external.array(NonEmptyString5).optional(),
17542
17859
  metadata: Metadata
17543
17860
  }).strict();
17544
17861
  var StringBoolean = exports_external.enum(["true", "false"]);
17545
17862
  var OneRosterEnrollmentCreateInput = exports_external.object({
17546
- sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string").optional(),
17863
+ sourcedId: NonEmptyString5.describe("sourcedId must be a non-empty string").optional(),
17547
17864
  status: Status.optional(),
17548
17865
  user: Ref,
17549
17866
  class: Ref,
@@ -17555,15 +17872,15 @@ var OneRosterEnrollmentCreateInput = exports_external.object({
17555
17872
  metadata: Metadata
17556
17873
  }).strict();
17557
17874
  var OneRosterCategoryCreateInput = exports_external.object({
17558
- sourcedId: NonEmptyString2.optional(),
17559
- title: NonEmptyString2.describe("title must be a non-empty string"),
17875
+ sourcedId: NonEmptyString5.optional(),
17876
+ title: NonEmptyString5.describe("title must be a non-empty string"),
17560
17877
  status: Status,
17561
17878
  weight: exports_external.number().nullable().optional(),
17562
17879
  metadata: Metadata
17563
17880
  }).strict();
17564
17881
  var OneRosterLineItemCreateInput = exports_external.object({
17565
- sourcedId: NonEmptyString2.optional(),
17566
- title: NonEmptyString2.describe("title must be a non-empty string"),
17882
+ sourcedId: NonEmptyString5.optional(),
17883
+ title: NonEmptyString5.describe("title must be a non-empty string"),
17567
17884
  class: Ref,
17568
17885
  school: Ref,
17569
17886
  category: Ref,
@@ -17577,7 +17894,7 @@ var OneRosterLineItemCreateInput = exports_external.object({
17577
17894
  metadata: Metadata
17578
17895
  }).strict();
17579
17896
  var OneRosterResultCreateInput = exports_external.object({
17580
- sourcedId: NonEmptyString2.optional(),
17897
+ sourcedId: NonEmptyString5.optional(),
17581
17898
  lineItem: Ref,
17582
17899
  student: Ref,
17583
17900
  class: Ref.optional(),
@@ -17596,15 +17913,15 @@ var OneRosterResultCreateInput = exports_external.object({
17596
17913
  metadata: Metadata
17597
17914
  }).strict();
17598
17915
  var OneRosterScoreScaleCreateInput = exports_external.object({
17599
- sourcedId: NonEmptyString2.optional(),
17600
- title: NonEmptyString2.describe("title must be a non-empty string"),
17916
+ sourcedId: NonEmptyString5.optional(),
17917
+ title: NonEmptyString5.describe("title must be a non-empty string"),
17601
17918
  status: Status.optional(),
17602
17919
  type: exports_external.string().optional(),
17603
17920
  class: Ref.optional(),
17604
17921
  course: Ref.nullable().optional(),
17605
17922
  scoreScaleValue: exports_external.array(exports_external.object({
17606
- itemValueLHS: NonEmptyString2,
17607
- itemValueRHS: NonEmptyString2,
17923
+ itemValueLHS: NonEmptyString5,
17924
+ itemValueRHS: NonEmptyString5,
17608
17925
  value: exports_external.string().optional(),
17609
17926
  description: exports_external.string().optional()
17610
17927
  }).strict()).optional(),
@@ -17613,10 +17930,10 @@ var OneRosterScoreScaleCreateInput = exports_external.object({
17613
17930
  metadata: Metadata
17614
17931
  }).strict();
17615
17932
  var OneRosterAssessmentLineItemCreateInput = exports_external.object({
17616
- sourcedId: NonEmptyString2.optional(),
17933
+ sourcedId: NonEmptyString5.optional(),
17617
17934
  status: Status.optional(),
17618
17935
  dateLastModified: IsoDateTimeString.optional(),
17619
- title: NonEmptyString2.describe("title must be a non-empty string"),
17936
+ title: NonEmptyString5.describe("title must be a non-empty string"),
17620
17937
  description: exports_external.string().nullable().optional(),
17621
17938
  class: Ref.nullable().optional(),
17622
17939
  parentAssessmentLineItem: Ref.nullable().optional(),
@@ -17642,7 +17959,7 @@ var LearningObjectiveScoreSetSchema = exports_external.array(exports_external.ob
17642
17959
  learningObjectiveResults: exports_external.array(LearningObjectiveResult)
17643
17960
  }));
17644
17961
  var OneRosterAssessmentResultCreateInput = exports_external.object({
17645
- sourcedId: NonEmptyString2.optional(),
17962
+ sourcedId: NonEmptyString5.optional(),
17646
17963
  status: Status.optional(),
17647
17964
  dateLastModified: IsoDateTimeString.optional(),
17648
17965
  metadata: Metadata,
@@ -17668,53 +17985,53 @@ var OneRosterAssessmentResultCreateInput = exports_external.object({
17668
17985
  missing: exports_external.string().nullable().optional()
17669
17986
  }).strict();
17670
17987
  var OneRosterOrgCreateInput = exports_external.object({
17671
- sourcedId: NonEmptyString2.optional(),
17988
+ sourcedId: NonEmptyString5.optional(),
17672
17989
  status: Status.optional(),
17673
- name: NonEmptyString2.describe("name must be a non-empty string"),
17990
+ name: NonEmptyString5.describe("name must be a non-empty string"),
17674
17991
  type: OrganizationType,
17675
- identifier: NonEmptyString2.optional(),
17992
+ identifier: NonEmptyString5.optional(),
17676
17993
  parent: Ref.optional(),
17677
17994
  metadata: Metadata
17678
17995
  }).strict();
17679
17996
  var OneRosterSchoolCreateInput = exports_external.object({
17680
- sourcedId: NonEmptyString2.optional(),
17997
+ sourcedId: NonEmptyString5.optional(),
17681
17998
  status: Status.optional(),
17682
- name: NonEmptyString2.describe("name must be a non-empty string"),
17999
+ name: NonEmptyString5.describe("name must be a non-empty string"),
17683
18000
  type: exports_external.literal("school").optional(),
17684
- identifier: NonEmptyString2.optional(),
18001
+ identifier: NonEmptyString5.optional(),
17685
18002
  parent: Ref.optional(),
17686
18003
  metadata: Metadata
17687
18004
  }).strict();
17688
18005
  var OneRosterAcademicSessionCreateInput = exports_external.object({
17689
- sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
18006
+ sourcedId: NonEmptyString5.describe("sourcedId must be a non-empty string"),
17690
18007
  status: Status,
17691
- title: NonEmptyString2.describe("title must be a non-empty string"),
18008
+ title: NonEmptyString5.describe("title must be a non-empty string"),
17692
18009
  startDate: OneRosterDateString,
17693
18010
  endDate: OneRosterDateString,
17694
18011
  type: exports_external.enum(["gradingPeriod", "semester", "schoolYear", "term"]),
17695
- schoolYear: NonEmptyString2.describe("schoolYear must be a non-empty string"),
18012
+ schoolYear: NonEmptyString5.describe("schoolYear must be a non-empty string"),
17696
18013
  org: Ref,
17697
18014
  parent: Ref.optional(),
17698
18015
  children: exports_external.array(Ref).optional(),
17699
18016
  metadata: Metadata
17700
18017
  }).strict();
17701
18018
  var OneRosterComponentResourceCreateInput = exports_external.object({
17702
- sourcedId: NonEmptyString2.optional(),
17703
- title: NonEmptyString2.describe("title must be a non-empty string"),
18019
+ sourcedId: NonEmptyString5.optional(),
18020
+ title: NonEmptyString5.describe("title must be a non-empty string"),
17704
18021
  courseComponent: Ref,
17705
18022
  resource: Ref,
17706
18023
  status: Status,
17707
18024
  metadata: Metadata
17708
18025
  }).strict();
17709
18026
  var OneRosterCourseComponentCreateInput = exports_external.object({
17710
- sourcedId: NonEmptyString2.optional(),
17711
- title: NonEmptyString2.describe("title must be a non-empty string"),
18027
+ sourcedId: NonEmptyString5.optional(),
18028
+ title: NonEmptyString5.describe("title must be a non-empty string"),
17712
18029
  course: Ref,
17713
18030
  status: Status,
17714
18031
  metadata: Metadata
17715
18032
  }).strict();
17716
18033
  var OneRosterEnrollInput = exports_external.object({
17717
- sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string"),
18034
+ sourcedId: NonEmptyString5.describe("sourcedId must be a non-empty string"),
17718
18035
  role: exports_external.enum(["student", "teacher"]),
17719
18036
  primary: StringBoolean.optional(),
17720
18037
  beginDate: OneRosterDateString.optional(),
@@ -17722,16 +18039,16 @@ var OneRosterEnrollInput = exports_external.object({
17722
18039
  metadata: Metadata
17723
18040
  }).strict();
17724
18041
  var OneRosterAgentInput = exports_external.object({
17725
- agentSourcedId: NonEmptyString2.describe("agentSourcedId must be a non-empty string")
18042
+ agentSourcedId: NonEmptyString5.describe("agentSourcedId must be a non-empty string")
17726
18043
  }).strict();
17727
18044
  var OneRosterCredentialInput = exports_external.object({
17728
- type: NonEmptyString2.describe("type must be a non-empty string"),
17729
- username: NonEmptyString2.describe("username must be a non-empty string"),
18045
+ type: NonEmptyString5.describe("type must be a non-empty string"),
18046
+ username: NonEmptyString5.describe("username must be a non-empty string"),
17730
18047
  password: exports_external.string().optional(),
17731
18048
  metadata: Metadata
17732
18049
  }).strict();
17733
18050
  var OneRosterDemographicsCreateInput = exports_external.object({
17734
- sourcedId: NonEmptyString2.describe("sourcedId must be a non-empty string")
18051
+ sourcedId: NonEmptyString5.describe("sourcedId must be a non-empty string")
17735
18052
  }).loose();
17736
18053
  var CommonResourceMetadataSchema = exports_external.object({
17737
18054
  type: ResourceType,
@@ -17803,9 +18120,9 @@ var ResourceMetadataSchema = exports_external.discriminatedUnion("type", [
17803
18120
  AssessmentBankMetadataSchema
17804
18121
  ]);
17805
18122
  var OneRosterResourceCreateInput = exports_external.object({
17806
- sourcedId: NonEmptyString2.optional(),
17807
- title: NonEmptyString2.describe("title must be a non-empty string"),
17808
- vendorResourceId: NonEmptyString2.describe("vendorResourceId must be a non-empty string"),
18123
+ sourcedId: NonEmptyString5.optional(),
18124
+ title: NonEmptyString5.describe("title must be a non-empty string"),
18125
+ vendorResourceId: NonEmptyString5.describe("vendorResourceId must be a non-empty string"),
17809
18126
  roles: exports_external.array(exports_external.enum(["primary", "secondary"])).optional(),
17810
18127
  importance: exports_external.enum(["primary", "secondary"]).optional(),
17811
18128
  vendorId: exports_external.string().optional(),
@@ -17814,18 +18131,18 @@ var OneRosterResourceCreateInput = exports_external.object({
17814
18131
  metadata: ResourceMetadataSchema.nullable().optional()
17815
18132
  }).strict();
17816
18133
  var CourseStructureItem = exports_external.object({
17817
- url: NonEmptyString2.describe("courseStructure.url must be a non-empty string"),
17818
- skillCode: NonEmptyString2.describe("courseStructure.skillCode must be a non-empty string"),
17819
- lessonCode: NonEmptyString2.describe("courseStructure.lessonCode must be a non-empty string"),
17820
- title: NonEmptyString2.describe("courseStructure.title must be a non-empty string"),
17821
- "unit-title": NonEmptyString2.describe("courseStructure.unit-title must be a non-empty string"),
17822
- status: NonEmptyString2.describe("courseStructure.status must be a non-empty string"),
18134
+ url: NonEmptyString5.describe("courseStructure.url must be a non-empty string"),
18135
+ skillCode: NonEmptyString5.describe("courseStructure.skillCode must be a non-empty string"),
18136
+ lessonCode: NonEmptyString5.describe("courseStructure.lessonCode must be a non-empty string"),
18137
+ title: NonEmptyString5.describe("courseStructure.title must be a non-empty string"),
18138
+ "unit-title": NonEmptyString5.describe("courseStructure.unit-title must be a non-empty string"),
18139
+ status: NonEmptyString5.describe("courseStructure.status must be a non-empty string"),
17823
18140
  xp: exports_external.number()
17824
18141
  }).loose();
17825
18142
  var OneRosterCourseStructureInput = exports_external.object({
17826
18143
  course: exports_external.object({
17827
- sourcedId: NonEmptyString2.describe("course.sourcedId must be a non-empty string").optional(),
17828
- title: NonEmptyString2.describe("course.title must be a non-empty string"),
18144
+ sourcedId: NonEmptyString5.describe("course.sourcedId must be a non-empty string").optional(),
18145
+ title: NonEmptyString5.describe("course.title must be a non-empty string"),
17829
18146
  org: Ref,
17830
18147
  status: Status,
17831
18148
  metadata: Metadata
@@ -17837,7 +18154,7 @@ var OneRosterBulkResultItem = exports_external.object({
17837
18154
  }).loose();
17838
18155
  var OneRosterBulkResultsInput = exports_external.array(OneRosterBulkResultItem).min(1, "results must have at least one item");
17839
18156
  // ../types/src/zod/powerpath.ts
17840
- var NonEmptyString3 = exports_external.string().trim().min(1);
18157
+ var NonEmptyString6 = exports_external.string().trim().min(1);
17841
18158
  var ToolProvider = exports_external.enum(["edulastic", "mastery-track"]);
17842
18159
  var LessonTypeRequired = exports_external.enum([
17843
18160
  "powerpath-100",
@@ -17850,14 +18167,14 @@ var LessonTypeRequired = exports_external.enum([
17850
18167
  var GradeArray = exports_external.array(TimebackGrade);
17851
18168
  var ResourceMetadata = exports_external.record(exports_external.string(), exports_external.unknown()).optional();
17852
18169
  var ExternalTestBase = exports_external.object({
17853
- courseId: NonEmptyString3,
17854
- lessonTitle: NonEmptyString3.optional(),
18170
+ courseId: NonEmptyString6,
18171
+ lessonTitle: NonEmptyString6.optional(),
17855
18172
  launchUrl: exports_external.url().optional(),
17856
18173
  toolProvider: ToolProvider,
17857
- unitTitle: NonEmptyString3.optional(),
17858
- courseComponentSourcedId: NonEmptyString3.optional(),
17859
- vendorId: NonEmptyString3.optional(),
17860
- description: NonEmptyString3.optional(),
18174
+ unitTitle: NonEmptyString6.optional(),
18175
+ courseComponentSourcedId: NonEmptyString6.optional(),
18176
+ vendorId: NonEmptyString6.optional(),
18177
+ description: NonEmptyString6.optional(),
17861
18178
  resourceMetadata: ResourceMetadata.nullable().optional(),
17862
18179
  grades: GradeArray
17863
18180
  });
@@ -17867,26 +18184,26 @@ var ExternalTestOut = ExternalTestBase.extend({
17867
18184
  });
17868
18185
  var ExternalPlacement = ExternalTestBase.extend({
17869
18186
  lessonType: exports_external.literal("placement"),
17870
- courseIdOnFail: NonEmptyString3.optional(),
18187
+ courseIdOnFail: NonEmptyString6.optional(),
17871
18188
  xp: exports_external.number().optional()
17872
18189
  });
17873
18190
  var InternalTestBase = exports_external.object({
17874
- courseId: NonEmptyString3,
18191
+ courseId: NonEmptyString6,
17875
18192
  lessonType: LessonTypeRequired,
17876
- lessonTitle: NonEmptyString3.optional(),
17877
- unitTitle: NonEmptyString3.optional(),
17878
- courseComponentSourcedId: NonEmptyString3.optional(),
18193
+ lessonTitle: NonEmptyString6.optional(),
18194
+ unitTitle: NonEmptyString6.optional(),
18195
+ courseComponentSourcedId: NonEmptyString6.optional(),
17879
18196
  resourceMetadata: ResourceMetadata.nullable().optional(),
17880
18197
  xp: exports_external.number().optional(),
17881
18198
  grades: GradeArray.optional(),
17882
- courseIdOnFail: NonEmptyString3.optional()
18199
+ courseIdOnFail: NonEmptyString6.optional()
17883
18200
  });
17884
18201
  var PowerPathCreateInternalTestInput = exports_external.union([
17885
18202
  InternalTestBase.extend({
17886
18203
  testType: exports_external.literal("qti"),
17887
18204
  qti: exports_external.object({
17888
18205
  url: exports_external.url(),
17889
- title: NonEmptyString3.optional(),
18206
+ title: NonEmptyString6.optional(),
17890
18207
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17891
18208
  })
17892
18209
  }),
@@ -17895,28 +18212,28 @@ var PowerPathCreateInternalTestInput = exports_external.union([
17895
18212
  assessmentBank: exports_external.object({
17896
18213
  resources: exports_external.array(exports_external.object({
17897
18214
  url: exports_external.url(),
17898
- title: NonEmptyString3.optional(),
18215
+ title: NonEmptyString6.optional(),
17899
18216
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
17900
18217
  }))
17901
18218
  })
17902
18219
  })
17903
18220
  ]);
17904
18221
  var PowerPathCreateNewAttemptInput = exports_external.object({
17905
- student: NonEmptyString3,
17906
- lesson: NonEmptyString3
18222
+ student: NonEmptyString6,
18223
+ lesson: NonEmptyString6
17907
18224
  });
17908
18225
  var PowerPathFinalStudentAssessmentResponseInput = exports_external.object({
17909
- student: NonEmptyString3,
17910
- lesson: NonEmptyString3
18226
+ student: NonEmptyString6,
18227
+ lesson: NonEmptyString6
17911
18228
  });
17912
18229
  var PowerPathLessonPlansCreateInput = exports_external.object({
17913
- courseId: NonEmptyString3,
17914
- userId: NonEmptyString3,
17915
- classId: NonEmptyString3.optional()
18230
+ courseId: NonEmptyString6,
18231
+ userId: NonEmptyString6,
18232
+ classId: NonEmptyString6.optional()
17916
18233
  });
17917
18234
  var LessonPlanTarget = exports_external.object({
17918
18235
  type: exports_external.enum(["component", "resource"]),
17919
- id: NonEmptyString3
18236
+ id: NonEmptyString6
17920
18237
  });
17921
18238
  var PowerPathLessonPlanOperationInput = exports_external.union([
17922
18239
  exports_external.object({
@@ -17929,8 +18246,8 @@ var PowerPathLessonPlanOperationInput = exports_external.union([
17929
18246
  exports_external.object({
17930
18247
  type: exports_external.literal("add-custom-resource"),
17931
18248
  payload: exports_external.object({
17932
- resource_id: NonEmptyString3,
17933
- parent_component_id: NonEmptyString3,
18249
+ resource_id: NonEmptyString6,
18250
+ parent_component_id: NonEmptyString6,
17934
18251
  skipped: exports_external.boolean().optional()
17935
18252
  })
17936
18253
  }),
@@ -17938,14 +18255,14 @@ var PowerPathLessonPlanOperationInput = exports_external.union([
17938
18255
  type: exports_external.literal("move-item-before"),
17939
18256
  payload: exports_external.object({
17940
18257
  target: LessonPlanTarget,
17941
- reference_id: NonEmptyString3
18258
+ reference_id: NonEmptyString6
17942
18259
  })
17943
18260
  }),
17944
18261
  exports_external.object({
17945
18262
  type: exports_external.literal("move-item-after"),
17946
18263
  payload: exports_external.object({
17947
18264
  target: LessonPlanTarget,
17948
- reference_id: NonEmptyString3
18265
+ reference_id: NonEmptyString6
17949
18266
  })
17950
18267
  }),
17951
18268
  exports_external.object({
@@ -17964,135 +18281,135 @@ var PowerPathLessonPlanOperationInput = exports_external.union([
17964
18281
  type: exports_external.literal("change-item-parent"),
17965
18282
  payload: exports_external.object({
17966
18283
  target: LessonPlanTarget,
17967
- new_parent_id: NonEmptyString3,
18284
+ new_parent_id: NonEmptyString6,
17968
18285
  position: exports_external.enum(["start", "end"]).optional()
17969
18286
  })
17970
18287
  })
17971
18288
  ]);
17972
18289
  var PowerPathLessonPlanOperationsInput = exports_external.object({
17973
18290
  operation: exports_external.array(PowerPathLessonPlanOperationInput),
17974
- reason: NonEmptyString3.optional()
18291
+ reason: NonEmptyString6.optional()
17975
18292
  });
17976
18293
  var PowerPathLessonPlanUpdateStudentItemResponseInput = exports_external.object({
17977
- studentId: NonEmptyString3,
17978
- componentResourceId: NonEmptyString3,
18294
+ studentId: NonEmptyString6,
18295
+ componentResourceId: NonEmptyString6,
17979
18296
  result: exports_external.object({
17980
18297
  status: exports_external.enum(["active", "tobedeleted"]),
17981
18298
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
17982
18299
  score: exports_external.number().optional(),
17983
- textScore: NonEmptyString3.optional(),
17984
- scoreDate: NonEmptyString3,
18300
+ textScore: NonEmptyString6.optional(),
18301
+ scoreDate: NonEmptyString6,
17985
18302
  scorePercentile: exports_external.number().optional(),
17986
18303
  scoreStatus: ScoreStatus,
17987
- comment: NonEmptyString3.optional(),
18304
+ comment: NonEmptyString6.optional(),
17988
18305
  learningObjectiveSet: exports_external.array(exports_external.object({
17989
- source: NonEmptyString3,
18306
+ source: NonEmptyString6,
17990
18307
  learningObjectiveResults: exports_external.array(exports_external.object({
17991
- learningObjectiveId: NonEmptyString3,
18308
+ learningObjectiveId: NonEmptyString6,
17992
18309
  score: exports_external.number().optional(),
17993
- textScore: NonEmptyString3.optional()
18310
+ textScore: NonEmptyString6.optional()
17994
18311
  }))
17995
18312
  })).optional(),
17996
- inProgress: NonEmptyString3.optional(),
17997
- incomplete: NonEmptyString3.optional(),
17998
- late: NonEmptyString3.optional(),
17999
- missing: NonEmptyString3.optional()
18313
+ inProgress: NonEmptyString6.optional(),
18314
+ incomplete: NonEmptyString6.optional(),
18315
+ late: NonEmptyString6.optional(),
18316
+ missing: NonEmptyString6.optional()
18000
18317
  })
18001
18318
  });
18002
18319
  var PowerPathMakeExternalTestAssignmentInput = exports_external.object({
18003
- student: NonEmptyString3,
18004
- lesson: NonEmptyString3,
18005
- applicationName: NonEmptyString3.optional(),
18006
- testId: NonEmptyString3.optional(),
18320
+ student: NonEmptyString6,
18321
+ lesson: NonEmptyString6,
18322
+ applicationName: NonEmptyString6.optional(),
18323
+ testId: NonEmptyString6.optional(),
18007
18324
  skipCourseEnrollment: exports_external.boolean().optional()
18008
18325
  });
18009
18326
  var PowerPathPlacementResetUserPlacementInput = exports_external.object({
18010
- student: NonEmptyString3,
18327
+ student: NonEmptyString6,
18011
18328
  subject: TimebackSubject
18012
18329
  });
18013
18330
  var PowerPathResetAttemptInput = exports_external.object({
18014
- student: NonEmptyString3,
18015
- lesson: NonEmptyString3
18331
+ student: NonEmptyString6,
18332
+ lesson: NonEmptyString6
18016
18333
  });
18017
18334
  var PowerPathScreeningResetSessionInput = exports_external.object({
18018
- userId: NonEmptyString3
18335
+ userId: NonEmptyString6
18019
18336
  });
18020
18337
  var PowerPathScreeningAssignTestInput = exports_external.object({
18021
- userId: NonEmptyString3,
18338
+ userId: NonEmptyString6,
18022
18339
  subject: exports_external.enum(["Math", "Reading", "Language", "Science"])
18023
18340
  });
18024
18341
  var PowerPathTestAssignmentsCreateInput = exports_external.object({
18025
- student: NonEmptyString3,
18342
+ student: NonEmptyString6,
18026
18343
  subject: TimebackSubject,
18027
18344
  grade: TimebackGrade,
18028
- testName: NonEmptyString3.optional()
18345
+ testName: NonEmptyString6.optional()
18029
18346
  });
18030
18347
  var PowerPathTestAssignmentsUpdateInput = exports_external.object({
18031
- testName: NonEmptyString3
18348
+ testName: NonEmptyString6
18032
18349
  });
18033
18350
  var PowerPathTestAssignmentItemInput = exports_external.object({
18034
- student: NonEmptyString3,
18351
+ student: NonEmptyString6,
18035
18352
  subject: TimebackSubject,
18036
18353
  grade: TimebackGrade,
18037
- testName: NonEmptyString3.optional()
18354
+ testName: NonEmptyString6.optional()
18038
18355
  });
18039
18356
  var PowerPathTestAssignmentsBulkInput = exports_external.object({
18040
18357
  items: exports_external.array(PowerPathTestAssignmentItemInput)
18041
18358
  });
18042
18359
  var PowerPathTestAssignmentsImportInput = exports_external.object({
18043
18360
  spreadsheetUrl: exports_external.url(),
18044
- sheet: NonEmptyString3
18361
+ sheet: NonEmptyString6
18045
18362
  });
18046
18363
  var PowerPathTestAssignmentsListParams = exports_external.object({
18047
- student: NonEmptyString3,
18364
+ student: NonEmptyString6,
18048
18365
  status: exports_external.enum(["assigned", "in_progress", "completed", "failed", "expired", "cancelled"]).optional(),
18049
- subject: NonEmptyString3.optional(),
18366
+ subject: NonEmptyString6.optional(),
18050
18367
  grade: TimebackGrade.optional(),
18051
18368
  limit: exports_external.number().int().positive().max(3000).optional(),
18052
18369
  offset: exports_external.number().int().nonnegative().optional()
18053
18370
  });
18054
18371
  var PowerPathTestAssignmentsAdminParams = exports_external.object({
18055
- student: NonEmptyString3.optional(),
18372
+ student: NonEmptyString6.optional(),
18056
18373
  status: exports_external.enum(["assigned", "in_progress", "completed", "failed", "expired", "cancelled"]).optional(),
18057
- subject: NonEmptyString3.optional(),
18374
+ subject: NonEmptyString6.optional(),
18058
18375
  grade: TimebackGrade.optional(),
18059
18376
  limit: exports_external.number().int().positive().max(3000).optional(),
18060
18377
  offset: exports_external.number().int().nonnegative().optional()
18061
18378
  });
18062
18379
  var PowerPathUpdateStudentQuestionResponseInput = exports_external.object({
18063
- student: NonEmptyString3,
18064
- question: NonEmptyString3,
18065
- response: exports_external.union([NonEmptyString3, exports_external.array(NonEmptyString3)]).optional(),
18066
- responses: exports_external.record(exports_external.string(), exports_external.union([NonEmptyString3, exports_external.array(NonEmptyString3)])).optional(),
18067
- lesson: NonEmptyString3
18380
+ student: NonEmptyString6,
18381
+ question: NonEmptyString6,
18382
+ response: exports_external.union([NonEmptyString6, exports_external.array(NonEmptyString6)]).optional(),
18383
+ responses: exports_external.record(exports_external.string(), exports_external.union([NonEmptyString6, exports_external.array(NonEmptyString6)])).optional(),
18384
+ lesson: NonEmptyString6
18068
18385
  });
18069
18386
  var PowerPathGetAssessmentProgressParams = exports_external.object({
18070
- student: NonEmptyString3,
18071
- lesson: NonEmptyString3,
18387
+ student: NonEmptyString6,
18388
+ lesson: NonEmptyString6,
18072
18389
  attempt: exports_external.number().int().positive().optional()
18073
18390
  });
18074
18391
  var PowerPathGetNextQuestionParams = exports_external.object({
18075
- student: NonEmptyString3,
18076
- lesson: NonEmptyString3
18392
+ student: NonEmptyString6,
18393
+ lesson: NonEmptyString6
18077
18394
  });
18078
18395
  var PowerPathGetAttemptsParams = exports_external.object({
18079
- student: NonEmptyString3,
18080
- lesson: NonEmptyString3
18396
+ student: NonEmptyString6,
18397
+ lesson: NonEmptyString6
18081
18398
  });
18082
18399
  var PowerPathTestOutParams = exports_external.object({
18083
- student: NonEmptyString3,
18084
- lesson: NonEmptyString3.optional(),
18400
+ student: NonEmptyString6,
18401
+ lesson: NonEmptyString6.optional(),
18085
18402
  finalized: exports_external.boolean().optional(),
18086
- toolProvider: NonEmptyString3.optional(),
18403
+ toolProvider: NonEmptyString6.optional(),
18087
18404
  attempt: exports_external.number().int().positive().optional()
18088
18405
  });
18089
18406
  var PowerPathImportExternalTestAssignmentResultsParams = exports_external.object({
18090
- student: NonEmptyString3,
18091
- lesson: NonEmptyString3,
18092
- applicationName: NonEmptyString3.optional()
18407
+ student: NonEmptyString6,
18408
+ lesson: NonEmptyString6,
18409
+ applicationName: NonEmptyString6.optional()
18093
18410
  });
18094
18411
  var PowerPathPlacementQueryParams = exports_external.object({
18095
- student: NonEmptyString3,
18412
+ student: NonEmptyString6,
18096
18413
  subject: TimebackSubject
18097
18414
  });
18098
18415
  var PowerPathSyllabusQueryParams = exports_external.object({
@@ -18183,7 +18500,7 @@ var QtiItemMetadata = exports_external.object({
18183
18500
  grade: TimebackGrade.optional(),
18184
18501
  difficulty: QtiDifficulty.optional(),
18185
18502
  learningObjectiveSet: exports_external.array(QtiLearningObjectiveSet).optional()
18186
- }).strict();
18503
+ }).loose();
18187
18504
  var QtiModalFeedback = exports_external.object({
18188
18505
  outcomeIdentifier: exports_external.string().min(1),
18189
18506
  identifier: exports_external.string().min(1),
@@ -18220,7 +18537,12 @@ var QtiPaginationParams = exports_external.object({
18220
18537
  sort: exports_external.string().optional(),
18221
18538
  order: exports_external.enum(["asc", "desc"]).optional()
18222
18539
  }).strict();
18223
- var QtiAssessmentItemCreateInput = exports_external.object({
18540
+ var QtiAssessmentItemXmlCreateInput = exports_external.object({
18541
+ format: exports_external.string().pipe(exports_external.literal("xml")),
18542
+ xml: exports_external.string().min(1),
18543
+ metadata: QtiItemMetadata.optional()
18544
+ }).strict();
18545
+ var QtiAssessmentItemJsonCreateInput = exports_external.object({
18224
18546
  identifier: exports_external.string().min(1),
18225
18547
  title: exports_external.string().min(1),
18226
18548
  type: QtiAssessmentItemType,
@@ -18235,6 +18557,10 @@ var QtiAssessmentItemCreateInput = exports_external.object({
18235
18557
  feedbackInline: exports_external.array(QtiFeedbackInline).optional(),
18236
18558
  feedbackBlock: exports_external.array(QtiFeedbackBlock).optional()
18237
18559
  }).strict();
18560
+ var QtiAssessmentItemCreateInput = exports_external.union([
18561
+ QtiAssessmentItemXmlCreateInput,
18562
+ QtiAssessmentItemJsonCreateInput
18563
+ ]);
18238
18564
  var QtiAssessmentItemUpdateInput = exports_external.object({
18239
18565
  identifier: exports_external.string().min(1).optional(),
18240
18566
  title: exports_external.string().min(1),
@@ -18271,9 +18597,9 @@ var QtiAssessmentSection = exports_external.object({
18271
18597
  }).strict();
18272
18598
  var QtiTestPart = exports_external.object({
18273
18599
  identifier: exports_external.string().min(1),
18274
- navigationMode: QtiNavigationMode,
18275
- submissionMode: QtiSubmissionMode,
18276
- "qti-assessment-section": exports_external.union([QtiAssessmentSection, exports_external.array(QtiAssessmentSection)])
18600
+ navigationMode: exports_external.string().pipe(QtiNavigationMode),
18601
+ submissionMode: exports_external.string().pipe(QtiSubmissionMode),
18602
+ "qti-assessment-section": exports_external.array(QtiAssessmentSection)
18277
18603
  }).strict();
18278
18604
  var QtiReorderItemsInput = exports_external.object({
18279
18605
  items: exports_external.array(QtiAssessmentItemRef).min(1)
@@ -18291,7 +18617,7 @@ var QtiAssessmentTestCreateInput = exports_external.object({
18291
18617
  maxAttempts: exports_external.number().optional(),
18292
18618
  toolsEnabled: exports_external.record(exports_external.string(), exports_external.boolean()).optional(),
18293
18619
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
18294
- "qti-test-part": QtiTestPart,
18620
+ "qti-test-part": exports_external.array(QtiTestPart),
18295
18621
  "qti-outcome-declaration": exports_external.array(QtiTestOutcomeDeclaration).optional()
18296
18622
  }).strict();
18297
18623
  var QtiAssessmentTestUpdateInput = exports_external.object({
@@ -18304,7 +18630,7 @@ var QtiAssessmentTestUpdateInput = exports_external.object({
18304
18630
  maxAttempts: exports_external.number().optional(),
18305
18631
  toolsEnabled: exports_external.record(exports_external.string(), exports_external.boolean()).optional(),
18306
18632
  metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
18307
- "qti-test-part": QtiTestPart,
18633
+ "qti-test-part": exports_external.array(QtiTestPart),
18308
18634
  "qti-outcome-declaration": exports_external.array(QtiTestOutcomeDeclaration).optional()
18309
18635
  }).strict();
18310
18636
  var QtiStimulusCreateInput = exports_external.object({
@@ -18797,10 +19123,10 @@ class Spinner {
18797
19123
  }
18798
19124
  }
18799
19125
  // ../internal/utils/src/server/runtime.ts
18800
- import { join as join2 } from "node:path";
19126
+ import { join as join3 } from "node:path";
18801
19127
  var STANDALONE_PATHS = [
18802
- join2(".timeback", "bin"),
18803
- join2(".local", "bin"),
19128
+ join3(".timeback", "bin"),
19129
+ join3(".local", "bin"),
18804
19130
  "/usr/local/bin/timeback",
18805
19131
  "/opt/homebrew/bin/timeback"
18806
19132
  ];
@@ -23259,7 +23585,7 @@ class EnrollmentService {
23259
23585
  sourcedId: userId,
23260
23586
  role: "student"
23261
23587
  });
23262
- log2.info("Student enrolled", {
23588
+ log2.debug("Student enrolled", {
23263
23589
  classId,
23264
23590
  userId,
23265
23591
  enrollmentId: result.sourcedIdPairs?.allocatedSourcedId
@@ -23609,11 +23935,15 @@ class StatusService {
23609
23935
  getSavedCredentials("staging"),
23610
23936
  getSavedCredentials("production")
23611
23937
  ]);
23938
+ const defaultCreds = this.ctx.defaultEnvironment === "staging" ? stagingCreds : this.ctx.defaultEnvironment === "production" ? productionCreds : null;
23939
+ const clientId = defaultCreds?.clientId ?? stagingCreds?.clientId ?? productionCreds?.clientId ?? this.ctx.credentials.staging?.clientId ?? this.ctx.credentials.production?.clientId;
23612
23940
  return {
23613
23941
  config: this.ctx.userConfig,
23614
23942
  environment: this.ctx.defaultEnvironment,
23615
23943
  configuredEnvironments,
23616
- hasEmail: !!stagingCreds?.email || !!productionCreds?.email
23944
+ hasEmail: !!stagingCreds?.email || !!productionCreds?.email,
23945
+ clientId,
23946
+ sensors: this.ctx.derivedSensors
23617
23947
  };
23618
23948
  }
23619
23949
  }