From a60c389c9e57aa52c18bc2b0b3429602028866cc Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 27 Dec 2025 12:45:54 -0500 Subject: [PATCH 01/17] add cloudflare warp --- blueprints/warp/docker-compose.yml | 14 ++++++++++++++ blueprints/warp/image.svg | 4 ++++ blueprints/warp/template.toml | 7 +++++++ meta.json | 20 ++++++++++++++++++-- 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 blueprints/warp/docker-compose.yml create mode 100644 blueprints/warp/image.svg create mode 100644 blueprints/warp/template.toml diff --git a/blueprints/warp/docker-compose.yml b/blueprints/warp/docker-compose.yml new file mode 100644 index 000000000..fdbb9a60f --- /dev/null +++ b/blueprints/warp/docker-compose.yml @@ -0,0 +1,14 @@ +services: + cloudflare-warp-proxy: + image: seiry/cloudflare-warp-proxy + # image: ghcr.io/seiry/cloudflare-warp-proxy + network_mode: bridge + ports: + - 40000 + restart: unless-stopped + environment: + - LICENSE=${WARP_KEY} + logging: + driver: json-file + options: + max-size: 1m diff --git a/blueprints/warp/image.svg b/blueprints/warp/image.svg new file mode 100644 index 000000000..126357740 --- /dev/null +++ b/blueprints/warp/image.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/blueprints/warp/template.toml b/blueprints/warp/template.toml new file mode 100644 index 000000000..df6aa6d0e --- /dev/null +++ b/blueprints/warp/template.toml @@ -0,0 +1,7 @@ +[variables] +warp_key = "${warp_key}" + +[config] + +[[config.env]] +WARP_LICENSE = "${warp_key}" diff --git a/meta.json b/meta.json index 7fc8b6b70..9ee96cc1d 100644 --- a/meta.json +++ b/meta.json @@ -1305,8 +1305,8 @@ "logo": "cloudflared.svg", "links": { "github": "https://github.com/cloudflare/cloudflared", - "website": "https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/", - "docs": "https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/" + "website": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/", + "docs": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/" }, "tags": [ "cloud", @@ -6031,6 +6031,22 @@ "self-hosted" ] }, + { + "id": "warp", + "name": "Cloudflare WARP", + "version": "latest", + "description": "Cloudflare WARP Connector (beta) is a software client that enables site-to-site, bidirectional, and mesh networking connectivity without requiring changes to underlying network routing infrastructure.", + "logo": "image.svg", + "links": { + "website": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/", + "docs": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/" + }, + "tags": [ + "proxy", + "networking", + "tunnel" + ] + }, { "id": "web-check", "name": "Web-Check", From fb24173159b22bd26c009c259cc2b56c7ce902e2 Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 27 Dec 2025 12:50:42 -0500 Subject: [PATCH 02/17] fix ig --- meta.json | 1 + 1 file changed, 1 insertion(+) diff --git a/meta.json b/meta.json index 9ee96cc1d..01e1157e3 100644 --- a/meta.json +++ b/meta.json @@ -6038,6 +6038,7 @@ "description": "Cloudflare WARP Connector (beta) is a software client that enables site-to-site, bidirectional, and mesh networking connectivity without requiring changes to underlying network routing infrastructure.", "logo": "image.svg", "links": { + "github": "https://github.com/cloudflare/", "website": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/", "docs": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/" }, From d2699397644d5b5a226eac8b452daf9788629d40 Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 27 Dec 2025 12:52:35 -0500 Subject: [PATCH 03/17] fix again --- blueprints/warp/docker-compose.yml | 2 +- blueprints/warp/template.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/blueprints/warp/docker-compose.yml b/blueprints/warp/docker-compose.yml index fdbb9a60f..5e2f5e913 100644 --- a/blueprints/warp/docker-compose.yml +++ b/blueprints/warp/docker-compose.yml @@ -7,7 +7,7 @@ services: - 40000 restart: unless-stopped environment: - - LICENSE=${WARP_KEY} + - LICENSE=${WARP_LICENSE} logging: driver: json-file options: diff --git a/blueprints/warp/template.toml b/blueprints/warp/template.toml index df6aa6d0e..df327bfad 100644 --- a/blueprints/warp/template.toml +++ b/blueprints/warp/template.toml @@ -1,7 +1,7 @@ [variables] -warp_key = "${warp_key}" +license = "${warp_key}" [config] [[config.env]] -WARP_LICENSE = "${warp_key}" +WARP_LICENSE = "" From aaaa83355834b73e9dfbda1f72b21d7d2e309a04 Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 27 Dec 2025 13:06:41 -0500 Subject: [PATCH 04/17] b --- blueprints/warp/docker-compose.yml | 8 ++------ blueprints/warp/template.toml | 7 ++----- blueprints/warp/{image.svg => warp.svg} | 0 meta.json | 6 ++---- 4 files changed, 6 insertions(+), 15 deletions(-) rename blueprints/warp/{image.svg => warp.svg} (100%) diff --git a/blueprints/warp/docker-compose.yml b/blueprints/warp/docker-compose.yml index 5e2f5e913..a084d907c 100644 --- a/blueprints/warp/docker-compose.yml +++ b/blueprints/warp/docker-compose.yml @@ -1,13 +1,9 @@ services: cloudflare-warp-proxy: - image: seiry/cloudflare-warp-proxy - # image: ghcr.io/seiry/cloudflare-warp-proxy - network_mode: bridge - ports: - - 40000 + image: ghcr.io/seiry/cloudflare-warp-proxy:latest restart: unless-stopped environment: - - LICENSE=${WARP_LICENSE} + - LICENSE=${WARP_KEY} logging: driver: json-file options: diff --git a/blueprints/warp/template.toml b/blueprints/warp/template.toml index df327bfad..9f0d08892 100644 --- a/blueprints/warp/template.toml +++ b/blueprints/warp/template.toml @@ -1,7 +1,4 @@ -[variables] -license = "${warp_key}" +variables = {} [config] - -[[config.env]] -WARP_LICENSE = "" +env = ["WARP_KEY=\"\""] diff --git a/blueprints/warp/image.svg b/blueprints/warp/warp.svg similarity index 100% rename from blueprints/warp/image.svg rename to blueprints/warp/warp.svg diff --git a/meta.json b/meta.json index 01e1157e3..45649f3a8 100644 --- a/meta.json +++ b/meta.json @@ -6036,11 +6036,9 @@ "name": "Cloudflare WARP", "version": "latest", "description": "Cloudflare WARP Connector (beta) is a software client that enables site-to-site, bidirectional, and mesh networking connectivity without requiring changes to underlying network routing infrastructure.", - "logo": "image.svg", + "logo": "warp.svg", "links": { - "github": "https://github.com/cloudflare/", - "website": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/", - "docs": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/" + "github": "https://github.com/seiry/docker-warp-proxy" }, "tags": [ "proxy", From 8912302b373d8864de18bf1f2d8d028b5b00919c Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 27 Dec 2025 13:16:01 -0500 Subject: [PATCH 05/17] f --- blueprints/warp/docker-compose.yml | 2 ++ blueprints/warp/template.toml | 9 ++++++++- meta.json | 4 +++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/blueprints/warp/docker-compose.yml b/blueprints/warp/docker-compose.yml index a084d907c..614254491 100644 --- a/blueprints/warp/docker-compose.yml +++ b/blueprints/warp/docker-compose.yml @@ -8,3 +8,5 @@ services: driver: json-file options: max-size: 1m + volumes: + - /run/dbus/system_bus_socket:/run/dbus/system_bus_socket:ro diff --git a/blueprints/warp/template.toml b/blueprints/warp/template.toml index 9f0d08892..91ed41401 100644 --- a/blueprints/warp/template.toml +++ b/blueprints/warp/template.toml @@ -1,4 +1,11 @@ variables = {} [config] -env = ["WARP_KEY=\"\""] + +[[config.env]] +WARP_KEY = "" + + +[[config.mounts]] +filePath = "/run/dbus/system_bus_socket" +content = "" \ No newline at end of file diff --git a/meta.json b/meta.json index 45649f3a8..1e785dd0d 100644 --- a/meta.json +++ b/meta.json @@ -6038,7 +6038,9 @@ "description": "Cloudflare WARP Connector (beta) is a software client that enables site-to-site, bidirectional, and mesh networking connectivity without requiring changes to underlying network routing infrastructure.", "logo": "warp.svg", "links": { - "github": "https://github.com/seiry/docker-warp-proxy" + "github": "https://github.com/seiry/docker-warp-proxy", + "website": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/", + "docs": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/" }, "tags": [ "proxy", From d0aa961d68427ece0e84b2c6e333d768b0f1dc0f Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 27 Dec 2025 13:30:35 -0500 Subject: [PATCH 06/17] maybe itll fix env? --- blueprints/warp/docker-compose.yml | 5 +++++ blueprints/warp/template.toml | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/blueprints/warp/docker-compose.yml b/blueprints/warp/docker-compose.yml index 614254491..772a6cce7 100644 --- a/blueprints/warp/docker-compose.yml +++ b/blueprints/warp/docker-compose.yml @@ -10,3 +10,8 @@ services: max-size: 1m volumes: - /run/dbus/system_bus_socket:/run/dbus/system_bus_socket:ro + security_opt: + - apparmor:unconfined + # If AppArmor unconfined is insufficient on some hosts, uncomment the next line + # to run the container in privileged mode (less secure): + # privileged: true diff --git a/blueprints/warp/template.toml b/blueprints/warp/template.toml index 91ed41401..20fecb47d 100644 --- a/blueprints/warp/template.toml +++ b/blueprints/warp/template.toml @@ -1,10 +1,11 @@ -variables = {} +[variables] +warp_key = "" [config] +domains = [] -[[config.env]] -WARP_KEY = "" - +[config.env] +LICENSE = "${warp_key}" [[config.mounts]] filePath = "/run/dbus/system_bus_socket" From db41f1dc84746d89f0eb2f7432856ef6c2a3175f Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 27 Dec 2025 13:38:20 -0500 Subject: [PATCH 07/17] f --- blueprints/warp/docker-compose.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/blueprints/warp/docker-compose.yml b/blueprints/warp/docker-compose.yml index 772a6cce7..606e9c1cd 100644 --- a/blueprints/warp/docker-compose.yml +++ b/blueprints/warp/docker-compose.yml @@ -2,8 +2,7 @@ services: cloudflare-warp-proxy: image: ghcr.io/seiry/cloudflare-warp-proxy:latest restart: unless-stopped - environment: - - LICENSE=${WARP_KEY} + # `LICENSE` is injected by the Dokploy template (`template.toml` [config.env]). logging: driver: json-file options: From a6d1b92ca5f8284e5a2dc391aca2a6592cb23fab Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 27 Dec 2025 14:24:07 -0500 Subject: [PATCH 08/17] thanks Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- blueprints/warp/template.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blueprints/warp/template.toml b/blueprints/warp/template.toml index 20fecb47d..eb483e912 100644 --- a/blueprints/warp/template.toml +++ b/blueprints/warp/template.toml @@ -1,11 +1,11 @@ [variables] -warp_key = "" +cloudflare_warp_token = "" [config] domains = [] [config.env] -LICENSE = "${warp_key}" +LICENSE = "${cloudflare_warp_token}" [[config.mounts]] filePath = "/run/dbus/system_bus_socket" From 65853635ac87a9c00b0b546bd7612164474fe71b Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 31 Jan 2026 19:02:32 -0500 Subject: [PATCH 09/17] add nodelink? --- blueprints/nodelink/docker-compose.yml | 11 + blueprints/nodelink/template.toml | 379 +++++++++++++++++++++++++ 2 files changed, 390 insertions(+) create mode 100644 blueprints/nodelink/docker-compose.yml create mode 100644 blueprints/nodelink/template.toml diff --git a/blueprints/nodelink/docker-compose.yml b/blueprints/nodelink/docker-compose.yml new file mode 100644 index 000000000..3bc5c5ac0 --- /dev/null +++ b/blueprints/nodelink/docker-compose.yml @@ -0,0 +1,11 @@ +services: + nodelink: + image: performanc/nodelink:latest + volumes: + - ../files/config.js:/app/config.js + ports: + - "3000:3000" + restart: unless-stopped + environment: + NODELINK_SERVER_PASSWORD: "${NODELINK_SERVER_PASSWORD:-youshallnotpass}" + NODELINK_SERVER_PORT: "${NODELINK_SERVER_PORT:-3000}" diff --git a/blueprints/nodelink/template.toml b/blueprints/nodelink/template.toml new file mode 100644 index 000000000..d2cf3d6e3 --- /dev/null +++ b/blueprints/nodelink/template.toml @@ -0,0 +1,379 @@ +[variables] +main_domain = ${domain} +server_port = "3000" +nodelink_server_password = "${password}" + +[config] +[[config.mounts]] +filePath = "./config.js" +content = """ +export default { + server: { + host: '0.0.0.0', + port: 3000, + password: 'youshallnotpass', + useBunServer: false // set to true to use Bun.serve websocket (experimental) + }, + cluster: { + enabled: true, // active cluster (or use env CLUSTER_ENABLED) + workers: 0, // 0 => uses os.cpus().length, or specify a number (1 = 2 processes total: master + 1 worker) + minWorkers: 1, // Minimum workers to keep alive (improves availability during bursts) + specializedSourceWorker: { + enabled: true, // If true, source loading (search, lyrics, etc.) is delegated to dedicated workers to prevent voice worker lag + count: 1, // Number of separate process clusters for source operations + microWorkers: 2, // Number of worker threads per process cluster + tasksPerWorker: 32, // Number of parallel tasks each micro-worker can handle before queuing + silentLogs: true // If true, micro-workers will only log warnings and errors + }, + commandTimeout: 6000, // Timeout for heavy operations like loadTracks (6s) + fastCommandTimeout: 4000, // Timeout for player commands like play/pause (4s) + maxRetries: 2, // Number of retry attempts on timeout or worker failure + hibernation: { + enabled: true, + timeoutMs: 1200000 + }, + scaling: { + //scaling configurations + maxPlayersPerWorker: 20, // Reference capacity for utilization calculation + targetUtilization: 0.7, // Target utilization for scaling up/down + scaleUpThreshold: 0.75, // Utilization threshold to scale up + scaleDownThreshold: 0.3, // Utilization threshold to scale down + checkIntervalMs: 5000, // Interval to check for scaling needs + idleWorkerTimeoutMs: 60000, // Time in ms an idle worker should wait before being removed + queueLengthScaleUpFactor: 5, // How many commands in queue per active worker trigger scale up + lagPenaltyLimit: 60, // Event loop lag threshold (ms) to penalize worker cost + cpuPenaltyLimit: 0.85 // CPU usage threshold (85% of a core) to force scale up + }, + endpoint: { + patchEnabled: true, + allowExternalPatch: false, + code: 'CAPYBARA' + } + }, + logging: { + level: 'debug', + file: { + enabled: false, + path: 'logs', + rotation: 'daily', + ttlDays: 7 + }, + debug: { + all: false, + request: true, + session: true, + player: true, + filters: true, + sources: true, + lyrics: true, + youtube: true, + 'youtube-cipher': true + } + }, + connection: { + logAllChecks: false, + interval: 300000, // 5 minutes + timeout: 10000, // 10 seconds + thresholds: { + bad: 1, // Mbps + average: 5 // Mbps + } + }, + maxSearchResults: 10, + maxAlbumPlaylistLength: 100, + playerUpdateInterval: 2000, + statsUpdateInterval: 30000, + trackStuckThresholdMs: 10000, + zombieThresholdMs: 60000, + enableHoloTracks: false, + enableTrackStreamEndpoint: false, + enableLoadStreamEndpoint: false, + resolveExternalLinks: false, + fetchChannelInfo: false, + filters: { + enabled: { + tremolo: true, + vibrato: true, + lowpass: true, + highpass: true, + rotation: true, + karaoke: true, + distortion: true, + channelMix: true, + equalizer: true, + chorus: true, + compressor: true, + echo: true, + phaser: true, + timescale: true + } + }, + defaultSearchSource: ['youtube', 'soundcloud'], + unifiedSearchSources: ['youtube', 'soundcloud'], + sources: { + vkmusic: { + enabled: true, + userToken: '', // (optional) get from vk in browser devtools -> reqs POST /?act=web_token HTTP/2 - headers -> response -> access_token + userCookie: '' // (required without userToken) get from vk in browser devtools -> reqs POST /?act=web_token HTTP/2 - headers -> request -> cookie (copy full cookie header) + }, + amazonmusic: { + enabled: true + }, + mixcloud: { + enabled: true + }, + audiomack: { + enabled: true + }, + deezer: { + // arl: '', + // decryptionKey: '', + enabled: true + }, + bandcamp: { + enabled: true + }, + soundcloud: { + enabled: true, + // clientId: "" + }, + local: { + enabled: true, + basePath: './local-music/' + }, + http: { + enabled: true + }, + vimeo: { + // Note: not 100% of the songs are currently working (but most should.), because i need to code a different extractor for every year (2010, 2011, etc. not all are done) + enabled: true, + }, + telegram: { + enabled: true + }, + shazam: { + enabled: true, + allowExplicit: true + }, + bilibili: { + enabled: true, + sessdata: '' // Optional, improves access to some videos (premium and 4k+) + }, + genius: { + enabled: true + }, + pinterest: { + enabled: true + }, + flowery: { + enabled: true, + voice: 'Salli', + translate: false, + silence: 0, + speed: 1.0, + enforceConfig: false + }, + jiosaavn: { + enabled: true, + playlistLoadLimit: 50, + artistLoadLimit: 20 + // "secretKey": "38346591" // Optional, defaults to standard key + }, + gaana: { + enabled: true, + apiUrl: 'https://gaana.1lucas1apk.fun/api', // if you want to host your server https://github.com/notdeltaxd/Gaana-API + streamQuality: 'high', + playlistLoadLimit: 100, + albumLoadLimit: 100, + artistLoadLimit: 100 + }, + "google-tts": { + enabled: true, + language: 'en-US' + }, + youtube: { + enabled: true, + allowItag: [], // additional itags for audio streams, e.g., [140, 141] + targetItag: null, // force a specific itag for audio streams, overriding the quality option + getOAuthToken: false, + hl: 'en', + gl: 'US', + clients: { + search: ['Android'], // Clients used for searching tracks + playback: ['AndroidVR', 'TV', 'TVEmbedded', 'IOS'], // Clients used for playback/streaming + resolve: ['AndroidVR', 'TV', 'TVEmbedded', 'IOS', 'Web'], // Clients used for resolving detailed track information (channel, external links, etc.) + settings: { + TV: { + refreshToken: [""] // You can use a string "token" or an array ["token1", "token2"] for rotation/fallback + } + } + }, + cipher: { + url: 'https://cipher.kikkia.dev/api', + token: null + } + }, + instagram: { + enabled: true + }, + kwai: { + enabled: true + }, + twitch: { + enabled: true + }, + spotify: { + enabled: true, + clientId: '', + clientSecret: '', + externalAuthUrl: 'http://get.1lucas1apk.fun/spotify/gettoken', // URL to external token provider (e.g. http://localhost:8080/api/token - use https://github.com/topi314/spotify-tokener or https://github.com/1Lucas1apk/gettoken) + market: 'US', + playlistLoadLimit: 1, // 0 means no limit (loads all tracks), 1 = 100 tracks, 2 = 100 and so on! + playlistPageLoadConcurrency: 10, // How many pages to load simultaneously + albumLoadLimit: 1, // 0 means no limit (loads all tracks), 1 = 50 tracks, 2 = 100 tracks, etc. + albumPageLoadConcurrency: 5, // How many pages to load simultaneously + allowExplicit: true // If true plays the explicit version of the song, If false plays the Non-Explicit version of the song. Normal songs are not affected. + }, + applemusic: { + enabled: true, + mediaApiToken: 'token_here', //manually | or "token_here" to get a token automatically + market: 'US', + playlistLoadLimit: 0, + albumLoadLimit: 0, + playlistPageLoadConcurrency: 5, + albumPageLoadConcurrency: 5, + allowExplicit: true + }, + tidal: { + enabled: true, + token: 'token_here', //manually | or "token_here" to get a token automatically, get from tidal web player devtools; using login google account + countryCode: 'US', + playlistLoadLimit: 2, // 0 = no limit, 1 = 50 tracks, 2 = 100 tracks, etc. + playlistPageLoadConcurrency: 5 // How many pages to load simultaneously + }, + pandora: { + enabled: true, + // Optional, setting this manually can help unblocking countries (since pandora is US only.). May need to be updated periodically. + // fetching manually: use a vpn connected to US, go on pandora.com, open devtools, Network tab, first request to appear and copy the 2nd csrfToken= value. + // csrfToken: '', + remoteTokenUrl: 'https://get.1lucas1apk.fun/pandora/gettoken' // URL to a remote provider that returns { success: true, authToken: "...", csrfToken: "...", expires_in_seconds: ... } //https://github.com/1Lucas1apk/gettoken + }, + nicovideo: { + enabled: true + }, + reddit: { + enabled: true + }, + lastfm: { + enabled: true + } + }, + lyrics: { + fallbackSource: 'genius', + youtube: { + enabled: true + }, + genius: { + enabled: true + }, + musixmatch: { + enabled: true + // signatureSecret: '' + }, + lrclib: { + enabled: true + }, + bilibili: { + enabled: true + }, + applemusic: { + enabled: true, + advanceSearch: true // Uses YTMusic to fetch the correct title and artists instead of relying on messy YouTube video titles, improving lyrics accuracy + } + }, + audio: { + quality: 'high', // high, medium, low, lowest + encryption: 'aead_aes256_gcm_rtpsize', + resamplingQuality: 'best' // best, medium, fastest, zero order holder, linear + }, + voiceReceive: { + enabled: false, + format: 'opus' // pcm_s16le, opus + }, + routePlanner: { + strategy: 'RotateOnBan', // RotateOnBan, RoundRobin, LoadBalance + bannedIpCooldown: 600000, // 10 minutes + ipBlocks: [] + }, + rateLimit: { + enabled: true, + global: { + maxRequests: 1000, + timeWindowMs: 60000 // 1 minute + }, + perIp: { + maxRequests: 100, + timeWindowMs: 10000 // 10 seconds + }, + perUserId: { + maxRequests: 50, + timeWindowMs: 5000 // 5 seconds + }, + perGuildId: { + maxRequests: 20, + timeWindowMs: 5000 // 5 seconds + }, + ignorePaths: [], + ignore: { + userIds: [], + guildIds: [], + ips: [] + } + }, + dosProtection: { + enabled: true, + thresholds: { + burstRequests: 50, + timeWindowMs: 10000 // 10 seconds + }, + mitigation: { + delayMs: 500, + blockDurationMs: 300000 // 5 minutes + }, + ignore: { + userIds: [], + guildIds: [], + ips: [] + } + }, + metrics: { + enabled: true, + authorization: { + type: 'Bearer', // Bearer or Basic. + password: '' // If empty, uses server.password + } + }, + mix: { + enabled: true, + defaultVolume: 0.8, + maxLayersMix: 5, + autoCleanup: true + }, + plugins: [ + /* { + name: 'nodelink-sample-plugin', + source: 'local' + } */ + ], + pluginConfig: {} +} +""" + +[[config.domains]] +serviceName = "nodelink" +port = 3_000 +domain = "${main_domain}" + +[config.env] +NODELINK_SERVER_PASSWORD = "${nodelink_server_password}" +NODELINK_SERVER_PORT = "${server_port}" \ No newline at end of file From e20ec44996426892eedac2582437489ccb699ccf Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 31 Jan 2026 19:12:35 -0500 Subject: [PATCH 10/17] remove warp, add meta about nodelink --- blueprints/nodelink/nodelink.png | Bin 0 -> 20224 bytes blueprints/warp/docker-compose.yml | 16 ------------- blueprints/warp/template.toml | 12 ---------- blueprints/warp/warp.svg | 4 ---- meta.json | 35 +++++++++++++++-------------- 5 files changed, 18 insertions(+), 49 deletions(-) create mode 100644 blueprints/nodelink/nodelink.png delete mode 100644 blueprints/warp/docker-compose.yml delete mode 100644 blueprints/warp/template.toml delete mode 100644 blueprints/warp/warp.svg diff --git a/blueprints/nodelink/nodelink.png b/blueprints/nodelink/nodelink.png new file mode 100644 index 0000000000000000000000000000000000000000..8d3aea8a7d477a2741561d5cc58bf22d8e5459de GIT binary patch literal 20224 zcmcG0g}vO* z(!vA)7%1^iot^YIWq3Wt^*ZR358c=`l*vP>oa4d8(=!rRMNP+ay!Nu2kEuP$$1HGrK3< zJXgyiPty{oWtOd}^Gwz7xrWVat&(BfowqtHG7@jcN|~g@D!&z*WNFq-zOgCNX2VEc zlNVQsR<|qDGJc_9oUWmlq=r@%H%L~uD$*(%$i2GN!u}kaVr}I_MJ_D~J`3rqCsIg~ zeLGsB8K?RjpQIA5VwPrDJ6`Tku30}(QU0wcqdUzkPs6QNS0+mg6N9;VTUs+#Rlr*2 zMQ3vHNRHn-ClOa!uX5*_@lq)-1*H%rg-4htEwPpb+GbhWVt3_|+7bo*#LGusl?)cd zG)D61ONltj6%3~-1}e##7|Uje3)#zr)%!V@8%aKp52*6Z{qo!{*Te;9_n_FBPDI$F z#?sKmS^tTCcIj)Epa3cXeshoe$$8oKSq`>7UeRf(arnUCC-Lg3O3^KW)APSN`+MCZ z!b9ACyeWn5wDs zM3r7l)U{sQrdY?WREtqu%pzCYyg*CkvARiyrb;|UHAp?>K0duyqpKRNs)SXN%@wVmD!;NBMhQ{Pr>Y6fF;{kF zlCH^cWss6$yedjp<-;N?rkke1Yan&YLRv^$(>PmI&Bn?kOT#EndH-N{SG*~Pzq=NJEl z^YfF7EAndlUvhE$|A_Pd82|CEWG*iM6a0_(pR&uVgR5||_rKkh_WyhN+1csE+3CsI zRfcEh=T})?<#v8{c5)?fd4BpI`QP#Xvi(or6?w(E(s;3d`Tr+e2*Ed206+sRRV9KP zOpj9S%v|hA@?P_QN+Z>w+5R%jvQxUYvV0O6&3s*fw0oC5ou>UUzeD=v9K>k*)QP(R zsW3MDW<~-_FYtu>o-!r%r+E7U(6OZGDOmg0RHG-LLX7q`)0{vu1TPf4^ciLIOtUGZ z`zBZajYQil&Bw|#Z<-Sk@P?L#>!MrVeBc7JZKs;rV~Ic0bIWxZ%YM|?pVS1R0m^e- z>EXefznA03{RH5VgCKYqDUirHSorht&v>b9p0i|CI~9%;#ZKY$iO{pai-jEXj2u)y z_{!*%MaN%!eJyrViNz4~jbn)vgjpo$+il#ZOhh;yF0`kwRrCZmd@PKN9FYQn=7_8hc>L8K>DwhwSaf84-bzWpgu8J3@JQ8ttE)@e{IlLJA|ZR3*4+}Vxtj^4G@sT6%B5fO2^S$8Wrl(4^Q zQ55@?Ohxfl=;{=rnRVwg9J^Nzt)OZ%*qMAjpZTkn736Y~@i_~z3wY?3F`#@yIRv%D zOQ}?J9L*vvoA^kGAd0AKKVlbK%{8MJF37VIBsr27M}L=4gRq2hVw4u221wD2DtUhQ z?(bXqxx~BxN3EOM6A~rnIv}`c41Bg!$I2ITYpZcYd&+&Ex!pTDO7C!|FCn6oV}GBt zP*lqANxx85XN-KRc%B1|WjzaPY zt!dqh8vEjxU+>px`{zh1p3512H{@R(81UrwC`@KTunBl>{xZ+Jd0&r5uzialBo|Wk z<~7-^Q_S`4`+NcUg*IxavP_RxR^>l!X6;ngw#=<2tau57YFa|iXOdUU1G4oRRN4a0 zVW8&eIyJzVyFw^#DUfDOHqw;jrpJ>eqJGVM&VC;AF>XG0@?N@>6fIEzy6a0Jk!5-- z0>5!+AJG);KR|)Lq=EG&z9IsN!tl>(+>zH^;as*oq4z379F!H={SrReXj3CAJ?2*L zkU`cIHWc!o@`?qu7^C#13DFOrb|e(f-wwB4%SETET&DaBpy}|8uNb>W>V}ev)5?JM zL+`yv$-KLQX}H&G{d4)zXnQN1!@H_RjFl-Pw9GKrd5q?iFHaFi^Fv-!CgunBGbDj5 zan0xkB>1Hc2X#+oD}P7Y+rRot^2Conc0EqKcdjh6^-{fZA{sod^y4b|tN^pAh~x1i z^2Pl5)Qwhp_jj#=!dI2wJ-GAztL%!7H?#k$;8A^XoAW2c7N&z@>cV>=Gtgw^7YPs7 zBIXQ?espa7Oghfu2zI{Ap~mjRtE7d^)x|CHC`;}Wi!|LoRP+1+rsgJiTlg0q?QPpm zGt4HJv<4n-rS=Ea5?9l1gp)lL`F_|adF`hJD|!6eQ^O9zrga8xmuX)n+jv$M)_C_; zgLUaVLyV8m`a$88r!1fC_UVKBZFSvw zBQ=kNJgw-0;vVzT%02{dhWDP#Q%|dujAY69XqMr+>1?O% zPG87=&t43L;9ov@%1~J7L2B_O>WL=BE}pfWxuE2YxbDx#Cj|L@fAV0V9Hy;p zg+&}yJJ{}~P@*tyjb`x$xAu%Pm%7)tj`G6mt*^mByrof(tirGW^BL1Ph3ta2V-nZ< zXQr^WV6W+)4fKI*wJc4cu&-#_GLR?4N9HpM6JUJD-?iu)phxgdrWy6-Y*|WY#*tuM zVkJMg2qypSAn8ySdLu1CDSO4m41W2l_Q@~gjFE1qDfx-sBwa-G%c_lk??+mVzq=c` z2d_R#N+nzNUbOj^OooSn+_u)WCYJ47H|}3uI;*cuC~GX=sSm9wMQO_ZUY_#cE7Usq zxFX9<#M$l&caAM>FpPmXh@IHa*w|O8BOEd!pP4Aqoyos=D!bX7u4H7ML>Uq2t4 zgT3&YWSk=wLr>jL_|nzV`|d{Pdx0;ta&8sYJqe;kieW6WF^$O%CKYUhVYb&Y4L=Jk zc2gPTBSBWXhn1+`(%D*mw)B)$UBW~5Z1}*a+HFB^1_*J-dZ3E3)b64wiR4USbM&j5 zHf!Ql`Eo(0T!2CQc7Il>6-!ZGN`lYn%-ts<-$J3}Hw=Rf1217_7($AhzzUPs@kgzd z)IZdGclq1e-fQ)$+FP>Wa&ajAiCe^wr;760a7u4!xBE^j1%n>eyEM?4=81tK*BFjL zd!TD-+T!bW?}@*cc5dwh7u=mY8taj>9BYis2D*>W#fmwew#-gXd(Oo(DCkByuIt17 ztur$-L%Q}eXBEh?;uKZhmzp~qr&)26KYz10nB`@>7a)EV@1EB*@!mMhZz}!4$!VcV z=O34l{#jDo&8ar2m9>o6)B6o}TjBl5#Z@Jk{EFprMRfB-wtwT1IBiH^ZPN1@*1eqS z@IxtJ(I`xPXFGuQJ#D{x>eKX&Mw*yr(x;^jTAnP0;5w(TuY8L zPAbYOsa)@}qcm+uqe$q#swqYL(E3Q&l5P3%l9CQoW^2K%S(9aaV|pJ)`V^^1ST=b} z>zvBm<`~`{#;)^==pYG z7fUZoSksyyESMAarbb|81QUMGQ-aR^OaFxC7kOJ-o6zikn&`6p^0eB1XVPf(?#2|# zo1uubH~mPR_74BOXRwp+Nj3Yg!tCxhoPEM=E$vV<+LsBxDuDr1d>z@oVp% z-<#-!{8p;O03 z7I9dY<4DdIjXG=2B3TM-$vp2#JdnA&^Fe!|!iwGB)DE{N}8>swx?_loq!1(z$5?aMEWM)i@b%|}w;GI-~7g}z{eDdk@+#LTFT z-Sp8z>tg3@NXoASJ)7%^$4Uf|X+NdBB{xtC)37PDe{$a-6&qPs#rXb}_ zl8or7)6#61GjZqJc$*l1)~XnKTJlW*gd{)Pcf{w=UxrKzD@r`Vz1}pKh%X6 z&lzCofBFa1UrjSP&DiLhj@;>2WtYlmCB8-2*&P4|uO0#BXFUtWw9ACi6!nZ`677w_ z`~LbV2UfkkvrEFTsK+|aNt<3>kl>D6sbi6I*R=`=@GFEJ3d^#`^Fsrxt8Tkvd<6LO zW*2uTaI^Wv_Y$#5xOzFCLiVQM)(rab(!d{|zjc{ZKANKv6G85Y7mQ>Pk!(ZghKl&% zv6^3k1ZUOsQW1e39>KAYZDJw-#H>jpdzK`JA4VsQPj<~8fy!T#Dd?4US%q+$x0*I4 z#8QuG+_<&vNP)*ZtyWlF-#@H1z+Y~K!=xgdTs9ULou}?%WWthw*b4JzOMSm`2bz!I zBTcgiCTK#1h(573Mwh498IgrqQX)6QAXJt%bV&`10+0Z-Tzul3mYR7LaWg#0aKge) z<b9JC%_PFU!mbFmOfnni>Z z^f)tDY`^#7jsmnIQv2fZbO2nrr>xG1<+HcqKklwhBn;Pk+TZ2RW>?nL)t!_{S+piW zB2{;mYE7wsa4%s?0V*UzoKxTo*2N~BXqq0=l55a6K7=J|>=zDw4Np6NC=oME5-F#3 zkj*90LjYM3TXL2)Z?t-;?J|d{xD-f4R|Z zje@>(b^YFtgAMme1Ag*YpKGiyi`u6jakoneO$7Ayrbsph>}|E)f&2gUp;CDrYh4-@ z3if!i#t_qLN=Va$>X*0f1Snnax;fPNNO$AwU3~majj|HTo76>Ri+p$}x=EkKwWdu* z-v1#LK+DTMQ9e4mIFfP@qUZA=1gDO+w<_txt_Kmu4uk{EhlM`J&WEL&GH6dZ{ZwO# z97hJaJxWU1rMzCGD^}U$7m84UI%u(hz$L4E-fqRvWa7?;oEhTC1zJn5=jC3M&2f9B z6y#^1QkY<%B#ob79Y^0i@5lz?;`S1%>I{R9cd6Cs)p!oa*$fWZem$mW;J-yv_d5SF z70&>um>N?IKM&kXk5bZSgGK*T_Y zkPre&Yzdl_P>cW!ykfP9XAOQ3zGGRkd*hI1Dfs^7?tZ}}Gs&=V8C{)nCNs$lJ^w9Y zB|}ab_a=9$i2$6?*N?+^$QHs8nR}BZ0HMBsXQ;7J*g+buT8hG) zielvAjXqo|D{BYlt@wTjxUnPXIz0e+bx{iMVH_S*53OG;u}R_({?_dMHE$dl*q=aA zQReo_+?k!Xfu0fH&99-cZZr$odh7*v+y4ggC>6cGZ>&-@cjHJ1z&`%IaW`{tTH3figK$Z5XtCd0ozM+cK21EKgxS(!CL@0;ZNx~B^-OY=#PM3!FZ&S z?auBl>qA(_$_7xL%#5r!} zfXFz^7D-1@vvZuX)G+%bC9Ka&g9{E&xNXZmsxV-P#9jkpuRoAqAe0HiEAQuVRP#df z@PSdQhU+3t-G!9p6-qPA`MU#(49wQDmN~JA1Z*!>EEz2Ptqp9WP43lkw5QqE^!_(! zx9maD%bJw=Pv) zcT)8_2&hoeLWJAn3qFTC->4(&m6ut*KKfp85xpm#)OL4G_1;wjt zH;(X2%1uw;=8C`UKAXKwU^9JFUtE@Xe8-4J!LUU=xx>04yToYjmf%evFkKwUa+D9j zaTecjlR^3c_;&sjhpbY3WYzkEdOwbBScnkZTCeN+le}=mBI$BQPg2tLpX7iB1BL+T zgS{2SjV8jt*X_IWJDtjb^Fn_Jf8Td%twgY+Z1?{9@xf*2eXtRKF8&fky|z@3-)idk z*fN@4V2SzTO7|DN@qA8~jNUlfmYq~GRBq~A!561078K5^7>y*sG?!9ujhw=M3 zPWR;eIi&;e?wS|C7V6PkO4^R^s8bv@dOT6*@=nw5#^8T$a{PulOARTzsq%y$FT9p0 zU}33Uas`juMd1!7>tCOS5PM%k0zBhLHX+bw1cy}55^&5cL%nnb{zKAAomFXYwxfq;ABt|A)$2Qv53DTF^GP8#Zr%T988WK2mJcSfeg6d$9U38HREclmevsjB*-@b0es+67w$6q77|Xrc z=z-!OIL+>hP}uDB+Zsr1yiRd_%MLd8v>EdafhH@Rllg<*2kHSH zOHi@W;Zy4Z=t#G139jq?H7>+OMRbondMc0z!oiNi-5UoEh*ZypXLqz-pkN;{mnW5D z>_*t+GKO4lV34XLa)*NW`LBsoFFpN>nJ19j4_JX~awx!22!SFN@ETyeDO3xG$>uWU zV#nGV)4QY(nAfXaCG@Kk^O&Uo_O7L(=tKWP9~*O)g5+Gn?G7> z%_Z!DjBYlhJ5zr)rjCN$deZjhC4-v32V(^VccRKdj~}ncFKDcBx#oM8`$*v#G$->r zqdO9rCmn95hBS_Dws(|Cgo_R2SEfT;H!Hb##&@lF$&b#KL(hhr50eOukBmWm(^MA*kQ6d0}!m;yG64O-y0f&{N24WdzEhWshi126RVZ;yN* ziZ0fmWu2(XrW%pGPsE z7#sQI7xp%xcVv)TFki|6-yr44QUw+du{+WSa~A@sa93y2c=YNZnTpp@26+Pwjp7ZO z>rBsVN6?uil~%FJz(8$}wV69#?N%HQf%P2Q4JW+b_2sIj4>t%`^Xao?qiG&m{@7y> z!Mbia?S41arO8YN! z^h>a{4)%0Ud$;as5l}{|+<{$v-%+(= z>_zvbak>$o0IwShJ_jw2XQF;0{x(&{YGF4q=uN3?2R;z zu!UWbgdiQQ0iS{rW){jJ@hBx`u`h;HI~G}Ye~IJ}+F@{N3oB*Uh(q`Y3f?p8Sh*Mn z0=dif1TLhHt|hstigu}FDyE#XKWjny_Z#z?OiF1H+1r*?c=~R|b4u+fW5V$=#*b+k z%BvcOv_RgFU~A^K4Tc-lgpo{uBt|L2=*7N_SyReI`RRn6ouO0JR}9$X!_VA?wCeaq zDx;hm7R(0rteja*z(9fzN@Wt<9N7;1<0?k6uvdU+w>|iPf2edAb(}tCdZfEhP)_Ll z8d(kj@sVwy=JNRTFo?K22&LD(nc&ZBLz2^tp>zV?dWNikhZnp1X^%JQ#Eg97*;j^q z{i21~vBr<(e}wx#b~?SJ&yi&8jxZ$hK!6uv3d9bqLn%AIpzjTEkNwPdf~N(9ZfW7= zLj5oQwA8S1VV2Z!u$Cs6vk0S!QiI$}B_VkOt?j$pfT~kPW#u|?lcYKvzaQx$4S!ZR z4^yjzK4Vn^^K+MR zz5|$K_{dS)9pgR0jCt;g$Y~tkw&uoGS|eYhYzBWxbZ#4r@zrg zr58MRk6p<)DEXM5W%7Shl(oItP(^r9v6Dx@uXV=p{15Ee(MqqgUhhmGHAzhp>4wTgv@=r9WyevAwFc(t}CpxIlg(Qqg z;xE4SeAVSfryMlkC~(POH0d_kM8R;oV$;#S>D%^`gS5W|ewv_}c00LLH^EgUW%Q>U=NuCB`NSK31hjp=33b9a@Pz?k}ZpC&$mtul1)O)kC2l zx;VS|_?lCbl5W{JxCaHzCfu|ueAFHNmUXR{QzGyrn>>drs{dte;OcQ>=wHTs7^{5v zRux<@`og-|Z3RwKSQsKP6k7Q2X=eV!^)9{J3nurNDAzqr0e)TqAA;3=KwyKTy@Ms` z=$~z`n6Qc)a}N&+Mg91j;dugr6~8P!H~_+7oWQ zafz$~U`4~O3KJZD|7`oObfI9>0ij&v*9*c#<;@!`7$S&VMtg0!K%F8d$FAy7P`zPbjzO9Ih`Daof*y!u!Q6^?_{TBr{M#Qah`}(1I-oB0 z3?izaec~HTMbwKj8HXFzo4J+Y(HRNw8_EY!=lN7na+xN_35l|Z-g;XT)odzPnc@HE z3y`0_b$`?cL+ZipnYGsR%t>@*w2o_p14SmrOF&r!NZN zbR&L$(ouluLS}Nn`sU*XUux{1o@T6*YUthGq^6ZE61PbciI^G1Ya!mp*!Z_+^L?bf zkxxGtW~l@tA;{D5ALOZ5j#n)3xC3~#-A0!kju9j8947x7{>53bBv>yImaVi|1^(-?da@L&mucmq{)4b&;6s5 z5!}G)(oKyJFEcVm`vsB$_mqT{ji2u~Hdzwy$RH0Wie%5W=DrF;9Jt!-j~w6n-n*J& zbY;MwRp;B-A0J8xq-;;q^}p-Nd6hZ;h-s^9FQA_H47Xj%Vy+9KAt@_Tu@O(X;ByTe z>5wD568<}6v|XL}yR!UaFh!B1Mc=oid~bVsvzXgEQaK+K@bf--H>f7}Ec(f?h!$q+odFi{H znwKXHJR{Vo3gLd{eUmOQ`qhI*~l)9NjcmpAYH9zb$;?3CLO3r}{e4 ztccK)wXG!-Hp~0pvw9~=3!AoGRCJaX4EqN6NY`8TGYCDH#9qU1%8s|6`|bp|(r~&! zge*||zsUv1!XpE*W0xtHU%kBT8DwL{264A33(Ef@0J(smAkTydmh_|G5+swP2za*n z9=-e)_sRZ7l@XaLZ>UhocEP;QRf7+sTB*1HRKZ^}h^`Xz@(Il;g^j z370UGH{pb*|%91hZt_m)e-I}pd4%?m^S(D)W2BU&)yJ;rSC=q z{yiUG*=XSve%%gH00nkI$-HTU{S6Fo5gSOCZ8<&<6h&Ty-cS z_(bh3W__zyj&?$Xkjjc$5EOvyN3~lJ3)M$H((^5cV|O2(QY_VGmaFeSj00}8CSzZE zyLqVH+!ZaxSa}=J__~COJCv56}8wgLiis_OAVR4kfiW$v1v`s~O%{O)D3ZRBc;7)~cr4K55(k zmZ1^+`x_a)Bf10_OVR_(`zbXDKe0C$IMa=FVJl%7>^*k1*CmV_p~OO{`a}@}Vq)(a zeF+R18Vn`@e;@b~uvPI>p1ynYnI>1!eM?Xxp8# z1TNu(Bfr=|=sXIm0$GYyJn=L%`qD6Q-|XL;)XWHF;Xe!Eif8vWXSY6B7xq~%oUW-T zqOZk1N~!i^1=uPS7E&EkW&-Q-`f#Qd>RyVaxi{jX_-wtWKZ67^65dyV#0hFVu`j7D z&{G&X-SP4UkG+!S>8bF6ec~fLAd~rVfqM-J28trc+A6cPWDNYl_G6*Kymz~fG^Ch< z!j}e#Xb-<^Z_lk4*Ovd&F*UpZxgF-DI6;jq08zrB+(x~N7zW5lT-b5k=e|_W4A%QM|Ms4|KZ@Ce zY_(zaC_$cpRT1h(NLh8un?_&!cqouLhLo#tDhJBYA<|+>z<6 z2(f&CG*Q~VyK4Lr{cr&<9rUNepXu-W3}ej4e`})k_4N}xf$7P%r1*vh27_Iib2COq zG7)tN)iF>!DL-t3fjAeMsqOcnTfoM=hI4&Jmi5t!qzpOdYgK7LdwOlPTj&1cLNh6N zbg;SYRI~{*aJ>BX?fhl`(A^Q}$iZ&KbT~EM%=7Z49@2re%7BY%Ej3LakUhnmng|2p z5W&0ikrb@npq7CU_toy|+pkVfX`R3^NO+U{es((dw;8HhS-60qgM#K<&`-}4ghNwx z)vdz{OCC@NsIFcL<6O(sYahln^kslIu|I_C_M59gw}Q4$3LzEygI?rlrrU!InD?K^ zMrAgitxjdIk(9=L8fnu*nAWj7tVa6kILkGE6x*Ejc8*epgmrm%dFJ{B;>RjT@h{=9 zl(IJvV#EDu7r2$^b?lV~CUZ$HAdtdp1qUJ7n9Gpnl>&Zy)@aT zwIqYggDa(f51M+g)7wSN!1J=N%@C8_3{XK2QLWO z<`c#fL}IApdz=c(V3;s@*4W->HA@FAk;}LL3XA`G$dSFJX;!BAu>h-t;)LAC(S!AYeF<*>Go3-)0FMC?-kG6u&Ss4#{9Ie?i>-qk z6bMX0unoAtt}@AiADCwXL))U1lw3Ok^OO$`#%m)*0Kw$YKLOxRF8Ka~ANB?YTJxkA zLkar^(2-C8^qOscl9WKp%Lxdc-@g6H4D#jii#k_>H^tW#8K{2LrwhH_Je=6-@A=o{ zpV|noFkw@1E2H;n`}$Q%LMvL7MflTjrK>W=T=U(86WByzp}YJ@&&_v}UiNSy$}&gc zxs!j{C84a~>?N!zgdWAE0|7h}K8r(}&GQD1P^`~S>y3* zHDBh-yt{OpO;66X-P?OVP_jyXa{O34XjqWsacB9UM&#zteD1wejQPgLwR8m!MTg4EN2db)W5 zkcDd|ewu6X!s)86lbbY4MVgW+qvQ^HL>_v7m#sXJ;T9LK3Jpg$0V)2q4nWZg{UX`hwoWr)7lF)u{#tggRfrW~ zDEoned;19a5BWCWCKkqPfq0ERGG~PW3>##Qxa=>hCOOwF@Pa^)U-ONSe3zw}9Hg59 zl9&`%2^b2URzG}?@I6rkC{v1Mr6YynCVkx36=#RE(K3%^J;>;f=L9X1I_D4;Ob(HQ z2RpWOKn{03bs0=eae)~WqT+cI6;}}JK-@LV)oi+5w^31vXw9uu4f#vXjk7!1a(loo zrmDt#NaOY<4{A%l-cG+k}t49qpbD2W_8T`_gy;^E2TOlc)Ch_XX_5&N!{ zX@F@96FO^7+yiit&I@ihUsgYWG-bAb(+P$D>Q1W|brVK1vI`oL9jz{YdfLh3rSt2h zT$Ml{H|MGXYxYORzh5q+DdP5x|aINI?)U(&CzqOO&?>pkvt2TVof36#MpJvPoy` zEQL;NBkdy@UnVY0%6)zj&>60CYu9X%NpPx@tCJH_V%}4)U#I7_X&y|3JSVp2)ZgxR zH0XD=z6n>ArA$VF z)skA`xWFyu-T2XRCLA2>W@tMKQDaS^+f`#(#gMetWVX-t4a~Scc;H$yBuq(N*f~Xf zHuEl=V3#6=r$<1^K@*m;IJ;~J(X=3ULcQLD@Ij7pe-%NOyx+j*ve#iX&n60n;CIPT z9vefXY(mHVvuEC7Y&MvoG+CvZK=3L#3HKu5xYF8*f2tQ1{*z?wsy--krDGPYbcoZ4^%vuej<60u8>tB%2$& z)8F4auFPPw@k!SMS#x)`PC zhc~v##hx2n|L|#J@W6c$NzSkywFQ$olL8Km)@Ab{m&>2j5 zNa%Dv{|(#keVMnFrt`-fn!@L13QKbxTB{>b`XIssWzrt|UC4!2+s*z6p#?lm@^zP= zUyD!e&h0ETYd(0iy*;TXY088#!O68UOwp1DhuYQ_<_{K+LIJk*`|Kn-2b=!%Q=(Z8 z*Z1(8{EQZqb@v|b`uNF5HTDRi7x zJ4YJEwY~GSH{fEs|FY=@tf`r^3*Pbu`iRhKdD+Ef`Oi(zxoq8t#D*vLc9ko&&ir}} zO+lFgfz4l>4YA_SA*7L0rJ_t}$h zTab=6_v}0_;y6v;ONhZt)q!S|R;)?iKSC5TqCVb<%}fDjqI5*>2g=4JosUA6I}&co zmJz%#;GK6c9ji#!KK5xi3Ogj2xd*DTWbdpQL5BGos5bcfIYsq=Pq3aA!^@jUk43Z{ zyXK`X9PjTm;z}S!m@&5kfsz?Q_W~$tvkv^m?K0jE7`5tw(`ml{!E}*R!A& zte|+wdCf(VK&_>>g39s36f$tv^BMuhisZ&uojS$%C{9S@&ucqyQ&Oua^z&J^vza%o z)b1YyaxkCUWt5qA7sQNIqFbNejq;acI(hjHt4cpF;BpfSe%TBUsa?G9eB&UHu>nb( zuh~D27%f!jOM@`*lipO!{FmNVV}_4T{fM|Jf9Ccmb&CjCIGuY2w98WMF2EdA1HB(O zUvCqjVhWKZ0jP;FVyv7}@!3U7JahM<>5-MC`Go#$CHI(#_%p1HGw9|FBn(jq`cR0= zBk^T|qcCUR?V`?4Yly)K(Qir<0L< z3D0E<%PC&Yk?{2u&+e2niae_JTco(o>yLo-KDUK2r=i}vLD0?EBq&}S-GYH>GD$ro z)R14R;jvIIBQHQ8V>mqDJxQz&m{bN-kpZ$dIW(~lyaw{mbki|yde!gkZ_8?8kkfVk z3IZZPYQ&k zX7ahfb0}AANC?c);?XGOO8$)dKgpvW%tIn93xT2_g{0Vi+{hY2HsL0AC;BM8D$*P6 z?X}uNRs^Z9_va_nk{nSk?(Hp6Bc5|>A^2jX8p*PIznNu_E9Dq?0GBD~kC*vWB0F^i zr1+#JcL`lc_A4FR4<8Qan0pIn&14S$J^)lTg?F~}bTyf9ZtNp1YL0nlAWK7`tMyEUk=vM5T+l~&SSi0n?s3Z!1 zMHY1QE8AK@qwuFtfd4f*q>Cm4&*nN~?3cc0RQg^Q)!2MY4{r;goLBsaeP&KVm3$k* z1qJB*=Jp;_e|tMBEE!$(I02|3Wl2zTWQV=RxHxtVa99l&9X&)%@IqFRCT1cbg^5ur zqmM%U*Yt;rlwklXPJ$OJ!(Od#I0?@s6ZchIstNCS72#-us(W^{`${9@4Ka-&TyV|5 z;8d9m?<_{VU_gQ!T>E4umCE)9|8*jdHwH`dvgpGjq{4J?<{w2BLpuRWjGu;JE$w^n z*p`f^gX$SYD&peeq?qsgFIDzc@r7`Q=J1&yH)A~gbk@L?$K>m+QxZ$7k2PgwNN~2| zSVDZ|yzaQhi}er?^pARTRtE2i4)A72oLJLmssy_CK3)e}q`2O$v9a6Sr36>=YUv8{ zpmlbPw)jEd?60~o436MC)>0R~8i-Y4Z?9ORh2wJ^POs+BKl&7NUUey`Gg%_8zOLUT zeCG0i*DckFi^A6$MrDuwT=k=a#LVQyO=l>{s3(1#Sl?aOZom1%#>~IHGImi32SG-f zz_h{J5-ZuSpgyagGQ16iP_xqCUi%RYodfTI2Nyw&=~lxt(odssCr-Vw7kKz>?0$-_ z-{EL`fFHJM|9OJXNa%@pwEW$}EoxwV<*~JK6Of-Ce9-3s4D^rLTF;FI_Co;yOCXJi zS5~7I@my7Pb--u^Wp{Sk+bN=#u$Nncg0q?VX{xlD*)kI|!tqHkfBWZ`k32k>@aB5; z^+)x#M0h7#{-2&X^m$u~IpoQEoxU))Tpkj%5Rc)Ow+;6LXR+&+opZcrlUDNV8y_F) zra&^wrz{ZzMIxdpY_xL0)e>;1t!GB@bq!a zyYwZWP&yYDhUk(a^dK$$TcTwp_b3HbJvuI$v@$KO$5QAZW|wCa%2fCBNhvc1R5JXh z@@!Y@NOUqSc)ve2U0k2=_c@(ID@^d8mQqAPs2N5xM`Jg-*4MXkPkAIS*L!@^Hg9|? z%6POiKu$jy>d4A99gox^o0cv8P=j-x%=;Ku&qD>WnJwy zp@zpoUB~q=jv?01xaWSgD9FhXu}DFw<*-|%g1uB{Bf4a)q)wpMkU$E^wnz&_ea>&@ z>P}utMhJPV%xjnvjwm6}Kc4S}*lJKQBdJCf%q*_{QGj3Ietz1OmX;7Fn9q0 zL?BqK4JNo+-`(`l6oH>eK{~i;M$^u{qXz!^2syyUc3Jy5a6ug(={8>~q6`PY4eJ5d zQWpav_nXTIEq;PyPn-pfkCwy#39=1M@@>8N7D@Nyu$uz_WpJVhV5tZIG=Krvoj3)I zMF8N0SiS&2dARZHS+pfaC4g_~0A%N_2#wDN^+(YEi3J)Up<-+7k~9R4zyQnoMkgo5 z3@8BrMxX=$R=@#d02m>o)5zCB7(LAMo=k>#q|CEtk7j8EplI)=1Ay|G)i}f z;I!Md$Gil10MFH0(jV0~o`sZj6_8Q^(ev}29GL(8-H@SzRq$r5cfz(4oHsy z{2N{ZA^^9$sDPJ}Mo5}~2`j)UngNmm{n!N9qNBb09czKh0i%V|HmrnFU}M&63>BXmOQ3+F1hz&+Cs+bN zBLEO~MU32PfPFro69DuqQwabc@U+qyp{%8hNDGt#q5+kvB7VpRk{>$k1}hZMXOPyw z#LzSkKx=o}wIYByFv4oBk(+;Zc8xOr*w4E=DUDFY55~b5F)HznX<@inhGDQfSYKzR zCE-f|jEzYIkeKGW09g&%om>s{1sA=~`?cpBfuJWwJ#ZhO0#J>Kbw22VU?m#BN14nX z4DMKW?$%ai5gairEhWmGpwlTXhM)$x!e)vb~XTjqOI)%$D$Vy zxCHrw7ue$lIP(_b000V`Nkl3jPCwoeqAY?{`lRC8C(3j>4W%H$Fc<(g`LI3`%Ye$)Cjj_nM$Cb+N&p9- z09XsE{hk(lq4A(jdp@X^ZTj(sh@yoGfVFZlqUaz10D&bOz;&Nbf0mN~DFQBgxdLvL z0T`MRR)cnXV7`m<+m1&XjVZF+g5*rtE*b!6)muRTf3iWEBan71>bZ%>;S&vzx}aix z1`&WDfRU0eI3!qMrzw)yW;x>sSivfcmTddhnQw9K~2P?khx^HQ|$*hb}kapwNe1ev~=LT0v0pC z2WW%=N%Jz4?)jNnokfENee`I2;RvC2LD)HT2wx!7GTo0JanK?e98?UndZT8TdJ zMD;j!?huhT1e_rjw?jt8O1oe}Gd;H`tuF|nwA|C*+1a6Jr)z_jqhysOxq|#vC={`d zPuid$pjY#Ly>Nua1K69pMNWri1OO%BCkiINLm_=;OD>d8%RKp=t*xDu08nmW?VY}` z?OI!#H6LM0;@@LT?qVD4+b;o7m^Z zfOcX61OUOqko16pJzQz8Lc6;MdG78mbb3jQ4_7Q-*Cm10u4VxM6^z3|nRmo^^o-45 z0gUYL??Vj~!XFGSD=Pwg71@d8t#NLna)rOot@<`*eNB+I2Go6$2JX0+1@^yV0vLc0 ze?jA&uh#2d;=p$kzn|hh{=i8NKmisyO8TobRRJeC zN1df$*{|Z3hdx#}Iy2LU0g#1IVbJeTqF7T$2XzrN2RByD^&uFajSva=dVIYc00X$d z!qYP2*OWoOA!3ePya<`=Og-EZ8MgoMaN|1;z|F$b>YIEBHI_*$y#fM-i=BE8Xp}$m zL|yp5!5{XL8Zcr|hpQfQnmzO3Tq6;*QyU?(|LH}t{xv!pUk+jdx?2FCuQymD`NPLA zp5&AK#znjWlttEPs$;0VeeIs+THIm=D_pggX3pIe#hc%y~U4}N8&DT{0 z#pwWRxES!VrqWeksR2ITO+-(q1#s{6S< zb)G-`@=h%P?M+w=l>>OQvRP8(FBACVtPBnaJ^s(V`_-?bpuI<^+!Wyv`#&46PVfBT ztJA-ooozN6z*WL;aF>UKyZ7ZE-~RjUPd`3bIoqt=9^AiQH3j7G0m60i!BvmB{t5cF;z#jx zTxJ9O_{ZO!)kwCMF8Kf?5*w>=`X|C$=~+k4BV#c|58j;BcEWN2@EjKkfvg+=HXVVD zCm|U(K+(!+EdU)dDd6PfYwPpEZqk9|01*2A`>DLF#c^}9=7xw&o1!Nt@tl7z>7jqw z@l8NkNLre+Goa{{Z&w(dSaMl8o+p<~Meq4FEYFB@(+5 zEB9_OSmyJqdFy-GOHs6bDt{MncW23v!!Gh>_TzR}yC=;_Ydg*}Sgdxw-tT?Po6&p>zkgeZ>k52EgM)*sz5eK4 zNlFOYj02*NzyG>8|B%g_M}O}va`H)xKYy|}!*9B%IT&ddforz&y4 z*mw@J*9-FAXAArW!;ACtw+BhQ)3>g23!%^8$H68hP}G2Ee(VM2bbsnMwuw&nemKmH zeoLPJY_`eXx$*)DGxN%9j*M@8QGfeOeKsf%Wo3ax)LvZ=kra{e3Wd#l`k45)o5w-I z`T#_4ZjUFAg7vOl&1`=Y&}!rX!07d-n@0hF)WDLrzX_1^SuP*VU(Ozd7XW*tvZjF8 z0#w%{6pki$z<+esb|qbRaD+A{AV8w9^*O=F$8ILqzZ|uS07t(}K|p~qH0J-U0}##j zJ>rGQn}1%l3IJ#_mY9D-7KPSlg~zXcK3ZP~qWR5rn*c}*OqtpT;PvgxiI2gw+0#g> z^4~rHC$onWKfyBp?E~QF1lyeaVgFC&9sqbC(GTca{@d>b9t!{5^#|tv3jpYP_WzRr zNTs~xPYvvwV5>ghIJRw=-Ei~>EC2JG0cp1xfPfCPc^ z&fJ?Oxw<#Qj+9<5pgV4|ft4F4B_LZ+=gt72F9RSu?otTSAnHu8KIBwD4uD{}CkR%q z5V3bK#QJMApjJk5h4V&2OwqR2WGp4_h~#P*PPSZ-IX;>;#s2~Gs+U|rke?^0np!3) zj${25Hy4bs2T*ZucB?LA71e365;2KR@|Fmxrd7!~pjeZ6vj6F}X39<_5s;O2)er*8 z&J>kGJgr|&c(bSfbL_H3)6 zR$Wh;_XVXC6r7*EUnK*8Y{^B%ls#k#ve*>5hQzja;`(L5uxwLx^45N6p#W8;D+<36 zHk-y&wVY_lC1%ca5ZtW z$eygy=zrCI*#p1XqlGN;5jONnA;q5UkH>3VA?(E>S1PMk~xT z#Y&zfs(t!p^;9r$-GUzEvd;hr!<{hP4K3~N?z(?D - - - \ No newline at end of file diff --git a/meta.json b/meta.json index b1ebddba8..2aef95bfe 100644 --- a/meta.json +++ b/meta.json @@ -4306,6 +4306,24 @@ "nocode" ] }, + { + "id": "nodelink", + "name": "NodeLink", + "version": "latest", + "description": "NodeLink is a modern Lavalink alternative built entirely in Node.js.", + "links": { + "github": "https://github.com/PreformanC/NodeLink", + "website": "https://nodelink.js.org", + "docs": "https://nodelink.js.org/docs" + }, + "logo": "nodelink.png", + "tags": [ + "music", + "discord", + "audio" + ] + + }, { "id": "notifuse", "name": "Notifuse", @@ -6280,23 +6298,6 @@ "self-hosted" ] }, - { - "id": "warp", - "name": "Cloudflare WARP", - "version": "latest", - "description": "Cloudflare WARP Connector (beta) is a software client that enables site-to-site, bidirectional, and mesh networking connectivity without requiring changes to underlying network routing infrastructure.", - "logo": "warp.svg", - "links": { - "github": "https://github.com/seiry/docker-warp-proxy", - "website": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/", - "docs": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/" - }, - "tags": [ - "proxy", - "networking", - "tunnel" - ] - }, { "id": "web-check", "name": "Web-Check", From d2509b49f3368f895d0a4c7eec26868a2c0d7957 Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 31 Jan 2026 19:21:22 -0500 Subject: [PATCH 11/17] n --- meta.json | 1 - 1 file changed, 1 deletion(-) diff --git a/meta.json b/meta.json index 2aef95bfe..a527d7db1 100644 --- a/meta.json +++ b/meta.json @@ -4322,7 +4322,6 @@ "discord", "audio" ] - }, { "id": "notifuse", From 4ec9f6cd02cbbe97659e06e2159f906a4f30cbd1 Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 31 Jan 2026 19:22:53 -0500 Subject: [PATCH 12/17] k --- blueprints/nodelink/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/nodelink/docker-compose.yml b/blueprints/nodelink/docker-compose.yml index 3bc5c5ac0..89f03e60d 100644 --- a/blueprints/nodelink/docker-compose.yml +++ b/blueprints/nodelink/docker-compose.yml @@ -4,7 +4,7 @@ services: volumes: - ../files/config.js:/app/config.js ports: - - "3000:3000" + - "3000" restart: unless-stopped environment: NODELINK_SERVER_PASSWORD: "${NODELINK_SERVER_PASSWORD:-youshallnotpass}" From d01e112a5c81cfc4d207d306563166fc078592d4 Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 31 Jan 2026 19:24:41 -0500 Subject: [PATCH 13/17] f --- blueprints/nodelink/template.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/nodelink/template.toml b/blueprints/nodelink/template.toml index d2cf3d6e3..e8559d420 100644 --- a/blueprints/nodelink/template.toml +++ b/blueprints/nodelink/template.toml @@ -1,5 +1,5 @@ [variables] -main_domain = ${domain} +main_domain = "${domain}" server_port = "3000" nodelink_server_password = "${password}" From 9ee4bcb324bbdbf4afb31ac7896d99f4b1486ca3 Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:17:10 -0500 Subject: [PATCH 14/17] f --- blueprints/nodelink/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/nodelink/docker-compose.yml b/blueprints/nodelink/docker-compose.yml index 89f03e60d..f4ec04a1d 100644 --- a/blueprints/nodelink/docker-compose.yml +++ b/blueprints/nodelink/docker-compose.yml @@ -3,7 +3,7 @@ services: image: performanc/nodelink:latest volumes: - ../files/config.js:/app/config.js - ports: + expose: - "3000" restart: unless-stopped environment: From 76cb83dac544719b75c669e4d2e1597c3e35aea2 Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:31:33 -0500 Subject: [PATCH 15/17] y --- blueprints/nodelink/docker-compose.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/blueprints/nodelink/docker-compose.yml b/blueprints/nodelink/docker-compose.yml index f4ec04a1d..9c62a9397 100644 --- a/blueprints/nodelink/docker-compose.yml +++ b/blueprints/nodelink/docker-compose.yml @@ -9,3 +9,7 @@ services: environment: NODELINK_SERVER_PASSWORD: "${NODELINK_SERVER_PASSWORD:-youshallnotpass}" NODELINK_SERVER_PORT: "${NODELINK_SERVER_PORT:-3000}" + healthcheck: + test: ["CMD", "curl", "--fail", "http://localhost:3000/version"] + interval: 5s + timeout: 10s \ No newline at end of file From 03a171cd62bbecdc63bfe9e077f49b54bc90cea7 Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:54:59 -0500 Subject: [PATCH 16/17] f --- blueprints/nodelink/docker-compose.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/blueprints/nodelink/docker-compose.yml b/blueprints/nodelink/docker-compose.yml index 9c62a9397..a920f7e33 100644 --- a/blueprints/nodelink/docker-compose.yml +++ b/blueprints/nodelink/docker-compose.yml @@ -10,6 +10,8 @@ services: NODELINK_SERVER_PASSWORD: "${NODELINK_SERVER_PASSWORD:-youshallnotpass}" NODELINK_SERVER_PORT: "${NODELINK_SERVER_PORT:-3000}" healthcheck: - test: ["CMD", "curl", "--fail", "http://localhost:3000/version"] - interval: 5s - timeout: 10s \ No newline at end of file + test: ["CMD", "curl", "-f", "http://localhost:2333/version"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s \ No newline at end of file From 6ce2b5a88aaa4dae6f89fe670d69734694c9f3aa Mon Sep 17 00:00:00 2001 From: nxyy <175990828+nxyystore@users.noreply.github.com> Date: Sat, 31 Jan 2026 23:45:05 -0500 Subject: [PATCH 17/17] test --- blueprints/nodelink/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blueprints/nodelink/docker-compose.yml b/blueprints/nodelink/docker-compose.yml index a920f7e33..9961fd4d1 100644 --- a/blueprints/nodelink/docker-compose.yml +++ b/blueprints/nodelink/docker-compose.yml @@ -3,8 +3,8 @@ services: image: performanc/nodelink:latest volumes: - ../files/config.js:/app/config.js - expose: - - "3000" + ports: + - "3000:3000" restart: unless-stopped environment: NODELINK_SERVER_PASSWORD: "${NODELINK_SERVER_PASSWORD:-youshallnotpass}"