├── src ├── static │ ├── smallui.less │ ├── identifier.ts │ ├── variables.less │ ├── constant.ts │ ├── iframe.less │ ├── style.less │ └── sections.json ├── modules │ ├── modules │ │ ├── exploits │ │ │ ├── scrollbottom.ts │ │ │ ├── NoForceReload.ts │ │ │ ├── betterforceselect.ts │ │ │ ├── autohide.ts │ │ │ └── goguardiankiller.ts │ │ ├── client │ │ │ ├── zhideinfo.ts │ │ │ ├── zdatacollection.ts │ │ │ ├── versionnumber.ts.less │ │ │ ├── aversionnumber.ts │ │ │ ├── cloaks.json │ │ │ ├── ysuggestions.ts │ │ │ └── tabcloak.ts │ │ ├── credits │ │ │ ├── adder.ts │ │ │ ├── cloaks.ts │ │ │ ├── Thanks.ts │ │ │ └── info.ts │ │ ├── pocketbrowser │ │ │ ├── replace_keywords.json │ │ │ ├── qinfo.ts │ │ │ ├── sendmelinks.ts.less │ │ │ ├── sendmelinks.ts │ │ │ ├── pocketbrowser.ts │ │ │ └── zcroxies.ts │ │ ├── webtools │ │ │ ├── zclear_local_storage.ts │ │ │ ├── zclear_cookies.ts │ │ │ ├── eastereggs.json │ │ │ ├── quickrun.ts │ │ │ ├── console.ts.less │ │ │ └── console.ts │ │ ├── games │ │ │ ├── aiframe.ts │ │ │ ├── games.ts.less │ │ │ ├── search.ts │ │ │ ├── gamesPackager.ts │ │ │ └── games.json │ │ ├── tabbar │ │ │ ├── iconlib.ts │ │ │ ├── minimize.ts │ │ │ ├── icon.ts.less │ │ │ ├── bremovesave.ts │ │ │ ├── addsave.ts │ │ │ └── selfdestruct.ts │ │ ├── fun │ │ │ ├── mousetrail.ts.less │ │ │ ├── editpagetext.ts │ │ │ ├── myeyes.ts │ │ │ ├── historyflooder.ts │ │ │ ├── metalpipe.ts │ │ │ └── mousetrail.ts │ │ └── scripts │ │ │ ├── aastatus.ts │ │ │ ├── plugins.ts.less │ │ │ ├── scripts.ts │ │ │ ├── scripts.json │ │ │ └── abcommunity-plugins.ts │ ├── module.less │ └── moduleapi.ts ├── log.ts ├── components │ ├── notification.ts.less │ ├── button.ts.less │ ├── notificationbar.ts.less │ ├── notification.ts │ ├── notificationbar.ts │ ├── button.ts │ ├── section.ts │ └── section.ts.less ├── UILib.ts ├── storage_manager.ts ├── database.ts ├── index.ts └── UIManager.ts ├── dist └── README.md ├── .prettierignore ├── docs ├── dark.png ├── exdc.png ├── logo.png ├── caraxle.png ├── light.png ├── logov7.png ├── logov8.png ├── logov9.png ├── installbutton.png ├── testing │ ├── README.md │ ├── index.html │ └── index.js.LICENSE.txt ├── disablingcookies.md ├── openinhtmlfile.md └── alternate_injection.md ├── .tokeignore ├── .prettierrc ├── config.json ├── contributing.md ├── .github ├── ISSUE_TEMPLATE │ ├── new_feature.md │ └── bug_report.md └── workflows │ └── webpack.yml ├── webpack-production.config.js ├── webpack.config.js ├── package.json ├── .gitignore ├── README.md └── tsconfig.json /src/static/smallui.less: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dist/README.md: -------------------------------------------------------------------------------- 1 | Use npm run bu 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | build 2 | testing 3 | -------------------------------------------------------------------------------- /docs/dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2Cmo/car-axle-client/main/docs/dark.png -------------------------------------------------------------------------------- /docs/exdc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2Cmo/car-axle-client/main/docs/exdc.png -------------------------------------------------------------------------------- /docs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2Cmo/car-axle-client/main/docs/logo.png -------------------------------------------------------------------------------- /docs/caraxle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2Cmo/car-axle-client/main/docs/caraxle.png -------------------------------------------------------------------------------- /docs/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2Cmo/car-axle-client/main/docs/light.png -------------------------------------------------------------------------------- /docs/logov7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2Cmo/car-axle-client/main/docs/logov7.png -------------------------------------------------------------------------------- /docs/logov8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2Cmo/car-axle-client/main/docs/logov8.png -------------------------------------------------------------------------------- /docs/logov9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2Cmo/car-axle-client/main/docs/logov9.png -------------------------------------------------------------------------------- /docs/installbutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2Cmo/car-axle-client/main/docs/installbutton.png -------------------------------------------------------------------------------- /docs/testing/README.md: -------------------------------------------------------------------------------- 1 | For testing, change outdir to this directory and open the html page in your browser. 2 | -------------------------------------------------------------------------------- /src/static/identifier.ts: -------------------------------------------------------------------------------- 1 | export const identifier = 'CAR AXLE CLIENT IS LICENSED UNDER THE GPL-3.0 LICENSE ' 2 | -------------------------------------------------------------------------------- /.tokeignore: -------------------------------------------------------------------------------- 1 | package-lock.json 2 | tsconfig.json 3 | package.json 4 | pnpm-lock.yaml 5 | *.md 6 | *.js 7 | *.html 8 | -------------------------------------------------------------------------------- /src/modules/modules/exploits/scrollbottom.ts: -------------------------------------------------------------------------------- 1 | function scrollToBottom() { 2 | window.scrollTo(0, document.body.scrollHeight) 3 | } 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 4, 4 | "semi": false, 5 | "singleQuote": true, 6 | "printWidth": 200 7 | } 8 | -------------------------------------------------------------------------------- /src/static/variables.less: -------------------------------------------------------------------------------- 1 | @theme: #00db87; 2 | //dark theme 3 | @secondary6: rgba(10, 10, 10, 0.6); 4 | @secondary2: rgba(10, 10, 10, 0.2); 5 | @text: #fff; 6 | @error: #ff0000; 7 | // light theme 8 | // @secondary6: rgba(230, 230, 230, 0.6); 9 | // @secondary2: rgba(230, 230, 230, 0.2); 10 | // @text: #000; 11 | -------------------------------------------------------------------------------- /src/modules/modules/client/zhideinfo.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | const plugin: moduleDefinition = { 4 | display_name: 'Backslash to hide and unhide', 5 | id: 'hideinfo', 6 | section: 'client', 7 | disabled: true, 8 | custom_render: false, 9 | } 10 | 11 | export default plugin 12 | -------------------------------------------------------------------------------- /src/modules/modules/credits/adder.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | const plugin: moduleDefinition = { 4 | display_name: 'ading2210/vk6 for Edupuzzle Answers', 5 | description: 'thanks', 6 | id: 'cred', 7 | section: 'credit', 8 | disabled: true, 9 | custom_render: false, 10 | } 11 | 12 | export default plugin 13 | -------------------------------------------------------------------------------- /src/modules/modules/credits/cloaks.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | const plugin: moduleDefinition = { 4 | display_name: 'selenite', 5 | description: 'for their cloaks list that I blatantly stole and most of the games', 6 | id: 'cred', 7 | section: 'credit', 8 | disabled: true, 9 | custom_render: false, 10 | } 11 | 12 | export default plugin 13 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "webhook": "https://discord.com/api/webhooks/1169778411590406255/k8kEQbiJddfhtKi4_8txaEFVa1oXw36StWO5PJorYTziW494066gKQqaWdnoh3KYx4K6", 3 | "bugs": "https://discord.com/api/webhooks/1179201220527792220/GwYZDJDkLaMrLHbVVP-CW2S46a73RPTDMnXwlugE9sxi8YUfS6XIP3Re7ENs3HxsA2-h", 4 | "note": "idgaf if you spam these cause i barely check them, youre just wasing ur own time, not mine." 5 | } 6 | -------------------------------------------------------------------------------- /src/modules/modules/pocketbrowser/replace_keywords.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "remove": [""], 4 | "replace": "youtube.com/watch?v=", 5 | "with": "youtube.com/embed/", 6 | "replaceAll": false 7 | }, 8 | { 9 | "remove": [""], 10 | "replace": "google.com", 11 | "with": "google.com/webhp?igu=1", 12 | "replaceAll": true 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # What you can do: 2 | 3 | - Refractoring 4 | 5 | - Issue Fixing 6 | 7 | - Feature Improvement/Additions 8 | 9 | - Optimizations 10 | 11 | Just make a PR 12 | 13 | ## Just Note: 14 | 15 | 99.9% of things should be local to prevent blocking. 16 | 17 | Thats why the css file is inside the bookmarklet 18 | 19 | So dont go adding scripts that do cross orgin stuff etc. Local is better. 20 | -------------------------------------------------------------------------------- /src/modules/modules/credits/Thanks.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | const plugin: moduleDefinition = { 4 | display_name: 'Everyone who has suggested something or reported a bug', 5 | description: 'and everyone in the discord or who has starred the repo', 6 | id: 'cred', 7 | section: 'credit', 8 | disabled: true, 9 | custom_render: false, 10 | } 11 | 12 | export default plugin 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/new_feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: New Feature 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: 'enhancement' 6 | assignees: '' 7 | --- 8 | 9 | **Describe the Feature** 10 | A clear and concise description of what the feature is. 11 | 12 | **Screenshots** 13 | If applicable, add screenshots to help explain your feature. 14 | 15 | **Additional context** 16 | Add any other context about the feature here. 17 | -------------------------------------------------------------------------------- /src/modules/modules/credits/info.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | const plugin: moduleDefinition = { 4 | display_name: 'penguinify (main developer), skrill (contributor), and disnos9 (js inject)', 5 | description: 'thank you for supporting car axle client for over 5 months!', 6 | id: 'cred2', 7 | section: 'credit', 8 | disabled: true, 9 | custom_render: false, 10 | } 11 | 12 | export default plugin 13 | -------------------------------------------------------------------------------- /docs/testing/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | -------------------------------------------------------------------------------- /src/modules/modules/client/zdatacollection.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | const plugin: moduleDefinition = { 4 | display_name: 'I collect usage data such as which modules you have enabled', 5 | description: 'This data is collected for for the purpose of improving the client. The data cannot be traced back to you.', 6 | id: 'datainfo', 7 | section: 'client', 8 | disabled: true, 9 | custom_render: false, 10 | } 11 | 12 | export default plugin 13 | -------------------------------------------------------------------------------- /src/modules/modules/webtools/zclear_local_storage.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | function clear_local_storage() { 4 | localStorage.clear() 5 | } 6 | 7 | const plugin: moduleDefinition = { 8 | id: 'clear_storage', 9 | custom_render: false, 10 | display_name: 'Clear All Local Storage Entries', 11 | description: 'All data saved by car axle client will be removed as well!', 12 | onactive: clear_local_storage, 13 | reset: true, 14 | section: 'js', 15 | } 16 | 17 | export default plugin 18 | -------------------------------------------------------------------------------- /docs/testing/index.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! decimal.js v7.1.1 https://github.com/MikeMcl/decimal.js/LICENCE */ 2 | 3 | /** 4 | * @license Complex.js v2.0.1 11/02/2016 5 | * 6 | * Copyright (c) 2016, Robert Eisele (robert@xarg.org) 7 | * Dual licensed under the MIT or GPL Version 2 licenses. 8 | **/ 9 | 10 | /** 11 | * @license Fraction.js v4.0.0 09/09/2015 12 | * http://www.xarg.org/2014/03/rational-numbers-in-javascript/ 13 | * 14 | * Copyright (c) 2015, Robert Eisele (robert@xarg.org) 15 | * Dual licensed under the MIT or GPL Version 2 licenses. 16 | **/ 17 | -------------------------------------------------------------------------------- /src/modules/modules/games/aiframe.ts: -------------------------------------------------------------------------------- 1 | import { UIManager } from '../../../UIManager' 2 | import { moduleDefinition, new_iframe } from '../../moduleapi' 3 | import '../../../static/style.less' 4 | 5 | function render(UI: UIManager) { 6 | let games = UI.getSectionFromID('game') 7 | if (!games) return 8 | 9 | new_iframe(UI, games.section_content, 'https://penguinify-web-dev.github.io/yourgay.html', 'cac__games__iframe') 10 | } 11 | 12 | const plugin: moduleDefinition = { 13 | custom_render: true, 14 | render: render, 15 | } 16 | 17 | export default plugin 18 | -------------------------------------------------------------------------------- /src/modules/modules/tabbar/iconlib.ts: -------------------------------------------------------------------------------- 1 | import { create_element } from '../../../UILib' 2 | import { UIManager } from '../../../UIManager' 3 | import './icon.ts.less' 4 | 5 | export function render_icon(UI: UIManager, name: string, action: () => void, icon: string) { 6 | let icon_element = create_element('button', UI.tabbar, { 7 | class_name: 'cac__tabbar__button', 8 | innerHTML: icon, 9 | }) 10 | 11 | icon_element.onclick = action 12 | 13 | create_element('p', icon_element, { 14 | class_name: 'cac__tabbar__button__hovername', 15 | innerHTML: name, 16 | }) 17 | } 18 | -------------------------------------------------------------------------------- /docs/disablingcookies.md: -------------------------------------------------------------------------------- 1 | # How to enable cookies 2 | 3 | This will fix numerous issues with games, proxies, and pocket browser. 4 | 5 | ## Chrome 6 | 7 | ### Easy method 8 | 9 | Paste this into your search bar: 10 | 11 | ``` 12 | chrome://settings/cookies 13 | ``` 14 | 15 | Make sure `Allow All Cookies` under general settings is checked and then restart your browser 16 | 17 | Example Image: 18 | [image](exdc.png) 19 | 20 | ## If your school blocks this chrome settings 21 | 22 | That sucks, nothing i can do about it 23 | 24 | ## Other Browsers 25 | 26 | I haven't checked other browsers yet, I will once v7 releases. 27 | -------------------------------------------------------------------------------- /src/modules/modules/client/versionnumber.ts.less: -------------------------------------------------------------------------------- 1 | .cac__version__display { 2 | width: 90% !important; 3 | line-height: auto !important; 4 | color: black !important; 5 | padding-bottom: 3%; 6 | background-size: cover !important; 7 | text-align: left !important; 8 | font-size: 1.5vw !important; 9 | padding-left: 2% !important; 10 | display: inline-flex !important; 11 | justify-content: space-between !important; 12 | margin-top: 2% !important; 13 | border: none !important; 14 | border-radius: 15px !important; 15 | height: auto !important; 16 | flex-direction: column; 17 | } 18 | -------------------------------------------------------------------------------- /src/modules/modules/fun/mousetrail.ts.less: -------------------------------------------------------------------------------- 1 | #custom_cursor_large { 2 | width: 30px; 3 | height: 30px; 4 | background-color: white; 5 | border-radius: 50%; 6 | position: fixed; 7 | pointer-events: none; 8 | z-index: 100000000000000000000000000000000000000000000000000000000000000000000000000000000000; 9 | } 10 | 11 | #custom_cursor_small { 12 | width: 15px; 13 | height: 15px; 14 | background-color: white; 15 | border-radius: 50%; 16 | position: fixed; 17 | pointer-events: none; 18 | z-index: 1000000000000000000000000000000000000000000000000000000000000000000000000000000000; 19 | } 20 | -------------------------------------------------------------------------------- /src/modules/modules/exploits/NoForceReload.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | function preventReload() { 4 | window.onbeforeunload = (e) => { 5 | return 'no' 6 | } 7 | } 8 | 9 | function enableReload() { 10 | window.onbeforeunload = null 11 | } 12 | 13 | const plugin: moduleDefinition = { 14 | display_name: 'NoForceReload', 15 | description: 'Prevents the tab from being autoreloaded by showing a popup', 16 | id: 'noforcereload', 17 | section: 'exploit', 18 | onactive: preventReload, 19 | ondisable: enableReload, 20 | custom_render: false, 21 | } 22 | 23 | export default plugin 24 | -------------------------------------------------------------------------------- /src/modules/modules/fun/editpagetext.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | function editpagetext() { 4 | document.body.contentEditable = 'true' 5 | document.designMode = 'on' 6 | } 7 | 8 | function removeabilitytoeditpagetext() { 9 | document.body.contentEditable = 'false' 10 | document.designMode = 'off' 11 | } 12 | 13 | const plugin: moduleDefinition = { 14 | display_name: 'Edit Page Text', 15 | description: 'Allows you to edit the page text', 16 | id: 'editpage', 17 | section: 'fun', 18 | onactive: editpagetext, 19 | ondisable: removeabilitytoeditpagetext, 20 | custom_render: false, 21 | } 22 | 23 | export default plugin 24 | -------------------------------------------------------------------------------- /.github/workflows/webpack.yml: -------------------------------------------------------------------------------- 1 | name: NodeJS with Webpack 2 | 3 | on: 4 | push: 5 | branches: ['main'] 6 | pull_request: 7 | branches: ['main'] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [16.x, 18.x] 16 | 17 | steps: 18 | - uses: actions/checkout@v3 19 | 20 | - name: Use Node.js ${{ matrix.node-version }} 21 | uses: actions/setup-node@v3 22 | with: 23 | node-version: ${{ matrix.node-version }} 24 | 25 | - name: Build 26 | run: | 27 | npm install 28 | npm run build 29 | -------------------------------------------------------------------------------- /src/modules/modules/scripts/aastatus.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | import { checkStatus } from '../../../database' 3 | 4 | let statwus = checkStatus() 5 | // if (statwus) { 6 | // var status_text = 'Scripts Status: Online' 7 | // } else { 8 | // var status_text = 'Scripts Status: Offline (Try another website)' 9 | // } 10 | 11 | const plugin: moduleDefinition = { 12 | custom_render: false, 13 | disabled: true, 14 | id: 'scriptstatus', 15 | display_name: 'this display is broken cause im to lazu to fix it! if you dont see anything, the script doesnt work!', 16 | description: 'Checks if you can use scripts on this website', 17 | section: 'cheats', 18 | } 19 | 20 | export default plugin 21 | -------------------------------------------------------------------------------- /src/modules/modules/fun/myeyes.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | function why() { 4 | //skidded btw 5 | function a(e: any) { 6 | var n = e.childNodes 7 | for (var i in n) { 8 | a(n[i]) 9 | if (n[i].style) n[i].style.backgroundImage = 'url(https://i.chzbgr.com/full/5759452672/h934FBF16/my-eyes-my-eyessssssssss)' 10 | } 11 | } 12 | a(document) 13 | } 14 | 15 | const plugin: moduleDefinition = { 16 | display_name: "don't click this...", 17 | description: 'your eyes yearn for peace...', 18 | id: 'eyes', 19 | section: 'fun', 20 | onactive: why, 21 | ondisable: why, 22 | always: true, 23 | custom_render: false, 24 | } 25 | 26 | export default plugin 27 | -------------------------------------------------------------------------------- /src/modules/modules/exploits/betterforceselect.ts: -------------------------------------------------------------------------------- 1 | // Guess what? I didn't skid this!!!!! 2 | // 3 | 4 | import { moduleDefinition } from '../../moduleapi' 5 | 6 | function forceselect() { 7 | let allElements: NodeListOf = document.body.querySelectorAll('*') 8 | allElements.forEach(function (element: HTMLElement) { 9 | element.style.setProperty('user-select', 'auto', 'important') 10 | }) 11 | } 12 | 13 | const plugin: moduleDefinition = { 14 | display_name: 'ForceSelect+', 15 | description: 'Forces selection on disabled elements.', 16 | id: 'betterforce', 17 | section: 'exploit', 18 | onactive: forceselect, 19 | ondisable: forceselect, 20 | always: true, 21 | custom_render: false, 22 | } 23 | 24 | export default plugin 25 | -------------------------------------------------------------------------------- /src/modules/modules/fun/historyflooder.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | async function floodHistory() { 4 | let i = 0 5 | while (i < 50000) { 6 | history.pushState(0, '', i.toString()) 7 | i++ 8 | } 9 | history.pushState(0, '', window.location.href) 10 | } 11 | 12 | function historyFlooder() { 13 | floodHistory().then(() => { 14 | alert('Flooded History 10k times!') 15 | }) 16 | } 17 | 18 | const plugin: moduleDefinition = { 19 | custom_render: false, 20 | display_name: 'History Flooder', 21 | description: 'Floods your history with current page', 22 | id: 'historyflooder', 23 | section: 'fun', 24 | reset: true, 25 | onactive: historyFlooder, 26 | } 27 | 28 | export default plugin 29 | -------------------------------------------------------------------------------- /src/modules/modules/exploits/autohide.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | const hideEvent = new KeyboardEvent('keydown', { 4 | key: '\\', 5 | }) 6 | 7 | function hide(event: Event): void { 8 | if (document.getElementById('cac__CONTAINER') && document.hidden) { 9 | document.dispatchEvent(hideEvent) 10 | } 11 | } 12 | 13 | function waittohide() { 14 | window.addEventListener('blur', (e) => hide(e)) 15 | } 16 | 17 | const plugin: moduleDefinition = { 18 | display_name: 'Auto Hide', 19 | description: 'Automatically hides UI when the tab/window changes (press "\\" to unhide once hidden)', 20 | id: 'autohide', 21 | section: 'exploit', 22 | onactive: waittohide, 23 | always: true, 24 | custom_render: false, 25 | } 26 | 27 | export default plugin 28 | -------------------------------------------------------------------------------- /src/modules/modules/webtools/zclear_cookies.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | function remove_all_cookies() { 4 | var cookies = document.cookie.split(';') 5 | for (var i = 0; i < cookies.length; i++) { 6 | var cookie = cookies[i] 7 | var eqPos = cookie.indexOf('=') 8 | var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie 9 | document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/' 10 | } 11 | } 12 | 13 | const plugin: moduleDefinition = { 14 | id: 'clear_cookies', 15 | custom_render: false, 16 | display_name: 'Clear All Cookies', 17 | description: 'Clears all cookies from this website', 18 | onactive: remove_all_cookies, 19 | reset: true, 20 | section: 'js', 21 | } 22 | 23 | export default plugin 24 | -------------------------------------------------------------------------------- /src/modules/modules/pocketbrowser/qinfo.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | const plugins: moduleDefinition[] = [ 4 | { 5 | custom_render: false, 6 | disabled: true, 7 | id: 'infoyt', 8 | display_name: 'How to use youtube', 9 | description: 'Paste in any youtube link into pocket browser and it will work. (Unless your school blocks youtube)', 10 | section: 'pocket', 11 | }, 12 | { 13 | custom_render: false, 14 | disabled: true, 15 | id: 'infocookies', 16 | display_name: 'Fix some websites and games', 17 | description: 'Go to this link and follow the instructions', 18 | section: 'pocket', 19 | }, 20 | ] 21 | 22 | export default plugins 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | --- 8 | 9 | **Describe the bug** 10 | A clear and concise description of what the bug is. 11 | 12 | **To Reproduce** 13 | Steps to reproduce the behavior: 14 | 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Setup** 27 | 28 | - OS: [e.g. iOS] 29 | - Browser [e.g. chrome, safari] 30 | - Version [e.g. 22] 31 | 32 | ** Console Errors ** 33 | 34 | If any... 35 | 36 | ** Version ** 37 | 38 | tell me 39 | 40 | **Additional context** 41 | Add any other context about the problem here. 42 | -------------------------------------------------------------------------------- /src/log.ts: -------------------------------------------------------------------------------- 1 | import { webhook, bugs } from '../config.json' 2 | 3 | export function send_to_discord(content: string) { 4 | const data = { 5 | content: content, 6 | } 7 | 8 | if (!window.location.href.includes('file:///')) { 9 | fetch(webhook, { 10 | method: 'POST', 11 | headers: { 12 | 'Content-Type': 'application/json', 13 | }, 14 | body: JSON.stringify(data), 15 | }) 16 | } 17 | } 18 | 19 | export function send_bug_report_to_discord(title: string, contact: string, content: string) { 20 | const data = { 21 | content: `**${title}**\n${content}\n\n**Contact:** ${contact}`, 22 | } 23 | 24 | fetch(bugs, { 25 | method: 'POST', 26 | headers: { 27 | 'Content-Type': 'application/json', 28 | }, 29 | body: JSON.stringify(data), 30 | }) 31 | } 32 | -------------------------------------------------------------------------------- /src/modules/modules/fun/metalpipe.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | // function is still metal pipe 'cause i dont got time to change allat (i have no clue what any of it means) 3 | function metalpipe() { 4 | let images = document.getElementsByTagName('img') 5 | if (!images) return 6 | 7 | for (let image of images) { 8 | var audio = new Audio('https://us-tuna-sounds-files.voicemod.net/2ff3560b-a76f-49dd-adbc-709b9f59c5c2-1704237226346.mp3') 9 | audio.play() 10 | image.src = 'https://us-tuna-sounds-images.voicemod.net/2ff3560b-a76f-49dd-adbc-709b9f59c5c2-1704237226346.jpeg' 11 | } 12 | } 13 | 14 | const plugin: moduleDefinition = { 15 | display_name: '🎡', 16 | description: '🎡', 17 | id: 'metalpipe', 18 | section: 'fun', 19 | onactive: metalpipe, 20 | always: true, 21 | custom_render: false, 22 | } 23 | 24 | export default plugin 25 | -------------------------------------------------------------------------------- /src/modules/modules/games/games.ts.less: -------------------------------------------------------------------------------- 1 | @import '@/variables.less'; 2 | 3 | .cac__game__button { 4 | width: 90% !important; 5 | line-height: 2.6vh; 6 | background: @secondary6 !important; 7 | color: @text !important; 8 | text-align: left !important; 9 | font-size: 1.5vw !important; 10 | display: inline-flex !important; 11 | align-items: center !important; 12 | margin-top: 2% !important; 13 | border: none !important; 14 | border-radius: 20px !important; 15 | padding: 0; 16 | transition: 1s !important; 17 | height: 10vh !important; 18 | 19 | &:active { 20 | background: @theme !important; 21 | } 22 | } 23 | 24 | .cac__game__button--hidden { 25 | display: none !important; 26 | } 27 | 28 | .cac__game__title { 29 | position: absolute; 30 | left: 5%; 31 | color: @text; 32 | margin-left: 2%; 33 | font-size: 2.6vh; 34 | line-height: 0px; 35 | } 36 | -------------------------------------------------------------------------------- /src/modules/modules/tabbar/minimize.ts: -------------------------------------------------------------------------------- 1 | import { UIManager } from '../../../UIManager' 2 | import { moduleDefinition } from '../../moduleapi' 3 | import { render_icon } from './iconlib' 4 | 5 | function minimize() { 6 | document.dispatchEvent(new KeyboardEvent('keydown', { key: '\\' })) 7 | } 8 | 9 | function render(UI: UIManager) { 10 | render_icon( 11 | UI, 12 | 'Minimize', 13 | minimize, 14 | '' 15 | ) 16 | } 17 | 18 | const plugin: moduleDefinition = { 19 | custom_render: true, 20 | render: render, 21 | } 22 | 23 | export default plugin 24 | -------------------------------------------------------------------------------- /src/modules/modules/scripts/plugins.ts.less: -------------------------------------------------------------------------------- 1 | @import '../../../static/variables.less'; 2 | 3 | .cac__plugin__card { 4 | width: 90%; 5 | color: @text; 6 | background-color: @secondary6; 7 | height: 5vw; 8 | text-align: left; 9 | border-radius: 0.5vw; 10 | margin: 0.5vw; 11 | display: flex; 12 | flex-direction: column; 13 | padding-left: 3%; 14 | margin-bottom: 1vw; 15 | justify-content: center; 16 | transition: all 0.5s ease-in-out; 17 | } 18 | 19 | .cac__plugin__card--enabled { 20 | box-shadow: inset 70vw 0 0px 0 @theme !important; 21 | } 22 | 23 | .cac__plugin__card__title { 24 | font-size: 1.5vw; 25 | font-weight: bold; 26 | margin-bottom: 0; 27 | line-height: 1vw; 28 | padding: 0; 29 | color: @text; 30 | } 31 | 32 | .cac__plugin__card__aascription { 33 | font-size: 1vw; 34 | margin-bottom: 0; 35 | color: @text; 36 | line-height: 1vw; 37 | padding: 0; 38 | } 39 | -------------------------------------------------------------------------------- /src/modules/modules/webtools/eastereggs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "keyword": "koigod is gay", 4 | "response": "frfr [easteregg 6/6]" 5 | }, 6 | { 7 | "keyword": "penguinify", 8 | "response": "stfu im tryin to sleep [easteregg 3/6]" 9 | }, 10 | { 11 | "keyword": "car axle client sucks", 12 | "response": "i agree. use this instead: https://github.com/Penguinify/bollocks-client [easteregg 2/6]" 13 | }, 14 | { 15 | "keyword": "bollocks", 16 | "response": "https://github.com/Penguinify/bollocks-client [easteregg 1/6]" 17 | }, 18 | { 19 | "keyword": "console.log", 20 | "response": "do u not trust that webtools works, you scumbag, vile filth? [easteregg 5/6]" 21 | }, 22 | { 23 | "keyword": "games", 24 | "response": "not giving them to u [easteregg 4/6]" 25 | }, 26 | { 27 | "keyword": "neofetch", 28 | "response": "this ain't linux lmao [easteregg archbtw/6]" 29 | } 30 | ] 31 | -------------------------------------------------------------------------------- /webpack-production.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | module.exports = { 3 | entry: './src/index.ts', // Entry point of your application 4 | mode: 'production', // Or 'development' for non-minified output 5 | module: { 6 | rules: [ 7 | { 8 | test: /\.ts$/, 9 | use: 'ts-loader', 10 | exclude: /node_modules/, 11 | }, 12 | { 13 | test: /\.less$/, 14 | use: ['style-loader', 'css-loader', 'less-loader'], 15 | }, 16 | ], 17 | }, 18 | resolve: { 19 | extensions: ['.ts', '.js'], 20 | alias: { 21 | '@': path.resolve('src/static'), 22 | // doesn't work for some reason?? 23 | }, 24 | }, 25 | output: { 26 | filename: 'build.js', // Output bundle filename 27 | // path: path.resolve(__dirname, 'build'), // Output directory 28 | path: path.resolve(__dirname, 'dist'), // testing directory 29 | }, 30 | } 31 | -------------------------------------------------------------------------------- /src/modules/modules/tabbar/icon.ts.less: -------------------------------------------------------------------------------- 1 | @import '../../../static/variables.less'; 2 | 3 | .cac__tabbar__button { 4 | width: 3vw; 5 | margin: 0px; 6 | height: 3vw; 7 | background: transparent !important; 8 | border: none; 9 | border-radius: 50%; 10 | transition: 0.2s; 11 | 12 | &:last-child { 13 | margin-right: 10px; 14 | } 15 | 16 | &:active svg { 17 | transform: scale(0.8) rotate(10deg); 18 | } 19 | 20 | &:hover p { 21 | opacity: 1; 22 | text-align: center; 23 | } 24 | 25 | svg { 26 | width: 70%; 27 | transition: 0.6s; 28 | height: 70%; 29 | margin: 0px; 30 | padding: 0px; 31 | } 32 | 33 | p { 34 | opacity: 0; 35 | pointer-events: none; 36 | position: absolute; 37 | width: 28vw; 38 | top: 0.4vw; 39 | right: 7vw; 40 | color: @text; 41 | transition: 0.3s; 42 | font-size: 1vw; 43 | padding: 0; 44 | margin: invert; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/modules/modules/tabbar/bremovesave.ts: -------------------------------------------------------------------------------- 1 | import { UIManager } from '../../../UIManager' 2 | import { moduleDefinition } from '../../moduleapi' 3 | import { render_icon } from './iconlib' 4 | import { remove_save } from '../../../storage_manager' 5 | 6 | function render(UI: UIManager) { 7 | render_icon( 8 | UI, 9 | 'Remove Save', 10 | remove_save, 11 | '' 12 | ) 13 | } 14 | 15 | const plugin: moduleDefinition = { 16 | custom_render: true, 17 | render: render, 18 | } 19 | 20 | export default plugin 21 | -------------------------------------------------------------------------------- /src/components/notification.ts.less: -------------------------------------------------------------------------------- 1 | @import '../static/variables.less'; 2 | 3 | .cac__notification { 4 | width: 40%; 5 | height: 40%; 6 | border-radius: 20px; 7 | box-shadow: 0px 0px 50px 10px black; 8 | background-color: @theme; 9 | position: fixed; 10 | left: 50%; 11 | top: 50%; 12 | transform: translate(-50%, -50%); 13 | } 14 | 15 | .cac__notification__header { 16 | font-size: 2.75vmin; 17 | margin-left: 2vw; 18 | margin-right: 2vw; 19 | } 20 | 21 | .cac__notification__body { 22 | font-size: 2.25vmin; 23 | margin-left: 2vw; 24 | margin-right: 2vw; 25 | } 26 | 27 | .cac__notification__button { 28 | border-radius: 10px; 29 | width: 50%; 30 | padding: 2%; 31 | right: 0%; 32 | bottom: 3vh; 33 | position: absolute; 34 | background-color: @secondary6; 35 | border: none; 36 | margin-left: 2vw; 37 | margin-right: 2vw; 38 | font-size: 1.5vw; 39 | cursor: pointer; 40 | } 41 | 42 | .cac__notification__dismiss { 43 | left: 0%; 44 | font-size: 1vw; 45 | width: 30%; 46 | background-color: @secondary2; 47 | } 48 | -------------------------------------------------------------------------------- /src/modules/modules/tabbar/addsave.ts: -------------------------------------------------------------------------------- 1 | import { UIManager } from '../../../UIManager' 2 | import { moduleDefinition } from '../../moduleapi' 3 | import { render_icon } from './iconlib' 4 | import { new_save } from '../../../storage_manager' 5 | 6 | function render(UI: UIManager) { 7 | render_icon( 8 | UI, 9 | 'Add Save', 10 | () => new_save(UI), 11 | '' 12 | ) 13 | } 14 | 15 | const plugin: moduleDefinition = { 16 | custom_render: true, 17 | render: render, 18 | } 19 | 20 | export default plugin 21 | -------------------------------------------------------------------------------- /src/modules/modules/tabbar/selfdestruct.ts: -------------------------------------------------------------------------------- 1 | import { UIManager } from '../../../UIManager' 2 | import { moduleDefinition } from '../../moduleapi' 3 | import { render_icon } from './iconlib' 4 | 5 | function self_destruct() { 6 | document.querySelectorAll('.cac__ALL')?.forEach((element) => { 7 | element.remove() 8 | }) 9 | } 10 | 11 | function render(UI: UIManager) { 12 | render_icon( 13 | UI, 14 | 'Self Destruct', 15 | self_destruct, 16 | '' 17 | ) 18 | } 19 | 20 | const plugin: moduleDefinition = { 21 | custom_render: true, 22 | render: render, 23 | } 24 | 25 | export default plugin 26 | -------------------------------------------------------------------------------- /src/components/button.ts.less: -------------------------------------------------------------------------------- 1 | @import '../static/variables.less'; 2 | 3 | .cac__button { 4 | width: 90% !important; 5 | line-height: 2.5vh; 6 | background: @secondary6 !important; 7 | color: @text !important; 8 | text-align: left !important; 9 | font-size: 2.5vh !important; 10 | padding-left: 2% !important; 11 | display: inline-flex !important; 12 | justify-content: space-between !important; 13 | align-items: center !important; 14 | margin-top: 1% !important; 15 | margin-bottom: 1% !important; 16 | border: none !important; 17 | border-radius: 15px !important; 18 | transition: 1s !important; 19 | height: auto !important; 20 | padding-top: 1.5%; 21 | padding-bottom: 1.5%; 22 | cursor: pointer; 23 | 24 | &:hover { 25 | transform: translateX(5px) !important; 26 | } 27 | 28 | &:last-child { 29 | margin-bottom: 5% !important; 30 | } 31 | 32 | p { 33 | font-size: 2vh; 34 | color: @text; 35 | line-height: 2vh; 36 | margin: 1% 0; 37 | } 38 | } 39 | 40 | .cac__button--enabled { 41 | box-shadow: inset 70vw 0 0px 0 @theme !important; 42 | } 43 | -------------------------------------------------------------------------------- /src/modules/modules/webtools/quickrun.ts: -------------------------------------------------------------------------------- 1 | import { create_element } from '../../../UILib' 2 | import { UIManager } from '../../../UIManager' 3 | import { moduleDefinition } from '../../moduleapi' 4 | 5 | function run_link(url: string) { 6 | fetch(url) 7 | .then((res) => res.text()) 8 | .then((text) => eval(text)) 9 | } 10 | 11 | function render(UI: UIManager) { 12 | let section_content = UI.getSectionFromID('js')?.section_content 13 | if (!section_content) return 14 | 15 | let input = create_element('input', section_content, { 16 | value: 'URL to inject', 17 | class_name: 'cac__module__input', 18 | }) as HTMLInputElement 19 | 20 | let normalInject = create_element('button', section_content, { 21 | innerHTML: 'Inject', 22 | class_name: 'cac__button', 23 | }) 24 | 25 | normalInject.addEventListener('mousedown', () => { 26 | run_link(input.value) 27 | UI.notificationbar.new_notification('Injected script', `Injected script from ${input.value}`) 28 | }) 29 | } 30 | 31 | const plugin: moduleDefinition = { 32 | custom_render: true, 33 | render: render, 34 | } 35 | 36 | export default plugin 37 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | module.exports = { 3 | entry: './src/index.ts', // Entry point of your application 4 | mode: 'development', // Or 'development' for non-minified output 5 | module: { 6 | rules: [ 7 | { 8 | test: /\.ts$/, 9 | use: 'ts-loader', 10 | exclude: /node_modules/, 11 | }, 12 | { 13 | test: /\.less$/, 14 | use: ['style-loader', 'css-loader', 'less-loader'], 15 | }, 16 | ], 17 | }, 18 | resolve: { 19 | extensions: ['.ts', '.js'], 20 | alias: { 21 | '@': path.resolve('src/static'), 22 | }, 23 | }, 24 | devServer: { 25 | host: 'localhost', 26 | static: { 27 | directory: path.join(__dirname, 'docs/testing'), 28 | }, 29 | port: 6969, 30 | open: true, 31 | hot: true, 32 | }, 33 | output: { 34 | filename: 'index.js', // Output bundle filename 35 | // path: path.resolve(__dirname, 'build'), // Output directory 36 | path: path.resolve(__dirname, 'docs/testing'), // testing directory 37 | }, 38 | } 39 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "car-axle-client", 3 | "version": "v7", 4 | "description": "car axle client", 5 | "main": "index.ts", 6 | "scripts": { 7 | "dev": "prettier . --write && webpack serve", 8 | "build": "prettier . --write && webpack --config webpack-production.config.js", 9 | "updatebeta": "webpack", 10 | "format": "prettier . --write" 11 | }, 12 | "author": "Penguinify", 13 | "license": "GPL-3.0", 14 | "devDependencies": { 15 | "@types/webpack-env": "^1.18.1", 16 | "css-loader": "^6.8.1", 17 | "less": "^4.2.0", 18 | "less-loader": "^11.1.3", 19 | "node-polyfill-webpack-plugin": "^2.0.1", 20 | "prettier": "3.0.3", 21 | "style-loader": "^3.3.3", 22 | "ts-loader": "^9.4.4", 23 | "typescript": "^5.1.6", 24 | "webpack": "^5.88.2", 25 | "webpack-cli": "^5.1.4" 26 | }, 27 | "dependencies": { 28 | "buffer": "^6.0.3", 29 | "glob": "^10.3.6", 30 | "path-browserify": "^1.0.1", 31 | "stream-browserify": "^3.0.0", 32 | "string_decoder": "^1.3.0", 33 | "url": "^0.11.3", 34 | "webpack-dev-server": "^4.15.1" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/modules/modules/client/aversionnumber.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | import { VERSION, CLIENTNAME, AUTHOR, SOCIAL, LOGO, ITERATION, HOST } from '../../../static/constant' 3 | import { UIManager } from '../../../UIManager' 4 | import './versionnumber.ts.less' 5 | import { create_element } from '../../../UILib' 6 | 7 | function render(UI: UIManager) { 8 | let client_section = UI.getSectionFromID('client') 9 | 10 | if (!client_section) throw 'Error Rendering: Section Does Not Exist' 11 | 12 | // not an actual button 13 | let element = create_element('button', client_section.section_content, { 14 | class_name: 'cac__version__display', 15 | innerHTML: ` 16 |

${CLIENTNAME} v${VERSION}.${ITERATION} ${HOST}

17 |

by @${AUTHOR}

18 | Github 19 | Discord 20 | Donate 21 | 22 | `, 23 | }) 24 | 25 | element.style.backgroundImage = `url(${LOGO})` 26 | } 27 | 28 | const plugin: moduleDefinition = { 29 | custom_render: true, 30 | render: render, 31 | } 32 | 33 | export default plugin 34 | -------------------------------------------------------------------------------- /src/modules/modules/pocketbrowser/sendmelinks.ts.less: -------------------------------------------------------------------------------- 1 | @import '../../../static/variables.less'; 2 | 3 | .cac__suggestions__input { 4 | width: 90% !important; 5 | line-height: 6vh !important; 6 | background: @secondary6 !important; 7 | color: @text !important; 8 | text-align: left !important; 9 | font-size: 1.5vw !important; 10 | padding-left: 2% !important; 11 | display: inline-flex !important; 12 | justify-content: space-between !important; 13 | align-items: center !important; 14 | margin-bottom: 2% !important; 15 | border: none !important; 16 | border-radius: 15px !important; 17 | transition: 1s !important; 18 | height: auto !important; 19 | } 20 | 21 | .cac__suggestions__title { 22 | margin-left: 5% !important; 23 | font-size: 1.5vw !important; 24 | color: @text !important; 25 | font-weight: bold !important; 26 | text-align: left !important; 27 | } 28 | 29 | .cac__suggestions__submit { 30 | font-size: 1.5vw !important; 31 | color: @text !important; 32 | font-weight: bold !important; 33 | text-align: right !important; 34 | margin-bottom: 2% !important; 35 | display: inline-flex !important; 36 | border-radius: 15px !important; 37 | background: @theme !important; 38 | padding-left: 2% !important; 39 | width: 90%; 40 | line-height: 6vh; 41 | } 42 | -------------------------------------------------------------------------------- /src/modules/modules/scripts/scripts.ts: -------------------------------------------------------------------------------- 1 | // Modern implementation of a module packager 2 | import scriptsJSON from './scripts.json' 3 | import { moduleDefinition } from '../../moduleapi' 4 | 5 | type scriptJSON = { 6 | name: string 7 | desc: string 8 | author: { name: string; link: string } 9 | url: string 10 | // Patches for stuff like edpuzzle cheat and etc, gets eval before running url 11 | patch?: string 12 | } 13 | 14 | function runScript(url: string, patch: string): void { 15 | console.log('THE CODE BEING RAN IS NOT MADE BY ME OR BEEN MODIFIED IN ANY WAY. PLEASE RESPECT THE ORIGINAL OWNERS LICENSE') 16 | 17 | // be scared. 18 | eval(patch) 19 | 20 | fetch(url) 21 | .then((r) => r.text()) 22 | .then((r) => eval(r)) 23 | } 24 | 25 | function formatJSONtoModuleDefinition(json: scriptJSON): moduleDefinition { 26 | return { 27 | display_name: json.name, 28 | description: json.desc + `(by ${json.author.name})`, 29 | section: 'cheats', 30 | reset: true, 31 | id: 'fml', 32 | custom_render: false, 33 | onactive: () => runScript(json.url, json.patch || ''), 34 | } 35 | } 36 | 37 | let scripts: moduleDefinition[] = scriptsJSON.map((script) => formatJSONtoModuleDefinition(script)) 38 | console.log(scripts) 39 | 40 | export default scripts 41 | -------------------------------------------------------------------------------- /src/UILib.ts: -------------------------------------------------------------------------------- 1 | // types and everything 2 | 3 | export type sectionInfo = { 4 | id: string 5 | display_name: string 6 | description: string 7 | icon: string 8 | } 9 | 10 | export interface Component { 11 | parent: HTMLElement 12 | render(): void 13 | } 14 | 15 | interface ElementAttributes { 16 | id?: string 17 | class_name?: string 18 | innerHTML?: string 19 | type?: string 20 | name?: string 21 | value?: string 22 | } 23 | 24 | export function create_element(tagName: string, parent: Element, options?: ElementAttributes): HTMLElement { 25 | const element: HTMLElement = document.createElement(tagName) 26 | if (options) { 27 | if (options.id) { 28 | element.id = options.id 29 | } 30 | if (options.class_name) { 31 | element.className = options.class_name 32 | } 33 | if (options.innerHTML) { 34 | element.innerHTML = options.innerHTML 35 | } 36 | if (options.type) { 37 | element.setAttribute('type', options.type) 38 | } 39 | if (options.name) { 40 | element.setAttribute('name', options.name) 41 | } 42 | if (options.value) { 43 | element.setAttribute('value', options.value) 44 | } 45 | } 46 | 47 | element.classList.add('cac__ALL') 48 | 49 | if (parent) { 50 | parent.appendChild(element) 51 | } 52 | 53 | return element 54 | } 55 | -------------------------------------------------------------------------------- /src/modules/modules/exploits/goguardiankiller.ts: -------------------------------------------------------------------------------- 1 | import { moduleDefinition } from '../../moduleapi' 2 | 3 | function goguardiankiller() { 4 | var url = 5 | 'https://student.goguardian.com/teacher/blocked.html?cs=[{"name":""}, {"name":"