@plasius/learning 0.2.19 → 0.2.20
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/README.md +24 -0
- package/dist/index.cjs +155 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +106 -1
- package/dist/index.d.ts +106 -1
- package/dist/index.js +142 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -429,6 +429,111 @@ declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1: LearningPathVersionV1;
|
|
|
429
429
|
/** Current pilot catalog for server adapters that intentionally follow releases. */
|
|
430
430
|
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT: LearningPathVersionV1;
|
|
431
431
|
|
|
432
|
+
/** Versioned, infrastructure-neutral contracts for Guardian-approved static projects. */
|
|
433
|
+
declare const STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1: "1.0.0";
|
|
434
|
+
declare const STATIC_PROJECT_SCANNER_VERSION_V1: "junior-coder-static-scan-v1";
|
|
435
|
+
declare const STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1: "guardian-static-publication-v1";
|
|
436
|
+
declare const STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1: 90;
|
|
437
|
+
declare const STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1: 8000;
|
|
438
|
+
declare const STATIC_PROJECT_SAFETY_CHECK_IDS_V1: readonly ["allow-listed-source", "no-personal-details", "no-external-network", "no-executable-markup", "no-transmitting-forms", "no-uploads-or-embeds", "no-trackers-or-advertising", "no-account-identifiers"];
|
|
439
|
+
type StaticProjectSafetyCheckIdV1 = (typeof STATIC_PROJECT_SAFETY_CHECK_IDS_V1)[number];
|
|
440
|
+
type StaticProjectModuleSlugV1 = "adventure-mission-planner" | "creature-care-dashboard" | "robot-mission-control";
|
|
441
|
+
interface StaticProjectSafetyCheckV1 {
|
|
442
|
+
id: StaticProjectSafetyCheckIdV1;
|
|
443
|
+
passed: true;
|
|
444
|
+
}
|
|
445
|
+
/** Evidence emitted by the deterministic scanner before adult review. */
|
|
446
|
+
interface StaticProjectSafetyScanV1 {
|
|
447
|
+
schemaVersion: "1";
|
|
448
|
+
scannerVersion: typeof STATIC_PROJECT_SCANNER_VERSION_V1;
|
|
449
|
+
passed: true;
|
|
450
|
+
checks: StaticProjectSafetyCheckV1[];
|
|
451
|
+
}
|
|
452
|
+
interface AdventureMissionPlannerSafeRenderV1 {
|
|
453
|
+
kind: "adventure-mission-planner";
|
|
454
|
+
heading: "Moonbase Missions" | "Forest Rescue Plans" | "Ocean Quest Board";
|
|
455
|
+
missions: {
|
|
456
|
+
title: "Find the moon crystal" | "Guide the lost firefly" | "Map the coral garden";
|
|
457
|
+
day: "Saturday" | "Sunday" | "School holiday";
|
|
458
|
+
}[];
|
|
459
|
+
validationMessage: "Choose a day" | "Add a mission title" | "Mission ready!";
|
|
460
|
+
savedAcrossRestart: true;
|
|
461
|
+
accessibleSummaryEnabled: true;
|
|
462
|
+
}
|
|
463
|
+
interface CreatureCareDashboardSafeRenderV1 {
|
|
464
|
+
kind: "creature-care-dashboard";
|
|
465
|
+
creature: "Moon Moth" | "Cloud Cat" | "Pebble Dragon";
|
|
466
|
+
status: "Resting" | "Ready to play" | "Snack time";
|
|
467
|
+
timerSeconds: 5 | 10 | 15;
|
|
468
|
+
layout: "single" | "cosy-grid" | "wide-grid";
|
|
469
|
+
reducedMotion: true;
|
|
470
|
+
}
|
|
471
|
+
interface RobotMissionControlSafeRenderV1 {
|
|
472
|
+
kind: "robot-mission-control";
|
|
473
|
+
command: "scan" | "hold-position" | "return-to-base";
|
|
474
|
+
safetyConfirmed: true;
|
|
475
|
+
telemetryRate: 1 | 2 | 4;
|
|
476
|
+
chartMode: "line" | "bars" | "text-only";
|
|
477
|
+
serialSimulation: true;
|
|
478
|
+
state: "SCANNING" | "HOLDING" | "RETURNING";
|
|
479
|
+
}
|
|
480
|
+
/** The complete public render allow-list. Learner source is never a render model. */
|
|
481
|
+
type StaticProjectSafeRenderV1 = AdventureMissionPlannerSafeRenderV1 | CreatureCareDashboardSafeRenderV1 | RobotMissionControlSafeRenderV1;
|
|
482
|
+
/** Immutable private snapshot awaiting an adult's exact-hash approval. */
|
|
483
|
+
interface StaticProjectSnapshotV1 {
|
|
484
|
+
schemaVersion: "1";
|
|
485
|
+
contractVersion: typeof STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1;
|
|
486
|
+
snapshotId: string;
|
|
487
|
+
subjectAccountId: string;
|
|
488
|
+
moduleId: string;
|
|
489
|
+
moduleSlug: StaticProjectModuleSlugV1;
|
|
490
|
+
moduleVersion: string;
|
|
491
|
+
missionId: string;
|
|
492
|
+
sourceDigest: string;
|
|
493
|
+
snapshotDigest: string;
|
|
494
|
+
sourceCharacterCount: number;
|
|
495
|
+
assessmentScore: number;
|
|
496
|
+
mandatorySafetyPassed: true;
|
|
497
|
+
scan: StaticProjectSafetyScanV1;
|
|
498
|
+
renderModel: StaticProjectSafeRenderV1;
|
|
499
|
+
state: "pending-review";
|
|
500
|
+
createdAt: string;
|
|
501
|
+
}
|
|
502
|
+
/** Adult approval is evidence only and cannot mutate the reviewed snapshot. */
|
|
503
|
+
interface StaticProjectGuardianApprovalV1 {
|
|
504
|
+
schemaVersion: "1";
|
|
505
|
+
approvalId: string;
|
|
506
|
+
snapshotId: string;
|
|
507
|
+
snapshotDigest: string;
|
|
508
|
+
guardianActorAccountId: string;
|
|
509
|
+
statementVersion: typeof STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1;
|
|
510
|
+
approvedAt: string;
|
|
511
|
+
}
|
|
512
|
+
/** An unlisted public pointer whose lifecycle never changes the source snapshot. */
|
|
513
|
+
interface StaticProjectPublicationV1 {
|
|
514
|
+
schemaVersion: "1";
|
|
515
|
+
publicationId: string;
|
|
516
|
+
snapshotId: string;
|
|
517
|
+
snapshotDigest: string;
|
|
518
|
+
approvalId: string;
|
|
519
|
+
randomSlug: string;
|
|
520
|
+
publicUrl: string;
|
|
521
|
+
state: "published" | "expired" | "unpublished";
|
|
522
|
+
publishedAt: string;
|
|
523
|
+
expiresAt: string;
|
|
524
|
+
renewedAt?: string;
|
|
525
|
+
unpublishedAt?: string;
|
|
526
|
+
}
|
|
527
|
+
type StaticProjectContractIssueV1 = "invalid-schema-version" | "invalid-contract-version" | "invalid-identifier" | "invalid-module" | "invalid-version" | "invalid-source-digest" | "invalid-snapshot-digest" | "invalid-source-size" | "assessment-score-incomplete" | "mandatory-safety-missing" | "scan-not-passed" | "scan-checks-incomplete" | "module-render-model-mismatch" | "unsafe-render-model" | "invalid-created-at" | "invalid-approval-statement" | "invalid-approved-at" | "invalid-random-slug" | "invalid-public-url" | "public-url-slug-mismatch" | "published-state-required" | "invalid-published-at" | "invalid-publication-expiry" | "invalid-lifecycle-timestamp";
|
|
528
|
+
/** Validate a snapshot without throwing so authoring and adapters can show every issue. */
|
|
529
|
+
declare function validateStaticProjectSnapshot(value: StaticProjectSnapshotV1): StaticProjectContractIssueV1[];
|
|
530
|
+
/** Fail closed when a persistence or publishing adapter constructs an invalid snapshot. */
|
|
531
|
+
declare function assertValidStaticProjectSnapshot(value: StaticProjectSnapshotV1): void;
|
|
532
|
+
declare function validateStaticProjectGuardianApproval(value: StaticProjectGuardianApprovalV1): StaticProjectContractIssueV1[];
|
|
533
|
+
declare function assertValidStaticProjectGuardianApproval(value: StaticProjectGuardianApprovalV1): void;
|
|
534
|
+
declare function validateStaticProjectPublication(value: StaticProjectPublicationV1): StaticProjectContractIssueV1[];
|
|
535
|
+
declare function assertValidStaticProjectPublication(value: StaticProjectPublicationV1): void;
|
|
536
|
+
|
|
432
537
|
/** Validate the deterministic 20/50/20/10 assessment authority. */
|
|
433
538
|
declare function validateAssessmentRubric(rubric: AssessmentRubricV1, path?: string, moduleId?: string): LearningValidationIssueV1[];
|
|
434
539
|
|
|
@@ -525,4 +630,4 @@ declare function validateLearningPath(path: LearningPathVersionV1): LearningVali
|
|
|
525
630
|
/** Fail fast when a path is not safe to publish or consume. */
|
|
526
631
|
declare function assertValidLearningPath(path: LearningPathVersionV1): void;
|
|
527
632
|
|
|
528
|
-
export { ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1, type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionBoundedSuggestionV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
|
|
633
|
+
export { ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1, type AdventureMissionPlannerSafeRenderV1, type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type CreatureCareDashboardSafeRenderV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionBoundedSuggestionV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1, type RobotMissionControlSafeRenderV1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1, STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1, STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1, STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1, STATIC_PROJECT_SAFETY_CHECK_IDS_V1, STATIC_PROJECT_SCANNER_VERSION_V1, type ScoreBandV1, type StaticProjectContractIssueV1, type StaticProjectGuardianApprovalV1, type StaticProjectModuleSlugV1, type StaticProjectPublicationV1, type StaticProjectSafeRenderV1, type StaticProjectSafetyCheckIdV1, type StaticProjectSafetyCheckV1, type StaticProjectSafetyScanV1, type StaticProjectSnapshotV1, VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1, assertValidLearningPath, assertValidMissionAuthoringBundle, assertValidStaticProjectGuardianApproval, assertValidStaticProjectPublication, assertValidStaticProjectSnapshot, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle, validateStaticProjectGuardianApproval, validateStaticProjectPublication, validateStaticProjectSnapshot };
|
package/dist/index.d.ts
CHANGED
|
@@ -429,6 +429,111 @@ declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1: LearningPathVersionV1;
|
|
|
429
429
|
/** Current pilot catalog for server adapters that intentionally follow releases. */
|
|
430
430
|
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT: LearningPathVersionV1;
|
|
431
431
|
|
|
432
|
+
/** Versioned, infrastructure-neutral contracts for Guardian-approved static projects. */
|
|
433
|
+
declare const STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1: "1.0.0";
|
|
434
|
+
declare const STATIC_PROJECT_SCANNER_VERSION_V1: "junior-coder-static-scan-v1";
|
|
435
|
+
declare const STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1: "guardian-static-publication-v1";
|
|
436
|
+
declare const STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1: 90;
|
|
437
|
+
declare const STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1: 8000;
|
|
438
|
+
declare const STATIC_PROJECT_SAFETY_CHECK_IDS_V1: readonly ["allow-listed-source", "no-personal-details", "no-external-network", "no-executable-markup", "no-transmitting-forms", "no-uploads-or-embeds", "no-trackers-or-advertising", "no-account-identifiers"];
|
|
439
|
+
type StaticProjectSafetyCheckIdV1 = (typeof STATIC_PROJECT_SAFETY_CHECK_IDS_V1)[number];
|
|
440
|
+
type StaticProjectModuleSlugV1 = "adventure-mission-planner" | "creature-care-dashboard" | "robot-mission-control";
|
|
441
|
+
interface StaticProjectSafetyCheckV1 {
|
|
442
|
+
id: StaticProjectSafetyCheckIdV1;
|
|
443
|
+
passed: true;
|
|
444
|
+
}
|
|
445
|
+
/** Evidence emitted by the deterministic scanner before adult review. */
|
|
446
|
+
interface StaticProjectSafetyScanV1 {
|
|
447
|
+
schemaVersion: "1";
|
|
448
|
+
scannerVersion: typeof STATIC_PROJECT_SCANNER_VERSION_V1;
|
|
449
|
+
passed: true;
|
|
450
|
+
checks: StaticProjectSafetyCheckV1[];
|
|
451
|
+
}
|
|
452
|
+
interface AdventureMissionPlannerSafeRenderV1 {
|
|
453
|
+
kind: "adventure-mission-planner";
|
|
454
|
+
heading: "Moonbase Missions" | "Forest Rescue Plans" | "Ocean Quest Board";
|
|
455
|
+
missions: {
|
|
456
|
+
title: "Find the moon crystal" | "Guide the lost firefly" | "Map the coral garden";
|
|
457
|
+
day: "Saturday" | "Sunday" | "School holiday";
|
|
458
|
+
}[];
|
|
459
|
+
validationMessage: "Choose a day" | "Add a mission title" | "Mission ready!";
|
|
460
|
+
savedAcrossRestart: true;
|
|
461
|
+
accessibleSummaryEnabled: true;
|
|
462
|
+
}
|
|
463
|
+
interface CreatureCareDashboardSafeRenderV1 {
|
|
464
|
+
kind: "creature-care-dashboard";
|
|
465
|
+
creature: "Moon Moth" | "Cloud Cat" | "Pebble Dragon";
|
|
466
|
+
status: "Resting" | "Ready to play" | "Snack time";
|
|
467
|
+
timerSeconds: 5 | 10 | 15;
|
|
468
|
+
layout: "single" | "cosy-grid" | "wide-grid";
|
|
469
|
+
reducedMotion: true;
|
|
470
|
+
}
|
|
471
|
+
interface RobotMissionControlSafeRenderV1 {
|
|
472
|
+
kind: "robot-mission-control";
|
|
473
|
+
command: "scan" | "hold-position" | "return-to-base";
|
|
474
|
+
safetyConfirmed: true;
|
|
475
|
+
telemetryRate: 1 | 2 | 4;
|
|
476
|
+
chartMode: "line" | "bars" | "text-only";
|
|
477
|
+
serialSimulation: true;
|
|
478
|
+
state: "SCANNING" | "HOLDING" | "RETURNING";
|
|
479
|
+
}
|
|
480
|
+
/** The complete public render allow-list. Learner source is never a render model. */
|
|
481
|
+
type StaticProjectSafeRenderV1 = AdventureMissionPlannerSafeRenderV1 | CreatureCareDashboardSafeRenderV1 | RobotMissionControlSafeRenderV1;
|
|
482
|
+
/** Immutable private snapshot awaiting an adult's exact-hash approval. */
|
|
483
|
+
interface StaticProjectSnapshotV1 {
|
|
484
|
+
schemaVersion: "1";
|
|
485
|
+
contractVersion: typeof STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1;
|
|
486
|
+
snapshotId: string;
|
|
487
|
+
subjectAccountId: string;
|
|
488
|
+
moduleId: string;
|
|
489
|
+
moduleSlug: StaticProjectModuleSlugV1;
|
|
490
|
+
moduleVersion: string;
|
|
491
|
+
missionId: string;
|
|
492
|
+
sourceDigest: string;
|
|
493
|
+
snapshotDigest: string;
|
|
494
|
+
sourceCharacterCount: number;
|
|
495
|
+
assessmentScore: number;
|
|
496
|
+
mandatorySafetyPassed: true;
|
|
497
|
+
scan: StaticProjectSafetyScanV1;
|
|
498
|
+
renderModel: StaticProjectSafeRenderV1;
|
|
499
|
+
state: "pending-review";
|
|
500
|
+
createdAt: string;
|
|
501
|
+
}
|
|
502
|
+
/** Adult approval is evidence only and cannot mutate the reviewed snapshot. */
|
|
503
|
+
interface StaticProjectGuardianApprovalV1 {
|
|
504
|
+
schemaVersion: "1";
|
|
505
|
+
approvalId: string;
|
|
506
|
+
snapshotId: string;
|
|
507
|
+
snapshotDigest: string;
|
|
508
|
+
guardianActorAccountId: string;
|
|
509
|
+
statementVersion: typeof STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1;
|
|
510
|
+
approvedAt: string;
|
|
511
|
+
}
|
|
512
|
+
/** An unlisted public pointer whose lifecycle never changes the source snapshot. */
|
|
513
|
+
interface StaticProjectPublicationV1 {
|
|
514
|
+
schemaVersion: "1";
|
|
515
|
+
publicationId: string;
|
|
516
|
+
snapshotId: string;
|
|
517
|
+
snapshotDigest: string;
|
|
518
|
+
approvalId: string;
|
|
519
|
+
randomSlug: string;
|
|
520
|
+
publicUrl: string;
|
|
521
|
+
state: "published" | "expired" | "unpublished";
|
|
522
|
+
publishedAt: string;
|
|
523
|
+
expiresAt: string;
|
|
524
|
+
renewedAt?: string;
|
|
525
|
+
unpublishedAt?: string;
|
|
526
|
+
}
|
|
527
|
+
type StaticProjectContractIssueV1 = "invalid-schema-version" | "invalid-contract-version" | "invalid-identifier" | "invalid-module" | "invalid-version" | "invalid-source-digest" | "invalid-snapshot-digest" | "invalid-source-size" | "assessment-score-incomplete" | "mandatory-safety-missing" | "scan-not-passed" | "scan-checks-incomplete" | "module-render-model-mismatch" | "unsafe-render-model" | "invalid-created-at" | "invalid-approval-statement" | "invalid-approved-at" | "invalid-random-slug" | "invalid-public-url" | "public-url-slug-mismatch" | "published-state-required" | "invalid-published-at" | "invalid-publication-expiry" | "invalid-lifecycle-timestamp";
|
|
528
|
+
/** Validate a snapshot without throwing so authoring and adapters can show every issue. */
|
|
529
|
+
declare function validateStaticProjectSnapshot(value: StaticProjectSnapshotV1): StaticProjectContractIssueV1[];
|
|
530
|
+
/** Fail closed when a persistence or publishing adapter constructs an invalid snapshot. */
|
|
531
|
+
declare function assertValidStaticProjectSnapshot(value: StaticProjectSnapshotV1): void;
|
|
532
|
+
declare function validateStaticProjectGuardianApproval(value: StaticProjectGuardianApprovalV1): StaticProjectContractIssueV1[];
|
|
533
|
+
declare function assertValidStaticProjectGuardianApproval(value: StaticProjectGuardianApprovalV1): void;
|
|
534
|
+
declare function validateStaticProjectPublication(value: StaticProjectPublicationV1): StaticProjectContractIssueV1[];
|
|
535
|
+
declare function assertValidStaticProjectPublication(value: StaticProjectPublicationV1): void;
|
|
536
|
+
|
|
432
537
|
/** Validate the deterministic 20/50/20/10 assessment authority. */
|
|
433
538
|
declare function validateAssessmentRubric(rubric: AssessmentRubricV1, path?: string, moduleId?: string): LearningValidationIssueV1[];
|
|
434
539
|
|
|
@@ -525,4 +630,4 @@ declare function validateLearningPath(path: LearningPathVersionV1): LearningVali
|
|
|
525
630
|
/** Fail fast when a path is not safe to publish or consume. */
|
|
526
631
|
declare function assertValidLearningPath(path: LearningPathVersionV1): void;
|
|
527
632
|
|
|
528
|
-
export { ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1, type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionBoundedSuggestionV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
|
|
633
|
+
export { ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1, type AdventureMissionPlannerSafeRenderV1, type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type CreatureCareDashboardSafeRenderV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionBoundedSuggestionV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1, type RobotMissionControlSafeRenderV1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1, STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1, STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1, STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1, STATIC_PROJECT_SAFETY_CHECK_IDS_V1, STATIC_PROJECT_SCANNER_VERSION_V1, type ScoreBandV1, type StaticProjectContractIssueV1, type StaticProjectGuardianApprovalV1, type StaticProjectModuleSlugV1, type StaticProjectPublicationV1, type StaticProjectSafeRenderV1, type StaticProjectSafetyCheckIdV1, type StaticProjectSafetyCheckV1, type StaticProjectSafetyScanV1, type StaticProjectSnapshotV1, VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1, assertValidLearningPath, assertValidMissionAuthoringBundle, assertValidStaticProjectGuardianApproval, assertValidStaticProjectPublication, assertValidStaticProjectSnapshot, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle, validateStaticProjectGuardianApproval, validateStaticProjectPublication, validateStaticProjectSnapshot };
|
package/dist/index.js
CHANGED
|
@@ -571,6 +571,135 @@ var JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1
|
|
|
571
571
|
// src/contracts.ts
|
|
572
572
|
var MISSION_AUTHORING_CONTRACT_VERSION_V1 = "1.0.0";
|
|
573
573
|
|
|
574
|
+
// src/publishing.ts
|
|
575
|
+
var STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1 = "1.0.0";
|
|
576
|
+
var STATIC_PROJECT_SCANNER_VERSION_V1 = "junior-coder-static-scan-v1";
|
|
577
|
+
var STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1 = "guardian-static-publication-v1";
|
|
578
|
+
var STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1 = 90;
|
|
579
|
+
var STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1 = 8e3;
|
|
580
|
+
var STATIC_PROJECT_SAFETY_CHECK_IDS_V1 = [
|
|
581
|
+
"allow-listed-source",
|
|
582
|
+
"no-personal-details",
|
|
583
|
+
"no-external-network",
|
|
584
|
+
"no-executable-markup",
|
|
585
|
+
"no-transmitting-forms",
|
|
586
|
+
"no-uploads-or-embeds",
|
|
587
|
+
"no-trackers-or-advertising",
|
|
588
|
+
"no-account-identifiers"
|
|
589
|
+
];
|
|
590
|
+
var DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/u;
|
|
591
|
+
var IDENTIFIER_PATTERN = /^(?:account|approval|publication|snapshot)_[A-Za-z0-9_-]{20,128}$/u;
|
|
592
|
+
var VERSION_PATTERN = /^[0-9]+\.[0-9]+\.[0-9]+(?:[-+][A-Za-z0-9.-]+)?$/u;
|
|
593
|
+
var RANDOM_SLUG_PATTERN = /^[A-Za-z0-9_-]{40,128}$/u;
|
|
594
|
+
function validDate(value) {
|
|
595
|
+
return typeof value === "string" && Number.isFinite(Date.parse(value));
|
|
596
|
+
}
|
|
597
|
+
function allSafetyChecksPresent(scan) {
|
|
598
|
+
if (!Array.isArray(scan.checks) || scan.checks.length !== STATIC_PROJECT_SAFETY_CHECK_IDS_V1.length) {
|
|
599
|
+
return false;
|
|
600
|
+
}
|
|
601
|
+
const supplied = new Set(scan.checks.map((check) => check.id));
|
|
602
|
+
return STATIC_PROJECT_SAFETY_CHECK_IDS_V1.every((id) => supplied.has(id)) && scan.checks.every((check) => check.passed === true);
|
|
603
|
+
}
|
|
604
|
+
function safeAdventureRender(value) {
|
|
605
|
+
const headings = ["Moonbase Missions", "Forest Rescue Plans", "Ocean Quest Board"];
|
|
606
|
+
const titles = ["Find the moon crystal", "Guide the lost firefly", "Map the coral garden"];
|
|
607
|
+
const days = ["Saturday", "Sunday", "School holiday"];
|
|
608
|
+
const messages = ["Choose a day", "Add a mission title", "Mission ready!"];
|
|
609
|
+
return headings.includes(value.heading) && Array.isArray(value.missions) && value.missions.length >= 1 && value.missions.length <= 3 && value.missions.every((mission2) => titles.includes(mission2.title) && days.includes(mission2.day)) && messages.includes(value.validationMessage) && value.savedAcrossRestart === true && value.accessibleSummaryEnabled === true;
|
|
610
|
+
}
|
|
611
|
+
function safeCreatureRender(value) {
|
|
612
|
+
return ["Moon Moth", "Cloud Cat", "Pebble Dragon"].includes(value.creature) && ["Resting", "Ready to play", "Snack time"].includes(value.status) && [5, 10, 15].includes(value.timerSeconds) && ["single", "cosy-grid", "wide-grid"].includes(value.layout) && value.reducedMotion === true;
|
|
613
|
+
}
|
|
614
|
+
function safeRobotRender(value) {
|
|
615
|
+
return ["scan", "hold-position", "return-to-base"].includes(value.command) && value.safetyConfirmed === true && [1, 2, 4].includes(value.telemetryRate) && ["line", "bars", "text-only"].includes(value.chartMode) && value.serialSimulation === true && ["SCANNING", "HOLDING", "RETURNING"].includes(value.state);
|
|
616
|
+
}
|
|
617
|
+
function validateStaticProjectSnapshot(value) {
|
|
618
|
+
const issues = [];
|
|
619
|
+
if (value.schemaVersion !== "1") issues.push("invalid-schema-version");
|
|
620
|
+
if (value.contractVersion !== STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1) {
|
|
621
|
+
issues.push("invalid-contract-version");
|
|
622
|
+
}
|
|
623
|
+
if (!IDENTIFIER_PATTERN.test(value.snapshotId) || !IDENTIFIER_PATTERN.test(value.subjectAccountId)) {
|
|
624
|
+
issues.push("invalid-identifier");
|
|
625
|
+
}
|
|
626
|
+
if (!value.moduleId.startsWith("junior-coder.") || value.moduleId !== `junior-coder.${value.moduleSlug}`) {
|
|
627
|
+
issues.push("invalid-module");
|
|
628
|
+
}
|
|
629
|
+
if (!VERSION_PATTERN.test(value.moduleVersion)) issues.push("invalid-version");
|
|
630
|
+
if (!DIGEST_PATTERN.test(value.sourceDigest)) issues.push("invalid-source-digest");
|
|
631
|
+
if (!DIGEST_PATTERN.test(value.snapshotDigest)) issues.push("invalid-snapshot-digest");
|
|
632
|
+
if (!Number.isInteger(value.sourceCharacterCount) || value.sourceCharacterCount < 1 || value.sourceCharacterCount > STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1) {
|
|
633
|
+
issues.push("invalid-source-size");
|
|
634
|
+
}
|
|
635
|
+
if (!Number.isInteger(value.assessmentScore) || value.assessmentScore < 80 || value.assessmentScore > 100) {
|
|
636
|
+
issues.push("assessment-score-incomplete");
|
|
637
|
+
}
|
|
638
|
+
if (value.mandatorySafetyPassed !== true) issues.push("mandatory-safety-missing");
|
|
639
|
+
if (value.scan?.passed !== true || value.scan?.scannerVersion !== STATIC_PROJECT_SCANNER_VERSION_V1) {
|
|
640
|
+
issues.push("scan-not-passed");
|
|
641
|
+
}
|
|
642
|
+
if (!value.scan || !allSafetyChecksPresent(value.scan)) issues.push("scan-checks-incomplete");
|
|
643
|
+
if (value.moduleSlug !== value.renderModel?.kind) issues.push("module-render-model-mismatch");
|
|
644
|
+
const renderSafe = value.renderModel?.kind === "adventure-mission-planner" ? safeAdventureRender(value.renderModel) : value.renderModel?.kind === "creature-care-dashboard" ? safeCreatureRender(value.renderModel) : value.renderModel?.kind === "robot-mission-control" ? safeRobotRender(value.renderModel) : false;
|
|
645
|
+
if (!renderSafe) issues.push("unsafe-render-model");
|
|
646
|
+
if (value.state !== "pending-review" || !validDate(value.createdAt)) issues.push("invalid-created-at");
|
|
647
|
+
return [...new Set(issues)];
|
|
648
|
+
}
|
|
649
|
+
function assertValidStaticProjectSnapshot(value) {
|
|
650
|
+
const issues = validateStaticProjectSnapshot(value);
|
|
651
|
+
if (issues.length > 0) throw new Error(`Invalid static project snapshot: ${issues.join(", ")}`);
|
|
652
|
+
}
|
|
653
|
+
function validateStaticProjectGuardianApproval(value) {
|
|
654
|
+
const issues = [];
|
|
655
|
+
if (value.schemaVersion !== "1") issues.push("invalid-schema-version");
|
|
656
|
+
if (!IDENTIFIER_PATTERN.test(value.approvalId) || !IDENTIFIER_PATTERN.test(value.snapshotId) || !IDENTIFIER_PATTERN.test(value.guardianActorAccountId)) {
|
|
657
|
+
issues.push("invalid-identifier");
|
|
658
|
+
}
|
|
659
|
+
if (!DIGEST_PATTERN.test(value.snapshotDigest)) issues.push("invalid-snapshot-digest");
|
|
660
|
+
if (value.statementVersion !== STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1) {
|
|
661
|
+
issues.push("invalid-approval-statement");
|
|
662
|
+
}
|
|
663
|
+
if (!validDate(value.approvedAt)) issues.push("invalid-approved-at");
|
|
664
|
+
return [...new Set(issues)];
|
|
665
|
+
}
|
|
666
|
+
function assertValidStaticProjectGuardianApproval(value) {
|
|
667
|
+
const issues = validateStaticProjectGuardianApproval(value);
|
|
668
|
+
if (issues.length > 0) throw new Error(`Invalid static project approval: ${issues.join(", ")}`);
|
|
669
|
+
}
|
|
670
|
+
function validateStaticProjectPublication(value) {
|
|
671
|
+
const issues = [];
|
|
672
|
+
if (value.schemaVersion !== "1") issues.push("invalid-schema-version");
|
|
673
|
+
if (!IDENTIFIER_PATTERN.test(value.publicationId) || !IDENTIFIER_PATTERN.test(value.snapshotId) || !IDENTIFIER_PATTERN.test(value.approvalId)) {
|
|
674
|
+
issues.push("invalid-identifier");
|
|
675
|
+
}
|
|
676
|
+
if (!DIGEST_PATTERN.test(value.snapshotDigest)) issues.push("invalid-snapshot-digest");
|
|
677
|
+
if (!RANDOM_SLUG_PATTERN.test(value.randomSlug)) issues.push("invalid-random-slug");
|
|
678
|
+
let parsedUrl;
|
|
679
|
+
try {
|
|
680
|
+
parsedUrl = new URL(value.publicUrl);
|
|
681
|
+
} catch {
|
|
682
|
+
parsedUrl = void 0;
|
|
683
|
+
}
|
|
684
|
+
if (!parsedUrl || parsedUrl.protocol !== "https:" || parsedUrl.username || parsedUrl.password) {
|
|
685
|
+
issues.push("invalid-public-url");
|
|
686
|
+
}
|
|
687
|
+
if (!parsedUrl?.pathname.endsWith(`/${value.randomSlug}`)) issues.push("public-url-slug-mismatch");
|
|
688
|
+
if (value.state !== "published") issues.push("published-state-required");
|
|
689
|
+
if (!validDate(value.publishedAt)) issues.push("invalid-published-at");
|
|
690
|
+
if (!validDate(value.expiresAt) || validDate(value.publishedAt) && Date.parse(value.expiresAt) <= Date.parse(value.publishedAt)) {
|
|
691
|
+
issues.push("invalid-publication-expiry");
|
|
692
|
+
}
|
|
693
|
+
if (value.renewedAt !== void 0 && !validDate(value.renewedAt) || value.unpublishedAt !== void 0 && !validDate(value.unpublishedAt)) {
|
|
694
|
+
issues.push("invalid-lifecycle-timestamp");
|
|
695
|
+
}
|
|
696
|
+
return [...new Set(issues)];
|
|
697
|
+
}
|
|
698
|
+
function assertValidStaticProjectPublication(value) {
|
|
699
|
+
const issues = validateStaticProjectPublication(value);
|
|
700
|
+
if (issues.length > 0) throw new Error(`Invalid static project publication: ${issues.join(", ")}`);
|
|
701
|
+
}
|
|
702
|
+
|
|
574
703
|
// src/rubric-validation.ts
|
|
575
704
|
var DIMENSION_TOTALS = {
|
|
576
705
|
structure: 20,
|
|
@@ -6650,14 +6779,26 @@ export {
|
|
|
6650
6779
|
SERVO_CREATURE_MISSION_ONE_AUTHORING_V1,
|
|
6651
6780
|
SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1,
|
|
6652
6781
|
STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1,
|
|
6782
|
+
STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1,
|
|
6783
|
+
STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1,
|
|
6784
|
+
STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1,
|
|
6785
|
+
STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1,
|
|
6786
|
+
STATIC_PROJECT_SAFETY_CHECK_IDS_V1,
|
|
6787
|
+
STATIC_PROJECT_SCANNER_VERSION_V1,
|
|
6653
6788
|
VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1,
|
|
6654
6789
|
VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1,
|
|
6655
6790
|
VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1,
|
|
6656
6791
|
assertValidLearningPath,
|
|
6657
6792
|
assertValidMissionAuthoringBundle,
|
|
6793
|
+
assertValidStaticProjectGuardianApproval,
|
|
6794
|
+
assertValidStaticProjectPublication,
|
|
6795
|
+
assertValidStaticProjectSnapshot,
|
|
6658
6796
|
calculateAssessment,
|
|
6659
6797
|
validateAssessmentRubric,
|
|
6660
6798
|
validateLearningPath,
|
|
6661
|
-
validateMissionAuthoringBundle
|
|
6799
|
+
validateMissionAuthoringBundle,
|
|
6800
|
+
validateStaticProjectGuardianApproval,
|
|
6801
|
+
validateStaticProjectPublication,
|
|
6802
|
+
validateStaticProjectSnapshot
|
|
6662
6803
|
};
|
|
6663
6804
|
//# sourceMappingURL=index.js.map
|