diff --git a/Procfile b/Procfile index b18840e0..f33dad0b 100644 --- a/Procfile +++ b/Procfile @@ -8,5 +8,4 @@ dynoskimmer: node lib/server/processes/dynoCleanup.js orgdeleter: node lib/server/processes/orgDeleter.js deployidcleanup: node lib/server/processes/deployIdCleanup.js herokucdscheck: node lib/server/processes/herokuExpirationChecker.js -leadqueue: node lib/server/processes/trialLeadCreate.js pooldrain: node lib/server/processes/poolDrainSubscriber.js \ No newline at end of file diff --git a/package.json b/package.json index 02fd7f7c..c2a9d639 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,6 @@ "@salesforce-ux/design-system": "^2.9.3", "@salesforce/analytics": "0.17.0", "@salesforce/kit": "^1.1.1", - "axios": "^0.19.0", "cors": "^2.8.5", "deepmerge": "^4.2.2", "express": "^4.16.4", diff --git a/src/server/__tests__/helpers/sampleLead.ts b/src/server/__tests__/helpers/sampleLead.ts deleted file mode 100644 index a65f49ff..00000000 --- a/src/server/__tests__/helpers/sampleLead.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* eslint-disable @typescript-eslint/camelcase */ -const sample = { - skipForm: 'false', - hasLeadCapture: 'true', - conf_page: 'https://hosted-scratch.herokuapp.com/trial?template=https://github.com/mshanemc/platformTrial', - startPage: '/form/signup/freetrial-platform', - successPage: 'https://hosted-scratch.herokuapp.com/trial?template=https://github.com/mshanemc/platformTrial', - failPage: 'https://hosted-scratch.herokuapp.com/trial?template=https://github.com/mshanemc/platformTrial', - resultWebApp: '/', - process_form: 'true', - landing_page: '/form/signup/freetrial-platform', - FormCampaignId: '7010M000000nQr6', - DriverCampaignId: '70130000000sUVq', - DefaultDriverCampaignId: '70130000000CrZx', - 'Lead.Primary_Product_Interest__c': 'App Cloud', - mcloudSiteId: '2761', - mcloudCookieWrite: '0', - mcloudCustomerGUID: '', - CM_OMTRJoinID: '7010M000000nQr6QAE|bc74b30b773a1e4b30dccfb14538b2241dd6c3fb', - 'Lead.LeadSource': 'Organic Search', - mcloudFormName: 'GLOB_MAIN_T2L1_OCMS_LCS1', - mcloudHandlingInstructions: '', - 'Lead.LeadType__c': '', - 'CampaignMember.Offers__c': '', - Domain_Site: 'www.salesforce.com', - amo_efid: 'Cj0KCQiA2ITuBRDkARIsAMK9Q7NsEFm4IwJpuBM3_bflHIzJybGeV9k1ZSsTn7rYvi_xJ_gz1GmE87gaAuvvEALw_wcB:G:s', - PartnerPromoCode: '', - UserFirstName: 'Reginald', - UserLastName: 'Testaforma', - UserTitle: 'QA Specialist ', - UserEmail: 'reggie@shaneformtesting.org', - userNameErrMsg: 'This email is already in use. Try another.', - UserPhone: '7850484333', - CompanyName: 'Shanes form testing, ltd', - CompanyEmployees: '10', - CompanyCountry: 'US', - CompanyState: 'Texas', - CompanyPostalCode: '77355', - SubscriptionAgreement: 'on', - Region__c: '' -}; - -export { sample }; diff --git a/src/server/__tests__/integrationTests/trialsignup.test.ts b/src/server/__tests__/integrationTests/trialsignup.test.ts deleted file mode 100644 index 4487908c..00000000 --- a/src/server/__tests__/integrationTests/trialsignup.test.ts +++ /dev/null @@ -1,76 +0,0 @@ -// import * as puppeteer from 'puppeteer'; - -// import { sfdxTimeout, getTestURL } from '../helpers/testingUtils'; -import { leadCreate } from '../../lib/leadSupport'; -import { sample } from '../../__tests__/helpers/sampleLead'; - -// const shouldBeLoaded = 1000; - -describe.skip('tests org62 signup stuff', () => { - it('calls servlet', async () => { - const response = await leadCreate(sample); - console.log(response); - }); -}); - -// describe.skip('runs the trial', () => { -// let browser, page; -// let baseUrl = getTestURL(); - -// beforeAll(async () => { -// browser = await puppeteer.launch({ headless: true }); -// page = await browser.newPage(); -// }); - -// test( -// 'gets form and completes it successfully', -// async () => { -// // const browser = await puppeteer.launch({headless:false}); -// // const page = await browser.newPage(); -// // const baseUrl = getTestURL(); - -// await page.goto(`${baseUrl}/testform`); -// expect(await page.url()).toContain('/testform'); - -// await page.waitForSelector('input#UserEmail', { timeout: shouldBeLoaded }); -// await page.waitForSelector('input#UserFirstName', { timeout: shouldBeLoaded }); -// await page.waitForSelector('input#UserLastName', { timeout: shouldBeLoaded }); -// await page.waitForSelector('input#submitButton', { timeout: shouldBeLoaded }); - -// await page.type('input#UserEmail', 'm.shane.mclaughlin@gmail.com'); -// await page.type('input#UserFirstName', 'shane'); -// await page.type('input#UserLastName', 'mclaughlin'); -// }, -// sfdxTimeout -// ); - -// test( -// 'submits form and gets to loading screen, then leaves', -// async () => { -// await page.waitForSelector('input#submitButton', { timeout: shouldBeLoaded }); - -// await Promise.all([page.click('input#submitButton'), page.waitForNavigation()]); - -// const deployingUrl = await page.url(); -// expect(deployingUrl).toContain('/deploying/trial/mshanemc-platformTrial-'); -// await page.waitForSelector('.bluebar', { timeout: shouldBeLoaded }); -// await page.waitForNavigation({ timeout: sfdxTimeout }); -// }, -// sfdxTimeout -// ); - -// test( -// 'eventually gets to actual trial', -// async () => { -// await page.waitForSelector('div.cTrialWelcome2'); - -// const trialUrl = await page.url(); -// expect(trialUrl).toContain('lightning.force'); -// }, -// sfdxTimeout -// ); - -// afterAll(async () => { -// browser.close(); -// }); -// }); diff --git a/src/server/__tests__/tsconfig.json b/src/server/__tests__/tsconfig.json index 1bd6def9..e4dbec0a 100644 --- a/src/server/__tests__/tsconfig.json +++ b/src/server/__tests__/tsconfig.json @@ -7,7 +7,7 @@ "moduleResolution": "node", "module": "none", "removeComments": true, - "types": ["node", "jest", "express", "ioredis", "fs-extra", "moment", "axios", "request-promise-native", "universal-analytics"] + "types": ["node", "jest", "express", "ioredis", "fs-extra", "moment", "request-promise-native", "universal-analytics"] }, "compileOnSave": true diff --git a/src/server/lib/leadSupport.ts b/src/server/lib/leadSupport.ts deleted file mode 100644 index 7ab70fd8..00000000 --- a/src/server/lib/leadSupport.ts +++ /dev/null @@ -1,48 +0,0 @@ -// asynchronously posts the lead form back to org62 -import axios from 'axios'; -// import logger from 'heroku-logger'; -import querystring from 'querystring'; - -import { processWrapper } from './processWrapper'; - -const sfdcLeadCaptureServlet = processWrapper.sfdcLeadCaptureServlet; -const requestPage = '/form.html'; -const resultPage = '/conf.html'; -const requestHost = 'www.salesforce.com'; - -const leadCreate = async function (incoming): Promise { - const formPostBody = { - UserFirstName: incoming.UserFirstName, - UserLastName: incoming.UserLastName, - CompanyName: incoming.CompanyName, - UserTitle: incoming.UserTitle, - UserEmail: incoming.UserEmail, - UserPhone: incoming.UserPhone, - CompanyState: incoming.CompanyState, - CompanyPostalCode: incoming.CompanyPostalCode, - // CompanyEmployees: incoming.CompanyEmployees, - CompanyCountry: incoming.CompanyCountry, - mcloudFormName: incoming.mcloudFormName, - // 'Lead.LeadSource': incoming['Lead.LeadSource'], - FormCampaignId: incoming.FormCampaignId, - DriverCampaignId: incoming.DriverCampaignId, - requestPage, - resultPage, - requestHost - }; - - // console.log(formPostBody); - - await axios({ - // strictSSL: false, - url: sfdcLeadCaptureServlet, - method: 'post', - headers: { 'content-type': 'application/x-www-form-urlencoded;charset=utf-8' }, - data: querystring.stringify(formPostBody), - responseType: 'text' - }); - // logger.debug(JSON.stringify(response)); - // logger.debug(response); -}; - -export { leadCreate }; diff --git a/src/server/lib/processWrapper.ts b/src/server/lib/processWrapper.ts index 387e1226..e2194f82 100644 --- a/src/server/lib/processWrapper.ts +++ b/src/server/lib/processWrapper.ts @@ -43,8 +43,7 @@ const processWrapper = { // google analytics UA_ID: process.env.UA_ID, - - sfdcLeadCaptureServlet: process.env.sfdcLeadCaptureServlet + LEAD_QUEUE: process.env.LEAD_QUEUE }; export { processWrapper }; diff --git a/src/server/lib/redisNormal.ts b/src/server/lib/redisNormal.ts index b6973414..408a52aa 100644 --- a/src/server/lib/redisNormal.ts +++ b/src/server/lib/redisNormal.ts @@ -19,8 +19,7 @@ const deployRequestExchange = 'deploys'; export const poolDeployExchange = 'poolDeploys'; const orgDeleteExchange = 'orgDeletes'; const herokuCDSExchange = 'herokuCDSs'; -const leadQueue = 'leads'; -const failedLeadQueue = 'failedLeads'; +const leadQueue = processWrapper.LEAD_QUEUE || 'leads'; const days31asSeconds = 31 * 24 * 60 * 60; @@ -46,11 +45,16 @@ const putHerokuCDS = async (cds: CDS): Promise => { }; const getHerokuCDSs = async (): Promise => { - const CDSs: CDS[] = (await redis.lrange(herokuCDSExchange, 0, -1)).map((queueItem) => JSON.parse(queueItem)); + const CDSs: CDS[] = (await redis.lrange(herokuCDSExchange, 0, -1)).map((queueItem) => + JSON.parse(queueItem) + ); return CDSs; }; -const getAppNamesFromHerokuCDSs = async (salesforceUsername: string, expecting = true): Promise => { +const getAppNamesFromHerokuCDSs = async ( + salesforceUsername: string, + expecting = true +): Promise => { // get all the CDSs const herokuCDSs = await getHerokuCDSs(); @@ -58,7 +62,9 @@ const getAppNamesFromHerokuCDSs = async (salesforceUsername: string, expecting = return []; } // find the matching username - const matchedCDSIndex = herokuCDSs.findIndex((cds) => cds.mainUser.username === salesforceUsername); + const matchedCDSIndex = herokuCDSs.findIndex( + (cds) => cds.mainUser.username === salesforceUsername + ); if (matchedCDSIndex < 0) { if (expecting) { @@ -69,7 +75,9 @@ const getAppNamesFromHerokuCDSs = async (salesforceUsername: string, expecting = return []; } - logger.debug(`found matching cds ${salesforceUsername} === ${herokuCDSs[matchedCDSIndex].mainUser.username}`); + logger.debug( + `found matching cds ${salesforceUsername} === ${herokuCDSs[matchedCDSIndex].mainUser.username}` + ); const matched = herokuCDSs.splice(matchedCDSIndex, 1); @@ -173,7 +181,8 @@ const cdsRetrieve = async (deployId: string) => { errors: [ { command: 'retrieval', - error: 'Results not found for your deployId. It may have been deleted or may have expired', + error: + 'Results not found for your deployId. It may have been deleted or may have expired', raw: '' } ] @@ -220,9 +229,11 @@ const putPooledOrg = async (depReq: DeployRequest, poolMessage: CDS): Promise => (await redis.lrange(poolname, 0, -1)).map((msg) => JSON.parse(msg)); +const getAllPooledOrgs = async (poolname: string): Promise => + (await redis.lrange(poolname, 0, -1)).map((msg) => JSON.parse(msg)); -const getAllPooledOrgIDs = async (poolname: string): Promise => (await getAllPooledOrgs(poolname)).map((cds) => cds.orgId); +const getAllPooledOrgIDs = async (poolname: string): Promise => + (await getAllPooledOrgs(poolname)).map((cds) => cds.orgId); const getPoolDeployRequestQueueSize = async () => redis.llen(poolDeployExchange); @@ -231,28 +242,17 @@ const getPoolDeployRequestQueueSize = async () => redis.llen(poolDeployExchange) */ const getPoolDeployCountByRepo = async (pool: PoolConfig) => { const poolRequests = await redis.lrange(poolDeployExchange, 0, -1); - return poolRequests.map((pr) => JSON.parse(pr)).filter((pr: DeployRequest) => equal(pr.repos, pool.repos)).length; + return poolRequests + .map((pr) => JSON.parse(pr)) + .filter((pr: DeployRequest) => equal(pr.repos, pool.repos)).length; }; const putLead = async (lead) => { - if (processWrapper.sfdcLeadCaptureServlet) { + if (processWrapper.LEAD_QUEUE) { await redis.rpush(leadQueue, JSON.stringify(lead)); } }; -const putFailedLead = async (lead) => { - if (processWrapper.sfdcLeadCaptureServlet) { - await redis.rpush(failedLeadQueue, JSON.stringify(lead)); - } -}; - -const getLead = async () => { - const lead = await redis.lpop(leadQueue); - return JSON.parse(lead); -}; - -const getLeadQueueSize = async () => redis.llen(leadQueue); - export { redis, deployRequestExchange, @@ -279,9 +279,6 @@ export { getAppNamesFromHerokuCDSs, getHerokuCDSs, putLead, - getLead, - getLeadQueueSize, - putFailedLead, getAllPooledOrgs, getAllPooledOrgIDs }; diff --git a/src/server/processes/trialLeadCreate.ts b/src/server/processes/trialLeadCreate.ts deleted file mode 100644 index afd6575a..00000000 --- a/src/server/processes/trialLeadCreate.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable no-process-exit */ -/* eslint-disable no-await-in-loop */ -import logger from 'heroku-logger'; - -import { getLead, getLeadQueueSize, putFailedLead } from '../lib/redisNormal'; - -import { leadCreate } from '../lib/leadSupport'; - -(async () => { - logger.debug('Lead queue consumer is up'); - while ((await getLeadQueueSize()) > 0) { - const lead = await getLead(); - // logger.debug('lead is ', lead); - try { - await leadCreate(lead); - } catch (e) { - // logger.error('error in trialLeadCreate', e); - await putFailedLead(lead); - } - } - process.exit(0); -})(); diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index 598c8b6d..07d880d5 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -11,7 +11,7 @@ "resolveJsonModule": true, "removeComments": true, - "types": ["node", "jest", "express", "ioredis", "fs-extra", "moment", "axios", "request-promise-native", "universal-analytics"] + "types": ["node", "jest", "express", "ioredis", "fs-extra", "moment", "request-promise-native", "universal-analytics"] } // "compileOnSave": true, // "include": ["./src/server/**"], diff --git a/yarn.lock b/yarn.lock index d82e6ff3..5be80711 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3477,13 +3477,6 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@^0.19.0: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -5409,7 +5402,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" -debug@3.1.0, debug@=3.1.0: +debug@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== @@ -7034,13 +7027,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - follow-redirects@^1.0.0: version "1.12.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6"