hi im alinez not even tryingto hide it
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

organize stuffs

adam 4933c258 a97780c6

+270 -270
-269
index.ts
··· 1 - import { encode as cborEncode } from "@atcute/cbor"; 2 - import type { At } from "@atcute/client/lexicons"; 3 - 4 - export interface Env {} 5 - 6 - interface LabelRow { 7 - id: number; 8 - uri: string; 9 - val: string; 10 - cts: string; 11 - sig: { $bytes: string }; 12 - cid?: At.CID; 13 - } 14 - 15 - interface LabelFrameLabel { 16 - ver: number; 17 - src: At.DID; 18 - cid?: At.CID; 19 - uri: string; 20 - val: string; 21 - neg: boolean; 22 - cts: string; 23 - sig: { $bytes: string }; 24 - } 25 - 26 - const enum OpCode { 27 - Error = -1, 28 - Message = 1, 29 - } 30 - 31 - const LABEL_VERSION = 1; 32 - const LABELER_DID = "did:plc:nwrcwcrhpkgrqqvkg3lmaqky"; 33 - 34 - const LABELS: LabelRow[] = [ 35 - { 36 - id: 9, 37 - uri: "did:plc:2btolxxgou2ze2stwytv75vw", // @nyxt.dev 38 - val: "alien", 39 - cts: "2025-11-29T03:36:17.831Z", 40 - sig: { 41 - $bytes: "0jkBkfzIn7FWh3nR1pdbLCSLiEPuZEV703dffTHjf98BnIPDiELc5UtCauLXGxFbrLIqElp+fW4foOjNZX9VOg" 42 - }, 43 - }, 44 - { 45 - id: 8, 46 - uri: "did:plc:7mx2jwbmpnvzwzjid7jjtbqp", // @upcloud.com 47 - val: "alien", 48 - cts: "2025-11-27T19:42:03.314Z", 49 - sig: { 50 - $bytes: "oTuLNGtozhCACPKSDHvLmlniMUYC3ZXAqceSkuCoOiUo9NS0MGRD+QccXPegF1OTJvkwnFoQd16VKjZ9TaFeJg", 51 - }, 52 - }, 53 - { 54 - id: 7, 55 - uri: "did:plc:3fwecdnvtcscjnrx2p4n7alz", // @lewis.moe 56 - val: "alien", 57 - cts: "2025-11-27T19:42:03.413Z", 58 - sig: { 59 - $bytes: "Vxy33kT6pXqxLhRzEeIZB8POq5Uue0WZu6aMS7Za43xygcTqs/q65d4yVWQ1oQjOuARJ2Goub118CWFpa59HZQ", 60 - }, 61 - }, 62 - { 63 - id: 6, 64 - uri: "did:plc:irx36xprktslecsbopbwnh5w", // @sharpmars.nekoweb.org 65 - val: "alien", 66 - cts: "2025-11-27T18:35:30.745Z", 67 - sig: { 68 - $bytes: "m+8mx8BYnVaY+6D3lv/lIXIvwtmD3i+TnDAeQWsuvkpG2NmaC9qUSjjpSxyak/ALTysUMLFICzT5QIgHvWDt4Q", 69 - }, 70 - }, 71 - { 72 - id: 5, 73 - uri: "did:plc:alienzgwnsdb55yjfuezx2cm", // @sydney.blue 74 - val: "alien", 75 - cts: "2025-11-27T14:09:05.056Z", 76 - sig: { 77 - $bytes: "FK8mVDsMvT5LsmYyBsOb8Ldt5b8vbKJm1jVHAQdpAUgYlMzysw1NFDEAbihHuN9/qQC+tO4PpgUCWRquKQ/tig", 78 - }, 79 - }, 80 - { 81 - id: 4, 82 - uri: "did:plc:nmpjck4rv6hjscoxnwdltfyj", // @pci.express 83 - val: "alien", 84 - cts: "2025-11-27T14:08:24.986Z", 85 - sig: { 86 - $bytes: "04S18hWPJplWzyApI31U0tO3Iz/hqkFGTQlEr5rIGM9M4nkY/sA1K3Ss36jqnVMZS/jbR91aC4MDjek0xNIBTw", 87 - }, 88 - }, 89 - { 90 - id: 3, 91 - uri: "did:plc:dblbeuqpdiyfnmwptez6f3mp", // @tasky.uwu.network 92 - val: "alien", 93 - cts: "2025-11-27T13:48:30.189Z", 94 - sig: { 95 - $bytes: "GpgoIWu/QNWr43pSiWwrgST3xMt/e6OTQku12yuvRzl6bMh8yR+mHAhVu5CV3vr3UoDZOX/WpK45fMeA2Nu3OA", 96 - }, 97 - }, 98 - { 99 - id: 2, 100 - uri: "did:plc:73gqgbnvpx5syidcponjrics", // @wantedcoolhandle.tngl.sh 101 - val: "alien", 102 - cts: "2025-11-27T08:22:21.998Z", 103 - sig: { 104 - $bytes: "aM1V9IByJ2qbsZU4gEeQ1qLFawjN5dGwfSCcYs9zl5QHQx/WlAUZZGoSFrgMwNVzUx2MSwW3/4t2lSOshL1Fdg", 105 - }, 106 - }, 107 - { 108 - id: 1, 109 - uri: "did:plc:b26ewgkrnx3yvsp2cdao3ntu", // @adamperkowski.dev 110 - val: "alien", 111 - cts: "2025-11-27T06:55:57.497Z", 112 - sig: { 113 - $bytes: "JLXaxP1FcR4kwlyNu+RHvtjgHIbqR13BvHBUPBUy+Q1obemt8FYBCRqdCdvUHEqU8j/7teX430d+IQPrpQT4lg", 114 - }, 115 - } 116 - ]; 117 - 118 - const subscribers = new Set<WebSocket>(); 119 - 120 - function encodeFrame(op: OpCode, body: unknown, type?: string): Uint8Array { 121 - const header: Record<string, unknown> = { op }; 122 - if (type) header.t = type; 123 - return concatUint8([cborEncode(header), cborEncode(body)]); 124 - } 125 - 126 - function concatUint8(chunks: Uint8Array[]): Uint8Array { 127 - const total = chunks.reduce((n, c) => n + c.length, 0); 128 - const out = new Uint8Array(total); 129 - let offset = 0; 130 - for (const c of chunks) { 131 - out.set(c, offset); 132 - offset += c.length; 133 - } 134 - return out; 135 - } 136 - 137 - function toFrameLabel(row: LabelRow): LabelFrameLabel { 138 - return { 139 - ver: LABEL_VERSION, 140 - src: LABELER_DID, 141 - cid: row.cid, 142 - uri: row.uri, 143 - val: row.val, 144 - neg: false, 145 - cts: row.cts, 146 - sig: row.sig, 147 - }; 148 - } 149 - 150 - async function replay(sub: WebSocket, cursor: number | null): Promise<void> { 151 - for (const row of LABELS) { 152 - if (cursor !== null && row.id < cursor) continue; 153 - 154 - const label = toFrameLabel(row); 155 - const bytes = encodeFrame( 156 - OpCode.Message, 157 - { 158 - seq: row.id, 159 - labels: [label], 160 - }, 161 - "#labels" 162 - ); 163 - 164 - try { 165 - sub.send(bytes); 166 - } catch (err) { 167 - console.error("Failed sending replay frame:", err); 168 - break; 169 - } 170 - } 171 - } 172 - 173 - function jsonResponse(data: unknown, status = 200): Response { 174 - return new Response(JSON.stringify(data), { 175 - status, 176 - headers: { "Content-Type": "application/json" }, 177 - }); 178 - } 179 - 180 - function sendErrorAndClose(ws: WebSocket, error: unknown): void { 181 - try { 182 - const frame = encodeFrame(OpCode.Error, { 183 - error: error instanceof Error ? error.message : String(error), 184 - }); 185 - ws.send(frame); 186 - } finally { 187 - ws.close(); 188 - } 189 - } 190 - 191 - function handleQueryLabels(): Response { 192 - const labels = LABELS.map(toFrameLabel); 193 - return jsonResponse({ 194 - cursor: String(LABELS.length), 195 - labels, 196 - }); 197 - } 198 - 199 - function handleSubscribe(request: Request): Response { 200 - const upgradeHeader = request.headers.get("Upgrade"); 201 - if (upgradeHeader?.toLowerCase() !== "websocket") { 202 - return new Response("Expected Upgrade: websocket", { status: 426 }); 203 - } 204 - 205 - const url = new URL(request.url); 206 - const cursorParam = url.searchParams.get("cursor"); 207 - let cursor: number | null = null; 208 - 209 - if (cursorParam !== null) { 210 - const parsed = Number(cursorParam); 211 - if (!Number.isFinite(parsed) || parsed < 0) { 212 - return jsonResponse({ error: "Invalid cursor parameter" }, 400); 213 - } 214 - cursor = parsed; 215 - } 216 - 217 - const pair = new WebSocketPair(); 218 - const client = pair[0]; 219 - const server = pair[1]; 220 - server.accept(); 221 - 222 - subscribers.add(server); 223 - 224 - const cleanup = () => subscribers.delete(server); 225 - server.addEventListener("close", cleanup); 226 - server.addEventListener("error", cleanup); 227 - 228 - let pingInterval: number | undefined; 229 - try { 230 - pingInterval = (setInterval(() => { 231 - try { 232 - server.send(encodeFrame(OpCode.Message, { ping: Date.now() }, "#ping")); 233 - } catch { 234 - server.close(); 235 - } 236 - }, 30_000) as unknown) as number; 237 - 238 - server.addEventListener("close", () => clearInterval(pingInterval)); 239 - server.addEventListener("error", () => clearInterval(pingInterval)); 240 - } catch {} 241 - 242 - replay(server, cursor).catch((reason) => { 243 - console.error("Replay error:", reason); 244 - sendErrorAndClose(server, reason); 245 - }); 246 - 247 - return new Response(null, { 248 - status: 101, 249 - webSocket: client, 250 - }); 251 - } 252 - 253 - export default { 254 - async fetch(request: Request, _env: Env, _ctx: ExecutionContext): Promise<Response> { 255 - const url = new URL(request.url); 256 - const { pathname } = url; 257 - 258 - switch (pathname) { 259 - case "/xrpc/com.atproto.label.subscribeLabels": 260 - return handleSubscribe(request); 261 - 262 - case "/xrpc/com.atproto.label.queryLabels": 263 - return handleQueryLabels(); 264 - 265 - default: 266 - return new Response("Not Found", { status: 404 }); 267 - } 268 - }, 269 - } satisfies ExportedHandler<Env>;
+160
src/index.ts
··· 1 + import { encode as cborEncode } from "@atcute/cbor"; 2 + import { LABELS } from "./labels.ts"; 3 + 4 + export interface Env {} 5 + 6 + const LABEL_VERSION = 1; 7 + const LABELER_DID = "did:plc:nwrcwcrhpkgrqqvkg3lmaqky"; 8 + 9 + const subscribers = new Set<WebSocket>(); 10 + 11 + function encodeFrame(op: OpCode, body: unknown, type?: string): Uint8Array { 12 + const header: Record<string, unknown> = { op }; 13 + if (type) header.t = type; 14 + return concatUint8([cborEncode(header), cborEncode(body)]); 15 + } 16 + 17 + function concatUint8(chunks: Uint8Array[]): Uint8Array { 18 + const total = chunks.reduce((n, c) => n + c.length, 0); 19 + const out = new Uint8Array(total); 20 + let offset = 0; 21 + for (const c of chunks) { 22 + out.set(c, offset); 23 + offset += c.length; 24 + } 25 + return out; 26 + } 27 + 28 + function toFrameLabel(row: LabelRow): LabelFrameLabel { 29 + return { 30 + ver: LABEL_VERSION, 31 + src: LABELER_DID, 32 + cid: row.cid, 33 + uri: row.uri, 34 + val: row.val, 35 + neg: false, 36 + cts: row.cts, 37 + sig: row.sig, 38 + }; 39 + } 40 + 41 + async function replay(sub: WebSocket, cursor: number | null): Promise<void> { 42 + for (const row of LABELS) { 43 + if (cursor !== null && row.id < cursor) continue; 44 + 45 + const label = toFrameLabel(row); 46 + const bytes = encodeFrame( 47 + OpCode.Message, 48 + { 49 + seq: row.id, 50 + labels: [label], 51 + }, 52 + "#labels" 53 + ); 54 + 55 + try { 56 + sub.send(bytes); 57 + } catch (err) { 58 + console.error("Failed sending replay frame:", err); 59 + break; 60 + } 61 + } 62 + } 63 + 64 + function jsonResponse(data: unknown, status = 200): Response { 65 + return new Response(JSON.stringify(data), { 66 + status, 67 + headers: { "Content-Type": "application/json" }, 68 + }); 69 + } 70 + 71 + function sendErrorAndClose(ws: WebSocket, error: unknown): void { 72 + try { 73 + const frame = encodeFrame(OpCode.Error, { 74 + error: error instanceof Error ? error.message : String(error), 75 + }); 76 + ws.send(frame); 77 + } finally { 78 + ws.close(); 79 + } 80 + } 81 + 82 + function handleQueryLabels(): Response { 83 + const labels = LABELS.map(toFrameLabel); 84 + return jsonResponse({ 85 + cursor: String(LABELS.length), 86 + labels, 87 + }); 88 + } 89 + 90 + function handleSubscribe(request: Request): Response { 91 + const upgradeHeader = request.headers.get("Upgrade"); 92 + if (upgradeHeader?.toLowerCase() !== "websocket") { 93 + return new Response("Expected Upgrade: websocket", { status: 426 }); 94 + } 95 + 96 + const url = new URL(request.url); 97 + const cursorParam = url.searchParams.get("cursor"); 98 + let cursor: number | null = null; 99 + 100 + if (cursorParam !== null) { 101 + const parsed = Number(cursorParam); 102 + if (!Number.isFinite(parsed) || parsed < 0) { 103 + return jsonResponse({ error: "Invalid cursor parameter" }, 400); 104 + } 105 + cursor = parsed; 106 + } 107 + 108 + const pair = new WebSocketPair(); 109 + const client = pair[0]; 110 + const server = pair[1]; 111 + server.accept(); 112 + 113 + subscribers.add(server); 114 + 115 + const cleanup = () => subscribers.delete(server); 116 + server.addEventListener("close", cleanup); 117 + server.addEventListener("error", cleanup); 118 + 119 + let pingInterval: number | undefined; 120 + try { 121 + pingInterval = (setInterval(() => { 122 + try { 123 + server.send(encodeFrame(OpCode.Message, { ping: Date.now() }, "#ping")); 124 + } catch { 125 + server.close(); 126 + } 127 + }, 30_000) as unknown) as number; 128 + 129 + server.addEventListener("close", () => clearInterval(pingInterval)); 130 + server.addEventListener("error", () => clearInterval(pingInterval)); 131 + } catch {} 132 + 133 + replay(server, cursor).catch((reason) => { 134 + console.error("Replay error:", reason); 135 + sendErrorAndClose(server, reason); 136 + }); 137 + 138 + return new Response(null, { 139 + status: 101, 140 + webSocket: client, 141 + }); 142 + } 143 + 144 + export default { 145 + async fetch(request: Request, _env: Env, _ctx: ExecutionContext): Promise<Response> { 146 + const url = new URL(request.url); 147 + const { pathname } = url; 148 + 149 + switch (pathname) { 150 + case "/xrpc/com.atproto.label.subscribeLabels": 151 + return handleSubscribe(request); 152 + 153 + case "/xrpc/com.atproto.label.queryLabels": 154 + return handleQueryLabels(); 155 + 156 + default: 157 + return new Response("Not Found", { status: 404 }); 158 + } 159 + }, 160 + } satisfies ExportedHandler<Env>;
+83
src/labels.ts
··· 1 + export const LABELS: LabelRow[] = [ 2 + { 3 + id: 9, 4 + uri: "did:plc:2btolxxgou2ze2stwytv75vw", // @nyxt.dev 5 + val: "alien", 6 + cts: "2025-11-29T03:36:17.831Z", 7 + sig: { 8 + $bytes: "0jkBkfzIn7FWh3nR1pdbLCSLiEPuZEV703dffTHjf98BnIPDiELc5UtCauLXGxFbrLIqElp+fW4foOjNZX9VOg" 9 + }, 10 + }, 11 + { 12 + id: 8, 13 + uri: "did:plc:7mx2jwbmpnvzwzjid7jjtbqp", // @upcloud.com 14 + val: "alien", 15 + cts: "2025-11-27T19:42:03.314Z", 16 + sig: { 17 + $bytes: "oTuLNGtozhCACPKSDHvLmlniMUYC3ZXAqceSkuCoOiUo9NS0MGRD+QccXPegF1OTJvkwnFoQd16VKjZ9TaFeJg", 18 + }, 19 + }, 20 + { 21 + id: 7, 22 + uri: "did:plc:3fwecdnvtcscjnrx2p4n7alz", // @lewis.moe 23 + val: "alien", 24 + cts: "2025-11-27T19:42:03.413Z", 25 + sig: { 26 + $bytes: "Vxy33kT6pXqxLhRzEeIZB8POq5Uue0WZu6aMS7Za43xygcTqs/q65d4yVWQ1oQjOuARJ2Goub118CWFpa59HZQ", 27 + }, 28 + }, 29 + { 30 + id: 6, 31 + uri: "did:plc:irx36xprktslecsbopbwnh5w", // @sharpmars.nekoweb.org 32 + val: "alien", 33 + cts: "2025-11-27T18:35:30.745Z", 34 + sig: { 35 + $bytes: "m+8mx8BYnVaY+6D3lv/lIXIvwtmD3i+TnDAeQWsuvkpG2NmaC9qUSjjpSxyak/ALTysUMLFICzT5QIgHvWDt4Q", 36 + }, 37 + }, 38 + { 39 + id: 5, 40 + uri: "did:plc:alienzgwnsdb55yjfuezx2cm", // @sydney.blue 41 + val: "alien", 42 + cts: "2025-11-27T14:09:05.056Z", 43 + sig: { 44 + $bytes: "FK8mVDsMvT5LsmYyBsOb8Ldt5b8vbKJm1jVHAQdpAUgYlMzysw1NFDEAbihHuN9/qQC+tO4PpgUCWRquKQ/tig", 45 + }, 46 + }, 47 + { 48 + id: 4, 49 + uri: "did:plc:nmpjck4rv6hjscoxnwdltfyj", // @pci.express 50 + val: "alien", 51 + cts: "2025-11-27T14:08:24.986Z", 52 + sig: { 53 + $bytes: "04S18hWPJplWzyApI31U0tO3Iz/hqkFGTQlEr5rIGM9M4nkY/sA1K3Ss36jqnVMZS/jbR91aC4MDjek0xNIBTw", 54 + }, 55 + }, 56 + { 57 + id: 3, 58 + uri: "did:plc:dblbeuqpdiyfnmwptez6f3mp", // @tasky.uwu.network 59 + val: "alien", 60 + cts: "2025-11-27T13:48:30.189Z", 61 + sig: { 62 + $bytes: "GpgoIWu/QNWr43pSiWwrgST3xMt/e6OTQku12yuvRzl6bMh8yR+mHAhVu5CV3vr3UoDZOX/WpK45fMeA2Nu3OA", 63 + }, 64 + }, 65 + { 66 + id: 2, 67 + uri: "did:plc:73gqgbnvpx5syidcponjrics", // @wantedcoolhandle.tngl.sh 68 + val: "alien", 69 + cts: "2025-11-27T08:22:21.998Z", 70 + sig: { 71 + $bytes: "aM1V9IByJ2qbsZU4gEeQ1qLFawjN5dGwfSCcYs9zl5QHQx/WlAUZZGoSFrgMwNVzUx2MSwW3/4t2lSOshL1Fdg", 72 + }, 73 + }, 74 + { 75 + id: 1, 76 + uri: "did:plc:b26ewgkrnx3yvsp2cdao3ntu", // @adamperkowski.dev 77 + val: "alien", 78 + cts: "2025-11-27T06:55:57.497Z", 79 + sig: { 80 + $bytes: "JLXaxP1FcR4kwlyNu+RHvtjgHIbqR13BvHBUPBUy+Q1obemt8FYBCRqdCdvUHEqU8j/7teX430d+IQPrpQT4lg", 81 + }, 82 + } 83 + ];
+26
src/types.ts
··· 1 + import type { At } from "@atcute/client/lexicons"; 2 + 3 + interface LabelRow { 4 + id: number; 5 + uri: string; 6 + val: string; 7 + cts: string; 8 + sig: { $bytes: string }; 9 + cid?: At.CID; 10 + } 11 + 12 + interface LabelFrameLabel { 13 + ver: number; 14 + src: At.DID; 15 + cid?: At.CID; 16 + uri: string; 17 + val: string; 18 + neg: boolean; 19 + cts: string; 20 + sig: { $bytes: string }; 21 + } 22 + 23 + const enum OpCode { 24 + Error = -1, 25 + Message = 1, 26 + }
+1 -1
wrangler.toml
··· 1 1 name = "lebel" 2 - main = "index.ts" 2 + main = "src/index.ts" 3 3 compatibility_date = "2025-11-27" 4 4 compatibility_flags = ["nodejs_compat"] 5 5