Initial commit: Complete Hive distributed AI orchestration platform
This comprehensive implementation includes: - FastAPI backend with MCP server integration - React/TypeScript frontend with Vite - PostgreSQL database with Redis caching - Grafana/Prometheus monitoring stack - Docker Compose orchestration - Full MCP protocol support for Claude Code integration Features: - Agent discovery and management across network - Visual workflow editor and execution engine - Real-time task coordination and monitoring - Multi-model support with specialized agents - Distributed development task allocation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
21
mcp-server/node_modules/pkce-challenge/LICENSE
generated
vendored
Normal file
21
mcp-server/node_modules/pkce-challenge/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
55
mcp-server/node_modules/pkce-challenge/README.md
generated
vendored
Normal file
55
mcp-server/node_modules/pkce-challenge/README.md
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
# pkce-challenge
|
||||
|
||||
Generate or verify a Proof Key for Code Exchange (PKCE) challenge pair.
|
||||
|
||||
Read more about [PKCE](https://www.oauth.com/oauth2-servers/pkce/authorization-request/).
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install pkce-challenge
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Default length for the verifier is 43
|
||||
|
||||
```js
|
||||
import pkceChallenge from "pkce-challenge";
|
||||
|
||||
await pkceChallenge();
|
||||
```
|
||||
|
||||
gives something like:
|
||||
|
||||
```js
|
||||
{
|
||||
code_verifier: 'u1ta-MQ0e7TcpHjgz33M2DcBnOQu~aMGxuiZt0QMD1C',
|
||||
code_challenge: 'CUZX5qE8Wvye6kS_SasIsa8MMxacJftmWdsIA_iKp3I'
|
||||
}
|
||||
```
|
||||
|
||||
### Specify a verifier length
|
||||
|
||||
```js
|
||||
const challenge = await pkceChallenge(128);
|
||||
|
||||
challenge.code_verifier.length === 128; // true
|
||||
```
|
||||
|
||||
### Challenge verification
|
||||
|
||||
```js
|
||||
import { verifyChallenge } from "pkce-challenge";
|
||||
|
||||
(await verifyChallenge(challenge.code_verifier, challenge.code_challenge)) ===
|
||||
true; // true
|
||||
```
|
||||
|
||||
### Challenge generation from existing code verifier
|
||||
|
||||
```js
|
||||
import { generateChallenge } from "pkce-challenge";
|
||||
|
||||
(await generateChallenge(challenge.code_verifier)) === challenge.code_challenge; // true
|
||||
```
|
||||
19
mcp-server/node_modules/pkce-challenge/dist/index.browser.d.ts
generated
vendored
Normal file
19
mcp-server/node_modules/pkce-challenge/dist/index.browser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
/** Generate a PKCE code challenge from a code verifier
|
||||
* @param code_verifier
|
||||
* @returns The base64 url encoded code challenge
|
||||
*/
|
||||
export declare function generateChallenge(code_verifier: string): Promise<string>;
|
||||
/** Generate a PKCE challenge pair
|
||||
* @param length Length of the verifer (between 43-128). Defaults to 43.
|
||||
* @returns PKCE challenge pair
|
||||
*/
|
||||
export default function pkceChallenge(length?: number): Promise<{
|
||||
code_verifier: string;
|
||||
code_challenge: string;
|
||||
}>;
|
||||
/** Verify that a code_verifier produces the expected code challenge
|
||||
* @param code_verifier
|
||||
* @param expectedChallenge The code challenge to verify
|
||||
* @returns True if challenges are equal. False otherwise.
|
||||
*/
|
||||
export declare function verifyChallenge(code_verifier: string, expectedChallenge: string): Promise<boolean>;
|
||||
72
mcp-server/node_modules/pkce-challenge/dist/index.browser.js
generated
vendored
Normal file
72
mcp-server/node_modules/pkce-challenge/dist/index.browser.js
generated
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
let crypto;
|
||||
crypto = globalThis.crypto; // web browsers
|
||||
/**
|
||||
* Creates an array of length `size` of random bytes
|
||||
* @param size
|
||||
* @returns Array of random ints (0 to 255)
|
||||
*/
|
||||
async function getRandomValues(size) {
|
||||
return (await crypto).getRandomValues(new Uint8Array(size));
|
||||
}
|
||||
/** Generate cryptographically strong random string
|
||||
* @param size The desired length of the string
|
||||
* @returns The random string
|
||||
*/
|
||||
async function random(size) {
|
||||
const mask = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~";
|
||||
let result = "";
|
||||
const randomUints = await getRandomValues(size);
|
||||
for (let i = 0; i < size; i++) {
|
||||
// cap the value of the randomIndex to mask.length - 1
|
||||
const randomIndex = randomUints[i] % mask.length;
|
||||
result += mask[randomIndex];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/** Generate a PKCE challenge verifier
|
||||
* @param length Length of the verifier
|
||||
* @returns A random verifier `length` characters long
|
||||
*/
|
||||
async function generateVerifier(length) {
|
||||
return await random(length);
|
||||
}
|
||||
/** Generate a PKCE code challenge from a code verifier
|
||||
* @param code_verifier
|
||||
* @returns The base64 url encoded code challenge
|
||||
*/
|
||||
export async function generateChallenge(code_verifier) {
|
||||
const buffer = await (await crypto).subtle.digest("SHA-256", new TextEncoder().encode(code_verifier));
|
||||
// Generate base64url string
|
||||
// btoa is deprecated in Node.js but is used here for web browser compatibility
|
||||
// (which has no good replacement yet, see also https://github.com/whatwg/html/issues/6811)
|
||||
return btoa(String.fromCharCode(...new Uint8Array(buffer)))
|
||||
.replace(/\//g, '_')
|
||||
.replace(/\+/g, '-')
|
||||
.replace(/=/g, '');
|
||||
}
|
||||
/** Generate a PKCE challenge pair
|
||||
* @param length Length of the verifer (between 43-128). Defaults to 43.
|
||||
* @returns PKCE challenge pair
|
||||
*/
|
||||
export default async function pkceChallenge(length) {
|
||||
if (!length)
|
||||
length = 43;
|
||||
if (length < 43 || length > 128) {
|
||||
throw `Expected a length between 43 and 128. Received ${length}.`;
|
||||
}
|
||||
const verifier = await generateVerifier(length);
|
||||
const challenge = await generateChallenge(verifier);
|
||||
return {
|
||||
code_verifier: verifier,
|
||||
code_challenge: challenge,
|
||||
};
|
||||
}
|
||||
/** Verify that a code_verifier produces the expected code challenge
|
||||
* @param code_verifier
|
||||
* @param expectedChallenge The code challenge to verify
|
||||
* @returns True if challenges are equal. False otherwise.
|
||||
*/
|
||||
export async function verifyChallenge(code_verifier, expectedChallenge) {
|
||||
const actualChallenge = await generateChallenge(code_verifier);
|
||||
return actualChallenge === expectedChallenge;
|
||||
}
|
||||
80
mcp-server/node_modules/pkce-challenge/dist/index.node.cjs
generated
vendored
Normal file
80
mcp-server/node_modules/pkce-challenge/dist/index.node.cjs
generated
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.generateChallenge = generateChallenge;
|
||||
exports.default = pkceChallenge;
|
||||
exports.verifyChallenge = verifyChallenge;
|
||||
let crypto;
|
||||
crypto =
|
||||
globalThis.crypto?.webcrypto ?? // Node.js [18-16] REPL
|
||||
globalThis.crypto ?? // Node.js >18
|
||||
import("node:crypto").then(m => m.webcrypto); // Node.js <18 Non-REPL
|
||||
/**
|
||||
* Creates an array of length `size` of random bytes
|
||||
* @param size
|
||||
* @returns Array of random ints (0 to 255)
|
||||
*/
|
||||
async function getRandomValues(size) {
|
||||
return (await crypto).getRandomValues(new Uint8Array(size));
|
||||
}
|
||||
/** Generate cryptographically strong random string
|
||||
* @param size The desired length of the string
|
||||
* @returns The random string
|
||||
*/
|
||||
async function random(size) {
|
||||
const mask = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~";
|
||||
let result = "";
|
||||
const randomUints = await getRandomValues(size);
|
||||
for (let i = 0; i < size; i++) {
|
||||
// cap the value of the randomIndex to mask.length - 1
|
||||
const randomIndex = randomUints[i] % mask.length;
|
||||
result += mask[randomIndex];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/** Generate a PKCE challenge verifier
|
||||
* @param length Length of the verifier
|
||||
* @returns A random verifier `length` characters long
|
||||
*/
|
||||
async function generateVerifier(length) {
|
||||
return await random(length);
|
||||
}
|
||||
/** Generate a PKCE code challenge from a code verifier
|
||||
* @param code_verifier
|
||||
* @returns The base64 url encoded code challenge
|
||||
*/
|
||||
async function generateChallenge(code_verifier) {
|
||||
const buffer = await (await crypto).subtle.digest("SHA-256", new TextEncoder().encode(code_verifier));
|
||||
// Generate base64url string
|
||||
// btoa is deprecated in Node.js but is used here for web browser compatibility
|
||||
// (which has no good replacement yet, see also https://github.com/whatwg/html/issues/6811)
|
||||
return btoa(String.fromCharCode(...new Uint8Array(buffer)))
|
||||
.replace(/\//g, '_')
|
||||
.replace(/\+/g, '-')
|
||||
.replace(/=/g, '');
|
||||
}
|
||||
/** Generate a PKCE challenge pair
|
||||
* @param length Length of the verifer (between 43-128). Defaults to 43.
|
||||
* @returns PKCE challenge pair
|
||||
*/
|
||||
async function pkceChallenge(length) {
|
||||
if (!length)
|
||||
length = 43;
|
||||
if (length < 43 || length > 128) {
|
||||
throw `Expected a length between 43 and 128. Received ${length}.`;
|
||||
}
|
||||
const verifier = await generateVerifier(length);
|
||||
const challenge = await generateChallenge(verifier);
|
||||
return {
|
||||
code_verifier: verifier,
|
||||
code_challenge: challenge,
|
||||
};
|
||||
}
|
||||
/** Verify that a code_verifier produces the expected code challenge
|
||||
* @param code_verifier
|
||||
* @param expectedChallenge The code challenge to verify
|
||||
* @returns True if challenges are equal. False otherwise.
|
||||
*/
|
||||
async function verifyChallenge(code_verifier, expectedChallenge) {
|
||||
const actualChallenge = await generateChallenge(code_verifier);
|
||||
return actualChallenge === expectedChallenge;
|
||||
}
|
||||
19
mcp-server/node_modules/pkce-challenge/dist/index.node.d.cts
generated
vendored
Normal file
19
mcp-server/node_modules/pkce-challenge/dist/index.node.d.cts
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
/** Generate a PKCE code challenge from a code verifier
|
||||
* @param code_verifier
|
||||
* @returns The base64 url encoded code challenge
|
||||
*/
|
||||
export declare function generateChallenge(code_verifier: string): Promise<string>;
|
||||
/** Generate a PKCE challenge pair
|
||||
* @param length Length of the verifer (between 43-128). Defaults to 43.
|
||||
* @returns PKCE challenge pair
|
||||
*/
|
||||
export default function pkceChallenge(length?: number): Promise<{
|
||||
code_verifier: string;
|
||||
code_challenge: string;
|
||||
}>;
|
||||
/** Verify that a code_verifier produces the expected code challenge
|
||||
* @param code_verifier
|
||||
* @param expectedChallenge The code challenge to verify
|
||||
* @returns True if challenges are equal. False otherwise.
|
||||
*/
|
||||
export declare function verifyChallenge(code_verifier: string, expectedChallenge: string): Promise<boolean>;
|
||||
19
mcp-server/node_modules/pkce-challenge/dist/index.node.d.ts
generated
vendored
Normal file
19
mcp-server/node_modules/pkce-challenge/dist/index.node.d.ts
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
/** Generate a PKCE code challenge from a code verifier
|
||||
* @param code_verifier
|
||||
* @returns The base64 url encoded code challenge
|
||||
*/
|
||||
export declare function generateChallenge(code_verifier: string): Promise<string>;
|
||||
/** Generate a PKCE challenge pair
|
||||
* @param length Length of the verifer (between 43-128). Defaults to 43.
|
||||
* @returns PKCE challenge pair
|
||||
*/
|
||||
export default function pkceChallenge(length?: number): Promise<{
|
||||
code_verifier: string;
|
||||
code_challenge: string;
|
||||
}>;
|
||||
/** Verify that a code_verifier produces the expected code challenge
|
||||
* @param code_verifier
|
||||
* @param expectedChallenge The code challenge to verify
|
||||
* @returns True if challenges are equal. False otherwise.
|
||||
*/
|
||||
export declare function verifyChallenge(code_verifier: string, expectedChallenge: string): Promise<boolean>;
|
||||
75
mcp-server/node_modules/pkce-challenge/dist/index.node.js
generated
vendored
Normal file
75
mcp-server/node_modules/pkce-challenge/dist/index.node.js
generated
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
let crypto;
|
||||
crypto =
|
||||
globalThis.crypto?.webcrypto ?? // Node.js [18-16] REPL
|
||||
globalThis.crypto ?? // Node.js >18
|
||||
import("node:crypto").then(m => m.webcrypto); // Node.js <18 Non-REPL
|
||||
/**
|
||||
* Creates an array of length `size` of random bytes
|
||||
* @param size
|
||||
* @returns Array of random ints (0 to 255)
|
||||
*/
|
||||
async function getRandomValues(size) {
|
||||
return (await crypto).getRandomValues(new Uint8Array(size));
|
||||
}
|
||||
/** Generate cryptographically strong random string
|
||||
* @param size The desired length of the string
|
||||
* @returns The random string
|
||||
*/
|
||||
async function random(size) {
|
||||
const mask = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~";
|
||||
let result = "";
|
||||
const randomUints = await getRandomValues(size);
|
||||
for (let i = 0; i < size; i++) {
|
||||
// cap the value of the randomIndex to mask.length - 1
|
||||
const randomIndex = randomUints[i] % mask.length;
|
||||
result += mask[randomIndex];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/** Generate a PKCE challenge verifier
|
||||
* @param length Length of the verifier
|
||||
* @returns A random verifier `length` characters long
|
||||
*/
|
||||
async function generateVerifier(length) {
|
||||
return await random(length);
|
||||
}
|
||||
/** Generate a PKCE code challenge from a code verifier
|
||||
* @param code_verifier
|
||||
* @returns The base64 url encoded code challenge
|
||||
*/
|
||||
export async function generateChallenge(code_verifier) {
|
||||
const buffer = await (await crypto).subtle.digest("SHA-256", new TextEncoder().encode(code_verifier));
|
||||
// Generate base64url string
|
||||
// btoa is deprecated in Node.js but is used here for web browser compatibility
|
||||
// (which has no good replacement yet, see also https://github.com/whatwg/html/issues/6811)
|
||||
return btoa(String.fromCharCode(...new Uint8Array(buffer)))
|
||||
.replace(/\//g, '_')
|
||||
.replace(/\+/g, '-')
|
||||
.replace(/=/g, '');
|
||||
}
|
||||
/** Generate a PKCE challenge pair
|
||||
* @param length Length of the verifer (between 43-128). Defaults to 43.
|
||||
* @returns PKCE challenge pair
|
||||
*/
|
||||
export default async function pkceChallenge(length) {
|
||||
if (!length)
|
||||
length = 43;
|
||||
if (length < 43 || length > 128) {
|
||||
throw `Expected a length between 43 and 128. Received ${length}.`;
|
||||
}
|
||||
const verifier = await generateVerifier(length);
|
||||
const challenge = await generateChallenge(verifier);
|
||||
return {
|
||||
code_verifier: verifier,
|
||||
code_challenge: challenge,
|
||||
};
|
||||
}
|
||||
/** Verify that a code_verifier produces the expected code challenge
|
||||
* @param code_verifier
|
||||
* @param expectedChallenge The code challenge to verify
|
||||
* @returns True if challenges are equal. False otherwise.
|
||||
*/
|
||||
export async function verifyChallenge(code_verifier, expectedChallenge) {
|
||||
const actualChallenge = await generateChallenge(code_verifier);
|
||||
return actualChallenge === expectedChallenge;
|
||||
}
|
||||
58
mcp-server/node_modules/pkce-challenge/package.json
generated
vendored
Normal file
58
mcp-server/node_modules/pkce-challenge/package.json
generated
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"name": "pkce-challenge",
|
||||
"version": "5.0.0",
|
||||
"description": "Generate or verify a Proof Key for Code Exchange (PKCE) challenge pair",
|
||||
"browser": "dist/index.browser.js",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": {
|
||||
"require": "./dist/index.node.d.cts",
|
||||
"import": "./dist/index.node.d.ts"
|
||||
},
|
||||
"browser": {
|
||||
"types": "./dist/index.browser.d.ts",
|
||||
"default": "./dist/index.browser.js"
|
||||
},
|
||||
"node": {
|
||||
"import": "./dist/index.node.js",
|
||||
"require": "./dist/index.node.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"dist/"
|
||||
],
|
||||
"scripts": {
|
||||
"watch": "tsc --watch --declaration",
|
||||
"preprocess": "env=browser diverge -f src/index.ts src/index.browser.ts && env=node diverge -f src/index.ts src/index.node.ts && env=node diverge -f src/index.ts src/index.node.cts",
|
||||
"build": "npm run preprocess && tsc --declaration",
|
||||
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
||||
"test:bundle": "npm run --prefix browser-test build"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/crouchcd/pkce-challenge.git"
|
||||
},
|
||||
"keywords": [
|
||||
"PKCE",
|
||||
"oauth2"
|
||||
],
|
||||
"author": "crouchcd",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/crouchcd/pkce-challenge/issues"
|
||||
},
|
||||
"homepage": "https://github.com/crouchcd/pkce-challenge#readme",
|
||||
"engines": {
|
||||
"node": ">=16.20.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^29.5.0",
|
||||
"@types/node": "^18.15.11",
|
||||
"diverge": "^1.0.2",
|
||||
"esbuild": "^0.25.2",
|
||||
"jest": "^29.5.0",
|
||||
"typescript": "^5.0.3"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user