@twreporter-academy/api-types 0.0.16 → 0.0.17

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.
@@ -40,7 +40,15 @@ export declare const V1CourseInstructorSchema: z.ZodObject<{
40
40
  name: z.ZodString;
41
41
  title: z.ZodString;
42
42
  bio: z.ZodString;
43
- avatarUrl: z.ZodNullable<z.ZodString>;
43
+ avatar: z.ZodNullable<z.ZodObject<{
44
+ title: z.ZodString;
45
+ resized: z.ZodObject<{
46
+ tiny: z.ZodString;
47
+ small: z.ZodString;
48
+ medium: z.ZodString;
49
+ large: z.ZodString;
50
+ }, z.core.$strip>;
51
+ }, z.core.$strip>>;
44
52
  }, z.core.$strip>;
45
53
  export declare const V1CourseResourceSchema: z.ZodObject<{
46
54
  id: z.ZodString;
@@ -52,7 +60,15 @@ export declare const V1CourseFurtherReadingSchema: z.ZodObject<{
52
60
  id: z.ZodString;
53
61
  title: z.ZodString;
54
62
  excerpt: z.ZodString;
55
- thumbnailUrl: z.ZodNullable<z.ZodString>;
63
+ thumbnail: z.ZodNullable<z.ZodObject<{
64
+ title: z.ZodString;
65
+ resized: z.ZodObject<{
66
+ tiny: z.ZodString;
67
+ small: z.ZodString;
68
+ medium: z.ZodString;
69
+ large: z.ZodString;
70
+ }, z.core.$strip>;
71
+ }, z.core.$strip>>;
56
72
  url: z.ZodString;
57
73
  }, z.core.$strip>;
58
74
  export declare const V1CourseStatusSchema: z.ZodEnum<{
@@ -88,7 +104,15 @@ export declare const V1LearningCourseBadgeSchema: z.ZodLiteral<"new">;
88
104
  export declare const V1LearningCourseItemSchema: z.ZodObject<{
89
105
  slug: z.ZodString;
90
106
  title: z.ZodString;
91
- imageUrl: z.ZodNullable<z.ZodString>;
107
+ image: z.ZodNullable<z.ZodObject<{
108
+ title: z.ZodString;
109
+ resized: z.ZodObject<{
110
+ tiny: z.ZodString;
111
+ small: z.ZodString;
112
+ medium: z.ZodString;
113
+ large: z.ZodString;
114
+ }, z.core.$strip>;
115
+ }, z.core.$strip>>;
92
116
  badge: z.ZodOptional<z.ZodLiteral<"new">>;
93
117
  launchAt: z.ZodNullable<z.ZodISODateTime>;
94
118
  completedLessons: z.ZodNumber;
@@ -100,7 +124,15 @@ export declare const V1CoursesLearningListResponseSchema: z.ZodObject<{
100
124
  courses: z.ZodArray<z.ZodObject<{
101
125
  slug: z.ZodString;
102
126
  title: z.ZodString;
103
- imageUrl: z.ZodNullable<z.ZodString>;
127
+ image: z.ZodNullable<z.ZodObject<{
128
+ title: z.ZodString;
129
+ resized: z.ZodObject<{
130
+ tiny: z.ZodString;
131
+ small: z.ZodString;
132
+ medium: z.ZodString;
133
+ large: z.ZodString;
134
+ }, z.core.$strip>;
135
+ }, z.core.$strip>>;
104
136
  badge: z.ZodOptional<z.ZodLiteral<"new">>;
105
137
  launchAt: z.ZodNullable<z.ZodISODateTime>;
106
138
  completedLessons: z.ZodNumber;
@@ -147,7 +179,15 @@ export declare const V1ClassroomBySlugResponseSchema: z.ZodObject<{
147
179
  name: z.ZodString;
148
180
  title: z.ZodString;
149
181
  bio: z.ZodString;
150
- avatarUrl: z.ZodNullable<z.ZodString>;
182
+ avatar: z.ZodNullable<z.ZodObject<{
183
+ title: z.ZodString;
184
+ resized: z.ZodObject<{
185
+ tiny: z.ZodString;
186
+ small: z.ZodString;
187
+ medium: z.ZodString;
188
+ large: z.ZodString;
189
+ }, z.core.$strip>;
190
+ }, z.core.$strip>>;
151
191
  }, z.core.$strip>>;
152
192
  resources: z.ZodArray<z.ZodObject<{
153
193
  id: z.ZodString;
@@ -159,7 +199,15 @@ export declare const V1ClassroomBySlugResponseSchema: z.ZodObject<{
159
199
  id: z.ZodString;
160
200
  title: z.ZodString;
161
201
  excerpt: z.ZodString;
162
- thumbnailUrl: z.ZodNullable<z.ZodString>;
202
+ thumbnail: z.ZodNullable<z.ZodObject<{
203
+ title: z.ZodString;
204
+ resized: z.ZodObject<{
205
+ tiny: z.ZodString;
206
+ small: z.ZodString;
207
+ medium: z.ZodString;
208
+ large: z.ZodString;
209
+ }, z.core.$strip>;
210
+ }, z.core.$strip>>;
163
211
  url: z.ZodString;
164
212
  }, z.core.$strip>>;
165
213
  }, z.core.$strip>;
@@ -193,7 +241,15 @@ export declare const V1CourseBySlugResponseSchema: z.ZodObject<{
193
241
  name: z.ZodString;
194
242
  title: z.ZodString;
195
243
  bio: z.ZodString;
196
- avatarUrl: z.ZodNullable<z.ZodString>;
244
+ avatar: z.ZodNullable<z.ZodObject<{
245
+ title: z.ZodString;
246
+ resized: z.ZodObject<{
247
+ tiny: z.ZodString;
248
+ small: z.ZodString;
249
+ medium: z.ZodString;
250
+ large: z.ZodString;
251
+ }, z.core.$strip>;
252
+ }, z.core.$strip>>;
197
253
  }, z.core.$strip>>;
198
254
  heroImageVideo: z.ZodNullable<z.ZodObject<{
199
255
  title: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"course.d.ts","sourceRoot":"","sources":["../../src/schemas/course.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,OAAO,EAAE,GACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3B,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAO/C,CAAA;AAEF,eAAO,MAAM,4BAA4B;;iBAEvC,CAAA;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;;;iBAI3C,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBAcP,CAAA;AAE1B,eAAO,MAAM,wBAAwB;;;;iBAOP,CAAA;AAE9B,eAAO,MAAM,wBAAwB;;;;;;;iBASP,CAAA;AAE9B,eAAO,MAAM,sBAAsB;;;;;iBAQP,CAAA;AAE5B,eAAO,MAAM,4BAA4B;;;;;;iBAQP,CAAA;AAElC,eAAO,MAAM,oBAAoB;;;EAAuC,CAAA;AAExE,eAAO,MAAM,yBAAyB;;;EAAyB,CAAA;AAE/D,eAAO,MAAM,wBAAwB;;;;;;;;iBAOP,CAAA;AAE9B,eAAO,MAAM,2BAA2B;;;;;;;;;;iBAIP,CAAA;AAEjC,6FAA6F;AAC7F,eAAO,MAAM,2BAA2B,qBAAmB,CAAA;AAE3D,eAAO,MAAM,0BAA0B;;;;;;;;;;iBAiBP,CAAA;AAEhC,eAAO,MAAM,mCAAmC;;;;;;;;;;;;iBAIP,CAAA;AAEzC,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAA;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBf,CAAA;AAE7B,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBf,CAAA"}
1
+ {"version":3,"file":"course.d.ts","sourceRoot":"","sources":["../../src/schemas/course.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,OAAO,EAAE,GACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3B,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAO/C,CAAA;AAEF,eAAO,MAAM,4BAA4B;;iBAEvC,CAAA;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;;;iBAI3C,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBAcP,CAAA;AAE1B,eAAO,MAAM,wBAAwB;;;;iBAOP,CAAA;AAE9B,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;iBASP,CAAA;AAE9B,eAAO,MAAM,sBAAsB;;;;;iBAQP,CAAA;AAE5B,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;iBAQP,CAAA;AAElC,eAAO,MAAM,oBAAoB;;;EAAuC,CAAA;AAExE,eAAO,MAAM,yBAAyB;;;EAAyB,CAAA;AAE/D,eAAO,MAAM,wBAAwB;;;;;;;;iBAOP,CAAA;AAE9B,eAAO,MAAM,2BAA2B;;;;;;;;;;iBAIP,CAAA;AAEjC,6FAA6F;AAC7F,eAAO,MAAM,2BAA2B,qBAAmB,CAAA;AAE3D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;iBAiBP,CAAA;AAEhC,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;iBAIP,CAAA;AAEzC,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAA;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBf,CAAA;AAE7B,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBf,CAAA"}
@@ -40,7 +40,7 @@ export const V1CourseInstructorSchema = z.object({
40
40
  name: z.string(),
41
41
  title: z.string(),
42
42
  bio: z.string(),
43
- avatarUrl: z.string().nullable()
43
+ avatar: PhotoSchema.nullable()
44
44
  }).openapi('CourseInstructor');
45
45
  export const V1CourseResourceSchema = z.object({
46
46
  id: z.string(),
@@ -53,7 +53,7 @@ export const V1CourseFurtherReadingSchema = z.object({
53
53
  id: z.string(),
54
54
  title: z.string(),
55
55
  excerpt: z.string(),
56
- thumbnailUrl: z.string().nullable(),
56
+ thumbnail: PhotoSchema.nullable(),
57
57
  url: z.string()
58
58
  }).openapi('CourseFurtherReading');
59
59
  export const V1CourseStatusSchema = z.enum(['published', 'coming_soon']);
@@ -73,7 +73,7 @@ export const V1LearningCourseBadgeSchema = z.literal('new');
73
73
  export const V1LearningCourseItemSchema = z.object({
74
74
  slug: z.string(),
75
75
  title: z.string(),
76
- imageUrl: z.string().nullable(),
76
+ image: PhotoSchema.nullable(),
77
77
  badge: V1LearningCourseBadgeSchema.optional(),
78
78
  launchAt: z.iso.datetime().nullable(),
79
79
  completedLessons: z.number().int().nonnegative(),
@@ -1 +1 @@
1
- {"version":3,"file":"course.js","names":["z","internalServerErrorResponse","RestErrorBodySchema","CloudflareStreamVideoSchema","V1LessonProgressSchema","PhotoSchema","registry","CourseThumbnailSchema","JsonValueSchema","union","string","number","boolean","null","array","unknown","record","V1CourseSlugPathParamsSchema","object","slug","min","max","V1CourseBySlugMetaResponseSchema","ogTitle","ogDescription","ogImage","nullable","V1CourseLessonSchema","id","order","int","title","startSeconds","endSeconds","durationSeconds","progress","optional","openapi","V1CourseLessonMetaSchema","duration","V1CourseInstructorSchema","name","bio","avatarUrl","V1CourseResourceSchema","description","downloadUrl","V1CourseFurtherReadingSchema","excerpt","thumbnailUrl","url","V1CourseStatusSchema","enum","V1HeaderCourseBadgeSchema","V1HeaderCourseItemSchema","subtitle","badge","V1CoursesListResponseSchema","courses","V1LearningCourseBadgeSchema","literal","V1LearningCourseItemSchema","imageUrl","launchAt","iso","datetime","completedLessons","nonnegative","totalLessons","progressPercent","unitTitle","describe","V1CoursesLearningListResponseSchema","V1CourseTagSchema","V1ClassroomBySlugResponseSchema","summary","status","tags","previewVideoId","videoId","lessons","instructors","resources","furtherReading","V1CourseBySlugResponseSchema","trialVideos","lessonsMeta","heroImageVideo","heroImage","registerPath","method","path","responses","content","schema","request","params"],"sources":["../../src/schemas/course.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { internalServerErrorResponse } from '../responses.js'\nimport { RestErrorBodySchema } from '../rest.js'\nimport { CloudflareStreamVideoSchema } from './cloudflare-stream.js'\nimport { V1LessonProgressSchema } from './lesson-progress.js'\nimport { PhotoSchema } from './photo.js'\nimport { registry } from './registry.js'\nimport { CourseThumbnailSchema } from './tag.js'\n\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | unknown[]\n | Record<string, unknown>\n\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(z.unknown()),\n z.record(z.string(), z.unknown()),\n])\n\nexport const V1CourseSlugPathParamsSchema = z.object({\n slug: z.string().min(1).max(200),\n})\n\nexport const V1CourseBySlugMetaResponseSchema = z.object({\n ogTitle: z.string(),\n ogDescription: z.string(),\n ogImage: CourseThumbnailSchema.nullable(),\n})\n\nexport const V1CourseLessonSchema = z\n .object({\n id: z.string(),\n order: z.number().int(),\n title: z.string(),\n /** Segment start in the course video (seconds) */\n startSeconds: z.number().int(),\n /** Segment end in the course video (seconds) */\n endSeconds: z.number().int(),\n /** Derived segment length: max(0, endSeconds - startSeconds) */\n durationSeconds: z.number().int(),\n /** Present when request includes a valid member JWT; null when no progress record */\n progress: V1LessonProgressSchema.nullable().optional(),\n })\n .openapi('CourseLesson')\n\nexport const V1CourseLessonMetaSchema = z\n .object({\n order: z.number().int().nullable(),\n title: z.string(),\n /** Derived segment length: max(0, endSeconds - startSeconds) */\n duration: z.number().int(),\n })\n .openapi('CourseLessonMeta')\n\nexport const V1CourseInstructorSchema = z\n .object({\n id: z.string(),\n slug: z.string(),\n name: z.string(),\n title: z.string(),\n bio: z.string(),\n avatarUrl: z.string().nullable(),\n })\n .openapi('CourseInstructor')\n\nexport const V1CourseResourceSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n description: z.string(),\n /** GCS file URL; empty when no PDF uploaded */\n downloadUrl: z.string(),\n })\n .openapi('CourseResource')\n\nexport const V1CourseFurtherReadingSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n excerpt: z.string(),\n thumbnailUrl: z.string().nullable(),\n url: z.string(),\n })\n .openapi('CourseFurtherReading')\n\nexport const V1CourseStatusSchema = z.enum(['published', 'coming_soon'])\n\nexport const V1HeaderCourseBadgeSchema = z.enum(['new', 'wip'])\n\nexport const V1HeaderCourseItemSchema = z\n .object({\n slug: z.string(),\n title: z.string(),\n subtitle: z.string(),\n badge: V1HeaderCourseBadgeSchema.optional(),\n })\n .openapi('HeaderCourseItem')\n\nexport const V1CoursesListResponseSchema = z\n .object({\n courses: z.array(V1HeaderCourseItemSchema),\n })\n .openapi('CoursesListResponse')\n\n/** Learning badge is only `new`; `wip` / coming_soon courses are excluded from this list. */\nexport const V1LearningCourseBadgeSchema = z.literal('new')\n\nexport const V1LearningCourseItemSchema = z\n .object({\n slug: z.string(),\n title: z.string(),\n imageUrl: z.string().nullable(),\n badge: V1LearningCourseBadgeSchema.optional(),\n launchAt: z.iso.datetime().nullable(),\n completedLessons: z.number().int().nonnegative(),\n totalLessons: z.number().int().nonnegative(),\n progressPercent: z.number().int().min(0).max(100),\n /** Title of the next incomplete lesson; last lesson title when every lesson is complete. */\n unitTitle: z\n .string()\n .describe(\n 'Title of the next incomplete lesson; last lesson title when every lesson is complete.'\n ),\n })\n .openapi('LearningCourseItem')\n\nexport const V1CoursesLearningListResponseSchema = z\n .object({\n courses: z.array(V1LearningCourseItemSchema),\n })\n .openapi('CoursesLearningListResponse')\n\nexport const V1CourseTagSchema = z.object({\n slug: z.string(),\n name: z.string(),\n})\n\nexport const V1ClassroomBySlugResponseSchema = z\n .object({\n slug: z.string(),\n title: z.string(),\n subtitle: z.string(),\n summary: z.string(),\n /** published: full payload; coming_soon: lessons/resources/furtherReading/previewVideoId stripped */\n status: V1CourseStatusSchema,\n tags: z.array(V1CourseTagSchema),\n /** Trial/preview stream only; null when unconfigured or course is coming_soon */\n previewVideoId: z.string().nullable(),\n /** Course video Cloudflare stream id; null when unpaid or not set */\n videoId: z.string().nullable(),\n lessons: z.array(V1CourseLessonSchema),\n instructors: z.array(V1CourseInstructorSchema),\n resources: z.array(V1CourseResourceSchema),\n furtherReading: z.array(V1CourseFurtherReadingSchema),\n })\n .openapi('ClassroomDetail')\n\nexport const V1CourseBySlugResponseSchema = z\n .object({\n slug: z.string(),\n title: z.string(),\n subtitle: z.string(),\n summary: z.string(),\n launchAt: z.iso.datetime().nullable(),\n description: JsonValueSchema.nullable(),\n /** published: full payload; coming_soon: lessons/resources/furtherReading/previewVideoId stripped */\n status: V1CourseStatusSchema,\n tags: z.array(V1CourseTagSchema),\n /** Trial/preview stream only; null when unconfigured or course is coming_soon */\n trialVideos: z.array(CloudflareStreamVideoSchema).nullable(),\n lessonsMeta: z.array(V1CourseLessonMetaSchema),\n instructors: z.array(V1CourseInstructorSchema),\n heroImageVideo: CloudflareStreamVideoSchema.nullable(),\n heroImage: PhotoSchema.nullable(),\n })\n .openapi('CourseDetail')\n\n// --- OpenAPI path registration ---\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/courses',\n tags: ['Courses'],\n description: 'Header course list.',\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1CoursesListResponseSchema },\n },\n },\n ...internalServerErrorResponse,\n },\n})\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/courses/{slug}/meta',\n tags: ['Courses'],\n description: 'OG metadata for a course page.',\n request: { params: V1CourseSlugPathParamsSchema },\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1CourseBySlugMetaResponseSchema },\n },\n },\n 400: {\n description: 'Bad request',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n 404: {\n description: 'Course not found',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n ...internalServerErrorResponse,\n },\n})\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/courses/{slug}',\n tags: ['Courses'],\n description:\n 'Full course detail for the classroom page. When status is coming_soon, lessons, resources, furtherReading, and previewVideoId are empty/null while title, description, tags, and instructors remain visible.',\n request: { params: V1CourseSlugPathParamsSchema },\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1CourseBySlugResponseSchema },\n },\n },\n 400: {\n description: 'Bad request',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n 404: {\n description: 'Course not found',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n ...internalServerErrorResponse,\n },\n})\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"course.js","names":["z","internalServerErrorResponse","RestErrorBodySchema","CloudflareStreamVideoSchema","V1LessonProgressSchema","PhotoSchema","registry","CourseThumbnailSchema","JsonValueSchema","union","string","number","boolean","null","array","unknown","record","V1CourseSlugPathParamsSchema","object","slug","min","max","V1CourseBySlugMetaResponseSchema","ogTitle","ogDescription","ogImage","nullable","V1CourseLessonSchema","id","order","int","title","startSeconds","endSeconds","durationSeconds","progress","optional","openapi","V1CourseLessonMetaSchema","duration","V1CourseInstructorSchema","name","bio","avatar","V1CourseResourceSchema","description","downloadUrl","V1CourseFurtherReadingSchema","excerpt","thumbnail","url","V1CourseStatusSchema","enum","V1HeaderCourseBadgeSchema","V1HeaderCourseItemSchema","subtitle","badge","V1CoursesListResponseSchema","courses","V1LearningCourseBadgeSchema","literal","V1LearningCourseItemSchema","image","launchAt","iso","datetime","completedLessons","nonnegative","totalLessons","progressPercent","unitTitle","describe","V1CoursesLearningListResponseSchema","V1CourseTagSchema","V1ClassroomBySlugResponseSchema","summary","status","tags","previewVideoId","videoId","lessons","instructors","resources","furtherReading","V1CourseBySlugResponseSchema","trialVideos","lessonsMeta","heroImageVideo","heroImage","registerPath","method","path","responses","content","schema","request","params"],"sources":["../../src/schemas/course.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { internalServerErrorResponse } from '../responses.js'\nimport { RestErrorBodySchema } from '../rest.js'\nimport { CloudflareStreamVideoSchema } from './cloudflare-stream.js'\nimport { V1LessonProgressSchema } from './lesson-progress.js'\nimport { PhotoSchema } from './photo.js'\nimport { registry } from './registry.js'\nimport { CourseThumbnailSchema } from './tag.js'\n\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | unknown[]\n | Record<string, unknown>\n\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(z.unknown()),\n z.record(z.string(), z.unknown()),\n])\n\nexport const V1CourseSlugPathParamsSchema = z.object({\n slug: z.string().min(1).max(200),\n})\n\nexport const V1CourseBySlugMetaResponseSchema = z.object({\n ogTitle: z.string(),\n ogDescription: z.string(),\n ogImage: CourseThumbnailSchema.nullable(),\n})\n\nexport const V1CourseLessonSchema = z\n .object({\n id: z.string(),\n order: z.number().int(),\n title: z.string(),\n /** Segment start in the course video (seconds) */\n startSeconds: z.number().int(),\n /** Segment end in the course video (seconds) */\n endSeconds: z.number().int(),\n /** Derived segment length: max(0, endSeconds - startSeconds) */\n durationSeconds: z.number().int(),\n /** Present when request includes a valid member JWT; null when no progress record */\n progress: V1LessonProgressSchema.nullable().optional(),\n })\n .openapi('CourseLesson')\n\nexport const V1CourseLessonMetaSchema = z\n .object({\n order: z.number().int().nullable(),\n title: z.string(),\n /** Derived segment length: max(0, endSeconds - startSeconds) */\n duration: z.number().int(),\n })\n .openapi('CourseLessonMeta')\n\nexport const V1CourseInstructorSchema = z\n .object({\n id: z.string(),\n slug: z.string(),\n name: z.string(),\n title: z.string(),\n bio: z.string(),\n avatar: PhotoSchema.nullable(),\n })\n .openapi('CourseInstructor')\n\nexport const V1CourseResourceSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n description: z.string(),\n /** GCS file URL; empty when no PDF uploaded */\n downloadUrl: z.string(),\n })\n .openapi('CourseResource')\n\nexport const V1CourseFurtherReadingSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n excerpt: z.string(),\n thumbnail: PhotoSchema.nullable(),\n url: z.string(),\n })\n .openapi('CourseFurtherReading')\n\nexport const V1CourseStatusSchema = z.enum(['published', 'coming_soon'])\n\nexport const V1HeaderCourseBadgeSchema = z.enum(['new', 'wip'])\n\nexport const V1HeaderCourseItemSchema = z\n .object({\n slug: z.string(),\n title: z.string(),\n subtitle: z.string(),\n badge: V1HeaderCourseBadgeSchema.optional(),\n })\n .openapi('HeaderCourseItem')\n\nexport const V1CoursesListResponseSchema = z\n .object({\n courses: z.array(V1HeaderCourseItemSchema),\n })\n .openapi('CoursesListResponse')\n\n/** Learning badge is only `new`; `wip` / coming_soon courses are excluded from this list. */\nexport const V1LearningCourseBadgeSchema = z.literal('new')\n\nexport const V1LearningCourseItemSchema = z\n .object({\n slug: z.string(),\n title: z.string(),\n image: PhotoSchema.nullable(),\n badge: V1LearningCourseBadgeSchema.optional(),\n launchAt: z.iso.datetime().nullable(),\n completedLessons: z.number().int().nonnegative(),\n totalLessons: z.number().int().nonnegative(),\n progressPercent: z.number().int().min(0).max(100),\n /** Title of the next incomplete lesson; last lesson title when every lesson is complete. */\n unitTitle: z\n .string()\n .describe(\n 'Title of the next incomplete lesson; last lesson title when every lesson is complete.'\n ),\n })\n .openapi('LearningCourseItem')\n\nexport const V1CoursesLearningListResponseSchema = z\n .object({\n courses: z.array(V1LearningCourseItemSchema),\n })\n .openapi('CoursesLearningListResponse')\n\nexport const V1CourseTagSchema = z.object({\n slug: z.string(),\n name: z.string(),\n})\n\nexport const V1ClassroomBySlugResponseSchema = z\n .object({\n slug: z.string(),\n title: z.string(),\n subtitle: z.string(),\n summary: z.string(),\n /** published: full payload; coming_soon: lessons/resources/furtherReading/previewVideoId stripped */\n status: V1CourseStatusSchema,\n tags: z.array(V1CourseTagSchema),\n /** Trial/preview stream only; null when unconfigured or course is coming_soon */\n previewVideoId: z.string().nullable(),\n /** Course video Cloudflare stream id; null when unpaid or not set */\n videoId: z.string().nullable(),\n lessons: z.array(V1CourseLessonSchema),\n instructors: z.array(V1CourseInstructorSchema),\n resources: z.array(V1CourseResourceSchema),\n furtherReading: z.array(V1CourseFurtherReadingSchema),\n })\n .openapi('ClassroomDetail')\n\nexport const V1CourseBySlugResponseSchema = z\n .object({\n slug: z.string(),\n title: z.string(),\n subtitle: z.string(),\n summary: z.string(),\n launchAt: z.iso.datetime().nullable(),\n description: JsonValueSchema.nullable(),\n /** published: full payload; coming_soon: lessons/resources/furtherReading/previewVideoId stripped */\n status: V1CourseStatusSchema,\n tags: z.array(V1CourseTagSchema),\n /** Trial/preview stream only; null when unconfigured or course is coming_soon */\n trialVideos: z.array(CloudflareStreamVideoSchema).nullable(),\n lessonsMeta: z.array(V1CourseLessonMetaSchema),\n instructors: z.array(V1CourseInstructorSchema),\n heroImageVideo: CloudflareStreamVideoSchema.nullable(),\n heroImage: PhotoSchema.nullable(),\n })\n .openapi('CourseDetail')\n\n// --- OpenAPI path registration ---\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/courses',\n tags: ['Courses'],\n description: 'Header course list.',\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1CoursesListResponseSchema },\n },\n },\n ...internalServerErrorResponse,\n },\n})\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/courses/{slug}/meta',\n tags: ['Courses'],\n description: 'OG metadata for a course page.',\n request: { params: V1CourseSlugPathParamsSchema },\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1CourseBySlugMetaResponseSchema },\n },\n },\n 400: {\n description: 'Bad request',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n 404: {\n description: 'Course not found',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n ...internalServerErrorResponse,\n },\n})\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/courses/{slug}',\n tags: ['Courses'],\n description:\n 'Full course detail for the classroom page. When status is coming_soon, lessons, resources, furtherReading, and previewVideoId are empty/null while title, description, tags, and instructors remain visible.',\n request: { params: V1CourseSlugPathParamsSchema },\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1CourseBySlugResponseSchema },\n },\n },\n 400: {\n description: 'Bad request',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n 404: {\n description: 'Course not found',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n ...internalServerErrorResponse,\n },\n})\n"],"mappings":"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","ignoreList":[]}
@@ -3,13 +3,29 @@ export declare const V1HomePostCardSchema: z.ZodObject<{
3
3
  title: z.ZodString;
4
4
  description: z.ZodString;
5
5
  link: z.ZodString;
6
- imageUrl: z.ZodString;
6
+ image: z.ZodNullable<z.ZodObject<{
7
+ title: z.ZodString;
8
+ resized: z.ZodObject<{
9
+ tiny: z.ZodString;
10
+ small: z.ZodString;
11
+ medium: z.ZodString;
12
+ large: z.ZodString;
13
+ }, z.core.$strip>;
14
+ }, z.core.$strip>>;
7
15
  }, z.core.$strip>;
8
16
  export declare const V1HomeActivityCardSchema: z.ZodObject<{
9
17
  title: z.ZodString;
10
18
  description: z.ZodString;
11
19
  link: z.ZodString;
12
- imageUrl: z.ZodString;
20
+ image: z.ZodNullable<z.ZodObject<{
21
+ title: z.ZodString;
22
+ resized: z.ZodObject<{
23
+ tiny: z.ZodString;
24
+ small: z.ZodString;
25
+ medium: z.ZodString;
26
+ large: z.ZodString;
27
+ }, z.core.$strip>;
28
+ }, z.core.$strip>>;
13
29
  badgeText: z.ZodString;
14
30
  buttonText: z.ZodString;
15
31
  }, z.core.$strip>;
@@ -17,7 +33,15 @@ export declare const V1HomeCourseCardSchema: z.ZodObject<{
17
33
  title: z.ZodString;
18
34
  description: z.ZodString;
19
35
  slug: z.ZodString;
20
- imageUrl: z.ZodString;
36
+ image: z.ZodNullable<z.ZodObject<{
37
+ title: z.ZodString;
38
+ resized: z.ZodObject<{
39
+ tiny: z.ZodString;
40
+ small: z.ZodString;
41
+ medium: z.ZodString;
42
+ large: z.ZodString;
43
+ }, z.core.$strip>;
44
+ }, z.core.$strip>>;
21
45
  instructors: z.ZodArray<z.ZodObject<{
22
46
  name: z.ZodString;
23
47
  }, z.core.$strip>>;
@@ -26,10 +50,10 @@ export declare const V1HomeCourseCardSchema: z.ZodObject<{
26
50
  name: z.ZodString;
27
51
  ogTitle: z.ZodString;
28
52
  ogDescription: z.ZodString;
29
- homePageImageXL: z.ZodString;
30
- homePageImageL: z.ZodString;
31
- homePageImageM: z.ZodString;
32
- homePageImageS: z.ZodString;
53
+ homePageImageXL: z.ZodNullable<z.ZodString>;
54
+ homePageImageL: z.ZodNullable<z.ZodString>;
55
+ homePageImageM: z.ZodNullable<z.ZodString>;
56
+ homePageImageS: z.ZodNullable<z.ZodString>;
33
57
  }, z.core.$strip>>;
34
58
  status: z.ZodEnum<{
35
59
  published: "published";
@@ -42,13 +66,29 @@ export declare const V1HomePageResponseSchema: z.ZodObject<{
42
66
  title: z.ZodString;
43
67
  description: z.ZodString;
44
68
  link: z.ZodString;
45
- imageUrl: z.ZodString;
69
+ image: z.ZodNullable<z.ZodObject<{
70
+ title: z.ZodString;
71
+ resized: z.ZodObject<{
72
+ tiny: z.ZodString;
73
+ small: z.ZodString;
74
+ medium: z.ZodString;
75
+ large: z.ZodString;
76
+ }, z.core.$strip>;
77
+ }, z.core.$strip>>;
46
78
  }, z.core.$strip>>;
47
79
  activities: z.ZodArray<z.ZodObject<{
48
80
  title: z.ZodString;
49
81
  description: z.ZodString;
50
82
  link: z.ZodString;
51
- imageUrl: z.ZodString;
83
+ image: z.ZodNullable<z.ZodObject<{
84
+ title: z.ZodString;
85
+ resized: z.ZodObject<{
86
+ tiny: z.ZodString;
87
+ small: z.ZodString;
88
+ medium: z.ZodString;
89
+ large: z.ZodString;
90
+ }, z.core.$strip>;
91
+ }, z.core.$strip>>;
52
92
  badgeText: z.ZodString;
53
93
  buttonText: z.ZodString;
54
94
  }, z.core.$strip>>;
@@ -56,7 +96,15 @@ export declare const V1HomePageResponseSchema: z.ZodObject<{
56
96
  title: z.ZodString;
57
97
  description: z.ZodString;
58
98
  slug: z.ZodString;
59
- imageUrl: z.ZodString;
99
+ image: z.ZodNullable<z.ZodObject<{
100
+ title: z.ZodString;
101
+ resized: z.ZodObject<{
102
+ tiny: z.ZodString;
103
+ small: z.ZodString;
104
+ medium: z.ZodString;
105
+ large: z.ZodString;
106
+ }, z.core.$strip>;
107
+ }, z.core.$strip>>;
60
108
  instructors: z.ZodArray<z.ZodObject<{
61
109
  name: z.ZodString;
62
110
  }, z.core.$strip>>;
@@ -65,10 +113,10 @@ export declare const V1HomePageResponseSchema: z.ZodObject<{
65
113
  name: z.ZodString;
66
114
  ogTitle: z.ZodString;
67
115
  ogDescription: z.ZodString;
68
- homePageImageXL: z.ZodString;
69
- homePageImageL: z.ZodString;
70
- homePageImageM: z.ZodString;
71
- homePageImageS: z.ZodString;
116
+ homePageImageXL: z.ZodNullable<z.ZodString>;
117
+ homePageImageL: z.ZodNullable<z.ZodString>;
118
+ homePageImageM: z.ZodNullable<z.ZodString>;
119
+ homePageImageS: z.ZodNullable<z.ZodString>;
72
120
  }, z.core.$strip>>;
73
121
  status: z.ZodEnum<{
74
122
  published: "published";
@@ -1 +1 @@
1
- {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../src/schemas/home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,eAAO,MAAM,oBAAoB;;;;;iBAOX,CAAA;AAEtB,eAAO,MAAM,wBAAwB;;;;;;;iBASX,CAAA;AAE1B,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;iBAsBX,CAAA;AAExB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMP,CAAA"}
1
+ {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../src/schemas/home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQvB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;iBAOX,CAAA;AAEtB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;iBASX,CAAA;AAE1B,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsBX,CAAA;AAExB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMP,CAAA"}
@@ -1,19 +1,20 @@
1
1
  import { z } from 'zod';
2
2
  import { internalServerErrorResponse } from '../responses.js';
3
3
  import { V1CourseStatusSchema } from './course.js';
4
+ import { PhotoSchema } from './photo.js';
4
5
  // TODO: import registry from global registry file instead of from tag.js
5
6
  import { registry } from './registry.js';
6
7
  export const V1HomePostCardSchema = z.object({
7
8
  title: z.string(),
8
9
  description: z.string(),
9
10
  link: z.string(),
10
- imageUrl: z.string()
11
+ image: PhotoSchema.nullable()
11
12
  }).openapi('PostCard');
12
13
  export const V1HomeActivityCardSchema = z.object({
13
14
  title: z.string(),
14
15
  description: z.string(),
15
16
  link: z.string(),
16
- imageUrl: z.string(),
17
+ image: PhotoSchema.nullable(),
17
18
  badgeText: z.string(),
18
19
  buttonText: z.string()
19
20
  }).openapi('ActivityCard');
@@ -21,7 +22,7 @@ export const V1HomeCourseCardSchema = z.object({
21
22
  title: z.string(),
22
23
  description: z.string(),
23
24
  slug: z.string(),
24
- imageUrl: z.string(),
25
+ image: PhotoSchema.nullable(),
25
26
  instructors: z.array(z.object({
26
27
  name: z.string()
27
28
  })),
@@ -30,10 +31,10 @@ export const V1HomeCourseCardSchema = z.object({
30
31
  name: z.string(),
31
32
  ogTitle: z.string(),
32
33
  ogDescription: z.string(),
33
- homePageImageXL: z.string(),
34
- homePageImageL: z.string(),
35
- homePageImageM: z.string(),
36
- homePageImageS: z.string()
34
+ homePageImageXL: z.string().nullable(),
35
+ homePageImageL: z.string().nullable(),
36
+ homePageImageM: z.string().nullable(),
37
+ homePageImageS: z.string().nullable()
37
38
  })),
38
39
  status: V1CourseStatusSchema,
39
40
  launchAt: z.union([z.iso.datetime(), z.null()])
@@ -1 +1 @@
1
- {"version":3,"file":"home.js","names":["z","internalServerErrorResponse","V1CourseStatusSchema","registry","V1HomePostCardSchema","object","title","string","description","link","imageUrl","openapi","V1HomeActivityCardSchema","badgeText","buttonText","V1HomeCourseCardSchema","slug","instructors","array","name","tags","ogTitle","ogDescription","homePageImageXL","homePageImageL","homePageImageM","homePageImageS","status","launchAt","union","iso","datetime","null","V1HomePageResponseSchema","posts","activities","courses","registerPath","method","path","responses","content","schema"],"sources":["../../src/schemas/home.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { internalServerErrorResponse } from '../responses.js'\nimport { V1CourseStatusSchema } from './course.js'\n// TODO: import registry from global registry file instead of from tag.js\nimport { registry } from './registry.js'\n\nexport const V1HomePostCardSchema = z\n .object({\n title: z.string(),\n description: z.string(),\n link: z.string(),\n imageUrl: z.string(),\n })\n .openapi('PostCard')\n\nexport const V1HomeActivityCardSchema = z\n .object({\n title: z.string(),\n description: z.string(),\n link: z.string(),\n imageUrl: z.string(),\n badgeText: z.string(),\n buttonText: z.string(),\n })\n .openapi('ActivityCard')\n\nexport const V1HomeCourseCardSchema = z\n .object({\n title: z.string(),\n description: z.string(),\n slug: z.string(),\n imageUrl: z.string(),\n instructors: z.array(z.object({ name: z.string() })),\n tags: z.array(\n z.object({\n slug: z.string(),\n name: z.string(),\n ogTitle: z.string(),\n ogDescription: z.string(),\n homePageImageXL: z.string(),\n homePageImageL: z.string(),\n homePageImageM: z.string(),\n homePageImageS: z.string(),\n })\n ),\n status: V1CourseStatusSchema,\n launchAt: z.union([z.iso.datetime(), z.null()]),\n })\n .openapi('CourseCard')\n\nexport const V1HomePageResponseSchema = z\n .object({\n posts: z.array(V1HomePostCardSchema),\n activities: z.array(V1HomeActivityCardSchema),\n courses: z.array(V1HomeCourseCardSchema),\n })\n .openapi('HomePageResponse')\n\n// --- OpenAPI path registration ---\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/home',\n tags: ['Home'],\n description: 'Get home page data.',\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1HomePageResponseSchema },\n },\n },\n ...internalServerErrorResponse,\n },\n})\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"home.js","names":["z","internalServerErrorResponse","V1CourseStatusSchema","PhotoSchema","registry","V1HomePostCardSchema","object","title","string","description","link","image","nullable","openapi","V1HomeActivityCardSchema","badgeText","buttonText","V1HomeCourseCardSchema","slug","instructors","array","name","tags","ogTitle","ogDescription","homePageImageXL","homePageImageL","homePageImageM","homePageImageS","status","launchAt","union","iso","datetime","null","V1HomePageResponseSchema","posts","activities","courses","registerPath","method","path","responses","content","schema"],"sources":["../../src/schemas/home.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { internalServerErrorResponse } from '../responses.js'\nimport { V1CourseStatusSchema } from './course.js'\nimport { PhotoSchema } from './photo.js'\n// TODO: import registry from global registry file instead of from tag.js\nimport { registry } from './registry.js'\n\nexport const V1HomePostCardSchema = z\n .object({\n title: z.string(),\n description: z.string(),\n link: z.string(),\n image: PhotoSchema.nullable(),\n })\n .openapi('PostCard')\n\nexport const V1HomeActivityCardSchema = z\n .object({\n title: z.string(),\n description: z.string(),\n link: z.string(),\n image: PhotoSchema.nullable(),\n badgeText: z.string(),\n buttonText: z.string(),\n })\n .openapi('ActivityCard')\n\nexport const V1HomeCourseCardSchema = z\n .object({\n title: z.string(),\n description: z.string(),\n slug: z.string(),\n image: PhotoSchema.nullable(),\n instructors: z.array(z.object({ name: z.string() })),\n tags: z.array(\n z.object({\n slug: z.string(),\n name: z.string(),\n ogTitle: z.string(),\n ogDescription: z.string(),\n homePageImageXL: z.string().nullable(),\n homePageImageL: z.string().nullable(),\n homePageImageM: z.string().nullable(),\n homePageImageS: z.string().nullable(),\n })\n ),\n status: V1CourseStatusSchema,\n launchAt: z.union([z.iso.datetime(), z.null()]),\n })\n .openapi('CourseCard')\n\nexport const V1HomePageResponseSchema = z\n .object({\n posts: z.array(V1HomePostCardSchema),\n activities: z.array(V1HomeActivityCardSchema),\n courses: z.array(V1HomeCourseCardSchema),\n })\n .openapi('HomePageResponse')\n\n// --- OpenAPI path registration ---\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/home',\n tags: ['Home'],\n description: 'Get home page data.',\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1HomePageResponseSchema },\n },\n },\n ...internalServerErrorResponse,\n },\n})\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twreporter-academy/api-types",
3
- "version": "0.0.16",
3
+ "version": "0.0.17",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "files": [