BlueskyAPI #5

Merged
CatAClock merged 16 commits from OtherAPIs into main 2025-04-29 22:08:19 +00:00
Showing only changes of commit 622309c698 - Show all commits

View file

@ -1,36 +1,50 @@
// Component 1/7
export async function GetPDSWellKnown() { export async function GetPDSWellKnown() {
let Data = await fetch("https://bsky.social/.well-known/oauth-authorization-server", {method: "GET"}) let Data = await fetch("https://bsky.social/.well-known/oauth-authorization-server", {method: "GET"})
.then((response) => response.json()); .then((response) => response.json());
return Data; return Data;
} }
export function CreatePKCE() { // Component 2/7
let CodeVerifier = new Uint8Array(100); // Many thanks to https://github.com/tonyxu-io/pkce-generator. It was the base for this code.
let CodeChallenge; export async function CreatePKCECodeVerifier() {
// Generate some Numbers
// generate a random string of characters. let Numbers = new Uint8Array(32);
crypto.getRandomValues(CodeVerifier); crypto.getRandomValues(Numbers);
console.log(CodeVerifier); // Generate a random string of characters.
CodeVerifier = Uint8Array.toBase64({alphabet: "Base64url"}); let CodeVerifier = "";
// Now generate a code challenge for (let i in Numbers) {
CodeChallenge = sha256(CodeVerifier.toBase64({alphabet: "Base64url"})); CodeVerifier += String.fromCharCode(Numbers[i]);
console.log(CodeVerifier); }
console.log(CodeChallenge); // Put this random string into Base64URL format.
CodeVerifier = btoa(CodeVerifier).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
return CodeVerifier;
} }
// Stolen from elsewhere export async function CreatePKCECodeChallenge(CodeVerifier) {
// Firefox snippet // Generate a code challenge with the code verifier.
// This is done by first SHA256 encrypting the CodeVerifier, then putting the outputted string into Base64URL format.
let CodeChallenge = btoa(await sha256(CodeVerifier)).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
return CodeChallenge;
}
// Stolen from elsewhere.
// Firefox snippet; Slightly edited.
async function sha256(message) { async function sha256(message) {
// encode as UTF-8 // encode as UTF-8
const msgBuffer = new TextEncoder().encode(message); const MessageBuffer = new TextEncoder().encode(message);
// hash the message // hash the message
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer); const HashBuffer = await crypto.subtle.digest('SHA-256', MessageBuffer);
// convert ArrayBuffer to Array // convert ArrayBuffer to Array
const hashArray = Array.from(new Uint8Array(hashBuffer)); const HashArray = Array.from(new Uint8Array(HashBuffer));
// convert bytes to hex string // convert this hashArray to a string
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); let string = "";
return hashHex; for (let i in HashArray) {
string += String.fromCharCode(HashArray[i]);
}
return string;
} }