Skip to content

Instantly share code, notes, and snippets.

View StoneyEagle's full-sized avatar
🦅

Stoney Eagle StoneyEagle

🦅
View GitHub Profile
@StoneyEagle
StoneyEagle / Device Login.md
Last active March 29, 2024 18:34
Twitch Device Auth Flow for Postman
curl --location 'https://id.twitch.tv/oauth2/token' \
--form 'client_id="{{twitch-client-id}}"' \
--form 'scope="{{twitch-scopes}}"' \
--form 'device_code="{{TWITCH_DEVICE_CODE}}"' \
--form 'grant_type="urn:ietf:params:oauth:grant-type:device_code"'
Test
@StoneyEagle
StoneyEagle / Token Client Credentials.md
Created March 28, 2024 16:02
Twitch Credentials Auth for postman

Set the variables twitch-client-id and witch-client-secret as secret variables in your Postman environment,

curl --location 'https://id.twitch.tv/oauth2/token' \
--header 'Content-Type: application/json' \
--data '{
	"client_id": "{{twitch-client-id}}",
	"client_secret": "{{twitch-client-secret}}",
	"grant_type": "client_credentials",
	"scope": "the scopes you need"
}'
@StoneyEagle
StoneyEagle / obs-websocket.js
Created March 6, 2024 22:59 — forked from clarkio/obs-websocket.js
Connecting to OBS Websocket Server with Authentication
const obsConfig = {
address: '127.0.0.1',
port: 4455,
password: 'your-password'
}
const socket = new WebSocket(`ws://${obsConfig.address}:${obsConfig.port}`);
const password = obsConfig.password;
socket.onopen = function(event) {
@StoneyEagle
StoneyEagle / inject.js
Created May 2, 2023 17:57
Inject script or css into the dom
/**
* @param {string[]} filePaths - Array of file paths to append to the document
* @returns {Promise<void>} - Promise that resolves when all files have been appended
* @usage appendScriptFilesToDocument(['script.js', 'style.css'])
*/
const appendScriptFilesToDocument = (filePaths) => {
return new Promise((resolve, reject) => {
let count = 0;
const total = filePaths.length;
@StoneyEagle
StoneyEagle / theme.css
Last active April 4, 2023 23:13
Rendered NoMercy theme system for TailwindCSS
:root {
--shadow-light: 150, 150, 150;
--shadow-dark: 0, 0, 0;
--shadow: var(--shadow-light);
--gray-50: 250, 250, 250;
--gray-100: 245, 245, 245;
--gray-200: 229, 229, 229;
--gray-300: 212, 212, 212;
--gray-400: 163, 163, 163;
--gray-500: 115, 115, 115;
@StoneyEagle
StoneyEagle / paletteColorPicker.ts
Last active April 5, 2023 02:09
react-palette luminocity constrained color picker
export const byte2Hex = (n: number): string => {
const nybHexString = '0123456789ABCDEF';
return String(nybHexString.substr((n >> 4) & 0x0f, 1)) + nybHexString.substr(n & 0x0f, 1);
};
export const RGBString2hex = (string: string): string => {
const newString: number[] = string
.replace('rgb(', '')
.replace(')', '')
.split(',')
@StoneyEagle
StoneyEagle / matchPercentage .js
Last active April 4, 2023 23:19
Match percentage
const matchPercentage = (strA, strB) => {
let result = 0;
for (let i = strA.length; (i -= 1);) {
if (typeof strB[i] == 'undefined' || strA[i] == strB[i]) {
//
} else if (strA[i].toLowerCase() == strB[i].toLowerCase()) {
result += 1;
} else {
result += 4;
}
@StoneyEagle
StoneyEagle / db.ts
Created March 20, 2023 17:05
Prisma hack to avoid db timeout.
export const checkDbLock = async () => {
const { confDb } = require('./config');
try {
await confDb.$queryRaw`BEGIN EXCLUSIVE;`;
await confDb.$queryRaw`COMMIT;`;
return false;
} catch (error) {
return true;
}
};
@StoneyEagle
StoneyEagle / NoMercyPlayer.html
Last active April 4, 2023 23:21
NoMercyPlayer example
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>NoMercyPlayer API</title>
<script src="./dist/app.js?v=kw4n5l2n45" defer></script>
@StoneyEagle
StoneyEagle / timers.ts
Created March 1, 2023 23:38
Seconds to human time
humanTime (time: string | number) {
time = parseInt(time as string, 10);
let days: any = parseInt(`${(time / (3600 * 24))}`, 10);
let hours: any = this.pad(parseInt(`${(time % 86400) / 3600}`, 10), 2);
let minutes: any = parseInt(`${(time % 3600) / 60}`, 10);
let seconds: any = parseInt(`${time % 60}`, 10);
if (`${minutes}`.length === 1) {
minutes = `0${minutes}`;