@magmamath/students-features 1.6.4-rc.0-testid → 1.6.4

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 (66) hide show
  1. package/dist/commonjs/features/chatbot/components/ChatControls/ChatLauncher.js +1 -4
  2. package/dist/commonjs/features/chatbot/components/ChatControls/ChatLauncher.js.map +1 -1
  3. package/dist/commonjs/features/chatbot/index.js +7 -0
  4. package/dist/commonjs/features/chatbot/index.js.map +1 -1
  5. package/dist/commonjs/features/chatbot/model/VoiceTranscriptSnapshotModel.js +126 -0
  6. package/dist/commonjs/features/chatbot/model/VoiceTranscriptSnapshotModel.js.map +1 -0
  7. package/dist/commonjs/features/keyboard/constants/groups/units.constants.js +3 -3
  8. package/dist/commonjs/features/keyboard/constants/groups/units.constants.js.map +1 -1
  9. package/dist/commonjs/features/keyboard/constants/keys/units.constants.js +8 -20
  10. package/dist/commonjs/features/keyboard/constants/keys/units.constants.js.map +1 -1
  11. package/dist/commonjs/features/voice/recording/components/VoiceRecordButton.js +2 -1
  12. package/dist/commonjs/features/voice/recording/components/VoiceRecordButton.js.map +1 -1
  13. package/dist/commonjs/lib/effector/createControllerEffect.js +7 -6
  14. package/dist/commonjs/lib/effector/createControllerEffect.js.map +1 -1
  15. package/dist/module/features/chatbot/components/ChatControls/ChatLauncher.js +1 -4
  16. package/dist/module/features/chatbot/components/ChatControls/ChatLauncher.js.map +1 -1
  17. package/dist/module/features/chatbot/index.js +1 -0
  18. package/dist/module/features/chatbot/index.js.map +1 -1
  19. package/dist/module/features/chatbot/model/VoiceTranscriptSnapshotModel.js +121 -0
  20. package/dist/module/features/chatbot/model/VoiceTranscriptSnapshotModel.js.map +1 -0
  21. package/dist/module/features/keyboard/constants/groups/units.constants.js +3 -3
  22. package/dist/module/features/keyboard/constants/groups/units.constants.js.map +1 -1
  23. package/dist/module/features/keyboard/constants/keys/units.constants.js +8 -20
  24. package/dist/module/features/keyboard/constants/keys/units.constants.js.map +1 -1
  25. package/dist/module/features/voice/recording/components/VoiceRecordButton.js +2 -1
  26. package/dist/module/features/voice/recording/components/VoiceRecordButton.js.map +1 -1
  27. package/dist/module/lib/effector/createControllerEffect.js +7 -6
  28. package/dist/module/lib/effector/createControllerEffect.js.map +1 -1
  29. package/dist/typescript/commonjs/features/chatbot/components/ChatControls/ChatLauncher.d.ts.map +1 -1
  30. package/dist/typescript/commonjs/features/chatbot/index.d.ts +2 -1
  31. package/dist/typescript/commonjs/features/chatbot/index.d.ts.map +1 -1
  32. package/dist/typescript/commonjs/features/chatbot/model/VoiceTranscriptSnapshotModel.d.ts +32 -0
  33. package/dist/typescript/commonjs/features/chatbot/model/VoiceTranscriptSnapshotModel.d.ts.map +1 -0
  34. package/dist/typescript/commonjs/features/chatbot/types/api.types.d.ts +1 -0
  35. package/dist/typescript/commonjs/features/chatbot/types/api.types.d.ts.map +1 -1
  36. package/dist/typescript/commonjs/features/keyboard/constants/groups/units.constants.d.ts.map +1 -1
  37. package/dist/typescript/commonjs/features/keyboard/constants/keys/units.constants.d.ts +8 -42
  38. package/dist/typescript/commonjs/features/keyboard/constants/keys/units.constants.d.ts.map +1 -1
  39. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.constants.d.ts +1 -1
  40. package/dist/typescript/commonjs/features/voice/recording/components/VoiceRecordButton.d.ts.map +1 -1
  41. package/dist/typescript/commonjs/lib/effector/createControllerEffect.d.ts +1 -0
  42. package/dist/typescript/commonjs/lib/effector/createControllerEffect.d.ts.map +1 -1
  43. package/dist/typescript/module/features/chatbot/components/ChatControls/ChatLauncher.d.ts.map +1 -1
  44. package/dist/typescript/module/features/chatbot/index.d.ts +2 -1
  45. package/dist/typescript/module/features/chatbot/index.d.ts.map +1 -1
  46. package/dist/typescript/module/features/chatbot/model/VoiceTranscriptSnapshotModel.d.ts +32 -0
  47. package/dist/typescript/module/features/chatbot/model/VoiceTranscriptSnapshotModel.d.ts.map +1 -0
  48. package/dist/typescript/module/features/chatbot/types/api.types.d.ts +1 -0
  49. package/dist/typescript/module/features/chatbot/types/api.types.d.ts.map +1 -1
  50. package/dist/typescript/module/features/keyboard/constants/groups/units.constants.d.ts.map +1 -1
  51. package/dist/typescript/module/features/keyboard/constants/keys/units.constants.d.ts +8 -42
  52. package/dist/typescript/module/features/keyboard/constants/keys/units.constants.d.ts.map +1 -1
  53. package/dist/typescript/module/features/pmProgress/shared/pmProgress.constants.d.ts +1 -1
  54. package/dist/typescript/module/features/voice/recording/components/VoiceRecordButton.d.ts.map +1 -1
  55. package/dist/typescript/module/lib/effector/createControllerEffect.d.ts +1 -0
  56. package/dist/typescript/module/lib/effector/createControllerEffect.d.ts.map +1 -1
  57. package/package.json +2 -2
  58. package/src/features/chatbot/components/ChatControls/ChatLauncher.tsx +1 -3
  59. package/src/features/chatbot/index.ts +2 -0
  60. package/src/features/chatbot/model/VoiceTranscriptSnapshotModel.ts +159 -0
  61. package/src/features/chatbot/types/api.types.ts +1 -0
  62. package/src/features/keyboard/constants/groups/units.constants.ts +6 -4
  63. package/src/features/keyboard/constants/keys/units.constants.tsx +8 -20
  64. package/src/features/voice/recording/components/VoiceRecordButton.tsx +2 -3
  65. package/src/i18n/.generated/schema.json +1 -0
  66. package/src/lib/effector/createControllerEffect.ts +13 -6
@@ -2,12 +2,13 @@ export { Chatbot } from './components/Chatbot';
2
2
  export { ChatbotAvatar } from './components/Chat/ChatbotAvatar';
3
3
  export { ChatLauncher } from './components/ChatControls/ChatLauncher';
4
4
  export { ChatbotModel } from './model/ChatBotModel';
5
+ export { VoiceTranscriptSnapshotModel } from './model/VoiceTranscriptSnapshotModel';
5
6
  export { AudioStatus, type AudioProvider, type TTSHighlightRenderer, type TTSHighlightRendererProps, } from './types/t2s.types';
6
7
  export { MessageVariant, type ChatbotModelProps, type IChatDrawBoardAdapter, } from './types/model.types';
7
8
  export { ChatbotAvatarVariant, ChatbotVariant } from './constants';
8
9
  export { getChatbotAvatarVariant } from './helpers';
9
10
  export type { RequestOptionalConfig } from '../../lib/effector/createControllerEffect';
10
- export type { PostMessageResponse, ChatHintPayload, ChatHintResponse, GetAlternativesPayload, GetAlternativesResponse, SendMessagePayload, SendMessageResponse, } from './types/api.types';
11
+ export type { PostMessageResponse, ChatHintPayload, ChatHintResponse, ChatHistory, GetAlternativesPayload, GetAlternativesResponse, SendMessagePayload, SendMessageResponse, } from './types/api.types';
11
12
  export { DefaultMessagesCreator } from './model/DefaultMessageCreator';
12
13
  export type { ChatAnswer } from './types/units.types';
13
14
  export type { ConversationMessage } from './types/units.types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/chatbot/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACtF,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/chatbot/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AACnF,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACtF,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { AudioTranscriptResponse } from '../../voice/types';
2
+ import { VoiceRecordModel } from '../../voice/recording/model/VoiceRecord.model';
3
+ import { RequestOptionalConfig } from '../../../lib/effector/createControllerEffect';
4
+ type GetTranscriptApi = {
5
+ getAudioFileTranscript: (audioFileId: string) => Promise<AudioTranscriptResponse>;
6
+ };
7
+ export type VoiceTranscriptErrorHandler = (errorMessage: string) => void;
8
+ type VoiceTranscriptSnapshotModelProps = {
9
+ voiceRecord: VoiceRecordModel;
10
+ api: GetTranscriptApi;
11
+ errorHandler?: VoiceTranscriptErrorHandler;
12
+ };
13
+ export declare class VoiceTranscriptSnapshotModel {
14
+ readonly fetchTranscript: (audioFileId: string) => Promise<string | undefined>;
15
+ readonly getTranscriptForCurrent: () => Promise<string | undefined>;
16
+ readonly wrapRequestHint: <P extends object, R>(apiFn: (params: P & {
17
+ voiceTranscript?: string;
18
+ }, requestConfig?: RequestOptionalConfig) => Promise<R>) => (params: P, requestConfig?: RequestOptionalConfig) => Promise<R>;
19
+ private hasPendingVoice;
20
+ constructor({ voiceRecord, api, errorHandler }: VoiceTranscriptSnapshotModelProps);
21
+ private readonly voiceRecord;
22
+ private readonly api;
23
+ private readonly errorHandler?;
24
+ private readonly transcriptByAudioFileId;
25
+ private readonly snapshotByChatKey;
26
+ private readonly captureSnapshotFx;
27
+ private readonly clearSnapshotFx;
28
+ private pollTranscript;
29
+ private resolveAudioFileId;
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=VoiceTranscriptSnapshotModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceTranscriptSnapshotModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/model/VoiceTranscriptSnapshotModel.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EAGxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAA;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AAOpF,KAAK,gBAAgB,GAAG;IACtB,sBAAsB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;CAClF,CAAA;AAOD,MAAM,MAAM,2BAA2B,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;AAExE,KAAK,iCAAiC,GAAG;IACvC,WAAW,EAAE,gBAAgB,CAAA;IAC7B,GAAG,EAAE,gBAAgB,CAAA;IACrB,YAAY,CAAC,EAAE,2BAA2B,CAAA;CAC3C,CAAA;AAUD,qBAAa,4BAA4B;IACvC,SAAgB,eAAe,gBAAiB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAOnF;IAED,SAAgB,uBAAuB,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiB9E;IAED,SAAgB,eAAe,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAC7C,CACL,MAAM,EAAE,CAAC,GAAG;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,EACxC,aAAa,CAAC,EAAE,qBAAqB,KAClC,OAAO,CAAC,CAAC,CAAC,cAEO,CAAC,kBAAkB,qBAAqB,KAAG,OAAO,CAAC,CAAC,CAAC,CAO5E;IAED,OAAO,CAAC,eAAe;gBAQX,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,iCAAiC;IAoBjF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiD;IACzF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiD;IAEnF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAQhC;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG9B;YAEY,cAAc;YAgBd,kBAAkB;CAUjC"}
@@ -116,6 +116,7 @@ export type ChatHintPayload = {
116
116
  studentInput: string;
117
117
  answerOptions?: string[];
118
118
  assignmentGrade?: number;
119
+ voiceTranscript?: string;
119
120
  };
120
121
  export type ChatHintResponse = {
121
122
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"api.types.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/types/api.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.types.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/types/api.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"units.constants.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/keyboard/constants/groups/units.constants.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,kBA6B7B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,kBA8B3B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,kBA0D7B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,kBAkB7B,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,kBAIjC,CAAA"}
1
+ {"version":3,"file":"units.constants.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/keyboard/constants/groups/units.constants.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,kBA6B7B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,kBA8B3B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,kBA4D7B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,kBAkB7B,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,kBAIjC,CAAA"}
@@ -166,9 +166,9 @@ export declare const MATH_VOLUME_UNITS: {
166
166
  };
167
167
  };
168
168
  readonly MILLILITER: {
169
- readonly label: "ml";
169
+ readonly label: "mL";
170
170
  readonly mathliveValue: "\\mathrm{mL}";
171
- readonly katexValue: "ml";
171
+ readonly katexValue: "mL";
172
172
  readonly style: {
173
173
  button: {
174
174
  width: number;
@@ -199,44 +199,10 @@ export declare const MATH_VOLUME_UNITS: {
199
199
  };
200
200
  };
201
201
  };
202
- readonly MILLILITER_SE: {
203
- readonly label: "ml";
204
- readonly mathliveValue: "\\mathrm{ml}";
205
- readonly katexValue: "ml";
206
- readonly style: {
207
- button: {
208
- width: number;
209
- };
210
- container: {
211
- flexBasis: number;
212
- } | undefined;
213
- text: {
214
- readonly fontSize: 14;
215
- readonly fontWeight: 700;
216
- };
217
- };
218
- };
219
- readonly LITER_SE: {
220
- readonly label: "l";
221
- readonly mathliveValue: "\\mathrm{l}";
222
- readonly katexValue: "l";
223
- readonly style: {
224
- button: {
225
- width: number;
226
- };
227
- container: {
228
- flexBasis: number;
229
- } | undefined;
230
- text: {
231
- readonly fontSize: 14;
232
- readonly fontWeight: 700;
233
- };
234
- };
235
- };
236
202
  readonly DL: {
237
- readonly label: "dl";
238
- readonly mathliveValue: "\\mathrm{dl}";
239
- readonly katexValue: "dl";
203
+ readonly label: "dL";
204
+ readonly mathliveValue: "\\mathrm{dL}";
205
+ readonly katexValue: "dL";
240
206
  readonly style: {
241
207
  button: {
242
208
  width: number;
@@ -337,9 +303,9 @@ export declare const MATH_VOLUME_UNITS: {
337
303
  };
338
304
  };
339
305
  readonly CL: {
340
- readonly label: "cl";
341
- readonly mathliveValue: "\\mathrm{cl}";
342
- readonly katexValue: "cl";
306
+ readonly label: "cL";
307
+ readonly mathliveValue: "\\mathrm{cL}";
308
+ readonly katexValue: "cL";
343
309
  readonly style: {
344
310
  button: {
345
311
  width: number;
@@ -1 +1 @@
1
- {"version":3,"file":"units.constants.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/keyboard/constants/keys/units.constants.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAatD,eAAO,MAAM,mBAAmB,EAAE,kBAyDxB,CAAA;AAEV,eAAO,MAAM,iBAAiB,EAAE,kBA0EtB,CAAA;AAEV,eAAO,MAAM,eAAe,EAAE,kBAsEpB,CAAA;AAEV,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmIpB,CAAA;AAEV,eAAO,MAAM,iBAAiB,EAAE,kBA6DtB,CAAA;AAEV,eAAO,MAAM,eAAe,EAAE,kBAsEpB,CAAA"}
1
+ {"version":3,"file":"units.constants.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/keyboard/constants/keys/units.constants.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAatD,eAAO,MAAM,mBAAmB,EAAE,kBAyDxB,CAAA;AAEV,eAAO,MAAM,iBAAiB,EAAE,kBA0EtB,CAAA;AAEV,eAAO,MAAM,eAAe,EAAE,kBAsEpB,CAAA;AAEV,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHpB,CAAA;AAEV,eAAO,MAAM,iBAAiB,EAAE,kBA6DtB,CAAA;AAEV,eAAO,MAAM,eAAe,EAAE,kBAsEpB,CAAA"}
@@ -32,7 +32,7 @@ export declare enum SessionStorageKeys {
32
32
  * Primary → _4 → _6 variants, cycling through 7 base colors.
33
33
  * Supports up to 21 unique colors before repeating.
34
34
  */
35
- export declare const DOMAIN_COLORS: ("#ff5279" | "#5cd497" | "#7dddac" | "#976fe6" | "#ac8ceb" | "#ff7594" | "#cb60af" | "#768de3" | "#58BFBB" | "#29a96f" | "#d9295b" | "#7853c6" | "#d681c0" | "#BA459B" | "#92a4e9" | "#4e6ed1" | "#7ACDD1" | "#279799")[];
35
+ export declare const DOMAIN_COLORS: ("#5cd497" | "#ff5279" | "#976fe6" | "#cb60af" | "#768de3" | "#58BFBB" | "#7dddac" | "#29a96f" | "#ff7594" | "#d9295b" | "#ac8ceb" | "#7853c6" | "#d681c0" | "#BA459B" | "#92a4e9" | "#4e6ed1" | "#7ACDD1" | "#279799")[];
36
36
  export declare const EMPTY_PIE_CHART_DATA: {
37
37
  value: number;
38
38
  fillPercent: number;
@@ -1 +1 @@
1
- {"version":3,"file":"VoiceRecordButton.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/voice/recording/components/VoiceRecordButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAI7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,gBAAgB,CAAA;IACvB,aAAa,EAAE,mBAAmB,CAAA;CACnC,CAAA;AAsDD,eAAO,MAAM,iBAAiB,6BAA8B,sBAAsB,sBAiDjF,CAAA"}
1
+ {"version":3,"file":"VoiceRecordButton.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/voice/recording/components/VoiceRecordButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAI7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,gBAAgB,CAAA;IACvB,aAAa,EAAE,mBAAmB,CAAA;CACnC,CAAA;AAqDD,eAAO,MAAM,iBAAiB,6BAA8B,sBAAsB,sBAiDjF,CAAA"}
@@ -9,6 +9,7 @@ type ControlledRequestProps<P> = {
9
9
  };
10
10
  export type RequestOptionalConfig = {
11
11
  signal?: AbortSignal;
12
+ extendTimeoutMs?: (ms: number) => void;
12
13
  };
13
14
  export declare function controlledRequest<R = void, P = void>(request: (props: P, config?: RequestOptionalConfig) => Promise<R>): ({ data, controller, abortAfter, }: ControlledRequestProps<P>) => Promise<R>;
14
15
  export declare const createControllerEffect: <T, P = void>(fn: (props: P, config?: RequestOptionalConfig) => Promise<T>) => ControlledEffect<P, T>;
@@ -1 +1 @@
1
- {"version":3,"file":"createControllerEffect.d.ts","sourceRoot":"","sources":["../../../../../src/lib/effector/createControllerEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAMpD,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAClD,UAAU,EAAE,eAAe,CAAA;CAC5B,CAAA;AAED,KAAK,sBAAsB,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,CAAC,CAAA;IACP,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAA;AAE5D,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAClD,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,CAAC,CAAC,uCAM9D,sBAAsB,CAAC,CAAC,CAAC,gBAwB7B;AAED,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,CAAC,aACrC,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,CAAC,CAAC,2BAa7D,CAAA"}
1
+ {"version":3,"file":"createControllerEffect.d.ts","sourceRoot":"","sources":["../../../../../src/lib/effector/createControllerEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAMpD,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAClD,UAAU,EAAE,eAAe,CAAA;CAC5B,CAAA;AAED,KAAK,sBAAsB,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,CAAC,CAAA;IACP,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC,CAAA;AAED,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAClD,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,CAAC,CAAC,uCAM9D,sBAAsB,CAAC,CAAC,CAAC,gBA4B7B;AAED,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,CAAC,aACrC,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,CAAC,CAAC,2BAa7D,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magmamath/students-features",
3
- "version": "1.6.4-rc.0-testid",
3
+ "version": "1.6.4",
4
4
  "description": "Magmamath features library",
5
5
  "source": "src/index.ts",
6
6
  "main": "src/index.ts",
@@ -75,7 +75,7 @@
75
75
  "@magmamath/frontend-config": "1.4.0",
76
76
  "@magmamath/react-native-draw-board": "1.8.2",
77
77
  "@magmamath/react-native-ui": "0.5.9",
78
- "@magmamath/students-qa": "0.2.3",
78
+ "@magmamath/students-qa": "0.1.9",
79
79
  "@matteappen/skills-utils": "^3.7.1",
80
80
  "@react-native-masked-view/masked-view": "^0.3.2",
81
81
  "@react-native/eslint-config": "^0.73.1",
@@ -8,7 +8,6 @@ import {
8
8
  COLORS,
9
9
  SparkIcon,
10
10
  } from '@magmamath/react-native-ui'
11
- import { TEST_IDS } from '@magmamath/students-qa'
12
11
  import { LavaIcon } from '../../../../shared/icons'
13
12
  import { ChatbotVariant } from '../../constants'
14
13
 
@@ -33,13 +32,12 @@ export const ChatLauncher = ({
33
32
  onPress={onPress}
34
33
  icon={<SparkIcon color={COLORS.PRIMARY_ORANGE} size={iconSize} />}
35
34
  accessibilityRole="button"
36
- testID={TEST_IDS.CHAT_LAUNCHER_BUTTON}
37
35
  />
38
36
  )
39
37
  }
40
38
 
41
39
  return (
42
- <Pressable onPress={onPress} accessibilityRole="button" testID={TEST_IDS.CHAT_LAUNCHER_BUTTON}>
40
+ <Pressable onPress={onPress} accessibilityRole="button">
43
41
  <LavaIcon size={iconSize} />
44
42
  </Pressable>
45
43
  )
@@ -2,6 +2,7 @@ export { Chatbot } from './components/Chatbot'
2
2
  export { ChatbotAvatar } from './components/Chat/ChatbotAvatar'
3
3
  export { ChatLauncher } from './components/ChatControls/ChatLauncher'
4
4
  export { ChatbotModel } from './model/ChatBotModel'
5
+ export { VoiceTranscriptSnapshotModel } from './model/VoiceTranscriptSnapshotModel'
5
6
  export {
6
7
  AudioStatus,
7
8
  type AudioProvider,
@@ -20,6 +21,7 @@ export type {
20
21
  PostMessageResponse,
21
22
  ChatHintPayload,
22
23
  ChatHintResponse,
24
+ ChatHistory,
23
25
  GetAlternativesPayload,
24
26
  GetAlternativesResponse,
25
27
  SendMessagePayload,
@@ -0,0 +1,159 @@
1
+ import { createEffect, sample } from 'effector'
2
+ import {
3
+ AudioTranscriptResponse,
4
+ TranscriptionStatus,
5
+ VoiceRecordCollectionItem,
6
+ } from '../../voice/types'
7
+ import { VoiceRecordModel } from '../../voice/recording/model/VoiceRecord.model'
8
+ import { RequestOptionalConfig } from '../../../lib/effector/createControllerEffect'
9
+ import { getText } from '../../../i18n/i18n'
10
+
11
+ const TRANSCRIPT_RETRY_INTERVAL_MS = 2000
12
+ const TRANSCRIPT_MAX_RETRIES = 20
13
+ const CHAT_WITH_VOICE_TIMEOUT_MS = 60_000
14
+
15
+ type GetTranscriptApi = {
16
+ getAudioFileTranscript: (audioFileId: string) => Promise<AudioTranscriptResponse>
17
+ }
18
+
19
+ type CaptureParams = {
20
+ voiceKey: string
21
+ record: VoiceRecordCollectionItem
22
+ }
23
+
24
+ export type VoiceTranscriptErrorHandler = (errorMessage: string) => void
25
+
26
+ type VoiceTranscriptSnapshotModelProps = {
27
+ voiceRecord: VoiceRecordModel
28
+ api: GetTranscriptApi
29
+ errorHandler?: VoiceTranscriptErrorHandler
30
+ }
31
+
32
+ // Voice key: `${assignmentId}-${problemId}-${attemptsCount}`
33
+ // Chat key: `${assignmentId}-${problemId}` — survives attempt increments and voice deletion.
34
+ const toChatKey = (voiceKey: string): string | null => {
35
+ const lastDashIndex = voiceKey.lastIndexOf('-')
36
+ if (lastDashIndex <= 0) return null
37
+ return voiceKey.slice(0, lastDashIndex)
38
+ }
39
+
40
+ export class VoiceTranscriptSnapshotModel {
41
+ public readonly fetchTranscript = (audioFileId: string): Promise<string | undefined> => {
42
+ const cached = this.transcriptByAudioFileId.get(audioFileId)
43
+ if (cached) return cached
44
+
45
+ const promise = this.pollTranscript(audioFileId).catch(() => undefined)
46
+ this.transcriptByAudioFileId.set(audioFileId, promise)
47
+ return promise
48
+ }
49
+
50
+ public readonly getTranscriptForCurrent = async (): Promise<string | undefined> => {
51
+ const voiceKey = this.voiceRecord.$currentKey.getState()
52
+ if (!voiceKey) return undefined
53
+
54
+ const chatKey = toChatKey(voiceKey)
55
+ if (chatKey) {
56
+ const snapshot = this.snapshotByChatKey.get(chatKey)
57
+ if (snapshot) return snapshot
58
+ }
59
+
60
+ const record = this.voiceRecord.collection.get(voiceKey)
61
+ if (!record) return undefined
62
+
63
+ const audioFileId = await this.resolveAudioFileId(record)
64
+ if (!audioFileId) return undefined
65
+
66
+ return this.fetchTranscript(audioFileId)
67
+ }
68
+
69
+ public readonly wrapRequestHint = <P extends object, R>(
70
+ apiFn: (
71
+ params: P & { voiceTranscript?: string },
72
+ requestConfig?: RequestOptionalConfig,
73
+ ) => Promise<R>,
74
+ ) => {
75
+ return async (params: P, requestConfig?: RequestOptionalConfig): Promise<R> => {
76
+ if (this.hasPendingVoice()) {
77
+ requestConfig?.extendTimeoutMs?.(CHAT_WITH_VOICE_TIMEOUT_MS)
78
+ }
79
+ const voiceTranscript = await this.getTranscriptForCurrent()
80
+ return apiFn(voiceTranscript ? { ...params, voiceTranscript } : params, requestConfig)
81
+ }
82
+ }
83
+
84
+ private hasPendingVoice(): boolean {
85
+ const voiceKey = this.voiceRecord.$currentKey.getState()
86
+ if (!voiceKey) return false
87
+ const chatKey = toChatKey(voiceKey)
88
+ if (chatKey && this.snapshotByChatKey.has(chatKey)) return true
89
+ return !!this.voiceRecord.collection.get(voiceKey)
90
+ }
91
+
92
+ constructor({ voiceRecord, api, errorHandler }: VoiceTranscriptSnapshotModelProps) {
93
+ this.voiceRecord = voiceRecord
94
+ this.api = api
95
+ this.errorHandler = errorHandler
96
+
97
+ sample({
98
+ clock: voiceRecord.setCurrentRecord,
99
+ source: voiceRecord.$currentKey,
100
+ filter: (_, record): record is VoiceRecordCollectionItem => !!record,
101
+ fn: (voiceKey, record) => ({ voiceKey, record }),
102
+ target: this.captureSnapshotFx,
103
+ })
104
+
105
+ sample({
106
+ clock: voiceRecord.deleteCurrentRecording,
107
+ source: voiceRecord.$currentKey,
108
+ target: this.clearSnapshotFx,
109
+ })
110
+ }
111
+
112
+ private readonly voiceRecord: VoiceRecordModel
113
+ private readonly api: GetTranscriptApi
114
+ private readonly errorHandler?: VoiceTranscriptErrorHandler
115
+ private readonly transcriptByAudioFileId = new Map<string, Promise<string | undefined>>()
116
+ private readonly snapshotByChatKey = new Map<string, Promise<string | undefined>>()
117
+
118
+ private readonly captureSnapshotFx = createEffect(({ voiceKey, record }: CaptureParams) => {
119
+ const chatKey = toChatKey(voiceKey)
120
+ if (!chatKey) return
121
+
122
+ const transcriptPromise = this.resolveAudioFileId(record).then((audioFileId) =>
123
+ audioFileId ? this.fetchTranscript(audioFileId) : undefined,
124
+ )
125
+ this.snapshotByChatKey.set(chatKey, transcriptPromise)
126
+ })
127
+
128
+ private readonly clearSnapshotFx = createEffect((voiceKey: string) => {
129
+ const chatKey = toChatKey(voiceKey)
130
+ if (chatKey) this.snapshotByChatKey.delete(chatKey)
131
+ })
132
+
133
+ private async pollTranscript(audioFileId: string): Promise<string | undefined> {
134
+ for (let attempt = 0; attempt < TRANSCRIPT_MAX_RETRIES; attempt++) {
135
+ await new Promise((resolve) => setTimeout(resolve, TRANSCRIPT_RETRY_INTERVAL_MS))
136
+
137
+ try {
138
+ const response = await this.api.getAudioFileTranscript(audioFileId)
139
+ if (response.status === TranscriptionStatus.COMPLETED) return response.text
140
+ if (response.status === TranscriptionStatus.FAILED) break
141
+ } catch {
142
+ // network/request failure — retry on next iteration
143
+ }
144
+ }
145
+ this.errorHandler?.(getText('voice.transcriptionError'))
146
+ return undefined
147
+ }
148
+
149
+ private async resolveAudioFileId(record: VoiceRecordCollectionItem): Promise<string | undefined> {
150
+ if (record.id) return record.id
151
+ if (!record.audioUploadPromise) return undefined
152
+ try {
153
+ const result = await record.audioUploadPromise
154
+ return result?.id
155
+ } catch {
156
+ return undefined
157
+ }
158
+ }
159
+ }
@@ -130,6 +130,7 @@ export type ChatHintPayload = {
130
130
  studentInput: string
131
131
  answerOptions?: string[]
132
132
  assignmentGrade?: number
133
+ voiceTranscript?: string
133
134
  }
134
135
 
135
136
  export type ChatHintResponse = {
@@ -84,7 +84,7 @@ export const KEYBOARD_VOLUME: KeyboardRowsGroups = {
84
84
  MATH_VOLUME_UNITS.MILLILITER,
85
85
  MATH_VOLUME_UNITS.CL,
86
86
  MATH_VOLUME_UNITS.DL,
87
- MATH_VOLUME_UNITS.LITER_SE,
87
+ MATH_VOLUME_UNITS.LITER,
88
88
  ],
89
89
  ],
90
90
  },
@@ -94,8 +94,9 @@ export const KEYBOARD_VOLUME: KeyboardRowsGroups = {
94
94
  MATH_VOLUME_UNITS.CUBIC_MILLIMETER,
95
95
  MATH_VOLUME_UNITS.CUBIC_CENTIMETER,
96
96
  MATH_VOLUME_UNITS.CUBIC_METER,
97
- MATH_VOLUME_UNITS.CUBIC_KILOMETER,
98
- MATH_VOLUME_UNITS.MILLILITER_SE,
97
+ MATH_VOLUME_UNITS.MILLILITER,
98
+ MATH_VOLUME_UNITS.CL,
99
+ MATH_VOLUME_UNITS.LITER,
99
100
  MATH_VOLUME_UNITS.GAL,
100
101
  ],
101
102
  [
@@ -114,8 +115,9 @@ export const KEYBOARD_VOLUME: KeyboardRowsGroups = {
114
115
  MATH_VOLUME_UNITS.CUBIC_MILLIMETER,
115
116
  MATH_VOLUME_UNITS.CUBIC_CENTIMETER,
116
117
  MATH_VOLUME_UNITS.CUBIC_METER,
117
- MATH_VOLUME_UNITS.CUBIC_KILOMETER,
118
118
  MATH_VOLUME_UNITS.MILLILITER,
119
+ MATH_VOLUME_UNITS.CL,
120
+ MATH_VOLUME_UNITS.LITER,
119
121
  MATH_VOLUME_UNITS.GAL,
120
122
  ],
121
123
  [
@@ -285,9 +285,9 @@ export const MATH_VOLUME_UNITS = {
285
285
  style: KEYBOARD_STYLE_PRESETS.MEDIUM,
286
286
  },
287
287
  MILLILITER: {
288
- label: 'ml',
288
+ label: 'mL',
289
289
  mathliveValue: '\\mathrm{mL}',
290
- katexValue: 'ml',
290
+ katexValue: 'mL',
291
291
  style: KEYBOARD_STYLE_PRESETS.SMALL,
292
292
  },
293
293
  LITER: {
@@ -296,22 +296,10 @@ export const MATH_VOLUME_UNITS = {
296
296
  katexValue: 'L',
297
297
  style: KEYBOARD_STYLE_PRESETS.SMALL,
298
298
  },
299
- MILLILITER_SE: {
300
- label: 'ml',
301
- mathliveValue: '\\mathrm{ml}',
302
- katexValue: 'ml',
303
- style: KEYBOARD_STYLE_PRESETS.SMALL,
304
- },
305
- LITER_SE: {
306
- label: 'l',
307
- mathliveValue: '\\mathrm{l}',
308
- katexValue: 'l',
309
- style: KEYBOARD_STYLE_PRESETS.SMALL,
310
- },
311
299
  DL: {
312
- label: 'dl',
313
- mathliveValue: '\\mathrm{dl}',
314
- katexValue: 'dl',
300
+ label: 'dL',
301
+ mathliveValue: '\\mathrm{dL}',
302
+ katexValue: 'dL',
315
303
  style: KEYBOARD_STYLE_PRESETS.SMALL,
316
304
  },
317
305
  CUP: {
@@ -346,9 +334,9 @@ export const MATH_VOLUME_UNITS = {
346
334
  style: KEYBOARD_STYLE_PRESETS.XL,
347
335
  },
348
336
  CL: {
349
- label: 'cl',
350
- mathliveValue: '\\mathrm{cl}',
351
- katexValue: 'cl',
337
+ label: 'cL',
338
+ mathliveValue: '\\mathrm{cL}',
339
+ katexValue: 'cL',
352
340
  style: KEYBOARD_STYLE_PRESETS.SMALL,
353
341
  },
354
342
  } as const
@@ -59,6 +59,7 @@ const AdvancedButton = ({ isRecording, disabled, onPressIn }: AdvancedButtonProp
59
59
  }}
60
60
  isActive={isRecording}
61
61
  variant={ButtonVariant.TERTIARY}
62
+ disabled={disabled}
62
63
  onPressIn={onPressIn}
63
64
  icon={
64
65
  isRecording ? (
@@ -66,9 +67,7 @@ const AdvancedButton = ({ isRecording, disabled, onPressIn }: AdvancedButtonProp
66
67
  ) : (
67
68
  <MicrophoneIcon
68
69
  style={styles.advancedMicrophoneIcon}
69
- color={
70
- disabled ? COLORS.NEUTRAL_5 : isRecording ? COLORS.NEUTRAL_1 : COLORS.NEUTRAL_9
71
- }
70
+ color={isRecording ? COLORS.NEUTRAL_1 : COLORS.NEUTRAL_9}
72
71
  />
73
72
  )
74
73
  }
@@ -144,6 +144,7 @@
144
144
  "redo": "Redo",
145
145
  "redoRecording": "Redo recording?",
146
146
  "thisWillRemoveRecording": "This will remove your previous recording.",
147
+ "transcriptionError": "Transcription request error",
147
148
  "transcriptions": "Transcriptions",
148
149
  "transcriptNotAvailable": "Transcript not available",
149
150
  "uploadFailed": "Upload failed. Please try again.",
@@ -14,7 +14,10 @@ type ControlledRequestProps<P> = {
14
14
  abortAfter?: number
15
15
  }
16
16
 
17
- export type RequestOptionalConfig = { signal?: AbortSignal }
17
+ export type RequestOptionalConfig = {
18
+ signal?: AbortSignal
19
+ extendTimeoutMs?: (ms: number) => void
20
+ }
18
21
 
19
22
  export function controlledRequest<R = void, P = void>(
20
23
  request: (props: P, config?: RequestOptionalConfig) => Promise<R>,
@@ -26,14 +29,18 @@ export function controlledRequest<R = void, P = void>(
26
29
  }: ControlledRequestProps<P>) => {
27
30
  let timeout: ReturnType<typeof setTimeout> | null = null
28
31
 
29
- if (abortAfter) {
30
- timeout = setTimeout(() => {
31
- controller.abort('timeout')
32
- }, abortAfter)
32
+ const scheduleAbort = (ms: number) => {
33
+ if (timeout !== null) clearTimeout(timeout)
34
+ timeout = ms > 0 ? setTimeout(() => controller.abort('timeout'), ms) : null
33
35
  }
34
36
 
37
+ if (abortAfter) scheduleAbort(abortAfter)
38
+
35
39
  try {
36
- const response = await request(data, { signal: controller?.signal })
40
+ const response = await request(data, {
41
+ signal: controller?.signal,
42
+ extendTimeoutMs: scheduleAbort,
43
+ })
37
44
  if (timeout !== null) clearTimeout(timeout)
38
45
  return response
39
46
  } catch (error: unknown) {