From 43c7f6baa5d31181716a17a14d5fe7911dba0736 Mon Sep 17 00:00:00 2001
From: Lucas <31957045+SketchingDev@users.noreply.github.com>
Date: Fri, 10 Mar 2023 16:49:54 +0000
Subject: [PATCH 01/21] Remove old project
---
.eslintrc.json | 24 -
.github/workflows/codeql-analysis.yml | 68 -
.github/workflows/on-main.yml | 72 -
.github/workflows/on-push.yml | 32 -
.gitignore | 34 -
LICENSE | 21 -
README.md | 135 -
doc/assets/architecture.jpg | Bin 190951 -> 0 bytes
doc/assets/demo.gif | Bin 225455 -> 0 bytes
doc/assets/flow.jpg | Bin 295973 -> 0 bytes
docs/.nojekyll | 0
docs/CNAME | 1 -
docs/README.md | 204 -
docs/_images/demo.gif | Bin 225455 -> 0 bytes
docs/index.html | 26 -
docs/programmable-interface.md | 0
.../creating-a-transcriber-integration.md | 3 -
.../supported/google-speech-to-text.md | 101 -
docs/transcribers/transcriber-accuracy.md | 239 -
examples/cli/.gitignore | 3 -
examples/cli/config.json | 23 -
examples/cli/package.json | 14 -
examples/cli/recordings/.gitkeep | 0
examples/cli/scenarios/keys-read-back.json | 39 -
examples/ivr-tester-api/.eslintrc.json | 3 -
examples/ivr-tester-api/.gitignore | 3 -
examples/ivr-tester-api/package.json | 32 -
examples/ivr-tester-api/recordings/.gitkeep | 0
.../amazon-transcribe.ts | 79 -
.../google-speech-to-text.ts | 156 -
examples/ivr-tester-api/src/timeout.ts | 63 -
examples/ivr-tester-api/tsconfig.json | 13 -
lerna.json | 11 -
package.json | 32 -
packages/cli/.eslintrc.json | 3 -
packages/cli/.gitignore | 1 -
packages/cli/README.md | 1 -
.../configFileValidated.spec.ts | 186 -
.../integratedWithIvrTesterApi.spec.ts | 184 -
.../scenarioFileValidated.spec.ts | 140 -
packages/cli/package.json | 66 -
packages/cli/src/cli.ts | 91 -
packages/cli/src/createProgram.ts | 44 -
packages/cli/src/fileSystem/jsonFileReader.ts | 29 -
.../src/fileSystem/readableFileValidator.ts | 15 -
packages/cli/src/index.ts | 12 -
.../cli/src/options/config/json/JsonConfig.ts | 31 -
.../config/json/validateJsonConfig.spec.ts | 53 -
.../options/config/json/validateJsonConfig.ts | 42 -
.../src/options/config/loadConfigOption.ts | 98 -
.../src/options/scenario/json/jsonScenario.ts | 31 -
.../scenario/json/scenarioConverter.spec.ts | 222 -
.../scenario/json/scenarioConverter.ts | 78 -
.../options/scenario/json/then/doNothing.ts | 18 -
.../src/options/scenario/json/then/hangUp.ts | 18 -
.../src/options/scenario/json/then/press.ts | 20 -
.../json/validateJsonScenario.spec.ts | 52 -
.../scenario/json/validateJsonScenario.ts | 52 -
.../scenario/json/whenPrompt/and.spec.ts | 34 -
.../options/scenario/json/whenPrompt/and.ts | 37 -
.../scenario/json/whenPrompt/contains.ts | 20 -
.../json/whenPrompt/containsSimilarTo.ts | 22 -
.../scenario/json/whenPrompt/isAnything.ts | 18 -
.../scenario/json/whenPrompt/or.spec.ts | 34 -
.../options/scenario/json/whenPrompt/or.ts | 37 -
.../scenario/json/whenPrompt/similarTo.ts | 20 -
.../options/scenario/loadScenarioOption.ts | 19 -
packages/cli/tsconfig.build.json | 11 -
packages/cli/tsconfig.json | 16 -
packages/ivr-tester/.eslintrc.json | 3 -
packages/ivr-tester/.gitignore | 5 -
packages/ivr-tester/doc/README.md | 299 -
packages/ivr-tester/doc/classes/ivrtester.md | 93 -
.../ivr-tester/doc/classes/pluginmanager.md | 216 -
.../stoptestrunnerwhentestscomplete.md | 135 -
.../ivr-tester/doc/classes/typedemitter.md | 126 -
.../ivr-tester/doc/interfaces/cannotrun.md | 26 -
packages/ivr-tester/doc/interfaces/canrun.md | 17 -
packages/ivr-tester/doc/interfaces/config.md | 117 -
packages/ivr-tester/doc/interfaces/emitter.md | 96 -
.../ivr-tester/doc/interfaces/ivrnumber.md | 30 -
.../doc/interfaces/ivrtesterplugin.md | 59 -
.../doc/interfaces/runnabletester.md | 30 -
.../ivr-tester/doc/interfaces/scenario.md | 26 -
packages/ivr-tester/doc/interfaces/step.md | 54 -
.../ivr-tester/doc/interfaces/testrunner.md | 27 -
.../doc/interfaces/testrunnermanager.md | 40 -
.../ivr-tester/doc/interfaces/testsession.md | 35 -
packages/ivr-tester/doc/interfaces/then.md | 45 -
.../doc/interfaces/transcriberfactory.md | 50 -
.../doc/interfaces/transcriberplugin.md | 131 -
.../doc/interfaces/transcriptevent.md | 28 -
packages/ivr-tester/generate-dtmf-tones.sh | 36 -
.../data/30s-silence-then-40s-silence.wav | 1 -
packages/ivr-tester/package.json | 75 -
packages/ivr-tester/src/Debugger.ts | 17 -
packages/ivr-tester/src/Emitter.ts | 38 -
.../src/call/AudioPlaybackCaller.ts | 80 -
packages/ivr-tester/src/call/Call.ts | 32 -
packages/ivr-tester/src/call/Caller.ts | 18 -
packages/ivr-tester/src/call/TwilioCall.ts | 135 -
packages/ivr-tester/src/call/TwilioCaller.ts | 62 -
.../src/call/dtmf/DtmfBufferGenerator.ts | 9 -
.../src/call/dtmf/UlawDtmfBufferGenerator.ts | 61 -
.../src/call/dtmf/dtmfSequenceUtils.spec.ts | 53 -
.../src/call/dtmf/dtmfSequenceUtils.ts | 67 -
packages/ivr-tester/src/call/dtmf/raw/0.raw | 65 -
packages/ivr-tester/src/call/dtmf/raw/1.raw | 65 -
packages/ivr-tester/src/call/dtmf/raw/2.raw | 57 -
packages/ivr-tester/src/call/dtmf/raw/3.raw | 61 -
packages/ivr-tester/src/call/dtmf/raw/4.raw | 57 -
packages/ivr-tester/src/call/dtmf/raw/5.raw | 57 -
packages/ivr-tester/src/call/dtmf/raw/6.raw | 57 -
packages/ivr-tester/src/call/dtmf/raw/7.raw | 65 -
packages/ivr-tester/src/call/dtmf/raw/8.raw | 59 -
packages/ivr-tester/src/call/dtmf/raw/9.raw | 56 -
.../ivr-tester/src/call/dtmf/raw/asterisk.raw | 63 -
.../ivr-tester/src/call/dtmf/raw/hash.raw | 55 -
packages/ivr-tester/src/call/dtmf/raw/w.raw | 1 -
.../src/call/recording/MediaStreamRecorder.ts | 130 -
.../src/call/recording/TranscriptRecorder.ts | 186 -
.../recording/filename/FilenameFactory.ts | 16 -
.../ivrNumberAndTestNameFilename.spec.ts | 7 -
.../filename/ivrNumberAndTestNameFilename.ts | 21 -
.../src/call/transcription/CallTranscriber.ts | 56 -
.../PromptTranscriptionBuilder.ts | 49 -
.../plugin/TranscriberFactory.ts | 29 -
.../transcription/plugin/TranscriberPlugin.ts | 19 -
packages/ivr-tester/src/call/twilio.ts | 20 -
.../ivr-tester/src/configuration/Config.ts | 71 -
.../src/configuration/ConfigurationError.ts | 16 -
.../src/configuration/call/IvrNumber.ts | 11 -
.../configuration/call/validateTestSubject.ts | 23 -
.../src/configuration/scenario/Scenario.ts | 6 -
.../src/configuration/scenario/Step.ts | 27 -
.../scenario/validateAndEnrichScenario.ts | 30 -
.../src/configuration/validateConfig.ts | 54 -
packages/ivr-tester/src/index.ts | 19 -
.../ivr-tester/src/plugins/IvrTesterPlugin.ts | 11 -
.../ivr-tester/src/plugins/PluginManager.ts | 81 -
packages/ivr-tester/src/testRunner.spec.ts | 220 -
packages/ivr-tester/src/testRunner.ts | 203 -
.../src/testing/IteratingTestAssigner.ts | 42 -
.../StopTestRunnerWhenTestsComplete.spec.ts | 102 -
.../StopTestRunnerWhenTestsComplete.ts | 47 -
.../ivr-tester/src/testing/TestExecutor.ts | 34 -
.../src/testing/TwilioCallServer.spec.ts | 116 -
.../src/testing/TwilioCallServer.ts | 129 -
.../src/testing/callConnectedTimeout.ts | 25 -
.../src/testing/test/CallFlowInstructions.ts | 37 -
.../src/testing/test/PostSilencePrompt.ts | 96 -
.../src/testing/test/conditions/then/Then.ts | 19 -
.../testing/test/conditions/then/doNothing.ts | 8 -
.../testing/test/conditions/then/hangUp.ts | 7 -
.../src/testing/test/conditions/then/index.ts | 4 -
.../src/testing/test/conditions/then/press.ts | 25 -
.../src/testing/test/conditions/when/When.ts | 1 -
.../testing/test/conditions/when/and.spec.ts | 12 -
.../src/testing/test/conditions/when/and.ts | 4 -
.../test/conditions/when/contains.spec.ts | 8 -
.../testing/test/conditions/when/contains.ts | 26 -
.../conditions/when/containsSimilarTo.spec.ts | 8 -
.../test/conditions/when/containsSimilarTo.ts | 24 -
.../test/conditions/when/hasPart.spec.ts | 29 -
.../testing/test/conditions/when/hasPart.ts | 33 -
.../src/testing/test/conditions/when/index.ts | 9 -
.../test/conditions/when/isAnything.ts | 6 -
.../test/conditions/when/matches.spec.ts | 12 -
.../testing/test/conditions/when/matches.ts | 4 -
.../src/testing/test/conditions/when/or.ts | 4 -
.../testing/test/conditions/when/provided.ts | 6 -
.../test/conditions/when/similarTo.spec.ts | 21 -
.../testing/test/conditions/when/similarTo.ts | 16 -
.../src/testing/test/inOrder.spec.ts | 294 -
.../ivr-tester/src/testing/test/inOrder.ts | 144 -
.../src/testing/ui/consoleUserInterface.ts | 145 -
packages/ivr-tester/tools/README.md | 12 -
packages/ivr-tester/tools/audio-server.ts | 51 -
packages/ivr-tester/tsconfig.build.json | 8 -
packages/ivr-tester/tsconfig.json | 16 -
packages/ivr-tester/typedoc.json | 9 -
.../.eslintrc.json | 3 -
.../transcriber-amazon-transcribe/.gitignore | 1 -
.../transcriber-amazon-transcribe/README.md | 68 -
.../__tests__/test-data/mulaw-01.wav | 1 -
.../__tests__/transcribe-mulaw-audio.spec.ts | 62 -
.../doc/README.md | 42 -
.../doc/interfaces/amazontranscribeoptions.md | 33 -
.../package.json | 64 -
.../src/AmazonTranscribe.ts | 109 -
.../src/Debugger.ts | 13 -
.../src/index.ts | 46 -
.../tsconfig.json | 14 -
.../typedoc.json | 8 -
.../.eslintrc.json | 3 -
.../.gitignore | 1 -
.../README.md | 80 -
.../__tests__/test-data/mulaw-01.wav | 1 -
.../__tests__/transcribe-mulaw-audio.spec.ts | 61 -
.../doc/README.md | 43 -
.../interfaces/googlespeechtotextoptions.md | 50 -
.../package.json | 65 -
.../src/Debugger.ts | 13 -
.../src/GoogleSpeechToText.ts | 104 -
.../src/Transcript.ts | 5 -
.../src/index.ts | 65 -
.../tsconfig.json | 14 -
.../typedoc.json | 8 -
tsconfig.json | 13 -
typedoc.json | 11 -
yarn.lock | 8848 -----------------
211 files changed, 19023 deletions(-)
delete mode 100644 .eslintrc.json
delete mode 100644 .github/workflows/codeql-analysis.yml
delete mode 100644 .github/workflows/on-main.yml
delete mode 100644 .github/workflows/on-push.yml
delete mode 100644 .gitignore
delete mode 100644 LICENSE
delete mode 100644 README.md
delete mode 100644 doc/assets/architecture.jpg
delete mode 100644 doc/assets/demo.gif
delete mode 100644 doc/assets/flow.jpg
delete mode 100644 docs/.nojekyll
delete mode 100644 docs/CNAME
delete mode 100644 docs/README.md
delete mode 100644 docs/_images/demo.gif
delete mode 100644 docs/index.html
delete mode 100644 docs/programmable-interface.md
delete mode 100644 docs/transcribers/creating-a-transcriber-integration.md
delete mode 100644 docs/transcribers/supported/google-speech-to-text.md
delete mode 100644 docs/transcribers/transcriber-accuracy.md
delete mode 100644 examples/cli/.gitignore
delete mode 100644 examples/cli/config.json
delete mode 100644 examples/cli/package.json
delete mode 100644 examples/cli/recordings/.gitkeep
delete mode 100644 examples/cli/scenarios/keys-read-back.json
delete mode 100644 examples/ivr-tester-api/.eslintrc.json
delete mode 100644 examples/ivr-tester-api/.gitignore
delete mode 100644 examples/ivr-tester-api/package.json
delete mode 100644 examples/ivr-tester-api/recordings/.gitkeep
delete mode 100644 examples/ivr-tester-api/src/different-transcribers/amazon-transcribe.ts
delete mode 100644 examples/ivr-tester-api/src/different-transcribers/google-speech-to-text.ts
delete mode 100644 examples/ivr-tester-api/src/timeout.ts
delete mode 100644 examples/ivr-tester-api/tsconfig.json
delete mode 100644 lerna.json
delete mode 100644 package.json
delete mode 100644 packages/cli/.eslintrc.json
delete mode 100644 packages/cli/.gitignore
delete mode 100644 packages/cli/README.md
delete mode 100644 packages/cli/integration-tests/configFileValidated.spec.ts
delete mode 100644 packages/cli/integration-tests/integratedWithIvrTesterApi.spec.ts
delete mode 100644 packages/cli/integration-tests/scenarioFileValidated.spec.ts
delete mode 100644 packages/cli/package.json
delete mode 100644 packages/cli/src/cli.ts
delete mode 100644 packages/cli/src/createProgram.ts
delete mode 100644 packages/cli/src/fileSystem/jsonFileReader.ts
delete mode 100644 packages/cli/src/fileSystem/readableFileValidator.ts
delete mode 100644 packages/cli/src/index.ts
delete mode 100644 packages/cli/src/options/config/json/JsonConfig.ts
delete mode 100644 packages/cli/src/options/config/json/validateJsonConfig.spec.ts
delete mode 100644 packages/cli/src/options/config/json/validateJsonConfig.ts
delete mode 100644 packages/cli/src/options/config/loadConfigOption.ts
delete mode 100644 packages/cli/src/options/scenario/json/jsonScenario.ts
delete mode 100644 packages/cli/src/options/scenario/json/scenarioConverter.spec.ts
delete mode 100644 packages/cli/src/options/scenario/json/scenarioConverter.ts
delete mode 100644 packages/cli/src/options/scenario/json/then/doNothing.ts
delete mode 100644 packages/cli/src/options/scenario/json/then/hangUp.ts
delete mode 100644 packages/cli/src/options/scenario/json/then/press.ts
delete mode 100644 packages/cli/src/options/scenario/json/validateJsonScenario.spec.ts
delete mode 100644 packages/cli/src/options/scenario/json/validateJsonScenario.ts
delete mode 100644 packages/cli/src/options/scenario/json/whenPrompt/and.spec.ts
delete mode 100644 packages/cli/src/options/scenario/json/whenPrompt/and.ts
delete mode 100644 packages/cli/src/options/scenario/json/whenPrompt/contains.ts
delete mode 100644 packages/cli/src/options/scenario/json/whenPrompt/containsSimilarTo.ts
delete mode 100644 packages/cli/src/options/scenario/json/whenPrompt/isAnything.ts
delete mode 100644 packages/cli/src/options/scenario/json/whenPrompt/or.spec.ts
delete mode 100644 packages/cli/src/options/scenario/json/whenPrompt/or.ts
delete mode 100644 packages/cli/src/options/scenario/json/whenPrompt/similarTo.ts
delete mode 100644 packages/cli/src/options/scenario/loadScenarioOption.ts
delete mode 100644 packages/cli/tsconfig.build.json
delete mode 100644 packages/cli/tsconfig.json
delete mode 100644 packages/ivr-tester/.eslintrc.json
delete mode 100644 packages/ivr-tester/.gitignore
delete mode 100644 packages/ivr-tester/doc/README.md
delete mode 100644 packages/ivr-tester/doc/classes/ivrtester.md
delete mode 100644 packages/ivr-tester/doc/classes/pluginmanager.md
delete mode 100644 packages/ivr-tester/doc/classes/stoptestrunnerwhentestscomplete.md
delete mode 100644 packages/ivr-tester/doc/classes/typedemitter.md
delete mode 100644 packages/ivr-tester/doc/interfaces/cannotrun.md
delete mode 100644 packages/ivr-tester/doc/interfaces/canrun.md
delete mode 100644 packages/ivr-tester/doc/interfaces/config.md
delete mode 100644 packages/ivr-tester/doc/interfaces/emitter.md
delete mode 100644 packages/ivr-tester/doc/interfaces/ivrnumber.md
delete mode 100644 packages/ivr-tester/doc/interfaces/ivrtesterplugin.md
delete mode 100644 packages/ivr-tester/doc/interfaces/runnabletester.md
delete mode 100644 packages/ivr-tester/doc/interfaces/scenario.md
delete mode 100644 packages/ivr-tester/doc/interfaces/step.md
delete mode 100644 packages/ivr-tester/doc/interfaces/testrunner.md
delete mode 100644 packages/ivr-tester/doc/interfaces/testrunnermanager.md
delete mode 100644 packages/ivr-tester/doc/interfaces/testsession.md
delete mode 100644 packages/ivr-tester/doc/interfaces/then.md
delete mode 100644 packages/ivr-tester/doc/interfaces/transcriberfactory.md
delete mode 100644 packages/ivr-tester/doc/interfaces/transcriberplugin.md
delete mode 100644 packages/ivr-tester/doc/interfaces/transcriptevent.md
delete mode 100644 packages/ivr-tester/generate-dtmf-tones.sh
delete mode 100644 packages/ivr-tester/integration-tests/data/30s-silence-then-40s-silence.wav
delete mode 100644 packages/ivr-tester/package.json
delete mode 100644 packages/ivr-tester/src/Debugger.ts
delete mode 100644 packages/ivr-tester/src/Emitter.ts
delete mode 100644 packages/ivr-tester/src/call/AudioPlaybackCaller.ts
delete mode 100644 packages/ivr-tester/src/call/Call.ts
delete mode 100644 packages/ivr-tester/src/call/Caller.ts
delete mode 100644 packages/ivr-tester/src/call/TwilioCall.ts
delete mode 100644 packages/ivr-tester/src/call/TwilioCaller.ts
delete mode 100644 packages/ivr-tester/src/call/dtmf/DtmfBufferGenerator.ts
delete mode 100644 packages/ivr-tester/src/call/dtmf/UlawDtmfBufferGenerator.ts
delete mode 100644 packages/ivr-tester/src/call/dtmf/dtmfSequenceUtils.spec.ts
delete mode 100644 packages/ivr-tester/src/call/dtmf/dtmfSequenceUtils.ts
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/0.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/1.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/2.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/3.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/4.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/5.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/6.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/7.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/8.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/9.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/asterisk.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/hash.raw
delete mode 100644 packages/ivr-tester/src/call/dtmf/raw/w.raw
delete mode 100644 packages/ivr-tester/src/call/recording/MediaStreamRecorder.ts
delete mode 100644 packages/ivr-tester/src/call/recording/TranscriptRecorder.ts
delete mode 100644 packages/ivr-tester/src/call/recording/filename/FilenameFactory.ts
delete mode 100644 packages/ivr-tester/src/call/recording/filename/ivrNumberAndTestNameFilename.spec.ts
delete mode 100644 packages/ivr-tester/src/call/recording/filename/ivrNumberAndTestNameFilename.ts
delete mode 100644 packages/ivr-tester/src/call/transcription/CallTranscriber.ts
delete mode 100644 packages/ivr-tester/src/call/transcription/PromptTranscriptionBuilder.ts
delete mode 100644 packages/ivr-tester/src/call/transcription/plugin/TranscriberFactory.ts
delete mode 100644 packages/ivr-tester/src/call/transcription/plugin/TranscriberPlugin.ts
delete mode 100644 packages/ivr-tester/src/call/twilio.ts
delete mode 100644 packages/ivr-tester/src/configuration/Config.ts
delete mode 100644 packages/ivr-tester/src/configuration/ConfigurationError.ts
delete mode 100644 packages/ivr-tester/src/configuration/call/IvrNumber.ts
delete mode 100644 packages/ivr-tester/src/configuration/call/validateTestSubject.ts
delete mode 100644 packages/ivr-tester/src/configuration/scenario/Scenario.ts
delete mode 100644 packages/ivr-tester/src/configuration/scenario/Step.ts
delete mode 100644 packages/ivr-tester/src/configuration/scenario/validateAndEnrichScenario.ts
delete mode 100644 packages/ivr-tester/src/configuration/validateConfig.ts
delete mode 100644 packages/ivr-tester/src/index.ts
delete mode 100644 packages/ivr-tester/src/plugins/IvrTesterPlugin.ts
delete mode 100644 packages/ivr-tester/src/plugins/PluginManager.ts
delete mode 100644 packages/ivr-tester/src/testRunner.spec.ts
delete mode 100644 packages/ivr-tester/src/testRunner.ts
delete mode 100644 packages/ivr-tester/src/testing/IteratingTestAssigner.ts
delete mode 100644 packages/ivr-tester/src/testing/StopTestRunnerWhenTestsComplete.spec.ts
delete mode 100644 packages/ivr-tester/src/testing/StopTestRunnerWhenTestsComplete.ts
delete mode 100644 packages/ivr-tester/src/testing/TestExecutor.ts
delete mode 100644 packages/ivr-tester/src/testing/TwilioCallServer.spec.ts
delete mode 100644 packages/ivr-tester/src/testing/TwilioCallServer.ts
delete mode 100644 packages/ivr-tester/src/testing/callConnectedTimeout.ts
delete mode 100644 packages/ivr-tester/src/testing/test/CallFlowInstructions.ts
delete mode 100644 packages/ivr-tester/src/testing/test/PostSilencePrompt.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/then/Then.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/then/doNothing.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/then/hangUp.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/then/index.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/then/press.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/When.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/and.spec.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/and.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/contains.spec.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/contains.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/containsSimilarTo.spec.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/containsSimilarTo.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/hasPart.spec.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/hasPart.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/index.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/isAnything.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/matches.spec.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/matches.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/or.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/provided.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/similarTo.spec.ts
delete mode 100644 packages/ivr-tester/src/testing/test/conditions/when/similarTo.ts
delete mode 100644 packages/ivr-tester/src/testing/test/inOrder.spec.ts
delete mode 100644 packages/ivr-tester/src/testing/test/inOrder.ts
delete mode 100644 packages/ivr-tester/src/testing/ui/consoleUserInterface.ts
delete mode 100644 packages/ivr-tester/tools/README.md
delete mode 100644 packages/ivr-tester/tools/audio-server.ts
delete mode 100644 packages/ivr-tester/tsconfig.build.json
delete mode 100644 packages/ivr-tester/tsconfig.json
delete mode 100644 packages/ivr-tester/typedoc.json
delete mode 100644 packages/transcriber-amazon-transcribe/.eslintrc.json
delete mode 100644 packages/transcriber-amazon-transcribe/.gitignore
delete mode 100644 packages/transcriber-amazon-transcribe/README.md
delete mode 100644 packages/transcriber-amazon-transcribe/__tests__/test-data/mulaw-01.wav
delete mode 100644 packages/transcriber-amazon-transcribe/__tests__/transcribe-mulaw-audio.spec.ts
delete mode 100644 packages/transcriber-amazon-transcribe/doc/README.md
delete mode 100644 packages/transcriber-amazon-transcribe/doc/interfaces/amazontranscribeoptions.md
delete mode 100644 packages/transcriber-amazon-transcribe/package.json
delete mode 100644 packages/transcriber-amazon-transcribe/src/AmazonTranscribe.ts
delete mode 100644 packages/transcriber-amazon-transcribe/src/Debugger.ts
delete mode 100644 packages/transcriber-amazon-transcribe/src/index.ts
delete mode 100644 packages/transcriber-amazon-transcribe/tsconfig.json
delete mode 100644 packages/transcriber-amazon-transcribe/typedoc.json
delete mode 100644 packages/transcriber-google-speech-to-text/.eslintrc.json
delete mode 100644 packages/transcriber-google-speech-to-text/.gitignore
delete mode 100644 packages/transcriber-google-speech-to-text/README.md
delete mode 100644 packages/transcriber-google-speech-to-text/__tests__/test-data/mulaw-01.wav
delete mode 100644 packages/transcriber-google-speech-to-text/__tests__/transcribe-mulaw-audio.spec.ts
delete mode 100644 packages/transcriber-google-speech-to-text/doc/README.md
delete mode 100644 packages/transcriber-google-speech-to-text/doc/interfaces/googlespeechtotextoptions.md
delete mode 100644 packages/transcriber-google-speech-to-text/package.json
delete mode 100644 packages/transcriber-google-speech-to-text/src/Debugger.ts
delete mode 100644 packages/transcriber-google-speech-to-text/src/GoogleSpeechToText.ts
delete mode 100644 packages/transcriber-google-speech-to-text/src/Transcript.ts
delete mode 100644 packages/transcriber-google-speech-to-text/src/index.ts
delete mode 100644 packages/transcriber-google-speech-to-text/tsconfig.json
delete mode 100644 packages/transcriber-google-speech-to-text/typedoc.json
delete mode 100644 tsconfig.json
delete mode 100644 typedoc.json
delete mode 100644 yarn.lock
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 4dc68f2c..00000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "env": {
- "es2021": true,
- "node": true,
- "jest/globals": true
- },
- "extends": [
- "plugin:@typescript-eslint/recommended",
- "prettier"
- ],
- "parser": "@typescript-eslint/parser",
- "parserOptions": {
- "ecmaVersion": 2020,
- "sourceType": "module"
- },
- "plugins": [
- "@typescript-eslint",
- "jest",
- "eslint-plugin-tsdoc"
- ],
- "rules": {
- "tsdoc/syntax": "warn"
- }
-}
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
deleted file mode 100644
index 2b5a204a..00000000
--- a/.github/workflows/codeql-analysis.yml
+++ /dev/null
@@ -1,68 +0,0 @@
-# For most projects, this workflow file will not need changing; you simply need
-# to commit it to your repository.
-#
-# You may wish to alter this file to override the set of languages analyzed,
-# or to provide custom queries or build logic.
-#
-# ******** NOTE ********
-# We have attempted to detect the languages in your repository. Please check
-# the `language` matrix defined below to confirm you have the correct set of
-# supported CodeQL languages.
-# ******** NOTE ********
-
-name: "CodeQL"
-
-on:
- push:
- branches: [ main ]
- pull_request:
- # The branches below must be a subset of the branches above
- branches: [ main ]
- schedule:
- - cron: '44 12 * * 6'
-
-jobs:
- analyze:
- name: Analyze
- runs-on: ubuntu-latest
-
- strategy:
- fail-fast: false
- matrix:
- language: [ 'javascript' ]
- # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
- # Learn more:
- # https://docs.github.com/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- # Initializes the CodeQL tools for scanning.
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v1
- with:
- languages: ${{ matrix.language }}
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
-
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v1
-
- # âšī¸ Command-line programs to run using the OS shell.
- # đ https://git.io/JvXDl
-
- # âī¸ If the Autobuild fails above, remove it and uncomment the following three lines
- # and modify them (or add more) to build your code if your project
- # uses a compiled language
-
- #- run: |
- # make bootstrap
- # make release
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
diff --git a/.github/workflows/on-main.yml b/.github/workflows/on-main.yml
deleted file mode 100644
index c7cd3b35..00000000
--- a/.github/workflows/on-main.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-name: Release From Main
-
-on:
- push:
- branches:
- - main
-
-jobs:
- lint:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Setup Node
- uses: actions/setup-node@v1
- with:
- node-version: 12.x
- - run: yarn
- - run: yarn lint
- env:
- CI: true
-
- build-and-test:
- runs-on: ubuntu-latest
- timeout-minutes: 30
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-node@v1
- with:
- node-version: 12
- - run: yarn --frozen-lockfile
- - run: yarn build
- - run: yarn test
- - run: yarn test:integration
-
- update-documentation:
- needs: build-and-test
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Setup Node
- uses: actions/setup-node@v1
- with:
- node-version: 12.x
- - run: yarn
- - run: yarn build
- - name: Generate documentation
- run: yarn doc
- - name: Commit updated documentation
- uses: EndBug/add-and-commit@v5
- with:
- message: "Update documentation"
- add: "**/doc/*"
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- publish-npm:
- needs: update-documentation
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-node@v1
- with:
- node-version: '12'
- registry-url: 'https://registry.npmjs.org'
- - run: yarn --frozen-lockfile
- - run: yarn readme:copy
- - run: yarn build
- # Flag --no-verify-access is necessary to skip user and access validation due to third-party registry
- # Alternatively set command.publish.registry in root lerna.json
- - run: yarn lerna publish from-package --yes --no-verify-access
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/on-push.yml b/.github/workflows/on-push.yml
deleted file mode 100644
index 6bfbfea5..00000000
--- a/.github/workflows/on-push.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: On Push
-
-on: [push]
-
-jobs:
- lint:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Setup Node
- uses: actions/setup-node@v1
- with:
- node-version: 12.x
- - run: yarn
- - run: yarn lint
- env:
- CI: true
-
- build-and-test:
- runs-on: ubuntu-latest
- timeout-minutes: 30
- steps:
- - uses: actions/checkout@v2
- - name: Setup Node
- uses: actions/setup-node@v1
- with:
- node-version: 12.x
- - run: yarn
- - run: yarn build
- - run: yarn doc
- - run: yarn test
- - run: yarn test:integration
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index da2d2657..00000000
--- a/.gitignore
+++ /dev/null
@@ -1,34 +0,0 @@
-node_modules/
-
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-lerna-debug.log*
-
-# Diagnostic reports (https://nodejs.org/api/report.html)
-report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Optional npm cache directory
-.npm
-
-# Optional eslint cache
-.eslintcache
-
-# Yarn Integrity file
-.yarn-integrity
-
-# yarn v2
-.yarn/cache
-.yarn/unplugged
-.yarn/build-state.yml
-.yarn/install-state.gz
-.pnp.*
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 01e3df81..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2020 SketchingDev (sketchingdev.co.uk)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/README.md b/README.md
deleted file mode 100644
index 48f1358d..00000000
--- a/README.md
+++ /dev/null
@@ -1,135 +0,0 @@
-# IVR Tester
-
-[](https://www.npmjs.com/package/ivr-tester)
-[](https://lgtm.com/projects/g/SketchingDev/ivr-tester/context:javascript)
-
-[](https://app.fossa.com/projects/git%2Bgithub.com%2FSketchingDev%2Fivr-tester?ref=badge_shield)
-
-
- Automate the testing of your IVR call flows!
-
-
-IVR Tester automates the testing of IVR flows by calling them, interpreting prompts and replying with DTMF tones based
-on fluent test definitions.
-
-
-
-
-
-Features:
-* Fully automates testing call flows
-* Test multiple scenarios in parallel
-* Expressive test definitions help document call flow
-* Record audio of tests
-* Record transcriptions of tests
-* Supports Google Speech-to-Text and AWS Transcript for transcribing calls
-* Open-source
-
-```typescript
-const config = { transcriber: googleSpeechToText({ languageCode: "en-GB" }) };
-
-new IvrTester(config).run(
- { from: "0123 456 789", to: "0123 123 123" },
- {
- name: "Customer is provided a menu after their account number confirmed",
- steps: [
- {
- whenPrompt: similarTo("Please enter your account number"),
- then: press("184748"),
- silenceAfterPrompt: 3000,
- timeout: 6000,
- },
- {
- whenPrompt: similarTo(
- "press 1 for booking a repair or 2 for changing your address"
- ),
- then: hangUp(),
- silenceAfterPrompt: 3000,
- timeout: 6000,
- },
- ],
- }
-);
-```
-
-## Quick Start
-
-1. [Create a Twilio account](https://www.twilio.com/referral/9E7LvU) (referral link for $10 free if you upgrade), load it with money and rent a phone number
- 1. Store an [authentication token](https://support.twilio.com/hc/en-us/articles/223136027-Auth-Tokens-and-How-to-Change-Them) in environment variables:
- ```shell
- export TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- export TWILIO_AUTH_TOKEN=your_auth_token
- ```
-1. Configure your environment for either [Google](packages/transcriber-google-speech-to-text) or [Amazon's](packages/transcriber-amazon-transcribe) transcription service
-1. Install and start ngrok
- ```shell
- npm install ngrok -g
- ngrok http 8080
- ```
-1. Run the tests
- ```shell
- # Local port that IVR Tester will listen on
- export LOCAL_SERVER_PORT=8080
- # URL that ngrok exposes to the outside world
- export PUBLIC_SERVER_URL=$(curl -s localhost:4040/api/tunnels | jq -r .tunnels[0].public_url)
-
- node test.js
- ```
-
-## How it works
-
-
-
-
-
-Under the hood this orchestrates:
- 1. Establishing a bi-directional audio stream of the call to the IVR flow - using [Twilio](https://www.twilio.com/)
- 1. Transcribing the voice responses from the flow - using [Google Speech-to-Text](https://cloud.google.com/speech-to-text)
- 1. Using the test to conditionally respond with DTMF tones to transcripts
-
-## Writing tests
-
-| When | Overview |
-| -------------|--------------------------------------|
-| [contains] | Prompt contains a piece of text |
-| [matches] | Prompt matches regular expression |
-| [similarTo] | Prompt is similar to a piece of text |
-| [isAnything] | Prompt can be anything |
-
-[contains]: ./packages/ivr-tester/doc#contains
-[matches]: ./packages/ivr-tester/doc#matches
-[similarTo]: ./packages/ivr-tester/doc#similarto
-[isAnything]: ./packages/ivr-tester/doc#isanything
-
-| Then | Overview |
-| ------------|---------------------|
-| [press] | Produces DTMF tones |
-| [hangUp] | Terminates the call |
-| [doNothing] | Doesn't do anything |
-
-[press]: ./packages/ivr-tester/doc#press
-[hangUp]: ./packages/ivr-tester/doc#hangup
-[doNothing]: ./packages/ivr-tester/doc#donothing
-
-## Development
-
-### Documentation
-
-Where possible the documentation is generated from the code using the following script in the root directory or
-individual packages:
-
-```shell
-yarn docs
-```
-
-The documentation is automatically generated and committed as part of the CI pipeline when merged to the main branch.
-
-The official website can be previewed locally by running:
-
-```shell
-docsify serve docs
-```
-
-## License
-
-[](https://app.fossa.com/projects/git%2Bgithub.com%2FSketchingDev%2Fivr-tester?ref=badge_large)
diff --git a/doc/assets/architecture.jpg b/doc/assets/architecture.jpg
deleted file mode 100644
index 8259acd10a2972341541855568461029eabec6ef..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 190951
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