testaugnitoambientsdk2 2.1.2

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 (49) hide show
  1. package/.changeset/README.md +8 -0
  2. package/.changeset/config.json +11 -0
  3. package/README.md +629 -0
  4. package/dist/AugnitoAmbient.d.ts +167 -0
  5. package/dist/api/AmbientPACEAPI.d.ts +16 -0
  6. package/dist/api/AmbientRestAPI.d.ts +21 -0
  7. package/dist/api/BaseAPI.d.ts +4 -0
  8. package/dist/augnitoambientsdk.js +1 -0
  9. package/dist/config/AmbientConfig.d.ts +36 -0
  10. package/dist/config/ErrorCodes.d.ts +24 -0
  11. package/dist/config/ErrorInfo.d.ts +5 -0
  12. package/dist/config/HttpCodedError.d.ts +4 -0
  13. package/dist/config/NoteOutputStyleConfig.d.ts +4 -0
  14. package/dist/config/NoteTypeConfig.d.ts +7 -0
  15. package/dist/config/NoteVerbosityConfig.d.ts +4 -0
  16. package/dist/config/PreferenceConfig.d.ts +10 -0
  17. package/dist/config/SettingsConfig.d.ts +12 -0
  18. package/dist/config/index.d.ts +9 -0
  19. package/dist/config/socketConfig.d.ts +9 -0
  20. package/dist/index.d.ts +2 -0
  21. package/dist/support/AugnitoSocketResponse.d.ts +17 -0
  22. package/dist/utils/Constants.d.ts +24 -0
  23. package/dist/utils/Guard.d.ts +7 -0
  24. package/dist/utils/Logger.d.ts +6 -0
  25. package/package.json +41 -0
  26. package/rollup.config.js +31 -0
  27. package/src/AugnitoAmbient.ts +800 -0
  28. package/src/api/AmbientPACEAPI.ts +89 -0
  29. package/src/api/AmbientRestAPI.ts +190 -0
  30. package/src/api/BaseAPI.ts +53 -0
  31. package/src/config/AmbientConfig.ts +42 -0
  32. package/src/config/ErrorCodes.ts +25 -0
  33. package/src/config/ErrorInfo.ts +7 -0
  34. package/src/config/HttpCodedError.ts +10 -0
  35. package/src/config/NoteOutputStyleConfig.ts +4 -0
  36. package/src/config/NoteTypeConfig.ts +7 -0
  37. package/src/config/NoteVerbosityConfig.ts +4 -0
  38. package/src/config/PreferenceConfig.ts +11 -0
  39. package/src/config/SettingsConfig.ts +13 -0
  40. package/src/config/index.ts +9 -0
  41. package/src/config/socketConfig.ts +34 -0
  42. package/src/index.ts +2 -0
  43. package/src/support/AugnitoSocketResponse.ts +16 -0
  44. package/src/utils/Constants.ts +24 -0
  45. package/src/utils/Guard.js +28 -0
  46. package/src/utils/Guard.ts +31 -0
  47. package/src/utils/Logger.js +17 -0
  48. package/src/utils/Logger.ts +15 -0
  49. package/tsconfig.json +114 -0
@@ -0,0 +1,167 @@
1
+ import AmbientConfig from "./config/AmbientConfig";
2
+ import { SettingsConfigType, UserConfigMap } from "./config/SettingsConfig";
3
+ import { NoteTypeConfig } from "./config/NoteTypeConfig";
4
+ import { PreferenceConfig } from "./config";
5
+ import ErrorInfo from "./config/ErrorInfo";
6
+ /**
7
+ * Augnito Ambient Manager
8
+ * @description Handles the connection with the Ambient API Server.
9
+ */
10
+ export declare class AugnitoAmbient {
11
+ private _logTag;
12
+ private _ambientRestAPI;
13
+ private _ambientPaceAPI;
14
+ private config;
15
+ private enableLog;
16
+ private shouldReadAudioIntensity;
17
+ private recorderIns;
18
+ private forceStopAudio;
19
+ private _isRecording;
20
+ constructor(config: AmbientConfig);
21
+ /**
22
+ * @description Callback to receive the JOb Id
23
+ */
24
+ onJobCreated?: (text: string) => void;
25
+ /**
26
+ * @description Callback for status changed
27
+ */
28
+ onStateChanged?: (isRecording: boolean) => void;
29
+ /**
30
+ * Callback triggered when an error occurs within the SDK
31
+ */
32
+ onError?: (error: ErrorInfo) => void;
33
+ onOtherResult?: (text: string) => void;
34
+ onIntensityValue?: (intensity: number) => void;
35
+ onIdleMic?: () => void;
36
+ private initRecorder;
37
+ /**
38
+ * Returns the Note parameters which need be use while doing toggle listeing
39
+ * @returns JSON object of Note parameters
40
+ */
41
+ getNoteParams(): Promise<any>;
42
+ /**
43
+ * @param PageSize number of notes to fetch
44
+ * @param PageID is optional parameter, send start page id to fetch
45
+ * @returns list of notes for the user
46
+ */
47
+ getAllNotes(PageSize: number, PageID?: string): Promise<any>;
48
+ /**
49
+ * @param JobId to retrieve output for a specific audio file
50
+ * @returns JSON object contains both Transcript and Note on sucess else fail resonse
51
+ */
52
+ getSummarizedNote(JobId: string): Promise<any>;
53
+ /**
54
+ * @param JobId needs to pass to store the final Note for that audio
55
+ * @param NoteDate This key will store the final edited Note that user wants to send.
56
+ * @returns suceess response on successful submit of note else fail response
57
+ */
58
+ sendSummarizedNote(JobId: string, NoteDate: string): Promise<any>;
59
+ /**
60
+ * @param filetype Type of file being uploaded, wav, mp3, etc. Ex: “filetype=wav“
61
+ * @param noteparams Qualifiers to determine the type of clinical note to be generated for that audio file.
62
+ * @returns Callback triggers to reurn the Job id on meta message
63
+ */
64
+ toggleListening(_filetype: string, _noteparams: string, jobName?: string, jobId?: string, recordedDuration?: number): void;
65
+ /**
66
+ * Method called to pause or resume audio recording accordingly
67
+ * @param filetype Type of file being uploaded, wav, mp3, etc. Ex: “filetype=wav“
68
+ * @param noteparams Qualifiers to determine the type of clinical note to be generated for that audio file.
69
+ * @returns Callback triggers to reurn the Job id on meta message
70
+ */
71
+ togglePauseResumeListening(_filetype: string, _noteparams: string, jobName?: string, jobId?: string, recordedDuration?: number): void;
72
+ /**
73
+ * Method called to start audio recording
74
+ */
75
+ startListening(): void;
76
+ /**
77
+ * Method called to stop audio recording and clean up resources
78
+ */
79
+ stopListening(): void;
80
+ /**
81
+ * @param JobIds to delete one or more notes
82
+ * @returns success response on successful delete of notes else fail response
83
+ */
84
+ deleteNotes(JobIds: string[]): Promise<any>;
85
+ /**
86
+ * @param JobId to rename note title
87
+ * @param NewJobName new title for the note
88
+ * @returns success response on successful rename of note else fail response
89
+ */
90
+ renameNoteTitle(JobId: string, NewJobName: string): Promise<any>;
91
+ /**
92
+ * @param JobId to retrieve pdf for a specific note
93
+ * @param NoteType takes a NoteTypeConfig value
94
+ * @param SpecialityId a numberic value which identifies the department to populate in the PDF
95
+ * @param Language, optional parameter, to specify the language in which to generate PDF, default value being English
96
+ * @param PersonnelInfo, optional parameter, to give details to fill into header of PDF. Default json string is '{"PatientName":"","PatientID":"","Age":"","Gender":"","ReceivingDoctor":"","DoctorName":"","DoctorDesignation":"","DoctorEmail":""}'
97
+ * @param RegenerateNote, optional parameter, to indicate if PDF has to be re-generated especially after an update is made to the note
98
+ * @returns json response with base64 string of the pdf output to be read from Data.PDF of the response
99
+ */
100
+ getNotePDF(JobId: string, NoteType: NoteTypeConfig, SpecialityId: number, Language?: string, PersonnelInfo?: string, RegenerateNote?: boolean): Promise<any>;
101
+ /**
102
+ * @param JobId to end note forcefully for paused job
103
+ * @returns success response on end of job else fail response
104
+ */
105
+ endPausedJob(JobId: string): Promise<any>;
106
+ /**
107
+ * @param JobId needs to be passed to generate output
108
+ * @param Regenerate a bool to be set to true if CDI suggestions should be re-generated after an update is made to the note else set to false
109
+ * @param SoapNote is the structered soap note used to generate suggestions
110
+ * @param Codes structured medical codes used to generate suggestions
111
+ * @param PatientDetails json string which contains details such as age, gender and history of patient
112
+ * @returns JSON object contains suggestion Items on success else fail response
113
+ */
114
+ generateCDISuggestions(JobId: string, Regenerate: boolean, SoapNote?: string, Codes?: string, PatientDetails?: string): Promise<any>;
115
+ /**
116
+ * @param JobId for which patient context needs to be updated
117
+ * @param Context a text string which gives context/history of patient useful to generate note
118
+ * @param Replace to be set to true if an update of context needs to be saved
119
+ * @returns success response on update of context else fail response
120
+ */
121
+ updatePatientContext(JobId: string, Context: string, Replace: boolean): Promise<any>;
122
+ /**
123
+ * @param JobId for which note such as patient/referral/CDI suggestions needs to be updated
124
+ * @param NoteType takes a NoteTypeConfig value
125
+ * @param NewNote to update note json with specific values modified such as to submit feedback for CDI suggestions
126
+ * @returns success response on update of new note else fail response
127
+ */
128
+ modifyGeneratedNote(JobId: string, NoteType: NoteTypeConfig, NewNote?: string): Promise<any>;
129
+ /**
130
+ * @param JobId to retrieve transcript for a specific audio file
131
+ * @returns JSON object contains Time in seconds, Text spoken at that time and also array of MedicalData to highlight on success else fail response.
132
+ */
133
+ fetchTranscriptionForNote(JobId: string): Promise<any>;
134
+ /**
135
+ * @param ConfigId to retrieve user config list for speciality type, visit type etc
136
+ * @returns a list of user config for a particular type
137
+ */
138
+ getUserConfiguration(ConfigId: SettingsConfigType): Promise<any>;
139
+ /**
140
+ * @param ConfigMap a list of userconfig settings to update selected/unselected speciality type, visit type etc
141
+ * @returns success response on successful update else fail response
142
+ */
143
+ updateUserConfiguration(ConfigMap: UserConfigMap[]): Promise<any>;
144
+ /**
145
+ * @returns a list of user preference
146
+ */
147
+ getUserPreferenceSettings(): Promise<any>;
148
+ /**
149
+ * @param NewUserPreference a list of preference of type PreferenceConfig to be updated
150
+ * @returns success response on successful update else fail response
151
+ */
152
+ updateUserPreferenceSettings(NewUserPreference: PreferenceConfig): Promise<any>;
153
+ private onEventCallback;
154
+ private onStateChangeCallback;
155
+ private handleException;
156
+ private onErrorCallback;
157
+ private onOtherResultsCallback;
158
+ private onIntensityCallback;
159
+ private onIdleMicCallback;
160
+ private onSessionEventCallback;
161
+ /**
162
+ * Validates the Ambient config has all the mandatory fields
163
+ * @param config The config sent by the client application
164
+ */
165
+ validateConfig(config: AmbientConfig): AmbientConfig;
166
+ private createSocketConfig;
167
+ }
@@ -0,0 +1,16 @@
1
+ import { NoteOutputStyleConfig, NoteVerbosityConfig } from "../config";
2
+ import AmbientConfig from "../config/AmbientConfig";
3
+ import { SettingsConfigType, UserConfigMap } from "../config/SettingsConfig";
4
+ import { BaseAPI } from "./BaseAPI";
5
+ export declare class AmbientPACEAPI extends BaseAPI {
6
+ private _config;
7
+ private _baseUrl;
8
+ constructor(_config: AmbientConfig);
9
+ private getURL;
10
+ getNoteParams(): Promise<any>;
11
+ getSettingsConfigMaster(_configTypeId: SettingsConfigType): Promise<any>;
12
+ getUserConfigSettings(_configTypeId: SettingsConfigType): Promise<any>;
13
+ updateUserConfig(_updateSettingRequest: UserConfigMap[]): Promise<any>;
14
+ getUserPreferences(): Promise<any>;
15
+ updateUserPreference(_automaticallyGenerateTranscript: boolean, _preferredTranscriptionLanguage: string, _highlightMedicalTerms: boolean, _displayPatientContext: boolean, _noteOutputStyle: NoteOutputStyleConfig, _noteOutputVerbosity: NoteVerbosityConfig): Promise<any>;
16
+ }
@@ -0,0 +1,21 @@
1
+ import AmbientConfig from "../config/AmbientConfig";
2
+ import { NoteTypeConfig } from "../config/NoteTypeConfig";
3
+ import { BaseAPI } from "./BaseAPI";
4
+ export declare class AmbientRestAPI extends BaseAPI {
5
+ private _config;
6
+ private _baseUrl;
7
+ constructor(_config: AmbientConfig);
8
+ private getURL;
9
+ GetNoteParams(): Promise<any>;
10
+ ListJobs(_pageSize: number, _pageId?: string): Promise<any>;
11
+ FetchJob(_jobId: string): Promise<any>;
12
+ SendFinalNote(_jobId: string, _noteDate: string): Promise<any>;
13
+ DeleteNotes(_jobIds: string[]): Promise<any>;
14
+ RenameNoteTitle(_jobId: string, _newJobName: string): Promise<any>;
15
+ DownloadNotePDF(_jobId: string, _noteType: NoteTypeConfig, _specialityId: number, _language?: string, _personnelInfo?: string, _regenerateNote?: boolean): Promise<any>;
16
+ EndJob(_jobId: string): Promise<any>;
17
+ UpdatePatientContext(_jobId: string, _context: string, _replace: boolean): Promise<any>;
18
+ GenerateSuggestions(_jobId: string, _regenerate: boolean, _note?: string, _context?: string, _codes?: string): Promise<any>;
19
+ ModifyGeneratedNote(_jobId: string, _noteType: NoteTypeConfig, _modifiedNote?: string): Promise<any>;
20
+ FetchTranscription(_jobId: string): Promise<any>;
21
+ }
@@ -0,0 +1,4 @@
1
+ export declare abstract class BaseAPI {
2
+ protected makePostRequest(url: string, requestData: object): Promise<any>;
3
+ protected makePatchRequest(url: string, requestData: object): Promise<any>;
4
+ }
@@ -0,0 +1 @@
1
+ function e(e,t,i,n){return new(i||(i=Promise))((function(r,o){function s(e){try{u(n.next(e))}catch(e){o(e)}}function a(e){try{u(n.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,a)}u((n=n.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class t{constructor(e){Object.defineProperty(this,"_config",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"wssBaseURL",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onError",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onMetaEvent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.wssBaseURL=`wss://${e.server}/ambient/v1/stream-job`}prepareWSSURL(e,t,i,n){let r=this.wssBaseURL;return r+=`?filetype=${e}`,r+=`&noteparams=${t}`,r+=`&subscriptioncode=${this._config.subscriptionCode}`,r+=`&accesskey=${this._config.accessKey}`,r+=`&usertag=${this._config.userTag}`,i&&""!==i&&(r+=`&filename=${i}`),n&&""!==n&&(r+=`&jobid=${n}`),r}}class i{constructor(){}static get Against(){return i.instance||(i.instance=new i),i.instance}NullOrUndefined(e,t){if(null===e)throw new TypeError(`${t} is null`);if(void 0===e)throw new TypeError(`${t} is undefined`);return e}NullOrEmpty(e,t){if(!(e=i.Against.NullOrUndefined(e,t)))throw new TypeError(`${t} is empty`);return e}}var n,r,o,s,a;!function(e){e[e.SPECIALITY=1]="SPECIALITY",e[e.VISIT_TYPE=2]="VISIT_TYPE",e[e.NOTE_TYPE=3]="NOTE_TYPE",e[e.CLINICAL_CODE=4]="CLINICAL_CODE",e[e.LANGUAGE=5]="LANGUAGE"}(n||(n={})),function(e){e[e.SoapNote=1]="SoapNote",e[e.PatientNote=2]="PatientNote",e[e.ReferralNote=3]="ReferralNote",e[e.ConsultationSummary=4]="ConsultationSummary",e[e.CDISuggestions=102]="CDISuggestions"}(r||(r={})),function(e){e.AUTH01="AUTH01",e.AUTH02="AUTH02",e.WSAUTH01="WSAUTH01",e.WSAUTH02="WSAUTH02",e.WSAUTH03="WSAUTH03",e.WSAUTH04="WSAUTH04",e.WSJOB01="WSJOB01",e.WSJOB02="WSJOB02",e.WSJOB03="WSJOB03",e.WSJOB04="WSJOB04",e.WSJOB05="WSJOB05",e.WSACC01="WSACC01",e.WSAUD01="WSAUD01",e.SDK01="SDK01",e.SDK02="SDK02",e.SDK03="SDK03",e.SDK04="SDK04",e.SDK05="SDK05",e.SDK06="SDK06",e.SDK07="SDK07",e.SDK08="SDK08",e.ERRUNKNOWN="ERRUNKNOWN"}(o||(o={}));class u extends Error{constructor(e,t){super(e),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.code=t,this.name="HttpCodedError",Object.setPrototypeOf(this,u.prototype)}}!function(e){e.Detailed="Detailed",e.Consise="Consise"}(s||(s={})),function(e){e.DashFormat="Dash-format",e.Paragraph="Paragraph"}(a||(a={}));class c{makePostRequest(t,i){return e(this,void 0,void 0,(function*(){try{const n=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!n.ok){const t=yield n.text();var e=JSON.parse(t);throw new u(e.message,e.code.toString())}return yield n.json()}catch(e){throw e}}))}makePatchRequest(t,i){return e(this,void 0,void 0,(function*(){try{const n=yield fetch(t,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!n.ok){const t=yield n.text();var e=JSON.parse(t);throw new u(e.message,n.status.toString())}return yield n.json()}catch(e){throw e instanceof u?e:new u("500",e.message||"Unexpected error")}}))}}class l extends c{constructor(e){super(),Object.defineProperty(this,"_config",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"_baseUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._baseUrl=`https://${e.server}/ambient/v1`}getURL(e){return`${this._baseUrl}${e}`}GetNoteParams(){return e(this,void 0,void 0,(function*(){const e=this.getURL("/note-params"),t={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag};return yield this.makePostRequest(e,t)}))}ListJobs(t,n){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Page Size");const e=this.getURL("/list-jobs"),r={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,PageSize:t,PageID:n};return yield this.makePostRequest(e,r)}))}FetchJob(t){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id");const e=this.getURL("/fetch-job"),n={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobID:t};return yield this.makePostRequest(e,n)}))}SendFinalNote(t,n){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id"),i.Against.NullOrEmpty(n,"Note Data");const e=this.getURL("/send-final-note"),r={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobID:t,SoapData:n};return yield this.makePostRequest(e,r)}))}DeleteNotes(t){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id");const e=this.getURL("/delete-job"),n={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobIDs:t};return yield this.makePostRequest(e,n)}))}RenameNoteTitle(t,n){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id"),i.Against.NullOrEmpty(n,"Job Name");const e=this.getURL("/rename-job"),r={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobID:t,JobName:n};return yield this.makePostRequest(e,r)}))}DownloadNotePDF(t,n,r,o,s,a){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id");const e=this.getURL("/download-pdf");var u=s;u&&""!=u||(u='{"PatientName":"","PatientID":"","Age":"","Gender":"","ReceivingDoctor":"","DoctorName":"","DoctorDesignation":"","DoctorEmail":""}');const c={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobID:t,NoteType:n,Language:null!=o?o:"English",SpecialityID:r,Regenerate:null!=a&&a,PersonnelInfo:u};return yield this.makePostRequest(e,c)}))}EndJob(t){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id");const e=this.getURL("/end-job"),n={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobID:t};return yield this.makePostRequest(e,n)}))}UpdatePatientContext(t,n,r){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id"),i.Against.NullOrEmpty(n,"Patient Context");const e=this.getURL("/patient-context"),o={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobID:t,NewContext:n,Replace:r};return yield this.makePostRequest(e,o)}))}GenerateSuggestions(t,n,r,o,s){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id");const e=this.getURL("/cdi"),a={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobID:t,Regenerate:n,SoapData:r,PatientContext:o,Codes:s};return yield this.makePostRequest(e,a)}))}ModifyGeneratedNote(t,n,r){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id");const e=this.getURL("/modify-note"),o={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobID:t,NoteType:n,NewNote:null!=r?r:""};return yield this.makePostRequest(e,o)}))}FetchTranscription(t){return e(this,void 0,void 0,(function*(){i.Against.NullOrEmpty(t,"Job Id");const e=this.getURL("/fetch-transcript"),n={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,JobID:t};return yield this.makePostRequest(e,n)}))}}class h{static log(e,t){const i=null!=t?t:this.defaultTag;console.log(`${i}:`,e)}static error(e,t){const i=null!=t?t:this.defaultTag;console.error(`${i}:`,e)}}function d(){d=function(){return t};var e,t={},i=Object.prototype,n=i.hasOwnProperty,r=Object.defineProperty||function(e,t,i){e[t]=i.value},o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function c(e,t,i){return Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,i){return e[t]=i}}function l(e,t,i,n){var o=t&&t.prototype instanceof m?t:m,s=Object.create(o.prototype),a=new D(n||[]);return r(s,"_invoke",{value:P(e,i,a)}),s}function h(e,t,i){try{return{type:"normal",arg:e.call(t,i)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var f="suspendedStart",g="suspendedYield",p="executing",v="completed",b={};function m(){}function y(){}function S(){}var E={};c(E,s,(function(){return this}));var k=Object.getPrototypeOf,C=k&&k(k(N([])));C&&C!==i&&n.call(C,s)&&(E=C);var A=S.prototype=m.prototype=Object.create(E);function I(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function R(e,t){function i(r,o,s,a){var u=h(e[r],e,o);if("throw"!==u.type){var c=u.arg,l=c.value;return l&&"object"==typeof l&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){i("next",e,s,a)}),(function(e){i("throw",e,s,a)})):t.resolve(l).then((function(e){c.value=e,s(c)}),(function(e){return i("throw",e,s,a)}))}a(u.arg)}var o;r(this,"_invoke",{value:function(e,n){function r(){return new t((function(t,r){i(e,n,t,r)}))}return o=o?o.then(r,r):r()}})}function P(t,i,n){var r=f;return function(o,s){if(r===p)throw Error("Generator is already running");if(r===v){if("throw"===o)throw s;return{value:e,done:!0}}for(n.method=o,n.arg=s;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===b)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===f)throw r=v,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=p;var c=h(t,i,n);if("normal"===c.type){if(r=n.done?v:g,c.arg===b)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=v,n.method="throw",n.arg=c.arg)}}}function w(t,i){var n=i.method,r=t.iterator[n];if(r===e)return i.delegate=null,"throw"===n&&t.iterator.return&&(i.method="return",i.arg=e,w(t,i),"throw"===i.method)||"return"!==n&&(i.method="throw",i.arg=new TypeError("The iterator does not provide a '"+n+"' method")),b;var o=h(r,t.iterator,i.arg);if("throw"===o.type)return i.method="throw",i.arg=o.arg,i.delegate=null,b;var s=o.arg;return s?s.done?(i[t.resultName]=s.value,i.next=t.nextLoc,"return"!==i.method&&(i.method="next",i.arg=e),i.delegate=null,b):s:(i.method="throw",i.arg=new TypeError("iterator result is not an object"),i.delegate=null,b)}function T(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function D(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(T,this),this.reset(!0)}function N(t){if(t||""===t){var i=t[s];if(i)return i.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,o=function i(){for(;++r<t.length;)if(n.call(t,r))return i.value=t[r],i.done=!1,i;return i.value=e,i.done=!0,i};return o.next=o}}throw new TypeError(typeof t+" is not iterable")}return y.prototype=S,r(A,"constructor",{value:S,configurable:!0}),r(S,"constructor",{value:y,configurable:!0}),y.displayName=c(S,u,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,c(e,u,"GeneratorFunction")),e.prototype=Object.create(A),e},t.awrap=function(e){return{__await:e}},I(R.prototype),c(R.prototype,a,(function(){return this})),t.AsyncIterator=R,t.async=function(e,i,n,r,o){void 0===o&&(o=Promise);var s=new R(l(e,i,n,r),o);return t.isGeneratorFunction(i)?s:s.next().then((function(e){return e.done?e.value:s.next()}))},I(A),c(A,u,"Generator"),c(A,s,(function(){return this})),c(A,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),i=[];for(var n in t)i.push(n);return i.reverse(),function e(){for(;i.length;){var n=i.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=N,D.prototype={constructor:D,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(O),!t)for(var i in this)"t"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function r(n,r){return a.type="throw",a.arg=t,i.next=n,r&&(i.method="next",i.arg=e),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return r("end");if(s.tryLoc<=this.prev){var u=n.call(s,"catchLoc"),c=n.call(s,"finallyLoc");if(u&&c){if(this.prev<s.catchLoc)return r(s.catchLoc,!0);if(this.prev<s.finallyLoc)return r(s.finallyLoc)}else if(u){if(this.prev<s.catchLoc)return r(s.catchLoc,!0)}else{if(!c)throw Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return r(s.finallyLoc)}}}},abrupt:function(e,t){for(var i=this.tryEntries.length-1;i>=0;--i){var r=this.tryEntries[i];if(r.tryLoc<=this.prev&&n.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var o=r;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,b):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),b},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.finallyLoc===e)return this.complete(i.completion,i.afterLoc),O(i),b}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.tryLoc===e){var n=i.completion;if("throw"===n.type){var r=n.arg;O(i)}return r}}throw Error("illegal catch attempt")},delegateYield:function(t,i,n){return this.delegate={iterator:N(t),resultName:i,nextLoc:n},"next"===this.method&&(this.arg=e),b}},t}function f(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function g(e,t,i,n,r,o,s){try{var a=e[o](s),u=a.value}catch(e){return void i(e)}a.done?t(u):Promise.resolve(u).then(n,r)}function p(e){return function(){var t=this,i=arguments;return new Promise((function(n,r){var o=e.apply(t,i);function s(e){g(o,n,r,s,a,"next",e)}function a(e){g(o,n,r,s,a,"throw",e)}s(void 0)}))}}function v(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function b(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function m(e,t,i){return t&&b(e.prototype,t),i&&b(e,i),Object.defineProperty(e,"prototype",{writable:!1}),e}Object.defineProperty(h,"defaultTag",{enumerable:!0,configurable:!0,writable:!0,value:"AugnitoAmbientSDK"});var y="DONE",S="PAUSESOCKET",E="RESUMESOCKET",k="CLOSE",C=12e4,A=m((function e(t,i,n,r,o,s,a,u,c,l,h){v(this,e),this.worker,this.onFinalResultCallback=o,this.onErrorCallback=a,this.onPartialResultCallback=s,this.onSessionEventCallback=u,this.onOtherResultsCallback=c,this.onSpeechResponseCallback=l,this.packetSeqId=0,this.audioDuration=0,this.shouldSendAudioDataSequence=r,this.heavyOp,this.idleLoop,this.lastSent,this.enableLogs=t,this.eosMessage=i||"EOS",this.socketTimeoutInterval=n||1e4,this.bufferSizeInterval=h}),[{key:"Start",value:function(e,t){var i=this;this.audioDuration=e;var n="\n (() => {\n (".concat(I.toString(),")(").concat(JSON.stringify(y),", ").concat(JSON.stringify(this.eosMessage),", ").concat(JSON.stringify(k),", ").concat(JSON.stringify(1e4),", ").concat(JSON.stringify(this.socketTimeoutInterval),", ").concat(JSON.stringify(1e3),", ").concat(JSON.stringify(100),", ").concat(JSON.stringify(t),", ").concat(JSON.stringify(this.enableLogs),", ").concat(JSON.stringify(this.shouldSendAudioDataSequence),",").concat(JSON.stringify(S),", ").concat(JSON.stringify(E),", ").concat(JSON.stringify(this.heavyOp),");\n })();\n");this.worker=new Worker(URL.createObjectURL(new Blob([n],{type:"application/javascript"}))),this.worker.onmessage=function(e){i.enableLogs&&console.log("Augnito [MAIN]: "+JSON.stringify(e.data));var t=e.data;"final"==t.type?i.onFinalResultCallback(t.data):"partial"==t.type?i.onPartialResultCallback(t.data):"meta"==t.type?i.onSessionEventCallback(t.data):"error"==t.type?i.onErrorCallback(t.data):"other"==t.type?i.onOtherResultsCallback(t.data):"speechResponse"==t.type&&i.onSpeechResponseCallback(t.data)},this.idleLoop=setInterval((function(){var e=+new Date;i.lastSent&&e-i.lastSent>C&&(i.Send(i.eosMessage),i.enableLogs&&console.warn("No data sent since more than ".concat(120," secs, closing time...")))}),1e4)}},{key:"createAudioPacketHeader",value:function(e){this.audioDuration>0&&(this.packetSeqId=Math.ceil(this.audioDuration/this.bufferSizeInterval)+2,this.audioDuration=0),this.packetSeqId++;for(var t=new ArrayBuffer(16),i=new DataView(t),n=0;n<4;n++)i.setUint8(n,"@BSR".charCodeAt(n));return i.setBigInt64(4,BigInt(this.packetSeqId),!1),i.setUint8(12,e?1:0),t}},{key:"appendAudioData",value:function(e,t){var i=e.byteLength+t.byteLength,n=new ArrayBuffer(i),r=new Uint8Array(n);return r.set(new Uint8Array(e),0),r.set(new Uint8Array(t),e.byteLength),n}},{key:"Send",value:function(e){var t;if(this.lastSent=+new Date,e===k)null===(t=this.worker)||void 0===t||t.postMessage(k),clearInterval(this.idleLoop);else if(e===y){if(this.shouldSendAudioDataSequence){var i,n=this.createAudioPacketHeader(!0);null===(i=this.worker)||void 0===i||i.postMessage(n)}else{var r;null===(r=this.worker)||void 0===r||r.postMessage(y)}clearInterval(this.idleLoop)}else if(e==S){var o;null===(o=this.worker)||void 0===o||o.postMessage(S)}else if(e==E){var s;null===(s=this.worker)||void 0===s||s.postMessage(E)}else if(e===this.eosMessage){var a;this.shouldSendAudioDataSequence||null===(a=this.worker)||void 0===a||a.postMessage(e)}else{var u,c=[];this.shouldSendAudioDataSequence?(n=this.createAudioPacketHeader(!1),c=this.appendAudioData(n,e)):c=e,void 0!==c&&(null===(u=this.worker)||void 0===u||u.postMessage(c,[c]))}}},{key:"HeavyOp",set:function(e){this.heavyOp=e}}]);function I(e,t,i,n,r,o,s,a,u,c,l,h,d){var f,g,p,v,b,m,y=[],S=[],E=!1,k=!1,C=!1,A="",I=!1;function R(){f=+new Date,(v=""!=A?new WebSocket(a+"&jobid="+A):new WebSocket(a)).onopen=function(e){u&&console.log("Augnito: WebSocket connection established - "+JSON.stringify(e)),S.length>0&&(k=!0)},v.onmessage=function(e){u&&console.log("Augnito: Message from server - "+JSON.stringify(e.data)),function(e){try{if("PING"===e.data)g=+new Date,self.postMessage({type:"ping",data:e.data});else{var t=JSON.parse(e.data);if(u&&console.log("Augnito [WORKER]: "+JSON.stringify(t)),"meta"==t.Type){t.JobID&&(A=t.JobID,console.log("Augnito JobID:",A)),self.postMessage({type:"meta",data:e.data});var i=JSON.parse(e.data);C=!(!i.Event||"INVALID_AUTH_CREDENTIALS"!==i.Event.Type)}else if(t.Result&&t.Result.Final){var n=JSON.stringify(t.Result);d&&(n=d(JSON.stringify(t.Result)),console.log(n)),self.postMessage({type:"final",data:n})}else t.Result&&!t.Result.Final?self.postMessage({type:"partial",data:t.Result.Transcript}):"ACK"==t.Type?(S=S.filter((function(e){return e.packetNumber>t.Index})),self.postMessage({type:"other",data:e.data})):"ERROR"==t.Type?("Timeout exceeded"==t.Data&&(E=!0,T()),self.postMessage({type:"error",data:e.data})):self.postMessage({type:"speechResponse",data:e.data})}}catch(e){self.postMessage({type:"error",data:"invalid response"})}}(e)},v.onerror=function(e){console.error("WebSocket error: ",e),self.postMessage({type:"error",data:JSON.stringify(e)})},v.onclose=function(e){u&&console.log("Augnito: WebSocket connection closed - "+JSON.stringify(e)),T()},g=+new Date}function P(e){return v&&v.readyState===WebSocket.OPEN?(v.send(e),!0):e===t?(u&&console.warn("Gulping ".concat(t," as socket seems already closed...")),T(),!0):(+new Date-f>n&&!C&&R(),!1)}function w(e){y.push(e)}function T(){E&&(clearInterval(b),clearInterval(m),y=[],S=[],self.close())}R(),b=setInterval((function(){if(k){for(var e=0;e<S.length;e++){if(!P(S[e].packetData))break}k=!1}else for(;y.length>0;){var t=y.shift();if(!P(t)){y.unshift(t);break}if(c){var i=new DataView(t),n={packetNumber:Number(i.getBigInt64(4)),packetData:t};S.push(n)}}}),s),m=setInterval((function(){v&&v.readyState===WebSocket.OPEN&&(+new Date-g>r&&(u&&console.error("No data received since more than ".concat(r/1e3," secs, closing time...")),v.close()))}),o),self.onmessage=function(n){n.data===i?(A="",E=!0,C=!0,v.close()):n.data===e?(w(t),A="",u&&console.log("Augnito: Worker received DONE, time to terminate..."),E=!0):n.data===l?I=!0:n.data===h?(w(p),I=!1):I?p=n.data:w(n.data)}}var R,P,w,T,O,D,N,_,x,U=m((function e(t,i,n,r,o,s,a,u,c,l,h,d,f,g,p,b,m,y){v(this,e),this.audioContext,this.audioStream,this.executor=new A(t,o,s,a,h,d,f,p,b,m,n),this.executor.HeavyOp=l,this.source,this.processorNode,this.isPaused=!1,this.isStreaming=!1,this.audioData=[],this.isDebug=i,this.enableLogs=t,this.onStateChanged=g,this.onIntensity=y,this.onError=f,this.bufferSizeInterval=n,this.pausedBufferInterval=null!=r?r:1,this.shouldReadIntensity=c,this.closeSocketWithoutEOS=!1,this.shouldPreIntialiseRecorder=null!=u&&u,this.shouldPreIntialiseRecorder&&this.EarlyInitialiseMediaStream()}),[{key:"EarlyInitialiseMediaStream",value:(x=p(d().mark((function e(){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.createMediaStreamSourceNode();case 2:if(!this.audioContext||"running"!=this.audioContext.state){e.next=5;break}return e.next=5,this.audioContext.suspend();case 5:case"end":return e.stop()}}),e,this)}))),function(){return x.apply(this,arguments)})},{key:"StartStream",value:(_=p(d().mark((function e(t,i){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.log("New stream started..."),this.shouldPreIntialiseRecorder&&this.source){e.next=9;break}return e.next=4,this.createMediaStreamSourceNode();case 4:if(this.source){e.next=7;break}return console.error("Error: unable to create source node"),e.abrupt("return",!1);case 7:e.next=12;break;case 9:if("suspended"!=this.audioContext.state){e.next=12;break}return e.next=12,this.audioContext.resume();case 12:return e.next=14,this.createProcessorNode();case 14:if(this.processorNode){e.next=17;break}return console.error("Error: unable to create processor node"),e.abrupt("return",!1);case 17:if(!this.IsMicrophoneMuted){e.next=23;break}if(!this.audioContext||"running"!=this.audioContext.state){e.next=21;break}return e.next=21,this.audioContext.suspend();case 21:return this.onError(JSON.stringify({Type:"ERROR",Data:"Microphone is muted."})),e.abrupt("return",!1);case 23:return""!==i&&this.executor.Start(t,i),this.onStateChanged(!0),this.source.connect(this.processorNode).connect(this.audioContext.destination),this.log("AudioContext Sample Rate: "+this.audioContext.sampleRate),this.isStreaming=!0,e.abrupt("return",!0);case 29:case"end":return e.stop()}}),e,this)}))),function(e,t){return _.apply(this,arguments)})},{key:"createBufferedSourceNode",value:(N=p(d().mark((function e(){var t;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.loadAudio();case 2:if(t=e.sent){e.next=6;break}return console.error("Error: unable to create audio buffer"),e.abrupt("return");case 6:this.source=this.audioContext.createBufferSource(),this.source.buffer=t,this.source.loop=!0,this.source.start();case 10:case"end":return e.stop()}}),e,this)}))),function(){return N.apply(this,arguments)})},{key:"createMediaStreamSourceNode",value:(D=p(d().mark((function e(){var t,i=this;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,navigator.mediaDevices.getUserMedia({audio:{channelCount:1,noiseSuppression:!1}});case 3:this.audioStream=e.sent,this.audioContext=new AudioContext,this.source=this.audioContext.createMediaStreamSource(this.audioStream),this.audioStream.getAudioTracks()[0].addEventListener("ended",(function(){i.onError(JSON.stringify({Type:"ERROR",Data:"Audio track ended. Possibly the mic was unplugged."}))})),e.next=14;break;case 9:e.prev=9,e.t0=e.catch(0),t="","NotAllowedError"==e.t0.name?t="Mic permission denied":"NotFoundError"===e.t0.name&&(t="No suitable media device found"),this.onError(JSON.stringify({Type:"ERROR",Data:t}));case 14:case"end":return e.stop()}}),e,this,[[0,9]])}))),function(){return D.apply(this,arguments)})},{key:"loadAudio",value:(O=p(d().mark((function e(){var t,i,n;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("./radiology_speed_test.wav");case 3:return t=e.sent,e.next=6,t.arrayBuffer();case 6:return i=e.sent,e.next=9,this.audioContext.decodeAudioData(i);case 9:return n=e.sent,e.abrupt("return",n);case 13:return e.prev=13,e.t0=e.catch(0),console.error("Unable to fetch the audio file. Error: ".concat(e.t0.message)),e.abrupt("return",null);case 17:case"end":return e.stop()}}),e,this,[[0,13]])}))),function(){return O.apply(this,arguments)})},{key:"createProcessorNode",value:(T=p(d().mark((function e(){var t,i=this;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.audioContext.audioWorklet.addModule("data:application/javascript,".concat(encodeURIComponent('class MyAudioWorkletProcessor extends AudioWorkletProcessor {\n constructor() {\n super();\n this.accumulator = [];\n this.pauseSocketStreaming = false;\n this.sampleVal = 0;\n this.sampleSize = 0;\n this.intensityFrameCount = 0;\n this.reset();\n this.isProcessing = true;\n // message received from main-thread\n this.port.onmessage = (e) => {\n console.log("Augnito: Worklet received event - ", e.data);\n if (this.sampleSize > 0) {\n this.accumulator.push(this.sampleVal / this.sampleSize);\n }\n \n if (e.data == "PAUSE" || e.data == "STOP" || e.data == "PAUSESOCKET") {\n // append silence to get last word ASR.\n const silenceSize = 16000 * 2;\n for (let i = 0; i < silenceSize; i++) {\n this.accumulator.push(0);\n }\n }\n this.send();\n this.reset();\n if (e.data == "STOP") {\n // message sent to main-thread\n this.port.postMessage({type:"DONE", value:"DONE"});\n this.isProcessing = false;\n \n }\n if(e.data == "PAUSESOCKET"){\n this.pauseSocketStreaming = true;\n this.port.postMessage("PAUSESOCKET");\n } else if(e.data == "RESUMESOCKET"){\n this.pauseSocketStreaming = false;\n } \n };\n }\n\n static get parameterDescriptors() {\n return [\n {\n name: "sampleRate",\n defaultValue: 16000,\n minValue: 16000,\n maxValue: 6 * 16000,\n },\n {\n name: "bufferSizeInterval",\n defaultValue: 1,\n minValue: 1,\n maxValue: 100,\n },\n {\n name: "pausedBufferInterval",\n defaultValue: 1,\n minValue: 0,\n maxValue: 100,\n },\n {\n name: "shouldReadIntensity",\n defaultValue: false,\n minValue: 0,\n maxValue: 1,\n },\n ];\n }\n\n // 128 frames\n process(inputList, outputList, params) {\n const input = inputList[0];\n if (input && input.length && input[0].length) {\n const channelData = input[0];\n const output = outputList[0];\n const inputSampleRate = params.sampleRate[0];\n const sampleRatio = inputSampleRate / 16000\n const bufferSizeInterval = params["bufferSizeInterval"][0];\n const pausedBufferInterval = params["pausedBufferInterval"][0];\n const shouldReadIntensity = params["shouldReadIntensity"][0];\n\n let sumSquares = 0; // For intensity\n let sampleCount = 0;\n\n // console.log("BufferSizeInterval", bufferSizeInterval);\n // Jackpot\n input[0].forEach((float32Element, index) => {\n const int16Element = Math.min(1, Math.max(-1, float32Element)) * 0x7fff;\n this.sampleVal += int16Element;\n this.sampleSize += 1;\n // Accumulate for intensity (RMS)\n sumSquares += float32Element * float32Element;\n sampleCount++;\n \n\n if (this.sampleSize >= sampleRatio) {\n const fraction = this.sampleSize - sampleRatio \n this.sampleVal -= fraction * int16Element;\n\n this.accumulator.push(this.sampleVal / sampleRatio);\n \n this.sampleVal = fraction * int16Element;\n this.sampleSize = fraction;\n }\n\n // Comment this when streaming microphone audio\n // output[0][index] = float32Element;\n });\n if(this.pauseSocketStreaming){\n if (this.accumulator.length >= 125 * 128 * pausedBufferInterval) {\n this.send();\n }\n } else{\n if (this.accumulator.length >= 125 * 128 * bufferSizeInterval) {\n this.send();\n }\n }\n if(shouldReadIntensity){\n \n // Throttled intensity post\n this.intensityFrameCount = (this.intensityFrameCount || 0) + 1;\n if (this.intensityFrameCount >= 15 && sampleCount > 0) {\n const rms = Math.sqrt(sumSquares / sampleCount);\n const normalized = Math.min(1, rms); // [0–1] scale\n this.port.postMessage({ type: \'intensity\', value: normalized });\n this.intensityFrameCount = 0;\n }\n }\n }\n return this.isProcessing;\n }\n\n send() {\n if (this.accumulator.length == 0) return;\n const audioData = new Int16Array(this.accumulator);\n // message sent to main-thread - transferrable\n this.port.postMessage({ type: \'audioData\', value: audioData.buffer }, [audioData.buffer]);\n this.accumulator = [];\n }\n\n reset() {\n this.sampleVal = 0;\n this.sampleSize = 0;\n }\n}\n\nregisterProcessor("worklet-processor", MyAudioWorkletProcessor);')));case 3:this.processorNode=new AudioWorkletNode(this.audioContext,"worklet-processor"),this.processorNode.parameters.get("sampleRate").setValueAtTime(this.audioContext.sampleRate,this.audioContext.currentTime),this.processorNode.parameters.get("bufferSizeInterval").setValueAtTime(this.bufferSizeInterval,this.audioContext.currentTime),this.processorNode.parameters.get("pausedBufferInterval").setValueAtTime(this.pausedBufferInterval,this.audioContext.currentTime),this.processorNode.parameters.get("shouldReadIntensity").setValueAtTime(null!==(t=this.shouldReadIntensity)&&void 0!==t&&t,this.audioContext.currentTime),this.processorNode.port.onmessage=function(e){var t=e.data,n=t.type,r=t.value;if(n==y)i.log("Worklet processing done, clearing resources..."),i.isDebug&&i.saveAudio(),i.cleanup();else if(e.data==S)i.executor.Send(S);else{var o;"intensity"===n?null===(o=i.onIntensity)||void 0===o||o.call(i,r):"audioData"===n&&i.isDebug&&new Int16Array(r).forEach((function(e){i.audioData.length<=288e5&&i.audioData.push(e)}))}i.executor&&(i.closeSocketWithoutEOS?(i.executor.Send(k),i.closeSocketWithoutEOS=!1):"intensity"!==n&&i.executor.Send(r))},e.next=18;break;case 15:e.prev=15,e.t0=e.catch(0),console.error("Error: Unable to create worklet node: ",e.t0);case 18:case"end":return e.stop()}}),e,this,[[0,15]])}))),function(){return T.apply(this,arguments)})},{key:"PauseStream",value:(w=p(d().mark((function e(){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("running"!=this.audioContext.state){e.next=9;break}if(this.shouldPreIntialiseRecorder){e.next=8;break}return e.next=4,this.audioContext.suspend();case 4:this.log("Stream paused..."),this.processorNode.port.postMessage("PAUSE"),e.next=9;break;case 8:this.processorNode.port.postMessage(S);case 9:this.onStateChanged(!1),this.isPaused=!0,this.isStreaming=!1;case 12:case"end":return e.stop()}}),e,this)}))),function(){return w.apply(this,arguments)})},{key:"ResumeStream",value:(P=p(d().mark((function e(){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.shouldPreIntialiseRecorder||"suspended"!=this.audioContext.state){e.next=9;break}if(!this.IsMicrophoneMuted){e.next=4;break}return this.onError(JSON.stringify({Type:"ERROR",Data:"Microphone is muted."})),e.abrupt("return");case 4:return e.next=6,this.audioContext.resume();case 6:this.log("Stream resumed..."),e.next=11;break;case 9:this.processorNode.port.postMessage(E),this.executor.Send(E);case 11:this.onStateChanged(!0),this.isPaused=!1,this.isStreaming=!0;case 14:case"end":return e.stop()}}),e,this)}))),function(){return P.apply(this,arguments)})},{key:"IsPaused",get:function(){return this.isPaused}},{key:"IsStreaming",get:function(){return this.isStreaming}},{key:"IsMicrophoneMuted",get:function(){return this.audioStream.getAudioTracks()[0].muted}},{key:"StopStream",value:(R=p(d().mark((function e(t){var i,n,r,o;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("suspended"===(null===(i=this.audioContext)||void 0===i?void 0:i.state)){e.next=4;break}return e.next=3,null===(o=this.audioContext)||void 0===o?void 0:o.suspend();case 3:this.onStateChanged(!1);case 4:this.log("Stream stopped..."),this.isStreaming=!1,this.closeSocketWithoutEOS=!t,null===(n=this.processorNode)||void 0===n||null===(n=n.port)||void 0===n||n.postMessage("STOP"),null===(r=this.audioStream)||void 0===r||r.getAudioTracks()[0].removeEventListener("ended",(function(){}));case 9:case"end":return e.stop()}}),e,this)}))),function(e){return R.apply(this,arguments)})},{key:"cleanup",value:function(){this.source.mediaStream.getAudioTracks()[0].stop(),this.source.disconnect(),this.processorNode.disconnect(),this.processorNode.port.close(),this.audioContext.close(),this.audioData=[]}},{key:"saveAudio",value:function(){var e=this.encodeWAV(),t=URL.createObjectURL(new Blob([e],{type:"audio/wav"}));this.log("Download Recording: ".concat(t))}},{key:"getBlob",value:function(){var e=this.encodeWAV();console.log(e);var t=new Blob([e],{type:"audio/wav"});return console.log(t),t}},{key:"encodeWAV",value:function(){var e=new DataView(new ArrayBuffer(2*this.audioData.length));this.audioData.forEach((function(t,i){e.setInt16(2*i,t,!0)}));var t=e.buffer.byteLength,i=44+t,n=new DataView(new ArrayBuffer(i));n.setUint32(0,1380533830,!1),n.setUint32(4,i-8,!0),n.setUint32(8,1463899717,!1),n.setUint32(12,1718449184,!1),n.setUint32(16,16,!0),n.setUint16(20,1,!0),n.setUint16(22,1,!0),n.setUint32(24,16e3,!0),n.setUint32(28,32e3,!0),n.setUint16(32,2,!0),n.setUint16(34,16,!0),n.setUint32(36,1684108385,!1),n.setUint32(40,t,!0);for(var r=0;r<t;r++)n.setInt8(44+r,e.getInt8(r));return n}},{key:"log",value:function(e){if(this.enableLogs){var t="".concat((new Date).toLocaleTimeString()," Augnito: ").concat(e);console.log(t+"\n")}}}]),L=function(){function e(){var t,i,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serverURL:"",enableLogs:!1,isDebug:!1,bufferInterval:1,pausedBufferInterval:1,EOS_Message:void 0,socketTimeoutInterval:void 0,shouldSendAudioDataSequence:!1,shouldPreIntialiseRecorder:!1,shouldReadIntensity:!1,debounceDelay:300},r=arguments.length>1?arguments[1]:void 0;if(v(this,e),e.instance)return e.instance;this.WebsocketURL=null!==(t=n.serverURL)&&void 0!==t?t:"",this.enableLogs=n.enableLogs,this.isDebug=n.isDebug,this.streamer=null,this.streamerNotStarted=!1,this.isStreamerStarting=!1,this.heavyOp=r,this.bufferInterval=n.bufferInterval,this.pausedBufferInterval=n.pausedBufferInterval,this.eosMessage=n.EOS_Message,this.socketTimeoutInterval=n.socketTimeoutInterval,this.shouldSendAudioDataSequence=n.shouldSendAudioDataSequence,this.shouldPreIntialiseRecorder=n.shouldPreIntialiseRecorder,this.shouldPreIntialiseRecorder&&(this.initialiseStreamer(),this.streamerNotStarted=!0),this.shouldReadIntensity=n.shouldReadIntensity,this.delay=null!==(i=n.debounceDelay)&&void 0!==i?i:300,this.toggleStartStopAudioStream=M(this.toggleStartStopAudioStream.bind(this),this.delay),this.togglePauseResumeAudioStream=M(this.togglePauseResumeAudioStream.bind(this),this.delay),e.instance=this}return m(e,[{key:"initialiseStreamer",value:function(){this.streamer=new U(this.enableLogs,this.isDebug,this.bufferInterval,this.pausedBufferInterval,this.eosMessage,this.socketTimeoutInterval,this.shouldSendAudioDataSequence,this.shouldPreIntialiseRecorder,this.shouldReadIntensity,this.heavyOp,this.onFinalResultCallback.bind(this),this.onPartialResultCallback.bind(this),this.onErrorCallback.bind(this),this.onStateChangedCallback.bind(this),this.onSessionEventCallback.bind(this),this.onOtherResultCallback.bind(this),this.onSpeechResponseCallback.bind(this),this.onIntensityCallback.bind(this))}},{key:"togglePauseResumeAudioStream",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;!this.streamer||this.streamerNotStarted?(t&&(this.WebsocketURL=t),this.startAudio(e)):this.streamer.IsPaused?this.resumeAudio():this.pauseAudio()}},{key:"toggleStartStopAudioStream",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;!this.streamer||this.streamerNotStarted?(t&&(this.WebsocketURL=t),this.startAudio(e)):this.stopAudio()}},{key:"startAudio",value:(t=p(d().mark((function e(t){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.isStreamerStarting){e.next=2;break}return e.abrupt("return");case 2:return this.isStreamerStarting=!0,this.shouldPreIntialiseRecorder&&this.streamer||this.initialiseStreamer(),e.prev=4,e.next=7,this.streamer.StartStream(t,this.WebsocketURL);case 7:e.sent?(this.streamerNotStarted=!1,this.log("Stream Started...")):this.streamer=null;case 9:return e.prev=9,this.isStreamerStarting=!1,e.finish(9);case 12:case"end":return e.stop()}}),e,this,[[4,,9,12]])}))),function(e){return t.apply(this,arguments)})},{key:"pauseAudio",value:function(){this.streamer.PauseStream(),this.log("Stream Paused...")}},{key:"resumeAudio",value:function(){this.streamer.ResumeStream(),this.enableLogs&&this.log("Stream Resumed...")}},{key:"stopAudio",value:function(){var e,t,i=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(null!==(e=this.streamer)&&void 0!==e&&e.IsStreaming||n)&&(null===(t=this.streamer)||void 0===t||t.StopStream(i),this.streamer=null,this.log("Stream Stopped..."),this.shouldPreIntialiseRecorder&&(this.initialiseStreamer(),this.streamerNotStarted=!0))}},{key:"getBlob",value:function(){var e=this.streamer.getBlob();return this.log("Blob Sent..."),e}},{key:"log",value:function(e){if(this.enableLogs){var t="".concat((new Date).toLocaleTimeString()," Augnito: ").concat(e);this.showLogCallback(t+"\n")}}},{key:"dispose",value:function(){e.instance=null}},{key:"onSessionEventCallback",value:function(e){this.onSessionEvent&&this.onSessionEvent(e)}},{key:"onStateChangedCallback",value:function(e){this.onStateChanged&&this.onStateChanged(e)}},{key:"onIntensityCallback",value:function(e){this.onIntensity&&this.onIntensity(e)}},{key:"onErrorCallback",value:function(e){this.onError&&this.onError(e)}},{key:"onPartialResultCallback",value:function(e){this.onPartialResult&&this.onPartialResult(e)}},{key:"onFinalResultCallback",value:function(e){this.onFinalResult&&this.onFinalResult(e)}},{key:"onOtherResultCallback",value:function(e){this.onOtherResults&&this.onOtherResults(e)}},{key:"onSpeechResponseCallback",value:function(e){this.onSpeechResponse&&this.onSpeechResponse(e)}},{key:"showLogCallback",value:function(e){this.showLog&&this.showLog(e)}}]);var t}();function M(e,t){var i;return function(){for(var n=this,r=arguments.length,o=new Array(r),s=0;s<r;s++)o[s]=arguments[s];i&&clearTimeout(i),i=setTimeout((function(){return e.apply(n,o)}),t)}}class K extends c{constructor(e){super(),Object.defineProperty(this,"_config",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"_baseUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._baseUrl=`https://${e.server}/pace/v1/sdk`}getURL(e){return`${this._baseUrl}${e}`}getNoteParams(){return e(this,void 0,void 0,(function*(){const e=this.getURL("/noteparams"),t={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag};return yield this.makePostRequest(e,t)}))}getSettingsConfigMaster(t){return e(this,void 0,void 0,(function*(){const e=this.getURL("/configmaster"),i={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,ConfigTypeId:t};return yield this.makePostRequest(e,i)}))}getUserConfigSettings(t){return e(this,void 0,void 0,(function*(){const e=this.getURL("/userconfigmapping"),i={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,ConfigTypeId:t};return yield this.makePostRequest(e,i)}))}updateUserConfig(t){return e(this,void 0,void 0,(function*(){const e=this.getURL("/userconfigmapping"),i={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,UserConfigMapping:t};return yield this.makePatchRequest(e,i)}))}getUserPreferences(){return e(this,void 0,void 0,(function*(){const e=this.getURL("/getuserpreferences"),t={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag};return yield this.makePostRequest(e,t)}))}updateUserPreference(t,i,n,r,o,s){return e(this,void 0,void 0,(function*(){const e=this.getURL("/postuserpreferences"),a={SubscriptionCode:this._config.subscriptionCode,AccessKey:this._config.accessKey,UserTag:this._config.userTag,UserPreferences:{AutomaticallyGenerateTranscript:t,PreferredTranscriptionLanguage:i,HighlightMedicalTerms:n,DisplayPatientContext:r,NoteOutputStyle:o,NoteOutputVerbosity:s}};return yield this.makePostRequest(e,a)}))}}const J="Invalid user details, please check again",W="Subscription is not valid.",j="invalid request. Please make sure AccessKey, SubscriptionCode and UserTag is sent along with the request",B="Active seat is not available for user",z="Unable to fetch account details, please try again.",V="Unable to fetch job details, please try again.",q="Job not reconnectable",F="Timeout exceeded",H="Rate Limit Exceeded, Please try again in sometime!",G="Audio Signal is power very LOW, Mic might be muted",$="Job Id is empty",Y="Page Size is undefined",Q="Note Data is empty",X="Job Name is empty",Z="Patient Context is empty",ee="Mic permission denied",te="Microphone is muted",ie="Audio track ended. Possibly the mic was unplugged";class ne{constructor(e){Object.defineProperty(this,"_logTag",{enumerable:!0,configurable:!0,writable:!0,value:"Augnito-Ambient"}),Object.defineProperty(this,"_ambientRestAPI",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ambientPaceAPI",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"config",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"enableLog",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shouldReadAudioIntensity",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"recorderIns",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"forceStopAudio",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_isRecording",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"onJobCreated",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onStateChanged",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onError",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onOtherResult",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onIntensityValue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onIdleMic",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._ambientRestAPI=new l(this.validateConfig(e)),this._ambientPaceAPI=new K(e),this.config=this.createSocketConfig(e),this.enableLog=e.enableLogs,this.shouldReadAudioIntensity=e.shouldReadAudioIntensity}initRecorder(e){var t,i;this.recorderIns=new L({serverURL:e,enableLogs:null!==(t=this.enableLog)&&void 0!==t&&t,isDebug:null!==(i=this.enableLog)&&void 0!==i&&i,bufferInterval:15,EOS_Message:'{"JobAction": "EOS","Status": 0,"Type": "meta"}',socketTimeoutInterval:2e4,shouldSendAudioDataSequence:!0,shouldReadIntensity:this.shouldReadAudioIntensity}),this.recorderIns.onError=this.onErrorCallback.bind(this),this.recorderIns.onStateChanged=this.onStateChangeCallback.bind(this),this.recorderIns.onSessionEvent=this.onSessionEventCallback.bind(this),this.recorderIns.onOtherResults=this.onOtherResultsCallback.bind(this),this.recorderIns.onIntensity=this.onIntensityCallback.bind(this)}getNoteParams(){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientPaceAPI.getNoteParams();if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}getAllNotes(t,i){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientRestAPI.ListJobs(t,i);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}getSummarizedNote(t){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientRestAPI.FetchJob(t);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}sendSummarizedNote(t,i){return e(this,void 0,void 0,(function*(){try{return this._ambientRestAPI?yield this._ambientRestAPI.SendFinalNote(t,i):void h.error("SDK not initialized",this._logTag)}catch(e){this.handleException(e)}}))}toggleListening(e,t,i,n,r){var o,s,a=(null===(o=this.config)||void 0===o?void 0:o.prepareWSSURL(e,t,i,n))||"";this.recorderIns||this.initRecorder(a),null===(s=this.recorderIns)||void 0===s||s.toggleStartStopAudioStream(r,a)}togglePauseResumeListening(e,t,i,n,r){var o,s,a=(null===(o=this.config)||void 0===o?void 0:o.prepareWSSURL(e,t,i,n))||"";this.recorderIns||this.initRecorder(a),null===(s=this.recorderIns)||void 0===s||s.togglePauseResumeAudioStream(r,a)}startListening(){var e;null===(e=this.recorderIns)||void 0===e||e.startAudio()}stopListening(){var e;null===(e=this.recorderIns)||void 0===e||e.stopAudio(!0,!0)}deleteNotes(t){var i;return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientRestAPI.DeleteNotes(t);if(e){if(200===e.Status)return null===(i=this.recorderIns)||void 0===i||i.stopAudio(!1,!0),e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}renameNoteTitle(t,i){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientRestAPI.RenameNoteTitle(t,i);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}getNotePDF(t,i,n,r,o,s){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientRestAPI.DownloadNotePDF(t,i,n,r,o,s);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}endPausedJob(t){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientRestAPI.EndJob(t);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}generateCDISuggestions(t,i,n,r,o){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientRestAPI.GenerateSuggestions(t,i,n,o,r);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}updatePatientContext(t,i,n){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientRestAPI.UpdatePatientContext(t,i,n);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}modifyGeneratedNote(t,i,n){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientRestAPI.ModifyGeneratedNote(t,i,n);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}fetchTranscriptionForNote(t){return e(this,void 0,void 0,(function*(){try{if(!this._ambientRestAPI)return void h.error("SDK not initialized",this._logTag);if((yield this._ambientPaceAPI.getUserPreferences()).Items[0].AutomaticTranscriptionEnabledForOrg){var e=yield this._ambientRestAPI.FetchTranscription(t);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}else this.onErrorCallback("Automatic Transcription is not enabled for the organisation")}catch(e){this.handleException(e)}}))}getUserConfiguration(t){return e(this,void 0,void 0,(function*(){try{if(!this._ambientPaceAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientPaceAPI.getUserConfigSettings(t);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}updateUserConfiguration(t){return e(this,void 0,void 0,(function*(){try{if(!this._ambientPaceAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientPaceAPI.updateUserConfig(t);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}getUserPreferenceSettings(){return e(this,void 0,void 0,(function*(){try{if(!this._ambientPaceAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientPaceAPI.getUserPreferences();if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}updateUserPreferenceSettings(t){var i,n,r,o,u,c;return e(this,void 0,void 0,(function*(){try{if(!this._ambientPaceAPI)return void h.error("SDK not initialized",this._logTag);var e=yield this._ambientPaceAPI.updateUserPreference(null!==(i=t.AutomaticallyGenerateTranscript)&&void 0!==i&&i,null!==(n=t.PreferredTranscriptionLanguage)&&void 0!==n?n:"English",null!==(r=t.HighlightMedicalTerms)&&void 0!==r&&r,null!==(o=t.DisplayPatientContext)&&void 0!==o&&o,null!==(u=t.NoteOutputStyle)&&void 0!==u?u:a.DashFormat,null!==(c=t.NoteOutputVerbosity)&&void 0!==c?c:s.Detailed);if(e){if(200===e.Status)return e;this.onErrorCallback(e.ServerMessage)}else this.onErrorCallback("Unknown Error!")}catch(e){this.handleException(e)}}))}onEventCallback(e){this.onJobCreated&&this.onJobCreated(e)}onStateChangeCallback(e){var t;if(this.forceStopAudio)return null===(t=this.recorderIns)||void 0===t||t.stopAudio(!1,!0),void(this.forceStopAudio=!1);this._isRecording=e,this.onStateChanged&&this.onStateChanged(e)}handleException(e){if(e instanceof TypeError)this.onErrorCallback(e.message);else{if(e instanceof u)throw e;h.error(e.message,this._logTag)}}onErrorCallback(e,t){var i,n,r,s,a,u,c,l,d,f,g,p,v,b={ErrorCode:null!=t?t:o.ERRUNKNOWN,ErrorMessage:e};try{var m=JSON.parse(e);b.ErrorMessage=m.Data,m.Data===F?(this.stopListening(),h.error("Recording time limit exceeded",this._logTag),b.ErrorCode=o.WSJOB05):m.Data===J?(this._isRecording?null===(i=this.recorderIns)||void 0===i||i.stopAudio(!1,!0):this.forceStopAudio=!0,b.ErrorCode=o.WSAUTH03):m.Data.includes(z)?b.ErrorCode=o.WSAUTH04:m.Data.includes(V)?b.ErrorCode=o.WSJOB01:m.Data.includes(q)?b.ErrorCode=o.WSJOB02:m.Data.includes(H)?b.ErrorCode=o.WSACC01:m.Data.includes(G)&&(b.ErrorCode=o.WSAUD01)}catch(e){}(null===(n=b.ErrorMessage)||void 0===n?void 0:n.includes($))?b.ErrorCode=o.SDK01:(null===(r=b.ErrorMessage)||void 0===r?void 0:r.includes(Y))?b.ErrorCode=o.SDK02:(null===(s=b.ErrorMessage)||void 0===s?void 0:s.includes(Q))?b.ErrorCode=o.SDK03:(null===(a=b.ErrorMessage)||void 0===a?void 0:a.includes(X))?b.ErrorCode=o.SDK04:(null===(u=b.ErrorMessage)||void 0===u?void 0:u.includes(Z))?b.ErrorCode=o.SDK05:(null===(c=b.ErrorMessage)||void 0===c?void 0:c.includes(ee))?b.ErrorCode=o.SDK06:(null===(l=b.ErrorMessage)||void 0===l?void 0:l.includes(te))?(b.ErrorCode=o.SDK07,null===(d=this.recorderIns)||void 0===d||d.stopAudio(!1,!0)):(null===(f=b.ErrorMessage)||void 0===f?void 0:f.includes(ie))?b.ErrorCode=o.SDK08:(null===(g=b.ErrorMessage)||void 0===g?void 0:g.includes(W))||(null===(p=b.ErrorMessage)||void 0===p?void 0:p.includes(j))?b.ErrorCode=o.AUTH01:(null===(v=b.ErrorMessage)||void 0===v?void 0:v.includes(B))&&(b.ErrorCode=o.AUTH02),this.onError&&this.onError(b)}onOtherResultsCallback(e){this.onOtherResult&&this.onOtherResult(e)}onIntensityCallback(e){this.onIntensityValue&&this.onIntensityValue(e)}onIdleMicCallback(){this.onIdleMic&&this.onIdleMic()}onSessionEventCallback(e){var t;if(!e)return;let i;try{i="string"==typeof e?JSON.parse(e):e}catch(e){return void h.error(`Error parsing session event data: ${e}`,this._logTag)}if(!i||!("Type"in i))return;if("meta"===i.Type.toLowerCase()&&(null===(t=this.config)||void 0===t?void 0:t.onMetaEvent)){if(!i.JobID)return void h.error("JobID is missing in meta event",this._logTag);this.config.onMetaEvent(i.JobID)}else"error"===i.Type.toLowerCase()&&i.Data&&this.onErrorCallback(i.Data);if("object"!=typeof i.Event||null===i.Event)return;const{Type:n,Value:r}=i.Event;n&&("SESSION_CREATED"===n&&r?h.log(`session Token ${r}`,this._logTag):"SERVICE_DOWN"===n?h.error(n,this._logTag):"NO_DICTATION_STOP_MIC"===n?(h.log("NO_DICTATION_STOP_MIC",this._logTag),this.onIdleMicCallback()):"INVALID_AUTH_CREDENTIALS"===n?h.error("INVALID_AUTH_CREDENTIALS",this._logTag):"LOW_BANDWIDTH"===n&&h.log("LOW_BANDWIDTH: Check internet connection",this._logTag))}validateConfig(e){return i.Against.NullOrEmpty(e.server,"Server"),i.Against.NullOrEmpty(e.subscriptionCode,"SubscriptionCode"),i.Against.NullOrEmpty(e.accessKey,"AccessKey"),i.Against.NullOrEmpty(e.userTag,"UserTag"),e}createSocketConfig(e){const i=new t(e);return i.onError=this.onErrorCallback.bind(this),i.onMetaEvent=this.onEventCallback.bind(this),i}}export{ne as AugnitoAmbient,o as ErrorCodes,u as HttpCodedError,a as NoteOutputStyleConfig,r as NoteTypeConfig,s as NoteVerbosityConfig,n as SettingsConfigType};
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Ambient Client Configuration
3
+ */
4
+ interface AmbientConfig {
5
+ /**
6
+ * Server configuration: India, UK, US
7
+ * @description Mandatory field
8
+ */
9
+ server: string;
10
+ /**
11
+ * Account's Subscription Code
12
+ * @description Mandatory field
13
+ */
14
+ subscriptionCode: string;
15
+ /**
16
+ * Account's Access Key
17
+ * @description Mandatory field
18
+ */
19
+ accessKey: string;
20
+ /**
21
+ * Unique identifier of the current user (from client application)
22
+ * @description Mandatory field
23
+ */
24
+ userTag: string;
25
+ /**
26
+ * Optional Field: Enables or Disables Logging system
27
+ * @description True if logs are enabled; Otherwise false
28
+ */
29
+ enableLogs?: boolean;
30
+ /**
31
+ * Optional Field: Enables or Disables reading audio intensity
32
+ * @description True if intensity value will be passed in onIntensity callback; Otherwise false
33
+ */
34
+ shouldReadAudioIntensity?: boolean;
35
+ }
36
+ export default AmbientConfig;
@@ -0,0 +1,24 @@
1
+ export declare enum ErrorCodes {
2
+ AUTH01 = "AUTH01",
3
+ AUTH02 = "AUTH02",
4
+ WSAUTH01 = "WSAUTH01",
5
+ WSAUTH02 = "WSAUTH02",
6
+ WSAUTH03 = "WSAUTH03",
7
+ WSAUTH04 = "WSAUTH04",
8
+ WSJOB01 = "WSJOB01",
9
+ WSJOB02 = "WSJOB02",
10
+ WSJOB03 = "WSJOB03",
11
+ WSJOB04 = "WSJOB04",
12
+ WSJOB05 = "WSJOB05",
13
+ WSACC01 = "WSACC01",
14
+ WSAUD01 = "WSAUD01",
15
+ SDK01 = "SDK01",
16
+ SDK02 = "SDK02",
17
+ SDK03 = "SDK03",
18
+ SDK04 = "SDK04",
19
+ SDK05 = "SDK05",
20
+ SDK06 = "SDK06",
21
+ SDK07 = "SDK07",
22
+ SDK08 = "SDK08",
23
+ ERRUNKNOWN = "ERRUNKNOWN"
24
+ }
@@ -0,0 +1,5 @@
1
+ interface ErrorInfo {
2
+ ErrorCode: string;
3
+ ErrorMessage: string;
4
+ }
5
+ export default ErrorInfo;
@@ -0,0 +1,4 @@
1
+ export declare class HttpCodedError extends Error {
2
+ code: string | undefined;
3
+ constructor(message: string, code: string);
4
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum NoteOutputStyleConfig {
2
+ DashFormat = "Dash-format",
3
+ Paragraph = "Paragraph"
4
+ }
@@ -0,0 +1,7 @@
1
+ export declare enum NoteTypeConfig {
2
+ SoapNote = 1,
3
+ PatientNote = 2,
4
+ ReferralNote = 3,
5
+ ConsultationSummary = 4,
6
+ CDISuggestions = 102
7
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum NoteVerbosityConfig {
2
+ Detailed = "Detailed",
3
+ Consise = "Consise"
4
+ }
@@ -0,0 +1,10 @@
1
+ import { NoteOutputStyleConfig } from "./NoteOutputStyleConfig";
2
+ import { NoteVerbosityConfig } from "./NoteVerbosityConfig";
3
+ export interface PreferenceConfig {
4
+ AutomaticallyGenerateTranscript?: boolean;
5
+ PreferredTranscriptionLanguage?: string;
6
+ HighlightMedicalTerms?: boolean;
7
+ DisplayPatientContext?: boolean;
8
+ NoteOutputStyle?: NoteOutputStyleConfig;
9
+ NoteOutputVerbosity?: NoteVerbosityConfig;
10
+ }
@@ -0,0 +1,12 @@
1
+ export declare enum SettingsConfigType {
2
+ SPECIALITY = 1,
3
+ VISIT_TYPE = 2,
4
+ NOTE_TYPE = 3,
5
+ CLINICAL_CODE = 4,
6
+ LANGUAGE = 5
7
+ }
8
+ export interface UserConfigMap {
9
+ ID: number;
10
+ IsSelected: boolean;
11
+ IsDefault: boolean;
12
+ }
@@ -0,0 +1,9 @@
1
+ export * from "./AmbientConfig";
2
+ export * from "./SettingsConfig";
3
+ export * from './NoteTypeConfig';
4
+ export * from './PreferenceConfig';
5
+ export * from "./ErrorCodes";
6
+ export * from "./ErrorInfo";
7
+ export * from './HttpCodedError';
8
+ export * from './NoteVerbosityConfig';
9
+ export * from './NoteOutputStyleConfig';
@@ -0,0 +1,9 @@
1
+ import AmbientConfig from "./AmbientConfig";
2
+ export declare class socketConfig {
3
+ private _config;
4
+ wssBaseURL: string;
5
+ onError?: (errorMessage: string) => void;
6
+ onMetaEvent?: (jobId: string) => void;
7
+ constructor(_config: AmbientConfig);
8
+ prepareWSSURL(_filetype: string, _noteparams: string, jobName?: string, jobId?: string): string;
9
+ }
@@ -0,0 +1,2 @@
1
+ export { AugnitoAmbient } from "./AugnitoAmbient";
2
+ export * from "./config";
@@ -0,0 +1,17 @@
1
+ type AugnitoSocketResponse = {
2
+ Status: number;
3
+ Event: 'None' | {
4
+ Type: string;
5
+ Value: string;
6
+ };
7
+ Type: string;
8
+ SessionCode: string;
9
+ Result: AugnitoSocketResult;
10
+ };
11
+ type AugnitoSocketResult = {
12
+ Final: boolean;
13
+ IsCommand: boolean;
14
+ Action: string;
15
+ Transcript: string;
16
+ };
17
+ export { AugnitoSocketResponse, AugnitoSocketResult };
@@ -0,0 +1,24 @@
1
+ export declare const ErrorMessages: {
2
+ invalidUserDetails: string;
3
+ invalidSubscription: string;
4
+ invalidRequest: string;
5
+ activeSeatNotAvailable: string;
6
+ invalidParameters: string;
7
+ invalidCreds: string;
8
+ unableTofetchAccount: string;
9
+ unableToFetchJob: string;
10
+ jobNotConnectable: string;
11
+ timeoutExceeded: string;
12
+ rateLimitExceeded: string;
13
+ weakAudioSignal: string;
14
+ jobIdEmpty: string;
15
+ pageSizeEmpty: string;
16
+ noteDataEmpty: string;
17
+ jobNameEmpty: string;
18
+ patientContextEmpty: string;
19
+ micPermissionDenied: string;
20
+ micMuted: string;
21
+ audioUnplugged: string;
22
+ unknownError: string;
23
+ sdkUnintialised: string;
24
+ };
@@ -0,0 +1,7 @@
1
+ export declare class Guard {
2
+ private static instance;
3
+ private constructor();
4
+ static get Against(): Guard;
5
+ NullOrUndefined<T>(value: T | undefined, paramName: string): T;
6
+ NullOrEmpty<T>(value: T | undefined, paramName: string): T;
7
+ }
@@ -0,0 +1,6 @@
1
+ declare abstract class Logger {
2
+ private static readonly defaultTag;
3
+ static log(message: string | any | any[], tag?: string): void;
4
+ static error(message: string | any | any[], tag?: string): void;
5
+ }
6
+ export { Logger };
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "testaugnitoambientsdk2",
3
+ "version": "2.1.2",
4
+ "description": "Use this typescript SDK to integrate Augnito’s Ambient Tech within your EMR. To get access credentials or know more about how Augnito Ambient can benefit you, please visit our website and connect with our sales team: https://augnito.ai/",
5
+ "main": "dist/augnitoambientsdk.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "clean": "rm -rf ./dist/* ",
9
+ "test": "echo \"Error: no test specified\" && exit 1",
10
+ "build": "npm run clean && rollup -c"
11
+ },
12
+ "keywords": [
13
+ "Ambient Note Generation",
14
+ "Clinical Documentation",
15
+ "Augnito",
16
+ "Voice AI",
17
+ "Ambient Intelligence"
18
+ ],
19
+ "readmeFilename": "README.md",
20
+ "author": "",
21
+ "license": "ISC",
22
+ "devDependencies": {
23
+ "@babel/core": "^7.24.0",
24
+ "@babel/preset-env": "^7.24.0",
25
+ "@changesets/cli": "^2.29.2",
26
+ "rollup": "^2.79.1",
27
+ "rollup-plugin-babel": "^4.4.0",
28
+ "rollup-plugin-commonjs": "^10.1.0",
29
+ "rollup-plugin-node-resolve": "^5.2.0",
30
+ "typescript": "^5.3.3"
31
+ },
32
+ "dependencies": {
33
+ "@rollup/plugin-babel": "^6.0.4",
34
+ "@rollup/plugin-json": "^6.1.0",
35
+ "@rollup/plugin-node-resolve": "^15.2.3",
36
+ "augnitorecorder": "^1.0.45",
37
+ "rollup-plugin-cleanup": "^3.2.1",
38
+ "rollup-plugin-terser": "^7.0.2",
39
+ "rollup-plugin-typescript2": "^0.36.0"
40
+ }
41
+ }
@@ -0,0 +1,31 @@
1
+ import { nodeResolve } from "@rollup/plugin-node-resolve";
2
+ import commonjs from "rollup-plugin-commonjs";
3
+ import babel from "@rollup/plugin-babel";
4
+ import typescript from "rollup-plugin-typescript2";
5
+ import json from "@rollup/plugin-json";
6
+ import { terser } from "rollup-plugin-terser";
7
+ import cleanup from "rollup-plugin-cleanup";
8
+
9
+ export default [
10
+ {
11
+ input: "src/index.ts",
12
+ output: {
13
+ name: "augnitoambientsdk",
14
+ file: "dist/augnitoambientsdk.js",
15
+ format: "es",
16
+ sourcemap: false,
17
+ },
18
+ plugins: [
19
+ json(),
20
+ nodeResolve(),
21
+ commonjs(),
22
+ typescript({
23
+ rollupCommonJSResolveHack: false,
24
+ clean: true,
25
+ }),
26
+ babel({ babelHelpers: "bundled" }),
27
+ terser(),
28
+ cleanup(),
29
+ ],
30
+ },
31
+ ];