Skip to content

Updates endpoint #5375

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 14 commits into
base: master
Choose a base branch
from
20 changes: 11 additions & 9 deletions packages/@okta/vuepress-site/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ function configUris() {
case 'test':
default:
return {
baseUri: 'https://okta-dev-parent.trexcloud.com',
baseUri: 'https://okta-next-dev.oktaweb.dev',
//baseUri: 'https://okta-dev-parent.trexcloud.com',
registrationPolicyId: 'reg3kwstakmbOrIly0g7',
idps: {
github: '0oa3jobx2bBlylNft0g7',
Expand Down Expand Up @@ -66,6 +67,7 @@ module.exports = ctx => ({
window.dataLayer = window.dataLayer || [];

var isProduction = window.location.hostname === 'developer.okta.com';
var isProduction = true;
if (isProduction) {

// START Google Tag Manager - main container
Expand Down Expand Up @@ -271,7 +273,7 @@ module.exports = ctx => ({
md.use(require('markdown-it-attrs'), {
leftDelimiter: '[[',
rightDelimiter: ']]'
})
})
},
anchor: {
permalinkBefore: false,
Expand Down Expand Up @@ -369,7 +371,7 @@ module.exports = ctx => ({
let mainPageGuide = guidesInfo.guideInfo[mainPagePath];
/*
The current page might have some frameworks which are displayed in the stack selector. But `guideInfo` doesn't give the frameworks
for the pages ending with `/main` but provides frameworks for the parent page of this page. For eg. We'll get the list of frameworks for
for the pages ending with `/main` but provides frameworks for the parent page of this page. For eg. We'll get the list of frameworks for
`/docs/guides/{guide-folder-name}/{specific-selection}/main/` in its parent page, which is `/docs/guides/{guide-folder-name}/`.

Example guideInfo for the parent page of `/docs/guides/authenticators-okta-verify/main/` which is `/docs/guides/authenticators-okta-verify/`
Expand All @@ -381,7 +383,7 @@ module.exports = ctx => ({
frameworks: [ 'aspnet', 'java', 'nodeexpress' ],
mainFramework: 'aspnet'
}

If the parent page of current page guide has frameworks(stack selector) then we don't need to add the current page to sitemap
but only add the pages with frameworks in the sitemap. Hence, excluding the current page from sitemap here. Refer - OKTA-745577
*/
Expand All @@ -395,10 +397,10 @@ module.exports = ctx => ({

mainPagePath = path.slice(0, -'-/main/'.length);
mainPageGuide = guidesInfo.guideInfo[mainPagePath];
/*
/*
For paths such as /docs/guides/{guide-name}/-/main where there are no frameworks, we need to exclude the current page from sitemap

Eg. For path - `/docs/guides/build-api-integration/-/main/`, the mainPageGuide will be
Eg. For path - `/docs/guides/build-api-integration/-/main/`, the mainPageGuide will be

{
title: 'Build an API service integration',
Expand Down Expand Up @@ -433,7 +435,7 @@ module.exports = ctx => ({
exclude: true
};
}

if(!frontmatter.canonicalUrl) {
frontmatter.canonicalUrl = `https://developer.okta.com${path}`;
}
Expand All @@ -442,7 +444,7 @@ module.exports = ctx => ({
$page.newsFeedDataJson = null;
let response;
try {
response = await axios.get('https://developer.okta.com/feed.xml');
response = await axios.get('https://developer.okta.com/feed.xml');
} catch {
$page.newsFeedDataJson = null;
}
Expand All @@ -452,7 +454,7 @@ module.exports = ctx => ({
if (err) {
return;
}

$page.newsFeedDataJson = jsonObj;
});
}
Expand Down
25 changes: 14 additions & 11 deletions packages/@okta/vuepress-theme-prose/global-components/SignUp.vue
Original file line number Diff line number Diff line change
Expand Up @@ -594,9 +594,6 @@ export default {
this.isRegionLoading = false;
});
},
mounted() {
this.analyticsValues = getAnalyticsValues();
},
methods: {
setHeight(isNotUSAAndCanada) {
let height;
Expand Down Expand Up @@ -644,21 +641,27 @@ export default {
if (this.validationService.isValidForm()) {
// make api call
const { baseUri, registrationPolicyId } = this.$site.themeConfig.uris;
const registrationPath = `/api/v1/registration/${registrationPolicyId}/register`;
const registrationPath = `/free-trial/api/free-trial/`;

// test cookies
document.cookie = '_okta_original_attribution={"utm_page":"www.okta.com/resources/administrator-hands-on-exam-study-guide/","utm_date":"03/11/2025","utm_source":"Direct","utm_medium":"Direct"}';
document.cookie = '_okta_session_attribution={"utm_page":"developer.okta.com/docs/guides/oie-embedded-sdk-use-case-new-user-activation/nodeexpress/main/","utm_date":"03/26/2025","utm_source":"www.google.com","utm_medium":"Referral"}';
document.cookie = '_okta_attribution={"utm_page":"www.okta.com/free-trial/","utm_date":"03/28/2025","utm_source":"www.okta.com","utm_medium":"Internal"}';
document.cookie = 'OptanonConsent=isGpcEnabled=0&datestamp=Fri+Mar+28+2025+14%3A56%3A56+GMT-0400+(Eastern+Daylight+Time)&version=202302.1.0&isIABGlobal=false&hosts=&consentId=10b4dc51-f00a-4c84-8704-7821bb82ca7c&interactionCount=1&landingPath=NotLandingPage&groups=1%3A1%2C2%3A0%2C3%3A0%2C4%3A0&geolocation=CA%3BON&AwaitingReconsent=false';

const analyticsValues = getAnalyticsValues();
const body = {
userProfile: {
email: this.form.email.value,
firstName: this.form.firstName.value,
lastName: this.form.lastName.value,
country: this.form.country.value,
state: this.form.state.value,
emailOptInC: this.form.consentAgree.value,
captchaResponse: this.form.captcha.value,
okta_oie: true,
// Merge in analytics tracking data
...analyticsValues,
},
consent: this.form.consentAgree.value,
gRecaptchaResponse: this.form.captcha.value,
phone: "000000",
orgPlan: "Integrator",
campaignId: "701F0000000mDmxIAE",
utms: analyticsValues,
};

this.isPending = true;
Expand Down
237 changes: 21 additions & 216 deletions packages/@okta/vuepress-theme-prose/util/attribution/attribution.js
Original file line number Diff line number Diff line change
@@ -1,109 +1,20 @@
import queryString from "query-string";
import { DateTime } from "luxon";
import { deleteCookie, getCookie, setCookie } from "./cookies";

const acceptedParams = [
"utm_campaign",
"utm_content",
"utm_medium",
"utm_source",
"utm_term"
];

const allParams = [
"utm_campaign",
"utm_content",
"utm_date",
"utm_medium",
"utm_page",
"utm_source",
"utm_term"
];

const gaTrackingFieldsMap = {
trackingId: "gaTrackId",
clientId: "gaClientId",
};

let isAttached = false;
import { getCookie } from "./cookies";

function filterParams(params) {
if (typeof params === "string") {
params = queryString.parse(params);

params = Object.keys(params)
.filter(key => acceptedParams.indexOf(key) !== -1)
.reduce((object, key) => {
object[key] = params[key];
return object;
}, {});
}

params = Object.keys(params)
.filter(key => allParams.indexOf(key) !== -1)
.reduce((object, key) => {
object[key] = params[key];
return object;
}, {});

params = Object.assign(
{
utm_page: location.pathname,
utm_date: DateTime.utc()
.setZone('America/Los_Angeles')
.toFormat('MM/dd/yyyy')
},
params
);

return params;
}

/**
* onAttach function.
*
* @access public
* @return void
*/
function onAttach() {
if (isAttached === false) {
isAttached = true;
// setAttribution();
}
}

/**
* setAttribution function.
*
* @access public
* @return void
*/
function setAttribution() {
const params = filterParams(location.search);

if (Object.keys(params).length) {
deleteCookie("attribution");
setCookie("attribution", params);

if (!getCookie("session_attribution")) {
setCookie("session_attribution", params);
}

if (!getCookie("original_attribution")) {
setCookie("original_attribution", params, { expires: 365 });
}
} else {
deleteCookie("attribution");
setCookie("attribution", {});

if (!getCookie("session_attribution")) {
setCookie("session_attribution", {});
}

if (!getCookie("original_attribution")) {
setCookie("original_attribution", {}, { expires: 365 });
}
}
params = Object.assign(
{
utm_source: "",
utm_medium: "",
utm_page: location.host + location.pathname,
utm_date: DateTime.utc()
.setZone('America/Los_Angeles')
.toFormat('MM/dd/yyyy')
},
params
);

return params;
}

/**
Expand All @@ -114,44 +25,11 @@ function setAttribution() {
*/

function getAttribution() {
return {
page: filterParams(getCookie("attribution", {})),
original: filterParams(getCookie("original_attribution", {})),
session: filterParams(getCookie("session_attribution", {}))
};
}

/**
* Very simple form of a function that converts pascal_case strings to camelCase
*
* @access public
* @return String
*/

function pascalToCamelCase(input = "") {
const [first, ...rest] = input.split("_");
const cased = rest.map(rest => rest.charAt(0).toUpperCase() + rest.slice(1));
return [first, ...cased].join("");
}

function setFieldAttribution(analytics, key, value = {}) {
if ("page" in value) {
const casedKey = pascalToCamelCase(`${key}_C`);

analytics[casedKey] = value.page;
}

if ("original" in value) {
const casedKey = pascalToCamelCase(`original_${key}_C`);

analytics[casedKey] = value.original;
}

if ("session" in value) {
const casedKey = pascalToCamelCase(`session_${key}_C`);

analytics[casedKey] = value.session;
}
return {
current: filterParams(getCookie("attribution", {})),
original: filterParams(getCookie("original_attribution", {})),
session: filterParams(getCookie("session_attribution", {}))
};
}

/**
Expand All @@ -162,82 +40,9 @@ function setFieldAttribution(analytics, key, value = {}) {
*/

function getAnalyticsValues() {
onAttach();

const attribution = getAttribution();
let paramValues = {};
let analytics = {};

if (attribution) {
acceptedParams.forEach((param) => {
paramValues = {
page: "",
original: "",
session: "",
};

if (param in attribution.page) {
paramValues.page = attribution.page[param];
}

if (param in attribution.original) {
paramValues.original = attribution.original[param];
}

if (param in attribution.session) {
paramValues.session = attribution.session[param];
}

setFieldAttribution(analytics, param, paramValues);
})

paramValues = {
original: "",
};

if ("utm_date" in attribution.original) {
paramValues.original = attribution.original["utm_date"];
}

setFieldAttribution(analytics, "utm_date", paramValues);

paramValues = {
page: "",
original: "",
session: "",
};

if ("utm_page" in attribution.page) {
paramValues.page = attribution.page["utm_page"];
}

if ("utm_page" in attribution.original) {
paramValues.original = attribution.original["utm_page"];
}

if ("utm_page" in attribution.session) {
paramValues.session = attribution.session["utm_page"];
}

setFieldAttribution(analytics, "utm_page", paramValues);
}

// Add google analytics tracking data if GA is loaded
if (window.ga && typeof window.ga.getAll === "function") {
const tracker = window.ga.getAll()[0];

if (tracker && typeof tracker.get === "function") {
Object.entries(gaTrackingFieldsMap).forEach(([key, field]) => {
const values = {
page: tracker.get(key) || "",
};

setFieldAttribution(analytics, field, values);
});
}
}
const attribution = getAttribution();

return analytics;
return attribution;
}

export default getAnalyticsValues;