From 4079fc8dd3ab1b8f724cdb4abbb15ba539421b76 Mon Sep 17 00:00:00 2001 From: Mark Vayngrib Date: Wed, 1 Aug 2018 19:44:06 -0400 Subject: [PATCH] fix: call home to tradle vs parent deployment --- src/in-house-bot/deployment.ts | 20 +++++++++++++------- src/in-house-bot/utils.ts | 12 ++++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/in-house-bot/deployment.ts b/src/in-house-bot/deployment.ts index 585355d91..e9304a3e6 100644 --- a/src/in-house-bot/deployment.ts +++ b/src/in-house-bot/deployment.ts @@ -45,6 +45,7 @@ import { isEmployee, isProbablyTradle, getTradleBotStub, + urlsFuzzyEqual, } from './utils' import { getLogAlertsTopicName } from './log-processor' @@ -511,22 +512,27 @@ export class Deployment { tasks.push(callHomeToParent) } - const callHomeToTradle = this.callHomeToTradle(callHomeOpts).catch(err => { - this.logger.debug('failed to call home to tradle', { - error: err.stack + if (!referrerUrl || !urlsFuzzyEqual(referrerUrl, TRADLE.API_BASE_URL)) { + this.logger.debug('calling tradle') + const callTradleOpts = _.omit(callHomeOpts, ['referrerUrl', 'deploymentUUID']) + const callHomeToTradle = this.callHomeToTradle(callTradleOpts).catch(err => { + this.logger.debug('failed to call home to tradle', { + error: err.stack + }) + + throw err }) - throw err - }) + tasks.push(callHomeToTradle) + } - tasks.push(callHomeToTradle) await Promise.all(tasks) } public callHomeToTradle = async (opts:CallHomeOpts={}) => { return await this.callHomeTo({ - referrerUrl: TRADLE.API_BASE_URL, ...opts, + referrerUrl: TRADLE.API_BASE_URL, }) } diff --git a/src/in-house-bot/utils.ts b/src/in-house-bot/utils.ts index 80713d0f9..83d7d04c3 100644 --- a/src/in-house-bot/utils.ts +++ b/src/in-house-bot/utils.ts @@ -1,3 +1,4 @@ +import { parse as parseUrl } from 'url' import _ from 'lodash' import { isEmployee } from '@tradle/bot-employee-manager' import validateResource from '@tradle/validate-resource' @@ -571,3 +572,14 @@ export const getTradleBotIdentity = async () => { const info = await get(`${TRADLE.API_BASE_URL}/info`) return info.bot.pub } + +const trailingSlashesRegex = /\/+$/ +const pathsEqual = (a: string, b: string) => { + return a.replace(trailingSlashesRegex, '') === b.replace(trailingSlashesRegex, '') +} + +export const urlsFuzzyEqual = (a: string, b: string) => { + const aParsed = parseUrl(a) + const bParsed = parseUrl(b) + return aParsed.host === bParsed.host && pathsEqual(aParsed.pathname, bParsed.pathname) +}