ERC Data Management tickets Warning Banner

Show warning banner for ERC Data Management tickets

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         ERC Data Management tickets Warning Banner
// @author       ambkavya
// @namespace    https://t.corp.amazon.com/
// @version      0.9
// @description  Show warning banner for ERC Data Management tickets
// @match        https://t.corp.amazon.com/*
// @match        https://t-integ.corp.amazon.com/*
// @grant        none
// @run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    // List of allowed submitters (banner won't show for these)
    const ALLOWED_SUBMITTERS = [
        'fluxo:flx-jarvis-smart',
        'arn:aws:sts::497802784642:assumed-role/CleStack-Prod-LambdaRole/CoralLambda-Prod',
        'arn:aws:sts::891377278984:assumed-role/StepUp-JobDataPersist-pro-StepUpDmTicketingLambdaRo-V1Pb8SXwoliu/StepUp-DmTicketingLambda-prod-pdx',
        'aws:sts::442458218920:assumed-role/SMFJDProcessor-Infra-prod-JdAggregatorLambdaServic-1I3WBUU5SGGYF/JdAggregatorLambda',
        'fluxo:flx-term',
        'jobcodechangeworkflow',
        'fluxo:flx-river',
        'arn:aws:sts::203724744875:assumed-role/CleStack-Prod-LambdaRole/CoralLambda-Prod',
        'arn:aws:sts::882224133502:assumed-role/CleStack-Prod-LambdaRole/CoralLambda-Prod',
        'arn:aws:sts::621709161046:assumed-role/CleStack-Prod-LambdaRole/CoralLambda-Prod',
        'jobs_domain_operations',
        'arn:aws:sts::883535878157:assumed-role/TicketyWorkerStack-prod-TicketCreationLambdaprod'


    ];

    // Wait for DOM to be ready
    function ready(fn) {
        if (document.readyState !== 'loading') {
            setTimeout(fn, 1000);
        } else {
            document.addEventListener('DOMContentLoaded', () => setTimeout(fn, 1000));
        }
    }

    // Check if we should show the banner
    function shouldShowBanner() {
        try {
            const pageText = document.body.textContent || '';
            // Return true if none of the allowed submitters are found
            return !ALLOWED_SUBMITTERS.some(submitter => pageText.includes(submitter));
        } catch (e) {
            return false;
        }
    }

    // Create and insert banner
    function insertBanner() {
        // Check if banner already exists
        if (document.getElementById('submitter-warning')) {
            return;
        }

        // Create banner element
        const banner = document.createElement('div');
        banner.id = 'submitter-warning';
        banner.innerHTML = `
            <div style="
                background-color: #cc0000;
                color: #ffffff;
                padding: 10px;
                margin: 60px auto;
                border: 1px solid #990000;
                border-radius: 4px;
                font-family: 'Amazon Ember', Arial, sans-serif;
                position: fixed;
                top: 0;
                left: 50%;
                transform: translateX(-50%);
                width: 80%;
                max-width: 800px;
                z-index: 9999;
                text-align: center;
                box-shadow: 0 2px 4px rgba(0,0,0,0.2);
            ">
                <p style="margin: 0; font-weight: bold; font-size: 16px;">
                    Note:This is a manually created SIM. Update root cause as JD/PID Manual ticket - Pushback/Exception.
                </p>
            </div>
        `;

        // Insert banner at top of body
        document.body.insertBefore(banner, document.body.firstChild);
    }

    // Remove existing banner
    function removeBanner() {
        const existingBanner = document.getElementById('submitter-warning');
        if (existingBanner) {
            existingBanner.remove();
        }
    }

    // Main function to check and manage banner
    function checkAndManageBanner() {
        if (shouldShowBanner()) {
            insertBanner();
        } else {
            removeBanner();
        }
    }

    // Initialize
    ready(() => {
        // Initial check
        checkAndManageBanner();

        // Set up periodic checks
        let checkCount = 0;
        const maxChecks = 5;
        const checkInterval = setInterval(() => {
            checkCount++;
            if (checkCount >= maxChecks) {
                clearInterval(checkInterval);
                return;
            }
            checkAndManageBanner();
        }, 2000);

        // Watch for URL changes and content updates
        let lastUrl = location.href;
        new MutationObserver(() => {
            if (location.href !== lastUrl) {
                lastUrl = location.href;
            }
            checkAndManageBanner();
        }).observe(document, {subtree: true, childList: true});
    });
})();