ENGLISH·COURSE API
    Preparing search index...
    • The single place where a content key becomes a URL.

      Resolution must happen strictly BEFORE parse: urlOrRelativePath() rejects a bare key (no leading /, no scheme), so a key can never live inside a parsed domain entity. Parsing afterwards means a row that resolves to something malformed is rejected here, at the adapter boundary, rather than reaching a src attribute in the UI.

      Both functions are pure and synchronous — BlobStore.url is string work.

      The one exception is a value that is ALREADY a URL: see resolveContentValue.

      Parameters

      Returns
          | {
              kind: "reading";
              id: string & $brand<"LessonId">;
              courseId: string & $brand<"CourseId">;
              moduleId: string & $brand<"ModuleId">;
              sequence: number;
              title: string;
              body: string;
          }
          | {
              kind: "video";
              id: string & $brand<"LessonId">;
              courseId: string & $brand<"CourseId">;
              moduleId: string & $brand<"ModuleId">;
              sequence: number;
              title: string;
              description: string;
              source: string;
              durationSeconds: number;
              poster?: string;
              uploadDate?: string;
          }

      • {
            kind: "reading";
            id: string & $brand<"LessonId">;
            courseId: string & $brand<"CourseId">;
            moduleId: string & $brand<"ModuleId">;
            sequence: number;
            title: string;
            body: string;
        }
      • {
            kind: "video";
            id: string & $brand<"LessonId">;
            courseId: string & $brand<"CourseId">;
            moduleId: string & $brand<"ModuleId">;
            sequence: number;
            title: string;
            description: string;
            source: string;
            durationSeconds: number;
            poster?: string;
            uploadDate?: string;
        }
        • kind: "video"
        • id: string & $brand<"LessonId">
        • courseId: string & $brand<"CourseId">
        • moduleId: string & $brand<"ModuleId">
        • sequence: number
        • title: string
        • description: string
        • source: string
        • durationSeconds: number
        • Optionalposter?: string
        • OptionaluploadDate?: string

          When the Lecture was published, as a calendar date. Absent for most of the catalog; a delivery adapter describing the video to search engines emits nothing rather than guessing when it is missing.