feat: add LTI 1.3 Tool Consumer support with database migrations and API endpoints

- Implemented database migrations for lti_external_tools and lti_grade_passback_events tables in both cms-service and lms-service.
- Created API handlers for managing LTI tools including listing, creating, updating, and deleting tools.
- Added functionality for LTI grade passback with validation and signature verification.
- Developed frontend components for LTI tool management and display in course editor.

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
NurfogandCopilot committed 2026-04-27 12:51:13 -04:00
1 parent f6a3f6aedf
commit fef731df72
16 files changed
+965 -12

No files matched your search

+1 -1
View File
@@ -1 +1 @@
{"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
{"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