@jambonz/speech-utils 0.1.9 → 0.1.12
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/.husky/pre-commit +1 -1
- package/lib/get-aws-sts-token.js +10 -9
- package/lib/get-tts-voices.js +6 -1
- package/lib/synth-audio.js +6 -1
- package/package.json +2 -2
- package/test/aws.js +10 -2
package/.husky/pre-commit
CHANGED
package/lib/get-aws-sts-token.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
const { STSClient, GetSessionTokenCommand, AssumeRoleCommand } = require('@aws-sdk/client-sts');
|
|
2
2
|
const {makeAwsKey, noopLogger} = require('./utils');
|
|
3
3
|
const debug = require('debug')('jambonz:speech-utils');
|
|
4
|
-
const EXPIRY = 3600;
|
|
4
|
+
const EXPIRY = process.env.AWS_STS_SESSION_DURATION || 3600;
|
|
5
|
+
// by default reset aws session before expiry time 10 mins
|
|
6
|
+
const CACHE_EXPIRY = process.env.AWS_STS_SESSION_RESET_EXPIRY || (EXPIRY - 600);
|
|
5
7
|
|
|
6
8
|
async function getAwsAuthToken(
|
|
7
9
|
logger, createHash, retrieveHash,
|
|
8
|
-
|
|
10
|
+
{accessKeyId, secretAccessKey, region, roleArn}) {
|
|
9
11
|
logger = logger || noopLogger;
|
|
10
12
|
try {
|
|
11
|
-
const key = makeAwsKey(roleArn ||
|
|
13
|
+
const key = makeAwsKey(roleArn || accessKeyId);
|
|
12
14
|
const obj = await retrieveHash(key);
|
|
13
15
|
if (obj) return {...obj, servedFromCache: true};
|
|
14
16
|
|
|
15
17
|
let data;
|
|
16
18
|
if (roleArn) {
|
|
17
|
-
const stsClient = new STSClient({ region
|
|
19
|
+
const stsClient = new STSClient({ region });
|
|
18
20
|
const roleToAssume = { RoleArn: roleArn, RoleSessionName: 'Jambonz_Speech', DurationSeconds: EXPIRY};
|
|
19
21
|
const command = new AssumeRoleCommand(roleToAssume);
|
|
20
22
|
|
|
@@ -22,10 +24,10 @@ async function getAwsAuthToken(
|
|
|
22
24
|
} else {
|
|
23
25
|
/* access token not found in cache, so generate it using STS */
|
|
24
26
|
const stsClient = new STSClient({
|
|
25
|
-
region
|
|
27
|
+
region,
|
|
26
28
|
credentials: {
|
|
27
|
-
accessKeyId
|
|
28
|
-
secretAccessKey
|
|
29
|
+
accessKeyId,
|
|
30
|
+
secretAccessKey,
|
|
29
31
|
}
|
|
30
32
|
});
|
|
31
33
|
const command = new GetSessionTokenCommand({DurationSeconds: EXPIRY});
|
|
@@ -39,8 +41,7 @@ async function getAwsAuthToken(
|
|
|
39
41
|
securityToken: data.Credentials.SessionToken
|
|
40
42
|
};
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
createHash(key, credentials, EXPIRY - 600)
|
|
44
|
+
createHash(key, credentials, CACHE_EXPIRY)
|
|
44
45
|
.catch((err) => logger.error(err, `Error saving hash for key ${key}`));
|
|
45
46
|
|
|
46
47
|
return {...credentials, servedFromCache: false};
|
package/lib/get-tts-voices.js
CHANGED
|
@@ -107,7 +107,12 @@ const getAwsVoices = async(_client, createHash, retrieveHash, logger, credential
|
|
|
107
107
|
} else if (roleArn) {
|
|
108
108
|
client = new PollyClient({
|
|
109
109
|
region,
|
|
110
|
-
credentials: await getAwsAuthToken(
|
|
110
|
+
credentials: await getAwsAuthToken(
|
|
111
|
+
logger, createHash, retrieveHash,
|
|
112
|
+
{
|
|
113
|
+
region,
|
|
114
|
+
roleArn
|
|
115
|
+
}),
|
|
111
116
|
});
|
|
112
117
|
} else {
|
|
113
118
|
client = new PollyClient({region});
|
package/lib/synth-audio.js
CHANGED
|
@@ -281,7 +281,12 @@ const synthPolly = async(createHash, retrieveHash, logger,
|
|
|
281
281
|
} else if (roleArn) {
|
|
282
282
|
polly = new PollyClient({
|
|
283
283
|
region,
|
|
284
|
-
credentials: await getAwsAuthToken(
|
|
284
|
+
credentials: await getAwsAuthToken(
|
|
285
|
+
logger, createHash, retrieveHash,
|
|
286
|
+
{
|
|
287
|
+
region,
|
|
288
|
+
roleArn
|
|
289
|
+
}),
|
|
285
290
|
});
|
|
286
291
|
} else {
|
|
287
292
|
// AWS RoleArn assigned to Instance profile
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jambonz/speech-utils",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"description": "TTS-related speech utilities for jambonz",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"author": "Dave Horton",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"form-urlencoded": "^6.1.4",
|
|
37
37
|
"google-protobuf": "^3.21.2",
|
|
38
38
|
"ibm-watson": "^8.0.0",
|
|
39
|
-
"microsoft-cognitiveservices-speech-sdk": "1.
|
|
39
|
+
"microsoft-cognitiveservices-speech-sdk": "1.38.0",
|
|
40
40
|
"openai": "^4.25.0",
|
|
41
41
|
"undici": "^6.4.0"
|
|
42
42
|
},
|
package/test/aws.js
CHANGED
|
@@ -19,12 +19,20 @@ test('AWS - create and cache auth token', async(t) => {
|
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
21
|
try {
|
|
22
|
-
let obj = await getAwsAuthToken(
|
|
22
|
+
let obj = await getAwsAuthToken({
|
|
23
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
24
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
25
|
+
region: process.env.AWS_REGION
|
|
26
|
+
});
|
|
23
27
|
//console.log({obj}, 'received auth token from AWS');
|
|
24
28
|
t.ok(obj.securityToken && !obj.servedFromCache, 'successfullY generated auth token from AWS');
|
|
25
29
|
|
|
26
30
|
await sleep(250);
|
|
27
|
-
obj = await getAwsAuthToken(
|
|
31
|
+
obj = await getAwsAuthToken({
|
|
32
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
33
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
34
|
+
region: process.env.AWS_REGION
|
|
35
|
+
});
|
|
28
36
|
//console.log({obj}, 'received auth token from AWS - second request');
|
|
29
37
|
t.ok(obj.securityToken && obj.servedFromCache, 'successfully received access token from cache');
|
|
30
38
|
|