@learnorama/mozaik-sdk 0.14.2-staging.52.1 → 0.15.0-staging.53.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.
Files changed (282) hide show
  1. package/README.md +17 -11
  2. package/dist/api/account.d.ts +1 -1
  3. package/dist/api/account.js.map +1 -1
  4. package/dist/api/admin-catalogue.d.ts +1 -1
  5. package/dist/api/admin-catalogue.js.map +1 -1
  6. package/dist/api/admin-consumption.d.ts +1 -1
  7. package/dist/api/admin-consumption.js.map +1 -1
  8. package/dist/api/admin-contracts.d.ts +1 -1
  9. package/dist/api/admin-contracts.js.map +1 -1
  10. package/dist/api/admin-customer.d.ts +1 -1
  11. package/dist/api/admin-customer.js.map +1 -1
  12. package/dist/api/admin-desk.d.ts +1 -1
  13. package/dist/api/admin-desk.js.map +1 -1
  14. package/dist/api/admin-licenses.js.map +1 -1
  15. package/dist/api/admin-partner-selections.d.ts +1 -1
  16. package/dist/api/admin-partner-selections.js.map +1 -1
  17. package/dist/api/admin-patrons.d.ts +1 -1
  18. package/dist/api/admin-patrons.js.map +1 -1
  19. package/dist/api/admin-reviews.d.ts +1 -1
  20. package/dist/api/admin-reviews.js.map +1 -1
  21. package/dist/api/admin-roles.d.ts +1 -1
  22. package/dist/api/admin-roles.js.map +1 -1
  23. package/dist/api/admin-support.d.ts +1 -1
  24. package/dist/api/admin-support.js.map +1 -1
  25. package/dist/api/admin-tenants.js.map +1 -1
  26. package/dist/api/admin-tutoring.d.ts +1 -1
  27. package/dist/api/admin-tutoring.js.map +1 -1
  28. package/dist/api/auth-device.d.ts +1 -1
  29. package/dist/api/auth-device.js.map +1 -1
  30. package/dist/api/auth.d.ts +1 -1
  31. package/dist/api/auth.js.map +1 -1
  32. package/dist/api/biblio-billing-webhooks.d.ts +1 -1
  33. package/dist/api/biblio-billing-webhooks.js.map +1 -1
  34. package/dist/api/biblio-billing.d.ts +1 -1
  35. package/dist/api/biblio-billing.js.map +1 -1
  36. package/dist/api/biblio-catalogue.d.ts +1 -1
  37. package/dist/api/biblio-catalogue.js.map +1 -1
  38. package/dist/api/biblio-home.d.ts +1 -1
  39. package/dist/api/biblio-home.js.map +1 -1
  40. package/dist/api/biblio-learning-author-profiles.d.ts +1 -1
  41. package/dist/api/biblio-learning-author-profiles.js.map +1 -1
  42. package/dist/api/biblio-learning-authoring.d.ts +1 -1
  43. package/dist/api/biblio-learning-authoring.js.map +1 -1
  44. package/dist/api/biblio-learning-editorial.d.ts +1 -1
  45. package/dist/api/biblio-learning-editorial.js.map +1 -1
  46. package/dist/api/biblio-learning-feedback.d.ts +1 -1
  47. package/dist/api/biblio-learning-feedback.js.map +1 -1
  48. package/dist/api/biblio-learning-finance.d.ts +1 -1
  49. package/dist/api/biblio-learning-finance.js.map +1 -1
  50. package/dist/api/biblio-learning-integrations.d.ts +1 -1
  51. package/dist/api/biblio-learning-integrations.js.map +1 -1
  52. package/dist/api/biblio-learning-membership.d.ts +1 -1
  53. package/dist/api/biblio-learning-membership.js.map +1 -1
  54. package/dist/api/biblio-learning.d.ts +1 -1
  55. package/dist/api/biblio-learning.js.map +1 -1
  56. package/dist/api/biblio-library.d.ts +1 -1
  57. package/dist/api/biblio-library.js.map +1 -1
  58. package/dist/api/biblio-nextory.d.ts +1 -1
  59. package/dist/api/biblio-nextory.js.map +1 -1
  60. package/dist/api/biblio-press.d.ts +1 -1
  61. package/dist/api/biblio-press.js.map +1 -1
  62. package/dist/api/biblio-search.js.map +1 -1
  63. package/dist/api/biblio-telemetry.js.map +1 -1
  64. package/dist/api/biblio-youscribe.d.ts +51 -0
  65. package/dist/api/biblio-youscribe.js +66 -0
  66. package/dist/api/biblio-youscribe.js.map +1 -0
  67. package/dist/api/consumption.d.ts +1 -1
  68. package/dist/api/consumption.js.map +1 -1
  69. package/dist/api/cvs-app.d.ts +1 -1
  70. package/dist/api/cvs-app.js.map +1 -1
  71. package/dist/api/cvs-documents.d.ts +1 -1
  72. package/dist/api/cvs-documents.js.map +1 -1
  73. package/dist/api/cvs-favorites.d.ts +1 -1
  74. package/dist/api/cvs-favorites.js.map +1 -1
  75. package/dist/api/cvs-ils.d.ts +1 -1
  76. package/dist/api/cvs-ils.js.map +1 -1
  77. package/dist/api/cvs-loans.d.ts +1 -1
  78. package/dist/api/cvs-loans.js.map +1 -1
  79. package/dist/api/cvs-payments.d.ts +1 -1
  80. package/dist/api/cvs-payments.js.map +1 -1
  81. package/dist/api/cvs-streaming.js.map +1 -1
  82. package/dist/api/index.d.ts +5 -3
  83. package/dist/api/index.js +5 -3
  84. package/dist/api/partner-catalogue.d.ts +21 -1
  85. package/dist/api/partner-catalogue.js +28 -1
  86. package/dist/api/partner-catalogue.js.map +1 -1
  87. package/dist/api/partner-reader-nextory.d.ts +52 -0
  88. package/dist/api/partner-reader-nextory.js +92 -0
  89. package/dist/api/partner-reader-nextory.js.map +1 -0
  90. package/dist/api/partner-reader-youscribe.d.ts +63 -0
  91. package/dist/api/partner-reader-youscribe.js +97 -0
  92. package/dist/api/partner-reader-youscribe.js.map +1 -0
  93. package/dist/api/profiles.d.ts +1 -1
  94. package/dist/api/profiles.js.map +1 -1
  95. package/dist/api/search.d.ts +6 -1
  96. package/dist/api/search.js +10 -1
  97. package/dist/api/search.js.map +1 -1
  98. package/dist/api/tutoring-catalogue.d.ts +1 -1
  99. package/dist/api/tutoring-catalogue.js.map +1 -1
  100. package/dist/api/tutoring-chat.d.ts +1 -1
  101. package/dist/api/tutoring-chat.js.map +1 -1
  102. package/dist/api/tutoring-dispatch.d.ts +1 -1
  103. package/dist/api/tutoring-dispatch.js.map +1 -1
  104. package/dist/api/tutoring-practitioner.js.map +1 -1
  105. package/dist/api/tutoring-requests.d.ts +1 -1
  106. package/dist/api/tutoring-requests.js.map +1 -1
  107. package/dist/auth.d.ts +1 -1
  108. package/dist/chunks/client2.d.ts +1 -1
  109. package/dist/chunks/connection.d.ts +1 -1
  110. package/dist/chunks/index.d.ts +542 -508
  111. package/dist/index.d.ts +3 -3
  112. package/dist/index.js +3 -3
  113. package/dist/index.js.map +1 -1
  114. package/dist/models.d.ts +2 -2
  115. package/dist/models.js +7 -1
  116. package/dist/models.js.map +1 -1
  117. package/dist/react/account.d.ts +1 -1
  118. package/dist/react/account.js +1 -1
  119. package/dist/react/account.js.map +1 -1
  120. package/dist/react/admin-catalogue.d.ts +1 -1
  121. package/dist/react/admin-catalogue.js +1 -1
  122. package/dist/react/admin-catalogue.js.map +1 -1
  123. package/dist/react/admin-consumption.d.ts +1 -1
  124. package/dist/react/admin-consumption.js +1 -1
  125. package/dist/react/admin-consumption.js.map +1 -1
  126. package/dist/react/admin-contracts.d.ts +1 -1
  127. package/dist/react/admin-contracts.js +1 -1
  128. package/dist/react/admin-contracts.js.map +1 -1
  129. package/dist/react/admin-customer.d.ts +1 -1
  130. package/dist/react/admin-customer.js +1 -1
  131. package/dist/react/admin-customer.js.map +1 -1
  132. package/dist/react/admin-desk.d.ts +1 -1
  133. package/dist/react/admin-desk.js +1 -1
  134. package/dist/react/admin-desk.js.map +1 -1
  135. package/dist/react/admin-licenses.d.ts +1 -1
  136. package/dist/react/admin-licenses.js +1 -1
  137. package/dist/react/admin-licenses.js.map +1 -1
  138. package/dist/react/admin-partner-selections.d.ts +1 -1
  139. package/dist/react/admin-partner-selections.js +1 -1
  140. package/dist/react/admin-partner-selections.js.map +1 -1
  141. package/dist/react/admin-patrons.d.ts +1 -1
  142. package/dist/react/admin-patrons.js +1 -1
  143. package/dist/react/admin-patrons.js.map +1 -1
  144. package/dist/react/admin-reviews.d.ts +1 -1
  145. package/dist/react/admin-reviews.js +1 -1
  146. package/dist/react/admin-reviews.js.map +1 -1
  147. package/dist/react/admin-roles.d.ts +1 -1
  148. package/dist/react/admin-roles.js +1 -1
  149. package/dist/react/admin-roles.js.map +1 -1
  150. package/dist/react/admin-support.d.ts +1 -1
  151. package/dist/react/admin-support.js +1 -1
  152. package/dist/react/admin-support.js.map +1 -1
  153. package/dist/react/admin-tenants.d.ts +1 -1
  154. package/dist/react/admin-tenants.js +1 -1
  155. package/dist/react/admin-tenants.js.map +1 -1
  156. package/dist/react/admin-tutoring.d.ts +1 -1
  157. package/dist/react/admin-tutoring.js +1 -1
  158. package/dist/react/admin-tutoring.js.map +1 -1
  159. package/dist/react/auth-device.d.ts +1 -1
  160. package/dist/react/auth-device.js +1 -1
  161. package/dist/react/auth-device.js.map +1 -1
  162. package/dist/react/auth.d.ts +1 -1
  163. package/dist/react/auth.js +1 -1
  164. package/dist/react/auth.js.map +1 -1
  165. package/dist/react/biblio-billing-webhooks.d.ts +1 -1
  166. package/dist/react/biblio-billing-webhooks.js +1 -1
  167. package/dist/react/biblio-billing-webhooks.js.map +1 -1
  168. package/dist/react/biblio-billing.d.ts +1 -1
  169. package/dist/react/biblio-billing.js +1 -1
  170. package/dist/react/biblio-billing.js.map +1 -1
  171. package/dist/react/biblio-catalogue.d.ts +1 -1
  172. package/dist/react/biblio-catalogue.js +1 -1
  173. package/dist/react/biblio-catalogue.js.map +1 -1
  174. package/dist/react/biblio-home.d.ts +1 -1
  175. package/dist/react/biblio-home.js +1 -1
  176. package/dist/react/biblio-home.js.map +1 -1
  177. package/dist/react/biblio-learning-author-profiles.d.ts +1 -1
  178. package/dist/react/biblio-learning-author-profiles.js +1 -1
  179. package/dist/react/biblio-learning-author-profiles.js.map +1 -1
  180. package/dist/react/biblio-learning-authoring.d.ts +1 -1
  181. package/dist/react/biblio-learning-authoring.js +1 -1
  182. package/dist/react/biblio-learning-authoring.js.map +1 -1
  183. package/dist/react/biblio-learning-editorial.d.ts +1 -1
  184. package/dist/react/biblio-learning-editorial.js +1 -1
  185. package/dist/react/biblio-learning-editorial.js.map +1 -1
  186. package/dist/react/biblio-learning-feedback.d.ts +1 -1
  187. package/dist/react/biblio-learning-feedback.js +1 -1
  188. package/dist/react/biblio-learning-feedback.js.map +1 -1
  189. package/dist/react/biblio-learning-finance.d.ts +1 -1
  190. package/dist/react/biblio-learning-finance.js +1 -1
  191. package/dist/react/biblio-learning-finance.js.map +1 -1
  192. package/dist/react/biblio-learning-integrations.d.ts +1 -1
  193. package/dist/react/biblio-learning-integrations.js +1 -1
  194. package/dist/react/biblio-learning-integrations.js.map +1 -1
  195. package/dist/react/biblio-learning-membership.d.ts +1 -1
  196. package/dist/react/biblio-learning-membership.js +1 -1
  197. package/dist/react/biblio-learning-membership.js.map +1 -1
  198. package/dist/react/biblio-learning.d.ts +1 -1
  199. package/dist/react/biblio-learning.js +1 -1
  200. package/dist/react/biblio-learning.js.map +1 -1
  201. package/dist/react/biblio-library.d.ts +1 -1
  202. package/dist/react/biblio-library.js +1 -1
  203. package/dist/react/biblio-library.js.map +1 -1
  204. package/dist/react/biblio-nextory.d.ts +1 -1
  205. package/dist/react/biblio-nextory.js +1 -1
  206. package/dist/react/biblio-nextory.js.map +1 -1
  207. package/dist/react/biblio-press.d.ts +1 -1
  208. package/dist/react/biblio-press.js +1 -1
  209. package/dist/react/biblio-press.js.map +1 -1
  210. package/dist/react/biblio-search.d.ts +1 -1
  211. package/dist/react/biblio-search.js +1 -1
  212. package/dist/react/biblio-search.js.map +1 -1
  213. package/dist/react/biblio-telemetry.d.ts +1 -1
  214. package/dist/react/biblio-telemetry.js +1 -1
  215. package/dist/react/biblio-telemetry.js.map +1 -1
  216. package/dist/react/biblio-youscribe.d.ts +81 -0
  217. package/dist/react/biblio-youscribe.js +128 -0
  218. package/dist/react/biblio-youscribe.js.map +1 -0
  219. package/dist/react/chat.d.ts +1 -1
  220. package/dist/react/consumption.d.ts +1 -1
  221. package/dist/react/consumption.js +1 -1
  222. package/dist/react/consumption.js.map +1 -1
  223. package/dist/react/cvs-app.d.ts +1 -1
  224. package/dist/react/cvs-app.js +1 -1
  225. package/dist/react/cvs-app.js.map +1 -1
  226. package/dist/react/cvs-documents.d.ts +1 -1
  227. package/dist/react/cvs-documents.js +1 -1
  228. package/dist/react/cvs-documents.js.map +1 -1
  229. package/dist/react/cvs-favorites.d.ts +1 -1
  230. package/dist/react/cvs-favorites.js +1 -1
  231. package/dist/react/cvs-favorites.js.map +1 -1
  232. package/dist/react/cvs-ils.d.ts +1 -1
  233. package/dist/react/cvs-ils.js +1 -1
  234. package/dist/react/cvs-ils.js.map +1 -1
  235. package/dist/react/cvs-loans.d.ts +1 -1
  236. package/dist/react/cvs-loans.js +1 -1
  237. package/dist/react/cvs-loans.js.map +1 -1
  238. package/dist/react/cvs-payments.d.ts +1 -1
  239. package/dist/react/cvs-payments.js +1 -1
  240. package/dist/react/cvs-payments.js.map +1 -1
  241. package/dist/react/cvs-streaming.d.ts +1 -1
  242. package/dist/react/cvs-streaming.js +1 -1
  243. package/dist/react/cvs-streaming.js.map +1 -1
  244. package/dist/react/index.d.ts +5 -3
  245. package/dist/react/index.js +5 -3
  246. package/dist/react/partner-catalogue.d.ts +48 -1
  247. package/dist/react/partner-catalogue.js +54 -2
  248. package/dist/react/partner-catalogue.js.map +1 -1
  249. package/dist/react/partner-reader-nextory.d.ts +127 -0
  250. package/dist/react/partner-reader-nextory.js +190 -0
  251. package/dist/react/partner-reader-nextory.js.map +1 -0
  252. package/dist/react/partner-reader-youscribe.d.ts +152 -0
  253. package/dist/react/partner-reader-youscribe.js +224 -0
  254. package/dist/react/partner-reader-youscribe.js.map +1 -0
  255. package/dist/react/profiles.d.ts +1 -1
  256. package/dist/react/profiles.js +1 -1
  257. package/dist/react/profiles.js.map +1 -1
  258. package/dist/react/search.d.ts +6 -1
  259. package/dist/react/search.js +11 -2
  260. package/dist/react/search.js.map +1 -1
  261. package/dist/react/tutoring-catalogue.d.ts +1 -1
  262. package/dist/react/tutoring-catalogue.js +1 -1
  263. package/dist/react/tutoring-catalogue.js.map +1 -1
  264. package/dist/react/tutoring-chat.d.ts +1 -1
  265. package/dist/react/tutoring-chat.js +1 -1
  266. package/dist/react/tutoring-chat.js.map +1 -1
  267. package/dist/react/tutoring-dispatch.d.ts +1 -1
  268. package/dist/react/tutoring-dispatch.js +1 -1
  269. package/dist/react/tutoring-dispatch.js.map +1 -1
  270. package/dist/react/tutoring-practitioner.d.ts +1 -1
  271. package/dist/react/tutoring-practitioner.js +1 -1
  272. package/dist/react/tutoring-practitioner.js.map +1 -1
  273. package/dist/react/tutoring-requests.d.ts +1 -1
  274. package/dist/react/tutoring-requests.js +1 -1
  275. package/dist/react/tutoring-requests.js.map +1 -1
  276. package/package.json +7 -7
  277. package/dist/api/partner-reader.d.ts +0 -96
  278. package/dist/api/partner-reader.js +0 -164
  279. package/dist/api/partner-reader.js.map +0 -1
  280. package/dist/react/partner-reader.d.ts +0 -261
  281. package/dist/react/partner-reader.js +0 -368
  282. package/dist/react/partner-reader.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tutoring-requests.js","names":[],"sources":["../../src/react/tutoring-requests/tutoring-requests.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.14.2\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 BodyUploadAttachment,\n HTTPExceptionResponse,\n ListMyRequestsParams,\n TutoringAttachmentRead,\n TutoringFeedbackWrite,\n TutoringRequestPage,\n TutoringRequestRead,\n TutoringRequestWrite,\n ValidationErrorResponse\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 getListMyRequestsUrl = (params?: ListMyRequestsParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n const explodeParameters = [\"status\"];\n\n if (Array.isArray(value) && explodeParameters.includes(key)) {\n value.forEach((v) => {\n normalizedParams.append(key, v === null ? 'null' : String(v));\n });\n return;\n }\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 ? `/tutoring/requests?${stringifiedParams}` : `/tutoring/requests`\n}\n\n/**\n * The caller's own requests, newest first.\n *\n * Includes requests they submitted for a child profile, which is what the\n * ``requested_by_id`` half of the predicate is for — a parent's list should not\n * go empty the moment they ask on somebody else's behalf.\n * @summary List My Requests\n */\nexport const listMyRequests = async (params?: ListMyRequestsParams, options?: Parameters<typeof request>[1]): Promise<TutoringRequestPage> => {\n\n return request<TutoringRequestPage>(getListMyRequestsUrl(params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getListMyRequestsQueryKey = (params?: ListMyRequestsParams,) => {\n return [\n `/tutoring/requests`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getListMyRequestsQueryOptions = <TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(params?: ListMyRequestsParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getListMyRequestsQueryKey(params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof listMyRequests>>> = ({ signal }) => listMyRequests(params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type ListMyRequestsQueryResult = NonNullable<Awaited<ReturnType<typeof listMyRequests>>>\nexport type ListMyRequestsQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useListMyRequests<TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params: undefined | ListMyRequestsParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof listMyRequests>>,\n TError,\n Awaited<ReturnType<typeof listMyRequests>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useListMyRequests<TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: ListMyRequestsParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof listMyRequests>>,\n TError,\n Awaited<ReturnType<typeof listMyRequests>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useListMyRequests<TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: ListMyRequestsParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary List My Requests\n */\n\nexport function useListMyRequests<TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: ListMyRequestsParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getListMyRequestsQueryOptions(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 getSubmitRequestUrl = () => {\n\n\n\n\n return `/tutoring/requests`\n}\n\n/**\n * Ask for help.\n *\n * Debits the tenant's tutoring entitlement, which is what makes this a ``409``\n * when the allowance is spent rather than a queued request nobody may answer.\n * ``403`` from the entitlement layer is reported as ``404`` for the subject, per\n * the convention the loan routes already follow.\n *\n * ``onBehalfOfId`` must name a profile of the caller. Anything else is ``403``:\n * the legacy accepts a ``user_id`` in the body and trusts it, which is an\n * authorization decision made by whoever wrote the client.\n * @summary Submit Request\n */\nexport const submitRequest = async (tutoringRequestWrite: TutoringRequestWrite, options?: Parameters<typeof request>[1]): Promise<TutoringRequestRead> => {\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<TutoringRequestRead>(getSubmitRequestUrl(),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(tutoringRequestWrite)\n }\n);}\n\n\n\n\n\nexport const getSubmitRequestMutationKey = () => ['submitRequest'] as const;\n\nexport const getSubmitRequestMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof submitRequest>>, TError,SubmitRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof submitRequest>>, TError,SubmitRequestMutationVariables, TContext> => {\n\nconst mutationKey = getSubmitRequestMutationKey();\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 submitRequest>>, SubmitRequestMutationVariables> = (props) => {\n const {data} = props ?? {};\n\n return submitRequest(data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type SubmitRequestMutationResult = NonNullable<Awaited<ReturnType<typeof submitRequest>>>\n export type SubmitRequestMutationBody = BodyType<TutoringRequestWrite>\n export type SubmitRequestMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type SubmitRequestMutationVariables = {data: BodyType<TutoringRequestWrite>}\n\n /**\n * @summary Submit Request\n */\nexport const useSubmitRequest = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof submitRequest>>, TError,SubmitRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof submitRequest>>,\n TError,\n SubmitRequestMutationVariables,\n TContext\n > => {\n return useMutation(getSubmitRequestMutationOptions(options), queryClient);\n }\n export const getGetRequestUrl = (requestId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}`\n}\n\n/**\n * One of the caller's own requests, with signed links to its files.\n * @summary Get Request\n */\nexport const getRequest = async (requestId: number, options?: Parameters<typeof request>[1]): Promise<TutoringRequestRead> => {\n\n return request<TutoringRequestRead>(getGetRequestUrl(requestId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getGetRequestQueryKey = (requestId: number,) => {\n return [\n `/tutoring/requests/${requestId}`\n ] as const;\n }\n\n\nexport const getGetRequestQueryOptions = <TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(requestId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetRequestQueryKey(requestId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getRequest>>> = ({ signal }) => getRequest(requestId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: requestId !== null && requestId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type GetRequestQueryResult = NonNullable<Awaited<ReturnType<typeof getRequest>>>\nexport type GetRequestQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useGetRequest<TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n requestId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getRequest>>,\n TError,\n Awaited<ReturnType<typeof getRequest>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useGetRequest<TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n requestId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getRequest>>,\n TError,\n Awaited<ReturnType<typeof getRequest>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useGetRequest<TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n requestId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Get Request\n */\n\nexport function useGetRequest<TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n requestId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getGetRequestQueryOptions(requestId,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 getUploadAttachmentUrl = (requestId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}/attachments`\n}\n\n/**\n * Attach a file to a request. One per call.\n *\n * One per call rather than an array, deliberately. A pupil photographing four\n * pages on a phone connection wants three of them to survive the fourth\n * timing out, and the legacy's ``documents[]`` array is all-or-nothing — with\n * no cap on how many, so a single request can be arbitrarily large.\n *\n * The role follows from who is asking: the pupil is attaching to a question,\n * the assigned practitioner to an answer. Nobody declares it, so nobody can\n * claim the wrong one.\n *\n * ``415`` for a format we do not accept, ``413`` for a file over the ceiling,\n * ``409`` once the per-request cap is reached, and ``404`` for a request that\n * is not the caller's.\n * @summary Upload Attachment\n */\nexport const uploadAttachment = async (requestId: number,\n bodyUploadAttachment: BodyUploadAttachment, options?: Parameters<typeof request>[1]): Promise<TutoringAttachmentRead> => {\n const formData = new FormData();\nformData.append(`file`, bodyUploadAttachment.file);\n\n return request<TutoringAttachmentRead>(getUploadAttachmentUrl(requestId),\n {\n ...options,\n method: 'POST'\n ,\n body: formData\n }\n);}\n\n\n\n\n\nexport const getUploadAttachmentMutationKey = () => ['uploadAttachment'] as const;\n\nexport const getUploadAttachmentMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof uploadAttachment>>, TError,UploadAttachmentMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof uploadAttachment>>, TError,UploadAttachmentMutationVariables, TContext> => {\n\nconst mutationKey = getUploadAttachmentMutationKey();\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 uploadAttachment>>, UploadAttachmentMutationVariables> = (props) => {\n const {requestId,data} = props ?? {};\n\n return uploadAttachment(requestId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type UploadAttachmentMutationResult = NonNullable<Awaited<ReturnType<typeof uploadAttachment>>>\n export type UploadAttachmentMutationBody = BodyType<BodyUploadAttachment>\n export type UploadAttachmentMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type UploadAttachmentMutationVariables = {requestId: number;data: BodyType<BodyUploadAttachment>}\n\n /**\n * @summary Upload Attachment\n */\nexport const useUploadAttachment = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof uploadAttachment>>, TError,UploadAttachmentMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof uploadAttachment>>,\n TError,\n UploadAttachmentMutationVariables,\n TContext\n > => {\n return useMutation(getUploadAttachmentMutationOptions(options), queryClient);\n }\n export const getDeleteAttachmentUrl = (requestId: number,\n attachmentId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}/attachments/${attachmentId}`\n}\n\n/**\n * Remove a file the caller uploaded.\n *\n * Only the uploader, and only while the request is still open — a file that\n * formed part of a delivered answer is part of the record.\n *\n * The object goes and the row goes with it: this is a mistaken upload being\n * withdrawn, not a retention event. Retention is the bucket's lifecycle rule,\n * which removes objects and leaves rows behind.\n * @summary Delete Attachment\n */\nexport const deleteAttachment = async (requestId: number,\n attachmentId: number, options?: Parameters<typeof request>[1]): Promise<void> => {\n\n return request<void>(getDeleteAttachmentUrl(requestId,attachmentId),\n {\n ...options,\n method: 'DELETE'\n\n\n }\n);}\n\n\n\n\n\nexport const getDeleteAttachmentMutationKey = () => ['deleteAttachment'] as const;\n\nexport const getDeleteAttachmentMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof deleteAttachment>>, TError,DeleteAttachmentMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof deleteAttachment>>, TError,DeleteAttachmentMutationVariables, TContext> => {\n\nconst mutationKey = getDeleteAttachmentMutationKey();\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 deleteAttachment>>, DeleteAttachmentMutationVariables> = (props) => {\n const {requestId,attachmentId} = props ?? {};\n\n return deleteAttachment(requestId,attachmentId,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type DeleteAttachmentMutationResult = NonNullable<Awaited<ReturnType<typeof deleteAttachment>>>\n\n export type DeleteAttachmentMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type DeleteAttachmentMutationVariables = {requestId: number;attachmentId: number}\n\n /**\n * @summary Delete Attachment\n */\nexport const useDeleteAttachment = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof deleteAttachment>>, TError,DeleteAttachmentMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof deleteAttachment>>,\n TError,\n DeleteAttachmentMutationVariables,\n TContext\n > => {\n return useMutation(getDeleteAttachmentMutationOptions(options), queryClient);\n }\n export const getCancelRequestUrl = (requestId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}/cancel`\n}\n\n/**\n * Withdraw a request the caller asked.\n *\n * The debit is **not** reversed. A pupil who asks and withdraws has occupied a\n * dispatcher's attention, and refunding it would make cancel-and-resubmit a way\n * around the allowance. If a tenant should get the unit back, that is a credit\n * somebody grants, which is a different act with a different audit trail.\n * @summary Cancel Request\n */\nexport const cancelRequest = async (requestId: number, options?: Parameters<typeof request>[1]): Promise<TutoringRequestRead> => {\n\n return request<TutoringRequestRead>(getCancelRequestUrl(requestId),\n {\n ...options,\n method: 'POST'\n\n\n }\n);}\n\n\n\n\n\nexport const getCancelRequestMutationKey = () => ['cancelRequest'] as const;\n\nexport const getCancelRequestMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof cancelRequest>>, TError,CancelRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof cancelRequest>>, TError,CancelRequestMutationVariables, TContext> => {\n\nconst mutationKey = getCancelRequestMutationKey();\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 cancelRequest>>, CancelRequestMutationVariables> = (props) => {\n const {requestId} = props ?? {};\n\n return cancelRequest(requestId,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type CancelRequestMutationResult = NonNullable<Awaited<ReturnType<typeof cancelRequest>>>\n\n export type CancelRequestMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type CancelRequestMutationVariables = {requestId: number}\n\n /**\n * @summary Cancel Request\n */\nexport const useCancelRequest = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof cancelRequest>>, TError,CancelRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof cancelRequest>>,\n TError,\n CancelRequestMutationVariables,\n TContext\n > => {\n return useMutation(getCancelRequestMutationOptions(options), queryClient);\n }\n export const getRateRequestUrl = (requestId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}/feedback`\n}\n\n/**\n * Rate the answer. One rating per request, enforced by the table.\n * @summary Rate Request\n */\nexport const rateRequest = async (requestId: number,\n tutoringFeedbackWrite: TutoringFeedbackWrite, options?: Parameters<typeof request>[1]): Promise<void> => {\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<void>(getRateRequestUrl(requestId),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(tutoringFeedbackWrite)\n }\n);}\n\n\n\n\n\nexport const getRateRequestMutationKey = () => ['rateRequest'] as const;\n\nexport const getRateRequestMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof rateRequest>>, TError,RateRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof rateRequest>>, TError,RateRequestMutationVariables, TContext> => {\n\nconst mutationKey = getRateRequestMutationKey();\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 rateRequest>>, RateRequestMutationVariables> = (props) => {\n const {requestId,data} = props ?? {};\n\n return rateRequest(requestId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type RateRequestMutationResult = NonNullable<Awaited<ReturnType<typeof rateRequest>>>\n export type RateRequestMutationBody = BodyType<TutoringFeedbackWrite>\n export type RateRequestMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type RateRequestMutationVariables = {requestId: number;data: BodyType<TutoringFeedbackWrite>}\n\n /**\n * @summary Rate Request\n */\nexport const useRateRequest = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof rateRequest>>, TError,RateRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof rateRequest>>,\n TError,\n RateRequestMutationVariables,\n TContext\n > => {\n return useMutation(getRateRequestMutationOptions(options), queryClient);\n }\n"],"mappings":"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"}
1
+ {"version":3,"file":"tutoring-requests.js","names":[],"sources":["../../src/react/tutoring-requests/tutoring-requests.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.15.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 BodyUploadAttachment,\n HTTPExceptionResponse,\n ListMyRequestsParams,\n TutoringAttachmentRead,\n TutoringFeedbackWrite,\n TutoringRequestPage,\n TutoringRequestRead,\n TutoringRequestWrite,\n ValidationErrorResponse\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 getListMyRequestsUrl = (params?: ListMyRequestsParams,) => {\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n const explodeParameters = [\"status\"];\n\n if (Array.isArray(value) && explodeParameters.includes(key)) {\n value.forEach((v) => {\n normalizedParams.append(key, v === null ? 'null' : String(v));\n });\n return;\n }\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 ? `/tutoring/requests?${stringifiedParams}` : `/tutoring/requests`\n}\n\n/**\n * The caller's own requests, newest first.\n *\n * Includes requests they submitted for a child profile, which is what the\n * ``requested_by_id`` half of the predicate is for — a parent's list should not\n * go empty the moment they ask on somebody else's behalf.\n * @summary List My Requests\n */\nexport const listMyRequests = async (params?: ListMyRequestsParams, options?: Parameters<typeof request>[1]): Promise<TutoringRequestPage> => {\n\n return request<TutoringRequestPage>(getListMyRequestsUrl(params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getListMyRequestsQueryKey = (params?: ListMyRequestsParams,) => {\n return [\n `/tutoring/requests`, ...(params ? [params] : [])\n ] as const;\n }\n\n\nexport const getListMyRequestsQueryOptions = <TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(params?: ListMyRequestsParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getListMyRequestsQueryKey(params);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof listMyRequests>>> = ({ signal }) => listMyRequests(params, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type ListMyRequestsQueryResult = NonNullable<Awaited<ReturnType<typeof listMyRequests>>>\nexport type ListMyRequestsQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useListMyRequests<TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params: undefined | ListMyRequestsParams, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof listMyRequests>>,\n TError,\n Awaited<ReturnType<typeof listMyRequests>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useListMyRequests<TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: ListMyRequestsParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof listMyRequests>>,\n TError,\n Awaited<ReturnType<typeof listMyRequests>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useListMyRequests<TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: ListMyRequestsParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary List My Requests\n */\n\nexport function useListMyRequests<TData = Awaited<ReturnType<typeof listMyRequests>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n params?: ListMyRequestsParams, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof listMyRequests>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getListMyRequestsQueryOptions(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 getSubmitRequestUrl = () => {\n\n\n\n\n return `/tutoring/requests`\n}\n\n/**\n * Ask for help.\n *\n * Debits the tenant's tutoring entitlement, which is what makes this a ``409``\n * when the allowance is spent rather than a queued request nobody may answer.\n * ``403`` from the entitlement layer is reported as ``404`` for the subject, per\n * the convention the loan routes already follow.\n *\n * ``onBehalfOfId`` must name a profile of the caller. Anything else is ``403``:\n * the legacy accepts a ``user_id`` in the body and trusts it, which is an\n * authorization decision made by whoever wrote the client.\n * @summary Submit Request\n */\nexport const submitRequest = async (tutoringRequestWrite: TutoringRequestWrite, options?: Parameters<typeof request>[1]): Promise<TutoringRequestRead> => {\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<TutoringRequestRead>(getSubmitRequestUrl(),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(tutoringRequestWrite)\n }\n);}\n\n\n\n\n\nexport const getSubmitRequestMutationKey = () => ['submitRequest'] as const;\n\nexport const getSubmitRequestMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof submitRequest>>, TError,SubmitRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof submitRequest>>, TError,SubmitRequestMutationVariables, TContext> => {\n\nconst mutationKey = getSubmitRequestMutationKey();\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 submitRequest>>, SubmitRequestMutationVariables> = (props) => {\n const {data} = props ?? {};\n\n return submitRequest(data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type SubmitRequestMutationResult = NonNullable<Awaited<ReturnType<typeof submitRequest>>>\n export type SubmitRequestMutationBody = BodyType<TutoringRequestWrite>\n export type SubmitRequestMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type SubmitRequestMutationVariables = {data: BodyType<TutoringRequestWrite>}\n\n /**\n * @summary Submit Request\n */\nexport const useSubmitRequest = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof submitRequest>>, TError,SubmitRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof submitRequest>>,\n TError,\n SubmitRequestMutationVariables,\n TContext\n > => {\n return useMutation(getSubmitRequestMutationOptions(options), queryClient);\n }\n export const getGetRequestUrl = (requestId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}`\n}\n\n/**\n * One of the caller's own requests, with signed links to its files.\n * @summary Get Request\n */\nexport const getRequest = async (requestId: number, options?: Parameters<typeof request>[1]): Promise<TutoringRequestRead> => {\n\n return request<TutoringRequestRead>(getGetRequestUrl(requestId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\n\n\n\nexport const getGetRequestQueryKey = (requestId: number,) => {\n return [\n `/tutoring/requests/${requestId}`\n ] as const;\n }\n\n\nexport const getGetRequestQueryOptions = <TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(requestId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>>, request?: SecondParameter<typeof request>}\n) => {\n\nconst {query: queryOptions, request: requestOptions} = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetRequestQueryKey(requestId);\n\n\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getRequest>>> = ({ signal }) => getRequest(requestId, { signal, ...requestOptions });\n\n\n\n\n\n return { queryKey, queryFn, enabled: requestId !== null && requestId !== undefined, ...queryOptions} as UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData> & { queryKey: DataTag<QueryKey, TData, TError> }\n}\n\nexport type GetRequestQueryResult = NonNullable<Awaited<ReturnType<typeof getRequest>>>\nexport type GetRequestQueryError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n\n\nexport function useGetRequest<TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n requestId: number, options: { query:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>> & Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getRequest>>,\n TError,\n Awaited<ReturnType<typeof getRequest>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): DefinedUseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useGetRequest<TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n requestId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>> & Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getRequest>>,\n TError,\n Awaited<ReturnType<typeof getRequest>>\n > , 'initialData'\n >, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\nexport function useGetRequest<TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n requestId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> }\n/**\n * @summary Get Request\n */\n\nexport function useGetRequest<TData = Awaited<ReturnType<typeof getRequest>>, TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>>(\n requestId: number, options?: { query?:Partial<UseQueryOptions<Awaited<ReturnType<typeof getRequest>>, TError, TData>>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient\n ): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData, TError> } {\n\n const queryOptions = getGetRequestQueryOptions(requestId,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 getUploadAttachmentUrl = (requestId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}/attachments`\n}\n\n/**\n * Attach a file to a request. One per call.\n *\n * One per call rather than an array, deliberately. A pupil photographing four\n * pages on a phone connection wants three of them to survive the fourth\n * timing out, and the legacy's ``documents[]`` array is all-or-nothing — with\n * no cap on how many, so a single request can be arbitrarily large.\n *\n * The role follows from who is asking: the pupil is attaching to a question,\n * the assigned practitioner to an answer. Nobody declares it, so nobody can\n * claim the wrong one.\n *\n * ``415`` for a format we do not accept, ``413`` for a file over the ceiling,\n * ``409`` once the per-request cap is reached, and ``404`` for a request that\n * is not the caller's.\n * @summary Upload Attachment\n */\nexport const uploadAttachment = async (requestId: number,\n bodyUploadAttachment: BodyUploadAttachment, options?: Parameters<typeof request>[1]): Promise<TutoringAttachmentRead> => {\n const formData = new FormData();\nformData.append(`file`, bodyUploadAttachment.file);\n\n return request<TutoringAttachmentRead>(getUploadAttachmentUrl(requestId),\n {\n ...options,\n method: 'POST'\n ,\n body: formData\n }\n);}\n\n\n\n\n\nexport const getUploadAttachmentMutationKey = () => ['uploadAttachment'] as const;\n\nexport const getUploadAttachmentMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof uploadAttachment>>, TError,UploadAttachmentMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof uploadAttachment>>, TError,UploadAttachmentMutationVariables, TContext> => {\n\nconst mutationKey = getUploadAttachmentMutationKey();\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 uploadAttachment>>, UploadAttachmentMutationVariables> = (props) => {\n const {requestId,data} = props ?? {};\n\n return uploadAttachment(requestId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type UploadAttachmentMutationResult = NonNullable<Awaited<ReturnType<typeof uploadAttachment>>>\n export type UploadAttachmentMutationBody = BodyType<BodyUploadAttachment>\n export type UploadAttachmentMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type UploadAttachmentMutationVariables = {requestId: number;data: BodyType<BodyUploadAttachment>}\n\n /**\n * @summary Upload Attachment\n */\nexport const useUploadAttachment = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof uploadAttachment>>, TError,UploadAttachmentMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof uploadAttachment>>,\n TError,\n UploadAttachmentMutationVariables,\n TContext\n > => {\n return useMutation(getUploadAttachmentMutationOptions(options), queryClient);\n }\n export const getDeleteAttachmentUrl = (requestId: number,\n attachmentId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}/attachments/${attachmentId}`\n}\n\n/**\n * Remove a file the caller uploaded.\n *\n * Only the uploader, and only while the request is still open — a file that\n * formed part of a delivered answer is part of the record.\n *\n * The object goes and the row goes with it: this is a mistaken upload being\n * withdrawn, not a retention event. Retention is the bucket's lifecycle rule,\n * which removes objects and leaves rows behind.\n * @summary Delete Attachment\n */\nexport const deleteAttachment = async (requestId: number,\n attachmentId: number, options?: Parameters<typeof request>[1]): Promise<void> => {\n\n return request<void>(getDeleteAttachmentUrl(requestId,attachmentId),\n {\n ...options,\n method: 'DELETE'\n\n\n }\n);}\n\n\n\n\n\nexport const getDeleteAttachmentMutationKey = () => ['deleteAttachment'] as const;\n\nexport const getDeleteAttachmentMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof deleteAttachment>>, TError,DeleteAttachmentMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof deleteAttachment>>, TError,DeleteAttachmentMutationVariables, TContext> => {\n\nconst mutationKey = getDeleteAttachmentMutationKey();\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 deleteAttachment>>, DeleteAttachmentMutationVariables> = (props) => {\n const {requestId,attachmentId} = props ?? {};\n\n return deleteAttachment(requestId,attachmentId,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type DeleteAttachmentMutationResult = NonNullable<Awaited<ReturnType<typeof deleteAttachment>>>\n\n export type DeleteAttachmentMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type DeleteAttachmentMutationVariables = {requestId: number;attachmentId: number}\n\n /**\n * @summary Delete Attachment\n */\nexport const useDeleteAttachment = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof deleteAttachment>>, TError,DeleteAttachmentMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof deleteAttachment>>,\n TError,\n DeleteAttachmentMutationVariables,\n TContext\n > => {\n return useMutation(getDeleteAttachmentMutationOptions(options), queryClient);\n }\n export const getCancelRequestUrl = (requestId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}/cancel`\n}\n\n/**\n * Withdraw a request the caller asked.\n *\n * The debit is **not** reversed. A pupil who asks and withdraws has occupied a\n * dispatcher's attention, and refunding it would make cancel-and-resubmit a way\n * around the allowance. If a tenant should get the unit back, that is a credit\n * somebody grants, which is a different act with a different audit trail.\n * @summary Cancel Request\n */\nexport const cancelRequest = async (requestId: number, options?: Parameters<typeof request>[1]): Promise<TutoringRequestRead> => {\n\n return request<TutoringRequestRead>(getCancelRequestUrl(requestId),\n {\n ...options,\n method: 'POST'\n\n\n }\n);}\n\n\n\n\n\nexport const getCancelRequestMutationKey = () => ['cancelRequest'] as const;\n\nexport const getCancelRequestMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof cancelRequest>>, TError,CancelRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof cancelRequest>>, TError,CancelRequestMutationVariables, TContext> => {\n\nconst mutationKey = getCancelRequestMutationKey();\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 cancelRequest>>, CancelRequestMutationVariables> = (props) => {\n const {requestId} = props ?? {};\n\n return cancelRequest(requestId,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type CancelRequestMutationResult = NonNullable<Awaited<ReturnType<typeof cancelRequest>>>\n\n export type CancelRequestMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type CancelRequestMutationVariables = {requestId: number}\n\n /**\n * @summary Cancel Request\n */\nexport const useCancelRequest = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof cancelRequest>>, TError,CancelRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof cancelRequest>>,\n TError,\n CancelRequestMutationVariables,\n TContext\n > => {\n return useMutation(getCancelRequestMutationOptions(options), queryClient);\n }\n export const getRateRequestUrl = (requestId: number,) => {\n\n\n\n\n return `/tutoring/requests/${requestId}/feedback`\n}\n\n/**\n * Rate the answer. One rating per request, enforced by the table.\n * @summary Rate Request\n */\nexport const rateRequest = async (requestId: number,\n tutoringFeedbackWrite: TutoringFeedbackWrite, options?: Parameters<typeof request>[1]): Promise<void> => {\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<void>(getRateRequestUrl(requestId),\n {\n ...options,\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(tutoringFeedbackWrite)\n }\n);}\n\n\n\n\n\nexport const getRateRequestMutationKey = () => ['rateRequest'] as const;\n\nexport const getRateRequestMutationOptions = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof rateRequest>>, TError,RateRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n): UseMutationOptions<Awaited<ReturnType<typeof rateRequest>>, TError,RateRequestMutationVariables, TContext> => {\n\nconst mutationKey = getRateRequestMutationKey();\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 rateRequest>>, RateRequestMutationVariables> = (props) => {\n const {requestId,data} = props ?? {};\n\n return rateRequest(requestId,data,requestOptions)\n }\n\n\n\n\n\n\n return { mutationFn, ...mutationOptions }}\n\n export type RateRequestMutationResult = NonNullable<Awaited<ReturnType<typeof rateRequest>>>\n export type RateRequestMutationBody = BodyType<TutoringFeedbackWrite>\n export type RateRequestMutationError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>\n export type RateRequestMutationVariables = {requestId: number;data: BodyType<TutoringFeedbackWrite>}\n\n /**\n * @summary Rate Request\n */\nexport const useRateRequest = <TError = ErrorType<HTTPExceptionResponse | ValidationErrorResponse>,\n TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof rateRequest>>, TError,RateRequestMutationVariables, TContext>, request?: SecondParameter<typeof request>}\n , queryClient?: QueryClient): UseMutationResult<\n Awaited<ReturnType<typeof rateRequest>>,\n TError,\n RateRequestMutationVariables,\n TContext\n > => {\n return useMutation(getRateRequestMutationOptions(options), queryClient);\n }\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@learnorama/mozaik-sdk",
3
- "version": "0.14.2-staging.52.1",
3
+ "version": "0.15.0-staging.53.1",
4
4
  "description": "Typed Mozaik API client and optional TanStack Query hooks.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -76,14 +76,14 @@
76
76
  }
77
77
  },
78
78
  "mozaik": {
79
- "apiVersion": "0.14.2",
80
- "backendRevision": "625bf276b4f65382bfcd3fb1b08c5c685ba9827a",
81
- "schemaSha256": "69e66e97d3380d84744d4efe4f208f9df3d6e503e79c7c6819063f7527ccc78e",
79
+ "apiVersion": "0.15.0",
80
+ "backendRevision": "a220a5ac35aa906194449cf7912697adf00c02c2",
81
+ "schemaSha256": "6763f76a892a8c182826c72e5b64bfe081bcdba04cd6ee2140a58307ca84be6c",
82
82
  "sdkFingerprintVersion": 2,
83
- "sdkFingerprint": "b7a35d12ee7034229596bb784e7ed44efee317b290c85f511c966028343d6863",
83
+ "sdkFingerprint": "85942d7029a81ac924c9138af3e713e0a802b94c1c7234902d22ee7d314ff95a",
84
84
  "sdkContent": {
85
- "runtime": "6e7d906b155b7fbca191d21fc1c3029ccc6ef0b77622ea292192d11c8f19f54c",
86
- "types": "856962524b6bebc501797f2183d219992824db2c3caf722d045b078d7cc67acc",
85
+ "runtime": "8fd22060c28dbe31e338fbfba1ec8e30538f4ff022c813ef42c7f1b3dc97d7d7",
86
+ "types": "69ab819bde38724e739e0965f5afc478617f7e5b6a444fa85339a52bd8d694ac",
87
87
  "package": "99a714f26e86b40c6eabd5248366c7c0efb397f4a6e7cfb7adbca689382e2f11"
88
88
  }
89
89
  }
@@ -1,96 +0,0 @@
1
-
2
- import { Ad as PartnerProvider, Dt as ReadingPositionRead, Mt as ReaderPackageRead, Tt as ReadingPositionWrite, n as YouScribeAuthRead, sm as CurrentReadingListRead, t as YouScribeReaderRead, xt as ReadPackageParams } from "../chunks/index.js";
3
- import { c as request } from "../chunks/client.js";
4
- //#region src/api/partner-reader/partner-reader.d.ts
5
- export declare const getReadPackageUrl: (provider: PartnerProvider, mediaId: number, params?: ReadPackageParams) => string;
6
- /**
7
- * Where to fetch the content itself.
8
- *
9
- * The returned URL is a short-lived DRM-wrapped credential. It is not cached
10
- * here and should not be stored by the client.
11
- *
12
- * Opens a consumption lease, so the read appears in the ledger and counts
13
- * against the establishment's live seats like any other. Its id comes back in
14
- * ``lease``: keep it alive with ``PUT /consumption/{eventId}`` and drop it with
15
- * ``DELETE`` when the reader closes. A client that does neither is not broken
16
- * — the reaper closes the lease about a minute after the last heartbeat — but
17
- * every such read is a seat held past the end of it.
18
- *
19
- * Re-opening the same title returns the lease already held rather than a
20
- * second one, so a page reload does not leak a seat.
21
- * @summary Read Package
22
- */
23
- export declare const readPackage: (provider: PartnerProvider, mediaId: number, params?: ReadPackageParams, options?: Parameters<typeof request>[1]) => Promise<ReaderPackageRead>;
24
- export declare const getReadPositionUrl: (provider: PartnerProvider, mediaId: number) => string;
25
- /**
26
- * The last synchronized local position, or the partner's when none is saved.
27
- *
28
- * ``404`` when the partner holds no position — a book never opened has no
29
- * place to return to, and reporting zero would make a client jump a reader who
30
- * *is* mid-book back to the start if the call ever failed soft.
31
- * @summary Read Position
32
- */
33
- export declare const readPosition: (provider: PartnerProvider, mediaId: number, options?: Parameters<typeof request>[1]) => Promise<ReadingPositionRead>;
34
- export declare const getWritePositionUrl: (provider: PartnerProvider, mediaId: number) => string;
35
- /**
36
- * Synchronize and save progress, with the partner's metering alongside it.
37
- *
38
- * ``usage_blocks`` is forwarded before a new position, matching the legacy's
39
- * call order. The two reports are independent: an older position may carry
40
- * usage the partner has not received yet.
41
- *
42
- * Only a strictly newer ``reachedAt`` replaces the saved position. Stale or
43
- * duplicate writes return that saved position without updating it upstream.
44
- * Provided usage blocks are still forwarded, including on retries; the
45
- * partner's deduplication contract is unknown. Conflicting positions at the
46
- * same instant return 409 before any outbound write.
47
- * Progress is a resume point, not a measurement of time spent reading.
48
- * @summary Write Position
49
- */
50
- export declare const writePosition: (provider: PartnerProvider, mediaId: number, readingPositionWrite: ReadingPositionWrite, options?: Parameters<typeof request>[1]) => Promise<ReadingPositionRead>;
51
- export declare const getOpenNativeReaderUrl: (provider: PartnerProvider, mediaId: number) => string;
52
- /**
53
- * Authorize a YouScribe native title and open its consumption lease.
54
- *
55
- * Pass externalId and token to the YouScribe SDK. Mozaik requests keep using
56
- * mediaId. Renew lease.eventId while the reader is open and close it when the
57
- * reader exits; reopening the same title reuses its active lease.
58
- * @summary Open Native Reader
59
- */
60
- export declare const openNativeReader: (provider: PartnerProvider, mediaId: number, options?: Parameters<typeof request>[1]) => Promise<YouScribeReaderRead>;
61
- export declare const getListCurrentReadingsUrl: (provider: PartnerProvider) => string;
62
- /**
63
- * The partner's own "continue reading" list, joined back to our catalogue.
64
- *
65
- * Entries the partner knows and our catalogue does not are dropped rather than
66
- * surfaced with a null id: the import runs nightly and the partner's list is
67
- * live, so a title added today is genuinely not browsable here yet, and a card
68
- * that cannot be opened is worse than one that is absent.
69
- * @summary List Current Readings
70
- */
71
- export declare const listCurrentReadings: (provider: PartnerProvider, options?: Parameters<typeof request>[1]) => Promise<CurrentReadingListRead>;
72
- export declare const getReadNativeAuthUrl: (provider: PartnerProvider) => string;
73
- /**
74
- * YouScribe native SDK credentials for the selected, authorized profile.
75
- *
76
- * Equivalent to the legacy YouScribe user/auth endpoint. This does not create
77
- * a licence or a consumption event. Open a title through its reader-auth POST
78
- * to obtain the lease used for consumption heartbeats. The token is personal:
79
- * never persist it, log it, or share it between profiles.
80
- * @summary Read Native Auth
81
- */
82
- export declare const readNativeAuth: (provider: PartnerProvider, options?: Parameters<typeof request>[1]) => Promise<YouScribeAuthRead>;
83
- export declare const getOpenNativeAuthUrl: (provider: PartnerProvider) => string;
84
- /**
85
- * Open the YouScribe reader for this profile, provisioning on first use.
86
- *
87
- * Call only on the user's explicit reader-opening action. This can create a
88
- * paid subscription. Never prefetch it during login, onboarding or browsing.
89
- * Existing seats are reused; new seats require medium authentication assurance.
90
- * For a selected title use POST /media/{mediaId}/reader-auth to also obtain
91
- * the consumption lease. GET /user/auth never provisions.
92
- * @summary Open Native Auth
93
- */
94
- export declare const openNativeAuth: (provider: PartnerProvider, options?: Parameters<typeof request>[1]) => Promise<YouScribeAuthRead>;
95
- //#endregion
96
- //# sourceMappingURL=partner-reader.d.ts.map
@@ -1,164 +0,0 @@
1
-
2
- import { r as request } from "../chunks/client.js";
3
- //#region src/api/partner-reader/partner-reader.ts
4
- const getReadPackageUrl = (provider, mediaId, params) => {
5
- const normalizedParams = new URLSearchParams();
6
- Object.entries(params || {}).forEach(([key, value]) => {
7
- if (value !== void 0) normalizedParams.append(key, value === null ? "null" : String(value));
8
- });
9
- const stringifiedParams = normalizedParams.toString();
10
- return stringifiedParams.length > 0 ? `/partners/${provider}/media/${mediaId}/package?${stringifiedParams}` : `/partners/${provider}/media/${mediaId}/package`;
11
- };
12
- /**
13
- * Where to fetch the content itself.
14
- *
15
- * The returned URL is a short-lived DRM-wrapped credential. It is not cached
16
- * here and should not be stored by the client.
17
- *
18
- * Opens a consumption lease, so the read appears in the ledger and counts
19
- * against the establishment's live seats like any other. Its id comes back in
20
- * ``lease``: keep it alive with ``PUT /consumption/{eventId}`` and drop it with
21
- * ``DELETE`` when the reader closes. A client that does neither is not broken
22
- * — the reaper closes the lease about a minute after the last heartbeat — but
23
- * every such read is a seat held past the end of it.
24
- *
25
- * Re-opening the same title returns the lease already held rather than a
26
- * second one, so a page reload does not leak a seat.
27
- * @summary Read Package
28
- */
29
- const readPackage = async (provider, mediaId, params, options) => {
30
- return request(getReadPackageUrl(provider, mediaId, params), {
31
- ...options,
32
- method: "GET"
33
- });
34
- };
35
- const getReadPositionUrl = (provider, mediaId) => {
36
- return `/partners/${provider}/media/${mediaId}/position`;
37
- };
38
- /**
39
- * The last synchronized local position, or the partner's when none is saved.
40
- *
41
- * ``404`` when the partner holds no position — a book never opened has no
42
- * place to return to, and reporting zero would make a client jump a reader who
43
- * *is* mid-book back to the start if the call ever failed soft.
44
- * @summary Read Position
45
- */
46
- const readPosition = async (provider, mediaId, options) => {
47
- return request(getReadPositionUrl(provider, mediaId), {
48
- ...options,
49
- method: "GET"
50
- });
51
- };
52
- const getWritePositionUrl = (provider, mediaId) => {
53
- return `/partners/${provider}/media/${mediaId}/position`;
54
- };
55
- /**
56
- * Synchronize and save progress, with the partner's metering alongside it.
57
- *
58
- * ``usage_blocks`` is forwarded before a new position, matching the legacy's
59
- * call order. The two reports are independent: an older position may carry
60
- * usage the partner has not received yet.
61
- *
62
- * Only a strictly newer ``reachedAt`` replaces the saved position. Stale or
63
- * duplicate writes return that saved position without updating it upstream.
64
- * Provided usage blocks are still forwarded, including on retries; the
65
- * partner's deduplication contract is unknown. Conflicting positions at the
66
- * same instant return 409 before any outbound write.
67
- * Progress is a resume point, not a measurement of time spent reading.
68
- * @summary Write Position
69
- */
70
- const writePosition = async (provider, mediaId, readingPositionWrite, options) => {
71
- const getHeaders = (h) => {
72
- if (!h) return {};
73
- if (h instanceof Headers) return Object.fromEntries(h.entries());
74
- if (Symbol.iterator in h) return Object.fromEntries(Array.from(h, (entry) => Array.from(entry)));
75
- const headers = {};
76
- for (const [name, value] of Object.entries(h)) if (value !== void 0) headers[name] = value;
77
- return headers;
78
- };
79
- return request(getWritePositionUrl(provider, mediaId), {
80
- ...options,
81
- method: "PATCH",
82
- headers: {
83
- "Content-Type": "application/json",
84
- ...getHeaders(options?.headers)
85
- },
86
- body: JSON.stringify(readingPositionWrite)
87
- });
88
- };
89
- const getOpenNativeReaderUrl = (provider, mediaId) => {
90
- return `/partners/${provider}/media/${mediaId}/reader-auth`;
91
- };
92
- /**
93
- * Authorize a YouScribe native title and open its consumption lease.
94
- *
95
- * Pass externalId and token to the YouScribe SDK. Mozaik requests keep using
96
- * mediaId. Renew lease.eventId while the reader is open and close it when the
97
- * reader exits; reopening the same title reuses its active lease.
98
- * @summary Open Native Reader
99
- */
100
- const openNativeReader = async (provider, mediaId, options) => {
101
- return request(getOpenNativeReaderUrl(provider, mediaId), {
102
- ...options,
103
- method: "POST"
104
- });
105
- };
106
- const getListCurrentReadingsUrl = (provider) => {
107
- return `/partners/${provider}/readings`;
108
- };
109
- /**
110
- * The partner's own "continue reading" list, joined back to our catalogue.
111
- *
112
- * Entries the partner knows and our catalogue does not are dropped rather than
113
- * surfaced with a null id: the import runs nightly and the partner's list is
114
- * live, so a title added today is genuinely not browsable here yet, and a card
115
- * that cannot be opened is worse than one that is absent.
116
- * @summary List Current Readings
117
- */
118
- const listCurrentReadings = async (provider, options) => {
119
- return request(getListCurrentReadingsUrl(provider), {
120
- ...options,
121
- method: "GET"
122
- });
123
- };
124
- const getReadNativeAuthUrl = (provider) => {
125
- return `/partners/${provider}/user/auth`;
126
- };
127
- /**
128
- * YouScribe native SDK credentials for the selected, authorized profile.
129
- *
130
- * Equivalent to the legacy YouScribe user/auth endpoint. This does not create
131
- * a licence or a consumption event. Open a title through its reader-auth POST
132
- * to obtain the lease used for consumption heartbeats. The token is personal:
133
- * never persist it, log it, or share it between profiles.
134
- * @summary Read Native Auth
135
- */
136
- const readNativeAuth = async (provider, options) => {
137
- return request(getReadNativeAuthUrl(provider), {
138
- ...options,
139
- method: "GET"
140
- });
141
- };
142
- const getOpenNativeAuthUrl = (provider) => {
143
- return `/partners/${provider}/user/auth`;
144
- };
145
- /**
146
- * Open the YouScribe reader for this profile, provisioning on first use.
147
- *
148
- * Call only on the user's explicit reader-opening action. This can create a
149
- * paid subscription. Never prefetch it during login, onboarding or browsing.
150
- * Existing seats are reused; new seats require medium authentication assurance.
151
- * For a selected title use POST /media/{mediaId}/reader-auth to also obtain
152
- * the consumption lease. GET /user/auth never provisions.
153
- * @summary Open Native Auth
154
- */
155
- const openNativeAuth = async (provider, options) => {
156
- return request(getOpenNativeAuthUrl(provider), {
157
- ...options,
158
- method: "POST"
159
- });
160
- };
161
- //#endregion
162
- export { getListCurrentReadingsUrl, getOpenNativeAuthUrl, getOpenNativeReaderUrl, getReadNativeAuthUrl, getReadPackageUrl, getReadPositionUrl, getWritePositionUrl, listCurrentReadings, openNativeAuth, openNativeReader, readNativeAuth, readPackage, readPosition, writePosition };
163
-
164
- //# sourceMappingURL=partner-reader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"partner-reader.js","names":[],"sources":["../../src/api/partner-reader/partner-reader.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.14.2\n */\nimport type {\n CurrentReadingListRead,\n PartnerProvider,\n ReadPackageParams,\n ReaderPackageRead,\n ReadingPositionRead,\n ReadingPositionWrite,\n YouScribeAuthRead,\n YouScribeReaderRead\n} from '../../models';\n\nimport { request } from '../../client';\n\nexport const getReadPackageUrl = (provider: PartnerProvider,\n mediaId: number,\n params?: ReadPackageParams,) => {\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 ? `/partners/${provider}/media/${mediaId}/package?${stringifiedParams}` : `/partners/${provider}/media/${mediaId}/package`\n}\n\n/**\n * Where to fetch the content itself.\n *\n * The returned URL is a short-lived DRM-wrapped credential. It is not cached\n * here and should not be stored by the client.\n *\n * Opens a consumption lease, so the read appears in the ledger and counts\n * against the establishment's live seats like any other. Its id comes back in\n * ``lease``: keep it alive with ``PUT /consumption/{eventId}`` and drop it with\n * ``DELETE`` when the reader closes. A client that does neither is not broken\n * — the reaper closes the lease about a minute after the last heartbeat — but\n * every such read is a seat held past the end of it.\n *\n * Re-opening the same title returns the lease already held rather than a\n * second one, so a page reload does not leak a seat.\n * @summary Read Package\n */\nexport const readPackage = async (provider: PartnerProvider,\n mediaId: number,\n params?: ReadPackageParams, options?: Parameters<typeof request>[1]): Promise<ReaderPackageRead> => {\n\n return request<ReaderPackageRead>(getReadPackageUrl(provider,mediaId,params),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\nexport const getReadPositionUrl = (provider: PartnerProvider,\n mediaId: number,) => {\n\n\n\n\n return `/partners/${provider}/media/${mediaId}/position`\n}\n\n/**\n * The last synchronized local position, or the partner's when none is saved.\n *\n * ``404`` when the partner holds no position — a book never opened has no\n * place to return to, and reporting zero would make a client jump a reader who\n * *is* mid-book back to the start if the call ever failed soft.\n * @summary Read Position\n */\nexport const readPosition = async (provider: PartnerProvider,\n mediaId: number, options?: Parameters<typeof request>[1]): Promise<ReadingPositionRead> => {\n\n return request<ReadingPositionRead>(getReadPositionUrl(provider,mediaId),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\nexport const getWritePositionUrl = (provider: PartnerProvider,\n mediaId: number,) => {\n\n\n\n\n return `/partners/${provider}/media/${mediaId}/position`\n}\n\n/**\n * Synchronize and save progress, with the partner's metering alongside it.\n *\n * ``usage_blocks`` is forwarded before a new position, matching the legacy's\n * call order. The two reports are independent: an older position may carry\n * usage the partner has not received yet.\n *\n * Only a strictly newer ``reachedAt`` replaces the saved position. Stale or\n * duplicate writes return that saved position without updating it upstream.\n * Provided usage blocks are still forwarded, including on retries; the\n * partner's deduplication contract is unknown. Conflicting positions at the\n * same instant return 409 before any outbound write.\n * Progress is a resume point, not a measurement of time spent reading.\n * @summary Write Position\n */\nexport const writePosition = async (provider: PartnerProvider,\n mediaId: number,\n readingPositionWrite: ReadingPositionWrite, options?: Parameters<typeof request>[1]): Promise<ReadingPositionRead> => {\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<ReadingPositionRead>(getWritePositionUrl(provider,mediaId),\n {\n ...options,\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json', ...getHeaders(options?.headers) },\n body: JSON.stringify(readingPositionWrite)\n }\n);}\n\n\nexport const getOpenNativeReaderUrl = (provider: PartnerProvider,\n mediaId: number,) => {\n\n\n\n\n return `/partners/${provider}/media/${mediaId}/reader-auth`\n}\n\n/**\n * Authorize a YouScribe native title and open its consumption lease.\n *\n * Pass externalId and token to the YouScribe SDK. Mozaik requests keep using\n * mediaId. Renew lease.eventId while the reader is open and close it when the\n * reader exits; reopening the same title reuses its active lease.\n * @summary Open Native Reader\n */\nexport const openNativeReader = async (provider: PartnerProvider,\n mediaId: number, options?: Parameters<typeof request>[1]): Promise<YouScribeReaderRead> => {\n\n return request<YouScribeReaderRead>(getOpenNativeReaderUrl(provider,mediaId),\n {\n ...options,\n method: 'POST'\n\n\n }\n);}\n\n\nexport const getListCurrentReadingsUrl = (provider: PartnerProvider,) => {\n\n\n\n\n return `/partners/${provider}/readings`\n}\n\n/**\n * The partner's own \"continue reading\" list, joined back to our catalogue.\n *\n * Entries the partner knows and our catalogue does not are dropped rather than\n * surfaced with a null id: the import runs nightly and the partner's list is\n * live, so a title added today is genuinely not browsable here yet, and a card\n * that cannot be opened is worse than one that is absent.\n * @summary List Current Readings\n */\nexport const listCurrentReadings = async (provider: PartnerProvider, options?: Parameters<typeof request>[1]): Promise<CurrentReadingListRead> => {\n\n return request<CurrentReadingListRead>(getListCurrentReadingsUrl(provider),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\nexport const getReadNativeAuthUrl = (provider: PartnerProvider,) => {\n\n\n\n\n return `/partners/${provider}/user/auth`\n}\n\n/**\n * YouScribe native SDK credentials for the selected, authorized profile.\n *\n * Equivalent to the legacy YouScribe user/auth endpoint. This does not create\n * a licence or a consumption event. Open a title through its reader-auth POST\n * to obtain the lease used for consumption heartbeats. The token is personal:\n * never persist it, log it, or share it between profiles.\n * @summary Read Native Auth\n */\nexport const readNativeAuth = async (provider: PartnerProvider, options?: Parameters<typeof request>[1]): Promise<YouScribeAuthRead> => {\n\n return request<YouScribeAuthRead>(getReadNativeAuthUrl(provider),\n {\n ...options,\n method: 'GET'\n\n\n }\n);}\n\n\nexport const getOpenNativeAuthUrl = (provider: PartnerProvider,) => {\n\n\n\n\n return `/partners/${provider}/user/auth`\n}\n\n/**\n * Open the YouScribe reader for this profile, provisioning on first use.\n *\n * Call only on the user's explicit reader-opening action. This can create a\n * paid subscription. Never prefetch it during login, onboarding or browsing.\n * Existing seats are reused; new seats require medium authentication assurance.\n * For a selected title use POST /media/{mediaId}/reader-auth to also obtain\n * the consumption lease. GET /user/auth never provisions.\n * @summary Open Native Auth\n */\nexport const openNativeAuth = async (provider: PartnerProvider, options?: Parameters<typeof request>[1]): Promise<YouScribeAuthRead> => {\n\n return request<YouScribeAuthRead>(getOpenNativeAuthUrl(provider),\n {\n ...options,\n method: 'POST'\n\n\n }\n);}\n\n\n"],"mappings":";;;AAoBA,MAAa,qBAAqB,UAC9B,SACA,WAAgC;CAClC,MAAM,mBAAmB,IAAI,gBAAgB;CAE7C,OAAO,QAAQ,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;EAErD,IAAI,UAAU,KAAA,GACZ,iBAAiB,OAAO,KAAK,UAAU,OAAO,SAAS,OAAO,KAAK,CAAC;CAExE,CAAC;CAED,MAAM,oBAAoB,iBAAiB,SAAS;CAEpD,OAAO,kBAAkB,SAAS,IAAI,aAAa,SAAS,SAAS,QAAQ,WAAW,sBAAsB,aAAa,SAAS,SAAS,QAAQ;AACvJ;;;;;;;;;;;;;;;;;;AAmBA,MAAa,cAAc,OAAO,UAC9B,SACA,QAA4B,YAAwE;CAEtG,OAAO,QAA2B,kBAAkB,UAAS,SAAQ,MAAM,GAC3E;EACE,GAAG;EACH,QAAQ;CAGV,CACF;AAAE;AAGF,MAAa,sBAAsB,UAC/B,YAAqB;CAKvB,OAAO,aAAa,SAAS,SAAS,QAAQ;AAChD;;;;;;;;;AAUA,MAAa,eAAe,OAAO,UAC/B,SAAiB,YAA0E;CAE7F,OAAO,QAA6B,mBAAmB,UAAS,OAAO,GACvE;EACE,GAAG;EACH,QAAQ;CAGV,CACF;AAAE;AAGF,MAAa,uBAAuB,UAChC,YAAqB;CAKvB,OAAO,aAAa,SAAS,SAAS,QAAQ;AAChD;;;;;;;;;;;;;;;;AAiBA,MAAa,gBAAgB,OAAO,UAChC,SACA,sBAA4C,YAA0E;CAEtH,MAAM,cAAc,MAAwF;EAC5G,IAAI,CAAC,GAAG,OAAO,CAAC;EAChB,IAAI,aAAa,SAAS,OAAO,OAAO,YAAY,EAAE,QAAQ,CAAC;EAC/D,IAAI,OAAO,YAAY,GACrB,OAAO,OAAO,YACZ,MAAM,KAAK,IAAkC,UAAU,MAAM,KAAK,KAAK,CAAqB,CAC9F;EAEF,MAAM,UAAsD,CAAC;EAC7D,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAgD,CAAC,GAClF,IAAI,UAAU,KAAA,GAAW,QAAQ,QAAQ;EAE3C,OAAO;CACT;CACF,OAAO,QAA6B,oBAAoB,UAAS,OAAO,GACtE;EACE,GAAG;EACH,QAAQ;EACR,SAAS;GAAE,gBAAgB;GAAoB,GAAG,WAAW,SAAS,OAAO;EAAE;EAC/E,MAAM,KAAK,UAAU,oBAAoB;CAC3C,CACF;AAAE;AAGF,MAAa,0BAA0B,UACnC,YAAqB;CAKvB,OAAO,aAAa,SAAS,SAAS,QAAQ;AAChD;;;;;;;;;AAUA,MAAa,mBAAmB,OAAO,UACnC,SAAiB,YAA0E;CAE7F,OAAO,QAA6B,uBAAuB,UAAS,OAAO,GAC3E;EACE,GAAG;EACH,QAAQ;CAGV,CACF;AAAE;AAGF,MAAa,6BAA6B,aAA+B;CAKvE,OAAO,aAAa,SAAS;AAC/B;;;;;;;;;;AAWA,MAAa,sBAAsB,OAAO,UAA2B,YAA6E;CAEhJ,OAAO,QAAgC,0BAA0B,QAAQ,GACzE;EACE,GAAG;EACH,QAAQ;CAGV,CACF;AAAE;AAGF,MAAa,wBAAwB,aAA+B;CAKlE,OAAO,aAAa,SAAS;AAC/B;;;;;;;;;;AAWA,MAAa,iBAAiB,OAAO,UAA2B,YAAwE;CAEtI,OAAO,QAA2B,qBAAqB,QAAQ,GAC/D;EACE,GAAG;EACH,QAAQ;CAGV,CACF;AAAE;AAGF,MAAa,wBAAwB,aAA+B;CAKlE,OAAO,aAAa,SAAS;AAC/B;;;;;;;;;;;AAYA,MAAa,iBAAiB,OAAO,UAA2B,YAAwE;CAEtI,OAAO,QAA2B,qBAAqB,QAAQ,GAC/D;EACE,GAAG;EACH,QAAQ;CAGV,CACF;AAAE"}