update transcribe to support google v1p1beta1 and aws

This commit is contained in:
Dave Horton
2021-01-31 15:49:19 -05:00
parent 59d685319e
commit 756db59671
7 changed files with 243 additions and 97 deletions

View File

@@ -47,6 +47,7 @@ class Dialogflow extends Task {
this.language = this.data.tts.language || 'default'; this.language = this.data.tts.language || 'default';
this.voice = this.data.tts.voice || 'default'; this.voice = this.data.tts.voice || 'default';
} }
this.bargein = this.data.bargein;
} }
get name() { return TaskName.Dialogflow; } get name() { return TaskName.Dialogflow; }
@@ -266,7 +267,7 @@ class Dialogflow extends Task {
* @param {*} ep - media server endpoint * @param {*} ep - media server endpoint
* @param {*} evt - event data * @param {*} evt - event data
*/ */
_onTranscription(ep, cs, evt) { async _onTranscription(ep, cs, evt) {
const transcription = new Transcription(this.logger, evt); const transcription = new Transcription(this.logger, evt);
if (this.events.includes('transcription') && transcription.isFinal) { if (this.events.includes('transcription') && transcription.isFinal) {
@@ -281,6 +282,13 @@ class Dialogflow extends Task {
transcription.confidence > 0.8) { transcription.confidence > 0.8) {
ep.play(this.data.thinkingSound).catch((err) => this.logger.info(err, 'Error playing typing sound')); ep.play(this.data.thinkingSound).catch((err) => this.logger.info(err, 'Error playing typing sound'));
} }
// interrupt playback on speaking if bargein = true
if (this.bargein && this.playInProgress) {
this.logger.debug('terminating playback due to speech bargein');
this.playInProgress = false;
await ep.api('uuid_break', ep.uuid);
}
} }
/** /**

View File

@@ -10,15 +10,18 @@ class TaskGather extends Task {
[ [
'finishOnKey', 'hints', 'input', 'numDigits', 'finishOnKey', 'hints', 'input', 'numDigits',
'partialResultHook', 'profanityFilter', 'partialResultHook',
'speechTimeout', 'timeout', 'say', 'play' 'speechTimeout', 'timeout', 'say', 'play'
].forEach((k) => this[k] = this.data[k]); ].forEach((k) => this[k] = this.data[k]);
this.timeout = (this.timeout || 5) * 1000; this.timeout = (this.timeout || 5) * 1000;
this.interim = this.partialResultCallback; this.interim = this.partialResultCallback;
if (this.data.recognizer) { if (this.data.recognizer) {
this.language = this.data.recognizer.language || 'en-US'; const recognizer = this.data.recognizer;
this.vendor = this.data.recognizer.vendor; this.language = recognizer.language;
if (recognizer.hints && recognizer.hints.length > 0) {
this.hints = recognizer.hints.join(',');
}
} }
this.digitBuffer = ''; this.digitBuffer = '';

View File

@@ -134,7 +134,8 @@
"noInputEvent": "string", "noInputEvent": "string",
"passDtmfAsTextInput": "boolean", "passDtmfAsTextInput": "boolean",
"thinkingMusic": "string", "thinkingMusic": "string",
"tts": "#synthesizer" "tts": "#synthesizer",
"bargein": "boolean"
}, },
"required": [ "required": [
"project", "project",
@@ -271,7 +272,8 @@
"earlyMedia": "boolean" "earlyMedia": "boolean"
}, },
"required": [ "required": [
"transcriptionHook" "transcriptionHook",
"recognizer"
] ]
}, },
"target": { "target": {
@@ -327,13 +329,47 @@
"properties": { "properties": {
"vendor": { "vendor": {
"type": "string", "type": "string",
"enum": ["google"] "enum": ["google", "aws"]
}, },
"language": "string", "language": "string",
"hints": "array", "hints": "array",
"altLanguages": "array",
"profanityFilter": "boolean", "profanityFilter": "boolean",
"interim": "boolean", "interim": "boolean",
"dualChannel": "boolean" "singleUtterance": "boolean",
"dualChannel": "boolean",
"separateRecognitionPerChannel": "boolean",
"punctuation": "boolean",
"enhancedModel": "boolean",
"words": "boolean",
"diarization": "boolean",
"diarizationMinSpeakers": "number",
"diarizationMaxSpeakers": "number",
"interactionType": {
"type": "string",
"enum": [
"unspecified",
"discussion",
"presentation",
"phone_call",
"voicemail",
"voice_search",
"voice_command",
"dictation"
]
},
"naicsCode": "number",
"identifyChannels": "boolean",
"vocabularyName": "string",
"vocabularyFilterName": "string",
"filterMethod": {
"type": "string",
"enum": [
"remove",
"mask",
"tag"
]
}
}, },
"required": [ "required": [
"vendor" "vendor"

View File

@@ -1,5 +1,10 @@
const Task = require('./task'); const Task = require('./task');
const {TaskName, TaskPreconditions, TranscriptionEvents} = require('../utils/constants'); const {
TaskName,
TaskPreconditions,
GoogleTranscriptionEvents,
AwsTranscriptionEvents
} = require('../utils/constants');
class TaskTranscribe extends Task { class TaskTranscribe extends Task {
constructor(logger, opts, parentTask) { constructor(logger, opts, parentTask) {
@@ -8,12 +13,33 @@ class TaskTranscribe extends Task {
this.transcriptionHook = this.data.transcriptionHook; this.transcriptionHook = this.data.transcriptionHook;
this.earlyMedia = this.data.earlyMedia === true || (parentTask && parentTask.earlyMedia); this.earlyMedia = this.data.earlyMedia === true || (parentTask && parentTask.earlyMedia);
if (this.data.recognizer) {
this.language = this.data.recognizer.language || 'en-US'; const recognizer = this.data.recognizer;
this.vendor = this.data.recognizer.vendor; this.vendor = recognizer.vendor;
this.interim = this.data.recognizer.interim === true; if ('default' === this.vendor || !this.vendor) this.vendor = this.callSession.speechRecognizerVendor
this.dualChannel = this.data.recognizer.dualChannel === true; this.language = recognizer.language;
} if ('default' === this.language || !this.language) this.language = this.callSession.speechRecognizerLanguage;
this.interim = !!recognizer.interim;
this.separateRecognitionPerChannel = recognizer.separateRecognitionPerChannel;
/* google-specific options */
this.hints = recognizer.hints || [];
this.profanityFilter = recognizer.profanityFilter;
this.punctuation = !!recognizer.punctuation;
this.enhancedModel = !!recognizer.enhancedModel;
this.words = !!recognizer.words;
this.diarization = !!recognizer.diarization;
this.diarizationMinSpeakers = recognizer.diarizationMinSpeakers || 0;
this.diarizationMaxSpeakers = recognizer.diarizationMaxSpeakers || 0;
this.interactionType = recognizer.interactionType || 'unspecified';
this.naicsCode = recognizer.naicsCode || 0;
this.altLanguages = recognizer.altLanguages || [];
/* aws-specific options */
this.identifyChannels = !!recognizer.identifyChannels;
this.vocabularyName = recognizer.vocabularyName;
this.vocabularyFilterName = recognizer.vocabularyFilterName;
this.filterMethod = recognizer.filterMethod;
} }
get name() { return TaskName.Transcribe; } get name() { return TaskName.Transcribe; }
@@ -27,15 +53,19 @@ class TaskTranscribe extends Task {
} catch (err) { } catch (err) {
this.logger.info(err, 'TaskTranscribe:exec - error'); this.logger.info(err, 'TaskTranscribe:exec - error');
} }
ep.removeCustomEventListener(TranscriptionEvents.Transcription); ep.removeCustomEventListener(GoogleTranscriptionEvents.Transcription);
ep.removeCustomEventListener(TranscriptionEvents.NoAudioDetected); ep.removeCustomEventListener(GoogleTranscriptionEvents.NoAudioDetected);
ep.removeCustomEventListener(TranscriptionEvents.MaxDurationExceeded); ep.removeCustomEventListener(GoogleTranscriptionEvents.MaxDurationExceeded);
ep.removeCustomEventListener(AwsTranscriptionEvents.Transcription);
ep.removeCustomEventListener(AwsTranscriptionEvents.NoAudioDetected);
ep.removeCustomEventListener(AwsTranscriptionEvents.MaxDurationExceeded);
} }
async kill(cs) { async kill(cs) {
super.kill(cs); super.kill(cs);
if (this.ep.connected) { if (this.ep.connected) {
this.ep.stopTranscription().catch((err) => this.logger.info(err, 'Error TaskTranscribe:kill')); this.ep.stopTranscription({vendor: this.vendor})
.catch((err) => this.logger.info(err, 'Error TaskTranscribe:kill'));
// hangup after 1 sec if we don't get a final transcription // hangup after 1 sec if we don't get a final transcription
this._timer = setTimeout(() => this.notifyTaskDone(), 1000); this._timer = setTimeout(() => this.notifyTaskDone(), 1000);
@@ -45,34 +75,83 @@ class TaskTranscribe extends Task {
} }
async _startTranscribing(ep) { async _startTranscribing(ep) {
const opts = { const opts = {};
GOOGLE_SPEECH_USE_ENHANCED: true,
GOOGLE_SPEECH_MODEL: 'phone_call'
};
if (this.hints) {
Object.assign(opts, {'GOOGLE_SPEECH_HINTS': this.hints.join(',')});
}
if (this.profanityFilter) {
Object.assign(opts, {'GOOGLE_SPEECH_PROFANITY_FILTER': true});
}
if (this.dualChannel) {
Object.assign(opts, {'GOOGLE_SPEECH_SEPARATE_RECOGNITION_PER_CHANNEL': true});
}
await ep.set(opts)
.catch((err) => this.logger.info(err, 'TaskTranscribe:_startTranscribing'));
ep.addCustomEventListener(TranscriptionEvents.Transcription, this._onTranscription.bind(this, ep)); ep.addCustomEventListener(GoogleTranscriptionEvents.Transcription, this._onTranscription.bind(this, ep));
ep.addCustomEventListener(TranscriptionEvents.NoAudioDetected, this._onNoAudio.bind(this, ep)); ep.addCustomEventListener(GoogleTranscriptionEvents.NoAudioDetected, this._onNoAudio.bind(this, ep));
ep.addCustomEventListener(TranscriptionEvents.MaxDurationExceeded, this._onMaxDurationExceeded.bind(this, ep)); ep.addCustomEventListener(GoogleTranscriptionEvents.MaxDurationExceeded,
this._onMaxDurationExceeded.bind(this, ep));
ep.addCustomEventListener(AwsTranscriptionEvents.Transcription, this._onTranscription.bind(this, ep));
ep.addCustomEventListener(AwsTranscriptionEvents.NoAudioDetected, this._onNoAudio.bind(this, ep));
ep.addCustomEventListener(AwsTranscriptionEvents.MaxDurationExceeded,
this._onMaxDurationExceeded.bind(this, ep));
if (this.vendor === 'google') {
[
['enhancedModel', 'GOOGLE_SPEECH_USE_ENHANCED'],
['separateRecognitionPerChannel', 'GOOGLE_SPEECH_SEPARATE_RECOGNITION_PER_CHANNEL'],
['profanityFilter', 'GOOGLE_SPEECH_PROFANITY_FILTER'],
['punctuation', 'GOOGLE_SPEECH_ENABLE_AUTOMATIC_PUNCTUATION'],
['words', 'GOOGLE_SPEECH_ENABLE_WORD_TIME_OFFSETS'],
['diarization', 'GOOGLE_SPEECH_PROFANITY_FILTER']
].forEach((arr) => {
if (this[arr[0]]) opts[arr[1]] = true;
});
if (this.hints.length > 1) opts.GOOGLE_SPEECH_HINTS = this.hints.join(',');
if (this.altLanguages.length > 1) opts.GOOGLE_SPEECH_ALTERNATIVE_LANGUAGE_CODES = this.altLanguages.join(',');
if ('unspecified' !== this.interactionType) {
opts.GOOGLE_SPEECH_METADATA_INTERACTION_TYPE = this.interactionType;
// additionally set model if appropriate
if ('phone_call' === this.interactionType) opts.GOOGLE_SPEECH_MODEL = 'phone_call';
else if (['voice_search', 'voice_command'].includes(this.interactionType)) {
opts.GOOGLE_SPEECH_MODEL = 'command_and_search';
}
else opts.GOOGLE_SPEECH_MODEL = 'phone_call';
}
else opts.GOOGLE_SPEECH_MODEL = 'phone_call';
if (this.diarization && this.diarizationMinSpeakers > 0) {
opts.GOOGLE_SPEECH_SPEAKER_DIARIZATION_MIN_SPEAKER_COUNT = this.diarizationMinSpeakers;
}
if (this.diarization && this.diarizationMaxSpeakers > 0) {
opts.GOOGLE_SPEECH_SPEAKER_DIARIZATION_MAX_SPEAKER_COUNT = this.diarizationMaxSpeakers;
}
if (this.naicsCode > 0) opts.GOOGLE_SPEECH_METADATA_INDUSTRY_NAICS_CODE = this.naicsCode;
await ep.set(opts)
.catch((err) => this.logger.info(err, 'TaskTranscribe:_startTranscribing with google'));
}
else if (this.vendor === 'aws') {
[
['diarization', 'AWS_SHOW_SPEAKER_LABEL'],
['identifyChannels', 'AWS_ENABLE_CHANNEL_IDENTIFICATION']
].forEach((arr) => {
if (this[arr[0]]) opts[arr[1]] = true;
});
if (this.vocabularyName) opts.AWS_VOCABULARY_NAME = this.vocabularyName;
if (this.vocabularyFilterName) {
opts.AWS_VOCABULARY_NAME = this.vocabularyFilterName;
opts.AWS_VOCABULARY_FILTER_METHOD = this.filterMethod || 'mask';
}
Object.assign(opts, {
AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
AWS_REGION: process.env.AWS_REGION
});
await ep.set(opts)
.catch((err) => this.logger.info(err, 'TaskTranscribe:_startTranscribing with aws'));
}
await this._transcribe(ep); await this._transcribe(ep);
} }
async _transcribe(ep) { async _transcribe(ep) {
await this.ep.startTranscription({ await ep.startTranscription({
vendor: this.vendor,
interim: this.interim ? true : false, interim: this.interim ? true : false,
language: this.language || this.callSession.speechRecognizerLanguage, language: this.language,
channels: this.dualChannel ? 2 : 1 channels: this.separateRecognitionPerChannel ? 2 : 1
}); });
} }

View File

@@ -51,12 +51,18 @@
"StableCall": "stable-call", "StableCall": "stable-call",
"UnansweredCall": "unanswered-call" "UnansweredCall": "unanswered-call"
}, },
"TranscriptionEvents": { "GoogleTranscriptionEvents": {
"Transcription": "google_transcribe::transcription", "Transcription": "google_transcribe::transcription",
"EndOfUtterance": "google_transcribe::end_of_utterance", "EndOfUtterance": "google_transcribe::end_of_utterance",
"NoAudioDetected": "google_transcribe::no_audio_detected", "NoAudioDetected": "google_transcribe::no_audio_detected",
"MaxDurationExceeded": "google_transcribe::max_duration_exceeded" "MaxDurationExceeded": "google_transcribe::max_duration_exceeded"
}, },
"AwsTranscriptionEvents": {
"Transcription": "aws_transcribe::transcription",
"EndOfTranscript": "aws_transcribe::end_of_transcript",
"NoAudioDetected": "aws_transcribe::no_audio_detected",
"MaxDurationExceeded": "aws_transcribe::max_duration_exceeded"
},
"ListenEvents": { "ListenEvents": {
"Connect": "mod_audio_fork::connect", "Connect": "mod_audio_fork::connect",
"ConnectFailure": "mod_audio_fork::connect_failed", "ConnectFailure": "mod_audio_fork::connect_failed",

120
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "jambonz-feature-server", "name": "jambonz-feature-server",
"version": "0.2.4", "version": "0.2.5",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@@ -298,9 +298,9 @@
} }
}, },
"@grpc/grpc-js": { "@grpc/grpc-js": {
"version": "1.2.4", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.2.4.tgz", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.2.5.tgz",
"integrity": "sha512-z+EI20HYHLd3/uERtwOqP8Q4EPhGbz5RKUpiyo6xPWfR3pcjpf8sfNvY9XytDQ4xo1wNz7NqH1kh2UBonwzbfg==", "integrity": "sha512-CBCNwedw8McnEBq9jvoiJikws16WN0OiHFejQPovY71XkFWSiIqgvydYiDwpvIYDJmhPQ7qZNzW9BPndhXbx1Q==",
"requires": { "requires": {
"@types/node": "^12.12.47", "@types/node": "^12.12.47",
"google-auth-library": "^6.1.1", "google-auth-library": "^6.1.1",
@@ -336,9 +336,9 @@
"dev": true "dev": true
}, },
"@jambonz/db-helpers": { "@jambonz/db-helpers": {
"version": "0.5.10", "version": "0.5.11",
"resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.5.10.tgz", "resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.5.11.tgz",
"integrity": "sha512-NzcdkbE0pb1sX7AESJ3cNZKBAjQJW2LY/73TUXfRV2C/akoE9bsn8RtWoSeAsoJTVdl/welMCEOnqyny0W7i+g==", "integrity": "sha512-3IV28+SD07AFPAf4a9BMjbBlPc4LOQ62uNdVO4hFY4rG7ttj/eWRYoKFItI0564MbSTHXtNyx1DsqHpI+60ZwA==",
"requires": { "requires": {
"debug": "^4.3.1", "debug": "^4.3.1",
"mysql2": "^2.2.5", "mysql2": "^2.2.5",
@@ -593,9 +593,9 @@
"integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
}, },
"aws-sdk": { "aws-sdk": {
"version": "2.830.0", "version": "2.834.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.830.0.tgz", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.834.0.tgz",
"integrity": "sha512-vFatoWkdJmRzpymWbqsuwVsAJdhdAvU2JcM9jKRENTNKJw90ljnLyeP1eKCp4O3/4Lg43PVBwY/KUqPy4wL+OA==", "integrity": "sha512-9WRULrn4qAmgXI+tEW/IG5s/6ixJGZqjPOrmJsFZQev7/WRkxAZmJAjcwd4Ifm/jsJbXx2FSwO76gOPEvu2LqA==",
"requires": { "requires": {
"buffer": "4.9.2", "buffer": "4.9.2",
"events": "1.1.1", "events": "1.1.1",
@@ -1092,21 +1092,20 @@
"integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw="
}, },
"drachtio-fsmrf": { "drachtio-fsmrf": {
"version": "2.0.2", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/drachtio-fsmrf/-/drachtio-fsmrf-2.0.2.tgz", "resolved": "https://registry.npmjs.org/drachtio-fsmrf/-/drachtio-fsmrf-2.0.5.tgz",
"integrity": "sha512-f/oYrRQxTQAkKwi2lVVsZfkpktFPVezqxjVtXFRYaYwC4hiTL2QVhgPxEnUWx0NStzZTURGhrPbV8L9tNjVgPw==", "integrity": "sha512-4LcNOILnvppoJFIk/CMcK1X3dPyNJuOmT1jxde701fxHd6Ybk5ohVACBpStW+RBzmRKZxkxkycEHnDUAG27MWg==",
"requires": { "requires": {
"async": "^1.4.2", "async": "^1.4.2",
"debug": "^2.2.0", "debug": "^2.2.0",
"delegates": "^0.1.0", "delegates": "^0.1.0",
"drachtio-modesl": "^1.2.0", "drachtio-modesl": "^1.2.0",
"drachtio-srf": "^4.4.15", "drachtio-srf": "^4.4.47",
"lodash": "^4.17.20", "lodash": "^4.17.20",
"minimist": "^1.2.0", "minimist": "^1.2.5",
"moment": "^2.13.0",
"only": "0.0.2", "only": "0.0.2",
"sdp-transform": "^2.7.0", "sdp-transform": "^2.14.0",
"uuid": "^3.0.0" "uuid": "^3.4.0"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
@@ -1117,10 +1116,39 @@
"ms": "2.0.0" "ms": "2.0.0"
} }
}, },
"lodash": { "drachtio-srf": {
"version": "4.17.20", "version": "4.4.47",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "resolved": "https://registry.npmjs.org/drachtio-srf/-/drachtio-srf-4.4.47.tgz",
"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" "integrity": "sha512-dpbutyaRWj0llqRShkd02nsaLj0dlSaKJhG6IzxeLQSiyY6h5/vtqEDaw/uft/sSqwrMWwu+6SlkutKjb5ei0A==",
"requires": {
"async": "^1.4.2",
"debug": "^3.2.7",
"delegates": "^0.1.0",
"deprecate": "^1.1.1",
"drachtio-sip": "^0.5.2",
"node-noop": "0.0.1",
"only": "0.0.2",
"sdp-transform": "^2.14.1",
"short-uuid": "^4.1.0",
"sip-methods": "^0.3.0",
"utils-merge": "1.0.0",
"uuid": "^3.4.0"
},
"dependencies": {
"debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
}, },
"ms": { "ms": {
"version": "2.0.0", "version": "2.0.0",
@@ -1164,9 +1192,9 @@
} }
}, },
"drachtio-srf": { "drachtio-srf": {
"version": "4.4.46", "version": "4.4.47",
"resolved": "https://registry.npmjs.org/drachtio-srf/-/drachtio-srf-4.4.46.tgz", "resolved": "https://registry.npmjs.org/drachtio-srf/-/drachtio-srf-4.4.47.tgz",
"integrity": "sha512-tw3sJNfgVvk3un9O51mPkozmcqtu0JTNLNyrHb5tq423KmJuQCIU3rXRDw8mHLpLNfpRC1+y9Oqxwa45lS1ODA==", "integrity": "sha512-dpbutyaRWj0llqRShkd02nsaLj0dlSaKJhG6IzxeLQSiyY6h5/vtqEDaw/uft/sSqwrMWwu+6SlkutKjb5ei0A==",
"requires": { "requires": {
"async": "^1.4.2", "async": "^1.4.2",
"debug": "^3.2.7", "debug": "^3.2.7",
@@ -1190,11 +1218,6 @@
"ms": "^2.1.1" "ms": "^2.1.1"
} }
}, },
"sdp-transform": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz",
"integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw=="
},
"uuid": { "uuid": {
"version": "3.4.0", "version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -1320,9 +1343,9 @@
"dev": true "dev": true
}, },
"eslint": { "eslint": {
"version": "7.18.0", "version": "7.19.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz",
"integrity": "sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ==", "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.0.0", "@babel/code-frame": "^7.0.0",
@@ -1844,9 +1867,9 @@
} }
}, },
"google-auth-library": { "google-auth-library": {
"version": "6.1.4", "version": "6.1.6",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.4.tgz", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
"integrity": "sha512-q0kYtGWnDd9XquwiQGAZeI2Jnglk7NDi0cChE4tWp6Kpo/kbqnt9scJb0HP+/xqt03Beqw/xQah1OPrci+pOxw==", "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
"requires": { "requires": {
"arrify": "^2.0.0", "arrify": "^2.0.0",
"base64-js": "^1.3.0", "base64-js": "^1.3.0",
@@ -1892,21 +1915,13 @@
"dev": true "dev": true
}, },
"gtoken": { "gtoken": {
"version": "5.2.0", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.0.tgz", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz",
"integrity": "sha512-qbf6JWEYFMj3WMAluvYXl8GAiji6w8d9OmAGCbBg0xF4xD/yu6ZaO6BhoXNddRjKcOUpZD81iea1H5B45gAo1g==", "integrity": "sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==",
"requires": { "requires": {
"gaxios": "^4.0.0", "gaxios": "^4.0.0",
"google-p12-pem": "^3.0.3", "google-p12-pem": "^3.0.3",
"jws": "^4.0.0", "jws": "^4.0.0"
"mime": "^2.2.0"
},
"dependencies": {
"mime": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.5.0.tgz",
"integrity": "sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag=="
}
} }
}, },
"has": { "has": {
@@ -2438,8 +2453,7 @@
"lodash": { "lodash": {
"version": "4.17.20", "version": "4.17.20",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
"dev": true
}, },
"lodash.camelcase": { "lodash.camelcase": {
"version": "4.3.0", "version": "4.3.0",
@@ -3160,9 +3174,9 @@
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
}, },
"sdp-transform": { "sdp-transform": {
"version": "2.14.0", "version": "2.14.1",
"resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.0.tgz", "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz",
"integrity": "sha512-8ZYOau/o9PzRhY0aMuRzvmiM6/YVQR8yjnBScvZHSdBnywK5oZzAJK+412ZKkDq29naBmR3bRw8MFu0C01Gehg==" "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw=="
}, },
"semver": { "semver": {
"version": "6.3.0", "version": "6.3.0",

View File

@@ -33,8 +33,8 @@
"cidr-matcher": "^2.1.1", "cidr-matcher": "^2.1.1",
"debug": "^4.3.1", "debug": "^4.3.1",
"deepcopy": "^2.1.0", "deepcopy": "^2.1.0",
"drachtio-fsmrf": "^2.0.2", "drachtio-fsmrf": "^2.0.5",
"drachtio-srf": "^4.4.46", "drachtio-srf": "^4.4.47",
"express": "^4.17.1", "express": "^4.17.1",
"ip": "^1.1.5", "ip": "^1.1.5",
"jambonz-mw-registrar": "^0.1.3", "jambonz-mw-registrar": "^0.1.3",
@@ -48,7 +48,7 @@
"devDependencies": { "devDependencies": {
"blue-tape": "^1.0.0", "blue-tape": "^1.0.0",
"clear-module": "^4.1.1", "clear-module": "^4.1.1",
"eslint": "^7.18.0", "eslint": "^7.19.0",
"eslint-plugin-promise": "^4.2.1", "eslint-plugin-promise": "^4.2.1",
"lodash": "4.17.20", "lodash": "4.17.20",
"nyc": "^15.1.0", "nyc": "^15.1.0",