capacitor-voice-recorder-wav-stereo 7.0.3 → 7.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/docs.json CHANGED
@@ -103,9 +103,9 @@
103
103
  },
104
104
  {
105
105
  "name": "getConnectedDevices",
106
- "signature": "() => Promise<MediaDeviceInfo[]>",
106
+ "signature": "() => Promise<{ devices: MediaDeviceInfo[]; }>",
107
107
  "parameters": [],
108
- "returns": "Promise<any[]>",
108
+ "returns": "Promise<{ devices: any[]; }>",
109
109
  "tags": [],
110
110
  "docs": "",
111
111
  "complexTypes": [
@@ -16,5 +16,7 @@ export declare class VoiceRecorderImpl {
16
16
  private onFailedToStartRecording;
17
17
  private static blobToBase64;
18
18
  private prepareInstanceForNextOperation;
19
- static getConnectedDevices(): Promise<MediaDeviceInfo[]>;
19
+ static getConnectedDevices(): Promise<{
20
+ devices: MediaDeviceInfo[];
21
+ }>;
20
22
  }
@@ -171,11 +171,11 @@ export class VoiceRecorderImpl {
171
171
  static async getConnectedDevices() {
172
172
  try {
173
173
  const devices = await navigator.mediaDevices.enumerateDevices();
174
- return devices;
174
+ return { devices };
175
175
  }
176
176
  catch (error) {
177
177
  // ブラウザがAPIをサポートしていない場合は空配列を返す
178
- return [];
178
+ return { devices: [] };
179
179
  }
180
180
  }
181
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VoiceRecorderImpl.js","sourceRoot":"","sources":["../../src/VoiceRecorderImpl.ts"],"names":[],"mappings":"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","sourcesContent":["import getBlobDuration from 'get-blob-duration';\r\n\r\nimport type { Base64String, CurrentRecordingStatus, GenericResponse, RecordingData } from './definitions';\r\nimport {\r\n alreadyRecordingError,\r\n couldNotQueryPermissionStatusError,\r\n deviceCannotVoiceRecordError,\r\n emptyRecordingError,\r\n failedToFetchRecordingError,\r\n failedToRecordError,\r\n failureResponse,\r\n missingPermissionError,\r\n recordingHasNotStartedError,\r\n successResponse,\r\n} from './predefined-web-responses';\r\n\r\n// these mime types will be checked one by one in order until one of them is found to be supported by the current browser\r\nconst possibleMimeTypes = ['audio/mp4', 'audio/webm;codecs=opus', 'audio/aac', 'audio/webm', 'audio/ogg;codecs=opus'];\r\nconst neverResolvingPromise = (): Promise<any> => new Promise(() => undefined);\r\n\r\nexport class VoiceRecorderImpl {\r\n\r\n private mediaRecorder: MediaRecorder | null = null;\r\n private chunks: any[] = [];\r\n private pendingResult: Promise<RecordingData> = neverResolvingPromise();\r\n\r\n public static async canDeviceVoiceRecord(): Promise<GenericResponse> {\r\n if (navigator?.mediaDevices?.getUserMedia == null || VoiceRecorderImpl.getSupportedMimeType() == null) {\r\n return failureResponse();\r\n } else {\r\n return successResponse();\r\n }\r\n }\r\n\r\n public async startRecording(): Promise<GenericResponse> {\r\n if (this.mediaRecorder != null) {\r\n throw alreadyRecordingError();\r\n }\r\n const deviceCanRecord = await VoiceRecorderImpl.canDeviceVoiceRecord();\r\n if (!deviceCanRecord.value) {\r\n throw deviceCannotVoiceRecordError();\r\n }\r\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => successResponse());\r\n if (!havingPermission.value) {\r\n throw missingPermissionError();\r\n }\r\n\r\n return navigator.mediaDevices.getUserMedia({ audio: true })\r\n .then(this.onSuccessfullyStartedRecording.bind(this))\r\n .catch(this.onFailedToStartRecording.bind(this));\r\n }\r\n\r\n public async stopRecording(): Promise<RecordingData> {\r\n if (this.mediaRecorder == null) {\r\n throw recordingHasNotStartedError();\r\n }\r\n try {\r\n this.mediaRecorder.stop();\r\n this.mediaRecorder.stream.getTracks().forEach(track => track.stop());\r\n return this.pendingResult;\r\n } catch (ignore) {\r\n throw failedToFetchRecordingError();\r\n } finally {\r\n this.prepareInstanceForNextOperation();\r\n }\r\n }\r\n\r\n public static async hasAudioRecordingPermission(): Promise<GenericResponse> {\r\n return navigator.permissions.query({ name: 'microphone' as any })\r\n .then(result => ({ value: result.state === 'granted' }))\r\n .catch(() => {\r\n throw couldNotQueryPermissionStatusError();\r\n });\r\n }\r\n\r\n public static async requestAudioRecordingPermission(): Promise<GenericResponse> {\r\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => failureResponse());\r\n if (havingPermission.value) {\r\n return successResponse();\r\n }\r\n\r\n return navigator.mediaDevices.getUserMedia({ audio: true })\r\n .then(() => successResponse())\r\n .catch(() => failureResponse());\r\n }\r\n\r\n public pauseRecording(): Promise<GenericResponse> {\r\n if (this.mediaRecorder == null) {\r\n throw recordingHasNotStartedError();\r\n } else if (this.mediaRecorder.state === 'recording') {\r\n this.mediaRecorder.pause();\r\n return Promise.resolve(successResponse());\r\n } else {\r\n return Promise.resolve(failureResponse());\r\n }\r\n }\r\n\r\n public resumeRecording(): Promise<GenericResponse> {\r\n if (this.mediaRecorder == null) {\r\n throw recordingHasNotStartedError();\r\n } else if (this.mediaRecorder.state === 'paused') {\r\n this.mediaRecorder.resume();\r\n return Promise.resolve(successResponse());\r\n } else {\r\n return Promise.resolve(failureResponse());\r\n }\r\n }\r\n\r\n public getCurrentStatus(): Promise<CurrentRecordingStatus> {\r\n if (this.mediaRecorder == null) {\r\n return Promise.resolve({ status: 'NONE' });\r\n } else if (this.mediaRecorder.state === 'recording') {\r\n return Promise.resolve({ status: 'RECORDING' });\r\n } else if (this.mediaRecorder.state === 'paused') {\r\n return Promise.resolve({ status: 'PAUSED' });\r\n } else {\r\n return Promise.resolve({ status: 'NONE' });\r\n }\r\n }\r\n\r\n public static getSupportedMimeType(): string | null {\r\n if (MediaRecorder?.isTypeSupported == null) return null;\r\n const foundSupportedType = possibleMimeTypes.find(type => MediaRecorder.isTypeSupported(type));\r\n return foundSupportedType ?? null;\r\n }\r\n\r\n private onSuccessfullyStartedRecording(stream: MediaStream): GenericResponse {\r\n this.pendingResult = new Promise((resolve, reject) => {\r\n this.mediaRecorder = new MediaRecorder(stream);\r\n this.mediaRecorder.onerror = () => {\r\n this.prepareInstanceForNextOperation();\r\n reject(failedToRecordError());\r\n };\r\n this.mediaRecorder.onstop = async () => {\r\n const mimeType = VoiceRecorderImpl.getSupportedMimeType();\r\n if (mimeType == null) {\r\n this.prepareInstanceForNextOperation();\r\n reject(failedToFetchRecordingError());\r\n return;\r\n }\r\n const blobVoiceRecording = new Blob(this.chunks, { 'type': mimeType });\r\n if (blobVoiceRecording.size <= 0) {\r\n this.prepareInstanceForNextOperation();\r\n reject(emptyRecordingError());\r\n return;\r\n }\r\n const recordDataBase64 = await VoiceRecorderImpl.blobToBase64(blobVoiceRecording);\r\n const recordingDuration = await getBlobDuration(blobVoiceRecording);\r\n this.prepareInstanceForNextOperation();\r\n resolve({ value: { recordDataBase64, mimeType, msDuration: recordingDuration * 1000 } });\r\n };\r\n this.mediaRecorder.ondataavailable = (event: any) => this.chunks.push(event.data);\r\n this.mediaRecorder.start();\r\n });\r\n return successResponse();\r\n }\r\n\r\n private onFailedToStartRecording(): GenericResponse {\r\n this.prepareInstanceForNextOperation();\r\n throw failedToRecordError();\r\n }\r\n\r\n private static blobToBase64(blob: Blob): Promise<Base64String> {\r\n return new Promise(resolve => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n const recordingResult = String(reader.result);\r\n const splitResult = recordingResult.split('base64,');\r\n const toResolve = (splitResult.length > 1) ? splitResult[1] : recordingResult;\r\n resolve(toResolve.trim());\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n }\r\n\r\n private prepareInstanceForNextOperation(): void {\r\n if (this.mediaRecorder != null && this.mediaRecorder.state === 'recording') {\r\n try {\r\n this.mediaRecorder.stop();\r\n } catch (ignore) {\r\n }\r\n }\r\n this.pendingResult = neverResolvingPromise();\r\n this.mediaRecorder = null;\r\n this.chunks = [];\r\n }\r\n\r\n public static async getConnectedDevices(): Promise<MediaDeviceInfo[]> {\r\n try {\r\n const devices = await navigator.mediaDevices.enumerateDevices();\r\n return devices;\r\n } catch (error) {\r\n // ブラウザがAPIをサポートしていない場合は空配列を返す\r\n return [];\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"VoiceRecorderImpl.js","sourceRoot":"","sources":["../../src/VoiceRecorderImpl.ts"],"names":[],"mappings":"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","sourcesContent":["import getBlobDuration from 'get-blob-duration';\r\n\r\nimport type { Base64String, CurrentRecordingStatus, GenericResponse, RecordingData } from './definitions';\r\nimport {\r\n alreadyRecordingError,\r\n couldNotQueryPermissionStatusError,\r\n deviceCannotVoiceRecordError,\r\n emptyRecordingError,\r\n failedToFetchRecordingError,\r\n failedToRecordError,\r\n failureResponse,\r\n missingPermissionError,\r\n recordingHasNotStartedError,\r\n successResponse,\r\n} from './predefined-web-responses';\r\n\r\n// these mime types will be checked one by one in order until one of them is found to be supported by the current browser\r\nconst possibleMimeTypes = ['audio/mp4', 'audio/webm;codecs=opus', 'audio/aac', 'audio/webm', 'audio/ogg;codecs=opus'];\r\nconst neverResolvingPromise = (): Promise<any> => new Promise(() => undefined);\r\n\r\nexport class VoiceRecorderImpl {\r\n\r\n private mediaRecorder: MediaRecorder | null = null;\r\n private chunks: any[] = [];\r\n private pendingResult: Promise<RecordingData> = neverResolvingPromise();\r\n\r\n public static async canDeviceVoiceRecord(): Promise<GenericResponse> {\r\n if (navigator?.mediaDevices?.getUserMedia == null || VoiceRecorderImpl.getSupportedMimeType() == null) {\r\n return failureResponse();\r\n } else {\r\n return successResponse();\r\n }\r\n }\r\n\r\n public async startRecording(): Promise<GenericResponse> {\r\n if (this.mediaRecorder != null) {\r\n throw alreadyRecordingError();\r\n }\r\n const deviceCanRecord = await VoiceRecorderImpl.canDeviceVoiceRecord();\r\n if (!deviceCanRecord.value) {\r\n throw deviceCannotVoiceRecordError();\r\n }\r\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => successResponse());\r\n if (!havingPermission.value) {\r\n throw missingPermissionError();\r\n }\r\n\r\n return navigator.mediaDevices.getUserMedia({ audio: true })\r\n .then(this.onSuccessfullyStartedRecording.bind(this))\r\n .catch(this.onFailedToStartRecording.bind(this));\r\n }\r\n\r\n public async stopRecording(): Promise<RecordingData> {\r\n if (this.mediaRecorder == null) {\r\n throw recordingHasNotStartedError();\r\n }\r\n try {\r\n this.mediaRecorder.stop();\r\n this.mediaRecorder.stream.getTracks().forEach(track => track.stop());\r\n return this.pendingResult;\r\n } catch (ignore) {\r\n throw failedToFetchRecordingError();\r\n } finally {\r\n this.prepareInstanceForNextOperation();\r\n }\r\n }\r\n\r\n public static async hasAudioRecordingPermission(): Promise<GenericResponse> {\r\n return navigator.permissions.query({ name: 'microphone' as any })\r\n .then(result => ({ value: result.state === 'granted' }))\r\n .catch(() => {\r\n throw couldNotQueryPermissionStatusError();\r\n });\r\n }\r\n\r\n public static async requestAudioRecordingPermission(): Promise<GenericResponse> {\r\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => failureResponse());\r\n if (havingPermission.value) {\r\n return successResponse();\r\n }\r\n\r\n return navigator.mediaDevices.getUserMedia({ audio: true })\r\n .then(() => successResponse())\r\n .catch(() => failureResponse());\r\n }\r\n\r\n public pauseRecording(): Promise<GenericResponse> {\r\n if (this.mediaRecorder == null) {\r\n throw recordingHasNotStartedError();\r\n } else if (this.mediaRecorder.state === 'recording') {\r\n this.mediaRecorder.pause();\r\n return Promise.resolve(successResponse());\r\n } else {\r\n return Promise.resolve(failureResponse());\r\n }\r\n }\r\n\r\n public resumeRecording(): Promise<GenericResponse> {\r\n if (this.mediaRecorder == null) {\r\n throw recordingHasNotStartedError();\r\n } else if (this.mediaRecorder.state === 'paused') {\r\n this.mediaRecorder.resume();\r\n return Promise.resolve(successResponse());\r\n } else {\r\n return Promise.resolve(failureResponse());\r\n }\r\n }\r\n\r\n public getCurrentStatus(): Promise<CurrentRecordingStatus> {\r\n if (this.mediaRecorder == null) {\r\n return Promise.resolve({ status: 'NONE' });\r\n } else if (this.mediaRecorder.state === 'recording') {\r\n return Promise.resolve({ status: 'RECORDING' });\r\n } else if (this.mediaRecorder.state === 'paused') {\r\n return Promise.resolve({ status: 'PAUSED' });\r\n } else {\r\n return Promise.resolve({ status: 'NONE' });\r\n }\r\n }\r\n\r\n public static getSupportedMimeType(): string | null {\r\n if (MediaRecorder?.isTypeSupported == null) return null;\r\n const foundSupportedType = possibleMimeTypes.find(type => MediaRecorder.isTypeSupported(type));\r\n return foundSupportedType ?? null;\r\n }\r\n\r\n private onSuccessfullyStartedRecording(stream: MediaStream): GenericResponse {\r\n this.pendingResult = new Promise((resolve, reject) => {\r\n this.mediaRecorder = new MediaRecorder(stream);\r\n this.mediaRecorder.onerror = () => {\r\n this.prepareInstanceForNextOperation();\r\n reject(failedToRecordError());\r\n };\r\n this.mediaRecorder.onstop = async () => {\r\n const mimeType = VoiceRecorderImpl.getSupportedMimeType();\r\n if (mimeType == null) {\r\n this.prepareInstanceForNextOperation();\r\n reject(failedToFetchRecordingError());\r\n return;\r\n }\r\n const blobVoiceRecording = new Blob(this.chunks, { 'type': mimeType });\r\n if (blobVoiceRecording.size <= 0) {\r\n this.prepareInstanceForNextOperation();\r\n reject(emptyRecordingError());\r\n return;\r\n }\r\n const recordDataBase64 = await VoiceRecorderImpl.blobToBase64(blobVoiceRecording);\r\n const recordingDuration = await getBlobDuration(blobVoiceRecording);\r\n this.prepareInstanceForNextOperation();\r\n resolve({ value: { recordDataBase64, mimeType, msDuration: recordingDuration * 1000 } });\r\n };\r\n this.mediaRecorder.ondataavailable = (event: any) => this.chunks.push(event.data);\r\n this.mediaRecorder.start();\r\n });\r\n return successResponse();\r\n }\r\n\r\n private onFailedToStartRecording(): GenericResponse {\r\n this.prepareInstanceForNextOperation();\r\n throw failedToRecordError();\r\n }\r\n\r\n private static blobToBase64(blob: Blob): Promise<Base64String> {\r\n return new Promise(resolve => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n const recordingResult = String(reader.result);\r\n const splitResult = recordingResult.split('base64,');\r\n const toResolve = (splitResult.length > 1) ? splitResult[1] : recordingResult;\r\n resolve(toResolve.trim());\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n }\r\n\r\n private prepareInstanceForNextOperation(): void {\r\n if (this.mediaRecorder != null && this.mediaRecorder.state === 'recording') {\r\n try {\r\n this.mediaRecorder.stop();\r\n } catch (ignore) {\r\n }\r\n }\r\n this.pendingResult = neverResolvingPromise();\r\n this.mediaRecorder = null;\r\n this.chunks = [];\r\n }\r\n\r\n public static async getConnectedDevices(): Promise<{ devices: MediaDeviceInfo[] }> {\r\n try {\r\n const devices = await navigator.mediaDevices.enumerateDevices();\r\n return { devices };\r\n } catch (error) {\r\n // ブラウザがAPIをサポートしていない場合は空配列を返す\r\n return { devices: [] };\r\n }\r\n }\r\n}\r\n"]}
@@ -30,5 +30,7 @@ export interface VoiceRecorderPlugin {
30
30
  pauseRecording(): Promise<GenericResponse>;
31
31
  resumeRecording(): Promise<GenericResponse>;
32
32
  getCurrentStatus(): Promise<CurrentRecordingStatus>;
33
- getConnectedDevices(): Promise<MediaDeviceInfo[]>;
33
+ getConnectedDevices(): Promise<{
34
+ devices: MediaDeviceInfo[];
35
+ }>;
34
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export type Base64String = string\r\n\r\nexport interface RecordingData {\r\n value: {\r\n recordDataBase64: Base64String\r\n msDuration: number\r\n mimeType: string\r\n };\r\n}\r\n\r\nexport interface GenericResponse {\r\n value: boolean;\r\n}\r\n\r\nexport interface CurrentRecordingStatus {\r\n status: 'RECORDING' | 'PAUSED' | 'NONE';\r\n}\r\n\r\nexport interface AudioDevice {\r\n deviceId: string;\r\n kind: MediaDeviceKind; // \"audioinput\" | \"audiooutput\"\r\n label: string;\r\n groupId: string | null;\r\n}\r\n\r\nexport interface GetConnectedDevicesResult {\r\n devices: AudioDevice[];\r\n}\r\n\r\nexport interface VoiceRecorderPlugin {\r\n canDeviceVoiceRecord(): Promise<GenericResponse>;\r\n\r\n requestAudioRecordingPermission(): Promise<GenericResponse>;\r\n\r\n hasAudioRecordingPermission(): Promise<GenericResponse>;\r\n\r\n startRecording(): Promise<GenericResponse>;\r\n\r\n stopRecording(): Promise<RecordingData>;\r\n\r\n pauseRecording(): Promise<GenericResponse>;\r\n\r\n resumeRecording(): Promise<GenericResponse>;\r\n\r\n getCurrentStatus(): Promise<CurrentRecordingStatus>;\r\n\r\n getConnectedDevices(): Promise<MediaDeviceInfo[]>;\r\n}\r\n"]}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export type Base64String = string\r\n\r\nexport interface RecordingData {\r\n value: {\r\n recordDataBase64: Base64String\r\n msDuration: number\r\n mimeType: string\r\n };\r\n}\r\n\r\nexport interface GenericResponse {\r\n value: boolean;\r\n}\r\n\r\nexport interface CurrentRecordingStatus {\r\n status: 'RECORDING' | 'PAUSED' | 'NONE';\r\n}\r\n\r\nexport interface AudioDevice {\r\n deviceId: string;\r\n kind: MediaDeviceKind; // \"audioinput\" | \"audiooutput\"\r\n label: string;\r\n groupId: string | null;\r\n}\r\n\r\nexport interface GetConnectedDevicesResult {\r\n devices: AudioDevice[];\r\n}\r\n\r\nexport interface VoiceRecorderPlugin {\r\n canDeviceVoiceRecord(): Promise<GenericResponse>;\r\n\r\n requestAudioRecordingPermission(): Promise<GenericResponse>;\r\n\r\n hasAudioRecordingPermission(): Promise<GenericResponse>;\r\n\r\n startRecording(): Promise<GenericResponse>;\r\n\r\n stopRecording(): Promise<RecordingData>;\r\n\r\n pauseRecording(): Promise<GenericResponse>;\r\n\r\n resumeRecording(): Promise<GenericResponse>;\r\n\r\n getCurrentStatus(): Promise<CurrentRecordingStatus>;\r\n\r\n getConnectedDevices(): Promise<{ devices: MediaDeviceInfo[] }>;\r\n}\r\n"]}
package/dist/esm/web.d.ts CHANGED
@@ -10,5 +10,7 @@ export declare class VoiceRecorderWeb extends WebPlugin implements VoiceRecorder
10
10
  pauseRecording(): Promise<GenericResponse>;
11
11
  resumeRecording(): Promise<GenericResponse>;
12
12
  getCurrentStatus(): Promise<CurrentRecordingStatus>;
13
- getConnectedDevices(): Promise<MediaDeviceInfo[]>;
13
+ getConnectedDevices(): Promise<{
14
+ devices: MediaDeviceInfo[];
15
+ }>;
14
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAA/C;;QAEU,0BAAqB,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAsC1D,CAAC;IApCQ,oBAAoB;QACzB,OAAO,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;IAClD,CAAC;IAEM,2BAA2B;QAChC,OAAO,iBAAiB,CAAC,2BAA2B,EAAE,CAAC;IACzD,CAAC;IAEM,+BAA+B;QACpC,OAAO,iBAAiB,CAAC,+BAA+B,EAAE,CAAC;IAC7D,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,CAAC;IACrD,CAAC;IAEM,aAAa;QAClB,OAAO,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,CAAC;IACrD,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,CAAC;IACtD,CAAC;IAEM,gBAAgB;QACrB,OAAO,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;IACvD,CAAC;IAEM,mBAAmB;QACxB,OAAO,iBAAiB,CAAC,mBAAmB,EAAE,CAAC;IACjD,CAAC;CAEF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\r\n\r\nimport { VoiceRecorderImpl } from './VoiceRecorderImpl';\r\nimport type { CurrentRecordingStatus, GenericResponse, RecordingData, VoiceRecorderPlugin } from './definitions';\r\n\r\nexport class VoiceRecorderWeb extends WebPlugin implements VoiceRecorderPlugin {\r\n\r\n private voiceRecorderInstance = new VoiceRecorderImpl();\r\n\r\n public canDeviceVoiceRecord(): Promise<GenericResponse> {\r\n return VoiceRecorderImpl.canDeviceVoiceRecord();\r\n }\r\n\r\n public hasAudioRecordingPermission(): Promise<GenericResponse> {\r\n return VoiceRecorderImpl.hasAudioRecordingPermission();\r\n }\r\n\r\n public requestAudioRecordingPermission(): Promise<GenericResponse> {\r\n return VoiceRecorderImpl.requestAudioRecordingPermission();\r\n }\r\n\r\n public startRecording(): Promise<GenericResponse> {\r\n return this.voiceRecorderInstance.startRecording();\r\n }\r\n\r\n public stopRecording(): Promise<RecordingData> {\r\n return this.voiceRecorderInstance.stopRecording();\r\n }\r\n\r\n public pauseRecording(): Promise<GenericResponse> {\r\n return this.voiceRecorderInstance.pauseRecording();\r\n }\r\n\r\n public resumeRecording(): Promise<GenericResponse> {\r\n return this.voiceRecorderInstance.resumeRecording();\r\n }\r\n\r\n public getCurrentStatus(): Promise<CurrentRecordingStatus> {\r\n return this.voiceRecorderInstance.getCurrentStatus();\r\n }\r\n\r\n public getConnectedDevices(): Promise<MediaDeviceInfo[]> {\r\n return VoiceRecorderImpl.getConnectedDevices();\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAA/C;;QAEU,0BAAqB,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAsC1D,CAAC;IApCQ,oBAAoB;QACzB,OAAO,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;IAClD,CAAC;IAEM,2BAA2B;QAChC,OAAO,iBAAiB,CAAC,2BAA2B,EAAE,CAAC;IACzD,CAAC;IAEM,+BAA+B;QACpC,OAAO,iBAAiB,CAAC,+BAA+B,EAAE,CAAC;IAC7D,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,CAAC;IACrD,CAAC;IAEM,aAAa;QAClB,OAAO,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,CAAC;IACrD,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,CAAC;IACtD,CAAC;IAEM,gBAAgB;QACrB,OAAO,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;IACvD,CAAC;IAEM,mBAAmB;QACxB,OAAO,iBAAiB,CAAC,mBAAmB,EAAE,CAAC;IACjD,CAAC;CAEF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\r\n\r\nimport { VoiceRecorderImpl } from './VoiceRecorderImpl';\r\nimport type { CurrentRecordingStatus, GenericResponse, RecordingData, VoiceRecorderPlugin } from './definitions';\r\n\r\nexport class VoiceRecorderWeb extends WebPlugin implements VoiceRecorderPlugin {\r\n\r\n private voiceRecorderInstance = new VoiceRecorderImpl();\r\n\r\n public canDeviceVoiceRecord(): Promise<GenericResponse> {\r\n return VoiceRecorderImpl.canDeviceVoiceRecord();\r\n }\r\n\r\n public hasAudioRecordingPermission(): Promise<GenericResponse> {\r\n return VoiceRecorderImpl.hasAudioRecordingPermission();\r\n }\r\n\r\n public requestAudioRecordingPermission(): Promise<GenericResponse> {\r\n return VoiceRecorderImpl.requestAudioRecordingPermission();\r\n }\r\n\r\n public startRecording(): Promise<GenericResponse> {\r\n return this.voiceRecorderInstance.startRecording();\r\n }\r\n\r\n public stopRecording(): Promise<RecordingData> {\r\n return this.voiceRecorderInstance.stopRecording();\r\n }\r\n\r\n public pauseRecording(): Promise<GenericResponse> {\r\n return this.voiceRecorderInstance.pauseRecording();\r\n }\r\n\r\n public resumeRecording(): Promise<GenericResponse> {\r\n return this.voiceRecorderInstance.resumeRecording();\r\n }\r\n\r\n public getCurrentStatus(): Promise<CurrentRecordingStatus> {\r\n return this.voiceRecorderInstance.getCurrentStatus();\r\n }\r\n\r\n public getConnectedDevices(): Promise<{ devices: MediaDeviceInfo[] }> {\r\n return VoiceRecorderImpl.getConnectedDevices();\r\n }\r\n\r\n}\r\n"]}
@@ -189,11 +189,11 @@ class VoiceRecorderImpl {
189
189
  static async getConnectedDevices() {
190
190
  try {
191
191
  const devices = await navigator.mediaDevices.enumerateDevices();
192
- return devices;
192
+ return { devices };
193
193
  }
194
194
  catch (error) {
195
195
  // ブラウザがAPIをサポートしていない場合は空配列を返す
196
- return [];
196
+ return { devices: [] };
197
197
  }
198
198
  }
199
199
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/predefined-web-responses.js","esm/VoiceRecorderImpl.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst VoiceRecorder = registerPlugin('VoiceRecorder', {\n web: () => import('./web').then(m => new m.VoiceRecorderWeb()),\n});\nexport * from './definitions';\nexport { VoiceRecorder };\n//# sourceMappingURL=index.js.map","export const successResponse = () => ({ value: true });\nexport const failureResponse = () => ({ value: false });\nexport const missingPermissionError = () => new Error('MISSING_PERMISSION');\nexport const alreadyRecordingError = () => new Error('ALREADY_RECORDING');\nexport const microphoneBeingUsedError = () => new Error('MICROPHONE_BEING_USED');\nexport const deviceCannotVoiceRecordError = () => new Error('DEVICE_CANNOT_VOICE_RECORD');\nexport const failedToRecordError = () => new Error('FAILED_TO_RECORD');\nexport const emptyRecordingError = () => new Error('EMPTY_RECORDING');\nexport const recordingHasNotStartedError = () => new Error('RECORDING_HAS_NOT_STARTED');\nexport const failedToFetchRecordingError = () => new Error('FAILED_TO_FETCH_RECORDING');\nexport const couldNotQueryPermissionStatusError = () => new Error('COULD_NOT_QUERY_PERMISSION_STATUS');\n//# sourceMappingURL=predefined-web-responses.js.map","import getBlobDuration from 'get-blob-duration';\nimport { alreadyRecordingError, couldNotQueryPermissionStatusError, deviceCannotVoiceRecordError, emptyRecordingError, failedToFetchRecordingError, failedToRecordError, failureResponse, missingPermissionError, recordingHasNotStartedError, successResponse, } from './predefined-web-responses';\n// these mime types will be checked one by one in order until one of them is found to be supported by the current browser\nconst possibleMimeTypes = ['audio/mp4', 'audio/webm;codecs=opus', 'audio/aac', 'audio/webm', 'audio/ogg;codecs=opus'];\nconst neverResolvingPromise = () => new Promise(() => undefined);\nexport class VoiceRecorderImpl {\n constructor() {\n this.mediaRecorder = null;\n this.chunks = [];\n this.pendingResult = neverResolvingPromise();\n }\n static async canDeviceVoiceRecord() {\n var _a;\n if (((_a = navigator === null || navigator === void 0 ? void 0 : navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) == null || VoiceRecorderImpl.getSupportedMimeType() == null) {\n return failureResponse();\n }\n else {\n return successResponse();\n }\n }\n async startRecording() {\n if (this.mediaRecorder != null) {\n throw alreadyRecordingError();\n }\n const deviceCanRecord = await VoiceRecorderImpl.canDeviceVoiceRecord();\n if (!deviceCanRecord.value) {\n throw deviceCannotVoiceRecordError();\n }\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => successResponse());\n if (!havingPermission.value) {\n throw missingPermissionError();\n }\n return navigator.mediaDevices.getUserMedia({ audio: true })\n .then(this.onSuccessfullyStartedRecording.bind(this))\n .catch(this.onFailedToStartRecording.bind(this));\n }\n async stopRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n try {\n this.mediaRecorder.stop();\n this.mediaRecorder.stream.getTracks().forEach(track => track.stop());\n return this.pendingResult;\n }\n catch (ignore) {\n throw failedToFetchRecordingError();\n }\n finally {\n this.prepareInstanceForNextOperation();\n }\n }\n static async hasAudioRecordingPermission() {\n return navigator.permissions.query({ name: 'microphone' })\n .then(result => ({ value: result.state === 'granted' }))\n .catch(() => {\n throw couldNotQueryPermissionStatusError();\n });\n }\n static async requestAudioRecordingPermission() {\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => failureResponse());\n if (havingPermission.value) {\n return successResponse();\n }\n return navigator.mediaDevices.getUserMedia({ audio: true })\n .then(() => successResponse())\n .catch(() => failureResponse());\n }\n pauseRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n else if (this.mediaRecorder.state === 'recording') {\n this.mediaRecorder.pause();\n return Promise.resolve(successResponse());\n }\n else {\n return Promise.resolve(failureResponse());\n }\n }\n resumeRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n else if (this.mediaRecorder.state === 'paused') {\n this.mediaRecorder.resume();\n return Promise.resolve(successResponse());\n }\n else {\n return Promise.resolve(failureResponse());\n }\n }\n getCurrentStatus() {\n if (this.mediaRecorder == null) {\n return Promise.resolve({ status: 'NONE' });\n }\n else if (this.mediaRecorder.state === 'recording') {\n return Promise.resolve({ status: 'RECORDING' });\n }\n else if (this.mediaRecorder.state === 'paused') {\n return Promise.resolve({ status: 'PAUSED' });\n }\n else {\n return Promise.resolve({ status: 'NONE' });\n }\n }\n static getSupportedMimeType() {\n if ((MediaRecorder === null || MediaRecorder === void 0 ? void 0 : MediaRecorder.isTypeSupported) == null)\n return null;\n const foundSupportedType = possibleMimeTypes.find(type => MediaRecorder.isTypeSupported(type));\n return foundSupportedType !== null && foundSupportedType !== void 0 ? foundSupportedType : null;\n }\n onSuccessfullyStartedRecording(stream) {\n this.pendingResult = new Promise((resolve, reject) => {\n this.mediaRecorder = new MediaRecorder(stream);\n this.mediaRecorder.onerror = () => {\n this.prepareInstanceForNextOperation();\n reject(failedToRecordError());\n };\n this.mediaRecorder.onstop = async () => {\n const mimeType = VoiceRecorderImpl.getSupportedMimeType();\n if (mimeType == null) {\n this.prepareInstanceForNextOperation();\n reject(failedToFetchRecordingError());\n return;\n }\n const blobVoiceRecording = new Blob(this.chunks, { 'type': mimeType });\n if (blobVoiceRecording.size <= 0) {\n this.prepareInstanceForNextOperation();\n reject(emptyRecordingError());\n return;\n }\n const recordDataBase64 = await VoiceRecorderImpl.blobToBase64(blobVoiceRecording);\n const recordingDuration = await getBlobDuration(blobVoiceRecording);\n this.prepareInstanceForNextOperation();\n resolve({ value: { recordDataBase64, mimeType, msDuration: recordingDuration * 1000 } });\n };\n this.mediaRecorder.ondataavailable = (event) => this.chunks.push(event.data);\n this.mediaRecorder.start();\n });\n return successResponse();\n }\n onFailedToStartRecording() {\n this.prepareInstanceForNextOperation();\n throw failedToRecordError();\n }\n static blobToBase64(blob) {\n return new Promise(resolve => {\n const reader = new FileReader();\n reader.onloadend = () => {\n const recordingResult = String(reader.result);\n const splitResult = recordingResult.split('base64,');\n const toResolve = (splitResult.length > 1) ? splitResult[1] : recordingResult;\n resolve(toResolve.trim());\n };\n reader.readAsDataURL(blob);\n });\n }\n prepareInstanceForNextOperation() {\n if (this.mediaRecorder != null && this.mediaRecorder.state === 'recording') {\n try {\n this.mediaRecorder.stop();\n }\n catch (ignore) {\n }\n }\n this.pendingResult = neverResolvingPromise();\n this.mediaRecorder = null;\n this.chunks = [];\n }\n static async getConnectedDevices() {\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n return devices;\n }\n catch (error) {\n // ブラウザがAPIをサポートしていない場合は空配列を返す\n return [];\n }\n }\n}\n//# sourceMappingURL=VoiceRecorderImpl.js.map","import { WebPlugin } from '@capacitor/core';\nimport { VoiceRecorderImpl } from './VoiceRecorderImpl';\nexport class VoiceRecorderWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.voiceRecorderInstance = new VoiceRecorderImpl();\n }\n canDeviceVoiceRecord() {\n return VoiceRecorderImpl.canDeviceVoiceRecord();\n }\n hasAudioRecordingPermission() {\n return VoiceRecorderImpl.hasAudioRecordingPermission();\n }\n requestAudioRecordingPermission() {\n return VoiceRecorderImpl.requestAudioRecordingPermission();\n }\n startRecording() {\n return this.voiceRecorderInstance.startRecording();\n }\n stopRecording() {\n return this.voiceRecorderInstance.stopRecording();\n }\n pauseRecording() {\n return this.voiceRecorderInstance.pauseRecording();\n }\n resumeRecording() {\n return this.voiceRecorderInstance.resumeRecording();\n }\n getCurrentStatus() {\n return this.voiceRecorderInstance.getCurrentStatus();\n }\n getConnectedDevices() {\n return VoiceRecorderImpl.getConnectedDevices();\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/predefined-web-responses.js","esm/VoiceRecorderImpl.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst VoiceRecorder = registerPlugin('VoiceRecorder', {\n web: () => import('./web').then(m => new m.VoiceRecorderWeb()),\n});\nexport * from './definitions';\nexport { VoiceRecorder };\n//# sourceMappingURL=index.js.map","export const successResponse = () => ({ value: true });\nexport const failureResponse = () => ({ value: false });\nexport const missingPermissionError = () => new Error('MISSING_PERMISSION');\nexport const alreadyRecordingError = () => new Error('ALREADY_RECORDING');\nexport const microphoneBeingUsedError = () => new Error('MICROPHONE_BEING_USED');\nexport const deviceCannotVoiceRecordError = () => new Error('DEVICE_CANNOT_VOICE_RECORD');\nexport const failedToRecordError = () => new Error('FAILED_TO_RECORD');\nexport const emptyRecordingError = () => new Error('EMPTY_RECORDING');\nexport const recordingHasNotStartedError = () => new Error('RECORDING_HAS_NOT_STARTED');\nexport const failedToFetchRecordingError = () => new Error('FAILED_TO_FETCH_RECORDING');\nexport const couldNotQueryPermissionStatusError = () => new Error('COULD_NOT_QUERY_PERMISSION_STATUS');\n//# sourceMappingURL=predefined-web-responses.js.map","import getBlobDuration from 'get-blob-duration';\nimport { alreadyRecordingError, couldNotQueryPermissionStatusError, deviceCannotVoiceRecordError, emptyRecordingError, failedToFetchRecordingError, failedToRecordError, failureResponse, missingPermissionError, recordingHasNotStartedError, successResponse, } from './predefined-web-responses';\n// these mime types will be checked one by one in order until one of them is found to be supported by the current browser\nconst possibleMimeTypes = ['audio/mp4', 'audio/webm;codecs=opus', 'audio/aac', 'audio/webm', 'audio/ogg;codecs=opus'];\nconst neverResolvingPromise = () => new Promise(() => undefined);\nexport class VoiceRecorderImpl {\n constructor() {\n this.mediaRecorder = null;\n this.chunks = [];\n this.pendingResult = neverResolvingPromise();\n }\n static async canDeviceVoiceRecord() {\n var _a;\n if (((_a = navigator === null || navigator === void 0 ? void 0 : navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) == null || VoiceRecorderImpl.getSupportedMimeType() == null) {\n return failureResponse();\n }\n else {\n return successResponse();\n }\n }\n async startRecording() {\n if (this.mediaRecorder != null) {\n throw alreadyRecordingError();\n }\n const deviceCanRecord = await VoiceRecorderImpl.canDeviceVoiceRecord();\n if (!deviceCanRecord.value) {\n throw deviceCannotVoiceRecordError();\n }\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => successResponse());\n if (!havingPermission.value) {\n throw missingPermissionError();\n }\n return navigator.mediaDevices.getUserMedia({ audio: true })\n .then(this.onSuccessfullyStartedRecording.bind(this))\n .catch(this.onFailedToStartRecording.bind(this));\n }\n async stopRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n try {\n this.mediaRecorder.stop();\n this.mediaRecorder.stream.getTracks().forEach(track => track.stop());\n return this.pendingResult;\n }\n catch (ignore) {\n throw failedToFetchRecordingError();\n }\n finally {\n this.prepareInstanceForNextOperation();\n }\n }\n static async hasAudioRecordingPermission() {\n return navigator.permissions.query({ name: 'microphone' })\n .then(result => ({ value: result.state === 'granted' }))\n .catch(() => {\n throw couldNotQueryPermissionStatusError();\n });\n }\n static async requestAudioRecordingPermission() {\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => failureResponse());\n if (havingPermission.value) {\n return successResponse();\n }\n return navigator.mediaDevices.getUserMedia({ audio: true })\n .then(() => successResponse())\n .catch(() => failureResponse());\n }\n pauseRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n else if (this.mediaRecorder.state === 'recording') {\n this.mediaRecorder.pause();\n return Promise.resolve(successResponse());\n }\n else {\n return Promise.resolve(failureResponse());\n }\n }\n resumeRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n else if (this.mediaRecorder.state === 'paused') {\n this.mediaRecorder.resume();\n return Promise.resolve(successResponse());\n }\n else {\n return Promise.resolve(failureResponse());\n }\n }\n getCurrentStatus() {\n if (this.mediaRecorder == null) {\n return Promise.resolve({ status: 'NONE' });\n }\n else if (this.mediaRecorder.state === 'recording') {\n return Promise.resolve({ status: 'RECORDING' });\n }\n else if (this.mediaRecorder.state === 'paused') {\n return Promise.resolve({ status: 'PAUSED' });\n }\n else {\n return Promise.resolve({ status: 'NONE' });\n }\n }\n static getSupportedMimeType() {\n if ((MediaRecorder === null || MediaRecorder === void 0 ? void 0 : MediaRecorder.isTypeSupported) == null)\n return null;\n const foundSupportedType = possibleMimeTypes.find(type => MediaRecorder.isTypeSupported(type));\n return foundSupportedType !== null && foundSupportedType !== void 0 ? foundSupportedType : null;\n }\n onSuccessfullyStartedRecording(stream) {\n this.pendingResult = new Promise((resolve, reject) => {\n this.mediaRecorder = new MediaRecorder(stream);\n this.mediaRecorder.onerror = () => {\n this.prepareInstanceForNextOperation();\n reject(failedToRecordError());\n };\n this.mediaRecorder.onstop = async () => {\n const mimeType = VoiceRecorderImpl.getSupportedMimeType();\n if (mimeType == null) {\n this.prepareInstanceForNextOperation();\n reject(failedToFetchRecordingError());\n return;\n }\n const blobVoiceRecording = new Blob(this.chunks, { 'type': mimeType });\n if (blobVoiceRecording.size <= 0) {\n this.prepareInstanceForNextOperation();\n reject(emptyRecordingError());\n return;\n }\n const recordDataBase64 = await VoiceRecorderImpl.blobToBase64(blobVoiceRecording);\n const recordingDuration = await getBlobDuration(blobVoiceRecording);\n this.prepareInstanceForNextOperation();\n resolve({ value: { recordDataBase64, mimeType, msDuration: recordingDuration * 1000 } });\n };\n this.mediaRecorder.ondataavailable = (event) => this.chunks.push(event.data);\n this.mediaRecorder.start();\n });\n return successResponse();\n }\n onFailedToStartRecording() {\n this.prepareInstanceForNextOperation();\n throw failedToRecordError();\n }\n static blobToBase64(blob) {\n return new Promise(resolve => {\n const reader = new FileReader();\n reader.onloadend = () => {\n const recordingResult = String(reader.result);\n const splitResult = recordingResult.split('base64,');\n const toResolve = (splitResult.length > 1) ? splitResult[1] : recordingResult;\n resolve(toResolve.trim());\n };\n reader.readAsDataURL(blob);\n });\n }\n prepareInstanceForNextOperation() {\n if (this.mediaRecorder != null && this.mediaRecorder.state === 'recording') {\n try {\n this.mediaRecorder.stop();\n }\n catch (ignore) {\n }\n }\n this.pendingResult = neverResolvingPromise();\n this.mediaRecorder = null;\n this.chunks = [];\n }\n static async getConnectedDevices() {\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n return { devices };\n }\n catch (error) {\n // ブラウザがAPIをサポートしていない場合は空配列を返す\n return { devices: [] };\n }\n }\n}\n//# sourceMappingURL=VoiceRecorderImpl.js.map","import { WebPlugin } from '@capacitor/core';\nimport { VoiceRecorderImpl } from './VoiceRecorderImpl';\nexport class VoiceRecorderWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.voiceRecorderInstance = new VoiceRecorderImpl();\n }\n canDeviceVoiceRecord() {\n return VoiceRecorderImpl.canDeviceVoiceRecord();\n }\n hasAudioRecordingPermission() {\n return VoiceRecorderImpl.hasAudioRecordingPermission();\n }\n requestAudioRecordingPermission() {\n return VoiceRecorderImpl.requestAudioRecordingPermission();\n }\n startRecording() {\n return this.voiceRecorderInstance.startRecording();\n }\n stopRecording() {\n return this.voiceRecorderInstance.stopRecording();\n }\n pauseRecording() {\n return this.voiceRecorderInstance.pauseRecording();\n }\n resumeRecording() {\n return this.voiceRecorderInstance.resumeRecording();\n }\n getCurrentStatus() {\n return this.voiceRecorderInstance.getCurrentStatus();\n }\n getConnectedDevices() {\n return VoiceRecorderImpl.getConnectedDevices();\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -187,11 +187,11 @@ var capacitorVoiceRecorderWavStereo = (function (exports, core, getBlobDuration)
187
187
  static async getConnectedDevices() {
188
188
  try {
189
189
  const devices = await navigator.mediaDevices.enumerateDevices();
190
- return devices;
190
+ return { devices };
191
191
  }
192
192
  catch (error) {
193
193
  // ブラウザがAPIをサポートしていない場合は空配列を返す
194
- return [];
194
+ return { devices: [] };
195
195
  }
196
196
  }
197
197
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/predefined-web-responses.js","esm/VoiceRecorderImpl.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst VoiceRecorder = registerPlugin('VoiceRecorder', {\n web: () => import('./web').then(m => new m.VoiceRecorderWeb()),\n});\nexport * from './definitions';\nexport { VoiceRecorder };\n//# sourceMappingURL=index.js.map","export const successResponse = () => ({ value: true });\nexport const failureResponse = () => ({ value: false });\nexport const missingPermissionError = () => new Error('MISSING_PERMISSION');\nexport const alreadyRecordingError = () => new Error('ALREADY_RECORDING');\nexport const microphoneBeingUsedError = () => new Error('MICROPHONE_BEING_USED');\nexport const deviceCannotVoiceRecordError = () => new Error('DEVICE_CANNOT_VOICE_RECORD');\nexport const failedToRecordError = () => new Error('FAILED_TO_RECORD');\nexport const emptyRecordingError = () => new Error('EMPTY_RECORDING');\nexport const recordingHasNotStartedError = () => new Error('RECORDING_HAS_NOT_STARTED');\nexport const failedToFetchRecordingError = () => new Error('FAILED_TO_FETCH_RECORDING');\nexport const couldNotQueryPermissionStatusError = () => new Error('COULD_NOT_QUERY_PERMISSION_STATUS');\n//# sourceMappingURL=predefined-web-responses.js.map","import getBlobDuration from 'get-blob-duration';\nimport { alreadyRecordingError, couldNotQueryPermissionStatusError, deviceCannotVoiceRecordError, emptyRecordingError, failedToFetchRecordingError, failedToRecordError, failureResponse, missingPermissionError, recordingHasNotStartedError, successResponse, } from './predefined-web-responses';\n// these mime types will be checked one by one in order until one of them is found to be supported by the current browser\nconst possibleMimeTypes = ['audio/mp4', 'audio/webm;codecs=opus', 'audio/aac', 'audio/webm', 'audio/ogg;codecs=opus'];\nconst neverResolvingPromise = () => new Promise(() => undefined);\nexport class VoiceRecorderImpl {\n constructor() {\n this.mediaRecorder = null;\n this.chunks = [];\n this.pendingResult = neverResolvingPromise();\n }\n static async canDeviceVoiceRecord() {\n var _a;\n if (((_a = navigator === null || navigator === void 0 ? void 0 : navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) == null || VoiceRecorderImpl.getSupportedMimeType() == null) {\n return failureResponse();\n }\n else {\n return successResponse();\n }\n }\n async startRecording() {\n if (this.mediaRecorder != null) {\n throw alreadyRecordingError();\n }\n const deviceCanRecord = await VoiceRecorderImpl.canDeviceVoiceRecord();\n if (!deviceCanRecord.value) {\n throw deviceCannotVoiceRecordError();\n }\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => successResponse());\n if (!havingPermission.value) {\n throw missingPermissionError();\n }\n return navigator.mediaDevices.getUserMedia({ audio: true })\n .then(this.onSuccessfullyStartedRecording.bind(this))\n .catch(this.onFailedToStartRecording.bind(this));\n }\n async stopRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n try {\n this.mediaRecorder.stop();\n this.mediaRecorder.stream.getTracks().forEach(track => track.stop());\n return this.pendingResult;\n }\n catch (ignore) {\n throw failedToFetchRecordingError();\n }\n finally {\n this.prepareInstanceForNextOperation();\n }\n }\n static async hasAudioRecordingPermission() {\n return navigator.permissions.query({ name: 'microphone' })\n .then(result => ({ value: result.state === 'granted' }))\n .catch(() => {\n throw couldNotQueryPermissionStatusError();\n });\n }\n static async requestAudioRecordingPermission() {\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => failureResponse());\n if (havingPermission.value) {\n return successResponse();\n }\n return navigator.mediaDevices.getUserMedia({ audio: true })\n .then(() => successResponse())\n .catch(() => failureResponse());\n }\n pauseRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n else if (this.mediaRecorder.state === 'recording') {\n this.mediaRecorder.pause();\n return Promise.resolve(successResponse());\n }\n else {\n return Promise.resolve(failureResponse());\n }\n }\n resumeRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n else if (this.mediaRecorder.state === 'paused') {\n this.mediaRecorder.resume();\n return Promise.resolve(successResponse());\n }\n else {\n return Promise.resolve(failureResponse());\n }\n }\n getCurrentStatus() {\n if (this.mediaRecorder == null) {\n return Promise.resolve({ status: 'NONE' });\n }\n else if (this.mediaRecorder.state === 'recording') {\n return Promise.resolve({ status: 'RECORDING' });\n }\n else if (this.mediaRecorder.state === 'paused') {\n return Promise.resolve({ status: 'PAUSED' });\n }\n else {\n return Promise.resolve({ status: 'NONE' });\n }\n }\n static getSupportedMimeType() {\n if ((MediaRecorder === null || MediaRecorder === void 0 ? void 0 : MediaRecorder.isTypeSupported) == null)\n return null;\n const foundSupportedType = possibleMimeTypes.find(type => MediaRecorder.isTypeSupported(type));\n return foundSupportedType !== null && foundSupportedType !== void 0 ? foundSupportedType : null;\n }\n onSuccessfullyStartedRecording(stream) {\n this.pendingResult = new Promise((resolve, reject) => {\n this.mediaRecorder = new MediaRecorder(stream);\n this.mediaRecorder.onerror = () => {\n this.prepareInstanceForNextOperation();\n reject(failedToRecordError());\n };\n this.mediaRecorder.onstop = async () => {\n const mimeType = VoiceRecorderImpl.getSupportedMimeType();\n if (mimeType == null) {\n this.prepareInstanceForNextOperation();\n reject(failedToFetchRecordingError());\n return;\n }\n const blobVoiceRecording = new Blob(this.chunks, { 'type': mimeType });\n if (blobVoiceRecording.size <= 0) {\n this.prepareInstanceForNextOperation();\n reject(emptyRecordingError());\n return;\n }\n const recordDataBase64 = await VoiceRecorderImpl.blobToBase64(blobVoiceRecording);\n const recordingDuration = await getBlobDuration(blobVoiceRecording);\n this.prepareInstanceForNextOperation();\n resolve({ value: { recordDataBase64, mimeType, msDuration: recordingDuration * 1000 } });\n };\n this.mediaRecorder.ondataavailable = (event) => this.chunks.push(event.data);\n this.mediaRecorder.start();\n });\n return successResponse();\n }\n onFailedToStartRecording() {\n this.prepareInstanceForNextOperation();\n throw failedToRecordError();\n }\n static blobToBase64(blob) {\n return new Promise(resolve => {\n const reader = new FileReader();\n reader.onloadend = () => {\n const recordingResult = String(reader.result);\n const splitResult = recordingResult.split('base64,');\n const toResolve = (splitResult.length > 1) ? splitResult[1] : recordingResult;\n resolve(toResolve.trim());\n };\n reader.readAsDataURL(blob);\n });\n }\n prepareInstanceForNextOperation() {\n if (this.mediaRecorder != null && this.mediaRecorder.state === 'recording') {\n try {\n this.mediaRecorder.stop();\n }\n catch (ignore) {\n }\n }\n this.pendingResult = neverResolvingPromise();\n this.mediaRecorder = null;\n this.chunks = [];\n }\n static async getConnectedDevices() {\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n return devices;\n }\n catch (error) {\n // ブラウザがAPIをサポートしていない場合は空配列を返す\n return [];\n }\n }\n}\n//# sourceMappingURL=VoiceRecorderImpl.js.map","import { WebPlugin } from '@capacitor/core';\nimport { VoiceRecorderImpl } from './VoiceRecorderImpl';\nexport class VoiceRecorderWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.voiceRecorderInstance = new VoiceRecorderImpl();\n }\n canDeviceVoiceRecord() {\n return VoiceRecorderImpl.canDeviceVoiceRecord();\n }\n hasAudioRecordingPermission() {\n return VoiceRecorderImpl.hasAudioRecordingPermission();\n }\n requestAudioRecordingPermission() {\n return VoiceRecorderImpl.requestAudioRecordingPermission();\n }\n startRecording() {\n return this.voiceRecorderInstance.startRecording();\n }\n stopRecording() {\n return this.voiceRecorderInstance.stopRecording();\n }\n pauseRecording() {\n return this.voiceRecorderInstance.pauseRecording();\n }\n resumeRecording() {\n return this.voiceRecorderInstance.resumeRecording();\n }\n getCurrentStatus() {\n return this.voiceRecorderInstance.getCurrentStatus();\n }\n getConnectedDevices() {\n return VoiceRecorderImpl.getConnectedDevices();\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/predefined-web-responses.js","esm/VoiceRecorderImpl.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst VoiceRecorder = registerPlugin('VoiceRecorder', {\n web: () => import('./web').then(m => new m.VoiceRecorderWeb()),\n});\nexport * from './definitions';\nexport { VoiceRecorder };\n//# sourceMappingURL=index.js.map","export const successResponse = () => ({ value: true });\nexport const failureResponse = () => ({ value: false });\nexport const missingPermissionError = () => new Error('MISSING_PERMISSION');\nexport const alreadyRecordingError = () => new Error('ALREADY_RECORDING');\nexport const microphoneBeingUsedError = () => new Error('MICROPHONE_BEING_USED');\nexport const deviceCannotVoiceRecordError = () => new Error('DEVICE_CANNOT_VOICE_RECORD');\nexport const failedToRecordError = () => new Error('FAILED_TO_RECORD');\nexport const emptyRecordingError = () => new Error('EMPTY_RECORDING');\nexport const recordingHasNotStartedError = () => new Error('RECORDING_HAS_NOT_STARTED');\nexport const failedToFetchRecordingError = () => new Error('FAILED_TO_FETCH_RECORDING');\nexport const couldNotQueryPermissionStatusError = () => new Error('COULD_NOT_QUERY_PERMISSION_STATUS');\n//# sourceMappingURL=predefined-web-responses.js.map","import getBlobDuration from 'get-blob-duration';\nimport { alreadyRecordingError, couldNotQueryPermissionStatusError, deviceCannotVoiceRecordError, emptyRecordingError, failedToFetchRecordingError, failedToRecordError, failureResponse, missingPermissionError, recordingHasNotStartedError, successResponse, } from './predefined-web-responses';\n// these mime types will be checked one by one in order until one of them is found to be supported by the current browser\nconst possibleMimeTypes = ['audio/mp4', 'audio/webm;codecs=opus', 'audio/aac', 'audio/webm', 'audio/ogg;codecs=opus'];\nconst neverResolvingPromise = () => new Promise(() => undefined);\nexport class VoiceRecorderImpl {\n constructor() {\n this.mediaRecorder = null;\n this.chunks = [];\n this.pendingResult = neverResolvingPromise();\n }\n static async canDeviceVoiceRecord() {\n var _a;\n if (((_a = navigator === null || navigator === void 0 ? void 0 : navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) == null || VoiceRecorderImpl.getSupportedMimeType() == null) {\n return failureResponse();\n }\n else {\n return successResponse();\n }\n }\n async startRecording() {\n if (this.mediaRecorder != null) {\n throw alreadyRecordingError();\n }\n const deviceCanRecord = await VoiceRecorderImpl.canDeviceVoiceRecord();\n if (!deviceCanRecord.value) {\n throw deviceCannotVoiceRecordError();\n }\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => successResponse());\n if (!havingPermission.value) {\n throw missingPermissionError();\n }\n return navigator.mediaDevices.getUserMedia({ audio: true })\n .then(this.onSuccessfullyStartedRecording.bind(this))\n .catch(this.onFailedToStartRecording.bind(this));\n }\n async stopRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n try {\n this.mediaRecorder.stop();\n this.mediaRecorder.stream.getTracks().forEach(track => track.stop());\n return this.pendingResult;\n }\n catch (ignore) {\n throw failedToFetchRecordingError();\n }\n finally {\n this.prepareInstanceForNextOperation();\n }\n }\n static async hasAudioRecordingPermission() {\n return navigator.permissions.query({ name: 'microphone' })\n .then(result => ({ value: result.state === 'granted' }))\n .catch(() => {\n throw couldNotQueryPermissionStatusError();\n });\n }\n static async requestAudioRecordingPermission() {\n const havingPermission = await VoiceRecorderImpl.hasAudioRecordingPermission().catch(() => failureResponse());\n if (havingPermission.value) {\n return successResponse();\n }\n return navigator.mediaDevices.getUserMedia({ audio: true })\n .then(() => successResponse())\n .catch(() => failureResponse());\n }\n pauseRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n else if (this.mediaRecorder.state === 'recording') {\n this.mediaRecorder.pause();\n return Promise.resolve(successResponse());\n }\n else {\n return Promise.resolve(failureResponse());\n }\n }\n resumeRecording() {\n if (this.mediaRecorder == null) {\n throw recordingHasNotStartedError();\n }\n else if (this.mediaRecorder.state === 'paused') {\n this.mediaRecorder.resume();\n return Promise.resolve(successResponse());\n }\n else {\n return Promise.resolve(failureResponse());\n }\n }\n getCurrentStatus() {\n if (this.mediaRecorder == null) {\n return Promise.resolve({ status: 'NONE' });\n }\n else if (this.mediaRecorder.state === 'recording') {\n return Promise.resolve({ status: 'RECORDING' });\n }\n else if (this.mediaRecorder.state === 'paused') {\n return Promise.resolve({ status: 'PAUSED' });\n }\n else {\n return Promise.resolve({ status: 'NONE' });\n }\n }\n static getSupportedMimeType() {\n if ((MediaRecorder === null || MediaRecorder === void 0 ? void 0 : MediaRecorder.isTypeSupported) == null)\n return null;\n const foundSupportedType = possibleMimeTypes.find(type => MediaRecorder.isTypeSupported(type));\n return foundSupportedType !== null && foundSupportedType !== void 0 ? foundSupportedType : null;\n }\n onSuccessfullyStartedRecording(stream) {\n this.pendingResult = new Promise((resolve, reject) => {\n this.mediaRecorder = new MediaRecorder(stream);\n this.mediaRecorder.onerror = () => {\n this.prepareInstanceForNextOperation();\n reject(failedToRecordError());\n };\n this.mediaRecorder.onstop = async () => {\n const mimeType = VoiceRecorderImpl.getSupportedMimeType();\n if (mimeType == null) {\n this.prepareInstanceForNextOperation();\n reject(failedToFetchRecordingError());\n return;\n }\n const blobVoiceRecording = new Blob(this.chunks, { 'type': mimeType });\n if (blobVoiceRecording.size <= 0) {\n this.prepareInstanceForNextOperation();\n reject(emptyRecordingError());\n return;\n }\n const recordDataBase64 = await VoiceRecorderImpl.blobToBase64(blobVoiceRecording);\n const recordingDuration = await getBlobDuration(blobVoiceRecording);\n this.prepareInstanceForNextOperation();\n resolve({ value: { recordDataBase64, mimeType, msDuration: recordingDuration * 1000 } });\n };\n this.mediaRecorder.ondataavailable = (event) => this.chunks.push(event.data);\n this.mediaRecorder.start();\n });\n return successResponse();\n }\n onFailedToStartRecording() {\n this.prepareInstanceForNextOperation();\n throw failedToRecordError();\n }\n static blobToBase64(blob) {\n return new Promise(resolve => {\n const reader = new FileReader();\n reader.onloadend = () => {\n const recordingResult = String(reader.result);\n const splitResult = recordingResult.split('base64,');\n const toResolve = (splitResult.length > 1) ? splitResult[1] : recordingResult;\n resolve(toResolve.trim());\n };\n reader.readAsDataURL(blob);\n });\n }\n prepareInstanceForNextOperation() {\n if (this.mediaRecorder != null && this.mediaRecorder.state === 'recording') {\n try {\n this.mediaRecorder.stop();\n }\n catch (ignore) {\n }\n }\n this.pendingResult = neverResolvingPromise();\n this.mediaRecorder = null;\n this.chunks = [];\n }\n static async getConnectedDevices() {\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n return { devices };\n }\n catch (error) {\n // ブラウザがAPIをサポートしていない場合は空配列を返す\n return { devices: [] };\n }\n }\n}\n//# sourceMappingURL=VoiceRecorderImpl.js.map","import { WebPlugin } from '@capacitor/core';\nimport { VoiceRecorderImpl } from './VoiceRecorderImpl';\nexport class VoiceRecorderWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.voiceRecorderInstance = new VoiceRecorderImpl();\n }\n canDeviceVoiceRecord() {\n return VoiceRecorderImpl.canDeviceVoiceRecord();\n }\n hasAudioRecordingPermission() {\n return VoiceRecorderImpl.hasAudioRecordingPermission();\n }\n requestAudioRecordingPermission() {\n return VoiceRecorderImpl.requestAudioRecordingPermission();\n }\n startRecording() {\n return this.voiceRecorderInstance.startRecording();\n }\n stopRecording() {\n return this.voiceRecorderInstance.stopRecording();\n }\n pauseRecording() {\n return this.voiceRecorderInstance.pauseRecording();\n }\n resumeRecording() {\n return this.voiceRecorderInstance.resumeRecording();\n }\n getCurrentStatus() {\n return this.voiceRecorderInstance.getCurrentStatus();\n }\n getConnectedDevices() {\n return VoiceRecorderImpl.getConnectedDevices();\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
@@ -12,4 +12,5 @@ CAP_PLUGIN(VoiceRecorder, "VoiceRecorder",
12
12
  CAP_PLUGIN_METHOD(pauseRecording, CAPPluginReturnPromise);
13
13
  CAP_PLUGIN_METHOD(resumeRecording, CAPPluginReturnPromise);
14
14
  CAP_PLUGIN_METHOD(getCurrentStatus, CAPPluginReturnPromise);
15
+ CAP_PLUGIN_METHOD(getConnectedDevices, CAPPluginReturnPromise);
15
16
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "capacitor-voice-recorder-wav-stereo",
3
- "version": "7.0.3",
3
+ "version": "7.0.5",
4
4
  "description": "Capacitor plugin for voice recording in wav format",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",