This commit is contained in:
Kio 2025-04-29 04:36:16 -04:00
commit cd27f7e4af
12 changed files with 1786 additions and 0 deletions

34
.gitignore vendored Normal file
View file

@ -0,0 +1,34 @@
# dependencies (bun install)
node_modules
# output
out
dist
*.tgz
# code coverage
coverage
*.lcov
# logs
logs
_.log
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# caches
.eslintcache
.cache
*.tsbuildinfo
# IntelliJ based IDEs
.idea
# Finder (MacOS) folder config
.DS_Store

15
README.md Normal file
View file

@ -0,0 +1,15 @@
# pmicares
To install dependencies:
```bash
bun install
```
To run:
```bash
bun run index.ts
```
This project was created using `bun init` in bun v1.2.8. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.

164
bun.lock Normal file
View file

@ -0,0 +1,164 @@
{
"lockfileVersion": 1,
"workspaces": {
"": {
"name": "pmicares",
"dependencies": {
"electron": "^35.2.1",
},
"devDependencies": {
"@types/bun": "latest",
},
"peerDependencies": {
"typescript": "^5",
},
},
},
"packages": {
"@electron/get": ["@electron/get@2.0.3", "", { "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", "got": "^11.8.5", "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "optionalDependencies": { "global-agent": "^3.0.0" } }, "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ=="],
"@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="],
"@szmarczak/http-timer": ["@szmarczak/http-timer@4.0.6", "", { "dependencies": { "defer-to-connect": "^2.0.0" } }, "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="],
"@types/bun": ["@types/bun@1.2.10", "", { "dependencies": { "bun-types": "1.2.10" } }, "sha512-eilv6WFM3M0c9ztJt7/g80BDusK98z/FrFwseZgT4bXCq2vPhXD4z8R3oddmAn+R/Nmz9vBn4kweJKmGTZj+lg=="],
"@types/cacheable-request": ["@types/cacheable-request@6.0.3", "", { "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", "@types/node": "*", "@types/responselike": "^1.0.0" } }, "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw=="],
"@types/http-cache-semantics": ["@types/http-cache-semantics@4.0.4", "", {}, "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="],
"@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="],
"@types/node": ["@types/node@22.15.3", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw=="],
"@types/responselike": ["@types/responselike@1.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw=="],
"@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="],
"boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="],
"buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="],
"bun-types": ["bun-types@1.2.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-b5ITZMnVdf3m1gMvJHG+gIfeJHiQPJak0f7925Hxu6ZN5VKA8AGy4GZ4lM+Xkn6jtWxg5S3ldWvfmXdvnkp3GQ=="],
"cacheable-lookup": ["cacheable-lookup@5.0.4", "", {}, "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="],
"cacheable-request": ["cacheable-request@7.0.4", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^6.0.1", "responselike": "^2.0.0" } }, "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg=="],
"clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="],
"debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="],
"decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="],
"defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="],
"define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="],
"define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="],
"detect-node": ["detect-node@2.1.0", "", {}, "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="],
"electron": ["electron@35.2.1", "", { "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^22.7.7", "extract-zip": "^2.0.1" }, "bin": { "electron": "cli.js" } }, "sha512-LO4xXLpzkPPUVLvAbdHMlW7N9Z+Qqz+7QsmSWXluTIQMeJk+v7o36nUTZghyA2I1s//tlMvuaCtle6Qo2W0Ktg=="],
"end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="],
"env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="],
"es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
"es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
"es6-error": ["es6-error@4.1.1", "", {}, "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="],
"escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
"extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="],
"fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="],
"fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="],
"get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="],
"global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="],
"globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="],
"gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
"got": ["got@11.8.6", "", { "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", "@types/cacheable-request": "^6.0.1", "@types/responselike": "^1.0.0", "cacheable-lookup": "^5.0.3", "cacheable-request": "^7.0.2", "decompress-response": "^6.0.0", "http2-wrapper": "^1.0.0-beta.5.2", "lowercase-keys": "^2.0.0", "p-cancelable": "^2.0.0", "responselike": "^2.0.0" } }, "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g=="],
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
"has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="],
"http-cache-semantics": ["http-cache-semantics@4.1.1", "", {}, "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="],
"http2-wrapper": ["http2-wrapper@1.0.3", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" } }, "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg=="],
"json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="],
"json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="],
"jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="],
"keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="],
"lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="],
"matcher": ["matcher@3.0.0", "", { "dependencies": { "escape-string-regexp": "^4.0.0" } }, "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng=="],
"mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="],
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
"normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="],
"object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="],
"once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
"p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="],
"pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="],
"progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="],
"pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="],
"quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="],
"resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="],
"responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="],
"roarr": ["roarr@2.15.4", "", { "dependencies": { "boolean": "^3.0.1", "detect-node": "^2.0.4", "globalthis": "^1.0.1", "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" } }, "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A=="],
"semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
"semver-compare": ["semver-compare@1.0.0", "", {}, "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="],
"serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="],
"sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="],
"sumchecker": ["sumchecker@3.0.1", "", { "dependencies": { "debug": "^4.1.0" } }, "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg=="],
"type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="],
"typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="],
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
"universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="],
"wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
"yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="],
"clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="],
"global-agent/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="],
}
}

232
html/code.js Normal file
View file

@ -0,0 +1,232 @@
function updateClock() {
const now = new Date();
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
document.getElementById('clock').textContent = `${hours}:${minutes}:${seconds}`;
}
setInterval(updateClock, 1000);
updateClock();
// Handle Boot Sequence
const bootStrings = [
"Booting up...",
"Loading system files...",
"Initializing hardware...",
"Checking memory...",
"Establishing network connection...",
"Starting core services...",
"Loading user preferences...",
"Optimizing performance...",
"Finalizing setup...",
"System ready."
];
let indexBiosOption = 0;
const options = {
AndroidType: {
curval: 0,
types: {
0: "Normal",
1: "Syskor",
2: "Hostile - Different Company",
3: "Hostile - Rogue Android"
}
}
}
let booting = true;
let inBios = false; // Change to False when complete
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
if (inBios) {
document.getElementsByClassName("active")[0].classList.remove("active");
indexBiosOption = document.getElementById("BiosSelectables").children.length -1;
document.getElementById("BiosSelectables").children[indexBiosOption].classList.add("active");
console.log(indexBiosOption)
}
if (booting) {
inBios = true;
document.getElementById("BIOS").style.display = "flex";
}
}
if (inBios) {
switch (event.key) {
case 'ArrowUp':
document.getElementsByClassName("active")[0].classList.remove("active");
--indexBiosOption;
if (indexBiosOption <= -1) {
indexBiosOption = document.getElementById("BiosSelectables").children.length - 1;
}
document.getElementById("BiosSelectables").children[indexBiosOption].classList.add("active");
break;
case 'ArrowDown':
document.getElementsByClassName("active")[0].classList.remove("active");
++indexBiosOption;
if (indexBiosOption >= document.getElementById("BiosSelectables").children.length) {
indexBiosOption = 0;
}
document.getElementById("BiosSelectables").children[indexBiosOption].classList.add("active");
break;
case 'ArrowLeft': {
const activeElem = document.getElementsByClassName("active")[0];
if (activeElem.id === "emulator") {
options.AndroidType.curval--;
if (options.AndroidType.curval < 0) {
options.AndroidType.curval = Object.keys(options.AndroidType.types).length - 1;
}
console.log(`CurVal: ${options.AndroidType.curval} AndroidType: ${options.AndroidType.types[options.AndroidType.curval]}`);
activeElem.children[1].innerText = options.AndroidType.types[options.AndroidType.curval];
}
break;
}
case 'ArrowRight': {
const activeElem = document.getElementsByClassName("active")[0];
if (activeElem.id === "emulator") {
options.AndroidType.curval++;
if (options.AndroidType.curval >= Object.keys(options.AndroidType.types).length) {
options.AndroidType.curval = 0;
}
console.log(`CurVal: ${options.AndroidType.curval} AndroidType: ${options.AndroidType.types[options.AndroidType.curval]}`);
activeElem.children[1].innerText = options.AndroidType.types[options.AndroidType.curval];
}
break;
}
case 'Enter':
const activeElem = document.getElementsByClassName("active")[0];
if (activeElem.id === "discardrestart") {
options.AndroidType.curval = 0;
}
if (activeElem.id.includes("restart")) {
document.getElementById("bootText").innerHTML = "";
document.getElementById("BIOS").style.display = "none";
inBios = false;
boot();
break;
}
}
}
});
document.addEventListener('DOMContentLoaded', () => {window.electronAPI.dom();});
window.electronAPI.onNewMessage((message) => {
console.log(`Message from ${message.sender}: ${message.message}`);
if (document.getElementById("mnetext").innerHTML.length !== 0) document.getElementById("mnetext").innerHTML += '<br>'
document.getElementById('mnetext').innerText += `${message.message}`
document.getElementById("mnetext").scrollTop = document.getElementById("mnetext").scrollHeight;
});
const boot = async () => {
if (options.AndroidType.curval === 2 || options.AndroidType.curval === 3 ) {
document.body.style.backgroundColor = "red";
document.getElementById("startbar").innerText = "Hostile Android Detected. This is a Demonstration.";
if (options.AndroidType.curval === 2) {
document.getElementById("userinfo").innerHTML += "<br>Hostile Android Detected.<br>Company: BetterLeap<br>Unit Identifer: LUNA";
}
if (options.AndroidType.curval === 3) {
document.getElementById("userinfo").innerHTML += "<br>Hostile Android Detected.<br>BASIC Reports: Rogue Android";
}
}
if (options.AndroidType.curval === 1) {
document.getElementById("backlogo").children[0].innerText = "Syskor";
document.getElementById("userinfo").innerHTML += "<br>External Company Detected.<br>Company: Syskor";
}
if (!booting) return;
const boot = document.getElementById('bootText');
for (let i = 0; i < bootStrings.length; i++) {
const line = document.createElement('div');
line.className = 'boot-line';
line.textContent = bootStrings[i];
boot.appendChild(line);
await new Promise(resolve => { setTimeout(resolve, Math.random() * 1000 + 500) });
if (bootStrings[i] === "System ready." && !inBios) {
if (!inBios) {
booting = false;
boot.parentElement.classList.add('fadeout');
await new Promise(resolve => { setTimeout(resolve, 1000) });
boot.parentElement.remove();
document.getElementById("BIOS").remove();
}
}
}
}
document.getElementById("mneform").addEventListener("submit", (e) => {
e.preventDefault();
// document.getElementById("mnesubmit").addEventListener("click", () => {
const text = document.getElementById("mnesender").value;
if (text.length === 0) return;
document.getElementById("mnesender").value = "";
if (document.getElementById("mnetext").innerHTML.length !== 0) document.getElementById("mnetext").innerHTML += '<br>'
document.getElementById('mnetext').innerText += `${text}`
window.electronAPI.send(text);
document.getElementById("mnetext").scrollTop = document.getElementById("mnetext").scrollHeight;
})
boot()
const openWindow = (window) => {
const win = document.getElementById(window);
win.style.display = 'block';
}
const closeWindow = (window) => {
const win = document.getElementById(window);
win.style.display = 'none';
}
const exit = () => {
window.close();
}
for (const element of document.getElementsByClassName("app")) {
dragElement(element, true);
}
for (const element of document.getElementsByClassName("icon")) {
dragElement(element, false);
}
function dragElement(elmnt, isWindow) {
var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
if (isWindow) {
elmnt.children[0].onmousedown = dragMouseDown;
} else {
elmnt.onmousedown = dragMouseDown;
}
function dragMouseDown(e) {
e = e || window.event;
e.preventDefault();
pos3 = e.clientX;
pos4 = e.clientY;
elmnt.style.width = `${elmnt.offsetWidth}px`;
elmnt.style.height = `${elmnt.offsetHeight}px`;
document.onmouseup = closeDragElement;
document.onmousemove = elementDrag;
}
function elementDrag(e) {
e = e || window.event;
e.preventDefault();
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
elmnt.style.position = "absolute";
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
}
function closeDragElement() {
document.onmouseup = null;
document.onmousemove = null;
}
}

251
html/index.html Normal file
View file

@ -0,0 +1,251 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>PMI Secure Development Shell</title>
</head>
<body>
<!--
Hi! <3
You're here because you're amazing.
I made this code with a crapton of love.
<3
-->
<div id="BIOS">
<div id="innerBIOS">
<div id="top">==================== PMI ====================</div>
<br>
Welcome to the PMI SDS BIOS.<br>
Please use your arrow keys to navigate this menu.
<div id="BiosSelectables">
<div class="selection active" id="emulator">
<span class="title">Emulated Android Type</span>
&lt; <span class="option">Regular</span> &gt;
</div>
<div class="selection" id="saverestart">
<span class="title">Save & Restart</span>
</div>
<div class="selection" id="discardrestart">
<span class="title">Discard & Restart</span>
</div>
</div>
<div id="top">==================== PMI ====================</div>
</div>
</div>
<div id="boot">
<div id="bootText"></div>
<div id="bootLogo">
PMI
</div>
<div id="bootHelpText">
Press ESC to access options.<br>
&copy; 2&times;25, Personal Machinery InfoTechnology, Inc. All rights reserved.
</div>
</div>
<div id="backscreen">
<span id="clock">
.
</span>
<span id="backlogo">
<h1>PMI</h1>
<i>Secured Development Shell</i><br>
</span>
<span id="startbar">
This is a demonstration - You are not connected to an Android.</i>
</span>
</div>
<div id="userinfo">
Welcome, <b>Developer</b>!<br>
Your current tier: <b>Gold</b><br>
</div>
<div id="icons">
<span class="icon" ondblclick="openWindow('importFiles')">
<img src="https://win98icons.alexmeub.com/icons/png/directory_channels-2.png" alt="">
<p>Imported Files</p>
</span>
<span class="icon" ondblclick="openWindow('meshNetEmulator')">
<img src="https://win98icons.alexmeub.com/icons/png/entire_network_globe-3.png" alt="">
<p>MeshNet Emulator</p>
</span>
<span class="icon" ondblclick="openWindow('eventLog')">
<img src="https://win98icons.alexmeub.com/icons/png/template_empty-5.png" alt="">
<p>Event Log</p>
</span>
<span class="icon" ondblclick="openWindow('thoughtMatrix')">
<img src="https://win98icons.alexmeub.com/icons/png/regedit_binary-0.png" alt="">
<p>Thought Matrix</p>
</span>
</div>
<div id="exitCommands">
<span class="icon" ondblclick="openWindow('leaveEnvironment')">
<img src="https://win98icons.alexmeub.com/icons/png/shell_window2.png" alt="">
<p>Leave Environment</p>
</span>
</div>
<div id="apps">
<div class="app" id="leaveEnvironment">
<div class="titlebar">
<span class="title">Leave Environment</span>
</div>
<div class="content">
You are about to leave the Secured Environment and return to the main system.<br>
Are you sure you want to do this?<br>
<div class="buttons">
<button onclick="exit()" id="yes">Yes</button>
<button onclick="closeWindow('leaveEnvironment')" id="no">No</button>
</div>
</div>
</div>
<div class="app" id="importFiles">
<div class="titlebar">
<span class="title">Imported Files</span>
<button class="close-button" onclick="closeWindow('importFiles')">X</button>
</div>
<div class="content"
style="color: rgba(0,0,0,0.25); height: 300px; width: 500px; display: flex; align-items: center; justify-content: center;">
no files available.<br>
this is a demonstration.
<!-- Content goes here -->
</div>
</div>
<div class="app" id="meshNetEmulator">
<div class="titlebar">
<span class="title">MeshNet Emulator</span>
<button class="close-button" onclick="closeWindow('meshNetEmulator')">X</button>
</div>
<div class="content">
<div id="mnetext"></div>
<form id="mneform">
<input type="text" name="submittor" id="mnesender">
<input type="submit" value="Send" id="mnesubmit">
</form>
</div>
</div>
<div class="app" id="eventLog">
<div class="titlebar">
<span class="title">Event Log</span>
<button class="close-button" onclick="closeWindow('eventLog')">X</button>
</div>
<div class="content">
i'm gonna be honest, it's 4:30 AM and i don't want to write this right now<br>
sorry<br>
-- kio
</div>
</div>
<div class="app" id="thoughtMatrix">
<div class="titlebar">
<span class="title">Thought Matrix</span>
<button class="close-button" onclick="closeWindow('thoughtMatrix')">X</button>
</div>
<div class="content">
<table>
<tr>
<th></th>
<th>Core 1</th>
<th>Core 2</th>
<th>Core 3</th>
<th>Core 4</th>
<th>Core 5</th>
<th>Core 6</th>
</tr>
<tr>
<td>Thread 1</td>
<td>BASIC<br>
Monitoring</td>
<td></td>
<td>CORE<br>
Determining Logic Route (Trgt: 73% Correctness)</td>
<td></td>
<td>AUDIO<br>
Filtering Noise</td>
<td></td>
</tr>
<tr>
<td>Thread 2</td>
<td></td>
<td>CORE<br>
Providing Marketing Data</td>
<td></td>
<td>
TEACHER<br>
Reinforcing Behavior
</td>
<td></td>
<td>MESHNET<br>
Maintaining Grid Connection</td>
</tr>
<tr>
<td>Thread 3</td>
<td></td>
<td>VISUAL<br>
Processing Information</td>
<td>EMERGSYS<br>
Listening for Emergency<br>
Depends: 6,2</td>
<td>CORE<br>
Processing Complex Interaction<br>
Depends: 2,3;2,4;5</td>
<td></td>
<td>MESHNET<br>
Accessing Data<br>
Depends: 6,2</td>
</tr>
<tr>
<td>Thread 4</td>
<td></td>
<td>AUDIO<br>
Processing Speech<br>
Depends: 5,1</td>
<td>SAVER<br>
Maintaining ShortStorage</td>
<td>CORE<br>
Monitoring Inputs</td>
<td>CORE<br>
Stablizing Upright Position<br>
Depends: 4;5
</td>
<td></td>
</tr>
<tr>
<td>Thread 5</td>
<td></td>
<td>SAVER<br>
Maintaining LongStorage</td>
<td>CORE<br>
Providing Life Mimicry<br>
Depends: 2,3;2,4</td>
<td></td>
<td>SENSORY<br>
Processing EDC Data</td>
<td></td>
</tr>
<tr>
<td>Thread 6</td>
<td>TEACHER<br>
Monitoring 3rd Person Behavior</td>
<td>MESHNET<br>
Providing Relay Service<br>
Depends: 6,2</td>
<td></td>
<td>IVM<br>Voice: Standby</td>
<td></td>
<td>CORE<br>
Providing Expression<br>
Depends: 4,3</td>
</tr>
</table>
</div>
</div>
</div>
<script src="code.js"></script>
</body>
</html>

235
html/style.css Normal file
View file

@ -0,0 +1,235 @@
body {
background-color: gray;
overflow: hidden;
height: 100vh;
box-sizing: border-box;
margin: 0;
background-image: radial-gradient(rgba(10,10,10,.15) 10%, transparent 10%),
radial-gradient(rgba(10,10,10,.15) 10%, transparent 10%);
background-size: 20px 20px; /* Adjust the size of the dots */
background-position: 0 0, 10px 10px; /* Offset the second layer for perpendicular dots */
}
div.app {
z-index: 50;
display: none;
top: 45%;
left: 50%;
transform: translateX(-50%);
margin: auto;
width: fit-content;
height: fit-content;
min-width: 300px;
position: absolute;
background: #F0EAD6;
text-align: center;
}
div.app .titlebar {
background: blue;
align-items: center;
color: white;
justify-content: space-between;
display: flex;
padding-left: 5px;
user-select: none;
}
div.app .titlebar .close-button {
background: red;
color: white;
border: none;
padding: 5px 10px;
cursor: pointer;
border: none;
}
div.app .content {
padding: 10px;
border: 2px solid blue;
border-top: none;
}
div.app .content button {
margin-top: 10px;
}
#boot {
background: black;
color: white;
position: absolute;
height: 100vh;
width: 100vw;
z-index: 100000;
cursor: none;
}
#boot #bootHelpText {
position: absolute;
bottom: 15px;
right: 15px;
text-align: right;
}
#boot #bootLogo {
position: absolute;
top: 15px;
right: 30px;
font-size: 30px;
}
#mnetext {
height: 200px;
border: 1px solid black;
margin-bottom: 15px;
word-wrap: normal;
text-wrap: normal;
overflow-y: scroll;
}
#BIOS {
cursor: none;
display: none;
/* display: flex; */
z-index: 1000000;
position: absolute;
width: 100vw;
height: 100vh;
justify-content: center;
align-items: center;
background: blue;
}
#innerBIOS {
background: lightgray;
width: 500px;
filter: drop-shadow(-15px 15px 0 black);
padding: 15px;
}
#innerBIOS #top {
text-align: center;
}
#BiosSelectables .selection {
display: flex;
justify-content: space-between;
padding: 5px 15px;
}
#BiosSelectables .selection.active {
background: red;
}
.fadeout {
animation: fadeout 1s forwards;
animation-iteration-count: 1;
}
@keyframes fadeout {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
#backscreen {
height: 100vh;
display: flex;
align-items: center;
flex-direction: column;
justify-content: space-between;
}
#backscreen #clock {
padding-top: 10px;
user-select: none;
pointer-events: none;
}
#backscreen #backlogo {
pointer-events: none;
user-select: none;
text-align: center;
}
#backscreen #startbar {
margin-bottom: 10px;
padding: 2px 5px;
background: black;
color: white;
border: 3px solid black;
user-select: none;
}
#userinfo {
background: black;
color: white;
opacity: .25;
position: absolute;
bottom: 15px;
right: 15px;
text-align: right;
border: 2px solid black;
padding: 5px;
pointer-events: none;
user-select: none;
}
#exitCommands {
z-index: 40;
position: absolute;
top: 20px;
right: 30px;
text-align: center;
gap: 30px;
display: flex;
flex-direction: column;
width: 10%;
}
table {
border-collapse: collapse;
}
table td, table th {
border: 1px solid black;
}
table tr:first-child th {
border-top: 0;
}
table tr:last-child td {
border-bottom: 0;
}
table tr td:first-child,
table tr th:first-child {
border-left: 0;
}
table tr td:last-child,
table tr th:last-child {
border-right: 0;
}
span.icon {
cursor: pointer;
z-index: 101; /* Ensure it appears above other elements */
}
#apps {
width: 100vw;
}
#icons {
z-index: 40; /* Lower than the z-index of div.app */
position: absolute;
top: 20px;
left: 30px;
text-align: center;
gap: 30px;
display: flex;
flex-direction: column;
width: 10%;
}
span.icon p {
padding: 0;
text-align: center;
margin: 0;
}

69
index.js Normal file
View file

@ -0,0 +1,69 @@
import {app, BrowserWindow, ipcMain} from 'electron';
import irc from "node-irc";
import path from 'path';
import {fileURLToPath} from 'url';
const generateUID = () => {
return Math.random().toString(36).substr(2, 9);
};
const client = new irc(
'irc.libera.chat',
6667,
generateUID(),
generateUID()
)
let joinedIRC = false
client.on('ready', () => {
if(!joinedIRC) {
client.join("#PMISDE")
joinedIRC = true
}
})
let win;
const createWindow = () => {
win = new BrowserWindow({
webPreferences: {
preload: path.dirname(fileURLToPath(import.meta.url)) + '/prerender.js',
devTools: true,
nodeIntegration: true,
scrollBounce: false,
textAreasAreResizable: false,
}
});
win.fullScreen = true;
win.loadFile('html/index.html');
};
let domreadied = false
app.whenReady().then(() => {
client.connect();
ipcMain.on('message', (ev, text) => {
client.say("#PMISDE", text);
})
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
ipcMain.on('dom-ready', () => {
if (domreadied) return
domreadied = true
console.log("DOM READY!!!!!!")
client.on('CHANMSG', ({receiver, sender, message}) => {
if (receiver === "#PMISDE") {
win.webContents.send('speak', {sender, message})
}
console.log(`Message on ${receiver} from ${sender}: ${message}`);
})
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});

14
index.ts Normal file
View file

@ -0,0 +1,14 @@
const { app, BrowserWindow } = require('electron')
const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600
})
win.loadFile('index.html')
}
app.whenReady().then(() => {
createWindow()
})

715
package-lock.json generated Normal file
View file

@ -0,0 +1,715 @@
{
"name": "pmicares",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pmicares",
"dependencies": {
"electron": "^35.2.1",
"node-irc": "^0.0.5"
},
"devDependencies": {
"@types/bun": "latest"
},
"peerDependencies": {
"typescript": "^5"
}
},
"node_modules/@electron/get": {
"version": "2.0.3",
"license": "MIT",
"dependencies": {
"debug": "^4.1.1",
"env-paths": "^2.2.0",
"fs-extra": "^8.1.0",
"got": "^11.8.5",
"progress": "^2.0.3",
"semver": "^6.2.0",
"sumchecker": "^3.0.1"
},
"engines": {
"node": ">=12"
},
"optionalDependencies": {
"global-agent": "^3.0.0"
}
},
"node_modules/@sindresorhus/is": {
"version": "4.6.0",
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/is?sponsor=1"
}
},
"node_modules/@szmarczak/http-timer": {
"version": "4.0.6",
"license": "MIT",
"dependencies": {
"defer-to-connect": "^2.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/@types/bun": {
"version": "1.2.10",
"resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.2.10.tgz",
"integrity": "sha512-eilv6WFM3M0c9ztJt7/g80BDusK98z/FrFwseZgT4bXCq2vPhXD4z8R3oddmAn+R/Nmz9vBn4kweJKmGTZj+lg==",
"dev": true,
"license": "MIT",
"dependencies": {
"bun-types": "1.2.10"
}
},
"node_modules/@types/cacheable-request": {
"version": "6.0.3",
"license": "MIT",
"dependencies": {
"@types/http-cache-semantics": "*",
"@types/keyv": "^3.1.4",
"@types/node": "*",
"@types/responselike": "^1.0.0"
}
},
"node_modules/@types/http-cache-semantics": {
"version": "4.0.4",
"license": "MIT"
},
"node_modules/@types/keyv": {
"version": "3.1.4",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/node": {
"version": "22.15.3",
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
"node_modules/@types/responselike": {
"version": "1.0.3",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/yauzl": {
"version": "2.10.3",
"license": "MIT",
"optional": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/boolean": {
"version": "3.2.0",
"license": "MIT",
"optional": true
},
"node_modules/buffer-crc32": {
"version": "0.2.13",
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/bun-types": {
"version": "1.2.10",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/cacheable-lookup": {
"version": "5.0.4",
"license": "MIT",
"engines": {
"node": ">=10.6.0"
}
},
"node_modules/cacheable-request": {
"version": "7.0.4",
"license": "MIT",
"dependencies": {
"clone-response": "^1.0.2",
"get-stream": "^5.1.0",
"http-cache-semantics": "^4.0.0",
"keyv": "^4.0.0",
"lowercase-keys": "^2.0.0",
"normalize-url": "^6.0.1",
"responselike": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/clone-response": {
"version": "1.0.3",
"license": "MIT",
"dependencies": {
"mimic-response": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/clone-response/node_modules/mimic-response": {
"version": "1.0.1",
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/debug": {
"version": "4.4.0",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/decompress-response": {
"version": "6.0.0",
"license": "MIT",
"dependencies": {
"mimic-response": "^3.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/defer-to-connect": {
"version": "2.0.1",
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/define-data-property": {
"version": "1.1.4",
"license": "MIT",
"optional": true,
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/define-properties": {
"version": "1.2.1",
"license": "MIT",
"optional": true,
"dependencies": {
"define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/detect-node": {
"version": "2.1.0",
"license": "MIT",
"optional": true
},
"node_modules/electron": {
"version": "35.2.1",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"@electron/get": "^2.0.0",
"@types/node": "^22.7.7",
"extract-zip": "^2.0.1"
},
"bin": {
"electron": "cli.js"
},
"engines": {
"node": ">= 12.20.55"
}
},
"node_modules/end-of-stream": {
"version": "1.4.4",
"license": "MIT",
"dependencies": {
"once": "^1.4.0"
}
},
"node_modules/env-paths": {
"version": "2.2.1",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/es-define-property": {
"version": "1.0.1",
"license": "MIT",
"optional": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-errors": {
"version": "1.3.0",
"license": "MIT",
"optional": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es6-error": {
"version": "4.1.1",
"license": "MIT",
"optional": true
},
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"license": "MIT",
"optional": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/extract-zip": {
"version": "2.0.1",
"license": "BSD-2-Clause",
"dependencies": {
"debug": "^4.1.1",
"get-stream": "^5.1.0",
"yauzl": "^2.10.0"
},
"bin": {
"extract-zip": "cli.js"
},
"engines": {
"node": ">= 10.17.0"
},
"optionalDependencies": {
"@types/yauzl": "^2.9.1"
}
},
"node_modules/fd-slicer": {
"version": "1.1.0",
"license": "MIT",
"dependencies": {
"pend": "~1.2.0"
}
},
"node_modules/fs-extra": {
"version": "8.1.0",
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
},
"engines": {
"node": ">=6 <7 || >=8"
}
},
"node_modules/get-stream": {
"version": "5.2.0",
"license": "MIT",
"dependencies": {
"pump": "^3.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/global-agent": {
"version": "3.0.0",
"license": "BSD-3-Clause",
"optional": true,
"dependencies": {
"boolean": "^3.0.1",
"es6-error": "^4.1.1",
"matcher": "^3.0.0",
"roarr": "^2.15.3",
"semver": "^7.3.2",
"serialize-error": "^7.0.1"
},
"engines": {
"node": ">=10.0"
}
},
"node_modules/global-agent/node_modules/semver": {
"version": "7.7.1",
"license": "ISC",
"optional": true,
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/globalthis": {
"version": "1.0.4",
"license": "MIT",
"optional": true,
"dependencies": {
"define-properties": "^1.2.1",
"gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gopd": {
"version": "1.2.0",
"license": "MIT",
"optional": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/got": {
"version": "11.8.6",
"license": "MIT",
"dependencies": {
"@sindresorhus/is": "^4.0.0",
"@szmarczak/http-timer": "^4.0.5",
"@types/cacheable-request": "^6.0.1",
"@types/responselike": "^1.0.0",
"cacheable-lookup": "^5.0.3",
"cacheable-request": "^7.0.2",
"decompress-response": "^6.0.0",
"http2-wrapper": "^1.0.0-beta.5.2",
"lowercase-keys": "^2.0.0",
"p-cancelable": "^2.0.0",
"responselike": "^2.0.0"
},
"engines": {
"node": ">=10.19.0"
},
"funding": {
"url": "https://github.com/sindresorhus/got?sponsor=1"
}
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"license": "ISC"
},
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"license": "MIT",
"optional": true,
"dependencies": {
"es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/http-cache-semantics": {
"version": "4.1.1",
"license": "BSD-2-Clause"
},
"node_modules/http2-wrapper": {
"version": "1.0.3",
"license": "MIT",
"dependencies": {
"quick-lru": "^5.1.1",
"resolve-alpn": "^1.0.0"
},
"engines": {
"node": ">=10.19.0"
}
},
"node_modules/json-buffer": {
"version": "3.0.1",
"license": "MIT"
},
"node_modules/json-stringify-safe": {
"version": "5.0.1",
"license": "ISC",
"optional": true
},
"node_modules/jsonfile": {
"version": "4.0.0",
"license": "MIT",
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/keyv": {
"version": "4.5.4",
"license": "MIT",
"dependencies": {
"json-buffer": "3.0.1"
}
},
"node_modules/lowercase-keys": {
"version": "2.0.0",
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/matcher": {
"version": "3.0.0",
"license": "MIT",
"optional": true,
"dependencies": {
"escape-string-regexp": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/mimic-response": {
"version": "3.1.0",
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ms": {
"version": "2.1.3",
"license": "MIT"
},
"node_modules/node-irc": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/node-irc/-/node-irc-0.0.5.tgz",
"integrity": "sha512-2K1tSLIz4zKn9s78AYRPuWRdAVqHH5ZebRHqzYSCaW8ZDcOemxUfWCrvf9RPAudQsiG3ZiHEQfNFSG5qVxkwrA==",
"engines": {
"node": ">=0.4.7"
},
"optionalDependencies": {
"proxysocket": "^1.2.0"
}
},
"node_modules/normalize-url": {
"version": "6.1.0",
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/object-keys": {
"version": "1.1.1",
"license": "MIT",
"optional": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/once": {
"version": "1.4.0",
"license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/p-cancelable": {
"version": "2.1.1",
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/pend": {
"version": "1.2.0",
"license": "MIT"
},
"node_modules/progress": {
"version": "2.0.3",
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/proxysocket": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/proxysocket/-/proxysocket-1.2.0.tgz",
"integrity": "sha512-9QhaRGSmWMeCV+XdmAPvhRYOQTwi89gWa49ZWoPoVgGLMHGxjcJi1jtRq0wPQ1D0NUm64XCxBwoyU3M3+LzfeA==",
"optional": true,
"engines": {
"node": "0.x"
}
},
"node_modules/pump": {
"version": "3.0.2",
"license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"node_modules/quick-lru": {
"version": "5.1.1",
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/resolve-alpn": {
"version": "1.2.1",
"license": "MIT"
},
"node_modules/responselike": {
"version": "2.0.1",
"license": "MIT",
"dependencies": {
"lowercase-keys": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/roarr": {
"version": "2.15.4",
"license": "BSD-3-Clause",
"optional": true,
"dependencies": {
"boolean": "^3.0.1",
"detect-node": "^2.0.4",
"globalthis": "^1.0.1",
"json-stringify-safe": "^5.0.1",
"semver-compare": "^1.0.0",
"sprintf-js": "^1.1.2"
},
"engines": {
"node": ">=8.0"
}
},
"node_modules/semver": {
"version": "6.3.1",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/semver-compare": {
"version": "1.0.0",
"license": "MIT",
"optional": true
},
"node_modules/serialize-error": {
"version": "7.0.1",
"license": "MIT",
"optional": true,
"dependencies": {
"type-fest": "^0.13.1"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/sprintf-js": {
"version": "1.1.3",
"license": "BSD-3-Clause",
"optional": true
},
"node_modules/sumchecker": {
"version": "3.0.1",
"license": "Apache-2.0",
"dependencies": {
"debug": "^4.1.0"
},
"engines": {
"node": ">= 8.0"
}
},
"node_modules/type-fest": {
"version": "0.13.1",
"license": "(MIT OR CC0-1.0)",
"optional": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/typescript": {
"version": "5.8.3",
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"node_modules/undici-types": {
"version": "6.21.0",
"license": "MIT"
},
"node_modules/universalify": {
"version": "0.1.2",
"license": "MIT",
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/wrappy": {
"version": "1.0.2",
"license": "ISC"
},
"node_modules/yauzl": {
"version": "2.10.0",
"license": "MIT",
"dependencies": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
}
}
}
}

19
package.json Normal file
View file

@ -0,0 +1,19 @@
{
"name": "pmicares",
"module": "index.ts",
"type": "module",
"scripts": {
"start": "electron ."
},
"main": "index.js",
"private": true,
"devDependencies": {
},
"peerDependencies": {
"typescript": "^5"
},
"dependencies": {
"electron": "^35.2.1",
"node-irc": "^0.0.5"
}
}

10
prerender.js Normal file
View file

@ -0,0 +1,10 @@
const { contextBridge, ipcRenderer } = require('electron/renderer')
contextBridge.exposeInMainWorld('electronAPI', {
dom: () => ipcRenderer.send('dom-ready', null),
send: (message) => ipcRenderer.send('message', message),
onNewMessage: (callback) => ipcRenderer.on('speak', (_event, value) => {
console.log(`Message from ${value.sender}: ${value.message}`);
callback(value)
})
})

28
tsconfig.json Normal file
View file

@ -0,0 +1,28 @@
{
"compilerOptions": {
// Environment setup & latest features
"lib": ["ESNext"],
"target": "ESNext",
"module": "ESNext",
"moduleDetection": "force",
"jsx": "react-jsx",
"allowJs": true,
// Bundler mode
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"verbatimModuleSyntax": true,
"noEmit": true,
// Best practices
"strict": true,
"skipLibCheck": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
// Some stricter flags (disabled by default)
"noUnusedLocals": false,
"noUnusedParameters": false,
"noPropertyAccessFromIndexSignature": false
}
}