Skip to content

Commit

Permalink
Merge pull request #40 from deriv-com/ako/add-websocket-initiator
Browse files Browse the repository at this point in the history
Ako/ add websocket initiator
  • Loading branch information
ali-hosseini-deriv authored Jul 1, 2024
2 parents 43494e8 + bd696aa commit 272b8a2
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 16 deletions.
15 changes: 15 additions & 0 deletions src/js/footer/clientsCountryCookie/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { setCookie, getCookieByKey } from "../cookies";
const message = JSON.stringify({ website_status: 1 });
const messageType = "website_status";

const clientsCountry = getCookieByKey(document.cookie, "clients_country");
if (!clientsCountry) {
window
.socketMessageSend(message, messageType)
.then((response) => {
setCookie("clients_country", response.website_status.clients_country, 30);
})
.catch((error) => {
console.error("Error received:", error);
});
}
84 changes: 69 additions & 15 deletions src/js/footer/helper/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,87 @@ window.emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

window.toggleErrorField = (element, isValid) => {
if (isValid) {
element.classList.remove('error-field');
element.classList.remove("error-field");
} else {
element.classList.add('error-field');
element.classList.add("error-field");
}
};

// Function to disable the submit button
window.disableButton = function(button) {
window.disableButton = function (button) {
button.disabled = true;
button.style.opacity = '0.5';
button.style.opacity = "0.5";
};

// Function to enable the submit button
window.enableButton = function(button) {
window.enableButton = function (button) {
button.disabled = false;
button.style.opacity = '1';
button.style.opacity = "1";
};

window.getOauthUrl = function() {
var fullUrl = window.location.href;
var url = new URL(fullUrl);
var domain = url.hostname;
var validDomains = ['deriv.com', 'deriv.be', 'deriv.me'];
window.getOauthUrl = function () {
var fullUrl = window.location.href;
var url = new URL(fullUrl);
var domain = url.hostname;
var validDomains = ["deriv.com", "deriv.be", "deriv.me"];

var matchedDomain = validDomains.find(validDomain => domain.endsWith(validDomain));
var matchedDomain = validDomains.find((validDomain) =>
domain.endsWith(validDomain)
);

var oauthUrl = matchedDomain ? `https://oauth.${matchedDomain}` : `https://oauth.deriv.com`;
var oauthUrl = matchedDomain
? `https://oauth.${matchedDomain}`
: `https://oauth.deriv.com`;

return oauthUrl;
};
return oauthUrl;
};

window.deriv_com_url = "deriv.com";
window.deriv_me_url = "deriv.me";
window.deriv_be_url = "deriv.be";
window.webflow_domain = "webflow.deriv.com";
window.staging_url = "staging.deriv.com";
window.staging_deriv_be_url = "staging.deriv.be";

window.getDomain = () => {
var currentUrl = window.location.href;
var domain = new URL(currentUrl).hostname;
return domain;
};

window.getAppId = () => {
const domainUrl = window.getDomain();
const url_params = new URLSearchParams(window.location.search || "");
const url_param_app_id = url_params.get("app_id");

if (url_param_app_id) {
return url_param_app_id;
}

const localStorageAppId = localStorage.getItem("config.app_id");
if (localStorageAppId) {
return localStorageAppId;
}

//get app id
window.domain_list_app_id = {
[window.deriv_com_url]: "16929",
[window.deriv_me_url]: "1411",
[window.deriv_be_url]: "30767",
[window.webflow_domain]: "53503",
[window.staging_url]: "16303",
};

const specificDomainAppId = {
[window.webflow_domain]: window.domain_list_app_id[window.webflow_domain],
[window.deriv_be_url]: window.domain_list_app_id[window.deriv_be_url],
[window.deriv_me_url]: window.domain_list_app_id[window.deriv_me_url],
[window.staging_url]: window.domain_list_app_id[window.staging_url],
};

if (specificDomainAppId[domainUrl]) {
return specificDomainAppId[domainUrl];
}

return window.domain_list_app_id[window.deriv_com_url];
};
4 changes: 3 additions & 1 deletion src/js/footer/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// All the footer js files should be imported and exported from here
import "./helper";
import "./helper"; // always keep this at the top
import "./websocket" // always keep this at the top
import "./clientsCountryCookie"
import "./updateUrlAsPerLanguage";
import "./footerComponent/index.js";
import "./dynamicCtaLabels/index.js";
Expand Down
79 changes: 79 additions & 0 deletions src/js/footer/websocket/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
window.establishWebSocketConnection = () => {
return new Promise((resolve, reject) => {
const langCookie = getCookieByKey(document.cookie, "webflow-user-language");
const language = langCookie ? langCookie.toLowerCase() : "en";
const server_url =
localStorage.getItem("config.server_url") || "green.derivws.com";
window.websocket = new WebSocket(
`wss://${server_url}/websockets/v3?app_id=${window.getAppId()}&l=${
language || "en"
}&brand=deriv`
);
window.websocket.addEventListener("open", (event) => {
// Add event listener for close event to clear the interval
window.websocket.addEventListener("close", () => {
window.websocket.close();
});

// subscribe to `message` event
window.websocket.addEventListener("message", (event) => {
const receivedMessage = JSON.parse(event.data);
});

resolve(window.websocket);
});

window.websocket.addEventListener("error", (error) => {
console.error("WebSocket connection error:", error);
window?.websocket?.close();
reject(error);
});
});
};

window.socketMessageSend = async (message, message_type) => {
try {
if (
!window?.websocket ||
window?.websocket?.readyState !== WebSocket?.OPEN
) {
return establishWebSocketConnection()
.then(() => {
websocket.send(message);
return new Promise((resolve, reject) => {
websocket.addEventListener("message", (event) => {
const data = JSON.parse(event.data);
if (message_type === data.msg_type) {
if (data.error) {
reject(data.error);
} else {
resolve(data);
}
}
});
});
})
.catch((error) => {
console.error("Failed to establish WebSocket connection:", error);
return Promise.reject(error);
});
} else {
window.websocket.send(message);
return new Promise((resolve, reject) => {
window.websocket.addEventListener("message", (event) => {
const data = JSON.parse(event.data);
if (message_type === data.msg_type) {
if (data.error) {
reject(data.error);
} else {
resolve(data);
}
}
});
});
}
} catch (error) {
console.error("An error occurred:", error);
return Promise.reject(error);
}
};

0 comments on commit 272b8a2

Please sign in to comment.