diff --git a/config/cors-settings.js b/api-server/config/cors-settings.js similarity index 100% rename from config/cors-settings.js rename to api-server/config/cors-settings.js diff --git a/config/secrets.js b/api-server/config/secrets.js similarity index 100% rename from config/secrets.js rename to api-server/config/secrets.js diff --git a/api-server/src/server/boot/authentication.js b/api-server/src/server/boot/authentication.js index 26765096f10..eb115af55c9 100644 --- a/api-server/src/server/boot/authentication.js +++ b/api-server/src/server/boot/authentication.js @@ -4,7 +4,7 @@ import jwt from 'jsonwebtoken'; import passport from 'passport'; import fetch from 'node-fetch'; import { isEmail } from 'validator'; -import { jwtSecret } from '../../../../config/secrets'; +import { jwtSecret } from '../../../config/secrets'; import { decodeEmail } from '../../common/utils'; import { createPassportCallbackAuthenticator, diff --git a/api-server/src/server/boot/challenge.js b/api-server/src/server/boot/challenge.js index b30910869ba..674fcd4ac31 100644 --- a/api-server/src/server/boot/challenge.js +++ b/api-server/src/server/boot/challenge.js @@ -16,7 +16,7 @@ import isURL from 'validator/lib/isURL'; import fetch from 'node-fetch'; import jwt from 'jsonwebtoken'; -import { jwtSecret } from '../../../../config/secrets'; +import { jwtSecret } from '../../../config/secrets'; import { challengeTypes } from '../../../../config/challenge-types'; import { diff --git a/api-server/src/server/boot/donate.js b/api-server/src/server/boot/donate.js index b7029430530..cc4620c1815 100644 --- a/api-server/src/server/boot/donate.js +++ b/api-server/src/server/boot/donate.js @@ -2,7 +2,7 @@ import debug from 'debug'; import Stripe from 'stripe'; import { donationSubscriptionConfig } from '../../../../config/donation-settings'; -import keys from '../../../../config/secrets'; +import keys from '../../../config/secrets'; import { getAsyncPaypalToken, verifyWebHook, diff --git a/api-server/src/server/component-passport.js b/api-server/src/server/component-passport.js index 71779f2092a..a85d4bcf7fc 100644 --- a/api-server/src/server/component-passport.js +++ b/api-server/src/server/component-passport.js @@ -3,7 +3,7 @@ import dedent from 'dedent'; import passport from 'passport'; import { availableLangs } from '../../../config/i18n'; -import { jwtSecret } from '../../../config/secrets'; +import { jwtSecret } from '../../config/secrets'; import passportProviders from './passport-providers'; import { setAccessTokenToResponse } from './utils/getSetAccessToken'; import { diff --git a/api-server/src/server/datasources.production.js b/api-server/src/server/datasources.production.js index 8888a70ba60..45688d85ac4 100644 --- a/api-server/src/server/datasources.production.js +++ b/api-server/src/server/datasources.production.js @@ -1,4 +1,4 @@ -var secrets = require('../../../config/secrets'); +var secrets = require('../../config/secrets'); module.exports = { db: { diff --git a/api-server/src/server/index.js b/api-server/src/server/index.js index f696000d86c..8e2cb426b16 100644 --- a/api-server/src/server/index.js +++ b/api-server/src/server/index.js @@ -9,7 +9,7 @@ const loopback = require('loopback'); const boot = require('loopback-boot'); const morgan = require('morgan'); -const { sentry } = require('../../../config/secrets'); +const { sentry } = require('../../config/secrets'); const { setupPassport } = require('./component-passport'); const log = createDebugger('fcc:server'); diff --git a/api-server/src/server/middlewares/constant-headers.js b/api-server/src/server/middlewares/constant-headers.js index 98ee5fa88de..0579ec03a4b 100644 --- a/api-server/src/server/middlewares/constant-headers.js +++ b/api-server/src/server/middlewares/constant-headers.js @@ -1,4 +1,4 @@ -import { allowedOrigins } from '../../../../config/cors-settings'; +import { allowedOrigins } from '../../../config/cors-settings'; export default function constantHeaders() { return function (req, res, next) { diff --git a/api-server/src/server/middlewares/request-authorization.js b/api-server/src/server/middlewares/request-authorization.js index 60aedcdb936..95379be9402 100644 --- a/api-server/src/server/middlewares/request-authorization.js +++ b/api-server/src/server/middlewares/request-authorization.js @@ -1,6 +1,6 @@ import { isEmpty } from 'lodash'; -import { jwtSecret as _jwtSecret } from '../../../../config/secrets'; +import { jwtSecret as _jwtSecret } from '../../../config/secrets'; import { wrapHandledError } from '../utils/create-handled-error'; import { diff --git a/api-server/src/server/middlewares/sentry-error-handler.js b/api-server/src/server/middlewares/sentry-error-handler.js index b04480238f6..c795ff27093 100644 --- a/api-server/src/server/middlewares/sentry-error-handler.js +++ b/api-server/src/server/middlewares/sentry-error-handler.js @@ -1,5 +1,5 @@ import { Handlers, captureException } from '@sentry/node'; -import { sentry } from '../../../../config/secrets'; +import { sentry } from '../../../config/secrets'; import { isHandledError } from '../utils/create-handled-error'; // sends directly to Sentry diff --git a/api-server/src/server/middlewares/sentry-request-handler.js b/api-server/src/server/middlewares/sentry-request-handler.js index 3d6333b4040..d1b999655eb 100644 --- a/api-server/src/server/middlewares/sentry-request-handler.js +++ b/api-server/src/server/middlewares/sentry-request-handler.js @@ -1,5 +1,5 @@ import { Handlers } from '@sentry/node'; -import { sentry } from '../../../../config/secrets'; +import { sentry } from '../../../config/secrets'; export default function sentryRequestHandler() { return sentry.dsn === 'dsn_from_sentry_dashboard' diff --git a/api-server/src/server/middlewares/sentry-tracing-handler.js b/api-server/src/server/middlewares/sentry-tracing-handler.js index 41a04e306a9..bae04bd2f53 100644 --- a/api-server/src/server/middlewares/sentry-tracing-handler.js +++ b/api-server/src/server/middlewares/sentry-tracing-handler.js @@ -1,5 +1,5 @@ import { Handlers } from '@sentry/node'; -import { sentry } from '../../../../config/secrets'; +import { sentry } from '../../../config/secrets'; export default function sentryRequestHandler() { return sentry.dsn === 'dsn_from_sentry_dashboard' diff --git a/api-server/src/server/middlewares/user-token.js b/api-server/src/server/middlewares/user-token.js index d841b9da7c5..2ba32871662 100644 --- a/api-server/src/server/middlewares/user-token.js +++ b/api-server/src/server/middlewares/user-token.js @@ -1,7 +1,7 @@ import debugFactory from 'debug'; const log = debugFactory('fcc:boot:user'); import jwt from 'jsonwebtoken'; -import { jwtSecret } from '../../../../config/secrets'; +import { jwtSecret } from '../../../config/secrets'; /* * User tokens for submitting external curriculum are deleted when they sign diff --git a/api-server/src/server/passport-providers.js b/api-server/src/server/passport-providers.js index d766c6f6d43..dc82d4b2069 100644 --- a/api-server/src/server/passport-providers.js +++ b/api-server/src/server/passport-providers.js @@ -1,4 +1,4 @@ -import { auth0 } from '../../../config/secrets'; +import { auth0 } from '../../config/secrets'; const { clientID, clientSecret, domain } = auth0; diff --git a/api-server/src/server/utils/donation.js b/api-server/src/server/utils/donation.js index d3d9f86b111..b2a11225a41 100644 --- a/api-server/src/server/utils/donation.js +++ b/api-server/src/server/utils/donation.js @@ -3,7 +3,7 @@ import axios from 'axios'; import debug from 'debug'; import isEmail from 'validator/lib/isEmail'; import { donationSubscriptionConfig } from '../../../../config/donation-settings'; -import keys from '../../../../config/secrets'; +import keys from '../../../config/secrets'; const log = debug('fcc:boot:donate'); diff --git a/api-server/src/server/utils/donation.test.js b/api-server/src/server/utils/donation.test.js index c4bf51a0615..f601ead7ced 100644 --- a/api-server/src/server/utils/donation.test.js +++ b/api-server/src/server/utils/donation.test.js @@ -1,6 +1,6 @@ /* eslint-disable camelcase */ import axios from 'axios'; -import keys from '../../../../config/secrets'; +import keys from '../../../config/secrets'; import { mockApp, createDonationMockFn, diff --git a/api-server/src/server/utils/getSetAccessToken.js b/api-server/src/server/utils/getSetAccessToken.js index d482cc3d51f..0a67ab6719a 100644 --- a/api-server/src/server/utils/getSetAccessToken.js +++ b/api-server/src/server/utils/getSetAccessToken.js @@ -1,7 +1,7 @@ import { isBefore } from 'date-fns'; import jwt from 'jsonwebtoken'; -import { jwtSecret as _jwtSecret } from '../../../../config/secrets'; +import { jwtSecret as _jwtSecret } from '../../../config/secrets'; export const jwtCookieNS = 'jwt_access_token'; diff --git a/api-server/src/server/utils/redirection.js b/api-server/src/server/utils/redirection.js index 4f075a068c5..0ded5b7aeff 100644 --- a/api-server/src/server/utils/redirection.js +++ b/api-server/src/server/utils/redirection.js @@ -1,5 +1,5 @@ const jwt = require('jsonwebtoken'); -const { allowedOrigins } = require('../../../../config/cors-settings'); +const { allowedOrigins } = require('../../../config/cors-settings'); // process.env.HOME_LOCATION is being used as a fallback here. If the one // provided by the client is invalid we default to this. const { availableLangs } = require('../../../../config/i18n'); diff --git a/api/src/routes/challenge.ts b/api/src/routes/challenge.ts index 8cb6693b94b..a5f7e02b3bf 100644 --- a/api/src/routes/challenge.ts +++ b/api/src/routes/challenge.ts @@ -1,7 +1,7 @@ import { type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'; import jwt from 'jsonwebtoken'; import { uniqBy } from 'lodash'; -import { jwtSecret } from '../../../config/secrets'; +import { jwtSecret } from '../../../api-server/config/secrets'; import { getChallenges } from '../utils/get-challenges'; import { updateUserChallengeData } from '../utils/common-challenge-functions'; import { formatValidationError } from '../utils/error-formatting'; diff --git a/client/config/analytics-settings.ts b/client/config/analytics-settings.ts new file mode 100644 index 00000000000..dd8d93ee501 --- /dev/null +++ b/client/config/analytics-settings.ts @@ -0,0 +1,5 @@ +export const prodAnalyticsId = 'GTM-57R6KJM'; +export const devAnalyticsId = 'GTM-WSS47LM'; + +// this id includes a stream for the spanish learn platform +export const prodAnalyticsESId = 'GTM-KCS6GSD'; diff --git a/config/misc.ts b/client/config/misc.ts similarity index 100% rename from config/misc.ts rename to client/config/misc.ts diff --git a/client/src/analytics/index.ts b/client/src/analytics/index.ts index 32a21405122..e679595f094 100644 --- a/client/src/analytics/index.ts +++ b/client/src/analytics/index.ts @@ -4,7 +4,7 @@ import { devAnalyticsId, prodAnalyticsId, prodAnalyticsESId -} from '../../../config/analytics-settings'; +} from '../../config/analytics-settings'; import envData from '../../../config/env.json'; diff --git a/client/src/components/Header/components/universal-nav.tsx b/client/src/components/Header/components/universal-nav.tsx index 7d9f4a80fc8..216ce3a57d7 100644 --- a/client/src/components/Header/components/universal-nav.tsx +++ b/client/src/components/Header/components/universal-nav.tsx @@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next'; import { useMediaQuery } from 'react-responsive'; import { isLanding } from '../../../utils/path-parsers'; import { Link, SkeletonSprite } from '../../helpers'; -import { SEARCH_EXPOSED_WIDTH } from '../../../../../config/misc'; +import { SEARCH_EXPOSED_WIDTH } from '../../../../config/misc'; import MenuButton from './menu-button'; import NavLinks, { type NavLinksProps } from './nav-links'; import NavLogo from './nav-logo'; diff --git a/client/src/templates/Challenges/classic/lower-jaw.tsx b/client/src/templates/Challenges/classic/lower-jaw.tsx index 78bcb6ce71a..7f4b3ee1c51 100644 --- a/client/src/templates/Challenges/classic/lower-jaw.tsx +++ b/client/src/templates/Challenges/classic/lower-jaw.tsx @@ -10,7 +10,7 @@ import GreenPass from '../../../assets/icons/green-pass'; import { randomCompliment } from '../../../../src/utils/get-words'; import Help from '../../../assets/icons/help'; import Reset from '../../../assets/icons/reset'; -import { MAX_MOBILE_WIDTH } from '../../../../../config/misc'; +import { MAX_MOBILE_WIDTH } from '../../../../config/misc'; import { apiLocation } from '../../../../../config/env.json'; import { ChallengeMeta } from '../../../redux/prop-types'; import { Share } from '../../../components/share'; diff --git a/client/src/templates/Challenges/classic/mobile-layout.tsx b/client/src/templates/Challenges/classic/mobile-layout.tsx index ef6324638ce..f2cdddfaac8 100644 --- a/client/src/templates/Challenges/classic/mobile-layout.tsx +++ b/client/src/templates/Challenges/classic/mobile-layout.tsx @@ -15,7 +15,7 @@ import { showPreviewPortalSelector, showPreviewPaneSelector } from '../redux/selectors'; -import { TOOL_PANEL_HEIGHT } from '../../../../../config/misc'; +import { TOOL_PANEL_HEIGHT } from '../../../../config/misc'; import ToolPanel from '../components/tool-panel'; import PreviewPortal from '../components/preview-portal'; import EditorTabs from './editor-tabs'; diff --git a/client/src/templates/Challenges/classic/show.tsx b/client/src/templates/Challenges/classic/show.tsx index 5c93d7c6339..f7c63af8b2f 100644 --- a/client/src/templates/Challenges/classic/show.tsx +++ b/client/src/templates/Challenges/classic/show.tsx @@ -11,7 +11,7 @@ import store from 'store'; import { editor } from 'monaco-editor'; import { challengeTypes } from '../../../../../config/challenge-types'; import LearnLayout from '../../../components/layouts/learn'; -import { MAX_MOBILE_WIDTH } from '../../../../../config/misc'; +import { MAX_MOBILE_WIDTH } from '../../../../config/misc'; import { ChallengeFiles, diff --git a/client/src/templates/Challenges/components/preview-portal.tsx b/client/src/templates/Challenges/components/preview-portal.tsx index 79559257bc9..208fd6a0b41 100644 --- a/client/src/templates/Challenges/components/preview-portal.tsx +++ b/client/src/templates/Challenges/components/preview-portal.tsx @@ -18,7 +18,7 @@ import { isAdvancingToChallengeSelector, chapterSlugSelector } from '../redux/selectors'; -import { MAX_MOBILE_WIDTH } from '../../../../../config/misc'; +import { MAX_MOBILE_WIDTH } from '../../../../config/misc'; interface PreviewPortalProps { children: ReactElement | null; diff --git a/config/analytics-settings.js b/config/analytics-settings.js deleted file mode 100644 index 68f63dba39b..00000000000 --- a/config/analytics-settings.js +++ /dev/null @@ -1,5 +0,0 @@ -exports.prodAnalyticsId = 'GTM-57R6KJM'; -exports.devAnalyticsId = 'GTM-WSS47LM'; - -// this id includes a stream for the spanish learn platform -exports.prodAnalyticsESId = 'GTM-KCS6GSD';