Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
try {
const googleapis = require('googleapis').google;
return googleapis.auth
.getClient({
keyFile: this.googleAssistant.config.transactions!.keyFile,
scopes: ['https://www.googleapis.com/auth/actions.purchases.digital'],
})
.then((client: any) => client.authorize()) // tslint:disable-line
.then((authorization: any) => authorization.access_token as string); // tslint:disable-line
} catch (e) {
console.log(e);
console.log(e.stack);
if (e.message === "Cannot find module 'googleapis'") {
return Promise.reject(
new JovoError(
e.message,
ErrorCode.ERR,
'jovo-platform-googleassistant',
undefined,
'Please run `npm install googleapis`',
),
);
}
return Promise.reject(new Error('Could not retrieve Google API access token'));
}
}
}
parse(handleRequest: HandleRequest, values: any[]) {
// tslint:disable-line
if (!this.config.entity) {
throw new JovoError(
'entity has to be set.',
ErrorCode.ERR_PLUGIN,
'jovo-cms-googlesheets',
`The sheet's name has to be defined in your config.js file.`,
undefined,
'https://www.jovo.tech/docs/cms/google-sheets#configuration',
);
}
handleRequest.app.$cms[this.config.entity] = values;
}
async load(primaryKey: string): Promise {
// tslint:disable-line
try {
await this.initClient();
const collection = this.client!.db(this.config.databaseName!).collection(
this.config.collectionName!,
);
const doc = await collection.findOne({ userId: primaryKey });
return doc;
} catch (e) {
throw new JovoError(
e.message,
ErrorCode.ERR_PLUGIN,
'jovo-db-mongodb',
undefined,
'Make sure the configuration you provided is valid.',
'https://www.jovo.tech/docs/databases/mongodb',
);
}
}
ErrorCode.ERR_PLUGIN,
'jovo-db-dynamodb',
undefined,
'Please run `npm install aws-xray-sdk-core`',
);
} else {
throw e;
}
}
}
this.dynamoClient = new this.aws.DynamoDB(this.config.dynamoDbConfig);
if (this.config.dax) {
if (this.config.awsXray) {
throw new JovoError(
`DynamoDB Accelerator doesn't work with AWS X-Ray`,
ErrorCode.ERR_PLUGIN,
'jovo-db-dynamodb',
);
}
try {
const AmazonDaxClient = require('amazon-dax-client'); // tslint:disable-line
const dax = new AmazonDaxClient(this.config.dax);
this.docClient = new this.aws.DynamoDB.DocumentClient({ service: dax });
} catch (e) {
if (e.message.includes(`Cannot find module 'amazon-dax-client'`)) {
throw new JovoError(
e.message,
ErrorCode.ERR_PLUGIN,
'jovo-db-dynamodb',
* googleapis has to be manually installed
*/
try {
const googleapis = require('googleapis').google;
return googleapis.google.auth.getClient({
keyFile: this.googleAssistant.config.transactions!.keyFile,
scopes: [ 'https://www.googleapis.com/auth/actions.purchases.digital' ]
})
.then((client: any) => client.authorize()) // tslint:disable-line
.then((authorization: any) => authorization.access_token as string); // tslint:disable-line
} catch (e) {
if (e.message === 'Cannot find module \'googleapis\'') {
Promise.reject(new JovoError(
e.message,
ErrorCode.ERR,
'jovo-platform-googleassistant',
undefined,
'Please run `npm install googleapis`'
));
}
}
return Promise.reject(new Error('Could not retrieve Google API access token'));
}
}
install(app) {
if (!this.config.trackingId) {
throw new jovo_core_1.JovoError("Google Analytics tracking id was not found.", jovo_core_1.ErrorCode.ERR_PLUGIN, 'jovo-analytics-googleanalytics', "trackingId needs to be added to config.js. See https://www.jovo.tech/docs/analytics/dashbot for details.", "You can find your tracking id in GoogleAnalytics by clicking: Admin -> Property Settings -> Tracking Id");
}
else {
console.log("tracking id is: " + this.config.trackingId);
app.middleware('platform.nlu').use(this.setJovoObjectAccess.bind(this));
app.middleware('after.response').use(this.sendDataToGA.bind(this)); //use(this.track);
app.middleware('fail').use(this.sendErrorToGA.bind(this));
console.log("added GA events");
}
}
uninstall(parent) {
install(app: BaseApp): void {
if (!this.config.trackingId) {
throw new JovoError("Google Analytics tracking id was not found.",
ErrorCode.ERR_PLUGIN,
'jovo-analytics-googleanalytics',
"trackingId needs to be added to config.js. See https://www.jovo.tech/docs/analytics/dashbot for details.",
"You can find your tracking id in GoogleAnalytics by clicking: Admin -> Property Settings -> Tracking Id"
)
}
else {
console.log("tracking id is: " + this.config.trackingId);
app.middleware('platform.nlu')!.use(this.setJovoObjectAccess.bind(this));
app.middleware('after.response')!.use(this.sendDataToGA.bind(this));//use(this.track);
app.middleware('fail')!.use(this.sendErrorToGA.bind(this));
console.log("added GA events");
}
}
uninstall(parent?: any): void {
sendNotification(notification: NotificationObject, accessToken: string) {
if (!notification) {
throw new JovoError(
"Couldn't send notification. notification has to be set",
ErrorCode.ERR,
'jovo-platform-googleassistant',
undefined,
undefined,
'https://www.jovo.tech/docs/google-assistant/notifications#notification-object',
);
}
if (!accessToken) {
throw new JovoError(
"Couldn't send notification. accessToken has to be set.",
ErrorCode.ERR,
'jovo-platform-googleassistant',
undefined,
'Get an access token using `this.$googleAction.$notification.getAccessToken(clientEmail, privateKey)`',
async sendAuthRequest(clientEmail: string, privateKey: string) {
if (!clientEmail || !privateKey) {
throw new JovoError(
"Couldn't authenticate. clientEmail and privateKey have to be set",
ErrorCode.ERR,
'jovo-platform-googleassistant',
"To authorize yourself, you have to provide your service account's clientEmail and privateKey",
undefined,
'https://www.jovo.tech/docs/google-assistant/notifications#configuration',
);
}
const jwtClient = new this.google.auth.JWT(
clientEmail,
undefined,
privateKey,
['https://www.googleapis.com/auth/actions.fulfillment.conversation'],
undefined,
);
install(app: BaseApp) {
if (!this.config.trackingId) {
throw new JovoError(
'trackingId has to be set.',
ErrorCode.ERR_PLUGIN,
'jovo-analytics-googleanalytics',
'',
'You can find your tracking id in Google Analytics by clicking: Admin -> Property Settings -> Tracking Id',
'https://www.jovo.tech/docs/analytics/googleanalytics',
);
}
app.middleware('after.platform.init')!.use(this.setGoogleAnalyticsObject.bind(this));
app.middleware('after.response')!.use(this.track.bind(this));
app.middleware('fail')!.use(this.sendError.bind(this));
}