academe-kit 0.15.0 → 0.17.0

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.
@@ -9235,7 +9235,7 @@ export interface paths {
9235
9235
  };
9236
9236
  requestBody?: never;
9237
9237
  responses: {
9238
- /** @description provider, embedUrl, videoExternalId, startTimeSeconds, durationSeconds, progress */
9238
+ /** @description provider, embedUrl, videoExternalId, startTimeSeconds, durationSeconds, progress e `ambient` (mídia do Ambient Glow — spriteUrlTemplate com placeholder `{n}`, thumbnailUrl e metadados da grade de seek; null quando o provider não é panda) */
9239
9239
  200: {
9240
9240
  headers: {
9241
9241
  [name: string]: unknown;
@@ -11411,6 +11411,62 @@ export interface paths {
11411
11411
  };
11412
11412
  trace?: never;
11413
11413
  };
11414
+ "/quiz-questions/{id}/generate-explanations": {
11415
+ parameters: {
11416
+ query?: never;
11417
+ header?: never;
11418
+ path?: never;
11419
+ cookie?: never;
11420
+ };
11421
+ get?: never;
11422
+ put?: never;
11423
+ /**
11424
+ * Generate answer explanations with AI
11425
+ * @description Preenche via IA a explicação de cada alternativa de uma pergunta que já existe — o backfill dos quizzes criados antes da feature. Sobrescreve as explicações existentes; o backoffice confirma antes de chamar.
11426
+ */
11427
+ post: {
11428
+ parameters: {
11429
+ query?: never;
11430
+ header?: never;
11431
+ path: {
11432
+ id: string;
11433
+ };
11434
+ cookie?: never;
11435
+ };
11436
+ requestBody?: {
11437
+ content: {
11438
+ "application/json": {
11439
+ /** @description Modelo OpenRouter a usar. Omitido, usa o padrão do servidor. */
11440
+ model?: string;
11441
+ };
11442
+ };
11443
+ };
11444
+ responses: {
11445
+ /** @description Pergunta com as alternativas atualizadas */
11446
+ 200: {
11447
+ headers: {
11448
+ [name: string]: unknown;
11449
+ };
11450
+ content: {
11451
+ "application/json": {
11452
+ /** @example success */
11453
+ status?: string;
11454
+ data?: components["schemas"]["QuizQuestion"];
11455
+ };
11456
+ };
11457
+ };
11458
+ 400: components["responses"]["BadRequest"];
11459
+ 401: components["responses"]["Unauthorized"];
11460
+ 404: components["responses"]["NotFound"];
11461
+ 500: components["responses"]["ServerError"];
11462
+ };
11463
+ };
11464
+ delete?: never;
11465
+ options?: never;
11466
+ head?: never;
11467
+ patch?: never;
11468
+ trace?: never;
11469
+ };
11414
11470
  "/quiz-questions/bulk": {
11415
11471
  parameters: {
11416
11472
  query?: never;
@@ -11444,6 +11500,8 @@ export interface paths {
11444
11500
  options?: {
11445
11501
  text?: string;
11446
11502
  is_correct?: boolean;
11503
+ /** @description Resumo revelado ao aluno ao confirmar a resposta. */
11504
+ explanation?: string;
11447
11505
  }[];
11448
11506
  }[];
11449
11507
  };
@@ -11915,6 +11973,8 @@ export interface paths {
11915
11973
  options?: {
11916
11974
  text?: string;
11917
11975
  is_correct?: boolean;
11976
+ /** @description Resumo revelado ao aluno ao confirmar a resposta. String vazia quando a IA não produziu. */
11977
+ explanation?: string;
11918
11978
  }[];
11919
11979
  }[];
11920
11980
  };
@@ -13819,6 +13879,407 @@ export interface paths {
13819
13879
  };
13820
13880
  trace?: never;
13821
13881
  };
13882
+ "/studio/state": {
13883
+ parameters: {
13884
+ query?: never;
13885
+ header?: never;
13886
+ path?: never;
13887
+ cookie?: never;
13888
+ };
13889
+ /** Estado do Estúdio (publicado + MEUS rascunhos mesclados) */
13890
+ get: {
13891
+ parameters: {
13892
+ query?: {
13893
+ /** @description Escola do contexto (hero da escola + preview) */
13894
+ institutionId?: string;
13895
+ };
13896
+ header?: never;
13897
+ path?: never;
13898
+ cookie?: never;
13899
+ };
13900
+ requestBody?: never;
13901
+ responses: {
13902
+ /** @description hero{global,institution,myDrafts} + playlists[{id,draft,items,meta{state,hasMyDraft,stale,othersDrafts}}] + layout{order,hasMyDraft} + myDraftCount */
13903
+ 200: {
13904
+ headers: {
13905
+ [name: string]: unknown;
13906
+ };
13907
+ content?: never;
13908
+ };
13909
+ /** @description Não é staff */
13910
+ 403: {
13911
+ headers: {
13912
+ [name: string]: unknown;
13913
+ };
13914
+ content?: never;
13915
+ };
13916
+ };
13917
+ };
13918
+ put?: never;
13919
+ post?: never;
13920
+ delete?: never;
13921
+ options?: never;
13922
+ head?: never;
13923
+ patch?: never;
13924
+ trace?: never;
13925
+ };
13926
+ "/studio/drafts/playlist/{id}": {
13927
+ parameters: {
13928
+ query?: never;
13929
+ header?: never;
13930
+ path?: never;
13931
+ cookie?: never;
13932
+ };
13933
+ get?: never;
13934
+ /** Upsert do MEU rascunho de uma playlist (id pode ser de playlist nova — isNew) */
13935
+ put: {
13936
+ parameters: {
13937
+ query?: never;
13938
+ header?: never;
13939
+ path: {
13940
+ id: string;
13941
+ };
13942
+ cookie?: never;
13943
+ };
13944
+ requestBody: {
13945
+ content: {
13946
+ "application/json": {
13947
+ /** @enum {string} */
13948
+ op?: "upsert" | "delete";
13949
+ isNew?: boolean;
13950
+ playlist?: {
13951
+ title?: string;
13952
+ subtitle?: string | null;
13953
+ /** @enum {string} */
13954
+ status?: "draft" | "published";
13955
+ /** @enum {string} */
13956
+ source?: "curated" | "continue_watching" | "trending" | "watchlist" | "recent" | "continue_playlist";
13957
+ /** @enum {string} */
13958
+ variant?: "common" | "featured";
13959
+ /** @enum {string} */
13960
+ cardOrientation?: "horizontal" | "vertical" | "square" | "fullImage";
13961
+ itemsPerViewDesktop?: number;
13962
+ itemsPerViewMobile?: number;
13963
+ autoplay?: boolean;
13964
+ isGlobal?: boolean;
13965
+ };
13966
+ targets?: {
13967
+ institutionId?: string;
13968
+ organizationId?: string;
13969
+ }[];
13970
+ groupIds?: string[];
13971
+ /** @description ordem do array = position */
13972
+ items?: {
13973
+ courseId?: string;
13974
+ courseModuleId?: string;
13975
+ courseModuleLessonId?: string;
13976
+ }[];
13977
+ };
13978
+ };
13979
+ };
13980
+ responses: {
13981
+ /** @description Rascunho salvo (não altera o publicado) */
13982
+ 200: {
13983
+ headers: {
13984
+ [name: string]: unknown;
13985
+ };
13986
+ content?: never;
13987
+ };
13988
+ };
13989
+ };
13990
+ post?: never;
13991
+ delete?: never;
13992
+ options?: never;
13993
+ head?: never;
13994
+ patch?: never;
13995
+ trace?: never;
13996
+ };
13997
+ "/studio/drafts/hero": {
13998
+ parameters: {
13999
+ query?: never;
14000
+ header?: never;
14001
+ path?: never;
14002
+ cookie?: never;
14003
+ };
14004
+ get?: never;
14005
+ /** Upsert do MEU rascunho do hero (institutionId no body; ausente = global) */
14006
+ put: {
14007
+ parameters: {
14008
+ query?: never;
14009
+ header?: never;
14010
+ path?: never;
14011
+ cookie?: never;
14012
+ };
14013
+ requestBody: {
14014
+ content: {
14015
+ "application/json": {
14016
+ /** Format: uuid */
14017
+ institutionId?: string | null;
14018
+ /** @enum {string} */
14019
+ op?: "upsert" | "delete";
14020
+ hero?: {
14021
+ eyebrow?: string | null;
14022
+ title?: string;
14023
+ subtitle?: string | null;
14024
+ ctaLabel?: string | null;
14025
+ ctaUrl?: string | null;
14026
+ /** @enum {string} */
14027
+ mediaType?: "gradient" | "image" | "video";
14028
+ mediaUrl?: string | null;
14029
+ mediaLoop?: boolean;
14030
+ };
14031
+ };
14032
+ };
14033
+ };
14034
+ responses: {
14035
+ /** @description Rascunho salvo */
14036
+ 200: {
14037
+ headers: {
14038
+ [name: string]: unknown;
14039
+ };
14040
+ content?: never;
14041
+ };
14042
+ };
14043
+ };
14044
+ post?: never;
14045
+ delete?: never;
14046
+ options?: never;
14047
+ head?: never;
14048
+ patch?: never;
14049
+ trace?: never;
14050
+ };
14051
+ "/studio/drafts/layout": {
14052
+ parameters: {
14053
+ query?: never;
14054
+ header?: never;
14055
+ path?: never;
14056
+ cookie?: never;
14057
+ };
14058
+ get?: never;
14059
+ /** Upsert do MEU rascunho de ordem das rails (lista completa de ids) */
14060
+ put: {
14061
+ parameters: {
14062
+ query?: never;
14063
+ header?: never;
14064
+ path?: never;
14065
+ cookie?: never;
14066
+ };
14067
+ requestBody: {
14068
+ content: {
14069
+ "application/json": {
14070
+ order?: string[];
14071
+ };
14072
+ };
14073
+ };
14074
+ responses: {
14075
+ /** @description Rascunho salvo */
14076
+ 200: {
14077
+ headers: {
14078
+ [name: string]: unknown;
14079
+ };
14080
+ content?: never;
14081
+ };
14082
+ };
14083
+ };
14084
+ post?: never;
14085
+ delete?: never;
14086
+ options?: never;
14087
+ head?: never;
14088
+ patch?: never;
14089
+ trace?: never;
14090
+ };
14091
+ "/studio/drafts/{entityType}/{entityId}": {
14092
+ parameters: {
14093
+ query?: never;
14094
+ header?: never;
14095
+ path?: never;
14096
+ cookie?: never;
14097
+ };
14098
+ get?: never;
14099
+ put?: never;
14100
+ post?: never;
14101
+ /** Desfaz UM rascunho meu (playlist/hero por entidade) */
14102
+ delete: {
14103
+ parameters: {
14104
+ query?: never;
14105
+ header?: never;
14106
+ path: {
14107
+ entityType: "playlist" | "hero" | "layout";
14108
+ entityId: string;
14109
+ };
14110
+ cookie?: never;
14111
+ };
14112
+ requestBody?: never;
14113
+ responses: {
14114
+ /** @description { deleted: n } */
14115
+ 200: {
14116
+ headers: {
14117
+ [name: string]: unknown;
14118
+ };
14119
+ content?: never;
14120
+ };
14121
+ };
14122
+ };
14123
+ options?: never;
14124
+ head?: never;
14125
+ patch?: never;
14126
+ trace?: never;
14127
+ };
14128
+ "/studio/discard": {
14129
+ parameters: {
14130
+ query?: never;
14131
+ header?: never;
14132
+ path?: never;
14133
+ cookie?: never;
14134
+ };
14135
+ get?: never;
14136
+ put?: never;
14137
+ /** Descarta TODOS os meus rascunhos */
14138
+ post: {
14139
+ parameters: {
14140
+ query?: never;
14141
+ header?: never;
14142
+ path?: never;
14143
+ cookie?: never;
14144
+ };
14145
+ requestBody?: never;
14146
+ responses: {
14147
+ /** @description { discarded: n } */
14148
+ 200: {
14149
+ headers: {
14150
+ [name: string]: unknown;
14151
+ };
14152
+ content?: never;
14153
+ };
14154
+ };
14155
+ };
14156
+ delete?: never;
14157
+ options?: never;
14158
+ head?: never;
14159
+ patch?: never;
14160
+ trace?: never;
14161
+ };
14162
+ "/studio/publish": {
14163
+ parameters: {
14164
+ query?: never;
14165
+ header?: never;
14166
+ path?: never;
14167
+ cookie?: never;
14168
+ };
14169
+ get?: never;
14170
+ put?: never;
14171
+ /** Publica atomicamente os MEUS rascunhos (playlists+layout+heroes); nunca os de outro editor */
14172
+ post: {
14173
+ parameters: {
14174
+ query?: never;
14175
+ header?: never;
14176
+ path?: never;
14177
+ cookie?: never;
14178
+ };
14179
+ requestBody?: never;
14180
+ responses: {
14181
+ /** @description { applied{...}, warnings[] (staleness/missing) } */
14182
+ 200: {
14183
+ headers: {
14184
+ [name: string]: unknown;
14185
+ };
14186
+ content?: never;
14187
+ };
14188
+ /** @description Nenhuma alteração para publicar */
14189
+ 409: {
14190
+ headers: {
14191
+ [name: string]: unknown;
14192
+ };
14193
+ content?: never;
14194
+ };
14195
+ /** @description Falha (ex. conteúdo excluído) — nada foi aplicado */
14196
+ 422: {
14197
+ headers: {
14198
+ [name: string]: unknown;
14199
+ };
14200
+ content?: never;
14201
+ };
14202
+ };
14203
+ };
14204
+ delete?: never;
14205
+ options?: never;
14206
+ head?: never;
14207
+ patch?: never;
14208
+ trace?: never;
14209
+ };
14210
+ "/studio/catalog": {
14211
+ parameters: {
14212
+ query?: never;
14213
+ header?: never;
14214
+ path?: never;
14215
+ cookie?: never;
14216
+ };
14217
+ /** Busca de conteúdo p/ o picker (cursos/módulos/aulas, com flag published) */
14218
+ get: {
14219
+ parameters: {
14220
+ query?: {
14221
+ q?: string;
14222
+ kind?: "course" | "module" | "lesson";
14223
+ limit?: number;
14224
+ offset?: number;
14225
+ };
14226
+ header?: never;
14227
+ path?: never;
14228
+ cookie?: never;
14229
+ };
14230
+ requestBody?: never;
14231
+ responses: {
14232
+ /** @description { counts{courses,modules,lessons}, results[{kind,id,courseId,title,subtitle,coverUrl,published}] } */
14233
+ 200: {
14234
+ headers: {
14235
+ [name: string]: unknown;
14236
+ };
14237
+ content?: never;
14238
+ };
14239
+ };
14240
+ };
14241
+ put?: never;
14242
+ post?: never;
14243
+ delete?: never;
14244
+ options?: never;
14245
+ head?: never;
14246
+ patch?: never;
14247
+ trace?: never;
14248
+ };
14249
+ "/studio/audiences": {
14250
+ parameters: {
14251
+ query?: never;
14252
+ header?: never;
14253
+ path?: never;
14254
+ cookie?: never;
14255
+ };
14256
+ /** Chips de escopo do drawer (escolas, organizações e perfis) */
14257
+ get: {
14258
+ parameters: {
14259
+ query?: never;
14260
+ header?: never;
14261
+ path?: never;
14262
+ cookie?: never;
14263
+ };
14264
+ requestBody?: never;
14265
+ responses: {
14266
+ /** @description { institutions[], organizations[], groups[] } */
14267
+ 200: {
14268
+ headers: {
14269
+ [name: string]: unknown;
14270
+ };
14271
+ content?: never;
14272
+ };
14273
+ };
14274
+ };
14275
+ put?: never;
14276
+ post?: never;
14277
+ delete?: never;
14278
+ options?: never;
14279
+ head?: never;
14280
+ patch?: never;
14281
+ trace?: never;
14282
+ };
13822
14283
  "/submissions": {
13823
14284
  parameters: {
13824
14285
  query?: never;
@@ -16459,6 +16920,92 @@ export interface paths {
16459
16920
  patch?: never;
16460
16921
  trace?: never;
16461
16922
  };
16923
+ "/users/{id}/courses/{courseId}/lessons": {
16924
+ parameters: {
16925
+ query?: never;
16926
+ header?: never;
16927
+ path?: never;
16928
+ cookie?: never;
16929
+ };
16930
+ /**
16931
+ * Drill-down por aula de um curso para um aluno (drawer do backoffice)
16932
+ * @description Lista as aulas publicadas do curso na ordem de módulo/aula, com o progresso consolidado (user_lesson_progress_v2) e o agregado de sessões por aula. watchedRanges são os intervalos do vídeo efetivamente assistidos (merged), para o heatmap de cobertura. Só leitura — nenhuma migration.
16933
+ */
16934
+ get: {
16935
+ parameters: {
16936
+ query?: never;
16937
+ header?: never;
16938
+ path: {
16939
+ /** @description id do aluno */
16940
+ id: string;
16941
+ courseId: string;
16942
+ };
16943
+ cookie?: never;
16944
+ };
16945
+ requestBody?: never;
16946
+ responses: {
16947
+ /** @description Aulas do curso com progresso do aluno */
16948
+ 200: {
16949
+ headers: {
16950
+ [name: string]: unknown;
16951
+ };
16952
+ content: {
16953
+ "application/json": {
16954
+ /** @example success */
16955
+ status?: string;
16956
+ data?: {
16957
+ /** Format: uuid */
16958
+ courseId?: string;
16959
+ courseTitle?: string;
16960
+ totalLessons?: number;
16961
+ completedLessons?: number;
16962
+ hoursWatched?: number;
16963
+ avgPlaybackRate?: number | null;
16964
+ modules?: {
16965
+ /** Format: uuid */
16966
+ moduleId?: string;
16967
+ title?: string;
16968
+ position?: number;
16969
+ lessons?: {
16970
+ /** Format: uuid */
16971
+ lessonId?: string;
16972
+ title?: string;
16973
+ position?: number;
16974
+ durationSeconds?: number;
16975
+ completed?: boolean;
16976
+ /** Format: date-time */
16977
+ completedAt?: string | null;
16978
+ positionSeconds?: number;
16979
+ watchedSeconds?: number;
16980
+ watchedPct?: number;
16981
+ /** Format: date-time */
16982
+ lastActivityAt?: string | null;
16983
+ sessions?: number;
16984
+ ranges?: number[][];
16985
+ }[];
16986
+ }[];
16987
+ };
16988
+ };
16989
+ };
16990
+ };
16991
+ /** @description Curso não encontrado */
16992
+ 404: {
16993
+ headers: {
16994
+ [name: string]: unknown;
16995
+ };
16996
+ content?: never;
16997
+ };
16998
+ 500: components["responses"]["ServerError"];
16999
+ };
17000
+ };
17001
+ put?: never;
17002
+ post?: never;
17003
+ delete?: never;
17004
+ options?: never;
17005
+ head?: never;
17006
+ patch?: never;
17007
+ trace?: never;
17008
+ };
16462
17009
  "/vitrine/home": {
16463
17010
  parameters: {
16464
17011
  query?: never;
@@ -16705,7 +17252,12 @@ export interface components {
16705
17252
  * Format: email
16706
17253
  * @example john.doe@example.com
16707
17254
  */
16708
- email: string;
17255
+ email: string | null;
17256
+ /**
17257
+ * @description Login do usuário (gerado quando não informado)
17258
+ * @example johndoe
17259
+ */
17260
+ username?: string;
16709
17261
  /** @example +5511999999999 */
16710
17262
  phone?: string | null;
16711
17263
  /** @example 12345678901 */
@@ -16905,9 +17457,15 @@ export interface components {
16905
17457
  lastName: string;
16906
17458
  /**
16907
17459
  * Format: email
17460
+ * @description Optional. When omitted, the user logs in with the generated username
16908
17461
  * @example john.doe@example.com
16909
17462
  */
16910
- email: string;
17463
+ email?: string | null;
17464
+ /**
17465
+ * @description Optional. Auto-generated from firstName + lastName when omitted
17466
+ * @example johndoe
17467
+ */
17468
+ username?: string | null;
16911
17469
  /**
16912
17470
  * @description Password for the user's Keycloak account
16913
17471
  * @example SecurePassword123!
@@ -16916,7 +17474,7 @@ export interface components {
16916
17474
  /** @example +5511999999999 */
16917
17475
  phone?: string | null;
16918
17476
  /** @example 12345678901 */
16919
- document: string;
17477
+ document?: string | null;
16920
17478
  /**
16921
17479
  * @example male
16922
17480
  * @enum {string|null}
@@ -16939,6 +17497,18 @@ export interface components {
16939
17497
  * @example 550e8400-e29b-41d4-a716-446655440001
16940
17498
  */
16941
17499
  institutionId?: string | null;
17500
+ /**
17501
+ * Format: uuid
17502
+ * @description Optional classroom ID to enroll the user (requires groupId)
17503
+ * @example 550e8400-e29b-41d4-a716-446655440003
17504
+ */
17505
+ institutionClassroomId?: string | null;
17506
+ /**
17507
+ * Format: uuid
17508
+ * @description Optional ID that groups this request with other creation requests
17509
+ * @example 550e8400-e29b-41d4-a716-446655440004
17510
+ */
17511
+ userCreationRequestsGroupId?: string | null;
16942
17512
  /**
16943
17513
  * Format: uuid
16944
17514
  * @description Seat code ID to register the user
@@ -17068,7 +17638,12 @@ export interface components {
17068
17638
  * Format: email
17069
17639
  * @example john.doe@example.com
17070
17640
  */
17071
- email?: string;
17641
+ email?: string | null;
17642
+ /**
17643
+ * @description Login do usuário (gerado quando não informado)
17644
+ * @example johndoe
17645
+ */
17646
+ username?: string;
17072
17647
  /** @example +5511999999999 */
17073
17648
  phone?: string | null;
17074
17649
  /** @example 12345678901 */
@@ -19258,9 +19833,11 @@ export interface components {
19258
19833
  requestId?: string;
19259
19834
  /**
19260
19835
  * Format: email
19261
- * @description Email of the user being created
19836
+ * @description Email of the user being created (optional)
19262
19837
  */
19263
- email?: string;
19838
+ email?: string | null;
19839
+ /** @description Login of the created user, generated by the worker when not provided (available after processing) */
19840
+ username?: string | null;
19264
19841
  /**
19265
19842
  * @description Current status of the creation request
19266
19843
  * @enum {string}
@@ -19771,6 +20348,11 @@ export interface components {
19771
20348
  answer?: string;
19772
20349
  /** @example true */
19773
20350
  isCorrect?: boolean;
20351
+ /**
20352
+ * @description Resumo revelado ao aluno ao confirmar a resposta. Na alternativa correta explica o conceito; nas incorretas, o erro que a opção representa. NULL nas perguntas anteriores à feature.
20353
+ * @example O 'S' significa 'Secure' e indica que o protocolo utiliza SSL/TLS.
20354
+ */
20355
+ explanation?: string | null;
19774
20356
  /** Format: date-time */
19775
20357
  createdAt?: string;
19776
20358
  /** Format: date-time */
@@ -19783,10 +20365,14 @@ export interface components {
19783
20365
  answer: string;
19784
20366
  /** @example true */
19785
20367
  isCorrect: boolean;
20368
+ /** @description Resumo revelado ao aluno ao confirmar a resposta. String vazia limpa. */
20369
+ explanation?: string;
19786
20370
  };
19787
20371
  UpdateQuizQuestionAnswerDto: {
19788
20372
  answer?: string;
19789
20373
  isCorrect?: boolean;
20374
+ /** @description Resumo revelado ao aluno ao confirmar a resposta. String vazia limpa. */
20375
+ explanation?: string;
19790
20376
  };
19791
20377
  QuizAttempt: {
19792
20378
  /** Format: uuid */