├── 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":"