@learnorama/mozaik-sdk 0.12.3-staging.46.1 → 0.13.0-staging.48.1
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.
- package/README.md +25 -0
- package/dist/api/account.d.ts +1 -1
- package/dist/api/account.js.map +1 -1
- package/dist/api/admin-catalogue.d.ts +1 -1
- package/dist/api/admin-catalogue.js.map +1 -1
- package/dist/api/admin-consumption.d.ts +1 -1
- package/dist/api/admin-consumption.js.map +1 -1
- package/dist/api/admin-contracts.d.ts +1 -1
- package/dist/api/admin-contracts.js.map +1 -1
- package/dist/api/admin-desk.d.ts +1 -1
- package/dist/api/admin-desk.js.map +1 -1
- package/dist/api/admin-licenses.d.ts +1 -1
- package/dist/api/admin-licenses.js.map +1 -1
- package/dist/api/admin-partner-selections.d.ts +1 -1
- package/dist/api/admin-partner-selections.js.map +1 -1
- package/dist/api/admin-patrons.d.ts +1 -1
- package/dist/api/admin-patrons.js.map +1 -1
- package/dist/api/admin-reviews.d.ts +1 -1
- package/dist/api/admin-reviews.js.map +1 -1
- package/dist/api/admin-roles.d.ts +1 -1
- package/dist/api/admin-roles.js.map +1 -1
- package/dist/api/admin-support.d.ts +1 -1
- package/dist/api/admin-support.js.map +1 -1
- package/dist/api/admin-tenants.d.ts +1 -1
- package/dist/api/admin-tenants.js.map +1 -1
- package/dist/api/admin-tutoring.d.ts +1 -1
- package/dist/api/admin-tutoring.js.map +1 -1
- package/dist/api/auth.d.ts +1 -1
- package/dist/api/auth.js.map +1 -1
- package/dist/api/biblio-billing-webhooks.d.ts +18 -0
- package/dist/api/biblio-billing-webhooks.js +62 -0
- package/dist/api/biblio-billing-webhooks.js.map +1 -0
- package/dist/api/biblio-billing.d.ts +192 -0
- package/dist/api/biblio-billing.js +645 -0
- package/dist/api/biblio-billing.js.map +1 -0
- package/dist/api/biblio-catalogue.d.ts +1 -1
- package/dist/api/biblio-catalogue.js.map +1 -1
- package/dist/api/biblio-home.d.ts +1 -1
- package/dist/api/biblio-home.js.map +1 -1
- package/dist/api/biblio-learning-author-profiles.d.ts +108 -0
- package/dist/api/biblio-learning-author-profiles.js +331 -0
- package/dist/api/biblio-learning-author-profiles.js.map +1 -0
- package/dist/api/biblio-learning-authoring.d.ts +168 -0
- package/dist/api/biblio-learning-authoring.js +586 -0
- package/dist/api/biblio-learning-authoring.js.map +1 -0
- package/dist/api/biblio-learning-editorial.d.ts +54 -0
- package/dist/api/biblio-learning-editorial.js +149 -0
- package/dist/api/biblio-learning-editorial.js.map +1 -0
- package/dist/api/biblio-learning-feedback.d.ts +60 -0
- package/dist/api/biblio-learning-feedback.js +180 -0
- package/dist/api/biblio-learning-feedback.js.map +1 -0
- package/dist/api/biblio-learning-finance.d.ts +186 -0
- package/dist/api/biblio-learning-finance.js +622 -0
- package/dist/api/biblio-learning-finance.js.map +1 -0
- package/dist/api/biblio-learning-integrations.d.ts +60 -0
- package/dist/api/biblio-learning-integrations.js +215 -0
- package/dist/api/biblio-learning-integrations.js.map +1 -0
- package/dist/api/biblio-learning-membership.d.ts +24 -0
- package/dist/api/biblio-learning-membership.js +69 -0
- package/dist/api/biblio-learning-membership.js.map +1 -0
- package/dist/api/biblio-learning.d.ts +222 -0
- package/dist/api/biblio-learning.js +697 -0
- package/dist/api/biblio-learning.js.map +1 -0
- package/dist/api/biblio-library.d.ts +1 -1
- package/dist/api/biblio-library.js.map +1 -1
- package/dist/api/biblio-nextory.d.ts +1 -1
- package/dist/api/biblio-nextory.js.map +1 -1
- package/dist/api/biblio-press.d.ts +1 -1
- package/dist/api/biblio-press.js.map +1 -1
- package/dist/api/biblio-search.d.ts +1 -1
- package/dist/api/biblio-search.js.map +1 -1
- package/dist/api/biblio-telemetry.d.ts +1 -1
- package/dist/api/biblio-telemetry.js.map +1 -1
- package/dist/api/consumption.d.ts +1 -1
- package/dist/api/consumption.js.map +1 -1
- package/dist/api/cvs-app.d.ts +1 -1
- package/dist/api/cvs-app.js.map +1 -1
- package/dist/api/cvs-documents.d.ts +1 -1
- package/dist/api/cvs-documents.js.map +1 -1
- package/dist/api/cvs-favorites.d.ts +1 -1
- package/dist/api/cvs-favorites.js.map +1 -1
- package/dist/api/cvs-ils.d.ts +1 -1
- package/dist/api/cvs-ils.js.map +1 -1
- package/dist/api/cvs-loans.d.ts +1 -1
- package/dist/api/cvs-loans.js.map +1 -1
- package/dist/api/cvs-payments.d.ts +1 -1
- package/dist/api/cvs-payments.js.map +1 -1
- package/dist/api/cvs-streaming.d.ts +1 -1
- package/dist/api/cvs-streaming.js.map +1 -1
- package/dist/api/index.d.ts +11 -1
- package/dist/api/index.js +11 -1
- package/dist/api/partner-catalogue.d.ts +1 -1
- package/dist/api/partner-catalogue.js.map +1 -1
- package/dist/api/partner-reader.d.ts +1 -1
- package/dist/api/partner-reader.js.map +1 -1
- package/dist/api/profiles.d.ts +1 -1
- package/dist/api/profiles.js.map +1 -1
- package/dist/api/search.d.ts +1 -1
- package/dist/api/search.js.map +1 -1
- package/dist/api/tutoring-catalogue.d.ts +1 -1
- package/dist/api/tutoring-catalogue.js.map +1 -1
- package/dist/api/tutoring-chat.d.ts +1 -1
- package/dist/api/tutoring-chat.js.map +1 -1
- package/dist/api/tutoring-dispatch.d.ts +1 -1
- package/dist/api/tutoring-dispatch.js.map +1 -1
- package/dist/api/tutoring-practitioner.d.ts +1 -1
- package/dist/api/tutoring-practitioner.js.map +1 -1
- package/dist/api/tutoring-requests.d.ts +1 -1
- package/dist/api/tutoring-requests.js.map +1 -1
- package/dist/chunks/client2.d.ts +1 -1
- package/dist/chunks/connection.d.ts +1 -1
- package/dist/chunks/index.d.ts +10062 -3487
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +2 -2
- package/dist/models.js +329 -1
- package/dist/models.js.map +1 -1
- package/dist/react/account.d.ts +1 -1
- package/dist/react/account.js +1 -1
- package/dist/react/account.js.map +1 -1
- package/dist/react/admin-catalogue.d.ts +1 -1
- package/dist/react/admin-catalogue.js +1 -1
- package/dist/react/admin-catalogue.js.map +1 -1
- package/dist/react/admin-consumption.d.ts +1 -1
- package/dist/react/admin-consumption.js +1 -1
- package/dist/react/admin-consumption.js.map +1 -1
- package/dist/react/admin-contracts.d.ts +1 -1
- package/dist/react/admin-contracts.js +1 -1
- package/dist/react/admin-contracts.js.map +1 -1
- package/dist/react/admin-desk.d.ts +1 -1
- package/dist/react/admin-desk.js +1 -1
- package/dist/react/admin-desk.js.map +1 -1
- package/dist/react/admin-licenses.d.ts +1 -1
- package/dist/react/admin-licenses.js +1 -1
- package/dist/react/admin-licenses.js.map +1 -1
- package/dist/react/admin-partner-selections.d.ts +1 -1
- package/dist/react/admin-partner-selections.js +1 -1
- package/dist/react/admin-partner-selections.js.map +1 -1
- package/dist/react/admin-patrons.d.ts +1 -1
- package/dist/react/admin-patrons.js +1 -1
- package/dist/react/admin-patrons.js.map +1 -1
- package/dist/react/admin-reviews.d.ts +1 -1
- package/dist/react/admin-reviews.js +1 -1
- package/dist/react/admin-reviews.js.map +1 -1
- package/dist/react/admin-roles.d.ts +1 -1
- package/dist/react/admin-roles.js +1 -1
- package/dist/react/admin-roles.js.map +1 -1
- package/dist/react/admin-support.d.ts +1 -1
- package/dist/react/admin-support.js +1 -1
- package/dist/react/admin-support.js.map +1 -1
- package/dist/react/admin-tenants.d.ts +1 -1
- package/dist/react/admin-tenants.js +1 -1
- package/dist/react/admin-tenants.js.map +1 -1
- package/dist/react/admin-tutoring.d.ts +1 -1
- package/dist/react/admin-tutoring.js +1 -1
- package/dist/react/admin-tutoring.js.map +1 -1
- package/dist/react/auth.d.ts +1 -1
- package/dist/react/auth.js +1 -1
- package/dist/react/auth.js.map +1 -1
- package/dist/react/biblio-billing-webhooks.d.ts +56 -0
- package/dist/react/biblio-billing-webhooks.js +126 -0
- package/dist/react/biblio-billing-webhooks.js.map +1 -0
- package/dist/react/biblio-billing.d.ts +876 -0
- package/dist/react/biblio-billing.js +1491 -0
- package/dist/react/biblio-billing.js.map +1 -0
- package/dist/react/biblio-catalogue.d.ts +1 -1
- package/dist/react/biblio-catalogue.js +1 -1
- package/dist/react/biblio-catalogue.js.map +1 -1
- package/dist/react/biblio-home.d.ts +1 -1
- package/dist/react/biblio-home.js +1 -1
- package/dist/react/biblio-home.js.map +1 -1
- package/dist/react/biblio-learning-author-profiles.d.ts +513 -0
- package/dist/react/biblio-learning-author-profiles.js +795 -0
- package/dist/react/biblio-learning-author-profiles.js.map +1 -0
- package/dist/react/biblio-learning-authoring.d.ts +745 -0
- package/dist/react/biblio-learning-authoring.js +1335 -0
- package/dist/react/biblio-learning-authoring.js.map +1 -0
- package/dist/react/biblio-learning-editorial.d.ts +264 -0
- package/dist/react/biblio-learning-editorial.js +371 -0
- package/dist/react/biblio-learning-editorial.js.map +1 -0
- package/dist/react/biblio-learning-feedback.d.ts +280 -0
- package/dist/react/biblio-learning-feedback.js +433 -0
- package/dist/react/biblio-learning-feedback.js.map +1 -0
- package/dist/react/biblio-learning-finance.d.ts +868 -0
- package/dist/react/biblio-learning-finance.js +1439 -0
- package/dist/react/biblio-learning-finance.js.map +1 -0
- package/dist/react/biblio-learning-integrations.d.ts +237 -0
- package/dist/react/biblio-learning-integrations.js +483 -0
- package/dist/react/biblio-learning-integrations.js.map +1 -0
- package/dist/react/biblio-learning-membership.d.ts +99 -0
- package/dist/react/biblio-learning-membership.js +165 -0
- package/dist/react/biblio-learning-membership.js.map +1 -0
- package/dist/react/biblio-learning.d.ts +1047 -0
- package/dist/react/biblio-learning.js +1667 -0
- package/dist/react/biblio-learning.js.map +1 -0
- package/dist/react/biblio-library.d.ts +1 -1
- package/dist/react/biblio-library.js +1 -1
- package/dist/react/biblio-library.js.map +1 -1
- package/dist/react/biblio-nextory.d.ts +1 -1
- package/dist/react/biblio-nextory.js +1 -1
- package/dist/react/biblio-nextory.js.map +1 -1
- package/dist/react/biblio-press.d.ts +1 -1
- package/dist/react/biblio-press.js +1 -1
- package/dist/react/biblio-press.js.map +1 -1
- package/dist/react/biblio-search.d.ts +1 -1
- package/dist/react/biblio-search.js +1 -1
- package/dist/react/biblio-search.js.map +1 -1
- package/dist/react/biblio-telemetry.d.ts +1 -1
- package/dist/react/biblio-telemetry.js +1 -1
- package/dist/react/biblio-telemetry.js.map +1 -1
- package/dist/react/chat.d.ts +1 -1
- package/dist/react/consumption.d.ts +1 -1
- package/dist/react/consumption.js +1 -1
- package/dist/react/consumption.js.map +1 -1
- package/dist/react/cvs-app.d.ts +1 -1
- package/dist/react/cvs-app.js +1 -1
- package/dist/react/cvs-app.js.map +1 -1
- package/dist/react/cvs-documents.d.ts +1 -1
- package/dist/react/cvs-documents.js +1 -1
- package/dist/react/cvs-documents.js.map +1 -1
- package/dist/react/cvs-favorites.d.ts +1 -1
- package/dist/react/cvs-favorites.js +1 -1
- package/dist/react/cvs-favorites.js.map +1 -1
- package/dist/react/cvs-ils.d.ts +1 -1
- package/dist/react/cvs-ils.js +1 -1
- package/dist/react/cvs-ils.js.map +1 -1
- package/dist/react/cvs-loans.d.ts +1 -1
- package/dist/react/cvs-loans.js +1 -1
- package/dist/react/cvs-loans.js.map +1 -1
- package/dist/react/cvs-payments.d.ts +1 -1
- package/dist/react/cvs-payments.js +1 -1
- package/dist/react/cvs-payments.js.map +1 -1
- package/dist/react/cvs-streaming.d.ts +1 -1
- package/dist/react/cvs-streaming.js +1 -1
- package/dist/react/cvs-streaming.js.map +1 -1
- package/dist/react/index.d.ts +11 -1
- package/dist/react/index.js +11 -1
- package/dist/react/partner-catalogue.d.ts +1 -1
- package/dist/react/partner-catalogue.js +1 -1
- package/dist/react/partner-catalogue.js.map +1 -1
- package/dist/react/partner-reader.d.ts +1 -1
- package/dist/react/partner-reader.js +1 -1
- package/dist/react/partner-reader.js.map +1 -1
- package/dist/react/profiles.d.ts +1 -1
- package/dist/react/profiles.js +1 -1
- package/dist/react/profiles.js.map +1 -1
- package/dist/react/search.d.ts +1 -1
- package/dist/react/search.js +1 -1
- package/dist/react/search.js.map +1 -1
- package/dist/react/tutoring-catalogue.d.ts +1 -1
- package/dist/react/tutoring-catalogue.js +1 -1
- package/dist/react/tutoring-catalogue.js.map +1 -1
- package/dist/react/tutoring-chat.d.ts +1 -1
- package/dist/react/tutoring-chat.js +1 -1
- package/dist/react/tutoring-chat.js.map +1 -1
- package/dist/react/tutoring-dispatch.d.ts +1 -1
- package/dist/react/tutoring-dispatch.js +1 -1
- package/dist/react/tutoring-dispatch.js.map +1 -1
- package/dist/react/tutoring-practitioner.d.ts +1 -1
- package/dist/react/tutoring-practitioner.js +1 -1
- package/dist/react/tutoring-practitioner.js.map +1 -1
- package/dist/react/tutoring-requests.d.ts +1 -1
- package/dist/react/tutoring-requests.js +1 -1
- package/dist/react/tutoring-requests.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"biblio-learning.js","names":[],"sources":["../../src/react/biblio-learning/biblio-learning.ts"],"sourcesContent":["/**\n * Generated by orval 🍺\n * Do not edit manually.\n * Mozaik backend\n * Four products behind one API — Biblio, Médiathèques, the partner catalogues (Nextory and YouScribe) and Prof Express. Authentication is Keycloak SSO only, once, for all of them: see the **auth** section below for the browser flow and the three failure modes.\n * OpenAPI spec version: 0.13.0\n */\nimport {\n useMutation,\n useQuery\n} from '@tanstack/react-query';\nimport type {\n DataTag,\n DefinedInitialDataOptions,\n DefinedUseQueryResult,\n MutationFunction,\n QueryClient,\n QueryFunction,\n QueryKey,\n UndefinedInitialDataOptions,\n UseMutationOptions,\n UseMutationResult,\n UseQueryOptions,\n UseQueryResult\n} from '@tanstack/react-query';\n\nimport type {\n CourseEditionUpgradeWrite,\n CourseEnrollmentPage,\n CourseEnrollmentWrite,\n HTTPExceptionResponse,\n LearningActivityWrite,\n LearningAnswerSelectionEvidenceParams,\n LearningAnswerWrite,\n LearningAssetRead,\n LearningAttemptEvidenceRead,\n LearningAttemptRead,\n LearningAttemptStartWrite,\n LearningAttemptSummaryPage,\n LearningCertificateRead,\n LearningCourseRead,\n LearningHistoricalSelectedPagesParams,\n LearningLessonOpenRead,\n LearningLessonOpenWrite,\n LearningListAttemptHistoryParams,\n LearningListScoreHistoryParams,\n LearningPageEvidenceDetailRead,\n LearningPageEvidencePage,\n LearningPageEvidenceParams,\n LearningPathOpenWrite,\n LearningPathProgressRead,\n LearningReadEnrollmentHistoryParams,\n LearningReadVocabularyParams,\n LearningScoreSummaryPage,\n LearningSelectedPagePage,\n LearningSelectionEvidencePage,\n LearningSelectionEvidenceRead,\n LearningSelfRatingRead,\n LearningSelfRatingWrite,\n LearningSessionRead,\n LearningSessionStartWrite,\n LearningUploadRead,\n LearningUploadWrite,\n LearningVocabularyRead,\n LearningVocabularyResourceParams,\n LessonProgressRead,\n LessonProgressWrite,\n ValidationErrorResponse,\n VocabularyProgressRead,\n VocabularyProgressWrite\n} from '../../models';\n\nimport { request } from '../../client';\nimport type { ErrorType , BodyType } from '../../client';\n\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n\n\nconst withQueryKey = <T extends object, K>(query: T, queryKey: K): T & { queryKey: K } => {\n const result = { queryKey } as T & { queryKey: K };\n for (const key of Object.keys(query)) {\n // The explicit queryKey always wins, matching the previous\n // `{ ...query, queryKey }` spread where it was set last.\n if (key === 'queryKey') continue;\n Object.defineProperty(result, key, {\n enumerable: true,\n configurable: true,\n get: () => (query as Record<string, unknown>)[key],\n });\n }\n return result;\n};\n\nexport const getLearningStartAttemptUrl = (assessmentId: number,) => {\n\n\n\n\n return `/learning/assessments/${assessmentId}/attempts`\n}\n\n/**\n * Creates an immutable snapshot of the selected questions, ordering and pages. Course attempts need the profile's open reading session; provide lessonId when the assessment appears in multiple lessons. A lessonId without sessionId requests an allowed free preview. Path assessments use neither course session nor lesson. requestKey is scoped to profile and assessment: identical context replays the existing attempt; changed lesson/session context returns 409. Deadlines and attempt limits are enforced by the server. Preview results do not update course progress or score summaries.\n * @summary Start or replay a scoped assessment attempt\n */\nexport const learningStartAttempt = async (assessmentId: number,\n learningAttemptStartWrite: LearningAttemptStartWrite, options?: Parameters<typeof request>[1]): Promise<LearningAttemptRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningAttemptRead>(getLearningStartAttemptUrl(assessmentId),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(learningAttemptStartWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningStartAttemptMutationKey = () => ['learningStartAttempt'] as const;\n\nexport const getLearningStartAttemptMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningStartAttempt>>, TError,LearningStartAttemptMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningStartAttempt>>, TError,LearningStartAttemptMutationVariables, TContext> => {\n\nconst mutationKey = getLearningStartAttemptMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningStartAttempt>>, LearningStartAttemptMutationVariables> = (props) => {\n const {assessmentId,data} = props ?? {};\n\n return learningStartAttempt(assessmentId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningStartAttemptMutationResult = NonNullable<Awaited<ReturnType<typeof learningStartAttempt>>>\n export type LearningStartAttemptMutationBody = BodyType<LearningAttemptStartWrite>\n export type LearningStartAttemptMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningStartAttemptMutationVariables = {assessmentId: number;data: BodyType<LearningAttemptStartWrite>}\n\n /**\n * @summary Start or replay a scoped assessment attempt\n */\nexport const useLearningStartAttempt = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningStartAttempt>>, TError,LearningStartAttemptMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningStartAttempt>>,\n TError,\n LearningStartAttemptMutationVariables,\n TContext\n > => {\n return useMutation(getLearningStartAttemptMutationOptions(options), queryClient);\n }\n export const getLearningReadAttemptUrl = (attemptId: number,) => {\n\n\n\n\n return `/learning/attempts/${attemptId}`\n}\n\n/**\n * Returns only an attempt owned by the effective profile. In-progress native attempts recheck their learning context; completed and historical evidence remains readable by its owner. Public questions never include answer keys. Corrections and answer grades appear after completion/expiry, or for answered questions when immediate feedback is configured. Historical attempts return retained answers and scores without inventing a replayable question definition. This read does not itself finalize an elapsed deadline.\n * @summary Read the profile's attempt and available feedback\n */\nexport const learningReadAttempt = async (attemptId: number, options?: Parameters<typeof request>[1]): Promise<LearningAttemptRead> => {\n\n return request<LearningAttemptRead>(getLearningReadAttemptUrl(attemptId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningReadAttemptQueryKey = (attemptId: number,) => {\n return [\n `/learning/attempts/${attemptId}`\n ] as const;\n }\n\n\nexport const getLearningReadAttemptQueryOptions = <TData = Awaited<ReturnType<typeof learningReadAttempt>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(attemptId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttempt>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningReadAttemptQueryKey(attemptId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningReadAttempt>>> = ({ signal }) => learningReadAttempt(attemptId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: attemptId !== null && attemptId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningReadAttempt>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningReadAttemptQueryResult = NonNullable<Awaited<ReturnType<typeof learningReadAttempt>>>\nexport type LearningReadAttemptQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningReadAttempt<TData = Awaited<ReturnType<typeof learningReadAttempt>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttempt>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadAttempt>>,\n TError,\n Awaited<ReturnType<typeof learningReadAttempt>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadAttempt<TData = Awaited<ReturnType<typeof learningReadAttempt>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttempt>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadAttempt>>,\n TError,\n Awaited<ReturnType<typeof learningReadAttempt>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadAttempt<TData = Awaited<ReturnType<typeof learningReadAttempt>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttempt>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Read the profile's attempt and available feedback\n */\n\nexport function useLearningReadAttempt<TData = Awaited<ReturnType<typeof learningReadAttempt>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttempt>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningReadAttemptQueryOptions(attemptId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningAbandonAttemptUrl = (attemptId: number,) => {\n\n\n\n\n return `/learning/attempts/${attemptId}/abandon`\n}\n\n/**\n * Changes the effective profile's in-progress native attempt to abandoned and records finishedAt. Saved responses remain in history; abandoning does not calculate a score or grant completion. Repeating an abandoned or other terminal native attempt returns its existing state. Imported attempts are historical evidence and cannot be abandoned.\n * @summary Abandon an unfinished native attempt\n */\nexport const learningAbandonAttempt = async (attemptId: number, options?: Parameters<typeof request>[1]): Promise<LearningAttemptRead> => {\n\n return request<LearningAttemptRead>(getLearningAbandonAttemptUrl(attemptId),\n {\n ...options,\n method: 'POST'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningAbandonAttemptMutationKey = () => ['learningAbandonAttempt'] as const;\n\nexport const getLearningAbandonAttemptMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningAbandonAttempt>>, TError,LearningAbandonAttemptMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningAbandonAttempt>>, TError,LearningAbandonAttemptMutationVariables, TContext> => {\n\nconst mutationKey = getLearningAbandonAttemptMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningAbandonAttempt>>, LearningAbandonAttemptMutationVariables> = (props) => {\n const {attemptId} = props ?? {};\n\n return learningAbandonAttempt(attemptId,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningAbandonAttemptMutationResult = NonNullable<Awaited<ReturnType<typeof learningAbandonAttempt>>>\n\n export type LearningAbandonAttemptMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningAbandonAttemptMutationVariables = {attemptId: number}\n\n /**\n * @summary Abandon an unfinished native attempt\n */\nexport const useLearningAbandonAttempt = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningAbandonAttempt>>, TError,LearningAbandonAttemptMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningAbandonAttempt>>,\n TError,\n LearningAbandonAttemptMutationVariables,\n TContext\n > => {\n return useMutation(getLearningAbandonAttemptMutationOptions(options), queryClient);\n }\n export const getLearningAnswerQuestionUrl = (attemptId: number,\n questionKey: string,) => {\n\n\n\n\n return `/learning/attempts/${attemptId}/answers/${questionKey}`\n}\n\n/**\n * Use the selected question's key and kind-specific response object. Before finalization answers can be replaced unless immediate feedback has made the first response final. An identical saved response can be replayed after finalization; a different final answer returns 409. An elapsed deadline finalizes the attempt as expired and rejects the late answer. Uploaded reflection answers must reference this profile's completed upload reserved for this exact attempt and question. The response returns the entire attempt with only currently authorized feedback.\n * @summary Save a question response in the owned attempt\n */\nexport const learningAnswerQuestion = async (attemptId: number,\n questionKey: string,\n learningAnswerWrite: LearningAnswerWrite, options?: Parameters<typeof request>[1]): Promise<LearningAttemptRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningAttemptRead>(getLearningAnswerQuestionUrl(attemptId,questionKey),\n {\n ...options,\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(learningAnswerWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningAnswerQuestionMutationKey = () => ['learningAnswerQuestion'] as const;\n\nexport const getLearningAnswerQuestionMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningAnswerQuestion>>, TError,LearningAnswerQuestionMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningAnswerQuestion>>, TError,LearningAnswerQuestionMutationVariables, TContext> => {\n\nconst mutationKey = getLearningAnswerQuestionMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningAnswerQuestion>>, LearningAnswerQuestionMutationVariables> = (props) => {\n const {attemptId,questionKey,data} = props ?? {};\n\n return learningAnswerQuestion(attemptId,questionKey,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningAnswerQuestionMutationResult = NonNullable<Awaited<ReturnType<typeof learningAnswerQuestion>>>\n export type LearningAnswerQuestionMutationBody = BodyType<LearningAnswerWrite>\n export type LearningAnswerQuestionMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningAnswerQuestionMutationVariables = {attemptId: number;questionKey: string;data: BodyType<LearningAnswerWrite>}\n\n /**\n * @summary Save a question response in the owned attempt\n */\nexport const useLearningAnswerQuestion = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningAnswerQuestion>>, TError,LearningAnswerQuestionMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningAnswerQuestion>>,\n TError,\n LearningAnswerQuestionMutationVariables,\n TContext\n > => {\n return useMutation(getLearningAnswerQuestionMutationOptions(options), queryClient);\n }\n export const getLearningFinishAttemptUrl = (attemptId: number,) => {\n\n\n\n\n return `/learning/attempts/${attemptId}/finish`\n}\n\n/**\n * Requires the owned attempt's learning context. Before its deadline every selected question must have a response, including reflection and information acknowledgements. After the deadline the attempt is finalized as expired, with unanswered scored questions counted as zero. Returns corrections and a percentage score, or null for an unscored assessment. Eligible native results update score summaries and completion evidence; preview results do not. Repeating a terminal attempt returns its existing state.\n * @summary Finalize answers and compute assessment results\n */\nexport const learningFinishAttempt = async (attemptId: number, options?: Parameters<typeof request>[1]): Promise<LearningAttemptRead> => {\n\n return request<LearningAttemptRead>(getLearningFinishAttemptUrl(attemptId),\n {\n ...options,\n method: 'POST'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningFinishAttemptMutationKey = () => ['learningFinishAttempt'] as const;\n\nexport const getLearningFinishAttemptMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningFinishAttempt>>, TError,LearningFinishAttemptMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningFinishAttempt>>, TError,LearningFinishAttemptMutationVariables, TContext> => {\n\nconst mutationKey = getLearningFinishAttemptMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningFinishAttempt>>, LearningFinishAttemptMutationVariables> = (props) => {\n const {attemptId} = props ?? {};\n\n return learningFinishAttempt(attemptId,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningFinishAttemptMutationResult = NonNullable<Awaited<ReturnType<typeof learningFinishAttempt>>>\n\n export type LearningFinishAttemptMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningFinishAttemptMutationVariables = {attemptId: number}\n\n /**\n * @summary Finalize answers and compute assessment results\n */\nexport const useLearningFinishAttempt = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningFinishAttempt>>, TError,LearningFinishAttemptMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningFinishAttempt>>,\n TError,\n LearningFinishAttemptMutationVariables,\n TContext\n > => {\n return useMutation(getLearningFinishAttemptMutationOptions(options), queryClient);\n }\n export const getLearningRateExercisePageUrl = (attemptId: number,\n pageKey: string,) => {\n\n\n\n\n return `/learning/attempts/${attemptId}/pages/${pageKey}/self-rating`\n}\n\n/**\n * Requires an owned native exercise attempt containing pageKey and full learning access. Saves a rating from 1 to 5 for this profile and exercise page; later submissions replace the rating and mark the page's self-reflection complete. Preview attempts cannot save ratings. This does not submit answers, award points or substitute for assessment completion.\n * @summary Save a private exercise-page self-rating\n */\nexport const learningRateExercisePage = async (attemptId: number,\n pageKey: string,\n learningSelfRatingWrite: LearningSelfRatingWrite, options?: Parameters<typeof request>[1]): Promise<LearningSelfRatingRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningSelfRatingRead>(getLearningRateExercisePageUrl(attemptId,pageKey),\n {\n ...options,\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(learningSelfRatingWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningRateExercisePageMutationKey = () => ['learningRateExercisePage'] as const;\n\nexport const getLearningRateExercisePageMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningRateExercisePage>>, TError,LearningRateExercisePageMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningRateExercisePage>>, TError,LearningRateExercisePageMutationVariables, TContext> => {\n\nconst mutationKey = getLearningRateExercisePageMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningRateExercisePage>>, LearningRateExercisePageMutationVariables> = (props) => {\n const {attemptId,pageKey,data} = props ?? {};\n\n return learningRateExercisePage(attemptId,pageKey,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningRateExercisePageMutationResult = NonNullable<Awaited<ReturnType<typeof learningRateExercisePage>>>\n export type LearningRateExercisePageMutationBody = BodyType<LearningSelfRatingWrite>\n export type LearningRateExercisePageMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningRateExercisePageMutationVariables = {attemptId: number;pageKey: string;data: BodyType<LearningSelfRatingWrite>}\n\n /**\n * @summary Save a private exercise-page self-rating\n */\nexport const useLearningRateExercisePage = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningRateExercisePage>>, TError,LearningRateExercisePageMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningRateExercisePage>>,\n TError,\n LearningRateExercisePageMutationVariables,\n TContext\n > => {\n return useMutation(getLearningRateExercisePageMutationOptions(options), queryClient);\n }\n export const getLearningReserveExerciseUploadUrl = (attemptId: number,\n questionKey: string,) => {\n\n\n\n\n return `/learning/attempts/${attemptId}/questions/${questionKey}/uploads`\n}\n\n/**\n * Requires the effective profile's in-progress, unexpired native attempt and a reflection question configured for upload or text_or_upload. The MIME type must map to one of that question's allowedUploadKinds; exercise files are limited to 50 MiB (WebVTT remains limited to 2 MiB). Reserve, PUT the exact bytes to uploadUrl, then submit response.assetId using the answer operation. The uploaded asset remains scoped to this profile, attempt and question; reservation alone does not answer it.\n * @summary Reserve a private uploaded reflection answer\n */\nexport const learningReserveExerciseUpload = async (attemptId: number,\n questionKey: string,\n learningUploadWrite: LearningUploadWrite, options?: Parameters<typeof request>[1]): Promise<LearningUploadRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningUploadRead>(getLearningReserveExerciseUploadUrl(attemptId,questionKey),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(learningUploadWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningReserveExerciseUploadMutationKey = () => ['learningReserveExerciseUpload'] as const;\n\nexport const getLearningReserveExerciseUploadMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningReserveExerciseUpload>>, TError,LearningReserveExerciseUploadMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningReserveExerciseUpload>>, TError,LearningReserveExerciseUploadMutationVariables, TContext> => {\n\nconst mutationKey = getLearningReserveExerciseUploadMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningReserveExerciseUpload>>, LearningReserveExerciseUploadMutationVariables> = (props) => {\n const {attemptId,questionKey,data} = props ?? {};\n\n return learningReserveExerciseUpload(attemptId,questionKey,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningReserveExerciseUploadMutationResult = NonNullable<Awaited<ReturnType<typeof learningReserveExerciseUpload>>>\n export type LearningReserveExerciseUploadMutationBody = BodyType<LearningUploadWrite>\n export type LearningReserveExerciseUploadMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningReserveExerciseUploadMutationVariables = {attemptId: number;questionKey: string;data: BodyType<LearningUploadWrite>}\n\n /**\n * @summary Reserve a private uploaded reflection answer\n */\nexport const useLearningReserveExerciseUpload = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningReserveExerciseUpload>>, TError,LearningReserveExerciseUploadMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningReserveExerciseUpload>>,\n TError,\n LearningReserveExerciseUploadMutationVariables,\n TContext\n > => {\n return useMutation(getLearningReserveExerciseUploadMutationOptions(options), queryClient);\n }\n export const getLearningReadAttemptResourceUrl = (attemptId: number,\n assetId: number,) => {\n\n\n\n\n return `/learning/attempts/${attemptId}/resources/${assetId}`\n}\n\n/**\n * Checks the profile's ownership and retained assessment context. Permits selected question/page media, allowed choice media and public hints. Correction resources become available after completion/expiry or after the corresponding answer when immediate feedback is configured. A submitted reflection upload is accessible only through its owning attempt and question. Resource IDs outside this authorized set return 404; returned delivery URLs may expire.\n * @summary Resolve a resource authorized by the owned attempt\n */\nexport const learningReadAttemptResource = async (attemptId: number,\n assetId: number, options?: Parameters<typeof request>[1]): Promise<LearningAssetRead> => {\n\n return request<LearningAssetRead>(getLearningReadAttemptResourceUrl(attemptId,assetId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningReadAttemptResourceQueryKey = (attemptId: number,\n assetId: number,) => {\n return [\n `/learning/attempts/${attemptId}/resources/${assetId}`\n ] as const;\n }\n\n\nexport const getLearningReadAttemptResourceQueryOptions = <TData = Awaited<ReturnType<typeof learningReadAttemptResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(attemptId: number,\n assetId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttemptResource>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningReadAttemptResourceQueryKey(attemptId,assetId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningReadAttemptResource>>> = ({ signal }) => learningReadAttemptResource(attemptId,assetId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: attemptId !== null && attemptId !== undefined && assetId !== null && assetId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningReadAttemptResource>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningReadAttemptResourceQueryResult = NonNullable<Awaited<ReturnType<typeof learningReadAttemptResource>>>\nexport type LearningReadAttemptResourceQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningReadAttemptResource<TData = Awaited<ReturnType<typeof learningReadAttemptResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number,\n assetId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttemptResource>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadAttemptResource>>,\n TError,\n Awaited<ReturnType<typeof learningReadAttemptResource>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadAttemptResource<TData = Awaited<ReturnType<typeof learningReadAttemptResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number,\n assetId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttemptResource>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadAttemptResource>>,\n TError,\n Awaited<ReturnType<typeof learningReadAttemptResource>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadAttemptResource<TData = Awaited<ReturnType<typeof learningReadAttemptResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number,\n assetId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttemptResource>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Resolve a resource authorized by the owned attempt\n */\n\nexport function useLearningReadAttemptResource<TData = Awaited<ReturnType<typeof learningReadAttemptResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number,\n assetId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadAttemptResource>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningReadAttemptResourceQueryOptions(attemptId,assetId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningReserveCourseUploadUrl = (courseId: number,) => {\n\n\n\n\n return `/learning/author/courses/${courseId}/uploads`\n}\n\n/**\n * Requires edit authority on courseId. Reserves one immutable file with an exact byte count and declared MIME type for 15 minutes. Course files are limited to 200 MiB; WebVTT captions to 2 MiB. At most ten unexpired pending uploads may exist per profile. Send the raw bytes with authenticated PUT to uploadUrl, then use its returned assetId in the course definition. Each reservation request creates a new reservation.\n * @summary Reserve a file upload for course authoring\n */\nexport const learningReserveCourseUpload = async (courseId: number,\n learningUploadWrite: LearningUploadWrite, options?: Parameters<typeof request>[1]): Promise<LearningUploadRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningUploadRead>(getLearningReserveCourseUploadUrl(courseId),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(learningUploadWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningReserveCourseUploadMutationKey = () => ['learningReserveCourseUpload'] as const;\n\nexport const getLearningReserveCourseUploadMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningReserveCourseUpload>>, TError,LearningReserveCourseUploadMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningReserveCourseUpload>>, TError,LearningReserveCourseUploadMutationVariables, TContext> => {\n\nconst mutationKey = getLearningReserveCourseUploadMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningReserveCourseUpload>>, LearningReserveCourseUploadMutationVariables> = (props) => {\n const {courseId,data} = props ?? {};\n\n return learningReserveCourseUpload(courseId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningReserveCourseUploadMutationResult = NonNullable<Awaited<ReturnType<typeof learningReserveCourseUpload>>>\n export type LearningReserveCourseUploadMutationBody = BodyType<LearningUploadWrite>\n export type LearningReserveCourseUploadMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningReserveCourseUploadMutationVariables = {courseId: number;data: BodyType<LearningUploadWrite>}\n\n /**\n * @summary Reserve a file upload for course authoring\n */\nexport const useLearningReserveCourseUpload = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningReserveCourseUpload>>, TError,LearningReserveCourseUploadMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningReserveCourseUpload>>,\n TError,\n LearningReserveCourseUploadMutationVariables,\n TContext\n > => {\n return useMutation(getLearningReserveCourseUploadMutationOptions(options), queryClient);\n }\n export const getLearningReadCertificateUrl = (certificateId: number,) => {\n\n\n\n\n return `/learning/certificates/${certificateId}`\n}\n\n/**\n * Returns the immutable recipient, course title, edition and issuance date recorded for this profile's certificate. Another profile's certificate is not visible. This read does not require opening a new course session; documentUrl identifies the separately authenticated PDF download.\n * @summary Read an issued certificate owned by the profile\n */\nexport const learningReadCertificate = async (certificateId: number, options?: Parameters<typeof request>[1]): Promise<LearningCertificateRead> => {\n\n return request<LearningCertificateRead>(getLearningReadCertificateUrl(certificateId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningReadCertificateQueryKey = (certificateId: number,) => {\n return [\n `/learning/certificates/${certificateId}`\n ] as const;\n }\n\n\nexport const getLearningReadCertificateQueryOptions = <TData = Awaited<ReturnType<typeof learningReadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(certificateId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCertificate>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningReadCertificateQueryKey(certificateId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningReadCertificate>>> = ({ signal }) => learningReadCertificate(certificateId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: certificateId !== null && certificateId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningReadCertificate>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningReadCertificateQueryResult = NonNullable<Awaited<ReturnType<typeof learningReadCertificate>>>\nexport type LearningReadCertificateQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningReadCertificate<TData = Awaited<ReturnType<typeof learningReadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n certificateId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCertificate>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadCertificate>>,\n TError,\n Awaited<ReturnType<typeof learningReadCertificate>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadCertificate<TData = Awaited<ReturnType<typeof learningReadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n certificateId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCertificate>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadCertificate>>,\n TError,\n Awaited<ReturnType<typeof learningReadCertificate>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadCertificate<TData = Awaited<ReturnType<typeof learningReadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n certificateId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCertificate>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Read an issued certificate owned by the profile\n */\n\nexport function useLearningReadCertificate<TData = Awaited<ReturnType<typeof learningReadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n certificateId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCertificate>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningReadCertificateQueryOptions(certificateId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningDownloadCertificateUrl = (certificateId: number,) => {\n\n\n\n\n return `/learning/certificates/${certificateId}/document`\n}\n\n/**\n * Renders the certificate's retained recipient name, course title and issuance evidence as a PDF attachment. Only the effective profile that owns the certificate can download it. The successful response is application/pdf bytes with Content-Disposition attachment and private, no-store caching; it has no JSON body.\n * @summary Download an owned completion certificate as PDF\n */\nexport const learningDownloadCertificate = async (certificateId: number, options?: Parameters<typeof request>[1]): Promise<Blob> => {\n\n return request<Blob>(getLearningDownloadCertificateUrl(certificateId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningDownloadCertificateQueryKey = (certificateId: number,) => {\n return [\n `/learning/certificates/${certificateId}/document`\n ] as const;\n }\n\n\nexport const getLearningDownloadCertificateQueryOptions = <TData = Awaited<ReturnType<typeof learningDownloadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(certificateId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningDownloadCertificate>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningDownloadCertificateQueryKey(certificateId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningDownloadCertificate>>> = ({ signal }) => learningDownloadCertificate(certificateId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: certificateId !== null && certificateId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningDownloadCertificate>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningDownloadCertificateQueryResult = NonNullable<Awaited<ReturnType<typeof learningDownloadCertificate>>>\nexport type LearningDownloadCertificateQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningDownloadCertificate<TData = Awaited<ReturnType<typeof learningDownloadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n certificateId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningDownloadCertificate>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningDownloadCertificate>>,\n TError,\n Awaited<ReturnType<typeof learningDownloadCertificate>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningDownloadCertificate<TData = Awaited<ReturnType<typeof learningDownloadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n certificateId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningDownloadCertificate>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningDownloadCertificate>>,\n TError,\n Awaited<ReturnType<typeof learningDownloadCertificate>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningDownloadCertificate<TData = Awaited<ReturnType<typeof learningDownloadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n certificateId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningDownloadCertificate>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Download an owned completion certificate as PDF\n */\n\nexport function useLearningDownloadCertificate<TData = Awaited<ReturnType<typeof learningDownloadCertificate>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n certificateId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningDownloadCertificate>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningDownloadCertificateQueryOptions(certificateId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningReadCourseUrl = (courseId: number,) => {\n\n\n\n\n return `/learning/courses/${courseId}`\n}\n\n/**\n * Returns the effective profile's enrolled edition, or the latest published edition before enrollment. Eligibility uses the shared profile, age, category and entitlement rules; an allowed preview may expose the outline with hasFullAccess=false. This GET creates no enrollment or reading session. Check upgradeAvailable and latestRevisionId before offering an explicit edition upgrade. Lesson progress and final assessment IDs are included only with full access.\n * @summary Read the selected course edition and progress\n */\nexport const learningReadCourse = async (courseId: number, options?: Parameters<typeof request>[1]): Promise<LearningCourseRead> => {\n\n return request<LearningCourseRead>(getLearningReadCourseUrl(courseId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningReadCourseQueryKey = (courseId: number,) => {\n return [\n `/learning/courses/${courseId}`\n ] as const;\n }\n\n\nexport const getLearningReadCourseQueryOptions = <TData = Awaited<ReturnType<typeof learningReadCourse>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(courseId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCourse>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningReadCourseQueryKey(courseId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningReadCourse>>> = ({ signal }) => learningReadCourse(courseId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: courseId !== null && courseId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningReadCourse>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningReadCourseQueryResult = NonNullable<Awaited<ReturnType<typeof learningReadCourse>>>\nexport type LearningReadCourseQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningReadCourse<TData = Awaited<ReturnType<typeof learningReadCourse>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n courseId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCourse>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadCourse>>,\n TError,\n Awaited<ReturnType<typeof learningReadCourse>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadCourse<TData = Awaited<ReturnType<typeof learningReadCourse>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n courseId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCourse>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadCourse>>,\n TError,\n Awaited<ReturnType<typeof learningReadCourse>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadCourse<TData = Awaited<ReturnType<typeof learningReadCourse>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n courseId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCourse>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Read the selected course edition and progress\n */\n\nexport function useLearningReadCourse<TData = Awaited<ReturnType<typeof learningReadCourse>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n courseId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadCourse>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningReadCourseQueryOptions(courseId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningIssueCertificateUrl = (courseId: number,) => {\n\n\n\n\n return `/learning/courses/${courseId}/certificate`\n}\n\n/**\n * Requires an existing current enrollment in a course with certification enabled. Recomputes evidence: every required lesson must be complete and every required assessment passed. Creates one certificate per profile and edition, retaining recipient name and course title as issued; repeating issuance returns the existing certificate. Evidence can support issuance without a new reading session. Use documentUrl to download the PDF.\n * @summary Issue the profile's course completion certificate\n */\nexport const learningIssueCertificate = async (courseId: number, options?: Parameters<typeof request>[1]): Promise<LearningCertificateRead> => {\n\n return request<LearningCertificateRead>(getLearningIssueCertificateUrl(courseId),\n {\n ...options,\n method: 'POST'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningIssueCertificateMutationKey = () => ['learningIssueCertificate'] as const;\n\nexport const getLearningIssueCertificateMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningIssueCertificate>>, TError,LearningIssueCertificateMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningIssueCertificate>>, TError,LearningIssueCertificateMutationVariables, TContext> => {\n\nconst mutationKey = getLearningIssueCertificateMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningIssueCertificate>>, LearningIssueCertificateMutationVariables> = (props) => {\n const {courseId} = props ?? {};\n\n return learningIssueCertificate(courseId,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningIssueCertificateMutationResult = NonNullable<Awaited<ReturnType<typeof learningIssueCertificate>>>\n\n export type LearningIssueCertificateMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningIssueCertificateMutationVariables = {courseId: number}\n\n /**\n * @summary Issue the profile's course completion certificate\n */\nexport const useLearningIssueCertificate = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningIssueCertificate>>, TError,LearningIssueCertificateMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningIssueCertificate>>,\n TError,\n LearningIssueCertificateMutationVariables,\n TContext\n > => {\n return useMutation(getLearningIssueCertificateMutationOptions(options), queryClient);\n }\n export const getLearningEnrollUrl = (courseId: number,) => {\n\n\n\n\n return `/learning/courses/${courseId}/enrollment`\n}\n\n/**\n * Requires full access for the effective profile. Creates a current enrollment pinned to the published edition if none exists; otherwise retains the selected edition and progress. archived controls the reader's personal archive preference. Repeating the same preference does not duplicate enrollment. Opening a reading session is a separate explicit step.\n * @summary Enroll in the course or set its archive preference\n */\nexport const learningEnroll = async (courseId: number,\n courseEnrollmentWrite: CourseEnrollmentWrite, options?: Parameters<typeof request>[1]): Promise<LearningCourseRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningCourseRead>(getLearningEnrollUrl(courseId),\n {\n ...options,\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(courseEnrollmentWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningEnrollMutationKey = () => ['learningEnroll'] as const;\n\nexport const getLearningEnrollMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningEnroll>>, TError,LearningEnrollMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningEnroll>>, TError,LearningEnrollMutationVariables, TContext> => {\n\nconst mutationKey = getLearningEnrollMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningEnroll>>, LearningEnrollMutationVariables> = (props) => {\n const {courseId,data} = props ?? {};\n\n return learningEnroll(courseId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningEnrollMutationResult = NonNullable<Awaited<ReturnType<typeof learningEnroll>>>\n export type LearningEnrollMutationBody = BodyType<CourseEnrollmentWrite>\n export type LearningEnrollMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningEnrollMutationVariables = {courseId: number;data: BodyType<CourseEnrollmentWrite>}\n\n /**\n * @summary Enroll in the course or set its archive preference\n */\nexport const useLearningEnroll = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningEnroll>>, TError,LearningEnrollMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningEnroll>>,\n TError,\n LearningEnrollMutationVariables,\n TContext\n > => {\n return useMutation(getLearningEnrollMutationOptions(options), queryClient);\n }\n export const getLearningReadEnrollmentHistoryUrl = (courseId: number,\n params?: LearningReadEnrollmentHistoryParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n\n if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : String(value))\n }\n });\n\n const stringifiedParams = normalizedParams.toString();\n\n return stringifiedParams.length > 0 ? `/learning/courses/${courseId}/enrollments?${stringifiedParams}` : `/learning/courses/${courseId}/enrollments`\n}\n\n/**\n * Requires current full course access and returns this profile's enrollments only, newest enrollment ID first. isCurrent identifies the selected edition; archived is a personal list preference independent of edition selection. Earlier progress and completedAt are preserved after an upgrade.\n * @summary List the profile's course enrollments by edition\n */\nexport const learningReadEnrollmentHistory = async (courseId: number,\n params?: LearningReadEnrollmentHistoryParams, options?: Parameters<typeof request>[1]): Promise<CourseEnrollmentPage> => {\n\n return request<CourseEnrollmentPage>(getLearningReadEnrollmentHistoryUrl(courseId,params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningReadEnrollmentHistoryQueryKey = (courseId: number,\n params?: LearningReadEnrollmentHistoryParams,) => {\n return [\n `/learning/courses/${courseId}/enrollments`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getLearningReadEnrollmentHistoryQueryOptions = <TData = Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(courseId: number,\n params?: LearningReadEnrollmentHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningReadEnrollmentHistoryQueryKey(courseId,params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningReadEnrollmentHistory>>> = ({ signal }) => learningReadEnrollmentHistory(courseId,params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: courseId !== null && courseId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningReadEnrollmentHistoryQueryResult = NonNullable<Awaited<ReturnType<typeof learningReadEnrollmentHistory>>>\nexport type LearningReadEnrollmentHistoryQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningReadEnrollmentHistory<TData = Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n courseId: number,\n params: undefined | LearningReadEnrollmentHistoryParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadEnrollmentHistory>>,\n TError,\n Awaited<ReturnType<typeof learningReadEnrollmentHistory>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadEnrollmentHistory<TData = Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n courseId: number,\n params?: LearningReadEnrollmentHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadEnrollmentHistory>>,\n TError,\n Awaited<ReturnType<typeof learningReadEnrollmentHistory>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadEnrollmentHistory<TData = Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n courseId: number,\n params?: LearningReadEnrollmentHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary List the profile's course enrollments by edition\n */\n\nexport function useLearningReadEnrollmentHistory<TData = Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n courseId: number,\n params?: LearningReadEnrollmentHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadEnrollmentHistory>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningReadEnrollmentHistoryQueryOptions(courseId,params,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningStartSessionUrl = (courseId: number,) => {\n\n\n\n\n return `/learning/courses/${courseId}/sessions`\n}\n\n/**\n * Requires full course access, creates enrollment if needed and opens a shared consumption lease pinned to the selected edition. Generate requestKey once for the opening action and reuse it after uncertain network outcomes. The key is scoped to the effective profile: the same course returns its existing session, including a closed one; reuse for another course returns 409. Use a new key for a new reading session, then open a lesson with the returned sessionId.\n * @summary Open an entitled course reading session\n */\nexport const learningStartSession = async (courseId: number,\n learningSessionStartWrite: LearningSessionStartWrite, options?: Parameters<typeof request>[1]): Promise<LearningSessionRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningSessionRead>(getLearningStartSessionUrl(courseId),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(learningSessionStartWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningStartSessionMutationKey = () => ['learningStartSession'] as const;\n\nexport const getLearningStartSessionMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningStartSession>>, TError,LearningStartSessionMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningStartSession>>, TError,LearningStartSessionMutationVariables, TContext> => {\n\nconst mutationKey = getLearningStartSessionMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningStartSession>>, LearningStartSessionMutationVariables> = (props) => {\n const {courseId,data} = props ?? {};\n\n return learningStartSession(courseId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningStartSessionMutationResult = NonNullable<Awaited<ReturnType<typeof learningStartSession>>>\n export type LearningStartSessionMutationBody = BodyType<LearningSessionStartWrite>\n export type LearningStartSessionMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningStartSessionMutationVariables = {courseId: number;data: BodyType<LearningSessionStartWrite>}\n\n /**\n * @summary Open an entitled course reading session\n */\nexport const useLearningStartSession = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningStartSession>>, TError,LearningStartSessionMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningStartSession>>,\n TError,\n LearningStartSessionMutationVariables,\n TContext\n > => {\n return useMutation(getLearningStartSessionMutationOptions(options), queryClient);\n }\n export const getLearningUpgradeCourseEditionUrl = (courseId: number,) => {\n\n\n\n\n return `/learning/courses/${courseId}/upgrade-edition`\n}\n\n/**\n * Requires full course access and an existing current enrollment. Send its revisionId as expectedRevisionId and latestRevisionId as targetRevisionId. Closes open course reading sessions, retains earlier enrollment and completion evidence, and selects the target edition without copying old lesson progress. Repeating the same target succeeds; stale expectations or a target other than the latest publication return 409.\n * @summary Move enrollment to the latest published edition\n */\nexport const learningUpgradeCourseEdition = async (courseId: number,\n courseEditionUpgradeWrite: CourseEditionUpgradeWrite, options?: Parameters<typeof request>[1]): Promise<LearningCourseRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningCourseRead>(getLearningUpgradeCourseEditionUrl(courseId),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(courseEditionUpgradeWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningUpgradeCourseEditionMutationKey = () => ['learningUpgradeCourseEdition'] as const;\n\nexport const getLearningUpgradeCourseEditionMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningUpgradeCourseEdition>>, TError,LearningUpgradeCourseEditionMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningUpgradeCourseEdition>>, TError,LearningUpgradeCourseEditionMutationVariables, TContext> => {\n\nconst mutationKey = getLearningUpgradeCourseEditionMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningUpgradeCourseEdition>>, LearningUpgradeCourseEditionMutationVariables> = (props) => {\n const {courseId,data} = props ?? {};\n\n return learningUpgradeCourseEdition(courseId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningUpgradeCourseEditionMutationResult = NonNullable<Awaited<ReturnType<typeof learningUpgradeCourseEdition>>>\n export type LearningUpgradeCourseEditionMutationBody = BodyType<CourseEditionUpgradeWrite>\n export type LearningUpgradeCourseEditionMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningUpgradeCourseEditionMutationVariables = {courseId: number;data: BodyType<CourseEditionUpgradeWrite>}\n\n /**\n * @summary Move enrollment to the latest published edition\n */\nexport const useLearningUpgradeCourseEdition = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningUpgradeCourseEdition>>, TError,LearningUpgradeCourseEditionMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningUpgradeCourseEdition>>,\n TError,\n LearningUpgradeCourseEditionMutationVariables,\n TContext\n > => {\n return useMutation(getLearningUpgradeCourseEditionMutationOptions(options), queryClient);\n }\n export const getLearningAnswerSelectionEvidenceUrl = (params?: LearningAnswerSelectionEvidenceParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n\n if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : String(value))\n }\n });\n\n const stringifiedParams = normalizedParams.toString();\n\n return stringifiedParams.length > 0 ? `/learning/history/answer-selections?${stringifiedParams}` : `/learning/history/answer-selections`\n}\n\n/**\n * Returns evidence owned by the effective profile and rejects support impersonation. Resource identifiers do not authorize access to another learner. Source flags and counters are reported evidence, not newly computed grades. Missing dates, links and scoring remain null; a recorded completion flag does not establish a native pass result. attemptId selects an owned historical attempt; unlinkedOnly=true selects rows with no stored attempt link and cannot be combined with attemptId. Optional object filters apply within that same ownership scope. Results are ordered by history ID descending and paginated after filtering. questionId optionally filters by a local question mapping. choiceId, questionId, componentKey and attemptId may be incomplete. A null attemptId in the response does not create a synthetic attempt. Selection records reveal what was retained, without reconstructing correctness or scores.\n * @summary List my historical answer selections\n */\nexport const learningAnswerSelectionEvidence = async (params?: LearningAnswerSelectionEvidenceParams, options?: Parameters<typeof request>[1]): Promise<LearningSelectionEvidencePage> => {\n\n return request<LearningSelectionEvidencePage>(getLearningAnswerSelectionEvidenceUrl(params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningAnswerSelectionEvidenceQueryKey = (params?: LearningAnswerSelectionEvidenceParams,) => {\n return [\n `/learning/history/answer-selections`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getLearningAnswerSelectionEvidenceQueryOptions = <TData = Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(params?: LearningAnswerSelectionEvidenceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningAnswerSelectionEvidenceQueryKey(params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>> = ({ signal }) => learningAnswerSelectionEvidence(params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningAnswerSelectionEvidenceQueryResult = NonNullable<Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>>\nexport type LearningAnswerSelectionEvidenceQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningAnswerSelectionEvidence<TData = Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params: undefined | LearningAnswerSelectionEvidenceParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>,\n TError,\n Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningAnswerSelectionEvidence<TData = Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningAnswerSelectionEvidenceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>,\n TError,\n Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningAnswerSelectionEvidence<TData = Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningAnswerSelectionEvidenceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary List my historical answer selections\n */\n\nexport function useLearningAnswerSelectionEvidence<TData = Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningAnswerSelectionEvidenceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionEvidence>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningAnswerSelectionEvidenceQueryOptions(params,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningAnswerSelectionDetailUrl = (historyId: number,) => {\n\n\n\n\n return `/learning/history/answer-selections/${historyId}`\n}\n\n/**\n * Returns evidence owned by the effective profile and rejects support impersonation. Resource identifiers do not authorize access to another learner. Source flags and counters are reported evidence, not newly computed grades. Missing dates, links and scoring remain null; a recorded completion flag does not establish a native pass result. historyId identifies a retained selection record rather than a current answer or question. Optional local mappings remain null when unavailable; no grade or completion date is inferred. The source selection's recorded creation timestamp is returned as stored.\n * @summary Read my historical answer selection\n */\nexport const learningAnswerSelectionDetail = async (historyId: number, options?: Parameters<typeof request>[1]): Promise<LearningSelectionEvidenceRead> => {\n\n return request<LearningSelectionEvidenceRead>(getLearningAnswerSelectionDetailUrl(historyId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningAnswerSelectionDetailQueryKey = (historyId: number,) => {\n return [\n `/learning/history/answer-selections/${historyId}`\n ] as const;\n }\n\n\nexport const getLearningAnswerSelectionDetailQueryOptions = <TData = Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(historyId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningAnswerSelectionDetailQueryKey(historyId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningAnswerSelectionDetail>>> = ({ signal }) => learningAnswerSelectionDetail(historyId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: historyId !== null && historyId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningAnswerSelectionDetailQueryResult = NonNullable<Awaited<ReturnType<typeof learningAnswerSelectionDetail>>>\nexport type LearningAnswerSelectionDetailQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningAnswerSelectionDetail<TData = Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n historyId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningAnswerSelectionDetail>>,\n TError,\n Awaited<ReturnType<typeof learningAnswerSelectionDetail>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningAnswerSelectionDetail<TData = Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n historyId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningAnswerSelectionDetail>>,\n TError,\n Awaited<ReturnType<typeof learningAnswerSelectionDetail>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningAnswerSelectionDetail<TData = Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n historyId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Read my historical answer selection\n */\n\nexport function useLearningAnswerSelectionDetail<TData = Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n historyId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAnswerSelectionDetail>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningAnswerSelectionDetailQueryOptions(historyId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningListAttemptHistoryUrl = (params?: LearningListAttemptHistoryParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n\n if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : String(value))\n }\n });\n\n const stringifiedParams = normalizedParams.toString();\n\n return stringifiedParams.length > 0 ? `/learning/history/attempts?${stringifiedParams}` : `/learning/history/attempts`\n}\n\n/**\n * Returns only the effective profile's attempts, ordered by startedAt descending then attemptId descending. assessment_id optionally filters this history; it never changes ownership. Historical records are retained evidence and cannot be resumed. Scores are percentages serialized as decimal strings; null means no score is available.\n * @summary List the profile's native and historical attempts\n */\nexport const learningListAttemptHistory = async (params?: LearningListAttemptHistoryParams, options?: Parameters<typeof request>[1]): Promise<LearningAttemptSummaryPage> => {\n\n return request<LearningAttemptSummaryPage>(getLearningListAttemptHistoryUrl(params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningListAttemptHistoryQueryKey = (params?: LearningListAttemptHistoryParams,) => {\n return [\n `/learning/history/attempts`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getLearningListAttemptHistoryQueryOptions = <TData = Awaited<ReturnType<typeof learningListAttemptHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(params?: LearningListAttemptHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListAttemptHistory>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningListAttemptHistoryQueryKey(params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningListAttemptHistory>>> = ({ signal }) => learningListAttemptHistory(params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningListAttemptHistory>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningListAttemptHistoryQueryResult = NonNullable<Awaited<ReturnType<typeof learningListAttemptHistory>>>\nexport type LearningListAttemptHistoryQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningListAttemptHistory<TData = Awaited<ReturnType<typeof learningListAttemptHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params: undefined | LearningListAttemptHistoryParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListAttemptHistory>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningListAttemptHistory>>,\n TError,\n Awaited<ReturnType<typeof learningListAttemptHistory>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningListAttemptHistory<TData = Awaited<ReturnType<typeof learningListAttemptHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningListAttemptHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListAttemptHistory>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningListAttemptHistory>>,\n TError,\n Awaited<ReturnType<typeof learningListAttemptHistory>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningListAttemptHistory<TData = Awaited<ReturnType<typeof learningListAttemptHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningListAttemptHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListAttemptHistory>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary List the profile's native and historical attempts\n */\n\nexport function useLearningListAttemptHistory<TData = Awaited<ReturnType<typeof learningListAttemptHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningListAttemptHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListAttemptHistory>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningListAttemptHistoryQueryOptions(params,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningAttemptEvidenceUrl = (attemptId: number,) => {\n\n\n\n\n return `/learning/history/attempts/${attemptId}/evidence`\n}\n\n/**\n * Returns evidence owned by the effective profile and rejects support impersonation. Resource identifiers do not authorize access to another learner. Source flags and counters are reported evidence, not newly computed grades. Missing dates, links and scoring remain null; a recorded completion flag does not establish a native pass result. attemptId must identify an historical attempt. evidenceBasis distinguishes source_master_session counters from a source_session success flag. Counts describe linked recorded rows, not a reconstructed test definition. startedAt is the recorded attempt timestamp; unavailable completion or expiry dates remain null.\n * @summary Read my historical assessment attempt evidence\n */\nexport const learningAttemptEvidence = async (attemptId: number, options?: Parameters<typeof request>[1]): Promise<LearningAttemptEvidenceRead> => {\n\n return request<LearningAttemptEvidenceRead>(getLearningAttemptEvidenceUrl(attemptId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningAttemptEvidenceQueryKey = (attemptId: number,) => {\n return [\n `/learning/history/attempts/${attemptId}/evidence`\n ] as const;\n }\n\n\nexport const getLearningAttemptEvidenceQueryOptions = <TData = Awaited<ReturnType<typeof learningAttemptEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(attemptId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAttemptEvidence>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningAttemptEvidenceQueryKey(attemptId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningAttemptEvidence>>> = ({ signal }) => learningAttemptEvidence(attemptId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: attemptId !== null && attemptId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningAttemptEvidence>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningAttemptEvidenceQueryResult = NonNullable<Awaited<ReturnType<typeof learningAttemptEvidence>>>\nexport type LearningAttemptEvidenceQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningAttemptEvidence<TData = Awaited<ReturnType<typeof learningAttemptEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAttemptEvidence>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningAttemptEvidence>>,\n TError,\n Awaited<ReturnType<typeof learningAttemptEvidence>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningAttemptEvidence<TData = Awaited<ReturnType<typeof learningAttemptEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAttemptEvidence>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningAttemptEvidence>>,\n TError,\n Awaited<ReturnType<typeof learningAttemptEvidence>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningAttemptEvidence<TData = Awaited<ReturnType<typeof learningAttemptEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAttemptEvidence>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Read my historical assessment attempt evidence\n */\n\nexport function useLearningAttemptEvidence<TData = Awaited<ReturnType<typeof learningAttemptEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningAttemptEvidence>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningAttemptEvidenceQueryOptions(attemptId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningHistoricalSelectedPagesUrl = (attemptId: number,\n params?: LearningHistoricalSelectedPagesParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n\n if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : String(value))\n }\n });\n\n const stringifiedParams = normalizedParams.toString();\n\n return stringifiedParams.length > 0 ? `/learning/history/attempts/${attemptId}/selected-pages?${stringifiedParams}` : `/learning/history/attempts/${attemptId}/selected-pages`\n}\n\n/**\n * Returns evidence owned by the effective profile and rejects support impersonation. Resource identifiers do not authorize access to another learner. Lists the retained selected-page set, ordered by page ID and paginated with one-based page/limit. A selected page is evidence of inclusion, not proof it was viewed, answered or passed. Detailed page history is available separately. No questions or correct answers are reconstructed from this set.\n * @summary List pages selected for my historical attempt\n */\nexport const learningHistoricalSelectedPages = async (attemptId: number,\n params?: LearningHistoricalSelectedPagesParams, options?: Parameters<typeof request>[1]): Promise<LearningSelectedPagePage> => {\n\n return request<LearningSelectedPagePage>(getLearningHistoricalSelectedPagesUrl(attemptId,params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningHistoricalSelectedPagesQueryKey = (attemptId: number,\n params?: LearningHistoricalSelectedPagesParams,) => {\n return [\n `/learning/history/attempts/${attemptId}/selected-pages`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getLearningHistoricalSelectedPagesQueryOptions = <TData = Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(attemptId: number,\n params?: LearningHistoricalSelectedPagesParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningHistoricalSelectedPagesQueryKey(attemptId,params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningHistoricalSelectedPages>>> = ({ signal }) => learningHistoricalSelectedPages(attemptId,params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: attemptId !== null && attemptId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningHistoricalSelectedPagesQueryResult = NonNullable<Awaited<ReturnType<typeof learningHistoricalSelectedPages>>>\nexport type LearningHistoricalSelectedPagesQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningHistoricalSelectedPages<TData = Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number,\n params: undefined | LearningHistoricalSelectedPagesParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningHistoricalSelectedPages>>,\n TError,\n Awaited<ReturnType<typeof learningHistoricalSelectedPages>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningHistoricalSelectedPages<TData = Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number,\n params?: LearningHistoricalSelectedPagesParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningHistoricalSelectedPages>>,\n TError,\n Awaited<ReturnType<typeof learningHistoricalSelectedPages>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningHistoricalSelectedPages<TData = Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number,\n params?: LearningHistoricalSelectedPagesParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary List pages selected for my historical attempt\n */\n\nexport function useLearningHistoricalSelectedPages<TData = Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n attemptId: number,\n params?: LearningHistoricalSelectedPagesParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningHistoricalSelectedPages>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningHistoricalSelectedPagesQueryOptions(attemptId,params,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningPageEvidenceUrl = (params?: LearningPageEvidenceParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n\n if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : String(value))\n }\n });\n\n const stringifiedParams = normalizedParams.toString();\n\n return stringifiedParams.length > 0 ? `/learning/history/pages?${stringifiedParams}` : `/learning/history/pages`\n}\n\n/**\n * Returns evidence owned by the effective profile and rejects support impersonation. Resource identifiers do not authorize access to another learner. Source flags and counters are reported evidence, not newly computed grades. Missing dates, links and scoring remain null; a recorded completion flag does not establish a native pass result. attemptId selects an owned historical attempt; unlinkedOnly=true selects rows with no stored attempt link and cannot be combined with attemptId. Optional object filters apply within that same ownership scope. Results are ordered by history ID descending and paginated after filtering. pageId optionally narrows to one local page identity. A returned attemptId is exposed only when it links to an owned historical attempt. responseAvailable indicates retained response evidence, not whether the bounded detail endpoint will return its serialized bytes.\n * @summary List my recorded page evidence\n */\nexport const learningPageEvidence = async (params?: LearningPageEvidenceParams, options?: Parameters<typeof request>[1]): Promise<LearningPageEvidencePage> => {\n\n return request<LearningPageEvidencePage>(getLearningPageEvidenceUrl(params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningPageEvidenceQueryKey = (params?: LearningPageEvidenceParams,) => {\n return [\n `/learning/history/pages`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getLearningPageEvidenceQueryOptions = <TData = Awaited<ReturnType<typeof learningPageEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(params?: LearningPageEvidenceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidence>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningPageEvidenceQueryKey(params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningPageEvidence>>> = ({ signal }) => learningPageEvidence(params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidence>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningPageEvidenceQueryResult = NonNullable<Awaited<ReturnType<typeof learningPageEvidence>>>\nexport type LearningPageEvidenceQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningPageEvidence<TData = Awaited<ReturnType<typeof learningPageEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params: undefined | LearningPageEvidenceParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidence>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningPageEvidence>>,\n TError,\n Awaited<ReturnType<typeof learningPageEvidence>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningPageEvidence<TData = Awaited<ReturnType<typeof learningPageEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningPageEvidenceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidence>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningPageEvidence>>,\n TError,\n Awaited<ReturnType<typeof learningPageEvidence>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningPageEvidence<TData = Awaited<ReturnType<typeof learningPageEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningPageEvidenceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidence>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary List my recorded page evidence\n */\n\nexport function useLearningPageEvidence<TData = Awaited<ReturnType<typeof learningPageEvidence>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningPageEvidenceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidence>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningPageEvidenceQueryOptions(params,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningPageEvidenceDetailUrl = (historyId: number,) => {\n\n\n\n\n return `/learning/history/pages/${historyId}`\n}\n\n/**\n * Returns evidence owned by the effective profile and rejects support impersonation. Resource identifiers do not authorize access to another learner. Source flags and counters are reported evidence, not newly computed grades. Missing dates, links and scoring remain null; a recorded completion flag does not establish a native pass result. Returns opaque PHP-serialized answer text only when retained as source master-selection evidence and at most 65,536 UTF-8 bytes. Larger responses retain encoding and byte count but set responseOmitted=true and serializedAnswers=null. A missing response instead has null encoding/count and responseOmitted=false. Source text is evidence, never a native answer request or trusted executable serialization.\n * @summary Read my historical page response evidence\n */\nexport const learningPageEvidenceDetail = async (historyId: number, options?: Parameters<typeof request>[1]): Promise<LearningPageEvidenceDetailRead> => {\n\n return request<LearningPageEvidenceDetailRead>(getLearningPageEvidenceDetailUrl(historyId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningPageEvidenceDetailQueryKey = (historyId: number,) => {\n return [\n `/learning/history/pages/${historyId}`\n ] as const;\n }\n\n\nexport const getLearningPageEvidenceDetailQueryOptions = <TData = Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(historyId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningPageEvidenceDetailQueryKey(historyId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningPageEvidenceDetail>>> = ({ signal }) => learningPageEvidenceDetail(historyId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: historyId !== null && historyId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningPageEvidenceDetailQueryResult = NonNullable<Awaited<ReturnType<typeof learningPageEvidenceDetail>>>\nexport type LearningPageEvidenceDetailQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningPageEvidenceDetail<TData = Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n historyId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningPageEvidenceDetail>>,\n TError,\n Awaited<ReturnType<typeof learningPageEvidenceDetail>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningPageEvidenceDetail<TData = Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n historyId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningPageEvidenceDetail>>,\n TError,\n Awaited<ReturnType<typeof learningPageEvidenceDetail>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningPageEvidenceDetail<TData = Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n historyId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Read my historical page response evidence\n */\n\nexport function useLearningPageEvidenceDetail<TData = Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n historyId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPageEvidenceDetail>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningPageEvidenceDetailQueryOptions(historyId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningListScoreHistoryUrl = (params?: LearningListScoreHistoryParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n\n if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : String(value))\n }\n });\n\n const stringifiedParams = normalizedParams.toString();\n\n return stringifiedParams.length > 0 ? `/learning/history/scores?${stringifiedParams}` : `/learning/history/scores`\n}\n\n/**\n * Returns one stored summary per assessment in the effective profile's history, newest creation time first with assessmentId as tie-breaker. A native completion replaces its assessment's summary; this is not a best-score leaderboard. An imported aggregate may have historical=true and attemptId=null because no attempt evidence exists. assessment_id restricts the list to that assessment.\n * @summary List the profile's assessment score summaries\n */\nexport const learningListScoreHistory = async (params?: LearningListScoreHistoryParams, options?: Parameters<typeof request>[1]): Promise<LearningScoreSummaryPage> => {\n\n return request<LearningScoreSummaryPage>(getLearningListScoreHistoryUrl(params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningListScoreHistoryQueryKey = (params?: LearningListScoreHistoryParams,) => {\n return [\n `/learning/history/scores`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getLearningListScoreHistoryQueryOptions = <TData = Awaited<ReturnType<typeof learningListScoreHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(params?: LearningListScoreHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListScoreHistory>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningListScoreHistoryQueryKey(params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningListScoreHistory>>> = ({ signal }) => learningListScoreHistory(params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningListScoreHistory>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningListScoreHistoryQueryResult = NonNullable<Awaited<ReturnType<typeof learningListScoreHistory>>>\nexport type LearningListScoreHistoryQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningListScoreHistory<TData = Awaited<ReturnType<typeof learningListScoreHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params: undefined | LearningListScoreHistoryParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListScoreHistory>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningListScoreHistory>>,\n TError,\n Awaited<ReturnType<typeof learningListScoreHistory>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningListScoreHistory<TData = Awaited<ReturnType<typeof learningListScoreHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningListScoreHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListScoreHistory>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningListScoreHistory>>,\n TError,\n Awaited<ReturnType<typeof learningListScoreHistory>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningListScoreHistory<TData = Awaited<ReturnType<typeof learningListScoreHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningListScoreHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListScoreHistory>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary List the profile's assessment score summaries\n */\n\nexport function useLearningListScoreHistory<TData = Awaited<ReturnType<typeof learningListScoreHistory>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: LearningListScoreHistoryParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningListScoreHistory>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningListScoreHistoryQueryOptions(params,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningOpenLessonUrl = (lessonId: number,) => {\n\n\n\n\n return `/learning/lessons/${lessonId}/open`\n}\n\n/**\n * With sessionId, checks this profile's open course session and edition, renews its lease and selects the lesson for subsequent activity ticks. Without sessionId, both course previews and this lesson's freePreview must be enabled. Returns authorized media delivery URLs or HTML, public attachments and any vocabulary; corrections remain attempt-scoped. Delivery URLs may expire, so request fresh resources when reopening. A preview does not enroll the profile or record full-course consumption.\n * @summary Open lesson resources in a session or free preview\n */\nexport const learningOpenLesson = async (lessonId: number,\n learningLessonOpenWrite: LearningLessonOpenWrite, options?: Parameters<typeof request>[1]): Promise<LearningLessonOpenRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningLessonOpenRead>(getLearningOpenLessonUrl(lessonId),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(learningLessonOpenWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningOpenLessonMutationKey = () => ['learningOpenLesson'] as const;\n\nexport const getLearningOpenLessonMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningOpenLesson>>, TError,LearningOpenLessonMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningOpenLesson>>, TError,LearningOpenLessonMutationVariables, TContext> => {\n\nconst mutationKey = getLearningOpenLessonMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningOpenLesson>>, LearningOpenLessonMutationVariables> = (props) => {\n const {lessonId,data} = props ?? {};\n\n return learningOpenLesson(lessonId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningOpenLessonMutationResult = NonNullable<Awaited<ReturnType<typeof learningOpenLesson>>>\n export type LearningOpenLessonMutationBody = BodyType<LearningLessonOpenWrite>\n export type LearningOpenLessonMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningOpenLessonMutationVariables = {lessonId: number;data: BodyType<LearningLessonOpenWrite>}\n\n /**\n * @summary Open lesson resources in a session or free preview\n */\nexport const useLearningOpenLesson = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningOpenLesson>>, TError,LearningOpenLessonMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningOpenLesson>>,\n TError,\n LearningOpenLessonMutationVariables,\n TContext\n > => {\n return useMutation(getLearningOpenLessonMutationOptions(options), queryClient);\n }\n export const getLearningUpdateProgressUrl = (lessonId: number,) => {\n\n\n\n\n return `/learning/lessons/${lessonId}/progress`\n}\n\n/**\n * Requires full access to the profile's selected course edition and creates enrollment if needed. Omit note to retain it; send null to clear it. positionSeconds is allowed only for resource lessons and cannot exceed a known duration. completed=true marks only a resource lesson complete; assessment and vocabulary lessons require their own completion workflow. Completion is retained on later completed=false writes. Updates the resume lesson and recomputes course progress from required lessons.\n * @summary Save lesson notes, playback position or resource completion\n */\nexport const learningUpdateProgress = async (lessonId: number,\n lessonProgressWrite: LessonProgressWrite, options?: Parameters<typeof request>[1]): Promise<LessonProgressRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LessonProgressRead>(getLearningUpdateProgressUrl(lessonId),\n {\n ...options,\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(lessonProgressWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningUpdateProgressMutationKey = () => ['learningUpdateProgress'] as const;\n\nexport const getLearningUpdateProgressMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningUpdateProgress>>, TError,LearningUpdateProgressMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningUpdateProgress>>, TError,LearningUpdateProgressMutationVariables, TContext> => {\n\nconst mutationKey = getLearningUpdateProgressMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningUpdateProgress>>, LearningUpdateProgressMutationVariables> = (props) => {\n const {lessonId,data} = props ?? {};\n\n return learningUpdateProgress(lessonId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningUpdateProgressMutationResult = NonNullable<Awaited<ReturnType<typeof learningUpdateProgress>>>\n export type LearningUpdateProgressMutationBody = BodyType<LessonProgressWrite>\n export type LearningUpdateProgressMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningUpdateProgressMutationVariables = {lessonId: number;data: BodyType<LessonProgressWrite>}\n\n /**\n * @summary Save lesson notes, playback position or resource completion\n */\nexport const useLearningUpdateProgress = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningUpdateProgress>>, TError,LearningUpdateProgressMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningUpdateProgress>>,\n TError,\n LearningUpdateProgressMutationVariables,\n TContext\n > => {\n return useMutation(getLearningUpdateProgressMutationOptions(options), queryClient);\n }\n export const getLearningPathIntroductionUrl = (pathId: number,) => {\n\n\n\n\n return `/learning/paths/${pathId}/introduction`\n}\n\n/**\n * Returns a delivery descriptor, not the media bytes. The path must be active and at least one of its steps visible through the effective profile's catalogue access. Follow the returned URL promptly; delivery URLs may be temporary.\n * @summary Get a visible path's introduction resource\n */\nexport const learningPathIntroduction = async (pathId: number, options?: Parameters<typeof request>[1]): Promise<LearningAssetRead> => {\n\n return request<LearningAssetRead>(getLearningPathIntroductionUrl(pathId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningPathIntroductionQueryKey = (pathId: number,) => {\n return [\n `/learning/paths/${pathId}/introduction`\n ] as const;\n }\n\n\nexport const getLearningPathIntroductionQueryOptions = <TData = Awaited<ReturnType<typeof learningPathIntroduction>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(pathId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPathIntroduction>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningPathIntroductionQueryKey(pathId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningPathIntroduction>>> = ({ signal }) => learningPathIntroduction(pathId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: pathId !== null && pathId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningPathIntroduction>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningPathIntroductionQueryResult = NonNullable<Awaited<ReturnType<typeof learningPathIntroduction>>>\nexport type LearningPathIntroductionQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningPathIntroduction<TData = Awaited<ReturnType<typeof learningPathIntroduction>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n pathId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPathIntroduction>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningPathIntroduction>>,\n TError,\n Awaited<ReturnType<typeof learningPathIntroduction>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningPathIntroduction<TData = Awaited<ReturnType<typeof learningPathIntroduction>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n pathId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPathIntroduction>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningPathIntroduction>>,\n TError,\n Awaited<ReturnType<typeof learningPathIntroduction>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningPathIntroduction<TData = Awaited<ReturnType<typeof learningPathIntroduction>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n pathId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPathIntroduction>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Get a visible path's introduction resource\n */\n\nexport function useLearningPathIntroduction<TData = Awaited<ReturnType<typeof learningPathIntroduction>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n pathId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningPathIntroduction>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningPathIntroductionQueryOptions(pathId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningOpenPathStepUrl = (pathId: number,) => {\n\n\n\n\n return `/learning/paths/${pathId}/open`\n}\n\n/**\n * Sets the effective profile's current position to an active path's visible step, creating progress on first use. contentId must be a member of the path and pass existing catalogue visibility checks. This records navigation; the response is not a course reader payload. Support impersonation is rejected.\n * @summary Record my selected path step\n */\nexport const learningOpenPathStep = async (pathId: number,\n learningPathOpenWrite: LearningPathOpenWrite, options?: Parameters<typeof request>[1]): Promise<LearningPathProgressRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningPathProgressRead>(getLearningOpenPathStepUrl(pathId),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(learningPathOpenWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningOpenPathStepMutationKey = () => ['learningOpenPathStep'] as const;\n\nexport const getLearningOpenPathStepMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningOpenPathStep>>, TError,LearningOpenPathStepMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningOpenPathStep>>, TError,LearningOpenPathStepMutationVariables, TContext> => {\n\nconst mutationKey = getLearningOpenPathStepMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningOpenPathStep>>, LearningOpenPathStepMutationVariables> = (props) => {\n const {pathId,data} = props ?? {};\n\n return learningOpenPathStep(pathId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningOpenPathStepMutationResult = NonNullable<Awaited<ReturnType<typeof learningOpenPathStep>>>\n export type LearningOpenPathStepMutationBody = BodyType<LearningPathOpenWrite>\n export type LearningOpenPathStepMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningOpenPathStepMutationVariables = {pathId: number;data: BodyType<LearningPathOpenWrite>}\n\n /**\n * @summary Record my selected path step\n */\nexport const useLearningOpenPathStep = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningOpenPathStep>>, TError,LearningOpenPathStepMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningOpenPathStep>>,\n TError,\n LearningOpenPathStepMutationVariables,\n TContext\n > => {\n return useMutation(getLearningOpenPathStepMutationOptions(options), queryClient);\n }\n export const getLearningReadPathProgressUrl = (pathId: number,) => {\n\n\n\n\n return `/learning/paths/${pathId}/progress`\n}\n\n/**\n * Returns only the effective profile's recorded position and does not start the path. started=false means no progress row exists, including for an unknown path ID. position is zero-based. currentContentId is null when no recorded step is currently visible; a stored position may survive later curation changes.\n * @summary Read my current position in a path\n */\nexport const learningReadPathProgress = async (pathId: number, options?: Parameters<typeof request>[1]): Promise<LearningPathProgressRead> => {\n\n return request<LearningPathProgressRead>(getLearningReadPathProgressUrl(pathId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningReadPathProgressQueryKey = (pathId: number,) => {\n return [\n `/learning/paths/${pathId}/progress`\n ] as const;\n }\n\n\nexport const getLearningReadPathProgressQueryOptions = <TData = Awaited<ReturnType<typeof learningReadPathProgress>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(pathId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadPathProgress>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningReadPathProgressQueryKey(pathId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningReadPathProgress>>> = ({ signal }) => learningReadPathProgress(pathId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: pathId !== null && pathId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningReadPathProgress>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningReadPathProgressQueryResult = NonNullable<Awaited<ReturnType<typeof learningReadPathProgress>>>\nexport type LearningReadPathProgressQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningReadPathProgress<TData = Awaited<ReturnType<typeof learningReadPathProgress>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n pathId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadPathProgress>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadPathProgress>>,\n TError,\n Awaited<ReturnType<typeof learningReadPathProgress>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadPathProgress<TData = Awaited<ReturnType<typeof learningReadPathProgress>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n pathId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadPathProgress>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadPathProgress>>,\n TError,\n Awaited<ReturnType<typeof learningReadPathProgress>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadPathProgress<TData = Awaited<ReturnType<typeof learningReadPathProgress>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n pathId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadPathProgress>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Read my current position in a path\n */\n\nexport function useLearningReadPathProgress<TData = Awaited<ReturnType<typeof learningReadPathProgress>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n pathId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadPathProgress>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningReadPathProgressQueryOptions(pathId,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningCloseSessionUrl = (sessionId: number,) => {\n\n\n\n\n return `/learning/sessions/${sessionId}`\n}\n\n/**\n * Closes only a session owned by the effective profile and records closedAt. Repeating the close returns the same closed session. Enrollment, answers and lesson progress are retained; this operation does not mark a lesson complete.\n * @summary Close a course session and its consumption lease\n */\nexport const learningCloseSession = async (sessionId: number, options?: Parameters<typeof request>[1]): Promise<LearningSessionRead> => {\n\n return request<LearningSessionRead>(getLearningCloseSessionUrl(sessionId),\n {\n ...options,\n method: 'DELETE'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningCloseSessionMutationKey = () => ['learningCloseSession'] as const;\n\nexport const getLearningCloseSessionMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningCloseSession>>, TError,LearningCloseSessionMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningCloseSession>>, TError,LearningCloseSessionMutationVariables, TContext> => {\n\nconst mutationKey = getLearningCloseSessionMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningCloseSession>>, LearningCloseSessionMutationVariables> = (props) => {\n const {sessionId} = props ?? {};\n\n return learningCloseSession(sessionId,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningCloseSessionMutationResult = NonNullable<Awaited<ReturnType<typeof learningCloseSession>>>\n\n export type LearningCloseSessionMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningCloseSessionMutationVariables = {sessionId: number}\n\n /**\n * @summary Close a course session and its consumption lease\n */\nexport const useLearningCloseSession = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningCloseSession>>, TError,LearningCloseSessionMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningCloseSession>>,\n TError,\n LearningCloseSessionMutationVariables,\n TContext\n > => {\n return useMutation(getLearningCloseSessionMutationOptions(options), queryClient);\n }\n export const getLearningRecordActivityUrl = (sessionId: number,) => {\n\n\n\n\n return `/learning/sessions/${sessionId}/activity`\n}\n\n/**\n * Requires this profile's open session and the lesson most recently selected with the lesson-open operation. Renews the consumption lease. active=true records server-observed elapsed time since the previous heartbeat, capped at 60 seconds per tick; active=false moves the clock forward without adding time. activeSeconds is cumulative seconds, separate from lesson completion and playback position. Heartbeats have no request key; send them only for current activity.\n * @summary Record an activity heartbeat for the selected lesson\n */\nexport const learningRecordActivity = async (sessionId: number,\n learningActivityWrite: LearningActivityWrite, options?: Parameters<typeof request>[1]): Promise<LearningSessionRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningSessionRead>(getLearningRecordActivityUrl(sessionId),\n {\n ...options,\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(learningActivityWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningRecordActivityMutationKey = () => ['learningRecordActivity'] as const;\n\nexport const getLearningRecordActivityMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningRecordActivity>>, TError,LearningRecordActivityMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningRecordActivity>>, TError,LearningRecordActivityMutationVariables, TContext> => {\n\nconst mutationKey = getLearningRecordActivityMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningRecordActivity>>, LearningRecordActivityMutationVariables> = (props) => {\n const {sessionId,data} = props ?? {};\n\n return learningRecordActivity(sessionId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningRecordActivityMutationResult = NonNullable<Awaited<ReturnType<typeof learningRecordActivity>>>\n export type LearningRecordActivityMutationBody = BodyType<LearningActivityWrite>\n export type LearningRecordActivityMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningRecordActivityMutationVariables = {sessionId: number;data: BodyType<LearningActivityWrite>}\n\n /**\n * @summary Record an activity heartbeat for the selected lesson\n */\nexport const useLearningRecordActivity = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningRecordActivity>>, TError,LearningRecordActivityMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningRecordActivity>>,\n TError,\n LearningRecordActivityMutationVariables,\n TContext\n > => {\n return useMutation(getLearningRecordActivityMutationOptions(options), queryClient);\n }\n export const getLearningUploadBytesUrl = (uploadId: number,) => {\n\n\n\n\n return `/learning/uploads/${uploadId}/body`\n}\n\n/**\n * Send an authenticated raw binary PUT, not multipart or JSON, to the reservation's uploadUrl before expiresAt. The byte count must exactly match sizeBytes; file signatures are checked against the reserved MIME type and captions must be valid UTF-8 WebVTT. Ownership and upload purpose are rechecked. A same-byte replay before expiry returns the existing immutable asset; different bytes cannot overwrite it. The JSON response contains the asset ID for a course definition or reflection answer, without issuing a delivery URL.\n * @summary Upload the exact bytes of a reserved file\n */\nexport const learningUploadBytes = async (uploadId: number,\n learningUploadBytesBody: Blob, options?: Parameters<typeof request>[1]): Promise<LearningAssetRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<LearningAssetRead>(getLearningUploadBytesUrl(uploadId),\n {\n ...options,\n method: 'PUT',\n headers: { 'Content-Type': 'application/octet-stream', ...getHeaders(options?.headers) },\n body: learningUploadBytesBody\n }\n);}\n\n\n\n\n\nexport const getLearningUploadBytesMutationKey = () => ['learningUploadBytes'] as const;\n\nexport const getLearningUploadBytesMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningUploadBytes>>, TError,LearningUploadBytesMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningUploadBytes>>, TError,LearningUploadBytesMutationVariables, TContext> => {\n\nconst mutationKey = getLearningUploadBytesMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningUploadBytes>>, LearningUploadBytesMutationVariables> = (props) => {\n const {uploadId,data} = props ?? {};\n\n return learningUploadBytes(uploadId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningUploadBytesMutationResult = NonNullable<Awaited<ReturnType<typeof learningUploadBytes>>>\n export type LearningUploadBytesMutationBody = BodyType<Blob>\n export type LearningUploadBytesMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningUploadBytesMutationVariables = {uploadId: number;data: BodyType<Blob>}\n\n /**\n * @summary Upload the exact bytes of a reserved file\n */\nexport const useLearningUploadBytes = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningUploadBytes>>, TError,LearningUploadBytesMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningUploadBytes>>,\n TError,\n LearningUploadBytesMutationVariables,\n TContext\n > => {\n return useMutation(getLearningUploadBytesMutationOptions(options), queryClient);\n }\n export const getLearningReadVocabularyUrl = (vocabularyId: number,\n params: LearningReadVocabularyParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n\n if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : String(value))\n }\n });\n\n const stringifiedParams = normalizedParams.toString();\n\n return stringifiedParams.length > 0 ? `/learning/vocabularies/${vocabularyId}?${stringifiedParams}` : `/learning/vocabularies/${vocabularyId}`\n}\n\n/**\n * lesson_id must identify a lesson using this vocabulary directly or as an attachment. Full reads return the profile's position and completion evidence. preview=true additionally requires that lesson's free-preview permission and omits saved personal progress. Entries are ordered by position then entry ID; term media IDs must be resolved through the vocabulary resource operation.\n * @summary Read vocabulary through an authorized lesson\n */\nexport const learningReadVocabulary = async (vocabularyId: number,\n params: LearningReadVocabularyParams, options?: Parameters<typeof request>[1]): Promise<LearningVocabularyRead> => {\n\n return request<LearningVocabularyRead>(getLearningReadVocabularyUrl(vocabularyId,params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningReadVocabularyQueryKey = (vocabularyId: number,\n params?: LearningReadVocabularyParams,) => {\n return [\n `/learning/vocabularies/${vocabularyId}`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getLearningReadVocabularyQueryOptions = <TData = Awaited<ReturnType<typeof learningReadVocabulary>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(vocabularyId: number,\n params: LearningReadVocabularyParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadVocabulary>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningReadVocabularyQueryKey(vocabularyId,params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningReadVocabulary>>> = ({ signal }) => learningReadVocabulary(vocabularyId,params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: vocabularyId !== null && vocabularyId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningReadVocabulary>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningReadVocabularyQueryResult = NonNullable<Awaited<ReturnType<typeof learningReadVocabulary>>>\nexport type LearningReadVocabularyQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningReadVocabulary<TData = Awaited<ReturnType<typeof learningReadVocabulary>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n vocabularyId: number,\n params: LearningReadVocabularyParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadVocabulary>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadVocabulary>>,\n TError,\n Awaited<ReturnType<typeof learningReadVocabulary>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadVocabulary<TData = Awaited<ReturnType<typeof learningReadVocabulary>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n vocabularyId: number,\n params: LearningReadVocabularyParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadVocabulary>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningReadVocabulary>>,\n TError,\n Awaited<ReturnType<typeof learningReadVocabulary>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningReadVocabulary<TData = Awaited<ReturnType<typeof learningReadVocabulary>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n vocabularyId: number,\n params: LearningReadVocabularyParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadVocabulary>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Read vocabulary through an authorized lesson\n */\n\nexport function useLearningReadVocabulary<TData = Awaited<ReturnType<typeof learningReadVocabulary>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n vocabularyId: number,\n params: LearningReadVocabularyParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningReadVocabulary>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningReadVocabularyQueryOptions(vocabularyId,params,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningVocabularyResourceUrl = (vocabularyId: number,\n assetId: number,\n params: LearningVocabularyResourceParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n\n if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : String(value))\n }\n });\n\n const stringifiedParams = normalizedParams.toString();\n\n return stringifiedParams.length > 0 ? `/learning/vocabularies/${vocabularyId}/assets/${assetId}?${stringifiedParams}` : `/learning/vocabularies/${vocabularyId}/assets/${assetId}`\n}\n\n/**\n * Checks vocabulary and lesson context exactly as the vocabulary read operation, including preview permission when preview=true. assetId must be audio or image referenced by a term or translation in this vocabulary; knowing a media ID alone grants no access. Returns delivery metadata with a potentially expiring URL.\n * @summary Resolve a vocabulary term's audio or image\n */\nexport const learningVocabularyResource = async (vocabularyId: number,\n assetId: number,\n params: LearningVocabularyResourceParams, options?: Parameters<typeof request>[1]): Promise<LearningAssetRead> => {\n\n return request<LearningAssetRead>(getLearningVocabularyResourceUrl(vocabularyId,assetId,params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getLearningVocabularyResourceQueryKey = (vocabularyId: number,\n assetId: number,\n params?: LearningVocabularyResourceParams,) => {\n return [\n `/learning/vocabularies/${vocabularyId}/assets/${assetId}`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getLearningVocabularyResourceQueryOptions = <TData = Awaited<ReturnType<typeof learningVocabularyResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(vocabularyId: number,\n assetId: number,\n params: LearningVocabularyResourceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningVocabularyResource>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getLearningVocabularyResourceQueryKey(vocabularyId,assetId,params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof learningVocabularyResource>>> = ({ signal }) => learningVocabularyResource(vocabularyId,assetId,params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: vocabularyId !== null && vocabularyId !== undefined && assetId !== null && assetId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof learningVocabularyResource>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type LearningVocabularyResourceQueryResult = NonNullable<Awaited<ReturnType<typeof learningVocabularyResource>>>\nexport type LearningVocabularyResourceQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useLearningVocabularyResource<TData = Awaited<ReturnType<typeof learningVocabularyResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n vocabularyId: number,\n assetId: number,\n params: LearningVocabularyResourceParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningVocabularyResource>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningVocabularyResource>>,\n TError,\n Awaited<ReturnType<typeof learningVocabularyResource>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningVocabularyResource<TData = Awaited<ReturnType<typeof learningVocabularyResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n vocabularyId: number,\n assetId: number,\n params: LearningVocabularyResourceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningVocabularyResource>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof learningVocabularyResource>>,\n TError,\n Awaited<ReturnType<typeof learningVocabularyResource>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useLearningVocabularyResource<TData = Awaited<ReturnType<typeof learningVocabularyResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n vocabularyId: number,\n assetId: number,\n params: LearningVocabularyResourceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningVocabularyResource>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Resolve a vocabulary term's audio or image\n */\n\nexport function useLearningVocabularyResource<TData = Awaited<ReturnType<typeof learningVocabularyResource>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n vocabularyId: number,\n assetId: number,\n params: LearningVocabularyResourceParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof learningVocabularyResource>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getLearningVocabularyResourceQueryOptions(vocabularyId,assetId,params,options)\n\n const query = useQuery(queryOptions, queryClient) as UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> };\n\n return withQueryKey(query, queryOptions.queryKey);\n}\n\n\n\n\n\n\nexport const getLearningUpdateVocabularyUrl = (vocabularyId: number,) => {\n\n\n\n\n return `/learning/vocabularies/${vocabularyId}/progress`\n}\n\n/**\n * Requires full access through lessonId and creates course enrollment if needed. position is a cursor from 0 through the entry count; completed=true requires a nonempty vocabulary and position exactly equal to its entry count. Completion is retained on subsequent writes. Completing the lesson's primary vocabulary also completes that lesson; completing an attached vocabulary does not. Updates the resume lesson and recomputes required-lesson progress.\n * @summary Save vocabulary position or completion\n */\nexport const learningUpdateVocabulary = async (vocabularyId: number,\n vocabularyProgressWrite: VocabularyProgressWrite, options?: Parameters<typeof request>[1]): Promise<VocabularyProgressRead> => {\n\n const getHeaders = (h?: NonNullable<RequestInit['headers']>): Record<string, string | readonly string[]> => {\n if (!h) return {};\n if (h instanceof Headers) return Object.fromEntries(h.entries());\n if (Symbol.iterator in h) {\n return Object.fromEntries(\n Array.from(h as Iterable<Iterable<string>>, (entry) => Array.from(entry) as [string, string]),\n );\n }\n const headers: Record<string, string | readonly string[]> = {};\n for (const [name, value] of Object.entries<string | readonly string[] | undefined>(h)) {\n if (value !== undefined) headers[name] = value;\n }\n return headers;\n };\nreturn request<VocabularyProgressRead>(getLearningUpdateVocabularyUrl(vocabularyId),\n {\n ...options,\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(vocabularyProgressWrite)\n }\n);}\n\n\n\n\n\nexport const getLearningUpdateVocabularyMutationKey = () => ['learningUpdateVocabulary'] as const;\n\nexport const getLearningUpdateVocabularyMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningUpdateVocabulary>>, TError,LearningUpdateVocabularyMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof learningUpdateVocabulary>>, TError,LearningUpdateVocabularyMutationVariables, TContext> => {\n\nconst mutationKey = getLearningUpdateVocabularyMutationKey();\nconst {mutation: mutationOptions, request: requestOptions} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }, request: undefined};\n\n\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<typeof learningUpdateVocabulary>>, LearningUpdateVocabularyMutationVariables> = (props) => {\n const {vocabularyId,data} = props ?? {};\n\n return learningUpdateVocabulary(vocabularyId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type LearningUpdateVocabularyMutationResult = NonNullable<Awaited<ReturnType<typeof learningUpdateVocabulary>>>\n export type LearningUpdateVocabularyMutationBody = BodyType<VocabularyProgressWrite>\n export type LearningUpdateVocabularyMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type LearningUpdateVocabularyMutationVariables = {vocabularyId: number;data: BodyType<VocabularyProgressWrite>}\n\n /**\n * @summary Save vocabulary position or completion\n */\nexport const useLearningUpdateVocabulary = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof learningUpdateVocabulary>>, TError,LearningUpdateVocabularyMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof learningUpdateVocabulary>>,\n TError,\n LearningUpdateVocabularyMutationVariables,\n TContext\n > => {\n return useMutation(getLearningUpdateVocabularyMutationOptions(options), queryClient);\n }\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
2
|
+
import { Bp as CategoryListRead, Ec as HistoryPage, Hr as ListHistoryParams, Ic as FavoritePage, Jr as ListBiblioFavoritesParams, Sn as PreferencesRead, Vc as FavoriteAddWrite, Yr as ListBiblioCategoriesParams, a as ValidationErrorResponse, ar as PackListRead, fc as HTTPExceptionResponse, ft as RemoveBiblioFavoriteParams, zp as CategoryPreferencesWrite } from "../chunks/index.js";
|
|
3
3
|
import { a as ErrorType, c as request, n as BodyType } from "../chunks/client.js";
|
|
4
4
|
import { DataTag, DefinedInitialDataOptions, DefinedUseQueryResult, QueryClient, QueryKey, UndefinedInitialDataOptions, UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult } from "@tanstack/react-query";
|
|
5
5
|
//#region src/react/biblio-library/biblio-library.d.ts
|
|
@@ -7,7 +7,7 @@ import { useMutation, useQuery } from "@tanstack/react-query";
|
|
|
7
7
|
* Do not edit manually.
|
|
8
8
|
* Mozaik backend
|
|
9
9
|
* Four products behind one API — Biblio, Médiathèques, the partner catalogues (Nextory and YouScribe) and Prof Express. Authentication is Keycloak SSO only, once, for all of them: see the **auth** section below for the browser flow and the three failure modes.
|
|
10
|
-
* OpenAPI spec version: 0.
|
|
10
|
+
* OpenAPI spec version: 0.13.0
|
|
11
11
|
*/
|
|
12
12
|
const withQueryKey = (query, queryKey) => {
|
|
13
13
|
const result = { queryKey };
|