Refactor code structure for improved readability and maintainability
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
1 parent
fef731df72
commit
8d606ddefc
2 files changed
+5
-5
No files matched your search
+4
-4
@@ -111,13 +111,13 @@
|
||||
- [x] **OpenCCB Market**: Galería en Studio (`/admin/plugins`) con toggle habilitado/deshabilitado, registro de nuevos plugins y tarjetas con estado visual.
|
||||
|
||||
### Fase 36: LTI 1.3 Tool Consumer 🔗
|
||||
- [x] **Consumo de herramientas externas**: MVP implementado con `lti_external_tools` por curso, gestión en Studio (`/courses/[id]/lti-tools`) y bloque embebido `lti-tool` en Experience vía iframe sandbox.
|
||||
- [x] **Delegación de Calificaciones**: MVP implementado con endpoint público `POST /lti/tools/{tool_id}/grade-passback`, validación por `x-openccb-lti-secret`, registro de eventos y sincronización a `user_grades`.
|
||||
- [x] **Consumo de herramientas externas**: MVP implementado con `lti_external_tools` por curso, gestión en Studio (`/courses/[id]/lti-tools`), selector visual en editor de lecciones y bloque embebido `lti-tool` en Experience vía iframe sandbox.
|
||||
- [x] **Delegación de Calificaciones**: MVP implementado con endpoint público `POST /lti/tools/{tool_id}/grade-passback`, firma HMAC-SHA256 (`x-openccb-lti-signature` + `x-openccb-lti-timestamp`), registro de eventos y sincronización a `user_grades`.
|
||||
|
||||
---
|
||||
|
||||
**Estado Actual**: Plataforma madura con IA generativa integrada, arquitectura Premium Single-Tenant, búsqueda semántica y monetización operativa.
|
||||
**Próximas Prioridades**:
|
||||
1. Endurecer seguridad de **passback LTI**: rotación de secretos, firma HMAC y/o OAuth2 AGS en lugar de shared secret plano.
|
||||
2. Añadir selector de **herramienta LTI** en editor de lecciones para generar bloques `lti-tool` sin JSON manual.
|
||||
1. Migrar passback LTI de HMAC custom a **OAuth2 AGS** (estándar IMS) manteniendo compatibilidad transitoria.
|
||||
2. Añadir **rotación/revocación de secretos** y auditoría de intentos fallidos de passback.
|
||||
3. Evolucionar **Pizarras Compartidas** de polling a WebSocket/SSE tras validar carga en producción.
|
||||
@@ -1 +1 @@
|
||||
{"fileNames":["../experience/node_modules/typescript/lib/lib.es5.d.ts","../experience/node_modules/typescript/lib/lib.es2015.d.ts","../experience/node_modules/typescript/lib/lib.es2016.d.ts","../experience/node_modules/typescript/lib/lib.es2017.d.ts","../experience/node_modules/typescript/lib/lib.es2018.d.ts","../experience/node_modules/typescript/lib/lib.es2019.d.ts","../experience/node_modules/typescript/lib/lib.es2020.d.ts","../experience/node_modules/typescript/lib/lib.es2021.d.ts","../experience/node_modules/typescript/lib/lib.es2022.d.ts","../experience/node_modules/typescript/lib/lib.es2023.d.ts","../experience/node_modules/typescript/lib/lib.es2024.d.ts","../experience/node_modules/typescript/lib/lib.esnext.d.ts","../experience/node_modules/typescript/lib/lib.dom.d.ts","../experience/node_modules/typescript/lib/lib.dom.iterable.d.ts","../experience/node_modules/typescript/lib/lib.es2015.core.d.ts","../experience/node_modules/typescript/lib/lib.es2015.collection.d.ts","../experience/node_modules/typescript/lib/lib.es2015.generator.d.ts","../experience/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../experience/node_modules/typescript/lib/lib.es2015.promise.d.ts","../experience/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../experience/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../experience/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../experience/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../experience/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../experience/node_modules/typescript/lib/lib.es2016.intl.d.ts","../experience/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../experience/node_modules/typescript/lib/lib.es2017.date.d.ts","../experience/node_modules/typescript/lib/lib.es2017.object.d.ts","../experience/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../experience/node_modules/typescript/lib/lib.es2017.string.d.ts","../experience/node_modules/typescript/lib/lib.es2017.intl.d.ts","../experience/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../experience/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../experience/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../experience/node_modules/typescript/lib/lib.es2018.intl.d.ts","../experience/node_modules/typescript/lib/lib.es2018.promise.d.ts","../experience/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../experience/node_modules/typescript/lib/lib.es2019.array.d.ts","../experience/node_modules/typescript/lib/lib.es2019.object.d.ts","../experience/node_modules/typescript/lib/lib.es2019.string.d.ts","../experience/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../experience/node_modules/typescript/lib/lib.es2019.intl.d.ts","../experience/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../experience/node_modules/typescript/lib/lib.es2020.date.d.ts","../experience/node_modules/typescript/lib/lib.es2020.promise.d.ts","../experience/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../experience/node_modules/typescript/lib/lib.es2020.string.d.ts","../experience/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../experience/node_modules/typescript/lib/lib.es2020.intl.d.ts","../experience/node_modules/typescript/lib/lib.es2020.number.d.ts","../experience/node_modules/typescript/lib/lib.es2021.promise.d.ts","../experience/node_modules/typescript/lib/lib.es2021.string.d.ts","../experience/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../experience/node_modules/typescript/lib/lib.es2021.intl.d.ts","../experience/node_modules/typescript/lib/lib.es2022.array.d.ts","../experience/node_modules/typescript/lib/lib.es2022.error.d.ts","../experience/node_modules/typescript/lib/lib.es2022.intl.d.ts","../experience/node_modules/typescript/lib/lib.es2022.object.d.ts","../experience/node_modules/typescript/lib/lib.es2022.string.d.ts","../experience/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../experience/node_modules/typescript/lib/lib.es2023.array.d.ts","../experience/node_modules/typescript/lib/lib.es2023.collection.d.ts","../experience/node_modules/typescript/lib/lib.es2023.intl.d.ts","../experience/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../experience/node_modules/typescript/lib/lib.es2024.collection.d.ts","../experience/node_modules/typescript/lib/lib.es2024.object.d.ts","../experience/node_modules/typescript/lib/lib.es2024.promise.d.ts","../experience/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../experience/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../experience/node_modules/typescript/lib/lib.es2024.string.d.ts","../experience/node_modules/typescript/lib/lib.esnext.array.d.ts","../experience/node_modules/typescript/lib/lib.esnext.collection.d.ts","../experience/node_modules/typescript/lib/lib.esnext.intl.d.ts","../experience/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../experience/node_modules/typescript/lib/lib.eLine truncated
|
||||
{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.Line truncated
|
||||
Reference in new issue
Block a user